22static u8 s_DMAPack[128];
23static u32 s_DataBuf[2];
24static int ( * s_SetDMA_func) (
void* );
25static void * s_SetDMA_arg;
26static u32 s_IPUState[8];
29static u32 s_CSCParam[3];
33extern s32 _mpeg_dmac_handler( s32 channel,
void *arg,
void *addr );
35void _MPEG_Initialize (
_MPEGContext* arg0,
int ( * arg1) (
void* ),
void* arg2,
int* arg3)
52 memset(&sema, 0,
sizeof(sema));
56 s_Sema = CreateSema(&sema);
57 s_CSCID = AddDmacHandler2(3, _mpeg_dmac_handler, 0, &s_CSCParam);
62void _MPEG_Destroy (
void )
64 while (s_CSCFlag != 0);
65 RemoveDmacHandler(3, s_CSCID);
69void _ipu_suspend (
void )
76 asm volatile (
"mfc0\t%0, $12" :
"=r" (eie));
91 asm volatile (
"mfc0\t%0, $12" :
"=r" (eie));
105void _MPEG_Suspend (
void )
107 while (s_CSCFlag != 0);
108 return _ipu_suspend();
111void _ipu_resume (
void )
113 if (s_IPUState[5] != 0)
119 u32 var2 = (s_IPUState[7] >> 0x10 & 3) + (s_IPUState[7] >> 8 & 0xf);
120 u32 var3 = (s_IPUState[2]) + var2;
132void _MPEG_Resume (
void )
134 return _ipu_resume();
137s32 _mpeg_dmac_handler( s32 channel,
void *arg,
void *addr )
152 if (0x3fe < (
int)var1)
158 carg[0] += var2 * 0x180;
159 carg[1] += var2 * 0x400;
160 carg[2] = var1 - var2;
169int _MPEG_CSCImage (
void* arg0,
void* arg1,
int arg2 )
179 s_CSCParam[2] = arg2 - var1;
182 s_CSCParam[0] = (int)arg0 + var1 * 0x180;
183 s_CSCParam[1] = (int)arg1 + var1 * 0x400;
197void _ipu_sync(
void )
212 if ((
int)((((var0 & 0xff00) >> 1) + ((var0 & 0x30000) >> 9)) - (var0 & 0x7f)) < 0x20)
225 if (s_SetDMA_func(s_SetDMA_arg) == 0)
229 s_DataBuf[1] = 0x1b7;
236u32 _ipu_sync_data(
void )
245 while (0x1f < (((var3 & 0xff00) >> 1) + ((var3 & 0x30000) >> 9)) - (var3 & 0x7f))
256 if (s_SetDMA_func(s_SetDMA_arg) == 0)
268unsigned int _ipu_get_bits(
unsigned int arg0 )
271 if (s_DataBuf[0] < arg0)
274 s_DataBuf[1] = _ipu_sync_data();
278 u32 var3 = s_DataBuf[1] >> (-arg0 & 0x1f);
279 s_DataBuf[0] = s_DataBuf[0] - arg0;
280 s_DataBuf[1] = s_DataBuf[1] << (arg0 & 0x1f);
284unsigned int _MPEG_GetBits (
unsigned int arg0 )
286 return _ipu_get_bits(arg0);
289unsigned int _ipu_show_bits (
unsigned int arg0 )
291 if (s_DataBuf[0] < arg0)
295 s_DataBuf[1] = _ipu_sync_data();
298 return s_DataBuf[1] >> (-arg0 & 0x1f);
301unsigned int _MPEG_ShowBits (
unsigned int arg0 )
303 return _ipu_show_bits(arg0);
306void _ipu_align_bits(
void )
316void _MPEG_AlignBits (
void )
318 return _ipu_align_bits();
321unsigned int _MPEG_NextStartCode (
void )
324 while (_MPEG_ShowBits(0x18) != 1)
328 return _MPEG_ShowBits(0x20);
331void _MPEG_SetDefQM (
int arg0 )
377void _MPEG_SetQM (
int arg0 )
384int _MPEG_GetMBAI (
void )
392 var4 = _ipu_sync_data();
409 return var5 + (int)var4;
412int _MPEG_GetMBType (
void )
416 u32 var4 = _ipu_sync_data();
426int _MPEG_GetMotionCode (
void )
430 u32 var4 = _ipu_sync_data();
444int _MPEG_GetDMVector (
void )
448 u32 var4 = _ipu_sync_data();
455void _MPEG_SetIDCP (
void )
457 unsigned int var1 = _MPEG_GetBits(2);
461void _MPEG_SetQSTIVFAS (
void )
463 unsigned int var1 = _MPEG_GetBits(1);
464 unsigned int var2 = _MPEG_GetBits(1);
465 unsigned int var3 = _MPEG_GetBits(1);
469void _MPEG_SetPCT (
unsigned int arg0 )
481void _MPEG_BDEC (
int arg0,
int arg1,
int arg2,
int arg3,
void* arg4 )
483 *
R_EE_D3_MADR = ((uint32_t)arg4 & ~0xf0000000) | 0x80000000;
487 *
R_EE_IPU_CMD = arg0 << 0x1b | 0x20000000 | arg1 << 0x1a | arg2 << 0x19 | arg3 << 0x10;
490int _MPEG_WaitBDEC (
void )
520 asm volatile (
"mfc0\t%0, $12" :
"=r" (eie));
536 u8* var00 = (u8*)arg0;
543 u64 var5 = (uint64_t)var3;
544 if (arg2 >> 0x1f < 1)
547 var5 = ((u64)(arg2 >> 0x1f) << 32) | var3;
555 u32 *var2 = (u32 *)((u32)&s_DMAPack | 0x20000000);
560 u8 * var1 = var01->m_pSrc;
562 var6[0] = 0x30000030;
564 var6[4] = 0x30000030;
565 var6[5] = (u32)var1 + arg3 * 0x180;
566 var01->m_pSrc = var00;
574 var01->MC_Luma = (
void *)0x0;
585 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
589 "pnor %[reg1], $zero, $zero\n"
592 m_pMBDstY = a1->m_pMBDstY;
597 "psrlh %[reg1], %[reg1], 8\n"
602 reg2 = ((u128 *)m_pSrc)[0];
603 reg9 = ((u128 *)m_pSrc)[1];
604 reg8 = ((u128 *)m_pSrc)[2];
605 reg7 = ((u128 *)m_pSrc)[3];
607 reg3 = ((u128 *)m_pSrc)[4];
608 reg4 = ((u128 *)m_pSrc)[5];
609 reg5 = ((u128 *)m_pSrc)[6];
610 reg6 = ((u128 *)m_pSrc)[7];
614 "pmaxh %[reg2], $zero, %[reg2]\n"
615 "pmaxh %[reg9], $zero, %[reg9]\n"
616 "pmaxh %[reg8], $zero, %[reg8]\n"
617 "pmaxh %[reg7], $zero, %[reg7]\n"
618 "pmaxh %[reg3], $zero, %[reg3]\n"
619 "pmaxh %[reg4], $zero, %[reg4]\n"
620 "pmaxh %[reg5], $zero, %[reg5]\n"
621 "pmaxh %[reg6], $zero, %[reg6]\n"
622 "pminh %[reg2], %[reg1], %[reg2]\n"
623 "pminh %[reg9], %[reg1], %[reg9]\n"
624 "pminh %[reg8], %[reg1], %[reg8]\n"
625 "pminh %[reg7], %[reg1], %[reg7]\n"
626 "pminh %[reg3], %[reg1], %[reg3]\n"
627 "pminh %[reg4], %[reg1], %[reg4]\n"
628 "pminh %[reg5], %[reg1], %[reg5]\n"
629 "pminh %[reg6], %[reg1], %[reg6]\n"
630 "ppacb %[reg2], %[reg9], %[reg2]\n"
631 "ppacb %[reg8], %[reg7], %[reg8]\n"
632 "ppacb %[reg3], %[reg4], %[reg3]\n"
633 "ppacb %[reg5], %[reg6], %[reg5]\n"
634 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
637 ((u128 *)m_pMBDstY)[0] = reg2;
638 ((u128 *)m_pMBDstY)[1] = reg8;
639 ((u128 *)m_pMBDstY)[2] = reg3;
640 ((u128 *)m_pMBDstY)[3] = reg5;
651 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
655 "pnor %[reg1], $zero, $zero\n"
658 m_pMBDstY = a1->m_pMBDstY;
663 "psrlh %[reg1], %[reg1], 8\n"
668 reg2 = ((u128 *)m_pSrc)[0x00];
669 reg9 = ((u128 *)m_pSrc)[0x01];
670 reg8 = ((u128 *)m_pSrc)[0x02];
671 reg7 = ((u128 *)m_pSrc)[0x03];
673 reg3 = ((u128 *)m_pSrc)[0x10];
674 reg4 = ((u128 *)m_pSrc)[0x11];
675 reg5 = ((u128 *)m_pSrc)[0x12];
676 reg6 = ((u128 *)m_pSrc)[0x13];
680 "pmaxh %[reg2], $zero, %[reg2]\n"
681 "pmaxh %[reg9], $zero, %[reg9]\n"
682 "pmaxh %[reg8], $zero, %[reg8]\n"
683 "pmaxh %[reg7], $zero, %[reg7]\n"
684 "pmaxh %[reg3], $zero, %[reg3]\n"
685 "pmaxh %[reg4], $zero, %[reg4]\n"
686 "pmaxh %[reg5], $zero, %[reg5]\n"
687 "pmaxh %[reg6], $zero, %[reg6]\n"
688 "pminh %[reg2], %[reg1], %[reg2]\n"
689 "pminh %[reg9], %[reg1], %[reg9]\n"
690 "pminh %[reg8], %[reg1], %[reg8]\n"
691 "pminh %[reg7], %[reg1], %[reg7]\n"
692 "pminh %[reg3], %[reg1], %[reg3]\n"
693 "pminh %[reg4], %[reg1], %[reg4]\n"
694 "pminh %[reg5], %[reg1], %[reg5]\n"
695 "pminh %[reg6], %[reg1], %[reg6]\n"
696 "ppacb %[reg2], %[reg9], %[reg2]\n"
697 "ppacb %[reg8], %[reg7], %[reg8]\n"
698 "ppacb %[reg3], %[reg4], %[reg3]\n"
699 "ppacb %[reg5], %[reg6], %[reg5]\n"
700 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
703 ((u128 *)m_pMBDstY)[0] = reg2;
704 ((u128 *)m_pMBDstY)[1] = reg3;
705 ((u128 *)m_pMBDstY)[2] = reg8;
706 ((u128 *)m_pMBDstY)[3] = reg5;
713 reg2 = ((u128 *)m_pSrc)[0x10];
714 reg9 = ((u128 *)m_pSrc)[0x11];
715 reg8 = ((u128 *)m_pSrc)[0x12];
716 reg7 = ((u128 *)m_pSrc)[0x13];
718 reg3 = ((u128 *)m_pSrc)[0x14];
719 reg4 = ((u128 *)m_pSrc)[0x15];
720 reg5 = ((u128 *)m_pSrc)[0x16];
721 reg6 = ((u128 *)m_pSrc)[0x17];
725 "pmaxh %[reg2], $zero, %[reg2]\n"
726 "pmaxh %[reg9], $zero, %[reg9]\n"
727 "pmaxh %[reg8], $zero, %[reg8]\n"
728 "pmaxh %[reg7], $zero, %[reg7]\n"
729 "pmaxh %[reg3], $zero, %[reg3]\n"
730 "pmaxh %[reg4], $zero, %[reg4]\n"
731 "pmaxh %[reg5], $zero, %[reg5]\n"
732 "pmaxh %[reg6], $zero, %[reg6]\n"
733 "pminh %[reg2], %[reg1], %[reg2]\n"
734 "pminh %[reg9], %[reg1], %[reg9]\n"
735 "pminh %[reg8], %[reg1], %[reg8]\n"
736 "pminh %[reg7], %[reg1], %[reg7]\n"
737 "pminh %[reg3], %[reg1], %[reg3]\n"
738 "pminh %[reg4], %[reg1], %[reg4]\n"
739 "pminh %[reg5], %[reg1], %[reg5]\n"
740 "pminh %[reg6], %[reg1], %[reg6]\n"
741 "ppacb %[reg2], %[reg9], %[reg2]\n"
742 "ppacb %[reg8], %[reg7], %[reg8]\n"
743 "ppacb %[reg3], %[reg4], %[reg3]\n"
744 "ppacb %[reg5], %[reg6], %[reg5]\n"
745 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
748 ((u128 *)m_pMBDstY)[0] = reg2;
749 ((u128 *)m_pMBDstY)[1] = reg8;
750 ((u128 *)m_pMBDstY)[2] = reg3;
751 ((u128 *)m_pMBDstY)[3] = reg5;
764 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
768 "pnor %[reg1], $zero, $zero\n"
771 m_pMBDstY = a1->m_pMBDstY;
774 v28 = &m_pMBDstY[a1->m_Stride];
777 "psrlh %[reg1], %[reg1], 8\n"
782 reg2 = ((u128 *)m_pSrc)[0x00];
783 reg9 = ((u128 *)m_pSrc)[0x01];
784 reg8 = ((u128 *)m_pSrc)[0x02];
785 reg7 = ((u128 *)m_pSrc)[0x03];
787 reg3 = ((u128 *)m_pSrc)[0x10];
788 reg4 = ((u128 *)m_pSrc)[0x11];
789 reg5 = ((u128 *)m_pSrc)[0x12];
790 reg6 = ((u128 *)m_pSrc)[0x13];
794 "pmaxh %[reg2], $zero, %[reg2]\n"
795 "pmaxh %[reg9], $zero, %[reg9]\n"
796 "pmaxh %[reg8], $zero, %[reg8]\n"
797 "pmaxh %[reg7], $zero, %[reg7]\n"
798 "pmaxh %[reg3], $zero, %[reg3]\n"
799 "pmaxh %[reg4], $zero, %[reg4]\n"
800 "pmaxh %[reg5], $zero, %[reg5]\n"
801 "pmaxh %[reg6], $zero, %[reg6]\n"
802 "pminh %[reg2], %[reg1], %[reg2]\n"
803 "pminh %[reg9], %[reg1], %[reg9]\n"
804 "pminh %[reg8], %[reg1], %[reg8]\n"
805 "pminh %[reg7], %[reg1], %[reg7]\n"
806 "pminh %[reg3], %[reg1], %[reg3]\n"
807 "pminh %[reg4], %[reg1], %[reg4]\n"
808 "pminh %[reg5], %[reg1], %[reg5]\n"
809 "pminh %[reg6], %[reg1], %[reg6]\n"
810 "ppacb %[reg2], %[reg9], %[reg2]\n"
811 "ppacb %[reg8], %[reg7], %[reg8]\n"
812 "ppacb %[reg3], %[reg4], %[reg3]\n"
813 "ppacb %[reg5], %[reg6], %[reg5]\n"
814 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
817 ((u128 *)m_pMBDstY)[0x00] = reg2;
818 ((u128 *)m_pMBDstY)[0x02] = reg8;
820 ((u128 *)v28)[0x00] = reg3;
821 ((u128 *)v28)[0x02] = reg5;
825 m_pMBDstCbCr = a1->m_pMBDstCbCr;
827 v28 = &m_pMBDstCbCr[a1->m_Stride];
830 reg2 = ((u128 *)m_pSrc)[0x10];
831 reg9 = ((u128 *)m_pSrc)[0x11];
832 reg8 = ((u128 *)m_pSrc)[0x12];
833 reg7 = ((u128 *)m_pSrc)[0x13];
835 reg3 = ((u128 *)m_pSrc)[0x14];
836 reg4 = ((u128 *)m_pSrc)[0x15];
837 reg5 = ((u128 *)m_pSrc)[0x16];
838 reg6 = ((u128 *)m_pSrc)[0x17];
842 "pmaxh %[reg2], $zero, %[reg2]\n"
843 "pmaxh %[reg9], $zero, %[reg9]\n"
844 "pmaxh %[reg8], $zero, %[reg8]\n"
845 "pmaxh %[reg7], $zero, %[reg7]\n"
846 "pmaxh %[reg3], $zero, %[reg3]\n"
847 "pmaxh %[reg4], $zero, %[reg4]\n"
848 "pmaxh %[reg5], $zero, %[reg5]\n"
849 "pmaxh %[reg6], $zero, %[reg6]\n"
850 "pminh %[reg2], %[reg1], %[reg2]\n"
851 "pminh %[reg9], %[reg1], %[reg9]\n"
852 "pminh %[reg8], %[reg1], %[reg8]\n"
853 "pminh %[reg7], %[reg1], %[reg7]\n"
854 "pminh %[reg3], %[reg1], %[reg3]\n"
855 "pminh %[reg4], %[reg1], %[reg4]\n"
856 "pminh %[reg5], %[reg1], %[reg5]\n"
857 "pminh %[reg6], %[reg1], %[reg6]\n"
858 "ppacb %[reg2], $zero, %[reg2]\n"
859 "ppacb %[reg9], $zero, %[reg9]\n"
860 "ppacb %[reg8], $zero, %[reg8]\n"
861 "ppacb %[reg7], $zero, %[reg7]\n"
862 "ppacb %[reg3], $zero, %[reg3]\n"
863 "ppacb %[reg4], $zero, %[reg4]\n"
864 "ppacb %[reg5], $zero, %[reg5]\n"
865 "ppacb %[reg6], $zero, %[reg6]\n"
866 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
869 ((u64 *)m_pMBDstCbCr)[0x00] = reg2;
870 ((u64 *)m_pMBDstCbCr)[0x02] = reg9;
871 ((u64 *)m_pMBDstCbCr)[0x04] = reg8;
872 ((u64 *)m_pMBDstCbCr)[0x06] = reg7;
873 ((u64 *)v28)[0x00] = reg3;
874 ((u64 *)v28)[0x02] = reg4;
875 ((u64 *)v28)[0x04] = reg5;
876 ((u64 *)v28)[0x06] = reg6;
889 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
893 "pnor %[reg1], $zero, $zero\n"
896 m_pMBDstY = a1->m_pMBDstY;
897 m_pSPRBlk = a1->m_pSPRBlk;
898 m_pSPRRes = a1->m_pSPRRes;
902 "psrlh %[reg1], %[reg1], 8\n"
907 reg2 = ((u128 *)m_pSPRBlk)[0x00];
908 reg9 = ((u128 *)m_pSPRBlk)[0x01];
909 reg8 = ((u128 *)m_pSPRBlk)[0x02];
910 reg7 = ((u128 *)m_pSPRBlk)[0x03];
912 reg3 = ((u128 *)m_pSPRRes)[0x00];
913 reg4 = ((u128 *)m_pSPRRes)[0x01];
914 reg5 = ((u128 *)m_pSPRRes)[0x02];
915 reg6 = ((u128 *)m_pSPRRes)[0x03];
918 "paddh %[reg2], %[reg2], %[reg3]\n"
919 "paddh %[reg9], %[reg9], %[reg4]\n"
920 "paddh %[reg8], %[reg8], %[reg5]\n"
921 "paddh %[reg7], %[reg7], %[reg6]\n"
922 "pmaxh %[reg2], $zero, %[reg2]\n"
923 "pmaxh %[reg9], $zero, %[reg9]\n"
924 "pmaxh %[reg8], $zero, %[reg8]\n"
925 "pmaxh %[reg7], $zero, %[reg7]\n"
926 "pminh %[reg2], %[reg1], %[reg2]\n"
927 "pminh %[reg9], %[reg1], %[reg9]\n"
928 "pminh %[reg8], %[reg1], %[reg8]\n"
929 "pminh %[reg7], %[reg1], %[reg7]\n"
930 "ppacb %[reg2], %[reg9], %[reg2]\n"
931 "ppacb %[reg8], %[reg7], %[reg8]\n"
932 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
935 ((u128 *)m_pMBDstY)[0x00] = reg2;
936 ((u128 *)m_pMBDstY)[0x01] = reg8;
937 reg3 = ((u128 *)m_pSPRBlk)[0x04];
938 reg4 = ((u128 *)m_pSPRBlk)[0x05];
939 reg5 = ((u128 *)m_pSPRBlk)[0x06];
940 reg6 = ((u128 *)m_pSPRBlk)[0x07];
942 reg2 = ((u128 *)m_pSPRRes)[0x04];
943 reg9 = ((u128 *)m_pSPRRes)[0x05];
944 reg8 = ((u128 *)m_pSPRRes)[0x06];
945 reg7 = ((u128 *)m_pSPRRes)[0x07];
949 "paddh %[reg3], %[reg3], %[reg2]\n"
950 "paddh %[reg4], %[reg4], %[reg9]\n"
951 "paddh %[reg5], %[reg5], %[reg8]\n"
952 "paddh %[reg6], %[reg6], %[reg7]\n"
953 "pmaxh %[reg3], $zero, %[reg3]\n"
954 "pmaxh %[reg4], $zero, %[reg4]\n"
955 "pmaxh %[reg5], $zero, %[reg5]\n"
956 "pmaxh %[reg6], $zero, %[reg6]\n"
957 "pminh %[reg3], %[reg1], %[reg3]\n"
958 "pminh %[reg4], %[reg1], %[reg4]\n"
959 "pminh %[reg5], %[reg1], %[reg5]\n"
960 "pminh %[reg6], %[reg1], %[reg6]\n"
961 "ppacb %[reg3], %[reg4], %[reg3]\n"
962 "ppacb %[reg5], %[reg6], %[reg5]\n"
963 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
966 ((u128 *)m_pMBDstY)[0x02] = reg3;
967 ((u128 *)m_pMBDstY)[0x03] = reg5;
981 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
985 "pnor %[reg1], $zero, $zero\n"
988 m_pMBDstY = a1->m_pMBDstY;
989 m_pSPRBlk = a1->m_pSPRBlk;
990 m_pSPRRes = a1->m_pSPRRes;
994 "psrlh %[reg1], %[reg1], 8\n"
997 v6 = &m_pMBDstY[a1->m_Stride];
1000 reg2 = ((u128 *)m_pSPRBlk)[0x00];
1001 reg9 = ((u128 *)m_pSPRBlk)[0x01];
1002 reg8 = ((u128 *)m_pSPRBlk)[0x02];
1003 reg7 = ((u128 *)m_pSPRBlk)[0x03];
1005 reg3 = ((u128 *)m_pSPRRes)[0x00];
1006 reg4 = ((u128 *)m_pSPRRes)[0x01];
1007 reg5 = ((u128 *)m_pSPRRes)[0x02];
1008 reg6 = ((u128 *)m_pSPRRes)[0x03];
1011 "paddh %[reg2], %[reg2], %[reg3]\n"
1012 "paddh %[reg9], %[reg9], %[reg4]\n"
1013 "paddh %[reg8], %[reg8], %[reg5]\n"
1014 "paddh %[reg7], %[reg7], %[reg6]\n"
1015 "pmaxh %[reg2], $zero, %[reg2]\n"
1016 "pmaxh %[reg9], $zero, %[reg9]\n"
1017 "pmaxh %[reg8], $zero, %[reg8]\n"
1018 "pmaxh %[reg7], $zero, %[reg7]\n"
1019 "pminh %[reg2], %[reg1], %[reg2]\n"
1020 "pminh %[reg9], %[reg1], %[reg9]\n"
1021 "pminh %[reg8], %[reg1], %[reg8]\n"
1022 "pminh %[reg7], %[reg1], %[reg7]\n"
1023 "ppacb %[reg2], %[reg9], %[reg2]\n"
1024 "ppacb %[reg8], %[reg7], %[reg8]\n"
1025 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1028 ((u128 *)m_pMBDstY)[0] = reg2;
1029 ((u128 *)m_pMBDstY)[2] = reg8;
1030 reg3 = ((u128 *)m_pSPRBlk)[0x10];
1031 reg4 = ((u128 *)m_pSPRBlk)[0x11];
1032 reg5 = ((u128 *)m_pSPRBlk)[0x12];
1033 reg6 = ((u128 *)m_pSPRBlk)[0x13];
1035 reg2 = ((u128 *)m_pSPRRes)[0x10];
1036 reg9 = ((u128 *)m_pSPRRes)[0x11];
1037 reg8 = ((u128 *)m_pSPRRes)[0x12];
1038 reg7 = ((u128 *)m_pSPRRes)[0x13];
1041 "paddh %[reg3], %[reg3], %[reg2]\n"
1042 "paddh %[reg4], %[reg4], %[reg9]\n"
1043 "paddh %[reg5], %[reg5], %[reg8]\n"
1044 "paddh %[reg6], %[reg6], %[reg7]\n"
1045 "pmaxh %[reg3], $zero, %[reg3]\n"
1046 "pmaxh %[reg4], $zero, %[reg4]\n"
1047 "pmaxh %[reg5], $zero, %[reg5]\n"
1048 "pmaxh %[reg6], $zero, %[reg6]\n"
1049 "pminh %[reg3], %[reg1], %[reg3]\n"
1050 "pminh %[reg4], %[reg1], %[reg4]\n"
1051 "pminh %[reg5], %[reg1], %[reg5]\n"
1052 "pminh %[reg6], %[reg1], %[reg6]\n"
1053 "ppacb %[reg3], %[reg4], %[reg3]\n"
1054 "ppacb %[reg5], %[reg6], %[reg5]\n"
1055 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1058 ((u128 *)v6)[0x00] = reg3;
1059 ((u128 *)v6)[0x02] = reg5;
1063 while (
count > 0 );
1064 m_pMBDstCbCr = a1->m_pMBDstCbCr;
1066 v6 = &m_pMBDstCbCr[a1->m_Stride];
1069 reg2 = ((u128 *)m_pSPRBlk)[0x10];
1070 reg9 = ((u128 *)m_pSPRBlk)[0x11];
1071 reg8 = ((u128 *)m_pSPRBlk)[0x12];
1072 reg7 = ((u128 *)m_pSPRBlk)[0x13];
1074 reg3 = ((u128 *)m_pSPRRes)[0x10];
1075 reg4 = ((u128 *)m_pSPRRes)[0x11];
1076 reg5 = ((u128 *)m_pSPRRes)[0x12];
1077 reg6 = ((u128 *)m_pSPRRes)[0x13];
1080 "paddh %[reg2], %[reg2], %[reg3]\n"
1081 "paddh %[reg9], %[reg9], %[reg4]\n"
1082 "paddh %[reg8], %[reg8], %[reg5]\n"
1083 "paddh %[reg7], %[reg7], %[reg6]\n"
1084 "pmaxh %[reg2], $zero, %[reg2]\n"
1085 "pmaxh %[reg9], $zero, %[reg9]\n"
1086 "pmaxh %[reg8], $zero, %[reg8]\n"
1087 "pmaxh %[reg7], $zero, %[reg7]\n"
1088 "pminh %[reg2], %[reg1], %[reg2]\n"
1089 "pminh %[reg9], %[reg1], %[reg9]\n"
1090 "pminh %[reg8], %[reg1], %[reg8]\n"
1091 "pminh %[reg7], %[reg1], %[reg7]\n"
1092 "ppacb %[reg2], $zero, %[reg2]\n"
1093 "ppacb %[reg9], $zero, %[reg9]\n"
1094 "ppacb %[reg8], $zero, %[reg8]\n"
1095 "ppacb %[reg7], $zero, %[reg7]\n"
1096 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1099 ((u64 *)m_pMBDstCbCr)[0] = reg2;
1100 ((u64 *)m_pMBDstCbCr)[2] = reg9;
1101 ((u64 *)m_pMBDstCbCr)[4] = reg8;
1102 ((u64 *)m_pMBDstCbCr)[6] = reg7;
1103 reg3 = ((u128 *)m_pSPRBlk)[0x14];
1104 reg4 = ((u128 *)m_pSPRBlk)[0x15];
1105 reg5 = ((u128 *)m_pSPRBlk)[0x16];
1106 reg6 = ((u128 *)m_pSPRBlk)[0x17];
1108 reg2 = ((u128 *)m_pSPRRes)[0x14];
1109 reg9 = ((u128 *)m_pSPRRes)[0x15];
1110 reg8 = ((u128 *)m_pSPRRes)[0x16];
1111 reg7 = ((u128 *)m_pSPRRes)[0x17];
1114 "paddh %[reg3], %[reg3], %[reg2]\n"
1115 "paddh %[reg4], %[reg4], %[reg9]\n"
1116 "paddh %[reg5], %[reg5], %[reg8]\n"
1117 "paddh %[reg6], %[reg6], %[reg7]\n"
1118 "pmaxh %[reg3], $zero, %[reg3]\n"
1119 "pmaxh %[reg4], $zero, %[reg4]\n"
1120 "pmaxh %[reg5], $zero, %[reg5]\n"
1121 "pmaxh %[reg6], $zero, %[reg6]\n"
1122 "pminh %[reg3], %[reg1], %[reg3]\n"
1123 "pminh %[reg4], %[reg1], %[reg4]\n"
1124 "pminh %[reg5], %[reg1], %[reg5]\n"
1125 "pminh %[reg6], %[reg1], %[reg6]\n"
1126 "ppacb %[reg3], $zero, %[reg3]\n"
1127 "ppacb %[reg4], $zero, %[reg4]\n"
1128 "ppacb %[reg5], $zero, %[reg5]\n"
1129 "ppacb %[reg6], $zero, %[reg6]\n"
1130 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1133 ((u64 *)v6)[0x00] = reg3;
1134 ((u64 *)v6)[0x02] = reg4;
1135 ((u64 *)v6)[0x04] = reg5;
1136 ((u64 *)v6)[0x06] = reg6;
1140 while (
count > 0 );
1150 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
1154 "pnor %[reg1], $zero, $zero\n"
1157 m_pSPRBlk = a1->m_pSPRBlk;
1158 m_pSPRRes = a1->m_pSPRRes;
1159 m_pMBDstY = a1->m_pMBDstY;
1163 "psrlh %[reg1], %[reg1], 8\n"
1168 reg2 = ((u128 *)m_pSPRBlk)[0x00];
1169 reg9 = ((u128 *)m_pSPRBlk)[0x01];
1170 reg8 = ((u128 *)m_pSPRBlk)[0x02];
1171 reg7 = ((u128 *)m_pSPRBlk)[0x03];
1173 reg3 = ((u128 *)m_pSPRRes)[0x00];
1174 reg4 = ((u128 *)m_pSPRRes)[0x01];
1175 reg5 = ((u128 *)m_pSPRRes)[0x10];
1176 reg6 = ((u128 *)m_pSPRRes)[0x11];
1179 "paddh %[reg2], %[reg2], %[reg3]\n"
1180 "paddh %[reg9], %[reg9], %[reg4]\n"
1181 "paddh %[reg8], %[reg8], %[reg5]\n"
1182 "paddh %[reg7], %[reg7], %[reg6]\n"
1183 "pmaxh %[reg2], $zero, %[reg2]\n"
1184 "pmaxh %[reg9], $zero, %[reg9]\n"
1185 "pmaxh %[reg8], $zero, %[reg8]\n"
1186 "pmaxh %[reg7], $zero, %[reg7]\n"
1187 "pminh %[reg2], %[reg1], %[reg2]\n"
1188 "pminh %[reg9], %[reg1], %[reg9]\n"
1189 "pminh %[reg8], %[reg1], %[reg8]\n"
1190 "pminh %[reg7], %[reg1], %[reg7]\n"
1191 "ppacb %[reg2], %[reg9], %[reg2]\n"
1192 "ppacb %[reg8], %[reg7], %[reg8]\n"
1193 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1196 ((u128 *)m_pMBDstY)[0x00] = reg2;
1197 ((u128 *)m_pMBDstY)[0x01] = reg8;
1198 reg3 = ((u128 *)m_pSPRBlk)[0x04];
1199 reg4 = ((u128 *)m_pSPRBlk)[0x05];
1200 reg5 = ((u128 *)m_pSPRBlk)[0x06];
1201 reg6 = ((u128 *)m_pSPRBlk)[0x07];
1203 reg2 = ((u128 *)m_pSPRRes)[0x02];
1204 reg9 = ((u128 *)m_pSPRRes)[0x03];
1205 reg8 = ((u128 *)m_pSPRRes)[0x12];
1206 reg7 = ((u128 *)m_pSPRRes)[0x13];
1209 "paddh %[reg3], %[reg3], %[reg2]\n"
1210 "paddh %[reg4], %[reg4], %[reg9]\n"
1211 "paddh %[reg5], %[reg5], %[reg8]\n"
1212 "paddh %[reg6], %[reg6], %[reg7]\n"
1213 "pmaxh %[reg3], $zero, %[reg3]\n"
1214 "pmaxh %[reg4], $zero, %[reg4]\n"
1215 "pmaxh %[reg5], $zero, %[reg5]\n"
1216 "pmaxh %[reg6], $zero, %[reg6]\n"
1217 "pminh %[reg3], %[reg1], %[reg3]\n"
1218 "pminh %[reg4], %[reg1], %[reg4]\n"
1219 "pminh %[reg5], %[reg1], %[reg5]\n"
1220 "pminh %[reg6], %[reg1], %[reg6]\n"
1221 "ppacb %[reg3], %[reg4], %[reg3]\n"
1222 "ppacb %[reg5], %[reg6], %[reg5]\n"
1223 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1226 ((u128 *)m_pMBDstY)[0x02] = reg3;
1227 ((u128 *)m_pMBDstY)[0x03] = reg5;
1231 while (
count > 0 );
1232 m_pMBDstCbCr = a1->m_pMBDstCbCr;
1236 reg2 = ((u128 *)m_pSPRBlk)[0x00];
1237 reg9 = ((u128 *)m_pSPRBlk)[0x01];
1238 reg8 = ((u128 *)m_pSPRBlk)[0x02];
1239 reg7 = ((u128 *)m_pSPRBlk)[0x03];
1241 reg3 = ((u128 *)m_pSPRRes)[0x10];
1242 reg4 = ((u128 *)m_pSPRRes)[0x14];
1243 reg5 = ((u128 *)m_pSPRRes)[0x11];
1244 reg6 = ((u128 *)m_pSPRRes)[0x15];
1247 "paddh %[reg2], %[reg2], %[reg3]\n"
1248 "paddh %[reg9], %[reg9], %[reg4]\n"
1249 "paddh %[reg8], %[reg8], %[reg5]\n"
1250 "paddh %[reg7], %[reg7], %[reg6]\n"
1251 "pmaxh %[reg2], $zero, %[reg2]\n"
1252 "pmaxh %[reg9], $zero, %[reg9]\n"
1253 "pmaxh %[reg8], $zero, %[reg8]\n"
1254 "pmaxh %[reg7], $zero, %[reg7]\n"
1255 "pminh %[reg2], %[reg1], %[reg2]\n"
1256 "pminh %[reg9], %[reg1], %[reg9]\n"
1257 "pminh %[reg8], %[reg1], %[reg8]\n"
1258 "pminh %[reg7], %[reg1], %[reg7]\n"
1259 "ppacb %[reg2], %[reg9], %[reg2]\n"
1260 "ppacb %[reg8], %[reg7], %[reg8]\n"
1261 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1264 ((u128 *)m_pMBDstCbCr)[0x00] = reg2;
1265 ((u128 *)m_pMBDstCbCr)[0x01] = reg8;
1266 reg3 = ((u128 *)m_pSPRBlk)[0x04];
1267 reg4 = ((u128 *)m_pSPRBlk)[0x05];
1268 reg5 = ((u128 *)m_pSPRBlk)[0x06];
1269 reg6 = ((u128 *)m_pSPRBlk)[0x07];
1271 reg2 = ((u128 *)m_pSPRRes)[0x12];
1272 reg9 = ((u128 *)m_pSPRRes)[0x16];
1273 reg8 = ((u128 *)m_pSPRRes)[0x13];
1274 reg7 = ((u128 *)m_pSPRRes)[0x17];
1277 "paddh %[reg3], %[reg3], %[reg2]\n"
1278 "paddh %[reg4], %[reg4], %[reg9]\n"
1279 "paddh %[reg5], %[reg5], %[reg8]\n"
1280 "paddh %[reg6], %[reg6], %[reg7]\n"
1281 "pmaxh %[reg3], $zero, %[reg3]\n"
1282 "pmaxh %[reg4], $zero, %[reg4]\n"
1283 "pmaxh %[reg5], $zero, %[reg5]\n"
1284 "pmaxh %[reg6], $zero, %[reg6]\n"
1285 "pminh %[reg3], %[reg1], %[reg3]\n"
1286 "pminh %[reg4], %[reg1], %[reg4]\n"
1287 "pminh %[reg5], %[reg1], %[reg5]\n"
1288 "pminh %[reg6], %[reg1], %[reg6]\n"
1289 "ppacb %[reg3], %[reg4], %[reg3]\n"
1290 "ppacb %[reg5], %[reg6], %[reg5]\n"
1291 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1294 ((u128 *)m_pMBDstCbCr)[0x02] = reg3;
1295 ((u128 *)m_pMBDstCbCr)[0x03] = reg5;
1299 while (
count > 0 );
1306 u8* arg1 = arg0->m_pSrc;
1308 u16* arg2 = (u16 *)arg0->m_pDstY;
1309 int arg3 = arg0->m_X;
1310 int tmp0 = arg0->m_Y;
1311 int tmp1 = arg0->m_H;
1312 int tmp2 = arg0->m_fInt;
1313 int tmp4 = arg0->m_Field;
1318 int var1 = var0 - tmp0;
1319 int tmp3 = var0 << tmp2;
1325 arg0->MC_Luma(arg1, arg2, arg3, tmp3, var1, ta);
1326 arg1 = arg0->m_pSrc;
1327 arg2 = (u16 *)arg0->m_pDstCbCr;
1340 tmp3 = var0 << tmp2;
1345 arg0->MC_Chroma(arg1, arg2, arg3, tmp3, var1, ta);
1350static inline void set_mtsab_to_value(
int value)
1364 "addiu %[tmp], $zero, 1\n"
1382void _MPEG_put_luma(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1394 set_mtsab_to_value(a3);
1399 reg1 = ((u128 *)m_pSrc)[0x00];
1400 reg2 = ((u128 *)m_pSrc)[0x18];
1405 "qfsrv %[reg1], %[reg2], %[reg1]\n"
1406 "pextlb %[reg2], $zero, %[reg1]\n"
1407 "pextub %[reg1], $zero, %[reg1]\n"
1408 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2)
1410 ((u128 *)m_pDstY)[0x00] = reg2;
1411 ((u128 *)m_pDstY)[0x01] = reg1;
1413 while (
count > 0 );
1418 while ( count2 > 0 );
1421void _MPEG_put_chroma(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1427 u128 reg1, reg2, reg3, reg4;
1433 set_mtsab_to_value(a3);
1438 reg1 = ((u64 *)m_pSrc)[0x00];
1439 reg2 = ((u64 *)m_pSrc)[0x01];
1440 reg3 = ((u64 *)m_pSrc)[0x06];
1441 reg4 = ((u64 *)m_pSrc)[0x07];
1446 "pcpyld %[reg1], %[reg3], %[reg1]\n"
1447 "pcpyld %[reg2], %[reg4], %[reg2]\n"
1448 "qfsrv %[reg1], %[reg1], %[reg1]\n"
1449 "qfsrv %[reg2], %[reg2], %[reg2]\n"
1450 "pextlb %[reg1], $zero, %[reg1]\n"
1451 "pextlb %[reg2], $zero, %[reg2]\n"
1452 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2)
1453 : [reg3]
"r"(reg3), [reg4]
"r"(reg4)
1455 ((u128 *)m_pDstCbCr)[0x00] = reg1;
1456 ((u128 *)m_pDstCbCr)[0x08] = reg2;
1458 while (
count > 0 );
1463 while ( count2 > 0 );
1466void _MPEG_put_luma_X(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1472 u128 reg1, reg2, reg3, reg4, reg5;
1480 "pnor %[reg1], $zero, $zero\n"
1481 "psrlh %[reg1], %[reg1], 0xF\n"
1488 reg2 = ((u128 *)m_pSrc)[0x00];
1489 reg3 = ((u128 *)m_pSrc)[0x18];
1490 set_mtsab_to_value(a3);
1493 "qfsrv %[reg4], %[reg3], %[reg2]\n"
1494 "qfsrv %[reg5], %[reg2], %[reg3]\n"
1495 "pextlb %[reg2], $zero, %[reg4]\n"
1496 "pextub %[reg3], $zero, %[reg4]\n"
1497 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"=r"(reg4), [reg5]
"=r"(reg5)
1500 set_mtsab_to_value(1);
1504 "qfsrv %[reg5], %[reg5], %[reg4]\n"
1505 "pextlb %[reg4], $zero, %[reg5]\n"
1506 "pextub %[reg5], $zero, %[reg5]\n"
1507 "paddh %[reg2], %[reg2], %[reg4]\n"
1508 "paddh %[reg3], %[reg3], %[reg5]\n"
1509 "paddh %[reg2], %[reg2], %[reg1]\n"
1510 "paddh %[reg3], %[reg3], %[reg1]\n"
1511 "psrlh %[reg2], %[reg2], 1\n"
1512 "psrlh %[reg3], %[reg3], 1\n"
1513 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5)
1516 ((u128 *)m_pDstY)[0x00] = reg2;
1517 ((u128 *)m_pDstY)[0x01] = reg3;
1519 while (
count > 0 );
1524 while ( count2 > 0 );
1527void _MPEG_put_chroma_X(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1533 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7;
1541 "pnor %[reg1], $zero, $zero\n"
1542 "psrlh %[reg1], %[reg1], 0xF\n"
1549 reg2 = ((u64 *)m_pSrc)[0x00];
1550 reg3 = ((u64 *)m_pSrc)[0x01];
1551 reg4 = ((u64 *)m_pSrc)[0x06];
1552 reg5 = ((u64 *)m_pSrc)[0x07];
1555 "pcpyld %[reg2], %[reg4], %[reg2]\n"
1556 "pcpyld %[reg3], %[reg5], %[reg3]\n"
1557 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5)
1559 set_mtsab_to_value(a3);
1562 "qfsrv %[reg2], %[reg2], %[reg2]\n"
1563 "qfsrv %[reg3], %[reg3], %[reg3]\n"
1564 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3)
1568 set_mtsab_to_value(1);
1571 "qfsrv %[reg7], %[reg2], %[reg2]\n"
1572 "qfsrv %[reg6], %[reg3], %[reg3]\n"
1573 "pextlb %[reg2], $zero, %[reg2]\n"
1574 "pextlb %[reg3], $zero, %[reg3]\n"
1575 "pextlb %[reg7], $zero, %[reg7]\n"
1576 "pextlb %[reg6], $zero, %[reg6]\n"
1577 "paddh %[reg2], %[reg2], %[reg7]\n"
1578 "paddh %[reg3], %[reg3], %[reg6]\n"
1579 "paddh %[reg2], %[reg2], %[reg1]\n"
1580 "paddh %[reg3], %[reg3], %[reg1]\n"
1581 "psrlh %[reg2], %[reg2], 1\n"
1582 "psrlh %[reg3], %[reg3], 1\n"
1583 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg6]
"=r"(reg6), [reg7]
"=r"(reg7)
1586 ((u128 *)m_pDstCbCr)[0x00] = reg2;
1587 ((u128 *)m_pDstCbCr)[0x08] = reg3;
1589 while (
count > 0 );
1594 while ( count2 > 0 );
1597void _MPEG_put_luma_Y(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1603 u128 reg1, reg2, reg3, reg4, reg5, reg6;
1609 set_mtsab_to_value(a3);
1610 reg5 = ((u128 *)m_pSrc)[0x00];
1611 reg6 = ((u128 *)m_pSrc)[0x18];
1612 m_pSrc = &m_pSrc[a4];
1616 "qfsrv %[reg5], %[reg6], %[reg5]\n"
1617 "pextub %[reg6], $zero, %[reg5]\n"
1618 "pextlb %[reg5], $zero, %[reg5]\n"
1619 : [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
1628 reg3 = ((u128 *)m_pSrc)[0x00];
1629 reg4 = ((u128 *)m_pSrc)[0x18];
1634 "qfsrv %[reg3], %[reg4], %[reg3]\n"
1635 "pextub %[reg4], $zero, %[reg3]\n"
1636 "pextlb %[reg3], $zero, %[reg3]\n"
1637 "paddh %[reg2], %[reg4], %[reg6]\n"
1638 "pnor %[reg6], $zero, $zero\n"
1639 "paddh %[reg1], %[reg3], %[reg5]\n"
1640 "psrlh %[reg6], %[reg6], 0xF\n"
1641 "por %[reg5], $zero, %[reg3]\n"
1642 "paddh %[reg1], %[reg1], %[reg6]\n"
1643 "paddh %[reg2], %[reg2], %[reg6]\n"
1644 "por %[reg6], $zero, %[reg4]\n"
1645 "psrlh %[reg1], %[reg1], 1\n"
1646 "psrlh %[reg2], %[reg2], 1\n"
1647 : [reg1]
"=r"(reg1), [reg2]
"=r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
1649 ((u128 *)m_pDstY)[0x00] = reg1;
1650 ((u128 *)m_pDstY)[0x01] = reg2;
1652 while (
count > 0 );
1658 while ( count2 > 0 );
1661void _MPEG_put_chroma_Y(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1667 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9, regA;
1673 set_mtsab_to_value(a3);
1674 reg2 = ((u64 *)m_pSrc)[0x00];
1675 reg3 = ((u64 *)m_pSrc)[0x01];
1676 regA = ((u64 *)m_pSrc)[0x06];
1677 reg9 = ((u64 *)m_pSrc)[0x07];
1680 "pnor %[reg1], $zero, $zero\n"
1683 m_pSrc = &m_pSrc[a4];
1687 "psrlh %[reg1], %[reg1], 0xF\n"
1688 "pcpyld %[reg2], %[regA], %[reg2]\n"
1689 "pcpyld %[reg3], %[reg9], %[reg3]\n"
1690 "qfsrv %[reg2], %[reg2], %[reg2]\n"
1691 "qfsrv %[reg3], %[reg3], %[reg3]\n"
1692 "pextlb %[reg2], $zero, %[reg2]\n"
1693 "pextlb %[reg3], $zero, %[reg3]\n"
1694 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg9]
"+r"(reg9), [regA]
"+r"(regA)
1703 reg4 = ((u64 *)m_pSrc)[0x00];
1704 reg5 = ((u64 *)m_pSrc)[0x01];
1705 reg6 = ((u64 *)m_pSrc)[0x06];
1706 reg7 = ((u64 *)m_pSrc)[0x07];
1711 "pcpyld %[reg4], %[reg6], %[reg4]\n"
1712 "pcpyld %[reg5], %[reg7], %[reg5]\n"
1713 "qfsrv %[reg4], %[reg4], %[reg4]\n"
1714 "qfsrv %[reg5], %[reg5], %[reg5]\n"
1715 "pextlb %[reg4], $zero, %[reg4]\n"
1716 "pextlb %[reg5], $zero, %[reg5]\n"
1717 "paddh %[reg9], %[reg4], %[reg2]\n"
1718 "paddh %[reg8], %[reg5], %[reg3]\n"
1719 "por %[reg2], $zero, %[reg4]\n"
1720 "por %[reg3], $zero, %[reg5]\n"
1721 "paddh %[reg9], %[reg9], %[reg1]\n"
1722 "paddh %[reg8], %[reg8], %[reg1]\n"
1723 "psrlh %[reg9], %[reg9], 1\n"
1724 "psrlh %[reg8], %[reg8], 1\n"
1725 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg8]
"=r"(reg8), [reg9]
"=r"(reg9)
1726 : [reg1]
"r"(reg1), [reg6]
"r"(reg6), [reg7]
"r"(reg7)
1728 ((u128 *)m_pDstCbCr)[0x00] = reg9;
1729 ((u128 *)m_pDstCbCr)[0x08] = reg8;
1731 while (
count > 0 );
1737 while ( count2 > 0 );
1740void _MPEG_put_luma_XY(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1746 u128 reg1, reg2, reg3, reg4, reg5, reg6;
1752 set_mtsab_to_value(a3);
1753 reg2 = ((u128 *)m_pSrc)[0x00];
1754 reg5 = ((u128 *)m_pSrc)[0x18];
1755 m_pSrc = &m_pSrc[a4];
1758 "qfsrv %[reg6], %[reg5], %[reg2]\n"
1759 "qfsrv %[reg1], %[reg2], %[reg5]\n"
1760 : [reg1]
"=r"(reg1), [reg6]
"=r"(reg6)
1761 : [reg2]
"r"(reg2), [reg5]
"r"(reg5)
1766 "pextlb %[reg2], $zero, %[reg6]\n"
1767 "pextub %[reg5], $zero, %[reg6]\n"
1768 : [reg2]
"+r"(reg2), [reg5]
"+r"(reg5)
1771 set_mtsab_to_value(1);
1774 "qfsrv %[reg1], %[reg1], %[reg6]\n"
1775 "pextlb %[reg6], $zero, %[reg1]\n"
1776 "pextub %[reg1], $zero, %[reg1]\n"
1777 "paddh %[reg2], %[reg2], %[reg6]\n"
1778 "paddh %[reg5], %[reg5], %[reg1]\n"
1779 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
1788 reg3 = ((u128 *)m_pSrc)[0x00];
1789 reg4 = ((u128 *)m_pSrc)[0x18];
1790 set_mtsab_to_value(a3);
1794 "qfsrv %[reg6], %[reg4], %[reg3]\n"
1795 "qfsrv %[reg1], %[reg3], %[reg4]\n"
1796 : [reg1]
"+r"(reg1), [reg6]
"+r"(reg6)
1797 : [reg3]
"r"(reg3), [reg4]
"r"(reg4)
1802 "pextlb %[reg3], $zero, %[reg6]\n"
1803 "pextub %[reg4], $zero, %[reg6]\n"
1804 : [reg3]
"=r"(reg3), [reg4]
"=r"(reg4)
1807 set_mtsab_to_value(1);
1810 "qfsrv %[reg1], %[reg1], %[reg6]\n"
1811 "pextlb %[reg6], $zero, %[reg1]\n"
1812 "pextub %[reg1], $zero, %[reg1]\n"
1813 "paddh %[reg3], %[reg3], %[reg6]\n"
1814 "paddh %[reg4], %[reg4], %[reg1]\n"
1815 "paddh %[reg6], %[reg2], %[reg3]\n"
1816 "paddh %[reg1], %[reg5], %[reg4]\n"
1817 "por %[reg2], $zero, %[reg3]\n"
1818 "pnor %[reg3], $zero, $zero\n"
1819 "por %[reg5], $zero, %[reg4]\n"
1820 "psrlh %[reg3], %[reg3], 0xF\n"
1821 "psllh %[reg3], %[reg3], 1\n"
1822 "paddh %[reg6], %[reg6], %[reg3]\n"
1823 "paddh %[reg1], %[reg1], %[reg3]\n"
1824 "psrlh %[reg6], %[reg6], 2\n"
1825 "psrlh %[reg1], %[reg1], 2\n"
1826 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
1828 ((u128 *)m_pDstY)[0x00] = reg6;
1829 ((u128 *)m_pDstY)[0x01] = reg1;
1831 while (
count > 0 );
1837 while ( count2 > 0 );
1840void _MPEG_put_chroma_XY(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1846 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
1852 set_mtsab_to_value(a3);
1855 "pnor %[reg1], $zero, $zero\n"
1858 reg3 = ((u64 *)m_pSrc)[0x00];
1859 reg2 = ((u64 *)m_pSrc)[0x01];
1860 set_mtsab_to_value(1);
1861 reg9 = ((u64 *)m_pSrc)[0x06];
1862 reg8 = ((u64 *)m_pSrc)[0x07];
1865 "pcpyld %[reg3], %[reg9], %[reg3]\n"
1866 "pcpyld %[reg2], %[reg8], %[reg2]\n"
1867 "qfsrv %[reg3], %[reg3], %[reg3]\n"
1868 "qfsrv %[reg2], %[reg2], %[reg2]\n"
1869 "psrlh %[reg1], %[reg1], 0xF\n"
1870 "psllh %[reg1], %[reg1], 1\n"
1871 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg3]
"+r"(reg3)
1872 : [reg8]
"r"(reg8), [reg9]
"r"(reg9)
1874 m_pSrc = &m_pSrc[a4];
1878 "qfsrv %[reg9], %[reg3], %[reg3]\n"
1879 "qfsrv %[reg8], %[reg2], %[reg2]\n"
1880 "pextlb %[reg3], $zero, %[reg3]\n"
1881 "pextlb %[reg2], $zero, %[reg2]\n"
1882 "pextlb %[reg9], $zero, %[reg9]\n"
1883 "pextlb %[reg8], $zero, %[reg8]\n"
1884 "paddh %[reg3], %[reg3], %[reg9]\n"
1885 "paddh %[reg9], %[reg2], %[reg8]\n"
1886 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
1895 reg4 = ((u64 *)m_pSrc)[0x00];
1896 reg6 = ((u64 *)m_pSrc)[0x01];
1897 set_mtsab_to_value(a3);
1898 reg5 = ((u64 *)m_pSrc)[0x06];
1899 reg7 = ((u64 *)m_pSrc)[0x07];
1902 "pcpyld %[reg4], %[reg5], %[reg4]\n"
1903 "pcpyld %[reg6], %[reg7], %[reg6]\n"
1904 "qfsrv %[reg4], %[reg4], %[reg4]\n"
1905 "qfsrv %[reg6], %[reg6], %[reg6]\n"
1906 : [reg4]
"+r"(reg4), [reg6]
"+r"(reg6)
1907 : [reg5]
"r"(reg5), [reg7]
"r"(reg7)
1911 set_mtsab_to_value(1);
1914 "qfsrv %[reg5], %[reg4], %[reg4]\n"
1915 "qfsrv %[reg7], %[reg6], %[reg6]\n"
1916 "pextlb %[reg4], $zero, %[reg4]\n"
1917 "pextlb %[reg6], $zero, %[reg6]\n"
1918 "pextlb %[reg5], $zero, %[reg5]\n"
1919 "pextlb %[reg7], $zero, %[reg7]\n"
1920 "paddh %[reg4], %[reg4], %[reg5]\n"
1921 "paddh %[reg5], %[reg6], %[reg7]\n"
1922 "paddh %[reg6], %[reg3], %[reg4]\n"
1923 "paddh %[reg7], %[reg9], %[reg5]\n"
1924 "por %[reg3], $zero, %[reg4]\n"
1925 "por %[reg9], $zero, %[reg5]\n"
1926 "paddh %[reg6], %[reg6], %[reg1]\n"
1927 "paddh %[reg7], %[reg7], %[reg1]\n"
1928 "psrlh %[reg6], %[reg6], 2\n"
1929 "psrlh %[reg7], %[reg7], 2\n"
1930 : [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg9]
"+r"(reg9)
1933 ((u128 *)m_pDstCbCr)[0x00] = reg6;
1934 ((u128 *)m_pDstCbCr)[0x08] = reg7;
1936 while (
count > 0 );
1942 while ( count2 > 0 );
1945void _MPEG_avg_luma(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
1951 u128 reg1, reg2, reg3, reg4, reg5, reg6;
1957 set_mtsab_to_value(a3);
1962 reg3 = ((u128 *)m_pSrc)[0x00];
1963 reg4 = ((u128 *)m_pSrc)[0x18];
1968 "qfsrv %[reg3], %[reg4], %[reg3]\n"
1969 "pextlb %[reg4], $zero, %[reg3]\n"
1970 "pextub %[reg3], $zero, %[reg3]\n"
1971 : [reg3]
"+r"(reg3), [reg4]
"+r"(reg4)
1973 reg6 = ((u128 *)m_pDstY)[0x00];
1974 reg1 = ((u128 *)m_pDstY)[0x01];
1977 "paddh %[reg4], %[reg4], %[reg6]\n"
1978 "paddh %[reg3], %[reg3], %[reg1]\n"
1979 "pcgth %[reg6], %[reg4], $zero\n"
1980 "pcgth %[reg1], %[reg3], $zero\n"
1981 "pceqh %[reg2], %[reg4], $zero\n"
1982 "pceqh %[reg5], %[reg3], $zero\n"
1983 "psrlh %[reg6], %[reg6], 0xF\n"
1984 "psrlh %[reg1], %[reg1], 0xF\n"
1985 "psrlh %[reg2], %[reg2], 0xF\n"
1986 "psrlh %[reg5], %[reg5], 0xF\n"
1987 "por %[reg6], %[reg6], %[reg2]\n"
1988 "por %[reg1], %[reg1], %[reg5]\n"
1989 "paddh %[reg4], %[reg4], %[reg6]\n"
1990 "paddh %[reg3], %[reg3], %[reg1]\n"
1991 "psrlh %[reg4], %[reg4], 1\n"
1992 "psrlh %[reg3], %[reg3], 1\n"
1993 : [reg1]
"+r"(reg1), [reg2]
"=r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"=r"(reg5), [reg6]
"+r"(reg6)
1995 ((u128 *)m_pDstY)[0x00] = reg4;
1996 ((u128 *)m_pDstY)[0x01] = reg3;
1998 while (
count > 0 );
2003 while ( count2 > 0 );
2006void _MPEG_avg_chroma(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
2012 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8;
2018 set_mtsab_to_value(a3);
2023 reg3 = ((u64 *)m_pSrc)[0x00];
2024 reg4 = ((u64 *)m_pSrc)[0x01];
2026 reg5 = ((u64 *)m_pSrc)[0x06];
2027 reg6 = ((u64 *)m_pSrc)[0x07];
2031 "pcpyld %[reg3], %[reg5], %[reg3]\n"
2032 "pcpyld %[reg4], %[reg6], %[reg4]\n"
2033 "qfsrv %[reg3], %[reg3], %[reg3]\n"
2034 "qfsrv %[reg4], %[reg4], %[reg4]\n"
2035 "pextlb %[reg3], $zero, %[reg3]\n"
2036 "pextlb %[reg4], $zero, %[reg4]\n"
2037 : [reg3]
"+r"(reg3), [reg4]
"+r"(reg4)
2038 : [reg5]
"r"(reg5), [reg6]
"r"(reg6)
2040 reg8 = ((u128 *)m_pDstCbCr)[0x00];
2041 reg7 = ((u128 *)m_pDstCbCr)[0x08];
2044 "paddh %[reg3], %[reg3], %[reg8]\n"
2045 "paddh %[reg4], %[reg4], %[reg7]\n"
2046 "pcgth %[reg8], %[reg3], $zero\n"
2047 "pcgth %[reg7], %[reg4], $zero\n"
2048 "pceqh %[reg2], %[reg3], $zero\n"
2049 "pceqh %[reg1], %[reg4], $zero\n"
2050 "psrlh %[reg8], %[reg8], 0xF\n"
2051 "psrlh %[reg7], %[reg7], 0xF\n"
2052 "psrlh %[reg2], %[reg2], 0xF\n"
2053 "psrlh %[reg1], %[reg1], 0xF\n"
2054 "por %[reg8], %[reg8], %[reg2]\n"
2055 "por %[reg7], %[reg7], %[reg1]\n"
2056 "paddh %[reg3], %[reg3], %[reg8]\n"
2057 "paddh %[reg4], %[reg4], %[reg7]\n"
2058 "psrlh %[reg3], %[reg3], 1\n"
2059 "psrlh %[reg4], %[reg4], 1\n"
2060 : [reg1]
"=r"(reg1), [reg2]
"=r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg7]
"+r"(reg7), [reg8]
"+r"(reg8)
2062 ((u128 *)m_pDstCbCr)[0x00] = reg4;
2063 ((u128 *)m_pDstCbCr)[0x08] = reg3;
2065 while (
count > 0 );
2070 while ( count2 > 0 );
2073void _MPEG_avg_luma_X(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
2079 u128 reg1, reg2, reg3, reg4, reg5, reg6;
2087 "pnor %[reg2], $zero, $zero\n"
2088 "psrlh %[reg2], %[reg2], 0xF\n"
2095 reg3 = ((u128 *)m_pSrc)[0x00];
2096 reg4 = ((u128 *)m_pSrc)[0x18];
2097 set_mtsab_to_value(a3);
2100 "qfsrv %[reg5], %[reg4], %[reg3]\n"
2101 "qfsrv %[reg6], %[reg3], %[reg4]\n"
2102 "pextlb %[reg3], $zero, %[reg5]\n"
2103 "pextub %[reg4], $zero, %[reg5]\n"
2104 : [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"=r"(reg5), [reg6]
"=r"(reg6)
2107 set_mtsab_to_value(1);
2111 "qfsrv %[reg6], %[reg6], %[reg5]\n"
2112 "pextlb %[reg5], $zero, %[reg6]\n"
2113 "pextub %[reg6], $zero, %[reg6]\n"
2114 "paddh %[reg3], %[reg3], %[reg5]\n"
2115 "paddh %[reg4], %[reg4], %[reg6]\n"
2116 "paddh %[reg3], %[reg3], %[reg2]\n"
2117 "paddh %[reg4], %[reg4], %[reg2]\n"
2118 "psrlh %[reg3], %[reg3], 1\n"
2119 "psrlh %[reg4], %[reg4], 1\n"
2120 : [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
2123 reg6 = ((u128 *)m_pDstY)[0x00];
2124 reg1 = ((u128 *)m_pDstY)[0x01];
2127 "paddh %[reg3], %[reg3], %[reg6]\n"
2128 "paddh %[reg4], %[reg4], %[reg1]\n"
2129 "pcgth %[reg6], %[reg3], $zero\n"
2130 "pceqh %[reg1], %[reg3], $zero\n"
2131 "psrlh %[reg6], %[reg6], 0xF\n"
2132 "psrlh %[reg1], %[reg1], 0xF\n"
2133 "por %[reg6], %[reg6], %[reg1]\n"
2134 "paddh %[reg3], %[reg3], %[reg6]\n"
2135 "pcgth %[reg6], %[reg4], $zero\n"
2136 "pceqh %[reg1], %[reg4], $zero\n"
2137 "psrlh %[reg6], %[reg6], 0xF\n"
2138 "psrlh %[reg1], %[reg1], 0xF\n"
2139 "por %[reg6], %[reg6], %[reg1]\n"
2140 "paddh %[reg4], %[reg4], %[reg6]\n"
2141 "psrlh %[reg3], %[reg3], 1\n"
2142 "psrlh %[reg4], %[reg4], 1\n"
2143 : [reg1]
"+r"(reg1), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg6]
"+r"(reg6)
2145 ((u128 *)m_pDstY)[0x00] = reg3;
2146 ((u128 *)m_pDstY)[0x01] = reg4;
2148 while (
count > 0 );
2153 while ( count2 > 0 );
2156void _MPEG_avg_chroma_X(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
2162 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
2170 "pnor %[reg2], $zero, $zero\n"
2171 "psrlh %[reg2], %[reg2], 0xF\n"
2178 reg4 = ((u64 *)m_pSrc)[0x00];
2179 reg5 = ((u64 *)m_pSrc)[0x01];
2180 set_mtsab_to_value(a3);
2181 reg6 = ((u64 *)m_pSrc)[0x06];
2182 reg7 = ((u64 *)m_pSrc)[0x07];
2185 "pcpyld %[reg4], %[reg6], %[reg4]\n"
2186 "pcpyld %[reg5], %[reg7], %[reg5]\n"
2187 "qfsrv %[reg4], %[reg4], %[reg4]\n"
2188 "qfsrv %[reg5], %[reg5], %[reg5]\n"
2189 : [reg4]
"+r"(reg4), [reg5]
"+r"(reg5)
2190 : [reg6]
"r"(reg6), [reg7]
"r"(reg7)
2194 set_mtsab_to_value(1);
2197 "qfsrv %[reg9], %[reg4], %[reg4]\n"
2198 "qfsrv %[reg8], %[reg5], %[reg5]\n"
2199 "pextlb %[reg4], $zero, %[reg4]\n"
2200 "pextlb %[reg5], $zero, %[reg5]\n"
2201 "pextlb %[reg9], $zero, %[reg9]\n"
2202 "pextlb %[reg8], $zero, %[reg8]\n"
2203 "paddh %[reg4], %[reg4], %[reg9]\n"
2204 "paddh %[reg5], %[reg5], %[reg8]\n"
2205 "paddh %[reg4], %[reg4], %[reg2]\n"
2206 "paddh %[reg5], %[reg5], %[reg2]\n"
2207 "psrlh %[reg4], %[reg4], 1\n"
2208 "psrlh %[reg5], %[reg5], 1\n"
2209 : [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg8]
"=r"(reg8), [reg9]
"=r"(reg9)
2212 reg9 = ((u128 *)m_pDstCbCr)[0x00];
2213 reg8 = ((u128 *)m_pDstCbCr)[0x08];
2216 "paddh %[reg4], %[reg4], %[reg9]\n"
2217 "paddh %[reg5], %[reg5], %[reg8]\n"
2218 "pcgth %[reg9], %[reg4], $zero\n"
2219 "pcgth %[reg8], %[reg5], $zero\n"
2220 "pceqh %[reg1], %[reg4], $zero\n"
2221 "pceqh %[reg3], %[reg5], $zero\n"
2222 "psrlh %[reg9], %[reg9], 0xF\n"
2223 "psrlh %[reg8], %[reg8], 0xF\n"
2224 "psrlh %[reg1], %[reg1], 0xF\n"
2225 "psrlh %[reg3], %[reg3], 0xF\n"
2226 "por %[reg9], %[reg9], %[reg1]\n"
2227 "por %[reg8], %[reg8], %[reg3]\n"
2228 "paddh %[reg4], %[reg4], %[reg9]\n"
2229 "paddh %[reg5], %[reg5], %[reg8]\n"
2230 "psrlh %[reg4], %[reg4], 1\n"
2231 "psrlh %[reg5], %[reg5], 1\n"
2232 : [reg1]
"=r"(reg1), [reg3]
"=r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
2234 ((u128 *)m_pDstCbCr)[0x00] = reg4;
2235 ((u128 *)m_pDstCbCr)[0x08] = reg5;
2237 while (
count > 0 );
2242 while ( count2 > 0 );
2245void _MPEG_avg_luma_Y(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
2251 u128 reg1, reg2, reg3, reg4, reg5, reg6;
2257 set_mtsab_to_value(a3);
2258 reg5 = ((u128 *)m_pSrc)[0x00];
2259 reg6 = ((u128 *)m_pSrc)[0x18];
2260 m_pSrc = &m_pSrc[a4];
2264 "qfsrv %[reg5], %[reg6], %[reg5]\n"
2265 "pextub %[reg6], $zero, %[reg5]\n"
2266 "pextlb %[reg5], $zero, %[reg5]\n"
2267 : [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
2276 reg3 = ((u128 *)m_pSrc)[0x00];
2277 reg4 = ((u128 *)m_pSrc)[0x18];
2282 "qfsrv %[reg3], %[reg4], %[reg3]\n"
2283 "pextub %[reg4], $zero, %[reg3]\n"
2284 "pextlb %[reg3], $zero, %[reg3]\n"
2285 "paddh %[reg2], %[reg4], %[reg6]\n"
2286 "pnor %[reg6], $zero, $zero\n"
2287 "paddh %[reg1], %[reg3], %[reg5]\n"
2288 "psrlh %[reg6], %[reg6], 0xF\n"
2289 "por %[reg5], $zero, %[reg3]\n"
2290 "paddh %[reg1], %[reg1], %[reg6]\n"
2291 "paddh %[reg2], %[reg2], %[reg6]\n"
2292 "por %[reg6], $zero, %[reg4]\n"
2293 "psrlh %[reg1], %[reg1], 1\n"
2294 "psrlh %[reg2], %[reg2], 1\n"
2295 : [reg1]
"=r"(reg1), [reg2]
"=r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
2297 reg3 = ((u128 *)m_pDstY)[0x00];
2298 reg4 = ((u128 *)m_pDstY)[0x01];
2301 "paddh %[reg1], %[reg1], %[reg3]\n"
2302 "paddh %[reg2], %[reg2], %[reg4]\n"
2303 "pcgth %[reg3], %[reg1], $zero\n"
2304 "pceqh %[reg4], %[reg1], $zero\n"
2305 "psrlh %[reg3], %[reg3], 0xF\n"
2306 "psrlh %[reg4], %[reg4], 0xF\n"
2307 "por %[reg3], %[reg3], %[reg4]\n"
2308 "paddh %[reg1], %[reg1], %[reg3]\n"
2309 "pcgth %[reg3], %[reg2], $zero\n"
2310 "pceqh %[reg4], %[reg2], $zero\n"
2311 "psrlh %[reg3], %[reg3], 0xF\n"
2312 "psrlh %[reg4], %[reg4], 0xF\n"
2313 "por %[reg3], %[reg3], %[reg4]\n"
2314 "paddh %[reg2], %[reg2], %[reg3]\n"
2315 "psrlh %[reg1], %[reg1], 1\n"
2316 "psrlh %[reg2], %[reg2], 1\n"
2317 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4)
2319 ((u128 *)m_pDstY)[0x00] = reg1;
2320 ((u128 *)m_pDstY)[0x01] = reg2;
2322 while (
count > 0 );
2328 while ( count2 > 0 );
2331void _MPEG_avg_chroma_Y(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
2337 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9, regA;
2343 set_mtsab_to_value(a3);
2344 reg2 = ((u64 *)m_pSrc)[0x00];
2345 reg3 = ((u64 *)m_pSrc)[0x01];
2346 regA = ((u64 *)m_pSrc)[0x06];
2347 reg9 = ((u64 *)m_pSrc)[0x07];
2350 "pnor %[reg1], $zero, $zero\n"
2353 m_pSrc = &m_pSrc[a4];
2357 "psrlh %[reg1], %[reg1], 0xF\n"
2358 "pcpyld %[reg2], %[regA], %[reg2]\n"
2359 "pcpyld %[reg3], %[reg9], %[reg3]\n"
2360 "qfsrv %[reg2], %[reg2], %[reg2]\n"
2361 "qfsrv %[reg3], %[reg3], %[reg3]\n"
2362 "pextlb %[reg2], $zero, %[reg2]\n"
2363 "pextlb %[reg3], $zero, %[reg3]\n"
2364 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg3]
"+r"(reg3)
2365 : [reg9]
"r"(reg9), [regA]
"r"(regA)
2374 reg4 = ((u64 *)m_pSrc)[0x00];
2375 reg5 = ((u64 *)m_pSrc)[0x01];
2377 reg6 = ((u64 *)m_pSrc)[0x06];
2378 reg7 = ((u64 *)m_pSrc)[0x07];
2382 "pcpyld %[reg4], %[reg6], %[reg4]\n"
2383 "pcpyld %[reg5], %[reg7], %[reg5]\n"
2384 "qfsrv %[reg4], %[reg4], %[reg4]\n"
2385 "qfsrv %[reg5], %[reg5], %[reg5]\n"
2386 "pextlb %[reg4], $zero, %[reg4]\n"
2387 "pextlb %[reg5], $zero, %[reg5]\n"
2388 "paddh %[reg9], %[reg4], %[reg2]\n"
2389 "paddh %[reg8], %[reg5], %[reg3]\n"
2390 "por %[reg2], $zero, %[reg4]\n"
2391 "por %[reg3], $zero, %[reg5]\n"
2392 "paddh %[reg9], %[reg9], %[reg1]\n"
2393 "paddh %[reg8], %[reg8], %[reg1]\n"
2394 "psrlh %[reg9], %[reg9], 1\n"
2395 "psrlh %[reg8], %[reg8], 1\n"
2396 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg8]
"=r"(reg8), [reg9]
"=r"(reg9)
2397 : [reg1]
"r"(reg1), [reg6]
"r"(reg6), [reg7]
"r"(reg7)
2399 reg4 = ((u128 *)m_pDstCbCr)[0x00];
2400 reg5 = ((u128 *)m_pDstCbCr)[0x80];
2403 "paddh %[reg9], %[reg9], %[reg4]\n"
2404 "paddh %[reg8], %[reg8], %[reg5]\n"
2405 "pcgth %[reg4], %[reg9], $zero\n"
2406 "pceqh %[reg5], %[reg9], $zero\n"
2407 "psrlh %[reg4], %[reg4], 0xF\n"
2408 "psrlh %[reg5], %[reg5], 0xF\n"
2409 "por %[reg4], %[reg4], %[reg5]\n"
2410 "paddh %[reg9], %[reg9], %[reg4]\n"
2411 "pcgth %[reg4], %[reg8], $zero\n"
2412 "pceqh %[reg5], %[reg8], $zero\n"
2413 "psrlh %[reg4], %[reg4], 0xF\n"
2414 "psrlh %[reg5], %[reg5], 0xF\n"
2415 "por %[reg4], %[reg4], %[reg5]\n"
2416 "paddh %[reg8], %[reg8], %[reg4]\n"
2417 "psrlh %[reg9], %[reg9], 1\n"
2418 "psrlh %[reg8], %[reg8], 1\n"
2419 : [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg8]
"+r"(reg8), [reg9]
"+r"(reg9)
2421 ((u128 *)m_pDstCbCr)[0x00] = reg9;
2422 ((u128 *)m_pDstCbCr)[0x08] = reg8;
2424 while (
count > 0 );
2430 while ( count2 > 0 );
2433void _MPEG_avg_luma_XY(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
2439 u128 reg1, reg2, reg3, reg4, reg5, reg6;
2445 set_mtsab_to_value(a3);
2446 reg2 = ((u128 *)m_pSrc)[0x00];
2447 reg5 = ((u128 *)m_pSrc)[0x18];
2448 m_pSrc = &m_pSrc[a4];
2451 "qfsrv %[reg6], %[reg5], %[reg2]\n"
2452 "qfsrv %[reg1], %[reg2], %[reg5]\n"
2453 : [reg1]
"=r"(reg1), [reg6]
"=r"(reg6)
2454 : [reg2]
"r"(reg2), [reg5]
"r"(reg5)
2459 "pextlb %[reg2], $zero, %[reg6]\n"
2460 "pextub %[reg5], $zero, %[reg6]\n"
2461 : [reg2]
"+r"(reg2), [reg5]
"+r"(reg5)
2464 set_mtsab_to_value(1);
2467 "qfsrv %[reg1], %[reg1], %[reg6]\n"
2468 "pextlb %[reg6], $zero, %[reg1]\n"
2469 "pextub %[reg1], $zero, %[reg1]\n"
2470 "paddh %[reg2], %[reg2], %[reg6]\n"
2471 "paddh %[reg5], %[reg5], %[reg1]\n"
2472 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
2481 reg3 = ((u128 *)m_pSrc)[0x00];
2482 reg4 = ((u128 *)m_pSrc)[0x18];
2483 set_mtsab_to_value(a3);
2487 "qfsrv %[reg6], %[reg4], %[reg3]\n"
2488 "qfsrv %[reg1], %[reg3], %[reg4]\n"
2489 : [reg1]
"=r"(reg1), [reg6]
"=r"(reg6)
2490 : [reg3]
"r"(reg3), [reg4]
"r"(reg4)
2495 "pextlb %[reg3], $zero, %[reg6]\n"
2496 "pextub %[reg4], $zero, %[reg6]\n"
2497 : [reg3]
"=r"(reg3), [reg4]
"=r"(reg4)
2500 set_mtsab_to_value(1);
2503 "qfsrv %[reg1], %[reg1], %[reg6]\n"
2504 "pextlb %[reg6], $zero, %[reg1]\n"
2505 "pextub %[reg1], $zero, %[reg1]\n"
2506 "paddh %[reg3], %[reg3], %[reg6]\n"
2507 "paddh %[reg4], %[reg4], %[reg1]\n"
2508 "paddh %[reg6], %[reg2], %[reg3]\n"
2509 "paddh %[reg1], %[reg5], %[reg4]\n"
2510 "por %[reg2], $zero, %[reg3]\n"
2511 "pnor %[reg3], $zero, $zero\n"
2512 "por %[reg5], $zero, %[reg4]\n"
2513 "psrlh %[reg3], %[reg3], 0xF\n"
2514 "psllh %[reg3], %[reg3], 1\n"
2515 "paddh %[reg6], %[reg6], %[reg3]\n"
2516 "paddh %[reg1], %[reg1], %[reg3]\n"
2517 "psrlh %[reg6], %[reg6], 2\n"
2518 "psrlh %[reg1], %[reg1], 2\n"
2519 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6)
2521 reg3 = ((u128 *)m_pDstY)[0x00];
2522 reg4 = ((u128 *)m_pDstY)[0x01];
2525 "paddh %[reg6], %[reg6], %[reg3]\n"
2526 "paddh %[reg1], %[reg1], %[reg4]\n"
2527 "pcgth %[reg3], %[reg6], $zero\n"
2528 "pceqh %[reg4], %[reg6], $zero\n"
2529 "psrlh %[reg3], %[reg3], 0xF\n"
2530 "psrlh %[reg4], %[reg4], 0xF\n"
2531 "por %[reg3], %[reg3], %[reg4]\n"
2532 "paddh %[reg6], %[reg6], %[reg3]\n"
2533 "pcgth %[reg3], %[reg1], $zero\n"
2534 "pceqh %[reg4], %[reg1], $zero\n"
2535 "psrlh %[reg3], %[reg3], 0xF\n"
2536 "psrlh %[reg4], %[reg4], 0xF\n"
2537 "por %[reg3], %[reg3], %[reg4]\n"
2538 "paddh %[reg1], %[reg1], %[reg3]\n"
2539 "psrlh %[reg6], %[reg6], 1\n"
2540 "psrlh %[reg1], %[reg1], 1\n"
2541 : [reg1]
"+r"(reg1), [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg6]
"+r"(reg6)
2543 ((u128 *)m_pDstY)[0x00] = reg6;
2544 ((u128 *)m_pDstY)[0x01] = reg1;
2546 while (
count > 0 );
2552 while ( count2 > 0 );
2555void _MPEG_avg_chroma_XY(u8 *a1, u16 *a2,
int a3,
int a4,
int var1,
int ta)
2561 u128 reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg8, reg9;
2567 set_mtsab_to_value(a3);
2570 "pnor %[reg1], $zero, $zero\n"
2573 reg3 = ((u64 *)m_pSrc)[0x00];
2574 reg2 = ((u64 *)m_pSrc)[0x01];
2575 set_mtsab_to_value(1);
2576 reg9 = ((u64 *)m_pSrc)[0x06];
2577 reg8 = ((u64 *)m_pSrc)[0x07];
2580 "pcpyld %[reg3], %[reg9], %[reg3]\n"
2581 "pcpyld %[reg2], %[reg8], %[reg2]\n"
2582 "qfsrv %[reg3], %[reg3], %[reg3]\n"
2583 "qfsrv %[reg2], %[reg2], %[reg2]\n"
2584 "psrlh %[reg1], %[reg1], 0xF\n"
2585 "psllh %[reg1], %[reg1], 1\n"
2586 : [reg1]
"+r"(reg1), [reg2]
"+r"(reg2), [reg3]
"+r"(reg3)
2587 : [reg8]
"r"(reg8), [reg9]
"r"(reg9)
2589 m_pSrc = &m_pSrc[a4];
2593 "qfsrv %[reg9], %[reg3], %[reg3]\n"
2594 "qfsrv %[reg8], %[reg2], %[reg2]\n"
2595 "pextlb %[reg3], $zero, %[reg3]\n"
2596 "pextlb %[reg2], $zero, %[reg2]\n"
2597 "pextlb %[reg9], $zero, %[reg9]\n"
2598 "pextlb %[reg8], $zero, %[reg8]\n"
2599 "paddh %[reg3], %[reg3], %[reg9]\n"
2600 "paddh %[reg9], %[reg2], %[reg8]\n"
2601 : [reg2]
"+r"(reg2), [reg3]
"+r"(reg3), [reg8]
"=r"(reg8), [reg9]
"=r"(reg9)
2610 reg4 = ((u64 *)m_pSrc)[0x00];
2611 reg6 = ((u64 *)m_pSrc)[0x01];
2612 set_mtsab_to_value(a3);
2613 reg5 = ((u64 *)m_pSrc)[0x06];
2614 reg7 = ((u64 *)m_pSrc)[0x07];
2617 "pcpyld %[reg4], %[reg5], %[reg4]\n"
2618 "pcpyld %[reg6], %[reg7], %[reg6]\n"
2619 "qfsrv %[reg4], %[reg4], %[reg4]\n"
2620 "qfsrv %[reg6], %[reg6], %[reg6]\n"
2621 : [reg4]
"+r"(reg4), [reg6]
"+r"(reg6)
2622 : [reg5]
"r"(reg5), [reg7]
"r"(reg7)
2626 set_mtsab_to_value(1);
2629 "qfsrv %[reg5], %[reg4], %[reg4]\n"
2630 "qfsrv %[reg7], %[reg6], %[reg6]\n"
2631 "pextlb %[reg4], $zero, %[reg4]\n"
2632 "pextlb %[reg6], $zero, %[reg6]\n"
2633 "pextlb %[reg5], $zero, %[reg5]\n"
2634 "pextlb %[reg7], $zero, %[reg7]\n"
2635 "paddh %[reg4], %[reg4], %[reg5]\n"
2636 "paddh %[reg5], %[reg6], %[reg7]\n"
2637 "paddh %[reg6], %[reg3], %[reg4]\n"
2638 "paddh %[reg7], %[reg9], %[reg5]\n"
2639 "por %[reg3], $zero, %[reg4]\n"
2640 "por %[reg9], $zero, %[reg5]\n"
2641 "paddh %[reg6], %[reg6], %[reg1]\n"
2642 "paddh %[reg7], %[reg7], %[reg1]\n"
2643 "psrlh %[reg6], %[reg6], 2\n"
2644 "psrlh %[reg7], %[reg7], 2\n"
2645 : [reg3]
"+r"(reg3), [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7), [reg9]
"+r"(reg9)
2648 reg4 = ((u128 *)m_pDstCbCr)[0x00];
2649 reg5 = ((u128 *)m_pDstCbCr)[0x08];
2652 "paddh %[reg6], %[reg6], %[reg4]\n"
2653 "paddh %[reg7], %[reg7], %[reg5]\n"
2654 "pcgth %[reg4], %[reg6], $zero\n"
2655 "pceqh %[reg5], %[reg6], $zero\n"
2656 "psrlh %[reg4], %[reg4], 0xF\n"
2657 "psrlh %[reg5], %[reg5], 0xF\n"
2658 "por %[reg4], %[reg4], %[reg5]\n"
2659 "paddh %[reg6], %[reg6], %[reg4]\n"
2660 "pcgth %[reg4], %[reg7], $zero\n"
2661 "pceqh %[reg5], %[reg7], $zero\n"
2662 "psrlh %[reg4], %[reg4], 0xF\n"
2663 "psrlh %[reg5], %[reg5], 0xF\n"
2664 "por %[reg4], %[reg4], %[reg5]\n"
2665 "paddh %[reg7], %[reg7], %[reg4]\n"
2666 "psrlh %[reg6], %[reg6], 1\n"
2667 "psrlh %[reg7], %[reg7], 1\n"
2668 : [reg4]
"+r"(reg4), [reg5]
"+r"(reg5), [reg6]
"+r"(reg6), [reg7]
"+r"(reg7)
2670 ((u128 *)m_pDstCbCr)[0x00] = reg6;
2671 ((u128 *)m_pDstCbCr)[0x08] = reg7;
2673 while (
count > 0 );
2679 while ( count2 > 0 );
u32 count
start sector of fragmented bd/file