glibc/sysdeps/arm
Joseph Myers 6f7c009282 Add sysdeps/ieee754/soft-fp.
The default sysdeps/ieee754 fma implementations rely on exceptions and
rounding modes to achieve correct results through internal use of
round-to-odd.  Thus, glibc configurations without support for
exceptions and rounding modes instead need to use implementations of
fma based on soft-fp.

At present, this is achieved via having implementation files in
soft-fp/ that are #included by sysdeps files for each glibc
configuration that needs them.  In general this means such a
configuration has its own s_fma.c and s_fmaf.c.

TS 18661-1 adds functions that do an operation (+ - * / sqrt fma) on
arguments wider than the return type, with a single rounding of the
infinite-precision result to that return type.  These are also
naturally implemented using round-to-odd on platforms with hardware
support for rounding modes and exceptions but lacking hardware support
for these narrowing operations themselves.  (Platforms that have
direct hardware support for such narrowing operations include at least
ia64, and Power ISA 2.07 or later, which I think means POWER8 or
later.)

So adding the remaining TS 18661-1 functions would mean at least six
narrowing function implementations (fadd fsub fmul fdiv ffma fsqrt),
with aliases for other types and further implementations in some
configurations, that need to be overridden for configurations lacking
hardware exceptions and rounding modes.  Requiring all such
configurations (currently seven of them) to have their own source
files for all those functions seems undesirable.

Thus, this patch adds a directory sysdeps/ieee754/soft-fp to contain
libm function implementations based on soft-fp.  This directory is
then used via Implies from all the configurations that need it, so no
more files need adding to every such configuration when adding more
functions with soft-fp implementations.  A configuration can still
selectively #include a particular file from this directory if desired;
thus, the MIPS #include of the fmal implementation is retained, since
that's appropriate even for hard float (because long double is always
implementated in software for MIPS64, so the soft-fp implementation of
fmal is better than the ldbl-128 one).

This also provides additional motivation for my recent patch removing
--with-fp / --without-fp: previously there was no need for correct use
of --without-fp for no-FPU ARM or SH3, and now we have autodetection
nofpu/ sysdeps directories can be used by this patch for those
configurations without imposing any new requirements on how glibc is
configured.

(The mips64/*/fpu/s_fma.c files added by this patch are needed to keep
the dbl-64 version of fma for double, rather than the ldbl-128 one,
used in that case.)

Tested with build-many-glibcs.py that installed stripped shared
libraries are unchanged by this patch.

	* soft-fp/fmadf4.c: Move to ....
	* sysdeps/ieee754/soft-fp/s_fma.c: ... here.
	* soft-fp/fmasf4.c: Move to ....
	* sysdeps/ieee754/soft-fp/s_fmaf.c: ... here.
	* soft-fp/fmatf4.c: Move to ....
	* sysdeps/ieee754/soft-fp/s_fmal.c: ... here.
	* sysdeps/ieee754/soft-fp/Makefile: New file.
	* sysdeps/arm/preconfigure.ac: Define with_fp_cond.
	* sysdeps/arm/preconfigure: Regenerated.
	* sysdeps/arm/nofpu/Implies: New file.
	* sysdeps/arm/s_fma.c: Remove file.
	* sysdeps/arm/s_fmaf.c: Likewise.
	* sysdeps/m68k/coldfire/nofpu/Implies: New file.
	* sysdeps/m68k/coldfire/nofpu/s_fma.c: Remove file.
	* sysdeps/m68k/coldfire/nofpu/s_fmaf.c: Likewise.
	* sysdeps/microblaze/Implies: Add ieee754/soft-fp.
	* sysdeps/microblaze/s_fma.c: Remove file.
	* sysdeps/microblaze/s_fmaf.c: Likewise.
	* sysdeps/mips/mips32/nofpu/Implies: New file.
	* sysdeps/mips/mips64/n32/fpu/s_fma.c: Likewise.
	* sysdeps/mips/mips64/n32/nofpu/Implies: Likewise.
	* sysdeps/mips/mips64/n64/fpu/s_fma.c: Likewise.
	* sysdeps/mips/mips64/n64/nofpu/Implies: Likewise.
	* sysdeps/mips/ieee754/s_fma.c: Remove file.
	* sysdeps/mips/ieee754/s_fmaf.c: Likewise.
	* sysdeps/mips/ieee754/s_fmal.c: Update include for move of fmal
	implementation.
	* sysdeps/nios2/Implies: Add ieee754/soft-fp.
	* sysdeps/nios2/s_fma.c: Remove file.
	* sysdeps/nios2/s_fmaf.c: Likewise.
	* sysdeps/sh/nofpu/Implies: New file.
	* sysdeps/sh/s_fma.c: Remove file.
	* sysdeps/sh/s_fmaf.c: Likewise.
	* sysdeps/tile/Implies: Add ieee754/soft-fp.
	* sysdeps/tile/s_fma.c: Remove file.
	* sysdeps/tile/s_fmaf.c: Likewise.
2017-12-12 23:35:21 +00:00
..
armv6 Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
armv6t2 Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
armv7 Prefer https for Sourceware links 2017-11-16 11:49:26 +05:30
bits Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
include/bits Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
nofpu Add sysdeps/ieee754/soft-fp. 2017-12-12 23:35:21 +00:00
nptl nptl: Define __PTHREAD_MUTEX_{NUSERS_AFTER_KIND,USE_UNION} 2017-11-07 09:48:41 -02:00
sys Fix mcontext_t sigcontext namespace (bug 21457). 2017-08-30 22:02:04 +00:00
__longjmp.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
abi-note.S Fix whitespace in ARM files to allow move. 2014-02-08 01:52:38 +00:00
add_n.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
addmul_1.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
aeabi_assert.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_atexit.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_errno_addr.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_lcsts.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_localeconv.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_math.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_mb_cur_max.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_memclr.c Replace all internal uses of __bzero with memset. This removes the need 2017-06-12 14:56:53 +01:00
aeabi_memcpy.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_memmove.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_memset.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_sighandlers.S Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
aeabi_unwind_cpp_pr1.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
arm-features.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
arm-ifunc.h arm: Implement memcpy ifunc selection in C 2017-11-06 17:37:57 -02:00
arm-mcount.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
arm-unwind-resume.S Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
atomic-machine.h Optimize generic spinlock code and use C11 like atomic macros. 2017-06-06 09:41:56 +02:00
backtrace.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
bsd-_setjmp.S Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
bsd-setjmp.S Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
configure Remove configure test for ARM TLS descriptors support. 2015-10-27 23:56:50 +00:00
configure.ac Remove configure test for ARM TLS descriptors support. 2015-10-27 23:56:50 +00:00
crti.S Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
crtn.S Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
dl-irel.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
dl-lookupcfg.h elf: Remove internal_function attribute 2017-08-31 16:59:37 +02:00
dl-machine.h arm: Remove lazy tlsdesc initialization related code 2017-11-03 14:49:20 +00:00
dl-sysdep.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
dl-tls.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
dl-tlsdesc.h arm: Remove lazy tlsdesc initialization related code 2017-11-03 14:49:20 +00:00
dl-tlsdesc.S arm: Remove lazy tlsdesc initialization related code 2017-11-03 14:49:20 +00:00
dl-trampoline.S Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
e_sqrt.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
e_sqrtf.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fclrexcpt.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fedisblxcpt.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
feenablxcpt.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fegetenv.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fegetexcept.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fegetmode.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fegetround.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
feholdexcpt.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fenv_private.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fesetenv.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fesetexcept.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fesetmode.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fesetround.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
feupdateenv.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fgetexcptflg.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
find_exidx.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fix-fp-int-convert-overflow.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
fpu_control.h Fix ARM fpu_control.h for assemblers requiring VFP insn names (bug 21047). 2017-01-19 00:05:34 +00:00
fraiseexcpt.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
frame.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
framestate.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
fsetexcptflg.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
ftestexcept.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
gcc-compat.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
gccframe.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
get-rounding-mode.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
gmp-mparam.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Implies Remove sysdeps/arm/soft-fp directory. 2014-10-16 09:54:45 -07:00
jmpbuf-unwind.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
ldsodefs.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
libc-aeabi_read_tp.S ARM: Move more aeabi routine magic out of Linux-specific directories 2014-06-26 15:08:29 -07:00
libc-tls.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
libm-test-ulps Update ARM libm-test-ulps. 2017-10-05 22:17:30 +00:00
libm-test-ulps-name Do not hardcode platform names in manual/libm-err-tab.pl (bug 14139). 2016-11-04 16:49:06 +00:00
linkmap.h Rename bits/linkmap.h to linkmap.h (bug 14912). 2015-09-04 19:44:27 +00:00
machine-gmon.h gmon: Remove internal_function attribute 2017-08-31 16:16:07 +02:00
Makefile Enable unwind info in libc-start.c and backtrace.c 2017-09-19 15:07:58 +01:00
math_private.h math: add LDBL_CLASSIFY_COMPAT support 2015-12-03 13:00:46 -05:00
math-tests.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
memcpy.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
memmove.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
memset.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
memusage.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
nptl-aeabi_unwind_cpp_pr1.c ARM: Move more aeabi routine magic out of Linux-specific directories 2014-06-26 15:08:29 -07:00
preconfigure Add sysdeps/ieee754/soft-fp. 2017-12-12 23:35:21 +00:00
preconfigure.ac Add sysdeps/ieee754/soft-fp. 2017-12-12 23:35:21 +00:00
pt-arm-unwind-resume.S ARM: Consolidate with generic unwinder wrapper code 2015-01-05 15:42:16 -08:00
rt-aeabi_unwind_cpp_pr1.c ARM: Move more aeabi routine magic out of Linux-specific directories 2014-06-26 15:08:29 -07:00
rt-arm-unwind-resume.S ARM: Consolidate with generic unwinder wrapper code 2015-01-05 15:42:16 -08:00
rtld-global-offsets.sym Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
setfpucw.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
setjmp.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
sfp-machine.h Remove sysdeps/arm/soft-fp directory. 2014-10-16 09:54:45 -07:00
sotruss-lib.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
stackinfo.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
start.S arm: Check PIC instead of SHARED in start.S 2017-09-29 16:20:39 -07:00
static-stubs.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
strlen.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
sub_n.S Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
submul_1.S Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
sysdep.h Remove sfi_* annotations from ARM assembly files. 2017-05-20 08:12:11 -04:00
test-fpucw.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
tls-macros.h ARM: Rewrite sysdeps/arm/tls-macros.h 2015-03-13 10:10:09 -07:00
tlsdesc.c arm: Remove lazy tlsdesc initialization related code 2017-11-03 14:49:20 +00:00
tlsdesc.sym Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
tst-armtlsdescextlazy.c [BZ #17075] ARM: Fix immediate calculation of R_ARM_TLS_DESC 2014-06-20 20:22:42 +01:00
tst-armtlsdescextlazymod.c [BZ #17075] ARM: Fix immediate calculation of R_ARM_TLS_DESC 2014-06-20 20:22:42 +01:00
tst-armtlsdescextnow.c [BZ #17075] ARM: Fix immediate calculation of R_ARM_TLS_DESC 2014-06-20 20:22:42 +01:00
tst-armtlsdescextnowmod.c [BZ #17075] ARM: Fix immediate calculation of R_ARM_TLS_DESC 2014-06-20 20:22:42 +01:00
tst-armtlsdescloc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-armtlsdesclocmod.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-audit.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
unwind-dw2-fde-glibc.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
unwind-pe.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
unwind-resume.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
unwind.h Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Versions Use -Werror=undef for assembly code. 2015-02-12 13:57:32 -08:00