comparison src/share/vm/opto/doCall.cpp @ 726:be93aad57795

6655646: dynamic languages need dynamically linked call sites Summary: invokedynamic instruction (JSR 292 RI) Reviewed-by: twisti, never
author jrose
date Tue, 21 Apr 2009 23:21:04 -0700
parents 194b8e3a2fc4
children c96bf21b756f
comparison
equal deleted inserted replaced
725:928912ce8438 726:be93aad57795
246 uncommon_trap(Deoptimization::Reason_uninitialized, 246 uncommon_trap(Deoptimization::Reason_uninitialized,
247 Deoptimization::Action_reinterpret, 247 Deoptimization::Action_reinterpret,
248 holder_klass); 248 holder_klass);
249 return true; 249 return true;
250 } 250 }
251 if (dest_method->is_method_handle_invoke()
252 && holder_klass->name() == ciSymbol::java_dyn_Dynamic()) {
253 // FIXME: NYI
254 uncommon_trap(Deoptimization::Reason_unhandled,
255 Deoptimization::Action_none,
256 holder_klass);
257 return true;
258 }
251 259
252 assert(dest_method->will_link(method()->holder(), klass, bc()), "dest_method: typeflow responsibility"); 260 assert(dest_method->will_link(method()->holder(), klass, bc()), "dest_method: typeflow responsibility");
253 return false; 261 return false;
254 } 262 }
255 263
746 } else if (is_inline) { 754 } else if (is_inline) {
747 switch (bc()) { 755 switch (bc()) {
748 case Bytecodes::_invokevirtual: increment_counter(SharedRuntime::nof_inlined_calls_addr()); break; 756 case Bytecodes::_invokevirtual: increment_counter(SharedRuntime::nof_inlined_calls_addr()); break;
749 case Bytecodes::_invokeinterface: increment_counter(SharedRuntime::nof_inlined_interface_calls_addr()); break; 757 case Bytecodes::_invokeinterface: increment_counter(SharedRuntime::nof_inlined_interface_calls_addr()); break;
750 case Bytecodes::_invokestatic: 758 case Bytecodes::_invokestatic:
759 case Bytecodes::_invokedynamic:
751 case Bytecodes::_invokespecial: increment_counter(SharedRuntime::nof_inlined_static_calls_addr()); break; 760 case Bytecodes::_invokespecial: increment_counter(SharedRuntime::nof_inlined_static_calls_addr()); break;
752 default: fatal("unexpected call bytecode"); 761 default: fatal("unexpected call bytecode");
753 } 762 }
754 } else { 763 } else {
755 switch (bc()) { 764 switch (bc()) {
756 case Bytecodes::_invokevirtual: increment_counter(SharedRuntime::nof_normal_calls_addr()); break; 765 case Bytecodes::_invokevirtual: increment_counter(SharedRuntime::nof_normal_calls_addr()); break;
757 case Bytecodes::_invokeinterface: increment_counter(SharedRuntime::nof_interface_calls_addr()); break; 766 case Bytecodes::_invokeinterface: increment_counter(SharedRuntime::nof_interface_calls_addr()); break;
758 case Bytecodes::_invokestatic: 767 case Bytecodes::_invokestatic:
768 case Bytecodes::_invokedynamic:
759 case Bytecodes::_invokespecial: increment_counter(SharedRuntime::nof_static_calls_addr()); break; 769 case Bytecodes::_invokespecial: increment_counter(SharedRuntime::nof_static_calls_addr()); break;
760 default: fatal("unexpected call bytecode"); 770 default: fatal("unexpected call bytecode");
761 } 771 }
762 } 772 }
763 } 773 }