< prev index next >

src/hotspot/share/interpreter/interpreterRuntime.cpp

Print this page

*** 1835,1844 **** --- 1835,1860 ---- // before trying to fetch the native entry point and klass mirror. // We must set the signature handler last, so that multiple processors // preparing the same method will be sure to see non-null entry & mirror. IRT_END + IRT_ENTRY(void, InterpreterRuntime::deoptimize_caller_frame_for_vt(JavaThread* thread, Method* callee)) + // Called from within the owner thread, so no need for safepoint + if (!callee->is_known_returning_vt() && !callee->is_known_not_returning_vt()) { + callee->check_returning_vt(thread); + } + if (!callee->is_known_returning_vt()) { + // deoptimize the caller only if it was compiled code that's calling a method that returns + // a value type. In this case, the return type must have already been resolved. + return; + } + RegisterMap reg_map(thread); + frame last_frame = thread->last_frame(); + frame caller_frame = last_frame.sender(&reg_map); + Deoptimization::deoptimize_frame(thread, caller_frame.id()); + IRT_END + #if defined(IA32) || defined(AMD64) || defined(ARM) IRT_LEAF(void, InterpreterRuntime::popframe_move_outgoing_args(JavaThread* thread, void* src_address, void* dest_address)) if (src_address == dest_address) { return; }
< prev index next >