1 /* SPDX-License-Identifier: GPL-2.0 */
3 #ifndef _ASM_S390_ARCH_HWEIGHT_H
4 #define _ASM_S390_ARCH_HWEIGHT_H
6 #include <linux/types.h>
9 static __always_inline unsigned long popcnt_z196(unsigned long w)
13 asm volatile(".insn rrf,0xb9e10000,%[cnt],%[w],0,0"
20 static __always_inline unsigned long popcnt_z15(unsigned long w)
24 asm volatile(".insn rrf,0xb9e10000,%[cnt],%[w],8,0"
31 static __always_inline unsigned long __arch_hweight64(__u64 w)
33 if (__is_defined(MARCH_HAS_Z15_FEATURES))
35 if (__is_defined(MARCH_HAS_Z196_FEATURES)) {
42 return __sw_hweight64(w);
45 static __always_inline unsigned int __arch_hweight32(unsigned int w)
47 if (__is_defined(MARCH_HAS_Z15_FEATURES))
49 if (__is_defined(MARCH_HAS_Z196_FEATURES)) {
55 return __sw_hweight32(w);
58 static __always_inline unsigned int __arch_hweight16(unsigned int w)
60 if (__is_defined(MARCH_HAS_Z15_FEATURES))
61 return popcnt_z15((unsigned short)w);
62 if (__is_defined(MARCH_HAS_Z196_FEATURES)) {
67 return __sw_hweight16(w);
70 static __always_inline unsigned int __arch_hweight8(unsigned int w)
72 if (__is_defined(MARCH_HAS_Z196_FEATURES))
73 return popcnt_z196((unsigned char)w);
74 return __sw_hweight8(w);
77 #endif /* _ASM_S390_ARCH_HWEIGHT_H */