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