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