1731 if (stopped()) return; // guaranteed null or range check
1732 dec_sp(2); // Pop array and index
1733 push_pair(make_load(control(), a, TypeLong::LONG, T_LONG, TypeAryPtr::LONGS, MemNode::unordered));
1734 break;
1735 }
1736 case Bytecodes::_daload: {
1737 a = array_addressing(T_DOUBLE, 0);
1738 if (stopped()) return; // guaranteed null or range check
1739 dec_sp(2); // Pop array and index
1740 push_pair(make_load(control(), a, Type::DOUBLE, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered));
1741 break;
1742 }
1743 case Bytecodes::_bastore: array_store(T_BYTE); break;
1744 case Bytecodes::_castore: array_store(T_CHAR); break;
1745 case Bytecodes::_iastore: array_store(T_INT); break;
1746 case Bytecodes::_sastore: array_store(T_SHORT); break;
1747 case Bytecodes::_fastore: array_store(T_FLOAT); break;
1748 case Bytecodes::_vastore: {
1749 d = array_addressing(T_OBJECT, 1);
1750 if (stopped()) return; // guaranteed null or range check
1751 // TODO fix this
1752 // array_store_check();
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(this, a, d);
1761 break;
1762 }
1763
1764 const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1765 Node* oop = c->as_ValueType()->store_to_memory(this);
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
|
1731 if (stopped()) return; // guaranteed null or range check
1732 dec_sp(2); // Pop array and index
1733 push_pair(make_load(control(), a, TypeLong::LONG, T_LONG, TypeAryPtr::LONGS, MemNode::unordered));
1734 break;
1735 }
1736 case Bytecodes::_daload: {
1737 a = array_addressing(T_DOUBLE, 0);
1738 if (stopped()) return; // guaranteed null or range check
1739 dec_sp(2); // Pop array and index
1740 push_pair(make_load(control(), a, Type::DOUBLE, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered));
1741 break;
1742 }
1743 case Bytecodes::_bastore: array_store(T_BYTE); break;
1744 case Bytecodes::_castore: array_store(T_CHAR); break;
1745 case Bytecodes::_iastore: array_store(T_INT); break;
1746 case Bytecodes::_sastore: array_store(T_SHORT); break;
1747 case Bytecodes::_fastore: array_store(T_FLOAT); break;
1748 case Bytecodes::_vastore: {
1749 d = array_addressing(T_OBJECT, 1);
1750 if (stopped()) return; // guaranteed null or range check
1751 array_store_check(true);
1752 c = pop(); // Oop to store
1753 b = pop(); // index (already used)
1754 a = pop(); // the array itself
1755 const TypeAryPtr* arytype = _gvn.type(a)->is_aryptr();
1756 const Type* elemtype = arytype->elem();
1757
1758 if (elemtype->isa_valuetype()) {
1759 c->as_ValueType()->store(this, a, d);
1760 break;
1761 }
1762
1763 const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1764 Node* oop = c->as_ValueType()->store_to_memory(this);
1765 Node* store = store_oop_to_array(control(), a, d, adr_type, oop, elemtype->make_oopptr(), T_OBJECT,
1766 StoreNode::release_if_reference(T_OBJECT));
1767 break;
1768 }
1769 case Bytecodes::_aastore: {
1770 d = array_addressing(T_OBJECT, 1);
1771 if (stopped()) return; // guaranteed null or range check
|