xref: /plan9-contrib/sys/src/ape/lib/ap/amd64/atom.s (revision 285246837f6ada0b67af5868b125ec5a52651955)
1*28524683SDavid du ColombierTEXT ainc(SB), 1, $0	/* long ainc(long *); */
2*28524683SDavid du Colombierainclp:
3*28524683SDavid du Colombier	MOVL	(RARG), AX	/* exp */
4*28524683SDavid du Colombier	MOVL	AX, BX
5*28524683SDavid du Colombier	INCL	BX		/* new */
6*28524683SDavid du Colombier	LOCK; CMPXCHGL BX, (RARG)
7*28524683SDavid du Colombier	JNZ	ainclp
8*28524683SDavid du Colombier	MOVL	BX, AX
9*28524683SDavid du Colombier	RET
10*28524683SDavid du Colombier
11*28524683SDavid du ColombierTEXT adec(SB), 1, $0	/* long adec(long*); */
12*28524683SDavid du Colombieradeclp:
13*28524683SDavid du Colombier	MOVL	(RARG), AX
14*28524683SDavid du Colombier	MOVL	AX, BX
15*28524683SDavid du Colombier	DECL	BX
16*28524683SDavid du Colombier	LOCK; CMPXCHGL BX, (RARG)
17*28524683SDavid du Colombier	JNZ	adeclp
18*28524683SDavid du Colombier	MOVL	BX, AX
19*28524683SDavid du Colombier	RET
20*28524683SDavid du Colombier
21*28524683SDavid du Colombier/*
22*28524683SDavid du Colombier * int cas32(u32int *p, u32int ov, u32int nv);
23*28524683SDavid du Colombier * int cas(uint *p, int ov, int nv);
24*28524683SDavid du Colombier * int casul(ulong *p, ulong ov, ulong nv);
25*28524683SDavid du Colombier */
26*28524683SDavid du Colombier
27*28524683SDavid du ColombierTEXT cas32(SB), 1, $0
28*28524683SDavid du ColombierTEXT cas(SB), 1, $0
29*28524683SDavid du ColombierTEXT casul(SB), 1, $0
30*28524683SDavid du ColombierTEXT casl(SB), 1, $0			/* back compat */
31*28524683SDavid du Colombier	MOVL	exp+8(FP), AX
32*28524683SDavid du Colombier	MOVL	new+16(FP), BX
33*28524683SDavid du Colombier	LOCK; CMPXCHGL BX, (RARG)
34*28524683SDavid du Colombier	MOVL	$1, AX				/* use CMOVLEQ etc. here? */
35*28524683SDavid du Colombier	JNZ	_cas32r0
36*28524683SDavid du Colombier_cas32r1:
37*28524683SDavid du Colombier	RET
38*28524683SDavid du Colombier_cas32r0:
39*28524683SDavid du Colombier	DECL	AX
40*28524683SDavid du Colombier	RET
41*28524683SDavid du Colombier
42*28524683SDavid du Colombier/*
43*28524683SDavid du Colombier * int cas64(u64int *p, u64int ov, u64int nv);
44*28524683SDavid du Colombier * int casp(void **p, void *ov, void *nv);
45*28524683SDavid du Colombier */
46*28524683SDavid du Colombier
47*28524683SDavid du ColombierTEXT cas64(SB), 1, $0
48*28524683SDavid du ColombierTEXT casp(SB), 1, $0
49*28524683SDavid du Colombier	MOVQ	exp+8(FP), AX
50*28524683SDavid du Colombier	MOVQ	new+16(FP), BX
51*28524683SDavid du Colombier	LOCK; CMPXCHGQ BX, (RARG)
52*28524683SDavid du Colombier	MOVL	$1, AX				/* use CMOVLEQ etc. here? */
53*28524683SDavid du Colombier	JNZ	_cas64r0
54*28524683SDavid du Colombier_cas64r1:
55*28524683SDavid du Colombier	RET
56*28524683SDavid du Colombier_cas64r0:
57*28524683SDavid du Colombier	DECL	AX
58*28524683SDavid du Colombier	RET
59*28524683SDavid du Colombier
60*28524683SDavid du Colombier/*
61*28524683SDavid du Colombier * void mfence(void);
62*28524683SDavid du Colombier */
63*28524683SDavid du ColombierTEXT mfence(SB),0,$0
64*28524683SDavid du Colombier	MFENCE
65*28524683SDavid du Colombier	RET
66*28524683SDavid du Colombier
67