xref: /aosp_15_r20/external/libxaac/decoder/armv7/ixheaacd_esbr_qmfsyn64_winadd.s (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1@VOID ixheaacd_esbr_qmfsyn64_winadd(
2@WORD32 *tmp1,
3@WORD32 *tmp2,
4@WORD32 *inp1,
5@WORD32 *sample_buffer,
6@WORD32 ch_fac)
7@R0->Word32 *tmp1
8@R1->Word32 *tmp2
9@R2->Word32 *inp1
10@R3->Word32 *sample_buffer
11@R5->ch_fac
12
13.text
14.p2align 2
15      .global ixheaacd_esbr_qmfsyn64_winadd
16      .type ixheaacd_esbr_qmfsyn64_winadd, %function
17
18ixheaacd_esbr_qmfsyn64_winadd:          @ PROC
19
20    STMFD           sp!, {R4-R12, R14}
21    VPUSH           {D8- D15}
22    LDR             R5, [SP, #104]
23
24    MOV             R7, #0
25    VLD1.32         {D0, D1}, [R0]!
26    MOV             R12, R2
27
28    VDUP.32         Q15, R7
29    VLD1.32         {D2, D3}, [R2]!
30
31    MOV             R10, R0
32    MOV             R11, R2
33    ADD             R0, R0, #1008
34    ADD             R2, R2, #496
35
36    MOV             R6, #64
37    MOV             R6, R6, LSL #2
38    ADD             R12, R12, R6
39    MOV             R7, #256
40    MOV             R9, R7, LSL #1
41    ADD             R1, R1, R9
42    MOV             R6, #64
43    MOV             R7, #256
44    MOV             R9, R7, LSL #1      @(256*2)
45    MOV             R7, #512
46    MOV             R8, R7, LSL #1      @(512*2)
47
48    MOV             R5, R5, LSL #2
49    VMOV            Q13, Q15
50    VMOV            Q14, Q15
51
52    VMLAL.S32       Q13, D0, D2
53    VMLAL.S32       Q14, D1, D3
54
55    VLD1.32         {D4, D5}, [R0], R8
56    VLD1.32         {D6, D7}, [R2], R9
57
58    VMLAL.S32       Q13, D6, D4
59    VMLAL.S32       Q14, D7, D5
60
61    VLD1.32         {D8, D9}, [R0], R8
62    VLD1.32         {D10, D11}, [R2], R9
63
64    VMLAL.S32       Q13, D10, D8
65    VMLAL.S32       Q14, D11, D9
66
67    VLD1.32         {D12, D13}, [R0], R8
68    VLD1.32         {D14, D15}, [R2], R9
69
70    VMLAL.S32       Q13, D12, D14
71    VMLAL.S32       Q14, D13, D15
72
73    VLD1.32         {D16, D17}, [R0], R8
74    VLD1.32         {D18, D19}, [R2], R9
75
76    VMLAL.S32       Q13, D16, D18
77    VMLAL.S32       Q14, D17, D19
78
79    MOV             R0, R10
80
81
82    MOV             R2, R11
83    VLD1.32         {D0, D1}, [R1]!
84    MOV             R10, R1
85    VLD1.32         {D2, D3}, [R12]!
86    ADD             R1, R1, #1008
87    MOV             R11, R12
88
89    VMLAL.S32       Q13, D0, D2
90    VMLAL.S32       Q14, D1, D3
91    VLD1.32         {D4, D5}, [R1], R8
92    ADD             R12, R12, #496
93
94    VLD1.32         {D6, D7}, [R12], R9
95
96    VMLAL.S32       Q13, D6, D4
97    VMLAL.S32       Q14, D7, D5
98
99    VLD1.32         {D8, D9}, [R1], R8
100    VLD1.32         {D10, D11}, [R12], R9
101
102    VMLAL.S32       Q13, D10, D8
103    VMLAL.S32       Q14, D11, D9
104
105    VLD1.32         {D12, D13}, [R1], R8
106    VLD1.32         {D14, D15}, [R12], R9
107
108    VMLAL.S32       Q13, D12, D14
109    VMLAL.S32       Q14, D13, D15
110
111    VLD1.32         {D16, D17}, [R1], R8
112    VLD1.32         {D18, D19}, [R12], R9
113
114    VMLAL.S32       Q13, D16, D18
115    VMLAL.S32       Q14, D17, D19
116
117    VSHRN.S64       D26 , Q13, #31
118
119    VST1.32         D26[0], [R3], R5
120    VST1.32         D26[1], [R3], R5
121
122    VSHRN.S64       D27 , Q14, #31
123
124    VST1.32         D27[0], [R3], R5
125    VST1.32         D27[1], [R3], R5
126
127    SUB             R6, R6, #8
128LOOP_1:
129
130    VLD1.32         {D0, D1}, [R0]!
131    MOV             R12, R11
132    MOV             R1, R10
133    VLD1.32         {D2, D3}, [R2]!
134    MOV             R10, R0
135
136    ADD             R0, R0, #1008
137
138    MOV             R11, R2
139    ADD             R2, R2, #496
140
141
142    VMOV            Q13, Q15
143    VMOV            Q14, Q15
144
145    VMLAL.S32       Q13, D0, D2
146    VMLAL.S32       Q14, D1, D3
147
148    VLD1.32         {D4, D5}, [R0], R8
149    VLD1.32         {D6, D7}, [R2], R9
150
151    VMLAL.S32       Q13, D6, D4
152    VMLAL.S32       Q14, D7, D5
153
154    VLD1.32         {D8, D9}, [R0], R8
155    VLD1.32         {D10, D11}, [R2], R9
156
157    VMLAL.S32       Q13, D10, D8
158    VMLAL.S32       Q14, D11, D9
159
160    VLD1.32         {D12, D13}, [R0], R8
161    VLD1.32         {D14, D15}, [R2], R9
162
163    VMLAL.S32       Q13, D12, D14
164    VMLAL.S32       Q14, D13, D15
165
166    VLD1.32         {D16, D17}, [R0], R8
167    VLD1.32         {D18, D19}, [R2], R9
168
169    VMLAL.S32       Q13, D16, D18
170    VMLAL.S32       Q14, D17, D19
171
172    MOV             R0, R10
173
174
175    MOV             R2, R11
176    VLD1.32         {D0, D1}, [R1]!
177    MOV             R10, R1
178    VLD1.32         {D2, D3}, [R12]!
179    ADD             R1, R1, #1008
180    MOV             R11, R12
181
182    VMLAL.S32       Q13, D0, D2
183    VMLAL.S32       Q14, D1, D3
184    VLD1.32         {D4, D5}, [R1], R8
185    ADD             R12, R12, #496
186
187    VLD1.32         {D6, D7}, [R12], R9
188
189    VMLAL.S32       Q13, D6, D4
190    VMLAL.S32       Q14, D7, D5
191
192    VLD1.32         {D8, D9}, [R1], R8
193    VLD1.32         {D10, D11}, [R12], R9
194
195    VMLAL.S32       Q13, D10, D8
196    VMLAL.S32       Q14, D11, D9
197
198    VLD1.32         {D12, D13}, [R1], R8
199    VLD1.32         {D14, D15}, [R12], R9
200
201    VMLAL.S32       Q13, D12, D14
202    VMLAL.S32       Q14, D13, D15
203
204    VLD1.32         {D16, D17}, [R1], R8
205    VLD1.32         {D18, D19}, [R12], R9
206
207    VMLAL.S32       Q13, D16, D18
208    VMLAL.S32       Q14, D17, D19
209
210    VSHRN.S64       D26 , Q13, #31
211
212    VST1.32         D26[0], [R3], R5
213    VST1.32         D26[1], [R3], R5
214
215    VSHRN.S64       D27 , Q14, #31
216
217    VST1.32         D27[0], [R3], R5
218    VST1.32         D27[1], [R3], R5
219@@@
220    VLD1.32         {D0, D1}, [R0]!
221    MOV             R12, R11
222    MOV             R1, R10
223    VLD1.32         {D2, D3}, [R2]!
224    MOV             R10, R0
225
226    VMOV            Q13, Q15
227    VMLAL.S32       Q13, D0, D2
228    VMOV            Q14, Q15
229    VMLAL.S32       Q14, D1, D3
230
231    ADD             R0, R0, #1008
232
233    MOV             R11, R2
234    VLD1.32         {D4, D5}, [R0], R8
235    ADD             R2, R2, #496
236
237
238    VLD1.32         {D6, D7}, [R2], R9
239
240    VMLAL.S32       Q13, D6, D4
241    VMLAL.S32       Q14, D7, D5
242
243    VLD1.32         {D8, D9}, [R0], R8
244    VLD1.32         {D10, D11}, [R2], R9
245
246    VMLAL.S32       Q13, D8, D10
247    VMLAL.S32       Q14, D9, D11
248
249    VLD1.32         {D12, D13}, [R0], R8
250    VLD1.32         {D14, D15}, [R2], R9
251
252    VMLAL.S32       Q13, D12, D14
253    VMLAL.S32       Q14, D13, D15
254
255    VLD1.32         {D16, D17}, [R0], R8
256    VLD1.32         {D18, D19}, [R2], R9
257
258    VMLAL.S32       Q13, D16, D18
259    VMLAL.S32       Q14, D17, D19
260
261    MOV             R0, R10
262
263
264    MOV             R2, R11
265    VLD1.32         {D0, D1}, [R1]!
266
267    MOV             R10, R1
268    VLD1.32         {D2, D3}, [R12]!
269    ADD             R1, R1, #1008
270
271    VMLAL.S32       Q13, D0, D2
272    VMLAL.S32       Q14, D1, D3
273
274    MOV             R11, R12
275    VLD1.32         {D4, D5}, [R1], R8
276    ADD             R12, R12, #496
277
278
279    VLD1.32         {D6, D7}, [R12], R9
280
281    VMLAL.S32       Q13, D6, D4
282    VMLAL.S32       Q14, D7, D5
283
284    VLD1.32         {D8, D9}, [R1], R8
285    VLD1.32         {D10, D11}, [R12], R9
286
287    VMLAL.S32       Q13, D8, D10
288    VMLAL.S32       Q14, D9, D11
289
290    VLD1.32         {D12, D13}, [R1], R8
291    VLD1.32         {D14, D15}, [R12], R9
292
293    VMLAL.S32       Q13, D12, D14
294    VMLAL.S32       Q14, D13, D15
295
296    VLD1.32         {D16, D17}, [R1], R8
297    VLD1.32         {D18, D19}, [R12], R9
298
299    VMLAL.S32       Q13, D16, D18
300    VMLAL.S32       Q14, D17, D19
301
302    VSHRN.S64       D26 , Q13, #31
303
304    VST1.32         D26[0], [R3], R5
305    VST1.32         D26[1], [R3], R5
306
307    VSHRN.S64       D27 , Q14, #31
308
309    VST1.32         D27[0], [R3], R5
310    VST1.32         D27[1], [R3], R5
311
312    SUBS            R6, R6, #8          @1
313
314    BGT             LOOP_1
315
316    VLD1.32         {D0, D1}, [R0]!
317    MOV             R12, R11
318    MOV             R1, R10
319    VLD1.32         {D2, D3}, [R2]!
320    MOV             R10, R0
321
322    VMOV            Q13, Q15
323    VMLAL.S32       Q13, D0, D2
324    VMOV            Q14, Q15
325    VMLAL.S32       Q14, D1, D3
326
327    ADD             R0, R0, #1008
328
329    MOV             R11, R2
330    VLD1.32         {D4, D5}, [R0], R8
331    ADD             R2, R2, #496
332
333
334    VLD1.32         {D6, D7}, [R2], R9
335
336    VMLAL.S32       Q13, D6, D4
337    VMLAL.S32       Q14, D7, D5
338
339    VLD1.32         {D8, D9}, [R0], R8
340    VLD1.32         {D10, D11}, [R2], R9
341
342    VMLAL.S32       Q13, D8, D10
343    VMLAL.S32       Q14, D9, D11
344
345    VLD1.32         {D12, D13}, [R0], R8
346    VLD1.32         {D14, D15}, [R2], R9
347
348    VMLAL.S32       Q13, D12, D14
349    VMLAL.S32       Q14, D13, D15
350
351    VLD1.32         {D16, D17}, [R0], R8
352    VLD1.32         {D18, D19}, [R2], R9
353
354    VMLAL.S32       Q13, D16, D18
355    VMLAL.S32       Q14, D17, D19
356
357    MOV             R0, R10
358
359
360    MOV             R2, R11
361    VLD1.32         {D0, D1}, [R1]!
362
363    MOV             R10, R1
364    VLD1.32         {D2, D3}, [R12]!
365    ADD             R1, R1, #1008
366
367    VMLAL.S32       Q13, D0, D2
368    VMLAL.S32       Q14, D1, D3
369
370    MOV             R11, R12
371    VLD1.32         {D4, D5}, [R1], R8
372    ADD             R12, R12, #496
373
374
375    VLD1.32         {D6, D7}, [R12], R9
376
377    VMLAL.S32       Q13, D6, D4
378    VMLAL.S32       Q14, D7, D5
379
380    VLD1.32         {D8, D9}, [R1], R8
381    VLD1.32         {D10, D11}, [R12], R9
382
383    VMLAL.S32       Q13, D8, D10
384    VMLAL.S32       Q14, D9, D11
385
386    VLD1.32         {D12, D13}, [R1], R8
387    VLD1.32         {D14, D15}, [R12], R9
388
389    VMLAL.S32       Q13, D12, D14
390    VMLAL.S32       Q14, D13, D15
391
392    VLD1.32         {D16, D17}, [R1], R8
393    VLD1.32         {D18, D19}, [R12], R9
394
395    VMLAL.S32       Q13, D16, D18
396    VMLAL.S32       Q14, D17, D19
397
398    VSHRN.S64       D26 , Q13, #31
399
400    VST1.32         D26[0], [R3], R5
401    VST1.32         D26[1], [R3], R5
402
403    VSHRN.S64       D27, Q14, #31
404
405    VST1.32         D27[0], [R3], R5
406    VST1.32         D27[1], [R3], R5
407
408    VPOP            {D8 - D15}
409    LDMFD           sp!, {R4-R12, R15}
410    @ ENDP
411