1695 // preallocate stack space
1696 intptr_t* esp = monitors - 1 -
1697 (tempcount * Interpreter::stackElementWords) -
1698 popframe_extra_args;
1699
1700 int local_words = method->max_locals() * Interpreter::stackElementWords;
1701 intptr_t* locals;
1702 if (caller->is_compiled_frame()) {
1703 // Compiled frames do not allocate a varargs area so place them
1704 // next to the register save area.
1705 locals = fp + frame::register_save_words + local_words - 1;
1706 // Caller wants his own SP back
1707 int caller_frame_size = caller->cb()->frame_size();
1708 *interpreter_frame->register_addr(I5_savedSP) = (intptr_t)(caller->fp() - caller_frame_size) - STACK_BIAS;
1709 } else {
1710 assert(caller->is_interpreted_frame() || caller->is_entry_frame(), "only possible cases");
1711 // The entry and interpreter frames are laid out like normal C
1712 // frames so place the locals adjacent to the varargs area.
1713 locals = fp + frame::memory_parameter_word_sp_offset + local_words - 1;
1714 if (caller->is_interpreted_frame()) {
1715 *interpreter_frame->register_addr(I5_savedSP) = (intptr_t) (fp + rounded_cls) - STACK_BIAS;
1716 }
1717 }
1718 if (TraceDeoptimization) {
1719 if (caller->is_entry_frame()) {
1720 // make sure I5_savedSP and the entry frames notion of saved SP
1721 // agree. This assertion duplicate a check in entry frame code
1722 // but catches the failure earlier.
1723 assert(*caller->register_addr(Lscratch) == *interpreter_frame->register_addr(I5_savedSP),
1724 "would change callers SP");
1725 }
1726 if (caller->is_entry_frame()) {
1727 tty->print("entry ");
1728 }
1729 if (caller->is_compiled_frame()) {
1730 tty->print("compiled ");
1731 if (caller->is_deoptimized_frame()) {
1732 tty->print("(deopt) ");
1733 }
1734 }
1735 if (caller->is_interpreted_frame()) {
|
1695 // preallocate stack space
1696 intptr_t* esp = monitors - 1 -
1697 (tempcount * Interpreter::stackElementWords) -
1698 popframe_extra_args;
1699
1700 int local_words = method->max_locals() * Interpreter::stackElementWords;
1701 intptr_t* locals;
1702 if (caller->is_compiled_frame()) {
1703 // Compiled frames do not allocate a varargs area so place them
1704 // next to the register save area.
1705 locals = fp + frame::register_save_words + local_words - 1;
1706 // Caller wants his own SP back
1707 int caller_frame_size = caller->cb()->frame_size();
1708 *interpreter_frame->register_addr(I5_savedSP) = (intptr_t)(caller->fp() - caller_frame_size) - STACK_BIAS;
1709 } else {
1710 assert(caller->is_interpreted_frame() || caller->is_entry_frame(), "only possible cases");
1711 // The entry and interpreter frames are laid out like normal C
1712 // frames so place the locals adjacent to the varargs area.
1713 locals = fp + frame::memory_parameter_word_sp_offset + local_words - 1;
1714 if (caller->is_interpreted_frame()) {
1715 int parm_words = method->size_of_parameters() * Interpreter::stackElementWords;
1716 int delta = local_words - parm_words;
1717 int computed_sp_adjustment = (delta > 0) ? round_to(delta, WordsPerLong) : 0;
1718 *interpreter_frame->register_addr(I5_savedSP) = (intptr_t) (fp + computed_sp_adjustment) - STACK_BIAS;
1719 }
1720 }
1721 if (TraceDeoptimization) {
1722 if (caller->is_entry_frame()) {
1723 // make sure I5_savedSP and the entry frames notion of saved SP
1724 // agree. This assertion duplicate a check in entry frame code
1725 // but catches the failure earlier.
1726 assert(*caller->register_addr(Lscratch) == *interpreter_frame->register_addr(I5_savedSP),
1727 "would change callers SP");
1728 }
1729 if (caller->is_entry_frame()) {
1730 tty->print("entry ");
1731 }
1732 if (caller->is_compiled_frame()) {
1733 tty->print("compiled ");
1734 if (caller->is_deoptimized_frame()) {
1735 tty->print("(deopt) ");
1736 }
1737 }
1738 if (caller->is_interpreted_frame()) {
|