github.com/yanyiwu/go@v0.0.0-20150106053140-03d6637dbb7f/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)