Path: blob/main/sys/crypto/openssl/aarch64/keccak1600-armv8.S
39507 views
/* Do not modify. This file is auto-generated from keccak1600-armv8.pl. */1#include "arm_arch.h"23.section .rodata45.align 8 // strategic alignment and padding that allows to use6// address value as loop termination condition...7.quad 0,0,0,0,0,0,0,08.type iotas,%object9iotas:10.quad 0x000000000000000111.quad 0x000000000000808212.quad 0x800000000000808a13.quad 0x800000008000800014.quad 0x000000000000808b15.quad 0x000000008000000116.quad 0x800000008000808117.quad 0x800000000000800918.quad 0x000000000000008a19.quad 0x000000000000008820.quad 0x000000008000800921.quad 0x000000008000000a22.quad 0x000000008000808b23.quad 0x800000000000008b24.quad 0x800000000000808925.quad 0x800000000000800326.quad 0x800000000000800227.quad 0x800000000000008028.quad 0x000000000000800a29.quad 0x800000008000000a30.quad 0x800000008000808131.quad 0x800000000000808032.quad 0x000000008000000133.quad 0x800000008000800834.size iotas,.-iotas35.text3637.type KeccakF1600_int,%function38.align 539KeccakF1600_int:40AARCH64_SIGN_LINK_REGISTER41adrp x28,iotas42add x28,x28,#:lo12:iotas43stp x28,x30,[sp,#16] // 32 bytes on top are mine44b .Loop45.align 446.Loop:47////////////////////////////////////////// Theta48eor x26,x0,x549stp x4,x9,[sp,#0] // offload pair...50eor x27,x1,x651eor x28,x2,x752eor x30,x3,x853eor x4,x4,x954eor x26,x26,x1055eor x27,x27,x1156eor x28,x28,x1257eor x30,x30,x1358eor x4,x4,x1459eor x26,x26,x1560eor x27,x27,x1661eor x28,x28,x1762eor x30,x30,x2563eor x4,x4,x1964eor x26,x26,x2065eor x28,x28,x2266eor x27,x27,x2167eor x30,x30,x2368eor x4,x4,x246970eor x9,x26,x28,ror#637172eor x1,x1,x973eor x6,x6,x974eor x11,x11,x975eor x16,x16,x976eor x21,x21,x97778eor x9,x27,x30,ror#6379eor x28,x28,x4,ror#6380eor x30,x30,x26,ror#6381eor x4,x4,x27,ror#638283eor x27, x2,x9 // mov x27,x284eor x7,x7,x985eor x12,x12,x986eor x17,x17,x987eor x22,x22,x98889eor x0,x0,x490eor x5,x5,x491eor x10,x10,x492eor x15,x15,x493eor x20,x20,x494ldp x4,x9,[sp,#0] // re-load offloaded data95eor x26, x3,x28 // mov x26,x396eor x8,x8,x2897eor x13,x13,x2898eor x25,x25,x2899eor x23,x23,x28100101eor x28, x4,x30 // mov x28,x4102eor x9,x9,x30103eor x14,x14,x30104eor x19,x19,x30105eor x24,x24,x30106107////////////////////////////////////////// Rho+Pi108mov x30,x1109ror x1,x6,#64-44110//mov x27,x2111ror x2,x12,#64-43112//mov x26,x3113ror x3,x25,#64-21114//mov x28,x4115ror x4,x24,#64-14116117ror x6,x9,#64-20118ror x12,x13,#64-25119ror x25,x17,#64-15120ror x24,x21,#64-2121122ror x9,x22,#64-61123ror x13,x19,#64-8124ror x17,x11,#64-10125ror x21,x8,#64-55126127ror x22,x14,#64-39128ror x19,x23,#64-56129ror x11,x7,#64-6130ror x8,x16,#64-45131132ror x14,x20,#64-18133ror x23,x15,#64-41134ror x7,x10,#64-3135ror x16,x5,#64-36136137ror x5,x26,#64-28138ror x10,x30,#64-1139ror x15,x28,#64-27140ror x20,x27,#64-62141142////////////////////////////////////////// Chi+Iota143bic x26,x2,x1144bic x27,x3,x2145bic x28,x0,x4146bic x30,x1,x0147eor x0,x0,x26148bic x26,x4,x3149eor x1,x1,x27150ldr x27,[sp,#16]151eor x3,x3,x28152eor x4,x4,x30153eor x2,x2,x26154ldr x30,[x27],#8 // Iota[i++]155156bic x26,x7,x6157tst x27,#255 // are we done?158str x27,[sp,#16]159bic x27,x8,x7160bic x28,x5,x9161eor x0,x0,x30 // A[0][0] ^= Iota162bic x30,x6,x5163eor x5,x5,x26164bic x26,x9,x8165eor x6,x6,x27166eor x8,x8,x28167eor x9,x9,x30168eor x7,x7,x26169170bic x26,x12,x11171bic x27,x13,x12172bic x28,x10,x14173bic x30,x11,x10174eor x10,x10,x26175bic x26,x14,x13176eor x11,x11,x27177eor x13,x13,x28178eor x14,x14,x30179eor x12,x12,x26180181bic x26,x17,x16182bic x27,x25,x17183bic x28,x15,x19184bic x30,x16,x15185eor x15,x15,x26186bic x26,x19,x25187eor x16,x16,x27188eor x25,x25,x28189eor x19,x19,x30190eor x17,x17,x26191192bic x26,x22,x21193bic x27,x23,x22194bic x28,x20,x24195bic x30,x21,x20196eor x20,x20,x26197bic x26,x24,x23198eor x21,x21,x27199eor x23,x23,x28200eor x24,x24,x30201eor x22,x22,x26202203bne .Loop204205ldr x30,[sp,#24]206AARCH64_VALIDATE_LINK_REGISTER207ret208.size KeccakF1600_int,.-KeccakF1600_int209210.type KeccakF1600,%function211.align 5212KeccakF1600:213AARCH64_SIGN_LINK_REGISTER214stp x29,x30,[sp,#-128]!215add x29,sp,#0216stp x19,x20,[sp,#16]217stp x21,x22,[sp,#32]218stp x23,x24,[sp,#48]219stp x25,x26,[sp,#64]220stp x27,x28,[sp,#80]221sub sp,sp,#48222223str x0,[sp,#32] // offload argument224mov x26,x0225ldp x0,x1,[x0,#16*0]226ldp x2,x3,[x26,#16*1]227ldp x4,x5,[x26,#16*2]228ldp x6,x7,[x26,#16*3]229ldp x8,x9,[x26,#16*4]230ldp x10,x11,[x26,#16*5]231ldp x12,x13,[x26,#16*6]232ldp x14,x15,[x26,#16*7]233ldp x16,x17,[x26,#16*8]234ldp x25,x19,[x26,#16*9]235ldp x20,x21,[x26,#16*10]236ldp x22,x23,[x26,#16*11]237ldr x24,[x26,#16*12]238239bl KeccakF1600_int240241ldr x26,[sp,#32]242stp x0,x1,[x26,#16*0]243stp x2,x3,[x26,#16*1]244stp x4,x5,[x26,#16*2]245stp x6,x7,[x26,#16*3]246stp x8,x9,[x26,#16*4]247stp x10,x11,[x26,#16*5]248stp x12,x13,[x26,#16*6]249stp x14,x15,[x26,#16*7]250stp x16,x17,[x26,#16*8]251stp x25,x19,[x26,#16*9]252stp x20,x21,[x26,#16*10]253stp x22,x23,[x26,#16*11]254str x24,[x26,#16*12]255256ldp x19,x20,[x29,#16]257add sp,sp,#48258ldp x21,x22,[x29,#32]259ldp x23,x24,[x29,#48]260ldp x25,x26,[x29,#64]261ldp x27,x28,[x29,#80]262ldp x29,x30,[sp],#128263AARCH64_VALIDATE_LINK_REGISTER264ret265.size KeccakF1600,.-KeccakF1600266267.globl SHA3_absorb268.type SHA3_absorb,%function269.align 5270SHA3_absorb:271AARCH64_SIGN_LINK_REGISTER272stp x29,x30,[sp,#-128]!273add x29,sp,#0274stp x19,x20,[sp,#16]275stp x21,x22,[sp,#32]276stp x23,x24,[sp,#48]277stp x25,x26,[sp,#64]278stp x27,x28,[sp,#80]279sub sp,sp,#64280281stp x0,x1,[sp,#32] // offload arguments282stp x2,x3,[sp,#48]283284mov x26,x0 // uint64_t A[5][5]285mov x27,x1 // const void *inp286mov x28,x2 // size_t len287mov x30,x3 // size_t bsz288ldp x0,x1,[x26,#16*0]289ldp x2,x3,[x26,#16*1]290ldp x4,x5,[x26,#16*2]291ldp x6,x7,[x26,#16*3]292ldp x8,x9,[x26,#16*4]293ldp x10,x11,[x26,#16*5]294ldp x12,x13,[x26,#16*6]295ldp x14,x15,[x26,#16*7]296ldp x16,x17,[x26,#16*8]297ldp x25,x19,[x26,#16*9]298ldp x20,x21,[x26,#16*10]299ldp x22,x23,[x26,#16*11]300ldr x24,[x26,#16*12]301b .Loop_absorb302303.align 4304.Loop_absorb:305subs x26,x28,x30 // len - bsz306blo .Labsorbed307308str x26,[sp,#48] // save len - bsz309ldr x26,[x27],#8 // *inp++310#ifdef __AARCH64EB__311rev x26,x26312#endif313eor x0,x0,x26314cmp x30,#8*(0+2)315blo .Lprocess_block316ldr x26,[x27],#8 // *inp++317#ifdef __AARCH64EB__318rev x26,x26319#endif320eor x1,x1,x26321beq .Lprocess_block322ldr x26,[x27],#8 // *inp++323#ifdef __AARCH64EB__324rev x26,x26325#endif326eor x2,x2,x26327cmp x30,#8*(2+2)328blo .Lprocess_block329ldr x26,[x27],#8 // *inp++330#ifdef __AARCH64EB__331rev x26,x26332#endif333eor x3,x3,x26334beq .Lprocess_block335ldr x26,[x27],#8 // *inp++336#ifdef __AARCH64EB__337rev x26,x26338#endif339eor x4,x4,x26340cmp x30,#8*(4+2)341blo .Lprocess_block342ldr x26,[x27],#8 // *inp++343#ifdef __AARCH64EB__344rev x26,x26345#endif346eor x5,x5,x26347beq .Lprocess_block348ldr x26,[x27],#8 // *inp++349#ifdef __AARCH64EB__350rev x26,x26351#endif352eor x6,x6,x26353cmp x30,#8*(6+2)354blo .Lprocess_block355ldr x26,[x27],#8 // *inp++356#ifdef __AARCH64EB__357rev x26,x26358#endif359eor x7,x7,x26360beq .Lprocess_block361ldr x26,[x27],#8 // *inp++362#ifdef __AARCH64EB__363rev x26,x26364#endif365eor x8,x8,x26366cmp x30,#8*(8+2)367blo .Lprocess_block368ldr x26,[x27],#8 // *inp++369#ifdef __AARCH64EB__370rev x26,x26371#endif372eor x9,x9,x26373beq .Lprocess_block374ldr x26,[x27],#8 // *inp++375#ifdef __AARCH64EB__376rev x26,x26377#endif378eor x10,x10,x26379cmp x30,#8*(10+2)380blo .Lprocess_block381ldr x26,[x27],#8 // *inp++382#ifdef __AARCH64EB__383rev x26,x26384#endif385eor x11,x11,x26386beq .Lprocess_block387ldr x26,[x27],#8 // *inp++388#ifdef __AARCH64EB__389rev x26,x26390#endif391eor x12,x12,x26392cmp x30,#8*(12+2)393blo .Lprocess_block394ldr x26,[x27],#8 // *inp++395#ifdef __AARCH64EB__396rev x26,x26397#endif398eor x13,x13,x26399beq .Lprocess_block400ldr x26,[x27],#8 // *inp++401#ifdef __AARCH64EB__402rev x26,x26403#endif404eor x14,x14,x26405cmp x30,#8*(14+2)406blo .Lprocess_block407ldr x26,[x27],#8 // *inp++408#ifdef __AARCH64EB__409rev x26,x26410#endif411eor x15,x15,x26412beq .Lprocess_block413ldr x26,[x27],#8 // *inp++414#ifdef __AARCH64EB__415rev x26,x26416#endif417eor x16,x16,x26418cmp x30,#8*(16+2)419blo .Lprocess_block420ldr x26,[x27],#8 // *inp++421#ifdef __AARCH64EB__422rev x26,x26423#endif424eor x17,x17,x26425beq .Lprocess_block426ldr x26,[x27],#8 // *inp++427#ifdef __AARCH64EB__428rev x26,x26429#endif430eor x25,x25,x26431cmp x30,#8*(18+2)432blo .Lprocess_block433ldr x26,[x27],#8 // *inp++434#ifdef __AARCH64EB__435rev x26,x26436#endif437eor x19,x19,x26438beq .Lprocess_block439ldr x26,[x27],#8 // *inp++440#ifdef __AARCH64EB__441rev x26,x26442#endif443eor x20,x20,x26444cmp x30,#8*(20+2)445blo .Lprocess_block446ldr x26,[x27],#8 // *inp++447#ifdef __AARCH64EB__448rev x26,x26449#endif450eor x21,x21,x26451beq .Lprocess_block452ldr x26,[x27],#8 // *inp++453#ifdef __AARCH64EB__454rev x26,x26455#endif456eor x22,x22,x26457cmp x30,#8*(22+2)458blo .Lprocess_block459ldr x26,[x27],#8 // *inp++460#ifdef __AARCH64EB__461rev x26,x26462#endif463eor x23,x23,x26464beq .Lprocess_block465ldr x26,[x27],#8 // *inp++466#ifdef __AARCH64EB__467rev x26,x26468#endif469eor x24,x24,x26470471.Lprocess_block:472str x27,[sp,#40] // save inp473474bl KeccakF1600_int475476ldr x27,[sp,#40] // restore arguments477ldp x28,x30,[sp,#48]478b .Loop_absorb479480.align 4481.Labsorbed:482ldr x27,[sp,#32]483stp x0,x1,[x27,#16*0]484stp x2,x3,[x27,#16*1]485stp x4,x5,[x27,#16*2]486stp x6,x7,[x27,#16*3]487stp x8,x9,[x27,#16*4]488stp x10,x11,[x27,#16*5]489stp x12,x13,[x27,#16*6]490stp x14,x15,[x27,#16*7]491stp x16,x17,[x27,#16*8]492stp x25,x19,[x27,#16*9]493stp x20,x21,[x27,#16*10]494stp x22,x23,[x27,#16*11]495str x24,[x27,#16*12]496497mov x0,x28 // return value498ldp x19,x20,[x29,#16]499add sp,sp,#64500ldp x21,x22,[x29,#32]501ldp x23,x24,[x29,#48]502ldp x25,x26,[x29,#64]503ldp x27,x28,[x29,#80]504ldp x29,x30,[sp],#128505AARCH64_VALIDATE_LINK_REGISTER506ret507.size SHA3_absorb,.-SHA3_absorb508.globl SHA3_squeeze509.type SHA3_squeeze,%function510.align 5511SHA3_squeeze:512AARCH64_SIGN_LINK_REGISTER513stp x29,x30,[sp,#-48]!514add x29,sp,#0515stp x19,x20,[sp,#16]516stp x21,x22,[sp,#32]517518mov x19,x0 // put aside arguments519mov x20,x1520mov x21,x2521mov x22,x3522cmp w4, #0 // w4 = 'next' argument523bne .Lnext_block524525.Loop_squeeze:526ldr x4,[x0],#8527cmp x21,#8528blo .Lsqueeze_tail529#ifdef __AARCH64EB__530rev x4,x4531#endif532str x4,[x20],#8533subs x21,x21,#8534beq .Lsqueeze_done535536subs x3,x3,#8537bhi .Loop_squeeze538.Lnext_block:539mov x0,x19540bl KeccakF1600541mov x0,x19542mov x3,x22543b .Loop_squeeze544545.align 4546.Lsqueeze_tail:547strb w4,[x20],#1548lsr x4,x4,#8549subs x21,x21,#1550beq .Lsqueeze_done551strb w4,[x20],#1552lsr x4,x4,#8553subs x21,x21,#1554beq .Lsqueeze_done555strb w4,[x20],#1556lsr x4,x4,#8557subs x21,x21,#1558beq .Lsqueeze_done559strb w4,[x20],#1560lsr x4,x4,#8561subs x21,x21,#1562beq .Lsqueeze_done563strb w4,[x20],#1564lsr x4,x4,#8565subs x21,x21,#1566beq .Lsqueeze_done567strb w4,[x20],#1568lsr x4,x4,#8569subs x21,x21,#1570beq .Lsqueeze_done571strb w4,[x20],#1572573.Lsqueeze_done:574ldp x19,x20,[sp,#16]575ldp x21,x22,[sp,#32]576ldp x29,x30,[sp],#48577AARCH64_VALIDATE_LINK_REGISTER578ret579.size SHA3_squeeze,.-SHA3_squeeze580.type KeccakF1600_ce,%function581.align 5582KeccakF1600_ce:583mov x9,#24584adrp x10,iotas585add x10,x10,#:lo12:iotas586b .Loop_ce587.align 4588.Loop_ce:589////////////////////////////////////////////////// Theta590.inst 0xce0f2a99 //eor3 v25.16b,v20.16b,v15.16b,v10.16b591.inst 0xce102eba //eor3 v26.16b,v21.16b,v16.16b,v11.16b592.inst 0xce1132db //eor3 v27.16b,v22.16b,v17.16b,v12.16b593.inst 0xce1236fc //eor3 v28.16b,v23.16b,v18.16b,v13.16b594.inst 0xce133b1d //eor3 v29.16b,v24.16b,v19.16b,v14.16b595.inst 0xce050339 //eor3 v25.16b,v25.16b, v5.16b,v0.16b596.inst 0xce06075a //eor3 v26.16b,v26.16b, v6.16b,v1.16b597.inst 0xce070b7b //eor3 v27.16b,v27.16b, v7.16b,v2.16b598.inst 0xce080f9c //eor3 v28.16b,v28.16b, v8.16b,v3.16b599.inst 0xce0913bd //eor3 v29.16b,v29.16b, v9.16b,v4.16b600601.inst 0xce7b8f3e //rax1 v30.16b,v25.16b,v27.16b // D[1]602.inst 0xce7c8f5f //rax1 v31.16b,v26.16b,v28.16b // D[2]603.inst 0xce7d8f7b //rax1 v27.16b,v27.16b,v29.16b // D[3]604.inst 0xce798f9c //rax1 v28.16b,v28.16b,v25.16b // D[4]605.inst 0xce7a8fbd //rax1 v29.16b,v29.16b,v26.16b // D[0]606607////////////////////////////////////////////////// Theta+Rho+Pi608.inst 0xce9efc39 //xar v25.16b, v1.16b,v30.16b,#64-1 // C[0]=A[2][0]609610.inst 0xce9e50c1 //xar v1.16b,v6.16b,v30.16b,#64-44611.inst 0xce9cb126 //xar v6.16b,v9.16b,v28.16b,#64-20612.inst 0xce9f0ec9 //xar v9.16b,v22.16b,v31.16b,#64-61613.inst 0xce9c65d6 //xar v22.16b,v14.16b,v28.16b,#64-39614.inst 0xce9dba8e //xar v14.16b,v20.16b,v29.16b,#64-18615616.inst 0xce9f085a //xar v26.16b, v2.16b,v31.16b,#64-62 // C[1]=A[4][0]617618.inst 0xce9f5582 //xar v2.16b,v12.16b,v31.16b,#64-43619.inst 0xce9b9dac //xar v12.16b,v13.16b,v27.16b,#64-25620.inst 0xce9ce26d //xar v13.16b,v19.16b,v28.16b,#64-8621.inst 0xce9b22f3 //xar v19.16b,v23.16b,v27.16b,#64-56622.inst 0xce9d5df7 //xar v23.16b,v15.16b,v29.16b,#64-41623624.inst 0xce9c948f //xar v15.16b,v4.16b,v28.16b,#64-27625626.inst 0xce9ccb1c //xar v28.16b, v24.16b,v28.16b,#64-14 // D[4]=A[0][4]627.inst 0xce9efab8 //xar v24.16b,v21.16b,v30.16b,#64-2628.inst 0xce9b2508 //xar v8.16b,v8.16b,v27.16b,#64-55 // A[1][3]=A[4][1]629.inst 0xce9e4e04 //xar v4.16b,v16.16b,v30.16b,#64-45 // A[0][4]=A[1][3]630.inst 0xce9d70b0 //xar v16.16b,v5.16b,v29.16b,#64-36631632.inst 0xce9b9065 //xar v5.16b,v3.16b,v27.16b,#64-28633634eor v0.16b,v0.16b,v29.16b635636.inst 0xce9bae5b //xar v27.16b, v18.16b,v27.16b,#64-21 // D[3]=A[0][3]637.inst 0xce9fc623 //xar v3.16b,v17.16b,v31.16b,#64-15 // A[0][3]=A[3][3]638.inst 0xce9ed97e //xar v30.16b, v11.16b,v30.16b,#64-10 // D[1]=A[3][2]639.inst 0xce9fe8ff //xar v31.16b, v7.16b,v31.16b,#64-6 // D[2]=A[2][1]640.inst 0xce9df55d //xar v29.16b, v10.16b,v29.16b,#64-3 // D[0]=A[1][2]641642////////////////////////////////////////////////// Chi+Iota643.inst 0xce362354 //bcax v20.16b,v26.16b, v22.16b,v8.16b // A[1][3]=A[4][1]644.inst 0xce375915 //bcax v21.16b,v8.16b,v23.16b,v22.16b // A[1][3]=A[4][1]645.inst 0xce385ed6 //bcax v22.16b,v22.16b,v24.16b,v23.16b646.inst 0xce3a62f7 //bcax v23.16b,v23.16b,v26.16b, v24.16b647.inst 0xce286b18 //bcax v24.16b,v24.16b,v8.16b,v26.16b // A[1][3]=A[4][1]648649ld1r {v26.2d},[x10],#8650651.inst 0xce330fd1 //bcax v17.16b,v30.16b, v19.16b,v3.16b // A[0][3]=A[3][3]652.inst 0xce2f4c72 //bcax v18.16b,v3.16b,v15.16b,v19.16b // A[0][3]=A[3][3]653.inst 0xce303e73 //bcax v19.16b,v19.16b,v16.16b,v15.16b654.inst 0xce3e41ef //bcax v15.16b,v15.16b,v30.16b, v16.16b655.inst 0xce237a10 //bcax v16.16b,v16.16b,v3.16b,v30.16b // A[0][3]=A[3][3]656657.inst 0xce2c7f2a //bcax v10.16b,v25.16b, v12.16b,v31.16b658.inst 0xce2d33eb //bcax v11.16b,v31.16b, v13.16b,v12.16b659.inst 0xce2e358c //bcax v12.16b,v12.16b,v14.16b,v13.16b660.inst 0xce3939ad //bcax v13.16b,v13.16b,v25.16b, v14.16b661.inst 0xce3f65ce //bcax v14.16b,v14.16b,v31.16b, v25.16b662663.inst 0xce2913a7 //bcax v7.16b,v29.16b, v9.16b,v4.16b // A[0][4]=A[1][3]664.inst 0xce252488 //bcax v8.16b,v4.16b,v5.16b,v9.16b // A[0][4]=A[1][3]665.inst 0xce261529 //bcax v9.16b,v9.16b,v6.16b,v5.16b666.inst 0xce3d18a5 //bcax v5.16b,v5.16b,v29.16b, v6.16b667.inst 0xce2474c6 //bcax v6.16b,v6.16b,v4.16b,v29.16b // A[0][4]=A[1][3]668669.inst 0xce207363 //bcax v3.16b,v27.16b, v0.16b,v28.16b670.inst 0xce210384 //bcax v4.16b,v28.16b, v1.16b,v0.16b671.inst 0xce220400 //bcax v0.16b,v0.16b,v2.16b,v1.16b672.inst 0xce3b0821 //bcax v1.16b,v1.16b,v27.16b, v2.16b673.inst 0xce3c6c42 //bcax v2.16b,v2.16b,v28.16b, v27.16b674675eor v0.16b,v0.16b,v26.16b676677subs x9,x9,#1678bne .Loop_ce679680ret681.size KeccakF1600_ce,.-KeccakF1600_ce682683.type KeccakF1600_cext,%function684.align 5685KeccakF1600_cext:686AARCH64_SIGN_LINK_REGISTER687stp x29,x30,[sp,#-80]!688add x29,sp,#0689stp d8,d9,[sp,#16] // per ABI requirement690stp d10,d11,[sp,#32]691stp d12,d13,[sp,#48]692stp d14,d15,[sp,#64]693ldp d0,d1,[x0,#8*0]694ldp d2,d3,[x0,#8*2]695ldp d4,d5,[x0,#8*4]696ldp d6,d7,[x0,#8*6]697ldp d8,d9,[x0,#8*8]698ldp d10,d11,[x0,#8*10]699ldp d12,d13,[x0,#8*12]700ldp d14,d15,[x0,#8*14]701ldp d16,d17,[x0,#8*16]702ldp d18,d19,[x0,#8*18]703ldp d20,d21,[x0,#8*20]704ldp d22,d23,[x0,#8*22]705ldr d24,[x0,#8*24]706bl KeccakF1600_ce707ldr x30,[sp,#8]708stp d0,d1,[x0,#8*0]709stp d2,d3,[x0,#8*2]710stp d4,d5,[x0,#8*4]711stp d6,d7,[x0,#8*6]712stp d8,d9,[x0,#8*8]713stp d10,d11,[x0,#8*10]714stp d12,d13,[x0,#8*12]715stp d14,d15,[x0,#8*14]716stp d16,d17,[x0,#8*16]717stp d18,d19,[x0,#8*18]718stp d20,d21,[x0,#8*20]719stp d22,d23,[x0,#8*22]720str d24,[x0,#8*24]721722ldp d8,d9,[sp,#16]723ldp d10,d11,[sp,#32]724ldp d12,d13,[sp,#48]725ldp d14,d15,[sp,#64]726ldr x29,[sp],#80727AARCH64_VALIDATE_LINK_REGISTER728ret729.size KeccakF1600_cext,.-KeccakF1600_cext730.globl SHA3_absorb_cext731.type SHA3_absorb_cext,%function732.align 5733SHA3_absorb_cext:734AARCH64_SIGN_LINK_REGISTER735stp x29,x30,[sp,#-80]!736add x29,sp,#0737stp d8,d9,[sp,#16] // per ABI requirement738stp d10,d11,[sp,#32]739stp d12,d13,[sp,#48]740stp d14,d15,[sp,#64]741ldp d0,d1,[x0,#8*0]742ldp d2,d3,[x0,#8*2]743ldp d4,d5,[x0,#8*4]744ldp d6,d7,[x0,#8*6]745ldp d8,d9,[x0,#8*8]746ldp d10,d11,[x0,#8*10]747ldp d12,d13,[x0,#8*12]748ldp d14,d15,[x0,#8*14]749ldp d16,d17,[x0,#8*16]750ldp d18,d19,[x0,#8*18]751ldp d20,d21,[x0,#8*20]752ldp d22,d23,[x0,#8*22]753ldr d24,[x0,#8*24]754b .Loop_absorb_ce755756.align 4757.Loop_absorb_ce:758subs x2,x2,x3 // len - bsz759blo .Labsorbed_ce760ldr d31,[x1],#8 // *inp++761#ifdef __AARCH64EB__762rev64 v31.16b,v31.16b763#endif764eor v0.16b,v0.16b,v31.16b765cmp x3,#8*(0+2)766blo .Lprocess_block_ce767ldr d31,[x1],#8 // *inp++768#ifdef __AARCH64EB__769rev64 v31.16b,v31.16b770#endif771eor v1.16b,v1.16b,v31.16b772beq .Lprocess_block_ce773ldr d31,[x1],#8 // *inp++774#ifdef __AARCH64EB__775rev64 v31.16b,v31.16b776#endif777eor v2.16b,v2.16b,v31.16b778cmp x3,#8*(2+2)779blo .Lprocess_block_ce780ldr d31,[x1],#8 // *inp++781#ifdef __AARCH64EB__782rev64 v31.16b,v31.16b783#endif784eor v3.16b,v3.16b,v31.16b785beq .Lprocess_block_ce786ldr d31,[x1],#8 // *inp++787#ifdef __AARCH64EB__788rev64 v31.16b,v31.16b789#endif790eor v4.16b,v4.16b,v31.16b791cmp x3,#8*(4+2)792blo .Lprocess_block_ce793ldr d31,[x1],#8 // *inp++794#ifdef __AARCH64EB__795rev64 v31.16b,v31.16b796#endif797eor v5.16b,v5.16b,v31.16b798beq .Lprocess_block_ce799ldr d31,[x1],#8 // *inp++800#ifdef __AARCH64EB__801rev64 v31.16b,v31.16b802#endif803eor v6.16b,v6.16b,v31.16b804cmp x3,#8*(6+2)805blo .Lprocess_block_ce806ldr d31,[x1],#8 // *inp++807#ifdef __AARCH64EB__808rev64 v31.16b,v31.16b809#endif810eor v7.16b,v7.16b,v31.16b811beq .Lprocess_block_ce812ldr d31,[x1],#8 // *inp++813#ifdef __AARCH64EB__814rev64 v31.16b,v31.16b815#endif816eor v8.16b,v8.16b,v31.16b817cmp x3,#8*(8+2)818blo .Lprocess_block_ce819ldr d31,[x1],#8 // *inp++820#ifdef __AARCH64EB__821rev64 v31.16b,v31.16b822#endif823eor v9.16b,v9.16b,v31.16b824beq .Lprocess_block_ce825ldr d31,[x1],#8 // *inp++826#ifdef __AARCH64EB__827rev64 v31.16b,v31.16b828#endif829eor v10.16b,v10.16b,v31.16b830cmp x3,#8*(10+2)831blo .Lprocess_block_ce832ldr d31,[x1],#8 // *inp++833#ifdef __AARCH64EB__834rev64 v31.16b,v31.16b835#endif836eor v11.16b,v11.16b,v31.16b837beq .Lprocess_block_ce838ldr d31,[x1],#8 // *inp++839#ifdef __AARCH64EB__840rev64 v31.16b,v31.16b841#endif842eor v12.16b,v12.16b,v31.16b843cmp x3,#8*(12+2)844blo .Lprocess_block_ce845ldr d31,[x1],#8 // *inp++846#ifdef __AARCH64EB__847rev64 v31.16b,v31.16b848#endif849eor v13.16b,v13.16b,v31.16b850beq .Lprocess_block_ce851ldr d31,[x1],#8 // *inp++852#ifdef __AARCH64EB__853rev64 v31.16b,v31.16b854#endif855eor v14.16b,v14.16b,v31.16b856cmp x3,#8*(14+2)857blo .Lprocess_block_ce858ldr d31,[x1],#8 // *inp++859#ifdef __AARCH64EB__860rev64 v31.16b,v31.16b861#endif862eor v15.16b,v15.16b,v31.16b863beq .Lprocess_block_ce864ldr d31,[x1],#8 // *inp++865#ifdef __AARCH64EB__866rev64 v31.16b,v31.16b867#endif868eor v16.16b,v16.16b,v31.16b869cmp x3,#8*(16+2)870blo .Lprocess_block_ce871ldr d31,[x1],#8 // *inp++872#ifdef __AARCH64EB__873rev64 v31.16b,v31.16b874#endif875eor v17.16b,v17.16b,v31.16b876beq .Lprocess_block_ce877ldr d31,[x1],#8 // *inp++878#ifdef __AARCH64EB__879rev64 v31.16b,v31.16b880#endif881eor v18.16b,v18.16b,v31.16b882cmp x3,#8*(18+2)883blo .Lprocess_block_ce884ldr d31,[x1],#8 // *inp++885#ifdef __AARCH64EB__886rev64 v31.16b,v31.16b887#endif888eor v19.16b,v19.16b,v31.16b889beq .Lprocess_block_ce890ldr d31,[x1],#8 // *inp++891#ifdef __AARCH64EB__892rev64 v31.16b,v31.16b893#endif894eor v20.16b,v20.16b,v31.16b895cmp x3,#8*(20+2)896blo .Lprocess_block_ce897ldr d31,[x1],#8 // *inp++898#ifdef __AARCH64EB__899rev64 v31.16b,v31.16b900#endif901eor v21.16b,v21.16b,v31.16b902beq .Lprocess_block_ce903ldr d31,[x1],#8 // *inp++904#ifdef __AARCH64EB__905rev64 v31.16b,v31.16b906#endif907eor v22.16b,v22.16b,v31.16b908cmp x3,#8*(22+2)909blo .Lprocess_block_ce910ldr d31,[x1],#8 // *inp++911#ifdef __AARCH64EB__912rev64 v31.16b,v31.16b913#endif914eor v23.16b,v23.16b,v31.16b915beq .Lprocess_block_ce916ldr d31,[x1],#8 // *inp++917#ifdef __AARCH64EB__918rev64 v31.16b,v31.16b919#endif920eor v24.16b,v24.16b,v31.16b921922.Lprocess_block_ce:923924bl KeccakF1600_ce925926b .Loop_absorb_ce927928.align 4929.Labsorbed_ce:930stp d0,d1,[x0,#8*0]931stp d2,d3,[x0,#8*2]932stp d4,d5,[x0,#8*4]933stp d6,d7,[x0,#8*6]934stp d8,d9,[x0,#8*8]935stp d10,d11,[x0,#8*10]936stp d12,d13,[x0,#8*12]937stp d14,d15,[x0,#8*14]938stp d16,d17,[x0,#8*16]939stp d18,d19,[x0,#8*18]940stp d20,d21,[x0,#8*20]941stp d22,d23,[x0,#8*22]942str d24,[x0,#8*24]943add x0,x2,x3 // return value944945ldp d8,d9,[sp,#16]946ldp d10,d11,[sp,#32]947ldp d12,d13,[sp,#48]948ldp d14,d15,[sp,#64]949ldp x29,x30,[sp],#80950AARCH64_VALIDATE_LINK_REGISTER951ret952.size SHA3_absorb_cext,.-SHA3_absorb_cext953.globl SHA3_squeeze_cext954.type SHA3_squeeze_cext,%function955.align 5956SHA3_squeeze_cext:957AARCH64_SIGN_LINK_REGISTER958stp x29,x30,[sp,#-16]!959add x29,sp,#0960mov x9,x0961mov x10,x3962963.Loop_squeeze_ce:964ldr x4,[x9],#8965cmp x2,#8966blo .Lsqueeze_tail_ce967#ifdef __AARCH64EB__968rev x4,x4969#endif970str x4,[x1],#8971beq .Lsqueeze_done_ce972973sub x2,x2,#8974subs x10,x10,#8975bhi .Loop_squeeze_ce976977bl KeccakF1600_cext978ldr x30,[sp,#8]979mov x9,x0980mov x10,x3981b .Loop_squeeze_ce982983.align 4984.Lsqueeze_tail_ce:985strb w4,[x1],#1986lsr x4,x4,#8987subs x2,x2,#1988beq .Lsqueeze_done_ce989strb w4,[x1],#1990lsr x4,x4,#8991subs x2,x2,#1992beq .Lsqueeze_done_ce993strb w4,[x1],#1994lsr x4,x4,#8995subs x2,x2,#1996beq .Lsqueeze_done_ce997strb w4,[x1],#1998lsr x4,x4,#8999subs x2,x2,#11000beq .Lsqueeze_done_ce1001strb w4,[x1],#11002lsr x4,x4,#81003subs x2,x2,#11004beq .Lsqueeze_done_ce1005strb w4,[x1],#11006lsr x4,x4,#81007subs x2,x2,#11008beq .Lsqueeze_done_ce1009strb w4,[x1],#110101011.Lsqueeze_done_ce:1012ldr x29,[sp],#161013AARCH64_VALIDATE_LINK_REGISTER1014ret1015.size SHA3_squeeze_cext,.-SHA3_squeeze_cext1016.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,01017.align 2101810191020