aboutsummaryrefslogtreecommitdiff
path: root/gcc/libgcc2.h
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2005-12-15 21:50:10 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2005-12-15 21:50:10 +0000
commit4a73d8657b1e02983b234533732b9dbc09c7929b (patch)
tree103ac80216ebf4fcc51f100555eacea1fd58a30f /gcc/libgcc2.h
parent4976b95c37dd8245c7565d76cfb729dc1b7f603f (diff)
downloadgcc-4a73d8657b1e02983b234533732b9dbc09c7929b.zip
gcc-4a73d8657b1e02983b234533732b9dbc09c7929b.tar.gz
gcc-4a73d8657b1e02983b234533732b9dbc09c7929b.tar.bz2
re PR other/25028 (TImode-to-floating conversions broken)
PR other/25028 * libgcc2.h (SF_SIZE, DF_SIZE, XF_SIZE, TF_SIZE): Define. * libgcc2.c (__floatdixf, __floatundixf, __floatditf, __floatunditf): Use #error if type sizes don't match requirements of implementation. (__floatdisf, __floatdidf): Unify. Possibly use XFmode or TFmode as wider floating-point type. Use #error if type sizes don't match requirements of implementation. Avoid overflow in computing Wtype_MAXp1_F * Wtype_MAXp1_F. When special casing conversion, shift one more bit. Cast 1 to DWtype or UDWtype for shifting. (__floatundisf, __floatundidf): Likewise. * config/ia64/hpux.h (XF_SIZE, TF_SIZE): Define. * config/ia64/ia64.c (ia64_init_libfuncs): Use _U_Qfcnvfxt_quad_to_quad and _U_Qfcnvxf_quad_to_quad for TFmode-TImode conversions. * doc/tm.texi (SF_SIZE, DF_SIZE, XF_SIZE, TF_SIZE): Document. testsuite: * gcc.dg/torture/fp-int-convert-timode.c: Only XFAIL for LP64 IA64 HP-UX. From-SVN: r108598
Diffstat (limited to 'gcc/libgcc2.h')
-rw-r--r--gcc/libgcc2.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h
index 11a1d9a..f8056d6 100644
--- a/gcc/libgcc2.h
+++ b/gcc/libgcc2.h
@@ -79,6 +79,44 @@ extern short int __get_eh_table_version (struct exception_descriptor *);
(BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
#endif
+#ifndef SF_SIZE
+#if LIBGCC2_HAS_SF_MODE
+#define SF_SIZE FLT_MANT_DIG
+#else
+#define SF_SIZE 0
+#endif
+#endif
+
+#ifndef DF_SIZE
+#if LIBGCC2_HAS_DF_MODE
+#if LIBGCC2_DOUBLE_TYPE_SIZE == 64
+#define DF_SIZE DBL_MANT_DIG
+#elif LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64
+#define DF_SIZE LDBL_MANT_DIG
+#else
+#define DF_SIZE 0
+#endif
+#else
+#define DF_SIZE 0
+#endif
+#endif
+
+#ifndef XF_SIZE
+#if LIBGCC2_HAS_XF_MODE
+#define XF_SIZE LDBL_MANT_DIG
+#else
+#define XF_SIZE 0
+#endif
+#endif
+
+#ifndef TF_SIZE
+#if LIBGCC2_HAS_TF_MODE
+#define TF_SIZE LDBL_MANT_DIG
+#else
+#define TF_SIZE 0
+#endif
+#endif
+
#ifndef MIN_UNITS_PER_WORD
#define MIN_UNITS_PER_WORD UNITS_PER_WORD
#endif