1/*	$OpenBSD: ffs.c,v 1.9 2014/06/10 04:16:57 deraadt Exp $	*/
2
3/*
4 * Public domain.
5 * Written by Dale Rahn.
6 */
7
8#include <lib/libkern/libkern.h>
9
10/*
11 * ffs -- vax ffs instruction
12 */
13int
14ffs(int mask)
15{
16	int bit;
17	unsigned int r = mask;
18	static const signed char t[16] = {
19		-28, 1, 2, 1,
20		  3, 1, 2, 1,
21		  4, 1, 2, 1,
22		  3, 1, 2, 1
23	};
24
25	bit = 0;
26	if (!(r & 0xffff)) {
27		bit += 16;
28		r >>= 16;
29	}
30	if (!(r & 0xff)) {
31		bit += 8;
32		r >>= 8;
33	}
34	if (!(r & 0xf)) {
35		bit += 4;
36		r >>= 4;
37	}
38
39	return (bit + t[ r & 0xf ]);
40}
41