src/cpu/sparc/vm/cppInterpreter_sparc.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/sparc/vm/cppInterpreter_sparc.cpp Tue Jan 20 02:13:44 2009
--- new/src/cpu/sparc/vm/cppInterpreter_sparc.cpp Tue Jan 20 02:13:44 2009
*** 1015,1024 ****
--- 1015,1025 ----
// that returns a result.
const int slop_factor = 2*wordSize;
const int fixed_size = ((sizeof(BytecodeInterpreter) + slop_factor) >> LogBytesPerWord) + // what is the slop factor?
+ methodOopDesc::extra_stack() + // extra push slot for MH insertion
frame::memory_parameter_word_sp_offset + // register save area + param window
(native ? frame::interpreter_frame_extra_outgoing_argument_words : 0); // JNI, class
// XXX G5_method valid
*** 1161,1170 ****
--- 1162,1173 ----
__ sub(O2, wordSize, O2); // prepush
__ st_ptr(O2, XXX_STATE(_stack)); // PREPUSH
__ lduh(max_stack, O3); // Full size expression stack
+ if (MethodHandle)
+ __ inc(O3, methodOopDesc::extra_stack());
__ sll(O3, LogBytesPerWord, O3);
__ sub(O2, O3, O3);
// __ sub(O3, wordSize, O3); // so prepush doesn't look out of bounds
__ st_ptr(O3, XXX_STATE(_stack_limit));
*** 2015,2025 ****
--- 2018,2030 ----
// is "slop_factor" here.
const int slop_factor = 2;
const int fixed_size = sizeof(BytecodeInterpreter)/wordSize + // interpreter state object
frame::memory_parameter_word_sp_offset; // register save area + param window
+ const int extra_stack = methodOopDesc::extra_stack();
return (round_to(max_stack +
+ extra_stack +
slop_factor +
fixed_size +
monitor_size +
(callee_extra_locals * Interpreter::stackElementWords()), WordsPerLong));
*** 2102,2112 ****
--- 2107,2118 ----
to_fill->_oop_temp = NULL;
to_fill->_stack_base = stack_base;
// Need +1 here because stack_base points to the word just above the first expr stack entry
// and stack_limit is supposed to point to the word just below the last expr stack entry.
// See generate_compute_interpreter_state.
! to_fill->_stack_limit = stack_base - (method->max_stack() + 1);
! int extra_stack = methodOopDesc::extra_stack();
+ to_fill->_stack_limit = stack_base - (method->max_stack() + 1 + extra_stack);
to_fill->_monitor_base = (BasicObjectLock*) monitor_base;
// sparc specific
to_fill->_frame_bottom = frame_bottom;
to_fill->_self_link = to_fill;
src/cpu/sparc/vm/cppInterpreter_sparc.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File