From cf8c0e7442d2288c0ccdff70b4b4288c3e9fcff0 Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Fri, 8 Nov 2024 10:22:26 -0800 Subject: [PATCH] clang and gcc bit ops --- src/base/base_core.c | 34 +++++++++++----------------------- src/base/base_core.h | 1 - 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/base/base_core.c b/src/base/base_core.c index 4868add6..cd22d9f1 100644 --- a/src/base/base_core.c +++ b/src/base/base_core.c @@ -143,12 +143,6 @@ bswap_u64(U64 x) #if COMPILER_MSVC || (COMPILER_CLANG && OS_WINDOWS) -internal U64 -count_bits_set16(U16 val) -{ - return __popcnt16(val); -} - internal U64 count_bits_set32(U32 val) { @@ -195,46 +189,40 @@ clz64(U64 mask) #elif COMPILER_CLANG || COMPILER_GCC -internal U64 -count_bits_set16(U16 val) -{ - NotImplemented; - return 0; -} - internal U64 count_bits_set32(U32 val) { - NotImplemented; - return 0; + return __builtin_popcount(val); } internal U64 count_bits_set64(U64 val) { - NotImplemented; - return 0; + return __builtin_popcountll(val); } internal U64 ctz32(U32 val) { - NotImplemented; - return 0; + return __builtin_ctz(val); } internal U64 clz32(U32 val) { - NotImplemented; - return 0; + return __builtin_clz(val); +} + +internal U64 +ctz64(U64 val) +{ + return __builtin_ctzll(val); } internal U64 clz64(U64 val) { - NotImplemented; - return 0; + return __builtin_clzll(val); } #else diff --git a/src/base/base_core.h b/src/base/base_core.h index f3bf64d1..54c7de26 100644 --- a/src/base/base_core.h +++ b/src/base/base_core.h @@ -769,7 +769,6 @@ internal U16 bswap_u16(U16 x); internal U32 bswap_u32(U32 x); internal U64 bswap_u64(U64 x); -internal U64 count_bits_set16(U16 val); internal U64 count_bits_set32(U32 val); internal U64 count_bits_set64(U64 val);