summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar wwylele2017-02-03 14:22:43 +0200
committerGravatar wwylele2017-02-03 14:53:38 +0200
commit6dc1d6e5689c1110a681ddba300636607680eefb (patch)
treee6a1e14a283442ce323b23242e9bea018023d7b2
parentHLE/Applets: Stub Mint (eShop) Applet (#2463) (diff)
downloadyuzu-6dc1d6e5689c1110a681ddba300636607680eefb.tar.gz
yuzu-6dc1d6e5689c1110a681ddba300636607680eefb.tar.xz
yuzu-6dc1d6e5689c1110a681ddba300636607680eefb.zip
ShaderJIT: add 16 dummy bytes at the bottom of the stack
-rw-r--r--src/video_core/shader/shader_jit_x64_compiler.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/video_core/shader/shader_jit_x64_compiler.cpp b/src/video_core/shader/shader_jit_x64_compiler.cpp
index bef7904b0..92b35dbc0 100644
--- a/src/video_core/shader/shader_jit_x64_compiler.cpp
+++ b/src/video_core/shader/shader_jit_x64_compiler.cpp
@@ -589,7 +589,7 @@ void JitShader::Compile_RSQ(Instruction instr) {
589void JitShader::Compile_NOP(Instruction instr) {} 589void JitShader::Compile_NOP(Instruction instr) {}
590 590
591void JitShader::Compile_END(Instruction instr) { 591void JitShader::Compile_END(Instruction instr) {
592 ABI_PopRegistersAndAdjustStack(*this, ABI_ALL_CALLEE_SAVED, 8); 592 ABI_PopRegistersAndAdjustStack(*this, ABI_ALL_CALLEE_SAVED, 8, 16);
593 ret(); 593 ret();
594} 594}
595 595
@@ -841,7 +841,10 @@ void JitShader::Compile(const std::array<u32, 1024>* program_code_,
841 FindReturnOffsets(); 841 FindReturnOffsets();
842 842
843 // The stack pointer is 8 modulo 16 at the entry of a procedure 843 // The stack pointer is 8 modulo 16 at the entry of a procedure
844 ABI_PushRegistersAndAdjustStack(*this, ABI_ALL_CALLEE_SAVED, 8); 844 // We reserve 16 bytes and assign a dummy value to the first 8 bytes, to catch any potential
845 // return checks (see Compile_Return) that happen in shader main routine.
846 ABI_PushRegistersAndAdjustStack(*this, ABI_ALL_CALLEE_SAVED, 8, 16);
847 mov(qword[rsp + 8], 0xFFFFFFFFFFFFFFFFULL);
845 848
846 mov(SETUP, ABI_PARAM1); 849 mov(SETUP, ABI_PARAM1);
847 mov(STATE, ABI_PARAM2); 850 mov(STATE, ABI_PARAM2);