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 */