diff options
author | nickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-04-23 10:35:49 +0000 |
---|---|---|
committer | nickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-04-23 10:35:49 +0000 |
commit | c05cbf30b7a70247d1a1759048d6593ae4b8b092 (patch) | |
tree | e6d366b90183a341f777c2d97b420c3e3e9b1893 /gcc/common | |
parent | e95b101969c570d9aec6aac5796d5da106b14603 (diff) | |
download | gcc-c05cbf30b7a70247d1a1759048d6593ae4b8b092.tar.gz |
* config/msp430/msp430.c (msp430_handle_option): Move function
to msp430-common.c
(msp430_option_override): Simplify mcu and mcpu option handling.
(msp430_is_f5_mcu): Rename to msp430_use_f5_series_hwmult. Add
support for -mhwmult command line option.
(has_32bit_hwmult): Rename to use_32bit_hwmult. Add support for
-mhwmult command line option.
(msp430_hwmult_enabled): Delete.
(msp43o_output_labelref): Add support for -mhwmult command line
option.
* config/msp430/msp430.md (mulhisi3, umulhisi3, mulsidi3)
(umulsidi3): Likewise.
* config/msp430/msp430.opt (mmcu): Add Report attribute.
(mcpu, mlarge, msmall): Likewise.
(mhwmult): New option.
* config/msp430/msp430-protos.h (msp430_hwmult_enabled): Remove
prototype.
(msp430_is_f5_mcu): Remove prototype.
(msp430_use_f5_series_hwmult): Add prototype.
* config/msp430/msp430-opts.h: New file.
* common/config/msp430: New directory.
* common/config/msp430/msp430-common.c: New file.
* config.gcc (msp430): Remove target_has_targetm_common.
* doc/invoke.texi: Document -mhwmult command line option.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209685 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/common')
-rw-r--r-- | gcc/common/config/msp430/msp430-common.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/gcc/common/config/msp430/msp430-common.c b/gcc/common/config/msp430/msp430-common.c new file mode 100644 index 00000000000..fc2c1f27d45 --- /dev/null +++ b/gcc/common/config/msp430/msp430-common.c @@ -0,0 +1,91 @@ +/* Common hooks for Texas Instruments MSP430. + Copyright (C) 2014 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/>. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "diagnostic-core.h" +#include "tm.h" +#include "common/common-target.h" +#include "common/common-target-def.h" +#include "opts.h" +#include "flags.h" + +/* Handle -mcpu= and -mmcu= here. We want to ensure that only one + of these two options - the last specified on the command line - + is passed on to the msp430 backend. */ + +static bool +msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED, + struct gcc_options *opts_set ATTRIBUTE_UNUSED, + const struct cl_decoded_option *decoded, + location_t loc ATTRIBUTE_UNUSED) +{ + switch (decoded->opt_index) + { + case OPT_mcpu_: + if (strcasecmp (decoded->arg, "msp430x") == 0 + || strcasecmp (decoded->arg, "msp430xv2") == 0 + || strcasecmp (decoded->arg, "430x") == 0 + || strcasecmp (decoded->arg, "430xv2") == 0) + { + target_cpu = "msp430x"; + target_mcu = NULL; + } + else if (strcasecmp (decoded->arg, "msp430") == 0 + || strcasecmp (decoded->arg, "430") == 0) + { + target_cpu = "msp430"; + target_mcu = NULL; + } + else + { + error ("unrecognised argument of -mcpu: %s", decoded->arg); + return false; + } + break; + + case OPT_mmcu_: + /* For backwards compatibility we recognise two generic MCU + 430X names. However we want to be able to generate special C + preprocessor defines for them, which is why we set target_mcu + to NULL. */ + if (strcasecmp (decoded->arg, "msp430") == 0) + { + target_cpu = "msp430"; + target_mcu = NULL; + } + else if (strcasecmp (decoded->arg, "msp430x") == 0 + || strcasecmp (decoded->arg, "msp430xv2") == 0) + { + target_cpu = "msp430x"; + target_mcu = NULL; + } + else + target_cpu = NULL; + break; + } + + return true; +} + +#undef TARGET_HANDLE_OPTION +#define TARGET_HANDLE_OPTION msp430_handle_option + +struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; |