From d36e814b8aad0dc15386180245efb3f5cb8b8386 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 27 Apr 2014 16:11:44 +0100 Subject: [libc] Add flsll() Signed-off-by: Michael Brown --- src/include/strings.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/include') 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 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 ) ) -- cgit v1.2.3-55-g7522