can you give us a complete out-of-the-box compileable example (with imports,main,etc.) with both examples the working/and nonworking

does it work correct with dmd(32bit)?

is this "calculate2" needed to reproduce the behavior?

and what compiler did you test: dmd64, (dmd32?), ...?

Am 24.01.2012 16:20, schrieb sclytrack:


void calculate2(float a, float b)
{
        float s1 = 1.0 - a;
        float s2 = a * b;
        writeln(s2);
        writeln(a * b);
}

----------------
Output:
t*b= 0
t*b= 1.5
----------------


        assume  CS:.text._D4main10calculate2FffZv
_D4main10calculate2FffZv:
                push    RBP
                mov     RBP,RSP
                sub     RSP,020h
                movss   -010h[RBP],XMM0
                movss   -8[RBP],XMM1
                mov     RAX,03FF0000000000000h
                mov     -020h[RBP],RAX
                movsd   XMM2,-020h[RBP]
                cvtss2sd        XMM1,XMM1
                subsd   XMM2,XMM1
------conversion but xmm2 is no longer used
                cvtsd2ss        XMM2,XMM2
------precision error multiplication
                mulss   XMM1,XMM0
                movss   -018h[RBP],XMM1
                movss   XMM0,-018h[RBP]
                call      _D3std5stdio14__T7writelnTfZ7writelnFfZv@PC32
                movss   XMM0,-8[RBP]
                movss   XMM1,-010h[RBP]
                mulss   XMM0,XMM1
                call      _D3std5stdio14__T7writelnTfZ7writelnFfZv@PC32
                leave
                ret
                nop
                nop
                nop

------------
DMD64 D Compiler v2.057
Ubuntu 11.10

Reply via email to