From e4792fafaf04e5285ca469cfac7d2c6860280305 Mon Sep 17 00:00:00 2001 From: hrydgard Date: Wed, 13 Aug 2008 21:35:03 +0000 Subject: [PATCH] make mtmsr end jit blocks - makes some wii homebrew go a little bit further git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@192 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/Boot/Boot.cpp | 4 ++-- Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp | 2 +- Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp | 7 +++++-- Source/Core/Core/Src/PowerPC/PPCTables.cpp | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/Src/Boot/Boot.cpp b/Source/Core/Core/Src/Boot/Boot.cpp index 507b31da8d..3a1bc2e20e 100644 --- a/Source/Core/Core/Src/Boot/Boot.cpp +++ b/Source/Core/Core/Src/Boot/Boot.cpp @@ -282,9 +282,9 @@ bool CBoot::EmulatedBIOS_Wii(bool _bDebug) Memory::Write_U16(0x0000, 0x000030e0); // PADInit // clear exception handler - for (int i=0x3000; i<=0x3038; i+=4) + for (int i = 0x3000; i <= 0x3038; i += 4) { - Memory::Write_U32(0x00000000, i); + Memory::Write_U32(0x00000000, 0x80000000 + i); } // app diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp index 70cd3ad61b..4755e7433e 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Branch.cpp @@ -58,7 +58,7 @@ namespace Jit64 MOV(32, R(ECX), M(&SRR1)); AND(32, R(EAX), Imm32(~mask)); AND(32, R(ECX), Imm32(mask)); - OR(32, R(EAX), R(ECX)); + OR(32, R(EAX), R(ECX)); // MSR &= 0xFFFDFFFF; //TODO: VERIFY AND(32, R(EAX), Imm32(0xFFFDFFFF)); MOV(32, M(&MSR), R(EAX)); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp index fa8e4f2164..4ce970def6 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_SystemRegisters.cpp @@ -87,7 +87,7 @@ namespace Jit64 // fall through default: gpr.Lock(d); - gpr.LoadToX64(d,false); + gpr.LoadToX64(d, false); MOV(32, gpr.R(d), M(&PowerPC::ppcState.spr[iIndex])); gpr.UnlockAll(); break; @@ -97,8 +97,11 @@ namespace Jit64 void mtmsr(UGeckoInstruction inst) { INSTRUCTION_START; - gpr.LoadToX64(inst.RS); + gpr.LoadToX64(inst.RS, true, false); MOV(32, M(&MSR), gpr.R(inst.RS)); + gpr.Flush(FLUSH_ALL); + fpr.Flush(FLUSH_ALL); + WriteExit(js.compilerPC + 4, 0); } void mfmsr(UGeckoInstruction inst) diff --git a/Source/Core/Core/Src/PowerPC/PPCTables.cpp b/Source/Core/Core/Src/PowerPC/PPCTables.cpp index 88907e78c5..6dd9ceb221 100644 --- a/Source/Core/Core/Src/PowerPC/PPCTables.cpp +++ b/Source/Core/Core/Src/PowerPC/PPCTables.cpp @@ -360,7 +360,7 @@ GekkoOPTemplate table31[] = {19, CInterpreter::mfcr, Jit64::Default, {"mfcr", OPTYPE_SYSTEM, 0}}, {83, CInterpreter::mfmsr, Jit64::mfmsr, {"mfmsr", OPTYPE_SYSTEM, 0}}, {144, CInterpreter::mtcrf, Jit64::Default, {"mtcrf", OPTYPE_SYSTEM, 0}}, - {146, CInterpreter::mtmsr, Jit64::mtmsr, {"mtmsr", OPTYPE_SYSTEM, 0}}, + {146, CInterpreter::mtmsr, Jit64::mtmsr, {"mtmsr", OPTYPE_SYSTEM, FL_ENDBLOCK}}, {210, CInterpreter::mtsr, Jit64::Default, {"mtsr", OPTYPE_SYSTEM, 0}}, {242, CInterpreter::mtsrin, Jit64::Default, {"mtsrin", OPTYPE_SYSTEM, 0}}, {339, CInterpreter::mfspr, Jit64::mfspr, {"mfspr", OPTYPE_SYSTEM, 0}},