From 778b571111db32e14f1f9ecf7746f2e6e5ea7f3d Mon Sep 17 00:00:00 2001 From: Orvid King Date: Mon, 27 Jul 2015 16:16:56 -0700 Subject: [PATCH] Add support for MSVC in asm_pause in Portability.h 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 | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/folly/Portability.h b/folly/Portability.h index fbd8e3ab..40a62603 100644 --- a/folly/Portability.h +++ b/folly/Portability.h @@ -284,17 +284,25 @@ inline size_t malloc_usable_size(void* ptr) { # define FOLLY_HAS_RTTI 1 #endif +#ifdef _MSC_VER +# include +#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"); -- 2.34.1