protected static void EmitAndAssertDisassembly(string source, string expected) { var sourceMethod = MethodAssembler.Assemble(source, "Test::Method"); var disassemblyWriter = new StringWriter(); var codeGen = new WindowsX64CodeGenerator(Stream.Null, disassemblyWriter); codeGen.EmitMethod(sourceMethod, 0, false, null); Assert.That(disassemblyWriter.ToString().Replace("\r\n", "\n").Trim(), Is.EqualTo(expected.Replace("\r\n", "\n").Trim())); }
public void Debug_log_contains_method_and_register_dump() { const string source = @" ; #0 int32 param BB_0: Return #0"; using (var dumpWriter = new StringWriter()) { var codeGen = new WindowsX64CodeGenerator(Stream.Null, null); codeGen.EmitMethod(MethodAssembler.Assemble(source, "Test::Method"), 0, false, dumpWriter); var dumpString = dumpWriter.ToString(); // Dumped LIR Assert.That(dumpString, Contains.Substring("Return 2 0 0 -> 0")); // Locals // #0 has no forced position, the others have Assert.That(dumpString, Contains.Substring("; #0 int32 [?]")); Assert.That(dumpString, Contains.Substring("; #1 int32 [rcx]")); Assert.That(dumpString, Contains.Substring("; #2 int32 [rax]")); } }