168 verify_mt_safe(callee, entry, method_holder, jump);
169 #endif
170
171 // Update stub.
172 method_holder->set_data((intptr_t)callee());
173 NativeGeneralJump::insert_unconditional(method_holder->next_instruction_address(), entry);
174 ICache::invalidate_range(stub, to_interp_stub_size());
175 // Update jump to call.
176 set_destination_mt_safe(stub);
177 }
178
179 void CompiledDirectStaticCall::set_stub_to_clean(static_stub_Relocation* static_stub) {
180 // Reset stub.
181 address stub = static_stub->addr();
182 assert(stub != NULL, "stub not found");
183 assert(CompiledICLocker::is_safe(stub), "mt unsafe call");
184 // Creation also verifies the object.
185 NativeMovConstReg* method_holder
186 = nativeMovConstReg_at(stub + NativeInstruction::instruction_size);
187 method_holder->set_data(0);
188 }
189
190 //-----------------------------------------------------------------------------
191 // Non-product mode code
192 #ifndef PRODUCT
193
194 void CompiledDirectStaticCall::verify() {
195 // Verify call.
196 _call->verify();
197 _call->verify_alignment();
198
199 // Verify stub.
200 address stub = find_stub(false /* is_aot */);
201 assert(stub != NULL, "no stub found for static call");
202 // Creation also verifies the object.
203 NativeMovConstReg* method_holder
204 = nativeMovConstReg_at(stub + NativeInstruction::instruction_size);
205 NativeJump* jump = nativeJump_at(method_holder->next_instruction_address());
206
207 // Verify state.
|
168 verify_mt_safe(callee, entry, method_holder, jump);
169 #endif
170
171 // Update stub.
172 method_holder->set_data((intptr_t)callee());
173 NativeGeneralJump::insert_unconditional(method_holder->next_instruction_address(), entry);
174 ICache::invalidate_range(stub, to_interp_stub_size());
175 // Update jump to call.
176 set_destination_mt_safe(stub);
177 }
178
179 void CompiledDirectStaticCall::set_stub_to_clean(static_stub_Relocation* static_stub) {
180 // Reset stub.
181 address stub = static_stub->addr();
182 assert(stub != NULL, "stub not found");
183 assert(CompiledICLocker::is_safe(stub), "mt unsafe call");
184 // Creation also verifies the object.
185 NativeMovConstReg* method_holder
186 = nativeMovConstReg_at(stub + NativeInstruction::instruction_size);
187 method_holder->set_data(0);
188 if (!static_stub->is_aot()) {
189 NativeJump* jump = nativeJump_at(method_holder->next_instruction_address());
190 jump->set_jump_destination((address)-1);
191 }
192 }
193
194 //-----------------------------------------------------------------------------
195 // Non-product mode code
196 #ifndef PRODUCT
197
198 void CompiledDirectStaticCall::verify() {
199 // Verify call.
200 _call->verify();
201 _call->verify_alignment();
202
203 // Verify stub.
204 address stub = find_stub(false /* is_aot */);
205 assert(stub != NULL, "no stub found for static call");
206 // Creation also verifies the object.
207 NativeMovConstReg* method_holder
208 = nativeMovConstReg_at(stub + NativeInstruction::instruction_size);
209 NativeJump* jump = nativeJump_at(method_holder->next_instruction_address());
210
211 // Verify state.
|