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