Wed, 01 Mar 2017 00:42:08 -0500
[C2] Rewrite loadConN & loadConNKlass in mips_64.ad
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 %}