это может быть вопрос дампа, но я не понимаю, почему мой код не компилируется.
Это мой первый опыт работы с встроенным 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
);
^
Так, кто-нибудь может объяснить, где ошибка?И я буду рад, если вы дадите мне несколько советов по реализации
Заранее спасибо