/* Test the atomic exchange expansion, generic addressing. */ /* { dg-do compile } */ /* { dg-options "-Wno-long-long" } */ enum memmodel { MEMMODEL_SEQ_CST = 5 }; unsigned char *u8; unsigned short *u16; unsigned int *u32; unsigned long long int *u64; int main() { __atomic_exchange_n (u8, 0, MEMMODEL_SEQ_CST); __atomic_exchange_n (u16, 0, MEMMODEL_SEQ_CST); __atomic_exchange_n (u32, 0, MEMMODEL_SEQ_CST); __atomic_exchange_n (u64, 0, MEMMODEL_SEQ_CST); return 0; } /* Not ptx-native, fallback to libatomic. */ /* { dg-final { scan-assembler-times "(?n)call .* __atomic_exchange_1" 1 } } */ /* { dg-final { scan-assembler-times "(?n)call .* __atomic_exchange_2" 1 } } */ /* { dg-final { scan-assembler-times "atom.exch.b32" 1 } } */ /* { dg-final { scan-assembler-times "atom.exch.b64" 1 } } */ /* { dg-final { scan-assembler-times "membar.sys" 4 } } */