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);
|