[PATCH 02/23] target/riscv: Hoist vma check out of vext_set_tail_elems_1s

Richard Henderson <[email protected]>
Newsgroups org.nongnu.qemu-riscv,org.nongnu.qemu-devel
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.