The s390x instruction selector for Ist_CAS, in its handling of "compare
double and swap", adds spurious register moves after the CDAS operation
itself. These moves overwrite registers returned by calls to
s390_isel_int_expr(), potentially causing corruption of temp values.
Delete the spurious move operations after CDAS.
addInstr(env, s390_insn_cdas(8, r8, r9, op2, r10, r11,
old_high, old_low, r1));
}
- addInstr(env, s390_insn_move(8, op1_high, r8));
- addInstr(env, s390_insn_move(8, op1_low, r9));
- addInstr(env, s390_insn_move(8, op3_high, r10));
- addInstr(env, s390_insn_move(8, op3_low, r11));
return;
}
break;