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_decorr_filter2_armv7 25 @PRESERVE8 26 27ixheaacd_decorr_filter2_armv7: 28 29 STMFD r13!, {r4-r12, r14} 30 LDR r12, [r0, #24] 31 32 LDRSH r4, [r0, #12] 33 LDRSH r5, [r0, #14] 34 LDRSH r6, [r0, #16] 35 36 MOV r11, #384 37 LDR r9, [r13, #44] 38 LDR r14, [r13, #48] 39 LDR r10, [r13, #40] 40 41 MLA r4, r11, r4, r12 42 43 MLA r5, r11, r5, r12 44 45 MLA r6, r11, r6, r12 46 47 48 ADD r11, r9, #0x0150 49 LDRH r7, [r0, #28] 50 ADD r2, r2, #12 51 ADD r10, r10, #12 52 53 ADD r5, r5, #140 54 55 ADD r6, r6, #268 56 57 58 STR r10, [r13, #-4]! 59 STR r2, [r13, #-4]! 60 LDR r8, [r0] 61 ADD r11, r11, #0x0c 62 63 MOV r0, #128 64 ADD r2, r9, #0x012 65 ADD r12, r11, #0x0a0 66 67 68 SUB r10, r11, #0x03A 69 ADD r3, r3, #12 70 MLA r0, r7, r0, r8 71 72 73 74 75 STR r10, [r13, #-8]! 76 STR r3, [r13, #-4]! 77 STR r14, [r13, #-4]! 78 ADD r1, r1, #12 79 ADD r0, r0, #12 80 ADD r4, r4, #12 81 82 83 84 85 86 87DE_COR_FIL2_LOOP1: 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 ADD r12, r12, #12 125 126 127 ADD r11, r11, #12 128 129 130 131 132 MOV r9, #20 133 134 STR r9, [r13, #-4]! 135 STR r1, [r13, #16] 136 137 138DE_COR_FIL2_LOOP2: 139 140 LDR r7, [r0] 141 LDR r8, [r11], #4 142 LDR r14, [r1], #4 143 144 SMULBT r3, r7, r8 145 SMULBB r9, r7, r8 146 147 148 STR r1, [r13, #16] 149 150 SMULTT r10, r7, r8 151 152 LDR r1, [r13, #20] 153 154 SMLATB r3, r7, r8, r3 155 156 MOV r8, #0x8000 157 158 QSUB r9, r9, r10 159 LDR r10, [r1], #4 160 QADD r14, r14, r8 161 162 STR r1, [r13, #20] 163 QADD r1, r10, r8 164 165 MOV r7, r9, asr #15 166 MOV r8, r3, asr #15 167 168 LDR r10, [r12], #4 169 LDR r9, [r4] 170 171 172 MOV r14, r14, asr #16 173 MOV r1, r1, asr #16 174 175 SMULBT r3, r10, r9 176 177 178 STRH r14, [r0], #2 179 STRH r1, [r0], #2 180 181 182 183 184 185 SMULTT r14, r10, r9 186 SMLATB r3, r10, r9, r3 187 SMULBB r9, r10, r9 188 189 LDRSH r10, [r2], #2 190 MOV r3, r3, asr #15 191 QSUB r9, r9, r14 192 193 SMULBB r14, r10, r8 194 SMULBB r1, r10, r7 195 MOV r9, r9, asr #15 196 197 SUB r3, r3, r14, asr #15 198 SUB r9, r9, r1, asr #15 199 200 SMULBB r14, r9, r10 201 SMULBB r1, r3, r10 202 203 LDR r10, [r12, #124 ] 204 205 ADD r14, r7, r14, asr #15 206 LDR r7, [r5] 207 208 ADD r1, r8, r1, asr #15 209 210 SMULBT r8, r10, r7 211 212 STRH r14, [r4], #2 213 STRH r1, [r4], #2 214 215 SMULTT r14, r10, r7 216 SMLATB r8, r10, r7, r8 217 SMULBB r7, r10, r7 218 219 LDRSH r10, [r2], #2 220 MOV r8, r8, asr #15 221 QSUB r7, r7, r14 222 223 SMULBB r14, r10, r3 224 SMULBB r1, r10, r9 225 MOV r7, r7, asr #15 226 227 SUB r8, r8, r14, asr #15 228 SUB r7, r7, r1, asr #15 229 230 SMULBB r14, r7, r10 231 SMULBB r1, r8, r10 232 233 LDR r10, [r12, #252] 234 235 ADD r14, r9, r14, asr #15 236 LDR r9, [r6] 237 238 ADD r1, r3, r1, asr #15 239 240 SMULBT r3, r10, r9 241 242 243 STRH r14, [r5], #2 244 STRH r1, [r5], #2 245 246 SMULTT r14, r10, r9 247 SMLATB r3, r10, r9, r3 248 SMULBB r9, r10, r9 249 250 LDRSH r10, [r2], #2 251 MOV r3, r3, asr #15 252 QSUB r9, r9, r14 253 254 SMULBB r14, r10, r8 255 SMULBB r1, r10, r7 256 MOV r9, r9, asr #15 257 258 SUB r3, r3, r14, asr #15 259 SUB r9, r9, r1, asr #15 260 261 SMULBB r14, r9, r10 262 SMULBB r1, r3, r10 263 264 LDR r10, [r13, #12] 265 ADD r7, r7, r14, asr #15 266 ADD r1, r8, r1, asr #15 267 268 LDRH r8, [r10], #2 269 STR r10, [r13, #12] 270 STRH r7, [r6], #2 271 LDR r10, [r13, #4] 272 273 STRH r1, [r6], #2 274 275 MOV r8, r8, lsl #1 276 LDRH r8, [r10, r8] 277 LDR r10, [r13, #8] 278 279 LDR r1, [r13, #16] 280 LDR r14, [r13] 281 LDR r7, [r13, #24] 282 283 SMULBB r3, r3, r8 284 SMULBB r9, r9, r8 285 286 SUBS r14, r14, #1 287 MOV r3, r3, lsl #1 288 MOV r9, r9, lsl #1 289 290 STR r3, [r7] , #4 291 STR r9, [r10], #4 292 STR r14, [r13] 293 STR r10, [r13, #8] 294 STR r7, [r13, #24] 295 BGT DE_COR_FIL2_LOOP2 296 297 ADD r13, r13, #28 298 299 LDMFD r13!, {r4-r12, pc} 300 301 302 303 304.text 305.p2align 2 306.global ixheaacd_decorr_filter1_armv7 307 308ixheaacd_decorr_filter1_armv7: 309 310 STMFD r13!, {r4-r12, r14} 311 ADD r12, r0, #0x0bc 312 313 LDRSH r4, [r0, #12] 314 LDRSH r5, [r0, #14] 315 LDRSH r6, [r0, #16] 316 317 MOV r11, #192 318 LDR r3, [r0, #0x2c] 319 320 MLA r4, r11, r4, r12 321 322 MLA r5, r11, r5, r12 323 324 MLA r6, r11, r6, r12 325 326 327 ADD r11, r1, #0x01b0 328 LDRH r7, [r0, #28] 329 330 ADD r5, r5, #64 331 332 ADD r6, r6, #128 333 334 335 ADD r8, r0, #0x03c 336 ADD r11, r11, #0x0c 337 338 MOV r0, #64 339 ADD r12, r11, #0x1c0 340 341 342 SUB r10, r11, #0x0b4 343 MLA r0, r7, r0, r8 344 345 346 MOV r9, #10 347 STR r10, [r13, #-4]! 348 STR r3, [r13, #-4]! 349 STR r2, [r13, #-4]! 350 STR r9, [r13, #-4]! 351 ADD r2, r1, #0x096 352 MOV r1, r3 353 354 355 356DE_COR_FIL1_LOOP: 357 358 LDR r7, [r0] 359 LDR r8, [r11], #4 360 LDR r14, [r1], #4 361 362 SMULBT r3, r7, r8 363 SMULBB r9, r7, r8 364 365 STR r1, [r13, #8] 366 367 SMULTT r10, r7, r8 368 SMLATB r3, r7, r8, r3 369 370 MOV r8, #0x8000 371 372 QSUB r9, r9, r10 373 LDR r10, [r1, #0x3c] 374 QADD r14, r14, r8 375 QADD r1, r10, r8 376 377 MOV r7, r9, asr #15 378 MOV r8, r3, asr #15 379 380 LDR r10, [r12], #4 381 LDR r9, [r4] 382 383 384 MOV r14, r14, asr #16 385 MOV r1, r1, asr #16 386 387 SMULBT r3, r10, r9 388 389 STRH r14, [r0], #2 390 STRH r1, [r0], #2 391 392 393 394 395 396 SMULTT r14, r10, r9 397 SMLATB r3, r10, r9, r3 398 SMULBB r9, r10, r9 399 400 LDRSH r10, [r2] 401 MOV r3, r3, asr #15 402 QSUB r9, r9, r14 403 404 SMULBB r14, r10, r8 405 SMULBB r1, r10, r7 406 MOV r9, r9, asr #15 407 408 SUB r3, r3, r14, asr #15 409 SUB r9, r9, r1, asr #15 410 411 SMULBB r14, r9, r10 412 SMULBB r1, r3, r10 413 414 LDR r10, [r12, #60 ] 415 416 ADD r14, r7, r14, asr #15 417 LDR r7, [r5] 418 419 ADD r1, r8, r1, asr #15 420 421 SMULBT r8, r10, r7 422 STRH r14, [r4], #2 423 STRH r1, [r4], #2 424 425 SMULTT r14, r10, r7 426 SMLATB r8, r10, r7, r8 427 SMULBB r7, r10, r7 428 429 LDRSH r10, [r2, #2] 430 MOV r8, r8, asr #15 431 QSUB r7, r7, r14 432 433 SMULBB r14, r10, r3 434 SMULBB r1, r10, r9 435 MOV r7, r7, asr #15 436 437 SUB r8, r8, r14, asr #15 438 SUB r7, r7, r1, asr #15 439 440 SMULBB r14, r7, r10 441 SMULBB r1, r8, r10 442 443 LDR r10, [r12, #124] 444 445 ADD r14, r9, r14, asr #15 446 LDR r9, [r6] 447 448 ADD r1, r3, r1, asr #15 449 450 SMULBT r3, r10, r9 451 452 STRH r14, [r5], #2 453 STRH r1, [r5], #2 454 455 SMULTT r14, r10, r9 456 SMLATB r3, r10, r9, r3 457 SMULBB r9, r10, r9 458 459 LDRSH r10, [r2, #4] 460 MOV r3, r3, asr #15 461 QSUB r9, r9, r14 462 463 SMULBB r14, r10, r8 464 SMULBB r1, r10, r7 465 MOV r9, r9, asr #15 466 467 SUB r3, r3, r14, asr #15 468 SUB r9, r9, r1, asr #15 469 470 SMULBB r14, r9, r10 471 SMULBB r1, r3, r10 472 473 LDR r10, [r13, #12] 474 ADD r7, r7, r14, asr #15 475 ADD r1, r8, r1, asr #15 476 477 LDRH r8, [r10], #2 478 STR r10, [r13, #12] 479 STRH r7, [r6], #2 480 LDR r10, [r13, #4] 481 482 STRH r1, [r6], #2 483 484 MOV r8, r8, lsl #1 485 LDRH r8, [r10, r8] 486 487 LDR r14, [r13] 488 LDR r1, [r13, #8] 489 490 SMULBB r3, r3, r8 491 SMULBB r9, r9, r8 492 493 SUBS r14, r14, #1 494 MOV r3, r3, lsl #1 495 MOV r9, r9, lsl #1 496 497 STR r3, [r1 , #0x0bc] 498 STR r9, [r1, #0x7c] 499 STR r14, [r13] 500 BGT DE_COR_FIL1_LOOP 501 502 ADD r13, r13, #16 503 504 LDMFD r13!, {r4-r12, pc} 505 506 507 508 509 510 511 512 513 514 515 516.text 517.p2align 2 518.global ixheaacd_divide16_pos_armv7 519 520ixheaacd_divide16_pos_armv7: 521 CMP r1, #0 522 MOV r2, r1 523@ MVNLTS r2, r2 524 MVNSLT r2, r2 525 CLZ r2, r2 526 SUB r2, r2, #1 527 MOV r0, r0, LSL r2 528 MOV r1, r1, LSL r2 529 MOV r2, r1, LSR #16 530 MOV r0, r0, LSR #16 531 MOVS r0, r0, LSL #16 532 MOV r2, r2, LSL #16 533 BXEQ r14 534 MOV r1, #0x10 535 MOV r3, #1 536FFR_DIV_LOOP: 537 CMP r0, r2 538 MOVCC r0, r0, LSL #1 539 SUBCS r0, r0, r2 540 ADDCS r0, r3, r0, LSL #1 541 SUBS r1, r1, #1 542 BGT FFR_DIV_LOOP 543 BX r14 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563.text 564.p2align 2 565.global ixheaacd_decorrelation_armv7 566 567 568 569 570ixheaacd_decorrelation_armv7: 571 572 STMFD r13!, {r4-r12, r14} 573 574 LDR r4, [r13, #40] 575 LDR r5, [r13, #44] 576 LDR r6, [r0, #0x2c] 577 STR r1, [r13, #-4]! 578 STR r2, [r13, #-4]! 579 STR r3, [r13, #-4]! 580 STR r4, [r13, #-4]! 581 SUB r13, r13, #124 582 583 584 LDR r7, [r6] 585 LDR r8, [r6, #20] 586 LDR r9, [r6, #64] 587 LDR r10, [r6, #84] 588 589 SMULWT r11, r7, r7 590 SMULWT r12, r9, r9 591 SMLAWT r11, r8, r8, r11 592 SMLAWT r12, r10, r10, r12 593 594 LDR r10, [r6, #16] 595 LDR r8, [r6, #80] 596 LDR r9, [r6, #4] 597 QADD r14, r11, r12 598 LDR r7, [r6, #68] 599 SMULWT r11, r10, r10 600 STR r14, [r13] 601 602 SMULWT r12, r9, r9 603 SMLAWT r11, r7, r7, r11 604 LDRSH r7, [r5, #0x0aa] 605 SMLAWT r12, r8, r8, r12 606 607 608 609 ADD r10, r6, #0x040 610 LDR r8, [r6, r7, lsl #2] 611 QADD r14, r11, r12 612 LDR r9, [r10, r7, lsl #2] 613 LDRSH r7, [r5, #0x0ac] 614 SMULWT r11, r8, r8 615 STR r14, [r13, #4] 616 617 LDR r8, [r6, r7, lsl #2] 618 SMLAWT r12, r9, r9, r11 619 LDR r9, [r10, r7, lsl #2] 620 LDRSH r7, [r5, #0x0ae] 621 SMULWT r11, r8, r8 622 STR r12, [r13, #8] 623 624 LDR r8, [r6, r7, lsl #2] 625 SMLAWT r12, r9, r9, r11 626 LDR r9, [r10, r7, lsl #2] 627 LDRSH r7, [r5, #0x0b0] 628 SMULWT r11, r8, r8 629 STR r12, [r13, #12] 630 631 LDR r8, [r6, r7, lsl #2] 632 SMLAWT r12, r9, r9, r11 633 LDR r9, [r10, r7, lsl #2] 634 LDRSH r7, [r5, #0x0b2] 635 SMULWT r11, r8, r8 636 STR r12, [r13, #16] 637 638 LDR r8, [r6, r7, lsl #2] 639 SMLAWT r12, r9, r9, r11 640 LDR r9, [r10, r7, lsl #2] 641 LDRSH r7, [r5, #0x0b4] 642 SMULWT r11, r8, r8 643 STR r12, [r13, #20] 644 645 LDR r8, [r6, r7, lsl #2] 646 SMLAWT r12, r9, r9, r11 647 LDR r9, [r10, r7, lsl #2] 648 LDR r6, [r1, #12] 649 SMULWT r11, r8, r8 650 LDR r7, [r2, #12] 651 SMLAWT r14, r9, r9, r11 652 STR r12, [r13, #24] 653 654 655 LDR r8, [r1, #16] 656 SMULWT r10, r6, r6 657 LDR r9, [r2, #16] 658 SMLAWT r12, r7, r7, r10 659 STR r14, [r13, #28] 660 661 SMULWT r10, r8, r8 662 LDR r6, [r1, #20] 663 SMLAWT r14, r9, r9, r10 664 665 LDR r7, [r2, #20] 666 STR r12, [r13, #32] 667 668 LDR r8, [r1, #24] 669 SMULWT r10, r6, r6 670 LDR r9, [r2, #24] 671 SMLAWT r12, r7, r7, r10 672 STR r14, [r13, #36] 673 674 SMULWT r10, r8, r8 675 LDR r6, [r1, #28] 676 SMLAWT r14, r9, r9, r10 677 678 LDR r7, [r2, #28] 679 STR r12, [r13, #40] 680 681 682 LDR r8, [r1, #32] 683 SMULWT r10, r6, r6 684 LDR r9, [r2, #32] 685 SMLAWT r12, r7, r7, r10 686 STR r14, [r13, #44] 687 688 SMULWT r10, r8, r8 689 ADD r7, r0, #0x06c0 690 SMLAWT r14, r9, r9, r10 691 STR r12, [r13, #48] 692 LDRSH r12, [r7, #2] 693 STR r14, [r13, #52] 694 STR r0, [r13, #-4]! 695 STR r5, [r13, #-4]! 696 697 698 ADD r3, r5, #0x0c2 699 MOV r0, #6 700 ADD r4, r13, #64 701 702DE_COR_LOOP1: 703 704 LDRSH r6, [r3, #2] 705 LDRSH r7, [r3], #2 706 MOV r14, #0 707 CMP r6, r12 708 MOVGT r6, r12 709 710 711 SUBS r6, r6, r7 712 713 714 ADD r8, r1, r7, lsl #2 715 ADD r9, r2, r7, lsl #2 716 BLE DE_COR_NEXT1 717 LDR r10, [r8], #4 718 LDR r11, [r9], #4 719 LDRSH r7, [r3, #0x0c] 720 721 722DE_COR_LOOP1_1: 723 724 SMULWT r5, r10, r10 725 SUBS r6, r6, #1 726 SMLAWT r5, r11, r11, r5 727 LDR r10, [r8], #4 728 LDR r11, [r9], #4 729 MOV r5, r5, asr r7 730 QADD r14, r14, r5 731 BGT DE_COR_LOOP1_1 732 733DE_COR_NEXT1: 734 SUBS r0, r0, #1 735 STR r14, [r4], #4 736 BGT DE_COR_LOOP1 737 738 LDR r5, [r13], #4 739 LDR r0, [r13], #4 740 741 MOV r14, #20 742 MOV r7, r13 743 LDR r3, [r0, #0x020] 744 LDR r4, [r0, #0x028] 745 LDR r12, =0x620a 746 LDR r6, [r0, #0x024] 747 STR r0, [r13, #-4]! 748 STR r5, [r13, #-4]! 749 MOV r11, #0x6000 750 MOV r8, #0x0ff 751 ADD r5, r7, #80 752 ORR r8, r8, #0x07f00 753 754DE_COR_LOOP2: 755 756 LDR r9, [r3] 757 LDR r2, [r7] 758 LDR r10, [r4] 759 SMULWB r9, r9, r12 760 761 MOVS r2, r2, lsl #1 762 SMULWB r10, r10, r11 763 MOVLT r2, #0 764 MOV r9, r9, lsl #1 765 CMP r2, r9 766 MOVGT r9, r2 767 768 STR r9, [r3], #4 769 QSUB r9, r9, r2 770 771 MOV r10, r10, lsl #1 772 STR r2, [r7], #4 773 MOV r9, r9, asr #2 774 QADD r9, r9, r10 775 776 777 778 779 LDR r10, [r6] 780 MOV r2, r2, asr #2 781 STR r9, [r4], #4 782 SMULWB r10, r10, r11 783 784 785 MOV r0, r9, asr #1 786 QADD r1, r9, r0 787 MOV r10, r10, lsl #1 788 ADD r0, r10, r2 789 790 791 STR r0, [r6], #4 792 CMP r1, r0 793 794 MOVLE r0, r8 795 BLE DE_COR_NEXT2 796 797 798 799 800 801 802 803 804 MOVS r2, r1 805 MVNLT r2, r2 806 CLZ r2, r2 807 SUB r2, r2, #1 808 MOV r0, r0, lsl r2 809 MOV r1, r1, lsl r2 810 MOV r2, r1, lsr #16 811 MOV r0, r0, lsr #16 812 MOVS r0, r0, lsl #16 813 MOV r2, r2, lsl #16 814 BEQ DE_COR_NEXT1_1 815 MOV r1, #04 816 MOV r10, #1 817 818 819DE_COR_DIV_LOOP: 820 SUBS r9, r0, r2 821 MOVCC r0, r0, lsl #1 822 823 ADDCS r0, r10, r9, lsl #1 824 825 826 SUBS r9, r0, r2 827 MOVCC r0, r0, lsl #1 828 829 ADDCS r0, r10, r9, lsl #1 830 831 832 SUBS r9, r0, r2 833 MOVCC r0, r0, lsl #1 834 835 ADDCS r0, r10, r9, lsl #1 836 837 838 SUBS r9, r0, r2 839 MOVCC r0, r0, lsl #1 840 841 ADDCS r0, r10, r9, lsl #1 842 843 844 SUBS r1, r1, #1 845 BGT DE_COR_DIV_LOOP 846 847 848 849DE_COR_NEXT1_1: 850 851 852 853 854 MOV r0, r0, lsl #16 855 MOV r0, r0, asr #16 856 857DE_COR_NEXT2: 858 859 STRH r0, [r5], #2 860 SUBS r14, r14, #1 861 BGT DE_COR_LOOP2 862 863 LDR r5, [r13], #4 864 LDR r0, [r13] 865 MOV r1, r5 866 ADD r2, r13, #84 867 BL ixheaacd_decorr_filter1_armv7 868 869 LDR r0, [r13] 870 LDR r1, [r13, #140] 871 LDR r2, [r13, #136] 872 873 ADD r7, r13, #84 874 MOV r8, #0 875 876 LDR r3, [r13, #132] 877 LDR r6, [r13, #128] 878 879 STRH r8, [r7, #40] 880 STR r7, [r13, #-4]! 881 STR r5, [r13, #-4]! 882 STR r6, [r13, #-4]! 883 BL ixheaacd_decorr_filter2_armv7 884 885 886 887 888 ADD r13, r13, #12 889 LDR r0, [r13], #4 890 891 LDR r1, [r13, #136] 892 LDR r2, [r13, #132] 893 ADD r6, r0, #0x06c0 894 LDR r3, [r13, #128] 895 LDR r4, [r13, #124] 896 897 LDRSH r10, [r0, #0x1e] 898 LDR r9, [r0, #4] 899 LDRSH r12, [r6, #2] 900 LDRSH r14, [r5, #0x0cc] 901 MOV r6, #0x030 902 LDRSH r11, [r5, #0x0ca] 903 MLA r6, r10, r6, r9 904 905 906 907 908 ADD r10, r10, #1 909 910 CMP r10, #14 911 MOVGE r10, #0 912 913 914 CMP r12, r14 915 MOVLT r14, r12 916 STRH r10, [r0, #0x1e] 917 ADD r1, r1, r11, lsl #2 918 ADD r2, r2, r11, lsl #2 919 ADD r3, r3, r11, lsl #2 920 ADD r4, r4, r11, lsl #2 921 LDRSH r8, [r7, #36] 922 SUBS r14, r14, r11 923 MOV r7, #0x08000 924 BLE DE_COR_NEXT3 925 926 927 928DE_COR_LOOP3: 929 930 LDR r10, [r1], #4 931 LDR r11, [r2], #4 932 LDR r9, [r6] 933 QADD r10, r10, r7 934 QADD r11, r11, r7 935 SUBS r14, r14, #1 936 937 MOV r10, r10, asr #16 938 STRH r10, [r6], #2 939 940 SMULBB r10, r9, r8 941 942 943 MOV r11, r11, asr #16 944 STRH r11, [r6], #2 945 946 SMULTB r11, r9, r8 947 948 949 MOV r10, r10, lsl #1 950 STR r10, [r3], #4 951 952 MOV r11, r11, lsl #1 953 STR r11, [r4], #4 954 BGT DE_COR_LOOP3 955 956DE_COR_NEXT3: 957 LDR r1, [r13, #136] 958 LDR r2, [r13, #132] 959 LDR r3, [r13, #128] 960 LDR r4, [r13, #124] 961 962 LDRSH r8, [r13, #118] 963 LDRSH r14, [r5, #0x0ce] 964 LDRSH r11, [r5, #0x0cc] 965 LDR r6, [r0, #8] 966 LDRSH r8, [r13, #118] 967 968 CMP r12, r14 969 MOVLT r14, r12 970 971 ADD r1, r1, r11, lsl #2 972 ADD r2, r2, r11, lsl #2 973 ADD r3, r3, r11, lsl #2 974 ADD r4, r4, r11, lsl #2 975 976 SUBS r14, r14, r11 977 BLE DE_COR_NEXT4 978 979 980 981DE_COR_LOOP4: 982 LDR r10, [r1], #4 983 LDR r11, [r2], #4 984 LDR r9, [r6] 985 QADD r10, r10, r7 986 QADD r11, r11, r7 987 SUBS r14, r14, #1 988 989 MOV r10, r10, asr #16 990 STRH r10, [r6], #2 991 992 SMULBB r10, r9, r8 993 994 995 MOV r11, r11, asr #16 996 STRH r11, [r6], #2 997 998 SMULTB r11, r9, r8 999 1000 MOV r10, r10, lsl #1 1001 STR r10, [r3], #4 1002 1003 MOV r11, r11, lsl #1 1004 STR r11, [r4], #4 1005 BGT DE_COR_LOOP4 1006 1007DE_COR_NEXT4: 1008 1009 LDR r3, [r13, #128] 1010 LDR r4, [r13, #124] 1011 1012 RSBS r14, r12, #64 1013 1014 1015 MOV r9, #0 1016 LDRSH r10, [r0, #0x01c] 1017 ADD r3, r3, r12, lsl #2 1018 ADD r4, r4, r12, lsl #2 1019 BLE DE_COR_NEXT5 1020 1021DE_COR_LOOP5: 1022 1023 STR r9, [r3], #4 1024 STR r9, [r4], #4 1025 SUBS r14, r14, #1 1026 BGT DE_COR_LOOP5 1027 1028DE_COR_NEXT5: 1029 1030 1031 ADD r10, r10, #1 1032 CMP r10, #2 1033 MOVGE r10, #0 1034 1035 STRH r10, [r0, #0x01c] 1036 1037 1038 1039 LDRSH r1, [r0, #0x0c] 1040 LDRSH r4, [r0, #0x12] 1041 LDRSH r2, [r0, #0x0e] 1042 LDRSH r5, [r0, #0x14] 1043 LDRSH r3, [r0, #0x10] 1044 LDRSH r6, [r0, #0x16] 1045 1046 ADD r13, r13, #140 1047 ADD r1, r1, #1 1048 ADD r2, r2, #1 1049 ADD r3, r3, #1 1050 1051 CMP r1, r4 1052 MOVGE r1, #0 1053 1054 1055 1056 CMP r2, r5 1057 MOVGE r2, #0 1058 1059 1060 1061 CMP r3, r6 1062 MOVGE r3, #0 1063 1064 1065 1066 STRH r1, [r0, #0x0c] 1067 STRH r2, [r0, #0x0e] 1068 STRH r3, [r0, #0x10] 1069 1070 LDMFD r13!, {r4-r12, pc} 1071 1072