aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiangdong Ji <xiangdong.ji@arm.com>2020-03-06 08:44:23 +0000
committerKeith Randall <khr@golang.org>2020-04-03 17:08:32 +0000
commit3103495fa9bb166c9d0c56fbf3cd2146f32aef57 (patch)
tree36d012c85bf115b92e3d5686f1800f621a5da742
parente18a5ba0ca142c64aa03c6fb500d69cbbaab1bb6 (diff)
downloadgo-3103495fa9bb166c9d0c56fbf3cd2146f32aef57.tar.gz
go-3103495fa9bb166c9d0c56fbf3cd2146f32aef57.zip
runtime: eliminate redundant load in Xchg and Xadd on arm64
Loading arguments of Xchg(64) and Xadd(64) functions to registers could be done only once. Change-Id: Iaf0a695ec9c6a221dfa755855edb68c476978a5b Reviewed-on: https://go-review.googlesource.com/c/go/+/227001 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-rw-r--r--src/runtime/internal/atomic/atomic_arm64.s8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/runtime/internal/atomic/atomic_arm64.s b/src/runtime/internal/atomic/atomic_arm64.s
index d95689fe2d..a2eb7568d2 100644
--- a/src/runtime/internal/atomic/atomic_arm64.s
+++ b/src/runtime/internal/atomic/atomic_arm64.s
@@ -61,9 +61,9 @@ TEXT runtime∕internal∕atomic·Store64(SB), NOSPLIT, $0-16
RET
TEXT runtime∕internal∕atomic·Xchg(SB), NOSPLIT, $0-20
-again:
MOVD ptr+0(FP), R0
MOVW new+8(FP), R1
+again:
LDAXRW (R0), R2
STLXRW R1, (R0), R3
CBNZ R3, again
@@ -71,9 +71,9 @@ again:
RET
TEXT runtime∕internal∕atomic·Xchg64(SB), NOSPLIT, $0-24
-again:
MOVD ptr+0(FP), R0
MOVD new+8(FP), R1
+again:
LDAXR (R0), R2
STLXR R1, (R0), R3
CBNZ R3, again
@@ -108,9 +108,9 @@ ok:
// *val += delta;
// return *val;
TEXT runtime∕internal∕atomic·Xadd(SB), NOSPLIT, $0-20
-again:
MOVD ptr+0(FP), R0
MOVW delta+8(FP), R1
+again:
LDAXRW (R0), R2
ADDW R2, R1, R2
STLXRW R2, (R0), R3
@@ -119,9 +119,9 @@ again:
RET
TEXT runtime∕internal∕atomic·Xadd64(SB), NOSPLIT, $0-24
-again:
MOVD ptr+0(FP), R0
MOVD delta+8(FP), R1
+again:
LDAXR (R0), R2
ADD R2, R1, R2
STLXR R2, (R0), R3