47 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _ASM_GENERIC_BITOPS_FFS_H_3#define _ASM_GENERIC_BITOPS_FFS_H_4 5/**6 * generic_ffs - find first bit set7 * @x: the word to search8 *9 * This is defined the same way as10 * the libc and compiler builtin ffs routines, therefore11 * differs in spirit from ffz (man ffs).12 */13static inline int generic_ffs(int x)14{15 int r = 1;16 17 if (!x)18 return 0;19 if (!(x & 0xffff)) {20 x >>= 16;21 r += 16;22 }23 if (!(x & 0xff)) {24 x >>= 8;25 r += 8;26 }27 if (!(x & 0xf)) {28 x >>= 4;29 r += 4;30 }31 if (!(x & 3)) {32 x >>= 2;33 r += 2;34 }35 if (!(x & 1)) {36 x >>= 1;37 r += 1;38 }39 return r;40}41 42#ifndef __HAVE_ARCH_FFS43#define ffs(x) generic_ffs(x)44#endif45 46#endif /* _ASM_GENERIC_BITOPS_FFS_H_ */47