On Tue, Jul 29, 2014 at 10:56 AM, Peter Bergner <berg...@vnet.ibm.com> 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.
Okay. Thanks, David