Commit 09020adb61416c4307de35941a9725a5e33d9beb

Authored by Akinobu Mita
Committed by Linus Torvalds
1 parent 6d29ea23da

[PATCH] bitops: generic ffs()

This patch introduces the C-language equivalent of the function: int ffs(int
x);

In include/asm-generic/bitops/ffs.h

This code largely copied from: include/linux/bitops.h

Signed-off-by: Akinobu Mita <mita@miraclelinux.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 1 changed file with 41 additions and 0 deletions Side-by-side Diff

include/asm-generic/bitops/ffs.h
  1 +#ifndef _ASM_GENERIC_BITOPS_FFS_H_
  2 +#define _ASM_GENERIC_BITOPS_FFS_H_
  3 +
  4 +/**
  5 + * ffs - find first bit set
  6 + * @x: the word to search
  7 + *
  8 + * This is defined the same way as
  9 + * the libc and compiler builtin ffs routines, therefore
  10 + * differs in spirit from the above ffz (man ffs).
  11 + */
  12 +static inline int ffs(int x)
  13 +{
  14 + int r = 1;
  15 +
  16 + if (!x)
  17 + return 0;
  18 + if (!(x & 0xffff)) {
  19 + x >>= 16;
  20 + r += 16;
  21 + }
  22 + if (!(x & 0xff)) {
  23 + x >>= 8;
  24 + r += 8;
  25 + }
  26 + if (!(x & 0xf)) {
  27 + x >>= 4;
  28 + r += 4;
  29 + }
  30 + if (!(x & 3)) {
  31 + x >>= 2;
  32 + r += 2;
  33 + }
  34 + if (!(x & 1)) {
  35 + x >>= 1;
  36 + r += 1;
  37 + }
  38 + return r;
  39 +}
  40 +
  41 +#endif /* _ASM_GENERIC_BITOPS_FFS_H_ */