summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brown2007-09-16 18:36:40 +0200
committerMichael Brown2007-09-21 02:14:38 +0200
commitdb124b12551f91a2437014fb74a122ff0d0db08b (patch)
tree352f99fc9e49162862b46a7a598eb4550209593f /src
parentMoved iobuf.h assertions outside the static inline functions, so that (diff)
downloadipxe-db124b12551f91a2437014fb74a122ff0d0db08b.tar.gz
ipxe-db124b12551f91a2437014fb74a122ff0d0db08b.tar.xz
ipxe-db124b12551f91a2437014fb74a122ff0d0db08b.zip
Add fls() for non-constant values.
Diffstat (limited to 'src')
-rw-r--r--src/core/bitops.c10
-rw-r--r--src/include/strings.h6
2 files changed, 11 insertions, 5 deletions
diff --git a/src/core/bitops.c b/src/core/bitops.c
new file mode 100644
index 000000000..75d57bf99
--- /dev/null
+++ b/src/core/bitops.c
@@ -0,0 +1,10 @@
+#include <strings.h>
+
+int __flsl ( long x ) {
+ int r = 0;
+
+ for ( r = 0 ; x ; r++ ) {
+ x >>= 1;
+ }
+ return r;
+}
diff --git a/src/include/strings.h b/src/include/strings.h
index a087b1d50..968a7c11d 100644
--- a/src/include/strings.h
+++ b/src/include/strings.h
@@ -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 );