< prev index next >
src/hotspot/share/oops/constantPool.cpp
Print this page
*** 233,243 ****
Klass** adr = resolved_klasses()->adr_at(resolved_klass_index);
OrderAccess::release_store(adr, k);
// The interpreter assumes when the tag is stored, the klass is resolved
// and the Klass* non-NULL, so we need hardware store ordering here.
! jbyte qdesc_bit = name->is_Q_signature() ? (jbyte)JVM_CONSTANT_QDESC_BIT : 0;
if (k != NULL) {
release_tag_at_put(class_index, JVM_CONSTANT_Class | qdesc_bit);
} else {
release_tag_at_put(class_index, JVM_CONSTANT_UnresolvedClass | qdesc_bit);
}
--- 233,243 ----
Klass** adr = resolved_klasses()->adr_at(resolved_klass_index);
OrderAccess::release_store(adr, k);
// The interpreter assumes when the tag is stored, the klass is resolved
// and the Klass* non-NULL, so we need hardware store ordering here.
! jbyte qdesc_bit = (name->is_Q_signature() || name->is_Q_array_signature()) ? (jbyte)JVM_CONSTANT_QDESC_BIT : 0;
if (k != NULL) {
release_tag_at_put(class_index, JVM_CONSTANT_Class | qdesc_bit);
} else {
release_tag_at_put(class_index, JVM_CONSTANT_UnresolvedClass | qdesc_bit);
}
*** 251,260 ****
--- 251,261 ----
Klass** adr = resolved_klasses()->adr_at(resolved_klass_index);
OrderAccess::release_store(adr, k);
// The interpreter assumes when the tag is stored, the klass is resolved
// and the Klass* non-NULL, so we need hardware store ordering here.
+ assert(!(k->name()->is_Q_signature() || k->name()->is_Q_array_signature()), "Q-type without JVM_CONSTANT_QDESC_BIT");
release_tag_at_put(class_index, JVM_CONSTANT_Class);
}
#if INCLUDE_CDS_JAVA_HEAP
// Archive the resolved references
*** 1985,1994 ****
--- 1986,2001 ----
idx1 = Bytes::get_Java_u2(bytes);
printf("class #%03d", idx1);
ent_size = 2;
break;
}
+ case (JVM_CONSTANT_Class | JVM_CONSTANT_QDESC_BIT): {
+ idx1 = Bytes::get_Java_u2(bytes);
+ printf("qclass #%03d", idx1);
+ ent_size = 2;
+ break;
+ }
case JVM_CONSTANT_String: {
idx1 = Bytes::get_Java_u2(bytes);
printf("String #%03d", idx1);
ent_size = 2;
break;
*** 2027,2036 ****
--- 2034,2047 ----
}
case JVM_CONSTANT_UnresolvedClass: {
printf("UnresolvedClass: %s", WARN_MSG);
break;
}
+ case (JVM_CONSTANT_UnresolvedClass | JVM_CONSTANT_QDESC_BIT): {
+ printf("UnresolvedQClass: %s", WARN_MSG);
+ break;
+ }
case JVM_CONSTANT_UnresolvedClassInError: {
printf("UnresolvedClassInErr: %s", WARN_MSG);
break;
}
case JVM_CONSTANT_StringIndex: {
*** 2198,2207 ****
--- 2209,2219 ----
break;
}
case JVM_CONSTANT_Class:
case JVM_CONSTANT_UnresolvedClass:
case JVM_CONSTANT_UnresolvedClassInError: {
+ assert(!tag_at(idx).is_Qdescriptor_klass(), "Failed to encode QDesc");
*bytes = JVM_CONSTANT_Class;
Symbol* sym = klass_name_at(idx);
idx1 = tbl->symbol_to_value(sym);
assert(idx1 != 0, "Have not found a hashtable entry");
Bytes::put_Java_u2((address) (bytes+1), idx1);
< prev index next >