17 #include <libkern/OSAtomic.h> 20 of_atomic_int_add(
volatile int *_Nonnull p,
int i)
22 return OSAtomicAdd32(i, p);
25 static OF_INLINE int32_t
26 of_atomic_int32_add(
volatile int32_t *_Nonnull p, int32_t i)
28 return OSAtomicAdd32(i, p);
31 static OF_INLINE
void *_Nullable
32 of_atomic_ptr_add(
void *
volatile _Nullable *_Nonnull p, intptr_t i)
35 return (
void *)OSAtomicAdd64(i, (int64_t *)p);
37 return (
void *)OSAtomicAdd32(i, (int32_t *)p);
42 of_atomic_int_sub(
volatile int *_Nonnull p,
int i)
44 return OSAtomicAdd32(-i, p);
47 static OF_INLINE int32_t
48 of_atomic_int32_sub(
volatile int32_t *_Nonnull p, int32_t i)
50 return OSAtomicAdd32(-i, p);
53 static OF_INLINE
void *_Nullable
54 of_atomic_ptr_sub(
void *
volatile _Nullable *_Nonnull p, intptr_t i)
57 return (
void *)OSAtomicAdd64(-i, (int64_t *)p);
59 return (
void *)OSAtomicAdd32(-i, (int32_t *)p);
64 of_atomic_int_inc(
volatile int *_Nonnull p)
66 return OSAtomicIncrement32(p);
69 static OF_INLINE int32_t
70 of_atomic_int32_inc(
volatile int32_t *_Nonnull p)
72 return OSAtomicIncrement32(p);
76 of_atomic_int_dec(
volatile int *_Nonnull p)
78 return OSAtomicDecrement32(p);
81 static OF_INLINE int32_t
82 of_atomic_int32_dec(
volatile int32_t *_Nonnull p)
84 return OSAtomicDecrement32(p);
87 static OF_INLINE
unsigned int 88 of_atomic_int_or(
volatile unsigned int *_Nonnull p,
unsigned int i)
90 return OSAtomicOr32(i, p);
93 static OF_INLINE uint32_t
94 of_atomic_int32_or(
volatile uint32_t *_Nonnull p, uint32_t i)
96 return OSAtomicOr32(i, p);
99 static OF_INLINE
unsigned int 100 of_atomic_int_and(
volatile unsigned int *_Nonnull p,
unsigned int i)
102 return OSAtomicAnd32(i, p);
105 static OF_INLINE uint32_t
106 of_atomic_int32_and(
volatile uint32_t *_Nonnull p, uint32_t i)
108 return OSAtomicAnd32(i, p);
111 static OF_INLINE
unsigned int 112 of_atomic_int_xor(
volatile unsigned int *_Nonnull p,
unsigned int i)
114 return OSAtomicXor32(i, p);
117 static OF_INLINE uint32_t
118 of_atomic_int32_xor(
volatile uint32_t *_Nonnull p, uint32_t i)
120 return OSAtomicXor32(i, p);
123 static OF_INLINE
bool 124 of_atomic_int_cmpswap(
volatile int *_Nonnull p,
int o,
int n)
126 return OSAtomicCompareAndSwapInt(o, n, p);
129 static OF_INLINE
bool 130 of_atomic_int32_cmpswap(
volatile int32_t *_Nonnull p, int32_t o, int32_t n)
132 return OSAtomicCompareAndSwap32(o, n, p);
135 static OF_INLINE
bool 136 of_atomic_ptr_cmpswap(
void *
volatile _Nullable *_Nonnull p,
137 void *_Nullable o,
void *_Nullable n)
139 return OSAtomicCompareAndSwapPtr(o, n, p);
142 static OF_INLINE
void 143 of_memory_barrier(
void)
148 static OF_INLINE
void 149 of_memory_barrier_acquire(
void)
154 static OF_INLINE
void 155 of_memory_barrier_release(
void)