| #ifndef __ASM_SH_CMPXCHG_CAS_H | |
| #define __ASM_SH_CMPXCHG_CAS_H | |
| static inline unsigned long | |
| __cmpxchg_u32(volatile u32 *m, unsigned long old, unsigned long new) | |
| { | |
| __asm__ __volatile__("cas.l %1,%0,@r0" | |
| : "+r"(new) | |
| : "r"(old), "z"(m) | |
| : "t", "memory" ); | |
| return new; | |
| } | |
| static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val) | |
| { | |
| unsigned long old; | |
| do old = *m; | |
| while (__cmpxchg_u32(m, old, val) != old); | |
| return old; | |
| } | |
| #include <asm/cmpxchg-xchg.h> | |
| #endif /* __ASM_SH_CMPXCHG_CAS_H */ |