From 04ec9874489f9db0ac8d550dcdeeab8df015f24d Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 29 Oct 2013 21:39:24 -0700 Subject: [PATCH] Initialize thread regs with 0xDEADBEEF. Also initialize the float regs to NaN. --- Core/HLE/sceKernelThread.cpp | 11 +++++------ Core/HLE/sceKernelThread.h | 12 +++++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index cf57bbc6c..17bf47c84 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -1892,9 +1892,10 @@ void ThreadContext::reset() { for (int i = 0; i<32; i++) { - r[i] = 0; - f[i] = 0.0f; + r[i] = 0xDEADBEEF; + fi[i] = 0x7f800001; } + r[0] = 0; for (int i = 0; i<128; i++) { v[i] = 0.0f; @@ -1919,15 +1920,13 @@ void ThreadContext::reset() fpcond = 0; fcr0 = 0; fcr31 = 0; - hi = 0; - lo = 0; + hi = 0xDEADBEEF; + lo = 0xDEADBEEF; } void __KernelResetThread(Thread *t, int lowestPriority) { t->context.reset(); - t->context.hi = 0; - t->context.lo = 0; t->context.pc = t->nt.entrypoint; // If the thread would be better than lowestPriority, reset to its initial. Yes, kinda odd... diff --git a/Core/HLE/sceKernelThread.h b/Core/HLE/sceKernelThread.h index 01bc545d8..4562509f7 100644 --- a/Core/HLE/sceKernelThread.h +++ b/Core/HLE/sceKernelThread.h @@ -114,9 +114,15 @@ struct ThreadContext // r must be followed by f. u32 r[32]; - float f[32]; - - float v[128]; + union { + float f[32]; + u32 fi[32]; + int fs[32]; + }; + union { + float v[128]; + u32 vi[128]; + }; u32 vfpuCtrl[16]; union {