151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@/****************************************************************************** 251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * Copyright (C) 2018 The Android Open Source Project 451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * Licensed under the Apache License, Version 2.0 (the "License"); 651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * you may not use this file except in compliance with the License. 751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * You may obtain a copy of the License at: 851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * http://www.apache.org/licenses/LICENSE-2.0 1051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 1151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * Unless required by applicable law or agreed to in writing, software 1251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * distributed under the License is distributed on an "AS IS" BASIS, 1351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * See the License for the specific language governing permissions and 1551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * limitations under the License. 1651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 1751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ ***************************************************************************** 1851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 1951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@*/ 2051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.text 2351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.p2align 2 2451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.global ixheaacd_mps_mulshift_acc 2551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickixheaacd_mps_mulshift_acc: 2751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick STMFD sp!, {R4-R12, R14} 2951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VPUSH {d8 - d15} 3051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR R4, [SP, #104] @Argument V_fix 3151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR R5, [SP, #108] @Argument 2*resolution 3251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ASR R6, R5, #1 3351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 3451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R7, R4 3551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R11, #40 3651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MUL R11, R11, R5 3751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ADD R7, R7, R11 3851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LSL R8, R5, #2 3951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUB R8, R7, R8 4051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R10, #9 4151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MUL R9, R5, R10 4251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4351aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickCOPYLOOP: 4451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUB R8, R8, #32 4551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q0, Q1}, [R8] 4651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUB R7, R7, #32 4751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VST1.32 {Q0, Q1}, [R7] 4851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS R9, R9, #8 4951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BGT COPYLOOP 5051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5151aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickLOOP: 5251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMOV.I64 Q14, #0 5351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMOV.I64 Q15, #0 5451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R7, R6 5551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R8, R0 5651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R9, R1 5751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5851aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickLOOP1: 5951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q0, Q1}, [R8]! @LOADING values from R0 Sr_fix 6051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q2, Q3}, [R9]! @LOADING values from R1 Si_fix 6151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q4, Q5}, [R2]! @LOADING values from R2 N.real_fix 6251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q6, Q7}, [R3]! @LOADING values from R3 N.imag_fix 6351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q12, D0, D8 6551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q10, D1, D9 6651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q11, D3, D11 6751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q13, D2, D10 6851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q0, D4, D12 7051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q4, D5, D13 7151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q5, D7, D15 7251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q1, D6, D14 7351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q0, Q0, #31 7551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q1, Q1, #31 7651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q4, Q4, #31 7751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q5, Q5, #31 7851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q12, Q12, #31 8051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q13, Q13, #31 8151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q10, Q10, #31 8251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q11, Q11, #31 8351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q12, Q12, Q0 8551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q13, Q13, Q1 8651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q10, Q10, Q4 8751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q11, Q11, Q5 8851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q12, Q12, Q13 9051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q10, Q10, Q11 9151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q12, Q12, Q10 9251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 D24, D24, D25 9351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 D28, D28, D24 9451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS R7, R7, #8 9551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BGT LOOP1 9651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R7, R6 9951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R8, R0 10051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R9, R1 10151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 10251aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickLOOP2: 10351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q0, Q1}, [R8]! @LOADING values from R0 Sr_fix 10451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q2, Q3}, [R9]! @LOADING values from R1 Si_fix 10551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q4, Q5}, [R2]! @LOADING values from R2 N.real_fix 10651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q6, Q7}, [R3]! @LOADING values from R3 N.imag_fix 10751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 10851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q12, D0, D8 10951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q10, D1, D9 11051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q11, D3, D11 11151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q13, D2, D10 11251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 11351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q0, D4, D12 11451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q4, D5, D13 11551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q5, D7, D15 11651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q1, D6, D14 11751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 11851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q12, Q12, #31 11951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q13, Q13, #31 12051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q10, Q10, #31 12151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q11, Q11, #31 12251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 12351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q0, Q0, #31 12451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q1, Q1, #31 12551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q4, Q4, #31 12651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q5, Q5, #31 12751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 12851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q12, Q12, Q0 12951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q13, Q13, Q1 13051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q10, Q10, Q4 13151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q11, Q11, Q5 13251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 13351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q12, Q12, Q13 13451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q10, Q10, Q11 13551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q12, Q12, Q10 13651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 D24, D24, D25 13751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 D29, D29, D24 13851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS R7, R7, #8 13951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BGT LOOP2 14051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 14151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R7, R6 14251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R8, R0 14351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R9, R1 14451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 14551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 14651aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickLOOP3: 14751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q0, Q1}, [R8]! @LOADING values from R0 Sr_fix 14851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q2, Q3}, [R9]! @LOADING values from R1 Si_fix 14951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q4, Q5}, [R2]! @LOADING values from R2 N.real_fix 15051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q6, Q7}, [R3]! @LOADING values from R3 N.imag_fix 15151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 15251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q12, D0, D8 15351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q10, D1, D9 15451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q11, D3, D11 15551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q13, D2, D10 15651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 15751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q0, D4, D12 15851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q4, D5, D13 15951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q5, D7, D15 16051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q1, D6, D14 16151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 16251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q12, Q12, #31 16351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q13, Q13, #31 16451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q10, Q10, #31 16551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q11, Q11, #31 16651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 16751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q0, Q0, #31 16851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q1, Q1, #31 16951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q4, Q4, #31 17051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q5, Q5, #31 17151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 17251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q12, Q12, Q0 17351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q13, Q13, Q1 17451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q10, Q10, Q4 17551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q11, Q11, Q5 17651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 17751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q12, Q12, Q13 17851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q10, Q10, Q11 17951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q12, Q12, Q10 18051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 D24, D24, D25 18151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 D30, D30, D24 18251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS R7, R7, #8 18351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BGT LOOP3 18451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 18551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R7, R6 18651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R8, R0 18751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV R9, R1 18851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 18951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 19051aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickLOOP4: 19151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q0, Q1}, [R8]! @LOADING values from R0 Sr_fix 19251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q2, Q3}, [R9]! @LOADING values from R1 Si_fix 19351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q4, Q5}, [R2]! @LOADING values from R2 N.real_fix 19451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VLD1.32 {Q6, Q7}, [R3]! @LOADING values from R3 N.imag_fix 19551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 19651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q12, D0, D8 19751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q10, D1, D9 19851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q11, D3, D11 19951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q13, D2, D10 20051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 20151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q0, D4, D12 20251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q4, D5, D13 20351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q5, D7, D15 20451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VMULL.S32 Q1, D6, D14 20551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 20651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q12, Q12, #31 20751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q13, Q13, #31 20851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q10, Q10, #31 20951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q11, Q11, #31 21051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 21151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q0, Q0, #31 21251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q1, Q1, #31 21351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q4, Q4, #31 21451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSHR.S64 Q5, Q5, #31 21551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 21651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q12, Q12, Q0 21751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q13, Q13, Q1 21851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q10, Q10, Q4 21951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VSUB.I64 Q11, Q11, Q5 22051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 22151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q12, Q12, Q13 22251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q10, Q10, Q11 22351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 Q12, Q12, Q10 22451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 D24, D24, D25 22551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VADD.I64 D31, D31, D24 22651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS R7, R7, #8 22751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BGT LOOP4 22851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 22951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VQMOVN.S64 D0, Q14 23051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VQMOVN.S64 D1, Q15 23151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 23251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VST1.32 {Q0}, [R4]! @Storing values to R4 23351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 23451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS R5, R5, #4 23551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BGT LOOP 23651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 23751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick VPOP {d8 - d15} 23851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDMFD sp!, {R4-R12, R14} 23951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BX LR 24051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 241