1 /* SPDX-License-Identifier: GPL-2.0 */ 1 2 #ifndef __ASM_SH_CMPXCHG_LLSC_H 3 #define __ASM_SH_CMPXCHG_LLSC_H 4 5 static inline unsigned long xchg_u32(volatile 6 { 7 unsigned long retval; 8 unsigned long tmp; 9 10 __asm__ __volatile__ ( 11 "1: 12 "movli.l @%2, %0 ! xchg 13 "mov %0, %1 14 "mov %3, %0 15 "movco.l %0, @%2 16 "bf 1b 17 "synco 18 : "=&z"(tmp), "=&r" (retval) 19 : "r" (m), "r" (val) 20 : "t", "memory" 21 ); 22 23 return retval; 24 } 25 26 static inline unsigned long 27 __cmpxchg_u32(volatile u32 *m, unsigned long o 28 { 29 unsigned long retval; 30 unsigned long tmp; 31 32 __asm__ __volatile__ ( 33 "1: 34 "movli.l @%2, %0 ! __cm 35 "mov %0, %1 36 "cmp/eq %1, %3 37 "bf 2f 38 "mov %4, %0 39 "2: 40 "movco.l %0, @%2 41 "bf 1b 42 "synco 43 : "=&z" (tmp), "=&r" (retval) 44 : "r" (m), "r" (old), "r" (new 45 : "t", "memory" 46 ); 47 48 return retval; 49 } 50 51 #include <asm/cmpxchg-xchg.h> 52 53 #endif /* __ASM_SH_CMPXCHG_LLSC_H */ 54
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.