Currently metadata klass pointers (Klass*) are of type T_ADDRESS which is wrong; the type should be T_METADATA.
These two types are mixed up like can be seen in SPARC's LIR_Assembler::load:
case T_METADATA: __ ld_ptr(base, offset, to_reg->as_register()); break;
case T_ADDRESS:
#ifdef _LP64
if (offset == oopDesc::klass_offset_in_bytes() && UseCompressedClassPointers) {
__ lduw(base, offset, to_reg->as_register());
__ decode_klass_not_null(to_reg->as_register());
} else
#endif
{
__ ld_ptr(base, offset, to_reg->as_register());
}
break;
The clean-up is likely to be very intrusive are there will be a lot of places with the wrong type.
These two types are mixed up like can be seen in SPARC's LIR_Assembler::load:
case T_METADATA: __ ld_ptr(base, offset, to_reg->as_register()); break;
case T_ADDRESS:
#ifdef _LP64
if (offset == oopDesc::klass_offset_in_bytes() && UseCompressedClassPointers) {
__ lduw(base, offset, to_reg->as_register());
__ decode_klass_not_null(to_reg->as_register());
} else
#endif
{
__ ld_ptr(base, offset, to_reg->as_register());
}
break;
The clean-up is likely to be very intrusive are there will be a lot of places with the wrong type.
- relates to
-
JDK-8277417 C1 LIR instruction for load-klass
- Resolved
-
JDK-8008242 VerifyOops fails on SPARC
- Resolved
-
JDK-8026495 JVM Crashes when started with -XX:+DTraceMethodProbes on x86_64
- Closed