1 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
5 * Based on public domain code from Daniel J. Bernstein and Peter Schwabe. This
6 * began from SUPERCOP's curve25519/neon2/scalarmult.s, but has subsequently been
7 * manually reworked for use in kernel space.
10 #include <linux/linkage.h>
17 ENTRY(curve25519_neon)
21 and r3, r3, #0xfffffff0
31 vst1.8 {d2-d3}, [r6, : 128]!
32 vst1.8 {d0-d1}, [r6, : 128]!
33 vst1.8 {d4-d5}, [r6, : 128]
36 vst1.8 {d4-d5}, [r6, : 128]!
37 vst1.8 {d4-d5}, [r6, : 128]!
43 sub r7, r7, r7, LSL #7
48 vst1.8 {d4-d5}, [r6, : 128]!
49 vst1.8 {d6-d7}, [r6, : 128]
58 vmov.i64 q2, #0xffffffff
80 vshr.u64 q10, q10, #25
82 vshr.u64 q12, q12, #12
83 vshr.u64 q13, q13, #38
97 vshr.s64 q12, q12, #26
98 vshr.s64 q13, q13, #26
100 vshl.i64 q12, q12, #26
102 vadd.i64 q11, q11, q13
103 vshl.i64 q13, q13, #26
104 vadd.i64 q15, q11, q0
106 vshr.s64 q12, q14, #25
107 vsub.i64 q10, q10, q13
108 vshr.s64 q13, q15, #25
110 vshl.i64 q12, q12, #25
114 vshr.s64 q12, q14, #26
115 vshl.i64 q13, q13, #25
118 vshl.i64 q12, q12, #26
120 vsub.i64 q11, q11, q13
121 vshr.s64 q13, q14, #26
123 vshr.s64 q12, q15, #25
125 vshl.i64 q13, q13, #26
128 vshl.i64 q12, q12, #25
132 vshr.s64 q13, q14, #25
134 vshr.s64 q12, q15, #26
135 vadd.i64 q14, q13, q13
138 vshl.i64 q12, q12, #26
142 vst1.8 d12, [r2, : 64]!
151 vshl.i64 q10, q13, #25
160 vst1.8 d14, [r2, : 64]
169 vst1.8 d4, [r2, : 64]
175 vst1.8 d6, [r2, : 64]
177 vst1.8 d2, [r2, : 64]
183 vst1.8 {d2-d3}, [r2, : 128]!
184 vst1.8 {d0-d1}, [r2, : 128]!
185 vst1.8 d0, [r2, : 64]
188 vst1.8 {d0-d1}, [r2, : 128]!
189 vst1.8 {d0-d1}, [r2, : 128]!
190 vst1.8 d0, [r2, : 64]
196 vst1.8 {d2-d3}, [r2, : 128]!
197 vst1.8 {d0-d1}, [r2, : 128]!
198 vst1.8 d0, [r2, : 64]
201 vld1.8 {d0-d1}, [r2, : 128]!
202 vld1.8 {d2-d3}, [r2, : 128]!
203 vld1.8 {d4}, [r2, : 64]
204 vst1.8 {d0-d1}, [r6, : 128]!
205 vst1.8 {d2-d3}, [r6, : 128]!
206 vst1.8 d4, [r6, : 64]
220 vld1.8 {d8-d9}, [r4, : 128]!
222 vld1.8 {d10-d11}, [r5, : 128]!
224 vld1.8 {d14-d15}, [r6, : 128]!
226 vld1.8 {d18-d19}, [r7, : 128]!
228 vld1.8 {d22-d23}, [r4, : 128]!
230 vld1.8 {d24-d25}, [r5, : 128]!
232 vld1.8 {d26-d27}, [r6, : 128]!
234 vld1.8 {d28-d29}, [r7, : 128]!
236 vld1.8 {d0}, [r4, : 64]
238 vld1.8 {d2}, [r5, : 64]
240 vld1.8 {d4}, [r6, : 64]
242 vld1.8 {d6}, [r7, : 64]
264 vst1.8 {d16-d17}, [r2, : 128]!
265 vadd.i32 q6, q11, q12
266 vst1.8 {d8-d9}, [r5, : 128]!
267 vsub.i32 q4, q11, q12
268 vst1.8 {d12-d13}, [r2, : 128]!
270 vst1.8 {d8-d9}, [r5, : 128]!
272 vst1.8 d12, [r2, : 64]
274 vst1.8 d0, [r5, : 64]
276 vst1.8 {d4-d5}, [r4, : 128]!
278 vst1.8 {d0-d1}, [r6, : 128]!
280 vst1.8 {d4-d5}, [r4, : 128]!
282 vst1.8 {d0-d1}, [r6, : 128]!
284 vst1.8 d4, [r4, : 64]
285 vst1.8 d0, [r6, : 64]
289 vld1.8 {d0-d1}, [r2, : 128]
290 vld1.8 {d2-d3}, [r4, : 128]!
291 vld1.8 {d4-d5}, [r5, : 128]!
293 vld1.8 {d6-d7}, [r4, : 128]!
294 vld1.8 {d8-d9}, [r5, : 128]!
298 vld1.8 {d14}, [r4, : 64]
300 vld1.8 {d15}, [r5, : 64]
306 vmull.s32 q12, d2, d2
307 vmlal.s32 q12, d11, d1
308 vmlal.s32 q12, d12, d0
309 vmlal.s32 q12, d13, d23
310 vmlal.s32 q12, d16, d22
311 vmlal.s32 q12, d7, d21
312 vmull.s32 q10, d2, d11
313 vmlal.s32 q10, d4, d1
314 vmlal.s32 q10, d13, d0
315 vmlal.s32 q10, d6, d23
316 vmlal.s32 q10, d17, d22
317 vmull.s32 q13, d10, d4
318 vmlal.s32 q13, d11, d3
319 vmlal.s32 q13, d13, d1
320 vmlal.s32 q13, d16, d0
321 vmlal.s32 q13, d17, d23
322 vmlal.s32 q13, d8, d22
323 vmull.s32 q1, d10, d5
324 vmlal.s32 q1, d11, d4
326 vmlal.s32 q1, d17, d0
327 vmlal.s32 q1, d8, d23
328 vmull.s32 q14, d10, d6
329 vmlal.s32 q14, d11, d13
330 vmlal.s32 q14, d4, d4
331 vmlal.s32 q14, d17, d1
332 vmlal.s32 q14, d18, d0
333 vmlal.s32 q14, d9, d23
334 vmull.s32 q11, d10, d7
335 vmlal.s32 q11, d11, d6
336 vmlal.s32 q11, d12, d5
337 vmlal.s32 q11, d8, d1
338 vmlal.s32 q11, d19, d0
339 vmull.s32 q15, d10, d8
340 vmlal.s32 q15, d11, d17
341 vmlal.s32 q15, d12, d6
342 vmlal.s32 q15, d13, d5
343 vmlal.s32 q15, d19, d1
344 vmlal.s32 q15, d14, d0
345 vmull.s32 q2, d10, d9
346 vmlal.s32 q2, d11, d8
347 vmlal.s32 q2, d12, d7
348 vmlal.s32 q2, d13, d6
349 vmlal.s32 q2, d14, d1
350 vmull.s32 q0, d15, d1
351 vmlal.s32 q0, d10, d14
352 vmlal.s32 q0, d11, d19
353 vmlal.s32 q0, d12, d8
354 vmlal.s32 q0, d13, d17
357 vld1.8 {d18-d19}, [r2, : 128]!
358 vmull.s32 q3, d16, d7
359 vmlal.s32 q3, d10, d15
360 vmlal.s32 q3, d11, d14
361 vmlal.s32 q3, d12, d9
362 vmlal.s32 q3, d13, d8
363 vld1.8 {d8-d9}, [r2, : 128]
377 vshr.s64 q10, q10, #25
378 vadd.i64 q12, q13, q8
380 vadd.i64 q13, q12, q9
383 vshr.s64 q8, q13, #26
384 vshl.i64 q10, q10, #25
390 vshr.s64 q10, q13, #26
392 vshr.s64 q12, q15, #25
394 vshl.i64 q10, q10, #26
396 vadd.i64 q14, q14, q12
398 vshl.i64 q12, q12, #25
400 vadd.i64 q15, q14, q9
404 vshr.s64 q10, q13, #25
406 vshr.s64 q12, q15, #26
407 vadd.i64 q13, q10, q10
408 vadd.i64 q11, q11, q12
410 vshl.i64 q12, q12, #26
414 vst1.8 d16, [r2, : 64]!
416 vst1.8 d17, [r4, : 64]!
417 vsub.i64 q8, q14, q12
424 vshl.i64 q10, q10, #25
433 vst1.8 d16, [r2, : 64]
435 vst1.8 d17, [r4, : 64]
443 vst1.8 d0, [r2, : 64]
445 vst1.8 d1, [r4, : 64]
452 vst1.8 d4, [r2, : 64]
453 vst1.8 d5, [r4, : 64]
456 vst1.8 d6, [r2, : 64]
457 vst1.8 d7, [r4, : 64]
460 vld1.8 {d0-d1}, [r4, : 128]!
461 vld1.8 {d2-d3}, [r4, : 128]!
462 vld1.8 {d4}, [r4, : 64]
464 vld1.8 {d6-d7}, [r4, : 128]!
466 vld1.8 {d8-d9}, [r4, : 128]!
473 vld1.8 {d5}, [r4, : 64]
478 vld1.8 {d18-d19}, [r2, : 128]!
480 vld1.8 {d22-d23}, [r2, : 128]!
481 vadd.i32 q10, q10, q2
482 vld1.8 {d24}, [r2, : 64]
485 vld1.8 {d26-d27}, [r2, : 128]!
487 vld1.8 {d28-d29}, [r2, : 128]!
489 vld1.8 {d25}, [r2, : 64]
490 vadd.i32 q10, q10, q2
497 vadd.i32 q10, q10, q2
499 vst1.8 {d12-d13}, [r2, : 128]!
501 vst1.8 {d20-d21}, [r2, : 128]!
502 vshl.i32 q10, q14, #1
503 vst1.8 {d12-d13}, [r2, : 128]!
504 vshl.i32 q15, q12, #1
506 vext.32 d10, d31, d30, #0
508 vst1.8 {d16-d17}, [r2, : 128]!
509 vmull.s32 q8, d18, d5
510 vmlal.s32 q8, d26, d4
511 vmlal.s32 q8, d19, d9
512 vmlal.s32 q8, d27, d3
513 vmlal.s32 q8, d22, d8
514 vmlal.s32 q8, d28, d2
515 vmlal.s32 q8, d23, d7
516 vmlal.s32 q8, d29, d1
517 vmlal.s32 q8, d24, d6
518 vmlal.s32 q8, d25, d0
519 vst1.8 {d14-d15}, [r2, : 128]!
520 vmull.s32 q2, d18, d4
521 vmlal.s32 q2, d12, d9
522 vmlal.s32 q2, d13, d8
523 vmlal.s32 q2, d19, d3
524 vmlal.s32 q2, d22, d2
525 vmlal.s32 q2, d23, d1
526 vmlal.s32 q2, d24, d0
527 vst1.8 {d20-d21}, [r2, : 128]!
528 vmull.s32 q7, d18, d9
529 vmlal.s32 q7, d26, d3
530 vmlal.s32 q7, d19, d8
531 vmlal.s32 q7, d27, d2
532 vmlal.s32 q7, d22, d7
533 vmlal.s32 q7, d28, d1
534 vmlal.s32 q7, d23, d6
535 vmlal.s32 q7, d29, d0
536 vst1.8 {d10-d11}, [r2, : 128]!
537 vmull.s32 q5, d18, d3
538 vmlal.s32 q5, d19, d2
539 vmlal.s32 q5, d22, d1
540 vmlal.s32 q5, d23, d0
541 vmlal.s32 q5, d12, d8
542 vst1.8 {d16-d17}, [r2, : 128]
543 vmull.s32 q4, d18, d8
544 vmlal.s32 q4, d26, d2
545 vmlal.s32 q4, d19, d7
546 vmlal.s32 q4, d27, d1
547 vmlal.s32 q4, d22, d6
548 vmlal.s32 q4, d28, d0
549 vmull.s32 q8, d18, d7
550 vmlal.s32 q8, d26, d1
551 vmlal.s32 q8, d19, d6
552 vmlal.s32 q8, d27, d0
554 vld1.8 {d20-d21}, [r2, : 128]
555 vmlal.s32 q7, d24, d21
556 vmlal.s32 q7, d25, d20
557 vmlal.s32 q4, d23, d21
558 vmlal.s32 q4, d29, d20
559 vmlal.s32 q8, d22, d21
560 vmlal.s32 q8, d28, d20
561 vmlal.s32 q5, d24, d20
562 vst1.8 {d14-d15}, [r2, : 128]
563 vmull.s32 q7, d18, d6
564 vmlal.s32 q7, d26, d0
566 vld1.8 {d30-d31}, [r2, : 128]
567 vmlal.s32 q2, d30, d21
568 vmlal.s32 q7, d19, d21
569 vmlal.s32 q7, d27, d20
571 vld1.8 {d26-d27}, [r2, : 128]
572 vmlal.s32 q4, d25, d27
573 vmlal.s32 q8, d29, d27
574 vmlal.s32 q8, d25, d26
575 vmlal.s32 q7, d28, d27
576 vmlal.s32 q7, d29, d26
578 vld1.8 {d28-d29}, [r2, : 128]
579 vmlal.s32 q4, d24, d29
580 vmlal.s32 q8, d23, d29
581 vmlal.s32 q8, d24, d28
582 vmlal.s32 q7, d22, d29
583 vmlal.s32 q7, d23, d28
584 vst1.8 {d8-d9}, [r2, : 128]
586 vld1.8 {d8-d9}, [r2, : 128]
587 vmlal.s32 q7, d24, d9
588 vmlal.s32 q7, d25, d31
589 vmull.s32 q1, d18, d2
590 vmlal.s32 q1, d19, d1
591 vmlal.s32 q1, d22, d0
592 vmlal.s32 q1, d24, d27
593 vmlal.s32 q1, d23, d20
594 vmlal.s32 q1, d12, d7
595 vmlal.s32 q1, d13, d6
596 vmull.s32 q6, d18, d1
597 vmlal.s32 q6, d19, d0
598 vmlal.s32 q6, d23, d27
599 vmlal.s32 q6, d22, d20
600 vmlal.s32 q6, d24, d26
601 vmull.s32 q0, d18, d0
602 vmlal.s32 q0, d22, d27
603 vmlal.s32 q0, d23, d26
604 vmlal.s32 q0, d24, d31
605 vmlal.s32 q0, d19, d20
607 vld1.8 {d18-d19}, [r2, : 128]
608 vmlal.s32 q2, d18, d7
609 vmlal.s32 q5, d18, d6
610 vmlal.s32 q1, d18, d21
611 vmlal.s32 q0, d18, d28
612 vmlal.s32 q6, d18, d29
613 vmlal.s32 q2, d19, d6
614 vmlal.s32 q5, d19, d21
615 vmlal.s32 q1, d19, d29
616 vmlal.s32 q0, d19, d9
617 vmlal.s32 q6, d19, d28
619 vld1.8 {d18-d19}, [r2, : 128]
621 vld1.8 {d22-d23}, [r2, : 128]
622 vmlal.s32 q5, d19, d7
623 vmlal.s32 q0, d18, d21
624 vmlal.s32 q0, d19, d29
625 vmlal.s32 q6, d18, d6
627 vld1.8 {d6-d7}, [r2, : 128]
628 vmlal.s32 q6, d19, d21
630 vld1.8 {d18-d19}, [r2, : 128]
631 vmlal.s32 q0, d30, d8
633 vld1.8 {d20-d21}, [r2, : 128]
634 vmlal.s32 q5, d30, d29
636 vld1.8 {d24-d25}, [r2, : 128]
637 vmlal.s32 q1, d30, d28
638 vadd.i64 q13, q0, q11
639 vadd.i64 q14, q5, q11
640 vmlal.s32 q6, d30, d9
641 vshr.s64 q4, q13, #26
642 vshr.s64 q13, q14, #26
647 vshl.i64 q13, q13, #26
650 vshr.s64 q4, q14, #25
652 vshr.s64 q13, q15, #25
655 vadd.i64 q14, q6, q11
658 vshr.s64 q7, q14, #26
659 vshl.i64 q13, q13, #25
660 vadd.i64 q14, q2, q11
665 vshr.s64 q13, q14, #26
667 vshr.s64 q7, q15, #25
668 vadd.i64 q10, q10, q13
669 vshl.i64 q13, q13, #26
670 vadd.i64 q14, q10, q3
675 vadd.i64 q15, q1, q11
679 vshr.s64 q13, q14, #25
681 vshr.s64 q8, q15, #26
682 vadd.i64 q14, q13, q13
683 vadd.i64 q12, q12, q8
689 vst1.8 d12, [r2, : 64]!
691 vst1.8 d13, [r4, : 64]!
699 vshl.i64 q7, q13, #25
708 vst1.8 d2, [r2, : 64]
710 vst1.8 d3, [r4, : 64]
718 vst1.8 d4, [r2, : 64]
720 vst1.8 d5, [r4, : 64]
727 vst1.8 d10, [r2, : 64]
728 vst1.8 d11, [r4, : 64]
731 vst1.8 d0, [r2, : 64]
732 vst1.8 d1, [r4, : 64]
735 vld1.8 {d0-d1}, [r2, : 128]!
736 vld1.8 {d2-d3}, [r4, : 128]!
738 vld1.8 {d2-d3}, [r2, : 128]!
739 vld1.8 {d4-d5}, [r4, : 128]!
742 vld1.8 {d4}, [r2, : 64]
743 vld1.8 {d6}, [r4, : 64]
745 vst1.8 {d0-d1}, [r5, : 128]!
746 vst1.8 {d2-d3}, [r5, : 128]!
747 vst1.8 d4, [r5, : 64]
752 vld1.8 {d0-d1}, [r2, : 128]!
753 vld1.8 {d2-d3}, [r4, : 128]!
756 vld1.8 {d2-d3}, [r2, : 128]!
757 vld1.8 {d6-d7}, [r4, : 128]!
760 vld1.8 {d6}, [r2, : 64]
761 vld1.8 {d10}, [r4, : 64]
764 vst1.8 {d4-d5}, [r5, : 128]!
765 vst1.8 {d0-d1}, [r6, : 128]!
766 vst1.8 {d8-d9}, [r5, : 128]!
767 vst1.8 {d2-d3}, [r6, : 128]!
768 vst1.8 d12, [r5, : 64]
769 vst1.8 d6, [r6, : 64]
772 vld1.8 {d0-d1}, [r4, : 128]!
773 vld1.8 {d2-d3}, [r4, : 128]!
774 vld1.8 {d4}, [r4, : 64]
776 vld1.8 {d6-d7}, [r4, : 128]!
778 vld1.8 {d8-d9}, [r4, : 128]!
785 vld1.8 {d5}, [r4, : 64]
790 vld1.8 {d18-d19}, [r2, : 128]!
792 vld1.8 {d22-d23}, [r2, : 128]!
793 vadd.i32 q10, q10, q2
794 vld1.8 {d24}, [r2, : 64]
797 vld1.8 {d26-d27}, [r2, : 128]!
799 vld1.8 {d28-d29}, [r2, : 128]!
801 vld1.8 {d25}, [r2, : 64]
802 vadd.i32 q10, q10, q2
809 vadd.i32 q10, q10, q2
811 vst1.8 {d12-d13}, [r2, : 128]!
813 vst1.8 {d20-d21}, [r2, : 128]!
814 vshl.i32 q10, q14, #1
815 vst1.8 {d12-d13}, [r2, : 128]!
816 vshl.i32 q15, q12, #1
818 vext.32 d10, d31, d30, #0
820 vst1.8 {d16-d17}, [r2, : 128]!
821 vmull.s32 q8, d18, d5
822 vmlal.s32 q8, d26, d4
823 vmlal.s32 q8, d19, d9
824 vmlal.s32 q8, d27, d3
825 vmlal.s32 q8, d22, d8
826 vmlal.s32 q8, d28, d2
827 vmlal.s32 q8, d23, d7
828 vmlal.s32 q8, d29, d1
829 vmlal.s32 q8, d24, d6
830 vmlal.s32 q8, d25, d0
831 vst1.8 {d14-d15}, [r2, : 128]!
832 vmull.s32 q2, d18, d4
833 vmlal.s32 q2, d12, d9
834 vmlal.s32 q2, d13, d8
835 vmlal.s32 q2, d19, d3
836 vmlal.s32 q2, d22, d2
837 vmlal.s32 q2, d23, d1
838 vmlal.s32 q2, d24, d0
839 vst1.8 {d20-d21}, [r2, : 128]!
840 vmull.s32 q7, d18, d9
841 vmlal.s32 q7, d26, d3
842 vmlal.s32 q7, d19, d8
843 vmlal.s32 q7, d27, d2
844 vmlal.s32 q7, d22, d7
845 vmlal.s32 q7, d28, d1
846 vmlal.s32 q7, d23, d6
847 vmlal.s32 q7, d29, d0
848 vst1.8 {d10-d11}, [r2, : 128]!
849 vmull.s32 q5, d18, d3
850 vmlal.s32 q5, d19, d2
851 vmlal.s32 q5, d22, d1
852 vmlal.s32 q5, d23, d0
853 vmlal.s32 q5, d12, d8
854 vst1.8 {d16-d17}, [r2, : 128]!
855 vmull.s32 q4, d18, d8
856 vmlal.s32 q4, d26, d2
857 vmlal.s32 q4, d19, d7
858 vmlal.s32 q4, d27, d1
859 vmlal.s32 q4, d22, d6
860 vmlal.s32 q4, d28, d0
861 vmull.s32 q8, d18, d7
862 vmlal.s32 q8, d26, d1
863 vmlal.s32 q8, d19, d6
864 vmlal.s32 q8, d27, d0
866 vld1.8 {d20-d21}, [r2, : 128]
867 vmlal.s32 q7, d24, d21
868 vmlal.s32 q7, d25, d20
869 vmlal.s32 q4, d23, d21
870 vmlal.s32 q4, d29, d20
871 vmlal.s32 q8, d22, d21
872 vmlal.s32 q8, d28, d20
873 vmlal.s32 q5, d24, d20
874 vst1.8 {d14-d15}, [r2, : 128]
875 vmull.s32 q7, d18, d6
876 vmlal.s32 q7, d26, d0
878 vld1.8 {d30-d31}, [r2, : 128]
879 vmlal.s32 q2, d30, d21
880 vmlal.s32 q7, d19, d21
881 vmlal.s32 q7, d27, d20
883 vld1.8 {d26-d27}, [r2, : 128]
884 vmlal.s32 q4, d25, d27
885 vmlal.s32 q8, d29, d27
886 vmlal.s32 q8, d25, d26
887 vmlal.s32 q7, d28, d27
888 vmlal.s32 q7, d29, d26
890 vld1.8 {d28-d29}, [r2, : 128]
891 vmlal.s32 q4, d24, d29
892 vmlal.s32 q8, d23, d29
893 vmlal.s32 q8, d24, d28
894 vmlal.s32 q7, d22, d29
895 vmlal.s32 q7, d23, d28
896 vst1.8 {d8-d9}, [r2, : 128]
898 vld1.8 {d8-d9}, [r2, : 128]
899 vmlal.s32 q7, d24, d9
900 vmlal.s32 q7, d25, d31
901 vmull.s32 q1, d18, d2
902 vmlal.s32 q1, d19, d1
903 vmlal.s32 q1, d22, d0
904 vmlal.s32 q1, d24, d27
905 vmlal.s32 q1, d23, d20
906 vmlal.s32 q1, d12, d7
907 vmlal.s32 q1, d13, d6
908 vmull.s32 q6, d18, d1
909 vmlal.s32 q6, d19, d0
910 vmlal.s32 q6, d23, d27
911 vmlal.s32 q6, d22, d20
912 vmlal.s32 q6, d24, d26
913 vmull.s32 q0, d18, d0
914 vmlal.s32 q0, d22, d27
915 vmlal.s32 q0, d23, d26
916 vmlal.s32 q0, d24, d31
917 vmlal.s32 q0, d19, d20
919 vld1.8 {d18-d19}, [r2, : 128]
920 vmlal.s32 q2, d18, d7
921 vmlal.s32 q5, d18, d6
922 vmlal.s32 q1, d18, d21
923 vmlal.s32 q0, d18, d28
924 vmlal.s32 q6, d18, d29
925 vmlal.s32 q2, d19, d6
926 vmlal.s32 q5, d19, d21
927 vmlal.s32 q1, d19, d29
928 vmlal.s32 q0, d19, d9
929 vmlal.s32 q6, d19, d28
931 vld1.8 {d18-d19}, [r2, : 128]
933 vld1.8 {d22-d23}, [r2, : 128]
934 vmlal.s32 q5, d19, d7
935 vmlal.s32 q0, d18, d21
936 vmlal.s32 q0, d19, d29
937 vmlal.s32 q6, d18, d6
939 vld1.8 {d6-d7}, [r2, : 128]
940 vmlal.s32 q6, d19, d21
942 vld1.8 {d18-d19}, [r2, : 128]
943 vmlal.s32 q0, d30, d8
945 vld1.8 {d20-d21}, [r2, : 128]
946 vmlal.s32 q5, d30, d29
948 vld1.8 {d24-d25}, [r2, : 128]
949 vmlal.s32 q1, d30, d28
950 vadd.i64 q13, q0, q11
951 vadd.i64 q14, q5, q11
952 vmlal.s32 q6, d30, d9
953 vshr.s64 q4, q13, #26
954 vshr.s64 q13, q14, #26
959 vshl.i64 q13, q13, #26
962 vshr.s64 q4, q14, #25
964 vshr.s64 q13, q15, #25
967 vadd.i64 q14, q6, q11
970 vshr.s64 q7, q14, #26
971 vshl.i64 q13, q13, #25
972 vadd.i64 q14, q2, q11
977 vshr.s64 q13, q14, #26
979 vshr.s64 q7, q15, #25
980 vadd.i64 q10, q10, q13
981 vshl.i64 q13, q13, #26
982 vadd.i64 q14, q10, q3
987 vadd.i64 q15, q1, q11
991 vshr.s64 q13, q14, #25
993 vshr.s64 q8, q15, #26
994 vadd.i64 q14, q13, q13
995 vadd.i64 q12, q12, q8
1000 vadd.i64 q0, q0, q14
1001 vst1.8 d12, [r2, : 64]!
1002 vshl.i64 q7, q13, #4
1003 vst1.8 d13, [r4, : 64]!
1005 vshr.s64 q3, q3, #25
1008 vshl.i64 q3, q3, #25
1009 vadd.i64 q6, q5, q11
1010 vadd.i64 q0, q0, q13
1011 vshl.i64 q7, q13, #25
1012 vadd.i64 q8, q0, q11
1013 vsub.i64 q3, q12, q3
1014 vshr.s64 q6, q6, #26
1015 vsub.i64 q7, q10, q7
1017 vshr.s64 q8, q8, #26
1020 vst1.8 d2, [r2, : 64]
1021 vshl.i64 q6, q6, #26
1022 vst1.8 d3, [r4, : 64]
1025 vshl.i64 q4, q8, #26
1030 vst1.8 d4, [r2, : 64]
1032 vst1.8 d5, [r4, : 64]
1039 vst1.8 d10, [r2, : 64]
1040 vst1.8 d11, [r4, : 64]
1043 vst1.8 d0, [r2, : 64]
1044 vst1.8 d1, [r4, : 64]
1048 vld1.8 {d0-d1}, [r2, : 128]
1049 vld1.8 {d2-d3}, [r4, : 128]!
1050 vld1.8 {d4-d5}, [r5, : 128]!
1052 vld1.8 {d6-d7}, [r4, : 128]!
1053 vld1.8 {d8-d9}, [r5, : 128]!
1057 vld1.8 {d14}, [r4, : 64]
1059 vld1.8 {d15}, [r5, : 64]
1061 vmul.i32 d21, d7, d1
1063 vmul.i32 q11, q4, q0
1065 vmull.s32 q12, d2, d2
1066 vmlal.s32 q12, d11, d1
1067 vmlal.s32 q12, d12, d0
1068 vmlal.s32 q12, d13, d23
1069 vmlal.s32 q12, d16, d22
1070 vmlal.s32 q12, d7, d21
1071 vmull.s32 q10, d2, d11
1072 vmlal.s32 q10, d4, d1
1073 vmlal.s32 q10, d13, d0
1074 vmlal.s32 q10, d6, d23
1075 vmlal.s32 q10, d17, d22
1076 vmull.s32 q13, d10, d4
1077 vmlal.s32 q13, d11, d3
1078 vmlal.s32 q13, d13, d1
1079 vmlal.s32 q13, d16, d0
1080 vmlal.s32 q13, d17, d23
1081 vmlal.s32 q13, d8, d22
1082 vmull.s32 q1, d10, d5
1083 vmlal.s32 q1, d11, d4
1084 vmlal.s32 q1, d6, d1
1085 vmlal.s32 q1, d17, d0
1086 vmlal.s32 q1, d8, d23
1087 vmull.s32 q14, d10, d6
1088 vmlal.s32 q14, d11, d13
1089 vmlal.s32 q14, d4, d4
1090 vmlal.s32 q14, d17, d1
1091 vmlal.s32 q14, d18, d0
1092 vmlal.s32 q14, d9, d23
1093 vmull.s32 q11, d10, d7
1094 vmlal.s32 q11, d11, d6
1095 vmlal.s32 q11, d12, d5
1096 vmlal.s32 q11, d8, d1
1097 vmlal.s32 q11, d19, d0
1098 vmull.s32 q15, d10, d8
1099 vmlal.s32 q15, d11, d17
1100 vmlal.s32 q15, d12, d6
1101 vmlal.s32 q15, d13, d5
1102 vmlal.s32 q15, d19, d1
1103 vmlal.s32 q15, d14, d0
1104 vmull.s32 q2, d10, d9
1105 vmlal.s32 q2, d11, d8
1106 vmlal.s32 q2, d12, d7
1107 vmlal.s32 q2, d13, d6
1108 vmlal.s32 q2, d14, d1
1109 vmull.s32 q0, d15, d1
1110 vmlal.s32 q0, d10, d14
1111 vmlal.s32 q0, d11, d19
1112 vmlal.s32 q0, d12, d8
1113 vmlal.s32 q0, d13, d17
1114 vmlal.s32 q0, d6, d6
1116 vld1.8 {d18-d19}, [r2, : 128]!
1117 vmull.s32 q3, d16, d7
1118 vmlal.s32 q3, d10, d15
1119 vmlal.s32 q3, d11, d14
1120 vmlal.s32 q3, d12, d9
1121 vmlal.s32 q3, d13, d8
1122 vld1.8 {d8-d9}, [r2, : 128]
1123 vadd.i64 q5, q12, q9
1124 vadd.i64 q6, q15, q9
1125 vshr.s64 q5, q5, #26
1126 vshr.s64 q6, q6, #26
1127 vadd.i64 q7, q10, q5
1128 vshl.i64 q5, q5, #26
1131 vshl.i64 q6, q6, #26
1132 vadd.i64 q10, q2, q4
1133 vsub.i64 q5, q12, q5
1134 vshr.s64 q8, q8, #25
1135 vsub.i64 q6, q15, q6
1136 vshr.s64 q10, q10, #25
1137 vadd.i64 q12, q13, q8
1138 vshl.i64 q8, q8, #25
1139 vadd.i64 q13, q12, q9
1140 vadd.i64 q0, q0, q10
1142 vshr.s64 q8, q13, #26
1143 vshl.i64 q10, q10, #25
1144 vadd.i64 q13, q0, q9
1146 vshl.i64 q8, q8, #26
1147 vadd.i64 q15, q1, q4
1148 vsub.i64 q2, q2, q10
1149 vshr.s64 q10, q13, #26
1150 vsub.i64 q8, q12, q8
1151 vshr.s64 q12, q15, #25
1152 vadd.i64 q3, q3, q10
1153 vshl.i64 q10, q10, #26
1154 vadd.i64 q13, q3, q4
1155 vadd.i64 q14, q14, q12
1157 vshl.i64 q12, q12, #25
1159 vadd.i64 q15, q14, q9
1161 vsub.i64 q0, q0, q10
1163 vshr.s64 q10, q13, #25
1164 vsub.i64 q1, q1, q12
1165 vshr.s64 q12, q15, #26
1166 vadd.i64 q13, q10, q10
1167 vadd.i64 q11, q11, q12
1169 vshl.i64 q12, q12, #26
1171 vadd.i64 q1, q11, q4
1172 vadd.i64 q4, q5, q13
1173 vst1.8 d16, [r2, : 64]!
1174 vshl.i64 q5, q10, #4
1175 vst1.8 d17, [r4, : 64]!
1176 vsub.i64 q8, q14, q12
1177 vshr.s64 q1, q1, #25
1180 vshl.i64 q1, q1, #25
1182 vadd.i64 q4, q4, q10
1183 vshl.i64 q10, q10, #25
1185 vsub.i64 q1, q11, q1
1186 vshr.s64 q6, q6, #26
1187 vsub.i64 q3, q3, q10
1189 vshr.s64 q9, q9, #26
1192 vst1.8 d16, [r2, : 64]
1193 vshl.i64 q2, q6, #26
1194 vst1.8 d17, [r4, : 64]
1197 vshl.i64 q7, q9, #26
1202 vst1.8 d0, [r2, : 64]
1204 vst1.8 d1, [r4, : 64]
1211 vst1.8 d4, [r2, : 64]
1212 vst1.8 d5, [r4, : 64]
1215 vst1.8 d6, [r2, : 64]
1216 vst1.8 d7, [r4, : 64]
1219 vld1.8 {d0-d1}, [r2, : 128]!
1220 vld1.8 {d2-d3}, [r4, : 128]!
1222 vld1.8 {d2-d3}, [r2, : 128]!
1223 vld1.8 {d4-d5}, [r4, : 128]!
1226 vld1.8 {d4}, [r2, : 64]
1227 vld1.8 {d6}, [r4, : 64]
1229 vst1.8 {d0-d1}, [r5, : 128]!
1230 vst1.8 {d2-d3}, [r5, : 128]!
1231 vst1.8 d4, [r5, : 64]
1234 vld1.8 {d0-d1}, [r4, : 128]!
1235 vld1.8 {d2-d3}, [r4, : 128]!
1236 vld1.8 {d4}, [r4, : 64]
1238 vld1.8 {d6-d7}, [r4, : 128]!
1240 vld1.8 {d8-d9}, [r4, : 128]!
1247 vld1.8 {d5}, [r4, : 64]
1252 vld1.8 {d18-d19}, [r2, : 128]!
1253 vshl.i32 q10, q2, #4
1254 vld1.8 {d22-d23}, [r2, : 128]!
1255 vadd.i32 q10, q10, q2
1256 vld1.8 {d24}, [r2, : 64]
1259 vld1.8 {d26-d27}, [r2, : 128]!
1261 vld1.8 {d28-d29}, [r2, : 128]!
1263 vld1.8 {d25}, [r2, : 64]
1264 vadd.i32 q10, q10, q2
1271 vadd.i32 q10, q10, q2
1273 vst1.8 {d12-d13}, [r2, : 128]!
1274 vshl.i32 q6, q13, #1
1275 vst1.8 {d20-d21}, [r2, : 128]!
1276 vshl.i32 q10, q14, #1
1277 vst1.8 {d12-d13}, [r2, : 128]!
1278 vshl.i32 q15, q12, #1
1280 vext.32 d10, d31, d30, #0
1282 vst1.8 {d16-d17}, [r2, : 128]!
1283 vmull.s32 q8, d18, d5
1284 vmlal.s32 q8, d26, d4
1285 vmlal.s32 q8, d19, d9
1286 vmlal.s32 q8, d27, d3
1287 vmlal.s32 q8, d22, d8
1288 vmlal.s32 q8, d28, d2
1289 vmlal.s32 q8, d23, d7
1290 vmlal.s32 q8, d29, d1
1291 vmlal.s32 q8, d24, d6
1292 vmlal.s32 q8, d25, d0
1293 vst1.8 {d14-d15}, [r2, : 128]!
1294 vmull.s32 q2, d18, d4
1295 vmlal.s32 q2, d12, d9
1296 vmlal.s32 q2, d13, d8
1297 vmlal.s32 q2, d19, d3
1298 vmlal.s32 q2, d22, d2
1299 vmlal.s32 q2, d23, d1
1300 vmlal.s32 q2, d24, d0
1301 vst1.8 {d20-d21}, [r2, : 128]!
1302 vmull.s32 q7, d18, d9
1303 vmlal.s32 q7, d26, d3
1304 vmlal.s32 q7, d19, d8
1305 vmlal.s32 q7, d27, d2
1306 vmlal.s32 q7, d22, d7
1307 vmlal.s32 q7, d28, d1
1308 vmlal.s32 q7, d23, d6
1309 vmlal.s32 q7, d29, d0
1310 vst1.8 {d10-d11}, [r2, : 128]!
1311 vmull.s32 q5, d18, d3
1312 vmlal.s32 q5, d19, d2
1313 vmlal.s32 q5, d22, d1
1314 vmlal.s32 q5, d23, d0
1315 vmlal.s32 q5, d12, d8
1316 vst1.8 {d16-d17}, [r2, : 128]!
1317 vmull.s32 q4, d18, d8
1318 vmlal.s32 q4, d26, d2
1319 vmlal.s32 q4, d19, d7
1320 vmlal.s32 q4, d27, d1
1321 vmlal.s32 q4, d22, d6
1322 vmlal.s32 q4, d28, d0
1323 vmull.s32 q8, d18, d7
1324 vmlal.s32 q8, d26, d1
1325 vmlal.s32 q8, d19, d6
1326 vmlal.s32 q8, d27, d0
1328 vld1.8 {d20-d21}, [r2, : 128]
1329 vmlal.s32 q7, d24, d21
1330 vmlal.s32 q7, d25, d20
1331 vmlal.s32 q4, d23, d21
1332 vmlal.s32 q4, d29, d20
1333 vmlal.s32 q8, d22, d21
1334 vmlal.s32 q8, d28, d20
1335 vmlal.s32 q5, d24, d20
1336 vst1.8 {d14-d15}, [r2, : 128]
1337 vmull.s32 q7, d18, d6
1338 vmlal.s32 q7, d26, d0
1340 vld1.8 {d30-d31}, [r2, : 128]
1341 vmlal.s32 q2, d30, d21
1342 vmlal.s32 q7, d19, d21
1343 vmlal.s32 q7, d27, d20
1345 vld1.8 {d26-d27}, [r2, : 128]
1346 vmlal.s32 q4, d25, d27
1347 vmlal.s32 q8, d29, d27
1348 vmlal.s32 q8, d25, d26
1349 vmlal.s32 q7, d28, d27
1350 vmlal.s32 q7, d29, d26
1352 vld1.8 {d28-d29}, [r2, : 128]
1353 vmlal.s32 q4, d24, d29
1354 vmlal.s32 q8, d23, d29
1355 vmlal.s32 q8, d24, d28
1356 vmlal.s32 q7, d22, d29
1357 vmlal.s32 q7, d23, d28
1358 vst1.8 {d8-d9}, [r2, : 128]
1360 vld1.8 {d8-d9}, [r2, : 128]
1361 vmlal.s32 q7, d24, d9
1362 vmlal.s32 q7, d25, d31
1363 vmull.s32 q1, d18, d2
1364 vmlal.s32 q1, d19, d1
1365 vmlal.s32 q1, d22, d0
1366 vmlal.s32 q1, d24, d27
1367 vmlal.s32 q1, d23, d20
1368 vmlal.s32 q1, d12, d7
1369 vmlal.s32 q1, d13, d6
1370 vmull.s32 q6, d18, d1
1371 vmlal.s32 q6, d19, d0
1372 vmlal.s32 q6, d23, d27
1373 vmlal.s32 q6, d22, d20
1374 vmlal.s32 q6, d24, d26
1375 vmull.s32 q0, d18, d0
1376 vmlal.s32 q0, d22, d27
1377 vmlal.s32 q0, d23, d26
1378 vmlal.s32 q0, d24, d31
1379 vmlal.s32 q0, d19, d20
1381 vld1.8 {d18-d19}, [r2, : 128]
1382 vmlal.s32 q2, d18, d7
1383 vmlal.s32 q5, d18, d6
1384 vmlal.s32 q1, d18, d21
1385 vmlal.s32 q0, d18, d28
1386 vmlal.s32 q6, d18, d29
1387 vmlal.s32 q2, d19, d6
1388 vmlal.s32 q5, d19, d21
1389 vmlal.s32 q1, d19, d29
1390 vmlal.s32 q0, d19, d9
1391 vmlal.s32 q6, d19, d28
1393 vld1.8 {d18-d19}, [r2, : 128]
1395 vld1.8 {d22-d23}, [r2, : 128]
1396 vmlal.s32 q5, d19, d7
1397 vmlal.s32 q0, d18, d21
1398 vmlal.s32 q0, d19, d29
1399 vmlal.s32 q6, d18, d6
1401 vld1.8 {d6-d7}, [r2, : 128]
1402 vmlal.s32 q6, d19, d21
1404 vld1.8 {d18-d19}, [r2, : 128]
1405 vmlal.s32 q0, d30, d8
1407 vld1.8 {d20-d21}, [r2, : 128]
1408 vmlal.s32 q5, d30, d29
1410 vld1.8 {d24-d25}, [r2, : 128]
1411 vmlal.s32 q1, d30, d28
1412 vadd.i64 q13, q0, q11
1413 vadd.i64 q14, q5, q11
1414 vmlal.s32 q6, d30, d9
1415 vshr.s64 q4, q13, #26
1416 vshr.s64 q13, q14, #26
1418 vshl.i64 q4, q4, #26
1419 vadd.i64 q14, q7, q3
1420 vadd.i64 q9, q9, q13
1421 vshl.i64 q13, q13, #26
1422 vadd.i64 q15, q9, q3
1424 vshr.s64 q4, q14, #25
1425 vsub.i64 q5, q5, q13
1426 vshr.s64 q13, q15, #25
1428 vshl.i64 q4, q4, #25
1429 vadd.i64 q14, q6, q11
1430 vadd.i64 q2, q2, q13
1432 vshr.s64 q7, q14, #26
1433 vshl.i64 q13, q13, #25
1434 vadd.i64 q14, q2, q11
1436 vshl.i64 q7, q7, #26
1437 vadd.i64 q15, q8, q3
1438 vsub.i64 q9, q9, q13
1439 vshr.s64 q13, q14, #26
1441 vshr.s64 q7, q15, #25
1442 vadd.i64 q10, q10, q13
1443 vshl.i64 q13, q13, #26
1444 vadd.i64 q14, q10, q3
1447 vshl.i64 q7, q7, #25
1449 vadd.i64 q15, q1, q11
1451 vsub.i64 q2, q2, q13
1453 vshr.s64 q13, q14, #25
1455 vshr.s64 q8, q15, #26
1456 vadd.i64 q14, q13, q13
1457 vadd.i64 q12, q12, q8
1459 vshl.i64 q8, q8, #26
1461 vadd.i64 q3, q12, q3
1462 vadd.i64 q0, q0, q14
1463 vst1.8 d12, [r2, : 64]!
1464 vshl.i64 q7, q13, #4
1465 vst1.8 d13, [r4, : 64]!
1467 vshr.s64 q3, q3, #25
1470 vshl.i64 q3, q3, #25
1471 vadd.i64 q6, q5, q11
1472 vadd.i64 q0, q0, q13
1473 vshl.i64 q7, q13, #25
1474 vadd.i64 q8, q0, q11
1475 vsub.i64 q3, q12, q3
1476 vshr.s64 q6, q6, #26
1477 vsub.i64 q7, q10, q7
1479 vshr.s64 q8, q8, #26
1482 vst1.8 d2, [r2, : 64]
1483 vshl.i64 q6, q6, #26
1484 vst1.8 d3, [r4, : 64]
1487 vshl.i64 q4, q8, #26
1492 vst1.8 d4, [r2, : 64]
1494 vst1.8 d5, [r4, : 64]
1501 vst1.8 d10, [r2, : 64]
1502 vst1.8 d11, [r4, : 64]
1505 vst1.8 d0, [r2, : 64]
1506 vst1.8 d1, [r4, : 64]
1513 vld1.8 {d0-d1}, [r1, : 128]!
1514 vld1.8 {d2-d3}, [r1, : 128]!
1515 vld1.8 {d4}, [r1, : 64]
1516 vst1.8 {d0-d1}, [r2, : 128]!
1517 vst1.8 {d2-d3}, [r2, : 128]!
1518 vst1.8 d4, [r2, : 64]
1557 vld1.8 {d0-d1}, [r6, : 128]!
1558 vld1.8 {d2-d3}, [r6, : 128]!
1559 vld1.8 {d4}, [r6, : 64]
1560 vst1.8 {d0-d1}, [r7, : 128]!
1561 vst1.8 {d2-d3}, [r7, : 128]!
1562 vst1.8 d4, [r7, : 64]
1564 beq .Lskipsquaringloop
1573 vld1.8 {d4-d5}, [r7, : 128]!
1574 vld1.8 {d6-d7}, [r7, : 128]!
1575 vld1.8 {d9}, [r7, : 64]
1576 vld1.8 {d10-d11}, [r6, : 128]!
1578 vld1.8 {d12-d13}, [r6, : 128]!
1580 vld1.8 {d8}, [r6, : 64]
1581 vext.32 d17, d11, d10, #1
1583 vext.32 d16, d10, d8, #1
1584 vshl.u32 q10, q5, q1
1585 vext.32 d22, d14, d4, #1
1586 vext.32 d24, d18, d6, #1
1587 vshl.u32 q13, q6, q1
1588 vshl.u32 d28, d8, d2
1592 vext.32 d29, d8, d13, #1
1593 vext.32 d0, d1, d9, #1
1595 vext.32 d2, d9, d1, #1
1596 vext.32 d23, d15, d5, #1
1597 vmull.s32 q4, d20, d4
1599 vmlal.s32 q4, d21, d1
1601 vmlal.s32 q4, d26, d19
1602 vext.32 d3, d5, d15, #1
1603 vmlal.s32 q4, d27, d18
1605 vmlal.s32 q4, d28, d15
1606 vext.32 d14, d12, d11, #1
1607 vmull.s32 q5, d16, d23
1608 vext.32 d15, d13, d12, #1
1609 vmlal.s32 q5, d17, d4
1610 vst1.8 d8, [r7, : 64]!
1611 vmlal.s32 q5, d14, d1
1612 vext.32 d12, d9, d8, #0
1613 vmlal.s32 q5, d15, d19
1615 vmlal.s32 q5, d29, d18
1616 vext.32 d25, d19, d7, #1
1617 vmlal.s32 q6, d20, d5
1619 vmlal.s32 q6, d21, d4
1620 vst1.8 d11, [r7, : 64]!
1621 vmlal.s32 q6, d26, d1
1622 vext.32 d9, d10, d10, #0
1623 vmlal.s32 q6, d27, d19
1625 vmlal.s32 q6, d28, d18
1626 vmlal.s32 q4, d16, d24
1627 vmlal.s32 q4, d17, d5
1628 vmlal.s32 q4, d14, d4
1629 vst1.8 d12, [r7, : 64]!
1630 vmlal.s32 q4, d15, d1
1631 vext.32 d10, d13, d12, #0
1632 vmlal.s32 q4, d29, d19
1634 vmlal.s32 q5, d20, d6
1635 vmlal.s32 q5, d21, d5
1636 vmlal.s32 q5, d26, d4
1637 vext.32 d13, d8, d8, #0
1638 vmlal.s32 q5, d27, d1
1640 vmlal.s32 q5, d28, d19
1641 vst1.8 d9, [r7, : 64]!
1642 vmlal.s32 q6, d16, d25
1643 vmlal.s32 q6, d17, d6
1644 vst1.8 d10, [r7, : 64]
1645 vmlal.s32 q6, d14, d5
1646 vext.32 d8, d11, d10, #0
1647 vmlal.s32 q6, d15, d4
1649 vmlal.s32 q6, d29, d1
1650 vmlal.s32 q4, d20, d7
1651 vmlal.s32 q4, d21, d6
1652 vmlal.s32 q4, d26, d5
1653 vext.32 d11, d12, d12, #0
1654 vmlal.s32 q4, d27, d4
1656 vmlal.s32 q4, d28, d1
1657 vmlal.s32 q5, d16, d0
1659 vmlal.s32 q5, d17, d7
1660 vmlal.s32 q5, d14, d6
1661 vext.32 d30, d9, d8, #0
1662 vmlal.s32 q5, d15, d5
1663 vld1.8 {d31}, [r6, : 64]!
1664 vmlal.s32 q5, d29, d4
1665 vmlal.s32 q15, d20, d0
1666 vext.32 d0, d6, d18, #1
1667 vmlal.s32 q15, d21, d25
1669 vmlal.s32 q15, d26, d24
1670 vext.32 d1, d7, d19, #1
1671 vext.32 d7, d10, d10, #0
1672 vmlal.s32 q15, d27, d23
1674 vld1.8 {d6}, [r6, : 64]
1675 vmlal.s32 q15, d28, d22
1676 vmlal.s32 q3, d16, d4
1678 vmlal.s32 q3, d17, d2
1679 vext.32 d4, d31, d30, #0
1681 vmlal.s32 q3, d14, d1
1682 vext.32 d11, d13, d13, #0
1683 vext.32 d13, d30, d30, #0
1684 vmlal.s32 q3, d15, d0
1685 vext.32 d1, d8, d8, #0
1686 vmlal.s32 q3, d29, d3
1687 vld1.8 {d5}, [r6, : 64]
1689 vext.32 d10, d6, d6, #0
1690 vmov.i32 q1, #0xffffffff
1691 vshl.i64 q4, q1, #25
1693 vld1.8 {d14-d15}, [r7, : 128]
1695 vshl.i64 q1, q1, #26
1696 vshr.s64 q10, q9, #26
1697 vld1.8 {d0}, [r6, : 64]!
1698 vadd.i64 q5, q5, q10
1700 vld1.8 {d16}, [r6, : 64]!
1702 vld1.8 {d20-d21}, [r6, : 128]
1703 vadd.i64 q11, q5, q10
1705 vshr.s64 q9, q11, #25
1706 vext.32 d12, d5, d4, #0
1711 vsub.i64 q5, q5, q11
1712 vshr.s64 q11, q3, #26
1713 vext.32 d18, d11, d10, #0
1715 vadd.i64 q8, q8, q11
1716 vadd.i64 q11, q8, q10
1718 vshr.s64 q3, q11, #25
1722 vsub.i64 q8, q8, q11
1723 vshr.s64 q11, q6, #26
1725 vadd.i64 q9, q9, q11
1726 vadd.i64 d25, d19, d21
1728 vshr.s64 d23, d25, #25
1730 vadd.i64 d21, d23, d23
1731 vshl.i64 d25, d23, #4
1732 vadd.i64 d21, d21, d23
1733 vadd.i64 d25, d25, d21
1734 vadd.i64 d4, d4, d25
1736 vadd.i64 d12, d4, d14
1738 vst1.8 d0, [r6, : 64]
1739 vsub.i64 d19, d19, d9
1741 vst1.8 d16, [r6, : 64]
1742 vshr.s64 d22, d12, #26
1744 vadd.i64 d10, d10, d22
1748 vst1.8 d6, [r6, : 64]
1750 vst1.8 d18, [r6, : 64]
1753 vst1.8 d4, [r6, : 64]
1764 vld1.8 {d4-d5}, [r5, : 128]!
1765 vld1.8 {d6-d7}, [r5, : 128]!
1766 vld1.8 {d9}, [r5, : 64]
1767 vld1.8 {d10-d11}, [r2, : 128]!
1769 vld1.8 {d12-d13}, [r2, : 128]!
1771 vld1.8 {d8}, [r2, : 64]
1772 vext.32 d17, d11, d10, #1
1774 vext.32 d16, d10, d8, #1
1775 vshl.u32 q10, q5, q1
1776 vext.32 d22, d14, d4, #1
1777 vext.32 d24, d18, d6, #1
1778 vshl.u32 q13, q6, q1
1779 vshl.u32 d28, d8, d2
1783 vext.32 d29, d8, d13, #1
1784 vext.32 d0, d1, d9, #1
1786 vext.32 d2, d9, d1, #1
1787 vext.32 d23, d15, d5, #1
1788 vmull.s32 q4, d20, d4
1790 vmlal.s32 q4, d21, d1
1792 vmlal.s32 q4, d26, d19
1793 vext.32 d3, d5, d15, #1
1794 vmlal.s32 q4, d27, d18
1796 vmlal.s32 q4, d28, d15
1797 vext.32 d14, d12, d11, #1
1798 vmull.s32 q5, d16, d23
1799 vext.32 d15, d13, d12, #1
1800 vmlal.s32 q5, d17, d4
1801 vst1.8 d8, [r5, : 64]!
1802 vmlal.s32 q5, d14, d1
1803 vext.32 d12, d9, d8, #0
1804 vmlal.s32 q5, d15, d19
1806 vmlal.s32 q5, d29, d18
1807 vext.32 d25, d19, d7, #1
1808 vmlal.s32 q6, d20, d5
1810 vmlal.s32 q6, d21, d4
1811 vst1.8 d11, [r5, : 64]!
1812 vmlal.s32 q6, d26, d1
1813 vext.32 d9, d10, d10, #0
1814 vmlal.s32 q6, d27, d19
1816 vmlal.s32 q6, d28, d18
1817 vmlal.s32 q4, d16, d24
1818 vmlal.s32 q4, d17, d5
1819 vmlal.s32 q4, d14, d4
1820 vst1.8 d12, [r5, : 64]!
1821 vmlal.s32 q4, d15, d1
1822 vext.32 d10, d13, d12, #0
1823 vmlal.s32 q4, d29, d19
1825 vmlal.s32 q5, d20, d6
1826 vmlal.s32 q5, d21, d5
1827 vmlal.s32 q5, d26, d4
1828 vext.32 d13, d8, d8, #0
1829 vmlal.s32 q5, d27, d1
1831 vmlal.s32 q5, d28, d19
1832 vst1.8 d9, [r5, : 64]!
1833 vmlal.s32 q6, d16, d25
1834 vmlal.s32 q6, d17, d6
1835 vst1.8 d10, [r5, : 64]
1836 vmlal.s32 q6, d14, d5
1837 vext.32 d8, d11, d10, #0
1838 vmlal.s32 q6, d15, d4
1840 vmlal.s32 q6, d29, d1
1841 vmlal.s32 q4, d20, d7
1842 vmlal.s32 q4, d21, d6
1843 vmlal.s32 q4, d26, d5
1844 vext.32 d11, d12, d12, #0
1845 vmlal.s32 q4, d27, d4
1847 vmlal.s32 q4, d28, d1
1848 vmlal.s32 q5, d16, d0
1850 vmlal.s32 q5, d17, d7
1851 vmlal.s32 q5, d14, d6
1852 vext.32 d30, d9, d8, #0
1853 vmlal.s32 q5, d15, d5
1854 vld1.8 {d31}, [r2, : 64]!
1855 vmlal.s32 q5, d29, d4
1856 vmlal.s32 q15, d20, d0
1857 vext.32 d0, d6, d18, #1
1858 vmlal.s32 q15, d21, d25
1860 vmlal.s32 q15, d26, d24
1861 vext.32 d1, d7, d19, #1
1862 vext.32 d7, d10, d10, #0
1863 vmlal.s32 q15, d27, d23
1865 vld1.8 {d6}, [r2, : 64]
1866 vmlal.s32 q15, d28, d22
1867 vmlal.s32 q3, d16, d4
1869 vmlal.s32 q3, d17, d2
1870 vext.32 d4, d31, d30, #0
1872 vmlal.s32 q3, d14, d1
1873 vext.32 d11, d13, d13, #0
1874 vext.32 d13, d30, d30, #0
1875 vmlal.s32 q3, d15, d0
1876 vext.32 d1, d8, d8, #0
1877 vmlal.s32 q3, d29, d3
1878 vld1.8 {d5}, [r2, : 64]
1880 vext.32 d10, d6, d6, #0
1881 vmov.i32 q1, #0xffffffff
1882 vshl.i64 q4, q1, #25
1884 vld1.8 {d14-d15}, [r5, : 128]
1886 vshl.i64 q1, q1, #26
1887 vshr.s64 q10, q9, #26
1888 vld1.8 {d0}, [r2, : 64]!
1889 vadd.i64 q5, q5, q10
1891 vld1.8 {d16}, [r2, : 64]!
1893 vld1.8 {d20-d21}, [r2, : 128]
1894 vadd.i64 q11, q5, q10
1896 vshr.s64 q9, q11, #25
1897 vext.32 d12, d5, d4, #0
1902 vsub.i64 q5, q5, q11
1903 vshr.s64 q11, q3, #26
1904 vext.32 d18, d11, d10, #0
1906 vadd.i64 q8, q8, q11
1907 vadd.i64 q11, q8, q10
1909 vshr.s64 q3, q11, #25
1913 vsub.i64 q8, q8, q11
1914 vshr.s64 q11, q6, #26
1916 vadd.i64 q9, q9, q11
1917 vadd.i64 d25, d19, d21
1919 vshr.s64 d23, d25, #25
1921 vadd.i64 d21, d23, d23
1922 vshl.i64 d25, d23, #4
1923 vadd.i64 d21, d21, d23
1924 vadd.i64 d25, d25, d21
1925 vadd.i64 d4, d4, d25
1927 vadd.i64 d12, d4, d14
1929 vst1.8 d0, [r2, : 64]
1930 vsub.i64 d19, d19, d9
1932 vst1.8 d16, [r2, : 64]
1933 vshr.s64 d22, d12, #26
1935 vadd.i64 d10, d10, d22
1939 vst1.8 d6, [r2, : 64]
1941 vst1.8 d18, [r2, : 64]
1944 vst1.8 d4, [r2, : 64]
1949 vld1.8 {d0-d1}, [r2, : 128]!
1950 vld1.8 {d2-d3}, [r2, : 128]!
1951 vld1.8 {d4}, [r2, : 64]
1952 vst1.8 {d0-d1}, [r4, : 128]!
1953 vst1.8 {d2-d3}, [r4, : 128]!
1954 vst1.8 d4, [r4, : 64]
1960 vld1.8 {d0-d1}, [r2, : 128]!
1961 vld1.8 {d2-d3}, [r2, : 128]!
1962 vld1.8 {d4}, [r2, : 64]
1963 vst1.8 {d0-d1}, [r4, : 128]!
1964 vst1.8 {d2-d3}, [r4, : 128]!
1965 vst1.8 d4, [r4, : 64]
1981 add r11, r1, r1, LSL #4
1982 add r11, r11, r1, LSL #1
1983 add r11, r11, #16777216
1984 mov r11, r11, ASR #25
1986 mov r11, r11, ASR #26
1988 mov r11, r11, ASR #25
1990 mov r11, r11, ASR #26
1992 mov r11, r11, ASR #25
1994 mov r11, r11, ASR #26
1996 mov r11, r11, ASR #25
1998 mov r11, r11, ASR #26
2000 mov r11, r11, ASR #25
2002 mov r11, r11, ASR #26
2004 mov r11, r11, ASR #25
2006 add r2, r2, r11, LSL #1
2007 add r2, r2, r11, LSL #4
2008 mov r11, r2, ASR #26
2010 sub r2, r2, r11, LSL #26
2011 mov r11, r3, ASR #25
2013 sub r3, r3, r11, LSL #25
2014 mov r11, r4, ASR #26
2016 sub r4, r4, r11, LSL #26
2017 mov r11, r5, ASR #25
2019 sub r5, r5, r11, LSL #25
2020 mov r11, r6, ASR #26
2022 sub r6, r6, r11, LSL #26
2023 mov r11, r7, ASR #25
2025 sub r7, r7, r11, LSL #25
2026 mov r11, r8, ASR #26
2028 sub r8, r8, r11, LSL #26
2029 mov r11, r9, ASR #25
2031 sub r9, r9, r11, LSL #25
2032 mov r11, r10, ASR #26
2034 sub r10, r10, r11, LSL #26
2035 mov r11, r1, ASR #25
2036 sub r1, r1, r11, LSL #25
2037 add r2, r2, r3, LSL #26
2039 add r3, r3, r4, LSL #19
2041 add r4, r4, r5, LSL #13
2043 add r5, r5, r6, LSL #6
2044 add r6, r7, r8, LSL #25
2046 add r7, r7, r9, LSL #19
2048 add r8, r8, r10, LSL #12
2049 mov r9, r10, LSR #20
2050 add r1, r9, r1, LSL #6
2062 ENDPROC(curve25519_neon)