https://issues.dlang.org/show_bug.cgi?id=13485
--- Comment #7 from Илья Ярошенко <[email protected]> --- > DMD does this: > > return yl2x(x, LN2); > > Which translates to: > > fyl2x ST1(x), ST(LN2) My dump: dmd -O -m64 -c test7.d (fails with -run) objdump -d test7.o > test7.asm 0000000000000000 <_D5test710__T3fooTfZ3fooFNaNbNiNfffZf>: 0: 55 push %rbp 1: 48 8b ec mov %rsp,%rbp 4: f3 0f 10 e0 movss %xmm0,%xmm4 //xmm4 = xmm0 = d 8: f3 0f 10 d9 movss %xmm1,%xmm3 //xmm3 = xmm1 = c c: f3 0f 58 c4 addss %xmm4,%xmm0 //d+=d (incorrect) 10: f3 0f 58 d8 addss %xmm0,%xmm3 //c+=d 14: f3 0f 10 c3 movss %xmm3,%xmm0 // 18: 5d pop %rbp 19: c3 retq 1a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) And without optimization: dmd -m64 -c test7.d (Success with -run) objdump -d test7.o > test7.asm 0000000000000000 <_D5test710__T3fooTfZ3fooFNaNbNiNfffZf>: 0: 55 push %rbp 1: 48 8b ec mov %rsp,%rbp 4: 48 83 ec 10 sub $0x10,%rsp 8: f3 0f 11 4d f8 movss %xmm1,-0x8(%rbp) d: f3 0f 10 4d f8 movss -0x8(%rbp),%xmm1 12: f3 0f 58 c8 addss %xmm0,%xmm1 //c+=d 16: f3 0f 11 4d f8 movss %xmm1,-0x8(%rbp) 1b: f3 0f 10 55 f8 movss -0x8(%rbp),%xmm2 20: f3 0f 58 d0 addss %xmm0,%xmm2 //c+=d 24: f3 0f 11 55 f8 movss %xmm2,-0x8(%rbp) 29: f3 0f 10 45 f8 movss -0x8(%rbp),%xmm0 2e: c9 leaveq 2f: c3 retq --
