On Thu, 2026-08-20 at 21:03 -0700, Richard Henderson wrote:
> Use mmu data passed in with VDATA.
> 
> Signed-off-by: Richard Henderson <[email protected]>

Reviewed-by: Alistair Francis <[email protected]>

Alistair

> ---
>  target/riscv/tcg/vector_helper.c | 23 +++++++++++++++++++----
>  1 file changed, 19 insertions(+), 4 deletions(-)
> 
> diff --git a/target/riscv/tcg/vector_helper.c
> b/target/riscv/tcg/vector_helper.c
> index 76990894e5..9b0c3f70c2 100644
> --- a/target/riscv/tcg/vector_helper.c
> +++ b/target/riscv/tcg/vector_helper.c
> @@ -158,6 +158,19 @@ static inline void vext_set_elem_mask(void *v0,
> int index,
>      ((uint64_t *)v0)[idx] = deposit64(old, pos, 1, value);
>  }
>  
> +static inline MemOpIdx vext_oi(uint32_t desc, MemOp memop)
> +{
> +    uint32_t data = simd_data(desc);
> +
> +    if (FIELD_EX32(simd_data(desc), VDATA, BSWAP)) {
> +        memop |= MO_BSWAP;
> +    }
> +    if (FIELD_EX32(simd_data(desc), VDATA, ALIGN)) {
> +        memop |= MO_ALIGN;
> +    }
> +    return make_memop_idx(memop, FIELD_EX32(data, VDATA, MEM_IDX));
> +}
> +
>  static inline MemOpIdx vext_make_memop_idx(CPURISCVState *env,
> size_t size)
>  {
>      int mmu_idx = riscv_env_mmu_index(env, false);
> @@ -406,12 +419,12 @@ vext_ldst_us_notail(void *vd, target_ulong
> base, CPURISCVState *env,
>                      uint32_t max_elems, bool vma,
>                      vext_ldst_elem_fn_tlb *ldst_tlb,
>                      vext_ldst_elem_fn_host *ldst_host,
> -                    uintptr_t ra, bool is_load)
> +                    uintptr_t ra, bool is_load, MemOpIdx oi)
>  {
>      target_ulong elems, addr, last, last_in_page, page_split;
>      uint32_t esz = 1 << log2_esz;
>      uint32_t msize = nf * esz;
> -    int mmu_index = riscv_env_mmu_index(env, false);
> +    int mmu_index = get_mmuidx(oi);
>      MMUAccessType access_type = is_load ? MMU_DATA_LOAD :
> MMU_DATA_STORE;
>      uint32_t i = env->vstart;
>      void *host;
> @@ -505,7 +518,8 @@ vext_ldst_us(void *vd, target_ulong base,
> CPURISCVState *env, uint32_t desc,
>      uint32_t max_elems = vext_max_elems(desc, log2_esz);
>  
>      vext_ldst_us_notail(vd, base, env, log2_esz, vext_nf(desc), evl,
> max_elems,
> -                        vext_vma(desc), ldst_tlb, ldst_host, ra,
> is_load);
> +                        vext_vma(desc), ldst_tlb, ldst_host, ra,
> is_load,
> +                        vext_oi(desc, log2_esz));
>  
>      env->vstart = 0;
>      vext_set_tail_elems_1s(evl, vd, desc, nf, 1 << log2_esz,
> max_elems);
> @@ -947,7 +961,8 @@ vext_ldst_whole(void *vd, target_ulong base,
> CPURISCVState *env, uint32_t desc,
>      uint32_t evl = (riscv_cpu_cfg(env)->vlenb * vext_nf(desc)) >>
> log2_esz;
>  
>      vext_ldst_us_notail(vd, base, env, log2_esz, 1, evl, evl, false,
> -                        ldst_tlb, ldst_host, ra, is_load);
> +                        ldst_tlb, ldst_host, ra, is_load,
> +                        vext_oi(desc, log2_esz));
>      env->vstart = 0;
>  }
>  

Reply via email to