toplev.c (display_target_options): Avoid unused variable warning if TARGET_SWITCHES and TARGET_OPTIONS are both...

* toplev.c (display_target_options): Avoid unused variable warning if
	TARGET_SWITCHES and TARGET_OPTIONS are both undefined.
	* config/mips/mips.c (mips_arch_string, mips_tune_string): Make static.
	(mips_isa_string, mips_abi_string, mips_fix_vr4130_string): Delete.
	(mips_isa): Initialize to MIPS_ABI_DEFAULT.
	(mips_isa_info): New variable.
	(mips_parse_cpu): Remove the first argument and leave the caller
	to report errors.
	(TARGET_HANDLE_OPTION): Override default.
	(mips_handle_option): New function.  Move option validation code from...
	(override_options): ...here.  Update calls to mips_parse_cpu.
	* config/mips/mips.h (mips_arch_string, mips_tune_string)
	(mips_isa_string, mips_abi_string, TARGET_OPTIONS)
	(SUBTARGET_TARGET_OPTIONS): Delete.
	* config/mips/mips.opt (mabi=, march=, mflush-func=, mips)
	(mno-flush-func, mtune=): New options.

From-SVN: r96536
This commit is contained in:
Richard Sandiford 2005-03-15 23:02:37 +00:00 committed by Richard Sandiford
parent cf1665b99c
commit d522e7a222
5 changed files with 119 additions and 85 deletions

View File

@ -1,3 +1,22 @@
2005-03-15 Richard Sandiford <rsandifo@redhat.com>
* toplev.c (display_target_options): Avoid unused variable warning if
TARGET_SWITCHES and TARGET_OPTIONS are both undefined.
* config/mips/mips.c (mips_arch_string, mips_tune_string): Make static.
(mips_isa_string, mips_abi_string, mips_fix_vr4130_string): Delete.
(mips_isa): Initialize to MIPS_ABI_DEFAULT.
(mips_isa_info): New variable.
(mips_parse_cpu): Remove the first argument and leave the caller
to report errors.
(TARGET_HANDLE_OPTION): Override default.
(mips_handle_option): New function. Move option validation code from...
(override_options): ...here. Update calls to mips_parse_cpu.
* config/mips/mips.h (mips_arch_string, mips_tune_string)
(mips_isa_string, mips_abi_string, TARGET_OPTIONS)
(SUBTARGET_TARGET_OPTIONS): Delete.
* config/mips/mips.opt (mabi=, march=, mflush-func=, mips)
(mno-flush-func, mtune=): New options.
2005-03-15 Roger Sayle <roger@eyesopen.com>
Richard Henderson <rth@redhat.com>

View File

@ -264,6 +264,7 @@ static void mips_arg_info (const CUMULATIVE_ARGS *, enum machine_mode,
static bool mips_get_unaligned_mem (rtx *, unsigned int, int, rtx *, rtx *);
static void mips_set_architecture (const struct mips_cpu_info *);
static void mips_set_tune (const struct mips_cpu_info *);
static bool mips_handle_option (size_t, const char *, int);
static struct machine_function *mips_init_machine_status (void);
static void print_operand_reloc (FILE *, rtx, const char **);
#if TARGET_IRIX
@ -328,7 +329,7 @@ static void mips_avoid_hazards (void);
static void mips_reorg (void);
static bool mips_strict_matching_cpu_name_p (const char *, const char *);
static bool mips_matching_cpu_name_p (const char *, const char *);
static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *);
static const struct mips_cpu_info *mips_parse_cpu (const char *);
static const struct mips_cpu_info *mips_cpu_info_from_isa (int);
static bool mips_return_in_memory (tree, tree);
static bool mips_strict_argument_naming (CUMULATIVE_ARGS *);
@ -547,13 +548,7 @@ const struct mips_cpu_info *mips_tune_info;
int mips_isa;
/* Which ABI to use. */
int mips_abi;
/* Strings to hold which cpu and instruction set architecture to use. */
const char *mips_arch_string; /* for -march=<xxx> */
const char *mips_tune_string; /* for -mtune=<xxx> */
const char *mips_isa_string; /* for -mips{1,2,3,4} */
const char *mips_abi_string; /* for -mabi={32,n32,64,eabi} */
int mips_abi = MIPS_ABI_DEFAULT;
/* Whether we are generating mips16 hard float code. In mips16 mode
we always set TARGET_SOFT_FLOAT; this variable is nonzero if
@ -561,10 +556,14 @@ const char *mips_abi_string; /* for -mabi={32,n32,64,eabi} */
should arrange to call mips32 hard floating point code. */
int mips16_hard_float;
const char *mips_cache_flush_func = CACHE_FLUSH_FUNC;
/* The arguments passed to -march and -mtune. */
static const char *mips_arch_string;
static const char *mips_tune_string;
/* Holds string <X> if -mfix-vr4130<X> was passed on the command line. */
const char *mips_fix_vr4130_string;
/* The architecture selected by -mipsN. */
static const struct mips_cpu_info *mips_isa_info;
const char *mips_cache_flush_func = CACHE_FLUSH_FUNC;
/* If TRUE, we split addresses into their high and low parts in the RTL. */
int mips_split_addresses;
@ -754,6 +753,8 @@ const struct mips_cpu_info mips_cpu_info_table[] = {
| TARGET_FP_EXCEPTIONS_DEFAULT \
| MASK_CHECK_ZERO_DIV \
| MASK_FUSED_MADD)
#undef TARGET_HANDLE_OPTION
#define TARGET_HANDLE_OPTION mips_handle_option
#undef TARGET_FUNCTION_OK_FOR_SIBCALL
#define TARGET_FUNCTION_OK_FOR_SIBCALL mips_function_ok_for_sibcall
@ -4191,6 +4192,52 @@ mips_set_tune (const struct mips_cpu_info *info)
}
}
/* Implement TARGET_HANDLE_OPTION. */
static bool
mips_handle_option (size_t code, const char *arg, int value ATTRIBUTE_UNUSED)
{
switch (code)
{
case OPT_mabi_:
if (strcmp (arg, "32") == 0)
mips_abi = ABI_32;
else if (strcmp (arg, "o64") == 0)
mips_abi = ABI_O64;
else if (strcmp (arg, "n32") == 0)
mips_abi = ABI_N32;
else if (strcmp (arg, "64") == 0)
mips_abi = ABI_64;
else if (strcmp (arg, "eabi") == 0)
mips_abi = ABI_EABI;
else
return false;
return true;
case OPT_march_:
mips_arch_string = arg;
return mips_parse_cpu (arg) != 0;
case OPT_mtune_:
mips_tune_string = arg;
return mips_parse_cpu (arg) != 0;
case OPT_mips:
mips_isa_info = mips_parse_cpu (ACONCAT (("mips", arg, NULL)));
return mips_isa_info != 0;
case OPT_mflush_func_:
mips_cache_flush_func = arg;
return true;
case OPT_mno_flush_func:
mips_cache_flush_func = NULL;
return true;
default:
return true;
}
}
/* Set up the threshold for data to go into the small data area, instead
of the normal data area, and detect any conflicts in the switches. */
@ -4203,57 +4250,28 @@ override_options (void)
mips_section_threshold = g_switch_set ? g_switch_value : MIPS_DEFAULT_GVALUE;
/* Interpret -mabi. */
mips_abi = MIPS_ABI_DEFAULT;
if (mips_abi_string != 0)
{
if (strcmp (mips_abi_string, "32") == 0)
mips_abi = ABI_32;
else if (strcmp (mips_abi_string, "o64") == 0)
mips_abi = ABI_O64;
else if (strcmp (mips_abi_string, "n32") == 0)
mips_abi = ABI_N32;
else if (strcmp (mips_abi_string, "64") == 0)
mips_abi = ABI_64;
else if (strcmp (mips_abi_string, "eabi") == 0)
mips_abi = ABI_EABI;
else
fatal_error ("bad value (%s) for -mabi= switch", mips_abi_string);
}
/* The following code determines the architecture and register size.
Similar code was added to GAS 2.14 (see tc-mips.c:md_after_parse_args()).
The GAS and GCC code should be kept in sync as much as possible. */
if (mips_arch_string != 0)
mips_set_architecture (mips_parse_cpu ("-march", mips_arch_string));
mips_set_architecture (mips_parse_cpu (mips_arch_string));
if (mips_isa_string != 0)
if (mips_isa_info != 0)
{
/* Handle -mipsN. */
char *whole_isa_str = concat ("mips", mips_isa_string, NULL);
const struct mips_cpu_info *isa_info;
isa_info = mips_parse_cpu ("-mips option", whole_isa_str);
free (whole_isa_str);
/* -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 (mips_arch_info != 0 && mips_isa != isa_info->isa)
error ("-mips%s conflicts with the other architecture options, "
"which specify a MIPS%d processor",
mips_isa_string, mips_isa);
/* Set architecture based on the given option. */
mips_set_architecture (isa_info);
if (mips_arch_info == 0)
mips_set_architecture (mips_isa_info);
else if (mips_arch_info->isa != mips_isa_info->isa)
error ("-%s conflicts with the other architecture options, "
"which specify a %s processor",
mips_isa_info->name,
mips_cpu_info_from_isa (mips_arch_info->isa)->name);
}
if (mips_arch_info == 0)
{
#ifdef MIPS_CPU_STRING_DEFAULT
mips_set_architecture (mips_parse_cpu ("default CPU",
MIPS_CPU_STRING_DEFAULT));
mips_set_architecture (mips_parse_cpu (MIPS_CPU_STRING_DEFAULT));
#else
mips_set_architecture (mips_cpu_info_from_isa (MIPS_ISA_DEFAULT));
#endif
@ -4265,7 +4283,7 @@ override_options (void)
/* Optimize for mips_arch, unless -mtune selects a different processor. */
if (mips_tune_string != 0)
mips_set_tune (mips_parse_cpu ("-mtune", mips_tune_string));
mips_set_tune (mips_parse_cpu (mips_tune_string));
if (mips_tune_info == 0)
mips_set_tune (mips_arch_info);
@ -4336,9 +4354,6 @@ override_options (void)
if (TARGET_INT64 && !TARGET_LONG64)
error ("unsupported combination: %s", "-mint64 -mlong32");
if (mips_fix_vr4130_string && mips_fix_vr4130_string[0] != 0)
error ("unrecognized option %<-mfix-vr4130%s%>", mips_fix_vr4130_string);
if (MIPS_MARCH_CONTROLS_SOFT_FLOAT
&& (target_flags_explicit & MASK_SOFT_FLOAT) == 0)
{
@ -9177,15 +9192,13 @@ mips_matching_cpu_name_p (const char *canonical, const char *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.
/* Return the mips_cpu_info entry for the processor or ISA given
by CPU_STRING. Return null if the string isn't recognised.
A similar function exists in GAS. */
static const struct mips_cpu_info *
mips_parse_cpu (const char *option, const char *cpu_string)
mips_parse_cpu (const char *cpu_string)
{
const struct mips_cpu_info *p;
const char *s;
@ -9217,7 +9230,6 @@ mips_parse_cpu (const char *option, const char *cpu_string)
if (mips_matching_cpu_name_p (p->name, cpu_string))
return p;
error ("bad value (%s) for %s", cpu_string, option);
return 0;
}

View File

@ -102,10 +102,6 @@ extern enum processor_type mips_tune; /* which cpu to schedule for */
extern int mips_isa; /* architectural level */
extern int mips_abi; /* which ABI to use */
extern int mips16_hard_float; /* mips16 without -msoft-float */
extern const char *mips_arch_string; /* for -march=<xxx> */
extern const char *mips_tune_string; /* for -mtune=<xxx> */
extern const char *mips_isa_string; /* for -mips{1,2,3,4} */
extern const char *mips_abi_string; /* for -mabi={32,n32,64} */
extern const char *mips_cache_flush_func;/* for -mflush-func= and -mno-flush-func */
extern const struct mips_cpu_info mips_cpu_info_table[];
extern const struct mips_cpu_info *mips_arch_info;
@ -486,26 +482,6 @@ extern const struct mips_cpu_info *mips_tune_info;
#endif
#endif
#define TARGET_OPTIONS \
{ \
SUBTARGET_TARGET_OPTIONS \
{ "tune=", &mips_tune_string, \
N_("Specify CPU for scheduling purposes"), 0}, \
{ "arch=", &mips_arch_string, \
N_("Specify CPU for code generation purposes"), 0}, \
{ "abi=", &mips_abi_string, \
N_("Specify an ABI"), 0}, \
{ "ips", &mips_isa_string, \
N_("Specify a Standard MIPS ISA"), 0}, \
{ "no-flush-func", &mips_cache_flush_func, \
N_("Don't call any cache flush functions"), 0}, \
{ "flush-func=", &mips_cache_flush_func, \
N_("Specify cache flush function"), 0}, \
}
/* This is meant to be redefined in the host dependent files. */
#define SUBTARGET_TARGET_OPTIONS
/* Support for a compile-time default CPU, et cetera. The rules are:
--with-arch is ignored if -march is specified or a -mips is specified
(other than -mips16).

View File

@ -1,3 +1,7 @@
mabi=
Target RejectNegative Joined
-mabi=ABI Generate code that conforms to the given ABI
mabicalls
Target Report Mask(ABICALLS)
Use SVR4-style PIC
@ -6,6 +10,10 @@ mad
Target Report Var(TARGET_MAD)
Use PMC-style 'mad' instructions
march=
Target RejectNegative Joined
-march=ISA Generate code for the given ISA
mbranch-likely
Target Report Mask(BRANCHLIKELY)
Use Branch Likely instructions, overriding the architecture default
@ -84,6 +92,10 @@ mfp64
Target Report RejectNegative Mask(FLOAT64)
Use 64-bit floating-point registers
mflush-func=
Target RejectNegative Joined
-mflush-func=FUNC Use FUNC to flush the cache before calling stack trampolines
mfused-madd
Target Report Mask(FUSED_MADD)
Generate floating-point multiply-add instructions
@ -104,6 +116,10 @@ mint64
Target Report RejectNegative Mask(INT64)
Use a 64-bit int type
mips
Target RejectNegative Joined
-mipsN Generate code for ISA level N
mips16
Target Report RejectNegative Mask(MIPS16)
Generate mips16 code
@ -132,6 +148,10 @@ mmips-tfile
Target
Use the mips-tfile postpass
mno-flush-func
Target RejectNegative
Do not use a cache-flushing function before calling stack trampolines
mno-mips16
Target Report RejectNegative InverseMask(MIPS16)
Generate normal-mode code
@ -160,6 +180,10 @@ msym32
Target Report Var(TARGET_SYM32)
Assume all symbols have 32-bit values
mtune=
Target RejectNegative Joined
-mtune=PROCESSOR Optimize the output for PROCESSOR
muninit-const-in-rodata
Target Report Var(TARGET_UNINIT_CONST_IN_RODATA)
Put uninitialized constants in ROM (needs -membedded-data)

View File

@ -1067,7 +1067,10 @@ compile_file (void)
void
display_target_options (void)
{
int undoc, i;
int undoc;
#if defined (TARGET_SWITCHES) || defined (TARGET_OPTIONS)
int i;
#endif
unsigned int cli;
static bool displayed = false;