Commit | Line | Data |
---|---|---|
51aa2da8 JA |
1 | #include "hweight.h" |
2 | ||
3 | unsigned int hweight8(uint8_t w) | |
4 | { | |
5 | unsigned int res = w - ((w >> 1) & 0x55); | |
6 | ||
7 | res = (res & 0x33) + ((res >> 2) & 0x33); | |
8 | return (res + (res >> 4)) & 0x0F; | |
9 | } | |
10 | ||
11 | unsigned int hweight32(uint32_t w) | |
12 | { | |
13 | unsigned int res = w - ((w >> 1) & 0x55555555); | |
14 | ||
15 | res = (res & 0x33333333) + ((res >> 2) & 0x33333333); | |
16 | res = (res + (res >> 4)) & 0x0F0F0F0F; | |
17 | res = res + (res >> 8); | |
18 | return (res + (res >> 16)) & 0x000000FF; | |
19 | } |