1850 __ str(R1, Address(SP, RegisterSaver::Rmethod_offset * wordSize));
1851
1852 // Place target address (VM call result) into Rtemp
1853 __ str(R0, Address(SP, RegisterSaver::Rtemp_offset * wordSize));
1854
1855 RegisterSaver::restore_live_registers(masm);
1856 __ jump(Rtemp);
1857
1858 __ bind(pending_exception);
1859
1860 RegisterSaver::restore_live_registers(masm);
1861 const Register Rzero = __ zero_register(Rtemp);
1862 __ str(Rzero, Address(Rthread, JavaThread::vm_result_2_offset()));
1863 __ mov(Rexception_pc, LR);
1864 __ jump(StubRoutines::forward_exception_entry(), relocInfo::runtime_call_type, Rtemp);
1865
1866 __ flush();
1867
1868 return RuntimeStub::new_runtime_stub(name, &buffer, frame_complete, frame_size_words, oop_maps, true);
1869 }
1870
1871 #ifdef COMPILER2
1872 RuntimeStub* SharedRuntime::make_native_invoker(address call_target,
1873 int shadow_space_bytes,
1874 const GrowableArray<VMReg>& input_registers,
1875 const GrowableArray<VMReg>& output_registers) {
1876 Unimplemented();
1877 return nullptr;
1878 }
1879 #endif
|
1850 __ str(R1, Address(SP, RegisterSaver::Rmethod_offset * wordSize));
1851
1852 // Place target address (VM call result) into Rtemp
1853 __ str(R0, Address(SP, RegisterSaver::Rtemp_offset * wordSize));
1854
1855 RegisterSaver::restore_live_registers(masm);
1856 __ jump(Rtemp);
1857
1858 __ bind(pending_exception);
1859
1860 RegisterSaver::restore_live_registers(masm);
1861 const Register Rzero = __ zero_register(Rtemp);
1862 __ str(Rzero, Address(Rthread, JavaThread::vm_result_2_offset()));
1863 __ mov(Rexception_pc, LR);
1864 __ jump(StubRoutines::forward_exception_entry(), relocInfo::runtime_call_type, Rtemp);
1865
1866 __ flush();
1867
1868 return RuntimeStub::new_runtime_stub(name, &buffer, frame_complete, frame_size_words, oop_maps, true);
1869 }
|