]> git.ozlabs.org Git - ccan/blobdiff - ccan/alloc/bitops.c
tdb2: copy tdb1's changed expansion logic.
[ccan] / ccan / alloc / bitops.c
index b408a20f0e579d8ce83228f1fc60a79a6f7e844f..78c2b24f4f14f13287ef77445fdc448e535b7bda 100644 (file)
@@ -1,3 +1,4 @@
+/* Licensed under LGPLv2.1+ - see LICENSE file for details */
 #include "bitops.h"
 #include "config.h"
 #include <ccan/build_assert/build_assert.h>
@@ -5,7 +6,7 @@
 #include <ccan/ilog/ilog.h>
 #include <limits.h>
 
-unsigned int fls(unsigned long val)
+unsigned int afls(unsigned long val)
 {
        BUILD_ASSERT(sizeof(val) == sizeof(u32) || sizeof(val) == sizeof(u64));
        if (sizeof(val) == sizeof(u32))
@@ -15,7 +16,7 @@ unsigned int fls(unsigned long val)
 }
 
 /* FIXME: Move to bitops. */
-unsigned int ffsl(unsigned long val)
+unsigned int affsl(unsigned long val)
 {
 #if HAVE_BUILTIN_FFSL
        /* This is significantly faster! */
@@ -69,22 +70,22 @@ unsigned int popcount(unsigned long val)
                v = (v & 0x5555555555555555ULL)
                        + ((v >> 1) & 0x5555555555555555ULL);
                v = (v & 0x3333333333333333ULL)
-                       + ((v >> 1) & 0x3333333333333333ULL);
+                       + ((v >> 2) & 0x3333333333333333ULL);
                v = (v & 0x0F0F0F0F0F0F0F0FULL)
-                       + ((v >> 1) & 0x0F0F0F0F0F0F0F0FULL);
+                       + ((v >> 4) & 0x0F0F0F0F0F0F0F0FULL);
                v = (v & 0x00FF00FF00FF00FFULL)
-                       + ((v >> 1) & 0x00FF00FF00FF00FFULL);
+                       + ((v >> 8) & 0x00FF00FF00FF00FFULL);
                v = (v & 0x0000FFFF0000FFFFULL)
-                       + ((v >> 1) & 0x0000FFFF0000FFFFULL);
+                       + ((v >> 16) & 0x0000FFFF0000FFFFULL);
                v = (v & 0x00000000FFFFFFFFULL)
-                       + ((v >> 1) & 0x00000000FFFFFFFFULL);
+                       + ((v >> 32) & 0x00000000FFFFFFFFULL);
                return v;
        }
        val = (val & 0x55555555ULL) + ((val >> 1) & 0x55555555ULL);
-       val = (val & 0x33333333ULL) + ((val >> 1) & 0x33333333ULL);
-       val = (val & 0x0F0F0F0FULL) + ((val >> 1) & 0x0F0F0F0FULL);
-       val = (val & 0x00FF00FFULL) + ((val >> 1) & 0x00FF00FFULL);
-       val = (val & 0x0000FFFFULL) + ((val >> 1) & 0x0000FFFFULL);
+       val = (val & 0x33333333ULL) + ((val >> 2) & 0x33333333ULL);
+       val = (val & 0x0F0F0F0FULL) + ((val >> 4) & 0x0F0F0F0FULL);
+       val = (val & 0x00FF00FFULL) + ((val >> 8) & 0x00FF00FFULL);
+       val = (val & 0x0000FFFFULL) + ((val >> 16) & 0x0000FFFFULL);
        return val;
 #endif
 }