< prev index next >

src/share/vm/c1/c1_LIRGenerator.cpp

Print this page




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


< prev index next >