1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Copyright (c) 2014 Seppo Tomperi <seppo.tomperi@vtt.fi>
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
22cabdff1aSopenharmony_ci#include "libavutil/arm/asm.S"
23cabdff1aSopenharmony_ci#include "neon.S"
24cabdff1aSopenharmony_ci
25cabdff1aSopenharmony_ci.macro hevc_loop_filter_chroma_start
26cabdff1aSopenharmony_ci        ldr      r12, [r2]
27cabdff1aSopenharmony_ci        ldr      r3, [r2, #4]
28cabdff1aSopenharmony_ci        add      r2, r3, r12
29cabdff1aSopenharmony_ci        cmp      r2, #0
30cabdff1aSopenharmony_ci        it       eq
31cabdff1aSopenharmony_ci        bxeq     lr
32cabdff1aSopenharmony_ci.endm
33cabdff1aSopenharmony_ci
34cabdff1aSopenharmony_ci.macro hevc_loop_filter_chroma_body
35cabdff1aSopenharmony_ci        vsubl.u8  q3, d4, d2
36cabdff1aSopenharmony_ci        vsubl.u8  q11, d18, d19
37cabdff1aSopenharmony_ci        vshl.i16  q3, #2
38cabdff1aSopenharmony_ci        vadd.i16  q11, q3
39cabdff1aSopenharmony_ci        vdup.16   d0, r12
40cabdff1aSopenharmony_ci        vdup.16   d1, r3
41cabdff1aSopenharmony_ci        vrshr.s16 q11, q11, #3
42cabdff1aSopenharmony_ci        vneg.s16  q12, q0
43cabdff1aSopenharmony_ci        vmovl.u8  q2, d4
44cabdff1aSopenharmony_ci        vmin.s16  q11, q11, q0
45cabdff1aSopenharmony_ci        vmax.s16  q11, q11, q12
46cabdff1aSopenharmony_ci        vaddw.u8  q1, q11, d2
47cabdff1aSopenharmony_ci        vsub.i16  q2, q11
48cabdff1aSopenharmony_ci        vqmovun.s16 d2, q1
49cabdff1aSopenharmony_ci        vqmovun.s16 d4, q2
50cabdff1aSopenharmony_ci.endm
51cabdff1aSopenharmony_ci
52cabdff1aSopenharmony_ci.macro hevc_loop_filter_luma_start
53cabdff1aSopenharmony_ci        ldr     r12, [r3]
54cabdff1aSopenharmony_ci        ldr      r3, [r3, #4]
55cabdff1aSopenharmony_ci        lsl      r3, #16
56cabdff1aSopenharmony_ci        orr      r3, r12
57cabdff1aSopenharmony_ci        cmp      r3, #0
58cabdff1aSopenharmony_ci        it       eq
59cabdff1aSopenharmony_ci        bxeq     lr
60cabdff1aSopenharmony_ci        lsr      r3, #16
61cabdff1aSopenharmony_ci.endm
62cabdff1aSopenharmony_ci
63cabdff1aSopenharmony_ci.macro hevc_loop_filter_luma_body
64cabdff1aSopenharmony_ci        vmovl.u8  q8, d16
65cabdff1aSopenharmony_ci        vmovl.u8  q9, d18
66cabdff1aSopenharmony_ci        vmovl.u8  q10, d20
67cabdff1aSopenharmony_ci        vmovl.u8  q11, d22
68cabdff1aSopenharmony_ci        vmovl.u8  q12, d24
69cabdff1aSopenharmony_ci        vmovl.u8  q13, d26
70cabdff1aSopenharmony_ci        vmovl.u8  q14, d28
71cabdff1aSopenharmony_ci        vmovl.u8  q15, d30
72cabdff1aSopenharmony_ci
73cabdff1aSopenharmony_ci        vadd.i16   q7, q9, q11
74cabdff1aSopenharmony_ci        vadd.i16   q6, q14, q12
75cabdff1aSopenharmony_ci        vsub.i16   q7, q10
76cabdff1aSopenharmony_ci        vsub.i16   q6, q13
77cabdff1aSopenharmony_ci        vabd.s16   q7, q7, q10
78cabdff1aSopenharmony_ci        vabd.s16   q6, q6, q13
79cabdff1aSopenharmony_ci
80cabdff1aSopenharmony_ci
81cabdff1aSopenharmony_ci        vdup.16    q0, r2
82cabdff1aSopenharmony_ci        vmov       q4, q7
83cabdff1aSopenharmony_ci        vmov       q5, q6
84cabdff1aSopenharmony_ci        vdup.16    d4, r12
85cabdff1aSopenharmony_ci        vtrn.16    q7, q4
86cabdff1aSopenharmony_ci        vtrn.16    q6, q5
87cabdff1aSopenharmony_ci
88cabdff1aSopenharmony_ci        vshl.u64   q7, #32
89cabdff1aSopenharmony_ci        vshr.u64   q4, #32
90cabdff1aSopenharmony_ci        vshl.u64   q6, #32
91cabdff1aSopenharmony_ci        vshr.u64   q5, #32
92cabdff1aSopenharmony_ci        vshr.u64   q7, #32
93cabdff1aSopenharmony_ci        vshr.u64   q6, #32
94cabdff1aSopenharmony_ci        vshl.u64   q5, #32
95cabdff1aSopenharmony_ci        vshl.u64   q4, #32
96cabdff1aSopenharmony_ci        vorr       q6, q5
97cabdff1aSopenharmony_ci        vorr       q7, q4
98cabdff1aSopenharmony_ci        vdup.16    d5, r3
99cabdff1aSopenharmony_ci        vadd.i16   q5, q7, q6
100cabdff1aSopenharmony_ci
101cabdff1aSopenharmony_ci        vmov       q4, q5
102cabdff1aSopenharmony_ci        vmov       q3, q5
103cabdff1aSopenharmony_ci        vtrn.32    q3, q4
104cabdff1aSopenharmony_ci
105cabdff1aSopenharmony_ci        vadd.i16   q4, q3
106cabdff1aSopenharmony_ci
107cabdff1aSopenharmony_ci        vshl.s16   q5, q5, #1
108cabdff1aSopenharmony_ci        vcgt.s16   q3, q0, q4
109cabdff1aSopenharmony_ci
110cabdff1aSopenharmony_ci        vmovn.i16  d6, q3
111cabdff1aSopenharmony_ci        vshr.s16   q1, q0, #2
112cabdff1aSopenharmony_ci        vmovn.i16  d6, q3
113cabdff1aSopenharmony_ci        vcgt.s16   q5, q1, q5
114cabdff1aSopenharmony_ci        vmov       r7, s12
115cabdff1aSopenharmony_ci        cmp        r7, #0
116cabdff1aSopenharmony_ci        beq        bypasswrite
117cabdff1aSopenharmony_ci
118cabdff1aSopenharmony_ci        vpadd.i32  d0, d14, d12
119cabdff1aSopenharmony_ci        vpadd.i32  d1, d15, d13
120cabdff1aSopenharmony_ci        vmov       q4, q2
121cabdff1aSopenharmony_ci        vshl.s16   q2, #2
122cabdff1aSopenharmony_ci        vshr.s16   q1, q1, #1
123cabdff1aSopenharmony_ci        vrhadd.s16 q2, q4
124cabdff1aSopenharmony_ci
125cabdff1aSopenharmony_ci        vabd.s16   q7, q8, q11
126cabdff1aSopenharmony_ci        vaba.s16   q7, q15, q12
127cabdff1aSopenharmony_ci
128cabdff1aSopenharmony_ci        vmovn.i32  d0, q0
129cabdff1aSopenharmony_ci        vmov       r5, r6, s0, s1
130cabdff1aSopenharmony_ci        vcgt.s16   q6, q1, q7
131cabdff1aSopenharmony_ci        vand       q5, q5, q6
132cabdff1aSopenharmony_ci        vabd.s16   q7, q11, q12
133cabdff1aSopenharmony_ci        vcgt.s16   q6, q2, q7
134cabdff1aSopenharmony_ci        vand       q5, q5, q6
135cabdff1aSopenharmony_ci
136cabdff1aSopenharmony_ci        vmov       q2, q5
137cabdff1aSopenharmony_ci        vtrn.s16   q5, q2
138cabdff1aSopenharmony_ci        vshr.u64   q2, #32
139cabdff1aSopenharmony_ci        vshl.u64   q5, #32
140cabdff1aSopenharmony_ci        vshl.u64   q2, #32
141cabdff1aSopenharmony_ci        vshr.u64   q5, #32
142cabdff1aSopenharmony_ci        vorr       q5, q2
143cabdff1aSopenharmony_ci
144cabdff1aSopenharmony_ci        vmov       q2, q5
145cabdff1aSopenharmony_ci        vshl.i16   q7, q4, #1
146cabdff1aSopenharmony_ci        vtrn.32    q2, q5
147cabdff1aSopenharmony_ci        vand       q5, q2
148cabdff1aSopenharmony_ci        vneg.s16   q6, q7
149cabdff1aSopenharmony_ci        vmovn.i16  d4, q5
150cabdff1aSopenharmony_ci        vmovn.i16  d4, q2
151cabdff1aSopenharmony_ci        vmov       r8, s8
152cabdff1aSopenharmony_ci
153cabdff1aSopenharmony_ci        and        r9, r8, r7
154cabdff1aSopenharmony_ci        cmp        r9, #0
155cabdff1aSopenharmony_ci        beq        1f
156cabdff1aSopenharmony_ci
157cabdff1aSopenharmony_ci        vadd.i16  q2, q11, q12
158cabdff1aSopenharmony_ci        vadd.i16  q4, q9, q8
159cabdff1aSopenharmony_ci        vadd.i16  q1, q2, q10
160cabdff1aSopenharmony_ci        vdup.16   d10, r9
161cabdff1aSopenharmony_ci        vadd.i16  q0, q1, q9
162cabdff1aSopenharmony_ci        vshl.i16  q4, #1
163cabdff1aSopenharmony_ci        lsr        r9, #16
164cabdff1aSopenharmony_ci        vadd.i16  q1, q0
165cabdff1aSopenharmony_ci        vrshr.s16 q3, q0, #2
166cabdff1aSopenharmony_ci        vadd.i16  q1, q13
167cabdff1aSopenharmony_ci        vadd.i16  q4, q0
168cabdff1aSopenharmony_ci        vsub.i16  q3, q10
169cabdff1aSopenharmony_ci        vrshr.s16 q1, #3
170cabdff1aSopenharmony_ci        vrshr.s16 q4, #3
171cabdff1aSopenharmony_ci        vmax.s16  q3, q6
172cabdff1aSopenharmony_ci        vsub.i16  q1, q11
173cabdff1aSopenharmony_ci        vsub.i16  q4, q9
174cabdff1aSopenharmony_ci        vmin.s16  q3, q7
175cabdff1aSopenharmony_ci        vmax.s16  q4, q6
176cabdff1aSopenharmony_ci        vmax.s16  q1, q6
177cabdff1aSopenharmony_ci        vadd.i16  q3, q10
178cabdff1aSopenharmony_ci        vmin.s16  q4, q7
179cabdff1aSopenharmony_ci        vmin.s16  q1, q7
180cabdff1aSopenharmony_ci        vdup.16   d11, r9
181cabdff1aSopenharmony_ci        vadd.i16  q4, q9
182cabdff1aSopenharmony_ci        vadd.i16  q1, q11
183cabdff1aSopenharmony_ci        vbit      q9, q4, q5
184cabdff1aSopenharmony_ci        vadd.i16  q4, q2, q13
185cabdff1aSopenharmony_ci        vbit      q11, q1, q5
186cabdff1aSopenharmony_ci        vadd.i16  q0, q4, q14
187cabdff1aSopenharmony_ci        vadd.i16  q2, q15, q14
188cabdff1aSopenharmony_ci        vadd.i16  q4, q0
189cabdff1aSopenharmony_ci
190cabdff1aSopenharmony_ci        vshl.i16  q2, #1
191cabdff1aSopenharmony_ci        vadd.i16  q4, q10
192cabdff1aSopenharmony_ci        vbit      q10, q3, q5
193cabdff1aSopenharmony_ci        vrshr.s16 q4, #3
194cabdff1aSopenharmony_ci        vadd.i16  q2, q0
195cabdff1aSopenharmony_ci        vrshr.s16 q3, q0, #2
196cabdff1aSopenharmony_ci        vsub.i16  q4, q12
197cabdff1aSopenharmony_ci        vrshr.s16 q2, #3
198cabdff1aSopenharmony_ci        vsub.i16  q3, q13
199cabdff1aSopenharmony_ci        vmax.s16  q4, q6
200cabdff1aSopenharmony_ci        vsub.i16  q2, q14
201cabdff1aSopenharmony_ci        vmax.s16  q3, q6
202cabdff1aSopenharmony_ci        vmin.s16  q4, q7
203cabdff1aSopenharmony_ci        vmax.s16  q2, q6
204cabdff1aSopenharmony_ci        vmin.s16  q3, q7
205cabdff1aSopenharmony_ci        vadd.i16  q4, q12
206cabdff1aSopenharmony_ci        vmin.s16  q2, q7
207cabdff1aSopenharmony_ci        vadd.i16  q3, q13
208cabdff1aSopenharmony_ci        vbit      q12, q4, q5
209cabdff1aSopenharmony_ci        vadd.i16  q2, q14
210cabdff1aSopenharmony_ci        vbit      q13, q3, q5
211cabdff1aSopenharmony_ci        vbit      q14, q2, q5
212cabdff1aSopenharmony_ci
213cabdff1aSopenharmony_ci1:
214cabdff1aSopenharmony_ci        mvn       r8, r8
215cabdff1aSopenharmony_ci        and       r9, r8, r7
216cabdff1aSopenharmony_ci        cmp       r9, #0
217cabdff1aSopenharmony_ci        beq       2f
218cabdff1aSopenharmony_ci
219cabdff1aSopenharmony_ci        vdup.16    q4, r2
220cabdff1aSopenharmony_ci
221cabdff1aSopenharmony_ci        vdup.16   d10, r9
222cabdff1aSopenharmony_ci        lsr       r9, #16
223cabdff1aSopenharmony_ci        vmov       q1, q4
224cabdff1aSopenharmony_ci        vdup.16   d11, r9
225cabdff1aSopenharmony_ci        vshr.s16   q1, #1
226cabdff1aSopenharmony_ci        vsub.i16  q2, q12, q11
227cabdff1aSopenharmony_ci        vadd.i16   q4, q1
228cabdff1aSopenharmony_ci        vshl.s16  q0, q2, #3
229cabdff1aSopenharmony_ci        vshr.s16   q4, #3
230cabdff1aSopenharmony_ci        vadd.i16  q2, q0
231cabdff1aSopenharmony_ci        vsub.i16  q0, q13, q10
232cabdff1aSopenharmony_ci        vsub.i16  q2, q0
233cabdff1aSopenharmony_ci        vshl.i16  q0, q0, #1
234cabdff1aSopenharmony_ci        vsub.i16  q2, q0
235cabdff1aSopenharmony_ci        vshl.s16  q1, q7, 2
236cabdff1aSopenharmony_ci        vrshr.s16 q2, q2, #4
237cabdff1aSopenharmony_ci        vadd.i16  q1, q7
238cabdff1aSopenharmony_ci        vabs.s16  q3, q2
239cabdff1aSopenharmony_ci        vshr.s16  q6, q6, #1
240cabdff1aSopenharmony_ci        vcgt.s16  q1, q1, q3
241cabdff1aSopenharmony_ci        vand      q5, q1
242cabdff1aSopenharmony_ci        vshr.s16  q7, q7, #1
243cabdff1aSopenharmony_ci        vmax.s16  q2, q2, q6
244cabdff1aSopenharmony_ci        vmin.s16  q2, q2, q7
245cabdff1aSopenharmony_ci
246cabdff1aSopenharmony_ci        vshr.s16  q7, q7, #1
247cabdff1aSopenharmony_ci        vrhadd.s16 q3, q9, q11
248cabdff1aSopenharmony_ci        vneg.s16  q6, q7
249cabdff1aSopenharmony_ci        vsub.s16  q3, q10
250cabdff1aSopenharmony_ci        vdup.16   d2, r5
251cabdff1aSopenharmony_ci        vhadd.s16 q3, q2
252cabdff1aSopenharmony_ci        vdup.16   d3, r6
253cabdff1aSopenharmony_ci        vmax.s16  q3, q3, q6
254cabdff1aSopenharmony_ci        vcgt.s16  q1, q4, q1
255cabdff1aSopenharmony_ci        vmin.s16  q3, q3, q7
256cabdff1aSopenharmony_ci        vand      q1, q5
257cabdff1aSopenharmony_ci        vadd.i16  q3, q10
258cabdff1aSopenharmony_ci        lsr       r5, #16
259cabdff1aSopenharmony_ci        lsr       r6, #16
260cabdff1aSopenharmony_ci        vbit      q10, q3, q1
261cabdff1aSopenharmony_ci
262cabdff1aSopenharmony_ci        vrhadd.s16 q3, q14, q12
263cabdff1aSopenharmony_ci        vdup.16   d2, r5
264cabdff1aSopenharmony_ci        vsub.s16  q3, q13
265cabdff1aSopenharmony_ci        vdup.16   d3, r6
266cabdff1aSopenharmony_ci        vhsub.s16 q3, q2
267cabdff1aSopenharmony_ci        vcgt.s16  q1, q4, q1
268cabdff1aSopenharmony_ci        vmax.s16  q3, q3, q6
269cabdff1aSopenharmony_ci        vand      q1, q5
270cabdff1aSopenharmony_ci        vmin.s16  q3, q3, q7
271cabdff1aSopenharmony_ci        vadd.i16  q3, q13
272cabdff1aSopenharmony_ci        vbit      q13, q3, q1
273cabdff1aSopenharmony_ci        vadd.i16  q0, q11, q2
274cabdff1aSopenharmony_ci        vsub.i16  q4, q12, q2
275cabdff1aSopenharmony_ci        vbit      q11, q0, q5
276cabdff1aSopenharmony_ci        vbit      q12, q4, q5
277cabdff1aSopenharmony_ci
278cabdff1aSopenharmony_ci2:
279cabdff1aSopenharmony_ci        vqmovun.s16 d16, q8
280cabdff1aSopenharmony_ci        vqmovun.s16 d18, q9
281cabdff1aSopenharmony_ci        vqmovun.s16 d20, q10
282cabdff1aSopenharmony_ci        vqmovun.s16 d22, q11
283cabdff1aSopenharmony_ci        vqmovun.s16 d24, q12
284cabdff1aSopenharmony_ci        vqmovun.s16 d26, q13
285cabdff1aSopenharmony_ci        vqmovun.s16 d28, q14
286cabdff1aSopenharmony_ci        vqmovun.s16 d30, q15
287cabdff1aSopenharmony_ci.endm
288cabdff1aSopenharmony_ci
289cabdff1aSopenharmony_cifunction ff_hevc_v_loop_filter_luma_neon, export=1
290cabdff1aSopenharmony_ci        hevc_loop_filter_luma_start
291cabdff1aSopenharmony_ci        push     {r5-r11}
292cabdff1aSopenharmony_ci        vpush    {d8-d15}
293cabdff1aSopenharmony_ci        sub      r0, #4
294cabdff1aSopenharmony_ci        vld1.8   {d16}, [r0], r1
295cabdff1aSopenharmony_ci        vld1.8   {d18}, [r0], r1
296cabdff1aSopenharmony_ci        vld1.8   {d20}, [r0], r1
297cabdff1aSopenharmony_ci        vld1.8   {d22}, [r0], r1
298cabdff1aSopenharmony_ci        vld1.8   {d24}, [r0], r1
299cabdff1aSopenharmony_ci        vld1.8   {d26}, [r0], r1
300cabdff1aSopenharmony_ci        vld1.8   {d28}, [r0], r1
301cabdff1aSopenharmony_ci        vld1.8   {d30}, [r0], r1
302cabdff1aSopenharmony_ci        sub      r0, r0, r1, lsl #3
303cabdff1aSopenharmony_ci        transpose_8x8 d16, d18, d20, d22, d24, d26, d28, d30
304cabdff1aSopenharmony_ci        hevc_loop_filter_luma_body
305cabdff1aSopenharmony_ci        transpose_8x8 d16, d18, d20, d22, d24, d26, d28, d30
306cabdff1aSopenharmony_ci        vst1.8   {d16}, [r0], r1
307cabdff1aSopenharmony_ci        vst1.8   {d18}, [r0], r1
308cabdff1aSopenharmony_ci        vst1.8   {d20}, [r0], r1
309cabdff1aSopenharmony_ci        vst1.8   {d22}, [r0], r1
310cabdff1aSopenharmony_ci        vst1.8   {d24}, [r0], r1
311cabdff1aSopenharmony_ci        vst1.8   {d26}, [r0], r1
312cabdff1aSopenharmony_ci        vst1.8   {d28}, [r0], r1
313cabdff1aSopenharmony_ci        vst1.8   {d30}, [r0]
314cabdff1aSopenharmony_ci        vpop     {d8-d15}
315cabdff1aSopenharmony_ci        pop      {r5-r11}
316cabdff1aSopenharmony_ci        bx lr
317cabdff1aSopenharmony_ciendfunc
318cabdff1aSopenharmony_ci
319cabdff1aSopenharmony_cifunction ff_hevc_h_loop_filter_luma_neon, export=1
320cabdff1aSopenharmony_ci        hevc_loop_filter_luma_start
321cabdff1aSopenharmony_ci        push     {r5-r11}
322cabdff1aSopenharmony_ci        vpush    {d8-d15}
323cabdff1aSopenharmony_ci        sub      r0, r0, r1, lsl #2
324cabdff1aSopenharmony_ci        vld1.8  {d16}, [r0], r1
325cabdff1aSopenharmony_ci        vld1.8  {d18}, [r0], r1
326cabdff1aSopenharmony_ci        vld1.8  {d20}, [r0], r1
327cabdff1aSopenharmony_ci        vld1.8  {d22}, [r0], r1
328cabdff1aSopenharmony_ci        vld1.8  {d24}, [r0], r1
329cabdff1aSopenharmony_ci        vld1.8  {d26}, [r0], r1
330cabdff1aSopenharmony_ci        vld1.8  {d28}, [r0], r1
331cabdff1aSopenharmony_ci        vld1.8  {d30}, [r0], r1
332cabdff1aSopenharmony_ci        sub        r0, r0, r1, lsl #3
333cabdff1aSopenharmony_ci        add        r0, r1
334cabdff1aSopenharmony_ci        hevc_loop_filter_luma_body
335cabdff1aSopenharmony_ci        vst1.8   {d18}, [r0], r1
336cabdff1aSopenharmony_ci        vst1.8   {d20}, [r0], r1
337cabdff1aSopenharmony_ci        vst1.8   {d22}, [r0], r1
338cabdff1aSopenharmony_ci        vst1.8   {d24}, [r0], r1
339cabdff1aSopenharmony_ci        vst1.8   {d26}, [r0], r1
340cabdff1aSopenharmony_ci        vst1.8   {d28}, [r0]
341cabdff1aSopenharmony_cibypasswrite:
342cabdff1aSopenharmony_ci        vpop     {d8-d15}
343cabdff1aSopenharmony_ci        pop      {r5-r11}
344cabdff1aSopenharmony_ci        bx lr
345cabdff1aSopenharmony_ciendfunc
346cabdff1aSopenharmony_ci
347cabdff1aSopenharmony_cifunction ff_hevc_v_loop_filter_chroma_neon, export=1
348cabdff1aSopenharmony_ci        hevc_loop_filter_chroma_start
349cabdff1aSopenharmony_ci        sub      r0, #4
350cabdff1aSopenharmony_ci        vld1.8   {d16}, [r0], r1
351cabdff1aSopenharmony_ci        vld1.8   {d17}, [r0], r1
352cabdff1aSopenharmony_ci        vld1.8   {d18}, [r0], r1
353cabdff1aSopenharmony_ci        vld1.8   {d2},  [r0], r1
354cabdff1aSopenharmony_ci        vld1.8   {d4},  [r0], r1
355cabdff1aSopenharmony_ci        vld1.8   {d19}, [r0], r1
356cabdff1aSopenharmony_ci        vld1.8   {d20}, [r0], r1
357cabdff1aSopenharmony_ci        vld1.8   {d21}, [r0], r1
358cabdff1aSopenharmony_ci        sub      r0, r0, r1, lsl #3
359cabdff1aSopenharmony_ci        transpose_8x8 d16, d17, d18, d2, d4, d19, d20, d21
360cabdff1aSopenharmony_ci        hevc_loop_filter_chroma_body
361cabdff1aSopenharmony_ci        transpose_8x8 d16, d17, d18, d2, d4, d19, d20, d21
362cabdff1aSopenharmony_ci        vst1.8   {d16}, [r0], r1
363cabdff1aSopenharmony_ci        vst1.8   {d17}, [r0], r1
364cabdff1aSopenharmony_ci        vst1.8   {d18}, [r0], r1
365cabdff1aSopenharmony_ci        vst1.8   {d2},  [r0], r1
366cabdff1aSopenharmony_ci        vst1.8   {d4},  [r0], r1
367cabdff1aSopenharmony_ci        vst1.8   {d19}, [r0], r1
368cabdff1aSopenharmony_ci        vst1.8   {d20}, [r0], r1
369cabdff1aSopenharmony_ci        vst1.8   {d21}, [r0]
370cabdff1aSopenharmony_ci        bx       lr
371cabdff1aSopenharmony_ciendfunc
372cabdff1aSopenharmony_ci
373cabdff1aSopenharmony_cifunction ff_hevc_h_loop_filter_chroma_neon, export=1
374cabdff1aSopenharmony_ci        hevc_loop_filter_chroma_start
375cabdff1aSopenharmony_ci        sub      r0, r0, r1, lsl #1
376cabdff1aSopenharmony_ci        vld1.8   {d18}, [r0], r1
377cabdff1aSopenharmony_ci        vld1.8   {d2}, [r0], r1
378cabdff1aSopenharmony_ci        vld1.8   {d4}, [r0], r1
379cabdff1aSopenharmony_ci        vld1.8   {d19}, [r0]
380cabdff1aSopenharmony_ci        sub      r0, r0, r1, lsl #1
381cabdff1aSopenharmony_ci        hevc_loop_filter_chroma_body
382cabdff1aSopenharmony_ci        vst1.8   {d2}, [r0], r1
383cabdff1aSopenharmony_ci        vst1.8   {d4}, [r0]
384cabdff1aSopenharmony_ci        bx       lr
385cabdff1aSopenharmony_ciendfunc
386