获取释放围栏抽象指令实现不同平台的意义

时间:2014-10-11 08:29:50

标签: java c++ jvm instruction-set

请参阅以下代码:

//               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架构的指令集信息。

1 个答案:

答案 0 :(得分:0)

x86具有强大的内存模型&#34;,这意味着每个机器指令都隐含了获取和释放语义。您可以进一步阅读this以及this question的答案。