src/cpu/sparc/vm/templateInterpreter_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot-dvm Cdiff src/cpu/sparc/vm/templateInterpreter_sparc.cpp

src/cpu/sparc/vm/templateInterpreter_sparc.cpp

Print this page
rev 522 : [mq]: meth.patch

*** 106,115 **** --- 106,143 ---- __ should_not_reach_here(); return entry; } + #ifdef ASSERT + address last_WrongMethodType_caller; + #endif //ASSERT + + // Arguments are: required type in G5_method_type, and + // failing object (or NULL) in G3_method_handle. + // In the debug build, the caller should put his own PC in G1. + address TemplateInterpreterGenerator::generate_WrongMethodType_handler() { + address entry = __ pc(); + #ifdef ASSERT + Address last_caller_addr(O3, (address)&last_WrongMethodType_caller); + __ sethi(last_caller_addr); + __ st_ptr(G1, last_caller_addr); + #endif //ASSERT + // expression stack must be empty before entering the VM if an exception + // happened + __ empty_expression_stack(); + // load exception object + __ call_VM(Oexception, + CAST_FROM_FN_PTR(address, + InterpreterRuntime::throw_WrongMethodTypeException), + G5_method_type, // required + G3_method_handle); // actual + __ should_not_reach_here(); + return entry; + } + + address TemplateInterpreterGenerator::generate_ArrayIndexOutOfBounds_handler(const char* name) { address entry = __ pc(); // expression stack must be empty before entering the VM if an exception happened __ empty_expression_stack(); // convention: expect aberrant index in register G3_scratch, then shuffle the
*** 446,455 **** --- 474,484 ---- const Address max_stack (G5_method, 0, in_bytes(methodOopDesc::max_stack_offset())); int rounded_vm_local_words = round_to( frame::interpreter_frame_vm_local_words, WordsPerLong ); const int extra_space = rounded_vm_local_words + // frame local scratch space + methodOopDesc::extra_stack() + // extra push slot for MH insertion frame::memory_parameter_word_sp_offset + // register save area (native_call ? frame::interpreter_frame_extra_outgoing_argument_words : 0); const Register Glocals_size = G3; const Register Otmp1 = O3;
*** 1443,1453 **** const int rounded_vm_local_words = round_to(frame::interpreter_frame_vm_local_words,WordsPerLong); // callee_locals and max_stack are counts, not the size in frame. const int locals_size = round_to(callee_extra_locals * Interpreter::stackElementWords(), WordsPerLong); ! const int max_stack_words = max_stack * Interpreter::stackElementWords(); return (round_to((max_stack_words + rounded_vm_local_words + frame::memory_parameter_word_sp_offset), WordsPerLong) // already rounded + locals_size + monitor_size); --- 1472,1483 ---- const int rounded_vm_local_words = round_to(frame::interpreter_frame_vm_local_words,WordsPerLong); // callee_locals and max_stack are counts, not the size in frame. const int locals_size = round_to(callee_extra_locals * Interpreter::stackElementWords(), WordsPerLong); ! const int extra_stack = methodOopDesc::extra_stack(); ! const int max_stack_words = (max_stack + extra_stack) * Interpreter::stackElementWords(); return (round_to((max_stack_words + rounded_vm_local_words + frame::memory_parameter_word_sp_offset), WordsPerLong) // already rounded + locals_size + monitor_size);
src/cpu/sparc/vm/templateInterpreter_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File