> +static bool validate_evex_apx(DisasContext *s, X86DecodedInsn *decode)
> +{
> +    X86OpEntry *e = &decode->e;
> +    uint8_t evex4_mask = 0;
> +
> +    assert(s->has_modrm);
> +    switch (e->vex_class) {
> +    case 13:
> +        /*
> +         * APX-EVEX-BMI and APX-EVEX-CMPCCXADD do not define EVEX.ND.
> +         * They only differ for checks on NF, which happen elsewhere.
> +         */
> +        if (!CODE64(s) || !(s->flags & HF_APX_EN_MASK)) {
> +            goto illegal;
> +        }
> +        evex4_mask = 0x0C;
> +        break;
> +
> +    case X86_EVEX_APX:
> +        /* APX-EVEX-INT.  Checks on NF happen elsewhere.  */
> +        assert(e->s0 == e->s1);

This assertion seems too strong, should we only check it for X86_TYPE_B?

Thanks,
Zhao

> +        if (!CODE64(s) || !(s->flags & HF_APX_EN_MASK)) {
> +            goto illegal;
> +        }
> +        if (!EVEX_APX_ND(s)) {
> +            s->vex_ndd = false;
> +        } else if (!s->vex_ndd) {
> +            goto illegal;
> +        }
> +        evex4_mask = 0x1C;
> +        break;

Reply via email to