mirror of
https://github.com/golang/go
synced 2024-11-19 15:24:46 -07:00
6675fadfb8
Move memclr to a separate file to make it consistent with other platforms asm function to file organization. Remove nacl from the memmove filename as the implementation is generic for the amd64p32 platform even if currently only nacl is supported for amd64p32. Change-Id: I8930b76da430a5cf2664801974e4f5185fc0f82f Reviewed-on: https://go-review.googlesource.com/61031 Run-TryBot: Martin Möhrmann <moehrmann@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
53 lines
932 B
ArmAsm
53 lines
932 B
ArmAsm
// Copyright 2013 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
#include "textflag.h"
|
|
|
|
// This could use MOVSQ, but we use MOVSL so that if an object ends in
|
|
// a 4 byte pointer, we copy it as a unit instead of byte by byte.
|
|
|
|
TEXT runtime·memmove(SB), NOSPLIT, $0-12
|
|
MOVL to+0(FP), DI
|
|
MOVL from+4(FP), SI
|
|
MOVL n+8(FP), BX
|
|
|
|
CMPL SI, DI
|
|
JLS back
|
|
|
|
forward:
|
|
MOVL BX, CX
|
|
SHRL $2, CX
|
|
ANDL $3, BX
|
|
REP; MOVSL
|
|
MOVL BX, CX
|
|
REP; MOVSB
|
|
RET
|
|
|
|
back:
|
|
MOVL SI, CX
|
|
ADDL BX, CX
|
|
CMPL CX, DI
|
|
JLS forward
|
|
|
|
ADDL BX, DI
|
|
ADDL BX, SI
|
|
STD
|
|
|
|
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
|
|
|
|
// Note: we copy only 4 bytes at a time so that the tail is at most
|
|
// 3 bytes. That guarantees that we aren't copying pointers with MOVSB.
|
|
// See issue 13160.
|
|
RET
|