target/riscv/vector_helper.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
vslidedown always zeroes elements past vl, where it should use the
tail policy.
Signed-off-by: Anton Blanchard <antonb@tenstorrent.com>
---
target/riscv/vector_helper.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c
index 67b3bafebb..1012d38c8a 100644
--- a/target/riscv/vector_helper.c
+++ b/target/riscv/vector_helper.c
@@ -5113,9 +5113,11 @@ void HELPER(NAME)(void *vd, void *v0, target_ulong s1, void *vs2, \
} \
\
for (i = i_max; i < vl; ++i) { \
- if (vm || vext_elem_mask(v0, i)) { \
- *((ETYPE *)vd + H(i)) = 0; \
+ if (!vm && !vext_elem_mask(v0, i)) { \
+ vext_set_elems_1s(vd, vma, i * esz, (i + 1) * esz); \
+ continue; \
} \
+ *((ETYPE *)vd + H(i)) = 0; \
} \
\
env->vstart = 0; \
--
2.34.1
On Tue, Apr 15, 2025 at 7:31 AM Anton Blanchard <antonb@tenstorrent.com> wrote: > > vslidedown always zeroes elements past vl, where it should use the > tail policy. > > Signed-off-by: Anton Blanchard <antonb@tenstorrent.com> Thanks! Applied to riscv-to-apply.next Alistair > --- > target/riscv/vector_helper.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c > index 67b3bafebb..1012d38c8a 100644 > --- a/target/riscv/vector_helper.c > +++ b/target/riscv/vector_helper.c > @@ -5113,9 +5113,11 @@ void HELPER(NAME)(void *vd, void *v0, target_ulong s1, void *vs2, \ > } \ > \ > for (i = i_max; i < vl; ++i) { \ > - if (vm || vext_elem_mask(v0, i)) { \ > - *((ETYPE *)vd + H(i)) = 0; \ > + if (!vm && !vext_elem_mask(v0, i)) { \ > + vext_set_elems_1s(vd, vma, i * esz, (i + 1) * esz); \ > + continue; \ > } \ > + *((ETYPE *)vd + H(i)) = 0; \ > } \ > \ > env->vstart = 0; \ > -- > 2.34.1 > >
On Tue, Apr 15, 2025 at 7:31 AM Anton Blanchard <antonb@tenstorrent.com> wrote: > > vslidedown always zeroes elements past vl, where it should use the > tail policy. > > Signed-off-by: Anton Blanchard <antonb@tenstorrent.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > target/riscv/vector_helper.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c > index 67b3bafebb..1012d38c8a 100644 > --- a/target/riscv/vector_helper.c > +++ b/target/riscv/vector_helper.c > @@ -5113,9 +5113,11 @@ void HELPER(NAME)(void *vd, void *v0, target_ulong s1, void *vs2, \ > } \ > \ > for (i = i_max; i < vl; ++i) { \ > - if (vm || vext_elem_mask(v0, i)) { \ > - *((ETYPE *)vd + H(i)) = 0; \ > + if (!vm && !vext_elem_mask(v0, i)) { \ > + vext_set_elems_1s(vd, vma, i * esz, (i + 1) * esz); \ > + continue; \ > } \ > + *((ETYPE *)vd + H(i)) = 0; \ > } \ > \ > env->vstart = 0; \ > -- > 2.34.1 > >
© 2016 - 2025 Red Hat, Inc.