Mercurial > mplayer.hg
comparison mp3lib/dct64_3dnow.s @ 1277:3a9699d9e7da
Slight otimization
author | nick |
---|---|
date | Thu, 05 Jul 2001 09:44:18 +0000 |
parents | 2864e32cd267 |
children | 175423b2691e |
comparison
equal
deleted
inserted
replaced
1276:ae943748e0d9 | 1277:3a9699d9e7da |
---|---|
4 # Partial 3dnow! optimization by Nick Kurshev | 4 # Partial 3dnow! optimization by Nick Kurshev |
5 # | 5 # |
6 # TODO: optimize scalar 3dnow! code | 6 # TODO: optimize scalar 3dnow! code |
7 # Warning: Phases 7 & 8 are not tested | 7 # Warning: Phases 7 & 8 are not tested |
8 # | 8 # |
9 | |
10 .data | |
11 .align 8 | |
12 x_plus_minus_3dnow: .long 0x00000000, 0x80000000 | |
13 plus_1f: .float 1.0 | |
9 | 14 |
10 .text | 15 .text |
11 | 16 |
12 .align 16 | 17 .align 16 |
13 | 18 |
499 movd %mm7, 120(%ecx) | 504 movd %mm7, 120(%ecx) |
500 | 505 |
501 /* Phase 6. This is the end of easy road. */ | 506 /* Phase 6. This is the end of easy road. */ |
502 /* Code below is coded in scalar mode. Should be optimized */ | 507 /* Code below is coded in scalar mode. Should be optimized */ |
503 | 508 |
504 movd 32(%ecx), %mm0 | 509 movd plus_1f, %mm6 |
505 pfadd 36(%ecx), %mm0 | 510 punpckldq 120(%ebx), %mm6 /* mm6 = 1.0 | 120(%ebx)*/ |
506 movd %mm0, 32(%edx) | 511 movq x_plus_minus_3dnow, %mm7 /* mm7 = +1 | -1 */ |
507 | 512 |
508 movd 32(%ecx), %mm0 | 513 movq 32(%ecx), %mm0 |
509 pfsub 36(%ecx), %mm0 | 514 movq 64(%ecx), %mm2 |
510 pfmul 120(%ebx),%mm0 | 515 movq %mm0, %mm1 |
511 movd %mm0, 36(%edx) | 516 movq %mm2, %mm3 |
512 | 517 pxor %mm7, %mm1 |
513 movd 44(%ecx), %mm0 | 518 pxor %mm7, %mm3 |
514 pfsub 40(%ecx), %mm0 | 519 pfacc %mm1, %mm0 |
515 pfmul 120(%ebx),%mm0 | 520 pfacc %mm3, %mm2 |
516 | 521 pfmul %mm6, %mm0 |
517 movd %mm0, 44(%edx) | 522 pfmul %mm6, %mm2 |
518 pfadd 40(%ecx), %mm0 | 523 movq %mm0, 32(%edx) |
519 pfadd 44(%ecx), %mm0 | 524 movq %mm2, 64(%edx) |
520 movd %mm0, 40(%edx) | 525 |
526 movd 44(%ecx), %mm0 | |
527 movd 40(%ecx), %mm2 | |
528 movd 120(%ebx), %mm3 | |
529 punpckldq 76(%ecx), %mm0 | |
530 punpckldq 72(%ecx), %mm2 | |
531 punpckldq %mm3, %mm3 | |
532 movq %mm0, %mm4 | |
533 movq %mm2, %mm5 | |
534 pfsub %mm2, %mm0 | |
535 pfmul %mm3, %mm0 | |
536 movq %mm0, %mm1 | |
537 pfadd %mm5, %mm0 | |
538 pfadd %mm4, %mm0 | |
539 movq %mm0, %mm2 | |
540 punpckldq %mm1, %mm0 | |
541 punpckhdq %mm1, %mm2 | |
542 movq %mm0, 40(%edx) | |
543 movq %mm2, 72(%edx) | |
521 | 544 |
522 movd 48(%ecx), %mm3 | 545 movd 48(%ecx), %mm3 |
523 pfsub 52(%ecx), %mm3 | 546 pfsub 52(%ecx), %mm3 |
524 pfmul 120(%ebx), %mm3 | 547 pfmul 120(%ebx), %mm3 |
525 | 548 |
532 pfadd 60(%ecx), %mm1 | 555 pfadd 60(%ecx), %mm1 |
533 movq %mm1, %mm0 | 556 movq %mm1, %mm0 |
534 | 557 |
535 pfadd 48(%ecx), %mm0 | 558 pfadd 48(%ecx), %mm0 |
536 pfadd 52(%ecx), %mm0 | 559 pfadd 52(%ecx), %mm0 |
537 movd %mm0, 48(%edx) | 560 pfadd %mm3, %mm1 |
538 pfadd %mm3, %mm1 | 561 punpckldq %mm2, %mm1 |
539 movd %mm1, 56(%edx) | 562 pfadd %mm3, %mm2 |
540 movd %mm2, 60(%edx) | 563 punpckldq %mm2, %mm0 |
541 pfadd %mm3, %mm2 | 564 movq %mm1, 56(%edx) |
542 movd %mm2, 52(%edx) | 565 movq %mm0, 48(%edx) |
543 | 566 |
544 /*---*/ | 567 /*---*/ |
545 movd 64(%ecx), %mm0 | 568 |
546 pfadd 68(%ecx), %mm0 | 569 movd 92(%ecx), %mm1 |
547 movd %mm0, 64(%edx) | 570 pfsub 88(%ecx), %mm1 |
548 | 571 pfmul 120(%ebx), %mm1 |
549 movd 64(%ecx), %mm0 | 572 movd %mm1, 92(%edx) |
550 pfsub 68(%ecx), %mm0 | 573 pfadd 92(%ecx), %mm1 |
551 pfmul 120(%ebx), %mm0 | 574 pfadd 88(%ecx), %mm1 |
552 movd %mm0, 68(%edx) | 575 movq %mm1, %mm0 |
553 | |
554 movd 76(%ecx), %mm0 | |
555 pfsub 72(%ecx), %mm0 | |
556 pfmul 120(%ebx), %mm0 | |
557 movd %mm0, 76(%edx) | |
558 pfadd 72(%ecx), %mm0 | |
559 pfadd 76(%ecx), %mm0 | |
560 movd %mm0, 72(%edx) | |
561 | |
562 movd 92(%ecx), %mm0 | |
563 pfsub 88(%ecx), %mm0 | |
564 pfmul 120(%ebx), %mm0 | |
565 movd %mm0, 92(%edx) | |
566 pfadd 92(%ecx), %mm0 | |
567 pfadd 88(%ecx), %mm0 | |
568 movq %mm0, %mm1 | |
569 | 576 |
570 pfadd 80(%ecx), %mm0 | 577 pfadd 80(%ecx), %mm0 |
571 pfadd 84(%ecx), %mm0 | 578 pfadd 84(%ecx), %mm0 |
572 movd %mm0, 80(%edx) | 579 movd %mm0, 80(%edx) |
573 | 580 |
577 pfadd %mm0, %mm1 | 584 pfadd %mm0, %mm1 |
578 pfadd 92(%edx), %mm0 | 585 pfadd 92(%edx), %mm0 |
579 movd %mm0, 84(%edx) | 586 movd %mm0, 84(%edx) |
580 movd %mm1, 88(%edx) | 587 movd %mm1, 88(%edx) |
581 | 588 |
582 movd 96(%ecx), %mm0 | 589 movq 96(%ecx), %mm0 |
583 pfadd 100(%ecx), %mm0 | 590 movq %mm0, %mm1 |
584 movd %mm0, 96(%edx) | 591 pxor %mm7, %mm1 |
585 | 592 pfacc %mm1, %mm0 |
586 movd 96(%ecx), %mm0 | 593 pfmul %mm6, %mm0 |
587 pfsub 100(%ecx), %mm0 | 594 movq %mm0, 96(%edx) |
588 pfmul 120(%ebx), %mm0 | |
589 movd %mm0, 100(%edx) | |
590 | 595 |
591 movd 108(%ecx), %mm0 | 596 movd 108(%ecx), %mm0 |
592 pfsub 104(%ecx), %mm0 | 597 pfsub 104(%ecx), %mm0 |
593 pfmul 120(%ebx), %mm0 | 598 pfmul 120(%ebx), %mm0 |
594 movd %mm0, 108(%edx) | 599 movd %mm0, 108(%edx) |
595 pfadd 104(%ecx), %mm0 | 600 pfadd 104(%ecx), %mm0 |
596 pfadd 108(%ecx), %mm0 | 601 pfadd 108(%ecx), %mm0 |
597 movd %mm0, 104(%edx) | 602 movd %mm0, 104(%edx) |
598 | 603 |
599 movd 124(%ecx), %mm0 | 604 movd 124(%ecx), %mm1 |
600 pfsub 120(%ecx), %mm0 | 605 pfsub 120(%ecx), %mm1 |
601 pfmul 120(%ebx), %mm0 | 606 pfmul 120(%ebx), %mm1 |
602 movd %mm0, 124(%edx) | 607 movd %mm1, 124(%edx) |
603 pfadd 120(%ecx), %mm0 | 608 pfadd 120(%ecx), %mm1 |
604 pfadd 124(%ecx), %mm0 | 609 pfadd 124(%ecx), %mm1 |
605 movq %mm0, %mm1 | 610 movq %mm1, %mm0 |
606 | 611 |
607 pfadd 112(%ecx), %mm0 | 612 pfadd 112(%ecx), %mm0 |
608 pfadd 116(%ecx), %mm0 | 613 pfadd 116(%ecx), %mm0 |
609 movd %mm0, 112(%edx) | 614 movd %mm0, 112(%edx) |
610 | 615 |
736 movd %mm0, 832(%edi) | 741 movd %mm0, 832(%edi) |
737 | 742 |
738 jmp .L_bye | 743 jmp .L_bye |
739 .L01: | 744 .L01: |
740 /* Phase 9*/ | 745 /* Phase 9*/ |
741 movd (%ecx), %mm0 | 746 |
742 pfadd 4(%ecx), %mm0 | 747 movq (%ecx), %mm0 |
743 pf2id %mm0, %mm0 | 748 movq %mm0, %mm1 |
744 movd %mm0, %eax | 749 pxor %mm7, %mm1 |
745 movw %ax, 512(%esi) | 750 pfacc %mm1, %mm0 |
746 | 751 pfmul %mm6, %mm0 |
747 movd (%ecx), %mm0 | 752 pf2id %mm0, %mm0 |
748 pfsub 4(%ecx), %mm0 | 753 movd %mm0, %eax |
749 pfmul 120(%ebx), %mm0 | 754 movw %ax, 512(%esi) |
750 pf2id %mm0, %mm0 | 755 psrlq $32, %mm0 |
751 movd %mm0, %eax | 756 movd %mm0, %eax |
752 movw %ax, (%esi) | 757 movw %ax, (%esi) |
753 | 758 |
754 movd 12(%ecx), %mm0 | 759 movd 12(%ecx), %mm0 |
755 pfsub 8(%ecx), %mm0 | 760 pfsub 8(%ecx), %mm0 |
756 pfmul 120(%ebx), %mm0 | 761 pfmul 120(%ebx), %mm0 |
757 pf2id %mm0, %mm7 | 762 pf2id %mm0, %mm7 |
761 pfadd 8(%ecx), %mm0 | 766 pfadd 8(%ecx), %mm0 |
762 pf2id %mm0, %mm0 | 767 pf2id %mm0, %mm0 |
763 movd %mm0, %eax | 768 movd %mm0, %eax |
764 movw %ax, 256(%esi) | 769 movw %ax, 256(%esi) |
765 | 770 |
766 movd 16(%ecx), %mm0 | 771 movd 16(%ecx), %mm3 |
767 pfsub 20(%ecx), %mm0 | 772 pfsub 20(%ecx), %mm3 |
768 pfmul 120(%ebx), %mm0 | 773 pfmul 120(%ebx), %mm3 |
769 movq %mm0, %mm3 | 774 movq %mm3, %mm2 |
770 | 775 |
771 movd 28(%ecx), %mm0 | 776 movd 28(%ecx), %mm2 |
772 pfsub 24(%ecx), %mm0 | 777 pfsub 24(%ecx), %mm2 |
773 pfmul 120(%ebx), %mm0 | 778 pfmul 120(%ebx), %mm2 |
774 pf2id %mm0, %mm7 | 779 movq %mm2, %mm1 |
780 | |
781 pf2id %mm2, %mm7 | |
775 movd %mm7, %eax | 782 movd %mm7, %eax |
776 movw %ax, 384(%edi) | 783 movw %ax, 384(%edi) |
777 movq %mm0, %mm2 | |
778 | 784 |
779 pfadd 24(%ecx), %mm0 | 785 pfadd 24(%ecx), %mm1 |
780 pfadd 28(%ecx), %mm0 | 786 pfadd 28(%ecx), %mm1 |
781 movq %mm0, %mm1 | 787 movq %mm1, %mm0 |
788 | |
782 pfadd 16(%ecx), %mm0 | 789 pfadd 16(%ecx), %mm0 |
783 pfadd 20(%ecx), %mm0 | 790 pfadd 20(%ecx), %mm0 |
784 pf2id %mm0, %mm0 | 791 pf2id %mm0, %mm0 |
785 movd %mm0, %eax | 792 movd %mm0, %eax |
786 movw %ax, 384(%esi) | 793 movw %ax, 384(%esi) |
790 movw %ax, 128(%esi) | 797 movw %ax, 128(%esi) |
791 pfadd %mm3, %mm2 | 798 pfadd %mm3, %mm2 |
792 pf2id %mm2, %mm2 | 799 pf2id %mm2, %mm2 |
793 movd %mm2, %eax | 800 movd %mm2, %eax |
794 movw %ax, 128(%edi) | 801 movw %ax, 128(%edi) |
795 | |
796 | 802 |
797 /* Phase 10*/ | 803 /* Phase 10*/ |
798 | 804 |
799 movq 32(%edx), %mm0 | 805 movq 32(%edx), %mm0 |
800 movq 48(%edx), %mm1 | 806 movq 48(%edx), %mm1 |
811 movd %mm0, %eax | 817 movd %mm0, %eax |
812 movd %mm1, %ecx | 818 movd %mm1, %ecx |
813 movw %ax, 64(%edi) | 819 movw %ax, 64(%edi) |
814 movw %cx, 192(%edi) | 820 movw %cx, 192(%edi) |
815 | 821 |
816 movd 40(%edx), %mm0 | 822 movd 40(%edx), %mm3 |
817 pfadd 56(%edx), %mm0 | 823 movd 56(%edx), %mm4 |
824 movd 60(%edx), %mm0 | |
825 movd 44(%edx), %mm2 | |
826 movd 120(%edx), %mm5 | |
827 punpckldq %mm4, %mm3 | |
828 punpckldq 124(%edx), %mm0 | |
829 pfadd 100(%edx), %mm5 | |
830 punpckldq 36(%edx), %mm4 | |
831 punpckldq 92(%edx), %mm2 | |
832 movq %mm5, %mm6 | |
833 pfadd %mm4, %mm3 | |
834 pf2id %mm0, %mm1 | |
835 pf2id %mm3, %mm3 | |
836 pfadd 88(%edx), %mm5 | |
837 movd %mm1, %eax | |
838 movd %mm3, %ecx | |
839 movw %ax, 448(%edi) | |
840 movw %cx, 192(%esi) | |
841 pf2id %mm5, %mm5 | |
842 psrlq $32, %mm1 | |
843 psrlq $32, %mm3 | |
844 movd %mm5, %ebx | |
845 movd %mm1, %eax | |
846 movd %mm3, %ecx | |
847 movw %bx, 96(%esi) | |
848 movw %ax, 480(%edi) | |
849 movw %cx, 64(%esi) | |
850 pfadd %mm2, %mm0 | |
818 pf2id %mm0, %mm0 | 851 pf2id %mm0, %mm0 |
819 movd %mm0, %eax | 852 movd %mm0, %eax |
820 movw %ax, 192(%esi) | 853 pfadd 68(%edx), %mm6 |
821 | 854 movw %ax, 320(%edi) |
822 movd 56(%edx), %mm0 | 855 psrlq $32, %mm0 |
823 pfadd 36(%edx), %mm0 | 856 pf2id %mm6, %mm6 |
824 pf2id %mm0, %mm0 | |
825 movd %mm0, %eax | 857 movd %mm0, %eax |
826 movw %ax, 64(%esi) | 858 movd %mm6, %ebx |
827 | 859 movw %ax, 416(%edi) |
828 movd 60(%edx), %mm0 | 860 movw %bx, 32(%esi) |
829 pf2id %mm0, %mm7 | |
830 movd %mm7, %eax | |
831 movw %ax, 448(%edi) | |
832 pfadd 44(%edx), %mm0 | |
833 pf2id %mm0, %mm0 | |
834 movd %mm0, %eax | |
835 movw %ax, 320(%edi) | |
836 | 861 |
837 movq 96(%edx), %mm0 | 862 movq 96(%edx), %mm0 |
838 movq 112(%edx), %mm2 | 863 movq 112(%edx), %mm2 |
839 movq 104(%edx), %mm4 | 864 movq 104(%edx), %mm4 |
840 pfadd 112(%edx), %mm0 | 865 pfadd %mm2, %mm0 |
841 pfadd 104(%edx), %mm2 | 866 pfadd %mm4, %mm2 |
842 pfadd 120(%edx), %mm4 | 867 pfadd 120(%edx), %mm4 |
843 movq %mm0, %mm1 | 868 movq %mm0, %mm1 |
844 movq %mm2, %mm3 | 869 movq %mm2, %mm3 |
845 movq %mm4, %mm5 | 870 movq %mm4, %mm5 |
846 pfadd 64(%edx), %mm0 | 871 pfadd 64(%edx), %mm0 |
847 pfadd 80(%edx), %mm2 | 872 pfadd 80(%edx), %mm2 |
848 pfadd 72(%edx), %mm4 | 873 pfadd 72(%edx), %mm4 |
849 pf2id %mm0, %mm7 | 874 pf2id %mm0, %mm0 |
850 pf2id %mm2, %mm6 | 875 pf2id %mm2, %mm2 |
851 pf2id %mm4, %mm4 | 876 pf2id %mm4, %mm4 |
852 movd %mm7, %eax | 877 movd %mm0, %eax |
853 movd %mm6, %ecx | 878 movd %mm2, %ecx |
854 movd %mm4, %ebx | 879 movd %mm4, %ebx |
855 movw %ax, 480(%esi) | 880 movw %ax, 480(%esi) |
856 movw %cx, 352(%esi) | 881 movw %cx, 352(%esi) |
857 movw %bx, 224(%esi) | 882 movw %bx, 224(%esi) |
858 psrlq $32, %mm7 | 883 psrlq $32, %mm0 |
859 psrlq $32, %mm6 | 884 psrlq $32, %mm2 |
860 psrlq $32, %mm4 | 885 psrlq $32, %mm4 |
861 movd %mm7, %eax | 886 movd %mm0, %eax |
862 movd %mm6, %ecx | 887 movd %mm2, %ecx |
863 movd %mm4, %ebx | 888 movd %mm4, %ebx |
864 movw %ax, 32(%edi) | 889 movw %ax, 32(%edi) |
865 movw %cx, 160(%edi) | 890 movw %cx, 160(%edi) |
866 movw %bx, 288(%edi) | 891 movw %bx, 288(%edi) |
867 pfadd 80(%edx), %mm1 | 892 pfadd 80(%edx), %mm1 |
884 movd %mm5, %ebx | 909 movd %mm5, %ebx |
885 movw %ax, 96(%edi) | 910 movw %ax, 96(%edi) |
886 movw %cx, 224(%edi) | 911 movw %cx, 224(%edi) |
887 movw %bx, 352(%edi) | 912 movw %bx, 352(%edi) |
888 | 913 |
889 movd 120(%edx), %mm0 | |
890 pfadd 100(%edx), %mm0 | |
891 movq %mm0, %mm1 | |
892 pfadd 88(%edx), %mm0 | |
893 pf2id %mm0, %mm0 | |
894 movd %mm0, %eax | |
895 movw %ax, 96(%esi) | |
896 pfadd 68(%edx), %mm1 | |
897 pf2id %mm1, %mm1 | |
898 movd %mm1, %eax | |
899 movw %ax, 32(%esi) | |
900 | |
901 movq 124(%edx), %mm0 | |
902 pf2id %mm0, %mm1 | |
903 movd %mm1, %eax | |
904 movw %ax, 480(%edi) | |
905 pfadd 92(%edx), %mm0 | |
906 pf2id %mm0, %mm0 | |
907 movd %mm0, %eax | |
908 movw %ax, 416(%edi) | |
909 | |
910 movsw | 914 movsw |
911 | 915 |
912 .L_bye: | 916 .L_bye: |
913 addl $256,%esp | 917 addl $256,%esp |
914 femms | 918 femms |
915 popl %edi | 919 popl %edi |
916 popl %esi | 920 popl %esi |
917 popl %ebx | 921 popl %ebx |
918 ret | 922 ret $12 |
919 | 923 |
920 | 924 |