summaryrefslogtreecommitdiff
path: root/yjit/src
diff options
context:
space:
mode:
Diffstat (limited to 'yjit/src')
-rw-r--r--yjit/src/backend/x86_64/mod.rs32
-rw-r--r--yjit/src/codegen.rs2
2 files changed, 17 insertions, 17 deletions
diff --git a/yjit/src/backend/x86_64/mod.rs b/yjit/src/backend/x86_64/mod.rs
index 3140c86b2e..7b84e62134 100644
--- a/yjit/src/backend/x86_64/mod.rs
+++ b/yjit/src/backend/x86_64/mod.rs
@@ -418,36 +418,36 @@ impl Assembler
Op::Breakpoint => int3(cb),
Op::CSelZ => {
- mov(cb, insn.out.into(), insn.opnds[1].into());
- cmovz(cb, insn.out.into(), insn.opnds[0].into());
+ mov(cb, insn.out.into(), insn.opnds[0].into());
+ cmovnz(cb, insn.out.into(), insn.opnds[1].into());
},
Op::CSelNZ => {
- mov(cb, insn.out.into(), insn.opnds[1].into());
- cmovnz(cb, insn.out.into(), insn.opnds[0].into());
+ mov(cb, insn.out.into(), insn.opnds[0].into());
+ cmovz(cb, insn.out.into(), insn.opnds[1].into());
},
Op::CSelE => {
- mov(cb, insn.out.into(), insn.opnds[1].into());
- cmove(cb, insn.out.into(), insn.opnds[0].into());
+ mov(cb, insn.out.into(), insn.opnds[0].into());
+ cmovne(cb, insn.out.into(), insn.opnds[1].into());
},
Op::CSelNE => {
- mov(cb, insn.out.into(), insn.opnds[1].into());
- cmovne(cb, insn.out.into(), insn.opnds[0].into());
+ mov(cb, insn.out.into(), insn.opnds[0].into());
+ cmove(cb, insn.out.into(), insn.opnds[1].into());
},
Op::CSelL => {
- mov(cb, insn.out.into(), insn.opnds[1].into());
- cmovl(cb, insn.out.into(), insn.opnds[0].into());
+ mov(cb, insn.out.into(), insn.opnds[0].into());
+ cmovge(cb, insn.out.into(), insn.opnds[1].into());
},
Op::CSelLE => {
- mov(cb, insn.out.into(), insn.opnds[1].into());
- cmovle(cb, insn.out.into(), insn.opnds[0].into());
+ mov(cb, insn.out.into(), insn.opnds[0].into());
+ cmovg(cb, insn.out.into(), insn.opnds[1].into());
},
Op::CSelG => {
- mov(cb, insn.out.into(), insn.opnds[1].into());
- cmovg(cb, insn.out.into(), insn.opnds[0].into());
+ mov(cb, insn.out.into(), insn.opnds[0].into());
+ cmovle(cb, insn.out.into(), insn.opnds[1].into());
},
Op::CSelGE => {
- mov(cb, insn.out.into(), insn.opnds[1].into());
- cmovge(cb, insn.out.into(), insn.opnds[0].into());
+ mov(cb, insn.out.into(), insn.opnds[0].into());
+ cmovl(cb, insn.out.into(), insn.opnds[1].into());
},
// We want to keep the panic here because some instructions that
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index a1fd4df35d..9f39c77bb6 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -5990,7 +5990,7 @@ fn get_gen_fn(opcode: VALUE) -> Option<InsnGenFn> {
YARVINSN_newarray => Some(gen_newarray),
//YARVINSN_duparray => Some(gen_duparray),
//YARVINSN_checktype => Some(gen_checktype),
- //YARVINSN_opt_lt => Some(gen_opt_lt),
+ YARVINSN_opt_lt => Some(gen_opt_lt),
/*
YARVINSN_opt_le => Some(gen_opt_le),
YARVINSN_opt_gt => Some(gen_opt_gt),