linux/include/asm-generic/bitops/ffs.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_GENERIC_BITOPS_FFS_H_
   3#define _ASM_GENERIC_BITOPS_FFS_H_
   4
   5/**
   6 * ffs - find first bit set
   7 * @x: the word to search
   8 *
   9 * This is defined the same way as
  10 * the libc and compiler builtin ffs routines, therefore
  11 * differs in spirit from the above ffz (man ffs).
  12 */
  13static inline int 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#endif /* _ASM_GENERIC_BITOPS_FFS_H_ */
  43