Files

3559 lines
82 KiB
ArmAsm

// 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