xref: /plan9/sys/src/ape/lib/ap/mips/tas.s (revision 51f48f69b4c3e5c9d9f7955d28612ef2d4048ccc)
1219b2ee8SDavid du Colombier/*
2f53d914dSDavid du Colombier *	mips user level lock code
3219b2ee8SDavid du Colombier */
4219b2ee8SDavid du Colombier
5219b2ee8SDavid du Colombier#define	LL(base, rt)	WORD	$((060<<26)|((base)<<21)|((rt)<<16))
6219b2ee8SDavid du Colombier#define	SC(base, rt)	WORD	$((070<<26)|((base)<<21)|((rt)<<16))
7219b2ee8SDavid du Colombier#define	NOOP		WORD	$0x27
8219b2ee8SDavid du Colombier#define COP3		WORD	$(023<<26)
9219b2ee8SDavid du Colombier
10219b2ee8SDavid du Colombier	TEXT	C_3ktas(SB),$0
11219b2ee8SDavid du Colombier	MOVW	R1, R21
12219b2ee8SDavid du Colombierbtas:
13219b2ee8SDavid du Colombier	MOVW	R21, R1
14219b2ee8SDavid du Colombier	MOVB	R0, 1(R1)
15219b2ee8SDavid du Colombier	NOOP
16219b2ee8SDavid du Colombier	COP3
17219b2ee8SDavid du Colombier	BLTZ	R1, btas
18219b2ee8SDavid du Colombier	RET
19219b2ee8SDavid du Colombier
20*51f48f69SDavid du Colombier	TEXT	tas(SB), $0
21219b2ee8SDavid du Colombier	TEXT	C_4ktas(SB), $0
22219b2ee8SDavid du Colombier	MOVW	R1, R2		/* address of key */
23219b2ee8SDavid du Colombiertas1:
24219b2ee8SDavid du Colombier	MOVW	$1, R3
25219b2ee8SDavid du Colombier	LL(2, 1)
26219b2ee8SDavid du Colombier	NOOP
27219b2ee8SDavid du Colombier	SC(2, 3)
28219b2ee8SDavid du Colombier	NOOP
29219b2ee8SDavid du Colombier	BEQ	R3, tas1
30219b2ee8SDavid du Colombier	RET
31