From 97b73103c46af5f6d81365e0edea4cfe1bbc3b33 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 29 Mar 2005 17:32:06 +0000 Subject: [PATCH] little.h (TARGET_ENDIAN_DEFAULT): Delete. * config/m32r/little.h (TARGET_ENDIAN_DEFAULT): Delete. (TARGET_LITTLE_ENDIAN): New macro. * config/m32r/m32r.h (SUBTARGET_SWITCHES, target_flags) (TARGET_RELAX_MASK, TARGET_DEBUG_MASK, TARGET_DEBUG) (TARGET_ALIGN_LOOPS_MASK, TARGET_ALIGN_LOOPS) (TARGET_LOW_ISSUE_RATE_MASK, TARGET_LOW_ISSUE_RATE) (TARGET_BRANCH_COST_MASK, TARGET_BRANCH_COST, TARGET_M32RX_MASK) (TARGET_M32RX, TARGET_M32R2_MASK, TARGET_M32R2, LITTLE_ENDIAN_BIT) (TARGET_ENDIAN_DEFAULT, SUBTARGET_SWITCHES, TARGET_DEFAULT) (TARGET_SWITCHES, m32r_model_string, m32r_sdata_string) (m32r_cache_flush_trap_string, SUBTARGET_OPTIONS) (TARGET_OPTIONS): Delete. (M32R_MODEL_DEFAULT, M32R_SDATA_DEFAULT): Turn into enums. (CACHE_FLUSH_TRAP): Turn into an integer. (TARGET_LITTLE_ENDIAN): Define to 0 by default. (INITIALIZE_TRAMPOLINE): Check m32r_cache_trap >= 0 to see if -mflush-trap is in use. * config/m32r/m32r.c (m32r_model_string, m32r_sdata_string) (m32r_cache_flush_trap_string): Delete. (m32r_model) Initialize to M32R_MODEL_DEFAULT. (m32r_sdata): Likewise M32R_SDATA_DEFAULT. (m32r_cache_trap): Likewise CACHE_FLUSH_TRAP. (TARGET_DEFAULT_TARGET_FLAGS, TARGET_HANDLE_OPTION): Override defaults. (m32r_handle_option): New function. Move -mflush-trap=, -mflush-func=, -mmodel= and -msdata= handling from... (m32r_init): ...here. * config/m32r/m32r.opt: New file. From-SVN: r97194 --- gcc/ChangeLog | 30 ++++++++++ gcc/config/m32r/little.h | 2 +- gcc/config/m32r/m32r.c | 106 +++++++++++++++++++++------------ gcc/config/m32r/m32r.h | 124 +++------------------------------------ gcc/config/m32r/m32r.opt | 83 ++++++++++++++++++++++++++ 5 files changed, 189 insertions(+), 156 deletions(-) create mode 100644 gcc/config/m32r/m32r.opt diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0d5849a489a..bce6703d449 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,33 @@ +2005-03-29 Richard Sandiford + + * config/m32r/little.h (TARGET_ENDIAN_DEFAULT): Delete. + (TARGET_LITTLE_ENDIAN): New macro. + * config/m32r/m32r.h (SUBTARGET_SWITCHES, target_flags) + (TARGET_RELAX_MASK, TARGET_DEBUG_MASK, TARGET_DEBUG) + (TARGET_ALIGN_LOOPS_MASK, TARGET_ALIGN_LOOPS) + (TARGET_LOW_ISSUE_RATE_MASK, TARGET_LOW_ISSUE_RATE) + (TARGET_BRANCH_COST_MASK, TARGET_BRANCH_COST, TARGET_M32RX_MASK) + (TARGET_M32RX, TARGET_M32R2_MASK, TARGET_M32R2, LITTLE_ENDIAN_BIT) + (TARGET_ENDIAN_DEFAULT, SUBTARGET_SWITCHES, TARGET_DEFAULT) + (TARGET_SWITCHES, m32r_model_string, m32r_sdata_string) + (m32r_cache_flush_trap_string, SUBTARGET_OPTIONS) + (TARGET_OPTIONS): Delete. + (M32R_MODEL_DEFAULT, M32R_SDATA_DEFAULT): Turn into enums. + (CACHE_FLUSH_TRAP): Turn into an integer. + (TARGET_LITTLE_ENDIAN): Define to 0 by default. + (INITIALIZE_TRAMPOLINE): Check m32r_cache_trap >= 0 to see if + -mflush-trap is in use. + * config/m32r/m32r.c (m32r_model_string, m32r_sdata_string) + (m32r_cache_flush_trap_string): Delete. + (m32r_model) Initialize to M32R_MODEL_DEFAULT. + (m32r_sdata): Likewise M32R_SDATA_DEFAULT. + (m32r_cache_trap): Likewise CACHE_FLUSH_TRAP. + (TARGET_DEFAULT_TARGET_FLAGS, TARGET_HANDLE_OPTION): Override defaults. + (m32r_handle_option): New function. Move -mflush-trap=, -mflush-func=, + -mmodel= and -msdata= handling from... + (m32r_init): ...here. + * config/m32r/m32r.opt: New file. + 2005-03-29 Keith Besaw * tree-ssanames.c (duplicate_ssa_name_ptr_info): New function. diff --git a/gcc/config/m32r/little.h b/gcc/config/m32r/little.h index 9c1b0b5a72c..f4dfbcd2bd3 100644 --- a/gcc/config/m32r/little.h +++ b/gcc/config/m32r/little.h @@ -19,7 +19,7 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define TARGET_ENDIAN_DEFAULT LITTLE_ENDIAN_BIT +#define TARGET_LITTLE_ENDIAN 1 #define CPP_ENDIAN_SPEC \ " %{mbe:-D__BIG_ENDIAN__} %{mbig-endian:-D__BIG_ENDIAN__}" \ diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index dd86186d56d..ee3f0039cf4 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -51,12 +51,10 @@ rtx m32r_compare_op0, m32r_compare_op1; char m32r_punct_chars[256]; /* Selected code model. */ -const char * m32r_model_string = M32R_MODEL_DEFAULT; -enum m32r_model m32r_model; +enum m32r_model m32r_model = M32R_MODEL_DEFAULT; /* Selected SDA support. */ -const char * m32r_sdata_string = M32R_SDATA_DEFAULT; -enum m32r_sdata m32r_sdata; +enum m32r_sdata m32r_sdata = M32R_SDATA_DEFAULT; /* Machine-specific symbol_ref flags. */ #define SYMBOL_FLAG_MODEL_SHIFT SYMBOL_FLAG_MACH_DEP_SHIFT @@ -69,17 +67,17 @@ enum m32r_sdata m32r_sdata; /* Cache-flush support. Cache-flush is used at trampoline. Default cache-flush is "trap 12". default cache-flush function is "_flush_cache" (CACHE_FLUSH_FUNC) - default cache-flush trap-interrupt number is "12". (CACHE_FLUSH_TRAP) + default cache-flush trap-interrupt number is 12 (CACHE_FLUSH_TRAP) You can change how to generate code of cache-flush with following options. - -flush-func=FLUSH-FUNC-NAME - -no-flush-func - -fluch-trap=TRAP-NUMBER - -no-flush-trap. */ + -mflush-func=FLUSH-FUNC-NAME + -mno-flush-func (sets m32r_cache_flush_func to NULL) + -mfluch-trap=TRAP-NUMBER + -mno-flush-trap. (sets m32r_cache_flush_trap to -1). */ const char *m32r_cache_flush_func = CACHE_FLUSH_FUNC; -const char *m32r_cache_flush_trap_string = CACHE_FLUSH_TRAP; -int m32r_cache_flush_trap = 12; +int m32r_cache_flush_trap = CACHE_FLUSH_TRAP; /* Forward declaration. */ +static bool m32r_handle_option (size_t, const char *, int); static void init_reg_tables (void); static void block_move_call (rtx, rtx, rtx); static int m32r_is_insn (rtx); @@ -127,6 +125,11 @@ static int m32r_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, #undef TARGET_SCHED_ISSUE_RATE #define TARGET_SCHED_ISSUE_RATE m32r_issue_rate +#undef TARGET_DEFAULT_TARGET_FLAGS +#define TARGET_DEFAULT_TARGET_FLAGS TARGET_CPU_DEFAULT +#undef TARGET_HANDLE_OPTION +#define TARGET_HANDLE_OPTION m32r_handle_option + #undef TARGET_ENCODE_SECTION_INFO #define TARGET_ENCODE_SECTION_INFO m32r_encode_section_info #undef TARGET_IN_SMALL_DATA_P @@ -152,6 +155,60 @@ static int m32r_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, struct gcc_target targetm = TARGET_INITIALIZER; +/* Implement TARGET_HANDLE_OPTION. */ + +static bool +m32r_handle_option (size_t code, const char *arg, int value) +{ + switch (code) + { + case OPT_m32r: + target_flags &= ~(MASK_M32R2 | MASK_M32RX); + return true; + + case OPT_mmodel_: + if (strcmp (arg, "small") == 0) + m32r_model = M32R_MODEL_SMALL; + else if (strcmp (arg, "medium") == 0) + m32r_model = M32R_MODEL_MEDIUM; + else if (strcmp (arg, "large") == 0) + m32r_model = M32R_MODEL_LARGE; + else + return false; + return true; + + case OPT_msdata_: + if (strcmp (arg, "none") == 0) + m32r_sdata = M32R_SDATA_NONE; + else if (strcmp (arg, "sdata") == 0) + m32r_sdata = M32R_SDATA_SDATA; + else if (strcmp (arg, "use") == 0) + m32r_sdata = M32R_SDATA_USE; + else + return false; + return true; + + case OPT_mflush_func_: + m32r_cache_flush_func = arg; + return true; + + case OPT_mno_flush_func: + m32r_cache_flush_func = NULL; + return true; + + case OPT_mflush_trap_: + m32r_cache_flush_trap = value; + return m32r_cache_flush_trap <= 15; + + case OPT_mno_flush_trap: + m32r_cache_flush_trap = -1; + return true; + + default: + return true; + } +} + /* Called by OVERRIDE_OPTIONS to initialize various things. */ void @@ -167,33 +224,6 @@ m32r_init (void) /* Provide default value if not specified. */ if (!g_switch_set) g_switch_value = SDATA_DEFAULT_SIZE; - - if (strcmp (m32r_model_string, "small") == 0) - m32r_model = M32R_MODEL_SMALL; - else if (strcmp (m32r_model_string, "medium") == 0) - m32r_model = M32R_MODEL_MEDIUM; - else if (strcmp (m32r_model_string, "large") == 0) - m32r_model = M32R_MODEL_LARGE; - else - error ("bad value (%s) for -mmodel switch", m32r_model_string); - - if (strcmp (m32r_sdata_string, "none") == 0) - m32r_sdata = M32R_SDATA_NONE; - else if (strcmp (m32r_sdata_string, "sdata") == 0) - m32r_sdata = M32R_SDATA_SDATA; - else if (strcmp (m32r_sdata_string, "use") == 0) - m32r_sdata = M32R_SDATA_USE; - else - error ("bad value (%s) for -msdata switch", m32r_sdata_string); - - if (m32r_cache_flush_trap_string) - { - /* Change trap-number (12) for cache-flush to the others (0 - 15). */ - m32r_cache_flush_trap = atoi (m32r_cache_flush_trap_string); - if (m32r_cache_flush_trap < 0 || m32r_cache_flush_trap > 15) - error ("bad value (%s) for -flush-trap=n (0== 0) \ emit_insn (gen_flush_icache (validize_mem (gen_rtx_MEM (SImode, TRAMP)),\ GEN_INT (m32r_cache_flush_trap) )); \ else if (m32r_cache_flush_func && m32r_cache_flush_func[0]) \ diff --git a/gcc/config/m32r/m32r.opt b/gcc/config/m32r/m32r.opt new file mode 100644 index 00000000000..73287852bb5 --- /dev/null +++ b/gcc/config/m32r/m32r.opt @@ -0,0 +1,83 @@ +; Options for the Renesas M32R 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. + +m32rx +Target Report RejectNegative Mask(M32RX) +Compile for the m32rx + +m32r2 +Target Report RejectNegative Mask(M32R2) +Compile for the m32r2 + +m32r +Target RejectNegative +Compile for the m32r + +malign-loops +Target Report Mask(ALIGN_LOOPS) +Align all loops to 32 byte boundary + +mbranch-cost=1 +Target Report RejectNegative Mask(BRANCH_COST) +Prefer branches over conditional execution + +mbranch-cost=2 +Target Report RejectNegative InverseMask(BRANCH_COST) +Give branches their default cost + +mdebug +Target Mask(DEBUG) +Display compile time statistics + +mflush-func= +Target RejectNegative Joined +Specify cache flush function + +mflush-trap= +Target RejectNegative Joined UInteger +Specify cache flush trap number + +missue-rate=1 +Target Report RejectNegative Mask(LOW_ISSUE_RATE) +Only issue one instruction per cycle + +missue-rate=2 +Target Report RejectNegative InverseMask(LOW_ISSUE_RATE) +Allow two instructions to be issued per cycle + +mmodel= +Target RejectNegative Joined +Code size: small, medium or large + +mno-flush-func +Target RejectNegative +Don't call any cache flush functions + +mno-flush-trap +Target RejectNegative +Don't call any cache flush trap + +; mrelax +; Target Mask(RELAX) + +msdata= +Target RejectNegative Joined +Small data area: none, sdata, use