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