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