diff options
| author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-12-15 13:07:24 -0500 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-12-17 09:09:34 -0500 |
| commit | 2dc0b9721956f4314364f68a99d8bef490870438 (patch) | |
| tree | 9454874134eb4f25a08874d0371493f0b314997f /tools/perf/util/include/linux | |
| parent | 8185e881f9fd9a2fa01f9d45616f8587f485f2a6 (diff) | |
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 <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-gubysnp4a8hd98lxoeruak13@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/include/linux')
| -rw-r--r-- | tools/perf/util/include/linux/bitops.h | 37 |
1 files changed, 1 insertions, 36 deletions
diff --git a/tools/perf/util/include/linux/bitops.h b/tools/perf/util/include/linux/bitops.h index c3294163de17..762bb83333c0 100644 --- a/tools/perf/util/include/linux/bitops.h +++ b/tools/perf/util/include/linux/bitops.h | |||
| @@ -52,42 +52,7 @@ static inline unsigned long hweight_long(unsigned long w) | |||
| 52 | 52 | ||
| 53 | #define BITOP_WORD(nr) ((nr) / BITS_PER_LONG) | 53 | #define BITOP_WORD(nr) ((nr) / BITS_PER_LONG) |
| 54 | 54 | ||
| 55 | /** | 55 | #include <asm-generic/bitops/__ffs.h> |
| 56 | * __ffs - find first bit in word. | ||
| 57 | * @word: The word to search | ||
| 58 | * | ||
| 59 | * Undefined if no bit exists, so code should check against 0 first. | ||
| 60 | */ | ||
| 61 | static __always_inline unsigned long __ffs(unsigned long word) | ||
| 62 | { | ||
| 63 | int num = 0; | ||
| 64 | |||
| 65 | #if BITS_PER_LONG == 64 | ||
| 66 | if ((word & 0xffffffff) == 0) { | ||
| 67 | num += 32; | ||
| 68 | word >>= 32; | ||
| 69 | } | ||
| 70 | #endif | ||
| 71 | if ((word & 0xffff) == 0) { | ||
| 72 | num += 16; | ||
| 73 | word >>= 16; | ||
| 74 | } | ||
| 75 | if ((word & 0xff) == 0) { | ||
| 76 | num += 8; | ||
| 77 | word >>= 8; | ||
| 78 | } | ||
| 79 | if ((word & 0xf) == 0) { | ||
| 80 | num += 4; | ||
| 81 | word >>= 4; | ||
| 82 | } | ||
| 83 | if ((word & 0x3) == 0) { | ||
| 84 | num += 2; | ||
| 85 | word >>= 2; | ||
| 86 | } | ||
| 87 | if ((word & 0x1) == 0) | ||
| 88 | num += 1; | ||
| 89 | return num; | ||
| 90 | } | ||
| 91 | 56 | ||
| 92 | typedef const unsigned long __attribute__((__may_alias__)) long_alias_t; | 57 | typedef const unsigned long __attribute__((__may_alias__)) long_alias_t; |
| 93 | 58 | ||
