xref: /aosp_15_r20/external/libxaac/decoder/armv7/ixheaacd_sbr_qmfsyn64_winadd.s (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1@/******************************************************************************
2@ *
3@ * Copyright (C) 2018 The Android Open Source Project
4@ *
5@ * Licensed under the Apache License, Version 2.0 (the "License");
6@ * you may not use this file except in compliance with the License.
7@ * You may obtain a copy of the License at:
8@ *
9@ * http://www.apache.org/licenses/LICENSE-2.0
10@ *
11@ * Unless required by applicable law or agreed to in writing, software
12@ * distributed under the License is distributed on an "AS IS" BASIS,
13@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14@ * See the License for the specific language governing permissions and
15@ * limitations under the License.
16@ *
17@ *****************************************************************************
18@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19@*/
20
21
22.text
23.p2align 2
24      .global ixheaacd_sbr_qmfsyn64_winadd
25      .type ixheaacd_sbr_qmfsyn64_winadd, %function
26
27ixheaacd_sbr_qmfsyn64_winadd:
28
29    STMFD           sp!, {R4-R12, R14}
30    VPUSH           {D8- D15}
31    LDR             R4, [SP, #104]
32    LDR             R5, [SP, #108]
33
34    MOV             R7, #0x8000
35    VLD1.16         D0, [R0]!
36    MOV             R12, R2
37
38    VDUP.32         Q15, R7
39    VLD1.16         D1, [R2]!
40    VDUP.32         Q11, R4
41
42    MOV             R10, R0
43    MOV             R11, R2
44    ADD             R0, R0, #504
45    ADD             R2, R2, #248
46
47    VNEG.S32        Q14, Q11
48    VSHL.S32        Q10, Q15, Q14
49    MOV             R6, #64
50    MOV             R6, R6, LSL #1
51    ADD             R12, R12, R6
52    MOV             R7, #128
53    MOV             R9, R7, LSL #1
54    ADD             R1, R1, R9
55    MOV             R6, #16
56    MOV             R7, #128
57    MOV             R9, R7, LSL #1
58    MOV             R7, #256
59    MOV             R8, R7, LSL #1
60
61    MOV             R5, R5, LSL #1
62    VLD1.16         D2, [R0], R8
63    VMOV            Q13, Q10
64
65
66    VMLAL.S16       Q13, D0, D1
67    VLD1.16         D3, [R2], R9
68
69    VLD1.16         D4, [R0], R8
70    VMLAL.S16       Q13, D2, D3
71
72    VLD1.16         D5, [R2], R9
73
74    VLD1.16         D6, [R0], R8
75    VMLAL.S16       Q13, D5, D4
76
77    VLD1.16         D7, [R2], R9
78
79    VLD1.16         D8, [R0], R8
80    VMLAL.S16       Q13, D7, D6
81
82    VLD1.16         D9, [R2], R9
83    MOV             R0, R10
84
85
86    MOV             R2, R11
87    VLD1.16         D10, [R1]!
88    VMLAL.S16       Q13, D9, D8
89
90    MOV             R10, R1
91    VLD1.16         D11, [R12]!
92    ADD             R1, R1, #504
93
94
95
96    MOV             R11, R12
97    VLD1.16         D12, [R1], R8
98    ADD             R12, R12, #248
99
100    VMLAL.S16       Q13, D10, D11
101    VLD1.16         D13, [R12], R9
102
103    VLD1.16         D14, [R1], R8
104    VMLAL.S16       Q13, D12, D13
105
106    VLD1.16         D15, [R12], R9
107
108    VLD1.16         D16, [R1], R8
109    VMLAL.S16       Q13, D15, D14
110
111    VLD1.16         D17, [R12], R9
112
113    VLD1.16         D18, [R1], R8
114    VMLAL.S16       Q13, D17, D16
115
116    VLD1.16         D19, [R12], R9
117
118    VMLAL.S16       Q13, D19, D18
119    VLD1.16         D0, [R0]!
120    MOV             R12, R11
121
122    MOV             R1, R10
123    VLD1.16         D1, [R2]!
124    MOV             R10, R0
125
126    VQSHL.S32       Q13, Q13, Q11
127
128    ADD             R0, R0, #504
129
130    MOV             R11, R2
131    VLD1.16         D2, [R0], R8
132    ADD             R2, R2, #248
133
134    VSHR.S32        Q14, Q13, #16
135    VLD1.16         D3, [R2], R9
136
137
138    VUZP.16         D28, D29
139    VMOV            Q13, Q10
140
141
142
143
144
145    VLD1.16         D4, [R0], R8
146    VLD1.16         D5, [R2], R9
147
148    VLD1.16         D6, [R0], R8
149    VLD1.16         D7, [R2], R9
150
151    VLD1.16         D8, [R0], R8
152    VLD1.16         D9, [R2], R9
153    MOV             R0, R10
154
155
156    MOV             R2, R11
157    VLD1.16         D10, [R1]!
158
159    MOV             R10, R1
160    VLD1.16         D11, [R12]!
161    ADD             R1, R1, #504
162
163
164    MOV             R11, R12
165    VLD1.16         D12, [R1], R8
166    ADD             R12, R12, #248
167
168
169    VLD1.16         D13, [R12], R9
170
171    VLD1.16         D14, [R1], R8
172    VLD1.16         D15, [R12], R9
173
174    VLD1.16         D16, [R1], R8
175    VLD1.16         D17, [R12], R9
176
177    VLD1.16         D18, [R1], R8
178    SUB             R6, R6, #2
179    VLD1.16         D19, [R12], R9
180    MOV             R1, R10
181
182    MOV             R12, R11
183
184LOOP_1:
185
186    VMLAL.S16       Q13, D0, D1
187    VST1.16         D28[0], [R3], R5
188
189    VMLAL.S16       Q13, D2, D3
190    VLD1.16         D0, [R0]!
191    VMLAL.S16       Q13, D5, D4
192
193    VMLAL.S16       Q13, D7, D6
194    VST1.16         D28[1], [R3], R5
195
196
197    MOV             R10, R0
198    VLD1.16         D1, [R2]!
199    ADD             R0, R0, #504
200
201    VMLAL.S16       Q13, D9, D8
202    VST1.16         D28[2], [R3], R5
203
204    VMLAL.S16       Q13, D10, D11
205    VST1.16         D28[3], [R3], R5
206
207    MOV             R11, R2
208    VLD1.16         D2, [R0], R8
209    ADD             R2, R2, #248
210
211    VMLAL.S16       Q13, D12, D13
212    VLD1.16         D3, [R2], R9
213    VMLAL.S16       Q13, D15, D14
214
215    VMLAL.S16       Q13, D17, D16
216    VLD1.16         D4, [R0], R8
217    VMLAL.S16       Q13, D19, D18
218
219    VLD1.16         D5, [R2], R9
220
221    VLD1.16         D6, [R0], R8
222    VQSHL.S32       Q13, Q13, Q11
223
224    VSHR.S32        Q14, Q13, #16
225    VLD1.16         D7, [R2], R9
226    VMOV            Q13, Q10
227
228
229    VUZP.16         D28, D29
230    VMLAL.S16       Q13, D0, D1
231
232    VMLAL.S16       Q13, D2, D3
233    VLD1.16         D8, [R0], R8
234    VMLAL.S16       Q13, D5, D4
235
236    VMLAL.S16       Q13, D7, D6
237    VLD1.16         D9, [R2], R9
238
239
240    VLD1.16         D10, [R1]!
241    VMLAL.S16       Q13, D9, D8
242
243    MOV             R2, R11
244    VLD1.16         D11, [R12]!
245    MOV             R0, R10
246
247    MOV             R10, R1
248
249    ADD             R1, R1, #504
250
251    MOV             R11, R12
252    VLD1.16         D12, [R1], R8
253    ADD             R12, R12, #248
254
255    VLD1.16         D13, [R12], R9
256    VMLAL.S16       Q13, D10, D11
257
258    VLD1.16         D14, [R1], R8
259    VMLAL.S16       Q13, D12, D13
260
261    VLD1.16         D15, [R12], R9
262
263    VLD1.16         D16, [R1], R8
264    VMLAL.S16       Q13, D15, D14
265
266    VLD1.16         D17, [R12], R9
267
268    VLD1.16         D18, [R1], R8
269    VMLAL.S16       Q13, D17, D16
270
271    VLD1.16         D19, [R12], R9
272    MOV             R1, R10
273
274    VMLAL.S16       Q13, D19, D18
275    VST1.16         D28[0], [R3], R5
276
277    MOV             R12, R11
278    VLD1.16         D0, [R0]!
279
280    VLD1.16         D1, [R2]!
281    VQSHL.S32       Q13, Q13, Q11
282
283
284    VST1.16         D28[1], [R3], R5
285    MOV             R10, R0
286
287    VST1.16         D28[2], [R3], R5
288    ADD             R0, R0, #504
289
290    VST1.16         D28[3], [R3], R5
291    MOV             R11, R2
292
293    VSHR.S32        Q14, Q13, #16
294    VLD1.16         D2, [R0], R8
295    ADD             R2, R2, #248
296
297    VLD1.16         D3, [R2], R9
298    VLD1.16         D4, [R0], R8
299    VLD1.16         D5, [R2], R9
300    VLD1.16         D6, [R0], R8
301    VLD1.16         D7, [R2], R9
302    VLD1.16         D8, [R0], R8
303    VLD1.16         D9, [R2], R9
304
305    VUZP.16         D28, D29
306    VMOV            Q13, Q10
307
308
309
310
311    MOV             R0, R10
312    VLD1.16         D10, [R1]!
313    MOV             R2, R11
314
315    MOV             R10, R1
316    VLD1.16         D11, [R12]!
317    ADD             R1, R1, #504
318
319
320    MOV             R11, R12
321    VLD1.16         D12, [R1], R8
322    ADD             R12, R12, #248
323
324
325    VLD1.16         D13, [R12], R9
326
327    VLD1.16         D14, [R1], R8
328    VLD1.16         D15, [R12], R9
329
330    VLD1.16         D16, [R1], R8
331    VLD1.16         D17, [R12], R9
332
333    SUBS            R6, R6, #2
334    VLD1.16         D18, [R1], R8
335
336    MOV             R1, R10
337    VLD1.16         D19, [R12], R9
338
339    MOV             R12, R11
340
341
342    BGT             LOOP_1
343
344    VMLAL.S16       Q13, D0, D1
345    VST1.16         D28[0], [R3], R5
346    VMLAL.S16       Q13, D2, D3
347
348    VMLAL.S16       Q13, D5, D4
349    VST1.16         D28[1], [R3], R5
350    VMLAL.S16       Q13, D7, D6
351
352    VMLAL.S16       Q13, D9, D8
353    VST1.16         D28[2], [R3], R5
354    VMLAL.S16       Q13, D10, D11
355
356    VMLAL.S16       Q13, D12, D13
357    VST1.16         D28[3], [R3], R5
358    VMLAL.S16       Q13, D15, D14
359
360
361
362    VMLAL.S16       Q13, D17, D16
363
364    VMLAL.S16       Q13, D19, D18
365
366    VQSHL.S32       Q13, Q13, Q11
367
368    VSHR.S32        Q14, Q13, #16
369
370    VUZP.16         D28, D29
371
372
373    VST1.16         D28[0], [R3], R5
374    VST1.16         D28[1], [R3], R5
375    VST1.16         D28[2], [R3], R5
376    VST1.16         D28[3], [R3], R5
377
378    VPOP            {D8 - D15}
379    LDMFD           sp!, {R4-R12, R15}
380
381