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;