From: Brian Paul Date: Tue, 24 Nov 2009 01:04:22 +0000 (-0700) Subject: gallium/util: added util_bitcount() X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=15740eb03ca8fb7eda585c612c1b36ec9df4474a;p=mesa.git gallium/util: added util_bitcount() --- diff --git a/src/gallium/auxiliary/util/u_math.h b/src/gallium/auxiliary/util/u_math.h index 731a11475ec..9ed1ab6d8ee 100644 --- a/src/gallium/auxiliary/util/u_math.h +++ b/src/gallium/auxiliary/util/u_math.h @@ -490,6 +490,26 @@ util_next_power_of_two(unsigned x) } +/** + * Return number of bits set in n. + */ +static INLINE unsigned +util_bitcount(unsigned n) +{ +#if defined(PIPE_CC_GCC) + return __builtin_popcount(n); +#else + /* XXX there are more clever ways of doing this */ + unsigned bits = 0; + while (n) { + bits += (n & 1); + n = n >> 1; + } + return bits; +#endif +} + + /** * Clamp X to [MIN, MAX]. * This is a macro to allow float, int, uint, etc. types.