|
@@ -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
|