75 lines · 1.2 KB · Assembly
RawDownload
TEXT ainc(SB), $0	/* long ainc(long *); */	MOVL	addr+0(FP), BXainclp:	MOVL	(BX), AX	MOVL	AX, CX	INCL	CX	LOCK	BYTE	$0x0F; BYTE $0xB1; BYTE $0x0B	/* CMPXCHGL CX, (BX) */	JNZ	ainclp	MOVL	CX, AX	RET TEXT adec(SB), $0	/* long adec(long*); */	MOVL	addr+0(FP), BXadeclp:	MOVL	(BX), AX	MOVL	AX, CX	DECL	CX	LOCK	BYTE	$0x0F; BYTE $0xB1; BYTE $0x0B	/* CMPXCHGL CX, (BX) */	JNZ	adeclp	MOVL	CX, AX	RET /* * int cas32(u32int *p, u32int ov, u32int nv); * int cas(uint *p, int ov, int nv); * int casp(void **p, void *ov, void *nv); * int casl(ulong *p, ulong ov, ulong nv); */ /* * CMPXCHG (CX), DX: 0000 1111 1011 000w oorr rmmm, * mmm = CX = 001; rrr = DX = 010 */ #define CMPXCHG		BYTE $0x0F; BYTE $0xB1; BYTE $0x11 TEXT	cas32+0(SB),0,$0TEXT	cas+0(SB),0,$0TEXT	casp+0(SB),0,$0TEXT	casl+0(SB),0,$0	MOVL	p+0(FP), CX	MOVL	ov+4(FP), AX	MOVL	nv+8(FP), DX	LOCK	CMPXCHG	JNE	fail	MOVL	$1,AX	RETfail:	MOVL	$0,AX	RET /* * int cas64(u64int *p, u64int ov, u64int nv); */ /* * CMPXCHG64 (DI): 0000 1111 1100 0111 0000 1110, */ #define CMPXCHG64		BYTE $0x0F; BYTE $0xC7; BYTE $0x0F TEXT	cas64+0(SB),0,$0	MOVL	p+0(FP), DI	MOVL	ov+0x4(FP), AX	MOVL	ov+0x8(FP), DX	MOVL	nv+0xc(FP), BX	MOVL	nv+0x10(FP), CX	LOCK	CMPXCHG64	JNE	fail	MOVL	$1,AX	RET