using Ryujinx.HLE.HOS.Kernel.Memory;
namespace Ryujinx.HLE.HOS.Kernel.Process
{
class KTlsPageInfo
public const int TlsEntrySize = 0x200;
public ulong PageAddr { get; private set; }
private bool[] _isSlotFree;
public KTlsPageInfo(ulong pageAddress)
PageAddr = pageAddress;
_isSlotFree = new bool[KMemoryManager.PageSize / TlsEntrySize];
for (int index = 0; index < _isSlotFree.Length; index++)
_isSlotFree[index] = true;
}
public bool TryGetFreePage(out ulong address)
address = PageAddr;
if (_isSlotFree[index])
_isSlotFree[index] = false;
return true;
address += TlsEntrySize;
address = 0;
return false;
public bool IsFull()
bool hasFree = false;
hasFree |= _isSlotFree[index];
return !hasFree;
public bool IsEmpty()
bool allFree = true;
allFree &= _isSlotFree[index];
return allFree;
public void FreeTlsSlot(ulong address)
_isSlotFree[(address - PageAddr) / TlsEntrySize] = true;