> diff --git a/include/asm-generic/bitops/arch_parity.h b/include/asm-generic/bitops/arch_parity.h > new file mode 100644 > index 0000000..cddc555 > --- /dev/null > +++ b/include/asm-generic/bitops/arch_parity.h > @@ -0,0 +1,39 @@ > +#ifndef _ASM_GENERIC_BITOPS_ARCH_PARITY_H_ > +#define _ASM_GENERIC_BITOPS_ARCH_PARITY_H_ > + > +#include <asm/types.h> > + > +/* > + * Refrence to 'https://graphics.stanford.edu/~seander/bithacks.html#ParityParallel'. > + */ > + > +static inline unsigned int __arch_parity4(unsigned int w) > +{ > + w &= 0xf; > + return (0x6996 >> w) & 1; > +} > + > +static inline unsigned int __arch_parity8(unsigned int w) > +{ > + w ^= w >> 4; > + return __arch_parity4(w); > +} > + > +static inline unsigned int __arch_parity16(unsigned int w) > +{ > + w ^= w >> 8; > + return __arch_parity8(w); > +} > + > +static inline unsigned int __arch_parity32(unsigned int w) > +{ > + w ^= w >> 16; > + return __arch_parity16(w); > +} > + > +static inline unsigned int __arch_parity64(__u64 w) > +{ > + return __arch_parity32((unsigned int)(w >> 32) ^ (unsigned int)w); > +} Defining these as static inlines in asm-generic prevent an architecture from selecting between a more optimal asm version or the generic version at run-time. sparc would benefit from this as only some sparc chips supports popc. See how this is done for hweight* Sam -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html