diff --git a/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index cf9463f3f..620b11305 100644 --- a/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -1544,7 +1544,7 @@ void OpDispatchBuilder::SAHFOp(OpcodeArgs) { OrderedNode *Src = LoadGPRRegister(X86State::REG_RAX, 1, 8); // Clear bits that aren't supposed to be set - Src = _And(Src, _Constant(~0b101000)); + Src = _Andn(Src, _Constant(0b101000)); // Set the bit that is always set here Src = _Or(Src, _Constant(0b10)); diff --git a/External/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp b/External/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp index d8675fc53..93144c966 100644 --- a/External/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp +++ b/External/FEXCore/Source/Interface/Core/OpcodeDispatcher/Flags.cpp @@ -52,10 +52,9 @@ void OpDispatchBuilder::SetPackedRFLAG(bool Lower8, OrderedNode *Src) { InvalidateDeferredFlags(); } - auto OneConst = _Constant(1); for (size_t i = 0; i < NumFlags; ++i) { const auto FlagOffset = FlagOffsets[i]; - auto Tmp = _And(_Lshr(Src, _Constant(FlagOffset)), OneConst); + auto Tmp = _Bfe(4, 1, FlagOffset, Src); SetRFLAG(Tmp, FlagOffset); } }