From 3fbc8204b7295e77a773c5564e439c66b359f853 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 28 May 2025 13:28:31 -0400 Subject: [PATCH] OpcodeDispatcher: clean up logical flags Signed-off-by: Alyssa Rosenzweig --- FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp | 6 +++--- FEXCore/Source/Interface/Core/OpcodeDispatcher.h | 2 +- FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp | 5 +---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index b902e3858..3467fbb0f 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -1623,7 +1623,7 @@ void OpDispatchBuilder::ANDNBMIOp(OpcodeArgs) { auto Dest = _Andn(OpSizeFromSrc(Op), Src2, Src1); StoreResult(GPRClass, Op, Dest, OpSize::iInvalid); - CalculateFlags_Logical(OpSizeFromSrc(Op), Dest, Src1, Src2); + CalculateFlags_Logical(OpSizeFromSrc(Op), Dest); } void OpDispatchBuilder::BEXTRBMIOp(OpcodeArgs) { @@ -4427,7 +4427,7 @@ void OpDispatchBuilder::ALUOp(OpcodeArgs, FEXCore::IR::IROps ALUIROp, FEXCore::I auto Result = _Constant(0); StoreResult(GPRClass, Op, Result, OpSize::iInvalid); - CalculateFlags_Logical(OpSizeFromSrc(Op), Result, Result, Result); + CalculateFlags_Logical(OpSizeFromSrc(Op), Result); return; } @@ -4489,7 +4489,7 @@ void OpDispatchBuilder::ALUOp(OpcodeArgs, FEXCore::IR::IROps ALUIROp, FEXCore::I case FEXCore::IR::IROps::OP_XOR: case FEXCore::IR::IROps::OP_AND: case FEXCore::IR::IROps::OP_OR: { - CalculateFlags_Logical(Size, Result, Dest, Src); + CalculateFlags_Logical(Size, Result); break; } case FEXCore::IR::IROps::OP_ANDWITHFLAGS: { diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h index 456e09cc4..c177bef3f 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h @@ -2310,7 +2310,7 @@ private: Ref CalculateFlags_ADD(IR::OpSize SrcSize, Ref Src1, Ref Src2, bool UpdateCF = true); void CalculateFlags_MUL(IR::OpSize SrcSize, Ref Res, Ref High); void CalculateFlags_UMUL(Ref High); - void CalculateFlags_Logical(IR::OpSize SrcSize, Ref Res, Ref Src1, Ref Src2); + void CalculateFlags_Logical(IR::OpSize SrcSize, Ref Res); void CalculateFlags_ShiftLeft(IR::OpSize SrcSize, Ref Res, Ref Src1, Ref Src2); void CalculateFlags_ShiftLeftImmediate(IR::OpSize SrcSize, Ref Res, Ref Src1, uint64_t Shift); void CalculateFlags_ShiftRight(IR::OpSize SrcSize, Ref Res, Ref Src1, Ref Src2); diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp index 1b49ebe80..146d5e1de 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp @@ -426,12 +426,9 @@ void OpDispatchBuilder::CalculateFlags_UMUL(Ref High) { CFInverted = true; } -void OpDispatchBuilder::CalculateFlags_Logical(IR::OpSize SrcSize, Ref Res, Ref Src1, Ref Src2) { +void OpDispatchBuilder::CalculateFlags_Logical(IR::OpSize SrcSize, Ref Res) { InvalidateAF(); - CalculatePF(Res); - - // SF/ZF/CF/OF SetNZ_ZeroCV(SrcSize, Res); }