diff options
author | Michael Brown <mcb30@ipxe.org> | 2014-04-27 16:11:44 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2014-04-27 16:56:09 +0100 |
commit | d36e814b8aad0dc15386180245efb3f5cb8b8386 (patch) | |
tree | 9c3c633f01a1703a8c85524a4393f8f45539f459 /src/include/strings.h | |
parent | 3ffd309375c8f044939a77eb4738bc0b16c01965 (diff) | |
download | ipxe-d36e814b8aad0dc15386180245efb3f5cb8b8386.tar.gz |
[libc] Add flsll()
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/strings.h')
-rw-r--r-- | src/include/strings.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/include/strings.h b/src/include/strings.h index 924a084fc..6912a1e45 100644 --- a/src/include/strings.h +++ b/src/include/strings.h @@ -8,15 +8,13 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <bits/strings.h> static inline __attribute__ (( always_inline )) int -__constant_flsl ( unsigned long x ) { +__constant_flsll ( unsigned long long x ) { int r = 0; -#if ULONG_MAX > 0xffffffff - if ( x & 0xffffffff00000000UL ) { + if ( x & 0xffffffff00000000ULL ) { x >>= 32; r += 32; } -#endif if ( x & 0xffff0000UL ) { x >>= 16; r += 16; @@ -43,8 +41,17 @@ __constant_flsl ( unsigned long x ) { return r; } +static inline __attribute__ (( always_inline )) int +__constant_flsl ( unsigned long x ) { + return __constant_flsll ( x ); +} + +int __flsll ( long long x ); int __flsl ( long x ); +#define flsll( x ) \ + ( __builtin_constant_p ( x ) ? __constant_flsll ( x ) : __flsll ( x ) ) + #define flsl( x ) \ ( __builtin_constant_p ( x ) ? __constant_flsl ( x ) : __flsl ( x ) ) |