From f89cd276f7dead38f11cebc73d1e91a1b1b38124 Mon Sep 17 00:00:00 2001 From: jk-jeon <33922675+jk-jeon@users.noreply.github.com> Date: Tue, 17 Jan 2023 15:04:34 -0800 Subject: [PATCH] Refactor countl_zero fallback (#3276) --- include/fmt/format.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/include/fmt/format.h b/include/fmt/format.h index 2a54044a6529..4a1663bb3e27 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -485,24 +485,26 @@ inline auto bit_cast(const From& from) -> To { return result; } +template +FMT_CONSTEXPR20 inline auto countl_zero_fallback(UInt n) -> int { + int lz = 0; + constexpr UInt msb_mask = static_cast(1) << (num_bits() - 1); + for (; (n & msb_mask) == 0; n <<= 1) lz++; + return lz; +} + FMT_CONSTEXPR20 inline auto countl_zero(uint32_t n) -> int { #ifdef FMT_BUILTIN_CLZ if (!is_constant_evaluated()) return FMT_BUILTIN_CLZ(n); #endif - int lz = 0; - constexpr uint32_t msb_mask = 1u << (num_bits() - 1); - for (; (n & msb_mask) == 0; n <<= 1) lz++; - return lz; + return countl_zero_fallback(n); } FMT_CONSTEXPR20 inline auto countl_zero(uint64_t n) -> int { #ifdef FMT_BUILTIN_CLZLL if (!is_constant_evaluated()) return FMT_BUILTIN_CLZLL(n); #endif - int lz = 0; - constexpr uint64_t msb_mask = 1ull << (num_bits() - 1); - for (; (n & msb_mask) == 0; n <<= 1) lz++; - return lz; + return countl_zero_fallback(n); } FMT_INLINE void assume(bool condition) { @@ -3493,7 +3495,7 @@ FMT_CONSTEXPR20 auto format_float(Float value, int precision, float_specs specs, } } - // Compute the actual number of decimal digits to print + // Compute the actual number of decimal digits to print. if (fixed) { adjust_precision(precision, exp + digits_in_the_first_segment); }