src/cpu/x86/vm/cppInterpreter_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/cpu/x86/vm/cppInterpreter_x86.cpp	Mon Mar  3 22:46:20 2014
--- new/src/cpu/x86/vm/cppInterpreter_x86.cpp	Mon Mar  3 22:46:20 2014

*** 572,582 **** --- 572,582 ---- Label done; const Address invocation_counter(rax, MethodCounters::invocation_counter_offset() + InvocationCounter::counter_offset()); const Address backedge_counter (rax, ! MethodCounters::backedge_counter_offset() + InvocationCounter::counter_offset()); __ get_method_counters(rbx, rax, done); if (ProfileInterpreter) {
*** 980,999 **** --- 980,1001 ---- // rsi/r13: previous interpreter state (if called from C++ interpreter) must preserve // in any case. If called via c1/c2/call_stub rsi/r13 is junk (to use) but harmless // to save/restore. address entry_point = __ pc(); const Address constMethod (rbx, Method::const_offset()); const Address access_flags (rbx, Method::access_flags_offset()); const Address size_of_parameters(rcx, ConstMethod::size_of_parameters_offset()); // rsi/r13 == state/locals rdi == prevstate const Register locals = rdi; // get parameter size (always needed) + { + const Address constMethod (rbx, Method::const_offset()); + const Address size_of_parameters(rcx, ConstMethod::size_of_parameters_offset()); __ movptr(rcx, constMethod); __ load_unsigned_short(rcx, size_of_parameters); + } // rbx: Method* // rcx: size of parameters __ pop(rax); // get return address // for natives the size of locals is zero
*** 1109,1126 **** --- 1111,1130 ---- // work registers const Register method = rbx; const Register thread = LP64_ONLY(r15_thread) NOT_LP64(rdi); const Register t = InterpreterRuntime::SignatureHandlerGenerator::temp(); // rcx|rscratch1 const Address constMethod (method, Method::const_offset()); const Address size_of_parameters(t, ConstMethod::size_of_parameters_offset()); // allocate space for parameters __ movptr(method, STATE(_method)); __ verify_method_ptr(method); + { + const Address constMethod (method, Method::const_offset()); + const Address size_of_parameters(t, ConstMethod::size_of_parameters_offset()); __ movptr(t, constMethod); __ load_unsigned_short(t, size_of_parameters); + } __ shll(t, 2); #ifdef _LP64 __ subptr(rsp, t); __ subptr(rsp, frame::arg_reg_save_area_bytes); // windows __ andptr(rsp, -16); // must be 16 byte boundary (see amd64 ABI)
*** 2219,2237 **** --- 2223,2243 ---- 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 : // fall thru case Interpreter::java_lang_math_cos : // fall thru case Interpreter::java_lang_math_tan : // fall thru case Interpreter::java_lang_math_abs : // fall thru case Interpreter::java_lang_math_log : // fall thru case Interpreter::java_lang_math_log10 : // fall thru ! case Interpreter::java_lang_math_sqrt : entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; ! case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : // fall thru + entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; case Interpreter::java_lang_ref_reference_get : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; default : ShouldNotReachHere(); break; }
*** 2449,2454 **** --- 2455,2478 ---- // BytecodeInterpreter::pd_layout_interpreterState(cur_state, interpreter_return_address, interpreter_frame->fp()); } return frame_size/BytesPerWord; } + bool AbstractInterpreter::can_be_compiled(methodHandle m) { + switch (method_kind(m)) { + case Interpreter::java_lang_math_sin : // fall thru + case Interpreter::java_lang_math_cos : // fall thru + case Interpreter::java_lang_math_tan : // fall thru + case Interpreter::java_lang_math_abs : // fall thru + case Interpreter::java_lang_math_log : // fall thru + case Interpreter::java_lang_math_log10 : // fall thru + case Interpreter::java_lang_math_sqrt : // fall thru + case Interpreter::java_lang_math_pow : // fall thru + case Interpreter::java_lang_math_exp : + return false; + default: + return true; + } + } + + #endif // CC_INTERP (all)

src/cpu/x86/vm/cppInterpreter_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File