diff options
| author | Richard Henderson | 2013-02-20 08:52:00 +0100 |
|---|---|---|
| committer | Blue Swirl | 2013-02-23 18:25:29 +0100 |
| commit | 76f131332310d8317880ef73a2bc90725d857ed3 (patch) | |
| tree | e47e4754d11de992710bdbfbdbf33dac46dbd7ce | |
| parent | tcg-arm: Implement muls2_i32 (diff) | |
| download | qemu-76f131332310d8317880ef73a2bc90725d857ed3.tar.gz qemu-76f131332310d8317880ef73a2bc90725d857ed3.tar.xz qemu-76f131332310d8317880ef73a2bc90725d857ed3.zip | |
target-i386: Use add2 to implement the ADX extension
Signed-off-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
| -rw-r--r-- | target-i386/translate.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/target-i386/translate.c b/target-i386/translate.c index 439d19efe0..605cd88bd2 100644 --- a/target-i386/translate.c +++ b/target-i386/translate.c @@ -4182,7 +4182,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b, if (!(s->cpuid_7_0_ebx_features & CPUID_7_0_EBX_ADX)) { goto illegal_op; } else { - TCGv carry_in, carry_out; + TCGv carry_in, carry_out, zero; int end_op; ot = (s->dflag == 2 ? OT_QUAD : OT_LONG); @@ -4242,18 +4242,16 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b, #endif default: /* Otherwise compute the carry-out in two steps. */ - tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_regs[reg]); - tcg_gen_setcond_tl(TCG_COND_LTU, cpu_tmp4, - cpu_T[0], cpu_regs[reg]); - tcg_gen_add_tl(cpu_regs[reg], cpu_T[0], carry_in); - tcg_gen_setcond_tl(TCG_COND_LTU, carry_out, - cpu_regs[reg], cpu_T[0]); - tcg_gen_or_tl(carry_out, carry_out, cpu_tmp4); + zero = tcg_const_tl(0); + tcg_gen_add2_tl(cpu_T[0], carry_out, + cpu_T[0], zero, + carry_in, zero); + tcg_gen_add2_tl(cpu_regs[reg], carry_out, + cpu_regs[reg], carry_out, + cpu_T[0], zero); + tcg_temp_free(zero); break; } - /* We began with all flags computed to CC_SRC, and we - have now placed the carry-out in CC_DST. All that - is left is to record the CC_OP. */ set_cc_op(s, end_op); } break; |
