forked from mirrors/linux
		
	bitops: use __fls for fls64 on 64-bit archs
Use __fls for fls64 on 64-bit archs. The implementation for 64-bit archs is moved from x86_64 to asm-generic. Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
		
							parent
							
								
									56a6b1eb7b
								
							
						
					
					
						commit
						d57594c203
					
				
					 2 changed files with 24 additions and 13 deletions
				
			
		| 
						 | 
					@ -3,6 +3,18 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/types.h>
 | 
					#include <asm/types.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * fls64 - find last set bit in a 64-bit word
 | 
				
			||||||
 | 
					 * @x: the word to search
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This is defined in a similar way as the libc and compiler builtin
 | 
				
			||||||
 | 
					 * ffsll, but returns the position of the most significant set bit.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * fls64(value) returns 0 if value is 0 or the position of the last
 | 
				
			||||||
 | 
					 * set bit if value is nonzero. The last (most significant) bit is
 | 
				
			||||||
 | 
					 * at position 64.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#if BITS_PER_LONG == 32
 | 
				
			||||||
static inline int fls64(__u64 x)
 | 
					static inline int fls64(__u64 x)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__u32 h = x >> 32;
 | 
						__u32 h = x >> 32;
 | 
				
			||||||
| 
						 | 
					@ -10,5 +22,15 @@ static inline int fls64(__u64 x)
 | 
				
			||||||
		return fls(h) + 32;
 | 
							return fls(h) + 32;
 | 
				
			||||||
	return fls(x);
 | 
						return fls(x);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#elif BITS_PER_LONG == 64
 | 
				
			||||||
 | 
					static inline int fls64(__u64 x)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (x == 0)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						return __fls(x) + 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#error BITS_PER_LONG not 32 or 64
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */
 | 
					#endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,25 +39,14 @@ static inline void set_bit_string(unsigned long *bitmap, unsigned long i,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm-generic/bitops/sched.h>
 | 
					#include <asm-generic/bitops/sched.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * fls64 - find last bit set in 64 bit word
 | 
					 | 
				
			||||||
 * @x: the word to search
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This is defined the same way as fls.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static inline int fls64(__u64 x)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (x == 0)
 | 
					 | 
				
			||||||
		return 0;
 | 
					 | 
				
			||||||
	return __fls(x) + 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define ARCH_HAS_FAST_MULTIPLIER 1
 | 
					#define ARCH_HAS_FAST_MULTIPLIER 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm-generic/bitops/hweight.h>
 | 
					#include <asm-generic/bitops/hweight.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __KERNEL__ */
 | 
					#endif /* __KERNEL__ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <asm-generic/bitops/fls64.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __KERNEL__
 | 
					#ifdef __KERNEL__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm-generic/bitops/ext2-non-atomic.h>
 | 
					#include <asm-generic/bitops/ext2-non-atomic.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue