xref: /aosp_15_r20/external/libxaac/decoder/armv7/ixheaacd_overlap_add1.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
25*15dc779aSAndroid Build Coastguard Worker
26*15dc779aSAndroid Build Coastguard Worker    .global ixheaacd_over_lap_add1_armv7
27*15dc779aSAndroid Build Coastguard Workerixheaacd_over_lap_add1_armv7:
28*15dc779aSAndroid Build Coastguard Worker
29*15dc779aSAndroid Build Coastguard Worker    STMFD           sp!, {R4-R12, R14}
30*15dc779aSAndroid Build Coastguard Worker    VPUSH           {d8 - d15}
31*15dc779aSAndroid Build Coastguard Worker
32*15dc779aSAndroid Build Coastguard Worker    LDR             R4, [SP, #104]
33*15dc779aSAndroid Build Coastguard Worker    LDR             R5, [SP, #108]
34*15dc779aSAndroid Build Coastguard Worker    LDR             R6, [SP, #112]
35*15dc779aSAndroid Build Coastguard Worker
36*15dc779aSAndroid Build Coastguard Worker    LSL             R6 , R6 , #1
37*15dc779aSAndroid Build Coastguard Worker    MOV             R10, R5, LSL #1
38*15dc779aSAndroid Build Coastguard Worker    SUB             R11, R10, #1
39*15dc779aSAndroid Build Coastguard Worker    MOV             R10, R11, LSL #2
40*15dc779aSAndroid Build Coastguard Worker    ADD             R10, R0, R10
41*15dc779aSAndroid Build Coastguard Worker    SUB             R10, R10, #12
42*15dc779aSAndroid Build Coastguard Worker    MOV             R8, R11, LSL #1
43*15dc779aSAndroid Build Coastguard Worker    ADD             R8, R8, R3
44*15dc779aSAndroid Build Coastguard Worker    SUB             R8, R8, #14
45*15dc779aSAndroid Build Coastguard Worker    MOV             R12, #0
46*15dc779aSAndroid Build Coastguard Worker    VDUP.S16        D12, R12
47*15dc779aSAndroid Build Coastguard Worker    MOV             R12, #-16
48*15dc779aSAndroid Build Coastguard Worker    VDUP.16         Q11, R4
49*15dc779aSAndroid Build Coastguard Worker    VLD1.32         {D6, D7}, [R10], R12
50*15dc779aSAndroid Build Coastguard Worker    MOV             R7, #0x0
51*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q3, Q3
52*15dc779aSAndroid Build Coastguard Worker    RSB             R7, R7, #0
53*15dc779aSAndroid Build Coastguard Worker    VQNEG.S32       Q0, Q3
54*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D1, D0
55*15dc779aSAndroid Build Coastguard Worker    SUB             R11, R5, #1
56*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D7, D6
57*15dc779aSAndroid Build Coastguard Worker    SMULBB          R11, R11, R6
58*15dc779aSAndroid Build Coastguard Worker    MOV             R11, R11, LSL #1
59*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D2, D3}, [R8], R12
60*15dc779aSAndroid Build Coastguard Worker    ADD             R11, R11, R2
61*15dc779aSAndroid Build Coastguard Worker    VREV64.16       Q1, Q1
62*15dc779aSAndroid Build Coastguard Worker    MOV             R4, R6, LSL #1
63*15dc779aSAndroid Build Coastguard Worker    RSB             R4, R4, #0
64*15dc779aSAndroid Build Coastguard Worker    MOV             R9, R6, LSL #1
65*15dc779aSAndroid Build Coastguard Worker    SMULBB          R6, R5, R6
66*15dc779aSAndroid Build Coastguard Worker    MOV             R6, R6, LSL #1
67*15dc779aSAndroid Build Coastguard Worker    ADD             R6, R6, R2
68*15dc779aSAndroid Build Coastguard Worker
69*15dc779aSAndroid Build Coastguard Worker
70*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q15, D7, D2
71*15dc779aSAndroid Build Coastguard Worker    VLD1.32         {D4, D5}, [R1]!
72*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q15, Q15, #16
73*15dc779aSAndroid Build Coastguard Worker
74*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q15, D6, D2
75*15dc779aSAndroid Build Coastguard Worker    VQSHL.S32       Q15, Q15, Q11
76*15dc779aSAndroid Build Coastguard Worker
77*15dc779aSAndroid Build Coastguard Worker
78*15dc779aSAndroid Build Coastguard Worker    VADDL.S16       Q7, D3, D12
79*15dc779aSAndroid Build Coastguard Worker
80*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q13, D4, D14
81*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D28, Q13
82*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q13, D5, D15
83*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D29, Q13
84*15dc779aSAndroid Build Coastguard Worker    VQSUB.S32       Q13, Q15, Q14
85*15dc779aSAndroid Build Coastguard Worker
86*15dc779aSAndroid Build Coastguard Worker
87*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q12, D1, D3
88*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q12, Q12, #16
89*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q12, D0, D3
90*15dc779aSAndroid Build Coastguard Worker    VQSHL.S32       Q12, Q12, Q11
91*15dc779aSAndroid Build Coastguard Worker    VLD1.32         {D6, D7}, [R10], R12
92*15dc779aSAndroid Build Coastguard Worker
93*15dc779aSAndroid Build Coastguard Worker
94*15dc779aSAndroid Build Coastguard Worker    VADDL.S16       Q7, D2, D12
95*15dc779aSAndroid Build Coastguard Worker
96*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q0, D14, D4
97*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D16, Q0
98*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q0, D15, D5
99*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D17, Q0
100*15dc779aSAndroid Build Coastguard Worker
101*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q3, Q3
102*15dc779aSAndroid Build Coastguard Worker    VQNEG.S32       Q0, Q3
103*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D1, D0
104*15dc779aSAndroid Build Coastguard Worker    VQSUB.S32       Q9, Q12, Q8
105*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D7, D6
106*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D2, D3}, [R8], R12
107*15dc779aSAndroid Build Coastguard Worker    VREV64.16       Q1, Q1
108*15dc779aSAndroid Build Coastguard Worker
109*15dc779aSAndroid Build Coastguard Worker    VLD1.32         {D4, D5}, [R1]!
110*15dc779aSAndroid Build Coastguard Worker    SUB             R5, R5, #8
111*15dc779aSAndroid Build Coastguard Worker
112*15dc779aSAndroid Build Coastguard Worker
113*15dc779aSAndroid Build Coastguard WorkerLOOP_1:
114*15dc779aSAndroid Build Coastguard Worker
115*15dc779aSAndroid Build Coastguard Worker
116*15dc779aSAndroid Build Coastguard Worker    VST1.32         D26[0], [R11], R4
117*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q15, D7, D2
118*15dc779aSAndroid Build Coastguard Worker    VST1.32         D26[1], [R11], R4
119*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q12, D1, D3
120*15dc779aSAndroid Build Coastguard Worker    VST1.32         D27[0], [R11] ,R4
121*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q15, Q15, #16
122*15dc779aSAndroid Build Coastguard Worker    VST1.32         D27[1], [R11] ,R4
123*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q12, Q12, #16
124*15dc779aSAndroid Build Coastguard Worker    VST1.32         D18[0], [R6], R9
125*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q15, D6, D2
126*15dc779aSAndroid Build Coastguard Worker    VST1.32         D18[1], [R6], R9
127*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q12, D0, D3
128*15dc779aSAndroid Build Coastguard Worker    VST1.32         D19[0], [R6], R9
129*15dc779aSAndroid Build Coastguard Worker    VQSHL.S32       Q15, Q15, Q11
130*15dc779aSAndroid Build Coastguard Worker    VST1.32         D19[1], [R6], R9
131*15dc779aSAndroid Build Coastguard Worker    VQSHL.S32       Q12, Q12, Q11
132*15dc779aSAndroid Build Coastguard Worker    VLD1.32         {D6, D7}, [R10], R12
133*15dc779aSAndroid Build Coastguard Worker
134*15dc779aSAndroid Build Coastguard Worker    VADDL.S16       Q7, D3, D12
135*15dc779aSAndroid Build Coastguard Worker
136*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q8, D4, D14
137*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D28, Q8
138*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q8, D5, D15
139*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D29, Q8
140*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q3, Q3
141*15dc779aSAndroid Build Coastguard Worker
142*15dc779aSAndroid Build Coastguard Worker    VADDL.S16       Q7, D2, D12
143*15dc779aSAndroid Build Coastguard Worker
144*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q0, D4, D14
145*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D16, Q0
146*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q0, D5, D15
147*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D17, Q0
148*15dc779aSAndroid Build Coastguard Worker
149*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D2, D3}, [R8], R12
150*15dc779aSAndroid Build Coastguard Worker    VQNEG.S32       Q0, Q3
151*15dc779aSAndroid Build Coastguard Worker    VLD1.32         {D4, D5}, [R1]!
152*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D1, D0
153*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D7, D6
154*15dc779aSAndroid Build Coastguard Worker    VQSUB.S32       Q13, Q15, Q14
155*15dc779aSAndroid Build Coastguard Worker    VREV64.16       Q1, Q1
156*15dc779aSAndroid Build Coastguard Worker    VQSUB.S32       Q9, Q12, Q8
157*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q15, D7, D2
158*15dc779aSAndroid Build Coastguard Worker    VST1.32         D26[0], [R11], R4
159*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q12, D1, D3
160*15dc779aSAndroid Build Coastguard Worker
161*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q15, Q15, #16
162*15dc779aSAndroid Build Coastguard Worker    VST1.32       {D26[1]}, [R11], R4
163*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q15, D6, D2         @MLA
164*15dc779aSAndroid Build Coastguard Worker    VST1.32       {D27[0]}, [R11], R4
165*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q12, Q12, #16
166*15dc779aSAndroid Build Coastguard Worker    VST1.32       {D27[1]}, [R11], R4
167*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q12, D0, D3         @MLA
168*15dc779aSAndroid Build Coastguard Worker    VST1.32       {D18[0]}, [R6], R9
169*15dc779aSAndroid Build Coastguard Worker    VQSHL.S32       Q15, Q15, Q11
170*15dc779aSAndroid Build Coastguard Worker    VST1.32       {D18[1]}, [R6], R9
171*15dc779aSAndroid Build Coastguard Worker    VQSHL.S32       Q12, Q12, Q11
172*15dc779aSAndroid Build Coastguard Worker    VST1.32       {D19[0]}, [R6], R9
173*15dc779aSAndroid Build Coastguard Worker
174*15dc779aSAndroid Build Coastguard Worker
175*15dc779aSAndroid Build Coastguard Worker    VADDL.S16       Q7, D3, D12
176*15dc779aSAndroid Build Coastguard Worker
177*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q8, D4, D14
178*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D28, Q8
179*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q8, D5, D15
180*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D29, Q8
181*15dc779aSAndroid Build Coastguard Worker
182*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D19[1]}, [R6], R9
183*15dc779aSAndroid Build Coastguard Worker
184*15dc779aSAndroid Build Coastguard Worker
185*15dc779aSAndroid Build Coastguard Worker    VADDL.S16       Q7, D2, D12
186*15dc779aSAndroid Build Coastguard Worker
187*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q0, D4, D14
188*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D16, Q0
189*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q0, D5, D15
190*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D17, Q0
191*15dc779aSAndroid Build Coastguard Worker
192*15dc779aSAndroid Build Coastguard Worker    VLD1.32         {D6, D7}, [R10], R12
193*15dc779aSAndroid Build Coastguard Worker    VREV64.32       Q3, Q3
194*15dc779aSAndroid Build Coastguard Worker    VQNEG.S32       Q0, Q3
195*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D1, D0
196*15dc779aSAndroid Build Coastguard Worker    VQSUB.S32       Q13, Q15, Q14
197*15dc779aSAndroid Build Coastguard Worker    VUZP.16         D7, D6
198*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {D2, D3}, [R8], R12
199*15dc779aSAndroid Build Coastguard Worker    VQSUB.S32       Q9, Q12, Q8
200*15dc779aSAndroid Build Coastguard Worker    VREV64.16       Q1, Q1
201*15dc779aSAndroid Build Coastguard Worker
202*15dc779aSAndroid Build Coastguard Worker    VLD1.32         {D4, D5}, [R1]!
203*15dc779aSAndroid Build Coastguard Worker
204*15dc779aSAndroid Build Coastguard Worker    SUBS            R5, R5, #8
205*15dc779aSAndroid Build Coastguard Worker
206*15dc779aSAndroid Build Coastguard Worker
207*15dc779aSAndroid Build Coastguard Worker
208*15dc779aSAndroid Build Coastguard Worker
209*15dc779aSAndroid Build Coastguard Worker    BGT             LOOP_1
210*15dc779aSAndroid Build Coastguard Worker
211*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D26[0]}, [R11], R4
212*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q15, D7, D2
213*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D26[1]}, [R11], R4
214*15dc779aSAndroid Build Coastguard Worker    VMULL.U16       Q12, D1, D3
215*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D27[0]}, [R11], R4
216*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q15, Q15, #16
217*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D27[1]}, [R11], R4
218*15dc779aSAndroid Build Coastguard Worker    VSHR.U32        Q12, Q12, #16
219*15dc779aSAndroid Build Coastguard Worker
220*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D18[0]}, [R6], R9
221*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q15, D6, D2
222*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D18[1]}, [R6], R9
223*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       Q12, D0, D3
224*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D19[0]}, [R6], R9
225*15dc779aSAndroid Build Coastguard Worker    VQSHL.S32       Q15, Q15, Q11
226*15dc779aSAndroid Build Coastguard Worker    VST1.32         {D19[1]}, [R6], R9
227*15dc779aSAndroid Build Coastguard Worker    VQSHL.S32       Q12, Q12, Q11
228*15dc779aSAndroid Build Coastguard Worker
229*15dc779aSAndroid Build Coastguard Worker
230*15dc779aSAndroid Build Coastguard Worker
231*15dc779aSAndroid Build Coastguard Worker
232*15dc779aSAndroid Build Coastguard Worker    VADDL.S16       Q7, D3, D12
233*15dc779aSAndroid Build Coastguard Worker
234*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q8, D4, D14
235*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D28, Q8
236*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q8, D5, D15
237*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D29, Q8
238*15dc779aSAndroid Build Coastguard Worker
239*15dc779aSAndroid Build Coastguard Worker
240*15dc779aSAndroid Build Coastguard Worker
241*15dc779aSAndroid Build Coastguard Worker    VADDL.S16       Q7, D2, D12
242*15dc779aSAndroid Build Coastguard Worker
243*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q13, D4, D14
244*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D16, Q13
245*15dc779aSAndroid Build Coastguard Worker    VMULL.S32       Q13, D5, D15
246*15dc779aSAndroid Build Coastguard Worker    VQMOVN.S64      D17, Q13
247*15dc779aSAndroid Build Coastguard Worker
248*15dc779aSAndroid Build Coastguard Worker
249*15dc779aSAndroid Build Coastguard Worker    VQSUB.S32       Q13, Q15, Q14
250*15dc779aSAndroid Build Coastguard Worker    VQSUB.S32       Q9, Q12, Q8
251*15dc779aSAndroid Build Coastguard Worker
252*15dc779aSAndroid Build Coastguard Worker    VST1.32         D26[0], [R11], R4
253*15dc779aSAndroid Build Coastguard Worker    VST1.32         D26[1], [R11], R4
254*15dc779aSAndroid Build Coastguard Worker    VST1.32         D27[0], [R11], R4
255*15dc779aSAndroid Build Coastguard Worker    VST1.32         D27[1], [R11], R4
256*15dc779aSAndroid Build Coastguard Worker
257*15dc779aSAndroid Build Coastguard Worker    VST1.32         D18[0], [R6], R9
258*15dc779aSAndroid Build Coastguard Worker    VST1.32         D18[1], [R6], R9
259*15dc779aSAndroid Build Coastguard Worker    VST1.32         D19[0], [R6], R9
260*15dc779aSAndroid Build Coastguard Worker    VST1.32         D19[1], [R6], R9
261*15dc779aSAndroid Build Coastguard Worker
262*15dc779aSAndroid Build Coastguard Worker    VPOP            {d8 - d15}
263*15dc779aSAndroid Build Coastguard Worker    LDMFD           sp!, {R4-R12, R15}
264*15dc779aSAndroid Build Coastguard Worker
265