about summary refs log tree commit diff
path: root/Makeconfig
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2018-03-15 17:57:03 +0000
committerWilco Dijkstra <wdijkstr@arm.com>2018-03-15 19:21:35 +0000
commit1294b1892e19d70e9e4dca0a2f3e39497f262a42 (patch)
treecb9e404c7e1bb559c1a47ace05df8327695ef884 /Makeconfig
parentc429a8d8d63a12cac9754834f3a2667f7dbdb0fb (diff)
downloadglibc-1294b1892e19d70e9e4dca0a2f3e39497f262a42.tar.gz
glibc-1294b1892e19d70e9e4dca0a2f3e39497f262a42.tar.xz
glibc-1294b1892e19d70e9e4dca0a2f3e39497f262a42.zip
Add support for sqrt asm redirects
This patch series cleans up the many uses of  __ieee754_sqrt(f/l) in GLIBC.
The goal is to enable GCC to do the inlining, and if this fails call the
__ieee754_sqrt function.  This is done by internally declaring sqrt with asm
redirects.  The compat symbols and sqrt wrappers need to disable the redirect.
The redirect is also disabled if there are already redirects defined when
using -ffinite-math-only.

All math functions (but not math tests, non-library code and libnldbl) are
built with -fno-math-errno which means GCC will typically inline sqrt as a
single instruction.  This means targets are no longer forced to add a special
inline for sqrt.

	* include/math.h (sqrt): Declare with asm redirect.
	(sqrtf): Likewise.
	(sqrtl): Likewise.
	(sqrtf128): Likewise.
	* Makeconfig: Add -fno-math-errno for libc/libm, but build testsuite,
	nonlib and libnldbl with -fmath-errno.
	* math/w_sqrt_compat.c: Define NO_MATH_REDIRECT.
	* math/w_sqrt_template.c: Likewise.
	* math/w_sqrtf_compat.c: Likewise.
	* math/w_sqrtl_compat.c: Likewise.
	* sysdeps/i386/fpu/w_sqrt.c: Likewise.
	* sysdeps/i386/fpu/w_sqrt_compat.c: Likewise.
	* sysdeps/generic/math-type-macros-float128.h: Remove math.h and
	complex.h.
Diffstat (limited to 'Makeconfig')
-rw-r--r--Makeconfig4
1 files changed, 4 insertions, 0 deletions
diff --git a/Makeconfig b/Makeconfig
index 86a71e5802..1afe86475c 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -831,6 +831,9 @@ endif
 # disable any optimization that assume default rounding mode.
 +math-flags = -frounding-math
 
+# Build libc/libm using -fno-math-errno, but run testsuite with -fmath-errno.
++extra-math-flags = $(if $(filter libnldbl nonlib testsuite,$(in-module)),-fmath-errno,-fno-math-errno)
+
 # We might want to compile with some stack-protection flag.
 ifneq ($(stack-protector),)
 +stack-protector=$(stack-protector)
@@ -966,6 +969,7 @@ endif
 
 override CFLAGS	= -std=gnu11 -fgnu89-inline $(config-extra-cflags) \
 		  $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
+		  $(+extra-math-flags) \
 		  $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
 		  $(CFLAGS-$(@F)) $(tls-model) \
 		  $(foreach lib,$(libof-$(basename $(@F))) \