1 /* Check that the appropriate atomic insns are used if the result values 2 are unused. */ 3 4 #define concat_1(x, y) x ## y 5 #define concat(x, y) concat_1 (x, y) 6 #define makefuncname(name) concat (concat (test_, __LINE__), name) 7 8 #define emitfuncs(name,val)\ 9 void makefuncname (_0) (char* mem)\ 10 {\ 11 name (mem, val, __ATOMIC_ACQ_REL);\ 12 }\ 13 void makefuncname (_1) (short* mem)\ 14 {\ 15 name (mem, val, __ATOMIC_ACQ_REL);\ 16 }\ 17 void makefuncname (_2) (int* mem)\ 18 {\ 19 name (mem, val, __ATOMIC_ACQ_REL);\ 20 }\ 21 22 emitfuncs (__atomic_add_fetch, 1) 23 emitfuncs (__atomic_fetch_add, 1) 24 25 emitfuncs (__atomic_sub_fetch, 1) 26 emitfuncs (__atomic_fetch_sub, 1) 27 28 emitfuncs (__atomic_and_fetch, 1) 29 emitfuncs (__atomic_fetch_and, 1) 30 31 emitfuncs (__atomic_or_fetch, 1) 32 emitfuncs (__atomic_fetch_or, 1) 33 34 emitfuncs (__atomic_xor_fetch, 1) 35 emitfuncs (__atomic_fetch_xor, 1) 36 37 emitfuncs (__atomic_nand_fetch, 1) 38 emitfuncs (__atomic_fetch_nand, 1) 39 40 emitfuncs (__atomic_xor_fetch, -1) 41 emitfuncs (__atomic_fetch_xor, -1) 42 43 emitfuncs (__atomic_nand_fetch, -1) 44 emitfuncs (__atomic_fetch_nand, -1) 45