src/share/vm/interpreter/interpreter.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/interpreter/interpreter.cpp	Tue Oct 22 15:03:13 2013
--- new/src/share/vm/interpreter/interpreter.cpp	Tue Oct 22 15:03:12 2013

*** 327,345 **** --- 327,351 ---- //------------------------------------------------------------------------------------------------------------------------ // Deoptimization support // If deoptimization happens, this function returns the point of next bytecode to continue execution + /** + * If a deoptimization happens, this function returns the point of next bytecode to continue execution. + */ address AbstractInterpreter::deopt_continue_after_entry(Method* method, address bcp, int callee_parameters, bool is_top_frame) { assert(method->contains(bcp), "just checkin'"); + + // Get the original and rewritten bytecode. Bytecodes::Code code = Bytecodes::java_code_at(method, bcp); assert(!Interpreter::bytecode_should_reexecute(code), "should not reexecute"); int bci = method->bci_from(bcp); int length = -1; // initial value for debugging + + const int bci = method->bci_from(bcp); + // compute continuation length ! const int length = Bytecodes::length_at(method, bcp); + // compute result type BasicType type = T_ILLEGAL; switch (code) { case Bytecodes::_invokevirtual :
*** 391,401 **** --- 397,407 ---- // return entry point for computed continuation state & bytecode length return is_top_frame ? Interpreter::deopt_entry (as_TosState(type), length) ! : Interpreter::return_entry(as_TosState(type), length, code); } // If deoptimization happens, this function returns the point where the interpreter reexecutes // the bytecode. // Note: Bytecodes::_athrow is a special case in that it does not return

src/share/vm/interpreter/interpreter.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File