Mercurial > hg > graal-compiler
comparison src/cpu/x86/vm/cppInterpreter_x86.cpp @ 14726:92aa6797d639
Backed out merge changeset: b51e29501f30
Backed out merge revision to its first parent (8f483e200405)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 24 Mar 2014 21:30:43 +0100 |
parents | d3f14809b051 |
children |
comparison
equal
deleted
inserted
replaced
14719:0bdd0d157040 | 14726:92aa6797d639 |
---|---|
572 Label done; | 572 Label done; |
573 const Address invocation_counter(rax, | 573 const Address invocation_counter(rax, |
574 MethodCounters::invocation_counter_offset() + | 574 MethodCounters::invocation_counter_offset() + |
575 InvocationCounter::counter_offset()); | 575 InvocationCounter::counter_offset()); |
576 const Address backedge_counter (rax, | 576 const Address backedge_counter (rax, |
577 MethodCounters::backedge_counter_offset() + | 577 MethodCounter::backedge_counter_offset() + |
578 InvocationCounter::counter_offset()); | 578 InvocationCounter::counter_offset()); |
579 | 579 |
580 __ get_method_counters(rbx, rax, done); | 580 __ get_method_counters(rbx, rax, done); |
581 | 581 |
582 if (ProfileInterpreter) { | 582 if (ProfileInterpreter) { |
980 // rsi/r13: previous interpreter state (if called from C++ interpreter) must preserve | 980 // rsi/r13: previous interpreter state (if called from C++ interpreter) must preserve |
981 // in any case. If called via c1/c2/call_stub rsi/r13 is junk (to use) but harmless | 981 // in any case. If called via c1/c2/call_stub rsi/r13 is junk (to use) but harmless |
982 // to save/restore. | 982 // to save/restore. |
983 address entry_point = __ pc(); | 983 address entry_point = __ pc(); |
984 | 984 |
985 const Address constMethod (rbx, Method::const_offset()); | |
985 const Address access_flags (rbx, Method::access_flags_offset()); | 986 const Address access_flags (rbx, Method::access_flags_offset()); |
987 const Address size_of_parameters(rcx, ConstMethod::size_of_parameters_offset()); | |
986 | 988 |
987 // rsi/r13 == state/locals rdi == prevstate | 989 // rsi/r13 == state/locals rdi == prevstate |
988 const Register locals = rdi; | 990 const Register locals = rdi; |
989 | 991 |
990 // get parameter size (always needed) | 992 // get parameter size (always needed) |
991 { | 993 __ movptr(rcx, constMethod); |
992 const Address constMethod (rbx, Method::const_offset()); | 994 __ load_unsigned_short(rcx, size_of_parameters); |
993 const Address size_of_parameters(rcx, ConstMethod::size_of_parameters_offset()); | |
994 __ movptr(rcx, constMethod); | |
995 __ load_unsigned_short(rcx, size_of_parameters); | |
996 } | |
997 | 995 |
998 // rbx: Method* | 996 // rbx: Method* |
999 // rcx: size of parameters | 997 // rcx: size of parameters |
1000 __ pop(rax); // get return address | 998 __ pop(rax); // get return address |
1001 // for natives the size of locals is zero | 999 // for natives the size of locals is zero |
1111 | 1109 |
1112 // work registers | 1110 // work registers |
1113 const Register method = rbx; | 1111 const Register method = rbx; |
1114 const Register thread = LP64_ONLY(r15_thread) NOT_LP64(rdi); | 1112 const Register thread = LP64_ONLY(r15_thread) NOT_LP64(rdi); |
1115 const Register t = InterpreterRuntime::SignatureHandlerGenerator::temp(); // rcx|rscratch1 | 1113 const Register t = InterpreterRuntime::SignatureHandlerGenerator::temp(); // rcx|rscratch1 |
1116 | 1114 const Address constMethod (method, Method::const_offset()); |
1117 // allocate space for parameters | 1115 const Address size_of_parameters(t, ConstMethod::size_of_parameters_offset()); |
1116 | |
1117 // allocate space for parameters | |
1118 __ movptr(method, STATE(_method)); | 1118 __ movptr(method, STATE(_method)); |
1119 __ verify_method_ptr(method); | 1119 __ verify_method_ptr(method); |
1120 { | 1120 __ movptr(t, constMethod); |
1121 const Address constMethod (method, Method::const_offset()); | 1121 __ load_unsigned_short(t, size_of_parameters); |
1122 const Address size_of_parameters(t, ConstMethod::size_of_parameters_offset()); | |
1123 __ movptr(t, constMethod); | |
1124 __ load_unsigned_short(t, size_of_parameters); | |
1125 } | |
1126 __ shll(t, 2); | 1122 __ shll(t, 2); |
1127 #ifdef _LP64 | 1123 #ifdef _LP64 |
1128 __ subptr(rsp, t); | 1124 __ subptr(rsp, t); |
1129 __ subptr(rsp, frame::arg_reg_save_area_bytes); // windows | 1125 __ subptr(rsp, frame::arg_reg_save_area_bytes); // windows |
1130 __ andptr(rsp, -16); // must be 16 byte boundary (see amd64 ABI) | 1126 __ andptr(rsp, -16); // must be 16 byte boundary (see amd64 ABI) |
2223 case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break; | 2219 case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break; |
2224 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break; | 2220 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break; |
2225 case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break; | 2221 case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break; |
2226 case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break; | 2222 case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break; |
2227 case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break; | 2223 case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break; |
2224 case Interpreter::method_handle : entry_point = ((InterpreterGenerator*)this)->generate_method_handle_entry(); break; | |
2228 | 2225 |
2229 case Interpreter::java_lang_math_sin : // fall thru | 2226 case Interpreter::java_lang_math_sin : // fall thru |
2230 case Interpreter::java_lang_math_cos : // fall thru | 2227 case Interpreter::java_lang_math_cos : // fall thru |
2231 case Interpreter::java_lang_math_tan : // fall thru | 2228 case Interpreter::java_lang_math_tan : // fall thru |
2232 case Interpreter::java_lang_math_abs : // fall thru | 2229 case Interpreter::java_lang_math_abs : // fall thru |
2233 case Interpreter::java_lang_math_log : // fall thru | 2230 case Interpreter::java_lang_math_log : // fall thru |
2234 case Interpreter::java_lang_math_log10 : // fall thru | 2231 case Interpreter::java_lang_math_log10 : // fall thru |
2235 case Interpreter::java_lang_math_sqrt : // fall thru | 2232 case Interpreter::java_lang_math_sqrt : entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; |
2236 case Interpreter::java_lang_math_pow : // fall thru | |
2237 case Interpreter::java_lang_math_exp : // fall thru | |
2238 entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; | |
2239 case Interpreter::java_lang_ref_reference_get | 2233 case Interpreter::java_lang_ref_reference_get |
2240 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; | 2234 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; |
2241 default : ShouldNotReachHere(); break; | 2235 default : ShouldNotReachHere(); break; |
2242 } | 2236 } |
2243 | 2237 |
2455 // BytecodeInterpreter::pd_layout_interpreterState(cur_state, interpreter_return_address, interpreter_frame->fp()); | 2449 // BytecodeInterpreter::pd_layout_interpreterState(cur_state, interpreter_return_address, interpreter_frame->fp()); |
2456 } | 2450 } |
2457 return frame_size/BytesPerWord; | 2451 return frame_size/BytesPerWord; |
2458 } | 2452 } |
2459 | 2453 |
2460 bool AbstractInterpreter::can_be_compiled(methodHandle m) { | |
2461 switch (method_kind(m)) { | |
2462 case Interpreter::java_lang_math_sin : // fall thru | |
2463 case Interpreter::java_lang_math_cos : // fall thru | |
2464 case Interpreter::java_lang_math_tan : // fall thru | |
2465 case Interpreter::java_lang_math_abs : // fall thru | |
2466 case Interpreter::java_lang_math_log : // fall thru | |
2467 case Interpreter::java_lang_math_log10 : // fall thru | |
2468 case Interpreter::java_lang_math_sqrt : // fall thru | |
2469 case Interpreter::java_lang_math_pow : // fall thru | |
2470 case Interpreter::java_lang_math_exp : | |
2471 return false; | |
2472 default: | |
2473 return true; | |
2474 } | |
2475 } | |
2476 | |
2477 | |
2478 #endif // CC_INTERP (all) | 2454 #endif // CC_INTERP (all) |