internal void TranslateVirtualSubroutine(CpuThreadState state, long position) { if (!_cache.TryGetSubroutine(position, out TranslatedSub sub) || sub.Tier == TranslationTier.Tier0) { _queue.Enqueue(new TranslatorQueueItem(position, state.GetExecutionMode(), TranslationTier.Tier1)); } }
public void TranslateAhead(long position, ExecutionMode mode = ExecutionMode.Aarch64) { if (_cache.TryGetSubroutine(position, out TranslatedSub sub) && sub.Tier != TranslationTier.Tier0) { return; } _queue.Enqueue(position, mode, TranslationTier.Tier1, isComplete: true); }
internal ArmSubroutine GetOrTranslateSubroutine(CpuThreadState state, long position, CallType cs) { if (!_cache.TryGetSubroutine(position, out TranslatedSub sub)) { sub = TranslateLowCq(position, state.GetExecutionMode()); } if (sub.Rejit()) { bool isComplete = cs == CallType.Call || cs == CallType.VirtualCall; _queue.Enqueue(position, state.GetExecutionMode(), TranslationTier.Tier1, isComplete); } return(sub.Delegate); }