|
@@ -0,0 +1,41 @@
|
|
|
+#ifndef _ASM_GENERIC_BITOPS_FLS_H_
|
|
|
+#define _ASM_GENERIC_BITOPS_FLS_H_
|
|
|
+
|
|
|
+/**
|
|
|
+ * 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)) {
|
|
|
+ x <<= 1;
|
|
|
+ r -= 1;
|
|
|
+ }
|
|
|
+ return r;
|
|
|
+}
|
|
|
+
|
|
|
+#endif /* _ASM_GENERIC_BITOPS_FLS_H_ */
|