JitRegCache: Count locks/unlocks
This commit is contained in:
parent
2dce7e6e21
commit
448fc89e4c
|
@ -212,13 +212,13 @@ X64Reg RegCache::RX(preg_t preg) const
|
||||||
void RegCache::UnlockAll()
|
void RegCache::UnlockAll()
|
||||||
{
|
{
|
||||||
for (auto& reg : m_regs)
|
for (auto& reg : m_regs)
|
||||||
reg.Unlock();
|
reg.UnlockAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RegCache::UnlockAllX()
|
void RegCache::UnlockAllX()
|
||||||
{
|
{
|
||||||
for (auto& xreg : m_xregs)
|
for (auto& xreg : m_xregs)
|
||||||
xreg.Unlock();
|
xreg.UnlockAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RegCache::IsFreeX(size_t xreg) const
|
bool RegCache::IsFreeX(size_t xreg) const
|
||||||
|
|
|
@ -75,15 +75,20 @@ public:
|
||||||
location = Gen::Imm32(imm32);
|
location = Gen::Imm32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsLocked() const { return locked; }
|
bool IsLocked() const { return locked > 0; }
|
||||||
void Lock() { locked = true; }
|
void Lock() { locked++; }
|
||||||
void Unlock() { locked = false; }
|
void Unlock()
|
||||||
|
{
|
||||||
|
ASSERT(IsLocked());
|
||||||
|
locked--;
|
||||||
|
}
|
||||||
|
void UnlockAll() { locked = 0; } // TODO: Remove from final version
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Gen::OpArg default_location{};
|
Gen::OpArg default_location{};
|
||||||
Gen::OpArg location{};
|
Gen::OpArg location{};
|
||||||
bool away = false; // value not in source register
|
bool away = false; // value not in source register
|
||||||
bool locked = false;
|
size_t locked = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class X64CachedReg
|
class X64CachedReg
|
||||||
|
@ -110,15 +115,20 @@ public:
|
||||||
bool IsDirty() const { return dirty; }
|
bool IsDirty() const { return dirty; }
|
||||||
void MakeDirty() { dirty = true; }
|
void MakeDirty() { dirty = true; }
|
||||||
|
|
||||||
bool IsLocked() const { return locked; }
|
bool IsLocked() const { return locked > 0; }
|
||||||
void Lock() { locked = true; }
|
void Lock() { locked++; }
|
||||||
void Unlock() { locked = false; }
|
void Unlock()
|
||||||
|
{
|
||||||
|
ASSERT(IsLocked());
|
||||||
|
locked--;
|
||||||
|
}
|
||||||
|
void UnlockAll() { locked = 0; } // TODO: Remove from final version
|
||||||
|
|
||||||
private:
|
private:
|
||||||
preg_t ppcReg = static_cast<preg_t>(Gen::INVALID_REG);
|
preg_t ppcReg = static_cast<preg_t>(Gen::INVALID_REG);
|
||||||
bool free = true;
|
bool free = true;
|
||||||
bool dirty = false;
|
bool dirty = false;
|
||||||
bool locked = false;
|
size_t locked = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RegCache
|
class RegCache
|
||||||
|
|
Loading…
Reference in New Issue