操作数大小不明确

时间:2014-04-09 17:32:39

标签: c++ inline-assembly

这段代码有什么问题?编译器为解锁函数中的dec返回不明确的操作数大小。但是,有qword关键字(大小说明符)。

class spinlock
{
    qword locked;
public:
    spinlock() : locked(-1)
    { }
    void lock()     __attribute__((noinline));
    void unlock()   __attribute__((noinline));
};

void spinlock::lock()
{
    asm(
    ".intel_syntax noprefix;"
    "xor rcx, rcx;"
    "loop:;"
    "lock xchg qword [%0], rcx;"
    "test rcx, rcx;"
    "jz loop;"
    ".att_syntax noprefix;"
    : 
    : "r"(&locked)
    : "rcx"
    );
}

void spinlock::unlock()
{
    asm(
    ".intel_syntax noprefix;"
    "lock dec qword [%0];"
    ".att_syntax noprefix;"
    :
    : "r"(&locked)
    :
    );
}

0 个答案:

没有答案