Mercurial > hg > truffle
comparison src/share/vm/c1/c1_LIRAssembler.cpp @ 17980:0bf37f737702
8032410: compiler/uncommontrap/TestStackBangRbp.java times out on Solaris-Sparc V9
Summary: make compiled code bang the stack by the worst case size of the interpreter frame at deoptimization points.
Reviewed-by: twisti, kvn
author | roland |
---|---|
date | Tue, 01 Apr 2014 09:36:49 +0200 |
parents | 15766b73dc1d |
children | 52b4284cb496 |
comparison
equal
deleted
inserted
replaced
17978:ad51f24671c2 | 17980:0bf37f737702 |
---|---|
183 | 183 |
184 address LIR_Assembler::pc() const { | 184 address LIR_Assembler::pc() const { |
185 return _masm->pc(); | 185 return _masm->pc(); |
186 } | 186 } |
187 | 187 |
188 // To bang the stack of this compiled method we use the stack size | |
189 // that the interpreter would need in case of a deoptimization. This | |
190 // removes the need to bang the stack in the deoptimization blob which | |
191 // in turn simplifies stack overflow handling. | |
192 int LIR_Assembler::bang_size_in_bytes() const { | |
193 return MAX2(initial_frame_size_in_bytes(), _compilation->interpreter_frame_size()); | |
194 } | |
188 | 195 |
189 void LIR_Assembler::emit_exception_entries(ExceptionInfoList* info_list) { | 196 void LIR_Assembler::emit_exception_entries(ExceptionInfoList* info_list) { |
190 for (int i = 0; i < info_list->length(); i++) { | 197 for (int i = 0; i < info_list->length(); i++) { |
191 XHandlers* handlers = info_list->at(i)->exception_handlers(); | 198 XHandlers* handlers = info_list->at(i)->exception_handlers(); |
192 | 199 |
790 } | 797 } |
791 } | 798 } |
792 | 799 |
793 | 800 |
794 void LIR_Assembler::build_frame() { | 801 void LIR_Assembler::build_frame() { |
795 _masm->build_frame(initial_frame_size_in_bytes()); | 802 _masm->build_frame(initial_frame_size_in_bytes(), bang_size_in_bytes()); |
796 } | 803 } |
797 | 804 |
798 | 805 |
799 void LIR_Assembler::roundfp_op(LIR_Opr src, LIR_Opr tmp, LIR_Opr dest, bool pop_fpu_stack) { | 806 void LIR_Assembler::roundfp_op(LIR_Opr src, LIR_Opr tmp, LIR_Opr dest, bool pop_fpu_stack) { |
800 assert((src->is_single_fpu() && dest->is_single_stack()) || | 807 assert((src->is_single_fpu() && dest->is_single_stack()) || |