<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
    <title></title>
  </head>
  <body bgcolor="#ffffff" text="#000000">
    On 02/06/2011 09:46 AM, Cyrille Berger Skott wrote:
    <blockquote cite="mid:201102060946.32245.cberger@cberger.net"
      type="cite">
      <pre wrap="">Hi,

Here is some code review:

* I did some more testing and it is indeed a regression for this bug 
<a class="moz-txt-link-freetext" href="https://bugs.kde.org/show_bug.cgi?id=176536">https://bugs.kde.org/show_bug.cgi?id=176536</a> , since I am assuming that you 
wanted it that way, having transparent pixel being erased.

For instance look at the result of the following file:

<a class="moz-txt-link-freetext" href="http://cyrille.diwi.org/tmp/krita/colored_leaves.kra">http://cyrille.diwi.org/tmp/krita/colored_leaves.kra</a>
Before patch:
<a class="moz-txt-link-freetext" href="http://cyrille.diwi.org/tmp/krita/colored_leaves_before.png">http://cyrille.diwi.org/tmp/krita/colored_leaves_before.png</a>
After patch:
<a class="moz-txt-link-freetext" href="http://cyrille.diwi.org/tmp/krita/colored_leaves_after.png">http://cyrille.diwi.org/tmp/krita/colored_leaves_after.png</a>

Since I am not convinced that "alpha lock" should be used for that, since it 
is there to prevent editing of the alpha channel, if the having transparent 
pixel erased is a wanted behaviour we should probably introduce a "keep 
transparency when compositing" and have it on by default
</pre>
    </blockquote>
    Oh, yes you are right. This is a problem for layer compositing.<br>
    I don't know how easily it can be done but I would like to have a
    button, to keep<br>
    transparency when compositing layers, for every layer next to the
    alpha lock button<br>
    and of course turned on by default if you want it that way.<br>
    I have the rough guess that the layer compositing simply works with
    the CompositeOps alpha<br>
    locking turned off by default. So turning it on by default and
    adding an option to turn<br>
    it off (per layer) should hopefully solve the problem :D if you
    agree.<br>
    <br>
    <blockquote cite="mid:201102060946.32245.cberger@cberger.net"
      type="cite">
      <pre wrap="">* the optimized integers operations do provide a significant boost in speed, 
about 10% on the composite operations, that translate to about 5% when 
drawing. I don't know at what size of brush you tried, but even on high-end 
hardware it makes a noticeable difference when using large size brushes. On 
the other hand, it does provide an unnoticeable difference in the results. 
This is why those optimizwd integers operations are used in Gimp, imagemagick 
and many other graphics applications. So I am against dropping them. If it is 
really a problem for you, I would suggest the use of a compile switch, 
ENABLE_EXACT_PRECISION_COMPOSITE_OPS , defaulted to off.
</pre>
    </blockquote>
    Ok, my biggest brush only has a diameter of 300px.<br>
    I didn't meant to drop those optimized functions. I just had some
    problems with the<br>
    result and wanted to get everything working right before i start
    optimizing anything :D<br>
    <br>
    <blockquote cite="mid:201102060946.32245.cberger@cberger.net"
      type="cite">
      <pre wrap="">
* KoCompositeOpFunction.h should not duplicate the content of 
KoColorSpaceMath.h (especially lerp, mul) and the functions that does not 
exist in KoColorSpaceMath should be added (like inv) Similary use "clamp" from 
KoColorSpaceMath, since your version clamp values for floating points as well, 
we should not happen.
</pre>
    </blockquote>
    Would you agree if I add those functions as aliases to
    KoColorSpaceMath.h<br>
    because i think in my opinion it makes the code more readable to
    have a<br>
    simple function mul(..., ...) then to specify every time
    KoColorSpaceMaths&lt;...&gt;::multiply(..., ...).<br>
    And I would like to have two versions of the multiplication
    functions (optimized and unoptimized) like:<br>
    <br>
    // fast version<br>
    template&lt;class T&gt;<br>
    inline T mul(T a, T b) { T(KoColorSpaceMaths&lt;T&gt;::multiply(a,
    b)); }<br>
    <br>
    // accurate version<br>
    template&lt;class T&gt;<br>
    inline T mulac(T a, T b) {<br>
    &nbsp;&nbsp;&nbsp; typedef typename KoColorSpaceMathsTraits&lt;T&gt;::compositetype
    composite_type;<br>
    &nbsp;&nbsp;&nbsp; return T(composite_type(a) * b /
    KoColorSpaceMathsTraits&lt;T&gt;::unitValue);<br>
    }<br>
    <br>
    So i can add the fast version everywhere where it works and the
    accurate version everywhere else.<br>
    <br>
    About the clamp function. I thought even the FP versions need to be
    clamped to the range<br>
    between 0.0 and 1.0 (I used the camp function only where the values
    could exceed this bound e.g. after divisions)<br>
    because without clamping the FP versions would behave different to
    the integer versions or do<br>
    I understand something wrong here?<br>
    <br>
    Ah, yes something else. I've got a question about the composite type
    for float data types.<br>
    The KoColorSpaceMathsTraits&lt;float&gt;::compositetype is double.
    is this necessary?<br>
    wouldn't float be sufficient here?<br>
    <br>
    And the KoColorSpaceMaths::divide method takes values of type T and
    returns a value of type T.<br>
    But i think it should return a value of type T-&gt;compositetype.
    For example dividing 1.0 by 0.5<br>
    will result in 2.0 what would be 510 in 8bit per channel mode and we
    have a data loss here because it will be<br>
    truncated to T.<br>
    <br>
    <blockquote cite="mid:201102060946.32245.cberger@cberger.net"
      type="cite">
      <pre wrap="">
* have you cheked if compositeFunc is inlined inside KoCompositeOpGenericSC ?

</pre>
    </blockquote>
    Well, yes I'm pretty sure. I compiled a little test program:<br>
    <br>
    <small><tt>#include &lt;cstdio&gt;<br>
        <br>
        template&lt;class T&gt;<br>
        inline T bfAdd(T src, T dst) { return src + dst; }<br>
        <br>
        template&lt;class T, T blendFunc(T,T)&gt;<br>
        struct CompositingOp<br>
        {<br>
        &nbsp;&nbsp;&nbsp; inline void doSomething(T src, T dst)<br>
        &nbsp;&nbsp;&nbsp; {<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double result = double(blendFunc(src, dst));<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::printf("%f\n", result);<br>
        &nbsp;&nbsp;&nbsp; }<br>
        };<br>
        <br>
        int main()<br>
        {<br>
        &nbsp;&nbsp;&nbsp; CompositingOp&lt;int, &amp;bfAdd&gt; opAdd;<br>
        &nbsp;&nbsp;&nbsp; int src = 40;<br>
        &nbsp;&nbsp;&nbsp; int dst = 20;<br>
        &nbsp;&nbsp;&nbsp; <br>
        &nbsp;&nbsp;&nbsp; opAdd.doSomething(src, dst);<br>
        &nbsp;&nbsp;&nbsp; return 0;<br>
        }</tt></small><br>
    <br>
    The ASM result should speak for itself :D<br>
    <br>
    <u>Unoptimized code compiled and disassembled with:</u><br>
    g++ -c -O0 -g3 main.cpp<br>
    objdump -d -s main.o<br>
    <br>
    <small><tt>0000000000000000 &lt;main&gt;:<br>
        &nbsp;&nbsp; 0:&nbsp;&nbsp;&nbsp; 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %rbp<br>
        &nbsp;&nbsp; 1:&nbsp;&nbsp;&nbsp; 48 89 e5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %rsp,%rbp<br>
        &nbsp;&nbsp; 4:&nbsp;&nbsp;&nbsp; 48 83 ec 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sub&nbsp;&nbsp;&nbsp; $0x10,%rsp<br>
        &nbsp;&nbsp; 8:&nbsp;&nbsp;&nbsp; c7 45 f8 28 00 00 00 &nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp; $0x28,-0x8(%rbp)<br>
        &nbsp;&nbsp; f:&nbsp;&nbsp;&nbsp; c7 45 f4 14 00 00 00 &nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp; $0x14,-0xc(%rbp)<br>
        &nbsp; 16:&nbsp;&nbsp;&nbsp; 8b 55 f4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; -0xc(%rbp),%edx<br>
        &nbsp; 19:&nbsp;&nbsp;&nbsp; 8b 4d f8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; -0x8(%rbp),%ecx<br>
        &nbsp; 1c:&nbsp;&nbsp;&nbsp; 48 8d 45 ff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp; -0x1(%rbp),%rax<br>
        &nbsp; 20:&nbsp;&nbsp;&nbsp; 89 ce&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %ecx,%esi<br>
        &nbsp; 22:&nbsp;&nbsp;&nbsp; 48 89 c7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %rax,%rdi<br>
        &nbsp; 25:&nbsp;&nbsp;&nbsp; e8 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; callq&nbsp; 2a &lt;main+0x2a&gt;<br>
        &nbsp; 2a:&nbsp;&nbsp;&nbsp; b8 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; $0x0,%eax<br>
        &nbsp; 2f:&nbsp;&nbsp;&nbsp; c9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; leaveq <br>
        &nbsp; 30:&nbsp;&nbsp;&nbsp; c3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retq&nbsp;&nbsp; <br>
        <br>
        Disassembly of section .text._Z5bfAddIiET_S0_S0_:<br>
        <br>
        0000000000000000 &lt;_Z5bfAddIiET_S0_S0_&gt;:<br>
        &nbsp;&nbsp; 0:&nbsp;&nbsp;&nbsp; 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %rbp<br>
        &nbsp;&nbsp; 1:&nbsp;&nbsp;&nbsp; 48 89 e5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %rsp,%rbp<br>
        &nbsp;&nbsp; 4:&nbsp;&nbsp;&nbsp; 89 7d fc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %edi,-0x4(%rbp)<br>
        &nbsp;&nbsp; 7:&nbsp;&nbsp;&nbsp; 89 75 f8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esi,-0x8(%rbp)<br>
        &nbsp;&nbsp; a:&nbsp;&nbsp;&nbsp; 8b 45 f8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; -0x8(%rbp),%eax<br>
        &nbsp;&nbsp; d:&nbsp;&nbsp;&nbsp; 8b 55 fc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; -0x4(%rbp),%edx<br>
        &nbsp; 10:&nbsp;&nbsp;&nbsp; 8d 04 02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp; (%rdx,%rax,1),%eax<br>
        &nbsp; 13:&nbsp;&nbsp;&nbsp; c9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; leaveq <br>
        &nbsp; 14:&nbsp;&nbsp;&nbsp; c3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retq&nbsp;&nbsp; <br>
        <br>
        Disassembly of section
        .text._ZN13CompositingOpIiXadL_Z5bfAddIiET_S1_S1_EEE11doSomethingEii:<br>
        <br>
        0000000000000000
        &lt;_ZN13CompositingOpIiXadL_Z5bfAddIiET_S1_S1_EEE11doSomethingEii&gt;:<br>
        &nbsp;&nbsp; 0:&nbsp;&nbsp;&nbsp; 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; push&nbsp;&nbsp; %rbp<br>
        &nbsp;&nbsp; 1:&nbsp;&nbsp;&nbsp; 48 89 e5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %rsp,%rbp<br>
        &nbsp;&nbsp; 4:&nbsp;&nbsp;&nbsp; 48 83 ec 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sub&nbsp;&nbsp;&nbsp; $0x20,%rsp<br>
        &nbsp;&nbsp; 8:&nbsp;&nbsp;&nbsp; 48 89 7d e8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %rdi,-0x18(%rbp)<br>
        &nbsp;&nbsp; c:&nbsp;&nbsp;&nbsp; 89 75 e4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %esi,-0x1c(%rbp)<br>
        &nbsp;&nbsp; f:&nbsp;&nbsp;&nbsp; 89 55 e0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %edx,-0x20(%rbp)<br>
        &nbsp; 12:&nbsp;&nbsp;&nbsp; 8b 55 e0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; -0x20(%rbp),%edx<br>
        &nbsp; 15:&nbsp;&nbsp;&nbsp; 8b 45 e4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; -0x1c(%rbp),%eax<br>
        &nbsp; 18:&nbsp;&nbsp;&nbsp; 89 d6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %edx,%esi<br>
        &nbsp; 1a:&nbsp;&nbsp;&nbsp; 89 c7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %eax,%edi<br>
        &nbsp; 1c:&nbsp;&nbsp;&nbsp; e8 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; callq&nbsp; 21
&lt;_ZN13CompositingOpIiXadL_Z5bfAddIiET_S1_S1_EEE11doSomethingEii+0x21&gt;<br>
        &nbsp; 21:&nbsp;&nbsp;&nbsp; f2 0f 2a c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cvtsi2sd %eax,%xmm0<br>
        &nbsp; 25:&nbsp;&nbsp;&nbsp; f2 0f 11 45 f8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; movsd&nbsp; %xmm0,-0x8(%rbp)<br>
        &nbsp; 2a:&nbsp;&nbsp;&nbsp; f2 0f 10 45 f8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; movsd&nbsp; -0x8(%rbp),%xmm0<br>
        &nbsp; 2f:&nbsp;&nbsp;&nbsp; bf 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; $0x0,%edi<br>
        &nbsp; 34:&nbsp;&nbsp;&nbsp; b8 01 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; $0x1,%eax<br>
        &nbsp; 39:&nbsp;&nbsp;&nbsp; e8 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; callq&nbsp; 3e
&lt;_ZN13CompositingOpIiXadL_Z5bfAddIiET_S1_S1_EEE11doSomethingEii+0x3e&gt;<br>
        &nbsp; 3e:&nbsp;&nbsp;&nbsp; c9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; leaveq <br>
        &nbsp; 3f:&nbsp;&nbsp;&nbsp; c3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retq<br>
      </tt></small><br>
    <u>Optimized code compiled and disassembled with:</u><br>
    g++ -c -O1 -g3 main.cpp<br>
    objdump -d -s main.o<br>
    <br>
    <small><tt>0000000000000000 &lt;main&gt;:<br>
        &nbsp;&nbsp; 0:&nbsp;&nbsp;&nbsp; 48 83 ec 08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sub&nbsp;&nbsp;&nbsp; $0x8,%rsp<br>
        &nbsp;&nbsp; 4:&nbsp;&nbsp;&nbsp; f2 0f 10 05 00 00 00 &nbsp;&nbsp;&nbsp; movsd&nbsp; 0x0(%rip),%xmm0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        # c &lt;main+0xc&gt;<br>
        &nbsp;&nbsp; b:&nbsp;&nbsp;&nbsp; 00 <br>
        &nbsp;&nbsp; c:&nbsp;&nbsp;&nbsp; be 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; $0x0,%esi<br>
        &nbsp; 11:&nbsp;&nbsp;&nbsp; bf 01 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; $0x1,%edi<br>
        &nbsp; 16:&nbsp;&nbsp;&nbsp; b8 01 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; $0x1,%eax<br>
        &nbsp; 1b:&nbsp;&nbsp;&nbsp; e8 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; callq&nbsp; 20 &lt;main+0x20&gt;<br>
        &nbsp; 20:&nbsp;&nbsp;&nbsp; b8 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; $0x0,%eax<br>
        &nbsp; 25:&nbsp;&nbsp;&nbsp; 48 83 c4 08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp; $0x8,%rsp<br>
        &nbsp; 29:&nbsp;&nbsp;&nbsp; c3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retq</tt></small><br>
    <br>
    <br>
  </body>
</html>