From 3103495fa9bb166c9d0c56fbf3cd2146f32aef57 Mon Sep 17 00:00:00 2001 From: Xiangdong Ji Date: Fri, 6 Mar 2020 08:44:23 +0000 Subject: [PATCH] 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 Run-TryBot: Keith Randall TryBot-Result: Gobot Gobot --- src/runtime/internal/atomic/atomic_arm64.s | 8 ++++---- 1 file 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 -- 2.50.0