xref: /plan9/sys/src/cmd/unix/drawterm/posix-mips/tas.s (revision ec59a3ddbfceee0efe34584c2c9981a5e5ff1ec4)
1*ec59a3ddSDavid du Colombier#include <sys/regdef.h>
2*ec59a3ddSDavid du Colombier#include <sys/asm.h>
3*ec59a3ddSDavid du Colombier
4*ec59a3ddSDavid du Colombier.globl tas
5*ec59a3ddSDavid du Colombier.ent tas 2
6*ec59a3ddSDavid du Colombier
7*ec59a3ddSDavid du Colombiertas:
8*ec59a3ddSDavid du Colombier.set noreorder
9*ec59a3ddSDavid du Colombier1:
10*ec59a3ddSDavid du Colombier	ori	t1, zero, 12345	/* t1 = 12345 */
11*ec59a3ddSDavid du Colombier	ll	t0, (a0)		/* t0 = *a0 */
12*ec59a3ddSDavid du Colombier	sc	t1, (a0)		/* *a0 = t1 if *a0 hasn't changed; t1=success */
13*ec59a3ddSDavid du Colombier	beq	t1, zero, 1b		/* repeat if *a0 did change */
14*ec59a3ddSDavid du Colombier	nop
15*ec59a3ddSDavid du Colombier
16*ec59a3ddSDavid du Colombier	j $31				/* return */
17*ec59a3ddSDavid du Colombier	or	v0, t0, zero		/* set return value on way out */
18*ec59a3ddSDavid du Colombier
19*ec59a3ddSDavid du Colombier.set reorder
20*ec59a3ddSDavid du Colombier.end tas
21*ec59a3ddSDavid du Colombier
22