jozefl created this revision.
jozefl added a reviewer: asl.
jozefl requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
This patch updates MSP430 MCU data to the latest version distributed by
TI, adding support for 451 additional MCUs.

The hardware multiply version supported by each MCU is now stored as an
enum in the MCU data file, rather than a string. The string value passed
to the -mhwmult= option is now also converted to an enum. Using an enum
simplifies the processing of values, as invalid user input can be
canonicalized as a descriptive enum. It also ensures that the hard-coded
MCU data is valid; that there are no values that the parser does not
recognize.

Clang will no longer explicitly disable hwmult features for MCUs that
don't have hardware multiply support, as hwmult feature are already
disabled by default.

The CPU version of each MCU is now stored with the hard-coded MCU data,
so Clang can enable the appropriate LLVM CPU features when a particular
MCU is selected.

The hard-coded MCU data is stored in lexicographic order, which enables
efficient searching of the data with binary search, using
std::lower_bound.

If the patch is acceptable, I would appreciate it if someone would apply
it for me, as I do not have commit access.

Thanks,
Jozef


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D108301

Files:
  clang/include/clang/Basic/MSP430Target.def
  clang/lib/Driver/ToolChains/MSP430.cpp
  clang/test/Driver/msp430-hwmult.c
  clang/test/Driver/msp430-mmcu.c
  clang/test/Driver/msp430-toolchain.c

Index: clang/test/Driver/msp430-toolchain.c
===================================================================
--- clang/test/Driver/msp430-toolchain.c
+++ clang/test/Driver/msp430-toolchain.c
@@ -253,6 +253,10 @@
 // RUN:   | FileCheck -check-prefix=HWMult-32BIT %s
 // HWMult-32BIT: "--start-group" "-lmul_32"
 
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430fr5969 --sysroot="" 2>&1 \
+// RUN:   | FileCheck -check-prefix=HWMult-F5 %s
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430fr5969 -mhwmult=auto --sysroot="" 2>&1 \
+// RUN:   | FileCheck -check-prefix=HWMult-F5 %s
 // RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mhwmult=f5series --sysroot="" 2>&1 \
 // RUN:   | FileCheck -check-prefix=HWMult-F5 %s
 // HWMult-F5: "--start-group" "-lmul_f5"
@@ -261,4 +265,10 @@
 // RUN:   | FileCheck -check-prefix=HWMult-NONE %s
 // RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mhwmult=none -mmcu=msp430f4783 --sysroot="" 2>&1 \
 // RUN:   | FileCheck -check-prefix=HWMult-NONE %s
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mhwmult=auto -mmcu=msp430 --sysroot="" 2>&1 \
+// RUN:   | FileCheck -check-prefix=HWMult-NONE %s
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mhwmult=auto -mmcu=msp430x --sysroot="" 2>&1 \
+// RUN:   | FileCheck -check-prefix=HWMult-NONE %s
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430xv2 --sysroot="" 2>&1 \
+// RUN:   | FileCheck -check-prefix=HWMult-NONE %s
 // HWMult-NONE: "--start-group" "-lmul_none"
Index: clang/test/Driver/msp430-mmcu.c
===================================================================
--- clang/test/Driver/msp430-mmcu.c
+++ clang/test/Driver/msp430-mmcu.c
@@ -1,15 +1,62 @@
+// This file tests that various different values passed to -mmcu= select the
+// correct target features and linker scripts, and create MCU-specific defines.
+
+// Test the lexicographic ordering of MCUs in MSP430Target.def.
+//
+// The MCU "msp430f110" should appear before "msp430f1101" when the data has
+// been sorted lexicographically. Some sorts will put "msp430f110" *after*
+// "msp430f1101", so when this happens, Clang will not be able to find this MCU.
+
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430f110 2>&1 \
+// RUN:   | FileCheck %s
+
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430f1101 2>&1 \
+// RUN:   | FileCheck %s
+
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430f1101a 2>&1 \
+// RUN:   | FileCheck %s
+
+// CHECK-NOT: error: the clang compiler does not support
+
+// Test the symbol definitions, linker scripts and hardware multiply features
+// selected for different MCUs.
+
 // RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430c111 2>&1 \
 // RUN:   | FileCheck -check-prefix=MSP430-C111 %s
 
 // MSP430-C111: clang{{.*}} "-cc1" {{.*}} "-D__MSP430C111__"
+// MSP430-C111-NOT: "-target-feature" "+hwmult16"
+// MSP430-C111-NOT: "-target-feature" "+hwmult32"
+// MSP430-C111-NOT: "-target-feature" "+hwmultf5"
 // MSP430-C111: msp430-elf-ld{{.*}} "-Tmsp430c111.ld"
 
 // RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430i2020 2>&1 \
 // RUN:   | FileCheck -check-prefix=MSP430-I2020 %s
 
 // MSP430-I2020: clang{{.*}} "-cc1" {{.*}} "-D__MSP430i2020__"
+// MSP430-I2020: "-target-feature" "+hwmult16"
 // MSP430-I2020: msp430-elf-ld{{.*}} "-Tmsp430i2020.ld"
 
+// RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430f47126 2>&1 \
+// RUN:   | FileCheck -check-prefix=MSP430-F47126 %s
+
+// MSP430-F47126: clang{{.*}} "-cc1" {{.*}} "-D__MSP430F47126__"
+// MSP430-F47126: "-target-feature" "+hwmult32"
+// MSP430-F47126: msp430-elf-ld{{.*}} "-Tmsp430f47126.ld"
+
+// RAN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=msp430fr5969 2>&1 \
+// RAN:   | FileCheck -check-prefix=MSP430-FR5969 %s
+
+// MSP430-FR5969: clang{{.*}} "-cc1" {{.*}} "-D__MSP430FR5969__"
+// MSP430-FR5969: "-target-feature" "+hwmultf5"
+// MSP430-FR5969: msp430-elf-ld{{.*}} "-Tmsp430fr5969.ld"
+
+// Test for the error message emitted when an invalid MCU is selected.
+//
+// Note that if this test is ever modified because the expected error message is
+// changed, the check prefixes at the top of this file, used to validate the
+// ordering of the hard-coded MCU data, also need to be updated.
+//
 // RUN: %clang %s -### -no-canonical-prefixes -target msp430 -mmcu=not-a-mcu 2>&1 \
 // RUN:   | FileCheck -check-prefix=MSP430-UNSUP %s
 
Index: clang/test/Driver/msp430-hwmult.c
===================================================================
--- clang/test/Driver/msp430-hwmult.c
+++ clang/test/Driver/msp430-hwmult.c
@@ -3,17 +3,13 @@
 
 // RUN: %clang -### -target msp430 %s 2>&1 | FileCheck %s
 // RUN: %clang -### -target msp430 %s -mhwmult=auto 2>&1 | FileCheck %s
+// RUN: %clang -### -target msp430 %s -mhwmult=none 2>&1 | FileCheck %s
+// RUN: %clang -### -target msp430 %s -mhwmult=none -mmcu=msp430f147 2>&1 | FileCheck %s
+// RUN: %clang -### -target msp430 %s -mhwmult=none -mmcu=msp430f4783 2>&1 | FileCheck %s
 // CHECK-NOT: "-target-feature" "+hwmult16"
 // CHECK-NOT: "-target-feature" "+hwmult32"
 // CHECK-NOT: "-target-feature" "+hwmultf5"
 
-// RUN: %clang -### -target msp430 %s -mhwmult=none 2>&1 | FileCheck --check-prefix=CHECK-NONE %s
-// RUN: %clang -### -target msp430 %s -mhwmult=none -mmcu=msp430f147 2>&1 | FileCheck --check-prefix=CHECK-NONE %s
-// RUN: %clang -### -target msp430 %s -mhwmult=none -mmcu=msp430f4783 2>&1 | FileCheck --check-prefix=CHECK-NONE %s
-// CHECK-NONE: "-target-feature" "-hwmult16"
-// CHECK-NONE: "-target-feature" "-hwmult32"
-// CHECK-NONE: "-target-feature" "-hwmultf5"
-
 // RUN: %clang -### -target msp430 %s -mhwmult=16bit 2>&1 | FileCheck --check-prefix=CHECK-16 %s
 // CHECK-16: "-target-feature" "+hwmult16"
 
Index: clang/lib/Driver/ToolChains/MSP430.cpp
===================================================================
--- clang/lib/Driver/ToolChains/MSP430.cpp
+++ clang/lib/Driver/ToolChains/MSP430.cpp
@@ -16,6 +16,7 @@
 #include "llvm/Option/ArgList.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
+#include <algorithm>
 
 using namespace clang::driver;
 using namespace clang::driver::toolchains;
@@ -23,86 +24,148 @@
 using namespace clang;
 using namespace llvm::opt;
 
-static bool isSupportedMCU(const StringRef MCU) {
-  return llvm::StringSwitch<bool>(MCU)
-#define MSP430_MCU(NAME) .Case(NAME, true)
-#include "clang/Basic/MSP430Target.def"
-      .Default(false);
-}
-
-static StringRef getSupportedHWMult(const Arg *MCU) {
-  if (!MCU)
-    return "none";
+enum CPUKind { CPUMSP430, CPUMSP430X, CPUMSP430XV2 };
+enum HWMultKind {
+  HWMultAuto,
+  HWMultNone,
+  HWMult16,
+  HWMult32,
+  HWMultF5,
+  HWMultInvalid
+};
+
+struct MCUData {
+  StringRef Name;
+  CPUKind CPU = CPUMSP430;
+  HWMultKind HWMult = HWMultNone;
+  friend bool operator<(const MCUData &M1, const MCUData &M2) {
+    return M1.Name < M2.Name;
+  }
+  bool isValid() const { return !Name.empty(); }
+};
 
-  return llvm::StringSwitch<StringRef>(MCU->getValue())
-#define MSP430_MCU_FEAT(NAME, HWMULT) .Case(NAME, HWMULT)
+static constexpr std::array<MCUData, 612> MSP430MCUData = {{
+#define MSP430_MCU(NAME, CPU, HWMULT) {(NAME), (CPU), (HWMULT)},
 #include "clang/Basic/MSP430Target.def"
-      .Default("none");
+}};
+
+static HWMultKind getHWMultStringAsEnum(StringRef HWMult) {
+  return llvm::StringSwitch<HWMultKind>(HWMult)
+      .Case("none", HWMultNone)
+      .Case("auto", HWMultAuto)
+      .Case("16bit", HWMult16)
+      .Case("32bit", HWMult32)
+      .Case("f5series", HWMultF5)
+      .Default(HWMultInvalid);
 }
 
-static StringRef getHWMultLib(const ArgList &Args) {
-  StringRef HWMult = Args.getLastArgValue(options::OPT_mhwmult_EQ, "auto");
-  if (HWMult == "auto") {
-    HWMult = getSupportedHWMult(Args.getLastArg(options::OPT_mmcu_EQ));
+static StringRef getHWMultEnumAsString(HWMultKind HWMult) {
+  switch (HWMult) {
+  case HWMultAuto:
+    return "auto";
+  case HWMultNone:
+    return "none";
+  case HWMult16:
+    return "16bit";
+  case HWMult32:
+    return "32bit";
+  case HWMultF5:
+    return "f5series";
+  default:
+    llvm_unreachable("Unsupported HWMult enum");
   }
-
-  return llvm::StringSwitch<StringRef>(HWMult)
-      .Case("16bit", "-lmul_16")
-      .Case("32bit", "-lmul_32")
-      .Case("f5series", "-lmul_f5")
-      .Default("-lmul_none");
 }
 
-void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args,
-                                     std::vector<StringRef> &Features) {
-  const Arg *MCU = Args.getLastArg(options::OPT_mmcu_EQ);
-  if (MCU && !isSupportedMCU(MCU->getValue())) {
-    D.Diag(diag::err_drv_clang_unsupported) << MCU->getValue();
-    return;
-  }
-
+/// Process the -mhwmult= and -mmcu= options to determine which hwmult feature
+/// to enable.
+///
+/// Diagnose and report any issues with the values passed to these options.
+static void processHWMultFeatures(const Driver &D, const ArgList &Args,
+                                  std::vector<StringRef> &Features,
+                                  HWMultKind SupportedHWMult) {
+  const Arg *MCUArg = Args.getLastArg(options::OPT_mmcu_EQ);
   const Arg *HWMultArg = Args.getLastArg(options::OPT_mhwmult_EQ);
-  if (!MCU && !HWMultArg)
+  if (!MCUArg && !HWMultArg)
     return;
 
-  StringRef HWMult = HWMultArg ? HWMultArg->getValue() : "auto";
-  StringRef SupportedHWMult = getSupportedHWMult(MCU);
+  HWMultKind HWMult =
+      (HWMultArg ? getHWMultStringAsEnum(HWMultArg->getValue()) : HWMultAuto);
+  if (HWMult == HWMultInvalid) {
+    D.Diag(diag::err_drv_unsupported_option_argument)
+        << HWMultArg->getAsString(Args) << HWMultArg->getValue();
+    return;
+  } else if (HWMult == HWMultNone) {
+    return;
+  }
 
-  if (HWMult == "auto") {
-    // 'auto' - deduce hw multiplier support based on mcu name provided.
-    // If no mcu name is provided, assume no hw multiplier is supported.
-    if (!MCU)
-      D.Diag(clang::diag::warn_drv_msp430_hwmult_no_device);
+  if (HWMult == HWMultAuto) {
+    if (!MCUArg) {
+      D.Diag(diag::warn_drv_msp430_hwmult_no_device);
+      return;
+    }
     HWMult = SupportedHWMult;
   }
 
-  if (HWMult == "none") {
-    // 'none' - disable hw multiplier.
-    Features.push_back("-hwmult16");
-    Features.push_back("-hwmult32");
-    Features.push_back("-hwmultf5");
-    return;
+  if (MCUArg && HWMult != HWMultNone && SupportedHWMult == HWMultNone) {
+    D.Diag(diag::warn_drv_msp430_hwmult_unsupported) << HWMultArg->getValue();
+  } else if (MCUArg && HWMult != SupportedHWMult) {
+    D.Diag(diag::warn_drv_msp430_hwmult_mismatch)
+        << getHWMultEnumAsString(SupportedHWMult) << HWMultArg->getValue();
+  } else {
+    switch (HWMult) {
+    case HWMultNone:
+      return;
+    case HWMult16:
+      Features.push_back("+hwmult16");
+      return;
+    case HWMult32:
+      Features.push_back("+hwmult32");
+      return;
+    case HWMultF5:
+      Features.push_back("+hwmultf5");
+      return;
+    default:
+      llvm_unreachable("Unhandled HWMult version");
+      return;
+    }
   }
+}
 
-  if (MCU && SupportedHWMult == "none")
-    D.Diag(clang::diag::warn_drv_msp430_hwmult_unsupported) << HWMult;
-  if (MCU && HWMult != SupportedHWMult)
-    D.Diag(clang::diag::warn_drv_msp430_hwmult_mismatch)
-        << SupportedHWMult << HWMult;
-
-  if (HWMult == "16bit") {
-    // '16bit' - for 16-bit only hw multiplier.
-    Features.push_back("+hwmult16");
-  } else if (HWMult == "32bit") {
-    // '32bit' - for 16/32-bit hw multiplier.
-    Features.push_back("+hwmult32");
-  } else if (HWMult == "f5series") {
-    // 'f5series' - for 16/32-bit hw multiplier supported by F5 series mcus.
-    Features.push_back("+hwmultf5");
-  } else {
-    D.Diag(clang::diag::err_drv_unsupported_option_argument)
-        << HWMultArg->getAsString(Args) << HWMult;
+/// Search the MCU data from MSP430Target.def for the MCUData entry with the
+/// name \p MCU.
+///
+/// Returns a default-constructed MCUData object if an entry with a name exactly
+/// matching \p MCU isn't found, otherwise return the entry.
+///
+/// std::lower_bound is used to perform an efficient binary search on the data.
+static MCUData loadMCUData(const StringRef MCU) {
+  MCUData MCUDataQuery = {MCU, CPUMSP430, HWMultNone};
+  auto it = std::lower_bound(MSP430MCUData.begin(), MSP430MCUData.end(),
+                             MCUDataQuery);
+  if (it == MSP430MCUData.end() || it->Name != MCU) {
+    return {};
+  }
+  return *it;
+}
+
+/// Process the -mmcu= and -mhwmult= options to determine the target features.
+///
+/// This is the only time Clang will warn about conflicts between these options,
+/// or issues with the values passed to them.
+void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args,
+                                     std::vector<StringRef> &Features) {
+  const Arg *MCUArg = Args.getLastArg(options::OPT_mmcu_EQ);
+  HWMultKind SupportedHWMult = HWMultNone;
+  if (MCUArg) {
+    MCUData LoadedMCUData = loadMCUData(MCUArg->getValue());
+    if (!LoadedMCUData.isValid()) {
+      D.Diag(diag::err_drv_clang_unsupported) << MCUArg->getValue();
+      return;
+    }
+    SupportedHWMult = LoadedMCUData.HWMult;
   }
+
+  processHWMultFeatures(D, Args, Features, SupportedHWMult);
 }
 
 /// MSP430 Toolchain
@@ -179,6 +242,41 @@
   return new tools::msp430::Linker(*this);
 }
 
+/// Get the actual hardware multiply version being used.
+///
+/// The hardware multiply version to use depends on the values passed to the
+/// -mmcu= and -mhwmult= options.
+static HWMultKind getHWMult(const ArgList &Args, HWMultKind SupportedHWMult) {
+  StringRef HWMultArg = Args.getLastArgValue(options::OPT_mhwmult_EQ, "auto");
+  if (HWMultArg == "auto")
+    return SupportedHWMult;
+  return getHWMultStringAsEnum(HWMultArg);
+}
+
+/// Use the values passed to the -mmcu= and -mhwmult= options to determine the
+/// correct hardware multiply library to put on the linker command line.
+///
+/// MCUData for the given MCU needs to be loaded again, but since it
+/// was already loaded and processed earlier in the driver (see
+/// getMSP430TargetFeatures), there's no need to warn or error on invalid
+/// input.
+static StringRef getHWMultLib(const ArgList &Args) {
+  MCUData LoadedMCUData;
+  if (const Arg *MCUArg = Args.getLastArg(options::OPT_mmcu_EQ))
+    LoadedMCUData = loadMCUData(MCUArg->getValue());
+
+  switch (getHWMult(Args, LoadedMCUData.HWMult)) {
+  case HWMult16:
+    return "-lmul_16";
+  case HWMult32:
+    return "-lmul_32";
+  case HWMultF5:
+    return "-lmul_f5";
+  default:
+    return "-lmul_none";
+  }
+}
+
 void msp430::Linker::AddStartFiles(bool UseExceptions, const ArgList &Args,
                                    ArgStringList &CmdArgs) const {
   const ToolChain &ToolChain = getToolChain();
Index: clang/include/clang/Basic/MSP430Target.def
===================================================================
--- clang/include/clang/Basic/MSP430Target.def
+++ clang/include/clang/Basic/MSP430Target.def
@@ -8,238 +8,656 @@
 //
 // This file defines the MSP430 devices and their features.
 //
-//===----------------------------------------------------------------------===//
-
-#ifndef MSP430_MCU_FEAT
-#define MSP430_MCU_FEAT(NAME, HWMULT) MSP430_MCU(NAME)
-#endif
+// This data is generated from devices.csv v1.212, dated 07/19/21, with the
+// following commands:
+// $ export LC_ALL=C
+// $ grep "^msp430" /<PATH_TO_MSP430_GCC>/include/devices.csv \
+//     | awk -F, -f msp430-devices.awk | sort
+//
+// msp430-devices.awk:
+// {
+//   printf "MSP430_MCU(\"%s\", ", $1;
+//   if ($2 == 0) printf "CPUMSP430, ";
+//   else if ($2 == 1) printf "CPUMSP430X, ";
+//   else if ($2 == 2) printf "CPUMSP430XV2, ";
+//
+//   if ($4 == 0) printf "HWMultNone";
+//   else if ($4 == 1 || $4 == 2) printf "HWMult16";
+//   else if ($4 == 4) printf "HWMult32";
+//   else if ($4 == 8) printf "HWMultF5";
+//
+//   printf ")\n";
+// }
+//
+// The "devices.csv" file is distributed with the MSP430-GCC toolchain,
+// available at: https://www.ti.com/tool/download/MSP430-GCC-OPENSOURCE.
+//
+// It is essential for the data to be sorted lexicographically by MCU name, as
+// std::lower_bound is used to perform a binary search on the data to
+// efficiently find the MCU data record.
+//
+// Note that the quote character " has smaller ASCII value than any alphanumeric
+// characters, so sorting on the full "MSP430_MCU("name", ...)" string delivers
+// the expected result.
+// ===----------------------------------------------------------------------===//
 
 #ifndef MSP430_MCU
-#define MSP430_MCU(NAME)
+#define MSP430_MCU(NAME, CPU, HWMULT)
+#define HWMultNone
+#define HWMult16
+#define HWMult32
+#define HWMultF5
+#define CPUMSP430
+#define CPUMSP430X
+#define CPUMSP430XV2
 #endif
 
-MSP430_MCU("msp430c111")
-MSP430_MCU("msp430c1111")
-MSP430_MCU("msp430c112")
-MSP430_MCU("msp430c1121")
-MSP430_MCU("msp430c1331")
-MSP430_MCU("msp430c1351")
-MSP430_MCU("msp430e112")
-MSP430_MCU("msp430f110")
-MSP430_MCU("msp430f1101")
-MSP430_MCU("msp430f1101a")
-MSP430_MCU("msp430f1111")
-MSP430_MCU("msp430f1111a")
-MSP430_MCU("msp430f112")
-MSP430_MCU("msp430f1121")
-MSP430_MCU("msp430f1121a")
-MSP430_MCU("msp430f1122")
-MSP430_MCU("msp430f1132")
-MSP430_MCU("msp430f122")
-MSP430_MCU("msp430f1222")
-MSP430_MCU("msp430f123")
-MSP430_MCU("msp430f1232")
-MSP430_MCU("msp430f133")
-MSP430_MCU("msp430f135")
-MSP430_MCU("msp430f155")
-MSP430_MCU("msp430f156")
-MSP430_MCU("msp430f157")
-MSP430_MCU("msp430p112")
-MSP430_MCU("msp430f2001")
-MSP430_MCU("msp430f2011")
-MSP430_MCU("msp430f2002")
-MSP430_MCU("msp430f2012")
-MSP430_MCU("msp430f2003")
-MSP430_MCU("msp430f2013")
-MSP430_MCU("msp430f2101")
-MSP430_MCU("msp430f2111")
-MSP430_MCU("msp430f2121")
-MSP430_MCU("msp430f2131")
-MSP430_MCU("msp430f2112")
-MSP430_MCU("msp430f2122")
-MSP430_MCU("msp430f2132")
-MSP430_MCU("msp430f2232")
-MSP430_MCU("msp430f2252")
-MSP430_MCU("msp430f2272")
-MSP430_MCU("msp430f2234")
-MSP430_MCU("msp430f2254")
-MSP430_MCU("msp430f2274")
-MSP430_MCU("msp430g2211")
-MSP430_MCU("msp430g2201")
-MSP430_MCU("msp430g2111")
-MSP430_MCU("msp430g2101")
-MSP430_MCU("msp430g2001")
-MSP430_MCU("msp430g2231")
-MSP430_MCU("msp430g2221")
-MSP430_MCU("msp430g2131")
-MSP430_MCU("msp430g2121")
-MSP430_MCU("msp430g2102")
-MSP430_MCU("msp430g2202")
-MSP430_MCU("msp430g2302")
-MSP430_MCU("msp430g2402")
-MSP430_MCU("msp430g2132")
-MSP430_MCU("msp430g2232")
-MSP430_MCU("msp430g2332")
-MSP430_MCU("msp430g2432")
-MSP430_MCU("msp430g2112")
-MSP430_MCU("msp430g2212")
-MSP430_MCU("msp430g2312")
-MSP430_MCU("msp430g2412")
-MSP430_MCU("msp430g2152")
-MSP430_MCU("msp430g2252")
-MSP430_MCU("msp430g2352")
-MSP430_MCU("msp430g2452")
-MSP430_MCU("msp430g2113")
-MSP430_MCU("msp430g2213")
-MSP430_MCU("msp430g2313")
-MSP430_MCU("msp430g2413")
-MSP430_MCU("msp430g2513")
-MSP430_MCU("msp430g2153")
-MSP430_MCU("msp430g2253")
-MSP430_MCU("msp430g2353")
-MSP430_MCU("msp430g2453")
-MSP430_MCU("msp430g2553")
-MSP430_MCU("msp430g2203")
-MSP430_MCU("msp430g2303")
-MSP430_MCU("msp430g2403")
-MSP430_MCU("msp430g2233")
-MSP430_MCU("msp430g2333")
-MSP430_MCU("msp430g2433")
-MSP430_MCU("msp430g2533")
-MSP430_MCU("msp430tch5e")
-MSP430_MCU("msp430g2444")
-MSP430_MCU("msp430g2544")
-MSP430_MCU("msp430g2744")
-MSP430_MCU("msp430g2755")
-MSP430_MCU("msp430g2855")
-MSP430_MCU("msp430g2955")
-MSP430_MCU("msp430g2230")
-MSP430_MCU("msp430g2210")
-MSP430_MCU("msp430c311s")
-MSP430_MCU("msp430c312")
-MSP430_MCU("msp430c313")
-MSP430_MCU("msp430c314")
-MSP430_MCU("msp430c315")
-MSP430_MCU("msp430c323")
-MSP430_MCU("msp430c325")
-MSP430_MCU("msp430c412")
-MSP430_MCU("msp430c413")
-MSP430_MCU("msp430e313")
-MSP430_MCU("msp430e315")
-MSP430_MCU("msp430e325")
-MSP430_MCU("msp430p313")
-MSP430_MCU("msp430p315")
-MSP430_MCU("msp430p315s")
-MSP430_MCU("msp430p325")
-MSP430_MCU("msp430f412")
-MSP430_MCU("msp430f413")
-MSP430_MCU("msp430f415")
-MSP430_MCU("msp430f417")
-MSP430_MCU("msp430f4132")
-MSP430_MCU("msp430f4152")
-MSP430_MCU("msp430f435")
-MSP430_MCU("msp430f436")
-MSP430_MCU("msp430f437")
-MSP430_MCU("msp430f4351")
-MSP430_MCU("msp430f4361")
-MSP430_MCU("msp430f4371")
-MSP430_MCU("msp430fe423")
-MSP430_MCU("msp430fe425")
-MSP430_MCU("msp430fe427")
-MSP430_MCU("msp430fe423a")
-MSP430_MCU("msp430fe425a")
-MSP430_MCU("msp430fe427a")
-MSP430_MCU("msp430fe4232")
-MSP430_MCU("msp430fe4242")
-MSP430_MCU("msp430fe4252")
-MSP430_MCU("msp430fe4272")
-MSP430_MCU("msp430f4250")
-MSP430_MCU("msp430f4260")
-MSP430_MCU("msp430f4270")
-MSP430_MCU("msp430fg4250")
-MSP430_MCU("msp430fg4260")
-MSP430_MCU("msp430fg4270")
-MSP430_MCU("msp430fw423")
-MSP430_MCU("msp430fw425")
-MSP430_MCU("msp430fw427")
-MSP430_MCU("msp430fw428")
-MSP430_MCU("msp430fw429")
-MSP430_MCU("msp430fg437")
-MSP430_MCU("msp430fg438")
-MSP430_MCU("msp430fg439")
-MSP430_MCU("msp430f438")
-MSP430_MCU("msp430f439")
-MSP430_MCU("msp430f477")
-MSP430_MCU("msp430f478")
-MSP430_MCU("msp430f479")
-MSP430_MCU("msp430fg477")
-MSP430_MCU("msp430fg478")
-MSP430_MCU("msp430fg479")
-
-// With 16-bit hardware multiplier
-MSP430_MCU_FEAT("msp430f147", "16bit")
-MSP430_MCU_FEAT("msp430f148", "16bit")
-MSP430_MCU_FEAT("msp430f149", "16bit")
-MSP430_MCU_FEAT("msp430f1471", "16bit")
-MSP430_MCU_FEAT("msp430f1481", "16bit")
-MSP430_MCU_FEAT("msp430f1491", "16bit")
-MSP430_MCU_FEAT("msp430f167", "16bit")
-MSP430_MCU_FEAT("msp430f168", "16bit")
-MSP430_MCU_FEAT("msp430f169", "16bit")
-MSP430_MCU_FEAT("msp430f1610", "16bit")
-MSP430_MCU_FEAT("msp430f1611", "16bit")
-MSP430_MCU_FEAT("msp430f1612", "16bit")
-MSP430_MCU_FEAT("msp430c336", "16bit")
-MSP430_MCU_FEAT("msp430c337", "16bit")
-MSP430_MCU_FEAT("msp430e337", "16bit")
-MSP430_MCU_FEAT("msp430p337", "16bit")
-MSP430_MCU_FEAT("msp430f423", "16bit")
-MSP430_MCU_FEAT("msp430f425", "16bit")
-MSP430_MCU_FEAT("msp430f427", "16bit")
-MSP430_MCU_FEAT("msp430f423a", "16bit")
-MSP430_MCU_FEAT("msp430f425a", "16bit")
-MSP430_MCU_FEAT("msp430f427a", "16bit")
-MSP430_MCU_FEAT("msp430f4481", "16bit")
-MSP430_MCU_FEAT("msp430f4491", "16bit")
-MSP430_MCU_FEAT("msp430f447", "16bit")
-MSP430_MCU_FEAT("msp430f448", "16bit")
-MSP430_MCU_FEAT("msp430f449", "16bit")
-MSP430_MCU_FEAT("msp430f2330", "16bit")
-MSP430_MCU_FEAT("msp430f2350", "16bit")
-MSP430_MCU_FEAT("msp430f2370", "16bit")
-MSP430_MCU_FEAT("msp430f233", "16bit")
-MSP430_MCU_FEAT("msp430f235", "16bit")
-MSP430_MCU_FEAT("msp430f247", "16bit")
-MSP430_MCU_FEAT("msp430f248", "16bit")
-MSP430_MCU_FEAT("msp430f249", "16bit")
-MSP430_MCU_FEAT("msp430f2410", "16bit")
-MSP430_MCU_FEAT("msp430f2471", "16bit")
-MSP430_MCU_FEAT("msp430f2481", "16bit")
-MSP430_MCU_FEAT("msp430f2491", "16bit")
-MSP430_MCU_FEAT("msp430i2020", "16bit")
-MSP430_MCU_FEAT("msp430i2021", "16bit")
-MSP430_MCU_FEAT("msp430i2030", "16bit")
-MSP430_MCU_FEAT("msp430i2031", "16bit")
-MSP430_MCU_FEAT("msp430i2040", "16bit")
-MSP430_MCU_FEAT("msp430i2041", "16bit")
-MSP430_MCU_FEAT("msp430afe221", "16bit")
-MSP430_MCU_FEAT("msp430afe231", "16bit")
-MSP430_MCU_FEAT("msp430afe251", "16bit")
-MSP430_MCU_FEAT("msp430afe222", "16bit")
-MSP430_MCU_FEAT("msp430afe232", "16bit")
-MSP430_MCU_FEAT("msp430afe252", "16bit")
-MSP430_MCU_FEAT("msp430afe223", "16bit")
-MSP430_MCU_FEAT("msp430afe233", "16bit")
-MSP430_MCU_FEAT("msp430afe253", "16bit")
-
-// With 32 Bit Hardware Multiplier
-MSP430_MCU_FEAT("msp430f4783", "32bit")
-MSP430_MCU_FEAT("msp430f4793", "32bit")
-MSP430_MCU_FEAT("msp430f4784", "32bit")
-MSP430_MCU_FEAT("msp430f4794", "32bit")
-
-// Generic MCUs
-MSP430_MCU("msp430i2xxgeneric")
-
-#undef MSP430_MCU
-#undef MSP430_MCU_FEAT
+MSP430_MCU("msp430afe221", CPUMSP430, HWMult16)
+MSP430_MCU("msp430afe222", CPUMSP430, HWMult16)
+MSP430_MCU("msp430afe223", CPUMSP430, HWMult16)
+MSP430_MCU("msp430afe231", CPUMSP430, HWMult16)
+MSP430_MCU("msp430afe232", CPUMSP430, HWMult16)
+MSP430_MCU("msp430afe233", CPUMSP430, HWMult16)
+MSP430_MCU("msp430afe251", CPUMSP430, HWMult16)
+MSP430_MCU("msp430afe252", CPUMSP430, HWMult16)
+MSP430_MCU("msp430afe253", CPUMSP430, HWMult16)
+MSP430_MCU("msp430bt5190", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430c091", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c092", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c111", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c1111", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c112", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c1121", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c1331", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c1351", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c311s", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c312", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c313", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c314", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c315", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c323", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c325", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c336", CPUMSP430, HWMult16)
+MSP430_MCU("msp430c337", CPUMSP430, HWMult16)
+MSP430_MCU("msp430c412", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430c413", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430cg4616", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430cg4617", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430cg4618", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430cg4619", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430e112", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430e313", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430e315", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430e325", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430e337", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f110", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1101", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1101a", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1111", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1111a", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f112", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1121", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1121a", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1122", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1132", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f122", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1222", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f123", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1232", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f133", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f135", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f147", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f1471", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f148", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f1481", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f149", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f1491", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f155", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f156", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f157", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f1610", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f1611", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f1612", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f167", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f168", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f169", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2001", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2002", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2003", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2011", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2012", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2013", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2101", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2111", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2112", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2121", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2122", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2131", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2132", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2232", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2234", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2252", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2254", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2272", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f2274", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f233", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2330", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f235", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2350", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2370", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2410", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2416", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f2417", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f2418", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f2419", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f247", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2471", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f248", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2481", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f249", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2491", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f2616", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f2617", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f2618", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f2619", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f412", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f413", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f4132", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f415", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f4152", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f417", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f423", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f423a", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f425", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f4250", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f425a", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f4260", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f427", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f4270", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f427a", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f435", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f4351", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f436", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f4361", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f437", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f4371", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f438", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f439", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f447", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f448", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f4481", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f449", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f4491", CPUMSP430, HWMult16)
+MSP430_MCU("msp430f4616", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f46161", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f4617", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f46171", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f4618", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f46181", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f4619", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f46191", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430f47126", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47127", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47163", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47166", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47167", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47173", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47176", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47177", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47183", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47186", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47187", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47193", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47196", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f47197", CPUMSP430X, HWMult32)
+MSP430_MCU("msp430f477", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f478", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f4783", CPUMSP430, HWMult32)
+MSP430_MCU("msp430f4784", CPUMSP430, HWMult32)
+MSP430_MCU("msp430f479", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430f4793", CPUMSP430, HWMult32)
+MSP430_MCU("msp430f4794", CPUMSP430, HWMult32)
+MSP430_MCU("msp430f5131", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5132", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5151", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5152", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5171", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5172", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5212", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5213", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5214", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5217", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5218", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5219", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5222", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5223", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5224", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5227", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5228", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5229", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5232", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5234", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5237", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5239", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5242", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5244", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5247", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5249", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5252", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5253", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5254", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5255", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5256", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5257", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5258", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5259", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5304", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5308", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5309", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5310", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5324", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5325", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5326", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5327", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5328", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5329", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5333", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5335", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5336", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5338", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5340", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5341", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5342", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5358", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5359", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5418", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5418a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5419", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5419a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5435", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5435a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5436", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5436a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5437", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5437a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5438", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5438a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5500", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5501", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5502", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5503", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5504", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5505", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5506", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5507", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5508", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5509", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5510", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5513", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5514", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5515", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5517", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5519", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5521", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5522", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5524", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5525", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5526", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5527", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5528", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5529", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5630", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5631", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5632", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5633", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5634", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5635", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5636", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5637", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5638", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5658", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5659", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f5xx_6xxgeneric", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6433", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6435", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6436", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6438", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6458", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6459", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6630", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6631", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6632", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6633", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6634", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6635", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6636", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6637", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6638", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6658", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6659", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6720", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6720a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6721", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6721a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6723", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6723a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6724", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6724a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6725", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6725a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6726", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6726a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6730", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6730a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6731", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6731a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6733", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6733a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6734", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6734a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6735", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6735a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6736", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6736a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6745", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67451", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67451a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6745a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6746", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67461", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67461a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6746a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6747", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67471", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67471a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6747a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6748", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67481", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67481a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6748a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6749", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67491", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67491a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6749a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67621", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67621a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67641", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67641a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6765", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67651", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67651a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6765a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6766", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67661", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67661a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6766a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6767", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67671", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67671a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6767a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6768", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67681", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67681a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6768a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6769", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67691", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67691a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6769a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6775", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67751", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67751a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6775a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6776", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67761", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67761a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6776a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6777", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67771", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67771a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6777a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6778", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67781", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67781a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6778a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6779", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67791", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f67791a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430f6779a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fe423", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe4232", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe423a", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe4242", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe425", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe4252", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe425a", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe427", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe4272", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fe427a", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg4250", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg4260", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg4270", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg437", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg438", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg439", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg4616", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430fg4617", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430fg4618", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430fg4619", CPUMSP430X, HWMult16)
+MSP430_MCU("msp430fg477", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg478", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg479", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fg6425", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fg6426", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fg6625", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fg6626", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2000", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr2032", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr2033", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr2100", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr2110", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr2111", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr2153", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2155", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2310", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr2311", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr2353", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2355", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2422", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2433", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2475", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2476", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2512", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2522", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2532", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2533", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2632", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2633", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2672", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2673", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2675", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2676", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr2xx_4xxgeneric", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr4131", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr4132", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr4133", CPUMSP430XV2, HWMultNone)
+MSP430_MCU("msp430fr5041", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5043", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr50431", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5720", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5721", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5722", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5723", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5724", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5725", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5726", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5727", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5728", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5729", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5730", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5731", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5732", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5733", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5734", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5735", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5736", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5737", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5738", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5739", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr57xxgeneric", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5847", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr58471", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5848", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5849", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5857", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5858", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5859", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5867", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr58671", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5868", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5869", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5870", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5872", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr58721", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5887", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5888", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5889", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr58891", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5922", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr59221", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5947", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr59471", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5948", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5949", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5957", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5958", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5959", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5962", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5964", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5967", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5968", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5969", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr59691", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5970", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5972", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr59721", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5986", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5987", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5988", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5989", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr59891", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5992", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5994", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr59941", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr5xx_6xxgeneric", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6005", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6007", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6035", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6037", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr60371", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6041", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6043", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr60431", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6045", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6047", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr60471", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6820", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6822", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr68221", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6870", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6872", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr68721", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6877", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6879", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr68791", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6887", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6888", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6889", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr68891", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6920", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6922", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr69221", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6927", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr69271", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6928", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6970", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6972", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr69721", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6977", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6979", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr69791", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6987", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6988", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr6989", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fr69891", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430fw423", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fw425", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fw427", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fw428", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430fw429", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2001", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2101", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2102", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2111", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2112", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2113", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2121", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2131", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2132", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2152", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2153", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2201", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2202", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2203", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2210", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2211", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2212", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2213", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2221", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2230", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2231", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2232", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2233", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2252", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2253", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2302", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2303", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2312", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2313", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2332", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2333", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2352", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2353", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2402", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2403", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2412", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2413", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2432", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2433", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2444", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2452", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2453", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2513", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2533", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2544", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2553", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2744", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2755", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2855", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430g2955", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430i2020", CPUMSP430, HWMult16)
+MSP430_MCU("msp430i2021", CPUMSP430, HWMult16)
+MSP430_MCU("msp430i2030", CPUMSP430, HWMult16)
+MSP430_MCU("msp430i2031", CPUMSP430, HWMult16)
+MSP430_MCU("msp430i2040", CPUMSP430, HWMult16)
+MSP430_MCU("msp430i2041", CPUMSP430, HWMult16)
+MSP430_MCU("msp430i2xxgeneric", CPUMSP430, HWMult16)
+MSP430_MCU("msp430l092", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430p112", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430p313", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430p315", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430p315s", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430p325", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430p337", CPUMSP430, HWMult16)
+MSP430_MCU("msp430sl5438a", CPUMSP430XV2, HWMultF5)
+MSP430_MCU("msp430tch5e", CPUMSP430, HWMultNone)
+MSP430_MCU("msp430xgeneric", CPUMSP430XV2, HWMultF5)
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to