RejitRequest as a class rather than a tuple

Makes a lot more sense than storing tuples on a dictionary.
This commit is contained in:
riperiperi 2020-01-26 15:11:02 +00:00
commit 08311618a8
2 changed files with 20 additions and 4 deletions

View file

@ -0,0 +1,16 @@
using ARMeilleure.State;
namespace ARMeilleure.Translation
{
class RejitRequest
{
public ulong Address;
public ExecutionMode Mode;
public RejitRequest(ulong address, ExecutionMode mode)
{
Address = address;
Mode = mode;
}
}
}

View file

@ -20,7 +20,7 @@ namespace ARMeilleure.Translation
private ConcurrentDictionary<ulong, TranslatedFunction> _funcs;
private PriorityQueue<(ulong Address, ExecutionMode Mode)> _backgroundQueue;
private PriorityQueue<RejitRequest> _backgroundQueue;
private AutoResetEvent _backgroundTranslatorEvent;
@ -32,7 +32,7 @@ namespace ARMeilleure.Translation
_funcs = new ConcurrentDictionary<ulong, TranslatedFunction>();
_backgroundQueue = new PriorityQueue<(ulong, ExecutionMode)>(2);
_backgroundQueue = new PriorityQueue<RejitRequest>(2);
_backgroundTranslatorEvent = new AutoResetEvent(false);
}
@ -41,7 +41,7 @@ namespace ARMeilleure.Translation
{
while (_threadCount != 0)
{
if (_backgroundQueue.TryDequeue(out (ulong Address, ExecutionMode Mode) request))
if (_backgroundQueue.TryDequeue(out RejitRequest request))
{
TranslatedFunction func = Translate(request.Address, request.Mode, highCq: true);
@ -114,7 +114,7 @@ namespace ARMeilleure.Translation
}
else if (isCallTarget && func.ShouldRejit())
{
_backgroundQueue.Enqueue(0, (address, mode));
_backgroundQueue.Enqueue(0, new RejitRequest(address, mode));
_backgroundTranslatorEvent.Set();
}