From e76ebeab58a24e21320538f0d6befcf3d6941a2d Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 26 Feb 2024 15:28:50 -0400 Subject: [PATCH] OpcodeDispatcher: use 1-op "src + CF" Signed-off-by: Alyssa Rosenzweig --- FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index 25e984d7f..6add6056c 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -418,16 +418,15 @@ void OpDispatchBuilder::SBBOp(OpcodeArgs) { auto Size = GetDstSize(Op); const auto OpSize = IR::SizeToOpSize(std::max(4u, Size)); - auto CF = GetRFLAG(FEXCore::X86State::RFLAG_CF_RAW_LOC); - auto ALUOp = _Add(OpSize, Src, CF); - OrderedNode *Result{}; OrderedNode *Before{}; if (DestIsLockedMem(Op)) { HandledLock = true; OrderedNode *DestMem = LoadSource(GPRClass, Op, Op->Dest, Op->Flags, {.LoadData = false}); DestMem = AppendSegmentOffset(DestMem, Op->Flags); - Before = _AtomicFetchSub(IR::SizeToOpSize(Size), ALUOp, DestMem); + + auto SrcPlusCF = _Adc(OpSize, _Constant(0), Src); + Before = _AtomicFetchSub(IR::SizeToOpSize(Size), SrcPlusCF, DestMem); } else { Before = LoadSource(GPRClass, Op, Op->Dest, Op->Flags);