equal
deleted
inserted
replaced
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 |