This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH v2 2/8] float128: Add _Float128 make bits to libm.


From: "Paul E. Murphy" <murphyp@linux.vnet.ibm.com>

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

2016-10-21  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.
---
 math/Makefile                       |  16 ++++-
 sysdeps/ieee754/float128/Makeconfig |   3 +
 sysdeps/ieee754/float128/Versions   | 139 ++++++++++++++++++++++++++++++++++++
 3 files changed, 156 insertions(+), 2 deletions(-)
 create mode 100644 sysdeps/ieee754/float128/Makeconfig
 create mode 100644 sysdeps/ieee754/float128/Versions

diff --git a/math/Makefile b/math/Makefile
index 97080a7..634c619 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -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.
diff --git a/sysdeps/ieee754/float128/Makeconfig b/sysdeps/ieee754/float128/Makeconfig
new file mode 100644
index 0000000..6c385d2
--- /dev/null
+++ b/sysdeps/ieee754/float128/Makeconfig
@@ -0,0 +1,3 @@
+# Include this earlier so it can be used earlier in Makefiles,
+# and sysdep/ makefiles.
+float128-fcts = yes
diff --git a/sysdeps/ieee754/float128/Versions b/sysdeps/ieee754/float128/Versions
new file mode 100644
index 0000000..4829102
--- /dev/null
+++ b/sysdeps/ieee754/float128/Versions
@@ -0,0 +1,139 @@
+%include <float128-abi.h>
+%ifndef FLOAT128_VERSION
+% error "float128-abi.h must define FLOAT128_VERSION"
+%endif
+libm {
+  FLOAT128_VERSION {
+    acosf128;
+    acoshf128;
+    asinf128;
+    asinhf128;
+    atan2f128;
+    atanf128;
+    atanhf128;
+    cabsf128;
+    cacosf128;
+    cacoshf128;
+    cargf128;
+    casinf128;
+    casinhf128;
+    catanf128;
+    catanhf128;
+    cbrtf128;
+    ccosf128;
+    ccoshf128;
+    ceilf128;
+    cexpf128;
+    cimagf128;
+    clog10f128;
+    clogf128;
+    copysignf128;
+    conjf128;
+    cosf128;
+    coshf128;
+    cpowf128;
+    cprojf128;
+    crealf128;
+    csinf128;
+    csinhf128;
+    csqrtf128;
+    ctanf128;
+    ctanhf128;
+    erff128;
+    erfcf128;
+    exp10f128;
+    expf128;
+    expm1f128;
+    fabsf128;
+    fdimf128;
+    floorf128;
+    fmaf128;
+    fmaxf128;
+    fminf128;
+    fmodf128;
+    frexpf128;
+    fromfpf128;
+    fromfpxf128;
+    getpayloadf128;
+    hypotf128;
+    ilogbf128;
+    j0f128;
+    j1f128;
+    jnf128;
+    ldexpf128;
+    lgammaf128;
+    lgammaf128_r;
+    llogbf128;
+    llrintf128;
+    llroundf128;
+    log10f128;
+    log1pf128;
+    log2f128;
+    logf128;
+    logbf128;
+    lrintf128;
+    lroundf128;
+    modff128;
+    nanf128;
+    nearbyintf128;
+    nextafterf128;
+    nextdownf128;
+    nextupf128;
+    powf128;
+    remainderf128;
+    remquof128;
+    rintf128;
+    roundf128;
+    scalblnf128;
+    scalbnf128;
+    setpayloadf128;
+    setpayloadsigf128;
+    sincosf128;
+    sinf128;
+    sinhf128;
+    sqrtf128;
+    tanf128;
+    tanhf128;
+    tgammaf128;
+    totalorderf128;
+    totalordermagf128;
+    truncf128;
+    ufromfpf128;
+    ufromfpxf128;
+    y0f128;
+    y1f128;
+    ynf128;
+    __acosf128_finite;
+    __acoshf128_finite;
+    __asinf128_finite;
+    __atan2f128_finite;
+    __atanhf128_finite;
+    __coshf128_finite;
+    __exp10f128_finite;
+    __expf128_finite;
+    __finitef128;
+    __fmodf128_finite;
+    __fpclassifyf128;
+    __gammaf128_r_finite;
+    __hypotf128_finite;
+    __iseqsigf128;
+    __isinff128;
+    __isnanf128;
+    __issignalingf128;
+    __lgammaf128_r_finite;
+    __log10f128_finite;
+    __log2f128_finite;
+    __logf128_finite;
+    __powf128_finite;
+    __remainderf128_finite;
+    __signbitf128;
+    __sinhf128_finite;
+    __sqrtf128_finite;
+    __j0f128_finite;
+    __j1f128_finite;
+    __jnf128_finite;
+    __y0f128_finite;
+    __y1f128_finite;
+    __ynf128_finite;
+  }
+}
-- 
2.4.11


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]