37 lines
585 B
C
37 lines
585 B
C
|
|
#include <sys/types.h>
|
|
#include <sys/atomic.h>
|
|
|
|
#ifndef __HAVE_ATOMIC64_OPS
|
|
|
|
/* XXX: Not so atomic, could use mutexes but not worth it */
|
|
uint64_t
|
|
atomic_cas_64(volatile uint64_t *ptr, uint64_t old, uint64_t new) {
|
|
uint64_t prev = *ptr;
|
|
if (prev == old)
|
|
*ptr = new;
|
|
return prev;
|
|
}
|
|
|
|
void
|
|
atomic_add_64(volatile uint64_t *ptr, int64_t delta) {
|
|
*ptr += delta;
|
|
}
|
|
|
|
void
|
|
atomic_inc_64(volatile uint64_t *ptr) {
|
|
++(*ptr);
|
|
}
|
|
|
|
void
|
|
atomic_dec_64(volatile uint64_t *ptr) {
|
|
--(*ptr);
|
|
}
|
|
|
|
uint64_t
|
|
atomic_add_64_nv(volatile uint64_t *ptr, int64_t delta) {
|
|
return *ptr += delta;
|
|
}
|
|
|
|
#endif
|