diff options
| author | Maxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com> | 2022-07-07 16:28:17 -0400 |
|---|---|---|
| committer | Takashi Kokubun <takashikkbn@gmail.com> | 2022-08-29 08:46:59 -0700 |
| commit | ab2fa6ebddc13679452ad9f0fc3a7b630a1cbe3a (patch) | |
| tree | ae392fc66b8fc80a2756aff1bc52646f1c3b3332 | |
| parent | 580f26959eb31d523ac21d640e21ddbe70779512 (diff) | |
Add a backend test with a load of a GC'd VALUE
| -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), |
