Add support for MSVC in asm_pause in Portability.h
authorOrvid King <blah38621@gmail.com>
Mon, 27 Jul 2015 23:16:56 +0000 (16:16 -0700)
committerfacebook-github-bot-4 <folly-bot@fb.com>
Tue, 28 Jul 2015 00:22:11 +0000 (17:22 -0700)
Summary: This implements support for `asm_volatile_pause` and `asm_pause`, as defined in `Portability.h`, for MSVC.
This is needed because MSVC x64 doesn't support inline assembly.
Closes #254

Reviewed By: @yfeldblum

Differential Revision: D2283006

Pulled By: @sgolemon

folly/Portability.h

index fbd8e3aba8786fab5297c0073e5fa5b459c1df0e..40a626038e688d751aa77eb16ea1115c73a699ee 100644 (file)
@@ -284,17 +284,25 @@ inline size_t malloc_usable_size(void* ptr) {
 # define FOLLY_HAS_RTTI 1
 #endif
 
+#ifdef _MSC_VER
+# include <intrin.h>
+#endif
+
 namespace folly {
 
 inline void asm_volatile_pause() {
-#if defined(__i386__) || FOLLY_X64
+#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
+  ::_mm_pause();
+#elif defined(__i386__) || FOLLY_X64
   asm volatile ("pause");
 #elif FOLLY_A64
   asm volatile ("wfe");
 #endif
 }
 inline void asm_pause() {
-#if defined(__i386__) || FOLLY_X64
+#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
+  ::_mm_pause();
+#elif defined(__i386__) || FOLLY_X64
   asm ("pause");
 #elif FOLLY_A64
   asm ("wfe");