diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2022-10-06 12:08:40 +0100 |
---|---|---|
committer | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2022-10-06 12:08:40 +0100 |
commit | badd1ac23d24664b2258b1db4d49f37a3f60ccca (patch) | |
tree | 29b2482e019c711c7c5a3d460e6f3da9410ac651 /gcc | |
parent | db2f5d661239737157cf131de7d4df1c17d8d88d (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/ldar_1.c | 66 |
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); +} + |