target/i386: prepare for implementation of STOS/SCAS in new decoder
Do not use gen_op, and pull the load from the accumulator into disas_insn. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
9a5922d6bd
commit
3497f1646f
@ -1264,7 +1264,6 @@ static TCGLabel *gen_jz_ecx_string(DisasContext *s)
|
||||
|
||||
static void gen_stos(DisasContext *s, MemOp ot)
|
||||
{
|
||||
gen_op_mov_v_reg(s, MO_32, s->T0, R_EAX);
|
||||
gen_string_movl_A0_EDI(s);
|
||||
gen_op_st_v(s, ot, s->T0, s->A0);
|
||||
gen_op_add_reg(s, s->aflag, R_EDI, gen_compute_Dshift(s, ot));
|
||||
@ -1282,7 +1281,11 @@ static void gen_scas(DisasContext *s, MemOp ot)
|
||||
{
|
||||
gen_string_movl_A0_EDI(s);
|
||||
gen_op_ld_v(s, ot, s->T1, s->A0);
|
||||
gen_op(s, OP_CMPL, ot, R_EAX);
|
||||
tcg_gen_mov_tl(cpu_cc_src, s->T1);
|
||||
tcg_gen_mov_tl(s->cc_srcT, s->T0);
|
||||
tcg_gen_sub_tl(cpu_cc_dst, s->T0, s->T1);
|
||||
set_cc_op(s, CC_OP_SUBB + ot);
|
||||
|
||||
gen_op_add_reg(s, s->aflag, R_EDI, gen_compute_Dshift(s, ot));
|
||||
}
|
||||
|
||||
@ -4952,6 +4955,7 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
||||
case 0xaa: /* stosS */
|
||||
case 0xab:
|
||||
ot = mo_b_d(b, dflag);
|
||||
gen_op_mov_v_reg(s, MO_32, s->T0, R_EAX);
|
||||
if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) {
|
||||
gen_repz_stos(s, ot);
|
||||
} else {
|
||||
@ -4970,6 +4974,7 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
||||
case 0xae: /* scasS */
|
||||
case 0xaf:
|
||||
ot = mo_b_d(b, dflag);
|
||||
gen_op_mov_v_reg(s, MO_32, s->T0, R_EAX);
|
||||
if (prefixes & PREFIX_REPNZ) {
|
||||
gen_repz_scas(s, ot, 1);
|
||||
} else if (prefixes & PREFIX_REPZ) {
|
||||
|
Loading…
Reference in New Issue
Block a user