xref: /aosp_15_r20/external/musl/src/thread/sh/atomics.s (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker/* Contract for all versions is same as cas.l r2,r3,@r0
2*c9945492SAndroid Build Coastguard Worker * pr and r1 are also clobbered (by jsr & r1 as temp).
3*c9945492SAndroid Build Coastguard Worker * r0,r2,r4-r15 must be preserved.
4*c9945492SAndroid Build Coastguard Worker * r3 contains result (==r2 iff cas succeeded). */
5*c9945492SAndroid Build Coastguard Worker
6*c9945492SAndroid Build Coastguard Worker	.align 2
7*c9945492SAndroid Build Coastguard Worker.global __sh_cas_gusa
8*c9945492SAndroid Build Coastguard Worker.hidden __sh_cas_gusa
9*c9945492SAndroid Build Coastguard Worker__sh_cas_gusa:
10*c9945492SAndroid Build Coastguard Worker	mov.l r5,@-r15
11*c9945492SAndroid Build Coastguard Worker	mov.l r4,@-r15
12*c9945492SAndroid Build Coastguard Worker	mov r0,r4
13*c9945492SAndroid Build Coastguard Worker	mova 1f,r0
14*c9945492SAndroid Build Coastguard Worker	mov r15,r1
15*c9945492SAndroid Build Coastguard Worker	mov #(0f-1f),r15
16*c9945492SAndroid Build Coastguard Worker0:	mov.l @r4,r5
17*c9945492SAndroid Build Coastguard Worker	cmp/eq r5,r2
18*c9945492SAndroid Build Coastguard Worker	bf 1f
19*c9945492SAndroid Build Coastguard Worker	mov.l r3,@r4
20*c9945492SAndroid Build Coastguard Worker1:	mov r1,r15
21*c9945492SAndroid Build Coastguard Worker	mov r5,r3
22*c9945492SAndroid Build Coastguard Worker	mov r4,r0
23*c9945492SAndroid Build Coastguard Worker	mov.l @r15+,r4
24*c9945492SAndroid Build Coastguard Worker	rts
25*c9945492SAndroid Build Coastguard Worker	 mov.l @r15+,r5
26*c9945492SAndroid Build Coastguard Worker
27*c9945492SAndroid Build Coastguard Worker.global __sh_cas_llsc
28*c9945492SAndroid Build Coastguard Worker.hidden __sh_cas_llsc
29*c9945492SAndroid Build Coastguard Worker__sh_cas_llsc:
30*c9945492SAndroid Build Coastguard Worker	mov r0,r1
31*c9945492SAndroid Build Coastguard Worker	.word 0x00ab /* synco */
32*c9945492SAndroid Build Coastguard Worker0:	.word 0x0163 /* movli.l @r1,r0 */
33*c9945492SAndroid Build Coastguard Worker	cmp/eq r0,r2
34*c9945492SAndroid Build Coastguard Worker	bf 1f
35*c9945492SAndroid Build Coastguard Worker	mov r3,r0
36*c9945492SAndroid Build Coastguard Worker	.word 0x0173 /* movco.l r0,@r1 */
37*c9945492SAndroid Build Coastguard Worker	bf 0b
38*c9945492SAndroid Build Coastguard Worker	mov r2,r0
39*c9945492SAndroid Build Coastguard Worker1:	.word 0x00ab /* synco */
40*c9945492SAndroid Build Coastguard Worker	mov r0,r3
41*c9945492SAndroid Build Coastguard Worker	rts
42*c9945492SAndroid Build Coastguard Worker	 mov r1,r0
43*c9945492SAndroid Build Coastguard Worker
44*c9945492SAndroid Build Coastguard Worker.global __sh_cas_imask
45*c9945492SAndroid Build Coastguard Worker.hidden __sh_cas_imask
46*c9945492SAndroid Build Coastguard Worker__sh_cas_imask:
47*c9945492SAndroid Build Coastguard Worker	mov r0,r1
48*c9945492SAndroid Build Coastguard Worker	stc sr,r0
49*c9945492SAndroid Build Coastguard Worker	mov.l r0,@-r15
50*c9945492SAndroid Build Coastguard Worker	or #0xf0,r0
51*c9945492SAndroid Build Coastguard Worker	ldc r0,sr
52*c9945492SAndroid Build Coastguard Worker	mov.l @r1,r0
53*c9945492SAndroid Build Coastguard Worker	cmp/eq r0,r2
54*c9945492SAndroid Build Coastguard Worker	bf 1f
55*c9945492SAndroid Build Coastguard Worker	mov.l r3,@r1
56*c9945492SAndroid Build Coastguard Worker1:	ldc.l @r15+,sr
57*c9945492SAndroid Build Coastguard Worker	mov r0,r3
58*c9945492SAndroid Build Coastguard Worker	rts
59*c9945492SAndroid Build Coastguard Worker	 mov r1,r0
60*c9945492SAndroid Build Coastguard Worker
61*c9945492SAndroid Build Coastguard Worker.global __sh_cas_cas_l
62*c9945492SAndroid Build Coastguard Worker.hidden __sh_cas_cas_l
63*c9945492SAndroid Build Coastguard Worker__sh_cas_cas_l:
64*c9945492SAndroid Build Coastguard Worker	rts
65*c9945492SAndroid Build Coastguard Worker	 .word 0x2323 /* cas.l r2,r3,@r0 */
66