From d9943cd4b26c1bf108d255a29204d263348525d5 Mon Sep 17 00:00:00 2001 From: Florimond Collette <4939681+florimond-collette@users.noreply.github.com> Date: Thu, 18 May 2023 11:20:56 +0200 Subject: [PATCH] new interface for remove_trailing_zeros(uint32_t& n, int s = 0) --- include/fmt/format-inl.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/fmt/format-inl.h b/include/fmt/format-inl.h index fac89cef..d529ed82 100644 --- a/include/fmt/format-inl.h +++ b/include/fmt/format-inl.h @@ -1128,7 +1128,7 @@ bool is_left_endpoint_integer_shorter_interval(int exponent) noexcept { } // Remove trailing zeros from n and return the number of zeros removed (float) -FMT_INLINE int remove_trailing_zeros(uint32_t& n) noexcept { +FMT_INLINE int remove_trailing_zeros(uint32_t& n, int s = 0) noexcept { FMT_ASSERT(n != 0, ""); // Modular inverse of 5 (mod 2^32): (mod_inv_5 * 5) mod 2^32 = 1. // See https://github.com/fmtlib/fmt/issues/3163 for more details. @@ -1137,7 +1137,6 @@ FMT_INLINE int remove_trailing_zeros(uint32_t& n) noexcept { const uint32_t mod_inv_25 = static_cast(uint64_t(mod_inv_5) * mod_inv_5); - int s = 0; while (true) { auto q = rotr(n * mod_inv_25, 2); if (q > max_value() / 100) break; @@ -1165,7 +1164,7 @@ FMT_INLINE int remove_trailing_zeros(uint64_t& n) noexcept { // If yes, work with the quotient... auto n32 = static_cast(nm.high() >> (90 - 64)); // ... and use the 32 bit variant of the function - auto s = remove_trailing_zeros(n32); + int s = remove_trailing_zeros(n32, 8); n = n32; return s; }