1*15dc779aSAndroid Build Coastguard Worker@/****************************************************************************** 2*15dc779aSAndroid Build Coastguard Worker@ * 3*15dc779aSAndroid Build Coastguard Worker@ * Copyright (C) 2018 The Android Open Source Project 4*15dc779aSAndroid Build Coastguard Worker@ * 5*15dc779aSAndroid Build Coastguard Worker@ * Licensed under the Apache License, Version 2.0 (the "License"); 6*15dc779aSAndroid Build Coastguard Worker@ * you may not use this file except in compliance with the License. 7*15dc779aSAndroid Build Coastguard Worker@ * You may obtain a copy of the License at: 8*15dc779aSAndroid Build Coastguard Worker@ * 9*15dc779aSAndroid Build Coastguard Worker@ * http://www.apache.org/licenses/LICENSE-2.0 10*15dc779aSAndroid Build Coastguard Worker@ * 11*15dc779aSAndroid Build Coastguard Worker@ * Unless required by applicable law or agreed to in writing, software 12*15dc779aSAndroid Build Coastguard Worker@ * distributed under the License is distributed on an "AS IS" BASIS, 13*15dc779aSAndroid Build Coastguard Worker@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*15dc779aSAndroid Build Coastguard Worker@ * See the License for the specific language governing permissions and 15*15dc779aSAndroid Build Coastguard Worker@ * limitations under the License. 16*15dc779aSAndroid Build Coastguard Worker@ * 17*15dc779aSAndroid Build Coastguard Worker@ ***************************************************************************** 18*15dc779aSAndroid Build Coastguard Worker@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*15dc779aSAndroid Build Coastguard Worker@*/ 20*15dc779aSAndroid Build Coastguard Worker 21*15dc779aSAndroid Build Coastguard Worker 22*15dc779aSAndroid Build Coastguard Worker.text 23*15dc779aSAndroid Build Coastguard Worker.p2align 2 24*15dc779aSAndroid Build Coastguard Worker .extern ixheaacd_cos_sin_mod 25*15dc779aSAndroid Build Coastguard Worker.hidden ixheaacd_cos_sin_mod 26*15dc779aSAndroid Build Coastguard Worker .global ixheaacd_fwd_modulation 27*15dc779aSAndroid Build Coastguard Worker .type ixheaacd_fwd_modulation, %function 28*15dc779aSAndroid Build Coastguard Workerixheaacd_fwd_modulation: 29*15dc779aSAndroid Build Coastguard Worker 30*15dc779aSAndroid Build Coastguard Worker STMFD sp!, {r3-r9, r12, lr} 31*15dc779aSAndroid Build Coastguard Worker MOV r5, r2 32*15dc779aSAndroid Build Coastguard Worker LDR r2, [sp, #0x24] 33*15dc779aSAndroid Build Coastguard Worker MOV lr, r1 34*15dc779aSAndroid Build Coastguard Worker MOV r4, r1 35*15dc779aSAndroid Build Coastguard Worker LDR r1, [r3] 36*15dc779aSAndroid Build Coastguard Worker SUB r1, r1, #1 37*15dc779aSAndroid Build Coastguard Worker CMP r1, #0x3f 38*15dc779aSAndroid Build Coastguard Worker MOV r7, r5 39*15dc779aSAndroid Build Coastguard Worker ADD r8, r0, #0xfc 40*15dc779aSAndroid Build Coastguard Worker ADDEQ r8, r8, #0x100 41*15dc779aSAndroid Build Coastguard Worker MOV r6, r3 42*15dc779aSAndroid Build Coastguard WorkerLOOP1: 43*15dc779aSAndroid Build Coastguard Worker LDR r3, [r0], #4 44*15dc779aSAndroid Build Coastguard Worker LDR r12, [r8], #-4 45*15dc779aSAndroid Build Coastguard Worker 46*15dc779aSAndroid Build Coastguard Worker MOV r3, r3, ASR #4 47*15dc779aSAndroid Build Coastguard Worker MOV r12, r12, ASR #4 48*15dc779aSAndroid Build Coastguard Worker 49*15dc779aSAndroid Build Coastguard Worker QSUB r9, r3, r12 50*15dc779aSAndroid Build Coastguard Worker ADD r3, r3, r12 51*15dc779aSAndroid Build Coastguard Worker 52*15dc779aSAndroid Build Coastguard Worker STR r9, [lr], #4 53*15dc779aSAndroid Build Coastguard Worker SUBS r1, r1, #1 54*15dc779aSAndroid Build Coastguard Worker STR r3, [r7], #4 55*15dc779aSAndroid Build Coastguard Worker 56*15dc779aSAndroid Build Coastguard Worker BPL LOOP1 57*15dc779aSAndroid Build Coastguard Worker 58*15dc779aSAndroid Build Coastguard Worker MOV r1, r6 59*15dc779aSAndroid Build Coastguard Worker MOV r0, r4 60*15dc779aSAndroid Build Coastguard Worker 61*15dc779aSAndroid Build Coastguard Worker 62*15dc779aSAndroid Build Coastguard Worker 63*15dc779aSAndroid Build Coastguard Worker MOV r3, #0xd8 64*15dc779aSAndroid Build Coastguard Worker LSL r3, r3, #4 65*15dc779aSAndroid Build Coastguard Worker ADD r3, r3, #8 66*15dc779aSAndroid Build Coastguard Worker 67*15dc779aSAndroid Build Coastguard Worker ADD r3, r2, r3 68*15dc779aSAndroid Build Coastguard Worker 69*15dc779aSAndroid Build Coastguard Worker 70*15dc779aSAndroid Build Coastguard Worker ADD r2, r3, #4 71*15dc779aSAndroid Build Coastguard Worker 72*15dc779aSAndroid Build Coastguard Worker 73*15dc779aSAndroid Build Coastguard Worker 74*15dc779aSAndroid Build Coastguard Worker BL ixheaacd_cos_sin_mod 75*15dc779aSAndroid Build Coastguard Worker 76*15dc779aSAndroid Build Coastguard Worker LDR r1, [sp, #0x28] 77*15dc779aSAndroid Build Coastguard Worker LDRSH r2, [r6] 78*15dc779aSAndroid Build Coastguard Worker CMP r1, #1 79*15dc779aSAndroid Build Coastguard Worker BEQ LOOP3 80*15dc779aSAndroid Build Coastguard Worker LDRSH r1, [r6, #0x2c] 81*15dc779aSAndroid Build Coastguard Worker LDRSH r2, [r6, #0x2a] 82*15dc779aSAndroid Build Coastguard Worker LDR r0, [r6, #0x18] 83*15dc779aSAndroid Build Coastguard Worker SUBS r2, r1, r2 84*15dc779aSAndroid Build Coastguard Worker 85*15dc779aSAndroid Build Coastguard Worker@ LDMLEFD sp!, {r3-r9, r12, pc} 86*15dc779aSAndroid Build Coastguard Worker LDMFDLE sp!, {r3-r9, r12, pc} 87*15dc779aSAndroid Build Coastguard WorkerLOOP2: 88*15dc779aSAndroid Build Coastguard Worker LDR r1, [r0], #4 89*15dc779aSAndroid Build Coastguard Worker LDR r12, [r5, #0] 90*15dc779aSAndroid Build Coastguard Worker LDR r3, [r4, #0] 91*15dc779aSAndroid Build Coastguard Worker 92*15dc779aSAndroid Build Coastguard Worker SMULWT r6, r12, r1 93*15dc779aSAndroid Build Coastguard Worker SMULWB lr, r3, r1 94*15dc779aSAndroid Build Coastguard Worker 95*15dc779aSAndroid Build Coastguard Worker SMULWB r12, r12, r1 96*15dc779aSAndroid Build Coastguard Worker SMULWT r1, r3, r1 97*15dc779aSAndroid Build Coastguard Worker 98*15dc779aSAndroid Build Coastguard Worker 99*15dc779aSAndroid Build Coastguard Worker 100*15dc779aSAndroid Build Coastguard Worker 101*15dc779aSAndroid Build Coastguard Worker ADD lr, lr, r6 102*15dc779aSAndroid Build Coastguard Worker QSUB r1, r12, r1 103*15dc779aSAndroid Build Coastguard Worker MOV r3, lr, LSL #1 104*15dc779aSAndroid Build Coastguard Worker MOV r1, r1, LSL #1 105*15dc779aSAndroid Build Coastguard Worker STR r3, [r4], #4 106*15dc779aSAndroid Build Coastguard Worker SUBS r2, r2, #1 107*15dc779aSAndroid Build Coastguard Worker STR r1, [r5], #4 108*15dc779aSAndroid Build Coastguard Worker BGT LOOP2 109*15dc779aSAndroid Build Coastguard Worker B END 110*15dc779aSAndroid Build Coastguard WorkerLOOP3: 111*15dc779aSAndroid Build Coastguard Worker LDR r12, [r5, #0] 112*15dc779aSAndroid Build Coastguard Worker LDR r3, [r4, #0] 113*15dc779aSAndroid Build Coastguard Worker 114*15dc779aSAndroid Build Coastguard Worker MOV r1, r3 115*15dc779aSAndroid Build Coastguard Worker MOV r3, #0 116*15dc779aSAndroid Build Coastguard Worker SUB r3, r3, r12 117*15dc779aSAndroid Build Coastguard Worker 118*15dc779aSAndroid Build Coastguard Worker STR r3, [r4], #4 119*15dc779aSAndroid Build Coastguard Worker STR r1, [r5], #4 120*15dc779aSAndroid Build Coastguard Worker 121*15dc779aSAndroid Build Coastguard Worker LDR r12, [r5, #0] 122*15dc779aSAndroid Build Coastguard Worker LDR r3, [r4, #0] 123*15dc779aSAndroid Build Coastguard Worker 124*15dc779aSAndroid Build Coastguard Worker MOV r1, r12 125*15dc779aSAndroid Build Coastguard Worker MOV r12, #0 126*15dc779aSAndroid Build Coastguard Worker SUB r12, r12, r3 127*15dc779aSAndroid Build Coastguard Worker 128*15dc779aSAndroid Build Coastguard Worker STR r12, [r5], #4 129*15dc779aSAndroid Build Coastguard Worker STR r1, [r4], #4 130*15dc779aSAndroid Build Coastguard Worker 131*15dc779aSAndroid Build Coastguard Worker SUBS r2, r2, #2 132*15dc779aSAndroid Build Coastguard Worker BGT LOOP3 133*15dc779aSAndroid Build Coastguard WorkerEND: 134*15dc779aSAndroid Build Coastguard Worker LDMFD sp!, {r3-r9, r12, pc} 135