summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2016-11-03 20:33:26 +0100
committerdegasus <wickmarkus@web.de>2016-12-04 13:09:16 +0100
commitf325d41defc77920c5e4e32bdb765eb4388dd586 (patch)
treebbdc586aebfc48c4a63556ff49a96dc5bf7bd729 /Source
parentd26709f713c5c4a83675dd3e5cb3fe206c27a0e7 (diff)
DSPJit: Use tmp register for pointer immediate.
PIE.
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/DSP/Jit/DSPJitUtil.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/Source/Core/Core/DSP/Jit/DSPJitUtil.cpp b/Source/Core/Core/DSP/Jit/DSPJitUtil.cpp
index 3db3927629..6b6088ce1e 100644
--- a/Source/Core/Core/DSP/Jit/DSPJitUtil.cpp
+++ b/Source/Core/Core/DSP/Jit/DSPJitUtil.cpp
@@ -21,11 +21,14 @@ void DSPEmitter::dsp_reg_stack_push(int stack_reg)
MOV(8, M(&g_dsp.reg_stack_ptr[stack_reg]), R(AL));
X64Reg tmp1 = gpr.GetFreeXReg();
+ X64Reg tmp2 = gpr.GetFreeXReg();
// g_dsp.reg_stack[stack_reg][g_dsp.reg_stack_ptr[stack_reg]] = g_dsp.r[DSP_REG_ST0 + stack_reg];
MOV(16, R(tmp1), M(&g_dsp.r.st[stack_reg]));
MOVZX(64, 8, RAX, R(AL));
- MOV(16, MComplex(EAX, EAX, SCALE_1, PtrOffset(&g_dsp.reg_stack[stack_reg][0], nullptr)), R(tmp1));
+ MOV(64, R(tmp2), ImmPtr(g_dsp.reg_stack[stack_reg]));
+ MOV(16, MComplex(tmp2, EAX, SCALE_2, 0), R(tmp1));
gpr.PutXReg(tmp1);
+ gpr.PutXReg(tmp2);
}
// clobbers:
@@ -36,10 +39,13 @@ void DSPEmitter::dsp_reg_stack_pop(int stack_reg)
// g_dsp.r[DSP_REG_ST0 + stack_reg] = g_dsp.reg_stack[stack_reg][g_dsp.reg_stack_ptr[stack_reg]];
MOV(8, R(AL), M(&g_dsp.reg_stack_ptr[stack_reg]));
X64Reg tmp1 = gpr.GetFreeXReg();
+ X64Reg tmp2 = gpr.GetFreeXReg();
MOVZX(64, 8, RAX, R(AL));
- MOV(16, R(tmp1), MComplex(EAX, EAX, SCALE_1, PtrOffset(&g_dsp.reg_stack[stack_reg][0], nullptr)));
+ MOV(64, R(tmp2), ImmPtr(g_dsp.reg_stack[stack_reg]));
+ MOV(16, R(tmp1), MComplex(tmp2, EAX, SCALE_2, 0));
MOV(16, M(&g_dsp.r.st[stack_reg]), R(tmp1));
gpr.PutXReg(tmp1);
+ gpr.PutXReg(tmp2);
// g_dsp.reg_stack_ptr[stack_reg]--;
// g_dsp.reg_stack_ptr[stack_reg] &= DSP_STACK_MASK;