Root/
1 | #ifndef _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ |
2 | #define _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ |
3 | |
4 | /* |
5 | * Compile time versions of __arch_hweightN() |
6 | */ |
7 | #define __const_hweight8(w) \ |
8 | ( (!!((w) & (1ULL << 0))) + \ |
9 | (!!((w) & (1ULL << 1))) + \ |
10 | (!!((w) & (1ULL << 2))) + \ |
11 | (!!((w) & (1ULL << 3))) + \ |
12 | (!!((w) & (1ULL << 4))) + \ |
13 | (!!((w) & (1ULL << 5))) + \ |
14 | (!!((w) & (1ULL << 6))) + \ |
15 | (!!((w) & (1ULL << 7))) ) |
16 | |
17 | #define __const_hweight16(w) (__const_hweight8(w) + __const_hweight8((w) >> 8 )) |
18 | #define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16)) |
19 | #define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32)) |
20 | |
21 | /* |
22 | * Generic interface. |
23 | */ |
24 | #define hweight8(w) (__builtin_constant_p(w) ? __const_hweight8(w) : __arch_hweight8(w)) |
25 | #define hweight16(w) (__builtin_constant_p(w) ? __const_hweight16(w) : __arch_hweight16(w)) |
26 | #define hweight32(w) (__builtin_constant_p(w) ? __const_hweight32(w) : __arch_hweight32(w)) |
27 | #define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w)) |
28 | |
29 | /* |
30 | * Interface for known constant arguments |
31 | */ |
32 | #define HWEIGHT8(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight8(w)) |
33 | #define HWEIGHT16(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight16(w)) |
34 | #define HWEIGHT32(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight32(w)) |
35 | #define HWEIGHT64(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight64(w)) |
36 | |
37 | /* |
38 | * Type invariant interface to the compile time constant hweight functions. |
39 | */ |
40 | #define HWEIGHT(w) HWEIGHT64((u64)w) |
41 | |
42 | #endif /* _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ */ |
43 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9