This allows reusing the macro for a separate implementation of the pass2 function.
Unified · Split
| @@ -598,6 +598,51 @@ endfunc · 597 unmodified lines | |||
| 598 | st1 {v2.8h}, [\src], \inc | 598 | st1 {v2.8h}, [\src], \inc |
| 599 | .endm | 599 | .endm |
| 600 | 600 | ||
| 601 | .macro load_add_store coef0, coef1, coef2, coef3, coef4, coef5, coef6, coef7, tmp1, tmp2 | ||
| 602 | srshr \coef0, \coef0, #6 | ||
| 603 | ld1 {v2.8b}, [x0], x1 | ||
| 604 | srshr \coef1, \coef1, #6 | ||
| 605 | ld1 {v3.8b}, [x3], x1 | ||
| 606 | srshr \coef2, \coef2, #6 | ||
| 607 | ld1 {v4.8b}, [x0], x1 | ||
| 608 | srshr \coef3, \coef3, #6 | ||
| 609 | uaddw \coef0, \coef0, v2.8b | ||
| 610 | ld1 {v5.8b}, [x3], x1 | ||
| 611 | uaddw \coef1, \coef1, v3.8b | ||
| 612 | srshr \coef4, \coef4, #6 | ||
| 613 | ld1 {v6.8b}, [x0], x1 | ||
| 614 | srshr \coef5, \coef5, #6 | ||
| 615 | ld1 {v7.8b}, [x3], x1 | ||
| 616 | sqxtun v2.8b, \coef0 | ||
| 617 | srshr \coef6, \coef6, #6 | ||
| 618 | sqxtun v3.8b, \coef1 | ||
| 619 | srshr \coef7, \coef7, #6 | ||
| 620 | uaddw \coef2, \coef2, v4.8b | ||
| 621 | ld1 {\tmp1}, [x0], x1 | ||
| 622 | uaddw \coef3, \coef3, v5.8b | ||
| 623 | ld1 {\tmp2}, [x3], x1 | ||
| 624 | sqxtun v4.8b, \coef2 | ||
| 625 | sub x0, x0, x1, lsl #2 | ||
| 626 | sub x3, x3, x1, lsl #2 | ||
| 627 | sqxtun v5.8b, \coef3 | ||
| 628 | uaddw \coef4, \coef4, v6.8b | ||
| 629 | st1 {v2.8b}, [x0], x1 | ||
| 630 | uaddw \coef5, \coef5, v7.8b | ||
| 631 | st1 {v3.8b}, [x3], x1 | ||
| 632 | sqxtun v6.8b, \coef4 | ||
| 633 | st1 {v4.8b}, [x0], x1 | ||
| 634 | sqxtun v7.8b, \coef5 | ||
| 635 | st1 {v5.8b}, [x3], x1 | ||
| 636 | uaddw \coef6, \coef6, \tmp1 | ||
| 637 | st1 {v6.8b}, [x0], x1 | ||
| 638 | uaddw \coef7, \coef7, \tmp2 | ||
| 639 | st1 {v7.8b}, [x3], x1 | ||
| 640 | sqxtun \tmp1, \coef6 | ||
| 641 | sqxtun \tmp2, \coef7 | ||
| 642 | st1 {\tmp1}, [x0], x1 | ||
| 643 | st1 {\tmp2}, [x3], x1 | ||
| 644 | .endm | ||
| 645 | |||
| 601 | // Read a vertical 8x16 slice out of a 16x16 matrix, do a transform on it, | 646 | // Read a vertical 8x16 slice out of a 16x16 matrix, do a transform on it, |
| 602 | // transpose into a horizontal 16x8 slice and store. | 647 | // transpose into a horizontal 16x8 slice and store. |
| 603 | // x0 = dst (temp buffer) | 648 | // x0 = dst (temp buffer) |
| @@ -671,53 +716,8 @@ function \txfm\()16_1d_8x16_pass2_neon · 67 unmodified lines | |||
| 671 | lsl x1, x1, #1 | 716 | lsl x1, x1, #1 |
| 672 | bl \txfm\()16 | 717 | bl \txfm\()16 |
| 673 | 718 | ||
| 674 | .macro load_add_store coef0, coef1, coef2, coef3, coef4, coef5, coef6, coef7, tmp1, tmp2 | ||
| 675 | srshr \coef0, \coef0, #6 | ||
| 676 | ld1 {v2.8b}, [x0], x1 | ||
| 677 | srshr \coef1, \coef1, #6 | ||
| 678 | ld1 {v3.8b}, [x3], x1 | ||
| 679 | srshr \coef2, \coef2, #6 | ||
| 680 | ld1 {v4.8b}, [x0], x1 | ||
| 681 | srshr \coef3, \coef3, #6 | ||
| 682 | uaddw \coef0, \coef0, v2.8b | ||
| 683 | ld1 {v5.8b}, [x3], x1 | ||
| 684 | uaddw \coef1, \coef1, v3.8b | ||
| 685 | srshr \coef4, \coef4, #6 | ||
| 686 | ld1 {v6.8b}, [x0], x1 | ||
| 687 | srshr \coef5, \coef5, #6 | ||
| 688 | ld1 {v7.8b}, [x3], x1 | ||
| 689 | sqxtun v2.8b, \coef0 | ||
| 690 | srshr \coef6, \coef6, #6 | ||
| 691 | sqxtun v3.8b, \coef1 | ||
| 692 | srshr \coef7, \coef7, #6 | ||
| 693 | uaddw \coef2, \coef2, v4.8b | ||
| 694 | ld1 {\tmp1}, [x0], x1 | ||
| 695 | uaddw \coef3, \coef3, v5.8b | ||
| 696 | ld1 {\tmp2}, [x3], x1 | ||
| 697 | sqxtun v4.8b, \coef2 | ||
| 698 | sub x0, x0, x1, lsl #2 | ||
| 699 | sub x3, x3, x1, lsl #2 | ||
| 700 | sqxtun v5.8b, \coef3 | ||
| 701 | uaddw \coef4, \coef4, v6.8b | ||
| 702 | st1 {v2.8b}, [x0], x1 | ||
| 703 | uaddw \coef5, \coef5, v7.8b | ||
| 704 | st1 {v3.8b}, [x3], x1 | ||
| 705 | sqxtun v6.8b, \coef4 | ||
| 706 | st1 {v4.8b}, [x0], x1 | ||
| 707 | sqxtun v7.8b, \coef5 | ||
| 708 | st1 {v5.8b}, [x3], x1 | ||
| 709 | uaddw \coef6, \coef6, \tmp1 | ||
| 710 | st1 {v6.8b}, [x0], x1 | ||
| 711 | uaddw \coef7, \coef7, \tmp2 | ||
| 712 | st1 {v7.8b}, [x3], x1 | ||
| 713 | sqxtun \tmp1, \coef6 | ||
| 714 | sqxtun \tmp2, \coef7 | ||
| 715 | st1 {\tmp1}, [x0], x1 | ||
| 716 | st1 {\tmp2}, [x3], x1 | ||
| 717 | .endm | ||
| 718 | load_add_store v16.8h, v17.8h, v18.8h, v19.8h, v20.8h, v21.8h, v22.8h, v23.8h, v16.8b, v17.8b | 719 | load_add_store v16.8h, v17.8h, v18.8h, v19.8h, v20.8h, v21.8h, v22.8h, v23.8h, v16.8b, v17.8b |
| 719 | load_add_store v24.8h, v25.8h, v26.8h, v27.8h, v28.8h, v29.8h, v30.8h, v31.8h, v16.8b, v17.8b | 720 | load_add_store v24.8h, v25.8h, v26.8h, v27.8h, v28.8h, v29.8h, v30.8h, v31.8h, v16.8b, v17.8b |
| 720 | .purgem load_add_store | ||
| 721 | 721 | ||
| 722 | br x14 | 722 | br x14 |
| 723 | endfunc | 723 | endfunc |