comparison src/cpu/x86/vm/cppInterpreter_x86.cpp @ 14676:d3f14809b051

8036146: make CPP interpreter build again Summary: fix build of CPP interpreter on x86 and sparc Reviewed-by: kvn
author roland
date Wed, 05 Mar 2014 15:14:25 +0100
parents bd3237e0e18d
children 92aa6797d639
comparison
equal deleted inserted replaced
14675:bb4db06fd36f 14676:d3f14809b051
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 MethodCounter::backedge_counter_offset() + 577 MethodCounters::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());
986 const Address access_flags (rbx, Method::access_flags_offset()); 985 const Address access_flags (rbx, Method::access_flags_offset());
987 const Address size_of_parameters(rcx, ConstMethod::size_of_parameters_offset());
988 986
989 // rsi/r13 == state/locals rdi == prevstate 987 // rsi/r13 == state/locals rdi == prevstate
990 const Register locals = rdi; 988 const Register locals = rdi;
991 989
992 // get parameter size (always needed) 990 // get parameter size (always needed)
993 __ movptr(rcx, constMethod); 991 {
994 __ load_unsigned_short(rcx, size_of_parameters); 992 const Address constMethod (rbx, Method::const_offset());
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 }
995 997
996 // rbx: Method* 998 // rbx: Method*
997 // rcx: size of parameters 999 // rcx: size of parameters
998 __ pop(rax); // get return address 1000 __ pop(rax); // get return address
999 // for natives the size of locals is zero 1001 // for natives the size of locals is zero
1109 1111
1110 // work registers 1112 // work registers
1111 const Register method = rbx; 1113 const Register method = rbx;
1112 const Register thread = LP64_ONLY(r15_thread) NOT_LP64(rdi); 1114 const Register thread = LP64_ONLY(r15_thread) NOT_LP64(rdi);
1113 const Register t = InterpreterRuntime::SignatureHandlerGenerator::temp(); // rcx|rscratch1 1115 const Register t = InterpreterRuntime::SignatureHandlerGenerator::temp(); // rcx|rscratch1
1114 const Address constMethod (method, Method::const_offset()); 1116
1115 const Address size_of_parameters(t, ConstMethod::size_of_parameters_offset()); 1117 // allocate space for parameters
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 __ movptr(t, constMethod); 1120 {
1121 __ load_unsigned_short(t, size_of_parameters); 1121 const Address constMethod (method, Method::const_offset());
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 }
1122 __ shll(t, 2); 1126 __ shll(t, 2);
1123 #ifdef _LP64 1127 #ifdef _LP64
1124 __ subptr(rsp, t); 1128 __ subptr(rsp, t);
1125 __ subptr(rsp, frame::arg_reg_save_area_bytes); // windows 1129 __ subptr(rsp, frame::arg_reg_save_area_bytes); // windows
1126 __ andptr(rsp, -16); // must be 16 byte boundary (see amd64 ABI) 1130 __ andptr(rsp, -16); // must be 16 byte boundary (see amd64 ABI)
2219 case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break; 2223 case Interpreter::native : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(false); break;
2220 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break; 2224 case Interpreter::native_synchronized : entry_point = ((InterpreterGenerator*)this)->generate_native_entry(true); break;
2221 case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break; 2225 case Interpreter::empty : entry_point = ((InterpreterGenerator*)this)->generate_empty_entry(); break;
2222 case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break; 2226 case Interpreter::accessor : entry_point = ((InterpreterGenerator*)this)->generate_accessor_entry(); break;
2223 case Interpreter::abstract : entry_point = ((InterpreterGenerator*)this)->generate_abstract_entry(); break; 2227 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;
2225 2228
2226 case Interpreter::java_lang_math_sin : // fall thru 2229 case Interpreter::java_lang_math_sin : // fall thru
2227 case Interpreter::java_lang_math_cos : // fall thru 2230 case Interpreter::java_lang_math_cos : // fall thru
2228 case Interpreter::java_lang_math_tan : // fall thru 2231 case Interpreter::java_lang_math_tan : // fall thru
2229 case Interpreter::java_lang_math_abs : // fall thru 2232 case Interpreter::java_lang_math_abs : // fall thru
2230 case Interpreter::java_lang_math_log : // fall thru 2233 case Interpreter::java_lang_math_log : // fall thru
2231 case Interpreter::java_lang_math_log10 : // fall thru 2234 case Interpreter::java_lang_math_log10 : // fall thru
2232 case Interpreter::java_lang_math_sqrt : entry_point = ((InterpreterGenerator*)this)->generate_math_entry(kind); break; 2235 case Interpreter::java_lang_math_sqrt : // fall thru
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;
2233 case Interpreter::java_lang_ref_reference_get 2239 case Interpreter::java_lang_ref_reference_get
2234 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break; 2240 : entry_point = ((InterpreterGenerator*)this)->generate_Reference_get_entry(); break;
2235 default : ShouldNotReachHere(); break; 2241 default : ShouldNotReachHere(); break;
2236 } 2242 }
2237 2243
2449 // BytecodeInterpreter::pd_layout_interpreterState(cur_state, interpreter_return_address, interpreter_frame->fp()); 2455 // BytecodeInterpreter::pd_layout_interpreterState(cur_state, interpreter_return_address, interpreter_frame->fp());
2450 } 2456 }
2451 return frame_size/BytesPerWord; 2457 return frame_size/BytesPerWord;
2452 } 2458 }
2453 2459
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
2454 #endif // CC_INTERP (all) 2478 #endif // CC_INTERP (all)