473 lines
9.6 KiB
ArmAsm
473 lines
9.6 KiB
ArmAsm
@/******************************************************************************
|
|
@ *
|
|
@ * 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_postradixcompute4
|
|
.hidden ixheaacd_postradixcompute4
|
|
|
|
|
|
|
|
|
|
.extern ixheaacd_sbr_imdct_using_fft
|
|
.hidden ixheaacd_sbr_imdct_using_fft
|
|
|
|
|
|
.global ixheaacd_cos_sin_mod
|
|
ixheaacd_cos_sin_mod:
|
|
STMFD SP!, {R4-R12, R14}
|
|
|
|
LDR R5, [R1]
|
|
MOV R7, R5, ASR #1
|
|
LDR R4, [R1, #12]
|
|
MOV R5, R7, ASR #2
|
|
|
|
MOV R8, R0
|
|
MOV R6, R7, LSL #3
|
|
|
|
|
|
SUB R10, SP, #516
|
|
SUB SP, SP, #516
|
|
|
|
AND R12, R10, #7
|
|
CMP R12, #0
|
|
ADDNE R10, R10, #4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STMFD SP!, {R0-R3}
|
|
|
|
SUB R6, R6, #4
|
|
ADD R9, R0, R6
|
|
|
|
LDR R2, [R4], #4
|
|
LDR R1, [R9], #-4
|
|
LDR R0, [R8], #4
|
|
ADD R11, R10, R6
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOOP1:
|
|
|
|
SUBS R5, R5, #1
|
|
|
|
SMULWT R12, R1, R2
|
|
SMULWB R6, R0, R2
|
|
SMULWT R14, R0, R2
|
|
|
|
|
|
LDR R0, [R8, #0xFC]
|
|
|
|
QSUB R12, R12, R6
|
|
|
|
SMLAWB R14, R1, R2, R14
|
|
|
|
LDR R1, [R9, #0x104]
|
|
|
|
STR R12, [R10, #4]
|
|
STR R14, [R10], #8
|
|
|
|
SMULWT R6, R0, R2
|
|
SMULWB R12, R1, R2
|
|
SMULWT R14, R1, R2
|
|
|
|
LDR R1, [R8], #4
|
|
|
|
QSUB R12, R12, R6
|
|
|
|
SMLAWB R14, R0, R2, R14
|
|
|
|
LDR R2, [R4], #4
|
|
LDR R0, [R9], #-4
|
|
|
|
STR R12, [R10, #0xF8]
|
|
STR R14, [R10, #0xFC]
|
|
|
|
SMULWT R3, R1, R2
|
|
SMULWB R6, R0, R2
|
|
SMULWT R12, R0, R2
|
|
|
|
LDR R0, [R9, #0x104]
|
|
|
|
QSUB R3, R3, R6
|
|
|
|
SMLAWB R12, R1, R2, R12
|
|
|
|
LDR R1, [R8, #0xFC]
|
|
|
|
STR R12, [R11, #-4]
|
|
STR R3, [R11], #-8
|
|
|
|
SMULWT R6, R0, R2
|
|
SMULWB R14, R1, R2
|
|
SMULWT R12, R1, R2
|
|
|
|
LDR R1, [R9], #-4
|
|
|
|
QSUB R14, R14, R6
|
|
|
|
SMLAWB R3, R0, R2, R12
|
|
|
|
LDR R2, [R4], #4
|
|
LDR R0, [R8], #4
|
|
|
|
STR R3, [R11, #0x108]
|
|
STR R14, [R11, #0x104]
|
|
|
|
SMULWT R12, R1, R2
|
|
SMULWB R6, R0, R2
|
|
SMULWT R14, R0, R2
|
|
|
|
LDR R0, [R8, #0xFC]
|
|
|
|
QSUB R12, R12, R6
|
|
|
|
SMLAWB R14, R1, R2, R14
|
|
|
|
LDR R1, [R9, #0x104]
|
|
|
|
STR R12, [R10, #4]
|
|
STR R14, [R10], #8
|
|
|
|
SMULWT R6, R0, R2
|
|
SMULWB R12, R1, R2
|
|
SMULWT R14, R1, R2
|
|
|
|
LDR R1, [R8], #4
|
|
|
|
QSUB R12, R12, R6
|
|
|
|
SMLAWB R14, R0, R2, R14
|
|
|
|
LDR R2, [R4], #4
|
|
LDR R0, [R9], #-4
|
|
STR R12, [R10, #0xF8]
|
|
STR R14, [R10, #0xFC]
|
|
|
|
SMULWT R3, R1, R2
|
|
SMULWB R6, R0, R2
|
|
SMULWT R12, R0, R2
|
|
|
|
LDR R0, [R9, #0x104]
|
|
|
|
QSUB R3, R3, R6
|
|
SMLAWB R12, R1, R2, R12
|
|
|
|
LDR R1, [R8, #0xFC]
|
|
STR R3, [R11], #-4
|
|
STR R12, [R11], #-4
|
|
|
|
SMULWT R6, R0, R2
|
|
SMULWB R3, R1, R2
|
|
SMULWT R12, R1, R2
|
|
|
|
|
|
LDRGT R1, [R9], #-4
|
|
|
|
QSUB R3, R3, R6
|
|
SMLAWB R12, R0, R2, R12
|
|
|
|
|
|
LDRGT R2, [R4], #4
|
|
LDRGT R0, [R8], #4
|
|
|
|
STR R3, [R11, #0x104]
|
|
STR R12, [R11, #0x108]
|
|
|
|
|
|
BGT LOOP1
|
|
LDR R1, [SP, #4]
|
|
LDR R5, [R1]
|
|
LDR R4, [SP, #8]
|
|
LDR R0, [SP, #8]
|
|
ADD R1, SP, #16
|
|
|
|
|
|
AND R2, R1, #7
|
|
CMP R2, #0
|
|
ADDNE R1, R1, #4
|
|
|
|
|
|
CMP R5, #64
|
|
LDR R5, [SP, #12]
|
|
MOV R2, #1
|
|
|
|
BNE THIRTY2BAND
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOV R2, R1
|
|
MOV R1, #32
|
|
LDR R3, [SP]
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
|
|
BL ixheaacd_sbr_imdct_using_fft
|
|
ADD SP, SP, #16
|
|
|
|
MOV R0, R4
|
|
MOV R1, #32
|
|
ADD R2, SP, #16
|
|
|
|
|
|
AND R6, R2, #7
|
|
CMP R6, #0
|
|
ADDNE R2, R2, #4
|
|
|
|
|
|
LDR R3, [SP]
|
|
ADD R2, R2, #256
|
|
ADD R3, R3, #256
|
|
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
|
|
BL ixheaacd_sbr_imdct_using_fft
|
|
|
|
ADD SP, SP, #16
|
|
|
|
LDR R8, [SP]
|
|
LDR R12, [SP, #4]
|
|
MOV R3, #32
|
|
LDR R6, [R8]
|
|
LDR R11, [R8, #4]
|
|
|
|
ADD R9, R8, #252
|
|
|
|
|
|
B LOOP2_PRO
|
|
|
|
THIRTY2BAND:
|
|
|
|
|
|
|
|
MOV R2, R1
|
|
MOV R1, #16
|
|
LDR R3, [SP]
|
|
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
|
|
BL ixheaacd_sbr_imdct_using_fft
|
|
ADD SP, SP, #16
|
|
|
|
MOV R0, R4
|
|
MOV R1, #16
|
|
ADD R2, SP, #16
|
|
|
|
|
|
AND R6, R2, #7
|
|
CMP R6, #0
|
|
ADDNE R2, R2, #4
|
|
|
|
|
|
LDR R3, [SP]
|
|
ADD R2, R2, #256
|
|
ADD R3, R3, #256
|
|
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
STR R5, [SP, #-4]!
|
|
|
|
BL ixheaacd_sbr_imdct_using_fft
|
|
|
|
ADD SP, SP, #16
|
|
LDR R8, [SP]
|
|
LDR R12, [SP, #4]
|
|
LDR R6, [R8]
|
|
LDR R11, [R8, #4]
|
|
ADD R9, R8, #124
|
|
|
|
|
|
|
|
|
|
LOOP2_PRO:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LDR R4, [R12, #20]
|
|
MOV R6, R6, ASR #1
|
|
STR R6, [R8], #4
|
|
LDR R0, [R9]
|
|
LDR R2, [R4], #4
|
|
MOV R11, R11, ASR #1
|
|
LDR R1, [R9, #-4]
|
|
RSB R12, R11, #0
|
|
STR R12, [R9], #-4
|
|
|
|
SMULWT R14, R1, R2
|
|
SMULWB R6, R0, R2
|
|
SMULWT R12, R0, R2
|
|
|
|
LDR R0, [R9, #260]
|
|
QSUB R14, R14, R6
|
|
SMLAWB R12, R1, R2, R12
|
|
|
|
LDR R6, [R8, #252]
|
|
LDR R11, [R8, #256]
|
|
STR R14, [R8], #4
|
|
STR R12, [R9], #-4
|
|
|
|
MOV R6, R6, ASR #1
|
|
MOV R11, R11, ASR #1
|
|
LDR R1, [R9, #260]
|
|
|
|
RSB R6, R6, #0
|
|
STR R6, [R9, #264]
|
|
STR R11, [R8, #248]
|
|
|
|
SMULWT R12, R0, R2
|
|
SMULWT R14, R1, R2
|
|
SMULWB R6, R0, R2
|
|
SMLAWB R12, R1, R2, R12
|
|
|
|
MOV R11, #0
|
|
QSUB R14, R6, R14
|
|
QSUB R12, R11, R12
|
|
LDR R0, [R8, #4]
|
|
LDR R1, [R8]
|
|
STR R12, [R8, #252]
|
|
STR R14, [R9, #260]
|
|
|
|
LDR R5, [SP, #4]
|
|
LDR R5, [R5]
|
|
MOV R5, R5, ASR #2
|
|
SUB R5, R5, #2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOOP2:
|
|
SMULWB R12, R0, R2
|
|
SMULWB R14, R1, R2
|
|
SMULWT R6, R0, R2
|
|
SMLAWT R12, R1, R2, R12
|
|
|
|
LDR R10, [R9]
|
|
QSUB R14, R14, R6
|
|
LDR R0, [R8, #260]
|
|
LDR R1, [R8, #256]
|
|
STR R12, [R8], #4
|
|
STR R14, [R9], #-4
|
|
|
|
SMULWB R3, R0, R2
|
|
SMULWT R6, R0, R2
|
|
SMULWB R14, R1, R2
|
|
SMLAWT R3, R1, R2, R3
|
|
|
|
LDR R7, [R9, #260]
|
|
QSUB R6, R6, R14
|
|
QSUB R3, R11, R3
|
|
LDR R2, [R4], #4
|
|
LDR R1, [R9]
|
|
|
|
STR R3, [R9, #260]
|
|
STR R6, [R8, #252]
|
|
|
|
SMULWT R12, R10, R2
|
|
SMULWT R14, R1, R2
|
|
SMULWB R6, R10, R2
|
|
SMLAWB R12, R1, R2, R12
|
|
|
|
LDR R1, [R9, #256]
|
|
QSUB R14, R14, R6
|
|
|
|
STR R12, [R9], #-4
|
|
STR R14, [R8], #4
|
|
|
|
SUBS R5, R5, #1
|
|
|
|
SMULWT R12, R7, R2
|
|
SMULWT R14, R1, R2
|
|
SMULWB R6, R7, R2
|
|
SMLAWB R12, R1, R2, R12
|
|
|
|
LDRGE R0, [R8, #4]
|
|
LDRGE R1, [R8]
|
|
|
|
QSUB R12, R11, R12
|
|
QSUB R14, R6, R14
|
|
|
|
STR R12, [R8, #252]
|
|
STR R14, [R9, #260]
|
|
|
|
BGE LOOP2
|
|
ENDLOOP2:
|
|
|
|
ADD SP, SP, #532
|
|
LDMFD sp!, {r4-r12, r15}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|