This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Patch to add rm7000/rm9000 support
- From: Richard Sandiford <rsandifo at redhat dot com>
- To: binutils at sources dot redhat dot com
- Date: 15 Jul 2003 08:53:45 +0100
- Subject: Patch to add rm7000/rm9000 support
This patch adds support for the rm7000 and rm9000. Approved by Eric
(many moons ago), finally committed.
Richard
include/opcode/
* mips.h (CPU_RM7000): New macro.
(OPCODE_IS_MEMBER): Match CPU_RM7000 against 4650 insns.
bfd/
* archures.c (bfd_mach_mips7000): New.
* bfd-in2.h: Regenerated.
* cpu-mips.c (arch_info_struct): Add an entry for mips:7000.
* elfxx-mips.c (mips_set_isa_flags): Handle bfd_mach_mips7000.
(mips_mach_extensions): Add an entry for it.
opcodes/
* mips-dis.c (mips_arch_choices): Add rm7000 and rm9000 entries.
gas/
* config/tc-mips.c (hilo_interlocks): True for CPU_RM7000.
(mips_cpu_info_table): Add rm7000 and rm9000 entries.
gas/testsuite/
* gas/mips/rm7000.[sd]: New test.
* gas/mips/mips.exp: Run it.
Index: include/opcode/mips.h
===================================================================
RCS file: /cvs/src/src/include/opcode/mips.h,v
retrieving revision 1.35
diff -u -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.35 mips.h
--- include/opcode/mips.h 9 Apr 2003 00:12:24 -0000 1.35
+++ include/opcode/mips.h 15 Jul 2003 07:42:38 -0000
@@ -451,6 +451,7 @@ #define CPU_R5000 5000
#define CPU_VR5400 5400
#define CPU_VR5500 5500
#define CPU_R6000 6000
+#define CPU_RM7000 7000
#define CPU_R8000 8000
#define CPU_R10000 10000
#define CPU_R12000 12000
@@ -469,6 +470,7 @@ #define CPU_SB1 12310201
#define OPCODE_IS_MEMBER(insn, isa, cpu) \
(((insn)->membership & isa) != 0 \
|| (cpu == CPU_R4650 && ((insn)->membership & INSN_4650) != 0) \
+ || (cpu == CPU_RM7000 && ((insn)->membership & INSN_4650) != 0) \
|| (cpu == CPU_R4010 && ((insn)->membership & INSN_4010) != 0) \
|| (cpu == CPU_VR4100 && ((insn)->membership & INSN_4100) != 0) \
|| (cpu == CPU_R3900 && ((insn)->membership & INSN_3900) != 0) \
Index: bfd/archures.c
===================================================================
RCS file: /cvs/src/src/bfd/archures.c,v
retrieving revision 1.78
diff -u -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.78 archures.c
--- bfd/archures.c 10 Jul 2003 02:53:10 -0000 1.78
+++ bfd/archures.c 15 Jul 2003 07:42:38 -0000
@@ -138,6 +138,7 @@ DESCRIPTION
.#define bfd_mach_mips5400 5400
.#define bfd_mach_mips5500 5500
.#define bfd_mach_mips6000 6000
+.#define bfd_mach_mips7000 7000
.#define bfd_mach_mips8000 8000
.#define bfd_mach_mips10000 10000
.#define bfd_mach_mips12000 12000
Index: bfd/bfd-in2.h
===================================================================
RCS file: /cvs/src/src/bfd/bfd-in2.h,v
retrieving revision 1.229
diff -u -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.229 bfd-in2.h
--- bfd/bfd-in2.h 11 Jul 2003 14:59:40 -0000 1.229
+++ bfd/bfd-in2.h 15 Jul 2003 07:42:39 -0000
@@ -1568,6 +1568,7 @@ #define bfd_mach_mips5000 5
#define bfd_mach_mips5400 5400
#define bfd_mach_mips5500 5500
#define bfd_mach_mips6000 6000
+#define bfd_mach_mips7000 7000
#define bfd_mach_mips8000 8000
#define bfd_mach_mips10000 10000
#define bfd_mach_mips12000 12000
Index: bfd/cpu-mips.c
===================================================================
RCS file: /cvs/src/src/bfd/cpu-mips.c,v
retrieving revision 1.17
diff -u -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.17 cpu-mips.c
--- bfd/cpu-mips.c 31 Dec 2002 07:29:25 -0000 1.17
+++ bfd/cpu-mips.c 15 Jul 2003 07:42:39 -0000
@@ -76,6 +76,7 @@ enum
I_mips5400,
I_mips5500,
I_mips6000,
+ I_mips7000,
I_mips8000,
I_mips10000,
I_mips12000,
@@ -106,6 +107,7 @@ static const bfd_arch_info_type arch_inf
N (64, 64, bfd_mach_mips5400, "mips:5400", FALSE, NN(I_mips5400)),
N (64, 64, bfd_mach_mips5500, "mips:5500", FALSE, NN(I_mips5500)),
N (32, 32, bfd_mach_mips6000, "mips:6000", FALSE, NN(I_mips6000)),
+ N (64, 64, bfd_mach_mips7000, "mips:7000", FALSE, NN(I_mips7000)),
N (64, 64, bfd_mach_mips8000, "mips:8000", FALSE, NN(I_mips8000)),
N (64, 64, bfd_mach_mips10000,"mips:10000", FALSE, NN(I_mips10000)),
N (64, 64, bfd_mach_mips12000,"mips:12000", FALSE, NN(I_mips12000)),
Index: bfd/elfxx-mips.c
===================================================================
RCS file: /cvs/src/src/bfd/elfxx-mips.c,v
retrieving revision 1.69
diff -u -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.69 elfxx-mips.c
--- bfd/elfxx-mips.c 9 Jul 2003 11:55:49 -0000 1.69
+++ bfd/elfxx-mips.c 15 Jul 2003 07:42:41 -0000
@@ -7163,6 +7163,7 @@ mips_set_isa_flags (abfd)
break;
case bfd_mach_mips5000:
+ case bfd_mach_mips7000:
case bfd_mach_mips8000:
case bfd_mach_mips10000:
case bfd_mach_mips12000:
@@ -8945,6 +8946,7 @@ static const struct mips_mach_extension
{ bfd_mach_mips5, bfd_mach_mips8000 },
{ bfd_mach_mips10000, bfd_mach_mips8000 },
{ bfd_mach_mips5000, bfd_mach_mips8000 },
+ { bfd_mach_mips7000, bfd_mach_mips8000 },
/* VR4100 extensions. */
{ bfd_mach_mips4120, bfd_mach_mips4100 },
Index: opcodes/mips-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/mips-dis.c,v
retrieving revision 1.44
diff -u -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.44 mips-dis.c
--- opcodes/mips-dis.c 9 Jul 2003 22:53:52 -0000 1.44
+++ opcodes/mips-dis.c 15 Jul 2003 07:42:42 -0000
@@ -347,6 +347,10 @@ const struct mips_arch_choice mips_arch_
mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
{ "r6000", 1, bfd_mach_mips6000, CPU_R6000, ISA_MIPS2,
mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
+ { "rm7000", 1, bfd_mach_mips7000, CPU_RM7000, ISA_MIPS4,
+ mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
+ { "rm9000", 1, bfd_mach_mips7000, CPU_RM7000, ISA_MIPS4,
+ mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
{ "r8000", 1, bfd_mach_mips8000, CPU_R8000, ISA_MIPS4,
mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
{ "r10000", 1, bfd_mach_mips10000, CPU_R10000, ISA_MIPS4,
Index: gas/config/tc-mips.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-mips.c,v
retrieving revision 1.225
diff -u -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.225 tc-mips.c
--- gas/config/tc-mips.c 9 Jul 2003 01:27:30 -0000 1.225
+++ gas/config/tc-mips.c 15 Jul 2003 07:42:45 -0000
@@ -336,6 +336,7 @@ #define CPU_HAS_ROR(CPU) CPU_HAS_DROR (C
#define hilo_interlocks (mips_opts.arch == CPU_R4010 \
|| mips_opts.arch == CPU_VR5500 \
+ || mips_opts.arch == CPU_RM7000 \
|| mips_opts.arch == CPU_SB1 \
)
@@ -14289,7 +14290,8 @@ static const struct mips_cpu_info mips_c
{ "rm5231", 0, ISA_MIPS4, CPU_R5000 },
{ "rm5261", 0, ISA_MIPS4, CPU_R5000 },
{ "rm5721", 0, ISA_MIPS4, CPU_R5000 },
- { "r7000", 0, ISA_MIPS4, CPU_R5000 },
+ { "rm7000", 0, ISA_MIPS4, CPU_RM7000 },
+ { "rm9000", 0, ISA_MIPS4, CPU_RM7000 },
/* MIPS 32 */
{ "4kc", 0, ISA_MIPS32, CPU_MIPS32 },
Index: gas/testsuite/gas/mips/mips.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/mips/mips.exp,v
retrieving revision 1.76
diff -u -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.76 mips.exp
--- gas/testsuite/gas/mips/mips.exp 9 Jul 2003 01:27:30 -0000 1.76
+++ gas/testsuite/gas/mips/mips.exp 15 Jul 2003 07:42:45 -0000
@@ -552,6 +552,7 @@ if { [istarget mips*-*-*] } then {
run_dump_test "vr4122"
run_dump_test "vr5400"
run_dump_test "vr5500"
+ run_dump_test "rm7000"
run_dump_test "perfcount"
run_dump_test "lineno"
run_dump_test "sync"
--- /dev/null Thu Apr 11 15:25:15 2002
+++ gas/testsuite/gas/mips/rm7000.d Tue Jul 15 08:25:52 2003
@@ -0,0 +1,14 @@
+#objdump: -dr -M gpr-names=numeric -m mips:7000
+#name: MIPS RM7000
+#as: -march=rm7000
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+0+000 <\.text>:
+ * 0: 70a62002 * mul \$4,\$5,\$6
+ * 4: 70850000 * mad \$4,\$5
+ * 8: 70a60001 * madu \$5,\$6
+ * c: 00003812 * mflo \$7
+ *10: 01000011 * mthi \$8
--- /dev/null Thu Apr 11 15:25:15 2002
+++ gas/testsuite/gas/mips/rm7000.s Tue Jul 15 08:24:53 2003
@@ -0,0 +1,5 @@
+ mul $4,$5,$6
+ mad $4,$5
+ madu $5,$6
+ mflo $7
+ mthi $8 # No delay needed