< 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 >