aboutsummaryrefslogtreecommitdiff
path: root/contrib/gcc/config/s390/fixdfdi.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gcc/config/s390/fixdfdi.h')
-rw-r--r--contrib/gcc/config/s390/fixdfdi.h457
1 files changed, 0 insertions, 457 deletions
diff --git a/contrib/gcc/config/s390/fixdfdi.h b/contrib/gcc/config/s390/fixdfdi.h
deleted file mode 100644
index 88c2197f4c84..000000000000
--- a/contrib/gcc/config/s390/fixdfdi.h
+++ /dev/null
@@ -1,457 +0,0 @@
-/* Definitions of target machine for GNU compiler, for IBM S/390
- Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
- Contributed by Hartmut Penner (hpenner@de.ibm.com) and
- Ulrich Weigand (uweigand@de.ibm.com).
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING. If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA. */
-
-#ifdef L_fixunstfdi
-
-#define EXPD(fp) (((fp.l.i[0]) >> 16) & 0x7FFF)
-#define EXPONENT_BIAS 16383
-#define MANTISSA_BITS 112
-#define PRECISION (MANTISSA_BITS + 1)
-#define SIGNBIT 0x80000000
-#define SIGND(fp) ((fp.l.i[0]) & SIGNBIT)
-#define MANTD_HIGH_LL(fp) ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
-#define MANTD_LOW_LL(fp) (fp.ll[1])
-#define FRACD_ZERO_P(fp) (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
-#define HIGH_LL_FRAC_BITS 48
-#define HIGH_LL_UNIT_BIT ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
-#define HIGH_LL_FRAC_MASK (HIGH_LL_UNIT_BIT - 1)
-
-typedef int DItype_x __attribute__ ((mode (DI)));
-typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
-typedef int SItype_x __attribute__ ((mode (SI)));
-typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
-union double_long {
- long double d;
- struct {
- SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
- } l;
- UDItype_x ll[2]; /* 64 bit parts: 0 upper, 1 lower */
-};
-
-UDItype_x __fixunstfdi (long double a1);
-
-/* convert double to unsigned int */
-UDItype_x
-__fixunstfdi (long double a1)
-{
- register union double_long dl1;
- register int exp;
- register UDItype_x l;
-
- dl1.d = a1;
-
- /* +/- 0, denormalized, negative */
- if (!EXPD (dl1) || SIGND(dl1))
- return 0;
-
- /* The exponent - considered the binary point at the right end of
- the mantissa. */
- exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
-
- /* number < 1: If the mantissa would need to be right-shifted more bits than
- its size (plus the implied one bit on the left) the result would be
- zero. */
- if (exp <= -PRECISION)
- return 0;
-
- /* NaN: All exponent bits set and a nonzero fraction. */
- if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
- return 0x0ULL;
-
- /* If the upper ll part of the mantissa isn't
- zeroed out after shifting the number would be to large. */
- if (exp >= -HIGH_LL_FRAC_BITS)
- return 0xFFFFFFFFFFFFFFFFULL;
-
- exp += HIGH_LL_FRAC_BITS + 1;
-
- l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
- | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
-
- return l >> -exp;
-}
-#define __fixunstfdi ___fixunstfdi
-#endif
-#undef L_fixunstfdi
-
-#ifdef L_fixtfdi
-#define EXPD(fp) (((fp.l.i[0]) >> 16) & 0x7FFF)
-#define EXPONENT_BIAS 16383
-#define MANTISSA_BITS 112
-#define PRECISION (MANTISSA_BITS + 1)
-#define SIGNBIT 0x80000000
-#define SIGND(fp) ((fp.l.i[0]) & SIGNBIT)
-#define MANTD_HIGH_LL(fp) ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
-#define MANTD_LOW_LL(fp) (fp.ll[1])
-#define FRACD_ZERO_P(fp) (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
-#define HIGH_LL_FRAC_BITS 48
-#define HIGH_LL_UNIT_BIT ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
-#define HIGH_LL_FRAC_MASK (HIGH_LL_UNIT_BIT - 1)
-
-typedef int DItype_x __attribute__ ((mode (DI)));
-typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
-typedef int SItype_x __attribute__ ((mode (SI)));
-typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
-union double_long {
- long double d;
- struct {
- SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
- } l;
- DItype_x ll[2]; /* 64 bit parts: 0 upper, 1 lower */
-};
-
-DItype_x __fixtfdi (long double a1);
-
-/* convert double to unsigned int */
-DItype_x
-__fixtfdi (long double a1)
-{
- register union double_long dl1;
- register int exp;
- register UDItype_x l;
-
- dl1.d = a1;
-
- /* +/- 0, denormalized */
- if (!EXPD (dl1))
- return 0;
-
- /* The exponent - considered the binary point at the right end of
- the mantissa. */
- exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
-
- /* number < 1: If the mantissa would need to be right-shifted more bits than
- its size the result would be zero. */
- if (exp <= -PRECISION)
- return 0;
-
- /* NaN: All exponent bits set and a nonzero fraction. */
- if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
- return 0x8000000000000000ULL;
-
- /* If the upper ll part of the mantissa isn't
- zeroed out after shifting the number would be to large. */
- if (exp >= -HIGH_LL_FRAC_BITS)
- {
- l = (long long)1 << 63; /* long int min */
- return SIGND (dl1) ? l : l - 1;
- }
-
- /* The extra bit is needed for the sign bit. */
- exp += HIGH_LL_FRAC_BITS + 1;
-
- l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
- | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
-
- return SIGND (dl1) ? -(l >> -exp) : l >> -exp;
-}
-#define __fixtfdi ___fixtfdi
-#endif
-#undef L_fixtfdi
-
-#ifdef L_fixunsdfdi
-#define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
-#define EXCESSD 1022
-#define SIGNBIT 0x80000000
-#define SIGND(fp) ((fp.l.upper) & SIGNBIT)
-#define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
-#define FRACD_LL(fp) (fp.ll & (HIDDEND_LL-1))
-#define HIDDEND_LL ((UDItype_x)1 << 52)
-
-typedef int DItype_x __attribute__ ((mode (DI)));
-typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
-typedef int SItype_x __attribute__ ((mode (SI)));
-typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
-union double_long {
- double d;
- struct {
- SItype_x upper;
- USItype_x lower;
- } l;
- UDItype_x ll;
-};
-
-UDItype_x __fixunsdfdi (double a1);
-
-/* convert double to unsigned int */
-UDItype_x
-__fixunsdfdi (double a1)
-{
- register union double_long dl1;
- register int exp;
- register UDItype_x l;
-
- dl1.d = a1;
-
- /* +/- 0, denormalized, negative */
-
- if (!EXPD (dl1) || SIGND(dl1))
- return 0;
-
- exp = EXPD (dl1) - EXCESSD - 53;
-
- /* number < 1 */
-
- if (exp < -53)
- return 0;
-
- /* NaN */
-
- if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
- return 0x0ULL;
-
- /* Number big number & + inf */
-
- if (exp >= 12) {
- return 0xFFFFFFFFFFFFFFFFULL;
- }
-
- l = MANTD_LL(dl1);
-
- /* shift down until exp < 12 or l = 0 */
- if (exp > 0)
- l <<= exp;
- else
- l >>= -exp;
-
- return l;
-}
-#define __fixunsdfdi ___fixunsdfdi
-#endif
-#undef L_fixunsdfdi
-
-#ifdef L_fixdfdi
-#define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
-#define EXCESSD 1022
-#define SIGNBIT 0x80000000
-#define SIGND(fp) ((fp.l.upper) & SIGNBIT)
-#define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
-#define FRACD_LL(fp) (fp.ll & (HIDDEND_LL-1))
-#define HIDDEND_LL ((UDItype_x)1 << 52)
-
-typedef int DItype_x __attribute__ ((mode (DI)));
-typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
-typedef int SItype_x __attribute__ ((mode (SI)));
-typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
-union double_long {
- double d;
- struct {
- SItype_x upper;
- USItype_x lower;
- } l;
- UDItype_x ll;
-};
-
-DItype_x __fixdfdi (double a1);
-
-/* convert double to int */
-DItype_x
-__fixdfdi (double a1)
-{
- register union double_long dl1;
- register int exp;
- register DItype_x l;
-
- dl1.d = a1;
-
- /* +/- 0, denormalized */
-
- if (!EXPD (dl1))
- return 0;
-
- exp = EXPD (dl1) - EXCESSD - 53;
-
- /* number < 1 */
-
- if (exp < -53)
- return 0;
-
- /* NaN */
-
- if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
- return 0x8000000000000000ULL;
-
- /* Number big number & +/- inf */
-
- if (exp >= 11) {
- l = (long long)1<<63;
- if (!SIGND(dl1))
- l--;
- return l;
- }
-
- l = MANTD_LL(dl1);
-
- /* shift down until exp < 12 or l = 0 */
- if (exp > 0)
- l <<= exp;
- else
- l >>= -exp;
-
- return (SIGND (dl1) ? -l : l);
-}
-#define __fixdfdi ___fixdfdi
-#endif
-#undef L_fixdfdi
-
-#ifdef L_fixunssfdi
-#define EXP(fp) (((fp.l) >> 23) & 0xFF)
-#define EXCESS 126
-#define SIGNBIT 0x80000000
-#define SIGN(fp) ((fp.l) & SIGNBIT)
-#define HIDDEN (1 << 23)
-#define MANT(fp) (((fp.l) & 0x7FFFFF) | HIDDEN)
-#define FRAC(fp) ((fp.l) & 0x7FFFFF)
-
-typedef int DItype_x __attribute__ ((mode (DI)));
-typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
-typedef int SItype_x __attribute__ ((mode (SI)));
-typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
-union float_long
- {
- float f;
- USItype_x l;
- };
-
-UDItype_x __fixunssfdi (float a1);
-
-/* convert float to unsigned int */
-UDItype_x
-__fixunssfdi (float a1)
-{
- register union float_long fl1;
- register int exp;
- register UDItype_x l;
-
- fl1.f = a1;
-
- /* +/- 0, denormalized, negative */
-
- if (!EXP (fl1) || SIGN(fl1))
- return 0;
-
- exp = EXP (fl1) - EXCESS - 24;
-
- /* number < 1 */
-
- if (exp < -24)
- return 0;
-
- /* NaN */
-
- if ((EXP(fl1) == 0xff) && (FRAC(fl1) != 0)) /* NaN */
- return 0x0ULL;
-
- /* Number big number & + inf */
-
- if (exp >= 41) {
- return 0xFFFFFFFFFFFFFFFFULL;
- }
-
- l = MANT(fl1);
-
- if (exp > 0)
- l <<= exp;
- else
- l >>= -exp;
-
- return l;
-}
-#define __fixunssfdi ___fixunssfdi
-#endif
-#undef L_fixunssfdi
-
-#ifdef L_fixsfdi
-#define EXP(fp) (((fp.l) >> 23) & 0xFF)
-#define EXCESS 126
-#define SIGNBIT 0x80000000
-#define SIGN(fp) ((fp.l) & SIGNBIT)
-#define HIDDEN (1 << 23)
-#define MANT(fp) (((fp.l) & 0x7FFFFF) | HIDDEN)
-#define FRAC(fp) ((fp.l) & 0x7FFFFF)
-
-typedef int DItype_x __attribute__ ((mode (DI)));
-typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
-typedef int SItype_x __attribute__ ((mode (SI)));
-typedef unsigned int USItype_x __attribute__ ((mode (SI)));
-
-union float_long
- {
- float f;
- USItype_x l;
- };
-
-DItype_x __fixsfdi (float a1);
-
-/* convert double to int */
-DItype_x
-__fixsfdi (float a1)
-{
- register union float_long fl1;
- register int exp;
- register DItype_x l;
-
- fl1.f = a1;
-
- /* +/- 0, denormalized */
-
- if (!EXP (fl1))
- return 0;
-
- exp = EXP (fl1) - EXCESS - 24;
-
- /* number < 1 */
-
- if (exp < -24)
- return 0;
-
- /* NaN */
-
- if ((EXP(fl1) == 0xff) && (FRAC(fl1) != 0)) /* NaN */
- return 0x8000000000000000ULL;
-
- /* Number big number & +/- inf */
-
- if (exp >= 40) {
- l = (long long)1<<63;
- if (!SIGN(fl1))
- l--;
- return l;
- }
-
- l = MANT(fl1);
-
- if (exp > 0)
- l <<= exp;
- else
- l >>= -exp;
-
- return (SIGN (fl1) ? -l : l);
-}
-#define __fixsfdi ___fixsfdi
-#endif
-#undef L_fixsfdi