提交 e715e53b 编写于 作者: B bpittore

Merge

...@@ -472,7 +472,7 @@ void G1UnsafeGetObjSATBBarrierStub::emit_code(LIR_Assembler* ce) { ...@@ -472,7 +472,7 @@ void G1UnsafeGetObjSATBBarrierStub::emit_code(LIR_Assembler* ce) {
__ load_klass(src_reg, tmp_reg); __ load_klass(src_reg, tmp_reg);
Address ref_type_adr(tmp_reg, instanceKlass::reference_type_offset()); 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) // _reference_type field is of type ReferenceType (enum)
assert(REF_NONE == 0, "check this code"); assert(REF_NONE == 0, "check this code");
......
...@@ -520,7 +520,7 @@ void G1UnsafeGetObjSATBBarrierStub::emit_code(LIR_Assembler* ce) { ...@@ -520,7 +520,7 @@ void G1UnsafeGetObjSATBBarrierStub::emit_code(LIR_Assembler* ce) {
__ load_klass(tmp_reg, src_reg); __ load_klass(tmp_reg, src_reg);
Address ref_type_adr(tmp_reg, instanceKlass::reference_type_offset()); 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); __ jcc(Assembler::equal, _continuation);
// Is marking active? // Is marking active?
......
...@@ -240,7 +240,6 @@ class instanceKlass: public Klass { ...@@ -240,7 +240,6 @@ class instanceKlass: public Klass {
Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization) Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization)
int _vtable_len; // length of Java vtable (in words) int _vtable_len; // length of Java vtable (in words)
int _itable_len; // length of Java itable (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) 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 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 jmethodID* _methods_jmethod_ids; // jmethodIDs corresponding to method_idnum, or NULL if none
...@@ -265,6 +264,8 @@ class instanceKlass: public Klass { ...@@ -265,6 +264,8 @@ class instanceKlass: public Klass {
// _idnum_allocated_count. // _idnum_allocated_count.
u1 _init_state; // state of class u1 _init_state; // state of class
u1 _reference_type; // reference type
// embedded Java vtable follows here // embedded Java vtable follows here
// embedded Java itables follows here // embedded Java itables follows here
// embedded static fields follows here // embedded static fields follows here
...@@ -407,8 +408,11 @@ class instanceKlass: public Klass { ...@@ -407,8 +408,11 @@ class instanceKlass: public Klass {
void eager_initialize(Thread *thread); void eager_initialize(Thread *thread);
// reference type // reference type
ReferenceType reference_type() const { return _reference_type; } ReferenceType reference_type() const { return (ReferenceType)_reference_type; }
void set_reference_type(ReferenceType t) { _reference_type = t; } 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)); } static ByteSize reference_type_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(instanceKlass, _reference_type)); }
......
...@@ -2153,7 +2153,7 @@ void LibraryCallKit::insert_g1_pre_barrier(Node* base_oop, Node* offset, Node* p ...@@ -2153,7 +2153,7 @@ void LibraryCallKit::insert_g1_pre_barrier(Node* base_oop, Node* offset, Node* p
// //
// if (offset == java_lang_ref_Reference::_reference_offset) { // if (offset == java_lang_ref_Reference::_reference_offset) {
// if (base != null) { // if (base != null) {
// if (klass(base)->reference_type() != REF_NONE)) { // if (instance_of(base, java.lang.ref.Reference)) {
// pre_barrier(_, pre_val, ...); // pre_barrier(_, pre_val, ...);
// } // }
// } // }
...@@ -2165,8 +2165,6 @@ void LibraryCallKit::insert_g1_pre_barrier(Node* base_oop, Node* offset, Node* p ...@@ -2165,8 +2165,6 @@ void LibraryCallKit::insert_g1_pre_barrier(Node* base_oop, Node* offset, Node* p
IdealKit ideal(this); IdealKit ideal(this);
#define __ ideal. #define __ ideal.
const int reference_type_offset = in_bytes(instanceKlass::reference_type_offset());
Node* referent_off = __ ConX(java_lang_ref_Reference::referent_offset); Node* referent_off = __ ConX(java_lang_ref_Reference::referent_offset);
__ if_then(offset, BoolTest::eq, referent_off, unlikely); { __ if_then(offset, BoolTest::eq, referent_off, unlikely); {
......
...@@ -314,7 +314,7 @@ static inline uint64_t cast_uint64_t(size_t x) ...@@ -314,7 +314,7 @@ static inline uint64_t cast_uint64_t(size_t x)
nonstatic_field(instanceKlass, _init_thread, Thread*) \ nonstatic_field(instanceKlass, _init_thread, Thread*) \
nonstatic_field(instanceKlass, _vtable_len, int) \ nonstatic_field(instanceKlass, _vtable_len, int) \
nonstatic_field(instanceKlass, _itable_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*) \ volatile_nonstatic_field(instanceKlass, _oop_map_cache, OopMapCache*) \
nonstatic_field(instanceKlass, _jni_ids, JNIid*) \ nonstatic_field(instanceKlass, _jni_ids, JNIid*) \
nonstatic_field(instanceKlass, _osr_nmethods_head, nmethod*) \ nonstatic_field(instanceKlass, _osr_nmethods_head, nmethod*) \
......
...@@ -192,8 +192,11 @@ void xmlStream::pop_tag(const char* tag) { ...@@ -192,8 +192,11 @@ void xmlStream::pop_tag(const char* tag) {
_element_close_stack_ptr = cur_tag + strlen(cur_tag) + 1; _element_close_stack_ptr = cur_tag + strlen(cur_tag) + 1;
_element_depth -= 1; _element_depth -= 1;
} }
if (bad_tag && !VMThread::should_terminate() && !is_error_reported()) if (bad_tag && !VMThread::should_terminate() && !VM_Exit::vm_exited() &&
!is_error_reported())
{
assert(false, "bad tag in log"); assert(false, "bad tag in log");
}
} }
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册