diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-04-05 12:28:41 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-04-05 12:28:41 +0000 |
commit | 8cb00d70d36966a59fdcbb76439fc2cd9e965276 (patch) | |
tree | 912285a69e7c732c6efe87efbd2432dd41d8de5e /gcc/config | |
parent | 52fd37831a15c845d0d0f693e54ff471fc836ca1 (diff) | |
download | gcc-8cb00d70d36966a59fdcbb76439fc2cd9e965276.tar.gz |
* config/rx/rx-opts.h: New.
* config/rx/rx.c (rx_cpu_type): Remove.
(rx_handle_option): Don't assert that global structures are in
use. Access variables via opts pointer. Defer most handling of
OPT_mint_register_. Use error_at.
(rx_option_override): Handle deferred OPT_mint_register_ here.
* config/rx/rx.h (enum rx_cpu_types): Move to rx-opts.h.
* config/rx/rx.opt (config/rx/rx-opts.h: New HeaderInclude.
(mcpu=): Use Enum and specifiy rx_cpu_type with Var.
(rx_cpu_types): New Enum and EnumValue entries.
(mint-register=): Use Defer and use Var accordingly.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171984 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/rx/rx-opts.h | 30 | ||||
-rw-r--r-- | gcc/config/rx/rx.c | 86 | ||||
-rw-r--r-- | gcc/config/rx/rx.h | 9 | ||||
-rw-r--r-- | gcc/config/rx/rx.opt | 19 |
4 files changed, 95 insertions, 49 deletions
diff --git a/gcc/config/rx/rx-opts.h b/gcc/config/rx/rx-opts.h new file mode 100644 index 00000000000..a1d071be242 --- /dev/null +++ b/gcc/config/rx/rx-opts.h @@ -0,0 +1,30 @@ +/* GCC option-handling definitions for the Renesas RX processor. + Copyright (C) 2008, 2009, 2010, 2011 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 3, 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 COPYING3. If not see + <http://www.gnu.org/licenses/>. */ + +#ifndef RX_OPTS_H +#define RX_OPTS_H + +enum rx_cpu_types +{ + RX600, + RX610, + RX200 +}; + +#endif diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c index f0a97abd500..4d16cc3cab0 100644 --- a/gcc/config/rx/rx.c +++ b/gcc/config/rx/rx.c @@ -62,8 +62,6 @@ static void rx_print_operand (FILE *, rtx, int); static unsigned int flags_from_mode (enum machine_mode mode); static unsigned int flags_from_code (enum rtx_code code); - -enum rx_cpu_types rx_cpu_type = RX600; /* Return true if OP is a reference to an object in a small data area. */ @@ -2268,39 +2266,20 @@ const struct attribute_spec rx_attribute_table[] = /* Extra processing for target specific command line options. */ static bool -rx_handle_option (struct gcc_options *opts, struct gcc_options *opts_set, +rx_handle_option (struct gcc_options *opts, + struct gcc_options *opts_set ATTRIBUTE_UNUSED, const struct cl_decoded_option *decoded, - location_t loc ATTRIBUTE_UNUSED) + location_t loc) { size_t code = decoded->opt_index; - const char *arg = decoded->arg; int value = decoded->value; - gcc_assert (opts == &global_options); - gcc_assert (opts_set == &global_options_set); - switch (code) { case OPT_mint_register_: - switch (value) - { - case 4: - fixed_regs[10] = call_used_regs [10] = 1; - /* Fall through. */ - case 3: - fixed_regs[11] = call_used_regs [11] = 1; - /* Fall through. */ - case 2: - fixed_regs[12] = call_used_regs [12] = 1; - /* Fall through. */ - case 1: - fixed_regs[13] = call_used_regs [13] = 1; - /* Fall through. */ - case 0: - return true; - default: - return false; - } + /* Make sure that the -mint-register option is in range. Other + handling in rx_option_override. */ + return value >= 0 && value <= 4; break; case OPT_mmax_constant_size_: @@ -2308,20 +2287,13 @@ rx_handle_option (struct gcc_options *opts, struct gcc_options *opts_set, return value >= 0 && value <= 4; case OPT_mcpu_: - if (strcmp (arg, "rx610") == 0) - rx_cpu_type = RX610; - else if (strcmp (arg, "rx200") == 0) - { - target_flags |= MASK_NO_USE_FPU; - rx_cpu_type = RX200; - } - else if (strcmp (arg, "rx600") != 0) - warning (0, "unrecognized argument '%s' to -mcpu= option", arg); + if ((enum rx_cpu_types) value == RX200) + opts->x_target_flags |= MASK_NO_USE_FPU; break; case OPT_fpu: - if (rx_cpu_type == RX200) - error ("the RX200 cpu does not have FPU hardware"); + if (opts->x_rx_cpu_type == RX200) + error_at (loc, "the RX200 cpu does not have FPU hardware"); break; default: @@ -2361,6 +2333,44 @@ rx_override_options_after_change (void) static void rx_option_override (void) { + unsigned int i; + cl_deferred_option *opt; + VEC(cl_deferred_option,heap) *vec + = (VEC(cl_deferred_option,heap) *) rx_deferred_options; + + FOR_EACH_VEC_ELT (cl_deferred_option, vec, i, opt) + { + switch (opt->opt_index) + { + case OPT_mint_register_: + switch (opt->value) + { + case 4: + fixed_regs[10] = call_used_regs [10] = 1; + /* Fall through. */ + case 3: + fixed_regs[11] = call_used_regs [11] = 1; + /* Fall through. */ + case 2: + fixed_regs[12] = call_used_regs [12] = 1; + /* Fall through. */ + case 1: + fixed_regs[13] = call_used_regs [13] = 1; + /* Fall through. */ + case 0: + break; + default: + /* Error message already given because rx_handle_option + returned false. */ + break; + } + break; + + default: + gcc_unreachable (); + } + } + /* This target defaults to strict volatile bitfields. */ if (flag_strict_volatile_bitfields < 0) flag_strict_volatile_bitfields = 1; diff --git a/gcc/config/rx/rx.h b/gcc/config/rx/rx.h index 14b13d95559..c4436d70e4a 100644 --- a/gcc/config/rx/rx.h +++ b/gcc/config/rx/rx.h @@ -52,15 +52,6 @@ } \ while (0) -enum rx_cpu_types -{ - RX600, - RX610, - RX200 -}; - -extern enum rx_cpu_types rx_cpu_type; - #undef CC1_SPEC #define CC1_SPEC "\ %{mas100-syntax:%{gdwarf*:%e-mas100-syntax is incompatible with -gdwarf}} \ diff --git a/gcc/config/rx/rx.opt b/gcc/config/rx/rx.opt index 99f262c0773..b51ca3f677c 100644 --- a/gcc/config/rx/rx.opt +++ b/gcc/config/rx/rx.opt @@ -19,6 +19,9 @@ ; <http://www.gnu.org/licenses/>. ;--------------------------------------------------- +HeaderInclude +config/rx/rx-opts.h + ; The default is -fpu -m32bit-doubles. m64bit-doubles @@ -43,9 +46,21 @@ Enable the use of RX FPU instructions. This is the default. ;--------------------------------------------------- mcpu= -Target RejectNegative Joined Var(rx_cpu_name) Report ToLower +Target RejectNegative Joined Var(rx_cpu_type) Report ToLower Enum(rx_cpu_types) Init(RX600) Specify the target RX cpu type. +Enum +Name(rx_cpu_types) Type(enum rx_cpu_types) + +EnumValue +Name(rx_cpu_types) String(rx610) Value(RX610) + +EnumValue +Name(rx_cpu_types) String(rx200) Value(RX200) + +EnumValue +Name(rx_cpu_types) String(rx600) Value(RX600) + ;--------------------------------------------------- mbig-endian-data @@ -89,7 +104,7 @@ Maximum size in bytes of constant values allowed as operands. ;--------------------------------------------------- mint-register= -Target RejectNegative Joined UInteger Var(rx_interrupt_registers) Init(0) +Target RejectNegative Joined UInteger Var(rx_deferred_options) Defer Specifies the number of registers to reserve for interrupt handlers. ;--------------------------------------------------- |