[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