Tue, 12 Jun 2018 13:58:17 +0800
#7157 Fix all forgot saying delayed() when filling delay slot issues
Summary: enable check_delay and guarantee delay_state is at_delay_slot when filling delay slot
Reviewed-by: aoqi
1.1 --- a/src/cpu/mips/vm/assembler_mips.inline.hpp Mon Jun 11 17:42:16 2018 +0800 1.2 +++ b/src/cpu/mips/vm/assembler_mips.inline.hpp Tue Jun 12 13:58:17 2018 +0800 1.3 @@ -34,6 +34,7 @@ 1.4 1.5 inline void Assembler::check_delay() { 1.6 # ifdef CHECK_DELAY 1.7 + guarantee(delay_state != at_delay_slot, "must say delayed() when filling delay slot"); 1.8 delay_state = no_delay; 1.9 # endif 1.10 }
2.1 --- a/src/cpu/mips/vm/c1_LIRAssembler_mips.cpp Mon Jun 11 17:42:16 2018 +0800 2.2 +++ b/src/cpu/mips/vm/c1_LIRAssembler_mips.cpp Tue Jun 12 13:58:17 2018 +0800 2.3 @@ -297,15 +297,6 @@ 2.4 Register receiver = FrameMap::receiver_opr->as_register(); 2.5 Register ic_klass = IC_Klass; 2.6 2.7 - /*const int ic_cmp_size = LP64_ONLY(10) NOT_LP64(9); 2.8 - const bool do_post_padding = VerifyOops || UseCompressedOops; 2.9 - if (!do_post_padding) { 2.10 - // insert some nops so that the verified entry point is aligned on CodeEntryAlignment 2.11 - while ((__ offset() + ic_cmp_size) % CodeEntryAlignment != 0) { 2.12 - __ nop(); 2.13 - } 2.14 - }*/ 2.15 - 2.16 int offset = __ offset(); 2.17 __ inline_cache_check(receiver, IC_Klass); 2.18 __ align(CodeEntryAlignment);
3.1 --- a/src/cpu/mips/vm/c1_MacroAssembler_mips.cpp Mon Jun 11 17:42:16 2018 +0800 3.2 +++ b/src/cpu/mips/vm/c1_MacroAssembler_mips.cpp Tue Jun 12 13:58:17 2018 +0800 3.3 @@ -436,14 +436,6 @@ 3.4 bind(L); 3.5 // assert(UseCompressedOops, "check alignment in emit_method_entry"); 3.6 } 3.7 -/* 3.8 -void C1_MacroAssembler::method_exit(bool restore_frame) { 3.9 - if (restore_frame) { 3.10 - leave(); 3.11 - } 3.12 - jr(RA); 3.13 - delayed()->nop(); 3.14 -}*/ 3.15 3.16 3.17 void C1_MacroAssembler::build_frame(int frame_size_in_bytes, int bang_size_in_bytes) {
4.1 --- a/src/cpu/mips/vm/interp_masm_mips_64.cpp Mon Jun 11 17:42:16 2018 +0800 4.2 +++ b/src/cpu/mips/vm/interp_masm_mips_64.cpp Tue Jun 12 13:58:17 2018 +0800 4.3 @@ -364,12 +364,12 @@ 4.4 Label has_counters; 4.5 ld(mcs, method, in_bytes(Method::method_counters_offset())); 4.6 bne(mcs, R0, has_counters); 4.7 - nop(); 4.8 + delayed()->nop(); 4.9 call_VM(noreg, CAST_FROM_FN_PTR(address, 4.10 InterpreterRuntime::build_method_counters), method); 4.11 ld(mcs, method, in_bytes(Method::method_counters_offset())); 4.12 beq(mcs, R0, skip); // No MethodCounters allocated, OutOfMemory 4.13 - nop(); 4.14 + delayed()->nop(); 4.15 bind(has_counters); 4.16 } 4.17 4.18 @@ -1035,7 +1035,7 @@ 4.19 daddu(tmp, tmp, AT); 4.20 daddiu(tmp, tmp, in_bytes(ConstMethod::codes_offset())); 4.21 beq(tmp, BCP, verify_continue); 4.22 - nop(); 4.23 + delayed()->nop(); 4.24 call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::verify_mdp), method, BCP, mdp); 4.25 bind(verify_continue); 4.26 pop(tmp); 4.27 @@ -1078,7 +1078,7 @@ 4.28 Label L; 4.29 slt(AT, tmp, R0); 4.30 bne(AT, R0, L); 4.31 - nop(); 4.32 + delayed()->nop(); 4.33 daddi(tmp, tmp, (int32_t) DataLayout::counter_increment); 4.34 bind(L); 4.35 sd(tmp, data); 4.36 @@ -1114,7 +1114,7 @@ 4.37 Label L; 4.38 slt(AT, tmp, R0); 4.39 bne(AT, R0, L); 4.40 - nop(); 4.41 + delayed()->nop(); 4.42 daddi(tmp, tmp, (int32_t) DataLayout::counter_increment); 4.43 bind(L); 4.44 4.45 @@ -1167,12 +1167,12 @@ 4.46 if (test_value_out == noreg) { 4.47 ld(AT, Address(mdp_in, offset)); 4.48 bne(AT, value, not_equal_continue); 4.49 - nop(); 4.50 + delayed()->nop(); 4.51 } else { 4.52 // Put the test value into a register, so caller can use it: 4.53 ld(test_value_out, Address(mdp_in, offset)); 4.54 bne(value, test_value_out, not_equal_continue); 4.55 - nop(); 4.56 + delayed()->nop(); 4.57 } 4.58 } 4.59 4.60 @@ -1321,11 +1321,11 @@ 4.61 if (receiver_can_be_null) { 4.62 Label not_null; 4.63 bne(receiver, R0, not_null); 4.64 - nop(); 4.65 + delayed()->nop(); 4.66 // We are making a call. Increment the count. 4.67 increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset())); 4.68 beq(R0, R0, skip_receiver_profile); 4.69 - nop(); 4.70 + delayed()->nop(); 4.71 bind(not_null); 4.72 } 4.73 4.74 @@ -1386,7 +1386,7 @@ 4.75 int count_offset = in_bytes(VirtualCallData::receiver_count_offset(row)); 4.76 increment_mdp_data_at(mdp, count_offset); 4.77 beq(R0, R0, done); 4.78 - nop(); 4.79 + delayed()->nop(); 4.80 bind(next_test); 4.81 4.82 if (test_for_null_also) { 4.83 @@ -1396,22 +1396,22 @@ 4.84 // The only thing left to do is handle the null case. 4.85 if (is_virtual_call) { 4.86 beq(reg2, R0, found_null); 4.87 - nop(); 4.88 + delayed()->nop(); 4.89 // Receiver did not match any saved receiver and there is no empty row for it. 4.90 // Increment total counter to indicate polymorphic case. 4.91 increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset())); 4.92 beq(R0, R0, done); 4.93 - nop(); 4.94 + delayed()->nop(); 4.95 bind(found_null); 4.96 } else { 4.97 bne(reg2, R0, done); 4.98 - nop(); 4.99 + delayed()->nop(); 4.100 } 4.101 break; 4.102 } 4.103 // Since null is rare, make it be the branch-taken case. 4.104 beq(reg2, R0, found_null); 4.105 - nop(); 4.106 + delayed()->nop(); 4.107 4.108 // Put all the "Case 3" tests here. 4.109 record_klass_in_profile_helper(receiver, mdp, reg2, start_row + 1, done, is_virtual_call); 4.110 @@ -1433,7 +1433,7 @@ 4.111 set_mdp_data_at(mdp, count_offset, reg2); 4.112 if (start_row > 0) { 4.113 beq(R0, R0, done); 4.114 - nop(); 4.115 + delayed()->nop(); 4.116 } 4.117 } 4.118 4.119 @@ -1500,7 +1500,7 @@ 4.120 update_mdp_by_offset(mdp, 4.121 in_bytes(RetData::bci_displacement_offset(row))); 4.122 beq(R0, R0, profile_continue); 4.123 - nop(); 4.124 + delayed()->nop(); 4.125 bind(next_test); 4.126 } 4.127 4.128 @@ -1642,31 +1642,31 @@ 4.129 // common case first 4.130 addiu(AT, T9, -T_INT); 4.131 beq(AT, R0, done); 4.132 - nop(); 4.133 + delayed()->nop(); 4.134 4.135 // mask integer result to narrower return type. 4.136 addiu(AT, T9, -T_BOOLEAN); 4.137 bne(AT, R0, notBool); 4.138 - nop(); 4.139 + delayed()->nop(); 4.140 andi(result, result, 0x1); 4.141 beq(R0, R0, done); 4.142 - nop(); 4.143 + delayed()->nop(); 4.144 4.145 bind(notBool); 4.146 addiu(AT, T9, -T_BYTE); 4.147 bne(AT, R0, notByte); 4.148 - nop(); 4.149 + delayed()->nop(); 4.150 seb(result, result); 4.151 beq(R0, R0, done); 4.152 - nop(); 4.153 + delayed()->nop(); 4.154 4.155 bind(notByte); 4.156 addiu(AT, T9, -T_CHAR); 4.157 bne(AT, R0, notChar); 4.158 - nop(); 4.159 + delayed()->nop(); 4.160 andi(result, result, 0xFFFF); 4.161 beq(R0, R0, done); 4.162 - nop(); 4.163 + delayed()->nop(); 4.164 4.165 bind(notChar); 4.166 seh(result, result); 4.167 @@ -1682,7 +1682,7 @@ 4.168 verify_oop(obj); 4.169 4.170 bne(obj, R0, update); 4.171 - nop(); 4.172 + delayed()->nop(); 4.173 4.174 push(T1); 4.175 if (mdo_addr.index() == noreg) { 4.176 @@ -1710,7 +1710,7 @@ 4.177 pop(T1); 4.178 4.179 beq(R0, R0, next); 4.180 - nop(); 4.181 + delayed()->nop(); 4.182 4.183 bind(update); 4.184 load_klass(obj, obj); 4.185 @@ -1727,12 +1727,12 @@ 4.186 li(AT, TypeEntries::type_klass_mask); 4.187 andr(AT, obj, AT); 4.188 beq(AT, R0, next); 4.189 - nop(); 4.190 + delayed()->nop(); 4.191 4.192 li(AT, TypeEntries::type_unknown); 4.193 andr(AT, AT, obj); 4.194 bne(AT, R0, next); 4.195 - nop(); 4.196 + delayed()->nop(); 4.197 4.198 if (mdo_addr.index() == noreg) { 4.199 ld(AT, mdo_addr); 4.200 @@ -1742,7 +1742,7 @@ 4.201 ld(AT, AT, mdo_addr.disp()); 4.202 } 4.203 beq(AT, R0, none); 4.204 - nop(); 4.205 + delayed()->nop(); 4.206 4.207 4.208 push(T1); 4.209 @@ -1760,7 +1760,7 @@ 4.210 subu(AT, AT, T1); 4.211 pop(T1); 4.212 beq(AT, R0, none); 4.213 - nop(); 4.214 + delayed()->nop(); 4.215 4.216 // There is a chance that the checks above (re-reading profiling 4.217 // data from memory) fail if another thread has just set the 4.218 @@ -1776,7 +1776,7 @@ 4.219 li(AT, TypeEntries::type_klass_mask); 4.220 andr(AT, obj, AT); 4.221 beq(AT, R0, next); 4.222 - nop(); 4.223 + delayed()->nop(); 4.224 4.225 // different than before. Cannot keep accurate profile. 4.226 push(T1); 4.227 @@ -1804,7 +1804,7 @@ 4.228 } 4.229 pop(T1); 4.230 beq(R0, R0, next); 4.231 - nop(); 4.232 + delayed()->nop(); 4.233 4.234 4.235 bind(none); 4.236 @@ -1835,7 +1835,7 @@ 4.237 lb(AT, mdp, in_bytes(DataLayout::tag_offset()) - off_to_start); 4.238 li(tmp, is_virtual ? DataLayout::virtual_call_type_data_tag : DataLayout::call_type_data_tag); 4.239 bne(tmp, AT, profile_continue); 4.240 - nop(); 4.241 + delayed()->nop(); 4.242 4.243 4.244 if (MethodData::profile_arguments()) { 4.245 @@ -1864,7 +1864,7 @@ 4.246 li(AT, TypeStackSlotEntries::per_arg_count()); 4.247 slt(AT, tmp, AT); 4.248 bne(AT, R0, done); 4.249 - nop(); 4.250 + delayed()->nop(); 4.251 } 4.252 ld(tmp, callee, in_bytes(Method::const_offset())); 4.253 4.254 @@ -1949,18 +1949,18 @@ 4.255 lb(AT, _bcp_register, 0); 4.256 daddiu(AT, AT, -1 * Bytecodes::_invokedynamic); 4.257 beq(AT, R0, do_profile); 4.258 - nop(); 4.259 + delayed()->nop(); 4.260 4.261 lb(AT, _bcp_register, 0); 4.262 daddiu(AT, AT, -1 * Bytecodes::_invokehandle); 4.263 beq(AT, R0, do_profile); 4.264 - nop(); 4.265 + delayed()->nop(); 4.266 4.267 get_method(tmp); 4.268 lb(tmp, tmp, Method::intrinsic_id_offset_in_bytes()); 4.269 li(AT, vmIntrinsics::_compiledLambdaForm); 4.270 bne(tmp, AT, profile_continue); 4.271 - nop(); 4.272 + delayed()->nop(); 4.273 4.274 bind(do_profile); 4.275 } 4.276 @@ -1985,7 +1985,7 @@ 4.277 // parameters. If it's negative we're not profiling any parameters 4.278 lw(tmp1, mdp, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset())); 4.279 bltz(tmp1, profile_continue); 4.280 - nop(); 4.281 + delayed()->nop(); 4.282 4.283 // Compute a pointer to the area for parameters from the offset 4.284 // and move the pointer to the slot for the last 4.285 @@ -2022,7 +2022,7 @@ 4.286 // go to next parameter 4.287 decrement(tmp1, TypeStackSlotEntries::per_arg_count()); 4.288 bgtz(tmp1, loop); 4.289 - nop(); 4.290 + delayed()->nop(); 4.291 4.292 bind(profile_continue); 4.293 }
5.1 --- a/src/cpu/mips/vm/interpreterRT_mips_64.cpp Mon Jun 11 17:42:16 2018 +0800 5.2 +++ b/src/cpu/mips/vm/interpreterRT_mips_64.cpp Tue Jun 12 13:58:17 2018 +0800 5.3 @@ -85,7 +85,7 @@ 5.4 5.5 Label L; 5.6 __ bne(Rtmp1, R0, L); 5.7 - __ addu_long(Rtmp1, from(), Interpreter::local_offset_in_bytes(offset())); 5.8 + __ delayed()->daddiu(Rtmp1, from(), Interpreter::local_offset_in_bytes(offset())); 5.9 __ move(Rtmp1, R0); 5.10 __ bind(L); 5.11
6.1 --- a/src/cpu/mips/vm/macroAssembler_mips.cpp Mon Jun 11 17:42:16 2018 +0800 6.2 +++ b/src/cpu/mips/vm/macroAssembler_mips.cpp Tue Jun 12 13:58:17 2018 +0800 6.3 @@ -125,7 +125,7 @@ 6.4 MacroAssembler masm(&cb); 6.5 #define __ masm. 6.6 __ b(target); 6.7 - __ nop(); 6.8 + __ delayed()->nop(); 6.9 __ nop(); 6.10 __ nop(); 6.11 __ nop(); 6.12 @@ -188,11 +188,11 @@ 6.13 void MacroAssembler::general_jump(address target) { 6.14 if (reachable_from_cache(target)) { 6.15 j(target); 6.16 - nop(); 6.17 + delayed()->nop(); 6.18 } else { 6.19 set64(T9, (long)target); 6.20 jr(T9); 6.21 - nop(); 6.22 + delayed()->nop(); 6.23 } 6.24 } 6.25 6.26 @@ -216,11 +216,11 @@ 6.27 nop(); 6.28 nop(); 6.29 j(target); 6.30 - nop(); 6.31 + delayed()->nop(); 6.32 } else { 6.33 patchable_set48(T9, (long)target); 6.34 jr(T9); 6.35 - nop(); 6.36 + delayed()->nop(); 6.37 } 6.38 } 6.39 6.40 @@ -231,11 +231,11 @@ 6.41 void MacroAssembler::general_call(address target) { 6.42 if (reachable_from_cache(target)) { 6.43 jal(target); 6.44 - nop(); 6.45 + delayed()->nop(); 6.46 } else { 6.47 set64(T9, (long)target); 6.48 jalr(T9); 6.49 - nop(); 6.50 + delayed()->nop(); 6.51 } 6.52 } 6.53 6.54 @@ -259,11 +259,11 @@ 6.55 nop(); 6.56 nop(); 6.57 jal(target); 6.58 - nop(); 6.59 + delayed()->nop(); 6.60 } else { 6.61 patchable_set48(T9, (long)target); 6.62 jalr(T9); 6.63 - nop(); 6.64 + delayed()->nop(); 6.65 } 6.66 } 6.67 6.68 @@ -347,7 +347,7 @@ 6.69 Label not_taken; 6.70 6.71 bne(rs, rt, not_taken); 6.72 - nop(); 6.73 + delayed()->nop(); 6.74 6.75 jmp_far(L); 6.76 6.77 @@ -358,7 +358,7 @@ 6.78 Label not_taken; 6.79 6.80 beq(rs, rt, not_taken); 6.81 - nop(); 6.82 + delayed()->nop(); 6.83 6.84 jmp_far(L); 6.85 6.86 @@ -369,7 +369,7 @@ 6.87 Label not_taken; 6.88 6.89 bc1f(not_taken); 6.90 - nop(); 6.91 + delayed()->nop(); 6.92 6.93 jmp_far(L); 6.94 6.95 @@ -380,7 +380,7 @@ 6.96 Label not_taken; 6.97 6.98 bc1t(not_taken); 6.99 - nop(); 6.100 + delayed()->nop(); 6.101 6.102 jmp_far(L); 6.103 6.104 @@ -819,7 +819,7 @@ 6.105 } 6.106 6.107 jr(T9); 6.108 - nop(); 6.109 + delayed()->nop(); 6.110 } 6.111 void MacroAssembler::mov_metadata(Address dst, Metadata* obj) { 6.112 int oop_index; 6.113 @@ -1591,7 +1591,7 @@ 6.114 lb(AT, in_progress); 6.115 } 6.116 beq(AT, R0, done); 6.117 - nop(); 6.118 + delayed()->nop(); 6.119 6.120 // Do we need to load the previous value? 6.121 if (obj != noreg) { 6.122 @@ -1600,7 +1600,7 @@ 6.123 6.124 // Is the previous value null? 6.125 beq(pre_val, R0, done); 6.126 - nop(); 6.127 + delayed()->nop(); 6.128 6.129 // Can we store original value in the thread's buffer? 6.130 // Is index == 0? 6.131 @@ -1608,7 +1608,7 @@ 6.132 6.133 ld(tmp, index); 6.134 beq(tmp, R0, runtime); 6.135 - nop(); 6.136 + delayed()->nop(); 6.137 6.138 daddiu(tmp, tmp, -1 * wordSize); 6.139 sd(tmp, index); 6.140 @@ -1618,7 +1618,7 @@ 6.141 // Record the previous value 6.142 sd(pre_val, tmp, 0); 6.143 beq(R0, R0, done); 6.144 - nop(); 6.145 + delayed()->nop(); 6.146 6.147 bind(runtime); 6.148 // save the live input values 6.149 @@ -1692,12 +1692,12 @@ 6.150 xorr(AT, store_addr, new_val); 6.151 dsrl(AT, AT, HeapRegion::LogOfHRGrainBytes); 6.152 beq(AT, R0, done); 6.153 - nop(); 6.154 + delayed()->nop(); 6.155 6.156 6.157 // crosses regions, storing NULL? 6.158 beq(new_val, R0, done); 6.159 - nop(); 6.160 + delayed()->nop(); 6.161 6.162 // storing region crossing non-NULL, is card already dirty? 6.163 const Register card_addr = tmp; 6.164 @@ -1713,13 +1713,13 @@ 6.165 lb(AT, card_addr, 0); 6.166 daddiu(AT, AT, -1 * (int)G1SATBCardTableModRefBS::g1_young_card_val()); 6.167 beq(AT, R0, done); 6.168 - nop(); 6.169 + delayed()->nop(); 6.170 6.171 sync(); 6.172 lb(AT, card_addr, 0); 6.173 daddiu(AT, AT, -1 * (int)(int)CardTableModRefBS::dirty_card_val()); 6.174 beq(AT, R0, done); 6.175 - nop(); 6.176 + delayed()->nop(); 6.177 6.178 6.179 // storing a region crossing, non-NULL oop, card is clean. 6.180 @@ -1729,7 +1729,7 @@ 6.181 6.182 lw(AT, queue_index); 6.183 beq(AT, R0, runtime); 6.184 - nop(); 6.185 + delayed()->nop(); 6.186 daddiu(AT, AT, -1 * wordSize); 6.187 sw(AT, queue_index); 6.188 ld(tmp2, buffer); 6.189 @@ -1743,7 +1743,7 @@ 6.190 sw(card_addr, tmp2, 0); 6.191 #endif 6.192 beq(R0, R0, done); 6.193 - nop(); 6.194 + delayed()->nop(); 6.195 6.196 bind(runtime); 6.197 // save the live input values 6.198 @@ -4031,10 +4031,10 @@ 6.199 6.200 if (peel) { 6.201 beq(intf_klass, method_result, found_method); 6.202 - nop(); 6.203 + delayed()->nop(); 6.204 } else { 6.205 bne(intf_klass, method_result, search); 6.206 - nop(); 6.207 + delayed()->nop(); 6.208 // (invert the test to fall through to found_method...) 6.209 } 6.210 6.211 @@ -4046,7 +4046,7 @@ 6.212 // the receiver class doesn't implement the interface, and wasn't the 6.213 // same as when the caller was compiled. 6.214 beq(method_result, R0, L_no_such_interface); 6.215 - nop(); 6.216 + delayed()->nop(); 6.217 daddiu(scan_temp, scan_temp, scan_step); 6.218 } 6.219
7.1 --- a/src/cpu/mips/vm/methodHandles_mips.cpp Mon Jun 11 17:42:16 2018 +0800 7.2 +++ b/src/cpu/mips/vm/methodHandles_mips.cpp Tue Jun 12 13:58:17 2018 +0800 7.3 @@ -71,20 +71,20 @@ 7.4 BLOCK_COMMENT("verify_klass {"); 7.5 __ verify_oop(obj); 7.6 __ beq(obj, R0, L_bad); 7.7 - __ nop(); 7.8 + __ delayed()->nop(); 7.9 __ push(temp); //if (temp2 != noreg) __ push(temp2); 7.10 #define UNPUSH { __ pop(temp); } 7.11 __ load_klass(temp, obj); 7.12 __ li(AT, (long)&klass_addr); 7.13 __ ld(AT, AT, 0); 7.14 __ beq(temp, AT, L_ok); 7.15 - __ nop(); 7.16 + __ delayed()->nop(); 7.17 intptr_t super_check_offset = klass->super_check_offset(); 7.18 __ ld(temp, Address(temp, super_check_offset)); 7.19 __ li(AT, (long)&klass_addr); 7.20 __ ld(AT, AT, 0); 7.21 __ beq(AT, temp, L_ok); 7.22 - __ nop(); 7.23 + __ delayed()->nop(); 7.24 UNPUSH; 7.25 __ bind(L_bad); 7.26 __ STOP(error_message); 7.27 @@ -103,7 +103,7 @@ 7.28 __ andr(temp, temp, AT); 7.29 __ move(AT, ref_kind); 7.30 __ beq(temp, AT, L); 7.31 - __ nop(); 7.32 + __ delayed()->nop(); 7.33 { char* buf = NEW_C_HEAP_ARRAY(char, 100, mtInternal); 7.34 jio_snprintf(buf, 100, "verify_ref_kind expected %x", ref_kind); 7.35 if (ref_kind == JVM_REF_invokeVirtual || 7.36 @@ -124,7 +124,7 @@ 7.37 7.38 Label L_no_such_method; 7.39 __ beq(method, R0, L_no_such_method); 7.40 - __ nop(); 7.41 + __ delayed()->nop(); 7.42 7.43 __ verify_method_ptr(method); 7.44 7.45 @@ -143,10 +143,10 @@ 7.46 // Is a cmpl faster? 7.47 __ lbu(AT, rthread, in_bytes(JavaThread::interp_only_mode_offset())); 7.48 __ beq(AT, R0, run_compiled_code); 7.49 - __ nop(); 7.50 + __ delayed()->nop(); 7.51 __ ld(T9, method, in_bytes(Method::interpreter_entry_offset())); 7.52 __ jr(T9); 7.53 - __ nop(); 7.54 + __ delayed()->nop(); 7.55 __ BIND(run_compiled_code); 7.56 } 7.57 7.58 @@ -154,12 +154,12 @@ 7.59 Method::from_interpreted_offset(); 7.60 __ ld(T9, method, in_bytes(entry_offset)); 7.61 __ jr(T9); 7.62 - __ nop(); 7.63 + __ delayed()->nop(); 7.64 7.65 __ bind(L_no_such_method); 7.66 address wrong_method = StubRoutines::throw_AbstractMethodError_entry(); 7.67 __ jmp(wrong_method, relocInfo::runtime_call_type); 7.68 - __ nop(); 7.69 + __ delayed()->nop(); 7.70 } 7.71 7.72 void MethodHandles::jump_to_lambda_form(MacroAssembler* _masm, 7.73 @@ -195,7 +195,7 @@ 7.74 Address recv_addr = __ argument_address(temp2, -1); 7.75 __ ld(AT, recv_addr); 7.76 __ beq(recv, AT, L); 7.77 - __ nop(); 7.78 + __ delayed()->nop(); 7.79 7.80 recv_addr = __ argument_address(temp2, -1); 7.81 __ ld(V0, recv_addr); 7.82 @@ -242,7 +242,7 @@ 7.83 guarantee(Assembler::is_simm16(iid), "Oops, iid is not simm16! Change the instructions."); 7.84 __ addiu(AT, AT, -1 * (int) iid); 7.85 __ beq(AT, R0, L); 7.86 - __ nop(); 7.87 + __ delayed()->nop(); 7.88 if (iid == vmIntrinsics::_linkToVirtual || 7.89 iid == vmIntrinsics::_linkToSpecial) { 7.90 // could do this for all kinds, but would explode assembly code size 7.91 @@ -419,7 +419,7 @@ 7.92 Label L_index_ok; 7.93 __ slt(AT, R0, temp2_index); 7.94 __ bne(AT, R0, L_index_ok); 7.95 - __ nop(); 7.96 + __ delayed()->nop(); 7.97 __ STOP("no virtual index"); 7.98 __ BIND(L_index_ok); 7.99 } 7.100 @@ -451,7 +451,7 @@ 7.101 Label L; 7.102 __ slt(AT, rbx_index, R0); 7.103 __ beq(AT, R0, L); 7.104 - __ nop(); 7.105 + __ delayed()->nop(); 7.106 __ STOP("invalid vtable index for MH.invokeInterface"); 7.107 __ bind(L); 7.108 } 7.109 @@ -484,7 +484,7 @@ 7.110 __ bind(L_incompatible_class_change_error); 7.111 address icce_entry= StubRoutines::throw_IncompatibleClassChangeError_entry(); 7.112 __ jmp(icce_entry, relocInfo::runtime_call_type); 7.113 - __ nop(); 7.114 + __ delayed()->nop(); 7.115 } 7.116 } 7.117 }
8.1 --- a/src/cpu/mips/vm/mips_64.ad Mon Jun 11 17:42:16 2018 +0800 8.2 +++ b/src/cpu/mips/vm/mips_64.ad Tue Jun 12 13:58:17 2018 +0800 8.3 @@ -1522,7 +1522,7 @@ 8.4 Register iCache = as_Register(ic_reg); 8.5 __ load_klass(T9, receiver); 8.6 __ beq(T9, iCache, L); 8.7 - __ nop(); 8.8 + __ delayed()->nop(); 8.9 8.10 __ relocate(relocInfo::runtime_call_type); 8.11 __ patchable_jump((address)SharedRuntime::get_ic_miss_stub()); 8.12 @@ -3362,7 +3362,7 @@ 8.13 /* 2013/7/22 Jin: Refer to X86_64's RDI */ 8.14 __ move(result, 0); 8.15 __ b(done); 8.16 - __ nop(); 8.17 + __ delayed()->nop(); 8.18 8.19 __ bind(miss); 8.20 __ move(result, 1); 8.21 @@ -6545,7 +6545,7 @@ 8.22 8.23 __ move(S3, oop); 8.24 __ jr(target); 8.25 - __ nop(); 8.26 + __ delayed()->nop(); 8.27 %} 8.28 8.29 ins_pipe( pipe_jump ); 8.30 @@ -7583,7 +7583,7 @@ 8.31 __ b(L); 8.32 else 8.33 __ b(int(0)); 8.34 - __ nop(); 8.35 + __ delayed()->nop(); 8.36 %} 8.37 8.38 ins_pipe( pipe_jump ); 8.39 @@ -7648,7 +7648,7 @@ 8.40 default: 8.41 Unimplemented(); 8.42 } 8.43 - __ nop(); 8.44 + __ delayed()->nop(); 8.45 %} 8.46 ins_pipe( pipe_jump ); 8.47 ins_pc_relative(1); 8.48 @@ -7713,7 +7713,7 @@ 8.49 default: 8.50 Unimplemented(); 8.51 } 8.52 - __ nop(); 8.53 + __ delayed()->nop(); 8.54 %} 8.55 ins_pipe( pipe_jump ); 8.56 ins_pc_relative(1); 8.57 @@ -7747,7 +7747,7 @@ 8.58 default: 8.59 Unimplemented(); 8.60 } 8.61 - __ nop(); 8.62 + __ delayed()->nop(); 8.63 %} 8.64 8.65 ins_pipe( pipe_jump ); 8.66 @@ -7785,7 +7785,7 @@ 8.67 default: 8.68 Unimplemented(); 8.69 } 8.70 - __ nop(); 8.71 + __ delayed()->nop(); 8.72 %} 8.73 8.74 ins_pc_relative(1); 8.75 @@ -7824,7 +7824,7 @@ 8.76 default: 8.77 Unimplemented(); 8.78 } 8.79 - __ nop(); 8.80 + __ delayed()->nop(); 8.81 %} 8.82 8.83 ins_pc_relative(1); 8.84 @@ -7891,7 +7891,7 @@ 8.85 default: 8.86 Unimplemented(); 8.87 } 8.88 - __ nop(); 8.89 + __ delayed()->nop(); 8.90 %} 8.91 8.92 ins_pc_relative(1); 8.93 @@ -7928,7 +7928,7 @@ 8.94 default: 8.95 Unimplemented(); 8.96 } 8.97 - __ nop(); 8.98 + __ delayed()->nop(); 8.99 %} 8.100 //TODO: pipe_branchP or create pipe_branchN LEE 8.101 ins_pc_relative(1); 8.102 @@ -7993,7 +7993,7 @@ 8.103 default: 8.104 Unimplemented(); 8.105 } 8.106 - __ nop(); 8.107 + __ delayed()->nop(); 8.108 %} 8.109 ins_pc_relative(1); 8.110 ins_pipe( pipe_alu_branch ); 8.111 @@ -8055,7 +8055,7 @@ 8.112 default: 8.113 Unimplemented(); 8.114 } 8.115 - __ nop(); 8.116 + __ delayed()->nop(); 8.117 %} 8.118 8.119 ins_pc_relative(1); 8.120 @@ -8120,7 +8120,7 @@ 8.121 default: 8.122 Unimplemented(); 8.123 } 8.124 - __ nop(); 8.125 + __ delayed()->nop(); 8.126 %} 8.127 8.128 ins_pc_relative(1); 8.129 @@ -8183,7 +8183,7 @@ 8.130 default: 8.131 Unimplemented(); 8.132 } 8.133 - __ nop(); 8.134 + __ delayed()->nop(); 8.135 %} 8.136 8.137 ins_pc_relative(1); 8.138 @@ -8242,7 +8242,7 @@ 8.139 default: 8.140 Unimplemented(); 8.141 } 8.142 - __ nop(); 8.143 + __ delayed()->nop(); 8.144 %} 8.145 8.146 ins_pc_relative(1); 8.147 @@ -8308,7 +8308,7 @@ 8.148 default: 8.149 Unimplemented(); 8.150 } 8.151 - __ nop(); 8.152 + __ delayed()->nop(); 8.153 %} 8.154 8.155 ins_pc_relative(1); 8.156 @@ -8363,7 +8363,7 @@ 8.157 default: 8.158 Unimplemented(); 8.159 } 8.160 - __ nop(); 8.161 + __ delayed()->nop(); 8.162 %} 8.163 8.164 ins_pc_relative(1); 8.165 @@ -8432,7 +8432,7 @@ 8.166 default: 8.167 Unimplemented(); 8.168 } 8.169 - __ nop(); 8.170 + __ delayed()->nop(); 8.171 %} 8.172 8.173 ins_pc_relative(1); 8.174 @@ -8655,7 +8655,7 @@ 8.175 default: 8.176 Unimplemented(); 8.177 } 8.178 - __ nop(); 8.179 + __ delayed()->nop(); 8.180 %} 8.181 8.182 8.183 @@ -8723,7 +8723,7 @@ 8.184 default: 8.185 Unimplemented(); 8.186 } 8.187 - __ nop(); 8.188 + __ delayed()->nop(); 8.189 %} 8.190 8.191 ins_pc_relative(1); 8.192 @@ -8789,7 +8789,7 @@ 8.193 default: 8.194 Unimplemented(); 8.195 } 8.196 - __ nop(); 8.197 + __ delayed()->nop(); 8.198 %} 8.199 8.200 ins_pc_relative(1); 8.201 @@ -10277,41 +10277,41 @@ 8.202 switch(flag) { 8.203 case 0x01: //equal 8.204 __ bne(op1, op2, L); 8.205 - __ nop(); 8.206 + __ delayed()->nop(); 8.207 __ mov_s(dst, src); 8.208 __ bind(L); 8.209 break; 8.210 case 0x02: //not_equal 8.211 __ beq(op1, op2, L); 8.212 - __ nop(); 8.213 + __ delayed()->nop(); 8.214 __ mov_s(dst, src); 8.215 __ bind(L); 8.216 break; 8.217 case 0x03: //great 8.218 __ slt(AT, op2, op1); 8.219 __ beq(AT, R0, L); 8.220 - __ nop(); 8.221 + __ delayed()->nop(); 8.222 __ mov_s(dst, src); 8.223 __ bind(L); 8.224 break; 8.225 case 0x04: //great_equal 8.226 __ slt(AT, op1, op2); 8.227 __ bne(AT, R0, L); 8.228 - __ nop(); 8.229 + __ delayed()->nop(); 8.230 __ mov_s(dst, src); 8.231 __ bind(L); 8.232 break; 8.233 case 0x05: //less 8.234 __ slt(AT, op1, op2); 8.235 __ beq(AT, R0, L); 8.236 - __ nop(); 8.237 + __ delayed()->nop(); 8.238 __ mov_s(dst, src); 8.239 __ bind(L); 8.240 break; 8.241 case 0x06: //less_equal 8.242 __ slt(AT, op2, op1); 8.243 __ bne(AT, R0, L); 8.244 - __ nop(); 8.245 + __ delayed()->nop(); 8.246 __ mov_s(dst, src); 8.247 __ bind(L); 8.248 break; 8.249 @@ -10342,41 +10342,41 @@ 8.250 switch(flag) { 8.251 case 0x01: //equal 8.252 __ bne(op1, op2, L); 8.253 - __ nop(); 8.254 + __ delayed()->nop(); 8.255 __ mov_d(dst, src); 8.256 __ bind(L); 8.257 break; 8.258 case 0x02: //not_equal 8.259 __ beq(op1, op2, L); 8.260 - __ nop(); 8.261 + __ delayed()->nop(); 8.262 __ mov_d(dst, src); 8.263 __ bind(L); 8.264 break; 8.265 case 0x03: //great 8.266 __ slt(AT, op2, op1); 8.267 __ beq(AT, R0, L); 8.268 - __ nop(); 8.269 + __ delayed()->nop(); 8.270 __ mov_d(dst, src); 8.271 __ bind(L); 8.272 break; 8.273 case 0x04: //great_equal 8.274 __ slt(AT, op1, op2); 8.275 __ bne(AT, R0, L); 8.276 - __ nop(); 8.277 + __ delayed()->nop(); 8.278 __ mov_d(dst, src); 8.279 __ bind(L); 8.280 break; 8.281 case 0x05: //less 8.282 __ slt(AT, op1, op2); 8.283 __ beq(AT, R0, L); 8.284 - __ nop(); 8.285 + __ delayed()->nop(); 8.286 __ mov_d(dst, src); 8.287 __ bind(L); 8.288 break; 8.289 case 0x06: //less_equal 8.290 __ slt(AT, op2, op1); 8.291 __ bne(AT, R0, L); 8.292 - __ nop(); 8.293 + __ delayed()->nop(); 8.294 __ mov_d(dst, src); 8.295 __ bind(L); 8.296 break; 8.297 @@ -10407,41 +10407,41 @@ 8.298 switch(flag) { 8.299 case 0x01: //equal 8.300 __ bne(op1, op2, L); 8.301 - __ nop(); 8.302 + __ delayed()->nop(); 8.303 __ mov_d(dst, src); 8.304 __ bind(L); 8.305 break; 8.306 case 0x02: //not_equal 8.307 __ beq(op1, op2, L); 8.308 - __ nop(); 8.309 + __ delayed()->nop(); 8.310 __ mov_d(dst, src); 8.311 __ bind(L); 8.312 break; 8.313 case 0x03: //great 8.314 __ slt(AT, op2, op1); 8.315 __ beq(AT, R0, L); 8.316 - __ nop(); 8.317 + __ delayed()->nop(); 8.318 __ mov_d(dst, src); 8.319 __ bind(L); 8.320 break; 8.321 case 0x04: //great_equal 8.322 __ slt(AT, op1, op2); 8.323 __ bne(AT, R0, L); 8.324 - __ nop(); 8.325 + __ delayed()->nop(); 8.326 __ mov_d(dst, src); 8.327 __ bind(L); 8.328 break; 8.329 case 0x05: //less 8.330 __ slt(AT, op1, op2); 8.331 __ beq(AT, R0, L); 8.332 - __ nop(); 8.333 + __ delayed()->nop(); 8.334 __ mov_d(dst, src); 8.335 __ bind(L); 8.336 break; 8.337 case 0x06: //less_equal 8.338 __ slt(AT, op2, op1); 8.339 __ bne(AT, R0, L); 8.340 - __ nop(); 8.341 + __ delayed()->nop(); 8.342 __ mov_d(dst, src); 8.343 __ bind(L); 8.344 break; 8.345 @@ -13106,7 +13106,7 @@ 8.346 8.347 ins_encode %{ 8.348 __ jr(RA); 8.349 - __ nop(); 8.350 + __ delayed()->nop(); 8.351 %} 8.352 8.353 ins_pipe( pipe_jump ); 8.354 @@ -13151,7 +13151,7 @@ 8.355 } 8.356 8.357 __ jr(T9); 8.358 - __ nop(); 8.359 + __ delayed()->nop(); 8.360 8.361 %} 8.362 ins_pipe(pipe_jump); 8.363 @@ -13185,7 +13185,7 @@ 8.364 __ move(exception_oop, oop); 8.365 8.366 __ jr(target); 8.367 - __ nop(); 8.368 + __ delayed()->nop(); 8.369 %} 8.370 ins_pipe( pipe_jump ); 8.371 %}
9.1 --- a/src/cpu/mips/vm/nativeInst_mips.cpp Mon Jun 11 17:42:16 2018 +0800 9.2 +++ b/src/cpu/mips/vm/nativeInst_mips.cpp Tue Jun 12 13:58:17 2018 +0800 9.3 @@ -1369,7 +1369,7 @@ 9.4 __ ori(T9, T9, (offset - 8) & 0xffff); 9.5 __ daddu(T9, T9, RA); 9.6 __ jr(T9); 9.7 - __ nop(); 9.8 + __ delayed()->nop(); 9.9 } 9.10 #else 9.11 __ b(entry);
10.1 --- a/src/cpu/mips/vm/sharedRuntime_mips_64.cpp Mon Jun 11 17:42:16 2018 +0800 10.2 +++ b/src/cpu/mips/vm/sharedRuntime_mips_64.cpp Tue Jun 12 13:58:17 2018 +0800 10.3 @@ -3770,7 +3770,7 @@ 10.4 __ st_ptr(R0, thread, in_bytes(JavaThread::vm_result_offset())); 10.5 __ ld_ptr(V0, thread, in_bytes(Thread::pending_exception_offset())); 10.6 __ jmp(StubRoutines::forward_exception_entry(), relocInfo::runtime_call_type); 10.7 - __ delayed() -> nop(); 10.8 + __ delayed()->nop(); 10.9 // ------------- 10.10 // make sure all code is generated 10.11 masm->flush();
11.1 --- a/src/cpu/mips/vm/stubGenerator_mips_64.cpp Mon Jun 11 17:42:16 2018 +0800 11.2 +++ b/src/cpu/mips/vm/stubGenerator_mips_64.cpp Tue Jun 12 13:58:17 2018 +0800 11.3 @@ -705,7 +705,7 @@ 11.4 __ daddiu(count, count, -1); 11.5 __ slt(AT, count, R0); 11.6 __ beq(AT, R0, L_loop); 11.7 - __ nop(); 11.8 + __ delayed()->nop(); 11.9 } 11.10 break; 11.11 default: 11.12 @@ -1236,7 +1236,7 @@ 11.13 __ daddi(tmp3, tmp3, -16); 11.14 __ daddi(AT, tmp3, -16); 11.15 __ bgez(AT, l_8); 11.16 - __ sd(tmp6, tmp2, -8); 11.17 + __ delayed()->sd(tmp6, tmp2, -8); 11.18 } 11.19 __ bind(l_6); 11.20 11.21 @@ -1259,7 +1259,7 @@ 11.22 __ daddi(tmp3, tmp3, -8); 11.23 __ daddi(AT, tmp3, -8); 11.24 __ bgez(AT, l_3); 11.25 - __ sw(tmp6, tmp2, -4); 11.26 + __ delayed()->sw(tmp6, tmp2, -4); 11.27 } 11.28 11.29 __ bind(l_1); 11.30 @@ -1282,7 +1282,7 @@ 11.31 __ daddi(tmp3, tmp3, -4); 11.32 __ daddi(AT, tmp3, -4); 11.33 __ bgez(AT, l_5); 11.34 - __ sh(tmp6, tmp2, -2); 11.35 + __ delayed()->sh(tmp6, tmp2, -2); 11.36 } 11.37 // single element 11.38 __ bind(l_4);
12.1 --- a/src/cpu/mips/vm/templateInterpreter_mips_64.cpp Mon Jun 11 17:42:16 2018 +0800 12.2 +++ b/src/cpu/mips/vm/templateInterpreter_mips_64.cpp Tue Jun 12 13:58:17 2018 +0800 12.3 @@ -818,7 +818,7 @@ 12.4 __ ld(V0, SP, 0); 12.5 12.6 __ beq(V0, R0, slow_path); 12.7 - __ nop(); 12.8 + __ delayed()->nop(); 12.9 12.10 // Generate the G1 pre-barrier code to log the value of 12.11 // the referent field in an SATB buffer.
13.1 --- a/src/cpu/mips/vm/templateTable_mips_64.cpp Mon Jun 11 17:42:16 2018 +0800 13.2 +++ b/src/cpu/mips/vm/templateTable_mips_64.cpp Tue Jun 12 13:58:17 2018 +0800 13.3 @@ -1243,7 +1243,7 @@ 13.4 Label L_skip; 13.5 __ andr(AT, T9, AT); 13.6 __ beq(AT, R0, L_skip); 13.7 - __ nop(); 13.8 + __ delayed()->nop(); 13.9 __ andi(FSR, FSR, 0x1); 13.10 __ bind(L_skip); 13.11 13.12 @@ -2009,7 +2009,7 @@ 13.13 Label has_counters; 13.14 __ ld(AT, T3, in_bytes(Method::method_counters_offset())); // use AT as MDO, TEMP 13.15 __ bne(AT, R0, has_counters); 13.16 - __ nop(); 13.17 + __ delayed()->nop(); 13.18 __ push(T3); 13.19 //__ push(A7); 13.20 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::build_method_counters), 13.21 @@ -2018,7 +2018,7 @@ 13.22 __ pop(T3); 13.23 __ ld(AT, T3, in_bytes(Method::method_counters_offset())); // use AT as MDO, TEMP 13.24 __ beq(AT, R0, dispatch); 13.25 - __ nop(); 13.26 + __ delayed()->nop(); 13.27 __ bind(has_counters); 13.28 13.29 // increment back edge counter 13.30 @@ -2843,7 +2843,7 @@ 13.31 13.32 Label notVolatile; 13.33 __ beq(scratch, R0, notVolatile); 13.34 - __ nop(); 13.35 + __ delayed()->nop(); 13.36 volatile_barrier(); 13.37 __ bind(notVolatile); 13.38 } 13.39 @@ -3136,7 +3136,7 @@ 13.40 13.41 Label notVolatile; 13.42 __ beq(scratch, R0, notVolatile); 13.43 - __ nop(); 13.44 + __ delayed()->nop(); 13.45 volatile_barrier(); 13.46 __ bind(notVolatile); 13.47 } 13.48 @@ -3327,7 +3327,7 @@ 13.49 { 13.50 Label notVolatile; 13.51 __ beq(scratch, R0, notVolatile); 13.52 - __ nop(); 13.53 + __ delayed()->nop(); 13.54 volatile_barrier(); 13.55 __ bind(notVolatile); 13.56 } 13.57 @@ -3432,7 +3432,7 @@ 13.58 13.59 Label notVolatile; 13.60 __ beq(scratch, R0, notVolatile); 13.61 - __ nop(); 13.62 + __ delayed()->nop(); 13.63 volatile_barrier(); 13.64 __ bind(notVolatile); 13.65 } 13.66 @@ -3479,7 +3479,7 @@ 13.67 { 13.68 Label notVolatile; 13.69 __ beq(scratch, R0, notVolatile); 13.70 - __ nop(); 13.71 + __ delayed()->nop(); 13.72 volatile_barrier(); 13.73 __ bind(notVolatile); 13.74 } 13.75 @@ -3529,7 +3529,7 @@ 13.76 13.77 Label notVolatile; 13.78 __ beq(scratch, R0, notVolatile); 13.79 - __ nop(); 13.80 + __ delayed()->nop(); 13.81 volatile_barrier(); 13.82 __ bind(notVolatile); 13.83 } 13.84 @@ -3575,7 +3575,7 @@ 13.85 { 13.86 Label notVolatile; 13.87 __ beq(scratch, R0, notVolatile); 13.88 - __ nop(); 13.89 + __ delayed()->nop(); 13.90 volatile_barrier(); 13.91 __ bind(notVolatile); 13.92 } 13.93 @@ -3607,7 +3607,7 @@ 13.94 13.95 Label notVolatile; 13.96 __ beq(scratch, R0, notVolatile); 13.97 - __ nop(); 13.98 + __ delayed()->nop(); 13.99 volatile_barrier(); 13.100 __ bind(notVolatile); 13.101 } 13.102 @@ -3633,7 +3633,7 @@ 13.103 { 13.104 Label notVolatile; 13.105 __ beq(scratch, R0, notVolatile); 13.106 - __ nop(); 13.107 + __ delayed()->nop(); 13.108 volatile_barrier(); 13.109 __ bind(notVolatile); 13.110 } 13.111 @@ -4374,7 +4374,7 @@ 13.112 // Collect counts on whether this test sees NULLs a lot or not. 13.113 if (ProfileInterpreter) { 13.114 __ beq(R0, R0, done); 13.115 - __ nop(); 13.116 + __ delayed()->nop(); 13.117 __ bind(is_null); 13.118 __ profile_null_seen(T3); 13.119 } else {