1; ------------------------------------------------------------------ 2; Copyright (C) 1998-2009 PacketVideo 3; 4; Licensed under the Apache License, Version 2.0 (the "License"); 5; you may not use this file except in compliance with the License. 6; You may obtain a copy of the License at 7; 8; http://www.apache.org/licenses/LICENSE-2.0 9; 10; Unless required by applicable law or agreed to in writing, software 11; distributed under the License is distributed on an "AS IS" BASIS, 12; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13; express or implied. 14; See the License for the specific language governing permissions 15; and limitations under the License. 16; ------------------------------------------------------------------- 17 18; 19; 20; Filename: pvmp3_polyphase_filter_window.s 21; 22;------------------------------------------------------------------------------ 23; REVISION HISTORY 24; 25; 26; Who: Date: MM/DD/YYYY 27; Description: 28; 29;------------------------------------------------------------------------------ 30 31 EXPORT pvmp3_polyphase_filter_window 32 33 IMPORT ||Lib$$Request$$armlib|| [WEAK] 34 IMPORT ||Lib$$Request$$cpplib|| [WEAK] 35 IMPORT pqmfSynthWin 36 37 38 39;------------------------------------------------------------------------------ 40 41 AREA |.text|, CODE, READONLY, ALIGN=2 42 43 44;------------------------------------------------------------------------------ 45 46|pvmp3_polyphase_filter_window| PROC 47 48 stmfd sp!,{r0-r2,r4-r11,lr} 49 50 sub sp,sp,#4 51 ldr r2,[sp,#0xc] 52 ldr r1,PolyPh_filter_coeff 53 54 sub r2,r2,#1 55 mov r10,#1 56 str r2,[sp] 57 58; Accumulators r9, r11::> Initialization 59 60Loop_j 61 mov r9, #0x20 62 mov r11, #0x20 63 mov r4, #0x10 64Loop_i 65 add r2,r4,r10 66 add r3,r0,r2,lsl #2 67 sub r2,r4,r10 68 ldr r5,[r3] 69 ldr lr,[r1] 70 add r12,r0,r2,lsl #2 71 ldr r6,[r12,#0x780] 72 smlal r2,r9,lr,r5 73 smlal r2,r11,lr,r6 74 ldr r2,[r1,#4] 75 ldr r7,[r12,#0x80] 76 smlal r5,r11,r2,r5 77 smull r6,r5,r2,r6 78 sub r9,r9,r5 79 ldr r5,[r1,#8] 80 ldr r8,[r3,#0x700] 81 add r4,r4,#0x200 82 smlal r6,r9,r5,r7 83 smull r6,r2,r5,r8 84 ldr r5,[r1,#0xc] 85 sub r11,r11,r2 86 smlal r8,r9,r5,r8 87 smlal r7,r11,r5,r7 88 ldr r5,[r3,#0x100] 89 ldr r2,[r1,#0x10] 90 ldr r6,[r12,#0x680] 91 smlal lr,r9,r2,r5 92 smlal lr,r11,r2,r6 93 ldr r2,[r1,#0x14] 94 ldr r7,[r12,#0x180] 95 smlal r5,r11,r2,r5 96 smull r6,r5,r2,r6 97 ldr r6,[r1,#0x18] 98 ldr r8,[r3,#0x600] 99 sub r9,r9,r5 100 smlal r5,r9,r6,r7 101 smull r2,r5,r6,r8 102 ldr r6,[r1,#0x1c] 103 sub r11,r11,r5 104 smlal r8,r9,r6,r8 105 ldr r2,[r1,#0x20] 106 ldr r5,[r3,#0x200] 107 smlal r7,r11,r6,r7 108 ldr r6,[r12,#0x580] 109 smlal lr,r9,r2,r5 110 smlal lr,r11,r2,r6 111 ldr r2,[r1,#0x24] 112 ldr r7,[r12,#0x280] 113 smlal r5,r11,r2,r5 114 smull r6,r5,r2,r6 115 ldr r6,[r1,#0x28] 116 ldr r8,[r3,#0x500] 117 sub r9,r9,r5 118 smlal r5,r9,r6,r7 119 smull r2,r5,r6,r8 120 ldr r6,[r1,#0x2c] 121 sub r11,r11,r5 122 123 smlal r8,r9,r6,r8 124 smlal r7,r11,r6,r7 125 ldr r5,[r3,#0x300] 126 ldr r8,[r1,#0x30] 127 ldr r6,[r12,#0x480] 128 smlal r7,r9,r8,r5 129 smlal r7,r11,r8,r6 130 ldr r8,[r1,#0x34] 131 ldr r12,[r12,#0x380] 132 smlal r5,r11,r8,r5 133 smull r6,r5,r8,r6 134 ldr r6,[r1,#0x38] 135 136 137 ldr r3,[r3,#0x400] 138 sub r9,r9,r5 139 smlal r7,r9,r6,r12 140 smull r8,r7,r6,r3 141 cmp r4,#0x210 142 sub r11,r11,r7 143 144 ldr r2,[r1,#0x3c] 145 add r1,r1,#0x40 146 smlal r3,r9,r2,r3 147 smlal r12,r11,r2,r12 148 149 blt Loop_i 150 151 mov r3,r9, asr #6 152 mov r4,r3, asr #15 153 teq r4,r3, asr #31 154 ldr r12,LOW_16BITS 155 ldr r2,[sp] 156 eorne r3,r12,r3,asr #31 157 ldr r4,[sp,#8] 158 mov r2,r10,lsl r2 159 add r4,r4,r2,lsl #1 160 strh r3,[r4] 161 162 mov r3,r11,asr #6 163 mov r4,r3,asr #15 164 teq r4,r3,asr #31 165 eorne r3,r12,r3,asr #31 166 ldr r12,[sp,#0xc] 167 ldr r11,[sp,#8] 168 rsb r2,r2,r12,lsl #5 169 add r2,r11,r2,lsl #1 170 strh r3,[r2] 171 172 add r10,r10,#1 173 cmp r10,#0x10 174 blt Loop_j 175 176; Accumulators r4, r5 Initialization 177 178 mov r4,#0x20 179 mov r5,#0x20 180 mov r3,#0x10 181PolyPh_filter_loop2 182 add r2,r0,r3,lsl #2 183 ldr r12,[r2] 184 ldr r8,[r1] 185 ldr r6,[r2,#0x80] 186 smlal r12,r4,r8,r12 187 ldr r12,[r1,#4] 188 ldr r7,[r2,#0x40] 189 smlal r6,r4,r12,r6 190 191 ldr r12,[r1,#8] 192 ldr r6,[r2,#0x180] 193 smlal r7,r5,r12,r7 194 ldr r12,[r2,#0x100] 195 ldr r7,[r1,#0xc] 196 ldr r2,[r2,#0x140] 197 smlal r12,r4,r7,r12 198 ldr r12,[r1,#0x10] 199 add r3,r3,#0x80 200 smlal r6,r4,r12,r6 201 ldr r6,[r1,#0x14] 202 cmp r3,#0x210 203 smlal r2,r5,r6,r2 204 add r1,r1,#0x18 205 206 blt PolyPh_filter_loop2 207 mov r0,r4,asr #6 208 mov r2,r0,asr #15 209 teq r2,r0,asr #31 210 ldrne r12,LOW_16BITS 211 ldr r1,[sp,#8] 212 eorne r0,r12,r0,asr #31 213 strh r0,[r1,#0] 214 mov r0,r5,asr #6 215 mov r2,r0,asr #15 216 teq r2,r0,asr #31 217 ldrne r12,LOW_16BITS 218 ldr r2,[sp] 219 mov r1,#0x10 220 eorne r0,r12,r0,asr #31 221 ldr r12,[sp,#8] 222 mov r1,r1,lsl r2 223 add r1,r12,r1,lsl #1 224 strh r0,[r1] 225 add sp,sp,#0x10 226 ldmfd sp!,{r4-r11,pc} 227 228 229PolyPh_filter_coeff 230 DCD pqmfSynthWin 231LOW_16BITS 232 DCD 0x00007fff 233 234 ENDP 235 236 237 END 238