CSPspEmu.Core.Cpu.Dynarec.DynarecFunctionCompiler.InternalFunctionCompiler.CreateFunction C# (CSharp) Method

CreateFunction() private method

private CreateFunction ( ) : DynarecFunction
return DynarecFunction
            internal DynarecFunction CreateFunction()
            {
                CpuEmitter.SpecialName = "";

                var Time0 = DateTime.UtcNow;

                AnalyzeBranches();

                var Time1 = DateTime.UtcNow;

                var Nodes = GenerateCode();

                Nodes = ast.Statements(
                    ast.Comment(String.Format("Function {0:X8}-{1:X8}. Entry: {2:X8}", MinPC, MaxPC, EntryPC)),
                    //ast.DebugWrite(String.Format("Dynarec:PC:{0:X8}", EntryPC)),
                    //ast.Comment("Returns immediately when argument CpuThreadState is null, so we can call it on the generation thread to do prelinking."),
                    ast.If(
                        ast.Binary(ast.CpuThreadState, "==", ast.Null<CpuThreadState>()),
                        ast.Return()
                    ),
                    Nodes
                );

                var Time2 = DateTime.UtcNow;

                //var MipsMethodEmitterResult = MipsMethodEmitter.CreateDelegate(Nodes, (int)((MaxPC - MinPC) / 4));
                var MipsMethodEmitterResult = MipsMethodEmitter.CreateDelegate(Nodes, AnalyzedPC.Count);

                return new DynarecFunction()
                {
                    Name = CpuEmitter.SpecialName,
                    CallingPCs = CallingPCs,
                    EntryPC = EntryPC,
                    MinPC = MinPC,
                    MaxPC = MaxPC,
                    AstNode = Nodes,
                    DisableOptimizations = MipsMethodEmitterResult.DisableOptimizations,
                    Delegate = MipsMethodEmitterResult.Delegate,
                    InstructionStats = InstructionStats,
                    TimeOptimize = MipsMethodEmitterResult.TimeOptimize,
                    TimeGenerateIL = MipsMethodEmitterResult.TimeGenerateIL,
                    TimeCreateDelegate = MipsMethodEmitterResult.TimeCreateDelegate,
                    TimeAnalyzeBranches = Time1 - Time0,
                    TimeGenerateAst = Time2 - Time1,
                };
            }