1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_METAG_CMPXCHG_LNKGET_H
3 #define __ASM_METAG_CMPXCHG_LNKGET_H
5 static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
12 "1: LNKGETD %1, [%2]\n"
15 " ANDT %0, %0, #HI(0x3f000000)\n"
16 " CMPT %0, #HI(0x02000000)\n"
18 #ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
21 : "=&d" (temp), "=&d" (old)
22 : "da" (m), "da" (val)
31 static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
38 "1: LNKGETD %1, [%2]\n"
41 " ANDT %0, %0, #HI(0x3f000000)\n"
42 " CMPT %0, #HI(0x02000000)\n"
44 #ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
47 : "=&d" (temp), "=&d" (old)
48 : "da" (m), "da" (val & 0xff)
57 static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
65 "1: LNKGETD %1, [%2]\n"
67 " LNKSETDEQ [%2], %4\n"
70 " ANDT %0, %0, #HI(0x3f000000)\n"
71 " CMPT %0, #HI(0x02000000)\n"
73 #ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
77 : "=&d" (temp), "=&d" (retval)
78 : "da" (m), "bd" (old), "da" (new)
87 #endif /* __ASM_METAG_CMPXCHG_LNKGET_H */