]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
Undoes mod: xfs-cmds:slinx:120166a
authorSteve Lord <lord@sgi.com>
Thu, 30 May 2002 09:28:58 +0000 (09:28 +0000)
committerSteve Lord <lord@sgi.com>
Thu, 30 May 2002 09:28:58 +0000 (09:28 +0000)
include/xfs_bit.h
libxfs/xfs_bit.c
libxfs/xfs_rtbit.c

index bf573249281a39ebe065f973de7a6b3a07ffb880..80eccc5e52f89bfb55f484010ce39c47dbc62eb1 100644 (file)
@@ -64,6 +64,21 @@ __uint64_t xfs_mask64lo(int n);
 #define        XFS_MASK64LO(n)         (((__uint64_t)1 << (n)) - 1)
 #endif
 
+/*
+ * Index of low bit number in byte, -1 for none set, 0..7 otherwise.
+ */
+extern const char xfs_lowbit[256];
+
+/*
+ * Index of high bit number in byte, -1 for none set, 0..7 otherwise.
+ */
+extern const char xfs_highbit[256];
+
+/*
+ * Count of bits set in byte, 0..8.
+ */
+extern const char xfs_countbit[256];
+
 /*
  * xfs_lowbit32: get low bit set out of 32-bit argument, -1 if none set.
  */
@@ -84,13 +99,4 @@ extern int xfs_lowbit64(__uint64_t v);
  */
 extern int xfs_highbit64(__uint64_t);
 
-/* Count set bits in map starting with start_bit */ 
-int xfs_count_bits(uint *map, uint size, uint start_bit);
-
-/* Count continuous one bits in map starting with start_bit */
-int xfs_contig_bits(uint *map, uint size, uint start_bit);
-
-/* Find next set bit in map */
-int xfs_next_bit(uint *map, uint size, uint start_bit);
-
 #endif /* __XFS_BIT_H__ */
index d09ad27de8e50a0965211313f03223e0916c4b90..39dea3b693f5af70e1c6cafa3416f3db9fc153db 100644 (file)
 
 #include <xfs.h>
 
+/*
+ * Index of low bit number in byte, -1 for none set, 0..7 otherwise.
+ */
+const char xfs_lowbit[256] = {
+       -1, 0, 1, 0, 2, 0, 1, 0,                        /* 00 .. 07 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 08 .. 0f */
+       4, 0, 1, 0, 2, 0, 1, 0,                 /* 10 .. 17 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 18 .. 1f */
+       5, 0, 1, 0, 2, 0, 1, 0,                 /* 20 .. 27 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 28 .. 2f */
+       4, 0, 1, 0, 2, 0, 1, 0,                 /* 30 .. 37 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 38 .. 3f */
+       6, 0, 1, 0, 2, 0, 1, 0,                 /* 40 .. 47 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 48 .. 4f */
+       4, 0, 1, 0, 2, 0, 1, 0,                 /* 50 .. 57 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 58 .. 5f */
+       5, 0, 1, 0, 2, 0, 1, 0,                 /* 60 .. 67 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 68 .. 6f */
+       4, 0, 1, 0, 2, 0, 1, 0,                 /* 70 .. 77 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 78 .. 7f */
+       7, 0, 1, 0, 2, 0, 1, 0,                 /* 80 .. 87 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 88 .. 8f */
+       4, 0, 1, 0, 2, 0, 1, 0,                 /* 90 .. 97 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* 98 .. 9f */
+       5, 0, 1, 0, 2, 0, 1, 0,                 /* a0 .. a7 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* a8 .. af */
+       4, 0, 1, 0, 2, 0, 1, 0,                 /* b0 .. b7 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* b8 .. bf */
+       6, 0, 1, 0, 2, 0, 1, 0,                 /* c0 .. c7 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* c8 .. cf */
+       4, 0, 1, 0, 2, 0, 1, 0,                 /* d0 .. d7 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* d8 .. df */
+       5, 0, 1, 0, 2, 0, 1, 0,                 /* e0 .. e7 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* e8 .. ef */
+       4, 0, 1, 0, 2, 0, 1, 0,                 /* f0 .. f7 */
+       3, 0, 1, 0, 2, 0, 1, 0,                 /* f8 .. ff */
+};
 
-#ifndef HAVE_ARCH_HIGHBIT
 /*
  * Index of high bit number in byte, -1 for none set, 0..7 otherwise.
  */
@@ -75,7 +111,44 @@ const char xfs_highbit[256] = {
        7, 7, 7, 7, 7, 7, 7, 7,                 /* f0 .. f7 */
        7, 7, 7, 7, 7, 7, 7, 7,                 /* f8 .. ff */
 };
-#endif
+
+/*
+ * Count of bits set in byte, 0..8.
+ */
+const char xfs_countbit[256] = {
+       0, 1, 1, 2, 1, 2, 2, 3,                 /* 00 .. 07 */
+       1, 2, 2, 3, 2, 3, 3, 4,                 /* 08 .. 0f */
+       1, 2, 2, 3, 2, 3, 3, 4,                 /* 10 .. 17 */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* 18 .. 1f */
+       1, 2, 2, 3, 2, 3, 3, 4,                 /* 20 .. 27 */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* 28 .. 2f */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* 30 .. 37 */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* 38 .. 3f */
+       1, 2, 2, 3, 2, 3, 3, 4,                 /* 40 .. 47 */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* 48 .. 4f */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* 50 .. 57 */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* 58 .. 5f */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* 60 .. 67 */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* 68 .. 6f */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* 70 .. 77 */
+       4, 5, 5, 6, 5, 6, 6, 7,                 /* 78 .. 7f */
+       1, 2, 2, 3, 2, 3, 3, 4,                 /* 80 .. 87 */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* 88 .. 8f */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* 90 .. 97 */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* 98 .. 9f */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* a0 .. a7 */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* a8 .. af */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* b0 .. b7 */
+       4, 5, 5, 6, 5, 6, 6, 7,                 /* b8 .. bf */
+       2, 3, 3, 4, 3, 4, 4, 5,                 /* c0 .. c7 */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* c8 .. cf */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* d0 .. d7 */
+       4, 5, 5, 6, 5, 6, 6, 7,                 /* d8 .. df */
+       3, 4, 4, 5, 4, 5, 5, 6,                 /* e0 .. e7 */
+       4, 5, 5, 6, 5, 6, 6, 7,                 /* e8 .. ef */
+       4, 5, 5, 6, 5, 6, 6, 7,                 /* f0 .. f7 */
+       5, 6, 6, 7, 6, 7, 7, 8,                 /* f8 .. ff */
+};
 
 /*
  * xfs_highbit32: get high bit set out of 32-bit argument, -1 if none set.
@@ -84,9 +157,6 @@ int
 xfs_highbit32(
        __uint32_t      v)
 {
-#ifdef HAVE_ARCH_HIGHBIT
-       return highbit32(v);
-#else
        int             i;
 
        if (v & 0xffff0000)
@@ -102,7 +172,6 @@ xfs_highbit32(
        else
                return -1;
        return i + xfs_highbit[(v >> i) & 0xff];
-#endif
 }
 
 /*
@@ -112,14 +181,63 @@ int
 xfs_lowbit64(
        __uint64_t      v)
 {
-       int n;
-       n = ffs((unsigned)v);
-       if (n == 0) { 
-               n = ffs(v >> 32);
-               if (n >= 0) 
-                       n+=32;
-       }
-       return n-1;
+       int             i;
+#if XFS_64
+       if (v & 0x00000000ffffffff)
+               if (v & 0x000000000000ffff)
+                       if (v & 0x00000000000000ff)
+                               i = 0;
+                       else
+                               i = 8;
+               else
+                       if (v & 0x0000000000ff0000)
+                               i = 16;
+                       else
+                               i = 24;
+       else if (v & 0xffffffff00000000)
+               if (v & 0x0000ffff00000000)
+                       if (v & 0x000000ff00000000)
+                               i = 32;
+                       else
+                               i = 40;
+               else
+                       if (v & 0x00ff000000000000)
+                               i = 48;
+                       else
+                               i = 56;
+       else
+               return -1;
+       return i + xfs_lowbit[(v >> i) & 0xff];
+#else
+       __uint32_t      vw;
+
+       if ((vw = v)) {
+               if (vw & 0x0000ffff)
+                       if (vw & 0x000000ff)
+                               i = 0;
+                       else
+                               i = 8;
+               else
+                       if (vw & 0x00ff0000)
+                               i = 16;
+                       else
+                               i = 24;
+               return i + xfs_lowbit[(vw >> i) & 0xff];
+       } else if ((vw = v >> 32)) {
+               if (vw & 0x0000ffff)
+                       if (vw & 0x000000ff)
+                               i = 32;
+                       else
+                               i = 40;
+               else
+                       if (vw & 0x00ff0000)
+                               i = 48;
+                       else
+                               i = 56;
+               return i + xfs_lowbit[(vw >> (i - 32)) & 0xff];
+       } else
+               return -1;
+#endif
 }
 
 /*
@@ -129,8 +247,61 @@ int
 xfs_highbit64(
        __uint64_t      v)
 {
-       __uint32_t h = v >> 32; 
-       if (h) 
-               return xfs_highbit32(h) + 32;
-       return xfs_highbit32((__u32)v); 
+       int             i;
+#if  XFS_64
+       if (v & 0xffffffff00000000)
+               if (v & 0xffff000000000000)
+                       if (v & 0xff00000000000000)
+                               i = 56;
+                       else
+                               i = 48;
+               else
+                       if (v & 0x0000ff0000000000)
+                               i = 40;
+                       else
+                               i = 32;
+       else if (v & 0x00000000ffffffff)
+               if (v & 0x00000000ffff0000)
+                       if (v & 0x00000000ff000000)
+                               i = 24;
+                       else
+                               i = 16;
+               else
+                       if (v & 0x000000000000ff00)
+                               i = 8;
+                       else
+                               i = 0;
+       else
+               return -1;
+       return i + xfs_highbit[(v >> i) & 0xff];
+#else
+       __uint32_t      vw;
+
+       if ((vw = v >> 32)) {
+               if (vw & 0xffff0000)
+                       if (vw & 0xff000000)
+                               i = 56;
+                       else
+                               i = 48;
+               else
+                       if (vw & 0x0000ff00)
+                               i = 40;
+                       else
+                               i = 32;
+               return i + xfs_highbit[(vw >> (i - 32)) & 0xff];
+       } else if ((vw = v)) {
+               if (vw & 0xffff0000)
+                       if (vw & 0xff000000)
+                               i = 24;
+                       else
+                               i = 16;
+               else
+                       if (vw & 0x0000ff00)
+                               i = 8;
+                       else
+                               i = 0;
+               return i + xfs_highbit[(vw >> i) & 0xff];
+       } else
+               return -1;
+#endif
 }
index 1b6c7793140cb36c2504df36be53db51f216f1a4..c51cba34c9f77ccc33c4775aefece587f68a6edc 100644 (file)
@@ -43,5 +43,19 @@ int
 xfs_lowbit32(
        __uint32_t      v)
 {
-       return ffs(v)-1; 
+       int             i;
+
+       if (v & 0x0000ffff)
+               if (v & 0x000000ff)
+                       i = 0;
+               else
+                       i = 8;
+       else if (v & 0xffff0000)
+               if (v & 0x00ff0000)
+                       i = 16;
+               else
+                       i = 24;
+       else
+               return -1;
+       return i + xfs_lowbit[(v >> i) & 0xff];
 }