IR: Deduplicate code in Reset and FoldFallbackToInterpreter

This commit is contained in:
Lioncash 2017-01-17 20:29:40 -05:00
parent 89473d5996
commit bb49012445
2 changed files with 8 additions and 19 deletions

View file

@ -150,6 +150,11 @@ void IRBuilder::Reset()
MarkUsed.clear();
MarkUsed.reserve(100000);
InvalidateCaches();
}
void IRBuilder::InvalidateCaches()
{
GRegCache = {};
GRegCacheStore = {};
@ -1209,25 +1214,7 @@ InstLoc IRBuilder::FoldICmpCRUnsigned(InstLoc Op1, InstLoc Op2)
InstLoc IRBuilder::FoldFallBackToInterpreter(InstLoc Op1, InstLoc Op2)
{
for (unsigned i = 0; i < 32; i++)
{
GRegCache[i] = nullptr;
GRegCacheStore[i] = nullptr;
FRegCache[i] = nullptr;
FRegCacheStore[i] = nullptr;
}
CarryCache = nullptr;
CarryCacheStore = nullptr;
for (unsigned i = 0; i < 8; i++)
{
CRCache[i] = nullptr;
CRCacheStore[i] = nullptr;
}
CTRCache = nullptr;
CTRCacheStore = nullptr;
InvalidateCaches();
return EmitBiOp(FallBackToInterpreter, Op1, Op2);
}

View file

@ -388,6 +388,8 @@ public:
void WriteToFile(u64 codeHash);
private:
void InvalidateCaches();
InstLoc EmitZeroOp(unsigned Opcode, unsigned extra);
InstLoc EmitUOp(unsigned OpCode, InstLoc Op1, unsigned extra = 0);
InstLoc EmitBiOp(unsigned OpCode, InstLoc Op1, InstLoc Op2, unsigned extra = 0);