forked from Mirrors/opensbi
		
	lib: fix compilation when strings.h is included
In a systems that provide strings.h and it is included together with sbi_bitops.h the compilation error appears. The ffs() and fls() are provided by strings.h Signed-off-by: Petro Karashchenko <petro.karashchenko@gmail.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
		
				
					committed by
					
						
						Anup Patel
					
				
			
			
				
	
			
			
			
						parent
						
							5d53b55aa7
						
					
				
				
					commit
					6ad8917b7e
				
			@@ -37,47 +37,12 @@
 | 
			
		||||
	(((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ffs - Find first bit set
 | 
			
		||||
 * @x: the word to search
 | 
			
		||||
 *
 | 
			
		||||
 * This is defined the same way as
 | 
			
		||||
 * the libc and compiler builtin ffs routines, therefore
 | 
			
		||||
 * differs in spirit from the above ffz (man ffs).
 | 
			
		||||
 */
 | 
			
		||||
static inline int ffs(int x)
 | 
			
		||||
{
 | 
			
		||||
	int r = 1;
 | 
			
		||||
 | 
			
		||||
	if (!x)
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (!(x & 0xffff)) {
 | 
			
		||||
		x >>= 16;
 | 
			
		||||
		r += 16;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(x & 0xff)) {
 | 
			
		||||
		x >>= 8;
 | 
			
		||||
		r += 8;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(x & 0xf)) {
 | 
			
		||||
		x >>= 4;
 | 
			
		||||
		r += 4;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(x & 3)) {
 | 
			
		||||
		x >>= 2;
 | 
			
		||||
		r += 2;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(x & 1))
 | 
			
		||||
		r += 1;
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * __ffs - find first bit in word.
 | 
			
		||||
 * sbi_ffs - find first (less-significant) set bit in a long word.
 | 
			
		||||
 * @word: The word to search
 | 
			
		||||
 *
 | 
			
		||||
 * Undefined if no bit exists, so code should check against 0 first.
 | 
			
		||||
 */
 | 
			
		||||
static inline int __ffs(unsigned long word)
 | 
			
		||||
static inline int sbi_ffs(unsigned long word)
 | 
			
		||||
{
 | 
			
		||||
	int num = 0;
 | 
			
		||||
 | 
			
		||||
@@ -109,55 +74,20 @@ static inline int __ffs(unsigned long word)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ffz - find first zero in word.
 | 
			
		||||
 * sbi_ffz - find first zero in word.
 | 
			
		||||
 * @word: The word to search
 | 
			
		||||
 *
 | 
			
		||||
 * Undefined if no zero exists, so code should check against ~0UL first.
 | 
			
		||||
 */
 | 
			
		||||
#define ffz(x) __ffs(~(x))
 | 
			
		||||
#define sbi_ffz(x) sbi_ffs(~(x))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * fls - find last (most-significant) bit set
 | 
			
		||||
 * @x: the word to search
 | 
			
		||||
 *
 | 
			
		||||
 * This is defined the same way as ffs.
 | 
			
		||||
 * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static inline int fls(int x)
 | 
			
		||||
{
 | 
			
		||||
	int r = 32;
 | 
			
		||||
 | 
			
		||||
	if (!x)
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (!(x & 0xffff0000u)) {
 | 
			
		||||
		x <<= 16;
 | 
			
		||||
		r -= 16;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(x & 0xff000000u)) {
 | 
			
		||||
		x <<= 8;
 | 
			
		||||
		r -= 8;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(x & 0xf0000000u)) {
 | 
			
		||||
		x <<= 4;
 | 
			
		||||
		r -= 4;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(x & 0xc0000000u)) {
 | 
			
		||||
		x <<= 2;
 | 
			
		||||
		r -= 2;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(x & 0x80000000u))
 | 
			
		||||
		r -= 1;
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * __fls - find last (most-significant) set bit in a long word
 | 
			
		||||
 * sbi_fls - find last (most-significant) set bit in a long word
 | 
			
		||||
 * @word: the word to search
 | 
			
		||||
 *
 | 
			
		||||
 * Undefined if no set bit exists, so code should check against 0 first.
 | 
			
		||||
 */
 | 
			
		||||
static inline unsigned long __fls(unsigned long word)
 | 
			
		||||
static inline unsigned long sbi_fls(unsigned long word)
 | 
			
		||||
{
 | 
			
		||||
	int num = BITS_PER_LONG - 1;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user