Sent from my iPhone
On Apr 3, 2010, at 11:21 PM, "svfuerst at gmail dot com" <gcc-bugzi...@gcc.gnu.org
> wrote:
gcc 4.4 compiles the following:
_Complex long double foo(long double p1, long double p2)
{
return p1 + (__extension__ 1.0iF) * p2;
}
gcc-4.4 -O3 tgcc.c -c -o tgcc.o
into
0x0000000000000000 <+0>: fldt 0x8(%rsp)
0x0000000000000004 <+4>: fldt 0x18(%rsp)
0x0000000000000008 <+8>: fxch %st(1)
0x000000000000000a <+10>: retq
This is ok, except for the useless fxch instruction. However, gcc
4.5 compiles
the same code into:
gcc-4.5 -O3 tgcc.c -c -o tgcc.o
0x0000000000000000 <+0>: fldt 0x18(%rsp)
0x0000000000000004 <+4>: fld %st(0)
0x0000000000000006 <+6>: fmuls 0x0(%rip) # 0xc <foo+12>
0x000000000000000c <+12>: fldt 0x8(%rsp)
0x0000000000000010 <+16>: faddp %st,%st(1)
0x0000000000000012 <+18>: retq
which is quite a bit worse.
Except it is needed for handling -0.0 correctly.
--
Summary: Missed optimization with complex long double
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: svfuerst at gmail dot com
GCC build triplet: x86_64-linux
GCC host triplet: x86_64-linux
GCC target triplet: x86_64-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43639