diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b45dc87babf..ab87033327c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,22 @@ +2005-02-25 Steve Ellcey + + 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 PR tree-optimization/20204 diff --git a/gcc/config/ia64/hpux.h b/gcc/config/ia64/hpux.h index 9b66a633ba1..5b4f0470f08 100644 --- a/gcc/config/ia64/hpux.h +++ b/gcc/config/ia64/hpux.h @@ -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 diff --git a/gcc/config/ia64/lib1funcs.asm b/gcc/config/ia64/lib1funcs.asm index e3d348ba722..68ee421ff65 100644 --- a/gcc/config/ia64/lib1funcs.asm +++ b/gcc/config/ia64/lib1funcs.asm @@ -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 diff --git a/gcc/config/ia64/t-ia64 b/gcc/config/ia64/t-ia64 index 04cfc21592d..824cc4113c4 100644 --- a/gcc/config/ia64/t-ia64 +++ b/gcc/config/ia64/t-ia64 @@ -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. diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index b6102e50d55..625af4b6278 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -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 diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index 1109c5c4e05..68623c37122 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -1155,7 +1155,7 @@ __ucmpdi2 (DWtype a, DWtype b) } #endif -#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 #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 diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h index 0a08f51195e..d1df220f9dd 100644 --- a/gcc/libgcc2.h +++ b/gcc/libgcc2.h @@ -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);