|
// 以下代码均不考虑对齐问题
int m_memcpy1( void * des, const void * src, int size )
{
int cnt = size >> 3;
_asm
{
push eax
push ebx
push esi
push edi
mov esi, src
mov edi, des
emms
xor eax, eax
iloop_begin:
cmp eax, cnt
jz iloop_end
movq mm0, [esi]
movq [edi], mm0
add esi, 8
add edi, 8
inc eax
jmp iloop_begin
iloop_end:
emms
pop edi
pop esi
pop ebx
pop eax
}
return 0;
}
int m_memcpy2( void * des, const void * src, int size )
{
int cnt = size >> 2;
int rcnt = size & 4;
_asm
{
push eax
push ebx
push esi
push edi
mov esi, src
mov edi, des
xor eax, eax
jloop_begin:
cmp eax, cnt
jz jloop_end
mov ebx, [esi] // 就这里代码不同
mov [edi], ebx // 就这里代码不同
add esi, 4
add edi, 4
inc eax
jmp jloop_begin
jloop_end:
pop edi
pop esi
pop ebx
pop eax
}
return 0;
}
两者拷贝10000大小的内存10000次,不管怎么测试使用通用汇编的代码要比MMX快一倍,是我用的有问题吗? |
|