diff options
Diffstat (limited to 'sys/crypto/openssl/aarch64/chacha-armv8-sve.S')
| -rw-r--r-- | sys/crypto/openssl/aarch64/chacha-armv8-sve.S | 3559 |
1 files changed, 3559 insertions, 0 deletions
diff --git a/sys/crypto/openssl/aarch64/chacha-armv8-sve.S b/sys/crypto/openssl/aarch64/chacha-armv8-sve.S new file mode 100644 index 000000000000..e595adf377f9 --- /dev/null +++ b/sys/crypto/openssl/aarch64/chacha-armv8-sve.S @@ -0,0 +1,3559 @@ +/* Do not modify. This file is auto-generated from chacha-armv8-sve.pl. */ +// Copyright 2022-2025 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License 2.0 (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html +// +// +// ChaCha20 for ARMv8 via SVE +// +// $output is the last argument if it looks like a file (it has an extension) +// $flavour is the first argument if it doesn't look like a file +#include "arm_arch.h" + +.arch armv8-a + + +.hidden OPENSSL_armcap_P + +.text + +.section .rodata +.align 5 +.type _chacha_sve_consts,%object +_chacha_sve_consts: +.Lchacha20_consts: +.quad 0x3320646e61707865,0x6b20657479622d32 // endian-neutral +.Lrot8: +.word 0x02010003,0x04040404,0x02010003,0x04040404 +.size _chacha_sve_consts,.-_chacha_sve_consts + +.previous + +.globl ChaCha20_ctr32_sve +.type ChaCha20_ctr32_sve,%function +.align 5 +ChaCha20_ctr32_sve: + AARCH64_VALID_CALL_TARGET +.inst 0x04a0e3e5 //cntw x5, ALL, MUL #1 + cmp x2,x5,lsl #6 + b.lt .Lreturn + mov x7,0 + adrp x6,OPENSSL_armcap_P + ldr w6,[x6,#:lo12:OPENSSL_armcap_P] + tst w6,#ARMV8_SVE2 + b.eq 1f + mov x7,1 + b 2f +1: + cmp x5,4 + b.le .Lreturn + adrp x6,.Lrot8 + add x6,x6,#:lo12:.Lrot8 + ldp w9,w10,[x6] +.inst 0x04aa4d3f //index z31.s,w9,w10 +2: + AARCH64_SIGN_LINK_REGISTER + stp d8,d9,[sp,-192]! + stp d10,d11,[sp,16] + stp d12,d13,[sp,32] + stp d14,d15,[sp,48] + stp x16,x17,[sp,64] + stp x18,x19,[sp,80] + stp x20,x21,[sp,96] + stp x22,x23,[sp,112] + stp x24,x25,[sp,128] + stp x26,x27,[sp,144] + stp x28,x29,[sp,160] + str x30,[sp,176] + + adrp x6,.Lchacha20_consts + add x6,x6,#:lo12:.Lchacha20_consts + ldp x23,x24,[x6] + ldp x25,x26,[x3] + ldp x27,x28,[x3, 16] + ldp x29,x30,[x4] +.inst 0x2599e3e0 //ptrues p0.s,ALL +#ifdef __AARCH64EB__ + ror x25,x25,#32 + ror x26,x26,#32 + ror x27,x27,#32 + ror x28,x28,#32 + ror x29,x29,#32 + ror x30,x30,#32 +#endif + cbz x7, 1f +.align 5 +100: + subs x7,x2,x5,lsl #6 + b.lt 110f + mov x2,x7 + b.eq 101f + cmp x2,64 + b.lt 101f + mixin=1 + lsr x8,x23,#32 +.inst 0x05a03ae0 //dup z0.s,w23 +.inst 0x05a03af9 //dup z25.s,w23 +.if mixin == 1 + mov w7,w23 +.endif +.inst 0x05a03904 //dup z4.s,w8 +.inst 0x05a0391a //dup z26.s,w8 + lsr x10,x24,#32 +.inst 0x05a03b08 //dup z8.s,w24 +.inst 0x05a03b1b //dup z27.s,w24 +.if mixin == 1 + mov w9,w24 +.endif +.inst 0x05a0394c //dup z12.s,w10 +.inst 0x05a0395c //dup z28.s,w10 + lsr x12,x25,#32 +.inst 0x05a03b21 //dup z1.s,w25 +.inst 0x05a03b3d //dup z29.s,w25 +.if mixin == 1 + mov w11,w25 +.endif +.inst 0x05a03985 //dup z5.s,w12 +.inst 0x05a0399e //dup z30.s,w12 + lsr x14,x26,#32 +.inst 0x05a03b49 //dup z9.s,w26 +.inst 0x05a03b55 //dup z21.s,w26 +.if mixin == 1 + mov w13,w26 +.endif +.inst 0x05a039cd //dup z13.s,w14 +.inst 0x05a039d6 //dup z22.s,w14 + lsr x16,x27,#32 +.inst 0x05a03b62 //dup z2.s,w27 +.inst 0x05a03b77 //dup z23.s,w27 +.if mixin == 1 + mov w15,w27 +.endif +.inst 0x05a03a06 //dup z6.s,w16 +.inst 0x05a03a18 //dup z24.s,w16 + lsr x18,x28,#32 +.inst 0x05a03b8a //dup z10.s,w28 +.inst 0x05a03b91 //dup z17.s,w28 +.if mixin == 1 + mov w17,w28 +.endif +.inst 0x05a03a4e //dup z14.s,w18 +.inst 0x05a03a52 //dup z18.s,w18 + lsr x22,x30,#32 +.inst 0x05a03bcb //dup z11.s,w30 +.inst 0x05a03bd4 //dup z20.s,w30 +.if mixin == 1 + mov w21,w30 +.endif +.inst 0x05a03acf //dup z15.s,w22 +.inst 0x05a03adf //dup z31.s,w22 +.if mixin == 1 + add w20,w29,#1 + mov w19,w29 +.inst 0x04a14690 //index z16.s,w20,1 +.inst 0x04a14683 //index z3.s,w20,1 +.else +.inst 0x04a147b0 //index z16.s,w29,1 +.inst 0x04a147a3 //index z3.s,w29,1 +.endif + lsr x20,x29,#32 +.inst 0x05a03a87 //dup z7.s,w20 +.inst 0x05a03a93 //dup z19.s,w20 + mov x6,#10 +10: +.align 5 +.inst 0x04a10000 //add z0.s,z0.s,z1.s +.if mixin == 1 + add w7,w7,w11 +.endif +.inst 0x04a50084 //add z4.s,z4.s,z5.s +.if mixin == 1 + add w8,w8,w12 +.endif +.inst 0x04a90108 //add z8.s,z8.s,z9.s +.if mixin == 1 + add w9,w9,w13 +.endif +.inst 0x04ad018c //add z12.s,z12.s,z13.s +.if mixin == 1 + add w10,w10,w14 +.endif +.if mixin == 1 + eor w19,w19,w7 +.endif +.inst 0x04703403 //xar z3.s,z3.s,z0.s,16 +.if mixin == 1 + ror w19,w19,16 +.endif +.if mixin == 1 + eor w20,w20,w8 +.endif +.inst 0x04703487 //xar z7.s,z7.s,z4.s,16 +.if mixin == 1 + ror w20,w20,16 +.endif +.if mixin == 1 + eor w21,w21,w9 +.endif +.inst 0x0470350b //xar z11.s,z11.s,z8.s,16 +.if mixin == 1 + ror w21,w21,16 +.endif +.if mixin == 1 + eor w22,w22,w10 +.endif +.inst 0x0470358f //xar z15.s,z15.s,z12.s,16 +.if mixin == 1 + ror w22,w22,16 +.endif +.inst 0x04a30042 //add z2.s,z2.s,z3.s +.if mixin == 1 + add w15,w15,w19 +.endif +.inst 0x04a700c6 //add z6.s,z6.s,z7.s +.if mixin == 1 + add w16,w16,w20 +.endif +.inst 0x04ab014a //add z10.s,z10.s,z11.s +.if mixin == 1 + add w17,w17,w21 +.endif +.inst 0x04af01ce //add z14.s,z14.s,z15.s +.if mixin == 1 + add w18,w18,w22 +.endif +.if mixin == 1 + eor w11,w11,w15 +.endif +.inst 0x046c3441 //xar z1.s,z1.s,z2.s,20 +.if mixin == 1 + ror w11,w11,20 +.endif +.if mixin == 1 + eor w12,w12,w16 +.endif +.inst 0x046c34c5 //xar z5.s,z5.s,z6.s,20 +.if mixin == 1 + ror w12,w12,20 +.endif +.if mixin == 1 + eor w13,w13,w17 +.endif +.inst 0x046c3549 //xar z9.s,z9.s,z10.s,20 +.if mixin == 1 + ror w13,w13,20 +.endif +.if mixin == 1 + eor w14,w14,w18 +.endif +.inst 0x046c35cd //xar z13.s,z13.s,z14.s,20 +.if mixin == 1 + ror w14,w14,20 +.endif +.inst 0x04a10000 //add z0.s,z0.s,z1.s +.if mixin == 1 + add w7,w7,w11 +.endif +.inst 0x04a50084 //add z4.s,z4.s,z5.s +.if mixin == 1 + add w8,w8,w12 +.endif +.inst 0x04a90108 //add z8.s,z8.s,z9.s +.if mixin == 1 + add w9,w9,w13 +.endif +.inst 0x04ad018c //add z12.s,z12.s,z13.s +.if mixin == 1 + add w10,w10,w14 +.endif +.if mixin == 1 + eor w19,w19,w7 +.endif +.inst 0x04683403 //xar z3.s,z3.s,z0.s,24 +.if mixin == 1 + ror w19,w19,24 +.endif +.if mixin == 1 + eor w20,w20,w8 +.endif +.inst 0x04683487 //xar z7.s,z7.s,z4.s,24 +.if mixin == 1 + ror w20,w20,24 +.endif +.if mixin == 1 + eor w21,w21,w9 +.endif +.inst 0x0468350b //xar z11.s,z11.s,z8.s,24 +.if mixin == 1 + ror w21,w21,24 +.endif +.if mixin == 1 + eor w22,w22,w10 +.endif +.inst 0x0468358f //xar z15.s,z15.s,z12.s,24 +.if mixin == 1 + ror w22,w22,24 +.endif +.inst 0x04a30042 //add z2.s,z2.s,z3.s +.if mixin == 1 + add w15,w15,w19 +.endif +.inst 0x04a700c6 //add z6.s,z6.s,z7.s +.if mixin == 1 + add w16,w16,w20 +.endif +.inst 0x04ab014a //add z10.s,z10.s,z11.s +.if mixin == 1 + add w17,w17,w21 +.endif +.inst 0x04af01ce //add z14.s,z14.s,z15.s +.if mixin == 1 + add w18,w18,w22 +.endif +.if mixin == 1 + eor w11,w11,w15 +.endif +.inst 0x04673441 //xar z1.s,z1.s,z2.s,25 +.if mixin == 1 + ror w11,w11,25 +.endif +.if mixin == 1 + eor w12,w12,w16 +.endif +.inst 0x046734c5 //xar z5.s,z5.s,z6.s,25 +.if mixin == 1 + ror w12,w12,25 +.endif +.if mixin == 1 + eor w13,w13,w17 +.endif +.inst 0x04673549 //xar z9.s,z9.s,z10.s,25 +.if mixin == 1 + ror w13,w13,25 +.endif +.if mixin == 1 + eor w14,w14,w18 +.endif +.inst 0x046735cd //xar z13.s,z13.s,z14.s,25 +.if mixin == 1 + ror w14,w14,25 +.endif +.inst 0x04a50000 //add z0.s,z0.s,z5.s +.if mixin == 1 + add w7,w7,w12 +.endif +.inst 0x04a90084 //add z4.s,z4.s,z9.s +.if mixin == 1 + add w8,w8,w13 +.endif +.inst 0x04ad0108 //add z8.s,z8.s,z13.s +.if mixin == 1 + add w9,w9,w14 +.endif +.inst 0x04a1018c //add z12.s,z12.s,z1.s +.if mixin == 1 + add w10,w10,w11 +.endif +.if mixin == 1 + eor w22,w22,w7 +.endif +.inst 0x0470340f //xar z15.s,z15.s,z0.s,16 +.if mixin == 1 + ror w22,w22,16 +.endif +.if mixin == 1 + eor w19,w19,w8 +.endif +.inst 0x04703483 //xar z3.s,z3.s,z4.s,16 +.if mixin == 1 + ror w19,w19,16 +.endif +.if mixin == 1 + eor w20,w20,w9 +.endif +.inst 0x04703507 //xar z7.s,z7.s,z8.s,16 +.if mixin == 1 + ror w20,w20,16 +.endif +.if mixin == 1 + eor w21,w21,w10 +.endif +.inst 0x0470358b //xar z11.s,z11.s,z12.s,16 +.if mixin == 1 + ror w21,w21,16 +.endif +.inst 0x04af014a //add z10.s,z10.s,z15.s +.if mixin == 1 + add w17,w17,w22 +.endif +.inst 0x04a301ce //add z14.s,z14.s,z3.s +.if mixin == 1 + add w18,w18,w19 +.endif +.inst 0x04a70042 //add z2.s,z2.s,z7.s +.if mixin == 1 + add w15,w15,w20 +.endif +.inst 0x04ab00c6 //add z6.s,z6.s,z11.s +.if mixin == 1 + add w16,w16,w21 +.endif +.if mixin == 1 + eor w12,w12,w17 +.endif +.inst 0x046c3545 //xar z5.s,z5.s,z10.s,20 +.if mixin == 1 + ror w12,w12,20 +.endif +.if mixin == 1 + eor w13,w13,w18 +.endif +.inst 0x046c35c9 //xar z9.s,z9.s,z14.s,20 +.if mixin == 1 + ror w13,w13,20 +.endif +.if mixin == 1 + eor w14,w14,w15 +.endif +.inst 0x046c344d //xar z13.s,z13.s,z2.s,20 +.if mixin == 1 + ror w14,w14,20 +.endif +.if mixin == 1 + eor w11,w11,w16 +.endif +.inst 0x046c34c1 //xar z1.s,z1.s,z6.s,20 +.if mixin == 1 + ror w11,w11,20 +.endif +.inst 0x04a50000 //add z0.s,z0.s,z5.s +.if mixin == 1 + add w7,w7,w12 +.endif +.inst 0x04a90084 //add z4.s,z4.s,z9.s +.if mixin == 1 + add w8,w8,w13 +.endif +.inst 0x04ad0108 //add z8.s,z8.s,z13.s +.if mixin == 1 + add w9,w9,w14 +.endif +.inst 0x04a1018c //add z12.s,z12.s,z1.s +.if mixin == 1 + add w10,w10,w11 +.endif +.if mixin == 1 + eor w22,w22,w7 +.endif +.inst 0x0468340f //xar z15.s,z15.s,z0.s,24 +.if mixin == 1 + ror w22,w22,24 +.endif +.if mixin == 1 + eor w19,w19,w8 +.endif +.inst 0x04683483 //xar z3.s,z3.s,z4.s,24 +.if mixin == 1 + ror w19,w19,24 +.endif +.if mixin == 1 + eor w20,w20,w9 +.endif +.inst 0x04683507 //xar z7.s,z7.s,z8.s,24 +.if mixin == 1 + ror w20,w20,24 +.endif +.if mixin == 1 + eor w21,w21,w10 +.endif +.inst 0x0468358b //xar z11.s,z11.s,z12.s,24 +.if mixin == 1 + ror w21,w21,24 +.endif +.inst 0x04af014a //add z10.s,z10.s,z15.s +.if mixin == 1 + add w17,w17,w22 +.endif +.inst 0x04a301ce //add z14.s,z14.s,z3.s +.if mixin == 1 + add w18,w18,w19 +.endif +.inst 0x04a70042 //add z2.s,z2.s,z7.s +.if mixin == 1 + add w15,w15,w20 +.endif +.inst 0x04ab00c6 //add z6.s,z6.s,z11.s +.if mixin == 1 + add w16,w16,w21 +.endif +.if mixin == 1 + eor w12,w12,w17 +.endif +.inst 0x04673545 //xar z5.s,z5.s,z10.s,25 +.if mixin == 1 + ror w12,w12,25 +.endif +.if mixin == 1 + eor w13,w13,w18 +.endif +.inst 0x046735c9 //xar z9.s,z9.s,z14.s,25 +.if mixin == 1 + ror w13,w13,25 +.endif +.if mixin == 1 + eor w14,w14,w15 +.endif +.inst 0x0467344d //xar z13.s,z13.s,z2.s,25 +.if mixin == 1 + ror w14,w14,25 +.endif +.if mixin == 1 + eor w11,w11,w16 +.endif +.inst 0x046734c1 //xar z1.s,z1.s,z6.s,25 +.if mixin == 1 + ror w11,w11,25 +.endif + sub x6,x6,1 + cbnz x6,10b +.if mixin == 1 + add w7,w7,w23 +.endif +.inst 0x04b90000 //add z0.s,z0.s,z25.s +.if mixin == 1 + add x8,x8,x23,lsr #32 +.endif +.inst 0x04ba0084 //add z4.s,z4.s,z26.s +.if mixin == 1 + add x7,x7,x8,lsl #32 // pack +.endif +.if mixin == 1 + add w9,w9,w24 +.endif +.inst 0x04bb0108 //add z8.s,z8.s,z27.s +.if mixin == 1 + add x10,x10,x24,lsr #32 +.endif +.inst 0x04bc018c //add z12.s,z12.s,z28.s +.if mixin == 1 + add x9,x9,x10,lsl #32 // pack +.endif +.if mixin == 1 + ldp x8,x10,[x1],#16 +.endif +.if mixin == 1 + add w11,w11,w25 +.endif +.inst 0x04bd0021 //add z1.s,z1.s,z29.s +.if mixin == 1 + add x12,x12,x25,lsr #32 +.endif +.inst 0x04be00a5 //add z5.s,z5.s,z30.s +.if mixin == 1 + add x11,x11,x12,lsl #32 // pack +.endif +.if mixin == 1 + add w13,w13,w26 +.endif +.inst 0x04b50129 //add z9.s,z9.s,z21.s +.if mixin == 1 + add x14,x14,x26,lsr #32 +.endif +.inst 0x04b601ad //add z13.s,z13.s,z22.s +.if mixin == 1 + add x13,x13,x14,lsl #32 // pack +.endif +.if mixin == 1 + ldp x12,x14,[x1],#16 +.endif +.if mixin == 1 + add w15,w15,w27 +.endif +.inst 0x04b70042 //add z2.s,z2.s,z23.s +.if mixin == 1 + add x16,x16,x27,lsr #32 +.endif +.inst 0x04b800c6 //add z6.s,z6.s,z24.s +.if mixin == 1 + add x15,x15,x16,lsl #32 // pack +.endif +.if mixin == 1 + add w17,w17,w28 +.endif +.inst 0x04b1014a //add z10.s,z10.s,z17.s +.if mixin == 1 + add x18,x18,x28,lsr #32 +.endif +.inst 0x04b201ce //add z14.s,z14.s,z18.s +.if mixin == 1 + add x17,x17,x18,lsl #32 // pack +.endif +.if mixin == 1 + ldp x16,x18,[x1],#16 +.endif +.if mixin == 1 + add w19,w19,w29 +.endif +.inst 0x04b00063 //add z3.s,z3.s,z16.s +.if mixin == 1 + add x20,x20,x29,lsr #32 +.endif +.inst 0x04b300e7 //add z7.s,z7.s,z19.s +.if mixin == 1 + add x19,x19,x20,lsl #32 // pack +.endif +.if mixin == 1 + add w21,w21,w30 +.endif +.inst 0x04b4016b //add z11.s,z11.s,z20.s +.if mixin == 1 + add x22,x22,x30,lsr #32 +.endif +.inst 0x04bf01ef //add z15.s,z15.s,z31.s +.if mixin == 1 + add x21,x21,x22,lsl #32 // pack +.endif +.if mixin == 1 + ldp x20,x22,[x1],#16 +.endif +#ifdef __AARCH64EB__ + rev x7,x7 +.inst 0x05a48000 //revb z0.s,p0/m,z0.s +.inst 0x05a48084 //revb z4.s,p0/m,z4.s + rev x9,x9 +.inst 0x05a48108 //revb z8.s,p0/m,z8.s +.inst 0x05a4818c //revb z12.s,p0/m,z12.s + rev x11,x11 +.inst 0x05a48021 //revb z1.s,p0/m,z1.s +.inst 0x05a480a5 //revb z5.s,p0/m,z5.s + rev x13,x13 +.inst 0x05a48129 //revb z9.s,p0/m,z9.s +.inst 0x05a481ad //revb z13.s,p0/m,z13.s + rev x15,x15 +.inst 0x05a48042 //revb z2.s,p0/m,z2.s +.inst 0x05a480c6 //revb z6.s,p0/m,z6.s + rev x17,x17 +.inst 0x05a4814a //revb z10.s,p0/m,z10.s +.inst 0x05a481ce //revb z14.s,p0/m,z14.s + rev x19,x19 +.inst 0x05a48063 //revb z3.s,p0/m,z3.s +.inst 0x05a480e7 //revb z7.s,p0/m,z7.s + rev x21,x21 +.inst 0x05a4816b //revb z11.s,p0/m,z11.s +.inst 0x05a481ef //revb z15.s,p0/m,z15.s +#endif +.if mixin == 1 + add x29,x29,#1 +.endif + cmp x5,4 + b.ne 200f +.if mixin == 1 + eor x7,x7,x8 +.endif +.if mixin == 1 + eor x9,x9,x10 +.endif +.if mixin == 1 + eor x11,x11,x12 +.endif +.inst 0x05a46011 //zip1 z17.s,z0.s,z4.s +.inst 0x05a46412 //zip2 z18.s,z0.s,z4.s +.inst 0x05ac6113 //zip1 z19.s,z8.s,z12.s +.inst 0x05ac6514 //zip2 z20.s,z8.s,z12.s + +.inst 0x05a56035 //zip1 z21.s,z1.s,z5.s +.inst 0x05a56436 //zip2 z22.s,z1.s,z5.s +.inst 0x05ad6137 //zip1 z23.s,z9.s,z13.s +.inst 0x05ad6538 //zip2 z24.s,z9.s,z13.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36624 //zip2 z4.d,z17.d,z19.d +.inst 0x05f46248 //zip1 z8.d,z18.d,z20.d +.inst 0x05f4664c //zip2 z12.d,z18.d,z20.d + +.inst 0x05f762a1 //zip1 z1.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c9 //zip1 z9.d,z22.d,z24.d +.inst 0x05f866cd //zip2 z13.d,z22.d,z24.d +.if mixin == 1 + eor x13,x13,x14 +.endif +.if mixin == 1 + eor x15,x15,x16 +.endif +.if mixin == 1 + eor x17,x17,x18 +.endif +.inst 0x05a66051 //zip1 z17.s,z2.s,z6.s +.inst 0x05a66452 //zip2 z18.s,z2.s,z6.s +.inst 0x05ae6153 //zip1 z19.s,z10.s,z14.s +.inst 0x05ae6554 //zip2 z20.s,z10.s,z14.s + +.inst 0x05a76075 //zip1 z21.s,z3.s,z7.s +.inst 0x05a76476 //zip2 z22.s,z3.s,z7.s +.inst 0x05af6177 //zip1 z23.s,z11.s,z15.s +.inst 0x05af6578 //zip2 z24.s,z11.s,z15.s + +.inst 0x05f36222 //zip1 z2.d,z17.d,z19.d +.inst 0x05f36626 //zip2 z6.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664e //zip2 z14.d,z18.d,z20.d + +.inst 0x05f762a3 //zip1 z3.d,z21.d,z23.d +.inst 0x05f766a7 //zip2 z7.d,z21.d,z23.d +.inst 0x05f862cb //zip1 z11.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x19,x19,x20 +.endif +.if mixin == 1 + eor x21,x21,x22 +.endif + ld1 {v17.4s,v18.4s,v19.4s,v20.4s},[x1],#64 + ld1 {v21.4s,v22.4s,v23.4s,v24.4s},[x1],#64 +.inst 0x04b13000 //eor z0.d,z0.d,z17.d +.inst 0x04b23021 //eor z1.d,z1.d,z18.d +.inst 0x04b33042 //eor z2.d,z2.d,z19.d +.inst 0x04b43063 //eor z3.d,z3.d,z20.d +.inst 0x04b53084 //eor z4.d,z4.d,z21.d +.inst 0x04b630a5 //eor z5.d,z5.d,z22.d +.inst 0x04b730c6 //eor z6.d,z6.d,z23.d +.inst 0x04b830e7 //eor z7.d,z7.d,z24.d + ld1 {v17.4s,v18.4s,v19.4s,v20.4s},[x1],#64 + ld1 {v21.4s,v22.4s,v23.4s,v24.4s},[x1],#64 +.if mixin == 1 + stp x7,x9,[x0],#16 +.endif +.inst 0x04b13108 //eor z8.d,z8.d,z17.d +.inst 0x04b23129 //eor z9.d,z9.d,z18.d +.if mixin == 1 + stp x11,x13,[x0],#16 +.endif +.inst 0x04b3314a //eor z10.d,z10.d,z19.d +.inst 0x04b4316b //eor z11.d,z11.d,z20.d +.if mixin == 1 + stp x15,x17,[x0],#16 +.endif +.inst 0x04b5318c //eor z12.d,z12.d,z21.d +.inst 0x04b631ad //eor z13.d,z13.d,z22.d +.if mixin == 1 + stp x19,x21,[x0],#16 +.endif +.inst 0x04b731ce //eor z14.d,z14.d,z23.d +.inst 0x04b831ef //eor z15.d,z15.d,z24.d + st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x0],#64 + st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 + st1 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 + st1 {v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64 + b 210f +200: +.inst 0x05a16011 //zip1 z17.s,z0.s,z1.s +.inst 0x05a16412 //zip2 z18.s,z0.s,z1.s +.inst 0x05a36053 //zip1 z19.s,z2.s,z3.s +.inst 0x05a36454 //zip2 z20.s,z2.s,z3.s + +.inst 0x05a56095 //zip1 z21.s,z4.s,z5.s +.inst 0x05a56496 //zip2 z22.s,z4.s,z5.s +.inst 0x05a760d7 //zip1 z23.s,z6.s,z7.s +.inst 0x05a764d8 //zip2 z24.s,z6.s,z7.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36621 //zip2 z1.d,z17.d,z19.d +.inst 0x05f46242 //zip1 z2.d,z18.d,z20.d +.inst 0x05f46643 //zip2 z3.d,z18.d,z20.d + +.inst 0x05f762a4 //zip1 z4.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c6 //zip1 z6.d,z22.d,z24.d +.inst 0x05f866c7 //zip2 z7.d,z22.d,z24.d +.if mixin == 1 + eor x7,x7,x8 +.endif +.if mixin == 1 + eor x9,x9,x10 +.endif +.inst 0x05a96111 //zip1 z17.s,z8.s,z9.s +.inst 0x05a96512 //zip2 z18.s,z8.s,z9.s +.inst 0x05ab6153 //zip1 z19.s,z10.s,z11.s +.inst 0x05ab6554 //zip2 z20.s,z10.s,z11.s + +.inst 0x05ad6195 //zip1 z21.s,z12.s,z13.s +.inst 0x05ad6596 //zip2 z22.s,z12.s,z13.s +.inst 0x05af61d7 //zip1 z23.s,z14.s,z15.s +.inst 0x05af65d8 //zip2 z24.s,z14.s,z15.s + +.inst 0x05f36228 //zip1 z8.d,z17.d,z19.d +.inst 0x05f36629 //zip2 z9.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664b //zip2 z11.d,z18.d,z20.d + +.inst 0x05f762ac //zip1 z12.d,z21.d,z23.d +.inst 0x05f766ad //zip2 z13.d,z21.d,z23.d +.inst 0x05f862ce //zip1 z14.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x11,x11,x12 +.endif +.if mixin == 1 + eor x13,x13,x14 +.endif +.inst 0x05a46011 //zip1 z17.s,z0.s,z4.s +.inst 0x05a46412 //zip2 z18.s,z0.s,z4.s +.inst 0x05ac6113 //zip1 z19.s,z8.s,z12.s +.inst 0x05ac6514 //zip2 z20.s,z8.s,z12.s + +.inst 0x05a56035 //zip1 z21.s,z1.s,z5.s +.inst 0x05a56436 //zip2 z22.s,z1.s,z5.s +.inst 0x05ad6137 //zip1 z23.s,z9.s,z13.s +.inst 0x05ad6538 //zip2 z24.s,z9.s,z13.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36624 //zip2 z4.d,z17.d,z19.d +.inst 0x05f46248 //zip1 z8.d,z18.d,z20.d +.inst 0x05f4664c //zip2 z12.d,z18.d,z20.d + +.inst 0x05f762a1 //zip1 z1.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c9 //zip1 z9.d,z22.d,z24.d +.inst 0x05f866cd //zip2 z13.d,z22.d,z24.d +.if mixin == 1 + eor x15,x15,x16 +.endif +.if mixin == 1 + eor x17,x17,x18 +.endif +.inst 0x05a66051 //zip1 z17.s,z2.s,z6.s +.inst 0x05a66452 //zip2 z18.s,z2.s,z6.s +.inst 0x05ae6153 //zip1 z19.s,z10.s,z14.s +.inst 0x05ae6554 //zip2 z20.s,z10.s,z14.s + +.inst 0x05a76075 //zip1 z21.s,z3.s,z7.s +.inst 0x05a76476 //zip2 z22.s,z3.s,z7.s +.inst 0x05af6177 //zip1 z23.s,z11.s,z15.s +.inst 0x05af6578 //zip2 z24.s,z11.s,z15.s + +.inst 0x05f36222 //zip1 z2.d,z17.d,z19.d +.inst 0x05f36626 //zip2 z6.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664e //zip2 z14.d,z18.d,z20.d + +.inst 0x05f762a3 //zip1 z3.d,z21.d,z23.d +.inst 0x05f766a7 //zip2 z7.d,z21.d,z23.d +.inst 0x05f862cb //zip1 z11.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x19,x19,x20 +.endif +.if mixin == 1 + eor x21,x21,x22 +.endif +.inst 0xa540a031 //ld1w {z17.s},p0/z,[x1,#0,MUL VL] +.inst 0xa541a032 //ld1w {z18.s},p0/z,[x1,#1,MUL VL] +.inst 0xa542a033 //ld1w {z19.s},p0/z,[x1,#2,MUL VL] +.inst 0xa543a034 //ld1w {z20.s},p0/z,[x1,#3,MUL VL] +.inst 0xa544a035 //ld1w {z21.s},p0/z,[x1,#4,MUL VL] +.inst 0xa545a036 //ld1w {z22.s},p0/z,[x1,#5,MUL VL] +.inst 0xa546a037 //ld1w {z23.s},p0/z,[x1,#6,MUL VL] +.inst 0xa547a038 //ld1w {z24.s},p0/z,[x1,#7,MUL VL] +.inst 0x04215101 //addvl x1,x1,8 +.inst 0x04b13000 //eor z0.d,z0.d,z17.d +.inst 0x04b23084 //eor z4.d,z4.d,z18.d +.inst 0x04b33108 //eor z8.d,z8.d,z19.d +.inst 0x04b4318c //eor z12.d,z12.d,z20.d +.inst 0x04b53021 //eor z1.d,z1.d,z21.d +.inst 0x04b630a5 //eor z5.d,z5.d,z22.d +.inst 0x04b73129 //eor z9.d,z9.d,z23.d +.inst 0x04b831ad //eor z13.d,z13.d,z24.d +.inst 0xa540a031 //ld1w {z17.s},p0/z,[x1,#0,MUL VL] +.inst 0xa541a032 //ld1w {z18.s},p0/z,[x1,#1,MUL VL] +.inst 0xa542a033 //ld1w {z19.s},p0/z,[x1,#2,MUL VL] +.inst 0xa543a034 //ld1w {z20.s},p0/z,[x1,#3,MUL VL] +.inst 0xa544a035 //ld1w {z21.s},p0/z,[x1,#4,MUL VL] +.inst 0xa545a036 //ld1w {z22.s},p0/z,[x1,#5,MUL VL] +.inst 0xa546a037 //ld1w {z23.s},p0/z,[x1,#6,MUL VL] +.inst 0xa547a038 //ld1w {z24.s},p0/z,[x1,#7,MUL VL] +.inst 0x04215101 //addvl x1,x1,8 +.if mixin == 1 + stp x7,x9,[x0],#16 +.endif +.inst 0x04b13042 //eor z2.d,z2.d,z17.d +.inst 0x04b230c6 //eor z6.d,z6.d,z18.d +.if mixin == 1 + stp x11,x13,[x0],#16 +.endif +.inst 0x04b3314a //eor z10.d,z10.d,z19.d +.inst 0x04b431ce //eor z14.d,z14.d,z20.d +.if mixin == 1 + stp x15,x17,[x0],#16 +.endif +.inst 0x04b53063 //eor z3.d,z3.d,z21.d +.inst 0x04b630e7 //eor z7.d,z7.d,z22.d +.if mixin == 1 + stp x19,x21,[x0],#16 +.endif +.inst 0x04b7316b //eor z11.d,z11.d,z23.d +.inst 0x04b831ef //eor z15.d,z15.d,z24.d +.inst 0xe540e000 //st1w {z0.s},p0,[x0,#0,MUL VL] +.inst 0xe541e004 //st1w {z4.s},p0,[x0,#1,MUL VL] +.inst 0xe542e008 //st1w {z8.s},p0,[x0,#2,MUL VL] +.inst 0xe543e00c //st1w {z12.s},p0,[x0,#3,MUL VL] +.inst 0xe544e001 //st1w {z1.s},p0,[x0,#4,MUL VL] +.inst 0xe545e005 //st1w {z5.s},p0,[x0,#5,MUL VL] +.inst 0xe546e009 //st1w {z9.s},p0,[x0,#6,MUL VL] +.inst 0xe547e00d //st1w {z13.s},p0,[x0,#7,MUL VL] +.inst 0x04205100 //addvl x0,x0,8 +.inst 0xe540e002 //st1w {z2.s},p0,[x0,#0,MUL VL] +.inst 0xe541e006 //st1w {z6.s},p0,[x0,#1,MUL VL] +.inst 0xe542e00a //st1w {z10.s},p0,[x0,#2,MUL VL] +.inst 0xe543e00e //st1w {z14.s},p0,[x0,#3,MUL VL] +.inst 0xe544e003 //st1w {z3.s},p0,[x0,#4,MUL VL] +.inst 0xe545e007 //st1w {z7.s},p0,[x0,#5,MUL VL] +.inst 0xe546e00b //st1w {z11.s},p0,[x0,#6,MUL VL] +.inst 0xe547e00f //st1w {z15.s},p0,[x0,#7,MUL VL] +.inst 0x04205100 //addvl x0,x0,8 +210: +.inst 0x04b0e3fd //incw x29, ALL, MUL #1 + subs x2,x2,64 + b.gt 100b + b 110f +101: + mixin=0 + lsr x8,x23,#32 +.inst 0x05a03ae0 //dup z0.s,w23 +.inst 0x05a03af9 //dup z25.s,w23 +.if mixin == 1 + mov w7,w23 +.endif +.inst 0x05a03904 //dup z4.s,w8 +.inst 0x05a0391a //dup z26.s,w8 + lsr x10,x24,#32 +.inst 0x05a03b08 //dup z8.s,w24 +.inst 0x05a03b1b //dup z27.s,w24 +.if mixin == 1 + mov w9,w24 +.endif +.inst 0x05a0394c //dup z12.s,w10 +.inst 0x05a0395c //dup z28.s,w10 + lsr x12,x25,#32 +.inst 0x05a03b21 //dup z1.s,w25 +.inst 0x05a03b3d //dup z29.s,w25 +.if mixin == 1 + mov w11,w25 +.endif +.inst 0x05a03985 //dup z5.s,w12 +.inst 0x05a0399e //dup z30.s,w12 + lsr x14,x26,#32 +.inst 0x05a03b49 //dup z9.s,w26 +.inst 0x05a03b55 //dup z21.s,w26 +.if mixin == 1 + mov w13,w26 +.endif +.inst 0x05a039cd //dup z13.s,w14 +.inst 0x05a039d6 //dup z22.s,w14 + lsr x16,x27,#32 +.inst 0x05a03b62 //dup z2.s,w27 +.inst 0x05a03b77 //dup z23.s,w27 +.if mixin == 1 + mov w15,w27 +.endif +.inst 0x05a03a06 //dup z6.s,w16 +.inst 0x05a03a18 //dup z24.s,w16 + lsr x18,x28,#32 +.inst 0x05a03b8a //dup z10.s,w28 +.inst 0x05a03b91 //dup z17.s,w28 +.if mixin == 1 + mov w17,w28 +.endif +.inst 0x05a03a4e //dup z14.s,w18 +.inst 0x05a03a52 //dup z18.s,w18 + lsr x22,x30,#32 +.inst 0x05a03bcb //dup z11.s,w30 +.inst 0x05a03bd4 //dup z20.s,w30 +.if mixin == 1 + mov w21,w30 +.endif +.inst 0x05a03acf //dup z15.s,w22 +.inst 0x05a03adf //dup z31.s,w22 +.if mixin == 1 + add w20,w29,#1 + mov w19,w29 +.inst 0x04a14690 //index z16.s,w20,1 +.inst 0x04a14683 //index z3.s,w20,1 +.else +.inst 0x04a147b0 //index z16.s,w29,1 +.inst 0x04a147a3 //index z3.s,w29,1 +.endif + lsr x20,x29,#32 +.inst 0x05a03a87 //dup z7.s,w20 +.inst 0x05a03a93 //dup z19.s,w20 + mov x6,#10 +10: +.align 5 +.inst 0x04a10000 //add z0.s,z0.s,z1.s +.if mixin == 1 + add w7,w7,w11 +.endif +.inst 0x04a50084 //add z4.s,z4.s,z5.s +.if mixin == 1 + add w8,w8,w12 +.endif +.inst 0x04a90108 //add z8.s,z8.s,z9.s +.if mixin == 1 + add w9,w9,w13 +.endif +.inst 0x04ad018c //add z12.s,z12.s,z13.s +.if mixin == 1 + add w10,w10,w14 +.endif +.if mixin == 1 + eor w19,w19,w7 +.endif +.inst 0x04703403 //xar z3.s,z3.s,z0.s,16 +.if mixin == 1 + ror w19,w19,16 +.endif +.if mixin == 1 + eor w20,w20,w8 +.endif +.inst 0x04703487 //xar z7.s,z7.s,z4.s,16 +.if mixin == 1 + ror w20,w20,16 +.endif +.if mixin == 1 + eor w21,w21,w9 +.endif +.inst 0x0470350b //xar z11.s,z11.s,z8.s,16 +.if mixin == 1 + ror w21,w21,16 +.endif +.if mixin == 1 + eor w22,w22,w10 +.endif +.inst 0x0470358f //xar z15.s,z15.s,z12.s,16 +.if mixin == 1 + ror w22,w22,16 +.endif +.inst 0x04a30042 //add z2.s,z2.s,z3.s +.if mixin == 1 + add w15,w15,w19 +.endif +.inst 0x04a700c6 //add z6.s,z6.s,z7.s +.if mixin == 1 + add w16,w16,w20 +.endif +.inst 0x04ab014a //add z10.s,z10.s,z11.s +.if mixin == 1 + add w17,w17,w21 +.endif +.inst 0x04af01ce //add z14.s,z14.s,z15.s +.if mixin == 1 + add w18,w18,w22 +.endif +.if mixin == 1 + eor w11,w11,w15 +.endif +.inst 0x046c3441 //xar z1.s,z1.s,z2.s,20 +.if mixin == 1 + ror w11,w11,20 +.endif +.if mixin == 1 + eor w12,w12,w16 +.endif +.inst 0x046c34c5 //xar z5.s,z5.s,z6.s,20 +.if mixin == 1 + ror w12,w12,20 +.endif +.if mixin == 1 + eor w13,w13,w17 +.endif +.inst 0x046c3549 //xar z9.s,z9.s,z10.s,20 +.if mixin == 1 + ror w13,w13,20 +.endif +.if mixin == 1 + eor w14,w14,w18 +.endif +.inst 0x046c35cd //xar z13.s,z13.s,z14.s,20 +.if mixin == 1 + ror w14,w14,20 +.endif +.inst 0x04a10000 //add z0.s,z0.s,z1.s +.if mixin == 1 + add w7,w7,w11 +.endif +.inst 0x04a50084 //add z4.s,z4.s,z5.s +.if mixin == 1 + add w8,w8,w12 +.endif +.inst 0x04a90108 //add z8.s,z8.s,z9.s +.if mixin == 1 + add w9,w9,w13 +.endif +.inst 0x04ad018c //add z12.s,z12.s,z13.s +.if mixin == 1 + add w10,w10,w14 +.endif +.if mixin == 1 + eor w19,w19,w7 +.endif +.inst 0x04683403 //xar z3.s,z3.s,z0.s,24 +.if mixin == 1 + ror w19,w19,24 +.endif +.if mixin == 1 + eor w20,w20,w8 +.endif +.inst 0x04683487 //xar z7.s,z7.s,z4.s,24 +.if mixin == 1 + ror w20,w20,24 +.endif +.if mixin == 1 + eor w21,w21,w9 +.endif +.inst 0x0468350b //xar z11.s,z11.s,z8.s,24 +.if mixin == 1 + ror w21,w21,24 +.endif +.if mixin == 1 + eor w22,w22,w10 +.endif +.inst 0x0468358f //xar z15.s,z15.s,z12.s,24 +.if mixin == 1 + ror w22,w22,24 +.endif +.inst 0x04a30042 //add z2.s,z2.s,z3.s +.if mixin == 1 + add w15,w15,w19 +.endif +.inst 0x04a700c6 //add z6.s,z6.s,z7.s +.if mixin == 1 + add w16,w16,w20 +.endif +.inst 0x04ab014a //add z10.s,z10.s,z11.s +.if mixin == 1 + add w17,w17,w21 +.endif +.inst 0x04af01ce //add z14.s,z14.s,z15.s +.if mixin == 1 + add w18,w18,w22 +.endif +.if mixin == 1 + eor w11,w11,w15 +.endif +.inst 0x04673441 //xar z1.s,z1.s,z2.s,25 +.if mixin == 1 + ror w11,w11,25 +.endif +.if mixin == 1 + eor w12,w12,w16 +.endif +.inst 0x046734c5 //xar z5.s,z5.s,z6.s,25 +.if mixin == 1 + ror w12,w12,25 +.endif +.if mixin == 1 + eor w13,w13,w17 +.endif +.inst 0x04673549 //xar z9.s,z9.s,z10.s,25 +.if mixin == 1 + ror w13,w13,25 +.endif +.if mixin == 1 + eor w14,w14,w18 +.endif +.inst 0x046735cd //xar z13.s,z13.s,z14.s,25 +.if mixin == 1 + ror w14,w14,25 +.endif +.inst 0x04a50000 //add z0.s,z0.s,z5.s +.if mixin == 1 + add w7,w7,w12 +.endif +.inst 0x04a90084 //add z4.s,z4.s,z9.s +.if mixin == 1 + add w8,w8,w13 +.endif +.inst 0x04ad0108 //add z8.s,z8.s,z13.s +.if mixin == 1 + add w9,w9,w14 +.endif +.inst 0x04a1018c //add z12.s,z12.s,z1.s +.if mixin == 1 + add w10,w10,w11 +.endif +.if mixin == 1 + eor w22,w22,w7 +.endif +.inst 0x0470340f //xar z15.s,z15.s,z0.s,16 +.if mixin == 1 + ror w22,w22,16 +.endif +.if mixin == 1 + eor w19,w19,w8 +.endif +.inst 0x04703483 //xar z3.s,z3.s,z4.s,16 +.if mixin == 1 + ror w19,w19,16 +.endif +.if mixin == 1 + eor w20,w20,w9 +.endif +.inst 0x04703507 //xar z7.s,z7.s,z8.s,16 +.if mixin == 1 + ror w20,w20,16 +.endif +.if mixin == 1 + eor w21,w21,w10 +.endif +.inst 0x0470358b //xar z11.s,z11.s,z12.s,16 +.if mixin == 1 + ror w21,w21,16 +.endif +.inst 0x04af014a //add z10.s,z10.s,z15.s +.if mixin == 1 + add w17,w17,w22 +.endif +.inst 0x04a301ce //add z14.s,z14.s,z3.s +.if mixin == 1 + add w18,w18,w19 +.endif +.inst 0x04a70042 //add z2.s,z2.s,z7.s +.if mixin == 1 + add w15,w15,w20 +.endif +.inst 0x04ab00c6 //add z6.s,z6.s,z11.s +.if mixin == 1 + add w16,w16,w21 +.endif +.if mixin == 1 + eor w12,w12,w17 +.endif +.inst 0x046c3545 //xar z5.s,z5.s,z10.s,20 +.if mixin == 1 + ror w12,w12,20 +.endif +.if mixin == 1 + eor w13,w13,w18 +.endif +.inst 0x046c35c9 //xar z9.s,z9.s,z14.s,20 +.if mixin == 1 + ror w13,w13,20 +.endif +.if mixin == 1 + eor w14,w14,w15 +.endif +.inst 0x046c344d //xar z13.s,z13.s,z2.s,20 +.if mixin == 1 + ror w14,w14,20 +.endif +.if mixin == 1 + eor w11,w11,w16 +.endif +.inst 0x046c34c1 //xar z1.s,z1.s,z6.s,20 +.if mixin == 1 + ror w11,w11,20 +.endif +.inst 0x04a50000 //add z0.s,z0.s,z5.s +.if mixin == 1 + add w7,w7,w12 +.endif +.inst 0x04a90084 //add z4.s,z4.s,z9.s +.if mixin == 1 + add w8,w8,w13 +.endif +.inst 0x04ad0108 //add z8.s,z8.s,z13.s +.if mixin == 1 + add w9,w9,w14 +.endif +.inst 0x04a1018c //add z12.s,z12.s,z1.s +.if mixin == 1 + add w10,w10,w11 +.endif +.if mixin == 1 + eor w22,w22,w7 +.endif +.inst 0x0468340f //xar z15.s,z15.s,z0.s,24 +.if mixin == 1 + ror w22,w22,24 +.endif +.if mixin == 1 + eor w19,w19,w8 +.endif +.inst 0x04683483 //xar z3.s,z3.s,z4.s,24 +.if mixin == 1 + ror w19,w19,24 +.endif +.if mixin == 1 + eor w20,w20,w9 +.endif +.inst 0x04683507 //xar z7.s,z7.s,z8.s,24 +.if mixin == 1 + ror w20,w20,24 +.endif +.if mixin == 1 + eor w21,w21,w10 +.endif +.inst 0x0468358b //xar z11.s,z11.s,z12.s,24 +.if mixin == 1 + ror w21,w21,24 +.endif +.inst 0x04af014a //add z10.s,z10.s,z15.s +.if mixin == 1 + add w17,w17,w22 +.endif +.inst 0x04a301ce //add z14.s,z14.s,z3.s +.if mixin == 1 + add w18,w18,w19 +.endif +.inst 0x04a70042 //add z2.s,z2.s,z7.s +.if mixin == 1 + add w15,w15,w20 +.endif +.inst 0x04ab00c6 //add z6.s,z6.s,z11.s +.if mixin == 1 + add w16,w16,w21 +.endif +.if mixin == 1 + eor w12,w12,w17 +.endif +.inst 0x04673545 //xar z5.s,z5.s,z10.s,25 +.if mixin == 1 + ror w12,w12,25 +.endif +.if mixin == 1 + eor w13,w13,w18 +.endif +.inst 0x046735c9 //xar z9.s,z9.s,z14.s,25 +.if mixin == 1 + ror w13,w13,25 +.endif +.if mixin == 1 + eor w14,w14,w15 +.endif +.inst 0x0467344d //xar z13.s,z13.s,z2.s,25 +.if mixin == 1 + ror w14,w14,25 +.endif +.if mixin == 1 + eor w11,w11,w16 +.endif +.inst 0x046734c1 //xar z1.s,z1.s,z6.s,25 +.if mixin == 1 + ror w11,w11,25 +.endif + sub x6,x6,1 + cbnz x6,10b +.if mixin == 1 + add w7,w7,w23 +.endif +.inst 0x04b90000 //add z0.s,z0.s,z25.s +.if mixin == 1 + add x8,x8,x23,lsr #32 +.endif +.inst 0x04ba0084 //add z4.s,z4.s,z26.s +.if mixin == 1 + add x7,x7,x8,lsl #32 // pack +.endif +.if mixin == 1 + add w9,w9,w24 +.endif +.inst 0x04bb0108 //add z8.s,z8.s,z27.s +.if mixin == 1 + add x10,x10,x24,lsr #32 +.endif +.inst 0x04bc018c //add z12.s,z12.s,z28.s +.if mixin == 1 + add x9,x9,x10,lsl #32 // pack +.endif +.if mixin == 1 + ldp x8,x10,[x1],#16 +.endif +.if mixin == 1 + add w11,w11,w25 +.endif +.inst 0x04bd0021 //add z1.s,z1.s,z29.s +.if mixin == 1 + add x12,x12,x25,lsr #32 +.endif +.inst 0x04be00a5 //add z5.s,z5.s,z30.s +.if mixin == 1 + add x11,x11,x12,lsl #32 // pack +.endif +.if mixin == 1 + add w13,w13,w26 +.endif +.inst 0x04b50129 //add z9.s,z9.s,z21.s +.if mixin == 1 + add x14,x14,x26,lsr #32 +.endif +.inst 0x04b601ad //add z13.s,z13.s,z22.s +.if mixin == 1 + add x13,x13,x14,lsl #32 // pack +.endif +.if mixin == 1 + ldp x12,x14,[x1],#16 +.endif +.if mixin == 1 + add w15,w15,w27 +.endif +.inst 0x04b70042 //add z2.s,z2.s,z23.s +.if mixin == 1 + add x16,x16,x27,lsr #32 +.endif +.inst 0x04b800c6 //add z6.s,z6.s,z24.s +.if mixin == 1 + add x15,x15,x16,lsl #32 // pack +.endif +.if mixin == 1 + add w17,w17,w28 +.endif +.inst 0x04b1014a //add z10.s,z10.s,z17.s +.if mixin == 1 + add x18,x18,x28,lsr #32 +.endif +.inst 0x04b201ce //add z14.s,z14.s,z18.s +.if mixin == 1 + add x17,x17,x18,lsl #32 // pack +.endif +.if mixin == 1 + ldp x16,x18,[x1],#16 +.endif +.if mixin == 1 + add w19,w19,w29 +.endif +.inst 0x04b00063 //add z3.s,z3.s,z16.s +.if mixin == 1 + add x20,x20,x29,lsr #32 +.endif +.inst 0x04b300e7 //add z7.s,z7.s,z19.s +.if mixin == 1 + add x19,x19,x20,lsl #32 // pack +.endif +.if mixin == 1 + add w21,w21,w30 +.endif +.inst 0x04b4016b //add z11.s,z11.s,z20.s +.if mixin == 1 + add x22,x22,x30,lsr #32 +.endif +.inst 0x04bf01ef //add z15.s,z15.s,z31.s +.if mixin == 1 + add x21,x21,x22,lsl #32 // pack +.endif +.if mixin == 1 + ldp x20,x22,[x1],#16 +.endif +#ifdef __AARCH64EB__ + rev x7,x7 +.inst 0x05a48000 //revb z0.s,p0/m,z0.s +.inst 0x05a48084 //revb z4.s,p0/m,z4.s + rev x9,x9 +.inst 0x05a48108 //revb z8.s,p0/m,z8.s +.inst 0x05a4818c //revb z12.s,p0/m,z12.s + rev x11,x11 +.inst 0x05a48021 //revb z1.s,p0/m,z1.s +.inst 0x05a480a5 //revb z5.s,p0/m,z5.s + rev x13,x13 +.inst 0x05a48129 //revb z9.s,p0/m,z9.s +.inst 0x05a481ad //revb z13.s,p0/m,z13.s + rev x15,x15 +.inst 0x05a48042 //revb z2.s,p0/m,z2.s +.inst 0x05a480c6 //revb z6.s,p0/m,z6.s + rev x17,x17 +.inst 0x05a4814a //revb z10.s,p0/m,z10.s +.inst 0x05a481ce //revb z14.s,p0/m,z14.s + rev x19,x19 +.inst 0x05a48063 //revb z3.s,p0/m,z3.s +.inst 0x05a480e7 //revb z7.s,p0/m,z7.s + rev x21,x21 +.inst 0x05a4816b //revb z11.s,p0/m,z11.s +.inst 0x05a481ef //revb z15.s,p0/m,z15.s +#endif +.if mixin == 1 + add x29,x29,#1 +.endif + cmp x5,4 + b.ne 200f +.if mixin == 1 + eor x7,x7,x8 +.endif +.if mixin == 1 + eor x9,x9,x10 +.endif +.if mixin == 1 + eor x11,x11,x12 +.endif +.inst 0x05a46011 //zip1 z17.s,z0.s,z4.s +.inst 0x05a46412 //zip2 z18.s,z0.s,z4.s +.inst 0x05ac6113 //zip1 z19.s,z8.s,z12.s +.inst 0x05ac6514 //zip2 z20.s,z8.s,z12.s + +.inst 0x05a56035 //zip1 z21.s,z1.s,z5.s +.inst 0x05a56436 //zip2 z22.s,z1.s,z5.s +.inst 0x05ad6137 //zip1 z23.s,z9.s,z13.s +.inst 0x05ad6538 //zip2 z24.s,z9.s,z13.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36624 //zip2 z4.d,z17.d,z19.d +.inst 0x05f46248 //zip1 z8.d,z18.d,z20.d +.inst 0x05f4664c //zip2 z12.d,z18.d,z20.d + +.inst 0x05f762a1 //zip1 z1.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c9 //zip1 z9.d,z22.d,z24.d +.inst 0x05f866cd //zip2 z13.d,z22.d,z24.d +.if mixin == 1 + eor x13,x13,x14 +.endif +.if mixin == 1 + eor x15,x15,x16 +.endif +.if mixin == 1 + eor x17,x17,x18 +.endif +.inst 0x05a66051 //zip1 z17.s,z2.s,z6.s +.inst 0x05a66452 //zip2 z18.s,z2.s,z6.s +.inst 0x05ae6153 //zip1 z19.s,z10.s,z14.s +.inst 0x05ae6554 //zip2 z20.s,z10.s,z14.s + +.inst 0x05a76075 //zip1 z21.s,z3.s,z7.s +.inst 0x05a76476 //zip2 z22.s,z3.s,z7.s +.inst 0x05af6177 //zip1 z23.s,z11.s,z15.s +.inst 0x05af6578 //zip2 z24.s,z11.s,z15.s + +.inst 0x05f36222 //zip1 z2.d,z17.d,z19.d +.inst 0x05f36626 //zip2 z6.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664e //zip2 z14.d,z18.d,z20.d + +.inst 0x05f762a3 //zip1 z3.d,z21.d,z23.d +.inst 0x05f766a7 //zip2 z7.d,z21.d,z23.d +.inst 0x05f862cb //zip1 z11.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x19,x19,x20 +.endif +.if mixin == 1 + eor x21,x21,x22 +.endif + ld1 {v17.4s,v18.4s,v19.4s,v20.4s},[x1],#64 + ld1 {v21.4s,v22.4s,v23.4s,v24.4s},[x1],#64 +.inst 0x04b13000 //eor z0.d,z0.d,z17.d +.inst 0x04b23021 //eor z1.d,z1.d,z18.d +.inst 0x04b33042 //eor z2.d,z2.d,z19.d +.inst 0x04b43063 //eor z3.d,z3.d,z20.d +.inst 0x04b53084 //eor z4.d,z4.d,z21.d +.inst 0x04b630a5 //eor z5.d,z5.d,z22.d +.inst 0x04b730c6 //eor z6.d,z6.d,z23.d +.inst 0x04b830e7 //eor z7.d,z7.d,z24.d + ld1 {v17.4s,v18.4s,v19.4s,v20.4s},[x1],#64 + ld1 {v21.4s,v22.4s,v23.4s,v24.4s},[x1],#64 +.if mixin == 1 + stp x7,x9,[x0],#16 +.endif +.inst 0x04b13108 //eor z8.d,z8.d,z17.d +.inst 0x04b23129 //eor z9.d,z9.d,z18.d +.if mixin == 1 + stp x11,x13,[x0],#16 +.endif +.inst 0x04b3314a //eor z10.d,z10.d,z19.d +.inst 0x04b4316b //eor z11.d,z11.d,z20.d +.if mixin == 1 + stp x15,x17,[x0],#16 +.endif +.inst 0x04b5318c //eor z12.d,z12.d,z21.d +.inst 0x04b631ad //eor z13.d,z13.d,z22.d +.if mixin == 1 + stp x19,x21,[x0],#16 +.endif +.inst 0x04b731ce //eor z14.d,z14.d,z23.d +.inst 0x04b831ef //eor z15.d,z15.d,z24.d + st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x0],#64 + st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 + st1 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 + st1 {v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64 + b 210f +200: +.inst 0x05a16011 //zip1 z17.s,z0.s,z1.s +.inst 0x05a16412 //zip2 z18.s,z0.s,z1.s +.inst 0x05a36053 //zip1 z19.s,z2.s,z3.s +.inst 0x05a36454 //zip2 z20.s,z2.s,z3.s + +.inst 0x05a56095 //zip1 z21.s,z4.s,z5.s +.inst 0x05a56496 //zip2 z22.s,z4.s,z5.s +.inst 0x05a760d7 //zip1 z23.s,z6.s,z7.s +.inst 0x05a764d8 //zip2 z24.s,z6.s,z7.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36621 //zip2 z1.d,z17.d,z19.d +.inst 0x05f46242 //zip1 z2.d,z18.d,z20.d +.inst 0x05f46643 //zip2 z3.d,z18.d,z20.d + +.inst 0x05f762a4 //zip1 z4.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c6 //zip1 z6.d,z22.d,z24.d +.inst 0x05f866c7 //zip2 z7.d,z22.d,z24.d +.if mixin == 1 + eor x7,x7,x8 +.endif +.if mixin == 1 + eor x9,x9,x10 +.endif +.inst 0x05a96111 //zip1 z17.s,z8.s,z9.s +.inst 0x05a96512 //zip2 z18.s,z8.s,z9.s +.inst 0x05ab6153 //zip1 z19.s,z10.s,z11.s +.inst 0x05ab6554 //zip2 z20.s,z10.s,z11.s + +.inst 0x05ad6195 //zip1 z21.s,z12.s,z13.s +.inst 0x05ad6596 //zip2 z22.s,z12.s,z13.s +.inst 0x05af61d7 //zip1 z23.s,z14.s,z15.s +.inst 0x05af65d8 //zip2 z24.s,z14.s,z15.s + +.inst 0x05f36228 //zip1 z8.d,z17.d,z19.d +.inst 0x05f36629 //zip2 z9.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664b //zip2 z11.d,z18.d,z20.d + +.inst 0x05f762ac //zip1 z12.d,z21.d,z23.d +.inst 0x05f766ad //zip2 z13.d,z21.d,z23.d +.inst 0x05f862ce //zip1 z14.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x11,x11,x12 +.endif +.if mixin == 1 + eor x13,x13,x14 +.endif +.inst 0x05a46011 //zip1 z17.s,z0.s,z4.s +.inst 0x05a46412 //zip2 z18.s,z0.s,z4.s +.inst 0x05ac6113 //zip1 z19.s,z8.s,z12.s +.inst 0x05ac6514 //zip2 z20.s,z8.s,z12.s + +.inst 0x05a56035 //zip1 z21.s,z1.s,z5.s +.inst 0x05a56436 //zip2 z22.s,z1.s,z5.s +.inst 0x05ad6137 //zip1 z23.s,z9.s,z13.s +.inst 0x05ad6538 //zip2 z24.s,z9.s,z13.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36624 //zip2 z4.d,z17.d,z19.d +.inst 0x05f46248 //zip1 z8.d,z18.d,z20.d +.inst 0x05f4664c //zip2 z12.d,z18.d,z20.d + +.inst 0x05f762a1 //zip1 z1.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c9 //zip1 z9.d,z22.d,z24.d +.inst 0x05f866cd //zip2 z13.d,z22.d,z24.d +.if mixin == 1 + eor x15,x15,x16 +.endif +.if mixin == 1 + eor x17,x17,x18 +.endif +.inst 0x05a66051 //zip1 z17.s,z2.s,z6.s +.inst 0x05a66452 //zip2 z18.s,z2.s,z6.s +.inst 0x05ae6153 //zip1 z19.s,z10.s,z14.s +.inst 0x05ae6554 //zip2 z20.s,z10.s,z14.s + +.inst 0x05a76075 //zip1 z21.s,z3.s,z7.s +.inst 0x05a76476 //zip2 z22.s,z3.s,z7.s +.inst 0x05af6177 //zip1 z23.s,z11.s,z15.s +.inst 0x05af6578 //zip2 z24.s,z11.s,z15.s + +.inst 0x05f36222 //zip1 z2.d,z17.d,z19.d +.inst 0x05f36626 //zip2 z6.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664e //zip2 z14.d,z18.d,z20.d + +.inst 0x05f762a3 //zip1 z3.d,z21.d,z23.d +.inst 0x05f766a7 //zip2 z7.d,z21.d,z23.d +.inst 0x05f862cb //zip1 z11.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x19,x19,x20 +.endif +.if mixin == 1 + eor x21,x21,x22 +.endif +.inst 0xa540a031 //ld1w {z17.s},p0/z,[x1,#0,MUL VL] +.inst 0xa541a032 //ld1w {z18.s},p0/z,[x1,#1,MUL VL] +.inst 0xa542a033 //ld1w {z19.s},p0/z,[x1,#2,MUL VL] +.inst 0xa543a034 //ld1w {z20.s},p0/z,[x1,#3,MUL VL] +.inst 0xa544a035 //ld1w {z21.s},p0/z,[x1,#4,MUL VL] +.inst 0xa545a036 //ld1w {z22.s},p0/z,[x1,#5,MUL VL] +.inst 0xa546a037 //ld1w {z23.s},p0/z,[x1,#6,MUL VL] +.inst 0xa547a038 //ld1w {z24.s},p0/z,[x1,#7,MUL VL] +.inst 0x04215101 //addvl x1,x1,8 +.inst 0x04b13000 //eor z0.d,z0.d,z17.d +.inst 0x04b23084 //eor z4.d,z4.d,z18.d +.inst 0x04b33108 //eor z8.d,z8.d,z19.d +.inst 0x04b4318c //eor z12.d,z12.d,z20.d +.inst 0x04b53021 //eor z1.d,z1.d,z21.d +.inst 0x04b630a5 //eor z5.d,z5.d,z22.d +.inst 0x04b73129 //eor z9.d,z9.d,z23.d +.inst 0x04b831ad //eor z13.d,z13.d,z24.d +.inst 0xa540a031 //ld1w {z17.s},p0/z,[x1,#0,MUL VL] +.inst 0xa541a032 //ld1w {z18.s},p0/z,[x1,#1,MUL VL] +.inst 0xa542a033 //ld1w {z19.s},p0/z,[x1,#2,MUL VL] +.inst 0xa543a034 //ld1w {z20.s},p0/z,[x1,#3,MUL VL] +.inst 0xa544a035 //ld1w {z21.s},p0/z,[x1,#4,MUL VL] +.inst 0xa545a036 //ld1w {z22.s},p0/z,[x1,#5,MUL VL] +.inst 0xa546a037 //ld1w {z23.s},p0/z,[x1,#6,MUL VL] +.inst 0xa547a038 //ld1w {z24.s},p0/z,[x1,#7,MUL VL] +.inst 0x04215101 //addvl x1,x1,8 +.if mixin == 1 + stp x7,x9,[x0],#16 +.endif +.inst 0x04b13042 //eor z2.d,z2.d,z17.d +.inst 0x04b230c6 //eor z6.d,z6.d,z18.d +.if mixin == 1 + stp x11,x13,[x0],#16 +.endif +.inst 0x04b3314a //eor z10.d,z10.d,z19.d +.inst 0x04b431ce //eor z14.d,z14.d,z20.d +.if mixin == 1 + stp x15,x17,[x0],#16 +.endif +.inst 0x04b53063 //eor z3.d,z3.d,z21.d +.inst 0x04b630e7 //eor z7.d,z7.d,z22.d +.if mixin == 1 + stp x19,x21,[x0],#16 +.endif +.inst 0x04b7316b //eor z11.d,z11.d,z23.d +.inst 0x04b831ef //eor z15.d,z15.d,z24.d +.inst 0xe540e000 //st1w {z0.s},p0,[x0,#0,MUL VL] +.inst 0xe541e004 //st1w {z4.s},p0,[x0,#1,MUL VL] +.inst 0xe542e008 //st1w {z8.s},p0,[x0,#2,MUL VL] +.inst 0xe543e00c //st1w {z12.s},p0,[x0,#3,MUL VL] +.inst 0xe544e001 //st1w {z1.s},p0,[x0,#4,MUL VL] +.inst 0xe545e005 //st1w {z5.s},p0,[x0,#5,MUL VL] +.inst 0xe546e009 //st1w {z9.s},p0,[x0,#6,MUL VL] +.inst 0xe547e00d //st1w {z13.s},p0,[x0,#7,MUL VL] +.inst 0x04205100 //addvl x0,x0,8 +.inst 0xe540e002 //st1w {z2.s},p0,[x0,#0,MUL VL] +.inst 0xe541e006 //st1w {z6.s},p0,[x0,#1,MUL VL] +.inst 0xe542e00a //st1w {z10.s},p0,[x0,#2,MUL VL] +.inst 0xe543e00e //st1w {z14.s},p0,[x0,#3,MUL VL] +.inst 0xe544e003 //st1w {z3.s},p0,[x0,#4,MUL VL] +.inst 0xe545e007 //st1w {z7.s},p0,[x0,#5,MUL VL] +.inst 0xe546e00b //st1w {z11.s},p0,[x0,#6,MUL VL] +.inst 0xe547e00f //st1w {z15.s},p0,[x0,#7,MUL VL] +.inst 0x04205100 //addvl x0,x0,8 +210: +.inst 0x04b0e3fd //incw x29, ALL, MUL #1 +110: + b 2f +1: +.align 5 +100: + subs x7,x2,x5,lsl #6 + b.lt 110f + mov x2,x7 + b.eq 101f + cmp x2,64 + b.lt 101f + mixin=1 + lsr x8,x23,#32 +.inst 0x05a03ae0 //dup z0.s,w23 +.inst 0x05a03af9 //dup z25.s,w23 +.if mixin == 1 + mov w7,w23 +.endif +.inst 0x05a03904 //dup z4.s,w8 +.inst 0x05a0391a //dup z26.s,w8 + lsr x10,x24,#32 +.inst 0x05a03b08 //dup z8.s,w24 +.inst 0x05a03b1b //dup z27.s,w24 +.if mixin == 1 + mov w9,w24 +.endif +.inst 0x05a0394c //dup z12.s,w10 +.inst 0x05a0395c //dup z28.s,w10 + lsr x12,x25,#32 +.inst 0x05a03b21 //dup z1.s,w25 +.inst 0x05a03b3d //dup z29.s,w25 +.if mixin == 1 + mov w11,w25 +.endif +.inst 0x05a03985 //dup z5.s,w12 +.inst 0x05a0399e //dup z30.s,w12 + lsr x14,x26,#32 +.inst 0x05a03b49 //dup z9.s,w26 +.inst 0x05a03b55 //dup z21.s,w26 +.if mixin == 1 + mov w13,w26 +.endif +.inst 0x05a039cd //dup z13.s,w14 +.inst 0x05a039d6 //dup z22.s,w14 + lsr x16,x27,#32 +.inst 0x05a03b62 //dup z2.s,w27 +.inst 0x05a03b77 //dup z23.s,w27 +.if mixin == 1 + mov w15,w27 +.endif +.inst 0x05a03a06 //dup z6.s,w16 +.inst 0x05a03a18 //dup z24.s,w16 + lsr x18,x28,#32 +.inst 0x05a03b8a //dup z10.s,w28 +.if mixin == 1 + mov w17,w28 +.endif +.inst 0x05a03a4e //dup z14.s,w18 + lsr x22,x30,#32 +.inst 0x05a03bcb //dup z11.s,w30 +.if mixin == 1 + mov w21,w30 +.endif +.inst 0x05a03acf //dup z15.s,w22 +.if mixin == 1 + add w20,w29,#1 + mov w19,w29 +.inst 0x04a14690 //index z16.s,w20,1 +.inst 0x04a14683 //index z3.s,w20,1 +.else +.inst 0x04a147b0 //index z16.s,w29,1 +.inst 0x04a147a3 //index z3.s,w29,1 +.endif + lsr x20,x29,#32 +.inst 0x05a03a87 //dup z7.s,w20 + mov x6,#10 +10: +.align 5 +.inst 0x04a10000 //add z0.s,z0.s,z1.s +.if mixin == 1 + add w7,w7,w11 +.endif +.inst 0x04a50084 //add z4.s,z4.s,z5.s +.if mixin == 1 + add w8,w8,w12 +.endif +.inst 0x04a90108 //add z8.s,z8.s,z9.s +.if mixin == 1 + add w9,w9,w13 +.endif +.inst 0x04ad018c //add z12.s,z12.s,z13.s +.if mixin == 1 + add w10,w10,w14 +.endif +.inst 0x04a03063 //eor z3.d,z3.d,z0.d +.if mixin == 1 + eor w19,w19,w7 +.endif +.inst 0x04a430e7 //eor z7.d,z7.d,z4.d +.if mixin == 1 + eor w20,w20,w8 +.endif +.inst 0x04a8316b //eor z11.d,z11.d,z8.d +.if mixin == 1 + eor w21,w21,w9 +.endif +.inst 0x04ac31ef //eor z15.d,z15.d,z12.d +.if mixin == 1 + eor w22,w22,w10 +.endif +.inst 0x05a58063 //revh z3.s,p0/m,z3.s +.if mixin == 1 + ror w19,w19,#16 +.endif +.inst 0x05a580e7 //revh z7.s,p0/m,z7.s +.if mixin == 1 + ror w20,w20,#16 +.endif +.inst 0x05a5816b //revh z11.s,p0/m,z11.s +.if mixin == 1 + ror w21,w21,#16 +.endif +.inst 0x05a581ef //revh z15.s,p0/m,z15.s +.if mixin == 1 + ror w22,w22,#16 +.endif +.inst 0x04a30042 //add z2.s,z2.s,z3.s +.if mixin == 1 + add w15,w15,w19 +.endif +.inst 0x04a700c6 //add z6.s,z6.s,z7.s +.if mixin == 1 + add w16,w16,w20 +.endif +.inst 0x04ab014a //add z10.s,z10.s,z11.s +.if mixin == 1 + add w17,w17,w21 +.endif +.inst 0x04af01ce //add z14.s,z14.s,z15.s +.if mixin == 1 + add w18,w18,w22 +.endif +.inst 0x04a23021 //eor z1.d,z1.d,z2.d +.if mixin == 1 + eor w11,w11,w15 +.endif +.inst 0x04a630a5 //eor z5.d,z5.d,z6.d +.if mixin == 1 + eor w12,w12,w16 +.endif +.inst 0x04aa3129 //eor z9.d,z9.d,z10.d +.if mixin == 1 + eor w13,w13,w17 +.endif +.inst 0x04ae31ad //eor z13.d,z13.d,z14.d +.if mixin == 1 + eor w14,w14,w18 +.endif +.inst 0x046c9c31 //lsl z17.s,z1.s,12 +.inst 0x046c9cb2 //lsl z18.s,z5.s,12 +.inst 0x046c9d33 //lsl z19.s,z9.s,12 +.inst 0x046c9db4 //lsl z20.s,z13.s,12 +.inst 0x046c9421 //lsr z1.s,z1.s,20 +.if mixin == 1 + ror w11,w11,20 +.endif +.inst 0x046c94a5 //lsr z5.s,z5.s,20 +.if mixin == 1 + ror w12,w12,20 +.endif +.inst 0x046c9529 //lsr z9.s,z9.s,20 +.if mixin == 1 + ror w13,w13,20 +.endif +.inst 0x046c95ad //lsr z13.s,z13.s,20 +.if mixin == 1 + ror w14,w14,20 +.endif +.inst 0x04713021 //orr z1.d,z1.d,z17.d +.inst 0x047230a5 //orr z5.d,z5.d,z18.d +.inst 0x04733129 //orr z9.d,z9.d,z19.d +.inst 0x047431ad //orr z13.d,z13.d,z20.d +.inst 0x04a10000 //add z0.s,z0.s,z1.s +.if mixin == 1 + add w7,w7,w11 +.endif +.inst 0x04a50084 //add z4.s,z4.s,z5.s +.if mixin == 1 + add w8,w8,w12 +.endif +.inst 0x04a90108 //add z8.s,z8.s,z9.s +.if mixin == 1 + add w9,w9,w13 +.endif +.inst 0x04ad018c //add z12.s,z12.s,z13.s +.if mixin == 1 + add w10,w10,w14 +.endif +.inst 0x04a03063 //eor z3.d,z3.d,z0.d +.if mixin == 1 + eor w19,w19,w7 +.endif +.inst 0x04a430e7 //eor z7.d,z7.d,z4.d +.if mixin == 1 + eor w20,w20,w8 +.endif +.inst 0x04a8316b //eor z11.d,z11.d,z8.d +.if mixin == 1 + eor w21,w21,w9 +.endif +.inst 0x04ac31ef //eor z15.d,z15.d,z12.d +.if mixin == 1 + eor w22,w22,w10 +.endif +.inst 0x053f3063 //tbl z3.b,{z3.b},z31.b +.if mixin == 1 + ror w19,w19,#24 +.endif +.inst 0x053f30e7 //tbl z7.b,{z7.b},z31.b +.if mixin == 1 + ror w20,w20,#24 +.endif +.inst 0x053f316b //tbl z11.b,{z11.b},z31.b +.if mixin == 1 + ror w21,w21,#24 +.endif +.inst 0x053f31ef //tbl z15.b,{z15.b},z31.b +.if mixin == 1 + ror w22,w22,#24 +.endif +.inst 0x04a30042 //add z2.s,z2.s,z3.s +.if mixin == 1 + add w15,w15,w19 +.endif +.inst 0x04a700c6 //add z6.s,z6.s,z7.s +.if mixin == 1 + add w16,w16,w20 +.endif +.inst 0x04ab014a //add z10.s,z10.s,z11.s +.if mixin == 1 + add w17,w17,w21 +.endif +.inst 0x04af01ce //add z14.s,z14.s,z15.s +.if mixin == 1 + add w18,w18,w22 +.endif +.inst 0x04a23021 //eor z1.d,z1.d,z2.d +.if mixin == 1 + eor w11,w11,w15 +.endif +.inst 0x04a630a5 //eor z5.d,z5.d,z6.d +.if mixin == 1 + eor w12,w12,w16 +.endif +.inst 0x04aa3129 //eor z9.d,z9.d,z10.d +.if mixin == 1 + eor w13,w13,w17 +.endif +.inst 0x04ae31ad //eor z13.d,z13.d,z14.d +.if mixin == 1 + eor w14,w14,w18 +.endif +.inst 0x04679c31 //lsl z17.s,z1.s,7 +.inst 0x04679cb2 //lsl z18.s,z5.s,7 +.inst 0x04679d33 //lsl z19.s,z9.s,7 +.inst 0x04679db4 //lsl z20.s,z13.s,7 +.inst 0x04679421 //lsr z1.s,z1.s,25 +.if mixin == 1 + ror w11,w11,25 +.endif +.inst 0x046794a5 //lsr z5.s,z5.s,25 +.if mixin == 1 + ror w12,w12,25 +.endif +.inst 0x04679529 //lsr z9.s,z9.s,25 +.if mixin == 1 + ror w13,w13,25 +.endif +.inst 0x046795ad //lsr z13.s,z13.s,25 +.if mixin == 1 + ror w14,w14,25 +.endif +.inst 0x04713021 //orr z1.d,z1.d,z17.d +.inst 0x047230a5 //orr z5.d,z5.d,z18.d +.inst 0x04733129 //orr z9.d,z9.d,z19.d +.inst 0x047431ad //orr z13.d,z13.d,z20.d +.inst 0x04a50000 //add z0.s,z0.s,z5.s +.if mixin == 1 + add w7,w7,w12 +.endif +.inst 0x04a90084 //add z4.s,z4.s,z9.s +.if mixin == 1 + add w8,w8,w13 +.endif +.inst 0x04ad0108 //add z8.s,z8.s,z13.s +.if mixin == 1 + add w9,w9,w14 +.endif +.inst 0x04a1018c //add z12.s,z12.s,z1.s +.if mixin == 1 + add w10,w10,w11 +.endif +.inst 0x04a031ef //eor z15.d,z15.d,z0.d +.if mixin == 1 + eor w22,w22,w7 +.endif +.inst 0x04a43063 //eor z3.d,z3.d,z4.d +.if mixin == 1 + eor w19,w19,w8 +.endif +.inst 0x04a830e7 //eor z7.d,z7.d,z8.d +.if mixin == 1 + eor w20,w20,w9 +.endif +.inst 0x04ac316b //eor z11.d,z11.d,z12.d +.if mixin == 1 + eor w21,w21,w10 +.endif +.inst 0x05a581ef //revh z15.s,p0/m,z15.s +.if mixin == 1 + ror w22,w22,#16 +.endif +.inst 0x05a58063 //revh z3.s,p0/m,z3.s +.if mixin == 1 + ror w19,w19,#16 +.endif +.inst 0x05a580e7 //revh z7.s,p0/m,z7.s +.if mixin == 1 + ror w20,w20,#16 +.endif +.inst 0x05a5816b //revh z11.s,p0/m,z11.s +.if mixin == 1 + ror w21,w21,#16 +.endif +.inst 0x04af014a //add z10.s,z10.s,z15.s +.if mixin == 1 + add w17,w17,w22 +.endif +.inst 0x04a301ce //add z14.s,z14.s,z3.s +.if mixin == 1 + add w18,w18,w19 +.endif +.inst 0x04a70042 //add z2.s,z2.s,z7.s +.if mixin == 1 + add w15,w15,w20 +.endif +.inst 0x04ab00c6 //add z6.s,z6.s,z11.s +.if mixin == 1 + add w16,w16,w21 +.endif +.inst 0x04aa30a5 //eor z5.d,z5.d,z10.d +.if mixin == 1 + eor w12,w12,w17 +.endif +.inst 0x04ae3129 //eor z9.d,z9.d,z14.d +.if mixin == 1 + eor w13,w13,w18 +.endif +.inst 0x04a231ad //eor z13.d,z13.d,z2.d +.if mixin == 1 + eor w14,w14,w15 +.endif +.inst 0x04a63021 //eor z1.d,z1.d,z6.d +.if mixin == 1 + eor w11,w11,w16 +.endif +.inst 0x046c9cb1 //lsl z17.s,z5.s,12 +.inst 0x046c9d32 //lsl z18.s,z9.s,12 +.inst 0x046c9db3 //lsl z19.s,z13.s,12 +.inst 0x046c9c34 //lsl z20.s,z1.s,12 +.inst 0x046c94a5 //lsr z5.s,z5.s,20 +.if mixin == 1 + ror w12,w12,20 +.endif +.inst 0x046c9529 //lsr z9.s,z9.s,20 +.if mixin == 1 + ror w13,w13,20 +.endif +.inst 0x046c95ad //lsr z13.s,z13.s,20 +.if mixin == 1 + ror w14,w14,20 +.endif +.inst 0x046c9421 //lsr z1.s,z1.s,20 +.if mixin == 1 + ror w11,w11,20 +.endif +.inst 0x047130a5 //orr z5.d,z5.d,z17.d +.inst 0x04723129 //orr z9.d,z9.d,z18.d +.inst 0x047331ad //orr z13.d,z13.d,z19.d +.inst 0x04743021 //orr z1.d,z1.d,z20.d +.inst 0x04a50000 //add z0.s,z0.s,z5.s +.if mixin == 1 + add w7,w7,w12 +.endif +.inst 0x04a90084 //add z4.s,z4.s,z9.s +.if mixin == 1 + add w8,w8,w13 +.endif +.inst 0x04ad0108 //add z8.s,z8.s,z13.s +.if mixin == 1 + add w9,w9,w14 +.endif +.inst 0x04a1018c //add z12.s,z12.s,z1.s +.if mixin == 1 + add w10,w10,w11 +.endif +.inst 0x04a031ef //eor z15.d,z15.d,z0.d +.if mixin == 1 + eor w22,w22,w7 +.endif +.inst 0x04a43063 //eor z3.d,z3.d,z4.d +.if mixin == 1 + eor w19,w19,w8 +.endif +.inst 0x04a830e7 //eor z7.d,z7.d,z8.d +.if mixin == 1 + eor w20,w20,w9 +.endif +.inst 0x04ac316b //eor z11.d,z11.d,z12.d +.if mixin == 1 + eor w21,w21,w10 +.endif +.inst 0x053f31ef //tbl z15.b,{z15.b},z31.b +.if mixin == 1 + ror w22,w22,#24 +.endif +.inst 0x053f3063 //tbl z3.b,{z3.b},z31.b +.if mixin == 1 + ror w19,w19,#24 +.endif +.inst 0x053f30e7 //tbl z7.b,{z7.b},z31.b +.if mixin == 1 + ror w20,w20,#24 +.endif +.inst 0x053f316b //tbl z11.b,{z11.b},z31.b +.if mixin == 1 + ror w21,w21,#24 +.endif +.inst 0x04af014a //add z10.s,z10.s,z15.s +.if mixin == 1 + add w17,w17,w22 +.endif +.inst 0x04a301ce //add z14.s,z14.s,z3.s +.if mixin == 1 + add w18,w18,w19 +.endif +.inst 0x04a70042 //add z2.s,z2.s,z7.s +.if mixin == 1 + add w15,w15,w20 +.endif +.inst 0x04ab00c6 //add z6.s,z6.s,z11.s +.if mixin == 1 + add w16,w16,w21 +.endif +.inst 0x04aa30a5 //eor z5.d,z5.d,z10.d +.if mixin == 1 + eor w12,w12,w17 +.endif +.inst 0x04ae3129 //eor z9.d,z9.d,z14.d +.if mixin == 1 + eor w13,w13,w18 +.endif +.inst 0x04a231ad //eor z13.d,z13.d,z2.d +.if mixin == 1 + eor w14,w14,w15 +.endif +.inst 0x04a63021 //eor z1.d,z1.d,z6.d +.if mixin == 1 + eor w11,w11,w16 +.endif +.inst 0x04679cb1 //lsl z17.s,z5.s,7 +.inst 0x04679d32 //lsl z18.s,z9.s,7 +.inst 0x04679db3 //lsl z19.s,z13.s,7 +.inst 0x04679c34 //lsl z20.s,z1.s,7 +.inst 0x046794a5 //lsr z5.s,z5.s,25 +.if mixin == 1 + ror w12,w12,25 +.endif +.inst 0x04679529 //lsr z9.s,z9.s,25 +.if mixin == 1 + ror w13,w13,25 +.endif +.inst 0x046795ad //lsr z13.s,z13.s,25 +.if mixin == 1 + ror w14,w14,25 +.endif +.inst 0x04679421 //lsr z1.s,z1.s,25 +.if mixin == 1 + ror w11,w11,25 +.endif +.inst 0x047130a5 //orr z5.d,z5.d,z17.d +.inst 0x04723129 //orr z9.d,z9.d,z18.d +.inst 0x047331ad //orr z13.d,z13.d,z19.d +.inst 0x04743021 //orr z1.d,z1.d,z20.d + sub x6,x6,1 + cbnz x6,10b + lsr x6,x28,#32 +.inst 0x05a03b91 //dup z17.s,w28 +.inst 0x05a038d2 //dup z18.s,w6 + lsr x6,x29,#32 +.inst 0x05a038d3 //dup z19.s,w6 + lsr x6,x30,#32 +.if mixin == 1 + add w7,w7,w23 +.endif +.inst 0x04b90000 //add z0.s,z0.s,z25.s +.if mixin == 1 + add x8,x8,x23,lsr #32 +.endif +.inst 0x04ba0084 //add z4.s,z4.s,z26.s +.if mixin == 1 + add x7,x7,x8,lsl #32 // pack +.endif +.if mixin == 1 + add w9,w9,w24 +.endif +.inst 0x04bb0108 //add z8.s,z8.s,z27.s +.if mixin == 1 + add x10,x10,x24,lsr #32 +.endif +.inst 0x04bc018c //add z12.s,z12.s,z28.s +.if mixin == 1 + add x9,x9,x10,lsl #32 // pack +.endif +.if mixin == 1 + ldp x8,x10,[x1],#16 +.endif +.if mixin == 1 + add w11,w11,w25 +.endif +.inst 0x04bd0021 //add z1.s,z1.s,z29.s +.if mixin == 1 + add x12,x12,x25,lsr #32 +.endif +.inst 0x04be00a5 //add z5.s,z5.s,z30.s +.if mixin == 1 + add x11,x11,x12,lsl #32 // pack +.endif +.if mixin == 1 + add w13,w13,w26 +.endif +.inst 0x04b50129 //add z9.s,z9.s,z21.s +.if mixin == 1 + add x14,x14,x26,lsr #32 +.endif +.inst 0x04b601ad //add z13.s,z13.s,z22.s +.if mixin == 1 + add x13,x13,x14,lsl #32 // pack +.endif +.if mixin == 1 + ldp x12,x14,[x1],#16 +.endif +.if mixin == 1 + add w15,w15,w27 +.endif +.inst 0x04b70042 //add z2.s,z2.s,z23.s +.if mixin == 1 + add x16,x16,x27,lsr #32 +.endif +.inst 0x04b800c6 //add z6.s,z6.s,z24.s +.if mixin == 1 + add x15,x15,x16,lsl #32 // pack +.endif +.if mixin == 1 + add w17,w17,w28 +.endif +.inst 0x04b1014a //add z10.s,z10.s,z17.s +.if mixin == 1 + add x18,x18,x28,lsr #32 +.endif +.inst 0x04b201ce //add z14.s,z14.s,z18.s +.if mixin == 1 + add x17,x17,x18,lsl #32 // pack +.endif +.if mixin == 1 + ldp x16,x18,[x1],#16 +.endif +.inst 0x05a03bd4 //dup z20.s,w30 +.inst 0x05a038d9 //dup z25.s,w6 // bak[15] not available for SVE +.if mixin == 1 + add w19,w19,w29 +.endif +.inst 0x04b00063 //add z3.s,z3.s,z16.s +.if mixin == 1 + add x20,x20,x29,lsr #32 +.endif +.inst 0x04b300e7 //add z7.s,z7.s,z19.s +.if mixin == 1 + add x19,x19,x20,lsl #32 // pack +.endif +.if mixin == 1 + add w21,w21,w30 +.endif +.inst 0x04b4016b //add z11.s,z11.s,z20.s +.if mixin == 1 + add x22,x22,x30,lsr #32 +.endif +.inst 0x04b901ef //add z15.s,z15.s,z25.s +.if mixin == 1 + add x21,x21,x22,lsl #32 // pack +.endif +.if mixin == 1 + ldp x20,x22,[x1],#16 +.endif +#ifdef __AARCH64EB__ + rev x7,x7 +.inst 0x05a48000 //revb z0.s,p0/m,z0.s +.inst 0x05a48084 //revb z4.s,p0/m,z4.s + rev x9,x9 +.inst 0x05a48108 //revb z8.s,p0/m,z8.s +.inst 0x05a4818c //revb z12.s,p0/m,z12.s + rev x11,x11 +.inst 0x05a48021 //revb z1.s,p0/m,z1.s +.inst 0x05a480a5 //revb z5.s,p0/m,z5.s + rev x13,x13 +.inst 0x05a48129 //revb z9.s,p0/m,z9.s +.inst 0x05a481ad //revb z13.s,p0/m,z13.s + rev x15,x15 +.inst 0x05a48042 //revb z2.s,p0/m,z2.s +.inst 0x05a480c6 //revb z6.s,p0/m,z6.s + rev x17,x17 +.inst 0x05a4814a //revb z10.s,p0/m,z10.s +.inst 0x05a481ce //revb z14.s,p0/m,z14.s + rev x19,x19 +.inst 0x05a48063 //revb z3.s,p0/m,z3.s +.inst 0x05a480e7 //revb z7.s,p0/m,z7.s + rev x21,x21 +.inst 0x05a4816b //revb z11.s,p0/m,z11.s +.inst 0x05a481ef //revb z15.s,p0/m,z15.s +#endif +.if mixin == 1 + add x29,x29,#1 +.endif + cmp x5,4 + b.ne 200f +.if mixin == 1 + eor x7,x7,x8 +.endif +.if mixin == 1 + eor x9,x9,x10 +.endif +.if mixin == 1 + eor x11,x11,x12 +.endif +.inst 0x05a46011 //zip1 z17.s,z0.s,z4.s +.inst 0x05a46412 //zip2 z18.s,z0.s,z4.s +.inst 0x05ac6113 //zip1 z19.s,z8.s,z12.s +.inst 0x05ac6514 //zip2 z20.s,z8.s,z12.s + +.inst 0x05a56035 //zip1 z21.s,z1.s,z5.s +.inst 0x05a56436 //zip2 z22.s,z1.s,z5.s +.inst 0x05ad6137 //zip1 z23.s,z9.s,z13.s +.inst 0x05ad6538 //zip2 z24.s,z9.s,z13.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36624 //zip2 z4.d,z17.d,z19.d +.inst 0x05f46248 //zip1 z8.d,z18.d,z20.d +.inst 0x05f4664c //zip2 z12.d,z18.d,z20.d + +.inst 0x05f762a1 //zip1 z1.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c9 //zip1 z9.d,z22.d,z24.d +.inst 0x05f866cd //zip2 z13.d,z22.d,z24.d +.if mixin == 1 + eor x13,x13,x14 +.endif +.if mixin == 1 + eor x15,x15,x16 +.endif +.if mixin == 1 + eor x17,x17,x18 +.endif +.inst 0x05a66051 //zip1 z17.s,z2.s,z6.s +.inst 0x05a66452 //zip2 z18.s,z2.s,z6.s +.inst 0x05ae6153 //zip1 z19.s,z10.s,z14.s +.inst 0x05ae6554 //zip2 z20.s,z10.s,z14.s + +.inst 0x05a76075 //zip1 z21.s,z3.s,z7.s +.inst 0x05a76476 //zip2 z22.s,z3.s,z7.s +.inst 0x05af6177 //zip1 z23.s,z11.s,z15.s +.inst 0x05af6578 //zip2 z24.s,z11.s,z15.s + +.inst 0x05f36222 //zip1 z2.d,z17.d,z19.d +.inst 0x05f36626 //zip2 z6.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664e //zip2 z14.d,z18.d,z20.d + +.inst 0x05f762a3 //zip1 z3.d,z21.d,z23.d +.inst 0x05f766a7 //zip2 z7.d,z21.d,z23.d +.inst 0x05f862cb //zip1 z11.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x19,x19,x20 +.endif +.if mixin == 1 + eor x21,x21,x22 +.endif + ld1 {v17.4s,v18.4s,v19.4s,v20.4s},[x1],#64 + ld1 {v21.4s,v22.4s,v23.4s,v24.4s},[x1],#64 +.inst 0x04b13000 //eor z0.d,z0.d,z17.d +.inst 0x04b23021 //eor z1.d,z1.d,z18.d +.inst 0x04b33042 //eor z2.d,z2.d,z19.d +.inst 0x04b43063 //eor z3.d,z3.d,z20.d +.inst 0x04b53084 //eor z4.d,z4.d,z21.d +.inst 0x04b630a5 //eor z5.d,z5.d,z22.d +.inst 0x04b730c6 //eor z6.d,z6.d,z23.d +.inst 0x04b830e7 //eor z7.d,z7.d,z24.d + ld1 {v17.4s,v18.4s,v19.4s,v20.4s},[x1],#64 + ld1 {v21.4s,v22.4s,v23.4s,v24.4s},[x1],#64 +.if mixin == 1 + stp x7,x9,[x0],#16 +.endif +.inst 0x04b13108 //eor z8.d,z8.d,z17.d +.inst 0x04b23129 //eor z9.d,z9.d,z18.d +.if mixin == 1 + stp x11,x13,[x0],#16 +.endif +.inst 0x04b3314a //eor z10.d,z10.d,z19.d +.inst 0x04b4316b //eor z11.d,z11.d,z20.d +.if mixin == 1 + stp x15,x17,[x0],#16 +.endif +.inst 0x04b5318c //eor z12.d,z12.d,z21.d +.inst 0x04b631ad //eor z13.d,z13.d,z22.d +.if mixin == 1 + stp x19,x21,[x0],#16 +.endif +.inst 0x04b731ce //eor z14.d,z14.d,z23.d +.inst 0x04b831ef //eor z15.d,z15.d,z24.d + st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x0],#64 + st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 + st1 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 + st1 {v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64 + b 210f +200: +.inst 0x05a16011 //zip1 z17.s,z0.s,z1.s +.inst 0x05a16412 //zip2 z18.s,z0.s,z1.s +.inst 0x05a36053 //zip1 z19.s,z2.s,z3.s +.inst 0x05a36454 //zip2 z20.s,z2.s,z3.s + +.inst 0x05a56095 //zip1 z21.s,z4.s,z5.s +.inst 0x05a56496 //zip2 z22.s,z4.s,z5.s +.inst 0x05a760d7 //zip1 z23.s,z6.s,z7.s +.inst 0x05a764d8 //zip2 z24.s,z6.s,z7.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36621 //zip2 z1.d,z17.d,z19.d +.inst 0x05f46242 //zip1 z2.d,z18.d,z20.d +.inst 0x05f46643 //zip2 z3.d,z18.d,z20.d + +.inst 0x05f762a4 //zip1 z4.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c6 //zip1 z6.d,z22.d,z24.d +.inst 0x05f866c7 //zip2 z7.d,z22.d,z24.d +.if mixin == 1 + eor x7,x7,x8 +.endif +.if mixin == 1 + eor x9,x9,x10 +.endif +.inst 0x05a96111 //zip1 z17.s,z8.s,z9.s +.inst 0x05a96512 //zip2 z18.s,z8.s,z9.s +.inst 0x05ab6153 //zip1 z19.s,z10.s,z11.s +.inst 0x05ab6554 //zip2 z20.s,z10.s,z11.s + +.inst 0x05ad6195 //zip1 z21.s,z12.s,z13.s +.inst 0x05ad6596 //zip2 z22.s,z12.s,z13.s +.inst 0x05af61d7 //zip1 z23.s,z14.s,z15.s +.inst 0x05af65d8 //zip2 z24.s,z14.s,z15.s + +.inst 0x05f36228 //zip1 z8.d,z17.d,z19.d +.inst 0x05f36629 //zip2 z9.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664b //zip2 z11.d,z18.d,z20.d + +.inst 0x05f762ac //zip1 z12.d,z21.d,z23.d +.inst 0x05f766ad //zip2 z13.d,z21.d,z23.d +.inst 0x05f862ce //zip1 z14.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x11,x11,x12 +.endif +.if mixin == 1 + eor x13,x13,x14 +.endif +.inst 0x05a46011 //zip1 z17.s,z0.s,z4.s +.inst 0x05a46412 //zip2 z18.s,z0.s,z4.s +.inst 0x05ac6113 //zip1 z19.s,z8.s,z12.s +.inst 0x05ac6514 //zip2 z20.s,z8.s,z12.s + +.inst 0x05a56035 //zip1 z21.s,z1.s,z5.s +.inst 0x05a56436 //zip2 z22.s,z1.s,z5.s +.inst 0x05ad6137 //zip1 z23.s,z9.s,z13.s +.inst 0x05ad6538 //zip2 z24.s,z9.s,z13.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36624 //zip2 z4.d,z17.d,z19.d +.inst 0x05f46248 //zip1 z8.d,z18.d,z20.d +.inst 0x05f4664c //zip2 z12.d,z18.d,z20.d + +.inst 0x05f762a1 //zip1 z1.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c9 //zip1 z9.d,z22.d,z24.d +.inst 0x05f866cd //zip2 z13.d,z22.d,z24.d +.if mixin == 1 + eor x15,x15,x16 +.endif +.if mixin == 1 + eor x17,x17,x18 +.endif +.inst 0x05a66051 //zip1 z17.s,z2.s,z6.s +.inst 0x05a66452 //zip2 z18.s,z2.s,z6.s +.inst 0x05ae6153 //zip1 z19.s,z10.s,z14.s +.inst 0x05ae6554 //zip2 z20.s,z10.s,z14.s + +.inst 0x05a76075 //zip1 z21.s,z3.s,z7.s +.inst 0x05a76476 //zip2 z22.s,z3.s,z7.s +.inst 0x05af6177 //zip1 z23.s,z11.s,z15.s +.inst 0x05af6578 //zip2 z24.s,z11.s,z15.s + +.inst 0x05f36222 //zip1 z2.d,z17.d,z19.d +.inst 0x05f36626 //zip2 z6.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664e //zip2 z14.d,z18.d,z20.d + +.inst 0x05f762a3 //zip1 z3.d,z21.d,z23.d +.inst 0x05f766a7 //zip2 z7.d,z21.d,z23.d +.inst 0x05f862cb //zip1 z11.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x19,x19,x20 +.endif +.if mixin == 1 + eor x21,x21,x22 +.endif +.inst 0xa540a031 //ld1w {z17.s},p0/z,[x1,#0,MUL VL] +.inst 0xa541a032 //ld1w {z18.s},p0/z,[x1,#1,MUL VL] +.inst 0xa542a033 //ld1w {z19.s},p0/z,[x1,#2,MUL VL] +.inst 0xa543a034 //ld1w {z20.s},p0/z,[x1,#3,MUL VL] +.inst 0xa544a035 //ld1w {z21.s},p0/z,[x1,#4,MUL VL] +.inst 0xa545a036 //ld1w {z22.s},p0/z,[x1,#5,MUL VL] +.inst 0xa546a037 //ld1w {z23.s},p0/z,[x1,#6,MUL VL] +.inst 0xa547a038 //ld1w {z24.s},p0/z,[x1,#7,MUL VL] +.inst 0x04215101 //addvl x1,x1,8 +.inst 0x04b13000 //eor z0.d,z0.d,z17.d +.inst 0x04b23084 //eor z4.d,z4.d,z18.d +.inst 0x04b33108 //eor z8.d,z8.d,z19.d +.inst 0x04b4318c //eor z12.d,z12.d,z20.d +.inst 0x04b53021 //eor z1.d,z1.d,z21.d +.inst 0x04b630a5 //eor z5.d,z5.d,z22.d +.inst 0x04b73129 //eor z9.d,z9.d,z23.d +.inst 0x04b831ad //eor z13.d,z13.d,z24.d +.inst 0xa540a031 //ld1w {z17.s},p0/z,[x1,#0,MUL VL] +.inst 0xa541a032 //ld1w {z18.s},p0/z,[x1,#1,MUL VL] +.inst 0xa542a033 //ld1w {z19.s},p0/z,[x1,#2,MUL VL] +.inst 0xa543a034 //ld1w {z20.s},p0/z,[x1,#3,MUL VL] +.inst 0xa544a035 //ld1w {z21.s},p0/z,[x1,#4,MUL VL] +.inst 0xa545a036 //ld1w {z22.s},p0/z,[x1,#5,MUL VL] +.inst 0xa546a037 //ld1w {z23.s},p0/z,[x1,#6,MUL VL] +.inst 0xa547a038 //ld1w {z24.s},p0/z,[x1,#7,MUL VL] +.inst 0x04215101 //addvl x1,x1,8 +.if mixin == 1 + stp x7,x9,[x0],#16 +.endif +.inst 0x04b13042 //eor z2.d,z2.d,z17.d +.inst 0x04b230c6 //eor z6.d,z6.d,z18.d +.if mixin == 1 + stp x11,x13,[x0],#16 +.endif +.inst 0x04b3314a //eor z10.d,z10.d,z19.d +.inst 0x04b431ce //eor z14.d,z14.d,z20.d +.if mixin == 1 + stp x15,x17,[x0],#16 +.endif +.inst 0x04b53063 //eor z3.d,z3.d,z21.d +.inst 0x04b630e7 //eor z7.d,z7.d,z22.d +.if mixin == 1 + stp x19,x21,[x0],#16 +.endif +.inst 0x04b7316b //eor z11.d,z11.d,z23.d +.inst 0x04b831ef //eor z15.d,z15.d,z24.d +.inst 0xe540e000 //st1w {z0.s},p0,[x0,#0,MUL VL] +.inst 0xe541e004 //st1w {z4.s},p0,[x0,#1,MUL VL] +.inst 0xe542e008 //st1w {z8.s},p0,[x0,#2,MUL VL] +.inst 0xe543e00c //st1w {z12.s},p0,[x0,#3,MUL VL] +.inst 0xe544e001 //st1w {z1.s},p0,[x0,#4,MUL VL] +.inst 0xe545e005 //st1w {z5.s},p0,[x0,#5,MUL VL] +.inst 0xe546e009 //st1w {z9.s},p0,[x0,#6,MUL VL] +.inst 0xe547e00d //st1w {z13.s},p0,[x0,#7,MUL VL] +.inst 0x04205100 //addvl x0,x0,8 +.inst 0xe540e002 //st1w {z2.s},p0,[x0,#0,MUL VL] +.inst 0xe541e006 //st1w {z6.s},p0,[x0,#1,MUL VL] +.inst 0xe542e00a //st1w {z10.s},p0,[x0,#2,MUL VL] +.inst 0xe543e00e //st1w {z14.s},p0,[x0,#3,MUL VL] +.inst 0xe544e003 //st1w {z3.s},p0,[x0,#4,MUL VL] +.inst 0xe545e007 //st1w {z7.s},p0,[x0,#5,MUL VL] +.inst 0xe546e00b //st1w {z11.s},p0,[x0,#6,MUL VL] +.inst 0xe547e00f //st1w {z15.s},p0,[x0,#7,MUL VL] +.inst 0x04205100 //addvl x0,x0,8 +210: +.inst 0x04b0e3fd //incw x29, ALL, MUL #1 + subs x2,x2,64 + b.gt 100b + b 110f +101: + mixin=0 + lsr x8,x23,#32 +.inst 0x05a03ae0 //dup z0.s,w23 +.inst 0x05a03af9 //dup z25.s,w23 +.if mixin == 1 + mov w7,w23 +.endif +.inst 0x05a03904 //dup z4.s,w8 +.inst 0x05a0391a //dup z26.s,w8 + lsr x10,x24,#32 +.inst 0x05a03b08 //dup z8.s,w24 +.inst 0x05a03b1b //dup z27.s,w24 +.if mixin == 1 + mov w9,w24 +.endif +.inst 0x05a0394c //dup z12.s,w10 +.inst 0x05a0395c //dup z28.s,w10 + lsr x12,x25,#32 +.inst 0x05a03b21 //dup z1.s,w25 +.inst 0x05a03b3d //dup z29.s,w25 +.if mixin == 1 + mov w11,w25 +.endif +.inst 0x05a03985 //dup z5.s,w12 +.inst 0x05a0399e //dup z30.s,w12 + lsr x14,x26,#32 +.inst 0x05a03b49 //dup z9.s,w26 +.inst 0x05a03b55 //dup z21.s,w26 +.if mixin == 1 + mov w13,w26 +.endif +.inst 0x05a039cd //dup z13.s,w14 +.inst 0x05a039d6 //dup z22.s,w14 + lsr x16,x27,#32 +.inst 0x05a03b62 //dup z2.s,w27 +.inst 0x05a03b77 //dup z23.s,w27 +.if mixin == 1 + mov w15,w27 +.endif +.inst 0x05a03a06 //dup z6.s,w16 +.inst 0x05a03a18 //dup z24.s,w16 + lsr x18,x28,#32 +.inst 0x05a03b8a //dup z10.s,w28 +.if mixin == 1 + mov w17,w28 +.endif +.inst 0x05a03a4e //dup z14.s,w18 + lsr x22,x30,#32 +.inst 0x05a03bcb //dup z11.s,w30 +.if mixin == 1 + mov w21,w30 +.endif +.inst 0x05a03acf //dup z15.s,w22 +.if mixin == 1 + add w20,w29,#1 + mov w19,w29 +.inst 0x04a14690 //index z16.s,w20,1 +.inst 0x04a14683 //index z3.s,w20,1 +.else +.inst 0x04a147b0 //index z16.s,w29,1 +.inst 0x04a147a3 //index z3.s,w29,1 +.endif + lsr x20,x29,#32 +.inst 0x05a03a87 //dup z7.s,w20 + mov x6,#10 +10: +.align 5 +.inst 0x04a10000 //add z0.s,z0.s,z1.s +.if mixin == 1 + add w7,w7,w11 +.endif +.inst 0x04a50084 //add z4.s,z4.s,z5.s +.if mixin == 1 + add w8,w8,w12 +.endif +.inst 0x04a90108 //add z8.s,z8.s,z9.s +.if mixin == 1 + add w9,w9,w13 +.endif +.inst 0x04ad018c //add z12.s,z12.s,z13.s +.if mixin == 1 + add w10,w10,w14 +.endif +.inst 0x04a03063 //eor z3.d,z3.d,z0.d +.if mixin == 1 + eor w19,w19,w7 +.endif +.inst 0x04a430e7 //eor z7.d,z7.d,z4.d +.if mixin == 1 + eor w20,w20,w8 +.endif +.inst 0x04a8316b //eor z11.d,z11.d,z8.d +.if mixin == 1 + eor w21,w21,w9 +.endif +.inst 0x04ac31ef //eor z15.d,z15.d,z12.d +.if mixin == 1 + eor w22,w22,w10 +.endif +.inst 0x05a58063 //revh z3.s,p0/m,z3.s +.if mixin == 1 + ror w19,w19,#16 +.endif +.inst 0x05a580e7 //revh z7.s,p0/m,z7.s +.if mixin == 1 + ror w20,w20,#16 +.endif +.inst 0x05a5816b //revh z11.s,p0/m,z11.s +.if mixin == 1 + ror w21,w21,#16 +.endif +.inst 0x05a581ef //revh z15.s,p0/m,z15.s +.if mixin == 1 + ror w22,w22,#16 +.endif +.inst 0x04a30042 //add z2.s,z2.s,z3.s +.if mixin == 1 + add w15,w15,w19 +.endif +.inst 0x04a700c6 //add z6.s,z6.s,z7.s +.if mixin == 1 + add w16,w16,w20 +.endif +.inst 0x04ab014a //add z10.s,z10.s,z11.s +.if mixin == 1 + add w17,w17,w21 +.endif +.inst 0x04af01ce //add z14.s,z14.s,z15.s +.if mixin == 1 + add w18,w18,w22 +.endif +.inst 0x04a23021 //eor z1.d,z1.d,z2.d +.if mixin == 1 + eor w11,w11,w15 +.endif +.inst 0x04a630a5 //eor z5.d,z5.d,z6.d +.if mixin == 1 + eor w12,w12,w16 +.endif +.inst 0x04aa3129 //eor z9.d,z9.d,z10.d +.if mixin == 1 + eor w13,w13,w17 +.endif +.inst 0x04ae31ad //eor z13.d,z13.d,z14.d +.if mixin == 1 + eor w14,w14,w18 +.endif +.inst 0x046c9c31 //lsl z17.s,z1.s,12 +.inst 0x046c9cb2 //lsl z18.s,z5.s,12 +.inst 0x046c9d33 //lsl z19.s,z9.s,12 +.inst 0x046c9db4 //lsl z20.s,z13.s,12 +.inst 0x046c9421 //lsr z1.s,z1.s,20 +.if mixin == 1 + ror w11,w11,20 +.endif +.inst 0x046c94a5 //lsr z5.s,z5.s,20 +.if mixin == 1 + ror w12,w12,20 +.endif +.inst 0x046c9529 //lsr z9.s,z9.s,20 +.if mixin == 1 + ror w13,w13,20 +.endif +.inst 0x046c95ad //lsr z13.s,z13.s,20 +.if mixin == 1 + ror w14,w14,20 +.endif +.inst 0x04713021 //orr z1.d,z1.d,z17.d +.inst 0x047230a5 //orr z5.d,z5.d,z18.d +.inst 0x04733129 //orr z9.d,z9.d,z19.d +.inst 0x047431ad //orr z13.d,z13.d,z20.d +.inst 0x04a10000 //add z0.s,z0.s,z1.s +.if mixin == 1 + add w7,w7,w11 +.endif +.inst 0x04a50084 //add z4.s,z4.s,z5.s +.if mixin == 1 + add w8,w8,w12 +.endif +.inst 0x04a90108 //add z8.s,z8.s,z9.s +.if mixin == 1 + add w9,w9,w13 +.endif +.inst 0x04ad018c //add z12.s,z12.s,z13.s +.if mixin == 1 + add w10,w10,w14 +.endif +.inst 0x04a03063 //eor z3.d,z3.d,z0.d +.if mixin == 1 + eor w19,w19,w7 +.endif +.inst 0x04a430e7 //eor z7.d,z7.d,z4.d +.if mixin == 1 + eor w20,w20,w8 +.endif +.inst 0x04a8316b //eor z11.d,z11.d,z8.d +.if mixin == 1 + eor w21,w21,w9 +.endif +.inst 0x04ac31ef //eor z15.d,z15.d,z12.d +.if mixin == 1 + eor w22,w22,w10 +.endif +.inst 0x053f3063 //tbl z3.b,{z3.b},z31.b +.if mixin == 1 + ror w19,w19,#24 +.endif +.inst 0x053f30e7 //tbl z7.b,{z7.b},z31.b +.if mixin == 1 + ror w20,w20,#24 +.endif +.inst 0x053f316b //tbl z11.b,{z11.b},z31.b +.if mixin == 1 + ror w21,w21,#24 +.endif +.inst 0x053f31ef //tbl z15.b,{z15.b},z31.b +.if mixin == 1 + ror w22,w22,#24 +.endif +.inst 0x04a30042 //add z2.s,z2.s,z3.s +.if mixin == 1 + add w15,w15,w19 +.endif +.inst 0x04a700c6 //add z6.s,z6.s,z7.s +.if mixin == 1 + add w16,w16,w20 +.endif +.inst 0x04ab014a //add z10.s,z10.s,z11.s +.if mixin == 1 + add w17,w17,w21 +.endif +.inst 0x04af01ce //add z14.s,z14.s,z15.s +.if mixin == 1 + add w18,w18,w22 +.endif +.inst 0x04a23021 //eor z1.d,z1.d,z2.d +.if mixin == 1 + eor w11,w11,w15 +.endif +.inst 0x04a630a5 //eor z5.d,z5.d,z6.d +.if mixin == 1 + eor w12,w12,w16 +.endif +.inst 0x04aa3129 //eor z9.d,z9.d,z10.d +.if mixin == 1 + eor w13,w13,w17 +.endif +.inst 0x04ae31ad //eor z13.d,z13.d,z14.d +.if mixin == 1 + eor w14,w14,w18 +.endif +.inst 0x04679c31 //lsl z17.s,z1.s,7 +.inst 0x04679cb2 //lsl z18.s,z5.s,7 +.inst 0x04679d33 //lsl z19.s,z9.s,7 +.inst 0x04679db4 //lsl z20.s,z13.s,7 +.inst 0x04679421 //lsr z1.s,z1.s,25 +.if mixin == 1 + ror w11,w11,25 +.endif +.inst 0x046794a5 //lsr z5.s,z5.s,25 +.if mixin == 1 + ror w12,w12,25 +.endif +.inst 0x04679529 //lsr z9.s,z9.s,25 +.if mixin == 1 + ror w13,w13,25 +.endif +.inst 0x046795ad //lsr z13.s,z13.s,25 +.if mixin == 1 + ror w14,w14,25 +.endif +.inst 0x04713021 //orr z1.d,z1.d,z17.d +.inst 0x047230a5 //orr z5.d,z5.d,z18.d +.inst 0x04733129 //orr z9.d,z9.d,z19.d +.inst 0x047431ad //orr z13.d,z13.d,z20.d +.inst 0x04a50000 //add z0.s,z0.s,z5.s +.if mixin == 1 + add w7,w7,w12 +.endif +.inst 0x04a90084 //add z4.s,z4.s,z9.s +.if mixin == 1 + add w8,w8,w13 +.endif +.inst 0x04ad0108 //add z8.s,z8.s,z13.s +.if mixin == 1 + add w9,w9,w14 +.endif +.inst 0x04a1018c //add z12.s,z12.s,z1.s +.if mixin == 1 + add w10,w10,w11 +.endif +.inst 0x04a031ef //eor z15.d,z15.d,z0.d +.if mixin == 1 + eor w22,w22,w7 +.endif +.inst 0x04a43063 //eor z3.d,z3.d,z4.d +.if mixin == 1 + eor w19,w19,w8 +.endif +.inst 0x04a830e7 //eor z7.d,z7.d,z8.d +.if mixin == 1 + eor w20,w20,w9 +.endif +.inst 0x04ac316b //eor z11.d,z11.d,z12.d +.if mixin == 1 + eor w21,w21,w10 +.endif +.inst 0x05a581ef //revh z15.s,p0/m,z15.s +.if mixin == 1 + ror w22,w22,#16 +.endif +.inst 0x05a58063 //revh z3.s,p0/m,z3.s +.if mixin == 1 + ror w19,w19,#16 +.endif +.inst 0x05a580e7 //revh z7.s,p0/m,z7.s +.if mixin == 1 + ror w20,w20,#16 +.endif +.inst 0x05a5816b //revh z11.s,p0/m,z11.s +.if mixin == 1 + ror w21,w21,#16 +.endif +.inst 0x04af014a //add z10.s,z10.s,z15.s +.if mixin == 1 + add w17,w17,w22 +.endif +.inst 0x04a301ce //add z14.s,z14.s,z3.s +.if mixin == 1 + add w18,w18,w19 +.endif +.inst 0x04a70042 //add z2.s,z2.s,z7.s +.if mixin == 1 + add w15,w15,w20 +.endif +.inst 0x04ab00c6 //add z6.s,z6.s,z11.s +.if mixin == 1 + add w16,w16,w21 +.endif +.inst 0x04aa30a5 //eor z5.d,z5.d,z10.d +.if mixin == 1 + eor w12,w12,w17 +.endif +.inst 0x04ae3129 //eor z9.d,z9.d,z14.d +.if mixin == 1 + eor w13,w13,w18 +.endif +.inst 0x04a231ad //eor z13.d,z13.d,z2.d +.if mixin == 1 + eor w14,w14,w15 +.endif +.inst 0x04a63021 //eor z1.d,z1.d,z6.d +.if mixin == 1 + eor w11,w11,w16 +.endif +.inst 0x046c9cb1 //lsl z17.s,z5.s,12 +.inst 0x046c9d32 //lsl z18.s,z9.s,12 +.inst 0x046c9db3 //lsl z19.s,z13.s,12 +.inst 0x046c9c34 //lsl z20.s,z1.s,12 +.inst 0x046c94a5 //lsr z5.s,z5.s,20 +.if mixin == 1 + ror w12,w12,20 +.endif +.inst 0x046c9529 //lsr z9.s,z9.s,20 +.if mixin == 1 + ror w13,w13,20 +.endif +.inst 0x046c95ad //lsr z13.s,z13.s,20 +.if mixin == 1 + ror w14,w14,20 +.endif +.inst 0x046c9421 //lsr z1.s,z1.s,20 +.if mixin == 1 + ror w11,w11,20 +.endif +.inst 0x047130a5 //orr z5.d,z5.d,z17.d +.inst 0x04723129 //orr z9.d,z9.d,z18.d +.inst 0x047331ad //orr z13.d,z13.d,z19.d +.inst 0x04743021 //orr z1.d,z1.d,z20.d +.inst 0x04a50000 //add z0.s,z0.s,z5.s +.if mixin == 1 + add w7,w7,w12 +.endif +.inst 0x04a90084 //add z4.s,z4.s,z9.s +.if mixin == 1 + add w8,w8,w13 +.endif +.inst 0x04ad0108 //add z8.s,z8.s,z13.s +.if mixin == 1 + add w9,w9,w14 +.endif +.inst 0x04a1018c //add z12.s,z12.s,z1.s +.if mixin == 1 + add w10,w10,w11 +.endif +.inst 0x04a031ef //eor z15.d,z15.d,z0.d +.if mixin == 1 + eor w22,w22,w7 +.endif +.inst 0x04a43063 //eor z3.d,z3.d,z4.d +.if mixin == 1 + eor w19,w19,w8 +.endif +.inst 0x04a830e7 //eor z7.d,z7.d,z8.d +.if mixin == 1 + eor w20,w20,w9 +.endif +.inst 0x04ac316b //eor z11.d,z11.d,z12.d +.if mixin == 1 + eor w21,w21,w10 +.endif +.inst 0x053f31ef //tbl z15.b,{z15.b},z31.b +.if mixin == 1 + ror w22,w22,#24 +.endif +.inst 0x053f3063 //tbl z3.b,{z3.b},z31.b +.if mixin == 1 + ror w19,w19,#24 +.endif +.inst 0x053f30e7 //tbl z7.b,{z7.b},z31.b +.if mixin == 1 + ror w20,w20,#24 +.endif +.inst 0x053f316b //tbl z11.b,{z11.b},z31.b +.if mixin == 1 + ror w21,w21,#24 +.endif +.inst 0x04af014a //add z10.s,z10.s,z15.s +.if mixin == 1 + add w17,w17,w22 +.endif +.inst 0x04a301ce //add z14.s,z14.s,z3.s +.if mixin == 1 + add w18,w18,w19 +.endif +.inst 0x04a70042 //add z2.s,z2.s,z7.s +.if mixin == 1 + add w15,w15,w20 +.endif +.inst 0x04ab00c6 //add z6.s,z6.s,z11.s +.if mixin == 1 + add w16,w16,w21 +.endif +.inst 0x04aa30a5 //eor z5.d,z5.d,z10.d +.if mixin == 1 + eor w12,w12,w17 +.endif +.inst 0x04ae3129 //eor z9.d,z9.d,z14.d +.if mixin == 1 + eor w13,w13,w18 +.endif +.inst 0x04a231ad //eor z13.d,z13.d,z2.d +.if mixin == 1 + eor w14,w14,w15 +.endif +.inst 0x04a63021 //eor z1.d,z1.d,z6.d +.if mixin == 1 + eor w11,w11,w16 +.endif +.inst 0x04679cb1 //lsl z17.s,z5.s,7 +.inst 0x04679d32 //lsl z18.s,z9.s,7 +.inst 0x04679db3 //lsl z19.s,z13.s,7 +.inst 0x04679c34 //lsl z20.s,z1.s,7 +.inst 0x046794a5 //lsr z5.s,z5.s,25 +.if mixin == 1 + ror w12,w12,25 +.endif +.inst 0x04679529 //lsr z9.s,z9.s,25 +.if mixin == 1 + ror w13,w13,25 +.endif +.inst 0x046795ad //lsr z13.s,z13.s,25 +.if mixin == 1 + ror w14,w14,25 +.endif +.inst 0x04679421 //lsr z1.s,z1.s,25 +.if mixin == 1 + ror w11,w11,25 +.endif +.inst 0x047130a5 //orr z5.d,z5.d,z17.d +.inst 0x04723129 //orr z9.d,z9.d,z18.d +.inst 0x047331ad //orr z13.d,z13.d,z19.d +.inst 0x04743021 //orr z1.d,z1.d,z20.d + sub x6,x6,1 + cbnz x6,10b + lsr x6,x28,#32 +.inst 0x05a03b91 //dup z17.s,w28 +.inst 0x05a038d2 //dup z18.s,w6 + lsr x6,x29,#32 +.inst 0x05a038d3 //dup z19.s,w6 + lsr x6,x30,#32 +.if mixin == 1 + add w7,w7,w23 +.endif +.inst 0x04b90000 //add z0.s,z0.s,z25.s +.if mixin == 1 + add x8,x8,x23,lsr #32 +.endif +.inst 0x04ba0084 //add z4.s,z4.s,z26.s +.if mixin == 1 + add x7,x7,x8,lsl #32 // pack +.endif +.if mixin == 1 + add w9,w9,w24 +.endif +.inst 0x04bb0108 //add z8.s,z8.s,z27.s +.if mixin == 1 + add x10,x10,x24,lsr #32 +.endif +.inst 0x04bc018c //add z12.s,z12.s,z28.s +.if mixin == 1 + add x9,x9,x10,lsl #32 // pack +.endif +.if mixin == 1 + ldp x8,x10,[x1],#16 +.endif +.if mixin == 1 + add w11,w11,w25 +.endif +.inst 0x04bd0021 //add z1.s,z1.s,z29.s +.if mixin == 1 + add x12,x12,x25,lsr #32 +.endif +.inst 0x04be00a5 //add z5.s,z5.s,z30.s +.if mixin == 1 + add x11,x11,x12,lsl #32 // pack +.endif +.if mixin == 1 + add w13,w13,w26 +.endif +.inst 0x04b50129 //add z9.s,z9.s,z21.s +.if mixin == 1 + add x14,x14,x26,lsr #32 +.endif +.inst 0x04b601ad //add z13.s,z13.s,z22.s +.if mixin == 1 + add x13,x13,x14,lsl #32 // pack +.endif +.if mixin == 1 + ldp x12,x14,[x1],#16 +.endif +.if mixin == 1 + add w15,w15,w27 +.endif +.inst 0x04b70042 //add z2.s,z2.s,z23.s +.if mixin == 1 + add x16,x16,x27,lsr #32 +.endif +.inst 0x04b800c6 //add z6.s,z6.s,z24.s +.if mixin == 1 + add x15,x15,x16,lsl #32 // pack +.endif +.if mixin == 1 + add w17,w17,w28 +.endif +.inst 0x04b1014a //add z10.s,z10.s,z17.s +.if mixin == 1 + add x18,x18,x28,lsr #32 +.endif +.inst 0x04b201ce //add z14.s,z14.s,z18.s +.if mixin == 1 + add x17,x17,x18,lsl #32 // pack +.endif +.if mixin == 1 + ldp x16,x18,[x1],#16 +.endif +.inst 0x05a03bd4 //dup z20.s,w30 +.inst 0x05a038d9 //dup z25.s,w6 // bak[15] not available for SVE +.if mixin == 1 + add w19,w19,w29 +.endif +.inst 0x04b00063 //add z3.s,z3.s,z16.s +.if mixin == 1 + add x20,x20,x29,lsr #32 +.endif +.inst 0x04b300e7 //add z7.s,z7.s,z19.s +.if mixin == 1 + add x19,x19,x20,lsl #32 // pack +.endif +.if mixin == 1 + add w21,w21,w30 +.endif +.inst 0x04b4016b //add z11.s,z11.s,z20.s +.if mixin == 1 + add x22,x22,x30,lsr #32 +.endif +.inst 0x04b901ef //add z15.s,z15.s,z25.s +.if mixin == 1 + add x21,x21,x22,lsl #32 // pack +.endif +.if mixin == 1 + ldp x20,x22,[x1],#16 +.endif +#ifdef __AARCH64EB__ + rev x7,x7 +.inst 0x05a48000 //revb z0.s,p0/m,z0.s +.inst 0x05a48084 //revb z4.s,p0/m,z4.s + rev x9,x9 +.inst 0x05a48108 //revb z8.s,p0/m,z8.s +.inst 0x05a4818c //revb z12.s,p0/m,z12.s + rev x11,x11 +.inst 0x05a48021 //revb z1.s,p0/m,z1.s +.inst 0x05a480a5 //revb z5.s,p0/m,z5.s + rev x13,x13 +.inst 0x05a48129 //revb z9.s,p0/m,z9.s +.inst 0x05a481ad //revb z13.s,p0/m,z13.s + rev x15,x15 +.inst 0x05a48042 //revb z2.s,p0/m,z2.s +.inst 0x05a480c6 //revb z6.s,p0/m,z6.s + rev x17,x17 +.inst 0x05a4814a //revb z10.s,p0/m,z10.s +.inst 0x05a481ce //revb z14.s,p0/m,z14.s + rev x19,x19 +.inst 0x05a48063 //revb z3.s,p0/m,z3.s +.inst 0x05a480e7 //revb z7.s,p0/m,z7.s + rev x21,x21 +.inst 0x05a4816b //revb z11.s,p0/m,z11.s +.inst 0x05a481ef //revb z15.s,p0/m,z15.s +#endif +.if mixin == 1 + add x29,x29,#1 +.endif + cmp x5,4 + b.ne 200f +.if mixin == 1 + eor x7,x7,x8 +.endif +.if mixin == 1 + eor x9,x9,x10 +.endif +.if mixin == 1 + eor x11,x11,x12 +.endif +.inst 0x05a46011 //zip1 z17.s,z0.s,z4.s +.inst 0x05a46412 //zip2 z18.s,z0.s,z4.s +.inst 0x05ac6113 //zip1 z19.s,z8.s,z12.s +.inst 0x05ac6514 //zip2 z20.s,z8.s,z12.s + +.inst 0x05a56035 //zip1 z21.s,z1.s,z5.s +.inst 0x05a56436 //zip2 z22.s,z1.s,z5.s +.inst 0x05ad6137 //zip1 z23.s,z9.s,z13.s +.inst 0x05ad6538 //zip2 z24.s,z9.s,z13.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36624 //zip2 z4.d,z17.d,z19.d +.inst 0x05f46248 //zip1 z8.d,z18.d,z20.d +.inst 0x05f4664c //zip2 z12.d,z18.d,z20.d + +.inst 0x05f762a1 //zip1 z1.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c9 //zip1 z9.d,z22.d,z24.d +.inst 0x05f866cd //zip2 z13.d,z22.d,z24.d +.if mixin == 1 + eor x13,x13,x14 +.endif +.if mixin == 1 + eor x15,x15,x16 +.endif +.if mixin == 1 + eor x17,x17,x18 +.endif +.inst 0x05a66051 //zip1 z17.s,z2.s,z6.s +.inst 0x05a66452 //zip2 z18.s,z2.s,z6.s +.inst 0x05ae6153 //zip1 z19.s,z10.s,z14.s +.inst 0x05ae6554 //zip2 z20.s,z10.s,z14.s + +.inst 0x05a76075 //zip1 z21.s,z3.s,z7.s +.inst 0x05a76476 //zip2 z22.s,z3.s,z7.s +.inst 0x05af6177 //zip1 z23.s,z11.s,z15.s +.inst 0x05af6578 //zip2 z24.s,z11.s,z15.s + +.inst 0x05f36222 //zip1 z2.d,z17.d,z19.d +.inst 0x05f36626 //zip2 z6.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664e //zip2 z14.d,z18.d,z20.d + +.inst 0x05f762a3 //zip1 z3.d,z21.d,z23.d +.inst 0x05f766a7 //zip2 z7.d,z21.d,z23.d +.inst 0x05f862cb //zip1 z11.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x19,x19,x20 +.endif +.if mixin == 1 + eor x21,x21,x22 +.endif + ld1 {v17.4s,v18.4s,v19.4s,v20.4s},[x1],#64 + ld1 {v21.4s,v22.4s,v23.4s,v24.4s},[x1],#64 +.inst 0x04b13000 //eor z0.d,z0.d,z17.d +.inst 0x04b23021 //eor z1.d,z1.d,z18.d +.inst 0x04b33042 //eor z2.d,z2.d,z19.d +.inst 0x04b43063 //eor z3.d,z3.d,z20.d +.inst 0x04b53084 //eor z4.d,z4.d,z21.d +.inst 0x04b630a5 //eor z5.d,z5.d,z22.d +.inst 0x04b730c6 //eor z6.d,z6.d,z23.d +.inst 0x04b830e7 //eor z7.d,z7.d,z24.d + ld1 {v17.4s,v18.4s,v19.4s,v20.4s},[x1],#64 + ld1 {v21.4s,v22.4s,v23.4s,v24.4s},[x1],#64 +.if mixin == 1 + stp x7,x9,[x0],#16 +.endif +.inst 0x04b13108 //eor z8.d,z8.d,z17.d +.inst 0x04b23129 //eor z9.d,z9.d,z18.d +.if mixin == 1 + stp x11,x13,[x0],#16 +.endif +.inst 0x04b3314a //eor z10.d,z10.d,z19.d +.inst 0x04b4316b //eor z11.d,z11.d,z20.d +.if mixin == 1 + stp x15,x17,[x0],#16 +.endif +.inst 0x04b5318c //eor z12.d,z12.d,z21.d +.inst 0x04b631ad //eor z13.d,z13.d,z22.d +.if mixin == 1 + stp x19,x21,[x0],#16 +.endif +.inst 0x04b731ce //eor z14.d,z14.d,z23.d +.inst 0x04b831ef //eor z15.d,z15.d,z24.d + st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x0],#64 + st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 + st1 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 + st1 {v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64 + b 210f +200: +.inst 0x05a16011 //zip1 z17.s,z0.s,z1.s +.inst 0x05a16412 //zip2 z18.s,z0.s,z1.s +.inst 0x05a36053 //zip1 z19.s,z2.s,z3.s +.inst 0x05a36454 //zip2 z20.s,z2.s,z3.s + +.inst 0x05a56095 //zip1 z21.s,z4.s,z5.s +.inst 0x05a56496 //zip2 z22.s,z4.s,z5.s +.inst 0x05a760d7 //zip1 z23.s,z6.s,z7.s +.inst 0x05a764d8 //zip2 z24.s,z6.s,z7.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36621 //zip2 z1.d,z17.d,z19.d +.inst 0x05f46242 //zip1 z2.d,z18.d,z20.d +.inst 0x05f46643 //zip2 z3.d,z18.d,z20.d + +.inst 0x05f762a4 //zip1 z4.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c6 //zip1 z6.d,z22.d,z24.d +.inst 0x05f866c7 //zip2 z7.d,z22.d,z24.d +.if mixin == 1 + eor x7,x7,x8 +.endif +.if mixin == 1 + eor x9,x9,x10 +.endif +.inst 0x05a96111 //zip1 z17.s,z8.s,z9.s +.inst 0x05a96512 //zip2 z18.s,z8.s,z9.s +.inst 0x05ab6153 //zip1 z19.s,z10.s,z11.s +.inst 0x05ab6554 //zip2 z20.s,z10.s,z11.s + +.inst 0x05ad6195 //zip1 z21.s,z12.s,z13.s +.inst 0x05ad6596 //zip2 z22.s,z12.s,z13.s +.inst 0x05af61d7 //zip1 z23.s,z14.s,z15.s +.inst 0x05af65d8 //zip2 z24.s,z14.s,z15.s + +.inst 0x05f36228 //zip1 z8.d,z17.d,z19.d +.inst 0x05f36629 //zip2 z9.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664b //zip2 z11.d,z18.d,z20.d + +.inst 0x05f762ac //zip1 z12.d,z21.d,z23.d +.inst 0x05f766ad //zip2 z13.d,z21.d,z23.d +.inst 0x05f862ce //zip1 z14.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x11,x11,x12 +.endif +.if mixin == 1 + eor x13,x13,x14 +.endif +.inst 0x05a46011 //zip1 z17.s,z0.s,z4.s +.inst 0x05a46412 //zip2 z18.s,z0.s,z4.s +.inst 0x05ac6113 //zip1 z19.s,z8.s,z12.s +.inst 0x05ac6514 //zip2 z20.s,z8.s,z12.s + +.inst 0x05a56035 //zip1 z21.s,z1.s,z5.s +.inst 0x05a56436 //zip2 z22.s,z1.s,z5.s +.inst 0x05ad6137 //zip1 z23.s,z9.s,z13.s +.inst 0x05ad6538 //zip2 z24.s,z9.s,z13.s + +.inst 0x05f36220 //zip1 z0.d,z17.d,z19.d +.inst 0x05f36624 //zip2 z4.d,z17.d,z19.d +.inst 0x05f46248 //zip1 z8.d,z18.d,z20.d +.inst 0x05f4664c //zip2 z12.d,z18.d,z20.d + +.inst 0x05f762a1 //zip1 z1.d,z21.d,z23.d +.inst 0x05f766a5 //zip2 z5.d,z21.d,z23.d +.inst 0x05f862c9 //zip1 z9.d,z22.d,z24.d +.inst 0x05f866cd //zip2 z13.d,z22.d,z24.d +.if mixin == 1 + eor x15,x15,x16 +.endif +.if mixin == 1 + eor x17,x17,x18 +.endif +.inst 0x05a66051 //zip1 z17.s,z2.s,z6.s +.inst 0x05a66452 //zip2 z18.s,z2.s,z6.s +.inst 0x05ae6153 //zip1 z19.s,z10.s,z14.s +.inst 0x05ae6554 //zip2 z20.s,z10.s,z14.s + +.inst 0x05a76075 //zip1 z21.s,z3.s,z7.s +.inst 0x05a76476 //zip2 z22.s,z3.s,z7.s +.inst 0x05af6177 //zip1 z23.s,z11.s,z15.s +.inst 0x05af6578 //zip2 z24.s,z11.s,z15.s + +.inst 0x05f36222 //zip1 z2.d,z17.d,z19.d +.inst 0x05f36626 //zip2 z6.d,z17.d,z19.d +.inst 0x05f4624a //zip1 z10.d,z18.d,z20.d +.inst 0x05f4664e //zip2 z14.d,z18.d,z20.d + +.inst 0x05f762a3 //zip1 z3.d,z21.d,z23.d +.inst 0x05f766a7 //zip2 z7.d,z21.d,z23.d +.inst 0x05f862cb //zip1 z11.d,z22.d,z24.d +.inst 0x05f866cf //zip2 z15.d,z22.d,z24.d +.if mixin == 1 + eor x19,x19,x20 +.endif +.if mixin == 1 + eor x21,x21,x22 +.endif +.inst 0xa540a031 //ld1w {z17.s},p0/z,[x1,#0,MUL VL] +.inst 0xa541a032 //ld1w {z18.s},p0/z,[x1,#1,MUL VL] +.inst 0xa542a033 //ld1w {z19.s},p0/z,[x1,#2,MUL VL] +.inst 0xa543a034 //ld1w {z20.s},p0/z,[x1,#3,MUL VL] +.inst 0xa544a035 //ld1w {z21.s},p0/z,[x1,#4,MUL VL] +.inst 0xa545a036 //ld1w {z22.s},p0/z,[x1,#5,MUL VL] +.inst 0xa546a037 //ld1w {z23.s},p0/z,[x1,#6,MUL VL] +.inst 0xa547a038 //ld1w {z24.s},p0/z,[x1,#7,MUL VL] +.inst 0x04215101 //addvl x1,x1,8 +.inst 0x04b13000 //eor z0.d,z0.d,z17.d +.inst 0x04b23084 //eor z4.d,z4.d,z18.d +.inst 0x04b33108 //eor z8.d,z8.d,z19.d +.inst 0x04b4318c //eor z12.d,z12.d,z20.d +.inst 0x04b53021 //eor z1.d,z1.d,z21.d +.inst 0x04b630a5 //eor z5.d,z5.d,z22.d +.inst 0x04b73129 //eor z9.d,z9.d,z23.d +.inst 0x04b831ad //eor z13.d,z13.d,z24.d +.inst 0xa540a031 //ld1w {z17.s},p0/z,[x1,#0,MUL VL] +.inst 0xa541a032 //ld1w {z18.s},p0/z,[x1,#1,MUL VL] +.inst 0xa542a033 //ld1w {z19.s},p0/z,[x1,#2,MUL VL] +.inst 0xa543a034 //ld1w {z20.s},p0/z,[x1,#3,MUL VL] +.inst 0xa544a035 //ld1w {z21.s},p0/z,[x1,#4,MUL VL] +.inst 0xa545a036 //ld1w {z22.s},p0/z,[x1,#5,MUL VL] +.inst 0xa546a037 //ld1w {z23.s},p0/z,[x1,#6,MUL VL] +.inst 0xa547a038 //ld1w {z24.s},p0/z,[x1,#7,MUL VL] +.inst 0x04215101 //addvl x1,x1,8 +.if mixin == 1 + stp x7,x9,[x0],#16 +.endif +.inst 0x04b13042 //eor z2.d,z2.d,z17.d +.inst 0x04b230c6 //eor z6.d,z6.d,z18.d +.if mixin == 1 + stp x11,x13,[x0],#16 +.endif +.inst 0x04b3314a //eor z10.d,z10.d,z19.d +.inst 0x04b431ce //eor z14.d,z14.d,z20.d +.if mixin == 1 + stp x15,x17,[x0],#16 +.endif +.inst 0x04b53063 //eor z3.d,z3.d,z21.d +.inst 0x04b630e7 //eor z7.d,z7.d,z22.d +.if mixin == 1 + stp x19,x21,[x0],#16 +.endif +.inst 0x04b7316b //eor z11.d,z11.d,z23.d +.inst 0x04b831ef //eor z15.d,z15.d,z24.d +.inst 0xe540e000 //st1w {z0.s},p0,[x0,#0,MUL VL] +.inst 0xe541e004 //st1w {z4.s},p0,[x0,#1,MUL VL] +.inst 0xe542e008 //st1w {z8.s},p0,[x0,#2,MUL VL] +.inst 0xe543e00c //st1w {z12.s},p0,[x0,#3,MUL VL] +.inst 0xe544e001 //st1w {z1.s},p0,[x0,#4,MUL VL] +.inst 0xe545e005 //st1w {z5.s},p0,[x0,#5,MUL VL] +.inst 0xe546e009 //st1w {z9.s},p0,[x0,#6,MUL VL] +.inst 0xe547e00d //st1w {z13.s},p0,[x0,#7,MUL VL] +.inst 0x04205100 //addvl x0,x0,8 +.inst 0xe540e002 //st1w {z2.s},p0,[x0,#0,MUL VL] +.inst 0xe541e006 //st1w {z6.s},p0,[x0,#1,MUL VL] +.inst 0xe542e00a //st1w {z10.s},p0,[x0,#2,MUL VL] +.inst 0xe543e00e //st1w {z14.s},p0,[x0,#3,MUL VL] +.inst 0xe544e003 //st1w {z3.s},p0,[x0,#4,MUL VL] +.inst 0xe545e007 //st1w {z7.s},p0,[x0,#5,MUL VL] +.inst 0xe546e00b //st1w {z11.s},p0,[x0,#6,MUL VL] +.inst 0xe547e00f //st1w {z15.s},p0,[x0,#7,MUL VL] +.inst 0x04205100 //addvl x0,x0,8 +210: +.inst 0x04b0e3fd //incw x29, ALL, MUL #1 +110: +2: + str w29,[x4] + ldp d10,d11,[sp,16] + ldp d12,d13,[sp,32] + ldp d14,d15,[sp,48] + ldp x16,x17,[sp,64] + ldp x18,x19,[sp,80] + ldp x20,x21,[sp,96] + ldp x22,x23,[sp,112] + ldp x24,x25,[sp,128] + ldp x26,x27,[sp,144] + ldp x28,x29,[sp,160] + ldr x30,[sp,176] + ldp d8,d9,[sp],192 + AARCH64_VALIDATE_LINK_REGISTER +.Lreturn: + ret +.size ChaCha20_ctr32_sve,.-ChaCha20_ctr32_sve |
