diff options
author | Xiangdong Ji <xiangdong.ji@arm.com> | 2020-03-06 08:44:23 +0000 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2020-04-03 17:08:32 +0000 |
commit | 3103495fa9bb166c9d0c56fbf3cd2146f32aef57 (patch) | |
tree | 36d012c85bf115b92e3d5686f1800f621a5da742 | |
parent | e18a5ba0ca142c64aa03c6fb500d69cbbaab1bb6 (diff) | |
download | go-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.s | 8 |
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 |