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) 135