github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/sync/atomic/asm_freebsd_arm.s (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // FreeBSD/ARM atomic operations. 6 // TODO(minux): this only supports ARMv6K or higher. 7 8 TEXT ·CompareAndSwapInt32(SB),7,$0 9 B ·CompareAndSwapUint32(SB) 10 11 TEXT ·CompareAndSwapUint32(SB),7,$0 12 B ·armCompareAndSwapUint32(SB) 13 14 TEXT ·CompareAndSwapUintptr(SB),7,$0 15 B ·CompareAndSwapUint32(SB) 16 17 TEXT ·CompareAndSwapPointer(SB),7,$0 18 B ·CompareAndSwapUint32(SB) 19 20 TEXT ·AddInt32(SB),7,$0 21 B ·AddUint32(SB) 22 23 TEXT ·AddUint32(SB),7,$0 24 B ·armAddUint32(SB) 25 26 TEXT ·AddUintptr(SB),7,$0 27 B ·AddUint32(SB) 28 29 TEXT ·CompareAndSwapInt64(SB),7,$0 30 B ·CompareAndSwapUint64(SB) 31 32 TEXT ·CompareAndSwapUint64(SB),7,$-4 33 B ·armCompareAndSwapUint64(SB) 34 35 TEXT ·AddInt64(SB),7,$0 36 B ·addUint64(SB) 37 38 TEXT ·AddUint64(SB),7,$0 39 B ·addUint64(SB) 40 41 TEXT ·LoadInt32(SB),7,$0 42 B ·LoadUint32(SB) 43 44 TEXT ·LoadUint32(SB),7,$0 45 MOVW addr+0(FP), R1 46 load32loop: 47 LDREX (R1), R2 // loads R2 48 STREX R2, (R1), R0 // stores R2 49 CMP $0, R0 50 BNE load32loop 51 MOVW R2, val+4(FP) 52 RET 53 54 TEXT ·LoadInt64(SB),7,$0 55 B ·loadUint64(SB) 56 57 TEXT ·LoadUint64(SB),7,$0 58 B ·loadUint64(SB) 59 60 TEXT ·LoadUintptr(SB),7,$0 61 B ·LoadUint32(SB) 62 63 TEXT ·LoadPointer(SB),7,$0 64 B ·LoadUint32(SB) 65 66 TEXT ·StoreInt32(SB),7,$0 67 B ·StoreUint32(SB) 68 69 TEXT ·StoreUint32(SB),7,$0 70 MOVW addr+0(FP), R1 71 MOVW val+4(FP), R2 72 storeloop: 73 LDREX (R1), R4 // loads R4 74 STREX R2, (R1), R0 // stores R2 75 CMP $0, R0 76 BNE storeloop 77 RET 78 79 TEXT ·StoreInt64(SB),7,$0 80 B ·storeUint64(SB) 81 82 TEXT ·StoreUint64(SB),7,$0 83 B ·storeUint64(SB) 84 85 TEXT ·StoreUintptr(SB),7,$0 86 B ·StoreUint32(SB) 87 88 TEXT ·StorePointer(SB),7,$0 89 B ·StoreUint32(SB)