xref: /plan9/sys/src/ape/lib/ap/power/atom.s (revision 51f48f69b4c3e5c9d9f7955d28612ef2d4048ccc)
1TEXT	_xinc(SB),$0	/* void _xinc(long *); */
2TEXT	ainc(SB),$0	/* long ainc(long *); */
3	MOVW	R3, R4
4xincloop:
5	LWAR	(R4), R3
6	ADD	$1, R3
7	DCBT	(R4)				/* fix 405 errata cpu_210 */
8	STWCCC	R3, (R4)
9	BNE	xincloop
10	RETURN
11
12TEXT	_xdec(SB),$0	/* long _xdec(long *); */
13TEXT	adec(SB),$0	/* long adec(long *); */
14	MOVW	R3, R4
15xdecloop:
16	LWAR	(R4), R3
17	ADD	$-1, R3
18	DCBT	(R4)				/* fix 405 errata cpu_210 */
19	STWCCC	R3, (R4)
20	BNE	xdecloop
21	RETURN
22
23TEXT	loadlink(SB), $0
24
25	LWAR	(R3), R3
26	RETURN
27
28TEXT	storecond(SB), $0
29
30	MOVW	val+4(FP), R4
31	DCBT	(R3)				/* fix 405 errata cpu_210 */
32	STWCCC	R4, (R3)
33	BNE	storecondfail
34	MOVW	$1, R3
35	RETURN
36storecondfail:
37	MOVW	$0, R3
38	RETURN
39
40/*
41 * int cas(uint *p, int ov, int nv);
42 * int casp(void **p, void *ov, void *nv);
43 */
44
45TEXT	cas+0(SB),0,$0
46TEXT	casp+0(SB),0,$0
47	MOVW	ov+4(FP),R4
48	MOVW	nv+8(FP),R8
49	LWAR	(R3),R5
50	CMP	R5,R4
51	BNE	fail
52	DCBT	(R3)				/* fix 405 errata cpu_210 */
53	STWCCC	R8,(R3)
54	BNE	fail1
55	MOVW	$1,R3
56	RETURN
57fail:
58	DCBT	(R3)				/* fix 405 errata cpu_210 */
59	STWCCC	R5,(R3)	/* give up exclusive access */
60fail1:
61	MOVW	R0,R3
62	RETURN
63	END
64