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