8000753: compiler/6912517 crashes on 64bit sparc with compressed oops off

Code generated by c1 for getClass intrinsic broken when klass field is loaded on 64bit with compressed klass off.

Reviewed-by: kvn
This commit is contained in:
Roland Westrelin 2012-10-11 18:21:01 +02:00
parent f28ac57f94
commit 74ea92ce42

View file

@ -976,14 +976,13 @@ int LIR_Assembler::load(Register base, int offset, LIR_Opr to_reg, BasicType typ
break; break;
case T_METADATA: __ ld_ptr(base, offset, to_reg->as_register()); break; case T_METADATA: __ ld_ptr(base, offset, to_reg->as_register()); break;
case T_ADDRESS: case T_ADDRESS:
if (offset == oopDesc::klass_offset_in_bytes()) {
__ lduw(base, offset, to_reg->as_register());
#ifdef _LP64 #ifdef _LP64
if (UseCompressedKlassPointers) { if (offset == oopDesc::klass_offset_in_bytes() && UseCompressedKlassPointers) {
__ decode_klass_not_null(to_reg->as_register()); __ lduw(base, offset, to_reg->as_register());
} __ decode_klass_not_null(to_reg->as_register());
} else
#endif #endif
} else { {
__ ld_ptr(base, offset, to_reg->as_register()); __ ld_ptr(base, offset, to_reg->as_register());
} }
break; break;