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