float128: Add _Float128 make bits to libm.

This adds the appropriate common bits for a platform to
enable float128 and expose ABI.

	* math/Makefile:
	(type-float128-suffix): New variable
	(type-float128-routines): Likewise
	(type-float128-yes): Likewise
	(types): Append float128 if supported
	(types-basic): New variable to control the use of templates for
	float, double, and long double, but not for float128 or newer types.
	(type-basic-foreach): Likewise.

	* sysdeps/ieee754/float128/Makeconfig: New file.
	* sysdeps/ieee754/float128/Versions: New file.
This commit is contained in:
Paul E. Murphy 2016-07-15 14:05:51 -05:00 committed by Gabriel F. T. Gomes
parent 695d7d138e
commit 26265c3bce
4 changed files with 177 additions and 2 deletions

View File

@ -1,3 +1,18 @@
2017-05-09 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
* math/Makefile:
(type-float128-suffix): New variable
(type-float128-routines): Likewise
(type-float128-yes): Likewise
(types): Append float128 if supported
(types-basic): New variable to control the use of templates for
float, double, and long double, but not for float128 or newer types.
(type-basic-foreach): Likewise.
* sysdeps/ieee754/float128/Makeconfig: New file.
* sysdeps/ieee754/float128/Versions: New file.
2017-05-09 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_PRLIMIT64):

View File

@ -100,7 +100,7 @@ libm-compat-calls = \
# Finally, note that types is an intentionally recursive variable.
# We only know the full set of supported types for the target machine
# after the Rules makefile has been parsed.
types = $(type-ldouble-$(long-double-fcts)) double float
types-basic = $(type-ldouble-$(long-double-fcts)) double float
# long double support
type-ldouble-suffix := l
@ -117,12 +117,23 @@ type-double-routines := branred doasin dosincos halfulp mpa mpatan2 \
type-float-suffix := f
type-float-routines := k_rem_pio2f
# _Float128 support
type-float128-suffix := f128
type-float128-routines := t_sincosf128 k_sincosf128
type-float128-yes := float128
types = $(types-basic) $(type-float128-$(float128-fcts))
# For each of the basic types (float, double, long double), replace the
# occurrences of 'F' in arg 1 with the appropriate suffix for the type.
type-basic-foreach = $(foreach t, $(types-basic), \
$(subst F,$(type-$(t)-suffix),$(1)))
# Apply suffix to each type in arg 1
type-foreach = $(foreach t,$(types),$(subst F,$(type-$(t)-suffix),$(1)))
libm-routines = $(strip $(libm-support) \
$(call type-foreach, $(libm-compat-calls)) \
$(call type-basic-foreach, \
$(libm-compat-calls)) \
$(call type-foreach, $(libm-calls)) \
$(foreach t, $(types), $(type-$(t)-routines))) \
@ -543,6 +554,7 @@ endif
CFLAGS-s_modf.c += -fsignaling-nans
CFLAGS-s_modff.c += -fsignaling-nans
CFLAGS-s_modfl.c += -fsignaling-nans
CFLAGS-s_modff128.c += -fsignaling-nans
# The -lieee library is actually an object file.
# The module just defines the _LIB_VERSION_ variable.

View File

@ -0,0 +1,3 @@
# Include this earlier so it can be used earlier in Makefiles,
# and sysdep/ makefiles.
float128-fcts = yes

View File

@ -0,0 +1,145 @@
%include <float128-abi.h>
%ifndef FLOAT128_VERSION
% error "float128-abi.h must define FLOAT128_VERSION"
%endif
libm {
FLOAT128_VERSION {
__acosf128_finite;
__acoshf128_finite;
__asinf128_finite;
__atan2f128_finite;
__atanhf128_finite;
__coshf128_finite;
__exp10f128_finite;
__exp2f128_finite;
__expf128_finite;
__finitef128;
__fmodf128_finite;
__fpclassifyf128;
__gammaf128_r_finite;
__hypotf128_finite;
__iseqsigf128;
__isinff128;
__isnanf128;
__issignalingf128;
__j0f128_finite;
__j1f128_finite;
__jnf128_finite;
__lgammaf128_r_finite;
__log10f128_finite;
__log2f128_finite;
__logf128_finite;
__powf128_finite;
__remainderf128_finite;
__signbitf128;
__sinhf128_finite;
__sqrtf128_finite;
__y0f128_finite;
__y1f128_finite;
__ynf128_finite;
acosf128;
acoshf128;
asinf128;
asinhf128;
atan2f128;
atanf128;
atanhf128;
cabsf128;
cacosf128;
cacoshf128;
canonicalizef128;
cargf128;
casinf128;
casinhf128;
catanf128;
catanhf128;
cbrtf128;
ccosf128;
ccoshf128;
ceilf128;
cexpf128;
cimagf128;
clog10f128;
clogf128;
conjf128;
copysignf128;
cosf128;
coshf128;
cpowf128;
cprojf128;
crealf128;
csinf128;
csinhf128;
csqrtf128;
ctanf128;
ctanhf128;
erfcf128;
erff128;
exp10f128;
exp2f128;
expf128;
expm1f128;
fabsf128;
fdimf128;
floorf128;
fmaf128;
fmaxf128;
fmaxmagf128;
fminf128;
fminmagf128;
fmodf128;
frexpf128;
fromfpf128;
fromfpxf128;
getpayloadf128;
hypotf128;
ilogbf128;
j0f128;
j1f128;
jnf128;
ldexpf128;
lgammaf128;
lgammaf128_r;
llogbf128;
llrintf128;
llroundf128;
log10f128;
log1pf128;
log2f128;
logbf128;
logf128;
lrintf128;
lroundf128;
modff128;
nanf128;
nearbyintf128;
nextafterf128;
nextdownf128;
nextupf128;
powf128;
remainderf128;
remquof128;
rintf128;
roundevenf128;
roundf128;
scalblnf128;
scalbnf128;
setpayloadf128;
setpayloadsigf128;
sincosf128;
sinf128;
sinhf128;
sqrtf128;
tanf128;
tanhf128;
tgammaf128;
totalorderf128;
totalordermagf128;
truncf128;
ufromfpf128;
ufromfpxf128;
y0f128;
y1f128;
ynf128;
}
}