xref: /aosp_15_r20/external/libxaac/decoder/armv7/ixheaacd_post_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.text
23*15dc779aSAndroid Build Coastguard Worker.p2align 2
24*15dc779aSAndroid Build Coastguard Worker.global ixheaacd_post_twiddle_armv7
25*15dc779aSAndroid Build Coastguard Worker
26*15dc779aSAndroid Build Coastguard Workerixheaacd_post_twiddle_armv7:
27*15dc779aSAndroid Build Coastguard Worker
28*15dc779aSAndroid Build Coastguard Worker    STMFD           sp!, {R4-R12}
29*15dc779aSAndroid Build Coastguard Worker    VPUSH           {d8 - d15}
30*15dc779aSAndroid Build Coastguard Worker    LDR             R4, [sp, #100]
31*15dc779aSAndroid Build Coastguard Worker
32*15dc779aSAndroid Build Coastguard WorkerARM_PROLOGUE:
33*15dc779aSAndroid Build Coastguard Worker
34*15dc779aSAndroid Build Coastguard Worker    CMP             R3, #0x400
35*15dc779aSAndroid Build Coastguard Worker    MOVW            R6, #7500
36*15dc779aSAndroid Build Coastguard Worker    ADD             R2, R2, R6
37*15dc779aSAndroid Build Coastguard Worker    BLT             NEXT
38*15dc779aSAndroid Build Coastguard Worker    MOV             R4, #50
39*15dc779aSAndroid Build Coastguard Worker    MOV             R5, #-50
40*15dc779aSAndroid Build Coastguard Worker    MOV             R6, #4
41*15dc779aSAndroid Build Coastguard Worker    VDUP.16         D10, R4
42*15dc779aSAndroid Build Coastguard Worker
43*15dc779aSAndroid Build Coastguard Worker    B               NEXT1
44*15dc779aSAndroid Build Coastguard Worker
45*15dc779aSAndroid Build Coastguard WorkerNEXT:
46*15dc779aSAndroid Build Coastguard Worker    MOVW            R4, #0x192
47*15dc779aSAndroid Build Coastguard Worker    MOVW            R5, #0xfe6e
48*15dc779aSAndroid Build Coastguard Worker    MOV             R6, #32
49*15dc779aSAndroid Build Coastguard Worker    VDUP.16         D10, R4
50*15dc779aSAndroid Build Coastguard Worker
51*15dc779aSAndroid Build Coastguard WorkerNEXT1:
52*15dc779aSAndroid Build Coastguard Worker    LDR             R7, [R1], #4
53*15dc779aSAndroid Build Coastguard Worker    LDR             R8, [R1], #4
54*15dc779aSAndroid Build Coastguard Worker    LDR             R9, [R2]
55*15dc779aSAndroid Build Coastguard Worker    ADD             R2, R2, R6
56*15dc779aSAndroid Build Coastguard Worker
57*15dc779aSAndroid Build Coastguard Worker    SMULWT          R11, R8, R9
58*15dc779aSAndroid Build Coastguard Worker    SMULWB          R10, R8, R9
59*15dc779aSAndroid Build Coastguard Worker    SMULWT          R12, R7, R9
60*15dc779aSAndroid Build Coastguard Worker    SMLAWB          R8, R7, R9, R11
61*15dc779aSAndroid Build Coastguard Worker
62*15dc779aSAndroid Build Coastguard Worker    SUB             R10, R10, R12
63*15dc779aSAndroid Build Coastguard Worker
64*15dc779aSAndroid Build Coastguard Worker    MVN             R8, R8
65*15dc779aSAndroid Build Coastguard Worker    ADD             R8, R8, #1
66*15dc779aSAndroid Build Coastguard Worker
67*15dc779aSAndroid Build Coastguard Worker    SMLAWB          R9, R10, R5, R8
68*15dc779aSAndroid Build Coastguard Worker    SMLAWB          R11, R8, R4, R10
69*15dc779aSAndroid Build Coastguard Worker
70*15dc779aSAndroid Build Coastguard Worker    LSL             R7, R3, #2
71*15dc779aSAndroid Build Coastguard Worker    ADD             R7, R0, R7
72*15dc779aSAndroid Build Coastguard Worker    SUB             R7, R7, #4
73*15dc779aSAndroid Build Coastguard Worker
74*15dc779aSAndroid Build Coastguard Worker    STR             R11, [R7], #-4
75*15dc779aSAndroid Build Coastguard Worker    STR             R9, [R0], #4
76*15dc779aSAndroid Build Coastguard Worker
77*15dc779aSAndroid Build Coastguard Worker    LSL             R5, R3, #2
78*15dc779aSAndroid Build Coastguard Worker    ADD             R5, R1, R5
79*15dc779aSAndroid Build Coastguard Worker    SUB             R5, R5, #40
80*15dc779aSAndroid Build Coastguard Worker
81*15dc779aSAndroid Build Coastguard Worker    SUB             R3, R3, #1
82*15dc779aSAndroid Build Coastguard Worker    ASR             R3, R3, #4
83*15dc779aSAndroid Build Coastguard Worker
84*15dc779aSAndroid Build Coastguard Worker
85*15dc779aSAndroid Build Coastguard Worker    SUB             R7, R7, #28
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
92*15dc779aSAndroid Build Coastguard Worker
93*15dc779aSAndroid Build Coastguard Worker
94*15dc779aSAndroid Build Coastguard Worker
95*15dc779aSAndroid Build Coastguard Worker
96*15dc779aSAndroid Build Coastguard Worker
97*15dc779aSAndroid Build Coastguard Worker
98*15dc779aSAndroid Build Coastguard Worker    MOV             R8, #-32
99*15dc779aSAndroid Build Coastguard Worker
100*15dc779aSAndroid Build Coastguard WorkerNEON_PROLOGUE:
101*15dc779aSAndroid Build Coastguard Worker
102*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {D0, D1, D2, D3}, [R5], R8
103*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {D4, D5, D6, D7}, [R1]!
104*15dc779aSAndroid Build Coastguard Worker
105*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[0], D9[0]}, [R2], R6
106*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[1], D9[1]}, [R2], R6
107*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[2], D9[2]}, [R2], R6
108*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[3], D9[3]}, [R2], R6
109*15dc779aSAndroid Build Coastguard Worker
110*15dc779aSAndroid Build Coastguard Worker    VREV64.16       Q6, Q4
111*15dc779aSAndroid Build Coastguard Worker
112*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q15, D2, D13
113*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q14, D0, D13
114*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q13, D2, D12
115*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q12, D0, D12
116*15dc779aSAndroid Build Coastguard Worker
117*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q15, Q15, #16
118*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q14, Q14, #16
119*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q13, Q13, #16
120*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q12, Q12, #16
121*15dc779aSAndroid Build Coastguard Worker
122*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q15, D3, D13
123*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q14, D1, D13
124*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q13, D3, D12
125*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q12, D1, D12
126*15dc779aSAndroid Build Coastguard Worker
127*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q11, D6, D9
128*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q10, D4, D9
129*15dc779aSAndroid Build Coastguard Worker
130*15dc779aSAndroid Build Coastguard Worker
131*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q14, Q14, Q13
132*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        Q15, Q15, Q12
133*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q14, Q14
134*15dc779aSAndroid Build Coastguard Worker
135*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q9, D6, D8
136*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q8, D4, D8
137*15dc779aSAndroid Build Coastguard Worker
138*15dc779aSAndroid Build Coastguard Worker    VMOV            Q13, Q15
139*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q11, Q11, #16
140*15dc779aSAndroid Build Coastguard Worker
141*15dc779aSAndroid Build Coastguard Worker    VMOV            Q12, Q14
142*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q10, Q10, #16
143*15dc779aSAndroid Build Coastguard Worker
144*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D26, D27
145*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q9, Q9, #16
146*15dc779aSAndroid Build Coastguard Worker
147*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D24, D25
148*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q8, Q8, #16
149*15dc779aSAndroid Build Coastguard Worker
150*15dc779aSAndroid Build Coastguard Worker
151*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q11, D7, D9
152*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q10, D5, D9
153*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q9, D7, D8
154*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q8, D5, D8
155*15dc779aSAndroid Build Coastguard Worker
156*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[0], D9[0]}, [R2], R6
157*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q0, D26, D10
158*15dc779aSAndroid Build Coastguard Worker
159*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[1], D9[1]}, [R2], R6
160*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q1, D24, D10
161*15dc779aSAndroid Build Coastguard Worker
162*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[2], D9[2]}, [R2], R6
163*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q11, Q11, Q8
164*15dc779aSAndroid Build Coastguard Worker
165*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[3], D9[3]}, [R2], R6
166*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        Q10, Q9, Q10
167*15dc779aSAndroid Build Coastguard Worker
168*15dc779aSAndroid Build Coastguard Worker    VREV64.16       Q6, Q4
169*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q11, Q11
170*15dc779aSAndroid Build Coastguard Worker
171*15dc779aSAndroid Build Coastguard Worker
172*15dc779aSAndroid Build Coastguard Worker    VMOV            Q9, Q11
173*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q0, Q0, #16
174*15dc779aSAndroid Build Coastguard Worker
175*15dc779aSAndroid Build Coastguard Worker    VMOV            Q8, Q10
176*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q1, Q1, #16
177*15dc779aSAndroid Build Coastguard Worker
178*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D18, D19
179*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q0, D27, D10
180*15dc779aSAndroid Build Coastguard Worker
181*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D16, D17
182*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q1, D25, D10
183*15dc779aSAndroid Build Coastguard Worker
184*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q2, D18, D10
185*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q3, D16, D10
186*15dc779aSAndroid Build Coastguard Worker
187*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q0, Q0
188*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q7, Q15, Q1
189*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q13, Q14, Q0
190*15dc779aSAndroid Build Coastguard Worker
191*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q7, Q7
192*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q2, Q2, #16
193*15dc779aSAndroid Build Coastguard Worker
194*15dc779aSAndroid Build Coastguard Worker    VSWP            D14, D15
195*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q3, Q3, #16
196*15dc779aSAndroid Build Coastguard Worker
197*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q2, D19, D10
198*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {D0, D1, D2, D3}, [R5], R8
199*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q3, D17, D10
200*15dc779aSAndroid Build Coastguard Worker    SUB             R3, R3, #2
201*15dc779aSAndroid Build Coastguard Worker
202*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q12, Q10, Q2
203*15dc779aSAndroid Build Coastguard Worker
204*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q12, Q12
205*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q8, Q3
206*15dc779aSAndroid Build Coastguard Worker
207*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {D4, D5, D6, D7}, [R1]!
208*15dc779aSAndroid Build Coastguard Worker
209*15dc779aSAndroid Build Coastguard Worker    VSWP            D24, D25
210*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q8, Q11, Q8
211*15dc779aSAndroid Build Coastguard Worker
212*15dc779aSAndroid Build Coastguard Worker
213*15dc779aSAndroid Build Coastguard Worker
214*15dc779aSAndroid Build Coastguard Worker
215*15dc779aSAndroid Build Coastguard WorkerCORE_LOOP_PT:
216*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q15, D2, D13
217*15dc779aSAndroid Build Coastguard Worker    VST2.32         {Q12, Q13}, [R7], R8
218*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q14, D0, D13
219*15dc779aSAndroid Build Coastguard Worker
220*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q13, D2, D12
221*15dc779aSAndroid Build Coastguard Worker    VST2.32         {Q7, Q8}, [R0]!
222*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q12, D0, D12
223*15dc779aSAndroid Build Coastguard Worker
224*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q15, Q15, #16
225*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q14, Q14, #16
226*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q13, Q13, #16
227*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q12, Q12, #16
228*15dc779aSAndroid Build Coastguard Worker
229*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q15, D3, D13
230*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q14, D1, D13
231*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q13, D3, D12
232*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q12, D1, D12
233*15dc779aSAndroid Build Coastguard Worker
234*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q11, D6, D9
235*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q10, D4, D9
236*15dc779aSAndroid Build Coastguard Worker
237*15dc779aSAndroid Build Coastguard Worker
238*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q14, Q14, Q13
239*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        Q15, Q15, Q12
240*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q14, Q14
241*15dc779aSAndroid Build Coastguard Worker
242*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q9, D6, D8
243*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q8, D4, D8
244*15dc779aSAndroid Build Coastguard Worker
245*15dc779aSAndroid Build Coastguard Worker
246*15dc779aSAndroid Build Coastguard Worker    VMOV            Q13, Q15
247*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q11, Q11, #16
248*15dc779aSAndroid Build Coastguard Worker
249*15dc779aSAndroid Build Coastguard Worker    VMOV            Q12, Q14
250*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q10, Q10, #16
251*15dc779aSAndroid Build Coastguard Worker
252*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D26, D27
253*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q9, Q9, #16
254*15dc779aSAndroid Build Coastguard Worker
255*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D24, D25
256*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q8, Q8, #16
257*15dc779aSAndroid Build Coastguard Worker
258*15dc779aSAndroid Build Coastguard Worker
259*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q11, D7, D9
260*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q10, D5, D9
261*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q9, D7, D8
262*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q8, D5, D8
263*15dc779aSAndroid Build Coastguard Worker
264*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[0], D9[0]}, [R2], R6
265*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q0, D26, D10
266*15dc779aSAndroid Build Coastguard Worker
267*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[1], D9[1]}, [R2], R6
268*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q1, D24, D10
269*15dc779aSAndroid Build Coastguard Worker
270*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[2], D9[2]}, [R2], R6
271*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q11, Q11, Q8
272*15dc779aSAndroid Build Coastguard Worker
273*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[3], D9[3]}, [R2], R6
274*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        Q10, Q9, Q10
275*15dc779aSAndroid Build Coastguard Worker
276*15dc779aSAndroid Build Coastguard Worker    VREV64.16       Q6, Q4
277*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q11, Q11
278*15dc779aSAndroid Build Coastguard Worker
279*15dc779aSAndroid Build Coastguard Worker
280*15dc779aSAndroid Build Coastguard Worker    VMOV            Q9, Q11
281*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q0, Q0, #16
282*15dc779aSAndroid Build Coastguard Worker
283*15dc779aSAndroid Build Coastguard Worker    VMOV            Q8, Q10
284*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q1, Q1, #16
285*15dc779aSAndroid Build Coastguard Worker
286*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D18, D19
287*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q0, D27, D10
288*15dc779aSAndroid Build Coastguard Worker
289*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D16, D17
290*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q1, D25, D10
291*15dc779aSAndroid Build Coastguard Worker
292*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q2, D18, D10
293*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q3, D16, D10
294*15dc779aSAndroid Build Coastguard Worker
295*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q0, Q0
296*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q7, Q15, Q1
297*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q13, Q14, Q0
298*15dc779aSAndroid Build Coastguard Worker
299*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q7, Q7
300*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q2, Q2, #16
301*15dc779aSAndroid Build Coastguard Worker
302*15dc779aSAndroid Build Coastguard Worker    VSWP            D14, D15
303*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q3, Q3, #16
304*15dc779aSAndroid Build Coastguard Worker
305*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q2, D19, D10
306*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {D0, D1, D2, D3}, [R5], R8
307*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q3, D17, D10
308*15dc779aSAndroid Build Coastguard Worker
309*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q12, Q10, Q2
310*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q12, Q12
311*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q8, Q3
312*15dc779aSAndroid Build Coastguard Worker
313*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {D4, D5, D6, D7}, [R1]!
314*15dc779aSAndroid Build Coastguard Worker    VSWP            D24, D25
315*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q8, Q11, Q8
316*15dc779aSAndroid Build Coastguard Worker
317*15dc779aSAndroid Build Coastguard Worker    SUBS            R3, R3, #1
318*15dc779aSAndroid Build Coastguard Worker    BNE             CORE_LOOP_PT
319*15dc779aSAndroid Build Coastguard Worker
320*15dc779aSAndroid Build Coastguard Worker
321*15dc779aSAndroid Build Coastguard Worker
322*15dc779aSAndroid Build Coastguard Worker
323*15dc779aSAndroid Build Coastguard WorkerNEON_EPILOGUE:
324*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q15, D2, D13
325*15dc779aSAndroid Build Coastguard Worker    VST2.32         {Q12, Q13}, [R7], R8
326*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q14, D0, D13
327*15dc779aSAndroid Build Coastguard Worker
328*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q13, D2, D12
329*15dc779aSAndroid Build Coastguard Worker    VST2.32         {Q7, Q8}, [R0]!
330*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q12, D0, D12
331*15dc779aSAndroid Build Coastguard Worker
332*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q15, Q15, #16
333*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q14, Q14, #16
334*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q13, Q13, #16
335*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q12, Q12, #16
336*15dc779aSAndroid Build Coastguard Worker
337*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q15, D3, D13
338*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q14, D1, D13
339*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q13, D3, D12
340*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q12, D1, D12
341*15dc779aSAndroid Build Coastguard Worker
342*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q11, D6, D9
343*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q10, D4, D9
344*15dc779aSAndroid Build Coastguard Worker
345*15dc779aSAndroid Build Coastguard Worker
346*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q14, Q14, Q13
347*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        Q15, Q15, Q12
348*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q14, Q14
349*15dc779aSAndroid Build Coastguard Worker
350*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q9, D6, D8
351*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q8, D4, D8
352*15dc779aSAndroid Build Coastguard Worker
353*15dc779aSAndroid Build Coastguard Worker
354*15dc779aSAndroid Build Coastguard Worker    VMOV            Q13, Q15
355*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q11, Q11, #16
356*15dc779aSAndroid Build Coastguard Worker
357*15dc779aSAndroid Build Coastguard Worker    VMOV            Q12, Q14
358*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q10, Q10, #16
359*15dc779aSAndroid Build Coastguard Worker
360*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D26, D27
361*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q9, Q9, #16
362*15dc779aSAndroid Build Coastguard Worker
363*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D24, D25
364*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q8, Q8, #16
365*15dc779aSAndroid Build Coastguard Worker
366*15dc779aSAndroid Build Coastguard Worker
367*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q11, D7, D9
368*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q10, D5, D9
369*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q9, D7, D8
370*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q8, D5, D8
371*15dc779aSAndroid Build Coastguard Worker
372*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q0, D26, D10
373*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q1, D24, D10
374*15dc779aSAndroid Build Coastguard Worker
375*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q11, Q11, Q8
376*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        Q10, Q9, Q10
377*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q11, Q11
378*15dc779aSAndroid Build Coastguard Worker
379*15dc779aSAndroid Build Coastguard Worker
380*15dc779aSAndroid Build Coastguard Worker    VMOV            Q9, Q11
381*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q0, Q0, #16
382*15dc779aSAndroid Build Coastguard Worker
383*15dc779aSAndroid Build Coastguard Worker    VMOV            Q8, Q10
384*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q1, Q1, #16
385*15dc779aSAndroid Build Coastguard Worker
386*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D18, D19
387*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q0, D27, D10
388*15dc779aSAndroid Build Coastguard Worker
389*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D16, D17
390*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q1, D25, D10
391*15dc779aSAndroid Build Coastguard Worker
392*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q2, D18, D10
393*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q3, D16, D10
394*15dc779aSAndroid Build Coastguard Worker
395*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q0, Q0
396*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q7, Q15, Q1
397*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q13, Q14, Q0
398*15dc779aSAndroid Build Coastguard Worker
399*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q7, Q7
400*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q2, Q2, #16
401*15dc779aSAndroid Build Coastguard Worker
402*15dc779aSAndroid Build Coastguard Worker    VSWP            D14, D15
403*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q3, Q3, #16
404*15dc779aSAndroid Build Coastguard Worker
405*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q2, D19, D10
406*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q3, D17, D10
407*15dc779aSAndroid Build Coastguard Worker
408*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q12, Q10, Q2
409*15dc779aSAndroid Build Coastguard Worker
410*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q12, Q12
411*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q8, Q3
412*15dc779aSAndroid Build Coastguard Worker
413*15dc779aSAndroid Build Coastguard Worker    VSWP            D24, D25
414*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q8, Q11, Q8
415*15dc779aSAndroid Build Coastguard Worker
416*15dc779aSAndroid Build Coastguard Worker
417*15dc779aSAndroid Build Coastguard Worker    VST2.32         {Q7, Q8}, [R0]!
418*15dc779aSAndroid Build Coastguard Worker    VST2.32         {Q12, Q13}, [R7], R8
419*15dc779aSAndroid Build Coastguard Worker
420*15dc779aSAndroid Build Coastguard Worker
421*15dc779aSAndroid Build Coastguard Worker
422*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {D0, D1, D2, D3}, [R5], R8
423*15dc779aSAndroid Build Coastguard Worker
424*15dc779aSAndroid Build Coastguard Worker    VMOV.S32        D5, #0x00000000
425*15dc779aSAndroid Build Coastguard Worker    VMOV.S32        D7, #0x00000000
426*15dc779aSAndroid Build Coastguard Worker
427*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {D4, D6}, [R1]!
428*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {D5[0], D7[0]}, [R1]
429*15dc779aSAndroid Build Coastguard Worker
430*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[0], D9[0]}, [R2], R6
431*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[1], D9[1]}, [R2], R6
432*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[2], D9[2]}, [R2], R6
433*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D8[3], D9[3]}, [R2], R6
434*15dc779aSAndroid Build Coastguard Worker
435*15dc779aSAndroid Build Coastguard Worker    VREV64.16       Q6, Q4
436*15dc779aSAndroid Build Coastguard Worker
437*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D4, D5
438*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D6, D7
439*15dc779aSAndroid Build Coastguard Worker
440*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q15, D2, D13
441*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q14, D0, D13
442*15dc779aSAndroid Build Coastguard Worker
443*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q13, D2, D12
444*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q12, D0, D12
445*15dc779aSAndroid Build Coastguard Worker
446*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q15, Q15, #16
447*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q14, Q14, #16
448*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q13, Q13, #16
449*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q12, Q12, #16
450*15dc779aSAndroid Build Coastguard Worker
451*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q15, D3, D13
452*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q14, D1, D13
453*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q13, D3, D12
454*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q12, D1, D12
455*15dc779aSAndroid Build Coastguard Worker
456*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q11, D6, D9
457*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q10, D4, D9
458*15dc779aSAndroid Build Coastguard Worker
459*15dc779aSAndroid Build Coastguard Worker
460*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q14, Q14, Q13
461*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        Q15, Q15, Q12
462*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q14, Q14
463*15dc779aSAndroid Build Coastguard Worker
464*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q9, D6, D8
465*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q8, D4, D8
466*15dc779aSAndroid Build Coastguard Worker
467*15dc779aSAndroid Build Coastguard Worker
468*15dc779aSAndroid Build Coastguard Worker    VMOV            Q13, Q15
469*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q11, Q11, #16
470*15dc779aSAndroid Build Coastguard Worker
471*15dc779aSAndroid Build Coastguard Worker    VMOV            Q12, Q14
472*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q10, Q10, #16
473*15dc779aSAndroid Build Coastguard Worker
474*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D26, D27
475*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q9, Q9, #16
476*15dc779aSAndroid Build Coastguard Worker
477*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D24, D25
478*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q8, Q8, #16
479*15dc779aSAndroid Build Coastguard Worker
480*15dc779aSAndroid Build Coastguard Worker
481*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q11, D7, D9
482*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q10, D5, D9
483*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q9, D7, D8
484*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q8, D5, D8
485*15dc779aSAndroid Build Coastguard Worker
486*15dc779aSAndroid Build Coastguard Worker
487*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q0, D26, D10
488*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q1, D24, D10
489*15dc779aSAndroid Build Coastguard Worker
490*15dc779aSAndroid Build Coastguard Worker
491*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q11, Q11, Q8
492*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        Q10, Q9, Q10
493*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q11, Q11
494*15dc779aSAndroid Build Coastguard Worker
495*15dc779aSAndroid Build Coastguard Worker
496*15dc779aSAndroid Build Coastguard Worker    VMOV            Q9, Q11
497*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q0, Q0, #16
498*15dc779aSAndroid Build Coastguard Worker
499*15dc779aSAndroid Build Coastguard Worker    VMOV            Q8, Q10
500*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q1, Q1, #16
501*15dc779aSAndroid Build Coastguard Worker
502*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D18, D19
503*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q0, D27, D10
504*15dc779aSAndroid Build Coastguard Worker
505*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D16, D17
506*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q1, D25, D10
507*15dc779aSAndroid Build Coastguard Worker
508*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q2, D18, D10
509*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q3, D16, D10
510*15dc779aSAndroid Build Coastguard Worker
511*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q0, Q0
512*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q7, Q15, Q1
513*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q13, Q14, Q0
514*15dc779aSAndroid Build Coastguard Worker
515*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q7, Q7
516*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q2, Q2, #16
517*15dc779aSAndroid Build Coastguard Worker
518*15dc779aSAndroid Build Coastguard Worker    VSWP            D14, D15
519*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q3, Q3, #16
520*15dc779aSAndroid Build Coastguard Worker
521*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q2, D19, D10
522*15dc779aSAndroid Build Coastguard Worker
523*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q3, D17, D10
524*15dc779aSAndroid Build Coastguard Worker
525*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q12, Q10, Q2
526*15dc779aSAndroid Build Coastguard Worker
527*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q12, Q12
528*15dc779aSAndroid Build Coastguard Worker    VNEG.S32        Q8, Q3
529*15dc779aSAndroid Build Coastguard Worker
530*15dc779aSAndroid Build Coastguard Worker    VSWP            D24, D25
531*15dc779aSAndroid Build Coastguard Worker    VADD.I32        Q8, Q11, Q8
532*15dc779aSAndroid Build Coastguard Worker
533*15dc779aSAndroid Build Coastguard Worker    VST2.32         {D14, D16}, [R0]!
534*15dc779aSAndroid Build Coastguard Worker    VST2.32         {D15[0], D17[0]}, [R0]!
535*15dc779aSAndroid Build Coastguard Worker    VST1.32         D15[1], [R0]
536*15dc779aSAndroid Build Coastguard Worker
537*15dc779aSAndroid Build Coastguard Worker    ADD             R7, R7, #4
538*15dc779aSAndroid Build Coastguard Worker
539*15dc779aSAndroid Build Coastguard Worker    VST1.32         D26[0], [R7]!
540*15dc779aSAndroid Build Coastguard Worker    VST2.32         {D24[1], D26[1]}, [R7]!
541*15dc779aSAndroid Build Coastguard Worker    VST2.32         {D25, D27}, [R7]
542*15dc779aSAndroid Build Coastguard Worker
543*15dc779aSAndroid Build Coastguard Worker    VPOP            {d8 - d15}
544*15dc779aSAndroid Build Coastguard Worker    LDMFD           sp!, {R4-R12}
545*15dc779aSAndroid Build Coastguard Worker    BX              LR
546