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