diff --git a/faiss/impl/platform_macros.h b/faiss/impl/platform_macros.h index 3e9716b06f..8d069995b3 100644 --- a/faiss/impl/platform_macros.h +++ b/faiss/impl/platform_macros.h @@ -39,6 +39,7 @@ // redefine the GCC intrinsics with Windows equivalents #include +#include #ifndef __clang__ inline int __builtin_ctzll(uint64_t x) { @@ -59,7 +60,16 @@ inline int __builtin_ctz(unsigned long x) { #ifndef __clang__ inline int __builtin_clzll(uint64_t x) { +#if defined(_M_X64) || defined(__x86_64__) return (int)__lzcnt64(x); +#elif defined(_M_ARM64) + unsigned long index; + int count = sizeof(uint64_t) * CHAR_BIT; + if (_BitScanReverse64(&index, x)) { + count = count - 1 - index; + } + return count; +#endif } #endif