summaryrefslogtreecommitdiff
path: root/Source/Core/DSPCore
diff options
context:
space:
mode:
authornakeee <nakeee@gmail.com>2010-04-12 16:06:02 +0000
committernakeee <nakeee@gmail.com>2010-04-12 16:06:02 +0000
commit0b45b3c7a1c31ee2ba3a5904b5d64b5da3f9fe95 (patch)
tree0806609564e0241da2008ee294d0fc0507c8c0ad /Source/Core/DSPCore
parent9a26cd01c6529551316f3e070986fce44a51bdf3 (diff)
More jit fixes (Thanks ector)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5347 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DSPCore')
-rw-r--r--Source/Core/DSPCore/Src/Jit/DSPJitMisc.cpp4
-rw-r--r--Source/Core/DSPCore/Src/Jit/DSPJitUtil.cpp23
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);