Re: [PATCH v6 9/9] target/riscv/vector_helper.c: optimize loops in ldst helpers
On Thu, Feb 22, 2024 at 7:33 AM Daniel Henrique Barboza wrote: > > Change the for loops in ldst helpers to do a single increment in the > counter, and assign it env->vstart, to avoid re-reading from vstart > every time. > > Suggested-by: Richard Henderson > Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Alistair > --- > target/riscv/vector_helper.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c > index cc7290a1bb..1ab386830a 100644 > --- a/target/riscv/vector_helper.c > +++ b/target/riscv/vector_helper.c > @@ -208,7 +208,7 @@ vext_ldst_stride(void *vd, void *v0, target_ulong base, > uint32_t esz = 1 << log2_esz; > uint32_t vma = vext_vma(desc); > > -for (i = env->vstart; i < env->vl; i++, env->vstart++) { > +for (i = env->vstart; i < env->vl; env->vstart = ++i) { > k = 0; > while (k < nf) { > if (!vm && !vext_elem_mask(v0, i)) { > @@ -274,7 +274,7 @@ vext_ldst_us(void *vd, target_ulong base, CPURISCVState > *env, uint32_t desc, > uint32_t esz = 1 << log2_esz; > > /* load bytes from guest memory */ > -for (i = env->vstart; i < evl; i++, env->vstart++) { > +for (i = env->vstart; i < evl; env->vstart = ++i) { > k = 0; > while (k < nf) { > target_ulong addr = base + ((i * nf + k) << log2_esz); > @@ -388,7 +388,7 @@ vext_ldst_index(void *vd, void *v0, target_ulong base, > uint32_t vma = vext_vma(desc); > > /* load bytes from guest memory */ > -for (i = env->vstart; i < env->vl; i++, env->vstart++) { > +for (i = env->vstart; i < env->vl; env->vstart = ++i) { > k = 0; > while (k < nf) { > if (!vm && !vext_elem_mask(v0, i)) { > -- > 2.43.2 > >
Re: [PATCH v6 9/9] target/riscv/vector_helper.c: optimize loops in ldst helpers
On 2/21/24 11:31, Daniel Henrique Barboza wrote: Change the for loops in ldst helpers to do a single increment in the counter, and assign it env->vstart, to avoid re-reading from vstart every time. Suggested-by: Richard Henderson Signed-off-by: Daniel Henrique Barboza --- target/riscv/vector_helper.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) Reviewed-by: Richard Henderson r~
[PATCH v6 9/9] target/riscv/vector_helper.c: optimize loops in ldst helpers
Change the for loops in ldst helpers to do a single increment in the counter, and assign it env->vstart, to avoid re-reading from vstart every time. Suggested-by: Richard Henderson Signed-off-by: Daniel Henrique Barboza --- target/riscv/vector_helper.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c index cc7290a1bb..1ab386830a 100644 --- a/target/riscv/vector_helper.c +++ b/target/riscv/vector_helper.c @@ -208,7 +208,7 @@ vext_ldst_stride(void *vd, void *v0, target_ulong base, uint32_t esz = 1 << log2_esz; uint32_t vma = vext_vma(desc); -for (i = env->vstart; i < env->vl; i++, env->vstart++) { +for (i = env->vstart; i < env->vl; env->vstart = ++i) { k = 0; while (k < nf) { if (!vm && !vext_elem_mask(v0, i)) { @@ -274,7 +274,7 @@ vext_ldst_us(void *vd, target_ulong base, CPURISCVState *env, uint32_t desc, uint32_t esz = 1 << log2_esz; /* load bytes from guest memory */ -for (i = env->vstart; i < evl; i++, env->vstart++) { +for (i = env->vstart; i < evl; env->vstart = ++i) { k = 0; while (k < nf) { target_ulong addr = base + ((i * nf + k) << log2_esz); @@ -388,7 +388,7 @@ vext_ldst_index(void *vd, void *v0, target_ulong base, uint32_t vma = vext_vma(desc); /* load bytes from guest memory */ -for (i = env->vstart; i < env->vl; i++, env->vstart++) { +for (i = env->vstart; i < env->vl; env->vstart = ++i) { k = 0; while (k < nf) { if (!vm && !vext_elem_mask(v0, i)) { -- 2.43.2