[前][次][番号順一覧][スレッド一覧]

ruby-changes:73164

From: Maxime <ko1@a...>
Date: Tue, 30 Aug 2022 00:57:43 +0900 (JST)
Subject: [ruby-changes:73164] ab2fa6ebdd (master): Add a backend test with a load of a GC'd VALUE

https://git.ruby-lang.org/ruby.git/commit/?id=ab2fa6ebdd

From ab2fa6ebddc13679452ad9f0fc3a7b630a1cbe3a Mon Sep 17 00:00:00 2001
From: Maxime Chevalier-Boisvert <maxime.chevalierboisvert@s...>
Date: Thu, 7 Jul 2022 16:28:17 -0400
Subject: Add a backend test with a load of a GC'd VALUE

---
 yjit/src/backend/tests.rs      | 15 +++++++++++++++
 yjit/src/backend/x86_64/mod.rs |  1 +
 2 files changed, 16 insertions(+)

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() https://github.com/ruby/ruby/blob/trunk/yjit/src/backend/tests.rs#L138
     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 { https://github.com/ruby/ruby/blob/trunk/yjit/src/backend/x86_64/mod.rs#L44
 
             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),
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]