From 7f3e2e55b54d46d4e3fe86b4b216edfdaefd97f8 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 27 Aug 2023 19:15:09 -0700 Subject: [PATCH] x86jit: Small opt for Sltu. --- Core/MIPS/x86/X64IRCompALU.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Core/MIPS/x86/X64IRCompALU.cpp b/Core/MIPS/x86/X64IRCompALU.cpp index 79e5c5bdc6..7573a56f30 100644 --- a/Core/MIPS/x86/X64IRCompALU.cpp +++ b/Core/MIPS/x86/X64IRCompALU.cpp @@ -182,7 +182,12 @@ void X64JitBackend::CompIR_Compare(IRInst inst) { CONDITIONAL_DISABLE; auto setCC = [&](const OpArg &arg, CCFlags cc) { - if (regs_.HasLowSubregister(regs_.RX(inst.dest)) && inst.dest != inst.src1 && inst.dest != inst.src2) { + // If it's carry, we can take advantage of ADC to avoid subregisters. + if (cc == CC_C && inst.dest != inst.src1 && inst.dest != inst.src2) { + XOR(32, regs_.R(inst.dest), regs_.R(inst.dest)); + CMP(32, regs_.R(inst.src1), arg); + ADC(32, regs_.R(inst.dest), Imm8(0)); + } else if (regs_.HasLowSubregister(regs_.RX(inst.dest)) && inst.dest != inst.src1 && inst.dest != inst.src2) { XOR(32, regs_.R(inst.dest), regs_.R(inst.dest)); CMP(32, regs_.R(inst.src1), arg); SETcc(cc, regs_.R(inst.dest));