brintos

brintos / linux-shallow public Read only

0
0
Text · 761 B · 26f3ce1 Raw
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