> @@ -2717,9 +2733,9 @@ static bool validate_vex(DisasContext *s, 
> X86DecodedInsn *decode)
>              if (s->vex_l) {
>                  goto illegal;
>              }
> -            assert(decode->e.s2 == X86_SIZE_x);
> -            if (decode->op[2].has_ea) {
> -                decode->op[2].ot = s->prefix & PREFIX_REPZ ? MO_32 : MO_64;
> +            assert(e->op2 == X86_TYPE_W && e->s2 == X86_SIZE_x);
> +            if ((s->modrm >> 6) != 3) {
> +                e->s2 = s->prefix & PREFIX_REPNZ ? X86_SIZE_sd : X86_SIZE_ss;

Missing the decode->op[2].ot adjustment?

I think here we still need:

decode->op[2].ot = s->prefix & PREFIX_REPNZ ? MO_64 : MO_32;

otherwise ot is still MO_128 (MO_256 is filtered by the s->vex_l check),
which is set by X86_SIZE_x in decode_insn() before validate_vex(), and
we don't have the opportunity to adjust the size later.

Thanks,
Zhao

Reply via email to