1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (c) 2008 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 "config.h" 22cabdff1aSopenharmony_ci#include "libavutil/arm/asm.S" 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_cifunction ff_conv_flt_to_s16_neon, export=1 25cabdff1aSopenharmony_ci subs r2, r2, #8 26cabdff1aSopenharmony_ci vld1.32 {q0}, [r1,:128]! 27cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q0, #31 28cabdff1aSopenharmony_ci vld1.32 {q1}, [r1,:128]! 29cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q1, #31 30cabdff1aSopenharmony_ci beq 3f 31cabdff1aSopenharmony_ci bics r12, r2, #15 32cabdff1aSopenharmony_ci beq 2f 33cabdff1aSopenharmony_ci1: subs r12, r12, #16 34cabdff1aSopenharmony_ci vqrshrn.s32 d4, q8, #16 35cabdff1aSopenharmony_ci vld1.32 {q0}, [r1,:128]! 36cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 37cabdff1aSopenharmony_ci vqrshrn.s32 d5, q9, #16 38cabdff1aSopenharmony_ci vld1.32 {q1}, [r1,:128]! 39cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 40cabdff1aSopenharmony_ci vqrshrn.s32 d6, q0, #16 41cabdff1aSopenharmony_ci vst1.16 {q2}, [r0,:128]! 42cabdff1aSopenharmony_ci vqrshrn.s32 d7, q1, #16 43cabdff1aSopenharmony_ci vld1.32 {q8}, [r1,:128]! 44cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q8, #31 45cabdff1aSopenharmony_ci vld1.32 {q9}, [r1,:128]! 46cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q9, #31 47cabdff1aSopenharmony_ci vst1.16 {q3}, [r0,:128]! 48cabdff1aSopenharmony_ci bne 1b 49cabdff1aSopenharmony_ci ands r2, r2, #15 50cabdff1aSopenharmony_ci beq 3f 51cabdff1aSopenharmony_ci2: vld1.32 {q0}, [r1,:128]! 52cabdff1aSopenharmony_ci vqrshrn.s32 d4, q8, #16 53cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 54cabdff1aSopenharmony_ci vld1.32 {q1}, [r1,:128]! 55cabdff1aSopenharmony_ci vqrshrn.s32 d5, q9, #16 56cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 57cabdff1aSopenharmony_ci vqrshrn.s32 d6, q0, #16 58cabdff1aSopenharmony_ci vst1.16 {q2}, [r0,:128]! 59cabdff1aSopenharmony_ci vqrshrn.s32 d7, q1, #16 60cabdff1aSopenharmony_ci vst1.16 {q3}, [r0,:128]! 61cabdff1aSopenharmony_ci bx lr 62cabdff1aSopenharmony_ci3: vqrshrn.s32 d4, q8, #16 63cabdff1aSopenharmony_ci vqrshrn.s32 d5, q9, #16 64cabdff1aSopenharmony_ci vst1.16 {q2}, [r0,:128]! 65cabdff1aSopenharmony_ci bx lr 66cabdff1aSopenharmony_ciendfunc 67cabdff1aSopenharmony_ci 68cabdff1aSopenharmony_cifunction ff_conv_fltp_to_s16_2ch_neon, export=1 69cabdff1aSopenharmony_ci ldm r1, {r1, r3} 70cabdff1aSopenharmony_ci subs r2, r2, #8 71cabdff1aSopenharmony_ci vld1.32 {q0}, [r1,:128]! 72cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q0, #31 73cabdff1aSopenharmony_ci vld1.32 {q1}, [r1,:128]! 74cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q1, #31 75cabdff1aSopenharmony_ci vld1.32 {q10}, [r3,:128]! 76cabdff1aSopenharmony_ci vcvt.s32.f32 q10, q10, #31 77cabdff1aSopenharmony_ci vld1.32 {q11}, [r3,:128]! 78cabdff1aSopenharmony_ci vcvt.s32.f32 q11, q11, #31 79cabdff1aSopenharmony_ci beq 3f 80cabdff1aSopenharmony_ci bics r12, r2, #15 81cabdff1aSopenharmony_ci beq 2f 82cabdff1aSopenharmony_ci1: subs r12, r12, #16 83cabdff1aSopenharmony_ci vld1.32 {q0}, [r1,:128]! 84cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 85cabdff1aSopenharmony_ci vsri.32 q10, q8, #16 86cabdff1aSopenharmony_ci vld1.32 {q1}, [r1,:128]! 87cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 88cabdff1aSopenharmony_ci vld1.32 {q12}, [r3,:128]! 89cabdff1aSopenharmony_ci vcvt.s32.f32 q12, q12, #31 90cabdff1aSopenharmony_ci vld1.32 {q13}, [r3,:128]! 91cabdff1aSopenharmony_ci vsri.32 q11, q9, #16 92cabdff1aSopenharmony_ci vst1.16 {q10}, [r0,:128]! 93cabdff1aSopenharmony_ci vcvt.s32.f32 q13, q13, #31 94cabdff1aSopenharmony_ci vst1.16 {q11}, [r0,:128]! 95cabdff1aSopenharmony_ci vsri.32 q12, q0, #16 96cabdff1aSopenharmony_ci vld1.32 {q8}, [r1,:128]! 97cabdff1aSopenharmony_ci vsri.32 q13, q1, #16 98cabdff1aSopenharmony_ci vst1.16 {q12}, [r0,:128]! 99cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q8, #31 100cabdff1aSopenharmony_ci vld1.32 {q9}, [r1,:128]! 101cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q9, #31 102cabdff1aSopenharmony_ci vld1.32 {q10}, [r3,:128]! 103cabdff1aSopenharmony_ci vcvt.s32.f32 q10, q10, #31 104cabdff1aSopenharmony_ci vld1.32 {q11}, [r3,:128]! 105cabdff1aSopenharmony_ci vcvt.s32.f32 q11, q11, #31 106cabdff1aSopenharmony_ci vst1.16 {q13}, [r0,:128]! 107cabdff1aSopenharmony_ci bne 1b 108cabdff1aSopenharmony_ci ands r2, r2, #15 109cabdff1aSopenharmony_ci beq 3f 110cabdff1aSopenharmony_ci2: vsri.32 q10, q8, #16 111cabdff1aSopenharmony_ci vld1.32 {q0}, [r1,:128]! 112cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 113cabdff1aSopenharmony_ci vld1.32 {q1}, [r1,:128]! 114cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 115cabdff1aSopenharmony_ci vld1.32 {q12}, [r3,:128]! 116cabdff1aSopenharmony_ci vcvt.s32.f32 q12, q12, #31 117cabdff1aSopenharmony_ci vsri.32 q11, q9, #16 118cabdff1aSopenharmony_ci vld1.32 {q13}, [r3,:128]! 119cabdff1aSopenharmony_ci vcvt.s32.f32 q13, q13, #31 120cabdff1aSopenharmony_ci vst1.16 {q10}, [r0,:128]! 121cabdff1aSopenharmony_ci vsri.32 q12, q0, #16 122cabdff1aSopenharmony_ci vst1.16 {q11}, [r0,:128]! 123cabdff1aSopenharmony_ci vsri.32 q13, q1, #16 124cabdff1aSopenharmony_ci vst1.16 {q12-q13},[r0,:128]! 125cabdff1aSopenharmony_ci bx lr 126cabdff1aSopenharmony_ci3: vsri.32 q10, q8, #16 127cabdff1aSopenharmony_ci vsri.32 q11, q9, #16 128cabdff1aSopenharmony_ci vst1.16 {q10-q11},[r0,:128]! 129cabdff1aSopenharmony_ci bx lr 130cabdff1aSopenharmony_ciendfunc 131cabdff1aSopenharmony_ci 132cabdff1aSopenharmony_cifunction ff_conv_fltp_to_s16_neon, export=1 133cabdff1aSopenharmony_ci cmp r3, #2 134cabdff1aSopenharmony_ci itt lt 135cabdff1aSopenharmony_ci ldrlt r1, [r1] 136cabdff1aSopenharmony_ci blt X(ff_conv_flt_to_s16_neon) 137cabdff1aSopenharmony_ci beq X(ff_conv_fltp_to_s16_2ch_neon) 138cabdff1aSopenharmony_ci 139cabdff1aSopenharmony_ci push {r4-r8, lr} 140cabdff1aSopenharmony_ci cmp r3, #4 141cabdff1aSopenharmony_ci lsl r12, r3, #1 142cabdff1aSopenharmony_ci blt 4f 143cabdff1aSopenharmony_ci 144cabdff1aSopenharmony_ci @ 4 channels 145cabdff1aSopenharmony_ci5: ldm r1!, {r4-r7} 146cabdff1aSopenharmony_ci mov lr, r2 147cabdff1aSopenharmony_ci mov r8, r0 148cabdff1aSopenharmony_ci vld1.32 {q8}, [r4,:128]! 149cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q8, #31 150cabdff1aSopenharmony_ci vld1.32 {q9}, [r5,:128]! 151cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q9, #31 152cabdff1aSopenharmony_ci vld1.32 {q10}, [r6,:128]! 153cabdff1aSopenharmony_ci vcvt.s32.f32 q10, q10, #31 154cabdff1aSopenharmony_ci vld1.32 {q11}, [r7,:128]! 155cabdff1aSopenharmony_ci vcvt.s32.f32 q11, q11, #31 156cabdff1aSopenharmony_ci6: subs lr, lr, #8 157cabdff1aSopenharmony_ci vld1.32 {q0}, [r4,:128]! 158cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 159cabdff1aSopenharmony_ci vsri.32 q9, q8, #16 160cabdff1aSopenharmony_ci vld1.32 {q1}, [r5,:128]! 161cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 162cabdff1aSopenharmony_ci vsri.32 q11, q10, #16 163cabdff1aSopenharmony_ci vld1.32 {q2}, [r6,:128]! 164cabdff1aSopenharmony_ci vcvt.s32.f32 q2, q2, #31 165cabdff1aSopenharmony_ci vzip.32 d18, d22 166cabdff1aSopenharmony_ci vld1.32 {q3}, [r7,:128]! 167cabdff1aSopenharmony_ci vcvt.s32.f32 q3, q3, #31 168cabdff1aSopenharmony_ci vzip.32 d19, d23 169cabdff1aSopenharmony_ci vst1.16 {d18}, [r8], r12 170cabdff1aSopenharmony_ci vsri.32 q1, q0, #16 171cabdff1aSopenharmony_ci vst1.16 {d22}, [r8], r12 172cabdff1aSopenharmony_ci vsri.32 q3, q2, #16 173cabdff1aSopenharmony_ci vst1.16 {d19}, [r8], r12 174cabdff1aSopenharmony_ci vzip.32 d2, d6 175cabdff1aSopenharmony_ci vst1.16 {d23}, [r8], r12 176cabdff1aSopenharmony_ci vzip.32 d3, d7 177cabdff1aSopenharmony_ci beq 7f 178cabdff1aSopenharmony_ci vld1.32 {q8}, [r4,:128]! 179cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q8, #31 180cabdff1aSopenharmony_ci vst1.16 {d2}, [r8], r12 181cabdff1aSopenharmony_ci vld1.32 {q9}, [r5,:128]! 182cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q9, #31 183cabdff1aSopenharmony_ci vst1.16 {d6}, [r8], r12 184cabdff1aSopenharmony_ci vld1.32 {q10}, [r6,:128]! 185cabdff1aSopenharmony_ci vcvt.s32.f32 q10, q10, #31 186cabdff1aSopenharmony_ci vst1.16 {d3}, [r8], r12 187cabdff1aSopenharmony_ci vld1.32 {q11}, [r7,:128]! 188cabdff1aSopenharmony_ci vcvt.s32.f32 q11, q11, #31 189cabdff1aSopenharmony_ci vst1.16 {d7}, [r8], r12 190cabdff1aSopenharmony_ci b 6b 191cabdff1aSopenharmony_ci7: vst1.16 {d2}, [r8], r12 192cabdff1aSopenharmony_ci vst1.16 {d6}, [r8], r12 193cabdff1aSopenharmony_ci vst1.16 {d3}, [r8], r12 194cabdff1aSopenharmony_ci vst1.16 {d7}, [r8], r12 195cabdff1aSopenharmony_ci subs r3, r3, #4 196cabdff1aSopenharmony_ci it eq 197cabdff1aSopenharmony_ci popeq {r4-r8, pc} 198cabdff1aSopenharmony_ci cmp r3, #4 199cabdff1aSopenharmony_ci add r0, r0, #8 200cabdff1aSopenharmony_ci bge 5b 201cabdff1aSopenharmony_ci 202cabdff1aSopenharmony_ci @ 2 channels 203cabdff1aSopenharmony_ci4: cmp r3, #2 204cabdff1aSopenharmony_ci blt 4f 205cabdff1aSopenharmony_ci ldm r1!, {r4-r5} 206cabdff1aSopenharmony_ci mov lr, r2 207cabdff1aSopenharmony_ci mov r8, r0 208cabdff1aSopenharmony_ci tst lr, #8 209cabdff1aSopenharmony_ci vld1.32 {q8}, [r4,:128]! 210cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q8, #31 211cabdff1aSopenharmony_ci vld1.32 {q9}, [r5,:128]! 212cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q9, #31 213cabdff1aSopenharmony_ci vld1.32 {q10}, [r4,:128]! 214cabdff1aSopenharmony_ci vcvt.s32.f32 q10, q10, #31 215cabdff1aSopenharmony_ci vld1.32 {q11}, [r5,:128]! 216cabdff1aSopenharmony_ci vcvt.s32.f32 q11, q11, #31 217cabdff1aSopenharmony_ci beq 6f 218cabdff1aSopenharmony_ci subs lr, lr, #8 219cabdff1aSopenharmony_ci beq 7f 220cabdff1aSopenharmony_ci vsri.32 d18, d16, #16 221cabdff1aSopenharmony_ci vsri.32 d19, d17, #16 222cabdff1aSopenharmony_ci vld1.32 {q8}, [r4,:128]! 223cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q8, #31 224cabdff1aSopenharmony_ci vst1.32 {d18[0]}, [r8], r12 225cabdff1aSopenharmony_ci vsri.32 d22, d20, #16 226cabdff1aSopenharmony_ci vst1.32 {d18[1]}, [r8], r12 227cabdff1aSopenharmony_ci vsri.32 d23, d21, #16 228cabdff1aSopenharmony_ci vst1.32 {d19[0]}, [r8], r12 229cabdff1aSopenharmony_ci vst1.32 {d19[1]}, [r8], r12 230cabdff1aSopenharmony_ci vld1.32 {q9}, [r5,:128]! 231cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q9, #31 232cabdff1aSopenharmony_ci vst1.32 {d22[0]}, [r8], r12 233cabdff1aSopenharmony_ci vst1.32 {d22[1]}, [r8], r12 234cabdff1aSopenharmony_ci vld1.32 {q10}, [r4,:128]! 235cabdff1aSopenharmony_ci vcvt.s32.f32 q10, q10, #31 236cabdff1aSopenharmony_ci vst1.32 {d23[0]}, [r8], r12 237cabdff1aSopenharmony_ci vst1.32 {d23[1]}, [r8], r12 238cabdff1aSopenharmony_ci vld1.32 {q11}, [r5,:128]! 239cabdff1aSopenharmony_ci vcvt.s32.f32 q11, q11, #31 240cabdff1aSopenharmony_ci6: subs lr, lr, #16 241cabdff1aSopenharmony_ci vld1.32 {q0}, [r4,:128]! 242cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 243cabdff1aSopenharmony_ci vsri.32 d18, d16, #16 244cabdff1aSopenharmony_ci vld1.32 {q1}, [r5,:128]! 245cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 246cabdff1aSopenharmony_ci vsri.32 d19, d17, #16 247cabdff1aSopenharmony_ci vld1.32 {q2}, [r4,:128]! 248cabdff1aSopenharmony_ci vcvt.s32.f32 q2, q2, #31 249cabdff1aSopenharmony_ci vld1.32 {q3}, [r5,:128]! 250cabdff1aSopenharmony_ci vcvt.s32.f32 q3, q3, #31 251cabdff1aSopenharmony_ci vst1.32 {d18[0]}, [r8], r12 252cabdff1aSopenharmony_ci vsri.32 d22, d20, #16 253cabdff1aSopenharmony_ci vst1.32 {d18[1]}, [r8], r12 254cabdff1aSopenharmony_ci vsri.32 d23, d21, #16 255cabdff1aSopenharmony_ci vst1.32 {d19[0]}, [r8], r12 256cabdff1aSopenharmony_ci vsri.32 d2, d0, #16 257cabdff1aSopenharmony_ci vst1.32 {d19[1]}, [r8], r12 258cabdff1aSopenharmony_ci vsri.32 d3, d1, #16 259cabdff1aSopenharmony_ci vst1.32 {d22[0]}, [r8], r12 260cabdff1aSopenharmony_ci vsri.32 d6, d4, #16 261cabdff1aSopenharmony_ci vst1.32 {d22[1]}, [r8], r12 262cabdff1aSopenharmony_ci vsri.32 d7, d5, #16 263cabdff1aSopenharmony_ci vst1.32 {d23[0]}, [r8], r12 264cabdff1aSopenharmony_ci vst1.32 {d23[1]}, [r8], r12 265cabdff1aSopenharmony_ci beq 6f 266cabdff1aSopenharmony_ci vld1.32 {q8}, [r4,:128]! 267cabdff1aSopenharmony_ci vcvt.s32.f32 q8, q8, #31 268cabdff1aSopenharmony_ci vst1.32 {d2[0]}, [r8], r12 269cabdff1aSopenharmony_ci vst1.32 {d2[1]}, [r8], r12 270cabdff1aSopenharmony_ci vld1.32 {q9}, [r5,:128]! 271cabdff1aSopenharmony_ci vcvt.s32.f32 q9, q9, #31 272cabdff1aSopenharmony_ci vst1.32 {d3[0]}, [r8], r12 273cabdff1aSopenharmony_ci vst1.32 {d3[1]}, [r8], r12 274cabdff1aSopenharmony_ci vld1.32 {q10}, [r4,:128]! 275cabdff1aSopenharmony_ci vcvt.s32.f32 q10, q10, #31 276cabdff1aSopenharmony_ci vst1.32 {d6[0]}, [r8], r12 277cabdff1aSopenharmony_ci vst1.32 {d6[1]}, [r8], r12 278cabdff1aSopenharmony_ci vld1.32 {q11}, [r5,:128]! 279cabdff1aSopenharmony_ci vcvt.s32.f32 q11, q11, #31 280cabdff1aSopenharmony_ci vst1.32 {d7[0]}, [r8], r12 281cabdff1aSopenharmony_ci vst1.32 {d7[1]}, [r8], r12 282cabdff1aSopenharmony_ci bgt 6b 283cabdff1aSopenharmony_ci6: vst1.32 {d2[0]}, [r8], r12 284cabdff1aSopenharmony_ci vst1.32 {d2[1]}, [r8], r12 285cabdff1aSopenharmony_ci vst1.32 {d3[0]}, [r8], r12 286cabdff1aSopenharmony_ci vst1.32 {d3[1]}, [r8], r12 287cabdff1aSopenharmony_ci vst1.32 {d6[0]}, [r8], r12 288cabdff1aSopenharmony_ci vst1.32 {d6[1]}, [r8], r12 289cabdff1aSopenharmony_ci vst1.32 {d7[0]}, [r8], r12 290cabdff1aSopenharmony_ci vst1.32 {d7[1]}, [r8], r12 291cabdff1aSopenharmony_ci b 8f 292cabdff1aSopenharmony_ci7: vsri.32 d18, d16, #16 293cabdff1aSopenharmony_ci vsri.32 d19, d17, #16 294cabdff1aSopenharmony_ci vst1.32 {d18[0]}, [r8], r12 295cabdff1aSopenharmony_ci vsri.32 d22, d20, #16 296cabdff1aSopenharmony_ci vst1.32 {d18[1]}, [r8], r12 297cabdff1aSopenharmony_ci vsri.32 d23, d21, #16 298cabdff1aSopenharmony_ci vst1.32 {d19[0]}, [r8], r12 299cabdff1aSopenharmony_ci vst1.32 {d19[1]}, [r8], r12 300cabdff1aSopenharmony_ci vst1.32 {d22[0]}, [r8], r12 301cabdff1aSopenharmony_ci vst1.32 {d22[1]}, [r8], r12 302cabdff1aSopenharmony_ci vst1.32 {d23[0]}, [r8], r12 303cabdff1aSopenharmony_ci vst1.32 {d23[1]}, [r8], r12 304cabdff1aSopenharmony_ci8: subs r3, r3, #2 305cabdff1aSopenharmony_ci add r0, r0, #4 306cabdff1aSopenharmony_ci it eq 307cabdff1aSopenharmony_ci popeq {r4-r8, pc} 308cabdff1aSopenharmony_ci 309cabdff1aSopenharmony_ci @ 1 channel 310cabdff1aSopenharmony_ci4: ldr r4, [r1] 311cabdff1aSopenharmony_ci tst r2, #8 312cabdff1aSopenharmony_ci mov lr, r2 313cabdff1aSopenharmony_ci mov r5, r0 314cabdff1aSopenharmony_ci vld1.32 {q0}, [r4,:128]! 315cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 316cabdff1aSopenharmony_ci vld1.32 {q1}, [r4,:128]! 317cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 318cabdff1aSopenharmony_ci bne 8f 319cabdff1aSopenharmony_ci6: subs lr, lr, #16 320cabdff1aSopenharmony_ci vld1.32 {q2}, [r4,:128]! 321cabdff1aSopenharmony_ci vcvt.s32.f32 q2, q2, #31 322cabdff1aSopenharmony_ci vld1.32 {q3}, [r4,:128]! 323cabdff1aSopenharmony_ci vcvt.s32.f32 q3, q3, #31 324cabdff1aSopenharmony_ci vst1.16 {d0[1]}, [r5,:16], r12 325cabdff1aSopenharmony_ci vst1.16 {d0[3]}, [r5,:16], r12 326cabdff1aSopenharmony_ci vst1.16 {d1[1]}, [r5,:16], r12 327cabdff1aSopenharmony_ci vst1.16 {d1[3]}, [r5,:16], r12 328cabdff1aSopenharmony_ci vst1.16 {d2[1]}, [r5,:16], r12 329cabdff1aSopenharmony_ci vst1.16 {d2[3]}, [r5,:16], r12 330cabdff1aSopenharmony_ci vst1.16 {d3[1]}, [r5,:16], r12 331cabdff1aSopenharmony_ci vst1.16 {d3[3]}, [r5,:16], r12 332cabdff1aSopenharmony_ci beq 7f 333cabdff1aSopenharmony_ci vld1.32 {q0}, [r4,:128]! 334cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 335cabdff1aSopenharmony_ci vld1.32 {q1}, [r4,:128]! 336cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 337cabdff1aSopenharmony_ci7: vst1.16 {d4[1]}, [r5,:16], r12 338cabdff1aSopenharmony_ci vst1.16 {d4[3]}, [r5,:16], r12 339cabdff1aSopenharmony_ci vst1.16 {d5[1]}, [r5,:16], r12 340cabdff1aSopenharmony_ci vst1.16 {d5[3]}, [r5,:16], r12 341cabdff1aSopenharmony_ci vst1.16 {d6[1]}, [r5,:16], r12 342cabdff1aSopenharmony_ci vst1.16 {d6[3]}, [r5,:16], r12 343cabdff1aSopenharmony_ci vst1.16 {d7[1]}, [r5,:16], r12 344cabdff1aSopenharmony_ci vst1.16 {d7[3]}, [r5,:16], r12 345cabdff1aSopenharmony_ci bgt 6b 346cabdff1aSopenharmony_ci pop {r4-r8, pc} 347cabdff1aSopenharmony_ci8: subs lr, lr, #8 348cabdff1aSopenharmony_ci vst1.16 {d0[1]}, [r5,:16], r12 349cabdff1aSopenharmony_ci vst1.16 {d0[3]}, [r5,:16], r12 350cabdff1aSopenharmony_ci vst1.16 {d1[1]}, [r5,:16], r12 351cabdff1aSopenharmony_ci vst1.16 {d1[3]}, [r5,:16], r12 352cabdff1aSopenharmony_ci vst1.16 {d2[1]}, [r5,:16], r12 353cabdff1aSopenharmony_ci vst1.16 {d2[3]}, [r5,:16], r12 354cabdff1aSopenharmony_ci vst1.16 {d3[1]}, [r5,:16], r12 355cabdff1aSopenharmony_ci vst1.16 {d3[3]}, [r5,:16], r12 356cabdff1aSopenharmony_ci it eq 357cabdff1aSopenharmony_ci popeq {r4-r8, pc} 358cabdff1aSopenharmony_ci vld1.32 {q0}, [r4,:128]! 359cabdff1aSopenharmony_ci vcvt.s32.f32 q0, q0, #31 360cabdff1aSopenharmony_ci vld1.32 {q1}, [r4,:128]! 361cabdff1aSopenharmony_ci vcvt.s32.f32 q1, q1, #31 362cabdff1aSopenharmony_ci b 6b 363cabdff1aSopenharmony_ciendfunc 364