1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /* $OpenBSD: ffs.c,v 1.9 2014/06/10 04:16:57 deraadt Exp $ */
- /*
- * Public domain.
- * Written by Dale Rahn.
- */
- #include <lib/libkern/libkern.h>
- /*
- * ffs -- vax ffs instruction
- */
- int
- ffs(int mask)
- {
- int bit;
- unsigned int r = mask;
- static const signed char t[16] = {
- -28, 1, 2, 1,
- 3, 1, 2, 1,
- 4, 1, 2, 1,
- 3, 1, 2, 1
- };
- bit = 0;
- if (!(r & 0xffff)) {
- bit += 16;
- r >>= 16;
- }
- if (!(r & 0xff)) {
- bit += 8;
- r >>= 8;
- }
- if (!(r & 0xf)) {
- bit += 4;
- r >>= 4;
- }
- return (bit + t[ r & 0xf ]);
- }
|