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] };