此代码在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?
答案 0 :(得分:1)
我想用rsi和rdi取代esi和edi就可以了。虽然它不会变得更快(或更快)。 除指针外,x64向后兼容x86。
通常更好地制作C循环或使用默认的memcpy。它将生成更好的代码。