github.com/tcnksm/go@v0.0.0-20141208075154-439b32936367/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