diff --git a/include/bx/cpu.h b/include/bx/cpu.h index ebd4868..fdf8e7e 100644 --- a/include/bx/cpu.h +++ b/include/bx/cpu.h @@ -8,25 +8,6 @@ #include "bx.h" -#if BX_COMPILER_MSVC -# include // math.h is included because VS bitches: - // warning C4985: 'ceil': attributes not present on previous declaration. - // must be included before intrin.h. -# include -# include -# if BX_PLATFORM_WINRT -# define _InterlockedExchangeAdd64 InterlockedExchangeAdd64 -# endif // BX_PLATFORM_WINRT -extern "C" void _ReadBarrier(); -extern "C" void _WriteBarrier(); -extern "C" void _ReadWriteBarrier(); -# pragma intrinsic(_ReadBarrier) -# pragma intrinsic(_WriteBarrier) -# pragma intrinsic(_ReadWriteBarrier) -# pragma intrinsic(_InterlockedExchangeAdd) -# pragma intrinsic(_InterlockedCompareExchange) -#endif // BX_COMPILER_MSVC - namespace bx { /// diff --git a/include/bx/inline/cpu.inl b/include/bx/inline/cpu.inl index 2e7ae32..530ef54 100644 --- a/include/bx/inline/cpu.inl +++ b/include/bx/inline/cpu.inl @@ -7,6 +7,30 @@ # error "Must be included from bx/cpu.h!" #endif // BX_CPU_H_HEADER_GUARD +#if BX_COMPILER_MSVC +# if BX_PLATFORM_WINRT +# define _InterlockedExchangeAdd64 InterlockedExchangeAdd64 +# endif // BX_PLATFORM_WINRT + +extern "C" void _ReadBarrier(); +# pragma intrinsic(_ReadBarrier) + +extern "C" void _WriteBarrier(); +# pragma intrinsic(_WriteBarrier) + +extern "C" void _ReadWriteBarrier(); +# pragma intrinsic(_ReadWriteBarrier) + +extern "C" long _InterlockedExchangeAdd(long volatile* _target, long _value); +# pragma intrinsic(_InterlockedExchangeAdd) + +extern "C" long _InterlockedCompareExchange(long volatile* _target, long _exchange, long _comparand); +# pragma intrinsic(_InterlockedCompareExchange) + +extern "C" void* InterlockedExchangePointer(void volatile* _target, void* _value); +# pragma intrinsic(InterlockedExchangePointer) +#endif // BX_COMPILER_MSVC + namespace bx { inline void readBarrier() @@ -44,7 +68,6 @@ namespace bx _mm_mfence(); #else __sync_synchronize(); -// asm volatile("mfence":::"memory"); #endif // BX_COMPILER }