#include "../../../cmd/ld/textflag.h"
TEXT ツキCompareAndSwapInt32(SB),NOSPLIT,$0
B ツキCompareAndSwapUint32(SB)
TEXT ツキCompareAndSwapUint32(SB),NOSPLIT,$0
B ツキarmCompareAndSwapUint32(SB)
TEXT ツキCompareAndSwapUintptr(SB),NOSPLIT,$0
B ツキCompareAndSwapUint32(SB)
TEXT ツキCompareAndSwapPointer(SB),NOSPLIT,$0
B ツキCompareAndSwapUint32(SB)
TEXT ツキAddInt32(SB),NOSPLIT,$0
B ツキAddUint32(SB)
TEXT ツキAddUint32(SB),NOSPLIT,$0
B ツキarmAddUint32(SB)
TEXT ツキAddUintptr(SB),NOSPLIT,$0
B ツキAddUint32(SB)
TEXT ツキSwapInt32(SB),NOSPLIT,$0
B ツキSwapUint32(SB)
TEXT ツキSwapUint32(SB),NOSPLIT,$0
B ツキarmSwapUint32(SB)
TEXT ツキSwapUintptr(SB),NOSPLIT,$0
B ツキSwapUint32(SB)
TEXT ツキSwapPointer(SB),NOSPLIT,$0
B ツキSwapUint32(SB)
TEXT ツキCompareAndSwapInt64(SB),NOSPLIT,$0
B ツキCompareAndSwapUint64(SB)
TEXT ツキCompareAndSwapUint64(SB),NOSPLIT,$-4
B ツキarmCompareAndSwapUint64(SB)
TEXT ツキAddInt64(SB),NOSPLIT,$0
B ツキaddUint64(SB)
TEXT ツキAddUint64(SB),NOSPLIT,$0
B ツキaddUint64(SB)
TEXT ツキSwapInt64(SB),NOSPLIT,$0
B ツキswapUint64(SB)
TEXT ツキSwapUint64(SB),NOSPLIT,$0
B ツキswapUint64(SB)
TEXT ツキLoadInt32(SB),NOSPLIT,$0
B ツキLoadUint32(SB)
TEXT ツキLoadUint32(SB),NOSPLIT,$0-8
MOVW addr+0(FP), R1
load32loop:
LDREX (R1), R2
STREX R2, (R1), R0
CMP $0, R0
BNE load32loop
MOVW R2, val+4(FP)
RET
TEXT ツキLoadInt64(SB),NOSPLIT,$0
B ツキloadUint64(SB)
TEXT ツキLoadUint64(SB),NOSPLIT,$0
B ツキloadUint64(SB)
TEXT ツキLoadUintptr(SB),NOSPLIT,$0
B ツキLoadUint32(SB)
TEXT ツキLoadPointer(SB),NOSPLIT,$0
B ツキLoadUint32(SB)
TEXT ツキStoreInt32(SB),NOSPLIT,$0
B ツキStoreUint32(SB)
TEXT ツキStoreUint32(SB),NOSPLIT,$0-8
MOVW addr+0(FP), R1
MOVW val+4(FP), R2
storeloop:
LDREX (R1), R4
STREX R2, (R1), R0
CMP $0, R0
BNE storeloop
RET
TEXT ツキStoreInt64(SB),NOSPLIT,$0
B ツキstoreUint64(SB)
TEXT ツキStoreUint64(SB),NOSPLIT,$0
B ツキstoreUint64(SB)
TEXT ツキStoreUintptr(SB),NOSPLIT,$0
B ツキStoreUint32(SB)
TEXT ツキStorePointer(SB),NOSPLIT,$0
B ツキStoreUint32(SB)