1511 if (con_type != NULL) {
1512 push_node(con_type->basic_type(), makecon(con_type));
1513 }
1514 }
1515
1516 break;
1517
1518 case Bytecodes::_aload_0:
1519 push( local(0) );
1520 break;
1521 case Bytecodes::_aload_1:
1522 push( local(1) );
1523 break;
1524 case Bytecodes::_aload_2:
1525 push( local(2) );
1526 break;
1527 case Bytecodes::_aload_3:
1528 push( local(3) );
1529 break;
1530 case Bytecodes::_aload:
1531 case Bytecodes::_vload:
1532 push( local(iter().get_index()) );
1533 break;
1534
1535 case Bytecodes::_fload_0:
1536 case Bytecodes::_iload_0:
1537 push( local(0) );
1538 break;
1539 case Bytecodes::_fload_1:
1540 case Bytecodes::_iload_1:
1541 push( local(1) );
1542 break;
1543 case Bytecodes::_fload_2:
1544 case Bytecodes::_iload_2:
1545 push( local(2) );
1546 break;
1547 case Bytecodes::_fload_3:
1548 case Bytecodes::_iload_3:
1549 push( local(3) );
1550 break;
1551 case Bytecodes::_fload:
1589 set_local( 0, pop() );
1590 break;
1591 case Bytecodes::_fstore_1:
1592 case Bytecodes::_istore_1:
1593 case Bytecodes::_astore_1:
1594 set_local( 1, pop() );
1595 break;
1596 case Bytecodes::_fstore_2:
1597 case Bytecodes::_istore_2:
1598 case Bytecodes::_astore_2:
1599 set_local( 2, pop() );
1600 break;
1601 case Bytecodes::_fstore_3:
1602 case Bytecodes::_istore_3:
1603 case Bytecodes::_astore_3:
1604 set_local( 3, pop() );
1605 break;
1606 case Bytecodes::_fstore:
1607 case Bytecodes::_istore:
1608 case Bytecodes::_astore:
1609 case Bytecodes::_vstore:
1610 set_local( iter().get_index(), pop() );
1611 break;
1612 // long stores
1613 case Bytecodes::_lstore_0:
1614 set_pair_local( 0, pop_pair() );
1615 break;
1616 case Bytecodes::_lstore_1:
1617 set_pair_local( 1, pop_pair() );
1618 break;
1619 case Bytecodes::_lstore_2:
1620 set_pair_local( 2, pop_pair() );
1621 break;
1622 case Bytecodes::_lstore_3:
1623 set_pair_local( 3, pop_pair() );
1624 break;
1625 case Bytecodes::_lstore:
1626 set_pair_local( iter().get_index(), pop_pair() );
1627 break;
1628
1629 // double stores
1708 push( c );
1709 push( b );
1710 push( a );
1711 break;
1712
1713 case Bytecodes::_arraylength: {
1714 // Must do null-check with value on expression stack
1715 Node *ary = null_check(peek(), T_ARRAY);
1716 // Compile-time detect of null-exception?
1717 if (stopped()) return;
1718 a = pop();
1719 push(load_array_length(a));
1720 break;
1721 }
1722
1723 case Bytecodes::_baload: array_load(T_BYTE); break;
1724 case Bytecodes::_caload: array_load(T_CHAR); break;
1725 case Bytecodes::_iaload: array_load(T_INT); break;
1726 case Bytecodes::_saload: array_load(T_SHORT); break;
1727 case Bytecodes::_faload: array_load(T_FLOAT); break;
1728 case Bytecodes::_vaload: array_load(T_VALUETYPE); break;
1729 case Bytecodes::_aaload: array_load(T_OBJECT); break;
1730 case Bytecodes::_laload: {
1731 a = array_addressing(T_LONG, 0);
1732 if (stopped()) return; // guaranteed null or range check
1733 dec_sp(2); // Pop array and index
1734 push_pair(make_load(control(), a, TypeLong::LONG, T_LONG, TypeAryPtr::LONGS, MemNode::unordered));
1735 break;
1736 }
1737 case Bytecodes::_daload: {
1738 a = array_addressing(T_DOUBLE, 0);
1739 if (stopped()) return; // guaranteed null or range check
1740 dec_sp(2); // Pop array and index
1741 push_pair(make_load(control(), a, Type::DOUBLE, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered));
1742 break;
1743 }
1744 case Bytecodes::_bastore: array_store(T_BYTE); break;
1745 case Bytecodes::_castore: array_store(T_CHAR); break;
1746 case Bytecodes::_iastore: array_store(T_INT); break;
1747 case Bytecodes::_sastore: array_store(T_SHORT); break;
1748 case Bytecodes::_fastore: array_store(T_FLOAT); break;
1749 case Bytecodes::_vastore: {
1750 d = array_addressing(T_OBJECT, 1);
1751 if (stopped()) return; // guaranteed null or range check
1752 array_store_check(true);
1753 c = pop(); // Oop to store
1754 b = pop(); // index (already used)
1755 a = pop(); // the array itself
1756 const TypeAryPtr* arytype = _gvn.type(a)->is_aryptr();
1757 const Type* elemtype = arytype->elem();
1758
1759 if (elemtype->isa_valuetype()) {
1760 c->as_ValueType()->store_flattened(this, a, d);
1761 break;
1762 }
1763
1764 const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1765 Node* oop = c->as_ValueType()->allocate(this)->get_oop();
1766 Node* store = store_oop_to_array(control(), a, d, adr_type, oop, elemtype->make_oopptr(), T_OBJECT,
1767 StoreNode::release_if_reference(T_OBJECT));
1768 break;
1769 }
1770 case Bytecodes::_aastore: {
1771 d = array_addressing(T_OBJECT, 1);
1772 if (stopped()) return; // guaranteed null or range check
1773 array_store_check();
1774 c = pop(); // Oop to store
1775 b = pop(); // index (already used)
1776 a = pop(); // the array itself
1777 const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->make_oopptr();
1778 const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1779 Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT,
1780 StoreNode::release_if_reference(T_OBJECT));
1781 break;
1782 }
1783 case Bytecodes::_lastore: {
1784 a = array_addressing(T_LONG, 2);
1785 if (stopped()) return; // guaranteed null or range check
1786 c = pop_pair();
1787 dec_sp(2); // Pop array and index
1788 store_to_memory(control(), a, c, T_LONG, TypeAryPtr::LONGS, MemNode::unordered);
1789 break;
2234 break;
2235
2236 case Bytecodes::_i2d:
2237 a = pop();
2238 b = _gvn.transform( new ConvI2DNode(a));
2239 push_pair(b);
2240 break;
2241
2242 case Bytecodes::_iinc: // Increment local
2243 i = iter().get_index(); // Get local index
2244 set_local( i, _gvn.transform( new AddINode( _gvn.intcon(iter().get_iinc_con()), local(i) ) ) );
2245 break;
2246
2247 // Exit points of synchronized methods must have an unlock node
2248 case Bytecodes::_return:
2249 return_current(NULL);
2250 break;
2251
2252 case Bytecodes::_ireturn:
2253 case Bytecodes::_areturn:
2254 case Bytecodes::_vreturn:
2255 case Bytecodes::_freturn:
2256 return_current(pop());
2257 break;
2258 case Bytecodes::_lreturn:
2259 return_current(pop_pair());
2260 break;
2261 case Bytecodes::_dreturn:
2262 return_current(pop_pair());
2263 break;
2264
2265 case Bytecodes::_athrow:
2266 // null exception oop throws NULL pointer exception
2267 null_check(peek());
2268 if (stopped()) return;
2269 // Hook the thrown exception directly to subsequent handlers.
2270 if (BailoutToInterpreterForThrows) {
2271 // Keep method interpreted from now on.
2272 uncommon_trap(Deoptimization::Reason_unhandled,
2273 Deoptimization::Action_make_not_compilable);
2274 return;
2389 do_call();
2390 break;
2391 case Bytecodes::_checkcast:
2392 do_checkcast();
2393 break;
2394 case Bytecodes::_instanceof:
2395 do_instanceof();
2396 break;
2397 case Bytecodes::_anewarray:
2398 do_newarray();
2399 break;
2400 case Bytecodes::_newarray:
2401 do_newarray((BasicType)iter().get_index());
2402 break;
2403 case Bytecodes::_multianewarray:
2404 do_multianewarray();
2405 break;
2406 case Bytecodes::_new:
2407 do_new();
2408 break;
2409 case Bytecodes::_vdefault:
2410 do_vdefault();
2411 break;
2412 case Bytecodes::_vwithfield:
2413 do_vwithfield();
2414 break;
2415
2416 case Bytecodes::_jsr:
2417 case Bytecodes::_jsr_w:
2418 do_jsr();
2419 break;
2420
2421 case Bytecodes::_ret:
2422 do_ret();
2423 break;
2424
2425
2426 case Bytecodes::_monitorenter:
2427 do_monitor_enter();
2428 break;
2429
2430 case Bytecodes::_monitorexit:
2431 do_monitor_exit();
2432 break;
2433
2434 case Bytecodes::_vunbox:
2435 do_vunbox();
2436 break;
2437
2438 case Bytecodes::_vbox:
2439 do_vbox();
2440 break;
2441
2442 case Bytecodes::_breakpoint:
2443 // Breakpoint set concurrently to compile
2444 // %%% use an uncommon trap?
2445 C->record_failure("breakpoint in method");
2446 return;
2447
2448 default:
2449 #ifndef PRODUCT
2450 map()->dump(99);
2451 #endif
2452 tty->print("\nUnhandled bytecode %s\n", Bytecodes::name(bc()) );
2453 ShouldNotReachHere();
2454 }
2455
2456 #ifndef PRODUCT
2457 IdealGraphPrinter *printer = C->printer();
2458 if (printer && printer->should_print(1)) {
2459 char buffer[256];
2460 sprintf(buffer, "Bytecode %d: %s", bci(), Bytecodes::name(bc()));
2461 bool old = printer->traverse_outs();
|
1511 if (con_type != NULL) {
1512 push_node(con_type->basic_type(), makecon(con_type));
1513 }
1514 }
1515
1516 break;
1517
1518 case Bytecodes::_aload_0:
1519 push( local(0) );
1520 break;
1521 case Bytecodes::_aload_1:
1522 push( local(1) );
1523 break;
1524 case Bytecodes::_aload_2:
1525 push( local(2) );
1526 break;
1527 case Bytecodes::_aload_3:
1528 push( local(3) );
1529 break;
1530 case Bytecodes::_aload:
1531 push( local(iter().get_index()) );
1532 break;
1533
1534 case Bytecodes::_fload_0:
1535 case Bytecodes::_iload_0:
1536 push( local(0) );
1537 break;
1538 case Bytecodes::_fload_1:
1539 case Bytecodes::_iload_1:
1540 push( local(1) );
1541 break;
1542 case Bytecodes::_fload_2:
1543 case Bytecodes::_iload_2:
1544 push( local(2) );
1545 break;
1546 case Bytecodes::_fload_3:
1547 case Bytecodes::_iload_3:
1548 push( local(3) );
1549 break;
1550 case Bytecodes::_fload:
1588 set_local( 0, pop() );
1589 break;
1590 case Bytecodes::_fstore_1:
1591 case Bytecodes::_istore_1:
1592 case Bytecodes::_astore_1:
1593 set_local( 1, pop() );
1594 break;
1595 case Bytecodes::_fstore_2:
1596 case Bytecodes::_istore_2:
1597 case Bytecodes::_astore_2:
1598 set_local( 2, pop() );
1599 break;
1600 case Bytecodes::_fstore_3:
1601 case Bytecodes::_istore_3:
1602 case Bytecodes::_astore_3:
1603 set_local( 3, pop() );
1604 break;
1605 case Bytecodes::_fstore:
1606 case Bytecodes::_istore:
1607 case Bytecodes::_astore:
1608 set_local( iter().get_index(), pop() );
1609 break;
1610 // long stores
1611 case Bytecodes::_lstore_0:
1612 set_pair_local( 0, pop_pair() );
1613 break;
1614 case Bytecodes::_lstore_1:
1615 set_pair_local( 1, pop_pair() );
1616 break;
1617 case Bytecodes::_lstore_2:
1618 set_pair_local( 2, pop_pair() );
1619 break;
1620 case Bytecodes::_lstore_3:
1621 set_pair_local( 3, pop_pair() );
1622 break;
1623 case Bytecodes::_lstore:
1624 set_pair_local( iter().get_index(), pop_pair() );
1625 break;
1626
1627 // double stores
1706 push( c );
1707 push( b );
1708 push( a );
1709 break;
1710
1711 case Bytecodes::_arraylength: {
1712 // Must do null-check with value on expression stack
1713 Node *ary = null_check(peek(), T_ARRAY);
1714 // Compile-time detect of null-exception?
1715 if (stopped()) return;
1716 a = pop();
1717 push(load_array_length(a));
1718 break;
1719 }
1720
1721 case Bytecodes::_baload: array_load(T_BYTE); break;
1722 case Bytecodes::_caload: array_load(T_CHAR); break;
1723 case Bytecodes::_iaload: array_load(T_INT); break;
1724 case Bytecodes::_saload: array_load(T_SHORT); break;
1725 case Bytecodes::_faload: array_load(T_FLOAT); break;
1726 case Bytecodes::_aaload: array_load(T_OBJECT); break;
1727 case Bytecodes::_laload: {
1728 a = array_addressing(T_LONG, 0);
1729 if (stopped()) return; // guaranteed null or range check
1730 dec_sp(2); // Pop array and index
1731 push_pair(make_load(control(), a, TypeLong::LONG, T_LONG, TypeAryPtr::LONGS, MemNode::unordered));
1732 break;
1733 }
1734 case Bytecodes::_daload: {
1735 a = array_addressing(T_DOUBLE, 0);
1736 if (stopped()) return; // guaranteed null or range check
1737 dec_sp(2); // Pop array and index
1738 push_pair(make_load(control(), a, Type::DOUBLE, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered));
1739 break;
1740 }
1741 case Bytecodes::_bastore: array_store(T_BYTE); break;
1742 case Bytecodes::_castore: array_store(T_CHAR); break;
1743 case Bytecodes::_iastore: array_store(T_INT); break;
1744 case Bytecodes::_sastore: array_store(T_SHORT); break;
1745 case Bytecodes::_fastore: array_store(T_FLOAT); break;
1746 // The vastore case has to merged into the aastore case
1747 // case Bytecodes::_vastore: {
1748 // d = array_addressing(T_OBJECT, 1);
1749 // if (stopped()) return; // guaranteed null or range check
1750 // array_store_check(true);
1751 // c = pop(); // Oop to store
1752 // b = pop(); // index (already used)
1753 // a = pop(); // the array itself
1754 // const TypeAryPtr* arytype = _gvn.type(a)->is_aryptr();
1755 // const Type* elemtype = arytype->elem();
1756 //
1757 // if (elemtype->isa_valuetype()) {
1758 // c->as_ValueType()->store_flattened(this, a, d);
1759 // break;
1760 // }
1761 //
1762 // const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1763 // Node* oop = c->as_ValueType()->allocate(this)->get_oop();
1764 // Node* store = store_oop_to_array(control(), a, d, adr_type, oop, elemtype->make_oopptr(), T_OBJECT,
1765 // StoreNode::release_if_reference(T_OBJECT));
1766 // break;
1767 // }
1768 case Bytecodes::_aastore: {
1769 d = array_addressing(T_OBJECT, 1);
1770 if (stopped()) return; // guaranteed null or range check
1771 array_store_check();
1772 c = pop(); // Oop to store
1773 b = pop(); // index (already used)
1774 a = pop(); // the array itself
1775 const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->make_oopptr();
1776 const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1777 Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT,
1778 StoreNode::release_if_reference(T_OBJECT));
1779 break;
1780 }
1781 case Bytecodes::_lastore: {
1782 a = array_addressing(T_LONG, 2);
1783 if (stopped()) return; // guaranteed null or range check
1784 c = pop_pair();
1785 dec_sp(2); // Pop array and index
1786 store_to_memory(control(), a, c, T_LONG, TypeAryPtr::LONGS, MemNode::unordered);
1787 break;
2232 break;
2233
2234 case Bytecodes::_i2d:
2235 a = pop();
2236 b = _gvn.transform( new ConvI2DNode(a));
2237 push_pair(b);
2238 break;
2239
2240 case Bytecodes::_iinc: // Increment local
2241 i = iter().get_index(); // Get local index
2242 set_local( i, _gvn.transform( new AddINode( _gvn.intcon(iter().get_iinc_con()), local(i) ) ) );
2243 break;
2244
2245 // Exit points of synchronized methods must have an unlock node
2246 case Bytecodes::_return:
2247 return_current(NULL);
2248 break;
2249
2250 case Bytecodes::_ireturn:
2251 case Bytecodes::_areturn:
2252 case Bytecodes::_freturn:
2253 return_current(pop());
2254 break;
2255 case Bytecodes::_lreturn:
2256 return_current(pop_pair());
2257 break;
2258 case Bytecodes::_dreturn:
2259 return_current(pop_pair());
2260 break;
2261
2262 case Bytecodes::_athrow:
2263 // null exception oop throws NULL pointer exception
2264 null_check(peek());
2265 if (stopped()) return;
2266 // Hook the thrown exception directly to subsequent handlers.
2267 if (BailoutToInterpreterForThrows) {
2268 // Keep method interpreted from now on.
2269 uncommon_trap(Deoptimization::Reason_unhandled,
2270 Deoptimization::Action_make_not_compilable);
2271 return;
2386 do_call();
2387 break;
2388 case Bytecodes::_checkcast:
2389 do_checkcast();
2390 break;
2391 case Bytecodes::_instanceof:
2392 do_instanceof();
2393 break;
2394 case Bytecodes::_anewarray:
2395 do_newarray();
2396 break;
2397 case Bytecodes::_newarray:
2398 do_newarray((BasicType)iter().get_index());
2399 break;
2400 case Bytecodes::_multianewarray:
2401 do_multianewarray();
2402 break;
2403 case Bytecodes::_new:
2404 do_new();
2405 break;
2406 case Bytecodes::_defaultvalue:
2407 do_defaultvalue();
2408 break;
2409 case Bytecodes::_withfield:
2410 do_withfield();
2411 break;
2412
2413 case Bytecodes::_jsr:
2414 case Bytecodes::_jsr_w:
2415 do_jsr();
2416 break;
2417
2418 case Bytecodes::_ret:
2419 do_ret();
2420 break;
2421
2422
2423 case Bytecodes::_monitorenter:
2424 do_monitor_enter();
2425 break;
2426
2427 case Bytecodes::_monitorexit:
2428 do_monitor_exit();
2429 break;
2430
2431 case Bytecodes::_breakpoint:
2432 // Breakpoint set concurrently to compile
2433 // %%% use an uncommon trap?
2434 C->record_failure("breakpoint in method");
2435 return;
2436
2437 default:
2438 #ifndef PRODUCT
2439 map()->dump(99);
2440 #endif
2441 tty->print("\nUnhandled bytecode %s\n", Bytecodes::name(bc()) );
2442 ShouldNotReachHere();
2443 }
2444
2445 #ifndef PRODUCT
2446 IdealGraphPrinter *printer = C->printer();
2447 if (printer && printer->should_print(1)) {
2448 char buffer[256];
2449 sprintf(buffer, "Bytecode %d: %s", bci(), Bytecodes::name(bc()));
2450 bool old = printer->traverse_outs();
|