@/****************************************************************************** @ * @ * 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_add2_armv7 ixheaacd_over_lap_add2_armv7: STMFD sp!, {R4-R12, R14} VPUSH {d8 - d15} LDR R4, [SP, #104] LDR R5, [SP, #108] LDR R6, [SP, #112] RSB R4, R4, #15 CMP R4, #31 MOVGT R4, #31 SUB R9, R4, #1 MOV R8, #1 MOV R8, R8, LSL R9 RSB R4, R4, #0 VDUP.32 Q11, R4 VDUP.32 Q10, R8 MOV R8, R5 SUB R12, R5, #1 MOV R9, R5, LSL #2 MOV R12, R12, LSL #2 ADD R10, R0, R9 ADD R7, R1, R12 VLD2.16 {D0, D1}, [R10]! MOV R11, R6, LSL #2 SUB R7, R7, #12 ADD R4, R4, #1 MOV R12, #-16 VLD2.16 {D6, D7}, [R7], R12 MOV R4, #0x8000 VREV64.16 D4, D6 VREV64.16 D5, D7 MOV R4, R3 MOV R9, R2 VLD2.16 {D2, D3}, [R3]! VMULL.U16 Q13, D0, D2 VMLSL.U16 Q13, D4, D3 VLD2.16 {D8, D9}, [R10]! VSHR.S32 Q13, Q13, #16 VLD2.16 {D10, D11}, [R3]! VMLAL.S16 Q13, D1, D2 VMLSL.S16 Q13, D5, D3 VLD2.16 {D14, D15}, [R7], R12 VREV64.16 Q6, Q7 VQADD.S32 Q12, Q13, Q10 VQSHL.S32 Q12, Q12, Q11 SUB R8, R8, #8 LOOP_1: VLD2.16 {D0, D1}, [R10]! VMULL.U16 Q9, D8, D10 VLD2.16 {D2, D3}, [R3]! VMLSL.U16 Q9, D12, D11 VLD2.16 {D6, D7}, [R7], R12 VMULL.U16 Q13, D0, D2 VREV64.16 D4, D6 VMLSL.U16 Q13, D4, D3 VREV64.16 D5, D7 VSHR.S32 Q9, Q9, #16 VST1.32 {D24[0]}, [R2], R11 VMLAL.S16 Q9, D9, D10 VST1.32 {D24[1]}, [R2], R11 VSHR.S32 Q13, Q13, #16 VST1.32 {D25[0]}, [R2], R11 VMLAL.S16 Q13, D1, D2 VST1.32 {D25[1]}, [R2], R11 VMLSL.S16 Q9, D13, D11 VMLSL.S16 Q13, D5, D3 VLD2.16 {D8, D9}, [R10]! VLD2.16 {D10, D11}, [R3]! VLD2.16 {D14, D15}, [R7], R12 VQADD.S32 Q8, Q9, Q10 VREV64.16 Q6, Q7 VQADD.S32 Q12, Q13, Q10 VQSHL.S32 Q8, Q8, Q11 VST1.32 D16[0], [R2], R11 VQSHL.S32 Q12, Q12, Q11 SUBS R8, R8, #8 VST1.32 D16[1], [R2], R11 VST1.32 D17[0], [R2], R11 VST1.32 D17[1], [R2], R11 BGT LOOP_1 VST1.32 D24[0], [R2], R11 VMULL.U16 Q9, D8, D10 VMLSL.U16 Q9, D12, D11 VST1.32 D24[1], [R2], R11 VST1.32 D25[0], [R2], R11 VSHR.S32 Q9, Q9, #16 VST1.32 D25[1], [R2], R11 VMLAL.S16 Q9, D9, D10 VMLSL.S16 Q9, D13, D11 MOV R12, #12 SMULBB R7, R5, R6 MOV R10, R5, LSL #1 VQADD.S32 Q8, Q9, Q10 VQSHL.S32 Q8, Q8, Q11 VST1.32 D16[0], [R2], R11 MOV R7, R7, LSL #2 VST1.32 D16[1], [R2], R11 ADD R7, R7, R9 VST1.32 D17[0], [R2], R11 VST1.32 D17[1], [R2], R11 SUB R11, R10, #1 MOV R10, R11, LSL #2 ADD R10, R0, R10 MOV R11, R11, LSL #1 SUB R10, R10, R12 MOV R8, R6, LSL #2 MOV R12, #-16 ADD R11, R11, R4 VLD1.32 {D6, D7}, [R10], R12 SUB R11, R11, #14 VREV64.32 D0, D6 VREV64.32 D1, D7 VQNEG.S32 D0, D0 VQNEG.S32 D1, D1 VUZP.16 D1, D0 VLD2.16 {D2, D3}, [R11], R12 VREV64.16 D2, D2 VREV64.16 D3, D3 VLD2.16 {D4, D5}, [R1]! VMULL.U16 Q13, D1, D3 VMLSL.U16 Q13, D4, D2 VSHR.S32 Q13, Q13, #16 VMLAL.S16 Q13, D0, D3 VMLSL.S16 Q13, D5, D2 @VQSHL.S32 Q12,Q13,Q11 @VQADD.S32 Q12,Q12,Q10 @VSHR.S32 Q12,Q12,#16 VQADD.S32 Q12, Q13, Q10 VQSHL.S32 Q12, Q12, Q11 VUZP.16 D24, D25 VLD1.32 {D14, D15}, [R10], R12 VMULL.U16 Q13, D1, D3 VMLSL.U16 Q13, D4, D2 VREV64.32 Q4, Q7 VQNEG.S32 Q4, Q4 VLD2.16 {D10, D11}, [R11], R12 VSHR.S32 Q13, Q13, #16 VLD2.16 {D12, D13}, [R1]! VMLAL.S16 Q13, D0, D3 VMLSL.S16 Q13, D5, D2 VUZP.16 D9, D8 VREV64.16 Q5, Q5 VQADD.S32 Q12, Q13, Q10 SUB R5, R5, #8 VQSHL.S32 Q12, Q12, Q11 LOOP_2: VLD1.32 {D6, D7}, [R10], R12 VMULL.U16 Q9, D9, D11 VREV64.32 Q0, Q3 VQNEG.S32 Q0, Q0 VUZP.16 D1, D0 VLD2.16 {D2, D3}, [R11], R12 VREV64.16 Q1, Q1 VLD2.16 {D4, D5}, [R1]! VMLSL.U16 Q9, D12, D10 VST1.32 D24[0], [R7], R8 VMULL.U16 Q13, D1, D3 VST1.32 D24[1], [R7], R8 VSHR.S32 Q9, Q9, #16 VST1.32 D25[0], [R7], R8 VMLSL.U16 Q13, D4, D2 VST1.32 D25[1], [R7], R8 VMLAL.S16 Q9, D8, D11 VLD1.32 {D14, D15}, [R10], R12 VSHR.S32 Q13, Q13, #16 VMLSL.S16 Q9, D13, D10 VLD2.16 {D10, D11}, [R11], R12 VMLAL.S16 Q13, D0, D3 VMLSL.S16 Q13, D5, D2 VREV64.32 Q4, Q7 VLD2.16 {D12, D13}, [R1]! VQNEG.S32 Q4, Q4 VREV64.16 Q5, Q5 VQADD.S32 Q8, Q9, Q10 VUZP.16 D9, D8 VQADD.S32 Q12, Q13, Q10 VQSHL.S32 Q8, Q8, Q11 SUBS R5, R5, #8 VST1.32 D16[0], [R7], R8 VQSHL.S32 Q12, Q12, Q11 VST1.32 D16[1], [R7], R8 VST1.32 D17[0], [R7], R8 VST1.32 D17[1], [R7], R8 BGT LOOP_2 VST1.32 D24[0], [R7], R8 VMULL.U16 Q9, D9, D11 VMLSL.U16 Q9, D12, D10 VST1.32 D24[1], [R7], R8 VST1.32 D25[0], [R7], R8 VSHR.S32 Q9, Q9, #16 VST1.32 D25[1], [R7], R8 VMLAL.S16 Q9, D8, D11 VMLSL.S16 Q9, D13, D10 VQADD.S32 Q8, Q9, Q10 VQSHL.S32 Q8, Q8, Q11 VST1.32 D16[0], [R7], R8 VST1.32 D16[1], [R7], R8 VST1.32 D17[0], [R7], R8 VST1.32 D17[1], [R7], R8 VPOP {d8 - d15} LDMFD sp!, {R4-R12, R15}