src/cpu/sparc/vm/sparc.ad
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/cpu/sparc/vm/sparc.ad

src/cpu/sparc/vm/sparc.ad

Print this page
rev 6132 : 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:

*** 1144,1162 **** if( VerifyThread ) { st->print_cr("Verify_Thread"); st->print("\t"); } ! size_t framesize = C->frame_slots() << LogBytesPerInt; // Calls to C2R adapters often do not accept exceptional returns. // We require that their callers must bang for them. But be careful, because // some VM calls (such as call site linkage) can use several kilobytes of // stack. But the stack safety zone should account for that. // See bugs 4446381, 4468289, 4497237. ! if (C->need_stack_bang(framesize)) { ! st->print_cr("! stack bang"); st->print("\t"); } if (Assembler::is_simm13(-framesize)) { st->print ("SAVE R_SP,-%d,R_SP",framesize); } else { --- 1144,1163 ---- if( VerifyThread ) { st->print_cr("Verify_Thread"); st->print("\t"); } ! size_t framesize = C->frame_size_in_bytes(); ! int bangsize = C->bang_size_in_bytes(); // Calls to C2R adapters often do not accept exceptional returns. // We require that their callers must bang for them. But be careful, because // some VM calls (such as call site linkage) can use several kilobytes of // stack. But the stack safety zone should account for that. // See bugs 4446381, 4468289, 4497237. ! if (C->need_stack_bang(bangsize)) { ! st->print_cr("! stack bang (%d bytes)", bangsize); st->print("\t"); } if (Assembler::is_simm13(-framesize)) { st->print ("SAVE R_SP,-%d,R_SP",framesize); } else {
*** 1176,1196 **** __ nop(); } __ verify_thread(); ! size_t framesize = C->frame_slots() << LogBytesPerInt; assert(framesize >= 16*wordSize, "must have room for reg. save area"); assert(framesize%(2*wordSize) == 0, "must preserve 2*wordSize alignment"); // Calls to C2R adapters often do not accept exceptional returns. // We require that their callers must bang for them. But be careful, because // some VM calls (such as call site linkage) can use several kilobytes of // stack. But the stack safety zone should account for that. // See bugs 4446381, 4468289, 4497237. ! if (C->need_stack_bang(framesize)) { ! __ generate_stack_overflow_check(framesize); } if (Assembler::is_simm13(-framesize)) { __ save(SP, -framesize, SP); } else { --- 1177,1198 ---- __ nop(); } __ verify_thread(); ! size_t framesize = C->frame_size_in_bytes(); assert(framesize >= 16*wordSize, "must have room for reg. save area"); assert(framesize%(2*wordSize) == 0, "must preserve 2*wordSize alignment"); + int bangsize = C->bang_size_in_bytes(); // Calls to C2R adapters often do not accept exceptional returns. // We require that their callers must bang for them. But be careful, because // some VM calls (such as call site linkage) can use several kilobytes of // stack. But the stack safety zone should account for that. // See bugs 4446381, 4468289, 4497237. ! if (C->need_stack_bang(bangsize)) { ! __ generate_stack_overflow_check(bangsize); } if (Assembler::is_simm13(-framesize)) { __ save(SP, -framesize, SP); } else {
*** 2502,2512 **** %} enc_class call_epilog %{ if( VerifyStackAtCalls ) { MacroAssembler _masm(&cbuf); ! int framesize = ra_->C->frame_slots() << LogBytesPerInt; Register temp_reg = G3; __ add(SP, framesize, temp_reg); __ cmp(temp_reg, FP); __ breakpoint_trap(Assembler::notEqual, Assembler::ptr_cc); } --- 2504,2514 ---- %} enc_class call_epilog %{ if( VerifyStackAtCalls ) { MacroAssembler _masm(&cbuf); ! int framesize = ra_->C->frame_size_in_bytes(); Register temp_reg = G3; __ add(SP, framesize, temp_reg); __ cmp(temp_reg, FP); __ breakpoint_trap(Assembler::notEqual, Assembler::ptr_cc); }
src/cpu/sparc/vm/sparc.ad
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File