这可能是一个转储问题,但我不知道为什么我的代码无法编译。
这是我第一次使用内联ASM,我尝试编写一个16字节的未对齐版memcpy
所以,这是我的代码:
void* memcpy16u(void* dest, void* src, size_t count) {
__asm__ __volatile__ (
".intel_syntax noprefix\n\t"
".loop:\n\t"
"movdqu xmm0, [rsi]\n\t"
"movdqu [rdi], xmm0\n\t"
"lea rsi, [rsi + 16]\n\t"
"lea rdi, [rdi + 16]\n\t"
"sub rcx, 16\n\t"
"cmp rcx, 0\n\t"
"jg .loop\n\t"
".att_syntax prefix\n\t"
:
:"S"(src), "D"(dest), "c"(count)
:"rcx", "rdi", "rsi"
);
return dest;
}
我将其编译为g++ memcpy.cpp -o memcpy
编译器说
asm operand has impossible constraints
);
^
那么,任何人都可以解释哪里出错了吗?如果你给我一些关于实施的提示,我会很高兴
提前谢谢