1 /* Test the atomic exchange expansion, generic addressing. */
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.exch.b32" 1 } } */
32 /* { dg-final { scan-assembler-times "atom.exch.b64" 1 } } */
33 /* { dg-final { scan-assembler-times "membar.sys" 4 } } */