// Copyright 2018 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" | |
// func memmove(to, from unsafe.Pointer, n uintptr) | |
TEXT runtime·memmove(SB), NOSPLIT, $0-24 | |
MOVD to+0(FP), R0 | |
MOVD from+8(FP), R1 | |
MOVD n+16(FP), R2 | |
Get R0 | |
Get R1 | |
I64LtU | |
If // forward | |
exit_forward_64: | |
Block | |
loop_forward_64: | |
Loop | |
Get R2 | |
I64Const $8 | |
I64LtU | |
BrIf exit_forward_64 | |
MOVD 0(R1), 0(R0) | |
Get R0 | |
I64Const $8 | |
I64Add | |
Set R0 | |
Get R1 | |
I64Const $8 | |
I64Add | |
Set R1 | |
Get R2 | |
I64Const $8 | |
I64Sub | |
Set R2 | |
Br loop_forward_64 | |
End | |
End | |
loop_forward_8: | |
Loop | |
Get R2 | |
I64Eqz | |
If | |
RET | |
End | |
Get R0 | |
I32WrapI64 | |
I64Load8U (R1) | |
I64Store8 $0 | |
Get R0 | |
I64Const $1 | |
I64Add | |
Set R0 | |
Get R1 | |
I64Const $1 | |
I64Add | |
Set R1 | |
Get R2 | |
I64Const $1 | |
I64Sub | |
Set R2 | |
Br loop_forward_8 | |
End | |
Else | |
// backward | |
Get R0 | |
Get R2 | |
I64Add | |
Set R0 | |
Get R1 | |
Get R2 | |
I64Add | |
Set R1 | |
exit_backward_64: | |
Block | |
loop_backward_64: | |
Loop | |
Get R2 | |
I64Const $8 | |
I64LtU | |
BrIf exit_backward_64 | |
Get R0 | |
I64Const $8 | |
I64Sub | |
Set R0 | |
Get R1 | |
I64Const $8 | |
I64Sub | |
Set R1 | |
Get R2 | |
I64Const $8 | |
I64Sub | |
Set R2 | |
MOVD 0(R1), 0(R0) | |
Br loop_backward_64 | |
End | |
End | |
loop_backward_8: | |
Loop | |
Get R2 | |
I64Eqz | |
If | |
RET | |
End | |
Get R0 | |
I64Const $1 | |
I64Sub | |
Set R0 | |
Get R1 | |
I64Const $1 | |
I64Sub | |
Set R1 | |
Get R2 | |
I64Const $1 | |
I64Sub | |
Set R2 | |
Get R0 | |
I32WrapI64 | |
I64Load8U (R1) | |
I64Store8 $0 | |
Br loop_backward_8 | |
End | |
End | |
UNDEF |