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









"Kai Nacke" <kai redstar.de> 