[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