Path: blob/master/arch/sh/include/asm/cmpxchg-llsc.h
15126 views
#ifndef __ASM_SH_CMPXCHG_LLSC_H1#define __ASM_SH_CMPXCHG_LLSC_H23static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)4{5unsigned long retval;6unsigned long tmp;78__asm__ __volatile__ (9"1: \n\t"10"movli.l @%2, %0 ! xchg_u32 \n\t"11"mov %0, %1 \n\t"12"mov %3, %0 \n\t"13"movco.l %0, @%2 \n\t"14"bf 1b \n\t"15"synco \n\t"16: "=&z"(tmp), "=&r" (retval)17: "r" (m), "r" (val)18: "t", "memory"19);2021return retval;22}2324static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)25{26unsigned long retval;27unsigned long tmp;2829__asm__ __volatile__ (30"1: \n\t"31"movli.l @%2, %0 ! xchg_u8 \n\t"32"mov %0, %1 \n\t"33"mov %3, %0 \n\t"34"movco.l %0, @%2 \n\t"35"bf 1b \n\t"36"synco \n\t"37: "=&z"(tmp), "=&r" (retval)38: "r" (m), "r" (val & 0xff)39: "t", "memory"40);4142return retval;43}4445static inline unsigned long46__cmpxchg_u32(volatile int *m, unsigned long old, unsigned long new)47{48unsigned long retval;49unsigned long tmp;5051__asm__ __volatile__ (52"1: \n\t"53"movli.l @%2, %0 ! __cmpxchg_u32 \n\t"54"mov %0, %1 \n\t"55"cmp/eq %1, %3 \n\t"56"bf 2f \n\t"57"mov %4, %0 \n\t"58"2: \n\t"59"movco.l %0, @%2 \n\t"60"bf 1b \n\t"61"synco \n\t"62: "=&z" (tmp), "=&r" (retval)63: "r" (m), "r" (old), "r" (new)64: "t", "memory"65);6667return retval;68}6970#endif /* __ASM_SH_CMPXCHG_LLSC_H */717273