mirror of https://github.com/xemu-project/xemu.git
target/i386: do not decode string source/destination into decode->mem
decode->mem is only used if one operand has has_ea == true. String operations will not use decode->mem and will load A0 on their own, because they are the only case of two memory operands in a single instruction. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
8a36bbcf6c
commit
a71e0b246a
|
@ -1212,6 +1212,8 @@ static bool decode_op(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode,
|
|||
case X86_TYPE_None: /* Implicit or absent */
|
||||
case X86_TYPE_A: /* Implicit */
|
||||
case X86_TYPE_F: /* EFLAGS/RFLAGS */
|
||||
case X86_TYPE_X: /* string source */
|
||||
case X86_TYPE_Y: /* string destination */
|
||||
break;
|
||||
|
||||
case X86_TYPE_B: /* VEX.vvvv selects a GPR */
|
||||
|
@ -1346,24 +1348,6 @@ static bool decode_op(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode,
|
|||
op->n = insn_get(env, s, op->ot) >> 4;
|
||||
break;
|
||||
|
||||
case X86_TYPE_X: /* string source */
|
||||
op->n = -1;
|
||||
decode->mem = (AddressParts) {
|
||||
.def_seg = R_DS,
|
||||
.base = R_ESI,
|
||||
.index = -1,
|
||||
};
|
||||
break;
|
||||
|
||||
case X86_TYPE_Y: /* string destination */
|
||||
op->n = -1;
|
||||
decode->mem = (AddressParts) {
|
||||
.def_seg = R_ES,
|
||||
.base = R_EDI,
|
||||
.index = -1,
|
||||
};
|
||||
break;
|
||||
|
||||
case X86_TYPE_2op:
|
||||
*op = decode->op[0];
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue