You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
298 lines
7.8 KiB
298 lines
7.8 KiB
@/******************************************************************************
|
|
@ *
|
|
@ * 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}
|
|
|