< prev index next >

src/hotspot/share/oops/method.cpp

Print this page

        

@@ -469,11 +469,10 @@
 #ifdef ASSERT
 // ValueKlass the method is declared to return. This must not
 // safepoint as it is called with references live on the stack at
 // locations the GC is unaware of.
 ValueKlass* Method::returned_value_type(Thread* thread) const {
-  assert(is_returning_vt(), "method return type should be value type");
   SignatureStream ss(signature());
   while (!ss.at_return_type()) {
     ss.next();
   }
   Handle class_loader(thread, method_holder()->class_loader());

@@ -486,12 +485,20 @@
   assert(k != NULL && !thread->has_pending_exception(), "can't resolve klass");
   return ValueKlass::cast(k);
 }
 #endif
 
-bool Method::has_value_args() const {
-  return adapter()->get_sig_extended() != NULL;
+bool Method::has_scalarized_args() const {
+  return adapter() != NULL ? (adapter()->get_sig_cc() != NULL) : false;
+}
+
+bool Method::needs_stack_repair() const {
+  return adapter() != NULL ? (adapter()->get_res_entry()._offset != -1) : false;
+}
+
+SigEntry Method::get_res_entry() const {
+  return adapter() != NULL ? adapter()->get_res_entry() : SigEntry();
 }
 
 bool Method::is_empty_method() const {
   return  code_size() == 1
       && *code_base() == Bytecodes::_return;

@@ -939,11 +946,11 @@
   if (adapter() == NULL) {
     _from_compiled_entry    = NULL;
     _from_compiled_value_entry = NULL;
   } else {
     _from_compiled_entry    = adapter()->get_c2i_entry();
-    _from_compiled_value_entry = adapter()->get_c2i_entry();
+    _from_compiled_value_entry = adapter()->get_c2i_value_entry();
   }
   OrderAccess::storestore();
   _from_interpreted_entry = _i2i_entry;
   OrderAccess::storestore();
   _code = NULL;

@@ -1102,11 +1109,11 @@
 
 address Method::make_adapters(const methodHandle& mh, TRAPS) {
   // Adapters for compiled code are made eagerly here.  They are fairly
   // small (generally < 100 bytes) and quick to make (and cached and shared)
   // so making them eagerly shouldn't be too expensive.
-  AdapterHandlerEntry* adapter = AdapterHandlerLibrary::get_adapter(mh, CHECK_0);
+  AdapterHandlerEntry* adapter = AdapterHandlerLibrary::get_adapter(mh);
   if (adapter == NULL ) {
     if (!is_init_completed()) {
       // Don't throw exceptions during VM initialization because java.lang.* classes
       // might not have been initialized, causing problems when constructing the
       // Java exception object.

@@ -1121,11 +1128,11 @@
     assert(mh->_from_compiled_entry != NULL, "must be");
     assert(mh->_from_compiled_value_entry != NULL, "must be");
   } else {
     mh->set_adapter_entry(adapter);
     mh->_from_compiled_entry = adapter->get_c2i_entry();
-    mh->_from_compiled_value_entry = adapter->get_c2i_entry();
+    mh->_from_compiled_value_entry = adapter->get_c2i_value_entry();
   }
   return adapter->get_c2i_entry();
 }
 
 void Method::restore_unshareable_info(TRAPS) {

@@ -1190,11 +1197,11 @@
     mh->set_highest_comp_level(comp_level);
   }
 
   OrderAccess::storestore();
   mh->_from_compiled_entry = code->verified_entry_point();
-  mh->_from_compiled_value_entry = code->verified_entry_point();
+  mh->_from_compiled_value_entry = code->verified_value_entry_point();
   OrderAccess::storestore();
   // Instantly compiled code can execute.
   if (!mh->is_method_handle_intrinsic())
     mh->_from_interpreted_entry = mh->get_i2c_entry();
 }
< prev index next >