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.
1278 lines
27 KiB
1278 lines
27 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_post_twid_overlap_add_armv7
|
|
|
|
ixheaacd_post_twid_overlap_add_armv7:
|
|
|
|
STMFD sp!, {R4-R12}
|
|
VPUSH {d8 - d15}
|
|
|
|
LDR R4, [sp, #100]
|
|
LDR R5, [sp, #104]
|
|
LDR R6, [sp, #108]
|
|
|
|
LSL R9, R3, #2
|
|
ASR R9, R9, #1
|
|
ADD R6, R6, R9
|
|
SUB R6, R6, #4
|
|
|
|
MOVW R8, #7500
|
|
ADD R2, R2, R8
|
|
|
|
|
|
|
|
VMOV.S16 D18, #50
|
|
RSB R9, R5, #15
|
|
VMOV.S32 Q10, #0x00008000
|
|
VDUP.32 Q8, R5
|
|
SUB R5, R5, #16
|
|
STR R5, [sp, #116]
|
|
MOV R8, #1
|
|
LSL R8, R8, R9
|
|
STR R8, [sp, #120]
|
|
|
|
|
|
ARM_PROLOGUE:
|
|
|
|
|
|
LDR R8, [R1], #4
|
|
LDR R9, [R1], #4
|
|
|
|
LDR R10, [R2], #4
|
|
|
|
SMULWT R11, R8, R10
|
|
SMULWB R12, R9, R10
|
|
SMULWB R5, R8, R10
|
|
SMLAWT R7, R9, R10, R5
|
|
SUB R8, R12, R11
|
|
MVN R5, R7
|
|
ADD R5, R5, #1
|
|
|
|
MOV R9, #50
|
|
MOV R12, #-50
|
|
SMULWB R10, R5, R9
|
|
SMULWB R11, R8, R12
|
|
|
|
ADD R8, R8, R10
|
|
ADD R5, R5, R11
|
|
|
|
LDR R11, [sp, #104]
|
|
LDR R10, [R6], #-32
|
|
|
|
|
|
SMULWB R7, R8, R10
|
|
MVN R8, R8
|
|
ADD R8, R8, #1
|
|
SMULWT R12, R8, R10
|
|
|
|
CMP R11, #0
|
|
BLT NEXT
|
|
|
|
RSBS R9, R11, #16
|
|
|
|
|
|
|
|
|
|
LDR R8, [sp, #120]
|
|
QADD R5, R5, R8
|
|
ASR R5, R5, R9
|
|
|
|
RSBS R9, R11, #31
|
|
MOVS R8, R7, ASR R9
|
|
CMNLT R8, #1
|
|
MOVLT R7, #0x80000000
|
|
MVNGT R7, #0x80000000
|
|
MOVEQ R7, R7, LSL R11
|
|
|
|
RSBS R9, R11, #31
|
|
MOVS R8, R12, ASR R9
|
|
CMNLT R8, #1
|
|
MOVLT R12, #0x80000000
|
|
MVNGT R12, #0x80000000
|
|
MOVEQ R12, R12, LSL R11
|
|
|
|
B NEXT1
|
|
NEXT:
|
|
MVN R11, R11
|
|
ADD R11, R11, #1
|
|
ASR R5, R5, R11
|
|
MOV R8, #0x8000
|
|
QADD R5, R5, R8
|
|
ASR R5, R5, #16
|
|
ASR R7, R7, R11
|
|
ASR R12, R12, R11
|
|
|
|
NEXT1:
|
|
LDR R9, [R4]
|
|
MOV R8, #0x8000
|
|
|
|
STR R5, [R4], #4
|
|
|
|
|
|
UXTH R5, R10, ROR #16
|
|
UXTH R10, R10
|
|
|
|
|
|
VDUP.32 D0, R9
|
|
VDUP.32 D2, R10
|
|
VDUP.32 D3, R5
|
|
VZIP.32 D2, D3
|
|
VMULL.S32 Q0, D2, D0
|
|
VQMOVN.S64 D8, Q0
|
|
|
|
|
|
VDUP.32 D0, R12
|
|
VDUP.32 D1, R7
|
|
|
|
VZIP.32 D0, D1
|
|
VQSUB.S32 D8, D0, D8
|
|
|
|
|
|
VQSHL.S32 D8, D8, #2
|
|
VDUP.32 D0, R8
|
|
VQADD.S32 D8, D8, D0
|
|
VSHR.S32 D8, D8, #16
|
|
|
|
|
|
|
|
LDR R7, [sp, #112]
|
|
LSL R10, R7, #1
|
|
|
|
ASR R5, R3, #1
|
|
SMULBB R5, R10, R5
|
|
ADD R5, R5, R0
|
|
SUB R0, R5, R10
|
|
MVN R9, R10
|
|
ADD R9, R9, #1
|
|
|
|
VST1.16 D8[2], [R0], R9
|
|
VST1.16 D8[0], [R5], R10
|
|
|
|
|
|
MOV R8, R1
|
|
LSL R12, R3, #2
|
|
|
|
ADD R1, R1, R12
|
|
|
|
SUB R1, R1, #40
|
|
|
|
MOV R12, #-32
|
|
|
|
|
|
|
|
PROLOGUE_NEON:
|
|
|
|
ASR R3, R3, #2
|
|
SUB R3, R3, #4
|
|
ASR R3, R3, #2
|
|
SUB R3, R3, #2
|
|
|
|
VLD2.32 {Q0, Q1}, [R1], R12
|
|
VUZP.16 D0, D1
|
|
VUZP.16 D2, D3
|
|
|
|
VREV64.16 Q0, Q0
|
|
VREV64.16 Q1, Q1
|
|
VLD2.16 {D8, D9}, [R2]!
|
|
|
|
VLD2.32 {Q2, Q3}, [R8]!
|
|
VMULL.U16 Q15, D0, D9
|
|
|
|
VUZP.16 D4, D5
|
|
VMULL.U16 Q14, D2, D8
|
|
|
|
VUZP.16 D6, D7
|
|
VMULL.U16 Q13, D0, D8
|
|
|
|
|
|
VMULL.U16 Q12, D2, D9
|
|
|
|
VLD2.32 {Q5, Q6}, [R6], R12
|
|
VSHR.U32 Q15, Q15, #16
|
|
|
|
VUZP.16 D10, D11
|
|
VSHR.U32 Q14, Q14, #16
|
|
|
|
VUZP.16 D12, D13
|
|
VMLAL.S16 Q15, D1, D9
|
|
|
|
VREV64.16 Q5, Q5
|
|
VMLAL.S16 Q14, D3, D8
|
|
|
|
VREV64.16 Q6, Q6
|
|
VSHR.U32 Q13, Q13, #16
|
|
|
|
|
|
VSHR.U32 Q12, Q12, #16
|
|
|
|
VMLAL.S16 Q13, D1, D8
|
|
VMLAL.S16 Q12, D3, D9
|
|
|
|
|
|
|
|
VADD.I32 Q15, Q15, Q14
|
|
VNEG.S32 Q15, Q15
|
|
|
|
VMULL.U16 Q11, D4, D8
|
|
|
|
VSUB.I32 Q14, Q12, Q13
|
|
|
|
|
|
VMOV Q13, Q15
|
|
VMOV Q12, Q14
|
|
|
|
VUZP.16 D24, D25
|
|
|
|
|
|
VUZP.16 D26, D27
|
|
VMULL.U16 Q1, D24, D18
|
|
|
|
VMULL.U16 Q0, D26, D18
|
|
|
|
VSHR.U32 Q11, Q11, #16
|
|
VMLAL.S16 Q11, D5, D8
|
|
|
|
VSHR.U32 Q1, Q1, #16
|
|
VSHR.U32 Q0, Q0, #16
|
|
VMLAL.S16 Q1, D25, D18
|
|
VMLAL.S16 Q0, D27, D18
|
|
|
|
VMULL.U16 Q12, D4, D9
|
|
VMULL.U16 Q13, D6, D8
|
|
|
|
VNEG.S32 Q1, Q1
|
|
VADD.I32 Q14, Q14, Q0
|
|
VADD.I32 Q15, Q15, Q1
|
|
|
|
VMULL.U16 Q0, D6, D9
|
|
VSHR.S32 Q12, Q12, #16
|
|
VMLAL.S16 Q12, D5, D9
|
|
VSHR.S32 Q13, Q13, #16
|
|
VSHR.S32 Q0, Q0, #16
|
|
VMLAL.S16 Q13, D7, D8
|
|
VMLAL.S16 Q0, D7, D9
|
|
|
|
|
|
|
|
|
|
VADD.I32 Q11, Q11, Q0
|
|
VNEG.S32 Q11, Q11
|
|
VSUB.I32 Q12, Q13, Q12
|
|
|
|
|
|
|
|
LDR R11, [sp, #120]
|
|
VDUP.S32 Q7, R11
|
|
VQADD.S32 Q14, Q14, Q7
|
|
LDR R11, [sp, #116]
|
|
VDUP.S32 Q0, R11
|
|
VQSHL.S32 Q14, Q14, Q0
|
|
|
|
VMOV Q0, Q11
|
|
VMOV Q7, Q12
|
|
|
|
|
|
VUZP.16 D24, D25
|
|
|
|
VUZP.16 D22, D23
|
|
VMULL.U16 Q4, D24, D18
|
|
VMULL.U16 Q13, D22, D18
|
|
|
|
VNEG.S32 Q1, Q15
|
|
VUZP.16 D30, D31
|
|
|
|
VUZP.16 D2, D3
|
|
VMULL.U16 Q2, D30, D12
|
|
|
|
VMULL.U16 Q3, D2, D13
|
|
|
|
VSHR.U32 Q4, Q4, #16
|
|
VSHR.U32 Q13, Q13, #16
|
|
|
|
VMLAL.S16 Q4, D25, D18
|
|
VMLAL.S16 Q13, D23, D18
|
|
|
|
VSHR.U32 Q2, Q2, #16
|
|
VSHR.U32 Q3, Q3, #16
|
|
|
|
VMLAL.S16 Q2, D31, D12
|
|
VMLAL.S16 Q3, D3, D13
|
|
|
|
VNEG.S32 Q4, Q4
|
|
VADD.I32 Q7, Q7, Q13
|
|
VADD.I32 Q0, Q0, Q4
|
|
|
|
LDR R11, [sp, #120]
|
|
VDUP.S32 Q4, R11
|
|
VQADD.S32 Q0, Q0, Q4
|
|
LDR R11, [sp, #116]
|
|
VDUP.S32 Q13, R11
|
|
VQSHL.S32 Q0, Q0, Q13
|
|
|
|
VMOV Q13, Q14
|
|
|
|
VLD2.32 {Q14, Q15}, [R4]
|
|
|
|
VZIP.32 Q13, Q0
|
|
VST1.32 {Q13}, [R4]!
|
|
VST1.32 {Q0}, [R4]!
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D13, D1
|
|
|
|
|
|
VMULL.S32 Q13, D28, D0
|
|
VQMOVN.S64 D8, Q13
|
|
VMULL.S32 Q13, D29, D1
|
|
VQMOVN.S64 D9, Q13
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D12, D1
|
|
|
|
|
|
VMULL.S32 Q12, D28, D0
|
|
VQMOVN.S64 D26, Q12
|
|
VMULL.S32 Q12, D29, D1
|
|
VQMOVN.S64 D27, Q12
|
|
|
|
VQSHL.S32 Q2, Q2, Q8
|
|
VQSHL.S32 Q3, Q3, Q8
|
|
|
|
VQSUB.S32 Q2, Q2, Q4
|
|
VQSUB.S32 Q3, Q3, Q13
|
|
|
|
VNEG.S32 Q13, Q7
|
|
VUZP.16 D14, D15
|
|
VUZP.16 D26, D27
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D10, D1
|
|
VMULL.S32 Q11, D30, D0
|
|
VQMOVN.S64 D24, Q11
|
|
VMULL.S32 Q11, D31, D1
|
|
VQMOVN.S64 D25, Q11
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D11, D1
|
|
VMULL.S32 Q4, D30, D0
|
|
VQMOVN.S64 D22, Q4
|
|
VMULL.S32 Q4, D31, D1
|
|
VQMOVN.S64 D23, Q4
|
|
VMULL.U16 Q4, D26, D11
|
|
VMULL.U16 Q15, D14, D10
|
|
|
|
VLD2.32 {Q0, Q1}, [R1], R12
|
|
|
|
VUZP.16 D0, D1
|
|
|
|
VUZP.16 D2, D3
|
|
VSHR.U32 Q4, Q4, #16
|
|
|
|
VREV64.16 Q0, Q0
|
|
VSHR.U32 Q15, Q15, #16
|
|
|
|
VREV64.16 Q1, Q1
|
|
VMLAL.S16 Q4, D27, D11
|
|
|
|
VMLAL.S16 Q15, D15, D10
|
|
|
|
VLD2.32 {Q5, Q6}, [R6], R12
|
|
VQSHL.S32 Q2, Q2, #2
|
|
|
|
VUZP.16 D10, D11
|
|
VQSHL.S32 Q3, Q3, #2
|
|
|
|
VUZP.16 D12, D13
|
|
VQADD.S32 Q7, Q2, Q10
|
|
|
|
VREV64.16 Q5, Q5
|
|
VQADD.S32 Q3, Q3, Q10
|
|
|
|
VREV64.16 Q6, Q6
|
|
VSHR.S32 Q7, Q7, #16
|
|
|
|
VUZP.16 D14, D15
|
|
VSHR.S32 Q3, Q3, #16
|
|
|
|
VUZP.16 D6, D7
|
|
|
|
VMOV D15, D6
|
|
VQSHL.S32 Q4, Q4, Q8
|
|
|
|
VLD2.32 {Q2, Q3}, [R8]!
|
|
VQSHL.S32 Q15, Q15, Q8
|
|
|
|
VUZP.16 D4, D5
|
|
VQSUB.S32 Q4, Q4, Q12
|
|
|
|
VUZP.16 D6, D7
|
|
VQSUB.S32 Q11, Q15, Q11
|
|
|
|
VQSHL.S32 Q15, Q4, #2
|
|
|
|
VLD2.16 {D8, D9}, [R2]!
|
|
VQSHL.S32 Q11, Q11, #2
|
|
|
|
VQADD.S32 Q15, Q15, Q10
|
|
VQADD.S32 Q11, Q11, Q10
|
|
|
|
VSHR.S32 Q15, Q15, #16
|
|
|
|
VUZP.16 D30, D31
|
|
VSHR.S32 Q11, Q11, #16
|
|
|
|
|
|
VUZP.16 D22, D23
|
|
VMOV D23, D30
|
|
|
|
CORE_LOOP_PTO:
|
|
VST1.16 D14[0], [R0, : 16], R9
|
|
VMULL.U16 Q15, D0, D9
|
|
|
|
VST1.16 D22[0], [R0, : 16], R9
|
|
VMULL.U16 Q14, D2, D8
|
|
|
|
VST1.16 D14[1], [R0, : 16], R9
|
|
VMULL.U16 Q13, D0, D8
|
|
|
|
VST1.16 D22[1], [R0, : 16], R9
|
|
VMULL.U16 Q12, D2, D9
|
|
|
|
VST1.16 D14[2], [R0, : 16], R9
|
|
VSHR.U32 Q15, Q15, #16
|
|
|
|
VST1.16 D22[2], [R0, : 16], R9
|
|
VSHR.U32 Q14, Q14, #16
|
|
|
|
VST1.16 D14[3], [R0, : 16], R9
|
|
VMLAL.S16 Q15, D1, D9
|
|
|
|
VST1.16 D22[3], [R0, : 16], R9
|
|
VMLAL.S16 Q14, D3, D8
|
|
|
|
VST1.16 D15[0], [R5, : 16], R10
|
|
VSHR.U32 Q13, Q13, #16
|
|
|
|
VST1.16 D23[0], [R5, : 16], R10
|
|
VSHR.U32 Q12, Q12, #16
|
|
|
|
VST1.16 D15[1], [R5, : 16], R10
|
|
VMLAL.S16 Q13, D1, D8
|
|
|
|
VST1.16 D23[1], [R5, : 16], R10
|
|
VMLAL.S16 Q12, D3, D9
|
|
|
|
VST1.16 D15[2], [R5, : 16], R10
|
|
VADD.I32 Q15, Q15, Q14
|
|
|
|
VST1.16 D23[2], [R5, : 16], R10
|
|
VNEG.S32 Q15, Q15
|
|
|
|
VST1.16 D15[3], [R5, : 16], R10
|
|
|
|
VST1.16 D23[3], [R5, : 16], R10
|
|
VSUB.I32 Q14, Q12, Q13
|
|
|
|
|
|
VMOV Q13, Q15
|
|
VMULL.U16 Q11, D4, D8
|
|
|
|
VMOV Q12, Q14
|
|
|
|
VUZP.16 D24, D25
|
|
|
|
|
|
VUZP.16 D26, D27
|
|
VMULL.U16 Q1, D24, D18
|
|
VMULL.U16 Q0, D26, D18
|
|
|
|
VSHR.U32 Q11, Q11, #16
|
|
VMLAL.S16 Q11, D5, D8
|
|
|
|
VSHR.U32 Q1, Q1, #16
|
|
VSHR.U32 Q0, Q0, #16
|
|
VMLAL.S16 Q1, D25, D18
|
|
VMLAL.S16 Q0, D27, D18
|
|
|
|
VMULL.U16 Q12, D4, D9
|
|
VMULL.U16 Q13, D6, D8
|
|
|
|
VNEG.S32 Q1, Q1
|
|
VADD.I32 Q14, Q14, Q0
|
|
VADD.I32 Q15, Q15, Q1
|
|
|
|
VMULL.U16 Q0, D6, D9
|
|
VSHR.S32 Q12, Q12, #16
|
|
VMLAL.S16 Q12, D5, D9
|
|
VSHR.S32 Q13, Q13, #16
|
|
VSHR.S32 Q0, Q0, #16
|
|
VMLAL.S16 Q13, D7, D8
|
|
VMLAL.S16 Q0, D7, D9
|
|
|
|
|
|
|
|
VADD.I32 Q11, Q11, Q0
|
|
|
|
VNEG.S32 Q11, Q11
|
|
VSUB.I32 Q12, Q13, Q12
|
|
|
|
|
|
LDR R11, [sp, #120]
|
|
VDUP.S32 Q7, R11
|
|
VQADD.S32 Q14, Q14, Q7
|
|
LDR R11, [sp, #116]
|
|
VDUP.S32 Q0, R11
|
|
VQSHL.S32 Q14, Q14, Q0
|
|
|
|
|
|
VMOV Q0, Q11
|
|
VMOV Q7, Q12
|
|
|
|
VUZP.16 D24, D25
|
|
|
|
VUZP.16 D22, D23
|
|
VMULL.U16 Q4, D24, D18
|
|
VMULL.U16 Q13, D22, D18
|
|
|
|
VNEG.S32 Q1, Q15
|
|
|
|
VUZP.16 D30, D31
|
|
|
|
VUZP.16 D2, D3
|
|
VMULL.U16 Q2, D30, D12
|
|
VMULL.U16 Q3, D2, D13
|
|
|
|
VSHR.U32 Q4, Q4, #16
|
|
VSHR.U32 Q13, Q13, #16
|
|
|
|
VMLAL.S16 Q4, D25, D18
|
|
VMLAL.S16 Q13, D23, D18
|
|
|
|
VSHR.U32 Q2, Q2, #16
|
|
VSHR.U32 Q3, Q3, #16
|
|
|
|
VMLAL.S16 Q2, D31, D12
|
|
VMLAL.S16 Q3, D3, D13
|
|
|
|
VNEG.S32 Q4, Q4
|
|
VADD.I32 Q7, Q7, Q13
|
|
VADD.I32 Q0, Q0, Q4
|
|
|
|
|
|
|
|
LDR R11, [sp, #120]
|
|
VDUP.S32 Q4, R11
|
|
VQADD.S32 Q0, Q0, Q4
|
|
LDR R11, [sp, #116]
|
|
VDUP.S32 Q13, R11
|
|
VQSHL.S32 Q0, Q0, Q13
|
|
VMOV Q13, Q14
|
|
|
|
VLD2.32 {Q14, Q15}, [R4]
|
|
|
|
VZIP.32 Q13, Q0
|
|
VST1.32 {Q13}, [R4]!
|
|
VST1.32 {Q0}, [R4]!
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D13, D1
|
|
|
|
|
|
VMULL.S32 Q13, D28, D0
|
|
VQMOVN.S64 D8, Q13
|
|
VMULL.S32 Q13, D29, D1
|
|
VQMOVN.S64 D9, Q13
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D12, D1
|
|
|
|
|
|
VMULL.S32 Q12, D28, D0
|
|
VQMOVN.S64 D26, Q12
|
|
VMULL.S32 Q12, D29, D1
|
|
VQMOVN.S64 D27, Q12
|
|
|
|
VQSHL.S32 Q2, Q2, Q8
|
|
VQSHL.S32 Q3, Q3, Q8
|
|
|
|
|
|
|
|
VQSUB.S32 Q2, Q2, Q4
|
|
VQSUB.S32 Q3, Q3, Q13
|
|
|
|
VNEG.S32 Q13, Q7
|
|
VUZP.16 D26, D27
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D10, D1
|
|
VMULL.S32 Q11, D30, D0
|
|
VQMOVN.S64 D24, Q11
|
|
VMULL.S32 Q11, D31, D1
|
|
VQMOVN.S64 D25, Q11
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D11, D1
|
|
|
|
VMULL.S32 Q4, D30, D0
|
|
VQMOVN.S64 D22, Q4
|
|
VMULL.S32 Q4, D31, D1
|
|
VQMOVN.S64 D23, Q4
|
|
|
|
|
|
VUZP.16 D14, D15
|
|
VMULL.U16 Q4, D26, D11
|
|
VMULL.U16 Q15, D14, D10
|
|
|
|
|
|
VLD2.32 {Q0, Q1}, [R1], R12
|
|
|
|
VUZP.16 D0, D1
|
|
|
|
VUZP.16 D2, D3
|
|
VSHR.U32 Q4, Q4, #16
|
|
|
|
VREV64.16 Q0, Q0
|
|
VSHR.U32 Q15, Q15, #16
|
|
|
|
VREV64.16 Q1, Q1
|
|
VMLAL.S16 Q4, D27, D11
|
|
|
|
VMLAL.S16 Q15, D15, D10
|
|
|
|
VLD2.32 {Q5, Q6}, [R6], R12
|
|
VQSHL.S32 Q2, Q2, #2
|
|
|
|
VUZP.16 D10, D11
|
|
VQSHL.S32 Q3, Q3, #2
|
|
|
|
VUZP.16 D12, D13
|
|
VQADD.S32 Q7, Q2, Q10
|
|
|
|
VREV64.16 Q5, Q5
|
|
VQADD.S32 Q3, Q3, Q10
|
|
|
|
VREV64.16 Q6, Q6
|
|
VSHR.S32 Q7, Q7, #16
|
|
|
|
VUZP.16 D14, D15
|
|
VSHR.S32 Q3, Q3, #16
|
|
|
|
VUZP.16 D6, D7
|
|
|
|
VMOV D15, D6
|
|
VQSHL.S32 Q4, Q4, Q8
|
|
|
|
VLD2.32 {Q2, Q3}, [R8]!
|
|
VQSHL.S32 Q15, Q15, Q8
|
|
|
|
VUZP.16 D4, D5
|
|
VQSUB.S32 Q4, Q4, Q12
|
|
|
|
VUZP.16 D6, D7
|
|
VQSUB.S32 Q11, Q15, Q11
|
|
|
|
VQSHL.S32 Q15, Q4, #2
|
|
|
|
VLD2.16 {D8, D9}, [R2]!
|
|
VQSHL.S32 Q11, Q11, #2
|
|
|
|
VQADD.S32 Q15, Q15, Q10
|
|
VQADD.S32 Q11, Q11, Q10
|
|
|
|
VSHR.S32 Q15, Q15, #16
|
|
|
|
VUZP.16 D30, D31
|
|
VSHR.S32 Q11, Q11, #16
|
|
|
|
|
|
VUZP.16 D22, D23
|
|
VMOV D23, D30
|
|
|
|
SUBS R3, R3, #1
|
|
BNE CORE_LOOP_PTO
|
|
|
|
|
|
|
|
|
|
|
|
EPILOGUE:
|
|
|
|
VST1.16 D14[0], [R0], R9
|
|
VMULL.U16 Q15, D0, D9
|
|
|
|
VST1.16 D22[0], [R0], R9
|
|
VMULL.U16 Q14, D2, D8
|
|
|
|
VST1.16 D14[1], [R0], R9
|
|
VMULL.U16 Q13, D0, D8
|
|
|
|
VST1.16 D22[1], [R0], R9
|
|
VMULL.U16 Q12, D2, D9
|
|
|
|
VST1.16 D14[2], [R0], R9
|
|
VSHR.U32 Q15, Q15, #16
|
|
|
|
VST1.16 D22[2], [R0], R9
|
|
VSHR.U32 Q14, Q14, #16
|
|
|
|
VST1.16 D14[3], [R0], R9
|
|
VMLAL.S16 Q15, D1, D9
|
|
|
|
VST1.16 D22[3], [R0], R9
|
|
VMLAL.S16 Q14, D3, D8
|
|
|
|
VST1.16 D15[0], [R5], R10
|
|
VSHR.U32 Q13, Q13, #16
|
|
|
|
VST1.16 D23[0], [R5], R10
|
|
VSHR.U32 Q12, Q12, #16
|
|
|
|
VST1.16 D15[1], [R5], R10
|
|
VMLAL.S16 Q13, D1, D8
|
|
|
|
VST1.16 D23[1], [R5], R10
|
|
VMLAL.S16 Q12, D3, D9
|
|
|
|
VST1.16 D15[2], [R5], R10
|
|
VADD.I32 Q15, Q15, Q14
|
|
|
|
VST1.16 D23[2], [R5], R10
|
|
VNEG.S32 Q15, Q15
|
|
|
|
VST1.16 D15[3], [R5], R10
|
|
|
|
|
|
VST1.16 D23[3], [R5], R10
|
|
VSUB.I32 Q14, Q12, Q13
|
|
|
|
|
|
VMULL.U16 Q11, D4, D8
|
|
VMOV Q13, Q15
|
|
VMOV Q12, Q14
|
|
|
|
VMOV Q13, Q15
|
|
VMOV Q12, Q14
|
|
|
|
VUZP.16 D26, D27
|
|
VUZP.16 D24, D25
|
|
|
|
|
|
VMULL.U16 Q1, D24, D18
|
|
VMULL.U16 Q0, D26, D18
|
|
|
|
VSHR.U32 Q11, Q11, #16
|
|
VMLAL.S16 Q11, D5, D8
|
|
|
|
VSHR.U32 Q1, Q1, #16
|
|
VSHR.U32 Q0, Q0, #16
|
|
VMLAL.S16 Q1, D25, D18
|
|
VMLAL.S16 Q0, D27, D18
|
|
|
|
VMULL.U16 Q12, D4, D9
|
|
VMULL.U16 Q13, D6, D8
|
|
|
|
VNEG.S32 Q1, Q1
|
|
VADD.I32 Q14, Q14, Q0
|
|
VADD.I32 Q15, Q15, Q1
|
|
|
|
VMULL.U16 Q0, D6, D9
|
|
VSHR.S32 Q12, Q12, #16
|
|
VMLAL.S16 Q12, D5, D9
|
|
VSHR.S32 Q13, Q13, #16
|
|
VSHR.S32 Q0, Q0, #16
|
|
VMLAL.S16 Q13, D7, D8
|
|
VMLAL.S16 Q0, D7, D9
|
|
|
|
|
|
|
|
|
|
|
|
VADD.I32 Q11, Q11, Q0
|
|
VNEG.S32 Q11, Q11
|
|
VSUB.I32 Q12, Q13, Q12
|
|
|
|
|
|
|
|
|
|
LDR R11, [sp, #120]
|
|
VDUP.S32 Q7, R11
|
|
VQADD.S32 Q14, Q14, Q7
|
|
LDR R11, [sp, #116]
|
|
VDUP.S32 Q0, R11
|
|
VQSHL.S32 Q14, Q14, Q0
|
|
|
|
|
|
VMOV Q0, Q11
|
|
VMOV Q7, Q12
|
|
|
|
|
|
VUZP.16 D22, D23
|
|
VUZP.16 D24, D25
|
|
|
|
VMULL.U16 Q4, D24, D18
|
|
VMULL.U16 Q13, D22, D18
|
|
|
|
VNEG.S32 Q1, Q15
|
|
VUZP.16 D30, D31
|
|
VUZP.16 D2, D3
|
|
|
|
VMULL.U16 Q2, D30, D12
|
|
VMULL.U16 Q3, D2, D13
|
|
|
|
VSHR.U32 Q4, Q4, #16
|
|
VSHR.U32 Q13, Q13, #16
|
|
|
|
VMLAL.S16 Q4, D25, D18
|
|
VMLAL.S16 Q13, D23, D18
|
|
|
|
VSHR.U32 Q2, Q2, #16
|
|
VSHR.U32 Q3, Q3, #16
|
|
|
|
VMLAL.S16 Q2, D31, D12
|
|
VMLAL.S16 Q3, D3, D13
|
|
|
|
VNEG.S32 Q4, Q4
|
|
VADD.I32 Q7, Q7, Q13
|
|
VADD.I32 Q0, Q0, Q4
|
|
|
|
LDR R11, [sp, #120]
|
|
VDUP.S32 Q4, R11
|
|
VQADD.S32 Q0, Q0, Q4
|
|
LDR R11, [sp, #116]
|
|
VDUP.S32 Q13, R11
|
|
VQSHL.S32 Q0, Q0, Q13
|
|
|
|
|
|
VMOV Q13, Q14
|
|
|
|
VLD2.32 {Q14, Q15}, [R4]
|
|
VZIP.32 Q13, Q0
|
|
VST1.32 {Q13}, [R4]!
|
|
VST1.32 {Q0}, [R4]!
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D13, D1
|
|
|
|
VMULL.S32 Q13, D28, D0
|
|
VQMOVN.S64 D8, Q13
|
|
VMULL.S32 Q13, D29, D1
|
|
VQMOVN.S64 D9, Q13
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D12, D1
|
|
|
|
VMULL.S32 Q12, D28, D0
|
|
VQMOVN.S64 D26, Q12
|
|
VMULL.S32 Q12, D29, D1
|
|
VQMOVN.S64 D27, Q12
|
|
|
|
VQSHL.S32 Q2, Q2, Q8
|
|
VQSHL.S32 Q3, Q3, Q8
|
|
|
|
VQSUB.S32 Q2, Q2, Q4
|
|
VQSUB.S32 Q3, Q3, Q13
|
|
|
|
VNEG.S32 Q13, Q7
|
|
VUZP.16 D14, D15
|
|
VUZP.16 D26, D27
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D10, D1
|
|
|
|
|
|
VMULL.S32 Q11, D30, D0
|
|
VQMOVN.S64 D24, Q11
|
|
VMULL.S32 Q11, D31, D1
|
|
VQMOVN.S64 D25, Q11
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D11, D1
|
|
|
|
VMULL.S32 Q4, D30, D0
|
|
VQMOVN.S64 D22, Q4
|
|
VMULL.S32 Q4, D31, D1
|
|
VQMOVN.S64 D23, Q4
|
|
|
|
|
|
VMULL.U16 Q4, D26, D11
|
|
VMULL.U16 Q15, D14, D10
|
|
|
|
VSHR.U32 Q4, Q4, #16
|
|
|
|
VSHR.U32 Q15, Q15, #16
|
|
|
|
VMLAL.S16 Q4, D27, D11
|
|
|
|
VMLAL.S16 Q15, D15, D10
|
|
|
|
VQSHL.S32 Q2, Q2, #2
|
|
|
|
VQSHL.S32 Q3, Q3, #2
|
|
|
|
VQADD.S32 Q7, Q2, Q10
|
|
|
|
VQADD.S32 Q3, Q3, Q10
|
|
|
|
VSHR.S32 Q7, Q7, #16
|
|
|
|
VUZP.16 D14, D15
|
|
VSHR.S32 Q3, Q3, #16
|
|
|
|
VUZP.16 D6, D7
|
|
|
|
VMOV D15, D6
|
|
VQSHL.S32 Q4, Q4, Q8
|
|
|
|
VQSHL.S32 Q15, Q15, Q8
|
|
|
|
VQSUB.S32 Q4, Q4, Q12
|
|
|
|
VQSUB.S32 Q11, Q15, Q11
|
|
|
|
VQSHL.S32 Q15, Q4, #2
|
|
|
|
VQSHL.S32 Q11, Q11, #2
|
|
|
|
VQADD.S32 Q15, Q15, Q10
|
|
VQADD.S32 Q11, Q11, Q10
|
|
|
|
VSHR.S32 Q15, Q15, #16
|
|
|
|
VUZP.16 D30, D31
|
|
VSHR.S32 Q11, Q11, #16
|
|
|
|
VUZP.16 D22, D23
|
|
VMOV D23, D30
|
|
|
|
|
|
|
|
|
|
VST1.16 D14[0], [R0], R9
|
|
VST1.16 D22[0], [R0], R9
|
|
VST1.16 D14[1], [R0], R9
|
|
VST1.16 D22[1], [R0], R9
|
|
VST1.16 D14[2], [R0], R9
|
|
VST1.16 D22[2], [R0], R9
|
|
VST1.16 D14[3], [R0], R9
|
|
VST1.16 D22[3], [R0], R9
|
|
VST1.16 D15[0], [R5], R10
|
|
VST1.16 D23[0], [R5], R10
|
|
VST1.16 D15[1], [R5], R10
|
|
VST1.16 D23[1], [R5], R10
|
|
VST1.16 D15[2], [R5], R10
|
|
VST1.16 D23[2], [R5], R10
|
|
VST1.16 D15[3], [R5], R10
|
|
VST1.16 D23[3], [R5], R10
|
|
|
|
ARM_EPILOGUE:
|
|
|
|
ARM_LOOP:
|
|
|
|
VLD2.32 {Q0, Q1}, [R1]
|
|
|
|
VUZP.16 D0, D1
|
|
VUZP.16 D2, D3
|
|
|
|
VREV64.16 Q0, Q0
|
|
VREV64.16 Q1, Q1
|
|
|
|
VLD2.16 {D8, D9}, [R2]!
|
|
|
|
VLD2.32 {D4, D6}, [R8]!
|
|
VMOV.S32 D5, #0x00000000
|
|
VMOV.S32 D7, #0x00000000
|
|
|
|
VLD1.32 D5[0], [R8]!
|
|
VLD1.32 D7[0], [R8]
|
|
|
|
MOV R12, #16
|
|
|
|
VUZP.16 D4, D5
|
|
VUZP.16 D6, D7
|
|
|
|
ADD R6, R6, #16
|
|
|
|
MOV R12, #-4
|
|
VLD2.32 {D11, D13}, [R6], R12
|
|
|
|
|
|
VMOV.S32 D10, #0x00000000
|
|
|
|
VLD1.32 D12[1], [R6], R12
|
|
VLD1.32 D10[1], [R6], R12
|
|
VLD1.32 D12[0], [R6], R12
|
|
|
|
VUZP.16 D10, D11
|
|
VUZP.16 D12, D13
|
|
|
|
VREV64.16 Q5, Q5
|
|
VREV64.16 Q6, Q6
|
|
|
|
VMULL.U16 Q15, D0, D9
|
|
VMULL.U16 Q14, D2, D8
|
|
VMULL.U16 Q13, D0, D8
|
|
VMULL.U16 Q12, D2, D9
|
|
|
|
VSHR.U32 Q15, Q15, #16
|
|
VSHR.U32 Q14, Q14, #16
|
|
|
|
VMLAL.S16 Q15, D1, D9
|
|
VMLAL.S16 Q14, D3, D8
|
|
|
|
VSHR.U32 Q13, Q13, #16
|
|
VSHR.U32 Q12, Q12, #16
|
|
|
|
VMLAL.S16 Q13, D1, D8
|
|
VMLAL.S16 Q12, D3, D9
|
|
|
|
VADD.I32 Q15, Q15, Q14
|
|
VNEG.S32 Q15, Q15
|
|
|
|
VMULL.U16 Q11, D4, D8
|
|
|
|
VSUB.I32 Q14, Q12, Q13
|
|
|
|
|
|
VMOV Q13, Q15
|
|
VMOV Q12, Q14
|
|
|
|
VUZP.16 D26, D27
|
|
VUZP.16 D24, D25
|
|
|
|
|
|
VMULL.U16 Q1, D24, D18
|
|
VMULL.U16 Q0, D26, D18
|
|
|
|
VSHR.U32 Q11, Q11, #16
|
|
VMLAL.S16 Q11, D5, D8
|
|
|
|
VSHR.U32 Q1, Q1, #16
|
|
VSHR.U32 Q0, Q0, #16
|
|
VMLAL.S16 Q1, D25, D18
|
|
VMLAL.S16 Q0, D27, D18
|
|
|
|
VMULL.U16 Q12, D4, D9
|
|
VMULL.U16 Q13, D6, D8
|
|
|
|
VNEG.S32 Q1, Q1
|
|
VADD.I32 Q14, Q14, Q0
|
|
VADD.I32 Q15, Q15, Q1
|
|
|
|
VMULL.U16 Q0, D6, D9
|
|
VSHR.S32 Q12, Q12, #16
|
|
VMLAL.S16 Q12, D5, D9
|
|
VSHR.S32 Q13, Q13, #16
|
|
VSHR.S32 Q0, Q0, #16
|
|
VMLAL.S16 Q13, D7, D8
|
|
VMLAL.S16 Q0, D7, D9
|
|
|
|
VADD.I32 Q11, Q11, Q0
|
|
VNEG.S32 Q11, Q11
|
|
VSUB.I32 Q12, Q13, Q12
|
|
|
|
LDR R11, [sp, #120]
|
|
VDUP.S32 Q7, R11
|
|
VQADD.S32 Q14, Q14, Q7
|
|
LDR R11, [sp, #116]
|
|
VDUP.S32 Q0, R11
|
|
VQSHL.S32 Q14, Q14, Q0
|
|
|
|
VMOV Q0, Q11
|
|
VMOV Q7, Q12
|
|
|
|
VUZP.16 D22, D23
|
|
VUZP.16 D24, D25
|
|
|
|
VMULL.U16 Q4, D24, D18
|
|
VMULL.U16 Q13, D22, D18
|
|
|
|
VNEG.S32 Q1, Q15
|
|
VUZP.16 D30, D31
|
|
VUZP.16 D2, D3
|
|
|
|
VMULL.U16 Q2, D30, D12
|
|
VMULL.U16 Q3, D2, D13
|
|
|
|
VSHR.U32 Q4, Q4, #16
|
|
VSHR.U32 Q13, Q13, #16
|
|
|
|
VMLAL.S16 Q4, D25, D18
|
|
VMLAL.S16 Q13, D23, D18
|
|
|
|
VSHR.U32 Q2, Q2, #16
|
|
VSHR.U32 Q3, Q3, #16
|
|
|
|
VMLAL.S16 Q2, D31, D12
|
|
VMLAL.S16 Q3, D3, D13
|
|
|
|
VNEG.S32 Q4, Q4
|
|
VADD.I32 Q7, Q7, Q13
|
|
VADD.I32 Q0, Q0, Q4
|
|
|
|
LDR R11, [sp, #120]
|
|
VDUP.S32 Q4, R11
|
|
VQADD.S32 Q0, Q0, Q4
|
|
LDR R11, [sp, #116]
|
|
VDUP.S32 Q13, R11
|
|
VQSHL.S32 Q0, Q0, Q13
|
|
|
|
VMOV Q13, Q14
|
|
|
|
MOV R6, R4
|
|
|
|
VLD1.32 {D28, D29}, [R4]!
|
|
VMOV.S32 D31, #0x00000000
|
|
VLD1.32 D30[0], [R4]!
|
|
VLD1.32 D30[1], [R4]!
|
|
VLD1.32 D31[0], [R4]!
|
|
VUZP.32 Q14, Q15
|
|
|
|
|
|
VST1.32 D26[0], [R6]!
|
|
VST1.32 D0[0], [R6]!
|
|
VST1.32 D26[1], [R6]!
|
|
VST1.32 D0[1], [R6]!
|
|
VST1.32 D27[0], [R6]!
|
|
VST1.32 D1[0], [R6]!
|
|
VST1.32 D27[1], [R6]!
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D13, D1
|
|
|
|
VMULL.S32 Q13, D28, D0
|
|
VQMOVN.S64 D8, Q13
|
|
VMULL.S32 Q13, D29, D1
|
|
VQMOVN.S64 D9, Q13
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D12, D1
|
|
|
|
VMULL.S32 Q12, D28, D0
|
|
VQMOVN.S64 D26, Q12
|
|
VMULL.S32 Q12, D29, D1
|
|
VQMOVN.S64 D27, Q12
|
|
|
|
VQSHL.S32 Q2, Q2, Q8
|
|
VQSHL.S32 Q3, Q3, Q8
|
|
|
|
VQSUB.S32 Q2, Q2, Q4
|
|
VQSUB.S32 Q3, Q3, Q13
|
|
|
|
VNEG.S32 Q13, Q7
|
|
VUZP.16 D14, D15
|
|
VUZP.16 D26, D27
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D10, D1
|
|
|
|
|
|
VMULL.S32 Q11, D30, D0
|
|
VQMOVN.S64 D24, Q11
|
|
VMULL.S32 Q11, D31, D1
|
|
VQMOVN.S64 D25, Q11
|
|
|
|
|
|
VMOV.S32 D1, #0
|
|
VADDL.S16 Q0, D11, D1
|
|
|
|
VMULL.S32 Q4, D30, D0
|
|
VQMOVN.S64 D22, Q4
|
|
VMULL.S32 Q4, D31, D1
|
|
VQMOVN.S64 D23, Q4
|
|
|
|
|
|
VMULL.U16 Q4, D26, D11
|
|
VMULL.U16 Q15, D14, D10
|
|
|
|
VSHR.U32 Q4, Q4, #16
|
|
|
|
VSHR.U32 Q15, Q15, #16
|
|
|
|
VMLAL.S16 Q4, D27, D11
|
|
|
|
VMLAL.S16 Q15, D15, D10
|
|
|
|
VQSHL.S32 Q2, Q2, #2
|
|
|
|
VQSHL.S32 Q3, Q3, #2
|
|
|
|
VQADD.S32 Q7, Q2, Q10
|
|
|
|
VQADD.S32 Q3, Q3, Q10
|
|
|
|
VSHR.S32 Q7, Q7, #16
|
|
|
|
VUZP.16 D14, D15
|
|
VSHR.S32 Q3, Q3, #16
|
|
|
|
VUZP.16 D6, D7
|
|
|
|
VMOV D15, D6
|
|
VQSHL.S32 Q4, Q4, Q8
|
|
|
|
VQSHL.S32 Q15, Q15, Q8
|
|
|
|
VQSUB.S32 Q4, Q4, Q12
|
|
|
|
VQSUB.S32 Q11, Q15, Q11
|
|
|
|
VQSHL.S32 Q15, Q4, #2
|
|
|
|
VQSHL.S32 Q11, Q11, #2
|
|
|
|
VQADD.S32 Q15, Q15, Q10
|
|
VQADD.S32 Q11, Q11, Q10
|
|
|
|
VSHR.S32 Q15, Q15, #16
|
|
|
|
VUZP.16 D30, D31
|
|
VSHR.S32 Q11, Q11, #16
|
|
|
|
VUZP.16 D22, D23
|
|
VMOV D23, D30
|
|
|
|
|
|
|
|
|
|
VST1.16 D14[0], [R0], R9
|
|
VST1.16 D22[0], [R0], R9
|
|
VST1.16 D14[1], [R0], R9
|
|
VST1.16 D22[1], [R0], R9
|
|
VST1.16 D14[2], [R0], R9
|
|
VST1.16 D22[2], [R0], R9
|
|
VST1.16 D14[3], [R0], R9
|
|
|
|
VST1.16 D15[0], [R5], R10
|
|
VST1.16 D23[0], [R5], R10
|
|
VST1.16 D15[1], [R5], R10
|
|
VST1.16 D23[1], [R5], R10
|
|
VST1.16 D15[2], [R5], R10
|
|
VST1.16 D23[2], [R5], R10
|
|
VST1.16 D15[3], [R5], R10
|
|
|
|
VPOP {d8 - d15}
|
|
LDMFD sp!, {R4-R12}
|
|
BX LR
|
|
|
|
|