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

src/cpu/sparc/vm/interpreter_sparc.cpp

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

*** 233,242 **** --- 233,273 ---- return entry; } + #ifdef ASSERT + address last_WrongMethodType_caller; + #endif //ASSERT + + + // Method handle invoker + // Dispatch a method of the form java.dyn.MethodHandles::invoke(...) + address InterpreterGenerator::generate_method_handle_entry(void) { + if (!MethodHandleSupport) { + return generate_abstract_entry(); + } + + // incoming registers: O0 (mh), G5 (mtype), O1... (args) + Register G5_mtype = G5_inline_cache_reg; + Register O0_recv = O0; + + Label wrong_method_type; + address entry_point = MethodHandles::generate_method_handle_interpreter_entry(_masm, wrong_method_type); + + __ bind(wrong_method_type); + __ mov(O0_recv, O1); // bad mh (actual) + __ mov(G5_mtype, O0); // missed mtype (required) + DEBUG_ONLY(__ get_pc(O2)); + __ throw_if_not_x(Assembler::never, Interpreter::_throw_WrongMethodType_entry, G3_scratch); + + return entry_point; + } + + + + //---------------------------------------------------------------------------------------------------- // Entry points & stack frame layout // // Here we generate the various kind of entries into the interpreter. // The two main entry type are generic bytecode methods and native call method.
*** 362,371 **** --- 393,403 ---- case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break; case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break; case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break; case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break; case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break; + case Interpreter::method_handle : entry_point = ((InterpreterGenerator*)this)->generate_method_handle_entry(); break; case Interpreter::java_lang_math_sin : break; case Interpreter::java_lang_math_cos : break; case Interpreter::java_lang_math_tan : break; case Interpreter::java_lang_math_sqrt : break; case Interpreter::java_lang_math_abs : break;
src/cpu/sparc/vm/interpreter_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File