60c7dd22e1
When ADCX is followed by ADOX or vice versa, the second instruction's carry comes from EFLAGS and the condition codes use the CC_OP_ADCOX operation. Retrieving the carry from EFLAGS is handled by this bit of gen_ADCOX: tcg_gen_extract_tl(carry_in, cpu_cc_src, ctz32(cc_op == CC_OP_ADCX ? CC_C : CC_O), 1); Unfortunately, in this case cc_op has been overwritten by the previous "if" statement to CC_OP_ADCOX. This works by chance when the first instruction is ADCX; however, if the first instruction is ADOX, ADCX will incorrectly take its carry from OF instead of CF. Fix by moving the computation of the new cc_op at the end of the function. The included exhaustive test case fails without this patch and passes afterwards. Because ADCX/ADOX need not be invoked through the VEX prefix, this regression bisects to commit |
||
---|---|---|
.. | ||
sysemu | ||
user | ||
bpt_helper.c | ||
cc_helper_template.h | ||
cc_helper.c | ||
decode-new.c.inc | ||
decode-new.h | ||
emit.c.inc | ||
excp_helper.c | ||
fpu_helper.c | ||
helper-tcg.h | ||
int_helper.c | ||
mem_helper.c | ||
meson.build | ||
misc_helper.c | ||
mpx_helper.c | ||
seg_helper.c | ||
seg_helper.h | ||
tcg-cpu.c | ||
tcg-cpu.h | ||
tcg-stub.c | ||
translate.c |