In all cases we've already extracted it in the caller.

Signed-off-by: Richard Henderson <[email protected]>
---
 target/riscv/tcg/vector_helper.c | 35 +++++++++++++++++---------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/target/riscv/tcg/vector_helper.c b/target/riscv/tcg/vector_helper.c
index 20a8f95efb..8f74162d50 100644
--- a/target/riscv/tcg/vector_helper.c
+++ b/target/riscv/tcg/vector_helper.c
@@ -311,19 +311,11 @@ vext_continuous_ldst_host(CPURISCVState *env, 
vext_ldst_elem_fn_host *ldst_host,
     }
 }
 
-static void vext_set_tail_elems_1s(uint32_t vl, void *vd,
-                                   uint32_t desc, uint32_t nf,
+static void vext_set_tail_elems_1s(uint32_t vl, void *vd, uint32_t nf,
                                    uint32_t esz, uint32_t max_elems)
 {
-    uint32_t vta = vext_vta(desc);
-    int k;
-
-    if (vta == 0) {
-        return;
-    }
-
-    for (k = 0; k < nf; ++k) {
-        vext_set_elems_1s(vd, vta, (k * max_elems + vl) * esz,
+    for (uint32_t k = 0; k < nf; ++k) {
+        vext_set_elems_1s(vd, true, (k * max_elems + vl) * esz,
                           (k * max_elems + max_elems) * esz);
     }
 }
@@ -368,7 +360,9 @@ vext_ldst_stride(void *vd, void *v0, target_ulong base, 
target_ulong stride,
     }
 
     env->vstart = 0;
-    vext_set_tail_elems_1s(env->vl, vd, desc, nf, esz, max_elems);
+    if (vma) {
+        vext_set_tail_elems_1s(env->vl, vd, nf, esz, max_elems);
+    }
 }
 
 #define GEN_VEXT_LD_STRIDE(NAME, ETYPE, LOAD_FN)                        \
@@ -482,6 +476,7 @@ vext_ldst_us(void *vd, target_ulong base, CPURISCVState 
*env, uint32_t desc,
     uint32_t k;
     target_ulong page_split, elems, addr;
     uint32_t nf = vext_nf(desc);
+    uint32_t vma = vext_vma(desc);
     uint32_t max_elems = vext_max_elems(desc, log2_esz);
     uint32_t esz = 1 << log2_esz;
     uint32_t msize = nf * esz;
@@ -500,7 +495,9 @@ vext_ldst_us(void *vd, target_ulong base, CPURISCVState 
*env, uint32_t desc,
                                  esz, is_load);
 
         env->vstart = 0;
-        vext_set_tail_elems_1s(evl, vd, desc, nf, esz, max_elems);
+        if (vma) {
+            vext_set_tail_elems_1s(evl, vd, nf, esz, max_elems);
+        }
         return;
     }
 #endif
@@ -542,7 +539,9 @@ vext_ldst_us(void *vd, target_ulong base, CPURISCVState 
*env, uint32_t desc,
     }
 
     env->vstart = 0;
-    vext_set_tail_elems_1s(evl, vd, desc, nf, esz, max_elems);
+    if (vma) {
+        vext_set_tail_elems_1s(evl, vd, nf, esz, max_elems);
+    }
 }
 
 /*
@@ -661,7 +660,9 @@ vext_ldst_index(void *vd, void *v0, target_ulong base,
     }
 
     env->vstart = 0;
-    vext_set_tail_elems_1s(env->vl, vd, desc, nf, esz, max_elems);
+    if (vma) {
+        vext_set_tail_elems_1s(env->vl, vd, nf, esz, max_elems);
+    }
 }
 
 #define GEN_VEXT_LD_INDEX(NAME, ETYPE, INDEX_FN, LOAD_FN)                  \
@@ -842,7 +843,9 @@ ProbeSuccess:
     }
 
     env->vstart = 0;
-    vext_set_tail_elems_1s(env->vl, vd, desc, nf, esz, max_elems);
+    if (vma) {
+        vext_set_tail_elems_1s(env->vl, vd, nf, esz, max_elems);
+    }
 }
 
 #define GEN_VEXT_LDFF(NAME, ETYPE, LOAD_FN_TLB, LOAD_FN_HOST)   \
-- 
2.43.0


Reply via email to