Бранимир Караџић 2 سال پیش
والد
کامیت
fe540e7657
3فایلهای تغییر یافته به همراه32 افزوده شده و 28 حذف شده
  1. 15 26
      include/bx/inline/uint32_t.inl
  2. 9 0
      include/bx/uint32_t.h
  3. 8 2
      tests/uint32_test.cpp

+ 15 - 26
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

+ 9 - 0
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);

+ 8 - 2
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);
 		}
 	}
 }