github.com/4ad/go@v0.0.0-20161219182952-69a12818b605/src/sync/atomic/asm_sparc64.s (about) 1 // Copyright 2016 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 #include "asm_sparc64.h" 7 8 TEXT ·SwapInt32(SB),NOSPLIT|NOFRAME,$0-20 9 JMP ·SwapUint32(SB) 10 11 TEXT ·SwapUint32(SB),NOSPLIT,$0-20 12 MOVD addr+0(FP), I3 13 MOVUW new+8(FP), I1 14 again: 15 MEM_SYNC 16 MOVUW (I3), I5 17 CASW (I3), I5, I1 18 CMP I1, I5 19 BNEW again 20 MEM_SYNC 21 MOVUW I5, old+16(FP) 22 RET 23 24 TEXT ·SwapInt64(SB),NOSPLIT|NOFRAME,$0-24 25 JMP ·SwapUint64(SB) 26 27 TEXT ·SwapUint64(SB),NOSPLIT,$0-24 28 MOVD addr+0(FP), I3 29 MOVD new+8(FP), I1 30 again: 31 MEM_SYNC 32 MOVD (I3), I5 33 CASD (I3), I5, I1 34 CMP I1, I5 35 BNED again 36 MEM_SYNC 37 MOVD I5, old+16(FP) 38 RET 39 40 TEXT ·SwapUintptr(SB),NOSPLIT|NOFRAME,$0-24 41 JMP ·SwapUint64(SB) 42 43 TEXT ·CompareAndSwapInt32(SB),NOSPLIT|NOFRAME,$0-17 44 JMP ·CompareAndSwapUint32(SB) 45 46 TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-17 47 MOVD addr+0(FP), I1 48 MOVUW old+8(FP), I3 49 MOVUW new+12(FP), I5 50 MEM_SYNC 51 CASW (I1), I3, I5 52 CMP I5, I3 53 MOVD $0, I3 54 MOVE ICC, $1, I3 55 MEM_SYNC 56 MOVB I3, swapped+16(FP) 57 RET 58 59 TEXT ·CompareAndSwapUintptr(SB),NOSPLIT|NOFRAME,$0-25 60 JMP ·CompareAndSwapUint64(SB) 61 62 TEXT ·CompareAndSwapInt64(SB),NOSPLIT|NOFRAME,$0-25 63 JMP ·CompareAndSwapUint64(SB) 64 65 TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25 66 MOVD addr+0(FP), I1 67 MOVD old+8(FP), I3 68 MOVD new+16(FP), I5 69 MEM_SYNC 70 CASD (I1), I3, I5 71 CMP I5, I3 72 MOVD $0, I3 73 MOVE XCC, $1, I3 74 MEM_SYNC 75 MOVB I3, swapped+24(FP) 76 RET 77 78 TEXT ·AddInt32(SB),NOSPLIT|NOFRAME,$0-20 79 JMP ·AddUint32(SB) 80 81 TEXT ·AddUint32(SB),NOSPLIT,$0-20 82 MOVD addr+0(FP), I4 83 MOVUW delta+8(FP), I3 84 MOVUW (I4), I1 85 MEM_SYNC 86 retry: 87 ADD I1, I3, I5 88 CASW (I4), I1, I5 89 CMP I1, I5 90 MOVNE ICC, I5, I1 91 BNEW retry 92 ADD I1, I3, I5 93 MEM_SYNC 94 MOVUW I5, new+16(FP) 95 RET 96 97 TEXT ·AddUintptr(SB),NOSPLIT|NOFRAME,$0-24 98 JMP ·AddUint64(SB) 99 100 TEXT ·AddInt64(SB),NOSPLIT|NOFRAME,$0-24 101 JMP ·AddUint64(SB) 102 103 TEXT ·AddUint64(SB),NOSPLIT,$0-24 104 MOVD addr+0(FP), I4 105 MOVD delta+8(FP), I3 106 MEM_SYNC 107 MOVD (I4), I1 108 retry: 109 ADD I1, I3, I5 110 CASD (I4), I1, I5 111 CMP I1, I5 112 MOVNE XCC, I5, I1 113 BNED retry 114 ADD I1, I3, I5 115 MEM_SYNC 116 MOVD I5, new+16(FP) 117 RET 118 119 TEXT ·LoadInt32(SB),NOSPLIT|NOFRAME,$0-12 120 JMP ·LoadUint32(SB) 121 122 TEXT ·LoadUint32(SB),NOSPLIT,$0-12 123 MOVD addr+0(FP), I1 124 MEM_SYNC 125 LDUW (I1), I1 126 MEM_SYNC 127 MOVUW I1, val+8(FP) 128 RET 129 130 TEXT ·LoadInt64(SB),NOSPLIT|NOFRAME,$0-16 131 JMP ·LoadUint64(SB) 132 133 TEXT ·LoadUint64(SB),NOSPLIT,$0-16 134 MOVD addr+0(FP), I1 135 MEM_SYNC 136 LDD (I1), I1 137 MEM_SYNC 138 MOVD I1, val+8(FP) 139 RET 140 141 TEXT ·LoadUintptr(SB),NOSPLIT|NOFRAME,$0-16 142 JMP ·LoadPointer(SB) 143 144 TEXT ·LoadPointer(SB),NOSPLIT|NOFRAME,$0-16 145 JMP ·LoadUint64(SB) 146 147 TEXT ·StoreInt32(SB),NOSPLIT|NOFRAME,$0-12 148 JMP ·StoreUint32(SB) 149 150 TEXT ·StoreUint32(SB),NOSPLIT,$0-12 151 MOVD addr+0(FP), I3 152 MOVUW val+8(FP), I5 153 MEM_SYNC 154 STW I5, (I3) 155 MEM_SYNC 156 RET 157 158 TEXT ·StoreInt64(SB),NOSPLIT|NOFRAME,$0-16 159 JMP ·StoreUint64(SB) 160 161 TEXT ·StoreUint64(SB),NOSPLIT,$0-16 162 MOVD addr+0(FP), I3 163 MOVD val+8(FP), I5 164 MEM_SYNC 165 STD I5, (I3) 166 MEM_SYNC 167 RET 168 169 TEXT ·StoreUintptr(SB),NOSPLIT|NOFRAME,$0-16 170 JMP ·StoreUint64(SB)