コード例 #1
0
 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));
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }