summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNursan Valeyev <tindarid@gmail.com>2021-10-11 23:40:49 +0300
committerNursan Valeyev <tindarid@gmail.com>2021-10-12 01:42:10 +0300
commitfe927f867fd43f83d95de2482f8c9a1e99ec778f (patch)
tree6f5db0e07b83ddf873f4ef1b080225dd21fa292e
parent106f2d9f25b6687d1b980353af0c03e9faae5517 (diff)
downloadliburing-fe927f867fd43f83d95de2482f8c9a1e99ec778f.tar.gz
liburing-fe927f867fd43f83d95de2482f8c9a1e99ec778f.tar.bz2
setup.c: rewrite `__fls()`
Rewrite handmade `__fls()`: use `__builtin_clz()`. Also add `inline` specifier. Signed-off-by: Nursan Valeyev <tindarid@gmail.com>
-rw-r--r--src/setup.c26
1 files changed, 2 insertions, 24 deletions
diff --git a/src/setup.c b/src/setup.c
index 5543468..891fc43 100644
--- a/src/setup.c
+++ b/src/setup.c
@@ -211,33 +211,11 @@ void io_uring_free_probe(struct io_uring_probe *probe)
free(probe);
}
-static int __fls(int x)
+static inline int __fls(int x)
{
- int r = 32;
-
if (!x)
return 0;
- if (!(x & 0xffff0000u)) {
- x <<= 16;
- r -= 16;
- }
- if (!(x & 0xff000000u)) {
- x <<= 8;
- r -= 8;
- }
- if (!(x & 0xf0000000u)) {
- x <<= 4;
- r -= 4;
- }
- if (!(x & 0xc0000000u)) {
- x <<= 2;
- r -= 2;
- }
- if (!(x & 0x80000000u)) {
- x <<= 1;
- r -= 1;
- }
- return r;
+ return 8 * sizeof(x) - __builtin_clz(x);
}
static unsigned roundup_pow2(unsigned depth)