diff options
author | roland <none@none> | 2012-10-11 18:21:01 +0200 |
---|---|---|
committer | roland <none@none> | 2012-10-11 18:21:01 +0200 |
commit | 279fab30804f9bac44299d009f64a61d137b133b (patch) | |
tree | fb5758522ffb29908d364d20e33c4022268c84de /src/cpu | |
parent | 5bf8e55e51ee2becd3f44c405bf2eb4f1f07f528 (diff) |
8000753: compiler/6912517 crashes on 64bit sparc with compressed oops off
Summary: code generated by c1 for getClass intrinsic broken when klass field is loaded on 64bit with compressed klass off.
Reviewed-by: kvn
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp index 3fab9c3be..fe00140e5 100644 --- a/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp +++ b/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @@ -976,14 +976,13 @@ int LIR_Assembler::load(Register base, int offset, LIR_Opr to_reg, BasicType typ break; case T_METADATA: __ ld_ptr(base, offset, to_reg->as_register()); break; case T_ADDRESS: - if (offset == oopDesc::klass_offset_in_bytes()) { - __ lduw(base, offset, to_reg->as_register()); #ifdef _LP64 - if (UseCompressedKlassPointers) { - __ decode_klass_not_null(to_reg->as_register()); - } + if (offset == oopDesc::klass_offset_in_bytes() && UseCompressedKlassPointers) { + __ lduw(base, offset, to_reg->as_register()); + __ decode_klass_not_null(to_reg->as_register()); + } else #endif - } else { + { __ ld_ptr(base, offset, to_reg->as_register()); } break; |