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