]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
aarch64 regtest: add test for dc cva? op codes
authorPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 12 May 2024 06:47:58 +0000 (08:47 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 12 May 2024 06:47:58 +0000 (08:47 +0200)
And also system registers for feature tests.

.gitignore
none/tests/arm64/Makefile.am
none/tests/arm64/dc_cvax.c [new file with mode: 0644]
none/tests/arm64/dc_cvax.stderr.exp [new file with mode: 0644]
none/tests/arm64/dc_cvax.vgtest [new file with mode: 0644]

index a8b7ce4c7daa6887840eb23ff83a613395ab8460..9d90d1c6531f9c3c839d5a7feb494fa829b2fbce 100644 (file)
 /none/tests/arm64/bug484426
 /none/tests/arm64/crc32
 /none/tests/arm64/cvtf_imm
+/none/tests/arm64/dc_cvax
 /none/tests/arm64/fmadd_sub
 /none/tests/arm64/fp_and_simd
 /none/tests/arm64/fp_and_simd_v82
index 4f2ee84f3da62ce3a9ccd28581aebc844a34459f..5cf3c4e19e7575db2a4f7bf9d504ea8ea6bc554a 100644 (file)
@@ -7,6 +7,7 @@ EXTRA_DIST = \
        bug484426.stdout.exp bug484426.stderr.exp bug484426.vgtest \
         crc32.stdout.exp crc32.stderr.exp crc32.vgtest \
         cvtf_imm.stdout.exp cvtf_imm.stderr.exp cvtf_imm.vgtest \
+        dc_cvax.vgtest dc_cvax.stderr.exp \
        fp_and_simd.stdout.exp fp_and_simd.stderr.exp fp_and_simd.vgtest \
        frinta_frintn.stderr.exp frinta_frintn.vgtest \
        integer.stdout.exp integer.stderr.exp integer.vgtest \
@@ -27,6 +28,7 @@ check_PROGRAMS = \
        allexec \
        bug484426 \
         cvtf_imm \
+        dc_cvax \
        fp_and_simd \
        integer \
        memory_test \
diff --git a/none/tests/arm64/dc_cvax.c b/none/tests/arm64/dc_cvax.c
new file mode 100644 (file)
index 0000000..79674ce
--- /dev/null
@@ -0,0 +1,30 @@
+#include <assert.h>
+#include <string.h>
+
+int main()
+{
+    char buf[64] __attribute__((aligned(64)));
+    unsigned long check_dc_zva;
+    unsigned long check_dc_cvap;
+    memset(buf, 0xAA, 64);
+    asm volatile("mrs %0, dczid_el0" : "=r" (check_dc_zva));
+    asm volatile("dc cvac, %0" :: "r" (buf));
+    asm volatile("dc cvau, %0" :: "r" (buf));
+    asm volatile("mrs %0, id_aa64isar1_el1" : "=r" (check_dc_cvap));
+    /* Not sure if GCC supports this syntax */
+    /*
+    if (check_dc_cvap & 0x3) {
+       asm volatile(".arch_extension ccpp;dc cvap, %0" :: "r" (buf));
+    }
+    if (check_dc_cvap & 0x2) {
+      asm volatile(".arch_extension ccdp;dc cvadp, %0" :: "r" (buf));
+    }
+    */
+    asm volatile("dc civac, %0" :: "r" (buf));
+    // and while I'm at it
+    if (!(check_dc_zva & 0x10)) {
+       asm volatile("dc zva, %0" :: "r" (buf));
+       assert(buf[0] == 0);
+       assert(buf[63] == 0);
+   }
+}
diff --git a/none/tests/arm64/dc_cvax.stderr.exp b/none/tests/arm64/dc_cvax.stderr.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/none/tests/arm64/dc_cvax.vgtest b/none/tests/arm64/dc_cvax.vgtest
new file mode 100644 (file)
index 0000000..f2b7a1e
--- /dev/null
@@ -0,0 +1,2 @@
+prog: dc_cvax
+vgopts: -q