aboutsummaryrefslogtreecommitdiffstats
path: root/yjit/src/asm/arm64
diff options
context:
space:
mode:
Diffstat (limited to 'yjit/src/asm/arm64')
-rw-r--r--yjit/src/asm/arm64/arg/bitmask_imm.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/yjit/src/asm/arm64/arg/bitmask_imm.rs b/yjit/src/asm/arm64/arg/bitmask_imm.rs
index 847b735eaa..220a7d697e 100644
--- a/yjit/src/asm/arm64/arg/bitmask_imm.rs
+++ b/yjit/src/asm/arm64/arg/bitmask_imm.rs
@@ -136,7 +136,7 @@ impl From<BitmaskImmediate> for u32 {
fn from(bitmask: BitmaskImmediate) -> Self {
0
| (((bitmask.n as u32) & 1) << 12)
- | (bitmask.immr << 6) as u32
+ | ((bitmask.immr as u32) << 6)
| bitmask.imms as u32
}
}
@@ -153,6 +153,13 @@ mod tests {
}
#[test]
+ fn test_negative() {
+ let bitmask: BitmaskImmediate = (-9_i64 as u64).try_into().unwrap();
+ let encoded: u32 = bitmask.into();
+ assert_eq!(7998, encoded);
+ }
+
+ #[test]
fn test_size_2_minimum() {
let bitmask = BitmaskImmediate::try_from(0x5555555555555555);
assert!(matches!(bitmask, Ok(BitmaskImmediate { n: 0, immr: 0b000000, imms: 0b111100 })));