From fe540e7657da9fca5ff9d98205bc67230e397393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Sat, 18 Nov 2023 14:43:35 -0800 Subject: [PATCH] Cleanup. --- include/bx/inline/uint32_t.inl | 41 +++++++++++++--------------------- include/bx/uint32_t.h | 9 ++++++++ tests/uint32_test.cpp | 10 +++++++-- 3 files changed, 32 insertions(+), 28 deletions(-) diff --git a/include/bx/inline/uint32_t.inl b/include/bx/inline/uint32_t.inl index 092be1f..08b0530 100644 --- a/include/bx/inline/uint32_t.inl +++ b/include/bx/inline/uint32_t.inl @@ -544,32 +544,6 @@ namespace bx return result; } - inline BX_CONSTEXPR_FUNC uint32_t uint64_cntbits(uint64_t _val) - { - const uint32_t lo = uint32_t(_val&UINT32_MAX); - const uint32_t hi = uint32_t(_val>>32); - - const uint32_t total = bx::uint32_cntbits(lo) - + bx::uint32_cntbits(hi); - return total; - } - - inline BX_CONSTEXPR_FUNC uint32_t uint64_cntlz(uint64_t _val) - { - return _val & UINT64_C(0xffffffff00000000) - ? uint32_cntlz(uint32_t(_val>>32) ) - : uint32_cntlz(uint32_t(_val) ) + 32 - ; - } - - inline BX_CONSTEXPR_FUNC uint32_t uint64_cnttz(uint64_t _val) - { - return _val & UINT64_C(0xffffffff) - ? uint32_cnttz(uint32_t(_val) ) - : uint32_cnttz(uint32_t(_val>>32) ) + 32 - ; - } - inline BX_CONSTEXPR_FUNC uint64_t uint64_li(uint64_t _a) { return _a; @@ -670,6 +644,21 @@ namespace bx return _a * _b; } + inline BX_CONSTEXPR_FUNC uint32_t uint64_cntbits(uint64_t _val) + { + return uint32_cntbits(_val); + } + + inline BX_CONSTEXPR_FUNC uint32_t uint64_cntlz(uint64_t _val) + { + return uint32_cntlz(_val); + } + + inline BX_CONSTEXPR_FUNC uint32_t uint64_cnttz(uint64_t _val) + { + return uint32_cnttz(_val); + } + inline BX_CONSTEXPR_FUNC uint32_t uint32_gcd(uint32_t _a, uint32_t _b) { do diff --git a/include/bx/uint32_t.h b/include/bx/uint32_t.h index f40c089..deb09ca 100644 --- a/include/bx/uint32_t.h +++ b/include/bx/uint32_t.h @@ -239,6 +239,15 @@ namespace bx /// BX_CONSTEXPR_FUNC uint64_t uint64_mul(uint64_t _a, uint64_t _b); + /// + BX_CONSTEXPR_FUNC uint32_t uint64_cntbits(uint64_t _val); + + /// + BX_CONSTEXPR_FUNC uint32_t uint64_cntlz(uint64_t _val); + + /// + BX_CONSTEXPR_FUNC uint32_t uint64_cnttz(uint64_t _val); + /// Greatest common divisor. /// BX_CONSTEXPR_FUNC uint32_t uint32_gcd(uint32_t _a, uint32_t _b); diff --git a/tests/uint32_test.cpp b/tests/uint32_test.cpp index a4477f1..31a4314 100644 --- a/tests/uint32_test.cpp +++ b/tests/uint32_test.cpp @@ -124,16 +124,22 @@ TEST_CASE("halfTo/FromFloat", "[uint32_t]") } } -TEST_CASE("uint32_testpow2") +TEST_CASE("uint32_testpow2", "[uint32_t]") { uint32_t shift = 0; + uint32_t nextpow2 = bx::uint32_nextpow2(1); - for (uint32_t ii = 0; ii < UINT32_MAX; ++ii) + for (uint32_t ii = 1; ii < 1<<24; ++ii) { + REQUIRE(nextpow2 == bx::uint32_nextpow2(ii) ); + if (bx::uint32_testpow2(ii) ) { REQUIRE(ii == 1u << shift); ++shift; + + REQUIRE(ii == nextpow2); + nextpow2 = bx::uint32_nextpow2(ii+1); } } }