2 /* Do not modify. This file is auto-generated from keccak1600-armv8.pl. */
5 .align 8 // strategic alignment and padding that allows to use
6 // address value as loop termination condition...
10 .quad 0x0000000000000001
11 .quad 0x0000000000008082
12 .quad 0x800000000000808a
13 .quad 0x8000000080008000
14 .quad 0x000000000000808b
15 .quad 0x0000000080000001
16 .quad 0x8000000080008081
17 .quad 0x8000000000008009
18 .quad 0x000000000000008a
19 .quad 0x0000000000000088
20 .quad 0x0000000080008009
21 .quad 0x000000008000000a
22 .quad 0x000000008000808b
23 .quad 0x800000000000008b
24 .quad 0x8000000000008089
25 .quad 0x8000000000008003
26 .quad 0x8000000000008002
27 .quad 0x8000000000000080
28 .quad 0x000000000000800a
29 .quad 0x800000008000000a
30 .quad 0x8000000080008081
31 .quad 0x8000000000008080
32 .quad 0x0000000080000001
33 .quad 0x8000000080008008
35 .type KeccakF1600_int,%function
39 stp x28,x30,[sp,#16] // 32 bytes on top are mine
43 ////////////////////////////////////////// Theta
45 stp x4,x9,[sp,#0] // offload pair...
76 eor x30,x30,x26,ror#63
79 eor x27, x2,x9 // mov x27,x2
90 ldp x4,x9,[sp,#0] // re-load offloaded data
91 eor x26, x3,x28 // mov x26,x3
97 eor x28, x4,x30 // mov x28,x4
103 ////////////////////////////////////////// Rho+Pi
138 ////////////////////////////////////////// Chi+Iota
150 ldr x30,[x27],#8 // Iota[i++]
153 tst x27,#255 // are we done?
157 eor x0,x0,x30 // A[0][0] ^= Iota
203 .size KeccakF1600_int,.-KeccakF1600_int
205 .type KeccakF1600,%function
208 stp x29,x30,[sp,#-128]!
217 str x0,[sp,#32] // offload argument
220 ldp x2,x3,[x26,#16*1]
221 ldp x4,x5,[x26,#16*2]
222 ldp x6,x7,[x26,#16*3]
223 ldp x8,x9,[x26,#16*4]
224 ldp x10,x11,[x26,#16*5]
225 ldp x12,x13,[x26,#16*6]
226 ldp x14,x15,[x26,#16*7]
227 ldp x16,x17,[x26,#16*8]
228 ldp x25,x19,[x26,#16*9]
229 ldp x20,x21,[x26,#16*10]
230 ldp x22,x23,[x26,#16*11]
236 stp x0,x1,[x26,#16*0]
237 stp x2,x3,[x26,#16*1]
238 stp x4,x5,[x26,#16*2]
239 stp x6,x7,[x26,#16*3]
240 stp x8,x9,[x26,#16*4]
241 stp x10,x11,[x26,#16*5]
242 stp x12,x13,[x26,#16*6]
243 stp x14,x15,[x26,#16*7]
244 stp x16,x17,[x26,#16*8]
245 stp x25,x19,[x26,#16*9]
246 stp x20,x21,[x26,#16*10]
247 stp x22,x23,[x26,#16*11]
250 ldp x19,x20,[x29,#16]
252 ldp x21,x22,[x29,#32]
253 ldp x23,x24,[x29,#48]
254 ldp x25,x26,[x29,#64]
255 ldp x27,x28,[x29,#80]
256 ldp x29,x30,[sp],#128
258 .size KeccakF1600,.-KeccakF1600
261 .type SHA3_absorb,%function
264 stp x29,x30,[sp,#-128]!
273 stp x0,x1,[sp,#32] // offload arguments
276 mov x26,x0 // uint64_t A[5][5]
277 mov x27,x1 // const void *inp
278 mov x28,x2 // size_t len
279 mov x30,x3 // size_t bsz
280 ldp x0,x1,[x26,#16*0]
281 ldp x2,x3,[x26,#16*1]
282 ldp x4,x5,[x26,#16*2]
283 ldp x6,x7,[x26,#16*3]
284 ldp x8,x9,[x26,#16*4]
285 ldp x10,x11,[x26,#16*5]
286 ldp x12,x13,[x26,#16*6]
287 ldp x14,x15,[x26,#16*7]
288 ldp x16,x17,[x26,#16*8]
289 ldp x25,x19,[x26,#16*9]
290 ldp x20,x21,[x26,#16*10]
291 ldp x22,x23,[x26,#16*11]
297 subs x26,x28,x30 // len - bsz
300 str x26,[sp,#48] // save len - bsz
301 ldr x26,[x27],#8 // *inp++
308 ldr x26,[x27],#8 // *inp++
314 ldr x26,[x27],#8 // *inp++
321 ldr x26,[x27],#8 // *inp++
327 ldr x26,[x27],#8 // *inp++
334 ldr x26,[x27],#8 // *inp++
340 ldr x26,[x27],#8 // *inp++
347 ldr x26,[x27],#8 // *inp++
353 ldr x26,[x27],#8 // *inp++
360 ldr x26,[x27],#8 // *inp++
366 ldr x26,[x27],#8 // *inp++
373 ldr x26,[x27],#8 // *inp++
379 ldr x26,[x27],#8 // *inp++
386 ldr x26,[x27],#8 // *inp++
392 ldr x26,[x27],#8 // *inp++
399 ldr x26,[x27],#8 // *inp++
405 ldr x26,[x27],#8 // *inp++
412 ldr x26,[x27],#8 // *inp++
418 ldr x26,[x27],#8 // *inp++
425 ldr x26,[x27],#8 // *inp++
431 ldr x26,[x27],#8 // *inp++
438 ldr x26,[x27],#8 // *inp++
444 ldr x26,[x27],#8 // *inp++
451 ldr x26,[x27],#8 // *inp++
457 ldr x26,[x27],#8 // *inp++
464 str x27,[sp,#40] // save inp
468 ldr x27,[sp,#40] // restore arguments
475 stp x0,x1,[x27,#16*0]
476 stp x2,x3,[x27,#16*1]
477 stp x4,x5,[x27,#16*2]
478 stp x6,x7,[x27,#16*3]
479 stp x8,x9,[x27,#16*4]
480 stp x10,x11,[x27,#16*5]
481 stp x12,x13,[x27,#16*6]
482 stp x14,x15,[x27,#16*7]
483 stp x16,x17,[x27,#16*8]
484 stp x25,x19,[x27,#16*9]
485 stp x20,x21,[x27,#16*10]
486 stp x22,x23,[x27,#16*11]
489 mov x0,x28 // return value
490 ldp x19,x20,[x29,#16]
492 ldp x21,x22,[x29,#32]
493 ldp x23,x24,[x29,#48]
494 ldp x25,x26,[x29,#64]
495 ldp x27,x28,[x29,#80]
496 ldp x29,x30,[sp],#128
498 .size SHA3_absorb,.-SHA3_absorb
500 .type SHA3_squeeze,%function
503 stp x29,x30,[sp,#-48]!
508 mov x19,x0 // put aside arguments
566 .size SHA3_squeeze,.-SHA3_squeeze
567 .type KeccakF1600_ce,%function
575 ////////////////////////////////////////////////// Theta
576 .inst 0xce052819 //eor3 v25.16b,v0.16b,v5.16b,v10.16b
577 .inst 0xce062c3a //eor3 v26.16b,v1.16b,v6.16b,v11.16b
578 .inst 0xce07305b //eor3 v27.16b,v2.16b,v7.16b,v12.16b
579 .inst 0xce08347c //eor3 v28.16b,v3.16b,v8.16b,v13.16b
580 .inst 0xce09389d //eor3 v29.16b,v4.16b,v9.16b,v14.16b
581 .inst 0xce0f5339 //eor3 v25.16b,v25.16b, v15.16b,v20.16b
582 .inst 0xce10575a //eor3 v26.16b,v26.16b, v16.16b,v21.16b
583 .inst 0xce115b7b //eor3 v27.16b,v27.16b, v17.16b,v22.16b
584 .inst 0xce125f9c //eor3 v28.16b,v28.16b, v18.16b,v23.16b
585 .inst 0xce1363bd //eor3 v29.16b,v29.16b, v19.16b,v24.16b
587 .inst 0xce7b8f3e //rax1 v30.16b,v25.16b,v27.16b // D[1]
588 .inst 0xce7c8f5f //rax1 v31.16b,v26.16b,v28.16b // D[2]
589 .inst 0xce7d8f7b //rax1 v27.16b,v27.16b,v29.16b // D[3]
590 .inst 0xce798f9c //rax1 v28.16b,v28.16b,v25.16b // D[4]
591 .inst 0xce7a8fbd //rax1 v29.16b,v29.16b,v26.16b // D[0]
593 ////////////////////////////////////////////////// Theta+Rho+Pi
594 .inst 0xce9e50d9 //xar v25.16b, v6.16b,v30.16b,#64-44 // C[0]=A[0][1]
595 .inst 0xce9cb126 //xar v6.16b,v9.16b,v28.16b,#64-20
596 .inst 0xce9f0ec9 //xar v9.16b,v22.16b,v31.16b,#64-61
597 .inst 0xce9c65d6 //xar v22.16b,v14.16b,v28.16b,#64-39
598 .inst 0xce9dba8e //xar v14.16b,v20.16b,v29.16b,#64-18
600 .inst 0xce9f0854 //xar v20.16b,v2.16b,v31.16b,#64-62
602 .inst 0xce9f5582 //xar v2.16b,v12.16b,v31.16b,#64-43
603 .inst 0xce9b9dac //xar v12.16b,v13.16b,v27.16b,#64-25
604 .inst 0xce9ce26d //xar v13.16b,v19.16b,v28.16b,#64-8
605 .inst 0xce9b22f3 //xar v19.16b,v23.16b,v27.16b,#64-56
606 .inst 0xce9d5df7 //xar v23.16b,v15.16b,v29.16b,#64-41
608 .inst 0xce9c948f //xar v15.16b,v4.16b,v28.16b,#64-27
610 eor v0.16b,v0.16b,v29.16b
613 .inst 0xce9bae5a //xar v26.16b, v18.16b,v27.16b,#64-21 // C[1]=A[0][3]
614 .inst 0xce9fc632 //xar v18.16b,v17.16b,v31.16b,#64-15
615 .inst 0xce9ed971 //xar v17.16b,v11.16b,v30.16b,#64-10
616 .inst 0xce9fe8eb //xar v11.16b,v7.16b,v31.16b,#64-6
617 .inst 0xce9df547 //xar v7.16b,v10.16b,v29.16b,#64-3
619 .inst 0xce9efc2a //xar v10.16b,v1.16b,v30.16b,#64-1 // *
621 .inst 0xce9ccb04 //xar v4.16b,v24.16b,v28.16b,#64-14
622 .inst 0xce9efab8 //xar v24.16b,v21.16b,v30.16b,#64-2
623 .inst 0xce9b2515 //xar v21.16b,v8.16b,v27.16b,#64-55
624 .inst 0xce9e4e08 //xar v8.16b,v16.16b,v30.16b,#64-45
625 .inst 0xce9d70b0 //xar v16.16b,v5.16b,v29.16b,#64-36
627 .inst 0xce9b907b //xar v27.16b, v3.16b,v27.16b,#64-28 // C[2]=A[1][0]
629 ////////////////////////////////////////////////// Chi+Iota
630 dup v31.2d,x11 // borrow C[6]
631 .inst 0xce22641c //bcax v28.16b, v0.16b,v2.16b,v25.16b // *
632 .inst 0xce3a0b21 //bcax v1.16b,v25.16b, v26.16b, v2.16b // *
633 .inst 0xce246842 //bcax v2.16b,v2.16b,v4.16b,v26.16b
634 .inst 0xce201343 //bcax v3.16b,v26.16b, v0.16b,v4.16b
635 .inst 0xce390084 //bcax v4.16b,v4.16b,v25.16b, v0.16b
637 .inst 0xce271b65 //bcax v5.16b,v27.16b, v7.16b,v6.16b // *
638 .inst 0xce281cd9 //bcax v25.16b, v6.16b,v8.16b,v7.16b // *
639 .inst 0xce2920e7 //bcax v7.16b,v7.16b,v9.16b,v8.16b
640 .inst 0xce3b2508 //bcax v8.16b,v8.16b,v27.16b, v9.16b
641 .inst 0xce266d29 //bcax v9.16b,v9.16b,v6.16b,v27.16b
643 eor v0.16b,v28.16b,v31.16b // Iota
645 .inst 0xce2c2d5a //bcax v26.16b, v10.16b,v12.16b,v11.16b // *
646 .inst 0xce2d317b //bcax v27.16b, v11.16b,v13.16b,v12.16b // *
647 .inst 0xce2e358c //bcax v12.16b,v12.16b,v14.16b,v13.16b
648 .inst 0xce2a39ad //bcax v13.16b,v13.16b,v10.16b,v14.16b
649 .inst 0xce2b29ce //bcax v14.16b,v14.16b,v11.16b,v10.16b
651 .inst 0xce3141fc //bcax v28.16b, v15.16b,v17.16b,v16.16b // *
652 .inst 0xce32461d //bcax v29.16b, v16.16b,v18.16b,v17.16b // *
653 .inst 0xce334a31 //bcax v17.16b,v17.16b,v19.16b,v18.16b
654 .inst 0xce2f4e52 //bcax v18.16b,v18.16b,v15.16b,v19.16b
655 .inst 0xce303e73 //bcax v19.16b,v19.16b,v16.16b,v15.16b
657 .inst 0xce36569e //bcax v30.16b, v20.16b,v22.16b,v21.16b // *
658 .inst 0xce375abf //bcax v31.16b, v21.16b,v23.16b,v22.16b // *
659 .inst 0xce385ed6 //bcax v22.16b,v22.16b,v24.16b,v23.16b
660 .inst 0xce3462f7 //bcax v23.16b,v23.16b,v20.16b,v24.16b
661 .inst 0xce355318 //bcax v24.16b,v24.16b,v21.16b,v20.16b
662 ////////////////////////////////////////////////// Theta
663 .inst 0xce056806 //eor3 v6.16b,v0.16b,v5.16b,v26.16b
664 .inst 0xce196c2a //eor3 v10.16b,v1.16b,v25.16b,v27.16b
665 .inst 0xce07304b //eor3 v11.16b,v2.16b,v7.16b,v12.16b
666 .inst 0xce08346f //eor3 v15.16b,v3.16b,v8.16b,v13.16b
667 .inst 0xce093890 //eor3 v16.16b,v4.16b,v9.16b,v14.16b
668 .inst 0xce1c78c6 //eor3 v6.16b,v6.16b, v28.16b,v30.16b
669 .inst 0xce1d7d4a //eor3 v10.16b,v10.16b, v29.16b,v31.16b
670 .inst 0xce11596b //eor3 v11.16b,v11.16b, v17.16b,v22.16b
671 .inst 0xce125def //eor3 v15.16b,v15.16b, v18.16b,v23.16b
672 .inst 0xce136210 //eor3 v16.16b,v16.16b, v19.16b,v24.16b
674 .inst 0xce6b8cd4 //rax1 v20.16b,v6.16b,v11.16b // D[1]
675 .inst 0xce6f8d55 //rax1 v21.16b,v10.16b,v15.16b // D[2]
676 .inst 0xce708d6b //rax1 v11.16b,v11.16b,v16.16b // D[3]
677 .inst 0xce668def //rax1 v15.16b,v15.16b,v6.16b // D[4]
678 .inst 0xce6a8e10 //rax1 v16.16b,v16.16b,v10.16b // D[0]
680 ////////////////////////////////////////////////// Theta+Rho+Pi
681 .inst 0xce945326 //xar v6.16b, v25.16b,v20.16b,#64-44 // C[0]=A[0][1]
682 .inst 0xce8fb139 //xar v25.16b,v9.16b,v15.16b,#64-20
683 .inst 0xce950ec9 //xar v9.16b,v22.16b,v21.16b,#64-61
684 .inst 0xce8f65d6 //xar v22.16b,v14.16b,v15.16b,#64-39
685 .inst 0xce90bbce //xar v14.16b,v30.16b,v16.16b,#64-18
687 .inst 0xce95085e //xar v30.16b,v2.16b,v21.16b,#64-62
689 .inst 0xce955582 //xar v2.16b,v12.16b,v21.16b,#64-43
690 .inst 0xce8b9dac //xar v12.16b,v13.16b,v11.16b,#64-25
691 .inst 0xce8fe26d //xar v13.16b,v19.16b,v15.16b,#64-8
692 .inst 0xce8b22f3 //xar v19.16b,v23.16b,v11.16b,#64-56
693 .inst 0xce905f97 //xar v23.16b,v28.16b,v16.16b,#64-41
695 .inst 0xce8f949c //xar v28.16b,v4.16b,v15.16b,#64-27
697 eor v0.16b,v0.16b,v16.16b
700 .inst 0xce8bae4a //xar v10.16b, v18.16b,v11.16b,#64-21 // C[1]=A[0][3]
701 .inst 0xce95c632 //xar v18.16b,v17.16b,v21.16b,#64-15
702 .inst 0xce94db71 //xar v17.16b,v27.16b,v20.16b,#64-10
703 .inst 0xce95e8fb //xar v27.16b,v7.16b,v21.16b,#64-6
704 .inst 0xce90f747 //xar v7.16b,v26.16b,v16.16b,#64-3
706 .inst 0xce94fc3a //xar v26.16b,v1.16b,v20.16b,#64-1 // *
708 .inst 0xce8fcb04 //xar v4.16b,v24.16b,v15.16b,#64-14
709 .inst 0xce94fbf8 //xar v24.16b,v31.16b,v20.16b,#64-2
710 .inst 0xce8b251f //xar v31.16b,v8.16b,v11.16b,#64-55
711 .inst 0xce944fa8 //xar v8.16b,v29.16b,v20.16b,#64-45
712 .inst 0xce9070bd //xar v29.16b,v5.16b,v16.16b,#64-36
714 .inst 0xce8b906b //xar v11.16b, v3.16b,v11.16b,#64-28 // C[2]=A[1][0]
716 ////////////////////////////////////////////////// Chi+Iota
717 dup v21.2d,x11 // borrow C[6]
718 .inst 0xce22180f //bcax v15.16b, v0.16b,v2.16b,v6.16b // *
719 .inst 0xce2a08c1 //bcax v1.16b,v6.16b, v10.16b, v2.16b // *
720 .inst 0xce242842 //bcax v2.16b,v2.16b,v4.16b,v10.16b
721 .inst 0xce201143 //bcax v3.16b,v10.16b, v0.16b,v4.16b
722 .inst 0xce260084 //bcax v4.16b,v4.16b,v6.16b, v0.16b
724 .inst 0xce276565 //bcax v5.16b,v11.16b, v7.16b,v25.16b // *
725 .inst 0xce281f26 //bcax v6.16b, v25.16b,v8.16b,v7.16b // *
726 .inst 0xce2920e7 //bcax v7.16b,v7.16b,v9.16b,v8.16b
727 .inst 0xce2b2508 //bcax v8.16b,v8.16b,v11.16b, v9.16b
728 .inst 0xce392d29 //bcax v9.16b,v9.16b,v25.16b,v11.16b
730 eor v0.16b,v15.16b,v21.16b // Iota
732 .inst 0xce2c6f4a //bcax v10.16b, v26.16b,v12.16b,v27.16b // *
733 .inst 0xce2d336b //bcax v11.16b, v27.16b,v13.16b,v12.16b // *
734 .inst 0xce2e358c //bcax v12.16b,v12.16b,v14.16b,v13.16b
735 .inst 0xce3a39ad //bcax v13.16b,v13.16b,v26.16b,v14.16b
736 .inst 0xce3b69ce //bcax v14.16b,v14.16b,v27.16b,v26.16b
738 .inst 0xce31778f //bcax v15.16b, v28.16b,v17.16b,v29.16b // *
739 .inst 0xce3247b0 //bcax v16.16b, v29.16b,v18.16b,v17.16b // *
740 .inst 0xce334a31 //bcax v17.16b,v17.16b,v19.16b,v18.16b
741 .inst 0xce3c4e52 //bcax v18.16b,v18.16b,v28.16b,v19.16b
742 .inst 0xce3d7273 //bcax v19.16b,v19.16b,v29.16b,v28.16b
744 .inst 0xce367fd4 //bcax v20.16b, v30.16b,v22.16b,v31.16b // *
745 .inst 0xce375bf5 //bcax v21.16b, v31.16b,v23.16b,v22.16b // *
746 .inst 0xce385ed6 //bcax v22.16b,v22.16b,v24.16b,v23.16b
747 .inst 0xce3e62f7 //bcax v23.16b,v23.16b,v30.16b,v24.16b
748 .inst 0xce3f7b18 //bcax v24.16b,v24.16b,v31.16b,v30.16b
753 .size KeccakF1600_ce,.-KeccakF1600_ce
755 .type KeccakF1600_cext,%function
758 stp x29,x30,[sp,#-80]!
760 stp d8,d9,[sp,#16] // per ABI requirement
769 ldp d10,d11,[x0,#8*10]
770 ldp d12,d13,[x0,#8*12]
771 ldp d14,d15,[x0,#8*14]
772 ldp d16,d17,[x0,#8*16]
773 ldp d18,d19,[x0,#8*18]
774 ldp d20,d21,[x0,#8*20]
775 ldp d22,d23,[x0,#8*22]
784 stp d10,d11,[x0,#8*10]
785 stp d12,d13,[x0,#8*12]
786 stp d14,d15,[x0,#8*14]
787 stp d16,d17,[x0,#8*16]
788 stp d18,d19,[x0,#8*18]
789 stp d20,d21,[x0,#8*20]
790 stp d22,d23,[x0,#8*22]
799 .size KeccakF1600_cext,.-KeccakF1600_cext
800 .globl SHA3_absorb_cext
801 .type SHA3_absorb_cext,%function
804 stp x29,x30,[sp,#-80]!
806 stp d8,d9,[sp,#16] // per ABI requirement
815 ldp d10,d11,[x0,#8*10]
816 ldp d12,d13,[x0,#8*12]
817 ldp d14,d15,[x0,#8*14]
818 ldp d16,d17,[x0,#8*16]
819 ldp d18,d19,[x0,#8*18]
820 ldp d20,d21,[x0,#8*20]
821 ldp d22,d23,[x0,#8*22]
827 subs x2,x2,x3 // len - bsz
829 ldr d31,[x1],#8 // *inp++
831 rev64 v31.16b,v31.16b
833 eor v0.16b,v0.16b,v31.16b
835 blo .Lprocess_block_ce
836 ldr d31,[x1],#8 // *inp++
840 eor v1.16b,v1.16b,v31.16b
841 beq .Lprocess_block_ce
842 ldr d31,[x1],#8 // *inp++
844 rev64 v31.16b,v31.16b
846 eor v2.16b,v2.16b,v31.16b
848 blo .Lprocess_block_ce
849 ldr d31,[x1],#8 // *inp++
853 eor v3.16b,v3.16b,v31.16b
854 beq .Lprocess_block_ce
855 ldr d31,[x1],#8 // *inp++
857 rev64 v31.16b,v31.16b
859 eor v4.16b,v4.16b,v31.16b
861 blo .Lprocess_block_ce
862 ldr d31,[x1],#8 // *inp++
866 eor v5.16b,v5.16b,v31.16b
867 beq .Lprocess_block_ce
868 ldr d31,[x1],#8 // *inp++
870 rev64 v31.16b,v31.16b
872 eor v6.16b,v6.16b,v31.16b
874 blo .Lprocess_block_ce
875 ldr d31,[x1],#8 // *inp++
879 eor v7.16b,v7.16b,v31.16b
880 beq .Lprocess_block_ce
881 ldr d31,[x1],#8 // *inp++
883 rev64 v31.16b,v31.16b
885 eor v8.16b,v8.16b,v31.16b
887 blo .Lprocess_block_ce
888 ldr d31,[x1],#8 // *inp++
892 eor v9.16b,v9.16b,v31.16b
893 beq .Lprocess_block_ce
894 ldr d31,[x1],#8 // *inp++
896 rev64 v31.16b,v31.16b
898 eor v10.16b,v10.16b,v31.16b
900 blo .Lprocess_block_ce
901 ldr d31,[x1],#8 // *inp++
905 eor v11.16b,v11.16b,v31.16b
906 beq .Lprocess_block_ce
907 ldr d31,[x1],#8 // *inp++
909 rev64 v31.16b,v31.16b
911 eor v12.16b,v12.16b,v31.16b
913 blo .Lprocess_block_ce
914 ldr d31,[x1],#8 // *inp++
918 eor v13.16b,v13.16b,v31.16b
919 beq .Lprocess_block_ce
920 ldr d31,[x1],#8 // *inp++
922 rev64 v31.16b,v31.16b
924 eor v14.16b,v14.16b,v31.16b
926 blo .Lprocess_block_ce
927 ldr d31,[x1],#8 // *inp++
931 eor v15.16b,v15.16b,v31.16b
932 beq .Lprocess_block_ce
933 ldr d31,[x1],#8 // *inp++
935 rev64 v31.16b,v31.16b
937 eor v16.16b,v16.16b,v31.16b
939 blo .Lprocess_block_ce
940 ldr d31,[x1],#8 // *inp++
944 eor v17.16b,v17.16b,v31.16b
945 beq .Lprocess_block_ce
946 ldr d31,[x1],#8 // *inp++
948 rev64 v31.16b,v31.16b
950 eor v18.16b,v18.16b,v31.16b
952 blo .Lprocess_block_ce
953 ldr d31,[x1],#8 // *inp++
957 eor v19.16b,v19.16b,v31.16b
958 beq .Lprocess_block_ce
959 ldr d31,[x1],#8 // *inp++
961 rev64 v31.16b,v31.16b
963 eor v20.16b,v20.16b,v31.16b
965 blo .Lprocess_block_ce
966 ldr d31,[x1],#8 // *inp++
970 eor v21.16b,v21.16b,v31.16b
971 beq .Lprocess_block_ce
972 ldr d31,[x1],#8 // *inp++
974 rev64 v31.16b,v31.16b
976 eor v22.16b,v22.16b,v31.16b
978 blo .Lprocess_block_ce
979 ldr d31,[x1],#8 // *inp++
983 eor v23.16b,v23.16b,v31.16b
984 beq .Lprocess_block_ce
985 ldr d31,[x1],#8 // *inp++
989 eor v24.16b,v24.16b,v31.16b
1004 stp d10,d11,[x0,#8*10]
1005 stp d12,d13,[x0,#8*12]
1006 stp d14,d15,[x0,#8*14]
1007 stp d16,d17,[x0,#8*16]
1008 stp d18,d19,[x0,#8*18]
1009 stp d20,d21,[x0,#8*20]
1010 stp d22,d23,[x0,#8*22]
1012 add x0,x2,x3 // return value
1015 ldp d10,d11,[sp,#32]
1016 ldp d12,d13,[sp,#48]
1017 ldp d14,d15,[sp,#64]
1018 ldp x29,x30,[sp],#80
1020 .size SHA3_absorb_cext,.-SHA3_absorb_cext
1021 .globl SHA3_squeeze_cext
1022 .type SHA3_squeeze_cext,%function
1025 stp x29,x30,[sp,#-16]!
1033 blo .Lsqueeze_tail_ce
1034 #ifdef __AARCH64EB__
1038 beq .Lsqueeze_done_ce
1042 bhi .Loop_squeeze_ce
1055 beq .Lsqueeze_done_ce
1059 beq .Lsqueeze_done_ce
1063 beq .Lsqueeze_done_ce
1067 beq .Lsqueeze_done_ce
1071 beq .Lsqueeze_done_ce
1075 beq .Lsqueeze_done_ce
1081 .size SHA3_squeeze_cext,.-SHA3_squeeze_cext
1082 .byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0