aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Cheney <dave@cheney.net>2014-10-28 11:15:48 +1100
committerDave Cheney <dave@cheney.net>2014-10-28 11:15:48 +1100
commitcb4f5e19704fe2c6eb2505d23d3150476a5ae8aa (patch)
tree1ae88d1a942da0037004b2b04a8c1a8669e342d5
parent1b130a08d8cb1c40f6edd5a1785272d5db8d6c16 (diff)
downloadgo-cb4f5e19704fe2c6eb2505d23d3150476a5ae8aa.tar.gz
go-cb4f5e19704fe2c6eb2505d23d3150476a5ae8aa.zip
[dev.power64] runtime: fix cas64 on power64x
cas64 was jumping to the wrong offset. LGTM=minux, rsc R=rsc, austin, minux CC=golang-codereviews https://golang.org/cl/158710043
-rw-r--r--src/runtime/asm_power64x.s14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/runtime/asm_power64x.s b/src/runtime/asm_power64x.s
index 76bf42094d..b489f6accb 100644
--- a/src/runtime/asm_power64x.s
+++ b/src/runtime/asm_power64x.s
@@ -409,17 +409,19 @@ TEXT runtime·cas(SB), NOSPLIT, $0-17
MOVD p+0(FP), R3
MOVW old+8(FP), R4
MOVW new+12(FP), R5
+cas_again:
SYNC
LWAR (R3), R6
CMPW R6, R4
- BNE 8(PC)
+ BNE cas_fail
STWCCC R5, (R3)
- BNE -5(PC)
+ BNE cas_again
MOVD $1, R3
SYNC
ISYNC
MOVB R3, ret+16(FP)
RETURN
+cas_fail:
MOVD $0, R3
BR -5(PC)
@@ -435,19 +437,21 @@ TEXT runtime·cas64(SB), NOSPLIT, $0-25
MOVD p+0(FP), R3
MOVD old+8(FP), R4
MOVD new+16(FP), R5
+cas64_again:
SYNC
LDAR (R3), R6
CMP R6, R4
- BNE 7(PC)
+ BNE cas64_fail
STDCCC R5, (R3)
- BNE -5(PC)
+ BNE cas64_again
MOVD $1, R3
SYNC
ISYNC
MOVB R3, ret+24(FP)
RETURN
+cas64_fail:
MOVD $0, R3
- BR -4(PC)
+ BR -5(PC)
TEXT runtime·casuintptr(SB), NOSPLIT, $0-25
BR runtime·cas64(SB)