mirror of
https://github.com/golang/go
synced 2024-11-20 03:04:40 -07:00
copy tweaks
* move memmove to arch-specific subdirectories * add memmove for arm * add copyright notices marking them as copied from Inferno R=ken2 https://golang.org/cl/156061
This commit is contained in:
parent
ea5cc6c021
commit
ed0beea27b
90
src/pkg/runtime/386/memmove.s
Normal file
90
src/pkg/runtime/386/memmove.s
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
// Inferno's libkern/memmove-386.s
|
||||||
|
// http://code.google.com/p/inferno-os/source/browse/libkern/memmove-386.s
|
||||||
|
//
|
||||||
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
|
// Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com). All rights reserved.
|
||||||
|
// Portions Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
TEXT memmove(SB), $0
|
||||||
|
|
||||||
|
MOVL to+0(FP), DI
|
||||||
|
MOVL fr+4(FP), SI
|
||||||
|
MOVL n+8(FP), BX
|
||||||
|
JLT fault
|
||||||
|
|
||||||
|
/*
|
||||||
|
* check and set for backwards
|
||||||
|
* should we look closer for overlap?
|
||||||
|
*/
|
||||||
|
CMPL SI, DI
|
||||||
|
JLS back
|
||||||
|
|
||||||
|
/*
|
||||||
|
* foreward copy loop
|
||||||
|
*/
|
||||||
|
MOVL BX, CX
|
||||||
|
SHRL $2, CX
|
||||||
|
ANDL $3, BX
|
||||||
|
|
||||||
|
REP; MOVSL
|
||||||
|
MOVL BX, CX
|
||||||
|
REP; MOVSB
|
||||||
|
|
||||||
|
MOVL to+0(FP),AX
|
||||||
|
RET
|
||||||
|
/*
|
||||||
|
* whole thing backwards has
|
||||||
|
* adjusted addresses
|
||||||
|
*/
|
||||||
|
back:
|
||||||
|
ADDL BX, DI
|
||||||
|
ADDL BX, SI
|
||||||
|
STD
|
||||||
|
|
||||||
|
/*
|
||||||
|
* copy
|
||||||
|
*/
|
||||||
|
MOVL BX, CX
|
||||||
|
SHRL $2, CX
|
||||||
|
ANDL $3, BX
|
||||||
|
|
||||||
|
SUBL $4, DI
|
||||||
|
SUBL $4, SI
|
||||||
|
REP; MOVSL
|
||||||
|
|
||||||
|
ADDL $3, DI
|
||||||
|
ADDL $3, SI
|
||||||
|
MOVL BX, CX
|
||||||
|
REP; MOVSB
|
||||||
|
|
||||||
|
CLD
|
||||||
|
MOVL to+0(FP),AX
|
||||||
|
RET
|
||||||
|
|
||||||
|
/*
|
||||||
|
* if called with negative count,
|
||||||
|
* treat as error rather than
|
||||||
|
* rotating all of memory
|
||||||
|
*/
|
||||||
|
fault:
|
||||||
|
MOVL $0,SI
|
||||||
|
MOVL 0(SI), AX
|
||||||
|
RET
|
@ -49,6 +49,7 @@ OFILES=\
|
|||||||
mcache.$O\
|
mcache.$O\
|
||||||
mcentral.$O\
|
mcentral.$O\
|
||||||
mem.$O\
|
mem.$O\
|
||||||
|
memmove.$O\
|
||||||
mfixalloc.$O\
|
mfixalloc.$O\
|
||||||
mgc0.$O\
|
mgc0.$O\
|
||||||
mheap.$O\
|
mheap.$O\
|
||||||
@ -68,7 +69,6 @@ OFILES=\
|
|||||||
sys.$O\
|
sys.$O\
|
||||||
thread.$O\
|
thread.$O\
|
||||||
traceback.$O\
|
traceback.$O\
|
||||||
memmove_$(GOARCH).$O\
|
|
||||||
$(OFILES_$(GOARCH))\
|
$(OFILES_$(GOARCH))\
|
||||||
|
|
||||||
HFILES=\
|
HFILES=\
|
||||||
|
90
src/pkg/runtime/amd64/memmove.s
Normal file
90
src/pkg/runtime/amd64/memmove.s
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
// Derived from Inferno's libkern/memmove-386.s (adapted for amd64)
|
||||||
|
// http://code.google.com/p/inferno-os/source/browse/libkern/memmove-386.s
|
||||||
|
//
|
||||||
|
// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
|
||||||
|
// Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com). All rights reserved.
|
||||||
|
// Portions Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
TEXT memmove(SB), $0
|
||||||
|
|
||||||
|
MOVQ to+0(FP), DI
|
||||||
|
MOVQ fr+8(FP), SI
|
||||||
|
MOVLQSX n+16(FP), BX
|
||||||
|
JLT fault
|
||||||
|
|
||||||
|
/*
|
||||||
|
* check and set for backwards
|
||||||
|
* should we look closer for overlap?
|
||||||
|
*/
|
||||||
|
CMPQ SI, DI
|
||||||
|
JLS back
|
||||||
|
|
||||||
|
/*
|
||||||
|
* foreward copy loop
|
||||||
|
*/
|
||||||
|
MOVQ BX, CX
|
||||||
|
SHRQ $3, CX
|
||||||
|
ANDQ $7, BX
|
||||||
|
|
||||||
|
REP; MOVSQ
|
||||||
|
MOVQ BX, CX
|
||||||
|
REP; MOVSB
|
||||||
|
|
||||||
|
MOVQ to+0(FP),AX
|
||||||
|
RET
|
||||||
|
/*
|
||||||
|
* whole thing backwards has
|
||||||
|
* adjusted addresses
|
||||||
|
*/
|
||||||
|
back:
|
||||||
|
ADDQ BX, DI
|
||||||
|
ADDQ BX, SI
|
||||||
|
STD
|
||||||
|
|
||||||
|
/*
|
||||||
|
* copy
|
||||||
|
*/
|
||||||
|
MOVQ BX, CX
|
||||||
|
SHRQ $3, CX
|
||||||
|
ANDQ $7, BX
|
||||||
|
|
||||||
|
SUBQ $8, DI
|
||||||
|
SUBQ $8, SI
|
||||||
|
REP; MOVSQ
|
||||||
|
|
||||||
|
ADDQ $7, DI
|
||||||
|
ADDQ $7, SI
|
||||||
|
MOVQ BX, CX
|
||||||
|
REP; MOVSB
|
||||||
|
|
||||||
|
CLD
|
||||||
|
MOVQ to+0(FP),AX
|
||||||
|
RET
|
||||||
|
|
||||||
|
/*
|
||||||
|
* if called with negative count,
|
||||||
|
* treat as error rather than
|
||||||
|
* rotating all of memory
|
||||||
|
*/
|
||||||
|
fault:
|
||||||
|
MOVQ $0,SI
|
||||||
|
MOVQ 0(SI), AX
|
||||||
|
RET
|
@ -1,65 +0,0 @@
|
|||||||
TEXT memmove(SB), $0
|
|
||||||
|
|
||||||
MOVL to+0(FP), DI
|
|
||||||
MOVL fr+4(FP), SI
|
|
||||||
MOVL n+8(FP), BX
|
|
||||||
JLT fault
|
|
||||||
|
|
||||||
/*
|
|
||||||
* check and set for backwards
|
|
||||||
* should we look closer for overlap?
|
|
||||||
*/
|
|
||||||
CMPL SI, DI
|
|
||||||
JLS back
|
|
||||||
|
|
||||||
/*
|
|
||||||
* foreward copy loop
|
|
||||||
*/
|
|
||||||
MOVL BX, CX
|
|
||||||
SHRL $2, CX
|
|
||||||
ANDL $3, BX
|
|
||||||
|
|
||||||
REP; MOVSL
|
|
||||||
MOVL BX, CX
|
|
||||||
REP; MOVSB
|
|
||||||
|
|
||||||
MOVL to+0(FP),AX
|
|
||||||
RET
|
|
||||||
/*
|
|
||||||
* whole thing backwards has
|
|
||||||
* adjusted addresses
|
|
||||||
*/
|
|
||||||
back:
|
|
||||||
ADDL BX, DI
|
|
||||||
ADDL BX, SI
|
|
||||||
STD
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy
|
|
||||||
*/
|
|
||||||
MOVL BX, CX
|
|
||||||
SHRL $2, CX
|
|
||||||
ANDL $3, BX
|
|
||||||
|
|
||||||
SUBL $4, DI
|
|
||||||
SUBL $4, SI
|
|
||||||
REP; MOVSL
|
|
||||||
|
|
||||||
ADDL $3, DI
|
|
||||||
ADDL $3, SI
|
|
||||||
MOVL BX, CX
|
|
||||||
REP; MOVSB
|
|
||||||
|
|
||||||
CLD
|
|
||||||
MOVL to+0(FP),AX
|
|
||||||
RET
|
|
||||||
|
|
||||||
/*
|
|
||||||
* if called with negative count,
|
|
||||||
* treat as error rather than
|
|
||||||
* rotating all of memory
|
|
||||||
*/
|
|
||||||
fault:
|
|
||||||
MOVL $0,SI
|
|
||||||
MOVL 0(SI), AX
|
|
||||||
RET
|
|
@ -1,65 +0,0 @@
|
|||||||
TEXT memmove(SB), $0
|
|
||||||
|
|
||||||
MOVQ to+0(FP), DI
|
|
||||||
MOVQ fr+8(FP), SI
|
|
||||||
MOVLQSX n+16(FP), BX
|
|
||||||
JLT fault
|
|
||||||
|
|
||||||
/*
|
|
||||||
* check and set for backwards
|
|
||||||
* should we look closer for overlap?
|
|
||||||
*/
|
|
||||||
CMPQ SI, DI
|
|
||||||
JLS back
|
|
||||||
|
|
||||||
/*
|
|
||||||
* foreward copy loop
|
|
||||||
*/
|
|
||||||
MOVQ BX, CX
|
|
||||||
SHRQ $3, CX
|
|
||||||
ANDQ $7, BX
|
|
||||||
|
|
||||||
REP; MOVSQ
|
|
||||||
MOVQ BX, CX
|
|
||||||
REP; MOVSB
|
|
||||||
|
|
||||||
MOVQ to+0(FP),AX
|
|
||||||
RET
|
|
||||||
/*
|
|
||||||
* whole thing backwards has
|
|
||||||
* adjusted addresses
|
|
||||||
*/
|
|
||||||
back:
|
|
||||||
ADDQ BX, DI
|
|
||||||
ADDQ BX, SI
|
|
||||||
STD
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy
|
|
||||||
*/
|
|
||||||
MOVQ BX, CX
|
|
||||||
SHRQ $3, CX
|
|
||||||
ANDQ $7, BX
|
|
||||||
|
|
||||||
SUBQ $8, DI
|
|
||||||
SUBQ $8, SI
|
|
||||||
REP; MOVSQ
|
|
||||||
|
|
||||||
ADDQ $7, DI
|
|
||||||
ADDQ $7, SI
|
|
||||||
MOVQ BX, CX
|
|
||||||
REP; MOVSB
|
|
||||||
|
|
||||||
CLD
|
|
||||||
MOVQ to+0(FP),AX
|
|
||||||
RET
|
|
||||||
|
|
||||||
/*
|
|
||||||
* if called with negative count,
|
|
||||||
* treat as error rather than
|
|
||||||
* rotating all of memory
|
|
||||||
*/
|
|
||||||
fault:
|
|
||||||
MOVQ $0,SI
|
|
||||||
MOVQ 0(SI), AX
|
|
||||||
RET
|
|
Loading…
Reference in New Issue
Block a user