1 #ifndef __ASM_METAG_CMPXCHG_LNKGET_H
2 #define __ASM_METAG_CMPXCHG_LNKGET_H
4 static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
11 "1: LNKGETD %1, [%2]\n"
14 " ANDT %0, %0, #HI(0x3f000000)\n"
15 " CMPT %0, #HI(0x02000000)\n"
17 #ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
20 : "=&d" (temp), "=&d" (old)
21 : "da" (m), "da" (val)
30 static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
37 "1: LNKGETD %1, [%2]\n"
40 " ANDT %0, %0, #HI(0x3f000000)\n"
41 " CMPT %0, #HI(0x02000000)\n"
43 #ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
46 : "=&d" (temp), "=&d" (old)
47 : "da" (m), "da" (val & 0xff)
56 static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
64 "1: LNKGETD %1, [%2]\n"
66 " LNKSETDEQ [%2], %4\n"
69 " ANDT %0, %0, #HI(0x3f000000)\n"
70 " CMPT %0, #HI(0x02000000)\n"
72 #ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
76 : "=&d" (temp), "=&da" (retval)
77 : "da" (m), "bd" (old), "da" (new)
86 #endif /* __ASM_METAG_CMPXCHG_LNKGET_H */