内联汇编程序增量64位计数器

时间:2012-03-13 01:30:37

标签: c++ assembly 64-bit inline-assembly

我想原子地在内联汇编中增加64位(C ++中的长类型)计数器。我知道如何在32位值(int)上执行此操作:

asm volatile("lock; incl %0" : "=m" (val) : "m"(val));

但我不知道如何在长期值上执行此操作。

1 个答案:

答案 0 :(得分:0)

应该是:

asm volatile("lock; incq %0" : "+m" (val));

指定不带约束的单独操作数,强制输入与输出相同的位置可能会产生如下代码:

val = something;
asm volatile("lock; incq %0" : "=m" (val) : "m"(val));

错误地进行优化。您可能还需要一个内存clobber来防止访问其他变量通过asm移动。