Add MSP430 variants
[external/binutils.git] / gas / config / tc-msp430.c
index f90a27d..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,20 +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},
-  {"msp430x122", MSP430_ISA_12, bfd_mach_msp12},
-  {"msp430x122", MSP430_ISA_12, bfd_mach_msp12},
-  {"msp430x1222",MSP430_ISA_12, bfd_mach_msp12},
+  {"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},
   {"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},
@@ -116,23 +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}
 };
@@ -186,6 +199,8 @@ md_show_usage (stream)
             "                  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"
@@ -194,6 +209,8 @@ md_show_usage (stream)
             "                  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"));
 
@@ -979,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")); */
@@ -1000,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")); */