github.com/mattn/go@v0.0.0-20171011075504-07f7db3ea99f/src/runtime/internal/atomic/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∕internal∕atomic·Load(uint32 volatile* ptr)
    10  TEXT ·Load(SB),NOSPLIT|NOFRAME,$-8-12
    11  	MOVD	ptr+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  	RET
    19  
    20  // uint64 runtime∕internal∕atomic·Load64(uint64 volatile* ptr)
    21  TEXT ·Load64(SB),NOSPLIT|NOFRAME,$-8-16
    22  	MOVD	ptr+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  	RET
    30  
    31  // void *runtime∕internal∕atomic·Loadp(void *volatile *ptr)
    32  TEXT ·Loadp(SB),NOSPLIT|NOFRAME,$-8-16
    33  	MOVD	ptr+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  	RET