Java asm代码如何提供围栏功能

Java asm代码如何提供围栏功能,java,assembly,jvm,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");

请参阅以下代码:

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
  }
}
代码如何提供“围栏”功能

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

加上“cc”clobber是什么意思?

的第8.2.2章内存顺序说明锁定的指令有一个总顺序,不能用锁定的指令重新排序读或写

David Dice在中解释了为什么选择加锁而不是MFENCE指令


cc condition codes clobber表示标志寄存器已修改。

您好,首先感谢您的回答,但我想知道代码的含义,我想知道什么是锁;添加$0,0%%esp::cc,表示内存@apangin@yangyixiaof这条指令除了内存排序外什么也不做。它的字面意思是原子地将零添加到堆栈顶部的值,或者在C语法中是相同的:volatile intptr_ttos;tos+=0;