aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/Translation/Translator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ChocolArm64/Translation/Translator.cs')
-rw-r--r--ChocolArm64/Translation/Translator.cs23
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)