Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #ifndef __ASM_SH_CMPXCHG_LLSC_H |
3 | #define __ASM_SH_CMPXCHG_LLSC_H |
4 | |
5 | static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val) |
6 | { |
7 | unsigned long retval; |
8 | unsigned long tmp; |
9 | |
10 | __asm__ __volatile__ ( |
11 | "1: \n\t" |
12 | "movli.l @%2, %0 ! xchg_u32 \n\t" |
13 | "mov %0, %1 \n\t" |
14 | "mov %3, %0 \n\t" |
15 | "movco.l %0, @%2 \n\t" |
16 | "bf 1b \n\t" |
17 | "synco \n\t" |
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 old, unsigned long new) |
28 | { |
29 | unsigned long retval; |
30 | unsigned long tmp; |
31 | |
32 | __asm__ __volatile__ ( |
33 | "1: \n\t" |
34 | "movli.l @%2, %0 ! __cmpxchg_u32 \n\t" |
35 | "mov %0, %1 \n\t" |
36 | "cmp/eq %1, %3 \n\t" |
37 | "bf 2f \n\t" |
38 | "mov %4, %0 \n\t" |
39 | "2: \n\t" |
40 | "movco.l %0, @%2 \n\t" |
41 | "bf 1b \n\t" |
42 | "synco \n\t" |
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 |
Warning: This file is not a C or C++ file. It does not have highlighting.