< prev index next >

src/share/vm/c1/c1_LIRGenerator.cpp

Print this page
rev 12270 : 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:


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




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


< prev index next >