mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-14 13:00:41 +02:00
OpcodeDispatcher: extract PF/AF invalidate helpers
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
This commit is contained in:
1 parent
e2073dcd30
commit
4bd84eb523
3 files changed
+39
-66
No files matched your search
@@ -182,6 +182,7 @@ void OpDispatchBuilder::RETOp(OpcodeArgs) {
|
||||
// ABI Optimization: Flags don't survive calls or rets
|
||||
if (CTX->Config.ABILocalFlags) {
|
||||
_InvalidateFlags(~0UL); // all flags
|
||||
InvalidatePF_AF();
|
||||
// Deferred flags are invalidated now
|
||||
InvalidateDeferredFlags();
|
||||
}
|
||||
@@ -654,6 +655,7 @@ void OpDispatchBuilder::CALLOp(OpcodeArgs) {
|
||||
// ABI Optimization: Flags don't survive calls or rets
|
||||
if (CTX->Config.ABILocalFlags) {
|
||||
_InvalidateFlags(~0UL); // all flags
|
||||
InvalidatePF_AF();
|
||||
// Deferred flags are invalidated now
|
||||
InvalidateDeferredFlags();
|
||||
}
|
||||
@@ -1124,7 +1126,7 @@ void OpDispatchBuilder::TESTOp(OpcodeArgs) {
|
||||
|
||||
HandleNZ00Write();
|
||||
CalculatePF(_AndWithFlags(IR::SizeToOpSize(Size), Dest, Src));
|
||||
_InvalidateFlags(1 << X86State::RFLAG_AF_RAW_LOC);
|
||||
InvalidateAF();
|
||||
}
|
||||
|
||||
void OpDispatchBuilder::MOVSXDOp(OpcodeArgs) {
|
||||
@@ -2928,7 +2930,7 @@ void OpDispatchBuilder::AAMOp(OpcodeArgs) {
|
||||
|
||||
SetNZ_ZeroCV(1, Res);
|
||||
CalculatePF(Res);
|
||||
_InvalidateFlags(1u << X86State::RFLAG_AF_RAW_LOC);
|
||||
InvalidateAF();
|
||||
}
|
||||
|
||||
void OpDispatchBuilder::AADOp(OpcodeArgs) {
|
||||
@@ -2943,7 +2945,7 @@ void OpDispatchBuilder::AADOp(OpcodeArgs) {
|
||||
|
||||
SetNZ_ZeroCV(1, Result);
|
||||
CalculatePF(Result);
|
||||
_InvalidateFlags(1u << X86State::RFLAG_AF_RAW_LOC);
|
||||
InvalidateAF();
|
||||
}
|
||||
|
||||
void OpDispatchBuilder::XLATOp(OpcodeArgs) {
|
||||
@@ -4687,7 +4689,7 @@ void OpDispatchBuilder::ALUOpImpl(OpcodeArgs, FEXCore::IR::IROps ALUIROp, FEXCor
|
||||
case FEXCore::IR::IROps::OP_ANDWITHFLAGS: {
|
||||
HandleNZ00Write();
|
||||
CalculatePF(Result);
|
||||
_InvalidateFlags(1 << X86State::RFLAG_AF_RAW_LOC);
|
||||
InvalidateAF();
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
|
||||
Reference in new issue
Block a user