【问题标题】:Inline assembly __sync_fetch_and_add and __sync_add_and_fetch内联汇编 __sync_fetch_and_add 和 __sync_add_and_fetch
【发布时间】:2014-01-17 22:10:43
【问题描述】:

GCC 内置 __sync_fetch_and_add 是 x86 内联汇编的实现:

 asm("lock; xaddl %%eax, %2;"
      :"=a" (val)
      : "a" (val), "m" (*ptr) : )

如何使用addl 指令而不是xaddl 来实现这个内联汇编?

我的另一个问题是内置 __sync_add_and_fetch 的 x86 内联程序集如何?

谢谢。

【问题讨论】:

    标签: gcc assembly inline-assembly built-in


    【解决方案1】:

    内建不一定对应于单个定义良好的汇编代码块。特别是 __sync_add_and_fetch__sync_fetch_and_add 将生成 lock addl 而不是 lock xaddl 如果结果不是活在内置的,它们可能会生成 lock incl 如果结果不是活出来并且第二个参数是已知值为 1。

    不清楚您所说的“我如何实现这个内联汇编”是什么意思。汇编是您编写或生成的东西,而不是您实现的东西(除非您正在编写汇编程序)。

    【讨论】:

    猜你喜欢
    • 2012-10-20
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2017-11-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多