239 address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state, int step) {
240 address entry = __ pc();
241
242 #ifndef _LP64
243 if (state == ftos) {
244 __ MacroAssembler::verify_FPU(UseSSE >= 1 ? 0 : 1, "generate_deopt_entry_for in interpreter");
245 } else if (state == dtos) {
246 __ MacroAssembler::verify_FPU(UseSSE >= 2 ? 0 : 1, "generate_deopt_entry_for in interpreter");
247 }
248 #endif // _LP64
249
250 // NULL last_sp until next java call
251 __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
252 __ restore_bcp();
253 __ restore_locals();
254 const Register thread = NOT_LP64(rcx) LP64_ONLY(r15_thread);
255 NOT_LP64(__ get_thread(thread));
256 #if INCLUDE_JVMCI
257 // Check if we need to take lock at entry of synchronized method. This can
258 // only occur on method entry so emit it only for vtos with step 0.
259 if (UseJVMCICompiler && state == vtos && step == 0) {
260 Label L;
261 __ cmpb(Address(thread, JavaThread::pending_monitorenter_offset()), 0);
262 __ jcc(Assembler::zero, L);
263 // Clear flag.
264 __ movb(Address(thread, JavaThread::pending_monitorenter_offset()), 0);
265 // Satisfy calling convention for lock_method().
266 __ get_method(rbx);
267 // Take lock.
268 lock_method();
269 __ bind(L);
270 } else {
271 #ifdef ASSERT
272 if (UseJVMCICompiler) {
273 Label L;
274 __ cmpb(Address(r15_thread, JavaThread::pending_monitorenter_offset()), 0);
275 __ jccb(Assembler::zero, L);
276 __ stop("unexpected pending monitor in deopt entry");
277 __ bind(L);
278 }
279 #endif
|
239 address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state, int step) {
240 address entry = __ pc();
241
242 #ifndef _LP64
243 if (state == ftos) {
244 __ MacroAssembler::verify_FPU(UseSSE >= 1 ? 0 : 1, "generate_deopt_entry_for in interpreter");
245 } else if (state == dtos) {
246 __ MacroAssembler::verify_FPU(UseSSE >= 2 ? 0 : 1, "generate_deopt_entry_for in interpreter");
247 }
248 #endif // _LP64
249
250 // NULL last_sp until next java call
251 __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
252 __ restore_bcp();
253 __ restore_locals();
254 const Register thread = NOT_LP64(rcx) LP64_ONLY(r15_thread);
255 NOT_LP64(__ get_thread(thread));
256 #if INCLUDE_JVMCI
257 // Check if we need to take lock at entry of synchronized method. This can
258 // only occur on method entry so emit it only for vtos with step 0.
259 if ((UseJVMCICompiler || UseAOT) && state == vtos && step == 0) {
260 Label L;
261 __ cmpb(Address(thread, JavaThread::pending_monitorenter_offset()), 0);
262 __ jcc(Assembler::zero, L);
263 // Clear flag.
264 __ movb(Address(thread, JavaThread::pending_monitorenter_offset()), 0);
265 // Satisfy calling convention for lock_method().
266 __ get_method(rbx);
267 // Take lock.
268 lock_method();
269 __ bind(L);
270 } else {
271 #ifdef ASSERT
272 if (UseJVMCICompiler) {
273 Label L;
274 __ cmpb(Address(r15_thread, JavaThread::pending_monitorenter_offset()), 0);
275 __ jccb(Assembler::zero, L);
276 __ stop("unexpected pending monitor in deopt entry");
277 __ bind(L);
278 }
279 #endif
|