diff --git a/src/arch.h b/src/arch.h index 1dc335de6c..622e99a2fc 100644 --- a/src/arch.h +++ b/src/arch.h @@ -17,6 +17,20 @@ extern "C" void NO_RETURN vmJump(void* address, void* base, void* stack, void* thread, uintptr_t returnLow, uintptr_t returnHigh); +namespace vm { + +inline void +compileTimeMemoryBarrier() +{ +#ifdef _MSC_VER + _ReadWriteBarrier(); +#else + __asm__ __volatile__("": : :"memory"); +#endif +} + +} // namespace vm + #if (defined ARCH_x86_32) || (defined ARCH_x86_64) # include "x86.h" #elif defined ARCH_powerpc diff --git a/src/windows.cpp b/src/windows.cpp index 4ac44e4d05..b0146334b6 100644 --- a/src/windows.cpp +++ b/src/windows.cpp @@ -23,7 +23,7 @@ #undef max #undef min -#include "x86.h" +#include "arch.h" #include "system.h" #define ACQUIRE(s, x) MutexResource MAKE_NAME(mutexResource_) (s, x) diff --git a/src/x86.h b/src/x86.h index f5861de2d1..a3450377a7 100644 --- a/src/x86.h +++ b/src/x86.h @@ -161,11 +161,7 @@ trap() inline void programOrderMemoryBarrier() { -#ifdef _MSC_VER - _ReadWriteBarrier(); -#else - __asm__ __volatile__("": : :"memory"); -#endif + compileTimeMemoryBarrier(); } inline void