summaryrefslogtreecommitdiff
path: root/include/asm-generic/bitops/fls64.h
diff options
context:
space:
mode:
authorFabio Estevam <fabio.estevam@freescale.com>2015-11-05 12:43:23 -0200
committerTom Rini <trini@konsulko.com>2015-11-05 10:51:57 -0500
commit77c8554e4d7db8d04f03ee92d186bd87f74e3773 (patch)
tree709b900ed22641760b41ca9880679eab2b36c2eb /include/asm-generic/bitops/fls64.h
parentf598e7a99eda286d4c0883e440b5f81c8ac050f3 (diff)
downloadu-boot-imx-77c8554e4d7db8d04f03ee92d186bd87f74e3773.zip
u-boot-imx-77c8554e4d7db8d04f03ee92d186bd87f74e3773.tar.gz
u-boot-imx-77c8554e4d7db8d04f03ee92d186bd87f74e3773.tar.bz2
include: Add generic bitops headers
Use the generic bitops header files from the kernel. Imported from kernel 4.2.3. Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Diffstat (limited to 'include/asm-generic/bitops/fls64.h')
-rw-r--r--include/asm-generic/bitops/fls64.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/include/asm-generic/bitops/fls64.h b/include/asm-generic/bitops/fls64.h
new file mode 100644
index 0000000..b097cf8
--- /dev/null
+++ b/include/asm-generic/bitops/fls64.h
@@ -0,0 +1,36 @@
+#ifndef _ASM_GENERIC_BITOPS_FLS64_H_
+#define _ASM_GENERIC_BITOPS_FLS64_H_
+
+#include <asm/types.h>
+
+/**
+ * fls64 - find last set bit in a 64-bit word
+ * @x: the word to search
+ *
+ * This is defined in a similar way as the libc and compiler builtin
+ * ffsll, but returns the position of the most significant set bit.
+ *
+ * fls64(value) returns 0 if value is 0 or the position of the last
+ * set bit if value is nonzero. The last (most significant) bit is
+ * at position 64.
+ */
+#if BITS_PER_LONG == 32
+static __always_inline int fls64(__u64 x)
+{
+ __u32 h = x >> 32;
+ if (h)
+ return fls(h) + 32;
+ return fls(x);
+}
+#elif BITS_PER_LONG == 64
+static __always_inline int fls64(__u64 x)
+{
+ if (x == 0)
+ return 0;
+ return __fls(x) + 1;
+}
+#else
+#error BITS_PER_LONG not 32 or 64
+#endif
+
+#endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */