1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2012 Mans Rullgard
3cabdff1aSopenharmony_ci *
4cabdff1aSopenharmony_ci * This file is part of FFmpeg.
5cabdff1aSopenharmony_ci *
6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
10cabdff1aSopenharmony_ci *
11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14cabdff1aSopenharmony_ci * Lesser General Public License for more details.
15cabdff1aSopenharmony_ci *
16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19cabdff1aSopenharmony_ci */
20cabdff1aSopenharmony_ci
21cabdff1aSopenharmony_ci#include "libavutil/arm/asm.S"
22cabdff1aSopenharmony_ci
23cabdff1aSopenharmony_cifunction ff_sbr_sum64x5_neon, export=1
24cabdff1aSopenharmony_ci        push            {lr}
25cabdff1aSopenharmony_ci        add             r1,  r0,  # 64*4
26cabdff1aSopenharmony_ci        add             r2,  r0,  #128*4
27cabdff1aSopenharmony_ci        add             r3,  r0,  #192*4
28cabdff1aSopenharmony_ci        add             lr,  r0,  #256*4
29cabdff1aSopenharmony_ci        mov             r12, #64
30cabdff1aSopenharmony_ci1:
31cabdff1aSopenharmony_ci        vld1.32         {q0},     [r0,:128]
32cabdff1aSopenharmony_ci        vld1.32         {q1},     [r1,:128]!
33cabdff1aSopenharmony_ci        vadd.f32        q0,  q0,  q1
34cabdff1aSopenharmony_ci        vld1.32         {q2},     [r2,:128]!
35cabdff1aSopenharmony_ci        vadd.f32        q0,  q0,  q2
36cabdff1aSopenharmony_ci        vld1.32         {q3},     [r3,:128]!
37cabdff1aSopenharmony_ci        vadd.f32        q0,  q0,  q3
38cabdff1aSopenharmony_ci        vld1.32         {q8},     [lr,:128]!
39cabdff1aSopenharmony_ci        vadd.f32        q0,  q0,  q8
40cabdff1aSopenharmony_ci        vst1.32         {q0},     [r0,:128]!
41cabdff1aSopenharmony_ci        subs            r12, #4
42cabdff1aSopenharmony_ci        bgt             1b
43cabdff1aSopenharmony_ci        pop             {pc}
44cabdff1aSopenharmony_ciendfunc
45cabdff1aSopenharmony_ci
46cabdff1aSopenharmony_cifunction ff_sbr_sum_square_neon, export=1
47cabdff1aSopenharmony_ci        vmov.f32        q0,  #0.0
48cabdff1aSopenharmony_ci1:
49cabdff1aSopenharmony_ci        vld1.32         {q1},     [r0,:128]!
50cabdff1aSopenharmony_ci        vmla.f32        q0,  q1,  q1
51cabdff1aSopenharmony_ci        subs            r1,  r1,  #2
52cabdff1aSopenharmony_ci        bgt             1b
53cabdff1aSopenharmony_ci        vadd.f32        d0,  d0,  d1
54cabdff1aSopenharmony_ci        vpadd.f32       d0,  d0,  d0
55cabdff1aSopenharmony_ciNOVFP   vmov.32         r0,  d0[0]
56cabdff1aSopenharmony_ci        bx              lr
57cabdff1aSopenharmony_ciendfunc
58cabdff1aSopenharmony_ci
59cabdff1aSopenharmony_cifunction ff_sbr_neg_odd_64_neon, export=1
60cabdff1aSopenharmony_ci        mov             r1,  r0
61cabdff1aSopenharmony_ci        vmov.i32        q8,  #1<<31
62cabdff1aSopenharmony_ci        vld2.32         {q0,q1},  [r0,:128]!
63cabdff1aSopenharmony_ci        veor            q1,  q1,  q8
64cabdff1aSopenharmony_ci        vld2.32         {q2,q3},  [r0,:128]!
65cabdff1aSopenharmony_ci    .rept 3
66cabdff1aSopenharmony_ci        vst2.32         {q0,q1},  [r1,:128]!
67cabdff1aSopenharmony_ci        veor            q3,  q3,  q8
68cabdff1aSopenharmony_ci        vld2.32         {q0,q1},  [r0,:128]!
69cabdff1aSopenharmony_ci        vst2.32         {q2,q3},  [r1,:128]!
70cabdff1aSopenharmony_ci        veor            q1,  q1,  q8
71cabdff1aSopenharmony_ci        vld2.32         {q2,q3},  [r0,:128]!
72cabdff1aSopenharmony_ci    .endr
73cabdff1aSopenharmony_ci        veor            q3,  q3,  q8
74cabdff1aSopenharmony_ci        vst2.32         {q0,q1},  [r1,:128]!
75cabdff1aSopenharmony_ci        vst2.32         {q2,q3},  [r1,:128]!
76cabdff1aSopenharmony_ci        bx              lr
77cabdff1aSopenharmony_ciendfunc
78cabdff1aSopenharmony_ci
79cabdff1aSopenharmony_cifunction ff_sbr_qmf_pre_shuffle_neon, export=1
80cabdff1aSopenharmony_ci        add             r1,  r0,  #60*4
81cabdff1aSopenharmony_ci        add             r2,  r0,  #64*4
82cabdff1aSopenharmony_ci        vld1.32         {d0},     [r0,:64]!
83cabdff1aSopenharmony_ci        vst1.32         {d0},     [r2,:64]!
84cabdff1aSopenharmony_ci        mov             r3,  #-16
85cabdff1aSopenharmony_ci        mov             r12, #24
86cabdff1aSopenharmony_ci        vmov.i32        q8,  #1<<31
87cabdff1aSopenharmony_ci        vld1.32         {q0},     [r1,:128], r3
88cabdff1aSopenharmony_ci        vld1.32         {d2},     [r0,:64]!
89cabdff1aSopenharmony_ci1:
90cabdff1aSopenharmony_ci        vld1.32         {d3,d4},  [r0,:128]!
91cabdff1aSopenharmony_ci        vrev64.32       q0,  q0
92cabdff1aSopenharmony_ci        vld1.32         {q9},     [r1,:128], r3
93cabdff1aSopenharmony_ci        veor            q0,  q0,  q8
94cabdff1aSopenharmony_ci        vld1.32         {d5,d6},  [r0,:128]!
95cabdff1aSopenharmony_ci        vswp            d0,  d1
96cabdff1aSopenharmony_ci        vrev64.32       q9,  q9
97cabdff1aSopenharmony_ci        vst2.32         {q0,q1},  [r2,:64]!
98cabdff1aSopenharmony_ci        vmov            q10, q2
99cabdff1aSopenharmony_ci        veor            q9,  q9,  q8
100cabdff1aSopenharmony_ci        vmov            d2,  d6
101cabdff1aSopenharmony_ci        vswp            d18, d19
102cabdff1aSopenharmony_ci        vld1.32         {q0},     [r1,:128], r3
103cabdff1aSopenharmony_ci        vst2.32         {q9,q10}, [r2,:64]!
104cabdff1aSopenharmony_ci        subs            r12, r12, #8
105cabdff1aSopenharmony_ci        bgt             1b
106cabdff1aSopenharmony_ci        vld1.32         {d3,d4},  [r0,:128]!
107cabdff1aSopenharmony_ci        vrev64.32       q0,  q0
108cabdff1aSopenharmony_ci        vld1.32         {q9},     [r1,:128], r3
109cabdff1aSopenharmony_ci        veor            q0,  q0,  q8
110cabdff1aSopenharmony_ci        vld1.32         {d5},     [r0,:64]!
111cabdff1aSopenharmony_ci        vswp            d0,  d1
112cabdff1aSopenharmony_ci        vrev64.32       q9,  q9
113cabdff1aSopenharmony_ci        vst2.32         {q0,q1},  [r2,:64]!
114cabdff1aSopenharmony_ci        vswp            d4,  d5
115cabdff1aSopenharmony_ci        veor            q1,  q9,  q8
116cabdff1aSopenharmony_ci        vst2.32         {d3,d5},  [r2,:64]!
117cabdff1aSopenharmony_ci        vst2.32         {d2[0],d4[0]}, [r2,:64]!
118cabdff1aSopenharmony_ci        bx              lr
119cabdff1aSopenharmony_ciendfunc
120cabdff1aSopenharmony_ci
121cabdff1aSopenharmony_cifunction ff_sbr_qmf_post_shuffle_neon, export=1
122cabdff1aSopenharmony_ci        add             r2,  r1,  #60*4
123cabdff1aSopenharmony_ci        mov             r3,  #-16
124cabdff1aSopenharmony_ci        mov             r12, #32
125cabdff1aSopenharmony_ci        vmov.i32        q8,  #1<<31
126cabdff1aSopenharmony_ci        vld1.32         {q0},     [r2,:128], r3
127cabdff1aSopenharmony_ci        vld1.32         {q1},     [r1,:128]!
128cabdff1aSopenharmony_ci1:
129cabdff1aSopenharmony_ci        pld             [r2, #-32]
130cabdff1aSopenharmony_ci        vrev64.32       q0,  q0
131cabdff1aSopenharmony_ci        vswp            d2,  d3
132cabdff1aSopenharmony_ci        veor            q0,  q0,  q8
133cabdff1aSopenharmony_ci        vld1.32         {q2},     [r2,:128], r3
134cabdff1aSopenharmony_ci        vld1.32         {q3},     [r1,:128]!
135cabdff1aSopenharmony_ci        vst2.32         {d1,d3},  [r0,:128]!
136cabdff1aSopenharmony_ci        vst2.32         {d0,d2},  [r0,:128]!
137cabdff1aSopenharmony_ci        pld             [r2, #-32]
138cabdff1aSopenharmony_ci        vrev64.32       q2,  q2
139cabdff1aSopenharmony_ci        vswp            d6,  d7
140cabdff1aSopenharmony_ci        veor            q2,  q2,  q8
141cabdff1aSopenharmony_ci        vld1.32         {q0},     [r2,:128], r3
142cabdff1aSopenharmony_ci        vld1.32         {q1},     [r1,:128]!
143cabdff1aSopenharmony_ci        vst2.32         {d5,d7},  [r0,:128]!
144cabdff1aSopenharmony_ci        vst2.32         {d4,d6},  [r0,:128]!
145cabdff1aSopenharmony_ci        subs            r12, r12, #8
146cabdff1aSopenharmony_ci        bgt             1b
147cabdff1aSopenharmony_ci        bx              lr
148cabdff1aSopenharmony_ciendfunc
149cabdff1aSopenharmony_ci
150cabdff1aSopenharmony_cifunction ff_sbr_qmf_deint_neg_neon, export=1
151cabdff1aSopenharmony_ci        add             r1,  r1,  #60*4
152cabdff1aSopenharmony_ci        add             r2,  r0,  #62*4
153cabdff1aSopenharmony_ci        mov             r3,  #-16
154cabdff1aSopenharmony_ci        mov             r12, #32
155cabdff1aSopenharmony_ci        vmov.i32        d2,  #1<<31
156cabdff1aSopenharmony_ci1:
157cabdff1aSopenharmony_ci        vld2.32         {d0,d1},  [r1,:128], r3
158cabdff1aSopenharmony_ci        veor            d0,  d0,  d2
159cabdff1aSopenharmony_ci        vrev64.32       d1,  d1
160cabdff1aSopenharmony_ci        vst1.32         {d0},     [r2,:64]
161cabdff1aSopenharmony_ci        vst1.32         {d1},     [r0,:64]!
162cabdff1aSopenharmony_ci        sub             r2,  r2,  #8
163cabdff1aSopenharmony_ci        subs            r12, r12, #2
164cabdff1aSopenharmony_ci        bgt             1b
165cabdff1aSopenharmony_ci        bx              lr
166cabdff1aSopenharmony_ciendfunc
167cabdff1aSopenharmony_ci
168cabdff1aSopenharmony_cifunction ff_sbr_qmf_deint_bfly_neon, export=1
169cabdff1aSopenharmony_ci        push            {lr}
170cabdff1aSopenharmony_ci        add             r2,  r2,  #60*4
171cabdff1aSopenharmony_ci        add             r3,  r0,  #124*4
172cabdff1aSopenharmony_ci        mov             r12, #64
173cabdff1aSopenharmony_ci        mov             lr,  #-16
174cabdff1aSopenharmony_ci1:
175cabdff1aSopenharmony_ci        vld1.32         {q0},     [r1,:128]!
176cabdff1aSopenharmony_ci        vld1.32         {q1},     [r2,:128], lr
177cabdff1aSopenharmony_ci        vrev64.32       q2,  q0
178cabdff1aSopenharmony_ci        vrev64.32       q3,  q1
179cabdff1aSopenharmony_ci        vadd.f32        d3,  d4,  d3
180cabdff1aSopenharmony_ci        vadd.f32        d2,  d5,  d2
181cabdff1aSopenharmony_ci        vsub.f32        d0,  d0,  d7
182cabdff1aSopenharmony_ci        vsub.f32        d1,  d1,  d6
183cabdff1aSopenharmony_ci        vst1.32         {q1},     [r3,:128], lr
184cabdff1aSopenharmony_ci        vst1.32         {q0},     [r0,:128]!
185cabdff1aSopenharmony_ci        subs            r12, r12, #4
186cabdff1aSopenharmony_ci        bgt             1b
187cabdff1aSopenharmony_ci        pop             {pc}
188cabdff1aSopenharmony_ciendfunc
189cabdff1aSopenharmony_ci
190cabdff1aSopenharmony_cifunction ff_sbr_hf_g_filt_neon, export=1
191cabdff1aSopenharmony_ci        ldr             r12, [sp]
192cabdff1aSopenharmony_ci        add             r1,  r1,  r12, lsl #3
193cabdff1aSopenharmony_ci        mov             r12, #40*2*4
194cabdff1aSopenharmony_ci        sub             r3,  r3,  #1
195cabdff1aSopenharmony_ci        vld2.32         {d2[],d3[]},[r2,:64]!
196cabdff1aSopenharmony_ci        vld1.32         {d0},     [r1,:64], r12
197cabdff1aSopenharmony_ci1:
198cabdff1aSopenharmony_ci        vld1.32         {d1},     [r1,:64], r12
199cabdff1aSopenharmony_ci        vmul.f32        q3,  q0,  q1
200cabdff1aSopenharmony_ci        vld2.32         {d2[],d3[]},[r2,:64]!
201cabdff1aSopenharmony_ci        vld1.32         {d0},     [r1,:64], r12
202cabdff1aSopenharmony_ci        vst1.32         {q3},     [r0,:64]!
203cabdff1aSopenharmony_ci        subs            r3,  r3,  #2
204cabdff1aSopenharmony_ci        bgt             1b
205cabdff1aSopenharmony_ci        it              lt
206cabdff1aSopenharmony_ci        bxlt            lr
207cabdff1aSopenharmony_ci        vmul.f32        d0,  d0,  d2
208cabdff1aSopenharmony_ci        vst1.32         {d0},     [r0,:64]!
209cabdff1aSopenharmony_ci        bx              lr
210cabdff1aSopenharmony_ciendfunc
211cabdff1aSopenharmony_ci
212cabdff1aSopenharmony_cifunction ff_sbr_hf_gen_neon, export=1
213cabdff1aSopenharmony_ciNOVFP   vld1.32         {d1[]},   [sp,:32]
214cabdff1aSopenharmony_ciVFP     vdup.32         d1,  d0[0]
215cabdff1aSopenharmony_ci        vmul.f32        d0,  d1,  d1
216cabdff1aSopenharmony_ci        vld1.32         {d3},     [r2,:64]
217cabdff1aSopenharmony_ci        vld1.32         {d2},     [r3,:64]
218cabdff1aSopenharmony_ci        vmul.f32        q0,  q0,  q1
219cabdff1aSopenharmony_ci        ldrd            r2,  r3,  [sp, #4*!HAVE_VFP_ARGS]
220cabdff1aSopenharmony_ci        vtrn.32         d0,  d1
221cabdff1aSopenharmony_ci        vneg.f32        d18, d1
222cabdff1aSopenharmony_ci        vtrn.32         d18, d1
223cabdff1aSopenharmony_ci        add             r0,  r0,  r2,  lsl #3
224cabdff1aSopenharmony_ci        add             r1,  r1,  r2,  lsl #3
225cabdff1aSopenharmony_ci        sub             r1,  r1,  #2*8
226cabdff1aSopenharmony_ci        sub             r3,  r3,  r2
227cabdff1aSopenharmony_ci        vld1.32         {q1},     [r1,:128]!
228cabdff1aSopenharmony_ci1:
229cabdff1aSopenharmony_ci        vld1.32         {q3},     [r1,:128]!
230cabdff1aSopenharmony_ci        vrev64.32       q2,  q1
231cabdff1aSopenharmony_ci        vmov            q8,  q3
232cabdff1aSopenharmony_ci        vrev64.32       d20, d3
233cabdff1aSopenharmony_ci        vrev64.32       d21, d6
234cabdff1aSopenharmony_ci        vmla.f32        q3,  q1,  d0[0]
235cabdff1aSopenharmony_ci        vmla.f32        d6,  d4,  d18
236cabdff1aSopenharmony_ci        vmla.f32        d7,  d20, d18
237cabdff1aSopenharmony_ci        vmla.f32        d6,  d3,  d0[1]
238cabdff1aSopenharmony_ci        vmla.f32        d7,  d16, d0[1]
239cabdff1aSopenharmony_ci        vmla.f32        d6,  d5,  d1
240cabdff1aSopenharmony_ci        vmla.f32        d7,  d21, d1
241cabdff1aSopenharmony_ci        vmov            q1,  q8
242cabdff1aSopenharmony_ci        vst1.32         {q3},     [r0,:128]!
243cabdff1aSopenharmony_ci        subs            r3,  r3,  #2
244cabdff1aSopenharmony_ci        bgt             1b
245cabdff1aSopenharmony_ci        bx              lr
246cabdff1aSopenharmony_ciendfunc
247cabdff1aSopenharmony_ci
248cabdff1aSopenharmony_cifunction ff_sbr_autocorrelate_neon, export=1
249cabdff1aSopenharmony_ci        vld1.32         {q0},     [r0,:128]!
250cabdff1aSopenharmony_ci        vmov.f32        q1,  #0.0
251cabdff1aSopenharmony_ci        vmov.f32        q3,  #0.0
252cabdff1aSopenharmony_ci        vmov.f32        d20, #0.0
253cabdff1aSopenharmony_ci        vmul.f32        d21, d1,  d1
254cabdff1aSopenharmony_ci        vmov            q8,  q0
255cabdff1aSopenharmony_ci        vmov            q11, q0
256cabdff1aSopenharmony_ci        mov             r12, #36
257cabdff1aSopenharmony_ci1:
258cabdff1aSopenharmony_ci        vld1.32         {q2},     [r0,:128]!
259cabdff1aSopenharmony_ci        vrev64.32       q12, q2
260cabdff1aSopenharmony_ci        vmla.f32        q10, q2,  q2
261cabdff1aSopenharmony_ci        vmla.f32        d2,  d1,  d4
262cabdff1aSopenharmony_ci        vmla.f32        d3,  d1,  d24
263cabdff1aSopenharmony_ci        vmla.f32        d6,  d0,  d4
264cabdff1aSopenharmony_ci        vmla.f32        d7,  d0,  d24
265cabdff1aSopenharmony_ci        vmla.f32        d2,  d4,  d5
266cabdff1aSopenharmony_ci        vmla.f32        d3,  d4,  d25
267cabdff1aSopenharmony_ci        vmla.f32        d6,  d1,  d5
268cabdff1aSopenharmony_ci        vmla.f32        d7,  d1,  d25
269cabdff1aSopenharmony_ci        vmov            q0,  q2
270cabdff1aSopenharmony_ci        subs            r12, r12, #2
271cabdff1aSopenharmony_ci        bgt             1b
272cabdff1aSopenharmony_ci        vld1.32         {q2},     [r0,:128]!
273cabdff1aSopenharmony_ci        vrev64.32       q12, q2
274cabdff1aSopenharmony_ci        vmla.f32        d2,  d1,  d4
275cabdff1aSopenharmony_ci        vmla.f32        d3,  d1,  d24
276cabdff1aSopenharmony_ci        vmla.f32        d6,  d0,  d4
277cabdff1aSopenharmony_ci        vmla.f32        d7,  d0,  d24
278cabdff1aSopenharmony_ci        vadd.f32        d20, d20, d21
279cabdff1aSopenharmony_ci        vrev64.32       d18, d17
280cabdff1aSopenharmony_ci        vmla.f32        d6,  d1,  d5
281cabdff1aSopenharmony_ci        vmla.f32        d7,  d1,  d25
282cabdff1aSopenharmony_ci        vmov            q0,  q1
283cabdff1aSopenharmony_ci        vmla.f32        d0,  d16, d17
284cabdff1aSopenharmony_ci        vmla.f32        d1,  d16, d18
285cabdff1aSopenharmony_ci        vmla.f32        d2,  d4,  d5
286cabdff1aSopenharmony_ci        vmla.f32        d3,  d4,  d25
287cabdff1aSopenharmony_ci        vneg.f32        s15, s15
288cabdff1aSopenharmony_ci        vmov            d21, d20
289cabdff1aSopenharmony_ci        vpadd.f32       d0,  d0,  d2
290cabdff1aSopenharmony_ci        vpadd.f32       d7,  d6,  d7
291cabdff1aSopenharmony_ci        vtrn.32         d1,  d3
292cabdff1aSopenharmony_ci        vsub.f32        d6,  d1,  d3
293cabdff1aSopenharmony_ci        vmla.f32        d20, d22, d22
294cabdff1aSopenharmony_ci        vmla.f32        d21, d4,  d4
295cabdff1aSopenharmony_ci        vtrn.32         d0,  d6
296cabdff1aSopenharmony_ci        vpadd.f32       d20, d20, d21
297cabdff1aSopenharmony_ci        vst1.32         {q3},     [r1,:128]!
298cabdff1aSopenharmony_ci        vst1.32         {d20[1]}, [r1,:32]
299cabdff1aSopenharmony_ci        add             r1,  r1,  #2*4
300cabdff1aSopenharmony_ci        vst1.32         {d0},     [r1,:64]
301cabdff1aSopenharmony_ci        add             r1,  r1,  #4*4
302cabdff1aSopenharmony_ci        vst1.32         {d20[0]}, [r1,:32]
303cabdff1aSopenharmony_ci        bx              lr
304cabdff1aSopenharmony_ciendfunc
305cabdff1aSopenharmony_ci
306cabdff1aSopenharmony_cifunction ff_sbr_hf_apply_noise_0_neon, export=1
307cabdff1aSopenharmony_ci        vmov.i32        d3,  #0
308cabdff1aSopenharmony_ci.Lhf_apply_noise_0:
309cabdff1aSopenharmony_ci        push            {r4,lr}
310cabdff1aSopenharmony_ci        movrelx         r4,  X(ff_sbr_noise_table)
311cabdff1aSopenharmony_ci        ldr             r12, [sp, #12]
312cabdff1aSopenharmony_ci        add             r3,  r3,  #1
313cabdff1aSopenharmony_ci        bfc             r3,  #9,  #23
314cabdff1aSopenharmony_ci        sub             r12, r12, #1
315cabdff1aSopenharmony_ci1:
316cabdff1aSopenharmony_ci        add             lr,  r4,  r3,  lsl #3
317cabdff1aSopenharmony_ci        vld2.32         {q0},     [r0,:64]
318cabdff1aSopenharmony_ci        vld2.32         {q3},     [lr,:64]
319cabdff1aSopenharmony_ci        vld1.32         {d2},     [r1,:64]!
320cabdff1aSopenharmony_ci        vld1.32         {d18},    [r2,:64]!
321cabdff1aSopenharmony_ci        vceq.f32        d16, d2,  #0
322cabdff1aSopenharmony_ci        veor            d2,  d2,  d3
323cabdff1aSopenharmony_ci        vmov            q2,  q0
324cabdff1aSopenharmony_ci        vmla.f32        d0,  d6,  d18
325cabdff1aSopenharmony_ci        vmla.f32        d1,  d7,  d18
326cabdff1aSopenharmony_ci        vadd.f32        d4,  d4,  d2
327cabdff1aSopenharmony_ci        add             r3,  r3,  #2
328cabdff1aSopenharmony_ci        bfc             r3,  #9,  #23
329cabdff1aSopenharmony_ci        vbif            d0,  d4,  d16
330cabdff1aSopenharmony_ci        vbif            d1,  d5,  d16
331cabdff1aSopenharmony_ci        vst2.32         {q0},     [r0,:64]!
332cabdff1aSopenharmony_ci        subs            r12, r12, #2
333cabdff1aSopenharmony_ci        bgt             1b
334cabdff1aSopenharmony_ci        blt             2f
335cabdff1aSopenharmony_ci        add             lr,  r4,  r3,  lsl #3
336cabdff1aSopenharmony_ci        vld1.32         {d0},     [r0,:64]
337cabdff1aSopenharmony_ci        vld1.32         {d6},     [lr,:64]
338cabdff1aSopenharmony_ci        vld1.32         {d2[]},   [r1,:32]!
339cabdff1aSopenharmony_ci        vld1.32         {d18[]},  [r2,:32]!
340cabdff1aSopenharmony_ci        vceq.f32        d4,  d2,  #0
341cabdff1aSopenharmony_ci        veor            d2,  d2,  d3
342cabdff1aSopenharmony_ci        vmov            d1,  d0
343cabdff1aSopenharmony_ci        vmla.f32        d0,  d6,  d18
344cabdff1aSopenharmony_ci        vadd.f32        s2,  s2,  s4
345cabdff1aSopenharmony_ci        vbif            d0,  d1,  d4
346cabdff1aSopenharmony_ci        vst1.32         {d0},     [r0,:64]!
347cabdff1aSopenharmony_ci2:
348cabdff1aSopenharmony_ci        pop             {r4,pc}
349cabdff1aSopenharmony_ciendfunc
350cabdff1aSopenharmony_ci
351cabdff1aSopenharmony_cifunction ff_sbr_hf_apply_noise_1_neon, export=1
352cabdff1aSopenharmony_ci        ldr             r12, [sp]
353cabdff1aSopenharmony_ci        push            {r4,lr}
354cabdff1aSopenharmony_ci        lsl             r12, r12, #31
355cabdff1aSopenharmony_ci        eor             lr,  r12, #1<<31
356cabdff1aSopenharmony_ci        vmov            d3,  r12, lr
357cabdff1aSopenharmony_ci.Lhf_apply_noise_1:
358cabdff1aSopenharmony_ci        movrelx         r4,  X(ff_sbr_noise_table)
359cabdff1aSopenharmony_ci        ldr             r12, [sp, #12]
360cabdff1aSopenharmony_ci        add             r3,  r3,  #1
361cabdff1aSopenharmony_ci        bfc             r3,  #9,  #23
362cabdff1aSopenharmony_ci        sub             r12, r12, #1
363cabdff1aSopenharmony_ci1:
364cabdff1aSopenharmony_ci        add             lr,  r4,  r3,  lsl #3
365cabdff1aSopenharmony_ci        vld2.32         {q0},     [r0,:64]
366cabdff1aSopenharmony_ci        vld2.32         {q3},     [lr,:64]
367cabdff1aSopenharmony_ci        vld1.32         {d2},     [r1,:64]!
368cabdff1aSopenharmony_ci        vld1.32         {d18},    [r2,:64]!
369cabdff1aSopenharmony_ci        vceq.f32        d16, d2,  #0
370cabdff1aSopenharmony_ci        veor            d2,  d2,  d3
371cabdff1aSopenharmony_ci        vmov            q2,  q0
372cabdff1aSopenharmony_ci        vmla.f32        d0,  d6,  d18
373cabdff1aSopenharmony_ci        vmla.f32        d1,  d7,  d18
374cabdff1aSopenharmony_ci        vadd.f32        d5,  d5,  d2
375cabdff1aSopenharmony_ci        add             r3,  r3,  #2
376cabdff1aSopenharmony_ci        bfc             r3,  #9,  #23
377cabdff1aSopenharmony_ci        vbif            d0,  d4,  d16
378cabdff1aSopenharmony_ci        vbif            d1,  d5,  d16
379cabdff1aSopenharmony_ci        vst2.32         {q0},     [r0,:64]!
380cabdff1aSopenharmony_ci        subs            r12, r12, #2
381cabdff1aSopenharmony_ci        bgt             1b
382cabdff1aSopenharmony_ci        blt             2f
383cabdff1aSopenharmony_ci        add             lr,  r4,  r3,  lsl #3
384cabdff1aSopenharmony_ci        vld1.32         {d0},     [r0,:64]
385cabdff1aSopenharmony_ci        vld1.32         {d6},     [lr,:64]
386cabdff1aSopenharmony_ci        vld1.32         {d2[]},   [r1,:32]!
387cabdff1aSopenharmony_ci        vld1.32         {d18[]},  [r2,:32]!
388cabdff1aSopenharmony_ci        vceq.f32        d4,  d2,  #0
389cabdff1aSopenharmony_ci        veor            d2,  d2,  d3
390cabdff1aSopenharmony_ci        vmov            d1,  d0
391cabdff1aSopenharmony_ci        vmla.f32        d0,  d6,  d18
392cabdff1aSopenharmony_ci        vadd.f32        s3,  s3,  s5
393cabdff1aSopenharmony_ci        vbif            d0,  d1,  d4
394cabdff1aSopenharmony_ci        vst1.32         {d0},     [r0,:64]!
395cabdff1aSopenharmony_ci2:
396cabdff1aSopenharmony_ci        pop             {r4,pc}
397cabdff1aSopenharmony_ciendfunc
398cabdff1aSopenharmony_ci
399cabdff1aSopenharmony_cifunction ff_sbr_hf_apply_noise_2_neon, export=1
400cabdff1aSopenharmony_ci        vmov.i32        d3,  #1<<31
401cabdff1aSopenharmony_ci        b               .Lhf_apply_noise_0
402cabdff1aSopenharmony_ciendfunc
403cabdff1aSopenharmony_ci
404cabdff1aSopenharmony_cifunction ff_sbr_hf_apply_noise_3_neon, export=1
405cabdff1aSopenharmony_ci        ldr             r12, [sp]
406cabdff1aSopenharmony_ci        push            {r4,lr}
407cabdff1aSopenharmony_ci        lsl             r12, r12, #31
408cabdff1aSopenharmony_ci        eor             lr,  r12, #1<<31
409cabdff1aSopenharmony_ci        vmov            d3,  lr, r12
410cabdff1aSopenharmony_ci        b               .Lhf_apply_noise_1
411cabdff1aSopenharmony_ciendfunc
412