Example #1
0
        public void LoopFinder_Reg00013()
        {
            Program prog = RewriteProgramMsdos("Fragments/regressions/r00013.asm", Address.SegPtr(0x800, 0));
            ProcedureStructureBuilder psb = new ProcedureStructureBuilder(prog.Procedures.Values[0]);
            proc = psb.Build();
            psb.AnalyzeGraph();

            proc.Dump();
            var lf = new LoopFinder(proc.Ordering[23], proc.Ordering[0], proc.Ordering);
            var intervalNodes = proc.Nodes[23].Interval.FindIntervalNodes(0);
            var loopNodes = lf.FindNodesInLoop(intervalNodes);
            proc.Dump();
            Loop loop = lf.DetermineLoopType(loopNodes);
            Assert.IsTrue(loop is TestlessLoop);
        }
Example #2
0
        public void LoopFinder_Reg00013()
        {
            Program prog = RewriteProgramMsdos("Fragments/regressions/r00013.asm", Address.SegPtr(0x800, 0));
            ProcedureStructureBuilder psb = new ProcedureStructureBuilder(prog.Procedures.Values[0]);

            proc = psb.Build();
            psb.AnalyzeGraph();

            proc.Dump();
            var lf            = new LoopFinder(proc.Ordering[23], proc.Ordering[0], proc.Ordering);
            var intervalNodes = proc.Nodes[23].Interval.FindIntervalNodes(0);
            var loopNodes     = lf.FindNodesInLoop(intervalNodes);

            proc.Dump();
            Loop loop = lf.DetermineLoopType(loopNodes);

            Assert.IsTrue(loop is TestlessLoop);
        }
Example #3
0
 private void RunTest(string sExp)
 {
     try
     {
         var acg = new AbsynCodeGenerator();
         acg.GenerateCode(curProc, proc.Body);
         GenCode(proc, sb);
         Assert.AreEqual(sExp, sb.ToString());
     }
     catch
     {
         curProc.Dump();
         Console.WriteLine(sb.ToString());
         throw;
     }
 }
        public void LoopTest()
        {
            CompileTest(delegate(ProcedureBuilder m)
            {
                m.Label("loop");
                m.SideEffect(m.Fn("foo", m.Int32(4)));
                m.BranchIf(m.LocalBool("f"), "loop");
                m.Return();
            });

            DerivedSequenceBuilder seq = new DerivedSequenceBuilder(proc);

            proc.Dump();

            Assert.AreEqual(4, proc.DerivedGraphs[0].Graph.Nodes.Count);
            Assert.AreEqual(2, proc.DerivedGraphs[0].Intervals.Count);
            Assert.AreEqual(2, proc.DerivedGraphs[1].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[1].Intervals.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[2].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[2].Intervals.Count);
        }