aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorDavid Edelsohn <dje.gcc@gmail.com>2021-08-25 17:41:50 -0400
committerDavid Edelsohn <dje.gcc@gmail.com>2021-08-26 19:13:39 -0400
commit5889e842ae4df48ac471c47d6ed72e05041a1db8 (patch)
tree4d8c5d9550326852a893567dd05af10ecb1850b9 /libgcc
parent5a6c626710ad2ac4baa2dba02fac0750177e3305 (diff)
downloadgcc-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.c14
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__