Use MSVC intrinsics for lg_floor

When using MSVC make use of its intrinsic functions (supported on
x86, amd64 & ARM) for lg_floor.
This commit is contained in:
Dave Rigby 2014-09-22 15:54:33 +01:00
parent eb5376ab9e
commit 112704cfbf

View File

@ -176,6 +176,21 @@ lg_floor(size_t x)
); );
return (ret); return (ret);
} }
#elif (defined(_MSC_VER))
JEMALLOC_INLINE size_t
lg_floor(size_t x)
{
unsigned long ret;
#if (LG_SIZEOF_PTR == 3)
_BitScanReverse64(&ret, x);
#elif (LG_SIZEOF_PTR == 2)
_BitScanReverse(&ret, x);
#else
# error "Unsupported type sizes for lg_floor()"
#endif
return (ret);
}
#elif (defined(JEMALLOC_HAVE_BUILTIN_CLZ)) #elif (defined(JEMALLOC_HAVE_BUILTIN_CLZ))
JEMALLOC_INLINE size_t JEMALLOC_INLINE size_t
lg_floor(size_t x) lg_floor(size_t x)