Go to the documentation of this file.
121 #if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__)
122 void _ReadWriteBarrier(
void);
123 #pragma intrinsic(_ReadWriteBarrier)
124 #define SDL_CompilerBarrier() _ReadWriteBarrier()
125 #elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
127 #define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory")
128 #elif defined(__WATCOMC__)
130 #pragma aux SDL_CompilerBarrier = "" parm [] modify exact [];
132 #define SDL_CompilerBarrier() \
133 { SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); }
158 #if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
159 #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory")
160 #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory")
161 #elif defined(__GNUC__) && defined(__aarch64__)
162 #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
163 #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory")
164 #elif defined(__GNUC__) && defined(__arm__)
165 #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
166 #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
167 #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory")
168 #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_5TE__)
171 #define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction()
172 #define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction()
174 #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
175 #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
178 #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory")
179 #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory")
182 #if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
184 #include <mbarrier.h>
185 #define SDL_MemoryBarrierRelease() __machine_rel_barrier()
186 #define SDL_MemoryBarrierAcquire() __machine_acq_barrier()
189 #define SDL_MemoryBarrierRelease() SDL_CompilerBarrier()
190 #define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier()
233 #ifndef SDL_AtomicIncRef
234 #define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1)
243 #ifndef SDL_AtomicDecRef
244 #define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1)