]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: eliminate redundant load in Xchg and Xadd on arm64
authorXiangdong Ji <xiangdong.ji@arm.com>
Fri, 6 Mar 2020 08:44:23 +0000 (08:44 +0000)
committerKeith Randall <khr@golang.org>
Fri, 3 Apr 2020 17:08:32 +0000 (17:08 +0000)
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>

src/runtime/internal/atomic/atomic_arm64.s

index d95689fe2de8e0fbe3c6759a15baa537ab81243d..a2eb7568d26ad0a2aab44a67186b5472935dd1f3 100644 (file)
@@ -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