aboutsummaryrefslogtreecommitdiff
path: root/libquadmath/printf
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2023-03-03 00:40:13 +0100
committerJakub Jelinek <jakub@redhat.com>2023-03-03 00:40:13 +0100
commitdf63f4162c78ef799d4ea9dec3443d5e9c51e5aa (patch)
treedf7e83356e9f63cf0c3bc3b8aa1fbd9b10ebbd96 /libquadmath/printf
parent6978df2c04df165eaa6aac9e17b6c770bed460e3 (diff)
downloadgcc-df63f4162c78ef799d4ea9dec3443d5e9c51e5aa.zip
gcc-df63f4162c78ef799d4ea9dec3443d5e9c51e5aa.tar.gz
gcc-df63f4162c78ef799d4ea9dec3443d5e9c51e5aa.tar.bz2
libquadmath: Assorted libquadmath strtoflt128 fixes [PR87204, PR94756]
This patch cherry-pickx 8 commits from glibc which fix various strtod_l bugs. Additionally, it makes mp_limb_t 64-bit on llp64 targets like 64-bit cygwin. 2023-03-03 niXman <i.nixman@autistici.org> Jakub Jelinek <jakub@redhat.com> PR libquadmath/87204 PR libquadmath/94756 * printf/gmp-impl.h (mp_limb_t, mp_limb_signed_t, BITS_PER_MP_LIMB): Use 64-bit limbs on LLP64 targets. * strtod/strtod_l.c (round_and_return): Cherry-pick glibc 9310c284ae9 BZ #16151, 4406c41c1d6 BZ #16965 and fcd6b5ac36a BZ #23279 fixes. (____STRTOF_INTERNAL): Cherry-pick glibc b0debe14fcf BZ #23007, 5556d30caee BZ #18247, 09555b9721d and c6aac3bf366 BZ #26137 and d84f25c7d87 fixes.
Diffstat (limited to 'libquadmath/printf')
-rw-r--r--libquadmath/printf/gmp-impl.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/libquadmath/printf/gmp-impl.h b/libquadmath/printf/gmp-impl.h
index 94d88ef..c5c9c8e 100644
--- a/libquadmath/printf/gmp-impl.h
+++ b/libquadmath/printf/gmp-impl.h
@@ -33,10 +33,18 @@ MA 02111-1307, USA. */
#define MAX(h,i) ((h) > (i) ? (h) : (i))
#endif
+#if __SIZEOF_LONG__ == 4 && __SIZEOF_LONG_LONG__ == 8 \
+ && __SIZEOF_POINTER__ == 8
+/* Use 64-bit limbs on LLP64 targets. */
+#define BITS_PER_MP_LIMB (__SIZEOF_LONG_LONG__ * __CHAR_BIT__)
+typedef unsigned long long int mp_limb_t;
+typedef long long int mp_limb_signed_t;
+#else
#define BITS_PER_MP_LIMB (__SIZEOF_LONG__ * __CHAR_BIT__)
-#define BYTES_PER_MP_LIMB (BITS_PER_MP_LIMB / __CHAR_BIT__)
typedef unsigned long int mp_limb_t;
typedef long int mp_limb_signed_t;
+#endif
+#define BYTES_PER_MP_LIMB (BITS_PER_MP_LIMB / __CHAR_BIT__)
typedef mp_limb_t * mp_ptr;
typedef const mp_limb_t * mp_srcptr;