#include "arm_arch.h"
.section .rodata
.align 8
.quad 0,0,0,0,0,0,0,0
.type iotas,%object
iotas:
.quad 0x0000000000000001
.quad 0x0000000000008082
.quad 0x800000000000808a
.quad 0x8000000080008000
.quad 0x000000000000808b
.quad 0x0000000080000001
.quad 0x8000000080008081
.quad 0x8000000000008009
.quad 0x000000000000008a
.quad 0x0000000000000088
.quad 0x0000000080008009
.quad 0x000000008000000a
.quad 0x000000008000808b
.quad 0x800000000000008b
.quad 0x8000000000008089
.quad 0x8000000000008003
.quad 0x8000000000008002
.quad 0x8000000000000080
.quad 0x000000000000800a
.quad 0x800000008000000a
.quad 0x8000000080008081
.quad 0x8000000000008080
.quad 0x0000000080000001
.quad 0x8000000080008008
.size iotas,.-iotas
.text
.type KeccakF1600_int,%function
.align 5
KeccakF1600_int:
AARCH64_SIGN_LINK_REGISTER
adrp x28,iotas
add x28,x28,#:lo12:iotas
stp x28,x30,[sp,#16]
b .Loop
.align 4
.Loop:
eor x26,x0,x5
stp x4,x9,[sp,#0]
eor x27,x1,x6
eor x28,x2,x7
eor x30,x3,x8
eor x4,x4,x9
eor x26,x26,x10
eor x27,x27,x11
eor x28,x28,x12
eor x30,x30,x13
eor x4,x4,x14
eor x26,x26,x15
eor x27,x27,x16
eor x28,x28,x17
eor x30,x30,x25
eor x4,x4,x19
eor x26,x26,x20
eor x28,x28,x22
eor x27,x27,x21
eor x30,x30,x23
eor x4,x4,x24
eor x9,x26,x28,ror#63
eor x1,x1,x9
eor x6,x6,x9
eor x11,x11,x9
eor x16,x16,x9
eor x21,x21,x9
eor x9,x27,x30,ror#63
eor x28,x28,x4,ror#63
eor x30,x30,x26,ror#63
eor x4,x4,x27,ror#63
eor x27, x2,x9
eor x7,x7,x9
eor x12,x12,x9
eor x17,x17,x9
eor x22,x22,x9
eor x0,x0,x4
eor x5,x5,x4
eor x10,x10,x4
eor x15,x15,x4
eor x20,x20,x4
ldp x4,x9,[sp,#0]
eor x26, x3,x28
eor x8,x8,x28
eor x13,x13,x28
eor x25,x25,x28
eor x23,x23,x28
eor x28, x4,x30
eor x9,x9,x30
eor x14,x14,x30
eor x19,x19,x30
eor x24,x24,x30
mov x30,x1
ror x1,x6,#64-44
ror x2,x12,#64-43
ror x3,x25,#64-21
ror x4,x24,#64-14
ror x6,x9,#64-20
ror x12,x13,#64-25
ror x25,x17,#64-15
ror x24,x21,#64-2
ror x9,x22,#64-61
ror x13,x19,#64-8
ror x17,x11,#64-10
ror x21,x8,#64-55
ror x22,x14,#64-39
ror x19,x23,#64-56
ror x11,x7,#64-6
ror x8,x16,#64-45
ror x14,x20,#64-18
ror x23,x15,#64-41
ror x7,x10,#64-3
ror x16,x5,#64-36
ror x5,x26,#64-28
ror x10,x30,#64-1
ror x15,x28,#64-27
ror x20,x27,#64-62
bic x26,x2,x1
bic x27,x3,x2
bic x28,x0,x4
bic x30,x1,x0
eor x0,x0,x26
bic x26,x4,x3
eor x1,x1,x27
ldr x27,[sp,#16]
eor x3,x3,x28
eor x4,x4,x30
eor x2,x2,x26
ldr x30,[x27],#8
bic x26,x7,x6
tst x27,#255
str x27,[sp,#16]
bic x27,x8,x7
bic x28,x5,x9
eor x0,x0,x30
bic x30,x6,x5
eor x5,x5,x26
bic x26,x9,x8
eor x6,x6,x27
eor x8,x8,x28
eor x9,x9,x30
eor x7,x7,x26
bic x26,x12,x11
bic x27,x13,x12
bic x28,x10,x14
bic x30,x11,x10
eor x10,x10,x26
bic x26,x14,x13
eor x11,x11,x27
eor x13,x13,x28
eor x14,x14,x30
eor x12,x12,x26
bic x26,x17,x16
bic x27,x25,x17
bic x28,x15,x19
bic x30,x16,x15
eor x15,x15,x26
bic x26,x19,x25
eor x16,x16,x27
eor x25,x25,x28
eor x19,x19,x30
eor x17,x17,x26
bic x26,x22,x21
bic x27,x23,x22
bic x28,x20,x24
bic x30,x21,x20
eor x20,x20,x26
bic x26,x24,x23
eor x21,x21,x27
eor x23,x23,x28
eor x24,x24,x30
eor x22,x22,x26
bne .Loop
ldr x30,[sp,#24]
AARCH64_VALIDATE_LINK_REGISTER
ret
.size KeccakF1600_int,.-KeccakF1600_int
.type KeccakF1600,%function
.align 5
KeccakF1600:
AARCH64_SIGN_LINK_REGISTER
stp x29,x30,[sp,#-128]!
add x29,sp,#0
stp x19,x20,[sp,#16]
stp x21,x22,[sp,#32]
stp x23,x24,[sp,#48]
stp x25,x26,[sp,#64]
stp x27,x28,[sp,#80]
sub sp,sp,#48
str x0,[sp,#32]
mov x26,x0
ldp x0,x1,[x0,#16*0]
ldp x2,x3,[x26,#16*1]
ldp x4,x5,[x26,#16*2]
ldp x6,x7,[x26,#16*3]
ldp x8,x9,[x26,#16*4]
ldp x10,x11,[x26,#16*5]
ldp x12,x13,[x26,#16*6]
ldp x14,x15,[x26,#16*7]
ldp x16,x17,[x26,#16*8]
ldp x25,x19,[x26,#16*9]
ldp x20,x21,[x26,#16*10]
ldp x22,x23,[x26,#16*11]
ldr x24,[x26,#16*12]
bl KeccakF1600_int
ldr x26,[sp,#32]
stp x0,x1,[x26,#16*0]
stp x2,x3,[x26,#16*1]
stp x4,x5,[x26,#16*2]
stp x6,x7,[x26,#16*3]
stp x8,x9,[x26,#16*4]
stp x10,x11,[x26,#16*5]
stp x12,x13,[x26,#16*6]
stp x14,x15,[x26,#16*7]
stp x16,x17,[x26,#16*8]
stp x25,x19,[x26,#16*9]
stp x20,x21,[x26,#16*10]
stp x22,x23,[x26,#16*11]
str x24,[x26,#16*12]
ldp x19,x20,[x29,#16]
add sp,sp,#48
ldp x21,x22,[x29,#32]
ldp x23,x24,[x29,#48]
ldp x25,x26,[x29,#64]
ldp x27,x28,[x29,#80]
ldp x29,x30,[sp],#128
AARCH64_VALIDATE_LINK_REGISTER
ret
.size KeccakF1600,.-KeccakF1600
.globl SHA3_absorb
.type SHA3_absorb,%function
.align 5
SHA3_absorb:
AARCH64_SIGN_LINK_REGISTER
stp x29,x30,[sp,#-128]!
add x29,sp,#0
stp x19,x20,[sp,#16]
stp x21,x22,[sp,#32]
stp x23,x24,[sp,#48]
stp x25,x26,[sp,#64]
stp x27,x28,[sp,#80]
sub sp,sp,#64
stp x0,x1,[sp,#32]
stp x2,x3,[sp,#48]
mov x26,x0
mov x27,x1
mov x28,x2
mov x30,x3
ldp x0,x1,[x26,#16*0]
ldp x2,x3,[x26,#16*1]
ldp x4,x5,[x26,#16*2]
ldp x6,x7,[x26,#16*3]
ldp x8,x9,[x26,#16*4]
ldp x10,x11,[x26,#16*5]
ldp x12,x13,[x26,#16*6]
ldp x14,x15,[x26,#16*7]
ldp x16,x17,[x26,#16*8]
ldp x25,x19,[x26,#16*9]
ldp x20,x21,[x26,#16*10]
ldp x22,x23,[x26,#16*11]
ldr x24,[x26,#16*12]
b .Loop_absorb
.align 4
.Loop_absorb:
subs x26,x28,x30
blo .Labsorbed
str x26,[sp,#48]
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x0,x0,x26
cmp x30,#8*(0+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x1,x1,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x2,x2,x26
cmp x30,#8*(2+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x3,x3,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x4,x4,x26
cmp x30,#8*(4+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x5,x5,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x6,x6,x26
cmp x30,#8*(6+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x7,x7,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x8,x8,x26
cmp x30,#8*(8+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x9,x9,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x10,x10,x26
cmp x30,#8*(10+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x11,x11,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x12,x12,x26
cmp x30,#8*(12+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x13,x13,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x14,x14,x26
cmp x30,#8*(14+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x15,x15,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x16,x16,x26
cmp x30,#8*(16+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x17,x17,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x25,x25,x26
cmp x30,#8*(18+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x19,x19,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x20,x20,x26
cmp x30,#8*(20+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x21,x21,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x22,x22,x26
cmp x30,#8*(22+2)
blo .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x23,x23,x26
beq .Lprocess_block
ldr x26,[x27],#8
#ifdef __AARCH64EB__
rev x26,x26
#endif
eor x24,x24,x26
.Lprocess_block:
str x27,[sp,#40]
bl KeccakF1600_int
ldr x27,[sp,#40]
ldp x28,x30,[sp,#48]
b .Loop_absorb
.align 4
.Labsorbed:
ldr x27,[sp,#32]
stp x0,x1,[x27,#16*0]
stp x2,x3,[x27,#16*1]
stp x4,x5,[x27,#16*2]
stp x6,x7,[x27,#16*3]
stp x8,x9,[x27,#16*4]
stp x10,x11,[x27,#16*5]
stp x12,x13,[x27,#16*6]
stp x14,x15,[x27,#16*7]
stp x16,x17,[x27,#16*8]
stp x25,x19,[x27,#16*9]
stp x20,x21,[x27,#16*10]
stp x22,x23,[x27,#16*11]
str x24,[x27,#16*12]
mov x0,x28
ldp x19,x20,[x29,#16]
add sp,sp,#64
ldp x21,x22,[x29,#32]
ldp x23,x24,[x29,#48]
ldp x25,x26,[x29,#64]
ldp x27,x28,[x29,#80]
ldp x29,x30,[sp],#128
AARCH64_VALIDATE_LINK_REGISTER
ret
.size SHA3_absorb,.-SHA3_absorb
.globl SHA3_squeeze
.type SHA3_squeeze,%function
.align 5
SHA3_squeeze:
AARCH64_SIGN_LINK_REGISTER
stp x29,x30,[sp,#-48]!
add x29,sp,#0
stp x19,x20,[sp,#16]
stp x21,x22,[sp,#32]
mov x19,x0
mov x20,x1
mov x21,x2
mov x22,x3
cmp w4, #0
bne .Lnext_block
.Loop_squeeze:
ldr x4,[x0],#8
cmp x21,#8
blo .Lsqueeze_tail
#ifdef __AARCH64EB__
rev x4,x4
#endif
str x4,[x20],#8
subs x21,x21,#8
beq .Lsqueeze_done
subs x3,x3,#8
bhi .Loop_squeeze
.Lnext_block:
mov x0,x19
bl KeccakF1600
mov x0,x19
mov x3,x22
b .Loop_squeeze
.align 4
.Lsqueeze_tail:
strb w4,[x20],#1
lsr x4,x4,#8
subs x21,x21,#1
beq .Lsqueeze_done
strb w4,[x20],#1
lsr x4,x4,#8
subs x21,x21,#1
beq .Lsqueeze_done
strb w4,[x20],#1
lsr x4,x4,#8
subs x21,x21,#1
beq .Lsqueeze_done
strb w4,[x20],#1
lsr x4,x4,#8
subs x21,x21,#1
beq .Lsqueeze_done
strb w4,[x20],#1
lsr x4,x4,#8
subs x21,x21,#1
beq .Lsqueeze_done
strb w4,[x20],#1
lsr x4,x4,#8
subs x21,x21,#1
beq .Lsqueeze_done
strb w4,[x20],#1
.Lsqueeze_done:
ldp x19,x20,[sp,#16]
ldp x21,x22,[sp,#32]
ldp x29,x30,[sp],#48
AARCH64_VALIDATE_LINK_REGISTER
ret
.size SHA3_squeeze,.-SHA3_squeeze
.type KeccakF1600_ce,%function
.align 5
KeccakF1600_ce:
mov x9,#24
adrp x10,iotas
add x10,x10,#:lo12:iotas
b .Loop_ce
.align 4
.Loop_ce:
.inst 0xce0f2a99
.inst 0xce102eba
.inst 0xce1132db
.inst 0xce1236fc
.inst 0xce133b1d
.inst 0xce050339
.inst 0xce06075a
.inst 0xce070b7b
.inst 0xce080f9c
.inst 0xce0913bd
.inst 0xce7b8f3e
.inst 0xce7c8f5f
.inst 0xce7d8f7b
.inst 0xce798f9c
.inst 0xce7a8fbd
.inst 0xce9efc39
.inst 0xce9e50c1
.inst 0xce9cb126
.inst 0xce9f0ec9
.inst 0xce9c65d6
.inst 0xce9dba8e
.inst 0xce9f085a
.inst 0xce9f5582
.inst 0xce9b9dac
.inst 0xce9ce26d
.inst 0xce9b22f3
.inst 0xce9d5df7
.inst 0xce9c948f
.inst 0xce9ccb1c
.inst 0xce9efab8
.inst 0xce9b2508
.inst 0xce9e4e04
.inst 0xce9d70b0
.inst 0xce9b9065
eor v0.16b,v0.16b,v29.16b
.inst 0xce9bae5b
.inst 0xce9fc623
.inst 0xce9ed97e
.inst 0xce9fe8ff
.inst 0xce9df55d
.inst 0xce362354
.inst 0xce375915
.inst 0xce385ed6
.inst 0xce3a62f7
.inst 0xce286b18
ld1r {v26.2d},[x10],#8
.inst 0xce330fd1
.inst 0xce2f4c72
.inst 0xce303e73
.inst 0xce3e41ef
.inst 0xce237a10
.inst 0xce2c7f2a
.inst 0xce2d33eb
.inst 0xce2e358c
.inst 0xce3939ad
.inst 0xce3f65ce
.inst 0xce2913a7
.inst 0xce252488
.inst 0xce261529
.inst 0xce3d18a5
.inst 0xce2474c6
.inst 0xce207363
.inst 0xce210384
.inst 0xce220400
.inst 0xce3b0821
.inst 0xce3c6c42
eor v0.16b,v0.16b,v26.16b
subs x9,x9,#1
bne .Loop_ce
ret
.size KeccakF1600_ce,.-KeccakF1600_ce
.type KeccakF1600_cext,%function
.align 5
KeccakF1600_cext:
AARCH64_SIGN_LINK_REGISTER
stp x29,x30,[sp,#-80]!
add x29,sp,#0
stp d8,d9,[sp,#16]
stp d10,d11,[sp,#32]
stp d12,d13,[sp,#48]
stp d14,d15,[sp,#64]
ldp d0,d1,[x0,#8*0]
ldp d2,d3,[x0,#8*2]
ldp d4,d5,[x0,#8*4]
ldp d6,d7,[x0,#8*6]
ldp d8,d9,[x0,#8*8]
ldp d10,d11,[x0,#8*10]
ldp d12,d13,[x0,#8*12]
ldp d14,d15,[x0,#8*14]
ldp d16,d17,[x0,#8*16]
ldp d18,d19,[x0,#8*18]
ldp d20,d21,[x0,#8*20]
ldp d22,d23,[x0,#8*22]
ldr d24,[x0,#8*24]
bl KeccakF1600_ce
ldr x30,[sp,#8]
stp d0,d1,[x0,#8*0]
stp d2,d3,[x0,#8*2]
stp d4,d5,[x0,#8*4]
stp d6,d7,[x0,#8*6]
stp d8,d9,[x0,#8*8]
stp d10,d11,[x0,#8*10]
stp d12,d13,[x0,#8*12]
stp d14,d15,[x0,#8*14]
stp d16,d17,[x0,#8*16]
stp d18,d19,[x0,#8*18]
stp d20,d21,[x0,#8*20]
stp d22,d23,[x0,#8*22]
str d24,[x0,#8*24]
ldp d8,d9,[sp,#16]
ldp d10,d11,[sp,#32]
ldp d12,d13,[sp,#48]
ldp d14,d15,[sp,#64]
ldr x29,[sp],#80
AARCH64_VALIDATE_LINK_REGISTER
ret
.size KeccakF1600_cext,.-KeccakF1600_cext
.globl SHA3_absorb_cext
.type SHA3_absorb_cext,%function
.align 5
SHA3_absorb_cext:
AARCH64_SIGN_LINK_REGISTER
stp x29,x30,[sp,#-80]!
add x29,sp,#0
stp d8,d9,[sp,#16]
stp d10,d11,[sp,#32]
stp d12,d13,[sp,#48]
stp d14,d15,[sp,#64]
ldp d0,d1,[x0,#8*0]
ldp d2,d3,[x0,#8*2]
ldp d4,d5,[x0,#8*4]
ldp d6,d7,[x0,#8*6]
ldp d8,d9,[x0,#8*8]
ldp d10,d11,[x0,#8*10]
ldp d12,d13,[x0,#8*12]
ldp d14,d15,[x0,#8*14]
ldp d16,d17,[x0,#8*16]
ldp d18,d19,[x0,#8*18]
ldp d20,d21,[x0,#8*20]
ldp d22,d23,[x0,#8*22]
ldr d24,[x0,#8*24]
b .Loop_absorb_ce
.align 4
.Loop_absorb_ce:
subs x2,x2,x3
blo .Labsorbed_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v0.16b,v0.16b,v31.16b
cmp x3,#8*(0+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v1.16b,v1.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v2.16b,v2.16b,v31.16b
cmp x3,#8*(2+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v3.16b,v3.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v4.16b,v4.16b,v31.16b
cmp x3,#8*(4+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v5.16b,v5.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v6.16b,v6.16b,v31.16b
cmp x3,#8*(6+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v7.16b,v7.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v8.16b,v8.16b,v31.16b
cmp x3,#8*(8+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v9.16b,v9.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v10.16b,v10.16b,v31.16b
cmp x3,#8*(10+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v11.16b,v11.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v12.16b,v12.16b,v31.16b
cmp x3,#8*(12+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v13.16b,v13.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v14.16b,v14.16b,v31.16b
cmp x3,#8*(14+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v15.16b,v15.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v16.16b,v16.16b,v31.16b
cmp x3,#8*(16+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v17.16b,v17.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v18.16b,v18.16b,v31.16b
cmp x3,#8*(18+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v19.16b,v19.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v20.16b,v20.16b,v31.16b
cmp x3,#8*(20+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v21.16b,v21.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v22.16b,v22.16b,v31.16b
cmp x3,#8*(22+2)
blo .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v23.16b,v23.16b,v31.16b
beq .Lprocess_block_ce
ldr d31,[x1],#8
#ifdef __AARCH64EB__
rev64 v31.16b,v31.16b
#endif
eor v24.16b,v24.16b,v31.16b
.Lprocess_block_ce:
bl KeccakF1600_ce
b .Loop_absorb_ce
.align 4
.Labsorbed_ce:
stp d0,d1,[x0,#8*0]
stp d2,d3,[x0,#8*2]
stp d4,d5,[x0,#8*4]
stp d6,d7,[x0,#8*6]
stp d8,d9,[x0,#8*8]
stp d10,d11,[x0,#8*10]
stp d12,d13,[x0,#8*12]
stp d14,d15,[x0,#8*14]
stp d16,d17,[x0,#8*16]
stp d18,d19,[x0,#8*18]
stp d20,d21,[x0,#8*20]
stp d22,d23,[x0,#8*22]
str d24,[x0,#8*24]
add x0,x2,x3
ldp d8,d9,[sp,#16]
ldp d10,d11,[sp,#32]
ldp d12,d13,[sp,#48]
ldp d14,d15,[sp,#64]
ldp x29,x30,[sp],#80
AARCH64_VALIDATE_LINK_REGISTER
ret
.size SHA3_absorb_cext,.-SHA3_absorb_cext
.globl SHA3_squeeze_cext
.type SHA3_squeeze_cext,%function
.align 5
SHA3_squeeze_cext:
AARCH64_SIGN_LINK_REGISTER
stp x29,x30,[sp,#-16]!
add x29,sp,#0
mov x9,x0
mov x10,x3
.Loop_squeeze_ce:
ldr x4,[x9],#8
cmp x2,#8
blo .Lsqueeze_tail_ce
#ifdef __AARCH64EB__
rev x4,x4
#endif
str x4,[x1],#8
beq .Lsqueeze_done_ce
sub x2,x2,#8
subs x10,x10,#8
bhi .Loop_squeeze_ce
bl KeccakF1600_cext
ldr x30,[sp,#8]
mov x9,x0
mov x10,x3
b .Loop_squeeze_ce
.align 4
.Lsqueeze_tail_ce:
strb w4,[x1],#1
lsr x4,x4,#8
subs x2,x2,#1
beq .Lsqueeze_done_ce
strb w4,[x1],#1
lsr x4,x4,#8
subs x2,x2,#1
beq .Lsqueeze_done_ce
strb w4,[x1],#1
lsr x4,x4,#8
subs x2,x2,#1
beq .Lsqueeze_done_ce
strb w4,[x1],#1
lsr x4,x4,#8
subs x2,x2,#1
beq .Lsqueeze_done_ce
strb w4,[x1],#1
lsr x4,x4,#8
subs x2,x2,#1
beq .Lsqueeze_done_ce
strb w4,[x1],#1
lsr x4,x4,#8
subs x2,x2,#1
beq .Lsqueeze_done_ce
strb w4,[x1],#1
.Lsqueeze_done_ce:
ldr x29,[sp],#16
AARCH64_VALIDATE_LINK_REGISTER
ret
.size SHA3_squeeze_cext,.-SHA3_squeeze_cext
.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
.align 2