github.com/hlts2/go@v0.0.0-20170904000733-812b34efaed8/src/sync/atomic/asm_arm64.s (about)

     1  // Copyright 2014 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  #include "textflag.h"
     6  
     7  TEXT ·SwapInt32(SB),NOSPLIT,$0-20
     8  	B	·SwapUint32(SB)
     9  
    10  TEXT ·SwapUint32(SB),NOSPLIT,$0-20
    11  	MOVD	addr+0(FP), R0
    12  	MOVW	new+8(FP), R1
    13  again:
    14  	LDAXRW	(R0), R2
    15  	STLXRW	R1, (R0), R3
    16  	CBNZ	R3, again
    17  	MOVW	R2, old+16(FP)
    18  	RET
    19  
    20  TEXT ·SwapInt64(SB),NOSPLIT,$0-24
    21  	B	·SwapUint64(SB)
    22  
    23  TEXT ·SwapUint64(SB),NOSPLIT,$0-24
    24  	MOVD	addr+0(FP), R0
    25  	MOVD	new+8(FP), R1
    26  again:
    27  	LDAXR	(R0), R2
    28  	STLXR	R1, (R0), R3
    29  	CBNZ	R3, again
    30  	MOVD	R2, old+16(FP)
    31  	RET
    32  
    33  TEXT ·SwapUintptr(SB),NOSPLIT,$0-24
    34  	B	·SwapUint64(SB)
    35  
    36  TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0-17
    37  	B	·CompareAndSwapUint32(SB)
    38  
    39  TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-17
    40  	MOVD	addr+0(FP), R0
    41  	MOVW	old+8(FP), R1
    42  	MOVW	new+12(FP), R2
    43  again:
    44  	LDAXRW	(R0), R3
    45  	CMPW	R1, R3
    46  	BNE	ok
    47  	STLXRW	R2, (R0), R3
    48  	CBNZ	R3, again
    49  ok:
    50  	CSET	EQ, R0
    51  	MOVB	R0, swapped+16(FP)
    52  	RET
    53  
    54  TEXT ·CompareAndSwapUintptr(SB),NOSPLIT,$0-25
    55  	B	·CompareAndSwapUint64(SB)
    56  
    57  TEXT ·CompareAndSwapInt64(SB),NOSPLIT,$0-25
    58  	B	·CompareAndSwapUint64(SB)
    59  
    60  TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25
    61  	MOVD	addr+0(FP), R0
    62  	MOVD	old+8(FP), R1
    63  	MOVD	new+16(FP), R2
    64  again:
    65  	LDAXR	(R0), R3
    66  	CMP	R1, R3
    67  	BNE	ok
    68  	STLXR	R2, (R0), R3
    69  	CBNZ	R3, again
    70  ok:
    71  	CSET	EQ, R0
    72  	MOVB	R0, swapped+24(FP)
    73  	RET
    74  
    75  TEXT ·AddInt32(SB),NOSPLIT,$0-20
    76  	B	·AddUint32(SB)
    77  
    78  TEXT ·AddUint32(SB),NOSPLIT,$0-20
    79  	MOVD	addr+0(FP), R0
    80  	MOVW	delta+8(FP), R1
    81  again:
    82  	LDAXRW	(R0), R2
    83  	ADDW	R2, R1, R2
    84  	STLXRW	R2, (R0), R3
    85  	CBNZ	R3, again
    86  	MOVW	R2, new+16(FP)
    87  	RET
    88  
    89  TEXT ·AddUintptr(SB),NOSPLIT,$0-24
    90  	B	·AddUint64(SB)
    91  
    92  TEXT ·AddInt64(SB),NOSPLIT,$0-24
    93  	B	·AddUint64(SB)
    94  
    95  TEXT ·AddUint64(SB),NOSPLIT,$0-24
    96  	MOVD	addr+0(FP), R0
    97  	MOVD	delta+8(FP), R1
    98  again:
    99  	LDAXR	(R0), R2
   100  	ADD	R2, R1, R2
   101  	STLXR	R2, (R0), R3
   102  	CBNZ	R3, again
   103  	MOVD	R2, new+16(FP)
   104  	RET
   105  
   106  TEXT ·LoadInt32(SB),NOSPLIT,$0-12
   107  	B	·LoadUint32(SB)
   108  
   109  TEXT ·LoadUint32(SB),NOSPLIT,$0-12
   110  	MOVD	addr+0(FP), R0
   111  	LDARW	(R0), R0
   112  	MOVW	R0, val+8(FP)
   113  	RET
   114  
   115  TEXT ·LoadInt64(SB),NOSPLIT,$0-16
   116  	B	·LoadUint64(SB)
   117  
   118  TEXT ·LoadUint64(SB),NOSPLIT,$0-16
   119  	MOVD	addr+0(FP), R0
   120  	LDAR	(R0), R0
   121  	MOVD	R0, val+8(FP)
   122  	RET
   123  
   124  TEXT ·LoadUintptr(SB),NOSPLIT,$0-16
   125  	B	·LoadPointer(SB)
   126  
   127  TEXT ·LoadPointer(SB),NOSPLIT,$0-16
   128  	B	·LoadUint64(SB)
   129  
   130  TEXT ·StoreInt32(SB),NOSPLIT,$0-12
   131  	B	·StoreUint32(SB)
   132  
   133  TEXT ·StoreUint32(SB),NOSPLIT,$0-12
   134  	MOVD	addr+0(FP), R0
   135  	MOVW	val+8(FP), R1
   136  	STLRW	R1, (R0)
   137  	RET
   138  
   139  TEXT ·StoreInt64(SB),NOSPLIT,$0-16
   140  	B	·StoreUint64(SB)
   141  
   142  TEXT ·StoreUint64(SB),NOSPLIT,$0-16
   143  	MOVD	addr+0(FP), R0
   144  	MOVD	val+8(FP), R1
   145  	STLR	R1, (R0)
   146  	RET
   147  
   148  TEXT ·StoreUintptr(SB),NOSPLIT,$0-16
   149  	B	·StoreUint64(SB)