1672 a = array_addressing(T_DOUBLE, 0);
1673 if (stopped()) return; // guaranteed null or range check
1674 dec_sp(2); // Pop array and index
1675 push_pair(make_load(control(), a, Type::DOUBLE, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered));
1676 break;
1677 }
1678 case Bytecodes::_bastore: array_store(T_BYTE); break;
1679 case Bytecodes::_castore: array_store(T_CHAR); break;
1680 case Bytecodes::_iastore: array_store(T_INT); break;
1681 case Bytecodes::_sastore: array_store(T_SHORT); break;
1682 case Bytecodes::_fastore: array_store(T_FLOAT); break;
1683 case Bytecodes::_aastore: {
1684 d = array_addressing(T_OBJECT, 1);
1685 if (stopped()) return; // guaranteed null or range check
1686 array_store_check();
1687 c = pop(); // Oop to store
1688 b = pop(); // index (already used)
1689 a = pop(); // the array itself
1690 const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->make_oopptr();
1691 const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1692 Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT, MemNode::release);
1693 break;
1694 }
1695 case Bytecodes::_lastore: {
1696 a = array_addressing(T_LONG, 2);
1697 if (stopped()) return; // guaranteed null or range check
1698 c = pop_pair();
1699 dec_sp(2); // Pop array and index
1700 store_to_memory(control(), a, c, T_LONG, TypeAryPtr::LONGS, MemNode::unordered);
1701 break;
1702 }
1703 case Bytecodes::_dastore: {
1704 a = array_addressing(T_DOUBLE, 2);
1705 if (stopped()) return; // guaranteed null or range check
1706 c = pop_pair();
1707 dec_sp(2); // Pop array and index
1708 c = dstore_rounding(c);
1709 store_to_memory(control(), a, c, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered);
1710 break;
1711 }
1712 case Bytecodes::_getfield:
|
1672 a = array_addressing(T_DOUBLE, 0);
1673 if (stopped()) return; // guaranteed null or range check
1674 dec_sp(2); // Pop array and index
1675 push_pair(make_load(control(), a, Type::DOUBLE, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered));
1676 break;
1677 }
1678 case Bytecodes::_bastore: array_store(T_BYTE); break;
1679 case Bytecodes::_castore: array_store(T_CHAR); break;
1680 case Bytecodes::_iastore: array_store(T_INT); break;
1681 case Bytecodes::_sastore: array_store(T_SHORT); break;
1682 case Bytecodes::_fastore: array_store(T_FLOAT); break;
1683 case Bytecodes::_aastore: {
1684 d = array_addressing(T_OBJECT, 1);
1685 if (stopped()) return; // guaranteed null or range check
1686 array_store_check();
1687 c = pop(); // Oop to store
1688 b = pop(); // index (already used)
1689 a = pop(); // the array itself
1690 const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->make_oopptr();
1691 const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1692 Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT,
1693 StoreNode::release_if_reference(T_OBJECT));
1694 break;
1695 }
1696 case Bytecodes::_lastore: {
1697 a = array_addressing(T_LONG, 2);
1698 if (stopped()) return; // guaranteed null or range check
1699 c = pop_pair();
1700 dec_sp(2); // Pop array and index
1701 store_to_memory(control(), a, c, T_LONG, TypeAryPtr::LONGS, MemNode::unordered);
1702 break;
1703 }
1704 case Bytecodes::_dastore: {
1705 a = array_addressing(T_DOUBLE, 2);
1706 if (stopped()) return; // guaranteed null or range check
1707 c = pop_pair();
1708 dec_sp(2); // Pop array and index
1709 c = dstore_rounding(c);
1710 store_to_memory(control(), a, c, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered);
1711 break;
1712 }
1713 case Bytecodes::_getfield:
|