diff options
author | marha <marha@users.sourceforge.net> | 2014-05-01 16:56:41 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2014-05-01 16:56:41 +0200 |
commit | ea0cd87ecbe9fc3c5503ccad7f87a895a458d6d4 (patch) | |
tree | a961f21249024edee920dc41bb54b2507cf08696 /mesalib/src/gallium/auxiliary/util/u_math.h | |
parent | 03418d6378fe72bea2ff4b941792054dd208b65d (diff) | |
download | vcxsrv-ea0cd87ecbe9fc3c5503ccad7f87a895a458d6d4.tar.gz vcxsrv-ea0cd87ecbe9fc3c5503ccad7f87a895a458d6d4.tar.bz2 vcxsrv-ea0cd87ecbe9fc3c5503ccad7f87a895a458d6d4.zip |
xkeyboard-config libxcb xserver mesa git update 1 May 2014
xserver commit 2535b76c0d32bc1dd0ddaca06a419a68a4757df1
libxcb commit d978a4f69b30b630f28d07f1003cf290284d24d8
xkeyboard-config commit 5274a69ee85fb6c425c33c631fa8ea1310a8f097
mesa commit a773fdc64da8ba88d8c7f8e383c45248b0c3aa19
Diffstat (limited to 'mesalib/src/gallium/auxiliary/util/u_math.h')
-rw-r--r-- | mesalib/src/gallium/auxiliary/util/u_math.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/mesalib/src/gallium/auxiliary/util/u_math.h b/mesalib/src/gallium/auxiliary/util/u_math.h index ec03e4e58..a60e1830a 100644 --- a/mesalib/src/gallium/auxiliary/util/u_math.h +++ b/mesalib/src/gallium/auxiliary/util/u_math.h @@ -567,6 +567,22 @@ static INLINE unsigned util_last_bit(unsigned u) #endif } +/** + * Find last bit in a word that does not match the sign bit. The least + * significant bit is 1. + * Return 0 if no bits are set. + */ +static INLINE unsigned util_last_bit_signed(int i) +{ +#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 407) + return 31 - __builtin_clrsb(i); +#else + if (i >= 0) + return util_last_bit(i); + else + return util_last_bit(~(unsigned)i); +#endif +} /* Destructively loop over all of the bits in a mask as in: * @@ -715,6 +731,21 @@ util_bitcount(unsigned n) #endif } +/** + * Reverse bits in n + * Algorithm taken from: + * http://stackoverflow.com/questions/9144800/c-reverse-bits-in-unsigned-integer + */ +static INLINE unsigned +util_bitreverse(unsigned n) +{ + n = ((n >> 1) & 0x55555555u) | ((n & 0x55555555u) << 1); + n = ((n >> 2) & 0x33333333u) | ((n & 0x33333333u) << 2); + n = ((n >> 4) & 0x0f0f0f0fu) | ((n & 0x0f0f0f0fu) << 4); + n = ((n >> 8) & 0x00ff00ffu) | ((n & 0x00ff00ffu) << 8); + n = ((n >> 16) & 0xffffu) | ((n & 0xffffu) << 16); + return n; +} /** * Convert from little endian to CPU byte order. |