diff --git a/ChocolArm64/ATranslator.cs b/ChocolArm64/ATranslator.cs index 960f039171..2320a65ecb 100644 --- a/ChocolArm64/ATranslator.cs +++ b/ChocolArm64/ATranslator.cs @@ -30,7 +30,7 @@ namespace ChocolArm64 { CachedSubs = new ConcurrentDictionary(); - AsyncTranslator = new AsyncTier1Translator(); + AsyncTranslator = AsyncTier1Translator.GetAsyncTranslator(); if (SymbolTable != null) { @@ -96,8 +96,6 @@ namespace ChocolArm64 { AsyncTranslator.Enqueue(Position, this, State, Memory); } - - TranslateTier1(State, Memory, Position); } Position = Sub.Execute(State, Memory); diff --git a/ChocolArm64/AsyncTier1Translator.cs b/ChocolArm64/AsyncTier1Translator.cs index dab5a9f9e2..c05a984404 100644 --- a/ChocolArm64/AsyncTier1Translator.cs +++ b/ChocolArm64/AsyncTier1Translator.cs @@ -28,8 +28,10 @@ namespace ChocolArm64 } } - Thread Thread; - BlockingCollection Queue = new BlockingCollection(); + private Thread Thread; + private BlockingCollection Queue = new BlockingCollection(); + + private static AsyncTier1Translator AsyncTranslator; public AsyncTier1Translator() { @@ -46,6 +48,16 @@ namespace ChocolArm64 } } + public static AsyncTier1Translator GetAsyncTranslator() + { + if (AsyncTranslator == null) + { + AsyncTranslator = new AsyncTier1Translator(); + } + + return AsyncTranslator; + } + public void Enqueue(long Position, ATranslator Translator, AThreadState State, AMemory Memory) { Queue.Add(new QueueObj(Position, Translator, State, Memory));