[C2] Rewrite loadConN & loadConNKlass in mips_64.ad

Wed, 01 Mar 2017 00:42:08 -0500

author
fujie
date
Wed, 01 Mar 2017 00:42:08 -0500
changeset 344
8357bf6d6758
parent 343
466bde9d05f8
child 345
87bd78868511

[C2] Rewrite loadConN & loadConNKlass in mips_64.ad

src/cpu/mips/vm/assembler_mips.cpp file | annotate | diff | comparison | revisions
src/cpu/mips/vm/assembler_mips.hpp file | annotate | diff | comparison | revisions
src/cpu/mips/vm/mips_64.ad file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/mips/vm/assembler_mips.cpp	Tue Feb 28 12:02:36 2017 -0500
     1.2 +++ b/src/cpu/mips/vm/assembler_mips.cpp	Wed Mar 01 00:42:08 2017 -0500
     1.3 @@ -2419,6 +2419,31 @@
     1.4    }
     1.5  }
     1.6  
     1.7 +
     1.8 +void MacroAssembler::set_narrow_klass(Register dst, Klass* k) {
     1.9 +  assert(UseCompressedClassPointers, "should only be used for compressed header");
    1.10 +  assert(oop_recorder() != NULL, "this assembler needs an OopRecorder");
    1.11 +
    1.12 +  int klass_index = oop_recorder()->find_index(k);
    1.13 +  RelocationHolder rspec = metadata_Relocation::spec(klass_index);
    1.14 +  long narrowKlass = (long)Klass::encode_klass(k);
    1.15 +
    1.16 +  relocate(rspec, Assembler::narrow_oop_operand);
    1.17 +  li48(dst, narrowKlass);
    1.18 +}
    1.19 +
    1.20 +
    1.21 +void MacroAssembler::set_narrow_oop(Register dst, jobject obj) {
    1.22 +  assert(UseCompressedOops, "should only be used for compressed header");
    1.23 +  assert(oop_recorder() != NULL, "this assembler needs an OopRecorder");
    1.24 +
    1.25 +  int oop_index = oop_recorder()->find_index(obj);
    1.26 +  RelocationHolder rspec = oop_Relocation::spec(oop_index);
    1.27 +
    1.28 +  relocate(rspec, Assembler::narrow_oop_operand);
    1.29 +  li48(dst, oop_index);
    1.30 +}
    1.31 +
    1.32  void MacroAssembler::li64(Register rd, long imm) {
    1.33    assert_not_delayed();
    1.34    lui(rd, imm >> 48);
     2.1 --- a/src/cpu/mips/vm/assembler_mips.hpp	Tue Feb 28 12:02:36 2017 -0500
     2.2 +++ b/src/cpu/mips/vm/assembler_mips.hpp	Wed Mar 01 00:42:08 2017 -0500
     2.3 @@ -1918,6 +1918,9 @@
     2.4    void reinit_heapbase();
     2.5    DEBUG_ONLY(void verify_heapbase(const char* msg);)
     2.6  
     2.7 +  void set_narrow_klass(Register dst, Klass* k);
     2.8 +  void set_narrow_oop(Register dst, jobject obj);
     2.9 +
    2.10  #endif // _LP64
    2.11  
    2.12    void incrementl(Register reg, int value = 1);
     3.1 --- a/src/cpu/mips/vm/mips_64.ad	Tue Feb 28 12:02:36 2017 -0500
     3.2 +++ b/src/cpu/mips/vm/mips_64.ad	Wed Mar 01 00:42:08 2017 -0500
     3.3 @@ -6352,25 +6352,8 @@
     3.4    ins_cost(125);
     3.5    format %{ "li    $dst, $src\t# compressed ptr @ loadConN" %}
     3.6    ins_encode %{
     3.7 -    address con = (address)$src$$constant;
     3.8 -    if (con == NULL) {
     3.9 -      ShouldNotReachHere();
    3.10 -    } else {
    3.11 -		assert (UseCompressedOops, "should only be used for compressed headers");
    3.12 -		assert (Universe::heap() != NULL, "java heap should be initialized");
    3.13 -		assert (__ oop_recorder() != NULL, "this assembler needs an OopRecorder");
    3.14 -
    3.15 -		Register dst = $dst$$Register;
    3.16 -		long*   value = (long*)$src$$constant;
    3.17 -		int oop_index = __ oop_recorder()->find_index((jobject)value);
    3.18 -		RelocationHolder rspec = oop_Relocation::spec(oop_index);
    3.19 -		if(rspec.type()!=relocInfo::none){
    3.20 -			__ relocate(rspec, Assembler::narrow_oop_operand);
    3.21 -			__ li48(dst, oop_index);
    3.22 -		} else {
    3.23 -			__ set64(dst, oop_index);
    3.24 -		}
    3.25 -    }
    3.26 +    Register dst = $dst$$Register;
    3.27 +    __ set_narrow_oop(dst, (jobject)$src$$constant);
    3.28    %}
    3.29    ins_pipe( ialu_regI_regI ); // XXX
    3.30  %}
    3.31 @@ -6381,24 +6364,8 @@
    3.32    ins_cost(125);
    3.33    format %{ "li    $dst, $src\t# compressed klass ptr @ loadConNKlass" %}
    3.34    ins_encode %{
    3.35 -    address con = (address)$src$$constant;
    3.36 -    if (con == NULL) {
    3.37 -      ShouldNotReachHere();
    3.38 -    } else {
    3.39 -		Register dst = $dst$$Register;
    3.40 -		long*   value = (long*)$src$$constant;
    3.41 -
    3.42 -		int klass_index = __ oop_recorder()->find_index((Klass*)value);
    3.43 -		RelocationHolder rspec = metadata_Relocation::spec(klass_index);
    3.44 -		long narrowp = (long)Klass::encode_klass((Klass*)value);
    3.45 -
    3.46 -		if(rspec.type()!=relocInfo::none){
    3.47 -			__ relocate(rspec, Assembler::narrow_oop_operand);
    3.48 -			__ li48(dst, narrowp);
    3.49 -		} else {
    3.50 -			__ set64(dst, narrowp);
    3.51 -		}
    3.52 -    }
    3.53 +    Register dst = $dst$$Register;
    3.54 +    __ set_narrow_klass(dst, (Klass*)$src$$constant);
    3.55    %}
    3.56    ins_pipe( ialu_regI_regI ); // XXX
    3.57  %}

mercurial