|
因为需要快速拷贝大量内存,于是我在考虑用不用sse,于是我就照着网上说的先写个简单的代码来对比对比,却发现还不如直接用32位寄存器拷贝快,虽然我写得很粗糙,但是差距也不该那么大啊?
/* 这用了sse指令 */
void memorycpy(void *src, void *des, DWORD len)
{
_asm
{
mov esi, src
mov edi, des
mov ecx, len
shr ecx, 6
cpyloop:
prefetchnta [esi+64]
movq mm0, [esi]
movq mm1, [esi+8]
movq mm2, [esi+16]
movq mm3, [esi+24]
movq mm4, [esi+32]
movq mm5, [esi+40]
movq mm6, [esi+48]
movq mm7, [esi+56]
movntq [edi], mm0
movntq [edi+8], mm1
movntq [edi+16], mm2
movntq [edi+24], mm3
movntq [edi+32], mm4
movntq [edi+40], mm5
movntq [edi+48], mm6
movntq [edi+54], mm7
add edi, 64
add esi, 64
loop cpyloop
sfence
emms
}
}
|
|