diff --git a/c/debug.c b/c/debug.c index 0a2635e..ac1d2a6 100644 --- a/c/debug.c +++ b/c/debug.c @@ -19,12 +19,13 @@ #define DEBUG_DEBUG #endif +#include "bits.h" #include "debug.h" #define NANOSEC 1000000000 /* nano sec in sec */ #define MILLISEC 1000000 /* milli sec in sec */ -static s64 timer_start; /* in nanosecond */ +static long long timer_start; /* in nanosecond */ static u32 debug_level=0; void debug_level_set(u32 level) @@ -48,7 +49,7 @@ void debug_init(u32 level) log(0, "timer started.\n"); } -inline static s64 timer_elapsed() +inline static long long timer_elapsed() { struct timespec timer; @@ -56,7 +57,6 @@ inline static s64 timer_elapsed() return (timer.tv_sec * NANOSEC + timer.tv_nsec) - timer_start; } - /* void debug - log function * @timestamp : boolean * @indent : indent level (2 spaces each) @@ -75,9 +75,9 @@ void debug(u32 level, bool timestamp, u32 indent, const char *src, printf("%*s", 2*(indent-1), ""); if (timestamp) { - s64 diff = timer_elapsed(); - printf("%ld.%03ld ", diff/NANOSEC, (diff/1000000)%1000); - printf("%010ld ", diff); + long long diff = timer_elapsed(); + printf("%lld.%03lld ", diff/NANOSEC, (diff/1000000)%1000); + printf("%010lld ", diff); } if (src) { diff --git a/c/include/bits.h b/c/include/bits.h index 31db90a..85d6ea0 100644 --- a/c/include/bits.h +++ b/c/include/bits.h @@ -25,10 +25,10 @@ #endif /* no plan to support 32bits for now... + * #if __WORDSIZE != 64 + * #error "Only 64 bits word size supported." + * #endif */ -#if __WORDSIZE != 64 -#error "Only 64 bits word size supported." -#endif /* fixed-size types */ @@ -73,6 +73,27 @@ static __always_inline int popcount64(u64 n) # endif } +static __always_inline int popcount32(u32 n) +{ +# if __has_builtin(__builtin_popcount) +# ifdef DEBUG_BITS + log_f(1, "builtin.\n"); +# endif + return __builtin_popcount(n); + +# else +# ifdef DEBUG_BITS + log_f(1, "emulated.\n"); +# endif + int count = 0; + while (n) { + count++; + n &= (n - 1); + } + return count; +# endif +} + /* char is a special case, as it can be signed or unsigned */ typedef signed char schar; @@ -242,27 +263,6 @@ static __always_inline uint ffs32(u32 n) # endif } -static __always_inline int popcount32(u32 n) -{ -# if __has_builtin(__builtin_popcount) -# ifdef DEBUG_BITS - log_f(1, "builtin.\n"); -# endif - return __builtin_popcount(n); - -# else -# ifdef DEBUG_BITS - log_f(1, "emulated.\n"); -# endif - int count = 0; - while (n) { - count++; - n &= (n - 1); - } - return count; -# endif -} - /* rolXX are taken from kernel's are are: * SPDX-License-Identifier: GPL-2.0 */