226 static int FreeNext_offset_in_bytes() { return offset_of(ObjectMonitor, FreeNext); } |
226 static int FreeNext_offset_in_bytes() { return offset_of(ObjectMonitor, FreeNext); } |
227 static int WaitSet_offset_in_bytes() { return offset_of(ObjectMonitor, _WaitSet); } |
227 static int WaitSet_offset_in_bytes() { return offset_of(ObjectMonitor, _WaitSet); } |
228 static int Responsible_offset_in_bytes() { return offset_of(ObjectMonitor, _Responsible); } |
228 static int Responsible_offset_in_bytes() { return offset_of(ObjectMonitor, _Responsible); } |
229 static int Spinner_offset_in_bytes() { return offset_of(ObjectMonitor, _Spinner); } |
229 static int Spinner_offset_in_bytes() { return offset_of(ObjectMonitor, _Spinner); } |
230 |
230 |
|
231 // ObjectMonitor references can be ORed with markOopDesc::monitor_value |
|
232 // as part of the ObjectMonitor tagging mechanism. When we combine an |
|
233 // ObjectMonitor reference with an offset, we need to remove the tag |
|
234 // value in order to generate the proper address. |
|
235 // |
|
236 // We can either adjust the ObjectMonitor reference and then add the |
|
237 // offset or we can adjust the offset that is added to the ObjectMonitor |
|
238 // reference. The latter avoids an AGI (Address Generation Interlock) |
|
239 // stall so the helper macro adjusts the offset value that is returned |
|
240 // to the ObjectMonitor reference manipulation code: |
|
241 // |
|
242 #define OM_OFFSET_NO_MONITOR_VALUE_TAG(f) \ |
|
243 ((ObjectMonitor::f ## _offset_in_bytes()) - markOopDesc::monitor_value) |
|
244 |
231 // Eventually we'll make provisions for multiple callbacks, but |
245 // Eventually we'll make provisions for multiple callbacks, but |
232 // now one will suffice. |
246 // now one will suffice. |
233 static int (*SpinCallbackFunction)(intptr_t, int); |
247 static int (*SpinCallbackFunction)(intptr_t, int); |
234 static intptr_t SpinCallbackArgument; |
248 static intptr_t SpinCallbackArgument; |
235 |
249 |