diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-16 22:55:33 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-16 22:55:33 +0000 |
commit | fe2f56931c21fbf9551a4433e0e0389c5abf85a5 (patch) | |
tree | 2c8f7da1df0ca3c8c4ec10b9017f84b06b17368b /gcc/libgcc2.h | |
parent | ccd90aaa3dbf50d8b05431904eaf6b3ea2f7d254 (diff) | |
download | gcc-fe2f56931c21fbf9551a4433e0e0389c5abf85a5.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95121 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/libgcc2.h')
-rw-r--r-- | gcc/libgcc2.h | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h index 16578731636..0a08f51195e 100644 --- a/gcc/libgcc2.h +++ b/gcc/libgcc2.h @@ -51,6 +51,9 @@ extern short int __get_eh_table_version (struct exception_descriptor *); #define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN #endif +#ifndef LIBGCC2_DOUBLE_TYPE_SIZE +#define LIBGCC2_DOUBLE_TYPE_SIZE DOUBLE_TYPE_SIZE +#endif #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE #endif @@ -91,15 +94,20 @@ typedef unsigned int UTItype __attribute__ ((mode (TI))); #if BITS_PER_UNIT == 8 typedef float SFtype __attribute__ ((mode (SF))); -typedef float DFtype __attribute__ ((mode (DF))); 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 +#define HAVE_XFMODE typedef float XFtype __attribute__ ((mode (XF))); typedef _Complex float XCtype __attribute__ ((mode (XC))); #endif #if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 +#define HAVE_TFMODE typedef float TFtype __attribute__ ((mode (TF))); typedef _Complex float TCtype __attribute__ ((mode (TC))); #endif @@ -200,6 +208,18 @@ typedef int word_type __attribute__ ((mode (__word__))); #define Wtype_MAX ((Wtype)(((UWtype)1 << (W_TYPE_SIZE - 1)) - 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 __divdi3 __NDW(div,3) #define __udivdi3 __NDW(udiv,3) @@ -301,23 +321,25 @@ extern SItype __negvsi2 (SItype); #endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ #if BITS_PER_UNIT == 8 -extern DWtype __fixdfdi (DFtype); extern DWtype __fixsfdi (SFtype); -extern DFtype __floatdidf (DWtype); extern SFtype __floatdisf (DWtype); -extern UWtype __fixunsdfSI (DFtype); extern UWtype __fixunssfSI (SFtype); -extern DWtype __fixunsdfDI (DFtype); extern DWtype __fixunssfDI (SFtype); extern SFtype __powisf2 (SFtype, Wtype); -extern DFtype __powidf2 (DFtype, Wtype); - extern SCtype __divsc3 (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 __muldc3 (DFtype, DFtype, DFtype, DFtype); +#endif -#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80 +#ifdef HAVE_XFMODE extern DWtype __fixxfdi (XFtype); extern DWtype __fixunsxfDI (XFtype); extern XFtype __floatdixf (DWtype); @@ -327,7 +349,7 @@ extern XCtype __divxc3 (XFtype, XFtype, XFtype, XFtype); extern XCtype __mulxc3 (XFtype, XFtype, XFtype, XFtype); #endif -#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 +#ifdef HAVE_TFMODE extern DWtype __fixunstfDI (TFtype); extern DWtype __fixtfdi (TFtype); extern TFtype __floatditf (DWtype); |