Made initial implementation of the thread scheduler, refactor Svc to avoid passing many arguments
This commit is contained in:
parent
598d1fd3ae
commit
f68696dc4a
19 changed files with 740 additions and 252 deletions
|
@ -66,10 +66,10 @@ namespace ChocolArm64.Memory
|
|||
|
||||
public void SetExclusive(ARegisters Registers, long Position)
|
||||
{
|
||||
Position &= ~ErgMask;
|
||||
|
||||
lock (Monitors)
|
||||
{
|
||||
Position &= ~ErgMask;
|
||||
|
||||
if (Monitors.TryGetValue(Registers.ThreadId, out ExMonitor Monitor))
|
||||
{
|
||||
ExAddrs.Remove(Monitor.Position);
|
||||
|
@ -88,10 +88,10 @@ namespace ChocolArm64.Memory
|
|||
|
||||
public bool TestExclusive(ARegisters Registers, long Position)
|
||||
{
|
||||
Position &= ~ErgMask;
|
||||
|
||||
lock (Monitors)
|
||||
{
|
||||
Position &= ~ErgMask;
|
||||
|
||||
if (!Monitors.TryGetValue(Registers.ThreadId, out ExMonitor Monitor))
|
||||
{
|
||||
return false;
|
||||
|
@ -113,6 +113,26 @@ namespace ChocolArm64.Memory
|
|||
}
|
||||
}
|
||||
|
||||
public bool AcquireAddress(long Position)
|
||||
{
|
||||
Position &= ~ErgMask;
|
||||
|
||||
lock (Monitors)
|
||||
{
|
||||
return ExAddrs.Add(Position);
|
||||
}
|
||||
}
|
||||
|
||||
public void ReleaseAddress(long Position)
|
||||
{
|
||||
Position &= ~ErgMask;
|
||||
|
||||
lock (Monitors)
|
||||
{
|
||||
ExAddrs.Remove(Position);
|
||||
}
|
||||
}
|
||||
|
||||
public sbyte ReadSByte(long Position) => (sbyte)ReadByte (Position);
|
||||
public short ReadInt16(long Position) => (short)ReadUInt16(Position);
|
||||
public int ReadInt32(long Position) => (int)ReadUInt32(Position);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue