aboutsummaryrefslogtreecommitdiff
path: root/stdlib
diff options
context:
space:
mode:
authorGabriel F. T. Gomes <gabrielftg@linux.ibm.com>2019-07-11 11:48:28 -0300
committerGabriel F. T. Gomes <gabrielftg@linux.ibm.com>2019-12-13 19:06:02 -0300
commit39a7b82283cab9dbfc119d8411d26d55a65f5eb4 (patch)
tree74a7c8d739205d232fbf6d113d8ab3001d0fcb16 /stdlib
parentb851fea5c875acdca549103493d0439e91360d7e (diff)
downloadglibc-gabriel/powerpc-ieee128-printscan.zip
glibc-gabriel/powerpc-ieee128-printscan.tar.gz
glibc-gabriel/powerpc-ieee128-printscan.tar.bz2
RFC: powerpc64le: Enable support for IEEE long doublegabriel/powerpc-ieee128-printscan
Not for glibc-2.31 - Do not commit! No changes since v3. Changes since v2: - Added definition of LDBL_IBM128_COMPAT_VERSION and LDBL_IBM128_VERSION (moved from a previous commit). Changes since v1: - Use __LONG_DOUBLE_USES_FLOAT128 directly. -- 8< -- On platforms where long double may have two different formats, i.e.: the same format as double (64-bits) or something else (128-bits), building with -mlong-double-128 is the default and function calls in the user program match the name of the function in Glibc. When building with -mlong-double-64, Glibc installed headers redirect such calls to the appropriate function. This patch adds similar redirections to be used by user code builds in IEEE long double mode (-mabi=ieeelongdouble). It also skips some uses of libc_hidden_proto in internal headers, because they also produce redirections, causing a redirection conflict. PS: Missing NEWS entry.
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/bits/stdlib-ldbl.h22
-rw-r--r--stdlib/monetary.h3
-rw-r--r--stdlib/stdlib.h4
3 files changed, 27 insertions, 2 deletions
diff --git a/stdlib/bits/stdlib-ldbl.h b/stdlib/bits/stdlib-ldbl.h
index dcbf74a..615ee31 100644
--- a/stdlib/bits/stdlib-ldbl.h
+++ b/stdlib/bits/stdlib-ldbl.h
@@ -21,21 +21,43 @@
#endif
#ifdef __USE_ISOC99
+# ifdef __LDBL_COMPAT
__LDBL_REDIR1_DECL (strtold, strtod)
+# else
+__LDBL_REDIR1_DECL (strtold, __strtoieee128)
+# endif
#endif
#ifdef __USE_GNU
+# ifdef __LDBL_COMPAT
__LDBL_REDIR1_DECL (strtold_l, strtod_l)
+# else
+__LDBL_REDIR1_DECL (strtold_l, __strtoieee128_l)
+# endif
#endif
#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X)
+# ifdef __LDBL_COMPAT
__LDBL_REDIR1_DECL (strfroml, strfromd)
+# else
+__LDBL_REDIR1_DECL (strfroml, __strfromieee128)
+# endif
#endif
#ifdef __USE_MISC
+# if defined __LDBL_COMPAT
__LDBL_REDIR1_DECL (qecvt, ecvt)
__LDBL_REDIR1_DECL (qfcvt, fcvt)
__LDBL_REDIR1_DECL (qgcvt, gcvt)
__LDBL_REDIR1_DECL (qecvt_r, ecvt_r)
__LDBL_REDIR1_DECL (qfcvt_r, fcvt_r)
+# elif __LONG_DOUBLE_USES_FLOAT128 == 1
+__LDBL_REDIR1_DECL (qecvt, __qecvtieee128)
+__LDBL_REDIR1_DECL (qfcvt, __qfcvtieee128)
+__LDBL_REDIR1_DECL (qgcvt, __qgcvtieee128)
+__LDBL_REDIR1_DECL (qecvt_r, __qecvtieee128_r)
+__LDBL_REDIR1_DECL (qfcvt_r, __qfcvtieee128_r)
+# else
+# error bits/stdlib-ldbl.h included when no ldbl redirections are required.
+# endif
#endif
diff --git a/stdlib/monetary.h b/stdlib/monetary.h
index 40d3128..6a680cc 100644
--- a/stdlib/monetary.h
+++ b/stdlib/monetary.h
@@ -50,7 +50,8 @@ extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
__THROW __attribute_format_strfmon__ (4, 5);
#endif
-#ifdef __LDBL_COMPAT
+#include <bits/floatn.h>
+#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1
# include <bits/monetary-ldbl.h>
#endif
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 4bd86ec..e527864 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -1016,7 +1016,9 @@ extern int ttyslot (void) __THROW;
#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
# include <bits/stdlib.h>
#endif
-#ifdef __LDBL_COMPAT
+
+#include <bits/floatn.h>
+#if defined __LDBL_COMPAT || __LONG_DOUBLE_USES_FLOAT128 == 1
# include <bits/stdlib-ldbl.h>
#endif