This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.26.9000-625-g7eda65f
- From: hjl at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 22 Oct 2017 15:00:41 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.26.9000-625-g7eda65f
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 7eda65f69e0e4533b76ca4614fe516de03fe2b3a (commit)
from 5d15c9697577d2c342b5ade820bfd7b84a736b23 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=7eda65f69e0e4533b76ca4614fe516de03fe2b3a
commit 7eda65f69e0e4533b76ca4614fe516de03fe2b3a
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Sun Oct 22 07:58:54 2017 -0700
i386: Replace assembly versions of e_exp2f with generic e_exp2f.c
This patch replaces i386 assembly versions of e_exp2f with generic
e_exp2f.c. For workload-spec2017.wrf, on Nehalem, it improves
performance by:
Before After Improvement
reciprocal-throughput 112.996 40.0454 182%
latency 126.581 54.4479 132%
On Skylake, it improves performance by:
Before After Improvement
reciprocal-throughput 113.14 39.447 186%
latency 136.068 55.684 144%
On IvyBridge with --disable-multi-arch, it improves performance by:
Before After Improvement
reciprocal-throughput 132.521 40.3759 228%
latency 145.791 58.4587 149%
* sysdeps/i386/fpu/e_exp2f.S: Removed.
* sysdeps/i386/fpu/w_exp2f.c: Likewise.
* sysdeps/i386/fpu/libm-test-ulps: Updated for generic e_exp2f.c.
* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise.
* sysdeps/i386/i686/fpu/multiarch/Makefile (libm-sysdep_routines):
Add e_exp2f-sse2.
(CFLAGS-e_exp2f-sse2.c): New.
* sysdeps/i386/i686/fpu/multiarch/e_exp2f-sse2.c: New file.
* sysdeps/i386/i686/fpu/multiarch/e_exp2f.c: Likewise.
diff --git a/ChangeLog b/ChangeLog
index 2fa1ddc..2100c0a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2017-10-22 H.J. Lu <hongjiu.lu@intel.com>
+ * sysdeps/i386/fpu/e_exp2f.S: Removed.
+ * sysdeps/i386/fpu/w_exp2f.c: Likewise.
+ * sysdeps/i386/fpu/libm-test-ulps: Updated for generic e_exp2f.c.
+ * sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise.
+ * sysdeps/i386/i686/fpu/multiarch/Makefile (libm-sysdep_routines):
+ Add e_exp2f-sse2.
+ (CFLAGS-e_exp2f-sse2.c): New.
+ * sysdeps/i386/i686/fpu/multiarch/e_exp2f-sse2.c: New file.
+ * sysdeps/i386/i686/fpu/multiarch/e_exp2f.c: Likewise.
+
+2017-10-22 H.J. Lu <hongjiu.lu@intel.com>
+
* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
Add e_exp2f-fma.
(CFLAGS-e_exp2f-fma.c): New.
diff --git a/sysdeps/i386/fpu/e_exp2f.S b/sysdeps/i386/fpu/e_exp2f.S
deleted file mode 100644
index 30623cd..0000000
--- a/sysdeps/i386/fpu/e_exp2f.S
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_exp2f)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- flds 4(%esp)
-/* I added the following ugly construct because exp(+-Inf) resulted
- in NaN. The ugliness results from the bright minds at Intel.
- For the i686 the code can be written better.
- -- drepper@cygnus.com. */
- fxam /* Is NaN or +-Inf? */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
- fld %st
- frndint /* int(x) */
- fsubr %st,%st(1) /* fract(x) */
- fxch
- f2xm1 /* 2^(fract(x)) - 1 */
- fld1
- faddp /* 2^(fract(x)) */
- fscale /* e^x */
- fstp %st(1)
- FLT_NARROW_EVAL_UFLOW_NONNEG_NAN
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_exp2f)
-strong_alias (__ieee754_exp2f, __exp2f_finite)
diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
index c826b29..0aa18ea 100644
--- a/sysdeps/i386/fpu/libm-test-ulps
+++ b/sysdeps/i386/fpu/libm-test-ulps
@@ -1921,7 +1921,9 @@ ildouble: 1
ldouble: 1
Function: "exp2_upward":
+float: 1
float128: 2
+ifloat: 1
ifloat128: 2
ildouble: 1
ldouble: 1
diff --git a/sysdeps/i386/fpu/w_exp2f.c b/sysdeps/i386/fpu/w_exp2f.c
deleted file mode 100644
index 583065d..0000000
--- a/sysdeps/i386/fpu/w_exp2f.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/../math/w_exp2f.c>
diff --git a/sysdeps/i386/i686/fpu/multiarch/Makefile b/sysdeps/i386/i686/fpu/multiarch/Makefile
index c5e8cfd..2723f57 100644
--- a/sysdeps/i386/i686/fpu/multiarch/Makefile
+++ b/sysdeps/i386/i686/fpu/multiarch/Makefile
@@ -1,6 +1,7 @@
ifeq ($(subdir),math)
-libm-sysdep_routines += e_expf-sse2 s_sinf-sse2 s_cosf-sse2 \
+libm-sysdep_routines += e_exp2f-sse2 e_expf-sse2 s_sinf-sse2 s_cosf-sse2 \
s_sincosf-sse2
+CFLAGS-e_exp2f-sse2.c = -msse2 -mfpmath=sse
CFLAGS-e_expf-sse2.c = -msse2 -mfpmath=sse
endif
diff --git a/sysdeps/i386/i686/fpu/multiarch/e_exp2f-sse2.c b/sysdeps/i386/i686/fpu/multiarch/e_exp2f-sse2.c
new file mode 100644
index 0000000..dc3138d
--- /dev/null
+++ b/sysdeps/i386/i686/fpu/multiarch/e_exp2f-sse2.c
@@ -0,0 +1,3 @@
+#define __exp2f __exp2f_sse2
+
+#include <sysdeps/ieee754/flt-32/e_exp2f.c>
diff --git a/sysdeps/i386/i686/fpu/multiarch/e_exp2f.c b/sysdeps/i386/i686/fpu/multiarch/e_exp2f.c
new file mode 100644
index 0000000..0a5727f
--- /dev/null
+++ b/sysdeps/i386/i686/fpu/multiarch/e_exp2f.c
@@ -0,0 +1,37 @@
+/* Multiple versions of exp2f.
+ Copyright (C) 2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+extern float __redirect_exp2f (float);
+
+#define SYMBOL_NAME exp2f
+#include "ifunc-sse2.h"
+
+libc_ifunc_redirected (__redirect_exp2f, __exp2f, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+# include <shlib-compat.h>
+versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27);
+#else
+weak_alias (__exp2f, exp2f)
+#endif
+
+strong_alias (__exp2f, __ieee754_exp2f)
+strong_alias (__exp2f, __exp2f_finite)
+
+#define __exp2f __exp2f_ia32
+#include <sysdeps/ieee754/flt-32/e_exp2f.c>
diff --git a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
index 5ff641f..2d056a9 100644
--- a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
+++ b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
@@ -1921,7 +1921,9 @@ ildouble: 1
ldouble: 1
Function: "exp2_upward":
+float: 1
float128: 2
+ifloat: 1
ifloat128: 2
ildouble: 1
ldouble: 1
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 12 +++++
sysdeps/i386/fpu/e_exp2f.S | 52 --------------------
sysdeps/i386/fpu/libm-test-ulps | 2 +
sysdeps/i386/fpu/w_exp2f.c | 1 -
sysdeps/i386/i686/fpu/multiarch/Makefile | 3 +-
.../i686/fpu/multiarch/e_exp2f-sse2.c} | 2 +-
.../{x86_64 => i386/i686}/fpu/multiarch/e_exp2f.c | 4 +-
sysdeps/i386/i686/fpu/multiarch/libm-test-ulps | 2 +
8 files changed, 21 insertions(+), 57 deletions(-)
delete mode 100644 sysdeps/i386/fpu/e_exp2f.S
delete mode 100644 sysdeps/i386/fpu/w_exp2f.c
copy sysdeps/{x86_64/fpu/multiarch/e_exp2f-fma.c => i386/i686/fpu/multiarch/e_exp2f-sse2.c} (60%)
copy sysdeps/{x86_64 => i386/i686}/fpu/multiarch/e_exp2f.c (95%)
hooks/post-receive
--
GNU C Library master sources