7132690: InstanceKlass:_reference_type should be u1 type
authorjiangli
Wed, 25 Jan 2012 17:40:51 -0500
changeset 11729 77f7d412d0a1
parent 11561 5d25e03c3634
child 11730 c85bd2c591de
7132690: InstanceKlass:_reference_type should be u1 type Summary: Change InstanceKlass::_reference_type to u1 type. Reviewed-by: dholmes, coleenp, acorn Contributed-by: Jiangli Zhou <jiangli.zhou@oracle.com>
hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp
hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp
hotspot/src/share/vm/oops/instanceKlass.hpp
hotspot/src/share/vm/opto/library_call.cpp
hotspot/src/share/vm/runtime/vmStructs.cpp
--- a/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp	Fri Jan 20 17:07:33 2012 -0800
+++ b/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp	Wed Jan 25 17:40:51 2012 -0500
@@ -472,7 +472,7 @@
   __ load_klass(src_reg, tmp_reg);
 
   Address ref_type_adr(tmp_reg, instanceKlass::reference_type_offset());
-  __ ld(ref_type_adr, tmp_reg);
+  __ ldub(ref_type_adr, tmp_reg);
 
   // _reference_type field is of type ReferenceType (enum)
   assert(REF_NONE == 0, "check this code");
--- a/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp	Fri Jan 20 17:07:33 2012 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp	Wed Jan 25 17:40:51 2012 -0500
@@ -520,7 +520,7 @@
   __ load_klass(tmp_reg, src_reg);
 
   Address ref_type_adr(tmp_reg, instanceKlass::reference_type_offset());
-  __ cmpl(ref_type_adr, REF_NONE);
+  __ cmpb(ref_type_adr, REF_NONE);
   __ jcc(Assembler::equal, _continuation);
 
   // Is marking active?
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp	Fri Jan 20 17:07:33 2012 -0800
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp	Wed Jan 25 17:40:51 2012 -0500
@@ -240,7 +240,6 @@
   Thread*         _init_thread;          // Pointer to current thread doing initialization (to handle recusive initialization)
   int             _vtable_len;           // length of Java vtable (in words)
   int             _itable_len;           // length of Java itable (in words)
-  ReferenceType   _reference_type;       // reference type
   OopMapCache*    volatile _oop_map_cache;   // OopMapCache for all methods in the klass (allocated lazily)
   JNIid*          _jni_ids;              // First JNI identifier for static fields in this class
   jmethodID*      _methods_jmethod_ids;  // jmethodIDs corresponding to method_idnum, or NULL if none
@@ -265,6 +264,8 @@
   // _idnum_allocated_count.
   u1              _init_state;                    // state of class
 
+  u1              _reference_type;                // reference type
+
   // embedded Java vtable follows here
   // embedded Java itables follows here
   // embedded static fields follows here
@@ -407,8 +408,11 @@
   void eager_initialize(Thread *thread);
 
   // reference type
-  ReferenceType reference_type() const     { return _reference_type; }
-  void set_reference_type(ReferenceType t) { _reference_type = t; }
+  ReferenceType reference_type() const     { return (ReferenceType)_reference_type; }
+  void set_reference_type(ReferenceType t) {
+    assert(t == (u1)t, "overflow");
+    _reference_type = (u1)t;
+  }
 
   static ByteSize reference_type_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(instanceKlass, _reference_type)); }
 
--- a/hotspot/src/share/vm/opto/library_call.cpp	Fri Jan 20 17:07:33 2012 -0800
+++ b/hotspot/src/share/vm/opto/library_call.cpp	Wed Jan 25 17:40:51 2012 -0500
@@ -2153,7 +2153,7 @@
   //
   // if (offset == java_lang_ref_Reference::_reference_offset) {
   //   if (base != null) {
-  //     if (klass(base)->reference_type() != REF_NONE)) {
+  //     if (instance_of(base, java.lang.ref.Reference)) {
   //       pre_barrier(_, pre_val, ...);
   //     }
   //   }
@@ -2165,8 +2165,6 @@
   IdealKit ideal(this);
 #define __ ideal.
 
-  const int reference_type_offset = in_bytes(instanceKlass::reference_type_offset());
-
   Node* referent_off = __ ConX(java_lang_ref_Reference::referent_offset);
 
   __ if_then(offset, BoolTest::eq, referent_off, unlikely); {
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp	Fri Jan 20 17:07:33 2012 -0800
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp	Wed Jan 25 17:40:51 2012 -0500
@@ -314,7 +314,7 @@
   nonstatic_field(instanceKlass,               _init_thread,                                  Thread*)                               \
   nonstatic_field(instanceKlass,               _vtable_len,                                   int)                                   \
   nonstatic_field(instanceKlass,               _itable_len,                                   int)                                   \
-  nonstatic_field(instanceKlass,               _reference_type,                               ReferenceType)                         \
+  nonstatic_field(instanceKlass,               _reference_type,                               u1)                                    \
   volatile_nonstatic_field(instanceKlass,      _oop_map_cache,                                OopMapCache*)                          \
   nonstatic_field(instanceKlass,               _jni_ids,                                      JNIid*)                                \
   nonstatic_field(instanceKlass,               _osr_nmethods_head,                            nmethod*)                              \