x64: fix miscompilation of select.i128 (#4017)
Issue #3963 identified a miscompilation with select in which the second in the pair of `CMOV`s (one pair per `i128` register) used the wrong flag. This change fixes the error in the x64 ISLE helper function emitting these `CMOV` instructions.
This commit is contained in:
@@ -1780,9 +1780,9 @@
|
||||
(tmp2 WritableGpr (temp_writable_gpr))
|
||||
(size OperandSize (OperandSize.Size64))
|
||||
(cmove1 MInst (MInst.Cmove size cc1 (value_regs_get_gpr cons 0) (value_regs_get_gpr alt 0) tmp1))
|
||||
(cmove2 MInst (MInst.Cmove size cc1 (value_regs_get_gpr cons 0) tmp1 dst1))
|
||||
(cmove2 MInst (MInst.Cmove size cc2 (value_regs_get_gpr cons 0) tmp1 dst1))
|
||||
(cmove3 MInst (MInst.Cmove size cc1 (value_regs_get_gpr cons 1) (value_regs_get_gpr alt 1) tmp2))
|
||||
(cmove4 MInst (MInst.Cmove size cc1 (value_regs_get_gpr cons 1) tmp2 dst2)))
|
||||
(cmove4 MInst (MInst.Cmove size cc2 (value_regs_get_gpr cons 1) tmp2 dst2)))
|
||||
(ConsumesFlags.ConsumesFlagsFourTimesReturnsValueRegs
|
||||
cmove1
|
||||
cmove2
|
||||
|
||||
Reference in New Issue
Block a user