xref: /plan9/sys/src/libc/mips/tas.s (revision 51f48f69b4c3e5c9d9f7955d28612ef2d4048ccc)
17dd7cddfSDavid du Colombier/*
2696c1e60SDavid du Colombier *	mips user level lock code
37dd7cddfSDavid du Colombier */
47dd7cddfSDavid du Colombier
57dd7cddfSDavid du Colombier#define	LL(base, rt)	WORD	$((060<<26)|((base)<<21)|((rt)<<16))
67dd7cddfSDavid du Colombier#define	SC(base, rt)	WORD	$((070<<26)|((base)<<21)|((rt)<<16))
77dd7cddfSDavid du Colombier#define	NOOP		WORD	$0x27
87dd7cddfSDavid du Colombier#define COP3		WORD	$(023<<26)
97dd7cddfSDavid du Colombier
107dd7cddfSDavid du Colombier	TEXT	C_3ktas(SB),$0
117dd7cddfSDavid du Colombier	MOVW	R1, R21
127dd7cddfSDavid du Colombierbtas:
137dd7cddfSDavid du Colombier	MOVW	R21, R1
147dd7cddfSDavid du Colombier	MOVB	R0, 1(R1)
157dd7cddfSDavid du Colombier	NOOP
167dd7cddfSDavid du Colombier	COP3
177dd7cddfSDavid du Colombier	BLTZ	R1, btas
187dd7cddfSDavid du Colombier	RET
197dd7cddfSDavid du Colombier
20*51f48f69SDavid du Colombier	TEXT	_tas(SB), $0
217dd7cddfSDavid du Colombier	TEXT	C_4ktas(SB), $0
227dd7cddfSDavid du Colombier	MOVW	R1, R2		/* address of key */
237dd7cddfSDavid du Colombiertas1:
247dd7cddfSDavid du Colombier	MOVW	$1, R3
257dd7cddfSDavid du Colombier	LL(2, 1)
267dd7cddfSDavid du Colombier	NOOP
277dd7cddfSDavid du Colombier	SC(2, 3)
287dd7cddfSDavid du Colombier	NOOP
297dd7cddfSDavid du Colombier	BEQ	R3, tas1
307dd7cddfSDavid du Colombier	RET
31