xref: /netbsd-src/external/gpl3/binutils.old/dist/libiberty/ffs.c (revision 16dce51364ebe8aeafbae46bc5aa167b8115bc45)
1*16dce513Schristos /* ffs -- Find the first bit set in the parameter
2*16dce513Schristos 
3*16dce513Schristos @deftypefn Supplemental int ffs (int @var{valu})
4*16dce513Schristos 
5*16dce513Schristos Find the first (least significant) bit set in @var{valu}.  Bits are
6*16dce513Schristos numbered from right to left, starting with bit 1 (corresponding to the
7*16dce513Schristos value 1).  If @var{valu} is zero, zero is returned.
8*16dce513Schristos 
9*16dce513Schristos @end deftypefn
10*16dce513Schristos 
11*16dce513Schristos */
12*16dce513Schristos 
13*16dce513Schristos int
ffs(register int valu)14*16dce513Schristos ffs (register int valu)
15*16dce513Schristos {
16*16dce513Schristos   register int bit;
17*16dce513Schristos 
18*16dce513Schristos   if (valu == 0)
19*16dce513Schristos     return 0;
20*16dce513Schristos 
21*16dce513Schristos   for (bit = 1; !(valu & 1); bit++)
22*16dce513Schristos   	valu >>= 1;
23*16dce513Schristos 
24*16dce513Schristos   return bit;
25*16dce513Schristos }
26*16dce513Schristos 
27