On 8/17/20 1:49 AM, frank.ch...@sifive.com wrote:
> +static bool vext_check_st_index(DisasContext *s, int vd, int vs2, int nf,
> +                                uint8_t eew)
>  {
> -    return !s->vill;
> +    uint8_t lmul_r = s->lmul < 0 ? 0 : s->lmul;
> +    int8_t emul = ctzl(eew) - (s->sew + 3) + s->lmul;
> +    return (emul >= -3 && emul <= 3) &&
> +            require_align(vs2, 1 << emul) &&
> +            require_align(vd, 1 << s->lmul) &&
> +            ((nf << lmul_r) <= (NVPR / 4) &&
> +             (vd + (nf << lmul_r)) <= NVPR);
> +}

Same comments wrt EEW as the last patch.

It wouldn't hurt to extract something like

static bool require_nf(int vd, int nf, int lmul)
{
    int size = nf << MAX(lmul, 0);
    return size <= 8 && vd + size <= 32;
}

in the previous patch as well.


r~

Reply via email to