diff options
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Kernel/Threading/KThreadContext.cs')
-rw-r--r-- | src/Ryujinx.HLE/HOS/Kernel/Threading/KThreadContext.cs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThreadContext.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThreadContext.cs new file mode 100644 index 00000000..e8ad53c2 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThreadContext.cs @@ -0,0 +1,33 @@ +using Ryujinx.Cpu; +using Ryujinx.Horizon.Common; +using System.Threading; + +namespace Ryujinx.HLE.HOS.Kernel.Threading +{ + class KThreadContext : IThreadContext + { + private readonly IExecutionContext _context; + + public bool Running => _context.Running; + public ulong TlsAddress => (ulong)_context.TpidrroEl0; + + public ulong GetX(int index) => _context.GetX(index); + + private int _locked; + + public KThreadContext(IExecutionContext context) + { + _context = context; + } + + public bool Lock() + { + return Interlocked.Exchange(ref _locked, 1) == 0; + } + + public void Unlock() + { + Interlocked.Exchange(ref _locked, 0); + } + } +} |