src/cpu/sparc/vm/templateInterpreter_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7043301 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/templateInterpreter_sparc.cpp

Print this page




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()) {


src/cpu/sparc/vm/templateInterpreter_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File