< 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 >