* abi64.h (LONG_MAX_SPEC): Check MIPS_ABI_DEFAULT and TARGET_DEFAULT,
and define __LONG_MAX__ appropriately. Add support for -mabi=X,
-mlong64, and -mgp{32,64} options.
* mips.c (mips_abi): Change type to int.
* mips.h (enum mips_abi_type): Delete.
(ABI_32, ABI_N32, ABI_64, ABI_EABI): Define as constants.
(mips_abi): Change type to int.
From-SVN: r17229
+Wed Dec 24 23:12:14 1997 Jim Wilson <wilson@cygnus.com>
+
+ * abi64.h (LONG_MAX_SPEC): Check MIPS_ABI_DEFAULT and TARGET_DEFAULT,
+ and define __LONG_MAX__ appropriately. Add support for -mabi=X,
+ -mlong64, and -mgp{32,64} options.
+ * mips.c (mips_abi): Change type to int.
+ * mips.h (enum mips_abi_type): Delete.
+ (ABI_32, ABI_N32, ABI_64, ABI_EABI): Define as constants.
+ (mips_abi): Change type to int.
+
Wed Dec 24 22:38:34 1997 John Carr <jfc@mit.edu>
* flags.h, toplev.c, calls.c, alias.c: Remove flag_alias_check;
Wed Dec 24 22:38:34 1997 John Carr <jfc@mit.edu>
* flags.h, toplev.c, calls.c, alias.c: Remove flag_alias_check;
(mips_abi == ABI_EABI && (NAMED) \
&& FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED))
(mips_abi == ABI_EABI && (NAMED) \
&& FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED))
+/* Define LONG_MAX correctly for all users. We need to handle 32 bit EABI,
+ 64 bit EABI, N32, and N64 as possible defaults. The checks performed here
+ are the same as the checks in override_options in mips.c that determines
+ whether MASK_LONG64 will be set.
+
+ This does not handle inappropriate options or ununusal option
+ combinations. */
+
-#define LONG_MAX_SPEC "%{!mno-long64:-D__LONG_MAX__=9223372036854775807LL}"
+#if ((MIPS_ABI_DEFAULT == ABI_64) || ((MIPS_ABI_DEFAULT == ABI_EABI) && ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_64BIT)))
+#define LONG_MAX_SPEC \
+ "%{!mabi=n32:%{!mno-long64:%{!mgp32:-D__LONG_MAX__=9223372036854775807L}}}"
+#else
+#define LONG_MAX_SPEC \
+ "%{mabi=64:-D__LONG_MAX__=9223372036854775807L} \
+ %{mlong64:-D__LONG_MAX__=9223372036854775807L} \
+ %{mgp64:-D__LONG_MAX__=9223372036854775807L}"
+#endif
/* ??? Unimplemented stuff follows. */
/* ??? Unimplemented stuff follows. */
int mips_isa;
#ifdef MIPS_ABI_DEFAULT
int mips_isa;
#ifdef MIPS_ABI_DEFAULT
-/* which ABI to use. This is defined to a constant in mips.h if the target
+/* Which ABI to use. This is defined to a constant in mips.h if the target
doesn't support multiple ABIs. */
doesn't support multiple ABIs. */
-enum mips_abi_type mips_abi;
#endif
/* Strings to hold which cpu and instruction set architecture to use. */
#endif
/* Strings to hold which cpu and instruction set architecture to use. */
/* Recast the cpu class to be the cpu attribute. */
#define mips_cpu_attr ((enum attr_cpu)mips_cpu)
/* Recast the cpu class to be the cpu attribute. */
#define mips_cpu_attr ((enum attr_cpu)mips_cpu)
-/* Which ABI to use. This is only used by the Irix 6 port currently. */
+/* Which ABI to use. These are constants because abi64.h must check their
+ value at preprocessing time. */
-enum mips_abi_type {
- ABI_32,
- ABI_N32,
- ABI_64,
- ABI_EABI
-};
+#define ABI_32 0
+#define ABI_N32 1
+#define ABI_64 2
+#define ABI_EABI 3
#ifndef MIPS_ABI_DEFAULT
/* We define this away so that there is no extra runtime cost if the target
doesn't support multiple ABIs. */
#define mips_abi ABI_32
#else
#ifndef MIPS_ABI_DEFAULT
/* We define this away so that there is no extra runtime cost if the target
doesn't support multiple ABIs. */
#define mips_abi ABI_32
#else
-extern enum mips_abi_type mips_abi;
#endif
/* Whether to emit abicalls code sequences or not. */
#endif
/* Whether to emit abicalls code sequences or not. */