47 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _ASM_GENERIC_BITOPS_FLS_H_3#define _ASM_GENERIC_BITOPS_FLS_H_4 5/**6 * generic_fls - find last (most-significant) bit set7 * @x: the word to search8 *9 * This is defined the same way as ffs.10 * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.11 */12 13static __always_inline int generic_fls(unsigned int x)14{15 int r = 32;16 17 if (!x)18 return 0;19 if (!(x & 0xffff0000u)) {20 x <<= 16;21 r -= 16;22 }23 if (!(x & 0xff000000u)) {24 x <<= 8;25 r -= 8;26 }27 if (!(x & 0xf0000000u)) {28 x <<= 4;29 r -= 4;30 }31 if (!(x & 0xc0000000u)) {32 x <<= 2;33 r -= 2;34 }35 if (!(x & 0x80000000u)) {36 x <<= 1;37 r -= 1;38 }39 return r;40}41 42#ifndef __HAVE_ARCH_FLS43#define fls(x) generic_fls(x)44#endif45 46#endif /* _ASM_GENERIC_BITOPS_FLS_H_ */47