@/****************************************************************************** @ * @ * Copyright (C) 2018 The Android Open Source Project @ * @ * Licensed under the Apache License, Version 2.0 (the "License"); @ * you may not use this file except in compliance with the License. @ * You may obtain a copy of the License at: @ * @ * http://www.apache.org/licenses/LICENSE-2.0 @ * @ * Unless required by applicable law or agreed to in writing, software @ * distributed under the License is distributed on an "AS IS" BASIS, @ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @ * See the License for the specific language governing permissions and @ * limitations under the License. @ * @ ***************************************************************************** @ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore @*/ .text .p2align 2 .extern ixheaacd_radix4bfly .hidden ixheaacd_radix4bfly .extern ixheaacd_postradixcompute2 .hidden ixheaacd_postradixcompute2 .extern ixheaacd_sbr_imdct_using_fft .hidden ixheaacd_sbr_imdct_using_fft .global ixheaacd_dec_DCT2_64_asm .type ixheaacd_dec_DCT2_64_asm, %function ixheaacd_dec_DCT2_64_asm: STMFD sp!, {r0-r3, r4-r12, r14} ADD R2, R1, #252 MOV R3, #32 MOV R4, #-4 ADD R2, R2, #4 FOR_LOOP: VLD2.32 {Q0, Q1}, [R0]! SUBS R3, R3, #4 VST1.32 {Q0}, [R1]! SUB R2, R2, #16 VREV64.32 Q1, Q1 VSWP D2, D3 VST1.32 {Q1}, [R2] BGT FOR_LOOP LDR r0, [sp, #8] MOV r1, #32 LDR r2, [sp, #4] LDR r3, [sp] LDR r4, [sp, #12] STR r4, [sp, #-4]! STR r4, [sp, #-4]! STR r4, [sp, #-4]! STR r4, [sp, #-4]! BL ixheaacd_sbr_imdct_using_fft ADD sp, sp, #16 LDR r0, [sp] LDR r2, [sp, #56] VPUSH {D8 - D15} ADD R5, R0, #252 VLD1.32 D0, [R0] ADD R3, R2, #2 VSHL.S32 D0, D0, #1 VST1.32 D0, [R0]! SUB R5, R5, #28 VLD2.32 {Q0, Q1}, [R0]! VLD2.32 {Q2, Q3}, [R5]! VREV64.32 Q2, Q2 VSWP D4, D5 MOV R10, #-8 VREV64.32 Q3, Q3 ADD R4, R2, #30 VSWP D6, D7 SUB R4, R4, #6 VLD1.16 D8, [R3]! VSUB.I32 Q11, Q3, Q1 VLD1.16 D10, [R4], R10 VADD.I32 Q10, Q3, Q1 VREV64.16 D10, D10 VSUB.I32 Q9, Q0, Q2 VUZP.16 D20, D21 VADD.I32 Q8, Q0, Q2 VUZP.16 D18, D19 VMULL.U16 Q15, D20, D8 VMLSL.U16 Q15, D18, D10 VMULL.U16 Q14, D18, D8 VMLAL.U16 Q14, D20, D10 SUB R11, R0, #32 VSHR.S32 Q15, Q15, #16 VSHR.U32 Q14, Q14, #16 SUB R12, R5, #32 VMLAL.S16 Q15, D21, D8 VMLSL.S16 Q15, D19, D10 VLD2.32 {Q0, Q1}, [R0]! SUB R5, R5, #64 VMLAL.S16 Q14, D19, D8 VLD2.32 {Q2, Q3}, [R5]! VMLAL.S16 Q14, D21, D10 VREV64.32 Q2, Q2 VSHL.S32 Q15, Q15, #1 VSWP D4, D5 VSHL.S32 Q14, Q14, #1 VREV64.32 Q3, Q3 VADD.I32 Q13, Q8, Q15 VSWP D6, D7 VADD.I32 Q12, Q11, Q14 VLD1.16 D8, [R3]! VSUB.I32 Q7, Q14, Q11 VLD1.16 D10, [R4], R10 VSUB.I32 Q6, Q8, Q15 VREV64.32 Q7, Q7 VREV64.32 Q6, Q6 VSWP D14, D15 VSWP D12, D13 VREV64.16 D10, D10 VSUB.I32 Q11, Q3, Q1 VSWP Q13, Q12 VADD.I32 Q10, Q3, Q1 VST2.32 {Q12, Q13}, [R11]! VSUB.I32 Q9, Q0, Q2 VADD.I32 Q8, Q0, Q2 VST2.32 {Q6, Q7}, [R12] SUB R11, R0, #32 VUZP.16 D20, D21 SUB R12, R5, #32 VUZP.16 D18, D19 SUB R5, R5, #64 VMULL.U16 Q15, D20, D8 VLD2.32 {Q0, Q1}, [R0]! VMLSL.U16 Q15, D18, D10 VLD2.32 {Q2, Q3}, [R5]! VMULL.U16 Q14, D18, D8 VREV64.32 Q2, Q2 VMLAL.U16 Q14, D20, D10 VSWP D4, D5 VSHR.S32 Q15, Q15, #16 VREV64.32 Q3, Q3 VMLAL.S16 Q15, D21, D8 VMLSL.S16 Q15, D19, D10 VSWP D6, D7 VSHR.U32 Q14, Q14, #16 VMLAL.S16 Q14, D19, D8 VLD1.16 D8, [R3]! VMLAL.S16 Q14, D21, D10 VSHL.S32 Q15, Q15, #1 VLD1.16 D10, [R4], R10 VSHL.S32 Q14, Q14, #1 VREV64.16 D10, D10 VADD.I32 Q13, Q8, Q15 VADD.I32 Q12, Q11, Q14 VSUB.I32 Q7, Q14, Q11 VSUB.I32 Q6, Q8, Q15 VREV64.32 Q7, Q7 VSUB.I32 Q11, Q3, Q1 VREV64.32 Q6, Q6 VADD.I32 Q10, Q3, Q1 VSWP D14, D15 VSUB.I32 Q9, Q0, Q2 VSWP D12, D13 VADD.I32 Q8, Q0, Q2 VSWP Q13, Q12 VUZP.16 D20, D21 VUZP.16 D18, D19 VMULL.U16 Q15, D20, D8 VMLSL.U16 Q15, D18, D10 VST2.32 {Q12, Q13}, [R11]! VMULL.U16 Q14, D18, D8 VMLAL.U16 Q14, D20, D10 VST2.32 {Q6, Q7}, [R12] SUB R11, R0, #32 VLD2.32 {Q0, Q1}, [R0]! SUB R12, R5, #32 SUB R5, R5, #64 VSHR.S32 Q15, Q15, #16 VLD2.32 {Q2, Q3}, [R5]! VMLAL.S16 Q15, D21, D8 VREV64.32 Q2, Q2 VMLSL.S16 Q15, D19, D10 VSWP D4, D5 VSHR.U32 Q14, Q14, #16 VREV64.32 Q3, Q3 VMLAL.S16 Q14, D19, D8 VSWP D6, D7 VMLAL.S16 Q14, D21, D10 VSHL.S32 Q15, Q15, #1 VLD1.16 D8, [R3]! VSHL.S32 Q14, Q14, #1 VADD.I32 Q13, Q8, Q15 VLD1.16 D10, [R4], R10 VADD.I32 Q12, Q11, Q14 VREV64.16 D10, D10 VSUB.I32 Q7, Q14, Q11 VSUB.I32 Q6, Q8, Q15 VREV64.32 Q7, Q7 VREV64.32 Q6, Q6 VSWP D14, D15 VSWP D12, D13 VSWP Q13, Q12 VSUB.I32 Q11, Q3, Q1 VST2.32 {Q12, Q13}, [R11]! VADD.I32 Q10, Q3, Q1 VST2.32 {Q6, Q7}, [R12] SUB R11, R0, #32 VSUB.I32 Q9, Q0, Q2 VADD.I32 Q8, Q0, Q2 VUZP.16 D20, D21 SUB R12, R5, #32 VUZP.16 D18, D19 SUB R5, R5, #64 VMULL.U16 Q15, D20, D8 VMLSL.U16 Q15, D18, D10 VMULL.U16 Q14, D18, D8 VMLAL.U16 Q14, D20, D10 VSHR.S32 Q15, Q15, #16 VMLAL.S16 Q15, D21, D8 VMLSL.S16 Q15, D19, D10 VSHR.U32 Q14, Q14, #16 VMLAL.S16 Q14, D19, D8 VMLAL.S16 Q14, D21, D10 VSHL.S32 Q15, Q15, #1 VSHL.S32 Q14, Q14, #1 VADD.I32 Q13, Q8, Q15 VADD.I32 Q12, Q11, Q14 VSUB.I32 Q7, Q14, Q11 VSUB.I32 Q6, Q8, Q15 VREV64.32 Q7, Q7 VREV64.32 Q6, Q6 VSWP D14, D15 VSWP D12, D13 VSWP Q13, Q12 VST2.32 {Q12, Q13}, [R11]! VST2.32 {Q6, Q7}, [R12] VPOP {D8 - D15} LDMFD sp!, {r0-r2, r3} LDR R1, [SP, #48] LDR R2, [SP, #44] ADD R3, R1, #126 VLD1.32 D0[0], [R0, :32]! SUB R4, R1, #2 ADD R5, R1, #130 VLD1.32 D1[0], [R0, :32]! ADD R7, R2, #4 MOV R6, #0x8000 VDUP.32 Q15, R6 VADD.I32 D2, D0, D1 VSHR.S32 D2, D2, #1 VSHL.S32 D2, D2, #4 VADD.I32 Q2, Q1, Q15 VSHR.S32 Q2, Q2, #16 VSUB.I32 D6, D0, D1 VST1.16 D4[0], [R1]! MOV R8, #28 MOV R9, #-2 VLD2.32 {Q0, Q1}, [R0]! SUB R4, R4, #6 SUB R3, R3, #6 VLD2.16 {D4, D5}, [R7]! VUZP.16 D0, D1 VUZP.16 D2, D3 VMULL.U16 Q14, D0, D4 VMLSL.U16 Q14, D2, D5 VSHR.S32 Q14, Q14, #16 VMLAL.S16 Q14, D1, D4 VMLSL.S16 Q14, D3, D5 VMULL.U16 Q13, D0, D5 VMLAL.U16 Q13, D2, D4 VSHR.U32 Q13, Q13, #16 VMLAL.S16 Q13, D1, D5 VMLAL.S16 Q13, D3, D4 VSHL.S32 Q12, Q14, #4 VLD2.32 {Q0, Q1}, [R0]! VADD.I32 Q12, Q12, Q15 VSHR.S32 Q12, Q12, #16 VUZP.16 D24, D25 VSHL.S32 Q11, Q13, #4 VLD2.16 {D4, D5}, [R7]! VADD.I32 Q11, Q11, Q15 VSHR.S32 Q11, Q11, #16 VUZP.16 D22, D23 VQNEG.S16 D20, D22 VUZP.16 D0, D1 VUZP.16 D2, D3 SUB R8, R8, #8 LOOP_2: VMULL.U16 Q14, D0, D4 VST1.16 D24, [R1]! VMLSL.U16 Q14, D2, D5 VREV64.16 D24, D24 VMULL.U16 Q13, D0, D5 VMLAL.U16 Q13, D2, D4 VST1.16 D24, [R4] SUB R4, R4, #8 VREV64.16 D22, D22 VSHR.S32 Q14, Q14, #16 VSHR.U32 Q13, Q13, #16 VST1.16 D22, [R3] VMLAL.S16 Q14, D1, D4 VMLSL.S16 Q14, D3, D5 VST1.16 D20, [R5]! VMLAL.S16 Q13, D1, D5 VMLAL.S16 Q13, D3, D4 VSHL.S32 Q12, Q14, #4 SUB R3, R3, #8 VLD2.32 {Q0, Q1}, [R0]! VSHL.S32 Q11, Q13, #4 VADD.I32 Q12, Q12, Q15 VLD2.16 {D4, D5}, [R7]! VADD.I32 Q11, Q11, Q15 VUZP.16 D0, D1 VSHR.S32 Q12, Q12, #16 VUZP.16 D24, D25 VSHR.S32 Q11, Q11, #16 VUZP.16 D22, D23 SUBS R8, R8, #4 VUZP.16 D2, D3 VQNEG.S16 D20, D22 BGT LOOP_2 VMULL.U16 Q14, D0, D4 VST1.16 D24, [R1]! VMLSL.U16 Q14, D2, D5 VREV64.16 D24, D24 VMULL.U16 Q13, D0, D5 VMLAL.U16 Q13, D2, D4 VST1.16 D24, [R4] VSHR.S32 Q14, Q14, #16 SUB R4, R4, #8 VST1.16 D20, [R5]! VMLAL.S16 Q14, D1, D4 VMLSL.S16 Q14, D3, D5 VREV64.16 D22, D22 VSHR.U32 Q13, Q13, #16 VST1.16 D22, [R3] SUB R3, R3, #8 VMLAL.S16 Q13, D1, D5 VSHL.S32 Q12, Q14, #4 VMLAL.S16 Q13, D3, D4 VADD.I32 Q12, Q12, Q15 VSHL.S32 Q11, Q13, #4 VSHR.S32 Q12, Q12, #16 VUZP.16 D24, D25 VADD.I32 Q11, Q11, Q15 VST1.16 D24, [R1]! VSHR.S32 Q11, Q11, #16 VREV64.16 D24, D24 VUZP.16 D22, D23 VST1.16 D24, [R4] VQNEG.S16 D20, D22 SUB R4, R4, #2 VREV64.16 D22, D22 VST1.16 D22, [R3] SUB R3, R3, #2 VST1.16 D20, [R5]! VLD2.32 {Q0, Q1}, [R0]! VLD2.16 {Q2}, [R7] ADD R7, R7, #12 VUZP.16 D0, D1 VUZP.16 D2, D3 VMULL.U16 Q14, D0, D4 VMLSL.U16 Q14, D2, D5 VSHR.S32 Q14, Q14, #16 VMLAL.S16 Q14, D1, D4 VMLSL.S16 Q14, D3, D5 VMULL.U16 Q13, D0, D5 VMLAL.U16 Q13, D2, D4 VSHR.U32 Q13, Q13, #16 VMLAL.S16 Q13, D1, D5 VMLAL.S16 Q13, D3, D4 VSHL.S32 Q12, Q14, #4 VADD.I32 Q12, Q12, Q15 VSHR.S32 Q12, Q12, #16 VUZP.16 D24, D25 VSHL.S32 Q11, Q13, #4 VADD.I32 Q11, Q11, Q15 VSHR.S32 Q11, Q11, #16 VUZP.16 D22, D23 VQNEG.S16 D20, D22 VST1.16 D24[0], [R1]! VST1.16 D24[1], [R1]! VST1.16 D24[2], [R1]! VST1.16 D24[0], [R4], R9 VST1.16 D24[1], [R4], R9 VST1.16 D24[2], [R4], R9 VST1.16 D22[0], [R3], R9 VST1.16 D22[1], [R3], R9 VST1.16 D22[2], [R3], R9 VST1.16 D20[0], [R5]! VST1.16 D20[1], [R5]! VST1.16 D20[2], [R5]! VUZP.16 D6, D7 VLD1.16 D0, [R7]! VMULL.U16 Q1, D0, D6 VSHR.S32 Q1, Q1, #16 VMLAL.S16 Q1, D0, D7 VSHL.S32 Q1, Q1, #4 VADD.I32 Q1, Q1, Q15 VSHR.S32 Q1, Q1, #16 VST1.16 D2[0], [R1]! VST1.16 D2[0], [R4], R9 LDMFD sp!, {r4-r12, r15}