src/cpu/x86/vm/templateInterpreterGenerator_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Sdiff src/cpu/x86/vm

src/cpu/x86/vm/templateInterpreterGenerator_x86.cpp

Print this page




 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


src/cpu/x86/vm/templateInterpreterGenerator_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File