From 316f5878b98e1adb7ddf6d18c3d3283afebd23a6 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 25 Jul 2002 09:48:07 +0000 Subject: [PATCH] [gas/] * doc/c-mips.texi: Remove -mcpu. Document -mabi. * configure.in (MIPS_CPU_STRING_DEFAULT): New configuration macro. (USE_E_MIPS_ABI_O32, MIPS_DEFAULT_64BIT): New configuration macros. * configure, config.in: Regenerate. * config/tc-mips.c (file_mips_abi): Rename to mips_abi. (mips_set_options): Remove "abi" field. (mips_opts): Update accordingly. Replace all uses of mips_opts.abi with mips_abi. (mips_cpu): Remove. (mips_arch_string, mips_arch_info): New vars. (mips_tune_string, mips_tune_info): New vars. (ABI_NEEDS_32BIT_REGS, ABI_NEEDS_64BIT_REGS): New macros. (HAVE_32BIT_GPRS, HAVE_32BIT_FPRS): Don't check the ABI. (mips_isa_to_str, mips_cpu_to_str): Remove. (mips_ip): If the selected architecture is a generic ISA rather than a processor, only mention the ISA level in error messages. (OPTION_MCPU): Remove. (OPTION_FP64): New. (md_longopts): Add -mfp64, remove -mcpu. (mips_set_option_string): New fn. (md_parse_option): Make -mipsN update file_mips_isa rather than mips_opts.isa. Use mips_set_option_string to set -march or -mtune. Don't let -mgp32 and -mfp32 change the ABI. (show): Move to end of file. Constify string argument. (md_show_usage): Move to the end of the file. Read available architectures from mips_cpu_info_table. (mips_set_architecture): New fn. (mips_after_parse_args): Rework. Remove -mcpu handling. -mipsN is an alias for -march=mipsN. Don't change the ABI based on other flags. Infer the register size from the ABI as well as the architecture. Complain about more conflicting arguments. Unify logic with GCC. (s_mipsset): Don't change the ABI. (mips_elf_final_processing): Check USE_E_MIPS_ABI_O32. (mips_cpu_info_table): Remove Generic-MIPS* entries, keeping just "mipsN"-type entries. Remove entries that vary only in the manufacturer's prefix, or that have "000" replaced by "k". Remove TARGET_CPU entries. Make r2000 entry use CPU_R3000. (mips_strict_matching_cpu_name_p, mips_matching_cpu_name_p): New fns. (mips_parse_cpu): New fn. (mips_cpu_info_from_name, mips_cpu_info_from_cpu): Remove. (mips_cpu_info_from_isa): Minor formatting tweak. [gas/testsuite] * gas/mips/mips-gp32-fp64.d, * gas/mips/mips-gp32-fp64-pic.d: Add -mfp64. --- gas/ChangeLog | 45 ++ gas/config.in | 12 +- gas/config/tc-mips.c | 1053 +++++++++++---------------- gas/configure | 418 ++++++----- gas/configure.in | 55 ++ gas/doc/c-mips.texi | 9 +- gas/testsuite/ChangeLog | 5 + gas/testsuite/gas/mips/mips-gp32-fp64-pic.d | 2 +- gas/testsuite/gas/mips/mips-gp32-fp64.d | 2 +- 9 files changed, 787 insertions(+), 814 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index ce82d92..3562760 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,48 @@ +2002-07-25 Richard Sandiford + + * doc/c-mips.texi: Remove -mcpu. Document -mabi. + * configure.in (MIPS_CPU_STRING_DEFAULT): New configuration macro. + (USE_E_MIPS_ABI_O32, MIPS_DEFAULT_64BIT): New configuration macros. + * configure, config.in: Regenerate. + * config/tc-mips.c (file_mips_abi): Rename to mips_abi. + (mips_set_options): Remove "abi" field. + (mips_opts): Update accordingly. Replace all uses of mips_opts.abi + with mips_abi. + (mips_cpu): Remove. + (mips_arch_string, mips_arch_info): New vars. + (mips_tune_string, mips_tune_info): New vars. + (ABI_NEEDS_32BIT_REGS, ABI_NEEDS_64BIT_REGS): New macros. + (HAVE_32BIT_GPRS, HAVE_32BIT_FPRS): Don't check the ABI. + (mips_isa_to_str, mips_cpu_to_str): Remove. + (mips_ip): If the selected architecture is a generic ISA rather + than a processor, only mention the ISA level in error messages. + (OPTION_MCPU): Remove. + (OPTION_FP64): New. + (md_longopts): Add -mfp64, remove -mcpu. + (mips_set_option_string): New fn. + (md_parse_option): Make -mipsN update file_mips_isa rather than + mips_opts.isa. Use mips_set_option_string to set -march or -mtune. + Don't let -mgp32 and -mfp32 change the ABI. + (show): Move to end of file. Constify string argument. + (md_show_usage): Move to the end of the file. Read available + architectures from mips_cpu_info_table. + (mips_set_architecture): New fn. + (mips_after_parse_args): Rework. Remove -mcpu handling. -mipsN + is an alias for -march=mipsN. Don't change the ABI based on other + flags. Infer the register size from the ABI as well as the + architecture. Complain about more conflicting arguments. + Unify logic with GCC. + (s_mipsset): Don't change the ABI. + (mips_elf_final_processing): Check USE_E_MIPS_ABI_O32. + (mips_cpu_info_table): Remove Generic-MIPS* entries, keeping just + "mipsN"-type entries. Remove entries that vary only in the + manufacturer's prefix, or that have "000" replaced by "k". + Remove TARGET_CPU entries. Make r2000 entry use CPU_R3000. + (mips_strict_matching_cpu_name_p, mips_matching_cpu_name_p): New fns. + (mips_parse_cpu): New fn. + (mips_cpu_info_from_name, mips_cpu_info_from_cpu): Remove. + (mips_cpu_info_from_isa): Minor formatting tweak. + 2002-07-24 Nick Clifton * po/sv.po: Updated Swedish translation. diff --git a/gas/config.in b/gas/config.in index 22c0db6..b2226f9 100644 --- a/gas/config.in +++ b/gas/config.in @@ -130,9 +130,6 @@ /* Define if you have the header file. */ #undef HAVE_SYS_PARAM_H -/* Define if you have the header file. */ -#undef HAVE_SYS_STAT_H - /* Define if you have the header file. */ #undef HAVE_SYS_TYPES_H @@ -163,6 +160,15 @@ /* Define as 1 if big endian. */ #undef TARGET_BYTES_BIG_ENDIAN +/* Default CPU for MIPS targets. */ +#undef MIPS_CPU_STRING_DEFAULT + +/* Allow use of E_MIPS_ABI_O32 on MIPS targets. */ +#undef USE_E_MIPS_ABI_O32 + +/* Generate 64-bit code by default on MIPS targets. */ +#undef MIPS_DEFAULT_64BIT + /* Default architecture. */ #undef DEFAULT_ARCH diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 2ed32d9..2ab8bbe9 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -129,7 +129,7 @@ enum mips_abi_level }; /* MIPS ABI we are using for this output file. */ -static enum mips_abi_level file_mips_abi = NO_ABI; +static enum mips_abi_level mips_abi = NO_ABI; /* This is the set of options which may be modified by the .set pseudo-op. We use a struct so that .set push and .set pop are more @@ -177,9 +177,6 @@ struct mips_set_options is passed but can changed if the assembler code uses .set mipsN. */ int gp32; int fp32; - /* The ABI currently in use. This is changed by .set mipsN to loosen - restrictions and doesn't affect the whole file. */ - enum mips_abi_level abi; }; /* True if -mgp32 was passed. */ @@ -194,7 +191,7 @@ static int file_mips_fp32 = -1; static struct mips_set_options mips_opts = { - ISA_UNKNOWN, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, NO_ABI + ISA_UNKNOWN, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0 }; /* These variables are filled in with the masks of registers used. @@ -218,18 +215,18 @@ static int file_ase_mips3d; command line (e.g., by -march). */ static int file_ase_mdmx; -/* The argument of the -mcpu= flag. Historical for code generation. */ -static int mips_cpu = CPU_UNKNOWN; - /* The argument of the -march= flag. The architecture we are assembling. */ static int mips_arch = CPU_UNKNOWN; +static const char *mips_arch_string; +static const struct mips_cpu_info *mips_arch_info; /* The argument of the -mtune= flag. The architecture for which we are optimizing. */ static int mips_tune = CPU_UNKNOWN; +static const char *mips_tune_string; +static const struct mips_cpu_info *mips_tune_info; -/* If they asked for mips1 or mips2 and a cpu that is - mips3 or greater, then mark the object file 32BITMODE. */ +/* True when generating 32-bit code for a 64-bit processor. */ static int mips_32bitmode = 0; /* Some ISA's have delay slots for instructions which read or write @@ -246,6 +243,15 @@ static int mips_32bitmode = 0; || (ISA) == ISA_MIPS3 \ ) +/* True if the given ABI requires 32-bit registers. */ +#define ABI_NEEDS_32BIT_REGS(ABI) ((ABI) == O32_ABI) + +/* Likewise 64-bit registers. */ +#define ABI_NEEDS_64BIT_REGS(ABI) \ + ((ABI) == N32_ABI \ + || (ABI) == N64_ABI \ + || (ABI) == O64_ABI) + /* Return true if ISA supports 64 bit gp register instructions. */ #define ISA_HAS_64BIT_REGS(ISA) ( \ (ISA) == ISA_MIPS3 \ @@ -255,21 +261,17 @@ static int mips_32bitmode = 0; ) #define HAVE_32BIT_GPRS \ - (mips_opts.gp32 \ - || mips_opts.abi == O32_ABI \ - || ! ISA_HAS_64BIT_REGS (mips_opts.isa)) + (mips_opts.gp32 || ! ISA_HAS_64BIT_REGS (mips_opts.isa)) #define HAVE_32BIT_FPRS \ - (mips_opts.fp32 \ - || mips_opts.abi == O32_ABI \ - || ! ISA_HAS_64BIT_REGS (mips_opts.isa)) + (mips_opts.fp32 || ! ISA_HAS_64BIT_REGS (mips_opts.isa)) #define HAVE_64BIT_GPRS (! HAVE_32BIT_GPRS) #define HAVE_64BIT_FPRS (! HAVE_32BIT_FPRS) -#define HAVE_NEWABI (mips_opts.abi == N32_ABI || mips_opts.abi == N64_ABI) +#define HAVE_NEWABI (mips_abi == N32_ABI || mips_abi == N64_ABI) -#define HAVE_64BIT_OBJECTS (mips_opts.abi == N64_ABI) +#define HAVE_64BIT_OBJECTS (mips_abi == N64_ABI) /* We can only have 64bit addresses if the object file format supports it. */ @@ -737,6 +739,7 @@ static void my_getExpression PARAMS ((expressionS *, char *)); #ifdef OBJ_ELF static int support_64bit_objects PARAMS((void)); #endif +static void mips_set_option_string PARAMS ((const char **, const char *)); static symbolS *get_symbol PARAMS ((void)); static void mips_align PARAMS ((int to, int fill, symbolS *label)); static void s_align PARAMS ((int)); @@ -768,10 +771,8 @@ static void s_mips_weakext PARAMS ((int)); static void s_mips_file PARAMS ((int)); static void s_mips_loc PARAMS ((int)); static int mips16_extended_frag PARAMS ((fragS *, asection *, long)); -static const char *mips_isa_to_str PARAMS ((int)); -static const char *mips_cpu_to_str PARAMS ((int)); static int validate_mips_insn PARAMS ((const struct mips_opcode *)); -static void show PARAMS ((FILE *, char *, int *, int *)); +static void show PARAMS ((FILE *, const char *, int *, int *)); #ifdef OBJ_ELF static int mips_need_elf_addend_fixup PARAMS ((fixS *)); #endif @@ -813,9 +814,14 @@ struct mips_cpu_info int cpu; /* CPU number (default CPU if ISA). */ }; -static const struct mips_cpu_info *mips_cpu_info_from_name PARAMS ((const char *)); +static void mips_set_architecture PARAMS ((const struct mips_cpu_info *)); +static void mips_set_tune PARAMS ((const struct mips_cpu_info *)); +static boolean mips_strict_matching_cpu_name_p PARAMS ((const char *, + const char *)); +static boolean mips_matching_cpu_name_p PARAMS ((const char *, const char *)); +static const struct mips_cpu_info *mips_parse_cpu PARAMS ((const char *, + const char *)); static const struct mips_cpu_info *mips_cpu_info_from_isa PARAMS ((int)); -static const struct mips_cpu_info *mips_cpu_info_from_cpu PARAMS ((int)); /* Pseudo-op table. @@ -968,36 +974,6 @@ static boolean mips16_small, mips16_ext; static segT pdr_seg; -static const char * -mips_isa_to_str (isa) - int isa; -{ - const struct mips_cpu_info *ci; - static char s[20]; - - ci = mips_cpu_info_from_isa (isa); - if (ci != NULL) - return (ci->name); - - sprintf (s, "ISA#%d", isa); - return s; -} - -static const char * -mips_cpu_to_str (cpu) - int cpu; -{ - const struct mips_cpu_info *ci; - static char s[16]; - - ci = mips_cpu_info_from_cpu (cpu); - if (ci != NULL) - return (ci->name); - - sprintf (s, "CPU#%d", cpu); - return s; -} - /* The default target format to use. */ const char * @@ -1173,7 +1149,7 @@ md_begin () if (strcmp (TARGET_OS, "elf") != 0) flags |= SEC_ALLOC | SEC_LOAD; - if (file_mips_abi != N64_ABI) + if (mips_abi != N64_ABI) { sec = subseg_new (".reginfo", (subsegT) 0); @@ -7759,11 +7735,15 @@ mips_ip (str, ip) if (!insn_error) { static char buf[100]; - sprintf (buf, - _("opcode not supported on this processor: %s (%s)"), - mips_cpu_to_str (mips_arch), - mips_isa_to_str (mips_opts.isa)); - + if (mips_arch_info->is_isa) + sprintf (buf, + _("opcode not supported at this ISA level (%s)"), + mips_cpu_info_from_isa (mips_opts.isa)->name); + else + sprintf (buf, + _("opcode not supported on this processor: %s (%s)"), + mips_arch_info->name, + mips_cpu_info_from_isa (mips_opts.isa)->name); insn_error = buf; } if (save_c) @@ -9888,8 +9868,8 @@ struct option md_longopts[] = {"march", required_argument, NULL, OPTION_MARCH}, #define OPTION_MTUNE (OPTION_MD_BASE + 22) {"mtune", required_argument, NULL, OPTION_MTUNE}, -#define OPTION_MCPU (OPTION_MD_BASE + 23) - {"mcpu", required_argument, NULL, OPTION_MCPU}, +#define OPTION_FP64 (OPTION_MD_BASE + 23) + {"mfp64", no_argument, NULL, OPTION_FP64}, #define OPTION_M4650 (OPTION_MD_BASE + 24) {"m4650", no_argument, NULL, OPTION_M4650}, #define OPTION_NO_M4650 (OPTION_MD_BASE + 25) @@ -9942,6 +9922,24 @@ struct option md_longopts[] = }; size_t md_longopts_size = sizeof (md_longopts); +/* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to + NEW_VALUE. Warn if another value was already specified. Note: + we have to defer parsing the -march and -mtune arguments in order + to handle 'from-abi' correctly, since the ABI might be specified + in a later argument. */ + +static void +mips_set_option_string (string_ptr, new_value) + const char **string_ptr, *new_value; +{ + if (*string_ptr != 0 && strcasecmp (*string_ptr, new_value) != 0) + as_warn (_("A different %s was already specified, is now %s"), + string_ptr == &mips_arch_string ? "-march" : "-mtune", + new_value); + + *string_ptr = new_value; +} + int md_parse_option (c, arg) int c; @@ -9997,130 +9995,68 @@ md_parse_option (c, arg) break; case OPTION_MIPS1: - mips_opts.isa = ISA_MIPS1; + file_mips_isa = ISA_MIPS1; break; case OPTION_MIPS2: - mips_opts.isa = ISA_MIPS2; + file_mips_isa = ISA_MIPS2; break; case OPTION_MIPS3: - mips_opts.isa = ISA_MIPS3; + file_mips_isa = ISA_MIPS3; break; case OPTION_MIPS4: - mips_opts.isa = ISA_MIPS4; + file_mips_isa = ISA_MIPS4; break; case OPTION_MIPS5: - mips_opts.isa = ISA_MIPS5; + file_mips_isa = ISA_MIPS5; break; case OPTION_MIPS32: - mips_opts.isa = ISA_MIPS32; + file_mips_isa = ISA_MIPS32; break; case OPTION_MIPS64: - mips_opts.isa = ISA_MIPS64; + file_mips_isa = ISA_MIPS64; break; case OPTION_MTUNE: - case OPTION_MARCH: - case OPTION_MCPU: - { - int cpu = CPU_UNKNOWN; - - /* Identify the processor type. */ - if (strcasecmp (arg, "default") != 0) - { - const struct mips_cpu_info *ci; - - ci = mips_cpu_info_from_name (arg); - if (ci == NULL || ci->is_isa) - { - switch (c) - { - case OPTION_MTUNE: - as_fatal (_("invalid architecture -mtune=%s"), arg); - break; - case OPTION_MARCH: - as_fatal (_("invalid architecture -march=%s"), arg); - break; - case OPTION_MCPU: - as_fatal (_("invalid architecture -mcpu=%s"), arg); - break; - } - } - else - cpu = ci->cpu; - } + mips_set_option_string (&mips_tune_string, arg); + break; - switch (c) - { - case OPTION_MTUNE: - if (mips_tune != CPU_UNKNOWN && mips_tune != cpu) - as_warn (_("A different -mtune= was already specified, is now " - "-mtune=%s"), arg); - mips_tune = cpu; - break; - case OPTION_MARCH: - if (mips_arch != CPU_UNKNOWN && mips_arch != cpu) - as_warn (_("A different -march= was already specified, is now " - "-march=%s"), arg); - mips_arch = cpu; - break; - case OPTION_MCPU: - if (mips_cpu != CPU_UNKNOWN && mips_cpu != cpu) - as_warn (_("A different -mcpu= was already specified, is now " - "-mcpu=%s"), arg); - mips_cpu = cpu; - } - } + case OPTION_MARCH: + mips_set_option_string (&mips_arch_string, arg); break; case OPTION_M4650: - if ((mips_arch != CPU_UNKNOWN && mips_arch != CPU_R4650) - || (mips_tune != CPU_UNKNOWN && mips_tune != CPU_R4650)) - as_warn (_("A different -march= or -mtune= was already specified, " - "is now -m4650")); - mips_arch = CPU_R4650; - mips_tune = CPU_R4650; + mips_set_option_string (&mips_arch_string, "4650"); + mips_set_option_string (&mips_tune_string, "4650"); break; case OPTION_NO_M4650: break; case OPTION_M4010: - if ((mips_arch != CPU_UNKNOWN && mips_arch != CPU_R4010) - || (mips_tune != CPU_UNKNOWN && mips_tune != CPU_R4010)) - as_warn (_("A different -march= or -mtune= was already specified, " - "is now -m4010")); - mips_arch = CPU_R4010; - mips_tune = CPU_R4010; + mips_set_option_string (&mips_arch_string, "4010"); + mips_set_option_string (&mips_tune_string, "4010"); break; case OPTION_NO_M4010: break; case OPTION_M4100: - if ((mips_arch != CPU_UNKNOWN && mips_arch != CPU_VR4100) - || (mips_tune != CPU_UNKNOWN && mips_tune != CPU_VR4100)) - as_warn (_("A different -march= or -mtune= was already specified, " - "is now -m4100")); - mips_arch = CPU_VR4100; - mips_tune = CPU_VR4100; + mips_set_option_string (&mips_arch_string, "4100"); + mips_set_option_string (&mips_tune_string, "4100"); break; case OPTION_NO_M4100: break; case OPTION_M3900: - if ((mips_arch != CPU_UNKNOWN && mips_arch != CPU_R3900) - || (mips_tune != CPU_UNKNOWN && mips_tune != CPU_R3900)) - as_warn (_("A different -march= or -mtune= was already specified, " - "is now -m3900")); - mips_arch = CPU_R3900; - mips_tune = CPU_R3900; + mips_set_option_string (&mips_arch_string, "3900"); + mips_set_option_string (&mips_tune_string, "3900"); break; case OPTION_NO_M3900: @@ -10223,7 +10159,7 @@ md_parse_option (c, arg) as_bad (_("-32 is supported for ELF format only")); return 0; } - mips_opts.abi = O32_ABI; + mips_abi = O32_ABI; break; case OPTION_N32: @@ -10232,7 +10168,7 @@ md_parse_option (c, arg) as_bad (_("-n32 is supported for ELF format only")); return 0; } - mips_opts.abi = N32_ABI; + mips_abi = N32_ABI; break; case OPTION_64: @@ -10241,7 +10177,7 @@ md_parse_option (c, arg) as_bad (_("-64 is supported for ELF format only")); return 0; } - mips_opts.abi = N64_ABI; + mips_abi = N64_ABI; if (! support_64bit_objects()) as_fatal (_("No compiled in support for 64 bit object file format")); break; @@ -10249,20 +10185,18 @@ md_parse_option (c, arg) case OPTION_GP32: file_mips_gp32 = 1; - if (mips_opts.abi != O32_ABI) - mips_opts.abi = NO_ABI; break; case OPTION_GP64: file_mips_gp32 = 0; - if (mips_opts.abi == O32_ABI) - mips_opts.abi = NO_ABI; break; case OPTION_FP32: file_mips_fp32 = 1; - if (mips_opts.abi != O32_ABI) - mips_opts.abi = NO_ABI; + break; + + case OPTION_FP64: + file_mips_fp32 = 0; break; #ifdef OBJ_ELF @@ -10273,20 +10207,20 @@ md_parse_option (c, arg) return 0; } if (strcmp (arg, "32") == 0) - mips_opts.abi = O32_ABI; + mips_abi = O32_ABI; else if (strcmp (arg, "o64") == 0) - mips_opts.abi = O64_ABI; + mips_abi = O64_ABI; else if (strcmp (arg, "n32") == 0) - mips_opts.abi = N32_ABI; + mips_abi = N32_ABI; else if (strcmp (arg, "64") == 0) { - mips_opts.abi = N64_ABI; + mips_abi = N64_ABI; if (! support_64bit_objects()) as_fatal (_("No compiled in support for 64 bit object file " "format")); } else if (strcmp (arg, "eabi") == 0) - mips_opts.abi = EABI_ABI; + mips_abi = EABI_ABI; else { as_fatal (_("invalid abi -mabi=%s"), arg); @@ -10319,144 +10253,40 @@ md_parse_option (c, arg) return 1; } + +/* Set up globals to generate code for the ISA or processor + described by INFO. */ static void -show (stream, string, col_p, first_p) - FILE *stream; - char *string; - int *col_p; - int *first_p; +mips_set_architecture (info) + const struct mips_cpu_info *info; { - if (*first_p) + if (info != 0) { - fprintf (stream, "%24s", ""); - *col_p = 24; + mips_arch_info = info; + mips_arch = info->cpu; + mips_opts.isa = info->isa; } - else - { - fprintf (stream, ", "); - *col_p += 2; - } - - if (*col_p + strlen (string) > 72) - { - fprintf (stream, "\n%24s", ""); - *col_p = 24; - } - - fprintf (stream, "%s", string); - *col_p += strlen (string); - - *first_p = 0; } -void -md_show_usage (stream) - FILE *stream; -{ - int column, first; - - fprintf (stream, _("\ -MIPS options:\n\ --membedded-pic generate embedded position independent code\n\ --EB generate big endian output\n\ --EL generate little endian output\n\ --g, -g2 do not remove unneeded NOPs or swap branches\n\ --G NUM allow referencing objects up to NUM bytes\n\ - implicitly with the gp register [default 8]\n")); - fprintf (stream, _("\ --mips1 generate MIPS ISA I instructions\n\ --mips2 generate MIPS ISA II instructions\n\ --mips3 generate MIPS ISA III instructions\n\ --mips4 generate MIPS ISA IV instructions\n\ --mips5 generate MIPS ISA V instructions\n\ --mips32 generate MIPS32 ISA instructions\n\ --mips64 generate MIPS64 ISA instructions\n\ --march=CPU/-mtune=CPU generate code/schedule for CPU, where CPU is one of:\n")); - - first = 1; - - show (stream, "2000", &column, &first); - show (stream, "3000", &column, &first); - show (stream, "3900", &column, &first); - show (stream, "4000", &column, &first); - show (stream, "4010", &column, &first); - show (stream, "4100", &column, &first); - show (stream, "4111", &column, &first); - show (stream, "4300", &column, &first); - show (stream, "4400", &column, &first); - show (stream, "4600", &column, &first); - show (stream, "4650", &column, &first); - show (stream, "5000", &column, &first); - show (stream, "5200", &column, &first); - show (stream, "5230", &column, &first); - show (stream, "5231", &column, &first); - show (stream, "5261", &column, &first); - show (stream, "5721", &column, &first); - show (stream, "6000", &column, &first); - show (stream, "8000", &column, &first); - show (stream, "10000", &column, &first); - show (stream, "12000", &column, &first); - show (stream, "sb1", &column, &first); - fputc ('\n', stream); - - fprintf (stream, _("\ --mCPU equivalent to -march=CPU -mtune=CPU. Deprecated.\n\ --no-mCPU don't generate code specific to CPU.\n\ - For -mCPU and -no-mCPU, CPU must be one of:\n")); - - first = 1; - show (stream, "3900", &column, &first); - show (stream, "4010", &column, &first); - show (stream, "4100", &column, &first); - show (stream, "4650", &column, &first); - fputc ('\n', stream); +/* Likewise for tuning. */ - fprintf (stream, _("\ --mips16 generate mips16 instructions\n\ --no-mips16 do not generate mips16 instructions\n")); - fprintf (stream, _("\ --mgp32 use 32-bit GPRs, regardless of the chosen ISA\n\ --mfp32 use 32-bit FPRs, regardless of the chosen ISA\n\ --O0 remove unneeded NOPs, do not swap branches\n\ --O remove unneeded NOPs and swap branches\n\ --n warn about NOPs generated from macros\n\ ---[no-]construct-floats [dis]allow floating point values to be constructed\n\ ---trap, --no-break trap exception on div by 0 and mult overflow\n\ ---break, --no-trap break exception on div by 0 and mult overflow\n")); -#ifdef OBJ_ELF - fprintf (stream, _("\ --KPIC, -call_shared generate SVR4 position independent code\n\ --non_shared do not generate position independent code\n\ --xgot assume a 32 bit GOT\n\ --mabi=ABI create ABI conformant object file for:\n")); - - first = 1; - - show (stream, "32", &column, &first); - show (stream, "o64", &column, &first); - show (stream, "n32", &column, &first); - show (stream, "64", &column, &first); - show (stream, "eabi", &column, &first); +static void +mips_set_tune (info) + const struct mips_cpu_info *info; +{ + if (info != 0) + { + mips_tune_info = info; + mips_tune = info->cpu; + } +} - fputc ('\n', stream); - fprintf (stream, _("\ --32 create o32 ABI object file (default)\n\ --n32 create n32 ABI object file\n\ --64 create 64 ABI object file\n")); -#endif -} - void mips_after_parse_args () { - const char *cpu; - char *a = NULL; - int mips_isa_from_cpu; - const struct mips_cpu_info *ci; - /* GP relative stuff not working for PE */ if (strncmp (TARGET_OS, "pe", 2) == 0 && g_switch_value != 0) @@ -10466,184 +10296,88 @@ mips_after_parse_args () g_switch_value = 0; } - cpu = TARGET_CPU; - if (strcmp (cpu + (sizeof TARGET_CPU) - 3, "el") == 0) - { - a = xmalloc (sizeof TARGET_CPU); - strcpy (a, TARGET_CPU); - a[(sizeof TARGET_CPU) - 3] = '\0'; - cpu = a; - } + /* The following code determines the architecture, ABI and register + size. Similar code was added to GCC 3.2 (see override_options() + in config/mips/mips.c). The GAS and GCC code should be kept in + sync as much as possible. */ - /* Backward compatibility for historic -mcpu= option. Check for - incompatible options, warn if -mcpu is used. */ - if (mips_cpu != CPU_UNKNOWN - && mips_arch != CPU_UNKNOWN - && mips_cpu != mips_arch) - { - as_fatal (_("The -mcpu option can't be used together with -march. " - "Use -mtune instead of -mcpu.")); - } + if (mips_arch_string != 0) + mips_set_architecture (mips_parse_cpu ("-march", mips_arch_string)); - if (mips_cpu != CPU_UNKNOWN - && mips_tune != CPU_UNKNOWN - && mips_cpu != mips_tune) - { - as_fatal (_("The -mcpu option can't be used together with -mtune. " - "Use -march instead of -mcpu.")); - } + if (mips_tune_string != 0) + mips_set_tune (mips_parse_cpu ("-mtune", mips_tune_string)); -#if 1 - /* For backward compatibility, let -mipsN set various defaults. */ - /* This code should go away, to be replaced with something rather more - draconian. Until GCC 3.1 has been released for some reasonable - amount of time, however, we need to support this. */ - if (mips_opts.isa != ISA_UNKNOWN) + if (file_mips_isa != ISA_UNKNOWN) { - /* Translate -mipsN to the appropriate settings of file_mips_gp32 - and file_mips_fp32. Tag binaries as using the mipsN ISA. */ - if (file_mips_gp32 < 0) - { - if (ISA_HAS_64BIT_REGS (mips_opts.isa)) - file_mips_gp32 = 0; - else - file_mips_gp32 = 1; - } - if (file_mips_fp32 < 0) - { - if (ISA_HAS_64BIT_REGS (mips_opts.isa)) - file_mips_fp32 = 0; - else - file_mips_fp32 = 1; - } - - ci = mips_cpu_info_from_isa (mips_opts.isa); - assert (ci != NULL); - /* -mipsN has higher priority than -mcpu but lower than -march. */ - if (mips_arch == CPU_UNKNOWN) - mips_arch = ci->cpu; - - /* Default mips_abi. */ - if (mips_opts.abi == NO_ABI) + /* Handle -mipsN. At this point, file_mips_isa contains the + ISA level specified by -mipsN, while mips_opts.isa contains + the -march selection (if any). */ + if (mips_arch_info != 0) { - if (mips_opts.isa == ISA_MIPS1 || mips_opts.isa == ISA_MIPS2) - mips_opts.abi = O32_ABI; - else if (mips_opts.isa == ISA_MIPS3 || mips_opts.isa == ISA_MIPS4) - mips_opts.abi = O64_ABI; + /* -march takes precedence over -mipsN, since it is more descriptive. + There's no harm in specifying both as long as the ISA levels + are the same. */ + if (file_mips_isa != mips_opts.isa) + as_bad (_("-%s conflicts with the other architecture options, which imply -%s"), + mips_cpu_info_from_isa (file_mips_isa)->name, + mips_cpu_info_from_isa (mips_opts.isa)->name); } + else + mips_set_architecture (mips_cpu_info_from_isa (file_mips_isa)); } - if (mips_arch == CPU_UNKNOWN && mips_cpu != CPU_UNKNOWN) - { - ci = mips_cpu_info_from_cpu (mips_cpu); - assert (ci != NULL); - mips_arch = ci->cpu; - as_warn (_("The -mcpu option is deprecated. Please use -march and " - "-mtune instead.")); - } + if (mips_arch_info == 0) + mips_set_architecture (mips_parse_cpu ("default CPU", + MIPS_CPU_STRING_DEFAULT)); - /* Set tune from -mcpu, not from -mipsN. */ - if (mips_tune == CPU_UNKNOWN && mips_cpu != CPU_UNKNOWN) - { - ci = mips_cpu_info_from_cpu (mips_cpu); - assert (ci != NULL); - mips_tune = ci->cpu; - } + if (ABI_NEEDS_64BIT_REGS (mips_abi) && !ISA_HAS_64BIT_REGS (mips_opts.isa)) + as_bad ("-march=%s is not compatible with the selected ABI", + mips_arch_info->name); - /* At this point, mips_arch will either be CPU_UNKNOWN if no ARCH was - specified on the command line, or some other value if one was. - Similarly, mips_opts.isa will be ISA_UNKNOWN if not specified on - the command line, or will be set otherwise if one was. */ + /* Optimize for mips_arch, unless -mtune selects a different processor. */ + if (mips_tune_info == 0) + mips_set_tune (mips_arch_info); - if (mips_arch != CPU_UNKNOWN && mips_opts.isa != ISA_UNKNOWN) - /* Handled above. */; -#else - if (mips_arch == CPU_UNKNOWN && mips_cpu != CPU_UNKNOWN) + if (file_mips_gp32 >= 0) { - ci = mips_cpu_info_from_cpu (mips_cpu); - assert (ci != NULL); - mips_arch = ci->cpu; - as_warn (_("The -mcpu option is deprecated. Please use -march and " - "-mtune instead.")); - } - - /* At this point, mips_arch will either be CPU_UNKNOWN if no ARCH was - specified on the command line, or some other value if one was. - Similarly, mips_opts.isa will be ISA_UNKNOWN if not specified on - the command line, or will be set otherwise if one was. */ - - if (mips_arch != CPU_UNKNOWN && mips_opts.isa != ISA_UNKNOWN) - { - /* We have to check if the isa is the default isa of arch. Otherwise - we'll get invalid object file headers. */ - ci = mips_cpu_info_from_cpu (mips_arch); - assert (ci != NULL); - if (mips_opts.isa != ci->isa) - { - /* This really should be an error instead of a warning, but old - compilers only have -mcpu which sets both arch and tune. For - now, we discard arch and preserve tune. */ - as_warn (_("The -march option is incompatible to -mipsN and " - "therefore ignored.")); - if (mips_tune == CPU_UNKNOWN) - mips_tune = mips_arch; - ci = mips_cpu_info_from_isa (mips_opts.isa); - assert (ci != NULL); - mips_arch = ci->cpu; - } - } -#endif - else if (mips_arch != CPU_UNKNOWN && mips_opts.isa == ISA_UNKNOWN) - { - /* We have ARCH, we need ISA. */ - ci = mips_cpu_info_from_cpu (mips_arch); - assert (ci != NULL); - mips_opts.isa = ci->isa; - } - else if (mips_arch == CPU_UNKNOWN && mips_opts.isa != ISA_UNKNOWN) - { - /* We have ISA, we need default ARCH. */ - ci = mips_cpu_info_from_isa (mips_opts.isa); - assert (ci != NULL); - mips_arch = ci->cpu; + /* The user specified the size of the integer registers. Make sure + it agrees with the ABI and ISA. */ + if (file_mips_gp32 == 0 && !ISA_HAS_64BIT_REGS (mips_opts.isa)) + as_bad (_("-mgp64 used with a 32-bit processor")); + else if (file_mips_gp32 == 1 && ABI_NEEDS_64BIT_REGS (mips_abi)) + as_bad (_("-mgp32 used with a 64-bit ABI")); + else if (file_mips_gp32 == 0 && ABI_NEEDS_32BIT_REGS (mips_abi)) + as_bad (_("-mgp64 used with a 32-bit ABI")); } else { - /* We need to set both ISA and ARCH from target cpu. */ - ci = mips_cpu_info_from_name (cpu); - if (ci == NULL) - ci = mips_cpu_info_from_cpu (CPU_R3000); - assert (ci != NULL); - mips_opts.isa = ci->isa; - mips_arch = ci->cpu; + /* Infer the integer register size from the ABI and processor. + Restrict ourselves to 32-bit registers if that's all the + processor has, or if the ABI cannot handle 64-bit registers. */ + file_mips_gp32 = (ABI_NEEDS_32BIT_REGS (mips_abi) + || !ISA_HAS_64BIT_REGS (mips_opts.isa)); } - if (mips_tune == CPU_UNKNOWN) - mips_tune = mips_arch; + /* ??? GAS treats single-float processors as though they had 64-bit + float registers (although it complains when double-precision + instructions are used). As things stand, saying they have 32-bit + registers would lead to spurious "register must be even" messages. + So here we assume float registers are always the same size as + integer ones, unless the user says otherwise. */ + if (file_mips_fp32 < 0) + file_mips_fp32 = file_mips_gp32; - ci = mips_cpu_info_from_cpu (mips_arch); - assert (ci != NULL); - mips_isa_from_cpu = ci->isa; + /* End of GCC-shared inference code. */ - /* End of TARGET_CPU processing, get rid of malloced memory - if necessary. */ - cpu = NULL; - if (a != NULL) - { - free (a); - a = NULL; - } + /* ??? When do we want this flag to be set? Who uses it? */ + if (file_mips_gp32 == 1 + && mips_abi == NO_ABI + && ISA_HAS_64BIT_REGS (mips_opts.isa)) + mips_32bitmode = 1; if (mips_opts.isa == ISA_MIPS1 && mips_trap) as_bad (_("trap exception not supported at ISA 1")); - /* If they asked for mips1 or mips2 and a cpu that is - mips3 or greater, then mark the object file 32BITMODE. */ - if (mips_isa_from_cpu != ISA_UNKNOWN - && ! ISA_HAS_64BIT_REGS (mips_opts.isa) - && ISA_HAS_64BIT_REGS (mips_isa_from_cpu)) - mips_32bitmode = 1; - /* If the selected architecture includes support for ASEs, enable generation of code for them. */ if (mips_opts.mips16 == -1) @@ -10653,13 +10387,7 @@ mips_after_parse_args () if (mips_opts.ase_mdmx == -1) mips_opts.ase_mdmx = (CPU_HAS_MDMX (mips_arch)) ? 1 : 0; - if (file_mips_gp32 < 0) - file_mips_gp32 = 0; - if (file_mips_fp32 < 0) - file_mips_fp32 = 0; - file_mips_isa = mips_opts.isa; - file_mips_abi = mips_opts.abi; file_ase_mips16 = mips_opts.mips16; file_ase_mips3d = mips_opts.ase_mips3d; file_ase_mdmx = mips_opts.ase_mdmx; @@ -11734,7 +11462,6 @@ s_mipsset (x) case 0: mips_opts.gp32 = file_mips_gp32; mips_opts.fp32 = file_mips_fp32; - mips_opts.abi = file_mips_abi; break; case 1: case 2: @@ -11746,9 +11473,6 @@ s_mipsset (x) case 4: case 5: case 64: - /* Loosen ABI register width restriction. */ - if (mips_opts.abi == O32_ABI) - mips_opts.abi = NO_ABI; mips_opts.gp32 = 0; mips_opts.fp32 = 0; break; @@ -13198,7 +12922,7 @@ void mips_elf_final_processing () { /* Write out the register information. */ - if (file_mips_abi != N64_ABI) + if (mips_abi != N64_ABI) { Elf32_RegInfo s; @@ -13248,22 +12972,18 @@ mips_elf_final_processing () elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ARCH_ASE_MDMX; /* Set the MIPS ELF ABI flags. */ - if (file_mips_abi == NO_ABI) - ; - else if (file_mips_abi == O32_ABI) + if (mips_abi == O32_ABI && USE_E_MIPS_ABI_O32) elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O32; - else if (file_mips_abi == O64_ABI) + else if (mips_abi == O64_ABI) elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_O64; - else if (file_mips_abi == EABI_ABI) + else if (mips_abi == EABI_ABI) { - /* Set the EABI kind based on the ISA. This isn't really - the best, but then neither is basing the abi on the isa. */ - if (ISA_HAS_64BIT_REGS (file_mips_isa)) + if (!file_mips_gp32) elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI64; else elf_elfheader (stdoutput)->e_flags |= E_MIPS_ABI_EABI32; } - else if (file_mips_abi == N32_ABI) + else if (mips_abi == N32_ABI) elf_elfheader (stdoutput)->e_flags |= EF_MIPS_ABI2; /* Nothing to do for N64_ABI. */ @@ -13704,176 +13424,178 @@ s_loc (x) } #endif -/* CPU name/ISA/number mapping table. - - Entries are grouped by type. The first matching CPU or ISA entry - gets chosen by CPU or ISA, so it should be the 'canonical' name - for that type. Entries after that within the type are sorted - alphabetically. +/* A table describing all the processors gas knows about. Names are + matched in the order listed. - Case is ignored in comparison, so put the canonical entry in the - appropriate case but everything else in lower case to ease eye pain. */ + To ease comparison, please keep this table in the same order as + gcc's mips_cpu_info_table[]. */ static const struct mips_cpu_info mips_cpu_info_table[] = { - /* MIPS1 ISA */ - { "MIPS1", 1, ISA_MIPS1, CPU_R3000, }, - { "mips", 1, ISA_MIPS1, CPU_R3000, }, + /* Entries for generic ISAs */ + { "mips1", 1, ISA_MIPS1, CPU_R3000 }, + { "mips2", 1, ISA_MIPS2, CPU_R6000 }, + { "mips3", 1, ISA_MIPS3, CPU_R4000 }, + { "mips4", 1, ISA_MIPS4, CPU_R8000 }, + { "mips5", 1, ISA_MIPS5, CPU_MIPS5 }, + { "mips32", 1, ISA_MIPS32, CPU_MIPS32 }, + { "mips64", 1, ISA_MIPS64, CPU_MIPS64 }, + + /* MIPS I */ + { "r3000", 0, ISA_MIPS1, CPU_R3000 }, + { "r2000", 0, ISA_MIPS1, CPU_R3000 }, + { "r3900", 0, ISA_MIPS1, CPU_R3900 }, + + /* MIPS II */ + { "r6000", 0, ISA_MIPS2, CPU_R6000 }, + + /* MIPS III */ + { "r4000", 0, ISA_MIPS3, CPU_R4000 }, + { "r4010", 0, ISA_MIPS2, CPU_R4010 }, + { "vr4100", 0, ISA_MIPS3, CPU_VR4100 }, + { "vr4111", 0, ISA_MIPS3, CPU_R4111 }, + { "vr4300", 0, ISA_MIPS3, CPU_R4300 }, + { "r4400", 0, ISA_MIPS3, CPU_R4400 }, + { "r4600", 0, ISA_MIPS3, CPU_R4600 }, + { "orion", 0, ISA_MIPS3, CPU_R4600 }, + { "r4650", 0, ISA_MIPS3, CPU_R4650 }, + + /* MIPS IV */ + { "r8000", 0, ISA_MIPS4, CPU_R8000 }, + { "r10000", 0, ISA_MIPS4, CPU_R10000 }, + { "r12000", 0, ISA_MIPS4, CPU_R12000 }, + { "vr5000", 0, ISA_MIPS4, CPU_R5000 }, + { "rm5200", 0, ISA_MIPS4, CPU_R5000 }, + { "rm5230", 0, ISA_MIPS4, CPU_R5000 }, + { "rm5231", 0, ISA_MIPS4, CPU_R5000 }, + { "rm5261", 0, ISA_MIPS4, CPU_R5000 }, + { "rm5721", 0, ISA_MIPS4, CPU_R5000 }, + { "r7000", 0, ISA_MIPS4, CPU_R5000 }, + + /* MIPS 32 */ + { "4kc", 0, ISA_MIPS32, CPU_MIPS32, }, + { "4km", 0, ISA_MIPS32, CPU_MIPS32 }, + { "4kp", 0, ISA_MIPS32, CPU_MIPS32 }, - /* MIPS2 ISA */ - { "MIPS2", 1, ISA_MIPS2, CPU_R6000, }, + /* MIPS 64 */ + { "5kc", 0, ISA_MIPS64, CPU_MIPS64 }, + { "20kc", 0, ISA_MIPS64, CPU_MIPS64 }, - /* MIPS3 ISA */ - { "MIPS3", 1, ISA_MIPS3, CPU_R4000, }, + /* Broadcom SB-1 CPU */ + { "SB-1", 0, ISA_MIPS64, CPU_SB1 }, + { "sb-1250", 0, ISA_MIPS64, CPU_SB1 }, + { "sb1", 0, ISA_MIPS64, CPU_SB1 }, + { "sb1250", 0, ISA_MIPS64, CPU_SB1 }, - /* MIPS4 ISA */ - { "MIPS4", 1, ISA_MIPS4, CPU_R8000, }, + /* End marker */ + { NULL, 0, 0, 0 } +}; - /* MIPS5 ISA */ - { "MIPS5", 1, ISA_MIPS5, CPU_MIPS5, }, - { "Generic-MIPS5", 0, ISA_MIPS5, CPU_MIPS5, }, - /* MIPS32 ISA */ - { "MIPS32", 1, ISA_MIPS32, CPU_MIPS32, }, - { "mipsisa32", 0, ISA_MIPS32, CPU_MIPS32, }, - { "Generic-MIPS32", 0, ISA_MIPS32, CPU_MIPS32, }, - { "4kc", 0, ISA_MIPS32, CPU_MIPS32, }, - { "4km", 0, ISA_MIPS32, CPU_MIPS32, }, - { "4kp", 0, ISA_MIPS32, CPU_MIPS32, }, - - /* For historical reasons. */ - { "MIPS64", 1, ISA_MIPS3, CPU_R4000, }, - - /* MIPS64 ISA */ - { "mipsisa64", 1, ISA_MIPS64, CPU_MIPS64, }, - { "Generic-MIPS64", 0, ISA_MIPS64, CPU_MIPS64, }, - { "5kc", 0, ISA_MIPS64, CPU_MIPS64, }, - { "20kc", 0, ISA_MIPS64, CPU_MIPS64, }, - - /* R2000 CPU */ - { "R2000", 0, ISA_MIPS1, CPU_R2000, }, - { "2000", 0, ISA_MIPS1, CPU_R2000, }, - { "2k", 0, ISA_MIPS1, CPU_R2000, }, - { "r2k", 0, ISA_MIPS1, CPU_R2000, }, - - /* R3000 CPU */ - { "R3000", 0, ISA_MIPS1, CPU_R3000, }, - { "3000", 0, ISA_MIPS1, CPU_R3000, }, - { "3k", 0, ISA_MIPS1, CPU_R3000, }, - { "r3k", 0, ISA_MIPS1, CPU_R3000, }, - - /* TX3900 CPU */ - { "R3900", 0, ISA_MIPS1, CPU_R3900, }, - { "3900", 0, ISA_MIPS1, CPU_R3900, }, - { "mipstx39", 0, ISA_MIPS1, CPU_R3900, }, - - /* R4000 CPU */ - { "R4000", 0, ISA_MIPS3, CPU_R4000, }, - { "4000", 0, ISA_MIPS3, CPU_R4000, }, - { "4k", 0, ISA_MIPS3, CPU_R4000, }, /* beware */ - { "r4k", 0, ISA_MIPS3, CPU_R4000, }, - - /* R4010 CPU */ - { "R4010", 0, ISA_MIPS2, CPU_R4010, }, - { "4010", 0, ISA_MIPS2, CPU_R4010, }, - - /* R4400 CPU */ - { "R4400", 0, ISA_MIPS3, CPU_R4400, }, - { "4400", 0, ISA_MIPS3, CPU_R4400, }, - - /* R4600 CPU */ - { "R4600", 0, ISA_MIPS3, CPU_R4600, }, - { "4600", 0, ISA_MIPS3, CPU_R4600, }, - { "mips64orion", 0, ISA_MIPS3, CPU_R4600, }, - { "orion", 0, ISA_MIPS3, CPU_R4600, }, - - /* R4650 CPU */ - { "R4650", 0, ISA_MIPS3, CPU_R4650, }, - { "4650", 0, ISA_MIPS3, CPU_R4650, }, - - /* R6000 CPU */ - { "R6000", 0, ISA_MIPS2, CPU_R6000, }, - { "6000", 0, ISA_MIPS2, CPU_R6000, }, - { "6k", 0, ISA_MIPS2, CPU_R6000, }, - { "r6k", 0, ISA_MIPS2, CPU_R6000, }, - - /* R8000 CPU */ - { "R8000", 0, ISA_MIPS4, CPU_R8000, }, - { "8000", 0, ISA_MIPS4, CPU_R8000, }, - { "8k", 0, ISA_MIPS4, CPU_R8000, }, - { "r8k", 0, ISA_MIPS4, CPU_R8000, }, - - /* R10000 CPU */ - { "R10000", 0, ISA_MIPS4, CPU_R10000, }, - { "10000", 0, ISA_MIPS4, CPU_R10000, }, - { "10k", 0, ISA_MIPS4, CPU_R10000, }, - { "r10k", 0, ISA_MIPS4, CPU_R10000, }, - - /* R12000 CPU */ - { "R12000", 0, ISA_MIPS4, CPU_R12000, }, - { "12000", 0, ISA_MIPS4, CPU_R12000, }, - { "12k", 0, ISA_MIPS4, CPU_R12000, }, - { "r12k", 0, ISA_MIPS4, CPU_R12000, }, - - /* VR4100 CPU */ - { "VR4100", 0, ISA_MIPS3, CPU_VR4100, }, - { "4100", 0, ISA_MIPS3, CPU_VR4100, }, - { "mips64vr4100", 0, ISA_MIPS3, CPU_VR4100, }, - { "r4100", 0, ISA_MIPS3, CPU_VR4100, }, - - /* VR4111 CPU */ - { "VR4111", 0, ISA_MIPS3, CPU_R4111, }, - { "4111", 0, ISA_MIPS3, CPU_R4111, }, - { "mips64vr4111", 0, ISA_MIPS3, CPU_R4111, }, - { "r4111", 0, ISA_MIPS3, CPU_R4111, }, - - /* VR4300 CPU */ - { "VR4300", 0, ISA_MIPS3, CPU_R4300, }, - { "4300", 0, ISA_MIPS3, CPU_R4300, }, - { "mips64vr4300", 0, ISA_MIPS3, CPU_R4300, }, - { "r4300", 0, ISA_MIPS3, CPU_R4300, }, - - /* VR5000 CPU */ - { "VR5000", 0, ISA_MIPS4, CPU_R5000, }, - { "5000", 0, ISA_MIPS4, CPU_R5000, }, - { "5k", 0, ISA_MIPS4, CPU_R5000, }, - { "mips64vr5000", 0, ISA_MIPS4, CPU_R5000, }, - { "r5000", 0, ISA_MIPS4, CPU_R5000, }, - { "r5200", 0, ISA_MIPS4, CPU_R5000, }, - { "rm5200", 0, ISA_MIPS4, CPU_R5000, }, - { "r5230", 0, ISA_MIPS4, CPU_R5000, }, - { "rm5230", 0, ISA_MIPS4, CPU_R5000, }, - { "r5231", 0, ISA_MIPS4, CPU_R5000, }, - { "rm5231", 0, ISA_MIPS4, CPU_R5000, }, - { "r5261", 0, ISA_MIPS4, CPU_R5000, }, - { "rm5261", 0, ISA_MIPS4, CPU_R5000, }, - { "r5721", 0, ISA_MIPS4, CPU_R5000, }, - { "rm5721", 0, ISA_MIPS4, CPU_R5000, }, - { "r5k", 0, ISA_MIPS4, CPU_R5000, }, - { "r7000", 0, ISA_MIPS4, CPU_R5000, }, +/* Return true if GIVEN is the same as CANONICAL, or if it is CANONICAL + with a final "000" replaced by "k". Ignore case. - /* Broadcom SB-1 CPU */ - { "SB-1", 0, ISA_MIPS64, CPU_SB1, }, - { "sb-1250", 0, ISA_MIPS64, CPU_SB1, }, - { "sb1", 0, ISA_MIPS64, CPU_SB1, }, - { "sb1250", 0, ISA_MIPS64, CPU_SB1, }, + Note: this function is shared between GCC and GAS. */ - /* End marker. */ - { NULL, 0, 0, 0, }, -}; +static boolean +mips_strict_matching_cpu_name_p (canonical, given) + const char *canonical, *given; +{ + while (*given != 0 && TOLOWER (*given) == TOLOWER (*canonical)) + given++, canonical++; + + return ((*given == 0 && *canonical == 0) + || (strcmp (canonical, "000") == 0 && strcasecmp (given, "k") == 0)); +} + + +/* Return true if GIVEN matches CANONICAL, where GIVEN is a user-supplied + CPU name. We've traditionally allowed a lot of variation here. + + Note: this function is shared between GCC and GAS. */ + +static boolean +mips_matching_cpu_name_p (canonical, given) + const char *canonical, *given; +{ + /* First see if the name matches exactly, or with a final "000" + turned into "k". */ + if (mips_strict_matching_cpu_name_p (canonical, given)) + return true; + + /* If not, try comparing based on numerical designation alone. + See if GIVEN is an unadorned number, or 'r' followed by a number. */ + if (TOLOWER (*given) == 'r') + given++; + if (!ISDIGIT (*given)) + return false; + + /* Skip over some well-known prefixes in the canonical name, + hoping to find a number there too. */ + if (TOLOWER (canonical[0]) == 'v' && TOLOWER (canonical[1]) == 'r') + canonical += 2; + else if (TOLOWER (canonical[0]) == 'r' && TOLOWER (canonical[1]) == 'm') + canonical += 2; + else if (TOLOWER (canonical[0]) == 'r') + canonical += 1; + + return mips_strict_matching_cpu_name_p (canonical, given); +} + + +/* Parse an option that takes the name of a processor as its argument. + OPTION is the name of the option and CPU_STRING is the argument. + Return the corresponding processor enumeration if the CPU_STRING is + recognized, otherwise report an error and return null. + + A similar function exists in GCC. */ static const struct mips_cpu_info * -mips_cpu_info_from_name (name) - const char *name; +mips_parse_cpu (option, cpu_string) + const char *option, *cpu_string; { - int i; + const struct mips_cpu_info *p; - for (i = 0; mips_cpu_info_table[i].name != NULL; i++) - if (strcasecmp (name, mips_cpu_info_table[i].name) == 0) - return (&mips_cpu_info_table[i]); + /* 'from-abi' selects the most compatible architecture for the given + ABI: MIPS I for 32-bit ABIs and MIPS III for 64-bit ABIs. For the + EABIs, we have to decide whether we're using the 32-bit or 64-bit + version. Look first at the -mgp options, if given, otherwise base + the choice on MIPS_DEFAULT_64BIT. - return NULL; + Treat NO_ABI like the EABIs. One reason to do this is that the + plain 'mips' and 'mips64' configs have 'from-abi' as their default + architecture. This code picks MIPS I for 'mips' and MIPS III for + 'mips64', just as we did in the days before 'from-abi'. */ + if (strcasecmp (cpu_string, "from-abi") == 0) + { + if (ABI_NEEDS_32BIT_REGS (mips_abi)) + return mips_cpu_info_from_isa (ISA_MIPS1); + + if (ABI_NEEDS_64BIT_REGS (mips_abi)) + return mips_cpu_info_from_isa (ISA_MIPS3); + + if (file_mips_gp32 >= 0) + return mips_cpu_info_from_isa (file_mips_gp32 ? ISA_MIPS1 : ISA_MIPS3); + + return mips_cpu_info_from_isa (MIPS_DEFAULT_64BIT + ? ISA_MIPS3 + : ISA_MIPS1); + } + + /* 'default' has traditionally been a no-op. Probably not very useful. */ + if (strcasecmp (cpu_string, "default") == 0) + return 0; + + for (p = mips_cpu_info_table; p->name != 0; p++) + if (mips_matching_cpu_name_p (p->name, cpu_string)) + return p; + + as_bad ("Bad value (%s) for %s", cpu_string, option); + return 0; } +/* Return the canonical processor information for ISA (a member of the + ISA_MIPS* enumeration). */ + static const struct mips_cpu_info * mips_cpu_info_from_isa (isa) int isa; @@ -13882,22 +13604,119 @@ mips_cpu_info_from_isa (isa) for (i = 0; mips_cpu_info_table[i].name != NULL; i++) if (mips_cpu_info_table[i].is_isa - && isa == mips_cpu_info_table[i].isa) + && isa == mips_cpu_info_table[i].isa) return (&mips_cpu_info_table[i]); return NULL; } + +static void +show (stream, string, col_p, first_p) + FILE *stream; + const char *string; + int *col_p; + int *first_p; +{ + if (*first_p) + { + fprintf (stream, "%24s", ""); + *col_p = 24; + } + else + { + fprintf (stream, ", "); + *col_p += 2; + } -static const struct mips_cpu_info * -mips_cpu_info_from_cpu (cpu) - int cpu; + if (*col_p + strlen (string) > 72) + { + fprintf (stream, "\n%24s", ""); + *col_p = 24; + } + + fprintf (stream, "%s", string); + *col_p += strlen (string); + + *first_p = 0; +} + +void +md_show_usage (stream) + FILE *stream; { - int i; + int column, first; + size_t i; + + fprintf (stream, _("\ +MIPS options:\n\ +-membedded-pic generate embedded position independent code\n\ +-EB generate big endian output\n\ +-EL generate little endian output\n\ +-g, -g2 do not remove unneeded NOPs or swap branches\n\ +-G NUM allow referencing objects up to NUM bytes\n\ + implicitly with the gp register [default 8]\n")); + fprintf (stream, _("\ +-mips1 generate MIPS ISA I instructions\n\ +-mips2 generate MIPS ISA II instructions\n\ +-mips3 generate MIPS ISA III instructions\n\ +-mips4 generate MIPS ISA IV instructions\n\ +-mips5 generate MIPS ISA V instructions\n\ +-mips32 generate MIPS32 ISA instructions\n\ +-mips64 generate MIPS64 ISA instructions\n\ +-march=CPU/-mtune=CPU generate code/schedule for CPU, where CPU is one of:\n")); + + first = 1; for (i = 0; mips_cpu_info_table[i].name != NULL; i++) - if (!mips_cpu_info_table[i].is_isa - && cpu == mips_cpu_info_table[i].cpu) - return (&mips_cpu_info_table[i]); + show (stream, mips_cpu_info_table[i].name, &column, &first); + show (stream, "from-abi", &column, &first); + fputc ('\n', stream); - return NULL; + fprintf (stream, _("\ +-mCPU equivalent to -march=CPU -mtune=CPU. Deprecated.\n\ +-no-mCPU don't generate code specific to CPU.\n\ + For -mCPU and -no-mCPU, CPU must be one of:\n")); + + first = 1; + + show (stream, "3900", &column, &first); + show (stream, "4010", &column, &first); + show (stream, "4100", &column, &first); + show (stream, "4650", &column, &first); + fputc ('\n', stream); + + fprintf (stream, _("\ +-mips16 generate mips16 instructions\n\ +-no-mips16 do not generate mips16 instructions\n")); + fprintf (stream, _("\ +-mgp32 use 32-bit GPRs, regardless of the chosen ISA\n\ +-mfp32 use 32-bit FPRs, regardless of the chosen ISA\n\ +-O0 remove unneeded NOPs, do not swap branches\n\ +-O remove unneeded NOPs and swap branches\n\ +-n warn about NOPs generated from macros\n\ +--[no-]construct-floats [dis]allow floating point values to be constructed\n\ +--trap, --no-break trap exception on div by 0 and mult overflow\n\ +--break, --no-trap break exception on div by 0 and mult overflow\n")); +#ifdef OBJ_ELF + fprintf (stream, _("\ +-KPIC, -call_shared generate SVR4 position independent code\n\ +-non_shared do not generate position independent code\n\ +-xgot assume a 32 bit GOT\n\ +-mabi=ABI create ABI conformant object file for:\n")); + + first = 1; + + show (stream, "32", &column, &first); + show (stream, "o64", &column, &first); + show (stream, "n32", &column, &first); + show (stream, "64", &column, &first); + show (stream, "eabi", &column, &first); + + fputc ('\n', stream); + + fprintf (stream, _("\ +-32 create o32 ABI object file (default)\n\ +-n32 create n32 ABI object file\n\ +-64 create 64 ABI object file\n")); +#endif } diff --git a/gas/configure b/gas/configure index 2130669..e4e353a 100755 --- a/gas/configure +++ b/gas/configure @@ -2715,6 +2715,65 @@ EOF # Other random stuff. + case ${cpu_type} in + mips) + # Set mips_cpu to the name of the default CPU. + case ${target_cpu} in + mips | mipsbe | mipseb | mipsle | mipsel | mips64 | mips64el) + mips_cpu=from-abi + ;; + mipsisa32 | mipsisa32el) + mips_cpu=mips32 + ;; + mipsisa64 | mipsisa64el) + mips_cpu=mips64 + ;; + mipstx39 | mipstx39el) + mips_cpu=r3900 + ;; + mips64* | mipsisa64* | mipsisa32*) + mips_cpu=`echo $target_cpu | sed -e 's/[a-z]*..//' -e 's/el$//'` + ;; + *) + { echo "configure: error: $target_cpu isn't a supported MIPS CPU name" 1>&2; exit 1; } + ;; + esac + # See whether it's appropriate to set E_MIPS_ABI_O32 for o32 + # binaries. It's a GNU extension that some OSes don't understand. + # The value only matters on ELF targets. + case ${target} in + *-*-irix*) + use_e_mips_abi_o32=0 + ;; + *) + use_e_mips_abi_o32=1 + ;; + esac + # Decide whether to generate 32-bit or 64-bit code by default. + # Used to resolve -march=from-abi when an embedded ABI is selected. + case ${target} in + mips64*-*-* | mipsisa64*-*-*) + mips_default_64bit=1 + ;; + *) + mips_default_64bit=0 + ;; + esac + cat >> confdefs.h <> confdefs.h <> confdefs.h <&6 -echo "configure:3162: checking for $ac_word" >&5 +echo "configure:3221: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3188,7 +3247,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3192: checking for $ac_word" >&5 +echo "configure:3251: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3239,7 +3298,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3243: checking for $ac_word" >&5 +echo "configure:3302: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3271,7 +3330,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:3275: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:3334: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -3282,12 +3341,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 3286 "configure" +#line 3345 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:3291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -3313,12 +3372,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:3317: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:3376: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:3322: checking whether we are using GNU C" >&5 +echo "configure:3381: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3327,7 +3386,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3331: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3390: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -3346,7 +3405,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:3350: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:3409: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3383,7 +3442,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3387: checking for $ac_word" >&5 +echo "configure:3446: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3414,7 +3473,7 @@ done test -n "$YACC" || YACC="yacc" echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:3418: checking how to run the C preprocessor" >&5 +echo "configure:3477: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -3429,13 +3488,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3439: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -3446,13 +3505,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3456: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3515: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -3463,13 +3522,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3473: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3532: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -3499,7 +3558,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3503: checking for $ac_word" >&5 +echo "configure:3562: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3532,7 +3591,7 @@ test -n "$LEX" || LEX="$missing_dir/missing flex" # Extract the first word of "flex", so it can be a program name with args. set dummy flex; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3536: checking for $ac_word" >&5 +echo "configure:3595: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3566,7 +3625,7 @@ then *) ac_lib=l ;; esac echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 -echo "configure:3570: checking for yywrap in -l$ac_lib" >&5 +echo "configure:3629: checking for yywrap in -l$ac_lib" >&5 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3574,7 +3633,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l$ac_lib $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3608,7 +3667,7 @@ fi fi echo $ac_n "checking lex output file root""... $ac_c" 1>&6 -echo "configure:3612: checking lex output file root" >&5 +echo "configure:3671: checking lex output file root" >&5 if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3629,7 +3688,7 @@ echo "$ac_t""$ac_cv_prog_lex_root" 1>&6 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6 -echo "configure:3633: checking whether yytext is a pointer" >&5 +echo "configure:3692: checking whether yytext is a pointer" >&5 if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3641,14 +3700,14 @@ echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c ac_save_LIBS="$LIBS" LIBS="$LIBS $LEXLIB" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_prog_lex_yytext_pointer=yes else @@ -3674,7 +3733,7 @@ ALL_LINGUAS="fr tr es" # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3678: checking for $ac_word" >&5 +echo "configure:3737: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3702,12 +3761,12 @@ else fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:3706: checking for ANSI C header files" >&5 +echo "configure:3765: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3715,7 +3774,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3778: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3732,7 +3791,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -3750,7 +3809,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -3771,7 +3830,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -3782,7 +3841,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:3786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3845: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -3806,12 +3865,12 @@ EOF fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3810: checking for working const" >&5 +echo "configure:3869: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3881,21 +3940,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3885: checking for inline" >&5 +echo "configure:3944: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3921,12 +3980,12 @@ EOF esac echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3925: checking for off_t" >&5 +echo "configure:3984: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3954,12 +4013,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3958: checking for size_t" >&5 +echo "configure:4017: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3989,19 +4048,19 @@ fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:3993: checking for working alloca.h" >&5 +echo "configure:4052: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:4005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -4022,12 +4081,12 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:4026: checking for alloca" >&5 +echo "configure:4085: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -4087,12 +4146,12 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:4091: checking whether alloca needs Cray hooks" >&5 +echo "configure:4150: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4121: checking for $ac_func" >&5 +echo "configure:4180: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4172,7 +4231,7 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:4176: checking stack direction for C alloca" >&5 +echo "configure:4235: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4180,7 +4239,7 @@ else ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -4220,21 +4279,21 @@ EOF fi -for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h +for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4228: checking for $ac_hdr" >&5 +echo "configure:4287: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4297: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4263,12 +4322,12 @@ done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4267: checking for $ac_func" >&5 +echo "configure:4326: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4316,7 +4375,7 @@ fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:4320: checking for working mmap" >&5 +echo "configure:4379: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4324,7 +4383,7 @@ else ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext < #include -#if HAVE_SYS_TYPES_H -# include -#endif - -#if HAVE_STDLIB_H -# include -#endif - -#if HAVE_SYS_STAT_H -# include -#endif - -#if HAVE_UNISTD_H -# include -#endif - /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE +# ifdef HAVE_UNISTD_H +# include +# endif /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H @@ -4477,7 +4523,7 @@ main() } EOF -if { (eval echo configure:4481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else @@ -4505,17 +4551,17 @@ unistd.h values.h sys/param.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4509: checking for $ac_hdr" >&5 +echo "configure:4555: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4519: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4565: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4545,12 +4591,12 @@ done __argz_count __argz_stringify __argz_next do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4549: checking for $ac_func" >&5 +echo "configure:4595: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4602,12 +4648,12 @@ done for ac_func in stpcpy do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4606: checking for $ac_func" >&5 +echo "configure:4652: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4664,19 +4710,19 @@ EOF if test $ac_cv_header_locale_h = yes; then echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 -echo "configure:4668: checking for LC_MESSAGES" >&5 +echo "configure:4714: checking for LC_MESSAGES" >&5 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return LC_MESSAGES ; return 0; } EOF -if { (eval echo configure:4680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_val_LC_MESSAGES=yes else @@ -4697,7 +4743,7 @@ EOF fi fi echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 -echo "configure:4701: checking whether NLS is requested" >&5 +echo "configure:4747: checking whether NLS is requested" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" @@ -4717,7 +4763,7 @@ fi EOF echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 -echo "configure:4721: checking whether included gettext is requested" >&5 +echo "configure:4767: checking whether included gettext is requested" >&5 # Check whether --with-included-gettext or --without-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval="$with_included_gettext" @@ -4736,17 +4782,17 @@ fi ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 -echo "configure:4740: checking for libintl.h" >&5 +echo "configure:4786: checking for libintl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4750: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4763,19 +4809,19 @@ fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6 -echo "configure:4767: checking for gettext in libc" >&5 +echo "configure:4813: checking for gettext in libc" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return (int) gettext ("") ; return 0; } EOF -if { (eval echo configure:4779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gettext_libc=yes else @@ -4791,7 +4837,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6 if test "$gt_cv_func_gettext_libc" != "yes"; then echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6 -echo "configure:4795: checking for bindtextdomain in -lintl" >&5 +echo "configure:4841: checking for bindtextdomain in -lintl" >&5 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4799,7 +4845,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4826,19 +4872,19 @@ fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6 -echo "configure:4830: checking for gettext in libintl" >&5 +echo "configure:4876: checking for gettext in libintl" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gettext_libintl=yes else @@ -4866,7 +4912,7 @@ EOF # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4870: checking for $ac_word" >&5 +echo "configure:4916: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4900,12 +4946,12 @@ fi for ac_func in dcgettext do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4904: checking for $ac_func" >&5 +echo "configure:4950: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4955,7 +5001,7 @@ done # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4959: checking for $ac_word" >&5 +echo "configure:5005: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4991,7 +5037,7 @@ fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4995: checking for $ac_word" >&5 +echo "configure:5041: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5023,7 +5069,7 @@ else fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* CATOBJEXT=.gmo DATADIRNAME=share @@ -5063,7 +5109,7 @@ fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5067: checking for $ac_word" >&5 +echo "configure:5113: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5097,7 +5143,7 @@ fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5101: checking for $ac_word" >&5 +echo "configure:5147: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5133,7 +5179,7 @@ fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5137: checking for $ac_word" >&5 +echo "configure:5183: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5223,7 +5269,7 @@ fi LINGUAS= else echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 -echo "configure:5227: checking for catalogs to be installed" >&5 +echo "configure:5273: checking for catalogs to be installed" >&5 NEW_LINGUAS= for lang in ${LINGUAS=$ALL_LINGUAS}; do case "$ALL_LINGUAS" in @@ -5251,17 +5297,17 @@ echo "configure:5227: checking for catalogs to be installed" >&5 if test "$CATOBJEXT" = ".cat"; then ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6 -echo "configure:5255: checking for linux/version.h" >&5 +echo "configure:5301: checking for linux/version.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5265: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5311: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5324,7 +5370,7 @@ fi echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:5328: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "configure:5374: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" @@ -5349,7 +5395,7 @@ fi echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 -echo "configure:5353: checking for executable suffix" >&5 +echo "configure:5399: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5359,7 +5405,7 @@ else rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= - if { (eval echo configure:5363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + if { (eval echo configure:5409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in *.c | *.o | *.obj) ;; @@ -5384,17 +5430,17 @@ for ac_hdr in string.h stdlib.h memory.h strings.h unistd.h stdarg.h varargs.h e do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5388: checking for $ac_hdr" >&5 +echo "configure:5434: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5424,7 +5470,7 @@ done # Put this here so that autoconf's "cross-compiling" message doesn't confuse # people who are not cross-compiling but are compiling cross-assemblers. echo $ac_n "checking whether compiling a cross-assembler""... $ac_c" 1>&6 -echo "configure:5428: checking whether compiling a cross-assembler" >&5 +echo "configure:5474: checking whether compiling a cross-assembler" >&5 if test "${host}" = "${target}"; then cross_gas=no else @@ -5439,19 +5485,19 @@ echo "$ac_t""$cross_gas" 1>&6 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:5443: checking for working alloca.h" >&5 +echo "configure:5489: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:5455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -5472,12 +5518,12 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:5476: checking for alloca" >&5 +echo "configure:5522: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -5537,12 +5583,12 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:5541: checking whether alloca needs Cray hooks" >&5 +echo "configure:5587: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5571: checking for $ac_func" >&5 +echo "configure:5617: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5622,7 +5668,7 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:5626: checking stack direction for C alloca" >&5 +echo "configure:5672: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5630,7 +5676,7 @@ else ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -5671,21 +5717,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:5675: checking for inline" >&5 +echo "configure:5721: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5735: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -5715,12 +5761,12 @@ esac for ac_func in unlink remove do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5719: checking for $ac_func" >&5 +echo "configure:5765: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5772,12 +5818,12 @@ done for ac_func in sbrk do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5776: checking for $ac_func" >&5 +echo "configure:5822: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5835,7 +5881,7 @@ case $host in ;; *-ncr-sysv4.3*) echo $ac_n "checking for _mwvalidcheckl in -lmw""... $ac_c" 1>&6 -echo "configure:5839: checking for _mwvalidcheckl in -lmw" >&5 +echo "configure:5885: checking for _mwvalidcheckl in -lmw" >&5 ac_lib_var=`echo mw'_'_mwvalidcheckl | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5843,7 +5889,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lmw $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5904: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5875,7 +5921,7 @@ else fi echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 -echo "configure:5879: checking for main in -lm" >&5 +echo "configure:5925: checking for main in -lm" >&5 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5883,14 +5929,14 @@ else ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5913,7 +5959,7 @@ fi ;; *) echo $ac_n "checking for main in -lm""... $ac_c" 1>&6 -echo "configure:5917: checking for main in -lm" >&5 +echo "configure:5963: checking for main in -lm" >&5 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5921,14 +5967,14 @@ else ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5959,12 +6005,12 @@ esac # enough, but on some of those systems, the assert macro relies on requoting # working properly! echo $ac_n "checking for working assert macro""... $ac_c" 1>&6 -echo "configure:5963: checking for working assert macro" >&5 +echo "configure:6009: checking for working assert macro" >&5 if eval "test \"`echo '$''{'gas_cv_assert_ok'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -5980,7 +6026,7 @@ assert (a == b ; return 0; } EOF -if { (eval echo configure:5984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_assert_ok=yes else @@ -6021,12 +6067,12 @@ gas_test_headers=" " echo $ac_n "checking whether declaration is required for strstr""... $ac_c" 1>&6 -echo "configure:6025: checking whether declaration is required for strstr" >&5 +echo "configure:6071: checking whether declaration is required for strstr" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_strstr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_strstr=no else @@ -6058,12 +6104,12 @@ fi echo $ac_n "checking whether declaration is required for malloc""... $ac_c" 1>&6 -echo "configure:6062: checking whether declaration is required for malloc" >&5 +echo "configure:6108: checking whether declaration is required for malloc" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_malloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_malloc=no else @@ -6095,12 +6141,12 @@ fi echo $ac_n "checking whether declaration is required for free""... $ac_c" 1>&6 -echo "configure:6099: checking whether declaration is required for free" >&5 +echo "configure:6145: checking whether declaration is required for free" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_free'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_free=no else @@ -6132,12 +6178,12 @@ fi echo $ac_n "checking whether declaration is required for sbrk""... $ac_c" 1>&6 -echo "configure:6136: checking whether declaration is required for sbrk" >&5 +echo "configure:6182: checking whether declaration is required for sbrk" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_sbrk'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_sbrk=no else @@ -6169,12 +6215,12 @@ fi echo $ac_n "checking whether declaration is required for environ""... $ac_c" 1>&6 -echo "configure:6173: checking whether declaration is required for environ" >&5 +echo "configure:6219: checking whether declaration is required for environ" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_environ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_environ=no else @@ -6209,12 +6255,12 @@ fi # for it? echo $ac_n "checking whether declaration is required for errno""... $ac_c" 1>&6 -echo "configure:6213: checking whether declaration is required for errno" >&5 +echo "configure:6259: checking whether declaration is required for errno" >&5 if eval "test \"`echo '$''{'gas_cv_decl_needed_errno'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gas_cv_decl_needed_errno=no else diff --git a/gas/configure.in b/gas/configure.in index 8372005..2566939 100644 --- a/gas/configure.in +++ b/gas/configure.in @@ -558,6 +558,61 @@ changequote([,])dnl # Other random stuff. + case ${cpu_type} in + mips) + # Set mips_cpu to the name of the default CPU. + case ${target_cpu} in + mips | mipsbe | mipseb | mipsle | mipsel | mips64 | mips64el) + mips_cpu=from-abi + ;; + mipsisa32 | mipsisa32el) + mips_cpu=mips32 + ;; + mipsisa64 | mipsisa64el) + mips_cpu=mips64 + ;; + mipstx39 | mipstx39el) + mips_cpu=r3900 + ;; + mips64* | mipsisa64* | mipsisa32*) +changequote(,)dnl + mips_cpu=`echo $target_cpu | sed -e 's/[a-z]*..//' -e 's/el$//'` +changequote([,])dnl + ;; + *) + AC_ERROR($target_cpu isn't a supported MIPS CPU name) + ;; + esac + # See whether it's appropriate to set E_MIPS_ABI_O32 for o32 + # binaries. It's a GNU extension that some OSes don't understand. + # The value only matters on ELF targets. + case ${target} in + *-*-irix*) + use_e_mips_abi_o32=0 + ;; + *) + use_e_mips_abi_o32=1 + ;; + esac + # Decide whether to generate 32-bit or 64-bit code by default. + # Used to resolve -march=from-abi when an embedded ABI is selected. + case ${target} in + mips64*-*-* | mipsisa64*-*-*) + mips_default_64bit=1 + ;; + *) + mips_default_64bit=0 + ;; + esac + AC_DEFINE_UNQUOTED(MIPS_CPU_STRING_DEFAULT, "$mips_cpu", + [Default CPU for MIPS targets. ]) + AC_DEFINE_UNQUOTED(USE_E_MIPS_ABI_O32, $use_e_mips_abi_o32, + [Allow use of E_MIPS_ABI_O32 on MIPS targets. ]) + AC_DEFINE_UNQUOTED(MIPS_DEFAULT_64BIT, $mips_default_64bit, + [Generate 64-bit code by default on MIPS targets. ]) + ;; + esac + # Do we need the opcodes library? case ${cpu_type} in vax | i386 | tic30) diff --git a/gas/doc/c-mips.texi b/gas/doc/c-mips.texi index 7bf75b3..b19c09b 100644 --- a/gas/doc/c-mips.texi +++ b/gas/doc/c-mips.texi @@ -175,12 +175,9 @@ sb1 Schedule and tune for a particular MIPS cpu. Valid @var{cpu} values are identical to @samp{-march=@var{cpu}}. -@item -mcpu=@var{cpu} -Generate code and schedule for a particular MIPS cpu. This is exactly -equivalent to @samp{-march=@var{cpu}} and @samp{-mtune=@var{cpu}}. Valid -@var{cpu} values are identical to @samp{-march=@var{cpu}}. -Use of this option is discouraged. - +@item -mabi=@var{abi} +Record which ABI the source code uses. The recognized arguments +are: @samp{32}, @samp{n32}, @samp{o64}, @samp{64} and @samp{eabi}. @cindex @code{-nocpp} ignored (MIPS) @item -nocpp diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index a788591..2b37a53 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-07-25 Richard Sandiford + + * gas/mips/mips-gp32-fp64.d, + * gas/mips/mips-gp32-fp64-pic.d: Add -mfp64. + 2002-07-19 Hans-Peter Nilsson * gas/mmix/list-pseudoints.l: Adjust for changes in gas section diff --git a/gas/testsuite/gas/mips/mips-gp32-fp64-pic.d b/gas/testsuite/gas/mips/mips-gp32-fp64-pic.d index 57bcf44..7dee0c0 100644 --- a/gas/testsuite/gas/mips/mips-gp32-fp64-pic.d +++ b/gas/testsuite/gas/mips/mips-gp32-fp64-pic.d @@ -1,5 +1,5 @@ #objdump: -d -mmips:8000 -#as: -march=8000 -EB -mgp32 -KPIC +#as: -march=8000 -EB -mgp32 -mfp64 -KPIC #name: MIPS -mgp32 -mfp64 (SVR4 PIC) .*: +file format.* diff --git a/gas/testsuite/gas/mips/mips-gp32-fp64.d b/gas/testsuite/gas/mips/mips-gp32-fp64.d index ceb46f9..8104990 100644 --- a/gas/testsuite/gas/mips/mips-gp32-fp64.d +++ b/gas/testsuite/gas/mips/mips-gp32-fp64.d @@ -1,5 +1,5 @@ #objdump: -d -mmips:8000 -#as: -march=8000 -EB -mgp32 +#as: -march=8000 -EB -mgp32 -mfp64 #name: MIPS -mgp32 -mfp64 .*: +file format.* -- 2.7.4