src/cpu/sparc/vm/cppInterpreter_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7063628 Cdiff src/cpu/sparc/vm/cppInterpreter_sparc.cpp

src/cpu/sparc/vm/cppInterpreter_sparc.cpp

Print this page

        

*** 542,552 **** __ retl(); // return from leaf routine __ delayed()->mov(O5_savedSP, SP); // Generate regular method entry __ bind(slow_path); ! __ ba(false, fast_accessor_slow_entry_path); __ delayed()->nop(); return entry; } return NULL; } --- 542,552 ---- __ retl(); // return from leaf routine __ delayed()->mov(O5_savedSP, SP); // Generate regular method entry __ bind(slow_path); ! __ ba(fast_accessor_slow_entry_path); __ delayed()->nop(); return entry; } return NULL; }
*** 717,728 **** __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), G5_method, false); __ ld_ptr(STATE(_method), G5_method); Address exception_addr(G2_thread, 0, in_bytes(Thread::pending_exception_offset())); __ ld_ptr(exception_addr, G3_scratch); ! __ br_notnull(G3_scratch, false, Assembler::pn, pending_exception_present); ! __ delayed()->nop(); __ ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc::signature_handler_offset())), G3_scratch); __ bind(L); } // Push a new frame so that the args will really be stored in --- 717,727 ---- __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), G5_method, false); __ ld_ptr(STATE(_method), G5_method); Address exception_addr(G2_thread, 0, in_bytes(Thread::pending_exception_offset())); __ ld_ptr(exception_addr, G3_scratch); ! __ br_notnull_short(G3_scratch, Assembler::pn, pending_exception_present); __ ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc::signature_handler_offset())), G3_scratch); __ bind(L); } // Push a new frame so that the args will really be stored in
*** 1290,1315 **** // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_atos = __ pc(); // O0/O1 live ! __ ba(false, return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_OBJECT), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_btos = __ pc(); // O0/O1 live ! __ ba(false, return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_BOOLEAN), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_itos = __ pc(); // O0/O1 live ! __ ba(false, return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_INT), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_ltos = __ pc(); --- 1289,1314 ---- // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_atos = __ pc(); // O0/O1 live ! __ ba(return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_OBJECT), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_btos = __ pc(); // O0/O1 live ! __ ba(return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_BOOLEAN), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_itos = __ pc(); // O0/O1 live ! __ ba(return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_INT), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_ltos = __ pc();
*** 1325,1349 **** __ srl (G1, 0,O1); __ srlx(G1,32,O0); #endif /* !_LP64 && COMPILER2 */ // O0/O1 live ! __ ba(false, return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_LONG), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_ftos = __ pc(); // O0/O1 live ! __ ba(false, return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_FLOAT), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_dtos = __ pc(); // O0/O1 live ! __ ba(false, return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_DOUBLE), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_vtos = __ pc(); --- 1324,1348 ---- __ srl (G1, 0,O1); __ srlx(G1,32,O0); #endif /* !_LP64 && COMPILER2 */ // O0/O1 live ! __ ba(return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_LONG), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_ftos = __ pc(); // O0/O1 live ! __ ba(return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_FLOAT), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_dtos = __ pc(); // O0/O1 live ! __ ba(return_from_deopt_common); __ delayed()->set(AbstractInterpreter::BasicType_as_index(T_DOUBLE), L3_scratch); // Result stub address array index // deopt needs to jump to here to enter the interpreter (return a result) deopt_frame_manager_return_vtos = __ pc();
*** 1396,1406 **** __ st_ptr(L2_scratch, STATE(_stack_limit)); __ ld_ptr(STATE(_stack), L1_scratch); // Get current stack top __ sub(L1_scratch, entry_size, L1_scratch); __ st_ptr(L1_scratch, STATE(_stack)); ! __ ba(false, entry); __ delayed()->add(L1_scratch, wordSize, L1_scratch); // first real entry (undo prepush) // 2. move expression stack __ bind(loop); --- 1395,1405 ---- __ st_ptr(L2_scratch, STATE(_stack_limit)); __ ld_ptr(STATE(_stack), L1_scratch); // Get current stack top __ sub(L1_scratch, entry_size, L1_scratch); __ st_ptr(L1_scratch, STATE(_stack)); ! __ ba(entry); __ delayed()->add(L1_scratch, wordSize, L1_scratch); // first real entry (undo prepush) // 2. move expression stack __ bind(loop);
*** 1649,1667 **** // new monitor slot allocated, resume the interpreter. __ set((int)BytecodeInterpreter::got_monitors, L1_scratch); VALIDATE_STATE(G3_scratch, 5); ! __ ba(false, call_interpreter); __ delayed()->st(L1_scratch, STATE(_msg)); // uncommon trap needs to jump to here to enter the interpreter (re-execute current bytecode) unctrap_frame_manager_entry = __ pc(); // QQQ what message do we send ! __ ba(false, call_interpreter); __ delayed()->ld_ptr(STATE(_frame_bottom), SP); // restore to full stack frame //============================================================================= // Returning from a compiled method into a deopted method. The bytecode at the // bcp has completed. The result of the bytecode is in the native abi (the tosca --- 1648,1666 ---- // new monitor slot allocated, resume the interpreter. __ set((int)BytecodeInterpreter::got_monitors, L1_scratch); VALIDATE_STATE(G3_scratch, 5); ! __ ba(call_interpreter); __ delayed()->st(L1_scratch, STATE(_msg)); // uncommon trap needs to jump to here to enter the interpreter (re-execute current bytecode) unctrap_frame_manager_entry = __ pc(); // QQQ what message do we send ! __ ba(call_interpreter); __ delayed()->ld_ptr(STATE(_frame_bottom), SP); // restore to full stack frame //============================================================================= // Returning from a compiled method into a deopted method. The bytecode at the // bcp has completed. The result of the bytecode is in the native abi (the tosca
*** 1673,1683 **** generate_deopt_handling(); // ready to resume the interpreter __ set((int)BytecodeInterpreter::deopt_resume, L1_scratch); ! __ ba(false, call_interpreter); __ delayed()->st(L1_scratch, STATE(_msg)); // Current frame has caught an exception we need to dispatch to the // handler. We can get here because a native interpreter frame caught // an exception in which case there is no handler and we must rethrow --- 1672,1682 ---- generate_deopt_handling(); // ready to resume the interpreter __ set((int)BytecodeInterpreter::deopt_resume, L1_scratch); ! __ ba(call_interpreter); __ delayed()->st(L1_scratch, STATE(_msg)); // Current frame has caught an exception we need to dispatch to the // handler. We can get here because a native interpreter frame caught // an exception in which case there is no handler and we must rethrow
*** 1761,1781 **** __ jmpl(Lscratch, G0, O7); // and convert it __ delayed()->nop(); // L1_scratch points to top of stack (prepushed) ! __ ba(false, resume_interpreter); __ delayed()->mov(L1_scratch, O1); // An exception is being caught on return to a vanilla interpreter frame. // Empty the stack and resume interpreter __ bind(return_with_exception); __ ld_ptr(STATE(_frame_bottom), SP); // restore to full stack frame __ ld_ptr(STATE(_stack_base), O1); // empty java expression stack ! __ ba(false, resume_interpreter); __ delayed()->sub(O1, wordSize, O1); // account for prepush // Return from interpreted method we return result appropriate to the caller (i.e. "recursive" // interpreter call, or native) and unwind this interpreter activation. // All monitors should be unlocked. --- 1760,1780 ---- __ jmpl(Lscratch, G0, O7); // and convert it __ delayed()->nop(); // L1_scratch points to top of stack (prepushed) ! __ ba(resume_interpreter); __ delayed()->mov(L1_scratch, O1); // An exception is being caught on return to a vanilla interpreter frame. // Empty the stack and resume interpreter __ bind(return_with_exception); __ ld_ptr(STATE(_frame_bottom), SP); // restore to full stack frame __ ld_ptr(STATE(_stack_base), O1); // empty java expression stack ! __ ba(resume_interpreter); __ delayed()->sub(O1, wordSize, O1); // account for prepush // Return from interpreted method we return result appropriate to the caller (i.e. "recursive" // interpreter call, or native) and unwind this interpreter activation. // All monitors should be unlocked.
*** 1850,1860 **** // A frame we have already used before so no need to bang stack so use call_interpreter_2 entry __ set((int)BytecodeInterpreter::method_resume, L1_scratch); __ st(L1_scratch, STATE(_msg)); ! __ ba(false, call_interpreter_2); __ delayed()->st_ptr(O1, STATE(_stack)); // Fast accessor methods share this entry point. // This works because frame manager is in the same codelet --- 1849,1859 ---- // A frame we have already used before so no need to bang stack so use call_interpreter_2 entry __ set((int)BytecodeInterpreter::method_resume, L1_scratch); __ st(L1_scratch, STATE(_msg)); ! __ ba(call_interpreter_2); __ delayed()->st_ptr(O1, STATE(_stack)); // Fast accessor methods share this entry point. // This works because frame manager is in the same codelet
*** 1865,1875 **** __ bind(fast_accessor_slow_entry_path); __ set((intptr_t)return_from_native_method - 8, Gtmp1); __ cmp(Gtmp1, O7); // returning to interpreter? __ brx(Assembler::equal, true, Assembler::pt, re_dispatch); // yep __ delayed()->nop(); ! __ ba(false, re_dispatch); __ delayed()->mov(G0, prevState); // initial entry } // interpreter returning to native code (call_stub/c1/c2) --- 1864,1874 ---- __ bind(fast_accessor_slow_entry_path); __ set((intptr_t)return_from_native_method - 8, Gtmp1); __ cmp(Gtmp1, O7); // returning to interpreter? __ brx(Assembler::equal, true, Assembler::pt, re_dispatch); // yep __ delayed()->nop(); ! __ ba(re_dispatch); __ delayed()->mov(G0, prevState); // initial entry } // interpreter returning to native code (call_stub/c1/c2)
*** 2030,2040 **** __ tst(L1_scratch); __ brx(Assembler::zero, false, Assembler::pt, unwind_and_forward); __ delayed()->nop(); __ ld_ptr(STATE(_locals), O1); // get result of popping callee's args ! __ ba(false, unwind_recursive_activation); __ delayed()->nop(); interpreter_frame_manager = entry_point; return entry_point; } --- 2029,2039 ---- __ tst(L1_scratch); __ brx(Assembler::zero, false, Assembler::pt, unwind_and_forward); __ delayed()->nop(); __ ld_ptr(STATE(_locals), O1); // get result of popping callee's args ! __ ba(unwind_recursive_activation); __ delayed()->nop(); interpreter_frame_manager = entry_point; return entry_point; }
src/cpu/sparc/vm/cppInterpreter_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File