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