From cf7101ef0843d2b548be390d93b4e62e698c3d79 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Tue, 23 Mar 2010 03:30:25 +0000 Subject: [PATCH] use jit64's implementation of divwux instead of always falling back to interpreter. please test for stability...tho it looks fine. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5223 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/HLE/HLE_OS.cpp | 4 ++++ Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp | 4 ++-- .../Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp | 2 +- Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp | 8 ++++---- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Source/Core/Core/Src/HLE/HLE_OS.cpp b/Source/Core/Core/Src/HLE/HLE_OS.cpp index f0b5c8e9d6..b96ab8c123 100644 --- a/Source/Core/Core/Src/HLE/HLE_OS.cpp +++ b/Source/Core/Core/Src/HLE/HLE_OS.cpp @@ -132,6 +132,10 @@ void GetStringVA(std::string& _rOutBuffer, u32 strReg) } break; + case 'p': + // Override, so 64bit dolphin prints 32bit pointers, since the ppc is 32bit :) + _rOutBuffer += StringFromFormat("%x", Parameter); + break; default: _rOutBuffer += StringFromFormat(ArgumentBuffer, Parameter); diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp index fa2f6a025d..a0e7714388 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp @@ -353,7 +353,6 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32 } break; -// Apparently Dx commands have never been seen in dolphin? *shrug* case DVDLowReadDvd: ERROR_LOG(WII_IPC_DVD, "DVDLowReadDvd"); break; @@ -371,7 +370,8 @@ u32 CWII_IPC_HLE_Device_di::ExecuteCommand(u32 _BufferIn, u32 _BufferInSize, u32 break; case DVDLowReadDiskBca: - ERROR_LOG(WII_IPC_DVD, "DVDLowReadDiskBca"); + WARN_LOG(WII_IPC_DVD, "DVDLowReadDiskBca"); + Memory::Write_U32(1, _BufferOut + 0x30); break; case DVDLowRequestDiscStatus: diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp index 09fb52a45a..75fc860429 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter_Integer.cpp @@ -479,7 +479,7 @@ void divwx(UGeckoInstruction _inst) { if (_inst.OE) PanicAlert("OE: divwx"); - //else PanicAlert("Div by zero", "divwux"); + //else PanicAlert("Div by zero", "divwx"); } else m_GPR[_inst.RD] = (u32)(a / b); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp index 13a5a24c28..bd48e0df1d 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp @@ -557,10 +557,10 @@ void Jit64::mulhwux(UGeckoInstruction inst) } } -// skipped some of the special handling in here - if we get crashes, let the interpreter handle this op -void Jit64::divwux(UGeckoInstruction inst) { - Default(inst); return; - +void Jit64::divwux(UGeckoInstruction inst) +{ + INSTRUCTION_START + JITDISABLE(Integer) int a = inst.RA, b = inst.RB, d = inst.RD; gpr.FlushLockX(EDX); gpr.Lock(a, b, d);