github.com/mh-cbon/go@v0.0.0-20160603070303-9e112a3fe4c0/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 ·CompareAndSwapInt32(SB),NOSPLIT,$0-17
    33  	JMP	·CompareAndSwapUint32(SB)
    34  
    35  TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-17
    36  	MOVQ	addr+0(FP), BP
    37  	MOVL	old+8(FP), AX
    38  	MOVL	new+12(FP), CX
    39  	LOCK
    40  	CMPXCHGL	CX, 0(BP)
    41  	SETEQ	swapped+16(FP)
    42  	RET
    43  
    44  TEXT ·CompareAndSwapUintptr(SB),NOSPLIT,$0-25
    45  	JMP	·CompareAndSwapUint64(SB)
    46  
    47  TEXT ·CompareAndSwapInt64(SB),NOSPLIT,$0-25
    48  	JMP	·CompareAndSwapUint64(SB)
    49  
    50  TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25
    51  	MOVQ	addr+0(FP), BP
    52  	MOVQ	old+8(FP), AX
    53  	MOVQ	new+16(FP), CX
    54  	LOCK
    55  	CMPXCHGQ	CX, 0(BP)
    56  	SETEQ	swapped+24(FP)
    57  	RET
    58  
    59  TEXT ·AddInt32(SB),NOSPLIT,$0-20
    60  	JMP	·AddUint32(SB)
    61  
    62  TEXT ·AddUint32(SB),NOSPLIT,$0-20
    63  	MOVQ	addr+0(FP), BP
    64  	MOVL	delta+8(FP), AX
    65  	MOVL	AX, CX
    66  	LOCK
    67  	XADDL	AX, 0(BP)
    68  	ADDL	AX, CX
    69  	MOVL	CX, new+16(FP)
    70  	RET
    71  
    72  TEXT ·AddUintptr(SB),NOSPLIT,$0-24
    73  	JMP	·AddUint64(SB)
    74  
    75  TEXT ·AddInt64(SB),NOSPLIT,$0-24
    76  	JMP	·AddUint64(SB)
    77  
    78  TEXT ·AddUint64(SB),NOSPLIT,$0-24
    79  	MOVQ	addr+0(FP), BP
    80  	MOVQ	delta+8(FP), AX
    81  	MOVQ	AX, CX
    82  	LOCK
    83  	XADDQ	AX, 0(BP)
    84  	ADDQ	AX, CX
    85  	MOVQ	CX, new+16(FP)
    86  	RET
    87  
    88  TEXT ·LoadInt32(SB),NOSPLIT,$0-12
    89  	JMP	·LoadUint32(SB)
    90  
    91  TEXT ·LoadUint32(SB),NOSPLIT,$0-12
    92  	MOVQ	addr+0(FP), AX
    93  	MOVL	0(AX), AX
    94  	MOVL	AX, val+8(FP)
    95  	RET
    96  
    97  TEXT ·LoadInt64(SB),NOSPLIT,$0-16
    98  	JMP	·LoadUint64(SB)
    99  
   100  TEXT ·LoadUint64(SB),NOSPLIT,$0-16
   101  	MOVQ	addr+0(FP), AX
   102  	MOVQ	0(AX), AX
   103  	MOVQ	AX, val+8(FP)
   104  	RET
   105  
   106  TEXT ·LoadUintptr(SB),NOSPLIT,$0-16
   107  	JMP	·LoadPointer(SB)
   108  
   109  TEXT ·LoadPointer(SB),NOSPLIT,$0-16
   110  	MOVQ	addr+0(FP), AX
   111  	MOVQ	0(AX), AX
   112  	MOVQ	AX, val+8(FP)
   113  	RET
   114  
   115  TEXT ·StoreInt32(SB),NOSPLIT,$0-12
   116  	JMP	·StoreUint32(SB)
   117  
   118  TEXT ·StoreUint32(SB),NOSPLIT,$0-12
   119  	MOVQ	addr+0(FP), BP
   120  	MOVL	val+8(FP), AX
   121  	XCHGL	AX, 0(BP)
   122  	RET
   123  
   124  TEXT ·StoreInt64(SB),NOSPLIT,$0-16
   125  	JMP	·StoreUint64(SB)
   126  
   127  TEXT ·StoreUint64(SB),NOSPLIT,$0-16
   128  	MOVQ	addr+0(FP), BP
   129  	MOVQ	val+8(FP), AX
   130  	XCHGQ	AX, 0(BP)
   131  	RET
   132  
   133  TEXT ·StoreUintptr(SB),NOSPLIT,$0-16
   134  	JMP	·StoreUint64(SB)