1
2
3
4
5
6
7
8
9
10
11
12#include <variant/core.h>
13
14 .macro src_b r, w0, w1
15#ifdef __XTENSA_EB__
16 src \r, \w0, \w1
17#else
18 src \r, \w1, \w0
19#endif
20 .endm
21
22 .macro ssa8 r
23#ifdef __XTENSA_EB__
24 ssa8b \r
25#else
26 ssa8l \r
27#endif
28 .endm
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 .text
79 .align 4
80 .global bcopy
81 .type bcopy,@function
82bcopy:
83 entry sp, 16
84
85 mov a5, a3
86 mov a3, a2
87 mov a2, a5
88 j .Lcommon
89
90
91
92
93
94 .align 4
95 .byte 0
96
97.Lbytecopy:
98
99 loopnez a4, .Lbytecopydone
100#else
101 beqz a4, .Lbytecopydone
102 add a7, a3, a4
103#endif
104.Lnextbyte:
105 l8ui a6, a3, 0
106 addi a3, a3, 1
107 s8i a6, a5, 0
108 addi a5, a5, 1
109
110 blt a3, a7, .Lnextbyte
111#endif
112.Lbytecopydone:
113 retw
114
115
116
117
118
119 .align 4
120.Ldst1mod2:
121 _bltui a4, 7, .Lbytecopy
122
123
124 l8ui a6, a3, 0
125 addi a3, a3, 1
126 addi a4, a4, -1
127 s8i a6, a5, 0
128 addi a5, a5, 1
129 _bbci.l a5, 1, .Ldstaligned
130
131.Ldst2mod4:
132
133 _bltui a4, 6, .Lbytecopy
134 l8ui a6, a3, 0
135 l8ui a7, a3, 1
136 addi a3, a3, 2
137 addi a4, a4, -2
138 s8i a6, a5, 0
139 s8i a7, a5, 1
140 addi a5, a5, 2
141 j .Ldstaligned
142
143 .align 4
144 .global memcpy
145 .type memcpy,@function
146memcpy:
147 .global memmove
148 .type memmove,@function
149memmove:
150
151 entry sp, 16
152
153 mov a5, a2
154.Lcommon:
155 _bbsi.l a2, 0, .Ldst1mod2
156 _bbsi.l a2, 1, .Ldst2mod4
157.Ldstaligned:
158 srli a7, a4, 4
159
160 movi a8, 3
161 _bany a3, a8, .Lsrcunaligned
162
163
164
165
166
167 loopnez a7, .Loop1done
168#else
169 beqz a7, .Loop1done
170 slli a8, a7, 4
171 add a8, a8, a3
172#endif
173.Loop1:
174 l32i a6, a3, 0
175 l32i a7, a3, 4
176 s32i a6, a5, 0
177 l32i a6, a3, 8
178 s32i a7, a5, 4
179 l32i a7, a3, 12
180 s32i a6, a5, 8
181 addi a3, a3, 16
182 s32i a7, a5, 12
183 addi a5, a5, 16
184
185 blt a3, a8, .Loop1
186#endif
187.Loop1done:
188 bbci.l a4, 3, .L2
189
190 l32i a6, a3, 0
191 l32i a7, a3, 4
192 addi a3, a3, 8
193 s32i a6, a5, 0
194 s32i a7, a5, 4
195 addi a5, a5, 8
196.L2:
197 bbsi.l a4, 2, .L3
198 bbsi.l a4, 1, .L4
199 bbsi.l a4, 0, .L5
200 retw
201.L3:
202
203 l32i a6, a3, 0
204 addi a3, a3, 4
205 s32i a6, a5, 0
206 addi a5, a5, 4
207 bbsi.l a4, 1, .L4
208 bbsi.l a4, 0, .L5
209 retw
210.L4:
211
212 l16ui a6, a3, 0
213 addi a3, a3, 2
214 s16i a6, a5, 0
215 addi a5, a5, 2
216 bbsi.l a4, 0, .L5
217 retw
218.L5:
219
220 l8ui a6, a3, 0
221 s8i a6, a5, 0
222 retw
223
224
225
226
227
228 .align 4
229.Lsrcunaligned:
230 _beqz a4, .Ldone
231
232 ssa8 a3
233#define SIM_CHECKS_ALIGNMENT 1
234
235
236 and a11, a3, a8
237 sub a3, a3, a11
238#endif
239 l32i a6, a3, 0
240
241 loopnez a7, .Loop2done
242#else
243 beqz a7, .Loop2done
244 slli a10, a7, 4
245 add a10, a10, a3
246#endif
247.Loop2:
248 l32i a7, a3, 4
249 l32i a8, a3, 8
250 src_b a6, a6, a7
251 s32i a6, a5, 0
252 l32i a9, a3, 12
253 src_b a7, a7, a8
254 s32i a7, a5, 4
255 l32i a6, a3, 16
256 src_b a8, a8, a9
257 s32i a8, a5, 8
258 addi a3, a3, 16
259 src_b a9, a9, a6
260 s32i a9, a5, 12
261 addi a5, a5, 16
262
263 blt a3, a10, .Loop2
264#endif
265.Loop2done:
266 bbci.l a4, 3, .L12
267
268 l32i a7, a3, 4
269 l32i a8, a3, 8
270 src_b a6, a6, a7
271 s32i a6, a5, 0
272 addi a3, a3, 8
273 src_b a7, a7, a8
274 s32i a7, a5, 4
275 addi a5, a5, 8
276 mov a6, a8
277.L12:
278 bbci.l a4, 2, .L13
279
280 l32i a7, a3, 4
281 addi a3, a3, 4
282 src_b a6, a6, a7
283 s32i a6, a5, 0
284 addi a5, a5, 4
285 mov a6, a7
286.L13:
287
288 add a3, a3, a11
289#endif
290 bbsi.l a4, 1, .L14
291 bbsi.l a4, 0, .L15
292.Ldone: retw
293.L14:
294
295 l8ui a6, a3, 0
296 l8ui a7, a3, 1
297 addi a3, a3, 2
298 s8i a6, a5, 0
299 s8i a7, a5, 1
300 addi a5, a5, 2
301 bbsi.l a4, 0, .L15
302 retw
303.L15:
304
305 l8ui a6, a3, 0
306 s8i a6, a5, 0
307 retw
308
309
310
311
312
313
314
315
316