Mercurial > hg > truffle
diff src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @ 6848:8e47bac5643a
7054512: Compress class pointers after perm gen removal
Summary: support of compress class pointers in the compilers.
Reviewed-by: kvn, twisti
author | roland |
---|---|
date | Tue, 09 Oct 2012 10:11:38 +0200 |
parents | 7eca5de9e0b6 |
children | 94e9408dbf50 |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Mon Oct 08 17:04:00 2012 -0700 +++ b/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Tue Oct 09 10:11:38 2012 +0200 @@ -105,6 +105,11 @@ if (src->is_address() && !src->is_stack() && (src->type() == T_OBJECT || src->type() == T_ARRAY)) return false; } + if (UseCompressedKlassPointers) { + if (src->is_address() && !src->is_stack() && src->type() == T_ADDRESS && + src->as_address_ptr()->disp() == oopDesc::klass_offset_in_bytes()) return false; + } + if (dst->is_register()) { if (src->is_address() && Assembler::is_simm13(src->as_address_ptr()->disp())) { return !PatchALot; @@ -969,8 +974,19 @@ #endif } break; - case T_METADATA: - case T_ADDRESS: __ ld_ptr(base, offset, to_reg->as_register()); 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()); + } +#endif + } else { + __ ld_ptr(base, offset, to_reg->as_register()); + } + break; case T_ARRAY : // fall through case T_OBJECT: { @@ -2344,7 +2360,7 @@ if (UseCompressedKlassPointers) { // tmp holds the default type. It currently comes uncompressed after the // load of a constant, so encode it. - __ encode_heap_oop(tmp); + __ encode_klass_not_null(tmp); // load the raw value of the dst klass, since we will be comparing // uncompressed values directly. __ lduw(dst, oopDesc::klass_offset_in_bytes(), tmp2);