From 93cef53ec05fc0f98aa015cb5a0ad2b8b2cb828d Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 23 Jan 2024 14:17:56 -0400 Subject: [PATCH] OpcodeDispatcher: optimize blsr flags reorder to avoid nzcv clobber Signed-off-by: Alyssa Rosenzweig --- FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp index 887c8d51e..efb1e1e3d 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp @@ -1050,18 +1050,14 @@ void OpDispatchBuilder::CalculateFlags_BLSMSK(uint8_t SrcSize, OrderedNode *Resu void OpDispatchBuilder::CalculateFlags_BLSR(uint8_t SrcSize, OrderedNode *Result, OrderedNode *Src) { auto Zero = _Constant(0); auto One = _Constant(1); + auto CFOp = _Select(IR::COND_EQ, Src, Zero, One, Zero); SetNZ_ZeroCV(SrcSize, Result); + SetRFLAG(CFOp); // PF/AF undefined _InvalidateFlags((1UL << X86State::RFLAG_PF_RAW_LOC) | (1UL << X86State::RFLAG_AF_RAW_LOC)); - - // CF - { - auto CFOp = _Select(IR::COND_EQ, Src, Zero, One, Zero); - SetRFLAG(CFOp); - } } void OpDispatchBuilder::CalculateFlags_POPCOUNT(OrderedNode *Src) {