From a71053ae15d0cd3eb8f363fb63cc3cd9cad590c1 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Mon, 14 Jul 2014 13:24:10 +0400 Subject: [PATCH] Asmjit updated --- asmjit | 2 +- asmjitsrc/asmjit.vcxproj | 34 +++++++++++++++++--- asmjitsrc/asmjit.vcxproj.filters | 46 +++++++++++++++++++++------- rpcs3/Emu/Cell/SPURecompiler.h | 28 ++++++++--------- rpcs3/Emu/Cell/SPURecompilerCore.cpp | 22 ++++++------- rpcs3/Emu/Cell/SPUThread.h | 2 +- rpcs3/Emu/SysCalls/lv2/sys_timer.cpp | 10 +++--- 7 files changed, 96 insertions(+), 48 deletions(-) diff --git a/asmjit b/asmjit index a66efd5460..3363e4138b 160000 --- a/asmjit +++ b/asmjit @@ -1 +1 @@ -Subproject commit a66efd54609aab7dd98e34c069937f34aa7c8f95 +Subproject commit 3363e4138b003be36dfb63cf8c63cf360f04276f diff --git a/asmjitsrc/asmjit.vcxproj b/asmjitsrc/asmjit.vcxproj index 04f30a8e35..92a1201431 100644 --- a/asmjitsrc/asmjit.vcxproj +++ b/asmjitsrc/asmjit.vcxproj @@ -23,31 +23,55 @@ + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + {AC40FF01-426E-4838-A317-66354CEFAE88} diff --git a/asmjitsrc/asmjit.vcxproj.filters b/asmjitsrc/asmjit.vcxproj.filters index b82be7b1a7..705a68121c 100644 --- a/asmjitsrc/asmjit.vcxproj.filters +++ b/asmjitsrc/asmjit.vcxproj.filters @@ -1,34 +1,58 @@  - - - - - - + + + - + - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rpcs3/Emu/Cell/SPURecompiler.h b/rpcs3/Emu/Cell/SPURecompiler.h index 7e4501feec..7b019ac5ca 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.h +++ b/rpcs3/Emu/Cell/SPURecompiler.h @@ -148,7 +148,7 @@ public: if (#a1[0] == 'r') XmmInvalidate(a1); \ if (#a2[0] == 'r') XmmInvalidate(a2); \ if (#a3[0] == 'r') XmmInvalidate(a3); \ - X86X64CallNode* call##a0 = c.call(imm_ptr(reinterpret_cast(&opwr_##a0::opcode)), kFuncConvHost, FuncBuilder4()); \ + X86CallNode* call##a0 = c.call(imm_ptr(reinterpret_cast(&opwr_##a0::opcode)), kFuncConvHost, FuncBuilder4()); \ call##a0->setArg(0, imm_u(a0)); \ call##a0->setArg(1, imm_u(a1)); \ call##a0->setArg(2, imm_u(a2)); \ @@ -163,24 +163,24 @@ private: SPURecompilerCore& rec; public: - Compiler* compiler; + X86Compiler* compiler; bool do_finalize; // input: - GpVar* cpu_var; - GpVar* ls_var; - GpVar* imm_var; - GpVar* g_imm_var; + X86GpVar* cpu_var; + X86GpVar* ls_var; + X86GpVar* imm_var; + X86GpVar* g_imm_var; // output: - GpVar* pos_var; + X86GpVar* pos_var; // temporary: - GpVar* addr; - GpVar* qw0; - GpVar* qw1; - GpVar* qw2; + X86GpVar* addr; + X86GpVar* qw0; + X86GpVar* qw1; + X86GpVar* qw2; struct XmmLink { - XmmVar* data; + X86XmmVar* data; s8 reg; bool taken; mutable bool got; @@ -443,7 +443,7 @@ private: } }; c.mov(cpu_qword(PC), (u32)CPU.PC); - X86X64CallNode* call = c.call(imm_ptr(reinterpret_cast(&STOP_wrapper::STOP)), kFuncConvHost, FuncBuilder1()); + X86CallNode* call = c.call(imm_ptr(reinterpret_cast(&STOP_wrapper::STOP)), kFuncConvHost, FuncBuilder1()); call->setArg(0, imm_u(code)); c.mov(*pos_var, (CPU.PC >> 2) + 1); do_finalize = true; @@ -1114,7 +1114,7 @@ private: /*XmmInvalidate(rt); - GpVar v(c, kVarTypeUInt32); + X86GpVar v(c, kVarTypeUInt32); c.mov(v, cpu_dword(GPR[rt]._u32[3])); switch (ra) { diff --git a/rpcs3/Emu/Cell/SPURecompilerCore.cpp b/rpcs3/Emu/Cell/SPURecompilerCore.cpp index d38911b110..e444dca66a 100644 --- a/rpcs3/Emu/Cell/SPURecompilerCore.cpp +++ b/rpcs3/Emu/Cell/SPURecompilerCore.cpp @@ -42,7 +42,7 @@ void SPURecompilerCore::Compile(u16 pos) StringLogger stringLogger; stringLogger.setOption(kLoggerOptionBinaryForm, true); - Compiler compiler(&runtime); + X86Compiler compiler(&runtime); m_enc->compiler = &compiler; compiler.setLogger(&stringLogger); @@ -51,40 +51,40 @@ void SPURecompilerCore::Compile(u16 pos) u32 excess = 0; entry[start].count = 0; - GpVar cpu_var(compiler, kVarTypeIntPtr, "cpu"); + X86GpVar cpu_var(compiler, kVarTypeIntPtr, "cpu"); compiler.setArg(0, cpu_var); compiler.alloc(cpu_var); m_enc->cpu_var = &cpu_var; - GpVar ls_var(compiler, kVarTypeIntPtr, "ls"); + X86GpVar ls_var(compiler, kVarTypeIntPtr, "ls"); compiler.setArg(1, ls_var); compiler.alloc(ls_var); m_enc->ls_var = &ls_var; - GpVar imm_var(compiler, kVarTypeIntPtr, "imm"); + X86GpVar imm_var(compiler, kVarTypeIntPtr, "imm"); compiler.setArg(2, imm_var); compiler.alloc(imm_var); m_enc->imm_var = &imm_var; - GpVar g_imm_var(compiler, kVarTypeIntPtr, "g_imm"); + X86GpVar g_imm_var(compiler, kVarTypeIntPtr, "g_imm"); compiler.setArg(3, g_imm_var); compiler.alloc(g_imm_var); m_enc->g_imm_var = &g_imm_var; - GpVar pos_var(compiler, kVarTypeUInt32, "pos"); + X86GpVar pos_var(compiler, kVarTypeUInt32, "pos"); m_enc->pos_var = &pos_var; - GpVar addr_var(compiler, kVarTypeUInt32, "addr"); + X86GpVar addr_var(compiler, kVarTypeUInt32, "addr"); m_enc->addr = &addr_var; - GpVar qw0_var(compiler, kVarTypeUInt64, "qw0"); + X86GpVar qw0_var(compiler, kVarTypeUInt64, "qw0"); m_enc->qw0 = &qw0_var; - GpVar qw1_var(compiler, kVarTypeUInt64, "qw1"); + X86GpVar qw1_var(compiler, kVarTypeUInt64, "qw1"); m_enc->qw1 = &qw1_var; - GpVar qw2_var(compiler, kVarTypeUInt64, "qw2"); + X86GpVar qw2_var(compiler, kVarTypeUInt64, "qw2"); m_enc->qw2 = &qw2_var; for (u32 i = 0; i < 16; i++) { - m_enc->xmm_var[i].data = new XmmVar(compiler, kVarTypeXmm, fmt::Format("reg_%d", i).c_str()); + m_enc->xmm_var[i].data = new X86XmmVar(compiler, kX86VarTypeXmm, fmt::Format("reg_%d", i).c_str()); } compiler.xor_(pos_var, pos_var); diff --git a/rpcs3/Emu/Cell/SPUThread.h b/rpcs3/Emu/Cell/SPUThread.h index a5f848ce65..a56751bbe8 100644 --- a/rpcs3/Emu/Cell/SPUThread.h +++ b/rpcs3/Emu/Cell/SPUThread.h @@ -362,7 +362,7 @@ public: void Init() { - m_index = 0; + m_indval = 0; } __forceinline bool Pop(u32& res) diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp index 87afef7d75..d1907c0dc7 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.cpp @@ -103,31 +103,31 @@ s32 sys_timer_disconnect_event_queue(u32 timer_id) s32 sys_timer_sleep(u32 sleep_time) { - sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); + sys_timer.Log("sys_timer_sleep(sleep_time=%d)", sleep_time); for (u32 i = 0; i < sleep_time; i++) { + std::this_thread::sleep_for(std::chrono::seconds(1)); if (Emu.IsStopped()) { sys_timer.Warning("sys_timer_sleep(sleep_time=%d)", sleep_time); return CELL_OK; } - std::this_thread::sleep_for(std::chrono::seconds(1)); } return CELL_OK; } s32 sys_timer_usleep(u64 sleep_time) { - sys_timer.Warning("sys_timer_usleep(sleep_time=%lld)", sleep_time); + sys_timer.Log("sys_timer_usleep(sleep_time=%lld)", sleep_time); if (sleep_time > 0xFFFFFFFFFFFF) sleep_time = 0xFFFFFFFFFFFF; //2^48-1 - for (u64 i = 0; i < sleep_time; i += 1000000) + for (u32 i = 0; i < sleep_time / 1000000; i++) { + std::this_thread::sleep_for(std::chrono::seconds(1)); if (Emu.IsStopped()) { sys_timer.Warning("sys_timer_usleep(sleep_time=%lld)", sleep_time); return CELL_OK; } - std::this_thread::sleep_for(std::chrono::seconds(1)); } std::this_thread::sleep_for(std::chrono::microseconds(sleep_time % 1000000)); return CELL_OK;