asm代码如何提供fence的功能

时间:2014-09-17 12:20:50

标签: java assembly jvm

请参阅以下代码:

inline void OrderAccess::fence() {
  if (os::is_MP()) {//judge if the os is muti processor.
    // always use locked addl since mfence is sometimes expensive
#ifdef AMD64
    __asm__ volatile ("lock; addl $0,0(%%rsp)" : : : "cc", "memory");
#else
    __asm__ volatile ("lock; addl $0,0(%%esp)" : : : "cc", "memory");
#endif
  }
}

代码如何提供' fence'?

的功能

代码来自jdk8 / openjdk / hotspot / src / os_cpu / bsd_x86 / vm / orderAddress_bsd_x86.inline.hpp

再加上' cc' clobber是什么意思?

1 个答案:

答案 0 :(得分:0)

第8.2.2章&#34; Intel Architectures Software Developer’s Manual的内存排序&#34; 表示锁定的指令具有总命令,不能使用锁定的指令重新排序读取或写入。< / p>

David Dice在his blog中解释了为什么选择LOCK ADD而不是MFENCE指令。

cc (条件代码) clobber表示标志寄存器已被修改。