summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2022-06-15 16:16:33 -0400
committerTakashi Kokubun <takashikkbn@gmail.com>2022-08-29 08:46:56 -0700
commitabea8c8983aef411f7e6a2afbfbc25e31b2f5486 (patch)
tree1b9bddd5f7e2c51ee21f6ea7c6de7aebcbcdd3be
parent1923842b3dd97cf00d1511b7962a509dd650f06b (diff)
Add stores to one of the tests
-rw-r--r--yjit/src/backend/ir.rs2
-rw-r--r--yjit/src/backend/tests.rs8
-rw-r--r--yjit/src/backend/x86_64/mod.rs3
3 files changed, 11 insertions, 2 deletions
diff --git a/yjit/src/backend/ir.rs b/yjit/src/backend/ir.rs
index 4f1aafef99..f1146f152e 100644
--- a/yjit/src/backend/ir.rs
+++ b/yjit/src/backend/ir.rs
@@ -86,6 +86,7 @@ pub enum Op
// Low-level conditional jump instructions
Jbe,
Je,
+ Jz,
Jnz,
// Push and pop registers to/from the C stack
@@ -707,6 +708,7 @@ macro_rules! def_push_2_opnd_no_out {
def_push_1_opnd_no_out!(jmp_opnd, Op::JmpOpnd);
def_push_jcc!(je, Op::Je);
def_push_jcc!(jbe, Op::Jbe);
+def_push_jcc!(jz, Op::Jz);
def_push_jcc!(jnz, Op::Jnz);
def_push_2_opnd!(add, Op::Add);
def_push_2_opnd!(sub, Op::Sub);
diff --git a/yjit/src/backend/tests.rs b/yjit/src/backend/tests.rs
index 45b8fdfb8a..afb4c42fa8 100644
--- a/yjit/src/backend/tests.rs
+++ b/yjit/src/backend/tests.rs
@@ -146,8 +146,12 @@ fn test_reuse_reg()
let v0 = asm.add(Opnd::mem(64, SP, 0), Opnd::UImm(1));
let v1 = asm.add(Opnd::mem(64, SP, 8), Opnd::UImm(1));
- let v2 = asm.add(v0, Opnd::UImm(1));
- asm.add(v0, v2);
+
+ let v2 = asm.add(v0, Opnd::UImm(1)); // Reuse v1 register
+ let v3 = asm.add(v0, v2);
+
+ asm.store(Opnd::mem(64, SP, 0), v2);
+ asm.store(Opnd::mem(64, SP, 8), v3);
asm.compile_with_num_regs(&mut cb, 2);
}
diff --git a/yjit/src/backend/x86_64/mod.rs b/yjit/src/backend/x86_64/mod.rs
index 4d24378370..7dcf41600d 100644
--- a/yjit/src/backend/x86_64/mod.rs
+++ b/yjit/src/backend/x86_64/mod.rs
@@ -187,7 +187,10 @@ impl Assembler
Op::JmpOpnd => jmp_rm(cb, insn.opnds[0].into()),
+ // Conditional jump to a label
Op::Je => je_label(cb, insn.target.unwrap().unwrap_label_idx()),
+ Op::Jz => jz_label(cb, insn.target.unwrap().unwrap_label_idx()),
+ Op::Jnz => jnz_label(cb, insn.target.unwrap().unwrap_label_idx()),
// Atomically increment a counter at a given memory location
Op::IncrCounter => {