------- Comment #1 from pinskia at gmail dot com  2010-04-04 06:28 -------
Subject: Re:   New: Missed optimization with complex long double



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
>


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43639

Reply via email to