~ubuntu-branches/ubuntu/trusty/libdv/trusty

« back to all changes in this revision

Viewing changes to libdv/rgbtoyuv.S

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Kobras
  • Date: 2004-07-19 12:19:44 UTC
  • mfrom: (1.2.1 upstream) (2.1.1 warty)
  • Revision ID: james.westby@ubuntu.com-20040719121944-17vuryc01yeyx8hf
Tags: 0.103-2
* debian/rules: Provide separate doc directory for libdv4-dev.
* debian/libdv4-dev.links: No longer symlink doc dir to the one
  from libdv4.
* debian/NEWS: Only install into libdv4-dev. Closes: #259694

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
 *  codec.
8
8
 *
9
9
 *  libdv is free software; you can redistribute it and/or modify it
10
 
 *  under the terms of the GNU General Public License as published by
11
 
 *  the Free Software Foundation; either version 2, or (at your
 
10
 *  under the terms of the GNU Lesser Public License as published by
 
11
 *  the Free Software Foundation; either version 2.1, or (at your
12
12
 *  option) any later version.
13
13
 *   
14
14
 *  libdv is distributed in the hope that it will be useful, but
15
15
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
16
16
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17
 
 *  General Public License for more details.
 
17
 *  Lesser Public License for more details.
18
18
 *   
19
 
 *  You should have received a copy of the GNU General Public License
20
 
 *  along with GNU Make; see the file COPYING.  If not, write to
 
19
 *  You should have received a copy of the GNU Lesser Public License
 
20
 *  along with libdv; see the file COPYING.  If not, write to
21
21
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
22
22
 *
23
23
 *  The libdv homepage is http://libdv.sourceforge.net/.  
41
41
#define DV_WIDTH_SHORT_HALF 720
42
42
#define DV_WIDTH_BYTE_HALF  360 
43
43
                
44
 
.global rgbtoycb_mmx
 
44
.global _dv_rgbtoycb_mmx
45
45
# .global yuvtoycb_mmx
46
46
 
47
47
.data
120
120
#define _outuPtr   24
121
121
#define _outvPtr   28
122
122
 
123
 
rgbtoycb_mmx:
 
123
_dv_rgbtoycb_mmx:
124
124
 
125
125
        pushl   %ebp
126
126
        movl    %esp, %ebp
371
371
 
372
372
        ret     
373
373
 
374
 
.global ppm_copy_y_block_mmx
375
 
ppm_copy_y_block_mmx:
 
374
.global _dv_ppm_copy_y_block_mmx
 
375
_dv_ppm_copy_y_block_mmx:
376
376
 
377
377
        pushl   %ebp
378
378
        movl    %esp, %ebp
421
421
        pop     %ebp
422
422
        ret
423
423
 
424
 
.global pgm_copy_y_block_mmx
425
 
pgm_copy_y_block_mmx:
 
424
.global _dv_pgm_copy_y_block_mmx
 
425
_dv_pgm_copy_y_block_mmx:
426
426
 
427
427
        pushl   %ebp
428
428
        movl    %esp, %ebp
563
563
        pop     %ebp
564
564
        ret
565
565
 
566
 
.global video_copy_y_block_mmx
567
 
video_copy_y_block_mmx:
568
 
 
569
 
        pushl   %ebp
570
 
        movl    %esp, %ebp
571
 
        pushl   %esi
572
 
        pushl   %edi
573
 
        
574
 
        movl    8(%ebp), %edi          # dest
575
 
        movl    12(%ebp), %esi         # src
576
 
 
577
 
        movq    OFFSETBX, %mm7
578
 
        pxor    %mm6, %mm6
579
 
        
580
 
        movq    (%esi), %mm0
581
 
        movq    DV_WIDTH_BYTE(%esi), %mm1
582
 
 
583
 
        movq    %mm0, %mm2
584
 
        movq    %mm1, %mm3
585
 
 
586
 
        punpcklbw %mm6, %mm0
587
 
        punpcklbw %mm6, %mm1
588
 
 
589
 
        punpckhbw %mm6, %mm2
590
 
        punpckhbw %mm6, %mm3
591
 
        
592
 
        psubw   %mm7, %mm0
593
 
        psubw   %mm7, %mm1
594
 
        psubw   %mm7, %mm2
595
 
        psubw   %mm7, %mm3
596
 
 
597
 
#if PRECISION > 0       
598
 
        psllw   $PRECISION, %mm0
599
 
        psllw   $PRECISION, %mm1
600
 
        psllw   $PRECISION, %mm2
601
 
        psllw   $PRECISION, %mm3
602
 
#endif
603
 
                
604
 
        movq    %mm0, (%edi)
605
 
        movq    %mm2, 8(%edi)
606
 
        movq    %mm1, 16(%edi)
607
 
        movq    %mm3, 24(%edi)
608
 
 
609
 
        addl    $2*DV_WIDTH_BYTE, %esi
610
 
        addl    $32, %edi
611
 
 
612
 
        movq    (%esi), %mm0
613
 
        movq    DV_WIDTH_BYTE(%esi), %mm1
614
 
 
615
 
        movq    %mm0, %mm2
616
 
        movq    %mm1, %mm3
617
 
 
618
 
        punpcklbw %mm6, %mm0
619
 
        punpcklbw %mm6, %mm1
620
 
 
621
 
        punpckhbw %mm6, %mm2
622
 
        punpckhbw %mm6, %mm3
623
 
        
624
 
        psubw   %mm7, %mm0
625
 
        psubw   %mm7, %mm1
626
 
        psubw   %mm7, %mm2
627
 
        psubw   %mm7, %mm3
628
 
 
629
 
#if PRECISION > 0       
630
 
        psllw   $PRECISION, %mm0
631
 
        psllw   $PRECISION, %mm1
632
 
        psllw   $PRECISION, %mm2
633
 
        psllw   $PRECISION, %mm3
634
 
#endif
635
 
                
636
 
        movq    %mm0, (%edi)
637
 
        movq    %mm2, 8(%edi)
638
 
        movq    %mm1, 16(%edi)
639
 
        movq    %mm3, 24(%edi)
640
 
 
641
 
        addl    $2*DV_WIDTH_BYTE, %esi
642
 
        addl    $32, %edi
643
 
 
644
 
        movq    (%esi), %mm0
645
 
        movq    DV_WIDTH_BYTE(%esi), %mm1
646
 
 
647
 
        movq    %mm0, %mm2
648
 
        movq    %mm1, %mm3
649
 
 
650
 
        punpcklbw %mm6, %mm0
651
 
        punpcklbw %mm6, %mm1
652
 
 
653
 
        punpckhbw %mm6, %mm2
654
 
        punpckhbw %mm6, %mm3
655
 
        
656
 
        psubw   %mm7, %mm0
657
 
        psubw   %mm7, %mm1
658
 
        psubw   %mm7, %mm2
659
 
        psubw   %mm7, %mm3
660
 
 
661
 
#if PRECISION > 0       
662
 
        psllw   $PRECISION, %mm0
663
 
        psllw   $PRECISION, %mm1
664
 
        psllw   $PRECISION, %mm2
665
 
        psllw   $PRECISION, %mm3
666
 
#endif
667
 
                
668
 
        movq    %mm0, (%edi)
669
 
        movq    %mm2, 8(%edi)
670
 
        movq    %mm1, 16(%edi)
671
 
        movq    %mm3, 24(%edi)
672
 
 
673
 
        addl    $2*DV_WIDTH_BYTE, %esi
674
 
        addl    $32, %edi
675
 
 
676
 
        movq    (%esi), %mm0
677
 
        movq    DV_WIDTH_BYTE(%esi), %mm1
678
 
 
679
 
        movq    %mm0, %mm2
680
 
        movq    %mm1, %mm3
681
 
 
682
 
        punpcklbw %mm6, %mm0
683
 
        punpcklbw %mm6, %mm1
684
 
 
685
 
        punpckhbw %mm6, %mm2
686
 
        punpckhbw %mm6, %mm3
687
 
        
688
 
        psubw   %mm7, %mm0
689
 
        psubw   %mm7, %mm1
690
 
        psubw   %mm7, %mm2
691
 
        psubw   %mm7, %mm3
692
 
 
693
 
#if PRECISION > 0       
694
 
        psllw   $PRECISION, %mm0
695
 
        psllw   $PRECISION, %mm1
696
 
        psllw   $PRECISION, %mm2
697
 
        psllw   $PRECISION, %mm3
698
 
#endif
699
 
                
700
 
        movq    %mm0, (%edi)
701
 
        movq    %mm2, 8(%edi)
702
 
        movq    %mm1, 16(%edi)
703
 
        movq    %mm3, 24(%edi)
704
 
 
705
 
        pop     %edi
706
 
        pop     %esi
707
 
        pop     %ebp
708
 
        ret
709
 
        
710
 
                
711
 
.global ppm_copy_pal_c_block_mmx
712
 
ppm_copy_pal_c_block_mmx:
713
 
                                
714
 
        pushl   %ebp
715
 
        movl    %esp, %ebp
716
 
        pushl   %esi
717
 
        pushl   %edi
718
 
        pushl   %ebx
719
 
        
720
 
        movl    8(%ebp), %edi          # dest
721
 
        movl    12(%ebp), %esi         # src
722
 
 
723
 
        movq              (%esi), %mm0
724
 
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
725
 
        movq               8(%esi), %mm2
726
 
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
727
 
 
728
 
        paddw   %mm0, %mm1
729
 
        paddw   %mm2, %mm3
730
 
        psraw   $1, %mm1
731
 
        psraw   $1, %mm3
732
 
 
733
 
        movq    %mm1, 0*8(%edi)
734
 
        movq    %mm3, 1*8(%edi)
735
 
 
736
 
        addl    $DV_WIDTH_SHORT, %esi
737
 
        addl    $16, %edi
738
 
 
739
 
        movq              (%esi), %mm0
740
 
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
741
 
        movq               8(%esi), %mm2
742
 
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
743
 
 
744
 
        paddw   %mm0, %mm1
745
 
        paddw   %mm2, %mm3
746
 
        psraw   $1, %mm1
747
 
        psraw   $1, %mm3
748
 
 
749
 
        movq    %mm1, 0*8(%edi)
750
 
        movq    %mm3, 1*8(%edi)
751
 
 
752
 
        addl    $DV_WIDTH_SHORT, %esi
753
 
        addl    $16, %edi
754
 
 
755
 
        movq              (%esi), %mm0
756
 
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
757
 
        movq               8(%esi), %mm2
758
 
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
759
 
 
760
 
        paddw   %mm0, %mm1
761
 
        paddw   %mm2, %mm3
762
 
        psraw   $1, %mm1
763
 
        psraw   $1, %mm3
764
 
 
765
 
        movq    %mm1, 0*8(%edi)
766
 
        movq    %mm3, 1*8(%edi)
767
 
 
768
 
        addl    $DV_WIDTH_SHORT, %esi
769
 
        addl    $16, %edi
770
 
 
771
 
        movq              (%esi), %mm0
772
 
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
773
 
        movq               8(%esi), %mm2
774
 
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
775
 
 
776
 
        paddw   %mm0, %mm1
777
 
        paddw   %mm2, %mm3
778
 
        psraw   $1, %mm1
779
 
        psraw   $1, %mm3
780
 
 
781
 
        movq    %mm1, 0*8(%edi)
782
 
        movq    %mm3, 1*8(%edi)
783
 
 
784
 
        addl    $DV_WIDTH_SHORT, %esi
785
 
        addl    $16, %edi
786
 
 
787
 
        movq              (%esi), %mm0
788
 
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
789
 
        movq               8(%esi), %mm2
790
 
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
791
 
 
792
 
        paddw   %mm0, %mm1
793
 
        paddw   %mm2, %mm3
794
 
        psraw   $1, %mm1
795
 
        psraw   $1, %mm3
796
 
 
797
 
        movq    %mm1, 0*8(%edi)
798
 
        movq    %mm3, 1*8(%edi)
799
 
 
800
 
        addl    $DV_WIDTH_SHORT, %esi
801
 
        addl    $16, %edi
802
 
 
803
 
        movq              (%esi), %mm0
804
 
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
805
 
        movq               8(%esi), %mm2
806
 
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
807
 
 
808
 
        paddw   %mm0, %mm1
809
 
        paddw   %mm2, %mm3
810
 
        psraw   $1, %mm1
811
 
        psraw   $1, %mm3
812
 
 
813
 
        movq    %mm1, 0*8(%edi)
814
 
        movq    %mm3, 1*8(%edi)
815
 
 
816
 
        addl    $DV_WIDTH_SHORT, %esi
817
 
        addl    $16, %edi
818
 
 
819
 
        movq              (%esi), %mm0
820
 
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
821
 
        movq               8(%esi), %mm2
822
 
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
823
 
 
824
 
        paddw   %mm0, %mm1
825
 
        paddw   %mm2, %mm3
826
 
        psraw   $1, %mm1
827
 
        psraw   $1, %mm3
828
 
 
829
 
        movq    %mm1, 0*8(%edi)
830
 
        movq    %mm3, 1*8(%edi)
831
 
 
832
 
        addl    $DV_WIDTH_SHORT, %esi
833
 
        addl    $16, %edi
834
 
 
835
 
        movq              (%esi), %mm0
836
 
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
837
 
        movq               8(%esi), %mm2
838
 
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
839
 
 
840
 
        paddw   %mm0, %mm1
841
 
        paddw   %mm2, %mm3
842
 
        psraw   $1, %mm1
843
 
        psraw   $1, %mm3
844
 
 
845
 
        movq    %mm1, 0*8(%edi)
846
 
        movq    %mm3, 1*8(%edi)
847
 
 
848
 
        pop     %ebx
849
 
        pop     %edi
850
 
        pop     %esi
851
 
        pop     %ebp
852
 
        ret
853
 
 
854
 
.global pgm_copy_pal_c_block_mmx
855
 
pgm_copy_pal_c_block_mmx:
856
 
                                
857
 
        pushl   %ebp
858
 
        movl    %esp, %ebp
859
 
        pushl   %esi
860
 
        pushl   %edi
861
 
        pushl   %ebx
862
 
        
863
 
        movl    8(%ebp), %edi          # dest
864
 
        movl    12(%ebp), %esi         # src
865
 
 
866
 
 
867
 
        movq    OFFSETBX, %mm7
868
 
        pxor    %mm6, %mm6
869
 
 
870
 
        
871
 
        movq    (%esi), %mm0
872
 
        movq    DV_WIDTH_BYTE(%esi), %mm1
873
 
 
874
 
        movq    %mm0, %mm2
875
 
        movq    %mm1, %mm3
876
 
 
877
 
        punpcklbw %mm6, %mm0
878
 
        punpcklbw %mm6, %mm1
879
 
 
880
 
        punpckhbw %mm6, %mm2
881
 
        punpckhbw %mm6, %mm3
882
 
        
883
 
        psubw   %mm7, %mm0
884
 
        psubw   %mm7, %mm1
885
 
        psubw   %mm7, %mm2
886
 
        psubw   %mm7, %mm3
887
 
 
888
 
#if PRECISION > 0       
889
 
        psllw   $PRECISION, %mm0
890
 
        psllw   $PRECISION, %mm1
891
 
        psllw   $PRECISION, %mm2
892
 
        psllw   $PRECISION, %mm3
893
 
#endif
894
 
                
895
 
        movq    %mm0, (%edi)
896
 
        movq    %mm2, 8(%edi)
897
 
        movq    %mm1, 16(%edi)
898
 
        movq    %mm3, 24(%edi)
899
 
 
900
 
        addl    $2*DV_WIDTH_BYTE, %esi
901
 
        addl    $32, %edi
902
 
 
903
 
        movq    (%esi), %mm0
904
 
        movq    DV_WIDTH_BYTE(%esi), %mm1
905
 
 
906
 
        movq    %mm0, %mm2
907
 
        movq    %mm1, %mm3
908
 
 
909
 
        punpcklbw %mm6, %mm0
910
 
        punpcklbw %mm6, %mm1
911
 
 
912
 
        punpckhbw %mm6, %mm2
913
 
        punpckhbw %mm6, %mm3
914
 
        
915
 
        psubw   %mm7, %mm0
916
 
        psubw   %mm7, %mm1
917
 
        psubw   %mm7, %mm2
918
 
        psubw   %mm7, %mm3
919
 
 
920
 
#if PRECISION > 0       
921
 
        psllw   $PRECISION, %mm0
922
 
        psllw   $PRECISION, %mm1
923
 
        psllw   $PRECISION, %mm2
924
 
        psllw   $PRECISION, %mm3
925
 
#endif
926
 
                
927
 
        movq    %mm0, (%edi)
928
 
        movq    %mm2, 8(%edi)
929
 
        movq    %mm1, 16(%edi)
930
 
        movq    %mm3, 24(%edi)
931
 
 
932
 
        addl    $2*DV_WIDTH_BYTE, %esi
933
 
        addl    $32, %edi
934
 
 
935
 
        movq    (%esi), %mm0
936
 
        movq    DV_WIDTH_BYTE(%esi), %mm1
937
 
 
938
 
        movq    %mm0, %mm2
939
 
        movq    %mm1, %mm3
940
 
 
941
 
        punpcklbw %mm6, %mm0
942
 
        punpcklbw %mm6, %mm1
943
 
 
944
 
        punpckhbw %mm6, %mm2
945
 
        punpckhbw %mm6, %mm3
946
 
        
947
 
        psubw   %mm7, %mm0
948
 
        psubw   %mm7, %mm1
949
 
        psubw   %mm7, %mm2
950
 
        psubw   %mm7, %mm3
951
 
 
952
 
#if PRECISION > 0       
953
 
        psllw   $PRECISION, %mm0
954
 
        psllw   $PRECISION, %mm1
955
 
        psllw   $PRECISION, %mm2
956
 
        psllw   $PRECISION, %mm3
957
 
#endif
958
 
                
959
 
        movq    %mm0, (%edi)
960
 
        movq    %mm2, 8(%edi)
961
 
        movq    %mm1, 16(%edi)
962
 
        movq    %mm3, 24(%edi)
963
 
 
964
 
        addl    $2*DV_WIDTH_BYTE, %esi
965
 
        addl    $32, %edi
966
 
 
967
 
        movq    (%esi), %mm0
968
 
        movq    DV_WIDTH_BYTE(%esi), %mm1
969
 
 
970
 
        movq    %mm0, %mm2
971
 
        movq    %mm1, %mm3
972
 
 
973
 
        punpcklbw %mm6, %mm0
974
 
        punpcklbw %mm6, %mm1
975
 
 
976
 
        punpckhbw %mm6, %mm2
977
 
        punpckhbw %mm6, %mm3
978
 
        
979
 
        psubw   %mm7, %mm0
980
 
        psubw   %mm7, %mm1
981
 
        psubw   %mm7, %mm2
982
 
        psubw   %mm7, %mm3
983
 
 
984
 
#if PRECISION > 0       
985
 
        psllw   $PRECISION, %mm0
986
 
        psllw   $PRECISION, %mm1
987
 
        psllw   $PRECISION, %mm2
988
 
        psllw   $PRECISION, %mm3
989
 
#endif
990
 
                
991
 
        movq    %mm0, (%edi)
992
 
        movq    %mm2, 8(%edi)
993
 
        movq    %mm1, 16(%edi)
994
 
        movq    %mm3, 24(%edi)
995
 
 
996
 
        pop     %ebx
997
 
        pop     %edi
998
 
        pop     %esi
999
 
        pop     %ebp
1000
 
        ret
1001
 
 
1002
 
.global video_copy_pal_c_block_mmx
1003
 
video_copy_pal_c_block_mmx:
 
566
.global _dv_video_copy_y_block_mmx
 
567
_dv_video_copy_y_block_mmx:
 
568
 
 
569
        pushl   %ebp
 
570
        movl    %esp, %ebp
 
571
        pushl   %esi
 
572
        pushl   %edi
 
573
        
 
574
        movl    8(%ebp), %edi          # dest
 
575
        movl    12(%ebp), %esi         # src
 
576
 
 
577
        movq    OFFSETBX, %mm7
 
578
        pxor    %mm6, %mm6
 
579
        
 
580
        movq    (%esi), %mm0
 
581
        movq    DV_WIDTH_BYTE(%esi), %mm1
 
582
 
 
583
        movq    %mm0, %mm2
 
584
        movq    %mm1, %mm3
 
585
 
 
586
        punpcklbw %mm6, %mm0
 
587
        punpcklbw %mm6, %mm1
 
588
 
 
589
        punpckhbw %mm6, %mm2
 
590
        punpckhbw %mm6, %mm3
 
591
        
 
592
        psubw   %mm7, %mm0
 
593
        psubw   %mm7, %mm1
 
594
        psubw   %mm7, %mm2
 
595
        psubw   %mm7, %mm3
 
596
 
 
597
#if PRECISION > 0       
 
598
        psllw   $PRECISION, %mm0
 
599
        psllw   $PRECISION, %mm1
 
600
        psllw   $PRECISION, %mm2
 
601
        psllw   $PRECISION, %mm3
 
602
#endif
 
603
                
 
604
        movq    %mm0, (%edi)
 
605
        movq    %mm2, 8(%edi)
 
606
        movq    %mm1, 16(%edi)
 
607
        movq    %mm3, 24(%edi)
 
608
 
 
609
        addl    $2*DV_WIDTH_BYTE, %esi
 
610
        addl    $32, %edi
 
611
 
 
612
        movq    (%esi), %mm0
 
613
        movq    DV_WIDTH_BYTE(%esi), %mm1
 
614
 
 
615
        movq    %mm0, %mm2
 
616
        movq    %mm1, %mm3
 
617
 
 
618
        punpcklbw %mm6, %mm0
 
619
        punpcklbw %mm6, %mm1
 
620
 
 
621
        punpckhbw %mm6, %mm2
 
622
        punpckhbw %mm6, %mm3
 
623
        
 
624
        psubw   %mm7, %mm0
 
625
        psubw   %mm7, %mm1
 
626
        psubw   %mm7, %mm2
 
627
        psubw   %mm7, %mm3
 
628
 
 
629
#if PRECISION > 0       
 
630
        psllw   $PRECISION, %mm0
 
631
        psllw   $PRECISION, %mm1
 
632
        psllw   $PRECISION, %mm2
 
633
        psllw   $PRECISION, %mm3
 
634
#endif
 
635
                
 
636
        movq    %mm0, (%edi)
 
637
        movq    %mm2, 8(%edi)
 
638
        movq    %mm1, 16(%edi)
 
639
        movq    %mm3, 24(%edi)
 
640
 
 
641
        addl    $2*DV_WIDTH_BYTE, %esi
 
642
        addl    $32, %edi
 
643
 
 
644
        movq    (%esi), %mm0
 
645
        movq    DV_WIDTH_BYTE(%esi), %mm1
 
646
 
 
647
        movq    %mm0, %mm2
 
648
        movq    %mm1, %mm3
 
649
 
 
650
        punpcklbw %mm6, %mm0
 
651
        punpcklbw %mm6, %mm1
 
652
 
 
653
        punpckhbw %mm6, %mm2
 
654
        punpckhbw %mm6, %mm3
 
655
        
 
656
        psubw   %mm7, %mm0
 
657
        psubw   %mm7, %mm1
 
658
        psubw   %mm7, %mm2
 
659
        psubw   %mm7, %mm3
 
660
 
 
661
#if PRECISION > 0       
 
662
        psllw   $PRECISION, %mm0
 
663
        psllw   $PRECISION, %mm1
 
664
        psllw   $PRECISION, %mm2
 
665
        psllw   $PRECISION, %mm3
 
666
#endif
 
667
                
 
668
        movq    %mm0, (%edi)
 
669
        movq    %mm2, 8(%edi)
 
670
        movq    %mm1, 16(%edi)
 
671
        movq    %mm3, 24(%edi)
 
672
 
 
673
        addl    $2*DV_WIDTH_BYTE, %esi
 
674
        addl    $32, %edi
 
675
 
 
676
        movq    (%esi), %mm0
 
677
        movq    DV_WIDTH_BYTE(%esi), %mm1
 
678
 
 
679
        movq    %mm0, %mm2
 
680
        movq    %mm1, %mm3
 
681
 
 
682
        punpcklbw %mm6, %mm0
 
683
        punpcklbw %mm6, %mm1
 
684
 
 
685
        punpckhbw %mm6, %mm2
 
686
        punpckhbw %mm6, %mm3
 
687
        
 
688
        psubw   %mm7, %mm0
 
689
        psubw   %mm7, %mm1
 
690
        psubw   %mm7, %mm2
 
691
        psubw   %mm7, %mm3
 
692
 
 
693
#if PRECISION > 0       
 
694
        psllw   $PRECISION, %mm0
 
695
        psllw   $PRECISION, %mm1
 
696
        psllw   $PRECISION, %mm2
 
697
        psllw   $PRECISION, %mm3
 
698
#endif
 
699
                
 
700
        movq    %mm0, (%edi)
 
701
        movq    %mm2, 8(%edi)
 
702
        movq    %mm1, 16(%edi)
 
703
        movq    %mm3, 24(%edi)
 
704
 
 
705
        pop     %edi
 
706
        pop     %esi
 
707
        pop     %ebp
 
708
        ret
 
709
        
 
710
                
 
711
.global _dv_ppm_copy_pal_c_block_mmx
 
712
_dv_ppm_copy_pal_c_block_mmx:
 
713
                                
 
714
        pushl   %ebp
 
715
        movl    %esp, %ebp
 
716
        pushl   %esi
 
717
        pushl   %edi
 
718
        pushl   %ebx
 
719
        
 
720
        movl    8(%ebp), %edi          # dest
 
721
        movl    12(%ebp), %esi         # src
 
722
 
 
723
        movq              (%esi), %mm0
 
724
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
 
725
        movq               8(%esi), %mm2
 
726
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
 
727
 
 
728
        paddw   %mm0, %mm1
 
729
        paddw   %mm2, %mm3
 
730
        psraw   $1, %mm1
 
731
        psraw   $1, %mm3
 
732
 
 
733
        movq    %mm1, 0*8(%edi)
 
734
        movq    %mm3, 1*8(%edi)
 
735
 
 
736
        addl    $DV_WIDTH_SHORT, %esi
 
737
        addl    $16, %edi
 
738
 
 
739
        movq              (%esi), %mm0
 
740
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
 
741
        movq               8(%esi), %mm2
 
742
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
 
743
 
 
744
        paddw   %mm0, %mm1
 
745
        paddw   %mm2, %mm3
 
746
        psraw   $1, %mm1
 
747
        psraw   $1, %mm3
 
748
 
 
749
        movq    %mm1, 0*8(%edi)
 
750
        movq    %mm3, 1*8(%edi)
 
751
 
 
752
        addl    $DV_WIDTH_SHORT, %esi
 
753
        addl    $16, %edi
 
754
 
 
755
        movq              (%esi), %mm0
 
756
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
 
757
        movq               8(%esi), %mm2
 
758
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
 
759
 
 
760
        paddw   %mm0, %mm1
 
761
        paddw   %mm2, %mm3
 
762
        psraw   $1, %mm1
 
763
        psraw   $1, %mm3
 
764
 
 
765
        movq    %mm1, 0*8(%edi)
 
766
        movq    %mm3, 1*8(%edi)
 
767
 
 
768
        addl    $DV_WIDTH_SHORT, %esi
 
769
        addl    $16, %edi
 
770
 
 
771
        movq              (%esi), %mm0
 
772
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
 
773
        movq               8(%esi), %mm2
 
774
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
 
775
 
 
776
        paddw   %mm0, %mm1
 
777
        paddw   %mm2, %mm3
 
778
        psraw   $1, %mm1
 
779
        psraw   $1, %mm3
 
780
 
 
781
        movq    %mm1, 0*8(%edi)
 
782
        movq    %mm3, 1*8(%edi)
 
783
 
 
784
        addl    $DV_WIDTH_SHORT, %esi
 
785
        addl    $16, %edi
 
786
 
 
787
        movq              (%esi), %mm0
 
788
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
 
789
        movq               8(%esi), %mm2
 
790
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
 
791
 
 
792
        paddw   %mm0, %mm1
 
793
        paddw   %mm2, %mm3
 
794
        psraw   $1, %mm1
 
795
        psraw   $1, %mm3
 
796
 
 
797
        movq    %mm1, 0*8(%edi)
 
798
        movq    %mm3, 1*8(%edi)
 
799
 
 
800
        addl    $DV_WIDTH_SHORT, %esi
 
801
        addl    $16, %edi
 
802
 
 
803
        movq              (%esi), %mm0
 
804
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
 
805
        movq               8(%esi), %mm2
 
806
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
 
807
 
 
808
        paddw   %mm0, %mm1
 
809
        paddw   %mm2, %mm3
 
810
        psraw   $1, %mm1
 
811
        psraw   $1, %mm3
 
812
 
 
813
        movq    %mm1, 0*8(%edi)
 
814
        movq    %mm3, 1*8(%edi)
 
815
 
 
816
        addl    $DV_WIDTH_SHORT, %esi
 
817
        addl    $16, %edi
 
818
 
 
819
        movq              (%esi), %mm0
 
820
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
 
821
        movq               8(%esi), %mm2
 
822
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
 
823
 
 
824
        paddw   %mm0, %mm1
 
825
        paddw   %mm2, %mm3
 
826
        psraw   $1, %mm1
 
827
        psraw   $1, %mm3
 
828
 
 
829
        movq    %mm1, 0*8(%edi)
 
830
        movq    %mm3, 1*8(%edi)
 
831
 
 
832
        addl    $DV_WIDTH_SHORT, %esi
 
833
        addl    $16, %edi
 
834
 
 
835
        movq              (%esi), %mm0
 
836
        movq    DV_WIDTH_SHORT_HALF(%esi), %mm1
 
837
        movq               8(%esi), %mm2
 
838
        movq    DV_WIDTH_SHORT_HALF+8(%esi), %mm3
 
839
 
 
840
        paddw   %mm0, %mm1
 
841
        paddw   %mm2, %mm3
 
842
        psraw   $1, %mm1
 
843
        psraw   $1, %mm3
 
844
 
 
845
        movq    %mm1, 0*8(%edi)
 
846
        movq    %mm3, 1*8(%edi)
 
847
 
 
848
        pop     %ebx
 
849
        pop     %edi
 
850
        pop     %esi
 
851
        pop     %ebp
 
852
        ret
 
853
 
 
854
.global _dv_pgm_copy_pal_c_block_mmx
 
855
_dv_pgm_copy_pal_c_block_mmx:
 
856
                                
 
857
        pushl   %ebp
 
858
        movl    %esp, %ebp
 
859
        pushl   %esi
 
860
        pushl   %edi
 
861
        pushl   %ebx
 
862
        
 
863
        movl    8(%ebp), %edi          # dest
 
864
        movl    12(%ebp), %esi         # src
 
865
 
 
866
 
 
867
        movq    OFFSETBX, %mm7
 
868
        pxor    %mm6, %mm6
 
869
 
 
870
        
 
871
        movq    (%esi), %mm0
 
872
        movq    DV_WIDTH_BYTE(%esi), %mm1
 
873
 
 
874
        movq    %mm0, %mm2
 
875
        movq    %mm1, %mm3
 
876
 
 
877
        punpcklbw %mm6, %mm0
 
878
        punpcklbw %mm6, %mm1
 
879
 
 
880
        punpckhbw %mm6, %mm2
 
881
        punpckhbw %mm6, %mm3
 
882
        
 
883
        psubw   %mm7, %mm0
 
884
        psubw   %mm7, %mm1
 
885
        psubw   %mm7, %mm2
 
886
        psubw   %mm7, %mm3
 
887
 
 
888
#if PRECISION > 0       
 
889
        psllw   $PRECISION, %mm0
 
890
        psllw   $PRECISION, %mm1
 
891
        psllw   $PRECISION, %mm2
 
892
        psllw   $PRECISION, %mm3
 
893
#endif
 
894
                
 
895
        movq    %mm0, (%edi)
 
896
        movq    %mm2, 8(%edi)
 
897
        movq    %mm1, 16(%edi)
 
898
        movq    %mm3, 24(%edi)
 
899
 
 
900
        addl    $2*DV_WIDTH_BYTE, %esi
 
901
        addl    $32, %edi
 
902
 
 
903
        movq    (%esi), %mm0
 
904
        movq    DV_WIDTH_BYTE(%esi), %mm1
 
905
 
 
906
        movq    %mm0, %mm2
 
907
        movq    %mm1, %mm3
 
908
 
 
909
        punpcklbw %mm6, %mm0
 
910
        punpcklbw %mm6, %mm1
 
911
 
 
912
        punpckhbw %mm6, %mm2
 
913
        punpckhbw %mm6, %mm3
 
914
        
 
915
        psubw   %mm7, %mm0
 
916
        psubw   %mm7, %mm1
 
917
        psubw   %mm7, %mm2
 
918
        psubw   %mm7, %mm3
 
919
 
 
920
#if PRECISION > 0       
 
921
        psllw   $PRECISION, %mm0
 
922
        psllw   $PRECISION, %mm1
 
923
        psllw   $PRECISION, %mm2
 
924
        psllw   $PRECISION, %mm3
 
925
#endif
 
926
                
 
927
        movq    %mm0, (%edi)
 
928
        movq    %mm2, 8(%edi)
 
929
        movq    %mm1, 16(%edi)
 
930
        movq    %mm3, 24(%edi)
 
931
 
 
932
        addl    $2*DV_WIDTH_BYTE, %esi
 
933
        addl    $32, %edi
 
934
 
 
935
        movq    (%esi), %mm0
 
936
        movq    DV_WIDTH_BYTE(%esi), %mm1
 
937
 
 
938
        movq    %mm0, %mm2
 
939
        movq    %mm1, %mm3
 
940
 
 
941
        punpcklbw %mm6, %mm0
 
942
        punpcklbw %mm6, %mm1
 
943
 
 
944
        punpckhbw %mm6, %mm2
 
945
        punpckhbw %mm6, %mm3
 
946
        
 
947
        psubw   %mm7, %mm0
 
948
        psubw   %mm7, %mm1
 
949
        psubw   %mm7, %mm2
 
950
        psubw   %mm7, %mm3
 
951
 
 
952
#if PRECISION > 0       
 
953
        psllw   $PRECISION, %mm0
 
954
        psllw   $PRECISION, %mm1
 
955
        psllw   $PRECISION, %mm2
 
956
        psllw   $PRECISION, %mm3
 
957
#endif
 
958
                
 
959
        movq    %mm0, (%edi)
 
960
        movq    %mm2, 8(%edi)
 
961
        movq    %mm1, 16(%edi)
 
962
        movq    %mm3, 24(%edi)
 
963
 
 
964
        addl    $2*DV_WIDTH_BYTE, %esi
 
965
        addl    $32, %edi
 
966
 
 
967
        movq    (%esi), %mm0
 
968
        movq    DV_WIDTH_BYTE(%esi), %mm1
 
969
 
 
970
        movq    %mm0, %mm2
 
971
        movq    %mm1, %mm3
 
972
 
 
973
        punpcklbw %mm6, %mm0
 
974
        punpcklbw %mm6, %mm1
 
975
 
 
976
        punpckhbw %mm6, %mm2
 
977
        punpckhbw %mm6, %mm3
 
978
        
 
979
        psubw   %mm7, %mm0
 
980
        psubw   %mm7, %mm1
 
981
        psubw   %mm7, %mm2
 
982
        psubw   %mm7, %mm3
 
983
 
 
984
#if PRECISION > 0       
 
985
        psllw   $PRECISION, %mm0
 
986
        psllw   $PRECISION, %mm1
 
987
        psllw   $PRECISION, %mm2
 
988
        psllw   $PRECISION, %mm3
 
989
#endif
 
990
                
 
991
        movq    %mm0, (%edi)
 
992
        movq    %mm2, 8(%edi)
 
993
        movq    %mm1, 16(%edi)
 
994
        movq    %mm3, 24(%edi)
 
995
 
 
996
        pop     %ebx
 
997
        pop     %edi
 
998
        pop     %esi
 
999
        pop     %ebp
 
1000
        ret
 
1001
 
 
1002
.global _dv_video_copy_pal_c_block_mmx
 
1003
_dv_video_copy_pal_c_block_mmx:
1004
1004
                                
1005
1005
        pushl   %ebp
1006
1006
        movl    %esp, %ebp
1094
1094
        pop     %ebp
1095
1095
        ret
1096
1096
        
1097
 
.global ppm_copy_ntsc_c_block_mmx
1098
 
ppm_copy_ntsc_c_block_mmx:
 
1097
.global _dv_ppm_copy_ntsc_c_block_mmx
 
1098
_dv_ppm_copy_ntsc_c_block_mmx:
1099
1099
                                
1100
1100
        pushl   %ebp
1101
1101
        movl    %esp, %ebp
1167
1167
        pop     %ebp
1168
1168
        ret
1169
1169
 
1170
 
.global pgm_copy_ntsc_c_block_mmx
1171
 
pgm_copy_ntsc_c_block_mmx:
 
1170
.global _dv_pgm_copy_ntsc_c_block_mmx
 
1171
_dv_pgm_copy_ntsc_c_block_mmx:
1172
1172
                                
1173
1173
        pushl   %ebp
1174
1174
        movl    %esp, %ebp
1324
1324
        pop     %ebp
1325
1325
        ret
1326
1326
 
1327
 
.global video_copy_ntsc_c_block_mmx
1328
 
video_copy_ntsc_c_block_mmx:
 
1327
.global _dv_video_copy_ntsc_c_block_mmx
 
1328
_dv_video_copy_ntsc_c_block_mmx:
1329
1329
                                
1330
1330
        pushl   %ebp
1331
1331
        movl    %esp, %ebp