summaryrefslogtreecommitdiff
path: root/yjit/src/backend
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2022-07-22 12:01:24 -0400
committerTakashi Kokubun <takashikkbn@gmail.com>2022-08-29 08:47:03 -0700
commite9f9b8f43b2afdc437ab1b8ab883bab0525a3f43 (patch)
treecf30e94d1afea0367ba213abc79c00d3381366f8 /yjit/src/backend
parent477c2df3fad22271958b92bdfafbae7155fbebb4 (diff)
Fix bug with opt_lt, csel on x86
Diffstat (limited to 'yjit/src/backend')
-rw-r--r--yjit/src/backend/x86_64/mod.rs32
1 files changed, 16 insertions, 16 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