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