1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (c) 2009 Mans Rullgard <mans@mansr.com> 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_ci .macro ldcol.8 rd, rs, rt, n=8, hi=0 24cabdff1aSopenharmony_ci.if \n == 8 || \hi == 0 25cabdff1aSopenharmony_ci vld1.8 {\rd[0]}, [\rs], \rt 26cabdff1aSopenharmony_ci vld1.8 {\rd[1]}, [\rs], \rt 27cabdff1aSopenharmony_ci vld1.8 {\rd[2]}, [\rs], \rt 28cabdff1aSopenharmony_ci vld1.8 {\rd[3]}, [\rs], \rt 29cabdff1aSopenharmony_ci.endif 30cabdff1aSopenharmony_ci.if \n == 8 || \hi == 1 31cabdff1aSopenharmony_ci vld1.8 {\rd[4]}, [\rs], \rt 32cabdff1aSopenharmony_ci vld1.8 {\rd[5]}, [\rs], \rt 33cabdff1aSopenharmony_ci vld1.8 {\rd[6]}, [\rs], \rt 34cabdff1aSopenharmony_ci vld1.8 {\rd[7]}, [\rs], \rt 35cabdff1aSopenharmony_ci.endif 36cabdff1aSopenharmony_ci .endm 37cabdff1aSopenharmony_ci 38cabdff1aSopenharmony_ci .macro add16x8 dq, dl, dh, rl, rh 39cabdff1aSopenharmony_ci vaddl.u8 \dq, \rl, \rh 40cabdff1aSopenharmony_ci vadd.u16 \dl, \dl, \dh 41cabdff1aSopenharmony_ci vpadd.u16 \dl, \dl, \dl 42cabdff1aSopenharmony_ci vpadd.u16 \dl, \dl, \dl 43cabdff1aSopenharmony_ci .endm 44cabdff1aSopenharmony_ci 45cabdff1aSopenharmony_cifunction ff_pred16x16_128_dc_neon, export=1 46cabdff1aSopenharmony_ci vmov.i8 q0, #128 47cabdff1aSopenharmony_ci b .L_pred16x16_dc_end 48cabdff1aSopenharmony_ciendfunc 49cabdff1aSopenharmony_ci 50cabdff1aSopenharmony_cifunction ff_pred16x16_top_dc_neon, export=1 51cabdff1aSopenharmony_ci sub r2, r0, r1 52cabdff1aSopenharmony_ci vld1.8 {q0}, [r2,:128] 53cabdff1aSopenharmony_ci add16x8 q0, d0, d1, d0, d1 54cabdff1aSopenharmony_ci vrshrn.u16 d0, q0, #4 55cabdff1aSopenharmony_ci vdup.8 q0, d0[0] 56cabdff1aSopenharmony_ci b .L_pred16x16_dc_end 57cabdff1aSopenharmony_ciendfunc 58cabdff1aSopenharmony_ci 59cabdff1aSopenharmony_cifunction ff_pred16x16_left_dc_neon, export=1 60cabdff1aSopenharmony_ci sub r2, r0, #1 61cabdff1aSopenharmony_ci ldcol.8 d0, r2, r1 62cabdff1aSopenharmony_ci ldcol.8 d1, r2, r1 63cabdff1aSopenharmony_ci add16x8 q0, d0, d1, d0, d1 64cabdff1aSopenharmony_ci vrshrn.u16 d0, q0, #4 65cabdff1aSopenharmony_ci vdup.8 q0, d0[0] 66cabdff1aSopenharmony_ci b .L_pred16x16_dc_end 67cabdff1aSopenharmony_ciendfunc 68cabdff1aSopenharmony_ci 69cabdff1aSopenharmony_cifunction ff_pred16x16_dc_neon, export=1 70cabdff1aSopenharmony_ci sub r2, r0, r1 71cabdff1aSopenharmony_ci vld1.8 {q0}, [r2,:128] 72cabdff1aSopenharmony_ci sub r2, r0, #1 73cabdff1aSopenharmony_ci ldcol.8 d2, r2, r1 74cabdff1aSopenharmony_ci ldcol.8 d3, r2, r1 75cabdff1aSopenharmony_ci vaddl.u8 q0, d0, d1 76cabdff1aSopenharmony_ci vaddl.u8 q1, d2, d3 77cabdff1aSopenharmony_ci vadd.u16 q0, q0, q1 78cabdff1aSopenharmony_ci vadd.u16 d0, d0, d1 79cabdff1aSopenharmony_ci vpadd.u16 d0, d0, d0 80cabdff1aSopenharmony_ci vpadd.u16 d0, d0, d0 81cabdff1aSopenharmony_ci vrshrn.u16 d0, q0, #5 82cabdff1aSopenharmony_ci vdup.8 q0, d0[0] 83cabdff1aSopenharmony_ci.L_pred16x16_dc_end: 84cabdff1aSopenharmony_ci mov r3, #8 85cabdff1aSopenharmony_ci6: vst1.8 {q0}, [r0,:128], r1 86cabdff1aSopenharmony_ci vst1.8 {q0}, [r0,:128], r1 87cabdff1aSopenharmony_ci subs r3, r3, #1 88cabdff1aSopenharmony_ci bne 6b 89cabdff1aSopenharmony_ci bx lr 90cabdff1aSopenharmony_ciendfunc 91cabdff1aSopenharmony_ci 92cabdff1aSopenharmony_cifunction ff_pred16x16_hor_neon, export=1 93cabdff1aSopenharmony_ci sub r2, r0, #1 94cabdff1aSopenharmony_ci mov r3, #16 95cabdff1aSopenharmony_ci1: vld1.8 {d0[],d1[]},[r2], r1 96cabdff1aSopenharmony_ci vst1.8 {q0}, [r0,:128], r1 97cabdff1aSopenharmony_ci subs r3, r3, #1 98cabdff1aSopenharmony_ci bne 1b 99cabdff1aSopenharmony_ci bx lr 100cabdff1aSopenharmony_ciendfunc 101cabdff1aSopenharmony_ci 102cabdff1aSopenharmony_cifunction ff_pred16x16_vert_neon, export=1 103cabdff1aSopenharmony_ci sub r0, r0, r1 104cabdff1aSopenharmony_ci vld1.8 {q0}, [r0,:128], r1 105cabdff1aSopenharmony_ci mov r3, #8 106cabdff1aSopenharmony_ci1: vst1.8 {q0}, [r0,:128], r1 107cabdff1aSopenharmony_ci vst1.8 {q0}, [r0,:128], r1 108cabdff1aSopenharmony_ci subs r3, r3, #1 109cabdff1aSopenharmony_ci bne 1b 110cabdff1aSopenharmony_ci bx lr 111cabdff1aSopenharmony_ciendfunc 112cabdff1aSopenharmony_ci 113cabdff1aSopenharmony_cifunction ff_pred16x16_plane_neon, export=1 114cabdff1aSopenharmony_ci sub r3, r0, r1 115cabdff1aSopenharmony_ci add r2, r3, #8 116cabdff1aSopenharmony_ci sub r3, r3, #1 117cabdff1aSopenharmony_ci vld1.8 {d0}, [r3] 118cabdff1aSopenharmony_ci vld1.8 {d2}, [r2,:64], r1 119cabdff1aSopenharmony_ci ldcol.8 d1, r3, r1 120cabdff1aSopenharmony_ci add r3, r3, r1 121cabdff1aSopenharmony_ci ldcol.8 d3, r3, r1 122cabdff1aSopenharmony_ci vrev64.8 q0, q0 123cabdff1aSopenharmony_ci vaddl.u8 q8, d2, d3 124cabdff1aSopenharmony_ci vsubl.u8 q2, d2, d0 125cabdff1aSopenharmony_ci vsubl.u8 q3, d3, d1 126cabdff1aSopenharmony_ci movrel r3, p16weight 127cabdff1aSopenharmony_ci vld1.8 {q0}, [r3,:128] 128cabdff1aSopenharmony_ci vmul.s16 q2, q2, q0 129cabdff1aSopenharmony_ci vmul.s16 q3, q3, q0 130cabdff1aSopenharmony_ci vadd.i16 d4, d4, d5 131cabdff1aSopenharmony_ci vadd.i16 d5, d6, d7 132cabdff1aSopenharmony_ci vpadd.i16 d4, d4, d5 133cabdff1aSopenharmony_ci vpadd.i16 d4, d4, d4 134cabdff1aSopenharmony_ci vshll.s16 q3, d4, #2 135cabdff1aSopenharmony_ci vaddw.s16 q2, q3, d4 136cabdff1aSopenharmony_ci vrshrn.s32 d4, q2, #6 137cabdff1aSopenharmony_ci mov r3, #0 138cabdff1aSopenharmony_ci vtrn.16 d4, d5 139cabdff1aSopenharmony_ci vadd.i16 d2, d4, d5 140cabdff1aSopenharmony_ci vshl.i16 d3, d2, #3 141cabdff1aSopenharmony_ci vrev64.16 d16, d17 142cabdff1aSopenharmony_ci vsub.i16 d3, d3, d2 143cabdff1aSopenharmony_ci vadd.i16 d16, d16, d0 144cabdff1aSopenharmony_ci vshl.i16 d2, d16, #4 145cabdff1aSopenharmony_ci vsub.i16 d2, d2, d3 146cabdff1aSopenharmony_ci vshl.i16 d3, d4, #4 147cabdff1aSopenharmony_ci vext.16 q0, q0, q0, #7 148cabdff1aSopenharmony_ci vsub.i16 d6, d5, d3 149cabdff1aSopenharmony_ci vmov.16 d0[0], r3 150cabdff1aSopenharmony_ci vmul.i16 q0, q0, d4[0] 151cabdff1aSopenharmony_ci vdup.16 q1, d2[0] 152cabdff1aSopenharmony_ci vdup.16 q2, d4[0] 153cabdff1aSopenharmony_ci vdup.16 q3, d6[0] 154cabdff1aSopenharmony_ci vshl.i16 q2, q2, #3 155cabdff1aSopenharmony_ci vadd.i16 q1, q1, q0 156cabdff1aSopenharmony_ci vadd.i16 q3, q3, q2 157cabdff1aSopenharmony_ci mov r3, #16 158cabdff1aSopenharmony_ci1: 159cabdff1aSopenharmony_ci vqshrun.s16 d0, q1, #5 160cabdff1aSopenharmony_ci vadd.i16 q1, q1, q2 161cabdff1aSopenharmony_ci vqshrun.s16 d1, q1, #5 162cabdff1aSopenharmony_ci vadd.i16 q1, q1, q3 163cabdff1aSopenharmony_ci vst1.8 {q0}, [r0,:128], r1 164cabdff1aSopenharmony_ci subs r3, r3, #1 165cabdff1aSopenharmony_ci bne 1b 166cabdff1aSopenharmony_ci bx lr 167cabdff1aSopenharmony_ciendfunc 168cabdff1aSopenharmony_ci 169cabdff1aSopenharmony_ciconst p16weight, align=4 170cabdff1aSopenharmony_ci .short 1,2,3,4,5,6,7,8 171cabdff1aSopenharmony_ciendconst 172cabdff1aSopenharmony_ci 173cabdff1aSopenharmony_cifunction ff_pred8x8_hor_neon, export=1 174cabdff1aSopenharmony_ci sub r2, r0, #1 175cabdff1aSopenharmony_ci mov r3, #8 176cabdff1aSopenharmony_ci1: vld1.8 {d0[]}, [r2], r1 177cabdff1aSopenharmony_ci vst1.8 {d0}, [r0,:64], r1 178cabdff1aSopenharmony_ci subs r3, r3, #1 179cabdff1aSopenharmony_ci bne 1b 180cabdff1aSopenharmony_ci bx lr 181cabdff1aSopenharmony_ciendfunc 182cabdff1aSopenharmony_ci 183cabdff1aSopenharmony_cifunction ff_pred8x8_vert_neon, export=1 184cabdff1aSopenharmony_ci sub r0, r0, r1 185cabdff1aSopenharmony_ci vld1.8 {d0}, [r0,:64], r1 186cabdff1aSopenharmony_ci mov r3, #4 187cabdff1aSopenharmony_ci1: vst1.8 {d0}, [r0,:64], r1 188cabdff1aSopenharmony_ci vst1.8 {d0}, [r0,:64], r1 189cabdff1aSopenharmony_ci subs r3, r3, #1 190cabdff1aSopenharmony_ci bne 1b 191cabdff1aSopenharmony_ci bx lr 192cabdff1aSopenharmony_ciendfunc 193cabdff1aSopenharmony_ci 194cabdff1aSopenharmony_cifunction ff_pred8x8_plane_neon, export=1 195cabdff1aSopenharmony_ci sub r3, r0, r1 196cabdff1aSopenharmony_ci add r2, r3, #4 197cabdff1aSopenharmony_ci sub r3, r3, #1 198cabdff1aSopenharmony_ci vld1.32 {d0[0]}, [r3] 199cabdff1aSopenharmony_ci vld1.32 {d2[0]}, [r2,:32], r1 200cabdff1aSopenharmony_ci ldcol.8 d0, r3, r1, 4, hi=1 201cabdff1aSopenharmony_ci add r3, r3, r1 202cabdff1aSopenharmony_ci ldcol.8 d3, r3, r1, 4 203cabdff1aSopenharmony_ci vaddl.u8 q8, d2, d3 204cabdff1aSopenharmony_ci vrev32.8 d0, d0 205cabdff1aSopenharmony_ci vtrn.32 d2, d3 206cabdff1aSopenharmony_ci vsubl.u8 q2, d2, d0 207cabdff1aSopenharmony_ci movrel r3, p16weight 208cabdff1aSopenharmony_ci vld1.16 {q0}, [r3,:128] 209cabdff1aSopenharmony_ci vmul.s16 d4, d4, d0 210cabdff1aSopenharmony_ci vmul.s16 d5, d5, d0 211cabdff1aSopenharmony_ci vpadd.i16 d4, d4, d5 212cabdff1aSopenharmony_ci vpaddl.s16 d4, d4 213cabdff1aSopenharmony_ci vshl.i32 d5, d4, #4 214cabdff1aSopenharmony_ci vadd.s32 d4, d4, d5 215cabdff1aSopenharmony_ci vrshrn.s32 d4, q2, #5 216cabdff1aSopenharmony_ci mov r3, #0 217cabdff1aSopenharmony_ci vtrn.16 d4, d5 218cabdff1aSopenharmony_ci vadd.i16 d2, d4, d5 219cabdff1aSopenharmony_ci vshl.i16 d3, d2, #2 220cabdff1aSopenharmony_ci vrev64.16 d16, d16 221cabdff1aSopenharmony_ci vsub.i16 d3, d3, d2 222cabdff1aSopenharmony_ci vadd.i16 d16, d16, d0 223cabdff1aSopenharmony_ci vshl.i16 d2, d16, #4 224cabdff1aSopenharmony_ci vsub.i16 d2, d2, d3 225cabdff1aSopenharmony_ci vshl.i16 d3, d4, #3 226cabdff1aSopenharmony_ci vext.16 q0, q0, q0, #7 227cabdff1aSopenharmony_ci vsub.i16 d6, d5, d3 228cabdff1aSopenharmony_ci vmov.16 d0[0], r3 229cabdff1aSopenharmony_ci vmul.i16 q0, q0, d4[0] 230cabdff1aSopenharmony_ci vdup.16 q1, d2[0] 231cabdff1aSopenharmony_ci vdup.16 q2, d4[0] 232cabdff1aSopenharmony_ci vdup.16 q3, d6[0] 233cabdff1aSopenharmony_ci vshl.i16 q2, q2, #3 234cabdff1aSopenharmony_ci vadd.i16 q1, q1, q0 235cabdff1aSopenharmony_ci vadd.i16 q3, q3, q2 236cabdff1aSopenharmony_ci mov r3, #8 237cabdff1aSopenharmony_ci1: 238cabdff1aSopenharmony_ci vqshrun.s16 d0, q1, #5 239cabdff1aSopenharmony_ci vadd.i16 q1, q1, q3 240cabdff1aSopenharmony_ci vst1.8 {d0}, [r0,:64], r1 241cabdff1aSopenharmony_ci subs r3, r3, #1 242cabdff1aSopenharmony_ci bne 1b 243cabdff1aSopenharmony_ci bx lr 244cabdff1aSopenharmony_ciendfunc 245cabdff1aSopenharmony_ci 246cabdff1aSopenharmony_cifunction ff_pred8x8_128_dc_neon, export=1 247cabdff1aSopenharmony_ci vmov.i8 q0, #128 248cabdff1aSopenharmony_ci b .L_pred8x8_dc_end 249cabdff1aSopenharmony_ciendfunc 250cabdff1aSopenharmony_ci 251cabdff1aSopenharmony_cifunction ff_pred8x8_top_dc_neon, export=1 252cabdff1aSopenharmony_ci sub r2, r0, r1 253cabdff1aSopenharmony_ci vld1.8 {d0}, [r2,:64] 254cabdff1aSopenharmony_ci vpaddl.u8 d0, d0 255cabdff1aSopenharmony_ci vpadd.u16 d0, d0, d0 256cabdff1aSopenharmony_ci vrshrn.u16 d0, q0, #2 257cabdff1aSopenharmony_ci vdup.8 d1, d0[1] 258cabdff1aSopenharmony_ci vdup.8 d0, d0[0] 259cabdff1aSopenharmony_ci vtrn.32 d0, d1 260cabdff1aSopenharmony_ci b .L_pred8x8_dc_end 261cabdff1aSopenharmony_ciendfunc 262cabdff1aSopenharmony_ci 263cabdff1aSopenharmony_cifunction ff_pred8x8_left_dc_neon, export=1 264cabdff1aSopenharmony_ci sub r2, r0, #1 265cabdff1aSopenharmony_ci ldcol.8 d0, r2, r1 266cabdff1aSopenharmony_ci vpaddl.u8 d0, d0 267cabdff1aSopenharmony_ci vpadd.u16 d0, d0, d0 268cabdff1aSopenharmony_ci vrshrn.u16 d0, q0, #2 269cabdff1aSopenharmony_ci vdup.8 d1, d0[1] 270cabdff1aSopenharmony_ci vdup.8 d0, d0[0] 271cabdff1aSopenharmony_ci b .L_pred8x8_dc_end 272cabdff1aSopenharmony_ciendfunc 273cabdff1aSopenharmony_ci 274cabdff1aSopenharmony_cifunction ff_pred8x8_dc_neon, export=1 275cabdff1aSopenharmony_ci sub r2, r0, r1 276cabdff1aSopenharmony_ci vld1.8 {d0}, [r2,:64] 277cabdff1aSopenharmony_ci sub r2, r0, #1 278cabdff1aSopenharmony_ci ldcol.8 d1, r2, r1 279cabdff1aSopenharmony_ci vtrn.32 d0, d1 280cabdff1aSopenharmony_ci vpaddl.u8 q0, q0 281cabdff1aSopenharmony_ci vpadd.u16 d0, d0, d1 282cabdff1aSopenharmony_ci vpadd.u16 d1, d0, d0 283cabdff1aSopenharmony_ci vrshrn.u16 d2, q0, #3 284cabdff1aSopenharmony_ci vrshrn.u16 d3, q0, #2 285cabdff1aSopenharmony_ci vdup.8 d0, d2[4] 286cabdff1aSopenharmony_ci vdup.8 d1, d3[3] 287cabdff1aSopenharmony_ci vdup.8 d4, d3[2] 288cabdff1aSopenharmony_ci vdup.8 d5, d2[5] 289cabdff1aSopenharmony_ci vtrn.32 q0, q2 290cabdff1aSopenharmony_ci.L_pred8x8_dc_end: 291cabdff1aSopenharmony_ci mov r3, #4 292cabdff1aSopenharmony_ci add r2, r0, r1, lsl #2 293cabdff1aSopenharmony_ci6: vst1.8 {d0}, [r0,:64], r1 294cabdff1aSopenharmony_ci vst1.8 {d1}, [r2,:64], r1 295cabdff1aSopenharmony_ci subs r3, r3, #1 296cabdff1aSopenharmony_ci bne 6b 297cabdff1aSopenharmony_ci bx lr 298cabdff1aSopenharmony_ciendfunc 299cabdff1aSopenharmony_ci 300cabdff1aSopenharmony_cifunction ff_pred8x8_l0t_dc_neon, export=1 301cabdff1aSopenharmony_ci sub r2, r0, r1 302cabdff1aSopenharmony_ci vld1.8 {d0}, [r2,:64] 303cabdff1aSopenharmony_ci sub r2, r0, #1 304cabdff1aSopenharmony_ci ldcol.8 d1, r2, r1, 4 305cabdff1aSopenharmony_ci vtrn.32 d0, d1 306cabdff1aSopenharmony_ci vpaddl.u8 q0, q0 307cabdff1aSopenharmony_ci vpadd.u16 d0, d0, d1 308cabdff1aSopenharmony_ci vpadd.u16 d1, d0, d0 309cabdff1aSopenharmony_ci vrshrn.u16 d2, q0, #3 310cabdff1aSopenharmony_ci vrshrn.u16 d3, q0, #2 311cabdff1aSopenharmony_ci vdup.8 d0, d2[4] 312cabdff1aSopenharmony_ci vdup.8 d1, d3[0] 313cabdff1aSopenharmony_ci vdup.8 q2, d3[2] 314cabdff1aSopenharmony_ci vtrn.32 q0, q2 315cabdff1aSopenharmony_ci b .L_pred8x8_dc_end 316cabdff1aSopenharmony_ciendfunc 317cabdff1aSopenharmony_ci 318cabdff1aSopenharmony_cifunction ff_pred8x8_l00_dc_neon, export=1 319cabdff1aSopenharmony_ci sub r2, r0, #1 320cabdff1aSopenharmony_ci ldcol.8 d0, r2, r1, 4 321cabdff1aSopenharmony_ci vpaddl.u8 d0, d0 322cabdff1aSopenharmony_ci vpadd.u16 d0, d0, d0 323cabdff1aSopenharmony_ci vrshrn.u16 d0, q0, #2 324cabdff1aSopenharmony_ci vmov.i8 d1, #128 325cabdff1aSopenharmony_ci vdup.8 d0, d0[0] 326cabdff1aSopenharmony_ci b .L_pred8x8_dc_end 327cabdff1aSopenharmony_ciendfunc 328cabdff1aSopenharmony_ci 329cabdff1aSopenharmony_cifunction ff_pred8x8_0lt_dc_neon, export=1 330cabdff1aSopenharmony_ci sub r2, r0, r1 331cabdff1aSopenharmony_ci vld1.8 {d0}, [r2,:64] 332cabdff1aSopenharmony_ci add r2, r0, r1, lsl #2 333cabdff1aSopenharmony_ci sub r2, r2, #1 334cabdff1aSopenharmony_ci ldcol.8 d1, r2, r1, 4, hi=1 335cabdff1aSopenharmony_ci vtrn.32 d0, d1 336cabdff1aSopenharmony_ci vpaddl.u8 q0, q0 337cabdff1aSopenharmony_ci vpadd.u16 d0, d0, d1 338cabdff1aSopenharmony_ci vpadd.u16 d1, d0, d0 339cabdff1aSopenharmony_ci vrshrn.u16 d3, q0, #2 340cabdff1aSopenharmony_ci vrshrn.u16 d2, q0, #3 341cabdff1aSopenharmony_ci vdup.8 d0, d3[0] 342cabdff1aSopenharmony_ci vdup.8 d1, d3[3] 343cabdff1aSopenharmony_ci vdup.8 d4, d3[2] 344cabdff1aSopenharmony_ci vdup.8 d5, d2[5] 345cabdff1aSopenharmony_ci vtrn.32 q0, q2 346cabdff1aSopenharmony_ci b .L_pred8x8_dc_end 347cabdff1aSopenharmony_ciendfunc 348cabdff1aSopenharmony_ci 349cabdff1aSopenharmony_cifunction ff_pred8x8_0l0_dc_neon, export=1 350cabdff1aSopenharmony_ci add r2, r0, r1, lsl #2 351cabdff1aSopenharmony_ci sub r2, r2, #1 352cabdff1aSopenharmony_ci ldcol.8 d1, r2, r1, 4 353cabdff1aSopenharmony_ci vpaddl.u8 d2, d1 354cabdff1aSopenharmony_ci vpadd.u16 d2, d2, d2 355cabdff1aSopenharmony_ci vrshrn.u16 d1, q1, #2 356cabdff1aSopenharmony_ci vmov.i8 d0, #128 357cabdff1aSopenharmony_ci vdup.8 d1, d1[0] 358cabdff1aSopenharmony_ci b .L_pred8x8_dc_end 359cabdff1aSopenharmony_ciendfunc 360