glibc/sysdeps/powerpc/nofpu/Makefile
Joseph Myers 87faac5516 Fix powerpc-nofpu fmaxmagl, fminmagl spurious "invalid" exception (bug 22691).
For soft-float powerpc, fmaxmagl and fminmagl generate spurious
"invalid" exceptions for quiet NaN arguments.  This is another case of
the problems with fabsl inline expansion via comparisons, and so is
fixed by building those functions with -fno-builtin-fabsl.

Tested for powerpc (soft-float).

	[BZ #22691]
	* sysdeps/powerpc/nofpu/Makefile [$(subdir) = math]
	(CFLAGS-s_fmaxmagl.c): New variable.
	[$(subdir) = math] (CFLAGS-s_fminmagl.c: Likewise.
2018-01-10 00:38:12 +00:00

53 lines
2.2 KiB
Makefile

# Makefile fragment for PowerPC with no FPU.
ifeq ($(subdir),soft-fp)
sysdep_routines += $(gcc-single-routines) $(gcc-double-routines) \
sim-full atomic-feholdexcept atomic-feclearexcept \
atomic-feupdateenv flt-rounds
endif
ifeq ($(subdir),math)
libm-support += fenv_const
CPPFLAGS += -I../soft-fp/
# The follow CFLAGS are a work around for GCC Bugzilla Bug 29253
# "expand_abs wrong default code for floating point"
# As this is not a regression, a fix is not likely to go into
# gcc-4.1.1 and may be too late for gcc-4.2. So we need these flags
# until the fix in a gcc release and glibc drops support for earlier
# versions of gcc.
#
# This bug can cause wrong signs of zero results from fabsl, and
# spurious "invalid" exceptions from comparisons with NaN in the
# default code sequence generated. The fpclassify expansion used by
# __builtin_fpclassify, which is used in the absence of
# -fsignaling-nans, uses __builtin_fabsl, and is not affected by
# -fno-builtin-fabsl, so requiring -fsignaling-nans for some affected
# source files.
CFLAGS-e_atan2l.c += -fno-builtin-fabsl
CFLAGS-e_hypotl.c += -fno-builtin-fabsl
CFLAGS-e_powl.c += -fno-builtin-fabsl
CFLAGS-s_cacosl.c += -fsignaling-nans
CFLAGS-s_cacoshl.c += -fsignaling-nans
CFLAGS-s_casinhl.c += -fsignaling-nans
CFLAGS-s_catanl.c += -fsignaling-nans
CFLAGS-s_catanhl.c += -fsignaling-nans
CFLAGS-s_ccoshl.c += -fno-builtin-fabsl -fsignaling-nans
CFLAGS-s_cexpl.c += -fsignaling-nans
CFLAGS-s_csinhl.c += -fno-builtin-fabsl -fsignaling-nans
CFLAGS-s_clogl.c += -fno-builtin-fabsl -fsignaling-nans
CFLAGS-s_clog10l.c += -fno-builtin-fabsl -fsignaling-nans
CFLAGS-s_csinl.c += -fno-builtin-fabsl -fsignaling-nans
CFLAGS-s_csqrtl.c += -fno-builtin-fabsl -fsignaling-nans
CFLAGS-w_acosl_compat.c += -fno-builtin-fabsl
CFLAGS-w_asinl_compat.c += -fno-builtin-fabsl
CFLAGS-w_atanhl_compat.c += -fno-builtin-fabsl
CFLAGS-w_j0l_compat.c += -fno-builtin-fabsl
CFLAGS-w_j1l_compat.c += -fno-builtin-fabsl
CFLAGS-e_lgammal_r.c += -fno-builtin-fabsl
CFLAGS-e_log10l.c += -fno-builtin-fabsl
CFLAGS-e_log2l.c += -fno-builtin-fabsl
CFLAGS-e_remainderl.c += -fno-builtin-fabsl
CFLAGS-s_fmaxmagl.c += -fno-builtin-fabsl
CFLAGS-s_fminmagl.c += -fno-builtin-fabsl
endif