1 /* { dg-do compile } */
2 /* { dg-options "-O1 -std=c99" } */
3 #include <stdatomic.h>
4
5 #pragma GCC target "+rcpc"
6 atomic_ullong u64;
7 atomic_llong s64;
8 atomic_uint u32;
9 atomic_int s32;
10 atomic_ushort u16;
11 atomic_short s16;
12 atomic_uchar u8;
13 atomic_schar s8;
14
15 #define TEST(size, rettype) \
16 rettype \
17 test_##size (void) \
18 { \
19 return atomic_load_explicit (&size, memory_order_acquire); \
20 } \
21
22 TEST(u64, unsigned long long)
23 TEST(s64, long long)
24 TEST(u32, unsigned int)
25 TEST(s32, int)
26 TEST(u16, unsigned short)
27 TEST(s16, short)
28 TEST(u8, unsigned char)
29 TEST(s8, signed char)
30
31 /* { dg-final { scan-assembler-times "ldapr\tx" 2 } } */
32 /* { dg-final { scan-assembler-times "ldapr\tw" 2 } } */
33 /* { dg-final { scan-assembler-times "ldaprh\tw" 2 } } */
34 /* { dg-final { scan-assembler-times "ldaprb\tw" 2 } } */