1 /* Test the atomic exchange expansion, global state space. */
2
3 /* { dg-do compile } */
4 /* { dg-options "-Wno-long-long" } */
5
6 enum memmodel
7 {
8 MEMMODEL_SEQ_CST = 5
9 };
10
11 unsigned char u8;
12 unsigned short u16;
13 unsigned int u32;
14 unsigned long long int u64;
15
16 int
17 main()
18 {
19 __atomic_exchange_n (&u8, 0, MEMMODEL_SEQ_CST);
20 __atomic_exchange_n (&u16, 0, MEMMODEL_SEQ_CST);
21 __atomic_exchange_n (&u32, 0, MEMMODEL_SEQ_CST);
22 __atomic_exchange_n (&u64, 0, MEMMODEL_SEQ_CST);
23
24 return 0;
25 }
26
27 /* Not ptx-native, fallback to libatomic. */
28 /* { dg-final { scan-assembler-times "(?n)call .* __atomic_exchange_1" 1 } } */
29 /* { dg-final { scan-assembler-times "(?n)call .* __atomic_exchange_2" 1 } } */
30
31 /* { dg-final { scan-assembler-times "atom.global.exch.b32" 1 } } */
32 /* { dg-final { scan-assembler-times "atom.global.exch.b64" 1 } } */
33 /* { dg-final { scan-assembler-times "membar.sys" 4 } } */