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