20#ifndef OF_HAVE_ATOMIC_OPS
21# error No atomic operations available!
24#if !defined(OF_HAVE_THREADS)
26OFAtomicIntAdd(
volatile int *_Nonnull p,
int i)
31static OF_INLINE int32_t
32OFAtomicInt32Add(
volatile int32_t *_Nonnull p, int32_t i)
37static OF_INLINE
void *_Nullable
38OFAtomicPointerAdd(
void *
volatile _Nullable *_Nonnull p, intptr_t i)
40 return (*(
char *
volatile *)p += i);
44OFAtomicIntSubtract(
volatile int *_Nonnull p,
int i)
49static OF_INLINE int32_t
50OFAtomicInt32Subtract(
volatile int32_t *_Nonnull p, int32_t i)
55static OF_INLINE
void *_Nullable
56OFAtomicPointerSubtract(
void *
volatile _Nullable *_Nonnull p, intptr_t i)
58 return (*(
char *
volatile *)p -= i);
62OFAtomicIntIncrease(
volatile int *_Nonnull p)
67static OF_INLINE int32_t
68OFAtomicInt32Increase(
volatile int32_t *_Nonnull p)
74OFAtomicIntDecrease(
volatile int *_Nonnull p)
79static OF_INLINE int32_t
80OFAtomicInt32Decrease(
volatile int32_t *_Nonnull p)
85static OF_INLINE
unsigned int
86OFAtomicIntOr(
volatile unsigned int *_Nonnull p,
unsigned int i)
91static OF_INLINE uint32_t
92OFAtomicInt32Or(
volatile uint32_t *_Nonnull p, uint32_t i)
97static OF_INLINE
unsigned int
98OFAtomicIntAnd(
volatile unsigned int *_Nonnull p,
unsigned int i)
103static OF_INLINE uint32_t
104OFAtomicInt32And(
volatile uint32_t *_Nonnull p, uint32_t i)
109static OF_INLINE
unsigned int
110OFAtomicIntXor(
volatile unsigned int *_Nonnull p,
unsigned int i)
115static OF_INLINE uint32_t
116OFAtomicInt32Xor(
volatile uint32_t *_Nonnull p, uint32_t i)
122OFAtomicIntCompareAndSwap(
volatile int *_Nonnull p,
int o,
int n)
133OFAtomicInt32CompareAndSwap(
volatile int32_t *_Nonnull p, int32_t o, int32_t n)
144OFAtomicPointerCompareAndSwap(
void *
volatile _Nullable *_Nonnull p,
145 void *_Nullable o,
void *_Nullable n)
162OFAcquireMemoryBarrier(
void)
168OFReleaseMemoryBarrier(
void)
172#elif (defined(OF_AMD64) || defined(OF_X86)) && defined(__GNUC__)
173# import "platform/x86/OFAtomic.h"
174#elif defined(OF_POWERPC) && defined(__GNUC__) && !defined(__APPLE_CC__) && \
176# import "platform/PowerPC/OFAtomic.h"
177#elif defined(OF_HAVE_ATOMIC_BUILTINS)
178# import "platform/GCC4.7/OFAtomic.h"
179#elif defined(OF_HAVE_SYNC_BUILTINS)
180# import "platform/GCC4/OFAtomic.h"
181#elif defined(OF_HAVE_OSATOMIC)
182# import "platform/macOS/OFAtomic.h"
184# error No atomic operations available!