1520 // some methods are obviously bindable without any type checks so |
1520 // some methods are obviously bindable without any type checks so |
1521 // convert them directly to an invokespecial. |
1521 // convert them directly to an invokespecial. |
1522 if (target->is_loaded() && !target->is_abstract() && |
1522 if (target->is_loaded() && !target->is_abstract() && |
1523 target->can_be_statically_bound() && code == Bytecodes::_invokevirtual) { |
1523 target->can_be_statically_bound() && code == Bytecodes::_invokevirtual) { |
1524 code = Bytecodes::_invokespecial; |
1524 code = Bytecodes::_invokespecial; |
|
1525 } |
|
1526 |
|
1527 if (code == Bytecodes::_invokedynamic) { |
|
1528 BAILOUT("invokedynamic NYI"); // FIXME |
|
1529 return; |
1525 } |
1530 } |
1526 |
1531 |
1527 // NEEDS_CLEANUP |
1532 // NEEDS_CLEANUP |
1528 // I've added the target-is_loaded() test below but I don't really understand |
1533 // I've added the target-is_loaded() test below but I don't really understand |
1529 // how klass->is_loaded() can be true and yet target->is_loaded() is false. |
1534 // how klass->is_loaded() can be true and yet target->is_loaded() is false. |
2429 case Bytecodes::_getfield : // fall through |
2434 case Bytecodes::_getfield : // fall through |
2430 case Bytecodes::_putfield : access_field(code); break; |
2435 case Bytecodes::_putfield : access_field(code); break; |
2431 case Bytecodes::_invokevirtual : // fall through |
2436 case Bytecodes::_invokevirtual : // fall through |
2432 case Bytecodes::_invokespecial : // fall through |
2437 case Bytecodes::_invokespecial : // fall through |
2433 case Bytecodes::_invokestatic : // fall through |
2438 case Bytecodes::_invokestatic : // fall through |
|
2439 case Bytecodes::_invokedynamic : // fall through |
2434 case Bytecodes::_invokeinterface: invoke(code); break; |
2440 case Bytecodes::_invokeinterface: invoke(code); break; |
2435 case Bytecodes::_xxxunusedxxx : ShouldNotReachHere(); break; |
|
2436 case Bytecodes::_new : new_instance(s.get_index_big()); break; |
2441 case Bytecodes::_new : new_instance(s.get_index_big()); break; |
2437 case Bytecodes::_newarray : new_type_array(); break; |
2442 case Bytecodes::_newarray : new_type_array(); break; |
2438 case Bytecodes::_anewarray : new_object_array(); break; |
2443 case Bytecodes::_anewarray : new_object_array(); break; |
2439 case Bytecodes::_arraylength : ipush(append(new ArrayLength(apop(), lock_stack()))); break; |
2444 case Bytecodes::_arraylength : ipush(append(new ArrayLength(apop(), lock_stack()))); break; |
2440 case Bytecodes::_athrow : throw_op(s.cur_bci()); break; |
2445 case Bytecodes::_athrow : throw_op(s.cur_bci()); break; |
2569 , Bytecodes::_getfield |
2574 , Bytecodes::_getfield |
2570 , Bytecodes::_putfield |
2575 , Bytecodes::_putfield |
2571 , Bytecodes::_invokevirtual |
2576 , Bytecodes::_invokevirtual |
2572 , Bytecodes::_invokespecial |
2577 , Bytecodes::_invokespecial |
2573 , Bytecodes::_invokestatic |
2578 , Bytecodes::_invokestatic |
|
2579 , Bytecodes::_invokedynamic |
2574 , Bytecodes::_invokeinterface |
2580 , Bytecodes::_invokeinterface |
2575 , Bytecodes::_new |
2581 , Bytecodes::_new |
2576 , Bytecodes::_newarray |
2582 , Bytecodes::_newarray |
2577 , Bytecodes::_anewarray |
2583 , Bytecodes::_anewarray |
2578 , Bytecodes::_arraylength |
2584 , Bytecodes::_arraylength |