github.com/4ad/go@v0.0.0-20161219182952-69a12818b605/src/sync/atomic/asm_sparc64.s (about)

     1  // Copyright 2016 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  #include "asm_sparc64.h"
     7  
     8  TEXT ·SwapInt32(SB),NOSPLIT|NOFRAME,$0-20
     9  	JMP	·SwapUint32(SB)
    10  
    11  TEXT ·SwapUint32(SB),NOSPLIT,$0-20
    12  	MOVD	addr+0(FP), I3
    13  	MOVUW	new+8(FP), I1
    14  again:
    15  	MEM_SYNC
    16  	MOVUW	(I3), I5
    17  	CASW	(I3), I5, I1
    18  	CMP	I1, I5
    19  	BNEW	again
    20  	MEM_SYNC
    21  	MOVUW	I5, old+16(FP)
    22  	RET
    23  
    24  TEXT ·SwapInt64(SB),NOSPLIT|NOFRAME,$0-24
    25  	JMP	·SwapUint64(SB)
    26  
    27  TEXT ·SwapUint64(SB),NOSPLIT,$0-24
    28  	MOVD	addr+0(FP), I3
    29  	MOVD	new+8(FP), I1
    30  again:
    31  	MEM_SYNC
    32  	MOVD	(I3), I5
    33  	CASD	(I3), I5, I1
    34  	CMP	I1, I5
    35  	BNED	again
    36  	MEM_SYNC
    37  	MOVD	I5, old+16(FP)
    38  	RET
    39  
    40  TEXT ·SwapUintptr(SB),NOSPLIT|NOFRAME,$0-24
    41  	JMP	·SwapUint64(SB)
    42  
    43  TEXT ·CompareAndSwapInt32(SB),NOSPLIT|NOFRAME,$0-17
    44  	JMP	·CompareAndSwapUint32(SB)
    45  
    46  TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-17
    47  	MOVD	addr+0(FP), I1
    48  	MOVUW	old+8(FP), I3
    49  	MOVUW	new+12(FP), I5
    50  	MEM_SYNC
    51  	CASW	(I1), I3, I5
    52  	CMP	I5, I3
    53  	MOVD	$0, I3
    54  	MOVE	ICC, $1, I3
    55  	MEM_SYNC
    56  	MOVB	I3, swapped+16(FP)
    57  	RET
    58  
    59  TEXT ·CompareAndSwapUintptr(SB),NOSPLIT|NOFRAME,$0-25
    60  	JMP	·CompareAndSwapUint64(SB)
    61  
    62  TEXT ·CompareAndSwapInt64(SB),NOSPLIT|NOFRAME,$0-25
    63  	JMP	·CompareAndSwapUint64(SB)
    64  
    65  TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25
    66  	MOVD	addr+0(FP), I1
    67  	MOVD	old+8(FP), I3
    68  	MOVD	new+16(FP), I5
    69  	MEM_SYNC
    70  	CASD	(I1), I3, I5
    71  	CMP	I5, I3
    72  	MOVD	$0, I3
    73  	MOVE	XCC, $1, I3
    74  	MEM_SYNC
    75  	MOVB	I3, swapped+24(FP)
    76  	RET
    77  
    78  TEXT ·AddInt32(SB),NOSPLIT|NOFRAME,$0-20
    79  	JMP	·AddUint32(SB)
    80  
    81  TEXT ·AddUint32(SB),NOSPLIT,$0-20
    82  	MOVD	addr+0(FP), I4
    83  	MOVUW	delta+8(FP), I3
    84  	MOVUW	(I4), I1
    85  	MEM_SYNC
    86  retry:
    87  	ADD	I1, I3, I5
    88  	CASW	(I4), I1, I5
    89  	CMP	I1, I5
    90  	MOVNE	ICC, I5, I1
    91  	BNEW	retry
    92  	ADD	I1, I3, I5
    93  	MEM_SYNC
    94  	MOVUW	I5, new+16(FP)
    95  	RET
    96  
    97  TEXT ·AddUintptr(SB),NOSPLIT|NOFRAME,$0-24
    98  	JMP	·AddUint64(SB)
    99  
   100  TEXT ·AddInt64(SB),NOSPLIT|NOFRAME,$0-24
   101  	JMP	·AddUint64(SB)
   102  
   103  TEXT ·AddUint64(SB),NOSPLIT,$0-24
   104  	MOVD	addr+0(FP), I4
   105  	MOVD	delta+8(FP), I3
   106  	MEM_SYNC
   107  	MOVD	(I4), I1
   108  retry:
   109  	ADD	I1, I3, I5
   110  	CASD	(I4), I1, I5
   111  	CMP	I1, I5
   112  	MOVNE	XCC, I5, I1
   113  	BNED	retry
   114  	ADD	I1, I3, I5
   115  	MEM_SYNC
   116  	MOVD	I5, new+16(FP)
   117  	RET
   118  
   119  TEXT ·LoadInt32(SB),NOSPLIT|NOFRAME,$0-12
   120  	JMP	·LoadUint32(SB)
   121  
   122  TEXT ·LoadUint32(SB),NOSPLIT,$0-12
   123  	MOVD	addr+0(FP), I1
   124  	MEM_SYNC
   125  	LDUW	(I1), I1
   126  	MEM_SYNC
   127  	MOVUW	I1, val+8(FP)
   128  	RET
   129  
   130  TEXT ·LoadInt64(SB),NOSPLIT|NOFRAME,$0-16
   131  	JMP	·LoadUint64(SB)
   132  
   133  TEXT ·LoadUint64(SB),NOSPLIT,$0-16
   134  	MOVD	addr+0(FP), I1
   135  	MEM_SYNC
   136  	LDD	(I1), I1
   137  	MEM_SYNC
   138  	MOVD	I1, val+8(FP)
   139  	RET
   140  
   141  TEXT ·LoadUintptr(SB),NOSPLIT|NOFRAME,$0-16
   142  	JMP	·LoadPointer(SB)
   143  
   144  TEXT ·LoadPointer(SB),NOSPLIT|NOFRAME,$0-16
   145  	JMP	·LoadUint64(SB)
   146  
   147  TEXT ·StoreInt32(SB),NOSPLIT|NOFRAME,$0-12
   148  	JMP	·StoreUint32(SB)
   149  
   150  TEXT ·StoreUint32(SB),NOSPLIT,$0-12
   151  	MOVD	addr+0(FP), I3
   152  	MOVUW	val+8(FP), I5
   153  	MEM_SYNC
   154  	STW	I5, (I3)
   155  	MEM_SYNC
   156  	RET
   157  
   158  TEXT ·StoreInt64(SB),NOSPLIT|NOFRAME,$0-16
   159  	JMP	·StoreUint64(SB)
   160  
   161  TEXT ·StoreUint64(SB),NOSPLIT,$0-16
   162  	MOVD	addr+0(FP), I3
   163  	MOVD	val+8(FP), I5
   164  	MEM_SYNC
   165  	STD	I5, (I3)
   166  	MEM_SYNC
   167  	RET
   168  
   169  TEXT ·StoreUintptr(SB),NOSPLIT|NOFRAME,$0-16
   170  	JMP	·StoreUint64(SB)