xref: /aosp_15_r20/external/libxaac/decoder/armv7/ixheaacd_sbr_qmfanal32_winadds.s (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
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_qmfanal32_winadds
25    .type ixheaacd_sbr_qmfanal32_winadds, %function
26
27ixheaacd_sbr_qmfanal32_winadds:
28
29    STMFD           sp!, {R4-R12, R14}
30    VPUSH           {D8 - D15}
31    LDR             R5, [SP, #108]
32    LDR             R6, [SP, #112]
33    LDR             R7, [SP, #116]
34
35    MOV             R9, R7, LSL #1
36
37    ADD             r5, r5, #64
38    MOV             r10, #3
39
40LOOP:
41    LDRSH           r4  , [R6], r9
42    LDRSH           r8  , [R6], r9
43    LDRSH           r11  , [R6], r9
44    LDRSH           r12 , [R6], r9
45
46
47    STRH            r4  , [r5 , #-2]!
48    STRH            r8  , [r5 , #-2]!
49    STRH            r11  , [r5 , #-2]!
50    STRH            r12 , [r5 , #-2]!
51
52    LDRSH           r4  , [R6], r9
53    LDRSH           r8  , [R6], r9
54    LDRSH           r11  , [R6], r9
55    LDRSH           r12 , [R6], r9
56
57
58    STRH            r4  , [r5 , #-2]!
59    STRH            r8  , [r5 , #-2]!
60    STRH            r11  , [r5 , #-2]!
61    STRH            r12 , [r5 , #-2]!
62
63
64    SUBS            r10, r10, #1
65
66    BPL             LOOP
67
68    LDR             R4, [SP, #104]
69
70    MOV             R5, #8
71    VLD1.16         D0, [R0]!
72    MOV             R6, #64
73
74    MOV             R6, R6, LSL #1
75    VLD2.16         {D1, D2}, [R2]!
76    MOV             R7, #244
77
78    MOV             R9, R0
79    ADD             R0, R0, #120
80
81    MOV             R11, R4
82    VLD1.16         D2, [R0], R6
83    ADD             R11, R11, #128
84
85
86
87
88    MOV             R10, R2
89    ADD             R2, R2, #240
90
91    VMULL.S16       Q15, D0, D1
92    VLD2.16         {D3, D4}, [R2]!
93    ADD             R2, R2, #240
94
95
96    VLD1.16         D4, [R0], R6
97    VMLAL.S16       Q15, D2, D3
98
99    VLD2.16         {D5, D6}, [R2]!
100
101
102    ADD             R2, R2, #240
103    VLD1.16         D6, [R0], R6
104    VMLAL.S16       Q15, D4, D5
105
106    VLD2.16         {D7, D8}, [R2]!
107
108
109    ADD             R2, R2, #240
110    VLD1.16         D8, [R0], R6
111    VMLAL.S16       Q15, D6, D7
112
113    MOV             R0, R9
114    VLD2.16         {D9, D10}, [R2]!
115
116
117    ADD             R2, R2, #240
118    VLD1.16         D10, [R1]!
119    VMLAL.S16       Q15, D8, D9
120
121
122
123    MOV             R9, R1
124    VLD2.16         {D11, D12}, [R3]!
125    ADD             R1, R1, #120
126
127
128    MOV             R2, R10
129    VLD1.16         D12, [R1], R6
130    MOV             R10, R3
131
132    ADD             R3, R3, #240
133    VLD2.16         {D13, D14}, [R3]!
134    ADD             R3, R3, #240
135
136
137    VLD2.16         {D15, D16}, [R3]!
138
139    VLD1.16         D14, [R1], R6
140    ADD             R3, R3, #240
141
142
143
144    VLD1.16         D16, [R1], R6
145    SUB             R5, R5, #1
146
147    VLD2.16         {D17, D18}, [R3]!
148
149
150    ADD             R3, R3, #240
151    VLD1.16         D18, [R1], R6
152
153    MOV             R1, R9
154    VLD2.16         {D19, D20}, [R3]!
155
156    ADD             R3, R3, #240
157
158    MOV             R3, R10
159
160
161LOOP_1:
162
163
164    VLD1.16         D0, [R0]!
165
166    MOV             R9, R0
167    VLD2.16         {D1, D2}, [R2]!
168    ADD             R0, R0, #120
169
170    MOV             R10, R2
171    VST1.32         {Q15}, [R4]!
172    ADD             R2, R2, #240
173
174
175    VMULL.S16       Q15, D10, D11
176    VLD1.16         D2, [R0], R6
177    VMLAL.S16       Q15, D12, D13
178
179    VMLAL.S16       Q15, D14, D15
180    VLD2.16         {D3, D4}, [R2]!
181    VMLAL.S16       Q15, D16, D17
182
183    VMLAL.S16       Q15, D18, D19
184    VLD1.16         D4, [R0], R6
185    ADD             R2, R2, #240
186
187    VST1.32         {Q15}, [R11]!
188
189
190    VMULL.S16       Q15, D0, D1
191    VLD2.16         {D5, D6}, [R2]!
192    VMLAL.S16       Q15, D2, D3
193
194
195
196    ADD             R2, R2, #240
197    VLD1.16         D6, [R0], R6
198    VMLAL.S16       Q15, D4, D5
199
200    VLD2.16         {D7, D8}, [R2]!
201
202
203    ADD             R2, R2, #240
204    VLD1.16         D8, [R0], R6
205    VMLAL.S16       Q15, D6, D7
206
207    MOV             R0, R9
208    VLD2.16         {D9, D10}, [R2]!
209
210
211
212    ADD             R2, R2, #240
213    VLD1.16         D10, [R1]!
214    MOV             R2, R10
215
216    MOV             R9, R1
217    VLD2.16         {D11, D12}, [R3]!
218    ADD             R1, R1, #120
219
220
221    VMLAL.S16       Q15, D8, D9
222    VLD1.16         D12, [R1], R6
223    MOV             R10, R3
224
225
226    ADD             R3, R3, #240
227    VLD2.16         {D13, D14}, [R3]!
228    ADD             R3, R3, #240
229
230
231
232    VLD1.16         D14, [R1], R6
233    VLD2.16         {D15, D16}, [R3]!
234    ADD             R3, R3, #240
235
236
237    VLD1.16         D16, [R1], R6
238    VLD2.16         {D17, D18}, [R3]!
239    ADD             R3, R3, #240
240
241
242    VLD1.16         D18, [R1], R6
243    SUBS            R5, R5, #1
244
245    MOV             R1, R9
246    VLD2.16         {D19, D20}, [R3]!
247
248    ADD             R3, R3, #240
249
250    MOV             R3, R10
251
252    BGT             LOOP_1
253
254    VST1.32         {Q15}, [R4]!
255    VMULL.S16       Q15, D10, D11
256    VMLAL.S16       Q15, D12, D13
257
258    VMLAL.S16       Q15, D14, D15
259    VMLAL.S16       Q15, D16, D17
260    VMLAL.S16       Q15, D18, D19
261
262    VST1.32         {Q15}, [R11]!
263
264    VPOP            {D8 - D15}
265    LDMFD           sp!, {R4-R12, R15}
266
267