diff options
| -rw-r--r-- | yjit/src/backend/tests.rs | 15 | ||||
| -rw-r--r-- | yjit/src/backend/x86_64/mod.rs | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/yjit/src/backend/tests.rs b/yjit/src/backend/tests.rs index 9ec986f734..d72f0ec0ac 100644 --- a/yjit/src/backend/tests.rs +++ b/yjit/src/backend/tests.rs @@ -138,6 +138,21 @@ fn test_load_reg() asm.compile_with_num_regs(&mut cb, 1); } +// Test load of a GC'd value +#[test] +fn test_load_value() +{ + let (mut asm, mut cb) = setup_asm(); + + let gcd_value = VALUE(0xFFFFFFFFFFFF00); + assert!(!gcd_value.special_const_p()); + + let out = asm.load(Opnd::Value(gcd_value)); + asm.mov(Opnd::mem(64, SP, 0), out); + + asm.compile_with_num_regs(&mut cb, 1); +} + // Multiple registers needed and register reuse #[test] fn test_reuse_reg() diff --git a/yjit/src/backend/x86_64/mod.rs b/yjit/src/backend/x86_64/mod.rs index 19b5096a26..7a26650549 100644 --- a/yjit/src/backend/x86_64/mod.rs +++ b/yjit/src/backend/x86_64/mod.rs @@ -44,6 +44,7 @@ impl From<Opnd> for X86Opnd { Opnd::UImm(val) => uimm_opnd(val), Opnd::Imm(val) => imm_opnd(val), + Opnd::Value(VALUE(uimm)) => uimm_opnd(uimm as u64), // General-purpose register Opnd::Reg(reg) => X86Opnd::Reg(reg), |
