Rev 771 | Rev 1310 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 771 | Rev 772 | ||
|---|---|---|---|
| Line 38... | Line 38... | ||
| 38 | */ |
38 | */ |
| 39 | static inline int fnzb32(__u32 arg) |
39 | static inline int fnzb32(__u32 arg) |
| 40 | { |
40 | { |
| 41 | int n = 0; |
41 | int n = 0; |
| 42 | 42 | ||
| 43 | if (arg & 0xffff0000) { arg >>= 16;n += 16;} |
43 | if (arg >> 16) { arg >>= 16;n += 16;} |
| 44 | if (arg & 0xff00) { arg >>= 8; n += 8;} |
44 | if (arg >> 8) { arg >>= 8; n += 8;} |
| 45 | if (arg & 0xf0) { arg >>= 4; n += 4;} |
45 | if (arg >> 4) { arg >>= 4; n += 4;} |
| 46 | if (arg & 0xc) { arg >>= 2; n+=2;} |
46 | if (arg >> 2) { arg >>= 2; n+=2;} |
| 47 | if (arg & 0x2) { arg >>= 1; n+=1;} |
47 | if (arg >> 1) { arg >>= 1; n+=1;} |
| 48 | return n; |
48 | return n; |
| 49 | } |
49 | } |
| 50 | 50 | ||
| 51 | static inline int fnzb64(__u64 arg) |
51 | static inline int fnzb64(__u64 arg) |
| 52 | { |
52 | { |
| 53 | int n = 0; |
53 | int n = 0; |
| 54 | 54 | ||
| 55 | /* This is because mips complains about big numbers, |
- | |
| 56 | * other platforms should optimize it out */ |
- | |
| 57 | __u64 oper = 0xffffffff; |
- | |
| 58 | oper <<= 32; |
- | |
| 59 | - | ||
| 60 | if (arg & oper) { arg >>= 32;n += 32;} |
55 | if (arg >> 32) { arg >>= 32;n += 32;} |
| 61 | return n + fnzb32((__u32) arg); |
56 | return n + fnzb32((__u32) arg); |
| 62 | } |
57 | } |
| 63 | 58 | ||
| 64 | #define fnzb(x) fnzb32(x) |
59 | #define fnzb(x) fnzb32(x) |
| 65 | 60 | ||