|  | /* | 
|  | * This file is subject to the terms and conditions of the GNU General Public | 
|  | * License.  See the file "COPYING" in the main directory of this archive | 
|  | * for more details. | 
|  | * | 
|  | */ | 
|  | #ifndef _ASM_ARCH_HWEIGHT_H | 
|  | #define _ASM_ARCH_HWEIGHT_H | 
|  |  | 
|  | #ifdef ARCH_HAS_USABLE_BUILTIN_POPCOUNT | 
|  |  | 
|  | #include <asm/types.h> | 
|  |  | 
|  | static inline unsigned int __arch_hweight32(unsigned int w) | 
|  | { | 
|  | return __builtin_popcount(w); | 
|  | } | 
|  |  | 
|  | static inline unsigned int __arch_hweight16(unsigned int w) | 
|  | { | 
|  | return __builtin_popcount(w & 0xffff); | 
|  | } | 
|  |  | 
|  | static inline unsigned int __arch_hweight8(unsigned int w) | 
|  | { | 
|  | return __builtin_popcount(w & 0xff); | 
|  | } | 
|  |  | 
|  | static inline unsigned long __arch_hweight64(__u64 w) | 
|  | { | 
|  | return __builtin_popcountll(w); | 
|  | } | 
|  |  | 
|  | #else | 
|  | #include <asm-generic/bitops/arch_hweight.h> | 
|  | #endif | 
|  |  | 
|  | #endif /* _ASM_ARCH_HWEIGHT_H */ |