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_dct_18.s 21; 22;------------------------------------------------------------------------------ 23; REVISION HISTORY 24; 25; 26; Who: Date: MM/DD/YYYY 27; Description: 28; 29;------------------------------------------------------------------------------ 30 31 EXPORT pvmp3_mdct_18 32 33 IMPORT ||Lib$$Request$$armlib|| [WEAK] 34 IMPORT ||Lib$$Request$$cpplib|| [WEAK] 35 IMPORT pvmp3_dct_9 36 37 38;------------------------------------------------------------------------------ 39 40 AREA |.text|, CODE, READONLY, ALIGN=2 41 42 43;------------------------------------------------------------------------------ 44 45|pvmp3_mdct_18| PROC 46 stmfd sp!,{r4-r10,lr} 47 mov r7,r2 48 ldr r2,table 49 mov r6,r1 50 add r3,r2,#0x24 51 add r12,r3,#0x44 52 add r1,r0,#0x44 53 mov r5,r0 54 55; for ( i=9; i!=0; i--) 56; { 57 58 mov r4,#9 59Loop_1 60 61; tmp = *(pt_vec); 62; tmp1 = *(pt_vec_o); 63 64 ldr lr,[r0] ;; tmp == lr 65 ldr r8,[r3],#4 ;; tmp1 == r8 66 67; tmp = fxp_mul32_Q32( tmp<<1, *(pt_cos++ )); 68; tmp1 = fxp_mul32_Q27( tmp1, *(pt_cos_x--)); 69 70 mov lr,lr,lsl #1 71 smull r10,lr,r8,lr 72 ldr r8,[r12],#-4 73 ldr r9,[r1] 74 subs r4,r4,#1 75 smull r9,r10,r8,r9 76 mov r8,r9,lsr #27 77 add r8,r8,r10,lsl #5 78 79; *(pt_vec++) = tmp + tmp1 ; 80; *(pt_vec_o--) = fxp_mul32_Q28( (tmp - tmp1), *(pt_cos_split++)); 81 82 add r9,lr,r8 83 sub r8,lr,r8 84 ldr lr,[r2],#4 85 str r9,[r0],#4 86 smull r8,r9,lr,r8 87 mov lr,r8,lsr #28 88 add lr,lr,r9,lsl #4 89 str lr,[r1],#-4 90 bne Loop_1 91 92; } 93 94 mov r0,r5 ;; r0 = vec 95 bl pvmp3_dct_9 96 add r0,r5,#0x24 ;; r0 = &vec[9] 97 bl pvmp3_dct_9 98 99 ldr r0,[r5,#0x20] 100 ldr r2,[r5,#0x40] 101 str r0,[r5,#0x40] 102 ldr r0,[r5,#0x1c] 103 ldr r3,[r5,#0x38] 104 str r0,[r5,#0x38] 105 ldr r1,[r5,#0x18] 106 ldr r0,[r5,#0x30] 107 str r1,[r5,#0x30] 108 ldr r12,[r5,#0x14] 109 ldr r1,[r5,#0x28] 110 str r12,[r5,#0x28] 111 ldr r12,[r5,#0x10] 112 str r12,[r5,#0x20] 113 ldr r12,[r5,#0xc] 114 str r12,[r5,#0x18] 115 ldr r12,[r5,#8] 116 str r12,[r5,#0x10] 117 ldr r12,[r5,#4] 118 str r12,[r5,#8] 119 ldr r12,[r5,#0x24] 120 sub r12,r12,r1 121 str r12,[r5,#4] 122 ldr r12,[r5,#0x2c] 123 sub r1,r12,r1 124 str r1,[r5,#0xc] 125 sub r1,r12,r0 126 str r1,[r5,#0x14] 127 ldr r1,[r5,#0x34] 128 sub r0,r1,r0 129 str r0,[r5,#0x1c] 130 sub r0,r1,r3 131 str r0,[r5,#0x24] 132 ldr r1,[r5,#0x3c] 133 sub r3,r1,r3 134 sub r1,r1,r2 135 str r1,[r5,#0x34] 136 str r3,[r5,#0x2c] 137 ldr r1,[r5,#0x44] 138 sub r1,r1,r2 139 str r1,[r5,#0x3c] 140 ldr r12,[r5,#0] 141 142Loop_2 143 add r1,r5,r4,lsl #2 144 ldr r2,[r1,#0x28] 145 ldr r3,[r6,r4,lsl #2] 146 add r0,r0,r2 147 str r0,[r1,#0x28] 148 ldr lr,[r7,r4,lsl #2] 149 ldr r1,[r1,#4] 150 smlal r0,r3,lr,r0 151 mov r0,r2 152 add r2,r12,r1 153 rsb r2,r2,#0 154 str r3,[r5,r4,lsl #2] 155 str r2,[r6,r4,lsl #2] 156 add r4,r4,#1 157 cmp r4,#6 158 mov r12,r1 159 160 blt Loop_2 161 162 ldr r1,[r5,#0x40] 163 ldr r2,[r6,#0x18] 164 add r3,r0,r1 165 str r3,[r5,#0x40] 166 ldr lr,[r7,r4,lsl #2] 167 mov r3,r3,lsl #1 168 ldr r0,[r5,#0x1c] 169 smlal r3,r2,lr,r3 170 add r3,r12,r0 171 str r2,[r5,#0x18] 172 ldr r2,[r6,#0x1c] 173 rsb r3,r3,#0 174 str r3,[r6,#0x18] 175 ldr r3,[r5,#0x20] 176 add r0,r3,r0 177 rsb r0,r0,#0 178 str r0,[r6,#0x1c] 179 ldr r3,[r5,#0x44] 180 ldr r0,[r6,#0x20] 181 add r3,r3,r1 182 mov r1,r2 183 ldr r10,[r7,#0x1c] 184 mov r2,r3,lsl #1 185 smlal r12,r1,r10,r2 186 str r1,[r5,#0x1c] 187 ldr r1,[r5,#0x20] 188 ldr r3,[r5,#0x24] 189 add r1,r1,r3 190 rsb r1,r1,#0 191 str r1,[r6,#0x20] 192 ldr r1,[r5,#0x44] 193 ldr r3,[r7,#0x20] 194 mov r1,r1,lsl #1 195 smlal r12,r0,r3,r1 196 ldr lr,[r7,#0x24] 197 ldr r3,[r6,#0x24] 198 str r0,[r5,#0x20] 199 smlal r1,r3,lr,r1 200 ldr r0,[r6,#0x40] 201 ldr r12,[r6,#0x44] 202 str r3,[r5,#0x24] 203 ldr r1,[r5,#0x28] 204 ldr r3,[r7,#0x44] 205 mov r1,r1,lsl #1 206 smlal r1,r12,r3,r1 207 ldr r1,[r5,#0x40] 208 str r12,[r5,#0x44] 209 rsb r8,r1,#0 210 str r8,[r5,#0x28] 211 ldr r1,[r5,#0x2c] 212 ldr r3,[r7,#0x40] 213 mov r1,r1,lsl #1 214 smlal r1,r0,r3,r1 215 str r0,[r5,#0x40] 216 ldr r0,[r5,#0x3c] 217 ldr r1,[r6,#0x38] 218 ldr r3,[r6,#0x3c] 219 rsb r9,r0,#0 220 str r9,[r5,#0x2c] 221 ldr r0,[r5,#0x30] 222 ldr r12,[r7,#0x3c] 223 mov r0,r0,lsl #1 224 smlal r0,r3,r12,r0 225 str r3,[r5,#0x3c] 226 ldr r0,[r5,#0x38] 227 rsb r0,r0,#0 228 str r0,[r5,#0x30] 229 ldr r3,[r5,#0x34] 230 ldr r12,[r7,#0x38] 231 mov r3,r3,lsl #1 232 smlal r3,r1,r12,r3 233 mov r0,r0,lsl #1 234 str r1,[r5,#0x38] 235 ldr r4,[r7,#0x34] 236 ldr r1,[r6,#0x34] 237 ldr r3,[r6,#0x30] 238 smlal r0,r1,r4,r0 239 ldr r12,[r6,#0x2c] 240 ldr lr,[r6,#0x28] 241 str r1,[r5,#0x34] 242 ldr r1,[r7,#0x30] 243 mov r0,r9,lsl #1 244 smlal r0,r3,r1,r0 245 mov r0,r8,lsl #1 246 ldr r1,[r7,#0x2c] 247 str r3,[r5,#0x30] 248 smlal r0,r12,r1,r0 249 ldr r0,[r7,#0x28] 250 str r12,[r5,#0x2c] 251 smlal r2,lr,r0,r2 252 str lr,[r5,#0x28] 253 ldr r1,[r6,#4] 254 ldr r12,[r7,#0x48] 255 mov r2,r1,lsl #1 256 ldr r1,[r6,#0x20] 257 ldr r0,[r6] 258 mov r1,r1,lsl #1 259 smull r4,lr,r12,r1 260 ldr r3,[r6,#0x1c] 261 str lr,[r6] 262 ldr r12,[r7,#0x4c] 263 mov r3,r3,lsl #1 264 smull r4,lr,r12,r3 265 mov r0,r0,lsl #1 266 ldr r12,[r7,#0x64] 267 str lr,[r6,#4] 268 smull r4,lr,r12,r2 269 ldr r12,[r7,#0x68] 270 str lr,[r6,#0x1c] 271 smull r4,lr,r12,r0 272 ldr r12,[r7,#0x6c] 273 str lr,[r6,#0x20] 274 smull lr,r0,r12,r0 275 ldr r12,[r7,#0x70] 276 str r0,[r6,#0x24] 277 smull r0,r2,r12,r2 278 ldr r0,[r7,#0x88] 279 str r2,[r6,#0x28] 280 smull r3,r2,r0,r3 281 ldr r0,[r7,#0x8c] 282 str r2,[r6,#0x40] 283 smull r2,r1,r0,r1 284 str r1,[r6,#0x44] 285 ldr r0,[r6,#0x18] 286 ldr lr,[r7,#0x50] 287 mov r1,r0,lsl #1 288 ldr r0,[r6,#0x14] 289 smull r5,r4,lr,r1 290 ldr r12,[r6,#0x10] 291 mov r3,r0,lsl #1 292 ldr r0,[r6,#0xc] 293 mov r12,r12,lsl #1 294 mov r2,r0,lsl #1 295 ldr r0,[r6,#8] 296 str r4,[r6,#8] 297 ldr lr,[r7,#0x54] 298 mov r0,r0,lsl #1 299 smull r5,r4,lr,r3 300 ldr lr,[r7,#0x58] 301 str r4,[r6,#0xc] 302 smull r5,r4,lr,r12 303 ldr lr,[r7,#0x5c] 304 str r4,[r6,#0x10] 305 smull r5,r4,lr,r2 306 ldr lr,[r7,#0x60] 307 str r4,[r6,#0x14] 308 smull r5,r4,lr,r0 309 ldr lr,[r7,#0x74] 310 str r4,[r6,#0x18] 311 smull r4,r0,lr,r0 312 ldr lr,[r7,#0x78] 313 str r0,[r6,#0x2c] 314 smull r0,r2,lr,r2 315 ldr r0,[r7,#0x7c] 316 str r2,[r6,#0x30] 317 smull r12,r2,r0,r12 318 ldr r0,[r7,#0x80] 319 str r2,[r6,#0x34] 320 smull r3,r2,r0,r3 321 ldr r0,[r7,#0x84] 322 str r2,[r6,#0x38] 323 smull r2,r1,r0,r1 324 str r1,[r6,#0x3c] 325 ldmfd sp!,{r4-r10,pc} 326table 327 DCD ||.constdata$1|| 328 ENDP 329 330;------------------------------------------------------------------------------ 331 332 AREA |.constdata|, DATA, READONLY, ALIGN=2 333 334;------------------------------------------------------------------------------ 335 336||.constdata$1|| 337cosTerms_dct18 338 DCD 0x0807d2b0 339 DCD 0x08483ee0 340 DCD 0x08d3b7d0 341 DCD 0x09c42570 342 DCD 0x0b504f30 343 DCD 0x0df29440 344 DCD 0x12edfb20 345 DCD 0x1ee8dd40 346 DCD 0x5bca2a00 347cosTerms_1_ov_cos_phi 348 DCD 0x400f9c00 349 DCD 0x408d6080 350 DCD 0x418dcb80 351 DCD 0x431b1a00 352 DCD 0x4545ea00 353 DCD 0x48270680 354 DCD 0x4be25480 355 DCD 0x50ab9480 356 DCD 0x56ce4d80 357 DCD 0x05ebb630 358 DCD 0x06921a98 359 DCD 0x0771d3a8 360 DCD 0x08a9a830 361 DCD 0x0a73d750 362 DCD 0x0d4d5260 363 DCD 0x127b1ca0 364 DCD 0x1ea52b40 365 DCD 0x5bb3cc80 366 367 368 369 END 370