summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorMarkus Wick <degasus@users.noreply.github.com>2017-03-12 00:33:55 +0100
committerGitHub <noreply@github.com>2017-03-12 00:33:55 +0100
commitf65d0c526d240b954749bd6db977dfe8a0dc7d33 (patch)
treeb1d811b6e11927c2e8a4a46f601090ff03a9929b /Source
parent71273c05a95c33b48937c27b63f3cb3074df4b68 (diff)
parentdc1a8c46e98da079b04754505cb6c41b4bebdee2 (diff)
Merge pull request #5067 from MerryMage/cycles-offset-too-big
DSP/Jit: Load address of m_cycles_left into register
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/DSP/Jit/DSPEmitter.cpp3
-rw-r--r--Source/Core/Core/DSP/Jit/DSPJitBranch.cpp5
2 files changed, 5 insertions, 3 deletions
diff --git a/Source/Core/Core/DSP/Jit/DSPEmitter.cpp b/Source/Core/Core/DSP/Jit/DSPEmitter.cpp
index 5cbf529c51..13a7f6f0ba 100644
--- a/Source/Core/Core/DSP/Jit/DSPEmitter.cpp
+++ b/Source/Core/Core/DSP/Jit/DSPEmitter.cpp
@@ -436,7 +436,8 @@ void DSPEmitter::CompileDispatcher()
m_return_dispatcher = GetCodePtr();
// Decrement cyclesLeft
- SUB(16, M(&m_cycles_left), R(EAX));
+ MOV(64, R(RCX), ImmPtr(&m_cycles_left));
+ SUB(16, MatR(RCX), R(EAX));
J_CC(CC_A, dispatcherLoop);
diff --git a/Source/Core/Core/DSP/Jit/DSPJitBranch.cpp b/Source/Core/Core/DSP/Jit/DSPJitBranch.cpp
index 3094b8b9f0..287971c605 100644
--- a/Source/Core/Core/DSP/Jit/DSPJitBranch.cpp
+++ b/Source/Core/Core/DSP/Jit/DSPJitBranch.cpp
@@ -109,12 +109,13 @@ void DSPEmitter::WriteBlockLink(u16 dest)
{
m_gpr.FlushRegs();
// Check if we have enough cycles to execute the next block
- MOV(16, R(ECX), M(&m_cycles_left));
+ MOV(64, R(RAX), ImmPtr(&m_cycles_left));
+ MOV(16, R(ECX), MatR(RAX));
CMP(16, R(ECX), Imm16(m_block_size[m_start_address] + m_block_size[dest]));
FixupBranch notEnoughCycles = J_CC(CC_BE);
SUB(16, R(ECX), Imm16(m_block_size[m_start_address]));
- MOV(16, M(&m_cycles_left), R(ECX));
+ MOV(16, MatR(RAX), R(ECX));
JMP(m_block_links[dest], true);
SetJumpTarget(notEnoughCycles);
}