diff -r a49a647afe9a -r ba764ed4b6f2 src/share/vm/utilities/globalDefinitions.cpp --- a/src/share/vm/utilities/globalDefinitions.cpp Fri Apr 11 09:56:35 2008 -0400 +++ b/src/share/vm/utilities/globalDefinitions.cpp Sun Apr 13 17:43:42 2008 -0400 @@ -24,18 +24,23 @@ # include "incls/_precompiled.incl" # include "incls/_globalDefinitions.cpp.incl" +// Basic error support - -// Basic error support +// Info for oops within a java object. Defaults are zero so +// things will break badly if incorrectly initialized. +int heapOopSize = 0; +int LogBytesPerHeapOop = 0; +int LogBitsPerHeapOop = 0; +int BytesPerHeapOop = 0; +int BitsPerHeapOop = 0; void basic_fatal(const char* msg) { fatal(msg); } - // Something to help porters sleep at night -void check_basic_types() { +void basic_types_init() { #ifdef ASSERT #ifdef _LP64 assert(min_intx == (intx)CONST64(0x8000000000000000), "correct constant"); @@ -92,6 +97,7 @@ case T_LONG: case T_OBJECT: case T_ADDRESS: // random raw pointer + case T_NARROWOOP: // compressed pointer case T_CONFLICT: // might as well support a bottom type case T_VOID: // padding or other unaddressed word // layout type must map to itself @@ -134,11 +140,30 @@ os::java_to_os_priority[9] = JavaPriority9_To_OSPriority; if(JavaPriority10_To_OSPriority != -1 ) os::java_to_os_priority[10] = JavaPriority10_To_OSPriority; + + // Set the size of basic types here (after argument parsing but before + // stub generation). + if (UseCompressedOops) { + // Size info for oops within java objects is fixed + heapOopSize = jintSize; + LogBytesPerHeapOop = LogBytesPerInt; + LogBitsPerHeapOop = LogBitsPerInt; + BytesPerHeapOop = BytesPerInt; + BitsPerHeapOop = BitsPerInt; + } else { + heapOopSize = oopSize; + LogBytesPerHeapOop = LogBytesPerWord; + LogBitsPerHeapOop = LogBitsPerWord; + BytesPerHeapOop = BytesPerWord; + BitsPerHeapOop = BitsPerWord; + } + _type2aelembytes[T_OBJECT] = heapOopSize; + _type2aelembytes[T_ARRAY] = heapOopSize; } // Map BasicType to signature character -char type2char_tab[T_CONFLICT+1]={ 0, 0, 0, 0, 'Z', 'C', 'F', 'D', 'B', 'S', 'I', 'J', 'L', '[', 'V', 0, 0}; +char type2char_tab[T_CONFLICT+1]={ 0, 0, 0, 0, 'Z', 'C', 'F', 'D', 'B', 'S', 'I', 'J', 'L', '[', 'V', 0, 0, 0}; // Map BasicType to Java type name const char* type2name_tab[T_CONFLICT+1] = { @@ -155,6 +180,7 @@ "array", "void", "*address*", + "*narrowoop*", "*conflict*" }; @@ -170,7 +196,7 @@ // Map BasicType to size in words -int type2size[T_CONFLICT+1]={ -1, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 0, 1, -1}; +int type2size[T_CONFLICT+1]={ -1, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 0, 1, 1, -1}; BasicType type2field[T_CONFLICT+1] = { (BasicType)0, // 0, @@ -189,7 +215,8 @@ T_OBJECT, // T_ARRAY = 13, T_VOID, // T_VOID = 14, T_ADDRESS, // T_ADDRESS = 15, - T_CONFLICT // T_CONFLICT = 16, + T_NARROWOOP, // T_NARROWOOP= 16, + T_CONFLICT // T_CONFLICT = 17, }; @@ -210,7 +237,8 @@ T_OBJECT, // T_ARRAY = 13, T_VOID, // T_VOID = 14, T_ADDRESS, // T_ADDRESS = 15, - T_CONFLICT // T_CONFLICT = 16, + T_NARROWOOP, // T_NARROWOOP = 16, + T_CONFLICT // T_CONFLICT = 17, }; @@ -231,7 +259,8 @@ T_ARRAY_aelem_bytes, // T_ARRAY = 13, 0, // T_VOID = 14, T_OBJECT_aelem_bytes, // T_ADDRESS = 15, - 0 // T_CONFLICT = 16, + T_NARROWOOP_aelem_bytes,// T_NARROWOOP= 16, + 0 // T_CONFLICT = 17, }; #ifdef ASSERT @@ -245,7 +274,7 @@ // The following code is mostly taken from JVM typedefs_md.h and system_md.c -static const jlong high_bit = (jlong)1 << (jlong)63; +static const jlong high_bit = (jlong)1 << (jlong)63; static const jlong other_bits = ~high_bit; jlong float2long(jfloat f) {