From 9b8522e7346e5d135199503fbac82e0367bcb05e Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sun, 24 Jan 2016 00:05:52 +0100 Subject: [PATCH] rsx/common: Div is vector over scalar division According to investigation on Resogun. --- rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp b/rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp index e4691a9047..1199876b47 100644 --- a/rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp +++ b/rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp @@ -340,7 +340,7 @@ bool FragmentProgramDecompiler::handle_sct(u32 opcode) switch (opcode) { case RSX_FP_OPCODE_ADD: SetDst("($0 + $1)"); return true; - case RSX_FP_OPCODE_DIV: SetDst("($0 / $1)"); return true; + case RSX_FP_OPCODE_DIV: SetDst("($0 / $1.xxxx)"); return true; // Note: DIVSQ is not IEEE compliant. divsq(0, 0) is 0 (Super Puzzle Fighter II Turbo HD Remix). // sqrt(x, 0) might be equal to some big value (in absolute) whose sign is sign(x) but it has to be proven. case RSX_FP_OPCODE_DIVSQ: SetDst("divsq_legacy($0, $1)"); return true; @@ -376,7 +376,7 @@ bool FragmentProgramDecompiler::handle_scb(u32 opcode) { case RSX_FP_OPCODE_ADD: SetDst("($0 + $1)"); return true; case RSX_FP_OPCODE_COS: SetDst("cos($0.xxxx)"); return true; - case RSX_FP_OPCODE_DIV: SetDst("($0 / $1)"); return true; + case RSX_FP_OPCODE_DIV: SetDst("($0 / $1.xxxx)"); return true; // Note: DIVSQ is not IEEE compliant. sqrt(0, 0) is 0 (Super Puzzle Fighter II Turbo HD Remix). // sqrt(x, 0) might be equal to some big value (in absolute) whose sign is sign(x) but it has to be proven. case RSX_FP_OPCODE_DIVSQ: SetDst("divsq_legacy($0, sqrt($1).xxxx)"); return true;