1
0
mirror of https://github.com/golang/go synced 2024-11-19 14:54:43 -07:00

runtime: improve memmove

check memory overlap

R=rsc, r, ken, edsrzf
CC=golang-dev
https://golang.org/cl/4602047
This commit is contained in:
Quan Yong Zhai 2011-06-09 16:49:47 -04:00 committed by Russ Cox
parent 17ca32e9db
commit 439694125f
2 changed files with 20 additions and 4 deletions

View File

@ -32,7 +32,6 @@ TEXT runtime·memmove(SB), 7, $0
/*
* check and set for backwards
* should we look closer for overlap?
*/
CMPL SI, DI
JLS back
@ -40,6 +39,7 @@ TEXT runtime·memmove(SB), 7, $0
/*
* forward copy loop
*/
forward:
MOVL BX, CX
SHRL $2, CX
ANDL $3, BX
@ -50,11 +50,19 @@ TEXT runtime·memmove(SB), 7, $0
MOVL to+0(FP),AX
RET
/*
* check overlap
*/
back:
MOVL SI, CX
ADDL BX, CX
CMPL CX, DI
JLS forward
/*
* whole thing backwards has
* adjusted addresses
*/
back:
ADDL BX, DI
ADDL BX, SI
STD

View File

@ -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