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