Mercurial > hg > truffle
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 |