File: /Users/paulross/dev/linux/linux-3.13/include/asm-generic/bitops/const_hweight.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       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: