Linux 6.9-rc1
[linux-2.6-microblaze.git] / arch / m68k / include / asm / bitops.h
index 71495fa..14c64a6 100644 (file)
@@ -157,11 +157,8 @@ arch___change_bit(unsigned long nr, volatile unsigned long *addr)
        change_bit(nr, addr);
 }
 
        change_bit(nr, addr);
 }
 
-static __always_inline bool
-arch_test_bit(unsigned long nr, const volatile unsigned long *addr)
-{
-       return (addr[nr >> 5] & (1UL << (nr & 31))) != 0;
-}
+#define arch_test_bit generic_test_bit
+#define arch_test_bit_acquire generic_test_bit_acquire
 
 static inline int bset_reg_test_and_set_bit(int nr,
                                            volatile unsigned long *vaddr)
 
 static inline int bset_reg_test_and_set_bit(int nr,
                                            volatile unsigned long *vaddr)
@@ -322,6 +319,27 @@ arch___test_and_change_bit(unsigned long nr, volatile unsigned long *addr)
        return test_and_change_bit(nr, addr);
 }
 
        return test_and_change_bit(nr, addr);
 }
 
+static inline bool xor_unlock_is_negative_byte(unsigned long mask,
+               volatile unsigned long *p)
+{
+#ifdef CONFIG_COLDFIRE
+       __asm__ __volatile__ ("eorl %1, %0"
+               : "+m" (*p)
+               : "d" (mask)
+               : "memory");
+       return *p & (1 << 7);
+#else
+       char result;
+       char *cp = (char *)p + 3;       /* m68k is big-endian */
+
+       __asm__ __volatile__ ("eor.b %1, %2; smi %0"
+               : "=d" (result)
+               : "di" (mask), "o" (*cp)
+               : "memory");
+       return result;
+#endif
+}
+
 /*
  *     The true 68020 and more advanced processors support the "bfffo"
  *     instruction for finding bits. ColdFire and simple 68000 parts
 /*
  *     The true 68020 and more advanced processors support the "bfffo"
  *     instruction for finding bits. ColdFire and simple 68000 parts
@@ -528,7 +546,7 @@ static inline int fls(unsigned int x)
        return 32 - cnt;
 }
 
        return 32 - cnt;
 }
 
-static inline int __fls(int x)
+static inline unsigned long __fls(unsigned long x)
 {
        return fls(x) - 1;
 }
 {
        return fls(x) - 1;
 }