equal
deleted
inserted
replaced
692 |
692 |
693 __ dispatch_next(state, step); |
693 __ dispatch_next(state, step); |
694 return entry; |
694 return entry; |
695 } |
695 } |
696 |
696 |
697 address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state, int step) { |
697 address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state, int step, address continuation) { |
698 address entry = __ pc(); |
698 address entry = __ pc(); |
699 // If state != vtos, we're returning from a native method, which put it's result |
699 // If state != vtos, we're returning from a native method, which put it's result |
700 // into the result register. So move the value out of the return register back |
700 // into the result register. So move the value out of the return register back |
701 // to the TOS cache of current frame. |
701 // to the TOS cache of current frame. |
702 |
702 |
719 |
719 |
720 // Handle a pending exception, fall through if none. |
720 // Handle a pending exception, fall through if none. |
721 __ check_and_forward_exception(R11_scratch1, R12_scratch2); |
721 __ check_and_forward_exception(R11_scratch1, R12_scratch2); |
722 |
722 |
723 // Start executing bytecodes. |
723 // Start executing bytecodes. |
724 __ dispatch_next(state, step); |
724 if (continuation == NULL) { |
|
725 __ dispatch_next(state, step); |
|
726 } else { |
|
727 __ jump_to_entry(continuation, R11_scratch1); |
|
728 } |
725 |
729 |
726 return entry; |
730 return entry; |
727 } |
731 } |
728 |
732 |
729 address TemplateInterpreterGenerator::generate_safept_entry_for(TosState state, address runtime_entry) { |
733 address TemplateInterpreterGenerator::generate_safept_entry_for(TosState state, address runtime_entry) { |