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