xref: /plan9/sys/src/cmd/unix/drawterm/posix-amd64/tas.c (revision ec59a3ddbfceee0efe34584c2c9981a5e5ff1ec4)
1*ec59a3ddSDavid du Colombier #include "u.h"
2*ec59a3ddSDavid du Colombier #include "libc.h"
3*ec59a3ddSDavid du Colombier 
4*ec59a3ddSDavid du Colombier int
tas(long * x)5*ec59a3ddSDavid du Colombier tas(long *x)
6*ec59a3ddSDavid du Colombier {
7*ec59a3ddSDavid du Colombier 	int     v;
8*ec59a3ddSDavid du Colombier 
9*ec59a3ddSDavid du Colombier 	__asm__(	"movl   $1, %%eax\n\t"
10*ec59a3ddSDavid du Colombier 				"xchgl  %%eax,(%%rcx)"
11*ec59a3ddSDavid du Colombier 				: "=a" (v)
12*ec59a3ddSDavid du Colombier 				: "c" (x)
13*ec59a3ddSDavid du Colombier 	);
14*ec59a3ddSDavid du Colombier 	switch(v) {
15*ec59a3ddSDavid du Colombier 	case 0:
16*ec59a3ddSDavid du Colombier 	case 1:
17*ec59a3ddSDavid du Colombier 		return v;
18*ec59a3ddSDavid du Colombier 	default:
19*ec59a3ddSDavid du Colombier 		print("canlock: corrupted 0x%lux\n", v);
20*ec59a3ddSDavid du Colombier 		return 1;
21*ec59a3ddSDavid du Colombier 	}
22*ec59a3ddSDavid du Colombier }
23*ec59a3ddSDavid du Colombier 
24