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 - 2026 Red Hat, Inc.