src/cpu/x86/vm/c1_LIRAssembler_x86.cpp

changeset 4159
8e47bac5643a
parent 4106
7eca5de9e0b6
child 4164
d804e148cff8
     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  

mercurial