< prev index next >

hotspot/src/share/vm/c1/c1_LIRGenerator.cpp

Print this page
rev 11908 : 8160543: C1: Crash in java.lang.String.indexOf in some java.sql tests
Summary: C1 must use unverified entry point for unloaded methods.
Reviewed-by:


2956   LIR_OprList* arg_list = cc->args();
2957   LIRItemList* args = invoke_visit_arguments(x);
2958   LIR_Opr receiver = LIR_OprFact::illegalOpr;
2959 
2960   // setup result register
2961   LIR_Opr result_register = LIR_OprFact::illegalOpr;
2962   if (x->type() != voidType) {
2963     result_register = result_register_for(x->type());
2964   }
2965 
2966   CodeEmitInfo* info = state_for(x, x->state());
2967 
2968   invoke_load_arguments(x, args, arg_list);
2969 
2970   if (x->has_receiver()) {
2971     args->at(0)->load_item_force(LIR_Assembler::receiverOpr());
2972     receiver = args->at(0)->result();
2973   }
2974 
2975   // emit invoke code
2976   bool optimized = x->target_is_loaded() && x->target_is_final();
2977   assert(receiver->is_illegal() || receiver->is_equal(LIR_Assembler::receiverOpr()), "must match");
2978 
2979   // JSR 292
2980   // Preserve the SP over MethodHandle call sites, if needed.
2981   ciMethod* target = x->target();
2982   bool is_method_handle_invoke = (// %%% FIXME: Are both of these relevant?
2983                                   target->is_method_handle_intrinsic() ||
2984                                   target->is_compiled_lambda_form());
2985   if (is_method_handle_invoke) {
2986     info->set_is_method_handle_invoke(true);
2987     if(FrameMap::method_handle_invoke_SP_save_opr() != LIR_OprFact::illegalOpr) {
2988         __ move(FrameMap::stack_pointer(), FrameMap::method_handle_invoke_SP_save_opr());
2989     }
2990   }
2991 
2992   switch (x->code()) {
2993     case Bytecodes::_invokestatic:
2994       __ call_static(target, result_register,
2995                      SharedRuntime::get_resolve_static_call_stub(),
2996                      arg_list, info);




2956   LIR_OprList* arg_list = cc->args();
2957   LIRItemList* args = invoke_visit_arguments(x);
2958   LIR_Opr receiver = LIR_OprFact::illegalOpr;
2959 
2960   // setup result register
2961   LIR_Opr result_register = LIR_OprFact::illegalOpr;
2962   if (x->type() != voidType) {
2963     result_register = result_register_for(x->type());
2964   }
2965 
2966   CodeEmitInfo* info = state_for(x, x->state());
2967 
2968   invoke_load_arguments(x, args, arg_list);
2969 
2970   if (x->has_receiver()) {
2971     args->at(0)->load_item_force(LIR_Assembler::receiverOpr());
2972     receiver = args->at(0)->result();
2973   }
2974 
2975   // emit invoke code
2976   bool optimized = x->target_is_final(); // implies that it is loaded too.
2977   assert(receiver->is_illegal() || receiver->is_equal(LIR_Assembler::receiverOpr()), "must match");
2978 
2979   // JSR 292
2980   // Preserve the SP over MethodHandle call sites, if needed.
2981   ciMethod* target = x->target();
2982   bool is_method_handle_invoke = (// %%% FIXME: Are both of these relevant?
2983                                   target->is_method_handle_intrinsic() ||
2984                                   target->is_compiled_lambda_form());
2985   if (is_method_handle_invoke) {
2986     info->set_is_method_handle_invoke(true);
2987     if(FrameMap::method_handle_invoke_SP_save_opr() != LIR_OprFact::illegalOpr) {
2988         __ move(FrameMap::stack_pointer(), FrameMap::method_handle_invoke_SP_save_opr());
2989     }
2990   }
2991 
2992   switch (x->code()) {
2993     case Bytecodes::_invokestatic:
2994       __ call_static(target, result_register,
2995                      SharedRuntime::get_resolve_static_call_stub(),
2996                      arg_list, info);


< prev index next >