This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, rs6000] Use new __builtin_pack_longdouble within libgcc's ibm-ldouble.c

On Tue, Jul 29, 2014 at 10:56 AM, Peter Bergner <> wrote:
> ..after cleaning up the conflicting long double builtins and fixing a
> few bugs in the test cases, I'd like to resubmit the following:
> Currently, the IBM long double routines in libgcc use a union to construct
> a long double from two double values.  This causes horrific code generation
> that copies the two double from the FP registers over to GPRs and back
> again, giving us two loads and two stores, which leads to two load-hit-store
> hazzards.  The following patch makes use of the new __builtin_pack_longdouble
> builtin to construct the long double giving us at worse, one or two fmrs.
> This passed bootstrap and regtesting on powerpc64-linux.  Ok for trunk?
> Peter
> libgcc/
>         * config/rs6000/ibm-ldouble.c (typedef union longDblUnion): Delete.
>         (pack_ldouble): New function.
>         (__gcc_qadd): Use it.
>         (__gcc_qmul): Likewise.
>         (__gcc_qdiv): Likewise.
>         (__gcc_qneg): Likewise.
>         (__gcc_stoq): Likewise.
>         (__gcc_dtoq): Likewise.


Thanks, David

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]