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