2955 switch (x->code()) {
2956 case Bytecodes::_invokestatic:
2957 __ call_static(target, result_register,
2958 SharedRuntime::get_resolve_static_call_stub(),
2959 arg_list, info);
2960 break;
2961 case Bytecodes::_invokespecial:
2962 case Bytecodes::_invokevirtual:
2963 case Bytecodes::_invokeinterface:
2964 // for final target we still produce an inline cache, in order
2965 // to be able to call mixed mode
2966 if (x->code() == Bytecodes::_invokespecial || optimized) {
2967 __ call_opt_virtual(target, receiver, result_register,
2968 SharedRuntime::get_resolve_opt_virtual_call_stub(),
2969 arg_list, info);
2970 } else if (x->vtable_index() < 0) {
2971 __ call_icvirtual(target, receiver, result_register,
2972 SharedRuntime::get_resolve_virtual_call_stub(),
2973 arg_list, info);
2974 } else {
2975 int entry_offset = in_bytes(InstanceKlass::vtable_start_offset()) + x->vtable_index() * vtableEntry::size_in_bytes();
2976 int vtable_offset = entry_offset + vtableEntry::method_offset_in_bytes();
2977 __ call_virtual(target, receiver, result_register, vtable_offset, arg_list, info);
2978 }
2979 break;
2980 case Bytecodes::_invokedynamic: {
2981 __ call_dynamic(target, receiver, result_register,
2982 SharedRuntime::get_resolve_static_call_stub(),
2983 arg_list, info);
2984 break;
2985 }
2986 default:
2987 fatal("unexpected bytecode: %s", Bytecodes::name(x->code()));
2988 break;
2989 }
2990
2991 // JSR 292
2992 // Restore the SP after MethodHandle call sites, if needed.
2993 if (is_method_handle_invoke
2994 && FrameMap::method_handle_invoke_SP_save_opr() != LIR_OprFact::illegalOpr) {
2995 __ move(FrameMap::method_handle_invoke_SP_save_opr(), FrameMap::stack_pointer());
|
2955 switch (x->code()) {
2956 case Bytecodes::_invokestatic:
2957 __ call_static(target, result_register,
2958 SharedRuntime::get_resolve_static_call_stub(),
2959 arg_list, info);
2960 break;
2961 case Bytecodes::_invokespecial:
2962 case Bytecodes::_invokevirtual:
2963 case Bytecodes::_invokeinterface:
2964 // for final target we still produce an inline cache, in order
2965 // to be able to call mixed mode
2966 if (x->code() == Bytecodes::_invokespecial || optimized) {
2967 __ call_opt_virtual(target, receiver, result_register,
2968 SharedRuntime::get_resolve_opt_virtual_call_stub(),
2969 arg_list, info);
2970 } else if (x->vtable_index() < 0) {
2971 __ call_icvirtual(target, receiver, result_register,
2972 SharedRuntime::get_resolve_virtual_call_stub(),
2973 arg_list, info);
2974 } else {
2975 int entry_offset = in_bytes(Klass::vtable_start_offset()) + x->vtable_index() * vtableEntry::size_in_bytes();
2976 int vtable_offset = entry_offset + vtableEntry::method_offset_in_bytes();
2977 __ call_virtual(target, receiver, result_register, vtable_offset, arg_list, info);
2978 }
2979 break;
2980 case Bytecodes::_invokedynamic: {
2981 __ call_dynamic(target, receiver, result_register,
2982 SharedRuntime::get_resolve_static_call_stub(),
2983 arg_list, info);
2984 break;
2985 }
2986 default:
2987 fatal("unexpected bytecode: %s", Bytecodes::name(x->code()));
2988 break;
2989 }
2990
2991 // JSR 292
2992 // Restore the SP after MethodHandle call sites, if needed.
2993 if (is_method_handle_invoke
2994 && FrameMap::method_handle_invoke_SP_save_opr() != LIR_OprFact::illegalOpr) {
2995 __ move(FrameMap::method_handle_invoke_SP_save_opr(), FrameMap::stack_pointer());
|