Fix bug with opt_lt, csel on x86

This commit is contained in:
Maxime Chevalier-Boisvert 2022-07-22 12:01:24 -04:00 committed by Takashi Kokubun
parent 477c2df3fa
commit e9f9b8f43b
No known key found for this signature in database
GPG Key ID: 6FFC433B12EE23DD
2 changed files with 17 additions and 17 deletions

View File

@ -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

View File

@ -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),