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