Jens Axboe | 51aa2da | 2013-01-21 10:55:02 -0700 | [diff] [blame^] | 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 | } |