diff options
Diffstat (limited to 'lib/mesa/src/util/bitscan.h')
-rw-r--r-- | lib/mesa/src/util/bitscan.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/mesa/src/util/bitscan.h b/lib/mesa/src/util/bitscan.h index a5dfa1f9e..611e81205 100644 --- a/lib/mesa/src/util/bitscan.h +++ b/lib/mesa/src/util/bitscan.h @@ -52,7 +52,7 @@ extern "C" { #define ffs __builtin_ffs #elif defined(_MSC_VER) && (_M_IX86 || _M_ARM || _M_AMD64 || _M_IA64) static inline -int ffs(unsigned i) +int ffs(int i) { unsigned long index; if (_BitScanForward(&index, i)) @@ -62,14 +62,14 @@ int ffs(unsigned i) } #else extern -int ffs(unsigned i); +int ffs(int i); #endif #ifdef HAVE___BUILTIN_FFSLL #define ffsll __builtin_ffsll #elif defined(_MSC_VER) && (_M_AMD64 || _M_ARM || _M_IA64) static inline int -ffsll(uint64_t i) +ffsll(long long int i) { unsigned long index; if (_BitScanForward64(&index, i)) @@ -79,7 +79,7 @@ ffsll(uint64_t i) } #else extern int -ffsll(uint64_t val); +ffsll(long long int val); #endif @@ -136,7 +136,7 @@ u_bit_scan_consecutive_range(unsigned *mask, int *start, int *count) static inline void u_bit_scan_consecutive_range64(uint64_t *mask, int *start, int *count) { - if (*mask == ~0llu) { + if (*mask == ~0ull) { *start = 0; *count = 64; *mask = 0; @@ -226,6 +226,15 @@ u_bit_consecutive(unsigned start, unsigned count) return ((1u << count) - 1) << start; } +static inline uint64_t +u_bit_consecutive64(unsigned start, unsigned count) +{ + assert(start + count <= 64); + if (count == 64) + return ~(uint64_t)0; + return (((uint64_t)1 << count) - 1) << start; +} + #ifdef __cplusplus } |