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