comparison src/cpu/sparc/vm/templateInterpreter_sparc.cpp @ 3365:3cfb240033d1

7043301: assert(locals < caller->fp() || locals > (caller->fp() + 16)) failed: locals in save area Reviewed-by: kvn
author never
date Mon, 09 May 2011 19:45:52 -0700
parents 2e038ad0c1d0
children 3d2ab563047a
comparison
equal deleted inserted replaced
3364:566ea7a12419 3365:3cfb240033d1
1710 assert(caller->is_interpreted_frame() || caller->is_entry_frame(), "only possible cases"); 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 1711 // The entry and interpreter frames are laid out like normal C
1712 // frames so place the locals adjacent to the varargs area. 1712 // frames so place the locals adjacent to the varargs area.
1713 locals = fp + frame::memory_parameter_word_sp_offset + local_words - 1; 1713 locals = fp + frame::memory_parameter_word_sp_offset + local_words - 1;
1714 if (caller->is_interpreted_frame()) { 1714 if (caller->is_interpreted_frame()) {
1715 *interpreter_frame->register_addr(I5_savedSP) = (intptr_t) (fp + rounded_cls) - STACK_BIAS; 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;
1716 } 1719 }
1717 } 1720 }
1718 if (TraceDeoptimization) { 1721 if (TraceDeoptimization) {
1719 if (caller->is_entry_frame()) { 1722 if (caller->is_entry_frame()) {
1720 // make sure I5_savedSP and the entry frames notion of saved SP 1723 // make sure I5_savedSP and the entry frames notion of saved SP