< prev index next >

src/hotspot/share/runtime/sharedRuntime.hpp

Print this page

 59             id == StubId::shared_wrong_method_abstract_id ||
 60             id == StubId::shared_ic_miss_id ||
 61             id == StubId::shared_resolve_opt_virtual_call_id ||
 62             id == StubId::shared_resolve_virtual_call_id ||
 63             id == StubId::shared_resolve_static_call_id);
 64   }
 65   static bool is_polling_page_id(StubId id) {
 66     return (id == StubId::shared_polling_page_vectors_safepoint_handler_id ||
 67             id == StubId::shared_polling_page_safepoint_handler_id ||
 68             id == StubId::shared_polling_page_return_handler_id);
 69   }
 70   static bool is_throw_id(StubId id) {
 71     return (id == StubId::shared_throw_AbstractMethodError_id ||
 72             id == StubId::shared_throw_IncompatibleClassChangeError_id ||
 73             id == StubId::shared_throw_NullPointerException_at_call_id ||
 74             id == StubId::shared_throw_StackOverflowError_id ||
 75             id == StubId::shared_throw_delayed_StackOverflowError_id);
 76   }
 77 #endif
 78 
 79   // cont_doYieldStub is not yet folded into the general model for
 80   // shared stub/blob handling. It is actually a specially generated
 81   // native wrapper for a specific native method, as also is it's
 82   // counterpart the continuation do_enter method.
 83   static nmethod*            _cont_doYield_stub;
 84 
 85 #ifndef PRODUCT
 86   // Counters
 87   static int64_t _nof_megamorphic_calls;         // total # of megamorphic calls (through vtable)
 88 #endif // !PRODUCT
 89 
 90  private:
 91   static SafepointBlob* generate_handler_blob(StubId id, address call_ptr);
 92   static RuntimeStub*   generate_resolve_blob(StubId id, address destination);
 93   static RuntimeStub*   generate_throw_exception(StubId id, address runtime_entry);
 94  public:
 95   static void generate_initial_stubs(void);
 96   static void generate_stubs(void);
 97 #if INCLUDE_JFR
 98   static void generate_jfr_stubs(void);
 99   // For c2: c_rarg0 is junk, call to runtime to write a checkpoint.
100   // It returns a jobject handle to the event writer.
101   // The handle is dereferenced and the return value is the event writer oop.
102   static RuntimeStub* generate_jfr_write_checkpoint();
103   // For c2: call to runtime to return a buffer lease.
104   static RuntimeStub* generate_jfr_return_lease();

252     return _wrong_method_abstract_blob->entry_point();
253   }
254 
255   static address get_resolve_opt_virtual_call_stub() {
256     assert(_resolve_opt_virtual_call_blob != nullptr, "oops");
257     return _resolve_opt_virtual_call_blob->entry_point();
258   }
259   static address get_resolve_virtual_call_stub() {
260     assert(_resolve_virtual_call_blob != nullptr, "oops");
261     return _resolve_virtual_call_blob->entry_point();
262   }
263   static address get_resolve_static_call_stub() {
264     assert(_resolve_static_call_blob != nullptr, "oops");
265     return _resolve_static_call_blob->entry_point();
266   }
267 
268   static SafepointBlob* polling_page_return_handler_blob()     { return _polling_page_return_handler_blob; }
269   static SafepointBlob* polling_page_safepoint_handler_blob()  { return _polling_page_safepoint_handler_blob; }
270   static SafepointBlob* polling_page_vectors_safepoint_handler_blob()  { return _polling_page_vectors_safepoint_handler_blob; }
271 
272   static nmethod* cont_doYield_stub() {
273     assert(_cont_doYield_stub != nullptr, "oops");
274     return _cont_doYield_stub;
275   }
276 
277   // Implicit exceptions
278   static address throw_AbstractMethodError_entry()          {
279     assert(_throw_AbstractMethodError_blob != nullptr, "");
280     return _throw_AbstractMethodError_blob->entry_point();
281   }
282   static address throw_IncompatibleClassChangeError_entry() {
283     assert(_throw_IncompatibleClassChangeError_blob != nullptr, "");
284     return  _throw_IncompatibleClassChangeError_blob->entry_point();
285   }
286   static address throw_NullPointerException_at_call_entry() {
287     assert(_throw_NullPointerException_at_call_blob != nullptr, "");
288     return  _throw_NullPointerException_at_call_blob->entry_point();
289   }
290   static address throw_StackOverflowError_entry()           {
291     assert(_throw_StackOverflowError_blob != nullptr, "");
292     return _throw_StackOverflowError_blob->entry_point();
293   }
294   static address throw_delayed_StackOverflowError_entry()   {
295     assert(_throw_delayed_StackOverflowError_blob != nullptr, "");
296     return _throw_delayed_StackOverflowError_blob->entry_point();

 59             id == StubId::shared_wrong_method_abstract_id ||
 60             id == StubId::shared_ic_miss_id ||
 61             id == StubId::shared_resolve_opt_virtual_call_id ||
 62             id == StubId::shared_resolve_virtual_call_id ||
 63             id == StubId::shared_resolve_static_call_id);
 64   }
 65   static bool is_polling_page_id(StubId id) {
 66     return (id == StubId::shared_polling_page_vectors_safepoint_handler_id ||
 67             id == StubId::shared_polling_page_safepoint_handler_id ||
 68             id == StubId::shared_polling_page_return_handler_id);
 69   }
 70   static bool is_throw_id(StubId id) {
 71     return (id == StubId::shared_throw_AbstractMethodError_id ||
 72             id == StubId::shared_throw_IncompatibleClassChangeError_id ||
 73             id == StubId::shared_throw_NullPointerException_at_call_id ||
 74             id == StubId::shared_throw_StackOverflowError_id ||
 75             id == StubId::shared_throw_delayed_StackOverflowError_id);
 76   }
 77 #endif
 78 






 79 #ifndef PRODUCT
 80   // Counters
 81   static int64_t _nof_megamorphic_calls;         // total # of megamorphic calls (through vtable)
 82 #endif // !PRODUCT
 83 
 84  private:
 85   static SafepointBlob* generate_handler_blob(StubId id, address call_ptr);
 86   static RuntimeStub*   generate_resolve_blob(StubId id, address destination);
 87   static RuntimeStub*   generate_throw_exception(StubId id, address runtime_entry);
 88  public:
 89   static void generate_initial_stubs(void);
 90   static void generate_stubs(void);
 91 #if INCLUDE_JFR
 92   static void generate_jfr_stubs(void);
 93   // For c2: c_rarg0 is junk, call to runtime to write a checkpoint.
 94   // It returns a jobject handle to the event writer.
 95   // The handle is dereferenced and the return value is the event writer oop.
 96   static RuntimeStub* generate_jfr_write_checkpoint();
 97   // For c2: call to runtime to return a buffer lease.
 98   static RuntimeStub* generate_jfr_return_lease();

246     return _wrong_method_abstract_blob->entry_point();
247   }
248 
249   static address get_resolve_opt_virtual_call_stub() {
250     assert(_resolve_opt_virtual_call_blob != nullptr, "oops");
251     return _resolve_opt_virtual_call_blob->entry_point();
252   }
253   static address get_resolve_virtual_call_stub() {
254     assert(_resolve_virtual_call_blob != nullptr, "oops");
255     return _resolve_virtual_call_blob->entry_point();
256   }
257   static address get_resolve_static_call_stub() {
258     assert(_resolve_static_call_blob != nullptr, "oops");
259     return _resolve_static_call_blob->entry_point();
260   }
261 
262   static SafepointBlob* polling_page_return_handler_blob()     { return _polling_page_return_handler_blob; }
263   static SafepointBlob* polling_page_safepoint_handler_blob()  { return _polling_page_safepoint_handler_blob; }
264   static SafepointBlob* polling_page_vectors_safepoint_handler_blob()  { return _polling_page_vectors_safepoint_handler_blob; }
265 





266   // Implicit exceptions
267   static address throw_AbstractMethodError_entry()          {
268     assert(_throw_AbstractMethodError_blob != nullptr, "");
269     return _throw_AbstractMethodError_blob->entry_point();
270   }
271   static address throw_IncompatibleClassChangeError_entry() {
272     assert(_throw_IncompatibleClassChangeError_blob != nullptr, "");
273     return  _throw_IncompatibleClassChangeError_blob->entry_point();
274   }
275   static address throw_NullPointerException_at_call_entry() {
276     assert(_throw_NullPointerException_at_call_blob != nullptr, "");
277     return  _throw_NullPointerException_at_call_blob->entry_point();
278   }
279   static address throw_StackOverflowError_entry()           {
280     assert(_throw_StackOverflowError_blob != nullptr, "");
281     return _throw_StackOverflowError_blob->entry_point();
282   }
283   static address throw_delayed_StackOverflowError_entry()   {
284     assert(_throw_delayed_StackOverflowError_blob != nullptr, "");
285     return _throw_delayed_StackOverflowError_blob->entry_point();
< prev index next >