[Issue 13485] FP wrong-code with -O

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Wed Sep 17 05:40:42 PDT 2014


https://issues.dlang.org/show_bug.cgi?id=13485

--- Comment #7 from Илья Ярошенко <ilyayaroshenko at gmail.com> ---

> 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

--


More information about the Digitalmars-d-bugs mailing list