aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2022-10-06 12:08:40 +0100
committerKyrylo Tkachov <kyrylo.tkachov@arm.com>2022-10-06 12:08:40 +0100
commitbadd1ac23d24664b2258b1db4d49f37a3f60ccca (patch)
tree29b2482e019c711c7c5a3d460e6f3da9410ac651
parentdb2f5d661239737157cf131de7d4df1c17d8d88d (diff)
downloadgcc-badd1ac23d24664b2258b1db4d49f37a3f60ccca.zip
gcc-badd1ac23d24664b2258b1db4d49f37a3f60ccca.tar.gz
gcc-badd1ac23d24664b2258b1db4d49f37a3f60ccca.tar.bz2
aarch64: Add test for LDAR generation from __atomic_load_n
I'd like a test to check the generation of LDAR for atomic_load_n. No new functionality added. gcc/testsuite/ChangeLog: * gcc.target/aarch64/ldar_1.c: New test.
-rw-r--r--gcc/testsuite/gcc.target/aarch64/ldar_1.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/aarch64/ldar_1.c b/gcc/testsuite/gcc.target/aarch64/ldar_1.c
new file mode 100644
index 0000000..d968a72
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/ldar_1.c
@@ -0,0 +1,66 @@
+/* Test the LDAR instruction generation from atomic acquire loads. */
+/* { dg-do assemble } */
+/* { dg-additional-options "--save-temps -O1" } */
+/* { dg-final { check-function-bodies "**" "" "" } } */
+
+#include <stdint.h>
+
+#pragma GCC target "+norcpc"
+
+uint8_t v_uint8_t;
+uint16_t v_uint16_t;
+uint32_t v_uint32_t;
+uint64_t v_uint64_t;
+
+/*
+** load_uint8_t:
+** ...
+** ldarb w0, \[x[0-9]+\]
+** ret
+*/
+
+uint8_t
+load_uint8_t (void)
+{
+ return __atomic_load_n (&v_uint8_t, __ATOMIC_ACQUIRE);
+}
+
+/*
+** load_uint16_t:
+** ...
+** ldarh w0, \[x[0-9]+\]
+** ret
+*/
+
+uint16_t
+load_uint16_t (void)
+{
+ return __atomic_load_n (&v_uint16_t, __ATOMIC_ACQUIRE);
+}
+
+/*
+** load_uint32_t:
+** ...
+** ldar w0, \[x[0-9]+\]
+** ret
+*/
+
+uint32_t
+load_uint32_t (void)
+{
+ return __atomic_load_n (&v_uint32_t, __ATOMIC_ACQUIRE);
+}
+
+/*
+** load_uint64_t:
+** ...
+** ldar x0, \[x[0-9]+\]
+** ret
+*/
+
+uint64_t
+load_uint64_t (void)
+{
+ return __atomic_load_n (&v_uint64_t, __ATOMIC_ACQUIRE);
+}
+