github.com/hbdrawn/golang@v0.0.0-20141214014649-6b835209aba2/src/sync/atomic/asm_ppc64x.s (about) 1 // Copyright 2014 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 ppc64 ppc64le 6 7 #include "textflag.h" 8 9 TEXT ·SwapInt32(SB),NOSPLIT,$0-20 10 BR ·SwapUint32(SB) 11 12 TEXT ·SwapUint32(SB),NOSPLIT,$0-20 13 MOVD addr+0(FP), R3 14 MOVW new+8(FP), R4 15 SYNC 16 LWAR (R3), R5 17 STWCCC R4, (R3) 18 BNE -3(PC) 19 SYNC 20 ISYNC 21 MOVW R5, old+16(FP) 22 RETURN 23 24 TEXT ·SwapInt64(SB),NOSPLIT,$0-24 25 BR ·SwapUint64(SB) 26 27 TEXT ·SwapUint64(SB),NOSPLIT,$0-24 28 MOVD addr+0(FP), R3 29 MOVD new+8(FP), R4 30 SYNC 31 LDAR (R3), R5 32 STDCCC R4, (R3) 33 BNE -3(PC) 34 SYNC 35 ISYNC 36 MOVD R5, old+16(FP) 37 RETURN 38 39 TEXT ·SwapUintptr(SB),NOSPLIT,$0-24 40 BR ·SwapUint64(SB) 41 42 TEXT ·SwapPointer(SB),NOSPLIT,$0-24 43 BR ·SwapUint64(SB) 44 45 TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0-17 46 BR ·CompareAndSwapUint32(SB) 47 48 TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-17 49 MOVD addr+0(FP), R3 50 MOVW old+8(FP), R4 51 MOVW new+12(FP), R5 52 SYNC 53 LWAR (R3), R6 54 CMPW R6, R4 55 BNE 8(PC) 56 STWCCC R5, (R3) 57 BNE -5(PC) 58 SYNC 59 ISYNC 60 MOVD $1, R3 61 MOVB R3, swapped+16(FP) 62 RETURN 63 MOVB R0, swapped+16(FP) 64 RETURN 65 66 TEXT ·CompareAndSwapUintptr(SB),NOSPLIT,$0-25 67 BR ·CompareAndSwapUint64(SB) 68 69 TEXT ·CompareAndSwapPointer(SB),NOSPLIT,$0-25 70 BR ·CompareAndSwapUint64(SB) 71 72 TEXT ·CompareAndSwapInt64(SB),NOSPLIT,$0-25 73 BR ·CompareAndSwapUint64(SB) 74 75 TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25 76 MOVD addr+0(FP), R3 77 MOVD old+8(FP), R4 78 MOVD new+16(FP), R5 79 SYNC 80 LDAR (R3), R6 81 CMP R6, R4 82 BNE 8(PC) 83 STDCCC R5, (R3) 84 BNE -5(PC) 85 SYNC 86 ISYNC 87 MOVD $1, R3 88 MOVB R3, swapped+24(FP) 89 RETURN 90 MOVB R0, swapped+24(FP) 91 RETURN 92 93 TEXT ·AddInt32(SB),NOSPLIT,$0-20 94 BR ·AddUint32(SB) 95 96 TEXT ·AddUint32(SB),NOSPLIT,$0-20 97 MOVD addr+0(FP), R3 98 MOVW delta+8(FP), R4 99 SYNC 100 LWAR (R3), R5 101 ADD R4, R5 102 STWCCC R5, (R3) 103 BNE -4(PC) 104 SYNC 105 ISYNC 106 MOVW R5, ret+16(FP) 107 RETURN 108 109 TEXT ·AddUintptr(SB),NOSPLIT,$0-24 110 BR ·AddUint64(SB) 111 112 TEXT ·AddInt64(SB),NOSPLIT,$0-24 113 BR ·AddUint64(SB) 114 115 TEXT ·AddUint64(SB),NOSPLIT,$0-24 116 MOVD addr+0(FP), R3 117 MOVD delta+8(FP), R4 118 SYNC 119 LDAR (R3), R5 120 ADD R4, R5 121 STDCCC R5, (R3) 122 BNE -4(PC) 123 SYNC 124 ISYNC 125 MOVD R5, ret+16(FP) 126 RETURN 127 128 TEXT ·LoadInt32(SB),NOSPLIT,$0-12 129 BR ·LoadUint32(SB) 130 131 TEXT ·LoadUint32(SB),NOSPLIT,$0-12 132 MOVD addr+0(FP), R3 133 SYNC 134 MOVW 0(R3), R3 135 CMPW R3, R3, CR7 136 BC 4, 30, 1(PC) // bne- cr7,0x4 137 ISYNC 138 MOVW R3, val+8(FP) 139 RETURN 140 141 TEXT ·LoadInt64(SB),NOSPLIT,$0-16 142 BR ·LoadUint64(SB) 143 144 TEXT ·LoadUint64(SB),NOSPLIT,$0-16 145 MOVD addr+0(FP), R3 146 SYNC 147 MOVD 0(R3), R3 148 CMP R3, R3, CR7 149 BC 4, 30, 1(PC) // bne- cr7,0x4 150 ISYNC 151 MOVD R3, val+8(FP) 152 RETURN 153 154 TEXT ·LoadUintptr(SB),NOSPLIT,$0-16 155 BR ·LoadPointer(SB) 156 157 TEXT ·LoadPointer(SB),NOSPLIT,$0-16 158 BR ·LoadUint64(SB) 159 160 TEXT ·StoreInt32(SB),NOSPLIT,$0-12 161 BR ·StoreUint32(SB) 162 163 TEXT ·StoreUint32(SB),NOSPLIT,$0-12 164 MOVD addr+0(FP), R3 165 MOVW val+8(FP), R4 166 SYNC 167 MOVW R4, 0(R3) 168 RETURN 169 170 TEXT ·StoreInt64(SB),NOSPLIT,$0-16 171 BR ·StoreUint64(SB) 172 173 TEXT ·StoreUint64(SB),NOSPLIT,$0-16 174 MOVD addr+0(FP), R3 175 MOVD val+8(FP), R4 176 SYNC 177 MOVD R4, 0(R3) 178 RETURN 179 180 TEXT ·StoreUintptr(SB),NOSPLIT,$0-16 181 BR ·StorePointer(SB) 182 183 TEXT ·StorePointer(SB),NOSPLIT,$0-16 184 BR ·StoreUint64(SB)