Commit: e3269b53edcea93b8dffd45b7665d655ff35a372
Parent: f6e8bfbe3762c7ef10fe2c15b8970020fd18aa19
Author: Randy Palamar
Date: Thu, 8 Oct 2026 20:22:57 -0700
base/intrinsics: change return type of clz/ctx to u32
GCC misbehaves when the return type is u64. Obviously the result
fits in a u32 so no problem to use that if it makes GCC happy.
Diffstat:
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/base_intrinsics.h b/base_intrinsics.h
@@ -151,7 +151,7 @@
#if COMPILER_MSVC
-function force_inline u64
+function force_inline u32
clz_u64(u64 a)
{
u64 result = 64, index;
@@ -162,7 +162,7 @@ clz_u64(u64 a)
return result;
}
-function force_inline u64
+function force_inline u32
ctz_u64(u64 a)
{
u64 result = 64, index;
@@ -175,19 +175,17 @@ ctz_u64(u64 a)
#else /* !COMPILER_MSVC */
-function force_inline u64
-clz_u64(u32 a)
+function force_inline u32
+clz_u64(u64 a)
{
- u64 result = 64;
- if (a) result = (u64)__builtin_clzll(a);
+ u32 result = a ? __builtin_clzll(a) : 64;
return result;
}
-function force_inline u64
+function force_inline u32
ctz_u64(u64 a)
{
- u64 result = 64;
- if (a) result = (u64)__builtin_ctzll(a);
+ u32 result = a ? __builtin_ctzll(a) : 64;
return result;
}