github.com/hongwozai/go-src-1.4.3@v0.0.0-20191127132709-dc3fce3dbccb/src/sync/atomic/asm_amd64.s (about)

     1  // Copyright 2011 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 !race
     6  
     7  #include "textflag.h"
     8  
     9  TEXT ·SwapInt32(SB),NOSPLIT,$0-20
    10  	JMP	·SwapUint32(SB)
    11  
    12  TEXT ·SwapUint32(SB),NOSPLIT,$0-20
    13  	MOVQ	addr+0(FP), BP
    14  	MOVL	new+8(FP), AX
    15  	XCHGL	AX, 0(BP)
    16  	MOVL	AX, old+16(FP)
    17  	RET
    18  
    19  TEXT ·SwapInt64(SB),NOSPLIT,$0-24
    20  	JMP	·SwapUint64(SB)
    21  
    22  TEXT ·SwapUint64(SB),NOSPLIT,$0-24
    23  	MOVQ	addr+0(FP), BP
    24  	MOVQ	new+8(FP), AX
    25  	XCHGQ	AX, 0(BP)
    26  	MOVQ	AX, old+16(FP)
    27  	RET
    28  
    29  TEXT ·SwapUintptr(SB),NOSPLIT,$0-24
    30  	JMP	·SwapUint64(SB)
    31  
    32  TEXT ·SwapPointer(SB),NOSPLIT,$0-24
    33  	JMP	·SwapUint64(SB)
    34  
    35  TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0-17
    36  	JMP	·CompareAndSwapUint32(SB)
    37  
    38  TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-17
    39  	MOVQ	addr+0(FP), BP
    40  	MOVL	old+8(FP), AX
    41  	MOVL	new+12(FP), CX
    42  	LOCK
    43  	CMPXCHGL	CX, 0(BP)
    44  	SETEQ	swapped+16(FP)
    45  	RET
    46  
    47  TEXT ·CompareAndSwapUintptr(SB),NOSPLIT,$0-25
    48  	JMP	·CompareAndSwapUint64(SB)
    49  
    50  TEXT ·CompareAndSwapPointer(SB),NOSPLIT,$0-25
    51  	JMP	·CompareAndSwapUint64(SB)
    52  
    53  TEXT ·CompareAndSwapInt64(SB),NOSPLIT,$0-25
    54  	JMP	·CompareAndSwapUint64(SB)
    55  
    56  TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25
    57  	MOVQ	addr+0(FP), BP
    58  	MOVQ	old+8(FP), AX
    59  	MOVQ	new+16(FP), CX
    60  	LOCK
    61  	CMPXCHGQ	CX, 0(BP)
    62  	SETEQ	swapped+24(FP)
    63  	RET
    64  
    65  TEXT ·AddInt32(SB),NOSPLIT,$0-20
    66  	JMP	·AddUint32(SB)
    67  
    68  TEXT ·AddUint32(SB),NOSPLIT,$0-20
    69  	MOVQ	addr+0(FP), BP
    70  	MOVL	delta+8(FP), AX
    71  	MOVL	AX, CX
    72  	LOCK
    73  	XADDL	AX, 0(BP)
    74  	ADDL	AX, CX
    75  	MOVL	CX, new+16(FP)
    76  	RET
    77  
    78  TEXT ·AddUintptr(SB),NOSPLIT,$0-24
    79  	JMP	·AddUint64(SB)
    80  
    81  TEXT ·AddInt64(SB),NOSPLIT,$0-24
    82  	JMP	·AddUint64(SB)
    83  
    84  TEXT ·AddUint64(SB),NOSPLIT,$0-24
    85  	MOVQ	addr+0(FP), BP
    86  	MOVQ	delta+8(FP), AX
    87  	MOVQ	AX, CX
    88  	LOCK
    89  	XADDQ	AX, 0(BP)
    90  	ADDQ	AX, CX
    91  	MOVQ	CX, new+16(FP)
    92  	RET
    93  
    94  TEXT ·LoadInt32(SB),NOSPLIT,$0-12
    95  	JMP	·LoadUint32(SB)
    96  
    97  TEXT ·LoadUint32(SB),NOSPLIT,$0-12
    98  	MOVQ	addr+0(FP), AX
    99  	MOVL	0(AX), AX
   100  	MOVL	AX, val+8(FP)
   101  	RET
   102  
   103  TEXT ·LoadInt64(SB),NOSPLIT,$0-16
   104  	JMP	·LoadUint64(SB)
   105  
   106  TEXT ·LoadUint64(SB),NOSPLIT,$0-16
   107  	MOVQ	addr+0(FP), AX
   108  	MOVQ	0(AX), AX
   109  	MOVQ	AX, val+8(FP)
   110  	RET
   111  
   112  TEXT ·LoadUintptr(SB),NOSPLIT,$0-16
   113  	JMP	·LoadPointer(SB)
   114  
   115  TEXT ·LoadPointer(SB),NOSPLIT,$0-16
   116  	MOVQ	addr+0(FP), AX
   117  	MOVQ	0(AX), AX
   118  	MOVQ	AX, val+8(FP)
   119  	RET
   120  
   121  TEXT ·StoreInt32(SB),NOSPLIT,$0-12
   122  	JMP	·StoreUint32(SB)
   123  
   124  TEXT ·StoreUint32(SB),NOSPLIT,$0-12
   125  	MOVQ	addr+0(FP), BP
   126  	MOVL	val+8(FP), AX
   127  	XCHGL	AX, 0(BP)
   128  	RET
   129  
   130  TEXT ·StoreInt64(SB),NOSPLIT,$0-16
   131  	JMP	·StoreUint64(SB)
   132  
   133  TEXT ·StoreUint64(SB),NOSPLIT,$0-16
   134  	MOVQ	addr+0(FP), BP
   135  	MOVQ	val+8(FP), AX
   136  	XCHGQ	AX, 0(BP)
   137  	RET
   138  
   139  TEXT ·StoreUintptr(SB),NOSPLIT,$0-16
   140  	JMP	·StorePointer(SB)
   141  
   142  TEXT ·StorePointer(SB),NOSPLIT,$0-16
   143  	MOVQ	addr+0(FP), BP
   144  	MOVQ	val+8(FP), AX
   145  	XCHGQ	AX, 0(BP)
   146  	RET