< prev index next >

src/hotspot/share/interpreter/templateInterpreter.cpp

Print this page

        

*** 194,209 **** --- 194,211 ---- #ifndef PRODUCT EntryPoint TemplateInterpreter::_trace_code; #endif // !PRODUCT EntryPoint TemplateInterpreter::_return_entry[TemplateInterpreter::number_of_return_entries]; + EntryPoint TemplateInterpreter::_return_entryX[TemplateInterpreter::number_of_return_entries]; EntryPoint TemplateInterpreter::_earlyret_entry; EntryPoint TemplateInterpreter::_deopt_entry [TemplateInterpreter::number_of_deopt_entries ]; address TemplateInterpreter::_deopt_reexecute_return_entry; EntryPoint TemplateInterpreter::_safept_entry; address TemplateInterpreter::_invoke_return_entry[TemplateInterpreter::number_of_return_addrs]; + address TemplateInterpreter::_invoke_return_entryX[TemplateInterpreter::number_of_return_addrs]; address TemplateInterpreter::_invokeinterface_return_entry[TemplateInterpreter::number_of_return_addrs]; address TemplateInterpreter::_invokedynamic_return_entry[TemplateInterpreter::number_of_return_addrs]; DispatchTable TemplateInterpreter::_active_table; DispatchTable TemplateInterpreter::_normal_table;
*** 236,260 **** /** * Returns the return entry address for the given top-of-stack state and bytecode. */ address TemplateInterpreter::return_entry(TosState state, int length, Bytecodes::Code code) { guarantee(0 <= length && length < Interpreter::number_of_return_entries, "illegal length"); const int index = TosState_as_index(state); switch (code) { case Bytecodes::_invokestatic: case Bytecodes::_invokespecial: case Bytecodes::_invokevirtual: case Bytecodes::_invokehandle: ! return _invoke_return_entry[index]; case Bytecodes::_invokeinterface: return _invokeinterface_return_entry[index]; case Bytecodes::_invokedynamic: return _invokedynamic_return_entry[index]; default: assert(!Bytecodes::is_invoke(code), "invoke instructions should be handled separately: %s", Bytecodes::name(code)); ! address entry = _return_entry[length].entry(state); vmassert(entry != NULL, "unsupported return entry requested, length=%d state=%d", length, index); return entry; } } --- 238,266 ---- /** * Returns the return entry address for the given top-of-stack state and bytecode. */ address TemplateInterpreter::return_entry(TosState state, int length, Bytecodes::Code code) { + return return_entry(state, length, code, false); + } + + address TemplateInterpreter::return_entry(TosState state, int length, Bytecodes::Code code, bool X) { guarantee(0 <= length && length < Interpreter::number_of_return_entries, "illegal length"); const int index = TosState_as_index(state); switch (code) { case Bytecodes::_invokestatic: case Bytecodes::_invokespecial: case Bytecodes::_invokevirtual: case Bytecodes::_invokehandle: ! return X ? _invoke_return_entryX[index] : _invoke_return_entry[index]; case Bytecodes::_invokeinterface: return _invokeinterface_return_entry[index]; case Bytecodes::_invokedynamic: return _invokedynamic_return_entry[index]; default: assert(!Bytecodes::is_invoke(code), "invoke instructions should be handled separately: %s", Bytecodes::name(code)); ! address entry = (X ? _return_entryX[length] : _return_entry[length]).entry(state); vmassert(entry != NULL, "unsupported return entry requested, length=%d state=%d", length, index); return entry; } }
< prev index next >