Rev 1702 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1702 | Rev 1780 | ||
|---|---|---|---|
| Line 40... | Line 40... | ||
| 40 | 40 | ||
| 41 | /** Return position of first non-zero bit from left (i.e. [log_2(arg)]). |
41 | /** Return position of first non-zero bit from left (i.e. [log_2(arg)]). |
| 42 | * |
42 | * |
| 43 | * If number is zero, it returns 0 |
43 | * If number is zero, it returns 0 |
| 44 | */ |
44 | */ |
| 45 | static inline int fnzb32(__u32 arg) |
45 | static inline int fnzb32(uint32_t arg) |
| 46 | { |
46 | { |
| 47 | int n = 0; |
47 | int n = 0; |
| 48 | 48 | ||
| 49 | if (arg >> 16) { arg >>= 16;n += 16;} |
49 | if (arg >> 16) { arg >>= 16;n += 16;} |
| 50 | if (arg >> 8) { arg >>= 8; n += 8;} |
50 | if (arg >> 8) { arg >>= 8; n += 8;} |
| Line 52... | Line 52... | ||
| 52 | if (arg >> 2) { arg >>= 2; n+=2;} |
52 | if (arg >> 2) { arg >>= 2; n+=2;} |
| 53 | if (arg >> 1) { arg >>= 1; n+=1;} |
53 | if (arg >> 1) { arg >>= 1; n+=1;} |
| 54 | return n; |
54 | return n; |
| 55 | } |
55 | } |
| 56 | 56 | ||
| 57 | static inline int fnzb64(__u64 arg) |
57 | static inline int fnzb64(uint64_t arg) |
| 58 | { |
58 | { |
| 59 | int n = 0; |
59 | int n = 0; |
| 60 | 60 | ||
| 61 | if (arg >> 32) { arg >>= 32;n += 32;} |
61 | if (arg >> 32) { arg >>= 32;n += 32;} |
| 62 | return n + fnzb32((__u32) arg); |
62 | return n + fnzb32((uint32_t) arg); |
| 63 | } |
63 | } |
| 64 | 64 | ||
| 65 | #define fnzb(x) fnzb32(x) |
65 | #define fnzb(x) fnzb32(x) |
| 66 | 66 | ||
| 67 | #endif |
67 | #endif |