src/cpu/ppc/vm/macroAssembler_ppc.cpp

changeset 6463
7687c56b6693
parent 6458
ec28f9c041ff
child 6474
a0d02bb625e2
     1.1 --- a/src/cpu/ppc/vm/macroAssembler_ppc.cpp	Thu Sep 05 11:04:39 2013 -0700
     1.2 +++ b/src/cpu/ppc/vm/macroAssembler_ppc.cpp	Fri Sep 06 10:13:17 2013 +0200
     1.3 @@ -2382,17 +2382,11 @@
     1.4  
     1.5  void MacroAssembler::encode_klass_not_null(Register dst, Register src) {
     1.6    if (src == noreg) src = dst;
     1.7 -  if (Universe::narrow_klass_base() != NULL) {
     1.8 -    // heapbased
     1.9 -    assert(Universe::narrow_klass_shift() != 0, "sanity");
    1.10 -    sub(dst, src, R30);
    1.11 -    srdi(dst, dst, Universe::narrow_klass_shift());
    1.12 -  } else if (Universe::narrow_klass_shift() != 0) {
    1.13 -    // zerobased
    1.14 +  assert(Universe::narrow_klass_base() != NULL, "Base should be initialized");
    1.15 +  load_const(R0, Universe::narrow_klass_base());
    1.16 +  sub(dst, src, R0);
    1.17 +  if (Universe::narrow_klass_shift() != 0) {
    1.18      srdi(dst, src, Universe::narrow_klass_shift());
    1.19 -  } else if (src != dst) {
    1.20 -    // unscaled
    1.21 -    mr(dst, src);
    1.22    }
    1.23  }
    1.24  
    1.25 @@ -2407,18 +2401,14 @@
    1.26  
    1.27  void MacroAssembler::decode_klass_not_null(Register dst, Register src) {
    1.28    if (src == noreg) src = dst;
    1.29 -  if (Universe::narrow_klass_base() != NULL) {
    1.30 -    // heapbased
    1.31 -    assert(Universe::narrow_klass_shift() != 0, "sanity");
    1.32 -    sldi(dst, src, Universe::narrow_klass_shift());
    1.33 -    add(dst, dst, R30);
    1.34 -  } else if (Universe::narrow_klass_shift() != 0) {
    1.35 -    // zerobased
    1.36 -    sldi(dst, src, Universe::narrow_klass_shift());
    1.37 -  } else if (src != dst) {
    1.38 -    // unscaled
    1.39 -    mr(dst, src);
    1.40 +  Register shifted_src = src;
    1.41 +  assert(Universe::narrow_klass_base() != NULL, "Base should be initialized");
    1.42 +  if (Universe::narrow_klass_shift() != 0) {
    1.43 +    shifted_src = dst;
    1.44 +    sldi(shifted_src, src, Universe::narrow_klass_shift());
    1.45    }
    1.46 +  load_const(R0, Universe::narrow_klass_base());
    1.47 +  add(dst, shifted_src, R0);
    1.48  }
    1.49  
    1.50  void MacroAssembler::load_klass(Register dst, Register src) {
    1.51 @@ -2441,7 +2431,13 @@
    1.52  }
    1.53  
    1.54  void MacroAssembler::reinit_heapbase(Register d, Register tmp) {
    1.55 -  if (UseCompressedOops || UseCompressedKlassPointers) {
    1.56 +  if (Universe::heap() != NULL) {
    1.57 +    if (Universe::narrow_oop_base() == NULL) {
    1.58 +      Assembler::xorr(R30, R30, R30);
    1.59 +    } else {
    1.60 +      load_const(R30, Universe::narrow_ptrs_base(), tmp);
    1.61 +    }
    1.62 +  } else {
    1.63      load_const(R30, Universe::narrow_ptrs_base_addr(), tmp);
    1.64      ld(R30, 0, R30);
    1.65    }

mercurial