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