aboutsummaryrefslogtreecommitdiff
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/fpioconst.h4
-rw-r--r--stdlib/stdlib.h9
-rw-r--r--stdlib/strfrom-skeleton.c6
3 files changed, 19 insertions, 0 deletions
diff --git a/stdlib/fpioconst.h b/stdlib/fpioconst.h
index 2559d7a74c..c05f8e7bac 100644
--- a/stdlib/fpioconst.h
+++ b/stdlib/fpioconst.h
@@ -44,6 +44,10 @@
IBM extended precision). */
#include <bits/floatn.h>
+#if __HAVE_DISTINCT_FLOAT128
+# define FLT128_MAX_10_EXP_LOG 12 /* = floor(log_2(FLT128_MAX_10_EXP)) */
+#endif
+
/* For strtold, we need powers of 10 up to floor (log_2 (LDBL_MANT_DIG
- LDBL_MIN_EXP + 2)). When _Float128 is enabled in libm and it is
ABI-distinct from long double (e.g. on powerpc64le), we also need powers
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 428ca2ef68..0a693c2b41 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -51,6 +51,9 @@ __BEGIN_DECLS
# endif
#endif /* X/Open or XPG7 and <sys/wait.h> not included. */
+/* _FloatN API tests for enablement. */
+#include <bits/floatn.h>
+
/* Returned by `div'. */
typedef struct
{
@@ -175,6 +178,12 @@ extern int strfroml (char *__dest, size_t __size, const char *__format,
__THROW __nonnull ((3));
#endif
+#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf128 (char *__dest, size_t __size, const char * __format,
+ _Float128 __f)
+ __THROW __nonnull ((3));
+#endif
+
#ifdef __USE_GNU
/* The concept of one static locale per category is not very well
diff --git a/stdlib/strfrom-skeleton.c b/stdlib/strfrom-skeleton.c
index 811a29c7d3..5841919fe4 100644
--- a/stdlib/strfrom-skeleton.c
+++ b/stdlib/strfrom-skeleton.c
@@ -132,6 +132,12 @@ STRFROM (char *dest, size_t size, const char *format, FLOAT f)
which type of floating-point number is being passed. */
info.is_long_double = __builtin_types_compatible_p (FLOAT, long double);
+ /* Similarly, the function strfromf128 passes a floating-point number in
+ _Float128 format to printf_fp. */
+#if __HAVE_DISTINCT_FLOAT128
+ info.is_binary128 = __builtin_types_compatible_p (FLOAT, _Float128);
+#endif
+
/* Set info according to the format string. */
info.prec = precision;
info.spec = specifier;