diff -r e5b53c306fb5 -r 791cba24758f hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp --- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Oct 09 10:09:34 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Fri Oct 12 09:22:52 2012 -0700 @@ -340,7 +340,7 @@ Register receiver = FrameMap::receiver_opr->as_register(); Register ic_klass = IC_Klass; const int ic_cmp_size = LP64_ONLY(10) NOT_LP64(9); - const bool do_post_padding = VerifyOops || UseCompressedOops; + const bool do_post_padding = VerifyOops || UseCompressedKlassPointers; if (!do_post_padding) { // insert some nops so that the verified entry point is aligned on CodeEntryAlignment while ((__ offset() + ic_cmp_size) % CodeEntryAlignment != 0) { @@ -1262,7 +1262,11 @@ break; case T_ADDRESS: - __ movptr(dest->as_register(), from_addr); + if (UseCompressedKlassPointers && addr->disp() == oopDesc::klass_offset_in_bytes()) { + __ movl(dest->as_register(), from_addr); + } else { + __ movptr(dest->as_register(), from_addr); + } break; case T_INT: __ movl(dest->as_register(), from_addr); @@ -1364,6 +1368,12 @@ } #endif __ verify_oop(dest->as_register()); + } else if (type == T_ADDRESS && addr->disp() == oopDesc::klass_offset_in_bytes()) { +#ifdef _LP64 + if (UseCompressedKlassPointers) { + __ decode_klass_not_null(dest->as_register()); + } +#endif } } @@ -1705,7 +1715,7 @@ } else if (obj == klass_RInfo) { klass_RInfo = dst; } - if (k->is_loaded() && !UseCompressedOops) { + if (k->is_loaded() && !UseCompressedKlassPointers) { select_different_registers(obj, dst, k_RInfo, klass_RInfo); } else { Rtmp1 = op->tmp3()->as_register(); @@ -3446,7 +3456,7 @@ __ mov_metadata(tmp, default_type->constant_encoding()); #ifdef _LP64 if (UseCompressedKlassPointers) { - __ encode_heap_oop(tmp); + __ encode_klass_not_null(tmp); } #endif