< prev index next >

src/hotspot/cpu/x86/interp_masm_x86.cpp

Print this page
rev 47571 : Add Thread Local handshakes and thread local polling
rev 47576 : [mq]: Interpreter-Poll-7

@@ -808,11 +808,12 @@
   dispatch_next(state, step);
 }
 
 void InterpreterMacroAssembler::dispatch_base(TosState state,
                                               address* table,
-                                              bool verifyoop) {
+                                              bool verifyoop,
+                                              bool generate_poll) {
   verify_FPU(1, state);
   if (VerifyActivationFrameSize) {
     Label L;
     mov(rcx, rbp);
     subptr(rcx, rsp);

@@ -829,11 +830,11 @@
   }
 #ifdef _LP64
 
   Label no_safepoint, dispatch;
   address* const safepoint_table = Interpreter::safept_table(state);
-  if (SafepointMechanism::uses_thread_local_poll() && table != safepoint_table) {
+  if (SafepointMechanism::uses_thread_local_poll() && table != safepoint_table && generate_poll) {
     NOT_PRODUCT(block_comment("Thread-local Safepoint poll"));
 
     testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit());
 
     jccb(Assembler::zero, no_safepoint);

@@ -852,12 +853,12 @@
   ArrayAddress dispatch(tbl, index);
   jump(dispatch);
 #endif // _LP64
 }
 
-void InterpreterMacroAssembler::dispatch_only(TosState state) {
-  dispatch_base(state, Interpreter::dispatch_table(state));
+void InterpreterMacroAssembler::dispatch_only(TosState state, bool generate_poll) {
+  dispatch_base(state, Interpreter::dispatch_table(state), true, generate_poll);
 }
 
 void InterpreterMacroAssembler::dispatch_only_normal(TosState state) {
   dispatch_base(state, Interpreter::normal_table(state));
 }

@@ -865,16 +866,16 @@
 void InterpreterMacroAssembler::dispatch_only_noverify(TosState state) {
   dispatch_base(state, Interpreter::normal_table(state), false);
 }
 
 
-void InterpreterMacroAssembler::dispatch_next(TosState state, int step) {
+void InterpreterMacroAssembler::dispatch_next(TosState state, int step, bool generate_poll) {
   // load next bytecode (load before advancing _bcp_register to prevent AGI)
   load_unsigned_byte(rbx, Address(_bcp_register, step));
   // advance _bcp_register
   increment(_bcp_register, step);
-  dispatch_base(state, Interpreter::dispatch_table(state));
+  dispatch_base(state, Interpreter::dispatch_table(state), true, generate_poll);
 }
 
 void InterpreterMacroAssembler::dispatch_via(TosState state, address* table) {
   // load current bytecode
   load_unsigned_byte(rbx, Address(_bcp_register, 0));
< prev index next >