From 3562f48c9d58793429fc5ea655b8b4629b495ce0 Mon Sep 17 00:00:00 2001 From: Kevin Strasser Date: Fri, 14 Jun 2019 14:27:53 -0700 Subject: [PATCH] util: move bitcount to bitscan.h bitcount is free from the pipe header dependencies that make u_math.h hard to include by non-gallium specific code, so move it to bitscan.h. bitscan.h is included by u_math.h so existing references will continue working. Signed-off-by: Kevin Strasser Reviewed-by: Emil Velikov --- src/util/bitscan.h | 32 ++++++++++++++++++++++++++++++++ src/util/u_math.h | 36 ------------------------------------ 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/src/util/bitscan.h b/src/util/bitscan.h index dc89ac93f28..02b3afda7f9 100644 --- a/src/util/bitscan.h +++ b/src/util/bitscan.h @@ -286,6 +286,38 @@ u_bit_consecutive64(unsigned start, unsigned count) return (((uint64_t)1 << count) - 1) << start; } +/** + * Return number of bits set in n. + */ +static inline unsigned +util_bitcount(unsigned n) +{ +#if defined(HAVE___BUILTIN_POPCOUNT) + return __builtin_popcount(n); +#else + /* K&R classic bitcount. + * + * For each iteration, clear the LSB from the bitfield. + * Requires only one iteration per set bit, instead of + * one iteration per bit less than highest set bit. + */ + unsigned bits; + for (bits = 0; n; bits++) { + n &= n - 1; + } + return bits; +#endif +} + +static inline unsigned +util_bitcount64(uint64_t n) +{ +#ifdef HAVE___BUILTIN_POPCOUNTLL + return __builtin_popcountll(n); +#else + return util_bitcount(n) + util_bitcount(n >> 32); +#endif +} #ifdef __cplusplus } diff --git a/src/util/u_math.h b/src/util/u_math.h index a9fa35457ff..11fbfb45761 100644 --- a/src/util/u_math.h +++ b/src/util/u_math.h @@ -548,42 +548,6 @@ util_next_power_of_two64(uint64_t x) #endif } - -/** - * Return number of bits set in n. - */ -static inline unsigned -util_bitcount(unsigned n) -{ -#if defined(HAVE___BUILTIN_POPCOUNT) - return __builtin_popcount(n); -#else - /* K&R classic bitcount. - * - * For each iteration, clear the LSB from the bitfield. - * Requires only one iteration per set bit, instead of - * one iteration per bit less than highest set bit. - */ - unsigned bits; - for (bits = 0; n; bits++) { - n &= n - 1; - } - return bits; -#endif -} - - -static inline unsigned -util_bitcount64(uint64_t n) -{ -#ifdef HAVE___BUILTIN_POPCOUNTLL - return __builtin_popcountll(n); -#else - return util_bitcount(n) + util_bitcount(n >> 32); -#endif -} - - /** * Reverse bits in n * Algorithm taken from: -- 2.30.2