1.1 --- a/src/cpu/mips/vm/mips_64.ad Mon Mar 13 21:54:36 2017 +0800 1.2 +++ b/src/cpu/mips/vm/mips_64.ad Tue Mar 14 14:41:34 2017 -0400 1.3 @@ -1581,8 +1581,8 @@ 1.4 //============================================================================= 1.5 #ifndef PRODUCT 1.6 void MachUEPNode::format( PhaseRegAlloc *ra_, outputStream* st ) const { 1.7 - st->print_cr("load_klass(AT, T0)"); 1.8 - st->print_cr("\tbeq(AT, iCache, L)"); 1.9 + st->print_cr("load_klass(T9, T0)"); 1.10 + st->print_cr("\tbeq(T9, iCache, L)"); 1.11 st->print_cr("\tnop"); 1.12 st->print_cr("\tjmp(SharedRuntime::get_ic_miss_stub(), relocInfo::runtime_call_type)"); 1.13 st->print_cr("\tnop"); 1.14 @@ -5220,6 +5220,7 @@ 1.15 constraint(ALLOC_IN_RC(p_reg)); 1.16 match(AddP reg off); 1.17 1.18 + op_cost(10); 1.19 format %{ "[$reg + $off (8-bit)] @ indOffset8" %} 1.20 interface(MEMORY_INTER) %{ 1.21 base($reg); 1.22 @@ -6178,6 +6179,17 @@ 1.23 ins_pipe( ialu_loadI ); // XXX 1.24 %} 1.25 1.26 +instruct loadN2P(mRegP dst, memory mem) 1.27 +%{ 1.28 + match(Set dst (DecodeN (LoadN mem))); 1.29 + predicate(Universe::narrow_oop_base() == NULL && Universe::narrow_oop_shift() == 0); 1.30 + 1.31 + ins_cost(125); // XXX 1.32 + format %{ "lwu $dst, $mem\t# @ loadN2P" %} 1.33 + ins_encode (load_N_enc(dst, mem)); 1.34 + ins_pipe( ialu_loadI ); // XXX 1.35 +%} 1.36 + 1.37 // Load Pointer 1.38 instruct loadP(mRegP dst, memory mem) %{ 1.39 match(Set dst (LoadP mem)); 1.40 @@ -6209,6 +6221,17 @@ 1.41 ins_pipe( ialu_loadI ); // XXX 1.42 %} 1.43 1.44 +instruct loadN2PKlass(mRegP dst, memory mem) 1.45 +%{ 1.46 + match(Set dst (DecodeNKlass (LoadNKlass mem))); 1.47 + predicate(Universe::narrow_klass_base() == NULL && Universe::narrow_klass_shift() == 0); 1.48 + 1.49 + ins_cost(125); // XXX 1.50 + format %{ "lwu $dst, $mem\t# compressed klass ptr @ loadN2PKlass" %} 1.51 + ins_encode (load_N_enc(dst, mem)); 1.52 + ins_pipe( ialu_loadI ); // XXX 1.53 +%} 1.54 + 1.55 // Load Constant 1.56 instruct loadConI(mRegI dst, immI src) %{ 1.57 match(Set dst src); 1.58 @@ -6334,6 +6357,17 @@ 1.59 ins_pipe( ialu_storeI ); 1.60 %} 1.61 1.62 +instruct storeP2N(memory mem, mRegP src) 1.63 +%{ 1.64 + match(Set mem (StoreN mem (EncodeP src))); 1.65 + predicate(Universe::narrow_oop_base() == NULL && Universe::narrow_oop_shift() == 0); 1.66 + 1.67 + ins_cost(125); // XXX 1.68 + format %{ "sw $mem, $src\t# @ storeP2N" %} 1.69 + ins_encode(store_N_reg_enc(mem, src)); 1.70 + ins_pipe( ialu_storeI ); 1.71 +%} 1.72 + 1.73 instruct storeNKlass(memory mem, mRegN src) 1.74 %{ 1.75 match(Set mem (StoreNKlass mem src)); 1.76 @@ -6344,9 +6378,19 @@ 1.77 ins_pipe( ialu_storeI ); 1.78 %} 1.79 1.80 +instruct storeP2NKlass(memory mem, mRegP src) 1.81 +%{ 1.82 + match(Set mem (StoreNKlass mem (EncodePKlass src))); 1.83 + predicate(Universe::narrow_klass_base() == NULL && Universe::narrow_klass_shift() == 0); 1.84 + 1.85 + ins_cost(125); // XXX 1.86 + format %{ "sw $mem, $src\t# @ storeP2NKlass" %} 1.87 + ins_encode(store_N_reg_enc(mem, src)); 1.88 + ins_pipe( ialu_storeI ); 1.89 +%} 1.90 + 1.91 instruct storeImmN0(memory mem, immN0 zero) 1.92 %{ 1.93 - predicate(Universe::narrow_oop_base() == NULL && Universe::narrow_klass_base() == NULL); 1.94 match(Set mem (StoreN mem zero)); 1.95 1.96 ins_cost(125); // XXX 1.97 @@ -6847,6 +6891,44 @@ 1.98 ins_pipe( pipe_alu_branch ); 1.99 %} 1.100 1.101 +instruct branchConN2P_zero(cmpOpU cmp, mRegN op1, immP0 zero, label labl) %{ 1.102 + match(If cmp (CmpP (DecodeN op1) zero)); 1.103 + predicate(Universe::narrow_oop_base() == NULL && Universe::narrow_oop_shift() == 0); 1.104 + effect(USE labl); 1.105 + 1.106 + ins_cost(180); 1.107 + format %{ "b$cmp $op1, R0, $labl #@branchConN2P_zero" %} 1.108 + 1.109 + ins_encode %{ 1.110 + Register op1 = $op1$$Register; 1.111 + Register op2 = R0; 1.112 + Label &L = *($labl$$label); 1.113 + int flag = $cmp$$cmpcode; 1.114 + 1.115 + switch(flag) 1.116 + { 1.117 + case 0x01: //equal 1.118 + if (&L) 1.119 + __ beq(op1, op2, L); 1.120 + else 1.121 + __ beq(op1, op2, (int)0); 1.122 + break; 1.123 + case 0x02: //not_equal 1.124 + if (&L) 1.125 + __ bne(op1, op2, L); 1.126 + else 1.127 + __ bne(op1, op2, (int)0); 1.128 + break; 1.129 + default: 1.130 + Unimplemented(); 1.131 + } 1.132 + __ nop(); 1.133 + %} 1.134 + 1.135 + ins_pc_relative(1); 1.136 + ins_pipe( pipe_alu_branch ); 1.137 +%} 1.138 + 1.139 1.140 instruct branchConP(cmpOpU cmp, mRegP op1, mRegP op2, label labl) %{ 1.141 match(If cmp (CmpP op1 op2));