[PATCH] Add Octeon2 cpu support to binutils

Andrew Pinski andrew.pinski@caviumnetworks.com
Thu Dec 8 03:00:00 GMT 2011


Hi,
  This patch adds the Octeon2 mips cpu to binutils.  Octeon2 includes
a few new instructions over Octeon+.  It includes the load index
instruction from DSP (and some which are added to only Octeon2).  It
includes two cache block zeroing instructions.  And it includes some
q15 multiple and accumulate instructions (qmac*).

OK? Tested on mips64-linux-gnu with no regressions.

Thanks,
Andrew Pinski

bfd/ChangeLog:
* archures.c (bfd_mach_mips_octeon2): New macro
* bfd-in2.h: Regenerate.
* cpu-mips.c (I_mipsocteon2): New enum value.
(arch_info_struct): Add bfd_mach_mips_octeon2.
* elfxx-mips.c (_bfd_elf_mips_mach): Support E_MIPS_MACH_OCTEON2.
(mips_set_isa_flags): Add bfd_mach_mips_octeon2.
(mips_mach_extensions): Add bfd_mach_mips_octeon2.

gas/ChangeLog:
* tc-mips.c (CPU_IS_OCTEON): Add Octeon2.
(mips_cpu_info_table): Add Octeon2.
* doc/c-mips.texi: Document octeon2 as an acceptable value for -march=.

gas/testsuite/ChangeLog:
* gas/mips/mips.exp: Add Octeon2 for an architecture.
Run octeon2 test.
* gas/mips/octeon2.d: New file.
* gas/mips/octeon2.s: New file.

include/opcode/ChangeLog:
* mips.h (INSN_CHIP_MASK): Update according to INSN_OCTEON2.
(INSN_OCTEON2): New macro.
(CPU_OCTEON2): New macro.
(OPCODE_IS_MEMBER): Add Octeon2.

opcodes/ChangeLog:
* mips-dis.c (mips_arch_choices): Add Octeon2.
* mips-opc.c (IOCT): Include Octeon2.
(IOCTP): Include Octeon2.
(IOCT2): New macro.
(mips_builtin_opcodes): Add "laa", "laad", "lac", "lacd", "lad",
"ladd", "lai", "laid", "las", "lasd", "law", "lawd".
Move "lbux", "ldx", "lhx", "lwx", and "lwux" up to where the standard
loads are, and add IOCT2 to them.
Add "lbx" and "lhux".
Add "qmac.00", "qmac.01", "qmac.02", "qmac.03", "qmacs.00",
"qmacs.01", "qmacs.01", "qmacs.02" and "qmacs.03".
Add "zcb" and "zcbt".
-------------- next part --------------
? opcodes/opcodes
Index: bfd/archures.c
===================================================================
RCS file: /cvs/src/src/bfd/archures.c,v
retrieving revision 1.161
diff -u -p -r1.161 archures.c
--- bfd/archures.c	29 Nov 2011 20:28:53 -0000	1.161
+++ bfd/archures.c	8 Dec 2011 01:51:54 -0000
@@ -177,6 +177,7 @@ DESCRIPTION
 .#define bfd_mach_mips_sb1              12310201 {* octal 'SB', 01 *}
 .#define bfd_mach_mips_octeon		6501
 .#define bfd_mach_mips_octeonp		6601
+.#define bfd_mach_mips_octeon2		6502
 .#define bfd_mach_mips_xlr              887682   {* decimal 'XLR'  *}
 .#define bfd_mach_mipsisa32             32
 .#define bfd_mach_mipsisa32r2           33
Index: bfd/bfd-in2.h
===================================================================
RCS file: /cvs/src/src/bfd/bfd-in2.h,v
retrieving revision 1.553
diff -u -p -r1.553 bfd-in2.h
--- bfd/bfd-in2.h	29 Nov 2011 20:28:53 -0000	1.553
+++ bfd/bfd-in2.h	8 Dec 2011 01:51:54 -0000
@@ -1883,6 +1883,7 @@ enum bfd_architecture
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
 #define bfd_mach_mips_octeon           6501
 #define bfd_mach_mips_octeonp          6601
+#define bfd_mach_mips_octeon2          6502
 #define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: bfd/cpu-mips.c
===================================================================
RCS file: /cvs/src/src/bfd/cpu-mips.c,v
retrieving revision 1.37
diff -u -p -r1.37 cpu-mips.c
--- bfd/cpu-mips.c	29 Nov 2011 20:28:54 -0000	1.37
+++ bfd/cpu-mips.c	8 Dec 2011 01:51:54 -0000
@@ -94,6 +94,7 @@ enum
   I_loongson_3a,
   I_mipsocteon,
   I_mipsocteonp,
+  I_mipsocteon2,
   I_xlr,
   I_micromips
 };
@@ -136,6 +137,7 @@ static const bfd_arch_info_type arch_inf
   N (64, 64, bfd_mach_mips_loongson_3a, "mips:loongson_3a",       FALSE, NN(I_loongson_3a)),
   N (64, 64, bfd_mach_mips_octeon,"mips:octeon",  FALSE, NN(I_mipsocteon)),
   N (64, 64, bfd_mach_mips_octeonp,"mips:octeon+",  FALSE, NN(I_mipsocteonp)),
+  N (64, 64, bfd_mach_mips_octeon2,"mips:octeon2",  FALSE, NN(I_mipsocteon2)),
   N (64, 64, bfd_mach_mips_xlr, "mips:xlr",       FALSE, NN(I_xlr)),
   N (64, 64, bfd_mach_mips_micromips,"mips:micromips",FALSE,0)
 };
Index: bfd/elfxx-mips.c
===================================================================
RCS file: /cvs/src/src/bfd/elfxx-mips.c,v
retrieving revision 1.296
diff -u -p -r1.296 elfxx-mips.c
--- bfd/elfxx-mips.c	29 Nov 2011 20:28:54 -0000	1.296
+++ bfd/elfxx-mips.c	8 Dec 2011 01:51:55 -0000
@@ -6182,6 +6182,9 @@ _bfd_elf_mips_mach (flagword flags)
     case E_MIPS_MACH_LS3A:
       return bfd_mach_mips_loongson_3a;
 
+    case E_MIPS_MACH_OCTEON2:
+      return bfd_mach_mips_octeon2;
+
     case E_MIPS_MACH_OCTEON:
       return bfd_mach_mips_octeon;
 
@@ -10893,6 +10896,10 @@ mips_set_isa_flags (bfd *abfd)
       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
       break;
 
+    case bfd_mach_mips_octeon2:
+      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
+      break;
+
     case bfd_mach_mipsisa32:
       val = E_MIPS_ARCH_32;
       break;
@@ -13492,6 +13499,7 @@ struct mips_mach_extension {
 
 static const struct mips_mach_extension mips_mach_extensions[] = {
   /* MIPS64r2 extensions.  */
+  { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
 
Index: gas/config/tc-mips.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-mips.c,v
retrieving revision 1.499
diff -u -p -r1.499 tc-mips.c
--- gas/config/tc-mips.c	29 Nov 2011 20:28:54 -0000	1.499
+++ gas/config/tc-mips.c	8 Dec 2011 01:51:55 -0000
@@ -498,7 +498,7 @@ static int mips_32bitmode = 0;
 #define CPU_HAS_ROR(CPU)	CPU_HAS_DROR (CPU)
 
 /* True if CPU is in the Octeon family */
-#define CPU_IS_OCTEON(CPU) ((CPU) == CPU_OCTEON || (CPU) == CPU_OCTEONP)
+#define CPU_IS_OCTEON(CPU) ((CPU) == CPU_OCTEON || (CPU) == CPU_OCTEONP || (CPU) == CPU_OCTEON2)
 
 /* True if CPU has seq/sne and seqi/snei instructions.  */
 #define CPU_HAS_SEQ(CPU)	(CPU_IS_OCTEON (CPU))
@@ -19075,6 +19075,7 @@ static const struct mips_cpu_info mips_c
   /* Cavium Networks Octeon CPU core */
   { "octeon",	      0,      ISA_MIPS64R2,   CPU_OCTEON },
   { "octeon+",	      0,      ISA_MIPS64R2,   CPU_OCTEONP },
+  { "octeon2",	      0,      ISA_MIPS64R2,   CPU_OCTEON2 },
 
   /* RMI Xlr */
   { "xlr",	      0,      ISA_MIPS64,     CPU_XLR },
Index: gas/doc/c-mips.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-mips.texi,v
retrieving revision 1.63
diff -u -p -r1.63 c-mips.texi
--- gas/doc/c-mips.texi	29 Nov 2011 20:28:54 -0000	1.63
+++ gas/doc/c-mips.texi	8 Dec 2011 01:51:55 -0000
@@ -324,6 +324,7 @@ loongson2f,
 loongson3a,
 octeon,
 octeon+,
+octeon2,
 xlr
 @end quotation
 
Index: gas/testsuite/gas/mips/mips.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/mips/mips.exp,v
retrieving revision 1.196
diff -u -p -r1.196 mips.exp
--- gas/testsuite/gas/mips/mips.exp	3 Dec 2011 10:29:53 -0000	1.196
+++ gas/testsuite/gas/mips/mips.exp	8 Dec 2011 01:51:55 -0000
@@ -438,6 +438,9 @@ mips_arch_create octeon 64	mips64r2 {} \
 mips_arch_create octeonp 64	octeon {} \
 			{ -march=octeon+ -mtune=octeon+ } { -mmips:octeon+ } \
 			{ }
+mips_arch_create octeon2 64	octeonp {} \
+			{ -march=octeon2 -mtune=octeon2 } { -mmips:octeon2 } \
+			{ }
 mips_arch_create xlr 	64	mips64	{} \
 			{ -march=xlr -mtune=xlr } { -mmips:xlr }
 
@@ -1016,6 +1019,7 @@ if { [istarget mips*-*-vxworks*] } {
     run_dump_test_arches "octeon-saa-saad" [mips_arch_list_matching octeonp]
     run_list_test_arches "octeon-ill"	[mips_arch_list_matching octeon]
     run_dump_test_arches "octeon-pref"	[mips_arch_list_matching octeon]
+    run_dump_test_arches "octeon2"	[mips_arch_list_matching octeon2]
 
     run_dump_test "smartmips"
     run_dump_test "mips32-dsp"
Index: gas/testsuite/gas/mips/octeon2.d
===================================================================
RCS file: gas/testsuite/gas/mips/octeon2.d
diff -N gas/testsuite/gas/mips/octeon2.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/mips/octeon2.d	8 Dec 2011 01:51:56 -0000
@@ -0,0 +1,38 @@
+#objdump: -M reg-names=numeric -dr
+#name: MIPS octeon2 instructions
+
+.*:     file format .*
+
+Disassembly of section .text:
+
+[0-9a-f]+ <foo>:
+.*:	70700412 	qmac.00	\$3,\$16
+.*:	71aa0452 	qmac.01	\$13,\$10
+.*:	704d0492 	qmac.02	\$2,\$13
+.*:	721704d2 	qmac.03	\$16,\$23
+.*:	704a0012 	qmacs.00	\$2,\$10
+.*:	73ca0052 	qmacs.01	\$30,\$10
+.*:	718d0092 	qmacs.02	\$12,\$13
+.*:	70c600d2 	qmacs.03	\$6,\$6
+.*:	7c697d8a 	lbx	\$15,\$9\(\$3\)
+.*:	7dfc298a 	lbux	\$5,\$28\(\$15\)
+.*:	7cd9890a 	lhx	\$17,\$25\(\$6\)
+.*:	7c15fd0a 	lhux	\$31,\$21\(\$0\)
+.*:	7cbda80a 	lwx	\$21,\$29\(\$5\)
+.*:	7cc5940a 	lwux	\$18,\$5\(\$6\)
+.*:	7efdb20a 	ldx	\$22,\$29\(\$23\)
+.*:	722d149f 	laa	\$2,\(\$17\),\$13
+.*:	71d03cdf 	laad	\$7,\(\$14\),\$16
+.*:	7105d59f 	law	\$26,\(\$8\),\$5
+.*:	71f6a5df 	lawd	\$20,\(\$15\),\$22
+.*:	7060389f 	lai	\$7,\(\$3\)
+.*:	7160f8df 	laid	\$31,\(\$11\)
+.*:	73e0c99f 	lad	\$25,\(\$31\)
+.*:	7080f1df 	ladd	\$30,\(\$4\)
+.*:	71006a9f 	las	\$13,\(\$8\)
+.*:	73c0dadf 	lasd	\$27,\(\$30\)
+.*	73806b9f 	lac	\$13,\(\$28\)
+.*	71003bdf 	lacd	\$7,\(\$8\)
+.*	7260071f 	zcb	\(\$19\)
+.*	7220075f 	zcbt	\(\$17\)
+#pass
Index: gas/testsuite/gas/mips/octeon2.s
===================================================================
RCS file: gas/testsuite/gas/mips/octeon2.s
diff -N gas/testsuite/gas/mips/octeon2.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gas/testsuite/gas/mips/octeon2.s	8 Dec 2011 01:51:56 -0000
@@ -0,0 +1,38 @@
+	.text
+	.set noreorder
+	.set noat
+
+foo:
+	qmac.00	$3,$16
+	qmac.01	$13,$10
+	qmac.02 $2,$13
+	qmac.03	$16,$23
+
+	qmacs.00 $2,$10
+	qmacs.01 $30,$10
+	qmacs.02 $12,$13
+	qmacs.03 $6,$6
+
+	lbx	$15,$9($3)
+	lbux	$5,$28($15)
+	lhx	$17,$25($6)
+	lhux	$31,$21
+	lwx	$21,$29($5)
+	lwux	$18,$5($6)
+	ldx	$22,$29($23)
+
+	laa	$2,($17),$13
+	laad	$7,($14),$16
+	law	$26,($8),$5
+	lawd	$20,($15),$22
+	lai	$7,($3)
+	laid	$31,($11)
+	lad	$25,($31)
+	ladd	$30,($4)
+	las	$13,($8)
+	lasd	$27,($30)
+	lac	$13,($28)
+	lacd	$7,($8)
+
+	zcb	($19)
+	zcbt	($17)
Index: include/opcode/mips.h
===================================================================
RCS file: /cvs/src/src/include/opcode/mips.h,v
retrieving revision 1.81
diff -u -p -r1.81 mips.h
--- include/opcode/mips.h	29 Nov 2011 20:28:55 -0000	1.81
+++ include/opcode/mips.h	8 Dec 2011 01:51:56 -0000
@@ -713,11 +713,12 @@ static const unsigned int mips_isa_table
   { 0x0001, 0x0003, 0x0607, 0x1e0f, 0x3e1f, 0x0a23, 0x3e63, 0x3ebf, 0x3fff };
 
 /* Masks used for Chip specific instructions.  */
-#define INSN_CHIP_MASK		  0xc3ff0e20
+#define INSN_CHIP_MASK		  0xc3ff0f20
 
 /* Cavium Networks Octeon instructions.  */
 #define INSN_OCTEON		  0x00000800
 #define INSN_OCTEONP		  0x00000200
+#define INSN_OCTEON2		  0x00000100
 
 /* Masks used for MIPS-defined ASEs.  */
 #define INSN_ASE_MASK		  0x3c00f010
@@ -825,6 +826,7 @@ static const unsigned int mips_isa_table
 #define CPU_LOONGSON_3A 3003
 #define CPU_OCTEON	6501
 #define CPU_OCTEONP	6601
+#define CPU_OCTEON2	6502
 #define CPU_XLR     	887682   	/* decimal 'XLR'   */
 
 /* Test for membership in an ISA including chip specific ISAs.  INSN
@@ -863,6 +865,8 @@ static const unsigned int mips_isa_table
 	 && ((insn)->membership & INSN_OCTEON) != 0)			\
      || (cpu == CPU_OCTEONP						\
 	 && ((insn)->membership & INSN_OCTEONP) != 0)			\
+     || (cpu == CPU_OCTEON2						\
+	 && ((insn)->membership & INSN_OCTEON2) != 0)			\
      || (cpu == CPU_XLR && ((insn)->membership & INSN_XLR) != 0)        \
      || 0)	/* Please keep this term for easier source merging.  */
 
Index: opcodes/mips-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/mips-dis.c,v
retrieving revision 1.88
diff -u -p -r1.88 mips-dis.c
--- opcodes/mips-dis.c	29 Nov 2011 20:28:55 -0000	1.88
+++ opcodes/mips-dis.c	8 Dec 2011 01:51:56 -0000
@@ -609,6 +609,10 @@ const struct mips_arch_choice mips_arch_
     ISA_MIPS64R2 | INSN_OCTEON | INSN_OCTEONP, mips_cp0_names_numeric,
     NULL, 0, mips_hwr_names_numeric },
 
+  { "octeon2",   1, bfd_mach_mips_octeon2, CPU_OCTEON2,
+    ISA_MIPS64R2 | INSN_OCTEON | INSN_OCTEON2, mips_cp0_names_numeric,
+    NULL, 0, mips_hwr_names_numeric },
+
   { "xlr", 1, bfd_mach_mips_xlr, CPU_XLR,
     ISA_MIPS64 | INSN_XLR,
     mips_cp0_names_xlr,
Index: opcodes/mips-opc.c
===================================================================
RCS file: /cvs/src/src/opcodes/mips-opc.c,v
retrieving revision 1.89
diff -u -p -r1.89 mips-opc.c
--- opcodes/mips-opc.c	29 Nov 2011 20:28:55 -0000	1.89
+++ opcodes/mips-opc.c	8 Dec 2011 01:51:56 -0000
@@ -121,8 +121,9 @@
 #define N5	(INSN_5400 | INSN_5500)
 #define N54	INSN_5400
 #define N55	INSN_5500
-#define IOCT	(INSN_OCTEON | INSN_OCTEONP)
-#define IOCTP	INSN_OCTEONP
+#define IOCT	(INSN_OCTEON | INSN_OCTEONP | INSN_OCTEON2)
+#define IOCTP	(INSN_OCTEONP | INSN_OCTEON2)
+#define IOCT2	INSN_OCTEON2
 #define XLR     INSN_XLR
 
 #define G1      (T3             \
@@ -818,10 +819,29 @@ const struct mips_opcode mips_builtin_op
 {"jal",     "a",	0x0c000000, 0xfc000000,	UBD|WR_31,		0,		I1	},
 {"jalx",    "a",	0x74000000, 0xfc000000, UBD|WR_31,		0,		I1	},
 {"la",      "t,A(b)",	0,    (int) M_LA_AB,	INSN_MACRO,		0,		I1	},
+{"laa",     "d,(b),t",	0x7000049f, 0xfc0007ff, LDD|SM|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"laad",    "d,(b),t",	0x700004df, 0xfc0007ff, LDD|SM|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"lac",     "d,(b)",	0x7000039f, 0xfc1f07ff, LDD|SM|WR_d|RD_b,	0,		IOCT2	},
+{"lacd",    "d,(b)",	0x700003df, 0xfc1f07ff, LDD|SM|WR_d|RD_b,	0,		IOCT2	},
+{"lad",     "d,(b)",	0x7000019f, 0xfc1f07ff, LDD|SM|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"ladd",    "d,(b)",	0x700001df, 0xfc1f07ff, LDD|SM|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"lai",     "d,(b)",	0x7000009f, 0xfc1f07ff, LDD|SM|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"laid",    "d,(b)",	0x700000df, 0xfc1f07ff, LDD|SM|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"las",     "d,(b)",	0x7000029f, 0xfc1f07ff, LDD|SM|WR_d|RD_b,	0,		IOCT2	},
+{"lasd",    "d,(b)",	0x700002df, 0xfc1f07ff, LDD|SM|WR_d|RD_b,	0,		IOCT2	},
+{"law",	    "d,(b),t",	0x7000059f, 0xfc0007ff, LDD|SM|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"lawd",    "d,(b),t",	0x700005df, 0xfc0007ff, LDD|SM|WR_d|RD_t|RD_b,	0,		IOCT2	},
 {"lb",      "t,o(b)",	0x80000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
 {"lb",      "t,A(b)",	0,    (int) M_LB_AB,	INSN_MACRO,		0,		I1	},
 {"lbu",     "t,o(b)",	0x90000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
 {"lbu",     "t,A(b)",	0,    (int) M_LBU_AB,	INSN_MACRO,		0,		I1	},
+{"lbx",     "d,t(b)",	0x7c00058a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"lbux",    "d,t(b)",	0x7c00018a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32|IOCT2},
+{"ldx",     "d,t(b)",	0x7c00020a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D64|IOCT2},
+{"lhx",     "d,t(b)",	0x7c00010a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32|IOCT2},
+{"lhux",    "d,t(b)",	0x7c00050a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		IOCT2	},
+{"lwx",     "d,t(b)",	0x7c00000a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32|IOCT2},
+{"lwux",    "d,t(b)",	0x7c00040a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32|IOCT2},
 {"lca",     "t,A(b)",	0,    (int) M_LCA_AB,	INSN_MACRO,		0,		I1	},
 /* The macro has to be first to handle o32 correctly.  */
 {"ld",      "t,o(b)",	0,    (int) M_LD_OB,	INSN_MACRO,		0,		I1	},
@@ -1187,6 +1207,14 @@ const struct mips_opcode mips_builtin_op
 {"pul.ps",  "D,V,T",	0x46c0002e, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5_33	},
 {"puu.ps",  "D,V,T",	0x46c0002f, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5_33	},
 {"pperm",   "s,t",	0x70000481, 0xfc00ffff,	MOD_HILO|RD_s|RD_t,	0,		SMT	},
+{"qmac.00", "s,t",	0x70000412, 0xfc00ffff, MOD_HILO|RD_s|RD_t,	0,		IOCT2	},
+{"qmac.01", "s,t",	0x70000452, 0xfc00ffff, MOD_HILO|RD_s|RD_t,	0,		IOCT2	},
+{"qmac.02", "s,t",	0x70000492, 0xfc00ffff, MOD_HILO|RD_s|RD_t,	0,		IOCT2	},
+{"qmac.03", "s,t",	0x700004d2, 0xfc00ffff, MOD_HILO|RD_s|RD_t,	0,		IOCT2	},
+{"qmacs.00", "s,t",	0x70000012, 0xfc00ffff, MOD_HILO|RD_s|RD_t,	0,		IOCT2	},
+{"qmacs.01", "s,t",	0x70000052, 0xfc00ffff, MOD_HILO|RD_s|RD_t,	0,		IOCT2	},
+{"qmacs.02", "s,t",	0x70000092, 0xfc00ffff, MOD_HILO|RD_s|RD_t,	0,		IOCT2	},
+{"qmacs.03", "s,t",	0x700000d2, 0xfc00ffff, MOD_HILO|RD_s|RD_t,	0,		IOCT2	},
 {"rach.ob", "X",	0x7a00003f, 0xfffff83f,	WR_D|FP_D,		RD_MACC,	MX|SB1	},
 {"rach.ob", "D",	0x4a00003f, 0xfffff83f,	WR_D,			0,		N54	},
 {"rach.qh", "X",	0x7a20003f, 0xfffff83f,	WR_D|FP_D,		RD_MACC,	MX	},
@@ -1517,6 +1545,8 @@ const struct mips_opcode mips_builtin_op
 {"xori",    "t,r,i",	0x38000000, 0xfc000000,	WR_t|RD_s,		0,		I1	},
 {"yield",   "s",	0x7c000009, 0xfc1fffff, NODS|RD_s,		0,		MT32	},
 {"yield",   "d,s",	0x7c000009, 0xfc1f07ff, NODS|WR_d|RD_s,		0,		MT32	},
+{"zcb",     "(b)",	0x7000071f, 0xfc1fffff, SM|RD_b,		0,		IOCT2   },
+{"zcbt",    "(b)",	0x7000075f, 0xfc1fffff, SM|RD_b,		0,		IOCT2   },
 
 /* User Defined Instruction.  */
 {"udi0",     "s,t,d,+1",0x70000010, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
@@ -1729,10 +1759,7 @@ const struct mips_opcode mips_builtin_op
 {"extrv.w", "t,7,s",	0x7c000078, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D32	},
 {"extr.w",  "t,7,6",	0x7c000038, 0xfc00e7ff, WR_t|RD_a,		0,		D32	},
 {"insv",    "t,s",	0x7c00000c, 0xfc00ffff, WR_t|RD_s,		0,		D32	},
-{"lbux",    "d,t(b)",	0x7c00018a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32	},
-{"ldx",     "d,t(b)",	0x7c00020a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D64	},
-{"lhx",     "d,t(b)",	0x7c00010a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32	},
-{"lwx",     "d,t(b)",	0x7c00000a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32	},
+/* lbux, ldx, lhx and lwx are the int basic instruction section.  */
 {"maq_sa.w.phl", "7,s,t", 0x7c000430, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
 {"maq_sa.w.phr", "7,s,t", 0x7c0004b0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
 {"maq_sa.w.qhll", "7,s,t", 0x7c000434, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},


More information about the Binutils mailing list