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