From fd85a418a8f42e0ca7f93743f89b2c8b9dade089 Mon Sep 17 00:00:00 2001 From: CRACKbomber <1568512+CRACKbomber@users.noreply.github.com> Date: Fri, 23 May 2025 14:48:30 -0400 Subject: [PATCH] Implement subfme --- XenonRecomp/recompiler.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/XenonRecomp/recompiler.cpp b/XenonRecomp/recompiler.cpp index 04f0bb6..f93bf0e 100644 --- a/XenonRecomp/recompiler.cpp +++ b/XenonRecomp/recompiler.cpp @@ -1744,6 +1744,16 @@ bool Recompiler::Recompile( println("\t{}.s64 = {} - {}.s64;", r(insn.operands[0]), int32_t(insn.operands[2]), r(insn.operands[1])); break; + case PPC_INST_SUBFME: + println("\t{}.u64 = ~{}.u64 + {}.ca - 1;", temp(), r(insn.operands[1]), xer()); + println("\t{}.ca = ({}.u64 < ~{}.u64) || ({}.u64 == ~{}.u64 && {}.ca);", xer(), + temp(), r(insn.operands[1]), temp(), r(insn.operands[1]), xer()); + println("\t{}.u64 = {}.u64;", r(insn.operands[0]), temp()); + if (strchr(insn.opcode->name, '.')) + println("\t{}.compare({}.s32, 0, {});", + cr(0), r(insn.operands[0]), xer()); + break; + case PPC_INST_SYNC: // no op break;