?? basic_prediction_mmx.c
字號:
inc edi
//12
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
inc eax
shr eax, 1
mov [edi], al
inc esi
inc edi
//13
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
inc eax
shr eax, 1
mov [edi], al
inc esi
inc edi
//14
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
inc eax
shr eax, 1
mov [edi], al
inc esi
inc edi
//15
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
inc eax
shr eax, 1
mov [edi], al
add esi, ebx
sub esi, 15
add edi, ebx
sub edi, 15
dec edx
jnz start_again0
}
}
/**/
void CopyMBlockHorVer(unsigned char * Src, unsigned char * Dst, int Stride)
{
_asm {
xor eax, eax
mov ebx, Stride
xor ecx, ecx
mov edx, 16
mov esi, dword ptr [Src]
mov edi, dword ptr [Dst]
start_again1:
// 0
//xor eax, eax
mov al, [esi]
mov cl, [esi+1]
add eax, ecx
mov cl, [esi+ebx]
add eax, ecx
mov cl, [esi+ebx+1]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi], al
// 1
//xor eax, eax
mov al, [esi+1]
mov cl, [esi+2]
add eax, ecx
mov cl, [esi+ebx+1]
add eax, ecx
mov cl, [esi+ebx+2]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+1], al
// 2
mov al, [esi+2]
mov cl, [esi+3]
add eax, ecx
mov cl, [esi+ebx+2]
add eax, ecx
mov cl, [esi+ebx+3]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+2], al
// 3
mov al, [esi+3]
mov cl, [esi+4]
add eax, ecx
mov cl, [esi+ebx+3]
add eax, ecx
mov cl, [esi+ebx+4]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+3], al
// 4
//xor eax, eax
mov al, [esi+4]
mov cl, [esi+5]
add eax, ecx
mov cl, [esi+ebx+4]
add eax, ecx
mov cl, [esi+ebx+5]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+4], al
// 5
//xor eax, eax
mov al, [esi+5]
mov cl, [esi+6]
add eax, ecx
mov cl, [esi+ebx+5]
add eax, ecx
mov cl, [esi+ebx+6]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+5], al
// 6
mov al, [esi+6]
mov cl, [esi+7]
add eax, ecx
mov cl, [esi+ebx+6]
add eax, ecx
mov cl, [esi+ebx+7]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+6], al
// 7
mov al, [esi+7]
mov cl, [esi+8]
add eax, ecx
mov cl, [esi+ebx+7]
add eax, ecx
mov cl, [esi+ebx+8]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+7], al
// 8
mov al, [esi+8]
mov cl, [esi+9]
add eax, ecx
mov cl, [esi+ebx+8]
add eax, ecx
mov cl, [esi+ebx+9]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+8], al
// 9
mov al, [esi+9]
mov cl, [esi+10]
add eax, ecx
mov cl, [esi+ebx+9]
add eax, ecx
mov cl, [esi+ebx+10]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+9], al
// 10
mov al, [esi+10]
mov cl, [esi+11]
add eax, ecx
mov cl, [esi+ebx+10]
add eax, ecx
mov cl, [esi+ebx+11]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+10], al
// 11
mov al, [esi+11]
mov cl, [esi+12]
add eax, ecx
mov cl, [esi+ebx+11]
add eax, ecx
mov cl, [esi+ebx+12]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+11], al
//12
mov al, [esi+12]
mov cl, [esi+13]
add eax, ecx
mov cl, [esi+ebx+12]
add eax, ecx
mov cl, [esi+ebx+13]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+12], al
//13
//xor eax, eax
mov al, [esi+13]
mov cl, [esi+14]
add eax, ecx
mov cl, [esi+ebx+13]
add eax, ecx
mov cl, [esi+ebx+14]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+13], al
//14
mov al, [esi+14]
mov cl, [esi+15]
add eax, ecx
mov cl, [esi+ebx+14]
add eax, ecx
mov cl, [esi+ebx+15]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+14], al
//15
mov al, [esi+15]
mov cl, [esi+16]
add eax, ecx
mov cl, [esi+ebx+15]
add eax, ecx
mov cl, [esi+ebx+16]
add eax, ecx
add eax, 2
shr eax, 2
mov [edi+15], al
add esi, ebx
add edi, ebx
dec edx
jnz start_again1
}
}
/**/
void CopyMBlockHorRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
_asm {
xor eax, eax
mov ebx, Stride
sub ebx, 15
xor ecx, ecx
mov edx, 16
mov esi, dword ptr [Src]
mov edi, dword ptr [Dst]
start_again:
// 0
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 1
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 2
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 3
//xor eax, eax
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 4
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 5
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 6
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 7
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 8
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 9
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 10
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
// 11
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
//12
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
//13
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
//14
mov al, [esi]
inc esi
mov cl, [esi]
add eax, ecx
shr eax, 1
mov [edi], al
inc edi
//15
mov al, [esi]
mov cl, [esi+1]
add eax, ecx
shr eax, 1
mov [edi], al
add esi, ebx
add edi, ebx
dec edx
jnz start_again
}
}
/**/
void CopyMBlockVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
_asm {
xor eax, eax
mov ebx, Stride
xor ecx, ecx
mov edx, 16
mov esi, dword ptr [Src]
mov edi, dword ptr [Dst]
start_again:
// 0
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 1
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 2
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 3
//xor eax, eax
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 4
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 5
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 6
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 7
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 8
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 9
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 10
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
// 11
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
//12
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
//13
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
//14
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
inc esi
inc edi
//15
mov al, [esi]
mov cl, [esi+ebx]
add eax, ecx
shr eax, 1
mov [edi], al
add esi, ebx
sub esi, 15
add edi, ebx
sub edi, 15
dec edx
jnz start_again
}
}
/**/
void CopyMBlockHorVerRound(unsigned char * Src, unsigned char * Dst, int Stride)
{
_asm {
xor eax, eax
mov ebx, Stride
xor ecx, ecx
mov edx, 16
mov esi, dword ptr [Src]
mov edi, dword ptr [Dst]
start_again:
// 0
mov al, [esi]
mov cl, [esi+1]
add eax, ecx
mov cl, [esi+ebx]
add eax, ecx
mov cl, [esi+ebx+1]
add eax, ecx
inc eax
shr eax, 2
mov [edi], al
// 1
mov al, [esi+1]
mov cl, [esi+2]
add eax, ecx
mov cl, [esi+ebx+1]
add eax, ecx
mov cl, [esi+ebx+2]
add eax, ecx
inc eax
shr eax, 2
mov [edi+1], al
// 2
mov al, [esi+2]
mov cl, [esi+3]
add eax, ecx
mov cl, [esi+ebx+2]
add eax, ecx
mov cl, [esi+ebx+3]
add eax, ecx
inc eax
shr eax, 2
mov [edi+2], al
// 3
mov al, [esi+3]
mov cl, [esi+4]
add eax, ecx
mov cl, [esi+ebx+3]
add eax, ecx
mov cl, [esi+ebx+4]
add eax, ecx
inc eax
shr eax, 2
mov [edi+3], al
// 4
mov al, [esi+4]
mov cl, [esi+5]
add eax, ecx
mov cl, [esi+ebx+4]
add eax, ecx
mov cl, [esi+ebx+5]
add eax, ecx
inc eax
shr eax, 2
mov [edi+4], al
// 5
mov al, [esi+5]
mov cl, [esi+6]
add eax, ecx
mov cl, [esi+ebx+5]
add eax, ecx
mov cl, [esi+ebx+6]
add eax, ecx
inc eax
shr eax, 2
mov [edi+5], al
// 6
mov al, [esi+6]
mov cl, [esi+7]
add eax, ecx
mov cl, [esi+ebx+6]
add eax, ecx
mov cl, [esi+ebx+7]
add eax, ecx
inc eax
shr eax, 2
mov [edi+6], al
// 7
mov al, [esi+7]
mov cl, [esi+8]
add eax, ecx
mov cl, [esi+ebx+7]
add eax, ecx
mov cl, [esi+ebx+8]
add eax, ecx
inc eax
shr eax, 2
mov [edi+7], al
// 8
mov al, [esi+8]
mov cl, [esi+9]
add eax, ecx
mov cl, [esi+ebx+8]
add eax, ecx
mov cl, [esi+ebx+9]
add eax, ecx
inc eax
shr eax, 2
mov [edi+8], al
// 9
mov al, [esi+9]
mov cl, [esi+10]
add eax, ecx
mov cl, [esi+ebx+9]
add eax, ecx
mov cl, [esi+ebx+10]
add eax, ecx
inc eax
shr eax, 2
mov [edi+9], al
// 10
mov al, [esi+10]
mov cl, [esi+11]
add eax, ecx
mov cl, [esi+ebx+10]
add eax, ecx
mov cl, [esi+ebx+11]
add eax, ecx
inc eax
shr eax, 2
mov [edi+10], al
// 11
mov al, [esi+11]
mov cl, [esi+12]
add eax, ecx
mov cl, [esi+ebx+11]
add eax, ecx
mov cl, [esi+ebx+12]
add eax, ecx
inc eax
shr eax, 2
mov [edi+11], al
//12
mov al, [esi+12]
mov cl, [esi+13]
add eax, ecx
mov cl, [esi+ebx+12]
add eax, ecx
mov cl, [esi+ebx+13]
add eax, ecx
inc eax
shr eax, 2
mov [edi+12], al
//13
mov al, [esi+13]
mov cl, [esi+14]
add eax, ecx
mov cl, [esi+ebx+13]
add eax, ecx
mov cl, [esi+ebx+14]
add eax, ecx
inc eax
shr eax, 2
mov [edi+13], al
//14
mov al, [esi+14]
mov cl, [esi+15]
add eax, ecx
mov cl, [esi+ebx+14]
add eax, ecx
mov cl, [esi+ebx+15]
add eax, ecx
inc eax
shr eax, 2
mov [edi+14], al
//15
//xor eax, eax
mov al, [esi+15]
mov cl, [esi+16]
add eax, ecx
mov cl, [esi+ebx+15]
add eax, ecx
mov cl, [esi+ebx+16]
add eax, ecx
inc eax
shr eax, 2
mov [edi+15], al
add esi, ebx
add edi, ebx
dec edx
jnz start_again
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -