digitalmars.D.ldc - Performance dmd vs ldc2
- Chris (23/23) Jul 24 2013 I recompiled a medium sized project with ldc2 (for the first time
- bearophile (10/13) Jul 24 2013 In the last weeks Walter has written several patches for the
- Chris (4/18) Jul 24 2013 ldmd2 compiles the code much faster than ldc2 (~4 secs vs 14
- bearophile (6/9) Jul 24 2013 The ldmd2 binary is tiny, it's not a compiler, it's just a
- Chris (5/14) Jul 24 2013 Thanks for clarifying that. I am still impressed with the
- John Colvin (3/20) Jul 24 2013 try dmd -release -noboundscheck -O -inline [files]
- Chris (9/30) Jul 24 2013 Just tried it. dmd takes a bit longer to compile. Little or no
- Kai Nacke (8/9) Jul 24 2013 There is a MingW32 version of LDC for 32-bit Windows which works
- David Nadlinger (5/10) Jul 24 2013 That's surprising. In quite a few instances, LDC's codegen is even worse...
- David Nadlinger (7/12) Jul 24 2013 Never benchmark programs without at least some optimization flags (e.g.
- Chris (10/23) Jul 25 2013 I did not do any benchmarking, to be honest. I just found it
- Kagamin (2/2) Jul 25 2013 You can write a simple application, which will only parse that
- Chris (13/15) Jul 29 2013 I isolated the xml parsing and wrote a test program. It turned
- Temtaime (4/4) Jul 30 2013 I have a little question..
- Chris (107/111) Jul 30 2013 I checked it once more to make sure my code is not the problem. I
- Kagamin (6/6) Jul 30 2013 try
- John Colvin (4/115) Jul 30 2013 Are you sure that ldc hasn't actually just optimised away the
- Chris (10/13) Jul 31 2013 I've checked the asm output, as you suggested. Turns out that the
- John Colvin (12/26) Jul 31 2013 I would suggest doing the following:
- Chris (10/41) Jul 31 2013 Thanks. I've just tried it. In dmd it's there as:
- John Colvin (2/48) Jul 31 2013 Could you post the full asm for those functions?
- John Colvin (5/9) Jul 30 2013 It's not going to happen (any time soon at least).
- Temtaime (2/2) Jul 30 2013 Why not LLVM ? LLVM is open and well-optimized.
- John Colvin (12/14) Jul 30 2013 1) Because the current backend compiles code very fast, reducing
- David Nadlinger (7/13) Jul 24 2013 ldmd uses the "-singleobj" flag by default (for DMD compatibility),
- Dicebot (4/5) Jul 24 2013 That is somewhat expected result. dmd is reference
I recompiled a medium sized project with ldc2 (for the first time ever). I was surprised at how fast the program started afterwards. My program reads in a few rule files it needs to operate (including XML parsing). With dmd 2.063 the program takes 4 seconds to load, with ldc2 it is there immediately. Although I have not done any serious (i.e. exact) benchmarking here are the first obvious results: Build time dmd 2.063 : ~ 1 sec (probably less) ldc2 : 14 secs File size of executable dmd 2.063 : 2.8 MB ldc2 : 3.2 MB Startup time dmd 2.063 : 4 secs ldc2 : next to zero secs (true!) The program uses external C libraries (portaudio and libsndfile among others). However, the performance gain when using ldc2 is in the reading and parsing part of the program, which is pure D code. By the way, the program compiled with ldc2 without error at the first attempt. No complaints, no questions asked :-) PS Naive question: What's the difference between ldc2 and ldmd2?
Jul 24 2013
Chris:Although I have not done any serious (i.e. exact) benchmarking here are the first obvious results:In the last weeks Walter has written several patches for the back-end of DMD, to better optimize programs, but I didn't see benchmarks to justify those changes.PS Naive question: What's the difference between ldc2 and ldmd2?ldmd2 is just a wrapper that calls ldc2. It gives a similar interface to dmd. But it lacks profiler, linker options like -L/STACK:1000000 and more. (How do you increase stack space on Windows with ldc2?) Bye, bearophile
Jul 24 2013
On Wednesday, 24 July 2013 at 11:42:59 UTC, bearophile wrote:Chris:ldmd2 compiles the code much faster than ldc2 (~4 secs vs 14 secs). The program runs just as fast (as far as I can see at the moment).Although I have not done any serious (i.e. exact) benchmarking here are the first obvious results:In the last weeks Walter has written several patches for the back-end of DMD, to better optimize programs, but I didn't see benchmarks to justify those changes.PS Naive question: What's the difference between ldc2 and ldmd2?ldmd2 is just a wrapper that calls ldc2. It gives a similar interface to dmd. But it lacks profiler, linker options like -L/STACK:1000000 and more. (How do you increase stack space on Windows with ldc2?) Bye, bearophile
Jul 24 2013
Chris:ldmd2 compiles the code much faster than ldc2 (~4 secs vs 14 secs). The program runs just as fast (as far as I can see at the moment).The ldmd2 binary is tiny, it's not a compiler, it's just a wrapper. If the compilation time is different then they are can calling the compiler with different compilation switches. Bye, bearophile
Jul 24 2013
On Wednesday, 24 July 2013 at 12:11:50 UTC, bearophile wrote:Chris:Thanks for clarifying that. I am still impressed with the performance. Although I'm sure I could squeeze a bit more out of dmd. As of now I'm only using the garden-variety (i.e. dmd -release [files]). I didn't use any switches with ldc2, though.ldmd2 compiles the code much faster than ldc2 (~4 secs vs 14 secs). The program runs just as fast (as far as I can see at the moment).The ldmd2 binary is tiny, it's not a compiler, it's just a wrapper. If the compilation time is different then they are can calling the compiler with different compilation switches. Bye, bearophile
Jul 24 2013
On Wednesday, 24 July 2013 at 12:49:50 UTC, Chris wrote:On Wednesday, 24 July 2013 at 12:11:50 UTC, bearophile wrote:try dmd -release -noboundscheck -O -inline [files] and the same for ldmdChris:Thanks for clarifying that. I am still impressed with the performance. Although I'm sure I could squeeze a bit more out of dmd. As of now I'm only using the garden-variety (i.e. dmd -release [files]). I didn't use any switches with ldc2, though.ldmd2 compiles the code much faster than ldc2 (~4 secs vs 14 secs). The program runs just as fast (as far as I can see at the moment).The ldmd2 binary is tiny, it's not a compiler, it's just a wrapper. If the compilation time is different then they are can calling the compiler with different compilation switches. Bye, bearophile
Jul 24 2013
On Wednesday, 24 July 2013 at 13:12:46 UTC, John Colvin wrote:On Wednesday, 24 July 2013 at 12:49:50 UTC, Chris wrote:Just tried it. dmd takes a bit longer to compile. Little or no performance gain in executable. Executable with ldmd2 still lightning fast in comparison. I expected a slight gain in performance with ldc2, but nowhere near as big a gain as I actually got. Here's a new fan! However, the rest of the code (except for the loading bit) seems to work as fast with dmd as with ldc2. What's the story with LDC for Windows?On Wednesday, 24 July 2013 at 12:11:50 UTC, bearophile wrote:try dmd -release -noboundscheck -O -inline [files] and the same for ldmdChris:Thanks for clarifying that. I am still impressed with the performance. Although I'm sure I could squeeze a bit more out of dmd. As of now I'm only using the garden-variety (i.e. dmd -release [files]). I didn't use any switches with ldc2, though.ldmd2 compiles the code much faster than ldc2 (~4 secs vs 14 secs). The program runs just as fast (as far as I can see at the moment).The ldmd2 binary is tiny, it's not a compiler, it's just a wrapper. If the compilation time is different then they are can calling the compiler with different compilation switches. Bye, bearophile
Jul 24 2013
On Wednesday, 24 July 2013 at 13:29:03 UTC, Chris wrote:What's the story with LDC for Windows?There is a MingW32 version of LDC for 32-bit Windows which works pretty well. I am working on a 64-bit version using MSVC and the MC C Runtime. Because LLVM still lacks support for Structured Exception Handling this is still alpha quality. Both Windows version appeared with 0.11 and are pretty new. Kai
Jul 24 2013
On 24 Jul 2013, at 14:49, Chris wrote:Thanks for clarifying that. I am still impressed with the performance. Although I'm sure I could squeeze a bit more out of dmd. As of now I'm only using the garden-variety (i.e. dmd -release [files]). I didn't use any switches with ldc2, though.That's surprising. In quite a few instances, LDC's codegen is even worse than DMD's without any optimization flags (removing silly redundancies from the emitted IR is a thing that should be tackled in the future). David
Jul 24 2013
On 24 Jul 2013, at 14:49, Chris wrote:Thanks for clarifying that. I am still impressed with the performance. Although I'm sure I could squeeze a bit more out of dmd. As of now I'm only using the garden-variety (i.e. dmd -release [files]). I didn't use any switches with ldc2, though.Never benchmark programs without at least some optimization flags (e.g. -O for DMD). It does not allow you to draw any conclusions, unless you really want to compare the performance of the compilers for debug builds of your application (where performance usually doesn't matter, except for in realtime-ish applications). David
Jul 24 2013
On Wednesday, 24 July 2013 at 16:56:40 UTC, David Nadlinger wrote:On 24 Jul 2013, at 14:49, Chris wrote:I did not do any benchmarking, to be honest. I just found it amazing that the ldc2 compiled program was up immediately (less than a second) and performed, whereas the read-and-parse operation at start-up takes 4 seconds in the dmd compiled version. One of the 4 files is an XML file that I parse with the bad old std.xml module. The remaining 3 are simple text files (no mark up) with simple regex parsing. Using the optimization switches (see earlier comment) with dmd did not help. I wonder why that is. Is it my code or dmd?Thanks for clarifying that. I am still impressed with the performance. Although I'm sure I could squeeze a bit more out of dmd. As of now I'm only using the garden-variety (i.e. dmd -release [files]). I didn't use any switches with ldc2, though.Never benchmark programs without at least some optimization flags (e.g. -O for DMD). It does not allow you to draw any conclusions, unless you really want to compare the performance of the compilers for debug builds of your application (where performance usually doesn't matter, except for in realtime-ish applications). David
Jul 25 2013
You can write a simple application, which will only parse that xml file and see, how it performs.
Jul 25 2013
On Friday, 26 July 2013 at 05:05:54 UTC, Kagamin wrote:You can write a simple application, which will only parse that xml file and see, how it performs.I isolated the xml parsing and wrote a test program. It turned out that the xml parsing is the culprit. The average after running it 0..10 times in a loop (if I ran it 100 times, it wouldn't look much different): dmd 2.063 Average time: 2233 msecs ldc2 Average time: 10.2 msecs I used StopWatch based on this example (http://dlang.org/phobos/std_datetime.html#StopWatch). Running on Ubuntu 12.04 LTS, Intel Core i7-2760QM CPU 2.40GHz × 8, 32-bit
Jul 29 2013
I have a little question.. Why Digital Mars doesn't uses LLVM for backend and develops their own performance killer ? Is someone contact with them to drop out their backend ?
Jul 30 2013
On Tuesday, 30 July 2013 at 09:10:24 UTC, Temtaime wrote:I have a little question.. Why Digital Mars doesn't uses LLVM for backend and develops their own performance killer ? Is someone contact with them to drop out their backend ?I checked it once more to make sure my code is not the problem. I used the xml parsing example on this page http://dlang.org/phobos/std_xml.html (the second example). I created a dummy "books.xml" file with one entry (see below for source). The result: Loop: 0..100 DMD 2.063 dmd -release -noboundscheck -O -inline Average time: 41.88 msecs LDC2 (latest version, no flags) ldc2 [files] Average time: 0.01 msecs ------ D Code ------- import std.xml; import std.stdio; import std.string; import std.datetime; void main() { StopWatch sw; enum n = 100; TickDuration[n] times; TickDuration last = TickDuration.from!"seconds"(0); foreach (i; 0..n) { sw.start(); parse(); //writeln("Time ", sw.peek().msecs, " [ms]"); sw.stop(); times[i] = sw.peek() - last; last = sw.peek(); } real sum = 0; // To know the number of seconds, // use properties of TickDuration. // (seconds, msecs, usecs, hnsecs) foreach(t; times) { sum += t.msecs; } writeln("Average time: ", sum/n, " msecs"); } struct Book { string id; string author; string title; string genre; string price; string pubDate; string description; } void parse() { string s = cast(string)std.file.read("books.xml"); // Check for well-formedness check(s); // Take it apart Book[] books; auto xml = new DocumentParser(s); xml.onStartTag["book"] = (ElementParser xml) { Book book; book.id = xml.tag.attr["id"]; xml.onEndTag["author"] = (in Element e) { book.author = e.text(); }; xml.onEndTag["title"] = (in Element e) { book.title = e.text(); }; xml.onEndTag["genre"] = (in Element e) { book.genre = e.text(); }; xml.onEndTag["price"] = (in Element e) { book.price = e.text(); }; xml.onEndTag["publish-date"] = (in Element e) { book.pubDate = e.text(); }; xml.onEndTag["description"] = (in Element e) { book.description = e.text(); }; xml.parse(); books ~= book; }; xml.parse(); // Put it back together again; auto doc = new Document(new Tag("catalog")); foreach(book;books) { auto element = new Element("book"); element.tag.attr["id"] = book.id; element ~= new Element("author", book.author); element ~= new Element("title", book.title); element ~= new Element("genre", book.genre); element ~= new Element("price", book.price); element ~= new Element("publish-date",book.pubDate); element ~= new Element("description", book.description); doc ~= element; } // Pretty-print it //writefln(join(doc.pretty(3),"\n")); } ------ XML FILE ------ <?xml version="1.0" encoding="UTF-8"?> <books> <book id="1-23456789"> <author>Count Dracula</author> <title>D for Vampires</title> <genre>Programming</genre> <price>66.6</price> <publish-date>1897</publish-date> <description>Tomb programming with D</description> </book> </books>
Jul 30 2013
try --- import core.memory; GC.disable(); --- Maybe GC lags?
Jul 30 2013
On Tuesday, 30 July 2013 at 09:21:38 UTC, Chris wrote:On Tuesday, 30 July 2013 at 09:10:24 UTC, Temtaime wrote:Are you sure that ldc hasn't actually just optimised away the whole of parse()? Check to asm to be sure.I have a little question.. Why Digital Mars doesn't uses LLVM for backend and develops their own performance killer ? Is someone contact with them to drop out their backend ?I checked it once more to make sure my code is not the problem. I used the xml parsing example on this page http://dlang.org/phobos/std_xml.html (the second example). I created a dummy "books.xml" file with one entry (see below for source). The result: Loop: 0..100 DMD 2.063 dmd -release -noboundscheck -O -inline Average time: 41.88 msecs LDC2 (latest version, no flags) ldc2 [files] Average time: 0.01 msecs ------ D Code ------- import std.xml; import std.stdio; import std.string; import std.datetime; void main() { StopWatch sw; enum n = 100; TickDuration[n] times; TickDuration last = TickDuration.from!"seconds"(0); foreach (i; 0..n) { sw.start(); parse(); //writeln("Time ", sw.peek().msecs, " [ms]"); sw.stop(); times[i] = sw.peek() - last; last = sw.peek(); } real sum = 0; // To know the number of seconds, // use properties of TickDuration. // (seconds, msecs, usecs, hnsecs) foreach(t; times) { sum += t.msecs; } writeln("Average time: ", sum/n, " msecs"); } struct Book { string id; string author; string title; string genre; string price; string pubDate; string description; } void parse() { string s = cast(string)std.file.read("books.xml"); // Check for well-formedness check(s); // Take it apart Book[] books; auto xml = new DocumentParser(s); xml.onStartTag["book"] = (ElementParser xml) { Book book; book.id = xml.tag.attr["id"]; xml.onEndTag["author"] = (in Element e) { book.author = e.text(); }; xml.onEndTag["title"] = (in Element e) { book.title = e.text(); }; xml.onEndTag["genre"] = (in Element e) { book.genre = e.text(); }; xml.onEndTag["price"] = (in Element e) { book.price = e.text(); }; xml.onEndTag["publish-date"] = (in Element e) { book.pubDate = e.text(); }; xml.onEndTag["description"] = (in Element e) { book.description = e.text(); }; xml.parse(); books ~= book; }; xml.parse(); // Put it back together again; auto doc = new Document(new Tag("catalog")); foreach(book;books) { auto element = new Element("book"); element.tag.attr["id"] = book.id; element ~= new Element("author", book.author); element ~= new Element("title", book.title); element ~= new Element("genre", book.genre); element ~= new Element("price", book.price); element ~= new Element("publish-date",book.pubDate); element ~= new Element("description", book.description); doc ~= element; } // Pretty-print it //writefln(join(doc.pretty(3),"\n")); } ------ XML FILE ------ <?xml version="1.0" encoding="UTF-8"?> <books> <book id="1-23456789"> <author>Count Dracula</author> <title>D for Vampires</title> <genre>Programming</genre> <price>66.6</price> <publish-date>1897</publish-date> <description>Tomb programming with D</description> </book> </books>
Jul 30 2013
On Tuesday, 30 July 2013 at 16:43:52 UTC, John Colvin wrote:Are you sure that ldc hasn't actually just optimised away the whole of parse()? Check to asm to be sure.I've checked the asm output, as you suggested. Turns out that the DMD version has 94,220 lines and calls parse() for the first time on line 3278 like so: call _D10xmlparser25parseFZv PC32 The LDC version has 14,347 line and calls parse() for the first time on line 155 like so: call _D10xmlparser25parseFZv However, I'm no expert on asm so it's anyone's guess but mine. But I'm willing to learn.
Jul 31 2013
On Wednesday, 31 July 2013 at 08:44:30 UTC, Chris wrote:On Tuesday, 30 July 2013 at 16:43:52 UTC, John Colvin wrote:I would suggest doing the following: dmd -c file.d -offiledmd.o ldc2 -c file.d -of=fileldc.o objdump -M intel -dr filedmd.o > filedmd.s objdump -M intel -dr fileldc.o > fileldc.s Then you'll have all the info you need and hopefully a lot less of what you don't need What you're looking for is the definition of parse, like 0000000000000050 <_D10xmlparser25parseFZv>: or similar and then seeing if there's anything much in the function body below.Are you sure that ldc hasn't actually just optimised away the whole of parse()? Check to asm to be sure.I've checked the asm output, as you suggested. Turns out that the DMD version has 94,220 lines and calls parse() for the first time on line 3278 like so: call _D10xmlparser25parseFZv PC32 The LDC version has 14,347 line and calls parse() for the first time on line 155 like so: call _D10xmlparser25parseFZv However, I'm no expert on asm so it's anyone's guess but mine. But I'm willing to learn.
Jul 31 2013
On Wednesday, 31 July 2013 at 11:13:13 UTC, John Colvin wrote:On Wednesday, 31 July 2013 at 08:44:30 UTC, Chris wrote:Thanks. I've just tried it. In dmd it's there as: 00000000 <_D10xmlparser25parseFZv>: [...] In ldc too, looks only a bit different. There are: 000002b0 <_D10xmlparser25parseFZv>: [...] 00000b60 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv>: [...]On Tuesday, 30 July 2013 at 16:43:52 UTC, John Colvin wrote:I would suggest doing the following: dmd -c file.d -offiledmd.o ldc2 -c file.d -of=fileldc.o objdump -M intel -dr filedmd.o > filedmd.s objdump -M intel -dr fileldc.o > fileldc.s Then you'll have all the info you need and hopefully a lot less of what you don't need What you're looking for is the definition of parse, like 0000000000000050 <_D10xmlparser25parseFZv>: or similar and then seeing if there's anything much in the function body below.Are you sure that ldc hasn't actually just optimised away the whole of parse()? Check to asm to be sure.I've checked the asm output, as you suggested. Turns out that the DMD version has 94,220 lines and calls parse() for the first time on line 3278 like so: call _D10xmlparser25parseFZv PC32 The LDC version has 14,347 line and calls parse() for the first time on line 155 like so: call _D10xmlparser25parseFZv However, I'm no expert on asm so it's anyone's guess but mine. But I'm willing to learn.
Jul 31 2013
On Wednesday, 31 July 2013 at 11:33:01 UTC, Chris wrote:On Wednesday, 31 July 2013 at 11:13:13 UTC, John Colvin wrote:Could you post the full asm for those functions?On Wednesday, 31 July 2013 at 08:44:30 UTC, Chris wrote:Thanks. I've just tried it. In dmd it's there as: 00000000 <_D10xmlparser25parseFZv>: [...] In ldc too, looks only a bit different. There are: 000002b0 <_D10xmlparser25parseFZv>: [...] 00000b60 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv>: [...]On Tuesday, 30 July 2013 at 16:43:52 UTC, John Colvin wrote:I would suggest doing the following: dmd -c file.d -offiledmd.o ldc2 -c file.d -of=fileldc.o objdump -M intel -dr filedmd.o > filedmd.s objdump -M intel -dr fileldc.o > fileldc.s Then you'll have all the info you need and hopefully a lot less of what you don't need What you're looking for is the definition of parse, like 0000000000000050 <_D10xmlparser25parseFZv>: or similar and then seeing if there's anything much in the function body below.Are you sure that ldc hasn't actually just optimised away the whole of parse()? Check to asm to be sure.I've checked the asm output, as you suggested. Turns out that the DMD version has 94,220 lines and calls parse() for the first time on line 3278 like so: call _D10xmlparser25parseFZv PC32 The LDC version has 14,347 line and calls parse() for the first time on line 155 like so: call _D10xmlparser25parseFZv However, I'm no expert on asm so it's anyone's guess but mine. But I'm willing to learn.
Jul 31 2013
The dmd version ------- DMD -------------- Disassembly of section .text._D10xmlparser25parseFZv: 00000000 <_D10xmlparser25parseFZv>: 0: 55 push ebp 1: 8b ec mov ebp,esp 3: 81 ec 94 00 00 00 sub esp,0x94 9: 53 push ebx a: 56 push esi b: 57 push edi c: 6a 0c push 0xc e: e8 fc ff ff ff call f <_D10xmlparser25parseFZv+0xf> f: R_386_PC32 _d_allocmemory 13: 89 85 70 ff ff ff mov DWORD PTR [ebp-0x90],eax 19: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 1f: ff 35 54 00 00 00 push DWORD PTR ds:0x54 21: R_386_32 .rodata 25: ff 35 50 00 00 00 push DWORD PTR ds:0x50 27: R_386_32 .rodata 2b: b8 ff ff ff ff mov eax,0xffffffff 30: e8 fc ff ff ff call 31 <_D10xmlparser25parseFZv+0x31> 31: R_386_PC32 _D3std4file4readFxAakZAv 35: 89 85 78 ff ff ff mov DWORD PTR [ebp-0x88],eax 3b: 89 95 7c ff ff ff mov DWORD PTR [ebp-0x84],edx 41: 52 push edx 42: 50 push eax 43: e8 fc ff ff ff call 44 <_D10xmlparser25parseFZv+0x44> 44: R_386_PC32 _D3std3xml5checkFAyaZv 48: 8b 8d 70 ff ff ff mov ecx,DWORD PTR [ebp-0x90] 4e: 8d 51 04 lea edx,[ecx+0x4] 51: c7 02 00 00 00 00 mov DWORD PTR [edx],0x0 57: c7 42 04 00 00 00 00 mov DWORD PTR [edx+0x4],0x0 5e: bb 00 00 00 00 mov ebx,0x0 5f: R_386_32 _D3std3xml14DocumentParser7__ClassZ 63: 53 push ebx 64: 89 95 6c ff ff ff mov DWORD PTR [ebp-0x94],edx 6a: e8 fc ff ff ff call 6b <_D10xmlparser25parseFZv+0x6b> 6b: R_386_PC32 _d_newclass 6f: ff b5 7c ff ff ff push DWORD PTR [ebp-0x84] 75: ff b5 78 ff ff ff push DWORD PTR [ebp-0x88] 7b: e8 fc ff ff ff call 7c <_D10xmlparser25parseFZv+0x7c> 7c: R_386_PC32 _D3std3xml14DocumentParser6__ctorMFAyaZC3std3xml14DocumentParser 80: 89 45 88 mov DWORD PTR [ebp-0x78],eax 83: 8b b5 70 ff ff ff mov esi,DWORD PTR [ebp-0x90] 89: b9 00 00 00 00 mov ecx,0x0 8a: R_386_32 _D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv 8e: 89 75 90 mov DWORD PTR [ebp-0x70],esi 91: 89 4d 94 mov DWORD PTR [ebp-0x6c],ecx 94: 8d 7d 90 lea edi,[ebp-0x70] 97: ba 60 00 00 00 mov edx,0x60 98: R_386_32 .rodata 9c: 52 push edx 9d: 6a 08 push 0x8 9f: bb 00 00 00 00 mov ebx,0x0 a0: R_386_32 _D11TypeInfo_Aa6__initZ a4: 53 push ebx a5: 8d 70 48 lea esi,[eax+0x48] a8: 56 push esi a9: e8 fc ff ff ff call aa <_D10xmlparser25parseFZv+0xaa> aa: R_386_PC32 _aaGetX ae: 89 45 98 mov DWORD PTR [ebp-0x68],eax b1: 83 c4 10 add esp,0x10 b4: 85 c0 test eax,eax b6: 75 0a jne c2 <_D10xmlparser25parseFZv+0xc2> b8: b8 33 00 00 00 mov eax,0x33 bd: e8 fc ff ff ff call be <_D10xmlparser25parseFZv+0xbe> be: R_386_PC32 _D10xmlparser27__arrayZ c2: 8b 57 04 mov edx,DWORD PTR [edi+0x4] c5: 8b 07 mov eax,DWORD PTR [edi] c7: 8b 4d 98 mov ecx,DWORD PTR [ebp-0x68] ca: 89 01 mov DWORD PTR [ecx],eax cc: 89 51 04 mov DWORD PTR [ecx+0x4],edx cf: 8b 45 88 mov eax,DWORD PTR [ebp-0x78] d2: 8b 18 mov ebx,DWORD PTR [eax] d4: ff 53 30 call DWORD PTR [ebx+0x30] d7: be 00 00 00 00 mov esi,0x0 d8: R_386_32 _D3std3xml8Document7__ClassZ dc: 56 push esi dd: e8 fc ff ff ff call de <_D10xmlparser25parseFZv+0xde> de: R_386_PC32 _d_newclass e2: 89 45 a0 mov DWORD PTR [ebp-0x60],eax e5: ba 00 00 00 00 mov edx,0x0 e6: R_386_32 _D3std3xml3Tag7__ClassZ ea: 52 push edx eb: e8 fc ff ff ff call ec <_D10xmlparser25parseFZv+0xec> ec: R_386_PC32 _d_newclass f0: 83 c4 04 add esp,0x4 f3: ff 35 74 00 00 00 push DWORD PTR ds:0x74 f5: R_386_32 .rodata f9: ff 35 70 00 00 00 push DWORD PTR ds:0x70 fb: R_386_32 .rodata ff: 6a 00 push 0x0 101: e8 fc ff ff ff call 102 <_D10xmlparser25parseFZv+0x102> 102: R_386_PC32 _D3std3xml3Tag6__ctorMFAyaE3std3xml7TagTypeZC3std3xml3Tag 106: 50 push eax 107: 8b 45 a0 mov eax,DWORD PTR [ebp-0x60] 10a: e8 fc ff ff ff call 10b <_D10xmlparser25parseFZv+0x10b> 10b: R_386_PC32 _D3std3xml8Document6__ctorMFxC3std3xml3TagZC3std3xml8Document 10f: 89 45 9c mov DWORD PTR [ebp-0x64],eax 112: 8b 8d 6c ff ff ff mov ecx,DWORD PTR [ebp-0x94] 118: 8b 51 04 mov edx,DWORD PTR [ecx+0x4] 11b: 8b 01 mov eax,DWORD PTR [ecx] 11d: 89 45 a8 mov DWORD PTR [ebp-0x58],eax 120: 89 55 ac mov DWORD PTR [ebp-0x54],edx 123: c7 45 b0 00 00 00 00 mov DWORD PTR [ebp-0x50],0x0 12a: 83 c4 0c add esp,0xc 12d: 8b 5d b0 mov ebx,DWORD PTR [ebp-0x50] 130: 3b 5d a8 cmp ebx,DWORD PTR [ebp-0x58] 133: 0f 83 99 01 00 00 jae 2d2 <_D10xmlparser25parseFZv+0x2d2> 139: 8b 75 b0 mov esi,DWORD PTR [ebp-0x50] 13c: 3b 75 a8 cmp esi,DWORD PTR [ebp-0x58] 13f: 72 0a jb 14b <_D10xmlparser25parseFZv+0x14b> 141: b8 47 00 00 00 mov eax,0x47 146: e8 fc ff ff ff call 147 <_D10xmlparser25parseFZv+0x147> 147: R_386_PC32 _D10xmlparser27__arrayZ 14b: 6b f6 38 imul esi,esi,0x38 14e: 8b 55 ac mov edx,DWORD PTR [ebp-0x54] 151: 8b 45 a8 mov eax,DWORD PTR [ebp-0x58] 154: 03 f2 add esi,edx 156: 8d 7d c0 lea edi,[ebp-0x40] 159: b9 0e 00 00 00 mov ecx,0xe 15e: f3 a5 rep movs DWORD PTR es:[edi],DWORD PTR ds:[esi] 160: b9 00 00 00 00 mov ecx,0x0 161: R_386_32 _D3std3xml7Element7__ClassZ 165: 51 push ecx 166: e8 fc ff ff ff call 167 <_D10xmlparser25parseFZv+0x167> 167: R_386_PC32 _d_newclass 16b: ff 35 64 00 00 00 push DWORD PTR ds:0x64 16d: R_386_32 .rodata 171: ff 35 60 00 00 00 push DWORD PTR ds:0x60 173: R_386_32 .rodata 177: 6a 00 push 0x0 179: 6a 00 push 0x0 17b: e8 fc ff ff ff call 17c <_D10xmlparser25parseFZv+0x17c> 17c: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 180: 89 45 f8 mov DWORD PTR [ebp-0x8],eax 183: 8d 5d c0 lea ebx,[ebp-0x40] 186: be 80 00 00 00 mov esi,0x80 187: R_386_32 .rodata 18b: 56 push esi 18c: 6a 08 push 0x8 18e: ba 00 00 00 00 mov edx,0x0 18f: R_386_32 _D11TypeInfo_Aa6__initZ 193: 52 push edx 194: 8b 78 08 mov edi,DWORD PTR [eax+0x8] 197: 83 c7 14 add edi,0x14 19a: 57 push edi 19b: e8 fc ff ff ff call 19c <_D10xmlparser25parseFZv+0x19c> 19c: R_386_PC32 _aaGetX 1a0: 89 45 fc mov DWORD PTR [ebp-0x4],eax 1a3: 83 c4 10 add esp,0x10 1a6: 85 c0 test eax,eax 1a8: 75 0a jne 1b4 <_D10xmlparser25parseFZv+0x1b4> 1aa: b8 4a 00 00 00 mov eax,0x4a 1af: e8 fc ff ff ff call 1b0 <_D10xmlparser25parseFZv+0x1b0> 1b0: R_386_PC32 _D10xmlparser27__arrayZ 1b4: 8b 53 04 mov edx,DWORD PTR [ebx+0x4] 1b7: 8b 03 mov eax,DWORD PTR [ebx] 1b9: 8b 4d fc mov ecx,DWORD PTR [ebp-0x4] 1bc: 89 01 mov DWORD PTR [ecx],eax 1be: 89 51 04 mov DWORD PTR [ecx+0x4],edx 1c1: bb 00 00 00 00 mov ebx,0x0 1c2: R_386_32 _D3std3xml7Element7__ClassZ 1c6: 53 push ebx 1c7: e8 fc ff ff ff call 1c8 <_D10xmlparser25parseFZv+0x1c8> 1c8: R_386_PC32 _d_newclass 1cc: 83 c4 04 add esp,0x4 1cf: ff 35 94 00 00 00 push DWORD PTR ds:0x94 1d1: R_386_32 .rodata 1d5: ff 35 90 00 00 00 push DWORD PTR ds:0x90 1d7: R_386_32 .rodata 1db: ff 75 cc push DWORD PTR [ebp-0x34] 1de: ff 75 c8 push DWORD PTR [ebp-0x38] 1e1: e8 fc ff ff ff call 1e2 <_D10xmlparser25parseFZv+0x1e2> 1e2: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 1e6: 50 push eax 1e7: 8b 45 f8 mov eax,DWORD PTR [ebp-0x8] 1ea: 8b 30 mov esi,DWORD PTR [eax] 1ec: ff 56 2c call DWORD PTR [esi+0x2c] 1ef: 53 push ebx 1f0: e8 fc ff ff ff call 1f1 <_D10xmlparser25parseFZv+0x1f1> 1f1: R_386_PC32 _d_newclass 1f5: 83 c4 04 add esp,0x4 1f8: ff 35 a4 00 00 00 push DWORD PTR ds:0xa4 1fa: R_386_32 .rodata 1fe: ff 35 a0 00 00 00 push DWORD PTR ds:0xa0 200: R_386_32 .rodata 204: ff 75 d4 push DWORD PTR [ebp-0x2c] 207: ff 75 d0 push DWORD PTR [ebp-0x30] 20a: e8 fc ff ff ff call 20b <_D10xmlparser25parseFZv+0x20b> 20b: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 20f: 50 push eax 210: 8b 45 f8 mov eax,DWORD PTR [ebp-0x8] 213: 8b 08 mov ecx,DWORD PTR [eax] 215: ff 51 2c call DWORD PTR [ecx+0x2c] 218: 53 push ebx 219: e8 fc ff ff ff call 21a <_D10xmlparser25parseFZv+0x21a> 21a: R_386_PC32 _d_newclass 21e: 83 c4 04 add esp,0x4 221: ff 35 b4 00 00 00 push DWORD PTR ds:0xb4 223: R_386_32 .rodata 227: ff 35 b0 00 00 00 push DWORD PTR ds:0xb0 229: R_386_32 .rodata 22d: ff 75 dc push DWORD PTR [ebp-0x24] 230: ff 75 d8 push DWORD PTR [ebp-0x28] 233: e8 fc ff ff ff call 234 <_D10xmlparser25parseFZv+0x234> 234: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 238: 50 push eax 239: 8b 45 f8 mov eax,DWORD PTR [ebp-0x8] 23c: 8b 10 mov edx,DWORD PTR [eax] 23e: ff 52 2c call DWORD PTR [edx+0x2c] 241: 53 push ebx 242: e8 fc ff ff ff call 243 <_D10xmlparser25parseFZv+0x243> 243: R_386_PC32 _d_newclass 247: 83 c4 04 add esp,0x4 24a: ff 35 c4 00 00 00 push DWORD PTR ds:0xc4 24c: R_386_32 .rodata 250: ff 35 c0 00 00 00 push DWORD PTR ds:0xc0 252: R_386_32 .rodata 256: ff 75 e4 push DWORD PTR [ebp-0x1c] 259: ff 75 e0 push DWORD PTR [ebp-0x20] 25c: e8 fc ff ff ff call 25d <_D10xmlparser25parseFZv+0x25d> 25d: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 261: 50 push eax 262: 8b 45 f8 mov eax,DWORD PTR [ebp-0x8] 265: 8b 30 mov esi,DWORD PTR [eax] 267: ff 56 2c call DWORD PTR [esi+0x2c] 26a: 53 push ebx 26b: e8 fc ff ff ff call 26c <_D10xmlparser25parseFZv+0x26c> 26c: R_386_PC32 _d_newclass 270: 83 c4 04 add esp,0x4 273: ff 35 dc 00 00 00 push DWORD PTR ds:0xdc 275: R_386_32 .rodata 279: ff 35 d8 00 00 00 push DWORD PTR ds:0xd8 27b: R_386_32 .rodata 27f: ff 75 ec push DWORD PTR [ebp-0x14] 282: ff 75 e8 push DWORD PTR [ebp-0x18] 285: e8 fc ff ff ff call 286 <_D10xmlparser25parseFZv+0x286> 286: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 28a: 50 push eax 28b: 8b 45 f8 mov eax,DWORD PTR [ebp-0x8] 28e: 8b 08 mov ecx,DWORD PTR [eax] 290: ff 51 2c call DWORD PTR [ecx+0x2c] 293: 53 push ebx 294: e8 fc ff ff ff call 295 <_D10xmlparser25parseFZv+0x295> 295: R_386_PC32 _d_newclass 299: 83 c4 04 add esp,0x4 29c: ff 35 f4 00 00 00 push DWORD PTR ds:0xf4 29e: R_386_32 .rodata 2a2: ff 35 f0 00 00 00 push DWORD PTR ds:0xf0 2a4: R_386_32 .rodata 2a8: ff 75 f4 push DWORD PTR [ebp-0xc] 2ab: ff 75 f0 push DWORD PTR [ebp-0x10] 2ae: e8 fc ff ff ff call 2af <_D10xmlparser25parseFZv+0x2af> 2af: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 2b3: 50 push eax 2b4: 8b 45 f8 mov eax,DWORD PTR [ebp-0x8] 2b7: 8b 10 mov edx,DWORD PTR [eax] 2b9: ff 52 2c call DWORD PTR [edx+0x2c] 2bc: ff 75 f8 push DWORD PTR [ebp-0x8] 2bf: 8b 45 9c mov eax,DWORD PTR [ebp-0x64] 2c2: 8b 18 mov ebx,DWORD PTR [eax] 2c4: ff 53 2c call DWORD PTR [ebx+0x2c] 2c7: 83 c4 04 add esp,0x4 2ca: ff 45 b0 inc DWORD PTR [ebp-0x50] 2cd: e9 5b fe ff ff jmp 12d <_D10xmlparser25parseFZv+0x12d> 2d2: 5f pop edi 2d3: 5e pop esi 2d4: 5b pop ebx 2d5: c9 leave 2d6: c3 ret 2d7: 90 nop Disassembly of section .text._D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv: 00000000 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv>: 0: 55 push ebp 1: 8b ec mov ebp,esp 3: 81 ec b8 00 00 00 sub esp,0xb8 9: 53 push ebx a: 56 push esi b: 57 push edi c: 89 45 fc mov DWORD PTR [ebp-0x4],eax f: 6a 3c push 0x3c 11: e8 fc ff ff ff call 12 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x12> 12: R_386_PC32 _d_allocmemory 16: 89 85 50 ff ff ff mov DWORD PTR [ebp-0xb0],eax 1c: 8b 4d fc mov ecx,DWORD PTR [ebp-0x4] 1f: 89 08 mov DWORD PTR [eax],ecx 21: b9 0e 00 00 00 mov ecx,0xe 26: 31 c0 xor eax,eax 28: 8b 95 50 ff ff ff mov edx,DWORD PTR [ebp-0xb0] 2e: 8d 7a 04 lea edi,[edx+0x4] 31: 89 bd 48 ff ff ff mov DWORD PTR [ebp-0xb8],edi 37: f3 ab rep stos DWORD PTR es:[edi],eax 39: bb 80 00 00 00 mov ebx,0x80 3a: R_386_32 .rodata 3e: 53 push ebx 3f: 6a 08 push 0x8 41: b9 00 00 00 00 mov ecx,0x0 42: R_386_32 _D11TypeInfo_Aa6__initZ 46: 51 push ecx 47: 8b 45 08 mov eax,DWORD PTR [ebp+0x8] 4a: 8b 30 mov esi,DWORD PTR [eax] 4c: ff 56 14 call DWORD PTR [esi+0x14] 4f: ff 70 14 push DWORD PTR [eax+0x14] 52: e8 fc ff ff ff call 53 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x53> 53: R_386_PC32 _aaGetRvalueX 57: 89 45 98 mov DWORD PTR [ebp-0x68],eax 5a: 83 c4 10 add esp,0x10 5d: 85 c0 test eax,eax 5f: 75 0a jne 6b <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x6b> 61: b8 36 00 00 00 mov eax,0x36 66: e8 fc ff ff ff call 67 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x67> 67: R_386_PC32 _D10xmlparser27__arrayZ 6b: 8b 55 98 mov edx,DWORD PTR [ebp-0x68] 6e: 8b 02 mov eax,DWORD PTR [edx] 70: 8b 52 04 mov edx,DWORD PTR [edx+0x4] 73: 8b 8d 48 ff ff ff mov ecx,DWORD PTR [ebp-0xb8] 79: 89 01 mov DWORD PTR [ecx],eax 7b: 89 51 04 mov DWORD PTR [ecx+0x4],edx 7e: 8b 9d 50 ff ff ff mov ebx,DWORD PTR [ebp-0xb0] 84: ba 00 00 00 00 mov edx,0x0 85: R_386_32 _D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv9__lambda2MFxC3std3xml7ElementZv 89: 89 5d a0 mov DWORD PTR [ebp-0x60],ebx 8c: 89 55 a4 mov DWORD PTR [ebp-0x5c],edx 8f: 8d 75 a0 lea esi,[ebp-0x60] 92: b8 90 00 00 00 mov eax,0x90 93: R_386_32 .rodata 97: 50 push eax 98: 6a 08 push 0x8 9a: bf 00 00 00 00 mov edi,0x0 9b: R_386_32 _D11TypeInfo_Aa6__initZ 9f: 57 push edi a0: 8b 5d 08 mov ebx,DWORD PTR [ebp+0x8] a3: 8d 53 4c lea edx,[ebx+0x4c] a6: 52 push edx a7: 89 95 4c ff ff ff mov DWORD PTR [ebp-0xb4],edx ad: e8 fc ff ff ff call ae <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0xae> ae: R_386_PC32 _aaGetX b2: 89 45 a8 mov DWORD PTR [ebp-0x58],eax b5: 83 c4 10 add esp,0x10 b8: 85 c0 test eax,eax ba: 75 0a jne c6 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0xc6> bc: b8 38 00 00 00 mov eax,0x38 c1: e8 fc ff ff ff call c2 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0xc2> c2: R_386_PC32 _D10xmlparser27__arrayZ c6: 8b 56 04 mov edx,DWORD PTR [esi+0x4] c9: 8b 06 mov eax,DWORD PTR [esi] cb: 8b 4d a8 mov ecx,DWORD PTR [ebp-0x58] ce: 89 01 mov DWORD PTR [ecx],eax d0: 89 51 04 mov DWORD PTR [ecx+0x4],edx d3: 8b b5 50 ff ff ff mov esi,DWORD PTR [ebp-0xb0] d9: ba 00 00 00 00 mov edx,0x0 da: R_386_32 _D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv9__lambda3MFxC3std3xml7ElementZv de: 89 75 b0 mov DWORD PTR [ebp-0x50],esi e1: 89 55 b4 mov DWORD PTR [ebp-0x4c],edx e4: 8d 45 b0 lea eax,[ebp-0x50] e7: 89 45 ac mov DWORD PTR [ebp-0x54],eax ea: b9 a0 00 00 00 mov ecx,0xa0 eb: R_386_32 .rodata ef: 51 push ecx f0: 6a 08 push 0x8 f2: 57 push edi f3: 8b b5 4c ff ff ff mov esi,DWORD PTR [ebp-0xb4] f9: 56 push esi fa: e8 fc ff ff ff call fb <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0xfb> fb: R_386_PC32 _aaGetX ff: 89 45 b8 mov DWORD PTR [ebp-0x48],eax 102: 83 c4 10 add esp,0x10 105: 85 c0 test eax,eax 107: 75 0a jne 113 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x113> 109: b8 39 00 00 00 mov eax,0x39 10e: e8 fc ff ff ff call 10f <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x10f> 10f: R_386_PC32 _D10xmlparser27__arrayZ 113: 8b 55 ac mov edx,DWORD PTR [ebp-0x54] 116: 8b 02 mov eax,DWORD PTR [edx] 118: 8b 52 04 mov edx,DWORD PTR [edx+0x4] 11b: 8b 4d b8 mov ecx,DWORD PTR [ebp-0x48] 11e: 89 01 mov DWORD PTR [ecx],eax 120: 89 51 04 mov DWORD PTR [ecx+0x4],edx 123: 8b 85 50 ff ff ff mov eax,DWORD PTR [ebp-0xb0] 129: ba 00 00 00 00 mov edx,0x0 12a: R_386_32 _D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv9__lambda4MFxC3std3xml7ElementZv 12e: 89 45 c0 mov DWORD PTR [ebp-0x40],eax 131: 89 55 c4 mov DWORD PTR [ebp-0x3c],edx 134: 8d 4d c0 lea ecx,[ebp-0x40] 137: 89 4d bc mov DWORD PTR [ebp-0x44],ecx 13a: b8 b0 00 00 00 mov eax,0xb0 13b: R_386_32 .rodata 13f: 50 push eax 140: 6a 08 push 0x8 142: 57 push edi 143: 56 push esi 144: e8 fc ff ff ff call 145 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x145> 145: R_386_PC32 _aaGetX 149: 89 45 c8 mov DWORD PTR [ebp-0x38],eax 14c: 83 c4 10 add esp,0x10 14f: 85 c0 test eax,eax 151: 75 0a jne 15d <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x15d> 153: b8 3a 00 00 00 mov eax,0x3a 158: e8 fc ff ff ff call 159 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x159> 159: R_386_PC32 _D10xmlparser27__arrayZ 15d: 8b 55 bc mov edx,DWORD PTR [ebp-0x44] 160: 8b 02 mov eax,DWORD PTR [edx] 162: 8b 52 04 mov edx,DWORD PTR [edx+0x4] 165: 8b 4d c8 mov ecx,DWORD PTR [ebp-0x38] 168: 89 01 mov DWORD PTR [ecx],eax 16a: 89 51 04 mov DWORD PTR [ecx+0x4],edx 16d: 8b 85 50 ff ff ff mov eax,DWORD PTR [ebp-0xb0] 173: ba 00 00 00 00 mov edx,0x0 174: R_386_32 _D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv9__lambda5MFxC3std3xml7ElementZv 178: 89 45 d0 mov DWORD PTR [ebp-0x30],eax 17b: 89 55 d4 mov DWORD PTR [ebp-0x2c],edx 17e: 8d 4d d0 lea ecx,[ebp-0x30] 181: 89 4d cc mov DWORD PTR [ebp-0x34],ecx 184: b8 c0 00 00 00 mov eax,0xc0 185: R_386_32 .rodata 189: 50 push eax 18a: 6a 08 push 0x8 18c: 57 push edi 18d: 56 push esi 18e: e8 fc ff ff ff call 18f <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x18f> 18f: R_386_PC32 _aaGetX 193: 89 45 d8 mov DWORD PTR [ebp-0x28],eax 196: 83 c4 10 add esp,0x10 199: 85 c0 test eax,eax 19b: 75 0a jne 1a7 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x1a7> 19d: b8 3b 00 00 00 mov eax,0x3b 1a2: e8 fc ff ff ff call 1a3 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x1a3> 1a3: R_386_PC32 _D10xmlparser27__arrayZ 1a7: 8b 55 cc mov edx,DWORD PTR [ebp-0x34] 1aa: 8b 02 mov eax,DWORD PTR [edx] 1ac: 8b 52 04 mov edx,DWORD PTR [edx+0x4] 1af: 8b 4d d8 mov ecx,DWORD PTR [ebp-0x28] 1b2: 89 01 mov DWORD PTR [ecx],eax 1b4: 89 51 04 mov DWORD PTR [ecx+0x4],edx 1b7: 8b 85 50 ff ff ff mov eax,DWORD PTR [ebp-0xb0] 1bd: ba 00 00 00 00 mov edx,0x0 1be: R_386_32 _D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv9__lambda6MFxC3std3xml7ElementZv 1c2: 89 45 e0 mov DWORD PTR [ebp-0x20],eax 1c5: 89 55 e4 mov DWORD PTR [ebp-0x1c],edx 1c8: 8d 4d e0 lea ecx,[ebp-0x20] 1cb: 89 4d dc mov DWORD PTR [ebp-0x24],ecx 1ce: b8 d8 00 00 00 mov eax,0xd8 1cf: R_386_32 .rodata 1d3: 50 push eax 1d4: 6a 08 push 0x8 1d6: 57 push edi 1d7: 56 push esi 1d8: e8 fc ff ff ff call 1d9 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x1d9> 1d9: R_386_PC32 _aaGetX 1dd: 89 45 e8 mov DWORD PTR [ebp-0x18],eax 1e0: 83 c4 10 add esp,0x10 1e3: 85 c0 test eax,eax 1e5: 75 0a jne 1f1 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x1f1> 1e7: b8 3c 00 00 00 mov eax,0x3c 1ec: e8 fc ff ff ff call 1ed <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x1ed> 1ed: R_386_PC32 _D10xmlparser27__arrayZ 1f1: 8b 55 dc mov edx,DWORD PTR [ebp-0x24] 1f4: 8b 02 mov eax,DWORD PTR [edx] 1f6: 8b 52 04 mov edx,DWORD PTR [edx+0x4] 1f9: 8b 4d e8 mov ecx,DWORD PTR [ebp-0x18] 1fc: 89 01 mov DWORD PTR [ecx],eax 1fe: 89 51 04 mov DWORD PTR [ecx+0x4],edx 201: 8b 85 50 ff ff ff mov eax,DWORD PTR [ebp-0xb0] 207: ba 00 00 00 00 mov edx,0x0 208: R_386_32 _D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv9__lambda7MFxC3std3xml7ElementZv 20c: 89 45 f0 mov DWORD PTR [ebp-0x10],eax 20f: 89 55 f4 mov DWORD PTR [ebp-0xc],edx 212: 8d 4d f0 lea ecx,[ebp-0x10] 215: 89 4d ec mov DWORD PTR [ebp-0x14],ecx 218: b8 f0 00 00 00 mov eax,0xf0 219: R_386_32 .rodata 21d: 50 push eax 21e: 6a 08 push 0x8 220: 57 push edi 221: 56 push esi 222: e8 fc ff ff ff call 223 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x223> 223: R_386_PC32 _aaGetX 227: 89 45 f8 mov DWORD PTR [ebp-0x8],eax 22a: 83 c4 10 add esp,0x10 22d: 85 c0 test eax,eax 22f: 75 0a jne 23b <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x23b> 231: b8 3d 00 00 00 mov eax,0x3d 236: e8 fc ff ff ff call 237 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x237> 237: R_386_PC32 _D10xmlparser27__arrayZ 23b: 8b 75 ec mov esi,DWORD PTR [ebp-0x14] 23e: 8b 56 04 mov edx,DWORD PTR [esi+0x4] 241: 8b 06 mov eax,DWORD PTR [esi] 243: 8b 4d f8 mov ecx,DWORD PTR [ebp-0x8] 246: 89 01 mov DWORD PTR [ecx],eax 248: 89 51 04 mov DWORD PTR [ecx+0x4],edx 24b: 89 d8 mov eax,ebx 24d: 8b 18 mov ebx,DWORD PTR [eax] 24f: ff 53 30 call DWORD PTR [ebx+0x30] 252: 8b b5 48 ff ff ff mov esi,DWORD PTR [ebp-0xb8] 258: b9 0e 00 00 00 mov ecx,0xe 25d: 83 c6 34 add esi,0x34 260: ff 36 push DWORD PTR [esi] 262: 83 ee 04 sub esi,0x4 265: e2 f9 loop 260 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x260> 267: 8b 55 fc mov edx,DWORD PTR [ebp-0x4] 26a: 8d 4a 04 lea ecx,[edx+0x4] 26d: 51 push ecx 26e: b8 00 00 00 00 mov eax,0x0 26f: R_386_32 _D28TypeInfo_AS10xmlparser24Book6__initZ 273: 50 push eax 274: e8 fc ff ff ff call 275 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x275> 275: R_386_PC32 _d_arrayappendcT 279: 83 c4 44 add esp,0x44 27c: 5f pop edi 27d: 5e pop esi 27e: 5b pop ebx 27f: c9 leave 280: c2 04 00 ret 0x4 283: 90 nop 284: 90 nop 285: 90 nop 286: 90 nop 287: 90 nop
Jul 31 2013
The ldc version ------------ LDC ----------------- 000002b0 <_D10xmlparser25parseFZv>: 2b0: 57 push edi 2b1: 56 push esi 2b2: 81 ec f4 00 00 00 sub esp,0xf4 2b8: 8d 05 00 00 00 00 lea eax,ds:0x0 2ba: R_386_32 _D3std3xml8Document7__ClassZ 2be: 89 e1 mov ecx,esp 2c0: c7 01 08 00 00 00 mov DWORD PTR [ecx],0x8 2c6: 89 44 24 74 mov DWORD PTR [esp+0x74],eax 2ca: e8 fc ff ff ff call 2cb <_D10xmlparser25parseFZv+0x1b> 2cb: R_386_PC32 _d_allocmemory 2cf: 89 e1 mov ecx,esp 2d1: c7 41 04 4e 00 00 00 mov DWORD PTR [ecx+0x4],0x4e 2d4: R_386_32 .rodata 2d8: c7 01 09 00 00 00 mov DWORD PTR [ecx],0x9 2de: b9 ff ff ff ff mov ecx,0xffffffff 2e3: 89 44 24 70 mov DWORD PTR [esp+0x70],eax 2e7: 89 c8 mov eax,ecx 2e9: e8 fc ff ff ff call 2ea <_D10xmlparser25parseFZv+0x3a> 2ea: R_386_PC32 _D3std4file4readFxAakZAv 2ee: 83 ec 08 sub esp,0x8 2f1: 89 84 24 e8 00 00 00 mov DWORD PTR [esp+0xe8],eax 2f8: 89 94 24 ec 00 00 00 mov DWORD PTR [esp+0xec],edx 2ff: 8b 84 24 e8 00 00 00 mov eax,DWORD PTR [esp+0xe8] 306: 89 e1 mov ecx,esp 308: 89 51 04 mov DWORD PTR [ecx+0x4],edx 30b: 89 01 mov DWORD PTR [ecx],eax 30d: e8 fc ff ff ff call 30e <_D10xmlparser25parseFZv+0x5e> 30e: R_386_PC32 _D3std3xml5checkFAyaZv 312: 83 ec 08 sub esp,0x8 315: 8b 44 24 70 mov eax,DWORD PTR [esp+0x70] 319: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 320: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 326: 89 e1 mov ecx,esp 328: c7 01 00 00 00 00 mov DWORD PTR [ecx],0x0 32a: R_386_32 _D3std3xml14DocumentParser7__ClassZ 32e: e8 fc ff ff ff call 32f <_D10xmlparser25parseFZv+0x7f> 32f: R_386_PC32 _d_newclass 333: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 335: R_386_32 _D3std3xml14DocumentParser6__vtblZ 339: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 340: 89 c1 mov ecx,eax 342: 83 c1 08 add ecx,0x8 345: 89 e2 mov edx,esp 347: 89 0a mov DWORD PTR [edx],ecx 349: c7 42 08 50 00 00 00 mov DWORD PTR [edx+0x8],0x50 350: c7 42 04 08 00 00 00 mov DWORD PTR [edx+0x4],0x8 353: R_386_32 _D3std3xml14DocumentParser6__initZ 357: 89 44 24 6c mov DWORD PTR [esp+0x6c],eax 35b: e8 fc ff ff ff call 35c <_D10xmlparser25parseFZv+0xac> 35c: R_386_PC32 memcpy 360: 8b 84 24 e8 00 00 00 mov eax,DWORD PTR [esp+0xe8] 367: 8b 8c 24 ec 00 00 00 mov ecx,DWORD PTR [esp+0xec] 36e: 89 e2 mov edx,esp 370: 89 4a 04 mov DWORD PTR [edx+0x4],ecx 373: 89 02 mov DWORD PTR [edx],eax 375: 8b 44 24 6c mov eax,DWORD PTR [esp+0x6c] 379: e8 fc ff ff ff call 37a <_D10xmlparser25parseFZv+0xca> 37a: R_386_PC32 _D3std3xml14DocumentParser6__ctorMFAyaZC3std3xml14DocumentParser 37e: 83 ec 08 sub esp,0x8 381: 89 84 24 e4 00 00 00 mov DWORD PTR [esp+0xe4],eax 388: 83 c0 48 add eax,0x48 38b: c7 84 24 dc 00 00 00 mov DWORD PTR [esp+0xdc],0x58 392: 58 00 00 00 392: R_386_32 .rodata 396: c7 84 24 d8 00 00 00 mov DWORD PTR [esp+0xd8],0x4 39d: 04 00 00 00 3a1: 8d 8c 24 d8 00 00 00 lea ecx,[esp+0xd8] 3a8: 89 e2 mov edx,esp 3aa: 89 4a 0c mov DWORD PTR [edx+0xc],ecx 3ad: 89 02 mov DWORD PTR [edx],eax 3af: c7 42 08 08 00 00 00 mov DWORD PTR [edx+0x8],0x8 3b6: c7 42 04 00 00 00 00 mov DWORD PTR [edx+0x4],0x0 3b9: R_386_32 _D12TypeInfo_Aya6__initZ 3bd: e8 fc ff ff ff call 3be <_D10xmlparser25parseFZv+0x10e> 3be: R_386_PC32 _aaGetX 3c2: 8b 4c 24 70 mov ecx,DWORD PTR [esp+0x70] 3c6: 89 08 mov DWORD PTR [eax],ecx 3c8: c7 40 04 60 0b 00 00 mov DWORD PTR [eax+0x4],0xb60 3cb: R_386_32 .text 3cf: 8b 84 24 e4 00 00 00 mov eax,DWORD PTR [esp+0xe4] 3d6: 89 c2 mov edx,eax 3d8: 8b 00 mov eax,DWORD PTR [eax] 3da: 8b 40 34 mov eax,DWORD PTR [eax+0x34] 3dd: 89 44 24 68 mov DWORD PTR [esp+0x68],eax 3e1: 89 d0 mov eax,edx 3e3: 8b 54 24 68 mov edx,DWORD PTR [esp+0x68] 3e7: 89 4c 24 64 mov DWORD PTR [esp+0x64],ecx 3eb: ff d2 call edx 3ed: 8b 44 24 74 mov eax,DWORD PTR [esp+0x74] 3f1: 89 04 24 mov DWORD PTR [esp],eax 3f4: e8 fc ff ff ff call 3f5 <_D10xmlparser25parseFZv+0x145> 3f5: R_386_PC32 _d_newclass 3f9: b9 44 00 00 00 mov ecx,0x44 3fe: 8d 15 00 00 00 00 lea edx,ds:0x0 400: R_386_32 _D3std3xml8Document6__initZ 404: 8d 35 00 00 00 00 lea esi,ds:0x0 406: R_386_32 _D3std3xml8Document6__vtblZ 40a: 89 c7 mov edi,eax 40c: 89 30 mov DWORD PTR [eax],esi 40e: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 415: 89 f8 mov eax,edi 417: 05 08 00 00 00 add eax,0x8 41c: 81 c2 08 00 00 00 add edx,0x8 422: 89 04 24 mov DWORD PTR [esp],eax 425: 89 54 24 04 mov DWORD PTR [esp+0x4],edx 429: c7 44 24 08 44 00 00 mov DWORD PTR [esp+0x8],0x44 430: 00 431: 89 7c 24 60 mov DWORD PTR [esp+0x60],edi 435: 89 4c 24 5c mov DWORD PTR [esp+0x5c],ecx 439: e8 fc ff ff ff call 43a <_D10xmlparser25parseFZv+0x18a> 43a: R_386_PC32 memcpy 43e: 8d 05 00 00 00 00 lea eax,ds:0x0 440: R_386_32 _D3std3xml3Tag7__ClassZ 444: 89 04 24 mov DWORD PTR [esp],eax 447: e8 fc ff ff ff call 448 <_D10xmlparser25parseFZv+0x198> 448: R_386_PC32 _d_newclass 44c: b9 18 00 00 00 mov ecx,0x18 451: 8d 15 00 00 00 00 lea edx,ds:0x0 453: R_386_32 _D3std3xml3Tag6__initZ 457: 8d 35 00 00 00 00 lea esi,ds:0x0 459: R_386_32 _D3std3xml3Tag6__vtblZ 45d: 89 c7 mov edi,eax 45f: 89 30 mov DWORD PTR [eax],esi 461: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 468: 89 f8 mov eax,edi 46a: 05 08 00 00 00 add eax,0x8 46f: 81 c2 08 00 00 00 add edx,0x8 475: 89 04 24 mov DWORD PTR [esp],eax 478: 89 54 24 04 mov DWORD PTR [esp+0x4],edx 47c: c7 44 24 08 18 00 00 mov DWORD PTR [esp+0x8],0x18 483: 00 484: 89 7c 24 58 mov DWORD PTR [esp+0x58],edi 488: 89 4c 24 54 mov DWORD PTR [esp+0x54],ecx 48c: e8 fc ff ff ff call 48d <_D10xmlparser25parseFZv+0x1dd> 48d: R_386_PC32 memcpy 491: 89 e0 mov eax,esp 493: c7 40 08 5d 00 00 00 mov DWORD PTR [eax+0x8],0x5d 496: R_386_32 .rodata 49a: c7 40 04 07 00 00 00 mov DWORD PTR [eax+0x4],0x7 4a1: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 4a7: 8b 44 24 58 mov eax,DWORD PTR [esp+0x58] 4ab: e8 fc ff ff ff call 4ac <_D10xmlparser25parseFZv+0x1fc> 4ac: R_386_PC32 _D3std3xml3Tag6__ctorMFAyaE3std3xml7TagTypeZC3std3xml3Tag 4b0: 83 ec 0c sub esp,0xc 4b3: 89 e1 mov ecx,esp 4b5: 89 01 mov DWORD PTR [ecx],eax 4b7: 8b 44 24 60 mov eax,DWORD PTR [esp+0x60] 4bb: e8 fc ff ff ff call 4bc <_D10xmlparser25parseFZv+0x20c> 4bc: R_386_PC32 _D3std3xml8Document6__ctorMFxC3std3xml3TagZC3std3xml8Document 4c0: 83 ec 04 sub esp,0x4 4c3: 89 84 24 d4 00 00 00 mov DWORD PTR [esp+0xd4],eax 4ca: 8b 44 24 64 mov eax,DWORD PTR [esp+0x64] 4ce: 8b 48 04 mov ecx,DWORD PTR [eax+0x4] 4d1: 8b 10 mov edx,DWORD PTR [eax] 4d3: 89 94 24 c8 00 00 00 mov DWORD PTR [esp+0xc8],edx 4da: 89 8c 24 cc 00 00 00 mov DWORD PTR [esp+0xcc],ecx 4e1: c7 84 24 c4 00 00 00 mov DWORD PTR [esp+0xc4],0x0 4e8: 00 00 00 00 4ec: 8b 84 24 c8 00 00 00 mov eax,DWORD PTR [esp+0xc8] 4f3: 39 84 24 c4 00 00 00 cmp DWORD PTR [esp+0xc4],eax 4fa: 0f 83 52 06 00 00 jae b52 <_D10xmlparser25parseFZv+0x8a2> 500: 8b 84 24 c8 00 00 00 mov eax,DWORD PTR [esp+0xc8] 507: 39 84 24 c4 00 00 00 cmp DWORD PTR [esp+0xc4],eax 50e: 72 1f jb 52f <_D10xmlparser25parseFZv+0x27f> 510: 8d 05 00 00 00 00 lea eax,ds:0x0 512: R_386_32 _D10xmlparser28__ModuleZ 516: b9 47 00 00 00 mov ecx,0x47 51b: 89 04 24 mov DWORD PTR [esp],eax 51e: c7 44 24 04 47 00 00 mov DWORD PTR [esp+0x4],0x47 525: 00 526: 89 4c 24 50 mov DWORD PTR [esp+0x50],ecx 52a: e8 fc ff ff ff call 52b <_D10xmlparser25parseFZv+0x27b> 52b: R_386_PC32 _d_array_bounds 52f: 8b 84 24 cc 00 00 00 mov eax,DWORD PTR [esp+0xcc] 536: 8b 8c 24 c4 00 00 00 mov ecx,DWORD PTR [esp+0xc4] 53d: 6b c9 38 imul ecx,ecx,0x38 540: f2 0f 10 44 08 30 movsd xmm0,QWORD PTR [eax+ecx*1+0x30] 546: f2 0f 11 84 24 b8 00 movsd QWORD PTR [esp+0xb8],xmm0 54d: 00 00 54f: f2 0f 10 44 08 28 movsd xmm0,QWORD PTR [eax+ecx*1+0x28] 555: f2 0f 11 84 24 b0 00 movsd QWORD PTR [esp+0xb0],xmm0 55c: 00 00 55e: f2 0f 10 44 08 20 movsd xmm0,QWORD PTR [eax+ecx*1+0x20] 564: f2 0f 11 84 24 a8 00 movsd QWORD PTR [esp+0xa8],xmm0 56b: 00 00 56d: f2 0f 10 44 08 18 movsd xmm0,QWORD PTR [eax+ecx*1+0x18] 573: f2 0f 11 84 24 a0 00 movsd QWORD PTR [esp+0xa0],xmm0 57a: 00 00 57c: f2 0f 10 44 08 10 movsd xmm0,QWORD PTR [eax+ecx*1+0x10] 582: f2 0f 11 84 24 98 00 movsd QWORD PTR [esp+0x98],xmm0 589: 00 00 58b: f2 0f 10 04 08 movsd xmm0,QWORD PTR [eax+ecx*1] 590: f2 0f 10 4c 08 08 movsd xmm1,QWORD PTR [eax+ecx*1+0x8] 596: f2 0f 11 8c 24 90 00 movsd QWORD PTR [esp+0x90],xmm1 59d: 00 00 59f: f2 0f 11 84 24 88 00 movsd QWORD PTR [esp+0x88],xmm0 5a6: 00 00 5a8: 89 e0 mov eax,esp 5aa: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 5ac: R_386_32 _D3std3xml7Element7__ClassZ 5b0: e8 fc ff ff ff call 5b1 <_D10xmlparser25parseFZv+0x301> 5b1: R_386_PC32 _d_newclass 5b5: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 5b7: R_386_32 _D3std3xml7Element6__vtblZ 5bb: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 5c2: 8b 0d 38 00 00 00 mov ecx,DWORD PTR ds:0x38 5c4: R_386_32 _D3std3xml7Element6__initZ 5c8: 89 48 38 mov DWORD PTR [eax+0x38],ecx 5cb: f2 0f 10 05 30 00 00 movsd xmm0,QWORD PTR ds:0x30 5d2: 00 5cf: R_386_32 _D3std3xml7Element6__initZ 5d3: f2 0f 11 40 30 movsd QWORD PTR [eax+0x30],xmm0 5d8: f2 0f 10 05 28 00 00 movsd xmm0,QWORD PTR ds:0x28 5df: 00 5dc: R_386_32 _D3std3xml7Element6__initZ 5e0: f2 0f 11 40 28 movsd QWORD PTR [eax+0x28],xmm0 5e5: f2 0f 10 05 20 00 00 movsd xmm0,QWORD PTR ds:0x20 5ec: 00 5e9: R_386_32 _D3std3xml7Element6__initZ 5ed: f2 0f 11 40 20 movsd QWORD PTR [eax+0x20],xmm0 5f2: f2 0f 10 05 18 00 00 movsd xmm0,QWORD PTR ds:0x18 5f9: 00 5f6: R_386_32 _D3std3xml7Element6__initZ 5fa: f2 0f 11 40 18 movsd QWORD PTR [eax+0x18],xmm0 5ff: f2 0f 10 05 10 00 00 movsd xmm0,QWORD PTR ds:0x10 606: 00 603: R_386_32 _D3std3xml7Element6__initZ 607: f2 0f 11 40 10 movsd QWORD PTR [eax+0x10],xmm0 60c: f2 0f 10 05 08 00 00 movsd xmm0,QWORD PTR ds:0x8 613: 00 610: R_386_32 _D3std3xml7Element6__initZ 614: f2 0f 11 40 08 movsd QWORD PTR [eax+0x8],xmm0 619: 89 e1 mov ecx,esp 61b: c7 41 0c 65 00 00 00 mov DWORD PTR [ecx+0xc],0x65 61e: R_386_32 .rodata 622: c7 41 08 04 00 00 00 mov DWORD PTR [ecx+0x8],0x4 629: c7 41 04 00 00 00 00 mov DWORD PTR [ecx+0x4],0x0 630: c7 01 00 00 00 00 mov DWORD PTR [ecx],0x0 636: e8 fc ff ff ff call 637 <_D10xmlparser25parseFZv+0x387> 637: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 63b: 83 ec 10 sub esp,0x10 63e: 89 84 24 84 00 00 00 mov DWORD PTR [esp+0x84],eax 645: 8b 40 08 mov eax,DWORD PTR [eax+0x8] 648: 83 c0 14 add eax,0x14 64b: c7 44 24 7c 6a 00 00 mov DWORD PTR [esp+0x7c],0x6a 652: 00 64f: R_386_32 .rodata 653: c7 44 24 78 02 00 00 mov DWORD PTR [esp+0x78],0x2 65a: 00 65b: 8d 4c 24 78 lea ecx,[esp+0x78] 65f: 89 e2 mov edx,esp 661: 89 4a 0c mov DWORD PTR [edx+0xc],ecx 664: 89 02 mov DWORD PTR [edx],eax 666: c7 42 08 08 00 00 00 mov DWORD PTR [edx+0x8],0x8 66d: c7 42 04 00 00 00 00 mov DWORD PTR [edx+0x4],0x0 670: R_386_32 _D12TypeInfo_Aya6__initZ 674: e8 fc ff ff ff call 675 <_D10xmlparser25parseFZv+0x3c5> 675: R_386_PC32 _aaGetX 679: 8b 8c 24 88 00 00 00 mov ecx,DWORD PTR [esp+0x88] 680: 8b 94 24 8c 00 00 00 mov edx,DWORD PTR [esp+0x8c] 687: 89 50 04 mov DWORD PTR [eax+0x4],edx 68a: 89 08 mov DWORD PTR [eax],ecx 68c: 8b 84 24 84 00 00 00 mov eax,DWORD PTR [esp+0x84] 693: 8b 08 mov ecx,DWORD PTR [eax] 695: 8b 49 30 mov ecx,DWORD PTR [ecx+0x30] 698: 89 e2 mov edx,esp 69a: c7 02 00 00 00 00 mov DWORD PTR [edx],0x0 69c: R_386_32 _D3std3xml7Element7__ClassZ 6a0: 89 44 24 4c mov DWORD PTR [esp+0x4c],eax 6a4: 89 4c 24 48 mov DWORD PTR [esp+0x48],ecx 6a8: e8 fc ff ff ff call 6a9 <_D10xmlparser25parseFZv+0x3f9> 6a9: R_386_PC32 _d_newclass 6ad: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 6af: R_386_32 _D3std3xml7Element6__vtblZ 6b3: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 6ba: 8b 0d 38 00 00 00 mov ecx,DWORD PTR ds:0x38 6bc: R_386_32 _D3std3xml7Element6__initZ 6c0: 89 48 38 mov DWORD PTR [eax+0x38],ecx 6c3: f2 0f 10 05 30 00 00 movsd xmm0,QWORD PTR ds:0x30 6ca: 00 6c7: R_386_32 _D3std3xml7Element6__initZ 6cb: f2 0f 11 40 30 movsd QWORD PTR [eax+0x30],xmm0 6d0: f2 0f 10 05 28 00 00 movsd xmm0,QWORD PTR ds:0x28 6d7: 00 6d4: R_386_32 _D3std3xml7Element6__initZ 6d8: f2 0f 11 40 28 movsd QWORD PTR [eax+0x28],xmm0 6dd: f2 0f 10 05 20 00 00 movsd xmm0,QWORD PTR ds:0x20 6e4: 00 6e1: R_386_32 _D3std3xml7Element6__initZ 6e5: f2 0f 11 40 20 movsd QWORD PTR [eax+0x20],xmm0 6ea: f2 0f 10 05 18 00 00 movsd xmm0,QWORD PTR ds:0x18 6f1: 00 6ee: R_386_32 _D3std3xml7Element6__initZ 6f2: f2 0f 11 40 18 movsd QWORD PTR [eax+0x18],xmm0 6f7: f2 0f 10 05 10 00 00 movsd xmm0,QWORD PTR ds:0x10 6fe: 00 6fb: R_386_32 _D3std3xml7Element6__initZ 6ff: f2 0f 11 40 10 movsd QWORD PTR [eax+0x10],xmm0 704: f2 0f 10 05 08 00 00 movsd xmm0,QWORD PTR ds:0x8 70b: 00 708: R_386_32 _D3std3xml7Element6__initZ 70c: f2 0f 11 40 08 movsd QWORD PTR [eax+0x8],xmm0 711: 8b 8c 24 90 00 00 00 mov ecx,DWORD PTR [esp+0x90] 718: 8b 94 24 94 00 00 00 mov edx,DWORD PTR [esp+0x94] 71f: 89 e6 mov esi,esp 721: 89 56 04 mov DWORD PTR [esi+0x4],edx 724: 89 0e mov DWORD PTR [esi],ecx 726: c7 46 0c 6d 00 00 00 mov DWORD PTR [esi+0xc],0x6d 729: R_386_32 .rodata 72d: c7 46 08 06 00 00 00 mov DWORD PTR [esi+0x8],0x6 734: e8 fc ff ff ff call 735 <_D10xmlparser25parseFZv+0x485> 735: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 739: 83 ec 10 sub esp,0x10 73c: 89 e1 mov ecx,esp 73e: 89 01 mov DWORD PTR [ecx],eax 740: 8b 44 24 4c mov eax,DWORD PTR [esp+0x4c] 744: 8b 4c 24 48 mov ecx,DWORD PTR [esp+0x48] 748: ff d1 call ecx 74a: 83 ec 04 sub esp,0x4 74d: 8b 84 24 84 00 00 00 mov eax,DWORD PTR [esp+0x84] 754: 8b 08 mov ecx,DWORD PTR [eax] 756: 8b 49 30 mov ecx,DWORD PTR [ecx+0x30] 759: 89 e2 mov edx,esp 75b: c7 02 00 00 00 00 mov DWORD PTR [edx],0x0 75d: R_386_32 _D3std3xml7Element7__ClassZ 761: 89 44 24 44 mov DWORD PTR [esp+0x44],eax 765: 89 4c 24 40 mov DWORD PTR [esp+0x40],ecx 769: e8 fc ff ff ff call 76a <_D10xmlparser25parseFZv+0x4ba> 76a: R_386_PC32 _d_newclass 76e: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 770: R_386_32 _D3std3xml7Element6__vtblZ 774: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 77b: 8b 0d 38 00 00 00 mov ecx,DWORD PTR ds:0x38 77d: R_386_32 _D3std3xml7Element6__initZ 781: 89 48 38 mov DWORD PTR [eax+0x38],ecx 784: f2 0f 10 05 30 00 00 movsd xmm0,QWORD PTR ds:0x30 78b: 00 788: R_386_32 _D3std3xml7Element6__initZ 78c: f2 0f 11 40 30 movsd QWORD PTR [eax+0x30],xmm0 791: f2 0f 10 05 28 00 00 movsd xmm0,QWORD PTR ds:0x28 798: 00 795: R_386_32 _D3std3xml7Element6__initZ 799: f2 0f 11 40 28 movsd QWORD PTR [eax+0x28],xmm0 79e: f2 0f 10 05 20 00 00 movsd xmm0,QWORD PTR ds:0x20 7a5: 00 7a2: R_386_32 _D3std3xml7Element6__initZ 7a6: f2 0f 11 40 20 movsd QWORD PTR [eax+0x20],xmm0 7ab: f2 0f 10 05 18 00 00 movsd xmm0,QWORD PTR ds:0x18 7b2: 00 7af: R_386_32 _D3std3xml7Element6__initZ 7b3: f2 0f 11 40 18 movsd QWORD PTR [eax+0x18],xmm0 7b8: f2 0f 10 05 10 00 00 movsd xmm0,QWORD PTR ds:0x10 7bf: 00 7bc: R_386_32 _D3std3xml7Element6__initZ 7c0: f2 0f 11 40 10 movsd QWORD PTR [eax+0x10],xmm0 7c5: f2 0f 10 05 08 00 00 movsd xmm0,QWORD PTR ds:0x8 7cc: 00 7c9: R_386_32 _D3std3xml7Element6__initZ 7cd: f2 0f 11 40 08 movsd QWORD PTR [eax+0x8],xmm0 7d2: 8b 8c 24 98 00 00 00 mov ecx,DWORD PTR [esp+0x98] 7d9: 8b 94 24 9c 00 00 00 mov edx,DWORD PTR [esp+0x9c] 7e0: 89 e6 mov esi,esp 7e2: 89 56 04 mov DWORD PTR [esi+0x4],edx 7e5: 89 0e mov DWORD PTR [esi],ecx 7e7: c7 46 0c 74 00 00 00 mov DWORD PTR [esi+0xc],0x74 7ea: R_386_32 .rodata 7ee: c7 46 08 05 00 00 00 mov DWORD PTR [esi+0x8],0x5 7f5: e8 fc ff ff ff call 7f6 <_D10xmlparser25parseFZv+0x546> 7f6: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 7fa: 83 ec 10 sub esp,0x10 7fd: 89 e1 mov ecx,esp 7ff: 89 01 mov DWORD PTR [ecx],eax 801: 8b 44 24 44 mov eax,DWORD PTR [esp+0x44] 805: 8b 4c 24 40 mov ecx,DWORD PTR [esp+0x40] 809: ff d1 call ecx 80b: 83 ec 04 sub esp,0x4 80e: 8b 84 24 84 00 00 00 mov eax,DWORD PTR [esp+0x84] 815: 8b 08 mov ecx,DWORD PTR [eax] 817: 8b 49 30 mov ecx,DWORD PTR [ecx+0x30] 81a: 89 e2 mov edx,esp 81c: c7 02 00 00 00 00 mov DWORD PTR [edx],0x0 81e: R_386_32 _D3std3xml7Element7__ClassZ 822: 89 44 24 3c mov DWORD PTR [esp+0x3c],eax 826: 89 4c 24 38 mov DWORD PTR [esp+0x38],ecx 82a: e8 fc ff ff ff call 82b <_D10xmlparser25parseFZv+0x57b> 82b: R_386_PC32 _d_newclass 82f: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 831: R_386_32 _D3std3xml7Element6__vtblZ 835: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 83c: 8b 0d 38 00 00 00 mov ecx,DWORD PTR ds:0x38 83e: R_386_32 _D3std3xml7Element6__initZ 842: 89 48 38 mov DWORD PTR [eax+0x38],ecx 845: f2 0f 10 05 30 00 00 movsd xmm0,QWORD PTR ds:0x30 84c: 00 849: R_386_32 _D3std3xml7Element6__initZ 84d: f2 0f 11 40 30 movsd QWORD PTR [eax+0x30],xmm0 852: f2 0f 10 05 28 00 00 movsd xmm0,QWORD PTR ds:0x28 859: 00 856: R_386_32 _D3std3xml7Element6__initZ 85a: f2 0f 11 40 28 movsd QWORD PTR [eax+0x28],xmm0 85f: f2 0f 10 05 20 00 00 movsd xmm0,QWORD PTR ds:0x20 866: 00 863: R_386_32 _D3std3xml7Element6__initZ 867: f2 0f 11 40 20 movsd QWORD PTR [eax+0x20],xmm0 86c: f2 0f 10 05 18 00 00 movsd xmm0,QWORD PTR ds:0x18 873: 00 870: R_386_32 _D3std3xml7Element6__initZ 874: f2 0f 11 40 18 movsd QWORD PTR [eax+0x18],xmm0 879: f2 0f 10 05 10 00 00 movsd xmm0,QWORD PTR ds:0x10 880: 00 87d: R_386_32 _D3std3xml7Element6__initZ 881: f2 0f 11 40 10 movsd QWORD PTR [eax+0x10],xmm0 886: f2 0f 10 05 08 00 00 movsd xmm0,QWORD PTR ds:0x8 88d: 00 88a: R_386_32 _D3std3xml7Element6__initZ 88e: f2 0f 11 40 08 movsd QWORD PTR [eax+0x8],xmm0 893: 8b 8c 24 a0 00 00 00 mov ecx,DWORD PTR [esp+0xa0] 89a: 8b 94 24 a4 00 00 00 mov edx,DWORD PTR [esp+0xa4] 8a1: 89 e6 mov esi,esp 8a3: 89 56 04 mov DWORD PTR [esi+0x4],edx 8a6: 89 0e mov DWORD PTR [esi],ecx 8a8: c7 46 0c 7a 00 00 00 mov DWORD PTR [esi+0xc],0x7a 8ab: R_386_32 .rodata 8af: c7 46 08 05 00 00 00 mov DWORD PTR [esi+0x8],0x5 8b6: e8 fc ff ff ff call 8b7 <_D10xmlparser25parseFZv+0x607> 8b7: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 8bb: 83 ec 10 sub esp,0x10 8be: 89 e1 mov ecx,esp 8c0: 89 01 mov DWORD PTR [ecx],eax 8c2: 8b 44 24 3c mov eax,DWORD PTR [esp+0x3c] 8c6: 8b 4c 24 38 mov ecx,DWORD PTR [esp+0x38] 8ca: ff d1 call ecx 8cc: 83 ec 04 sub esp,0x4 8cf: 8b 84 24 84 00 00 00 mov eax,DWORD PTR [esp+0x84] 8d6: 8b 08 mov ecx,DWORD PTR [eax] 8d8: 8b 49 30 mov ecx,DWORD PTR [ecx+0x30] 8db: 89 e2 mov edx,esp 8dd: c7 02 00 00 00 00 mov DWORD PTR [edx],0x0 8df: R_386_32 _D3std3xml7Element7__ClassZ 8e3: 89 44 24 34 mov DWORD PTR [esp+0x34],eax 8e7: 89 4c 24 30 mov DWORD PTR [esp+0x30],ecx 8eb: e8 fc ff ff ff call 8ec <_D10xmlparser25parseFZv+0x63c> 8ec: R_386_PC32 _d_newclass 8f0: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 8f2: R_386_32 _D3std3xml7Element6__vtblZ 8f6: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 8fd: 8b 0d 38 00 00 00 mov ecx,DWORD PTR ds:0x38 8ff: R_386_32 _D3std3xml7Element6__initZ 903: 89 48 38 mov DWORD PTR [eax+0x38],ecx 906: f2 0f 10 05 30 00 00 movsd xmm0,QWORD PTR ds:0x30 90d: 00 90a: R_386_32 _D3std3xml7Element6__initZ 90e: f2 0f 11 40 30 movsd QWORD PTR [eax+0x30],xmm0 913: f2 0f 10 05 28 00 00 movsd xmm0,QWORD PTR ds:0x28 91a: 00 917: R_386_32 _D3std3xml7Element6__initZ 91b: f2 0f 11 40 28 movsd QWORD PTR [eax+0x28],xmm0 920: f2 0f 10 05 20 00 00 movsd xmm0,QWORD PTR ds:0x20 927: 00 924: R_386_32 _D3std3xml7Element6__initZ 928: f2 0f 11 40 20 movsd QWORD PTR [eax+0x20],xmm0 92d: f2 0f 10 05 18 00 00 movsd xmm0,QWORD PTR ds:0x18 934: 00 931: R_386_32 _D3std3xml7Element6__initZ 935: f2 0f 11 40 18 movsd QWORD PTR [eax+0x18],xmm0 93a: f2 0f 10 05 10 00 00 movsd xmm0,QWORD PTR ds:0x10 941: 00 93e: R_386_32 _D3std3xml7Element6__initZ 942: f2 0f 11 40 10 movsd QWORD PTR [eax+0x10],xmm0 947: f2 0f 10 05 08 00 00 movsd xmm0,QWORD PTR ds:0x8 94e: 00 94b: R_386_32 _D3std3xml7Element6__initZ 94f: f2 0f 11 40 08 movsd QWORD PTR [eax+0x8],xmm0 954: 8b 8c 24 a8 00 00 00 mov ecx,DWORD PTR [esp+0xa8] 95b: 8b 94 24 ac 00 00 00 mov edx,DWORD PTR [esp+0xac] 962: 89 e6 mov esi,esp 964: 89 56 04 mov DWORD PTR [esi+0x4],edx 967: 89 0e mov DWORD PTR [esi],ecx 969: c7 46 0c 80 00 00 00 mov DWORD PTR [esi+0xc],0x80 96c: R_386_32 .rodata 970: c7 46 08 05 00 00 00 mov DWORD PTR [esi+0x8],0x5 977: e8 fc ff ff ff call 978 <_D10xmlparser25parseFZv+0x6c8> 978: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element 97c: 83 ec 10 sub esp,0x10 97f: 89 e1 mov ecx,esp 981: 89 01 mov DWORD PTR [ecx],eax 983: 8b 44 24 34 mov eax,DWORD PTR [esp+0x34] 987: 8b 4c 24 30 mov ecx,DWORD PTR [esp+0x30] 98b: ff d1 call ecx 98d: 83 ec 04 sub esp,0x4 990: 8b 84 24 84 00 00 00 mov eax,DWORD PTR [esp+0x84] 997: 8b 08 mov ecx,DWORD PTR [eax] 999: 8b 49 30 mov ecx,DWORD PTR [ecx+0x30] 99c: 89 e2 mov edx,esp 99e: c7 02 00 00 00 00 mov DWORD PTR [edx],0x0 9a0: R_386_32 _D3std3xml7Element7__ClassZ 9a4: 89 44 24 2c mov DWORD PTR [esp+0x2c],eax 9a8: 89 4c 24 28 mov DWORD PTR [esp+0x28],ecx 9ac: e8 fc ff ff ff call 9ad <_D10xmlparser25parseFZv+0x6fd> 9ad: R_386_PC32 _d_newclass 9b1: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 9b3: R_386_32 _D3std3xml7Element6__vtblZ 9b7: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 9be: 8b 0d 38 00 00 00 mov ecx,DWORD PTR ds:0x38 9c0: R_386_32 _D3std3xml7Element6__initZ 9c4: 89 48 38 mov DWORD PTR [eax+0x38],ecx 9c7: f2 0f 10 05 30 00 00 movsd xmm0,QWORD PTR ds:0x30 9ce: 00 9cb: R_386_32 _D3std3xml7Element6__initZ 9cf: f2 0f 11 40 30 movsd QWORD PTR [eax+0x30],xmm0 9d4: f2 0f 10 05 28 00 00 movsd xmm0,QWORD PTR ds:0x28 9db: 00 9d8: R_386_32 _D3std3xml7Element6__initZ 9dc: f2 0f 11 40 28 movsd QWORD PTR [eax+0x28],xmm0 9e1: f2 0f 10 05 20 00 00 movsd xmm0,QWORD PTR ds:0x20 9e8: 00 9e5: R_386_32 _D3std3xml7Element6__initZ 9e9: f2 0f 11 40 20 movsd QWORD PTR [eax+0x20],xmm0 9ee: f2 0f 10 05 18 00 00 movsd xmm0,QWORD PTR ds:0x18 9f5: 00 9f2: R_386_32 _D3std3xml7Element6__initZ 9f6: f2 0f 11 40 18 movsd QWORD PTR [eax+0x18],xmm0 9fb: f2 0f 10 05 10 00 00 movsd xmm0,QWORD PTR ds:0x10 a02: 00 9ff: R_386_32 _D3std3xml7Element6__initZ a03: f2 0f 11 40 10 movsd QWORD PTR [eax+0x10],xmm0 a08: f2 0f 10 05 08 00 00 movsd xmm0,QWORD PTR ds:0x8 a0f: 00 a0c: R_386_32 _D3std3xml7Element6__initZ a10: f2 0f 11 40 08 movsd QWORD PTR [eax+0x8],xmm0 a15: 8b 8c 24 b0 00 00 00 mov ecx,DWORD PTR [esp+0xb0] a1c: 8b 94 24 b4 00 00 00 mov edx,DWORD PTR [esp+0xb4] a23: 89 e6 mov esi,esp a25: 89 56 04 mov DWORD PTR [esi+0x4],edx a28: 89 0e mov DWORD PTR [esi],ecx a2a: c7 46 0c 86 00 00 00 mov DWORD PTR [esi+0xc],0x86 a2d: R_386_32 .rodata a31: c7 46 08 0c 00 00 00 mov DWORD PTR [esi+0x8],0xc a38: e8 fc ff ff ff call a39 <_D10xmlparser25parseFZv+0x789> a39: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element a3d: 83 ec 10 sub esp,0x10 a40: 89 e1 mov ecx,esp a42: 89 01 mov DWORD PTR [ecx],eax a44: 8b 44 24 2c mov eax,DWORD PTR [esp+0x2c] a48: 8b 4c 24 28 mov ecx,DWORD PTR [esp+0x28] a4c: ff d1 call ecx a4e: 83 ec 04 sub esp,0x4 a51: 8b 84 24 84 00 00 00 mov eax,DWORD PTR [esp+0x84] a58: 8b 08 mov ecx,DWORD PTR [eax] a5a: 8b 49 30 mov ecx,DWORD PTR [ecx+0x30] a5d: 89 e2 mov edx,esp a5f: c7 02 00 00 00 00 mov DWORD PTR [edx],0x0 a61: R_386_32 _D3std3xml7Element7__ClassZ a65: 89 44 24 24 mov DWORD PTR [esp+0x24],eax a69: 89 4c 24 20 mov DWORD PTR [esp+0x20],ecx a6d: e8 fc ff ff ff call a6e <_D10xmlparser25parseFZv+0x7be> a6e: R_386_PC32 _d_newclass a72: c7 00 00 00 00 00 mov DWORD PTR [eax],0x0 a74: R_386_32 _D3std3xml7Element6__vtblZ a78: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 a7f: 8b 0d 38 00 00 00 mov ecx,DWORD PTR ds:0x38 a81: R_386_32 _D3std3xml7Element6__initZ a85: 89 48 38 mov DWORD PTR [eax+0x38],ecx a88: f2 0f 10 05 30 00 00 movsd xmm0,QWORD PTR ds:0x30 a8f: 00 a8c: R_386_32 _D3std3xml7Element6__initZ a90: f2 0f 11 40 30 movsd QWORD PTR [eax+0x30],xmm0 a95: f2 0f 10 05 28 00 00 movsd xmm0,QWORD PTR ds:0x28 a9c: 00 a99: R_386_32 _D3std3xml7Element6__initZ a9d: f2 0f 11 40 28 movsd QWORD PTR [eax+0x28],xmm0 aa2: f2 0f 10 05 20 00 00 movsd xmm0,QWORD PTR ds:0x20 aa9: 00 aa6: R_386_32 _D3std3xml7Element6__initZ aaa: f2 0f 11 40 20 movsd QWORD PTR [eax+0x20],xmm0 aaf: f2 0f 10 05 18 00 00 movsd xmm0,QWORD PTR ds:0x18 ab6: 00 ab3: R_386_32 _D3std3xml7Element6__initZ ab7: f2 0f 11 40 18 movsd QWORD PTR [eax+0x18],xmm0 abc: f2 0f 10 05 10 00 00 movsd xmm0,QWORD PTR ds:0x10 ac3: 00 ac0: R_386_32 _D3std3xml7Element6__initZ ac4: f2 0f 11 40 10 movsd QWORD PTR [eax+0x10],xmm0 ac9: f2 0f 10 05 08 00 00 movsd xmm0,QWORD PTR ds:0x8 ad0: 00 acd: R_386_32 _D3std3xml7Element6__initZ ad1: f2 0f 11 40 08 movsd QWORD PTR [eax+0x8],xmm0 ad6: 8b 8c 24 b8 00 00 00 mov ecx,DWORD PTR [esp+0xb8] add: 8b 94 24 bc 00 00 00 mov edx,DWORD PTR [esp+0xbc] ae4: 89 e6 mov esi,esp ae6: 89 56 04 mov DWORD PTR [esi+0x4],edx ae9: 89 0e mov DWORD PTR [esi],ecx aeb: c7 46 0c 93 00 00 00 mov DWORD PTR [esi+0xc],0x93 aee: R_386_32 .rodata af2: c7 46 08 0b 00 00 00 mov DWORD PTR [esi+0x8],0xb af9: e8 fc ff ff ff call afa <_D10xmlparser25parseFZv+0x84a> afa: R_386_PC32 _D3std3xml7Element6__ctorMFAyaAyaZC3std3xml7Element afe: 83 ec 10 sub esp,0x10 b01: 89 e1 mov ecx,esp b03: 89 01 mov DWORD PTR [ecx],eax b05: 8b 44 24 24 mov eax,DWORD PTR [esp+0x24] b09: 8b 4c 24 20 mov ecx,DWORD PTR [esp+0x20] b0d: ff d1 call ecx b0f: 83 ec 04 sub esp,0x4 b12: 8b 84 24 d4 00 00 00 mov eax,DWORD PTR [esp+0xd4] b19: 89 c1 mov ecx,eax b1b: 8b 00 mov eax,DWORD PTR [eax] b1d: 8b 40 30 mov eax,DWORD PTR [eax+0x30] b20: 8b 94 24 84 00 00 00 mov edx,DWORD PTR [esp+0x84] b27: 89 e6 mov esi,esp b29: 89 16 mov DWORD PTR [esi],edx b2b: 89 44 24 1c mov DWORD PTR [esp+0x1c],eax b2f: 89 c8 mov eax,ecx b31: 8b 4c 24 1c mov ecx,DWORD PTR [esp+0x1c] b35: ff d1 call ecx b37: 83 ec 04 sub esp,0x4 b3a: 8b 84 24 c4 00 00 00 mov eax,DWORD PTR [esp+0xc4] b41: 05 01 00 00 00 add eax,0x1 b46: 89 84 24 c4 00 00 00 mov DWORD PTR [esp+0xc4],eax b4d: e9 9a f9 ff ff jmp 4ec <_D10xmlparser25parseFZv+0x23c> b52: 81 c4 f4 00 00 00 add esp,0xf4 b58: 5e pop esi b59: 5f pop edi b5a: c3 ret b5b: 0f 1f 44 00 00 nop DWORD PTR [eax+eax*1+0x0] 00000b60 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv>: b60: 53 push ebx b61: 57 push edi b62: 56 push esi b63: 81 ec 80 00 00 00 sub esp,0x80 b69: 8b 8c 24 90 00 00 00 mov ecx,DWORD PTR [esp+0x90] b70: 8d 15 00 00 00 00 lea edx,ds:0x0 b72: R_386_32 _D12TypeInfo_Aya6__initZ b76: 8d 74 24 70 lea esi,[esp+0x70] b7a: 89 44 24 7c mov DWORD PTR [esp+0x7c],eax b7e: 89 4c 24 78 mov DWORD PTR [esp+0x78],ecx b82: 89 e0 mov eax,esp b84: c7 00 3c 00 00 00 mov DWORD PTR [eax],0x3c b8a: 89 54 24 3c mov DWORD PTR [esp+0x3c],edx b8e: 89 74 24 38 mov DWORD PTR [esp+0x38],esi b92: e8 fc ff ff ff call b93 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x33> b93: R_386_PC32 _d_allocmemory b97: 8b 4c 24 7c mov ecx,DWORD PTR [esp+0x7c] b9b: 89 08 mov DWORD PTR [eax],ecx b9d: 89 c1 mov ecx,eax b9f: 83 c1 04 add ecx,0x4 ba2: c7 40 08 00 00 00 00 mov DWORD PTR [eax+0x8],0x0 ba9: c7 40 04 00 00 00 00 mov DWORD PTR [eax+0x4],0x0 bb0: c7 40 10 00 00 00 00 mov DWORD PTR [eax+0x10],0x0 bb7: c7 40 0c 00 00 00 00 mov DWORD PTR [eax+0xc],0x0 bbe: c7 40 18 00 00 00 00 mov DWORD PTR [eax+0x18],0x0 bc5: c7 40 14 00 00 00 00 mov DWORD PTR [eax+0x14],0x0 bcc: c7 40 20 00 00 00 00 mov DWORD PTR [eax+0x20],0x0 bd3: c7 40 1c 00 00 00 00 mov DWORD PTR [eax+0x1c],0x0 bda: c7 40 28 00 00 00 00 mov DWORD PTR [eax+0x28],0x0 be1: c7 40 24 00 00 00 00 mov DWORD PTR [eax+0x24],0x0 be8: c7 40 30 00 00 00 00 mov DWORD PTR [eax+0x30],0x0 bef: c7 40 2c 00 00 00 00 mov DWORD PTR [eax+0x2c],0x0 bf6: c7 40 38 00 00 00 00 mov DWORD PTR [eax+0x38],0x0 bfd: c7 40 34 00 00 00 00 mov DWORD PTR [eax+0x34],0x0 c04: 8b 54 24 78 mov edx,DWORD PTR [esp+0x78] c08: 8b 32 mov esi,DWORD PTR [edx] c0a: 8b 76 18 mov esi,DWORD PTR [esi+0x18] c0d: 89 44 24 34 mov DWORD PTR [esp+0x34],eax c11: 89 d0 mov eax,edx c13: 89 4c 24 30 mov DWORD PTR [esp+0x30],ecx c17: ff d6 call esi c19: 8b 40 14 mov eax,DWORD PTR [eax+0x14] c1c: c7 44 24 74 4c 09 00 mov DWORD PTR [esp+0x74],0x94c c23: 00 c20: R_386_32 .rodata c24: c7 44 24 70 02 00 00 mov DWORD PTR [esp+0x70],0x2 c2b: 00 c2c: 8b 4c 24 34 mov ecx,DWORD PTR [esp+0x34] c30: 8b 54 24 30 mov edx,DWORD PTR [esp+0x30] c34: 8b 74 24 38 mov esi,DWORD PTR [esp+0x38] c38: 89 04 24 mov DWORD PTR [esp],eax c3b: 8b 44 24 3c mov eax,DWORD PTR [esp+0x3c] c3f: 89 44 24 04 mov DWORD PTR [esp+0x4],eax c43: 89 74 24 08 mov DWORD PTR [esp+0x8],esi c47: 89 4c 24 2c mov DWORD PTR [esp+0x2c],ecx c4b: 89 54 24 28 mov DWORD PTR [esp+0x28],edx c4f: e8 fc ff ff ff call c50 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0xf0> c50: R_386_PC32 _aaInX c54: b9 00 00 00 00 mov ecx,0x0 c59: 39 c1 cmp ecx,eax c5b: 89 44 24 24 mov DWORD PTR [esp+0x24],eax c5f: 75 1f jne c80 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x120> c61: 8d 05 00 00 00 00 lea eax,ds:0x0 c63: R_386_32 _D10xmlparser28__ModuleZ c67: b9 36 00 00 00 mov ecx,0x36 c6c: 89 04 24 mov DWORD PTR [esp],eax c6f: c7 44 24 04 36 00 00 mov DWORD PTR [esp+0x4],0x36 c76: 00 c77: 89 4c 24 20 mov DWORD PTR [esp+0x20],ecx c7b: e8 fc ff ff ff call c7c <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x11c> c7c: R_386_PC32 _d_array_bounds c80: 8b 44 24 24 mov eax,DWORD PTR [esp+0x24] c84: 8b 08 mov ecx,DWORD PTR [eax] c86: 8b 50 04 mov edx,DWORD PTR [eax+0x4] c89: 8b 74 24 30 mov esi,DWORD PTR [esp+0x30] c8d: 89 56 04 mov DWORD PTR [esi+0x4],edx c90: 89 0e mov DWORD PTR [esi],ecx c92: 8b 4c 24 78 mov ecx,DWORD PTR [esp+0x78] c96: 83 c1 4c add ecx,0x4c c99: c7 44 24 6c 4f 09 00 mov DWORD PTR [esp+0x6c],0x94f ca0: 00 c9d: R_386_32 .rodata ca1: c7 44 24 68 06 00 00 mov DWORD PTR [esp+0x68],0x6 ca8: 00 ca9: 8d 54 24 68 lea edx,[esp+0x68] cad: 89 e7 mov edi,esp caf: 89 57 0c mov DWORD PTR [edi+0xc],edx cb2: 89 0f mov DWORD PTR [edi],ecx cb4: c7 47 08 08 00 00 00 mov DWORD PTR [edi+0x8],0x8 cbb: c7 47 04 00 00 00 00 mov DWORD PTR [edi+0x4],0x0 cbe: R_386_32 _D12TypeInfo_Aya6__initZ cc2: e8 fc ff ff ff call cc3 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x163> cc3: R_386_PC32 _aaGetX cc7: 8b 4c 24 2c mov ecx,DWORD PTR [esp+0x2c] ccb: 89 08 mov DWORD PTR [eax],ecx ccd: c7 40 04 d0 0e 00 00 mov DWORD PTR [eax+0x4],0xed0 cd0: R_386_32 .text cd4: 8b 44 24 78 mov eax,DWORD PTR [esp+0x78] cd8: 83 c0 4c add eax,0x4c cdb: c7 44 24 64 56 09 00 mov DWORD PTR [esp+0x64],0x956 ce2: 00 cdf: R_386_32 .rodata ce3: c7 44 24 60 05 00 00 mov DWORD PTR [esp+0x60],0x5 cea: 00 ceb: 8d 54 24 60 lea edx,[esp+0x60] cef: 89 e6 mov esi,esp cf1: 89 56 0c mov DWORD PTR [esi+0xc],edx cf4: 89 06 mov DWORD PTR [esi],eax cf6: c7 46 08 08 00 00 00 mov DWORD PTR [esi+0x8],0x8 cfd: c7 46 04 00 00 00 00 mov DWORD PTR [esi+0x4],0x0 d00: R_386_32 _D12TypeInfo_Aya6__initZ d04: e8 fc ff ff ff call d05 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x1a5> d05: R_386_PC32 _aaGetX d09: 8b 4c 24 2c mov ecx,DWORD PTR [esp+0x2c] d0d: 89 08 mov DWORD PTR [eax],ecx d0f: c7 40 04 10 0f 00 00 mov DWORD PTR [eax+0x4],0xf10 d12: R_386_32 .text d16: 8b 44 24 78 mov eax,DWORD PTR [esp+0x78] d1a: 83 c0 4c add eax,0x4c d1d: c7 44 24 5c 5c 09 00 mov DWORD PTR [esp+0x5c],0x95c d24: 00 d21: R_386_32 .rodata d25: c7 44 24 58 05 00 00 mov DWORD PTR [esp+0x58],0x5 d2c: 00 d2d: 8d 54 24 58 lea edx,[esp+0x58] d31: 89 e6 mov esi,esp d33: 89 56 0c mov DWORD PTR [esi+0xc],edx d36: 89 06 mov DWORD PTR [esi],eax d38: c7 46 08 08 00 00 00 mov DWORD PTR [esi+0x8],0x8 d3f: c7 46 04 00 00 00 00 mov DWORD PTR [esi+0x4],0x0 d42: R_386_32 _D12TypeInfo_Aya6__initZ d46: e8 fc ff ff ff call d47 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x1e7> d47: R_386_PC32 _aaGetX d4b: 8b 4c 24 2c mov ecx,DWORD PTR [esp+0x2c] d4f: 89 08 mov DWORD PTR [eax],ecx d51: c7 40 04 50 0f 00 00 mov DWORD PTR [eax+0x4],0xf50 d54: R_386_32 .text d58: 8b 44 24 78 mov eax,DWORD PTR [esp+0x78] d5c: 83 c0 4c add eax,0x4c d5f: c7 44 24 54 62 09 00 mov DWORD PTR [esp+0x54],0x962 d66: 00 d63: R_386_32 .rodata d67: c7 44 24 50 05 00 00 mov DWORD PTR [esp+0x50],0x5 d6e: 00 d6f: 8d 54 24 50 lea edx,[esp+0x50] d73: 89 e6 mov esi,esp d75: 89 56 0c mov DWORD PTR [esi+0xc],edx d78: 89 06 mov DWORD PTR [esi],eax d7a: c7 46 08 08 00 00 00 mov DWORD PTR [esi+0x8],0x8 d81: c7 46 04 00 00 00 00 mov DWORD PTR [esi+0x4],0x0 d84: R_386_32 _D12TypeInfo_Aya6__initZ d88: e8 fc ff ff ff call d89 <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x229> d89: R_386_PC32 _aaGetX d8d: 8b 4c 24 2c mov ecx,DWORD PTR [esp+0x2c] d91: 89 08 mov DWORD PTR [eax],ecx d93: c7 40 04 90 0f 00 00 mov DWORD PTR [eax+0x4],0xf90 d96: R_386_32 .text d9a: 8b 44 24 78 mov eax,DWORD PTR [esp+0x78] d9e: 83 c0 4c add eax,0x4c da1: c7 44 24 4c 68 09 00 mov DWORD PTR [esp+0x4c],0x968 da8: 00 da5: R_386_32 .rodata da9: c7 44 24 48 0c 00 00 mov DWORD PTR [esp+0x48],0xc db0: 00 db1: 8d 54 24 48 lea edx,[esp+0x48] db5: 89 e6 mov esi,esp db7: 89 56 0c mov DWORD PTR [esi+0xc],edx dba: 89 06 mov DWORD PTR [esi],eax dbc: c7 46 08 08 00 00 00 mov DWORD PTR [esi+0x8],0x8 dc3: c7 46 04 00 00 00 00 mov DWORD PTR [esi+0x4],0x0 dc6: R_386_32 _D12TypeInfo_Aya6__initZ dca: e8 fc ff ff ff call dcb <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x26b> dcb: R_386_PC32 _aaGetX dcf: 8b 4c 24 2c mov ecx,DWORD PTR [esp+0x2c] dd3: 89 08 mov DWORD PTR [eax],ecx dd5: c7 40 04 d0 0f 00 00 mov DWORD PTR [eax+0x4],0xfd0 dd8: R_386_32 .text ddc: 8b 44 24 78 mov eax,DWORD PTR [esp+0x78] de0: 83 c0 4c add eax,0x4c de3: c7 44 24 44 75 09 00 mov DWORD PTR [esp+0x44],0x975 dea: 00 de7: R_386_32 .rodata deb: c7 44 24 40 0b 00 00 mov DWORD PTR [esp+0x40],0xb df2: 00 df3: 8d 54 24 40 lea edx,[esp+0x40] df7: 89 e6 mov esi,esp df9: 89 56 0c mov DWORD PTR [esi+0xc],edx dfc: 89 06 mov DWORD PTR [esi],eax dfe: c7 46 08 08 00 00 00 mov DWORD PTR [esi+0x8],0x8 e05: c7 46 04 00 00 00 00 mov DWORD PTR [esi+0x4],0x0 e08: R_386_32 _D12TypeInfo_Aya6__initZ e0c: e8 fc ff ff ff call e0d <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x2ad> e0d: R_386_PC32 _aaGetX e11: 8b 4c 24 2c mov ecx,DWORD PTR [esp+0x2c] e15: 89 08 mov DWORD PTR [eax],ecx e17: c7 40 04 10 10 00 00 mov DWORD PTR [eax+0x4],0x1010 e1a: R_386_32 .text e1e: 8b 44 24 78 mov eax,DWORD PTR [esp+0x78] e22: 8b 10 mov edx,DWORD PTR [eax] e24: 8b 52 34 mov edx,DWORD PTR [edx+0x34] e27: ff d2 call edx e29: 8b 44 24 2c mov eax,DWORD PTR [esp+0x2c] e2d: 8b 08 mov ecx,DWORD PTR [eax] e2f: 8b 11 mov edx,DWORD PTR [ecx] e31: 89 e6 mov esi,esp e33: 89 4e 04 mov DWORD PTR [esi+0x4],ecx e36: c7 46 08 01 00 00 00 mov DWORD PTR [esi+0x8],0x1 e3d: c7 06 00 00 00 00 mov DWORD PTR [esi],0x0 e3f: R_386_32 _D28TypeInfo_AS10xmlparser24Book6__initZ e43: 89 4c 24 1c mov DWORD PTR [esp+0x1c],ecx e47: 89 54 24 18 mov DWORD PTR [esp+0x18],edx e4b: e8 fc ff ff ff call e4c <_D10xmlparser25parseFZv9__lambda1MFC3std3xml13ElementParserZv+0x2ec> e4c: R_386_PC32 _d_arrayappendcTX e50: 8b 4c 24 1c mov ecx,DWORD PTR [esp+0x1c] e54: 8b 71 04 mov esi,DWORD PTR [ecx+0x4] e57: 8b 7c 24 18 mov edi,DWORD PTR [esp+0x18] e5b: 6b ff 38 imul edi,edi,0x38 e5e: 8b 5c 24 28 mov ebx,DWORD PTR [esp+0x28] e62: f2 0f 10 43 30 movsd xmm0,QWORD PTR [ebx+0x30] e67: f2 0f 11 44 3e 30 movsd QWORD PTR [esi+edi*1+0x30],xmm0 e6d: f2 0f 10 43 28 movsd xmm0,QWORD PTR [ebx+0x28] e72: f2 0f 11 44 3e 28 movsd QWORD PTR [esi+edi*1+0x28],xmm0 e78: f2 0f 10 43 20 movsd xmm0,QWORD PTR [ebx+0x20] e7d: f2 0f 11 44 3e 20 movsd QWORD PTR [esi+edi*1+0x20],xmm0 e83: f2 0f 10 43 18 movsd xmm0,QWORD PTR [ebx+0x18] e88: f2 0f 11 44 3e 18 movsd QWORD PTR [esi+edi*1+0x18],xmm0 e8e: f2 0f 10 43 10 movsd xmm0,QWORD PTR [ebx+0x10] e93: f2 0f 11 44 3e 10 movsd QWORD PTR [esi+edi*1+0x10],xmm0 e99: f2 0f 10 03 movsd xmm0,QWORD PTR [ebx] e9d: f2 0f 10 4b 08 movsd xmm1,QWORD PTR [ebx+0x8] ea2: f2 0f 11 4c 3e 08 movsd QWORD PTR [esi+edi*1+0x8],xmm1 ea8: f2 0f 11 04 3e movsd QWORD PTR [esi+edi*1],xmm0 ead: 89 44 24 14 mov DWORD PTR [esp+0x14],eax eb1: 89 54 24 10 mov DWORD PTR [esp+0x10],edx eb5: 81 c4 80 00 00 00 add esp,0x80 ebb: 5e pop esi ebc: 5f pop edi ebd: 5b pop ebx ebe: c2 04 00 ret 0x4 ec1: 66 66 66 66 66 66 2e data32 data32 data32 data32 data32 nop WORD PTR cs:[eax+eax*1+0x0] ec8: 0f 1f 84 00 00 00 00 ecf: 00
Jul 31 2013
41ms is a big time, run parse only once and time xml.parse individually.
Jul 31 2013
Another possibility is to copy the xml.d, remove the module std.xml; declartion from it, change import std.xml; to import xml; then compile with dmd and ldc. This will account for differences in compiler flags used to compile phobos in dmd and ldc projects.
Jul 31 2013
On Wednesday, 31 July 2013 at 18:44:14 UTC, Kagamin wrote:Another possibility is to copy the xml.d, remove the module std.xml; declartion from it, change import std.xml; to import xml; then compile with dmd and ldc. This will account for differences in compiler flags used to compile phobos in dmd and ldc projects.Did just this. The result is that both versions perform worse. --- Repeat x1 --- dmd -release -noboundscheck -O -inline Average time: 80 msecs lcd2 Average time: 2 msecs --- Repeat x100 --- dmd -release -noboundscheck -O -inline Average time: 78.84 msecs ldc2 Average time: 0.08 msecs asm of dmd = 48,620 lines asm of lcd2 = 15,524 lines I can send the code to anyone who would like to test it.
Aug 01 2013
On Tuesday, 30 July 2013 at 09:10:24 UTC, Temtaime wrote:I have a little question.. Why Digital Mars doesn't uses LLVM for backend and develops their own performance killer ? Is someone contact with them to drop out their backend ?It's not going to happen (any time soon at least). Luckily, we have ldc and gdc for faster executables. They share the same frontend as dmd (with some modifications) and the differences are closing all the time.
Jul 30 2013
Why not LLVM ? LLVM is open and well-optimized. Writing own backend is a suicide and wasting of energy.
Jul 30 2013
On Tuesday, 30 July 2013 at 19:08:59 UTC, Temtaime wrote:Why not LLVM ? LLVM is open and well-optimized. Writing own backend is a suicide and wasting of energy.1) Because the current backend compiles code very fast, reducing development turnaround time (particularly useful for testing changes to druntime/phobos). It also has good native windows support. 2) Because the compiler itself is quick to compile. This allows a very quick response time even for quite wide-reaching changes. It also makes the auto-tester more useful. 3) Because Walter likes working with it. It's his backend and dmd is overall his project. 4) Because it's already happened/happening. We have dmd with the llvm backend. It's called ldc.
Jul 30 2013
On 24 Jul 2013, at 14:11, bearophile wrote:Chris:ldmd uses the "-singleobj" flag by default (for DMD compatibility), which causes the code emitted for the n different D modules to be linked together into 1 LLVM module on the LLVM IR level, instead of emitting n LLVM modules as n object files and linking them with the system linker. This could be a factor, but the large difference is strange. Davidldmd2 compiles the code much faster than ldc2 (~4 secs vs 14 secs). The program runs just as fast (as far as I can see at the moment).The ldmd2 binary is tiny, it's not a compiler, it's just a wrapper. If the compilation time is different then they are can calling the compiler with different compilation switches.
Jul 24 2013
On Wednesday, 24 July 2013 at 10:05:17 UTC, Chris wrote:...That is somewhat expected result. dmd is reference implementation, but I would never use is for release production code personally.
Jul 24 2013