11a403d1dSDavid Daney /* 21a403d1dSDavid Daney * This file is subject to the terms and conditions of the GNU General Public 31a403d1dSDavid Daney * License. See the file "COPYING" in the main directory of this archive 41a403d1dSDavid Daney * for more details. 51a403d1dSDavid Daney * 61a403d1dSDavid Daney */ 71a403d1dSDavid Daney #ifndef _ASM_ARCH_HWEIGHT_H 81a403d1dSDavid Daney #define _ASM_ARCH_HWEIGHT_H 91a403d1dSDavid Daney 101a403d1dSDavid Daney #ifdef ARCH_HAS_USABLE_BUILTIN_POPCOUNT 111a403d1dSDavid Daney 121a403d1dSDavid Daney #include <asm/types.h> 131a403d1dSDavid Daney __arch_hweight32(unsigned int w)141a403d1dSDavid Daneystatic inline unsigned int __arch_hweight32(unsigned int w) 151a403d1dSDavid Daney { 161a403d1dSDavid Daney return __builtin_popcount(w); 171a403d1dSDavid Daney } 181a403d1dSDavid Daney __arch_hweight16(unsigned int w)191a403d1dSDavid Daneystatic inline unsigned int __arch_hweight16(unsigned int w) 201a403d1dSDavid Daney { 211a403d1dSDavid Daney return __builtin_popcount(w & 0xffff); 221a403d1dSDavid Daney } 231a403d1dSDavid Daney __arch_hweight8(unsigned int w)241a403d1dSDavid Daneystatic inline unsigned int __arch_hweight8(unsigned int w) 251a403d1dSDavid Daney { 261a403d1dSDavid Daney return __builtin_popcount(w & 0xff); 271a403d1dSDavid Daney } 281a403d1dSDavid Daney __arch_hweight64(__u64 w)291a403d1dSDavid Daneystatic inline unsigned long __arch_hweight64(__u64 w) 301a403d1dSDavid Daney { 311a403d1dSDavid Daney return __builtin_popcountll(w); 321a403d1dSDavid Daney } 331a403d1dSDavid Daney 341a403d1dSDavid Daney #else 351a403d1dSDavid Daney #include <asm-generic/bitops/arch_hweight.h> 361a403d1dSDavid Daney #endif 371a403d1dSDavid Daney 381a403d1dSDavid Daney #endif /* _ASM_ARCH_HWEIGHT_H */ 39