1 2 #include <inttypes.h> 3 #include <sys/atomic.h> 4 5 /* XXX: Not so atomic, could use mutexes but not worth it */ 6 uint64_t 7 atomic_cas_64(volatile uint64_t *ptr, uint64_t old, uint64_t new) { 8 uint64_t prev = *ptr; 9 if (prev == old) 10 *ptr = new; 11 return prev; 12 } 13 14 void 15 atomic_add_64(volatile uint64_t *ptr, int64_t delta) { 16 *ptr += delta; 17 } 18 19 void 20 atomic_inc_64(volatile uint64_t *ptr) { 21 ++(*ptr); 22 } 23 24 void 25 atomic_dec_64(volatile uint64_t *ptr) { 26 --(*ptr); 27 } 28 29 uint64_t 30 atomic_add_64_nv(volatile uint64_t *ptr, int64_t delta) { 31 return *ptr += delta; 32 } 33