Commit 4f2e0d5e by Richard Henderson Committed by Richard Henderson

re PR middle-end/19920 (build broken on several targets due to recent 'DC' type update to libgcc2)

        PR 19920
        * libgcc2.c (WORD_SIZE): Remove all definitions; replace uses
        with W_TYPE_SIZE.
        (HIGH_WORD_COEFF, HIGH_HALFWORD_COEFF): Remove all definitions;
        replace uses with Wtype_MAXp1_F.
        (L_fixunstfdi, L_fixtfdi, L_floatditf, L_fixunsxfdi, L_fixxfdi,
        L_floatdixf, L_fixunsxfsi, L_fixunsdfdi, L_floatdidf, L_fixunsdfsi,
        L_powidf2, L_powixf2, L_powitf2, L_muldc3, L_divdc3, L_mulxc3,
        L_divxc3, L_multc3, L_divtc3): Protect with HAVE_DFMODE, HAVE_XFMODE,
        and HAVE_TFMODE as appropriate.
        (__fixunssfDI): Provide an implementation that doesn't need DFmode.
        (__floatdisf): Likewise.
        * libgcc2.h (LIBGCC2_DOUBLE_TYPE_SIZE): New.
        (HAVE_DFMODE, HAVE_XFMODE, HAVE_TFMODE): New.
        (Wtype_MAXp1_F): New.
        (DFtype, DCtype, __fixdfdi, __floatdidf, __fixunsdfSI, __fixunsdfDI,
        __powidf2, __divdc3, __muldc3): Protect with HAVE_DFMODE.

From-SVN: r95121
parent 9f7bf991
2005-02-16 Richard Henderson <rth@redhat.com>
PR 19920
* libgcc2.c (WORD_SIZE): Remove all definitions; replace uses
with W_TYPE_SIZE.
(HIGH_WORD_COEFF, HIGH_HALFWORD_COEFF): Remove all definitions;
replace uses with Wtype_MAXp1_F.
(L_fixunstfdi, L_fixtfdi, L_floatditf, L_fixunsxfdi, L_fixxfdi,
L_floatdixf, L_fixunsxfsi, L_fixunsdfdi, L_floatdidf, L_fixunsdfsi,
L_powidf2, L_powixf2, L_powitf2, L_muldc3, L_divdc3, L_mulxc3,
L_divxc3, L_multc3, L_divtc3): Protect with HAVE_DFMODE, HAVE_XFMODE,
and HAVE_TFMODE as appropriate.
(__fixunssfDI): Provide an implementation that doesn't need DFmode.
(__floatdisf): Likewise.
* libgcc2.h (LIBGCC2_DOUBLE_TYPE_SIZE): New.
(HAVE_DFMODE, HAVE_XFMODE, HAVE_TFMODE): New.
(Wtype_MAXp1_F): New.
(DFtype, DCtype, __fixdfdi, __floatdidf, __fixunsdfSI, __fixunsdfDI,
__powidf2, __divdc3, __muldc3): Protect with HAVE_DFMODE.
2005-02-16 Richard Earnshaw <rearnsha@arm.com> 2005-02-16 Richard Earnshaw <rearnsha@arm.com>
* PR target/19162 * PR target/19162
......
...@@ -51,6 +51,9 @@ extern short int __get_eh_table_version (struct exception_descriptor *); ...@@ -51,6 +51,9 @@ extern short int __get_eh_table_version (struct exception_descriptor *);
#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN #define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
#endif #endif
#ifndef LIBGCC2_DOUBLE_TYPE_SIZE
#define LIBGCC2_DOUBLE_TYPE_SIZE DOUBLE_TYPE_SIZE
#endif
#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
#endif #endif
...@@ -91,15 +94,20 @@ typedef unsigned int UTItype __attribute__ ((mode (TI))); ...@@ -91,15 +94,20 @@ typedef unsigned int UTItype __attribute__ ((mode (TI)));
#if BITS_PER_UNIT == 8 #if BITS_PER_UNIT == 8
typedef float SFtype __attribute__ ((mode (SF))); typedef float SFtype __attribute__ ((mode (SF)));
typedef float DFtype __attribute__ ((mode (DF)));
typedef _Complex float SCtype __attribute__ ((mode (SC))); typedef _Complex float SCtype __attribute__ ((mode (SC)));
typedef _Complex float DCtype __attribute__ ((mode (DC)));
#if LIBGCC2_DOUBLE_TYPE_SIZE == 64 || LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64
#define HAVE_DFMODE
typedef float DFtype __attribute__ ((mode (DF)));
typedef _Complex float DCtype __attribute__ ((mode (DC)));
#endif
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80 #if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80
#define HAVE_XFMODE
typedef float XFtype __attribute__ ((mode (XF))); typedef float XFtype __attribute__ ((mode (XF)));
typedef _Complex float XCtype __attribute__ ((mode (XC))); typedef _Complex float XCtype __attribute__ ((mode (XC)));
#endif #endif
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 #if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128
#define HAVE_TFMODE
typedef float TFtype __attribute__ ((mode (TF))); typedef float TFtype __attribute__ ((mode (TF)));
typedef _Complex float TCtype __attribute__ ((mode (TC))); typedef _Complex float TCtype __attribute__ ((mode (TC)));
#endif #endif
...@@ -200,6 +208,18 @@ typedef int word_type __attribute__ ((mode (__word__))); ...@@ -200,6 +208,18 @@ typedef int word_type __attribute__ ((mode (__word__)));
#define Wtype_MAX ((Wtype)(((UWtype)1 << (W_TYPE_SIZE - 1)) - 1)) #define Wtype_MAX ((Wtype)(((UWtype)1 << (W_TYPE_SIZE - 1)) - 1))
#define Wtype_MIN (- Wtype_MAX - 1) #define Wtype_MIN (- Wtype_MAX - 1)
#if W_TYPE_SIZE == 8
# define Wtype_MAXp1_F 0x1p8f
#elif W_TYPE_SIZE == 16
# define Wtype_MAXp1_F 0x1p16f
#elif W_TYPE_SIZE == 32
# define Wtype_MAXp1_F 0x1p32f
#elif W_TYPE_SIZE == 64
# define Wtype_MAXp1_F 0x1p64f
#else
# error "expand the table"
#endif
#define __muldi3 __NDW(mul,3) #define __muldi3 __NDW(mul,3)
#define __divdi3 __NDW(div,3) #define __divdi3 __NDW(div,3)
#define __udivdi3 __NDW(udiv,3) #define __udivdi3 __NDW(udiv,3)
...@@ -301,23 +321,25 @@ extern SItype __negvsi2 (SItype); ...@@ -301,23 +321,25 @@ extern SItype __negvsi2 (SItype);
#endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ #endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */
#if BITS_PER_UNIT == 8 #if BITS_PER_UNIT == 8
extern DWtype __fixdfdi (DFtype);
extern DWtype __fixsfdi (SFtype); extern DWtype __fixsfdi (SFtype);
extern DFtype __floatdidf (DWtype);
extern SFtype __floatdisf (DWtype); extern SFtype __floatdisf (DWtype);
extern UWtype __fixunsdfSI (DFtype);
extern UWtype __fixunssfSI (SFtype); extern UWtype __fixunssfSI (SFtype);
extern DWtype __fixunsdfDI (DFtype);
extern DWtype __fixunssfDI (SFtype); extern DWtype __fixunssfDI (SFtype);
extern SFtype __powisf2 (SFtype, Wtype); extern SFtype __powisf2 (SFtype, Wtype);
extern DFtype __powidf2 (DFtype, Wtype);
extern SCtype __divsc3 (SFtype, SFtype, SFtype, SFtype); extern SCtype __divsc3 (SFtype, SFtype, SFtype, SFtype);
extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype); extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype);
#ifdef HAVE_DFMODE
extern DWtype __fixdfdi (DFtype);
extern DFtype __floatdidf (DWtype);
extern UWtype __fixunsdfSI (DFtype);
extern DWtype __fixunsdfDI (DFtype);
extern DFtype __powidf2 (DFtype, Wtype);
extern DCtype __divdc3 (DFtype, DFtype, DFtype, DFtype); extern DCtype __divdc3 (DFtype, DFtype, DFtype, DFtype);
extern DCtype __muldc3 (DFtype, DFtype, DFtype, DFtype); extern DCtype __muldc3 (DFtype, DFtype, DFtype, DFtype);
#endif
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80 #ifdef HAVE_XFMODE
extern DWtype __fixxfdi (XFtype); extern DWtype __fixxfdi (XFtype);
extern DWtype __fixunsxfDI (XFtype); extern DWtype __fixunsxfDI (XFtype);
extern XFtype __floatdixf (DWtype); extern XFtype __floatdixf (DWtype);
...@@ -327,7 +349,7 @@ extern XCtype __divxc3 (XFtype, XFtype, XFtype, XFtype); ...@@ -327,7 +349,7 @@ extern XCtype __divxc3 (XFtype, XFtype, XFtype, XFtype);
extern XCtype __mulxc3 (XFtype, XFtype, XFtype, XFtype); extern XCtype __mulxc3 (XFtype, XFtype, XFtype, XFtype);
#endif #endif
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 #ifdef HAVE_TFMODE
extern DWtype __fixunstfDI (TFtype); extern DWtype __fixunstfDI (TFtype);
extern DWtype __fixtfdi (TFtype); extern DWtype __fixtfdi (TFtype);
extern TFtype __floatditf (DWtype); extern TFtype __floatditf (DWtype);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment