From efa66fcdad9c88db3244ec12e1a64db553a9484c Mon Sep 17 00:00:00 2001
From: chenyuanfeng <yuanfeng.chen@shingroup.cn>
Date: Tue, 27 Feb 2024 09:53:29 +0800
Subject: [PATCH] PPC-gas-supported-c2000

---
 binutils/ChangeLog-2024    |  29 +++++
 binutils/doc/binutils.info |   2 +-
 binutils/doc/binutils.texi |   2 +-
 gas/config/tc-ppc.c        |   2 +
 gas/doc/as.info            |   5 +-
 gas/doc/as.texi            |   2 +-
 gas/doc/c-ppc.texi         |   3 +
 gas/po/gas.pot             | 233 +++++++++++++++++++------------------
 include/opcode/ppc.h       |   7 ++
 opcodes/ppc-dis.c          |  21 ++--
 opcodes/ppc-opc.c          |   2 +-
 11 files changed, 181 insertions(+), 127 deletions(-)
 create mode 100644 binutils/ChangeLog-2024

diff --git a/binutils/ChangeLog-2024 b/binutils/ChangeLog-2024
new file mode 100644
index 00000000..db429887
--- /dev/null
+++ b/binutils/ChangeLog-2024
@@ -0,0 +1,29 @@
+2024-01-03	YuanFeng Chen  <yuanfeng.chen@shingroup.cn>
+
+	* config/tc-ppc.c (md_show_usage): Add -mc2000 options.	
+	* ppc.h : (PPC_OPCODE_HTM): Define.
+	(PPC_OPCODE_C2000): Likewise.
+	* ppc-dis.c (PPCHTM): Define as PPC_OPCODE_HTM.
+	(ppc_opts): Add "c2000" entry.
+	(ppc_opts): "power8","power9","power10", "libresoc", "future" entries add PPC_OPCODE_HTM flag.
+	* ppc-opc.c : PPCHTM defined as PPC_OPCODE_HTM instead of PPC_OPCODE_POWER8.
+	* doc/binutils.texi (PowerPC -M option): Mention c2000.
+	* doc/as.texi (Target PowerPC optins): Mention c2000.
+	* doc/c-ppc.texi (PowerPC-Opts): Document "-mc2000".
+	* po/gas.pot: Regenerate.
+
+
+For older changes see ChangeLog-2020
+
+Copyright (C) 2024 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
\ No newline at end of file
diff --git a/binutils/doc/binutils.info b/binutils/doc/binutils.info
index c9446db8..0fea501d 100644
--- a/binutils/doc/binutils.info
+++ b/binutils/doc/binutils.info
@@ -2343,7 +2343,7 @@ given.
      ‘efs’, ‘power4’, ‘power5’, ‘power6’, ‘power7’, ‘power8’, ‘power9’,
      ‘power10’, ‘ppc’, ‘ppc32’, ‘ppc64’, ‘ppc64bridge’, ‘ppcps’, ‘pwr’,
      ‘pwr2’, ‘pwr4’, ‘pwr5’, ‘pwr5x’, ‘pwr6’, ‘pwr7’, ‘pwr8’, ‘pwr9’,
-     ‘pwr10’, ‘pwrx’, ‘titan’, ‘vle’, and ‘future’.  ‘32’ and ‘64’
+     ‘pwr10’, ‘pwrx’, ‘titan’, ‘c2000’, ‘vle’, and ‘future’.  ‘32’ and ‘64’
      modify the default or a prior CPU selection, disabling and enabling
      64-bit insns respectively.  In addition, ‘altivec’, ‘any’, ‘lsp’,
      ‘htm’, ‘vsx’, ‘spe’ and ‘spe2’ add capabilities to a previous _or
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 8314cb57..e94ec504 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -2655,7 +2655,7 @@ rather than @code{li}.  All of the @option{-m} arguments for
 @option{ppc32}, @option{ppc64}, @option{ppc64bridge}, @option{ppcps},
 @option{pwr}, @option{pwr2}, @option{pwr4}, @option{pwr5}, @option{pwr5x},
 @option{pwr6}, @option{pwr7}, @option{pwr8}, @option{pwr9}, @option{pwr10},
-@option{pwrx}, @option{titan}, @option{vle}, and @option{future}.
+@option{pwrx}, @option{titan}, @option{c2000}, @option{vle}, and @option{future}.
 @option{32} and @option{64} modify the default or a prior CPU
 selection, disabling and enabling 64-bit insns respectively.  In
 addition, @option{altivec}, @option{any}, @option{lsp}, @option{htm},
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index a8b034c8..d99a6091 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -1426,6 +1426,8 @@ PowerPC options:\n"));
   fprintf (stream, _("\
 -mtitan                 generate code for AppliedMicro Titan core complex\n"));
   fprintf (stream, _("\
+-mc2000                 generate code for Hexin C2000 architecture\n"));
+  fprintf (stream, _("\
 -mregnames              Allow symbolic names for registers\n"));
   fprintf (stream, _("\
 -mno-regnames           Do not allow symbolic names for registers\n"));
diff --git a/gas/doc/as.info b/gas/doc/as.info
index ce2dc91c..ef56d9a0 100644
--- a/gas/doc/as.info
+++ b/gas/doc/as.info
@@ -288,7 +288,7 @@ Command-Line Options: Invoking.
          -mbroadway|-mppc64|-m620|-me500|-e500x2|-me500mc|-me500mc64|-me5500|
          -me6500|-mppc64bridge|-mbooke|-mpower4|-mpwr4|-mpower5|-mpwr5|-mpwr5x|
          -mpower6|-mpwr6|-mpower7|-mpwr7|-mpower8|-mpwr8|-mpower9|-mpwr9-ma2|
-         -mcell|-mspe|-mspe2|-mtitan|-me300|-mcom]
+         -mcell|-mspe|-mspe2|-mtitan|-mc2000|-me300|-mcom]
         [-many] [-maltivec|-mvsx|-mhtm|-mvle]
         [-mregnames|-mno-regnames]
         [-mrelocatable|-mrelocatable-lib|-K PIC] [-memb]
@@ -18702,6 +18702,9 @@ architecture reference manual.
 ‘-mfuture’
      Generate code for ’future’ architecture.
 
+‘-mc2000’
+     Generate code for Hexin C2000 architecture.
+
 ‘-mcell’
 ‘-mcell’
      Generate code for Cell Broadband Engine architecture.
diff --git a/gas/doc/as.texi b/gas/doc/as.texi
index 4959c2f6..02cd9058 100644
--- a/gas/doc/as.texi
+++ b/gas/doc/as.texi
@@ -536,7 +536,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
     @b{-mbroadway}|@b{-mppc64}|@b{-m620}|@b{-me500}|@b{-e500x2}|@b{-me500mc}|@b{-me500mc64}|@b{-me5500}|
     @b{-me6500}|@b{-mppc64bridge}|@b{-mbooke}|@b{-mpower4}|@b{-mpwr4}|@b{-mpower5}|@b{-mpwr5}|@b{-mpwr5x}|
     @b{-mpower6}|@b{-mpwr6}|@b{-mpower7}|@b{-mpwr7}|@b{-mpower8}|@b{-mpwr8}|@b{-mpower9}|@b{-mpwr9}@b{-ma2}|
-    @b{-mcell}|@b{-mspe}|@b{-mspe2}|@b{-mtitan}|@b{-me300}|@b{-mcom}]
+    @b{-mcell}|@b{-mspe}|@b{-mspe2}|@b{-mtitan}|@b{-mc2000}|@b{-me300}|@b{-mcom}]
    [@b{-many}] [@b{-maltivec}|@b{-mvsx}|@b{-mhtm}|@b{-mvle}]
    [@b{-mregnames}|@b{-mno-regnames}]
    [@b{-mrelocatable}|@b{-mrelocatable-lib}|@b{-K PIC}] [@b{-memb}]
diff --git a/gas/doc/c-ppc.texi b/gas/doc/c-ppc.texi
index f1dc17c6..115b730c 100644
--- a/gas/doc/c-ppc.texi
+++ b/gas/doc/c-ppc.texi
@@ -159,6 +159,9 @@ Generate code for Power10 architecture.
 @item -mfuture
 Generate code for 'future' architecture.
 
+@item -mc2000
+Generate code for Hexin C2000 architecture.
+
 @item -mcell
 @item -mcell
 Generate code for Cell Broadband Engine architecture.
diff --git a/gas/po/gas.pot b/gas/po/gas.pot
index bf47483b..36aa5fd7 100644
--- a/gas/po/gas.pot
+++ b/gas/po/gas.pot
@@ -8,10 +8,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
-"POT-Creation-Date: 2023-07-30 14:35+0100\n"
+"POT-Creation-Date: 2024-02-27 09:52+0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -647,7 +648,7 @@ msgstr ""
 #: cgen.c:106 config/tc-alpha.c:2097 config/tc-alpha.c:2121
 #: config/tc-arc.c:4074 config/tc-arc.c:4147 config/tc-d10v.c:550
 #: config/tc-d30v.c:534 config/tc-mn10200.c:1092 config/tc-mn10300.c:1753
-#: config/tc-ppc.c:3959 config/tc-s390.c:1337 config/tc-s390.c:1460
+#: config/tc-ppc.c:3961 config/tc-s390.c:1337 config/tc-s390.c:1460
 #: config/tc-s390.c:1594 config/tc-v850.c:2535 config/tc-v850.c:2606
 #: config/tc-v850.c:2653 config/tc-v850.c:2690 config/tc-v850.c:2727
 #: config/tc-v850.c:2991
@@ -655,7 +656,7 @@ msgid "too many fixups"
 msgstr ""
 
 #: cgen.c:371 cgen.c:393 config/tc-d10v.c:461 config/tc-d30v.c:450
-#: config/tc-mn10200.c:1034 config/tc-mn10300.c:1678 config/tc-ppc.c:3481
+#: config/tc-mn10200.c:1034 config/tc-mn10300.c:1678 config/tc-ppc.c:3483
 #: config/tc-s390.c:1321 config/tc-v850.c:2644 config/tc-v850.c:2678
 #: config/tc-v850.c:2718 config/tc-v850.c:2964 config/tc-z80.c:785
 msgid "illegal operand"
@@ -664,7 +665,7 @@ msgstr ""
 #: cgen.c:397 config/tc-avr.c:910 config/tc-d10v.c:463 config/tc-d30v.c:452
 #: config/tc-h8300.c:493 config/tc-mcore.c:662 config/tc-microblaze.c:613
 #: config/tc-mmix.c:495 config/tc-mn10200.c:1037 config/tc-mn10300.c:1681
-#: config/tc-msp430.c:417 config/tc-ppc.c:3483 config/tc-s390.c:1326
+#: config/tc-msp430.c:417 config/tc-ppc.c:3485 config/tc-s390.c:1326
 #: config/tc-sh.c:988 config/tc-v850.c:2648 config/tc-v850.c:2682
 #: config/tc-v850.c:2722 config/tc-v850.c:2967 config/tc-xgate.c:895
 #: config/tc-z80.c:933 config/tc-z8k.c:349
@@ -688,7 +689,7 @@ msgstr ""
 msgid "expression too complex"
 msgstr ""
 
-#: cgen.c:961 config/tc-ppc.c:7489 config/tc-s390.c:2376 config/tc-v850.c:3500
+#: cgen.c:961 config/tc-ppc.c:7491 config/tc-s390.c:2376 config/tc-v850.c:3500
 #: config/tc-xstormy16.c:541
 msgid "unresolved expression that must be resolved"
 msgstr ""
@@ -2689,7 +2690,7 @@ msgid "sequence number in use for !tlsgd!%ld"
 msgstr ""
 
 #: config/tc-alpha.c:1994 config/tc-arc.c:2869 config/tc-mn10200.c:847
-#: config/tc-mn10300.c:1150 config/tc-ppc.c:2063 config/tc-s390.c:668
+#: config/tc-mn10300.c:1150 config/tc-ppc.c:2065 config/tc-s390.c:668
 #: config/tc-tilegx.c:422 config/tc-tilegx.c:472 config/tc-tilepro.c:375
 msgid "operand"
 msgstr ""
@@ -2706,7 +2707,7 @@ msgstr ""
 msgid "can not resolve expression"
 msgstr ""
 
-#: config/tc-alpha.c:3514 config/tc-microblaze.c:204 config/tc-ppc.c:2405
+#: config/tc-alpha.c:3514 config/tc-microblaze.c:204 config/tc-ppc.c:2407
 #, c-format
 msgid ".COMMon length (%ld.) <0! Ignored."
 msgstr ""
@@ -2926,8 +2927,8 @@ msgstr ""
 #: config/tc-ia64.c:7463 config/tc-m68k.c:4558 config/tc-m68k.c:4570
 #: config/tc-mips.c:3703 config/tc-mips.c:3736 config/tc-mips.c:3762
 #: config/tc-nds32.c:3440 config/tc-nios2.c:3624 config/tc-nios2.c:3629
-#: config/tc-nios2.c:3635 config/tc-ns32k.c:1906 config/tc-ppc.c:1743
-#: config/tc-ppc.c:1783 config/tc-pru.c:1568 config/tc-pru.c:1572
+#: config/tc-nios2.c:3635 config/tc-ns32k.c:1906 config/tc-ppc.c:1745
+#: config/tc-ppc.c:1785 config/tc-pru.c:1568 config/tc-pru.c:1572
 #: config/tc-s390.c:538 config/tc-s390.c:576 config/tc-sparc.c:961
 #: config/tc-sparc.c:993 config/tc-tic30.c:121 config/tc-tic30.c:131
 #: config/tc-tic30.c:141 config/tc-tic30.c:151 config/tc-tic4x.c:1220
@@ -3279,8 +3280,8 @@ msgstr ""
 #: config/tc-arc.c:4324
 #, c-format
 msgid ""
-"A jump instruction with long immediate detected at the end of the ZOL label @"
-"%s"
+"A jump instruction with long immediate detected at the end of the ZOL label "
+"@%s"
 msgstr ""
 
 #: config/tc-arc.c:4330
@@ -6026,7 +6027,7 @@ msgstr ""
 #. xgettext:c-format.
 #: config/tc-avr.c:1865 config/tc-bfin.c:824 config/tc-d10v.c:1461
 #: config/tc-d30v.c:1768 config/tc-metag.c:7016 config/tc-mn10200.c:772
-#: config/tc-mn10300.c:2178 config/tc-msp430.c:4645 config/tc-ppc.c:7768
+#: config/tc-mn10300.c:2178 config/tc-msp430.c:4645 config/tc-ppc.c:7770
 #: config/tc-spu.c:878 config/tc-spu.c:1091 config/tc-v850.c:3365
 #: config/tc-z80.c:3878
 #, c-format
@@ -8716,8 +8717,8 @@ msgstr ""
 #: config/tc-i386.c:7529
 #, c-format
 msgid ""
-"no instruction mnemonic suffix given and no register operands; can't size `%"
-"s'"
+"no instruction mnemonic suffix given and no register operands; can't size "
+"`%s'"
 msgstr ""
 
 #: config/tc-i386.c:7534
@@ -10849,8 +10850,8 @@ msgstr ""
 msgid ".SCOMMon length (%ld.) <0! Ignored."
 msgstr ""
 
-#: config/tc-m32r.c:1514 config/tc-microblaze.c:218 config/tc-ppc.c:2419
-#: config/tc-ppc.c:4358 config/tc-ppc.c:4413
+#: config/tc-m32r.c:1514 config/tc-microblaze.c:218 config/tc-ppc.c:2421
+#: config/tc-ppc.c:4360 config/tc-ppc.c:4415
 msgid "ignoring bad alignment"
 msgstr ""
 
@@ -11696,7 +11697,7 @@ msgid_plural "%s relocations do not fit in %u bytes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: config/tc-m68k.c:7940 config/tc-ppc.c:2592
+#: config/tc-m68k.c:7940 config/tc-ppc.c:2594
 msgid "unknown .gnu_attribute value"
 msgstr ""
 
@@ -11737,11 +11738,10 @@ msgstr ""
 msgid "base register expected"
 msgstr ""
 
-#: config/tc-mcore.c:888 config/tc-microblaze.c:948
-#: config/tc-microblaze.c:1084 config/tc-microblaze.c:1118
-#: config/tc-microblaze.c:1573 config/tc-microblaze.c:1641
-#: config/tc-microblaze.c:1716 config/tc-microblaze.c:2137
-#: config/tc-microblaze.c:2186
+#: config/tc-mcore.c:888 config/tc-microblaze.c:948 config/tc-microblaze.c:1084
+#: config/tc-microblaze.c:1118 config/tc-microblaze.c:1573
+#: config/tc-microblaze.c:1641 config/tc-microblaze.c:1716
+#: config/tc-microblaze.c:2137 config/tc-microblaze.c:2186
 #, c-format
 msgid "unknown opcode \"%s\""
 msgstr ""
@@ -13767,7 +13767,7 @@ msgid "Unrecognized opcode: `%s'"
 msgstr ""
 
 #. xgettext:c-format.
-#: config/tc-mn10200.c:1133 config/tc-mn10300.c:1822 config/tc-ppc.c:4008
+#: config/tc-mn10200.c:1133 config/tc-mn10300.c:1822 config/tc-ppc.c:4010
 #: config/tc-s390.c:1607 config/tc-v850.c:3041
 #, c-format
 msgid "junk at end of line: `%s'"
@@ -15226,7 +15226,7 @@ msgstr ""
 msgid "pcrel too far"
 msgstr ""
 
-#: config/tc-ppc.c:964 config/tc-ppc.c:972 config/tc-ppc.c:3495
+#: config/tc-ppc.c:964 config/tc-ppc.c:972 config/tc-ppc.c:3497
 msgid "invalid register expression"
 msgstr ""
 
@@ -15494,414 +15494,419 @@ msgstr ""
 
 #: config/tc-ppc.c:1428
 #, c-format
-msgid "-mregnames              Allow symbolic names for registers\n"
+msgid "-mc2000                 generate code for Hexin C2000 architecture\n"
 msgstr ""
 
 #: config/tc-ppc.c:1430
 #, c-format
+msgid "-mregnames              Allow symbolic names for registers\n"
+msgstr ""
+
+#: config/tc-ppc.c:1432
+#, c-format
 msgid "-mno-regnames           Do not allow symbolic names for registers\n"
 msgstr ""
 
-#: config/tc-ppc.c:1433
+#: config/tc-ppc.c:1435
 #, c-format
 msgid "-mrelocatable           support for GCC's -mrelocatble option\n"
 msgstr ""
 
-#: config/tc-ppc.c:1435
+#: config/tc-ppc.c:1437
 #, c-format
 msgid "-mrelocatable-lib       support for GCC's -mrelocatble-lib option\n"
 msgstr ""
 
-#: config/tc-ppc.c:1437
+#: config/tc-ppc.c:1439
 #, c-format
 msgid "-memb                   set PPC_EMB bit in ELF flags\n"
 msgstr ""
 
-#: config/tc-ppc.c:1439
+#: config/tc-ppc.c:1441
 #, c-format
 msgid ""
 "-mlittle, -mlittle-endian, -le\n"
 "                        generate code for a little endian machine\n"
 msgstr ""
 
-#: config/tc-ppc.c:1442
+#: config/tc-ppc.c:1444
 #, c-format
 msgid ""
 "-mbig, -mbig-endian, -be\n"
 "                        generate code for a big endian machine\n"
 msgstr ""
 
-#: config/tc-ppc.c:1445
+#: config/tc-ppc.c:1447
 #, c-format
 msgid "-msolaris               generate code for Solaris\n"
 msgstr ""
 
-#: config/tc-ppc.c:1447
+#: config/tc-ppc.c:1449
 #, c-format
 msgid "-mno-solaris            do not generate code for Solaris\n"
 msgstr ""
 
-#: config/tc-ppc.c:1449
+#: config/tc-ppc.c:1451
 #, c-format
 msgid "-K PIC                  set EF_PPC_RELOCATABLE_LIB in ELF flags\n"
 msgstr ""
 
-#: config/tc-ppc.c:1451
+#: config/tc-ppc.c:1453
 #, c-format
 msgid "-V                      print assembler version number\n"
 msgstr ""
 
-#: config/tc-ppc.c:1453
+#: config/tc-ppc.c:1455
 #, c-format
 msgid "-Qy, -Qn                ignored\n"
 msgstr ""
 
-#: config/tc-ppc.c:1456
+#: config/tc-ppc.c:1458
 #, c-format
 msgid ""
 "-nops=count             when aligning, more than COUNT nops uses a branch\n"
 msgstr ""
 
-#: config/tc-ppc.c:1458
+#: config/tc-ppc.c:1460
 #, c-format
 msgid "-ppc476-workaround      warn if emitting data to code sections\n"
 msgstr ""
 
-#: config/tc-ppc.c:1488
+#: config/tc-ppc.c:1490
 #, c-format
 msgid "unknown default cpu = %s, os = %s"
 msgstr ""
 
-#: config/tc-ppc.c:1574
+#: config/tc-ppc.c:1576
 #, c-format
 msgid "mask trims opcode bits for %s"
 msgstr ""
 
-#: config/tc-ppc.c:1584
+#: config/tc-ppc.c:1586
 #, c-format
 msgid "operand index error for %s"
 msgstr ""
 
-#: config/tc-ppc.c:1610
+#: config/tc-ppc.c:1612
 #, c-format
 msgid "operand %d overlap in %s"
 msgstr ""
 
-#: config/tc-ppc.c:1619
+#: config/tc-ppc.c:1621
 #, c-format
 msgid "non-optional operand %d follows optional operand in %s"
 msgstr ""
 
-#: config/tc-ppc.c:1685
+#: config/tc-ppc.c:1687
 #, c-format
 msgid "powerpc_operands[%d].bitm invalid"
 msgstr ""
 
-#: config/tc-ppc.c:1692
+#: config/tc-ppc.c:1694
 #, c-format
 msgid "powerpc_operands[%d] duplicates powerpc_operands[%d]"
 msgstr ""
 
-#: config/tc-ppc.c:1720 config/tc-ppc.c:1773 config/tc-ppc.c:1815
-#: config/tc-ppc.c:1863
+#: config/tc-ppc.c:1722 config/tc-ppc.c:1775 config/tc-ppc.c:1817
+#: config/tc-ppc.c:1865
 #, c-format
 msgid "major opcode is not sorted for %s"
 msgstr ""
 
-#: config/tc-ppc.c:1726
+#: config/tc-ppc.c:1728
 #, c-format
 msgid "%s is enabled by vle flag"
 msgstr ""
 
-#: config/tc-ppc.c:1733
+#: config/tc-ppc.c:1735
 #, c-format
 msgid "%s not disabled by vle flag"
 msgstr ""
 
-#: config/tc-ppc.c:1839
+#: config/tc-ppc.c:1841
 #, c-format
 msgid "opcode is not sorted for %s"
 msgstr ""
 
-#: config/tc-ppc.c:2257
+#: config/tc-ppc.c:2259
 #, c-format
 msgid "symbol+offset@%s means symbol@%s+offset"
 msgstr ""
 
-#: config/tc-ppc.c:2277
+#: config/tc-ppc.c:2279
 #, c-format
 msgid "symbol+offset@%s not supported"
 msgstr ""
 
-#: config/tc-ppc.c:2356 config/tc-ppc.c:4226 config/tc-ppc.c:7691
+#: config/tc-ppc.c:2358 config/tc-ppc.c:4228 config/tc-ppc.c:7693
 msgid "data in executable section"
 msgstr ""
 
-#: config/tc-ppc.c:2397
+#: config/tc-ppc.c:2399
 msgid "expected comma after symbol-name: rest of line ignored."
 msgstr ""
 
-#: config/tc-ppc.c:2430
+#: config/tc-ppc.c:2432
 #, c-format
 msgid "ignoring attempt to re-define symbol `%s'."
 msgstr ""
 
-#: config/tc-ppc.c:2438
+#: config/tc-ppc.c:2440
 #, c-format
 msgid "length of .lcomm \"%s\" is already %ld. Not changed to %ld."
 msgstr ""
 
-#: config/tc-ppc.c:2456
+#: config/tc-ppc.c:2458
 msgid "common alignment not a power of 2"
 msgstr ""
 
-#: config/tc-ppc.c:2498
+#: config/tc-ppc.c:2500
 #, c-format
 msgid "expected comma after name `%s' in .localentry directive"
 msgstr ""
 
-#: config/tc-ppc.c:2508
+#: config/tc-ppc.c:2510
 msgid "missing expression in .localentry directive"
 msgstr ""
 
-#: config/tc-ppc.c:2529
+#: config/tc-ppc.c:2531
 #, c-format
 msgid ".localentry expression for `%s' is not a valid power of 2"
 msgstr ""
 
-#: config/tc-ppc.c:2546
+#: config/tc-ppc.c:2548
 #, c-format
 msgid ".localentry expression for `%s' does not evaluate to a constant"
 msgstr ""
 
-#: config/tc-ppc.c:2561
+#: config/tc-ppc.c:2563
 msgid "missing expression in .abiversion directive"
 msgstr ""
 
-#: config/tc-ppc.c:2570
+#: config/tc-ppc.c:2572
 msgid ".abiversion expression does not evaluate to a constant"
 msgstr ""
 
-#: config/tc-ppc.c:2650
+#: config/tc-ppc.c:2652
 msgid "relocation cannot be done when using -mrelocatable"
 msgstr ""
 
-#: config/tc-ppc.c:2696
+#: config/tc-ppc.c:2698
 msgid "TOC section size exceeds 64k"
 msgstr ""
 
-#: config/tc-ppc.c:3256
+#: config/tc-ppc.c:3258
 #, c-format
 msgid "%s howto doesn't match size/pcrel in gas"
 msgstr ""
 
-#: config/tc-ppc.c:3335
+#: config/tc-ppc.c:3337
 #, c-format
 msgid "unrecognized opcode: `%s'"
 msgstr ""
 
 #. lmw, stmw, lswi, lswx, stswi, stswx
-#: config/tc-ppc.c:3346
+#: config/tc-ppc.c:3348
 #, c-format
 msgid "`%s' invalid when little-endian"
 msgstr ""
 
-#: config/tc-ppc.c:3695
+#: config/tc-ppc.c:3697
 #, c-format
 msgid "@tls may not be used with \"%s\" operands"
 msgstr ""
 
-#: config/tc-ppc.c:3698
+#: config/tc-ppc.c:3700
 msgid "@tls may only be used in last operand"
 msgstr ""
 
-#: config/tc-ppc.c:3736 config/tc-ppc.c:3746 config/tc-ppc.c:3756
-#: config/tc-ppc.c:3771
+#: config/tc-ppc.c:3738 config/tc-ppc.c:3748 config/tc-ppc.c:3758
+#: config/tc-ppc.c:3773
 #, c-format
 msgid "%s unsupported on this instruction"
 msgstr ""
 
-#: config/tc-ppc.c:3818
+#: config/tc-ppc.c:3820
 #, c-format
 msgid "assuming %s on symbol"
 msgstr ""
 
-#: config/tc-ppc.c:3941
+#: config/tc-ppc.c:3943
 msgid "unsupported relocation for DS offset field"
 msgstr ""
 
-#: config/tc-ppc.c:3994
+#: config/tc-ppc.c:3996
 #, c-format
 msgid "syntax error; found `%c', expected `%c'"
 msgstr ""
 
-#: config/tc-ppc.c:3999
+#: config/tc-ppc.c:4001
 #, c-format
 msgid "syntax error; end of line, expected `%c'"
 msgstr ""
 
-#: config/tc-ppc.c:4064 config/tc-ppc.c:6865
+#: config/tc-ppc.c:4066 config/tc-ppc.c:6867
 #, c-format
 msgid "instruction address is not a multiple of %d"
 msgstr ""
 
-#: config/tc-ppc.c:4183
+#: config/tc-ppc.c:4185
 msgid "bad .section directive: want a,e,v,w,x,M,S,G,T in string"
 msgstr ""
 
-#: config/tc-ppc.c:4333
+#: config/tc-ppc.c:4335
 msgid "missing size"
 msgstr ""
 
-#: config/tc-ppc.c:4342
+#: config/tc-ppc.c:4344
 msgid "negative size"
 msgstr ""
 
-#: config/tc-ppc.c:4369
+#: config/tc-ppc.c:4371
 msgid "Unknown visibility field in .comm"
 msgstr ""
 
-#: config/tc-ppc.c:4387
+#: config/tc-ppc.c:4389
 msgid "missing real symbol name"
 msgstr ""
 
-#: config/tc-ppc.c:4426
+#: config/tc-ppc.c:4428
 msgid "attempt to redefine symbol"
 msgstr ""
 
-#: config/tc-ppc.c:4735
+#: config/tc-ppc.c:4737
 #, c-format
 msgid "no known dwarf XCOFF section for flag 0x%08x\n"
 msgstr ""
 
-#: config/tc-ppc.c:4748
+#: config/tc-ppc.c:4750
 #, c-format
 msgid "label %s was not defined in this dwarf section"
 msgstr ""
 
-#: config/tc-ppc.c:4862
+#: config/tc-ppc.c:4864
 msgid "the XCOFF file format does not support arbitrary sections"
 msgstr ""
 
-#: config/tc-ppc.c:4900
+#: config/tc-ppc.c:4902
 msgid "Unknown visibility field in .extern"
 msgstr ""
 
-#: config/tc-ppc.c:4937
+#: config/tc-ppc.c:4939
 msgid "Unknown visibility field in .globl"
 msgstr ""
 
-#: config/tc-ppc.c:4974
+#: config/tc-ppc.c:4976
 msgid "Unknown visibility field in .weak"
 msgstr ""
 
-#: config/tc-ppc.c:5025
+#: config/tc-ppc.c:5027
 msgid ".ref outside .csect"
 msgstr ""
 
-#: config/tc-ppc.c:5046 config/tc-ppc.c:5306
+#: config/tc-ppc.c:5048 config/tc-ppc.c:5308
 msgid "missing symbol name"
 msgstr ""
 
-#: config/tc-ppc.c:5076
+#: config/tc-ppc.c:5078
 msgid "missing rename string"
 msgstr ""
 
-#: config/tc-ppc.c:5106 config/tc-ppc.c:5708
+#: config/tc-ppc.c:5108 config/tc-ppc.c:5710
 msgid "missing value"
 msgstr ""
 
-#: config/tc-ppc.c:5124
+#: config/tc-ppc.c:5126
 msgid "illegal .stabx expression; zero assumed"
 msgstr ""
 
-#: config/tc-ppc.c:5156
+#: config/tc-ppc.c:5158
 msgid "missing class"
 msgstr ""
 
-#: config/tc-ppc.c:5165
+#: config/tc-ppc.c:5167
 msgid "missing type"
 msgstr ""
 
-#: config/tc-ppc.c:5192
+#: config/tc-ppc.c:5194
 msgid ".stabx of storage class stsym must be within .bs/.es"
 msgstr ""
 
-#: config/tc-ppc.c:5496
+#: config/tc-ppc.c:5498
 msgid "nested .bs blocks"
 msgstr ""
 
-#: config/tc-ppc.c:5527
+#: config/tc-ppc.c:5529
 msgid ".es without preceding .bs"
 msgstr ""
 
-#: config/tc-ppc.c:5700
+#: config/tc-ppc.c:5702
 msgid "non-constant byte count"
 msgstr ""
 
-#: config/tc-ppc.c:5775
+#: config/tc-ppc.c:5777
 msgid ".tc not in .toc section"
 msgstr ""
 
-#: config/tc-ppc.c:5793
+#: config/tc-ppc.c:5795
 msgid ".tc with no label"
 msgstr ""
 
-#: config/tc-ppc.c:5821
+#: config/tc-ppc.c:5823
 #, c-format
 msgid ".tc with storage class %d not yet supported"
 msgstr ""
 
-#: config/tc-ppc.c:5890 config/tc-s390.c:1967
+#: config/tc-ppc.c:5892 config/tc-s390.c:1967
 msgid ".machine stack overflow"
 msgstr ""
 
-#: config/tc-ppc.c:5897 config/tc-s390.c:1978
+#: config/tc-ppc.c:5899 config/tc-s390.c:1978
 msgid ".machine stack underflow"
 msgstr ""
 
-#: config/tc-ppc.c:5939 config/tc-s390.c:1990
+#: config/tc-ppc.c:5941 config/tc-s390.c:1990
 #, c-format
 msgid "invalid machine `%s'"
 msgstr ""
 
-#: config/tc-ppc.c:5983
+#: config/tc-ppc.c:5985
 msgid "bad symbol suffix"
 msgstr ""
 
-#: config/tc-ppc.c:6082
+#: config/tc-ppc.c:6084
 msgid "unrecognized symbol suffix"
 msgstr ""
 
-#: config/tc-ppc.c:6170
+#: config/tc-ppc.c:6172
 msgid ".ef with no preceding .function"
 msgstr ""
 
-#: config/tc-ppc.c:6309
+#: config/tc-ppc.c:6311
 #, c-format
 msgid "warning: symbol %s has no csect"
 msgstr ""
 
-#: config/tc-ppc.c:6641
+#: config/tc-ppc.c:6643
 msgid "symbol in .toc does not match any .tc"
 msgstr ""
 
-#: config/tc-ppc.c:7393
+#: config/tc-ppc.c:7395
 #, c-format
 msgid "%s unsupported as instruction fixup"
 msgstr ""
 
-#: config/tc-ppc.c:7492
+#: config/tc-ppc.c:7494
 #, c-format
 msgid "unsupported relocation against %s"
 msgstr ""
 
-#: config/tc-ppc.c:7654
+#: config/tc-ppc.c:7656
 #, c-format
 msgid "R_TLSML relocation doesn't target a TOC entry named \"_$TLSML\": %s"
 msgstr ""
 
-#: config/tc-ppc.c:7674
+#: config/tc-ppc.c:7676
 #, c-format
 msgid "Gas failure, reloc value %d\n"
 msgstr ""
diff --git a/include/opcode/ppc.h b/include/opcode/ppc.h
index aea7d6c2..f599a8a1 100644
--- a/include/opcode/ppc.h
+++ b/include/opcode/ppc.h
@@ -245,6 +245,13 @@ extern const unsigned int spe2_num_opcodes;
 /* Opcode is only supported by 'future' architecture.  */
 #define PPC_OPCODE_FUTURE  0x1000000000000ull
 
+/* Opcode is supported by Hardware Transactional Memory */
+#define PPC_OPCODE_HTM		0x2000000000000ull
+
+/* Opcode is supported by C2000 */
+#define PPC_OPCODE_C2000	0x4000000000000ull
+
+
 /* A macro to extract the major opcode from an instruction.  */
 #define PPC_OP(i) (((i) >> 26) & 0x3f)
 
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c
index d97137d8..055dc8f5 100644
--- a/opcodes/ppc-dis.c
+++ b/opcodes/ppc-dis.c
@@ -196,29 +196,34 @@ struct ppc_mopt ppc_opts[] = {
   { "power8",  (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
 		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8
-		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX),
+		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_HTM),
     0 },
   { "power9",  (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
 		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9
-		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX),
+		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_HTM),
     0 },
   { "power10", (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
 		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9
-		| PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX),
+		| PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_HTM),
     0 },
   { "libresoc",(PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
 		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9
-		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_SVP64),
+		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_SVP64 | PPC_OPCODE_HTM),
     0 },
   { "future",  (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
 		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9
-		| PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX
+		| PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_HTM
 		| PPC_OPCODE_FUTURE),
     0 },
+  { "c2000",  (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
+		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
+		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_C2000
+		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX),
+    0 },
   { "ppc",     PPC_OPCODE_PPC,
     0 },
   { "ppc32",   PPC_OPCODE_PPC,
@@ -255,17 +260,17 @@ struct ppc_mopt ppc_opts[] = {
   { "pwr8",    (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
 		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8
-		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX),
+		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_HTM),
     0 },
   { "pwr9",    (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
 		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9
-		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX),
+		| PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_HTM),
     0 },
   { "pwr10",   (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
 		| PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
 		| PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9
-		| PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX),
+		| PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX | PPC_OPCODE_HTM),
     0 },
   { "pwrx",    PPC_OPCODE_POWER | PPC_OPCODE_POWER2,
     0 },
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index 37f1aeb7..ac92a8f1 100644
--- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c
@@ -5007,7 +5007,7 @@ const unsigned int num_powerpc_operands = ARRAY_SIZE (powerpc_operands);
 #define E500	PPC_OPCODE_E500
 #define E6500	PPC_OPCODE_E6500
 #define PPCVLE	PPC_OPCODE_VLE
-#define PPCHTM	PPC_OPCODE_POWER8
+#define PPCHTM	PPC_OPCODE_HTM
 #define E200Z4	PPC_OPCODE_E200Z4
 #define PPCLSP	PPC_OPCODE_LSP
 #define SVP64	PPC_OPCODE_SVP64
-- 
2.33.0

