Text file
src/runtime/memmove_wasm.s
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
155
View as plain text