mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-25 02:01:37 +01:00
Pass Context to the OpDispatcher
This commit is contained in:
1 parent
33a4ff061d
commit
3e398a1b9b
4 files changed
+25
-7
No files matched your search
+1
-1
@@ -424,7 +424,7 @@ namespace FEXCore::Context {
|
||||
Thread->State.ThreadManager.TID = ++ThreadID;
|
||||
}
|
||||
|
||||
Thread->OpDispatcher = std::make_unique<FEXCore::IR::OpDispatchBuilder>();
|
||||
Thread->OpDispatcher = std::make_unique<FEXCore::IR::OpDispatchBuilder>(this);
|
||||
Thread->OpDispatcher->SetMultiblock(Config.Multiblock);
|
||||
Thread->BlockCache = std::make_unique<FEXCore::BlockCache>(this);
|
||||
Thread->CTX = this;
|
||||
|
||||
+15
-2
@@ -3383,8 +3383,9 @@ void OpDispatchBuilder::StoreResult(FEXCore::IR::RegisterClassType Class, FEXCor
|
||||
StoreResult(Class, Op, Op->Dest, Src, Align);
|
||||
}
|
||||
|
||||
OpDispatchBuilder::OpDispatchBuilder()
|
||||
: Data {8 * 1024 * 1024}
|
||||
OpDispatchBuilder::OpDispatchBuilder(FEXCore::Context::Context *ctx)
|
||||
: CTX {ctx}
|
||||
, Data {8 * 1024 * 1024}
|
||||
, ListData {8 * 1024 * 1024} {
|
||||
ResetWorkingList();
|
||||
}
|
||||
@@ -5091,6 +5092,18 @@ void OpDispatchBuilder::ReplaceAllUsesWithInclusive(OrderedNode *Node, OrderedNo
|
||||
}
|
||||
}
|
||||
|
||||
void OpDispatchBuilder::ReplaceNodeArgument(OrderedNode *Node, uint8_t Arg, OrderedNode *NewArg) {
|
||||
uintptr_t ListBegin = ListData.Begin();
|
||||
uintptr_t DataBegin = Data.Begin();
|
||||
|
||||
FEXCore::IR::IROp_Header *IROp = Node->Op(DataBegin);
|
||||
OrderedNodeWrapper OldArgWrapper = IROp->Args[Arg];
|
||||
OrderedNode *OldArg = OldArgWrapper.GetNode(ListBegin);
|
||||
OldArg->RemoveUse();
|
||||
NewArg->AddUse();
|
||||
IROp->Args[Arg].NodeOffset = NewArg->Wrapped(ListBegin).NodeOffset;
|
||||
}
|
||||
|
||||
void OpDispatchBuilder::RemoveArgUses(OrderedNode *Node) {
|
||||
uintptr_t ListBegin = ListData.Begin();
|
||||
uintptr_t DataBegin = Data.Begin();
|
||||
|
||||
@@ -22,7 +22,7 @@ class OpDispatchBuilder final {
|
||||
friend class FEXCore::IR::Pass;
|
||||
friend class FEXCore::IR::PassManager;
|
||||
public:
|
||||
|
||||
FEXCore::Context::Context *CTX{};
|
||||
bool ShouldDump {false};
|
||||
|
||||
struct JumpTargetInfo {
|
||||
@@ -81,7 +81,7 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
OpDispatchBuilder();
|
||||
OpDispatchBuilder(FEXCore::Context::Context *ctx);
|
||||
|
||||
IRListView<false> ViewIR() { return IRListView<false>(&Data, &ListData); }
|
||||
IRListView<true> *CreateIRCopy() { return new IRListView<true>(&Data, &ListData); }
|
||||
@@ -544,6 +544,10 @@ public:
|
||||
return _PhiValue(Value, Block, InvalidNode);
|
||||
}
|
||||
|
||||
OrderedNode *Invalid() {
|
||||
return InvalidNode;
|
||||
}
|
||||
|
||||
void AddPhiValue(IR::IROp_Phi *Phi, OrderedNode *Value) {
|
||||
// Got to do some bookkeeping first
|
||||
Value->AddUse();
|
||||
@@ -640,10 +644,10 @@ public:
|
||||
}
|
||||
|
||||
void ReplaceAllUsesWithInclusive(OrderedNode *Node, OrderedNode *NewNode, IR::NodeWrapperIterator After, IR::NodeWrapperIterator End);
|
||||
void ReplaceNodeArgument(OrderedNode *Node, uint8_t Arg, OrderedNode *NewArg);
|
||||
|
||||
void Remove(OrderedNode *Node);
|
||||
|
||||
|
||||
void SetPackedRFLAG(bool Lower8, OrderedNode *Src);
|
||||
OrderedNode *GetPackedRFLAG(bool Lower8);
|
||||
|
||||
|
||||
@@ -15,7 +15,8 @@ private:
|
||||
std::vector<IR::OrderedNodeWrapper::NodeOffsetType> OldToNewRemap;
|
||||
};
|
||||
|
||||
IRCompaction::IRCompaction() {
|
||||
IRCompaction::IRCompaction()
|
||||
: LocalBuilder {nullptr} {
|
||||
OldToNewRemap.resize(9000);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user