summaryrefslogtreecommitdiff
path: root/absl/numeric/internal/bits.h
diff options
context:
space:
mode:
Diffstat (limited to 'absl/numeric/internal/bits.h')
-rw-r--r--absl/numeric/internal/bits.h12
1 files changed, 4 insertions, 8 deletions
diff --git a/absl/numeric/internal/bits.h b/absl/numeric/internal/bits.h
index 50828156..af45700f 100644
--- a/absl/numeric/internal/bits.h
+++ b/absl/numeric/internal/bits.h
@@ -23,12 +23,6 @@
// windows intrinsic functions.
#if defined(_MSC_VER) && !defined(__clang__)
#include <intrin.h>
-#if defined(_M_X64)
-#pragma intrinsic(_BitScanReverse64)
-#pragma intrinsic(_BitScanForward64)
-#endif
-#pragma intrinsic(_BitScanReverse)
-#pragma intrinsic(_BitScanForward)
#endif
#include "absl/base/attributes.h"
@@ -185,7 +179,8 @@ CountLeadingZeroes64(uint64_t x) {
// Handle 0 as a special case because __builtin_clzll(0) is undefined.
return x == 0 ? 64 : __builtin_clzll(x);
-#elif defined(_MSC_VER) && !defined(__clang__) && defined(_M_X64)
+#elif defined(_MSC_VER) && !defined(__clang__) && \
+ (defined(_M_X64) || defined(_M_ARM64))
// MSVC does not have __buitin_clzll. Use _BitScanReverse64.
unsigned long result = 0; // NOLINT(runtime/int)
if (_BitScanReverse64(&result, x)) {
@@ -271,7 +266,8 @@ CountTrailingZeroesNonzero64(uint64_t x) {
static_assert(sizeof(unsigned long long) == sizeof(x), // NOLINT(runtime/int)
"__builtin_ctzll does not take 64-bit arg");
return __builtin_ctzll(x);
-#elif defined(_MSC_VER) && !defined(__clang__) && defined(_M_X64)
+#elif defined(_MSC_VER) && !defined(__clang__) && \
+ (defined(_M_X64) || defined(_M_ARM64))
unsigned long result = 0; // NOLINT(runtime/int)
_BitScanForward64(&result, x);
return result;