diff --git a/libc/src/__support/CPP/bit.h b/libc/src/__support/CPP/bit.h index a8bf75a9a2efa..4115d67c7705c 100644 --- a/libc/src/__support/CPP/bit.h +++ b/libc/src/__support/CPP/bit.h @@ -226,30 +226,11 @@ LIBC_INLINE constexpr To bit_or_static_cast(const From &from) { } } -#define SPECIALIZE_FLZ(NAME, TYPE, BUILTIN) \ - template <> [[nodiscard]] LIBC_INLINE constexpr int NAME(TYPE value) { \ - static_assert(cpp::is_unsigned_v); \ - return value == cpp::numeric_limits::max() \ - ? 0 \ - : BUILTIN(static_cast(~value)) + 1; \ - } - template >> [[nodiscard]] LIBC_INLINE constexpr int first_leading_zero(T value) { - return value == cpp::numeric_limits::max() - ? 0 - : countl_zero(static_cast(~value)) + 1; + return value == cpp::numeric_limits::max() ? 0 : countl_one(value) + 1; } -#if LIBC_HAS_BUILTIN(__builtin_clzs) -SPECIALIZE_FLZ(first_leading_zero, unsigned short, __builtin_clzs) -#endif -SPECIALIZE_FLZ(first_leading_zero, unsigned int, __builtin_clz) -SPECIALIZE_FLZ(first_leading_zero, unsigned long, __builtin_clzl) -SPECIALIZE_FLZ(first_leading_zero, unsigned long long, __builtin_clzll) - -#undef SPECIALIZE_FLZ - } // namespace LIBC_NAMESPACE::cpp #endif // LLVM_LIBC_SRC___SUPPORT_CPP_BIT_H