Merge tag 'fpga-for-v2018.11' of git://git.denx.de/u-boot-microblaze
[oweals/u-boot.git] / arch / x86 / include / asm / bitops.h
index c7a38f237a5cf0bcbbcf996ff8ffc01698a62220..196fcf9d3f64f3198a57c15e46a5aa0a1d917b5d 100644 (file)
  * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
  */
 
+#include <asm-generic/bitops/fls.h>
+#include <asm-generic/bitops/__fls.h>
+#include <asm-generic/bitops/fls64.h>
+
 #ifdef CONFIG_SMP
 #define LOCK_PREFIX "lock ; "
 #else
@@ -57,6 +61,8 @@ static __inline__ void __set_bit(int nr, volatile void * addr)
                :"Ir" (nr));
 }
 
+#define PLATFORM__SET_BIT
+
 /**
  * clear_bit - Clears a bit in memory
  * @nr: Bit to clear
@@ -331,6 +337,20 @@ static __inline__ unsigned long ffz(unsigned long word)
 
 #ifdef __KERNEL__
 
+/**
+ * __ffs - find first set bit in word
+ * @word: The word to search
+ *
+ * Undefined if no bit exists, so code should check against 0 first.
+ */
+static inline unsigned long __ffs(unsigned long word)
+{
+       __asm__("rep; bsf %1,%0"
+               : "=r" (word)
+               : "rm" (word));
+       return word;
+}
+
 /**
  * ffs - find first bit set
  * @x: the word to search
@@ -346,11 +366,17 @@ static __inline__ int ffs(int x)
        __asm__("bsfl %1,%0\n\t"
                "jnz 1f\n\t"
                "movl $-1,%0\n"
-               "1:" : "=r" (r) : "g" (x));
+               "1:" : "=r" (r) : "rm" (x));
+
        return r+1;
 }
 #define PLATFORM_FFS
 
+static inline int __ilog2(unsigned int x)
+{
+       return generic_fls(x) - 1;
+}
+
 /**
  * hweightN - returns the hamming weight of a N-bit word
  * @x: the word to weigh