From 0b45b3c7a1c31ee2ba3a5904b5d64b5da3f9fe95 Mon Sep 17 00:00:00 2001 From: nakeee Date: Mon, 12 Apr 2010 16:06:02 +0000 Subject: [PATCH] More jit fixes (Thanks ector) git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5347 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/DSPCore/Src/Jit/DSPJitMisc.cpp | 4 ++-- Source/Core/DSPCore/Src/Jit/DSPJitUtil.cpp | 23 ++++++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Source/Core/DSPCore/Src/Jit/DSPJitMisc.cpp b/Source/Core/DSPCore/Src/Jit/DSPJitMisc.cpp index e4a0a45d4a..90f477cf32 100644 --- a/Source/Core/DSPCore/Src/Jit/DSPJitMisc.cpp +++ b/Source/Core/DSPCore/Src/Jit/DSPJitMisc.cpp @@ -132,7 +132,7 @@ void DSPEmitter::addarn(const UDSPInstruction opc) void DSPEmitter::setCompileSR(u16 bit) { // g_dsp.r[DSP_REG_SR] |= bit - OR(16, M(&g_dsp.r[DSP_REG_SR]), Imm8(bit)); + OR(16, M(&g_dsp.r[DSP_REG_SR]), Imm16(bit)); compileSR |= bit; } @@ -140,7 +140,7 @@ void DSPEmitter::setCompileSR(u16 bit) { void DSPEmitter::clrCompileSR(u16 bit) { // g_dsp.r[DSP_REG_SR] &= bit - AND(16, M(&g_dsp.r[DSP_REG_SR]), Imm8(~bit)); + AND(16, M(&g_dsp.r[DSP_REG_SR]), Imm16(~bit)); compileSR &= ~bit; } diff --git a/Source/Core/DSPCore/Src/Jit/DSPJitUtil.cpp b/Source/Core/DSPCore/Src/Jit/DSPJitUtil.cpp index f85eb7034e..c0700124f1 100644 --- a/Source/Core/DSPCore/Src/Jit/DSPJitUtil.cpp +++ b/Source/Core/DSPCore/Src/Jit/DSPJitUtil.cpp @@ -213,9 +213,14 @@ void DSPEmitter::ext_dmem_write(u32 dest, u32 src) FixupBranch ifx = J_CC(CC_NZ); // g_dsp.dram[addr & DSP_DRAM_MASK] = val; - // FIXME this wont work on 64bit AND(16, R(EAX), Imm16(DSP_DRAM_MASK)); - MOV(16, MDisp(EAX, (int)g_dsp.dram[0]), R(ECX)); +#ifdef _M_X64 + MOV(64, R(R11), Imm64((u64)g_dsp.dram)); + ADD(64, R(EAX), R(R11)); +#else + ADD(32, R(EAX), Imm32((u32)g_dsp.dram)); +#endif + MOV(16, MDisp(EAX,0), R(ECX)); FixupBranch end = J(); // else if (saddr == 0xf) @@ -239,6 +244,13 @@ void DSPEmitter::ext_dmem_read(u16 addr) FixupBranch dram = J_CC(CC_NZ); // return g_dsp.dram[addr & DSP_DRAM_MASK]; AND(16, R(ECX), Imm16(DSP_DRAM_MASK)); +#ifdef _M_X64 + MOV(64, R(R11), Imm64((u64)g_dsp.dram)); + ADD(64, R(ECX), R(R11)); +#else + ADD(32, R(ECX), Imm32((u32)g_dsp.dram)); +#endif + MOV(16, R(EAX), MDisp(ECX,0)); FixupBranch end = J(); SetJumpTarget(dram); @@ -247,6 +259,13 @@ void DSPEmitter::ext_dmem_read(u16 addr) FixupBranch ifx = J_CC(CC_NZ); // return g_dsp.coef[addr & DSP_COEF_MASK]; AND(16, R(ECX), Imm16(DSP_COEF_MASK)); +#ifdef _M_X64 + MOV(64, R(R11), Imm64((u64)g_dsp.dram)); + ADD(64, R(ECX), R(R11)); +#else + ADD(32, R(ECX), Imm32((u32)g_dsp.dram)); +#endif + MOV(16, R(EAX), MDisp(ECX,0)); FixupBranch end2 = J(); SetJumpTarget(ifx);