| 1 | #include <stdatomic.h> |
| 2 | |
| 3 | _Atomic unsigned short g16; |
| 4 | |
| 5 | unsigned short load_then_store16(unsigned short x) { |
| 6 | unsigned short y = atomic_load_explicit(&g16, memory_order_acquire); |
| 7 | atomic_store_explicit(&g16, (unsigned short)(x + y), memory_order_release); |
| 8 | return y; |
| 9 | } |
| 10 | |
| 11 | unsigned short swap16(unsigned short x) { |
| 12 | return atomic_exchange_explicit(&g16, x, memory_order_acq_rel); |
| 13 | } |