arrfab / rpms / glibc

Forked from rpms/glibc 5 years ago
Clone

Blame SOURCES/glibc-rh1385004-20.patch

147e83
From fdd895c45c52241f786cf4e29ccc45c240b1acb5 Mon Sep 17 00:00:00 2001
147e83
From: Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
147e83
Date: Mon, 27 Jun 2016 16:03:10 -0300
147e83
Subject: [PATCH] powerpc: Add a POWER8-optimized version of expf()
147e83
147e83
This implementation is based on the one already used at
147e83
sysdeps/x86_64/fpu/e_expf.S.
147e83
147e83
This implementation improves the performance by ~14% on average in synthetic
147e83
benchmarks at the cost of decreasing accuracy to 1 ULP.
147e83
147e83
(cherry picked from commit 35da2541c382d1d4b7c9a15049a3cd1c7a6863a3)
147e83
---
147e83
 ChangeLog                                          |  11 +
147e83
 sysdeps/powerpc/fpu/libm-test-ulps                 |   2 +
147e83
 sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile   |   3 +-
147e83
 .../powerpc64/fpu/multiarch/e_expf-power8.S        |  26 ++
147e83
 .../powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c |  24 ++
147e83
 sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c   |  31 +++
147e83
 sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S      | 303 +++++++++++++++++++++
147e83
 7 files changed, 399 insertions(+), 1 deletion(-)
147e83
 create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S
147e83
 create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c
147e83
 create mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c
147e83
 create mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S
147e83
147e83
diff --git a/ChangeLog b/ChangeLog
147e83
index af5f694..6cb2578 100644
147e83
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
147e83
index 0e3eac7..331763e 100644
147e83
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
147e83
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
147e83
@@ -24,7 +24,8 @@ libm-sysdep_routines += s_isnan-power7 s_isnan-power6x s_isnan-power6 \
147e83
                        s_modff-power5+ s_modff-ppc64 e_hypot-ppc64 \
147e83
                        e_hypot-power7 e_hypotf-ppc64 e_hypotf-power7 \
147e83
                        s_isnan-power8 s_isinf-power8 s_finite-power8 \
147e83
-                       s_llrint-power8 s_llround-power8
147e83
+                       s_llrint-power8 s_llround-power8 \
147e83
+                       e_expf-power8 e_expf-ppc64
147e83
 
147e83
 CFLAGS-s_logbf-power7.c = -mcpu=power7
147e83
 CFLAGS-s_logbl-power7.c = -mcpu=power7
147e83
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S
147e83
new file mode 100644
147e83
index 0000000..02eff24
147e83
--- /dev/null
147e83
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S
147e83
@@ -0,0 +1,26 @@
147e83
+/* __ieee754_expf() POWER8 version.
147e83
+   Copyright (C) 2016 Free Software Foundation, Inc.
147e83
+   This file is part of the GNU C Library.
147e83
+
147e83
+   The GNU C Library is free software; you can redistribute it and/or
147e83
+   modify it under the terms of the GNU Lesser General Public
147e83
+   License as published by the Free Software Foundation; either
147e83
+   version 2.1 of the License, or (at your option) any later version.
147e83
+
147e83
+   The GNU C Library is distributed in the hope that it will be useful,
147e83
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
147e83
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
147e83
+   Lesser General Public License for more details.
147e83
+
147e83
+   You should have received a copy of the GNU Lesser General Public
147e83
+   License along with the GNU C Library; if not, see
147e83
+   <http://www.gnu.org/licenses/>.  */
147e83
+
147e83
+#include <sysdep.h>
147e83
+
147e83
+#undef strong_alias
147e83
+#define strong_alias(a, b)
147e83
+
147e83
+#define __ieee754_expf __ieee754_expf_power8
147e83
+
147e83
+#include <sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S>
147e83
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c
147e83
new file mode 100644
147e83
index 0000000..40f9e3a
147e83
--- /dev/null
147e83
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c
147e83
@@ -0,0 +1,24 @@
147e83
+/* __ieee_expf() PowerPC64 version.
147e83
+   Copyright (C) 2016 Free Software Foundation, Inc.
147e83
+   This file is part of the GNU C Library.
147e83
+
147e83
+   The GNU C Library is free software; you can redistribute it and/or
147e83
+   modify it under the terms of the GNU Lesser General Public
147e83
+   License as published by the Free Software Foundation; either
147e83
+   version 2.1 of the License, or (at your option) any later version.
147e83
+
147e83
+   The GNU C Library is distributed in the hope that it will be useful,
147e83
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
147e83
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
147e83
+   Lesser General Public License for more details.
147e83
+
147e83
+   You should have received a copy of the GNU Lesser General Public
147e83
+   License along with the GNU C Library; if not, see
147e83
+   <http://www.gnu.org/licenses/>.  */
147e83
+
147e83
+#undef strong_alias
147e83
+#define strong_alias(a, b)
147e83
+
147e83
+#define __ieee754_expf __ieee754_expf_ppc64
147e83
+
147e83
+#include <sysdeps/ieee754/flt-32/e_expf.c>
147e83
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c
147e83
new file mode 100644
147e83
index 0000000..1d9a8c6
147e83
--- /dev/null
147e83
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c
147e83
@@ -0,0 +1,31 @@
147e83
+/* Multiple versions of ieee754_expf.
147e83
+   Copyright (C) 2016 Free Software Foundation, Inc.
147e83
+   This file is part of the GNU C Library.
147e83
+
147e83
+   The GNU C Library is free software; you can redistribute it and/or
147e83
+   modify it under the terms of the GNU Lesser General Public
147e83
+   License as published by the Free Software Foundation; either
147e83
+   version 2.1 of the License, or (at your option) any later version.
147e83
+
147e83
+   The GNU C Library is distributed in the hope that it will be useful,
147e83
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
147e83
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
147e83
+   Lesser General Public License for more details.
147e83
+
147e83
+   You should have received a copy of the GNU Lesser General Public
147e83
+   License along with the GNU C Library; if not, see
147e83
+   <http://www.gnu.org/licenses/>.  */
147e83
+
147e83
+#include <math.h>
147e83
+#include <math_ldbl_opt.h>
147e83
+#include "init-arch.h"
147e83
+
147e83
+extern __typeof (__ieee754_expf) __ieee754_expf_ppc64 attribute_hidden;
147e83
+extern __typeof (__ieee754_expf) __ieee754_expf_power8 attribute_hidden;
147e83
+
147e83
+libc_ifunc (__ieee754_expf,
147e83
+	    (hwcap2 & PPC_FEATURE2_ARCH_2_07)
147e83
+	    ? __ieee754_expf_power8
147e83
+	    : __ieee754_expf_ppc64);
147e83
+
147e83
+strong_alias (__ieee754_expf, __expf_finite)
147e83
diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S b/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S
147e83
new file mode 100644
147e83
index 0000000..a5e68bb
147e83
--- /dev/null
147e83
+++ b/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S
147e83
@@ -0,0 +1,303 @@
147e83
+/* Optimized expf().  PowerPC64/POWER8 version.
147e83
+   Copyright (C) 2016 Free Software Foundation, Inc.
147e83
+   This file is part of the GNU C Library.
147e83
+
147e83
+   The GNU C Library is free software; you can redistribute it and/or
147e83
+   modify it under the terms of the GNU Lesser General Public
147e83
+   License as published by the Free Software Foundation; either
147e83
+   version 2.1 of the License, or (at your option) any later version.
147e83
+
147e83
+   The GNU C Library is distributed in the hope that it will be useful,
147e83
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
147e83
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
147e83
+   Lesser General Public License for more details.
147e83
+
147e83
+   You should have received a copy of the GNU Lesser General Public
147e83
+   License along with the GNU C Library; if not, see
147e83
+   <http://www.gnu.org/licenses/>.  */
147e83
+
147e83
+#include <sysdep.h>
147e83
+
147e83
+/* Short algorithm description:
147e83
+ *
147e83
+ *  Let K = 64 (table size).
147e83
+ *       e^x  = 2^(x/log(2)) = 2^n * T[j] * (1 + P(y))
147e83
+ *  where:
147e83
+ *       x = m*log(2)/K + y,    y in [0.0..log(2)/K]
147e83
+ *       m = n*K + j,           m,n,j - signed integer, j in [0..K-1]
147e83
+ *       values of 2^(j/K) are tabulated as T[j].
147e83
+ *
147e83
+ *       P(y) is a minimax polynomial approximation of expf(y)-1
147e83
+ *       on small interval [0.0..log(2)/K].
147e83
+ *
147e83
+ *       P(y) = P3*y*y*y*y + P2*y*y*y + P1*y*y + P0*y, calculated as
147e83
+ *       z = y*y;    P(y) = (P3*z + P1)*z + (P2*z + P0)*y
147e83
+ *
147e83
+ * Special cases:
147e83
+ *  expf(NaN) = NaN
147e83
+ *  expf(+INF) = +INF
147e83
+ *  expf(-INF) = 0
147e83
+ *  expf(x) = 1 for subnormals
147e83
+ *  for finite argument, only expf(0)=1 is exact
147e83
+ *  expf(x) overflows if x>88.7228317260742190
147e83
+ *  expf(x) underflows if x<-103.972076416015620
147e83
+ */
147e83
+
147e83
+#define C1 0x42ad496b		/* Single precision 125*log(2).  */
147e83
+#define C2 0x31800000		/* Single precision 2^(-28).  */
147e83
+#define SP_INF 0x7f800000	/* Single precision Inf.  */
147e83
+#define SP_EXP_BIAS 0x1fc0	/* Single precision exponent bias.  */
147e83
+
147e83
+#define DATA_OFFSET r9
147e83
+
147e83
+/* Implements the function
147e83
+
147e83
+   float [fp1] expf (float [fp1] x)  */
147e83
+
147e83
+	.machine power8
147e83
+EALIGN(__ieee754_expf, 4, 0)
147e83
+	addis	DATA_OFFSET,r2,.Lanchor@toc@ha
147e83
+	addi	DATA_OFFSET,DATA_OFFSET,.Lanchor@toc@l
147e83
+
147e83
+	xscvdpspn v0,v1
147e83
+	mfvsrd	r8,v0		/* r8 = x  */
147e83
+	lfd	fp2,(.KLN2-.Lanchor)(DATA_OFFSET)
147e83
+	lfd	fp3,(.P2-.Lanchor)(DATA_OFFSET)
147e83
+	rldicl	r3,r8,32,33	/* r3 = |x|  */
147e83
+	lis	r4,C1@ha	/* r4 = 125*log(2)  */
147e83
+	ori	r4,r4,C1@l
147e83
+	cmpw	r3,r4
147e83
+	lfd	fp5,(.P3-.Lanchor)(DATA_OFFSET)
147e83
+	lfd	fp4,(.RS-.Lanchor)(DATA_OFFSET)
147e83
+	fmadd	fp2,fp1,fp2,fp4	/* fp2 = x * K/log(2) + (2^23 + 2^22)  */
147e83
+	bge	L(special_paths)	/* |x| >= 125*log(2) ?  */
147e83
+
147e83
+	lis	r4,C2@ha
147e83
+	ori	r4,r4,C2@l
147e83
+	cmpw	r3,r4
147e83
+	blt	L(small_args)	/* |x| < 2^(-28) ?  */
147e83
+
147e83
+	/* Main path: here if 2^(-28) <= |x| < 125*log(2) */
147e83
+	frsp	fp6,fp2
147e83
+	xscvdpsp v2,v2
147e83
+	mfvsrd	r8,v2
147e83
+	mr	r3,r8			/* r3 = m  */
147e83
+	rldicl	r8,r8,32,58		/* r8 = j  */
147e83
+	lfs	fp4,(.SP_RS-.Lanchor)(DATA_OFFSET)
147e83
+	fsubs	fp2,fp6,fp4		/* fp2 = m = x * K/log(2)  */
147e83
+	srdi	r3,r3,32
147e83
+	clrrwi	r3,r3,6			/* r3 = n  */
147e83
+	lfd	fp6,(.NLN2K-.Lanchor)(DATA_OFFSET)
147e83
+	fmadd	fp0,fp2,fp6,fp1		/* fp0 = y = x - m*log(2)/K  */
147e83
+	fmul	fp2,fp0,fp0		/* fp2 = z = y^2  */
147e83
+	lfd	fp4,(.P1-.Lanchor)(DATA_OFFSET)
147e83
+	lfd	fp6,(.P0-.Lanchor)(DATA_OFFSET)
147e83
+	lis	r4,SP_EXP_BIAS@ha
147e83
+	ori	r4,r4,SP_EXP_BIAS@l
147e83
+	add	r3,r3,r4
147e83
+	rldic	r3,r3,49,1		/* r3 = 2^n  */
147e83
+	fmadd	fp4,fp5,fp2,fp4		/* fp4 = P3 * z + P1  */
147e83
+	fmadd	fp6,fp3,fp2,fp6		/* fp6 = P2 * z + P0  */
147e83
+	mtvsrd	v1,r3
147e83
+	xscvspdp v1,v1
147e83
+	fmul	fp4,fp4,fp2		/* fp4 = (P3 * z + P1)*z  */
147e83
+	fmadd	fp0,fp0,fp6,fp4		/* fp0 = P(y)  */
147e83
+	sldi	r8,r8,3			/* Access doublewords from T[j].  */
147e83
+	addi	r6,DATA_OFFSET,(.Ttable-.Lanchor)
147e83
+	lfdx	fp3,r6,r8
147e83
+	fmadd	fp0,fp0,fp3,fp3		/* fp0 = T[j] * (1 + P(y))  */
147e83
+	fmul	fp1,fp1,fp0		/* fp1 = 2^n * T[j] * (1 + P(y))  */
147e83
+	frsp	fp1,fp1
147e83
+	blr
147e83
+
147e83
+	.align	4
147e83
+/* x is either underflow, overflow, infinite or NaN.  */
147e83
+L(special_paths):
147e83
+	srdi	r8,r8,32
147e83
+	rlwinm	r8,r8,3,29,29		/* r8 = 0, if x positive.
147e83
+					   r8 = 4, otherwise.  */
147e83
+	addi	r6,DATA_OFFSET,(.SPRANGE-.Lanchor)
147e83
+	lwzx	r4,r6,r8		/* r4 = .SPRANGE[signbit(x)]  */
147e83
+	cmpw	r3,r4
147e83
+	/* |x| <= .SPRANGE[signbit(x)]  */
147e83
+	ble	L(near_under_or_overflow)
147e83
+
147e83
+	lis	r4,SP_INF@ha
147e83
+	ori	r4,r4,SP_INF@l
147e83
+	cmpw	r3,r4
147e83
+	bge	L(arg_inf_or_nan)	/* |x| > Infinite ?  */
147e83
+
147e83
+	addi	r6,DATA_OFFSET,(.SPLARGE_SMALL-.Lanchor)
147e83
+	lfsx	fp1,r6,r8
147e83
+	fmuls	fp1,fp1,fp1
147e83
+	blr
147e83
+
147e83
+
147e83
+	.align	4
147e83
+L(small_args):
147e83
+	/* expf(x) = 1.0, where |x| < |2^(-28)|  */
147e83
+	lfs	fp2,(.SPone-.Lanchor)(DATA_OFFSET)
147e83
+	fadds	fp1,fp1,fp2
147e83
+	blr
147e83
+
147e83
+
147e83
+	.align	4
147e83
+L(arg_inf_or_nan:)
147e83
+	bne	L(arg_nan)
147e83
+
147e83
+	/* expf(+INF) = +INF
147e83
+	   expf(-INF) = 0  */
147e83
+	addi	r6,DATA_OFFSET,(.INF_ZERO-.Lanchor)
147e83
+	lfsx	fp1,r6,r8
147e83
+	blr
147e83
+
147e83
+
147e83
+	.align	4
147e83
+L(arg_nan):
147e83
+	/* expf(NaN) = NaN  */
147e83
+	fadd	fp1,fp1,fp1
147e83
+	frsp	fp1,fp1
147e83
+	blr
147e83
+
147e83
+	.align	4
147e83
+L(near_under_or_overflow):
147e83
+	frsp	fp6,fp2
147e83
+	xscvdpsp v2,v2
147e83
+	mfvsrd	r8,v2
147e83
+	mr	r3,r8			/* r3 = m  */
147e83
+	rldicl	r8,r8,32,58		/* r8 = j  */
147e83
+	lfs	fp4,(.SP_RS-.Lanchor)(DATA_OFFSET)
147e83
+	fsubs	fp2,fp6,fp4		/* fp2 = m = x * K/log(2)  */
147e83
+	srdi	r3,r3,32
147e83
+	clrrwi	r3,r3,6			/* r3 = n  */
147e83
+	lfd	fp6,(.NLN2K-.Lanchor)(DATA_OFFSET)
147e83
+	fmadd	fp0,fp2,fp6,fp1		/* fp0 = y = x - m*log(2)/K  */
147e83
+	fmul	fp2,fp0,fp0		/* fp2 = z = y^2  */
147e83
+	lfd	fp4,(.P1-.Lanchor)(DATA_OFFSET)
147e83
+	lfd	fp6,(.P0-.Lanchor)(DATA_OFFSET)
147e83
+	ld	r4,(.DP_EXP_BIAS-.Lanchor)(DATA_OFFSET)
147e83
+	add	r3,r3,r4
147e83
+	rldic	r3,r3,46,1		/* r3 = 2  */
147e83
+	fmadd	fp4,fp5,fp2,fp4		/* fp4 = P3 * z + P1  */
147e83
+	fmadd	fp6,fp3,fp2,fp6		/* fp6 = P2 * z + P0  */
147e83
+	mtvsrd	v1,r3
147e83
+	fmul	fp4,fp4,fp2		/* fp4 = (P3*z + P1)*z  */
147e83
+	fmadd	fp0,fp0,fp6,fp4		/* fp0 = P(y)  */
147e83
+	sldi	r8,r8,3			/* Access doublewords from T[j].  */
147e83
+	addi	r6,DATA_OFFSET,(.Ttable-.Lanchor)
147e83
+	lfdx	fp3,r6,r8
147e83
+	fmadd	fp0,fp0,fp3,fp3		/* fp0 = T[j] * (1 + T[j])  */
147e83
+	fmul	fp1,fp1,fp0		/* fp1 = 2^n * T[j] * (1 + T[j])  */
147e83
+	frsp	fp1,fp1
147e83
+	blr
147e83
+END(__ieee754_expf)
147e83
+
147e83
+	.section .rodata, "a",@progbits
147e83
+.Lanchor:
147e83
+	.balign	8
147e83
+/* Table T[j] = 2^(j/K).  Double precision.  */
147e83
+.Ttable:
147e83
+	.8byte	0x3ff0000000000000
147e83
+	.8byte	0x3ff02c9a3e778061
147e83
+	.8byte	0x3ff059b0d3158574
147e83
+	.8byte	0x3ff0874518759bc8
147e83
+	.8byte	0x3ff0b5586cf9890f
147e83
+	.8byte	0x3ff0e3ec32d3d1a2
147e83
+	.8byte	0x3ff11301d0125b51
147e83
+	.8byte	0x3ff1429aaea92de0
147e83
+	.8byte	0x3ff172b83c7d517b
147e83
+	.8byte	0x3ff1a35beb6fcb75
147e83
+	.8byte	0x3ff1d4873168b9aa
147e83
+	.8byte	0x3ff2063b88628cd6
147e83
+	.8byte	0x3ff2387a6e756238
147e83
+	.8byte	0x3ff26b4565e27cdd
147e83
+	.8byte	0x3ff29e9df51fdee1
147e83
+	.8byte	0x3ff2d285a6e4030b
147e83
+	.8byte	0x3ff306fe0a31b715
147e83
+	.8byte	0x3ff33c08b26416ff
147e83
+	.8byte	0x3ff371a7373aa9cb
147e83
+	.8byte	0x3ff3a7db34e59ff7
147e83
+	.8byte	0x3ff3dea64c123422
147e83
+	.8byte	0x3ff4160a21f72e2a
147e83
+	.8byte	0x3ff44e086061892d
147e83
+	.8byte	0x3ff486a2b5c13cd0
147e83
+	.8byte	0x3ff4bfdad5362a27
147e83
+	.8byte	0x3ff4f9b2769d2ca7
147e83
+	.8byte	0x3ff5342b569d4f82
147e83
+	.8byte	0x3ff56f4736b527da
147e83
+	.8byte	0x3ff5ab07dd485429
147e83
+	.8byte	0x3ff5e76f15ad2148
147e83
+	.8byte	0x3ff6247eb03a5585
147e83
+	.8byte	0x3ff6623882552225
147e83
+	.8byte	0x3ff6a09e667f3bcd
147e83
+	.8byte	0x3ff6dfb23c651a2f
147e83
+	.8byte	0x3ff71f75e8ec5f74
147e83
+	.8byte	0x3ff75feb564267c9
147e83
+	.8byte	0x3ff7a11473eb0187
147e83
+	.8byte	0x3ff7e2f336cf4e62
147e83
+	.8byte	0x3ff82589994cce13
147e83
+	.8byte	0x3ff868d99b4492ed
147e83
+	.8byte	0x3ff8ace5422aa0db
147e83
+	.8byte	0x3ff8f1ae99157736
147e83
+	.8byte	0x3ff93737b0cdc5e5
147e83
+	.8byte	0x3ff97d829fde4e50
147e83
+	.8byte	0x3ff9c49182a3f090
147e83
+	.8byte	0x3ffa0c667b5de565
147e83
+	.8byte	0x3ffa5503b23e255d
147e83
+	.8byte	0x3ffa9e6b5579fdbf
147e83
+	.8byte	0x3ffae89f995ad3ad
147e83
+	.8byte	0x3ffb33a2b84f15fb
147e83
+	.8byte	0x3ffb7f76f2fb5e47
147e83
+	.8byte	0x3ffbcc1e904bc1d2
147e83
+	.8byte	0x3ffc199bdd85529c
147e83
+	.8byte	0x3ffc67f12e57d14b
147e83
+	.8byte	0x3ffcb720dcef9069
147e83
+	.8byte	0x3ffd072d4a07897c
147e83
+	.8byte	0x3ffd5818dcfba487
147e83
+	.8byte	0x3ffda9e603db3285
147e83
+	.8byte	0x3ffdfc97337b9b5f
147e83
+	.8byte	0x3ffe502ee78b3ff6
147e83
+	.8byte	0x3ffea4afa2a490da
147e83
+	.8byte	0x3ffefa1bee615a27
147e83
+	.8byte	0x3fff50765b6e4540
147e83
+	.8byte	0x3fffa7c1819e90d8
147e83
+
147e83
+.KLN2:
147e83
+	.8byte	0x40571547652b82fe	/* Double precision K/log(2).  */
147e83
+
147e83
+/* Double precision polynomial coefficients.  */
147e83
+.P0:
147e83
+	.8byte	0x3fefffffffffe7c6
147e83
+.P1:
147e83
+	.8byte	0x3fe00000008d6118
147e83
+.P2:
147e83
+	.8byte	0x3fc55550da752d4f
147e83
+.P3:
147e83
+	.8byte	0x3fa56420eb78fa85
147e83
+
147e83
+.RS:
147e83
+	.8byte	0x4168000000000000	/* Double precision 2^23 + 2^22.  */
147e83
+.NLN2K:
147e83
+	.8byte	0xbf862e42fefa39ef	/* Double precision -log(2)/K.  */
147e83
+.DP_EXP_BIAS:
147e83
+	.8byte	0x000000000000ffc0	/* Double precision exponent bias.  */
147e83
+
147e83
+	.balign	4
147e83
+.SPone:
147e83
+	.4byte	0x3f800000	/* Single precision 1.0.  */
147e83
+.SP_RS:
147e83
+	.4byte	0x4b400000	/* Single precision 2^23 + 2^22.  */
147e83
+
147e83
+.SPRANGE: /* Single precision overflow/underflow bounds.  */
147e83
+	.4byte	0x42b17217	/* if x>this bound, then result overflows.  */
147e83
+	.4byte	0x42cff1b4	/* if x
147e83
+
147e83
+.SPLARGE_SMALL:
147e83
+	.4byte	0x71800000	/* 2^100.  */
147e83
+	.4byte	0x0d800000	/* 2^-100.  */
147e83
+
147e83
+.INF_ZERO:
147e83
+	.4byte	0x7f800000	/* Single precision Inf.  */
147e83
+	.4byte	0		/* Single precision zero.  */
147e83
+
147e83
+strong_alias (__ieee754_expf, __expf_finite)
147e83
-- 
147e83
2.1.0
147e83