【发布时间】:2014-10-11 08:29:49
【问题描述】:
见以下代码:
// sparc RMO ia64 x86
// ---------------------------------------------------------------------
// fence membar #LoadStore | mf lock addl 0,(sp)
// #StoreStore |
// #LoadLoad |
// #StoreLoad
//
// release membar #LoadStore | st.rel [sp]=r0 movl $0,<dummy>
// #StoreStore
// st %g0,[]
//
// acquire ld [%sp],%g0 ld.acq <r>=[sp] movl (sp),<r>
// membar #LoadLoad |
// #LoadStore
//
// release_store membar #LoadStore | st.rel <store>
// #StoreStore
// st
//
// store_fence st st lock xchg
// fence mf
//
// load_acquire ld ld.acq <load>
// membar #LoadLoad |
// #LoadStore
上面的代码是acquire/release/fence抽象指令在不同平台上的实现,我只是想知道x86的实现。
你能为我解释一下下面的说明吗?
How 'movl $0,<dummy>' represent release?
How 'movl (sp),<r>' represent acquire?
How '<store>' represent release_store?
How 'lock xchg' represent store_fence?
How '<load>' represent load_acquire?
代码来自 jdk8/openjdk/hotspot/src/share/vm/runtime/OrderAddress.hpp '内存访问排序模型'
如果你很忙,你可以告诉我在哪里可以找到不同CPU架构的指令集信息。
【问题讨论】:
标签: java c++ jvm instruction-set