[multiple changes]

1999-01-19  Vladimir N. Makarov  <vmakarov@cygnus.com>
	* invoke.texi (-mlong-double-64): New option description.
1999-01-19  Jim Wilson  <wilson@cygnus.com>
	* libgcc2.c: Change all uses of LONG_DOUBLE_TYPE_SIZE to
	LIBGCC2_LONG_DOUBLE_TYPE_SIZE.
	(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): New.  Set to LONG_DOUBLE_TYPE_SIZE
	if not defined.
	* i960/i960.h (MULTILIB_DEFAULTS): Define to mnumerics.
	(CPP_SPECS): Add -mlong-double-64 support.
	(TARGET_FLAG_LONG_DOUBLE_64, TARGET_LONG_DOUBLE_64): New.
	(TARGET_SWITCHES): Add -mlong-double-64 support.
	(LONG_DOUBLE_TYPE_SIZE): Likewise.
	(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Define.
	* i960/vx960-coff.h (MULTILIB_DEFAULTS): Define to msoft-float.
	(CPP_SPECS): Add -mlong-double-64 support.
	* i960/t-960bare (MULTILIB_OPTIONS): Add mlong-double-64.
	(MULTILIB_DIRNAMES): Add ld64.
	* i960/t-vxworks960 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Likewise.

From-SVN: r24764
This commit is contained in:
Vladimir Makarov 1999-01-19 12:03:01 +00:00
parent 60409070a6
commit eaa4b44cfc
7 changed files with 75 additions and 19 deletions

View File

@ -1,3 +1,25 @@
1999-01-19 Vladimir N. Makarov <vmakarov@cygnus.com>
* invoke.texi (-mlong-double-64): New option description.
1999-01-19 Jim Wilson <wilson@cygnus.com>
* libgcc2.c: Change all uses of LONG_DOUBLE_TYPE_SIZE to
LIBGCC2_LONG_DOUBLE_TYPE_SIZE.
(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): New. Set to LONG_DOUBLE_TYPE_SIZE
if not defined.
* i960/i960.h (MULTILIB_DEFAULTS): Define to mnumerics.
(CPP_SPECS): Add -mlong-double-64 support.
(TARGET_FLAG_LONG_DOUBLE_64, TARGET_LONG_DOUBLE_64): New.
(TARGET_SWITCHES): Add -mlong-double-64 support.
(LONG_DOUBLE_TYPE_SIZE): Likewise.
(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Define.
* i960/vx960-coff.h (MULTILIB_DEFAULTS): Define to msoft-float.
(CPP_SPECS): Add -mlong-double-64 support.
* i960/t-960bare (MULTILIB_OPTIONS): Add mlong-double-64.
(MULTILIB_DIRNAMES): Add ld64.
* i960/t-vxworks960 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Likewise.
Tue Jan 19 11:54:04 1999 Jason Merrill <jason@yorick.cygnus.com>
* calls.c (expand_call): Strip a TARGET_EXPR if we're passing by

View File

@ -24,6 +24,8 @@ Boston, MA 02111-1307, USA. */
/* Note that some other tm.h files may include this one and then override
many of the definitions that relate to assembler syntax. */
#define MULTILIB_DEFAULTS { "mnumerics" }
/* Names to predefine in the preprocessor for this target machine. */
#define CPP_PREDEFINES "-Di960 -Di80960 -DI960 -DI80960 -Acpu(i960) -Amachine(i960)"
@ -45,7 +47,8 @@ Boston, MA 02111-1307, USA. */
%{mcc:-D__i960CC__ -D__i960_CC__}\
%{mcf:-D__i960CF__ -D__i960_CF__}\
%{!mka:%{!mkb:%{!msa:%{!msb:%{!mmc:%{!mca:\
%{!mcc:%{!mcf:-D__i960_KB -D__i960KB__ %{mic*:-D__i960KB}}}}}}}}}"
%{!mcc:%{!mcf:-D__i960_KB -D__i960KB__ %{mic*:-D__i960KB}}}}}}}}}\
%{mlong-double-64:-D__LONG_DOUBLE_64__}"
/* -mic* options make characters signed by default. */
/* Use #if rather than ?: because MIPS C compiler rejects ?: in
@ -209,6 +212,11 @@ extern int process_pragma ();
#define TARGET_FLAG_OLD_ALIGN 0x8000
#define TARGET_OLD_ALIGN (target_flags & TARGET_FLAG_OLD_ALIGN)
/* Nonzero if long doubles are to be 64 bits. Useful for soft-float targets
if 80 bit long double support is missing. */
#define TARGET_FLAG_LONG_DOUBLE_64 0x10000
#define TARGET_LONG_DOUBLE_64 (target_flags & TARGET_FLAG_LONG_DOUBLE_64)
extern int target_flags;
/* Macro to define tables used to set the flags.
@ -268,6 +276,7 @@ extern int target_flags;
{"no-strict-align", -(TARGET_FLAG_STRICT_ALIGN)}, \
{"old-align", (TARGET_FLAG_OLD_ALIGN|TARGET_FLAG_STRICT_ALIGN)}, \
{"no-old-align", -(TARGET_FLAG_OLD_ALIGN|TARGET_FLAG_STRICT_ALIGN)}, \
{"long-double-64", TARGET_FLAG_LONG_DOUBLE_64}, \
{"link-relax", 0}, \
{"no-link-relax", 0}, \
SUBTARGET_SWITCHES \
@ -356,8 +365,17 @@ extern int target_flags;
/* Width in bits of a pointer. See also the macro `Pmode' defined below. */
#define POINTER_SIZE 32
/* Width in bits of a long double. Identical to double for now. */
#define LONG_DOUBLE_TYPE_SIZE 64
/* Width in bits of a long double. Define to 96, and let
ROUND_TYPE_ALIGN adjust the alignment for speed. */
#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 96)
/* Define this to set long double type size to use in libgcc2.c, which can
not depend on target_flags. */
#if defined(__LONG_DOUBLE_64__)
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
#else
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 96
#endif
/* Allocation boundary (in *bits*) for storing pointers in memory. */
#define POINTER_BOUNDARY 32

View File

@ -16,8 +16,8 @@ xp-bit.c: $(srcdir)/config/fp-bit.c
echo '#define EXTENDED_FLOAT_STUBS' > xp-bit.c
cat $(srcdir)/config/fp-bit.c >> xp-bit.c
MULTILIB_OPTIONS=mnumerics/msoft-float
MULTILIB_DIRNAMES=float soft-float
MULTILIB_OPTIONS=mnumerics/msoft-float mlong-double-64
MULTILIB_DIRNAMES=float soft-float ld64
MULTILIB_MATCHES=mnumerics=msb mnumerics=msc mnumerics=mkb mnumerics=mkc mnumerics=mmc mnumerics=mcb mnumerics=mcc mnumerics=mjf msoft-float=msa msoft-float=mka msoft-float=mca msoft-float=mcf
LIBGCC = stmp-multilib

View File

@ -19,8 +19,8 @@ xp-bit.c: $(srcdir)/config/fp-bit.c
echo '#define EXTENDED_FLOAT_STUBS' > xp-bit.c
cat $(srcdir)/config/fp-bit.c >> xp-bit.c
MULTILIB_OPTIONS=mnumerics/msoft-float
MULTILIB_DIRNAMES=float soft-float
MULTILIB_OPTIONS=mnumerics/msoft-float mlong-double-64
MULTILIB_DIRNAMES=float soft-float ld64
MULTILIB_MATCHES=mnumerics=msb mnumerics=msc mnumerics=mkb mnumerics=mkc mnumerics=mmc mnumerics=mcb mnumerics=mcc msoft-float=msa msoft-float=mka msoft-float=mca msoft-float=mcf
LIBGCC = stmp-multilib

View File

@ -21,6 +21,8 @@ Boston, MA 02111-1307, USA. */
/* This file just exists to give specs for the 960 running on VxWorks.
VxWorks does all the library stuff itself. */
#define MULTILIB_DEFAULTS { "msoft-float" }
#undef LIB_SPEC
#define LIB_SPEC ""
@ -57,7 +59,8 @@ Boston, MA 02111-1307, USA. */
%{mcf:-D__i960CF__ -D__i960_CF__}\
%{!mka:%{!mkb:%{!msa:%{!msb:%{!mmc:%{!mca:\
%{!mcc:%{!mcf:-D__i960_CA -D__i960CA__ -DCPU=I960CA\
%{mic*:-D__i960CA}}}}}}}}}"
%{mic*:-D__i960CA}}}}}}}}}\
%{mlong-double-64:-D__LONG_DOUBLE_64__}"
/* Default to -mca. */

View File

@ -5255,6 +5255,15 @@ Do not permit (do permit) unaligned accesses.
@item -mold-align
Enable structure-alignment compatibility with Intel's gcc release version
1.3 (based on gcc 1.37). This option implies @samp{-mstrict-align}.
@item -mlong-double-64
Implement type @samp{long double} as 64-bit floating point numbers.
Without the option @samp{long double} is implemented by 80-bit
floating point numbers. The only reason we have it because there is
no 128-bit @samp{long double} support in @samp{fp-bit.c} yet. So it
is only useful for people using soft-float targets. Otherwise, we
should recommend against use of it.
@end table
@node DEC Alpha Options

View File

@ -72,6 +72,10 @@ Boston, MA 02111-1307, USA. */
#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
#endif
#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
#endif
/* In the first part of this file, we are interfacing to calls generated
by the compiler itself. These calls pass values into these routines
which have very specific modes (rather than very specific types), and
@ -90,10 +94,10 @@ typedef unsigned int UDItype __attribute__ ((mode (DI)));
typedef float SFtype __attribute__ ((mode (SF)));
typedef float DFtype __attribute__ ((mode (DF)));
#if LONG_DOUBLE_TYPE_SIZE == 96
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96
typedef float XFtype __attribute__ ((mode (XF)));
#endif
#if LONG_DOUBLE_TYPE_SIZE == 128
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128
typedef float TFtype __attribute__ ((mode (TF)));
#endif
@ -144,10 +148,10 @@ typedef union
extern DItype __fixunssfdi (SFtype a);
extern DItype __fixunsdfdi (DFtype a);
#if LONG_DOUBLE_TYPE_SIZE == 96
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96
extern DItype __fixunsxfdi (XFtype a);
#endif
#if LONG_DOUBLE_TYPE_SIZE == 128
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128
extern DItype __fixunstfdi (TFtype a);
#endif
@ -768,7 +772,7 @@ __ucmpdi2 (DItype a, DItype b)
}
#endif
#if defined(L_fixunstfdi) && (LONG_DOUBLE_TYPE_SIZE == 128)
#if defined(L_fixunstfdi) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT)
#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE)
@ -800,7 +804,7 @@ __fixunstfdi (TFtype a)
}
#endif
#if defined(L_fixtfdi) && (LONG_DOUBLE_TYPE_SIZE == 128)
#if defined(L_fixtfdi) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
DItype
__fixtfdi (TFtype a)
{
@ -810,7 +814,7 @@ __fixtfdi (TFtype a)
}
#endif
#if defined(L_fixunsxfdi) && (LONG_DOUBLE_TYPE_SIZE == 96)
#if defined(L_fixunsxfdi) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96)
#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT)
#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE)
@ -842,7 +846,7 @@ __fixunsxfdi (XFtype a)
}
#endif
#if defined(L_fixxfdi) && (LONG_DOUBLE_TYPE_SIZE == 96)
#if defined(L_fixxfdi) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96)
DItype
__fixxfdi (XFtype a)
{
@ -940,7 +944,7 @@ __fixsfdi (SFtype a)
}
#endif
#if defined(L_floatdixf) && (LONG_DOUBLE_TYPE_SIZE == 96)
#if defined(L_floatdixf) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96)
#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT)
#define HIGH_HALFWORD_COEFF (((UDItype) 1) << (WORD_SIZE / 2))
#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE)
@ -959,7 +963,7 @@ __floatdixf (DItype u)
}
#endif
#if defined(L_floatditf) && (LONG_DOUBLE_TYPE_SIZE == 128)
#if defined(L_floatditf) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT)
#define HIGH_HALFWORD_COEFF (((UDItype) 1) << (WORD_SIZE / 2))
#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE)
@ -1065,7 +1069,7 @@ __floatdisf (DItype u)
}
#endif
#if defined(L_fixunsxfsi) && LONG_DOUBLE_TYPE_SIZE == 96
#if defined(L_fixunsxfsi) && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96
/* Reenable the normal types, in case limits.h needs them. */
#undef char
#undef short