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