diff options
Diffstat (limited to 'yjit/src/asm/arm64')
-rw-r--r-- | yjit/src/asm/arm64/arg/bitmask_imm.rs | 9 |
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 }))); |