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 = InstanceKlass::vtable_start_offset() + x->vtable_index() * vtableEntry::size(); 2976 int vtable_offset = entry_offset * wordSize + 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()); 2996 } | 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()); 2996 } |