From 218491bbe6f726114836a6a59150ba3e9f099c96 Mon Sep 17 00:00:00 2001 From: Akinobu Mita Date: Sun, 26 Mar 2006 01:39:08 -0800 Subject: [PATCH] --- yaml --- r: 24159 b: refs/heads/master c: c1226a005ec400e966f4993dfcc0e99fd7baa6a1 h: refs/heads/master i: 24157: 152db45a8235581ad2bdbd59b087b49b110a7885 24155: fac82d0081065cafeb0d0e1bc46df1d1cadc0992 24151: 693276e4fc4869b8ad5b89d9e8ca7578b7e67fbb 24143: aac466fe249b567e6034ddf6be3bdbac1cd680e5 24127: 3995140b6caa01110d4273cd57c1ea212c067bd6 v: v3 --- [refs] | 2 +- trunk/include/asm-generic/bitops/__ffs.h | 43 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 trunk/include/asm-generic/bitops/__ffs.h diff --git a/[refs] b/[refs] index dd8e34c2b8ec..45cc2aee6e73 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4117b02132d1cf96a3e1c57148e302c4801c974d +refs/heads/master: c1226a005ec400e966f4993dfcc0e99fd7baa6a1 diff --git a/trunk/include/asm-generic/bitops/__ffs.h b/trunk/include/asm-generic/bitops/__ffs.h new file mode 100644 index 000000000000..9a3274aecf83 --- /dev/null +++ b/trunk/include/asm-generic/bitops/__ffs.h @@ -0,0 +1,43 @@ +#ifndef _ASM_GENERIC_BITOPS___FFS_H_ +#define _ASM_GENERIC_BITOPS___FFS_H_ + +#include + +/** + * __ffs - find first bit in word. + * @word: The word to search + * + * Undefined if no bit exists, so code should check against 0 first. + */ +static 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 /* _ASM_GENERIC_BITOPS___FFS_H_ */