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 }