Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] bitops: generic ffs()

This patch introduces the C-language equivalent of the function: int ffs(int
x);

In include/asm-generic/bitops/ffs.h

This code largely copied from: include/linux/bitops.h

Signed-off-by: Akinobu Mita <mita@miraclelinux.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Akinobu Mita and committed by
Linus Torvalds
09020adb 6d29ea23

+41
+41
include/asm-generic/bitops/ffs.h
··· 1 + #ifndef _ASM_GENERIC_BITOPS_FFS_H_ 2 + #define _ASM_GENERIC_BITOPS_FFS_H_ 3 + 4 + /** 5 + * ffs - find first bit set 6 + * @x: the word to search 7 + * 8 + * This is defined the same way as 9 + * the libc and compiler builtin ffs routines, therefore 10 + * differs in spirit from the above ffz (man ffs). 11 + */ 12 + static inline int ffs(int x) 13 + { 14 + int r = 1; 15 + 16 + if (!x) 17 + return 0; 18 + if (!(x & 0xffff)) { 19 + x >>= 16; 20 + r += 16; 21 + } 22 + if (!(x & 0xff)) { 23 + x >>= 8; 24 + r += 8; 25 + } 26 + if (!(x & 0xf)) { 27 + x >>= 4; 28 + r += 4; 29 + } 30 + if (!(x & 3)) { 31 + x >>= 2; 32 + r += 2; 33 + } 34 + if (!(x & 1)) { 35 + x >>= 1; 36 + r += 1; 37 + } 38 + return r; 39 + } 40 + 41 + #endif /* _ASM_GENERIC_BITOPS_FFS_H_ */