src/share/vm/opto/parse2.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File valhalla Sdiff src/share/vm/opto

src/share/vm/opto/parse2.cpp

Print this page




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


src/share/vm/opto/parse2.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File