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_post_twid_overlap_add_armv7 25 26ixheaacd_post_twid_overlap_add_armv7: 27 28 STMFD sp!, {R4-R12} 29 VPUSH {d8 - d15} 30 31 LDR R4, [sp, #100] 32 LDR R5, [sp, #104] 33 LDR R6, [sp, #108] 34 35 LSL R9, R3, #2 36 ASR R9, R9, #1 37 ADD R6, R6, R9 38 SUB R6, R6, #4 39 40 MOVW R8, #7500 41 ADD R2, R2, R8 42 43 44 45 VMOV.S16 D18, #50 46 RSB R9, R5, #15 47 VMOV.S32 Q10, #0x00008000 48 VDUP.32 Q8, R5 49 SUB R5, R5, #16 50 STR R5, [sp, #116] 51 MOV R8, #1 52 LSL R8, R8, R9 53 STR R8, [sp, #120] 54 55 56ARM_PROLOGUE: 57 58 59 LDR R8, [R1], #4 60 LDR R9, [R1], #4 61 62 LDR R10, [R2], #4 63 64 SMULWT R11, R8, R10 65 SMULWB R12, R9, R10 66 SMULWB R5, R8, R10 67 SMLAWT R7, R9, R10, R5 68 SUB R8, R12, R11 69 MVN R5, R7 70 ADD R5, R5, #1 71 72 MOV R9, #50 73 MOV R12, #-50 74 SMULWB R10, R5, R9 75 SMULWB R11, R8, R12 76 77 ADD R8, R8, R10 78 ADD R5, R5, R11 79 80 LDR R11, [sp, #104] 81 LDR R10, [R6], #-32 82 83 84 SMULWB R7, R8, R10 85 MVN R8, R8 86 ADD R8, R8, #1 87 SMULWT R12, R8, R10 88 89 CMP R11, #0 90 BLT NEXT 91 92 RSBS R9, R11, #16 93 94 95 96 97 LDR R8, [sp, #120] 98 QADD R5, R5, R8 99 ASR R5, R5, R9 100 101 RSBS R9, R11, #31 102 MOVS R8, R7, ASR R9 103 CMNLT R8, #1 104 MOVLT R7, #0x80000000 105 MVNGT R7, #0x80000000 106 MOVEQ R7, R7, LSL R11 107 108 RSBS R9, R11, #31 109 MOVS R8, R12, ASR R9 110 CMNLT R8, #1 111 MOVLT R12, #0x80000000 112 MVNGT R12, #0x80000000 113 MOVEQ R12, R12, LSL R11 114 115 B NEXT1 116NEXT: 117 MVN R11, R11 118 ADD R11, R11, #1 119 ASR R5, R5, R11 120 MOV R8, #0x8000 121 QADD R5, R5, R8 122 ASR R5, R5, #16 123 ASR R7, R7, R11 124 ASR R12, R12, R11 125 126NEXT1: 127 LDR R9, [R4] 128 MOV R8, #0x8000 129 130 STR R5, [R4], #4 131 132 133 UXTH R5, R10, ROR #16 134 UXTH R10, R10 135 136 137 VDUP.32 D0, R9 138 VDUP.32 D2, R10 139 VDUP.32 D3, R5 140 VZIP.32 D2, D3 141 VMULL.S32 Q0, D2, D0 142 VQMOVN.S64 D8, Q0 143 144 145 VDUP.32 D0, R12 146 VDUP.32 D1, R7 147 148 VZIP.32 D0, D1 149 VQSUB.S32 D8, D0, D8 150 151 152 VQSHL.S32 D8, D8, #2 153 VDUP.32 D0, R8 154 VQADD.S32 D8, D8, D0 155 VSHR.S32 D8, D8, #16 156 157 158 159 LDR R7, [sp, #112] 160 LSL R10, R7, #1 161 162 ASR R5, R3, #1 163 SMULBB R5, R10, R5 164 ADD R5, R5, R0 165 SUB R0, R5, R10 166 MVN R9, R10 167 ADD R9, R9, #1 168 169 VST1.16 D8[2], [R0], R9 170 VST1.16 D8[0], [R5], R10 171 172 173 MOV R8, R1 174 LSL R12, R3, #2 175 176 ADD R1, R1, R12 177 178 SUB R1, R1, #40 179 180 MOV R12, #-32 181 182 183 184PROLOGUE_NEON: 185 186 ASR R3, R3, #2 187 SUB R3, R3, #4 188 ASR R3, R3, #2 189 SUB R3, R3, #2 190 191 VLD2.32 {Q0, Q1}, [R1], R12 192 VUZP.16 D0, D1 193 VUZP.16 D2, D3 194 195 VREV64.16 Q0, Q0 196 VREV64.16 Q1, Q1 197 VLD2.16 {D8, D9}, [R2]! 198 199 VLD2.32 {Q2, Q3}, [R8]! 200 VMULL.U16 Q15, D0, D9 201 202 VUZP.16 D4, D5 203 VMULL.U16 Q14, D2, D8 204 205 VUZP.16 D6, D7 206 VMULL.U16 Q13, D0, D8 207 208 209 VMULL.U16 Q12, D2, D9 210 211 VLD2.32 {Q5, Q6}, [R6], R12 212 VSHR.U32 Q15, Q15, #16 213 214 VUZP.16 D10, D11 215 VSHR.U32 Q14, Q14, #16 216 217 VUZP.16 D12, D13 218 VMLAL.S16 Q15, D1, D9 219 220 VREV64.16 Q5, Q5 221 VMLAL.S16 Q14, D3, D8 222 223 VREV64.16 Q6, Q6 224 VSHR.U32 Q13, Q13, #16 225 226 227 VSHR.U32 Q12, Q12, #16 228 229 VMLAL.S16 Q13, D1, D8 230 VMLAL.S16 Q12, D3, D9 231 232 233 234 VADD.I32 Q15, Q15, Q14 235 VNEG.S32 Q15, Q15 236 237 VMULL.U16 Q11, D4, D8 238 239 VSUB.I32 Q14, Q12, Q13 240 241 242 VMOV Q13, Q15 243 VMOV Q12, Q14 244 245 VUZP.16 D24, D25 246 247 248 VUZP.16 D26, D27 249 VMULL.U16 Q1, D24, D18 250 251 VMULL.U16 Q0, D26, D18 252 253 VSHR.U32 Q11, Q11, #16 254 VMLAL.S16 Q11, D5, D8 255 256 VSHR.U32 Q1, Q1, #16 257 VSHR.U32 Q0, Q0, #16 258 VMLAL.S16 Q1, D25, D18 259 VMLAL.S16 Q0, D27, D18 260 261 VMULL.U16 Q12, D4, D9 262 VMULL.U16 Q13, D6, D8 263 264 VNEG.S32 Q1, Q1 265 VADD.I32 Q14, Q14, Q0 266 VADD.I32 Q15, Q15, Q1 267 268 VMULL.U16 Q0, D6, D9 269 VSHR.S32 Q12, Q12, #16 270 VMLAL.S16 Q12, D5, D9 271 VSHR.S32 Q13, Q13, #16 272 VSHR.S32 Q0, Q0, #16 273 VMLAL.S16 Q13, D7, D8 274 VMLAL.S16 Q0, D7, D9 275 276 277 278 279 VADD.I32 Q11, Q11, Q0 280 VNEG.S32 Q11, Q11 281 VSUB.I32 Q12, Q13, Q12 282 283 284 285 LDR R11, [sp, #120] 286 VDUP.S32 Q7, R11 287 VQADD.S32 Q14, Q14, Q7 288 LDR R11, [sp, #116] 289 VDUP.S32 Q0, R11 290 VQSHL.S32 Q14, Q14, Q0 291 292 VMOV Q0, Q11 293 VMOV Q7, Q12 294 295 296 VUZP.16 D24, D25 297 298 VUZP.16 D22, D23 299 VMULL.U16 Q4, D24, D18 300 VMULL.U16 Q13, D22, D18 301 302 VNEG.S32 Q1, Q15 303 VUZP.16 D30, D31 304 305 VUZP.16 D2, D3 306 VMULL.U16 Q2, D30, D12 307 308 VMULL.U16 Q3, D2, D13 309 310 VSHR.U32 Q4, Q4, #16 311 VSHR.U32 Q13, Q13, #16 312 313 VMLAL.S16 Q4, D25, D18 314 VMLAL.S16 Q13, D23, D18 315 316 VSHR.U32 Q2, Q2, #16 317 VSHR.U32 Q3, Q3, #16 318 319 VMLAL.S16 Q2, D31, D12 320 VMLAL.S16 Q3, D3, D13 321 322 VNEG.S32 Q4, Q4 323 VADD.I32 Q7, Q7, Q13 324 VADD.I32 Q0, Q0, Q4 325 326 LDR R11, [sp, #120] 327 VDUP.S32 Q4, R11 328 VQADD.S32 Q0, Q0, Q4 329 LDR R11, [sp, #116] 330 VDUP.S32 Q13, R11 331 VQSHL.S32 Q0, Q0, Q13 332 333 VMOV Q13, Q14 334 335 VLD2.32 {Q14, Q15}, [R4] 336 337 VZIP.32 Q13, Q0 338 VST1.32 {Q13}, [R4]! 339 VST1.32 {Q0}, [R4]! 340 341 VMOV.S32 D1, #0 342 VADDL.S16 Q0, D13, D1 343 344 345 VMULL.S32 Q13, D28, D0 346 VQMOVN.S64 D8, Q13 347 VMULL.S32 Q13, D29, D1 348 VQMOVN.S64 D9, Q13 349 350 VMOV.S32 D1, #0 351 VADDL.S16 Q0, D12, D1 352 353 354 VMULL.S32 Q12, D28, D0 355 VQMOVN.S64 D26, Q12 356 VMULL.S32 Q12, D29, D1 357 VQMOVN.S64 D27, Q12 358 359 VQSHL.S32 Q2, Q2, Q8 360 VQSHL.S32 Q3, Q3, Q8 361 362 VQSUB.S32 Q2, Q2, Q4 363 VQSUB.S32 Q3, Q3, Q13 364 365 VNEG.S32 Q13, Q7 366 VUZP.16 D14, D15 367 VUZP.16 D26, D27 368 369 VMOV.S32 D1, #0 370 VADDL.S16 Q0, D10, D1 371 VMULL.S32 Q11, D30, D0 372 VQMOVN.S64 D24, Q11 373 VMULL.S32 Q11, D31, D1 374 VQMOVN.S64 D25, Q11 375 VMOV.S32 D1, #0 376 VADDL.S16 Q0, D11, D1 377 VMULL.S32 Q4, D30, D0 378 VQMOVN.S64 D22, Q4 379 VMULL.S32 Q4, D31, D1 380 VQMOVN.S64 D23, Q4 381 VMULL.U16 Q4, D26, D11 382 VMULL.U16 Q15, D14, D10 383 384 VLD2.32 {Q0, Q1}, [R1], R12 385 386 VUZP.16 D0, D1 387 388 VUZP.16 D2, D3 389 VSHR.U32 Q4, Q4, #16 390 391 VREV64.16 Q0, Q0 392 VSHR.U32 Q15, Q15, #16 393 394 VREV64.16 Q1, Q1 395 VMLAL.S16 Q4, D27, D11 396 397 VMLAL.S16 Q15, D15, D10 398 399 VLD2.32 {Q5, Q6}, [R6], R12 400 VQSHL.S32 Q2, Q2, #2 401 402 VUZP.16 D10, D11 403 VQSHL.S32 Q3, Q3, #2 404 405 VUZP.16 D12, D13 406 VQADD.S32 Q7, Q2, Q10 407 408 VREV64.16 Q5, Q5 409 VQADD.S32 Q3, Q3, Q10 410 411 VREV64.16 Q6, Q6 412 VSHR.S32 Q7, Q7, #16 413 414 VUZP.16 D14, D15 415 VSHR.S32 Q3, Q3, #16 416 417 VUZP.16 D6, D7 418 419 VMOV D15, D6 420 VQSHL.S32 Q4, Q4, Q8 421 422 VLD2.32 {Q2, Q3}, [R8]! 423 VQSHL.S32 Q15, Q15, Q8 424 425 VUZP.16 D4, D5 426 VQSUB.S32 Q4, Q4, Q12 427 428 VUZP.16 D6, D7 429 VQSUB.S32 Q11, Q15, Q11 430 431 VQSHL.S32 Q15, Q4, #2 432 433 VLD2.16 {D8, D9}, [R2]! 434 VQSHL.S32 Q11, Q11, #2 435 436 VQADD.S32 Q15, Q15, Q10 437 VQADD.S32 Q11, Q11, Q10 438 439 VSHR.S32 Q15, Q15, #16 440 441 VUZP.16 D30, D31 442 VSHR.S32 Q11, Q11, #16 443 444 445 VUZP.16 D22, D23 446 VMOV D23, D30 447 448CORE_LOOP_PTO: 449 VST1.16 D14[0], [R0, : 16], R9 450 VMULL.U16 Q15, D0, D9 451 452 VST1.16 D22[0], [R0, : 16], R9 453 VMULL.U16 Q14, D2, D8 454 455 VST1.16 D14[1], [R0, : 16], R9 456 VMULL.U16 Q13, D0, D8 457 458 VST1.16 D22[1], [R0, : 16], R9 459 VMULL.U16 Q12, D2, D9 460 461 VST1.16 D14[2], [R0, : 16], R9 462 VSHR.U32 Q15, Q15, #16 463 464 VST1.16 D22[2], [R0, : 16], R9 465 VSHR.U32 Q14, Q14, #16 466 467 VST1.16 D14[3], [R0, : 16], R9 468 VMLAL.S16 Q15, D1, D9 469 470 VST1.16 D22[3], [R0, : 16], R9 471 VMLAL.S16 Q14, D3, D8 472 473 VST1.16 D15[0], [R5, : 16], R10 474 VSHR.U32 Q13, Q13, #16 475 476 VST1.16 D23[0], [R5, : 16], R10 477 VSHR.U32 Q12, Q12, #16 478 479 VST1.16 D15[1], [R5, : 16], R10 480 VMLAL.S16 Q13, D1, D8 481 482 VST1.16 D23[1], [R5, : 16], R10 483 VMLAL.S16 Q12, D3, D9 484 485 VST1.16 D15[2], [R5, : 16], R10 486 VADD.I32 Q15, Q15, Q14 487 488 VST1.16 D23[2], [R5, : 16], R10 489 VNEG.S32 Q15, Q15 490 491 VST1.16 D15[3], [R5, : 16], R10 492 493 VST1.16 D23[3], [R5, : 16], R10 494 VSUB.I32 Q14, Q12, Q13 495 496 497 VMOV Q13, Q15 498 VMULL.U16 Q11, D4, D8 499 500 VMOV Q12, Q14 501 502 VUZP.16 D24, D25 503 504 505 VUZP.16 D26, D27 506 VMULL.U16 Q1, D24, D18 507 VMULL.U16 Q0, D26, D18 508 509 VSHR.U32 Q11, Q11, #16 510 VMLAL.S16 Q11, D5, D8 511 512 VSHR.U32 Q1, Q1, #16 513 VSHR.U32 Q0, Q0, #16 514 VMLAL.S16 Q1, D25, D18 515 VMLAL.S16 Q0, D27, D18 516 517 VMULL.U16 Q12, D4, D9 518 VMULL.U16 Q13, D6, D8 519 520 VNEG.S32 Q1, Q1 521 VADD.I32 Q14, Q14, Q0 522 VADD.I32 Q15, Q15, Q1 523 524 VMULL.U16 Q0, D6, D9 525 VSHR.S32 Q12, Q12, #16 526 VMLAL.S16 Q12, D5, D9 527 VSHR.S32 Q13, Q13, #16 528 VSHR.S32 Q0, Q0, #16 529 VMLAL.S16 Q13, D7, D8 530 VMLAL.S16 Q0, D7, D9 531 532 533 534 VADD.I32 Q11, Q11, Q0 535 536 VNEG.S32 Q11, Q11 537 VSUB.I32 Q12, Q13, Q12 538 539 540 LDR R11, [sp, #120] 541 VDUP.S32 Q7, R11 542 VQADD.S32 Q14, Q14, Q7 543 LDR R11, [sp, #116] 544 VDUP.S32 Q0, R11 545 VQSHL.S32 Q14, Q14, Q0 546 547 548 VMOV Q0, Q11 549 VMOV Q7, Q12 550 551 VUZP.16 D24, D25 552 553 VUZP.16 D22, D23 554 VMULL.U16 Q4, D24, D18 555 VMULL.U16 Q13, D22, D18 556 557 VNEG.S32 Q1, Q15 558 559 VUZP.16 D30, D31 560 561 VUZP.16 D2, D3 562 VMULL.U16 Q2, D30, D12 563 VMULL.U16 Q3, D2, D13 564 565 VSHR.U32 Q4, Q4, #16 566 VSHR.U32 Q13, Q13, #16 567 568 VMLAL.S16 Q4, D25, D18 569 VMLAL.S16 Q13, D23, D18 570 571 VSHR.U32 Q2, Q2, #16 572 VSHR.U32 Q3, Q3, #16 573 574 VMLAL.S16 Q2, D31, D12 575 VMLAL.S16 Q3, D3, D13 576 577 VNEG.S32 Q4, Q4 578 VADD.I32 Q7, Q7, Q13 579 VADD.I32 Q0, Q0, Q4 580 581 582 583 LDR R11, [sp, #120] 584 VDUP.S32 Q4, R11 585 VQADD.S32 Q0, Q0, Q4 586 LDR R11, [sp, #116] 587 VDUP.S32 Q13, R11 588 VQSHL.S32 Q0, Q0, Q13 589 VMOV Q13, Q14 590 591 VLD2.32 {Q14, Q15}, [R4] 592 593 VZIP.32 Q13, Q0 594 VST1.32 {Q13}, [R4]! 595 VST1.32 {Q0}, [R4]! 596 597 VMOV.S32 D1, #0 598 VADDL.S16 Q0, D13, D1 599 600 601 VMULL.S32 Q13, D28, D0 602 VQMOVN.S64 D8, Q13 603 VMULL.S32 Q13, D29, D1 604 VQMOVN.S64 D9, Q13 605 606 VMOV.S32 D1, #0 607 VADDL.S16 Q0, D12, D1 608 609 610 VMULL.S32 Q12, D28, D0 611 VQMOVN.S64 D26, Q12 612 VMULL.S32 Q12, D29, D1 613 VQMOVN.S64 D27, Q12 614 615 VQSHL.S32 Q2, Q2, Q8 616 VQSHL.S32 Q3, Q3, Q8 617 618 619 620 VQSUB.S32 Q2, Q2, Q4 621 VQSUB.S32 Q3, Q3, Q13 622 623 VNEG.S32 Q13, Q7 624 VUZP.16 D26, D27 625 626 VMOV.S32 D1, #0 627 VADDL.S16 Q0, D10, D1 628 VMULL.S32 Q11, D30, D0 629 VQMOVN.S64 D24, Q11 630 VMULL.S32 Q11, D31, D1 631 VQMOVN.S64 D25, Q11 632 633 VMOV.S32 D1, #0 634 VADDL.S16 Q0, D11, D1 635 636 VMULL.S32 Q4, D30, D0 637 VQMOVN.S64 D22, Q4 638 VMULL.S32 Q4, D31, D1 639 VQMOVN.S64 D23, Q4 640 641 642 VUZP.16 D14, D15 643 VMULL.U16 Q4, D26, D11 644 VMULL.U16 Q15, D14, D10 645 646 647 VLD2.32 {Q0, Q1}, [R1], R12 648 649 VUZP.16 D0, D1 650 651 VUZP.16 D2, D3 652 VSHR.U32 Q4, Q4, #16 653 654 VREV64.16 Q0, Q0 655 VSHR.U32 Q15, Q15, #16 656 657 VREV64.16 Q1, Q1 658 VMLAL.S16 Q4, D27, D11 659 660 VMLAL.S16 Q15, D15, D10 661 662 VLD2.32 {Q5, Q6}, [R6], R12 663 VQSHL.S32 Q2, Q2, #2 664 665 VUZP.16 D10, D11 666 VQSHL.S32 Q3, Q3, #2 667 668 VUZP.16 D12, D13 669 VQADD.S32 Q7, Q2, Q10 670 671 VREV64.16 Q5, Q5 672 VQADD.S32 Q3, Q3, Q10 673 674 VREV64.16 Q6, Q6 675 VSHR.S32 Q7, Q7, #16 676 677 VUZP.16 D14, D15 678 VSHR.S32 Q3, Q3, #16 679 680 VUZP.16 D6, D7 681 682 VMOV D15, D6 683 VQSHL.S32 Q4, Q4, Q8 684 685 VLD2.32 {Q2, Q3}, [R8]! 686 VQSHL.S32 Q15, Q15, Q8 687 688 VUZP.16 D4, D5 689 VQSUB.S32 Q4, Q4, Q12 690 691 VUZP.16 D6, D7 692 VQSUB.S32 Q11, Q15, Q11 693 694 VQSHL.S32 Q15, Q4, #2 695 696 VLD2.16 {D8, D9}, [R2]! 697 VQSHL.S32 Q11, Q11, #2 698 699 VQADD.S32 Q15, Q15, Q10 700 VQADD.S32 Q11, Q11, Q10 701 702 VSHR.S32 Q15, Q15, #16 703 704 VUZP.16 D30, D31 705 VSHR.S32 Q11, Q11, #16 706 707 708 VUZP.16 D22, D23 709 VMOV D23, D30 710 711 SUBS R3, R3, #1 712 BNE CORE_LOOP_PTO 713 714 715 716 717 718EPILOGUE: 719 720 VST1.16 D14[0], [R0], R9 721 VMULL.U16 Q15, D0, D9 722 723 VST1.16 D22[0], [R0], R9 724 VMULL.U16 Q14, D2, D8 725 726 VST1.16 D14[1], [R0], R9 727 VMULL.U16 Q13, D0, D8 728 729 VST1.16 D22[1], [R0], R9 730 VMULL.U16 Q12, D2, D9 731 732 VST1.16 D14[2], [R0], R9 733 VSHR.U32 Q15, Q15, #16 734 735 VST1.16 D22[2], [R0], R9 736 VSHR.U32 Q14, Q14, #16 737 738 VST1.16 D14[3], [R0], R9 739 VMLAL.S16 Q15, D1, D9 740 741 VST1.16 D22[3], [R0], R9 742 VMLAL.S16 Q14, D3, D8 743 744 VST1.16 D15[0], [R5], R10 745 VSHR.U32 Q13, Q13, #16 746 747 VST1.16 D23[0], [R5], R10 748 VSHR.U32 Q12, Q12, #16 749 750 VST1.16 D15[1], [R5], R10 751 VMLAL.S16 Q13, D1, D8 752 753 VST1.16 D23[1], [R5], R10 754 VMLAL.S16 Q12, D3, D9 755 756 VST1.16 D15[2], [R5], R10 757 VADD.I32 Q15, Q15, Q14 758 759 VST1.16 D23[2], [R5], R10 760 VNEG.S32 Q15, Q15 761 762 VST1.16 D15[3], [R5], R10 763 764 765 VST1.16 D23[3], [R5], R10 766 VSUB.I32 Q14, Q12, Q13 767 768 769 VMULL.U16 Q11, D4, D8 770 VMOV Q13, Q15 771 VMOV Q12, Q14 772 773 VMOV Q13, Q15 774 VMOV Q12, Q14 775 776 VUZP.16 D26, D27 777 VUZP.16 D24, D25 778 779 780 VMULL.U16 Q1, D24, D18 781 VMULL.U16 Q0, D26, D18 782 783 VSHR.U32 Q11, Q11, #16 784 VMLAL.S16 Q11, D5, D8 785 786 VSHR.U32 Q1, Q1, #16 787 VSHR.U32 Q0, Q0, #16 788 VMLAL.S16 Q1, D25, D18 789 VMLAL.S16 Q0, D27, D18 790 791 VMULL.U16 Q12, D4, D9 792 VMULL.U16 Q13, D6, D8 793 794 VNEG.S32 Q1, Q1 795 VADD.I32 Q14, Q14, Q0 796 VADD.I32 Q15, Q15, Q1 797 798 VMULL.U16 Q0, D6, D9 799 VSHR.S32 Q12, Q12, #16 800 VMLAL.S16 Q12, D5, D9 801 VSHR.S32 Q13, Q13, #16 802 VSHR.S32 Q0, Q0, #16 803 VMLAL.S16 Q13, D7, D8 804 VMLAL.S16 Q0, D7, D9 805 806 807 808 809 810 VADD.I32 Q11, Q11, Q0 811 VNEG.S32 Q11, Q11 812 VSUB.I32 Q12, Q13, Q12 813 814 815 816 817 LDR R11, [sp, #120] 818 VDUP.S32 Q7, R11 819 VQADD.S32 Q14, Q14, Q7 820 LDR R11, [sp, #116] 821 VDUP.S32 Q0, R11 822 VQSHL.S32 Q14, Q14, Q0 823 824 825 VMOV Q0, Q11 826 VMOV Q7, Q12 827 828 829 VUZP.16 D22, D23 830 VUZP.16 D24, D25 831 832 VMULL.U16 Q4, D24, D18 833 VMULL.U16 Q13, D22, D18 834 835 VNEG.S32 Q1, Q15 836 VUZP.16 D30, D31 837 VUZP.16 D2, D3 838 839 VMULL.U16 Q2, D30, D12 840 VMULL.U16 Q3, D2, D13 841 842 VSHR.U32 Q4, Q4, #16 843 VSHR.U32 Q13, Q13, #16 844 845 VMLAL.S16 Q4, D25, D18 846 VMLAL.S16 Q13, D23, D18 847 848 VSHR.U32 Q2, Q2, #16 849 VSHR.U32 Q3, Q3, #16 850 851 VMLAL.S16 Q2, D31, D12 852 VMLAL.S16 Q3, D3, D13 853 854 VNEG.S32 Q4, Q4 855 VADD.I32 Q7, Q7, Q13 856 VADD.I32 Q0, Q0, Q4 857 858 LDR R11, [sp, #120] 859 VDUP.S32 Q4, R11 860 VQADD.S32 Q0, Q0, Q4 861 LDR R11, [sp, #116] 862 VDUP.S32 Q13, R11 863 VQSHL.S32 Q0, Q0, Q13 864 865 866 VMOV Q13, Q14 867 868 VLD2.32 {Q14, Q15}, [R4] 869 VZIP.32 Q13, Q0 870 VST1.32 {Q13}, [R4]! 871 VST1.32 {Q0}, [R4]! 872 873 VMOV.S32 D1, #0 874 VADDL.S16 Q0, D13, D1 875 876 VMULL.S32 Q13, D28, D0 877 VQMOVN.S64 D8, Q13 878 VMULL.S32 Q13, D29, D1 879 VQMOVN.S64 D9, Q13 880 881 VMOV.S32 D1, #0 882 VADDL.S16 Q0, D12, D1 883 884 VMULL.S32 Q12, D28, D0 885 VQMOVN.S64 D26, Q12 886 VMULL.S32 Q12, D29, D1 887 VQMOVN.S64 D27, Q12 888 889 VQSHL.S32 Q2, Q2, Q8 890 VQSHL.S32 Q3, Q3, Q8 891 892 VQSUB.S32 Q2, Q2, Q4 893 VQSUB.S32 Q3, Q3, Q13 894 895 VNEG.S32 Q13, Q7 896 VUZP.16 D14, D15 897 VUZP.16 D26, D27 898 899 VMOV.S32 D1, #0 900 VADDL.S16 Q0, D10, D1 901 902 903 VMULL.S32 Q11, D30, D0 904 VQMOVN.S64 D24, Q11 905 VMULL.S32 Q11, D31, D1 906 VQMOVN.S64 D25, Q11 907 908 VMOV.S32 D1, #0 909 VADDL.S16 Q0, D11, D1 910 911 VMULL.S32 Q4, D30, D0 912 VQMOVN.S64 D22, Q4 913 VMULL.S32 Q4, D31, D1 914 VQMOVN.S64 D23, Q4 915 916 917 VMULL.U16 Q4, D26, D11 918 VMULL.U16 Q15, D14, D10 919 920 VSHR.U32 Q4, Q4, #16 921 922 VSHR.U32 Q15, Q15, #16 923 924 VMLAL.S16 Q4, D27, D11 925 926 VMLAL.S16 Q15, D15, D10 927 928 VQSHL.S32 Q2, Q2, #2 929 930 VQSHL.S32 Q3, Q3, #2 931 932 VQADD.S32 Q7, Q2, Q10 933 934 VQADD.S32 Q3, Q3, Q10 935 936 VSHR.S32 Q7, Q7, #16 937 938 VUZP.16 D14, D15 939 VSHR.S32 Q3, Q3, #16 940 941 VUZP.16 D6, D7 942 943 VMOV D15, D6 944 VQSHL.S32 Q4, Q4, Q8 945 946 VQSHL.S32 Q15, Q15, Q8 947 948 VQSUB.S32 Q4, Q4, Q12 949 950 VQSUB.S32 Q11, Q15, Q11 951 952 VQSHL.S32 Q15, Q4, #2 953 954 VQSHL.S32 Q11, Q11, #2 955 956 VQADD.S32 Q15, Q15, Q10 957 VQADD.S32 Q11, Q11, Q10 958 959 VSHR.S32 Q15, Q15, #16 960 961 VUZP.16 D30, D31 962 VSHR.S32 Q11, Q11, #16 963 964 VUZP.16 D22, D23 965 VMOV D23, D30 966 967 968 969 970 VST1.16 D14[0], [R0], R9 971 VST1.16 D22[0], [R0], R9 972 VST1.16 D14[1], [R0], R9 973 VST1.16 D22[1], [R0], R9 974 VST1.16 D14[2], [R0], R9 975 VST1.16 D22[2], [R0], R9 976 VST1.16 D14[3], [R0], R9 977 VST1.16 D22[3], [R0], R9 978 VST1.16 D15[0], [R5], R10 979 VST1.16 D23[0], [R5], R10 980 VST1.16 D15[1], [R5], R10 981 VST1.16 D23[1], [R5], R10 982 VST1.16 D15[2], [R5], R10 983 VST1.16 D23[2], [R5], R10 984 VST1.16 D15[3], [R5], R10 985 VST1.16 D23[3], [R5], R10 986 987ARM_EPILOGUE: 988 989ARM_LOOP: 990 991 VLD2.32 {Q0, Q1}, [R1] 992 993 VUZP.16 D0, D1 994 VUZP.16 D2, D3 995 996 VREV64.16 Q0, Q0 997 VREV64.16 Q1, Q1 998 999 VLD2.16 {D8, D9}, [R2]! 1000 1001 VLD2.32 {D4, D6}, [R8]! 1002 VMOV.S32 D5, #0x00000000 1003 VMOV.S32 D7, #0x00000000 1004 1005 VLD1.32 D5[0], [R8]! 1006 VLD1.32 D7[0], [R8] 1007 1008 MOV R12, #16 1009 1010 VUZP.16 D4, D5 1011 VUZP.16 D6, D7 1012 1013 ADD R6, R6, #16 1014 1015 MOV R12, #-4 1016 VLD2.32 {D11, D13}, [R6], R12 1017 1018 1019 VMOV.S32 D10, #0x00000000 1020 1021 VLD1.32 D12[1], [R6], R12 1022 VLD1.32 D10[1], [R6], R12 1023 VLD1.32 D12[0], [R6], R12 1024 1025 VUZP.16 D10, D11 1026 VUZP.16 D12, D13 1027 1028 VREV64.16 Q5, Q5 1029 VREV64.16 Q6, Q6 1030 1031 VMULL.U16 Q15, D0, D9 1032 VMULL.U16 Q14, D2, D8 1033 VMULL.U16 Q13, D0, D8 1034 VMULL.U16 Q12, D2, D9 1035 1036 VSHR.U32 Q15, Q15, #16 1037 VSHR.U32 Q14, Q14, #16 1038 1039 VMLAL.S16 Q15, D1, D9 1040 VMLAL.S16 Q14, D3, D8 1041 1042 VSHR.U32 Q13, Q13, #16 1043 VSHR.U32 Q12, Q12, #16 1044 1045 VMLAL.S16 Q13, D1, D8 1046 VMLAL.S16 Q12, D3, D9 1047 1048 VADD.I32 Q15, Q15, Q14 1049 VNEG.S32 Q15, Q15 1050 1051 VMULL.U16 Q11, D4, D8 1052 1053 VSUB.I32 Q14, Q12, Q13 1054 1055 1056 VMOV Q13, Q15 1057 VMOV Q12, Q14 1058 1059 VUZP.16 D26, D27 1060 VUZP.16 D24, D25 1061 1062 1063 VMULL.U16 Q1, D24, D18 1064 VMULL.U16 Q0, D26, D18 1065 1066 VSHR.U32 Q11, Q11, #16 1067 VMLAL.S16 Q11, D5, D8 1068 1069 VSHR.U32 Q1, Q1, #16 1070 VSHR.U32 Q0, Q0, #16 1071 VMLAL.S16 Q1, D25, D18 1072 VMLAL.S16 Q0, D27, D18 1073 1074 VMULL.U16 Q12, D4, D9 1075 VMULL.U16 Q13, D6, D8 1076 1077 VNEG.S32 Q1, Q1 1078 VADD.I32 Q14, Q14, Q0 1079 VADD.I32 Q15, Q15, Q1 1080 1081 VMULL.U16 Q0, D6, D9 1082 VSHR.S32 Q12, Q12, #16 1083 VMLAL.S16 Q12, D5, D9 1084 VSHR.S32 Q13, Q13, #16 1085 VSHR.S32 Q0, Q0, #16 1086 VMLAL.S16 Q13, D7, D8 1087 VMLAL.S16 Q0, D7, D9 1088 1089 VADD.I32 Q11, Q11, Q0 1090 VNEG.S32 Q11, Q11 1091 VSUB.I32 Q12, Q13, Q12 1092 1093 LDR R11, [sp, #120] 1094 VDUP.S32 Q7, R11 1095 VQADD.S32 Q14, Q14, Q7 1096 LDR R11, [sp, #116] 1097 VDUP.S32 Q0, R11 1098 VQSHL.S32 Q14, Q14, Q0 1099 1100 VMOV Q0, Q11 1101 VMOV Q7, Q12 1102 1103 VUZP.16 D22, D23 1104 VUZP.16 D24, D25 1105 1106 VMULL.U16 Q4, D24, D18 1107 VMULL.U16 Q13, D22, D18 1108 1109 VNEG.S32 Q1, Q15 1110 VUZP.16 D30, D31 1111 VUZP.16 D2, D3 1112 1113 VMULL.U16 Q2, D30, D12 1114 VMULL.U16 Q3, D2, D13 1115 1116 VSHR.U32 Q4, Q4, #16 1117 VSHR.U32 Q13, Q13, #16 1118 1119 VMLAL.S16 Q4, D25, D18 1120 VMLAL.S16 Q13, D23, D18 1121 1122 VSHR.U32 Q2, Q2, #16 1123 VSHR.U32 Q3, Q3, #16 1124 1125 VMLAL.S16 Q2, D31, D12 1126 VMLAL.S16 Q3, D3, D13 1127 1128 VNEG.S32 Q4, Q4 1129 VADD.I32 Q7, Q7, Q13 1130 VADD.I32 Q0, Q0, Q4 1131 1132 LDR R11, [sp, #120] 1133 VDUP.S32 Q4, R11 1134 VQADD.S32 Q0, Q0, Q4 1135 LDR R11, [sp, #116] 1136 VDUP.S32 Q13, R11 1137 VQSHL.S32 Q0, Q0, Q13 1138 1139 VMOV Q13, Q14 1140 1141 MOV R6, R4 1142 1143 VLD1.32 {D28, D29}, [R4]! 1144 VMOV.S32 D31, #0x00000000 1145 VLD1.32 D30[0], [R4]! 1146 VLD1.32 D30[1], [R4]! 1147 VLD1.32 D31[0], [R4]! 1148 VUZP.32 Q14, Q15 1149 1150 1151 VST1.32 D26[0], [R6]! 1152 VST1.32 D0[0], [R6]! 1153 VST1.32 D26[1], [R6]! 1154 VST1.32 D0[1], [R6]! 1155 VST1.32 D27[0], [R6]! 1156 VST1.32 D1[0], [R6]! 1157 VST1.32 D27[1], [R6]! 1158 1159 VMOV.S32 D1, #0 1160 VADDL.S16 Q0, D13, D1 1161 1162 VMULL.S32 Q13, D28, D0 1163 VQMOVN.S64 D8, Q13 1164 VMULL.S32 Q13, D29, D1 1165 VQMOVN.S64 D9, Q13 1166 1167 VMOV.S32 D1, #0 1168 VADDL.S16 Q0, D12, D1 1169 1170 VMULL.S32 Q12, D28, D0 1171 VQMOVN.S64 D26, Q12 1172 VMULL.S32 Q12, D29, D1 1173 VQMOVN.S64 D27, Q12 1174 1175 VQSHL.S32 Q2, Q2, Q8 1176 VQSHL.S32 Q3, Q3, Q8 1177 1178 VQSUB.S32 Q2, Q2, Q4 1179 VQSUB.S32 Q3, Q3, Q13 1180 1181 VNEG.S32 Q13, Q7 1182 VUZP.16 D14, D15 1183 VUZP.16 D26, D27 1184 1185 VMOV.S32 D1, #0 1186 VADDL.S16 Q0, D10, D1 1187 1188 1189 VMULL.S32 Q11, D30, D0 1190 VQMOVN.S64 D24, Q11 1191 VMULL.S32 Q11, D31, D1 1192 VQMOVN.S64 D25, Q11 1193 1194 1195 VMOV.S32 D1, #0 1196 VADDL.S16 Q0, D11, D1 1197 1198 VMULL.S32 Q4, D30, D0 1199 VQMOVN.S64 D22, Q4 1200 VMULL.S32 Q4, D31, D1 1201 VQMOVN.S64 D23, Q4 1202 1203 1204 VMULL.U16 Q4, D26, D11 1205 VMULL.U16 Q15, D14, D10 1206 1207 VSHR.U32 Q4, Q4, #16 1208 1209 VSHR.U32 Q15, Q15, #16 1210 1211 VMLAL.S16 Q4, D27, D11 1212 1213 VMLAL.S16 Q15, D15, D10 1214 1215 VQSHL.S32 Q2, Q2, #2 1216 1217 VQSHL.S32 Q3, Q3, #2 1218 1219 VQADD.S32 Q7, Q2, Q10 1220 1221 VQADD.S32 Q3, Q3, Q10 1222 1223 VSHR.S32 Q7, Q7, #16 1224 1225 VUZP.16 D14, D15 1226 VSHR.S32 Q3, Q3, #16 1227 1228 VUZP.16 D6, D7 1229 1230 VMOV D15, D6 1231 VQSHL.S32 Q4, Q4, Q8 1232 1233 VQSHL.S32 Q15, Q15, Q8 1234 1235 VQSUB.S32 Q4, Q4, Q12 1236 1237 VQSUB.S32 Q11, Q15, Q11 1238 1239 VQSHL.S32 Q15, Q4, #2 1240 1241 VQSHL.S32 Q11, Q11, #2 1242 1243 VQADD.S32 Q15, Q15, Q10 1244 VQADD.S32 Q11, Q11, Q10 1245 1246 VSHR.S32 Q15, Q15, #16 1247 1248 VUZP.16 D30, D31 1249 VSHR.S32 Q11, Q11, #16 1250 1251 VUZP.16 D22, D23 1252 VMOV D23, D30 1253 1254 1255 1256 1257 VST1.16 D14[0], [R0], R9 1258 VST1.16 D22[0], [R0], R9 1259 VST1.16 D14[1], [R0], R9 1260 VST1.16 D22[1], [R0], R9 1261 VST1.16 D14[2], [R0], R9 1262 VST1.16 D22[2], [R0], R9 1263 VST1.16 D14[3], [R0], R9 1264 1265 VST1.16 D15[0], [R5], R10 1266 VST1.16 D23[0], [R5], R10 1267 VST1.16 D15[1], [R5], R10 1268 VST1.16 D23[1], [R5], R10 1269 VST1.16 D15[2], [R5], R10 1270 VST1.16 D23[2], [R5], R10 1271 VST1.16 D15[3], [R5], R10 1272 1273 VPOP {d8 - d15} 1274 LDMFD sp!, {R4-R12} 1275 BX LR 1276 1277 1278