1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * This file is part of FFmpeg. 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 5cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 6cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 7cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 8cabdff1aSopenharmony_ci * 9cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 10cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 11cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12cabdff1aSopenharmony_ci * Lesser General Public License for more details. 13cabdff1aSopenharmony_ci * 14cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 15cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 16cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17cabdff1aSopenharmony_ci */ 18cabdff1aSopenharmony_ci 19cabdff1aSopenharmony_ci#include "libavutil/aarch64/asm.S" 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_cifunction ff_ps_add_squares_neon, export=1 22cabdff1aSopenharmony_ci1: ld1 {v0.4S,v1.4S}, [x1], #32 23cabdff1aSopenharmony_ci fmul v0.4S, v0.4S, v0.4S 24cabdff1aSopenharmony_ci fmul v1.4S, v1.4S, v1.4S 25cabdff1aSopenharmony_ci faddp v2.4S, v0.4S, v1.4S 26cabdff1aSopenharmony_ci ld1 {v3.4S}, [x0] 27cabdff1aSopenharmony_ci fadd v3.4S, v3.4S, v2.4S 28cabdff1aSopenharmony_ci st1 {v3.4S}, [x0], #16 29cabdff1aSopenharmony_ci subs w2, w2, #4 30cabdff1aSopenharmony_ci b.gt 1b 31cabdff1aSopenharmony_ci ret 32cabdff1aSopenharmony_ciendfunc 33cabdff1aSopenharmony_ci 34cabdff1aSopenharmony_cifunction ff_ps_mul_pair_single_neon, export=1 35cabdff1aSopenharmony_ci1: ld1 {v0.4S,v1.4S}, [x1], #32 36cabdff1aSopenharmony_ci ld1 {v2.4S}, [x2], #16 37cabdff1aSopenharmony_ci zip1 v3.4S, v2.4S, v2.4S 38cabdff1aSopenharmony_ci zip2 v4.4S, v2.4S, v2.4S 39cabdff1aSopenharmony_ci fmul v0.4S, v0.4S, v3.4S 40cabdff1aSopenharmony_ci fmul v1.4S, v1.4S, v4.4S 41cabdff1aSopenharmony_ci st1 {v0.4S,v1.4S}, [x0], #32 42cabdff1aSopenharmony_ci subs w3, w3, #4 43cabdff1aSopenharmony_ci b.gt 1b 44cabdff1aSopenharmony_ci ret 45cabdff1aSopenharmony_ciendfunc 46cabdff1aSopenharmony_ci 47cabdff1aSopenharmony_cifunction ff_ps_stereo_interpolate_neon, export=1 48cabdff1aSopenharmony_ci ld1 {v0.4S}, [x2] 49cabdff1aSopenharmony_ci ld1 {v1.4S}, [x3] 50cabdff1aSopenharmony_ci zip1 v4.4S, v0.4S, v0.4S 51cabdff1aSopenharmony_ci zip2 v5.4S, v0.4S, v0.4S 52cabdff1aSopenharmony_ci zip1 v6.4S, v1.4S, v1.4S 53cabdff1aSopenharmony_ci zip2 v7.4S, v1.4S, v1.4S 54cabdff1aSopenharmony_ci1: ld1 {v2.2S}, [x0] 55cabdff1aSopenharmony_ci ld1 {v3.2S}, [x1] 56cabdff1aSopenharmony_ci fadd v4.4S, v4.4S, v6.4S 57cabdff1aSopenharmony_ci fadd v5.4S, v5.4S, v7.4S 58cabdff1aSopenharmony_ci mov v2.D[1], v2.D[0] 59cabdff1aSopenharmony_ci mov v3.D[1], v3.D[0] 60cabdff1aSopenharmony_ci fmul v2.4S, v2.4S, v4.4S 61cabdff1aSopenharmony_ci fmla v2.4S, v3.4S, v5.4S 62cabdff1aSopenharmony_ci st1 {v2.D}[0], [x0], #8 63cabdff1aSopenharmony_ci st1 {v2.D}[1], [x1], #8 64cabdff1aSopenharmony_ci subs w4, w4, #1 65cabdff1aSopenharmony_ci b.gt 1b 66cabdff1aSopenharmony_ci ret 67cabdff1aSopenharmony_ciendfunc 68cabdff1aSopenharmony_ci 69cabdff1aSopenharmony_cifunction ff_ps_stereo_interpolate_ipdopd_neon, export=1 70cabdff1aSopenharmony_ci ld1 {v0.4S,v1.4S}, [x2] 71cabdff1aSopenharmony_ci ld1 {v6.4S,v7.4S}, [x3] 72cabdff1aSopenharmony_ci fneg v2.4S, v1.4S 73cabdff1aSopenharmony_ci fneg v3.4S, v7.4S 74cabdff1aSopenharmony_ci zip1 v16.4S, v0.4S, v0.4S 75cabdff1aSopenharmony_ci zip2 v17.4S, v0.4S, v0.4S 76cabdff1aSopenharmony_ci zip1 v18.4S, v2.4S, v1.4S 77cabdff1aSopenharmony_ci zip2 v19.4S, v2.4S, v1.4S 78cabdff1aSopenharmony_ci zip1 v20.4S, v6.4S, v6.4S 79cabdff1aSopenharmony_ci zip2 v21.4S, v6.4S, v6.4S 80cabdff1aSopenharmony_ci zip1 v22.4S, v3.4S, v7.4S 81cabdff1aSopenharmony_ci zip2 v23.4S, v3.4S, v7.4S 82cabdff1aSopenharmony_ci1: ld1 {v2.2S}, [x0] 83cabdff1aSopenharmony_ci ld1 {v3.2S}, [x1] 84cabdff1aSopenharmony_ci fadd v16.4S, v16.4S, v20.4S 85cabdff1aSopenharmony_ci fadd v17.4S, v17.4S, v21.4S 86cabdff1aSopenharmony_ci mov v2.D[1], v2.D[0] 87cabdff1aSopenharmony_ci mov v3.D[1], v3.D[0] 88cabdff1aSopenharmony_ci fmul v4.4S, v2.4S, v16.4S 89cabdff1aSopenharmony_ci fmla v4.4S, v3.4S, v17.4S 90cabdff1aSopenharmony_ci fadd v18.4S, v18.4S, v22.4S 91cabdff1aSopenharmony_ci fadd v19.4S, v19.4S, v23.4S 92cabdff1aSopenharmony_ci ext v2.16B, v2.16B, v2.16B, #4 93cabdff1aSopenharmony_ci ext v3.16B, v3.16B, v3.16B, #4 94cabdff1aSopenharmony_ci fmla v4.4S, v2.4S, v18.4S 95cabdff1aSopenharmony_ci fmla v4.4S, v3.4S, v19.4S 96cabdff1aSopenharmony_ci st1 {v4.D}[0], [x0], #8 97cabdff1aSopenharmony_ci st1 {v4.D}[1], [x1], #8 98cabdff1aSopenharmony_ci subs w4, w4, #1 99cabdff1aSopenharmony_ci b.gt 1b 100cabdff1aSopenharmony_ci ret 101cabdff1aSopenharmony_ciendfunc 102cabdff1aSopenharmony_ci 103cabdff1aSopenharmony_cifunction ff_ps_hybrid_analysis_neon, export=1 104cabdff1aSopenharmony_ci lsl x3, x3, #3 105cabdff1aSopenharmony_ci ld2 {v0.4S,v1.4S}, [x1], #32 106cabdff1aSopenharmony_ci ld2 {v2.2S,v3.2S}, [x1], #16 107cabdff1aSopenharmony_ci ld1 {v24.2S}, [x1], #8 108cabdff1aSopenharmony_ci ld2 {v4.2S,v5.2S}, [x1], #16 109cabdff1aSopenharmony_ci ld2 {v6.4S,v7.4S}, [x1] 110cabdff1aSopenharmony_ci rev64 v6.4S, v6.4S 111cabdff1aSopenharmony_ci rev64 v7.4S, v7.4S 112cabdff1aSopenharmony_ci ext v6.16B, v6.16B, v6.16B, #8 113cabdff1aSopenharmony_ci ext v7.16B, v7.16B, v7.16B, #8 114cabdff1aSopenharmony_ci rev64 v4.2S, v4.2S 115cabdff1aSopenharmony_ci rev64 v5.2S, v5.2S 116cabdff1aSopenharmony_ci mov v2.D[1], v3.D[0] 117cabdff1aSopenharmony_ci mov v4.D[1], v5.D[0] 118cabdff1aSopenharmony_ci mov v5.D[1], v2.D[0] 119cabdff1aSopenharmony_ci mov v3.D[1], v4.D[0] 120cabdff1aSopenharmony_ci fadd v16.4S, v0.4S, v6.4S 121cabdff1aSopenharmony_ci fadd v17.4S, v1.4S, v7.4S 122cabdff1aSopenharmony_ci fsub v18.4S, v1.4S, v7.4S 123cabdff1aSopenharmony_ci fsub v19.4S, v0.4S, v6.4S 124cabdff1aSopenharmony_ci fadd v22.4S, v2.4S, v4.4S 125cabdff1aSopenharmony_ci fsub v23.4S, v5.4S, v3.4S 126cabdff1aSopenharmony_ci trn1 v20.2D, v22.2D, v23.2D // {re4+re8, re5+re7, im8-im4, im7-im5} 127cabdff1aSopenharmony_ci trn2 v21.2D, v22.2D, v23.2D // {im4+im8, im5+im7, re4-re8, re5-re7} 128cabdff1aSopenharmony_ci1: ld2 {v2.4S,v3.4S}, [x2], #32 129cabdff1aSopenharmony_ci ld2 {v4.2S,v5.2S}, [x2], #16 130cabdff1aSopenharmony_ci ld1 {v6.2S}, [x2], #8 131cabdff1aSopenharmony_ci add x2, x2, #8 132cabdff1aSopenharmony_ci mov v4.D[1], v5.D[0] 133cabdff1aSopenharmony_ci mov v6.S[1], v6.S[0] 134cabdff1aSopenharmony_ci fmul v6.2S, v6.2S, v24.2S 135cabdff1aSopenharmony_ci fmul v0.4S, v2.4S, v16.4S 136cabdff1aSopenharmony_ci fmul v1.4S, v2.4S, v17.4S 137cabdff1aSopenharmony_ci fmls v0.4S, v3.4S, v18.4S 138cabdff1aSopenharmony_ci fmla v1.4S, v3.4S, v19.4S 139cabdff1aSopenharmony_ci fmla v0.4S, v4.4S, v20.4S 140cabdff1aSopenharmony_ci fmla v1.4S, v4.4S, v21.4S 141cabdff1aSopenharmony_ci faddp v0.4S, v0.4S, v1.4S 142cabdff1aSopenharmony_ci faddp v0.4S, v0.4S, v0.4S 143cabdff1aSopenharmony_ci fadd v0.2S, v0.2S, v6.2S 144cabdff1aSopenharmony_ci st1 {v0.2S}, [x0], x3 145cabdff1aSopenharmony_ci subs w4, w4, #1 146cabdff1aSopenharmony_ci b.gt 1b 147cabdff1aSopenharmony_ci ret 148cabdff1aSopenharmony_ciendfunc 149