hotspot/src/share/vm/runtime/orderAccess.hpp
changeset 22551 9bf46d16dcc6
parent 7397 5b173b4ca846
child 29456 cc1c5203e60d
equal deleted inserted replaced
22550:820966182ab9 22551:9bf46d16dcc6
    59 //
    59 //
    60 // LoadStore:  Load1(s); LoadStore; Store2
    60 // LoadStore:  Load1(s); LoadStore; Store2
    61 //
    61 //
    62 // Ensures that Load1 completes before Store2 and any subsequent store
    62 // Ensures that Load1 completes before Store2 and any subsequent store
    63 // operations.  Loads before Load1 may *not* float below Store2 and any
    63 // operations.  Loads before Load1 may *not* float below Store2 and any
    64 // subseqeuent store operations.
    64 // subsequent store operations.
    65 //
    65 //
    66 // StoreLoad:  Store1(s); StoreLoad; Load2
    66 // StoreLoad:  Store1(s); StoreLoad; Load2
    67 //
    67 //
    68 // Ensures that Store1 completes before Load2 and any subsequent load
    68 // Ensures that Store1 completes before Load2 and any subsequent load
    69 // operations.  Stores before Store1 may *not* float below Load2 and any
    69 // operations.  Stores before Store1 may *not* float below Load2 and any
    70 // subseqeuent load operations.
    70 // subsequent load operations.
    71 //
    71 //
    72 //
    72 //
    73 // We define two further operations, 'release' and 'acquire'.  They are
    73 // We define two further operations, 'release' and 'acquire'.  They are
    74 // mirror images of each other.
    74 // mirror images of each other.
    75 //
    75 //
   174 // Note: as of 6973570, we have replaced the originally static "dummy" field
   174 // Note: as of 6973570, we have replaced the originally static "dummy" field
   175 // (see above) by a volatile store to the stack. All of the versions of the
   175 // (see above) by a volatile store to the stack. All of the versions of the
   176 // compilers that we currently use (SunStudio, gcc and VC++) respect the
   176 // compilers that we currently use (SunStudio, gcc and VC++) respect the
   177 // semantics of volatile here. If you build HotSpot using other
   177 // semantics of volatile here. If you build HotSpot using other
   178 // compilers, you may need to verify that no compiler reordering occurs
   178 // compilers, you may need to verify that no compiler reordering occurs
   179 // across the sequence point respresented by the volatile access.
   179 // across the sequence point represented by the volatile access.
   180 //
   180 //
   181 //
   181 //
   182 //                os::is_MP Considered Redundant
   182 //                os::is_MP Considered Redundant
   183 //
   183 //
   184 // Callers of this interface do not need to test os::is_MP() before
   184 // Callers of this interface do not need to test os::is_MP() before
   309   static void     release_store_ptr_fence(volatile void*     p, void*    v);
   309   static void     release_store_ptr_fence(volatile void*     p, void*    v);
   310 
   310 
   311  private:
   311  private:
   312   // This is a helper that invokes the StubRoutines::fence_entry()
   312   // This is a helper that invokes the StubRoutines::fence_entry()
   313   // routine if it exists, It should only be used by platforms that
   313   // routine if it exists, It should only be used by platforms that
   314   // don't another way to do the inline eassembly.
   314   // don't have another way to do the inline assembly.
   315   static void StubRoutines_fence();
   315   static void StubRoutines_fence();
   316 };
   316 };
   317 
   317 
   318 #endif // SHARE_VM_RUNTIME_ORDERACCESS_HPP
   318 #endif // SHARE_VM_RUNTIME_ORDERACCESS_HPP