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); }
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); }
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); }