github.com/shijuvar/go@v0.0.0-20141209052335-e8f13700b70c/src/sync/atomic/asm_ppc64x.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  // +build ppc64 ppc64le
     6  
     7  #include "textflag.h"
     8  
     9  TEXT ·SwapInt32(SB),NOSPLIT,$0-20
    10  	BR	·SwapUint32(SB)
    11  
    12  TEXT ·SwapUint32(SB),NOSPLIT,$0-20
    13  	MOVD	addr+0(FP), R3
    14  	MOVW	new+8(FP), R4
    15  	SYNC
    16  	LWAR	(R3), R5
    17  	STWCCC	R4, (R3)
    18  	BNE	-3(PC)
    19  	SYNC
    20  	ISYNC
    21  	MOVW	R5, old+16(FP)
    22  	RETURN
    23  
    24  TEXT ·SwapInt64(SB),NOSPLIT,$0-24
    25  	BR	·SwapUint64(SB)
    26  
    27  TEXT ·SwapUint64(SB),NOSPLIT,$0-24
    28  	MOVD	addr+0(FP), R3
    29  	MOVD	new+8(FP), R4
    30  	SYNC
    31  	LDAR	(R3), R5
    32  	STDCCC	R4, (R3)
    33  	BNE	-3(PC)
    34  	SYNC
    35  	ISYNC
    36  	MOVD	R5, old+16(FP)
    37  	RETURN
    38  
    39  TEXT ·SwapUintptr(SB),NOSPLIT,$0-24
    40  	BR	·SwapUint64(SB)
    41  
    42  TEXT ·SwapPointer(SB),NOSPLIT,$0-24
    43  	BR	·SwapUint64(SB)
    44  
    45  TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0-17
    46  	BR	·CompareAndSwapUint32(SB)
    47  
    48  TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-17
    49  	MOVD	addr+0(FP), R3
    50  	MOVW	old+8(FP), R4
    51  	MOVW	new+12(FP), R5
    52  	SYNC
    53  	LWAR	(R3), R6
    54  	CMPW	R6, R4
    55  	BNE	8(PC)
    56  	STWCCC	R5, (R3)
    57  	BNE	-5(PC)
    58  	SYNC
    59  	ISYNC
    60  	MOVD	$1, R3
    61  	MOVB	R3, swapped+16(FP)
    62  	RETURN
    63  	MOVB	R0, swapped+16(FP)
    64  	RETURN
    65  
    66  TEXT ·CompareAndSwapUintptr(SB),NOSPLIT,$0-25
    67  	BR	·CompareAndSwapUint64(SB)
    68  
    69  TEXT ·CompareAndSwapPointer(SB),NOSPLIT,$0-25
    70  	BR	·CompareAndSwapUint64(SB)
    71  
    72  TEXT ·CompareAndSwapInt64(SB),NOSPLIT,$0-25
    73  	BR	·CompareAndSwapUint64(SB)
    74  
    75  TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25
    76  	MOVD	addr+0(FP), R3
    77  	MOVD	old+8(FP), R4
    78  	MOVD	new+16(FP), R5
    79  	SYNC
    80  	LDAR	(R3), R6
    81  	CMP	R6, R4
    82  	BNE	8(PC)
    83  	STDCCC	R5, (R3)
    84  	BNE	-5(PC)
    85  	SYNC
    86  	ISYNC
    87  	MOVD	$1, R3
    88  	MOVB	R3, swapped+24(FP)
    89  	RETURN
    90  	MOVB	R0, swapped+24(FP)
    91  	RETURN
    92  
    93  TEXT ·AddInt32(SB),NOSPLIT,$0-20
    94  	BR	·AddUint32(SB)
    95  
    96  TEXT ·AddUint32(SB),NOSPLIT,$0-20
    97  	MOVD	addr+0(FP), R3
    98  	MOVW	delta+8(FP), R4
    99  	SYNC
   100  	LWAR	(R3), R5
   101  	ADD	R4, R5
   102  	STWCCC	R5, (R3)
   103  	BNE	-4(PC)
   104  	SYNC
   105  	ISYNC
   106  	MOVW	R5, ret+16(FP)
   107  	RETURN
   108  
   109  TEXT ·AddUintptr(SB),NOSPLIT,$0-24
   110  	BR	·AddUint64(SB)
   111  
   112  TEXT ·AddInt64(SB),NOSPLIT,$0-24
   113  	BR	·AddUint64(SB)
   114  
   115  TEXT ·AddUint64(SB),NOSPLIT,$0-24
   116  	MOVD	addr+0(FP), R3
   117  	MOVD	delta+8(FP), R4
   118  	SYNC
   119  	LDAR	(R3), R5
   120  	ADD	R4, R5
   121  	STDCCC	R5, (R3)
   122  	BNE	-4(PC)
   123  	SYNC
   124  	ISYNC
   125  	MOVD	R5, ret+16(FP)
   126  	RETURN
   127  
   128  TEXT ·LoadInt32(SB),NOSPLIT,$0-12
   129  	BR	·LoadUint32(SB)
   130  
   131  TEXT ·LoadUint32(SB),NOSPLIT,$0-12
   132  	MOVD	addr+0(FP), R3
   133  	SYNC
   134  	MOVW	0(R3), R3
   135  	CMPW	R3, R3, CR7
   136  	BC	4, 30, 1(PC)	// bne- cr7,0x4
   137  	ISYNC
   138  	MOVW	R3, val+8(FP)
   139  	RETURN
   140  
   141  TEXT ·LoadInt64(SB),NOSPLIT,$0-16
   142  	BR	·LoadUint64(SB)
   143  
   144  TEXT ·LoadUint64(SB),NOSPLIT,$0-16
   145  	MOVD	addr+0(FP), R3
   146  	SYNC
   147  	MOVD	0(R3), R3
   148  	CMP	R3, R3, CR7
   149  	BC	4, 30, 1(PC)	// bne- cr7,0x4
   150  	ISYNC
   151  	MOVD	R3, val+8(FP)
   152  	RETURN
   153  
   154  TEXT ·LoadUintptr(SB),NOSPLIT,$0-16
   155  	BR	·LoadPointer(SB)
   156  
   157  TEXT ·LoadPointer(SB),NOSPLIT,$0-16
   158  	BR	·LoadUint64(SB)
   159  
   160  TEXT ·StoreInt32(SB),NOSPLIT,$0-12
   161  	BR	·StoreUint32(SB)
   162  
   163  TEXT ·StoreUint32(SB),NOSPLIT,$0-12
   164  	MOVD	addr+0(FP), R3
   165  	MOVW	val+8(FP), R4
   166  	SYNC
   167  	MOVW	R4, 0(R3)
   168  	RETURN
   169  
   170  TEXT ·StoreInt64(SB),NOSPLIT,$0-16
   171  	BR	·StoreUint64(SB)
   172  
   173  TEXT ·StoreUint64(SB),NOSPLIT,$0-16
   174  	MOVD	addr+0(FP), R3
   175  	MOVD	val+8(FP), R4
   176  	SYNC
   177  	MOVD	R4, 0(R3)
   178  	RETURN
   179  
   180  TEXT ·StoreUintptr(SB),NOSPLIT,$0-16
   181  	BR	·StorePointer(SB)
   182  
   183  TEXT ·StorePointer(SB),NOSPLIT,$0-16
   184  	BR	·StoreUint64(SB)