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