1.1 --- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Mon Oct 08 17:04:00 2012 -0700 1.2 +++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Oct 09 10:11:38 2012 +0200 1.3 @@ -340,7 +340,7 @@ 1.4 Register receiver = FrameMap::receiver_opr->as_register(); 1.5 Register ic_klass = IC_Klass; 1.6 const int ic_cmp_size = LP64_ONLY(10) NOT_LP64(9); 1.7 - const bool do_post_padding = VerifyOops || UseCompressedOops; 1.8 + const bool do_post_padding = VerifyOops || UseCompressedKlassPointers; 1.9 if (!do_post_padding) { 1.10 // insert some nops so that the verified entry point is aligned on CodeEntryAlignment 1.11 while ((__ offset() + ic_cmp_size) % CodeEntryAlignment != 0) { 1.12 @@ -1262,7 +1262,11 @@ 1.13 break; 1.14 1.15 case T_ADDRESS: 1.16 - __ movptr(dest->as_register(), from_addr); 1.17 + if (UseCompressedKlassPointers && addr->disp() == oopDesc::klass_offset_in_bytes()) { 1.18 + __ movl(dest->as_register(), from_addr); 1.19 + } else { 1.20 + __ movptr(dest->as_register(), from_addr); 1.21 + } 1.22 break; 1.23 case T_INT: 1.24 __ movl(dest->as_register(), from_addr); 1.25 @@ -1364,6 +1368,12 @@ 1.26 } 1.27 #endif 1.28 __ verify_oop(dest->as_register()); 1.29 + } else if (type == T_ADDRESS && addr->disp() == oopDesc::klass_offset_in_bytes()) { 1.30 +#ifdef _LP64 1.31 + if (UseCompressedKlassPointers) { 1.32 + __ decode_klass_not_null(dest->as_register()); 1.33 + } 1.34 +#endif 1.35 } 1.36 } 1.37 1.38 @@ -1705,7 +1715,7 @@ 1.39 } else if (obj == klass_RInfo) { 1.40 klass_RInfo = dst; 1.41 } 1.42 - if (k->is_loaded() && !UseCompressedOops) { 1.43 + if (k->is_loaded() && !UseCompressedKlassPointers) { 1.44 select_different_registers(obj, dst, k_RInfo, klass_RInfo); 1.45 } else { 1.46 Rtmp1 = op->tmp3()->as_register(); 1.47 @@ -3446,7 +3456,7 @@ 1.48 __ mov_metadata(tmp, default_type->constant_encoding()); 1.49 #ifdef _LP64 1.50 if (UseCompressedKlassPointers) { 1.51 - __ encode_heap_oop(tmp); 1.52 + __ encode_klass_not_null(tmp); 1.53 } 1.54 #endif 1.55