151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@/****************************************************************************** 251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * Copyright (C) 2018 The Android Open Source Project 451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * Licensed under the Apache License, Version 2.0 (the "License"); 651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * you may not use this file except in compliance with the License. 751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * You may obtain a copy of the License at: 851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * http://www.apache.org/licenses/LICENSE-2.0 1051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 1151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * Unless required by applicable law or agreed to in writing, software 1251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * distributed under the License is distributed on an "AS IS" BASIS, 1351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * See the License for the specific language governing permissions and 1551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * limitations under the License. 1651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * 1751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ ***************************************************************************** 1851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 1951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@*/ 2051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.text 2351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.p2align 2 2451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick .extern ixheaacd_cos_sin_mod 2551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick.hidden ixheaacd_cos_sin_mod 2651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick .global ixheaacd_fwd_modulation 2751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essickixheaacd_fwd_modulation: 2851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 2951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick STMFD sp!, {r3-r9, r12, lr} 3051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r5, r2 3151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR r2, [sp, #0x24] 3251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV lr, r1 3351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r4, r1 3451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r1, #0x1f 3551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r7, r5 3651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ADD r8, r0, #0xfc 3751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r6, r3 3851aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickLOOP1: 3951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR r3, [r0], #4 4051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR r12, [r8], #-4 4151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r3, r3, ASR #4 4351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r12, r12, ASR #4 4451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick QSUB r9, r3, r12 4651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ADD r3, r3, r12 4751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 4851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick STR r9, [lr], #4 4951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS r1, r1, #1 5051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick STR r3, [r7], #4 5151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BPL LOOP1 5351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r1, r6 5551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r0, r4 5651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 5951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r3, #0xd8 6051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LSL r3, r3, #4 6151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ADD r3, r3, #8 6251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ADD r3, r2, r3 6451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ADD r2, r3, #4 6751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 6951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BL ixheaacd_cos_sin_mod 7151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDRSH r1, [r6, #0x2c] 7351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDRSH r2, [r6, #0x2a] 7451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR r0, [r6, #0x18] 7551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS r2, r1, r2 7651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 7751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick@ LDMLEFD sp!, {r3-r9, r12, pc} 7851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDMFDLE sp!, {r3-r9, r12, pc} 7951aa06e124ba688ca810b25ee0b5bb66678aac14Ray EssickLOOP2: 8051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR r1, [r0], #4 8151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR r12, [r5, #0] 8251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDR r3, [r4, #0] 8351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SMULWT r6, r12, r1 8551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SMULWB lr, r3, r1 8651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 8751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SMULWB r12, r12, r1 8851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SMULWT r1, r3, r1 8951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 9351aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick ADD lr, lr, r6 9451aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick QSUB r1, r12, r1 9551aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r3, lr, LSL #1 9651aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick MOV r1, r1, LSL #1 9751aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick STR r3, [r4], #4 9851aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick SUBS r2, r2, #1 9951aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick STR r1, [r5], #4 10051aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick BGT LOOP2 10151aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick 10251aa06e124ba688ca810b25ee0b5bb66678aac14Ray Essick LDMFD sp!, {r3-r9, r12, pc} 103