< prev index next >

src/hotspot/share/cds/aotMetaspace.cpp

Print this page
*** 75,10 ***
--- 75,12 ---
  #include "memory/resourceArea.hpp"
  #include "memory/universe.hpp"
  #include "nmt/memTracker.hpp"
  #include "oops/compressedKlass.hpp"
  #include "oops/constantPool.inline.hpp"
+ #include "oops/flatArrayKlass.hpp"
+ #include "oops/inlineKlass.hpp"
  #include "oops/instanceMirrorKlass.hpp"
  #include "oops/klass.inline.hpp"
  #include "oops/objArrayOop.hpp"
  #include "oops/oop.inline.hpp"
  #include "oops/oopHandle.hpp"

*** 501,11 ***
    soc->do_tag(sizeof(Method));
    soc->do_tag(sizeof(ConstMethod));
    soc->do_tag(arrayOopDesc::base_offset_in_bytes(T_BYTE));
    soc->do_tag(sizeof(ConstantPool));
    soc->do_tag(sizeof(ConstantPoolCache));
!   soc->do_tag(objArrayOopDesc::base_offset_in_bytes());
    soc->do_tag(typeArrayOopDesc::base_offset_in_bytes(T_BYTE));
    soc->do_tag(sizeof(Symbol));
  
    // Need to do this first, as subsequent steps may call virtual functions
    // in archived Metadata objects.
--- 503,11 ---
    soc->do_tag(sizeof(Method));
    soc->do_tag(sizeof(ConstMethod));
    soc->do_tag(arrayOopDesc::base_offset_in_bytes(T_BYTE));
    soc->do_tag(sizeof(ConstantPool));
    soc->do_tag(sizeof(ConstantPoolCache));
!   soc->do_tag(refArrayOopDesc::base_offset_in_bytes());
    soc->do_tag(typeArrayOopDesc::base_offset_in_bytes(T_BYTE));
    soc->do_tag(sizeof(Symbol));
  
    // Need to do this first, as subsequent steps may call virtual functions
    // in archived Metadata objects.

*** 580,11 ***
          ResolvedFieldEntry* rfe = cp->resolved_field_entry_at(bcs.get_index_u2());
          switch(rfe->tos_state()) {
          case btos:
            // fallthrough
          case ztos: new_code = Bytecodes::_fast_bgetfield; break;
!         case atos: new_code = Bytecodes::_fast_agetfield; break;
          case itos: new_code = Bytecodes::_fast_igetfield; break;
          case ctos: new_code = Bytecodes::_fast_cgetfield; break;
          case stos: new_code = Bytecodes::_fast_sgetfield; break;
          case ltos: new_code = Bytecodes::_fast_lgetfield; break;
          case ftos: new_code = Bytecodes::_fast_fgetfield; break;
--- 582,18 ---
          ResolvedFieldEntry* rfe = cp->resolved_field_entry_at(bcs.get_index_u2());
          switch(rfe->tos_state()) {
          case btos:
            // fallthrough
          case ztos: new_code = Bytecodes::_fast_bgetfield; break;
!         case atos: {
+           if (rfe->is_flat()) {
+             new_code = Bytecodes::_fast_vgetfield;
+           } else {
+             new_code = Bytecodes::_fast_agetfield;
+           }
+           break;
+         }
          case itos: new_code = Bytecodes::_fast_igetfield; break;
          case ctos: new_code = Bytecodes::_fast_cgetfield; break;
          case stos: new_code = Bytecodes::_fast_sgetfield; break;
          case ltos: new_code = Bytecodes::_fast_lgetfield; break;
          case ftos: new_code = Bytecodes::_fast_fgetfield; break;

*** 605,11 ***
          assert(!CDSConfig::is_dumping_preimage_static_archive(), "preimage should not have resolved field references");
          ResolvedFieldEntry* rfe = cp->resolved_field_entry_at(bcs.get_index_u2());
          switch(rfe->tos_state()) {
          case btos: new_code = Bytecodes::_fast_bputfield; break;
          case ztos: new_code = Bytecodes::_fast_zputfield; break;
!         case atos: new_code = Bytecodes::_fast_aputfield; break;
          case itos: new_code = Bytecodes::_fast_iputfield; break;
          case ctos: new_code = Bytecodes::_fast_cputfield; break;
          case stos: new_code = Bytecodes::_fast_sputfield; break;
          case ltos: new_code = Bytecodes::_fast_lputfield; break;
          case ftos: new_code = Bytecodes::_fast_fputfield; break;
--- 614,18 ---
          assert(!CDSConfig::is_dumping_preimage_static_archive(), "preimage should not have resolved field references");
          ResolvedFieldEntry* rfe = cp->resolved_field_entry_at(bcs.get_index_u2());
          switch(rfe->tos_state()) {
          case btos: new_code = Bytecodes::_fast_bputfield; break;
          case ztos: new_code = Bytecodes::_fast_zputfield; break;
!         case atos: {
+           if (rfe->is_flat() || rfe->is_null_free_inline_type()) {
+             new_code = Bytecodes::_fast_vputfield;
+           } else {
+             new_code = Bytecodes::_fast_aputfield;
+           }
+           break;
+         }
          case itos: new_code = Bytecodes::_fast_iputfield; break;
          case ctos: new_code = Bytecodes::_fast_cputfield; break;
          case stos: new_code = Bytecodes::_fast_sputfield; break;
          case ltos: new_code = Bytecodes::_fast_lputfield; break;
          case ftos: new_code = Bytecodes::_fast_fputfield; break;
< prev index next >