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 |