> @@ -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