diff options
| author | Quan Yong Zhai <qyzhai@gmail.com> | 2011-06-09 16:49:47 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2011-06-09 16:49:47 -0400 |
| commit | 439694125f980fc0c96e99b347fa9742633f4757 (patch) | |
| tree | 4a8a603ef69afff7463e8bf44887dc87e778389e /src/pkg/runtime/amd64 | |
| parent | 17ca32e9db2f58a6ed431c4502f6ab031147673f (diff) | |
| download | go-439694125f980fc0c96e99b347fa9742633f4757.tar.xz | |
runtime: improve memmove
check memory overlap
R=rsc, r, ken, edsrzf
CC=golang-dev
https://golang.org/cl/4602047
Diffstat (limited to 'src/pkg/runtime/amd64')
| -rw-r--r-- | src/pkg/runtime/amd64/memmove.s | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/pkg/runtime/amd64/memmove.s b/src/pkg/runtime/amd64/memmove.s index 9966b0ba7a..fc9573f72e 100644 --- a/src/pkg/runtime/amd64/memmove.s +++ b/src/pkg/runtime/amd64/memmove.s @@ -33,7 +33,6 @@ TEXT runtime·memmove(SB), 7, $0 /* * check and set for backwards - * should we look closer for overlap? */ CMPQ SI, DI JLS back @@ -41,6 +40,7 @@ TEXT runtime·memmove(SB), 7, $0 /* * forward copy loop */ +forward: MOVQ BX, CX SHRQ $3, CX ANDQ $7, BX @@ -51,11 +51,19 @@ TEXT runtime·memmove(SB), 7, $0 MOVQ to+0(FP),AX RET +back: +/* + * check overlap + */ + MOVQ SI, CX + ADDQ BX, CX + CMPQ CX, DI + JLS forward + /* * whole thing backwards has * adjusted addresses */ -back: ADDQ BX, DI ADDQ BX, SI STD |
