151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick///******************************************************************************
251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// *
351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * Copyright (C) 2018 The Android Open Source Project
451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// *
551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * Licensed under the Apache License, Version 2.0 (the "License");
651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * you may not use this file except in compliance with the License.
751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * You may obtain a copy of the License at:
851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// *
951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * http://www.apache.org/licenses/LICENSE-2.0
1051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// *
1151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * Unless required by applicable law or agreed to in writing, software
1251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * distributed under the License is distributed on an "AS IS" BASIS,
1351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * See the License for the specific language governing permissions and
1551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * limitations under the License.
1651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// *
1751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// *****************************************************************************
1851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick// * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
1951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick//*/
2051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
2151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.macro push_v_regs
2251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             q8, q9, [sp, #-32]!
2351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             q10, q11, [sp, #-32]!
2451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             q12, q13, [sp, #-32]!
2551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             q14, q15, [sp, #-32]!
2651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             X8, X9, [sp, #-16]!
2751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             X10, X11, [sp, #-16]!
2851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             X12, X13, [sp, #-16]!
2951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             X14, X15, [sp, #-16]!
3051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             X16, X17, [sp, #-16]!
3151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    stp             X29, X30, [sp, #-16]!
3251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.endm
3351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.macro pop_v_regs
3451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             X29, X30, [sp], #16
3551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             X16, X17, [sp], #16
3651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             X14, X15, [sp], #16
3751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             X12, X13, [sp], #16
3851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             X10, X11, [sp], #16
3951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             X8, X9, [sp], #16
4051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             q14, q15, [sp], #32
4151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             q12, q13, [sp], #32
4251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             q10, q11, [sp], #32
4351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ldp             q8, q9, [sp], #32
4451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.endm
4551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
4651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.text
4751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.global ixheaacd_over_lap_add1_armv8
4851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickixheaacd_over_lap_add1_armv8:
4951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    push_v_regs
5051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LSL             X10, X5, #1
5151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SUB             X11, X10, #1
5251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LSL             X10, X11, #2
5351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ADD             X10, X0, X10
5451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SUB             X10, X10, #12
5551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LSL             X8, X11, #1
5651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ADD             X8, X8, X3
5751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SUB             X8, X8, #14
5851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             X12, #-16
5951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    DUP             V11.8H, W4
6051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD1             {V3.4S}, [X10], X12
6151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             W7, #0x2000
6251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
6351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    NEG             W7, W7
6451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQNEG           V0.4S, V3.4S
6551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    DUP             V10.4S, W7
6651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V31.8H, V0.8H, V0.8H
6751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP2            V30.8H, V0.8H, V0.8H
6851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V31.8h, V31.8h
6951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V30.8h, V30.8h
7051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SUB             X11, X5, #1
7151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V7.8H, V3.8H, V3.8H
7251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP2            V6.8H, V3.8H, V3.8H
7351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V7.8H, V7.8H
7451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V6.8H, V6.8H
7551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V16.S[0], W6
7651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V17.S[0], W11
7751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V17.4S, V16.4H, V17.4H
7851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             W11, V17.S[0]
7951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LSL             X11, X11, #1
8051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
8151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD2             {V2.4H, V3.4H}, [X8], X12
8251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ADD             X11, X11, X2
8351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V2.4H, V2.4H
8451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V3.4H, V3.4H
8551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LSL             X4, X6, #1
8651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    NEG             X4, X4
8751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LSL             X9, X6, #1
8851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V16.S[0], W5
8951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V17.S[0], W6
9051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V17.4S, V16.4H, V17.4H
9151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             W6, V17.S[0]
9251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LSL             W6, W6, #1
9351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ADD             X6, X6, X2
9451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
9551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UMULL           V15.4S, V7.4H, V2.4H
9651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD1             {V4.4S}, [X1], #16
9751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    USHR            V15.4S, V15.4S, #16
9851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
9951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMLAL           V15.4S, V6.4H, V2.4H
10051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V15.4S, V15.4S, V11.4S
10151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHLL           V27.4S, V3.4H, #0
10251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V28.2D, V27.2S, V4.2S
10351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL2          V29.2D, V27.4S, V4.4S
10451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN           V28.2S, V28.2D
10551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN2          V28.4S, V29.2D
10651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V14.16B, V28.16B
10751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
10851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQADD           V14.4S, V14.4S, V10.4S
10951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSUB           V13.4S, V15.4S, V14.4S
11051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V13.4S, V13.4S, #2
11151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHR            V13.4S, V13.4S, #16
11251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V26.8H, V13.8H, V13.8H
11351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
11451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UMULL           V12.4S, V31.4H, V3.4H
11551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    USHR            V12.4S, V12.4S, #16
11651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMLAL           V12.4S, V30.4H, V3.4H
11751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V12.4S, V12.4S, V11.4S
11851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD1             {V3.4S}, [X10], X12
11951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
12051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHLL           V27.4S, V2.4H, #0
12151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V28.2D, V27.2S, V4.2S
12251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL2          V29.2D, V27.4S, V4.4S
12351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN           V28.2S, V28.2D
12451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN2          V28.4S, V29.2D
12551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V8.16B, V28.16B
12651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
12751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQADD           V8.4S, V8.4S, V10.4S
12851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
12951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQNEG           V0.4S, V3.4S
13051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V1.8H, V0.8H, V0.8H
13151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP2            V0.8H, V0.8H, V0.8H
13251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V1.8h, V1.8h
13351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V0.8h, V0.8h
13451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSUB           V9.4S, V12.4S, V8.4S
13551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V7.8H, V3.8H, V3.8H
13651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP2            V6.8H, V3.8H, V3.8H
13751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V7.8h, V7.8h
13851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V6.8h, V6.8h
13951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V9.4S, V9.4S, #2
14051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD2             {V2.4H, V3.4H}, [X8], X12
14151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHR            V9.4S, V9.4S, #16
14251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V2.4H, V2.4H
14351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V3.4H, V3.4H
14451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V18.8H, V9.8H, V9.8H
14551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
14651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD1             {V4.4S}, [X1], #16
14751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SUB             W5, W5, #8
14851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
14951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
15051aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickLOOP_1:
15151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
15251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[0], [X11], X4
15351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UMULL           V15.4S, V7.4H, V2.4H
15451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[1], [X11], X4
15551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UMULL           V12.4S, V1.4H, V3.4H
15651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[2], [X11], X4
15751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    USHR            V15.4S, V15.4S, #16
15851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[3], [X11], X4
15951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    USHR            V12.4S, V12.4S, #16
16051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[0], [X6], X9
16151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMLAL           V15.4S, V6.4H, V2.4H
16251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[1], [X6], X9
16351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMLAL           V12.4S, V0.4H, V3.4H
16451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[2], [X6], X9
16551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V15.4S, V15.4S, V11.4S
16651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[3], [X6], X9
16751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V12.4S, V12.4S, V11.4S
16851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD1             {V6.4S}, [X10], X12
16951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
17051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHLL           V27.4S, V3.4H, #0
17151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V28.2D, V27.2S, V4.2S
17251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL2          V29.2D, V27.4S, V4.4S
17351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN           V28.2S, V28.2D
17451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN2          V28.4S, V29.2D
17551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V14.16B, V28.16B
17651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
17751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHLL           V27.4S, V2.4H, #0
17851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V28.2D, V27.2S, V4.2S
17951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL2          V29.2D, V27.4S, V4.4S
18051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN           V28.2S, V28.2D
18151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN2          V28.4S, V29.2D
18251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V8.16B, V28.16B
18351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
18451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD2             {V2.4H, V3.4H}, [X8], X12
18551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
18651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQNEG           V0.4S, V6.4S
18751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
18851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD1             {V4.4S}, [X1], #16
18951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
19051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQADD           V14.4S, V14.4S, V10.4S
19151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V1.8H, V0.8H, V0.8H
19251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP2            V0.8H, V0.8H, V0.8H
19351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V1.8h, V1.8h
19451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V0.8h, V0.8h
19551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQADD           V8.4S, V8.4S, V10.4S
19651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V7.8H, V6.8H, V6.8H
19751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP2            V6.8H, V6.8H, V6.8H
19851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V7.8h, V7.8h
19951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V6.8h, V6.8h
20051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSUB           V13.4S, V15.4S, V14.4S
20151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V2.4H, V2.4H
20251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V3.4H, V3.4H
20351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSUB           V9.4S, V12.4S, V8.4S
20451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V13.4S, V13.4S, #2
20551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V9.4S, V9.4S, #2
20651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UMULL           V15.4S, V7.4H, V2.4H
20751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHR            V13.4S, V13.4S, #16
20851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V26.8H, V13.8H, V13.8H
20951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHR            V9.4S, V9.4S, #16
21051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[0], [X11], X4
21151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UMULL           V12.4S, V1.4H, V3.4H
21251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V18.8H, V9.8H, V9.8H
21351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    USHR            V15.4S, V15.4S, #16
21451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[1], [X11], X4
21551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMLAL           V15.4S, V6.4H, V2.4H
21651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[2], [X11], X4
21751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    USHR            V12.4S, V12.4S, #16
21851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[3], [X11], X4
21951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMLAL           V12.4S, V0.4H, V3.4H
22051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[0], [X6], X9
22151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V15.4S, V15.4S, V11.4S
22251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[1], [X6], X9
22351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V12.4S, V12.4S, V11.4S
22451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[2], [X6], X9
22551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
22651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHLL           V27.4S, V3.4H, #0
22751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V28.2D, V27.2S, V4.2S
22851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL2          V29.2D, V27.4S, V4.4S
22951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN           V28.2S, V28.2D
23051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN2          V28.4S, V29.2D
23151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V14.16B, V28.16B
23251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
23351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[3], [X6], X9
23451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
23551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
23651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHLL           V27.4S, V2.4H, #0
23751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V28.2D, V27.2S, V4.2S
23851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL2          V29.2D, V27.4S, V4.4S
23951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN           V28.2S, V28.2D
24051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN2          V28.4S, V29.2D
24151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V8.16B, V28.16B
24251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
24351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD1             {V3.4S}, [X10], X12
24451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQADD           V14.4S, V14.4S, V10.4S
24551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
24651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQNEG           V0.4S, V3.4S
24751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V1.8H, V0.8H, V0.8H
24851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP2            V0.8H, V0.8H, V0.8H
24951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V1.8H, V1.8H
25051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V0.8H, V0.8H
25151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSUB           V13.4S, V15.4S, V14.4S
25251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V7.8H, V3.8H, V3.8H
25351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP2            V6.8H, V3.8H, V3.8H
25451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V7.8H, V7.8H
25551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V6.8H, V6.8H
25651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQADD           V8.4S, V8.4S, V10.4S
25751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD2             {V2.4H, V3.4H}, [X8], X12
25851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSUB           V9.4S, V12.4S, V8.4S
25951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V2.4H, V2.4H
26051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    REV64           V3.4H, V3.4H
26151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V13.4S, V13.4S, #2
26251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    LD1             {V4.4S}, [X1], #16
26351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
26451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V9.4S, V9.4S, #2
26551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHR            V13.4S, V13.4S, #16
26651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SUBS            X5, X5, #8
26751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHR            V9.4S, V9.4S, #16
26851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V26.8H, V13.8H, V13.8H
26951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V18.8H, V9.8H, V9.8H
27051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
27151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    BGT             LOOP_1
27251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
27351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[0], [X11], X4
27451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UMULL           V15.4S, V7.4H, V2.4H
27551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[1], [X11], X4
27651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UMULL           V12.4s, V1.4H, V3.4H
27751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[2], [X11], X4
27851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    USHR            V15.4S, V15.4S, #16
27951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[3], [X11], X4
28051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    USHR            V12.4S, V12.4S, #16
28151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
28251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[0], [X6], X9
28351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMLAL           V15.4S, V6.4H, V2.4H
28451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[1], [X6], X9
28551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMLAL           V12.4S, V0.4H, V3.4H
28651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[2], [X6], X9
28751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V15.4S, V15.4S, V11.4S
28851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[3], [X6], X9
28951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V12.4S, V12.4S, V11.4S
29051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
29151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
29251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHLL           V27.4S, V3.4H, #0
29351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V28.2D, V27.2S, V4.2S
29451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL2          V29.2D, V27.4S, V4.4S
29551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN           V28.2S, V28.2D
29651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN2          V28.4S, V29.2D
29751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V14.16B, V28.16B
29851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
29951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHLL           V27.4S, V2.4H, #0
30051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL           V28.2D, V27.2S, V4.2S
30151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SMULL2          V29.2D, V27.4S, V4.4S
30251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN           V28.2S, V28.2D
30351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQXTN2          V28.4S, V29.2D
30451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    MOV             V8.16B, V28.16B
30551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
30651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQADD           V14.4S, V14.4S, V10.4S
30751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQADD           V8.4S, V8.4S, V10.4S
30851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSUB           V13.4S, V15.4S, V14.4S
30951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSUB           V9.4S, V12.4S, V8.4S
31051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V13.4S, V13.4S, #2
31151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SQSHL           V9.4S, V9.4S, #2
31251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHR            V13.4S, V13.4S, #16
31351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    SSHR            V9.4S, V9.4S, #16
31451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V26.8H, V13.8H, V13.8H
31551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
31651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    UZP1            V18.8H, V9.8H, V9.8H
31751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
31851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
31951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[0], [X11], X4
32051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[1], [X11], X4
32151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[2], [X11], X4
32251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V26.H}[3], [X11], X4
32351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
32451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[0], [X6], X9
32551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[1], [X6], X9
32651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[2], [X6], X9
32751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    ST1             {V18.H}[3], [X6], X9
32851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    pop_v_regs
32951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick    RET
33051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
33151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
33251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
33351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick
334