8027968: Adapt PPC to 8024927: Nashorn performance regression with CompressedOops

Thu, 07 Nov 2013 11:47:11 +0100

author
goetz
date
Thu, 07 Nov 2013 11:47:11 +0100
changeset 6477
eb178e97560c
parent 6476
600acc4b8b1e
child 6478
044b28168e20
child 6479
2113136690bc

8027968: Adapt PPC to 8024927: Nashorn performance regression with CompressedOops
Reviewed-by: coleenp, kvn

src/cpu/ppc/vm/macroAssembler_ppc.cpp file | annotate | diff | comparison | revisions
src/cpu/ppc/vm/macroAssembler_ppc.hpp file | annotate | diff | comparison | revisions
src/cpu/ppc/vm/vtableStubs_ppc_64.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/ppc/vm/macroAssembler_ppc.cpp	Thu Nov 07 11:51:53 2013 +0100
     1.2 +++ b/src/cpu/ppc/vm/macroAssembler_ppc.cpp	Thu Nov 07 11:47:11 2013 +0100
     1.3 @@ -2382,10 +2382,12 @@
     1.4  
     1.5  void MacroAssembler::encode_klass_not_null(Register dst, Register src) {
     1.6    if (src == noreg) src = dst;
     1.7 -  assert(Universe::narrow_klass_base() != NULL, "Base should be initialized");
     1.8 -  load_const(R0, Universe::narrow_klass_base());
     1.9 -  sub(dst, src, R0);
    1.10 -  if (Universe::narrow_klass_shift() != 0) {
    1.11 +  if (Universe::narrow_klass_base() != 0) {
    1.12 +    load_const(R0, Universe::narrow_klass_base());
    1.13 +    sub(dst, src, R0);
    1.14 +  }
    1.15 +  if (Universe::narrow_klass_shift() != 0 ||
    1.16 +      Universe::narrow_klass_base() == 0 && src != dst) {  // Move required.
    1.17      srdi(dst, src, Universe::narrow_klass_shift());
    1.18    }
    1.19  }
    1.20 @@ -2399,16 +2401,25 @@
    1.21    }
    1.22  }
    1.23  
    1.24 +int MacroAssembler::instr_size_for_decode_klass_not_null() {
    1.25 +  if (!UseCompressedClassPointers) return 0;
    1.26 +  int num_instrs = 1;  // shift or move
    1.27 +  if (Universe::narrow_klass_base() != 0) num_instrs = 7;  // shift + load const + add
    1.28 +  return num_instrs * BytesPerInstWord;
    1.29 +}
    1.30 +
    1.31  void MacroAssembler::decode_klass_not_null(Register dst, Register src) {
    1.32    if (src == noreg) src = dst;
    1.33    Register shifted_src = src;
    1.34 -  assert(Universe::narrow_klass_base() != NULL, "Base should be initialized");
    1.35 -  if (Universe::narrow_klass_shift() != 0) {
    1.36 +  if (Universe::narrow_klass_shift() != 0 ||
    1.37 +      Universe::narrow_klass_base() == 0 && src != dst) {  // Move required.
    1.38      shifted_src = dst;
    1.39      sldi(shifted_src, src, Universe::narrow_klass_shift());
    1.40    }
    1.41 -  load_const(R0, Universe::narrow_klass_base());
    1.42 -  add(dst, shifted_src, R0);
    1.43 +  if (Universe::narrow_klass_base() != 0) {
    1.44 +    load_const(R0, Universe::narrow_klass_base());
    1.45 +    add(dst, shifted_src, R0);
    1.46 +  }
    1.47  }
    1.48  
    1.49  void MacroAssembler::load_klass(Register dst, Register src) {
     2.1 --- a/src/cpu/ppc/vm/macroAssembler_ppc.hpp	Thu Nov 07 11:51:53 2013 +0100
     2.2 +++ b/src/cpu/ppc/vm/macroAssembler_ppc.hpp	Thu Nov 07 11:47:11 2013 +0100
     2.3 @@ -551,6 +551,7 @@
     2.4    void load_klass(Register dst, Register src);
     2.5    void load_klass_with_trap_null_check(Register dst, Register src);
     2.6    void store_klass(Register dst_oop, Register klass, Register tmp = R0);
     2.7 +  static int instr_size_for_decode_klass_not_null();
     2.8    void decode_klass_not_null(Register dst, Register src = noreg);
     2.9    void encode_klass_not_null(Register dst, Register src = noreg);
    2.10  
     3.1 --- a/src/cpu/ppc/vm/vtableStubs_ppc_64.cpp	Thu Nov 07 11:51:53 2013 +0100
     3.2 +++ b/src/cpu/ppc/vm/vtableStubs_ppc_64.cpp	Thu Nov 07 11:47:11 2013 +0100
     3.3 @@ -255,10 +255,11 @@
     3.4    if (TraceJumps || DebugVtables || CountCompiledCalls || VerifyOops) {
     3.5      return 1000;
     3.6    } else {
     3.7 +    int decode_klass_size = MacroAssembler::instr_size_for_decode_klass_not_null();
     3.8      if (is_vtable_stub) {
     3.9 -      return 20 + 16 + 8;    // Plain + (cOops & Traps) + safety
    3.10 +      return 20 + decode_klass_size +  8 + 8;   // Plain + cOops + Traps + safety
    3.11      } else {
    3.12 -      return 16 + 96;
    3.13 +      return 96 + decode_klass_size + 12 + 8;   // Plain + cOops + Traps + safety
    3.14      }
    3.15    }
    3.16  }

mercurial