JMPABS will need the W0 check; move all of these checks together with the others in disas_insn.
Signed-off-by: Paolo Bonzini <[email protected]> --- target/i386/tcg/decode-new.c.inc | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc index 086a3bcec18..6fab597fafc 100644 --- a/target/i386/tcg/decode-new.c.inc +++ b/target/i386/tcg/decode-new.c.inc @@ -2722,24 +2722,6 @@ static bool validate_vex(DisasContext *s, X86DecodedInsn *decode) if (s->flags & HF_EM_MASK) { goto illegal; } - - if (e->check) { - if (e->check & X86_CHECK_VEX128) { - if (s->vex_l) { - goto illegal; - } - } - if (e->check & X86_CHECK_W0) { - if (s->vex_w) { - goto illegal; - } - } - if (e->check & X86_CHECK_W1) { - if (!s->vex_w) { - goto illegal; - } - } - } return true; nm_exception: @@ -2991,6 +2973,15 @@ static void disas_insn(DisasContext *s, CPUState *cpu) goto illegal_op; } } + if ((decode.e.check & X86_CHECK_VEX128) && s->vex_l) { + goto illegal_op; + } + if ((decode.e.check & X86_CHECK_W0) && s->vex_w) { + goto illegal_op; + } + if ((decode.e.check & X86_CHECK_W1) && !s->vex_w) { + goto illegal_op; + } } switch (decode.e.special) { -- 2.52.0
