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.global ixheaacd_dct3_32 25.extern ixheaacd_radix4bfly 26.hidden ixheaacd_radix4bfly 27.extern ixheaacd_postradixcompute4 28.hidden ixheaacd_postradixcompute4 29 30ixheaacd_dct3_32: 31 32 33 STMFD sp!, {R4-R12, R14} 34 VPUSH {D8 - D15} 35 ADD R6, R0, #196 36 SUB R7, R6, #8 37 ADD R10, R7, #4 38 MOV R9, #0 39 VDUP.32 D0, R9 40 ADD R4, R2, #8 41 MOV R8, R1 42 43 VLD1.32 D0[0], [R10] 44 MOV R11, #-4 45 46 VSHR.S32 D0, D0, #7 47 VLD4.16 {D12, D13, D14, D15}, [R4]! 48 49 MOV R12, #-16 50 VST1.32 D0, [R8]! 51 SUB R7, R7, #12 52 53 VLD1.32 {Q0}, [R6]! 54 VLD1.32 {Q1}, [R7], R12 55 SUB R9, R6, #144 56 57 VREV64.32 Q1, Q1 58 SUB R5, R7, #112 59 60 VSWP D2, D3 61 VSHR.S32 Q0, Q0, #7 62 63 VSHR.S32 Q1, Q1, #7 64 VLD1.32 {Q3}, [R9]! 65 VADD.I32 Q2, Q1, Q0 66 67 VUZP.16 D4, D5 68 VSHR.S32 Q3, Q3, #7 69 70 71 VLD1.32 {Q4}, [R5], R12 72 VMULL.U16 Q15, D4, D12 73 74 VREV64.32 Q4, Q4 75 VMULL.U16 Q14, D4, D13 76 77 VSWP D8, D9 78 79 VSHR.S32 Q4, Q4, #7 80 VLD1.32 {Q0}, [R6]! 81 VSUB.I32 Q5, Q3, Q4 82 83 VUZP.16 D10, D11 84 85 VMLAL.U16 Q15, D10, D13 86 VLD1.32 {Q1}, [R7], R12 87 VMLSL.U16 Q14, D10, D12 88 89 VREV64.32 Q1, Q1 90 VSHR.S32 Q0, Q0, #7 91 92 VSWP D2, D3 93 94 VSHR.U32 Q15, Q15, #16 95 VSHR.S32 Q1, Q1, #7 96 97 VMLAL.S16 Q15, D5, D12 98 VMLAL.S16 Q15, D11, D13 99 100 101 VSHR.S32 Q14, Q14, #16 102 VMLAL.S16 Q14, D5, D13 103 VADD.I32 Q2, Q1, Q0 104 VMLSL.S16 Q14, D11, D12 105 106 VUZP.16 D4, D5 107 SUB R9, R6, #144 108 109 VSWP Q15, Q14 110 SUB R5, R7, #112 111 112 VST2.32 {Q14, Q15}, [R8]! 113 114 VLD1.32 {Q3}, [R9]! 115 116 VLD1.32 {Q4}, [R5], R12 117 VSHR.S32 Q3, Q3, #7 118 119 VREV64.32 Q4, Q4 120 121 VSWP D8, D9 122 123 VSHR.S32 Q4, Q4, #7 124 VLD4.16 {D12, D13, D14, D15}, [R4]! 125 VSUB.I32 Q5, Q3, Q4 126 127 VUZP.16 D10, D11 128 VMULL.U16 Q15, D4, D12 129 VMLAL.U16 Q15, D10, D13 130 VMULL.U16 Q14, D4, D13 131 VLD1.32 {Q0}, [R6]! 132 VMLSL.U16 Q14, D10, D12 133 VLD1.32 {Q1}, [R7], R11 134 VSHR.U32 Q15, Q15, #16 135 136 VREV64.32 Q1, Q1 137 VSHR.S32 Q14, Q14, #16 138 139 VSWP D2, D3 140 VSHR.S32 Q0, Q0, #7 141 142 SUB R9, R6, #144 143 144 SUB R5, R7, #124 145 VLD1.32 {Q3}, [R9]! 146 VMLAL.S16 Q14, D5, D13 147 148 VMLSL.S16 Q14, D11, D12 149 VLD1.32 {Q4}, [R5], R11 150 VMLAL.S16 Q15, D5, D12 151 152 VREV64.32 Q4, Q4 153 VMLAL.S16 Q15, D11, D13 154 155 VSWP D8, D9 156 VSHR.S32 Q1, Q1, #7 157 158 VADD.I32 Q2, Q1, Q0 159 VLD4.16 {D12, D13, D14, D15}, [R4]! 160 VSHR.S32 Q3, Q3, #7 161 162 VUZP.16 D4, D5 163 VSHR.S32 Q4, Q4, #7 164 165 VSWP Q15, Q14 166 VSUB.I32 Q5, Q3, Q4 167 168 VST2.32 {Q14, Q15}, [R8]! 169 170 VUZP.16 D10, D11 171 VMULL.U16 Q15, D4, D12 172 173 VMLAL.U16 Q15, D10, D13 174 VLD1.32 D0, [R6]! 175 VMULL.U16 Q14, D4, D13 176 177 VMLSL.U16 Q14, D10, D12 178 VLD1.32 D1[0], [R6]! 179 180 VSHR.U32 Q15, Q15, #16 181 VLD1.32 D2[0], [R7], R11 182 183 VMLAL.S16 Q15, D5, D12 184 VLD1.32 D2[1], [R7], R11 185 VMLAL.S16 Q15, D11, D13 186 187 SUB R9, R6, #140 188 VLD1.32 D3[0], [R7], R11 189 190 SUB R5, R7, #116 191 VLD1.32 D6, [R9]! 192 VSHR.S32 Q14, Q14, #16 193 194 VSHR.S32 Q0, Q0, #7 195 VLD1.32 D7[0], [R9]! 196 VMLAL.S16 Q14, D5, D13 197 198 VLD1.32 D8[0], [R5], R11 199 VMLSL.S16 Q14, D11, D12 200 201 VSHR.S32 Q1, Q1, #7 202 VLD4.16 {D12, D13, D14, D15}, [R4] 203 VADD.I32 Q2, Q1, Q0 204 205 VLD1.32 D8[1], [R5], R11 206 VSHR.S32 Q3, Q3, #7 207 208 VSWP Q15, Q14 209 210 VLD1.32 D9[0], [R5], R11 211 212 VSHR.S32 Q4, Q4, #7 213 VST2.32 {Q14, Q15}, [R8]! 214 ADD R4, #24 215 216 VUZP.16 D4, D5 217 VSUB.I32 Q5, Q3, Q4 218 219 VUZP.16 D10, D11 220 VMULL.U16 Q15, D4, D12 221 222 VMLAL.U16 Q15, D10, D13 223 VMULL.U16 Q14, D4, D13 224 225 VMLSL.U16 Q14, D10, D12 226 VLD1.16 D0[0], [R4]! 227 VSHR.U32 Q15, Q15, #16 228 229 VSHR.S32 Q14, Q14, #16 230 VLD1.32 D2[0], [R7], R11 231 VMLAL.S16 Q15, D5, D12 232 233 SUB R5, R7, #124 234 VMLAL.S16 Q15, D11, D13 235 VLD1.32 D4[0], [R5] 236 VMLAL.S16 Q14, D5, D13 237 238 VMLSL.S16 Q14, D11, D12 239 240 VSHR.S32 D2, D2, #7 241 VST1.32 D30[0], [R8]! 242 VSHR.S32 D4, D4, #7 243 VSUB.I32 D2, D2, D4 244 245 VMOV D4, D2 246 VST1.32 D28[0], [R8]! 247 MOV R6, R1 248 249 ADD R7, R1, #124 250 VST1.32 D30[1], [R8]! 251 ADD R10, R3, #16 252 253 SUB R7, R7, #28 254 VST1.32 D28[1], [R8]! 255 MOV R5, #-16 256 257 MOV R9, #-4 258 VST1.32 D31[0], [R8]! 259 MOV R11, #16 260 261 VST1.32 D29[0], [R8]! 262 MOV R12, #4 263 264 VUZP.16 D4, D5 265 MOV R8, #6 266 267 VLD1.16 D1[0], [R4], R8 268 VMULL.U16 Q15, D4, D0 269 270 271 VUZP.16 D2, D3 272 VMULL.U16 Q14, D4, D1 273 274 VMLAL.U16 Q15, D2, D1 275 VLD2.32 {D10, D11}, [R6] 276 VMLSL.U16 Q14, D2, D0 277 278 ADD R4, R3, #4 279 MOV R8, #-32 280 VSHR.U32 Q15, Q15, #16 281 VSHR.S32 Q14, Q14, #16 282 VMLAL.S16 Q15, D5, D0 283 VMLAL.S16 Q15, D3, D1 284 VMLAL.S16 Q14, D5, D1 285 VMLSL.S16 Q14, D3, D0 286 287 VADD.I32 D14, D11, D28 288 VLD2.32 {Q2, Q3}, [R7] 289 VNEG.S32 D14, D14 290 291 VREV64.32 Q2, Q2 292 VSUB.I32 D12, D10, D30 293 294 VREV64.32 Q3, Q3 295 VADD.I32 D10, D10, D30 296 297 VSWP D4, D5 298 VADD.I32 D10, D10, D14 299 300 VSWP D6, D7 301 VSUB.I32 D11, D11, D28 302 303 VADD.I32 D11, D11, D12 304 VLD2.16 {D8, D9}, [R10], R5 305 VSHR.S32 D10, D10, #1 306 307 VREV64.16 D8, D8 308 VSHR.S32 D11, D11, #1 309 310 VUZP.32 D10, D11 311 312 VST1.32 D10, [R6]! 313 VLD2.32 {Q0, Q1}, [R6] 314 315 VADD.I32 Q7, Q0, Q2 316 VLD2.16 {D10, D11}, [R4], R11 317 VSUB.I32 Q6, Q0, Q2 318 319 VUZP.16 D12, D13 320 VADD.I32 Q8, Q1, Q3 321 322 VUZP.16 D16, D17 323 VSUB.I32 Q9, Q1, Q3 324 325 326 VMULL.U16 Q15, D12, D8 327 VMLAL.U16 Q15, D16, D10 328 VMULL.U16 Q14, D12, D10 329 VMLSL.U16 Q14, D16, D8 330 VSHR.S32 Q7, Q7, #1 331 VSHR.U32 Q15, Q15, #16 332 VSHR.S32 Q9, Q9, #1 333 VSHR.S32 Q14, Q14, #16 334 VMLAL.S16 Q15, D13, D8 335 VMLAL.S16 Q15, D17, D10 336 VMLAL.S16 Q14, D13, D10 337 VMLSL.S16 Q14, D17, D8 338 339 VSUB.I32 Q10, Q7, Q15 340 VLD2.16 {D8, D9}, [R10] 341 VADD.I32 Q13, Q7, Q15 342 343 VREV64.32 Q13, Q13 344 VSWP D26, D27 345 346 VADD.I32 Q11, Q9, Q14 347 VREV64.16 D8, D8 348 349 VSUB.I32 Q12, Q14, Q9 350 351 VREV64.32 Q12, Q12 352 353 VST2.32 {Q10, Q11}, [R6]! 354 VSWP D24, D25 355 VSWP Q12, Q13 356 VST2.32 {Q12, Q13}, [R7], R8 357 358 VLD2.32 {Q0, Q1}, [R6] 359 VLD2.32 {Q2, Q3}, [R7] 360 361 VREV64.32 Q2, Q2 362 VREV64.32 Q3, Q3 363 364 VSWP D4, D5 365 VSWP D6, D7 366 367 VSUB.I32 Q6, Q0, Q2 368 VADD.I32 Q7, Q0, Q2 369 VLD2.16 {D10, D11}, [R4], R11 370 VADD.I32 Q8, Q1, Q3 371 372 VUZP.16 D12, D13 373 VSUB.I32 Q9, Q1, Q3 374 375 376 VUZP.16 D16, D17 377 VMULL.U16 Q15, D12, D8 378 379 VMLAL.U16 Q15, D16, D10 380 VMULL.U16 Q14, D12, D10 381 VMLSL.U16 Q14, D16, D8 382 ADD R7, R7, #8 383 VSHR.U32 Q15, Q15, #16 384 VSHR.S32 Q7, Q7, #1 385 VSHR.S32 Q14, Q14, #16 386 VMLAL.S16 Q15, D13, D8 387 VMLAL.S16 Q15, D17, D10 388 VMLAL.S16 Q14, D13, D10 389 VMLSL.S16 Q14, D17, D8 390 391 VSHR.S32 Q9, Q9, #1 392 VSUB.I32 Q10, Q7, Q15 393 VSUB.I32 Q12, Q14, Q9 394 395 VADD.I32 Q11, Q9, Q14 396 VST1.32 D20[0], [R6]! 397 VADD.I32 Q13, Q7, Q15 398 399 400 VST1.32 D22[0], [R6]! 401 VST1.32 D20[1], [R6]! 402 VST1.32 D22[1], [R6]! 403 VST1.32 D21[0], [R6]! 404 VST1.32 D23[0], [R6]! 405 406 VREV64.32 Q12, Q12 407 408 VREV64.32 Q13, Q13 409 VSWP D24, D25 410 VSWP D26, D27 411 412 413 VST1.32 D26[1], [R7]! 414 VST1.32 D24[1], [R7]! 415 VST1.32 D27[0], [R7]! 416 VST1.32 D25[0], [R7]! 417 VST1.32 D27[1], [R7]! 418 VST1.32 D25[1], [R7]! 419 420 SUB R7, R7, #32 421 VLD2.32 {D0, D1}, [R6] 422 VLD2.32 {D2, D3}, [R7] 423 424 VSUB.I32 D12, D0, D2 425 VLD1.16 D8, [R10], R9 426 VADD.I32 D14, D0, D2 427 428 VADD.I32 D16, D1, D3 429 VLD1.16 D10, [R4], R12 430 VSUB.I32 D18, D1, D3 431 432 VUZP.16 D12, D13 433 MOV R4, R0 434 435 VUZP.16 D16, D17 436 VMULL.U16 Q15, D12, D8 437 VMLAL.U16 Q15, D16, D10 438 VMULL.U16 Q14, D12, D10 439 VMLSL.U16 Q14, D16, D8 440 VSHR.S32 D18, D18, #1 441 VSHR.U32 Q15, Q15, #16 442 VSHR.S32 Q14, Q14, #16 443 444 VMLAL.S16 Q15, D13, D8 445 VMLAL.S16 Q15, D17, D10 446 447 MOV R10, R1 448 449 VMLAL.S16 Q14, D13, D10 450 VMLSL.S16 Q14, D17, D8 451 VNEG.S32 Q15, Q15 452 VSHR.S32 D14, D14, #1 453 454 VADD.I32 Q13, Q7, Q15 455 456 VADD.I32 Q11, Q9, Q14 457 458 LDR r0 , [sp , #104] 459 VST1.32 D26[0], [R6]! 460 MOV r2, #1 461 462 VST1.32 D22[0], [R6]! 463 MOV r3, #4 464 BL ixheaacd_radix4bfly 465 466 MOV r0, r4 467 MOV r1, r10 468 LDR r2 , [sp , #108] 469 MOV r3, #16 470 BL ixheaacd_postradixcompute4 471 472 MOV r0, r4 473 MOV r1, r10 474 LDMIA r0!, {r4, r5} 475 STR r4, [r1], #4 476 STR r5, [r1, #4] 477 ADD r2, r0, #64 478 ADD r3, r1, #116 479 MOV r6, #7 480 481BACK3: 482 483 LDMIA r0!, {r4, r5} 484 STR r5, [r1], #8 485 STR r4, [r1], #8 486 487 LDMIA r2!, {r4, r5} 488 STR r5, [r3], #-8 489 STR r4, [r3], #-8 490 491 SUBS r6, r6, #1 492 BNE BACK3 493 494 LDMIA r0!, {r4, r5} 495 STR r5, [r1], #8 496 STR r4, [r1], #8 497 498 VPOP {D8 - D15} 499 LDMFD sp!, {r4-r12, r15} 500 501 502 503 504 505 506 507