shithub: front

ref: 49f1b55b7a3ddc7bb97a53ab70fc3e88e3a897aa
dir: /sys/src/libc/power/atomic.s/

View raw version
/* get variants */
TEXT agetl+0(SB),1,$0
TEXT agetp+0(SB),1,$0
	SYNC
	LWAR	(R3), R3
	CMP	R3, R3
	BNE	-1(PC)
	ISYNC
	RETURN

/* set variants */
TEXT aswapl+0(SB),1,$0
TEXT aswapp+0(SB),1,$0
	MOVW	R3, R4
	MOVW	val+4(FP), R5
	SYNC
_aswapl:
	LWAR	(R4), R3
	STWCCC	R5, (R4)
	BNE	_aswapl
	RETURN

/* inc variants */
TEXT aincl+0(SB),1,$0
	MOVW	R3, R4
	MOVW	delta+4(FP), R5
	SYNC
_aincl:
	LWAR	(R4), R3
	ADD	R5, R3
	STWCCC	R3, (R4)
	BNE	_aincl
	RETURN

/* cas variants */
TEXT acasl+0(SB),1,$0
TEXT acasp+0(SB),1,$0
	MOVW	old+4(FP), R4
	MOVW	new+8(FP), R5
	SYNC
_casl:
	LWAR	(R3), R6
	CMP	R6, R4
	BNE	_caslf
	STWCCC	R5, (R3)
	BNE	_casl
	MOVW	$1, R3
	SYNC
	RETURN
_caslf:
	SYNC
	AND	R0, R3
	RETURN

/* barriers */
TEXT coherence+0(SB),1,$0
	SYNC
	RETURN