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