 1a403d1d2e
			
		
	
	
	1a403d1d2e
	
	
	
		
			
			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>
		
	
			
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			792 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			792 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * This file is subject to the terms and conditions of the GNU General Public
 | |
|  * License.  See the file "COPYING" in the main directory of this archive
 | |
|  * for more details.
 | |
|  *
 | |
|  */
 | |
| #ifndef _ASM_ARCH_HWEIGHT_H
 | |
| #define _ASM_ARCH_HWEIGHT_H
 | |
| 
 | |
| #ifdef ARCH_HAS_USABLE_BUILTIN_POPCOUNT
 | |
| 
 | |
| #include <asm/types.h>
 | |
| 
 | |
| static inline unsigned int __arch_hweight32(unsigned int w)
 | |
| {
 | |
| 	return __builtin_popcount(w);
 | |
| }
 | |
| 
 | |
| static inline unsigned int __arch_hweight16(unsigned int w)
 | |
| {
 | |
| 	return __builtin_popcount(w & 0xffff);
 | |
| }
 | |
| 
 | |
| static inline unsigned int __arch_hweight8(unsigned int w)
 | |
| {
 | |
| 	return __builtin_popcount(w & 0xff);
 | |
| }
 | |
| 
 | |
| static inline unsigned long __arch_hweight64(__u64 w)
 | |
| {
 | |
| 	return __builtin_popcountll(w);
 | |
| }
 | |
| 
 | |
| #else
 | |
| #include <asm-generic/bitops/arch_hweight.h>
 | |
| #endif
 | |
| 
 | |
| #endif /* _ASM_ARCH_HWEIGHT_H */
 |