Code style fixes and nits on the HLE project (#355)

* Some style fixes and nits on ITimeZoneService

* Remove some unneeded usings

* Remove the Ryujinx.HLE.OsHle.Handles namespace

* Remove hbmenu automatic load on process exit

* Rename Ns to Device, rename Os to System, rename SystemState to State

* Move Exceptions and Utilities out of OsHle

* Rename OsHle to HOS

* Rename OsHle folder to HOS

* IManagerDisplayService and ISystemDisplayService style fixes

* BsdError shouldn't be public

* Add a empty new line before using static

* Remove unused file

* Some style fixes on NPDM

* Exit gracefully when the application is closed

* Code style fixes on IGeneralService

* Add 0x prefix on values printed as hex

* Small improvements on finalization code

* Move ProcessId and ThreadId out of AThreadState

* Rename VFs to FileSystem

* FsAccessHeader shouldn't be public. Also fix file names casing

* More case changes on NPDM

* Remove unused files

* Move using to the correct place on NPDM

* Use properties on KernelAccessControlMmio

* Address PR feedback
This commit is contained in:
gdkchan 2018-08-16 20:47:36 -03:00 committed by GitHub
parent 178effbad9
commit a7dbe84a68
4 changed files with 34 additions and 13 deletions

View file

@ -18,8 +18,6 @@ namespace ChocolArm64
public event EventHandler WorkFinished; public event EventHandler WorkFinished;
public int ThreadId => ThreadState.ThreadId;
private int IsExecuting; private int IsExecuting;
public AThread(ATranslator Translator, AMemory Memory, long EntryPoint) public AThread(ATranslator Translator, AMemory Memory, long EntryPoint)

View file

@ -41,7 +41,7 @@ namespace ChocolArm64.Memory
} }
} }
private Dictionary<int, ArmMonitor> Monitors; private Dictionary<AThreadState, ArmMonitor> Monitors;
private ConcurrentDictionary<long, IntPtr> ObservedPages; private ConcurrentDictionary<long, IntPtr> ObservedPages;
@ -53,7 +53,7 @@ namespace ChocolArm64.Memory
public AMemory(IntPtr Ram) public AMemory(IntPtr Ram)
{ {
Monitors = new Dictionary<int, ArmMonitor>(); Monitors = new Dictionary<AThreadState, ArmMonitor>();
ObservedPages = new ConcurrentDictionary<long, IntPtr>(); ObservedPages = new ConcurrentDictionary<long, IntPtr>();
@ -75,7 +75,7 @@ namespace ChocolArm64.Memory
{ {
ClearExclusive(State); ClearExclusive(State);
Monitors.Remove(State.ThreadId); Monitors.Remove(State);
} }
} }
@ -93,11 +93,11 @@ namespace ChocolArm64.Memory
} }
} }
if (!Monitors.TryGetValue(ThreadState.ThreadId, out ArmMonitor ThreadMon)) if (!Monitors.TryGetValue(ThreadState, out ArmMonitor ThreadMon))
{ {
ThreadMon = new ArmMonitor(); ThreadMon = new ArmMonitor();
Monitors.Add(ThreadState.ThreadId, ThreadMon); Monitors.Add(ThreadState, ThreadMon);
} }
ThreadMon.Position = Position; ThreadMon.Position = Position;
@ -113,7 +113,7 @@ namespace ChocolArm64.Memory
Monitor.Enter(Monitors); Monitor.Enter(Monitors);
if (!Monitors.TryGetValue(ThreadState.ThreadId, out ArmMonitor ThreadMon)) if (!Monitors.TryGetValue(ThreadState, out ArmMonitor ThreadMon))
{ {
return false; return false;
} }
@ -130,7 +130,7 @@ namespace ChocolArm64.Memory
public void ClearExclusiveForStore(AThreadState ThreadState) public void ClearExclusiveForStore(AThreadState ThreadState)
{ {
if (Monitors.TryGetValue(ThreadState.ThreadId, out ArmMonitor ThreadMon)) if (Monitors.TryGetValue(ThreadState, out ArmMonitor ThreadMon))
{ {
ThreadMon.ExState = false; ThreadMon.ExState = false;
} }
@ -142,7 +142,7 @@ namespace ChocolArm64.Memory
{ {
lock (Monitors) lock (Monitors)
{ {
if (Monitors.TryGetValue(ThreadState.ThreadId, out ArmMonitor ThreadMon)) if (Monitors.TryGetValue(ThreadState, out ArmMonitor ThreadMon))
{ {
ThreadMon.ExState = false; ThreadMon.ExState = false;
} }

View file

@ -40,9 +40,6 @@ namespace ChocolArm64.State
public bool Zero; public bool Zero;
public bool Negative; public bool Negative;
public int ProcessId;
public int ThreadId;
public bool Running { get; set; } public bool Running { get; set; }
public long TpidrEl0 { get; set; } public long TpidrEl0 { get; set; }
@ -100,6 +97,11 @@ namespace ChocolArm64.State
TickCounter.Start(); TickCounter.Start();
} }
internal bool Synchronize()
{
return Running;
}
internal void OnBreak(long Position, int Imm) internal void OnBreak(long Position, int Imm)
{ {
Break?.Invoke(this, new AInstExceptionEventArgs(Position, Imm)); Break?.Invoke(this, new AInstExceptionEventArgs(Position, Imm));

View file

@ -110,6 +110,8 @@ namespace ChocolArm64.Translation
if (OpcIndex == 0) if (OpcIndex == 0)
{ {
MarkLabel(GetLabel(CurrBlock.Position)); MarkLabel(GetLabel(CurrBlock.Position));
EmitSynchronization();
} }
CurrOp.Emitter(this); CurrOp.Emitter(this);
@ -117,6 +119,25 @@ namespace ChocolArm64.Translation
ILBlock.Add(new AILBarrier()); ILBlock.Add(new AILBarrier());
} }
private void EmitSynchronization()
{
EmitLdarg(ATranslatedSub.StateArgIdx);
EmitPrivateCall(typeof(AThreadState), nameof(AThreadState.Synchronize));
EmitLdc_I4(0);
AILLabel LblContinue = new AILLabel();
Emit(OpCodes.Bne_Un_S, LblContinue);
EmitLdc_I8(0);
Emit(OpCodes.Ret);
MarkLabel(LblContinue);
}
public bool TryOptEmitSubroutineCall() public bool TryOptEmitSubroutineCall()
{ {
if (CurrBlock.Next == null) if (CurrBlock.Next == null)