// Darwin/ARM atomic operations.
+#define DMB_ISHST_7 \
+ WORD $0xf57ff05a // dmb ishst
+
+#define DMB_ISH_7 \
+ WORD $0xf57ff05b // dmb ish
+
TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0
B ·CompareAndSwapUint32(SB)
MOVW addr+0(FP), R1
load32loop:
LDREX (R1), R2 // loads R2
+ DMB_ISHST_7
STREX R2, (R1), R0 // stores R2
CMP $0, R0
BNE load32loop
+ DMB_ISH_7
MOVW R2, val+4(FP)
RET
MOVW val+4(FP), R2
storeloop:
LDREX (R1), R4 // loads R4
+ DMB_ISHST_7
STREX R2, (R1), R0 // stores R2
CMP $0, R0
BNE storeloop
+ DMB_ISH_7
RET
TEXT ·StoreInt64(SB),NOSPLIT,$0