diff options
Diffstat (limited to 'ChocolArm64/Translation/Translator.cs')
-rw-r--r-- | ChocolArm64/Translation/Translator.cs | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/ChocolArm64/Translation/Translator.cs b/ChocolArm64/Translation/Translator.cs index 0803df09..ab8f474a 100644 --- a/ChocolArm64/Translation/Translator.cs +++ b/ChocolArm64/Translation/Translator.cs @@ -9,7 +9,7 @@ using System.Threading; namespace ChocolArm64.Translation { - public class Translator + public class Translator : ARMeilleure.Translation.ITranslator { private MemoryManager _memory; @@ -38,24 +38,18 @@ namespace ChocolArm64.Translation _queue = new TranslatorQueue(); } - internal void ExecuteSubroutine(CpuThread thread, long position) + public void Execute(ARMeilleure.State.IExecutionContext ctx, ulong address) { + CpuThreadState state = (CpuThreadState)ctx; + + long position = (long)address; + if (Interlocked.Increment(ref _threadCount) == 1) { _backgroundTranslator = new Thread(TranslateQueuedSubs); _backgroundTranslator.Start(); } - ExecuteSubroutine(thread.ThreadState, position); - - if (Interlocked.Decrement(ref _threadCount) == 0) - { - _queue.ForceSignal(); - } - } - - private void ExecuteSubroutine(CpuThreadState state, long position) - { state.CurrentTranslator = this; do @@ -75,6 +69,11 @@ namespace ChocolArm64.Translation while (position != 0 && state.Running); state.CurrentTranslator = null; + + if (Interlocked.Decrement(ref _threadCount) == 0) + { + _queue.ForceSignal(); + } } internal ArmSubroutine GetOrTranslateSubroutine(CpuThreadState state, long position, CallType cs) |