From: Richard Henderson <[email protected]>
Signed-off-by: Richard Henderson <[email protected]>
Reviewed-by: Peter Maydell <[email protected]>
Message-id: [email protected]
Signed-off-by: Peter Maydell <[email protected]>
---
tests/tcg/aarch64/Makefile.target | 5 +++--
tests/tcg/aarch64/sve-while-ptr.c | 28 ++++++++++++++++++++++++++++
2 files changed, 31 insertions(+), 2 deletions(-)
create mode 100644 tests/tcg/aarch64/sve-while-ptr.c
diff --git a/tests/tcg/aarch64/Makefile.target
b/tests/tcg/aarch64/Makefile.target
index 32f26892737..6cc81bf854f 100644
--- a/tests/tcg/aarch64/Makefile.target
+++ b/tests/tcg/aarch64/Makefile.target
@@ -203,8 +203,9 @@ endif
endif
ifneq ($(CROSS_CC_HAS_SVE2),)
-AARCH64_TESTS += test-826
-test-826: CFLAGS += $(CROSS_CC_HAS_SVE2)
+SVE2_TESTS = test-826 sve-while-ptr
+$(SVE2_TESTS): CFLAGS += $(CROSS_CC_HAS_SVE2)
+AARCH64_TESTS += $(SVE2_TESTS)
endif
TESTS += $(AARCH64_TESTS)
diff --git a/tests/tcg/aarch64/sve-while-ptr.c
b/tests/tcg/aarch64/sve-while-ptr.c
new file mode 100644
index 00000000000..7db3b9cc035
--- /dev/null
+++ b/tests/tcg/aarch64/sve-while-ptr.c
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/* WHILEWR / WHILERW regression test */
+
+#include <sys/prctl.h>
+#include <assert.h>
+
+int main(int argc, char **argv)
+{
+ unsigned short p;
+ int set_vl_ret;
+
+ set_vl_ret = prctl(PR_SVE_SET_VL, 16, 0, 0, 0, 0);
+ assert(set_vl_ret == 16);
+
+ p = 0xdead;
+ asm("whilewr p0.s, %0, %1\n\t"
+ "str p0, [%2]"
+ : : "r"(8), "r"(11), "r"(&p) : "memory", "p0");
+ assert(p == 0x1111);
+
+ p = 0xdead;
+ asm("whilerw p0.s, %0, %1\n\t"
+ "str p0, [%2]"
+ : : "r"(8), "r"(11), "r"(&p) : "memory", "p0");
+ assert(p == 0x1111);
+
+ return 0;
+}
--
2.43.0