github.com/megatontech/mynoteforgo@v0.0.0-20200507084910-5d0c6ea6e890/源码/runtime/memmove_wasm.s (about) 1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "textflag.h" 6 7 // func memmove(to, from unsafe.Pointer, n uintptr) 8 TEXT runtime·memmove(SB), NOSPLIT, $0-24 9 MOVD to+0(FP), R0 10 MOVD from+8(FP), R1 11 MOVD n+16(FP), R2 12 13 Get R0 14 Get R1 15 I64LtU 16 If // forward 17 exit_forward_64: 18 Block 19 loop_forward_64: 20 Loop 21 Get R2 22 I64Const $8 23 I64LtU 24 BrIf exit_forward_64 25 26 MOVD 0(R1), 0(R0) 27 28 Get R0 29 I64Const $8 30 I64Add 31 Set R0 32 33 Get R1 34 I64Const $8 35 I64Add 36 Set R1 37 38 Get R2 39 I64Const $8 40 I64Sub 41 Set R2 42 43 Br loop_forward_64 44 End 45 End 46 47 loop_forward_8: 48 Loop 49 Get R2 50 I64Eqz 51 If 52 RET 53 End 54 55 Get R0 56 I32WrapI64 57 I64Load8U (R1) 58 I64Store8 $0 59 60 Get R0 61 I64Const $1 62 I64Add 63 Set R0 64 65 Get R1 66 I64Const $1 67 I64Add 68 Set R1 69 70 Get R2 71 I64Const $1 72 I64Sub 73 Set R2 74 75 Br loop_forward_8 76 End 77 78 Else 79 // backward 80 Get R0 81 Get R2 82 I64Add 83 Set R0 84 85 Get R1 86 Get R2 87 I64Add 88 Set R1 89 90 exit_backward_64: 91 Block 92 loop_backward_64: 93 Loop 94 Get R2 95 I64Const $8 96 I64LtU 97 BrIf exit_backward_64 98 99 Get R0 100 I64Const $8 101 I64Sub 102 Set R0 103 104 Get R1 105 I64Const $8 106 I64Sub 107 Set R1 108 109 Get R2 110 I64Const $8 111 I64Sub 112 Set R2 113 114 MOVD 0(R1), 0(R0) 115 116 Br loop_backward_64 117 End 118 End 119 120 loop_backward_8: 121 Loop 122 Get R2 123 I64Eqz 124 If 125 RET 126 End 127 128 Get R0 129 I64Const $1 130 I64Sub 131 Set R0 132 133 Get R1 134 I64Const $1 135 I64Sub 136 Set R1 137 138 Get R2 139 I64Const $1 140 I64Sub 141 Set R2 142 143 Get R0 144 I32WrapI64 145 I64Load8U (R1) 146 I64Store8 $0 147 148 Br loop_backward_8 149 End 150 End 151 152 UNDEF