diff options
| -rw-r--r-- | include/asm-i386/bitops.h | 1 | ||||
| -rw-r--r-- | include/asm-m68k/bitops.h | 1 | ||||
| -rw-r--r-- | include/asm-nios/bitops.h | 1 | ||||
| -rw-r--r-- | include/asm-nios2/bitops.h | 1 | ||||
| -rw-r--r-- | include/asm-ppc/bitops.h | 2 | ||||
| -rw-r--r-- | include/asm-sh/bitops.h | 2 | ||||
| -rw-r--r-- | include/linux/bitops.h | 45 | 
7 files changed, 53 insertions, 0 deletions
| diff --git a/include/asm-i386/bitops.h b/include/asm-i386/bitops.h index b768e20fb..ac6285aa5 100644 --- a/include/asm-i386/bitops.h +++ b/include/asm-i386/bitops.h @@ -349,6 +349,7 @@ static __inline__ int ffs(int x)  		"1:" : "=r" (r) : "g" (x));  	return r+1;  } +#define ffs  /**   * hweightN - returns the hamming weight of a N-bit word diff --git a/include/asm-m68k/bitops.h b/include/asm-m68k/bitops.h index 0f9e8abe9..e0c35fa7b 100644 --- a/include/asm-m68k/bitops.h +++ b/include/asm-m68k/bitops.h @@ -51,6 +51,7 @@ extern __inline__ int ffs(int x)  	return r;  }  #define __ffs(x) (ffs(x) - 1) +#define ffs  #endif /* __KERNEL__ */ diff --git a/include/asm-nios/bitops.h b/include/asm-nios/bitops.h index 7744212b4..8315fb7ca 100644 --- a/include/asm-nios/bitops.h +++ b/include/asm-nios/bitops.h @@ -33,5 +33,6 @@ extern int test_and_set_bit(int nr, volatile void * a);  extern int test_and_change_bit(int nr, volatile void * addr);  extern int test_bit(int nr, volatile void * a);  extern int ffs(int i); +#define ffs  #endif /* _ASM_NIOS_BITOPS_H */ diff --git a/include/asm-nios2/bitops.h b/include/asm-nios2/bitops.h index e6c1a850d..b01a89d63 100644 --- a/include/asm-nios2/bitops.h +++ b/include/asm-nios2/bitops.h @@ -33,5 +33,6 @@ extern int test_and_set_bit(int nr, volatile void * a);  extern int test_and_change_bit(int nr, volatile void * addr);  extern int test_bit(int nr, volatile void * a);  extern int ffs(int i); +#define ffs  #endif /* __ASM_NIOS2_BITOPS_H */ diff --git a/include/asm-ppc/bitops.h b/include/asm-ppc/bitops.h index daa66cf91..9ed2f5d6f 100644 --- a/include/asm-ppc/bitops.h +++ b/include/asm-ppc/bitops.h @@ -178,6 +178,7 @@ static __inline__ int fls(unsigned int x)  {  	return __ilog2(x) + 1;  } +#define fls  /**   * fls64 - find last set bit in a 64-bit word @@ -230,6 +231,7 @@ extern __inline__ int ffs(int x)  {  	return __ilog2(x & -x) + 1;  } +#define ffs  /*   * hweightN: returns the hamming weight (i.e. the number diff --git a/include/asm-sh/bitops.h b/include/asm-sh/bitops.h index 410fba46e..95167bd45 100644 --- a/include/asm-sh/bitops.h +++ b/include/asm-sh/bitops.h @@ -146,6 +146,8 @@ static inline int ffs (int x)  	}  	return r;  } +#define ffs +  #endif /* __KERNEL__ */  #endif /* __ASM_SH_BITOPS_H */ diff --git a/include/linux/bitops.h b/include/linux/bitops.h index 387a81813..e14e6c7b1 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h @@ -38,6 +38,43 @@ static inline int generic_ffs(int x)  	return r;  } +/** + * 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 generic_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)) { +		x <<= 1; +		r -= 1; +	} +	return r; +} + +  /*   * hweightN: returns the hamming weight (i.e. the number   * of bits set) of a N-bit word @@ -82,6 +119,14 @@ static inline unsigned int generic_hweight8(unsigned int w)  # define __clear_bit generic_clear_bit  #endif +#ifndef ffs +# define ffs generic_ffs +#endif + +#ifndef fls +# define fls generic_fls +#endif +  /**   * __set_bit - Set a bit in memory   * @nr: the bit to set |