diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index cf57bbc6c0..17bf47c846 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 01bc545d8d..4562509f70 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 {