src/cpu/sparc/vm/templateInterpreter_sparc.cpp

Print this page




1870     // the callee's non-argument locals. Undo that adjustment.
1871     __ ret();
1872     __ delayed()->restore(I5_savedSP, G0, SP);
1873 
1874     __ bind(caller_not_deoptimized);
1875   }
1876 
1877   // Clear the popframe condition flag
1878   __ stw(G0 /* popframe_inactive */, popframe_condition_addr);
1879 
1880   // Get out of the current method (how this is done depends on the particular compiler calling
1881   // convention that the interpreter currently follows)
1882   // The caller's SP was adjusted upon method entry to accomodate
1883   // the callee's non-argument locals. Undo that adjustment.
1884   __ restore(I5_savedSP, G0, SP);
1885   // The method data pointer was incremented already during
1886   // call profiling. We have to restore the mdp for the current bcp.
1887   if (ProfileInterpreter) {
1888     __ set_method_data_pointer_for_bcp();
1889   }





















1890   // Resume bytecode interpretation at the current bcp
1891   __ dispatch_next(vtos);
1892   // end of JVMTI PopFrame support
1893 
1894   Interpreter::_remove_activation_entry = __ pc();
1895 
1896   // preserve exception over this code sequence (remove activation calls the vm, but oopmaps are not correct here)
1897   __ pop_ptr(Oexception);                                  // get exception
1898 
1899   // Intel has the following comment:
1900   //// remove the activation (without doing throws on illegalMonitorExceptions)
1901   // They remove the activation without checking for bad monitor state.
1902   // %%% We should make sure this is the right semantics before implementing.
1903 
1904   __ set_vm_result(Oexception);
1905   __ unlock_if_synchronized_method(vtos, /* throw_monitor_exception */ false);
1906 
1907   __ notify_method_exit(false, vtos, InterpreterMacroAssembler::SkipNotifyJVMTI);
1908 
1909   __ get_vm_result(Oexception);




1870     // the callee's non-argument locals. Undo that adjustment.
1871     __ ret();
1872     __ delayed()->restore(I5_savedSP, G0, SP);
1873 
1874     __ bind(caller_not_deoptimized);
1875   }
1876 
1877   // Clear the popframe condition flag
1878   __ stw(G0 /* popframe_inactive */, popframe_condition_addr);
1879 
1880   // Get out of the current method (how this is done depends on the particular compiler calling
1881   // convention that the interpreter currently follows)
1882   // The caller's SP was adjusted upon method entry to accomodate
1883   // the callee's non-argument locals. Undo that adjustment.
1884   __ restore(I5_savedSP, G0, SP);
1885   // The method data pointer was incremented already during
1886   // call profiling. We have to restore the mdp for the current bcp.
1887   if (ProfileInterpreter) {
1888     __ set_method_data_pointer_for_bcp();
1889   }
1890 
1891 #if INCLUDE_JVMTI
1892   if (EnableInvokeDynamic) {
1893     Label L_done;
1894 
1895     __ ldub(Address(Lbcp, 0), G1_scratch);  // Load current bytecode
1896     __ cmp_and_br_short(G1_scratch, Bytecodes::_invokestatic, Assembler::notEqual, Assembler::pn, L_done);
1897 
1898     // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
1899     // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
1900 
1901     __ call_VM(G1_scratch, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), I0, Lmethod, Lbcp);
1902 
1903     __ br_null(G1_scratch, false, Assembler::pn, L_done);
1904     __ delayed()->nop();
1905 
1906     __ st_ptr(G1_scratch, Lesp, wordSize);
1907     __ bind(L_done);
1908   }
1909 #endif // INCLUDE_JVMTI
1910 
1911   // Resume bytecode interpretation at the current bcp
1912   __ dispatch_next(vtos);
1913   // end of JVMTI PopFrame support
1914 
1915   Interpreter::_remove_activation_entry = __ pc();
1916 
1917   // preserve exception over this code sequence (remove activation calls the vm, but oopmaps are not correct here)
1918   __ pop_ptr(Oexception);                                  // get exception
1919 
1920   // Intel has the following comment:
1921   //// remove the activation (without doing throws on illegalMonitorExceptions)
1922   // They remove the activation without checking for bad monitor state.
1923   // %%% We should make sure this is the right semantics before implementing.
1924 
1925   __ set_vm_result(Oexception);
1926   __ unlock_if_synchronized_method(vtos, /* throw_monitor_exception */ false);
1927 
1928   __ notify_method_exit(false, vtos, InterpreterMacroAssembler::SkipNotifyJVMTI);
1929 
1930   __ get_vm_result(Oexception);