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