我需要获取长变量的原子增量的指令编码。我正在考虑编写一些内联gcc程序集并使用gdb反汇编输出来得到答案。这就是我所做的。
#include <stdint.h>
int lock_inc(uint64_t *value) {
__asm__ __volatile__
(
"lock inc %0;\n"
:
: "r"(value)
: "memory"
);
}
uint64_t value = 0;
int main() {
lock_inc(&value);
}
但是当我尝试编译它时,我收到以下错误。
lockinc.c:汇编程序消息:lockinc.c:5:错误:期待可锁定 'lock&#39;
之后的指令
我做错了什么?顺便说一句,如果有人知道直接答案(编码)也会很好。 (我指的是一些直接获取它的网站但是不确定答案。感觉让gcc这样做会更容易。)
答案 0 :(得分:1)
您无法使用锁定寄存器。你必须使用&#34; m&#34;对于约束,不是&#34; r&#34;。此外,既然你在阅读和写作,&#34;价值&#34;应该是标有&#34; +&#34;的输出。为什么不使用__sync_add_and_fetch?