diff options
Diffstat (limited to 'gcc/libgcc2.h')
-rw-r--r-- | gcc/libgcc2.h | 107 |
1 files changed, 65 insertions, 42 deletions
diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h index 16578731636..9bdc40cedfe 100644 --- a/gcc/libgcc2.h +++ b/gcc/libgcc2.h @@ -51,10 +51,34 @@ 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 +#ifndef LIBGCC2_HAS_SF_MODE +#define LIBGCC2_HAS_SF_MODE (BITS_PER_UNIT == 8) +#endif + +#ifndef LIBGCC2_HAS_DF_MODE +#define LIBGCC2_HAS_DF_MODE \ + (BITS_PER_UNIT == 8 \ + && (LIBGCC2_DOUBLE_TYPE_SIZE == 64 \ + || LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64)) +#endif + +#ifndef LIBGCC2_HAS_XF_MODE +#define LIBGCC2_HAS_XF_MODE \ + (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80) +#endif + +#ifndef LIBGCC2_HAS_TF_MODE +#define LIBGCC2_HAS_TF_MODE \ + (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128) +#endif + #ifndef MIN_UNITS_PER_WORD #define MIN_UNITS_PER_WORD UNITS_PER_WORD #endif @@ -88,45 +112,23 @@ typedef unsigned int UTItype __attribute__ ((mode (TI))); #endif #endif -#if BITS_PER_UNIT == 8 - +#if LIBGCC2_HAS_SF_MODE typedef float SFtype __attribute__ ((mode (SF))); -typedef float DFtype __attribute__ ((mode (DF))); typedef _Complex float SCtype __attribute__ ((mode (SC))); +#endif +#if LIBGCC2_HAS_DF_MODE +typedef float DFtype __attribute__ ((mode (DF))); typedef _Complex float DCtype __attribute__ ((mode (DC))); - -#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80 +#endif +#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 +#if LIBGCC2_HAS_TF_MODE typedef float TFtype __attribute__ ((mode (TF))); typedef _Complex float TCtype __attribute__ ((mode (TC))); #endif -#else /* BITS_PER_UNIT != 8 */ - -/* On dsp's there are usually qf/hf/tqf modes used instead of the above. - For now we don't support them in libgcc2.c. */ - -#undef L_fixdfdi -#undef L_fixsfdi -#undef L_fixtfdi -#undef L_fixunsdfdi -#undef L_fixunsdfsi -#undef L_fixunssfdi -#undef L_fixunssfsi -#undef L_fixunstfdi -#undef L_fixunsxfdi -#undef L_fixunsxfsi -#undef L_fixxfdi -#undef L_floatdidf -#undef L_floatdisf -#undef L_floatditf -#undef L_floatdixf - -#endif /* BITS_PER_UNIT != 8 */ - typedef int word_type __attribute__ ((mode (__word__))); /* Make sure that we don't accidentally use any normal C language built-in @@ -200,6 +202,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) @@ -300,42 +314,51 @@ extern SItype __mulvsi3 (SItype, SItype); extern SItype __negvsi2 (SItype); #endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ -#if BITS_PER_UNIT == 8 -extern DWtype __fixdfdi (DFtype); +/* APPLE LOCAL mainline 2005-03-30 */ +#undef int +#if LIBGCC2_HAS_SF_MODE 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); - +/* APPLE LOCAL mainline 2005-03-30 */ +extern SFtype __powisf2 (SFtype, int); extern SCtype __divsc3 (SFtype, SFtype, SFtype, SFtype); extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype); +#endif +#if LIBGCC2_HAS_DF_MODE +extern DWtype __fixdfdi (DFtype); +extern DFtype __floatdidf (DWtype); +extern UWtype __fixunsdfSI (DFtype); +extern DWtype __fixunsdfDI (DFtype); +/* APPLE LOCAL mainline 2005-03-30 */ +extern DFtype __powidf2 (DFtype, int); extern DCtype __divdc3 (DFtype, DFtype, DFtype, DFtype); extern DCtype __muldc3 (DFtype, DFtype, DFtype, DFtype); +#endif -#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80 +#if LIBGCC2_HAS_XF_MODE extern DWtype __fixxfdi (XFtype); extern DWtype __fixunsxfDI (XFtype); extern XFtype __floatdixf (DWtype); extern UWtype __fixunsxfSI (XFtype); -extern XFtype __powixf2 (XFtype, Wtype); +/* APPLE LOCAL mainline 2005-03-30 */ +extern XFtype __powixf2 (XFtype, int); extern XCtype __divxc3 (XFtype, XFtype, XFtype, XFtype); extern XCtype __mulxc3 (XFtype, XFtype, XFtype, XFtype); #endif -#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 +#if LIBGCC2_HAS_TF_MODE extern DWtype __fixunstfDI (TFtype); extern DWtype __fixtfdi (TFtype); extern TFtype __floatditf (DWtype); -extern TFtype __powitf2 (TFtype, Wtype); +/* APPLE LOCAL mainline 2005-03-30 */ +extern TFtype __powitf2 (TFtype, int); extern TCtype __divtc3 (TFtype, TFtype, TFtype, TFtype); extern TCtype __multc3 (TFtype, TFtype, TFtype, TFtype); #endif -#endif /* BITS_PER_UNIT == 8 */ +/* APPLE LOCAL mainline 2005-03-30 */ +#define int bogus_type /* DWstructs are pairs of Wtype values in the order determined by LIBGCC2_WORDS_BIG_ENDIAN. */ |