blob: b253b480ead7e45c4e1423d98541ed524eec3c32 [file] [log] [blame]
@/******************************************************************************
@ *
@ * 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}