diff options
author | bunnei <bunneidev@gmail.com> | 2016-05-17 21:24:57 -0400 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2016-05-17 21:24:57 -0400 |
commit | a39144050bbff3c093dbc402284aface713c5168 (patch) | |
tree | c55f388009abe0727ced35d6fa77023947b260d3 | |
parent | e5599ed300b4992e53425df63c7f217171f35603 (diff) | |
parent | af37dd0d52b011236d176b924efbd369afa5746c (diff) |
Merge pull request #1800 from JayFoxRox/set-fpscr
Set fpscr for new threads
-rw-r--r-- | src/core/arm/arm_interface.h | 1 | ||||
-rw-r--r-- | src/core/hle/kernel/thread.cpp | 2 | ||||
-rw-r--r-- | src/core/hle/svc.cpp | 3 |
3 files changed, 6 insertions, 0 deletions
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index 533067d4f..d8abe5aeb 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h @@ -6,6 +6,7 @@ #include "common/common_types.h" #include "core/arm/skyeye_common/arm_regformat.h" +#include "core/arm/skyeye_common/vfp/asm_vfp.h" namespace Core { struct ThreadContext; diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 68f026918..43def6146 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -526,6 +526,8 @@ SharedPtr<Thread> SetupMainThread(u32 entry_point, s32 priority) { SharedPtr<Thread> thread = thread_res.MoveFrom(); + thread->context.fpscr = FPSCR_DEFAULT_NAN | FPSCR_FLUSH_TO_ZERO | FPSCR_ROUND_TOZERO | FPSCR_IXC; // 0x03C00010 + // Run new "main" thread SwitchContext(thread.get()); diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 3a53126c1..2bf122a6d 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -502,6 +502,9 @@ static ResultCode CreateThread(Handle* out_handle, s32 priority, u32 entry_point CASCADE_RESULT(SharedPtr<Thread> thread, Kernel::Thread::Create( name, entry_point, priority, arg, processor_id, stack_top)); + + thread->context.fpscr = FPSCR_DEFAULT_NAN | FPSCR_FLUSH_TO_ZERO | FPSCR_ROUND_TOZERO; // 0x03C00000 + CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(thread))); LOG_TRACE(Kernel_SVC, "called entrypoint=0x%08X (%s), arg=0x%08X, stacktop=0x%08X, " |