mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-01 17:52:03 +00:00
MINOR: standard: Add my_ffsl function to get the position of the bit set to one
This commit is contained in:
parent
f1f0c5f591
commit
ff8131861f
@ -793,6 +793,46 @@ static inline unsigned int my_popcountl(unsigned long a)
|
||||
return cnt;
|
||||
}
|
||||
|
||||
/* Simple ffs implementation. It returns the position of the lowest bit set to
|
||||
* one. */
|
||||
static inline unsigned int my_ffsl(unsigned long a)
|
||||
{
|
||||
unsigned int cnt;
|
||||
|
||||
if (!a)
|
||||
return 0;
|
||||
|
||||
cnt = 1;
|
||||
#if LONG_MAX > 0x7FFFFFFFL /* 64bits */
|
||||
if (!(a & 0xFFFFFFFFUL)) {
|
||||
a >>= 32;
|
||||
cnt += 32;
|
||||
}
|
||||
#endif
|
||||
if (!(a & 0XFFFFU)) {
|
||||
a >>= 16;
|
||||
cnt += 16;
|
||||
}
|
||||
if (!(a & 0XFF)) {
|
||||
a >>= 8;
|
||||
cnt += 8;
|
||||
}
|
||||
if (!(a & 0xf)) {
|
||||
a >>= 4;
|
||||
cnt += 4;
|
||||
}
|
||||
if (!(a & 0x3)) {
|
||||
a >>= 2;
|
||||
cnt += 2;
|
||||
}
|
||||
if (!(a & 0x1)) {
|
||||
a >>= 1;
|
||||
cnt += 1;
|
||||
}
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
/* Build a word with the <bits> lower bits set (reverse of my_popcountl) */
|
||||
static inline unsigned long nbits(int bits)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user