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