mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-13 16:21:53 +08:00
gcc * config.gcc (extra_gcc_objs): Define for MSP430.
* common/config/msp430/msp430-common.c (msp430_handle_option): Pass both -mmcu and -mcpu on to the back end if they are both defined. * config/msp430/msp430.c (hwmult_name): New function. (msp430_option_override): If an unrecognised MCU name is detected only warn if the user has not provided suitable -mhwmult and -mcpu options. Use msp430_warn_mcu to control warning messages. Generate warnings about conflicts between -mmcu and -mcpu and -mhwmult options. If neither -mcpu nor -mmcu have been specified but -mhwmult= f5series has the select the 430X isa. (msp430_no_hwmult): If -mmcu has not been specified and msp430_hwmult_type is AUTO then return true. * config/msp430/msp430.h (EXTRA_SPEC_FUNCTIONS): Define. (LIB_SPEC): Add hardware multiply library selection. * config/msp430/t-msp430: Delete hardware multiply multilibs. Add rule to build driver-msp430.o * config/msp430/driver-msp430.c: New file. * config/msp430/msp430.opt (warn-mcu): New option. * doc/invoke.texi: Update description of -mhwmult=auto. Document -mwarn-mcu option. tests * gcc.target/msp430/msp_abi_div_funcs.c: New test. * gcc.target/msp430/mul_main.h: New test support file. * gcc.target/msp430/mul_none.c: New test. * gcc.target/msp430/mul_16bit.c: New test. * gcc.target/msp430/mul_32bit.c: New test. * gcc.target/msp430/mul_f5.c: New test. libgcc * config/msp430/mpy.c (__mulhi3): Use a faster algorithm. Allow for the second argument being negative. * config.host (extra_parts): Define for MSP430. Create separate libraries for each of the hardware multiply formats. * config/msp430/lib2hw_mul.S: Build only the multiply routines that are needed. * config/msp430/lib2mul.c: Likewise. * config/msp430/t-msp430 (LIB2ADD): Remove lib2hw_mul.S. Add rules to build hardware multiply libraries. * config/msp430/lib2divSI.c: (__mspabi_divlu): Alias for __mspabi_divul function. (__mspabi_divllu): New stub function. From-SVN: r231286
This commit is contained in:
parent
4b5d538ba7
commit
04a9ae287f
gcc
ChangeLog
common/config/msp430
config.gccconfig/msp430
doc
testsuite
libgcc
@ -1,4 +1,29 @@
|
||||
2015-12-04 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
2015-11-25 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config.gcc (extra_gcc_objs): Define for MSP430.
|
||||
* common/config/msp430/msp430-common.c (msp430_handle_option):
|
||||
Pass both -mmcu and -mcpu on to the back end if they are both
|
||||
defined.
|
||||
* config/msp430/msp430.c (hwmult_name): New function.
|
||||
(msp430_option_override): If an unrecognised MCU name is
|
||||
detected only warn if the user has not provided suitable
|
||||
-mhwmult and -mcpu options. Use msp430_warn_mcu to control
|
||||
warning messages. Generate warnings about conflicts between
|
||||
-mmcu and -mcpu and -mhwmult options.
|
||||
If neither -mcpu nor -mmcu have been specified but -mhwmult=
|
||||
f5series has the select the 430X isa.
|
||||
(msp430_no_hwmult): If -mmcu has not been specified and
|
||||
msp430_hwmult_type is AUTO then return true.
|
||||
* config/msp430/msp430.h (EXTRA_SPEC_FUNCTIONS): Define.
|
||||
(LIB_SPEC): Add hardware multiply library selection.
|
||||
* config/msp430/t-msp430: Delete hardware multiply multilibs.
|
||||
Add rule to build driver-msp430.o
|
||||
* config/msp430/driver-msp430.c: New file.
|
||||
* config/msp430/msp430.opt (warn-mcu): New option.
|
||||
* doc/invoke.texi: Update description of -mhwmult=auto.
|
||||
Document -mwarn-mcu option.
|
||||
|
||||
2015-12-04 Segher Boessenkool <segher&kernel.crashing.org>
|
||||
|
||||
* (cstore<mode>4_signed): New expander.
|
||||
(cstore<mode>4): Call it.
|
||||
|
@ -27,9 +27,9 @@
|
||||
#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. */
|
||||
/* Check for generic -mcpu= and -mmcu= names here. If found then we
|
||||
convert to a baseline cpu name. Otherwise we allow the option to
|
||||
be passed on to the backend where it can be checked more fully. */
|
||||
|
||||
static bool
|
||||
msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
|
||||
@ -46,13 +46,11 @@ msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
|
||||
|| 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
|
||||
{
|
||||
@ -77,8 +75,6 @@ msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
|
||||
target_cpu = "msp430x";
|
||||
target_mcu = NULL;
|
||||
}
|
||||
else
|
||||
target_cpu = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2236,6 +2236,7 @@ msp430*-*-*)
|
||||
c_target_objs="msp430-c.o"
|
||||
cxx_target_objs="msp430-c.o"
|
||||
tmake_file="${tmake_file} msp430/t-msp430"
|
||||
extra_gcc_objs="driver-msp430.o"
|
||||
;;
|
||||
nds32le-*-*)
|
||||
target_cpu_default="0"
|
||||
|
703
gcc/config/msp430/driver-msp430.c
Normal file
703
gcc/config/msp430/driver-msp430.c
Normal file
@ -0,0 +1,703 @@
|
||||
/* Subroutines for the gcc driver.
|
||||
Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
Contributed by Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
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.h"
|
||||
#include "tm.h"
|
||||
|
||||
/* This is a copy of the same data structure found in gas/config/tc-msp430.c
|
||||
Also another (sort-of) copy can be found in gcc/config/msp430/msp430.c
|
||||
Keep these three structures in sync.
|
||||
The data in this structure has been extracted from the devices.csv file
|
||||
released by TI, updated as of 8 October 2015. */
|
||||
|
||||
struct msp430_mcu_data
|
||||
{
|
||||
const char * name;
|
||||
unsigned int revision; /* 0=> MSP430, 1=>MSP430X, 2=> MSP430Xv2. */
|
||||
unsigned int hwmpy; /* 0=>none, 1=>16-bit, 2=>16-bit w/sign extend, 4=>32-bit, 8=> 32-bit (5xx). */
|
||||
}
|
||||
msp430_mcu_data [] =
|
||||
{
|
||||
{ "cc430f5123",2,8 },
|
||||
{ "cc430f5125",2,8 },
|
||||
{ "cc430f5133",2,8 },
|
||||
{ "cc430f5135",2,8 },
|
||||
{ "cc430f5137",2,8 },
|
||||
{ "cc430f5143",2,8 },
|
||||
{ "cc430f5145",2,8 },
|
||||
{ "cc430f5147",2,8 },
|
||||
{ "cc430f6125",2,8 },
|
||||
{ "cc430f6126",2,8 },
|
||||
{ "cc430f6127",2,8 },
|
||||
{ "cc430f6135",2,8 },
|
||||
{ "cc430f6137",2,8 },
|
||||
{ "cc430f6143",2,8 },
|
||||
{ "cc430f6145",2,8 },
|
||||
{ "cc430f6147",2,8 },
|
||||
{ "msp430afe221",0,2 },
|
||||
{ "msp430afe222",0,2 },
|
||||
{ "msp430afe223",0,2 },
|
||||
{ "msp430afe231",0,2 },
|
||||
{ "msp430afe232",0,2 },
|
||||
{ "msp430afe233",0,2 },
|
||||
{ "msp430afe251",0,2 },
|
||||
{ "msp430afe252",0,2 },
|
||||
{ "msp430afe253",0,2 },
|
||||
{ "msp430bt5190",2,8 },
|
||||
{ "msp430c091",0,0 },
|
||||
{ "msp430c092",0,0 },
|
||||
{ "msp430c111",0,0 },
|
||||
{ "msp430c1111",0,0 },
|
||||
{ "msp430c112",0,0 },
|
||||
{ "msp430c1121",0,0 },
|
||||
{ "msp430c1331",0,0 },
|
||||
{ "msp430c1351",0,0 },
|
||||
{ "msp430c311s",0,0 },
|
||||
{ "msp430c312",0,0 },
|
||||
{ "msp430c313",0,0 },
|
||||
{ "msp430c314",0,0 },
|
||||
{ "msp430c315",0,0 },
|
||||
{ "msp430c323",0,0 },
|
||||
{ "msp430c325",0,0 },
|
||||
{ "msp430c336",0,1 },
|
||||
{ "msp430c337",0,1 },
|
||||
{ "msp430c412",0,0 },
|
||||
{ "msp430c413",0,0 },
|
||||
{ "msp430cg4616",1,1 },
|
||||
{ "msp430cg4617",1,1 },
|
||||
{ "msp430cg4618",1,1 },
|
||||
{ "msp430cg4619",1,1 },
|
||||
{ "msp430e112",0,0 },
|
||||
{ "msp430e313",0,0 },
|
||||
{ "msp430e315",0,0 },
|
||||
{ "msp430e325",0,0 },
|
||||
{ "msp430e337",0,1 },
|
||||
{ "msp430f110",0,0 },
|
||||
{ "msp430f1101",0,0 },
|
||||
{ "msp430f1101a",0,0 },
|
||||
{ "msp430f1111",0,0 },
|
||||
{ "msp430f1111a",0,0 },
|
||||
{ "msp430f112",0,0 },
|
||||
{ "msp430f1121",0,0 },
|
||||
{ "msp430f1121a",0,0 },
|
||||
{ "msp430f1122",0,0 },
|
||||
{ "msp430f1132",0,0 },
|
||||
{ "msp430f122",0,0 },
|
||||
{ "msp430f1222",0,0 },
|
||||
{ "msp430f123",0,0 },
|
||||
{ "msp430f1232",0,0 },
|
||||
{ "msp430f133",0,0 },
|
||||
{ "msp430f135",0,0 },
|
||||
{ "msp430f147",0,1 },
|
||||
{ "msp430f1471",0,1 },
|
||||
{ "msp430f148",0,1 },
|
||||
{ "msp430f1481",0,1 },
|
||||
{ "msp430f149",0,1 },
|
||||
{ "msp430f1491",0,1 },
|
||||
{ "msp430f155",0,0 },
|
||||
{ "msp430f156",0,0 },
|
||||
{ "msp430f157",0,0 },
|
||||
{ "msp430f1610",0,1 },
|
||||
{ "msp430f1611",0,1 },
|
||||
{ "msp430f1612",0,1 },
|
||||
{ "msp430f167",0,1 },
|
||||
{ "msp430f168",0,1 },
|
||||
{ "msp430f169",0,1 },
|
||||
{ "msp430f2001",0,0 },
|
||||
{ "msp430f2002",0,0 },
|
||||
{ "msp430f2003",0,0 },
|
||||
{ "msp430f2011",0,0 },
|
||||
{ "msp430f2012",0,0 },
|
||||
{ "msp430f2013",0,0 },
|
||||
{ "msp430f2101",0,0 },
|
||||
{ "msp430f2111",0,0 },
|
||||
{ "msp430f2112",0,0 },
|
||||
{ "msp430f2121",0,0 },
|
||||
{ "msp430f2122",0,0 },
|
||||
{ "msp430f2131",0,0 },
|
||||
{ "msp430f2132",0,0 },
|
||||
{ "msp430f2232",0,0 },
|
||||
{ "msp430f2234",0,0 },
|
||||
{ "msp430f2252",0,0 },
|
||||
{ "msp430f2254",0,0 },
|
||||
{ "msp430f2272",0,0 },
|
||||
{ "msp430f2274",0,0 },
|
||||
{ "msp430f233",0,2 },
|
||||
{ "msp430f2330",0,2 },
|
||||
{ "msp430f235",0,2 },
|
||||
{ "msp430f2350",0,2 },
|
||||
{ "msp430f2370",0,2 },
|
||||
{ "msp430f2410",0,2 },
|
||||
{ "msp430f2416",1,2 },
|
||||
{ "msp430f2417",1,2 },
|
||||
{ "msp430f2418",1,2 },
|
||||
{ "msp430f2419",1,2 },
|
||||
{ "msp430f247",0,2 },
|
||||
{ "msp430f2471",0,2 },
|
||||
{ "msp430f248",0,2 },
|
||||
{ "msp430f2481",0,2 },
|
||||
{ "msp430f249",0,2 },
|
||||
{ "msp430f2491",0,2 },
|
||||
{ "msp430f2616",1,2 },
|
||||
{ "msp430f2617",1,2 },
|
||||
{ "msp430f2618",1,2 },
|
||||
{ "msp430f2619",1,2 },
|
||||
{ "msp430f412",0,0 },
|
||||
{ "msp430f413",0,0 },
|
||||
{ "msp430f4132",0,0 },
|
||||
{ "msp430f415",0,0 },
|
||||
{ "msp430f4152",0,0 },
|
||||
{ "msp430f417",0,0 },
|
||||
{ "msp430f423",0,1 },
|
||||
{ "msp430f423a",0,1 },
|
||||
{ "msp430f425",0,1 },
|
||||
{ "msp430f4250",0,0 },
|
||||
{ "msp430f425a",0,1 },
|
||||
{ "msp430f4260",0,0 },
|
||||
{ "msp430f427",0,1 },
|
||||
{ "msp430f4270",0,0 },
|
||||
{ "msp430f427a",0,1 },
|
||||
{ "msp430f435",0,0 },
|
||||
{ "msp430f4351",0,0 },
|
||||
{ "msp430f436",0,0 },
|
||||
{ "msp430f4361",0,0 },
|
||||
{ "msp430f437",0,0 },
|
||||
{ "msp430f4371",0,0 },
|
||||
{ "msp430f438",0,0 },
|
||||
{ "msp430f439",0,0 },
|
||||
{ "msp430f447",0,1 },
|
||||
{ "msp430f448",0,1 },
|
||||
{ "msp430f4481",0,1 },
|
||||
{ "msp430f449",0,1 },
|
||||
{ "msp430f4491",0,1 },
|
||||
{ "msp430f4616",1,1 },
|
||||
{ "msp430f46161",1,1 },
|
||||
{ "msp430f4617",1,1 },
|
||||
{ "msp430f46171",1,1 },
|
||||
{ "msp430f4618",1,1 },
|
||||
{ "msp430f46181",1,1 },
|
||||
{ "msp430f4619",1,1 },
|
||||
{ "msp430f46191",1,1 },
|
||||
{ "msp430f47126",1,4 },
|
||||
{ "msp430f47127",1,4 },
|
||||
{ "msp430f47163",1,4 },
|
||||
{ "msp430f47166",1,4 },
|
||||
{ "msp430f47167",1,4 },
|
||||
{ "msp430f47173",1,4 },
|
||||
{ "msp430f47176",1,4 },
|
||||
{ "msp430f47177",1,4 },
|
||||
{ "msp430f47183",1,4 },
|
||||
{ "msp430f47186",1,4 },
|
||||
{ "msp430f47187",1,4 },
|
||||
{ "msp430f47193",1,4 },
|
||||
{ "msp430f47196",1,4 },
|
||||
{ "msp430f47197",1,4 },
|
||||
{ "msp430f477",0,0 },
|
||||
{ "msp430f478",0,0 },
|
||||
{ "msp430f4783",0,4 },
|
||||
{ "msp430f4784",0,4 },
|
||||
{ "msp430f479",0,0 },
|
||||
{ "msp430f4793",0,4 },
|
||||
{ "msp430f4794",0,4 },
|
||||
{ "msp430f5131",2,8 },
|
||||
{ "msp430f5132",2,8 },
|
||||
{ "msp430f5151",2,8 },
|
||||
{ "msp430f5152",2,8 },
|
||||
{ "msp430f5171",2,8 },
|
||||
{ "msp430f5172",2,8 },
|
||||
{ "msp430f5212",2,8 },
|
||||
{ "msp430f5213",2,8 },
|
||||
{ "msp430f5214",2,8 },
|
||||
{ "msp430f5217",2,8 },
|
||||
{ "msp430f5218",2,8 },
|
||||
{ "msp430f5219",2,8 },
|
||||
{ "msp430f5222",2,8 },
|
||||
{ "msp430f5223",2,8 },
|
||||
{ "msp430f5224",2,8 },
|
||||
{ "msp430f5227",2,8 },
|
||||
{ "msp430f5228",2,8 },
|
||||
{ "msp430f5229",2,8 },
|
||||
{ "msp430f5232",2,8 },
|
||||
{ "msp430f5234",2,8 },
|
||||
{ "msp430f5237",2,8 },
|
||||
{ "msp430f5239",2,8 },
|
||||
{ "msp430f5242",2,8 },
|
||||
{ "msp430f5244",2,8 },
|
||||
{ "msp430f5247",2,8 },
|
||||
{ "msp430f5249",2,8 },
|
||||
{ "msp430f5252",2,8 },
|
||||
{ "msp430f5253",2,8 },
|
||||
{ "msp430f5254",2,8 },
|
||||
{ "msp430f5255",2,8 },
|
||||
{ "msp430f5256",2,8 },
|
||||
{ "msp430f5257",2,8 },
|
||||
{ "msp430f5258",2,8 },
|
||||
{ "msp430f5259",2,8 },
|
||||
{ "msp430f5304",2,8 },
|
||||
{ "msp430f5308",2,8 },
|
||||
{ "msp430f5309",2,8 },
|
||||
{ "msp430f5310",2,8 },
|
||||
{ "msp430f5324",2,8 },
|
||||
{ "msp430f5325",2,8 },
|
||||
{ "msp430f5326",2,8 },
|
||||
{ "msp430f5327",2,8 },
|
||||
{ "msp430f5328",2,8 },
|
||||
{ "msp430f5329",2,8 },
|
||||
{ "msp430f5333",2,8 },
|
||||
{ "msp430f5335",2,8 },
|
||||
{ "msp430f5336",2,8 },
|
||||
{ "msp430f5338",2,8 },
|
||||
{ "msp430f5340",2,8 },
|
||||
{ "msp430f5341",2,8 },
|
||||
{ "msp430f5342",2,8 },
|
||||
{ "msp430f5358",2,8 },
|
||||
{ "msp430f5359",2,8 },
|
||||
{ "msp430f5418",2,8 },
|
||||
{ "msp430f5418a",2,8 },
|
||||
{ "msp430f5419",2,8 },
|
||||
{ "msp430f5419a",2,8 },
|
||||
{ "msp430f5435",2,8 },
|
||||
{ "msp430f5435a",2,8 },
|
||||
{ "msp430f5436",2,8 },
|
||||
{ "msp430f5436a",2,8 },
|
||||
{ "msp430f5437",2,8 },
|
||||
{ "msp430f5437a",2,8 },
|
||||
{ "msp430f5438",2,8 },
|
||||
{ "msp430f5438a",2,8 },
|
||||
{ "msp430f5500",2,8 },
|
||||
{ "msp430f5501",2,8 },
|
||||
{ "msp430f5502",2,8 },
|
||||
{ "msp430f5503",2,8 },
|
||||
{ "msp430f5504",2,8 },
|
||||
{ "msp430f5505",2,8 },
|
||||
{ "msp430f5506",2,8 },
|
||||
{ "msp430f5507",2,8 },
|
||||
{ "msp430f5508",2,8 },
|
||||
{ "msp430f5509",2,8 },
|
||||
{ "msp430f5510",2,8 },
|
||||
{ "msp430f5513",2,8 },
|
||||
{ "msp430f5514",2,8 },
|
||||
{ "msp430f5515",2,8 },
|
||||
{ "msp430f5517",2,8 },
|
||||
{ "msp430f5519",2,8 },
|
||||
{ "msp430f5521",2,8 },
|
||||
{ "msp430f5522",2,8 },
|
||||
{ "msp430f5524",2,8 },
|
||||
{ "msp430f5525",2,8 },
|
||||
{ "msp430f5526",2,8 },
|
||||
{ "msp430f5527",2,8 },
|
||||
{ "msp430f5528",2,8 },
|
||||
{ "msp430f5529",2,8 },
|
||||
{ "msp430f5630",2,8 },
|
||||
{ "msp430f5631",2,8 },
|
||||
{ "msp430f5632",2,8 },
|
||||
{ "msp430f5633",2,8 },
|
||||
{ "msp430f5634",2,8 },
|
||||
{ "msp430f5635",2,8 },
|
||||
{ "msp430f5636",2,8 },
|
||||
{ "msp430f5637",2,8 },
|
||||
{ "msp430f5638",2,8 },
|
||||
{ "msp430f5658",2,8 },
|
||||
{ "msp430f5659",2,8 },
|
||||
{ "msp430f5xx_6xxgeneric",2,8 },
|
||||
{ "msp430f6433",2,8 },
|
||||
{ "msp430f6435",2,8 },
|
||||
{ "msp430f6436",2,8 },
|
||||
{ "msp430f6438",2,8 },
|
||||
{ "msp430f6458",2,8 },
|
||||
{ "msp430f6459",2,8 },
|
||||
{ "msp430f6630",2,8 },
|
||||
{ "msp430f6631",2,8 },
|
||||
{ "msp430f6632",2,8 },
|
||||
{ "msp430f6633",2,8 },
|
||||
{ "msp430f6634",2,8 },
|
||||
{ "msp430f6635",2,8 },
|
||||
{ "msp430f6636",2,8 },
|
||||
{ "msp430f6637",2,8 },
|
||||
{ "msp430f6638",2,8 },
|
||||
{ "msp430f6658",2,8 },
|
||||
{ "msp430f6659",2,8 },
|
||||
{ "msp430f6720",2,8 },
|
||||
{ "msp430f6720a",2,8 },
|
||||
{ "msp430f6721",2,8 },
|
||||
{ "msp430f6721a",2,8 },
|
||||
{ "msp430f6723",2,8 },
|
||||
{ "msp430f6723a",2,8 },
|
||||
{ "msp430f6724",2,8 },
|
||||
{ "msp430f6724a",2,8 },
|
||||
{ "msp430f6725",2,8 },
|
||||
{ "msp430f6725a",2,8 },
|
||||
{ "msp430f6726",2,8 },
|
||||
{ "msp430f6726a",2,8 },
|
||||
{ "msp430f6730",2,8 },
|
||||
{ "msp430f6730a",2,8 },
|
||||
{ "msp430f6731",2,8 },
|
||||
{ "msp430f6731a",2,8 },
|
||||
{ "msp430f6733",2,8 },
|
||||
{ "msp430f6733a",2,8 },
|
||||
{ "msp430f6734",2,8 },
|
||||
{ "msp430f6734a",2,8 },
|
||||
{ "msp430f6735",2,8 },
|
||||
{ "msp430f6735a",2,8 },
|
||||
{ "msp430f6736",2,8 },
|
||||
{ "msp430f6736a",2,8 },
|
||||
{ "msp430f6745",2,8 },
|
||||
{ "msp430f67451",2,8 },
|
||||
{ "msp430f67451a",2,8 },
|
||||
{ "msp430f6745a",2,8 },
|
||||
{ "msp430f6746",2,8 },
|
||||
{ "msp430f67461",2,8 },
|
||||
{ "msp430f67461a",2,8 },
|
||||
{ "msp430f6746a",2,8 },
|
||||
{ "msp430f6747",2,8 },
|
||||
{ "msp430f67471",2,8 },
|
||||
{ "msp430f67471a",2,8 },
|
||||
{ "msp430f6747a",2,8 },
|
||||
{ "msp430f6748",2,8 },
|
||||
{ "msp430f67481",2,8 },
|
||||
{ "msp430f67481a",2,8 },
|
||||
{ "msp430f6748a",2,8 },
|
||||
{ "msp430f6749",2,8 },
|
||||
{ "msp430f67491",2,8 },
|
||||
{ "msp430f67491a",2,8 },
|
||||
{ "msp430f6749a",2,8 },
|
||||
{ "msp430f67621",2,8 },
|
||||
{ "msp430f67621a",2,8 },
|
||||
{ "msp430f67641",2,8 },
|
||||
{ "msp430f67641a",2,8 },
|
||||
{ "msp430f6765",2,8 },
|
||||
{ "msp430f67651",2,8 },
|
||||
{ "msp430f67651a",2,8 },
|
||||
{ "msp430f6765a",2,8 },
|
||||
{ "msp430f6766",2,8 },
|
||||
{ "msp430f67661",2,8 },
|
||||
{ "msp430f67661a",2,8 },
|
||||
{ "msp430f6766a",2,8 },
|
||||
{ "msp430f6767",2,8 },
|
||||
{ "msp430f67671",2,8 },
|
||||
{ "msp430f67671a",2,8 },
|
||||
{ "msp430f6767a",2,8 },
|
||||
{ "msp430f6768",2,8 },
|
||||
{ "msp430f67681",2,8 },
|
||||
{ "msp430f67681a",2,8 },
|
||||
{ "msp430f6768a",2,8 },
|
||||
{ "msp430f6769",2,8 },
|
||||
{ "msp430f67691",2,8 },
|
||||
{ "msp430f67691a",2,8 },
|
||||
{ "msp430f6769a",2,8 },
|
||||
{ "msp430f6775",2,8 },
|
||||
{ "msp430f67751",2,8 },
|
||||
{ "msp430f67751a",2,8 },
|
||||
{ "msp430f6775a",2,8 },
|
||||
{ "msp430f6776",2,8 },
|
||||
{ "msp430f67761",2,8 },
|
||||
{ "msp430f67761a",2,8 },
|
||||
{ "msp430f6776a",2,8 },
|
||||
{ "msp430f6777",2,8 },
|
||||
{ "msp430f67771",2,8 },
|
||||
{ "msp430f67771a",2,8 },
|
||||
{ "msp430f6777a",2,8 },
|
||||
{ "msp430f6778",2,8 },
|
||||
{ "msp430f67781",2,8 },
|
||||
{ "msp430f67781a",2,8 },
|
||||
{ "msp430f6778a",2,8 },
|
||||
{ "msp430f6779",2,8 },
|
||||
{ "msp430f67791",2,8 },
|
||||
{ "msp430f67791a",2,8 },
|
||||
{ "msp430f6779a",2,8 },
|
||||
{ "msp430fe423",0,0 },
|
||||
{ "msp430fe4232",0,0 },
|
||||
{ "msp430fe423a",0,0 },
|
||||
{ "msp430fe4242",0,0 },
|
||||
{ "msp430fe425",0,0 },
|
||||
{ "msp430fe4252",0,0 },
|
||||
{ "msp430fe425a",0,0 },
|
||||
{ "msp430fe427",0,0 },
|
||||
{ "msp430fe4272",0,0 },
|
||||
{ "msp430fe427a",0,0 },
|
||||
{ "msp430fg4250",0,0 },
|
||||
{ "msp430fg4260",0,0 },
|
||||
{ "msp430fg4270",0,0 },
|
||||
{ "msp430fg437",0,0 },
|
||||
{ "msp430fg438",0,0 },
|
||||
{ "msp430fg439",0,0 },
|
||||
{ "msp430fg4616",1,1 },
|
||||
{ "msp430fg4617",1,1 },
|
||||
{ "msp430fg4618",1,1 },
|
||||
{ "msp430fg4619",1,1 },
|
||||
{ "msp430fg477",0,0 },
|
||||
{ "msp430fg478",0,0 },
|
||||
{ "msp430fg479",0,0 },
|
||||
{ "msp430fg6425",2,8 },
|
||||
{ "msp430fg6426",2,8 },
|
||||
{ "msp430fg6625",2,8 },
|
||||
{ "msp430fg6626",2,8 },
|
||||
{ "msp430fr2032",2,0 },
|
||||
{ "msp430fr2033",2,0 },
|
||||
{ "msp430fr2433",2,8 },
|
||||
{ "msp430fr2xx_4xxgeneric",2,8 },
|
||||
{ "msp430fr4131",2,0 },
|
||||
{ "msp430fr4132",2,0 },
|
||||
{ "msp430fr4133",2,0 },
|
||||
{ "msp430fr5720",2,8 },
|
||||
{ "msp430fr5721",2,8 },
|
||||
{ "msp430fr5722",2,8 },
|
||||
{ "msp430fr5723",2,8 },
|
||||
{ "msp430fr5724",2,8 },
|
||||
{ "msp430fr5725",2,8 },
|
||||
{ "msp430fr5726",2,8 },
|
||||
{ "msp430fr5727",2,8 },
|
||||
{ "msp430fr5728",2,8 },
|
||||
{ "msp430fr5729",2,8 },
|
||||
{ "msp430fr5730",2,8 },
|
||||
{ "msp430fr5731",2,8 },
|
||||
{ "msp430fr5732",2,8 },
|
||||
{ "msp430fr5733",2,8 },
|
||||
{ "msp430fr5734",2,8 },
|
||||
{ "msp430fr5735",2,8 },
|
||||
{ "msp430fr5736",2,8 },
|
||||
{ "msp430fr5737",2,8 },
|
||||
{ "msp430fr5738",2,8 },
|
||||
{ "msp430fr5739",2,8 },
|
||||
{ "msp430fr57xxgeneric",2,8 },
|
||||
{ "msp430fr5847",2,8 },
|
||||
{ "msp430fr58471",2,8 },
|
||||
{ "msp430fr5848",2,8 },
|
||||
{ "msp430fr5849",2,8 },
|
||||
{ "msp430fr5857",2,8 },
|
||||
{ "msp430fr5858",2,8 },
|
||||
{ "msp430fr5859",2,8 },
|
||||
{ "msp430fr5867",2,8 },
|
||||
{ "msp430fr58671",2,8 },
|
||||
{ "msp430fr5868",2,8 },
|
||||
{ "msp430fr5869",2,8 },
|
||||
{ "msp430fr5870",2,8 },
|
||||
{ "msp430fr5872",2,8 },
|
||||
{ "msp430fr58721",2,8 },
|
||||
{ "msp430fr5887",2,8 },
|
||||
{ "msp430fr5888",2,8 },
|
||||
{ "msp430fr5889",2,8 },
|
||||
{ "msp430fr58891",2,8 },
|
||||
{ "msp430fr5922",2,8 },
|
||||
{ "msp430fr59221",2,8 },
|
||||
{ "msp430fr5947",2,8 },
|
||||
{ "msp430fr59471",2,8 },
|
||||
{ "msp430fr5948",2,8 },
|
||||
{ "msp430fr5949",2,8 },
|
||||
{ "msp430fr5957",2,8 },
|
||||
{ "msp430fr5958",2,8 },
|
||||
{ "msp430fr5959",2,8 },
|
||||
{ "msp430fr5967",2,8 },
|
||||
{ "msp430fr5968",2,8 },
|
||||
{ "msp430fr5969",2,8 },
|
||||
{ "msp430fr59691",2,8 },
|
||||
{ "msp430fr5970",2,8 },
|
||||
{ "msp430fr5972",2,8 },
|
||||
{ "msp430fr59721",2,8 },
|
||||
{ "msp430fr5986",2,8 },
|
||||
{ "msp430fr5987",2,8 },
|
||||
{ "msp430fr5988",2,8 },
|
||||
{ "msp430fr5989",2,8 },
|
||||
{ "msp430fr59891",2,8 },
|
||||
{ "msp430fr5xx_6xxgeneric",2,8 },
|
||||
{ "msp430fr6820",2,8 },
|
||||
{ "msp430fr6822",2,8 },
|
||||
{ "msp430fr68221",2,8 },
|
||||
{ "msp430fr6870",2,8 },
|
||||
{ "msp430fr6872",2,8 },
|
||||
{ "msp430fr68721",2,8 },
|
||||
{ "msp430fr6877",2,8 },
|
||||
{ "msp430fr6879",2,8 },
|
||||
{ "msp430fr68791",2,8 },
|
||||
{ "msp430fr6887",2,8 },
|
||||
{ "msp430fr6888",2,8 },
|
||||
{ "msp430fr6889",2,8 },
|
||||
{ "msp430fr68891",2,8 },
|
||||
{ "msp430fr6920",2,8 },
|
||||
{ "msp430fr6922",2,8 },
|
||||
{ "msp430fr69221",2,8 },
|
||||
{ "msp430fr6927",2,8 },
|
||||
{ "msp430fr69271",2,8 },
|
||||
{ "msp430fr6928",2,8 },
|
||||
{ "msp430fr6970",2,8 },
|
||||
{ "msp430fr6972",2,8 },
|
||||
{ "msp430fr69721",2,8 },
|
||||
{ "msp430fr6977",2,8 },
|
||||
{ "msp430fr6979",2,8 },
|
||||
{ "msp430fr69791",2,8 },
|
||||
{ "msp430fr6987",2,8 },
|
||||
{ "msp430fr6988",2,8 },
|
||||
{ "msp430fr6989",2,8 },
|
||||
{ "msp430fr69891",2,8 },
|
||||
{ "msp430fw423",0,0 },
|
||||
{ "msp430fw425",0,0 },
|
||||
{ "msp430fw427",0,0 },
|
||||
{ "msp430fw428",0,0 },
|
||||
{ "msp430fw429",0,0 },
|
||||
{ "msp430g2001",0,0 },
|
||||
{ "msp430g2101",0,0 },
|
||||
{ "msp430g2102",0,0 },
|
||||
{ "msp430g2111",0,0 },
|
||||
{ "msp430g2112",0,0 },
|
||||
{ "msp430g2113",0,0 },
|
||||
{ "msp430g2121",0,0 },
|
||||
{ "msp430g2131",0,0 },
|
||||
{ "msp430g2132",0,0 },
|
||||
{ "msp430g2152",0,0 },
|
||||
{ "msp430g2153",0,0 },
|
||||
{ "msp430g2201",0,0 },
|
||||
{ "msp430g2202",0,0 },
|
||||
{ "msp430g2203",0,0 },
|
||||
{ "msp430g2210",0,0 },
|
||||
{ "msp430g2211",0,0 },
|
||||
{ "msp430g2212",0,0 },
|
||||
{ "msp430g2213",0,0 },
|
||||
{ "msp430g2221",0,0 },
|
||||
{ "msp430g2230",0,0 },
|
||||
{ "msp430g2231",0,0 },
|
||||
{ "msp430g2232",0,0 },
|
||||
{ "msp430g2233",0,0 },
|
||||
{ "msp430g2252",0,0 },
|
||||
{ "msp430g2253",0,0 },
|
||||
{ "msp430g2302",0,0 },
|
||||
{ "msp430g2303",0,0 },
|
||||
{ "msp430g2312",0,0 },
|
||||
{ "msp430g2313",0,0 },
|
||||
{ "msp430g2332",0,0 },
|
||||
{ "msp430g2333",0,0 },
|
||||
{ "msp430g2352",0,0 },
|
||||
{ "msp430g2353",0,0 },
|
||||
{ "msp430g2402",0,0 },
|
||||
{ "msp430g2403",0,0 },
|
||||
{ "msp430g2412",0,0 },
|
||||
{ "msp430g2413",0,0 },
|
||||
{ "msp430g2432",0,0 },
|
||||
{ "msp430g2433",0,0 },
|
||||
{ "msp430g2444",0,0 },
|
||||
{ "msp430g2452",0,0 },
|
||||
{ "msp430g2453",0,0 },
|
||||
{ "msp430g2513",0,0 },
|
||||
{ "msp430g2533",0,0 },
|
||||
{ "msp430g2544",0,0 },
|
||||
{ "msp430g2553",0,0 },
|
||||
{ "msp430g2744",0,0 },
|
||||
{ "msp430g2755",0,0 },
|
||||
{ "msp430g2855",0,0 },
|
||||
{ "msp430g2955",0,0 },
|
||||
{ "msp430i2020",0,2 },
|
||||
{ "msp430i2021",0,2 },
|
||||
{ "msp430i2030",0,2 },
|
||||
{ "msp430i2031",0,2 },
|
||||
{ "msp430i2040",0,2 },
|
||||
{ "msp430i2041",0,2 },
|
||||
{ "msp430i2xxgeneric",0,2 },
|
||||
{ "msp430l092",0,0 },
|
||||
{ "msp430p112",0,0 },
|
||||
{ "msp430p313",0,0 },
|
||||
{ "msp430p315",0,0 },
|
||||
{ "msp430p315s",0,0 },
|
||||
{ "msp430p325",0,0 },
|
||||
{ "msp430p337",0,1 },
|
||||
{ "msp430sl5438a",2,8 },
|
||||
{ "msp430tch5e",0,0 },
|
||||
{ "msp430xgeneric",2,8 },
|
||||
{ "rf430f5144",2,8 },
|
||||
{ "rf430f5155",2,8 },
|
||||
{ "rf430f5175",2,8 },
|
||||
{ "rf430frl152h",0,0 },
|
||||
{ "rf430frl152h_rom",0,0 },
|
||||
{ "rf430frl153h",0,0 },
|
||||
{ "rf430frl153h_rom",0,0 },
|
||||
{ "rf430frl154h",0,0 },
|
||||
{ "rf430frl154h_rom",0,0 }
|
||||
};
|
||||
|
||||
/* Implement spec function `msp430_hwmult_lib´. */
|
||||
|
||||
const char *
|
||||
msp430_select_hwmult_lib (int argc ATTRIBUTE_UNUSED, const char ** argv ATTRIBUTE_UNUSED)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (argc)
|
||||
{
|
||||
case 1:
|
||||
if (strcasecmp (argv[0], "default"))
|
||||
error ("unexpected argument to msp430_select_hwmult_lib: %s", argv[0]);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* We can get three or more arguments passed to this function.
|
||||
This happens when the same option is repeated on the command line.
|
||||
For example:
|
||||
msp430-elf-gcc -mhwmult=none -mhwmult=16bit foo.c
|
||||
We have to use the last argument as our selector. */
|
||||
if (strcasecmp (argv[0], "hwmult") == 0)
|
||||
{
|
||||
static struct hwmult_options
|
||||
{
|
||||
const char * name;
|
||||
const char * lib;
|
||||
} hwmult_options [] =
|
||||
{
|
||||
{ "none", "-lmul_none" },
|
||||
{ "auto", "-lmul_AUTO" }, /* Should not see this one... */
|
||||
{ "16bit", "-lmul_16" },
|
||||
{ "32bit", "-lmul_32" },
|
||||
{ "f5series", "-lmul_f5" }
|
||||
};
|
||||
|
||||
for (i = ARRAY_SIZE (hwmult_options); i--;)
|
||||
if (strcasecmp (argv[argc - 1], hwmult_options[i].name) == 0)
|
||||
return hwmult_options[i].lib;
|
||||
}
|
||||
else if (strcasecmp (argv[0], "mcu") == 0)
|
||||
{
|
||||
for (i = ARRAY_SIZE (msp430_mcu_data); i--;)
|
||||
if (strcasecmp (argv[argc - 1], msp430_mcu_data[i].name) == 0)
|
||||
{
|
||||
switch (msp430_mcu_data[i].hwmpy)
|
||||
{
|
||||
case 0: return "-lmul_none";
|
||||
case 2:
|
||||
case 1: return "-lmul_16";
|
||||
case 4: return "-lmul_32";
|
||||
case 8: return "-lmul_f5";
|
||||
default:
|
||||
error ("unrecognised hwpy field in msp430_mcu_data[%d]: %d",
|
||||
i, msp430_mcu_data[i].hwmpy);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
error ("unexpected first argument to msp430_select_hwmult_lib: %s", argv[0]);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
error ("msp430_select_hwmult_lib needs one or more arguments");
|
||||
break;
|
||||
}
|
||||
|
||||
return "-lmul_none";
|
||||
}
|
@ -90,7 +90,7 @@ msp430_init_machine_status (void)
|
||||
#define TARGET_OPTION_OVERRIDE msp430_option_override
|
||||
|
||||
/* This is a copy of the same data structure found in gas/config/tc-msp430.c
|
||||
Also another (sort-of) copy can be found in gcc/config/msp430/t-msp430.
|
||||
Also another (sort-of) copy can be found in gcc/config/msp430/devices-msp430.c
|
||||
Keep these three structures in sync.
|
||||
The data in this structure has been extracted from the devices.csv file
|
||||
released by TI, updated as of 8 October 2015. */
|
||||
@ -717,6 +717,20 @@ msp430_mcu_name (void)
|
||||
return msp430x ? "__MSP430XGENERIC__" : "__MSP430GENERIC__";
|
||||
}
|
||||
|
||||
static const char *
|
||||
hwmult_name (unsigned int val)
|
||||
{
|
||||
switch (val)
|
||||
{
|
||||
case 0: return "none";
|
||||
case 1: return "16-bit";
|
||||
case 2: return "16-bit";
|
||||
case 4: return "32-bit";
|
||||
case 8: return "32-bit (5xx)";
|
||||
default: gcc_unreachable ();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
msp430_option_override (void)
|
||||
{
|
||||
@ -724,37 +738,90 @@ msp430_option_override (void)
|
||||
|
||||
if (target_cpu)
|
||||
{
|
||||
/* gcc/common/config/msp430-common.c will have
|
||||
already canonicalised the string in target_cpu. */
|
||||
if (strcasecmp (target_cpu, "msp430x") == 0)
|
||||
msp430x = true;
|
||||
else /* target_cpu == "msp430" - already handled by the front end. */
|
||||
msp430x = false;
|
||||
}
|
||||
/* Note - the front end has already ensured at most
|
||||
one of target_cpu and target_mcu will be set. */
|
||||
else if (target_mcu)
|
||||
|
||||
if (target_mcu)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* If we are given an MCU name, we assume that it supports 430X.
|
||||
Then we check to see if it is one of the known MCUs that only
|
||||
supports 430. */
|
||||
msp430x = true;
|
||||
|
||||
/* FIXME: This array is alpha sorted, so we could use a binary search. */
|
||||
/* FIXME: If the array were alpha sorted, we could use a binary search. */
|
||||
for (i = ARRAY_SIZE (msp430_mcu_data); i--;)
|
||||
if (strcasecmp (msp430_mcu_data[i].name, target_mcu) == 0)
|
||||
{
|
||||
msp430x = msp430_mcu_data[i].revision >= 1;
|
||||
bool xisa = msp430_mcu_data[i].revision >= 1;
|
||||
|
||||
if (msp430_warn_mcu)
|
||||
{
|
||||
if (target_cpu&& msp430x != xisa)
|
||||
warning (0, "MCU '%s' supports %s ISA but -mcpu option is set to %s",
|
||||
target_mcu, xisa ? "430X" : "430", msp430x ? "430X" : "430");
|
||||
|
||||
if (msp430_mcu_data[i].hwmpy == 0
|
||||
&& msp430_hwmult_type != AUTO
|
||||
&& msp430_hwmult_type != NONE)
|
||||
warning (0, "MCU '%s' does not have hardware multiply support, but -mhwmult is set to %s",
|
||||
target_mcu,
|
||||
msp430_hwmult_type == SMALL ? "16-bit" : msp430_hwmult_type == LARGE ? "32-bit" : "f5series");
|
||||
else if (msp430_hwmult_type == SMALL
|
||||
&& msp430_mcu_data[i].hwmpy != 1
|
||||
&& msp430_mcu_data[i].hwmpy != 2 )
|
||||
warning (0, "MCU '%s' supports %s hardware multiply, but -mhwmult is set to 16-bit",
|
||||
target_mcu, hwmult_name (msp430_mcu_data[i].hwmpy));
|
||||
else if (msp430_hwmult_type == LARGE && msp430_mcu_data[i].hwmpy != 4)
|
||||
warning (0, "MCU '%s' supports %s hardware multiply, but -mhwmult is set to 32-bit",
|
||||
target_mcu, hwmult_name (msp430_mcu_data[i].hwmpy));
|
||||
else if (msp430_hwmult_type == F5SERIES && msp430_mcu_data[i].hwmpy != 8)
|
||||
warning (0, "MCU '%s' supports %s hardware multiply, but -mhwmult is set to f5series",
|
||||
target_mcu, hwmult_name (msp430_mcu_data[i].hwmpy));
|
||||
}
|
||||
|
||||
msp430x = xisa;
|
||||
break;
|
||||
}
|
||||
|
||||
if (i < 0)
|
||||
{
|
||||
warning (0, "Unrecognised MCU name '%s', assuming that it is just a MSP430 with no hardware multiply",
|
||||
target_mcu);
|
||||
msp430x = false;
|
||||
if (msp430_hwmult_type == AUTO)
|
||||
{
|
||||
if (msp430_warn_mcu)
|
||||
{
|
||||
if (target_cpu == NULL)
|
||||
warning (0,
|
||||
"Unrecognised MCU name '%s', assuming that it is just a MSP430 with no hardware multiply.\nUse the -mcpu and -mhwmult options to set these explicitly.",
|
||||
target_mcu);
|
||||
else
|
||||
warning (0,
|
||||
"Unrecognised MCU name '%s', assuming that it has no hardware multiply.\nUse the -mhwmult option to set this explicitly.",
|
||||
target_mcu);
|
||||
}
|
||||
|
||||
msp430_hwmult_type = NONE;
|
||||
}
|
||||
else if (target_cpu == NULL)
|
||||
{
|
||||
if (msp430_warn_mcu)
|
||||
warning (0,
|
||||
"Unrecognised MCU name '%s', assuming that it just supports the MSP430 ISA.\nUse the -mcpu option to set the ISA explicitly.",
|
||||
target_mcu);
|
||||
|
||||
msp430x = false;
|
||||
}
|
||||
else if (msp430_warn_mcu)
|
||||
warning (0,
|
||||
"Unrecognised MCU name '%s'.", target_mcu);
|
||||
}
|
||||
}
|
||||
|
||||
/* The F5 series are all able to support the 430X ISA. */
|
||||
if (target_cpu == NULL && target_mcu == NULL && msp430_hwmult_type == F5SERIES)
|
||||
msp430x = true;
|
||||
|
||||
if (TARGET_LARGE && !msp430x)
|
||||
error ("-mlarge requires a 430X-compatible -mmcu=");
|
||||
|
||||
@ -955,7 +1022,8 @@ msp430_addr_space_pointer_mode (addr_space_t addrspace)
|
||||
static machine_mode
|
||||
msp430_unwind_word_mode (void)
|
||||
{
|
||||
return TARGET_LARGE ? PSImode : HImode;
|
||||
/* This needs to match msp430_init_dwarf_reg_sizes_extra (below). */
|
||||
return msp430x ? PSImode : HImode;
|
||||
}
|
||||
|
||||
/* Determine if one named address space is a subset of another. */
|
||||
@ -1930,7 +1998,7 @@ const struct attribute_spec msp430_attribute_table[] =
|
||||
{ ATTR_NOINIT, 0, 0, true, false, false, msp430_data_attr, false },
|
||||
{ ATTR_PERSIST, 0, 0, true, false, false, msp430_data_attr, false },
|
||||
|
||||
{ NULL, 0, 0, false, false, false, NULL, false }
|
||||
{ NULL, 0, 0, false, false, false, NULL, false }
|
||||
};
|
||||
|
||||
#undef TARGET_ASM_FUNCTION_PROLOGUE
|
||||
@ -2795,6 +2863,7 @@ msp430_init_dwarf_reg_sizes_extra (tree address)
|
||||
rtx addr = expand_normal (address);
|
||||
rtx mem = gen_rtx_MEM (BLKmode, addr);
|
||||
|
||||
/* This needs to match msp430_unwind_word_mode (above). */
|
||||
if (!msp430x)
|
||||
return;
|
||||
|
||||
@ -3089,8 +3158,8 @@ static const struct
|
||||
{ "__divsi3", "__mspabi_divli" },
|
||||
{ "__divdi3", "__mspabi_divlli" },
|
||||
{ "__udivhi3", "__mspabi_divu" },
|
||||
{ "__udivsi3", "__mspabi_divlu" },
|
||||
{ "__udivdi3", "__mspabi_divllu" },
|
||||
{ "__udivsi3", "__mspabi_divul" },
|
||||
{ "__udivdi3", "__mspabi_divull" },
|
||||
{ "__modhi3", "__mspabi_remi" },
|
||||
{ "__modsi3", "__mspabi_remli" },
|
||||
{ "__moddi3", "__mspabi_remlli" },
|
||||
@ -3186,9 +3255,12 @@ msp430_no_hwmult (void)
|
||||
if (msp430_hwmult_type == NONE)
|
||||
return true;
|
||||
|
||||
if (target_mcu == NULL || msp430_hwmult_type != AUTO)
|
||||
if (msp430_hwmult_type != AUTO)
|
||||
return false;
|
||||
|
||||
if (target_mcu == NULL)
|
||||
return true;
|
||||
|
||||
if (target_mcu == cached_match)
|
||||
return cached_result;
|
||||
|
||||
|
@ -65,13 +65,37 @@ extern bool msp430x;
|
||||
is enabled (the GDB testsuite relies upon unused entities not being deleted). */
|
||||
#define LINK_SPEC "%{mrelax:--relax} %{mlarge:%{!r:%{!g:--gc-sections}}}"
|
||||
|
||||
extern const char * msp430_select_hwmult_lib (int, const char **);
|
||||
# define EXTRA_SPEC_FUNCTIONS \
|
||||
{ "msp430_hwmult_lib", msp430_select_hwmult_lib },
|
||||
|
||||
/* Specify the libraries to include on the linker command line.
|
||||
|
||||
Selecting the hardware multiply library to use is quite complex.
|
||||
If the user has specified -mhwmult=FOO then the mapping is quite
|
||||
easy (and could be handled here in the SPEC string), unless FOO
|
||||
is set to AUTO. In this case the -mmcu= option must be consulted
|
||||
instead. If the -mhwmult= option is not specified then the -mmcu=
|
||||
option must then be examined. If neither -mhwmult= nor -mmcu= are
|
||||
specified then a default hardware multiply library is used.
|
||||
|
||||
Examining the -mmcu=FOO option is difficult, and it is so this
|
||||
reason that a spec function is used. There are so many possible
|
||||
values of FOO that a table is used to look up the name and map
|
||||
it to a hardware multiply library. This table (in device-msp430.c)
|
||||
must be kept in sync with the same table in msp430.c. */
|
||||
#undef LIB_SPEC
|
||||
#define LIB_SPEC " \
|
||||
--start-group \
|
||||
%{mhwmult=auto:%{mmcu=*:%:msp430_hwmult_lib(mcu %{mmcu=*:%*});:%:msp430_hwmult_lib(default)}; \
|
||||
mhwmult=*:%:msp430_hwmult_lib(hwmult %{mhwmult=*:%*}); \
|
||||
mmcu=*:%:msp430_hwmult_lib(mcu %{mmcu=*:%*}); \
|
||||
:%:msp430_hwmult_lib(default)} \
|
||||
-lc \
|
||||
-lgcc \
|
||||
-lcrt \
|
||||
%{msim:-lsim} \
|
||||
%{!msim:-lnosys} \
|
||||
--end-group \
|
||||
%{!T*:%{!msim:%{mmcu=*:--script=%*.ld}}} \
|
||||
%{!T*:%{!msim:%{!mmcu=*:%Tmsp430.ld}}} \
|
||||
|
@ -10,6 +10,10 @@ mmcu=
|
||||
Target Report ToLower Joined RejectNegative Var(target_mcu)
|
||||
Specify the MCU to build for.
|
||||
|
||||
mwarn-mcu
|
||||
Target Report Var(msp430_warn_mcu) Init(1)
|
||||
Warn if an MCU name is unrecognised or conflicts with other options (default: on).
|
||||
|
||||
mcpu=
|
||||
Target Report Joined RejectNegative Var(target_cpu)
|
||||
Specify the ISA to build for: msp430, msp430x, msp430xv2.
|
||||
|
@ -18,6 +18,10 @@
|
||||
# License along with GCC; see the file COPYING3. If not see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
|
||||
driver-msp430.o: $(srcdir)/config/msp430/driver-msp430.c \
|
||||
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
|
||||
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
|
||||
|
||||
# Enable multilibs:
|
||||
|
||||
MULTILIB_OPTIONS = mcpu=msp430 mlarge
|
||||
@ -259,536 +263,6 @@ MULTILIB_MATCHES += mcpu?msp430=mmcu?msp430f4794
|
||||
MULTILIB_EXCEPTIONS = mcpu=msp430/mlarge
|
||||
|
||||
|
||||
# Multilibs for different types of hardware multiply support:
|
||||
|
||||
MULTILIB_OPTIONS += mhwmult=none/mhwmult=32bit/mhwmult=f5series
|
||||
MULTILIB_DIRNAMES += nomul 32mul f5mul
|
||||
|
||||
MULTILIB_EXCEPTIONS += mcpu=msp430/mlarge/mhwmult=none
|
||||
MULTILIB_EXCEPTIONS += mcpu=msp430/mlarge/mhwmult=32bit
|
||||
MULTILIB_EXCEPTIONS += mcpu=msp430/mlarge/mhwmult=f5series
|
||||
MULTILIB_EXCEPTIONS += mcpu=msp430/mhwmult=f5series
|
||||
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c091
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c092
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c111
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c1111
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c112
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c1121
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c1331
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c1351
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c311s
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c312
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c313
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c314
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c315
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c323
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c325
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c412
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430c413
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430e112
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430e313
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430e315
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430e325
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f110
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1101
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1101a
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1111
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1111a
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f112
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1121
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1121a
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1122
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1132
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f122
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1222
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f123
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f1232
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f133
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f135
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f155
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f156
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f157
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2001
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2002
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2003
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2011
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2012
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2013
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2101
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2111
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2112
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2121
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2122
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2131
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2132
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2232
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2234
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2252
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2254
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2272
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f2274
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f412
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f413
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f4132
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f415
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f4152
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f417
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f4250
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f4260
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f4270
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f435
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f4351
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f436
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f4361
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f437
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f4371
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f438
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f439
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f477
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f478
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430f479
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe423
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe4232
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe423a
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe4242
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe425
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe4252
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe425a
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe427
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe4272
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fe427a
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg4250
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg4260
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg4270
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg437
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg438
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg439
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg477
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg478
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fg479
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fr2032
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fr2033
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fr4131
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fr4132
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fr4133
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fw423
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fw425
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fw427
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fw428
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430fw429
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2001
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2101
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2102
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2111
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2112
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2113
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2121
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2131
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2132
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2152
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2153
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2201
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2202
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2203
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2210
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2211
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2212
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2213
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2221
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2230
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2231
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2232
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2233
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2252
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2253
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2302
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2303
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2312
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2313
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2332
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2333
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2352
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2353
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2402
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2403
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2412
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2413
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2432
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2433
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2444
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2452
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2453
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2513
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2533
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2544
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2553
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2744
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2755
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2855
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430g2955
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430l092
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430p112
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430p313
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430p315
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430p315s
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430p325
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?msp430tch5e
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?rf430frl152h
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?rf430frl152h_rom
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?rf430frl153h
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?rf430frl153h_rom
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?rf430frl154h
|
||||
MULTILIB_MATCHES += mhwmult?none=mmcu?rf430frl154h_rom
|
||||
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47126
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47127
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47163
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47166
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47167
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47173
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47176
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47177
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47183
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47186
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47187
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47193
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47196
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f47197
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f4783
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f4784
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f4793
|
||||
MULTILIB_MATCHES += mhwmult?32bit=mmcu?msp430f4794
|
||||
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f5123
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f5125
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f5133
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f5135
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f5137
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f5143
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f5145
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f5147
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f6125
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f6126
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f6127
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f6135
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f6137
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f6143
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f6145
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?cc430f6147
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430bt5190
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5131
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5132
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5151
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5152
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5171
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5172
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5212
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5213
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5214
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5217
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5218
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5219
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5222
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5223
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5224
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5227
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5228
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5229
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5232
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5234
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5237
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5239
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5242
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5244
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5247
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5249
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5252
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5253
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5254
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5255
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5256
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5257
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5258
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5259
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5304
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5308
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5309
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5310
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5324
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5325
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5326
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5327
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5328
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5329
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5333
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5335
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5336
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5338
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5340
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5341
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5342
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5358
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5359
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5418
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5418a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5419
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5419a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5435
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5435a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5436
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5436a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5437
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5437a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5438
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5438a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5500
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5501
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5502
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5503
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5504
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5505
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5506
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5507
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5508
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5509
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5510
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5513
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5514
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5515
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5517
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5519
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5521
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5522
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5524
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5525
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5526
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5527
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5528
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5529
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5630
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5631
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5632
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5633
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5634
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5635
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5636
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5637
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5638
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5658
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5659
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f5xx_6xxgeneric
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6433
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6435
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6436
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6438
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6458
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6459
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6630
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6631
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6632
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6633
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6634
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6635
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6636
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6637
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6638
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6658
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6659
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6720
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6720a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6721
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6721a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6723
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6723a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6724
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6724a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6725
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6725a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6726
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6726a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6730
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6730a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6731
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6731a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6733
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6733a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6734
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6734a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6735
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6735a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6736
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6736a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6745
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67451
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67451a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6745a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6746
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67461
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67461a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6746a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6747
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67471
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67471a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6747a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6748
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67481
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67481a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6748a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6749
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67491
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67491a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6749a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67621
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67621a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67641
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67641a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6765
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67651
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67651a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6765a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6766
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67661
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67661a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6766a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6767
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67671
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67671a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6767a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6768
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67681
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67681a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6768a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6769
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67691
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67691a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6769a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6775
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67751
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67751a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6775a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6776
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67761
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67761a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6776a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6777
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67771
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67771a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6777a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6778
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67781
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67781a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6778a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6779
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67791
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f67791a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430f6779a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fg6425
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fg6426
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fg6625
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fg6626
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr2433
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr2xx_4xxgeneric
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5720
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5721
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5722
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5723
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5724
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5725
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5726
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5727
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5728
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5729
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5730
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5731
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5732
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5733
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5734
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5735
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5736
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5737
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5738
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5739
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr57xxgeneric
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5847
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr58471
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5848
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5849
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5857
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5858
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5859
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5867
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr58671
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5868
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5869
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5870
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5872
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr58721
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5887
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5888
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5889
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr58891
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5922
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr59221
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5947
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr59471
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5948
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5949
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5957
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5958
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5959
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5967
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5968
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5969
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr59691
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5970
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5972
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr59721
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5986
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5987
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5988
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5989
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr59891
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr5xx_6xxgeneric
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6820
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6822
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr68221
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6870
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6872
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr68721
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6877
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6879
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr68791
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6887
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6888
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6889
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr68891
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6920
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6922
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr69221
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6927
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr69271
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6928
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6970
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6972
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr69721
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6977
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6979
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr69791
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6987
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6988
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr6989
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430fr69891
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430sl5438a
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?msp430xgeneric
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?rf430f5144
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?rf430f5155
|
||||
MULTILIB_MATCHES += mhwmult?f5series=mmcu?rf430f5175
|
||||
|
||||
# FIXME: There are a whole bunch of exceptions to these matches that
|
||||
# could be added here as well...
|
||||
|
||||
|
||||
MULTILIB_EXTRA_OPTS =
|
||||
|
||||
msp430-c.o: $(srcdir)/config/msp430/msp430-c.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(TM_H)
|
||||
|
@ -845,6 +845,7 @@ Objective-C and Objective-C++ Dialects}.
|
||||
|
||||
@emph{MSP430 Options}
|
||||
@gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol
|
||||
-mwarn-mcu @gol
|
||||
-mcode-region= -mdata-region= @gol
|
||||
-msilicon-errata= -msilicon-errata-warn= @gol
|
||||
-mhwmult= -minrt}
|
||||
@ -18510,6 +18511,16 @@ cause the linker to search for a script called @file{xxx.ld}.
|
||||
|
||||
This option is also passed on to the assembler.
|
||||
|
||||
@item -mwarn-mcu
|
||||
@itemx -mno-warn-mcu
|
||||
@opindex mwarn-mcu
|
||||
@opindex mno-warn-mcu
|
||||
This option enables or disables warnings about conflicts between the
|
||||
MCU name specified by the @option{-mmcu} option and the ISA set by the
|
||||
@option{-mcpu} option and/or the hardware multiply support set by the
|
||||
@option{-mhwmult} option. It also toggles warnings about unrecognised
|
||||
MCU names. This option is on by default.
|
||||
|
||||
@item -mcpu=
|
||||
@opindex mcpu=
|
||||
Specifies the ISA to use. Accepted values are @samp{msp430},
|
||||
@ -18544,10 +18555,9 @@ for the original 16-bit-only multiply supported by early MCUs.
|
||||
@samp{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
|
||||
A value of @samp{auto} can also be given. This tells GCC to deduce
|
||||
the hardware multiply support based upon the MCU name provided by the
|
||||
@option{-mmcu} option. If no @option{-mmcu} option is specified then
|
||||
@samp{32bit} hardware multiply support is assumed. If the MCU name is
|
||||
not recognised then no hardware multiply support is assumed.
|
||||
@code{auto} is the default setting.
|
||||
@option{-mmcu} option. If no @option{-mmcu} option is specified or if
|
||||
the MCU name is not recognised then no hardware multiply support is
|
||||
assumed. @code{auto} is the default setting.
|
||||
|
||||
Hardware multiplies are normally performed by calling a library
|
||||
routine. This saves space in the generated code. When compiling at
|
||||
|
@ -1,3 +1,12 @@
|
||||
2015-11-25 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* gcc.target/msp430/msp_abi_div_funcs.c: New test.
|
||||
* gcc.target/msp430/mul_main.h: New test support file.
|
||||
* gcc.target/msp430/mul_none.c: New test.
|
||||
* gcc.target/msp430/mul_16bit.c: New test.
|
||||
* gcc.target/msp430/mul_32bit.c: New test.
|
||||
* gcc.target/msp430/mul_f5.c: New test.
|
||||
|
||||
2015-12-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/68680
|
||||
|
@ -5,4 +5,4 @@
|
||||
|
||||
#define _GNU_SOURCE /* { dg-warning "redefined" } */
|
||||
|
||||
/* { dg-message "" "#define _GNU_SOURCE" {target *-*-* } 0 }
|
||||
/* { dg-message "" "#define _GNU_SOURCE" {target *-*-* } 0 } */
|
||||
|
150
gcc/testsuite/gcc.target/msp430/msp_abi_div_funcs.c
Normal file
150
gcc/testsuite/gcc.target/msp430/msp_abi_div_funcs.c
Normal file
@ -0,0 +1,150 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-std=c99" } */
|
||||
|
||||
extern int printf (const char *, ...);
|
||||
extern void abort (void) __attribute__((noreturn));
|
||||
|
||||
typedef unsigned long uint32;
|
||||
typedef unsigned long long uint64;
|
||||
|
||||
extern uint32 __mspabi_divul (uint32, uint32);
|
||||
extern uint32 __mspabi_divlu (uint32, uint32);
|
||||
extern uint64 __mspabi_divull (uint64, uint64);
|
||||
extern uint64 __mspabi_divllu (uint64, uint64);
|
||||
|
||||
uint32 func1 (uint32, uint32) __attribute__ ((noinline));
|
||||
uint32 func2 (uint32, uint32) __attribute__ ((noinline));
|
||||
uint32 func3 (uint32, uint32) __attribute__ ((noinline));
|
||||
uint64 func4 (uint64, uint64) __attribute__ ((noinline));
|
||||
uint64 func5 (uint64, uint64) __attribute__ ((noinline));
|
||||
uint64 func6 (uint64, uint64) __attribute__ ((noinline));
|
||||
|
||||
|
||||
#define DEBUG 0
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int fail = 0;
|
||||
|
||||
if (func1 (7UL, 3UL) != 2UL)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("FAIL: func1: 7 / 3 returns %lu\n", func1 (7UL, 3UL));
|
||||
#endif
|
||||
++ fail;
|
||||
}
|
||||
|
||||
if (func2 (7UL, 3UL) != 2UL)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("FAIL: func2: 7 / 3 returns %lu\n", func2 (7UL, 3UL));
|
||||
#endif
|
||||
++ fail;
|
||||
}
|
||||
|
||||
if (func3 (7UL, 3UL) != 2UL)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("FAIL: func4: 7 / 3 returns %lu\n", func3 (7UL, 3UL));
|
||||
#endif
|
||||
++ fail;
|
||||
}
|
||||
|
||||
if (func4 (7ULL, 3ULL) != 2ULL)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("FAIL: func4: 7 / 3 returns %llu\n", func4 (7ULL, 3ULL));
|
||||
#endif
|
||||
++ fail;
|
||||
}
|
||||
|
||||
if (func5 (7ULL, 3ULL) != 2ULL)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("FAIL: func5: 7 / 3 returns %llu\n", func5 (7ULL, 3ULL));
|
||||
#endif
|
||||
++ fail;
|
||||
}
|
||||
|
||||
if (func6 (7ULL, 3ULL) != 2ULL)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("FAIL: func6: 7 / 3 returns %llu\n", func6 (7ULL, 3ULL));
|
||||
#endif
|
||||
++ fail;
|
||||
}
|
||||
|
||||
if (fail)
|
||||
abort ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* At high levels of optimization gcc will probably fold func1 and func4 into
|
||||
main, but this does not really matter. Those two functions are just there
|
||||
for a sanity check at low levels of optimization. */
|
||||
|
||||
uint32 func1 (uint32 a, uint32 b) { return a / b; }
|
||||
uint32 func2 (uint32 a, uint32 b) { return __mspabi_divul (a, b); }
|
||||
uint32 func3 (uint32 a, uint32 b) { return __mspabi_divlu (a, b); }
|
||||
uint64 func4 (uint64 a, uint64 b) { return a / b; }
|
||||
uint64 func5 (uint64 a, uint64 b) { return __mspabi_divull (a, b); }
|
||||
|
||||
uint64
|
||||
func6 (uint64 a, uint64 b)
|
||||
{
|
||||
uint64 ret;
|
||||
|
||||
/* This test function is special. The correctly spelt ABI function
|
||||
__mspabi_divull takes its first argument in registers R8::R11 and its
|
||||
second argument in registers R12::R15, but GCC knows that __mspabi_divllu
|
||||
is not the correct spelling and so it will use the normal function
|
||||
calling convention - first argument in R12::R15, second argument on the
|
||||
stack.
|
||||
|
||||
The stub function for __mspabi_divllu in libgcc just does a BRAnch to
|
||||
the real __mspabi_divull function - it does *not* rearrange the arguments
|
||||
or pull anything off the stack. This is correct, because in real code
|
||||
that calls __mspabi_divllu, compiled by *old* versions of gcc, the
|
||||
arguments will already be in the special ABI mandated locations.
|
||||
|
||||
As a result, in order to test __mspabi_divllu here, we have to put the
|
||||
arguments into the correct registers ourselves and call __mspabi_divllu
|
||||
manually. This does lead to some very inefficient code generation, but
|
||||
that is not our concern here. */
|
||||
|
||||
#ifdef __MSP430X_LARGE__
|
||||
__asm ("mov %A1, r8\n\
|
||||
mov %B1, r9\n\
|
||||
mov %C1, r10\n\
|
||||
mov %D1, r11\n\
|
||||
mov %A2, r12\n\
|
||||
mov %B2, r13\n\
|
||||
mov %C2, r14\n\
|
||||
mov %D2, r15\n\
|
||||
calla #__mspabi_divllu\n\
|
||||
mov r12, %A0\n\
|
||||
mov r13, %B0\n\
|
||||
mov r14, %C0\n\
|
||||
mov r15, %D0\n"
|
||||
: "=r" (ret) : "r" (a), "m" (b));
|
||||
#else
|
||||
__asm ("mov %A1, r8\n\
|
||||
mov %B1, r9\n\
|
||||
mov %C1, r10\n\
|
||||
mov %D1, r11\n\
|
||||
mov %A2, r12\n\
|
||||
mov %B2, r13\n\
|
||||
mov %C2, r14\n\
|
||||
mov %D2, r15\n\
|
||||
call #__mspabi_divllu\n\
|
||||
mov r12, %A0\n\
|
||||
mov r13, %B0\n\
|
||||
mov r14, %C0\n\
|
||||
mov r15, %D0\n"
|
||||
: "=r" (ret) : "r" (a), "m" (b));
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
4
gcc/testsuite/gcc.target/msp430/mul_16bit.c
Normal file
4
gcc/testsuite/gcc.target/msp430/mul_16bit.c
Normal file
@ -0,0 +1,4 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-mhwmult=16bit" } */
|
||||
|
||||
#include "mul_main.h"
|
4
gcc/testsuite/gcc.target/msp430/mul_32bit.c
Normal file
4
gcc/testsuite/gcc.target/msp430/mul_32bit.c
Normal file
@ -0,0 +1,4 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-mhwmult=32bit" } */
|
||||
|
||||
#include "mul_main.h"
|
4
gcc/testsuite/gcc.target/msp430/mul_f5.c
Normal file
4
gcc/testsuite/gcc.target/msp430/mul_f5.c
Normal file
@ -0,0 +1,4 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-mhwmult=f5series" } */
|
||||
|
||||
#include "mul_main.h"
|
83
gcc/testsuite/gcc.target/msp430/mul_main.h
Normal file
83
gcc/testsuite/gcc.target/msp430/mul_main.h
Normal file
@ -0,0 +1,83 @@
|
||||
extern void abort (void) __attribute__((noreturn));
|
||||
extern int printf (const char *, ...);
|
||||
|
||||
int func1 (int, int) __attribute__((noinline));
|
||||
long func2 (int, int) __attribute__((noinline));
|
||||
long func3 (long, long) __attribute__((noinline));
|
||||
long long func4 (long, long) __attribute__((noinline));
|
||||
long long func5 (long long, long long) __attribute__((noinline));
|
||||
unsigned long func6 (unsigned int, unsigned int) __attribute__((noinline));
|
||||
unsigned long long func7 (unsigned long, unsigned long) __attribute__((noinline));
|
||||
|
||||
#define DEBUG 0
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
if (func1 (6, 7) != 42)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("test1 fail: 6 * 7 = %d!\n", func1 (6, 7));
|
||||
#endif
|
||||
abort ();
|
||||
}
|
||||
|
||||
if (func2 (1000, 1000) != 1000000L)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("test2 fail: 1000 * 1000 = %ld!\n", func2 (1000, 1000));
|
||||
#endif
|
||||
abort ();
|
||||
}
|
||||
|
||||
if (func3 (70000L, -32L) != -2240000L)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("test3 fail: 70000 * -32 = %ld!\n", func3 (70000L, -32L));
|
||||
#endif
|
||||
abort ();
|
||||
}
|
||||
|
||||
if (func4 (-40L, -80L) != 3200LL)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("test4 fail: -40 * -80 = %lld!\n", func4 (-40L, -80L));
|
||||
#endif
|
||||
abort ();
|
||||
}
|
||||
|
||||
if (func5(9LL, 9LL) != 81LL)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("test5 fail: 9 * 9 = %lld!\n", func5 (9LL, 9LL));
|
||||
#endif
|
||||
abort ();
|
||||
}
|
||||
|
||||
if (func6 (-2U, 8U) != 524272LU)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("test6 fail: -2 * 8 = %lu!\n", func6 (-2U, 8U));
|
||||
#endif
|
||||
abort ();
|
||||
}
|
||||
|
||||
if (func7 (99UL, 101UL) != 9999LLU)
|
||||
{
|
||||
#if DEBUG
|
||||
printf ("test7 fail: 99 * 101 = %llu!\n", func7 (99UL, 101UL));
|
||||
#endif
|
||||
abort ();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int func1 (int a, int b) { return a * b; }
|
||||
long func2 (int a, int b) { return (long) a * (long) b; }
|
||||
long func3 (long a, long b) { return a * b; }
|
||||
long long func4 (long a, long b) { return (long long) a * (long long) b; }
|
||||
long long func5 (long long a, long long b) { return a * b; }
|
||||
unsigned long func6 (unsigned int a, unsigned int b) { return (unsigned long) a * (unsigned long) b; }
|
||||
unsigned long long func7 (unsigned long a, unsigned long b) { return (unsigned long long) a * (unsigned long long) b; }
|
||||
|
5
gcc/testsuite/gcc.target/msp430/mul_none.c
Normal file
5
gcc/testsuite/gcc.target/msp430/mul_none.c
Normal file
@ -0,0 +1,5 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-mhwmult=none" } */
|
||||
|
||||
#include "mul_main.h"
|
||||
|
@ -1,3 +1,18 @@
|
||||
2015-12-04 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config/msp430/mpy.c (__mulhi3): Use a faster algorithm.
|
||||
Allow for the second argument being negative.
|
||||
* config.host (extra_parts): Define for MSP430. Create separate
|
||||
libraries for each of the hardware multiply formats.
|
||||
* config/msp430/lib2hw_mul.S: Build only the multiply routines
|
||||
that are needed.
|
||||
* config/msp430/lib2mul.c: Likewise.
|
||||
* config/msp430/t-msp430 (LIB2ADD): Remove lib2hw_mul.S.
|
||||
Add rules to build hardware multiply libraries.
|
||||
* config/msp430/lib2divSI.c: (__mspabi_divlu): Alias for
|
||||
__mspabi_divul function.
|
||||
(__mspabi_divllu): New stub function.
|
||||
|
||||
2015-12-01 John David Anglin <danglin@gcc.gnu.org>
|
||||
|
||||
* config/pa/fptr.c (__canonicalize_funcptr_for_compare): Initialize
|
||||
|
@ -942,6 +942,7 @@ moxie-*-rtems*)
|
||||
;;
|
||||
msp430*-*-elf)
|
||||
tmake_file="$tm_file t-crtstuff t-fdpbit msp430/t-msp430"
|
||||
extra_parts="$extra_parts libmul_none.a libmul_16.a libmul_32.a libmul_f5.a"
|
||||
;;
|
||||
nds32*-elf*)
|
||||
# Basic makefile fragment and extra_parts for crt stuff.
|
||||
|
@ -40,3 +40,32 @@ typedef int word_type __attribute__ ((mode (__word__)));
|
||||
#define NAME_MODE si
|
||||
|
||||
#include "msp430-divmod.h"
|
||||
|
||||
/* ---------------------------------------------------------------------*/
|
||||
|
||||
/* There is a typo in the MSP430 ABI document. It calls the unsigned
|
||||
long integer division function __mspabi_divlu when it should be
|
||||
__mspabi_divul. Likewise the unsigned long long integer division
|
||||
function is called __mspabi_divllu when it should be __mspabi_divull.
|
||||
|
||||
Earlier versions of this toolchain used generate the ABI compliant
|
||||
names, so in order to support object files built with those tools
|
||||
we provide stub functions that call the correct routines. */
|
||||
|
||||
asm (".global __mspabi_divlu\n\
|
||||
.set __mspabi_divlu, __mspabi_divul");
|
||||
|
||||
/* We cannot use the same trick for __mspabi_divllu as that is defined
|
||||
in a different file. Instead we create a stub here. The cost of
|
||||
executing the branch instruction will be trivial compared to the
|
||||
cost of executing a long long division. */
|
||||
|
||||
#ifdef __MSP430X_LARGE__
|
||||
asm (".global __mspabi_divllu\n\
|
||||
__mspabi_divllu:\n\
|
||||
BRA #__mspabi_divull");
|
||||
#else
|
||||
asm (".global __mspabi_divllu\n\
|
||||
__mspabi_divllu:\n\
|
||||
BR #__mspabi_divull");
|
||||
#endif
|
||||
|
@ -20,17 +20,42 @@
|
||||
; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
; <http://www.gnu.org/licenses/>.
|
||||
|
||||
.macro start_func name
|
||||
.pushsection .text.\name,"ax",@progbits
|
||||
;; Macro to start a multiply function. Each function has three
|
||||
;; names, and hence three entry points - although they all go
|
||||
;; through the same code. The first name is the version generated
|
||||
;; by GCC. The second is the MSP430 EABI mandated name for the
|
||||
;; *software* version of the function. The third is the EABI
|
||||
;; mandated name for the *hardware* version of the function.
|
||||
;;
|
||||
;; Since we are using the hardware and software names to point
|
||||
;; to the same code this effectively means that we are mapping
|
||||
;; the software function onto the hardware function. Thus if
|
||||
;; the library containing this code is linked into an application
|
||||
;; (before the libgcc.a library) *all* multiply functions will
|
||||
;; be mapped onto the hardware versions.
|
||||
;;
|
||||
;; We construct each function in its own section so that linker
|
||||
;; garbage collection can be used to delete any unused functions
|
||||
;; from this file.
|
||||
.macro start_func gcc_name eabi_soft_name eabi_hard_name
|
||||
.pushsection .text.\gcc_name,"ax",@progbits
|
||||
.p2align 1
|
||||
.global \name
|
||||
.type \name , @function
|
||||
\name:
|
||||
.global \eabi_hard_name
|
||||
.type \eabi_hard_name , @function
|
||||
\eabi_hard_name:
|
||||
.global \eabi_soft_name
|
||||
.type \eabi_soft_name , @function
|
||||
\eabi_soft_name:
|
||||
.global \gcc_name
|
||||
.type \gcc_name , @function
|
||||
\gcc_name:
|
||||
PUSH.W sr ; Save current interrupt state
|
||||
DINT ; Disable interrupts
|
||||
NOP ; Account for latency
|
||||
.endm
|
||||
|
||||
|
||||
;; End a function started with the start_func macro.
|
||||
.macro end_func name
|
||||
#ifdef __MSP430X_LARGE__
|
||||
POP.W sr
|
||||
@ -42,6 +67,29 @@
|
||||
.popsection
|
||||
.endm
|
||||
|
||||
|
||||
;; Like the start_func macro except that it is used to
|
||||
;; create a false entry point that just jumps to the
|
||||
;; software function (implemented elsewhere).
|
||||
.macro fake_func gcc_name eabi_soft_name eabi_hard_name
|
||||
.pushsection .text.\gcc_name,"ax",@progbits
|
||||
.p2align 1
|
||||
.global \eabi_hard_name
|
||||
.type \eabi_hard_name , @function
|
||||
\eabi_hard_name:
|
||||
.global \gcc_name
|
||||
.type \gcc_name , @function
|
||||
\gcc_name:
|
||||
#ifdef __MSP430X_LARGE__
|
||||
BRA \eabi_soft_name
|
||||
#else
|
||||
BR \eabi_soft_name
|
||||
#endif
|
||||
.size \gcc_name , . - \gcc_name
|
||||
.popsection
|
||||
.endm
|
||||
|
||||
|
||||
.macro mult16 OP1, OP2, RESULT
|
||||
;* * 16-bit hardware multiply: int16 = int16 * int16
|
||||
;*
|
||||
@ -160,7 +208,66 @@
|
||||
.endm
|
||||
|
||||
|
||||
;; First generation MSP430 hardware multiplies ....
|
||||
;; EABI mandated names:
|
||||
;;
|
||||
;; int16 __mspabi_mpyi (int16 x, int16 y)
|
||||
;; Multiply int by int.
|
||||
;; int16 __mspabi_mpyi_hw (int16 x, int16 y)
|
||||
;; Multiply int by int. Uses hardware MPY16 or MPY32.
|
||||
;; int16 __mspabi_mpyi_f5hw (int16 x, int16 y)
|
||||
;; Multiply int by int. Uses hardware MPY32 (F5xx devices and up).
|
||||
;;
|
||||
;; int32 __mspabi_mpyl (int32 x, int32 y);
|
||||
;; Multiply long by long.
|
||||
;; int32 __mspabi_mpyl_hw (int32 x, int32 y)
|
||||
;; Multiply long by long. Uses hardware MPY16.
|
||||
;; int32 __mspabi_mpyl_hw32 (int32 x, int32 y)
|
||||
;; Multiply long by long. Uses hardware MPY32 (F4xx devices).
|
||||
;; int32 __mspabi_mpyl_f5hw (int32 x, int32 y)
|
||||
;; Multiply long by long. Uses hardware MPY32 (F5xx devices and up).
|
||||
;;
|
||||
;; int64 __mspabi_mpyll (int64 x, int64 y)
|
||||
;; Multiply long long by long long.
|
||||
;; int64 __mspabi_mpyll_hw (int64 x, int64 y)
|
||||
;; Multiply long long by long long. Uses hardware MPY16.
|
||||
;; int64 __mspabi_mpyll_hw32 (int64 x, int64 y)
|
||||
;; Multiply long long by long long. Uses hardware MPY32 (F4xx devices).
|
||||
;; int64 __mspabi_mpyll_f5hw (int64 x, int64 y)
|
||||
;; Multiply long long by long long. Uses hardware MPY32 (F5xx devices and up).
|
||||
;;
|
||||
;; int32 __mspabi_mpysl (int16 x, int16 y)
|
||||
;; Multiply int by int; result is long.
|
||||
;; int32 __mspabi_mpysl_hw(int16 x, int16 y)
|
||||
;; Multiply int by int; result is long. Uses hardware MPY16 or MPY32
|
||||
;; int32 __mspabi_mpysl_f5hw(int16 x, int16 y)
|
||||
;; Multiply int by int; result is long. Uses hardware MPY32 (F5xx devices and up).
|
||||
;;
|
||||
;; int64 __mspabi_mpysll(int32 x, int32 y)
|
||||
;; Multiply long by long; result is long long.
|
||||
;; int64 __mspabi_mpysll_hw(int32 x, int32 y)
|
||||
;; Multiply long by long; result is long long. Uses hardware MPY16.
|
||||
;; int64 __mspabi_mpysll_hw32(int32 x, int32 y)
|
||||
;; Multiply long by long; result is long long. Uses hardware MPY32 (F4xx devices).
|
||||
;; int64 __mspabi_mpysll_f5hw(int32 x, int32 y)
|
||||
;; Multiply long by long; result is long long. Uses hardware MPY32 (F5xx devices and up).
|
||||
;;
|
||||
;; uint32 __mspabi_mpyul(uint16 x, uint16 y)
|
||||
;; Multiply unsigned int by unsigned int; result is unsigned long.
|
||||
;; uint32 __mspabi_mpyul_hw(uint16 x, uint16 y)
|
||||
;; Multiply unsigned int by unsigned int; result is unsigned long. Uses hardware MPY16 or MPY32
|
||||
;; uint32 __mspabi_mpyul_f5hw(uint16 x, uint16 y)
|
||||
;; Multiply unsigned int by unsigned int; result is unsigned long. Uses hardware MPY32 (F5xx devices and up).
|
||||
;;
|
||||
;; uint64 __mspabi_mpyull(uint32 x, uint32 y)
|
||||
;; Multiply unsigned long by unsigned long; result is unsigned long long.
|
||||
;; uint64 __mspabi_mpyull_hw(uint32 x, uint32 y)
|
||||
;; Multiply unsigned long by unsigned long; result is unsigned long long. Uses hardware MPY16
|
||||
;; uint64 __mspabi_mpyull_hw32(uint32 x, uint32 y)
|
||||
;; Multiply unsigned long by unsigned long; result is unsigned long long. Uses hardware MPY32 (F4xx devices).
|
||||
;; uint64 _ _mspabi_mpyull_f5hw(uint32 x, uint32 y)
|
||||
;; Multiply unsigned long by unsigned long; result is unsigned long long. Uses hardware MPY32 (F5xx devices and up)
|
||||
|
||||
|
||||
|
||||
.set MPY_OP1, 0x0130
|
||||
.set MPY_OP1_S, 0x0132
|
||||
@ -169,58 +276,94 @@
|
||||
.set MAC_OP2, 0x0138
|
||||
.set RESULT_LO, 0x013A
|
||||
.set RESULT_HI, 0x013C
|
||||
|
||||
start_func __mulhi2
|
||||
|
||||
#if defined MUL_16
|
||||
;; First generation MSP430 hardware multiplies ...
|
||||
|
||||
start_func __mulhi2 __mspabi_mpyi __mspabi_mpyi_hw
|
||||
mult16 MPY_OP1, MPY_OP2, RESULT_LO
|
||||
end_func __mulhi2
|
||||
end_func __mulhi2
|
||||
|
||||
start_func __mulsihi2
|
||||
start_func __mulsihi2 __mspabi_mpysl __mspabi_mpysl_hw
|
||||
mult1632 MPY_OP1_S, MPY_OP2, RESULT_LO, RESULT_HI
|
||||
end_func __mulsihi2
|
||||
end_func __mulsihi2
|
||||
|
||||
start_func __umulsihi2
|
||||
start_func __umulsihi2 __mspabi_mpyul _mspabi_mpyul_hw
|
||||
mult1632 MPY_OP1, MPY_OP2, RESULT_LO, RESULT_HI
|
||||
end_func __umulsihi2
|
||||
end_func __umulsihi2
|
||||
|
||||
start_func __mulsi2
|
||||
start_func __mulsi2 __mspabi_mpyl __mspabi_mpyl_hw
|
||||
mult32 MPY_OP1, MPY_OP2, MAC_OP1, MAC_OP2, RESULT_LO, RESULT_HI
|
||||
end_func __mulsi2
|
||||
end_func __mulsi2
|
||||
|
||||
start_func __mulsi2_hw32
|
||||
;; FIXME: We do not have hardware implementations of these
|
||||
;; routines, so just jump to the software versions instead.
|
||||
fake_func __muldisi2 __mspabi_mpysll __mspabi_mpysll_hw
|
||||
fake_func __umuldisi2 __mspabi_mpyull __mspabi_mpyull_hw
|
||||
fake_func __muldi3 __mspabi_mpyll __mspabi_mpyll_hw
|
||||
|
||||
#elif defined MUL_32
|
||||
;; Second generation MSP430 hardware multiplies ...
|
||||
|
||||
start_func __mulhi2 __mspabi_mpyi __mspabi_mpyi_hw
|
||||
mult16 MPY_OP1, MPY_OP2, RESULT_LO
|
||||
end_func __mulhi2
|
||||
|
||||
start_func __mulsihi2 __mspabi_mpysl __mspabi_mpysl_hw
|
||||
mult1632 MPY_OP1_S, MPY_OP2, RESULT_LO, RESULT_HI
|
||||
end_func __mulsihi2
|
||||
|
||||
start_func __umulsihi2 __mspabi_mpyul _mspabi_mpyul_hw
|
||||
mult1632 MPY_OP1, MPY_OP2, RESULT_LO, RESULT_HI
|
||||
end_func __umulsihi2
|
||||
|
||||
start_func __mulsi2_hw32 __mspabi_mpyl __mspabi_mpyl_hw32
|
||||
mult32_hw 0x0140, 0x0142, 0x0150, 0x0152, 0x0154, 0x0156
|
||||
end_func __mulsi2_hw32
|
||||
end_func __mulsi2_hw32
|
||||
|
||||
start_func __muldisi2_hw32
|
||||
start_func __muldisi2 __mspabi_mpysll __mspabi_mpysll_hw32
|
||||
mult3264_hw 0x0144, 0x146, 0x0150, 0x0152, 0x0154, 0x0156, 0x0158, 0x015A
|
||||
end_func __muldisi2_hw32
|
||||
end_func __muldisi2
|
||||
|
||||
start_func __umuldisi2_hw32
|
||||
start_func __umuldisi2 __mspabi_mpyull __mspabi_mpyull_hw32
|
||||
mult3264_hw 0x0140, 0x142, 0x0150, 0x0152, 0x0154, 0x0156, 0x0158, 0x015A
|
||||
end_func __umuldisi2_hw32
|
||||
end_func __umuldisi2
|
||||
|
||||
;; FIXME: Add a hardware version of this function.
|
||||
fake_func __muldi3 __mspabi_mpyll __mspabi_mpyll_hw32
|
||||
|
||||
/* The F5xxx series of MCUs support the same 16-bit hardware
|
||||
multiply, but it is accessed from different memory registers. */
|
||||
|
||||
start_func __mulhi2_f5
|
||||
#elif defined MUL_F5
|
||||
/* The F5xxx series of MCUs support the same 16-bit and 32-bit multiply
|
||||
as the second generation hardware, but they are accessed from different
|
||||
memory registers. */
|
||||
|
||||
start_func __mulhi2_f5 __mspabi_mpyi __mspabi_mpyi_f5hw
|
||||
mult16 0x04C0, 0x04C8, 0x04CA
|
||||
end_func __mulhi2_f5
|
||||
end_func __mulhi2_f5
|
||||
|
||||
start_func __mulsihi2_f5
|
||||
start_func __mulsihi2 __mspabi_mpysl __mspabi_mpysl_f5hw
|
||||
mult1632 0x04C2, 0x04C8, 0x04CA, 0x04CC
|
||||
end_func __mulsihi2_f5
|
||||
end_func __mulsihi2
|
||||
|
||||
start_func __umulsihi2_f5
|
||||
start_func __umulsihi2 __mspabi_mpyul _mspabi_mpyul_f5hw
|
||||
mult1632 0x04C0, 0x04C8, 0x04CA, 0x04CC
|
||||
end_func __umulsihi2_f5
|
||||
end_func __umulsihi2
|
||||
|
||||
start_func __mulsi2_f5
|
||||
start_func __mulsi2_f5 __mspabi_mpyl __mspabi_mpyl_f5hw
|
||||
mult32_hw 0x04D0, 0x04D2, 0x04E0, 0x04E2, 0x04E4, 0x04E6
|
||||
end_func __mulsi2_f5
|
||||
end_func __mulsi2_f5
|
||||
|
||||
start_func __muldisi2_f5
|
||||
start_func __muldisi2 __mspabi_mpysll __mspabi_mpysll_f5hw
|
||||
mult3264_hw 0x04D4, 0x04D6, 0x04E0, 0x04E2, 0x04E4, 0x04E6, 0x04E8, 0x04EA
|
||||
end_func __muldisi2_f5
|
||||
end_func __muldisi2
|
||||
|
||||
start_func __umuldisi2_f5
|
||||
start_func __umuldisi2 __mspabi_mpyull __mspabi_mpyull_f5hw
|
||||
mult3264_hw 0x04D0, 0x04D2, 0x04E0, 0x04E2, 0x04E4, 0x04E6, 0x04E8, 0x04EA
|
||||
end_func __umuldisi2_f5
|
||||
end_func __umuldisi2
|
||||
|
||||
;; FIXME: Add a hardware version of this function.
|
||||
fake_func __muldi3 __mspabi_mpyll __mspabi_mpyll_f5hw
|
||||
|
||||
#else
|
||||
#error MUL type not defined
|
||||
#endif
|
||||
|
@ -30,13 +30,36 @@ typedef unsigned int uint08_type __attribute__ ((mode (QI)));
|
||||
#define C3B(a,b,c) a##b##c
|
||||
#define C3(a,b,c) C3B(a,b,c)
|
||||
|
||||
#if defined MUL_NONE
|
||||
|
||||
#define UINT_TYPE uint16_type
|
||||
#define BITS_MINUS_1 15
|
||||
#define NAME_MODE hi
|
||||
/* The software multiply library needs __mspabi_mpyll. */
|
||||
|
||||
#undef UINT_TYPE
|
||||
#undef BITS_MINUS_1
|
||||
#undef NAME_MODE
|
||||
|
||||
#define UINT_TYPE uint32_type
|
||||
#define BITS_MINUS_1 31
|
||||
#define NAME_MODE si
|
||||
|
||||
#include "msp430-mul.h"
|
||||
|
||||
#elif defined MUL_16
|
||||
|
||||
signed long long
|
||||
__mspabi_mpysll (signed long a, signed long b)
|
||||
{
|
||||
return (signed long long) a * (signed long long) b;
|
||||
}
|
||||
|
||||
unsigned long long
|
||||
__mspabi_mpyull (unsigned long a, unsigned long b)
|
||||
{
|
||||
return (unsigned long long) a * (unsigned long long) b;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#undef UINT_TYPE
|
||||
#undef BITS_MINUS_1
|
||||
#undef NAME_MODE
|
||||
@ -47,12 +70,4 @@ typedef unsigned int uint08_type __attribute__ ((mode (QI)));
|
||||
|
||||
#include "msp430-mul.h"
|
||||
|
||||
#undef UINT_TYPE
|
||||
#undef BITS_MINUS_1
|
||||
#undef NAME_MODE
|
||||
|
||||
#define UINT_TYPE uint32_type
|
||||
#define BITS_MINUS_1 31
|
||||
#define NAME_MODE si
|
||||
|
||||
#include "msp430-mul.h"
|
||||
#endif /* MUL_NONE */
|
||||
|
@ -4,12 +4,23 @@ extern int __mulhi3 (int, int);
|
||||
int
|
||||
__mulhi3 (int x, int y)
|
||||
{
|
||||
volatile int rv = 0;
|
||||
char bit;
|
||||
int neg = 0;
|
||||
int rv = 0;
|
||||
|
||||
while (y > 0)
|
||||
if (y < 0)
|
||||
{
|
||||
rv += x;
|
||||
y --;
|
||||
y = - y;
|
||||
neg = 1;
|
||||
}
|
||||
return rv;
|
||||
|
||||
for (bit = 0; y && bit < sizeof (y) * 8; bit ++)
|
||||
{
|
||||
if (y & 1)
|
||||
rv += x;
|
||||
x <<= 1;
|
||||
y >>= 1;
|
||||
}
|
||||
|
||||
return neg ? - rv : rv;
|
||||
}
|
||||
|
@ -35,7 +35,6 @@ LIB2ADD = \
|
||||
$(srcdir)/config/msp430/srai.S \
|
||||
$(srcdir)/config/msp430/srli.S \
|
||||
$(srcdir)/config/msp430/cmpsi2.S \
|
||||
$(srcdir)/config/msp430/lib2hw_mul.S \
|
||||
$(srcdir)/config/msp430/floatunhisf.c \
|
||||
$(srcdir)/config/msp430/floatunhidf.c \
|
||||
$(srcdir)/config/msp430/floathidf.c \
|
||||
@ -44,6 +43,33 @@ LIB2ADD = \
|
||||
|
||||
HOST_LIBGCC2_CFLAGS += -Os -ffunction-sections -fdata-sections -mhwmult=none
|
||||
|
||||
lib2_mul_none.o: $(srcdir)/config/msp430/lib2mul.c
|
||||
$(gcc_compile) $^ -c -DMUL_NONE
|
||||
|
||||
lib2_mul_16bit.o: $(srcdir)/config/msp430/lib2mul.c
|
||||
$(gcc_compile) $^ -c -DMUL_16
|
||||
|
||||
lib2hw_mul_16.o: $(srcdir)/config/msp430/lib2hw_mul.S
|
||||
$(gcc_compile) $^ -c -DMUL_16
|
||||
|
||||
lib2hw_mul_32.o: $(srcdir)/config/msp430/lib2hw_mul.S
|
||||
$(gcc_compile) $^ -c -DMUL_32
|
||||
|
||||
lib2hw_mul_f5.o: $(srcdir)/config/msp430/lib2hw_mul.S
|
||||
$(gcc_compile) $^ -c -DMUL_F5
|
||||
|
||||
libmul_none.a: lib2_mul_none.o
|
||||
$(AR_CREATE_FOR_TARGET) $@ $^
|
||||
|
||||
libmul_16.a: lib2hw_mul_16.o lib2_mul_16bit.o
|
||||
$(AR_CREATE_FOR_TARGET) $@ $^
|
||||
|
||||
libmul_32.a: lib2hw_mul_32.o
|
||||
$(AR_CREATE_FOR_TARGET) $@ $^
|
||||
|
||||
libmul_f5.a: lib2hw_mul_f5.o
|
||||
$(AR_CREATE_FOR_TARGET) $@ $^
|
||||
|
||||
# Local Variables:
|
||||
# mode: Makefile
|
||||
# End:
|
||||
|
Loading…
x
Reference in New Issue
Block a user