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