| Rev | Line | |
|---|
| [1] | 1 | #include <strings.h> |
|---|
| 2 | |
|---|
| 3 | int ffs(int i) { |
|---|
| 4 | int plus=0; |
|---|
| 5 | /* return index of rightmost bit set */ |
|---|
| 6 | /* ffs(1) == 1, ffs(2) == 2, ffs(256) == 9, ffs(257)=1 */ |
|---|
| 7 | #if 0 |
|---|
| 8 | if (sizeof(i)==8) /* fold 64-bit archs */ |
|---|
| 9 | if ((i&0xffffffff)==0) { |
|---|
| 10 | plus=32; |
|---|
| 11 | i>>=32; |
|---|
| 12 | } |
|---|
| 13 | #endif |
|---|
| 14 | if ((i&0xffff)==0) { |
|---|
| 15 | plus+=16; |
|---|
| 16 | i>>=16; |
|---|
| 17 | } |
|---|
| 18 | if ((i&0xff)==0) { |
|---|
| 19 | plus+=8; |
|---|
| 20 | i>>=8; |
|---|
| 21 | } |
|---|
| 22 | if ((i&0xf)==0) { |
|---|
| 23 | plus+=4; |
|---|
| 24 | i>>=4; |
|---|
| 25 | } |
|---|
| 26 | if (i&1) return plus+1; |
|---|
| 27 | if (i&2) return plus+2; |
|---|
| 28 | if (i&4) return plus+3; |
|---|
| 29 | if (i&8) return plus+4; |
|---|
| 30 | return 0; |
|---|
| 31 | } |
|---|
Note: See
TracBrowser
for help on using the repository browser.