xref: /openbmc/linux/arch/sh/include/asm/cmpxchg-cas.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
22b47d54eSRich Felker #ifndef __ASM_SH_CMPXCHG_CAS_H
32b47d54eSRich Felker #define __ASM_SH_CMPXCHG_CAS_H
42b47d54eSRich Felker 
52b47d54eSRich Felker static inline unsigned long
__cmpxchg_u32(volatile u32 * m,unsigned long old,unsigned long new)62b47d54eSRich Felker __cmpxchg_u32(volatile u32 *m, unsigned long old, unsigned long new)
72b47d54eSRich Felker {
82b47d54eSRich Felker 	__asm__ __volatile__("cas.l %1,%0,@r0"
92b47d54eSRich Felker 		: "+r"(new)
102b47d54eSRich Felker 		: "r"(old), "z"(m)
112b47d54eSRich Felker 		: "t", "memory" );
122b47d54eSRich Felker 	return new;
132b47d54eSRich Felker }
142b47d54eSRich Felker 
xchg_u32(volatile u32 * m,unsigned long val)152b47d54eSRich Felker static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
162b47d54eSRich Felker {
172b47d54eSRich Felker 	unsigned long old;
182b47d54eSRich Felker 	do old = *m;
192b47d54eSRich Felker 	while (__cmpxchg_u32(m, old, val) != old);
202b47d54eSRich Felker 	return old;
212b47d54eSRich Felker }
222b47d54eSRich Felker 
232b47d54eSRich Felker #include <asm/cmpxchg-xchg.h>
242b47d54eSRich Felker 
252b47d54eSRich Felker #endif /* __ASM_SH_CMPXCHG_CAS_H */
26