?? basic_prediction_mmx.c
字號:
}
Src += Stride;
Dst += Stride;
}
}
/** *** **/
void CopyMBlock(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__
(
"movl %0, %%eax\n"
"movl %2, %%esi\n"
"movl %3, %%edi\n"
"pushl %%ebx\n"
"movl %%eax, %%ebx\n"
"1:\n"
"movl (%%esi), %%eax\n"
"movl %%eax, (%%edi)\n"
"addl $4, %%esi\n"
"addl $4, %%edi\n"
"movl (%%esi), %%eax\n"
"movl %%eax, (%%edi)\n"
"addl $4, %%esi\n"
"addl $4, %%edi\n"
"movl (%%esi), %%eax\n"
"movl %%eax, (%%edi)\n"
"addl $4, %%esi\n"
"addl $4, %%edi\n"
"movl (%%esi), %%eax\n"
"movl %%eax, (%%edi)\n"
"addl %%ebx, %%esi\n"
"addl %%ebx, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "g"(Stride-12), "d"(16), "g" (Src), "g" (Dst)
: "esi", "edi"
);
}
/**/
void CopyMBlockHor(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__ (
"movl %2, %%esi\n"
"movl %3, %%edi\n"
"pushl %%ebx\n"
"1:\n"
"pushl %%edx\n"
CopyBlockHorLoopFast
CopyBlockHorLoopFast
CopyBlockHorLoopFast
CopyBlockHorLoopFast
"popl %%edx\n"
"addl %%ecx, %%esi\n"
"addl %%ecx, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "c"(Stride-16), "d"(16), "g" (Src), "g"(Dst)
: "esi", "edi"
);
}
void CopyMBlockVer(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__ (
"movl %2, %%esi\n"
"movl %3, %%edi\n"
"pushl %%ebx\n"
"1:\n"
"pushl %%edx\n"
CopyBlockVerLoopFast
CopyBlockVerLoopFast
CopyBlockVerLoopFast
CopyBlockVerLoopFast
"popl %%edx\n"
"addl %%ecx, %%esi\n"
"subl $16, %%esi\n"
"addl %%ecx, %%edi\n"
"subl $16, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "c"(Stride), "d"(16), "g" (Src), "g"(Dst)
: "esi", "edi"
);
}
/*
void CopyMBlockHor(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__ (
"pushl %%ebx\n"
"movl %1, %%ebx\n"
"movl %4, %%esi\n"
"movl %5, %%edi\n"
"1:\n"
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
CopyBlockHorLoop
"addl %%ebx, %%esi\n"
"addl %%ebx, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "a"(0), "g"(Stride-16), "c"(0), "d"(16), "g" (Src), "g"(Dst)
);
}
*/
/*
void CopyMBlockVer(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__ (
"pushl %%ebx\n"
"movl %1, %%ebx\n"
"movl %4, %%esi\n"
"movl %5, %%edi\n"
"1:\n"
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
CopyBlockVerLoop
"addl %%ebx, %%esi\n"
"subl $16, %%esi\n"
"addl %%ebx, %%edi\n"
"subl $16, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "a"(0), "g"(Stride), "c"(0), "d"(16), "g" (Src), "g"(Dst)
);
}
*/
void CopyMBlockHorRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__ (
"movl %1, %%eax\n"
"movl %4, %%esi\n"
"movl %5, %%edi\n"
"pushl %%ebx\n"
"movl %%eax, %%ebx\n"
"xorl %%eax, %%eax\n"
"1:\n"
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
CopyBlockHorLoopRound
"addl %%ebx, %%esi\n"
"addl %%ebx, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "a"(0), "g"(Stride-16), "c"(0), "d"(16), "g" (Src), "g"(Dst)
: "esi", "edi"
);
}
void CopyMBlockVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__ (
"movl %1, %%eax\n"
"movl %4, %%esi\n"
"movl %5, %%edi\n"
"pushl %%ebx\n"
"movl %%eax, %%ebx\n"
"xorl %%eax, %%eax\n"
"1:\n"
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
CopyBlockVerLoopRound
"addl %%ebx, %%esi\n"
"subl $16, %%esi\n"
"addl %%ebx, %%edi\n"
"subl $16, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "a"(0), "g"(Stride), "c"(0), "d"(16), "g" (Src), "g"(Dst)
: "esi", "edi"
);
}
/**/
void CopyMBlockHorVer(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__
(
"movl %1, %%eax\n"
"movl %4, %%esi\n"
"movl %5, %%edi\n"
"pushl %%ebx\n"
"movl %%eax, %%ebx\n"
"xorl %%eax, %%eax\n"
"1:\n"
CopyBlockHorVerLoop(0)
CopyBlockHorVerLoop(1)
CopyBlockHorVerLoop(2)
CopyBlockHorVerLoop(3)
CopyBlockHorVerLoop(4)
CopyBlockHorVerLoop(5)
CopyBlockHorVerLoop(6)
CopyBlockHorVerLoop(7)
CopyBlockHorVerLoop(8)
CopyBlockHorVerLoop(9)
CopyBlockHorVerLoop(10)
CopyBlockHorVerLoop(11)
CopyBlockHorVerLoop(12)
CopyBlockHorVerLoop(13)
CopyBlockHorVerLoop(14)
CopyBlockHorVerLoop(15)
"addl %%ebx, %%esi\n"
"addl %%ebx, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "a"(0), "g"(Stride), "c" (0), "d" (16), "g" (Src), "g" (Dst)
: "esi", "edi"
);
}
void CopyMBlockHorVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
__asm__
(
"movl %1, %%eax\n"
"movl %4, %%esi\n"
"movl %5, %%edi\n"
"pushl %%ebx\n"
"movl %%eax, %%ebx\n"
"xorl %%eax, %%eax\n"
"1:\n"
CopyBlockHorVerLoopRound(0)
CopyBlockHorVerLoopRound(1)
CopyBlockHorVerLoopRound(2)
CopyBlockHorVerLoopRound(3)
CopyBlockHorVerLoopRound(4)
CopyBlockHorVerLoopRound(5)
CopyBlockHorVerLoopRound(6)
CopyBlockHorVerLoopRound(7)
CopyBlockHorVerLoopRound(8)
CopyBlockHorVerLoopRound(9)
CopyBlockHorVerLoopRound(10)
CopyBlockHorVerLoopRound(11)
CopyBlockHorVerLoopRound(12)
CopyBlockHorVerLoopRound(13)
CopyBlockHorVerLoopRound(14)
CopyBlockHorVerLoopRound(15)
"addl %%ebx, %%esi\n"
"addl %%ebx, %%edi\n"
"decl %%edx\n"
"jnz 1b\n"
"popl %%ebx\n"
:
: "a"(0), "g"(Stride), "c" (0), "d" (16), "g" (Src), "g" (Dst)
: "esi", "edi"
);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -