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 Daney static 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 Daney static 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 Daney static 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 Daney static 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