aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2023-10-19 14:51:16 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2023-12-29 22:03:18 +0100
commita71e0b246accc4dc11616580d7232fbf4b782dac (patch)
tree0ec1eab34ccbd5156f8b7c3549fa825c690092d2
parent8a36bbcf6c1769b1b5edb24cc4ceb2eb368446d5 (diff)
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>
-rw-r--r--target/i386/tcg/decode-new.c.inc20
1 files changed, 2 insertions, 18 deletions
diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc
index d7a86d96c0..99d18d2871 100644
--- a/target/i386/tcg/decode-new.c.inc
+++ b/target/i386/tcg/decode-new.c.inc
@@ -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;