c ++ Inline ASM,' asm'操作数具有不可能的约束

时间:2018-06-01 20:52:56

标签: c++ assembly inline-assembly

这可能是一个转储问题,但我不知道为什么我的代码无法编译。

这是我第一次使用内联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
);
 ^

那么,任何人都可以解释哪里出错了吗?如果你给我一些关于实施的提示,我会很高兴

提前谢谢

0 个答案:

没有答案