diff options
author | David Edelsohn <dje.gcc@gmail.com> | 2021-08-25 17:41:50 -0400 |
---|---|---|
committer | David Edelsohn <dje.gcc@gmail.com> | 2021-08-26 19:13:39 -0400 |
commit | 5889e842ae4df48ac471c47d6ed72e05041a1db8 (patch) | |
tree | 4d8c5d9550326852a893567dd05af10ecb1850b9 /libgcc | |
parent | 5a6c626710ad2ac4baa2dba02fac0750177e3305 (diff) | |
download | gcc-5889e842ae4df48ac471c47d6ed72e05041a1db8.zip gcc-5889e842ae4df48ac471c47d6ed72e05041a1db8.tar.gz gcc-5889e842ae4df48ac471c47d6ed72e05041a1db8.tar.bz2 |
rs6000: inline ldouble __gcc_qsub
While performing some tests of IEEE 128 float for PPC64LE, Michael
Meissner noticed that __gcc_qsub is substantially slower than
__gcc_qadd. __gcc_qsub calls __gcc_add with the second operand
negated. Because the functions normally are invoked through
libgcc shared object, the extra PLT overhead has a large impact
on the overall time of the function. This patch converts
__gcc_qadd to a static inline function invoked by __gcc_qadd
and __gcc_qsub.
libgcc/ChangeLog:
* config/rs6000/ibm-ldouble.c (ldouble_qadd_internal): Rename from
__gcc_qadd.
(__gcc_qadd): Call ldouble_qadd_internal.
(__gcc_qsub): Call ldouble_qadd_internal with second long double
argument negated.
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/config/rs6000/ibm-ldouble.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libgcc/config/rs6000/ibm-ldouble.c b/libgcc/config/rs6000/ibm-ldouble.c index 4c13453..0b385aa 100644 --- a/libgcc/config/rs6000/ibm-ldouble.c +++ b/libgcc/config/rs6000/ibm-ldouble.c @@ -118,8 +118,8 @@ pack_ldouble (double dh, double dl) } /* Add two 'IBM128_TYPE' values and return the result. */ -IBM128_TYPE -__gcc_qadd (double a, double aa, double c, double cc) +static inline IBM128_TYPE +ldouble_qadd_internal (double a, double aa, double c, double cc) { double xh, xl, z, q, zz; @@ -158,9 +158,15 @@ __gcc_qadd (double a, double aa, double c, double cc) } IBM128_TYPE -__gcc_qsub (double a, double b, double c, double d) +__gcc_qadd (double a, double aa, double c, double cc) +{ + return ldouble_qadd_internal (a, aa, c, cc); +} + +IBM128_TYPE +__gcc_qsub (double a, double aa, double c, double cc) { - return __gcc_qadd (a, b, -c, -d); + return ldouble_qadd_internal (a, aa, -c, -cc); } #ifdef __NO_FPRS__ |