src/cpu/mips/vm/interp_masm_mips_64.cpp

changeset 9144
cecfc245b19a
parent 8863
5376ce0dc552
child 9213
3537fbe332d3
     1.1 --- a/src/cpu/mips/vm/interp_masm_mips_64.cpp	Mon Jun 11 17:42:16 2018 +0800
     1.2 +++ b/src/cpu/mips/vm/interp_masm_mips_64.cpp	Tue Jun 12 13:58:17 2018 +0800
     1.3 @@ -364,12 +364,12 @@
     1.4    Label has_counters;
     1.5    ld(mcs, method, in_bytes(Method::method_counters_offset()));
     1.6    bne(mcs, R0, has_counters);
     1.7 -  nop();
     1.8 +  delayed()->nop();
     1.9    call_VM(noreg, CAST_FROM_FN_PTR(address,
    1.10            InterpreterRuntime::build_method_counters), method);
    1.11    ld(mcs, method, in_bytes(Method::method_counters_offset()));
    1.12    beq(mcs, R0, skip);   // No MethodCounters allocated, OutOfMemory
    1.13 -  nop();
    1.14 +  delayed()->nop();
    1.15    bind(has_counters);
    1.16  }
    1.17  
    1.18 @@ -1035,7 +1035,7 @@
    1.19    daddu(tmp, tmp, AT);
    1.20    daddiu(tmp, tmp, in_bytes(ConstMethod::codes_offset()));
    1.21    beq(tmp, BCP, verify_continue);
    1.22 -  nop();
    1.23 +  delayed()->nop();
    1.24    call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::verify_mdp), method, BCP, mdp);
    1.25    bind(verify_continue);
    1.26    pop(tmp);
    1.27 @@ -1078,7 +1078,7 @@
    1.28      Label L;
    1.29      slt(AT, tmp, R0);
    1.30      bne(AT, R0, L);
    1.31 -    nop();
    1.32 +    delayed()->nop();
    1.33      daddi(tmp, tmp, (int32_t) DataLayout::counter_increment);
    1.34      bind(L);
    1.35      sd(tmp, data);
    1.36 @@ -1114,7 +1114,7 @@
    1.37      Label L;
    1.38      slt(AT, tmp, R0);
    1.39      bne(AT, R0, L);
    1.40 -    nop();
    1.41 +    delayed()->nop();
    1.42      daddi(tmp, tmp, (int32_t) DataLayout::counter_increment);
    1.43      bind(L);
    1.44  
    1.45 @@ -1167,12 +1167,12 @@
    1.46    if (test_value_out == noreg) {
    1.47      ld(AT, Address(mdp_in, offset));
    1.48      bne(AT, value, not_equal_continue);
    1.49 -    nop();
    1.50 +    delayed()->nop();
    1.51    } else {
    1.52      // Put the test value into a register, so caller can use it:
    1.53      ld(test_value_out, Address(mdp_in, offset));
    1.54      bne(value, test_value_out, not_equal_continue);
    1.55 -    nop();
    1.56 +    delayed()->nop();
    1.57    }
    1.58  }
    1.59  
    1.60 @@ -1321,11 +1321,11 @@
    1.61      if (receiver_can_be_null) {
    1.62        Label not_null;
    1.63        bne(receiver, R0, not_null);
    1.64 -      nop();
    1.65 +      delayed()->nop();
    1.66        // We are making a call.  Increment the count.
    1.67        increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
    1.68        beq(R0, R0, skip_receiver_profile);
    1.69 -      nop();
    1.70 +      delayed()->nop();
    1.71        bind(not_null);
    1.72      }
    1.73  
    1.74 @@ -1386,7 +1386,7 @@
    1.75      int count_offset = in_bytes(VirtualCallData::receiver_count_offset(row));
    1.76      increment_mdp_data_at(mdp, count_offset);
    1.77      beq(R0, R0, done);
    1.78 -    nop();
    1.79 +    delayed()->nop();
    1.80      bind(next_test);
    1.81  
    1.82      if (test_for_null_also) {
    1.83 @@ -1396,22 +1396,22 @@
    1.84          // The only thing left to do is handle the null case.
    1.85          if (is_virtual_call) {
    1.86            beq(reg2, R0, found_null);
    1.87 -          nop();
    1.88 +          delayed()->nop();
    1.89            // Receiver did not match any saved receiver and there is no empty row for it.
    1.90            // Increment total counter to indicate polymorphic case.
    1.91            increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
    1.92            beq(R0, R0, done);
    1.93 -          nop();
    1.94 +          delayed()->nop();
    1.95            bind(found_null);
    1.96          } else {
    1.97            bne(reg2, R0, done);
    1.98 -          nop();
    1.99 +          delayed()->nop();
   1.100          }
   1.101          break;
   1.102        }
   1.103        // Since null is rare, make it be the branch-taken case.
   1.104        beq(reg2, R0, found_null);
   1.105 -      nop();
   1.106 +      delayed()->nop();
   1.107  
   1.108        // Put all the "Case 3" tests here.
   1.109        record_klass_in_profile_helper(receiver, mdp, reg2, start_row + 1, done, is_virtual_call);
   1.110 @@ -1433,7 +1433,7 @@
   1.111    set_mdp_data_at(mdp, count_offset, reg2);
   1.112    if (start_row > 0) {
   1.113      beq(R0, R0, done);
   1.114 -    nop();
   1.115 +    delayed()->nop();
   1.116    }
   1.117  }
   1.118  
   1.119 @@ -1500,7 +1500,7 @@
   1.120        update_mdp_by_offset(mdp,
   1.121                             in_bytes(RetData::bci_displacement_offset(row)));
   1.122        beq(R0, R0, profile_continue);
   1.123 -      nop();
   1.124 +      delayed()->nop();
   1.125        bind(next_test);
   1.126      }
   1.127  
   1.128 @@ -1642,31 +1642,31 @@
   1.129    // common case first
   1.130    addiu(AT, T9, -T_INT);
   1.131    beq(AT, R0, done);
   1.132 -  nop();
   1.133 +  delayed()->nop();
   1.134  
   1.135    // mask integer result to narrower return type.
   1.136    addiu(AT, T9, -T_BOOLEAN);
   1.137    bne(AT, R0, notBool);
   1.138 -  nop();
   1.139 +  delayed()->nop();
   1.140    andi(result, result, 0x1);
   1.141    beq(R0, R0, done);
   1.142 -  nop();
   1.143 +  delayed()->nop();
   1.144  
   1.145    bind(notBool);
   1.146    addiu(AT, T9, -T_BYTE);
   1.147    bne(AT, R0, notByte);
   1.148 -  nop();
   1.149 +  delayed()->nop();
   1.150    seb(result, result);
   1.151    beq(R0, R0, done);
   1.152 -  nop();
   1.153 +  delayed()->nop();
   1.154  
   1.155    bind(notByte);
   1.156    addiu(AT, T9, -T_CHAR);
   1.157    bne(AT, R0, notChar);
   1.158 -  nop();
   1.159 +  delayed()->nop();
   1.160    andi(result, result, 0xFFFF);
   1.161    beq(R0, R0, done);
   1.162 -  nop();
   1.163 +  delayed()->nop();
   1.164  
   1.165    bind(notChar);
   1.166    seh(result, result);
   1.167 @@ -1682,7 +1682,7 @@
   1.168    verify_oop(obj);
   1.169  
   1.170    bne(obj, R0, update);
   1.171 -  nop();
   1.172 +  delayed()->nop();
   1.173  
   1.174    push(T1);
   1.175    if (mdo_addr.index() == noreg) {
   1.176 @@ -1710,7 +1710,7 @@
   1.177    pop(T1);
   1.178  
   1.179    beq(R0, R0, next);
   1.180 -  nop();
   1.181 +  delayed()->nop();
   1.182  
   1.183    bind(update);
   1.184    load_klass(obj, obj);
   1.185 @@ -1727,12 +1727,12 @@
   1.186    li(AT, TypeEntries::type_klass_mask);
   1.187    andr(AT, obj, AT);
   1.188    beq(AT, R0, next);
   1.189 -  nop();
   1.190 +  delayed()->nop();
   1.191  
   1.192    li(AT, TypeEntries::type_unknown);
   1.193    andr(AT, AT, obj);
   1.194    bne(AT, R0, next);
   1.195 -  nop();
   1.196 +  delayed()->nop();
   1.197  
   1.198    if (mdo_addr.index() == noreg) {
   1.199      ld(AT, mdo_addr);
   1.200 @@ -1742,7 +1742,7 @@
   1.201      ld(AT, AT, mdo_addr.disp());
   1.202    }
   1.203    beq(AT, R0, none);
   1.204 -  nop();
   1.205 +  delayed()->nop();
   1.206  
   1.207  
   1.208    push(T1);
   1.209 @@ -1760,7 +1760,7 @@
   1.210    subu(AT, AT, T1);
   1.211    pop(T1);
   1.212    beq(AT, R0, none);
   1.213 -  nop();
   1.214 +  delayed()->nop();
   1.215  
   1.216    // There is a chance that the checks above (re-reading profiling
   1.217    // data from memory) fail if another thread has just set the
   1.218 @@ -1776,7 +1776,7 @@
   1.219    li(AT, TypeEntries::type_klass_mask);
   1.220    andr(AT, obj, AT);
   1.221    beq(AT, R0, next);
   1.222 -  nop();
   1.223 +  delayed()->nop();
   1.224  
   1.225    // different than before. Cannot keep accurate profile.
   1.226    push(T1);
   1.227 @@ -1804,7 +1804,7 @@
   1.228    }
   1.229    pop(T1);
   1.230    beq(R0, R0, next);
   1.231 -  nop();
   1.232 +  delayed()->nop();
   1.233  
   1.234  
   1.235    bind(none);
   1.236 @@ -1835,7 +1835,7 @@
   1.237      lb(AT, mdp, in_bytes(DataLayout::tag_offset()) - off_to_start);
   1.238      li(tmp, is_virtual ? DataLayout::virtual_call_type_data_tag : DataLayout::call_type_data_tag);
   1.239      bne(tmp, AT, profile_continue);
   1.240 -    nop();
   1.241 +    delayed()->nop();
   1.242  
   1.243  
   1.244      if (MethodData::profile_arguments()) {
   1.245 @@ -1864,7 +1864,7 @@
   1.246            li(AT, TypeStackSlotEntries::per_arg_count());
   1.247            slt(AT, tmp, AT);
   1.248            bne(AT, R0, done);
   1.249 -          nop();
   1.250 +          delayed()->nop();
   1.251          }
   1.252          ld(tmp, callee, in_bytes(Method::const_offset()));
   1.253  
   1.254 @@ -1949,18 +1949,18 @@
   1.255        lb(AT, _bcp_register, 0);
   1.256        daddiu(AT, AT, -1 * Bytecodes::_invokedynamic);
   1.257        beq(AT, R0, do_profile);
   1.258 -      nop();
   1.259 +      delayed()->nop();
   1.260  
   1.261        lb(AT, _bcp_register, 0);
   1.262        daddiu(AT, AT, -1 * Bytecodes::_invokehandle);
   1.263        beq(AT, R0, do_profile);
   1.264 -      nop();
   1.265 +      delayed()->nop();
   1.266  
   1.267        get_method(tmp);
   1.268        lb(tmp, tmp, Method::intrinsic_id_offset_in_bytes());
   1.269        li(AT, vmIntrinsics::_compiledLambdaForm);
   1.270        bne(tmp, AT, profile_continue);
   1.271 -      nop();
   1.272 +      delayed()->nop();
   1.273  
   1.274        bind(do_profile);
   1.275      }
   1.276 @@ -1985,7 +1985,7 @@
   1.277      // parameters. If it's negative we're not profiling any parameters
   1.278      lw(tmp1, mdp, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset()));
   1.279      bltz(tmp1, profile_continue);
   1.280 -    nop();
   1.281 +    delayed()->nop();
   1.282  
   1.283      // Compute a pointer to the area for parameters from the offset
   1.284      // and move the pointer to the slot for the last
   1.285 @@ -2022,7 +2022,7 @@
   1.286      // go to next parameter
   1.287      decrement(tmp1, TypeStackSlotEntries::per_arg_count());
   1.288      bgtz(tmp1, loop);
   1.289 -    nop();
   1.290 +    delayed()->nop();
   1.291  
   1.292      bind(profile_continue);
   1.293    }

mercurial