target/i386: Don't use tcg_temp_local_new
Since tcg_temp_new is now identical, use that. In some cases we can avoid a copy from A0 or T0. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
e3eb3dab50
commit
3a5d177322
@ -3426,13 +3426,10 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
|||||||
if (mod == 3) {
|
if (mod == 3) {
|
||||||
goto illegal_op;
|
goto illegal_op;
|
||||||
}
|
}
|
||||||
a0 = tcg_temp_local_new();
|
a0 = s->A0;
|
||||||
t0 = tcg_temp_local_new();
|
t0 = s->T0;
|
||||||
label1 = gen_new_label();
|
label1 = gen_new_label();
|
||||||
|
|
||||||
tcg_gen_mov_tl(a0, s->A0);
|
|
||||||
tcg_gen_mov_tl(t0, s->T0);
|
|
||||||
|
|
||||||
gen_set_label(label1);
|
gen_set_label(label1);
|
||||||
t1 = tcg_temp_new();
|
t1 = tcg_temp_new();
|
||||||
t2 = tcg_temp_new();
|
t2 = tcg_temp_new();
|
||||||
@ -3444,9 +3441,7 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
|||||||
tcg_gen_brcond_tl(TCG_COND_NE, t0, t2, label1);
|
tcg_gen_brcond_tl(TCG_COND_NE, t0, t2, label1);
|
||||||
|
|
||||||
tcg_temp_free(t2);
|
tcg_temp_free(t2);
|
||||||
tcg_temp_free(a0);
|
|
||||||
tcg_gen_neg_tl(s->T0, t0);
|
tcg_gen_neg_tl(s->T0, t0);
|
||||||
tcg_temp_free(t0);
|
|
||||||
} else {
|
} else {
|
||||||
tcg_gen_neg_tl(s->T0, s->T0);
|
tcg_gen_neg_tl(s->T0, s->T0);
|
||||||
if (mod != 3) {
|
if (mod != 3) {
|
||||||
@ -6248,13 +6243,13 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
TCGLabel *label1;
|
TCGLabel *label1;
|
||||||
TCGv t0, t1, t2, a0;
|
TCGv t0, t1, t2;
|
||||||
|
|
||||||
if (!PE(s) || VM86(s))
|
if (!PE(s) || VM86(s))
|
||||||
goto illegal_op;
|
goto illegal_op;
|
||||||
t0 = tcg_temp_local_new();
|
t0 = tcg_temp_new();
|
||||||
t1 = tcg_temp_local_new();
|
t1 = tcg_temp_new();
|
||||||
t2 = tcg_temp_local_new();
|
t2 = tcg_temp_new();
|
||||||
ot = MO_16;
|
ot = MO_16;
|
||||||
modrm = x86_ldub_code(env, s);
|
modrm = x86_ldub_code(env, s);
|
||||||
reg = (modrm >> 3) & 7;
|
reg = (modrm >> 3) & 7;
|
||||||
@ -6263,11 +6258,8 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
|||||||
if (mod != 3) {
|
if (mod != 3) {
|
||||||
gen_lea_modrm(env, s, modrm);
|
gen_lea_modrm(env, s, modrm);
|
||||||
gen_op_ld_v(s, ot, t0, s->A0);
|
gen_op_ld_v(s, ot, t0, s->A0);
|
||||||
a0 = tcg_temp_local_new();
|
|
||||||
tcg_gen_mov_tl(a0, s->A0);
|
|
||||||
} else {
|
} else {
|
||||||
gen_op_mov_v_reg(s, ot, t0, rm);
|
gen_op_mov_v_reg(s, ot, t0, rm);
|
||||||
a0 = NULL;
|
|
||||||
}
|
}
|
||||||
gen_op_mov_v_reg(s, ot, t1, reg);
|
gen_op_mov_v_reg(s, ot, t1, reg);
|
||||||
tcg_gen_andi_tl(s->tmp0, t0, 3);
|
tcg_gen_andi_tl(s->tmp0, t0, 3);
|
||||||
@ -6280,8 +6272,7 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
|||||||
tcg_gen_movi_tl(t2, CC_Z);
|
tcg_gen_movi_tl(t2, CC_Z);
|
||||||
gen_set_label(label1);
|
gen_set_label(label1);
|
||||||
if (mod != 3) {
|
if (mod != 3) {
|
||||||
gen_op_st_v(s, ot, t0, a0);
|
gen_op_st_v(s, ot, t0, s->A0);
|
||||||
tcg_temp_free(a0);
|
|
||||||
} else {
|
} else {
|
||||||
gen_op_mov_reg_v(s, ot, rm, t0);
|
gen_op_mov_reg_v(s, ot, rm, t0);
|
||||||
}
|
}
|
||||||
@ -6304,7 +6295,7 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
|||||||
modrm = x86_ldub_code(env, s);
|
modrm = x86_ldub_code(env, s);
|
||||||
reg = ((modrm >> 3) & 7) | REX_R(s);
|
reg = ((modrm >> 3) & 7) | REX_R(s);
|
||||||
gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0);
|
gen_ldst_modrm(env, s, modrm, MO_16, OR_TMP0, 0);
|
||||||
t0 = tcg_temp_local_new();
|
t0 = tcg_temp_new();
|
||||||
gen_update_cc_op(s);
|
gen_update_cc_op(s);
|
||||||
if (b == 0x102) {
|
if (b == 0x102) {
|
||||||
gen_helper_lar(t0, cpu_env, s->T0);
|
gen_helper_lar(t0, cpu_env, s->T0);
|
||||||
@ -7052,7 +7043,7 @@ static void i386_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cpu)
|
|||||||
dc->tmp2_i32 = tcg_temp_new_i32();
|
dc->tmp2_i32 = tcg_temp_new_i32();
|
||||||
dc->tmp3_i32 = tcg_temp_new_i32();
|
dc->tmp3_i32 = tcg_temp_new_i32();
|
||||||
dc->tmp4 = tcg_temp_new();
|
dc->tmp4 = tcg_temp_new();
|
||||||
dc->cc_srcT = tcg_temp_local_new();
|
dc->cc_srcT = tcg_temp_new();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i386_tr_tb_start(DisasContextBase *db, CPUState *cpu)
|
static void i386_tr_tb_start(DisasContextBase *db, CPUState *cpu)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user