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