kernel: 5.4: import wireguard backport
[openwrt/openwrt.git] / target / linux / generic / backport-5.4 / 080-wireguard-0030-crypto-arm-curve25519-import-Bernstein-and-Schwabe-s.patch
1 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2 From: "Jason A. Donenfeld" <Jason@zx2c4.com>
3 Date: Fri, 8 Nov 2019 13:22:37 +0100
4 Subject: [PATCH] crypto: arm/curve25519 - import Bernstein and Schwabe's
5 Curve25519 ARM implementation
6
7 commit f0fb006b604f98e2309a30f34ef455ac734f7c1c upstream.
8
9 This comes from Dan Bernstein and Peter Schwabe's public domain NEON
10 code, and is included here in raw form so that subsequent commits that
11 fix these up for the kernel can see how it has changed. This code does
12 have some entirely cosmetic formatting differences, adding indentation
13 and so forth, so that when we actually port it for use in the kernel in
14 the subsequent commit, it's obvious what's changed in the process.
15
16 This code originates from SUPERCOP 20180818, available at
17 <https://bench.cr.yp.to/supercop.html>.
18
19 Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
20 Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
21 Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
22 Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
23 ---
24 arch/arm/crypto/curve25519-core.S | 2105 +++++++++++++++++++++++++++++
25 1 file changed, 2105 insertions(+)
26 create mode 100644 arch/arm/crypto/curve25519-core.S
27
28 --- /dev/null
29 +++ b/arch/arm/crypto/curve25519-core.S
30 @@ -0,0 +1,2105 @@
31 +/*
32 + * Public domain code from Daniel J. Bernstein and Peter Schwabe, from
33 + * SUPERCOP's curve25519/neon2/scalarmult.s.
34 + */
35 +
36 +.fpu neon
37 +.text
38 +.align 4
39 +.global _crypto_scalarmult_curve25519_neon2
40 +.global crypto_scalarmult_curve25519_neon2
41 +.type _crypto_scalarmult_curve25519_neon2 STT_FUNC
42 +.type crypto_scalarmult_curve25519_neon2 STT_FUNC
43 + _crypto_scalarmult_curve25519_neon2:
44 + crypto_scalarmult_curve25519_neon2:
45 + vpush {q4, q5, q6, q7}
46 + mov r12, sp
47 + sub sp, sp, #736
48 + and sp, sp, #0xffffffe0
49 + strd r4, [sp, #0]
50 + strd r6, [sp, #8]
51 + strd r8, [sp, #16]
52 + strd r10, [sp, #24]
53 + str r12, [sp, #480]
54 + str r14, [sp, #484]
55 + mov r0, r0
56 + mov r1, r1
57 + mov r2, r2
58 + add r3, sp, #32
59 + ldr r4, =0
60 + ldr r5, =254
61 + vmov.i32 q0, #1
62 + vshr.u64 q1, q0, #7
63 + vshr.u64 q0, q0, #8
64 + vmov.i32 d4, #19
65 + vmov.i32 d5, #38
66 + add r6, sp, #512
67 + vst1.8 {d2-d3}, [r6, : 128]
68 + add r6, sp, #528
69 + vst1.8 {d0-d1}, [r6, : 128]
70 + add r6, sp, #544
71 + vst1.8 {d4-d5}, [r6, : 128]
72 + add r6, r3, #0
73 + vmov.i32 q2, #0
74 + vst1.8 {d4-d5}, [r6, : 128]!
75 + vst1.8 {d4-d5}, [r6, : 128]!
76 + vst1.8 d4, [r6, : 64]
77 + add r6, r3, #0
78 + ldr r7, =960
79 + sub r7, r7, #2
80 + neg r7, r7
81 + sub r7, r7, r7, LSL #7
82 + str r7, [r6]
83 + add r6, sp, #704
84 + vld1.8 {d4-d5}, [r1]!
85 + vld1.8 {d6-d7}, [r1]
86 + vst1.8 {d4-d5}, [r6, : 128]!
87 + vst1.8 {d6-d7}, [r6, : 128]
88 + sub r1, r6, #16
89 + ldrb r6, [r1]
90 + and r6, r6, #248
91 + strb r6, [r1]
92 + ldrb r6, [r1, #31]
93 + and r6, r6, #127
94 + orr r6, r6, #64
95 + strb r6, [r1, #31]
96 + vmov.i64 q2, #0xffffffff
97 + vshr.u64 q3, q2, #7
98 + vshr.u64 q2, q2, #6
99 + vld1.8 {d8}, [r2]
100 + vld1.8 {d10}, [r2]
101 + add r2, r2, #6
102 + vld1.8 {d12}, [r2]
103 + vld1.8 {d14}, [r2]
104 + add r2, r2, #6
105 + vld1.8 {d16}, [r2]
106 + add r2, r2, #4
107 + vld1.8 {d18}, [r2]
108 + vld1.8 {d20}, [r2]
109 + add r2, r2, #6
110 + vld1.8 {d22}, [r2]
111 + add r2, r2, #2
112 + vld1.8 {d24}, [r2]
113 + vld1.8 {d26}, [r2]
114 + vshr.u64 q5, q5, #26
115 + vshr.u64 q6, q6, #3
116 + vshr.u64 q7, q7, #29
117 + vshr.u64 q8, q8, #6
118 + vshr.u64 q10, q10, #25
119 + vshr.u64 q11, q11, #3
120 + vshr.u64 q12, q12, #12
121 + vshr.u64 q13, q13, #38
122 + vand q4, q4, q2
123 + vand q6, q6, q2
124 + vand q8, q8, q2
125 + vand q10, q10, q2
126 + vand q2, q12, q2
127 + vand q5, q5, q3
128 + vand q7, q7, q3
129 + vand q9, q9, q3
130 + vand q11, q11, q3
131 + vand q3, q13, q3
132 + add r2, r3, #48
133 + vadd.i64 q12, q4, q1
134 + vadd.i64 q13, q10, q1
135 + vshr.s64 q12, q12, #26
136 + vshr.s64 q13, q13, #26
137 + vadd.i64 q5, q5, q12
138 + vshl.i64 q12, q12, #26
139 + vadd.i64 q14, q5, q0
140 + vadd.i64 q11, q11, q13
141 + vshl.i64 q13, q13, #26
142 + vadd.i64 q15, q11, q0
143 + vsub.i64 q4, q4, q12
144 + vshr.s64 q12, q14, #25
145 + vsub.i64 q10, q10, q13
146 + vshr.s64 q13, q15, #25
147 + vadd.i64 q6, q6, q12
148 + vshl.i64 q12, q12, #25
149 + vadd.i64 q14, q6, q1
150 + vadd.i64 q2, q2, q13
151 + vsub.i64 q5, q5, q12
152 + vshr.s64 q12, q14, #26
153 + vshl.i64 q13, q13, #25
154 + vadd.i64 q14, q2, q1
155 + vadd.i64 q7, q7, q12
156 + vshl.i64 q12, q12, #26
157 + vadd.i64 q15, q7, q0
158 + vsub.i64 q11, q11, q13
159 + vshr.s64 q13, q14, #26
160 + vsub.i64 q6, q6, q12
161 + vshr.s64 q12, q15, #25
162 + vadd.i64 q3, q3, q13
163 + vshl.i64 q13, q13, #26
164 + vadd.i64 q14, q3, q0
165 + vadd.i64 q8, q8, q12
166 + vshl.i64 q12, q12, #25
167 + vadd.i64 q15, q8, q1
168 + add r2, r2, #8
169 + vsub.i64 q2, q2, q13
170 + vshr.s64 q13, q14, #25
171 + vsub.i64 q7, q7, q12
172 + vshr.s64 q12, q15, #26
173 + vadd.i64 q14, q13, q13
174 + vadd.i64 q9, q9, q12
175 + vtrn.32 d12, d14
176 + vshl.i64 q12, q12, #26
177 + vtrn.32 d13, d15
178 + vadd.i64 q0, q9, q0
179 + vadd.i64 q4, q4, q14
180 + vst1.8 d12, [r2, : 64]!
181 + vshl.i64 q6, q13, #4
182 + vsub.i64 q7, q8, q12
183 + vshr.s64 q0, q0, #25
184 + vadd.i64 q4, q4, q6
185 + vadd.i64 q6, q10, q0
186 + vshl.i64 q0, q0, #25
187 + vadd.i64 q8, q6, q1
188 + vadd.i64 q4, q4, q13
189 + vshl.i64 q10, q13, #25
190 + vadd.i64 q1, q4, q1
191 + vsub.i64 q0, q9, q0
192 + vshr.s64 q8, q8, #26
193 + vsub.i64 q3, q3, q10
194 + vtrn.32 d14, d0
195 + vshr.s64 q1, q1, #26
196 + vtrn.32 d15, d1
197 + vadd.i64 q0, q11, q8
198 + vst1.8 d14, [r2, : 64]
199 + vshl.i64 q7, q8, #26
200 + vadd.i64 q5, q5, q1
201 + vtrn.32 d4, d6
202 + vshl.i64 q1, q1, #26
203 + vtrn.32 d5, d7
204 + vsub.i64 q3, q6, q7
205 + add r2, r2, #16
206 + vsub.i64 q1, q4, q1
207 + vst1.8 d4, [r2, : 64]
208 + vtrn.32 d6, d0
209 + vtrn.32 d7, d1
210 + sub r2, r2, #8
211 + vtrn.32 d2, d10
212 + vtrn.32 d3, d11
213 + vst1.8 d6, [r2, : 64]
214 + sub r2, r2, #24
215 + vst1.8 d2, [r2, : 64]
216 + add r2, r3, #96
217 + vmov.i32 q0, #0
218 + vmov.i64 d2, #0xff
219 + vmov.i64 d3, #0
220 + vshr.u32 q1, q1, #7
221 + vst1.8 {d2-d3}, [r2, : 128]!
222 + vst1.8 {d0-d1}, [r2, : 128]!
223 + vst1.8 d0, [r2, : 64]
224 + add r2, r3, #144
225 + vmov.i32 q0, #0
226 + vst1.8 {d0-d1}, [r2, : 128]!
227 + vst1.8 {d0-d1}, [r2, : 128]!
228 + vst1.8 d0, [r2, : 64]
229 + add r2, r3, #240
230 + vmov.i32 q0, #0
231 + vmov.i64 d2, #0xff
232 + vmov.i64 d3, #0
233 + vshr.u32 q1, q1, #7
234 + vst1.8 {d2-d3}, [r2, : 128]!
235 + vst1.8 {d0-d1}, [r2, : 128]!
236 + vst1.8 d0, [r2, : 64]
237 + add r2, r3, #48
238 + add r6, r3, #192
239 + vld1.8 {d0-d1}, [r2, : 128]!
240 + vld1.8 {d2-d3}, [r2, : 128]!
241 + vld1.8 {d4}, [r2, : 64]
242 + vst1.8 {d0-d1}, [r6, : 128]!
243 + vst1.8 {d2-d3}, [r6, : 128]!
244 + vst1.8 d4, [r6, : 64]
245 +._mainloop:
246 + mov r2, r5, LSR #3
247 + and r6, r5, #7
248 + ldrb r2, [r1, r2]
249 + mov r2, r2, LSR r6
250 + and r2, r2, #1
251 + str r5, [sp, #488]
252 + eor r4, r4, r2
253 + str r2, [sp, #492]
254 + neg r2, r4
255 + add r4, r3, #96
256 + add r5, r3, #192
257 + add r6, r3, #144
258 + vld1.8 {d8-d9}, [r4, : 128]!
259 + add r7, r3, #240
260 + vld1.8 {d10-d11}, [r5, : 128]!
261 + veor q6, q4, q5
262 + vld1.8 {d14-d15}, [r6, : 128]!
263 + vdup.i32 q8, r2
264 + vld1.8 {d18-d19}, [r7, : 128]!
265 + veor q10, q7, q9
266 + vld1.8 {d22-d23}, [r4, : 128]!
267 + vand q6, q6, q8
268 + vld1.8 {d24-d25}, [r5, : 128]!
269 + vand q10, q10, q8
270 + vld1.8 {d26-d27}, [r6, : 128]!
271 + veor q4, q4, q6
272 + vld1.8 {d28-d29}, [r7, : 128]!
273 + veor q5, q5, q6
274 + vld1.8 {d0}, [r4, : 64]
275 + veor q6, q7, q10
276 + vld1.8 {d2}, [r5, : 64]
277 + veor q7, q9, q10
278 + vld1.8 {d4}, [r6, : 64]
279 + veor q9, q11, q12
280 + vld1.8 {d6}, [r7, : 64]
281 + veor q10, q0, q1
282 + sub r2, r4, #32
283 + vand q9, q9, q8
284 + sub r4, r5, #32
285 + vand q10, q10, q8
286 + sub r5, r6, #32
287 + veor q11, q11, q9
288 + sub r6, r7, #32
289 + veor q0, q0, q10
290 + veor q9, q12, q9
291 + veor q1, q1, q10
292 + veor q10, q13, q14
293 + veor q12, q2, q3
294 + vand q10, q10, q8
295 + vand q8, q12, q8
296 + veor q12, q13, q10
297 + veor q2, q2, q8
298 + veor q10, q14, q10
299 + veor q3, q3, q8
300 + vadd.i32 q8, q4, q6
301 + vsub.i32 q4, q4, q6
302 + vst1.8 {d16-d17}, [r2, : 128]!
303 + vadd.i32 q6, q11, q12
304 + vst1.8 {d8-d9}, [r5, : 128]!
305 + vsub.i32 q4, q11, q12
306 + vst1.8 {d12-d13}, [r2, : 128]!
307 + vadd.i32 q6, q0, q2
308 + vst1.8 {d8-d9}, [r5, : 128]!
309 + vsub.i32 q0, q0, q2
310 + vst1.8 d12, [r2, : 64]
311 + vadd.i32 q2, q5, q7
312 + vst1.8 d0, [r5, : 64]
313 + vsub.i32 q0, q5, q7
314 + vst1.8 {d4-d5}, [r4, : 128]!
315 + vadd.i32 q2, q9, q10
316 + vst1.8 {d0-d1}, [r6, : 128]!
317 + vsub.i32 q0, q9, q10
318 + vst1.8 {d4-d5}, [r4, : 128]!
319 + vadd.i32 q2, q1, q3
320 + vst1.8 {d0-d1}, [r6, : 128]!
321 + vsub.i32 q0, q1, q3
322 + vst1.8 d4, [r4, : 64]
323 + vst1.8 d0, [r6, : 64]
324 + add r2, sp, #544
325 + add r4, r3, #96
326 + add r5, r3, #144
327 + vld1.8 {d0-d1}, [r2, : 128]
328 + vld1.8 {d2-d3}, [r4, : 128]!
329 + vld1.8 {d4-d5}, [r5, : 128]!
330 + vzip.i32 q1, q2
331 + vld1.8 {d6-d7}, [r4, : 128]!
332 + vld1.8 {d8-d9}, [r5, : 128]!
333 + vshl.i32 q5, q1, #1
334 + vzip.i32 q3, q4
335 + vshl.i32 q6, q2, #1
336 + vld1.8 {d14}, [r4, : 64]
337 + vshl.i32 q8, q3, #1
338 + vld1.8 {d15}, [r5, : 64]
339 + vshl.i32 q9, q4, #1
340 + vmul.i32 d21, d7, d1
341 + vtrn.32 d14, d15
342 + vmul.i32 q11, q4, q0
343 + vmul.i32 q0, q7, q0
344 + vmull.s32 q12, d2, d2
345 + vmlal.s32 q12, d11, d1
346 + vmlal.s32 q12, d12, d0
347 + vmlal.s32 q12, d13, d23
348 + vmlal.s32 q12, d16, d22
349 + vmlal.s32 q12, d7, d21
350 + vmull.s32 q10, d2, d11
351 + vmlal.s32 q10, d4, d1
352 + vmlal.s32 q10, d13, d0
353 + vmlal.s32 q10, d6, d23
354 + vmlal.s32 q10, d17, d22
355 + vmull.s32 q13, d10, d4
356 + vmlal.s32 q13, d11, d3
357 + vmlal.s32 q13, d13, d1
358 + vmlal.s32 q13, d16, d0
359 + vmlal.s32 q13, d17, d23
360 + vmlal.s32 q13, d8, d22
361 + vmull.s32 q1, d10, d5
362 + vmlal.s32 q1, d11, d4
363 + vmlal.s32 q1, d6, d1
364 + vmlal.s32 q1, d17, d0
365 + vmlal.s32 q1, d8, d23
366 + vmull.s32 q14, d10, d6
367 + vmlal.s32 q14, d11, d13
368 + vmlal.s32 q14, d4, d4
369 + vmlal.s32 q14, d17, d1
370 + vmlal.s32 q14, d18, d0
371 + vmlal.s32 q14, d9, d23
372 + vmull.s32 q11, d10, d7
373 + vmlal.s32 q11, d11, d6
374 + vmlal.s32 q11, d12, d5
375 + vmlal.s32 q11, d8, d1
376 + vmlal.s32 q11, d19, d0
377 + vmull.s32 q15, d10, d8
378 + vmlal.s32 q15, d11, d17
379 + vmlal.s32 q15, d12, d6
380 + vmlal.s32 q15, d13, d5
381 + vmlal.s32 q15, d19, d1
382 + vmlal.s32 q15, d14, d0
383 + vmull.s32 q2, d10, d9
384 + vmlal.s32 q2, d11, d8
385 + vmlal.s32 q2, d12, d7
386 + vmlal.s32 q2, d13, d6
387 + vmlal.s32 q2, d14, d1
388 + vmull.s32 q0, d15, d1
389 + vmlal.s32 q0, d10, d14
390 + vmlal.s32 q0, d11, d19
391 + vmlal.s32 q0, d12, d8
392 + vmlal.s32 q0, d13, d17
393 + vmlal.s32 q0, d6, d6
394 + add r2, sp, #512
395 + vld1.8 {d18-d19}, [r2, : 128]
396 + vmull.s32 q3, d16, d7
397 + vmlal.s32 q3, d10, d15
398 + vmlal.s32 q3, d11, d14
399 + vmlal.s32 q3, d12, d9
400 + vmlal.s32 q3, d13, d8
401 + add r2, sp, #528
402 + vld1.8 {d8-d9}, [r2, : 128]
403 + vadd.i64 q5, q12, q9
404 + vadd.i64 q6, q15, q9
405 + vshr.s64 q5, q5, #26
406 + vshr.s64 q6, q6, #26
407 + vadd.i64 q7, q10, q5
408 + vshl.i64 q5, q5, #26
409 + vadd.i64 q8, q7, q4
410 + vadd.i64 q2, q2, q6
411 + vshl.i64 q6, q6, #26
412 + vadd.i64 q10, q2, q4
413 + vsub.i64 q5, q12, q5
414 + vshr.s64 q8, q8, #25
415 + vsub.i64 q6, q15, q6
416 + vshr.s64 q10, q10, #25
417 + vadd.i64 q12, q13, q8
418 + vshl.i64 q8, q8, #25
419 + vadd.i64 q13, q12, q9
420 + vadd.i64 q0, q0, q10
421 + vsub.i64 q7, q7, q8
422 + vshr.s64 q8, q13, #26
423 + vshl.i64 q10, q10, #25
424 + vadd.i64 q13, q0, q9
425 + vadd.i64 q1, q1, q8
426 + vshl.i64 q8, q8, #26
427 + vadd.i64 q15, q1, q4
428 + vsub.i64 q2, q2, q10
429 + vshr.s64 q10, q13, #26
430 + vsub.i64 q8, q12, q8
431 + vshr.s64 q12, q15, #25
432 + vadd.i64 q3, q3, q10
433 + vshl.i64 q10, q10, #26
434 + vadd.i64 q13, q3, q4
435 + vadd.i64 q14, q14, q12
436 + add r2, r3, #288
437 + vshl.i64 q12, q12, #25
438 + add r4, r3, #336
439 + vadd.i64 q15, q14, q9
440 + add r2, r2, #8
441 + vsub.i64 q0, q0, q10
442 + add r4, r4, #8
443 + vshr.s64 q10, q13, #25
444 + vsub.i64 q1, q1, q12
445 + vshr.s64 q12, q15, #26
446 + vadd.i64 q13, q10, q10
447 + vadd.i64 q11, q11, q12
448 + vtrn.32 d16, d2
449 + vshl.i64 q12, q12, #26
450 + vtrn.32 d17, d3
451 + vadd.i64 q1, q11, q4
452 + vadd.i64 q4, q5, q13
453 + vst1.8 d16, [r2, : 64]!
454 + vshl.i64 q5, q10, #4
455 + vst1.8 d17, [r4, : 64]!
456 + vsub.i64 q8, q14, q12
457 + vshr.s64 q1, q1, #25
458 + vadd.i64 q4, q4, q5
459 + vadd.i64 q5, q6, q1
460 + vshl.i64 q1, q1, #25
461 + vadd.i64 q6, q5, q9
462 + vadd.i64 q4, q4, q10
463 + vshl.i64 q10, q10, #25
464 + vadd.i64 q9, q4, q9
465 + vsub.i64 q1, q11, q1
466 + vshr.s64 q6, q6, #26
467 + vsub.i64 q3, q3, q10
468 + vtrn.32 d16, d2
469 + vshr.s64 q9, q9, #26
470 + vtrn.32 d17, d3
471 + vadd.i64 q1, q2, q6
472 + vst1.8 d16, [r2, : 64]
473 + vshl.i64 q2, q6, #26
474 + vst1.8 d17, [r4, : 64]
475 + vadd.i64 q6, q7, q9
476 + vtrn.32 d0, d6
477 + vshl.i64 q7, q9, #26
478 + vtrn.32 d1, d7
479 + vsub.i64 q2, q5, q2
480 + add r2, r2, #16
481 + vsub.i64 q3, q4, q7
482 + vst1.8 d0, [r2, : 64]
483 + add r4, r4, #16
484 + vst1.8 d1, [r4, : 64]
485 + vtrn.32 d4, d2
486 + vtrn.32 d5, d3
487 + sub r2, r2, #8
488 + sub r4, r4, #8
489 + vtrn.32 d6, d12
490 + vtrn.32 d7, d13
491 + vst1.8 d4, [r2, : 64]
492 + vst1.8 d5, [r4, : 64]
493 + sub r2, r2, #24
494 + sub r4, r4, #24
495 + vst1.8 d6, [r2, : 64]
496 + vst1.8 d7, [r4, : 64]
497 + add r2, r3, #240
498 + add r4, r3, #96
499 + vld1.8 {d0-d1}, [r4, : 128]!
500 + vld1.8 {d2-d3}, [r4, : 128]!
501 + vld1.8 {d4}, [r4, : 64]
502 + add r4, r3, #144
503 + vld1.8 {d6-d7}, [r4, : 128]!
504 + vtrn.32 q0, q3
505 + vld1.8 {d8-d9}, [r4, : 128]!
506 + vshl.i32 q5, q0, #4
507 + vtrn.32 q1, q4
508 + vshl.i32 q6, q3, #4
509 + vadd.i32 q5, q5, q0
510 + vadd.i32 q6, q6, q3
511 + vshl.i32 q7, q1, #4
512 + vld1.8 {d5}, [r4, : 64]
513 + vshl.i32 q8, q4, #4
514 + vtrn.32 d4, d5
515 + vadd.i32 q7, q7, q1
516 + vadd.i32 q8, q8, q4
517 + vld1.8 {d18-d19}, [r2, : 128]!
518 + vshl.i32 q10, q2, #4
519 + vld1.8 {d22-d23}, [r2, : 128]!
520 + vadd.i32 q10, q10, q2
521 + vld1.8 {d24}, [r2, : 64]
522 + vadd.i32 q5, q5, q0
523 + add r2, r3, #192
524 + vld1.8 {d26-d27}, [r2, : 128]!
525 + vadd.i32 q6, q6, q3
526 + vld1.8 {d28-d29}, [r2, : 128]!
527 + vadd.i32 q8, q8, q4
528 + vld1.8 {d25}, [r2, : 64]
529 + vadd.i32 q10, q10, q2
530 + vtrn.32 q9, q13
531 + vadd.i32 q7, q7, q1
532 + vadd.i32 q5, q5, q0
533 + vtrn.32 q11, q14
534 + vadd.i32 q6, q6, q3
535 + add r2, sp, #560
536 + vadd.i32 q10, q10, q2
537 + vtrn.32 d24, d25
538 + vst1.8 {d12-d13}, [r2, : 128]
539 + vshl.i32 q6, q13, #1
540 + add r2, sp, #576
541 + vst1.8 {d20-d21}, [r2, : 128]
542 + vshl.i32 q10, q14, #1
543 + add r2, sp, #592
544 + vst1.8 {d12-d13}, [r2, : 128]
545 + vshl.i32 q15, q12, #1
546 + vadd.i32 q8, q8, q4
547 + vext.32 d10, d31, d30, #0
548 + vadd.i32 q7, q7, q1
549 + add r2, sp, #608
550 + vst1.8 {d16-d17}, [r2, : 128]
551 + vmull.s32 q8, d18, d5
552 + vmlal.s32 q8, d26, d4
553 + vmlal.s32 q8, d19, d9
554 + vmlal.s32 q8, d27, d3
555 + vmlal.s32 q8, d22, d8
556 + vmlal.s32 q8, d28, d2
557 + vmlal.s32 q8, d23, d7
558 + vmlal.s32 q8, d29, d1
559 + vmlal.s32 q8, d24, d6
560 + vmlal.s32 q8, d25, d0
561 + add r2, sp, #624
562 + vst1.8 {d14-d15}, [r2, : 128]
563 + vmull.s32 q2, d18, d4
564 + vmlal.s32 q2, d12, d9
565 + vmlal.s32 q2, d13, d8
566 + vmlal.s32 q2, d19, d3
567 + vmlal.s32 q2, d22, d2
568 + vmlal.s32 q2, d23, d1
569 + vmlal.s32 q2, d24, d0
570 + add r2, sp, #640
571 + vst1.8 {d20-d21}, [r2, : 128]
572 + vmull.s32 q7, d18, d9
573 + vmlal.s32 q7, d26, d3
574 + vmlal.s32 q7, d19, d8
575 + vmlal.s32 q7, d27, d2
576 + vmlal.s32 q7, d22, d7
577 + vmlal.s32 q7, d28, d1
578 + vmlal.s32 q7, d23, d6
579 + vmlal.s32 q7, d29, d0
580 + add r2, sp, #656
581 + vst1.8 {d10-d11}, [r2, : 128]
582 + vmull.s32 q5, d18, d3
583 + vmlal.s32 q5, d19, d2
584 + vmlal.s32 q5, d22, d1
585 + vmlal.s32 q5, d23, d0
586 + vmlal.s32 q5, d12, d8
587 + add r2, sp, #672
588 + vst1.8 {d16-d17}, [r2, : 128]
589 + vmull.s32 q4, d18, d8
590 + vmlal.s32 q4, d26, d2
591 + vmlal.s32 q4, d19, d7
592 + vmlal.s32 q4, d27, d1
593 + vmlal.s32 q4, d22, d6
594 + vmlal.s32 q4, d28, d0
595 + vmull.s32 q8, d18, d7
596 + vmlal.s32 q8, d26, d1
597 + vmlal.s32 q8, d19, d6
598 + vmlal.s32 q8, d27, d0
599 + add r2, sp, #576
600 + vld1.8 {d20-d21}, [r2, : 128]
601 + vmlal.s32 q7, d24, d21
602 + vmlal.s32 q7, d25, d20
603 + vmlal.s32 q4, d23, d21
604 + vmlal.s32 q4, d29, d20
605 + vmlal.s32 q8, d22, d21
606 + vmlal.s32 q8, d28, d20
607 + vmlal.s32 q5, d24, d20
608 + add r2, sp, #576
609 + vst1.8 {d14-d15}, [r2, : 128]
610 + vmull.s32 q7, d18, d6
611 + vmlal.s32 q7, d26, d0
612 + add r2, sp, #656
613 + vld1.8 {d30-d31}, [r2, : 128]
614 + vmlal.s32 q2, d30, d21
615 + vmlal.s32 q7, d19, d21
616 + vmlal.s32 q7, d27, d20
617 + add r2, sp, #624
618 + vld1.8 {d26-d27}, [r2, : 128]
619 + vmlal.s32 q4, d25, d27
620 + vmlal.s32 q8, d29, d27
621 + vmlal.s32 q8, d25, d26
622 + vmlal.s32 q7, d28, d27
623 + vmlal.s32 q7, d29, d26
624 + add r2, sp, #608
625 + vld1.8 {d28-d29}, [r2, : 128]
626 + vmlal.s32 q4, d24, d29
627 + vmlal.s32 q8, d23, d29
628 + vmlal.s32 q8, d24, d28
629 + vmlal.s32 q7, d22, d29
630 + vmlal.s32 q7, d23, d28
631 + add r2, sp, #608
632 + vst1.8 {d8-d9}, [r2, : 128]
633 + add r2, sp, #560
634 + vld1.8 {d8-d9}, [r2, : 128]
635 + vmlal.s32 q7, d24, d9
636 + vmlal.s32 q7, d25, d31
637 + vmull.s32 q1, d18, d2
638 + vmlal.s32 q1, d19, d1
639 + vmlal.s32 q1, d22, d0
640 + vmlal.s32 q1, d24, d27
641 + vmlal.s32 q1, d23, d20
642 + vmlal.s32 q1, d12, d7
643 + vmlal.s32 q1, d13, d6
644 + vmull.s32 q6, d18, d1
645 + vmlal.s32 q6, d19, d0
646 + vmlal.s32 q6, d23, d27
647 + vmlal.s32 q6, d22, d20
648 + vmlal.s32 q6, d24, d26
649 + vmull.s32 q0, d18, d0
650 + vmlal.s32 q0, d22, d27
651 + vmlal.s32 q0, d23, d26
652 + vmlal.s32 q0, d24, d31
653 + vmlal.s32 q0, d19, d20
654 + add r2, sp, #640
655 + vld1.8 {d18-d19}, [r2, : 128]
656 + vmlal.s32 q2, d18, d7
657 + vmlal.s32 q2, d19, d6
658 + vmlal.s32 q5, d18, d6
659 + vmlal.s32 q5, d19, d21
660 + vmlal.s32 q1, d18, d21
661 + vmlal.s32 q1, d19, d29
662 + vmlal.s32 q0, d18, d28
663 + vmlal.s32 q0, d19, d9
664 + vmlal.s32 q6, d18, d29
665 + vmlal.s32 q6, d19, d28
666 + add r2, sp, #592
667 + vld1.8 {d18-d19}, [r2, : 128]
668 + add r2, sp, #512
669 + vld1.8 {d22-d23}, [r2, : 128]
670 + vmlal.s32 q5, d19, d7
671 + vmlal.s32 q0, d18, d21
672 + vmlal.s32 q0, d19, d29
673 + vmlal.s32 q6, d18, d6
674 + add r2, sp, #528
675 + vld1.8 {d6-d7}, [r2, : 128]
676 + vmlal.s32 q6, d19, d21
677 + add r2, sp, #576
678 + vld1.8 {d18-d19}, [r2, : 128]
679 + vmlal.s32 q0, d30, d8
680 + add r2, sp, #672
681 + vld1.8 {d20-d21}, [r2, : 128]
682 + vmlal.s32 q5, d30, d29
683 + add r2, sp, #608
684 + vld1.8 {d24-d25}, [r2, : 128]
685 + vmlal.s32 q1, d30, d28
686 + vadd.i64 q13, q0, q11
687 + vadd.i64 q14, q5, q11
688 + vmlal.s32 q6, d30, d9
689 + vshr.s64 q4, q13, #26
690 + vshr.s64 q13, q14, #26
691 + vadd.i64 q7, q7, q4
692 + vshl.i64 q4, q4, #26
693 + vadd.i64 q14, q7, q3
694 + vadd.i64 q9, q9, q13
695 + vshl.i64 q13, q13, #26
696 + vadd.i64 q15, q9, q3
697 + vsub.i64 q0, q0, q4
698 + vshr.s64 q4, q14, #25
699 + vsub.i64 q5, q5, q13
700 + vshr.s64 q13, q15, #25
701 + vadd.i64 q6, q6, q4
702 + vshl.i64 q4, q4, #25
703 + vadd.i64 q14, q6, q11
704 + vadd.i64 q2, q2, q13
705 + vsub.i64 q4, q7, q4
706 + vshr.s64 q7, q14, #26
707 + vshl.i64 q13, q13, #25
708 + vadd.i64 q14, q2, q11
709 + vadd.i64 q8, q8, q7
710 + vshl.i64 q7, q7, #26
711 + vadd.i64 q15, q8, q3
712 + vsub.i64 q9, q9, q13
713 + vshr.s64 q13, q14, #26
714 + vsub.i64 q6, q6, q7
715 + vshr.s64 q7, q15, #25
716 + vadd.i64 q10, q10, q13
717 + vshl.i64 q13, q13, #26
718 + vadd.i64 q14, q10, q3
719 + vadd.i64 q1, q1, q7
720 + add r2, r3, #144
721 + vshl.i64 q7, q7, #25
722 + add r4, r3, #96
723 + vadd.i64 q15, q1, q11
724 + add r2, r2, #8
725 + vsub.i64 q2, q2, q13
726 + add r4, r4, #8
727 + vshr.s64 q13, q14, #25
728 + vsub.i64 q7, q8, q7
729 + vshr.s64 q8, q15, #26
730 + vadd.i64 q14, q13, q13
731 + vadd.i64 q12, q12, q8
732 + vtrn.32 d12, d14
733 + vshl.i64 q8, q8, #26
734 + vtrn.32 d13, d15
735 + vadd.i64 q3, q12, q3
736 + vadd.i64 q0, q0, q14
737 + vst1.8 d12, [r2, : 64]!
738 + vshl.i64 q7, q13, #4
739 + vst1.8 d13, [r4, : 64]!
740 + vsub.i64 q1, q1, q8
741 + vshr.s64 q3, q3, #25
742 + vadd.i64 q0, q0, q7
743 + vadd.i64 q5, q5, q3
744 + vshl.i64 q3, q3, #25
745 + vadd.i64 q6, q5, q11
746 + vadd.i64 q0, q0, q13
747 + vshl.i64 q7, q13, #25
748 + vadd.i64 q8, q0, q11
749 + vsub.i64 q3, q12, q3
750 + vshr.s64 q6, q6, #26
751 + vsub.i64 q7, q10, q7
752 + vtrn.32 d2, d6
753 + vshr.s64 q8, q8, #26
754 + vtrn.32 d3, d7
755 + vadd.i64 q3, q9, q6
756 + vst1.8 d2, [r2, : 64]
757 + vshl.i64 q6, q6, #26
758 + vst1.8 d3, [r4, : 64]
759 + vadd.i64 q1, q4, q8
760 + vtrn.32 d4, d14
761 + vshl.i64 q4, q8, #26
762 + vtrn.32 d5, d15
763 + vsub.i64 q5, q5, q6
764 + add r2, r2, #16
765 + vsub.i64 q0, q0, q4
766 + vst1.8 d4, [r2, : 64]
767 + add r4, r4, #16
768 + vst1.8 d5, [r4, : 64]
769 + vtrn.32 d10, d6
770 + vtrn.32 d11, d7
771 + sub r2, r2, #8
772 + sub r4, r4, #8
773 + vtrn.32 d0, d2
774 + vtrn.32 d1, d3
775 + vst1.8 d10, [r2, : 64]
776 + vst1.8 d11, [r4, : 64]
777 + sub r2, r2, #24
778 + sub r4, r4, #24
779 + vst1.8 d0, [r2, : 64]
780 + vst1.8 d1, [r4, : 64]
781 + add r2, r3, #288
782 + add r4, r3, #336
783 + vld1.8 {d0-d1}, [r2, : 128]!
784 + vld1.8 {d2-d3}, [r4, : 128]!
785 + vsub.i32 q0, q0, q1
786 + vld1.8 {d2-d3}, [r2, : 128]!
787 + vld1.8 {d4-d5}, [r4, : 128]!
788 + vsub.i32 q1, q1, q2
789 + add r5, r3, #240
790 + vld1.8 {d4}, [r2, : 64]
791 + vld1.8 {d6}, [r4, : 64]
792 + vsub.i32 q2, q2, q3
793 + vst1.8 {d0-d1}, [r5, : 128]!
794 + vst1.8 {d2-d3}, [r5, : 128]!
795 + vst1.8 d4, [r5, : 64]
796 + add r2, r3, #144
797 + add r4, r3, #96
798 + add r5, r3, #144
799 + add r6, r3, #192
800 + vld1.8 {d0-d1}, [r2, : 128]!
801 + vld1.8 {d2-d3}, [r4, : 128]!
802 + vsub.i32 q2, q0, q1
803 + vadd.i32 q0, q0, q1
804 + vld1.8 {d2-d3}, [r2, : 128]!
805 + vld1.8 {d6-d7}, [r4, : 128]!
806 + vsub.i32 q4, q1, q3
807 + vadd.i32 q1, q1, q3
808 + vld1.8 {d6}, [r2, : 64]
809 + vld1.8 {d10}, [r4, : 64]
810 + vsub.i32 q6, q3, q5
811 + vadd.i32 q3, q3, q5
812 + vst1.8 {d4-d5}, [r5, : 128]!
813 + vst1.8 {d0-d1}, [r6, : 128]!
814 + vst1.8 {d8-d9}, [r5, : 128]!
815 + vst1.8 {d2-d3}, [r6, : 128]!
816 + vst1.8 d12, [r5, : 64]
817 + vst1.8 d6, [r6, : 64]
818 + add r2, r3, #0
819 + add r4, r3, #240
820 + vld1.8 {d0-d1}, [r4, : 128]!
821 + vld1.8 {d2-d3}, [r4, : 128]!
822 + vld1.8 {d4}, [r4, : 64]
823 + add r4, r3, #336
824 + vld1.8 {d6-d7}, [r4, : 128]!
825 + vtrn.32 q0, q3
826 + vld1.8 {d8-d9}, [r4, : 128]!
827 + vshl.i32 q5, q0, #4
828 + vtrn.32 q1, q4
829 + vshl.i32 q6, q3, #4
830 + vadd.i32 q5, q5, q0
831 + vadd.i32 q6, q6, q3
832 + vshl.i32 q7, q1, #4
833 + vld1.8 {d5}, [r4, : 64]
834 + vshl.i32 q8, q4, #4
835 + vtrn.32 d4, d5
836 + vadd.i32 q7, q7, q1
837 + vadd.i32 q8, q8, q4
838 + vld1.8 {d18-d19}, [r2, : 128]!
839 + vshl.i32 q10, q2, #4
840 + vld1.8 {d22-d23}, [r2, : 128]!
841 + vadd.i32 q10, q10, q2
842 + vld1.8 {d24}, [r2, : 64]
843 + vadd.i32 q5, q5, q0
844 + add r2, r3, #288
845 + vld1.8 {d26-d27}, [r2, : 128]!
846 + vadd.i32 q6, q6, q3
847 + vld1.8 {d28-d29}, [r2, : 128]!
848 + vadd.i32 q8, q8, q4
849 + vld1.8 {d25}, [r2, : 64]
850 + vadd.i32 q10, q10, q2
851 + vtrn.32 q9, q13
852 + vadd.i32 q7, q7, q1
853 + vadd.i32 q5, q5, q0
854 + vtrn.32 q11, q14
855 + vadd.i32 q6, q6, q3
856 + add r2, sp, #560
857 + vadd.i32 q10, q10, q2
858 + vtrn.32 d24, d25
859 + vst1.8 {d12-d13}, [r2, : 128]
860 + vshl.i32 q6, q13, #1
861 + add r2, sp, #576
862 + vst1.8 {d20-d21}, [r2, : 128]
863 + vshl.i32 q10, q14, #1
864 + add r2, sp, #592
865 + vst1.8 {d12-d13}, [r2, : 128]
866 + vshl.i32 q15, q12, #1
867 + vadd.i32 q8, q8, q4
868 + vext.32 d10, d31, d30, #0
869 + vadd.i32 q7, q7, q1
870 + add r2, sp, #608
871 + vst1.8 {d16-d17}, [r2, : 128]
872 + vmull.s32 q8, d18, d5
873 + vmlal.s32 q8, d26, d4
874 + vmlal.s32 q8, d19, d9
875 + vmlal.s32 q8, d27, d3
876 + vmlal.s32 q8, d22, d8
877 + vmlal.s32 q8, d28, d2
878 + vmlal.s32 q8, d23, d7
879 + vmlal.s32 q8, d29, d1
880 + vmlal.s32 q8, d24, d6
881 + vmlal.s32 q8, d25, d0
882 + add r2, sp, #624
883 + vst1.8 {d14-d15}, [r2, : 128]
884 + vmull.s32 q2, d18, d4
885 + vmlal.s32 q2, d12, d9
886 + vmlal.s32 q2, d13, d8
887 + vmlal.s32 q2, d19, d3
888 + vmlal.s32 q2, d22, d2
889 + vmlal.s32 q2, d23, d1
890 + vmlal.s32 q2, d24, d0
891 + add r2, sp, #640
892 + vst1.8 {d20-d21}, [r2, : 128]
893 + vmull.s32 q7, d18, d9
894 + vmlal.s32 q7, d26, d3
895 + vmlal.s32 q7, d19, d8
896 + vmlal.s32 q7, d27, d2
897 + vmlal.s32 q7, d22, d7
898 + vmlal.s32 q7, d28, d1
899 + vmlal.s32 q7, d23, d6
900 + vmlal.s32 q7, d29, d0
901 + add r2, sp, #656
902 + vst1.8 {d10-d11}, [r2, : 128]
903 + vmull.s32 q5, d18, d3
904 + vmlal.s32 q5, d19, d2
905 + vmlal.s32 q5, d22, d1
906 + vmlal.s32 q5, d23, d0
907 + vmlal.s32 q5, d12, d8
908 + add r2, sp, #672
909 + vst1.8 {d16-d17}, [r2, : 128]
910 + vmull.s32 q4, d18, d8
911 + vmlal.s32 q4, d26, d2
912 + vmlal.s32 q4, d19, d7
913 + vmlal.s32 q4, d27, d1
914 + vmlal.s32 q4, d22, d6
915 + vmlal.s32 q4, d28, d0
916 + vmull.s32 q8, d18, d7
917 + vmlal.s32 q8, d26, d1
918 + vmlal.s32 q8, d19, d6
919 + vmlal.s32 q8, d27, d0
920 + add r2, sp, #576
921 + vld1.8 {d20-d21}, [r2, : 128]
922 + vmlal.s32 q7, d24, d21
923 + vmlal.s32 q7, d25, d20
924 + vmlal.s32 q4, d23, d21
925 + vmlal.s32 q4, d29, d20
926 + vmlal.s32 q8, d22, d21
927 + vmlal.s32 q8, d28, d20
928 + vmlal.s32 q5, d24, d20
929 + add r2, sp, #576
930 + vst1.8 {d14-d15}, [r2, : 128]
931 + vmull.s32 q7, d18, d6
932 + vmlal.s32 q7, d26, d0
933 + add r2, sp, #656
934 + vld1.8 {d30-d31}, [r2, : 128]
935 + vmlal.s32 q2, d30, d21
936 + vmlal.s32 q7, d19, d21
937 + vmlal.s32 q7, d27, d20
938 + add r2, sp, #624
939 + vld1.8 {d26-d27}, [r2, : 128]
940 + vmlal.s32 q4, d25, d27
941 + vmlal.s32 q8, d29, d27
942 + vmlal.s32 q8, d25, d26
943 + vmlal.s32 q7, d28, d27
944 + vmlal.s32 q7, d29, d26
945 + add r2, sp, #608
946 + vld1.8 {d28-d29}, [r2, : 128]
947 + vmlal.s32 q4, d24, d29
948 + vmlal.s32 q8, d23, d29
949 + vmlal.s32 q8, d24, d28
950 + vmlal.s32 q7, d22, d29
951 + vmlal.s32 q7, d23, d28
952 + add r2, sp, #608
953 + vst1.8 {d8-d9}, [r2, : 128]
954 + add r2, sp, #560
955 + vld1.8 {d8-d9}, [r2, : 128]
956 + vmlal.s32 q7, d24, d9
957 + vmlal.s32 q7, d25, d31
958 + vmull.s32 q1, d18, d2
959 + vmlal.s32 q1, d19, d1
960 + vmlal.s32 q1, d22, d0
961 + vmlal.s32 q1, d24, d27
962 + vmlal.s32 q1, d23, d20
963 + vmlal.s32 q1, d12, d7
964 + vmlal.s32 q1, d13, d6
965 + vmull.s32 q6, d18, d1
966 + vmlal.s32 q6, d19, d0
967 + vmlal.s32 q6, d23, d27
968 + vmlal.s32 q6, d22, d20
969 + vmlal.s32 q6, d24, d26
970 + vmull.s32 q0, d18, d0
971 + vmlal.s32 q0, d22, d27
972 + vmlal.s32 q0, d23, d26
973 + vmlal.s32 q0, d24, d31
974 + vmlal.s32 q0, d19, d20
975 + add r2, sp, #640
976 + vld1.8 {d18-d19}, [r2, : 128]
977 + vmlal.s32 q2, d18, d7
978 + vmlal.s32 q2, d19, d6
979 + vmlal.s32 q5, d18, d6
980 + vmlal.s32 q5, d19, d21
981 + vmlal.s32 q1, d18, d21
982 + vmlal.s32 q1, d19, d29
983 + vmlal.s32 q0, d18, d28
984 + vmlal.s32 q0, d19, d9
985 + vmlal.s32 q6, d18, d29
986 + vmlal.s32 q6, d19, d28
987 + add r2, sp, #592
988 + vld1.8 {d18-d19}, [r2, : 128]
989 + add r2, sp, #512
990 + vld1.8 {d22-d23}, [r2, : 128]
991 + vmlal.s32 q5, d19, d7
992 + vmlal.s32 q0, d18, d21
993 + vmlal.s32 q0, d19, d29
994 + vmlal.s32 q6, d18, d6
995 + add r2, sp, #528
996 + vld1.8 {d6-d7}, [r2, : 128]
997 + vmlal.s32 q6, d19, d21
998 + add r2, sp, #576
999 + vld1.8 {d18-d19}, [r2, : 128]
1000 + vmlal.s32 q0, d30, d8
1001 + add r2, sp, #672
1002 + vld1.8 {d20-d21}, [r2, : 128]
1003 + vmlal.s32 q5, d30, d29
1004 + add r2, sp, #608
1005 + vld1.8 {d24-d25}, [r2, : 128]
1006 + vmlal.s32 q1, d30, d28
1007 + vadd.i64 q13, q0, q11
1008 + vadd.i64 q14, q5, q11
1009 + vmlal.s32 q6, d30, d9
1010 + vshr.s64 q4, q13, #26
1011 + vshr.s64 q13, q14, #26
1012 + vadd.i64 q7, q7, q4
1013 + vshl.i64 q4, q4, #26
1014 + vadd.i64 q14, q7, q3
1015 + vadd.i64 q9, q9, q13
1016 + vshl.i64 q13, q13, #26
1017 + vadd.i64 q15, q9, q3
1018 + vsub.i64 q0, q0, q4
1019 + vshr.s64 q4, q14, #25
1020 + vsub.i64 q5, q5, q13
1021 + vshr.s64 q13, q15, #25
1022 + vadd.i64 q6, q6, q4
1023 + vshl.i64 q4, q4, #25
1024 + vadd.i64 q14, q6, q11
1025 + vadd.i64 q2, q2, q13
1026 + vsub.i64 q4, q7, q4
1027 + vshr.s64 q7, q14, #26
1028 + vshl.i64 q13, q13, #25
1029 + vadd.i64 q14, q2, q11
1030 + vadd.i64 q8, q8, q7
1031 + vshl.i64 q7, q7, #26
1032 + vadd.i64 q15, q8, q3
1033 + vsub.i64 q9, q9, q13
1034 + vshr.s64 q13, q14, #26
1035 + vsub.i64 q6, q6, q7
1036 + vshr.s64 q7, q15, #25
1037 + vadd.i64 q10, q10, q13
1038 + vshl.i64 q13, q13, #26
1039 + vadd.i64 q14, q10, q3
1040 + vadd.i64 q1, q1, q7
1041 + add r2, r3, #288
1042 + vshl.i64 q7, q7, #25
1043 + add r4, r3, #96
1044 + vadd.i64 q15, q1, q11
1045 + add r2, r2, #8
1046 + vsub.i64 q2, q2, q13
1047 + add r4, r4, #8
1048 + vshr.s64 q13, q14, #25
1049 + vsub.i64 q7, q8, q7
1050 + vshr.s64 q8, q15, #26
1051 + vadd.i64 q14, q13, q13
1052 + vadd.i64 q12, q12, q8
1053 + vtrn.32 d12, d14
1054 + vshl.i64 q8, q8, #26
1055 + vtrn.32 d13, d15
1056 + vadd.i64 q3, q12, q3
1057 + vadd.i64 q0, q0, q14
1058 + vst1.8 d12, [r2, : 64]!
1059 + vshl.i64 q7, q13, #4
1060 + vst1.8 d13, [r4, : 64]!
1061 + vsub.i64 q1, q1, q8
1062 + vshr.s64 q3, q3, #25
1063 + vadd.i64 q0, q0, q7
1064 + vadd.i64 q5, q5, q3
1065 + vshl.i64 q3, q3, #25
1066 + vadd.i64 q6, q5, q11
1067 + vadd.i64 q0, q0, q13
1068 + vshl.i64 q7, q13, #25
1069 + vadd.i64 q8, q0, q11
1070 + vsub.i64 q3, q12, q3
1071 + vshr.s64 q6, q6, #26
1072 + vsub.i64 q7, q10, q7
1073 + vtrn.32 d2, d6
1074 + vshr.s64 q8, q8, #26
1075 + vtrn.32 d3, d7
1076 + vadd.i64 q3, q9, q6
1077 + vst1.8 d2, [r2, : 64]
1078 + vshl.i64 q6, q6, #26
1079 + vst1.8 d3, [r4, : 64]
1080 + vadd.i64 q1, q4, q8
1081 + vtrn.32 d4, d14
1082 + vshl.i64 q4, q8, #26
1083 + vtrn.32 d5, d15
1084 + vsub.i64 q5, q5, q6
1085 + add r2, r2, #16
1086 + vsub.i64 q0, q0, q4
1087 + vst1.8 d4, [r2, : 64]
1088 + add r4, r4, #16
1089 + vst1.8 d5, [r4, : 64]
1090 + vtrn.32 d10, d6
1091 + vtrn.32 d11, d7
1092 + sub r2, r2, #8
1093 + sub r4, r4, #8
1094 + vtrn.32 d0, d2
1095 + vtrn.32 d1, d3
1096 + vst1.8 d10, [r2, : 64]
1097 + vst1.8 d11, [r4, : 64]
1098 + sub r2, r2, #24
1099 + sub r4, r4, #24
1100 + vst1.8 d0, [r2, : 64]
1101 + vst1.8 d1, [r4, : 64]
1102 + add r2, sp, #544
1103 + add r4, r3, #144
1104 + add r5, r3, #192
1105 + vld1.8 {d0-d1}, [r2, : 128]
1106 + vld1.8 {d2-d3}, [r4, : 128]!
1107 + vld1.8 {d4-d5}, [r5, : 128]!
1108 + vzip.i32 q1, q2
1109 + vld1.8 {d6-d7}, [r4, : 128]!
1110 + vld1.8 {d8-d9}, [r5, : 128]!
1111 + vshl.i32 q5, q1, #1
1112 + vzip.i32 q3, q4
1113 + vshl.i32 q6, q2, #1
1114 + vld1.8 {d14}, [r4, : 64]
1115 + vshl.i32 q8, q3, #1
1116 + vld1.8 {d15}, [r5, : 64]
1117 + vshl.i32 q9, q4, #1
1118 + vmul.i32 d21, d7, d1
1119 + vtrn.32 d14, d15
1120 + vmul.i32 q11, q4, q0
1121 + vmul.i32 q0, q7, q0
1122 + vmull.s32 q12, d2, d2
1123 + vmlal.s32 q12, d11, d1
1124 + vmlal.s32 q12, d12, d0
1125 + vmlal.s32 q12, d13, d23
1126 + vmlal.s32 q12, d16, d22
1127 + vmlal.s32 q12, d7, d21
1128 + vmull.s32 q10, d2, d11
1129 + vmlal.s32 q10, d4, d1
1130 + vmlal.s32 q10, d13, d0
1131 + vmlal.s32 q10, d6, d23
1132 + vmlal.s32 q10, d17, d22
1133 + vmull.s32 q13, d10, d4
1134 + vmlal.s32 q13, d11, d3
1135 + vmlal.s32 q13, d13, d1
1136 + vmlal.s32 q13, d16, d0
1137 + vmlal.s32 q13, d17, d23
1138 + vmlal.s32 q13, d8, d22
1139 + vmull.s32 q1, d10, d5
1140 + vmlal.s32 q1, d11, d4
1141 + vmlal.s32 q1, d6, d1
1142 + vmlal.s32 q1, d17, d0
1143 + vmlal.s32 q1, d8, d23
1144 + vmull.s32 q14, d10, d6
1145 + vmlal.s32 q14, d11, d13
1146 + vmlal.s32 q14, d4, d4
1147 + vmlal.s32 q14, d17, d1
1148 + vmlal.s32 q14, d18, d0
1149 + vmlal.s32 q14, d9, d23
1150 + vmull.s32 q11, d10, d7
1151 + vmlal.s32 q11, d11, d6
1152 + vmlal.s32 q11, d12, d5
1153 + vmlal.s32 q11, d8, d1
1154 + vmlal.s32 q11, d19, d0
1155 + vmull.s32 q15, d10, d8
1156 + vmlal.s32 q15, d11, d17
1157 + vmlal.s32 q15, d12, d6
1158 + vmlal.s32 q15, d13, d5
1159 + vmlal.s32 q15, d19, d1
1160 + vmlal.s32 q15, d14, d0
1161 + vmull.s32 q2, d10, d9
1162 + vmlal.s32 q2, d11, d8
1163 + vmlal.s32 q2, d12, d7
1164 + vmlal.s32 q2, d13, d6
1165 + vmlal.s32 q2, d14, d1
1166 + vmull.s32 q0, d15, d1
1167 + vmlal.s32 q0, d10, d14
1168 + vmlal.s32 q0, d11, d19
1169 + vmlal.s32 q0, d12, d8
1170 + vmlal.s32 q0, d13, d17
1171 + vmlal.s32 q0, d6, d6
1172 + add r2, sp, #512
1173 + vld1.8 {d18-d19}, [r2, : 128]
1174 + vmull.s32 q3, d16, d7
1175 + vmlal.s32 q3, d10, d15
1176 + vmlal.s32 q3, d11, d14
1177 + vmlal.s32 q3, d12, d9
1178 + vmlal.s32 q3, d13, d8
1179 + add r2, sp, #528
1180 + vld1.8 {d8-d9}, [r2, : 128]
1181 + vadd.i64 q5, q12, q9
1182 + vadd.i64 q6, q15, q9
1183 + vshr.s64 q5, q5, #26
1184 + vshr.s64 q6, q6, #26
1185 + vadd.i64 q7, q10, q5
1186 + vshl.i64 q5, q5, #26
1187 + vadd.i64 q8, q7, q4
1188 + vadd.i64 q2, q2, q6
1189 + vshl.i64 q6, q6, #26
1190 + vadd.i64 q10, q2, q4
1191 + vsub.i64 q5, q12, q5
1192 + vshr.s64 q8, q8, #25
1193 + vsub.i64 q6, q15, q6
1194 + vshr.s64 q10, q10, #25
1195 + vadd.i64 q12, q13, q8
1196 + vshl.i64 q8, q8, #25
1197 + vadd.i64 q13, q12, q9
1198 + vadd.i64 q0, q0, q10
1199 + vsub.i64 q7, q7, q8
1200 + vshr.s64 q8, q13, #26
1201 + vshl.i64 q10, q10, #25
1202 + vadd.i64 q13, q0, q9
1203 + vadd.i64 q1, q1, q8
1204 + vshl.i64 q8, q8, #26
1205 + vadd.i64 q15, q1, q4
1206 + vsub.i64 q2, q2, q10
1207 + vshr.s64 q10, q13, #26
1208 + vsub.i64 q8, q12, q8
1209 + vshr.s64 q12, q15, #25
1210 + vadd.i64 q3, q3, q10
1211 + vshl.i64 q10, q10, #26
1212 + vadd.i64 q13, q3, q4
1213 + vadd.i64 q14, q14, q12
1214 + add r2, r3, #144
1215 + vshl.i64 q12, q12, #25
1216 + add r4, r3, #192
1217 + vadd.i64 q15, q14, q9
1218 + add r2, r2, #8
1219 + vsub.i64 q0, q0, q10
1220 + add r4, r4, #8
1221 + vshr.s64 q10, q13, #25
1222 + vsub.i64 q1, q1, q12
1223 + vshr.s64 q12, q15, #26
1224 + vadd.i64 q13, q10, q10
1225 + vadd.i64 q11, q11, q12
1226 + vtrn.32 d16, d2
1227 + vshl.i64 q12, q12, #26
1228 + vtrn.32 d17, d3
1229 + vadd.i64 q1, q11, q4
1230 + vadd.i64 q4, q5, q13
1231 + vst1.8 d16, [r2, : 64]!
1232 + vshl.i64 q5, q10, #4
1233 + vst1.8 d17, [r4, : 64]!
1234 + vsub.i64 q8, q14, q12
1235 + vshr.s64 q1, q1, #25
1236 + vadd.i64 q4, q4, q5
1237 + vadd.i64 q5, q6, q1
1238 + vshl.i64 q1, q1, #25
1239 + vadd.i64 q6, q5, q9
1240 + vadd.i64 q4, q4, q10
1241 + vshl.i64 q10, q10, #25
1242 + vadd.i64 q9, q4, q9
1243 + vsub.i64 q1, q11, q1
1244 + vshr.s64 q6, q6, #26
1245 + vsub.i64 q3, q3, q10
1246 + vtrn.32 d16, d2
1247 + vshr.s64 q9, q9, #26
1248 + vtrn.32 d17, d3
1249 + vadd.i64 q1, q2, q6
1250 + vst1.8 d16, [r2, : 64]
1251 + vshl.i64 q2, q6, #26
1252 + vst1.8 d17, [r4, : 64]
1253 + vadd.i64 q6, q7, q9
1254 + vtrn.32 d0, d6
1255 + vshl.i64 q7, q9, #26
1256 + vtrn.32 d1, d7
1257 + vsub.i64 q2, q5, q2
1258 + add r2, r2, #16
1259 + vsub.i64 q3, q4, q7
1260 + vst1.8 d0, [r2, : 64]
1261 + add r4, r4, #16
1262 + vst1.8 d1, [r4, : 64]
1263 + vtrn.32 d4, d2
1264 + vtrn.32 d5, d3
1265 + sub r2, r2, #8
1266 + sub r4, r4, #8
1267 + vtrn.32 d6, d12
1268 + vtrn.32 d7, d13
1269 + vst1.8 d4, [r2, : 64]
1270 + vst1.8 d5, [r4, : 64]
1271 + sub r2, r2, #24
1272 + sub r4, r4, #24
1273 + vst1.8 d6, [r2, : 64]
1274 + vst1.8 d7, [r4, : 64]
1275 + add r2, r3, #336
1276 + add r4, r3, #288
1277 + vld1.8 {d0-d1}, [r2, : 128]!
1278 + vld1.8 {d2-d3}, [r4, : 128]!
1279 + vadd.i32 q0, q0, q1
1280 + vld1.8 {d2-d3}, [r2, : 128]!
1281 + vld1.8 {d4-d5}, [r4, : 128]!
1282 + vadd.i32 q1, q1, q2
1283 + add r5, r3, #288
1284 + vld1.8 {d4}, [r2, : 64]
1285 + vld1.8 {d6}, [r4, : 64]
1286 + vadd.i32 q2, q2, q3
1287 + vst1.8 {d0-d1}, [r5, : 128]!
1288 + vst1.8 {d2-d3}, [r5, : 128]!
1289 + vst1.8 d4, [r5, : 64]
1290 + add r2, r3, #48
1291 + add r4, r3, #144
1292 + vld1.8 {d0-d1}, [r4, : 128]!
1293 + vld1.8 {d2-d3}, [r4, : 128]!
1294 + vld1.8 {d4}, [r4, : 64]
1295 + add r4, r3, #288
1296 + vld1.8 {d6-d7}, [r4, : 128]!
1297 + vtrn.32 q0, q3
1298 + vld1.8 {d8-d9}, [r4, : 128]!
1299 + vshl.i32 q5, q0, #4
1300 + vtrn.32 q1, q4
1301 + vshl.i32 q6, q3, #4
1302 + vadd.i32 q5, q5, q0
1303 + vadd.i32 q6, q6, q3
1304 + vshl.i32 q7, q1, #4
1305 + vld1.8 {d5}, [r4, : 64]
1306 + vshl.i32 q8, q4, #4
1307 + vtrn.32 d4, d5
1308 + vadd.i32 q7, q7, q1
1309 + vadd.i32 q8, q8, q4
1310 + vld1.8 {d18-d19}, [r2, : 128]!
1311 + vshl.i32 q10, q2, #4
1312 + vld1.8 {d22-d23}, [r2, : 128]!
1313 + vadd.i32 q10, q10, q2
1314 + vld1.8 {d24}, [r2, : 64]
1315 + vadd.i32 q5, q5, q0
1316 + add r2, r3, #240
1317 + vld1.8 {d26-d27}, [r2, : 128]!
1318 + vadd.i32 q6, q6, q3
1319 + vld1.8 {d28-d29}, [r2, : 128]!
1320 + vadd.i32 q8, q8, q4
1321 + vld1.8 {d25}, [r2, : 64]
1322 + vadd.i32 q10, q10, q2
1323 + vtrn.32 q9, q13
1324 + vadd.i32 q7, q7, q1
1325 + vadd.i32 q5, q5, q0
1326 + vtrn.32 q11, q14
1327 + vadd.i32 q6, q6, q3
1328 + add r2, sp, #560
1329 + vadd.i32 q10, q10, q2
1330 + vtrn.32 d24, d25
1331 + vst1.8 {d12-d13}, [r2, : 128]
1332 + vshl.i32 q6, q13, #1
1333 + add r2, sp, #576
1334 + vst1.8 {d20-d21}, [r2, : 128]
1335 + vshl.i32 q10, q14, #1
1336 + add r2, sp, #592
1337 + vst1.8 {d12-d13}, [r2, : 128]
1338 + vshl.i32 q15, q12, #1
1339 + vadd.i32 q8, q8, q4
1340 + vext.32 d10, d31, d30, #0
1341 + vadd.i32 q7, q7, q1
1342 + add r2, sp, #608
1343 + vst1.8 {d16-d17}, [r2, : 128]
1344 + vmull.s32 q8, d18, d5
1345 + vmlal.s32 q8, d26, d4
1346 + vmlal.s32 q8, d19, d9
1347 + vmlal.s32 q8, d27, d3
1348 + vmlal.s32 q8, d22, d8
1349 + vmlal.s32 q8, d28, d2
1350 + vmlal.s32 q8, d23, d7
1351 + vmlal.s32 q8, d29, d1
1352 + vmlal.s32 q8, d24, d6
1353 + vmlal.s32 q8, d25, d0
1354 + add r2, sp, #624
1355 + vst1.8 {d14-d15}, [r2, : 128]
1356 + vmull.s32 q2, d18, d4
1357 + vmlal.s32 q2, d12, d9
1358 + vmlal.s32 q2, d13, d8
1359 + vmlal.s32 q2, d19, d3
1360 + vmlal.s32 q2, d22, d2
1361 + vmlal.s32 q2, d23, d1
1362 + vmlal.s32 q2, d24, d0
1363 + add r2, sp, #640
1364 + vst1.8 {d20-d21}, [r2, : 128]
1365 + vmull.s32 q7, d18, d9
1366 + vmlal.s32 q7, d26, d3
1367 + vmlal.s32 q7, d19, d8
1368 + vmlal.s32 q7, d27, d2
1369 + vmlal.s32 q7, d22, d7
1370 + vmlal.s32 q7, d28, d1
1371 + vmlal.s32 q7, d23, d6
1372 + vmlal.s32 q7, d29, d0
1373 + add r2, sp, #656
1374 + vst1.8 {d10-d11}, [r2, : 128]
1375 + vmull.s32 q5, d18, d3
1376 + vmlal.s32 q5, d19, d2
1377 + vmlal.s32 q5, d22, d1
1378 + vmlal.s32 q5, d23, d0
1379 + vmlal.s32 q5, d12, d8
1380 + add r2, sp, #672
1381 + vst1.8 {d16-d17}, [r2, : 128]
1382 + vmull.s32 q4, d18, d8
1383 + vmlal.s32 q4, d26, d2
1384 + vmlal.s32 q4, d19, d7
1385 + vmlal.s32 q4, d27, d1
1386 + vmlal.s32 q4, d22, d6
1387 + vmlal.s32 q4, d28, d0
1388 + vmull.s32 q8, d18, d7
1389 + vmlal.s32 q8, d26, d1
1390 + vmlal.s32 q8, d19, d6
1391 + vmlal.s32 q8, d27, d0
1392 + add r2, sp, #576
1393 + vld1.8 {d20-d21}, [r2, : 128]
1394 + vmlal.s32 q7, d24, d21
1395 + vmlal.s32 q7, d25, d20
1396 + vmlal.s32 q4, d23, d21
1397 + vmlal.s32 q4, d29, d20
1398 + vmlal.s32 q8, d22, d21
1399 + vmlal.s32 q8, d28, d20
1400 + vmlal.s32 q5, d24, d20
1401 + add r2, sp, #576
1402 + vst1.8 {d14-d15}, [r2, : 128]
1403 + vmull.s32 q7, d18, d6
1404 + vmlal.s32 q7, d26, d0
1405 + add r2, sp, #656
1406 + vld1.8 {d30-d31}, [r2, : 128]
1407 + vmlal.s32 q2, d30, d21
1408 + vmlal.s32 q7, d19, d21
1409 + vmlal.s32 q7, d27, d20
1410 + add r2, sp, #624
1411 + vld1.8 {d26-d27}, [r2, : 128]
1412 + vmlal.s32 q4, d25, d27
1413 + vmlal.s32 q8, d29, d27
1414 + vmlal.s32 q8, d25, d26
1415 + vmlal.s32 q7, d28, d27
1416 + vmlal.s32 q7, d29, d26
1417 + add r2, sp, #608
1418 + vld1.8 {d28-d29}, [r2, : 128]
1419 + vmlal.s32 q4, d24, d29
1420 + vmlal.s32 q8, d23, d29
1421 + vmlal.s32 q8, d24, d28
1422 + vmlal.s32 q7, d22, d29
1423 + vmlal.s32 q7, d23, d28
1424 + add r2, sp, #608
1425 + vst1.8 {d8-d9}, [r2, : 128]
1426 + add r2, sp, #560
1427 + vld1.8 {d8-d9}, [r2, : 128]
1428 + vmlal.s32 q7, d24, d9
1429 + vmlal.s32 q7, d25, d31
1430 + vmull.s32 q1, d18, d2
1431 + vmlal.s32 q1, d19, d1
1432 + vmlal.s32 q1, d22, d0
1433 + vmlal.s32 q1, d24, d27
1434 + vmlal.s32 q1, d23, d20
1435 + vmlal.s32 q1, d12, d7
1436 + vmlal.s32 q1, d13, d6
1437 + vmull.s32 q6, d18, d1
1438 + vmlal.s32 q6, d19, d0
1439 + vmlal.s32 q6, d23, d27
1440 + vmlal.s32 q6, d22, d20
1441 + vmlal.s32 q6, d24, d26
1442 + vmull.s32 q0, d18, d0
1443 + vmlal.s32 q0, d22, d27
1444 + vmlal.s32 q0, d23, d26
1445 + vmlal.s32 q0, d24, d31
1446 + vmlal.s32 q0, d19, d20
1447 + add r2, sp, #640
1448 + vld1.8 {d18-d19}, [r2, : 128]
1449 + vmlal.s32 q2, d18, d7
1450 + vmlal.s32 q2, d19, d6
1451 + vmlal.s32 q5, d18, d6
1452 + vmlal.s32 q5, d19, d21
1453 + vmlal.s32 q1, d18, d21
1454 + vmlal.s32 q1, d19, d29
1455 + vmlal.s32 q0, d18, d28
1456 + vmlal.s32 q0, d19, d9
1457 + vmlal.s32 q6, d18, d29
1458 + vmlal.s32 q6, d19, d28
1459 + add r2, sp, #592
1460 + vld1.8 {d18-d19}, [r2, : 128]
1461 + add r2, sp, #512
1462 + vld1.8 {d22-d23}, [r2, : 128]
1463 + vmlal.s32 q5, d19, d7
1464 + vmlal.s32 q0, d18, d21
1465 + vmlal.s32 q0, d19, d29
1466 + vmlal.s32 q6, d18, d6
1467 + add r2, sp, #528
1468 + vld1.8 {d6-d7}, [r2, : 128]
1469 + vmlal.s32 q6, d19, d21
1470 + add r2, sp, #576
1471 + vld1.8 {d18-d19}, [r2, : 128]
1472 + vmlal.s32 q0, d30, d8
1473 + add r2, sp, #672
1474 + vld1.8 {d20-d21}, [r2, : 128]
1475 + vmlal.s32 q5, d30, d29
1476 + add r2, sp, #608
1477 + vld1.8 {d24-d25}, [r2, : 128]
1478 + vmlal.s32 q1, d30, d28
1479 + vadd.i64 q13, q0, q11
1480 + vadd.i64 q14, q5, q11
1481 + vmlal.s32 q6, d30, d9
1482 + vshr.s64 q4, q13, #26
1483 + vshr.s64 q13, q14, #26
1484 + vadd.i64 q7, q7, q4
1485 + vshl.i64 q4, q4, #26
1486 + vadd.i64 q14, q7, q3
1487 + vadd.i64 q9, q9, q13
1488 + vshl.i64 q13, q13, #26
1489 + vadd.i64 q15, q9, q3
1490 + vsub.i64 q0, q0, q4
1491 + vshr.s64 q4, q14, #25
1492 + vsub.i64 q5, q5, q13
1493 + vshr.s64 q13, q15, #25
1494 + vadd.i64 q6, q6, q4
1495 + vshl.i64 q4, q4, #25
1496 + vadd.i64 q14, q6, q11
1497 + vadd.i64 q2, q2, q13
1498 + vsub.i64 q4, q7, q4
1499 + vshr.s64 q7, q14, #26
1500 + vshl.i64 q13, q13, #25
1501 + vadd.i64 q14, q2, q11
1502 + vadd.i64 q8, q8, q7
1503 + vshl.i64 q7, q7, #26
1504 + vadd.i64 q15, q8, q3
1505 + vsub.i64 q9, q9, q13
1506 + vshr.s64 q13, q14, #26
1507 + vsub.i64 q6, q6, q7
1508 + vshr.s64 q7, q15, #25
1509 + vadd.i64 q10, q10, q13
1510 + vshl.i64 q13, q13, #26
1511 + vadd.i64 q14, q10, q3
1512 + vadd.i64 q1, q1, q7
1513 + add r2, r3, #240
1514 + vshl.i64 q7, q7, #25
1515 + add r4, r3, #144
1516 + vadd.i64 q15, q1, q11
1517 + add r2, r2, #8
1518 + vsub.i64 q2, q2, q13
1519 + add r4, r4, #8
1520 + vshr.s64 q13, q14, #25
1521 + vsub.i64 q7, q8, q7
1522 + vshr.s64 q8, q15, #26
1523 + vadd.i64 q14, q13, q13
1524 + vadd.i64 q12, q12, q8
1525 + vtrn.32 d12, d14
1526 + vshl.i64 q8, q8, #26
1527 + vtrn.32 d13, d15
1528 + vadd.i64 q3, q12, q3
1529 + vadd.i64 q0, q0, q14
1530 + vst1.8 d12, [r2, : 64]!
1531 + vshl.i64 q7, q13, #4
1532 + vst1.8 d13, [r4, : 64]!
1533 + vsub.i64 q1, q1, q8
1534 + vshr.s64 q3, q3, #25
1535 + vadd.i64 q0, q0, q7
1536 + vadd.i64 q5, q5, q3
1537 + vshl.i64 q3, q3, #25
1538 + vadd.i64 q6, q5, q11
1539 + vadd.i64 q0, q0, q13
1540 + vshl.i64 q7, q13, #25
1541 + vadd.i64 q8, q0, q11
1542 + vsub.i64 q3, q12, q3
1543 + vshr.s64 q6, q6, #26
1544 + vsub.i64 q7, q10, q7
1545 + vtrn.32 d2, d6
1546 + vshr.s64 q8, q8, #26
1547 + vtrn.32 d3, d7
1548 + vadd.i64 q3, q9, q6
1549 + vst1.8 d2, [r2, : 64]
1550 + vshl.i64 q6, q6, #26
1551 + vst1.8 d3, [r4, : 64]
1552 + vadd.i64 q1, q4, q8
1553 + vtrn.32 d4, d14
1554 + vshl.i64 q4, q8, #26
1555 + vtrn.32 d5, d15
1556 + vsub.i64 q5, q5, q6
1557 + add r2, r2, #16
1558 + vsub.i64 q0, q0, q4
1559 + vst1.8 d4, [r2, : 64]
1560 + add r4, r4, #16
1561 + vst1.8 d5, [r4, : 64]
1562 + vtrn.32 d10, d6
1563 + vtrn.32 d11, d7
1564 + sub r2, r2, #8
1565 + sub r4, r4, #8
1566 + vtrn.32 d0, d2
1567 + vtrn.32 d1, d3
1568 + vst1.8 d10, [r2, : 64]
1569 + vst1.8 d11, [r4, : 64]
1570 + sub r2, r2, #24
1571 + sub r4, r4, #24
1572 + vst1.8 d0, [r2, : 64]
1573 + vst1.8 d1, [r4, : 64]
1574 + ldr r2, [sp, #488]
1575 + ldr r4, [sp, #492]
1576 + subs r5, r2, #1
1577 + bge ._mainloop
1578 + add r1, r3, #144
1579 + add r2, r3, #336
1580 + vld1.8 {d0-d1}, [r1, : 128]!
1581 + vld1.8 {d2-d3}, [r1, : 128]!
1582 + vld1.8 {d4}, [r1, : 64]
1583 + vst1.8 {d0-d1}, [r2, : 128]!
1584 + vst1.8 {d2-d3}, [r2, : 128]!
1585 + vst1.8 d4, [r2, : 64]
1586 + ldr r1, =0
1587 +._invertloop:
1588 + add r2, r3, #144
1589 + ldr r4, =0
1590 + ldr r5, =2
1591 + cmp r1, #1
1592 + ldreq r5, =1
1593 + addeq r2, r3, #336
1594 + addeq r4, r3, #48
1595 + cmp r1, #2
1596 + ldreq r5, =1
1597 + addeq r2, r3, #48
1598 + cmp r1, #3
1599 + ldreq r5, =5
1600 + addeq r4, r3, #336
1601 + cmp r1, #4
1602 + ldreq r5, =10
1603 + cmp r1, #5
1604 + ldreq r5, =20
1605 + cmp r1, #6
1606 + ldreq r5, =10
1607 + addeq r2, r3, #336
1608 + addeq r4, r3, #336
1609 + cmp r1, #7
1610 + ldreq r5, =50
1611 + cmp r1, #8
1612 + ldreq r5, =100
1613 + cmp r1, #9
1614 + ldreq r5, =50
1615 + addeq r2, r3, #336
1616 + cmp r1, #10
1617 + ldreq r5, =5
1618 + addeq r2, r3, #48
1619 + cmp r1, #11
1620 + ldreq r5, =0
1621 + addeq r2, r3, #96
1622 + add r6, r3, #144
1623 + add r7, r3, #288
1624 + vld1.8 {d0-d1}, [r6, : 128]!
1625 + vld1.8 {d2-d3}, [r6, : 128]!
1626 + vld1.8 {d4}, [r6, : 64]
1627 + vst1.8 {d0-d1}, [r7, : 128]!
1628 + vst1.8 {d2-d3}, [r7, : 128]!
1629 + vst1.8 d4, [r7, : 64]
1630 + cmp r5, #0
1631 + beq ._skipsquaringloop
1632 +._squaringloop:
1633 + add r6, r3, #288
1634 + add r7, r3, #288
1635 + add r8, r3, #288
1636 + vmov.i32 q0, #19
1637 + vmov.i32 q1, #0
1638 + vmov.i32 q2, #1
1639 + vzip.i32 q1, q2
1640 + vld1.8 {d4-d5}, [r7, : 128]!
1641 + vld1.8 {d6-d7}, [r7, : 128]!
1642 + vld1.8 {d9}, [r7, : 64]
1643 + vld1.8 {d10-d11}, [r6, : 128]!
1644 + add r7, sp, #416
1645 + vld1.8 {d12-d13}, [r6, : 128]!
1646 + vmul.i32 q7, q2, q0
1647 + vld1.8 {d8}, [r6, : 64]
1648 + vext.32 d17, d11, d10, #1
1649 + vmul.i32 q9, q3, q0
1650 + vext.32 d16, d10, d8, #1
1651 + vshl.u32 q10, q5, q1
1652 + vext.32 d22, d14, d4, #1
1653 + vext.32 d24, d18, d6, #1
1654 + vshl.u32 q13, q6, q1
1655 + vshl.u32 d28, d8, d2
1656 + vrev64.i32 d22, d22
1657 + vmul.i32 d1, d9, d1
1658 + vrev64.i32 d24, d24
1659 + vext.32 d29, d8, d13, #1
1660 + vext.32 d0, d1, d9, #1
1661 + vrev64.i32 d0, d0
1662 + vext.32 d2, d9, d1, #1
1663 + vext.32 d23, d15, d5, #1
1664 + vmull.s32 q4, d20, d4
1665 + vrev64.i32 d23, d23
1666 + vmlal.s32 q4, d21, d1
1667 + vrev64.i32 d2, d2
1668 + vmlal.s32 q4, d26, d19
1669 + vext.32 d3, d5, d15, #1
1670 + vmlal.s32 q4, d27, d18
1671 + vrev64.i32 d3, d3
1672 + vmlal.s32 q4, d28, d15
1673 + vext.32 d14, d12, d11, #1
1674 + vmull.s32 q5, d16, d23
1675 + vext.32 d15, d13, d12, #1
1676 + vmlal.s32 q5, d17, d4
1677 + vst1.8 d8, [r7, : 64]!
1678 + vmlal.s32 q5, d14, d1
1679 + vext.32 d12, d9, d8, #0
1680 + vmlal.s32 q5, d15, d19
1681 + vmov.i64 d13, #0
1682 + vmlal.s32 q5, d29, d18
1683 + vext.32 d25, d19, d7, #1
1684 + vmlal.s32 q6, d20, d5
1685 + vrev64.i32 d25, d25
1686 + vmlal.s32 q6, d21, d4
1687 + vst1.8 d11, [r7, : 64]!
1688 + vmlal.s32 q6, d26, d1
1689 + vext.32 d9, d10, d10, #0
1690 + vmlal.s32 q6, d27, d19
1691 + vmov.i64 d8, #0
1692 + vmlal.s32 q6, d28, d18
1693 + vmlal.s32 q4, d16, d24
1694 + vmlal.s32 q4, d17, d5
1695 + vmlal.s32 q4, d14, d4
1696 + vst1.8 d12, [r7, : 64]!
1697 + vmlal.s32 q4, d15, d1
1698 + vext.32 d10, d13, d12, #0
1699 + vmlal.s32 q4, d29, d19
1700 + vmov.i64 d11, #0
1701 + vmlal.s32 q5, d20, d6
1702 + vmlal.s32 q5, d21, d5
1703 + vmlal.s32 q5, d26, d4
1704 + vext.32 d13, d8, d8, #0
1705 + vmlal.s32 q5, d27, d1
1706 + vmov.i64 d12, #0
1707 + vmlal.s32 q5, d28, d19
1708 + vst1.8 d9, [r7, : 64]!
1709 + vmlal.s32 q6, d16, d25
1710 + vmlal.s32 q6, d17, d6
1711 + vst1.8 d10, [r7, : 64]
1712 + vmlal.s32 q6, d14, d5
1713 + vext.32 d8, d11, d10, #0
1714 + vmlal.s32 q6, d15, d4
1715 + vmov.i64 d9, #0
1716 + vmlal.s32 q6, d29, d1
1717 + vmlal.s32 q4, d20, d7
1718 + vmlal.s32 q4, d21, d6
1719 + vmlal.s32 q4, d26, d5
1720 + vext.32 d11, d12, d12, #0
1721 + vmlal.s32 q4, d27, d4
1722 + vmov.i64 d10, #0
1723 + vmlal.s32 q4, d28, d1
1724 + vmlal.s32 q5, d16, d0
1725 + sub r6, r7, #32
1726 + vmlal.s32 q5, d17, d7
1727 + vmlal.s32 q5, d14, d6
1728 + vext.32 d30, d9, d8, #0
1729 + vmlal.s32 q5, d15, d5
1730 + vld1.8 {d31}, [r6, : 64]!
1731 + vmlal.s32 q5, d29, d4
1732 + vmlal.s32 q15, d20, d0
1733 + vext.32 d0, d6, d18, #1
1734 + vmlal.s32 q15, d21, d25
1735 + vrev64.i32 d0, d0
1736 + vmlal.s32 q15, d26, d24
1737 + vext.32 d1, d7, d19, #1
1738 + vext.32 d7, d10, d10, #0
1739 + vmlal.s32 q15, d27, d23
1740 + vrev64.i32 d1, d1
1741 + vld1.8 {d6}, [r6, : 64]
1742 + vmlal.s32 q15, d28, d22
1743 + vmlal.s32 q3, d16, d4
1744 + add r6, r6, #24
1745 + vmlal.s32 q3, d17, d2
1746 + vext.32 d4, d31, d30, #0
1747 + vmov d17, d11
1748 + vmlal.s32 q3, d14, d1
1749 + vext.32 d11, d13, d13, #0
1750 + vext.32 d13, d30, d30, #0
1751 + vmlal.s32 q3, d15, d0
1752 + vext.32 d1, d8, d8, #0
1753 + vmlal.s32 q3, d29, d3
1754 + vld1.8 {d5}, [r6, : 64]
1755 + sub r6, r6, #16
1756 + vext.32 d10, d6, d6, #0
1757 + vmov.i32 q1, #0xffffffff
1758 + vshl.i64 q4, q1, #25
1759 + add r7, sp, #512
1760 + vld1.8 {d14-d15}, [r7, : 128]
1761 + vadd.i64 q9, q2, q7
1762 + vshl.i64 q1, q1, #26
1763 + vshr.s64 q10, q9, #26
1764 + vld1.8 {d0}, [r6, : 64]!
1765 + vadd.i64 q5, q5, q10
1766 + vand q9, q9, q1
1767 + vld1.8 {d16}, [r6, : 64]!
1768 + add r6, sp, #528
1769 + vld1.8 {d20-d21}, [r6, : 128]
1770 + vadd.i64 q11, q5, q10
1771 + vsub.i64 q2, q2, q9
1772 + vshr.s64 q9, q11, #25
1773 + vext.32 d12, d5, d4, #0
1774 + vand q11, q11, q4
1775 + vadd.i64 q0, q0, q9
1776 + vmov d19, d7
1777 + vadd.i64 q3, q0, q7
1778 + vsub.i64 q5, q5, q11
1779 + vshr.s64 q11, q3, #26
1780 + vext.32 d18, d11, d10, #0
1781 + vand q3, q3, q1
1782 + vadd.i64 q8, q8, q11
1783 + vadd.i64 q11, q8, q10
1784 + vsub.i64 q0, q0, q3
1785 + vshr.s64 q3, q11, #25
1786 + vand q11, q11, q4
1787 + vadd.i64 q3, q6, q3
1788 + vadd.i64 q6, q3, q7
1789 + vsub.i64 q8, q8, q11
1790 + vshr.s64 q11, q6, #26
1791 + vand q6, q6, q1
1792 + vadd.i64 q9, q9, q11
1793 + vadd.i64 d25, d19, d21
1794 + vsub.i64 q3, q3, q6
1795 + vshr.s64 d23, d25, #25
1796 + vand q4, q12, q4
1797 + vadd.i64 d21, d23, d23
1798 + vshl.i64 d25, d23, #4
1799 + vadd.i64 d21, d21, d23
1800 + vadd.i64 d25, d25, d21
1801 + vadd.i64 d4, d4, d25
1802 + vzip.i32 q0, q8
1803 + vadd.i64 d12, d4, d14
1804 + add r6, r8, #8
1805 + vst1.8 d0, [r6, : 64]
1806 + vsub.i64 d19, d19, d9
1807 + add r6, r6, #16
1808 + vst1.8 d16, [r6, : 64]
1809 + vshr.s64 d22, d12, #26
1810 + vand q0, q6, q1
1811 + vadd.i64 d10, d10, d22
1812 + vzip.i32 q3, q9
1813 + vsub.i64 d4, d4, d0
1814 + sub r6, r6, #8
1815 + vst1.8 d6, [r6, : 64]
1816 + add r6, r6, #16
1817 + vst1.8 d18, [r6, : 64]
1818 + vzip.i32 q2, q5
1819 + sub r6, r6, #32
1820 + vst1.8 d4, [r6, : 64]
1821 + subs r5, r5, #1
1822 + bhi ._squaringloop
1823 +._skipsquaringloop:
1824 + mov r2, r2
1825 + add r5, r3, #288
1826 + add r6, r3, #144
1827 + vmov.i32 q0, #19
1828 + vmov.i32 q1, #0
1829 + vmov.i32 q2, #1
1830 + vzip.i32 q1, q2
1831 + vld1.8 {d4-d5}, [r5, : 128]!
1832 + vld1.8 {d6-d7}, [r5, : 128]!
1833 + vld1.8 {d9}, [r5, : 64]
1834 + vld1.8 {d10-d11}, [r2, : 128]!
1835 + add r5, sp, #416
1836 + vld1.8 {d12-d13}, [r2, : 128]!
1837 + vmul.i32 q7, q2, q0
1838 + vld1.8 {d8}, [r2, : 64]
1839 + vext.32 d17, d11, d10, #1
1840 + vmul.i32 q9, q3, q0
1841 + vext.32 d16, d10, d8, #1
1842 + vshl.u32 q10, q5, q1
1843 + vext.32 d22, d14, d4, #1
1844 + vext.32 d24, d18, d6, #1
1845 + vshl.u32 q13, q6, q1
1846 + vshl.u32 d28, d8, d2
1847 + vrev64.i32 d22, d22
1848 + vmul.i32 d1, d9, d1
1849 + vrev64.i32 d24, d24
1850 + vext.32 d29, d8, d13, #1
1851 + vext.32 d0, d1, d9, #1
1852 + vrev64.i32 d0, d0
1853 + vext.32 d2, d9, d1, #1
1854 + vext.32 d23, d15, d5, #1
1855 + vmull.s32 q4, d20, d4
1856 + vrev64.i32 d23, d23
1857 + vmlal.s32 q4, d21, d1
1858 + vrev64.i32 d2, d2
1859 + vmlal.s32 q4, d26, d19
1860 + vext.32 d3, d5, d15, #1
1861 + vmlal.s32 q4, d27, d18
1862 + vrev64.i32 d3, d3
1863 + vmlal.s32 q4, d28, d15
1864 + vext.32 d14, d12, d11, #1
1865 + vmull.s32 q5, d16, d23
1866 + vext.32 d15, d13, d12, #1
1867 + vmlal.s32 q5, d17, d4
1868 + vst1.8 d8, [r5, : 64]!
1869 + vmlal.s32 q5, d14, d1
1870 + vext.32 d12, d9, d8, #0
1871 + vmlal.s32 q5, d15, d19
1872 + vmov.i64 d13, #0
1873 + vmlal.s32 q5, d29, d18
1874 + vext.32 d25, d19, d7, #1
1875 + vmlal.s32 q6, d20, d5
1876 + vrev64.i32 d25, d25
1877 + vmlal.s32 q6, d21, d4
1878 + vst1.8 d11, [r5, : 64]!
1879 + vmlal.s32 q6, d26, d1
1880 + vext.32 d9, d10, d10, #0
1881 + vmlal.s32 q6, d27, d19
1882 + vmov.i64 d8, #0
1883 + vmlal.s32 q6, d28, d18
1884 + vmlal.s32 q4, d16, d24
1885 + vmlal.s32 q4, d17, d5
1886 + vmlal.s32 q4, d14, d4
1887 + vst1.8 d12, [r5, : 64]!
1888 + vmlal.s32 q4, d15, d1
1889 + vext.32 d10, d13, d12, #0
1890 + vmlal.s32 q4, d29, d19
1891 + vmov.i64 d11, #0
1892 + vmlal.s32 q5, d20, d6
1893 + vmlal.s32 q5, d21, d5
1894 + vmlal.s32 q5, d26, d4
1895 + vext.32 d13, d8, d8, #0
1896 + vmlal.s32 q5, d27, d1
1897 + vmov.i64 d12, #0
1898 + vmlal.s32 q5, d28, d19
1899 + vst1.8 d9, [r5, : 64]!
1900 + vmlal.s32 q6, d16, d25
1901 + vmlal.s32 q6, d17, d6
1902 + vst1.8 d10, [r5, : 64]
1903 + vmlal.s32 q6, d14, d5
1904 + vext.32 d8, d11, d10, #0
1905 + vmlal.s32 q6, d15, d4
1906 + vmov.i64 d9, #0
1907 + vmlal.s32 q6, d29, d1
1908 + vmlal.s32 q4, d20, d7
1909 + vmlal.s32 q4, d21, d6
1910 + vmlal.s32 q4, d26, d5
1911 + vext.32 d11, d12, d12, #0
1912 + vmlal.s32 q4, d27, d4
1913 + vmov.i64 d10, #0
1914 + vmlal.s32 q4, d28, d1
1915 + vmlal.s32 q5, d16, d0
1916 + sub r2, r5, #32
1917 + vmlal.s32 q5, d17, d7
1918 + vmlal.s32 q5, d14, d6
1919 + vext.32 d30, d9, d8, #0
1920 + vmlal.s32 q5, d15, d5
1921 + vld1.8 {d31}, [r2, : 64]!
1922 + vmlal.s32 q5, d29, d4
1923 + vmlal.s32 q15, d20, d0
1924 + vext.32 d0, d6, d18, #1
1925 + vmlal.s32 q15, d21, d25
1926 + vrev64.i32 d0, d0
1927 + vmlal.s32 q15, d26, d24
1928 + vext.32 d1, d7, d19, #1
1929 + vext.32 d7, d10, d10, #0
1930 + vmlal.s32 q15, d27, d23
1931 + vrev64.i32 d1, d1
1932 + vld1.8 {d6}, [r2, : 64]
1933 + vmlal.s32 q15, d28, d22
1934 + vmlal.s32 q3, d16, d4
1935 + add r2, r2, #24
1936 + vmlal.s32 q3, d17, d2
1937 + vext.32 d4, d31, d30, #0
1938 + vmov d17, d11
1939 + vmlal.s32 q3, d14, d1
1940 + vext.32 d11, d13, d13, #0
1941 + vext.32 d13, d30, d30, #0
1942 + vmlal.s32 q3, d15, d0
1943 + vext.32 d1, d8, d8, #0
1944 + vmlal.s32 q3, d29, d3
1945 + vld1.8 {d5}, [r2, : 64]
1946 + sub r2, r2, #16
1947 + vext.32 d10, d6, d6, #0
1948 + vmov.i32 q1, #0xffffffff
1949 + vshl.i64 q4, q1, #25
1950 + add r5, sp, #512
1951 + vld1.8 {d14-d15}, [r5, : 128]
1952 + vadd.i64 q9, q2, q7
1953 + vshl.i64 q1, q1, #26
1954 + vshr.s64 q10, q9, #26
1955 + vld1.8 {d0}, [r2, : 64]!
1956 + vadd.i64 q5, q5, q10
1957 + vand q9, q9, q1
1958 + vld1.8 {d16}, [r2, : 64]!
1959 + add r2, sp, #528
1960 + vld1.8 {d20-d21}, [r2, : 128]
1961 + vadd.i64 q11, q5, q10
1962 + vsub.i64 q2, q2, q9
1963 + vshr.s64 q9, q11, #25
1964 + vext.32 d12, d5, d4, #0
1965 + vand q11, q11, q4
1966 + vadd.i64 q0, q0, q9
1967 + vmov d19, d7
1968 + vadd.i64 q3, q0, q7
1969 + vsub.i64 q5, q5, q11
1970 + vshr.s64 q11, q3, #26
1971 + vext.32 d18, d11, d10, #0
1972 + vand q3, q3, q1
1973 + vadd.i64 q8, q8, q11
1974 + vadd.i64 q11, q8, q10
1975 + vsub.i64 q0, q0, q3
1976 + vshr.s64 q3, q11, #25
1977 + vand q11, q11, q4
1978 + vadd.i64 q3, q6, q3
1979 + vadd.i64 q6, q3, q7
1980 + vsub.i64 q8, q8, q11
1981 + vshr.s64 q11, q6, #26
1982 + vand q6, q6, q1
1983 + vadd.i64 q9, q9, q11
1984 + vadd.i64 d25, d19, d21
1985 + vsub.i64 q3, q3, q6
1986 + vshr.s64 d23, d25, #25
1987 + vand q4, q12, q4
1988 + vadd.i64 d21, d23, d23
1989 + vshl.i64 d25, d23, #4
1990 + vadd.i64 d21, d21, d23
1991 + vadd.i64 d25, d25, d21
1992 + vadd.i64 d4, d4, d25
1993 + vzip.i32 q0, q8
1994 + vadd.i64 d12, d4, d14
1995 + add r2, r6, #8
1996 + vst1.8 d0, [r2, : 64]
1997 + vsub.i64 d19, d19, d9
1998 + add r2, r2, #16
1999 + vst1.8 d16, [r2, : 64]
2000 + vshr.s64 d22, d12, #26
2001 + vand q0, q6, q1
2002 + vadd.i64 d10, d10, d22
2003 + vzip.i32 q3, q9
2004 + vsub.i64 d4, d4, d0
2005 + sub r2, r2, #8
2006 + vst1.8 d6, [r2, : 64]
2007 + add r2, r2, #16
2008 + vst1.8 d18, [r2, : 64]
2009 + vzip.i32 q2, q5
2010 + sub r2, r2, #32
2011 + vst1.8 d4, [r2, : 64]
2012 + cmp r4, #0
2013 + beq ._skippostcopy
2014 + add r2, r3, #144
2015 + mov r4, r4
2016 + vld1.8 {d0-d1}, [r2, : 128]!
2017 + vld1.8 {d2-d3}, [r2, : 128]!
2018 + vld1.8 {d4}, [r2, : 64]
2019 + vst1.8 {d0-d1}, [r4, : 128]!
2020 + vst1.8 {d2-d3}, [r4, : 128]!
2021 + vst1.8 d4, [r4, : 64]
2022 +._skippostcopy:
2023 + cmp r1, #1
2024 + bne ._skipfinalcopy
2025 + add r2, r3, #288
2026 + add r4, r3, #144
2027 + vld1.8 {d0-d1}, [r2, : 128]!
2028 + vld1.8 {d2-d3}, [r2, : 128]!
2029 + vld1.8 {d4}, [r2, : 64]
2030 + vst1.8 {d0-d1}, [r4, : 128]!
2031 + vst1.8 {d2-d3}, [r4, : 128]!
2032 + vst1.8 d4, [r4, : 64]
2033 +._skipfinalcopy:
2034 + add r1, r1, #1
2035 + cmp r1, #12
2036 + blo ._invertloop
2037 + add r1, r3, #144
2038 + ldr r2, [r1], #4
2039 + ldr r3, [r1], #4
2040 + ldr r4, [r1], #4
2041 + ldr r5, [r1], #4
2042 + ldr r6, [r1], #4
2043 + ldr r7, [r1], #4
2044 + ldr r8, [r1], #4
2045 + ldr r9, [r1], #4
2046 + ldr r10, [r1], #4
2047 + ldr r1, [r1]
2048 + add r11, r1, r1, LSL #4
2049 + add r11, r11, r1, LSL #1
2050 + add r11, r11, #16777216
2051 + mov r11, r11, ASR #25
2052 + add r11, r11, r2
2053 + mov r11, r11, ASR #26
2054 + add r11, r11, r3
2055 + mov r11, r11, ASR #25
2056 + add r11, r11, r4
2057 + mov r11, r11, ASR #26
2058 + add r11, r11, r5
2059 + mov r11, r11, ASR #25
2060 + add r11, r11, r6
2061 + mov r11, r11, ASR #26
2062 + add r11, r11, r7
2063 + mov r11, r11, ASR #25
2064 + add r11, r11, r8
2065 + mov r11, r11, ASR #26
2066 + add r11, r11, r9
2067 + mov r11, r11, ASR #25
2068 + add r11, r11, r10
2069 + mov r11, r11, ASR #26
2070 + add r11, r11, r1
2071 + mov r11, r11, ASR #25
2072 + add r2, r2, r11
2073 + add r2, r2, r11, LSL #1
2074 + add r2, r2, r11, LSL #4
2075 + mov r11, r2, ASR #26
2076 + add r3, r3, r11
2077 + sub r2, r2, r11, LSL #26
2078 + mov r11, r3, ASR #25
2079 + add r4, r4, r11
2080 + sub r3, r3, r11, LSL #25
2081 + mov r11, r4, ASR #26
2082 + add r5, r5, r11
2083 + sub r4, r4, r11, LSL #26
2084 + mov r11, r5, ASR #25
2085 + add r6, r6, r11
2086 + sub r5, r5, r11, LSL #25
2087 + mov r11, r6, ASR #26
2088 + add r7, r7, r11
2089 + sub r6, r6, r11, LSL #26
2090 + mov r11, r7, ASR #25
2091 + add r8, r8, r11
2092 + sub r7, r7, r11, LSL #25
2093 + mov r11, r8, ASR #26
2094 + add r9, r9, r11
2095 + sub r8, r8, r11, LSL #26
2096 + mov r11, r9, ASR #25
2097 + add r10, r10, r11
2098 + sub r9, r9, r11, LSL #25
2099 + mov r11, r10, ASR #26
2100 + add r1, r1, r11
2101 + sub r10, r10, r11, LSL #26
2102 + mov r11, r1, ASR #25
2103 + sub r1, r1, r11, LSL #25
2104 + add r2, r2, r3, LSL #26
2105 + mov r3, r3, LSR #6
2106 + add r3, r3, r4, LSL #19
2107 + mov r4, r4, LSR #13
2108 + add r4, r4, r5, LSL #13
2109 + mov r5, r5, LSR #19
2110 + add r5, r5, r6, LSL #6
2111 + add r6, r7, r8, LSL #25
2112 + mov r7, r8, LSR #7
2113 + add r7, r7, r9, LSL #19
2114 + mov r8, r9, LSR #13
2115 + add r8, r8, r10, LSL #12
2116 + mov r9, r10, LSR #20
2117 + add r1, r9, r1, LSL #6
2118 + str r2, [r0], #4
2119 + str r3, [r0], #4
2120 + str r4, [r0], #4
2121 + str r5, [r0], #4
2122 + str r6, [r0], #4
2123 + str r7, [r0], #4
2124 + str r8, [r0], #4
2125 + str r1, [r0]
2126 + ldrd r4, [sp, #0]
2127 + ldrd r6, [sp, #8]
2128 + ldrd r8, [sp, #16]
2129 + ldrd r10, [sp, #24]
2130 + ldr r12, [sp, #480]
2131 + ldr r14, [sp, #484]
2132 + ldr r0, =0
2133 + mov sp, r12
2134 + vpop {q4, q5, q6, q7}
2135 + bx lr