请参阅以下代码:
// 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
上面的代码是在不同平台上实现获取/发布/ 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'Memory Access Ordering Model'
如果您很忙,您可以告诉我在哪里可以找到有关不同CPU架构的指令集信息。