OSDN Git Service

PR target/19930
authorsje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Feb 2005 21:34:49 +0000 (21:34 +0000)
committersje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Feb 2005 21:34:49 +0000 (21:34 +0000)
* doc/tm.texi (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Document.
(LIBGCC2_HAS_DF_MODE): New.
(LIBGCC2_HAS_XF_MODE): New.
(LIBGCC2_HAS_TF_MODE): New.
* libgcc2.h (LIBGCC2_HAS_XF_MODE): New name for HAVE_XFMODE.
(LIBGCC2_HAS_TF_MODE): New name for HAVE_TFMODE.
* libgcc2.c (LIBGCC2_HAS_XF_MODE): New name for HAVE_XFMODE.
(LIBGCC2_HAS_TF_MODE): New name for HAVE_TFMODE.
(LIBGCC2_HAS_DF_MODE): New name for HAVE_DFMODE.
* config/ia64/t-ia64 (LIB1ASMFUNCS): Remove __compat
and add _fixtfdi, _fixunstfdi, _floatditf
* lib1funcs.asm: Remove L__compat. Add L_fixtfdi,
L_fixunstfdi, L_floatditf.
* config/ia64/hpux.h (LIBGCC2_HAS_XF_MODE): Define.
(LIBGCC2_HAS_TF_MODE): Define.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95548 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/ia64/hpux.h
gcc/config/ia64/lib1funcs.asm
gcc/config/ia64/t-ia64
gcc/doc/tm.texi
gcc/libgcc2.c
gcc/libgcc2.h

index b45dc87..ab87033 100644 (file)
@@ -1,3 +1,22 @@
+2005-02-25  Steve Ellcey  <sje@cup.hp.com>
+
+       PR target/19930
+       * doc/tm.texi (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Document.
+       (LIBGCC2_HAS_DF_MODE): New.
+       (LIBGCC2_HAS_XF_MODE): New.
+       (LIBGCC2_HAS_TF_MODE): New.
+       * libgcc2.h (LIBGCC2_HAS_XF_MODE): New name for HAVE_XFMODE.
+       (LIBGCC2_HAS_TF_MODE): New name for HAVE_TFMODE.
+       * libgcc2.c (LIBGCC2_HAS_XF_MODE): New name for HAVE_XFMODE.
+       (LIBGCC2_HAS_TF_MODE): New name for HAVE_TFMODE.
+       (LIBGCC2_HAS_DF_MODE): New name for HAVE_DFMODE.
+       * config/ia64/t-ia64 (LIB1ASMFUNCS): Remove __compat
+       and add _fixtfdi, _fixunstfdi, _floatditf
+       * lib1funcs.asm: Remove L__compat. Add L_fixtfdi,
+       L_fixunstfdi, L_floatditf.
+       * config/ia64/hpux.h (LIBGCC2_HAS_XF_MODE): Define.
+       (LIBGCC2_HAS_TF_MODE): Define.
+
 2005-02-25  Diego Novillo  <dnovillo@redhat.com>
 
        PR tree-optimization/20204
index 9b66a63..5b4f047 100644 (file)
@@ -202,3 +202,11 @@ do {                                                               \
 #define TARGET_INIT_LIBFUNCS ia64_hpux_init_libfuncs
 
 #define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) ((MODE) == TFmode)
+
+/* Put all *xf routines in libgcc, regardless of long double size.  */
+#undef LIBGCC2_HAS_XF_MODE
+#define LIBGCC2_HAS_XF_MODE 1
+
+/* Put all *tf routines in libgcc, regardless of long double size.  */
+#undef LIBGCC2_HAS_TF_MODE
+#define LIBGCC2_HAS_TF_MODE 1
index e3d348b..68ee421 100644 (file)
@@ -706,9 +706,8 @@ __ia64_trampoline:
        .endp __ia64_trampoline
 #endif
 
-#ifdef L__compat
 // Thunks for backward compatibility.
-
+#ifdef L_fixtfdi
        .text
        .align 16
        .global __fixtfti
@@ -719,7 +718,8 @@ __fixtfti:
          ;;
        }
        .endp __fixtfti
-
+#endif
+#ifdef L_fixunstfdi
        .align 16
        .global __fixunstfti
        .proc __fixunstfti
@@ -729,7 +729,8 @@ __fixunstfti:
          ;;
        }
        .endp __fixunstfti
-
+#endif
+#if L_floatditf
        .align 16
        .global __floattitf
        .proc __floattitf
@@ -739,5 +740,4 @@ __floattitf:
          ;;
        }
        .endp __floattitf
-
 #endif
index 04cfc21..824cc41 100644 (file)
@@ -8,7 +8,8 @@ LIB1ASMSRC    = ia64/lib1funcs.asm
 LIB1ASMFUNCS  = __divxf3 __divdf3 __divsf3 \
        __divdi3 __moddi3 __udivdi3 __umoddi3 \
        __divsi3 __modsi3 __udivsi3 __umodsi3 __save_stack_nonlocal \
-       __nonlocal_goto __restore_stack_nonlocal __trampoline __compat
+       __nonlocal_goto __restore_stack_nonlocal __trampoline \
+       _fixtfdi _fixunstfdi _floatditf
 
 # ??? Hack to get -P option used when compiling lib1funcs.asm, because Intel
 # assembler does not accept # line number as a comment.
index b6102e5..625af4b 100644 (file)
@@ -1635,6 +1635,36 @@ the target machine.  If you don't define this, the default is two
 words.
 @end defmac
 
+@defmac LIBGCC2_LONG_DOUBLE_TYPE_SIZE
+Define this macro if @code{LONG_DOUBLE_TYPE_SIZE} is not constant or
+if you want routines in @file{libgcc2.a} for a size other than
+@code{LONG_DOUBLE_TYPE_SIZE}.  If you don't define this, the
+default is @code{LONG_DOUBLE_TYPE_SIZE}.
+@end defmac
+
+@defmac LIBGCC2_HAS_DF_MODE
+Define this macro if neither @code{LIBGCC2_DOUBLE_TYPE_SIZE} nor 
+@code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} is
+@code{DFmode} but you want @code{DFmode} routines in @file{libgcc2.a}
+anyway.  If you don't define this and either @code{LIBGCC2_DOUBLE_TYPE_SIZE}
+or @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} is 64 then the default is 1,
+otherwise it is 0.
+@end defmac
+
+@defmac LIBGCC2_HAS_XF_MODE
+Define this macro if @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} is not 
+@code{XFmode} but you want @code{XFmode} routines in @file{libgcc2.a}
+anyway.  If you don't define this and @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE}
+is 80 then the default is 1, otherwise it is 0.
+@end defmac
+
+@defmac LIBGCC2_HAS_TF_MODE
+Define this macro if @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} is not 
+@code{TFmode} but you want @code{TFmode} routines in @file{libgcc2.a}
+anyway.  If you don't define this and @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE}
+is 128 then the default is 1, otherwise it is 0.
+@end defmac
+
 @defmac TARGET_FLT_EVAL_METHOD
 A C expression for the value for @code{FLT_EVAL_METHOD} in @file{float.h},
 assuming, if applicable, that the floating-point control word is in its
index 1109c5c..68623c3 100644 (file)
@@ -1155,7 +1155,7 @@ __ucmpdi2 (DWtype a, DWtype b)
 }
 #endif
 \f
-#if defined(L_fixunstfdi) && defined(HAVE_TFMODE)
+#if defined(L_fixunstfdi) && LIBGCC2_HAS_TF_MODE
 DWtype
 __fixunstfDI (TFtype a)
 {
@@ -1181,7 +1181,7 @@ __fixunstfDI (TFtype a)
 }
 #endif
 
-#if defined(L_fixtfdi) && defined(HAVE_TFMODE)
+#if defined(L_fixtfdi) && LIBGCC2_HAS_TF_MODE
 DWtype
 __fixtfdi (TFtype a)
 {
@@ -1191,7 +1191,7 @@ __fixtfdi (TFtype a)
 }
 #endif
 
-#if defined(L_fixunsxfdi) && defined(HAVE_XFMODE)
+#if defined(L_fixunsxfdi) && LIBGCC2_HAS_XF_MODE
 DWtype
 __fixunsxfDI (XFtype a)
 {
@@ -1217,7 +1217,7 @@ __fixunsxfDI (XFtype a)
 }
 #endif
 
-#if defined(L_fixxfdi) && defined(HAVE_XFMODE)
+#if defined(L_fixxfdi) && LIBGCC2_HAS_XF_MODE
 DWtype
 __fixxfdi (XFtype a)
 {
@@ -1227,7 +1227,7 @@ __fixxfdi (XFtype a)
 }
 #endif
 
-#if defined(L_fixunsdfdi) && defined(HAVE_DFMODE)
+#if defined(L_fixunsdfdi) && LIBGCC2_HAS_DF_MODE
 DWtype
 __fixunsdfDI (DFtype a)
 {
@@ -1246,7 +1246,7 @@ __fixunsdfDI (DFtype a)
 }
 #endif
 
-#if defined(L_fixdfdi) && defined(HAVE_DFMODE)
+#if defined(L_fixdfdi) && LIBGCC2_HAS_DF_MODE
 DWtype
 __fixdfdi (DFtype a)
 {
@@ -1260,7 +1260,7 @@ __fixdfdi (DFtype a)
 DWtype
 __fixunssfDI (SFtype a)
 {
-#if defined(HAVE_DFMODE)
+#if LIBGCC2_HAS_DF_MODE
   /* Convert the SFtype to a DFtype, because that is surely not going
      to lose any bits.  Some day someone else can write a faster version
      that avoids converting to DFtype, and verify it really works right.  */
@@ -1330,7 +1330,7 @@ __fixsfdi (SFtype a)
 }
 #endif
 
-#if defined(L_floatdixf) && defined(HAVE_XFMODE)
+#if defined(L_floatdixf) && LIBGCC2_HAS_XF_MODE
 XFtype
 __floatdixf (DWtype u)
 {
@@ -1341,7 +1341,7 @@ __floatdixf (DWtype u)
 }
 #endif
 
-#if defined(L_floatditf) && defined(HAVE_TFMODE)
+#if defined(L_floatditf) && LIBGCC2_HAS_TF_MODE
 TFtype
 __floatditf (DWtype u)
 {
@@ -1352,7 +1352,7 @@ __floatditf (DWtype u)
 }
 #endif
 
-#if defined(L_floatdidf) && defined(HAVE_DFMODE)
+#if defined(L_floatdidf) && LIBGCC2_HAS_DF_MODE
 DFtype
 __floatdidf (DWtype u)
 {
@@ -1376,7 +1376,7 @@ __floatdisf (DWtype u)
   f *= Wtype_MAXp1_F;
   f += (UWtype)u;
   return f;
-#elif defined(HAVE_DFMODE)
+#elif LIBGCC2_HAS_DF_MODE
 
 #if LIBGCC2_DOUBLE_TYPE_SIZE == 64
 #define DF_SIZE DBL_MANT_DIG
@@ -1451,7 +1451,7 @@ __floatdisf (DWtype u)
 }
 #endif
 
-#if defined(L_fixunsxfsi) && defined(HAVE_XFMODE)
+#if defined(L_fixunsxfsi) && LIBGCC2_HAS_XF_MODE
 /* Reenable the normal types, in case limits.h needs them.  */
 #undef char
 #undef short
@@ -1473,7 +1473,7 @@ __fixunsxfSI (XFtype a)
 }
 #endif
 
-#if defined(L_fixunsdfsi) && defined(HAVE_DFMODE)
+#if defined(L_fixunsdfsi) && LIBGCC2_HAS_DF_MODE
 /* Reenable the normal types, in case limits.h needs them.  */
 #undef char
 #undef short
@@ -1521,9 +1521,9 @@ __fixunssfSI (SFtype a)
    exponents.  */
 
 #if defined(L_powisf2) \
-    || (defined(L_powidf2) && defined(HAVE_DFMODE)) \
-    || (defined(L_powixf2) && defined(HAVE_XFMODE)) \
-    || (defined(L_powitf2) && defined(HAVE_TFMODE))
+    || (defined(L_powidf2) && LIBGCC2_HAS_DF_MODE) \
+    || (defined(L_powixf2) && LIBGCC2_HAS_XF_MODE) \
+    || (defined(L_powitf2) && LIBGCC2_HAS_TF_MODE)
 # if defined(L_powisf2)
 #  define TYPE SFtype
 #  define NAME __powisf2
@@ -1555,9 +1555,9 @@ NAME (TYPE x, Wtype m)
 #endif
 \f
 #if defined(L_mulsc3) || defined(L_divsc3) \
-    || ((defined(L_muldc3) || defined(L_divdc3)) && defined(HAVE_DFMODE)) \
-    || ((defined(L_mulxc3) || defined(L_divxc3)) && defined(HAVE_XFMODE)) \
-    || ((defined(L_multc3) || defined(L_divtc3)) && defined(HAVE_TFMODE))
+    || ((defined(L_muldc3) || defined(L_divdc3)) && LIBGCC2_HAS_DF_MODE) \
+    || ((defined(L_mulxc3) || defined(L_divxc3)) && LIBGCC2_HAS_XF_MODE) \
+    || ((defined(L_multc3) || defined(L_divtc3)) && LIBGCC2_HAS_TF_MODE)
 
 #undef float
 #undef double
index 0a08f51..d1df220 100644 (file)
@@ -58,6 +58,19 @@ extern short int __get_eh_table_version (struct exception_descriptor *);
 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
 #endif
 
+#ifndef LIBGCC2_HAS_DF_MODE
+#define LIBGCC2_HAS_DF_MODE \
+  (LIBGCC2_DOUBLE_TYPE_SIZE == 64 || LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64)
+#endif
+
+#ifndef LIBGCC2_HAS_XF_MODE
+#define LIBGCC2_HAS_XF_MODE (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80)
+#endif
+
+#ifndef LIBGCC2_HAS_TF_MODE
+#define LIBGCC2_HAS_TF_MODE (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
+#endif
+
 #ifndef MIN_UNITS_PER_WORD
 #define MIN_UNITS_PER_WORD UNITS_PER_WORD
 #endif
@@ -96,18 +109,15 @@ typedef unsigned int UTItype       __attribute__ ((mode (TI)));
 typedef        float SFtype    __attribute__ ((mode (SF)));
 typedef _Complex float SCtype  __attribute__ ((mode (SC)));
 
-#if LIBGCC2_DOUBLE_TYPE_SIZE == 64 || LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64
-#define HAVE_DFMODE
+#if LIBGCC2_HAS_DF_MODE
 typedef                float DFtype    __attribute__ ((mode (DF)));
 typedef _Complex float DCtype  __attribute__ ((mode (DC)));
 #endif
-#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80
-#define HAVE_XFMODE
+#if LIBGCC2_HAS_XF_MODE
 typedef                float XFtype    __attribute__ ((mode (XF)));
 typedef _Complex float XCtype  __attribute__ ((mode (XC)));
 #endif
-#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128
-#define HAVE_TFMODE
+#if LIBGCC2_HAS_TF_MODE
 typedef                float TFtype    __attribute__ ((mode (TF)));
 typedef _Complex float TCtype  __attribute__ ((mode (TC)));
 #endif
@@ -329,7 +339,7 @@ extern SFtype __powisf2 (SFtype, Wtype);
 extern SCtype __divsc3 (SFtype, SFtype, SFtype, SFtype);
 extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype);
 
-#ifdef HAVE_DFMODE
+#if LIBGCC2_HAS_DF_MODE
 extern DWtype __fixdfdi (DFtype);
 extern DFtype __floatdidf (DWtype);
 extern UWtype __fixunsdfSI (DFtype);
@@ -339,7 +349,7 @@ extern DCtype __divdc3 (DFtype, DFtype, DFtype, DFtype);
 extern DCtype __muldc3 (DFtype, DFtype, DFtype, DFtype);
 #endif
 
-#ifdef HAVE_XFMODE
+#if LIBGCC2_HAS_XF_MODE
 extern DWtype __fixxfdi (XFtype);
 extern DWtype __fixunsxfDI (XFtype);
 extern XFtype __floatdixf (DWtype);
@@ -349,7 +359,7 @@ extern XCtype __divxc3 (XFtype, XFtype, XFtype, XFtype);
 extern XCtype __mulxc3 (XFtype, XFtype, XFtype, XFtype);
 #endif
 
-#ifdef HAVE_TFMODE
+#if LIBGCC2_HAS_TF_MODE
 extern DWtype __fixunstfDI (TFtype);
 extern DWtype __fixtfdi (TFtype);
 extern TFtype __floatditf (DWtype);