// SPDX-License-Identifier: GPL-2.0
#include <linux/export.h>
#include <linux/bitops.h>
#include <asm /types.h>
/**
* hweightN - returns the hamming weight of a N - bit word
* @ x : the word to weigh
*
* The Hamming Weight of a number is the total number of bits set in it .
*/
unsigned int __sw_hweight32(unsigned int w)
{
#ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER
w -= (w >> 1 ) & 0 x55555555;
w = (w & 0 x33333333) + ((w >> 2 ) & 0 x33333333);
w = (w + (w >> 4 )) & 0 x0f0f0f0f;
return (w * 0 x01010101) >> 24 ;
#else
unsigned int res = w - ((w >> 1 ) & 0 x55555555);
res = (res & 0 x33333333) + ((res >> 2 ) & 0 x33333333);
res = (res + (res >> 4 )) & 0 x0F0F0F0F;
res = res + (res >> 8 );
return (res + (res >> 16 )) & 0 x000000FF;
#endif
}
EXPORT_SYMBOL(__sw_hweight32);
unsigned int __sw_hweight16(unsigned int w)
{
unsigned int res = w - ((w >> 1 ) & 0 x5555);
res = (res & 0 x3333) + ((res >> 2 ) & 0 x3333);
res = (res + (res >> 4 )) & 0 x0F0F;
return (res + (res >> 8 )) & 0 x00FF;
}
EXPORT_SYMBOL(__sw_hweight16);
unsigned int __sw_hweight8(unsigned int w)
{
unsigned int res = w - ((w >> 1 ) & 0 x55);
res = (res & 0 x33) + ((res >> 2 ) & 0 x33);
return (res + (res >> 4 )) & 0 x0F;
}
EXPORT_SYMBOL(__sw_hweight8);
unsigned long __sw_hweight64(__u64 w)
{
#if BITS_PER_LONG == 32
return __sw_hweight32((unsigned int )(w >> 32 )) +
__sw_hweight32((unsigned int )w);
#elif BITS_PER_LONG == 64
#ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER
w -= (w >> 1 ) & 0 x5555555555555555ul;
w = (w & 0 x3333333333333333ul) + ((w >> 2 ) & 0 x3333333333333333ul);
w = (w + (w >> 4 )) & 0 x0f0f0f0f0f0f0f0ful;
return (w * 0 x0101010101010101ul) >> 56 ;
#else
__u64 res = w - ((w >> 1 ) & 0 x5555555555555555ul);
res = (res & 0 x3333333333333333ul) + ((res >> 2 ) & 0 x3333333333333333ul);
res = (res + (res >> 4 )) & 0 x0F0F0F0F0F0F0F0Ful;
res = res + (res >> 8 );
res = res + (res >> 16 );
return (res + (res >> 32 )) & 0 x00000000000000FFul;
#endif
#endif
}
EXPORT_SYMBOL(__sw_hweight64);
Messung V0.5 in Prozent C=98 H=94 G=95
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland