github.com/geraldss/go/src@v0.0.0-20210511222824-ac7d0ebfc235/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 // See memmove Go doc for important implementation constraints. 8 9 // func memmove(to, from unsafe.Pointer, n uintptr) 10 TEXT runtime·memmove(SB), NOSPLIT, $0-24 11 MOVD to+0(FP), R0 12 MOVD from+8(FP), R1 13 MOVD n+16(FP), R2 14 15 Get R0 16 Get R1 17 I64LtU 18 If // forward 19 exit_forward_64: 20 Block 21 loop_forward_64: 22 Loop 23 Get R2 24 I64Const $8 25 I64LtU 26 BrIf exit_forward_64 27 28 MOVD 0(R1), 0(R0) 29 30 Get R0 31 I64Const $8 32 I64Add 33 Set R0 34 35 Get R1 36 I64Const $8 37 I64Add 38 Set R1 39 40 Get R2 41 I64Const $8 42 I64Sub 43 Set R2 44 45 Br loop_forward_64 46 End 47 End 48 49 loop_forward_8: 50 Loop 51 Get R2 52 I64Eqz 53 If 54 RET 55 End 56 57 Get R0 58 I32WrapI64 59 I64Load8U (R1) 60 I64Store8 $0 61 62 Get R0 63 I64Const $1 64 I64Add 65 Set R0 66 67 Get R1 68 I64Const $1 69 I64Add 70 Set R1 71 72 Get R2 73 I64Const $1 74 I64Sub 75 Set R2 76 77 Br loop_forward_8 78 End 79 80 Else 81 // backward 82 Get R0 83 Get R2 84 I64Add 85 Set R0 86 87 Get R1 88 Get R2 89 I64Add 90 Set R1 91 92 exit_backward_64: 93 Block 94 loop_backward_64: 95 Loop 96 Get R2 97 I64Const $8 98 I64LtU 99 BrIf exit_backward_64 100 101 Get R0 102 I64Const $8 103 I64Sub 104 Set R0 105 106 Get R1 107 I64Const $8 108 I64Sub 109 Set R1 110 111 Get R2 112 I64Const $8 113 I64Sub 114 Set R2 115 116 MOVD 0(R1), 0(R0) 117 118 Br loop_backward_64 119 End 120 End 121 122 loop_backward_8: 123 Loop 124 Get R2 125 I64Eqz 126 If 127 RET 128 End 129 130 Get R0 131 I64Const $1 132 I64Sub 133 Set R0 134 135 Get R1 136 I64Const $1 137 I64Sub 138 Set R1 139 140 Get R2 141 I64Const $1 142 I64Sub 143 Set R2 144 145 Get R0 146 I32WrapI64 147 I64Load8U (R1) 148 I64Store8 $0 149 150 Br loop_backward_8 151 End 152 End 153 154 UNDEF