| /* Check that atomic ops utilize insns with immediate values. */ |
| |
| #define emitfuncs(name)\ |
| void test_ ## name ## _0 (char* mem)\ |
| {\ |
| name (mem, 1, __ATOMIC_ACQ_REL);\ |
| }\ |
| void test_ ## name ## _1 (short* mem)\ |
| {\ |
| name (mem, 1, __ATOMIC_ACQ_REL);\ |
| }\ |
| void test_ ## name ##_2 (int* mem)\ |
| {\ |
| name (mem, 1, __ATOMIC_ACQ_REL);\ |
| }\ |
| |
| emitfuncs (__atomic_add_fetch) |
| emitfuncs (__atomic_fetch_add) |
| |
| emitfuncs (__atomic_sub_fetch) |
| emitfuncs (__atomic_fetch_sub) |
| |
| emitfuncs (__atomic_and_fetch) |
| emitfuncs (__atomic_fetch_and) |
| |
| emitfuncs (__atomic_or_fetch) |
| emitfuncs (__atomic_fetch_or) |
| |
| emitfuncs (__atomic_xor_fetch) |
| emitfuncs (__atomic_fetch_xor) |
| |
| emitfuncs (__atomic_nand_fetch) |
| emitfuncs (__atomic_fetch_nand) |
| |
| void |
| test___atomic_compare_exchange_0 (char* mem) |
| { |
| char expected = 1; |
| char desired = 5; |
| __atomic_compare_exchange (mem, &expected, &desired, 0, __ATOMIC_ACQ_REL, |
| __ATOMIC_RELAXED); |
| } |
| |
| void |
| test___atomic_compare_exchange_1 (short* mem) |
| { |
| short expected = 1; |
| short desired = 5; |
| __atomic_compare_exchange (mem, &expected, &desired, 0, __ATOMIC_ACQ_REL, |
| __ATOMIC_RELAXED); |
| } |
| |
| void |
| test___atomic_compare_exchange_2 (int* mem) |
| { |
| int expected = 1; |
| int desired = 5; |
| __atomic_compare_exchange (mem, &expected, &desired, 0, __ATOMIC_ACQ_REL, |
| __ATOMIC_RELAXED); |
| } |