⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic_prediction_mmx.c

📁 <VC++视频音频开发>一书的光盘资料。
💻 C
📖 第 1 页 / 共 2 页
字号:
		}
		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 + -