Add MSP430 variants
[external/binutils.git] / gas / config / tc-msp430.c
index ce0116b..0f8e32f 100644 (file)
@@ -71,18 +71,19 @@ struct mcu_type_s
 };
 
 #define MSP430_ISA_11   11
+#define MSP430_ISA_110 110
 #define MSP430_ISA_12   12
 #define MSP430_ISA_13   13
 #define MSP430_ISA_14   14
-#define MSP430_ISA_41   41
+#define MSP430_ISA_15   15
+#define MSP430_ISA_16   16
 #define MSP430_ISA_31   31
 #define MSP430_ISA_32   32
 #define MSP430_ISA_33   33
-#define MSP430_ISA_110 110
+#define MSP430_ISA_41   41
+#define MSP430_ISA_42   42
 #define MSP430_ISA_43   43
 #define MSP430_ISA_44   44
-#define MSP430_ISA_15   15
-#define MSP430_ISA_16   16
 
 #define CHECK_RELOC_MSP430             ((imm_op || byte_op)?BFD_RELOC_MSP430_16_BYTE:BFD_RELOC_MSP430_16)
 #define CHECK_RELOC_MSP430_PCREL       ((imm_op || byte_op)?BFD_RELOC_MSP430_16_PCREL_BYTE:BFD_RELOC_MSP430_16_PCREL)
@@ -93,18 +94,32 @@ static struct mcu_type_s mcu_types[] =
   {"msp2",       MSP430_ISA_14, bfd_mach_msp14},
   {"msp430x110", MSP430_ISA_11, bfd_mach_msp11},
   {"msp430x112", MSP430_ISA_11, bfd_mach_msp11},
+  {"msp430x1101",MSP430_ISA_110, bfd_mach_msp110},
+  {"msp430x1111",MSP430_ISA_110, bfd_mach_msp110},
+  {"msp430x1121",MSP430_ISA_110, bfd_mach_msp110},
+  {"msp430x1122",MSP430_ISA_11, bfd_mach_msp110},
+  {"msp430x1132",MSP430_ISA_11, bfd_mach_msp110},
+
   {"msp430x122", MSP430_ISA_12, bfd_mach_msp12},
-  {"msp430x122", MSP430_ISA_12, bfd_mach_msp12},
-  {"msp430x1222",MSP430_ISA_12, bfd_mach_msp12},
   {"msp430x123", MSP430_ISA_12, bfd_mach_msp12},
+  {"msp430x1222",MSP430_ISA_12, bfd_mach_msp12},
   {"msp430x1232",MSP430_ISA_12, bfd_mach_msp12},
+
   {"msp430x133", MSP430_ISA_13, bfd_mach_msp13},
   {"msp430x135", MSP430_ISA_13, bfd_mach_msp13},
+  {"msp430x1331",MSP430_ISA_13, bfd_mach_msp13},
+  {"msp430x1351",MSP430_ISA_13, bfd_mach_msp13},
   {"msp430x147", MSP430_ISA_14, bfd_mach_msp14},
   {"msp430x148", MSP430_ISA_14, bfd_mach_msp14},
   {"msp430x149", MSP430_ISA_14, bfd_mach_msp14},
-  {"msp430x412", MSP430_ISA_41, bfd_mach_msp41},
-  {"msp430x413", MSP430_ISA_41, bfd_mach_msp41},
+
+  {"msp430x155", MSP430_ISA_15, bfd_mach_msp15},
+  {"msp430x156", MSP430_ISA_15, bfd_mach_msp15},
+  {"msp430x157", MSP430_ISA_15, bfd_mach_msp15},
+  {"msp430x167", MSP430_ISA_16, bfd_mach_msp16},
+  {"msp430x168", MSP430_ISA_16, bfd_mach_msp16},
+  {"msp430x169", MSP430_ISA_16, bfd_mach_msp16},
+
   {"msp430x311", MSP430_ISA_31, bfd_mach_msp31},
   {"msp430x312", MSP430_ISA_31, bfd_mach_msp31},
   {"msp430x313", MSP430_ISA_31, bfd_mach_msp31},
@@ -114,22 +129,23 @@ static struct mcu_type_s mcu_types[] =
   {"msp430x325", MSP430_ISA_32, bfd_mach_msp32},
   {"msp430x336", MSP430_ISA_33, bfd_mach_msp33},
   {"msp430x337", MSP430_ISA_33, bfd_mach_msp33},
-  {"msp430x1101",MSP430_ISA_110, bfd_mach_msp110},
-  {"msp430x1111",MSP430_ISA_110, bfd_mach_msp110},
-  {"msp430x1121",MSP430_ISA_110, bfd_mach_msp110},
-  {"msp430x1331",MSP430_ISA_13, bfd_mach_msp13},
-  {"msp430x1351",MSP430_ISA_13, bfd_mach_msp13},
+
+  {"msp430x412", MSP430_ISA_41, bfd_mach_msp41},
+  {"msp430x413", MSP430_ISA_41, bfd_mach_msp41},
+
+  {"msp430xE423", MSP430_ISA_42, bfd_mach_msp42},
+  {"msp430xE425", MSP430_ISA_42, bfd_mach_msp42},
+  {"msp430xE427", MSP430_ISA_42, bfd_mach_msp42},
+  {"msp430xW423", MSP430_ISA_42, bfd_mach_msp42},
+  {"msp430xW425", MSP430_ISA_42, bfd_mach_msp42},
+  {"msp430xW427", MSP430_ISA_42, bfd_mach_msp42},
+
   {"msp430x435", MSP430_ISA_43, bfd_mach_msp43},
   {"msp430x436", MSP430_ISA_43, bfd_mach_msp43},
+  {"msp430x437", MSP430_ISA_43, bfd_mach_msp43},
   {"msp430x447", MSP430_ISA_44, bfd_mach_msp44},
   {"msp430x448", MSP430_ISA_44, bfd_mach_msp44},
   {"msp430x449", MSP430_ISA_44, bfd_mach_msp44},
-  {"msp430x167", MSP430_ISA_16, bfd_mach_msp16},
-  {"msp430x168", MSP430_ISA_16, bfd_mach_msp16},
-  {"msp430x169", MSP430_ISA_16, bfd_mach_msp16},
-  {"msp430x155", MSP430_ISA_15, bfd_mach_msp15},
-  {"msp430x156", MSP430_ISA_15, bfd_mach_msp15},
-  {"msp430x157", MSP430_ISA_15, bfd_mach_msp15},
 
   {NULL, 0, 0}
 };
@@ -179,21 +195,24 @@ md_show_usage (stream)
   fprintf (stream,
           _("MSP430 options:\n"
             "  -mmcu=[msp430-name] select microcontroller type\n"
-            "                  msp430x1101 msp430x1111 msp430x1121\n"
-            "                  msp430x1331 msp430x1351\n"
-            "                  msp430x1222 msp430x1232\n"
-            "                  msp430x311 msp430x312 msp430x313 msp430x314 msp430x315\n"
-            "                  msp430x323 msp430x325\n"
-            "                  msp430x336 msp430x337\n"
-            "                  msp430x412 msp430x413\n"
-            "                  msp430x110 msp430x112\n"
-            "                  msp430x122 msp430x123\n"
-            "                  msp430x133 msp430x135\n"
-            "                  msp430x147 msp430x148 msp430x149\n"
-            "                  msp430x167 msp430x168 msp430x169\n"
-            "                  msp430x155 msp430x156 msp430x157\n"
-            "                  msp430x447 msp430x448 msp430x449\n"
-            "                  msp430x435 msp430x436\n"));
+            "                  msp430x110  msp430x112\n"
+            "                  msp430x1101 msp430x1111\n"
+            "                  msp430x1121 msp430x1122 msp430x1132\n"
+            "                  msp430x122  msp430x123\n"
+             "                  msp430x1222 msp430x1232\n"
+             "                  msp430x133  msp430x135\n"
+            "                  msp430x1331 msp430x1351\n"
+            "                  msp430x147  msp430x148  msp430x149\n"
+            "                  msp430x155  msp430x156  msp430x157\n"
+            "                  msp430x167  msp430x168  msp430x169\n"
+            "                  msp430x311  msp430x312  msp430x313  msp430x314  msp430x315\n"
+            "                  msp430x323  msp430x325\n"
+            "                  msp430x336  msp430x337\n"
+            "                  msp430x412  msp430x413\n"
+             "                  msp430xE423 msp430xE425 msp430E427\n"
+             "                  msp430xW423 msp430xW425 msp430W427\n"
+            "                  msp430x435  msp430x436  msp430x437\n"
+            "                  msp430x447  msp430x448  msp430x449\n"));
 
   show_mcu_list (stream);
 }
@@ -977,11 +996,7 @@ msp430_srcoperand (op, l, bin, imm_op)
          else if (x == 4)
            {
 #ifdef PUSH_1X_WORKAROUND
-             if (bin == 0x1200
-                 && (msp430_mcu->isa == MSP430_ISA_11
-                     || msp430_mcu->isa == MSP430_ISA_12
-                     || msp430_mcu->isa == MSP430_ISA_13
-                     || msp430_mcu->isa == MSP430_ISA_14))
+             if (bin == 0x1200)
                {
                  /* Remove warning as confusing.
                     as_warn(_("Hardware push bug workaround")); */
@@ -998,11 +1013,7 @@ msp430_srcoperand (op, l, bin, imm_op)
          else if (x == 8)
            {
 #ifdef PUSH_1X_WORKAROUND
-             if (bin == 0x1200
-                 && (msp430_mcu->isa == MSP430_ISA_11
-                     || msp430_mcu->isa == MSP430_ISA_12
-                     || msp430_mcu->isa == MSP430_ISA_13
-                     || msp430_mcu->isa == MSP430_ISA_14))
+             if (bin == 0x1200)
                {
                  /* Remove warning as confusing.
                     as_warn(_("Hardware push bug workaround")); */