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