Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/include/asm/cmpxchg-llsc.h
26493 views
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
55