6 #ifndef EASTL_ATOMIC_INTERNAL_ARCH_X86_MEMORY_BARRIER_H
7 #define EASTL_ATOMIC_INTERNAL_ARCH_X86_MEMORY_BARRIER_H
9 #if defined(EA_PRAGMA_ONCE_SUPPORTED)
19 #if defined(EA_COMPILER_MSVC)
32 #define EASTL_ARCH_ATOMIC_CPU_MB() \
34 EA_DISABLE_VC_WARNING(4459 4456); \
36 _InterlockedExchangeAdd(&_, 0); \
37 EA_RESTORE_VC_WARNING(); \
42 #define EASTL_ARCH_ATOMIC_CPU_MB() \
43 EASTL_ATOMIC_COMPILER_BARRIER(); \
45 EASTL_ATOMIC_COMPILER_BARRIER()
49 #elif defined(__clang__) || defined(EA_COMPILER_GNUC)
67 #if defined(EA_PROCESSOR_X86)
69 #define EASTL_ARCH_ATOMIC_CPU_MB() \
70 __asm__ __volatile__ ("lock; addl $0, -4(%%esp)" ::: "memory", "cc")
72 #elif defined(EA_PROCESSOR_X86_64)
74 #define EASTL_ARCH_ATOMIC_CPU_MB() \
75 __asm__ __volatile__ ("lock; addl $0, -8(%%rsp)" ::: "memory", "cc")
79 #define EASTL_ARCH_ATOMIC_CPU_MB() \
80 __asm__ __volatile__ ("mfence" ::: "memory")
92 #define EASTL_ARCH_ATOMIC_CPU_WMB() \
93 EASTL_ATOMIC_COMPILER_BARRIER()
100 #define EASTL_ARCH_ATOMIC_CPU_RMB() \
101 EASTL_ATOMIC_COMPILER_BARRIER()