Branimir Karadžić 8 years ago
parent
commit
f6e6db22a0
2 changed files with 24 additions and 20 deletions
  1. 0 19
      include/bx/cpu.h
  2. 24 1
      include/bx/inline/cpu.inl

+ 0 - 19
include/bx/cpu.h

@@ -8,25 +8,6 @@
 
 #include "bx.h"
 
-#if BX_COMPILER_MSVC
-#	include <math.h> // math.h is included because VS bitches:
-					 // warning C4985: 'ceil': attributes not present on previous declaration.
-					 // must be included before intrin.h.
-#	include <intrin.h>
-#	include <windows.h>
-#	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
 {
 	///

+ 24 - 1
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
 	}