Add fls() for non-constant values.
authorMichael Brown <mcb30@etherboot.org>
Sun, 16 Sep 2007 16:36:40 +0000 (17:36 +0100)
committerMichael Brown <mcb30@etherboot.org>
Fri, 21 Sep 2007 00:14:38 +0000 (01:14 +0100)
src/core/bitops.c [new file with mode: 0644]
src/include/strings.h

diff --git a/src/core/bitops.c b/src/core/bitops.c
new file mode 100644 (file)
index 0000000..75d57bf
--- /dev/null
@@ -0,0 +1,10 @@
+#include <strings.h>
+
+int __flsl ( long x ) {
+       int r = 0;
+
+       for ( r = 0 ; x ; r++ ) {
+               x >>= 1;
+       }
+       return r;
+}
index a087b1d..968a7c1 100644 (file)
@@ -40,17 +40,13 @@ __constant_flsl ( unsigned long x ) {
        return r;
 }
 
-#define __constant_fls(x) __constant_flsl(x)
-
 /* We don't actually have these functions yet */
-extern int __fls ( int x );
 extern int __flsl ( long x );
 
 #define flsl( x ) \
        ( __builtin_constant_p ( x ) ? __constant_flsl ( x ) : __flsl ( x ) )
 
-#define fls( x ) \
-       ( __builtin_constant_p ( x ) ? __constant_fls ( x ) : __fls ( x ) )
+#define fls( x ) flsl ( x )
 
 extern int strcasecmp ( const char *s1, const char *s2 );