Path: blob/master/tools/include/asm-generic/bitops/__ffs.h
26295 views
/* SPDX-License-Identifier: GPL-2.0 */1#ifndef _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_2#define _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_34#include <asm/types.h>5#include <asm/bitsperlong.h>67/**8* __ffs - find first bit in word.9* @word: The word to search10*11* Undefined if no bit exists, so code should check against 0 first.12*/13static __always_inline unsigned int __ffs(unsigned long word)14{15unsigned int num = 0;1617#if __BITS_PER_LONG == 6418if ((word & 0xffffffff) == 0) {19num += 32;20word >>= 32;21}22#endif23if ((word & 0xffff) == 0) {24num += 16;25word >>= 16;26}27if ((word & 0xff) == 0) {28num += 8;29word >>= 8;30}31if ((word & 0xf) == 0) {32num += 4;33word >>= 4;34}35if ((word & 0x3) == 0) {36num += 2;37word >>= 2;38}39if ((word & 0x1) == 0)40num += 1;41return num;42}4344#endif /* _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ */454647