aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2000-12-01 21:35:38 +0000
committerNick Clifton <nickc@redhat.com>2000-12-01 21:35:38 +0000
commite7af610e147b2f6f35e2f7dcec4c707027a53757 (patch)
tree981ed717ac072d086d1100528456686af62f1bf2
parentb23da31b1cf7d0b7d2ae1d1c4378f8ff77feaf43 (diff)
downloadgdb-e7af610e147b2f6f35e2f7dcec4c707027a53757.zip
gdb-e7af610e147b2f6f35e2f7dcec4c707027a53757.tar.gz
gdb-e7af610e147b2f6f35e2f7dcec4c707027a53757.tar.bz2
Add MIPS32 as a seperate MIPS architecture
-rw-r--r--bfd/ChangeLog25
-rw-r--r--bfd/aoutx.h4
-rw-r--r--bfd/archures.c3
-rw-r--r--bfd/bfd-in2.h3
-rw-r--r--bfd/cpu-mips.c45
-rw-r--r--bfd/elf32-mips.c31
-rw-r--r--bfd/po/POTFILES.in1
-rw-r--r--bfd/po/bfd.pot139
-rw-r--r--binutils/ChangeLog6
-rw-r--r--binutils/po/binutils.pot662
-rw-r--r--binutils/readelf.c6
-rwxr-xr-xconfig.sub14
-rw-r--r--gas/ChangeLog39
-rw-r--r--gas/config/tc-mips.c673
-rw-r--r--gas/doc/as.texinfo15
-rw-r--r--gas/doc/c-mips.texi18
-rw-r--r--gas/po/gas.pot285
-rw-r--r--gas/testsuite/gas/mips/mips.exp1
-rw-r--r--gas/testsuite/gas/mips/mips32.d49
-rw-r--r--gas/testsuite/gas/mips/mips32.s63
-rw-r--r--include/elf/ChangeLog6
-rw-r--r--include/elf/mips.h7
-rw-r--r--include/opcode/ChangeLog17
-rw-r--r--include/opcode/mips.h501
-rw-r--r--opcodes/ChangeLog8
-rw-r--r--opcodes/mips-dis.c48
-rw-r--r--opcodes/mips-opc.c67
-rw-r--r--opcodes/po/opcodes.pot27
28 files changed, 1475 insertions, 1288 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 059827a..4c5b4cf 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,28 @@
+2000-12-01 Chris Demetriou <cgd@sibyte.com>
+
+ * aoutx.h (NAME(aout,machine_type)): Add bfd_mach_mips32 and
+ bfd_mach_mips32_4k. Update FIXME comment.
+ * archures.c (bfd_mach_mips32): New constant.
+ (bfd_mach_mips4K, bfd_mach_mips32_4k) Rename the former to
+ the latter, renumber it.
+ * bfd-in2.h (bfd_mach_mips32): New constant.
+ (bfd_mach_mips4K, bfd_mach_mips32_4k) Rename the former to
+ the latter, renumber it.
+ * cpu-mips.c (I_mips32): New constant.
+ (I_mips4K, I_mips32_4k): Rename the former to the latter.
+ (arch_info_struct): Add bfd_mach_mips32 entry, replace
+ bfd_mach_mips4K entry with bfd_mach_mips32_4k entry.
+ * elf32-mips.c (elf_mips_isa): Add E_MIPS_ARCH_32 case.
+ (elf_mips_mach): Likewise. Also, replace E_MIPS_MACH_MIPS32
+ with E_MIPS_MACH_MIPS32_4K.
+ (_bfd_mips_elf_final_write_processing): Replace
+ bfd_mach_mips4K with bfd_mach_mips32_4k case, add
+ bfd_mach_mips32 case.
+ (_bfd_mips_elf_merge_private_bfd_data): Generalize ISA mixing
+ comparison with support for MIPS32.
+ (_bfd_mips_elf_print_private_bfd_data): Print ISA name for
+ MIPS32.
+
2000-12-01 Joel Sherrill <joel@OARcorp.com>
* config.bfd (arm-*-rtems*, a29k-*rtems*): New targets.
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index a050b8b..388e8d7 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -776,7 +776,9 @@ NAME(aout,machine_type) (arch, machine, unknown)
case bfd_mach_mips8000:
case bfd_mach_mips10000:
case bfd_mach_mips16:
- /* FIXME: These should be MIPS3 or MIPS4. */
+ case bfd_mach_mips32:
+ case bfd_mach_mips32_4k:
+ /* FIXME: These should be MIPS3, MIPS4, MIPS16, MIPS32, etc. */
arch_flags = M_MIPS2;
break;
default:
diff --git a/bfd/archures.c b/bfd/archures.c
index 27a41b3..5bb4ff7 100644
--- a/bfd/archures.c
+++ b/bfd/archures.c
@@ -130,8 +130,9 @@ DESCRIPTION
.#define bfd_mach_mips6000 6000
.#define bfd_mach_mips8000 8000
.#define bfd_mach_mips10000 10000
-.#define bfd_mach_mips4K 32
.#define bfd_mach_mips16 16
+.#define bfd_mach_mips32 32
+.#define bfd_mach_mips32_4k 3204113 {* 32, 04, octal 'K' *}
. bfd_arch_i386, {* Intel 386 *}
.#define bfd_mach_i386_i386 0
.#define bfd_mach_i386_i8086 1
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 8120e24..0280f12 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -1398,8 +1398,9 @@ enum bfd_architecture
#define bfd_mach_mips6000 6000
#define bfd_mach_mips8000 8000
#define bfd_mach_mips10000 10000
-#define bfd_mach_mips4K 32
#define bfd_mach_mips16 16
+#define bfd_mach_mips32 32
+#define bfd_mach_mips32_4k 3204113 /* 32, 04, octal 'K' */
bfd_arch_i386, /* Intel 386 */
#define bfd_mach_i386_i386 0
#define bfd_mach_i386_i8086 1
diff --git a/bfd/cpu-mips.c b/bfd/cpu-mips.c
index e15af2e..0ac23cb 100644
--- a/bfd/cpu-mips.c
+++ b/bfd/cpu-mips.c
@@ -38,26 +38,28 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
NEXT, \
}
-enum {
-I_mips3000,
-I_mips3900,
-I_mips4000,
-I_mips4010,
-I_mips4100,
-I_mips4111,
-I_mips4300,
-I_mips4400,
-I_mips4600,
-I_mips4650,
-I_mips5000,
-I_mips6000,
-I_mips8000,
-I_mips10000,
-I_mips4K,
-I_mips16
+enum
+{
+ I_mips3000,
+ I_mips3900,
+ I_mips4000,
+ I_mips4010,
+ I_mips4100,
+ I_mips4111,
+ I_mips4300,
+ I_mips4400,
+ I_mips4600,
+ I_mips4650,
+ I_mips5000,
+ I_mips6000,
+ I_mips8000,
+ I_mips10000,
+ I_mips16,
+ I_mips32,
+ I_mips32_4k,
};
-#define NN(index) (&arch_info_struct[(index)+1])
+#define NN(index) (&arch_info_struct[(index) + 1])
static const bfd_arch_info_type arch_info_struct[] =
{
@@ -74,9 +76,10 @@ static const bfd_arch_info_type arch_info_struct[] =
N (64, 64, bfd_mach_mips5000, "mips:5000", false, NN(I_mips5000)),
N (32, 32, bfd_mach_mips6000, "mips:6000", false, NN(I_mips6000)),
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 (32, 32, bfd_mach_mips4K, "mips:4K", false, NN(I_mips4K)),
- N (64, 64, bfd_mach_mips16, "mips:16", false, 0),
+ N (64, 64, bfd_mach_mips10000,"mips:10000",false, NN(I_mips10000)),
+ N (64, 64, bfd_mach_mips16, "mips:16", false, NN(I_mips16)),
+ N (32, 32, bfd_mach_mips32, "mips:mips32", false, NN(I_mips32)),
+ N (32, 32, bfd_mach_mips32_4k,"mips:mips32-4k", false, 0),
};
/* The default architecture is mips:3000, but with a machine number of
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index b9b99c7..b58eddf 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -1810,6 +1810,8 @@ elf_mips_isa (flags)
return 3;
case E_MIPS_ARCH_4:
return 4;
+ case E_MIPS_ARCH_32:
+ return 32;
}
return 4;
}
@@ -1837,8 +1839,8 @@ elf_mips_mach (flags)
case E_MIPS_MACH_4650:
return bfd_mach_mips4650;
- case E_MIPS_MACH_MIPS32:
- return bfd_mach_mips4K;
+ case E_MIPS_MACH_MIPS32_4K:
+ return bfd_mach_mips32_4k;
default:
switch (flags & EF_MIPS_ARCH)
@@ -1859,6 +1861,10 @@ elf_mips_mach (flags)
case E_MIPS_ARCH_4:
return bfd_mach_mips8000;
break;
+
+ case E_MIPS_ARCH_32:
+ return bfd_mach_mips32;
+ break;
}
}
@@ -2336,8 +2342,12 @@ _bfd_mips_elf_final_write_processing (abfd, linker)
val = E_MIPS_ARCH_4;
break;
- case bfd_mach_mips4K:
- val = E_MIPS_ARCH_2 | E_MIPS_MACH_MIPS32;
+ case bfd_mach_mips32:
+ val = E_MIPS_ARCH_32;
+ break;
+
+ case bfd_mach_mips32_4k:
+ val = E_MIPS_ARCH_32 | E_MIPS_MACH_MIPS32_4K;
break;
}
@@ -2537,13 +2547,12 @@ _bfd_mips_elf_merge_private_bfd_data (ibfd, obfd)
|| new_mach == old_mach
)
{
- /* Don't warn about mixing -mips1 and -mips2 code, or mixing -mips3
- and -mips4 code. They will normally use the same data sizes and
- calling conventions. */
+ /* Don't warn about mixing code using 32-bit ISAs, or mixing code
+ using 64-bit ISAs. They will normally use the same data sizes
+ and calling conventions. */
- if ((new_isa == 1 || new_isa == 2)
- ? (old_isa != 1 && old_isa != 2)
- : (old_isa == 1 || old_isa == 2))
+ if (( (new_isa == 1 || new_isa == 2 || new_isa == 32)
+ ^ (old_isa == 1 || old_isa == 2 || old_isa == 32)) != 0)
{
(*_bfd_error_handler)
(_("%s: ISA mismatch (-mips%d) with previous modules (-mips%d)"),
@@ -2647,6 +2656,8 @@ _bfd_mips_elf_print_private_bfd_data (abfd, ptr)
fprintf (file, _(" [mips3]"));
else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
fprintf (file, _(" [mips4]"));
+ else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
+ fprintf (file, _ (" [mips32]"));
else
fprintf (file, _(" [unknown ISA]"));
diff --git a/bfd/po/POTFILES.in b/bfd/po/POTFILES.in
index 3134225..f75b4ca 100644
--- a/bfd/po/POTFILES.in
+++ b/bfd/po/POTFILES.in
@@ -136,7 +136,6 @@ elf64.c
elf64-gen.c
elf64-hppa.c
elf64-hppa.h
-elf64-ia64.c
elf64-mips.c
elf64-sparc.c
elf64-x86-64.c
diff --git a/bfd/po/bfd.pot b/bfd/po/bfd.pot
index 9f84596..2534d97 100644
--- a/bfd/po/bfd.pot
+++ b/bfd/po/bfd.pot
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-11-30 11:08-0800\n"
+"POT-Creation-Date: 2000-12-01 13:12-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"
@@ -34,22 +34,22 @@ msgstr ""
msgid "%s: Bad relocation record imported: %d"
msgstr ""
-#: aoutx.h:1254 aoutx.h:1668
+#: aoutx.h:1256 aoutx.h:1670
#, c-format
msgid "%s: can not represent section `%s' in a.out object file format"
msgstr ""
-#: aoutx.h:1638
+#: aoutx.h:1640
#, c-format
msgid ""
"%s: can not represent section for symbol `%s' in a.out object file format"
msgstr ""
-#: aoutx.h:1640
+#: aoutx.h:1642
msgid "*unknown*"
msgstr ""
-#: aoutx.h:3679
+#: aoutx.h:3681
#, c-format
msgid "%s: relocateable link from %s to %s not supported"
msgstr ""
@@ -660,7 +660,7 @@ msgstr ""
#. Ignore init flag - it may not be set, despite the flags field
#. containing valid data.
-#: elf32-arm.h:2195 elf32-cris.c:615 elf32-m68k.c:430 elf32-mips.c:2623
+#: elf32-arm.h:2195 elf32-cris.c:615 elf32-m68k.c:430 elf32-mips.c:2632
#, c-format
msgid "private flags = %lx:"
msgstr ""
@@ -803,7 +803,7 @@ msgstr ""
msgid "SDA relocation when _SDA_BASE_ not defined"
msgstr ""
-#: elf32-m32r.c:1000 elf32-ppc.c:2973 elf64-ia64.c:3256
+#: elf32-m32r.c:1000 elf32-ppc.c:2973
#, c-format
msgid "%s: unknown relocation type %d"
msgstr ""
@@ -854,120 +854,124 @@ msgstr ""
msgid "Linking mips16 objects into %s format is not supported"
msgstr ""
-#: elf32-mips.c:2509
+#: elf32-mips.c:2519
#, c-format
msgid "%s: linking PIC files with non-PIC files"
msgstr ""
-#: elf32-mips.c:2519
+#: elf32-mips.c:2529
#, c-format
msgid "%s: linking abicalls files with non-abicalls files"
msgstr ""
-#: elf32-mips.c:2549
+#: elf32-mips.c:2558
#, c-format
msgid "%s: ISA mismatch (-mips%d) with previous modules (-mips%d)"
msgstr ""
-#: elf32-mips.c:2558
+#: elf32-mips.c:2567
#, c-format
msgid "%s: ISA mismatch (%d) with previous modules (%d)"
msgstr ""
-#: elf32-mips.c:2581
+#: elf32-mips.c:2590
#, c-format
msgid "%s: ABI mismatch: linking %s module with previous %s modules"
msgstr ""
-#: elf32-mips.c:2595 elf32-ppc.c:1481 elf64-sparc.c:2974
+#: elf32-mips.c:2604 elf32-ppc.c:1481 elf64-sparc.c:2974
#, c-format
msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
msgstr ""
-#: elf32-mips.c:2626
+#: elf32-mips.c:2635
msgid " [abi=O32]"
msgstr ""
-#: elf32-mips.c:2628
+#: elf32-mips.c:2637
msgid " [abi=O64]"
msgstr ""
-#: elf32-mips.c:2630
+#: elf32-mips.c:2639
msgid " [abi=EABI32]"
msgstr ""
-#: elf32-mips.c:2632
+#: elf32-mips.c:2641
msgid " [abi=EABI64]"
msgstr ""
-#: elf32-mips.c:2634
+#: elf32-mips.c:2643
msgid " [abi unknown]"
msgstr ""
-#: elf32-mips.c:2636
+#: elf32-mips.c:2645
msgid " [abi=N32]"
msgstr ""
-#: elf32-mips.c:2638
+#: elf32-mips.c:2647
msgid " [abi=64]"
msgstr ""
-#: elf32-mips.c:2640
+#: elf32-mips.c:2649
msgid " [no abi set]"
msgstr ""
-#: elf32-mips.c:2643
+#: elf32-mips.c:2652
msgid " [mips1]"
msgstr ""
-#: elf32-mips.c:2645
+#: elf32-mips.c:2654
msgid " [mips2]"
msgstr ""
-#: elf32-mips.c:2647
+#: elf32-mips.c:2656
msgid " [mips3]"
msgstr ""
-#: elf32-mips.c:2649
+#: elf32-mips.c:2658
msgid " [mips4]"
msgstr ""
-#: elf32-mips.c:2651
+#: elf32-mips.c:2660
+msgid " [mips32]"
+msgstr ""
+
+#: elf32-mips.c:2662
msgid " [unknown ISA]"
msgstr ""
-#: elf32-mips.c:2654
+#: elf32-mips.c:2665
msgid " [32bitmode]"
msgstr ""
-#: elf32-mips.c:2656
+#: elf32-mips.c:2667
msgid " [not 32bitmode]"
msgstr ""
-#: elf32-mips.c:4305
+#: elf32-mips.c:4316
msgid "static procedure (no name)"
msgstr ""
-#: elf32-mips.c:4920 elf64-alpha.c:4378
+#: elf32-mips.c:4931 elf64-alpha.c:4378
#, c-format
msgid "%s: illegal section name `%s'"
msgstr ""
-#: elf32-mips.c:5484
+#: elf32-mips.c:5495
msgid "not enough GOT space for local GOT entries"
msgstr ""
-#: elf32-mips.c:6601
+#: elf32-mips.c:6612
#, c-format
msgid "%s: %s+0x%lx: jump to stub routine which is not jal"
msgstr ""
-#: elf32-mips.c:7588
+#: elf32-mips.c:7599
#, c-format
msgid "Malformed reloc detected for section %s"
msgstr ""
-#: elf32-mips.c:7665
+#: elf32-mips.c:7676
#, c-format
msgid "%s: CALL16 reloc at 0x%lx not against global symbol"
msgstr ""
@@ -1141,73 +1145,6 @@ msgstr ""
msgid "%s: .got subsegment exceeds 64K (size %d)"
msgstr ""
-#: elf64-ia64.c:1839
-msgid "@pltoff reloc against local symbol"
-msgstr ""
-
-#: elf64-ia64.c:1886
-msgid "non-zero addend in @fptr reloc"
-msgstr ""
-
-#: elf64-ia64.c:3103
-#, c-format
-msgid "%s: short data segment overflowed (0x%lx >= 0x400000)"
-msgstr ""
-
-#: elf64-ia64.c:3114
-#, c-format
-msgid "%s: __gp does not cover short data segment"
-msgstr ""
-
-#: elf64-ia64.c:3407
-#, c-format
-msgid "%s: linking non-pic code in a shared library"
-msgstr ""
-
-#: elf64-ia64.c:3437
-#, c-format
-msgid "%s: @gprel relocation against dynamic symbol %s"
-msgstr ""
-
-#: elf64-ia64.c:3573
-#, c-format
-msgid "%s: dynamic relocation against speculation fixup"
-msgstr ""
-
-#: elf64-ia64.c:3581
-#, c-format
-msgid "%s: speculation fixup against undefined weak symbol"
-msgstr ""
-
-#: elf64-ia64.c:3738
-msgid "unsupported reloc"
-msgstr ""
-
-#: elf64-ia64.c:4056
-#, c-format
-msgid "%s: linking trap-on-NULL-dereference with non-trapping files"
-msgstr ""
-
-#: elf64-ia64.c:4065
-#, c-format
-msgid "%s: linking big-endian files with little-endian files"
-msgstr ""
-
-#: elf64-ia64.c:4074
-#, c-format
-msgid "%s: linking 64-bit files with 32-bit files"
-msgstr ""
-
-#: elf64-ia64.c:4083
-#, c-format
-msgid "%s: linking constant-gp files with non-constant-gp files"
-msgstr ""
-
-#: elf64-ia64.c:4093
-#, c-format
-msgid "%s: linking auto-pic files with non-auto-pic files"
-msgstr ""
-
#: elf64-sparc.c:1250
#, c-format
msgid "%s: check_relocs: unhandled reloc type %d"
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 8ec5ee3..c12ee4c 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2000-12-01 Chris Demetriou <cgd@sibyte.com>
+
+ * readelf.c (get_machine_flags): Recognize MIPS32 ISA in
+ EF_MIPS_ARCH. Replace use of E_MIPS_MACH_MIPS32 with
+ E_MIPS_MACH_MIPS32_4K and adjust printed CPU name similarly.
+
2000-11-30 Richard Earnshaw <rearnsha@arm.com>
* readelf.c (frame_display_row): Output 's' for DW_CFA_same_value.
diff --git a/binutils/po/binutils.pot b/binutils/po/binutils.pot
index fcf0b18..9664d25 100644
--- a/binutils/po/binutils.pot
+++ b/binutils/po/binutils.pot
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-11-02 17:45-0800\n"
+"POT-Creation-Date: 2000-12-01 13:19-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"
@@ -23,7 +23,7 @@ msgid ""
msgstr ""
#: addr2line.c:83 ar.c:288 nlmconv.c:1119 objcopy.c:373 objcopy.c:405
-#: readelf.c:1847 size.c:91 strings.c:530 windres.c:737
+#: readelf.c:1862 size.c:91 strings.c:530 windres.c:737
#, c-format
msgid "Report bugs to %s\n"
msgstr ""
@@ -1996,955 +1996,984 @@ msgstr ""
msgid "Last stabs entries before error:\n"
msgstr ""
-#: readelf.c:301 readelf.c:327
+#: readelf.c:259
+#, c-format
+msgid "Unable to seek to start of %s at %x\n"
+msgstr ""
+
+#: readelf.c:267
+#, c-format
+msgid "Out of memory allocating %d bytes for %s\n"
+msgstr ""
+
+#: readelf.c:273
+#, c-format
+msgid "Unable to read in %d bytes of %s\n"
+msgstr ""
+
+#: readelf.c:283
+#, c-format
+msgid "Unable to seek to %x for %s\n"
+msgstr ""
+
+#: readelf.c:288
+#, c-format
+msgid "Unable to read data at %x for %s\n"
+msgstr ""
+
+#: readelf.c:303 readelf.c:329
#, c-format
msgid "%s: Error: "
msgstr ""
-#: readelf.c:313 readelf.c:342
+#: readelf.c:315 readelf.c:344
#, c-format
msgid "%s: Warning: "
msgstr ""
-#: readelf.c:392 readelf.c:530
+#: readelf.c:394 readelf.c:532
#, c-format
msgid "Unhandled data length: %d\n"
msgstr ""
-#: readelf.c:593
+#: readelf.c:595
msgid "Don't know about relocations on this machine architecture\n"
msgstr ""
-#: readelf.c:633 readelf.c:662 readelf.c:694 readelf.c:722
+#: readelf.c:635 readelf.c:664 readelf.c:696 readelf.c:724
msgid "out of memory parsing relocs"
msgstr ""
-#: readelf.c:740
+#: readelf.c:742
msgid ""
" Offset Info Type Symbol's Value Symbol's Name "
"Addend\n"
msgstr ""
-#: readelf.c:743
+#: readelf.c:745
msgid " Offset Info Type Symbol's Value Symbol's Name\n"
msgstr ""
-#: readelf.c:898 readelf.c:900
+#: readelf.c:900 readelf.c:902
#, c-format
msgid "unrecognised: %-7lx"
msgstr ""
-#: readelf.c:925
+#: readelf.c:927
#, c-format
msgid "<string table index %3ld>"
msgstr ""
-#: readelf.c:1138
+#: readelf.c:1140
#, c-format
msgid "Processor Specific: %lx"
msgstr ""
-#: readelf.c:1157
+#: readelf.c:1159
#, c-format
msgid "Operating System specific: %lx"
msgstr ""
-#: readelf.c:1160 readelf.c:1650
+#: readelf.c:1162 readelf.c:1663
#, c-format
msgid "<unknown>: %lx"
msgstr ""
-#: readelf.c:1174
+#: readelf.c:1176
msgid "NONE (None)"
msgstr ""
-#: readelf.c:1175
+#: readelf.c:1177
msgid "REL (Relocatable file)"
msgstr ""
-#: readelf.c:1176
+#: readelf.c:1178
msgid "EXEC (Executable file)"
msgstr ""
-#: readelf.c:1177
+#: readelf.c:1179
msgid "DYN (Shared object file)"
msgstr ""
-#: readelf.c:1178
+#: readelf.c:1180
msgid "CORE (Core file)"
msgstr ""
-#: readelf.c:1182
+#: readelf.c:1184
#, c-format
msgid "Processor Specific: (%x)"
msgstr ""
-#: readelf.c:1184
+#: readelf.c:1186
#, c-format
msgid "OS Specific: (%x)"
msgstr ""
-#: readelf.c:1186 readelf.c:1265 readelf.c:1782
+#: readelf.c:1188 readelf.c:1274 readelf.c:1797
#, c-format
msgid "<unknown>: %x"
msgstr ""
-#: readelf.c:1199
+#: readelf.c:1201
msgid "None"
msgstr ""
-#: readelf.c:1820
+#: readelf.c:1835
msgid "Usage: readelf {options} elf-file(s)\n"
msgstr ""
-#: readelf.c:1821
+#: readelf.c:1836
msgid " Options are:\n"
msgstr ""
-#: readelf.c:1822
+#: readelf.c:1837
msgid " -a or --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
msgstr ""
-#: readelf.c:1823
+#: readelf.c:1838
msgid " -h or --file-header Display the ELF file header\n"
msgstr ""
-#: readelf.c:1824
+#: readelf.c:1839
msgid " -l or --program-headers or --segments\n"
msgstr ""
-#: readelf.c:1825
+#: readelf.c:1840
msgid " Display the program headers\n"
msgstr ""
-#: readelf.c:1826
+#: readelf.c:1841
msgid " -S or --section-headers or --sections\n"
msgstr ""
-#: readelf.c:1827
+#: readelf.c:1842
msgid " Display the sections' header\n"
msgstr ""
-#: readelf.c:1828
+#: readelf.c:1843
msgid " -e or --headers Equivalent to: -h -l -S\n"
msgstr ""
-#: readelf.c:1829
+#: readelf.c:1844
msgid " -s or --syms or --symbols Display the symbol table\n"
msgstr ""
-#: readelf.c:1830
+#: readelf.c:1845
msgid " -n or --notes Display the core notes (if present)\n"
msgstr ""
-#: readelf.c:1831
+#: readelf.c:1846
msgid " -r or --relocs Display the relocations (if present)\n"
msgstr ""
-#: readelf.c:1832
+#: readelf.c:1847
msgid " -d or --dynamic Display the dynamic segment (if present)\n"
msgstr ""
-#: readelf.c:1833
+#: readelf.c:1848
msgid " -V or --version-info Display the version sections (if present)\n"
msgstr ""
-#: readelf.c:1834
+#: readelf.c:1849
msgid ""
" -A or --arch-specific Display architecture specific information (if "
"any).\n"
msgstr ""
-#: readelf.c:1835
+#: readelf.c:1850
msgid ""
" -D or --use-dynamic Use the dynamic section info when displaying "
"symbols\n"
msgstr ""
-#: readelf.c:1836
+#: readelf.c:1851
msgid " -x <number> or --hex-dump=<number>\n"
msgstr ""
-#: readelf.c:1837
+#: readelf.c:1852
msgid " Dump the contents of section <number>\n"
msgstr ""
-#: readelf.c:1838
-msgid " -w[liapr] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges]\n"
+#: readelf.c:1853
+msgid ""
+" -w[liaprf] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]\n"
msgstr ""
-#: readelf.c:1839
+#: readelf.c:1854
msgid ""
" Display the contents of DWARF2 debug sections\n"
msgstr ""
-#: readelf.c:1841
+#: readelf.c:1856
msgid " -i <number> or --instruction-dump=<number>\n"
msgstr ""
-#: readelf.c:1842
+#: readelf.c:1857
msgid ""
" Disassemble the contents of section <number>\n"
msgstr ""
-#: readelf.c:1844
+#: readelf.c:1859
msgid " -I or --histogram Display histogram of bucket list lengths\n"
msgstr ""
-#: readelf.c:1845
+#: readelf.c:1860
msgid " -v or --version Display the version number of readelf\n"
msgstr ""
-#: readelf.c:1846
+#: readelf.c:1861
msgid " -H or --help Display this information\n"
msgstr ""
-#: readelf.c:1864
+#: readelf.c:1879
msgid "Out of memory allocating dump request table."
msgstr ""
-#: readelf.c:1999
+#: readelf.c:2019
#, c-format
msgid "Unrecognised debug option '%s'\n"
msgstr ""
-#: readelf.c:2024
+#: readelf.c:2044
#, c-format
msgid "Invalid option '-%c'\n"
msgstr ""
-#: readelf.c:2037
+#: readelf.c:2057
msgid "Nothing to do.\n"
msgstr ""
-#: readelf.c:2050 readelf.c:2067 readelf.c:3697
+#: readelf.c:2070 readelf.c:2087 readelf.c:3722
msgid "none"
msgstr ""
-#: readelf.c:2051
+#: readelf.c:2071
msgid "ELF32"
msgstr ""
-#: readelf.c:2052
+#: readelf.c:2072
msgid "ELF64"
msgstr ""
-#: readelf.c:2054 readelf.c:2071 readelf.c:2099
+#: readelf.c:2074 readelf.c:2091 readelf.c:2119
#, c-format
msgid "<unknown: %x>"
msgstr ""
-#: readelf.c:2068
+#: readelf.c:2088
msgid "2's complement, little endian"
msgstr ""
-#: readelf.c:2069
+#: readelf.c:2089
msgid "2's complement, big endian"
msgstr ""
-#: readelf.c:2084
+#: readelf.c:2104
msgid "UNIX - System V"
msgstr ""
-#: readelf.c:2085
+#: readelf.c:2105
msgid "UNIX - HP-UX"
msgstr ""
-#: readelf.c:2086
+#: readelf.c:2106
msgid "UNIX - NetBSD"
msgstr ""
-#: readelf.c:2087
+#: readelf.c:2107
msgid "UNIX - Linux"
msgstr ""
-#: readelf.c:2088
+#: readelf.c:2108
msgid "GNU/Hurd"
msgstr ""
-#: readelf.c:2089
+#: readelf.c:2109
msgid "UNIX - Solaris"
msgstr ""
-#: readelf.c:2090
-msgid "UNIX - Monterey"
+#: readelf.c:2110
+msgid "UNIX - AIX"
msgstr ""
-#: readelf.c:2091
+#: readelf.c:2111
msgid "UNIX - IRIX"
msgstr ""
-#: readelf.c:2092
+#: readelf.c:2112
msgid "UNIX - FreeBSD"
msgstr ""
-#: readelf.c:2093
+#: readelf.c:2113
msgid "UNIX - TRU64"
msgstr ""
-#: readelf.c:2094
+#: readelf.c:2114
msgid "Novell - Modesto"
msgstr ""
-#: readelf.c:2095
+#: readelf.c:2115
msgid "UNIX - OpenBSD"
msgstr ""
-#: readelf.c:2096
+#: readelf.c:2116
msgid "Standalone App"
msgstr ""
-#: readelf.c:2097
+#: readelf.c:2117
msgid "ARM"
msgstr ""
-#: readelf.c:2114
+#: readelf.c:2134
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr ""
-#: readelf.c:2122
+#: readelf.c:2142
msgid "ELF Header:\n"
msgstr ""
-#: readelf.c:2123
+#: readelf.c:2143
msgid " Magic: "
msgstr ""
-#: readelf.c:2127
+#: readelf.c:2147
#, c-format
msgid " Class: %s\n"
msgstr ""
-#: readelf.c:2129
+#: readelf.c:2149
#, c-format
msgid " Data: %s\n"
msgstr ""
-#: readelf.c:2131
+#: readelf.c:2151
#, c-format
msgid " Version: %d %s\n"
msgstr ""
-#: readelf.c:2138
+#: readelf.c:2158
#, c-format
msgid " OS/ABI: %s\n"
msgstr ""
-#: readelf.c:2140
+#: readelf.c:2160
#, c-format
msgid " ABI Version: %d\n"
msgstr ""
-#: readelf.c:2142
+#: readelf.c:2162
#, c-format
msgid " Type: %s\n"
msgstr ""
-#: readelf.c:2144
+#: readelf.c:2164
#, c-format
msgid " Machine: %s\n"
msgstr ""
-#: readelf.c:2146
+#: readelf.c:2166
#, c-format
msgid " Version: 0x%lx\n"
msgstr ""
-#: readelf.c:2149
+#: readelf.c:2169
msgid " Entry point address: "
msgstr ""
-#: readelf.c:2151
+#: readelf.c:2171
msgid ""
"\n"
" Start of program headers: "
msgstr ""
-#: readelf.c:2153
+#: readelf.c:2173
msgid ""
" (bytes into file)\n"
" Start of section headers: "
msgstr ""
-#: readelf.c:2155
+#: readelf.c:2175
msgid " (bytes into file)\n"
msgstr ""
-#: readelf.c:2157
+#: readelf.c:2177
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr ""
-#: readelf.c:2160
+#: readelf.c:2180
#, c-format
msgid " Size of this header: %ld (bytes)\n"
msgstr ""
-#: readelf.c:2162
+#: readelf.c:2182
#, c-format
msgid " Size of program headers: %ld (bytes)\n"
msgstr ""
-#: readelf.c:2164
+#: readelf.c:2184
#, c-format
msgid " Number of program headers: %ld\n"
msgstr ""
-#: readelf.c:2166
+#: readelf.c:2186
#, c-format
msgid " Size of section headers: %ld (bytes)\n"
msgstr ""
-#: readelf.c:2168
+#: readelf.c:2188
#, c-format
msgid " Number of section headers: %ld\n"
msgstr ""
-#: readelf.c:2170
+#: readelf.c:2190
#, c-format
msgid " Section header string table index: %ld\n"
msgstr ""
-#: readelf.c:2255
+#: readelf.c:2275
msgid ""
"\n"
"There are no program headers in this file.\n"
msgstr ""
-#: readelf.c:2261
+#: readelf.c:2281
#, c-format
msgid ""
"\n"
"Elf file type is %s\n"
msgstr ""
-#: readelf.c:2262
+#: readelf.c:2282
msgid "Entry point "
msgstr ""
-#: readelf.c:2264
+#: readelf.c:2284
#, c-format
msgid ""
"\n"
"There are %d program headers, starting at offset "
msgstr ""
-#: readelf.c:2275 readelf.c:2451 readelf.c:2493 readelf.c:2536 readelf.c:2577
-#: readelf.c:3090 readelf.c:3131 readelf.c:3307 readelf.c:4315 readelf.c:4329
-#: readelf.c:7097 readelf.c:7137
+#: readelf.c:2295 readelf.c:2471 readelf.c:2513 readelf.c:2556 readelf.c:2597
+#: readelf.c:3115 readelf.c:3156 readelf.c:3332 readelf.c:4340 readelf.c:4354
+#: readelf.c:7597 readelf.c:7637
msgid "Out of memory\n"
msgstr ""
-#: readelf.c:2293
+#: readelf.c:2313
#, c-format
msgid ""
"\n"
"Program Header%s:\n"
msgstr ""
-#: readelf.c:2297
+#: readelf.c:2317
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:2301
+#: readelf.c:2321
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr ""
-#: readelf.c:2303
+#: readelf.c:2323
msgid " FileSiz MemSiz Flags Align\n"
msgstr ""
-#: readelf.c:2361
+#: readelf.c:2381
msgid "more than one dynamic segment\n"
msgstr ""
-#: readelf.c:2369
+#: readelf.c:2389
msgid "Unable to find program interpreter name\n"
msgstr ""
-#: readelf.c:2376
+#: readelf.c:2396
#, c-format
msgid ""
"\n"
" [Requesting program interpreter: %s]"
msgstr ""
-#: readelf.c:2394
+#: readelf.c:2414
msgid ""
"\n"
" Section to Segment mapping:\n"
msgstr ""
-#: readelf.c:2395
+#: readelf.c:2415
msgid " Segment Sections...\n"
msgstr ""
-#: readelf.c:2658
+#: readelf.c:2679
msgid ""
"\n"
"There are no sections in this file.\n"
msgstr ""
-#: readelf.c:2664
+#: readelf.c:2685
#, c-format
msgid "There are %d section headers, starting at offset 0x%lx:\n"
msgstr ""
-#: readelf.c:2704
+#: readelf.c:2725
msgid "File contains multiple dynamic symbol tables\n"
msgstr ""
-#: readelf.c:2717
+#: readelf.c:2738
msgid "File contains multiple dynamic string tables\n"
msgstr ""
-#: readelf.c:2744
+#: readelf.c:2768
#, c-format
msgid ""
"\n"
"Section Header%s:\n"
msgstr ""
-#: readelf.c:2748
+#: readelf.c:2772
msgid ""
" [Nr] Name Type Addr Off Size ES Flg Lk "
"Inf Al\n"
msgstr ""
-#: readelf.c:2751
+#: readelf.c:2775
msgid " [Nr] Name Type Address Offset\n"
msgstr ""
-#: readelf.c:2752
+#: readelf.c:2776
msgid " Size EntSize Flags Link Info Align\n"
msgstr ""
-#: readelf.c:2799
-msgid ""
-"Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings)\n"
+#: readelf.c:2823
+msgid "Key to Flags:\n"
msgstr ""
-#: readelf.c:2800
-msgid ""
-" I (info), L (link order), O (extra OS processing required)\n"
+#: readelf.c:2824
+msgid " W (write), A (alloc), X (execute), M (merge), S (strings)\n"
msgstr ""
-#: readelf.c:2801
-msgid " o (os specific), p (processor specific) x (unknown)\n"
+#: readelf.c:2825
+msgid " I (info), L (link order), G (group), x (unknown)\n"
msgstr ""
-#: readelf.c:2859
+#: readelf.c:2826
+msgid ""
+" O (extra OS processing required) o (OS specific), p (processor specific)\n"
+msgstr ""
+
+#: readelf.c:2884
#, c-format
msgid ""
"\n"
"Relocation section at offset 0x%lx contains %ld bytes:\n"
msgstr ""
-#: readelf.c:2866
+#: readelf.c:2891
msgid ""
"\n"
"There are no dynamic relocations in this file.\n"
msgstr ""
-#: readelf.c:2894
+#: readelf.c:2919
msgid ""
"\n"
"Relocation section "
msgstr ""
-#: readelf.c:2901
+#: readelf.c:2926
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr ""
-#: readelf.c:2929
+#: readelf.c:2954
msgid ""
"\n"
"There are no relocations in this file.\n"
msgstr ""
-#: readelf.c:3184
+#: readelf.c:3209
msgid ""
"\n"
"There is no dynamic segment in this file.\n"
msgstr ""
-#: readelf.c:3218
+#: readelf.c:3243
msgid "Unable to seek to end of file!"
msgstr ""
-#: readelf.c:3227
+#: readelf.c:3252
msgid "Unable to determine the number of symbols to load\n"
msgstr ""
-#: readelf.c:3257
+#: readelf.c:3282
msgid "Unable to seek to end of file\n"
msgstr ""
-#: readelf.c:3263
+#: readelf.c:3288
msgid "Unable to determine the length of the dynamic string table\n"
msgstr ""
-#: readelf.c:3324
+#: readelf.c:3349
#, c-format
msgid ""
"\n"
"Dynamic segment at offset 0x%x contains %ld entries:\n"
msgstr ""
-#: readelf.c:3327
+#: readelf.c:3352
msgid " Tag Type Name/Value\n"
msgstr ""
-#: readelf.c:3363
+#: readelf.c:3388
msgid "Auxiliary library"
msgstr ""
-#: readelf.c:3367
+#: readelf.c:3392
msgid "Filter library"
msgstr ""
-#: readelf.c:3371
+#: readelf.c:3396
msgid "Configuration file"
msgstr ""
-#: readelf.c:3375
+#: readelf.c:3400
msgid "Dependency audit library"
msgstr ""
-#: readelf.c:3379
+#: readelf.c:3404
msgid "Audit library"
msgstr ""
-#: readelf.c:3397 readelf.c:3423 readelf.c:3449
+#: readelf.c:3422 readelf.c:3448 readelf.c:3474
msgid "Flags:"
msgstr ""
-#: readelf.c:3399 readelf.c:3425 readelf.c:3451
+#: readelf.c:3424 readelf.c:3450 readelf.c:3476
msgid " None\n"
msgstr ""
-#: readelf.c:3570
+#: readelf.c:3595
#, c-format
msgid "Shared library: [%s]"
msgstr ""
-#: readelf.c:3573
+#: readelf.c:3598
msgid " program interpreter"
msgstr ""
-#: readelf.c:3577
+#: readelf.c:3602
#, c-format
msgid "Library soname: [%s]"
msgstr ""
-#: readelf.c:3581
+#: readelf.c:3606
#, c-format
msgid "Library rpath: [%s]"
msgstr ""
-#: readelf.c:3585
+#: readelf.c:3610
#, c-format
msgid "Library runpath: [%s]"
msgstr ""
-#: readelf.c:3646
+#: readelf.c:3671
#, c-format
msgid "Not needed object: [%s]\n"
msgstr ""
-#: readelf.c:3743
+#: readelf.c:3768
#, c-format
msgid ""
"\n"
"Version definition section '%s' contains %ld entries:\n"
msgstr ""
-#: readelf.c:3746
+#: readelf.c:3771
msgid " Addr: 0x"
msgstr ""
-#: readelf.c:3748 readelf.c:3936
+#: readelf.c:3773 readelf.c:3961
#, c-format
msgid " Offset: %#08lx Link: %lx (%s)\n"
msgstr ""
-#: readelf.c:3778
+#: readelf.c:3803
#, c-format
msgid " %#06x: Rev: %d Flags: %s"
msgstr ""
-#: readelf.c:3781
+#: readelf.c:3806
#, c-format
msgid " Index: %d Cnt: %d "
msgstr ""
-#: readelf.c:3792
+#: readelf.c:3817
#, c-format
msgid "Name: %s\n"
msgstr ""
-#: readelf.c:3794
+#: readelf.c:3819
#, c-format
msgid "Name index: %ld\n"
msgstr ""
-#: readelf.c:3809
+#: readelf.c:3834
#, c-format
msgid " %#06x: Parent %d: %s\n"
msgstr ""
-#: readelf.c:3812
+#: readelf.c:3837
#, c-format
msgid " %#06x: Parent %d, name index: %ld\n"
msgstr ""
-#: readelf.c:3831
+#: readelf.c:3856
#, c-format
msgid ""
"\n"
"Version needs section '%s' contains %ld entries:\n"
msgstr ""
-#: readelf.c:3834
+#: readelf.c:3859
msgid " Addr: 0x"
msgstr ""
-#: readelf.c:3836
+#: readelf.c:3861
#, c-format
msgid " Offset: %#08lx Link to section: %ld (%s)\n"
msgstr ""
-#: readelf.c:3862
+#: readelf.c:3887
#, c-format
msgid " %#06x: Version: %d"
msgstr ""
-#: readelf.c:3865
+#: readelf.c:3890
#, c-format
msgid " File: %s"
msgstr ""
-#: readelf.c:3867
+#: readelf.c:3892
#, c-format
msgid " File: %lx"
msgstr ""
-#: readelf.c:3869
+#: readelf.c:3894
#, c-format
msgid " Cnt: %d\n"
msgstr ""
-#: readelf.c:3887
+#: readelf.c:3912
#, c-format
msgid " %#06x: Name: %s"
msgstr ""
-#: readelf.c:3890
+#: readelf.c:3915
#, c-format
msgid " %#06x: Name index: %lx"
msgstr ""
-#: readelf.c:3893
+#: readelf.c:3918
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr ""
-#: readelf.c:3931
+#: readelf.c:3956
#, c-format
msgid ""
"\n"
"Version symbols section '%s' contains %d entries:\n"
msgstr ""
-#: readelf.c:3934
+#: readelf.c:3959
msgid " Addr: "
msgstr ""
-#: readelf.c:3964
+#: readelf.c:3989
msgid " 0 (*local*) "
msgstr ""
-#: readelf.c:3968
+#: readelf.c:3993
msgid " 1 (*global*) "
msgstr ""
-#: readelf.c:4190
+#: readelf.c:4215
msgid ""
"\n"
"No version information found in this file.\n"
msgstr ""
-#: readelf.c:4208 readelf.c:4243
+#: readelf.c:4233 readelf.c:4268
#, c-format
msgid "<processor specific>: %d"
msgstr ""
-#: readelf.c:4210 readelf.c:4255
+#: readelf.c:4235 readelf.c:4280
#, c-format
msgid "<OS specific>: %d"
msgstr ""
-#: readelf.c:4212 readelf.c:4258
+#: readelf.c:4237 readelf.c:4283
#, c-format
msgid "<unknown>: %d"
msgstr ""
-#: readelf.c:4321
+#: readelf.c:4346
msgid "Unable to read in dynamic data\n"
msgstr ""
-#: readelf.c:4363
+#: readelf.c:4388
msgid "Unable to seek to start of dynamic information"
msgstr ""
-#: readelf.c:4369
+#: readelf.c:4394
msgid "Failed to read in number of buckets\n"
msgstr ""
-#: readelf.c:4375
+#: readelf.c:4400
msgid "Failed to read in number of chains\n"
msgstr ""
-#: readelf.c:4395
+#: readelf.c:4420
msgid ""
"\n"
"Symbol table for image:\n"
msgstr ""
-#: readelf.c:4397
+#: readelf.c:4422
msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:4399
+#: readelf.c:4424
msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:4443
+#: readelf.c:4468
#, c-format
msgid ""
"\n"
"Symbol table '%s' contains %lu entries:\n"
msgstr ""
-#: readelf.c:4447
+#: readelf.c:4472
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:4449
+#: readelf.c:4474
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:4558
+#: readelf.c:4583
msgid "bad dynamic symbol"
msgstr ""
-#: readelf.c:4617
+#: readelf.c:4642
msgid ""
"\n"
"Dynamic symbol information is not available for displaying symbols.\n"
msgstr ""
-#: readelf.c:4629
+#: readelf.c:4654
#, c-format
msgid ""
"\n"
"Histogram for bucket list length (total of %d buckets):\n"
msgstr ""
-#: readelf.c:4631
+#: readelf.c:4656
msgid " Length Number %% of total Coverage\n"
msgstr ""
-#: readelf.c:4636 readelf.c:4655 readelf.c:6779 readelf.c:6972
+#: readelf.c:4661 readelf.c:4680 readelf.c:7279 readelf.c:7472
msgid "Out of memory"
msgstr ""
-#: readelf.c:4704
+#: readelf.c:4729
#, c-format
msgid ""
"\n"
"Dynamic info segment at offset 0x%lx contains %d entries:\n"
msgstr ""
-#: readelf.c:4707
+#: readelf.c:4732
msgid " Num: Name BoundTo Flags\n"
msgstr ""
-#: readelf.c:4755
+#: readelf.c:4780
#, c-format
msgid ""
"\n"
"Assembly dump of section %s\n"
msgstr ""
-#: readelf.c:4778
+#: readelf.c:4803
#, c-format
msgid ""
"\n"
"Section '%s' has no data to dump.\n"
msgstr ""
-#: readelf.c:4783
+#: readelf.c:4808
#, c-format
msgid ""
"\n"
"Hex dump of section '%s':\n"
msgstr ""
-#: readelf.c:4935
+#: readelf.c:4960
msgid "badly formed extended line op encountered!"
msgstr ""
-#: readelf.c:4942
+#: readelf.c:4967
#, c-format
msgid " Extended opcode %d: "
msgstr ""
-#: readelf.c:4947
+#: readelf.c:4972
msgid ""
"End of Sequence\n"
"\n"
msgstr ""
-#: readelf.c:4953
+#: readelf.c:4978
#, c-format
msgid "set Address to 0x%lx\n"
msgstr ""
-#: readelf.c:4958
+#: readelf.c:4983
msgid " define new File Table entry\n"
msgstr ""
-#: readelf.c:4959 readelf.c:5081
+#: readelf.c:4984 readelf.c:5106
msgid " Entry\tDir\tTime\tSize\tName\n"
msgstr ""
-#: readelf.c:4961
+#: readelf.c:4986
#, c-format
msgid " %d\t"
msgstr ""
-#: readelf.c:4964 readelf.c:4966 readelf.c:4968 readelf.c:5093 readelf.c:5095
-#: readelf.c:5097
+#: readelf.c:4989 readelf.c:4991 readelf.c:4993 readelf.c:5118 readelf.c:5120
+#: readelf.c:5122
#, c-format
msgid "%lu\t"
msgstr ""
-#: readelf.c:4969
+#: readelf.c:4994
#, c-format
msgid ""
"%s\n"
"\n"
msgstr ""
-#: readelf.c:4973
+#: readelf.c:4998
#, c-format
msgid "UNKNOWN: length %d\n"
msgstr ""
-#: readelf.c:4999
+#: readelf.c:5024
#, c-format
msgid ""
"\n"
@@ -2952,497 +2981,502 @@ msgid ""
"\n"
msgstr ""
-#: readelf.c:5011
+#: readelf.c:5036
msgid "The line info appears to be corrupt - the section is too small\n"
msgstr ""
-#: readelf.c:5019
+#: readelf.c:5044
msgid "Only DWARF version 2 line info is currently supported.\n"
msgstr ""
-#: readelf.c:5034
+#: readelf.c:5059
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: readelf.c:5035
+#: readelf.c:5060
#, c-format
msgid " DWARF Version: %d\n"
msgstr ""
-#: readelf.c:5036
+#: readelf.c:5061
#, c-format
msgid " Prolgue Length: %d\n"
msgstr ""
-#: readelf.c:5037
+#: readelf.c:5062
#, c-format
msgid " Minimum Instruction Length: %d\n"
msgstr ""
-#: readelf.c:5038
+#: readelf.c:5063
#, c-format
msgid " Initial value of 'is_stmt': %d\n"
msgstr ""
-#: readelf.c:5039
+#: readelf.c:5064
#, c-format
msgid " Line Base: %d\n"
msgstr ""
-#: readelf.c:5040
+#: readelf.c:5065
#, c-format
msgid " Line Range: %d\n"
msgstr ""
-#: readelf.c:5041
+#: readelf.c:5066
#, c-format
msgid " Opcode Base: %d\n"
msgstr ""
-#: readelf.c:5050
+#: readelf.c:5075
msgid ""
"\n"
" Opcodes:\n"
msgstr ""
-#: readelf.c:5053
+#: readelf.c:5078
#, c-format
msgid " Opcode %d has %d args\n"
msgstr ""
-#: readelf.c:5059
+#: readelf.c:5084
msgid ""
"\n"
" The Directory Table is empty.\n"
msgstr ""
-#: readelf.c:5062
+#: readelf.c:5087
msgid ""
"\n"
" The Directory Table:\n"
msgstr ""
-#: readelf.c:5066
+#: readelf.c:5091
#, c-format
msgid " %s\n"
msgstr ""
-#: readelf.c:5077
+#: readelf.c:5102
msgid ""
"\n"
" The File Name Table is empty.\n"
msgstr ""
-#: readelf.c:5080
+#: readelf.c:5105
msgid ""
"\n"
" The File Name Table:\n"
msgstr ""
-#: readelf.c:5088
+#: readelf.c:5113
#, c-format
msgid " %d\t"
msgstr ""
-#: readelf.c:5099
+#: readelf.c:5124
#, c-format
msgid "%s\n"
msgstr ""
#. Now display the statements.
-#: readelf.c:5107
+#: readelf.c:5132
msgid ""
"\n"
" Line Number Statements:\n"
msgstr ""
-#: readelf.c:5126
+#: readelf.c:5151
msgid " Copy\n"
msgstr ""
-#: readelf.c:5133
+#: readelf.c:5158
#, c-format
msgid " Advance PC by %d to %lx\n"
msgstr ""
-#: readelf.c:5141
+#: readelf.c:5166
#, c-format
msgid " Advance Line by %d to %d\n"
msgstr ""
-#: readelf.c:5148
+#: readelf.c:5173
#, c-format
msgid " Set File Name to entry %d in the File Name Table\n"
msgstr ""
-#: readelf.c:5156
+#: readelf.c:5181
#, c-format
msgid " Set column to %d\n"
msgstr ""
-#: readelf.c:5163
+#: readelf.c:5188
#, c-format
msgid " Set is_stmt to %d\n"
msgstr ""
-#: readelf.c:5168
+#: readelf.c:5193
msgid " Set basic block\n"
msgstr ""
-#: readelf.c:5176
+#: readelf.c:5201
#, c-format
msgid " Advance PC by constant %d to 0x%lx\n"
msgstr ""
-#: readelf.c:5184
+#: readelf.c:5209
#, c-format
msgid " Advance PC by fixed size amount %d to 0x%lx\n"
msgstr ""
-#: readelf.c:5192
+#: readelf.c:5217
#, c-format
msgid " Special opcode %d: advance Address by %d to 0x%lx"
msgstr ""
-#: readelf.c:5196
+#: readelf.c:5221
#, c-format
msgid " and Line by %d to %d\n"
msgstr ""
-#: readelf.c:5219 readelf.c:5648
+#: readelf.c:5244 readelf.c:5673
#, c-format
msgid ""
"Contents of the %s section:\n"
"\n"
msgstr ""
-#: readelf.c:5242
+#: readelf.c:5267
msgid "Only DWARF 2 pubnames are currently supported\n"
msgstr ""
-#: readelf.c:5249
+#: readelf.c:5274
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: readelf.c:5251
+#: readelf.c:5276
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: readelf.c:5253
+#: readelf.c:5278
#, c-format
msgid " Offset into .debug_info section: %ld\n"
msgstr ""
-#: readelf.c:5255
+#: readelf.c:5280
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr ""
-#: readelf.c:5258
+#: readelf.c:5283
msgid ""
"\n"
" Offset\tName\n"
msgstr ""
-#: readelf.c:5340
+#: readelf.c:5365
#, c-format
msgid "Unknown TAG value: %lx"
msgstr ""
-#: readelf.c:5435
+#: readelf.c:5460
#, c-format
msgid "Unknown AT value: %lx"
msgstr ""
-#: readelf.c:5472
+#: readelf.c:5497
#, c-format
msgid "Unknown FORM value: %lx"
msgstr ""
-#: readelf.c:5654
+#: readelf.c:5679
msgid " Number TAG\n"
msgstr ""
-#: readelf.c:5660
+#: readelf.c:5685
#, c-format
msgid " %ld %s [%s]\n"
msgstr ""
-#: readelf.c:5663
+#: readelf.c:5688
msgid "has children"
msgstr ""
-#: readelf.c:5663
+#: readelf.c:5688
msgid "no children"
msgstr ""
-#: readelf.c:5667
+#: readelf.c:5692
#, c-format
msgid " %-18s %s\n"
msgstr ""
-#: readelf.c:5686
+#: readelf.c:5711
#, c-format
msgid " %lu byte block: "
msgstr ""
-#: readelf.c:5993
+#: readelf.c:6018
msgid "(User defined location op)"
msgstr ""
-#: readelf.c:5995
+#: readelf.c:6020
msgid "(Unknown location op)"
msgstr ""
-#: readelf.c:6122
+#: readelf.c:6147
#, c-format
msgid "Unable to handle FORM: %d"
msgstr ""
-#: readelf.c:6126
+#: readelf.c:6151
#, c-format
msgid "Unrecognised form: %d"
msgstr ""
-#: readelf.c:6139
+#: readelf.c:6164
msgid "(not inlined)"
msgstr ""
-#: readelf.c:6140
+#: readelf.c:6165
msgid "(inlined)"
msgstr ""
-#: readelf.c:6141
+#: readelf.c:6166
msgid "(declared as inline but ignored)"
msgstr ""
-#: readelf.c:6142
+#: readelf.c:6167
msgid "(declared as inline and inlined)"
msgstr ""
-#: readelf.c:6143
+#: readelf.c:6168
#, c-format
msgid " (Unknown inline attribute value: %lx)"
msgstr ""
-#: readelf.c:6272 readelf.c:6398
+#: readelf.c:6297 readelf.c:6423
#, c-format
msgid ""
"The section %s contains:\n"
"\n"
msgstr ""
-#: readelf.c:6296
+#: readelf.c:6321
msgid "Only version 2 DWARF debug information is currently supported.\n"
msgstr ""
-#: readelf.c:6300
+#: readelf.c:6325
msgid " Compilation Unit:\n"
msgstr ""
-#: readelf.c:6301
+#: readelf.c:6326
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: readelf.c:6302
+#: readelf.c:6327
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: readelf.c:6303
+#: readelf.c:6328
#, c-format
msgid " Abbrev Offset: %ld\n"
msgstr ""
-#: readelf.c:6304
+#: readelf.c:6329
#, c-format
msgid " Pointer Size: %d\n"
msgstr ""
-#: readelf.c:6324
+#: readelf.c:6349
msgid "Unable to locate .debug_abbrev section!\n"
msgstr ""
-#: readelf.c:6364
+#: readelf.c:6389
#, c-format
msgid "Unable to locate entry %lu in the abbreviation table\n"
msgstr ""
-#: readelf.c:6369
+#: readelf.c:6394
#, c-format
msgid " <%d><%x>: Abbrev Number: %lu (%s)\n"
msgstr ""
-#: readelf.c:6419
+#: readelf.c:6444
msgid "Only DWARF 2 aranges are currently supported.\n"
msgstr ""
-#: readelf.c:6423
+#: readelf.c:6448
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: readelf.c:6424
+#: readelf.c:6449
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: readelf.c:6425
+#: readelf.c:6450
#, c-format
msgid " Offset into .debug_info: %lx\n"
msgstr ""
-#: readelf.c:6426
+#: readelf.c:6451
#, c-format
msgid " Pointer Size: %d\n"
msgstr ""
-#: readelf.c:6427
+#: readelf.c:6452
#, c-format
msgid " Segment Size: %d\n"
msgstr ""
-#: readelf.c:6429
+#: readelf.c:6454
msgid ""
"\n"
" Address Length\n"
msgstr ""
-#: readelf.c:6470
+#: readelf.c:6598
+#, c-format
+msgid "The section %s contains:\n"
+msgstr ""
+
+#: readelf.c:6968
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr ""
-#: readelf.c:6532
+#: readelf.c:7032
#, c-format
msgid ""
"\n"
"Section '%s' has no debugging data.\n"
msgstr ""
-#: readelf.c:6548
+#: readelf.c:7048
#, c-format
msgid "Unrecognised debug section: %s\n"
msgstr ""
-#: readelf.c:6620
+#: readelf.c:7120
msgid "Some sections were not dumped because they do not exist!\n"
msgstr ""
-#: readelf.c:6803
+#: readelf.c:7303
#, c-format
msgid ""
"\n"
"Section '%s' contains %d entries:\n"
msgstr ""
-#: readelf.c:6965
+#: readelf.c:7465
msgid "conflict list with without table"
msgstr ""
-#: readelf.c:6993
+#: readelf.c:7493
#, c-format
msgid ""
"\n"
"Section '.conflict' contains %d entries:\n"
msgstr ""
-#: readelf.c:6994
+#: readelf.c:7494
msgid " Num: Index Value Name"
msgstr ""
-#: readelf.c:7019
+#: readelf.c:7519
msgid "NT_PRSTATUS (prstatus structure)"
msgstr ""
-#: readelf.c:7020
+#: readelf.c:7520
msgid "NT_FPREGSET (floating point registers)"
msgstr ""
-#: readelf.c:7021
+#: readelf.c:7521
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr ""
-#: readelf.c:7022
+#: readelf.c:7522
msgid "NT_TASKSTRUCT (task structure)"
msgstr ""
-#: readelf.c:7023
+#: readelf.c:7523
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr ""
-#: readelf.c:7024
+#: readelf.c:7524
msgid "NT_PSTATUS (pstatus structure)"
msgstr ""
-#: readelf.c:7025
+#: readelf.c:7525
msgid "NT_FPREGS (floating point registers)"
msgstr ""
-#: readelf.c:7026
+#: readelf.c:7526
msgid "NT_PSINFO (psinfo structure)"
msgstr ""
-#: readelf.c:7027
+#: readelf.c:7527
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr ""
-#: readelf.c:7028
+#: readelf.c:7528
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr ""
-#: readelf.c:7029
+#: readelf.c:7529
msgid "NT_WIN32PSTATUS (win32_pstatus strcuture)"
msgstr ""
-#: readelf.c:7031
+#: readelf.c:7531
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr ""
-#: readelf.c:7069
+#: readelf.c:7569
#, c-format
msgid ""
"\n"
"Notes at offset 0x%08lx with length 0x%08lx:\n"
msgstr ""
-#: readelf.c:7071
+#: readelf.c:7571
msgid " Owner\t\tData size\tDescription\n"
msgstr ""
-#: readelf.c:7182
+#: readelf.c:7682
msgid "No note segments present in the core file.\n"
msgstr ""
-#: readelf.c:7260
+#: readelf.c:7760
msgid "This instance of readelf has been built without support for a\n"
msgstr ""
-#: readelf.c:7261
+#: readelf.c:7761
msgid "64 bit data type and so it cannot read 64 bit ELF files.\n"
msgstr ""
-#: readelf.c:7296
+#: readelf.c:7796
#, c-format
msgid "Cannot stat input file %s.\n"
msgstr ""
-#: readelf.c:7303
+#: readelf.c:7803
#, c-format
msgid "Input file %s not found.\n"
msgstr ""
-#: readelf.c:7309
+#: readelf.c:7809
#, c-format
msgid "%s: Failed to read file header\n"
msgstr ""
-#: readelf.c:7323
+#: readelf.c:7823
#, c-format
msgid ""
"\n"
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 99d1b98..a9c5cbf 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -1471,6 +1471,9 @@ get_machine_flags (e_flags, e_machine)
if ((e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
strcat (buf, ", mips4");
+ if ((e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
+ strcat (buf, ", mips32");
+
switch ((e_flags & EF_MIPS_MACH))
{
case E_MIPS_MACH_3900: strcat (buf, ", 3900"); break;
@@ -1478,7 +1481,8 @@ get_machine_flags (e_flags, e_machine)
case E_MIPS_MACH_4100: strcat (buf, ", 4100"); break;
case E_MIPS_MACH_4650: strcat (buf, ", 4650"); break;
case E_MIPS_MACH_4111: strcat (buf, ", 4111"); break;
- case E_MIPS_MACH_MIPS32: strcat (buf, ", mips32"); break;
+ case E_MIPS_MACH_MIPS32_4K: strcat (buf, ", mips32-4k"); break;
+ default: strcat (buf, " UNKNOWN"); break;
}
break;
diff --git a/config.sub b/config.sub
index af79d70..f8d46e4 100755
--- a/config.sub
+++ b/config.sub
@@ -211,10 +211,11 @@ esac
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
- tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
- | arme[lb] | armv[2345] | armv[345][lb] | pyramid | mn10200 | mn10300 | tron | a29k \
+ tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
+ | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
+ | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 \
- | x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \
+ | x86 | ppcbe | mipsbe | mipsle | shbe | shle \
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
| hppa64 \
| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
@@ -251,11 +252,12 @@ case $basic_machine in
# Recognize the basic CPU types with company name.
# FIXME: clean up the formatting here.
vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
- | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
+ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
+ | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
| xmp-* | ymp-* \
- | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \
+ | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
| hppa2.0n-* | hppa64-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
@@ -267,7 +269,7 @@ case $basic_machine in
| mips64el-* | mips64orion-* | mips64orionel-* \
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
| mipstx39-* | mipstx39el-* | mcore-* \
- | f301-* | armv*-* | s390-* | sv1-* | t3e-* \
+ | f301-* | s390-* | sv1-* | t3e-* \
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
| thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \
| bs2000-* | tic54x-* | c54x-* | x86_64-*)
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 9c8a3df..8de2b35 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -13,6 +13,45 @@
operand specifiers. Change warning generated by 'B' operand
specifier to reflect its new multi-purpose usage.
+ * config/tc-mips.c (mips_set_options): Use ISA_UNKNOWN rather than
+ -1, and update comment.
+ (file_mips_isa): Likewise.
+ (mips_cpu): Use CPU_UNKNOWN rather than -1, and update comment.
+ (ISA_HAS_COPROC_DELAYS, ISA_HAS_64BIT_REGS, gpr_interlocks): Use
+ ISA_* constants rather than hard-coded numbers.
+ (mips_cpu_info): New structure.
+ (mips_cpu_info_table): New table describing CPU and ISA names
+ and numbers.
+ (mips_cpu_info_from_name, mips_cpu_info_from_isa,
+ mips_cpu_info_from_cpu): New functions.
+ (mips_isa_to_str): New function to get string for ISA name.
+ (mips_cpu_to_str): Convert to use mips_cpu_info_from_cpu, and
+ return const char *.
+ (md_begin): Redo CPU and ISA selection logic, using
+ mips_cpu_info_from_*. Convert to use ISA_* constants rather
+ than hard-coded numbers.
+ (append_insn, mips_emit_delays, macro, macro2): Convert to use
+ ISA_* constants rather than hard-coded numbers.
+ (mips_ip): Convert to use mips_isa_to_str to get ISA name.
+ (md_longopts): Delete OPTION_NO_MIPS32.
+ (md_parse_option): Convert to use ISA_* constants rather than
+ hard-coded numbers. Make OPTIONS_MIPS32 case treat MIPS32
+ as an ISA. Delete OPTION_NO_MIPS32 case. Convert OPTION_MCPU
+ to use strcasecmp to recognize "default" and to use
+ mips_cpu_info_from_name to get CPU numbers from argument.
+ (md_show_usage): Move -mips32 so it's with the rest of the ISA
+ flags. Change 4Kc, 4Kp and 4Km CPU entries to just be
+ mips32-4k.
+ (s_mipsset): Accept ISA value 32.
+ * doc/as.texinfo: Clean up MIPS options summary slightly,
+ remove -no-mips32. Add note about -mips4 and -mips32
+ specifying those ISA levels. Delete -mips32 and -no-mips32
+ cpu flag descriptions.
+ * doc/c-mips.texi: Add -mips32 to list of ISA switches. Clean
+ up the supported CPU switch list, and replace 4Kc, 4Km, and
+ 4Kp entries with a single mips32-4k entry. Note that you can
+ use ".set mips32".
+
2000-12-01 Joel Sherrill <joel@OARcorp.com>
* configure.in (arm-*-rtems*, a29k-*rtems*, h8300-*-rtems*):
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 568d261..fb8c5e6 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -187,10 +187,13 @@ struct mips_set_options
};
/* This is the struct we use to hold the current set of options. Note
- that we must set the isa and mips16 fields to -1 to indicate that
- they have not been initialized. */
+ that we must set the isa field to ISA_UNKNOWN and the mips16 field to
+ -1 to indicate that they have not been initialized. */
-static struct mips_set_options mips_opts = { -1, -1, 0, 0, 0, 0, 0, 0 };
+static struct mips_set_options mips_opts =
+{
+ ISA_UNKNOWN, -1, 0, 0, 0, 0, 0, 0
+};
/* These variables are filled in with the masks of registers used.
The object format code reads them and puts them in the appropriate
@@ -199,10 +202,10 @@ unsigned long mips_gprmask;
unsigned long mips_cprmask[4];
/* MIPS ISA we are using for this output file. */
-static int file_mips_isa;
+static int file_mips_isa = ISA_UNKNOWN;
-/* The CPU type as a number: 2000, 3000, 4000, 4400, etc. */
-static int mips_cpu = -1;
+/* The CPU type we are using for this output file. */
+static int mips_cpu = CPU_UNKNOWN;
/* The argument of the -mabi= flag. */
static char* mips_abi_string = 0;
@@ -226,15 +229,15 @@ static int mips_gp32 = 0;
also assume that ISAs which don't have delays for these insns, don't
have delays for the INSN_LOAD_MEMORY_DELAY instructions either. */
#define ISA_HAS_COPROC_DELAYS(ISA) ( \
- (ISA) == 1 \
- || (ISA) == 2 \
- || (ISA) == 3 \
+ (ISA) == ISA_MIPS1 \
+ || (ISA) == ISA_MIPS2 \
+ || (ISA) == ISA_MIPS3 \
)
/* Return true if ISA supports 64 bit gp register instructions. */
#define ISA_HAS_64BIT_REGS(ISA) ( \
- (ISA) == 3 \
- || (ISA) == 4 \
+ (ISA) == ISA_MIPS3 \
+ || (ISA) == ISA_MIPS4 \
)
/* Whether the processor uses hardware interlocks to protect
@@ -270,7 +273,7 @@ static int mips_gp32 = 0;
/* Whether the processor uses hardware interlocks to protect reads
from the GPRs, and thus does not require nops to be inserted. */
#define gpr_interlocks \
- (mips_opts.isa != 1 \
+ (mips_opts.isa != ISA_MIPS1 \
|| mips_cpu == CPU_R3900)
/* As with other "interlocks" this is used by hardware that has FP
@@ -706,9 +709,24 @@ static void s_mips_stab PARAMS ((int));
static void s_mips_weakext PARAMS ((int));
static void s_file PARAMS ((int));
static int mips16_extended_frag PARAMS ((fragS *, asection *, long));
-static char *mips_cpu_to_str PARAMS ((int));
-
+static const char *mips_isa_to_str PARAMS ((int));
+static const char *mips_cpu_to_str PARAMS ((int));
static int validate_mips_insn PARAMS ((const struct mips_opcode *));
+
+/* Table and functions used to map between CPU/ISA names, and
+ ISA levels, and CPU numbers. */
+
+struct mips_cpu_info
+{
+ const char *name; /* CPU or ISA name. */
+ int is_isa; /* Is this an ISA? (If 0, a CPU.) */
+ int isa; /* ISA level. */
+ int cpu; /* CPU number (default CPU if ISA). */
+};
+
+static const struct mips_cpu_info *mips_cpu_info_from_name PARAMS ((const char *));
+static const struct mips_cpu_info *mips_cpu_info_from_isa PARAMS ((int));
+static const struct mips_cpu_info *mips_cpu_info_from_cpu PARAMS ((int));
/* Pseudo-op table.
@@ -852,33 +870,34 @@ static boolean mips16_small, mips16_ext;
static segT pdr_seg;
#endif
-static char *
+static const char *
+mips_isa_to_str (isa)
+ int isa;
+{
+ const struct mips_cpu_info *ci;
+ static char s[20];
+
+ ci = mips_cpu_info_from_isa (isa);
+ if (ci != NULL)
+ return (ci->name);
+
+ sprintf (s, "ISA#%d", isa);
+ return s;
+}
+
+static const char *
mips_cpu_to_str (cpu)
int cpu;
{
+ const struct mips_cpu_info *ci;
static char s[16];
- switch (cpu)
- {
- case CPU_R2000: return "R2000";
- case CPU_R3000: return "R3000";
- case CPU_R3900: return "R3900";
- case CPU_R4000: return "R4000";
- case CPU_R4010: return "R4010";
- case CPU_VR4100: return "VR4100";
- case CPU_R4111: return "R4111";
- case CPU_R4300: return "R4300";
- case CPU_R4400: return "R4400";
- case CPU_R4600: return "R4600";
- case CPU_R4650: return "R4650";
- case CPU_R5000: return "R5000";
- case CPU_R6000: return "R6000";
- case CPU_R8000: return "R8000";
- case CPU_R10000: return "R10000";
- case CPU_4K: return "4K";
- default:
- sprintf (s, "%d", cpu);
- return s;
- }
+
+ ci = mips_cpu_info_from_cpu (cpu);
+ if (ci != NULL)
+ return (ci->name);
+
+ sprintf (s, "CPU#%d", cpu);
+ return s;
}
/* This function is called once, at assembler startup time. It should
@@ -887,13 +906,14 @@ mips_cpu_to_str (cpu)
void
md_begin ()
{
- boolean ok = false;
register const char *retval = NULL;
int i = 0;
const char *cpu;
char *a = NULL;
int broken = 0;
int mips_isa_from_cpu;
+ int target_cpu_had_mips16 = 0;
+ const struct mips_cpu_info *ci;
/* GP relative stuff not working for PE */
if (strncmp (TARGET_OS, "pe", 2) == 0
@@ -913,130 +933,52 @@ md_begin ()
cpu = a;
}
- if (mips_cpu < 0)
+ if (strncmp (cpu, "mips16", sizeof "mips16" - 1) == 0)
{
- /* Set mips_cpu based on TARGET_CPU, unless TARGET_CPU is
- just the generic 'mips', in which case set mips_cpu based
- on the given ISA, if any. */
-
- if (strcmp (cpu, "mips") == 0)
- {
- if (mips_opts.isa < 0)
- mips_cpu = CPU_R3000;
-
- else if (mips_opts.isa == 2)
- mips_cpu = CPU_R6000;
-
- else if (mips_opts.isa == 3)
- mips_cpu = CPU_R4000;
-
- else if (mips_opts.isa == 4)
- mips_cpu = CPU_R8000;
-
- else
- mips_cpu = CPU_R3000;
- }
-
- else if (strcmp (cpu, "r3900") == 0
- || strcmp (cpu, "mipstx39") == 0
- )
- mips_cpu = CPU_R3900;
-
- else if (strcmp (cpu, "r6000") == 0
- || strcmp (cpu, "mips2") == 0)
- mips_cpu = CPU_R6000;
-
- else if (strcmp (cpu, "mips64") == 0
- || strcmp (cpu, "r4000") == 0
- || strcmp (cpu, "mips3") == 0)
- mips_cpu = CPU_R4000;
-
- else if (strcmp (cpu, "r4400") == 0)
- mips_cpu = CPU_R4400;
-
- else if (strcmp (cpu, "mips64orion") == 0
- || strcmp (cpu, "r4600") == 0)
- mips_cpu = CPU_R4600;
-
- else if (strcmp (cpu, "r4650") == 0)
- mips_cpu = CPU_R4650;
-
- else if (strcmp (cpu, "mips64vr4300") == 0)
- mips_cpu = CPU_R4300;
-
- else if (strcmp (cpu, "mips64vr4111") == 0)
- mips_cpu = CPU_R4111;
-
- else if (strcmp (cpu, "mips64vr4100") == 0)
- mips_cpu = CPU_VR4100;
-
- else if (strcmp (cpu, "r4010") == 0)
- mips_cpu = CPU_R4010;
-
- else if (strcmp (cpu, "4Kc") == 0
- || strcmp (cpu, "4Kp") == 0
- || strcmp (cpu, "4Km") == 0)
- mips_cpu = CPU_4K;
-
- else if (strcmp (cpu, "r5000") == 0
- || strcmp (cpu, "mips64vr5000") == 0)
- mips_cpu = CPU_R5000;
-
- else if (strcmp (cpu, "r8000") == 0
- || strcmp (cpu, "mips4") == 0)
- mips_cpu = CPU_R8000;
-
- else if (strcmp (cpu, "r10000") == 0)
- mips_cpu = CPU_R10000;
-
- else if (strcmp (cpu, "mips16") == 0)
- mips_cpu = 0; /* FIXME */
-
- else
- mips_cpu = CPU_R3000;
+ target_cpu_had_mips16 = 1;
+ cpu += sizeof "mips16" - 1;
}
- if (mips_cpu == CPU_R3000
- || mips_cpu == CPU_R3900)
- mips_isa_from_cpu = 1;
-
- else if (mips_cpu == CPU_R6000
- || mips_cpu == CPU_R4010)
- mips_isa_from_cpu = 2;
-
- else if (mips_cpu == CPU_R4000
- || mips_cpu == CPU_VR4100
- || mips_cpu == CPU_R4111
- || mips_cpu == CPU_R4400
- || mips_cpu == CPU_R4300
- || mips_cpu == CPU_R4600
- || mips_cpu == CPU_R4650)
- mips_isa_from_cpu = 3;
-
- else if (mips_cpu == CPU_R5000
- || mips_cpu == CPU_R8000
- || mips_cpu == CPU_R10000)
- mips_isa_from_cpu = 4;
-
- else
- mips_isa_from_cpu = -1;
+ if (mips_opts.mips16 < 0)
+ mips_opts.mips16 = target_cpu_had_mips16;
- if (mips_opts.isa == -1)
+ /* At this point, mips_cpu will either be CPU_UNKNOWN if no CPU was
+ specified on the command line, or some other value if one was.
+ Similarly, mips_opts.isa will be ISA_UNKNOWN if not specified on
+ the command line, or will be set otherwise if one was. */
+ if (mips_cpu != CPU_UNKNOWN && mips_opts.isa != ISA_UNKNOWN)
{
- if (mips_isa_from_cpu != -1)
- mips_opts.isa = mips_isa_from_cpu;
- else
- mips_opts.isa = 1;
+ /* We have it all. There's nothing to do. */
}
-
- if (mips_opts.mips16 < 0)
+ else if (mips_cpu != CPU_UNKNOWN && mips_opts.isa == ISA_UNKNOWN)
{
- if (strncmp (TARGET_CPU, "mips16", sizeof "mips16" - 1) == 0)
- mips_opts.mips16 = 1;
- else
- mips_opts.mips16 = 0;
+ /* We have CPU, we need ISA. */
+ ci = mips_cpu_info_from_cpu (mips_cpu);
+ assert (ci != NULL);
+ mips_opts.isa = ci->isa;
+ }
+ else if (mips_cpu == CPU_UNKNOWN && mips_opts.isa != ISA_UNKNOWN)
+ {
+ /* We have ISA, we need default CPU. */
+ ci = mips_cpu_info_from_isa (mips_opts.isa);
+ assert (ci != NULL);
+ mips_cpu = ci->cpu;
+ }
+ else
+ {
+ /* We need to set both ISA and CPU from target cpu. */
+ ci = mips_cpu_info_from_name (cpu);
+ if (ci == NULL)
+ ci = mips_cpu_info_from_cpu (CPU_R3000);
+ assert (ci != NULL);
+ mips_opts.isa = ci->isa;
+ mips_cpu = ci->cpu;
}
+ ci = mips_cpu_info_from_cpu (mips_cpu);
+ assert (ci != NULL);
+ mips_isa_from_cpu = ci->isa;
+
/* End of TARGET_CPU processing, get rid of malloced memory
if necessary. */
cpu = NULL;
@@ -1046,7 +988,7 @@ md_begin ()
a = NULL;
}
- if (mips_opts.isa == 1 && mips_trap)
+ if (mips_opts.isa == ISA_MIPS1 && mips_trap)
as_bad (_("trap exception not supported at ISA 1"));
/* Set the EABI kind based on the ISA before the user gets
@@ -1057,37 +999,14 @@ md_begin ()
&& 0 == strcmp (mips_abi_string,"eabi"))
mips_eabi64 = 1;
- if (mips_cpu != 0 && mips_cpu != -1)
- {
- ok = bfd_set_arch_mach (stdoutput, bfd_arch_mips, mips_cpu);
-
- /* If they asked for mips1 or mips2 and a cpu that is
- mips3 or greater, then mark the object file 32BITMODE. */
- if (mips_isa_from_cpu != -1
- && ! ISA_HAS_64BIT_REGS (mips_opts.isa)
- && ISA_HAS_64BIT_REGS (mips_isa_from_cpu))
- mips_32bitmode = 1;
- }
- else
- {
- switch (mips_opts.isa)
- {
- case 1:
- ok = bfd_set_arch_mach (stdoutput, bfd_arch_mips, CPU_R3000);
- break;
- case 2:
- ok = bfd_set_arch_mach (stdoutput, bfd_arch_mips, CPU_R6000);
- break;
- case 3:
- ok = bfd_set_arch_mach (stdoutput, bfd_arch_mips, CPU_R4000);
- break;
- case 4:
- ok = bfd_set_arch_mach (stdoutput, bfd_arch_mips, CPU_R8000);
- break;
- }
- }
+ /* If they asked for mips1 or mips2 and a cpu that is
+ mips3 or greater, then mark the object file 32BITMODE. */
+ if (mips_isa_from_cpu != ISA_UNKNOWN
+ && ! ISA_HAS_64BIT_REGS (mips_opts.isa)
+ && ISA_HAS_64BIT_REGS (mips_isa_from_cpu))
+ mips_32bitmode = 1;
- if (! ok)
+ if (! bfd_set_arch_mach (stdoutput, bfd_arch_mips, mips_cpu))
as_warn (_("Could not set architecture and machine"));
file_mips_isa = mips_opts.isa;
@@ -1549,7 +1468,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
&& ISA_HAS_COPROC_DELAYS (mips_opts.isa)
&& (((prev_pinfo & INSN_COPROC_MOVE_DELAY)
&& ! cop_interlocks)
- || (mips_opts.isa == 1
+ || (mips_opts.isa == ISA_MIPS1
&& (prev_pinfo & INSN_COPROC_MEMORY_DELAY))))
{
/* A generic coprocessor delay. The previous instruction
@@ -2083,7 +2002,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
&& ! gpr_interlocks
&& (prev_pinfo & INSN_LOAD_MEMORY_DELAY))
|| (! mips_opts.mips16
- && mips_opts.isa == 1
+ && mips_opts.isa == ISA_MIPS1
/* Itbl support may require additional care here. */
&& (prev_pinfo & INSN_COPROC_MEMORY_DELAY))
/* We can not swap with a branch instruction. */
@@ -2419,7 +2338,7 @@ mips_emit_delays (insns)
&& (prev_insn.insn_mo->pinfo
& INSN_LOAD_MEMORY_DELAY))
|| (! mips_opts.mips16
- && mips_opts.isa == 1
+ && mips_opts.isa == ISA_MIPS1
&& (prev_insn.insn_mo->pinfo
& INSN_COPROC_MEMORY_DELAY)))
{
@@ -5421,7 +5340,7 @@ macro (ip)
s = segment_name (S_GET_SEGMENT (offset_expr.X_add_symbol));
if (strcmp (s, ".lit8") == 0)
{
- if (mips_opts.isa != 1)
+ if (mips_opts.isa != ISA_MIPS1)
{
macro_build ((char *) NULL, &icnt, &offset_expr, "ldc1",
"T,o(b)", treg, (int) BFD_RELOC_MIPS_LITERAL, GP);
@@ -5446,7 +5365,7 @@ macro (ip)
macro_build_lui ((char *) NULL, &icnt, &offset_expr, AT);
}
- if (mips_opts.isa != 1)
+ if (mips_opts.isa != ISA_MIPS1)
{
macro_build ((char *) NULL, &icnt, &offset_expr, "ldc1",
"T,o(b)", treg, (int) BFD_RELOC_LO16, AT);
@@ -5473,7 +5392,7 @@ macro (ip)
to adjust when loading from memory. */
r = BFD_RELOC_LO16;
dob:
- assert (mips_opts.isa == 1);
+ assert (mips_opts.isa == ISA_MIPS1);
macro_build ((char *) NULL, &icnt, &offset_expr, "lwc1", "T,o(b)",
target_big_endian ? treg + 1 : treg,
(int) r, breg);
@@ -5512,7 +5431,7 @@ macro (ip)
}
/* Itbl support may require additional care here. */
coproc = 1;
- if (mips_opts.isa != 1)
+ if (mips_opts.isa != ISA_MIPS1)
{
s = "ldc1";
goto ld;
@@ -5529,7 +5448,7 @@ macro (ip)
return;
}
- if (mips_opts.isa != 1)
+ if (mips_opts.isa != ISA_MIPS1)
{
s = "sdc1";
goto st;
@@ -6157,7 +6076,7 @@ macro2 (ip)
as_bad (_("opcode not supported on this processor"));
return;
}
- assert (mips_opts.isa == 1);
+ assert (mips_opts.isa == ISA_MIPS1);
/* Even on a big endian machine $fn comes before $fn+1. We have
to adjust when storing to memory. */
macro_build ((char *) NULL, &icnt, &offset_expr, "swc1", "T,o(b)",
@@ -6466,7 +6385,7 @@ macro2 (ip)
case M_TRUNCWS:
case M_TRUNCWD:
- assert (mips_opts.isa == 1);
+ assert (mips_opts.isa == ISA_MIPS1);
sreg = (ip->insn_opcode >> 11) & 0x1f; /* floating reg */
dreg = (ip->insn_opcode >> 06) & 0x1f; /* floating reg */
@@ -7146,8 +7065,9 @@ mips_ip (str, ip)
{
static char buf[100];
sprintf (buf,
- _("opcode not supported on this processor: %s (MIPS%d)"),
- mips_cpu_to_str (mips_cpu), mips_opts.isa);
+ _("opcode not supported on this processor: %s (%s)"),
+ mips_cpu_to_str (mips_cpu),
+ mips_isa_to_str (mips_opts.isa));
insn_error = buf;
return;
@@ -8964,9 +8884,6 @@ struct option md_longopts[] =
{"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS},
#define OPTION_MIPS32 (OPTION_MD_BASE + 28)
{"mips32", no_argument, NULL, OPTION_MIPS32},
-#define OPTION_NO_MIPS32 (OPTION_MD_BASE + 29)
- {"no-mips32", no_argument, NULL, OPTION_NO_MIPS32},
-
#ifdef OBJ_ELF
#define OPTION_ELF_BASE (OPTION_MD_BASE + 35)
#define OPTION_CALL_SHARED (OPTION_ELF_BASE + 0)
@@ -9037,154 +8954,39 @@ md_parse_option (c, arg)
break;
case OPTION_MIPS1:
- mips_opts.isa = 1;
+ mips_opts.isa = ISA_MIPS1;
break;
case OPTION_MIPS2:
- mips_opts.isa = 2;
+ mips_opts.isa = ISA_MIPS2;
break;
case OPTION_MIPS3:
- mips_opts.isa = 3;
+ mips_opts.isa = ISA_MIPS3;
break;
case OPTION_MIPS4:
- mips_opts.isa = 4;
+ mips_opts.isa = ISA_MIPS4;
+ break;
+
+ case OPTION_MIPS32:
+ mips_opts.isa = ISA_MIPS32;
break;
case OPTION_MCPU:
{
- char *p;
-
- /* Identify the processor type */
- p = arg;
- if (strcmp (p, "default") == 0
- || strcmp (p, "DEFAULT") == 0)
- mips_cpu = -1;
+ /* Identify the processor type. */
+ if (strcasecmp (arg, "default") == 0)
+ mips_cpu = CPU_UNKNOWN;
else
{
- int sv = 0;
-
- /* We need to cope with the various "vr" prefixes for the 4300
- processor. */
- if (*p == 'v' || *p == 'V')
- {
- sv = 1;
- p++;
- }
-
- if (*p == 'r' || *p == 'R')
- p++;
-
- mips_cpu = -1;
- switch (*p)
- {
- case '1':
- if (strcmp (p, "10000") == 0
- || strcmp (p, "10k") == 0
- || strcmp (p, "10K") == 0)
- mips_cpu = CPU_R10000;
- break;
-
- case '2':
- if (strcmp (p, "2000") == 0
- || strcmp (p, "2k") == 0
- || strcmp (p, "2K") == 0)
- mips_cpu = CPU_R2000;
- break;
-
- case '3':
- if (strcmp (p, "3000") == 0
- || strcmp (p, "3k") == 0
- || strcmp (p, "3K") == 0)
- mips_cpu = CPU_R3000;
- else if (strcmp (p, "3900") == 0)
- mips_cpu = CPU_R3900;
- break;
-
- case '4':
- if (strcmp (p, "4000") == 0
- || strcmp (p, "4k") == 0
- || strcmp (p, "4K") == 0)
- mips_cpu = CPU_R4000;
- else if (strcmp (p, "4100") == 0)
- mips_cpu = CPU_VR4100;
- else if (strcmp (p, "4111") == 0)
- mips_cpu = CPU_R4111;
- else if (strcmp (p, "4300") == 0)
- mips_cpu = CPU_R4300;
- else if (strcmp (p, "4400") == 0)
- mips_cpu = CPU_R4400;
- else if (strcmp (p, "4600") == 0)
- mips_cpu = CPU_R4600;
- else if (strcmp (p, "4650") == 0)
- mips_cpu = CPU_R4650;
- else if (strcmp (p, "4010") == 0)
- mips_cpu = CPU_R4010;
- else if (strcmp (p, "4Kc") == 0
- || strcmp (p, "4Kp") == 0
- || strcmp (p, "4Km") == 0)
- mips_cpu = CPU_MIPS32;
- break;
-
- case '5':
- if (strcmp (p, "5000") == 0
- || strcmp (p, "5k") == 0
- || strcmp (p, "5K") == 0)
- mips_cpu = CPU_R5000;
- break;
-
- case '6':
- if (strcmp (p, "6000") == 0
- || strcmp (p, "6k") == 0
- || strcmp (p, "6K") == 0)
- mips_cpu = CPU_R6000;
- break;
-
- case '8':
- if (strcmp (p, "8000") == 0
- || strcmp (p, "8k") == 0
- || strcmp (p, "8K") == 0)
- mips_cpu = CPU_R8000;
- break;
-
- case 'o':
- if (strcmp (p, "orion") == 0)
- mips_cpu = CPU_R4600;
- break;
-
- case 'm':
- case 'M':
- switch (atoi (p + 1))
- {
- case 5200:
- case 5230:
- case 5231:
- case 5261:
- case 5721:
- case 7000:
- mips_cpu = CPU_R5000;
- break;
- default:
- break;
- }
- }
-
- if (sv
- && (mips_cpu != CPU_R4300
- && mips_cpu != CPU_VR4100
- && mips_cpu != CPU_R4111
- && mips_cpu != CPU_R5000))
- {
- as_bad (_("ignoring invalid leading 'v' in -mcpu=%s switch"), arg);
- return 0;
- }
+ const struct mips_cpu_info *ci;
- if (mips_cpu == -1)
- {
- as_bad (_("invalid architecture -mcpu=%s"), arg);
- return 0;
- }
+ ci = mips_cpu_info_from_name (arg);
+ if (ci == NULL || ci->is_isa)
+ as_bad (_("invalid architecture -mcpu=%s"), arg);
+ else
+ mips_cpu = ci->cpu;
}
}
break;
@@ -9210,13 +9012,6 @@ md_parse_option (c, arg)
case OPTION_NO_M4100:
break;
- case OPTION_MIPS32:
- mips_cpu = CPU_MIPS32;
- break;
-
- case OPTION_NO_MIPS32:
- break;
-
case OPTION_M3900:
mips_cpu = CPU_R3900;
break;
@@ -9411,6 +9206,7 @@ MIPS options:\n\
-mips2 generate MIPS ISA II instructions\n\
-mips3 generate MIPS ISA III instructions\n\
-mips4 generate MIPS ISA IV instructions\n\
+-mips32 generate MIPS32 ISA instructions\n\
-mcpu=CPU generate code for CPU, where CPU is one of:\n"));
first = 1;
@@ -9430,9 +9226,7 @@ MIPS options:\n\
show (stream, "6000", &column, &first);
show (stream, "8000", &column, &first);
show (stream, "10000", &column, &first);
- show (stream, "4Kc", &column, &first);
- show (stream, "4Kp", &column, &first);
- show (stream, "4Km", &column, &first);
+ show (stream, "mips32-4k", &column, &first);
fputc ('\n', stream);
fprintf (stream, _("\
@@ -9448,9 +9242,6 @@ MIPS options:\n\
show (stream, "4650", &column, &first);
fputc ('\n', stream);
- fprintf (stream, _("\
--mips32 generate MIPS32 instructions\n"));
-
fprintf(stream, _("\
-mips16 generate mips16 instructions\n\
-no-mips16 do not generate mips16 instructions\n"));
@@ -10441,12 +10232,18 @@ s_mipsset (x)
/* Permit the user to change the ISA on the fly. Needless to
say, misuse can cause serious problems. */
isa = atoi (name + 4);
- if (isa == 0)
- mips_opts.isa = file_mips_isa;
- else if (isa < 1 || isa > 4)
- as_bad (_("unknown ISA level"));
- else
- mips_opts.isa = isa;
+ switch (isa)
+ {
+ case 0: mips_opts.isa = file_mips_isa; break;
+ case 1: mips_opts.isa = ISA_MIPS1; break;
+ case 2: mips_opts.isa = ISA_MIPS2; break;
+ case 3: mips_opts.isa = ISA_MIPS3; break;
+ case 4: mips_opts.isa = ISA_MIPS4; break;
+ case 32: mips_opts.isa = ISA_MIPS32; break;
+ default:
+ as_bad (_("unknown ISA level"));
+ break;
+ }
}
else if (strcmp (name, "autoextend") == 0)
mips_opts.noautoextend = 0;
@@ -12092,3 +11889,179 @@ s_loc (x)
symbolP->sy_segment = now_seg;
}
#endif
+
+/* CPU name/ISA/number mapping table.
+
+ Entries are grouped by type. The first matching CPU or ISA entry
+ gets chosen by CPU or ISA, so it should be the 'canonical' name
+ for that type. Entries after that within the type are sorted
+ alphabetically.
+
+ Case is ignored in comparison, so put the canonical entry in the
+ appropriate case but everything else in lower case to ease eye pain. */
+static const struct mips_cpu_info mips_cpu_info_table[] =
+{
+ /* MIPS1 ISA */
+ { "MIPS1", 1, ISA_MIPS1, CPU_R3000, },
+ { "mips", 1, ISA_MIPS1, CPU_R3000, },
+
+ /* MIPS2 ISA */
+ { "MIPS2", 1, ISA_MIPS2, CPU_R6000, },
+
+ /* MIPS3 ISA */
+ { "MIPS3", 1, ISA_MIPS3, CPU_R4000, },
+
+ /* MIPS4 ISA */
+ { "MIPS4", 1, ISA_MIPS4, CPU_R8000, },
+
+ /* MIPS32 ISA */
+ { "MIPS32", 1, ISA_MIPS32, CPU_MIPS32, },
+ { "Generic-MIPS32", 0, ISA_MIPS32, CPU_MIPS32, },
+
+ /* XXX for now, MIPS64 -> MIPS3 because of history */
+ { "MIPS64", 1, ISA_MIPS3, CPU_R4000 }, /* XXX! */
+
+ /* R2000 CPU */
+ { "R2000", 0, ISA_MIPS1, CPU_R2000, },
+ { "2000", 0, ISA_MIPS1, CPU_R2000, },
+ { "2k", 0, ISA_MIPS1, CPU_R2000, },
+ { "r2k", 0, ISA_MIPS1, CPU_R2000, },
+
+ /* R3000 CPU */
+ { "R3000", 0, ISA_MIPS1, CPU_R3000, },
+ { "3000", 0, ISA_MIPS1, CPU_R3000, },
+ { "3k", 0, ISA_MIPS1, CPU_R3000, },
+ { "r3k", 0, ISA_MIPS1, CPU_R3000, },
+
+ /* TX3900 CPU */
+ { "R3900", 0, ISA_MIPS1, CPU_R3900, },
+ { "3900", 0, ISA_MIPS1, CPU_R3900, },
+ { "mipstx39", 0, ISA_MIPS1, CPU_R3900, },
+
+ /* R4000 CPU */
+ { "R4000", 0, ISA_MIPS3, CPU_R4000, },
+ { "4000", 0, ISA_MIPS3, CPU_R4000, },
+ { "4k", 0, ISA_MIPS3, CPU_R4000, }, /* beware */
+ { "r4k", 0, ISA_MIPS3, CPU_R4000, },
+
+ /* R4010 CPU */
+ { "R4010", 0, ISA_MIPS2, CPU_R4010, },
+ { "4010", 0, ISA_MIPS2, CPU_R4010, },
+
+ /* R4400 CPU */
+ { "R4400", 0, ISA_MIPS3, CPU_R4400, },
+ { "4400", 0, ISA_MIPS3, CPU_R4400, },
+
+ /* R4600 CPU */
+ { "R4600", 0, ISA_MIPS3, CPU_R4600, },
+ { "4600", 0, ISA_MIPS3, CPU_R4600, },
+ { "mips64orion", 0, ISA_MIPS3, CPU_R4600, },
+ { "orion", 0, ISA_MIPS3, CPU_R4600, },
+
+ /* R4650 CPU */
+ { "R4650", 0, ISA_MIPS3, CPU_R4650, },
+ { "4650", 0, ISA_MIPS3, CPU_R4650, },
+
+ /* R6000 CPU */
+ { "R6000", 0, ISA_MIPS2, CPU_R6000, },
+ { "6000", 0, ISA_MIPS2, CPU_R6000, },
+ { "6k", 0, ISA_MIPS2, CPU_R6000, },
+ { "r6k", 0, ISA_MIPS2, CPU_R6000, },
+
+ /* R8000 CPU */
+ { "R8000", 0, ISA_MIPS4, CPU_R8000, },
+ { "8000", 0, ISA_MIPS4, CPU_R8000, },
+ { "8k", 0, ISA_MIPS4, CPU_R8000, },
+ { "r8k", 0, ISA_MIPS4, CPU_R8000, },
+
+ /* R10000 CPU */
+ { "R10000", 0, ISA_MIPS4, CPU_R10000, },
+ { "10000", 0, ISA_MIPS4, CPU_R10000, },
+ { "10k", 0, ISA_MIPS4, CPU_R10000, },
+ { "r10k", 0, ISA_MIPS4, CPU_R10000, },
+
+ /* VR4100 CPU */
+ { "VR4100", 0, ISA_MIPS3, CPU_VR4100, },
+ { "4100", 0, ISA_MIPS3, CPU_VR4100, },
+ { "mips64vr4100", 0, ISA_MIPS3, CPU_VR4100, },
+ { "r4100", 0, ISA_MIPS3, CPU_VR4100, },
+
+ /* VR4111 CPU */
+ { "VR4111", 0, ISA_MIPS3, CPU_R4111, },
+ { "4111", 0, ISA_MIPS3, CPU_R4111, },
+ { "mips64vr4111", 0, ISA_MIPS3, CPU_R4111, },
+ { "r4111", 0, ISA_MIPS3, CPU_R4111, },
+
+ /* VR4300 CPU */
+ { "VR4300", 0, ISA_MIPS3, CPU_R4300, },
+ { "4300", 0, ISA_MIPS3, CPU_R4300, },
+ { "mips64vr4300", 0, ISA_MIPS3, CPU_R4300, },
+ { "r4300", 0, ISA_MIPS3, CPU_R4300, },
+
+ /* VR5000 CPU */
+ { "VR5000", 0, ISA_MIPS4, CPU_R5000, },
+ { "5000", 0, ISA_MIPS4, CPU_R5000, },
+ { "5k", 0, ISA_MIPS4, CPU_R5000, },
+ { "mips64vr5000", 0, ISA_MIPS4, CPU_R5000, },
+ { "r5000", 0, ISA_MIPS4, CPU_R5000, },
+ { "r5200", 0, ISA_MIPS4, CPU_R5000, },
+ { "r5230", 0, ISA_MIPS4, CPU_R5000, },
+ { "r5231", 0, ISA_MIPS4, CPU_R5000, },
+ { "r5261", 0, ISA_MIPS4, CPU_R5000, },
+ { "r5721", 0, ISA_MIPS4, CPU_R5000, },
+ { "r5k", 0, ISA_MIPS4, CPU_R5000, },
+ { "r7000", 0, ISA_MIPS4, CPU_R5000, },
+
+ /* MIPS32 4K CPU */
+ { "MIPS32-4K", 0, ISA_MIPS32, CPU_MIPS32_4K, },
+ { "4kc", 0, ISA_MIPS32, CPU_MIPS32_4K, },
+ { "4km", 0, ISA_MIPS32, CPU_MIPS32_4K, },
+ { "4kp", 0, ISA_MIPS32, CPU_MIPS32_4K, },
+ { "mips32-4kc", 0, ISA_MIPS32, CPU_MIPS32_4K, },
+ { "mips32-4km", 0, ISA_MIPS32, CPU_MIPS32_4K, },
+ { "mips32-4kp", 0, ISA_MIPS32, CPU_MIPS32_4K, },
+
+ /* End marker. */
+ { NULL, 0, 0, 0, },
+};
+
+static const struct mips_cpu_info *
+mips_cpu_info_from_name (name)
+ const char *name;
+{
+ int i;
+
+ for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
+ if (strcasecmp(name, mips_cpu_info_table[i].name) == 0)
+ return (&mips_cpu_info_table[i]);
+
+ return (NULL);
+}
+
+static const struct mips_cpu_info *
+mips_cpu_info_from_isa (isa)
+ int isa;
+{
+ int i;
+
+ for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
+ if (mips_cpu_info_table[i].is_isa
+ && isa == mips_cpu_info_table[i].isa)
+ return (&mips_cpu_info_table[i]);
+
+ return (NULL);
+}
+
+static const struct mips_cpu_info *
+mips_cpu_info_from_cpu (cpu)
+ int cpu;
+{
+ int i;
+
+ for (i = 0; mips_cpu_info_table[i].name != NULL; i++)
+ if (!mips_cpu_info_table[i].is_isa
+ && cpu == mips_cpu_info_table[i].cpu)
+ return (&mips_cpu_info_table[i]);
+
+ return (NULL);
+}
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
index a45a561..a59ae1d 100644
--- a/gas/doc/as.texinfo
+++ b/gas/doc/as.texinfo
@@ -276,7 +276,8 @@ Here is a brief summary of how to invoke @code{@value{AS}}. For details,
@end ifset
@ifset MIPS
[ -nocpp ] [ -EL ] [ -EB ] [ -G @var{num} ] [ -mcpu=@var{CPU} ]
- [ -mips1 ] [ -mips2 ] [ -mips3 ] [ -m4650 ] [ -no-m4650 ] [ -mips32 ] [ -no-mips32 ]
+ [ -mips1 ] [ -mips2 ] [ -mips3 ] [ -mips4 ] [ -mips32 ]
+ [ -m4650 ] [ -no-m4650 ]
[ --trap ] [ --break ]
[ --emulation=@var{name} ]
@end ifset
@@ -669,10 +670,12 @@ Generate ``little endian'' format output.
@item -mips1
@itemx -mips2
@itemx -mips3
+@itemx -mips4
+@itemx -mips32
Generate code for a particular MIPS Instruction Set Architecture level.
@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
-@samp{-mips2} to the @sc{r6000} processor, and @samp{-mips3} to the @sc{r4000}
-processor.
+@samp{-mips2} to the @sc{r6000} processor, @samp{-mips3} to the @sc{r4000}
+processor, @samp{-mips32} to a generic @sc{MIPS32} processor.
@item -m4650
@itemx -no-m4650
@@ -681,12 +684,6 @@ the @samp{mad} and @samp{madu} instruction, and to not schedule @samp{nop}
instructions around accesses to the @samp{HI} and @samp{LO} registers.
@samp{-no-m4650} turns off this option.
-@item -mips32
-@itemx -no-mips32
-Generate code for the @sc{MIPS32} architecture. This tells the assembler to
-accept ISA level 2 instructions and MIPS32 extensions including some @sc{r4000}
-instructions.
-
@item -mcpu=@var{CPU}
Generate code for a particular MIPS cpu. This has little effect on the
assembler, but it is passed by @code{@value{GCC}}.
diff --git a/gas/doc/c-mips.texi b/gas/doc/c-mips.texi
index 137dfe9..e56156e 100644
--- a/gas/doc/c-mips.texi
+++ b/gas/doc/c-mips.texi
@@ -60,12 +60,14 @@ to select big-endian output, and @samp{-EL} for little-endian.
@itemx -mips2
@itemx -mips3
@itemx -mips4
+@itemx -mips32
Generate code for a particular MIPS Instruction Set Architecture level.
@samp{-mips1} corresponds to the @sc{r2000} and @sc{r3000} processors,
@samp{-mips2} to the @sc{r6000} processor, @samp{-mips3} to the
-@sc{r4000} processor, and @samp{-mips4} to the @sc{r8000} and
-@sc{r10000} processors. You can also switch instruction sets during the
-assembly; see @ref{MIPS ISA,, Directives to override the ISA level}.
+@sc{r4000} processor, @samp{-mips4} to the @sc{r8000} and
+@sc{r10000} processors, and @samp{-mips32} to a generic @sc(MIPS32)
+processor. You can also switch instruction sets during the
+assembly; see @ref{MIPS ISA, Directives to override the ISA level}.
@item -mgp32
Assume that 32-bit general purpose registers are available. This
@@ -140,10 +142,8 @@ rm5721,
6000,
rm7000,
8000,
-10000
-4Kc
-4Km
-4Kp
+10000,
+mips32-4k
@end quotation
@@ -239,8 +239,8 @@ assembly language programmers!
@kindex @code{.set mips@var{n}}
@sc{gnu} @code{@value{AS}} supports an additional directive to change
the @sc{mips} Instruction Set Architecture level on the fly: @code{.set
-mips@var{n}}. @var{n} should be a number from 0 to 4. A value from 1
-to 4 makes the assembler accept instructions for the corresponding
+mips@var{n}}. @var{n} should be a number from 0 to 4, or 32. The values 1
+to 4 and 32 make the assembler accept instructions for the corresponding
@sc{isa} level, from that point on in the assembly. @code{.set
mips@var{n}} affects not only which instructions are permitted, but also
how certain macros are expanded. @code{.set mips0} restores the
diff --git a/gas/po/gas.pot b/gas/po/gas.pot
index 24f3cc4..a7f0c5a 100644
--- a/gas/po/gas.pot
+++ b/gas/po/gas.pot
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-12-01 10:13-0800\n"
+"POT-Creation-Date: 2000-12-01 13:21-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"
@@ -979,8 +979,8 @@ msgid "Unknown segment type"
msgstr ""
#. Probably a memory allocation problem? Give up now.
-#: config/tc-a29k.c:330 config/tc-hppa.c:1412 config/tc-mips.c:1107
-#: config/tc-mips.c:1149 config/tc-sparc.c:846
+#: config/tc-a29k.c:330 config/tc-hppa.c:1412 config/tc-mips.c:1026
+#: config/tc-mips.c:1068 config/tc-sparc.c:846
msgid "Broken assembler. No assembly attempted."
msgstr ""
@@ -1104,7 +1104,7 @@ msgstr ""
msgid "type %d reloc done?\n"
msgstr ""
-#: config/tc-alpha.c:1379 config/tc-alpha.c:1386 config/tc-mips.c:7422
+#: config/tc-alpha.c:1379 config/tc-alpha.c:1386 config/tc-mips.c:7351
msgid "Used $at without \".set noat\""
msgstr ""
@@ -1460,7 +1460,7 @@ msgid "invalid symbol to rename to"
msgstr ""
#: config/tc-arc.c:1009 config/tc-avr.c:372 config/tc-d10v.c:291
-#: config/tc-d30v.c:366 config/tc-mips.c:8850 config/tc-mn10200.c:375
+#: config/tc-d30v.c:366 config/tc-mips.c:8783 config/tc-mn10200.c:375
#: config/tc-pj.c:356 config/tc-ppc.c:4511 config/tc-sh.c:2058
#: config/tc-v850.c:1291
msgid "bad call to md_atof"
@@ -1477,8 +1477,8 @@ msgstr ""
#: config/tc-arc.c:1325 config/tc-arm.c:4570 config/tc-avr.c:852
#: config/tc-cris.c:2733 config/tc-d10v.c:1538 config/tc-d30v.c:1865
-#: config/tc-mips.c:3293 config/tc-mips.c:4225 config/tc-mips.c:5010
-#: config/tc-mips.c:5556 config/tc-ppc.c:4847 config/tc-v850.c:2385
+#: config/tc-mips.c:3225 config/tc-mips.c:4157 config/tc-mips.c:4942
+#: config/tc-mips.c:5488 config/tc-ppc.c:4847 config/tc-v850.c:2385
msgid "expression too complex"
msgstr ""
@@ -1519,7 +1519,7 @@ msgstr ""
msgid "Invalid syntax for .req directive."
msgstr ""
-#: config/tc-arm.c:1506 config/tc-mips.c:10088 read.c:2047
+#: config/tc-arm.c:1506 config/tc-mips.c:9892 read.c:2047
#, c-format
msgid "Alignment too large: %d. assumed."
msgstr ""
@@ -1978,7 +1978,7 @@ msgstr ""
msgid "out of range branch"
msgstr ""
-#: config/tc-arm.c:7096 config/tc-arm.c:7112 config/tc-mips.c:9915
+#: config/tc-arm.c:7096 config/tc-arm.c:7112 config/tc-mips.c:9719
msgid "Branch out of range"
msgstr ""
@@ -2061,7 +2061,7 @@ msgstr ""
msgid "Cannot represent %s relocation in this object file format"
msgstr ""
-#: config/tc-arm.c:7515 config/tc-mips.c:11428 config/tc-sh.c:3177
+#: config/tc-arm.c:7515 config/tc-mips.c:11238 config/tc-sh.c:3177
#, c-format
msgid "Can not represent %s relocation in this object file format"
msgstr ""
@@ -2830,7 +2830,7 @@ msgstr ""
msgid "invalid operands"
msgstr ""
-#: config/tc-h8300.c:1250 config/tc-h8500.c:1104 config/tc-mips.c:8046
+#: config/tc-h8300.c:1250 config/tc-h8500.c:1104 config/tc-mips.c:7979
#: config/tc-sh.c:1877 config/tc-w65.c:740 config/tc-z8k.c:1205
msgid "unknown opcode"
msgstr ""
@@ -3694,7 +3694,7 @@ msgstr ""
msgid "Unknown temporary pseudo register"
msgstr ""
-#: config/tc-i860.c:181 config/tc-mips.c:1104
+#: config/tc-i860.c:181 config/tc-mips.c:1023
#, c-format
msgid "internal error: can't hash `%s': %s\n"
msgstr ""
@@ -4051,7 +4051,7 @@ msgid ""
" -xdebug\t\t debug dependency violation checker\n"
msgstr ""
-#: config/tc-ia64.c:6147 config/tc-mips.c:1091
+#: config/tc-ia64.c:6147 config/tc-mips.c:1010
msgid "Could not set architecture and machine"
msgstr ""
@@ -4578,7 +4578,7 @@ msgstr ""
msgid "Can not do %d byte pic relocation"
msgstr ""
-#: config/tc-m68k.c:919 config/tc-mips.c:11409
+#: config/tc-m68k.c:919 config/tc-mips.c:11219
#, c-format
msgid "Cannot make %s relocation PC relative"
msgstr ""
@@ -5221,327 +5221,327 @@ msgstr ""
msgid "Cannot represent relocation type %s"
msgstr ""
-#: config/tc-mips.c:636
+#: config/tc-mips.c:639
#, c-format
msgid "internal Error, line %d, %s"
msgstr ""
-#: config/tc-mips.c:638
+#: config/tc-mips.c:641
msgid "MIPS internal Error"
msgstr ""
-#: config/tc-mips.c:903
+#: config/tc-mips.c:923
msgid "-G not supported in this configuration."
msgstr ""
-#: config/tc-mips.c:1050
+#: config/tc-mips.c:992
msgid "trap exception not supported at ISA 1"
msgstr ""
-#: config/tc-mips.c:1130
+#: config/tc-mips.c:1049
#, c-format
msgid "internal: can't hash `%s': %s"
msgstr ""
-#: config/tc-mips.c:1138
+#: config/tc-mips.c:1057
#, c-format
msgid "internal error: bad mips16 opcode: %s %s\n"
msgstr ""
-#: config/tc-mips.c:1306
+#: config/tc-mips.c:1225
#, c-format
msgid "returned from mips_ip(%s) insn_opcode = 0x%x\n"
msgstr ""
-#: config/tc-mips.c:1860 config/tc-mips.c:11541
+#: config/tc-mips.c:1779 config/tc-mips.c:11351
msgid "extended instruction in delay slot"
msgstr ""
-#: config/tc-mips.c:1882 config/tc-mips.c:1889
+#: config/tc-mips.c:1801 config/tc-mips.c:1808
#, c-format
msgid "jump to misaligned address (0x%lx)"
msgstr ""
-#: config/tc-mips.c:2538 config/tc-mips.c:2879
+#: config/tc-mips.c:2457 config/tc-mips.c:2811
msgid "Macro instruction expanded into multiple instructions"
msgstr ""
-#: config/tc-mips.c:2932
+#: config/tc-mips.c:2864
msgid "unsupported large constant"
msgstr ""
-#: config/tc-mips.c:2934
+#: config/tc-mips.c:2866
#, c-format
msgid "Instruction %s requires absolute expression"
msgstr ""
-#: config/tc-mips.c:3080
+#: config/tc-mips.c:3012
msgid "Number larger than 32 bits"
msgstr ""
-#: config/tc-mips.c:3101
+#: config/tc-mips.c:3033
msgid "Number larger than 64 bits"
msgstr ""
-#: config/tc-mips.c:3367 config/tc-mips.c:3439 config/tc-mips.c:5118
-#: config/tc-mips.c:5169 config/tc-mips.c:5705 config/tc-mips.c:5768
+#: config/tc-mips.c:3299 config/tc-mips.c:3371 config/tc-mips.c:5050
+#: config/tc-mips.c:5101 config/tc-mips.c:5637 config/tc-mips.c:5700
msgid "PIC code offset overflow (max 16 signed bits)"
msgstr ""
-#: config/tc-mips.c:3678
+#: config/tc-mips.c:3610
#, c-format
msgid "Branch %s is always false (nop)"
msgstr ""
-#: config/tc-mips.c:3683
+#: config/tc-mips.c:3615
#, c-format
msgid "Branch likely %s is always false"
msgstr ""
-#: config/tc-mips.c:3690 config/tc-mips.c:3764 config/tc-mips.c:3867
-#: config/tc-mips.c:3922 config/tc-mips.c:6805 config/tc-mips.c:6814
-#: config/tc-mips.c:6822 config/tc-mips.c:6931
+#: config/tc-mips.c:3622 config/tc-mips.c:3696 config/tc-mips.c:3799
+#: config/tc-mips.c:3854 config/tc-mips.c:6737 config/tc-mips.c:6746
+#: config/tc-mips.c:6754 config/tc-mips.c:6863
msgid "Unsupported large constant"
msgstr ""
#. result is always true
-#: config/tc-mips.c:3726
+#: config/tc-mips.c:3658
#, c-format
msgid "Branch %s is always true"
msgstr ""
-#: config/tc-mips.c:3998 config/tc-mips.c:4105
+#: config/tc-mips.c:3930 config/tc-mips.c:4037
msgid "Divide by zero."
msgstr ""
-#: config/tc-mips.c:4689
+#: config/tc-mips.c:4621
msgid "MIPS PIC call to register other than $25"
msgstr ""
-#: config/tc-mips.c:4694 config/tc-mips.c:4806
+#: config/tc-mips.c:4626 config/tc-mips.c:4738
msgid "No .cprestore pseudo-op used in PIC code"
msgstr ""
-#: config/tc-mips.c:4879 config/tc-mips.c:4968 config/tc-mips.c:5456
-#: config/tc-mips.c:5497 config/tc-mips.c:5515 config/tc-mips.c:6144
+#: config/tc-mips.c:4811 config/tc-mips.c:4900 config/tc-mips.c:5388
+#: config/tc-mips.c:5429 config/tc-mips.c:5447 config/tc-mips.c:6076
msgid "opcode not supported on this processor"
msgstr ""
-#: config/tc-mips.c:5975 config/tc-mips.c:6699
+#: config/tc-mips.c:5907 config/tc-mips.c:6631
msgid "Macro used $at after \".set noat\""
msgstr ""
-#: config/tc-mips.c:6115 config/tc-mips.c:6133
+#: config/tc-mips.c:6047 config/tc-mips.c:6065
msgid "rotate count too large"
msgstr ""
-#: config/tc-mips.c:6184
+#: config/tc-mips.c:6116
#, c-format
msgid "Instruction %s: result is always false"
msgstr ""
-#: config/tc-mips.c:6353
+#: config/tc-mips.c:6285
#, c-format
msgid "Instruction %s: result is always true"
msgstr ""
-#: config/tc-mips.c:6492 config/tc-mips.c:6519 config/tc-mips.c:6591
-#: config/tc-mips.c:6616
+#: config/tc-mips.c:6424 config/tc-mips.c:6451 config/tc-mips.c:6523
+#: config/tc-mips.c:6548
msgid "operand overflow"
msgstr ""
#. FIXME: Check if this is one of the itbl macros, since they
#. are added dynamically.
-#: config/tc-mips.c:6695
+#: config/tc-mips.c:6627
#, c-format
msgid "Macro %s not implemented yet"
msgstr ""
-#: config/tc-mips.c:6965
+#: config/tc-mips.c:6897
#, c-format
msgid "internal: bad mips opcode (mask error): %s %s"
msgstr ""
-#: config/tc-mips.c:7019
+#: config/tc-mips.c:6953
#, c-format
msgid "internal: bad mips opcode (unknown operand type `%c'): %s %s"
msgstr ""
-#: config/tc-mips.c:7026
+#: config/tc-mips.c:6960
#, c-format
msgid "internal: bad mips opcode (bits 0x%lx undefined): %s %s"
msgstr ""
-#: config/tc-mips.c:7134
+#: config/tc-mips.c:7068
#, c-format
-msgid "opcode not supported on this processor: %s (MIPS%d)"
+msgid "opcode not supported on this processor: %s (%s)"
msgstr ""
-#: config/tc-mips.c:7204
+#: config/tc-mips.c:7139
#, c-format
msgid "Improper shift amount (%ld)"
msgstr ""
-#: config/tc-mips.c:7230 config/tc-mips.c:8386 config/tc-mips.c:8501
+#: config/tc-mips.c:7165 config/tc-mips.c:8319 config/tc-mips.c:8434
#, c-format
msgid "Invalid value for `%s' (%lu)"
msgstr ""
-#: config/tc-mips.c:7248 config/tc-mips.c:7278
+#: config/tc-mips.c:7183
#, c-format
msgid "Illegal break code (%ld)"
msgstr ""
-#: config/tc-mips.c:7262
+#: config/tc-mips.c:7197
#, c-format
msgid "Illegal lower break code (%ld)"
msgstr ""
-#: config/tc-mips.c:7293
+#: config/tc-mips.c:7210
#, c-format
-msgid "Illegal syscall code (%ld)"
+msgid "Illegal 20-bit code (%ld)"
msgstr ""
-#: config/tc-mips.c:7305
+#: config/tc-mips.c:7222
#, c-format
msgid "Coproccesor code > 25 bits (%ld)"
msgstr ""
-#: config/tc-mips.c:7319
+#: config/tc-mips.c:7235
+#, c-format
+msgid "Illegal 19-bit code (%ld)"
+msgstr ""
+
+#: config/tc-mips.c:7247
#, c-format
msgid "Invalidate performance regster (%ld)"
msgstr ""
-#: config/tc-mips.c:7355
+#: config/tc-mips.c:7284
#, c-format
msgid "Invalid register number (%d)"
msgstr ""
-#: config/tc-mips.c:7515
+#: config/tc-mips.c:7448
#, c-format
msgid "Invalid float register number (%d)"
msgstr ""
-#: config/tc-mips.c:7525
+#: config/tc-mips.c:7458
#, c-format
msgid "Float register should be even, was %d"
msgstr ""
-#: config/tc-mips.c:7576
+#: config/tc-mips.c:7509
msgid "absolute expression required"
msgstr ""
-#: config/tc-mips.c:7637
+#: config/tc-mips.c:7570
#, c-format
msgid "Bad floating point constant: %s"
msgstr ""
-#: config/tc-mips.c:7759
+#: config/tc-mips.c:7692
msgid "Can't use floating point insn in this section"
msgstr ""
-#: config/tc-mips.c:7813
+#: config/tc-mips.c:7746
msgid "16 bit expression not in range 0..65535"
msgstr ""
-#: config/tc-mips.c:7850
+#: config/tc-mips.c:7783
msgid "16 bit expression not in range -32768..32767"
msgstr ""
-#: config/tc-mips.c:7921
+#: config/tc-mips.c:7854
msgid "lui expression not in range 0..65535"
msgstr ""
-#: config/tc-mips.c:7945
+#: config/tc-mips.c:7878
#, c-format
msgid "invalid condition code register $fcc%d"
msgstr ""
-#: config/tc-mips.c:7970
+#: config/tc-mips.c:7903
msgid "invalid coprocessor sub-selection value (0-7)"
msgstr ""
-#: config/tc-mips.c:7975
+#: config/tc-mips.c:7908
#, c-format
msgid "bad char = '%c'\n"
msgstr ""
-#: config/tc-mips.c:7988 config/tc-mips.c:8526
+#: config/tc-mips.c:7921 config/tc-mips.c:8459
msgid "illegal operands"
msgstr ""
-#: config/tc-mips.c:8055
+#: config/tc-mips.c:7988
msgid "unrecognized opcode"
msgstr ""
-#: config/tc-mips.c:8164
+#: config/tc-mips.c:8097
#, c-format
msgid "invalid register number (%d)"
msgstr ""
-#: config/tc-mips.c:8245
+#: config/tc-mips.c:8178
msgid "used $at without \".set noat\""
msgstr ""
-#: config/tc-mips.c:8420
+#: config/tc-mips.c:8353
msgid "can't parse register list"
msgstr ""
-#: config/tc-mips.c:8454 config/tc-mips.c:8484
+#: config/tc-mips.c:8387 config/tc-mips.c:8417
msgid "invalid register list"
msgstr ""
-#: config/tc-mips.c:8651
+#: config/tc-mips.c:8584
msgid "extended operand requested but not required"
msgstr ""
-#: config/tc-mips.c:8653
+#: config/tc-mips.c:8586
msgid "invalid unextended operand value"
msgstr ""
-#: config/tc-mips.c:8681
+#: config/tc-mips.c:8614
msgid "operand value out of range for instruction"
msgstr ""
-#: config/tc-mips.c:9166
-#, c-format
-msgid "ignoring invalid leading 'v' in -mcpu=%s switch"
-msgstr ""
-
-#: config/tc-mips.c:9172
+#: config/tc-mips.c:8987
#, c-format
msgid "invalid architecture -mcpu=%s"
msgstr ""
-#: config/tc-mips.c:9228
+#: config/tc-mips.c:9036
msgid "-G may not be used with embedded PIC code"
msgstr ""
-#: config/tc-mips.c:9240
+#: config/tc-mips.c:9048
msgid "-call_shared is supported only for ELF format"
msgstr ""
-#: config/tc-mips.c:9246 config/tc-mips.c:10330 config/tc-mips.c:10498
+#: config/tc-mips.c:9054 config/tc-mips.c:10134 config/tc-mips.c:10308
msgid "-G may not be used with SVR4 PIC code"
msgstr ""
-#: config/tc-mips.c:9255
+#: config/tc-mips.c:9063
msgid "-non_shared is supported only for ELF format"
msgstr ""
-#: config/tc-mips.c:9271
+#: config/tc-mips.c:9079
msgid "-G is not supported for this configuration"
msgstr ""
-#: config/tc-mips.c:9276
+#: config/tc-mips.c:9084
msgid "-G may not be used with SVR4 or embedded PIC code"
msgstr ""
-#: config/tc-mips.c:9300
+#: config/tc-mips.c:9108
msgid "No compiled in support for 64 bit object file format"
msgstr ""
-#: config/tc-mips.c:9388
+#: config/tc-mips.c:9196
msgid ""
"MIPS options:\n"
"-membedded-pic\t\tgenerate embedded position independent code\n"
@@ -5552,33 +5552,30 @@ msgid ""
"\t\t\timplicitly with the gp register [default 8]\n"
msgstr ""
-#: config/tc-mips.c:9396
+#: config/tc-mips.c:9204
msgid ""
"-mips1\t\t\tgenerate MIPS ISA I instructions\n"
"-mips2\t\t\tgenerate MIPS ISA II instructions\n"
"-mips3\t\t\tgenerate MIPS ISA III instructions\n"
"-mips4\t\t\tgenerate MIPS ISA IV instructions\n"
+"-mips32 generate MIPS32 ISA instructions\n"
"-mcpu=CPU\t\tgenerate code for CPU, where CPU is one of:\n"
msgstr ""
-#: config/tc-mips.c:9425
+#: config/tc-mips.c:9232
msgid ""
"-mCPU\t\t\tequivalent to -mcpu=CPU.\n"
"-no-mCPU\t\tdon't generate code specific to CPU.\n"
"\t\t\tFor -mCPU and -no-mCPU, CPU must be one of:\n"
msgstr ""
-#: config/tc-mips.c:9438
-msgid "-mips32 generate MIPS32 instructions\n"
-msgstr ""
-
-#: config/tc-mips.c:9441
+#: config/tc-mips.c:9245
msgid ""
"-mips16\t\t\tgenerate mips16 instructions\n"
"-no-mips16\t\tdo not generate mips16 instructions\n"
msgstr ""
-#: config/tc-mips.c:9444
+#: config/tc-mips.c:9248
msgid ""
"-O0\t\t\tremove unneeded NOPs, do not swap branches\n"
"-O\t\t\tremove unneeded NOPs and swap branches\n"
@@ -5587,7 +5584,7 @@ msgid ""
"--break, --no-trap\tbreak exception on div by 0 and mult overflow\n"
msgstr ""
-#: config/tc-mips.c:9451
+#: config/tc-mips.c:9255
msgid ""
"-KPIC, -call_shared\tgenerate SVR4 position independent code\n"
"-non_shared\t\tdo not generate position independent code\n"
@@ -5596,170 +5593,170 @@ msgid ""
"-64\t\t\tcreate 64 bit object file\n"
msgstr ""
-#: config/tc-mips.c:9508
+#: config/tc-mips.c:9312
#, c-format
msgid "Unsupported reloc size %d"
msgstr ""
-#: config/tc-mips.c:9611
+#: config/tc-mips.c:9415
msgid "Unmatched %%hi reloc"
msgstr ""
-#: config/tc-mips.c:9735
+#: config/tc-mips.c:9539
msgid "Invalid PC relative reloc"
msgstr ""
-#: config/tc-mips.c:9845 config/tc-sparc.c:3101 config/tc-sparc.c:3108
+#: config/tc-mips.c:9649 config/tc-sparc.c:3101 config/tc-sparc.c:3108
#: config/tc-sparc.c:3115 config/tc-sparc.c:3122 config/tc-sparc.c:3129
#: config/tc-sparc.c:3138 config/tc-sparc.c:3149 config/tc-sparc.c:3175
#: config/tc-sparc.c:3203 write.c:984 write.c:1048
msgid "relocation overflow"
msgstr ""
-#: config/tc-mips.c:9861
+#: config/tc-mips.c:9665
#, c-format
msgid "Branch to odd address (%lx)"
msgstr ""
-#: config/tc-mips.c:10025
+#: config/tc-mips.c:9829
#, c-format
msgid "%08lx UNDEFINED\n"
msgstr ""
-#: config/tc-mips.c:10091
+#: config/tc-mips.c:9895
msgid "Alignment negative: 0 assumed."
msgstr ""
-#: config/tc-mips.c:10179
+#: config/tc-mips.c:9983
msgid "No read only data section in this object file format"
msgstr ""
-#: config/tc-mips.c:10202
+#: config/tc-mips.c:10006
msgid "Global pointers not supported; recompile -G 0"
msgstr ""
-#: config/tc-mips.c:10288
+#: config/tc-mips.c:10092
#, c-format
msgid "%s: no such section"
msgstr ""
-#: config/tc-mips.c:10325
+#: config/tc-mips.c:10129
#, c-format
msgid ".option pic%d not supported"
msgstr ""
-#: config/tc-mips.c:10336
+#: config/tc-mips.c:10140
#, c-format
msgid "Unrecognized option \"%s\""
msgstr ""
-#: config/tc-mips.c:10399
+#: config/tc-mips.c:10203
msgid "`noreorder' must be set before `nomacro'"
msgstr ""
-#: config/tc-mips.c:10434
+#: config/tc-mips.c:10244
msgid "unknown ISA level"
msgstr ""
-#: config/tc-mips.c:10457
+#: config/tc-mips.c:10267
msgid ".set pop with no .set push"
msgstr ""
-#: config/tc-mips.c:10481
+#: config/tc-mips.c:10291
#, c-format
msgid "Tried to set unrecognized symbol: %s\n"
msgstr ""
-#: config/tc-mips.c:10531
+#: config/tc-mips.c:10341
msgid ".cpload not in noreorder section"
msgstr ""
-#: config/tc-mips.c:10613
+#: config/tc-mips.c:10423
msgid "Unsupported use of .gpword"
msgstr ""
-#: config/tc-mips.c:10750
+#: config/tc-mips.c:10560
msgid "expected `$'"
msgstr ""
-#: config/tc-mips.c:10758
+#: config/tc-mips.c:10568
msgid "Bad register number"
msgstr ""
-#: config/tc-mips.c:10774
+#: config/tc-mips.c:10584
msgid "Unrecognized register name"
msgstr ""
-#: config/tc-mips.c:10973
+#: config/tc-mips.c:10783
msgid "unsupported PC relative reference to different section"
msgstr ""
-#: config/tc-mips.c:11082
+#: config/tc-mips.c:10892
msgid "unsupported relocation"
msgstr ""
-#: config/tc-mips.c:11187
+#: config/tc-mips.c:10997
msgid "AT used after \".set noat\" or macro used after \".set nomacro\""
msgstr ""
-#: config/tc-mips.c:11250
+#: config/tc-mips.c:11060
msgid "Double check fx_r_type in tc-mips.c:tc_gen_reloc"
msgstr ""
-#: config/tc-mips.c:11762
+#: config/tc-mips.c:11572
msgid "missing `.end' at end of assembly"
msgstr ""
-#: config/tc-mips.c:11777
+#: config/tc-mips.c:11587
msgid "Expected simple number."
msgstr ""
-#: config/tc-mips.c:11803
+#: config/tc-mips.c:11613
#, c-format
msgid " *input_line_pointer == '%c' 0x%02x\n"
msgstr ""
-#: config/tc-mips.c:11805
+#: config/tc-mips.c:11615
msgid "Invalid number"
msgstr ""
-#: config/tc-mips.c:11859
+#: config/tc-mips.c:11669
msgid ".end not in text section"
msgstr ""
-#: config/tc-mips.c:11863
+#: config/tc-mips.c:11673
msgid ".end directive without a preceding .ent directive."
msgstr ""
-#: config/tc-mips.c:11872
+#: config/tc-mips.c:11682
msgid ".end symbol does not match .ent symbol."
msgstr ""
-#: config/tc-mips.c:11875
+#: config/tc-mips.c:11685
msgid ".end directive missing or unknown symbol"
msgstr ""
-#: config/tc-mips.c:11950
+#: config/tc-mips.c:11760
msgid ".ent or .aent not in text section."
msgstr ""
-#: config/tc-mips.c:11953
+#: config/tc-mips.c:11763
msgid "missing `.end'"
msgstr ""
-#: config/tc-mips.c:11986 ecoff.c:3205
+#: config/tc-mips.c:11796 ecoff.c:3205
msgid ".frame outside of .ent"
msgstr ""
-#: config/tc-mips.c:11997 ecoff.c:3216
+#: config/tc-mips.c:11807 ecoff.c:3216
msgid "Bad .frame directive"
msgstr ""
-#: config/tc-mips.c:12027
+#: config/tc-mips.c:11837
msgid ".mask/.fmask outside of .ent"
msgstr ""
-#: config/tc-mips.c:12034
+#: config/tc-mips.c:11844
msgid "Bad .mask/.fmask directive"
msgstr ""
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 363c8f5..a7deff8 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -88,6 +88,7 @@ if [istarget mips*-*-*] then {
run_dump_test "mips4100"
run_dump_test "lineno"
run_dump_test "sync"
+ run_dump_test "mips32"
# Make sure that -mcpu=FOO and -mFOO are equivalent. Assemble a file
# containing 4650-specific instructions with -m4650 and -mcpu=4650,
diff --git a/gas/testsuite/gas/mips/mips32.d b/gas/testsuite/gas/mips/mips32.d
new file mode 100644
index 0000000..5573e9d
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips32.d
@@ -0,0 +1,49 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS MIPS32 instructions
+#as: -mips32
+
+# Check MIPS32 instruction assembly
+
+.*: +file format elf.*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 70410821 clo \$at,\$v0
+0+0004 <[^>]*> 70831820 clz \$v1,\$a0
+0+0008 <[^>]*> 70a60000 mad \$a1,\$a2
+0+000c <[^>]*> 70e80001 madu \$a3,\$t0
+0+0010 <[^>]*> 712a0004 msub \$t1,\$t2
+0+0014 <[^>]*> 716c0005 msubu \$t3,\$t4
+0+0018 <[^>]*> 71cf6802 mul \$t5,\$t6,\$t7
+0+001c <[^>]*> ce040000 pref 0x4,0\(\$s0\)
+0+0020 <[^>]*> ce247fff pref 0x4,32767\(\$s1\)
+0+0024 <[^>]*> ce448000 pref 0x4,-32768\(\$s2\)
+0+0028 <[^>]*> 00000040 ssnop
+0+002c <[^>]*> 4900fff4 bc2f 0+0000 <text_label>
+0+0030 <[^>]*> 00000000 nop
+0+0034 <[^>]*> 4902fff2 bc2fl 0+0000 <text_label>
+0+0038 <[^>]*> 00000000 nop
+0+003c <[^>]*> 4901fff0 bc2t 0+0000 <text_label>
+0+0040 <[^>]*> 00000000 nop
+0+0044 <[^>]*> 4903ffee bc2tl 0+0000 <text_label>
+0+0048 <[^>]*> 00000000 nop
+0+004c <[^>]*> 48411000 cfc2 \$at,\$2
+0+0050 <[^>]*> 4b234567 c2 0x1234567
+0+0054 <[^>]*> 48c21800 ctc2 \$v0,\$3
+0+0058 <[^>]*> 48032000 mfc2 \$v1,\$4
+0+005c <[^>]*> 48042800 mfc2 \$a0,\$5
+0+0060 <[^>]*> 48053007 mfc2 \$a1,\$6,7
+0+0064 <[^>]*> 48863800 mtc2 \$a2,\$7
+0+0068 <[^>]*> 48874000 mtc2 \$a3,\$8
+0+006c <[^>]*> 48884807 mtc2 \$t0,\$9,7
+0+0070 <[^>]*> bc250000 cache 0x5,0\(\$at\)
+0+0074 <[^>]*> bc457fff cache 0x5,32767\(\$v0\)
+0+0078 <[^>]*> bc658000 cache 0x5,-32768\(\$v1\)
+0+007c <[^>]*> 42000018 eret
+0+0080 <[^>]*> 42000008 tlbp
+0+0084 <[^>]*> 42000001 tlbr
+0+0088 <[^>]*> 42000002 tlbwi
+0+008c <[^>]*> 42000006 tlbwr
+0+0090 <[^>]*> 42000020 wait
+0+0094 <[^>]*> 42000020 wait
+0+0098 <[^>]*> 4359e260 wait 0x56789
+0+009c <[^>]*> 00000000 nop
diff --git a/gas/testsuite/gas/mips/mips32.s b/gas/testsuite/gas/mips/mips32.s
new file mode 100644
index 0000000..240909a
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips32.s
@@ -0,0 +1,63 @@
+# source file to test assembly of mips32 instructions
+
+ .set noreorder
+ .set noat
+
+ .globl text_label .text
+text_label:
+
+ # unprivileged CPU instructions
+
+ clo $1, $2
+ clz $3, $4
+ madd $5, $6 # disassembles as mad ...
+ maddu $7, $8 # disassembles as madu ...
+ msub $9, $10
+ msubu $11, $12
+ mul $13, $14, $15
+ pref 4, ($16)
+ pref 4, 32767($17)
+ pref 4, -32768($18)
+ ssnop
+
+
+ # unprivileged coprocessor instructions.
+ # these tests use cp2 to avoid other (cp0, fpu, prefetch) opcodes.
+
+ bc2f text_label
+ nop
+ bc2fl text_label
+ nop
+ bc2t text_label
+ nop
+ bc2tl text_label
+ nop
+ # XXX other BCzCond encodings not currently expressable
+ cfc2 $1, $2
+ cop2 0x1234567 # disassembles as c2 ...
+ ctc2 $2, $3
+ mfc2 $3, $4
+ mfc2 $4, $5, 0 # disassembles without sel
+ mfc2 $5, $6, 7
+ mtc2 $6, $7
+ mtc2 $7, $8, 0 # disassembles without sel
+ mtc2 $8, $9, 7
+
+
+ # privileged instructions
+
+ cache 5, ($1)
+ cache 5, 32767($2)
+ cache 5, -32768($3)
+ eret
+ tlbp
+ tlbr
+ tlbwi
+ tlbwr
+ wait
+ wait 0 # disassembles without code
+ wait 0x56789
+
+ # padding to a cache line boundary so it's more likely to
+ # pass everywhere
+ nop
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index aa2d4e0..a1ef885 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,9 @@
+2000-10-16 Chris Demetriou <cgd@sibyte.com>
+
+ * mips.h (E_MIPS_ARCH_32): New constant.
+ (E_MIPS_MACH_MIPS32, E_MIPS_MACH_MIPS32_4K): Replace the
+ former with the latter.
+
2000-11-30 Jan Hubicka <jh@suse.cz>
* common.h (EM_X86_64): New macro.
diff --git a/include/elf/mips.h b/include/elf/mips.h
index 18185e7..41f52cd 100644
--- a/include/elf/mips.h
+++ b/include/elf/mips.h
@@ -121,6 +121,9 @@ END_RELOC_NUMBERS (R_MIPS_maxext)
/* -mips4 code. */
#define E_MIPS_ARCH_4 0x30000000
+/* -mips32 code. */
+#define E_MIPS_ARCH_32 0x50000000
+
/* The ABI of the file. Also see EF_MIPS_ABI2 above. */
#define EF_MIPS_ABI 0x0000F000
@@ -153,9 +156,7 @@ END_RELOC_NUMBERS (R_MIPS_maxext)
#define E_MIPS_MACH_4100 0x00830000
#define E_MIPS_MACH_4650 0x00850000
#define E_MIPS_MACH_4111 0x00880000
-/* -mips32 code.
- It is easier to treat MIPS32 as a machine rather than an architecture. */
-#define E_MIPS_MACH_MIPS32 0x00890000
+#define E_MIPS_MACH_MIPS32_4K 0x00890000
/* Processor specific section indices. These sections do not actually
exist. Symbols with a st_shndx field corresponding to one of these
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index 902544a..ceb0317 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -8,6 +8,23 @@
(MIPS operand specifier comments): Remove 'm', add 'U' and
'J', and update the meaning of 'B' so that it's more general.
+ * mips.h (INSN_ISA1, INSN_ISA2, INSN_ISA3, INSN_ISA4,
+ INSN_ISA5): Renumber, redefine to mean the ISA at which the
+ instruction was added.
+ (INSN_ISA32): New constant.
+ (INSN_4650, INSN_4010, INSN_4100, INSN_3900, INSN_GP32):
+ Renumber to avoid new and/or renumbered INSN_* constants.
+ (INSN_MIPS32): Delete.
+ (ISA_UNKNOWN): New constant to indicate unknown ISA.
+ (ISA_MIPS1, ISA_MIPS2, ISA_MIPS3, ISA_MIPS4, ISA_MIPS5,
+ ISA_MIPS32): New constants, defined to be the mask of INSN_*
+ constants available at that ISA level.
+ (CPU_UNKNOWN): New constant to indicate unknown CPU.
+ (CPU_4K, CPU_MIPS32_4K): Rename the former to the latter,
+ define it with a unique value.
+ (OPCODE_IS_MEMBER): Update for new ISA membership-related
+ constant meanings.
+
2000-10-20 Jakub Jelinek <jakub@redhat.com>
* sparc.h (enum sparc_opcode_arch_val): Add SPARC_OPCODE_ARCH_V9B.
diff --git a/include/opcode/mips.h b/include/opcode/mips.h
index 61931f6..7eaba30 100644
--- a/include/opcode/mips.h
+++ b/include/opcode/mips.h
@@ -302,41 +302,43 @@ struct mips_opcode
disassembler, and requires special treatment by the assembler. */
#define INSN_MACRO 0xffffffff
-
-
-
-
-/* MIPS ISA field--CPU level at which insn is supported. */
-#define INSN_ISA 0x0000000F
-/* An instruction which is not part of any basic MIPS ISA.
- (ie it is a chip specific instruction) */
-#define INSN_NO_ISA 0x00000000
-/* MIPS ISA 1 instruction. */
-#define INSN_ISA1 0x00000001
-/* MIPS ISA 2 instruction (R6000 or R4000). */
-#define INSN_ISA2 0x00000002
-/* MIPS ISA 3 instruction (R4000). */
-#define INSN_ISA3 0x00000003
-/* MIPS ISA 4 instruction (R8000). */
-#define INSN_ISA4 0x00000004
-#define INSN_ISA5 0x00000005
+/* Masks used to mark instructions to indicate which MIPS ISA level
+ they were introduced in. ISAs, as defined below, are logical
+ ORs of these bits, indicatingthat they support the instructions
+ defined at the given level. */
+
+#define INSN_ISA1 0x00000010
+#define INSN_ISA2 0x00000020
+#define INSN_ISA3 0x00000040
+#define INSN_ISA4 0x00000080
+#define INSN_ISA5 0x00000100
+#define INSN_ISA32 0x00000200
/* Chip specific instructions. These are bitmasks. */
+
/* MIPS R4650 instruction. */
-#define INSN_4650 0x00000010
+#define INSN_4650 0x00010000
/* LSI R4010 instruction. */
-#define INSN_4010 0x00000020
-/* NEC VR4100 instruction. */
-#define INSN_4100 0x00000040
+#define INSN_4010 0x00020000
+/* NEC VR4100 instruction. */
+#define INSN_4100 0x00040000
/* Toshiba R3900 instruction. */
-#define INSN_3900 0x00000080
-/* MIPS32 instruction (4Kc, 4Km, 4Kp). */
-#define INSN_MIPS32 0x00000100
-/* 32-bit code running on a ISA3+ CPU. */
-#define INSN_GP32 0x00001000
+#define INSN_3900 0x00080000
+/* 32-bit code running on a ISA3+ CPU. */
+#define INSN_GP32 0x00100000
+
+/* MIPS ISA defines, use instead of hardcoding ISA level. */
+
+#define ISA_UNKNOWN 0 /* Gas internal use. */
+#define ISA_MIPS1 (INSN_ISA1)
+#define ISA_MIPS2 (ISA_MIPS1 | INSN_ISA2)
+#define ISA_MIPS3 (ISA_MIPS2 | INSN_ISA3)
+#define ISA_MIPS4 (ISA_MIPS3 | INSN_ISA4)
+#define ISA_MIPS32 (ISA_MIPS2 | INSN_ISA32)
/* CPU defines, use instead of hardcoding processor number. Keep this
in sync with bfd/archures.c in order for machine selection to work. */
+#define CPU_UNKNOWN 0 /* Gas internal use. */
#define CPU_R2000 2000
#define CPU_R3000 3000
#define CPU_R3900 3900
@@ -354,7 +356,7 @@ struct mips_opcode
#define CPU_R10000 10000
#define CPU_MIPS16 16
#define CPU_MIPS32 32
-#define CPU_4K CPU_MIPS32
+#define CPU_MIPS32_4K 3204113 /* 32, 04, octal 'K' */
/* Test for membership in an ISA including chip specific ISAs.
INSN is pointer to an element of the opcode table; ISA is the
@@ -365,236 +367,235 @@ struct mips_opcode
in the MIPS gas docs. */
#define OPCODE_IS_MEMBER(insn, isa, cpu, gp32) \
- ((((insn)->membership & INSN_ISA) != 0 \
- && ((insn)->membership & INSN_ISA) <= (unsigned) isa \
+ ((((insn)->membership & isa) != 0 \
&& ((insn)->membership & INSN_GP32 ? gp32 : 1)) \
|| (cpu == CPU_R4650 && ((insn)->membership & INSN_4650) != 0) \
|| (cpu == CPU_R4010 && ((insn)->membership & INSN_4010) != 0) \
|| ((cpu == CPU_VR4100 || cpu == CPU_R4111) \
&& ((insn)->membership & INSN_4100) != 0) \
- || (cpu == CPU_MIPS32 && ((insn)->membership & INSN_MIPS32) != 0) \
|| (cpu == CPU_R3900 && ((insn)->membership & INSN_3900) != 0))
/* This is a list of macro expanded instructions.
- *
- * _I appended means immediate
- * _A appended means address
- * _AB appended means address with base register
- * _D appended means 64 bit floating point constant
- * _S appended means 32 bit floating point constant
- */
-enum {
- M_ABS,
- M_ADD_I,
- M_ADDU_I,
- M_AND_I,
- M_BEQ,
- M_BEQ_I,
- M_BEQL_I,
- M_BGE,
- M_BGEL,
- M_BGE_I,
- M_BGEL_I,
- M_BGEU,
- M_BGEUL,
- M_BGEU_I,
- M_BGEUL_I,
- M_BGT,
- M_BGTL,
- M_BGT_I,
- M_BGTL_I,
- M_BGTU,
- M_BGTUL,
- M_BGTU_I,
- M_BGTUL_I,
- M_BLE,
- M_BLEL,
- M_BLE_I,
- M_BLEL_I,
- M_BLEU,
- M_BLEUL,
- M_BLEU_I,
- M_BLEUL_I,
- M_BLT,
- M_BLTL,
- M_BLT_I,
- M_BLTL_I,
- M_BLTU,
- M_BLTUL,
- M_BLTU_I,
- M_BLTUL_I,
- M_BNE,
- M_BNE_I,
- M_BNEL_I,
- M_DABS,
- M_DADD_I,
- M_DADDU_I,
- M_DDIV_3,
- M_DDIV_3I,
- M_DDIVU_3,
- M_DDIVU_3I,
- M_DIV_3,
- M_DIV_3I,
- M_DIVU_3,
- M_DIVU_3I,
- M_DLA_AB,
- M_DLI,
- M_DMUL,
- M_DMUL_I,
- M_DMULO,
- M_DMULO_I,
- M_DMULOU,
- M_DMULOU_I,
- M_DREM_3,
- M_DREM_3I,
- M_DREMU_3,
- M_DREMU_3I,
- M_DSUB_I,
- M_DSUBU_I,
- M_DSUBU_I_2,
- M_J_A,
- M_JAL_1,
- M_JAL_2,
- M_JAL_A,
- M_L_DOB,
- M_L_DAB,
- M_LA_AB,
- M_LB_A,
- M_LB_AB,
- M_LBU_A,
- M_LBU_AB,
- M_LD_A,
- M_LD_OB,
- M_LD_AB,
- M_LDC1_AB,
- M_LDC2_AB,
- M_LDC3_AB,
- M_LDL_AB,
- M_LDR_AB,
- M_LH_A,
- M_LH_AB,
- M_LHU_A,
- M_LHU_AB,
- M_LI,
- M_LI_D,
- M_LI_DD,
- M_LI_S,
- M_LI_SS,
- M_LL_AB,
- M_LLD_AB,
- M_LS_A,
- M_LW_A,
- M_LW_AB,
- M_LWC0_A,
- M_LWC0_AB,
- M_LWC1_A,
- M_LWC1_AB,
- M_LWC2_A,
- M_LWC2_AB,
- M_LWC3_A,
- M_LWC3_AB,
- M_LWL_A,
- M_LWL_AB,
- M_LWR_A,
- M_LWR_AB,
- M_LWU_AB,
- M_MUL,
- M_MUL_I,
- M_MULO,
- M_MULO_I,
- M_MULOU,
- M_MULOU_I,
- M_NOR_I,
- M_OR_I,
- M_REM_3,
- M_REM_3I,
- M_REMU_3,
- M_REMU_3I,
- M_ROL,
- M_ROL_I,
- M_ROR,
- M_ROR_I,
- M_S_DA,
- M_S_DOB,
- M_S_DAB,
- M_S_S,
- M_SC_AB,
- M_SCD_AB,
- M_SD_A,
- M_SD_OB,
- M_SD_AB,
- M_SDC1_AB,
- M_SDC2_AB,
- M_SDC3_AB,
- M_SDL_AB,
- M_SDR_AB,
- M_SEQ,
- M_SEQ_I,
- M_SGE,
- M_SGE_I,
- M_SGEU,
- M_SGEU_I,
- M_SGT,
- M_SGT_I,
- M_SGTU,
- M_SGTU_I,
- M_SLE,
- M_SLE_I,
- M_SLEU,
- M_SLEU_I,
- M_SLT_I,
- M_SLTU_I,
- M_SNE,
- M_SNE_I,
- M_SB_A,
- M_SB_AB,
- M_SH_A,
- M_SH_AB,
- M_SW_A,
- M_SW_AB,
- M_SWC0_A,
- M_SWC0_AB,
- M_SWC1_A,
- M_SWC1_AB,
- M_SWC2_A,
- M_SWC2_AB,
- M_SWC3_A,
- M_SWC3_AB,
- M_SWL_A,
- M_SWL_AB,
- M_SWR_A,
- M_SWR_AB,
- M_SUB_I,
- M_SUBU_I,
- M_SUBU_I_2,
- M_TEQ_I,
- M_TGE_I,
- M_TGEU_I,
- M_TLT_I,
- M_TLTU_I,
- M_TNE_I,
- M_TRUNCWD,
- M_TRUNCWS,
- M_ULD,
- M_ULD_A,
- M_ULH,
- M_ULH_A,
- M_ULHU,
- M_ULHU_A,
- M_ULW,
- M_ULW_A,
- M_USH,
- M_USH_A,
- M_USW,
- M_USW_A,
- M_USD,
- M_USD_A,
- M_XOR_I,
- M_COP0,
- M_COP1,
- M_COP2,
- M_COP3,
- M_NUM_MACROS
+
+ _I appended means immediate
+ _A appended means address
+ _AB appended means address with base register
+ _D appended means 64 bit floating point constant
+ _S appended means 32 bit floating point constant. */
+
+enum
+{
+ M_ABS,
+ M_ADD_I,
+ M_ADDU_I,
+ M_AND_I,
+ M_BEQ,
+ M_BEQ_I,
+ M_BEQL_I,
+ M_BGE,
+ M_BGEL,
+ M_BGE_I,
+ M_BGEL_I,
+ M_BGEU,
+ M_BGEUL,
+ M_BGEU_I,
+ M_BGEUL_I,
+ M_BGT,
+ M_BGTL,
+ M_BGT_I,
+ M_BGTL_I,
+ M_BGTU,
+ M_BGTUL,
+ M_BGTU_I,
+ M_BGTUL_I,
+ M_BLE,
+ M_BLEL,
+ M_BLE_I,
+ M_BLEL_I,
+ M_BLEU,
+ M_BLEUL,
+ M_BLEU_I,
+ M_BLEUL_I,
+ M_BLT,
+ M_BLTL,
+ M_BLT_I,
+ M_BLTL_I,
+ M_BLTU,
+ M_BLTUL,
+ M_BLTU_I,
+ M_BLTUL_I,
+ M_BNE,
+ M_BNE_I,
+ M_BNEL_I,
+ M_DABS,
+ M_DADD_I,
+ M_DADDU_I,
+ M_DDIV_3,
+ M_DDIV_3I,
+ M_DDIVU_3,
+ M_DDIVU_3I,
+ M_DIV_3,
+ M_DIV_3I,
+ M_DIVU_3,
+ M_DIVU_3I,
+ M_DLA_AB,
+ M_DLI,
+ M_DMUL,
+ M_DMUL_I,
+ M_DMULO,
+ M_DMULO_I,
+ M_DMULOU,
+ M_DMULOU_I,
+ M_DREM_3,
+ M_DREM_3I,
+ M_DREMU_3,
+ M_DREMU_3I,
+ M_DSUB_I,
+ M_DSUBU_I,
+ M_DSUBU_I_2,
+ M_J_A,
+ M_JAL_1,
+ M_JAL_2,
+ M_JAL_A,
+ M_L_DOB,
+ M_L_DAB,
+ M_LA_AB,
+ M_LB_A,
+ M_LB_AB,
+ M_LBU_A,
+ M_LBU_AB,
+ M_LD_A,
+ M_LD_OB,
+ M_LD_AB,
+ M_LDC1_AB,
+ M_LDC2_AB,
+ M_LDC3_AB,
+ M_LDL_AB,
+ M_LDR_AB,
+ M_LH_A,
+ M_LH_AB,
+ M_LHU_A,
+ M_LHU_AB,
+ M_LI,
+ M_LI_D,
+ M_LI_DD,
+ M_LI_S,
+ M_LI_SS,
+ M_LL_AB,
+ M_LLD_AB,
+ M_LS_A,
+ M_LW_A,
+ M_LW_AB,
+ M_LWC0_A,
+ M_LWC0_AB,
+ M_LWC1_A,
+ M_LWC1_AB,
+ M_LWC2_A,
+ M_LWC2_AB,
+ M_LWC3_A,
+ M_LWC3_AB,
+ M_LWL_A,
+ M_LWL_AB,
+ M_LWR_A,
+ M_LWR_AB,
+ M_LWU_AB,
+ M_MUL,
+ M_MUL_I,
+ M_MULO,
+ M_MULO_I,
+ M_MULOU,
+ M_MULOU_I,
+ M_NOR_I,
+ M_OR_I,
+ M_REM_3,
+ M_REM_3I,
+ M_REMU_3,
+ M_REMU_3I,
+ M_ROL,
+ M_ROL_I,
+ M_ROR,
+ M_ROR_I,
+ M_S_DA,
+ M_S_DOB,
+ M_S_DAB,
+ M_S_S,
+ M_SC_AB,
+ M_SCD_AB,
+ M_SD_A,
+ M_SD_OB,
+ M_SD_AB,
+ M_SDC1_AB,
+ M_SDC2_AB,
+ M_SDC3_AB,
+ M_SDL_AB,
+ M_SDR_AB,
+ M_SEQ,
+ M_SEQ_I,
+ M_SGE,
+ M_SGE_I,
+ M_SGEU,
+ M_SGEU_I,
+ M_SGT,
+ M_SGT_I,
+ M_SGTU,
+ M_SGTU_I,
+ M_SLE,
+ M_SLE_I,
+ M_SLEU,
+ M_SLEU_I,
+ M_SLT_I,
+ M_SLTU_I,
+ M_SNE,
+ M_SNE_I,
+ M_SB_A,
+ M_SB_AB,
+ M_SH_A,
+ M_SH_AB,
+ M_SW_A,
+ M_SW_AB,
+ M_SWC0_A,
+ M_SWC0_AB,
+ M_SWC1_A,
+ M_SWC1_AB,
+ M_SWC2_A,
+ M_SWC2_AB,
+ M_SWC3_A,
+ M_SWC3_AB,
+ M_SWL_A,
+ M_SWL_AB,
+ M_SWR_A,
+ M_SWR_AB,
+ M_SUB_I,
+ M_SUBU_I,
+ M_SUBU_I_2,
+ M_TEQ_I,
+ M_TGE_I,
+ M_TGEU_I,
+ M_TLT_I,
+ M_TLTU_I,
+ M_TNE_I,
+ M_TRUNCWD,
+ M_TRUNCWS,
+ M_ULD,
+ M_ULD_A,
+ M_ULH,
+ M_ULH_A,
+ M_ULHU,
+ M_ULHU_A,
+ M_ULW,
+ M_ULW_A,
+ M_USH,
+ M_USH_A,
+ M_USW,
+ M_USW_A,
+ M_USD,
+ M_USD_A,
+ M_XOR_I,
+ M_COP0,
+ M_COP1,
+ M_COP2,
+ M_COP3,
+ M_NUM_MACROS
};
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 6bac17d..a03baa3 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -17,6 +17,14 @@
MIPS32 "sdbbp" to use 'B' operand specifier. Add MIPS32
"wait" variant which uses 'J' operand specifier.
+ * mips-dis.c (set_mips_isa_type): Update to use
+ CPU_UNKNOWN and ISA_* constants. Add bfd_mach_mips32 case.
+ Replace bfd_mach_mips4K with bfd_mach_mips32_4k case.
+ * mips-opc.c (I32): New constant for instructions added in
+ MIPS32.
+ (P4): Delete.
+ (mips_builtin_opcodes) Replace all uses of P4 with I32.
+
2000-11-28 Hans-Peter Nilsson <hp@bitrange.com>
* sh-dis.c (print_insn_ddt): Make insn_x, insn_y unsigned.
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
index 39bcf33..bb970ef 100644
--- a/opcodes/mips-dis.c
+++ b/opcodes/mips-dis.c
@@ -287,8 +287,8 @@ set_mips_isa_type (mach, isa, cputype)
int *isa;
int *cputype;
{
- int target_processor = 0;
- int mips_isa = 0;
+ int target_processor = CPU_UNKNOWN;
+ int mips_isa = ISA_UNKNOWN;
/* Use standard MIPS register names by default. */
reg_names = std_reg_names;
@@ -297,71 +297,75 @@ set_mips_isa_type (mach, isa, cputype)
{
case bfd_mach_mips3000:
target_processor = CPU_R3000;
- mips_isa = 1;
+ mips_isa = ISA_MIPS1;
break;
case bfd_mach_mips3900:
target_processor = CPU_R3900;
- mips_isa = 1;
+ mips_isa = ISA_MIPS1;
break;
case bfd_mach_mips4000:
target_processor = CPU_R4000;
- mips_isa = 3;
+ mips_isa = ISA_MIPS3;
break;
case bfd_mach_mips4010:
target_processor = CPU_R4010;
- mips_isa = 2;
+ mips_isa = ISA_MIPS2;
break;
case bfd_mach_mips4100:
target_processor = CPU_VR4100;
- mips_isa = 3;
+ mips_isa = ISA_MIPS3;
break;
case bfd_mach_mips4111:
target_processor = CPU_VR4100; /* FIXME: Shouldn't this be CPU_R4111 ??? */
- mips_isa = 3;
+ mips_isa = ISA_MIPS3;
break;
case bfd_mach_mips4300:
target_processor = CPU_R4300;
- mips_isa = 3;
+ mips_isa = ISA_MIPS3;
break;
case bfd_mach_mips4400:
target_processor = CPU_R4400;
- mips_isa = 3;
+ mips_isa = ISA_MIPS3;
break;
case bfd_mach_mips4600:
target_processor = CPU_R4600;
- mips_isa = 3;
+ mips_isa = ISA_MIPS3;
break;
case bfd_mach_mips4650:
target_processor = CPU_R4650;
- mips_isa = 3;
- break;
- case bfd_mach_mips4K:
- target_processor = CPU_4K;
- mips_isa = 2;
+ mips_isa = ISA_MIPS3;
break;
case bfd_mach_mips5000:
target_processor = CPU_R5000;
- mips_isa = 4;
+ mips_isa = ISA_MIPS4;
break;
case bfd_mach_mips6000:
target_processor = CPU_R6000;
- mips_isa = 2;
+ mips_isa = ISA_MIPS2;
break;
case bfd_mach_mips8000:
target_processor = CPU_R8000;
- mips_isa = 4;
+ mips_isa = ISA_MIPS4;
break;
case bfd_mach_mips10000:
target_processor = CPU_R10000;
- mips_isa = 4;
+ mips_isa = ISA_MIPS4;
break;
case bfd_mach_mips16:
target_processor = CPU_MIPS16;
- mips_isa = 3;
+ mips_isa = ISA_MIPS3;
+ break;
+ case bfd_mach_mips32:
+ target_processor = CPU_MIPS32;
+ mips_isa = ISA_MIPS32;
+ break;
+ case bfd_mach_mips32_4k:
+ target_processor = CPU_MIPS32_4K;
+ mips_isa = ISA_MIPS32;
break;
default:
target_processor = CPU_R3000;
- mips_isa = 3;
+ mips_isa = ISA_MIPS3;
break;
}
diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c
index 3e19ffa..622a231 100644
--- a/opcodes/mips-opc.c
+++ b/opcodes/mips-opc.c
@@ -77,8 +77,9 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
#define I3 INSN_ISA3
#define I4 INSN_ISA4
#define I5 INSN_ISA5
+#define I32 INSN_ISA32
+
#define P3 INSN_4650
-#define P4 INSN_MIPS32
#define L1 INSN_4010
#define V1 INSN_4100
#define T3 INSN_3900
@@ -113,9 +114,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
them first. The assemblers uses a hash table based on the
instruction name anyhow. */
/* name, args, match, mask, pinfo, membership */
-{"pref", "k,o(b)", 0xcc000000, 0xfc000000, RD_b, G3|M1|P4},
+{"pref", "k,o(b)", 0xcc000000, 0xfc000000, RD_b, G3|M1|I32},
{"nop", "", 0x00000000, 0xffffffff, 0, I1 },
-{"ssnop", "", 0x00000040, 0xffffffff, 0, M1|P4 },
+{"ssnop", "", 0x00000040, 0xffffffff, 0, M1|I32 },
{"li", "t,j", 0x24000000, 0xffe00000, WR_t, I1 }, /* addiu */
{"li", "t,i", 0x34000000, 0xffe00000, WR_t, I1 }, /* ori */
{"li", "t,I", 0, (int) M_LI, INSN_MACRO, I1 },
@@ -223,7 +224,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"bnel", "s,t,p", 0x54000000, 0xfc000000, CBL|RD_s|RD_t, I2|T3 },
{"bnel", "s,I,p", 0, (int) M_BNEL_I, INSN_MACRO, I2 },
{"break", "", 0x0000000d, 0xffffffff, TRAP, I1 },
-{"break", "B", 0x0000000d, 0xfc00003f, TRAP, P4 },
+{"break", "B", 0x0000000d, 0xfc00003f, TRAP, I32 },
{"break", "c", 0x0000000d, 0xfc00ffff, TRAP, I1 },
{"break", "c,q", 0x0000000d, 0xfc00003f, TRAP, I1 },
{"c.f.d", "S,T", 0x46200030, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, I1 },
@@ -322,7 +323,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"c.ngt.s", "M,S,T", 0x4600003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, I4|M1 },
{"c.ngt.ps","S,T", 0x46c0003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, I5 },
{"c.ngt.ps","M,S,T", 0x46c0003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, I5 },
-{"cache", "k,o(b)", 0xbc000000, 0xfc000000, RD_b, I3|T3|M1|P4 },
+{"cache", "k,o(b)", 0xbc000000, 0xfc000000, RD_b, I3|T3|M1|I32 },
{"ceil.l.d", "D,S", 0x4620000a, 0xffff003f, WR_D|RD_S|FP_D, I3 },
{"ceil.l.s", "D,S", 0x4600000a, 0xffff003f, WR_D|RD_S|FP_S, I3 },
{"ceil.w.d", "D,S", 0x4620000e, 0xffff003f, WR_D|RD_S|FP_D, I2 },
@@ -332,8 +333,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"cfc1", "t,S", 0x44400000, 0xffe007ff, LCD|WR_t|RD_C1|FP_S, I1 },
{"cfc2", "t,G", 0x48400000, 0xffe007ff, LCD|WR_t|RD_C2, I1 },
{"cfc3", "t,G", 0x4c400000, 0xffe007ff, LCD|WR_t|RD_C3, I1 },
-{"clo", "U,s", 0x70000021, 0xfc0007ff, WR_d|RD_s, P4 },
-{"clz", "U,s", 0x70000020, 0xfc0007ff, WR_d|RD_s, P4 },
+{"clo", "U,s", 0x70000021, 0xfc0007ff, WR_d|RD_s, I32 },
+{"clz", "U,s", 0x70000020, 0xfc0007ff, WR_d|RD_s, I32 },
{"ctc0", "t,G", 0x40c00000, 0xffe007ff, COD|RD_t|WR_CC, I1 },
{"ctc1", "t,G", 0x44c00000, 0xffe007ff, COD|RD_t|WR_CC|FP_S, I1 },
{"ctc1", "t,S", 0x44c00000, 0xffe007ff, COD|RD_t|WR_CC|FP_S, I1 },
@@ -362,7 +363,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
/* dctr and dctw are used on the r5000. */
{"dctr", "o(b)", 0xbc050000, 0xfc1f0000, RD_b, I3 },
{"dctw", "o(b)", 0xbc090000, 0xfc1f0000, RD_b, I3 },
-{"deret", "", 0x4200001f, 0xffffffff, 0, G2|M1|P4 },
+{"deret", "", 0x4200001f, 0xffffffff, 0, G2|M1|I32 },
/* For ddiv, see the comments about div. */
{"ddiv", "z,s,t", 0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO, I3 },
{"ddiv", "d,v,t", 0, (int) M_DDIV_3, INSN_MACRO, I3 },
@@ -434,7 +435,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"dsub", "d,v,I", 0, (int) M_DSUB_I, INSN_MACRO, I3 },
{"dsubu", "d,v,t", 0x0000002f, 0xfc0007ff, WR_d|RD_s|RD_t, I3 },
{"dsubu", "d,v,I", 0, (int) M_DSUBU_I, INSN_MACRO, I3 },
-{"eret", "", 0x42000018, 0xffffffff, 0, I3|M1|P4 },
+{"eret", "", 0x42000018, 0xffffffff, 0, I3|M1|I32},
{"floor.l.d", "D,S", 0x4620000b, 0xffff003f, WR_D|RD_S|FP_D, I3 },
{"floor.l.s", "D,S", 0x4600000b, 0xffff003f, WR_D|RD_S|FP_S, I3 },
{"floor.w.d", "D,S", 0x4620000f, 0xffff003f, WR_D|RD_S|FP_D, I2 },
@@ -531,29 +532,29 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"lwu", "t,o(b)", 0x9c000000, 0xfc000000, LDD|RD_b|WR_t, I3 },
{"lwu", "t,A(b)", 0, (int) M_LWU_AB, INSN_MACRO, I3 },
{"lwxc1", "D,t(b)", 0x4c000000, 0xfc00f83f, LDD|WR_D|RD_t|RD_b, I4 },
-{"mad", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, P3|P4 },
-{"madu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, P3|P4 },
+{"mad", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, P3|I32 },
+{"madu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, P3|I32 },
{"madd.d", "D,R,S,T", 0x4c000021, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, I4 },
{"madd.s", "D,R,S,T", 0x4c000020, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, I4 },
{"madd.ps", "D,R,S,T", 0x4c000026, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, I5 },
{"madd", "s,t", 0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO, L1 },
-{"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, P4 },
+{"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, I32 },
{"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|IS_M, G1|M1 },
{"madd", "d,s,t", 0x70000000, 0xfc0007ff, RD_s|RD_t|WR_HI|WR_LO|WR_d|IS_M, G1 },
{"maddu", "s,t", 0x0000001d, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO, L1 },
-{"maddu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, P4 },
+{"maddu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, I32 },
{"maddu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|IS_M, G1|M1},
{"maddu", "d,s,t", 0x70000001, 0xfc0007ff, RD_s|RD_t|WR_HI|WR_LO|WR_d|IS_M, G1},
{"madd16", "s,t", 0x00000028, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, V1 },
{"mfc0", "t,G", 0x40000000, 0xffe007ff, LCD|WR_t|RD_C0, I1 },
-{"mfc0", "t,G,H", 0x40000000, 0xffe007f8, LCD|WR_t|RD_C0, P4 },
+{"mfc0", "t,G,H", 0x40000000, 0xffe007f8, LCD|WR_t|RD_C0, I32 },
{"mfc1", "t,S", 0x44000000, 0xffe007ff, LCD|WR_t|RD_S|FP_S, I1},
{"mfc1", "t,G", 0x44000000, 0xffe007ff, LCD|WR_t|RD_S|FP_S, I1},
-{"mfc1", "t,G,H", 0x44000000, 0xffe007f8, LCD|WR_t|RD_S|FP_S, P4},
+{"mfc1", "t,G,H", 0x44000000, 0xffe007f8, LCD|WR_t|RD_S|FP_S, I32},
{"mfc2", "t,G", 0x48000000, 0xffe007ff, LCD|WR_t|RD_C2, I1 },
-{"mfc2", "t,G,H", 0x48000000, 0xffe007f8, LCD|WR_t|RD_C2, P4 },
+{"mfc2", "t,G,H", 0x48000000, 0xffe007f8, LCD|WR_t|RD_C2, I32 },
{"mfc3", "t,G", 0x4c000000, 0xffe007ff, LCD|WR_t|RD_C3, I1 },
-{"mfc3", "t,G,H", 0x4c000000, 0xffe007f8, LCD|WR_t|RD_C3, P4 },
+{"mfc3", "t,G,H", 0x4c000000, 0xffe007f8, LCD|WR_t|RD_C3, I32 },
{"mfhi", "d", 0x00000010, 0xffff07ff, WR_d|RD_HI, I1 },
{"mflo", "d", 0x00000012, 0xffff07ff, WR_d|RD_LO, I1 },
{"mov.d", "D,S", 0x46200006, 0xffff003f, WR_D|RD_S|FP_D, I1 },
@@ -563,7 +564,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"movf.d", "D,S,N", 0x46200011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, I4|M1 },
{"movf.s", "D,S,N", 0x46000011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_S, I4|M1 },
{"movf.ps", "D,S,N", 0x46c00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, I5 },
-{"movn", "d,v,t", 0x0000000b, 0xfc0007ff, WR_d|RD_s|RD_t, I4|M1|P4 },
+{"movn", "d,v,t", 0x0000000b, 0xfc0007ff, WR_d|RD_s|RD_t, I4|M1|I32 },
{"ffc", "d,v", 0x0000000b, 0xfc1f07ff, WR_d|RD_s,L1 },
{"movn.d", "D,S,t", 0x46200013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, I4|M1 },
{"movn.s", "D,S,t", 0x46000013, 0xffe0003f, WR_D|RD_S|RD_t|FP_S, I4|M1 },
@@ -571,7 +572,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"movt.d", "D,S,N", 0x46210011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, I4|M1 },
{"movt.s", "D,S,N", 0x46010011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_S, I4|M1 },
{"movt.ps", "D,S,N", 0x46c10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, I5},
-{"movz", "d,v,t", 0x0000000a, 0xfc0007ff, WR_d|RD_s|RD_t, I4|M1|P4 },
+{"movz", "d,v,t", 0x0000000a, 0xfc0007ff, WR_d|RD_s|RD_t, I4|M1|I32 },
{"ffs", "d,v", 0x0000000a, 0xfc1f07ff, WR_d|RD_s,L1 },
{"movz.d", "D,S,t", 0x46200012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, I4|M1 },
{"movz.s", "D,S,t", 0x46000012, 0xffe0003f, WR_D|RD_S|RD_t|FP_S, I4|M1 },
@@ -580,24 +581,24 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"msub.s", "D,R,S,T", 0x4c000028, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, I4 },
{"msub.ps", "D,R,S,T", 0x4c00002e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, I5 },
{"msub", "s,t", 0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO,L1 },
-{"msub", "s,t", 0x70000004, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, P4 },
+{"msub", "s,t", 0x70000004, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, I32 },
{"msubu", "s,t", 0x0000001f, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO,L1 },
-{"msubu", "s,t", 0x70000005, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, P4 },
+{"msubu", "s,t", 0x70000005, 0xfc00ffff, RD_s|RD_t|WR_HI|WR_LO|RD_HI|RD_LO, I32 },
{"mtc0", "t,G", 0x40800000, 0xffe007ff, COD|RD_t|WR_C0|WR_CC, I1 },
-{"mtc0", "t,G,H", 0x40800000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC, P4 },
+{"mtc0", "t,G,H", 0x40800000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC, I32 },
{"mtc1", "t,S", 0x44800000, 0xffe007ff, COD|RD_t|WR_S|FP_S, I1 },
{"mtc1", "t,G", 0x44800000, 0xffe007ff, COD|RD_t|WR_S|FP_S, I1 },
-{"mtc1", "t,G,H", 0x44800000, 0xffe007f8, COD|RD_t|WR_S|FP_S, P4 },
+{"mtc1", "t,G,H", 0x44800000, 0xffe007f8, COD|RD_t|WR_S|FP_S, I32 },
{"mtc2", "t,G", 0x48800000, 0xffe007ff, COD|RD_t|WR_C2|WR_CC, I1 },
-{"mtc2", "t,G,H", 0x48800000, 0xffe007f8, COD|RD_t|WR_C2|WR_CC, P4 },
+{"mtc2", "t,G,H", 0x48800000, 0xffe007f8, COD|RD_t|WR_C2|WR_CC, I32 },
{"mtc3", "t,G", 0x4c800000, 0xffe007ff, COD|RD_t|WR_C3|WR_CC, I1 },
-{"mtc3", "t,G,H", 0x4c800000, 0xffe007f8, COD|RD_t|WR_C3|WR_CC, P4 },
+{"mtc3", "t,G,H", 0x4c800000, 0xffe007f8, COD|RD_t|WR_C3|WR_CC, I32 },
{"mthi", "s", 0x00000011, 0xfc1fffff, RD_s|WR_HI, I1 },
{"mtlo", "s", 0x00000013, 0xfc1fffff, RD_s|WR_LO, I1 },
{"mul.d", "D,V,T", 0x46200002, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, I1 },
{"mul.s", "D,V,T", 0x46000002, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, I1 },
{"mul.ps", "D,V,T", 0x46c00002, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, I5 },
-{"mul", "d,v,t", 0x70000002, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HI|WR_LO, P3|P4 },
+{"mul", "d,v,t", 0x70000002, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HI|WR_LO, P3|I32 },
{"mul", "d,v,t", 0, (int) M_MUL, INSN_MACRO, I1 },
{"mul", "d,v,I", 0, (int) M_MUL_I, INSN_MACRO, I1 },
{"mulo", "d,v,t", 0, (int) M_MULO, INSN_MACRO, I1 },
@@ -667,7 +668,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"sdbbp", "", 0x0000000e, 0xffffffff, TRAP, G2|M1 },
{"sdbbp", "c", 0x0000000e, 0xfc00ffff, TRAP, G2|M1 },
{"sdbbp", "c,q", 0x0000000e, 0xfc00003f, TRAP, G2|M1 },
-{"sdbbp", "B", 0x7000003f, 0xfc00003f, TRAP, P4 },
+{"sdbbp", "B", 0x7000003f, 0xfc00003f, TRAP, I32 },
{"sdc1", "T,o(b)", 0xf4000000, 0xfc000000, SM|RD_T|RD_b|FP_D, I2 },
{"sdc1", "E,o(b)", 0xf4000000, 0xfc000000, SM|RD_T|RD_b|FP_D, I2 },
{"sdc1", "T,A(b)", 0, (int) M_SDC1_AB, INSN_MACRO, I2 },
@@ -775,10 +776,10 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"tgeu", "s,t,q", 0x00000031, 0xfc00003f, RD_s|RD_t|TRAP, I2 },
{"tgeu", "s,j", 0x04090000, 0xfc1f0000, RD_s|TRAP, I2 }, /* tgeiu */
{"tgeu", "s,I", 0, (int) M_TGEU_I, INSN_MACRO, I2 },
-{"tlbp", "", 0x42000008, 0xffffffff, INSN_TLB, I1|M1|P4 },
-{"tlbr", "", 0x42000001, 0xffffffff, INSN_TLB, I1|M1|P4 },
-{"tlbwi", "", 0x42000002, 0xffffffff, INSN_TLB, I1|M1|P4 },
-{"tlbwr", "", 0x42000006, 0xffffffff, INSN_TLB, I1|M1|P4 },
+{"tlbp", "", 0x42000008, 0xffffffff, INSN_TLB, I1|M1|I32 },
+{"tlbr", "", 0x42000001, 0xffffffff, INSN_TLB, I1|M1|I32 },
+{"tlbwi", "", 0x42000002, 0xffffffff, INSN_TLB, I1|M1|I32 },
+{"tlbwr", "", 0x42000006, 0xffffffff, INSN_TLB, I1|M1|I32 },
{"tlti", "s,j", 0x040a0000, 0xfc1f0000, RD_s|TRAP, I2 },
{"tlt", "s,t", 0x00000032, 0xfc00ffff, RD_s|RD_t|TRAP, I2 },
{"tlt", "s,t,q", 0x00000032, 0xfc00003f, RD_s|RD_t|TRAP, I2 },
@@ -819,8 +820,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
{"xor", "d,v,t", 0x00000026, 0xfc0007ff, WR_d|RD_s|RD_t, I1 },
{"xor", "t,r,I", 0, (int) M_XOR_I, INSN_MACRO, I1 },
{"xori", "t,r,i", 0x38000000, 0xfc000000, WR_t|RD_s, I1 },
-{"wait", "", 0x42000020, 0xffffffff, TRAP, I3|M1|P4 },
-{"wait", "J", 0x42000020, 0xfe00003f, TRAP, P4 },
+{"wait", "", 0x42000020, 0xffffffff, TRAP, I3|M1|I32 },
+{"wait", "J", 0x42000020, 0xfe00003f, TRAP, I32 },
{"waiti", "", 0x42000020, 0xffffffff, TRAP, L1 },
{"wb", "o(b)", 0xbc040000, 0xfc1f0000, SM|RD_b, L1 },
/* No hazard protection on coprocessor instructions--they shouldn't
diff --git a/opcodes/po/opcodes.pot b/opcodes/po/opcodes.pot
index ab99ee1..f65a42b 100644
--- a/opcodes/po/opcodes.pot
+++ b/opcodes/po/opcodes.pot
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-09-05 17:03-0700\n"
+"POT-Creation-Date: 2000-12-01 13:18-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"
@@ -22,7 +22,8 @@ msgstr ""
msgid "jump hint unaligned"
msgstr ""
-#: arc-dis.c:232
+#. Default text to print if an instruction isn't recognized.
+#: arc-dis.c:232 fr30-dis.c:39 m32r-dis.c:39
msgid "*unknown*"
msgstr ""
@@ -48,21 +49,21 @@ msgstr ""
msgid "branch address not on 4 byte boundary"
msgstr ""
-#: arm-dis.c:466
+#: arm-dis.c:489
msgid "<illegal precision>"
msgstr ""
-#: arm-dis.c:878
+#: arm-dis.c:904
#, c-format
msgid "Unrecognised register name set: %s\n"
msgstr ""
-#: arm-dis.c:885
+#: arm-dis.c:911
#, c-format
msgid "Unrecognised disassembler option: %s\n"
msgstr ""
-#: arm-dis.c:1049
+#: arm-dis.c:1075
msgid ""
"\n"
"The following ARM specific disassembler options are supported for use with\n"
@@ -203,6 +204,10 @@ msgstr ""
msgid "%02x\t\t*unknown*"
msgstr ""
+#: i386-dis.c:1949
+msgid "<internal disassembler error>"
+msgstr ""
+
#: m10200-dis.c:199
#, c-format
msgid "unknown\t0x%02x"
@@ -233,7 +238,7 @@ msgstr ""
msgid "# <dis error: %08x>"
msgstr ""
-#: mips-dis.c:242
+#: mips-dis.c:273
#, c-format
msgid "# internal error, undefined modifier(%c)"
msgstr ""
@@ -277,21 +282,21 @@ msgid "invalid register operand when updating"
msgstr ""
#. Mark as non-valid instruction
-#: sparc-dis.c:743
+#: sparc-dis.c:748
msgid "unknown"
msgstr ""
-#: sparc-dis.c:815
+#: sparc-dis.c:823
#, c-format
msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
msgstr ""
-#: sparc-dis.c:826
+#: sparc-dis.c:834
#, c-format
msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
msgstr ""
-#: sparc-dis.c:875
+#: sparc-dis.c:883
#, c-format
msgid "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
msgstr ""