长变量原子增量的指令编码

时间:2014-08-10 06:07:37

标签: gcc assembly x86-64 atomic inline-assembly

我需要获取长变量的原子增量的指令编码。我正在考虑编写一些内联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这样做会更容易。)

1 个答案:

答案 0 :(得分:1)

您无法使用锁定寄存器。你必须使用&#34; m&#34;对于约束,不是&#34; r&#34;。此外,既然你在阅读和写作,&#34;价值&#34;应该是标有&#34; +&#34;的输出。为什么不使用__sync_add_and_fetch?