Change msvc version of clz & clzll to match __builtin_clz & _builtin_clzll

This commit is contained in:
Junekey Jeon 2020-09-18 10:04:40 -07:00
parent 66ab67f57d
commit b3c0d56e76

View File

@ -193,7 +193,7 @@ namespace detail {
# ifndef __clang__
# pragma intrinsic(_BitScanReverse)
# endif
inline uint32_t clz(uint32_t x) {
inline int clz(uint32_t x) {
unsigned long r = 0;
_BitScanReverse(&r, x);
@ -202,7 +202,7 @@ inline uint32_t clz(uint32_t x) {
// "r", but the only way that can happen is if "x" is 0,
// which the callers guarantee to not happen.
FMT_SUPPRESS_MSC_WARNING(6102)
return 31 - r;
return 31 - static_cast<int>(r);
}
# define FMT_BUILTIN_CLZ(n) detail::clz(n)
@ -210,7 +210,7 @@ inline uint32_t clz(uint32_t x) {
# pragma intrinsic(_BitScanReverse64)
# endif
inline uint32_t clzll(uint64_t x) {
inline int clzll(uint64_t x) {
unsigned long r = 0;
# ifdef _WIN64
_BitScanReverse64(&r, x);
@ -227,7 +227,7 @@ inline uint32_t clzll(uint64_t x) {
// "r", but the only way that can happen is if "x" is 0,
// which the callers guarantee to not happen.
FMT_SUPPRESS_MSC_WARNING(6102)
return 63 - r;
return 63 - static_cast<int>(r);
}
# define FMT_BUILTIN_CLZLL(n) detail::clzll(n)
} // namespace detail