Commit 9f264be6 authored by Paul Mackerras's avatar Paul Mackerras

[POWERPC] Optimize fls64() on 64-bit processors

64-bit powerpc processors can find the leftmost 1 bit in a 64-bit
doubleword in one instruction, so use that rather than using the
generic fls64(), which does two 32-bit fls() calls.
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 945feb17
...@@ -312,7 +312,24 @@ static __inline__ int fls(unsigned int x) ...@@ -312,7 +312,24 @@ static __inline__ int fls(unsigned int x)
asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x)); asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x));
return 32 - lz; return 32 - lz;
} }
/*
* 64-bit can do this using one cntlzd (count leading zeroes doubleword)
* instruction; for 32-bit we use the generic version, which does two
* 32-bit fls calls.
*/
#ifdef __powerpc64__
static __inline__ int fls64(__u64 x)
{
int lz;
asm ("cntlzd %0,%1" : "=r" (lz) : "r" (x));
return 64 - lz;
}
#else
#include <asm-generic/bitops/fls64.h> #include <asm-generic/bitops/fls64.h>
#endif /* __powerpc64__ */
#include <asm-generic/bitops/hweight.h> #include <asm-generic/bitops/hweight.h>
#include <asm-generic/bitops/find.h> #include <asm-generic/bitops/find.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment