diff options
author | Keith Randall <khr@golang.org> | 2016-02-22 13:20:38 -0800 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2016-02-23 00:15:38 +0000 |
commit | bd70bd9cb2f458b23222083a3a11190f080af7fd (patch) | |
tree | 77c35258aea9e50c677841ef02af3b6a63871c10 /src/runtime/asm_arm64.s | |
parent | 1e00cc1647916b705682f8721b8a9e9e095bf4ee (diff) | |
download | go-bd70bd9cb2f458b23222083a3a11190f080af7fd.tar.gz go-bd70bd9cb2f458b23222083a3a11190f080af7fd.zip |
runtime: unify memeq and memequal
They do the same thing, except memequal also has the short-circuit
check if the two pointers are equal.
A) We might as well always do the short-circuit check, it is only 2 instructions.
B) The extra function call (memequal->memeq) is expensive.
benchmark old ns/op new ns/op delta
BenchmarkArrayEqual-8 8.56 5.31 -37.97%
No noticeable affect on the former memeq user (maps).
Fixes #14302
Change-Id: I85d1ada59ed11e64dd6c54667f79d32cc5f81948
Reviewed-on: https://go-review.googlesource.com/19843
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/runtime/asm_arm64.s')
-rw-r--r-- | src/runtime/asm_arm64.s | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/runtime/asm_arm64.s b/src/runtime/asm_arm64.s index ab5d5b5e5f..5a5c64c270 100644 --- a/src/runtime/asm_arm64.s +++ b/src/runtime/asm_arm64.s @@ -765,13 +765,16 @@ TEXT runtime·memhash_varlen(SB),NOSPLIT,$40-24 MOVD R3, ret+16(FP) RET -TEXT runtime·memeq(SB),NOSPLIT,$-8-25 +// memequal(p, q unsafe.Pointer, size uintptr) bool +TEXT runtime·memequal(SB),NOSPLIT,$-8-25 MOVD a+0(FP), R1 MOVD b+8(FP), R2 MOVD size+16(FP), R3 ADD R1, R3, R6 MOVD $1, R0 MOVB R0, ret+24(FP) + CMP R1, R2 + BEQ done loop: CMP R1, R6 BEQ done @@ -794,7 +797,7 @@ TEXT runtime·memequal_varlen(SB),NOSPLIT,$40-17 MOVD R3, 8(RSP) MOVD R4, 16(RSP) MOVD R5, 24(RSP) - BL runtime·memeq(SB) + BL runtime·memequal(SB) MOVBU 32(RSP), R3 MOVB R3, ret+16(FP) RET @@ -929,7 +932,7 @@ notfound: MOVD R0, ret+24(FP) RET -// TODO: share code with memeq? +// TODO: share code with memequal? TEXT bytes·Equal(SB),NOSPLIT,$0-49 MOVD a_len+8(FP), R1 MOVD b_len+32(FP), R3 |