[C2] Add some instructs in mips_64.ad for UseCompressedOops.

Tue, 14 Mar 2017 14:41:34 -0400

author
fujie
date
Tue, 14 Mar 2017 14:41:34 -0400
changeset 377
ce48f85bff34
parent 376
030cb2764106
child 378
c54808003b73

[C2] Add some instructs in mips_64.ad for UseCompressedOops.

src/cpu/mips/vm/mips_64.ad file | annotate | diff | comparison | revisions
     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));

mercurial