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)