< prev index next >

src/share/vm/opto/parse2.cpp

Print this page




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


< prev index next >