将memcpy()代码从x86转换为x64平台

时间:2015-07-22 13:58:31

标签: performance assembly x86 64-bit memcpy

此代码在x86平台上是memcpy()。但是我需要在x64平台上使用memcpy()。

_asm { 
        mov esi, src 
        mov edi, dest 
        mov ecx, nbytes 
        shr ecx, 6 // 64 bytes per iteration 

loop1: 
    movq mm1,  0[ESI] // Read in source data 
    movq mm2,  8[ESI] 
    movq mm3, 16[ESI] 
    movq mm4, 24[ESI] 
    movq mm5, 32[ESI] 
    movq mm6, 40[ESI] 
    movq mm7, 48[ESI] 
    movq mm0, 56[ESI] 

    movq  0[EDI], mm1 // Write to destination 
    movq  8[EDI], mm2 
    movq 16[EDI], mm3 
    movq 24[EDI], mm4 
    movq 32[EDI], mm5 
    movq 40[EDI], mm6 
    movq 48[EDI], mm7 
    movq 56[EDI], mm0 

    add esi, 64 
    add edi, 64 
    dec ecx 
    jnz loop1 

    emms 
} 

我不懂x64汇编语言。 如何将此代码从x86转换为x64?

1 个答案:

答案 0 :(得分:1)

我想用rsi和rdi取代esi和edi就可以了。虽然它不会变得更快(或更快)。 除指针外,x64向后兼容x86。

通常更好地制作C循环或使用默认的memcpy。它将生成更好的代码。