< prev index next >

src/hotspot/share/oops/arrayOop.hpp

Print this page

        

@@ -23,11 +23,11 @@
  */
 
 #ifndef SHARE_VM_OOPS_ARRAYOOP_HPP
 #define SHARE_VM_OOPS_ARRAYOOP_HPP
 
-#include "memory/universe.inline.hpp"
+#include "memory/universe.hpp"
 #include "oops/oop.hpp"
 #include "utilities/align.hpp"
 
 // arrayOopDesc is the abstract baseclass for all arrays.  It doesn't
 // declare pure virtual to enforce this because that would allocate a vtbl

@@ -60,10 +60,17 @@
     assert(arrayoopdesc_hs == hs, "header size can't change");
 #endif // ASSERT
     return (int)hs;
   }
 
+  // Check whether an element of a typeArrayOop with the given type must be
+  // aligned 0 mod 8.  The typeArrayOop itself must be aligned at least this
+  // strongly.
+  static bool element_type_should_be_aligned(BasicType type) {
+    return type == T_DOUBLE || type == T_LONG;
+  }
+
  public:
   // The _length field is not declared in C++.  It is allocated after the
   // declared nonstatic fields in arrayOopDesc if not compressed, otherwise
   // it occupies the second half of the _klass field in oopDesc.
   static int length_offset_in_bytes() {

@@ -97,11 +104,11 @@
   // (will not constant fold otherwise)
   // Returns the header size in words aligned to the requirements of the
   // array object type.
   static int header_size(BasicType type) {
     size_t typesize_in_bytes = header_size_in_bytes();
-    return (int)(Universe::element_type_should_be_aligned(type)
+    return (int)(element_type_should_be_aligned(type)
       ? align_object_offset(typesize_in_bytes/HeapWordSize)
       : typesize_in_bytes/HeapWordSize);
   }
 
   // Return the maximum length of an array of BasicType.  The length can passed
< prev index next >