c ++ Inline ASM, операнд «asm» имеет недопустимые ограничения - PullRequest
0 голосов
/ 01 июня 2018

это может быть вопрос дампа, но я не понимаю, почему мой код не компилируется.

Это мой первый опыт работы с встроенным 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
);
 ^

Так, кто-нибудь может объяснить, где ошибка?И я буду рад, если вы дадите мне несколько советов по реализации

Заранее спасибо

...