• 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_pretwiddle_compute_armv7
25
26ixheaacd_pretwiddle_compute_armv7:
27
28    STMFD           sp!, {R4-R12}
29    VPUSH           {d8 - d15}
30
31    MOVW            R8, #7500
32    ADD             R3, R3, R8
33    LDR             R4, [sp, #100]
34    LDR             R5, [sp, #104]
35
36    LSL             R7, R4, #4
37    ADD             R7, R2, R7
38    SUB             R7, R7, #4
39
40    MVN             R5, R5
41    ADD             R5, R5, #1
42
43ARM_PROLOGUE:
44    LDR             R8, [R3], #4
45    LDR             R9, [R0], #4
46
47    SMULWB          R12, R9, R8
48    LDR             R10, [R1], #-4
49    SMULWT          R11, R9, R8
50    SMLAWT          R9, R10, R8, R12
51    SMULWB          R6, R10, R8
52
53    MVN             R9, R9
54    ADD             R9, R9, #1
55
56    SUB             R11, R11, R6
57
58    CMP             R5, #0
59    BGT             NEXT
60    MVN             R8, R5
61    ADD             R8, R8, #1
62    ASR             R11, R11, R8
63    ASR             R9, R9, R8
64    B               NEXT1
65
66NEXT:
67    LSL             R11, R11, R5
68    LSL             R9, R9, R5
69
70
71
72NEXT1:
73    STR             R9, [R2], #4
74    STR             R11, [R2], #4
75
76    CMP             R4, #0x100
77    BNE             NXT
78    MOV             R6, #4
79    B               NXT1
80NXT:
81    MOV             R6, #32
82    ADD             R3, R3, #28
83
84NXT1:
85    SUB             R4, R4, #1
86    ASR             R4, R4, #2
87    SUB             R7, R7, #28
88
89
90
91
92
93
94
95
96
97
98
99
100NEON_PROLOGUE:
101
102    MOV             R8, #-32
103    VDUP.32         Q7, R5
104    SUB             R1, R1, #28
105
106    VLD2.16         {D8[0], D9[0]}, [R3], R6
107    VLD2.16         {D8[1], D9[1]}, [R3], R6
108    VLD2.16         {D8[2], D9[2]}, [R3], R6
109    VLD2.16         {D8[3], D9[3]}, [R3], R6
110
111    VREV64.16       Q5, Q4
112
113    VLD4.16         {D0, D1, D2, D3}, [R0]!
114    VLD4.16         {D4, D5, D6, D7}, [R1], R8
115
116    VREV64.16       Q0, Q0
117    VREV64.16       Q2, Q2
118
119
120
121
122
123
124    VMULL.U16       Q15, D2, D9
125    VMULL.U16       Q14, D4, D9
126    VMULL.U16       Q13, D2, D8
127    VMULL.U16       Q12, D4, D8
128
129    VSHR.U32        Q15, Q15, #16
130    VSHR.U32        Q14, Q14, #16
131    VSHR.U32        Q13, Q13, #16
132    VSHR.U32        Q12, Q12, #16
133
134    VMLAL.S16       Q15, D3, D9
135    VMLAL.S16       Q14, D5, D9
136    VMLAL.S16       Q13, D3, D8
137    VMLAL.S16       Q12, D5, D8
138
139    VADD.I32        Q14, Q13, Q14
140    VNEG.S32        Q14, Q14
141    VSUB.I32        Q15, Q15, Q12
142
143    VMULL.U16       Q11, D0, D11
144    VMULL.U16       Q10, D6, D11
145    VMULL.U16       Q9, D0, D10
146    VMULL.U16       Q8, D6, D10
147
148    VSHR.U32        Q11, Q11, #16
149    VSHR.U32        Q10, Q10, #16
150    VSHR.U32        Q9, Q9, #16
151    VSHR.U32        Q8, Q8, #16
152
153    VMLAL.S16       Q11, D1, D11
154    VLD2.16         {D8[0], D9[0]}, [R3], R6
155
156    VMLAL.S16       Q10, D7, D11
157    VLD2.16         {D8[1], D9[1]}, [R3], R6
158
159    VMLAL.S16       Q9, D1, D10
160    VLD2.16         {D8[2], D9[2]}, [R3], R6
161
162    VMLAL.S16       Q8, D7, D10
163    VLD2.16         {D8[3], D9[3]}, [R3], R6
164
165    VADD.I32        Q10, Q10, Q9
166
167    VNEG.S32        Q10, Q10
168    VREV64.16       Q5, Q4
169
170    VSUB.I32        Q11, Q8, Q11
171    VLD4.16         {D0, D1, D2, D3}, [R0]!
172
173
174
175    VSHL.S32        Q10, Q10, Q7
176    VLD4.16         {D4, D5, D6, D7}, [R1], R8
177
178    VREV64.16       Q0, Q0
179    VSHL.S32        Q11, Q11, Q7
180
181    VREV64.16       Q2, Q2
182    VSHL.S32        Q9, Q15, Q7
183    VSHL.S32        Q8, Q14, Q7
184
185
186
187    SUB             R4, R4, #2
188
189CORE_LOOP_PTC:
190    VMULL.U16       Q15, D2, D9
191    VST2.32         {Q8, Q9}, [R2]!
192    VMULL.U16       Q14, D4, D9
193
194    VMULL.U16       Q13, D2, D8
195    VST2.32         {Q10, Q11}, [R7], R8
196    VMULL.U16       Q12, D4, D8
197
198    VSHR.U32        Q15, Q15, #16
199    VSHR.U32        Q14, Q14, #16
200    VSHR.U32        Q13, Q13, #16
201    VSHR.U32        Q12, Q12, #16
202
203    VMLAL.S16       Q15, D3, D9
204    VMLAL.S16       Q14, D5, D9
205    VMLAL.S16       Q13, D3, D8
206    VMLAL.S16       Q12, D5, D8
207
208    VADD.I32        Q14, Q13, Q14
209    VNEG.S32        Q14, Q14
210    VSUB.I32        Q15, Q15, Q12
211
212    VMULL.U16       Q11, D0, D11
213    VLD2.16         {D8[0], D9[0]}, [R3], R6
214    VMULL.U16       Q10, D6, D11
215
216    VMULL.U16       Q9, D0, D10
217    VLD2.16         {D8[1], D9[1]}, [R3], R6
218    VMULL.U16       Q8, D6, D10
219
220    VSHR.U32        Q11, Q11, #16
221    VLD2.16         {D8[2], D9[2]}, [R3], R6
222    VSHR.U32        Q10, Q10, #16
223
224    VSHR.U32        Q9, Q9, #16
225    VLD2.16         {D8[3], D9[3]}, [R3], R6
226    VSHR.U32        Q8, Q8, #16
227
228    VMLAL.S16       Q11, D1, D11
229    VMLAL.S16       Q10, D7, D11
230    VMLAL.S16       Q9, D1, D10
231    VMLAL.S16       Q8, D7, D10
232
233    VLD4.16         {D0, D1, D2, D3}, [R0]!
234    VADD.I32        Q10, Q10, Q9
235
236    VNEG.S32        Q10, Q10
237    VREV64.16       Q5, Q4
238
239    VSUB.I32        Q11, Q8, Q11
240    VLD4.16         {D4, D5, D6, D7}, [R1], R8
241    VSHL.S32        Q10, Q10, Q7
242    VSHL.S32        Q11, Q11, Q7
243
244    VREV64.16       Q0, Q0
245    VSHL.S32        Q9, Q15, Q7
246
247    VREV64.16       Q2, Q2
248    VSHL.S32        Q8, Q14, Q7
249
250    SUBS            R4, R4, #1
251    BNE             CORE_LOOP_PTC
252
253NEON_EPILOGUE:
254    VMULL.U16       Q15, D2, D9
255    VST2.32         {Q8, Q9}, [R2]!
256    VMULL.U16       Q14, D4, D9
257
258    VMULL.U16       Q13, D2, D8
259    VST2.32         {Q10, Q11}, [R7], R8
260    VMULL.U16       Q12, D4, D8
261
262    VSHR.U32        Q15, Q15, #16
263    VSHR.U32        Q14, Q14, #16
264    VSHR.U32        Q13, Q13, #16
265    VSHR.U32        Q12, Q12, #16
266
267    VMLAL.S16       Q15, D3, D9
268    VMLAL.S16       Q14, D5, D9
269    VMLAL.S16       Q13, D3, D8
270    VMLAL.S16       Q12, D5, D8
271
272    VADD.I32        Q14, Q13, Q14
273    VNEG.S32        Q14, Q14
274    VSUB.I32        Q15, Q15, Q12
275
276    VMULL.U16       Q11, D0, D11
277    VMULL.U16       Q10, D6, D11
278    VMULL.U16       Q9, D0, D10
279    VMULL.U16       Q8, D6, D10
280
281    VSHR.U32        Q11, Q11, #16
282    VSHR.U32        Q10, Q10, #16
283    VSHR.U32        Q9, Q9, #16
284    VSHR.U32        Q8, Q8, #16
285
286    VMLAL.S16       Q11, D1, D11
287    VMLAL.S16       Q10, D7, D11
288    VMLAL.S16       Q9, D1, D10
289    VMLAL.S16       Q8, D7, D10
290
291    VADD.I32        Q10, Q10, Q9
292    VNEG.S32        Q10, Q10
293    VSUB.I32        Q11, Q8, Q11
294
295
296    VSHL.S32        Q10, Q10, Q7
297    VSHL.S32        Q11, Q11, Q7
298    VSHL.S32        Q9, Q15, Q7
299    VSHL.S32        Q8, Q14, Q7
300
301    VST2.32         {Q8, Q9}, [R2]!
302    VST2.32         {Q10, Q11}, [R7], R8
303
304
305RESIDUE_NEON:
306    MOV             R10, #-16
307    VMOV.S32        D3, #0x00000000
308    VMOV.S32        D4, #0x00000000
309
310    VLD2.32         {D0, D2}, [R0]!
311    VLD2.32         {D1[0], D3[0]}, [R0]!
312    VLD1.32         D1[1], [R0]
313
314    VUZP.16         D0, D1
315    VUZP.16         D2, D3
316
317    ADD             R1, R1, #4
318
319    VLD1.32         D6[0], [R1]!
320    VLD2.32         {D4[1], D6[1]}, [R1]!
321    VLD2.32         {D5, D7}, [R1]!
322
323    VUZP.16         D4, D5
324    VUZP.16         D6, D7
325
326    VREV64.16       Q0, Q0
327    VREV64.16       Q2, Q2
328
329    VLD2.16         {D8[0], D9[0]}, [R3], R6
330    VLD2.16         {D8[1], D9[1]}, [R3], R6
331    VLD2.16         {D8[2], D9[2]}, [R3], R6
332    VLD2.16         {D8[3], D9[3]}, [R3], R6
333
334    VREV64.16       Q5, Q4
335
336
337    VMULL.U16       Q15, D2, D9
338    VMULL.U16       Q14, D4, D9
339    VMULL.U16       Q13, D2, D8
340    VMULL.U16       Q12, D4, D8
341
342    VSHR.U32        Q15, Q15, #16
343    VSHR.U32        Q14, Q14, #16
344    VSHR.U32        Q13, Q13, #16
345    VSHR.U32        Q12, Q12, #16
346
347    VMLAL.S16       Q15, D3, D9
348    VMLAL.S16       Q14, D5, D9
349    VMLAL.S16       Q13, D3, D8
350    VMLAL.S16       Q12, D5, D8
351
352    VADD.I32        Q14, Q13, Q14
353    VNEG.S32        Q14, Q14
354    VSUB.I32        Q15, Q15, Q12
355
356    VMULL.U16       Q11, D0, D11
357    VMULL.U16       Q10, D6, D11
358    VMULL.U16       Q9, D0, D10
359    VMULL.U16       Q8, D6, D10
360
361    VSHR.U32        Q11, Q11, #16
362    VSHR.U32        Q10, Q10, #16
363    VSHR.U32        Q9, Q9, #16
364    VSHR.U32        Q8, Q8, #16
365
366    VMLAL.S16       Q11, D1, D11
367    VMLAL.S16       Q10, D7, D11
368    VMLAL.S16       Q9, D1, D10
369    VMLAL.S16       Q8, D7, D10
370
371    VADD.I32        Q10, Q10, Q9
372    VNEG.S32        Q10, Q10
373    VSUB.I32        Q11, Q8, Q11
374
375
376    VSHL.S32        Q10, Q10, Q7
377    VSHL.S32        Q11, Q11, Q7
378    VSHL.S32        Q9, Q15, Q7
379    VSHL.S32        Q8, Q14, Q7
380
381    VST2.32         {Q10, Q11}, [R7]
382    VST2.32         {D16, D18}, [R2]!
383    VST2.32         {D17[0], D19[0]}, [R2]!
384
385    VPOP            {d8 - d15}
386    LDMFD           sp!, {R4-R12}
387    BX              LR
388
389