< prev index next >

src/hotspot/share/oops/oop.inline.hpp

Print this page
*** 31,14 ***
--- 31,16 ---
  #include "memory/universe.hpp"
  #include "oops/access.inline.hpp"
  #include "oops/arrayKlass.hpp"
  #include "oops/arrayOop.hpp"
  #include "oops/compressedKlass.inline.hpp"
+ #include "oops/flatArrayKlass.hpp"
  #include "oops/instanceKlass.hpp"
  #include "oops/markWord.inline.hpp"
  #include "oops/objLayout.inline.hpp"
  #include "oops/oopsHierarchy.hpp"
+ #include "runtime/arguments.hpp"
  #include "runtime/atomicAccess.hpp"
  #include "runtime/globals.hpp"
  #include "utilities/align.hpp"
  #include "utilities/debug.hpp"
  #include "utilities/globalDefinitions.hpp"

*** 81,11 ***
  markWord oopDesc::cas_set_mark(markWord new_mark, markWord old_mark, atomic_memory_order order) {
    return AtomicAccess::cmpxchg(&_mark, old_mark, new_mark, order);
  }
  
  markWord oopDesc::prototype_mark() const {
!   if (UseCompactObjectHeaders) {
      return klass()->prototype_header();
    } else {
      return markWord::prototype();
    }
  }
--- 83,11 ---
  markWord oopDesc::cas_set_mark(markWord new_mark, markWord old_mark, atomic_memory_order order) {
    return AtomicAccess::cmpxchg(&_mark, old_mark, new_mark, order);
  }
  
  markWord oopDesc::prototype_mark() const {
!   if (UseCompactObjectHeaders || Arguments::is_valhalla_enabled()) {
      return klass()->prototype_header();
    } else {
      return markWord::prototype();
    }
  }

*** 233,16 ***
    assert(s > 0, "Oop size must be greater than zero, not %zu", s);
    assert(is_object_aligned(s), "Oop size is not properly aligned: %zu", s);
    return s;
  }
  
! bool oopDesc::is_instance()    const { return klass()->is_instance_klass();             }
! bool oopDesc::is_instanceRef() const { return klass()->is_reference_instance_klass();   }
! bool oopDesc::is_stackChunk()  const { return klass()->is_stack_chunk_instance_klass(); }
! bool oopDesc::is_array()       const { return klass()->is_array_klass();                }
! bool oopDesc::is_objArray()    const { return klass()->is_objArray_klass();             }
! bool oopDesc::is_typeArray()   const { return klass()->is_typeArray_klass();            }
  
  template<typename T>
  T*       oopDesc::field_addr(int offset)     const { return reinterpret_cast<T*>(cast_from_oop<intptr_t>(as_oop()) + offset); }
  
  template <typename T>
--- 235,43 ---
    assert(s > 0, "Oop size must be greater than zero, not %zu", s);
    assert(is_object_aligned(s), "Oop size is not properly aligned: %zu", s);
    return s;
  }
  
! bool oopDesc::is_instance()         const { return klass()->is_instance_klass();             }
! bool oopDesc::is_inline()           const { return klass()->is_inline_klass();               }
! bool oopDesc::is_instanceRef()      const { return klass()->is_reference_instance_klass();   }
! bool oopDesc::is_stackChunk()       const { return klass()->is_stack_chunk_instance_klass(); }
! bool oopDesc::is_array()            const { return klass()->is_array_klass();                }
! bool oopDesc::is_objArray()         const { return klass()->is_objArray_klass();             }
+ bool oopDesc::is_refArray()         const { return klass()->is_refArray_klass();             }
+ bool oopDesc::is_typeArray()        const { return klass()->is_typeArray_klass();            }
+ bool oopDesc::is_refined_objArray() const { return klass()->is_refined_objArray_klass();     }
+ 
+ bool oopDesc::is_array_with_oops() const {
+   if (!is_objArray()) {
+     return false;
+   }
+ 
+   assert(is_refined_objArray(), "Must be");
+   return is_refArray() || FlatArrayKlass::cast(klass())->contains_oops();
+ }
+ 
+ bool oopDesc::is_inline_type() const { return mark().is_inline_type(); }
+ #ifdef _LP64
+ bool oopDesc::is_flatArray() const {
+   markWord mrk = mark();
+   return (mrk.is_unlocked()) ? mrk.is_flat_array() : klass()->is_flatArray_klass();
+ }
+ bool oopDesc::is_null_free_array() const {
+   markWord mrk = mark();
+   return (mrk.is_unlocked()) ? mrk.is_null_free_array() : klass()->is_null_free_array_klass();
+ }
+ #else
+ bool oopDesc::is_flatArray()       const { return klass()->is_flatArray_klass(); }
+ bool oopDesc::is_null_free_array() const { return klass()->is_null_free_array_klass(); }
+ #endif
  
  template<typename T>
  T*       oopDesc::field_addr(int offset)     const { return reinterpret_cast<T*>(cast_from_oop<intptr_t>(as_oop()) + offset); }
  
  template <typename T>
< prev index next >