private void TranslateHighCq(long position, ExecutionMode mode) { Block graph = Decoder.DecodeSubroutine(_memory, position, mode); ILEmitterCtx context = new ILEmitterCtx(_cache, _queue, TranslationTier.Tier1, graph); ILBlock[] ilBlocks = context.GetILBlocks(); string subName = GetSubroutineName(position); ILMethodBuilder ilMthdBuilder = new ILMethodBuilder(ilBlocks, subName); TranslatedSub subroutine = ilMthdBuilder.GetSubroutine(TranslationTier.Tier1); int ilOpCount = 0; foreach (ILBlock ilBlock in ilBlocks) { ilOpCount += ilBlock.Count; } _cache.AddOrUpdate(position, subroutine, ilOpCount); ForceAheadOfTimeCompilation(subroutine); }
private TranslatedSub TranslateHighCq(long position, ExecutionMode mode, bool isComplete) { Block graph = Decoder.DecodeSubroutine(_memory, position, mode); ILEmitterCtx context = new ILEmitterCtx(_memory, _cache, _queue, TranslationTier.Tier1, graph); ILBlock[] ilBlocks = context.GetILBlocks(); string subName = GetSubroutineName(position); bool isAarch64 = mode == ExecutionMode.Aarch64; isComplete &= !context.HasIndirectJump; ILMethodBuilder ilMthdBuilder = new ILMethodBuilder(ilBlocks, subName, isAarch64, isComplete); TranslatedSub subroutine = ilMthdBuilder.GetSubroutine(TranslationTier.Tier1, context.HasSlowCall); int ilOpCount = 0; foreach (ILBlock ilBlock in ilBlocks) { ilOpCount += ilBlock.Count; } ForceAheadOfTimeCompilation(subroutine); _cache.AddOrUpdate(position, subroutine, ilOpCount); return(subroutine); }
private TranslatedSub TranslateLowCq(long position, ExecutionMode mode) { Block block = Decoder.DecodeBasicBlock(_memory, position, mode); ILEmitterCtx context = new ILEmitterCtx(_cache, _queue, TranslationTier.Tier0, block); string subName = GetSubroutineName(position); ILMethodBuilder ilMthdBuilder = new ILMethodBuilder(context.GetILBlocks(), subName); TranslatedSub subroutine = ilMthdBuilder.GetSubroutine(TranslationTier.Tier0); return(_cache.GetOrAdd(position, subroutine, block.OpCodes.Count)); }