forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tools: Move __ffs implementation to tools/include/asm-generic/bitops/…
…__ffs.h To match the Linux kernel source code structure from where this code came from. Cc: Adrian Hunter <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: David Ahern <[email protected]> Cc: Don Zickus <[email protected]> Cc: Frederic Weisbecker <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Mike Galbraith <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Stephane Eranian <[email protected]> Link: http://lkml.kernel.org/n/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
- Loading branch information
Showing
4 changed files
with
46 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#ifndef _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ | ||
#define _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ | ||
|
||
#include <asm/types.h> | ||
|
||
/** | ||
* __ffs - find first bit in word. | ||
* @word: The word to search | ||
* | ||
* Undefined if no bit exists, so code should check against 0 first. | ||
*/ | ||
static __always_inline unsigned long __ffs(unsigned long word) | ||
{ | ||
int num = 0; | ||
|
||
#if __BITS_PER_LONG == 64 | ||
if ((word & 0xffffffff) == 0) { | ||
num += 32; | ||
word >>= 32; | ||
} | ||
#endif | ||
if ((word & 0xffff) == 0) { | ||
num += 16; | ||
word >>= 16; | ||
} | ||
if ((word & 0xff) == 0) { | ||
num += 8; | ||
word >>= 8; | ||
} | ||
if ((word & 0xf) == 0) { | ||
num += 4; | ||
word >>= 4; | ||
} | ||
if ((word & 0x3) == 0) { | ||
num += 2; | ||
word >>= 2; | ||
} | ||
if ((word & 0x1) == 0) | ||
num += 1; | ||
return num; | ||
} | ||
|
||
#endif /* _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters