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 .arm 32 33 .align 4 34 35 .text 36 37 .extern pqmfSynthWin 38 .hidden pqmfSynthWin 39 40 41 42 @------------------------------------------------------------------------------ 43 44 .global pvmp3_polyphase_filter_window 45 46 pvmp3_polyphase_filter_window: 47 stmfd sp!,{r0-r2,r4-r11,lr} 48 49 sub sp,sp,#4 50 adr r2,PolyPh_filter_coeff 51 ldr r1,[r2] 52 add r1,r2 53 ldr r2,[sp,#0xc] 54 55 sub r2,r2,#1 56 mov r10,#1 57 str r2,[sp] 58 59 @ Accumulators r9, r11::> Initialization 60 61 Loop_j: 62 mov r9, #0x20 63 mov r11, #0x20 64 mov r4, #0x10 65 Loop_i: 66 add r2,r4,r10 67 add r3,r0,r2,lsl #2 68 sub r2,r4,r10 69 ldr r5,[r3] 70 ldr lr,[r1] 71 add r12,r0,r2,lsl #2 72 ldr r6,[r12,#0x780] 73 smlal r2,r9,lr,r5 74 smlal r2,r11,lr,r6 75 ldr r2,[r1,#4] 76 ldr r7,[r12,#0x80] 77 smlal r5,r11,r2,r5 78 smull r6,r5,r2,r6 79 sub r9,r9,r5 80 ldr r5,[r1,#8] 81 ldr r8,[r3,#0x700] 82 add r4,r4,#0x200 83 smlal r6,r9,r5,r7 84 smull r6,r2,r5,r8 85 ldr r5,[r1,#0xc] 86 sub r11,r11,r2 87 smlal r8,r9,r5,r8 88 smlal r7,r11,r5,r7 89 ldr r5,[r3,#0x100] 90 ldr r2,[r1,#0x10] 91 ldr r6,[r12,#0x680] 92 smlal lr,r9,r2,r5 93 smlal lr,r11,r2,r6 94 ldr r2,[r1,#0x14] 95 ldr r7,[r12,#0x180] 96 smlal r5,r11,r2,r5 97 smull r6,r5,r2,r6 98 ldr r6,[r1,#0x18] 99 ldr r8,[r3,#0x600] 100 sub r9,r9,r5 101 smlal r5,r9,r6,r7 102 smull r2,r5,r6,r8 103 ldr r6,[r1,#0x1c] 104 sub r11,r11,r5 105 smlal r8,r9,r6,r8 106 ldr r2,[r1,#0x20] 107 ldr r5,[r3,#0x200] 108 smlal r7,r11,r6,r7 109 ldr r6,[r12,#0x580] 110 smlal lr,r9,r2,r5 111 smlal lr,r11,r2,r6 112 ldr r2,[r1,#0x24] 113 ldr r7,[r12,#0x280] 114 smlal r5,r11,r2,r5 115 smull r6,r5,r2,r6 116 ldr r6,[r1,#0x28] 117 ldr r8,[r3,#0x500] 118 sub r9,r9,r5 119 smlal r5,r9,r6,r7 120 smull r2,r5,r6,r8 121 ldr r6,[r1,#0x2c] 122 sub r11,r11,r5 123 124 smlal r8,r9,r6,r8 125 smlal r7,r11,r6,r7 126 ldr r5,[r3,#0x300] 127 ldr r8,[r1,#0x30] 128 ldr r6,[r12,#0x480] 129 smlal r7,r9,r8,r5 130 smlal r7,r11,r8,r6 131 ldr r8,[r1,#0x34] 132 ldr r12,[r12,#0x380] 133 smlal r5,r11,r8,r5 134 smull r6,r5,r8,r6 135 ldr r6,[r1,#0x38] 136 137 138 ldr r3,[r3,#0x400] 139 sub r9,r9,r5 140 smlal r7,r9,r6,r12 141 smull r8,r7,r6,r3 142 cmp r4,#0x210 143 sub r11,r11,r7 144 145 ldr r2,[r1,#0x3c] 146 add r1,r1,#0x40 147 smlal r3,r9,r2,r3 148 smlal r12,r11,r2,r12 149 150 blt Loop_i 151 152 mov r3,r9, asr #6 153 mov r4,r3, asr #15 154 teq r4,r3, asr #31 155 ldr r12,LOW_16BITS 156 ldr r2,[sp] 157 eorne r3,r12,r3,asr #31 158 ldr r4,[sp,#8] 159 mov r2,r10,lsl r2 160 add r4,r4,r2,lsl #1 161 strh r3,[r4] 162 163 mov r3,r11,asr #6 164 mov r4,r3,asr #15 165 teq r4,r3,asr #31 166 eorne r3,r12,r3,asr #31 167 ldr r12,[sp,#0xc] 168 ldr r11,[sp,#8] 169 rsb r2,r2,r12,lsl #5 170 add r2,r11,r2,lsl #1 171 strh r3,[r2] 172 173 add r10,r10,#1 174 cmp r10,#0x10 175 blt Loop_j 176 177 @ Accumulators r4, r5 Initialization 178 179 mov r4,#0x20 180 mov r5,#0x20 181 mov r3,#0x10 182 PolyPh_filter_loop2: 183 add r2,r0,r3,lsl #2 184 ldr r12,[r2] 185 ldr r8,[r1] 186 ldr r6,[r2,#0x80] 187 smlal r12,r4,r8,r12 188 ldr r12,[r1,#4] 189 ldr r7,[r2,#0x40] 190 smlal r6,r4,r12,r6 191 192 ldr r12,[r1,#8] 193 ldr r6,[r2,#0x180] 194 smlal r7,r5,r12,r7 195 ldr r12,[r2,#0x100] 196 ldr r7,[r1,#0xc] 197 ldr r2,[r2,#0x140] 198 smlal r12,r4,r7,r12 199 ldr r12,[r1,#0x10] 200 add r3,r3,#0x80 201 smlal r6,r4,r12,r6 202 ldr r6,[r1,#0x14] 203 cmp r3,#0x210 204 smlal r2,r5,r6,r2 205 add r1,r1,#0x18 206 207 blt PolyPh_filter_loop2 208 mov r0,r4,asr #6 209 mov r2,r0,asr #15 210 teq r2,r0,asr #31 211 ldrne r12,LOW_16BITS 212 ldr r1,[sp,#8] 213 eorne r0,r12,r0,asr #31 214 strh r0,[r1,#0] 215 mov r0,r5,asr #6 216 mov r2,r0,asr #15 217 teq r2,r0,asr #31 218 ldrne r12,LOW_16BITS 219 ldr r2,[sp] 220 mov r1,#0x10 221 eorne r0,r12,r0,asr #31 222 ldr r12,[sp,#8] 223 mov r1,r1,lsl r2 224 add r1,r12,r1,lsl #1 225 strh r0,[r1] 226 add sp,sp,#0x10 227 ldmfd sp!,{r4-r11,pc} 228 229 PolyPh_filter_coeff: 230 .word pqmfSynthWin-PolyPh_filter_coeff 231 LOW_16BITS: 232 .word 0x00007fff 233 234