From e1ec2f58bb3515e931566b1e2ddab8e225152bae Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sat, 6 Dec 2025 03:35:20 +0300 Subject: [PATCH] rsx/fp/asm: Fix ELSE encoding --- rpcs3/Emu/RSX/Program/Assembler/FPASM.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/rpcs3/Emu/RSX/Program/Assembler/FPASM.cpp b/rpcs3/Emu/RSX/Program/Assembler/FPASM.cpp index 7b32ff56d5..cddc562fa5 100644 --- a/rpcs3/Emu/RSX/Program/Assembler/FPASM.cpp +++ b/rpcs3/Emu/RSX/Program/Assembler/FPASM.cpp @@ -294,13 +294,6 @@ namespace rsx::assembler fmt::throw_exception("Invalid constant literal"); }; - auto encode_branch_end = [](Instruction *inst, u32 end) - { - SRC2 src2 { .HEX = inst->bytecode[3] }; - src2.end_offset = static_cast(end); - inst->bytecode[3] = src2.HEX; - }; - auto encode_branch_else = [](Instruction* inst, u32 end) { SRC1 src1{ .HEX = inst->bytecode[2] }; @@ -308,6 +301,20 @@ namespace rsx::assembler inst->bytecode[2] = src1.HEX; }; + auto encode_branch_end = [](Instruction *inst, u32 end) + { + SRC2 src2 { .HEX = inst->bytecode[3] }; + src2.end_offset = static_cast(end); + inst->bytecode[3] = src2.HEX; + + SRC1 src1{ .HEX = inst->bytecode[2] }; + if (!src1.else_offset) + { + src1.else_offset = static_cast(end); + inst->bytecode[2] = src1.HEX; + } + }; + auto encode_opcode = [](const std::string& op, Instruction* inst) { OPDEST d0 { .HEX = inst->bytecode[0] };