xref: /plan9/sys/src/libthread/xincmips.s (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
1*59cc4ca5SDavid du Colombier/*
2*59cc4ca5SDavid du Colombier *	R4000 user level lock code
3*59cc4ca5SDavid du Colombier */
4*59cc4ca5SDavid du Colombier
5*59cc4ca5SDavid du Colombier#define	LL(base, rt)	WORD	$((060<<26)|((base)<<21)|((rt)<<16))
6*59cc4ca5SDavid du Colombier#define	SC(base, rt)	WORD	$((070<<26)|((base)<<21)|((rt)<<16))
7*59cc4ca5SDavid du Colombier#define	NOOP		WORD	$0x27
8*59cc4ca5SDavid du Colombier
9*59cc4ca5SDavid du Colombier#ifdef oldstyle
10*59cc4ca5SDavid du ColombierTEXT	xadd(SB), $0
11*59cc4ca5SDavid du Colombier
12*59cc4ca5SDavid du Colombier	MOVW	R1, R2		/* address of counter */
13*59cc4ca5SDavid du Colombierloop:	MOVW	n+4(FP), R3	/* increment */
14*59cc4ca5SDavid du Colombier	LL(2, 1)
15*59cc4ca5SDavid du Colombier	NOOP
16*59cc4ca5SDavid du Colombier	ADD	R1,R3,R3
17*59cc4ca5SDavid du Colombier	SC(2, 3)
18*59cc4ca5SDavid du Colombier	NOOP
19*59cc4ca5SDavid du Colombier	BEQ	R3,loop
20*59cc4ca5SDavid du Colombier	RET
21*59cc4ca5SDavid du Colombier#endif
22*59cc4ca5SDavid du Colombier
23*59cc4ca5SDavid du ColombierTEXT	_xinc(SB), $0
24*59cc4ca5SDavid du Colombier
25*59cc4ca5SDavid du Colombier	MOVW	R1, R2		/* address of counter */
26*59cc4ca5SDavid du Colombierloop:	MOVW	$1, R3
27*59cc4ca5SDavid du Colombier	LL(2, 1)
28*59cc4ca5SDavid du Colombier	NOOP
29*59cc4ca5SDavid du Colombier	ADD	R1,R3,R3
30*59cc4ca5SDavid du Colombier	SC(2, 3)
31*59cc4ca5SDavid du Colombier	NOOP
32*59cc4ca5SDavid du Colombier	BEQ	R3,loop
33*59cc4ca5SDavid du Colombier	RET
34*59cc4ca5SDavid du Colombier
35*59cc4ca5SDavid du ColombierTEXT	_xdec(SB), $0
36*59cc4ca5SDavid du Colombier
37*59cc4ca5SDavid du Colombier	MOVW	R1, R2		/* address of counter */
38*59cc4ca5SDavid du Colombierloop1:	MOVW	$-1, R3
39*59cc4ca5SDavid du Colombier	LL(2, 1)
40*59cc4ca5SDavid du Colombier	NOOP
41*59cc4ca5SDavid du Colombier	ADD	R1,R3,R3
42*59cc4ca5SDavid du Colombier	MOVW	R3, R1
43*59cc4ca5SDavid du Colombier	SC(2, 3)
44*59cc4ca5SDavid du Colombier	NOOP
45*59cc4ca5SDavid du Colombier	BEQ	R3,loop1
46*59cc4ca5SDavid du Colombier	RET
47