comparison src/share/vm/ci/ciTypeFlow.cpp @ 1137:97125851f396

6829187: compiler optimizations required for JSR 292 Summary: C2 implementation for invokedynamic support. Reviewed-by: kvn, never
author twisti
date Tue, 05 Jan 2010 13:05:58 +0100
parents 3a2aa26bdc58
children c18cbe5936b8 ab102d5d923e
comparison
equal deleted inserted replaced
1136:4b84186a8248 1137:97125851f396
633 bool has_receiver) { 633 bool has_receiver) {
634 bool will_link; 634 bool will_link;
635 ciMethod* method = str->get_method(will_link); 635 ciMethod* method = str->get_method(will_link);
636 if (!will_link) { 636 if (!will_link) {
637 // We weren't able to find the method. 637 // We weren't able to find the method.
638 ciKlass* unloaded_holder = method->holder(); 638 if (str->cur_bc() == Bytecodes::_invokedynamic) {
639 trap(str, unloaded_holder, str->get_method_holder_index()); 639 trap(str, NULL,
640 Deoptimization::make_trap_request
641 (Deoptimization::Reason_uninitialized,
642 Deoptimization::Action_reinterpret));
643 } else {
644 ciKlass* unloaded_holder = method->holder();
645 trap(str, unloaded_holder, str->get_method_holder_index());
646 }
640 } else { 647 } else {
641 ciSignature* signature = method->signature(); 648 ciSignature* signature = method->signature();
642 ciSignatureStream sigstr(signature); 649 ciSignatureStream sigstr(signature);
643 int arg_size = signature->size(); 650 int arg_size = signature->size();
644 int stack_base = stack_size() - arg_size; 651 int stack_base = stack_size() - arg_size;
1290 break; 1297 break;
1291 } 1298 }
1292 case Bytecodes::_invokeinterface: do_invoke(str, true); break; 1299 case Bytecodes::_invokeinterface: do_invoke(str, true); break;
1293 case Bytecodes::_invokespecial: do_invoke(str, true); break; 1300 case Bytecodes::_invokespecial: do_invoke(str, true); break;
1294 case Bytecodes::_invokestatic: do_invoke(str, false); break; 1301 case Bytecodes::_invokestatic: do_invoke(str, false); break;
1295
1296 case Bytecodes::_invokevirtual: do_invoke(str, true); break; 1302 case Bytecodes::_invokevirtual: do_invoke(str, true); break;
1303 case Bytecodes::_invokedynamic: do_invoke(str, false); break;
1297 1304
1298 case Bytecodes::_istore: store_local_int(str->get_index()); break; 1305 case Bytecodes::_istore: store_local_int(str->get_index()); break;
1299 case Bytecodes::_istore_0: store_local_int(0); break; 1306 case Bytecodes::_istore_0: store_local_int(0); break;
1300 case Bytecodes::_istore_1: store_local_int(1); break; 1307 case Bytecodes::_istore_1: store_local_int(1); break;
1301 case Bytecodes::_istore_2: store_local_int(2); break; 1308 case Bytecodes::_istore_2: store_local_int(2); break;