Browse Source

[FLS64]: generic version

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Stephen Hemminger 19 years ago
parent
commit
3821af2fe1

+ 1 - 0
include/asm-alpha/bitops.h

@@ -321,6 +321,7 @@ static inline int fls(int word)
 #else
 #else
 #define fls	generic_fls
 #define fls	generic_fls
 #endif
 #endif
+#define fls64   generic_fls64
 
 
 /* Compute powers of two for the given integer.  */
 /* Compute powers of two for the given integer.  */
 static inline long floor_log2(unsigned long word)
 static inline long floor_log2(unsigned long word)

+ 2 - 0
include/asm-arm/bitops.h

@@ -332,6 +332,7 @@ static inline unsigned long __ffs(unsigned long word)
  */
  */
 
 
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * ffs: find first bit set. This is defined the same way as
  * ffs: find first bit set. This is defined the same way as
@@ -351,6 +352,7 @@ static inline unsigned long __ffs(unsigned long word)
 #define fls(x) \
 #define fls(x) \
 	( __builtin_constant_p(x) ? generic_fls(x) : \
 	( __builtin_constant_p(x) ? generic_fls(x) : \
 	  ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
 	  ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
+#define fls64(x)   generic_fls64(x)
 #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); })
 #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); })
 #define __ffs(x) (ffs(x) - 1)
 #define __ffs(x) (ffs(x) - 1)
 #define ffz(x) __ffs( ~(x) )
 #define ffz(x) __ffs( ~(x) )

+ 1 - 0
include/asm-arm26/bitops.h

@@ -259,6 +259,7 @@ static inline unsigned long __ffs(unsigned long word)
  */
  */
 
 
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * ffs: find first bit set. This is defined the same way as
  * ffs: find first bit set. This is defined the same way as

+ 1 - 0
include/asm-cris/bitops.h

@@ -240,6 +240,7 @@ static inline int test_bit(int nr, const volatile unsigned long *addr)
  */
  */
 
 
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * hweightN - returns the hamming weight of a N-bit word
  * hweightN - returns the hamming weight of a N-bit word

+ 1 - 0
include/asm-frv/bitops.h

@@ -228,6 +228,7 @@ found_middle:
 							\
 							\
 	bit ? 33 - bit : bit;				\
 	bit ? 33 - bit : bit;				\
 })
 })
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * Every architecture must define this function. It's the fastest
  * Every architecture must define this function. It's the fastest

+ 1 - 0
include/asm-generic/bitops.h

@@ -56,6 +56,7 @@ extern __inline__ int test_bit(int nr, const unsigned long * addr)
  */
  */
 
 
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 
 

+ 1 - 0
include/asm-h8300/bitops.h

@@ -406,5 +406,6 @@ found_middle:
 #endif /* __KERNEL__ */
 #endif /* __KERNEL__ */
 
 
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 #endif /* _H8300_BITOPS_H */
 #endif /* _H8300_BITOPS_H */

+ 1 - 0
include/asm-i386/bitops.h

@@ -372,6 +372,7 @@ static inline unsigned long ffz(unsigned long word)
  */
  */
 
 
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 
 

+ 1 - 0
include/asm-ia64/bitops.h

@@ -345,6 +345,7 @@ fls (int t)
 	x |= x >> 16;
 	x |= x >> 16;
 	return ia64_popcnt(x);
 	return ia64_popcnt(x);
 }
 }
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * ffs: find first bit set. This is defined the same way as the libc and compiler builtin
  * ffs: find first bit set. This is defined the same way as the libc and compiler builtin

+ 1 - 0
include/asm-m32r/bitops.h

@@ -465,6 +465,7 @@ static __inline__ unsigned long __ffs(unsigned long word)
  * fls: find last bit set.
  * fls: find last bit set.
  */
  */
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 
 

+ 1 - 0
include/asm-m68k/bitops.h

@@ -310,6 +310,7 @@ static inline int fls(int x)
 
 
 	return 32 - cnt;
 	return 32 - cnt;
 }
 }
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * Every architecture must define this function. It's the fastest
  * Every architecture must define this function. It's the fastest

+ 1 - 0
include/asm-m68knommu/bitops.h

@@ -499,5 +499,6 @@ found_middle:
  * fls: find last bit set.
  * fls: find last bit set.
  */
  */
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 #endif /* _M68KNOMMU_BITOPS_H */
 #endif /* _M68KNOMMU_BITOPS_H */

+ 1 - 1
include/asm-mips/bitops.h

@@ -695,7 +695,7 @@ static inline unsigned long fls(unsigned long word)
 
 
 	return flz(~word) + 1;
 	return flz(~word) + 1;
 }
 }
-
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * find_next_zero_bit - find the first zero bit in a memory region
  * find_next_zero_bit - find the first zero bit in a memory region

+ 1 - 0
include/asm-parisc/bitops.h

@@ -263,6 +263,7 @@ static __inline__ int fls(int x)
 
 
 	return ret;
 	return ret;
 }
 }
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * hweightN: returns the hamming weight (i.e. the number
  * hweightN: returns the hamming weight (i.e. the number

+ 1 - 0
include/asm-powerpc/bitops.h

@@ -310,6 +310,7 @@ static __inline__ int fls(unsigned int x)
 	asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x));
 	asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x));
 	return 32 - lz;
 	return 32 - lz;
 }
 }
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * hweightN: returns the hamming weight (i.e. the number
  * hweightN: returns the hamming weight (i.e. the number

+ 1 - 0
include/asm-s390/bitops.h

@@ -839,6 +839,7 @@ static inline int sched_find_first_bit(unsigned long *b)
  * fls: find last bit set.
  * fls: find last bit set.
  */
  */
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * hweightN: returns the hamming weight (i.e. the number
  * hweightN: returns the hamming weight (i.e. the number

+ 1 - 0
include/asm-sh/bitops.h

@@ -470,6 +470,7 @@ found_middle:
  */
  */
 
 
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 #endif /* __KERNEL__ */
 #endif /* __KERNEL__ */
 
 

+ 1 - 0
include/asm-sh64/bitops.h

@@ -510,6 +510,7 @@ found_middle:
 
 
 #define ffs(x)	generic_ffs(x)
 #define ffs(x)	generic_ffs(x)
 #define fls(x)	generic_fls(x)
 #define fls(x)	generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 #endif /* __KERNEL__ */
 #endif /* __KERNEL__ */
 
 

+ 1 - 0
include/asm-sparc/bitops.h

@@ -298,6 +298,7 @@ static inline int ffs(int x)
  * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
  * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
  */
  */
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 /*
 /*
  * hweightN: returns the hamming weight (i.e. the number
  * hweightN: returns the hamming weight (i.e. the number

+ 1 - 0
include/asm-sparc64/bitops.h

@@ -119,6 +119,7 @@ static inline unsigned long __ffs(unsigned long word)
  */
  */
 
 
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x)   generic_fls64(x)
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 
 

+ 1 - 0
include/asm-v850/bitops.h

@@ -276,6 +276,7 @@ found_middle:
 
 
 #define ffs(x) generic_ffs (x)
 #define ffs(x) generic_ffs (x)
 #define fls(x) generic_fls (x)
 #define fls(x) generic_fls (x)
+#define fls64(x) generic_fls64(x)
 #define __ffs(x) ffs(x)
 #define __ffs(x) ffs(x)
 
 
 
 

+ 1 - 0
include/asm-x86_64/bitops.h

@@ -409,6 +409,7 @@ static __inline__ int ffs(int x)
 
 
 /* find last set bit */
 /* find last set bit */
 #define fls(x) generic_fls(x)
 #define fls(x) generic_fls(x)
+#define fls64(x) generic_fls64(x)
 
 
 #endif /* __KERNEL__ */
 #endif /* __KERNEL__ */
 
 

+ 1 - 0
include/asm-xtensa/bitops.h

@@ -245,6 +245,7 @@ static __inline__ int fls (unsigned int x)
 {
 {
 	return __cntlz(x);
 	return __cntlz(x);
 }
 }
+#define fls64(x)   generic_fls64(x)
 
 
 static __inline__ int
 static __inline__ int
 find_next_bit(const unsigned long *addr, int size, int offset)
 find_next_bit(const unsigned long *addr, int size, int offset)

+ 9 - 0
include/linux/bitops.h

@@ -76,6 +76,15 @@ static __inline__ int generic_fls(int x)
  */
  */
 #include <asm/bitops.h>
 #include <asm/bitops.h>
 
 
+
+static inline int generic_fls64(__u64 x)
+{
+	__u32 h = x >> 32;
+	if (h)
+		return fls(x) + 32;
+	return fls(x);
+}
+
 static __inline__ int get_bitmask_order(unsigned int count)
 static __inline__ int get_bitmask_order(unsigned int count)
 {
 {
 	int order;
 	int order;