Revision 76f13133 target-i386/translate.c
b/target-i386/translate.c | ||
---|---|---|
4182 | 4182 |
if (!(s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_ADX)) { |
4183 | 4183 |
goto illegal_op; |
4184 | 4184 |
} else { |
4185 |
TCGv carry_in, carry_out; |
|
4185 |
TCGv carry_in, carry_out, zero;
|
|
4186 | 4186 |
int end_op; |
4187 | 4187 |
|
4188 | 4188 |
ot = (s->dflag == 2 ? OT_QUAD : OT_LONG); |
... | ... | |
4242 | 4242 |
#endif |
4243 | 4243 |
default: |
4244 | 4244 |
/* Otherwise compute the carry-out in two steps. */ |
4245 |
tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_regs[reg]); |
|
4246 |
tcg_gen_setcond_tl(TCG_COND_LTU, cpu_tmp4, |
|
4247 |
cpu_T[0], cpu_regs[reg]); |
|
4248 |
tcg_gen_add_tl(cpu_regs[reg], cpu_T[0], carry_in); |
|
4249 |
tcg_gen_setcond_tl(TCG_COND_LTU, carry_out, |
|
4250 |
cpu_regs[reg], cpu_T[0]); |
|
4251 |
tcg_gen_or_tl(carry_out, carry_out, cpu_tmp4); |
|
4245 |
zero = tcg_const_tl(0); |
|
4246 |
tcg_gen_add2_tl(cpu_T[0], carry_out, |
|
4247 |
cpu_T[0], zero, |
|
4248 |
carry_in, zero); |
|
4249 |
tcg_gen_add2_tl(cpu_regs[reg], carry_out, |
|
4250 |
cpu_regs[reg], carry_out, |
|
4251 |
cpu_T[0], zero); |
|
4252 |
tcg_temp_free(zero); |
|
4252 | 4253 |
break; |
4253 | 4254 |
} |
4254 |
/* We began with all flags computed to CC_SRC, and we |
|
4255 |
have now placed the carry-out in CC_DST. All that |
|
4256 |
is left is to record the CC_OP. */ |
|
4257 | 4255 |
set_cc_op(s, end_op); |
4258 | 4256 |
} |
4259 | 4257 |
break; |
Also available in: Unified diff