]> git.sur5r.net Git - u-boot/blobdiff - include/asm-m68k/bitops.h
Replace "#include <asm-$ARCH/$FILE>" with "#include <asm/$FILE>"
[u-boot] / include / asm-m68k / bitops.h
index 32837142c8e5b7a2e73d0bb856140124a6773e3a..ad971b4f31ffccbb816c2c63b2113db87e0a8395 100644 (file)
@@ -15,4 +15,44 @@ extern int test_and_set_bit(int nr, volatile void *addr);
 extern int test_and_clear_bit(int nr, volatile void *addr);
 extern int test_and_change_bit(int nr, volatile void *addr);
 
+#ifdef __KERNEL__
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+extern __inline__ int ffs(int x)
+{
+       int r = 1;
+
+       if (!x)
+               return 0;
+       if (!(x & 0xffff)) {
+               x >>= 16;
+               r += 16;
+       }
+       if (!(x & 0xff)) {
+               x >>= 8;
+               r += 8;
+       }
+       if (!(x & 0xf)) {
+               x >>= 4;
+               r += 4;
+       }
+       if (!(x & 3)) {
+               x >>= 2;
+               r += 2;
+       }
+       if (!(x & 1)) {
+               x >>= 1;
+               r += 1;
+       }
+       return r;
+}
+#define __ffs(x) (ffs(x) - 1)
+#define PLATFORM_FFS
+
+#endif /* __KERNEL__ */
+
 #endif /* _M68K_BITOPS_H */