@/****************************************************************************** @ * @ * 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 .global ixheaacd_over_lap_add1_armv7 ixheaacd_over_lap_add1_armv7: STMFD sp!, {R4-R12, R14} VPUSH {d8 - d15} LDR R4, [SP, #104] LDR R5, [SP, #108] LDR R6, [SP, #112] MOV R10, R5, LSL #1 SUB R11, R10, #1 MOV R10, R11, LSL #2 ADD R10, R0, R10 SUB R10, R10, #12 MOV R8, R11, LSL #1 ADD R8, R8, R3 SUB R8, R8, #14 MOV R12, #0 VDUP.S16 D12, R12 MOV R12, #-16 VDUP.16 Q11, R4 VLD1.32 {D6, D7}, [R10], R12 MOV R7, #0x2000 VREV64.32 Q3, Q3 RSB R7, R7, #0 VQNEG.S32 Q0, Q3 VDUP.32 Q10, R7 VUZP.16 D1, D0 SUB R11, R5, #1 VUZP.16 D7, D6 SMULBB R11, R11, R6 MOV R11, R11, LSL #1 VLD2.16 {D2, D3}, [R8], R12 ADD R11, R11, R2 VREV64.16 Q1, Q1 MOV R4, R6, LSL #1 RSB R4, R4, #0 MOV R9, R6, LSL #1 SMULBB R6, R5, R6 MOV R6, R6, LSL #1 ADD R6, R6, R2 VMULL.U16 Q15, D7, D2 VLD1.32 {D4, D5}, [R1]! VSHR.U32 Q15, Q15, #16 VMLAL.S16 Q15, D6, D2 VQSHL.S32 Q15, Q15, Q11 VADDL.S16 Q7, D3, D12 VMULL.S32 Q13, D4, D14 VQMOVN.S64 D28, Q13 VMULL.S32 Q13, D5, D15 VQMOVN.S64 D29, Q13 VQADD.S32 Q14, Q14, Q10 VQSUB.S32 Q13, Q15, Q14 VQSHL.S32 Q13, Q13, #2 VSHR.S32 Q13, Q13, #16 VUZP.16 D26, D27 VMULL.U16 Q12, D1, D3 VSHR.U32 Q12, Q12, #16 VMLAL.S16 Q12, D0, D3 VQSHL.S32 Q12, Q12, Q11 VLD1.32 {D6, D7}, [R10], R12 VADDL.S16 Q7, D2, D12 VMULL.S32 Q0, D14, D4 VQMOVN.S64 D16, Q0 VMULL.S32 Q0, D15, D5 VQMOVN.S64 D17, Q0 VREV64.32 Q3, Q3 VQADD.S32 Q8, Q8, Q10 VQNEG.S32 Q0, Q3 VUZP.16 D1, D0 VQSUB.S32 Q9, Q12, Q8 VUZP.16 D7, D6 VQSHL.S32 Q9, Q9, #2 VLD2.16 {D2, D3}, [R8], R12 VSHR.S32 Q9, Q9, #16 VREV64.16 Q1, Q1 VUZP.16 D18, D19 VLD1.32 {D4, D5}, [R1]! SUB R5, R5, #8 LOOP_1: VST1.16 D26[0], [R11], R4 VMULL.U16 Q15, D7, D2 VST1.16 D26[1], [R11], R4 VMULL.U16 Q12, D1, D3 VST1.16 D26[2], [R11], R4 VSHR.U32 Q15, Q15, #16 VST1.16 D26[3], [R11], R4 VSHR.U32 Q12, Q12, #16 VST1.16 D18[0], [R6], R9 VMLAL.S16 Q15, D6, D2 VST1.16 D18[1], [R6], R9 VMLAL.S16 Q12, D0, D3 VST1.16 D18[2], [R6], R9 VQSHL.S32 Q15, Q15, Q11 VST1.16 D18[3], [R6], R9 VQSHL.S32 Q12, Q12, Q11 VLD1.32 {D6, D7}, [R10], R12 VADDL.S16 Q7, D3, D12 VMULL.S32 Q8, D4, D14 VQMOVN.S64 D28, Q8 VMULL.S32 Q8, D5, D15 VQMOVN.S64 D29, Q8 VREV64.32 Q3, Q3 VADDL.S16 Q7, D2, D12 VMULL.S32 Q0, D4, D14 VQMOVN.S64 D16, Q0 VMULL.S32 Q0, D5, D15 VQMOVN.S64 D17, Q0 VLD2.16 {D2, D3}, [R8], R12 VQNEG.S32 Q0, Q3 VLD1.32 {D4, D5}, [R1]! VQADD.S32 Q14, Q14, Q10 VUZP.16 D1, D0 VQADD.S32 Q8, Q8, Q10 VUZP.16 D7, D6 VQSUB.S32 Q13, Q15, Q14 VREV64.16 Q1, Q1 VQSUB.S32 Q9, Q12, Q8 VQSHL.S32 Q13, Q13, #2 VQSHL.S32 Q9, Q9, #2 VMULL.U16 Q15, D7, D2 VSHR.S32 Q13, Q13, #16 VUZP.16 D26, D27 VSHR.S32 Q9, Q9, #16 VST1.16 D26[0], [R11], R4 VMULL.U16 Q12, D1, D3 VUZP.16 D18, D19 VSHR.U32 Q15, Q15, #16 VST1.16 D26[1], [R11], R4 VMLAL.S16 Q15, D6, D2 @MLA VST1.16 D26[2], [R11], R4 VSHR.U32 Q12, Q12, #16 VST1.16 D26[3], [R11], R4 VMLAL.S16 Q12, D0, D3 @MLA VST1.16 D18[0], [R6], R9 VQSHL.S32 Q15, Q15, Q11 VST1.16 D18[1], [R6], R9 VQSHL.S32 Q12, Q12, Q11 VST1.16 D18[2], [R6], R9 VADDL.S16 Q7, D3, D12 VMULL.S32 Q8, D4, D14 VQMOVN.S64 D28, Q8 VMULL.S32 Q8, D5, D15 VQMOVN.S64 D29, Q8 VST1.16 D18[3], [R6], R9 VADDL.S16 Q7, D2, D12 VMULL.S32 Q0, D4, D14 VQMOVN.S64 D16, Q0 VMULL.S32 Q0, D5, D15 VQMOVN.S64 D17, Q0 VLD1.32 {D6, D7}, [R10], R12 VQADD.S32 Q14, Q14, Q10 VREV64.32 Q3, Q3 VQNEG.S32 Q0, Q3 VUZP.16 D1, D0 VQSUB.S32 Q13, Q15, Q14 VUZP.16 D7, D6 VQADD.S32 Q8, Q8, Q10 VLD2.16 {D2, D3}, [R8], R12 VQSUB.S32 Q9, Q12, Q8 VREV64.16 Q1, Q1 VQSHL.S32 Q13, Q13, #2 VLD1.32 {D4, D5}, [R1]! VQSHL.S32 Q9, Q9, #2 VSHR.S32 Q13, Q13, #16 SUBS R5, R5, #8 VSHR.S32 Q9, Q9, #16 VUZP.16 D26, D27 VUZP.16 D18, D19 BGT LOOP_1 VST1.16 D26[0], [R11], R4 VMULL.U16 Q15, D7, D2 VST1.16 D26[1], [R11], R4 VMULL.U16 Q12, D1, D3 VST1.16 D26[2], [R11], R4 VSHR.U32 Q15, Q15, #16 VST1.16 D26[3], [R11], R4 VSHR.U32 Q12, Q12, #16 VST1.16 D18[0], [R6], R9 VMLAL.S16 Q15, D6, D2 VST1.16 D18[1], [R6], R9 VMLAL.S16 Q12, D0, D3 VST1.16 D18[2], [R6], R9 VQSHL.S32 Q15, Q15, Q11 VST1.16 D18[3], [R6], R9 VQSHL.S32 Q12, Q12, Q11 VADDL.S16 Q7, D3, D12 VMULL.S32 Q8, D4, D14 VQMOVN.S64 D28, Q8 VMULL.S32 Q8, D5, D15 VQMOVN.S64 D29, Q8 VADDL.S16 Q7, D2, D12 VMULL.S32 Q13, D4, D14 VQMOVN.S64 D16, Q13 VMULL.S32 Q13, D5, D15 VQMOVN.S64 D17, Q13 VQADD.S32 Q14, Q14, Q10 VQADD.S32 Q8, Q8, Q10 VQSUB.S32 Q13, Q15, Q14 VQSUB.S32 Q9, Q12, Q8 VQSHL.S32 Q13, Q13, #2 VQSHL.S32 Q9, Q9, #2 VSHR.S32 Q13, Q13, #16 VSHR.S32 Q9, Q9, #16 VUZP.16 D26, D27 VUZP.16 D18, D19 VST1.16 D26[0], [R11], R4 VST1.16 D26[1], [R11], R4 VST1.16 D26[2], [R11], R4 VST1.16 D26[3], [R11], R4 VST1.16 D18[0], [R6], R9 VST1.16 D18[1], [R6], R9 VST1.16 D18[2], [R6], R9 VST1.16 D18[3], [R6], R9 VPOP {d8 - d15} LDMFD sp!, {R4-R12, R15}