From 745da35324e7fcf77ff6f346620527f9a6b388a7 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Thu, 4 Jan 2024 03:19:31 +0200 Subject: [PATCH] Fix cmp in x64 shader JIT --- src/core/PICA/dynapica/shader_rec_emitter_x64.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/PICA/dynapica/shader_rec_emitter_x64.cpp b/src/core/PICA/dynapica/shader_rec_emitter_x64.cpp index 046c7813..65b73e30 100644 --- a/src/core/PICA/dynapica/shader_rec_emitter_x64.cpp +++ b/src/core/PICA/dynapica/shader_rec_emitter_x64.cpp @@ -403,11 +403,18 @@ void ShaderEmitter::checkCmpRegister(const PICAShader& shader, u32 instruction) switch (condition) { case 0: // Either cmp register matches // Z flag is 0 if at least 1 of them is set - test(word[statePointer + cmpRegXOffset], refX_refY_merged); - // Invert z flag - setz(al); - test(al, al); + // Check if X matches + cmp(byte[statePointer + cmpRegXOffset], refX); + sete(al); + + // Or if Y matches + cmp(byte[statePointer + cmpRegYOffset], refY); + sete(cl); + or_(al, cl); + + // If either of them matches, set Z to 1, else set it to 0 + xor_(al, 1); break; case 1: // Both cmp registers match cmp(word[statePointer + cmpRegXOffset], refX_refY_merged);