605 jvms->set_scloff(jvms->scloff() + delta); |
605 jvms->set_scloff(jvms->scloff() + delta); |
606 jvms->set_endoff(jvms->endoff() + delta); |
606 jvms->set_endoff(jvms->endoff() + delta); |
607 } |
607 } |
608 } |
608 } |
609 |
609 |
|
610 // Mirror the stack size calculation in the deopt code |
|
611 // How much stack space would we need at this point in the program in |
|
612 // case of deoptimization? |
|
613 int JVMState::interpreter_frame_size() const { |
|
614 const JVMState* jvms = this; |
|
615 int size = 0; |
|
616 int callee_parameters = 0; |
|
617 int callee_locals = 0; |
|
618 int extra_args = method()->max_stack() - stk_size(); |
|
619 |
|
620 while (jvms != NULL) { |
|
621 int locks = jvms->nof_monitors(); |
|
622 int temps = jvms->stk_size(); |
|
623 bool is_top_frame = (jvms == this); |
|
624 ciMethod* method = jvms->method(); |
|
625 |
|
626 int frame_size = BytesPerWord * Interpreter::size_activation(method->max_stack(), |
|
627 temps + callee_parameters, |
|
628 extra_args, |
|
629 locks, |
|
630 callee_parameters, |
|
631 callee_locals, |
|
632 is_top_frame); |
|
633 size += frame_size; |
|
634 |
|
635 callee_parameters = method->size_of_parameters(); |
|
636 callee_locals = method->max_locals(); |
|
637 extra_args = 0; |
|
638 jvms = jvms->caller(); |
|
639 } |
|
640 return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord; |
|
641 } |
|
642 |
610 //============================================================================= |
643 //============================================================================= |
611 uint CallNode::cmp( const Node &n ) const |
644 uint CallNode::cmp( const Node &n ) const |
612 { return _tf == ((CallNode&)n)._tf && _jvms == ((CallNode&)n)._jvms; } |
645 { return _tf == ((CallNode&)n)._tf && _jvms == ((CallNode&)n)._jvms; } |
613 #ifndef PRODUCT |
646 #ifndef PRODUCT |
614 void CallNode::dump_req(outputStream *st) const { |
647 void CallNode::dump_req(outputStream *st) const { |