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