Commit 1a403d1d2e549bc7d280001503867321572717f6
Committed by
Ralf Baechle
1 parent
d16f7093b6
Exists in
master
and in
7 other branches
MIPS: Create and use asm/arch_hweight.h
Some MIPS ISA processor varients can do hweight operations efficiently. Split arch_hweight.h into a seperate file, and implement the operations with __builtin_popcount{,ll} if supported. Signed-off-by: David Daney <ddaney@caviumnetworks.com> To: linux-mips@linux-mips.org Cc: David Daney <ddaney@caviumnetworks.com> Patchwork: https://patchwork.linux-mips.org/patch/1430/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Showing 2 changed files with 42 additions and 1 deletions Side-by-side Diff
arch/mips/include/asm/arch_hweight.h
1 | +/* | |
2 | + * This file is subject to the terms and conditions of the GNU General Public | |
3 | + * License. See the file "COPYING" in the main directory of this archive | |
4 | + * for more details. | |
5 | + * | |
6 | + */ | |
7 | +#ifndef _ASM_ARCH_HWEIGHT_H | |
8 | +#define _ASM_ARCH_HWEIGHT_H | |
9 | + | |
10 | +#ifdef ARCH_HAS_USABLE_BUILTIN_POPCOUNT | |
11 | + | |
12 | +#include <asm/types.h> | |
13 | + | |
14 | +static inline unsigned int __arch_hweight32(unsigned int w) | |
15 | +{ | |
16 | + return __builtin_popcount(w); | |
17 | +} | |
18 | + | |
19 | +static inline unsigned int __arch_hweight16(unsigned int w) | |
20 | +{ | |
21 | + return __builtin_popcount(w & 0xffff); | |
22 | +} | |
23 | + | |
24 | +static inline unsigned int __arch_hweight8(unsigned int w) | |
25 | +{ | |
26 | + return __builtin_popcount(w & 0xff); | |
27 | +} | |
28 | + | |
29 | +static inline unsigned long __arch_hweight64(__u64 w) | |
30 | +{ | |
31 | + return __builtin_popcountll(w); | |
32 | +} | |
33 | + | |
34 | +#else | |
35 | +#include <asm-generic/bitops/arch_hweight.h> | |
36 | +#endif | |
37 | + | |
38 | +#endif /* _ASM_ARCH_HWEIGHT_H */ |
arch/mips/include/asm/bitops.h
... | ... | @@ -700,7 +700,10 @@ |
700 | 700 | #ifdef __KERNEL__ |
701 | 701 | |
702 | 702 | #include <asm-generic/bitops/sched.h> |
703 | -#include <asm-generic/bitops/hweight.h> | |
703 | + | |
704 | +#include <asm/arch_hweight.h> | |
705 | +#include <asm-generic/bitops/const_hweight.h> | |
706 | + | |
704 | 707 | #include <asm-generic/bitops/ext2-non-atomic.h> |
705 | 708 | #include <asm-generic/bitops/ext2-atomic.h> |
706 | 709 | #include <asm-generic/bitops/minix.h> |