This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Allow LONG_DOUBLE_TYPE_SIZE not to be compile-time constant
- To: gcc-patches at gcc dot gnu dot org
- Subject: [PATCH] Allow LONG_DOUBLE_TYPE_SIZE not to be compile-time constant
- From: Jakub Jelinek <jakub at redhat dot com>
- Date: Tue, 25 Jan 2000 17:21:04 +0100
Hi!
Sparc BI_ARCH compiler will miscompile 32bit code using long double on
linux, because it will use TFmode while Linux so far used DFmode for long
double on sparc32. To fix this, I took the approach similar to what is done
with LONG_TYPE_SIZE: introduce MAX_LONG_DOUBLE_TYPE_SIZE and use that in
preprocessor. i960 seem to have the same need, it was just commented out.
While at it, I have added -mlong-double-{128,64} command line switch on
Linux, so that we can slowly move to TFmode on Linux/sparc32 (it will define
__LONG_DOUBLE_128__ so that glibc headers can act upon it). glibc now does
not provide the _Q_* functions, so the -mlong-double-128 switch will be
useful only with glibc 2.1.90+ which I'll hack up, so that all current
math *l functions (which are aliased to non-*l functions) will stay at
GLIBC_2.0 and new TFmode will come with new symbol versions. The headers
will then redirect *l calls to non-*l calls if __LONG_DOUBLE_128__ is not
defined.
2000-01-25 Jakub Jelinek <jakub@redhat.com>
* real.h (MAX_LONG_DOUBLE_TYPE_SIZE): Define to
LONG_DOUBLE_TYPE_SIZE if not defined.
Use MAX_LONG_DOUBLE_TYPE_SIZE instead of
LONG_DOUBLE_TYPE_SIZE in preprocessor if clauses.
* real.c: Likewise.
* gengenrtl.c: Likewise.
* print-rtl.c: Likewise.
* rtl.c: Likewise.
* config/i960/i960.h (OVERRIDE_OPTIONS): Remove warning.
(LONG_DOUBLE_TYPE_SIZE): Define depending on target_flags.
(MAX_LONG_DOUBLE_TYPE_SIZE): Define.
* config/sparc/sol2-sld-64.h (TARGET_DEFAULT): Set
MASK_LONG_DOUBLE_128.
* config/sparc/sol2.h (TARGET_DEFAULT): Likewise.
* config/sparc/sp64-elf.h (TARGET_DEFAULT): Likewise.
* config/sparc/linux64 (TARGET_DEFAULT): Likewise.
(SUBTARGET_SWITCHES): Define.
(CPP_ARCH32_SPEC): Define __LONG_DOUBLE_128__ if compiling
with -mlong-double-128.
(LONG_DOUBLE_TYPE_SIZE): Define depending on target_flags.
(MAX_LONG_DOUBLE_TYPE_SIZE): Define.
(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Define depending on CPP macros.
(CC1_SPEC): Include -mlong-double-{64,128} as needed.
* config/sparc/linux.h (SUBTARGET_SWITCHES): Define.
(CPP_SUBTARGET_SPEC): Define __LONG_DOUBLE_128__ if compiling
with -mlong-double-128.
(LONG_DOUBLE_TYPE_SIZE): Define depending on target_flags.
(MAX_LONG_DOUBLE_TYPE_SIZE): Define.
(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Define depending on CPP macros.
* config/sparc/sparc.h (MASK_LONG_DOUBLE_128,
TARGET_LONG_DOUBLE_128): Define.
* config/sparc/linux-aout.h (LONG_DOUBLE_TYPE_SIZE): Remove.
* config/sparc/sparc.c (sparc_override_options): Disallow 64bit
long double on TARGET_ARCH64.
--- gcc/config/i960/i960.h.jj Tue Jan 18 22:33:05 2000
+++ gcc/config/i960/i960.h Tue Jan 25 13:58:29 2000
@@ -366,9 +366,6 @@ extern int target_flags;
flag_signed_char = 1; \
target_flags |= TARGET_FLAG_CLEAN_LINKAGE; \
} \
- /* ??? See the LONG_DOUBLE_TYPE_SIZE definition below. */ \
- if (TARGET_LONG_DOUBLE_64) \
- warning ("The -mlong-double-64 option does not work yet.");\
i960_initialize (); \
}
@@ -417,9 +414,7 @@ extern int target_flags;
ROUND_TYPE_ALIGN adjust the alignment for speed. */
#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 96)
-/* ??? This must be a constant, because real.c and real.h test it with #if. */
-#undef LONG_DOUBLE_TYPE_SIZE
-#define LONG_DOUBLE_TYPE_SIZE 96
+#define MAX_LONG_DOUBLE_TYPE_SIZE 96
/* Define this to set long double type size to use in libgcc2.c, which can
not depend on target_flags. */
--- gcc/config/sparc/sol2-sld-64.h.jj Tue Jan 25 11:01:08 2000
+++ gcc/config/sparc/sol2-sld-64.h Tue Jan 25 14:53:42 2000
@@ -24,7 +24,7 @@
#undef TARGET_DEFAULT
#define TARGET_DEFAULT \
(MASK_V9 + MASK_PTR64 + MASK_64BIT /* + MASK_HARD_QUAD */ + \
- MASK_STACK_BIAS + MASK_EPILOGUE + MASK_FPU)
+ MASK_STACK_BIAS + MASK_EPILOGUE + MASK_FPU + MASK_LONG_DOUBLE_128)
#endif
/* The default code model. */
--- gcc/config/sparc/sparc.h.jj Fri Dec 17 16:42:40 1999
+++ gcc/config/sparc/sparc.h Tue Jan 25 14:52:23 2000
@@ -550,6 +550,10 @@ extern int target_flags;
#define MASK_FASTER_STRUCTS 0x4000000
#define TARGET_FASTER_STRUCTS (target_flags & MASK_FASTER_STRUCTS)
+/* Use IEEE quad long double. */
+#define MASK_LONG_DOUBLE_128 0x8000000
+#define TARGET_LONG_DOUBLE_128 (target_flags & MASK_LONG_DOUBLE_128)
+
/* TARGET_HARD_MUL: Use hardware multiply instructions but not %y.
TARGET_HARD_MUL32: Use hardware multiply instructions with rd %y
to get high 32 bits. False in V8+ or V9 because multiply stores
--- gcc/config/sparc/linux-aout.h.jj Tue Dec 14 11:16:11 1999
+++ gcc/config/sparc/linux-aout.h Tue Jan 25 14:54:16 2000
@@ -101,13 +101,6 @@ Boston, MA 02111-1307, USA. */
#undef ASM_SPEC
#define ASM_SPEC \
"%{V} %{v:%{!V:-V}} %{n} %{T} %{Ym,*} %{Wa,*:%*} -s %{fpic:-K PIC} %{fPIC:-K PIC}"
-
-#if 0
-/* Define for support of TFmode long double and REAL_ARITHMETIC.
- Sparc ABI says that long double is 4 words. GNU/Linux does not support
- long double yet. */
-#define LONG_DOUBLE_TYPE_SIZE 128
-#endif
/* No weird SPARC variants on Linux */
#undef TARGET_LIVE_G0
--- gcc/config/sparc/linux.h.jj Tue Dec 14 11:16:11 1999
+++ gcc/config/sparc/linux.h Tue Jan 25 16:05:16 2000
@@ -87,6 +87,11 @@ Boston, MA 02111-1307, USA. */
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (sparc GNU/Linux with ELF)");
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES \
+{"long-double-64", -MASK_LONG_DOUBLE_128, "Use 64 bit long doubles" }, \
+{"long-double-128", MASK_LONG_DOUBLE_128, "Use 128 bit long doubles" },
+
#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"
@@ -107,10 +112,12 @@ Boston, MA 02111-1307, USA. */
#undef CPP_SUBTARGET_SPEC
#ifdef USE_GNULIBC_1
#define CPP_SUBTARGET_SPEC \
-"%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
+"%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} \
+%{mlong-double-128:-D__LONG_DOUBLE_128__}"
#else
#define CPP_SUBTARGET_SPEC \
-"%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+"%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} \
+%{pthread:-D_REENTRANT} %{mlong-double-128:-D__LONG_DOUBLE_128__}"
#endif
#undef LIB_SPEC
@@ -231,11 +238,19 @@ do { \
sprintf (LABEL, "*.L%s%d", PREFIX, NUM)
-#if 0
/* Define for support of TFmode long double and REAL_ARITHMETIC.
- Sparc ABI says that long double is 4 words. GNU/Linux does not support
- long double yet. */
-#define LONG_DOUBLE_TYPE_SIZE 128
+ Sparc ABI says that long double is 4 words. */
+#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
+
+/* Constant which presents upper bound of the above value. */
+#define MAX_LONG_DOUBLE_TYPE_SIZE 128
+
+/* Define this to set long double type size to use in libgcc2.c, which can
+ not depend on target_flags. */
+#ifdef __LONG_DOUBLE_128__
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
+#else
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
#endif
/* No weird SPARC variants on Linux */
--- gcc/config/sparc/sol2.h.jj Tue Dec 14 13:17:56 1999
+++ gcc/config/sparc/sol2.h Tue Jan 25 14:59:06 2000
@@ -213,7 +213,7 @@ Boston, MA 02111-1307, USA. */
/* Solaris allows 64 bit out and global registers in 32 bit mode.
sparc_override_options will disable V8+ if not generating V9 code. */
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_EPILOGUE + MASK_FPU + MASK_V8PLUS)
+#define TARGET_DEFAULT (MASK_EPILOGUE + MASK_FPU + MASK_V8PLUS + MASK_LONG_DOUBLE_128)
#if TARGET_ARCH32
/* Override MACHINE_STATE_{SAVE,RESTORE} because we have special
--- gcc/config/sparc/linux64.h.jj Tue Jan 25 11:51:30 2000
+++ gcc/config/sparc/linux64.h Tue Jan 25 16:24:22 2000
@@ -40,7 +40,7 @@ Boston, MA 02111-1307, USA. */
#undef TARGET_DEFAULT
#define TARGET_DEFAULT \
(MASK_V9 + MASK_PTR64 + MASK_64BIT /* + MASK_HARD_QUAD */ \
- + MASK_STACK_BIAS + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
+ + MASK_STACK_BIAS + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU + MASK_LONG_DOUBLE_128)
#endif
/* Output at beginning of assembler file. */
@@ -78,6 +78,15 @@ Boston, MA 02111-1307, USA. */
#endif
+#ifdef SPARC_BI_ARCH
+
+#undef CPP_ARCH32_SPEC
+#define CPP_ARCH32_SPEC "%{mlong-double-128:-D__LONG_DOUBLE_128__} \
+-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int \
+-D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc)"
+
+#endif
+
/* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
provides part of the support for getting C++ file-scope static
@@ -152,6 +161,11 @@ Boston, MA 02111-1307, USA. */
#undef SPARC_DEFAULT_CMODEL
#define SPARC_DEFAULT_CMODEL CM_MEDLOW
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES \
+{"long-double-64", -MASK_LONG_DOUBLE_128, "Use 64 bit long doubles" }, \
+{"long-double-128", MASK_LONG_DOUBLE_128, "Use 128 bit long doubles" },
+
#undef WCHAR_TYPE
#define WCHAR_TYPE "int"
@@ -160,8 +174,22 @@ Boston, MA 02111-1307, USA. */
#undef MAX_WCHAR_TYPE_SIZE
+/* Define for support of TFmode long double and REAL_ARITHMETIC.
+ Sparc ABI says that long double is 4 words. */
#undef LONG_DOUBLE_TYPE_SIZE
-#define LONG_DOUBLE_TYPE_SIZE 128
+#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
+
+/* Constant which presents upper bound of the above value. */
+#undef MAX_LONG_DOUBLE_TYPE_SIZE
+#define MAX_LONG_DOUBLE_TYPE_SIZE 128
+
+/* Define this to set long double type size to use in libgcc2.c, which can
+ not depend on target_flags. */
+#if defined(__arch64__) || defined(__LONG_DOUBLE_128__)
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
+#else
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
+#endif
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-D__ELF__ -Dunix -D_LONGLONG -D__sparc__ -Dlinux -Asystem(unix) -Asystem(posix)"
@@ -245,7 +273,7 @@ Boston, MA 02111-1307, USA. */
%{mcypress:-mcpu=cypress} \
%{msparclite:-mcpu=sparclite} %{mf930:-mcpu=f930} %{mf934:-mcpu=f934} \
%{mv8:-mcpu=v8} %{msupersparc:-mcpu=supersparc} \
-%{m64:-mptr64 -mstack-bias \
+%{m64:-mptr64 -mstack-bias -mlong-double-128 \
%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:-mcpu=ultrasparc}}}}}}} \
%{!mno-vis:%{!mcpu=v9:-mvis}}} \
"
@@ -255,7 +283,7 @@ Boston, MA 02111-1307, USA. */
%{mcypress:-mcpu=cypress} \
%{msparclite:-mcpu=sparclite} %{mf930:-mcpu=f930} %{mf934:-mcpu=f934} \
%{mv8:-mcpu=v8} %{msupersparc:-mcpu=supersparc} \
-%{m32:-mptr32 -mno-stack-bias \
+%{m32:-mptr32 -mno-stack-bias %{!mlong-double-128:-mlong-double-64} \
%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:-mcpu=cypress}}}}}}}} \
%{!m32:%{!mcpu*:-mcpu=ultrasparc}} \
%{!mno-vis:%{!m32:%{!mcpu=v9:-mvis}}} \
--- gcc/config/sparc/sp64-elf.h.jj Wed Mar 17 19:33:16 1999
+++ gcc/config/sparc/sp64-elf.h Tue Jan 25 14:59:32 2000
@@ -34,7 +34,7 @@ Boston, MA 02111-1307, USA. */
#undef TARGET_DEFAULT
#define TARGET_DEFAULT \
(MASK_V9 + MASK_PTR64 + MASK_64BIT + MASK_HARD_QUAD \
- + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU + MASK_STACK_BIAS)
+ + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU + MASK_STACK_BIAS + MASK_LONG_DOUBLE_128)
#undef SPARC_DEFAULT_CMODEL
#define SPARC_DEFAULT_CMODEL CM_EMBMEDANY
--- gcc/config/sparc/sparc.c.jj Tue Jan 18 22:37:41 2000
+++ gcc/config/sparc/sparc.c Tue Jan 25 15:13:46 2000
@@ -249,6 +249,13 @@ sparc_override_options ()
target_flags &= ~MASK_PTR64;
}
+ /* We force all 64bit archs to use 128 bit long double */
+ if (TARGET_64BIT && ! TARGET_LONG_DOUBLE_128)
+ {
+ error ("-mlong-double-64 not allowed with -m64");
+ target_flags |= MASK_LONG_DOUBLE_128;
+ }
+
/* Code model selection. */
sparc_cmodel = SPARC_DEFAULT_CMODEL;
--- gcc/gengenrtl.c.jj Tue Jan 18 22:32:57 2000
+++ gcc/gengenrtl.c Tue Jan 25 14:29:30 2000
@@ -40,9 +40,9 @@ Boston, MA 02111-1307, USA. */
slots in a CONST_DOUBLE, so we provide them even if one would suffice. */
#ifdef REAL_ARITHMETIC
-#if LONG_DOUBLE_TYPE_SIZE == 96
+#if MAX_LONG_DOUBLE_TYPE_SIZE == 96
#define REAL_WIDTH (11*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
-#elif LONG_DOUBLE_TYPE_SIZE == 128
+#elif MAX_LONG_DOUBLE_TYPE_SIZE == 128
#define REAL_WIDTH (19*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
#elif HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
#define REAL_WIDTH (7*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
@@ -50,11 +50,11 @@ Boston, MA 02111-1307, USA. */
#endif /* REAL_ARITHMETIC */
#ifndef REAL_WIDTH
-#if HOST_BITS_PER_WIDE_INT*2 >= LONG_DOUBLE_TYPE_SIZE
+#if HOST_BITS_PER_WIDE_INT*2 >= MAX_LONG_DOUBLE_TYPE_SIZE
#define REAL_WIDTH 2
-#elif HOST_BITS_PER_WIDE_INT*3 >= LONG_DOUBLE_TYPE_SIZE
+#elif HOST_BITS_PER_WIDE_INT*3 >= MAX_LONG_DOUBLE_TYPE_SIZE
#define REAL_WIDTH 3
-#elif HOST_BITS_PER_WIDE_INT*4 >= LONG_DOUBLE_TYPE_SIZE
+#elif HOST_BITS_PER_WIDE_INT*4 >= MAX_LONG_DOUBLE_TYPE_SIZE
#define REAL_WIDTH 4
#endif
#endif /* REAL_WIDTH */
--- gcc/real.h.jj Tue Jan 18 22:32:59 2000
+++ gcc/real.h Tue Jan 25 14:11:57 2000
@@ -67,7 +67,10 @@ Boston, MA 02111-1307, USA. */
#ifndef LONG_DOUBLE_TYPE_SIZE
#define LONG_DOUBLE_TYPE_SIZE 64
#endif
-#if (LONG_DOUBLE_TYPE_SIZE == 96) || (LONG_DOUBLE_TYPE_SIZE == 128)
+#ifndef MAX_LONG_DOUBLE_TYPE_SIZE
+#define MAX_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
+#endif
+#if (MAX_LONG_DOUBLE_TYPE_SIZE == 96) || (MAX_LONG_DOUBLE_TYPE_SIZE == 128)
#ifndef REAL_ARITHMETIC
#define REAL_ARITHMETIC
#endif
@@ -77,7 +80,7 @@ Boston, MA 02111-1307, USA. */
/* Support 80-bit extended real XFmode if LONG_DOUBLE_TYPE_SIZE
has been defined to be 96 in the tm.h machine file. */
-#if (LONG_DOUBLE_TYPE_SIZE == 96)
+#if (MAX_LONG_DOUBLE_TYPE_SIZE == 96)
#define REAL_IS_NOT_DOUBLE
#define REAL_ARITHMETIC
typedef struct {
@@ -87,7 +90,7 @@ typedef struct {
#else /* no XFmode support */
-#if (LONG_DOUBLE_TYPE_SIZE == 128)
+#if (MAX_LONG_DOUBLE_TYPE_SIZE == 128)
#define REAL_IS_NOT_DOUBLE
#define REAL_ARITHMETIC
@@ -198,7 +201,7 @@ extern REAL_VALUE_TYPE real_value_trunca
ereal_from_uint (&d, lo, hi, mode)
/* IN is a REAL_VALUE_TYPE. OUT is an array of longs. */
-#if LONG_DOUBLE_TYPE_SIZE == 96
+#if MAX_LONG_DOUBLE_TYPE_SIZE == 96
#define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) (etarldouble ((IN), (OUT)))
#else
#define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) (etartdouble ((IN), (OUT)))
--- gcc/real.c.jj Tue Jan 18 22:32:59 2000
+++ gcc/real.c Tue Jan 25 14:22:03 2000
@@ -243,7 +243,7 @@ unknown arithmetic type
A REAL_VALUE_TYPE is guaranteed to occupy contiguous locations
in memory, with no holes. */
-#if LONG_DOUBLE_TYPE_SIZE == 96
+#if MAX_LONG_DOUBLE_TYPE_SIZE == 96
/* Number of 16 bit words in external e type format */
#define NE 6
#define MAXDECEXP 4932
@@ -256,7 +256,7 @@ do { \
bcopy ((char *) e, (char *) r, 2*NE); \
} while (0)
#else /* no XFmode */
-#if LONG_DOUBLE_TYPE_SIZE == 128
+#if MAX_LONG_DOUBLE_TYPE_SIZE == 128
#define NE 10
#define MAXDECEXP 4932
#define MINDECEXP -4977
@@ -1474,7 +1474,7 @@ ereal_isneg (x)
/* e type constants used by high precision check routines */
-#if LONG_DOUBLE_TYPE_SIZE == 128
+#if MAX_LONG_DOUBLE_TYPE_SIZE == 128
/* 0.0 */
unsigned EMUSHORT ezero[NE] =
{0x0000, 0x0000, 0x0000, 0x0000,
@@ -3628,7 +3628,7 @@ toe64 (a, b)
else
{
q = b + 4; /* point to output exponent */
-#if LONG_DOUBLE_TYPE_SIZE == 96
+#if MAX_LONG_DOUBLE_TYPE_SIZE == 96
/* Clear the last two bytes of 12-byte Intel format */
*(q+1) = 0;
#endif
@@ -4528,7 +4528,7 @@ enormlz (x)
#define NTEN 12
#define MAXP 4096
-#if LONG_DOUBLE_TYPE_SIZE == 128
+#if MAX_LONG_DOUBLE_TYPE_SIZE == 128
static unsigned EMUSHORT etens[NTEN + 1][NE] =
{
{0x6576, 0x4a92, 0x804a, 0x153f,
--- gcc/print-rtl.c.jj Tue Jan 18 22:32:59 2000
+++ gcc/print-rtl.c Tue Jan 25 14:26:03 2000
@@ -351,7 +351,7 @@ print_rtx (in_rtx)
if (GET_CODE (in_rtx) == MEM)
fprintf (outfile, " %d", MEM_ALIAS_SET (in_rtx));
-#if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && LONG_DOUBLE_TYPE_SIZE == 64
+#if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && MAX_LONG_DOUBLE_TYPE_SIZE == 64
if (GET_CODE (in_rtx) == CONST_DOUBLE && FLOAT_MODE_P (GET_MODE (in_rtx)))
{
double val;
--- gcc/rtl.c.jj Tue Jan 18 22:33:00 2000
+++ gcc/rtl.c Tue Jan 25 14:27:05 2000
@@ -52,9 +52,9 @@ extern struct obstack *rtl_obstack;
slots in a CONST_DOUBLE, so we provide them even if one would suffice. */
#ifdef REAL_ARITHMETIC
-#if LONG_DOUBLE_TYPE_SIZE == 96
+#if MAX_LONG_DOUBLE_TYPE_SIZE == 96
#define REAL_WIDTH (11*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
-#elif LONG_DOUBLE_TYPE_SIZE == 128
+#elif MAX_LONG_DOUBLE_TYPE_SIZE == 128
#define REAL_WIDTH (19*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
#elif HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
#define REAL_WIDTH (7*8 + HOST_BITS_PER_WIDE_INT)/HOST_BITS_PER_WIDE_INT
@@ -62,11 +62,11 @@ extern struct obstack *rtl_obstack;
#endif /* REAL_ARITHMETIC */
#ifndef REAL_WIDTH
-#if HOST_BITS_PER_WIDE_INT*2 >= LONG_DOUBLE_TYPE_SIZE
+#if HOST_BITS_PER_WIDE_INT*2 >= MAX_LONG_DOUBLE_TYPE_SIZE
#define REAL_WIDTH 2
-#elif HOST_BITS_PER_WIDE_INT*3 >= LONG_DOUBLE_TYPE_SIZE
+#elif HOST_BITS_PER_WIDE_INT*3 >= MAX_LONG_DOUBLE_TYPE_SIZE
#define REAL_WIDTH 3
-#elif HOST_BITS_PER_WIDE_INT*4 >= LONG_DOUBLE_TYPE_SIZE
+#elif HOST_BITS_PER_WIDE_INT*4 >= MAX_LONG_DOUBLE_TYPE_SIZE
#define REAL_WIDTH 4
#endif
#endif /* REAL_WIDTH */
Cheers,
Jakub
___________________________________________________________________
Jakub Jelinek | jakub@redhat.com | http://sunsite.mff.cuni.cz/~jj
Linux version 2.3.41 on a sparc64 machine (1343.49 BogoMips)
___________________________________________________________________