glibc/sysdeps
Joseph Myers 4b7d1efb51 Define and use a libm_alias_float macro.
Fully supporting TS 18661-3 _FloatN / _FloatNx types in the cases
where they have the same format as other supported types (in line with
the principles described at
<https://sourceware.org/ml/libc-alpha/2017-01/msg00333.html>) means
adding a lot of function aliases to libm (and a few to libc).  float
functions will have *f32 aliases, double functions will have *f32x and
*f64 aliases, long double functions may have *f64x, *f128 or both
aliases depending on the configuration, float128 functions have have
*f64x aliases depending on the configuration.

At present, most individual libm functions have their own weak_alias
calls to define the public names for those functions.  For TS 18661-3
support, it is desirable that functions not all need to duplicate the
logic for which alias names to define.

Thus, common macros for defining the public aliases to a libm function
make sense.  In the double and long double cases, such macros will
also help simplify existing code (with LONG_DOUBLE_COMPAT
etc. conditionals), by eliminating existing conditionals and ldbl-opt
/ ldbl-64-128 wrappers (using the generated ldbl-compat-choose.h to
allow a single macro definition to expand appropriately for each
symbol depending on LONG_DOUBLE_COMPAT for that symbol).

This patch starts the process of adding such macros with a
straightforward case: a libm_alias_float macro, initially only used in
the case of type-generic templates, to define aliases for float
functions (currently just the *f public names, in future also *f32).
Future patches are intended to add such macros for other types and to
extend the cases in which they are used, with a view to as many places
as possible using them before support for _FloatN / _FloatNx aliases
is enabled.  (I think it's inevitable that some places doing
architecture-specific things with aliases and symbol versioning may
end up needing to replicate logic for the new aliases, but hopefully
the number of such places can be kept to a minimum.)

The libm_alias_float macro takes unsuffixed names for both the
internal and public function names.  The need for unsuffixed public
names is obvious, since such macros will end up defining multiple
public names with different suffixes.  Unsuffixed internal names are
because I expect the ldbl-128 functions to end up in a form that
always defines *f128 names and sometimes also defines *l names - with
the main internal names being e.g. __ieee754_<func>f128 (so many
macros in float128_private.h can go away).  But __ieee754_<func>l
aliases will still be needed for e.g. use from math/ complex
functions, meaning the alias macro needs to see just __ieee754_<func>
as internal name so it can create an alias based on that name.  Since
libm_alias_float128 will thus need the unsuffixed internal name, it
seems to make sense for all such macros to receive the unsuffixed
name.

Tested for x86_64.  Also tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.

	* sysdeps/generic/libm-alias-float.h: New file.
	* sysdeps/generic/math-type-macros-float.h: Include
	<libm-alias-float.h>.
	[!declare_mgen_alias] (declare_mgen_alias): Define macro.
2017-09-11 23:21:25 +00:00
..
aarch64 Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
alpha Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
arm Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
generic Define and use a libm_alias_float macro. 2017-09-11 23:21:25 +00:00
gnu posix: Sync glob with gnulib [BZ #1062] 2017-09-08 09:39:13 +02:00
hppa Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
i386 Remove remaining _HAVE_STRING_ARCH_* definitions (BZ #18858) 2017-09-06 14:35:23 -03:00
ia64 Prefer new libm function wrappers for !LIBM_SVID_COMPAT. 2017-09-05 23:35:55 +00:00
ieee754 Prefer new libm function wrappers for !LIBM_SVID_COMPAT. 2017-09-05 23:35:55 +00:00
init_array Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
m68k Simplify HUGE_VAL definitions. 2017-08-31 15:50:50 +00:00
mach Hide __chmod and __mkdir [BZ #18822] 2017-09-04 13:38:51 -07:00
microblaze Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
mips Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
nios2 Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
nptl Remove extra semicolons in struct pthread_mutex (bug 21804) 2017-07-24 12:22:05 +02:00
posix hurd: Fix libc link 2017-09-03 04:36:29 +02:00
powerpc Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
pthread aio: Remove internal_function function attribute 2017-08-31 15:59:06 +02:00
s390 Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
sh Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
sparc Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
tile Obsolete pow10 functions. 2017-09-01 21:13:18 +00:00
unix Add thunderx2t99 and thunderx2t99p1 CPU names to tunables list 2017-09-08 11:02:09 -07:00
wordsize-32 Build divdi3 only for architecture that required it 2017-04-06 15:14:34 -03:00
wordsize-64 posix: Consolidate Linux glob implementation 2017-09-08 16:34:02 +02:00
x86 x86: Add x86_64 to x86-64 HWCAP [BZ #22093] 2017-09-11 08:18:32 -07:00
x86_64 x86: Add x86_64 to x86-64 HWCAP [BZ #22093] 2017-09-11 08:18:32 -07:00