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 1772 array_store_check(); 1773 c = pop(); // Oop to store 1774 b = pop(); // index (already used) 1775 a = pop(); // the array itself 1776 const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->make_oopptr(); 1777 const TypeAryPtr* adr_type = TypeAryPtr::OOPS; 1778 Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT, 1779 StoreNode::release_if_reference(T_OBJECT)); 1780 break; 1781 } 1782 case Bytecodes::_lastore: { 1783 a = array_addressing(T_LONG, 2); 1784 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_flattened(this, a, d); 1760 break; 1761 } 1762 1763 const TypeAryPtr* adr_type = TypeAryPtr::OOPS; 1764 Node* oop = c->as_ValueType()->allocate(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 1772 array_store_check(); 1773 c = pop(); // Oop to store 1774 b = pop(); // index (already used) 1775 a = pop(); // the array itself 1776 const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->make_oopptr(); 1777 const TypeAryPtr* adr_type = TypeAryPtr::OOPS; 1778 Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT, 1779 StoreNode::release_if_reference(T_OBJECT)); 1780 break; 1781 } 1782 case Bytecodes::_lastore: { 1783 a = array_addressing(T_LONG, 2); 1784 if (stopped()) return; // guaranteed null or range check |