Module: Mesa Branch: master Commit: 0ce5ec8ece78f7936dc7bf0ad58fa1ed01783e25 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0ce5ec8ece78f7936dc7bf0ad58fa1ed01783e25
Author: Mathias Fröhlich <[email protected]> Date: Sat Aug 6 07:26:51 2016 +0200 util: Use win32 intrinsics for util_last_bit if present. v2: Split into two patches. v3: Fix off by one problem. Signed-off-by: Mathias Fröhlich <[email protected]> Reviewed-by: Brian Paul <[email protected]> Tested-by: Brian Paul <[email protected]> --- src/util/bitscan.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/util/bitscan.h b/src/util/bitscan.h index 0743fe7..8afef81 100644 --- a/src/util/bitscan.h +++ b/src/util/bitscan.h @@ -157,6 +157,12 @@ util_last_bit(unsigned u) { #if defined(HAVE___BUILTIN_CLZ) return u == 0 ? 0 : 32 - __builtin_clz(u); +#elif defined(_MSC_VER) && (_M_IX86 || _M_ARM || _M_AMD64 || _M_IA64) + unsigned long index; + if (_BitScanReverse(&index, u)) + return index + 1; + else + return 0; #else unsigned r = 0; while (u) { @@ -177,6 +183,12 @@ util_last_bit64(uint64_t u) { #if defined(HAVE___BUILTIN_CLZLL) return u == 0 ? 0 : 64 - __builtin_clzll(u); +#elif defined(_MSC_VER) && (_M_AMD64 || _M_ARM || _M_IA64) + unsigned long index; + if (_BitScanReverse64(&index, u)) + return index + 1; + else + return 0; #else unsigned r = 0; while (u) { _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
