xref: /plan9/sys/src/ape/lib/bsd/ffs.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier /* Find the first set bit
2*219b2ee8SDavid du Colombier  * i.e. least signifigant 1 bit:
3*219b2ee8SDavid du Colombier  * 0 => 0
4*219b2ee8SDavid du Colombier  * 1 => 1
5*219b2ee8SDavid du Colombier  * 2 => 2
6*219b2ee8SDavid du Colombier  * 3 => 1
7*219b2ee8SDavid du Colombier  * 4 => 3
8*219b2ee8SDavid du Colombier  */
9*219b2ee8SDavid du Colombier 
10*219b2ee8SDavid du Colombier int
ffs(unsigned int mask)11*219b2ee8SDavid du Colombier ffs(unsigned int mask)
12*219b2ee8SDavid du Colombier {
13*219b2ee8SDavid du Colombier 	int i;
14*219b2ee8SDavid du Colombier 
15*219b2ee8SDavid du Colombier 	if (!mask)
16*219b2ee8SDavid du Colombier 		return 0;
17*219b2ee8SDavid du Colombier 	i = 1;
18*219b2ee8SDavid du Colombier 	while (!(mask & 1)){
19*219b2ee8SDavid du Colombier 		i++;
20*219b2ee8SDavid du Colombier 		mask = mask >> 1;
21*219b2ee8SDavid du Colombier 	}
22*219b2ee8SDavid du Colombier 	return i;
23*219b2ee8SDavid du Colombier }
24