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;