xref: /aosp_15_r20/external/libxaac/decoder/armv8/ixheaacd_pre_twiddle.s (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker///******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker// *
3*15dc779aSAndroid Build Coastguard Worker// * Copyright (C) 2018 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker// *
5*15dc779aSAndroid Build Coastguard Worker// * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker// * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker// * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker// *
9*15dc779aSAndroid Build Coastguard Worker// * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker// *
11*15dc779aSAndroid Build Coastguard Worker// * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker// * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker// * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker// * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker// *
17*15dc779aSAndroid Build Coastguard Worker// *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker// * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker//*/
20*15dc779aSAndroid Build Coastguard Worker
21*15dc779aSAndroid Build Coastguard Worker
22*15dc779aSAndroid Build Coastguard Worker.macro push_v_regs
23*15dc779aSAndroid Build Coastguard Worker    stp             q8, q9, [sp, #-32]!
24*15dc779aSAndroid Build Coastguard Worker    stp             q10, q11, [sp, #-32]!
25*15dc779aSAndroid Build Coastguard Worker    stp             q12, q13, [sp, #-32]!
26*15dc779aSAndroid Build Coastguard Worker    stp             q14, q15, [sp, #-32]!
27*15dc779aSAndroid Build Coastguard Worker    stp             X8, X9, [sp, #-16]!
28*15dc779aSAndroid Build Coastguard Worker    stp             X10, X11, [sp, #-16]!
29*15dc779aSAndroid Build Coastguard Worker    stp             X12, X13, [sp, #-16]!
30*15dc779aSAndroid Build Coastguard Worker    stp             X22, X23, [sp, #-16]!
31*15dc779aSAndroid Build Coastguard Worker    stp             X16, X17, [sp, #-16]!
32*15dc779aSAndroid Build Coastguard Worker    stp             X20, X21, [sp, #-16]!
33*15dc779aSAndroid Build Coastguard Worker.endm
34*15dc779aSAndroid Build Coastguard Worker.macro pop_v_regs
35*15dc779aSAndroid Build Coastguard Worker    ldp             X20, X21, [sp], #16
36*15dc779aSAndroid Build Coastguard Worker    ldp             X16, X17, [sp], #16
37*15dc779aSAndroid Build Coastguard Worker    ldp             X22, X23, [sp], #16
38*15dc779aSAndroid Build Coastguard Worker    ldp             X12, X13, [sp], #16
39*15dc779aSAndroid Build Coastguard Worker    ldp             X10, X11, [sp], #16
40*15dc779aSAndroid Build Coastguard Worker    ldp             X8, X9, [sp], #16
41*15dc779aSAndroid Build Coastguard Worker    ldp             q14, q15, [sp], #32
42*15dc779aSAndroid Build Coastguard Worker    ldp             q12, q13, [sp], #32
43*15dc779aSAndroid Build Coastguard Worker    ldp             q10, q11, [sp], #32
44*15dc779aSAndroid Build Coastguard Worker    ldp             q8, q9, [sp], #32
45*15dc779aSAndroid Build Coastguard Worker.endm
46*15dc779aSAndroid Build Coastguard Worker
47*15dc779aSAndroid Build Coastguard Worker.macro swp reg1, reg2
48*15dc779aSAndroid Build Coastguard Worker    MOV             X16, \reg1
49*15dc779aSAndroid Build Coastguard Worker    MOV             \reg1, \reg2
50*15dc779aSAndroid Build Coastguard Worker    MOV             \reg2, x16
51*15dc779aSAndroid Build Coastguard Worker.endm
52*15dc779aSAndroid Build Coastguard Worker.text
53*15dc779aSAndroid Build Coastguard Worker.global ixheaacd_pretwiddle_compute_armv8
54*15dc779aSAndroid Build Coastguard Worker
55*15dc779aSAndroid Build Coastguard Workerixheaacd_pretwiddle_compute_armv8:
56*15dc779aSAndroid Build Coastguard Worker
57*15dc779aSAndroid Build Coastguard Worker    push_v_regs
58*15dc779aSAndroid Build Coastguard Worker
59*15dc779aSAndroid Build Coastguard Worker    LSL             x7, x4, #4
60*15dc779aSAndroid Build Coastguard Worker    ADD             x7, x2, x7
61*15dc779aSAndroid Build Coastguard Worker    SUB             x7, x7, #4
62*15dc779aSAndroid Build Coastguard Worker    MOV             x22, #7500
63*15dc779aSAndroid Build Coastguard Worker    ADD             x3, x3, x22
64*15dc779aSAndroid Build Coastguard Worker    MVN             w5, w5
65*15dc779aSAndroid Build Coastguard Worker    ADD             w5, w5, #1
66*15dc779aSAndroid Build Coastguard Worker
67*15dc779aSAndroid Build Coastguard Worker
68*15dc779aSAndroid Build Coastguard Worker
69*15dc779aSAndroid Build Coastguard Worker
70*15dc779aSAndroid Build Coastguard Worker
71*15dc779aSAndroid Build Coastguard WorkerARM_PROLOGUE:
72*15dc779aSAndroid Build Coastguard Worker    LDRH            w21, [x3]
73*15dc779aSAndroid Build Coastguard Worker    LDRH            w22, [x3, #2]
74*15dc779aSAndroid Build Coastguard Worker    LSL             w22, w22, #16
75*15dc779aSAndroid Build Coastguard Worker    LSL             w21, w21, #16
76*15dc779aSAndroid Build Coastguard Worker
77*15dc779aSAndroid Build Coastguard Worker    LDR             w8, [x3], #4
78*15dc779aSAndroid Build Coastguard Worker    LDR             w9, [x0], #4
79*15dc779aSAndroid Build Coastguard Worker
80*15dc779aSAndroid Build Coastguard Worker
81*15dc779aSAndroid Build Coastguard Worker
82*15dc779aSAndroid Build Coastguard Worker
83*15dc779aSAndroid Build Coastguard Worker
84*15dc779aSAndroid Build Coastguard Worker
85*15dc779aSAndroid Build Coastguard Worker
86*15dc779aSAndroid Build Coastguard Worker
87*15dc779aSAndroid Build Coastguard Worker
88*15dc779aSAndroid Build Coastguard Worker
89*15dc779aSAndroid Build Coastguard Worker
90*15dc779aSAndroid Build Coastguard Worker
91*15dc779aSAndroid Build Coastguard Worker    SMULL           X12, w9, w21
92*15dc779aSAndroid Build Coastguard Worker    ASR             X12, x12, #32
93*15dc779aSAndroid Build Coastguard Worker    LDR             w10, [x1], #-4
94*15dc779aSAndroid Build Coastguard Worker    SMULL           X11, w9, w22
95*15dc779aSAndroid Build Coastguard Worker    ASR             X11, x11, #32
96*15dc779aSAndroid Build Coastguard Worker    SMULL           X23, w10, w22
97*15dc779aSAndroid Build Coastguard Worker    ASR             X23, x23, #32
98*15dc779aSAndroid Build Coastguard Worker    ADD             w9, w12, w23
99*15dc779aSAndroid Build Coastguard Worker    SMULL           X6, w10, w21
100*15dc779aSAndroid Build Coastguard Worker    ASR             X6, x6, #32
101*15dc779aSAndroid Build Coastguard Worker
102*15dc779aSAndroid Build Coastguard Worker
103*15dc779aSAndroid Build Coastguard Worker    MVN             w9, w9
104*15dc779aSAndroid Build Coastguard Worker    ADD             w9, w9, #1
105*15dc779aSAndroid Build Coastguard Worker    SUB             w11, w11, w6
106*15dc779aSAndroid Build Coastguard Worker    CMP             w5, #0
107*15dc779aSAndroid Build Coastguard Worker    BGT             NEXT
108*15dc779aSAndroid Build Coastguard Worker    MVN             w8, w5
109*15dc779aSAndroid Build Coastguard Worker    ADD             w8, w8, #1
110*15dc779aSAndroid Build Coastguard Worker    ASR             w11, w11, w8
111*15dc779aSAndroid Build Coastguard Worker    ASR             w9, w9, w8
112*15dc779aSAndroid Build Coastguard Worker    B               NEXT1
113*15dc779aSAndroid Build Coastguard Worker
114*15dc779aSAndroid Build Coastguard WorkerNEXT:
115*15dc779aSAndroid Build Coastguard Worker    LSL             w11, w11, w5
116*15dc779aSAndroid Build Coastguard Worker    LSL             w9, w9, w5
117*15dc779aSAndroid Build Coastguard Worker
118*15dc779aSAndroid Build Coastguard Worker
119*15dc779aSAndroid Build Coastguard Worker
120*15dc779aSAndroid Build Coastguard WorkerNEXT1:
121*15dc779aSAndroid Build Coastguard Worker    STR             w9, [x2], #4
122*15dc779aSAndroid Build Coastguard Worker    STR             w11, [x2], #4
123*15dc779aSAndroid Build Coastguard Worker
124*15dc779aSAndroid Build Coastguard Worker    CMP             X4, #0x100
125*15dc779aSAndroid Build Coastguard Worker    BNE             NXT
126*15dc779aSAndroid Build Coastguard Worker    MOV             X6, #4
127*15dc779aSAndroid Build Coastguard Worker    B               NXT1
128*15dc779aSAndroid Build Coastguard WorkerNXT:
129*15dc779aSAndroid Build Coastguard Worker    MOV             X6, #32
130*15dc779aSAndroid Build Coastguard Worker    ADD             X3, X3, #28
131*15dc779aSAndroid Build Coastguard Worker
132*15dc779aSAndroid Build Coastguard WorkerNXT1:
133*15dc779aSAndroid Build Coastguard Worker    SUB             X4, X4, #1
134*15dc779aSAndroid Build Coastguard Worker    ASR             X4, X4, #2
135*15dc779aSAndroid Build Coastguard Worker    SUB             x7, x7, #28
136*15dc779aSAndroid Build Coastguard Worker
137*15dc779aSAndroid Build Coastguard Worker
138*15dc779aSAndroid Build Coastguard Worker
139*15dc779aSAndroid Build Coastguard Worker
140*15dc779aSAndroid Build Coastguard Worker
141*15dc779aSAndroid Build Coastguard Worker
142*15dc779aSAndroid Build Coastguard Worker
143*15dc779aSAndroid Build Coastguard Worker
144*15dc779aSAndroid Build Coastguard Worker
145*15dc779aSAndroid Build Coastguard Worker
146*15dc779aSAndroid Build Coastguard Worker
147*15dc779aSAndroid Build Coastguard Worker
148*15dc779aSAndroid Build Coastguard Worker
149*15dc779aSAndroid Build Coastguard Worker
150*15dc779aSAndroid Build Coastguard WorkerNEON_PROLOGUE:
151*15dc779aSAndroid Build Coastguard Worker
152*15dc779aSAndroid Build Coastguard Worker    MOV             x8, #-32
153*15dc779aSAndroid Build Coastguard Worker
154*15dc779aSAndroid Build Coastguard Worker    dup             v14.4s, w5
155*15dc779aSAndroid Build Coastguard Worker
156*15dc779aSAndroid Build Coastguard Worker    SUB             X1, X1, #28
157*15dc779aSAndroid Build Coastguard Worker
158*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[0], [x3], x6
159*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[1], [x3], x6
160*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[2], [x3], x6
161*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[3], [x3], x6
162*15dc779aSAndroid Build Coastguard Worker
163*15dc779aSAndroid Build Coastguard Worker    rev64           v10.4h, v8.4h
164*15dc779aSAndroid Build Coastguard Worker    rev64           v11.4h, v9.4h
165*15dc779aSAndroid Build Coastguard Worker
166*15dc779aSAndroid Build Coastguard Worker    LD4             {v0.4h, v1.4h, v2.4h, v3.4h}, [x0], #32
167*15dc779aSAndroid Build Coastguard Worker
168*15dc779aSAndroid Build Coastguard Worker    LD4             {v4.4h, v5.4h, v6.4h, v7.4h}, [x1], x8
169*15dc779aSAndroid Build Coastguard Worker
170*15dc779aSAndroid Build Coastguard Worker    rev64           v0.4h, v0.4h
171*15dc779aSAndroid Build Coastguard Worker    rev64           v1.4h, v1.4h
172*15dc779aSAndroid Build Coastguard Worker    rev64           v4.4h, v4.4h
173*15dc779aSAndroid Build Coastguard Worker    rev64           v5.4h, v5.4h
174*15dc779aSAndroid Build Coastguard Worker
175*15dc779aSAndroid Build Coastguard Worker
176*15dc779aSAndroid Build Coastguard Worker
177*15dc779aSAndroid Build Coastguard Worker
178*15dc779aSAndroid Build Coastguard Worker
179*15dc779aSAndroid Build Coastguard Worker
180*15dc779aSAndroid Build Coastguard Worker
181*15dc779aSAndroid Build Coastguard Worker    uMULL           v30.4s, v2.4h, v9.4h
182*15dc779aSAndroid Build Coastguard Worker    uMULL           v28.4s, v4.4h, v9.4h
183*15dc779aSAndroid Build Coastguard Worker    uMULL           v26.4s, v2.4h, v8.4h
184*15dc779aSAndroid Build Coastguard Worker    uMULL           v24.4s, v4.4h, v8.4h
185*15dc779aSAndroid Build Coastguard Worker
186*15dc779aSAndroid Build Coastguard Worker    ushR            v30.4s, v30.4s, #16
187*15dc779aSAndroid Build Coastguard Worker    ushR            v28.4s, v28.4s, #16
188*15dc779aSAndroid Build Coastguard Worker    ushR            v26.4s, v26.4s, #16
189*15dc779aSAndroid Build Coastguard Worker    ushR            v24.4s, v24.4s, #16
190*15dc779aSAndroid Build Coastguard Worker
191*15dc779aSAndroid Build Coastguard Worker    sMLAL           v30.4s, v3.4h, v9.4h
192*15dc779aSAndroid Build Coastguard Worker    sMLAL           v28.4s, v5.4h, v9.4h
193*15dc779aSAndroid Build Coastguard Worker    sMLAL           v26.4s, v3.4h, v8.4h
194*15dc779aSAndroid Build Coastguard Worker    sMLAL           v24.4s, v5.4h, v8.4h
195*15dc779aSAndroid Build Coastguard Worker
196*15dc779aSAndroid Build Coastguard Worker    ADD             v28.4s, v26.4s , v28.4s
197*15dc779aSAndroid Build Coastguard Worker    NEG             v28.4s, v28.4s
198*15dc779aSAndroid Build Coastguard Worker    SUB             v30.4s, v30.4s , v24.4s
199*15dc779aSAndroid Build Coastguard Worker
200*15dc779aSAndroid Build Coastguard Worker    uMULL           v22.4s, v0.4h, v11.4h
201*15dc779aSAndroid Build Coastguard Worker    uMULL           v20.4s, v6.4h, v11.4h
202*15dc779aSAndroid Build Coastguard Worker    uMULL           v18.4s, v0.4h, v10.4h
203*15dc779aSAndroid Build Coastguard Worker    uMULL           v16.4s, v6.4h, v10.4h
204*15dc779aSAndroid Build Coastguard Worker
205*15dc779aSAndroid Build Coastguard Worker    ushR            v22.4s, v22.4s, #16
206*15dc779aSAndroid Build Coastguard Worker    ushR            v20.4s, v20.4s, #16
207*15dc779aSAndroid Build Coastguard Worker    ushR            v18.4s, v18.4s, #16
208*15dc779aSAndroid Build Coastguard Worker    ushR            v16.4s, v16.4s, #16
209*15dc779aSAndroid Build Coastguard Worker
210*15dc779aSAndroid Build Coastguard Worker    sMLAL           v22.4s, v1.4h, v11.4h
211*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[0], [x3], x6
212*15dc779aSAndroid Build Coastguard Worker
213*15dc779aSAndroid Build Coastguard Worker    sMLAL           v20.4s, v7.4h, v11.4h
214*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[1], [x3], x6
215*15dc779aSAndroid Build Coastguard Worker
216*15dc779aSAndroid Build Coastguard Worker    sMLAL           v18.4s, v1.4h, v10.4h
217*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[2], [x3], x6
218*15dc779aSAndroid Build Coastguard Worker
219*15dc779aSAndroid Build Coastguard Worker    sMLAL           v16.4s, v7.4h, v10.4h
220*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[3], [x3], x6
221*15dc779aSAndroid Build Coastguard Worker
222*15dc779aSAndroid Build Coastguard Worker    ADD             v20.4s, v20.4s , v18.4s
223*15dc779aSAndroid Build Coastguard Worker
224*15dc779aSAndroid Build Coastguard Worker    NEG             v20.4s, v20.4s
225*15dc779aSAndroid Build Coastguard Worker    rev64           v10.4h, v8.4h
226*15dc779aSAndroid Build Coastguard Worker    rev64           v11.4h, v9.4h
227*15dc779aSAndroid Build Coastguard Worker    SUB             v22.4s, v16.4s , v22.4s
228*15dc779aSAndroid Build Coastguard Worker    LD4             {v0.4h, v1.4h, v2.4h, v3.4h}, [x0], #32
229*15dc779aSAndroid Build Coastguard Worker
230*15dc779aSAndroid Build Coastguard Worker
231*15dc779aSAndroid Build Coastguard Worker
232*15dc779aSAndroid Build Coastguard Worker    sshL            v20.4s, v20.4s, v14.4s
233*15dc779aSAndroid Build Coastguard Worker    LD4             {v4.4h, v5.4h, v6.4h, v7.4h}, [x1], x8
234*15dc779aSAndroid Build Coastguard Worker
235*15dc779aSAndroid Build Coastguard Worker    rev64           v0.4h, v0.4h
236*15dc779aSAndroid Build Coastguard Worker    rev64           v1.4h, v1.4h
237*15dc779aSAndroid Build Coastguard Worker    sshL            v22.4s, v22.4s, v14.4s
238*15dc779aSAndroid Build Coastguard Worker
239*15dc779aSAndroid Build Coastguard Worker    rev64           v4.4h, v4.4h
240*15dc779aSAndroid Build Coastguard Worker    rev64           v5.4h, v5.4h
241*15dc779aSAndroid Build Coastguard Worker    sshL            v18.4s, v30.4s, v14.4s
242*15dc779aSAndroid Build Coastguard Worker
243*15dc779aSAndroid Build Coastguard Worker
244*15dc779aSAndroid Build Coastguard Worker    sshL            v16.4s, v28.4s, v14.4s
245*15dc779aSAndroid Build Coastguard Worker
246*15dc779aSAndroid Build Coastguard Worker
247*15dc779aSAndroid Build Coastguard Worker
248*15dc779aSAndroid Build Coastguard Worker
249*15dc779aSAndroid Build Coastguard Worker
250*15dc779aSAndroid Build Coastguard Worker
251*15dc779aSAndroid Build Coastguard Worker
252*15dc779aSAndroid Build Coastguard Worker
253*15dc779aSAndroid Build Coastguard Worker    SUB             X4, X4, #2
254*15dc779aSAndroid Build Coastguard Worker
255*15dc779aSAndroid Build Coastguard WorkerCORE_LOOP:
256*15dc779aSAndroid Build Coastguard Worker    uMULL           v30.4s, v2.4h, v9.4h
257*15dc779aSAndroid Build Coastguard Worker    MOV             v17.16B, v18.16B
258*15dc779aSAndroid Build Coastguard Worker    ST2             { v16.4s, v17.4s}, [x2]
259*15dc779aSAndroid Build Coastguard Worker    ADD             x2, x2, #32
260*15dc779aSAndroid Build Coastguard Worker    uMULL           v28.4s, v4.4h, v9.4h
261*15dc779aSAndroid Build Coastguard Worker
262*15dc779aSAndroid Build Coastguard Worker    uMULL           v26.4s, v2.4h, v8.4h
263*15dc779aSAndroid Build Coastguard Worker    MOV             v21.16B, v22.16B
264*15dc779aSAndroid Build Coastguard Worker    ST2             { v20.4s, v21.4s}, [x7], x8
265*15dc779aSAndroid Build Coastguard Worker    uMULL           v24.4s, v4.4h, v8.4h
266*15dc779aSAndroid Build Coastguard Worker
267*15dc779aSAndroid Build Coastguard Worker    ushR            v30.4s, v30.4s, #16
268*15dc779aSAndroid Build Coastguard Worker    ushR            v28.4s, v28.4s, #16
269*15dc779aSAndroid Build Coastguard Worker    ushR            v26.4s, v26.4s, #16
270*15dc779aSAndroid Build Coastguard Worker    ushR            v24.4s, v24.4s, #16
271*15dc779aSAndroid Build Coastguard Worker
272*15dc779aSAndroid Build Coastguard Worker    sMLAL           v30.4s, v3.4h, v9.4h
273*15dc779aSAndroid Build Coastguard Worker    sMLAL           v28.4s, v5.4h, v9.4h
274*15dc779aSAndroid Build Coastguard Worker    sMLAL           v26.4s, v3.4h, v8.4h
275*15dc779aSAndroid Build Coastguard Worker    sMLAL           v24.4s, v5.4h, v8.4h
276*15dc779aSAndroid Build Coastguard Worker
277*15dc779aSAndroid Build Coastguard Worker    ADD             v28.4s, v26.4s , v28.4s
278*15dc779aSAndroid Build Coastguard Worker    NEG             v28.4s, v28.4s
279*15dc779aSAndroid Build Coastguard Worker    SUB             v30.4s, v30.4s , v24.4s
280*15dc779aSAndroid Build Coastguard Worker
281*15dc779aSAndroid Build Coastguard Worker    uMULL           v22.4s, v0.4h, v11.4h
282*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[0], [x3], x6
283*15dc779aSAndroid Build Coastguard Worker    uMULL           v20.4s, v6.4h, v11.4h
284*15dc779aSAndroid Build Coastguard Worker
285*15dc779aSAndroid Build Coastguard Worker    uMULL           v18.4s, v0.4h, v10.4h
286*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[1], [x3], x6
287*15dc779aSAndroid Build Coastguard Worker    uMULL           v16.4s, v6.4h, v10.4h
288*15dc779aSAndroid Build Coastguard Worker
289*15dc779aSAndroid Build Coastguard Worker    ushR            v22.4s, v22.4s, #16
290*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[2], [x3], x6
291*15dc779aSAndroid Build Coastguard Worker    ushR            v20.4s, v20.4s, #16
292*15dc779aSAndroid Build Coastguard Worker
293*15dc779aSAndroid Build Coastguard Worker
294*15dc779aSAndroid Build Coastguard Worker    ushR            v18.4s, v18.4s, #16
295*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[3], [x3], x6
296*15dc779aSAndroid Build Coastguard Worker    ushR            v16.4s, v16.4s, #16
297*15dc779aSAndroid Build Coastguard Worker
298*15dc779aSAndroid Build Coastguard Worker    sMLAL           v22.4s, v1.4h, v11.4h
299*15dc779aSAndroid Build Coastguard Worker
300*15dc779aSAndroid Build Coastguard Worker    sMLAL           v20.4s, v7.4h, v11.4h
301*15dc779aSAndroid Build Coastguard Worker
302*15dc779aSAndroid Build Coastguard Worker
303*15dc779aSAndroid Build Coastguard Worker    sMLAL           v18.4s, v1.4h, v10.4h
304*15dc779aSAndroid Build Coastguard Worker
305*15dc779aSAndroid Build Coastguard Worker
306*15dc779aSAndroid Build Coastguard Worker    sMLAL           v16.4s, v7.4h, v10.4h
307*15dc779aSAndroid Build Coastguard Worker    LD4             {v0.4h, v1.4h, v2.4h, v3.4h}, [x0], #32
308*15dc779aSAndroid Build Coastguard Worker    ADD             v20.4s, v20.4s , v18.4s
309*15dc779aSAndroid Build Coastguard Worker
310*15dc779aSAndroid Build Coastguard Worker    NEG             v20.4s, v20.4s
311*15dc779aSAndroid Build Coastguard Worker    rev64           v10.4h, v8.4h
312*15dc779aSAndroid Build Coastguard Worker    rev64           v11.4h, v9.4h
313*15dc779aSAndroid Build Coastguard Worker
314*15dc779aSAndroid Build Coastguard Worker    SUB             v22.4s, v16.4s , v22.4s
315*15dc779aSAndroid Build Coastguard Worker    LD4             {v4.4h, v5.4h, v6.4h, v7.4h}, [x1], x8
316*15dc779aSAndroid Build Coastguard Worker    sshL            v20.4s, v20.4s, v14.4s
317*15dc779aSAndroid Build Coastguard Worker
318*15dc779aSAndroid Build Coastguard Worker
319*15dc779aSAndroid Build Coastguard Worker    sshL            v22.4s, v22.4s, v14.4s
320*15dc779aSAndroid Build Coastguard Worker
321*15dc779aSAndroid Build Coastguard Worker    rev64           v0.4h, v0.4h
322*15dc779aSAndroid Build Coastguard Worker    rev64           v1.4h, v1.4h
323*15dc779aSAndroid Build Coastguard Worker    sshL            v18.4s, v30.4s, v14.4s
324*15dc779aSAndroid Build Coastguard Worker
325*15dc779aSAndroid Build Coastguard Worker    rev64           v4.4h, v4.4h
326*15dc779aSAndroid Build Coastguard Worker    rev64           v5.4h, v5.4h
327*15dc779aSAndroid Build Coastguard Worker    sshL            v16.4s, v28.4s, v14.4s
328*15dc779aSAndroid Build Coastguard Worker
329*15dc779aSAndroid Build Coastguard Worker
330*15dc779aSAndroid Build Coastguard Worker    SUBS            x4, x4, #1
331*15dc779aSAndroid Build Coastguard Worker    BNE             CORE_LOOP
332*15dc779aSAndroid Build Coastguard Worker
333*15dc779aSAndroid Build Coastguard Worker
334*15dc779aSAndroid Build Coastguard Worker
335*15dc779aSAndroid Build Coastguard Worker
336*15dc779aSAndroid Build Coastguard Worker
337*15dc779aSAndroid Build Coastguard Worker
338*15dc779aSAndroid Build Coastguard WorkerNEON_EPILOGUE:
339*15dc779aSAndroid Build Coastguard Worker    uMULL           v30.4s, v2.4h, v9.4h
340*15dc779aSAndroid Build Coastguard Worker    MOV             v17.16B, v18.16B
341*15dc779aSAndroid Build Coastguard Worker    ST2             { v16.4s, v17.4s}, [x2]
342*15dc779aSAndroid Build Coastguard Worker    ADD             x2, x2, #32
343*15dc779aSAndroid Build Coastguard Worker    uMULL           v28.4s, v4.4h, v9.4h
344*15dc779aSAndroid Build Coastguard Worker
345*15dc779aSAndroid Build Coastguard Worker    uMULL           v26.4s, v2.4h, v8.4h
346*15dc779aSAndroid Build Coastguard Worker    MOV             v21.16B, v22.16B
347*15dc779aSAndroid Build Coastguard Worker
348*15dc779aSAndroid Build Coastguard Worker    ST2             { v20.4s, v21.4s}, [x7], x8
349*15dc779aSAndroid Build Coastguard Worker    uMULL           v24.4s, v4.4h, v8.4h
350*15dc779aSAndroid Build Coastguard Worker
351*15dc779aSAndroid Build Coastguard Worker    ushR            v30.4s, v30.4s, #16
352*15dc779aSAndroid Build Coastguard Worker    ushR            v28.4s, v28.4s, #16
353*15dc779aSAndroid Build Coastguard Worker    ushR            v26.4s, v26.4s, #16
354*15dc779aSAndroid Build Coastguard Worker    ushR            v24.4s, v24.4s, #16
355*15dc779aSAndroid Build Coastguard Worker
356*15dc779aSAndroid Build Coastguard Worker    sMLAL           v30.4s, v3.4h, v9.4h
357*15dc779aSAndroid Build Coastguard Worker    sMLAL           v28.4s, v5.4h, v9.4h
358*15dc779aSAndroid Build Coastguard Worker    sMLAL           v26.4s, v3.4h, v8.4h
359*15dc779aSAndroid Build Coastguard Worker    sMLAL           v24.4s, v5.4h, v8.4h
360*15dc779aSAndroid Build Coastguard Worker
361*15dc779aSAndroid Build Coastguard Worker    ADD             v28.4s, v26.4s , v28.4s
362*15dc779aSAndroid Build Coastguard Worker    NEG             v28.4s, v28.4s
363*15dc779aSAndroid Build Coastguard Worker    SUB             v30.4s, v30.4s , v24.4s
364*15dc779aSAndroid Build Coastguard Worker
365*15dc779aSAndroid Build Coastguard Worker    uMULL           v22.4s, v0.4h, v11.4h
366*15dc779aSAndroid Build Coastguard Worker    uMULL           v20.4s, v6.4h, v11.4h
367*15dc779aSAndroid Build Coastguard Worker    uMULL           v18.4s, v0.4h, v10.4h
368*15dc779aSAndroid Build Coastguard Worker    uMULL           v16.4s, v6.4h, v10.4h
369*15dc779aSAndroid Build Coastguard Worker
370*15dc779aSAndroid Build Coastguard Worker    ushR            v22.4s, v22.4s, #16
371*15dc779aSAndroid Build Coastguard Worker    ushR            v20.4s, v20.4s, #16
372*15dc779aSAndroid Build Coastguard Worker    ushR            v18.4s, v18.4s, #16
373*15dc779aSAndroid Build Coastguard Worker    ushR            v16.4s, v16.4s, #16
374*15dc779aSAndroid Build Coastguard Worker
375*15dc779aSAndroid Build Coastguard Worker    sMLAL           v22.4s, v1.4h, v11.4h
376*15dc779aSAndroid Build Coastguard Worker    sMLAL           v20.4s, v7.4h, v11.4h
377*15dc779aSAndroid Build Coastguard Worker    sMLAL           v18.4s, v1.4h, v10.4h
378*15dc779aSAndroid Build Coastguard Worker    sMLAL           v16.4s, v7.4h, v10.4h
379*15dc779aSAndroid Build Coastguard Worker
380*15dc779aSAndroid Build Coastguard Worker    ADD             v20.4s, v20.4s , v18.4s
381*15dc779aSAndroid Build Coastguard Worker    NEG             v20.4s, v20.4s
382*15dc779aSAndroid Build Coastguard Worker    SUB             v22.4s, v16.4s , v22.4s
383*15dc779aSAndroid Build Coastguard Worker
384*15dc779aSAndroid Build Coastguard Worker
385*15dc779aSAndroid Build Coastguard Worker    sshL            v20.4s, v20.4s, v14.4s
386*15dc779aSAndroid Build Coastguard Worker    sshL            v22.4s, v22.4s, v14.4s
387*15dc779aSAndroid Build Coastguard Worker    sshL            v18.4s, v30.4s, v14.4s
388*15dc779aSAndroid Build Coastguard Worker    sshL            v16.4s, v28.4s, v14.4s
389*15dc779aSAndroid Build Coastguard Worker    MOV             v17.16B, v18.16B
390*15dc779aSAndroid Build Coastguard Worker    ST2             { v16.4s, v17.4s}, [x2]
391*15dc779aSAndroid Build Coastguard Worker    ADD             x2, x2, #32
392*15dc779aSAndroid Build Coastguard Worker    MOV             v21.16B, v22.16B
393*15dc779aSAndroid Build Coastguard Worker    ST2             { v20.4s, v21.4s}, [x7], x8
394*15dc779aSAndroid Build Coastguard Worker
395*15dc779aSAndroid Build Coastguard Worker
396*15dc779aSAndroid Build Coastguard WorkerRESIDUE_NEON:
397*15dc779aSAndroid Build Coastguard Worker    MOV             x10, #-16
398*15dc779aSAndroid Build Coastguard Worker    movi            v3.2s, #0x00000000
399*15dc779aSAndroid Build Coastguard Worker    movi            v4.2s, #0x00000000
400*15dc779aSAndroid Build Coastguard Worker
401*15dc779aSAndroid Build Coastguard Worker    LD2             {v21.2s, v22.2s}, [x0], #16
402*15dc779aSAndroid Build Coastguard Worker    MOV             v0.8B, v21.8B
403*15dc779aSAndroid Build Coastguard Worker    MOV             v2.8B, v22.8B
404*15dc779aSAndroid Build Coastguard Worker
405*15dc779aSAndroid Build Coastguard Worker    LD1             {v1.s}[0], [x0], #4;
406*15dc779aSAndroid Build Coastguard Worker    LD1             {v3.s}[0], [x0], #4;
407*15dc779aSAndroid Build Coastguard Worker    LD1             {v1.s}[1], [x0]
408*15dc779aSAndroid Build Coastguard Worker    MOV             v21.8B, v0.8B
409*15dc779aSAndroid Build Coastguard Worker
410*15dc779aSAndroid Build Coastguard Worker    UZP1            v0.4h, v21.4h, v1.4h
411*15dc779aSAndroid Build Coastguard Worker    UZP2            v1.4h, v21.4h, v1.4h
412*15dc779aSAndroid Build Coastguard Worker    MOV             v21.8B, v2.8B
413*15dc779aSAndroid Build Coastguard Worker    UZP1            v2.4h, v21.4h, v3.4h
414*15dc779aSAndroid Build Coastguard Worker    UZP2            v3.4h, v21.4h, v3.4h
415*15dc779aSAndroid Build Coastguard Worker
416*15dc779aSAndroid Build Coastguard Worker    ADD             x1, x1, #4
417*15dc779aSAndroid Build Coastguard Worker
418*15dc779aSAndroid Build Coastguard Worker    LD1             {v6.s}[0], [x1], #4
419*15dc779aSAndroid Build Coastguard Worker    LD1             {v4.s}[1], [x1], #4
420*15dc779aSAndroid Build Coastguard Worker    LD1             {v6.s}[1], [x1], #4
421*15dc779aSAndroid Build Coastguard Worker
422*15dc779aSAndroid Build Coastguard Worker
423*15dc779aSAndroid Build Coastguard Worker    LD2             {v21.2s, v22.2s}, [x1], #16
424*15dc779aSAndroid Build Coastguard Worker    MOV             v5.8B, v21.8B
425*15dc779aSAndroid Build Coastguard Worker    MOV             v7.8B, v22.8B
426*15dc779aSAndroid Build Coastguard Worker
427*15dc779aSAndroid Build Coastguard Worker
428*15dc779aSAndroid Build Coastguard Worker    MOV             v21.8B, v4.8B
429*15dc779aSAndroid Build Coastguard Worker    UZP1            v4.4h, v21.4h, v5.4h
430*15dc779aSAndroid Build Coastguard Worker    UZP2            v5.4h, v21.4h, v5.4h
431*15dc779aSAndroid Build Coastguard Worker    MOV             v21.8B, v6.8B
432*15dc779aSAndroid Build Coastguard Worker    UZP1            v6.4h, v21.4h, v7.4h
433*15dc779aSAndroid Build Coastguard Worker    UZP2            v7.4h, v21.4h, v7.4h
434*15dc779aSAndroid Build Coastguard Worker    rev64           v0.4h, v0.4h
435*15dc779aSAndroid Build Coastguard Worker    rev64           v1.4h, v1.4h
436*15dc779aSAndroid Build Coastguard Worker    rev64           v4.4h, v4.4h
437*15dc779aSAndroid Build Coastguard Worker    rev64           v5.4h, v5.4h
438*15dc779aSAndroid Build Coastguard Worker
439*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[0], [x3], x6
440*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[1], [x3], x6
441*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[2], [x3], x6
442*15dc779aSAndroid Build Coastguard Worker    LD2             {v8.h, v9.h}[3], [x3], x6
443*15dc779aSAndroid Build Coastguard Worker
444*15dc779aSAndroid Build Coastguard Worker    rev64           v10.4h, v8.4h
445*15dc779aSAndroid Build Coastguard Worker    rev64           v11.4h, v9.4h
446*15dc779aSAndroid Build Coastguard Worker
447*15dc779aSAndroid Build Coastguard Worker
448*15dc779aSAndroid Build Coastguard Worker
449*15dc779aSAndroid Build Coastguard Worker    uMULL           v30.4s, v2.4h, v9.4h
450*15dc779aSAndroid Build Coastguard Worker    uMULL           v28.4s, v4.4h, v9.4h
451*15dc779aSAndroid Build Coastguard Worker    uMULL           v26.4s, v2.4h, v8.4h
452*15dc779aSAndroid Build Coastguard Worker    uMULL           v24.4s, v4.4h, v8.4h
453*15dc779aSAndroid Build Coastguard Worker
454*15dc779aSAndroid Build Coastguard Worker    ushR            v30.4s, v30.4s, #16
455*15dc779aSAndroid Build Coastguard Worker    ushR            v28.4s, v28.4s, #16
456*15dc779aSAndroid Build Coastguard Worker    ushR            v26.4s, v26.4s, #16
457*15dc779aSAndroid Build Coastguard Worker    ushR            v24.4s, v24.4s, #16
458*15dc779aSAndroid Build Coastguard Worker
459*15dc779aSAndroid Build Coastguard Worker    sMLAL           v30.4s, v3.4h, v9.4h
460*15dc779aSAndroid Build Coastguard Worker    sMLAL           v28.4s, v5.4h, v9.4h
461*15dc779aSAndroid Build Coastguard Worker    sMLAL           v26.4s, v3.4h, v8.4h
462*15dc779aSAndroid Build Coastguard Worker    sMLAL           v24.4s, v5.4h, v8.4h
463*15dc779aSAndroid Build Coastguard Worker
464*15dc779aSAndroid Build Coastguard Worker    ADD             v28.4s, v26.4s , v28.4s
465*15dc779aSAndroid Build Coastguard Worker    NEG             v28.4s, v28.4s
466*15dc779aSAndroid Build Coastguard Worker    SUB             v30.4s, v30.4s , v24.4s
467*15dc779aSAndroid Build Coastguard Worker
468*15dc779aSAndroid Build Coastguard Worker    uMULL           v22.4s, v0.4h, v11.4h
469*15dc779aSAndroid Build Coastguard Worker    uMULL           v20.4s, v6.4h, v11.4h
470*15dc779aSAndroid Build Coastguard Worker    uMULL           v18.4s, v0.4h, v10.4h
471*15dc779aSAndroid Build Coastguard Worker    uMULL           v16.4s, v6.4h, v10.4h
472*15dc779aSAndroid Build Coastguard Worker
473*15dc779aSAndroid Build Coastguard Worker    ushR            v22.4s, v22.4s, #16
474*15dc779aSAndroid Build Coastguard Worker    ushR            v20.4s, v20.4s, #16
475*15dc779aSAndroid Build Coastguard Worker    ushR            v18.4s, v18.4s, #16
476*15dc779aSAndroid Build Coastguard Worker    ushR            v16.4s, v16.4s, #16
477*15dc779aSAndroid Build Coastguard Worker
478*15dc779aSAndroid Build Coastguard Worker    sMLAL           v22.4s, v1.4h, v11.4h
479*15dc779aSAndroid Build Coastguard Worker    sMLAL           v20.4s, v7.4h, v11.4h
480*15dc779aSAndroid Build Coastguard Worker    sMLAL           v18.4s, v1.4h, v10.4h
481*15dc779aSAndroid Build Coastguard Worker    sMLAL           v16.4s, v7.4h, v10.4h
482*15dc779aSAndroid Build Coastguard Worker
483*15dc779aSAndroid Build Coastguard Worker    ADD             v20.4s, v20.4s , v18.4s
484*15dc779aSAndroid Build Coastguard Worker    NEG             v20.4s, v20.4s
485*15dc779aSAndroid Build Coastguard Worker    SUB             v22.4s, v16.4s , v22.4s
486*15dc779aSAndroid Build Coastguard Worker
487*15dc779aSAndroid Build Coastguard Worker
488*15dc779aSAndroid Build Coastguard Worker
489*15dc779aSAndroid Build Coastguard Worker    sshL            v20.4s, v20.4s, v14.4s
490*15dc779aSAndroid Build Coastguard Worker    sshL            v22.4s, v22.4s, v14.4s
491*15dc779aSAndroid Build Coastguard Worker    sshL            v18.4s, v30.4s, v14.4s
492*15dc779aSAndroid Build Coastguard Worker    sshL            v16.4s, v28.4s, v14.4s
493*15dc779aSAndroid Build Coastguard Worker    MOV             v21.16B, v22.16B
494*15dc779aSAndroid Build Coastguard Worker    ST2             { v20.4s, v21.4s}, [x7]
495*15dc779aSAndroid Build Coastguard Worker    mov             v17.16B, v18.16B
496*15dc779aSAndroid Build Coastguard Worker    ST2             {v16.2s, v17.2s}, [x2]
497*15dc779aSAndroid Build Coastguard Worker    ADD             x2, x2, #16
498*15dc779aSAndroid Build Coastguard Worker
499*15dc779aSAndroid Build Coastguard Worker    ST2             {v16.s, v17.s}[2], [x2]
500*15dc779aSAndroid Build Coastguard Worker    ADD             x2, x2, #8
501*15dc779aSAndroid Build Coastguard Worker
502*15dc779aSAndroid Build Coastguard Worker
503*15dc779aSAndroid Build Coastguard Worker
504*15dc779aSAndroid Build Coastguard Worker
505*15dc779aSAndroid Build Coastguard Worker
506*15dc779aSAndroid Build Coastguard Worker
507*15dc779aSAndroid Build Coastguard WorkerEND1:
508*15dc779aSAndroid Build Coastguard Worker    pop_v_regs
509*15dc779aSAndroid Build Coastguard Worker    ret
510*15dc779aSAndroid Build Coastguard Worker
511*15dc779aSAndroid Build Coastguard Worker
512*15dc779aSAndroid Build Coastguard Worker
513