Linux Audio

Check our new training course

Loading...
v6.8
 1/* SPDX-License-Identifier: GPL-2.0 */
 2// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
 3
 4#include <linux/linkage.h>
 5#include <abi/entry.h>
 6
 7.text
 8
 9/*
10 * int csky_cmpxchg(int oldval, int newval, int *ptr)
11 *
12 * If *ptr != oldval && return 1,
13 * else *ptr = newval return 0.
14 */
15ENTRY(csky_cmpxchg)
16	USPTOKSP
17
18	RD_MEH	a3
19	WR_MEH	a3
20
21	mfcr	a3, epc
22	addi	a3, TRAP0_SIZE
23
24	subi    sp, 16
25	stw     a3, (sp, 0)
26	mfcr    a3, epsr
27	stw     a3, (sp, 4)
28	mfcr	a3, usp
29	stw     a3, (sp, 8)
30
31	psrset	ee
32#ifdef CONFIG_CPU_HAS_LDSTEX
331:
34	ldex	a3, (a2)
35	cmpne	a0, a3
36	bt16	2f
37	mov	a3, a1
38	stex	a3, (a2)
39	bez	a3, 1b
402:
41	sync.is
42#else
43GLOBAL(csky_cmpxchg_ldw)
44	ldw	a3, (a2)
45	cmpne	a0, a3
46	bt16	3f
47GLOBAL(csky_cmpxchg_stw)
48	stw	a1, (a2)
493:
50#endif
51	mvc	a0
52	ldw	a3, (sp, 0)
53	mtcr	a3, epc
54	ldw     a3, (sp, 4)
55	mtcr	a3, epsr
56	ldw     a3, (sp, 8)
57	mtcr	a3, usp
58	addi	sp, 16
59	KSPTOUSP
60	rte
61END(csky_cmpxchg)
v5.9
 1/* SPDX-License-Identifier: GPL-2.0 */
 2// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
 3
 4#include <linux/linkage.h>
 5#include <abi/entry.h>
 6
 7.text
 8
 9/*
10 * int csky_cmpxchg(int oldval, int newval, int *ptr)
11 *
12 * If *ptr != oldval && return 1,
13 * else *ptr = newval return 0.
14 */
15ENTRY(csky_cmpxchg)
16	USPTOKSP
 
 
 
 
17	mfcr	a3, epc
18	addi	a3, TRAP0_SIZE
19
20	subi    sp, 16
21	stw     a3, (sp, 0)
22	mfcr    a3, epsr
23	stw     a3, (sp, 4)
24	mfcr	a3, usp
25	stw     a3, (sp, 8)
26
27	psrset	ee
28#ifdef CONFIG_CPU_HAS_LDSTEX
291:
30	ldex	a3, (a2)
31	cmpne	a0, a3
32	bt16	2f
33	mov	a3, a1
34	stex	a3, (a2)
35	bez	a3, 1b
362:
37	sync.is
38#else
391:
40	ldw	a3, (a2)
41	cmpne	a0, a3
42	bt16	3f
432:
44	stw	a1, (a2)
453:
46#endif
47	mvc	a0
48	ldw	a3, (sp, 0)
49	mtcr	a3, epc
50	ldw     a3, (sp, 4)
51	mtcr	a3, epsr
52	ldw     a3, (sp, 8)
53	mtcr	a3, usp
54	addi	sp, 16
55	KSPTOUSP
56	rte
57END(csky_cmpxchg)
58
59#ifndef CONFIG_CPU_HAS_LDSTEX
60/*
61 * Called from tlbmodified exception
62 */
63ENTRY(csky_cmpxchg_fixup)
64	mfcr	a0, epc
65	lrw	a1, 2b
66	cmpne	a1, a0
67	bt	1f
68	subi	a1, (2b - 1b)
69	stw	a1, (sp, LSAVE_PC)
701:
71	rts
72END(csky_cmpxchg_fixup)
73#endif