* config/frv/frv-protos.h (frv_branch_cost_string, frv_branch_cost_int)

(frv_cpu_string, frv_condexec_insns_str, frv_condexec_insns)
	(frv_condexec_temps_str, frv_condexec_temps, frv_sched_lookahead_str)
	(frv_sched_lookahead): Delete.
	* config/frv/frv.h (MASK_DEFAULT_ALLOC_CC): Move to frv.c.
	(target_flags, MASK_GPR_32, MASK_FPR_32, MASK_SOFT_FLOAT)
	(MASK_ALLOC_CC, MASK_DWORD, MASK_DOUBLE, MASK_MEDIA, MASK_MULADD)
	(MASK_LIBPIC, MASK_ACC_4,  MASK_PACK, MASK_LONG_CALLS)
	(MASK_ALIGN_LABELS, MASK_LINKED_FP, MASK_BIG_TLS, MASK_DEBUG_ARG)
	(MASK_DEBUG_ADDR, MASK_DEBUG_STACK, MASK_DEBUG, MASK_DEBUG_LOC)
	(MASK_DEBUG_COND_EXEC, MASK_NO_COND_MOVE, MASK_NO_SCC)
	(MASK_NO_COND_EXEC, MASK_NO_VLIW_BRANCH, MASK_NO_MULTI_CE)
	(MASK_FDPIC, MASK_INLINE_PLT, MASK_GPREL_RO, MASK_DEFAULT)
	(TARGET_GPR_32, TARGET_FPR_32, TARGET_SOFT_FLOAT, TARGET_ALLOC_CC)
	(TARGET_DWORD, TARGET_DOUBLE, TARGET_MEDIA, TARGET_MULADD)
	(TARGET_LIBPIC, TARGET_ACC_4, TARGET_DEBUG_ARG, TARGET_DEBUG_ADDR)
	(TARGET_DEBUG_STACK, TARGET_DEBUG, TARGET_DEBUG_LOC)
	(TARGET_DEBUG_COND_EXEC, TARGET_NO_COND_MOVE, TARGET_NO_SCC)
	(TARGET_NO_COND_EXEC, TARGET_NO_VLIW_BRANCH, TARGET_NO_MULTI_CE)
	(TARGET_NO_NESTED_CE, TARGET_FDPIC, TARGET_INLINE_PLT, TARGET_BIG_TLS)
	(TARGET_GPREL_RO, TARGET_PACK, TARGET_LONG_CALLS, TARGET_ALIGN_LABELS)
	(TARGET_LINKED_FP, TARGET_GPR_64, TARGET_FPR_64, TARGET_HARD_FLOAT)
	(TARGET_FIXED_CC, TARGET_COND_MOVE, TARGET_SCC, TARGET_COND_EXEC)
	(TARGET_VLIW_BRANCH, TARGET_MULTI_CE, TARGET_NESTED_CE, TARGET_ACC_8)
	(TARGET_SWITCHES, TARGET_OPTIONS, DEFAULT_CONDEXEC_TEMPS)
	(DEFAULT_BRANCH_COST, DEFAULT_CONDEXEC_INSNS): Delete.
	* config/frv/frv.c (frv_branch_cost_string, frv_branch_cost_int)
	(frv_cpu_string, frv_condexec_insns_str, frv_condexec_insns)
	(frv_condexec_temps_str, frv_condexec_temps, frv_sched_lookahead_str)
	(frv_sched_lookahead): Delete.
	(MASK_DEFAULT_ALLOC_CC): Moved from frv.h.
	(TARGET_DEFAULT_TARGET_FLAGS, TARGET_HANDLE_OPTION): Override defaults.
	(frv_handle_option): New function.  Move -mcpu= handling from...
	(frv_override_options): ...here.  Remove handling of other
	TARGET_OPTIONS.
	(frv_ifcvt_modify_tests): Check !TARGET_COND_EXEC instead of
	TARGET_NO_COND_EXEC and !TARGET_NESTED_CE to TARGET_NO_NESTED_CE.
	(frv_ifcvt_modify_multiple_tests): Likewise !TARGET_MULTI_CE
	and TARGET_NO_MULTI_CE.
	(frv_for_each_packet): Likewise TARGET_NO_VLIW_BRANCH and
	!TARGET_VLIW_BRANCH.
	* config/frv/frv.opt: New file.

From-SVN: r96883
This commit is contained in:
Richard Sandiford 2005-03-22 19:19:18 +00:00 committed by Richard Sandiford
parent ba199a5345
commit 0b2c18fe79
5 changed files with 300 additions and 334 deletions

View File

@ -1,3 +1,48 @@
2005-03-22 Richard Sandiford <rsandifo@redhat.com>
* config/frv/frv-protos.h (frv_branch_cost_string, frv_branch_cost_int)
(frv_cpu_string, frv_condexec_insns_str, frv_condexec_insns)
(frv_condexec_temps_str, frv_condexec_temps, frv_sched_lookahead_str)
(frv_sched_lookahead): Delete.
* config/frv/frv.h (MASK_DEFAULT_ALLOC_CC): Move to frv.c.
(target_flags, MASK_GPR_32, MASK_FPR_32, MASK_SOFT_FLOAT)
(MASK_ALLOC_CC, MASK_DWORD, MASK_DOUBLE, MASK_MEDIA, MASK_MULADD)
(MASK_LIBPIC, MASK_ACC_4, MASK_PACK, MASK_LONG_CALLS)
(MASK_ALIGN_LABELS, MASK_LINKED_FP, MASK_BIG_TLS, MASK_DEBUG_ARG)
(MASK_DEBUG_ADDR, MASK_DEBUG_STACK, MASK_DEBUG, MASK_DEBUG_LOC)
(MASK_DEBUG_COND_EXEC, MASK_NO_COND_MOVE, MASK_NO_SCC)
(MASK_NO_COND_EXEC, MASK_NO_VLIW_BRANCH, MASK_NO_MULTI_CE)
(MASK_FDPIC, MASK_INLINE_PLT, MASK_GPREL_RO, MASK_DEFAULT)
(TARGET_GPR_32, TARGET_FPR_32, TARGET_SOFT_FLOAT, TARGET_ALLOC_CC)
(TARGET_DWORD, TARGET_DOUBLE, TARGET_MEDIA, TARGET_MULADD)
(TARGET_LIBPIC, TARGET_ACC_4, TARGET_DEBUG_ARG, TARGET_DEBUG_ADDR)
(TARGET_DEBUG_STACK, TARGET_DEBUG, TARGET_DEBUG_LOC)
(TARGET_DEBUG_COND_EXEC, TARGET_NO_COND_MOVE, TARGET_NO_SCC)
(TARGET_NO_COND_EXEC, TARGET_NO_VLIW_BRANCH, TARGET_NO_MULTI_CE)
(TARGET_NO_NESTED_CE, TARGET_FDPIC, TARGET_INLINE_PLT, TARGET_BIG_TLS)
(TARGET_GPREL_RO, TARGET_PACK, TARGET_LONG_CALLS, TARGET_ALIGN_LABELS)
(TARGET_LINKED_FP, TARGET_GPR_64, TARGET_FPR_64, TARGET_HARD_FLOAT)
(TARGET_FIXED_CC, TARGET_COND_MOVE, TARGET_SCC, TARGET_COND_EXEC)
(TARGET_VLIW_BRANCH, TARGET_MULTI_CE, TARGET_NESTED_CE, TARGET_ACC_8)
(TARGET_SWITCHES, TARGET_OPTIONS, DEFAULT_CONDEXEC_TEMPS)
(DEFAULT_BRANCH_COST, DEFAULT_CONDEXEC_INSNS): Delete.
* config/frv/frv.c (frv_branch_cost_string, frv_branch_cost_int)
(frv_cpu_string, frv_condexec_insns_str, frv_condexec_insns)
(frv_condexec_temps_str, frv_condexec_temps, frv_sched_lookahead_str)
(frv_sched_lookahead): Delete.
(MASK_DEFAULT_ALLOC_CC): Moved from frv.h.
(TARGET_DEFAULT_TARGET_FLAGS, TARGET_HANDLE_OPTION): Override defaults.
(frv_handle_option): New function. Move -mcpu= handling from...
(frv_override_options): ...here. Remove handling of other
TARGET_OPTIONS.
(frv_ifcvt_modify_tests): Check !TARGET_COND_EXEC instead of
TARGET_NO_COND_EXEC and !TARGET_NESTED_CE to TARGET_NO_NESTED_CE.
(frv_ifcvt_modify_multiple_tests): Likewise !TARGET_MULTI_CE
and TARGET_NO_MULTI_CE.
(frv_for_each_packet): Likewise TARGET_NO_VLIW_BRANCH and
!TARGET_VLIW_BRANCH.
* config/frv/frv.opt: New file.
2005-03-22 Kazu Hirata <kazu@cs.umass.edu>
* fold-const.c (fold_ternary): Take decomposed arguments of

View File

@ -20,25 +20,6 @@ along with GCC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Define the information needed to generate branch and scc insns. This is
stored from the compare operation. Note that we can't use "rtx" here
since it hasn't been defined! */
/* Define global data defined in frv.c. */
extern const char *frv_branch_cost_string; /* -mbranch-cost option */
extern int frv_branch_cost_int; /* value of -mbranch_cost */
extern const char *frv_cpu_string; /* -mcpu= option */
extern const char *frv_condexec_insns_str; /* -mcond-exec-insns= option */
extern int frv_condexec_insns; /* value of -mcond-exec-insns */
extern const char *frv_condexec_temps_str; /* -mcond-exec-temps= option */
extern int frv_condexec_temps; /* value of -mcond-exec-temps */
extern const char *frv_sched_lookahead_str; /* -msched-lookahead= option */
extern int frv_sched_lookahead; /* value -msched-lookahead= */
/* CPU type. This must be identical to the cpu enumeration in frv.md. */
typedef enum frv_cpu
{

View File

@ -247,27 +247,12 @@ enum reg_class reg_class_from_letter[256];
/* Cached value of frv_stack_info. */
static frv_stack_t *frv_stack_cache = (frv_stack_t *)0;
/* -mbranch-cost= support */
const char *frv_branch_cost_string;
int frv_branch_cost_int = DEFAULT_BRANCH_COST;
/* -mcpu= support */
const char *frv_cpu_string; /* -mcpu= option */
frv_cpu_t frv_cpu_type = CPU_TYPE; /* value of -mcpu= */
/* -mcond-exec-insns= support */
const char *frv_condexec_insns_str; /* -mcond-exec-insns= option */
int frv_condexec_insns = DEFAULT_CONDEXEC_INSNS; /* value of -mcond-exec-insns*/
/* -mcond-exec-temps= support */
const char *frv_condexec_temps_str; /* -mcond-exec-temps= option */
int frv_condexec_temps = DEFAULT_CONDEXEC_TEMPS; /* value of -mcond-exec-temps*/
/* -msched-lookahead=n */
const char *frv_sched_lookahead_str; /* -msched-lookahead=n */
int frv_sched_lookahead = 4; /* -msched-lookahead=n */
/* Forward references */
static bool frv_handle_option (size_t, const char *, int);
static int frv_default_flags_for_cpu (void);
static int frv_string_begins_with (tree, const char *);
static FRV_INLINE bool frv_small_data_reloc_p (rtx, int);
@ -380,6 +365,13 @@ static bool frv_must_pass_in_stack (enum machine_mode mode, tree type);
static int frv_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
tree, bool);
/* Allow us to easily change the default for -malloc-cc. */
#ifndef DEFAULT_NO_ALLOC_CC
#define MASK_DEFAULT_ALLOC_CC MASK_ALLOC_CC
#else
#define MASK_DEFAULT_ALLOC_CC 0
#endif
/* Initialize the GCC target structure. */
#undef TARGET_ASM_FUNCTION_PROLOGUE
#define TARGET_ASM_FUNCTION_PROLOGUE frv_function_prologue
@ -387,6 +379,17 @@ static int frv_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
#define TARGET_ASM_FUNCTION_EPILOGUE frv_function_epilogue
#undef TARGET_ASM_INTEGER
#define TARGET_ASM_INTEGER frv_assemble_integer
#undef TARGET_DEFAULT_TARGET_FLAGS
#define TARGET_DEFAULT_TARGET_FLAGS \
(MASK_DEFAULT_ALLOC_CC \
| MASK_COND_MOVE \
| MASK_SCC \
| MASK_COND_EXEC \
| MASK_VLIW_BRANCH \
| MASK_MULTI_CE \
| MASK_NESTED_CE)
#undef TARGET_HANDLE_OPTION
#define TARGET_HANDLE_OPTION frv_handle_option
#undef TARGET_INIT_BUILTINS
#define TARGET_INIT_BUILTINS frv_init_builtins
#undef TARGET_EXPAND_BUILTIN
@ -519,6 +522,41 @@ frv_cannot_force_const_mem (rtx x ATTRIBUTE_UNUSED)
return TARGET_FDPIC;
}
/* Implement TARGET_HANDLE_OPTION. */
static bool
frv_handle_option (size_t code, const char *arg, int value ATTRIBUTE_UNUSED)
{
switch (code)
{
case OPT_mcpu_:
if (strcmp (arg, "simple") == 0)
frv_cpu_type = FRV_CPU_SIMPLE;
else if (strcmp (arg, "tomcat") == 0)
frv_cpu_type = FRV_CPU_TOMCAT;
else if (strcmp (arg, "fr550") == 0)
frv_cpu_type = FRV_CPU_FR550;
else if (strcmp (arg, "fr500") == 0)
frv_cpu_type = FRV_CPU_FR500;
else if (strcmp (arg, "fr450") == 0)
frv_cpu_type = FRV_CPU_FR450;
else if (strcmp (arg, "fr405") == 0)
frv_cpu_type = FRV_CPU_FR405;
else if (strcmp (arg, "fr400") == 0)
frv_cpu_type = FRV_CPU_FR400;
else if (strcmp (arg, "fr300") == 0)
frv_cpu_type = FRV_CPU_FR300;
else if (strcmp (arg, "frv") == 0)
frv_cpu_type = FRV_CPU_GENERIC;
else
return false;
return true;
default:
return true;
}
}
static int
frv_default_flags_for_cpu (void)
{
@ -563,47 +601,6 @@ frv_override_options (void)
int regno;
unsigned int i;
/* Set the cpu type. */
if (frv_cpu_string)
{
if (strcmp (frv_cpu_string, "simple") == 0)
frv_cpu_type = FRV_CPU_SIMPLE;
else if (strcmp (frv_cpu_string, "tomcat") == 0)
frv_cpu_type = FRV_CPU_TOMCAT;
else if (strncmp (frv_cpu_string, "fr", sizeof ("fr")-1) != 0)
error ("Unknown cpu: -mcpu=%s", frv_cpu_string);
else
{
const char *p = frv_cpu_string + sizeof ("fr") - 1;
if (strcmp (p, "550") == 0)
frv_cpu_type = FRV_CPU_FR550;
else if (strcmp (p, "500") == 0)
frv_cpu_type = FRV_CPU_FR500;
else if (strcmp (p, "450") == 0)
frv_cpu_type = FRV_CPU_FR450;
else if (strcmp (p, "405") == 0)
frv_cpu_type = FRV_CPU_FR405;
else if (strcmp (p, "400") == 0)
frv_cpu_type = FRV_CPU_FR400;
else if (strcmp (p, "300") == 0)
frv_cpu_type = FRV_CPU_FR300;
else if (strcmp (p, "v") == 0)
frv_cpu_type = FRV_CPU_GENERIC;
else
error ("Unknown cpu: -mcpu=%s", frv_cpu_string);
}
}
target_flags |= (frv_default_flags_for_cpu () & ~target_flags_explicit);
/* -mlibrary-pic sets -fPIC and -G0 and also suppresses warnings from the
@ -620,22 +617,6 @@ frv_override_options (void)
}
}
/* Change the branch cost value. */
if (frv_branch_cost_string)
frv_branch_cost_int = atoi (frv_branch_cost_string);
/* Change the # of insns to be converted to conditional execution. */
if (frv_condexec_insns_str)
frv_condexec_insns = atoi (frv_condexec_insns_str);
/* Change # of temporary registers used to hold integer constants. */
if (frv_condexec_temps_str)
frv_condexec_temps = atoi (frv_condexec_temps_str);
/* Change scheduling look ahead. */
if (frv_sched_lookahead_str)
frv_sched_lookahead = atoi (frv_sched_lookahead_str);
/* A C expression whose value is a register class containing hard
register REGNO. In general there is more than one such class;
choose a class which is "minimal", meaning that no smaller class
@ -6793,8 +6774,8 @@ frv_ifcvt_modify_tests (ce_if_block_t *ce_info, rtx *p_true, rtx *p_false)
/* Make sure we are only dealing with hard registers. Also honor the
-mno-cond-exec switch, and -mno-nested-cond-exec switches if
applicable. */
if (!reload_completed || TARGET_NO_COND_EXEC
|| (TARGET_NO_NESTED_CE && ce_info->pass > 1))
if (!reload_completed || !TARGET_COND_EXEC
|| (!TARGET_NESTED_CE && ce_info->pass > 1))
goto fail;
/* Figure out which registers we can allocate for our own purposes. Only
@ -7153,7 +7134,7 @@ frv_ifcvt_modify_multiple_tests (ce_if_block_t *ce_info,
debug_rtx (*p_false);
}
if (TARGET_NO_MULTI_CE)
if (!TARGET_MULTI_CE)
goto fail;
if (GET_CODE (cr) != REG)
@ -8920,7 +8901,7 @@ frv_for_each_packet (void (*handle_packet) (void))
/* Early exit if we don't want to pack insns. */
if (!optimize
|| !flag_schedule_insns_after_reload
|| TARGET_NO_VLIW_BRANCH
|| !TARGET_VLIW_BRANCH
|| frv_packet.issue_rate == 1)
return false;

View File

@ -212,13 +212,6 @@
#define CPU_TYPE FRV_CPU_FR500
#endif
/* Allow us to easily change the default for -malloc-cc. */
#ifndef DEFAULT_NO_ALLOC_CC
#define MASK_DEFAULT_ALLOC_CC MASK_ALLOC_CC
#else
#define MASK_DEFAULT_ALLOC_CC 0
#endif
/* Run-time target specifications */
#define TARGET_CPU_CPP_BUILTINS() \
@ -275,104 +268,6 @@
while (0)
/* This declaration should be present. */
extern int target_flags;
/* This series of macros is to allow compiler command arguments to enable or
disable the use of optional features of the target machine. For example,
one machine description serves both the 68000 and the 68020; a command
argument tells the compiler whether it should use 68020-only instructions or
not. This command argument works by means of a macro `TARGET_68020' that
tests a bit in `target_flags'.
Define a macro `TARGET_FEATURENAME' for each such option. Its definition
should test a bit in `target_flags'; for example:
#define TARGET_68020 (target_flags & 1)
One place where these macros are used is in the condition-expressions of
instruction patterns. Note how `TARGET_68020' appears frequently in the
68000 machine description file, `m68k.md'. Another place they are used is
in the definitions of the other macros in the `MACHINE.h' file. */
#define MASK_GPR_32 0x00000001 /* Limit gprs to 32 registers */
#define MASK_FPR_32 0x00000002 /* Limit fprs to 32 registers */
#define MASK_SOFT_FLOAT 0x00000004 /* Use software floating point */
#define MASK_ALLOC_CC 0x00000008 /* Dynamically allocate icc/fcc's */
#define MASK_DWORD 0x00000010 /* Change ABi to allow dbl word insns*/
#define MASK_DOUBLE 0x00000020 /* Use double precision instructions */
#define MASK_MEDIA 0x00000040 /* Use media instructions */
#define MASK_MULADD 0x00000080 /* Use multiply add/subtract insns */
#define MASK_LIBPIC 0x00000100 /* -fpic that can be linked w/o pic */
#define MASK_ACC_4 0x00000200 /* Only use four media accumulators */
#define MASK_PACK 0x00000400 /* Set to enable packed output */
#define MASK_LONG_CALLS 0x00000800 /* Use indirect calls */
#define MASK_ALIGN_LABELS 0x00001000 /* Optimize label alignments */
#define MASK_LINKED_FP 0x00002000 /* Follow ABI linkage requirements. */
#define MASK_BIG_TLS 0x00008000 /* Assume a big TLS segment */
/* put debug masks up high */
#define MASK_DEBUG_ARG 0x40000000 /* debug argument handling */
#define MASK_DEBUG_ADDR 0x20000000 /* debug go_if_legitimate_address */
#define MASK_DEBUG_STACK 0x10000000 /* debug stack frame */
#define MASK_DEBUG 0x08000000 /* general debugging switch */
#define MASK_DEBUG_LOC 0x04000000 /* optimize line # table */
#define MASK_DEBUG_COND_EXEC 0x02000000 /* debug cond exec code */
#define MASK_NO_COND_MOVE 0x01000000 /* disable conditional moves */
#define MASK_NO_SCC 0x00800000 /* disable set conditional codes */
#define MASK_NO_COND_EXEC 0x00400000 /* disable conditional execution */
#define MASK_NO_VLIW_BRANCH 0x00200000 /* disable repacking branches */
#define MASK_NO_MULTI_CE 0x00100000 /* disable multi-level cond exec */
#define MASK_NO_NESTED_CE 0x00080000 /* disable nested cond exec */
#define MASK_FDPIC 0x00040000 /* Follow the new uClinux ABI. */
#define MASK_INLINE_PLT 0x00020000 /* Inline FDPIC PLTs. */
#define MASK_GPREL_RO 0x00010000 /* Use GPREL for read-only data. */
#define MASK_DEFAULT MASK_DEFAULT_ALLOC_CC
#define TARGET_GPR_32 ((target_flags & MASK_GPR_32) != 0)
#define TARGET_FPR_32 ((target_flags & MASK_FPR_32) != 0)
#define TARGET_SOFT_FLOAT ((target_flags & MASK_SOFT_FLOAT) != 0)
#define TARGET_ALLOC_CC ((target_flags & MASK_ALLOC_CC) != 0)
#define TARGET_DWORD ((target_flags & MASK_DWORD) != 0)
#define TARGET_DOUBLE ((target_flags & MASK_DOUBLE) != 0)
#define TARGET_MEDIA ((target_flags & MASK_MEDIA) != 0)
#define TARGET_MULADD ((target_flags & MASK_MULADD) != 0)
#define TARGET_LIBPIC ((target_flags & MASK_LIBPIC) != 0)
#define TARGET_ACC_4 ((target_flags & MASK_ACC_4) != 0)
#define TARGET_DEBUG_ARG ((target_flags & MASK_DEBUG_ARG) != 0)
#define TARGET_DEBUG_ADDR ((target_flags & MASK_DEBUG_ADDR) != 0)
#define TARGET_DEBUG_STACK ((target_flags & MASK_DEBUG_STACK) != 0)
#define TARGET_DEBUG ((target_flags & MASK_DEBUG) != 0)
#define TARGET_DEBUG_LOC ((target_flags & MASK_DEBUG_LOC) != 0)
#define TARGET_DEBUG_COND_EXEC ((target_flags & MASK_DEBUG_COND_EXEC) != 0)
#define TARGET_NO_COND_MOVE ((target_flags & MASK_NO_COND_MOVE) != 0)
#define TARGET_NO_SCC ((target_flags & MASK_NO_SCC) != 0)
#define TARGET_NO_COND_EXEC ((target_flags & MASK_NO_COND_EXEC) != 0)
#define TARGET_NO_VLIW_BRANCH ((target_flags & MASK_NO_VLIW_BRANCH) != 0)
#define TARGET_NO_MULTI_CE ((target_flags & MASK_NO_MULTI_CE) != 0)
#define TARGET_NO_NESTED_CE ((target_flags & MASK_NO_NESTED_CE) != 0)
#define TARGET_FDPIC ((target_flags & MASK_FDPIC) != 0)
#define TARGET_INLINE_PLT ((target_flags & MASK_INLINE_PLT) != 0)
#define TARGET_BIG_TLS ((target_flags & MASK_BIG_TLS) != 0)
#define TARGET_GPREL_RO ((target_flags & MASK_GPREL_RO) != 0)
#define TARGET_PACK ((target_flags & MASK_PACK) != 0)
#define TARGET_LONG_CALLS ((target_flags & MASK_LONG_CALLS) != 0)
#define TARGET_ALIGN_LABELS ((target_flags & MASK_ALIGN_LABELS) != 0)
#define TARGET_LINKED_FP ((target_flags & MASK_LINKED_FP) != 0)
#define TARGET_GPR_64 (! TARGET_GPR_32)
#define TARGET_FPR_64 (! TARGET_FPR_32)
#define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT)
#define TARGET_FIXED_CC (! TARGET_ALLOC_CC)
#define TARGET_COND_MOVE (! TARGET_NO_COND_MOVE)
#define TARGET_SCC (! TARGET_NO_SCC)
#define TARGET_COND_EXEC (! TARGET_NO_COND_EXEC)
#define TARGET_VLIW_BRANCH (! TARGET_NO_VLIW_BRANCH)
#define TARGET_MULTI_CE (! TARGET_NO_MULTI_CE)
#define TARGET_NESTED_CE (! TARGET_NO_NESTED_CE)
#define TARGET_ACC_8 (! TARGET_ACC_4)
#define TARGET_HAS_FPRS (TARGET_HARD_FLOAT || TARGET_MEDIA)
#define NUM_GPRS (TARGET_GPR_32? 32 : 64)
@ -420,122 +315,6 @@ extern int target_flags;
#define HAVE_AS_TLS 0
#endif
/* This macro defines names of command options to set and clear bits in
`target_flags'. Its definition is an initializer with a subgrouping for
each command option.
Each subgrouping contains a string constant, that defines the option name,
a number, which contains the bits to set in `target_flags', and an optional
second string which is the textual description that will be displayed when
the user passes --help on the command line. If the number entry is negative
then the specified bits will be cleared instead of being set. If the second
string entry is present but empty, then no help information will be displayed
for that option, but it will not count as an undocumented option. The actual
option name, asseen on the command line is made by appending `-m' to the
specified name.
One of the subgroupings should have a null string. The number in this
grouping is the default value for `target_flags'. Any target options act
starting with that value.
Here is an example which defines `-m68000' and `-m68020' with opposite
meanings, and picks the latter as the default:
#define TARGET_SWITCHES \
{ { "68020", 1, ""}, \
{ "68000", -1, "Compile for the m68000"}, \
{ "", 1, }}
This declaration must be present. */
#define TARGET_SWITCHES \
{{ "gpr-32", MASK_GPR_32, "Only use 32 gprs"}, \
{ "gpr-64", -MASK_GPR_32, "Use 64 gprs"}, \
{ "fpr-32", MASK_FPR_32, "Only use 32 fprs"}, \
{ "fpr-64", -MASK_FPR_32, "Use 64 fprs"}, \
{ "hard-float", -MASK_SOFT_FLOAT, "Use hardware floating point" },\
{ "soft-float", MASK_SOFT_FLOAT, "Use software floating point" },\
{ "alloc-cc", MASK_ALLOC_CC, "Dynamically allocate cc's" }, \
{ "fixed-cc", -MASK_ALLOC_CC, "Just use icc0/fcc0" }, \
{ "dword", MASK_DWORD, "Change ABI to allow double word insns" }, \
{ "no-dword", -MASK_DWORD, "Do not use double word insns" }, \
{ "double", MASK_DOUBLE, "Use fp double instructions" }, \
{ "no-double", -MASK_DOUBLE, "Do not use fp double insns" }, \
{ "media", MASK_MEDIA, "Use media instructions" }, \
{ "no-media", -MASK_MEDIA, "Do not use media insns" }, \
{ "muladd", MASK_MULADD, "Use multiply add/subtract instructions" }, \
{ "no-muladd", -MASK_MULADD, "Do not use multiply add/subtract insns" }, \
{ "ultilib-library-pic", 0, "Link with the library-pic libraries" }, \
{ "library-pic", MASK_LIBPIC, "PIC support for building libraries" }, \
{ "acc-4", MASK_ACC_4, "Use 4 media accumulators" }, \
{ "acc-8", -MASK_ACC_4, "Use 8 media accumulators" }, \
{ "pack", MASK_PACK, "Pack VLIW instructions" }, \
{ "no-pack", -MASK_PACK, "Do not pack VLIW instructions" }, \
{ "no-eflags", 0, "Do not mark ABI switches in e_flags" }, \
{ "debug-arg", MASK_DEBUG_ARG, "Internal debug switch" }, \
{ "debug-addr", MASK_DEBUG_ADDR, "Internal debug switch" }, \
{ "debug-stack", MASK_DEBUG_STACK, "Internal debug switch" }, \
{ "debug", MASK_DEBUG, "Internal debug switch" }, \
{ "debug-cond-exec", MASK_DEBUG_COND_EXEC, "Internal debug switch" }, \
{ "debug-loc", MASK_DEBUG_LOC, "Internal debug switch" }, \
{ "align-labels", MASK_ALIGN_LABELS, "Enable label alignment optimizations" }, \
{ "no-align-labels", -MASK_ALIGN_LABELS, "Disable label alignment optimizations" }, \
{ "cond-move", -MASK_NO_COND_MOVE, "Enable conditional moves" }, \
{ "no-cond-move", MASK_NO_COND_MOVE, "Disable conditional moves" }, \
{ "scc", -MASK_NO_SCC, "Enable setting gprs to the result of comparisons" }, \
{ "no-scc", MASK_NO_SCC, "Disable setting gprs to the result of comparisons" }, \
{ "cond-exec", -MASK_NO_COND_EXEC, "Enable conditional execution other than moves/scc" }, \
{ "no-cond-exec", MASK_NO_COND_EXEC, "Disable conditional execution other than moves/scc" }, \
{ "vliw-branch", -MASK_NO_VLIW_BRANCH, "Run pass to pack branches into VLIW insns" }, \
{ "no-vliw-branch", MASK_NO_VLIW_BRANCH, "Do not run pass to pack branches into VLIW insns" }, \
{ "multi-cond-exec", -MASK_NO_MULTI_CE, "Disable optimizing &&/|| in conditional execution" }, \
{ "no-multi-cond-exec", MASK_NO_MULTI_CE, "Enable optimizing &&/|| in conditional execution" }, \
{ "nested-cond-exec", -MASK_NO_NESTED_CE, "Enable nested conditional execution optimizations" }, \
{ "no-nested-cond-exec" ,MASK_NO_NESTED_CE, "Disable nested conditional execution optimizations" }, \
{ "long-calls", MASK_LONG_CALLS, "Disallow direct calls to global functions" }, \
{ "no-long-calls", -MASK_LONG_CALLS, "Allow direct calls to global functions" }, \
{ "linked-fp", MASK_LINKED_FP, "Follow the EABI linkage requirements" }, \
{ "no-linked-fp", -MASK_LINKED_FP, "Don't follow the EABI linkage requirements" }, \
{ "fdpic", MASK_FDPIC, "Enable file descriptor PIC mode" }, \
{ "no-fdpic", -MASK_FDPIC, "Disable file descriptor PIC mode" }, \
{ "inline-plt", MASK_INLINE_PLT, "Enable inlining of PLT in function calls" }, \
{ "no-inline-plt", -MASK_INLINE_PLT, "Disable inlining of PLT in function calls" }, \
{ "TLS", MASK_BIG_TLS, "Assume a large TLS segment" }, \
{ "tls", -MASK_BIG_TLS, "Do not assume a large TLS segment" }, \
{ "gprel-ro", MASK_GPREL_RO, "Enable use of GPREL for read-only data in FDPIC" }, \
{ "no-gprel-ro", -MASK_GPREL_RO, "Disable use of GPREL for read-only data in FDPIC" }, \
{ "tomcat-stats", 0, "Cause gas to print tomcat statistics" }, \
{ "", MASK_DEFAULT, "" }} \
/* This macro is similar to `TARGET_SWITCHES' but defines names of command
options that have values. Its definition is an initializer with a
subgrouping for each command option.
Each subgrouping contains a string constant, that defines the fixed part of
the option name, the address of a variable, and an optional description string.
The variable, of type `char *', is set to the text following the fixed part of
the option as it is specified on the command line. The actual option name is
made by appending `-m' to the specified name.
Here is an example which defines `-mshort-data-NUMBER'. If the given option
is `-mshort-data-512', the variable `m88k_short_data' will be set to the
string `"512"'.
extern char *m88k_short_data;
#define TARGET_OPTIONS \
{ { "short-data-", & m88k_short_data, \
"Specify the size of the short data section" } }
This declaration is optional. */
#define TARGET_OPTIONS \
{ \
{ "cpu=", &frv_cpu_string, "Set cpu type", 0}, \
{ "branch-cost=", &frv_branch_cost_string, "Internal debug switch", 0}, \
{ "cond-exec-insns=", &frv_condexec_insns_str, "Internal debug switch", 0}, \
{ "cond-exec-temps=", &frv_condexec_temps_str, "Internal debug switch", 0}, \
{ "sched-lookahead=", &frv_sched_lookahead_str,"Internal debug switch", 0}, \
}
/* This macro is a C statement to print on `stderr' a string describing the
particular machine description choice. Every machine description should
define `TARGET_VERSION'. For example:
@ -819,7 +598,6 @@ extern int target_flags;
#define FPR_FIRST 64 /* First FP reg */
#define FPR_LAST 127 /* Last FP reg */
#define DEFAULT_CONDEXEC_TEMPS 4 /* reserve 4 regs by default */
#define GPR_TEMP_NUM frv_condexec_temps /* # gprs to reserve for temps */
/* We reserve the last CR and CCR in each category to be used as a reload
@ -2444,18 +2222,6 @@ do { \
/* A C expression for the cost of a branch instruction. A value of 1 is the
default; other values are interpreted relative to that. */
/* Here are additional macros which do not specify precise relative costs, but
only that certain actions are more expensive than GCC would ordinarily
expect. */
/* We used to default the branch cost to 2, but I changed it to 1, to avoid
generating SCC instructions and or/and-ing them together, and then doing the
branch on the result, which collectively generate much worse code. */
#ifndef DEFAULT_BRANCH_COST
#define DEFAULT_BRANCH_COST 1
#endif
#define BRANCH_COST frv_branch_cost_int
/* Define this macro as a C expression which is nonzero if accessing less than
@ -3161,9 +2927,6 @@ do { \
cc0, and 1 if it does use cc0. */
#define MAX_CONDITIONAL_EXECUTE frv_condexec_insns
/* Default value of MAX_CONDITIONAL_EXECUTE if no -mcond-exec-insns= */
#define DEFAULT_CONDEXEC_INSNS 8
/* A C expression to modify the code described by the conditional if
information CE_INFO, possibly updating the tests in TRUE_EXPR, and
FALSE_EXPR for converting if-then and if-then-else code to conditional

196
gcc/config/frv/frv.opt Normal file
View File

@ -0,0 +1,196 @@
; Options for the FR-V port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 2, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING. If not, write to the Free
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.
macc-4
Target Report RejectNegative Mask(ACC_4)
Use 4 media accumulators
macc-8
Target Report RejectNegative InverseMask(ACC_4, ACC_8)
Use 8 media accumulators
malign-labels
Target Report Mask(ALIGN_LABELS)
Enable label alignment optimizations
malloc-cc
Target Report RejectNegative Mask(ALLOC_CC)
Dynamically allocate cc registers
; We used to default the branch cost to 2, but it was changed it to 1 to avoid
; generating SCC instructions and or/and-ing them together, and then doing the
; branch on the result, which collectively generate much worse code.
mbranch-cost=
Target RejectNegative Joined UInteger Var(frv_branch_cost_int) Init(1)
Set the cost of branches
mcond-exec
Target Report Mask(COND_EXEC)
Enable conditional execution other than moves/scc
mcond-exec-insns=
Target RejectNegative Joined UInteger Var(frv_condexec_insns) Init(8)
Change the maximum length of conditionally-executed sequences
mcond-exec-temps=
Target RejectNegative Joined UInteger Var(frv_condexec_temps) Init(4)
Change the number of temporary registers that are available to conditionally-executed sequences
mcond-move
Target Report Mask(COND_MOVE)
Enable conditional moves
mcpu=
Target RejectNegative Joined
Set the target CPU type
mdebug
Target Undocumented Var(TARGET_DEBUG)
mdebug-arg
Target Undocumented Var(TARGET_DEBUG_ARG)
mdebug-addr
Target Undocumented Var(TARGET_DEBUG_ADDR)
mdebug-cond-exec
Target Undocumented Var(TARGET_DEBUG_COND_EXEC)
mdebug-loc
Target Undocumented Var(TARGET_DEBUG_LOC)
mdebug-stack
Target Undocumented Var(TARGET_DEBUG_STACK)
mdouble
Target Report Mask(DOUBLE)
Use fp double instructions
mdword
Target Report Mask(DWORD)
Change the ABI to allow double word insns
mfdpic
Target Report Mask(FDPIC)
Enable Function Descriptor PIC mode
mfixed-cc
Target Report RejectNegative InverseMask(ALLOC_CC, FIXED_CC)
Just use icc0/fcc0
mfpr-32
Target Report RejectNegative Mask(FPR_32)
Only use 32 FPRs
mfpr-64
Target Report RejectNegative InverseMask(FPR_32, FPR_64)
Use 64 FPRs
mgpr-32
Target Report RejectNegative Mask(GPR_32)
Only use 32 GPRs
mgpr-64
Target Report RejectNegative InverseMask(GPR_32, GPR_64)
Use 64 GPRs
mgprel-ro
Target Report Mask(GPREL_RO)
Enable use of GPREL for read-only data in FDPIC
mhard-float
Target Report RejectNegative InverseMask(SOFT_FLOAT, HARD_FLOAT)
Use hardware floating point
minline-plt
Target Report Mask(INLINE_PLT)
Enable inlining of PLT in function calls
mlibrary-pic
Target Report Mask(LIBPIC)
Enable PIC support for building libraries
mlinked-fp
Target Report Mask(LINKED_FP)
Follow the EABI linkage requirements
mlong-calls
Target Report Mask(LONG_CALLS)
Disallow direct calls to global functions
mmedia
Target Report Mask(MEDIA)
Use media instructions
mmuladd
Target Report Mask(MULADD)
Use multiply add/subtract instructions
mmulti-cond-exec
Target Report Mask(MULTI_CE)
Enable optimizing &&/|| in conditional execution
mnested-cond-exec
Target Report Mask(NESTED_CE)
Enable nested conditional execution optimizations
; Not used by the compiler proper.
mno-eflags
Target RejectNegative
Do not mark ABI switches in e_flags
mpack
Target Report Mask(PACK)
Pack VLIW instructions
mscc
Target Report Mask(SCC)
Enable setting GPRs to the result of comparisons
msched-lookahead=
Target RejectNegative Joined UInteger Var(frv_sched_lookahead) Init(4)
Change the amount of scheduler lookahead
msoft-float
Target Report RejectNegative Mask(SOFT_FLOAT)
Use software floating point
mTLS
Target Report RejectNegative Mask(BIG_TLS)
Assume a large TLS segment
mtls
Target Report RejectNegative InverseMask(BIG_TLS)
Do not assume a large TLS segment
; Not used by the compiler proper.
mtomcat-stats
Target
Cause gas to print tomcat statistics
; Not used by the compiler proper.
multilib-library-pic
Target RejectNegative
Link with the library-pic libraries
mvliw-branch
Target Report Mask(VLIW_BRANCH)
Allow branches to be packed with other instructions