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