32 #ifndef ZYCORE_ATOMIC_H
33 #define ZYCORE_ATOMIC_H
51 ZyanU32
volatile value;
59 ZyanU64
volatile value;
81 #define ZYAN_ATOMIC_COMPARE_EXCHANGE(destination, comparand, value) \
82 ZyanAtomicCompareExchange((ZyanAtomicPointer*)&(destination), (comparand), (value))
87 #define ZYAN_ATOMIC_INCREMENT(destination) \
88 ZyanAtomicIncrement((ZyanAtomicPointer*)&(destination));
93 #define ZYAN_ATOMIC_DECREMENT(destination) \
94 ZyanAtomicDecrement((ZyanAtomicPointer*)&(destination));
103 #define ZYAN_ATOMIC_COMPARE_EXCHANGE32(destination, comparand, value) \
104 ZyanAtomicCompareExchange32((ZyanAtomic32*)&(destination), (comparand), (value))
109 #define ZYAN_ATOMIC_INCREMENT32(destination) \
110 ZyanAtomicIncrement32((ZyanAtomic32*)&(destination));
115 #define ZYAN_ATOMIC_DECREMENT32(destination) \
116 ZyanAtomicDecrement32((ZyanAtomic32*)&(destination));
125 #define ZYAN_ATOMIC_COMPARE_EXCHANGE64(destination, comparand, value) \
126 ZyanAtomicCompareExchange64((ZyanAtomic64*)&(destination), (comparand), (value))
131 #define ZYAN_ATOMIC_INCREMENT64(destination) \
132 ZyanAtomicIncrement64((ZyanAtomic64*)&(destination));
137 #define ZYAN_ATOMIC_DECREMENT64(destination) \
138 ZyanAtomicDecrement64((ZyanAtomic64*)&(destination));
160 ZyanUPointer comparand, ZyanUPointer value);
187 static ZyanU32 ZyanAtomicCompareExchange32(
ZyanAtomic32* destination,
188 ZyanU32 comparand, ZyanU32 value);
193 static ZyanU32 ZyanAtomicIncrement32(
ZyanAtomic32* destination);
198 static ZyanU32 ZyanAtomicDecrement32(
ZyanAtomic32* destination);
207 static ZyanU64 ZyanAtomicCompareExchange64(
ZyanAtomic64* destination,
208 ZyanU64 comparand, ZyanU64 value);
213 static ZyanU64 ZyanAtomicIncrement64(
ZyanAtomic64* destination);
218 static ZyanU64 ZyanAtomicDecrement64(
ZyanAtomic64* destination);
224 #if defined(ZYAN_CLANG) || defined(ZYAN_GCC) || defined(ZYAN_ICC)
225 # include <Zycore/Internal/AtomicGNU.h>
226 #elif defined(ZYAN_MSVC)
227 # include <Zycore/Internal/AtomicMSVC.h>
229 # error "Unsupported compiler detected"
void * ZyanVoidPointer
Definition: Types.h:166