コード例 #1
0
        private Func <long> SelectTest(byte[] buf)
        {
            var         rewriter = chkRewriter.Checked;
            Func <long> test;

            if (rdbRealDasm.Checked)
            {
                var arch = new Reko.Arch.Arm.Arm32Architecture(sc, "arm32");
                //var arch = new Reko.Arch.X86.X86ArchitectureFlat32("x86-protected-32");

                if (rewriter)
                {
                    test = () => PerformanceTest_A32Rewriter(arch, buf);
                }
                else
                {
                    test = () => PerformanceTest_A32Dasm(arch, buf);
                }
            }
            else
            {
                DecoderBuilder m;
                if (rdbInterpretedDasm.Checked)
                {
                    m = new Decoders.FormatDecoderBuilder();
                }
                else
                {
                    m = new Decoders.ThreadedDecoderBuilder();
                }
                var root = m.Mask(29, 3,
                                  m.Instr(Mnemonic.add, "r8,r4,r0"),
                                  m.Instr(Mnemonic.sub, "r8,r4,r0"),
                                  m.Instr(Mnemonic.mul, "r8,r4,r0"),
                                  m.Instr(Mnemonic.div, "r8,r4,r0"),

                                  m.Instr(Mnemonic.and, "r8,r4,r0"),
                                  m.Instr(Mnemonic.or, "r8,r4,r0"),
                                  m.Instr(Mnemonic.not, "r8,r4"),
                                  m.Instr(Mnemonic.xor, "r8,r4,r0"));

                if (rewriter)
                {
                    test = () => PerformanceTest_SimulatedRewriter(buf, root);
                }
                else
                {
                    test = () => PerformanceTest_Simulated(buf, root);
                }
            }
            return(test);
        }
コード例 #2
0
        private long PerformanceTest_A32Dasm(byte[] buf)
        {
            var       arch = new Reko.Arch.Arm.Arm32Architecture("arm32");
            var       mem  = new MemoryArea(Address.Ptr32(0x00100000), buf);
            var       rdr  = arch.CreateImageReader(mem, mem.BaseAddress);
            var       dasm = arch.CreateDisassembler(rdr);
            Stopwatch sw   = new Stopwatch();

            sw.Start();
            foreach (var instr in dasm)
            {
            }
            sw.Stop();
            var time = sw.ElapsedMilliseconds;

            return(time);
        }
コード例 #3
0
        private long PerformanceTest_A32Rewriter(byte[] buf)
        {
            var arch = new Reko.Arch.Arm.Arm32Architecture("arm32");
            var mem  = new MemoryArea(Address.Ptr32(0x00100000), buf);
            var rdr  = arch.CreateImageReader(mem, mem.BaseAddress);
            var dasm = arch.CreateRewriter(rdr, arch.CreateProcessorState(), new StorageBinder(),
                                           new RewriterPerformanceDialog.RewriterHost(new Dictionary <Address, ImportReference>()));
            Stopwatch sw = new Stopwatch();

            sw.Start();
            foreach (var instr in dasm)
            {
            }
            sw.Stop();
            var time = sw.ElapsedMilliseconds;

            return(time);
        }