<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Apr 30, 2017 at 6:12 PM, mateusz janek <span dir="ltr"><<a href="mailto:stryku2393@gmail.com" target="_blank">stryku2393@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Thanks again. Unfortunately I think that even "only AST" will be to much for my RAM.</div><div><br></div></div></blockquote><div><br></div><div>When I did the compile using ToT clang and libc++, it completed in seconds and occupied a peak of 4GB of memory.  This strikes me as pretty sane behavior and very different from your compile-takes-overnight experience.  How much physical memory do you have on the build machine and how what is your target time budget for this job?  How much memory is consumed on your existing clang 3.9/4, g++ 6 baselines?  If those builds use more than 4GB, maybe you can just upgrade to a more current release.  </div><div><br></div><div>If by some chance your build host doesn't have 4GB of physical memory, maybe that's an easier problem to solve.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div></div><div>I have one more idea, please tell me if this makes any sense. I'm thinking about storing class specializations in term of scopes. </div><div>(It don't want this to work with every C++ project, I'm ok with that it'll work only with my project)</div><div>(And I'd stick to couple of assumptions during ctai implementation, e.g. only one depth scope resolution, A::B)</div><div>(I'm aware that probably I'd need to write my own implementation of ClassTemplateSpecializationDec<wbr>l and couple of more classes)</div><div><br></div><div>Example code and the flow:</div><div><br></div><div>template <int N></div><div>struct N_Holder</div><div>{</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>static constexpr int N_Value = N;</div><div>};</div><div><br></div><div>template <int Val1, int Val2></div><div>struct Add_impl</div><div>{</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>using Val1_Holder = Holder<Val1>;</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">      </span>using Val2_Holder = Holder<Val2>;</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">      </span></div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">     </span>static constexpr int Result_impl = Val1_Holder::N_Value + Val2_Holder::N_Value;</div><div>};</div><div><br></div><div>template <int Val1, int Val2></div><div>struct Add</div><div>{</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>static constexpr int Result = Add_impl<Val1, Val2>::Result_impl;</div><div>};</div><div><br></div><div>struct A_Struct</div><div>{</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">       </span>static constexpr int Value = Add<10, 20>::Result;</div><div>};</div><div><br></div><div><br></div><div><br></div><div>Flow:</div><div><br></div><div>(...)</div><div>-see class A_Struct</div><div>-go into A_Struct scope</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap"> </span>-see a member Value = </div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">              </span>-create class Add<10, 20> specialization</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">               </span>-go into Add<10, 20> scope</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                     </span>-see parameters {non-type 10, non-type 20}</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                   </span>-see member Result = </div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                               </span>-create Add_impl<parameters[0], parameters[1]> specialization</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                          </span>-go into Add_impl<10, 20> scope</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                        </span>-see parameters {non-type 10, non-type 20}</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                   </span>-see alias Val1_Holder = </div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                           </span>-create Holder<parameters[0]> specialization</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                           </span>-go into Holder<10> scope</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                      </span>-see parameters {non-type 10}</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                        </span>-see member N_Value = parameters[0]</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                          </span>-go out of Holder<10> scope (nothing do delete)</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                </span>-assign Val1_Holder = Holder<10> specialization 'by value':</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                    </span>{</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                            </span>aliases {}</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                           </span>members { N_Value = 10 }</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                     </span>}</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                            </span>-delete Holder<10> specialization</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                      </span>-see alias Val2_Holder = </div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                           </span>-create Holder<parameters[1]> specialization</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                           </span>-go into Holder<20> scope</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                      </span>-see parameters {non-type 20}</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                        </span>-see member N_Value = parameters[0]</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                          </span>-go out of Holder<20> scope (nothing do delete)</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                </span>-assign Val2_Holder = Holder<20> specialization 'by value':</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                    </span>{</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                            </span>aliases {}</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                           </span>members { N_Value = 20 }</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                                     </span>}</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                            </span>-delete Holder<20> specialization</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                                      </span>-see member Result_impl = Val1_Holder::N_value + Val2_Holder::N_Value;</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                               </span>-go out of Add_impl<10, 20> scope: </div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                   </span>-assign Result = Add_impl<10, 20>::Result_impl</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                 </span>-delete Add_impl<10, 20> specialization</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">                </span>-go out of Add<10, 20> specialization</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">  </span>-assign Value = Add<10, 20>::Result</div><div><span class="m_6243043391794316000gmail-Apple-tab-span" style="white-space:pre-wrap">    </span>-delete Add<10, 20> specialization</div><div>-go out of A_Struct scope</div><div>(...)</div><div><br></div><div><br></div><div>Thanks,</div><div>Stryku</div><div><br></div><div><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2017-04-30 23:00 GMT+02:00 mats petersson <span dir="ltr"><<a href="mailto:mats@planetcatfish.com" target="_blank">mats@planetcatfish.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Like I said, you need those types for most of the compilation process. It's REALLY hard to keep track of when these things don't matter any longer - you certainly need types that actually generate code all the way to LLVM-IR generation. That's for the AST types. IR types, which isn't quite the same thing.<div><br></div><div>The latter, you can do by doing "syntax-only" run on the compiler - it won't generate any LLVM-IR, so memory usage here is "only" AST. Also, prodcuing LLVM-IR output from the compiler (-S -emit-llvm) and then using `llc` to compile the IR to machine code, to determine memory usage of the IR types (obviously with other things).<br><br>[In my compiler project, I decided it's so hard to track what is needed again and what isn't, and decided to NOT free any memory for that reason - of course, not a particularly great strategy if you want to run it as a library in something else, but if I really had to, I could probably stick every object in one or more container(s) and free it all at the end]</div><div><br></div><div>--</div><div>Mats</div></div><div class="m_6243043391794316000HOEnZb"><div class="m_6243043391794316000h5"><div class="gmail_extra"><br><div class="gmail_quote">On 30 April 2017 at 21:12, mateusz janek <span dir="ltr"><<a href="mailto:stryku2393@gmail.com" target="_blank">stryku2393@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Sorry for no response, I was quite busy.<div><br></div><div>Thanks Brian for help with the build (: Also I've tried with the g++-6 and it has same problem with the memory usage.<br><div><br></div><div>The problem here is caused by creating a lot of template class specializations. As Mats partially said and I found in the llvm sources here: <a href="https://github.com/stryku/llvm/blob/master/include/llvm/IR/Type.h#L42" target="_blank">https://github.com/stryku/llvm<wbr>/blob/master/include/llvm/IR/T<wbr>ype.h#L42</a> types are stored till the end of program life. AFAIU every class specialization is a separate type.</div></div><div><br></div><div>Simpler program that shows my problem is e.g. <a href="https://gist.github.com/stryku/986bcd6a5d5773ef0e0136a5eca97e20" target="_blank">https://gist.github.com/s<wbr>tryku/986bcd6a5d5773ef0e0136a5<wbr>eca97e20</a></div><div>There is a lot of specializations of <span style="color:rgb(121,93,163);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">values_container</span>, <span style="color:rgb(36,41,46);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">create_co<wbr>ntainer</span>, <span style="color:rgb(121,93,163);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">create_impl etc</span>. Additionally every values_container have a lot of template parameters which in fact are also types (built-in types, but still).</div><div><br></div><div>For now, I'm playing with llvm and clang sources to understand what's going on there and I'll probably try to implement my own mechanism of storing a template class specializations.</div><div><br></div><div>Thanks for your interest,</div><div>Stryku</div><div><div class="m_6243043391794316000m_8934931187510100186h5"><div><br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-04-29 0:02 GMT+02:00 Brian Cain <span dir="ltr"><<a href="mailto:brian.cain@gmail.com" target="_blank">brian.cain@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote"><span>On Fri, Apr 28, 2017 at 6:11 AM, mateusz janek <span dir="ltr"><<a href="mailto:stryku2393@gmail.com" target="_blank">stryku2393@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Did you use CMake? If no, ctai requres clang 4.0 and to be compiled with flags: `<span style="color:rgb(36,41,46);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">-std=c++1z -ftemplate-backtrace-limit=0 -ftemplate-depth=8096`</span><div><span style="color:rgb(36,41,46);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap"></span></div></div><div dir="ltr"><span style="color:rgb(36,41,46);font-family:sfmono-regular,consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap"><br></span></div></blockquote><div><br></div></span><div>I got it to work with some tweaks to the CMake config.  It ran quickly for me, but it did allocate a decent amount of memory on the way.  Also I used a nightly build of clang and libc++ (and not libstdc++).</div><div><br></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><div>15.85user 0.48system 0:16.38elapsed 99%CPU (0avgtext+0avgdata 4053852maxresident)k</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>0inputs+24outputs (0major+381214minor)pagefaults 0swaps</div></div></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div><br></div><div>diff:</div><div><br></div></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><div>diff --git a/CMakeLists.txt b/CMakeLists.txt</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>index 0143461..109d975 100644</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>--- a/CMakeLists.txt</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+++ b/CMakeLists.txt</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>@@ -1,9 +1,9 @@</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> cmake_minimum_required(VERSIO<wbr>N 3.5)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> project(ctai)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> </div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>-add_definitions(-std=c++1z -ftemplate-backtrace-limit=0 -ftemplate-depth=1024)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>-</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>-set(CMAKE_CXX_COMPILER clang++-3.9)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+set(CMAKE_CXX_COMPILER clang++-3.9 CACHE STRING "")</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z -stdlib=libc++ -ftemplate-backtrace-limit=0 -ftemplate-depth=8192" CACHE STRING "" FORCE)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+set(CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS} "-std=c++1z -stdlib=libc++" CACHE STRING "" FORCE)</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> </div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> set(INCLUDE_FILES</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>         register.hpp</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>diff --git a/main.cpp b/main.cpp</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>index b95eb4d..35e6d6f 100644</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>--- a/main.cpp</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+++ b/main.cpp</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>@@ -30,6 +30,66 @@ using code = decltype(</div></div></div></div><span><div class="gmail_extra"><div class="gmail_quote"><div><div>     "mov ebx , 1 "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>     "add eax , ebx "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>     "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div></span><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+    "mov DWORD PTR [ ebp + 4 ] , eax "</div></div></div></div><span><div class="gmail_extra"><div class="gmail_quote"><div><div>     "jmp .loop_label "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> ":end_label "</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>     "mov eax , DWORD PTR [ ebp + 16 ] "</div></div></div></div></span><div class="gmail_extra"><div class="gmail_quote"><div><div>@@ -39,4 +99,4 @@ int main()</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div> {</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>     std::cout << "15th element of fibonacci series is: " << cai::execute_code<code>;</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>     return 0;</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>-}</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>\ No newline at end of file</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>+}</div></div></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div> </div></div>
</div></div></div>
</blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">-Brian</div>
</div></div>