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