diff mbox

[3/4] x86-64: Add IEEE 754 exp2f with FMA

Message ID 20170925233351.GC31745@gmail.com
State New, archived
Headers show

Commit Message

H.J. Lu Sept. 25, 2017, 11:33 p.m. UTC
* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
	Add e_exp2f-fma.
	(CFLAGS-e_exp2f-fma.c): New.
	* sysdeps/x86_64/fpu/multiarch/e_exp2f-fma.c: New file.
	* sysdeps/x86_64/fpu/multiarch/e_exp2f.c: Likewise.
---
 sysdeps/x86_64/fpu/multiarch/Makefile      |  3 ++-
 sysdeps/x86_64/fpu/multiarch/e_exp2f-fma.c |  6 ++++++
 sysdeps/x86_64/fpu/multiarch/e_exp2f.c     | 33 ++++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 1 deletion(-)
 create mode 100644 sysdeps/x86_64/fpu/multiarch/e_exp2f-fma.c
 create mode 100644 sysdeps/x86_64/fpu/multiarch/e_exp2f.c

Comments

Joseph Myers Sept. 26, 2017, 5 p.m. UTC | #1
Please indicate the performance gain from use of FMA.
diff mbox

Patch

diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
index 92e91d79af..71a3b337ed 100644
--- a/sysdeps/x86_64/fpu/multiarch/Makefile
+++ b/sysdeps/x86_64/fpu/multiarch/Makefile
@@ -37,8 +37,9 @@  CFLAGS-slowpow-fma.c = -mfma -mavx2
 CFLAGS-s_sin-fma.c = -mfma -mavx2
 CFLAGS-s_tan-fma.c = -mfma -mavx2
 
-libm-sysdep_routines += e_expf-fma
+libm-sysdep_routines += e_exp2f-fma e_expf-fma
 
+CFLAGS-e_exp2f-fma.c = -mfma -mavx2
 CFLAGS-e_expf-fma.c = -mfma -mavx2
 
 libm-sysdep_routines += e_exp-fma4 e_log-fma4 e_pow-fma4 s_atan-fma4 \
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp2f-fma.c b/sysdeps/x86_64/fpu/multiarch/e_exp2f-fma.c
new file mode 100644
index 0000000000..34500e2884
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp2f-fma.c
@@ -0,0 +1,6 @@ 
+#undef strong_alias
+#define strong_alias(ignored1, ignored2)
+
+#define __ieee754_exp2f __ieee754_exp2f_fma
+
+#include <sysdeps/ieee754/flt-32/e_exp2f.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp2f.c b/sysdeps/x86_64/fpu/multiarch/e_exp2f.c
new file mode 100644
index 0000000000..b6463eb0b8
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/e_exp2f.c
@@ -0,0 +1,33 @@ 
+/* Multiple versions of IEEE 754 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_ieee754_exp2f (float);
+
+#define SYMBOL_NAME ieee754_exp2f
+#include "ifunc-fma.h"
+
+libc_ifunc_redirected (__redirect_ieee754_exp2f, __ieee754_exp2f,
+		       IFUNC_SELECTOR ());
+strong_alias (__ieee754_exp2f, __exp2f_finite)
+
+#undef strong_alias
+#define strong_alias(ignored1, ignored2)
+
+#define __ieee754_exp2f __ieee754_exp2f_sse2
+
+#include <sysdeps/ieee754/flt-32/e_exp2f.c>