]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
aarch64: Add test for LDAR generation from __atomic_load_n
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Thu, 6 Oct 2022 11:08:40 +0000 (12:08 +0100)
committerKyrylo Tkachov <kyrylo.tkachov@arm.com>
Thu, 6 Oct 2022 11:08:40 +0000 (12:08 +0100)
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.

gcc/testsuite/gcc.target/aarch64/ldar_1.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.target/aarch64/ldar_1.c b/gcc/testsuite/gcc.target/aarch64/ldar_1.c
new file mode 100644 (file)
index 0000000..d968a72
--- /dev/null
@@ -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);
+}
+