Blame view
lib/hweight.c
1.99 KB
b24413180 License cleanup: ... |
1 |
// SPDX-License-Identifier: GPL-2.0 |
8bc3bcc93 lib: reduce the u... |
2 |
#include <linux/export.h> |
1977f0327 remove asm/bitops... |
3 |
#include <linux/bitops.h> |
3b9ed1a5d [PATCH] bitops: g... |
4 5 6 7 8 9 10 11 |
#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. */ |
f5967101e x86/hweight: Get ... |
12 |
#ifndef __HAVE_ARCH_SW_HWEIGHT |
d61931d89 x86: Add optimize... |
13 |
unsigned int __sw_hweight32(unsigned int w) |
3b9ed1a5d [PATCH] bitops: g... |
14 |
{ |
72d931046 Make ARCH_HAS_FAS... |
15 |
#ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER |
39d997b51 x86, core: Optimi... |
16 17 18 19 20 |
w -= (w >> 1) & 0x55555555; w = (w & 0x33333333) + ((w >> 2) & 0x33333333); w = (w + (w >> 4)) & 0x0f0f0f0f; return (w * 0x01010101) >> 24; #else |
f9b419292 [PATCH] bitops: h... |
21 |
unsigned int res = w - ((w >> 1) & 0x55555555); |
3b9ed1a5d [PATCH] bitops: g... |
22 |
res = (res & 0x33333333) + ((res >> 2) & 0x33333333); |
f9b419292 [PATCH] bitops: h... |
23 24 25 |
res = (res + (res >> 4)) & 0x0F0F0F0F; res = res + (res >> 8); return (res + (res >> 16)) & 0x000000FF; |
39d997b51 x86, core: Optimi... |
26 |
#endif |
3b9ed1a5d [PATCH] bitops: g... |
27 |
} |
d61931d89 x86: Add optimize... |
28 |
EXPORT_SYMBOL(__sw_hweight32); |
f5967101e x86/hweight: Get ... |
29 |
#endif |
3b9ed1a5d [PATCH] bitops: g... |
30 |
|
d61931d89 x86: Add optimize... |
31 |
unsigned int __sw_hweight16(unsigned int w) |
3b9ed1a5d [PATCH] bitops: g... |
32 |
{ |
f9b419292 [PATCH] bitops: h... |
33 |
unsigned int res = w - ((w >> 1) & 0x5555); |
3b9ed1a5d [PATCH] bitops: g... |
34 |
res = (res & 0x3333) + ((res >> 2) & 0x3333); |
f9b419292 [PATCH] bitops: h... |
35 36 |
res = (res + (res >> 4)) & 0x0F0F; return (res + (res >> 8)) & 0x00FF; |
3b9ed1a5d [PATCH] bitops: g... |
37 |
} |
d61931d89 x86: Add optimize... |
38 |
EXPORT_SYMBOL(__sw_hweight16); |
3b9ed1a5d [PATCH] bitops: g... |
39 |
|
d61931d89 x86: Add optimize... |
40 |
unsigned int __sw_hweight8(unsigned int w) |
3b9ed1a5d [PATCH] bitops: g... |
41 |
{ |
f9b419292 [PATCH] bitops: h... |
42 |
unsigned int res = w - ((w >> 1) & 0x55); |
3b9ed1a5d [PATCH] bitops: g... |
43 |
res = (res & 0x33) + ((res >> 2) & 0x33); |
f9b419292 [PATCH] bitops: h... |
44 |
return (res + (res >> 4)) & 0x0F; |
3b9ed1a5d [PATCH] bitops: g... |
45 |
} |
d61931d89 x86: Add optimize... |
46 |
EXPORT_SYMBOL(__sw_hweight8); |
3b9ed1a5d [PATCH] bitops: g... |
47 |
|
f5967101e x86/hweight: Get ... |
48 |
#ifndef __HAVE_ARCH_SW_HWEIGHT |
d61931d89 x86: Add optimize... |
49 |
unsigned long __sw_hweight64(__u64 w) |
3b9ed1a5d [PATCH] bitops: g... |
50 51 |
{ #if BITS_PER_LONG == 32 |
d61931d89 x86: Add optimize... |
52 53 |
return __sw_hweight32((unsigned int)(w >> 32)) + __sw_hweight32((unsigned int)w); |
3b9ed1a5d [PATCH] bitops: g... |
54 |
#elif BITS_PER_LONG == 64 |
72d931046 Make ARCH_HAS_FAS... |
55 |
#ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER |
0136611c6 [PATCH] optimize ... |
56 57 58 59 60 |
w -= (w >> 1) & 0x5555555555555555ul; w = (w & 0x3333333333333333ul) + ((w >> 2) & 0x3333333333333333ul); w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0ful; return (w * 0x0101010101010101ul) >> 56; #else |
f9b419292 [PATCH] bitops: h... |
61 |
__u64 res = w - ((w >> 1) & 0x5555555555555555ul); |
3b9ed1a5d [PATCH] bitops: g... |
62 |
res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul); |
f9b419292 [PATCH] bitops: h... |
63 64 65 66 |
res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful; res = res + (res >> 8); res = res + (res >> 16); return (res + (res >> 32)) & 0x00000000000000FFul; |
0136611c6 [PATCH] optimize ... |
67 |
#endif |
3b9ed1a5d [PATCH] bitops: g... |
68 69 |
#endif } |
d61931d89 x86: Add optimize... |
70 |
EXPORT_SYMBOL(__sw_hweight64); |
f5967101e x86/hweight: Get ... |
71 |
#endif |