github.com/reiver/go@v0.0.0-20150109200633-1d0c7792f172/src/runtime/atomic_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  // uint32 runtime·atomicload(uint32 volatile* addr)
    10  TEXT ·atomicload(SB),NOSPLIT,$-8-12
    11  	MOVD	0(FP), R3
    12  	SYNC
    13  	MOVWZ	0(R3), R3
    14  	CMPW	R3, R3, CR7
    15  	BC	4, 30, 1(PC) // bne- cr7,0x4
    16  	ISYNC
    17  	MOVW	R3, ret+8(FP)
    18  	RETURN
    19  
    20  // uint64 runtime·atomicload64(uint64 volatile* addr)
    21  TEXT ·atomicload64(SB),NOSPLIT,$-8-16
    22  	MOVD	0(FP), R3
    23  	SYNC
    24  	MOVD	0(R3), R3
    25  	CMP	R3, R3, CR7
    26  	BC	4, 30, 1(PC) // bne- cr7,0x4
    27  	ISYNC
    28  	MOVD	R3, ret+8(FP)
    29  	RETURN
    30  
    31  // void *runtime·atomicloadp(void *volatile *addr)
    32  TEXT ·atomicloadp(SB),NOSPLIT,$-8-16
    33  	MOVD	0(FP), R3
    34  	SYNC
    35  	MOVD	0(R3), R3
    36  	CMP	R3, R3, CR7
    37  	BC	4, 30, 1(PC) // bne- cr7,0x4
    38  	ISYNC
    39  	MOVD	R3, ret+8(FP)
    40  	RETURN