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