< prev index next >

src/hotspot/cpu/sparc/templateTable_sparc.cpp

Print this page
rev 47594 : imported patch Interpreter-Poll-7
rev 47595 : imported patch Interpreter-Poll-Wide_Ret-8
rev 47597 : imported patch Interpreter-Poll-Switch-10
rev 47598 : imported patch Interpreter-Poll-Ret-11

@@ -1894,10 +1894,22 @@
 
 void TemplateTable::_return(TosState state) {
   transition(state, state);
   assert(_desc->calls_vm(), "inconsistent calls_vm information");
 
+  if (SafepointMechanism::uses_thread_local_poll()) {
+    Label no_safepoint;
+    __ ldx(Address(G2_thread, Thread::polling_page_offset()), G3_scratch, 0);
+    __ btst(SafepointMechanism::poll_bit(), G3_scratch);
+    __ br(Assembler::zero, false, Assembler::pt, no_safepoint);
+    __ delayed()->nop();
+    __ push(state); //?
+    __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint));
+    __ pop(state); //?
+    __ bind(no_safepoint);
+  }
+
   if (_desc->bytecode() == Bytecodes::_return_register_finalizer) {
     assert(state == vtos, "only valid state");
     __ mov(G0, G3_scratch);
     __ access_local_ptr(G3_scratch, Otos_i);
     __ load_klass(Otos_i, O2);
< prev index next >