summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/Makefile.am9
-rw-r--r--bfd/Makefile.in9
-rw-r--r--bfd/archures.c5
-rw-r--r--bfd/bfd-in2.h39
-rw-r--r--bfd/config.bfd5
-rwxr-xr-xbfd/configure2
-rw-r--r--bfd/configure.in2
-rw-r--r--bfd/cpu-mep.c28
-rw-r--r--bfd/elf-bfd.h10
-rw-r--r--bfd/elf.c4
-rw-r--r--bfd/elf32-mep.c940
-rw-r--r--bfd/elfcode.h6
-rw-r--r--bfd/elflink.c713
-rw-r--r--bfd/libbfd.h23
-rwxr-xr-xbfd/mep-relocs.pl274
-rw-r--r--bfd/reloc.c50
-rw-r--r--bfd/syms.c8
-rw-r--r--bfd/targets.c4
-rw-r--r--gas/ChangeLog116
-rw-r--r--gas/Makefile.am34
-rw-r--r--gas/Makefile.in40
-rw-r--r--gas/cgen.c327
-rw-r--r--gas/config/obj-elf.c4
-rw-r--r--gas/config/tc-mep.c1886
-rw-r--r--gas/config/tc-mep.h119
-rwxr-xr-xgas/configure4
-rw-r--r--gas/configure.in4
-rw-r--r--gas/configure.tgt3
-rw-r--r--gas/symbols.c326
-rw-r--r--gas/symbols.h3
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/all/gas.exp5
-rw-r--r--gas/testsuite/gas/mep/allinsn.d1345
-rw-r--r--gas/testsuite/gas/mep/allinsn.exp9
-rw-r--r--gas/testsuite/gas/mep/allinsn.le.d1346
-rw-r--r--gas/testsuite/gas/mep/allinsn.s1536
-rw-r--r--gas/testsuite/gas/mep/branch1.d14
-rw-r--r--gas/testsuite/gas/mep/branch1.s7
-rw-r--r--gas/testsuite/gas/mep/complex-relocs.exp42
-rw-r--r--gas/testsuite/gas/mep/dj1.d1393
-rw-r--r--gas/testsuite/gas/mep/dj1.le.d1393
-rw-r--r--gas/testsuite/gas/mep/dj1.s1306
-rw-r--r--gas/testsuite/gas/mep/dj2.d11
-rw-r--r--gas/testsuite/gas/mep/dj2.le.d12
-rw-r--r--gas/testsuite/gas/mep/dj2.s5
-rw-r--r--gas/testsuite/gas/mep/relocs-bad3.s15
-rw-r--r--gas/testsuite/gas/mep/relocs-junk1.s8
-rw-r--r--gas/testsuite/gas/mep/relocs-junk2.s7
-rw-r--r--gas/testsuite/gas/mep/relocs-refs.s55
-rw-r--r--gas/testsuite/gas/mep/relocs-syms.s18
-rw-r--r--gas/testsuite/gas/mep/relocs.d98
-rw-r--r--gas/write.h4
52 files changed, 13629 insertions, 2 deletions
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index 6b4aebfb2f..2e6915b40f 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -91,6 +91,7 @@ ALL_MACHINES = \
cpu-m10300.lo \
cpu-maxq.lo \
cpu-mcore.lo \
+ cpu-mep.lo \
cpu-mips.lo \
cpu-mmix.lo \
cpu-mt.lo \
@@ -155,6 +156,7 @@ ALL_MACHINES_CFILES = \
cpu-m10300.c \
cpu-maxq.c \
cpu-mcore.c \
+ cpu-mep.c \
cpu-mips.c \
cpu-mmix.c \
cpu-mt.c \
@@ -266,6 +268,7 @@ BFD32_BACKENDS = \
elf-m10200.lo \
elf-m10300.lo \
elf32-mcore.lo \
+ elf32-mep.lo \
elfxx-mips.lo \
elf32-mips.lo \
elf32-mt.lo \
@@ -442,6 +445,7 @@ BFD32_BACKENDS_CFILES = \
elf-m10200.c \
elf-m10300.c \
elf32-mcore.c \
+ elf32-mep.c \
elfxx-mips.c \
elf32-mips.c \
elf32-mt.c \
@@ -1066,6 +1070,7 @@ cpu-m10200.lo: cpu-m10200.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-m10300.lo: cpu-m10300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-maxq.lo: cpu-maxq.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-mep.lo: cpu-mep.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mmix.lo: cpu-mmix.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mt.lo: cpu-mt.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
@@ -1408,6 +1413,10 @@ elf32-mcore.lo: elf32-mcore.c $(INCDIR)/filenames.h \
$(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/mcore.h \
$(INCDIR)/elf/reloc-macros.h elf32-target.h
+elf32-mep.lo: elf32-mep.c elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ elf32-target.h
elfxx-mips.lo: elfxx-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/libiberty.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index c9a8c32338..1fbbc0e2f0 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -323,6 +323,7 @@ ALL_MACHINES = \
cpu-m10300.lo \
cpu-maxq.lo \
cpu-mcore.lo \
+ cpu-mep.lo \
cpu-mips.lo \
cpu-mmix.lo \
cpu-mt.lo \
@@ -387,6 +388,7 @@ ALL_MACHINES_CFILES = \
cpu-m10300.c \
cpu-maxq.c \
cpu-mcore.c \
+ cpu-mep.c \
cpu-mips.c \
cpu-mmix.c \
cpu-mt.c \
@@ -499,6 +501,7 @@ BFD32_BACKENDS = \
elf-m10200.lo \
elf-m10300.lo \
elf32-mcore.lo \
+ elf32-mep.lo \
elfxx-mips.lo \
elf32-mips.lo \
elf32-mt.lo \
@@ -675,6 +678,7 @@ BFD32_BACKENDS_CFILES = \
elf-m10200.c \
elf-m10300.c \
elf32-mcore.c \
+ elf32-mep.c \
elfxx-mips.c \
elf32-mips.c \
elf32-mt.c \
@@ -1629,6 +1633,7 @@ cpu-m10200.lo: cpu-m10200.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-m10300.lo: cpu-m10300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-maxq.lo: cpu-maxq.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
+cpu-mep.lo: cpu-mep.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mmix.lo: cpu-mmix.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
cpu-mt.lo: cpu-mt.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h
@@ -1971,6 +1976,10 @@ elf32-mcore.lo: elf32-mcore.c $(INCDIR)/filenames.h \
$(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/elf/mcore.h \
$(INCDIR)/elf/reloc-macros.h elf32-target.h
+elf32-mep.lo: elf32-mep.c elf-bfd.h $(INCDIR)/elf/common.h \
+ $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+ $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ elf32-target.h
elfxx-mips.lo: elfxx-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
$(INCDIR)/libiberty.h elf-bfd.h $(INCDIR)/elf/common.h \
$(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
diff --git a/bfd/archures.c b/bfd/archures.c
index a9fca3bffd..f43e2e6be2 100644
--- a/bfd/archures.c
+++ b/bfd/archures.c
@@ -318,6 +318,9 @@ DESCRIPTION
.#define bfd_mach_fr500 500
.#define bfd_mach_fr550 550
. bfd_arch_mcore,
+. bfd_arch_mep,
+.#define bfd_mach_mep 1
+.#define bfd_mach_mep_h1 0x6831
. bfd_arch_ia64, {* HP/Intel ia64 *}
.#define bfd_mach_ia64_elf64 64
.#define bfd_mach_ia64_elf32 32
@@ -456,6 +459,7 @@ extern const bfd_arch_info_type bfd_m68k_arch;
extern const bfd_arch_info_type bfd_m88k_arch;
extern const bfd_arch_info_type bfd_maxq_arch;
extern const bfd_arch_info_type bfd_mcore_arch;
+extern const bfd_arch_info_type bfd_mep_arch;
extern const bfd_arch_info_type bfd_mips_arch;
extern const bfd_arch_info_type bfd_mmix_arch;
extern const bfd_arch_info_type bfd_mn10200_arch;
@@ -525,6 +529,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
&bfd_m88k_arch,
&bfd_maxq_arch,
&bfd_mcore_arch,
+ &bfd_mep_arch,
&bfd_mips_arch,
&bfd_mmix_arch,
&bfd_mn10200_arch,
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index e641e838c7..66a7dd21fe 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -1974,6 +1974,9 @@ enum bfd_architecture
#define bfd_mach_fr500 500
#define bfd_mach_fr550 550
bfd_arch_mcore,
+ bfd_arch_mep,
+#define bfd_mach_mep 1
+#define bfd_mach_mep_h1 0x6831
bfd_arch_ia64, /* HP/Intel ia64 */
#define bfd_mach_ia64_elf64 64
#define bfd_mach_ia64_elf32 32
@@ -3560,6 +3563,29 @@ short offset into 11 bits. */
BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
BFD_RELOC_MCORE_RVA,
+/* Toshiba Media Processor Relocations. */
+ BFD_RELOC_MEP_8,
+ BFD_RELOC_MEP_16,
+ BFD_RELOC_MEP_32,
+ BFD_RELOC_MEP_PCREL8A2,
+ BFD_RELOC_MEP_PCREL12A2,
+ BFD_RELOC_MEP_PCREL17A2,
+ BFD_RELOC_MEP_PCREL24A2,
+ BFD_RELOC_MEP_PCABS24A2,
+ BFD_RELOC_MEP_LOW16,
+ BFD_RELOC_MEP_HI16U,
+ BFD_RELOC_MEP_HI16S,
+ BFD_RELOC_MEP_GPREL,
+ BFD_RELOC_MEP_TPREL,
+ BFD_RELOC_MEP_TPREL7,
+ BFD_RELOC_MEP_TPREL7A2,
+ BFD_RELOC_MEP_TPREL7A4,
+ BFD_RELOC_MEP_UIMM24,
+ BFD_RELOC_MEP_ADDR24A4,
+ BFD_RELOC_MEP_GNU_VTINHERIT,
+ BFD_RELOC_MEP_GNU_VTENTRY,
+
+
/* These are relocations for the GETA instruction. */
BFD_RELOC_MMIX_GETA,
BFD_RELOC_MMIX_GETA_1,
@@ -4177,6 +4203,10 @@ This is the 5 bits of a value. */
BFD_RELOC_XSTORMY16_24,
BFD_RELOC_XSTORMY16_FPTR16,
+/* Self-describing complex relocations. */
+ BFD_RELOC_RELC,
+
+
/* Infineon Relocations. */
BFD_RELOC_XC16X_PAG,
BFD_RELOC_XC16X_POF,
@@ -4426,6 +4456,14 @@ typedef struct bfd_symbol
/* This symbol is thread local. Used in ELF. */
#define BSF_THREAD_LOCAL 0x40000
+ /* This symbol represents a complex relocation expression,
+ with the expression tree serialized in the symbol name. */
+#define BSF_RELC 0x80000
+
+ /* This symbol represents a signed complex relocation expression,
+ with the expression tree serialized in the symbol name. */
+#define BSF_SRELC 0x100000
+
flagword flags;
/* A pointer to the section to which this symbol is
@@ -5161,6 +5199,7 @@ typedef struct bfd_target
reloc_howto_type *
(*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+
/* Routines used when writing an object file. */
#define BFD_JUMP_TABLE_WRITE(NAME) \
NAME##_set_arch_mach, \
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 70d2c703b0..871fb4380f 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -840,6 +840,11 @@ case "${targ}" in
targ_selvecs="mcore_pe_big_vec mcore_pe_little_vec mcore_pei_big_vec mcore_pei_little_vec"
;;
+ mep-*-elf)
+ targ_defvec=bfd_elf32_mep_vec
+ targ_selvecs=bfd_elf32_mep_little_vec
+ ;;
+
mips*-big-*)
targ_defvec=ecoff_big_vec
targ_selvecs=ecoff_little_vec
diff --git a/bfd/configure b/bfd/configure
index bb52f50be9..5295a2608f 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -10869,6 +10869,8 @@ do
bfd_elf32_m88k_vec) tb="$tb elf32-m88k.lo elf32.lo $elf" ;;
bfd_elf32_mcore_big_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
bfd_elf32_mcore_little_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
+ bfd_elf32_mep_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
+ bfd_elf32_mep_little_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
bfd_elf32_mn10200_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;;
bfd_elf32_mn10300_vec) tb="$tb elf-m10300.lo elf32.lo $elf" ;;
bfd_elf32_mt_vec) tb="$tb elf32-mt.lo elf32.lo $elf" ;;
diff --git a/bfd/configure.in b/bfd/configure.in
index 5dcb91c26c..662d93abcf 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -650,6 +650,8 @@ do
bfd_elf32_m88k_vec) tb="$tb elf32-m88k.lo elf32.lo $elf" ;;
bfd_elf32_mcore_big_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
bfd_elf32_mcore_little_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
+ bfd_elf32_mep_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
+ bfd_elf32_mep_little_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
bfd_elf32_mn10200_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;;
bfd_elf32_mn10300_vec) tb="$tb elf-m10300.lo elf32.lo $elf" ;;
bfd_elf32_mt_vec) tb="$tb elf32-mt.lo elf32.lo $elf" ;;
diff --git a/bfd/cpu-mep.c b/bfd/cpu-mep.c
new file mode 100644
index 0000000000..66db750742
--- /dev/null
+++ b/bfd/cpu-mep.c
@@ -0,0 +1,28 @@
+/* BFD support for the Toshiba Media Engine Processor.
+ Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+
+#define MA(x, n, def, y) { 32, 32, 8, bfd_arch_mep, x, "mep", n, \
+ 2, def, bfd_default_compatible, bfd_default_scan, y }
+
+static const bfd_arch_info_type bfd_h1_arch = MA (bfd_mach_mep_h1, "h1", FALSE, NULL);
+const bfd_arch_info_type bfd_mep_arch = MA (bfd_mach_mep, "mep", TRUE, & bfd_h1_arch);
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index a9d51a3598..151c5d0605 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1735,6 +1735,16 @@ extern bfd_boolean _bfd_elf_symbol_refs_local_p
extern bfd_boolean bfd_elf_match_symbols_in_sections
(asection *, asection *, struct bfd_link_info *);
+extern void bfd_elf_perform_complex_relocation
+ (bfd * output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info * info,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * rel,
+ Elf_Internal_Sym * local_syms,
+ asection ** local_sections);
+
extern bfd_boolean _bfd_elf_setup_sections
(bfd *);
diff --git a/bfd/elf.c b/bfd/elf.c
index 7efca9ca14..460502c2e4 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6378,6 +6378,10 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"),
type = STT_FUNC;
else if ((flags & BSF_OBJECT) != 0)
type = STT_OBJECT;
+ else if ((flags & BSF_RELC) != 0)
+ type = STT_RELC;
+ else if ((flags & BSF_SRELC) != 0)
+ type = STT_SRELC;
else
type = STT_NOTYPE;
diff --git a/bfd/elf32-mep.c b/bfd/elf32-mep.c
new file mode 100644
index 0000000000..4036d1e8d1
--- /dev/null
+++ b/bfd/elf32-mep.c
@@ -0,0 +1,940 @@
+/* MeP-specific support for 32-bit ELF.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/mep.h"
+#include "libiberty.h"
+
+/* Forward declarations. */
+
+/* Private relocation functions. */
+
+#define MEPREL(type, size, bits, right, left, pcrel, overflow, mask) \
+ {(unsigned)type, right, size, bits, pcrel, left, overflow, mep_reloc, #type, FALSE, 0, mask, 0 }
+
+#define N complain_overflow_dont
+#define S complain_overflow_signed
+#define U complain_overflow_unsigned
+
+static bfd_reloc_status_type mep_reloc (bfd *, arelent *, struct bfd_symbol *,
+ void *, asection *, bfd *, char **);
+
+static reloc_howto_type mep_elf_howto_table [] =
+{
+ /* type, size, bits, leftshift, rightshift, pcrel, OD/OS/OU, mask. */
+ MEPREL (R_MEP_NONE, 0, 0, 0, 0, 0, N, 0),
+ MEPREL (R_RELC, 0, 0, 0, 0, 0, N, 0),
+ /* MEPRELOC:HOWTO */
+ /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */
+ MEPREL (R_MEP_8, 0, 8, 0, 0, 0, U, 0xff),
+ MEPREL (R_MEP_16, 1, 16, 0, 0, 0, U, 0xffff),
+ MEPREL (R_MEP_32, 2, 32, 0, 0, 0, U, 0xffffffff),
+ MEPREL (R_MEP_PCREL8A2, 1, 8, 1, 1, 1, S, 0x00fe),
+ MEPREL (R_MEP_PCREL12A2,1, 12, 1, 1, 1, S, 0x0ffe),
+ MEPREL (R_MEP_PCREL17A2,2, 17, 0, 1, 1, S, 0x0000ffff),
+ MEPREL (R_MEP_PCREL24A2,2, 24, 0, 1, 1, S, 0x07f0ffff),
+ MEPREL (R_MEP_PCABS24A2,2, 24, 0, 1, 0, U, 0x07f0ffff),
+ MEPREL (R_MEP_LOW16, 2, 16, 0, 0, 0, N, 0x0000ffff),
+ MEPREL (R_MEP_HI16U, 2, 32, 0,16, 0, N, 0x0000ffff),
+ MEPREL (R_MEP_HI16S, 2, 32, 0,16, 0, N, 0x0000ffff),
+ MEPREL (R_MEP_GPREL, 2, 16, 0, 0, 0, S, 0x0000ffff),
+ MEPREL (R_MEP_TPREL, 2, 16, 0, 0, 0, S, 0x0000ffff),
+ MEPREL (R_MEP_TPREL7, 1, 7, 0, 0, 0, U, 0x007f),
+ MEPREL (R_MEP_TPREL7A2, 1, 7, 1, 1, 0, U, 0x007e),
+ MEPREL (R_MEP_TPREL7A4, 1, 7, 2, 2, 0, U, 0x007c),
+ MEPREL (R_MEP_UIMM24, 2, 24, 0, 0, 0, U, 0x00ffffff),
+ MEPREL (R_MEP_ADDR24A4, 2, 24, 0, 2, 0, U, 0x00fcffff),
+ MEPREL (R_MEP_GNU_VTINHERIT,1, 0,16,32, 0, N, 0x0000),
+ MEPREL (R_MEP_GNU_VTENTRY,1, 0,16,32, 0, N, 0x0000),
+ /* MEPRELOC:END */
+};
+
+#define VALID_MEP_RELOC(N) ((N) >= 0 \
+ && (N) < ARRAY_SIZE (mep_elf_howto_table)
+
+#undef N
+#undef S
+#undef U
+
+static bfd_reloc_status_type
+mep_reloc
+ (bfd * abfd ATTRIBUTE_UNUSED,
+ arelent * reloc_entry ATTRIBUTE_UNUSED,
+ struct bfd_symbol * symbol ATTRIBUTE_UNUSED,
+ void * data ATTRIBUTE_UNUSED,
+ asection * input_section ATTRIBUTE_UNUSED,
+ bfd * output_bfd ATTRIBUTE_UNUSED,
+ char ** error_message ATTRIBUTE_UNUSED)
+{
+ return bfd_reloc_ok;
+}
+
+
+
+#define BFD_RELOC_MEP_NONE BFD_RELOC_NONE
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define MAP(n) case BFD_RELOC_MEP_##n: type = R_MEP_##n; break
+#else
+#define MAP(n) case BFD_RELOC_MEP_/**/n: type = R_MEP_/**/n; break
+#endif
+
+static reloc_howto_type *
+mep_reloc_type_lookup
+ (bfd * abfd ATTRIBUTE_UNUSED,
+ bfd_reloc_code_real_type code)
+{
+ unsigned int type = 0;
+
+ switch (code)
+ {
+ MAP(NONE);
+ case BFD_RELOC_8:
+ type = R_MEP_8;
+ break;
+ case BFD_RELOC_16:
+ type = R_MEP_16;
+ break;
+ case BFD_RELOC_32:
+ type = R_MEP_32;
+ break;
+ case BFD_RELOC_VTABLE_ENTRY:
+ type = R_MEP_GNU_VTENTRY;
+ break;
+ case BFD_RELOC_VTABLE_INHERIT:
+ type = R_MEP_GNU_VTINHERIT;
+ break;
+ case BFD_RELOC_RELC:
+ type = R_RELC;
+ break;
+
+ /* MEPRELOC:MAP */
+ /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */
+ MAP(8);
+ MAP(16);
+ MAP(32);
+ MAP(PCREL8A2);
+ MAP(PCREL12A2);
+ MAP(PCREL17A2);
+ MAP(PCREL24A2);
+ MAP(PCABS24A2);
+ MAP(LOW16);
+ MAP(HI16U);
+ MAP(HI16S);
+ MAP(GPREL);
+ MAP(TPREL);
+ MAP(TPREL7);
+ MAP(TPREL7A2);
+ MAP(TPREL7A4);
+ MAP(UIMM24);
+ MAP(ADDR24A4);
+ MAP(GNU_VTINHERIT);
+ MAP(GNU_VTENTRY);
+ /* MEPRELOC:END */
+
+ default:
+ /* Pacify gcc -Wall. */
+ fprintf (stderr, "mep: no reloc for code %d\n", code);
+ return NULL;
+ }
+
+ if (mep_elf_howto_table[type].type != type)
+ {
+ fprintf (stderr, "MeP: howto %d has type %d\n", type, mep_elf_howto_table[type].type);
+ abort ();
+ }
+
+ return mep_elf_howto_table + type;
+}
+
+#undef MAP
+
+
+/* Perform a single relocation. */
+
+static struct bfd_link_info *mep_info;
+static int warn_tp = 0, warn_sda = 0;
+
+static bfd_vma
+mep_lookup_global
+ (char * name,
+ bfd_vma ofs,
+ bfd_vma * cache,
+ int * warn)
+{
+ struct bfd_link_hash_entry *h;
+
+ if (*cache || *warn)
+ return *cache;
+
+ h = bfd_link_hash_lookup (mep_info->hash, name, FALSE, FALSE, TRUE);
+ if (h == 0 || h->type != bfd_link_hash_defined)
+ {
+ *warn = ofs + 1;
+ return 0;
+ }
+ *cache = (h->u.def.value
+ + h->u.def.section->output_section->vma
+ + h->u.def.section->output_offset);
+ return *cache;
+}
+
+static bfd_vma
+mep_tpoff_base (bfd_vma ofs)
+{
+ static bfd_vma cache = 0;
+ return mep_lookup_global ("__tpbase", ofs, &cache, &warn_tp);
+}
+
+static bfd_vma
+mep_sdaoff_base (bfd_vma ofs)
+{
+ static bfd_vma cache = 0;
+ return mep_lookup_global ("__sdabase", ofs, &cache, &warn_sda);
+}
+
+static bfd_reloc_status_type
+mep_final_link_relocate
+ (reloc_howto_type * howto,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * rel,
+ bfd_vma relocation)
+{
+ unsigned long u;
+ long s;
+ unsigned char *byte;
+ bfd_vma pc;
+ bfd_reloc_status_type r = bfd_reloc_ok;
+ int e2, e4;
+
+ if (bfd_big_endian (input_bfd))
+ {
+ e2 = 0;
+ e4 = 0;
+ }
+ else
+ {
+ e2 = 1;
+ e4 = 3;
+ }
+
+ pc = (input_section->output_section->vma
+ + input_section->output_offset
+ + rel->r_offset);
+
+ s = relocation + rel->r_addend;
+
+ byte = (unsigned char *)contents + rel->r_offset;
+
+ if (howto->type == R_MEP_PCREL24A2
+ && s == 0
+ && pc >= 0x800000)
+ {
+ /* This is an unreachable branch to an undefined weak function.
+ Silently ignore it, since the opcode can't do that but should
+ never be executed anyway. */
+ return bfd_reloc_ok;
+ }
+
+ if (howto->pc_relative)
+ s -= pc;
+
+ u = (unsigned long) s;
+
+ switch (howto->type)
+ {
+ /* MEPRELOC:APPLY */
+ /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */
+ case R_MEP_8: /* 76543210 */
+ if (u > 255) r = bfd_reloc_overflow;
+ byte[0] = (u & 0xff);
+ break;
+ case R_MEP_16: /* fedcba9876543210 */
+ if (u > 65535) r = bfd_reloc_overflow;
+ byte[0^e2] = ((u >> 8) & 0xff);
+ byte[1^e2] = (u & 0xff);
+ break;
+ case R_MEP_32: /* vutsrqponmlkjihgfedcba9876543210 */
+ byte[0^e4] = ((u >> 24) & 0xff);
+ byte[1^e4] = ((u >> 16) & 0xff);
+ byte[2^e4] = ((u >> 8) & 0xff);
+ byte[3^e4] = (u & 0xff);
+ break;
+ case R_MEP_PCREL8A2: /* --------7654321- */
+ if (-128 > s || s > 127) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x01) | (s & 0xfe);
+ break;
+ case R_MEP_PCREL12A2: /* ----ba987654321- */
+ if (-2048 > s || s > 2047) r = bfd_reloc_overflow;
+ byte[0^e2] = (byte[0^e2] & 0xf0) | ((s >> 8) & 0x0f);
+ byte[1^e2] = (byte[1^e2] & 0x01) | (s & 0xfe);
+ break;
+ case R_MEP_PCREL17A2: /* ----------------gfedcba987654321 */
+ if (-65536 > s || s > 65535) r = bfd_reloc_overflow;
+ byte[2^e2] = ((s >> 9) & 0xff);
+ byte[3^e2] = ((s >> 1) & 0xff);
+ break;
+ case R_MEP_PCREL24A2: /* -----7654321----nmlkjihgfedcba98 */
+ if (-8388608 > s || s > 8388607) r = bfd_reloc_overflow;
+ byte[0^e2] = (byte[0^e2] & 0xf8) | ((s >> 5) & 0x07);
+ byte[1^e2] = (byte[1^e2] & 0x0f) | ((s << 3) & 0xf0);
+ byte[2^e2] = ((s >> 16) & 0xff);
+ byte[3^e2] = ((s >> 8) & 0xff);
+ break;
+ case R_MEP_PCABS24A2: /* -----7654321----nmlkjihgfedcba98 */
+ if (u > 16777215) r = bfd_reloc_overflow;
+ byte[0^e2] = (byte[0^e2] & 0xf8) | ((u >> 5) & 0x07);
+ byte[1^e2] = (byte[1^e2] & 0x0f) | ((u << 3) & 0xf0);
+ byte[2^e2] = ((u >> 16) & 0xff);
+ byte[3^e2] = ((u >> 8) & 0xff);
+ break;
+ case R_MEP_LOW16: /* ----------------fedcba9876543210 */
+ byte[2^e2] = ((u >> 8) & 0xff);
+ byte[3^e2] = (u & 0xff);
+ break;
+ case R_MEP_HI16U: /* ----------------vutsrqponmlkjihg */
+ byte[2^e2] = ((u >> 24) & 0xff);
+ byte[3^e2] = ((u >> 16) & 0xff);
+ break;
+ case R_MEP_HI16S: /* ----------------vutsrqponmlkjihg */
+ byte[2^e2] = ((s >> 24) & 0xff);
+ byte[3^e2] = ((s >> 16) & 0xff);
+ break;
+ case R_MEP_GPREL: /* ----------------fedcba9876543210 */
+ s -= mep_sdaoff_base(rel->r_offset);
+ if (-32768 > s || s > 32767) r = bfd_reloc_overflow;
+ byte[2^e2] = ((s >> 8) & 0xff);
+ byte[3^e2] = (s & 0xff);
+ break;
+ case R_MEP_TPREL: /* ----------------fedcba9876543210 */
+ s -= mep_tpoff_base(rel->r_offset);
+ if (-32768 > s || s > 32767) r = bfd_reloc_overflow;
+ byte[2^e2] = ((s >> 8) & 0xff);
+ byte[3^e2] = (s & 0xff);
+ break;
+ case R_MEP_TPREL7: /* ---------6543210 */
+ u -= mep_tpoff_base(rel->r_offset);
+ if (u > 127) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x80) | (u & 0x7f);
+ break;
+ case R_MEP_TPREL7A2: /* ---------654321- */
+ u -= mep_tpoff_base(rel->r_offset);
+ if (u > 127) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x81) | (u & 0x7e);
+ break;
+ case R_MEP_TPREL7A4: /* ---------65432-- */
+ u -= mep_tpoff_base(rel->r_offset);
+ if (u > 127) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x83) | (u & 0x7c);
+ break;
+ case R_MEP_UIMM24: /* --------76543210nmlkjihgfedcba98 */
+ if (u > 16777215) r = bfd_reloc_overflow;
+ byte[1^e2] = (u & 0xff);
+ byte[2^e2] = ((u >> 16) & 0xff);
+ byte[3^e2] = ((u >> 8) & 0xff);
+ break;
+ case R_MEP_ADDR24A4: /* --------765432--nmlkjihgfedcba98 */
+ if (u > 16777215) r = bfd_reloc_overflow;
+ byte[1^e2] = (byte[1^e2] & 0x03) | (u & 0xfc);
+ byte[2^e2] = ((u >> 16) & 0xff);
+ byte[3^e2] = ((u >> 8) & 0xff);
+ break;
+ case R_MEP_GNU_VTINHERIT: /* ---------------- */
+ break;
+ case R_MEP_GNU_VTENTRY: /* ---------------- */
+ break;
+ /* MEPRELOC:END */
+ default:
+ abort ();
+ }
+
+ return r;
+}
+
+/* Set the howto pointer for a MEP ELF reloc. */
+
+static void
+mep_info_to_howto_rela
+ (bfd * abfd ATTRIBUTE_UNUSED,
+ arelent * cache_ptr,
+ Elf_Internal_Rela * dst)
+{
+ unsigned int r_type;
+
+ r_type = ELF32_R_TYPE (dst->r_info);
+ cache_ptr->howto = & mep_elf_howto_table [r_type];
+}
+
+/* Look through the relocs for a section during the first phase.
+ Since we don't do .gots or .plts, we just need to consider the
+ virtual table relocs for gc. */
+
+static bfd_boolean
+mep_elf_check_relocs
+ (bfd * abfd,
+ struct bfd_link_info * info,
+ asection * sec,
+ const Elf_Internal_Rela * relocs)
+{
+ Elf_Internal_Shdr * symtab_hdr;
+ struct elf_link_hash_entry ** sym_hashes;
+ struct elf_link_hash_entry ** sym_hashes_end;
+ const Elf_Internal_Rela * rel;
+ const Elf_Internal_Rela * rel_end;
+
+ if (info->relocatable)
+ return TRUE;
+
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+ sym_hashes_end = sym_hashes + symtab_hdr->sh_size / sizeof (Elf32_External_Sym);
+ if (!elf_bad_symtab (abfd))
+ sym_hashes_end -= symtab_hdr->sh_info;
+
+ rel_end = relocs + sec->reloc_count;
+ for (rel = relocs; rel < rel_end; rel++)
+ {
+ struct elf_link_hash_entry *h;
+ unsigned long r_symndx;
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ if (r_symndx < symtab_hdr->sh_info)
+ h = NULL;
+ else
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ }
+ return TRUE;
+}
+
+
+/* Relocate a MEP ELF section.
+ There is some attempt to make this function usable for many architectures,
+ both USE_REL and USE_RELA ['twould be nice if such a critter existed],
+ if only to serve as a learning tool.
+
+ The RELOCATE_SECTION function is called by the new ELF backend linker
+ to handle the relocations for a section.
+
+ The relocs are always passed as Rela structures; if the section
+ actually uses Rel structures, the r_addend field will always be
+ zero.
+
+ This function is responsible for adjusting the section contents as
+ necessary, and (if using Rela relocs and generating a relocatable
+ output file) adjusting the reloc addend as necessary.
+
+ This function does not have to worry about setting the reloc
+ address or the reloc symbol index.
+
+ LOCAL_SYMS is a pointer to the swapped in local symbols.
+
+ LOCAL_SECTIONS is an array giving the section in the input file
+ corresponding to the st_shndx field of each local symbol.
+
+ The global hash table entry for the global symbols can be found
+ via elf_sym_hashes (input_bfd).
+
+ When generating relocatable output, this function must handle
+ STB_LOCAL/STT_SECTION symbols specially. The output symbol is
+ going to be the section symbol corresponding to the output
+ section, which means that the addend must be adjusted
+ accordingly. */
+
+static bfd_boolean
+mep_elf_relocate_section
+ (bfd * output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info * info,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * relocs,
+ Elf_Internal_Sym * local_syms,
+ asection ** local_sections)
+{
+ Elf_Internal_Shdr * symtab_hdr;
+ struct elf_link_hash_entry ** sym_hashes;
+ Elf_Internal_Rela * rel;
+ Elf_Internal_Rela * relend;
+
+ symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (input_bfd);
+ relend = relocs + input_section->reloc_count;
+
+ mep_info = info;
+
+ for (rel = relocs; rel < relend; rel ++)
+ {
+ reloc_howto_type * howto;
+ unsigned long r_symndx;
+ Elf_Internal_Sym * sym;
+ asection * sec;
+ struct elf_link_hash_entry * h;
+ bfd_vma relocation;
+ bfd_reloc_status_type r;
+ const char * name = NULL;
+ int r_type;
+
+ r_type = ELF32_R_TYPE (rel->r_info);
+
+ r_symndx = ELF32_R_SYM (rel->r_info);
+
+ if (info->relocatable)
+ {
+ /* This is a relocatable link. We don't have to change
+ anything, unless the reloc is against a section symbol,
+ in which case we have to adjust according to where the
+ section symbol winds up in the output section. */
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ sym = local_syms + r_symndx;
+
+ if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ {
+ sec = local_sections [r_symndx];
+ rel->r_addend += sec->output_offset + sym->st_value;
+ }
+ }
+
+ continue;
+ }
+
+ /* Is this a complex relocation? */
+ if (ELF32_R_TYPE (rel->r_info) == R_RELC)
+ {
+ bfd_elf_perform_complex_relocation (output_bfd, info,
+ input_bfd, input_section, contents,
+ rel, local_syms, local_sections);
+ continue;
+ }
+
+ /* This is a final link. */
+ howto = mep_elf_howto_table + ELF32_R_TYPE (rel->r_info);
+ h = NULL;
+ sym = NULL;
+ sec = NULL;
+
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ sym = local_syms + r_symndx;
+ sec = local_sections [r_symndx];
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+
+ name = bfd_elf_string_from_elf_section
+ (input_bfd, symtab_hdr->sh_link, sym->st_name);
+ name = (name == NULL) ? bfd_section_name (input_bfd, sec) : name;
+#if 0
+ fprintf (stderr, "local: sec: %s, sym: %s (%d), value: %x + %x + %x addend %x\n",
+ sec->name, name, sym->st_name,
+ sec->output_section->vma, sec->output_offset,
+ sym->st_value, rel->r_addend);
+#endif
+ }
+ else
+ {
+ h = sym_hashes [r_symndx];
+
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ name = h->root.root.string;
+
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ sec = h->root.u.def.section;
+ relocation = (h->root.u.def.value
+ + sec->output_section->vma
+ + sec->output_offset);
+#if 0
+ fprintf (stderr,
+ "defined: sec: %s, name: %s, value: %x + %x + %x gives: %x\n",
+ sec->name, name, h->root.u.def.value,
+ sec->output_section->vma, sec->output_offset, relocation);
+#endif
+ }
+ else if (h->root.type == bfd_link_hash_undefweak)
+ {
+#if 0
+ fprintf (stderr, "undefined: sec: %s, name: %s\n",
+ sec->name, name);
+#endif
+ relocation = 0;
+ }
+ else
+ {
+ if (! ((*info->callbacks->undefined_symbol)
+ (info, h->root.root.string, input_bfd,
+ input_section, rel->r_offset,
+ (!info->shared && info->unresolved_syms_in_objects == RM_GENERATE_ERROR))))
+ return FALSE;
+#if 0
+ fprintf (stderr, "unknown: name: %s\n", name);
+#endif
+ relocation = 0;
+ }
+ }
+
+ switch (r_type)
+ {
+ default:
+ r = mep_final_link_relocate (howto, input_bfd, input_section,
+ contents, rel, relocation);
+ break;
+ }
+
+ if (r != bfd_reloc_ok)
+ {
+ const char * msg = (const char *) NULL;
+
+ switch (r)
+ {
+ case bfd_reloc_overflow:
+ r = info->callbacks->reloc_overflow
+ (info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0,
+ input_bfd, input_section, rel->r_offset);
+ break;
+
+ case bfd_reloc_undefined:
+ r = info->callbacks->undefined_symbol
+ (info, name, input_bfd, input_section, rel->r_offset, TRUE);
+ break;
+
+ case bfd_reloc_outofrange:
+ msg = _("internal error: out of range error");
+ break;
+
+ case bfd_reloc_notsupported:
+ msg = _("internal error: unsupported relocation error");
+ break;
+
+ case bfd_reloc_dangerous:
+ msg = _("internal error: dangerous relocation");
+ break;
+
+ default:
+ msg = _("internal error: unknown error");
+ break;
+ }
+
+ if (msg)
+ r = info->callbacks->warning
+ (info, msg, name, input_bfd, input_section, rel->r_offset);
+
+ if (! r)
+ return FALSE;
+ }
+ }
+
+ if (warn_tp)
+ info->callbacks->undefined_symbol
+ (info, "__tpbase", input_bfd, input_section, warn_tp-1, TRUE);
+ if (warn_sda)
+ info->callbacks->undefined_symbol
+ (info, "__sdabase", input_bfd, input_section, warn_sda-1, TRUE);
+ if (warn_sda || warn_tp)
+ return FALSE;
+
+ return TRUE;
+}
+
+
+/* Update the got entry reference counts for the section being
+ removed. */
+
+static bfd_boolean
+mep_elf_gc_sweep_hook
+ (bfd * abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info * info ATTRIBUTE_UNUSED,
+ asection * sec ATTRIBUTE_UNUSED,
+ const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}
+
+/* Return the section that should be marked against GC for a given
+ relocation. */
+
+static asection *
+mep_elf_gc_mark_hook
+ (asection * sec,
+ struct bfd_link_info * info ATTRIBUTE_UNUSED,
+ Elf_Internal_Rela * rel,
+ struct elf_link_hash_entry * h,
+ Elf_Internal_Sym * sym)
+{
+ if (h != NULL)
+ {
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ default:
+ switch (h->root.type)
+ {
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ return h->root.u.def.section;
+
+ case bfd_link_hash_common:
+ return h->root.u.c.p->section;
+
+ default:
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (!(elf_bad_symtab (sec->owner)
+ && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
+ && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
+ && sym->st_shndx != SHN_COMMON))
+ return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ }
+
+ return NULL;
+}
+
+
+/* Function to set the ELF flag bits. */
+
+static bfd_boolean
+mep_elf_set_private_flags (bfd * abfd,
+ flagword flags)
+{
+ elf_elfheader (abfd)->e_flags = flags;
+ elf_flags_init (abfd) = TRUE;
+ return TRUE;
+}
+
+static bfd_boolean
+mep_elf_copy_private_bfd_data (bfd * ibfd, bfd * obfd)
+{
+ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
+ || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
+ return TRUE;
+
+ elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
+ elf_flags_init (obfd) = TRUE;
+ return TRUE;
+}
+
+/* Merge backend specific data from an object file to the output
+ object file when linking. */
+
+static bfd_boolean
+mep_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
+{
+ static bfd *last_ibfd = 0;
+ flagword old_flags, new_flags;
+ flagword old_partial, new_partial;
+
+ /* Check if we have the same endianess. */
+ if (_bfd_generic_verify_endian_match (ibfd, obfd) == FALSE)
+ return FALSE;
+
+ new_flags = elf_elfheader (ibfd)->e_flags;
+ old_flags = elf_elfheader (obfd)->e_flags;
+
+#ifdef DEBUG
+ _bfd_error_handler ("%B: old_flags = 0x%.8lx, new_flags = 0x%.8lx, init = %s",
+ ibfd, old_flags, new_flags, elf_flags_init (obfd) ? "yes" : "no");
+#endif
+
+ /* First call, no flags set. */
+ if (!elf_flags_init (obfd))
+ {
+ elf_flags_init (obfd) = TRUE;
+ old_flags = new_flags;
+ }
+ else if ((new_flags | old_flags) & EF_MEP_LIBRARY)
+ {
+ /* Non-library flags trump library flags. The choice doesn't really
+ matter if both OLD_FLAGS and NEW_FLAGS have EF_MEP_LIBRARY set. */
+ if (old_flags & EF_MEP_LIBRARY)
+ old_flags = new_flags;
+ }
+ else
+ {
+ /* Make sure they're for the same mach. Allow upgrade from the "mep"
+ mach. */
+ new_partial = (new_flags & EF_MEP_CPU_MASK);
+ old_partial = (old_flags & EF_MEP_CPU_MASK);
+ if (new_partial == old_partial)
+ ;
+ else if (new_partial == EF_MEP_CPU_MEP)
+ ;
+ else if (old_partial == EF_MEP_CPU_MEP)
+ old_flags = (old_flags & ~EF_MEP_CPU_MASK) | new_partial;
+ else
+ {
+ _bfd_error_handler (_("%B and %B are for different cores"), last_ibfd, ibfd);
+ bfd_set_error (bfd_error_invalid_target);
+ return FALSE;
+ }
+
+ /* Make sure they're for the same me_module. Allow basic config to
+ mix with any other. */
+ new_partial = (new_flags & EF_MEP_INDEX_MASK);
+ old_partial = (old_flags & EF_MEP_INDEX_MASK);
+ if (new_partial == old_partial)
+ ;
+ else if (new_partial == 0)
+ ;
+ else if (old_partial == 0)
+ old_flags = (old_flags & ~EF_MEP_INDEX_MASK) | new_partial;
+ else
+ {
+ _bfd_error_handler (_("%B and %B are for different configurations"), last_ibfd, ibfd);
+ bfd_set_error (bfd_error_invalid_target);
+ return FALSE;
+ }
+ }
+
+ elf_elfheader (obfd)->e_flags = old_flags;
+ last_ibfd = ibfd;
+ return TRUE;
+}
+
+/* This will be edited by the MeP configration tool. */
+static const char * config_names[] =
+{
+ "basic"
+ /* start-mepcfgtool */
+ ,"simple"
+ ,"fmax"
+ /* end-mepcfgtool */
+};
+
+static const char * core_names[] =
+{
+ "MeP", "MeP-c2", "MeP-c3", "MeP-h1"
+};
+
+static bfd_boolean
+mep_elf_print_private_bfd_data (bfd * abfd, void * ptr)
+{
+ FILE * file = (FILE *) ptr;
+ flagword flags, partial_flags;
+
+ BFD_ASSERT (abfd != NULL && ptr != NULL);
+
+ /* Print normal ELF private data. */
+ _bfd_elf_print_private_bfd_data (abfd, ptr);
+
+ flags = elf_elfheader (abfd)->e_flags;
+ fprintf (file, _("private flags = 0x%lx"), (long)flags);
+
+ partial_flags = (flags & EF_MEP_CPU_MASK) >> 24;
+ if (partial_flags < ARRAY_SIZE (core_names))
+ fprintf (file, " core: %s", core_names[(long)partial_flags]);
+
+ partial_flags = flags & EF_MEP_INDEX_MASK;
+ if (partial_flags < ARRAY_SIZE (config_names))
+ fprintf (file, " me_module: %s", config_names[(long)partial_flags]);
+
+ fputc ('\n', file);
+
+ return TRUE;
+}
+
+/* Return the machine subcode from the ELF e_flags header. */
+
+static int
+elf32_mep_machine (bfd * abfd)
+{
+ switch (elf_elfheader (abfd)->e_flags & EF_MEP_CPU_MASK)
+ {
+ default: break;
+ case EF_MEP_CPU_C2: return bfd_mach_mep;
+ case EF_MEP_CPU_C3: return bfd_mach_mep;
+ case EF_MEP_CPU_C4: return bfd_mach_mep;
+ case EF_MEP_CPU_H1: return bfd_mach_mep_h1;
+ }
+
+ return bfd_mach_mep;
+}
+
+static bfd_boolean
+mep_elf_object_p (bfd * abfd)
+{
+ /* Irix 5 and 6 is broken. Object file symbol tables are not always
+ sorted correctly such that local symbols preceed global symbols,
+ and the sh_info field in the symbol table is not always right. */
+ /* This is needed for the RELC support code. */
+ elf_bad_symtab (abfd) = TRUE;
+ bfd_default_set_arch_mach (abfd, bfd_arch_mep, elf32_mep_machine (abfd));
+ return TRUE;
+}
+
+static bfd_boolean
+mep_elf_section_flags (flagword * flags, const Elf_Internal_Shdr * hdr)
+{
+ if (hdr->sh_flags & SHF_MEP_VLIW)
+ * flags |= SEC_MEP_VLIW;
+ return TRUE;
+}
+
+static bfd_boolean
+mep_elf_fake_sections (bfd * abfd ATTRIBUTE_UNUSED,
+ Elf_Internal_Shdr * hdr,
+ asection * sec)
+{
+ if (sec->flags & SEC_MEP_VLIW)
+ hdr->sh_flags |= SHF_MEP_VLIW;
+ return TRUE;
+}
+
+
+#define ELF_ARCH bfd_arch_mep
+#define ELF_MACHINE_CODE EM_CYGNUS_MEP
+#define ELF_MAXPAGESIZE 0x1000
+
+#define TARGET_BIG_SYM bfd_elf32_mep_vec
+#define TARGET_BIG_NAME "elf32-mep"
+
+#define TARGET_LITTLE_SYM bfd_elf32_mep_little_vec
+#define TARGET_LITTLE_NAME "elf32-mep-little"
+
+#define elf_info_to_howto_rel NULL
+#define elf_info_to_howto mep_info_to_howto_rela
+#define elf_backend_relocate_section mep_elf_relocate_section
+#define elf_backend_gc_mark_hook mep_elf_gc_mark_hook
+#define elf_backend_gc_sweep_hook mep_elf_gc_sweep_hook
+#define elf_backend_check_relocs mep_elf_check_relocs
+#define elf_backend_object_p mep_elf_object_p
+#define elf_backend_section_flags mep_elf_section_flags
+#define elf_backend_fake_sections mep_elf_fake_sections
+
+#define elf_backend_can_gc_sections 1
+
+#define bfd_elf32_bfd_reloc_type_lookup mep_reloc_type_lookup
+#define bfd_elf32_bfd_set_private_flags mep_elf_set_private_flags
+#define bfd_elf32_bfd_copy_private_bfd_data mep_elf_copy_private_bfd_data
+#define bfd_elf32_bfd_merge_private_bfd_data mep_elf_merge_private_bfd_data
+#define bfd_elf32_bfd_print_private_bfd_data mep_elf_print_private_bfd_data
+
+/* We use only the RELA entries. */
+#define USE_RELA
+
+#include "elf32-target.h"
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index d58cf34471..04c2d914b0 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -1237,6 +1237,12 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic)
case STT_TLS:
sym->symbol.flags |= BSF_THREAD_LOCAL;
break;
+ case STT_RELC:
+ sym->symbol.flags |= BSF_RELC;
+ break;
+ case STT_SRELC:
+ sym->symbol.flags |= BSF_SRELC;
+ break;
}
if (dynamic)
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 77aae5e493..4da5d792b7 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -6348,6 +6348,716 @@ struct elf_outext_info
struct elf_final_link_info *finfo;
};
+
+/* Support for evaluating a complex relocation.
+
+ Complex relocations are generalized, self-describing relocations. The
+ implementation of them consists of two parts: complex symbols, and the
+ relocations themselves.
+
+ The relocations are use a reserved elf-wide relocation type code (R_RELC
+ external / BFD_RELOC_RELC internal) and an encoding of relocation field
+ information (start bit, end bit, word width, etc) into the addend. This
+ information is extracted from CGEN-generated operand tables within gas.
+
+ Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
+ internal) representing prefix-notation expressions, including but not
+ limited to those sorts of expressions normally encoded as addends in the
+ addend field. The symbol mangling format is:
+
+ <node> := <literal>
+ | <unary-operator> ':' <node>
+ | <binary-operator> ':' <node> ':' <node>
+ ;
+
+ <literal> := 's' <digits=N> ':' <N character symbol name>
+ | 'S' <digits=N> ':' <N character section name>
+ | '#' <hexdigits>
+ ;
+
+ <binary-operator> := as in C
+ <unary-operator> := as in C, plus "0-" for unambiguous negation. */
+
+static void
+set_symbol_value (bfd * bfd_with_globals,
+ struct elf_final_link_info * finfo,
+ int symidx,
+ bfd_vma val)
+{
+ bfd_boolean is_local;
+ Elf_Internal_Sym * sym;
+ struct elf_link_hash_entry ** sym_hashes;
+ struct elf_link_hash_entry * h;
+
+ sym_hashes = elf_sym_hashes (bfd_with_globals);
+ sym = finfo->internal_syms + symidx;
+ is_local = ELF_ST_BIND(sym->st_info) == STB_LOCAL;
+
+ if (is_local)
+ {
+ /* It is a local symbol: move it to the
+ "absolute" section and give it a value. */
+ sym->st_shndx = SHN_ABS;
+ sym->st_value = val;
+ }
+ else
+ {
+ /* It is a global symbol: set its link type
+ to "defined" and give it a value. */
+ h = sym_hashes [symidx];
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ h->root.type = bfd_link_hash_defined;
+ h->root.u.def.value = val;
+ h->root.u.def.section = bfd_abs_section_ptr;
+ }
+}
+
+static bfd_boolean
+resolve_symbol (const char * name,
+ bfd * input_bfd,
+ struct elf_final_link_info * finfo,
+ bfd_vma * result,
+ size_t locsymcount)
+{
+ Elf_Internal_Sym * sym;
+ struct bfd_link_hash_entry * global_entry;
+ const char * candidate = NULL;
+ Elf_Internal_Shdr * symtab_hdr;
+ asection * sec = NULL;
+ size_t i;
+
+ symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+
+ for (i = 0; i < locsymcount; ++ i)
+ {
+ sym = finfo->internal_syms + i;
+ sec = finfo->sections [i];
+
+ if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
+ continue;
+
+ candidate = bfd_elf_string_from_elf_section (input_bfd,
+ symtab_hdr->sh_link,
+ sym->st_name);
+#ifdef DEBUG
+ printf ("Comparing string: '%s' vs. '%s' = 0x%x\n",
+ name, candidate, (unsigned int)sym->st_value);
+#endif
+ if (candidate && strcmp (candidate, name) == 0)
+ {
+ * result = sym->st_value;
+
+ if (sym->st_shndx > SHN_UNDEF &&
+ sym->st_shndx < SHN_LORESERVE)
+ {
+#ifdef DEBUG
+ printf ("adjusting for sec '%s' @ 0x%x + 0x%x\n",
+ sec->output_section->name,
+ (unsigned int)sec->output_section->vma,
+ (unsigned int)sec->output_offset);
+#endif
+ * result += sec->output_offset + sec->output_section->vma;
+ }
+#ifdef DEBUG
+ printf ("Found symbol with effective value %8.8x\n", (unsigned int)* result);
+#endif
+ return TRUE;
+ }
+ }
+
+ /* Hmm, haven't found it yet. perhaps it is a global. */
+ global_entry = bfd_link_hash_lookup (finfo->info->hash, name, FALSE, FALSE, TRUE);
+ if (!global_entry)
+ return FALSE;
+
+ if (global_entry->type == bfd_link_hash_defined
+ || global_entry->type == bfd_link_hash_defweak)
+ {
+ * result = global_entry->u.def.value
+ + global_entry->u.def.section->output_section->vma
+ + global_entry->u.def.section->output_offset;
+#ifdef DEBUG
+ printf ("Found GLOBAL symbol '%s' with value %8.8x\n",
+ global_entry->root.string, (unsigned int)*result);
+#endif
+ return TRUE;
+ }
+
+ if (global_entry->type == bfd_link_hash_common)
+ {
+ *result = global_entry->u.def.value +
+ bfd_com_section_ptr->output_section->vma +
+ bfd_com_section_ptr->output_offset;
+#ifdef DEBUG
+ printf ("Found COMMON symbol '%s' with value %8.8x\n",
+ global_entry->root.string, (unsigned int)*result);
+#endif
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bfd_boolean
+resolve_section (const char * name,
+ asection * sections,
+ bfd_vma * result)
+{
+ asection * curr;
+ unsigned int len;
+
+ for (curr = sections; curr; curr = curr->next)
+ if (strcmp (curr->name, name) == 0)
+ {
+ *result = curr->vma;
+ return TRUE;
+ }
+
+ /* Hmm. still haven't found it. try pseudo-section names. */
+ for (curr = sections; curr; curr = curr->next)
+ {
+ len = strlen (curr->name);
+ if (len > strlen (name))
+ continue;
+
+ if (strncmp (curr->name, name, len) == 0)
+ {
+ if (strncmp (".end", name + len, 4) == 0)
+ {
+ *result = curr->vma + curr->size;
+ return TRUE;
+ }
+
+ /* Insert more pseudo-section names here, if you like. */
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+undefined_reference (const char * reftype,
+ const char * name)
+{
+ _bfd_error_handler (_("undefined %s reference in complex symbol: %s"), reftype, name);
+}
+
+static bfd_boolean
+eval_symbol (bfd_vma * result,
+ char * sym,
+ char ** advanced,
+ bfd * input_bfd,
+ struct elf_final_link_info * finfo,
+ bfd_vma addr,
+ bfd_vma section_offset,
+ size_t locsymcount,
+ int signed_p)
+{
+ int len;
+ int symlen;
+ bfd_vma a;
+ bfd_vma b;
+ const int bufsz = 4096;
+ char symbuf [bufsz];
+ const char * symend;
+ bfd_boolean symbol_is_section = FALSE;
+
+ len = strlen (sym);
+ symend = sym + len;
+
+ if (len < 1 || len > bufsz)
+ {
+ bfd_set_error (bfd_error_invalid_operation);
+ return FALSE;
+ }
+
+ switch (* sym)
+ {
+ case '.':
+ * result = addr + section_offset;
+ * advanced = sym + 1;
+ return TRUE;
+
+ case '#':
+ ++ sym;
+ * result = strtoul (sym, advanced, 16);
+ return TRUE;
+
+ case 'S':
+ symbol_is_section = TRUE;
+ case 's':
+ ++ sym;
+ symlen = strtol (sym, &sym, 10);
+ ++ sym; /* Skip the trailing ':'. */
+
+ if ((symend < sym) || ((symlen + 1) > bufsz))
+ {
+ bfd_set_error (bfd_error_invalid_operation);
+ return FALSE;
+ }
+
+ memcpy (symbuf, sym, symlen);
+ symbuf [symlen] = '\0';
+ * advanced = sym + symlen;
+
+ /* Is it always possible, with complex symbols, that gas "mis-guessed"
+ the symbol as a section, or vice-versa. so we're pretty liberal in our
+ interpretation here; section means "try section first", not "must be a
+ section", and likewise with symbol. */
+
+ if (symbol_is_section)
+ {
+ if ((resolve_section (symbuf, finfo->output_bfd->sections, result) != TRUE)
+ && (resolve_symbol (symbuf, input_bfd, finfo, result, locsymcount) != TRUE))
+ {
+ undefined_reference ("section", symbuf);
+ return FALSE;
+ }
+ }
+ else
+ {
+ if ((resolve_symbol (symbuf, input_bfd, finfo, result, locsymcount) != TRUE)
+ && (resolve_section (symbuf, finfo->output_bfd->sections,
+ result) != TRUE))
+ {
+ undefined_reference ("symbol", symbuf);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+
+ /* All that remains are operators. */
+
+#define UNARY_OP(op) \
+ if (strncmp (sym, #op, strlen (#op)) == 0) \
+ { \
+ sym += strlen (#op); \
+ if (* sym == ':') \
+ ++ sym; \
+ if (eval_symbol (& a, sym, & sym, input_bfd, finfo, addr, \
+ section_offset, locsymcount, signed_p) \
+ != TRUE) \
+ return FALSE; \
+ if (signed_p) \
+ * result = op ((signed)a); \
+ else \
+ * result = op a; \
+ * advanced = sym; \
+ return TRUE; \
+ }
+
+#define BINARY_OP(op) \
+ if (strncmp (sym, #op, strlen (#op)) == 0) \
+ { \
+ sym += strlen (#op); \
+ if (* sym == ':') \
+ ++ sym; \
+ if (eval_symbol (& a, sym, & sym, input_bfd, finfo, addr, \
+ section_offset, locsymcount, signed_p) \
+ != TRUE) \
+ return FALSE; \
+ ++ sym; \
+ if (eval_symbol (& b, sym, & sym, input_bfd, finfo, addr, \
+ section_offset, locsymcount, signed_p) \
+ != TRUE) \
+ return FALSE; \
+ if (signed_p) \
+ * result = ((signed) a) op ((signed) b); \
+ else \
+ * result = a op b; \
+ * advanced = sym; \
+ return TRUE; \
+ }
+
+ default:
+ UNARY_OP (0-);
+ BINARY_OP (<<);
+ BINARY_OP (>>);
+ BINARY_OP (==);
+ BINARY_OP (!=);
+ BINARY_OP (<=);
+ BINARY_OP (>=);
+ BINARY_OP (&&);
+ BINARY_OP (||);
+ UNARY_OP (~);
+ UNARY_OP (!);
+ BINARY_OP (*);
+ BINARY_OP (/);
+ BINARY_OP (%);
+ BINARY_OP (^);
+ BINARY_OP (|);
+ BINARY_OP (&);
+ BINARY_OP (+);
+ BINARY_OP (-);
+ BINARY_OP (<);
+ BINARY_OP (>);
+#undef UNARY_OP
+#undef BINARY_OP
+ _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
+ bfd_set_error (bfd_error_invalid_operation);
+ return FALSE;
+ }
+}
+
+/* Entry point to evaluator, called from elf_link_input_bfd. */
+
+static bfd_boolean
+evaluate_complex_relocation_symbols (bfd * input_bfd,
+ struct elf_final_link_info * finfo,
+ size_t locsymcount)
+{
+ const struct elf_backend_data * bed;
+ Elf_Internal_Shdr * symtab_hdr;
+ struct elf_link_hash_entry ** sym_hashes;
+ asection * reloc_sec;
+ bfd_boolean result = TRUE;
+
+ /* For each section, we're going to check and see if it has any
+ complex relocations, and we're going to evaluate any of them
+ we can. */
+
+ if (finfo->info->relocatable)
+ return TRUE;
+
+ symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (input_bfd);
+ bed = get_elf_backend_data (input_bfd);
+
+ for (reloc_sec = input_bfd->sections; reloc_sec; reloc_sec = reloc_sec->next)
+ {
+ Elf_Internal_Rela * internal_relocs;
+ unsigned long i;
+
+ /* This section was omitted from the link. */
+ if (! reloc_sec->linker_mark)
+ continue;
+
+ /* Only process sections containing relocs. */
+ if ((reloc_sec->flags & SEC_RELOC) == 0)
+ continue;
+
+ if (reloc_sec->reloc_count == 0)
+ continue;
+
+ /* Read in the relocs for this section. */
+ internal_relocs
+ = _bfd_elf_link_read_relocs (input_bfd, reloc_sec, NULL,
+ (Elf_Internal_Rela *) NULL,
+ FALSE);
+ if (internal_relocs == NULL)
+ continue;
+
+ for (i = reloc_sec->reloc_count; i--;)
+ {
+ Elf_Internal_Rela * rel;
+ char * sym_name;
+ unsigned long index;
+ Elf_Internal_Sym * sym;
+ bfd_vma result;
+ bfd_vma section_offset;
+ bfd_vma addr;
+ int signed_p = 0;
+
+ rel = internal_relocs + i;
+ section_offset = reloc_sec->output_section->vma
+ + reloc_sec->output_offset;
+ addr = rel->r_offset;
+
+ index = ELF32_R_SYM (rel->r_info);
+ if (bed->s->arch_size == 64)
+ index >>= 24;
+
+ if (index < locsymcount)
+ {
+ /* The symbol is local. */
+ sym = finfo->internal_syms + index;
+
+ /* We're only processing STT_RELC or STT_SRELC type symbols. */
+ if ((ELF_ST_TYPE (sym->st_info) != STT_RELC) &&
+ (ELF_ST_TYPE (sym->st_info) != STT_SRELC))
+ continue;
+
+ sym_name = bfd_elf_string_from_elf_section
+ (input_bfd, symtab_hdr->sh_link, sym->st_name);
+
+ signed_p = (ELF_ST_TYPE (sym->st_info) == STT_SRELC);
+ }
+ else
+ {
+ /* The symbol is global. */
+ struct elf_link_hash_entry * h;
+
+ if (elf_bad_symtab (input_bfd))
+ continue;
+
+ h = sym_hashes [index - locsymcount];
+ while ( h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ if (h->type != STT_RELC && h->type != STT_SRELC)
+ continue;
+
+ signed_p = (h->type == STT_SRELC);
+ sym_name = (char *) h->root.root.string;
+ }
+#ifdef DEBUG
+ printf ("Encountered a complex symbol!");
+ printf (" (input_bfd %s, section %s, reloc %ld\n",
+ input_bfd->filename, reloc_sec->name, i);
+ printf (" symbol: idx %8.8lx, name %s\n",
+ index, sym_name);
+ printf (" reloc : info %8.8lx, addr %8.8lx\n",
+ rel->r_info, addr);
+ printf (" Evaluating '%s' ...\n ", sym_name);
+#endif
+ if (eval_symbol (& result, sym_name, & sym_name, input_bfd,
+ finfo, addr, section_offset, locsymcount,
+ signed_p))
+ /* Symbol evaluated OK. Update to absolute value. */
+ set_symbol_value (input_bfd, finfo, index, result);
+
+ else
+ result = FALSE;
+ }
+
+ if (internal_relocs != elf_section_data (reloc_sec)->relocs)
+ free (internal_relocs);
+ }
+
+ /* If nothing went wrong, then we adjusted
+ everything we wanted to adjust. */
+ return result;
+}
+
+static void
+put_value (bfd_vma size,
+ unsigned long chunksz,
+ bfd * input_bfd,
+ bfd_vma x,
+ bfd_byte * location)
+{
+ location += (size - chunksz);
+
+ for (; size; size -= chunksz, location -= chunksz, x >>= (chunksz * 8))
+ {
+ switch (chunksz)
+ {
+ default:
+ case 0:
+ abort ();
+ case 1:
+ bfd_put_8 (input_bfd, x, location);
+ break;
+ case 2:
+ bfd_put_16 (input_bfd, x, location);
+ break;
+ case 4:
+ bfd_put_32 (input_bfd, x, location);
+ break;
+ case 8:
+#ifdef BFD64
+ bfd_put_64 (input_bfd, x, location);
+#else
+ abort ();
+#endif
+ break;
+ }
+ }
+}
+
+static bfd_vma
+get_value (bfd_vma size,
+ unsigned long chunksz,
+ bfd * input_bfd,
+ bfd_byte * location)
+{
+ bfd_vma x = 0;
+
+ for (; size; size -= chunksz, location += chunksz)
+ {
+ switch (chunksz)
+ {
+ default:
+ case 0:
+ abort ();
+ case 1:
+ x = (x << (8 * chunksz)) | bfd_get_8 (input_bfd, location);
+ break;
+ case 2:
+ x = (x << (8 * chunksz)) | bfd_get_16 (input_bfd, location);
+ break;
+ case 4:
+ x = (x << (8 * chunksz)) | bfd_get_32 (input_bfd, location);
+ break;
+ case 8:
+#ifdef BFD64
+ x = (x << (8 * chunksz)) | bfd_get_64 (input_bfd, location);
+#else
+ abort ();
+#endif
+ break;
+ }
+ }
+ return x;
+}
+
+static void
+decode_complex_addend
+ (unsigned long * start, /* in bits */
+ unsigned long * oplen, /* in bits */
+ unsigned long * len, /* in bits */
+ unsigned long * wordsz, /* in bytes */
+ unsigned long * chunksz, /* in bytes */
+ unsigned long * lsb0_p,
+ unsigned long * signed_p,
+ unsigned long * trunc_p,
+ unsigned long encoded)
+{
+ * start = encoded & 0x3F;
+ * len = (encoded >> 6) & 0x3F;
+ * oplen = (encoded >> 12) & 0x3F;
+ * wordsz = (encoded >> 18) & 0xF;
+ * chunksz = (encoded >> 22) & 0xF;
+ * lsb0_p = (encoded >> 27) & 1;
+ * signed_p = (encoded >> 28) & 1;
+ * trunc_p = (encoded >> 29) & 1;
+}
+
+void
+bfd_elf_perform_complex_relocation
+ (bfd * output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info * info,
+ bfd * input_bfd,
+ asection * input_section,
+ bfd_byte * contents,
+ Elf_Internal_Rela * rel,
+ Elf_Internal_Sym * local_syms,
+ asection ** local_sections)
+{
+ const struct elf_backend_data * bed;
+ Elf_Internal_Shdr * symtab_hdr;
+ asection * sec;
+ bfd_vma relocation = 0, shift, x;
+ unsigned long r_symndx;
+ bfd_vma mask;
+ unsigned long start, oplen, len, wordsz,
+ chunksz, lsb0_p, signed_p, trunc_p;
+
+ /* Perform this reloc, since it is complex.
+ (this is not to say that it necessarily refers to a complex
+ symbol; merely that it is a self-describing CGEN based reloc.
+ i.e. the addend has the complete reloc information (bit start, end,
+ word size, etc) encoded within it.). */
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ bed = get_elf_backend_data (input_bfd);
+ if (bed->s->arch_size == 64)
+ r_symndx >>= 24;
+
+#ifdef DEBUG
+ printf ("Performing complex relocation %ld...\n", r_symndx);
+#endif
+
+ symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+ if (r_symndx < symtab_hdr->sh_info)
+ {
+ /* The symbol is local. */
+ Elf_Internal_Sym * sym;
+
+ sym = local_syms + r_symndx;
+ sec = local_sections [r_symndx];
+ relocation = sym->st_value;
+ if (sym->st_shndx > SHN_UNDEF &&
+ sym->st_shndx < SHN_LORESERVE)
+ relocation += (sec->output_offset +
+ sec->output_section->vma);
+ }
+ else
+ {
+ /* The symbol is global. */
+ struct elf_link_hash_entry **sym_hashes;
+ struct elf_link_hash_entry * h;
+
+ sym_hashes = elf_sym_hashes (input_bfd);
+ h = sym_hashes [r_symndx];
+
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ {
+ sec = h->root.u.def.section;
+ relocation = h->root.u.def.value;
+
+ if (! bfd_is_abs_section (sec))
+ relocation += (sec->output_section->vma
+ + sec->output_offset);
+ }
+ if (h->root.type == bfd_link_hash_undefined
+ && !((*info->callbacks->undefined_symbol)
+ (info, h->root.root.string, input_bfd,
+ input_section, rel->r_offset,
+ info->unresolved_syms_in_objects == RM_GENERATE_ERROR
+ || ELF_ST_VISIBILITY (h->other))))
+ return;
+ }
+
+ decode_complex_addend (& start, & oplen, & len, & wordsz,
+ & chunksz, & lsb0_p, & signed_p,
+ & trunc_p, rel->r_addend);
+
+ mask = (((1L << (len - 1)) - 1) << 1) | 1;
+
+ if (lsb0_p)
+ shift = (start + 1) - len;
+ else
+ shift = (8 * wordsz) - (start + len);
+
+ x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset);
+
+#ifdef DEBUG
+ printf ("Doing complex reloc: "
+ "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
+ "chunksz %ld, start %ld, len %ld, oplen %ld\n"
+ " dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
+ lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
+ oplen, x, mask, relocation);
+#endif
+
+ if (! trunc_p)
+ {
+ /* Now do an overflow check. */
+ if (bfd_check_overflow ((signed_p ?
+ complain_overflow_signed :
+ complain_overflow_unsigned),
+ len, 0, (8 * wordsz),
+ relocation) == bfd_reloc_overflow)
+ (*_bfd_error_handler)
+ ("%s (%s + 0x%lx): relocation overflow: 0x%lx %sdoes not fit "
+ "within 0x%lx",
+ input_bfd->filename, input_section->name, rel->r_offset,
+ relocation, (signed_p ? "(signed) " : ""), mask);
+ }
+
+ /* Do the deed. */
+ x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
+
+#ifdef DEBUG
+ printf (" relocation: %8.8lx\n"
+ " shifted mask: %8.8lx\n"
+ " shifted/masked reloc: %8.8lx\n"
+ " result: %8.8lx\n",
+ relocation, (mask << shift),
+ ((relocation & mask) << shift), x);
+#endif
+ put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset);
+}
+
/* When performing a relocatable link, the input relocations are
preserved. But, if they reference global symbols, the indices
referenced must be updated. Update all the relocations in
@@ -7509,6 +8219,9 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
return FALSE;
}
+ if (! evaluate_complex_relocation_symbols (input_bfd, finfo, locsymcount))
+ return FALSE;
+
/* Relocate the contents of each section. */
sym_hashes = elf_sym_hashes (input_bfd);
for (o = input_bfd->sections; o != NULL; o = o->next)
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 8c552643fb..c564e30431 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -1529,6 +1529,27 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_MCORE_PCREL_32",
"BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2",
"BFD_RELOC_MCORE_RVA",
+ "BFD_RELOC_MEP_8",
+ "BFD_RELOC_MEP_16",
+ "BFD_RELOC_MEP_32",
+ "BFD_RELOC_MEP_PCREL8A2",
+ "BFD_RELOC_MEP_PCREL12A2",
+ "BFD_RELOC_MEP_PCREL17A2",
+ "BFD_RELOC_MEP_PCREL24A2",
+ "BFD_RELOC_MEP_PCABS24A2",
+ "BFD_RELOC_MEP_LOW16",
+ "BFD_RELOC_MEP_HI16U",
+ "BFD_RELOC_MEP_HI16S",
+ "BFD_RELOC_MEP_GPREL",
+ "BFD_RELOC_MEP_TPREL",
+ "BFD_RELOC_MEP_TPREL7",
+ "BFD_RELOC_MEP_TPREL7A2",
+ "BFD_RELOC_MEP_TPREL7A4",
+ "BFD_RELOC_MEP_UIMM24",
+ "BFD_RELOC_MEP_ADDR24A4",
+ "BFD_RELOC_MEP_GNU_VTINHERIT",
+ "BFD_RELOC_MEP_GNU_VTENTRY",
+
"BFD_RELOC_MMIX_GETA",
"BFD_RELOC_MMIX_GETA_1",
"BFD_RELOC_MMIX_GETA_2",
@@ -1865,6 +1886,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_XSTORMY16_12",
"BFD_RELOC_XSTORMY16_24",
"BFD_RELOC_XSTORMY16_FPTR16",
+ "BFD_RELOC_RELC",
+
"BFD_RELOC_XC16X_PAG",
"BFD_RELOC_XC16X_POF",
"BFD_RELOC_XC16X_SEG",
diff --git a/bfd/mep-relocs.pl b/bfd/mep-relocs.pl
new file mode 100755
index 0000000000..d227b8252c
--- /dev/null
+++ b/bfd/mep-relocs.pl
@@ -0,0 +1,274 @@
+#!/usr/bin/perl
+# -*- perl -*-
+#
+# Toshiba MeP Media Engine Relocation Generator
+# Copyright (C) 2001, 2007 Free Software Foundation, Inc.
+# This file is part of BFD.
+# Originally written by DJ Delorie <dj@redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+
+# Usage: Run this anywhere inside your source tree. It will read
+# include/elf/mep.h and scan the comments therein. It will renumber
+# the relocs to be sequential (this is needed so that bfd/elf32-mep.h
+# works) if needed. It will then update the reloc list in bfd/reloc.c
+# and the howto, mapping, and apply routines in bfd/elf32-mep.c. You
+# can then regenerate bfd-in2.h and check everything in.
+
+# FIXME: After the relocation list is finalized, change this to
+# *verify* the reloc list, rather than resequence it.
+
+while (! -f "include/elf/mep.h" && ! -f "bfd/reloc.c") {
+ chdir "..";
+ $pwd = `pwd`;
+ if ($pwd !~ m@/.*/@) {
+ print STDERR "Cannot find include/elf/mep.h or bfd/reloc.h\n";
+ exit 1;
+ }
+}
+$pwd = `pwd`;
+print "srctop is $pwd";
+
+printf "Reading include/elf/mep.h ...\n";
+open(MEPH, "include/elf/mep.h");
+open(MEPHO, "> include/elf/mep.h.new") || die("mep.h.new create: $!");
+$val = 0;
+while (<MEPH>) {
+ if (($pre,$rel,$rest) = /(.*RELOC_NUMBER \()([^,]+), *\d+(.*)/) {
+ $rest =~ s/[\r\n]+$//;
+ print (MEPHO "$pre$rel, $val$rest\n") || die("mep.h.new write: $!");
+ $val ++;
+ $rel =~ s/R_MEP_//;
+ push(@relocs, $rel);
+
+ $rest =~ s@.*/\* @@;
+ ($pattern, $sign, $attrs) = $rest =~ m@(.*) ([US]) (.*)\*/@;
+ $pattern =~ s/ //g;
+ push(@pattern, $pattern);
+ push(@sign, $sign);
+ push(@attrs, $attrs);
+
+ printf "%4d $rel p=`$pattern' s=`$sign' a=`$attrs'\n", $#pattern;
+
+ } else {
+ print(MEPHO) || die("mep.h.new write: $!");
+ }
+}
+close(MEPH);
+close(MEPHO) || die("mep.h.new close: $!");
+
+&swapfile("include/elf/mep.h");
+
+redo_file ("bfd/reloc.c",
+ "",
+ "ENUMDOC\n Toshiba Media Processor Relocations.\n\nCOMMENT\n",
+ "ENUM\n BFD_RELOC_MEP_%s\n",
+ "");
+
+$autogen = " /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */\n";
+
+redo_file ("bfd/elf32-mep.c",
+ "MEPRELOC:HOWTO",
+ $autogen,
+ "MEPRELOC:END",
+ "",
+ "&emit_howto();",
+ "MEPRELOC:MAP",
+ $autogen,
+ "MEPRELOC:END",
+ "",
+ " MAP(%s);\n",
+ "MEPRELOC:APPLY",
+ $autogen,
+ "MEPRELOC:END",
+ "",
+ "&emit_apply();",
+ );
+
+sub mask2shifts {
+ my ($mask) = @_;
+ my ($bits, $left, $right, $ci, $c, $cv);
+ $bits = 0;
+ $left = 0;
+ $right = 32;
+ for ($ci=0; $ci<length($mask); $ci++) {
+ $c = substr($mask, $ci, 1);
+ $left++;
+ next if $c eq '-';
+ $left = 0;
+ $cv = ord($c) - ord('0');
+ $cv -= ord('a') - ord('9') - 1 if $cv > 9;
+ $right = $cv unless $right < $cv;
+ $bits = $cv+1 unless $bits > $cv+1;
+ }
+ $mask =~ tr/-/1/c;
+ $mask =~ tr/-/0/;
+ ($rmask = $mask) =~ tr/01/10/;
+ $mask = unpack("H*", pack("B*", $mask));
+ $rmask = unpack("H*", pack("B*", $rmask));
+ return ($bits, $left, $right, $mask, $rmask);
+}
+
+sub emit_howto {
+ for ($i=2; $i<=$#relocs; $i++) {
+ $mask = $pattern[$i];
+
+ if (length($mask) == 8) { $bytesize = 0; }
+ elsif (length($mask) == 16) { $bytesize = 1; }
+ elsif (length($mask) == 32) { $bytesize = 2; }
+
+ ($bits, $left, $right, $mask) = mask2shifts ($mask);
+ $bits[$i] = $bits;
+ $pcrel = 0;
+ $pcrel = 1 if $attrs[$i] =~ /pc-rel/i;
+ $overflow = $sign[$i];
+ $overflow = 'N' if $attrs[$i] =~ /no-overflow/;
+
+ $c = "$relocs[$i],";
+ printf(NEW " MEPREL (R_MEP_%-10s%d,%3d,%2d,%2d,%2d,%2s, 0x%s),\n",
+ $c, $bytesize, $bits, $left, $right, $pcrel, $overflow, $mask);
+ }
+}
+
+sub emit_apply {
+ for ($i=2; $i<=$#relocs; $i++) {
+ $v = "u";
+ $v = "s" if $sign[$i] =~ /S/;
+ if (length($pattern[$i]) == 8) {
+ $e = ''; # no endian swap for bytes
+ } elsif ($pattern[$i] =~ /-/ || length($pattern[$i]) == 16) {
+ $e = '^e2'; # endian swap - 2byte words only
+ } else {
+ $e = '^e4' # endian swap for data
+ }
+ print NEW " case R_MEP_$relocs[$i]: /* $pattern[$i] */\n";
+ if ($attrs[$i] =~ /tp-rel/i) {
+ print NEW " $v -= mep_tpoff_base(rel->r_offset);\n";
+ }
+ if ($attrs[$i] =~ /gp-rel/i) {
+ print NEW " $v -= mep_sdaoff_base(rel->r_offset);\n";
+ }
+ if ($attrs[$i] !~ /no-overflow/ && $bits[$i] < 32) {
+ if ($v eq "u") {
+ $max = (1 << $bits[$i]) - 1;
+ print NEW " if (u > $max) r = bfd_reloc_overflow;\n";
+ } else {
+ $min = -(1 << ($bits[$i]-1));
+ $max = (1 << ($bits[$i]-1)) - 1;
+ print NEW " if ($min > s || s > $max) r = bfd_reloc_overflow;\n";
+ }
+ }
+ for ($b=0; $b<length($pattern[$i]); $b += 8) {
+ $mask = substr($pattern[$i], $b, 8);
+ ($bits, $left, $right, $mask, $rmask) = mask2shifts ($mask);
+ if ($left > $right) { $left -= $right; $right = 0; }
+ else { $right -= $left; $left = 0; }
+
+ if ($mask ne "00") {
+ $bb = $b / 8;
+ print NEW " byte[$bb$e] = ";
+ print NEW "(byte[$bb$e] & 0x$rmask) | " if $rmask ne "00";
+ if ($left) {
+ print NEW "(($v << $left) & 0x$mask)";
+ } elsif ($right) {
+ print NEW "(($v >> $right) & 0x$mask)";
+ } else {
+ print NEW "($v & 0x$mask)";
+ }
+ print NEW ";\n";
+ }
+ }
+ print NEW " break;\n";
+ }
+}
+
+
+#-----------------------------------------------------------------------------
+
+sub redo_file {
+ my ($file, @control) = @_;
+ open(OLD, $file);
+ open(NEW, "> $file.new") || die("$file.new create: $!");
+
+ print "Scanning file $file ...\n";
+
+ while (1) {
+ $start = shift @control;
+ $prefix = shift @control;
+ $end = shift @control;
+ $suffix = shift @control;
+ $pattern = shift @control;
+
+ if (!$start) {
+ print NEW while <OLD>;
+ last;
+ }
+
+ print " looking for $start\n";
+ while (<OLD>) {
+ print NEW;
+ last if /\Q$start\E/;
+ }
+ print "can't find $start\n" unless $_;
+ last unless $_;
+
+ print NEW $prefix;
+ if ($pattern =~ /^\&/) {
+ eval $pattern;
+ die("$pattern: $@") if $@;
+ } else {
+ for $i (2..$#relocs) {
+ printf (NEW "$pattern", $relocs[$i]) || die("$file.new write: $!");
+ $pattern =~ s/^ENUM\n/ENUMX\n/;
+ }
+ }
+ print NEW $suffix;
+ while (<OLD>) {
+ last if /\Q$end\E/;
+ }
+ print NEW;
+ }
+
+ close(OLD);
+ close(NEW) || die("$file.new close: $!");
+ &swapfile($file);
+}
+
+#-----------------------------------------------------------------------------
+
+sub swapfile {
+ my ($f) = @_;
+ if ( ! -f "$f.save") {
+ system "cp $f $f.save";
+ }
+ open(ORIG, $f);
+ open(NEW, "$f.new");
+ while (<ORIG>) {
+ $n = <NEW>;
+ if ($n ne $_) {
+ close(ORIG);
+ close(NEW);
+ print " Updating $f\n";
+ rename "$f", "$f.old";
+ rename "$f.new", "$f";
+ return;
+ }
+ }
+ close(ORIG);
+ close(NEW);
+ print " No change to $f\n";
+ unlink "$f.new";
+}
diff --git a/bfd/reloc.c b/bfd/reloc.c
index 1b8c8d75e7..f81a3bffe5 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -3701,6 +3701,50 @@ ENUMDOC
Motorola Mcore relocations.
ENUM
+ BFD_RELOC_MEP_8
+ENUMX
+ BFD_RELOC_MEP_16
+ENUMX
+ BFD_RELOC_MEP_32
+ENUMX
+ BFD_RELOC_MEP_PCREL8A2
+ENUMX
+ BFD_RELOC_MEP_PCREL12A2
+ENUMX
+ BFD_RELOC_MEP_PCREL17A2
+ENUMX
+ BFD_RELOC_MEP_PCREL24A2
+ENUMX
+ BFD_RELOC_MEP_PCABS24A2
+ENUMX
+ BFD_RELOC_MEP_LOW16
+ENUMX
+ BFD_RELOC_MEP_HI16U
+ENUMX
+ BFD_RELOC_MEP_HI16S
+ENUMX
+ BFD_RELOC_MEP_GPREL
+ENUMX
+ BFD_RELOC_MEP_TPREL
+ENUMX
+ BFD_RELOC_MEP_TPREL7
+ENUMX
+ BFD_RELOC_MEP_TPREL7A2
+ENUMX
+ BFD_RELOC_MEP_TPREL7A4
+ENUMX
+ BFD_RELOC_MEP_UIMM24
+ENUMX
+ BFD_RELOC_MEP_ADDR24A4
+ENUMX
+ BFD_RELOC_MEP_GNU_VTINHERIT
+ENUMX
+ BFD_RELOC_MEP_GNU_VTENTRY
+ENUMDOC
+ Toshiba Media Processor Relocations.
+COMMENT
+
+ENUM
BFD_RELOC_MMIX_GETA
ENUMX
BFD_RELOC_MMIX_GETA_1
@@ -4671,6 +4715,12 @@ ENUMDOC
Sony Xstormy16 Relocations.
ENUM
+ BFD_RELOC_RELC
+ENUMDOC
+ Self-describing complex relocations.
+COMMENT
+
+ENUM
BFD_RELOC_XC16X_PAG
ENUMX
BFD_RELOC_XC16X_POF
diff --git a/bfd/syms.c b/bfd/syms.c
index 0ff94164ed..17c4ce8040 100644
--- a/bfd/syms.c
+++ b/bfd/syms.c
@@ -288,6 +288,14 @@ CODE_FRAGMENT
. {* This symbol is thread local. Used in ELF. *}
.#define BSF_THREAD_LOCAL 0x40000
.
+. {* This symbol represents a complex relocation expression,
+. with the expression tree serialized in the symbol name. *}
+.#define BSF_RELC 0x80000
+.
+. {* This symbol represents a signed complex relocation expression,
+. with the expression tree serialized in the symbol name. *}
+.#define BSF_SRELC 0x100000
+.
. flagword flags;
.
. {* A pointer to the section to which this symbol is
diff --git a/bfd/targets.c b/bfd/targets.c
index 71e3337f4a..ae4d4bf451 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -411,6 +411,7 @@ BFD_JUMP_TABLE macros.
. reloc_howto_type *
. (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
.
+.
. {* Routines used when writing an object file. *}
.#define BFD_JUMP_TABLE_WRITE(NAME) \
. NAME##_set_arch_mach, \
@@ -609,6 +610,8 @@ extern const bfd_target bfd_elf32_m68k_vec;
extern const bfd_target bfd_elf32_m88k_vec;
extern const bfd_target bfd_elf32_mcore_big_vec;
extern const bfd_target bfd_elf32_mcore_little_vec;
+extern const bfd_target bfd_elf32_mep_vec;
+extern const bfd_target bfd_elf32_mep_little_vec;
extern const bfd_target bfd_elf32_mn10200_vec;
extern const bfd_target bfd_elf32_mn10300_vec;
extern const bfd_target bfd_elf32_mt_vec;
@@ -934,6 +937,7 @@ static const bfd_target * const _bfd_target_vector[] =
&bfd_elf32_m88k_vec,
&bfd_elf32_mcore_big_vec,
&bfd_elf32_mcore_little_vec,
+ &bfd_elf32_mep_vec,
&bfd_elf32_mn10200_vec,
&bfd_elf32_mn10300_vec,
&bfd_elf32_mt_vec,
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 6db4d2fff0..6ea65ea8ea 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,119 @@
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * Makefile.am: Add support for Toshiba MeP.
+ * configure.in: Likewise
+ * config/tc-mep.c:
+ * config/obj-elf.c: New file.
+ * config/tc-mep.c: New file.
+ * config/tc-mep.h: New file.
+ * testsuite/gas/mep: New testsuite with content.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * cgen.c (gas_cgen_install_complex_reloc): Removed.
+ (complex_reloc_installation_howto): Removed.
+
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * Contribute the following changes:
+ 2002-06-06 Graydon Hoare <graydon@redhat.com>
+
+ * symbols.c (use_complex_relocs_for): Tighten up conditions on
+ resolving expression symbols.
+
+ 2002-04-04 DJ Delorie <dj@redhat.com>
+
+ * symbols.c (use_complex_relocs_for): New, to decide
+ when to use complex relocs.
+ (resolve_symbol_value): Use it.
+
+ 2002-03-07 Graydon Hoare <graydon@redhat.com>
+
+ * cgen.c: Minor debugging touchups, warning removal.
+
+ 2002-02-17 Catherine Moore <clm@redhat.com>
+
+ * cgen.c (gas_cgen_md_apply_fix3): Only set signed_p if RELC.
+
+ 2002-01-23 Graydon Hoare <graydon@redhat.com>
+
+ * cgen.c (gas_cgen_parse_operand): Add signed RELC support.
+ (queue_fixup_recursively): Likewise.
+ (make_right_shifted_expr): Likewise.
+ * symbols.c (resolve_symbol_value): Likewise.
+
+ 2002-01-15 Graydon Hoare <graydon@redhat.com>
+
+ * write.h (struct fix): Add msb_field_p to fx_cgen sub-struct.
+ * cgen.c (make_masked_expr): Remove.
+ (gas_cgen_encode_addend): Add oplen, signed_p, trunc_p params.
+ (gas_cgen_md_apply_fix3): Call encode_addend with new args.
+ (queue_fixup_recursively): Change from masked expr to trunc flag.
+ (queue_fixup_recursively): Restore assignment of sub-field value to
+ temporary in fixups array (lost in recent merge).
+
+ 2002-01-01 Graydon Hoare <graydon@redhat.com>
+
+ * cgen.c (make_masked_expr): Add.
+ (queue_fixup_recursively): Call make_masked_expr on non-rightmost
+ fragments of multi-ifield complex relocs.
+ (gas_cgen_parse_operand): Reflect changed meaning of last arg to
+ queue_fixup_recursively.
+
+ 2001-12-18 Graydon Hoare <graydon@redhat.com>
+
+ * cgen.c (weak_operand_overflow_check): Improve accuracy of
+ detecting overflows.
+
+ 2001-12-17 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * cgen.c: Tidy up RELC code after the merge.
+
+ 2001-11-15 graydon hoare <graydon@redhat.com>
+
+ * cgen.c (fixup): Add cgen_maybe_multi_ifield member.
+ (make_right_shifted_expr): New function.
+ (queue_fixup): Change to recursive function that fragments
+ fixups if operand has a multi-ifield.
+ (gas_cgen_parse_operand): Add RELC code to wrap expressions in
+ symbols, call weak_operand_overflow_check, and fragment call
+ queue_fixup with operand fields.
+ (gas_cgen_finish_insn) Modify to manage ifield pointer.
+ (gas_cgen_md_apply_fix3) Modify to get start, length from
+ ifield whenever it is set. Also change condition on which
+ self-describing relocs are encoded.
+ (weak_operand_overflow_check): New function to try to select
+ insns correctly.
+ * cgen.h (GAS_CGEN_MAX_FIXUPS): Bump from 3 up to 32.
+ * write.h (struct fix): Add cgen_maybe_multi_ifield field to
+ fx_cgen substructure
+ * config/tc-mep.c (md_cgen_lookup_reloc): Fall back to
+ BFD_RELOC_RELC when no other reloc types can be found.
+
+ 2001-10-03 graydon hoare <graydon@redhat.com>
+
+ * symbols.c (resolve_symbol_value): Unconditionally encode
+ expression symbols as mangled complex relocation symbols (when
+ compiled with -DOBJ_COMPLEX_RELOC)
+
+ * cgen.c (gas_cgen_encode_addend): New function for relc.
+ (gas_cgen_install_complex_reloc): Likewise.
+ (gas_cgen_md_apply_fix3): Add hook into gas_cgen_encode_addend.
+ (gas_cgen_tc_gen_reloc): Add hook into gas_cgen_install_complex_reloc.
+
+ 2001-06-24 Michael Chastain <chastain@redhat.com>
+
+ * symbols.c (symbol_relc_make_expr): Conform to K & R C.
+
+ 2001-06-20 Frank Ch. Eigler <fche@redhat.com>
+
+ * symbols.c (resolve_symbol_value): Conditionally generate relc
+ symbols from unresolved expressions.
+ (symbol_relc_make_sym,value,expr): New traversal/conversion routines.
+ * symbols.h: Declare them.
+
2007-02-03 DJ Delorie <dj@delorie.com>
* config/tc-m32c.c (m32c_cons_fix_new): New. Added to support 3
diff --git a/gas/Makefile.am b/gas/Makefile.am
index 31609e64f8..aba954de3c 100644
--- a/gas/Makefile.am
+++ b/gas/Makefile.am
@@ -68,6 +68,7 @@ CPU_TYPES = \
m68k \
maxq \
mcore \
+ mep \
mips \
mmix \
mn10200 \
@@ -258,6 +259,7 @@ TARGET_CPU_CFILES = \
config/tc-m68hc11.c \
config/tc-m68k.c \
config/tc-mcore.c \
+ config/tc-mep.c \
config/tc-mips.c \
config/tc-mmix.c \
config/tc-mn10200.c \
@@ -311,6 +313,7 @@ TARGET_CPU_HFILES = \
config/tc-m68hc11.h \
config/tc-m68k.h \
config/tc-mcore.h \
+ config/tc-mep.h \
config/tc-mips.h \
config/tc-mmix.h \
config/tc-mn10200.h \
@@ -1426,6 +1429,20 @@ DEPTC_i386_multi = $(DEPTC_i386_aout) $(DEPTC_i386_coff) \
DEPTC_mips_multi = $(DEPTC_mips_coff) $(DEPTC_mips_ecoff) \
$(DEPTC_mips_elf)
DEPTC_cris_multi = $(DEPTC_cris_aout) $(DEPTC_cris_elf)
+DEPTC_mep_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
+ $(srcdir)/config/tc-mep.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mep-desc.h \
+ $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/mep-opc.h \
+ cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/libbfd.h $(INCDIR)/safe-ctype.h
+DEPTC_mep_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h \
+ dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mep-desc.h \
+ $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/mep-opc.h \
+ cgen.h $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/libbfd.h $(INCDIR)/safe-ctype.h
DEPOBJ_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
$(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
@@ -1782,6 +1799,16 @@ DEPOBJ_i386_multi = $(DEPOBJ_i386_aout) $(DEPOBJ_i386_coff) \
DEPOBJ_mips_multi = $(DEPOBJ_mips_coff) $(DEPOBJ_mips_ecoff) \
$(DEPOBJ_mips_elf)
DEPOBJ_cris_multi = $(DEPOBJ_cris_aout) $(DEPOBJ_cris_elf)
+DEPOBJ_mep_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
+ $(srcdir)/config/tc-mep.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/safe-ctype.h
+DEPOBJ_mep_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/safe-ctype.h
DEP_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
DEP_alpha_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
@@ -2078,6 +2105,13 @@ DEP_i386_multi = $(DEP_i386_aout) $(DEP_i386_coff) \
DEP_mips_multi = $(DEP_mips_coff) $(DEP_mips_ecoff) \
$(DEP_mips_elf)
DEP_cris_multi = $(DEP_cris_aout) $(DEP_cris_elf)
+DEP_mep_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mep.h \
+ $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h
+DEP_mep_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h \
+ $(INCDIR)/safe-ctype.h
BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.
#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
app.o: app.c
diff --git a/gas/Makefile.in b/gas/Makefile.in
index bbd6f9a6b5..7b43142dea 100644
--- a/gas/Makefile.in
+++ b/gas/Makefile.in
@@ -302,6 +302,7 @@ CPU_TYPES = \
m68k \
maxq \
mcore \
+ mep \
mips \
mmix \
mn10200 \
@@ -490,6 +491,7 @@ TARGET_CPU_CFILES = \
config/tc-m68hc11.c \
config/tc-m68k.c \
config/tc-mcore.c \
+ config/tc-mep.c \
config/tc-mips.c \
config/tc-mmix.c \
config/tc-mn10200.c \
@@ -543,6 +545,7 @@ TARGET_CPU_HFILES = \
config/tc-m68hc11.h \
config/tc-m68k.h \
config/tc-mcore.h \
+ config/tc-mep.h \
config/tc-mips.h \
config/tc-mmix.h \
config/tc-mn10200.h \
@@ -1254,6 +1257,22 @@ DEPTC_mips_multi = $(DEPTC_mips_coff) $(DEPTC_mips_ecoff) \
$(DEPTC_mips_elf)
DEPTC_cris_multi = $(DEPTC_cris_aout) $(DEPTC_cris_elf)
+DEPTC_mep_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
+ $(srcdir)/config/tc-mep.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h dwarf2dbg.h \
+ subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mep-desc.h \
+ $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/mep-opc.h \
+ cgen.h $(INCDIR)/elf/common.h $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/libbfd.h $(INCDIR)/safe-ctype.h
+
+DEPTC_mep_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h \
+ dwarf2dbg.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/mep-desc.h \
+ $(INCDIR)/opcode/cgen.h $(srcdir)/../opcodes/mep-opc.h \
+ cgen.h $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h \
+ $(BFDDIR)/libbfd.h $(INCDIR)/safe-ctype.h
+
DEPOBJ_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h \
$(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
@@ -1688,6 +1707,18 @@ DEPOBJ_mips_multi = $(DEPOBJ_mips_coff) $(DEPOBJ_mips_ecoff) \
$(DEPOBJ_mips_elf)
DEPOBJ_cris_multi = $(DEPOBJ_cris_aout) $(DEPOBJ_cris_elf)
+DEPOBJ_mep_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
+ $(srcdir)/config/tc-mep.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ subsegs.h $(INCDIR)/safe-ctype.h
+
+DEPOBJ_mep_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h \
+ $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
+ $(INCDIR)/elf/mep.h $(INCDIR)/elf/reloc-macros.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/safe-ctype.h
+
DEP_alpha_ecoff = $(srcdir)/config/obj-ecoff.h $(srcdir)/config/tc-alpha.h \
ecoff.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h
@@ -2061,6 +2092,15 @@ DEP_mips_multi = $(DEP_mips_coff) $(DEP_mips_ecoff) \
$(DEP_mips_elf)
DEP_cris_multi = $(DEP_cris_aout) $(DEP_cris_elf)
+DEP_mep_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mep.h \
+ $(INCDIR)/symcat.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h
+
+DEP_mep_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
+ $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+ $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mep.h \
+ $(INCDIR)/safe-ctype.h
+
BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
diff --git a/gas/cgen.c b/gas/cgen.c
index 5a53789995..5b0694b03e 100644
--- a/gas/cgen.c
+++ b/gas/cgen.c
@@ -26,6 +26,27 @@
#include "cgen.h"
#include "dwarf2dbg.h"
+#include "symbols.h"
+#include "struc-symbol.h"
+
+#ifdef OBJ_COMPLEX_RELC
+static expressionS * make_right_shifted_expr
+ (expressionS *, const int, const int);
+
+static unsigned long gas_cgen_encode_addend
+ (const unsigned long, const unsigned long, const unsigned long, \
+ const unsigned long, const unsigned long, const unsigned long, \
+ const unsigned long);
+
+static char * weak_operand_overflow_check
+ (const expressionS *, const CGEN_OPERAND *);
+
+static void queue_fixup_recursively
+ (const int, const int, expressionS *, \
+ const CGEN_MAYBE_MULTI_IFLD *, const int, const int);
+
+static int rightshift = 0;
+#endif
static void queue_fixup (int, int, expressionS *);
/* Opcode table descriptor, must be set by md_begin. */
@@ -63,6 +84,8 @@ struct fixup
int opindex;
int opinfo;
expressionS exp;
+ struct cgen_maybe_multi_ifield * field;
+ int msb_field_p;
};
static struct fixup fixups[GAS_CGEN_MAX_FIXUPS];
@@ -246,6 +269,8 @@ gas_cgen_record_fixup (frag, where, insn, length, operand, opinfo, symbol, offse
+ (int) operand->type));
fixP->fx_cgen.insn = insn;
fixP->fx_cgen.opinfo = opinfo;
+ fixP->fx_cgen.field = NULL;
+ fixP->fx_cgen.msb_field_p = 0;
return fixP;
}
@@ -284,10 +309,26 @@ gas_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp)
+ (int) operand->type));
fixP->fx_cgen.insn = insn;
fixP->fx_cgen.opinfo = opinfo;
+ fixP->fx_cgen.field = NULL;
+ fixP->fx_cgen.msb_field_p = 0;
return fixP;
}
+#ifdef OBJ_COMPLEX_RELC
+static symbolS *
+expr_build_binary (operatorT op, symbolS * s1, symbolS * s2)
+{
+ expressionS e;
+
+ e.X_op = op;
+ e.X_add_symbol = s1;
+ e.X_op_symbol = s2;
+ e.X_add_number = 0;
+ return make_expr_symbol (& e);
+}
+#endif
+
/* Used for communication between the next two procedures. */
static jmp_buf expr_jmp_buf;
static int expr_jmp_buf_p;
@@ -305,7 +346,12 @@ static int expr_jmp_buf_p;
const char *
gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
+
+#ifdef OBJ_COMPLEX_RELC
+ CGEN_CPU_DESC cd;
+#else
CGEN_CPU_DESC cd ATTRIBUTE_UNUSED;
+#endif
enum cgen_parse_operand_type want;
const char **strP;
int opindex;
@@ -326,6 +372,13 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
const char *errmsg;
expressionS exp;
+#ifdef OBJ_COMPLEX_RELC
+ volatile int signed_p = 0;
+ symbolS * stmp = NULL;
+ bfd_reloc_code_real_type reloc_type;
+ const CGEN_OPERAND * operand;
+ fixS dummy_fixup;
+#endif
if (want == CGEN_PARSE_OPERAND_INIT)
{
gas_cgen_init_parse ();
@@ -383,9 +436,82 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
break;
de_fault:
default:
+#ifdef OBJ_COMPLEX_RELC
+ /* Look up operand, check to see if there's an obvious
+ overflow (this helps disambiguate some insn parses). */
+ operand = cgen_operand_lookup_by_num (cd, opindex);
+ errmsg = weak_operand_overflow_check (& exp, operand);
+
+ if (! errmsg)
+ {
+ /* Fragment the expression as necessary, and queue a reloc. */
+ memset (& dummy_fixup, 0, sizeof (fixS));
+
+ reloc_type = md_cgen_lookup_reloc (0, operand, & dummy_fixup);
+
+ if (exp.X_op == O_symbol
+ && reloc_type == BFD_RELOC_RELC
+ && exp.X_add_symbol->sy_value.X_op == O_constant
+ && exp.X_add_symbol->bsym->section != expr_section
+ && exp.X_add_symbol->bsym->section != absolute_section
+ && exp.X_add_symbol->bsym->section != undefined_section)
+ {
+ /* Local labels will have been (eagerly) turned into constants
+ by now, due to the inappropriately deep insight of the
+ expression parser. Unfortunately make_expr_symbol
+ prematurely dives into the symbol evaluator, and in this
+ case it gets a bad answer, so we manually create the
+ expression symbol we want here. */
+ stmp = symbol_create (FAKE_LABEL_NAME, expr_section, 0,
+ & zero_address_frag);
+ symbol_set_value_expression (stmp, & exp);
+ }
+ else
+ stmp = make_expr_symbol (& exp);
+
+ /* If this is a pc-relative RELC operand, we
+ need to subtract "." from the expression. */
+ if (reloc_type == BFD_RELOC_RELC
+ && CGEN_OPERAND_ATTR_VALUE (operand, CGEN_OPERAND_PCREL_ADDR))
+ stmp = expr_build_binary (O_subtract, stmp, expr_build_dot ());
+
+ /* FIXME: this is not a perfect heuristic for figuring out
+ whether an operand is signed: it only works when the operand
+ is an immediate. it's not terribly likely that any other
+ values will be signed relocs, but it's possible. */
+ if (operand && (operand->hw_type == HW_H_SINT))
+ signed_p = 1;
+
+ if (stmp->bsym && (stmp->bsym->section == expr_section))
+ {
+ if (signed_p)
+ stmp->bsym->flags |= BSF_SRELC;
+ else
+ stmp->bsym->flags |= BSF_RELC;
+ }
+
+ /* Now package it all up for the fixup emitter. */
+ exp.X_op = O_symbol;
+ exp.X_op_symbol = 0;
+ exp.X_add_symbol = stmp;
+ exp.X_add_number = 0;
+
+ /* Re-init rightshift quantity, just in case. */
+ rightshift = operand->length;
+ queue_fixup_recursively (opindex, opinfo_1, & exp,
+ (reloc_type == BFD_RELOC_RELC) ?
+ & (operand->index_fields) : 0,
+ signed_p, -1);
+ }
+ * resultP = errmsg
+ ? CGEN_PARSE_OPERAND_RESULT_ERROR
+ : CGEN_PARSE_OPERAND_RESULT_QUEUED;
+ *valueP = 0;
+#else
queue_fixup (opindex, opinfo_1, &exp);
*valueP = 0;
*resultP = CGEN_PARSE_OPERAND_RESULT_QUEUED;
+#endif
break;
}
@@ -553,6 +679,8 @@ gas_cgen_finish_insn (insn, buf, length, relax_p, result)
insn, length, operand,
fixups[i].opinfo,
&fixups[i].exp);
+ fixP->fx_cgen.field = fixups[i].field;
+ fixP->fx_cgen.msb_field_p = fixups[i].msb_field_p;
if (result)
result->fixups[i] = fixP;
}
@@ -564,6 +692,167 @@ gas_cgen_finish_insn (insn, buf, length, relax_p, result)
}
}
+#ifdef OBJ_COMPLEX_RELC
+/* Queue many fixups, recursively. If the field is a multi-ifield,
+ repeatedly queue its sub-parts, right shifted to fit into the field (we
+ assume here multi-fields represent a left-to-right, MSB0-LSB0
+ reading). */
+
+static void
+queue_fixup_recursively (const int opindex,
+ const int opinfo,
+ expressionS * expP,
+ const CGEN_MAYBE_MULTI_IFLD * field,
+ const int signed_p,
+ const int part_of_multi)
+{
+ if (field && field->count)
+ {
+ int i;
+
+ for (i = 0; i < field->count; ++ i)
+ queue_fixup_recursively (opindex, opinfo, expP,
+ & (field->val.multi[i]), signed_p, i);
+ }
+ else
+ {
+ expressionS * new_exp = expP;
+
+#ifdef DEBUG
+ printf ("queueing fixup for field %s\n",
+ (field ? field->val.leaf->name : "??"));
+ print_symbol_value (expP->X_add_symbol);
+#endif
+ if (field && part_of_multi != -1)
+ {
+ rightshift -= field->val.leaf->length;
+
+ /* Shift reloc value by number of bits remaining after this
+ field. */
+ if (rightshift)
+ new_exp = make_right_shifted_expr (expP, rightshift, signed_p);
+ }
+
+ /* Truncate reloc values to length, *after* leftmost one. */
+ fixups[num_fixups].msb_field_p = (part_of_multi <= 0);
+ fixups[num_fixups].field = (CGEN_MAYBE_MULTI_IFLD *) field;
+
+ queue_fixup (opindex, opinfo, new_exp);
+ }
+}
+
+/* Encode the self-describing RELC reloc format's addend. */
+
+static unsigned long
+gas_cgen_encode_addend (const unsigned long start, /* in bits */
+ const unsigned long len, /* in bits */
+ const unsigned long oplen, /* in bits */
+ const unsigned long wordsz, /* in bytes */
+ const unsigned long chunksz, /* in bytes */
+ const unsigned long signed_p,
+ const unsigned long trunc_p)
+{
+ unsigned long res = 0L;
+
+ res |= start & 0x3F;
+ res |= (oplen & 0x3F) << 6;
+ res |= (len & 0x3F) << 12;
+ res |= (wordsz & 0xF) << 18;
+ res |= (chunksz & 0xF) << 22;
+ res |= (CGEN_INSN_LSB0_P ? 1 : 0) << 27;
+ res |= signed_p << 28;
+ res |= trunc_p << 29;
+
+ return res;
+}
+
+/* Purpose: make a weak check that the expression doesn't overflow the
+ operand it's to be inserted into.
+
+ Rationale: some insns used to use %operators to disambiguate during a
+ parse. when these %operators are translated to expressions by the macro
+ expander, the ambiguity returns. we attempt to disambiguate by field
+ size.
+
+ Method: check to see if the expression's top node is an O_and operator,
+ and the mask is larger than the operand length. This would be an
+ overflow, so signal it by returning an error string. Any other case is
+ ambiguous, so we assume it's OK and return NULL. */
+
+static char *
+weak_operand_overflow_check (const expressionS * exp,
+ const CGEN_OPERAND * operand)
+{
+ const unsigned long len = operand->length;
+ unsigned long mask;
+ unsigned long opmask = (((1L << (len - 1)) - 1) << 1) | 1;
+
+ if (!exp)
+ return NULL;
+
+ if (exp->X_op != O_bit_and)
+ {
+ /* Check for implicit overflow flag. */
+ if (CGEN_OPERAND_ATTR_VALUE
+ (operand, CGEN_OPERAND_RELOC_IMPLIES_OVERFLOW))
+ return _("a reloc on this operand implies an overflow");
+ return NULL;
+ }
+
+ mask = exp->X_add_number;
+
+ if (exp->X_add_symbol &&
+ exp->X_add_symbol->sy_value.X_op == O_constant)
+ mask |= exp->X_add_symbol->sy_value.X_add_number;
+
+ if (exp->X_op_symbol &&
+ exp->X_op_symbol->sy_value.X_op == O_constant)
+ mask |= exp->X_op_symbol->sy_value.X_add_number;
+
+ /* Want to know if mask covers more bits than opmask.
+ this is the same as asking if mask has any bits not in opmask,
+ or whether (mask & ~opmask) is nonzero. */
+ if (mask && (mask & ~opmask))
+ {
+#ifdef DEBUG
+ printf ("overflow: (mask = %8.8x, ~opmask = %8.8x, AND = %8.8x)\n",
+ mask, ~opmask, (mask & ~opmask));
+#endif
+ return _("operand mask overflow");
+ }
+
+ return NULL;
+}
+
+
+static expressionS *
+make_right_shifted_expr (expressionS * exp,
+ const int amount,
+ const int signed_p)
+{
+ symbolS * stmp = 0;
+ expressionS * new_exp;
+
+ stmp = expr_build_binary (O_right_shift,
+ make_expr_symbol (exp),
+ expr_build_uconstant (amount));
+
+ if (signed_p)
+ stmp->bsym->flags |= BSF_SRELC;
+ else
+ stmp->bsym->flags |= BSF_RELC;
+
+ /* Then wrap that in a "symbol expr" for good measure. */
+ new_exp = xmalloc (sizeof (expressionS));
+ memset (new_exp, 0, sizeof (expressionS));
+ new_exp->X_op = O_symbol;
+ new_exp->X_op_symbol = 0;
+ new_exp->X_add_symbol = stmp;
+ new_exp->X_add_number = 0;
+
+ return new_exp;
+}
+#endif
/* Apply a fixup to the object code. This is called for all the
fixups we generated by the call to fix_new_exp, above. In the call
above we used a reloc code which was the largest legal reloc code
@@ -602,6 +891,30 @@ gas_cgen_md_apply_fix (fixP, valP, seg)
bfd_reloc_code_real_type reloc_type;
CGEN_FIELDS *fields = alloca (CGEN_CPU_SIZEOF_FIELDS (cd));
const CGEN_INSN *insn = fixP->fx_cgen.insn;
+ int start;
+ int length;
+ int signed_p = 0;
+
+ if (fixP->fx_cgen.field)
+ {
+ /* Use the twisty little pointer path
+ back to the ifield if it exists. */
+ start = fixP->fx_cgen.field->val.leaf->start;
+ length = fixP->fx_cgen.field->val.leaf->length;
+ }
+ else
+ {
+ /* Or the far less useful operand-size guesstimate. */
+ start = operand->start;
+ length = operand->length;
+ }
+
+ /* FIXME: this is not a perfect heuristic for figuring out
+ whether an operand is signed: it only works when the operand
+ is an immediate. it's not terribly likely that any other
+ values will be signed relocs, but it's possible. */
+ if (operand && (operand->hw_type == HW_H_SINT))
+ signed_p = 1;
/* If the reloc has been fully resolved finish the operand here. */
/* FIXME: This duplicates the capabilities of code in BFD. */
@@ -644,6 +957,18 @@ gas_cgen_md_apply_fix (fixP, valP, seg)
partial_inplace == false. */
reloc_type = md_cgen_lookup_reloc (insn, operand, fixP);
+#ifdef OBJ_COMPLEX_RELC
+ if (reloc_type == BFD_RELOC_RELC)
+ {
+ /* Change addend to "self-describing" form,
+ for BFD to handle in the linker. */
+ value = gas_cgen_encode_addend (start, operand->length,
+ length, fixP->fx_size,
+ cd->insn_chunk_bitsize / 8,
+ signed_p,
+ ! (fixP->fx_cgen.msb_field_p));
+ }
+#endif
if (reloc_type != BFD_RELOC_NONE)
fixP->fx_r_type = reloc_type;
@@ -699,7 +1024,6 @@ gas_cgen_tc_gen_reloc (section, fixP)
fixS * fixP;
{
arelent *reloc;
-
reloc = (arelent *) xmalloc (sizeof (arelent));
reloc->howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type);
@@ -737,3 +1061,4 @@ gas_cgen_begin ()
else
cgen_clear_signed_overflow_ok (gas_cgen_cpu_desc);
}
+
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index a9d34c467d..f08373351f 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -57,6 +57,10 @@
#include "elf/x86-64.h"
#endif
+#ifdef TC_MEP
+#include "elf/mep.h"
+#endif
+
static void obj_elf_line (int);
static void obj_elf_size (int);
static void obj_elf_type (int);
diff --git a/gas/config/tc-mep.c b/gas/config/tc-mep.c
new file mode 100644
index 0000000000..b3b17d3c7a
--- /dev/null
+++ b/gas/config/tc-mep.c
@@ -0,0 +1,1886 @@
+/* tc-mep.c -- Assembler for the Toshiba Media Processor.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include "as.h"
+#include "dwarf2dbg.h"
+#include "subsegs.h"
+#include "symcat.h"
+#include "opcodes/mep-desc.h"
+#include "opcodes/mep-opc.h"
+#include "cgen.h"
+#include "elf/common.h"
+#include "elf/mep.h"
+#include "libbfd.h"
+#include "xregex.h"
+
+/* Structure to hold all of the different components describing
+ an individual instruction. */
+typedef struct
+{
+ const CGEN_INSN * insn;
+ const CGEN_INSN * orig_insn;
+ CGEN_FIELDS fields;
+#if CGEN_INT_INSN_P
+ CGEN_INSN_INT buffer [1];
+#define INSN_VALUE(buf) (*(buf))
+#else
+ unsigned char buffer [CGEN_MAX_INSN_SIZE];
+#define INSN_VALUE(buf) (buf)
+#endif
+ char * addr;
+ fragS * frag;
+ int num_fixups;
+ fixS * fixups [GAS_CGEN_MAX_FIXUPS];
+ int indices [MAX_OPERAND_INSTANCES];
+} mep_insn;
+
+static int mode = CORE; /* Start in core mode. */
+static int pluspresent = 0;
+static int allow_disabled_registers = 0;
+static int library_flag = 0;
+
+/* We're going to need to store all of the instructions along with
+ their fixups so that we can parallelization grouping rules. */
+
+static mep_insn saved_insns[MAX_SAVED_FIXUP_CHAINS];
+static int num_insns_saved = 0;
+
+const char comment_chars[] = "#";
+const char line_comment_chars[] = ";#";
+const char line_separator_chars[] = ";";
+const char EXP_CHARS[] = "eE";
+const char FLT_CHARS[] = "dD";
+
+static void mep_switch_to_vliw_mode (int);
+static void mep_switch_to_core_mode (int);
+static void mep_s_vtext (int);
+static void mep_noregerr (int);
+
+/* The target specific pseudo-ops which we support. */
+const pseudo_typeS md_pseudo_table[] =
+{
+ { "word", cons, 4 },
+ { "file", (void (*) (int)) dwarf2_directive_file, 0 },
+ { "loc", dwarf2_directive_loc, 0 },
+ { "vliw", mep_switch_to_vliw_mode, 0 },
+ { "core", mep_switch_to_core_mode, 0 },
+ { "vtext", mep_s_vtext, 0 },
+ { "noregerr", mep_noregerr, 0 },
+ { NULL, NULL, 0 }
+};
+
+/* Relocations against symbols are done in two
+ parts, with a HI relocation and a LO relocation. Each relocation
+ has only 16 bits of space to store an addend. This means that in
+ order for the linker to handle carries correctly, it must be able
+ to locate both the HI and the LO relocation. This means that the
+ relocations must appear in order in the relocation table.
+
+ In order to implement this, we keep track of each unmatched HI
+ relocation. We then sort them so that they immediately precede the
+ corresponding LO relocation. */
+
+struct mep_hi_fixup
+{
+ struct mep_hi_fixup * next; /* Next HI fixup. */
+ fixS * fixp; /* This fixup. */
+ segT seg; /* The section this fixup is in. */
+};
+
+/* The list of unmatched HI relocs. */
+static struct mep_hi_fixup * mep_hi_fixup_list;
+
+
+#define OPTION_EB (OPTION_MD_BASE + 0)
+#define OPTION_EL (OPTION_MD_BASE + 1)
+#define OPTION_CONFIG (OPTION_MD_BASE + 2)
+#define OPTION_AVERAGE (OPTION_MD_BASE + 3)
+#define OPTION_NOAVERAGE (OPTION_MD_BASE + 4)
+#define OPTION_MULT (OPTION_MD_BASE + 5)
+#define OPTION_NOMULT (OPTION_MD_BASE + 6)
+#define OPTION_DIV (OPTION_MD_BASE + 7)
+#define OPTION_NODIV (OPTION_MD_BASE + 8)
+#define OPTION_BITOPS (OPTION_MD_BASE + 9)
+#define OPTION_NOBITOPS (OPTION_MD_BASE + 10)
+#define OPTION_LEADZ (OPTION_MD_BASE + 11)
+#define OPTION_NOLEADZ (OPTION_MD_BASE + 12)
+#define OPTION_ABSDIFF (OPTION_MD_BASE + 13)
+#define OPTION_NOABSDIFF (OPTION_MD_BASE + 14)
+#define OPTION_MINMAX (OPTION_MD_BASE + 15)
+#define OPTION_NOMINMAX (OPTION_MD_BASE + 16)
+#define OPTION_CLIP (OPTION_MD_BASE + 17)
+#define OPTION_NOCLIP (OPTION_MD_BASE + 18)
+#define OPTION_SATUR (OPTION_MD_BASE + 19)
+#define OPTION_NOSATUR (OPTION_MD_BASE + 20)
+#define OPTION_COP32 (OPTION_MD_BASE + 21)
+#define OPTION_REPEAT (OPTION_MD_BASE + 25)
+#define OPTION_NOREPEAT (OPTION_MD_BASE + 26)
+#define OPTION_DEBUG (OPTION_MD_BASE + 27)
+#define OPTION_NODEBUG (OPTION_MD_BASE + 28)
+#define OPTION_LIBRARY (OPTION_MD_BASE + 29)
+
+struct option md_longopts[] = {
+ { "EB", no_argument, NULL, OPTION_EB},
+ { "EL", no_argument, NULL, OPTION_EL},
+ { "mconfig", required_argument, NULL, OPTION_CONFIG},
+ { "maverage", no_argument, NULL, OPTION_AVERAGE},
+ { "mno-average", no_argument, NULL, OPTION_NOAVERAGE},
+ { "mmult", no_argument, NULL, OPTION_MULT},
+ { "mno-mult", no_argument, NULL, OPTION_NOMULT},
+ { "mdiv", no_argument, NULL, OPTION_DIV},
+ { "mno-div", no_argument, NULL, OPTION_NODIV},
+ { "mbitops", no_argument, NULL, OPTION_BITOPS},
+ { "mno-bitops", no_argument, NULL, OPTION_NOBITOPS},
+ { "mleadz", no_argument, NULL, OPTION_LEADZ},
+ { "mno-leadz", no_argument, NULL, OPTION_NOLEADZ},
+ { "mabsdiff", no_argument, NULL, OPTION_ABSDIFF},
+ { "mno-absdiff", no_argument, NULL, OPTION_NOABSDIFF},
+ { "mminmax", no_argument, NULL, OPTION_MINMAX},
+ { "mno-minmax", no_argument, NULL, OPTION_NOMINMAX},
+ { "mclip", no_argument, NULL, OPTION_CLIP},
+ { "mno-clip", no_argument, NULL, OPTION_NOCLIP},
+ { "msatur", no_argument, NULL, OPTION_SATUR},
+ { "mno-satur", no_argument, NULL, OPTION_NOSATUR},
+ { "mcop32", no_argument, NULL, OPTION_COP32},
+ { "mdebug", no_argument, NULL, OPTION_DEBUG},
+ { "mno-debug", no_argument, NULL, OPTION_NODEBUG},
+ { "mlibrary", no_argument, NULL, OPTION_LIBRARY},
+ { NULL, 0, NULL, 0 } };
+size_t md_longopts_size = sizeof (md_longopts);
+
+const char * md_shortopts = "";
+static int optbits = 0;
+static int optbitset = 0;
+
+int
+md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
+{
+ int i, idx;
+ switch (c)
+ {
+ case OPTION_EB:
+ target_big_endian = 1;
+ break;
+ case OPTION_EL:
+ target_big_endian = 0;
+ break;
+ case OPTION_CONFIG:
+ idx = 0;
+ for (i=1; mep_config_map[i].name; i++)
+ if (strcmp (mep_config_map[i].name, arg) == 0)
+ {
+ idx = i;
+ break;
+ }
+ if (!idx)
+ {
+ fprintf (stderr, "Error: unknown configuration %s\n", arg);
+ return 0;
+ }
+ mep_config_index = idx;
+ target_big_endian = mep_config_map[idx].big_endian;
+ break;
+ case OPTION_AVERAGE:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_AVE_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_AVE_INSN;
+ break;
+ case OPTION_NOAVERAGE:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_AVE_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_AVE_INSN;
+ break;
+ case OPTION_MULT:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_MUL_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_MUL_INSN;
+ break;
+ case OPTION_NOMULT:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_MUL_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_MUL_INSN;
+ break;
+ case OPTION_DIV:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_DIV_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_DIV_INSN;
+ break;
+ case OPTION_NODIV:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_DIV_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_DIV_INSN;
+ break;
+ case OPTION_BITOPS:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_BIT_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_BIT_INSN;
+ break;
+ case OPTION_NOBITOPS:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_BIT_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_BIT_INSN;
+ break;
+ case OPTION_LEADZ:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_LDZ_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_LDZ_INSN;
+ break;
+ case OPTION_NOLEADZ:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_LDZ_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_LDZ_INSN;
+ break;
+ case OPTION_ABSDIFF:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_ABS_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_ABS_INSN;
+ break;
+ case OPTION_NOABSDIFF:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_ABS_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_ABS_INSN;
+ break;
+ case OPTION_MINMAX:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_MINMAX_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_MINMAX_INSN;
+ break;
+ case OPTION_NOMINMAX:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_MINMAX_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_MINMAX_INSN;
+ break;
+ case OPTION_CLIP:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_CLIP_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_CLIP_INSN;
+ break;
+ case OPTION_NOCLIP:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_CLIP_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_CLIP_INSN;
+ break;
+ case OPTION_SATUR:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_SAT_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_SAT_INSN;
+ break;
+ case OPTION_NOSATUR:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_SAT_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_SAT_INSN;
+ break;
+ case OPTION_COP32:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_CP_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_CP_INSN;
+ break;
+ case OPTION_DEBUG:
+ optbits |= 1 << CGEN_INSN_OPTIONAL_DEBUG_INSN;
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_DEBUG_INSN;
+ break;
+ case OPTION_NODEBUG:
+ optbits &= ~(1 << CGEN_INSN_OPTIONAL_DEBUG_INSN);
+ optbitset |= 1 << CGEN_INSN_OPTIONAL_DEBUG_INSN;
+ break;
+ case OPTION_LIBRARY:
+ library_flag = EF_MEP_LIBRARY;
+ break;
+ case OPTION_REPEAT:
+ case OPTION_NOREPEAT:
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+void
+md_show_usage (FILE *stream)
+{
+ fprintf (stream, _("MeP specific command line options:\n\
+ -EB assemble for a big endian system (default)\n\
+ -EL assemble for a little endian system\n\
+ -mconfig=<name> specify a chip configuration to use\n\
+ -maverage -mno-average -mmult -mno-mult -mdiv -mno-div\n\
+ -mbitops -mno-bitops -mleadz -mno-leadz -mabsdiff -mno-absdiff\n\
+ -mminmax -mno-minmax -mclip -mno-clip -msatur -mno-satur -mcop32\n\
+ enable/disable the given opcodes\n\
+\n\
+ If -mconfig is given, the other -m options modify it. Otherwise,\n\
+ if no -m options are given, all core opcodes are enabled;\n\
+ if any enabling -m options are given, only those are enabled;\n\
+ if only disabling -m options are given, only those are disabled.\n\
+"));
+ if (mep_config_map[1].name)
+ {
+ int i;
+ fprintf (stream, " -mconfig=STR specify the configuration to use\n");
+ fprintf (stream, " Configurations:");
+ for (i=0; mep_config_map[i].name; i++)
+ fprintf (stream, " %s", mep_config_map[i].name);
+ fprintf (stream, "\n");
+ }
+}
+
+
+
+static void
+mep_check_for_disabled_registers (mep_insn *insn)
+{
+ static int initted = 0;
+ static int has_mul_div = 0;
+ static int has_cop = 0;
+ static int has_debug = 0;
+ unsigned int b, r;
+
+ if (allow_disabled_registers)
+ return;
+
+#if !CGEN_INT_INSN_P
+ if (target_big_endian)
+ b = insn->buffer[0] * 256 + insn->buffer[1];
+ else
+ b = insn->buffer[1] * 256 + insn->buffer[0];
+#else
+ b = insn->buffer[0];
+#endif
+
+ if ((b & 0xfffff00e) == 0x7008 /* stc */
+ || (b & 0xfffff00e) == 0x700a /* ldc */)
+ {
+ if (!initted)
+ {
+ initted = 1;
+ if ((MEP_OMASK & (1 << CGEN_INSN_OPTIONAL_MUL_INSN))
+ || (MEP_OMASK & (1 << CGEN_INSN_OPTIONAL_DIV_INSN)))
+ has_mul_div = 1;
+ if (MEP_OMASK & (1 << CGEN_INSN_OPTIONAL_DEBUG_INSN))
+ has_debug = 1;
+ if (MEP_OMASK & (1 << CGEN_INSN_OPTIONAL_CP_INSN))
+ has_cop = 1;
+ }
+
+ r = ((b & 0x00f0) >> 4) | ((b & 0x0001) << 4);
+ switch (r)
+ {
+ case 7: /* $hi */
+ case 8: /* $lo */
+ if (!has_mul_div)
+ as_bad ("$hi and $lo are disabled when MUL and DIV are off");
+ break;
+ case 12: /* $mb0 */
+ case 13: /* $me0 */
+ case 14: /* $mb1 */
+ case 15: /* $me1 */
+ if (!has_cop)
+ as_bad ("$mb0, $me0, $mb1, and $me1 are disabled when COP is off");
+ break;
+ case 24: /* $dbg */
+ case 25: /* $depc */
+ if (!has_debug)
+ as_bad ("$dbg and $depc are disabled when DEBUG is off");
+ break;
+ }
+ }
+}
+
+static int
+mep_machine (void)
+{
+ switch (MEP_CPU)
+ {
+ default: break;
+ case EF_MEP_CPU_C2: return bfd_mach_mep;
+ case EF_MEP_CPU_C3: return bfd_mach_mep;
+ case EF_MEP_CPU_C4: return bfd_mach_mep;
+ case EF_MEP_CPU_H1: return bfd_mach_mep_h1;
+ }
+
+ return bfd_mach_mep;
+}
+
+/* The MeP version of the cgen parse_operand function. The only difference
+ from the standard version is that we want to avoid treating '$foo' and
+ '($foo...)' as references to a symbol called '$foo'. The chances are
+ that '$foo' is really a misspelt register. */
+
+static const char *
+mep_parse_operand (CGEN_CPU_DESC cd, enum cgen_parse_operand_type want,
+ const char **strP, int opindex, int opinfo,
+ enum cgen_parse_operand_result *resultP, bfd_vma *valueP)
+{
+ if (want == CGEN_PARSE_OPERAND_INTEGER || want == CGEN_PARSE_OPERAND_ADDRESS)
+ {
+ const char *next;
+
+ next = *strP;
+ while (*next == '(')
+ next++;
+ if (*next == '$')
+ return "Not a valid literal";
+ }
+ return gas_cgen_parse_operand (cd, want, strP, opindex, opinfo,
+ resultP, valueP);
+}
+
+void
+md_begin ()
+{
+ /* Initialize the `cgen' interface. */
+
+ /* If the user specifies no options, we default to allowing
+ everything. If the user specifies any enabling options, we
+ default to allowing only what is specified. If the user
+ specifies only disabling options, we only disable what is
+ specified. If the user specifies options and a config, the
+ options modify the config. */
+ if (optbits && mep_config_index == 0)
+ MEP_OMASK = optbits;
+ else
+ MEP_OMASK = (MEP_OMASK & ~optbitset) | optbits;
+
+ /* Set the machine number and endian. */
+ gas_cgen_cpu_desc = mep_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, 0,
+ CGEN_CPU_OPEN_ENDIAN,
+ target_big_endian
+ ? CGEN_ENDIAN_BIG
+ : CGEN_ENDIAN_LITTLE,
+ CGEN_CPU_OPEN_ISAS, 0,
+ CGEN_CPU_OPEN_END);
+ mep_cgen_init_asm (gas_cgen_cpu_desc);
+
+ /* This is a callback from cgen to gas to parse operands. */
+ cgen_set_parse_operand_fn (gas_cgen_cpu_desc, mep_parse_operand);
+
+ /* Identify the architecture. */
+ bfd_default_set_arch_mach (stdoutput, bfd_arch_mep, mep_machine ());
+
+ /* Store the configuration number and core. */
+ bfd_set_private_flags (stdoutput, MEP_CPU | MEP_CONFIG | library_flag);
+
+ /* Initialize the array we'll be using to store fixups. */
+ gas_cgen_initialize_saved_fixups_array();
+}
+
+/* Variant of mep_cgen_assemble_insn. Assemble insn STR of cpu CD as a
+ coprocessor instruction, if possible, into FIELDS, BUF, and INSN. */
+
+static const CGEN_INSN *
+mep_cgen_assemble_cop_insn (CGEN_CPU_DESC cd,
+ const char *str,
+ CGEN_FIELDS *fields,
+ CGEN_INSN_BYTES_PTR buf,
+ const struct cgen_insn *pinsn)
+{
+ const char *start;
+ CGEN_INSN_LIST *ilist;
+ const char *errmsg = NULL;
+
+ /* The instructions are stored in hashed lists. */
+ ilist = CGEN_ASM_LOOKUP_INSN (gas_cgen_cpu_desc,
+ CGEN_INSN_MNEMONIC (pinsn));
+
+ start = str;
+ for ( ; ilist != NULL ; ilist = CGEN_ASM_NEXT_INSN (ilist))
+ {
+ const CGEN_INSN *insn = ilist->insn;
+ if (strcmp (CGEN_INSN_MNEMONIC (ilist->insn),
+ CGEN_INSN_MNEMONIC (pinsn)) == 0
+ && MEP_INSN_COP_P (ilist->insn)
+ && mep_cgen_insn_supported (cd, insn))
+ {
+ str = start;
+
+ /* skip this insn if str doesn't look right lexically */
+ if (CGEN_INSN_RX (insn) != NULL &&
+ regexec ((regex_t *) CGEN_INSN_RX (insn), str, 0, NULL, 0) == REG_NOMATCH)
+ continue;
+
+ /* Allow parse/insert handlers to obtain length of insn. */
+ CGEN_FIELDS_BITSIZE (fields) = CGEN_INSN_BITSIZE (insn);
+
+ errmsg = CGEN_PARSE_FN (cd, insn) (cd, insn, & str, fields);
+ if (errmsg != NULL)
+ continue;
+
+ errmsg = CGEN_INSERT_FN (cd, insn) (cd, insn, fields, buf,
+ (bfd_vma) 0);
+ if (errmsg != NULL)
+ continue;
+
+ return insn;
+ }
+ }
+ return pinsn;
+}
+
+static void
+mep_save_insn (mep_insn insn)
+{
+ /* Consider change MAX_SAVED_FIXUP_CHAINS to MAX_PARALLEL_INSNS. */
+ if (num_insns_saved < 0 || num_insns_saved >= MAX_SAVED_FIXUP_CHAINS)
+ {
+ as_fatal("index into saved_insns[] out of bounds.");
+ return;
+ }
+ saved_insns[num_insns_saved] = insn;
+ gas_cgen_save_fixups(num_insns_saved);
+ num_insns_saved++;
+}
+
+static void
+mep_check_parallel32_scheduling (void)
+{
+ int insn0iscopro, insn1iscopro, insn0length, insn1length;
+
+ /* More than two instructions means that either someone is referring to
+ an internally parallel core or an internally parallel coprocessor,
+ neither of which are supported at this time. */
+ if ( num_insns_saved > 2 )
+ as_fatal("Internally paralled cores and coprocessors not supported.");
+
+ /* If there are no insns saved, that's ok. Just return. This will
+ happen when mep_process_saved_insns is called when the end of the
+ source file is reached and there are no insns left to be processed. */
+ if (num_insns_saved == 0)
+ return;
+
+ /* Check some of the attributes of the first insn. */
+ insn0iscopro = MEP_INSN_COP_P (saved_insns[0].insn);
+ insn0length = CGEN_FIELDS_BITSIZE (& saved_insns[0].fields);
+
+ if (num_insns_saved == 2)
+ {
+ /* Check some of the attributes of the first insn. */
+ insn1iscopro = MEP_INSN_COP_P (saved_insns[1].insn);
+ insn1length = CGEN_FIELDS_BITSIZE (& saved_insns[1].fields);
+
+ if ((insn0iscopro && !insn1iscopro)
+ || (insn1iscopro && !insn0iscopro))
+ {
+ /* We have one core and one copro insn. If their sizes
+ add up to 32, then the combination is valid. */
+ if (insn0length + insn1length == 32)
+ return;
+ else
+ as_bad ("core and copro insn lengths must total 32 bits.");
+ }
+ else
+ as_bad ("vliw group must consist of 1 core and 1 copro insn.");
+ }
+ else
+ {
+ /* If we arrive here, we have one saved instruction. There are a
+ number of possible cases:
+
+ 1. The instruction is a 32 bit core or coprocessor insn and
+ can be executed by itself. Valid.
+
+ 2. The instrucion is a core instruction for which a cop nop
+ exists. In this case, insert the cop nop into the saved
+ insn array after the core insn and return. Valid.
+
+ 3. The instruction is a coprocessor insn for which a core nop
+ exists. In this case, move the coprocessor insn to the
+ second element of the array and put the nop in the first
+ element then return. Valid.
+
+ 4. The instruction is a core or coprocessor instruction for
+ which there is no matching coprocessor or core nop to use
+ to form a valid vliw insn combination. In this case, we
+ we have to abort. */
+
+ if (insn0length > 32)
+ as_fatal ("Cannot use 48- or 64-bit insns with a 32 bit datapath.");
+
+ if (insn0length == 32)
+ return;
+
+ /* Insn is smaller than datapath. If there are no matching
+ nops for this insn, then terminate assembly. */
+ if (CGEN_INSN_ATTR_VALUE (saved_insns[0].insn,
+ CGEN_INSN_VLIW32_NO_MATCHING_NOP))
+ as_fatal ("No valid nop.");
+
+ /* At this point we know that we have a single 16-bit insn that has
+ a matching nop. We have to assemble it and put it into the saved
+ insn and fixup chain arrays. */
+
+ if (insn0iscopro)
+ {
+ char *errmsg;
+ mep_insn insn;
+
+ /* Move the insn and it's fixups to the second element of the
+ saved insns arrary and insert a 16 bit core nope into the
+ first element. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "nop",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+
+ /* Move the insn in element 0 to element 1 and insert the
+ nop into element 0. Move the fixups in element 0 to
+ element 1 and save the current fixups to element 0.
+ Really there aren't any fixups at this point because we're
+ inserting a nop but we might as well be general so that
+ if there's ever a need to insert a general insn, we'll
+ have an example. */
+ saved_insns[1] = saved_insns[0];
+ saved_insns[0] = insn;
+ num_insns_saved++;
+ gas_cgen_swap_fixups (0);
+ gas_cgen_save_fixups (1);
+ }
+ else
+ {
+ char * errmsg;
+ mep_insn insn;
+ int insn_num = saved_insns[0].insn->base->num;
+
+ /* Use 32 bit branches and skip the nop. */
+ if (insn_num == MEP_INSN_BSR12
+ || insn_num == MEP_INSN_BEQZ
+ || insn_num == MEP_INSN_BNEZ)
+ return;
+
+ /* Insert a 16-bit coprocessor nop. Note that at the time */
+ /* this was done, no 16-bit coprocessor nop was defined. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "cpnop16",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+
+ /* Now put the insn and fixups into the arrays. */
+ mep_save_insn (insn);
+ }
+ }
+}
+
+static void
+mep_check_parallel64_scheduling (void)
+{
+ int insn0iscopro, insn1iscopro, insn0length, insn1length;
+
+ /* More than two instructions means that someone is referring to an
+ internally parallel core or an internally parallel coprocessor. */
+ /* These are not currently supported. */
+ if (num_insns_saved > 2)
+ as_fatal ("Internally parallel cores of coprocessors not supported.");
+
+ /* If there are no insns saved, that's ok. Just return. This will
+ happen when mep_process_saved_insns is called when the end of the
+ source file is reached and there are no insns left to be processed. */
+ if (num_insns_saved == 0)
+ return;
+
+ /* Check some of the attributes of the first insn. */
+ insn0iscopro = MEP_INSN_COP_P (saved_insns[0].insn);
+ insn0length = CGEN_FIELDS_BITSIZE (& saved_insns[0].fields);
+
+ if (num_insns_saved == 2)
+ {
+ /* Check some of the attributes of the first insn. */
+ insn1iscopro = MEP_INSN_COP_P (saved_insns[1].insn);
+ insn1length = CGEN_FIELDS_BITSIZE (& saved_insns[1].fields);
+
+ if ((insn0iscopro && !insn1iscopro)
+ || (insn1iscopro && !insn0iscopro))
+ {
+ /* We have one core and one copro insn. If their sizes
+ add up to 64, then the combination is valid. */
+ if (insn0length + insn1length == 64)
+ return;
+ else
+ as_bad ("core and copro insn lengths must total 64 bits.");
+ }
+ else
+ as_bad ("vliw group must consist of 1 core and 1 copro insn.");
+ }
+ else
+ {
+ /* If we arrive here, we have one saved instruction. There are a
+ number of possible cases:
+
+ 1. The instruction is a 64 bit coprocessor insn and can be
+ executed by itself. Valid.
+
+ 2. The instrucion is a core instruction for which a cop nop
+ exists. In this case, insert the cop nop into the saved
+ insn array after the core insn and return. Valid.
+
+ 3. The instruction is a coprocessor insn for which a core nop
+ exists. In this case, move the coprocessor insn to the
+ second element of the array and put the nop in the first
+ element then return. Valid.
+
+ 4. The instruction is a core or coprocessor instruction for
+ which there is no matching coprocessor or core nop to use
+ to form a valid vliw insn combination. In this case, we
+ we have to abort. */
+
+ /* If the insn is 64 bits long, it can run alone. The size check
+ is done indepependantly of whether the insn is core or copro
+ in case 64 bit coprocessor insns are added later. */
+ if (insn0length == 64)
+ return;
+
+ /* Insn is smaller than datapath. If there are no matching
+ nops for this insn, then terminate assembly. */
+ if (CGEN_INSN_ATTR_VALUE (saved_insns[0].insn,
+ CGEN_INSN_VLIW64_NO_MATCHING_NOP))
+ as_fatal ("No valid nop.");
+
+ if (insn0iscopro)
+ {
+ char *errmsg;
+ mep_insn insn;
+ int i;
+
+ /* Initialize the insn buffer. */
+ for (i = 0; i < 64; i++)
+ insn.buffer[i] = '\0';
+
+ /* We have a coprocessor insn. At this point in time there
+ are is 32-bit core nop. There is only a 16-bit core
+ nop. The idea is to allow for a relatively arbitrary
+ coprocessor to be specified. We aren't looking at
+ trying to cover future changes in the core at this time
+ since it is assumed that the core will remain fairly
+ static. If there ever are 32 or 48 bit core nops added,
+ they will require entries below. */
+
+ if (insn0length == 48)
+ {
+ /* Move the insn and fixups to the second element of the
+ arrays then assemble and insert a 16 bit core nop. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "nop",
+ & insn.fields, insn.buffer,
+ & errmsg);
+ }
+ else
+ {
+ /* If this is reached, then we have a single coprocessor
+ insn that is not 48 bits long, but for which the assembler
+ thinks there is a matching core nop. If a 32-bit core
+ nop has been added, then make the necessary changes and
+ handle its assembly and insertion here. Otherwise,
+ go figure out why either:
+
+ 1. The assembler thinks that there is a 32-bit core nop
+ to match a 32-bit coprocessor insn, or
+ 2. The assembler thinks that there is a 48-bit core nop
+ to match a 16-bit coprocessor insn. */
+
+ as_fatal ("Assembler expects a non-existent core nop.");
+ }
+
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+
+ /* Move the insn in element 0 to element 1 and insert the
+ nop into element 0. Move the fixups in element 0 to
+ element 1 and save the current fixups to element 0.
+ Really there aren't any fixups at this point because we're
+ inserting a nop but we might as well be general so that
+ if there's ever a need to insert a general insn, we'll
+ have an example. */
+
+ saved_insns[1] = saved_insns[0];
+ saved_insns[0] = insn;
+ num_insns_saved++;
+ gas_cgen_swap_fixups(0);
+ gas_cgen_save_fixups(1);
+
+ }
+ else
+ {
+ char * errmsg;
+ mep_insn insn;
+ int i;
+
+ /* Initialize the insn buffer */
+ for (i = 0; i < 64; i++)
+ insn.buffer[i] = '\0';
+
+ /* We have a core insn. We have to handle all possible nop
+ lengths. If a coprocessor doesn't have a nop of a certain
+ length but there exists core insns that when combined with
+ a nop of that length would fill the datapath, those core
+ insns will be flagged with the VLIW_NO_CORRESPONDING_NOP
+ attribute. That will ensure that when used in a way that
+ requires a nop to be inserted, assembly will terminate
+ before reaching this section of code. This guarantees
+ that cases below which would result in the attempted
+ insertion of nop that doesn't exist will never be entered. */
+ if (insn0length == 16)
+ {
+ /* Insert 48 bit coprocessor nop. */
+ /* Assemble it and put it into the arrays. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "cpnop48",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ }
+ else if (insn0length == 32)
+ {
+ /* Insert 32 bit coprocessor nop. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "cpnop32",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ }
+ else if (insn0length == 48)
+ {
+ /* Insert 16 bit coprocessor nop. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, "cpnop16",
+ &insn.fields, insn.buffer,
+ &errmsg);
+ }
+ else
+ /* Core insn has an invalid length. Something has gone wrong. */
+ as_fatal ("Core insn has invalid length! Something is wrong!");
+
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+
+ /* Now put the insn and fixups into the arrays. */
+ mep_save_insn (insn);
+ }
+ }
+}
+
+/* The scheduling functions are just filters for invalid combinations.
+ If there is a violation, they terminate assembly. Otherise they
+ just fall through. Succesful combinations cause no side effects
+ other than valid nop insertion. */
+
+static void
+mep_check_parallel_scheduling (void)
+{
+ /* This is where we will eventually read the config information
+ and choose which scheduling checking function to call. */
+ if (MEP_VLIW64)
+ mep_check_parallel64_scheduling ();
+ else
+ mep_check_parallel32_scheduling ();
+}
+
+static void
+mep_process_saved_insns (void)
+{
+ int i;
+
+ gas_cgen_save_fixups (MAX_SAVED_FIXUP_CHAINS - 1);
+
+ /* We have to check for valid scheduling here. */
+ mep_check_parallel_scheduling ();
+
+ /* If the last call didn't cause assembly to terminate, we have
+ a valid vliw insn/insn pair saved. Restore this instructions'
+ fixups and process the insns. */
+ for (i = 0;i<num_insns_saved;i++)
+ {
+ gas_cgen_restore_fixups (i);
+ gas_cgen_finish_insn (saved_insns[i].insn, saved_insns[i].buffer,
+ CGEN_FIELDS_BITSIZE (& saved_insns[i].fields),
+ 1, NULL);
+ }
+ gas_cgen_restore_fixups (MAX_SAVED_FIXUP_CHAINS - 1);
+
+ /* Clear the fixups and reset the number insn saved to 0. */
+ gas_cgen_initialize_saved_fixups_array ();
+ num_insns_saved = 0;
+ listing_prev_line ();
+}
+
+void
+md_assemble (char * str)
+{
+ static CGEN_BITSET* isas = NULL;
+ char * errmsg;
+
+ /* Initialize GAS's cgen interface for a new instruction. */
+ gas_cgen_init_parse ();
+
+ /* There are two possible modes: core and vliw. We have to assemble
+ differently for each.
+
+ Core Mode: We assemble normally. All instructions are on a
+ single line and are made up of one mnemonic and one
+ set of operands.
+ VLIW Mode: Vliw combinations are indicated as follows:
+
+ core insn
+ + copro insn
+
+ We want to handle the general case where more than
+ one instruction can be preceeded by a +. This will
+ happen later if we add support for internally parallel
+ coprocessors. We'll make the parsing nice and general
+ so that it can handle an arbitrary number of insns
+ with leading +'s. The actual checking for valid
+ combinations is done elsewhere. */
+
+ /* Initialize the isa to refer to the core. */
+ if (isas == NULL)
+ isas = cgen_bitset_copy (& MEP_CORE_ISA);
+ else
+ {
+ cgen_bitset_clear (isas);
+ cgen_bitset_union (isas, & MEP_CORE_ISA, isas);
+ }
+ gas_cgen_cpu_desc->isas = isas;
+
+ if (mode == VLIW)
+ {
+ /* VLIW mode. */
+
+ int thisInsnIsCopro = 0;
+ mep_insn insn;
+ int i;
+
+ /* Initialize the insn buffer */
+
+ if (! CGEN_INT_INSN_P)
+ for (i=0; i < CGEN_MAX_INSN_SIZE; i++)
+ insn.buffer[i]='\0';
+
+ /* Can't tell core / copro insns apart at parse time! */
+ cgen_bitset_union (isas, & MEP_COP_ISA, isas);
+
+ /* Assemble the insn so we can examine its attributes. */
+ insn.insn = mep_cgen_assemble_insn (gas_cgen_cpu_desc, str,
+ &insn.fields, insn.buffer,
+ &errmsg);
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+ mep_check_for_disabled_registers (&insn);
+
+ /* Check to see if it's a coprocessor instruction. */
+ thisInsnIsCopro = MEP_INSN_COP_P (insn.insn);
+
+ if (!thisInsnIsCopro)
+ {
+ insn.insn = mep_cgen_assemble_cop_insn (gas_cgen_cpu_desc, str,
+ &insn.fields, insn.buffer,
+ insn.insn);
+ thisInsnIsCopro = MEP_INSN_COP_P (insn.insn);
+ mep_check_for_disabled_registers (&insn);
+ }
+
+ if (pluspresent)
+ {
+ /* A plus was present. */
+ /* Check for a + with a core insn and abort if found. */
+ if (!thisInsnIsCopro)
+ {
+ as_fatal("A core insn cannot be preceeded by a +.\n");
+ return;
+ }
+
+ if (num_insns_saved > 0)
+ {
+ /* There are insns in the queue. Add this one. */
+ mep_save_insn (insn);
+ }
+ else
+ {
+ /* There are no insns in the queue and a plus is present.
+ This is a syntax error. Let's not tolerate this.
+ We can relax this later if necessary. */
+ as_bad (_("Invalid use of parallelization operator."));
+ return;
+ }
+ }
+ else
+ {
+ /* No plus was present. */
+ if (num_insns_saved > 0)
+ {
+ /* There are insns saved and we came across an insn without a
+ leading +. That's the signal to process the saved insns
+ before proceeding then treat the current insn as the first
+ in a new vliw group. */
+ mep_process_saved_insns ();
+ num_insns_saved = 0;
+ /* mep_save_insn (insn); */
+ }
+ mep_save_insn (insn);
+#if 0
+ else
+ {
+
+ /* Core Insn. Add it to the beginning of the queue. */
+ mep_save_insn (insn);
+ /* gas_cgen_save_fixups(num_insns_saved); */
+ }
+#endif
+ }
+
+ pluspresent = 0;
+ }
+ else
+ {
+ /* Core mode. */
+
+ /* Only single instructions are assembled in core mode. */
+ mep_insn insn;
+
+ /* If a leading '+' was present, issue an error.
+ That's not allowed in core mode. */
+ if (pluspresent)
+ {
+ as_bad (_("Leading plus sign not allowed in core mode"));
+ return;
+ }
+
+ insn.insn = mep_cgen_assemble_insn
+ (gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg);
+
+ if (!insn.insn)
+ {
+ as_bad ("%s", errmsg);
+ return;
+ }
+ gas_cgen_finish_insn (insn.insn, insn.buffer,
+ CGEN_FIELDS_BITSIZE (& insn.fields), 1, NULL);
+ mep_check_for_disabled_registers (&insn);
+ }
+}
+
+valueT
+md_section_align (segT segment, valueT size)
+{
+ int align = bfd_get_section_alignment (stdoutput, segment);
+ return ((size + (1 << align) - 1) & (-1 << align));
+}
+
+
+symbolS *
+md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
+{
+ return 0;
+}
+
+/* Interface to relax_segment. */
+
+
+const relax_typeS md_relax_table[] =
+{
+ /* The fields are:
+ 1) most positive reach of this state,
+ 2) most negative reach of this state,
+ 3) how many bytes this mode will have in the variable part of the frag
+ 4) which index into the table to try if we can't fit into this one. */
+ /* Note that we use "beq" because "jmp" has a peculiarity - it cannot
+ jump to addresses with any bits 27..24 set. So, we use beq as a
+ 17-bit pc-relative branch to avoid using jmp, just in case. */
+
+ /* 0 */ { 0, 0, 0, 0 }, /* unused */
+ /* 1 */ { 0, 0, 0, 0 }, /* marker for "don't know yet" */
+
+ /* 2 */ { 2047, -2048, 0, 3 }, /* bsr12 */
+ /* 3 */ { 0, 0, 2, 0 }, /* bsr16 */
+
+ /* 4 */ { 2047, -2048, 0, 5 }, /* bra */
+ /* 5 */ { 65535, -65536, 2, 6 }, /* beq $0,$0 */
+ /* 6 */ { 0, 0, 2, 0 }, /* jmp24 */
+
+ /* 7 */ { 65535, -65536, 0, 8 }, /* beqi */
+ /* 8 */ { 0, 0, 4, 0 }, /* bnei/jmp */
+
+ /* 9 */ { 127, -128, 0, 10 }, /* beqz */
+ /* 10 */ { 65535, -65536, 2, 11 }, /* beqi */
+ /* 11 */ { 0, 0, 4, 0 }, /* bnei/jmp */
+
+ /* 12 */ { 65535, -65536, 0, 13 }, /* bnei */
+ /* 13 */ { 0, 0, 4, 0 }, /* beqi/jmp */
+
+ /* 14 */ { 127, -128, 0, 15 }, /* bnez */
+ /* 15 */ { 65535, -65536, 2, 16 }, /* bnei */
+ /* 16 */ { 0, 0, 4, 0 }, /* beqi/jmp */
+
+ /* 17 */ { 65535, -65536, 0, 13 }, /* bgei */
+ /* 18 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* blti */
+ /* 20 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* bcpeq */
+ /* 20 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* bcpne */
+ /* 20 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* bcpat */
+ /* 20 */ { 0, 0, 4, 0 },
+ /* 19 */ { 65535, -65536, 0, 13 }, /* bcpaf */
+ /* 20 */ { 0, 0, 4, 0 }
+};
+
+/* Pseudo-values for 64 bit "insns" which are combinations of two 32
+ bit insns. */
+typedef enum {
+ MEP_PSEUDO64_NONE,
+ MEP_PSEUDO64_16BITCC,
+ MEP_PSEUDO64_32BITCC,
+} MepPseudo64Values;
+
+static struct {
+ int insn;
+ int growth;
+ int insn_for_extern;
+} subtype_mappings[] = {
+ { 0, 0, 0 },
+ { 0, 0, 0 },
+ { MEP_INSN_BSR12, 0, MEP_INSN_BSR24 },
+ { MEP_INSN_BSR24, 2, MEP_INSN_BSR24 },
+ { MEP_INSN_BRA, 0, MEP_INSN_BRA },
+ { MEP_INSN_BEQ, 2, MEP_INSN_BEQ },
+ { MEP_INSN_JMP, 2, MEP_INSN_JMP },
+ { MEP_INSN_BEQI, 0, MEP_INSN_BEQI },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BEQZ, 0, MEP_INSN_BEQZ },
+ { MEP_INSN_BEQI, 2, MEP_INSN_BEQI },
+ { -1, 4, MEP_PSEUDO64_16BITCC },
+ { MEP_INSN_BNEI, 0, MEP_INSN_BNEI },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BNEZ, 0, MEP_INSN_BNEZ },
+ { MEP_INSN_BNEI, 2, MEP_INSN_BNEI },
+ { -1, 4, MEP_PSEUDO64_16BITCC },
+ { MEP_INSN_BGEI, 0, MEP_INSN_BGEI },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BLTI, 0, MEP_INSN_BLTI },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BCPEQ, 0, MEP_INSN_BCPEQ },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BCPNE, 0, MEP_INSN_BCPNE },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BCPAT, 0, MEP_INSN_BCPAT },
+ { -1, 4, MEP_PSEUDO64_32BITCC },
+ { MEP_INSN_BCPAF, 0, MEP_INSN_BCPAF },
+ { -1, 4, MEP_PSEUDO64_32BITCC }
+};
+#define NUM_MAPPINGS (sizeof (subtype_mappings) / sizeof (subtype_mappings[0]))
+
+void
+mep_prepare_relax_scan (fragS *fragP, offsetT *aim, relax_substateT this_state)
+{
+ symbolS *symbolP = fragP->fr_symbol;
+ if (symbolP && !S_IS_DEFINED (symbolP))
+ *aim = 0;
+ /* Adjust for MeP pcrel not being relative to the next opcode. */
+ *aim += 2 + md_relax_table[this_state].rlx_length;
+}
+
+static int
+insn_to_subtype (int insn)
+{
+ unsigned int i;
+ for (i=0; i<NUM_MAPPINGS; i++)
+ if (insn == subtype_mappings[i].insn)
+ return i;
+ abort ();
+}
+
+/* Return an initial guess of the length by which a fragment must grow
+ to hold a branch to reach its destination. Also updates fr_type
+ and fr_subtype as necessary.
+
+ Called just before doing relaxation. Any symbol that is now
+ undefined will not become defined. The guess for fr_var is
+ ACTUALLY the growth beyond fr_fix. Whatever we do to grow fr_fix
+ or fr_var contributes to our returned value. Although it may not
+ be explicit in the frag, pretend fr_var starts with a 0 value. */
+
+int
+md_estimate_size_before_relax (fragS * fragP, segT segment)
+{
+ if (fragP->fr_subtype == 1)
+ fragP->fr_subtype = insn_to_subtype (fragP->fr_cgen.insn->base->num);
+
+ if (S_GET_SEGMENT (fragP->fr_symbol) != segment)
+ {
+ int new_insn;
+
+ new_insn = subtype_mappings[fragP->fr_subtype].insn_for_extern;
+ fragP->fr_subtype = insn_to_subtype (new_insn);
+ }
+
+ if (MEP_VLIW && ! MEP_VLIW64
+ && (bfd_get_section_flags (stdoutput, segment) & SEC_MEP_VLIW))
+ {
+ /* Use 32 bit branches for vliw32 so the vliw word is not split. */
+ switch (fragP->fr_cgen.insn->base->num)
+ {
+ case MEP_INSN_BSR12:
+ fragP->fr_subtype = insn_to_subtype
+ (subtype_mappings[fragP->fr_subtype].insn_for_extern);
+ break;
+ case MEP_INSN_BEQZ:
+ fragP->fr_subtype ++;
+ break;
+ case MEP_INSN_BNEZ:
+ fragP->fr_subtype ++;
+ break;
+ }
+ }
+
+ if (fragP->fr_cgen.insn->base
+ && fragP->fr_cgen.insn->base->num
+ != subtype_mappings[fragP->fr_subtype].insn)
+ {
+ int new_insn= subtype_mappings[fragP->fr_subtype].insn;
+ if (new_insn != -1)
+ {
+ fragP->fr_cgen.insn = (fragP->fr_cgen.insn
+ - fragP->fr_cgen.insn->base->num
+ + new_insn);
+ }
+ }
+
+ return subtype_mappings[fragP->fr_subtype].growth;
+}
+
+/* *fragP has been relaxed to its final size, and now needs to have
+ the bytes inside it modified to conform to the new size.
+
+ Called after relaxation is finished.
+ fragP->fr_type == rs_machine_dependent.
+ fragP->fr_subtype is the subtype of what the address relaxed to. */
+
+static int
+target_address_for (fragS *frag)
+{
+ int rv = frag->fr_offset;
+ symbolS *sym = frag->fr_symbol;
+
+ if (sym)
+ rv += S_GET_VALUE (sym);
+
+ return rv;
+}
+
+void
+md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
+ segT sec ATTRIBUTE_UNUSED,
+ fragS *fragP)
+{
+ int addend, rn, bit = 0;
+ int operand;
+ int where = fragP->fr_opcode - fragP->fr_literal;
+ int e = target_big_endian ? 0 : 1;
+
+ addend = target_address_for (fragP) - (fragP->fr_address + where);
+
+ if (subtype_mappings[fragP->fr_subtype].insn == -1)
+ {
+ fragP->fr_fix += subtype_mappings[fragP->fr_subtype].growth;
+ switch (subtype_mappings[fragP->fr_subtype].insn_for_extern)
+ {
+ case MEP_PSEUDO64_16BITCC:
+ fragP->fr_opcode[1^e] = ((fragP->fr_opcode[1^e] & 1) ^ 1) | 0x06;
+ fragP->fr_opcode[2^e] = 0xd8;
+ fragP->fr_opcode[3^e] = 0x08;
+ fragP->fr_opcode[4^e] = 0;
+ fragP->fr_opcode[5^e] = 0;
+ where += 2;
+ break;
+ case MEP_PSEUDO64_32BITCC:
+ if (fragP->fr_opcode[0^e] & 0x10)
+ fragP->fr_opcode[1^e] ^= 0x01;
+ else
+ fragP->fr_opcode[1^e] ^= 0x04;
+ fragP->fr_opcode[2^e] = 0;
+ fragP->fr_opcode[3^e] = 4;
+ fragP->fr_opcode[4^e] = 0xd8;
+ fragP->fr_opcode[5^e] = 0x08;
+ fragP->fr_opcode[6^e] = 0;
+ fragP->fr_opcode[7^e] = 0;
+ where += 4;
+ break;
+ default:
+ abort ();
+ }
+ fragP->fr_cgen.insn = (fragP->fr_cgen.insn
+ - fragP->fr_cgen.insn->base->num
+ + MEP_INSN_JMP);
+ operand = MEP_OPERAND_PCABS24A2;
+ }
+ else
+ switch (fragP->fr_cgen.insn->base->num)
+ {
+ case MEP_INSN_BSR12:
+ fragP->fr_opcode[0^e] = 0xb0 | ((addend >> 8) & 0x0f);
+ fragP->fr_opcode[1^e] = 0x01 | (addend & 0xfe);
+ operand = MEP_OPERAND_PCREL12A2;
+ break;
+
+ case MEP_INSN_BSR24:
+ fragP->fr_fix += 2;
+ fragP->fr_opcode[0^e] = 0xd8 | ((addend >> 5) & 0x07);
+ fragP->fr_opcode[1^e] = 0x09 | ((addend << 3) & 0xf0);
+ fragP->fr_opcode[2^e] = 0x00 | ((addend >>16) & 0xff);
+ fragP->fr_opcode[3^e] = 0x00 | ((addend >> 8) & 0xff);
+ operand = MEP_OPERAND_PCREL24A2;
+ break;
+
+ case MEP_INSN_BRA:
+ fragP->fr_opcode[0^e] = 0xb0 | ((addend >> 8) & 0x0f);
+ fragP->fr_opcode[1^e] = 0x00 | (addend & 0xfe);
+ operand = MEP_OPERAND_PCREL12A2;
+ break;
+
+ case MEP_INSN_BEQ:
+ /* The default relax_frag doesn't change the state if there is no
+ growth, so we must manually handle converting out-of-range BEQ
+ instructions to JMP. */
+ if (addend <= 65535 && addend >= -65536)
+ {
+ fragP->fr_fix += 2;
+ fragP->fr_opcode[0^e] = 0xe0;
+ fragP->fr_opcode[1^e] = 0x01;
+ fragP->fr_opcode[2^e] = 0x00 | ((addend >> 9) & 0xff);
+ fragP->fr_opcode[3^e] = 0x00 | ((addend >> 1) & 0xff);
+ operand = MEP_OPERAND_PCREL17A2;
+ break;
+ }
+ /* ...FALLTHROUGH... */
+
+ case MEP_INSN_JMP:
+ addend = target_address_for (fragP);
+ fragP->fr_fix += 2;
+ fragP->fr_opcode[0^e] = 0xd8 | ((addend >> 5) & 0x07);
+ fragP->fr_opcode[1^e] = 0x08 | ((addend << 3) & 0xf0);
+ fragP->fr_opcode[2^e] = 0x00 | ((addend >>16) & 0xff);
+ fragP->fr_opcode[3^e] = 0x00 | ((addend >> 8) & 0xff);
+ operand = MEP_OPERAND_PCABS24A2;
+ break;
+
+ case MEP_INSN_BNEZ:
+ bit = 1;
+ case MEP_INSN_BEQZ:
+ fragP->fr_opcode[1^e] = bit | (addend & 0xfe);
+ operand = MEP_OPERAND_PCREL8A2;
+ break;
+
+ case MEP_INSN_BNEI:
+ bit = 4;
+ case MEP_INSN_BEQI:
+ if (subtype_mappings[fragP->fr_subtype].growth)
+ {
+ fragP->fr_fix += subtype_mappings[fragP->fr_subtype].growth;
+ rn = fragP->fr_opcode[0^e] & 0x0f;
+ fragP->fr_opcode[0^e] = 0xe0 | rn;
+ fragP->fr_opcode[1^e] = bit;
+ }
+ fragP->fr_opcode[2^e] = 0x00 | ((addend >> 9) & 0xff);
+ fragP->fr_opcode[3^e] = 0x00 | ((addend >> 1) & 0xff);
+ operand = MEP_OPERAND_PCREL17A2;
+ break;
+
+ case MEP_INSN_BLTI:
+ case MEP_INSN_BGEI:
+ case MEP_INSN_BCPEQ:
+ case MEP_INSN_BCPNE:
+ case MEP_INSN_BCPAT:
+ case MEP_INSN_BCPAF:
+ /* No opcode change needed, just operand. */
+ fragP->fr_opcode[2^e] = (addend >> 9) & 0xff;
+ fragP->fr_opcode[3^e] = (addend >> 1) & 0xff;
+ operand = MEP_OPERAND_PCREL17A2;
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (S_GET_SEGMENT (fragP->fr_symbol) != sec
+ || operand == MEP_OPERAND_PCABS24A2)
+ {
+ assert (fragP->fr_cgen.insn != 0);
+ gas_cgen_record_fixup (fragP,
+ where,
+ fragP->fr_cgen.insn,
+ (fragP->fr_fix - where) * 8,
+ cgen_operand_lookup_by_num (gas_cgen_cpu_desc,
+ operand),
+ fragP->fr_cgen.opinfo,
+ fragP->fr_symbol, fragP->fr_offset);
+ }
+}
+
+
+/* Functions concerning relocs. */
+
+void
+mep_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
+{
+ /* If we already know the fixup value, adjust it in the same
+ way that the linker would have done. */
+ if (fixP->fx_addsy == 0)
+ switch (fixP->fx_cgen.opinfo)
+ {
+ case BFD_RELOC_MEP_LOW16:
+ *valP = ((long)(*valP & 0xffff)) << 16 >> 16;
+ break;
+ case BFD_RELOC_MEP_HI16U:
+ *valP >>= 16;
+ break;
+ case BFD_RELOC_MEP_HI16S:
+ *valP = (*valP + 0x8000) >> 16;
+ break;
+ }
+
+ /* Now call cgen's md_aply_fix. */
+ gas_cgen_md_apply_fix (fixP, valP, seg);
+}
+
+long
+md_pcrel_from_section (fixS *fixP, segT sec)
+{
+ if (fixP->fx_addsy != (symbolS *) NULL
+ && (! S_IS_DEFINED (fixP->fx_addsy)
+ || S_GET_SEGMENT (fixP->fx_addsy) != sec))
+ /* The symbol is undefined (or is defined but not in this section).
+ Let the linker figure it out. */
+ return 0;
+
+ /* Return the address of the opcode - cgen adjusts for opcode size
+ itself, to be consistent with the disassembler, which must do
+ so. */
+ return fixP->fx_where + fixP->fx_frag->fr_address;
+}
+
+/* Return the bfd reloc type for OPERAND of INSN at fixup FIXP.
+ Returns BFD_RELOC_NONE if no reloc type can be found.
+ *FIXP may be modified if desired. */
+
+#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
+#define MAP(n) case MEP_OPERAND_##n: return BFD_RELOC_MEP_##n;
+#else
+#define MAP(n) case MEP_OPERAND_/**/n: return BFD_RELOC_MEP_/**/n;
+#endif
+
+bfd_reloc_code_real_type
+md_cgen_lookup_reloc (const CGEN_INSN *insn ATTRIBUTE_UNUSED,
+ const CGEN_OPERAND *operand,
+ fixS *fixP)
+{
+ enum bfd_reloc_code_real reloc = fixP->fx_cgen.opinfo;
+ static char printed[MEP_OPERAND_MAX] = { 0 };
+
+ /* If there's a reloc here, it's because the parser saw a %foo() and
+ is giving us the correct reloc to use, or because we converted to
+ a different size reloc below and want to avoid "converting" more
+ than once. */
+ if (reloc && reloc != BFD_RELOC_NONE)
+ return reloc;
+
+ switch (operand->type)
+ {
+ MAP (PCREL8A2); /* beqz */
+ MAP (PCREL12A2); /* bsr16 */
+ MAP (PCREL17A2); /* beqi */
+ MAP (PCREL24A2); /* bsr24 */
+ MAP (PCABS24A2); /* jmp */
+ MAP (UIMM24); /* mov */
+ MAP (ADDR24A4); /* sw/lw */
+
+ /* The rest of the relocs should be generated by the parser,
+ for things such as %tprel(), etc. */
+ case MEP_OPERAND_SIMM16:
+#ifdef OBJ_COMPLEX_RELC
+ /* coalescing this into RELOC_MEP_16 is actually a bug,
+ since it's a signed operand. let the relc code handle it. */
+ return BFD_RELOC_RELC;
+#endif
+
+ case MEP_OPERAND_UIMM16:
+ case MEP_OPERAND_SDISP16:
+ case MEP_OPERAND_CODE16:
+ fixP->fx_where += 2;
+ /* to avoid doing the above add twice */
+ fixP->fx_cgen.opinfo = BFD_RELOC_MEP_16;
+ return BFD_RELOC_MEP_16;
+
+ default:
+#ifdef OBJ_COMPLEX_RELC
+ /* this is not an error, yet.
+ pass it to the linker. */
+ return BFD_RELOC_RELC;
+#endif
+ if (printed[operand->type])
+ return BFD_RELOC_NONE;
+ printed[operand->type] = 1;
+
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("Don't know how to relocate plain operands of type %s"),
+ operand->name);
+
+ /* Print some helpful hints for the user. */
+ switch (operand->type)
+ {
+ case MEP_OPERAND_UDISP7:
+ case MEP_OPERAND_UDISP7A2:
+ case MEP_OPERAND_UDISP7A4:
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("Perhaps you are missing %%tpoff()?"));
+ break;
+ default:
+ break;
+ }
+ return BFD_RELOC_NONE;
+ }
+}
+
+/* Called while parsing an instruction to create a fixup.
+ We need to check for HI16 relocs and queue them up for later sorting. */
+
+fixS *
+mep_cgen_record_fixup_exp (fragS *frag,
+ int where,
+ const CGEN_INSN *insn,
+ int length,
+ const CGEN_OPERAND *operand,
+ int opinfo,
+ expressionS *exp)
+{
+ fixS * fixP = gas_cgen_record_fixup_exp (frag, where, insn, length,
+ operand, opinfo, exp);
+ return fixP;
+}
+
+/* Return BFD reloc type from opinfo field in a fixS.
+ It's tricky using fx_r_type in mep_frob_file because the values
+ are BFD_RELOC_UNUSED + operand number. */
+#define FX_OPINFO_R_TYPE(f) ((f)->fx_cgen.opinfo)
+
+/* Sort any unmatched HI16 relocs so that they immediately precede
+ the corresponding LO16 reloc. This is called before md_apply_fix and
+ tc_gen_reloc. */
+
+void
+mep_frob_file ()
+{
+ struct mep_hi_fixup * l;
+
+ for (l = mep_hi_fixup_list; l != NULL; l = l->next)
+ {
+ segment_info_type * seginfo;
+ int pass;
+
+ assert (FX_OPINFO_R_TYPE (l->fixp) == BFD_RELOC_HI16
+ || FX_OPINFO_R_TYPE (l->fixp) == BFD_RELOC_LO16);
+
+ /* Check quickly whether the next fixup happens to be a matching low. */
+ if (l->fixp->fx_next != NULL
+ && FX_OPINFO_R_TYPE (l->fixp->fx_next) == BFD_RELOC_LO16
+ && l->fixp->fx_addsy == l->fixp->fx_next->fx_addsy
+ && l->fixp->fx_offset == l->fixp->fx_next->fx_offset)
+ continue;
+
+ /* Look through the fixups for this segment for a matching
+ `low'. When we find one, move the high just in front of it.
+ We do this in two passes. In the first pass, we try to find
+ a unique `low'. In the second pass, we permit multiple
+ high's relocs for a single `low'. */
+ seginfo = seg_info (l->seg);
+ for (pass = 0; pass < 2; pass++)
+ {
+ fixS * f;
+ fixS * prev;
+
+ prev = NULL;
+ for (f = seginfo->fix_root; f != NULL; f = f->fx_next)
+ {
+ /* Check whether this is a `low' fixup which matches l->fixp. */
+ if (FX_OPINFO_R_TYPE (f) == BFD_RELOC_LO16
+ && f->fx_addsy == l->fixp->fx_addsy
+ && f->fx_offset == l->fixp->fx_offset
+ && (pass == 1
+ || prev == NULL
+ || (FX_OPINFO_R_TYPE (prev) != BFD_RELOC_HI16)
+ || prev->fx_addsy != f->fx_addsy
+ || prev->fx_offset != f->fx_offset))
+ {
+ fixS ** pf;
+
+ /* Move l->fixp before f. */
+ for (pf = &seginfo->fix_root;
+ * pf != l->fixp;
+ pf = & (* pf)->fx_next)
+ assert (* pf != NULL);
+
+ * pf = l->fixp->fx_next;
+
+ l->fixp->fx_next = f;
+ if (prev == NULL)
+ seginfo->fix_root = l->fixp;
+ else
+ prev->fx_next = l->fixp;
+
+ break;
+ }
+
+ prev = f;
+ }
+
+ if (f != NULL)
+ break;
+
+ if (pass == 1)
+ as_warn_where (l->fixp->fx_file, l->fixp->fx_line,
+ _("Unmatched high relocation"));
+ }
+ }
+}
+
+/* See whether we need to force a relocation into the output file. */
+
+int
+mep_force_relocation (fixS *fixp)
+{
+ if ( fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
+ || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
+ return 1;
+
+ /* Allow branches to global symbols to be resolved at assembly time.
+ This is consistent with way relaxable branches are handled, since
+ branches to both global and local symbols are relaxed. It also
+ corresponds to the assumptions made in md_pcrel_from_section. */
+ return S_FORCE_RELOC (fixp->fx_addsy, !fixp->fx_pcrel);
+}
+
+/* Write a value out to the object file, using the appropriate endianness. */
+
+void
+md_number_to_chars (char *buf, valueT val, int n)
+{
+ if (target_big_endian)
+ number_to_chars_bigendian (buf, val, n);
+ else
+ number_to_chars_littleendian (buf, val, n);
+}
+
+/* Turn a string in input_line_pointer into a floating point constant
+ of type type, and store the appropriate bytes in *litP. The number
+ of LITTLENUMS emitted is stored in *sizeP . An error message is
+ returned, or NULL on OK. */
+
+/* Equal to MAX_PRECISION in atof-ieee.c */
+#define MAX_LITTLENUMS 6
+
+char *
+md_atof (int type, char *litP, int *sizeP)
+{
+ int i;
+ int prec;
+ LITTLENUM_TYPE words [MAX_LITTLENUMS];
+ char * t;
+
+ switch (type)
+ {
+ case 'f':
+ case 'F':
+ case 's':
+ case 'S':
+ prec = 2;
+ break;
+
+ case 'd':
+ case 'D':
+ case 'r':
+ case 'R':
+ prec = 4;
+ break;
+
+ /* FIXME: Some targets allow other format chars for bigger sizes here. */
+ default:
+ *sizeP = 0;
+ return _("Bad call to md_atof()");
+ }
+
+ t = atof_ieee (input_line_pointer, type, words);
+ if (t)
+ input_line_pointer = t;
+ * sizeP = prec * sizeof (LITTLENUM_TYPE);
+
+ for (i = 0; i < prec; i++)
+ {
+ md_number_to_chars (litP, (valueT) words[i],
+ sizeof (LITTLENUM_TYPE));
+ litP += sizeof (LITTLENUM_TYPE);
+ }
+
+ return 0;
+}
+
+
+bfd_boolean
+mep_fix_adjustable (fixS *fixP)
+{
+ bfd_reloc_code_real_type reloc_type;
+
+ if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED)
+ {
+ const CGEN_INSN *insn = NULL;
+ int opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED;
+ const CGEN_OPERAND *operand
+ = cgen_operand_lookup_by_num(gas_cgen_cpu_desc, opindex);
+ reloc_type = md_cgen_lookup_reloc (insn, operand, fixP);
+ }
+ else
+ reloc_type = fixP->fx_r_type;
+
+ if (fixP->fx_addsy == NULL)
+ return 1;
+
+ /* Prevent all adjustments to global symbols. */
+ if (S_IS_EXTERNAL (fixP->fx_addsy))
+ return 0;
+
+ if (S_IS_WEAK (fixP->fx_addsy))
+ return 0;
+
+ /* We need the symbol name for the VTABLE entries */
+ if (reloc_type == BFD_RELOC_VTABLE_INHERIT
+ || reloc_type == BFD_RELOC_VTABLE_ENTRY)
+ return 0;
+
+ return 1;
+}
+
+int
+mep_elf_section_letter (int letter, char **ptrmsg)
+{
+ if (letter == 'v')
+ return SHF_MEP_VLIW;
+
+ *ptrmsg = _("Bad .section directive: want a,v,w,x,M,S in string");
+ return 0;
+}
+
+flagword
+mep_elf_section_flags (flagword flags, int attr, int type ATTRIBUTE_UNUSED)
+{
+ if (attr & SHF_MEP_VLIW)
+ flags |= SEC_MEP_VLIW;
+ return flags;
+}
+
+/* In vliw mode, the default section is .vtext. We have to be able
+ to switch into .vtext using only the .vtext directive. */
+
+static segT
+mep_vtext_section (void)
+{
+ static segT vtext_section;
+
+ if (! vtext_section)
+ {
+ flagword applicable = bfd_applicable_section_flags (stdoutput);
+ vtext_section = subseg_new (VTEXT_SECTION_NAME, 0);
+ bfd_set_section_flags (stdoutput, vtext_section,
+ applicable & (SEC_ALLOC | SEC_LOAD | SEC_RELOC
+ | SEC_CODE | SEC_READONLY
+ | SEC_MEP_VLIW));
+ }
+
+ return vtext_section;
+}
+
+static void
+mep_s_vtext (int ignore ATTRIBUTE_UNUSED)
+{
+ int temp;
+
+ /* Record previous_section and previous_subsection. */
+ obj_elf_section_change_hook ();
+
+ temp = get_absolute_expression ();
+ subseg_set (mep_vtext_section (), (subsegT) temp);
+ demand_empty_rest_of_line ();
+}
+
+static void
+mep_switch_to_core_mode (int dummy ATTRIBUTE_UNUSED)
+{
+ mep_process_saved_insns ();
+ pluspresent = 0;
+ mode = CORE;
+}
+
+static void
+mep_switch_to_vliw_mode (int dummy ATTRIBUTE_UNUSED)
+{
+ if (! MEP_VLIW)
+ as_bad (_(".vliw unavailable when VLIW is disabled."));
+ mode = VLIW;
+ /* Switch into .vtext here too. */
+ /* mep_s_vtext(); */
+}
+
+/* This is an undocumented pseudo-op used to disable gas's
+ "disabled_registers" check. Used for code which checks for those
+ registers at runtime. */
+static void
+mep_noregerr (int i ATTRIBUTE_UNUSED)
+{
+ allow_disabled_registers = 1;
+}
+
+/* mep_unrecognized_line: This is called when a line that can't be parsed
+ is encountered. We use it to check for a leading '+' sign which indicates
+ that the current instruction is a coprocessor instruction that is to be
+ parallelized with a previous core insn. This function accepts the '+' and
+ rejects all other characters that might indicate garbage at the beginning
+ of the line. The '+' character gets lost as the calling loop continues,
+ so we need to indicate that we saw it. */
+
+int
+mep_unrecognized_line (int ch)
+{
+ switch (ch)
+ {
+ case '+':
+ pluspresent = 1;
+ return 1; /* '+' indicates an instruction to be parallelized. */
+ default:
+ return 0; /* If it's not a '+', the line can't be parsed. */
+ }
+}
+
+void
+mep_cleanup (void)
+{
+ /* Take care of any insns left to be parallelized when the file ends.
+ This is mainly here to handle the case where the file ends with an
+ insn preceeded by a + or the file ends unexpectedly. */
+ if (mode == VLIW)
+ mep_process_saved_insns ();
+}
+
+int
+mep_flush_pending_output (void)
+{
+ if (mode == VLIW)
+ {
+ mep_process_saved_insns ();
+ pluspresent = 0;
+ }
+
+ return 1;
+}
diff --git a/gas/config/tc-mep.h b/gas/config/tc-mep.h
new file mode 100644
index 0000000000..1d48bd4c9a
--- /dev/null
+++ b/gas/config/tc-mep.h
@@ -0,0 +1,119 @@
+/* tc-mep.h -- Header file for tc-mep.c.
+ Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#define TC_MEP
+
+/* Support computed relocations. */
+#define OBJ_COMPLEX_RELC
+
+/* Support many operands per instruction. */
+#define GAS_CGEN_MAX_FIXUPS 10
+
+#define LISTING_HEADER "MEP GAS "
+
+/* The target BFD architecture. */
+#define TARGET_ARCH bfd_arch_mep
+
+#define TARGET_FORMAT (target_big_endian ? "elf32-mep" : "elf32-mep-little")
+
+/* This is the default. */
+#define TARGET_BYTES_BIG_ENDIAN 1
+
+/* Permit temporary numeric labels. */
+#define LOCAL_LABELS_FB 1
+
+/* .-foo gets turned into PC relative relocs. */
+#define DIFF_EXPR_OK
+
+/* We don't need to handle .word strangely. */
+#define WORKING_DOT_WORD
+
+/* Values passed to md_apply_fix don't include the symbol value. */
+#define MD_APPLY_SYM_VALUE(FIX) 0
+
+#define MD_APPLY_FIX
+#define md_apply_fix mep_apply_fix
+extern void mep_apply_fix (struct fix *, valueT *, segT);
+
+/* Call md_pcrel_from_section(), not md_pcrel_from(). */
+#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC)
+extern long md_pcrel_from_section (struct fix *, segT);
+
+#define tc_frob_file() mep_frob_file ()
+extern void mep_frob_file (void);
+
+#define tc_fix_adjustable(fixP) mep_fix_adjustable (fixP)
+extern bfd_boolean mep_fix_adjustable (struct fix *);
+
+/* After creating a fixup for an instruction operand, we need
+ to check for HI16 relocs and queue them up for later sorting. */
+#define md_cgen_record_fixup_exp mep_cgen_record_fixup_exp
+
+/* When relaxing, we need to emit various relocs we otherwise wouldn't. */
+#define TC_FORCE_RELOCATION(fix) mep_force_relocation (fix)
+extern int mep_force_relocation (struct fix *);
+
+#define tc_gen_reloc gas_cgen_tc_gen_reloc
+
+extern void gas_cgen_md_operand (expressionS *);
+#define md_operand(x) gas_cgen_md_operand (x)
+
+#define md_flush_pending_output() mep_flush_pending_output()
+extern int mep_flush_pending_output(void);
+
+extern const struct relax_type md_relax_table[];
+#define TC_GENERIC_RELAX_TABLE md_relax_table
+
+/* Account for inserting a jmp after the insn. */
+#define TC_CGEN_MAX_RELAX(insn, len) ((len) + 4)
+
+extern void mep_prepare_relax_scan (fragS *, offsetT *, relax_substateT);
+#define md_prepare_relax_scan(FRAGP, ADDR, AIM, STATE, TYPE) \
+ mep_prepare_relax_scan (FRAGP, &AIM, STATE)
+
+#define skip_whitespace(str) while (*(str) == ' ') ++(str)
+
+/* Support for core/vliw mode switching. */
+#define CORE 0
+#define VLIW 1
+#define MAX_PARALLEL_INSNS 56 /* From email from Toshiba. */
+#define VTEXT_SECTION_NAME ".vtext"
+
+/* Needed to process pending instructions when a label is encountered. */
+#define TC_START_LABEL(ch, ptr) ((ch == ':') && mep_flush_pending_output ())
+
+#define tc_unrecognized_line(c) mep_unrecognized_line (c)
+extern int mep_unrecognized_line (int);
+#define md_cleanup mep_cleanup
+extern void mep_cleanup (void);
+
+#define md_elf_section_letter mep_elf_section_letter
+extern int mep_elf_section_letter (int, char **);
+#define md_elf_section_flags mep_elf_section_flags
+extern flagword mep_elf_section_flags (flagword, int, int);
+
+#define ELF_TC_SPECIAL_SECTIONS \
+ { VTEXT_SECTION_NAME, SHT_PROGBITS, SHF_ALLOC|SHF_EXECINSTR|SHF_MEP_VLIW },
+
+/* The values of the following enum are for use with parinsnum, which
+ is a variable in md_assemble that keeps track of whether or not the
+ next instruction is expected to be the first or second instrucion in
+ a parallelization group. */
+typedef enum exp_par_insn_{FIRST, SECOND} EXP_PAR_INSN;
diff --git a/gas/configure b/gas/configure
index 6f45a0e3e2..6f9b7b80e2 100755
--- a/gas/configure
+++ b/gas/configure
@@ -4778,6 +4778,10 @@ _ACEOF
esac
;;
+ mep)
+ using_cgen=yes
+ ;;
+
mips)
echo ${extra_objects} | grep -s "itbl-parse.o"
if test $? -ne 0 ; then
diff --git a/gas/configure.in b/gas/configure.in
index 751b21a7e2..6b35bf17d4 100644
--- a/gas/configure.in
+++ b/gas/configure.in
@@ -304,6 +304,10 @@ changequote([,])dnl
esac
;;
+ mep)
+ using_cgen=yes
+ ;;
+
mips)
echo ${extra_objects} | grep -s "itbl-parse.o"
if test $? -ne 0 ; then
diff --git a/gas/configure.tgt b/gas/configure.tgt
index 8650dac780..74f08527c4 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -52,6 +52,7 @@ case ${cpu} in
m6811|m6812|m68hc12) cpu_type=m68hc11 ;;
m683??) cpu_type=m68k ;;
maxq) cpu_type=maxq ;;
+ mep-*-elf) cpu_type=mep endian=big ;;
mips*el) cpu_type=mips endian=little ;;
mips*) cpu_type=mips endian=big ;;
mt) cpu_type=mt endian=big ;;
@@ -257,6 +258,8 @@ case ${generic_target} in
maxq-*-coff) fmt=coff bfd_gas=yes ;;
+ mep-*-elf) fmt=elf ;;
+
mcore-*-elf) fmt=elf ;;
mcore-*-pe) fmt=coff em=pe bfd_gas=yes ;;
diff --git a/gas/symbols.c b/gas/symbols.c
index 41fabc5df0..8943af3c11 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -881,6 +881,69 @@ verify_symbol_chain (symbolS *rootP, symbolS *lastP)
assert (lastP == symbolP);
}
+#ifdef OBJ_COMPLEX_RELC
+
+static int
+use_complex_relocs_for (symbolS * symp)
+{
+ switch (symp->sy_value.X_op)
+ {
+ case O_constant:
+ return 0;
+
+ case O_symbol:
+ case O_symbol_rva:
+ case O_uminus:
+ case O_bit_not:
+ case O_logical_not:
+ if ( (S_IS_COMMON (symp->sy_value.X_add_symbol)
+ || S_IS_LOCAL (symp->sy_value.X_add_symbol))
+ &&
+ (S_IS_DEFINED (symp->sy_value.X_add_symbol)
+ && S_GET_SEGMENT (symp->sy_value.X_add_symbol) != expr_section))
+ return 0;
+ break;
+
+ case O_multiply:
+ case O_divide:
+ case O_modulus:
+ case O_left_shift:
+ case O_right_shift:
+ case O_bit_inclusive_or:
+ case O_bit_or_not:
+ case O_bit_exclusive_or:
+ case O_bit_and:
+ case O_add:
+ case O_subtract:
+ case O_eq:
+ case O_ne:
+ case O_lt:
+ case O_le:
+ case O_ge:
+ case O_gt:
+ case O_logical_and:
+ case O_logical_or:
+
+ if ( (S_IS_COMMON (symp->sy_value.X_add_symbol)
+ || S_IS_LOCAL (symp->sy_value.X_add_symbol))
+ &&
+ (S_IS_COMMON (symp->sy_value.X_op_symbol)
+ || S_IS_LOCAL (symp->sy_value.X_op_symbol))
+
+ && S_IS_DEFINED (symp->sy_value.X_add_symbol)
+ && S_IS_DEFINED (symp->sy_value.X_op_symbol)
+ && S_GET_SEGMENT (symp->sy_value.X_add_symbol) != expr_section
+ && S_GET_SEGMENT (symp->sy_value.X_op_symbol) != expr_section)
+ return 0;
+ break;
+
+ default:
+ break;
+ }
+ return 1;
+}
+#endif
+
static void
report_op_error (symbolS *symp, symbolS *left, symbolS *right)
{
@@ -983,6 +1046,53 @@ resolve_symbol_value (symbolS *symp)
final_val = 0;
resolved = 1;
}
+#ifdef OBJ_COMPLEX_RELC
+ else if (final_seg == expr_section
+ && use_complex_relocs_for (symp))
+ {
+ symbolS * relc_symbol = NULL;
+ char * relc_symbol_name = NULL;
+
+ relc_symbol_name = symbol_relc_make_expr (& symp->sy_value);
+
+ /* For debugging, print out conversion input & output. */
+#ifdef DEBUG_SYMS
+ print_expr (& symp->sy_value);
+ if (relc_symbol_name)
+ fprintf (stderr, "-> relc symbol: %s\n", relc_symbol_name);
+#endif
+
+ if (relc_symbol_name != NULL)
+ relc_symbol = symbol_new (relc_symbol_name, undefined_section,
+ 0, & zero_address_frag);
+
+ if (relc_symbol == NULL)
+ {
+ as_bad (_("cannot convert expression symbol %s to complex relocation"),
+ S_GET_NAME (symp));
+ resolved = 0;
+ }
+ else
+ {
+ symbol_table_insert (relc_symbol);
+
+ /* S_CLEAR_EXTERNAL (relc_symbol); */
+ if (symp->bsym->flags & BSF_SRELC)
+ relc_symbol->bsym->flags |= BSF_SRELC;
+ else
+ relc_symbol->bsym->flags |= BSF_RELC;
+ /* symp->bsym->flags |= BSF_RELC; */
+ copy_symbol_attributes (symp, relc_symbol);
+ symp->sy_value.X_op = O_symbol;
+ symp->sy_value.X_add_symbol = relc_symbol;
+ symp->sy_value.X_add_number = 0;
+ resolved = 1;
+ }
+
+ final_seg = undefined_section;
+ goto exit_dont_set_value;
+ }
+#endif
else
{
symbolS *add_symbol, *op_symbol;
@@ -2827,3 +2937,219 @@ symbol_print_statistics (FILE *file)
fprintf (file, "%lu mini local symbols created, %lu converted\n",
local_symbol_count, local_symbol_conversion_count);
}
+
+#ifdef OBJ_COMPLEX_RELC
+
+/* Convert given symbol to a new complex-relocation symbol name. This
+ may bee a recursive function, since it might be called for non-leaf
+ nodes (plain symbols) in the expression tree. The caller owns the
+ returning string, so should free() it eventually. Errors are
+ indicated via as_bad() and a NULL return value. The given symbol
+ is marked with sy_used_in_reloc. */
+
+char *
+symbol_relc_make_sym (symbolS * sym)
+{
+ char * terminal = NULL;
+ const char * sname;
+ char typetag;
+ int sname_len;
+
+ assert (sym != NULL);
+
+ /* Recurse to symbol_relc_make_expr if this symbol
+ is defined as an expression or a plain value. */
+ if ( S_GET_SEGMENT (sym) == expr_section
+ || S_GET_SEGMENT (sym) == absolute_section)
+ return symbol_relc_make_expr (& sym->sy_value);
+
+ /* This may be a "fake symbol" L0\001, referring to ".".
+ Write out a special null symbol to refer to this position. */
+ if (! strcmp (S_GET_NAME (sym), FAKE_LABEL_NAME))
+ return xstrdup (".");
+
+ /* We hope this is a plain leaf symbol. Construct the encoding
+ as {S,s}II...:CCCCCCC....
+ where 'S'/'s' means section symbol / plain symbol
+ III is decimal for the symbol name length
+ CCC is the symbol name itself. */
+ symbol_mark_used_in_reloc (sym);
+
+ sname = S_GET_NAME (sym);
+ sname_len = strlen (sname);
+ typetag = symbol_section_p (sym) ? 'S' : 's';
+
+ terminal = xmalloc (1 /* S or s */
+ + 8 /* sname_len in decimal */
+ + 1 /* _ spacer */
+ + sname_len /* name itself */
+ + 1 /* \0 */ );
+
+ sprintf (terminal, "%c%d:%s", typetag, sname_len, sname);
+ return terminal;
+}
+
+/* Convert given value to a new complex-relocation symbol name. This
+ is a non-recursive function, since it is be called for leaf nodes
+ (plain values) in the expression tree. The caller owns the
+ returning string, so should free() it eventually. No errors. */
+
+char *
+symbol_relc_make_value (offsetT val)
+{
+ char * terminal = xmalloc (28); /* Enough for long long. */
+
+ terminal[0] = '#';
+ sprintf_vma (& terminal[1], val);
+ return terminal;
+}
+
+/* Convert given expression to a new complex-relocation symbol name.
+ This is a recursive function, since it traverses the entire given
+ expression tree. The caller owns the returning string, so should
+ free() it eventually. Errors are indicated via as_bad() and a NULL
+ return value. */
+
+char *
+symbol_relc_make_expr (expressionS * exp)
+{
+ char * opstr = NULL; /* Operator prefix string. */
+ int arity = 0; /* Arity of this operator. */
+ char * operands[3]; /* Up to three operands. */
+ char * concat_string = NULL;
+
+ operands[0] = operands[1] = operands[2] = NULL;
+
+ assert (exp != NULL);
+
+ /* Match known operators -> fill in opstr, arity, operands[] and fall
+ through to construct subexpression fragments; may instead return
+ string directly for leaf nodes. */
+
+ /* See expr.h for the meaning of all these enums. Many operators
+ have an unnatural arity (X_add_number implicitly added). The
+ conversion logic expands them to explicit "+" subexpressions. */
+
+ switch (exp->X_op)
+ {
+ default:
+ as_bad ("Unknown expression operator (enum %d)", exp->X_op);
+ break;
+
+ /* Leaf nodes. */
+ case O_constant:
+ return symbol_relc_make_value (exp->X_add_number);
+
+ case O_symbol:
+ if (exp->X_add_number)
+ {
+ arity = 2;
+ opstr = "+";
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol);
+ operands[1] = symbol_relc_make_value (exp->X_add_number);
+ break;
+ }
+ else
+ return symbol_relc_make_sym (exp->X_add_symbol);
+
+ /* Helper macros for nesting nodes. */
+
+#define HANDLE_XADD_OPT1(str_) \
+ if (exp->X_add_number) \
+ { \
+ arity = 2; \
+ opstr = "+:" str_; \
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
+ operands[1] = symbol_relc_make_value (exp->X_add_number); \
+ break; \
+ } \
+ else \
+ { \
+ arity = 1; \
+ opstr = str_; \
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
+ } \
+ break
+
+#define HANDLE_XADD_OPT2(str_) \
+ if (exp->X_add_number) \
+ { \
+ arity = 3; \
+ opstr = "+:" str_; \
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
+ operands[1] = symbol_relc_make_sym (exp->X_op_symbol); \
+ operands[2] = symbol_relc_make_value (exp->X_add_number); \
+ } \
+ else \
+ { \
+ arity = 2; \
+ opstr = str_; \
+ operands[0] = symbol_relc_make_sym (exp->X_add_symbol); \
+ operands[1] = symbol_relc_make_sym (exp->X_op_symbol); \
+ } \
+ break
+
+ /* Nesting nodes. */
+
+ case O_uminus: HANDLE_XADD_OPT1 ("0-");
+ case O_bit_not: HANDLE_XADD_OPT1 ("~");
+ case O_logical_not: HANDLE_XADD_OPT1 ("!");
+ case O_multiply: HANDLE_XADD_OPT2 ("*");
+ case O_divide: HANDLE_XADD_OPT2 ("/");
+ case O_modulus: HANDLE_XADD_OPT2 ("%");
+ case O_left_shift: HANDLE_XADD_OPT2 ("<<");
+ case O_right_shift: HANDLE_XADD_OPT2 (">>");
+ case O_bit_inclusive_or: HANDLE_XADD_OPT2 ("|");
+ case O_bit_exclusive_or: HANDLE_XADD_OPT2 ("^");
+ case O_bit_and: HANDLE_XADD_OPT2 ("&");
+ case O_add: HANDLE_XADD_OPT2 ("+");
+ case O_subtract: HANDLE_XADD_OPT2 ("-");
+ case O_eq: HANDLE_XADD_OPT2 ("==");
+ case O_ne: HANDLE_XADD_OPT2 ("!=");
+ case O_lt: HANDLE_XADD_OPT2 ("<");
+ case O_le: HANDLE_XADD_OPT2 ("<=");
+ case O_ge: HANDLE_XADD_OPT2 (">=");
+ case O_gt: HANDLE_XADD_OPT2 (">");
+ case O_logical_and: HANDLE_XADD_OPT2 ("&&");
+ case O_logical_or: HANDLE_XADD_OPT2 ("||");
+ }
+
+ /* Validate & reject early. */
+ if (arity >= 1 && ((operands[0] == NULL) || (strlen (operands[0]) == 0)))
+ opstr = NULL;
+ if (arity >= 2 && ((operands[1] == NULL) || (strlen (operands[1]) == 0)))
+ opstr = NULL;
+ if (arity >= 3 && ((operands[2] == NULL) || (strlen (operands[2]) == 0)))
+ opstr = NULL;
+
+ if (opstr == NULL)
+ concat_string = NULL;
+ else
+ {
+ /* Allocate new string; include inter-operand padding gaps etc. */
+ concat_string = xmalloc (strlen (opstr)
+ + 1
+ + (arity >= 1 ? (strlen (operands[0]) + 1 ) : 0)
+ + (arity >= 2 ? (strlen (operands[1]) + 1 ) : 0)
+ + (arity >= 3 ? (strlen (operands[2]) + 0 ) : 0)
+ + 1);
+ assert (concat_string != NULL);
+
+ /* Format the thing. */
+ sprintf (concat_string,
+ (arity == 0 ? "%s" :
+ arity == 1 ? "%s:%s" :
+ arity == 2 ? "%s:%s:%s" :
+ /* arity == 3 */ "%s:%s:%s:%s"),
+ opstr, operands[0], operands[1], operands[2]);
+ }
+
+ /* Free operand strings (not opstr). */
+ if (arity >= 1) xfree (operands[0]);
+ if (arity >= 2) xfree (operands[1]);
+ if (arity >= 3) xfree (operands[2]);
+
+ return concat_string;
+}
+
+#endif
diff --git a/gas/symbols.h b/gas/symbols.h
index 0527abbb91..483f8ee089 100644
--- a/gas/symbols.h
+++ b/gas/symbols.h
@@ -35,6 +35,9 @@ extern int symbol_table_frozen;
default. */
extern int symbols_case_sensitive;
+char * symbol_relc_make_expr (expressionS *);
+char * symbol_relc_make_sym (symbolS *);
+char * symbol_relc_make_value (offsetT);
char *decode_local_label_name (char *s);
symbolS *symbol_find (const char *name);
symbolS *symbol_find_noref (const char *name, int noref);
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index e587314f33..b52d8e7668 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-02-05 Dave Brolley <brolley@redhat.com>
+
+ * gas/mep/relocs-junk1.s: Add a .data section.
+ * gas/mep/relocs.d: Updated to match above.
+
2007-02-04 H.J. Lu <hongjiu.lu@intel.com>
PR gas/3961
diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp
index 294d091818..397a0bb585 100644
--- a/gas/testsuite/gas/all/gas.exp
+++ b/gas/testsuite/gas/all/gas.exp
@@ -16,7 +16,10 @@ gas_test "p2425.s" "" "" "pcrel values in assignment"
# The ".space" directive is taken care of in the C54x-specific tests, so fail
# here
#
-if { [istarget hppa*-*-*] || [istarget *c54x*-*-*] } then {
+# The test also doesn't work on mep targets, since they use RELC, and it
+# will avoid simplifying the expression since it conservatively assumes
+# ugly expressions can be saved until link-time.
+if { [istarget hppa*-*-*] || [istarget *c54x*-*-*] || [istarget mep*-*-*]} then {
setup_xfail *-*-*
fail "simplifiable double subtraction"
} else {
diff --git a/gas/testsuite/gas/mep/allinsn.d b/gas/testsuite/gas/mep/allinsn.d
new file mode 100644
index 0000000000..3a1f62c306
--- /dev/null
+++ b/gas/testsuite/gas/mep/allinsn.d
@@ -0,0 +1,1345 @@
+#as:
+#objdump: -dr
+#name: allinsn
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <sb>:
+ 0: 07 88 sb \$7,\(\$8\)
+ 2: 05 98 sb \$5,\(\$9\)
+ 4: 07 e8 sb \$7,\(\$gp\)
+ 6: 0e 88 sb \$gp,\(\$8\)
+ 8: 0f e8 sb \$sp,\(\$gp\)
+
+0000000a <sh>:
+ a: 03 89 sh \$3,\(\$8\)
+ c: 0c 19 sh \$12,\(\$1\)
+ e: 0d 29 sh \$tp,\(\$2\)
+ 10: 02 89 sh \$2,\(\$8\)
+ 12: 0c a9 sh \$12,\(\$10\)
+
+00000014 <sw>:
+ 14: 0b 0a sw \$11,\(\$0\)
+ 16: 03 7a sw \$3,\(\$7\)
+ 18: 0d ea sw \$tp,\(\$gp\)
+ 1a: 08 9a sw \$8,\(\$9\)
+ 1c: 0e 8a sw \$gp,\(\$8\)
+
+0000001e <lb>:
+ 1e: 0c bc lb \$12,\(\$11\)
+ 20: 09 2c lb \$9,\(\$2\)
+ 22: 08 bc lb \$8,\(\$11\)
+ 24: 0e 2c lb \$gp,\(\$2\)
+ 26: 02 cc lb \$2,\(\$12\)
+
+00000028 <lh>:
+ 28: 0f 8d lh \$sp,\(\$8\)
+ 2a: 03 ad lh \$3,\(\$10\)
+ 2c: 09 fd lh \$9,\(\$sp\)
+ 2e: 06 fd lh \$6,\(\$sp\)
+ 30: 0f bd lh \$sp,\(\$11\)
+
+00000032 <lw>:
+ 32: 0c ae lw \$12,\(\$10\)
+ 34: 09 de lw \$9,\(\$tp\)
+ 36: 0c ee lw \$12,\(\$gp\)
+ 38: 0c be lw \$12,\(\$11\)
+ 3a: 0d ae lw \$tp,\(\$10\)
+
+0000003c <lbu>:
+ 3c: 0e eb lbu \$gp,\(\$gp\)
+ 3e: 0c 8b lbu \$12,\(\$8\)
+ 40: 0e 1b lbu \$gp,\(\$1\)
+ 42: 08 cb lbu \$8,\(\$12\)
+ 44: 0c 1b lbu \$12,\(\$1\)
+
+00000046 <lhu>:
+ 46: 0f 4f lhu \$sp,\(\$4\)
+ 48: 0e 4f lhu \$gp,\(\$4\)
+ 4a: 05 4f lhu \$5,\(\$4\)
+ 4c: 0f df lhu \$sp,\(\$tp\)
+ 4e: 04 ff lhu \$4,\(\$sp\)
+
+00000050 <sw_sp>:
+ 50: c9 8a 00 03 sw \$9,3\(\$8\)
+ 54: ca 5a 00 04 sw \$10,4\(\$5\)
+ 58: c0 ea 00 03 sw \$0,3\(\$gp\)
+ 5c: c0 8a 00 02 sw \$0,2\(\$8\)
+ 60: cf 8a 00 01 sw \$sp,1\(\$8\)
+
+00000064 <lw_sp>:
+ 64: cd 5e 00 01 lw \$tp,1\(\$5\)
+ 68: cf 0e 00 01 lw \$sp,1\(\$0\)
+ 6c: c0 ce 00 04 lw \$0,4\(\$12\)
+ 70: cb de 00 01 lw \$11,1\(\$tp\)
+ 74: c9 4e 00 03 lw \$9,3\(\$4\)
+
+00000078 <sb_tp>:
+ 78: c5 18 00 01 sb \$5,1\(\$1\)
+ 7c: ca 98 00 01 sb \$10,1\(\$9\)
+ 80: c5 38 00 03 sb \$5,3\(\$3\)
+ 84: c5 38 00 01 sb \$5,1\(\$3\)
+ 88: ca 48 00 04 sb \$10,4\(\$4\)
+
+0000008c <sh_tp>:
+ 8c: c3 09 00 01 sh \$3,1\(\$0\)
+ 90: cd 99 00 01 sh \$tp,1\(\$9\)
+ 94: c9 a9 00 04 sh \$9,4\(\$10\)
+ 98: cf e9 00 03 sh \$sp,3\(\$gp\)
+ 9c: ce 99 00 04 sh \$gp,4\(\$9\)
+
+000000a0 <sw_tp>:
+ a0: c6 da 00 02 sw \$6,2\(\$tp\)
+ a4: c6 fa 00 01 sw \$6,1\(\$sp\)
+ a8: c2 3a 00 02 sw \$2,2\(\$3\)
+ ac: c6 ca 00 02 sw \$6,2\(\$12\)
+ b0: c3 ba 00 01 sw \$3,1\(\$11\)
+
+000000b4 <lb_tp>:
+ b4: cd bc 00 04 lb \$tp,4\(\$11\)
+ b8: cd 8c 00 04 lb \$tp,4\(\$8\)
+ bc: c5 5c 00 04 lb \$5,4\(\$5\)
+ c0: cf ec 00 02 lb \$sp,2\(\$gp\)
+ c4: c3 3c 00 02 lb \$3,2\(\$3\)
+
+000000c8 <lh_tp>:
+ c8: c7 8d 00 02 lh \$7,2\(\$8\)
+ cc: c4 8d 00 03 lh \$4,3\(\$8\)
+ d0: ce fd 00 01 lh \$gp,1\(\$sp\)
+ d4: c9 0d 00 01 lh \$9,1\(\$0\)
+ d8: cd 0d 00 02 lh \$tp,2\(\$0\)
+
+000000dc <lw_tp>:
+ dc: 48 07 lw \$8,0x4\(\$sp\)
+ de: cb 9e 00 04 lw \$11,4\(\$9\)
+ e2: ce 2e 00 01 lw \$gp,1\(\$2\)
+ e6: c9 ee 00 02 lw \$9,2\(\$gp\)
+ ea: c8 ce 00 01 lw \$8,1\(\$12\)
+
+000000ee <lbu_tp>:
+ ee: cc 9b 00 01 lbu \$12,1\(\$9\)
+ f2: cb 9b 00 01 lbu \$11,1\(\$9\)
+ f6: ce 8b 00 03 lbu \$gp,3\(\$8\)
+ fa: c0 fb 00 02 lbu \$0,2\(\$sp\)
+ fe: cd bb 00 01 lbu \$tp,1\(\$11\)
+
+00000102 <lhu_tp>:
+ 102: ce af 00 02 lhu \$gp,2\(\$10\)
+ 106: cb 8f 00 01 lhu \$11,1\(\$8\)
+ 10a: c1 0f 00 01 lhu \$1,1\(\$0\)
+ 10e: c7 ff 00 02 lhu \$7,2\(\$sp\)
+ 112: 8b 83 lhu \$3,0x2\(\$tp\)
+
+00000114 <sb16>:
+ 114: c7 b8 ff ff sb \$7,-1\(\$11\)
+ 118: cd e8 00 01 sb \$tp,1\(\$gp\)
+ 11c: c3 e8 00 01 sb \$3,1\(\$gp\)
+ 120: ce 68 00 02 sb \$gp,2\(\$6\)
+ 124: ce 78 00 01 sb \$gp,1\(\$7\)
+
+00000128 <sh16>:
+ 128: cc 49 ff ff sh \$12,-1\(\$4\)
+ 12c: cf 19 00 01 sh \$sp,1\(\$1\)
+ 130: c2 c9 ff fe sh \$2,-2\(\$12\)
+ 134: c9 b9 00 02 sh \$9,2\(\$11\)
+ 138: c9 c9 ff fe sh \$9,-2\(\$12\)
+
+0000013c <sw16>:
+ 13c: cb ea ff ff sw \$11,-1\(\$gp\)
+ 140: 44 06 sw \$4,0x4\(\$sp\)
+ 142: c2 3a ff fe sw \$2,-2\(\$3\)
+ 146: c6 2a ff ff sw \$6,-1\(\$2\)
+ 14a: c8 da ff fe sw \$8,-2\(\$tp\)
+
+0000014e <lb16>:
+ 14e: ca 2c ff fe lb \$10,-2\(\$2\)
+ 152: c3 bc ff fe lb \$3,-2\(\$11\)
+ 156: cc 5c 00 01 lb \$12,1\(\$5\)
+ 15a: c5 5c 00 01 lb \$5,1\(\$5\)
+ 15e: cb dc 00 02 lb \$11,2\(\$tp\)
+
+00000162 <lh16>:
+ 162: cf bd ff ff lh \$sp,-1\(\$11\)
+ 166: cd bd ff fe lh \$tp,-2\(\$11\)
+ 16a: c2 ad 00 01 lh \$2,1\(\$10\)
+ 16e: c8 7d ff ff lh \$8,-1\(\$7\)
+ 172: ce bd ff ff lh \$gp,-1\(\$11\)
+
+00000176 <lw16>:
+ 176: c0 5e ff ff lw \$0,-1\(\$5\)
+ 17a: cc 7e ff fe lw \$12,-2\(\$7\)
+ 17e: c1 3e ff fe lw \$1,-2\(\$3\)
+ 182: c1 7e 00 02 lw \$1,2\(\$7\)
+ 186: c4 8e 00 01 lw \$4,1\(\$8\)
+
+0000018a <lbu16>:
+ 18a: cc 4b ff ff lbu \$12,-1\(\$4\)
+ 18e: ce bb 00 01 lbu \$gp,1\(\$11\)
+ 192: c1 db ff ff lbu \$1,-1\(\$tp\)
+ 196: c9 db ff ff lbu \$9,-1\(\$tp\)
+ 19a: c8 fb 00 01 lbu \$8,1\(\$sp\)
+
+0000019e <lhu16>:
+ 19e: cd ff ff ff lhu \$tp,-1\(\$sp\)
+ 1a2: ce 8f 00 02 lhu \$gp,2\(\$8\)
+ 1a6: cf cf ff ff lhu \$sp,-1\(\$12\)
+ 1aa: c3 0f ff ff lhu \$3,-1\(\$0\)
+ 1ae: c3 cf ff fe lhu \$3,-2\(\$12\)
+
+000001b2 <sw24>:
+ 1b2: eb 06 00 00 sw \$11,\(0x4\)
+ 1b6: ef 06 00 00 sw \$sp,\(0x4\)
+ 1ba: e7 0a 00 00 sw \$7,\(0x8\)
+ 1be: ea 12 00 00 sw \$10,\(0x10\)
+ 1c2: e8 a2 00 00 sw \$8,\(0xa0\)
+
+000001c6 <lw24>:
+ 1c6: e4 07 00 00 lw \$4,\(0x4\)
+ 1ca: ef 07 00 00 lw \$sp,\(0x4\)
+ 1ce: e4 13 00 00 lw \$4,\(0x10\)
+ 1d2: e8 03 00 00 lw \$8,\(0x0\)
+ 1d6: ed 0b 00 00 lw \$tp,\(0x8\)
+
+000001da <extb>:
+ 1da: 1d 0d extb \$tp
+ 1dc: 1d 0d extb \$tp
+ 1de: 16 0d extb \$6
+ 1e0: 1e 0d extb \$gp
+ 1e2: 1a 0d extb \$10
+
+000001e4 <exth>:
+ 1e4: 1f 2d exth \$sp
+ 1e6: 12 2d exth \$2
+ 1e8: 15 2d exth \$5
+ 1ea: 1a 2d exth \$10
+ 1ec: 14 2d exth \$4
+
+000001ee <extub>:
+ 1ee: 12 8d extub \$2
+ 1f0: 1d 8d extub \$tp
+ 1f2: 13 8d extub \$3
+ 1f4: 19 8d extub \$9
+ 1f6: 1e 8d extub \$gp
+
+000001f8 <extuh>:
+ 1f8: 18 ad extuh \$8
+ 1fa: 18 ad extuh \$8
+ 1fc: 14 ad extuh \$4
+ 1fe: 10 ad extuh \$0
+ 200: 10 ad extuh \$0
+
+00000202 <ssarb>:
+ 202: 12 8c ssarb 2\(\$8\)
+ 204: 12 dc ssarb 2\(\$tp\)
+ 206: 11 dc ssarb 1\(\$tp\)
+ 208: 12 5c ssarb 2\(\$5\)
+ 20a: 10 9c ssarb 0\(\$9\)
+
+0000020c <mov>:
+ 20c: 02 30 mov \$2,\$3
+ 20e: 03 b0 mov \$3,\$11
+ 210: 0f a0 mov \$sp,\$10
+ 212: 0f 00 mov \$sp,\$0
+ 214: 03 d0 mov \$3,\$tp
+
+00000216 <movi8>:
+ 216: 5b ff mov \$11,-1
+ 218: 56 02 mov \$6,2
+ 21a: 5f ff mov \$sp,-1
+ 21c: 5f 01 mov \$sp,1
+ 21e: 5e ff mov \$gp,-1
+
+00000220 <movi16>:
+ 220: 5f 00 mov \$sp,0
+ 222: 50 02 mov \$0,2
+ 224: 58 ff mov \$8,-1
+ 226: 5c 01 mov \$12,1
+ 228: 57 ff mov \$7,-1
+
+0000022a <movu24>:
+ 22a: d2 01 00 00 movu \$2,0x1
+ 22e: ca 11 00 04 movu \$10,0x4
+ 232: c9 11 00 00 movu \$9,0x0
+ 236: d4 03 00 00 movu \$4,0x3
+ 23a: ce 11 00 01 movu \$gp,0x1
+
+0000023e <movu16>:
+ 23e: cf 11 00 01 movu \$sp,0x1
+ 242: d6 03 00 00 movu \$6,0x3
+ 246: d0 03 00 00 movu \$0,0x3
+ 24a: ce 11 00 03 movu \$gp,0x3
+ 24e: ca 11 00 02 movu \$10,0x2
+
+00000252 <movh>:
+ 252: c8 21 00 02 movh \$8,0x2
+ 256: cd 21 00 01 movh \$tp,0x1
+ 25a: ce 21 00 02 movh \$gp,0x2
+ 25e: cc 21 00 00 movh \$12,0x0
+ 262: cb 21 00 02 movh \$11,0x2
+
+00000266 <add3>:
+ 266: 9b 36 add3 \$6,\$11,\$3
+ 268: 9d 5e add3 \$gp,\$tp,\$5
+ 26a: 9b 73 add3 \$3,\$11,\$7
+ 26c: 9e dd add3 \$tp,\$gp,\$tp
+ 26e: 9e 80 add3 \$0,\$gp,\$8
+
+00000270 <add>:
+ 270: 6c 08 add \$12,2
+ 272: 6c fc add \$12,-1
+ 274: 64 04 add \$4,1
+ 276: 66 04 add \$6,1
+ 278: 66 08 add \$6,2
+
+0000027a <add3i>:
+ 27a: 4b 04 add3 \$11,\$sp,0x4
+ 27c: c4 f0 00 01 add3 \$4,\$sp,1
+ 280: 40 00 add3 \$0,\$sp,0x0
+ 282: cd f0 00 03 add3 \$tp,\$sp,3
+ 286: 4b 00 add3 \$11,\$sp,0x0
+
+00000288 <advck3>:
+ 288: 0e a7 advck3 \$0,\$gp,\$10
+ 28a: 0d 07 advck3 \$0,\$tp,\$0
+ 28c: 0e d7 advck3 \$0,\$gp,\$tp
+ 28e: 07 87 advck3 \$0,\$7,\$8
+ 290: 01 27 advck3 \$0,\$1,\$2
+
+00000292 <sub>:
+ 292: 08 e4 sub \$8,\$gp
+ 294: 01 94 sub \$1,\$9
+ 296: 0d 74 sub \$tp,\$7
+ 298: 0f 34 sub \$sp,\$3
+ 29a: 02 74 sub \$2,\$7
+
+0000029c <sbvck3>:
+ 29c: 03 e5 sbvck3 \$0,\$3,\$gp
+ 29e: 03 75 sbvck3 \$0,\$3,\$7
+ 2a0: 0a a5 sbvck3 \$0,\$10,\$10
+ 2a2: 04 d5 sbvck3 \$0,\$4,\$tp
+ 2a4: 0a f5 sbvck3 \$0,\$10,\$sp
+
+000002a6 <neg>:
+ 2a6: 0e 71 neg \$gp,\$7
+ 2a8: 01 71 neg \$1,\$7
+ 2aa: 02 b1 neg \$2,\$11
+ 2ac: 0d 81 neg \$tp,\$8
+ 2ae: 0e d1 neg \$gp,\$tp
+
+000002b0 <slt3>:
+ 2b0: 0e 82 slt3 \$0,\$gp,\$8
+ 2b2: 04 d2 slt3 \$0,\$4,\$tp
+ 2b4: 0a e2 slt3 \$0,\$10,\$gp
+ 2b6: 0e 52 slt3 \$0,\$gp,\$5
+ 2b8: 03 c2 slt3 \$0,\$3,\$12
+
+000002ba <sltu3>:
+ 2ba: 02 83 sltu3 \$0,\$2,\$8
+ 2bc: 0e b3 sltu3 \$0,\$gp,\$11
+ 2be: 02 d3 sltu3 \$0,\$2,\$tp
+ 2c0: 09 83 sltu3 \$0,\$9,\$8
+ 2c2: 06 93 sltu3 \$0,\$6,\$9
+
+000002c4 <slt3i>:
+ 2c4: 66 11 slt3 \$0,\$6,0x2
+ 2c6: 6b 09 slt3 \$0,\$11,0x1
+ 2c8: 6f 01 slt3 \$0,\$sp,0x0
+ 2ca: 63 01 slt3 \$0,\$3,0x0
+ 2cc: 6d 01 slt3 \$0,\$tp,0x0
+
+000002ce <sltu3i>:
+ 2ce: 6e 25 sltu3 \$0,\$gp,0x4
+ 2d0: 6d 1d sltu3 \$0,\$tp,0x3
+ 2d2: 63 0d sltu3 \$0,\$3,0x1
+ 2d4: 6c 05 sltu3 \$0,\$12,0x0
+ 2d6: 61 1d sltu3 \$0,\$1,0x3
+
+000002d8 <sl1ad3>:
+ 2d8: 28 e6 sl1ad3 \$0,\$8,\$gp
+ 2da: 24 26 sl1ad3 \$0,\$4,\$2
+ 2dc: 2f c6 sl1ad3 \$0,\$sp,\$12
+ 2de: 29 16 sl1ad3 \$0,\$9,\$1
+ 2e0: 28 26 sl1ad3 \$0,\$8,\$2
+
+000002e2 <sl2ad3>:
+ 2e2: 28 d7 sl2ad3 \$0,\$8,\$tp
+ 2e4: 22 37 sl2ad3 \$0,\$2,\$3
+ 2e6: 28 97 sl2ad3 \$0,\$8,\$9
+ 2e8: 27 c7 sl2ad3 \$0,\$7,\$12
+ 2ea: 24 c7 sl2ad3 \$0,\$4,\$12
+
+000002ec <add3x>:
+ 2ec: cd b0 00 01 add3 \$tp,\$11,1
+ 2f0: cd 40 ff ff add3 \$tp,\$4,-1
+ 2f4: c2 d0 00 01 add3 \$2,\$tp,1
+ 2f8: c3 e0 00 01 add3 \$3,\$gp,1
+ 2fc: ca f0 00 02 add3 \$10,\$sp,2
+
+00000300 <slt3x>:
+ 300: c8 12 ff ff slt3 \$8,\$1,-1
+ 304: c0 32 ff fe slt3 \$0,\$3,-2
+ 308: c9 f2 ff ff slt3 \$9,\$sp,-1
+ 30c: c3 82 00 02 slt3 \$3,\$8,2
+ 310: cd e2 00 00 slt3 \$tp,\$gp,0
+
+00000314 <sltu3x>:
+ 314: cf b3 00 02 sltu3 \$sp,\$11,0x2
+ 318: c6 03 00 01 sltu3 \$6,\$0,0x1
+ 31c: c9 b3 00 03 sltu3 \$9,\$11,0x3
+ 320: 64 05 sltu3 \$0,\$4,0x0
+ 322: cd e3 00 04 sltu3 \$tp,\$gp,0x4
+
+00000326 <or>:
+ 326: 1f e0 or \$sp,\$gp
+ 328: 18 30 or \$8,\$3
+ 32a: 10 f0 or \$0,\$sp
+ 32c: 1d 00 or \$tp,\$0
+ 32e: 18 60 or \$8,\$6
+
+00000330 <and>:
+ 330: 1f f1 and \$sp,\$sp
+ 332: 16 e1 and \$6,\$gp
+ 334: 14 21 and \$4,\$2
+ 336: 15 81 and \$5,\$8
+ 338: 17 e1 and \$7,\$gp
+
+0000033a <xor>:
+ 33a: 11 c2 xor \$1,\$12
+ 33c: 1c d2 xor \$12,\$tp
+ 33e: 1a 82 xor \$10,\$8
+ 340: 1f b2 xor \$sp,\$11
+ 342: 1c 82 xor \$12,\$8
+
+00000344 <nor>:
+ 344: 19 53 nor \$9,\$5
+ 346: 18 23 nor \$8,\$2
+ 348: 1f 93 nor \$sp,\$9
+ 34a: 15 f3 nor \$5,\$sp
+ 34c: 1f e3 nor \$sp,\$gp
+
+0000034e <or3>:
+ 34e: cd f4 00 02 or3 \$tp,\$sp,0x2
+ 352: cf d4 00 03 or3 \$sp,\$tp,0x3
+ 356: c0 a4 00 04 or3 \$0,\$10,0x4
+ 35a: c9 f4 00 03 or3 \$9,\$sp,0x3
+ 35e: c9 f4 00 00 or3 \$9,\$sp,0x0
+
+00000362 <and3>:
+ 362: c5 85 00 01 and3 \$5,\$8,0x1
+ 366: cb e5 00 03 and3 \$11,\$gp,0x3
+ 36a: c6 05 00 00 and3 \$6,\$0,0x0
+ 36e: cf f5 00 00 and3 \$sp,\$sp,0x0
+ 372: c1 a5 00 03 and3 \$1,\$10,0x3
+
+00000376 <xor3>:
+ 376: c0 06 00 02 xor3 \$0,\$0,0x2
+ 37a: cf 66 00 00 xor3 \$sp,\$6,0x0
+ 37e: cd 56 00 00 xor3 \$tp,\$5,0x0
+ 382: cf 76 00 00 xor3 \$sp,\$7,0x0
+ 386: cf f6 00 02 xor3 \$sp,\$sp,0x2
+
+0000038a <sra>:
+ 38a: 24 1d sra \$4,\$1
+ 38c: 28 fd sra \$8,\$sp
+ 38e: 21 1d sra \$1,\$1
+ 390: 20 5d sra \$0,\$5
+ 392: 29 1d sra \$9,\$1
+
+00000394 <srl>:
+ 394: 22 bc srl \$2,\$11
+ 396: 2f 7c srl \$sp,\$7
+ 398: 21 7c srl \$1,\$7
+ 39a: 23 dc srl \$3,\$tp
+ 39c: 2e 1c srl \$gp,\$1
+
+0000039e <sll>:
+ 39e: 2b 0e sll \$11,\$0
+ 3a0: 2d 8e sll \$tp,\$8
+ 3a2: 28 9e sll \$8,\$9
+ 3a4: 2d fe sll \$tp,\$sp
+ 3a6: 2f fe sll \$sp,\$sp
+
+000003a8 <srai>:
+ 3a8: 61 13 sra \$1,0x2
+ 3aa: 6f 1b sra \$sp,0x3
+ 3ac: 6f 1b sra \$sp,0x3
+ 3ae: 66 23 sra \$6,0x4
+ 3b0: 6f 1b sra \$sp,0x3
+
+000003b2 <srli>:
+ 3b2: 6a 02 srl \$10,0x0
+ 3b4: 69 1a srl \$9,0x3
+ 3b6: 66 22 srl \$6,0x4
+ 3b8: 6a 12 srl \$10,0x2
+ 3ba: 68 1a srl \$8,0x3
+
+000003bc <slli>:
+ 3bc: 60 06 sll \$0,0x0
+ 3be: 64 06 sll \$4,0x0
+ 3c0: 6d 16 sll \$tp,0x2
+ 3c2: 6b 16 sll \$11,0x2
+ 3c4: 66 06 sll \$6,0x0
+
+000003c6 <sll3>:
+ 3c6: 6d 27 sll3 \$0,\$tp,0x4
+ 3c8: 6e 07 sll3 \$0,\$gp,0x0
+ 3ca: 68 17 sll3 \$0,\$8,0x2
+ 3cc: 63 17 sll3 \$0,\$3,0x2
+ 3ce: 68 07 sll3 \$0,\$8,0x0
+
+000003d0 <fsft>:
+ 3d0: 2e af fsft \$gp,\$10
+ 3d2: 2e 9f fsft \$gp,\$9
+ 3d4: 2f df fsft \$sp,\$tp
+ 3d6: 2b 3f fsft \$11,\$3
+ 3d8: 25 3f fsft \$5,\$3
+
+000003da <bra>:
+ 3da: b0 02 bra 3dc <bra\+0x2>
+ 3dc: bf fe bra 3da <bra>
+ 3de: b0 02 bra 3e0 <bra\+0x6>
+ 3e0: b0 00 bra 3e0 <bra\+0x6>
+ 3e2: b0 02 bra 3e4 <beqz>
+
+000003e4 <beqz>:
+ 3e4: a1 fe beqz \$1,3e2 <bra\+0x8>
+ 3e6: af 02 beqz \$sp,3e8 <beqz\+0x4>
+ 3e8: a4 04 beqz \$4,3ec <beqz\+0x8>
+ 3ea: a4 00 beqz \$4,3ea <beqz\+0x6>
+ 3ec: a9 fe beqz \$9,3ea <beqz\+0x6>
+
+000003ee <bnez>:
+ 3ee: a8 03 bnez \$8,3f0 <bnez\+0x2>
+ 3f0: ad 03 bnez \$tp,3f2 <bnez\+0x4>
+ 3f2: ae 01 bnez \$gp,3f2 <bnez\+0x4>
+ 3f4: a6 03 bnez \$6,3f6 <bnez\+0x8>
+ 3f6: a8 fd bnez \$8,3f2 <bnez\+0x4>
+
+000003f8 <beqi>:
+ 3f8: ed 30 00 00 beqi \$tp,0x3,3f8 <beqi>
+ 3fc: e0 40 ff ff beqi \$0,0x4,3fa <beqi\+0x2>
+ 400: ef 40 ff ff beqi \$sp,0x4,3fe <beqi\+0x6>
+ 404: ed 20 00 00 beqi \$tp,0x2,404 <beqi\+0xc>
+ 408: e4 20 ff fc beqi \$4,0x2,400 <beqi\+0x8>
+
+0000040c <bnei>:
+ 40c: e8 14 00 00 bnei \$8,0x1,40c <bnei>
+ 410: e5 14 00 01 bnei \$5,0x1,412 <bnei\+0x6>
+ 414: e5 04 00 04 bnei \$5,0x0,41c <bnei\+0x10>
+ 418: e9 44 ff ff bnei \$9,0x4,416 <bnei\+0xa>
+ 41c: e0 44 ff fc bnei \$0,0x4,414 <bnei\+0x8>
+
+00000420 <blti>:
+ 420: e7 3c 00 00 blti \$7,0x3,420 <blti>
+ 424: e1 1c 00 00 blti \$1,0x1,424 <blti\+0x4>
+ 428: e8 2c 00 01 blti \$8,0x2,42a <blti\+0xa>
+ 42c: eb 2c 00 01 blti \$11,0x2,42e <blti\+0xe>
+ 430: ef 3c ff ff blti \$sp,0x3,42e <blti\+0xe>
+
+00000434 <bgei>:
+ 434: e4 38 ff fc bgei \$4,0x3,42c <blti\+0xc>
+ 438: e7 08 00 01 bgei \$7,0x0,43a <bgei\+0x6>
+ 43c: ed 18 00 00 bgei \$tp,0x1,43c <bgei\+0x8>
+ 440: e5 28 ff ff bgei \$5,0x2,43e <bgei\+0xa>
+ 444: ec 48 ff fc bgei \$12,0x4,43c <bgei\+0x8>
+
+00000448 <beq>:
+ 448: e7 21 ff ff beq \$7,\$2,446 <bgei\+0x12>
+ 44c: e1 31 ff fc beq \$1,\$3,444 <bgei\+0x10>
+ 450: e2 01 00 01 beq \$2,\$0,452 <beq\+0xa>
+ 454: ef 81 00 01 beq \$sp,\$8,456 <beq\+0xe>
+ 458: e3 01 00 00 beq \$3,\$0,458 <beq\+0x10>
+
+0000045c <bne>:
+ 45c: e6 35 00 00 bne \$6,\$3,45c <bne>
+ 460: ef 35 ff fc bne \$sp,\$3,458 <beq\+0x10>
+ 464: e8 05 00 01 bne \$8,\$0,466 <bne\+0xa>
+ 468: ee f5 00 04 bne \$gp,\$sp,470 <bsr12>
+ 46c: ef 45 00 01 bne \$sp,\$4,46e <bne\+0x12>
+
+00000470 <bsr12>:
+ 470: b0 03 bsr 472 <bsr12\+0x2>
+ 472: bf f9 bsr 46a <bne\+0xe>
+ 474: bf f1 bsr 464 <bne\+0x8>
+ 476: bf ff bsr 474 <bsr12\+0x4>
+ 478: bf f9 bsr 470 <bsr12>
+
+0000047a <bsr24>:
+ 47a: b0 05 bsr 47e <bsr24\+0x4>
+ 47c: bf ff bsr 47a <bsr24>
+ 47e: bf fd bsr 47a <bsr24>
+ 480: b0 01 bsr 480 <bsr24\+0x6>
+ 482: b0 03 bsr 484 <jmp>
+
+00000484 <jmp>:
+ 484: 10 2e jmp \$2
+ 486: 10 de jmp \$tp
+ 488: 10 5e jmp \$5
+ 48a: 10 fe jmp \$sp
+ 48c: 10 8e jmp \$8
+
+0000048e <jmp24>:
+ 48e: d8 28 00 00 jmp 4 <sb\+0x4>
+ 492: d8 18 00 00 jmp 2 <sb\+0x2>
+ 496: d8 08 00 00 jmp 0 <sb>
+ 49a: d8 18 00 00 jmp 2 <sb\+0x2>
+ 49e: d8 28 00 00 jmp 4 <sb\+0x4>
+
+000004a2 <jsr>:
+ 4a2: 10 ff jsr \$sp
+ 4a4: 10 df jsr \$tp
+ 4a6: 10 df jsr \$tp
+ 4a8: 10 6f jsr \$6
+ 4aa: 10 6f jsr \$6
+
+000004ac <ret>:
+ 4ac: 70 02 ret
+
+000004ae <repeat>:
+ 4ae: e4 09 00 01 repeat \$4,4b0 <repeat\+0x2>
+ 4b2: e8 09 00 02 repeat \$8,4b6 <repeat\+0x8>
+ 4b6: e0 09 00 04 repeat \$0,4be <repeat\+0x10>
+ 4ba: e6 09 00 01 repeat \$6,4bc <repeat\+0xe>
+ 4be: e4 09 00 01 repeat \$4,4c0 <repeat\+0x12>
+
+000004c2 <erepeat>:
+ 4c2: e0 19 00 01 erepeat 4c4 <erepeat\+0x2>
+ 4c6: e0 19 00 00 erepeat 4c6 <erepeat\+0x4>
+ 4ca: e0 19 00 01 erepeat 4cc <erepeat\+0xa>
+ 4ce: e0 19 ff ff erepeat 4cc <erepeat\+0xa>
+ 4d2: e0 19 00 00 erepeat 4d2 <erepeat\+0x10>
+
+000004d6 <stc>:
+ 4d6: 7d e8 stc \$tp,\$mb1
+ 4d8: 7d c9 stc \$tp,\$ccfg
+ 4da: 7b 89 stc \$11,\$dbg
+ 4dc: 7a c9 stc \$10,\$ccfg
+ 4de: 79 39 stc \$9,\$epc
+
+000004e0 <ldc>:
+ 4e0: 7d 8a ldc \$tp,\$lo
+ 4e2: 78 7b ldc \$8,\$npc
+ 4e4: 79 ca ldc \$9,\$mb0
+ 4e6: 7f 2a ldc \$sp,\$sar
+ 4e8: 79 cb ldc \$9,\$ccfg
+
+000004ea <di>:
+ 4ea: 70 00 di
+
+000004ec <ei>:
+ 4ec: 70 10 ei
+
+000004ee <reti>:
+ 4ee: 70 12 reti
+
+000004f0 <halt>:
+ 4f0: 70 22 halt
+
+000004f2 <swi>:
+ 4f2: 70 26 swi 0x2
+ 4f4: 70 06 swi 0x0
+ 4f6: 70 26 swi 0x2
+ 4f8: 70 36 swi 0x3
+ 4fa: 70 16 swi 0x1
+
+000004fc <break>:
+ 4fc: 70 32 break
+
+000004fe <syncm>:
+ 4fe: 70 11 syncm
+
+00000500 <stcb>:
+ 500: f5 04 00 04 stcb \$5,0x4
+ 504: f5 04 00 01 stcb \$5,0x1
+ 508: fe 04 00 00 stcb \$gp,0x0
+ 50c: ff 04 00 04 stcb \$sp,0x4
+ 510: fb 04 00 02 stcb \$11,0x2
+
+00000514 <ldcb>:
+ 514: f2 14 00 03 ldcb \$2,0x3
+ 518: f2 14 00 04 ldcb \$2,0x4
+ 51c: f9 14 00 01 ldcb \$9,0x1
+ 520: fa 14 00 04 ldcb \$10,0x4
+ 524: f1 14 00 04 ldcb \$1,0x4
+
+00000528 <bsetm>:
+ 528: 20 a0 bsetm \(\$10\),0x0
+ 52a: 20 f0 bsetm \(\$sp\),0x0
+ 52c: 22 10 bsetm \(\$1\),0x2
+ 52e: 24 f0 bsetm \(\$sp\),0x4
+ 530: 24 80 bsetm \(\$8\),0x4
+
+00000532 <bclrm>:
+ 532: 20 51 bclrm \(\$5\),0x0
+ 534: 22 51 bclrm \(\$5\),0x2
+ 536: 20 81 bclrm \(\$8\),0x0
+ 538: 22 91 bclrm \(\$9\),0x2
+ 53a: 23 51 bclrm \(\$5\),0x3
+
+0000053c <bnotm>:
+ 53c: 24 e2 bnotm \(\$gp\),0x4
+ 53e: 24 b2 bnotm \(\$11\),0x4
+ 540: 20 a2 bnotm \(\$10\),0x0
+ 542: 24 d2 bnotm \(\$tp\),0x4
+ 544: 20 82 bnotm \(\$8\),0x0
+
+00000546 <btstm>:
+ 546: 20 e3 btstm \$0,\(\$gp\),0x0
+ 548: 21 e3 btstm \$0,\(\$gp\),0x1
+ 54a: 20 b3 btstm \$0,\(\$11\),0x0
+ 54c: 23 e3 btstm \$0,\(\$gp\),0x3
+ 54e: 22 83 btstm \$0,\(\$8\),0x2
+
+00000550 <tas>:
+ 550: 27 d4 tas \$7,\(\$tp\)
+ 552: 27 c4 tas \$7,\(\$12\)
+ 554: 23 84 tas \$3,\(\$8\)
+ 556: 22 54 tas \$2,\(\$5\)
+ 558: 26 a4 tas \$6,\(\$10\)
+
+0000055a <cache>:
+ 55a: 71 d4 cache 0x1,\(\$tp\)
+ 55c: 73 c4 cache 0x3,\(\$12\)
+ 55e: 73 94 cache 0x3,\(\$9\)
+ 560: 74 24 cache 0x4,\(\$2\)
+ 562: 74 74 cache 0x4,\(\$7\)
+
+00000564 <mul>:
+ 564: 18 e4 mul \$8,\$gp
+ 566: 12 94 mul \$2,\$9
+ 568: 1e f4 mul \$gp,\$sp
+ 56a: 19 74 mul \$9,\$7
+ 56c: 17 b4 mul \$7,\$11
+
+0000056e <mulu>:
+ 56e: 12 55 mulu \$2,\$5
+ 570: 16 e5 mulu \$6,\$gp
+ 572: 1e f5 mulu \$gp,\$sp
+ 574: 1b e5 mulu \$11,\$gp
+ 576: 13 95 mulu \$3,\$9
+
+00000578 <mulr>:
+ 578: 1c 66 mulr \$12,\$6
+ 57a: 1d 86 mulr \$tp,\$8
+ 57c: 17 a6 mulr \$7,\$10
+ 57e: 1e 16 mulr \$gp,\$1
+ 580: 10 f6 mulr \$0,\$sp
+
+00000582 <mulru>:
+ 582: 14 27 mulru \$4,\$2
+ 584: 1e 17 mulru \$gp,\$1
+ 586: 1f 47 mulru \$sp,\$4
+ 588: 1a 67 mulru \$10,\$6
+ 58a: 10 e7 mulru \$0,\$gp
+
+0000058c <madd>:
+ 58c: f4 b1 30 04 madd \$4,\$11
+ 590: ff e1 30 04 madd \$sp,\$gp
+ 594: fe f1 30 04 madd \$gp,\$sp
+ 598: f4 d1 30 04 madd \$4,\$tp
+ 59c: f1 e1 30 04 madd \$1,\$gp
+
+000005a0 <maddu>:
+ 5a0: f0 11 30 05 maddu \$0,\$1
+ 5a4: f7 61 30 05 maddu \$7,\$6
+ 5a8: f9 51 30 05 maddu \$9,\$5
+ 5ac: fe f1 30 05 maddu \$gp,\$sp
+ 5b0: f7 d1 30 05 maddu \$7,\$tp
+
+000005b4 <maddr>:
+ 5b4: f6 81 30 06 maddr \$6,\$8
+ 5b8: f9 e1 30 06 maddr \$9,\$gp
+ 5bc: f8 e1 30 06 maddr \$8,\$gp
+ 5c0: f3 21 30 06 maddr \$3,\$2
+ 5c4: f1 b1 30 06 maddr \$1,\$11
+
+000005c8 <maddru>:
+ 5c8: fa 31 30 07 maddru \$10,\$3
+ 5cc: ff c1 30 07 maddru \$sp,\$12
+ 5d0: f8 81 30 07 maddru \$8,\$8
+ 5d4: fe 31 30 07 maddru \$gp,\$3
+ 5d8: f8 f1 30 07 maddru \$8,\$sp
+
+000005dc <div>:
+ 5dc: 19 38 div \$9,\$3
+ 5de: 14 e8 div \$4,\$gp
+ 5e0: 12 c8 div \$2,\$12
+ 5e2: 18 d8 div \$8,\$tp
+ 5e4: 1d 68 div \$tp,\$6
+
+000005e6 <divu>:
+ 5e6: 19 59 divu \$9,\$5
+ 5e8: 18 d9 divu \$8,\$tp
+ 5ea: 10 e9 divu \$0,\$gp
+ 5ec: 19 59 divu \$9,\$5
+ 5ee: 10 59 divu \$0,\$5
+
+000005f0 <dret>:
+ 5f0: 70 13 dret
+
+000005f2 <dbreak>:
+ 5f2: 70 33 dbreak
+
+000005f4 <ldz>:
+ 5f4: fe 41 00 00 ldz \$gp,\$4
+ 5f8: fa b1 00 00 ldz \$10,\$11
+ 5fc: f9 91 00 00 ldz \$9,\$9
+ 600: ff d1 00 00 ldz \$sp,\$tp
+ 604: fe 31 00 00 ldz \$gp,\$3
+
+00000608 <abs>:
+ 608: ff 91 00 03 abs \$sp,\$9
+ 60c: f5 41 00 03 abs \$5,\$4
+ 610: fd d1 00 03 abs \$tp,\$tp
+ 614: f0 31 00 03 abs \$0,\$3
+ 618: f3 e1 00 03 abs \$3,\$gp
+
+0000061c <ave>:
+ 61c: fb a1 00 02 ave \$11,\$10
+ 620: f8 a1 00 02 ave \$8,\$10
+ 624: fe 21 00 02 ave \$gp,\$2
+ 628: fa c1 00 02 ave \$10,\$12
+ 62c: ff 81 00 02 ave \$sp,\$8
+
+00000630 <min>:
+ 630: f8 31 00 04 min \$8,\$3
+ 634: f7 01 00 04 min \$7,\$0
+ 638: f2 21 00 04 min \$2,\$2
+ 63c: f5 61 00 04 min \$5,\$6
+ 640: fb 51 00 04 min \$11,\$5
+
+00000644 <max>:
+ 644: fb f1 00 05 max \$11,\$sp
+ 648: fe 01 00 05 max \$gp,\$0
+ 64c: fc f1 00 05 max \$12,\$sp
+ 650: fe 21 00 05 max \$gp,\$2
+ 654: fe f1 00 05 max \$gp,\$sp
+
+00000658 <minu>:
+ 658: fb 81 00 06 minu \$11,\$8
+ 65c: f7 51 00 06 minu \$7,\$5
+ 660: f8 e1 00 06 minu \$8,\$gp
+ 664: fb 41 00 06 minu \$11,\$4
+ 668: f2 f1 00 06 minu \$2,\$sp
+
+0000066c <maxu>:
+ 66c: f3 31 00 07 maxu \$3,\$3
+ 670: fd 01 00 07 maxu \$tp,\$0
+ 674: f4 81 00 07 maxu \$4,\$8
+ 678: fe 21 00 07 maxu \$gp,\$2
+ 67c: fc 81 00 07 maxu \$12,\$8
+
+00000680 <clip>:
+ 680: fa 01 10 08 clip \$10,0x1
+ 684: ff 01 10 20 clip \$sp,0x4
+ 688: f4 01 10 18 clip \$4,0x3
+ 68c: ff 01 10 18 clip \$sp,0x3
+ 690: f1 01 10 00 clip \$1,0x0
+
+00000694 <clipu>:
+ 694: fa 01 10 21 clipu \$10,0x4
+ 698: fd 01 10 09 clipu \$tp,0x1
+ 69c: f5 01 10 21 clipu \$5,0x4
+ 6a0: fe 01 10 01 clipu \$gp,0x0
+ 6a4: f5 01 10 09 clipu \$5,0x1
+
+000006a8 <sadd>:
+ 6a8: f5 01 00 08 sadd \$5,\$0
+ 6ac: ff 31 00 08 sadd \$sp,\$3
+ 6b0: f0 a1 00 08 sadd \$0,\$10
+ 6b4: ff c1 00 08 sadd \$sp,\$12
+ 6b8: f4 21 00 08 sadd \$4,\$2
+
+000006bc <ssub>:
+ 6bc: f1 a1 00 0a ssub \$1,\$10
+ 6c0: f4 71 00 0a ssub \$4,\$7
+ 6c4: f8 31 00 0a ssub \$8,\$3
+ 6c8: f7 e1 00 0a ssub \$7,\$gp
+ 6cc: fd 41 00 0a ssub \$tp,\$4
+
+000006d0 <saddu>:
+ 6d0: f9 e1 00 09 saddu \$9,\$gp
+ 6d4: f0 a1 00 09 saddu \$0,\$10
+ 6d8: f7 c1 00 09 saddu \$7,\$12
+ 6dc: f5 f1 00 09 saddu \$5,\$sp
+ 6e0: fd 31 00 09 saddu \$tp,\$3
+
+000006e4 <ssubu>:
+ 6e4: ff e1 00 0b ssubu \$sp,\$gp
+ 6e8: f0 f1 00 0b ssubu \$0,\$sp
+ 6ec: f3 a1 00 0b ssubu \$3,\$10
+ 6f0: ff d1 00 0b ssubu \$sp,\$tp
+ 6f4: f2 91 00 0b ssubu \$2,\$9
+
+000006f8 <swcp>:
+ 6f8: 33 d8 swcp \$c3,\(\$tp\)
+ 6fa: 3f d8 swcp \$c15,\(\$tp\)
+ 6fc: 3d 08 swcp \$c13,\(\$0\)
+ 6fe: 3c c8 swcp \$c12,\(\$12\)
+ 700: 39 e8 swcp \$c9,\(\$gp\)
+
+00000702 <lwcp>:
+ 702: 37 39 lwcp \$c7,\(\$3\)
+ 704: 36 39 lwcp \$c6,\(\$3\)
+ 706: 30 29 lwcp \$c0,\(\$2\)
+ 708: 38 89 lwcp \$c8,\(\$8\)
+ 70a: 3b d9 lwcp \$c11,\(\$tp\)
+
+0000070c <smcp>:
+ 70c: 3e 9a smcp \$c14,\(\$9\)
+ 70e: 32 8a smcp \$c2,\(\$8\)
+ 710: 3e fa smcp \$c14,\(\$sp\)
+ 712: 3a 8a smcp \$c10,\(\$8\)
+ 714: 32 8a smcp \$c2,\(\$8\)
+
+00000716 <lmcp>:
+ 716: 3b 1b lmcp \$c11,\(\$1\)
+ 718: 38 8b lmcp \$c8,\(\$8\)
+ 71a: 3b db lmcp \$c11,\(\$tp\)
+ 71c: 38 0b lmcp \$c8,\(\$0\)
+ 71e: 38 eb lmcp \$c8,\(\$gp\)
+
+00000720 <swcpi>:
+ 720: 37 00 swcpi \$c7,\(\$0\+\)
+ 722: 36 e0 swcpi \$c6,\(\$gp\+\)
+ 724: 3c 80 swcpi \$c12,\(\$8\+\)
+ 726: 3e f0 swcpi \$c14,\(\$sp\+\)
+ 728: 36 00 swcpi \$c6,\(\$0\+\)
+
+0000072a <lwcpi>:
+ 72a: 38 21 lwcpi \$c8,\(\$2\+\)
+ 72c: 39 01 lwcpi \$c9,\(\$0\+\)
+ 72e: 33 e1 lwcpi \$c3,\(\$gp\+\)
+ 730: 3d 51 lwcpi \$c13,\(\$5\+\)
+ 732: 3b e1 lwcpi \$c11,\(\$gp\+\)
+
+00000734 <smcpi>:
+ 734: 38 22 smcpi \$c8,\(\$2\+\)
+ 736: 3b 92 smcpi \$c11,\(\$9\+\)
+ 738: 34 32 smcpi \$c4,\(\$3\+\)
+ 73a: 3e 22 smcpi \$c14,\(\$2\+\)
+ 73c: 39 32 smcpi \$c9,\(\$3\+\)
+
+0000073e <lmcpi>:
+ 73e: 36 e3 lmcpi \$c6,\(\$gp\+\)
+ 740: 39 53 lmcpi \$c9,\(\$5\+\)
+ 742: 3a 63 lmcpi \$c10,\(\$6\+\)
+ 744: 31 63 lmcpi \$c1,\(\$6\+\)
+ 746: 32 83 lmcpi \$c2,\(\$8\+\)
+
+00000748 <swcp16>:
+ 748: f0 2c ff ff swcp \$c0,-1\(\$2\)
+ 74c: f5 ac 00 01 swcp \$c5,1\(\$10\)
+ 750: f8 cc 00 02 swcp \$c8,2\(\$12\)
+ 754: fe 1c ff ff swcp \$c14,-1\(\$1\)
+ 758: fc 3c 00 02 swcp \$c12,2\(\$3\)
+
+0000075c <lwcp16>:
+ 75c: f8 5d ff ff lwcp \$c8,-1\(\$5\)
+ 760: fc fd 00 01 lwcp \$c12,1\(\$sp\)
+ 764: f1 0d 00 02 lwcp \$c1,2\(\$0\)
+ 768: f4 dd 00 01 lwcp \$c4,1\(\$tp\)
+ 76c: f6 bd 00 02 lwcp \$c6,2\(\$11\)
+
+00000770 <smcp16>:
+ 770: f9 ae ff ff smcp \$c9,-1\(\$10\)
+ 774: fe ee 00 01 smcp \$c14,1\(\$gp\)
+ 778: f3 fe 00 02 smcp \$c3,2\(\$sp\)
+ 77c: ff 8e ff fe smcp \$c15,-2\(\$8\)
+ 780: fd de 00 01 smcp \$c13,1\(\$tp\)
+
+00000784 <lmcp16>:
+ 784: f0 ff 00 01 lmcp \$c0,1\(\$sp\)
+ 788: ff 8f 00 01 lmcp \$c15,1\(\$8\)
+ 78c: f2 8f ff ff lmcp \$c2,-1\(\$8\)
+ 790: fe 8f 00 01 lmcp \$c14,1\(\$8\)
+ 794: f1 af ff ff lmcp \$c1,-1\(\$10\)
+
+00000798 <sbcpa>:
+ 798: fe f5 00 02 sbcpa \$c14,\(\$sp\+\),2
+ 79c: f2 45 00 fe sbcpa \$c2,\(\$4\+\),-2
+ 7a0: f8 15 00 00 sbcpa \$c8,\(\$1\+\),0
+ 7a4: fb 35 00 00 sbcpa \$c11,\(\$3\+\),0
+ 7a8: f9 e5 00 fe sbcpa \$c9,\(\$gp\+\),-2
+
+000007ac <lbcpa>:
+ 7ac: f7 25 40 fe lbcpa \$c7,\(\$2\+\),-2
+ 7b0: fc f5 40 02 lbcpa \$c12,\(\$sp\+\),2
+ 7b4: f5 45 40 fe lbcpa \$c5,\(\$4\+\),-2
+ 7b8: f7 45 40 fe lbcpa \$c7,\(\$4\+\),-2
+ 7bc: f8 f5 40 00 lbcpa \$c8,\(\$sp\+\),0
+
+000007c0 <shcpa>:
+ 7c0: f0 e5 10 00 shcpa \$c0,\(\$gp\+\),0
+ 7c4: fc f5 10 10 shcpa \$c12,\(\$sp\+\),16
+ 7c8: f1 45 10 04 shcpa \$c1,\(\$4\+\),4
+ 7cc: f5 45 10 e0 shcpa \$c5,\(\$4\+\),-32
+ 7d0: f1 f5 10 00 shcpa \$c1,\(\$sp\+\),0
+
+000007d4 <lhcpa>:
+ 7d4: f4 45 50 00 lhcpa \$c4,\(\$4\+\),0
+ 7d8: f6 55 50 30 lhcpa \$c6,\(\$5\+\),48
+ 7dc: f3 65 50 cc lhcpa \$c3,\(\$6\+\),-52
+ 7e0: f8 65 50 e8 lhcpa \$c8,\(\$6\+\),-24
+ 7e4: f0 95 50 00 lhcpa \$c0,\(\$9\+\),0
+
+000007e8 <swcpa>:
+ 7e8: f1 95 20 10 swcpa \$c1,\(\$9\+\),16
+ 7ec: f7 f5 20 20 swcpa \$c7,\(\$sp\+\),32
+ 7f0: f3 c5 20 30 swcpa \$c3,\(\$12\+\),48
+ 7f4: fa 95 20 08 swcpa \$c10,\(\$9\+\),8
+ 7f8: fe 85 20 04 swcpa \$c14,\(\$8\+\),4
+
+000007fc <lwcpa>:
+ 7fc: f6 e5 60 f8 lwcpa \$c6,\(\$gp\+\),-8
+ 800: f4 75 60 04 lwcpa \$c4,\(\$7\+\),4
+ 804: fb e5 60 f0 lwcpa \$c11,\(\$gp\+\),-16
+ 808: fa f5 60 e0 lwcpa \$c10,\(\$sp\+\),-32
+ 80c: f2 25 60 08 lwcpa \$c2,\(\$2\+\),8
+
+00000810 <smcpa>:
+ 810: fd f5 30 f8 smcpa \$c13,\(\$sp\+\),-8
+ 814: f6 75 30 f8 smcpa \$c6,\(\$7\+\),-8
+ 818: f5 35 30 10 smcpa \$c5,\(\$3\+\),16
+ 81c: fd f5 30 10 smcpa \$c13,\(\$sp\+\),16
+ 820: f3 c5 30 30 smcpa \$c3,\(\$12\+\),48
+
+00000824 <lmcpa>:
+ 824: f9 45 70 00 lmcpa \$c9,\(\$4\+\),0
+ 828: f3 f5 70 f0 lmcpa \$c3,\(\$sp\+\),-16
+ 82c: ff d5 70 08 lmcpa \$c15,\(\$tp\+\),8
+ 830: f8 85 70 f8 lmcpa \$c8,\(\$8\+\),-8
+ 834: fa 95 70 00 lmcpa \$c10,\(\$9\+\),0
+
+00000838 <sbcpm0>:
+ 838: fa d5 08 08 sbcpm0 \$c10,\(\$tp\+\),8
+ 83c: fd 55 08 f8 sbcpm0 \$c13,\(\$5\+\),-8
+ 840: f4 55 08 f8 sbcpm0 \$c4,\(\$5\+\),-8
+ 844: fa d5 08 10 sbcpm0 \$c10,\(\$tp\+\),16
+ 848: f4 55 08 e8 sbcpm0 \$c4,\(\$5\+\),-24
+
+0000084c <lbcpm0>:
+ 84c: f0 45 48 00 lbcpm0 \$c0,\(\$4\+\),0
+ 850: f9 75 48 f8 lbcpm0 \$c9,\(\$7\+\),-8
+ 854: fc 85 48 18 lbcpm0 \$c12,\(\$8\+\),24
+ 858: f8 c5 48 10 lbcpm0 \$c8,\(\$12\+\),16
+ 85c: f7 85 48 10 lbcpm0 \$c7,\(\$8\+\),16
+
+00000860 <shcpm0>:
+ 860: f2 d5 18 02 shcpm0 \$c2,\(\$tp\+\),2
+ 864: f7 f5 18 fe shcpm0 \$c7,\(\$sp\+\),-2
+ 868: f8 25 18 02 shcpm0 \$c8,\(\$2\+\),2
+ 86c: fd 55 18 00 shcpm0 \$c13,\(\$5\+\),0
+ 870: f3 e5 18 08 shcpm0 \$c3,\(\$gp\+\),8
+
+00000874 <lhcpm0>:
+ 874: f7 45 58 08 lhcpm0 \$c7,\(\$4\+\),8
+ 878: f3 35 58 fe lhcpm0 \$c3,\(\$3\+\),-2
+ 87c: f3 15 58 00 lhcpm0 \$c3,\(\$1\+\),0
+ 880: f2 e5 58 00 lhcpm0 \$c2,\(\$gp\+\),0
+ 884: fc 65 58 02 lhcpm0 \$c12,\(\$6\+\),2
+
+00000888 <swcpm0>:
+ 888: f8 85 28 20 swcpm0 \$c8,\(\$8\+\),32
+ 88c: f9 f5 28 00 swcpm0 \$c9,\(\$sp\+\),0
+ 890: f9 25 28 f0 swcpm0 \$c9,\(\$2\+\),-16
+ 894: f0 e5 28 30 swcpm0 \$c0,\(\$gp\+\),48
+ 898: ff 15 28 08 swcpm0 \$c15,\(\$1\+\),8
+
+0000089c <lwcpm0>:
+ 89c: fe a5 68 fc lwcpm0 \$c14,\(\$10\+\),-4
+ 8a0: fb f5 68 fc lwcpm0 \$c11,\(\$sp\+\),-4
+ 8a4: f5 75 68 f8 lwcpm0 \$c5,\(\$7\+\),-8
+ 8a8: f2 c5 68 20 lwcpm0 \$c2,\(\$12\+\),32
+ 8ac: f2 e5 68 10 lwcpm0 \$c2,\(\$gp\+\),16
+
+000008b0 <smcpm0>:
+ 8b0: f1 c5 38 08 smcpm0 \$c1,\(\$12\+\),8
+ 8b4: f8 45 38 f0 smcpm0 \$c8,\(\$4\+\),-16
+ 8b8: fa b5 38 00 smcpm0 \$c10,\(\$11\+\),0
+ 8bc: f1 35 38 f0 smcpm0 \$c1,\(\$3\+\),-16
+ 8c0: fb f5 38 f8 smcpm0 \$c11,\(\$sp\+\),-8
+
+000008c4 <lmcpm0>:
+ 8c4: fe a5 78 00 lmcpm0 \$c14,\(\$10\+\),0
+ 8c8: f6 f5 78 f0 lmcpm0 \$c6,\(\$sp\+\),-16
+ 8cc: fd 15 78 08 lmcpm0 \$c13,\(\$1\+\),8
+ 8d0: fa d5 78 e8 lmcpm0 \$c10,\(\$tp\+\),-24
+ 8d4: f7 e5 78 e8 lmcpm0 \$c7,\(\$gp\+\),-24
+
+000008d8 <sbcpm1>:
+ 8d8: f9 85 0c 00 sbcpm1 \$c9,\(\$8\+\),0
+ 8dc: f7 c5 0c e8 sbcpm1 \$c7,\(\$12\+\),-24
+ 8e0: ff 55 0c e8 sbcpm1 \$c15,\(\$5\+\),-24
+ 8e4: f5 d5 0c 10 sbcpm1 \$c5,\(\$tp\+\),16
+ 8e8: f6 15 0c 80 sbcpm1 \$c6,\(\$1\+\),-128
+
+000008ec <lbcpm1>:
+ 8ec: f6 e5 4c 02 lbcpm1 \$c6,\(\$gp\+\),2
+ 8f0: f7 d5 4c fe lbcpm1 \$c7,\(\$tp\+\),-2
+ 8f4: f4 d5 4c 01 lbcpm1 \$c4,\(\$tp\+\),1
+ 8f8: fc 25 4c fe lbcpm1 \$c12,\(\$2\+\),-2
+ 8fc: fb 75 4c 01 lbcpm1 \$c11,\(\$7\+\),1
+
+00000900 <shcpm1>:
+ 900: f4 85 1c 18 shcpm1 \$c4,\(\$8\+\),24
+ 904: fb 65 1c f0 shcpm1 \$c11,\(\$6\+\),-16
+ 908: f7 85 1c 08 shcpm1 \$c7,\(\$8\+\),8
+ 90c: f5 c5 1c 10 shcpm1 \$c5,\(\$12\+\),16
+ 910: f0 85 1c e0 shcpm1 \$c0,\(\$8\+\),-32
+
+00000914 <lhcpm1>:
+ 914: fb 05 5c 00 lhcpm1 \$c11,\(\$0\+\),0
+ 918: f7 d5 5c fe lhcpm1 \$c7,\(\$tp\+\),-2
+ 91c: fa 85 5c 08 lhcpm1 \$c10,\(\$8\+\),8
+ 920: f3 d5 5c 00 lhcpm1 \$c3,\(\$tp\+\),0
+ 924: f9 65 5c 02 lhcpm1 \$c9,\(\$6\+\),2
+
+00000928 <swcpm1>:
+ 928: f9 85 2c 18 swcpm1 \$c9,\(\$8\+\),24
+ 92c: f9 e5 2c 00 swcpm1 \$c9,\(\$gp\+\),0
+ 930: f9 85 2c 10 swcpm1 \$c9,\(\$8\+\),16
+ 934: fe 15 2c 00 swcpm1 \$c14,\(\$1\+\),0
+ 938: f2 f5 2c 08 swcpm1 \$c2,\(\$sp\+\),8
+
+0000093c <lwcpm1>:
+ 93c: f8 85 6c 00 lwcpm1 \$c8,\(\$8\+\),0
+ 940: f3 e5 6c f0 lwcpm1 \$c3,\(\$gp\+\),-16
+ 944: f7 65 6c f8 lwcpm1 \$c7,\(\$6\+\),-8
+ 948: fe 85 6c e8 lwcpm1 \$c14,\(\$8\+\),-24
+ 94c: f3 85 6c 18 lwcpm1 \$c3,\(\$8\+\),24
+
+00000950 <smcpm1>:
+ 950: fa 45 3c 00 smcpm1 \$c10,\(\$4\+\),0
+ 954: f6 f5 3c f0 smcpm1 \$c6,\(\$sp\+\),-16
+ 958: fd 75 3c e8 smcpm1 \$c13,\(\$7\+\),-24
+ 95c: f3 e5 3c f8 smcpm1 \$c3,\(\$gp\+\),-8
+ 960: f0 25 3c 08 smcpm1 \$c0,\(\$2\+\),8
+
+00000964 <lmcpm1>:
+ 964: fc 15 7c 00 lmcpm1 \$c12,\(\$1\+\),0
+ 968: f0 65 7c 08 lmcpm1 \$c0,\(\$6\+\),8
+ 96c: f6 25 7c f8 lmcpm1 \$c6,\(\$2\+\),-8
+ 970: fc e5 7c f0 lmcpm1 \$c12,\(\$gp\+\),-16
+ 974: fe f5 7c 30 lmcpm1 \$c14,\(\$sp\+\),48
+
+00000... <bcpeq>:
+ ...: d8 44 00 00 bcpeq 0x4,... <bcpeq>
+ ...: d8 04 ff ff bcpeq 0x0,... <bcpeq\+0x2>
+ ...: d8 44 ff ff bcpeq 0x4,... <bcpeq\+0x6>
+ ...: d8 14 00 01 bcpeq 0x1,... <bcpeq\+0xe>
+ ...: d8 24 00 01 bcpeq 0x2,... <bcpeq\+0x12>
+
+00000... <bcpne>:
+ ...: d8 25 00 00 bcpne 0x2,... <bcpne>
+ ...: d8 45 00 00 bcpne 0x4,... <bcpne\+0x4>
+ ...: d8 15 00 00 bcpne 0x1,... <bcpne\+0x8>
+ ...: d8 45 00 00 bcpne 0x4,... <bcpne\+0xc>
+ ...: d8 15 00 01 bcpne 0x1,... <bcpne\+0x12>
+
+00000... <bcpat>:
+ ...: d8 16 ff ff bcpat 0x1,... <bcpne\+0x12>
+ ...: d8 06 00 01 bcpat 0x0,... <bcpat\+0x6>
+ ...: d8 06 ff ff bcpat 0x0,... <bcpat\+0x6>
+ ...: d8 26 00 00 bcpat 0x2,... <bcpat\+0xc>
+ ...: d8 16 ff ff bcpat 0x1,... <bcpat\+0xe>
+
+00000... <bcpaf>:
+ ...: d8 47 00 00 bcpaf 0x4,... <bcpaf>
+ ...: d8 37 00 00 bcpaf 0x3,... <bcpaf\+0x4>
+ ...: d8 47 00 00 bcpaf 0x4,... <bcpaf\+0x8>
+ ...: d8 17 00 01 bcpaf 0x1,... <bcpaf\+0xe>
+ ...: d8 47 00 01 bcpaf 0x4,... <bcpaf\+0x12>
+
+00000... <synccp>:
+ ...: 70 21 synccp
+
+00000... <jsrv>:
+ ...: 18 bf jsrv \$11
+ ...: 18 5f jsrv \$5
+ ...: 18 af jsrv \$10
+ ...: 18 cf jsrv \$12
+ ...: 18 af jsrv \$10
+
+00000... <bsrv>:
+ ...: df fb ff ff bsrv ... <jsrv\+0x8>
+ ...: df fb ff ff bsrv ... <bsrv\+0x2>
+ ...: df fb ff ff bsrv ... <bsrv\+0x6>
+ ...: d8 1b 00 00 bsrv ... <bsrv\+0xe>
+ ...: d8 0b 00 00 bsrv ... <bsrv\+0x10>
+
+00000... <case106341>:
+ ...: 7a 78 stc \$10,\$hi
+ ...: 70 8a ldc \$0,\$lo
+
+00000... <case106821>:
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 08 sb \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 09 sh \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0a sw \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0c lb \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0d lh \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0e lw \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0b lbu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: 00 0f lhu \$0,\(\$0\)
+ ...: c0 08 00 01 sb \$0,1\(\$0\)
+ ...: c0 08 00 01 sb \$0,1\(\$0\)
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: c0 08 00 01 sb \$0,1\(\$0\)
+ ...: c0 08 00 01 sb \$0,1\(\$0\)
+ ...: c0 09 00 01 sh \$0,1\(\$0\)
+ ...: c0 09 00 01 sh \$0,1\(\$0\)
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: c0 09 00 01 sh \$0,1\(\$0\)
+ ...: c0 09 00 01 sh \$0,1\(\$0\)
+ ...: c0 0a 00 01 sw \$0,1\(\$0\)
+ ...: c0 0a 00 01 sw \$0,1\(\$0\)
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: c0 0a 00 01 sw \$0,1\(\$0\)
+ ...: c0 0a 00 01 sw \$0,1\(\$0\)
+ ...: c0 0c 00 01 lb \$0,1\(\$0\)
+ ...: c0 0c 00 01 lb \$0,1\(\$0\)
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: c0 0c 00 01 lb \$0,1\(\$0\)
+ ...: c0 0c 00 01 lb \$0,1\(\$0\)
+ ...: c0 0d 00 01 lh \$0,1\(\$0\)
+ ...: c0 0d 00 01 lh \$0,1\(\$0\)
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: c0 0d 00 01 lh \$0,1\(\$0\)
+ ...: c0 0d 00 01 lh \$0,1\(\$0\)
+ ...: c0 0e 00 01 lw \$0,1\(\$0\)
+ ...: c0 0e 00 01 lw \$0,1\(\$0\)
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: c0 0e 00 01 lw \$0,1\(\$0\)
+ ...: c0 0e 00 01 lw \$0,1\(\$0\)
+ ...: c0 0b 00 01 lbu \$0,1\(\$0\)
+ ...: c0 0b 00 01 lbu \$0,1\(\$0\)
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: c0 0b 00 01 lbu \$0,1\(\$0\)
+ ...: c0 0b 00 01 lbu \$0,1\(\$0\)
+ ...: c0 0f 00 01 lhu \$0,1\(\$0\)
+ ...: c0 0f 00 01 lhu \$0,1\(\$0\)
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: c0 0f 00 01 lhu \$0,1\(\$0\)
+ ...: c0 0f 00 01 lhu \$0,1\(\$0\)
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 08 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 09 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0a 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0c 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0d 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0e 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0b 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: c0 0f 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
diff --git a/gas/testsuite/gas/mep/allinsn.exp b/gas/testsuite/gas/mep/allinsn.exp
new file mode 100644
index 0000000000..259ed10b1a
--- /dev/null
+++ b/gas/testsuite/gas/mep/allinsn.exp
@@ -0,0 +1,9 @@
+# MEP assembler testsuite. -*- Tcl -*-
+
+if [istarget mep*-*-*] {
+ foreach test {allinsn dj1 dj2} {
+ run_dump_test $test
+ run_dump_test $test.le
+ }
+ run_dump_test branch1
+}
diff --git a/gas/testsuite/gas/mep/allinsn.le.d b/gas/testsuite/gas/mep/allinsn.le.d
new file mode 100644
index 0000000000..2d9c50bad6
--- /dev/null
+++ b/gas/testsuite/gas/mep/allinsn.le.d
@@ -0,0 +1,1346 @@
+#as: -EL
+#objdump: -dr
+#source: allinsn.s
+#name: allinsn.le
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <sb>:
+ 0: 88 07 sb \$7,\(\$8\)
+ 2: 98 05 sb \$5,\(\$9\)
+ 4: e8 07 sb \$7,\(\$gp\)
+ 6: 88 0e sb \$gp,\(\$8\)
+ 8: e8 0f sb \$sp,\(\$gp\)
+
+0000000a <sh>:
+ a: 89 03 sh \$3,\(\$8\)
+ c: 19 0c sh \$12,\(\$1\)
+ e: 29 0d sh \$tp,\(\$2\)
+ 10: 89 02 sh \$2,\(\$8\)
+ 12: a9 0c sh \$12,\(\$10\)
+
+00000014 <sw>:
+ 14: 0a 0b sw \$11,\(\$0\)
+ 16: 7a 03 sw \$3,\(\$7\)
+ 18: ea 0d sw \$tp,\(\$gp\)
+ 1a: 9a 08 sw \$8,\(\$9\)
+ 1c: 8a 0e sw \$gp,\(\$8\)
+
+0000001e <lb>:
+ 1e: bc 0c lb \$12,\(\$11\)
+ 20: 2c 09 lb \$9,\(\$2\)
+ 22: bc 08 lb \$8,\(\$11\)
+ 24: 2c 0e lb \$gp,\(\$2\)
+ 26: cc 02 lb \$2,\(\$12\)
+
+00000028 <lh>:
+ 28: 8d 0f lh \$sp,\(\$8\)
+ 2a: ad 03 lh \$3,\(\$10\)
+ 2c: fd 09 lh \$9,\(\$sp\)
+ 2e: fd 06 lh \$6,\(\$sp\)
+ 30: bd 0f lh \$sp,\(\$11\)
+
+00000032 <lw>:
+ 32: ae 0c lw \$12,\(\$10\)
+ 34: de 09 lw \$9,\(\$tp\)
+ 36: ee 0c lw \$12,\(\$gp\)
+ 38: be 0c lw \$12,\(\$11\)
+ 3a: ae 0d lw \$tp,\(\$10\)
+
+0000003c <lbu>:
+ 3c: eb 0e lbu \$gp,\(\$gp\)
+ 3e: 8b 0c lbu \$12,\(\$8\)
+ 40: 1b 0e lbu \$gp,\(\$1\)
+ 42: cb 08 lbu \$8,\(\$12\)
+ 44: 1b 0c lbu \$12,\(\$1\)
+
+00000046 <lhu>:
+ 46: 4f 0f lhu \$sp,\(\$4\)
+ 48: 4f 0e lhu \$gp,\(\$4\)
+ 4a: 4f 05 lhu \$5,\(\$4\)
+ 4c: df 0f lhu \$sp,\(\$tp\)
+ 4e: ff 04 lhu \$4,\(\$sp\)
+
+00000050 <sw_sp>:
+ 50: 8a c9 03 00 sw \$9,3\(\$8\)
+ 54: 5a ca 04 00 sw \$10,4\(\$5\)
+ 58: ea c0 03 00 sw \$0,3\(\$gp\)
+ 5c: 8a c0 02 00 sw \$0,2\(\$8\)
+ 60: 8a cf 01 00 sw \$sp,1\(\$8\)
+
+00000064 <lw_sp>:
+ 64: 5e cd 01 00 lw \$tp,1\(\$5\)
+ 68: 0e cf 01 00 lw \$sp,1\(\$0\)
+ 6c: ce c0 04 00 lw \$0,4\(\$12\)
+ 70: de cb 01 00 lw \$11,1\(\$tp\)
+ 74: 4e c9 03 00 lw \$9,3\(\$4\)
+
+00000078 <sb_tp>:
+ 78: 18 c5 01 00 sb \$5,1\(\$1\)
+ 7c: 98 ca 01 00 sb \$10,1\(\$9\)
+ 80: 38 c5 03 00 sb \$5,3\(\$3\)
+ 84: 38 c5 01 00 sb \$5,1\(\$3\)
+ 88: 48 ca 04 00 sb \$10,4\(\$4\)
+
+0000008c <sh_tp>:
+ 8c: 09 c3 01 00 sh \$3,1\(\$0\)
+ 90: 99 cd 01 00 sh \$tp,1\(\$9\)
+ 94: a9 c9 04 00 sh \$9,4\(\$10\)
+ 98: e9 cf 03 00 sh \$sp,3\(\$gp\)
+ 9c: 99 ce 04 00 sh \$gp,4\(\$9\)
+
+000000a0 <sw_tp>:
+ a0: da c6 02 00 sw \$6,2\(\$tp\)
+ a4: fa c6 01 00 sw \$6,1\(\$sp\)
+ a8: 3a c2 02 00 sw \$2,2\(\$3\)
+ ac: ca c6 02 00 sw \$6,2\(\$12\)
+ b0: ba c3 01 00 sw \$3,1\(\$11\)
+
+000000b4 <lb_tp>:
+ b4: bc cd 04 00 lb \$tp,4\(\$11\)
+ b8: 8c cd 04 00 lb \$tp,4\(\$8\)
+ bc: 5c c5 04 00 lb \$5,4\(\$5\)
+ c0: ec cf 02 00 lb \$sp,2\(\$gp\)
+ c4: 3c c3 02 00 lb \$3,2\(\$3\)
+
+000000c8 <lh_tp>:
+ c8: 8d c7 02 00 lh \$7,2\(\$8\)
+ cc: 8d c4 03 00 lh \$4,3\(\$8\)
+ d0: fd ce 01 00 lh \$gp,1\(\$sp\)
+ d4: 0d c9 01 00 lh \$9,1\(\$0\)
+ d8: 0d cd 02 00 lh \$tp,2\(\$0\)
+
+000000dc <lw_tp>:
+ dc: 07 48 lw \$8,0x4\(\$sp\)
+ de: 9e cb 04 00 lw \$11,4\(\$9\)
+ e2: 2e ce 01 00 lw \$gp,1\(\$2\)
+ e6: ee c9 02 00 lw \$9,2\(\$gp\)
+ ea: ce c8 01 00 lw \$8,1\(\$12\)
+
+000000ee <lbu_tp>:
+ ee: 9b cc 01 00 lbu \$12,1\(\$9\)
+ f2: 9b cb 01 00 lbu \$11,1\(\$9\)
+ f6: 8b ce 03 00 lbu \$gp,3\(\$8\)
+ fa: fb c0 02 00 lbu \$0,2\(\$sp\)
+ fe: bb cd 01 00 lbu \$tp,1\(\$11\)
+
+00000102 <lhu_tp>:
+ 102: af ce 02 00 lhu \$gp,2\(\$10\)
+ 106: 8f cb 01 00 lhu \$11,1\(\$8\)
+ 10a: 0f c1 01 00 lhu \$1,1\(\$0\)
+ 10e: ff c7 02 00 lhu \$7,2\(\$sp\)
+ 112: 83 8b lhu \$3,0x2\(\$tp\)
+
+00000114 <sb16>:
+ 114: b8 c7 ff ff sb \$7,-1\(\$11\)
+ 118: e8 cd 01 00 sb \$tp,1\(\$gp\)
+ 11c: e8 c3 01 00 sb \$3,1\(\$gp\)
+ 120: 68 ce 02 00 sb \$gp,2\(\$6\)
+ 124: 78 ce 01 00 sb \$gp,1\(\$7\)
+
+00000128 <sh16>:
+ 128: 49 cc ff ff sh \$12,-1\(\$4\)
+ 12c: 19 cf 01 00 sh \$sp,1\(\$1\)
+ 130: c9 c2 fe ff sh \$2,-2\(\$12\)
+ 134: b9 c9 02 00 sh \$9,2\(\$11\)
+ 138: c9 c9 fe ff sh \$9,-2\(\$12\)
+
+0000013c <sw16>:
+ 13c: ea cb ff ff sw \$11,-1\(\$gp\)
+ 140: 06 44 sw \$4,0x4\(\$sp\)
+ 142: 3a c2 fe ff sw \$2,-2\(\$3\)
+ 146: 2a c6 ff ff sw \$6,-1\(\$2\)
+ 14a: da c8 fe ff sw \$8,-2\(\$tp\)
+
+0000014e <lb16>:
+ 14e: 2c ca fe ff lb \$10,-2\(\$2\)
+ 152: bc c3 fe ff lb \$3,-2\(\$11\)
+ 156: 5c cc 01 00 lb \$12,1\(\$5\)
+ 15a: 5c c5 01 00 lb \$5,1\(\$5\)
+ 15e: dc cb 02 00 lb \$11,2\(\$tp\)
+
+00000162 <lh16>:
+ 162: bd cf ff ff lh \$sp,-1\(\$11\)
+ 166: bd cd fe ff lh \$tp,-2\(\$11\)
+ 16a: ad c2 01 00 lh \$2,1\(\$10\)
+ 16e: 7d c8 ff ff lh \$8,-1\(\$7\)
+ 172: bd ce ff ff lh \$gp,-1\(\$11\)
+
+00000176 <lw16>:
+ 176: 5e c0 ff ff lw \$0,-1\(\$5\)
+ 17a: 7e cc fe ff lw \$12,-2\(\$7\)
+ 17e: 3e c1 fe ff lw \$1,-2\(\$3\)
+ 182: 7e c1 02 00 lw \$1,2\(\$7\)
+ 186: 8e c4 01 00 lw \$4,1\(\$8\)
+
+0000018a <lbu16>:
+ 18a: 4b cc ff ff lbu \$12,-1\(\$4\)
+ 18e: bb ce 01 00 lbu \$gp,1\(\$11\)
+ 192: db c1 ff ff lbu \$1,-1\(\$tp\)
+ 196: db c9 ff ff lbu \$9,-1\(\$tp\)
+ 19a: fb c8 01 00 lbu \$8,1\(\$sp\)
+
+0000019e <lhu16>:
+ 19e: ff cd ff ff lhu \$tp,-1\(\$sp\)
+ 1a2: 8f ce 02 00 lhu \$gp,2\(\$8\)
+ 1a6: cf cf ff ff lhu \$sp,-1\(\$12\)
+ 1aa: 0f c3 ff ff lhu \$3,-1\(\$0\)
+ 1ae: cf c3 fe ff lhu \$3,-2\(\$12\)
+
+000001b2 <sw24>:
+ 1b2: 06 eb 00 00 sw \$11,\(0x4\)
+ 1b6: 06 ef 00 00 sw \$sp,\(0x4\)
+ 1ba: 0a e7 00 00 sw \$7,\(0x8\)
+ 1be: 12 ea 00 00 sw \$10,\(0x10\)
+ 1c2: a2 e8 00 00 sw \$8,\(0xa0\)
+
+000001c6 <lw24>:
+ 1c6: 07 e4 00 00 lw \$4,\(0x4\)
+ 1ca: 07 ef 00 00 lw \$sp,\(0x4\)
+ 1ce: 13 e4 00 00 lw \$4,\(0x10\)
+ 1d2: 03 e8 00 00 lw \$8,\(0x0\)
+ 1d6: 0b ed 00 00 lw \$tp,\(0x8\)
+
+000001da <extb>:
+ 1da: 0d 1d extb \$tp
+ 1dc: 0d 1d extb \$tp
+ 1de: 0d 16 extb \$6
+ 1e0: 0d 1e extb \$gp
+ 1e2: 0d 1a extb \$10
+
+000001e4 <exth>:
+ 1e4: 2d 1f exth \$sp
+ 1e6: 2d 12 exth \$2
+ 1e8: 2d 15 exth \$5
+ 1ea: 2d 1a exth \$10
+ 1ec: 2d 14 exth \$4
+
+000001ee <extub>:
+ 1ee: 8d 12 extub \$2
+ 1f0: 8d 1d extub \$tp
+ 1f2: 8d 13 extub \$3
+ 1f4: 8d 19 extub \$9
+ 1f6: 8d 1e extub \$gp
+
+000001f8 <extuh>:
+ 1f8: ad 18 extuh \$8
+ 1fa: ad 18 extuh \$8
+ 1fc: ad 14 extuh \$4
+ 1fe: ad 10 extuh \$0
+ 200: ad 10 extuh \$0
+
+00000202 <ssarb>:
+ 202: 8c 12 ssarb 2\(\$8\)
+ 204: dc 12 ssarb 2\(\$tp\)
+ 206: dc 11 ssarb 1\(\$tp\)
+ 208: 5c 12 ssarb 2\(\$5\)
+ 20a: 9c 10 ssarb 0\(\$9\)
+
+0000020c <mov>:
+ 20c: 30 02 mov \$2,\$3
+ 20e: b0 03 mov \$3,\$11
+ 210: a0 0f mov \$sp,\$10
+ 212: 00 0f mov \$sp,\$0
+ 214: d0 03 mov \$3,\$tp
+
+00000216 <movi8>:
+ 216: ff 5b mov \$11,-1
+ 218: 02 56 mov \$6,2
+ 21a: ff 5f mov \$sp,-1
+ 21c: 01 5f mov \$sp,1
+ 21e: ff 5e mov \$gp,-1
+
+00000220 <movi16>:
+ 220: 00 5f mov \$sp,0
+ 222: 02 50 mov \$0,2
+ 224: ff 58 mov \$8,-1
+ 226: 01 5c mov \$12,1
+ 228: ff 57 mov \$7,-1
+
+0000022a <movu24>:
+ 22a: 01 d2 00 00 movu \$2,0x1
+ 22e: 11 ca 04 00 movu \$10,0x4
+ 232: 11 c9 00 00 movu \$9,0x0
+ 236: 03 d4 00 00 movu \$4,0x3
+ 23a: 11 ce 01 00 movu \$gp,0x1
+
+0000023e <movu16>:
+ 23e: 11 cf 01 00 movu \$sp,0x1
+ 242: 03 d6 00 00 movu \$6,0x3
+ 246: 03 d0 00 00 movu \$0,0x3
+ 24a: 11 ce 03 00 movu \$gp,0x3
+ 24e: 11 ca 02 00 movu \$10,0x2
+
+00000252 <movh>:
+ 252: 21 c8 02 00 movh \$8,0x2
+ 256: 21 cd 01 00 movh \$tp,0x1
+ 25a: 21 ce 02 00 movh \$gp,0x2
+ 25e: 21 cc 00 00 movh \$12,0x0
+ 262: 21 cb 02 00 movh \$11,0x2
+
+00000266 <add3>:
+ 266: 36 9b add3 \$6,\$11,\$3
+ 268: 5e 9d add3 \$gp,\$tp,\$5
+ 26a: 73 9b add3 \$3,\$11,\$7
+ 26c: dd 9e add3 \$tp,\$gp,\$tp
+ 26e: 80 9e add3 \$0,\$gp,\$8
+
+00000270 <add>:
+ 270: 08 6c add \$12,2
+ 272: fc 6c add \$12,-1
+ 274: 04 64 add \$4,1
+ 276: 04 66 add \$6,1
+ 278: 08 66 add \$6,2
+
+0000027a <add3i>:
+ 27a: 04 4b add3 \$11,\$sp,0x4
+ 27c: f0 c4 01 00 add3 \$4,\$sp,1
+ 280: 00 40 add3 \$0,\$sp,0x0
+ 282: f0 cd 03 00 add3 \$tp,\$sp,3
+ 286: 00 4b add3 \$11,\$sp,0x0
+
+00000288 <advck3>:
+ 288: a7 0e advck3 \$0,\$gp,\$10
+ 28a: 07 0d advck3 \$0,\$tp,\$0
+ 28c: d7 0e advck3 \$0,\$gp,\$tp
+ 28e: 87 07 advck3 \$0,\$7,\$8
+ 290: 27 01 advck3 \$0,\$1,\$2
+
+00000292 <sub>:
+ 292: e4 08 sub \$8,\$gp
+ 294: 94 01 sub \$1,\$9
+ 296: 74 0d sub \$tp,\$7
+ 298: 34 0f sub \$sp,\$3
+ 29a: 74 02 sub \$2,\$7
+
+0000029c <sbvck3>:
+ 29c: e5 03 sbvck3 \$0,\$3,\$gp
+ 29e: 75 03 sbvck3 \$0,\$3,\$7
+ 2a0: a5 0a sbvck3 \$0,\$10,\$10
+ 2a2: d5 04 sbvck3 \$0,\$4,\$tp
+ 2a4: f5 0a sbvck3 \$0,\$10,\$sp
+
+000002a6 <neg>:
+ 2a6: 71 0e neg \$gp,\$7
+ 2a8: 71 01 neg \$1,\$7
+ 2aa: b1 02 neg \$2,\$11
+ 2ac: 81 0d neg \$tp,\$8
+ 2ae: d1 0e neg \$gp,\$tp
+
+000002b0 <slt3>:
+ 2b0: 82 0e slt3 \$0,\$gp,\$8
+ 2b2: d2 04 slt3 \$0,\$4,\$tp
+ 2b4: e2 0a slt3 \$0,\$10,\$gp
+ 2b6: 52 0e slt3 \$0,\$gp,\$5
+ 2b8: c2 03 slt3 \$0,\$3,\$12
+
+000002ba <sltu3>:
+ 2ba: 83 02 sltu3 \$0,\$2,\$8
+ 2bc: b3 0e sltu3 \$0,\$gp,\$11
+ 2be: d3 02 sltu3 \$0,\$2,\$tp
+ 2c0: 83 09 sltu3 \$0,\$9,\$8
+ 2c2: 93 06 sltu3 \$0,\$6,\$9
+
+000002c4 <slt3i>:
+ 2c4: 11 66 slt3 \$0,\$6,0x2
+ 2c6: 09 6b slt3 \$0,\$11,0x1
+ 2c8: 01 6f slt3 \$0,\$sp,0x0
+ 2ca: 01 63 slt3 \$0,\$3,0x0
+ 2cc: 01 6d slt3 \$0,\$tp,0x0
+
+000002ce <sltu3i>:
+ 2ce: 25 6e sltu3 \$0,\$gp,0x4
+ 2d0: 1d 6d sltu3 \$0,\$tp,0x3
+ 2d2: 0d 63 sltu3 \$0,\$3,0x1
+ 2d4: 05 6c sltu3 \$0,\$12,0x0
+ 2d6: 1d 61 sltu3 \$0,\$1,0x3
+
+000002d8 <sl1ad3>:
+ 2d8: e6 28 sl1ad3 \$0,\$8,\$gp
+ 2da: 26 24 sl1ad3 \$0,\$4,\$2
+ 2dc: c6 2f sl1ad3 \$0,\$sp,\$12
+ 2de: 16 29 sl1ad3 \$0,\$9,\$1
+ 2e0: 26 28 sl1ad3 \$0,\$8,\$2
+
+000002e2 <sl2ad3>:
+ 2e2: d7 28 sl2ad3 \$0,\$8,\$tp
+ 2e4: 37 22 sl2ad3 \$0,\$2,\$3
+ 2e6: 97 28 sl2ad3 \$0,\$8,\$9
+ 2e8: c7 27 sl2ad3 \$0,\$7,\$12
+ 2ea: c7 24 sl2ad3 \$0,\$4,\$12
+
+000002ec <add3x>:
+ 2ec: b0 cd 01 00 add3 \$tp,\$11,1
+ 2f0: 40 cd ff ff add3 \$tp,\$4,-1
+ 2f4: d0 c2 01 00 add3 \$2,\$tp,1
+ 2f8: e0 c3 01 00 add3 \$3,\$gp,1
+ 2fc: f0 ca 02 00 add3 \$10,\$sp,2
+
+00000300 <slt3x>:
+ 300: 12 c8 ff ff slt3 \$8,\$1,-1
+ 304: 32 c0 fe ff slt3 \$0,\$3,-2
+ 308: f2 c9 ff ff slt3 \$9,\$sp,-1
+ 30c: 82 c3 02 00 slt3 \$3,\$8,2
+ 310: e2 cd 00 00 slt3 \$tp,\$gp,0
+
+00000314 <sltu3x>:
+ 314: b3 cf 02 00 sltu3 \$sp,\$11,0x2
+ 318: 03 c6 01 00 sltu3 \$6,\$0,0x1
+ 31c: b3 c9 03 00 sltu3 \$9,\$11,0x3
+ 320: 05 64 sltu3 \$0,\$4,0x0
+ 322: e3 cd 04 00 sltu3 \$tp,\$gp,0x4
+
+00000326 <or>:
+ 326: e0 1f or \$sp,\$gp
+ 328: 30 18 or \$8,\$3
+ 32a: f0 10 or \$0,\$sp
+ 32c: 00 1d or \$tp,\$0
+ 32e: 60 18 or \$8,\$6
+
+00000330 <and>:
+ 330: f1 1f and \$sp,\$sp
+ 332: e1 16 and \$6,\$gp
+ 334: 21 14 and \$4,\$2
+ 336: 81 15 and \$5,\$8
+ 338: e1 17 and \$7,\$gp
+
+0000033a <xor>:
+ 33a: c2 11 xor \$1,\$12
+ 33c: d2 1c xor \$12,\$tp
+ 33e: 82 1a xor \$10,\$8
+ 340: b2 1f xor \$sp,\$11
+ 342: 82 1c xor \$12,\$8
+
+00000344 <nor>:
+ 344: 53 19 nor \$9,\$5
+ 346: 23 18 nor \$8,\$2
+ 348: 93 1f nor \$sp,\$9
+ 34a: f3 15 nor \$5,\$sp
+ 34c: e3 1f nor \$sp,\$gp
+
+0000034e <or3>:
+ 34e: f4 cd 02 00 or3 \$tp,\$sp,0x2
+ 352: d4 cf 03 00 or3 \$sp,\$tp,0x3
+ 356: a4 c0 04 00 or3 \$0,\$10,0x4
+ 35a: f4 c9 03 00 or3 \$9,\$sp,0x3
+ 35e: f4 c9 00 00 or3 \$9,\$sp,0x0
+
+00000362 <and3>:
+ 362: 85 c5 01 00 and3 \$5,\$8,0x1
+ 366: e5 cb 03 00 and3 \$11,\$gp,0x3
+ 36a: 05 c6 00 00 and3 \$6,\$0,0x0
+ 36e: f5 cf 00 00 and3 \$sp,\$sp,0x0
+ 372: a5 c1 03 00 and3 \$1,\$10,0x3
+
+00000376 <xor3>:
+ 376: 06 c0 02 00 xor3 \$0,\$0,0x2
+ 37a: 66 cf 00 00 xor3 \$sp,\$6,0x0
+ 37e: 56 cd 00 00 xor3 \$tp,\$5,0x0
+ 382: 76 cf 00 00 xor3 \$sp,\$7,0x0
+ 386: f6 cf 02 00 xor3 \$sp,\$sp,0x2
+
+0000038a <sra>:
+ 38a: 1d 24 sra \$4,\$1
+ 38c: fd 28 sra \$8,\$sp
+ 38e: 1d 21 sra \$1,\$1
+ 390: 5d 20 sra \$0,\$5
+ 392: 1d 29 sra \$9,\$1
+
+00000394 <srl>:
+ 394: bc 22 srl \$2,\$11
+ 396: 7c 2f srl \$sp,\$7
+ 398: 7c 21 srl \$1,\$7
+ 39a: dc 23 srl \$3,\$tp
+ 39c: 1c 2e srl \$gp,\$1
+
+0000039e <sll>:
+ 39e: 0e 2b sll \$11,\$0
+ 3a0: 8e 2d sll \$tp,\$8
+ 3a2: 9e 28 sll \$8,\$9
+ 3a4: fe 2d sll \$tp,\$sp
+ 3a6: fe 2f sll \$sp,\$sp
+
+000003a8 <srai>:
+ 3a8: 13 61 sra \$1,0x2
+ 3aa: 1b 6f sra \$sp,0x3
+ 3ac: 1b 6f sra \$sp,0x3
+ 3ae: 23 66 sra \$6,0x4
+ 3b0: 1b 6f sra \$sp,0x3
+
+000003b2 <srli>:
+ 3b2: 02 6a srl \$10,0x0
+ 3b4: 1a 69 srl \$9,0x3
+ 3b6: 22 66 srl \$6,0x4
+ 3b8: 12 6a srl \$10,0x2
+ 3ba: 1a 68 srl \$8,0x3
+
+000003bc <slli>:
+ 3bc: 06 60 sll \$0,0x0
+ 3be: 06 64 sll \$4,0x0
+ 3c0: 16 6d sll \$tp,0x2
+ 3c2: 16 6b sll \$11,0x2
+ 3c4: 06 66 sll \$6,0x0
+
+000003c6 <sll3>:
+ 3c6: 27 6d sll3 \$0,\$tp,0x4
+ 3c8: 07 6e sll3 \$0,\$gp,0x0
+ 3ca: 17 68 sll3 \$0,\$8,0x2
+ 3cc: 17 63 sll3 \$0,\$3,0x2
+ 3ce: 07 68 sll3 \$0,\$8,0x0
+
+000003d0 <fsft>:
+ 3d0: af 2e fsft \$gp,\$10
+ 3d2: 9f 2e fsft \$gp,\$9
+ 3d4: df 2f fsft \$sp,\$tp
+ 3d6: 3f 2b fsft \$11,\$3
+ 3d8: 3f 25 fsft \$5,\$3
+
+000003da <bra>:
+ 3da: 02 b0 bra 3dc <bra\+0x2>
+ 3dc: fe bf bra 3da <bra>
+ 3de: 02 b0 bra 3e0 <bra\+0x6>
+ 3e0: 00 b0 bra 3e0 <bra\+0x6>
+ 3e2: 02 b0 bra 3e4 <beqz>
+
+000003e4 <beqz>:
+ 3e4: fe a1 beqz \$1,3e2 <bra\+0x8>
+ 3e6: 02 af beqz \$sp,3e8 <beqz\+0x4>
+ 3e8: 04 a4 beqz \$4,3ec <beqz\+0x8>
+ 3ea: 00 a4 beqz \$4,3ea <beqz\+0x6>
+ 3ec: fe a9 beqz \$9,3ea <beqz\+0x6>
+
+000003ee <bnez>:
+ 3ee: 03 a8 bnez \$8,3f0 <bnez\+0x2>
+ 3f0: 03 ad bnez \$tp,3f2 <bnez\+0x4>
+ 3f2: 01 ae bnez \$gp,3f2 <bnez\+0x4>
+ 3f4: 03 a6 bnez \$6,3f6 <bnez\+0x8>
+ 3f6: fd a8 bnez \$8,3f2 <bnez\+0x4>
+
+000003f8 <beqi>:
+ 3f8: 30 ed 00 00 beqi \$tp,0x3,3f8 <beqi>
+ 3fc: 40 e0 ff ff beqi \$0,0x4,3fa <beqi\+0x2>
+ 400: 40 ef ff ff beqi \$sp,0x4,3fe <beqi\+0x6>
+ 404: 20 ed 00 00 beqi \$tp,0x2,404 <beqi\+0xc>
+ 408: 20 e4 fc ff beqi \$4,0x2,400 <beqi\+0x8>
+
+0000040c <bnei>:
+ 40c: 14 e8 00 00 bnei \$8,0x1,40c <bnei>
+ 410: 14 e5 01 00 bnei \$5,0x1,412 <bnei\+0x6>
+ 414: 04 e5 04 00 bnei \$5,0x0,41c <bnei\+0x10>
+ 418: 44 e9 ff ff bnei \$9,0x4,416 <bnei\+0xa>
+ 41c: 44 e0 fc ff bnei \$0,0x4,414 <bnei\+0x8>
+
+00000420 <blti>:
+ 420: 3c e7 00 00 blti \$7,0x3,420 <blti>
+ 424: 1c e1 00 00 blti \$1,0x1,424 <blti\+0x4>
+ 428: 2c e8 01 00 blti \$8,0x2,42a <blti\+0xa>
+ 42c: 2c eb 01 00 blti \$11,0x2,42e <blti\+0xe>
+ 430: 3c ef ff ff blti \$sp,0x3,42e <blti\+0xe>
+
+00000434 <bgei>:
+ 434: 38 e4 fc ff bgei \$4,0x3,42c <blti\+0xc>
+ 438: 08 e7 01 00 bgei \$7,0x0,43a <bgei\+0x6>
+ 43c: 18 ed 00 00 bgei \$tp,0x1,43c <bgei\+0x8>
+ 440: 28 e5 ff ff bgei \$5,0x2,43e <bgei\+0xa>
+ 444: 48 ec fc ff bgei \$12,0x4,43c <bgei\+0x8>
+
+00000448 <beq>:
+ 448: 21 e7 ff ff beq \$7,\$2,446 <bgei\+0x12>
+ 44c: 31 e1 fc ff beq \$1,\$3,444 <bgei\+0x10>
+ 450: 01 e2 01 00 beq \$2,\$0,452 <beq\+0xa>
+ 454: 81 ef 01 00 beq \$sp,\$8,456 <beq\+0xe>
+ 458: 01 e3 00 00 beq \$3,\$0,458 <beq\+0x10>
+
+0000045c <bne>:
+ 45c: 35 e6 00 00 bne \$6,\$3,45c <bne>
+ 460: 35 ef fc ff bne \$sp,\$3,458 <beq\+0x10>
+ 464: 05 e8 01 00 bne \$8,\$0,466 <bne\+0xa>
+ 468: f5 ee 04 00 bne \$gp,\$sp,470 <bsr12>
+ 46c: 45 ef 01 00 bne \$sp,\$4,46e <bne\+0x12>
+
+00000470 <bsr12>:
+ 470: 03 b0 bsr 472 <bsr12\+0x2>
+ 472: f9 bf bsr 46a <bne\+0xe>
+ 474: f1 bf bsr 464 <bne\+0x8>
+ 476: ff bf bsr 474 <bsr12\+0x4>
+ 478: f9 bf bsr 470 <bsr12>
+
+0000047a <bsr24>:
+ 47a: 05 b0 bsr 47e <bsr24\+0x4>
+ 47c: ff bf bsr 47a <bsr24>
+ 47e: fd bf bsr 47a <bsr24>
+ 480: 01 b0 bsr 480 <bsr24\+0x6>
+ 482: 03 b0 bsr 484 <jmp>
+
+00000484 <jmp>:
+ 484: 2e 10 jmp \$2
+ 486: de 10 jmp \$tp
+ 488: 5e 10 jmp \$5
+ 48a: fe 10 jmp \$sp
+ 48c: 8e 10 jmp \$8
+
+0000048e <jmp24>:
+ 48e: 28 d8 00 00 jmp 4 <sb\+0x4>
+ 492: 18 d8 00 00 jmp 2 <sb\+0x2>
+ 496: 08 d8 00 00 jmp 0 <sb>
+ 49a: 18 d8 00 00 jmp 2 <sb\+0x2>
+ 49e: 28 d8 00 00 jmp 4 <sb\+0x4>
+
+000004a2 <jsr>:
+ 4a2: ff 10 jsr \$sp
+ 4a4: df 10 jsr \$tp
+ 4a6: df 10 jsr \$tp
+ 4a8: 6f 10 jsr \$6
+ 4aa: 6f 10 jsr \$6
+
+000004ac <ret>:
+ 4ac: 02 70 ret
+
+000004ae <repeat>:
+ 4ae: 09 e4 01 00 repeat \$4,4b0 <repeat\+0x2>
+ 4b2: 09 e8 02 00 repeat \$8,4b6 <repeat\+0x8>
+ 4b6: 09 e0 04 00 repeat \$0,4be <repeat\+0x10>
+ 4ba: 09 e6 01 00 repeat \$6,4bc <repeat\+0xe>
+ 4be: 09 e4 01 00 repeat \$4,4c0 <repeat\+0x12>
+
+000004c2 <erepeat>:
+ 4c2: 19 e0 01 00 erepeat 4c4 <erepeat\+0x2>
+ 4c6: 19 e0 00 00 erepeat 4c6 <erepeat\+0x4>
+ 4ca: 19 e0 01 00 erepeat 4cc <erepeat\+0xa>
+ 4ce: 19 e0 ff ff erepeat 4cc <erepeat\+0xa>
+ 4d2: 19 e0 00 00 erepeat 4d2 <erepeat\+0x10>
+
+000004d6 <stc>:
+ 4d6: e8 7d stc \$tp,\$mb1
+ 4d8: c9 7d stc \$tp,\$ccfg
+ 4da: 89 7b stc \$11,\$dbg
+ 4dc: c9 7a stc \$10,\$ccfg
+ 4de: 39 79 stc \$9,\$epc
+
+000004e0 <ldc>:
+ 4e0: 8a 7d ldc \$tp,\$lo
+ 4e2: 7b 78 ldc \$8,\$npc
+ 4e4: ca 79 ldc \$9,\$mb0
+ 4e6: 2a 7f ldc \$sp,\$sar
+ 4e8: cb 79 ldc \$9,\$ccfg
+
+000004ea <di>:
+ 4ea: 00 70 di
+
+000004ec <ei>:
+ 4ec: 10 70 ei
+
+000004ee <reti>:
+ 4ee: 12 70 reti
+
+000004f0 <halt>:
+ 4f0: 22 70 halt
+
+000004f2 <swi>:
+ 4f2: 26 70 swi 0x2
+ 4f4: 06 70 swi 0x0
+ 4f6: 26 70 swi 0x2
+ 4f8: 36 70 swi 0x3
+ 4fa: 16 70 swi 0x1
+
+000004fc <break>:
+ 4fc: 32 70 break
+
+000004fe <syncm>:
+ 4fe: 11 70 syncm
+
+00000500 <stcb>:
+ 500: 04 f5 04 00 stcb \$5,0x4
+ 504: 04 f5 01 00 stcb \$5,0x1
+ 508: 04 fe 00 00 stcb \$gp,0x0
+ 50c: 04 ff 04 00 stcb \$sp,0x4
+ 510: 04 fb 02 00 stcb \$11,0x2
+
+00000514 <ldcb>:
+ 514: 14 f2 03 00 ldcb \$2,0x3
+ 518: 14 f2 04 00 ldcb \$2,0x4
+ 51c: 14 f9 01 00 ldcb \$9,0x1
+ 520: 14 fa 04 00 ldcb \$10,0x4
+ 524: 14 f1 04 00 ldcb \$1,0x4
+
+00000528 <bsetm>:
+ 528: a0 20 bsetm \(\$10\),0x0
+ 52a: f0 20 bsetm \(\$sp\),0x0
+ 52c: 10 22 bsetm \(\$1\),0x2
+ 52e: f0 24 bsetm \(\$sp\),0x4
+ 530: 80 24 bsetm \(\$8\),0x4
+
+00000532 <bclrm>:
+ 532: 51 20 bclrm \(\$5\),0x0
+ 534: 51 22 bclrm \(\$5\),0x2
+ 536: 81 20 bclrm \(\$8\),0x0
+ 538: 91 22 bclrm \(\$9\),0x2
+ 53a: 51 23 bclrm \(\$5\),0x3
+
+0000053c <bnotm>:
+ 53c: e2 24 bnotm \(\$gp\),0x4
+ 53e: b2 24 bnotm \(\$11\),0x4
+ 540: a2 20 bnotm \(\$10\),0x0
+ 542: d2 24 bnotm \(\$tp\),0x4
+ 544: 82 20 bnotm \(\$8\),0x0
+
+00000546 <btstm>:
+ 546: e3 20 btstm \$0,\(\$gp\),0x0
+ 548: e3 21 btstm \$0,\(\$gp\),0x1
+ 54a: b3 20 btstm \$0,\(\$11\),0x0
+ 54c: e3 23 btstm \$0,\(\$gp\),0x3
+ 54e: 83 22 btstm \$0,\(\$8\),0x2
+
+00000550 <tas>:
+ 550: d4 27 tas \$7,\(\$tp\)
+ 552: c4 27 tas \$7,\(\$12\)
+ 554: 84 23 tas \$3,\(\$8\)
+ 556: 54 22 tas \$2,\(\$5\)
+ 558: a4 26 tas \$6,\(\$10\)
+
+0000055a <cache>:
+ 55a: d4 71 cache 0x1,\(\$tp\)
+ 55c: c4 73 cache 0x3,\(\$12\)
+ 55e: 94 73 cache 0x3,\(\$9\)
+ 560: 24 74 cache 0x4,\(\$2\)
+ 562: 74 74 cache 0x4,\(\$7\)
+
+00000564 <mul>:
+ 564: e4 18 mul \$8,\$gp
+ 566: 94 12 mul \$2,\$9
+ 568: f4 1e mul \$gp,\$sp
+ 56a: 74 19 mul \$9,\$7
+ 56c: b4 17 mul \$7,\$11
+
+0000056e <mulu>:
+ 56e: 55 12 mulu \$2,\$5
+ 570: e5 16 mulu \$6,\$gp
+ 572: f5 1e mulu \$gp,\$sp
+ 574: e5 1b mulu \$11,\$gp
+ 576: 95 13 mulu \$3,\$9
+
+00000578 <mulr>:
+ 578: 66 1c mulr \$12,\$6
+ 57a: 86 1d mulr \$tp,\$8
+ 57c: a6 17 mulr \$7,\$10
+ 57e: 16 1e mulr \$gp,\$1
+ 580: f6 10 mulr \$0,\$sp
+
+00000582 <mulru>:
+ 582: 27 14 mulru \$4,\$2
+ 584: 17 1e mulru \$gp,\$1
+ 586: 47 1f mulru \$sp,\$4
+ 588: 67 1a mulru \$10,\$6
+ 58a: e7 10 mulru \$0,\$gp
+
+0000058c <madd>:
+ 58c: b1 f4 04 30 madd \$4,\$11
+ 590: e1 ff 04 30 madd \$sp,\$gp
+ 594: f1 fe 04 30 madd \$gp,\$sp
+ 598: d1 f4 04 30 madd \$4,\$tp
+ 59c: e1 f1 04 30 madd \$1,\$gp
+
+000005a0 <maddu>:
+ 5a0: 11 f0 05 30 maddu \$0,\$1
+ 5a4: 61 f7 05 30 maddu \$7,\$6
+ 5a8: 51 f9 05 30 maddu \$9,\$5
+ 5ac: f1 fe 05 30 maddu \$gp,\$sp
+ 5b0: d1 f7 05 30 maddu \$7,\$tp
+
+000005b4 <maddr>:
+ 5b4: 81 f6 06 30 maddr \$6,\$8
+ 5b8: e1 f9 06 30 maddr \$9,\$gp
+ 5bc: e1 f8 06 30 maddr \$8,\$gp
+ 5c0: 21 f3 06 30 maddr \$3,\$2
+ 5c4: b1 f1 06 30 maddr \$1,\$11
+
+000005c8 <maddru>:
+ 5c8: 31 fa 07 30 maddru \$10,\$3
+ 5cc: c1 ff 07 30 maddru \$sp,\$12
+ 5d0: 81 f8 07 30 maddru \$8,\$8
+ 5d4: 31 fe 07 30 maddru \$gp,\$3
+ 5d8: f1 f8 07 30 maddru \$8,\$sp
+
+000005dc <div>:
+ 5dc: 38 19 div \$9,\$3
+ 5de: e8 14 div \$4,\$gp
+ 5e0: c8 12 div \$2,\$12
+ 5e2: d8 18 div \$8,\$tp
+ 5e4: 68 1d div \$tp,\$6
+
+000005e6 <divu>:
+ 5e6: 59 19 divu \$9,\$5
+ 5e8: d9 18 divu \$8,\$tp
+ 5ea: e9 10 divu \$0,\$gp
+ 5ec: 59 19 divu \$9,\$5
+ 5ee: 59 10 divu \$0,\$5
+
+000005f0 <dret>:
+ 5f0: 13 70 dret
+
+000005f2 <dbreak>:
+ 5f2: 33 70 dbreak
+
+000005f4 <ldz>:
+ 5f4: 41 fe 00 00 ldz \$gp,\$4
+ 5f8: b1 fa 00 00 ldz \$10,\$11
+ 5fc: 91 f9 00 00 ldz \$9,\$9
+ 600: d1 ff 00 00 ldz \$sp,\$tp
+ 604: 31 fe 00 00 ldz \$gp,\$3
+
+00000608 <abs>:
+ 608: 91 ff 03 00 abs \$sp,\$9
+ 60c: 41 f5 03 00 abs \$5,\$4
+ 610: d1 fd 03 00 abs \$tp,\$tp
+ 614: 31 f0 03 00 abs \$0,\$3
+ 618: e1 f3 03 00 abs \$3,\$gp
+
+0000061c <ave>:
+ 61c: a1 fb 02 00 ave \$11,\$10
+ 620: a1 f8 02 00 ave \$8,\$10
+ 624: 21 fe 02 00 ave \$gp,\$2
+ 628: c1 fa 02 00 ave \$10,\$12
+ 62c: 81 ff 02 00 ave \$sp,\$8
+
+00000630 <min>:
+ 630: 31 f8 04 00 min \$8,\$3
+ 634: 01 f7 04 00 min \$7,\$0
+ 638: 21 f2 04 00 min \$2,\$2
+ 63c: 61 f5 04 00 min \$5,\$6
+ 640: 51 fb 04 00 min \$11,\$5
+
+00000644 <max>:
+ 644: f1 fb 05 00 max \$11,\$sp
+ 648: 01 fe 05 00 max \$gp,\$0
+ 64c: f1 fc 05 00 max \$12,\$sp
+ 650: 21 fe 05 00 max \$gp,\$2
+ 654: f1 fe 05 00 max \$gp,\$sp
+
+00000658 <minu>:
+ 658: 81 fb 06 00 minu \$11,\$8
+ 65c: 51 f7 06 00 minu \$7,\$5
+ 660: e1 f8 06 00 minu \$8,\$gp
+ 664: 41 fb 06 00 minu \$11,\$4
+ 668: f1 f2 06 00 minu \$2,\$sp
+
+0000066c <maxu>:
+ 66c: 31 f3 07 00 maxu \$3,\$3
+ 670: 01 fd 07 00 maxu \$tp,\$0
+ 674: 81 f4 07 00 maxu \$4,\$8
+ 678: 21 fe 07 00 maxu \$gp,\$2
+ 67c: 81 fc 07 00 maxu \$12,\$8
+
+00000680 <clip>:
+ 680: 01 fa 08 10 clip \$10,0x1
+ 684: 01 ff 20 10 clip \$sp,0x4
+ 688: 01 f4 18 10 clip \$4,0x3
+ 68c: 01 ff 18 10 clip \$sp,0x3
+ 690: 01 f1 00 10 clip \$1,0x0
+
+00000694 <clipu>:
+ 694: 01 fa 21 10 clipu \$10,0x4
+ 698: 01 fd 09 10 clipu \$tp,0x1
+ 69c: 01 f5 21 10 clipu \$5,0x4
+ 6a0: 01 fe 01 10 clipu \$gp,0x0
+ 6a4: 01 f5 09 10 clipu \$5,0x1
+
+000006a8 <sadd>:
+ 6a8: 01 f5 08 00 sadd \$5,\$0
+ 6ac: 31 ff 08 00 sadd \$sp,\$3
+ 6b0: a1 f0 08 00 sadd \$0,\$10
+ 6b4: c1 ff 08 00 sadd \$sp,\$12
+ 6b8: 21 f4 08 00 sadd \$4,\$2
+
+000006bc <ssub>:
+ 6bc: a1 f1 0a 00 ssub \$1,\$10
+ 6c0: 71 f4 0a 00 ssub \$4,\$7
+ 6c4: 31 f8 0a 00 ssub \$8,\$3
+ 6c8: e1 f7 0a 00 ssub \$7,\$gp
+ 6cc: 41 fd 0a 00 ssub \$tp,\$4
+
+000006d0 <saddu>:
+ 6d0: e1 f9 09 00 saddu \$9,\$gp
+ 6d4: a1 f0 09 00 saddu \$0,\$10
+ 6d8: c1 f7 09 00 saddu \$7,\$12
+ 6dc: f1 f5 09 00 saddu \$5,\$sp
+ 6e0: 31 fd 09 00 saddu \$tp,\$3
+
+000006e4 <ssubu>:
+ 6e4: e1 ff 0b 00 ssubu \$sp,\$gp
+ 6e8: f1 f0 0b 00 ssubu \$0,\$sp
+ 6ec: a1 f3 0b 00 ssubu \$3,\$10
+ 6f0: d1 ff 0b 00 ssubu \$sp,\$tp
+ 6f4: 91 f2 0b 00 ssubu \$2,\$9
+
+000006f8 <swcp>:
+ 6f8: d8 33 swcp \$c3,\(\$tp\)
+ 6fa: d8 3f swcp \$c15,\(\$tp\)
+ 6fc: 08 3d swcp \$c13,\(\$0\)
+ 6fe: c8 3c swcp \$c12,\(\$12\)
+ 700: e8 39 swcp \$c9,\(\$gp\)
+
+00000702 <lwcp>:
+ 702: 39 37 lwcp \$c7,\(\$3\)
+ 704: 39 36 lwcp \$c6,\(\$3\)
+ 706: 29 30 lwcp \$c0,\(\$2\)
+ 708: 89 38 lwcp \$c8,\(\$8\)
+ 70a: d9 3b lwcp \$c11,\(\$tp\)
+
+0000070c <smcp>:
+ 70c: 9a 3e smcp \$c14,\(\$9\)
+ 70e: 8a 32 smcp \$c2,\(\$8\)
+ 710: fa 3e smcp \$c14,\(\$sp\)
+ 712: 8a 3a smcp \$c10,\(\$8\)
+ 714: 8a 32 smcp \$c2,\(\$8\)
+
+00000716 <lmcp>:
+ 716: 1b 3b lmcp \$c11,\(\$1\)
+ 718: 8b 38 lmcp \$c8,\(\$8\)
+ 71a: db 3b lmcp \$c11,\(\$tp\)
+ 71c: 0b 38 lmcp \$c8,\(\$0\)
+ 71e: eb 38 lmcp \$c8,\(\$gp\)
+
+00000720 <swcpi>:
+ 720: 00 37 swcpi \$c7,\(\$0\+\)
+ 722: e0 36 swcpi \$c6,\(\$gp\+\)
+ 724: 80 3c swcpi \$c12,\(\$8\+\)
+ 726: f0 3e swcpi \$c14,\(\$sp\+\)
+ 728: 00 36 swcpi \$c6,\(\$0\+\)
+
+0000072a <lwcpi>:
+ 72a: 21 38 lwcpi \$c8,\(\$2\+\)
+ 72c: 01 39 lwcpi \$c9,\(\$0\+\)
+ 72e: e1 33 lwcpi \$c3,\(\$gp\+\)
+ 730: 51 3d lwcpi \$c13,\(\$5\+\)
+ 732: e1 3b lwcpi \$c11,\(\$gp\+\)
+
+00000734 <smcpi>:
+ 734: 22 38 smcpi \$c8,\(\$2\+\)
+ 736: 92 3b smcpi \$c11,\(\$9\+\)
+ 738: 32 34 smcpi \$c4,\(\$3\+\)
+ 73a: 22 3e smcpi \$c14,\(\$2\+\)
+ 73c: 32 39 smcpi \$c9,\(\$3\+\)
+
+0000073e <lmcpi>:
+ 73e: e3 36 lmcpi \$c6,\(\$gp\+\)
+ 740: 53 39 lmcpi \$c9,\(\$5\+\)
+ 742: 63 3a lmcpi \$c10,\(\$6\+\)
+ 744: 63 31 lmcpi \$c1,\(\$6\+\)
+ 746: 83 32 lmcpi \$c2,\(\$8\+\)
+
+00000748 <swcp16>:
+ 748: 2c f0 ff ff swcp \$c0,-1\(\$2\)
+ 74c: ac f5 01 00 swcp \$c5,1\(\$10\)
+ 750: cc f8 02 00 swcp \$c8,2\(\$12\)
+ 754: 1c fe ff ff swcp \$c14,-1\(\$1\)
+ 758: 3c fc 02 00 swcp \$c12,2\(\$3\)
+
+0000075c <lwcp16>:
+ 75c: 5d f8 ff ff lwcp \$c8,-1\(\$5\)
+ 760: fd fc 01 00 lwcp \$c12,1\(\$sp\)
+ 764: 0d f1 02 00 lwcp \$c1,2\(\$0\)
+ 768: dd f4 01 00 lwcp \$c4,1\(\$tp\)
+ 76c: bd f6 02 00 lwcp \$c6,2\(\$11\)
+
+00000770 <smcp16>:
+ 770: ae f9 ff ff smcp \$c9,-1\(\$10\)
+ 774: ee fe 01 00 smcp \$c14,1\(\$gp\)
+ 778: fe f3 02 00 smcp \$c3,2\(\$sp\)
+ 77c: 8e ff fe ff smcp \$c15,-2\(\$8\)
+ 780: de fd 01 00 smcp \$c13,1\(\$tp\)
+
+00000784 <lmcp16>:
+ 784: ff f0 01 00 lmcp \$c0,1\(\$sp\)
+ 788: 8f ff 01 00 lmcp \$c15,1\(\$8\)
+ 78c: 8f f2 ff ff lmcp \$c2,-1\(\$8\)
+ 790: 8f fe 01 00 lmcp \$c14,1\(\$8\)
+ 794: af f1 ff ff lmcp \$c1,-1\(\$10\)
+
+00000798 <sbcpa>:
+ 798: f5 fe 02 00 sbcpa \$c14,\(\$sp\+\),2
+ 79c: 45 f2 fe 00 sbcpa \$c2,\(\$4\+\),-2
+ 7a0: 15 f8 00 00 sbcpa \$c8,\(\$1\+\),0
+ 7a4: 35 fb 00 00 sbcpa \$c11,\(\$3\+\),0
+ 7a8: e5 f9 fe 00 sbcpa \$c9,\(\$gp\+\),-2
+
+000007ac <lbcpa>:
+ 7ac: 25 f7 fe 40 lbcpa \$c7,\(\$2\+\),-2
+ 7b0: f5 fc 02 40 lbcpa \$c12,\(\$sp\+\),2
+ 7b4: 45 f5 fe 40 lbcpa \$c5,\(\$4\+\),-2
+ 7b8: 45 f7 fe 40 lbcpa \$c7,\(\$4\+\),-2
+ 7bc: f5 f8 00 40 lbcpa \$c8,\(\$sp\+\),0
+
+000007c0 <shcpa>:
+ 7c0: e5 f0 00 10 shcpa \$c0,\(\$gp\+\),0
+ 7c4: f5 fc 10 10 shcpa \$c12,\(\$sp\+\),16
+ 7c8: 45 f1 04 10 shcpa \$c1,\(\$4\+\),4
+ 7cc: 45 f5 e0 10 shcpa \$c5,\(\$4\+\),-32
+ 7d0: f5 f1 00 10 shcpa \$c1,\(\$sp\+\),0
+
+000007d4 <lhcpa>:
+ 7d4: 45 f4 00 50 lhcpa \$c4,\(\$4\+\),0
+ 7d8: 55 f6 30 50 lhcpa \$c6,\(\$5\+\),48
+ 7dc: 65 f3 cc 50 lhcpa \$c3,\(\$6\+\),-52
+ 7e0: 65 f8 e8 50 lhcpa \$c8,\(\$6\+\),-24
+ 7e4: 95 f0 00 50 lhcpa \$c0,\(\$9\+\),0
+
+000007e8 <swcpa>:
+ 7e8: 95 f1 10 20 swcpa \$c1,\(\$9\+\),16
+ 7ec: f5 f7 20 20 swcpa \$c7,\(\$sp\+\),32
+ 7f0: c5 f3 30 20 swcpa \$c3,\(\$12\+\),48
+ 7f4: 95 fa 08 20 swcpa \$c10,\(\$9\+\),8
+ 7f8: 85 fe 04 20 swcpa \$c14,\(\$8\+\),4
+
+000007fc <lwcpa>:
+ 7fc: e5 f6 f8 60 lwcpa \$c6,\(\$gp\+\),-8
+ 800: 75 f4 04 60 lwcpa \$c4,\(\$7\+\),4
+ 804: e5 fb f0 60 lwcpa \$c11,\(\$gp\+\),-16
+ 808: f5 fa e0 60 lwcpa \$c10,\(\$sp\+\),-32
+ 80c: 25 f2 08 60 lwcpa \$c2,\(\$2\+\),8
+
+00000810 <smcpa>:
+ 810: f5 fd f8 30 smcpa \$c13,\(\$sp\+\),-8
+ 814: 75 f6 f8 30 smcpa \$c6,\(\$7\+\),-8
+ 818: 35 f5 10 30 smcpa \$c5,\(\$3\+\),16
+ 81c: f5 fd 10 30 smcpa \$c13,\(\$sp\+\),16
+ 820: c5 f3 30 30 smcpa \$c3,\(\$12\+\),48
+
+00000824 <lmcpa>:
+ 824: 45 f9 00 70 lmcpa \$c9,\(\$4\+\),0
+ 828: f5 f3 f0 70 lmcpa \$c3,\(\$sp\+\),-16
+ 82c: d5 ff 08 70 lmcpa \$c15,\(\$tp\+\),8
+ 830: 85 f8 f8 70 lmcpa \$c8,\(\$8\+\),-8
+ 834: 95 fa 00 70 lmcpa \$c10,\(\$9\+\),0
+
+00000838 <sbcpm0>:
+ 838: d5 fa 08 08 sbcpm0 \$c10,\(\$tp\+\),8
+ 83c: 55 fd f8 08 sbcpm0 \$c13,\(\$5\+\),-8
+ 840: 55 f4 f8 08 sbcpm0 \$c4,\(\$5\+\),-8
+ 844: d5 fa 10 08 sbcpm0 \$c10,\(\$tp\+\),16
+ 848: 55 f4 e8 08 sbcpm0 \$c4,\(\$5\+\),-24
+
+0000084c <lbcpm0>:
+ 84c: 45 f0 00 48 lbcpm0 \$c0,\(\$4\+\),0
+ 850: 75 f9 f8 48 lbcpm0 \$c9,\(\$7\+\),-8
+ 854: 85 fc 18 48 lbcpm0 \$c12,\(\$8\+\),24
+ 858: c5 f8 10 48 lbcpm0 \$c8,\(\$12\+\),16
+ 85c: 85 f7 10 48 lbcpm0 \$c7,\(\$8\+\),16
+
+00000860 <shcpm0>:
+ 860: d5 f2 02 18 shcpm0 \$c2,\(\$tp\+\),2
+ 864: f5 f7 fe 18 shcpm0 \$c7,\(\$sp\+\),-2
+ 868: 25 f8 02 18 shcpm0 \$c8,\(\$2\+\),2
+ 86c: 55 fd 00 18 shcpm0 \$c13,\(\$5\+\),0
+ 870: e5 f3 08 18 shcpm0 \$c3,\(\$gp\+\),8
+
+00000874 <lhcpm0>:
+ 874: 45 f7 08 58 lhcpm0 \$c7,\(\$4\+\),8
+ 878: 35 f3 fe 58 lhcpm0 \$c3,\(\$3\+\),-2
+ 87c: 15 f3 00 58 lhcpm0 \$c3,\(\$1\+\),0
+ 880: e5 f2 00 58 lhcpm0 \$c2,\(\$gp\+\),0
+ 884: 65 fc 02 58 lhcpm0 \$c12,\(\$6\+\),2
+
+00000888 <swcpm0>:
+ 888: 85 f8 20 28 swcpm0 \$c8,\(\$8\+\),32
+ 88c: f5 f9 00 28 swcpm0 \$c9,\(\$sp\+\),0
+ 890: 25 f9 f0 28 swcpm0 \$c9,\(\$2\+\),-16
+ 894: e5 f0 30 28 swcpm0 \$c0,\(\$gp\+\),48
+ 898: 15 ff 08 28 swcpm0 \$c15,\(\$1\+\),8
+
+0000089c <lwcpm0>:
+ 89c: a5 fe fc 68 lwcpm0 \$c14,\(\$10\+\),-4
+ 8a0: f5 fb fc 68 lwcpm0 \$c11,\(\$sp\+\),-4
+ 8a4: 75 f5 f8 68 lwcpm0 \$c5,\(\$7\+\),-8
+ 8a8: c5 f2 20 68 lwcpm0 \$c2,\(\$12\+\),32
+ 8ac: e5 f2 10 68 lwcpm0 \$c2,\(\$gp\+\),16
+
+000008b0 <smcpm0>:
+ 8b0: c5 f1 08 38 smcpm0 \$c1,\(\$12\+\),8
+ 8b4: 45 f8 f0 38 smcpm0 \$c8,\(\$4\+\),-16
+ 8b8: b5 fa 00 38 smcpm0 \$c10,\(\$11\+\),0
+ 8bc: 35 f1 f0 38 smcpm0 \$c1,\(\$3\+\),-16
+ 8c0: f5 fb f8 38 smcpm0 \$c11,\(\$sp\+\),-8
+
+000008c4 <lmcpm0>:
+ 8c4: a5 fe 00 78 lmcpm0 \$c14,\(\$10\+\),0
+ 8c8: f5 f6 f0 78 lmcpm0 \$c6,\(\$sp\+\),-16
+ 8cc: 15 fd 08 78 lmcpm0 \$c13,\(\$1\+\),8
+ 8d0: d5 fa e8 78 lmcpm0 \$c10,\(\$tp\+\),-24
+ 8d4: e5 f7 e8 78 lmcpm0 \$c7,\(\$gp\+\),-24
+
+000008d8 <sbcpm1>:
+ 8d8: 85 f9 00 0c sbcpm1 \$c9,\(\$8\+\),0
+ 8dc: c5 f7 e8 0c sbcpm1 \$c7,\(\$12\+\),-24
+ 8e0: 55 ff e8 0c sbcpm1 \$c15,\(\$5\+\),-24
+ 8e4: d5 f5 10 0c sbcpm1 \$c5,\(\$tp\+\),16
+ 8e8: 15 f6 80 0c sbcpm1 \$c6,\(\$1\+\),-128
+
+000008ec <lbcpm1>:
+ 8ec: e5 f6 02 4c lbcpm1 \$c6,\(\$gp\+\),2
+ 8f0: d5 f7 fe 4c lbcpm1 \$c7,\(\$tp\+\),-2
+ 8f4: d5 f4 01 4c lbcpm1 \$c4,\(\$tp\+\),1
+ 8f8: 25 fc fe 4c lbcpm1 \$c12,\(\$2\+\),-2
+ 8fc: 75 fb 01 4c lbcpm1 \$c11,\(\$7\+\),1
+
+00000900 <shcpm1>:
+ 900: 85 f4 18 1c shcpm1 \$c4,\(\$8\+\),24
+ 904: 65 fb f0 1c shcpm1 \$c11,\(\$6\+\),-16
+ 908: 85 f7 08 1c shcpm1 \$c7,\(\$8\+\),8
+ 90c: c5 f5 10 1c shcpm1 \$c5,\(\$12\+\),16
+ 910: 85 f0 e0 1c shcpm1 \$c0,\(\$8\+\),-32
+
+00000914 <lhcpm1>:
+ 914: 05 fb 00 5c lhcpm1 \$c11,\(\$0\+\),0
+ 918: d5 f7 fe 5c lhcpm1 \$c7,\(\$tp\+\),-2
+ 91c: 85 fa 08 5c lhcpm1 \$c10,\(\$8\+\),8
+ 920: d5 f3 00 5c lhcpm1 \$c3,\(\$tp\+\),0
+ 924: 65 f9 02 5c lhcpm1 \$c9,\(\$6\+\),2
+
+00000928 <swcpm1>:
+ 928: 85 f9 18 2c swcpm1 \$c9,\(\$8\+\),24
+ 92c: e5 f9 00 2c swcpm1 \$c9,\(\$gp\+\),0
+ 930: 85 f9 10 2c swcpm1 \$c9,\(\$8\+\),16
+ 934: 15 fe 00 2c swcpm1 \$c14,\(\$1\+\),0
+ 938: f5 f2 08 2c swcpm1 \$c2,\(\$sp\+\),8
+
+0000093c <lwcpm1>:
+ 93c: 85 f8 00 6c lwcpm1 \$c8,\(\$8\+\),0
+ 940: e5 f3 f0 6c lwcpm1 \$c3,\(\$gp\+\),-16
+ 944: 65 f7 f8 6c lwcpm1 \$c7,\(\$6\+\),-8
+ 948: 85 fe e8 6c lwcpm1 \$c14,\(\$8\+\),-24
+ 94c: 85 f3 18 6c lwcpm1 \$c3,\(\$8\+\),24
+
+00000950 <smcpm1>:
+ 950: 45 fa 00 3c smcpm1 \$c10,\(\$4\+\),0
+ 954: f5 f6 f0 3c smcpm1 \$c6,\(\$sp\+\),-16
+ 958: 75 fd e8 3c smcpm1 \$c13,\(\$7\+\),-24
+ 95c: e5 f3 f8 3c smcpm1 \$c3,\(\$gp\+\),-8
+ 960: 25 f0 08 3c smcpm1 \$c0,\(\$2\+\),8
+
+00000964 <lmcpm1>:
+ 964: 15 fc 00 7c lmcpm1 \$c12,\(\$1\+\),0
+ 968: 65 f0 08 7c lmcpm1 \$c0,\(\$6\+\),8
+ 96c: 25 f6 f8 7c lmcpm1 \$c6,\(\$2\+\),-8
+ 970: e5 fc f0 7c lmcpm1 \$c12,\(\$gp\+\),-16
+ 974: f5 fe 30 7c lmcpm1 \$c14,\(\$sp\+\),48
+
+00000... <bcpeq>:
+ ...: 44 d8 00 00 bcpeq 0x4,... <bcpeq>
+ ...: 04 d8 ff ff bcpeq 0x0,... <bcpeq\+0x2>
+ ...: 44 d8 ff ff bcpeq 0x4,... <bcpeq\+0x6>
+ ...: 14 d8 01 00 bcpeq 0x1,... <bcpeq\+0xe>
+ ...: 24 d8 01 00 bcpeq 0x2,... <bcpeq\+0x12>
+
+00000... <bcpne>:
+ ...: 25 d8 00 00 bcpne 0x2,... <bcpne>
+ ...: 45 d8 00 00 bcpne 0x4,... <bcpne\+0x4>
+ ...: 15 d8 00 00 bcpne 0x1,... <bcpne\+0x8>
+ ...: 45 d8 00 00 bcpne 0x4,... <bcpne\+0xc>
+ ...: 15 d8 01 00 bcpne 0x1,... <bcpne\+0x12>
+
+00000... <bcpat>:
+ ...: 16 d8 ff ff bcpat 0x1,... <bcpne\+0x12>
+ ...: 06 d8 01 00 bcpat 0x0,... <bcpat\+0x6>
+ ...: 06 d8 ff ff bcpat 0x0,... <bcpat\+0x6>
+ ...: 26 d8 00 00 bcpat 0x2,... <bcpat\+0xc>
+ ...: 16 d8 ff ff bcpat 0x1,... <bcpat\+0xe>
+
+00000... <bcpaf>:
+ ...: 47 d8 00 00 bcpaf 0x4,... <bcpaf>
+ ...: 37 d8 00 00 bcpaf 0x3,... <bcpaf\+0x4>
+ ...: 47 d8 00 00 bcpaf 0x4,... <bcpaf\+0x8>
+ ...: 17 d8 01 00 bcpaf 0x1,... <bcpaf\+0xe>
+ ...: 47 d8 01 00 bcpaf 0x4,... <bcpaf\+0x12>
+
+00000... <synccp>:
+ ...: 21 70 synccp
+
+00000... <jsrv>:
+ ...: bf 18 jsrv \$11
+ ...: 5f 18 jsrv \$5
+ ...: af 18 jsrv \$10
+ ...: cf 18 jsrv \$12
+ ...: af 18 jsrv \$10
+
+00000... <bsrv>:
+ ...: fb df ff ff bsrv ... <jsrv\+0x8>
+ ...: fb df ff ff bsrv ... <bsrv\+0x2>
+ ...: fb df ff ff bsrv ... <bsrv\+0x6>
+ ...: 1b d8 00 00 bsrv ... <bsrv\+0xe>
+ ...: 0b d8 00 00 bsrv ... <bsrv\+0x10>
+
+00000... <case106341>:
+ ...: 78 7a stc \$10,\$hi
+ ...: 8a 70 ldc \$0,\$lo
+
+00000... <case106821>:
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 08 00 sb \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 09 00 sh \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0a 00 sw \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0c 00 lb \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0d 00 lh \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0e 00 lw \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0b 00 lbu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 0f 00 lhu \$0,\(\$0\)
+ ...: 08 c0 01 00 sb \$0,1\(\$0\)
+ ...: 08 c0 01 00 sb \$0,1\(\$0\)
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: 08 c0 01 00 sb \$0,1\(\$0\)
+ ...: 08 c0 01 00 sb \$0,1\(\$0\)
+ ...: 09 c0 01 00 sh \$0,1\(\$0\)
+ ...: 09 c0 01 00 sh \$0,1\(\$0\)
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: 09 c0 01 00 sh \$0,1\(\$0\)
+ ...: 09 c0 01 00 sh \$0,1\(\$0\)
+ ...: 0a c0 01 00 sw \$0,1\(\$0\)
+ ...: 0a c0 01 00 sw \$0,1\(\$0\)
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: 0a c0 01 00 sw \$0,1\(\$0\)
+ ...: 0a c0 01 00 sw \$0,1\(\$0\)
+ ...: 0c c0 01 00 lb \$0,1\(\$0\)
+ ...: 0c c0 01 00 lb \$0,1\(\$0\)
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: 0c c0 01 00 lb \$0,1\(\$0\)
+ ...: 0c c0 01 00 lb \$0,1\(\$0\)
+ ...: 0d c0 01 00 lh \$0,1\(\$0\)
+ ...: 0d c0 01 00 lh \$0,1\(\$0\)
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: 0d c0 01 00 lh \$0,1\(\$0\)
+ ...: 0d c0 01 00 lh \$0,1\(\$0\)
+ ...: 0e c0 01 00 lw \$0,1\(\$0\)
+ ...: 0e c0 01 00 lw \$0,1\(\$0\)
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: 0e c0 01 00 lw \$0,1\(\$0\)
+ ...: 0e c0 01 00 lw \$0,1\(\$0\)
+ ...: 0b c0 01 00 lbu \$0,1\(\$0\)
+ ...: 0b c0 01 00 lbu \$0,1\(\$0\)
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: 0b c0 01 00 lbu \$0,1\(\$0\)
+ ...: 0b c0 01 00 lbu \$0,1\(\$0\)
+ ...: 0f c0 01 00 lhu \$0,1\(\$0\)
+ ...: 0f c0 01 00 lhu \$0,1\(\$0\)
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: 0f c0 01 00 lhu \$0,1\(\$0\)
+ ...: 0f c0 01 00 lhu \$0,1\(\$0\)
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 08 c0 00 00 sb \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 09 c0 00 00 sh \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0a c0 00 00 sw \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0c c0 00 00 lb \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0d c0 00 00 lh \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0e c0 00 00 lw \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0b c0 00 00 lbu \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_16 .text\+0x...
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_LOW16 .text\+0x...
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_HI16S .text\+0x...
+ ...: 0f c0 00 00 lhu \$0,0\(\$0\)
+ ...: R_MEP_HI16U .text\+0x...
diff --git a/gas/testsuite/gas/mep/allinsn.s b/gas/testsuite/gas/mep/allinsn.s
new file mode 100644
index 0000000000..784337c865
--- /dev/null
+++ b/gas/testsuite/gas/mep/allinsn.s
@@ -0,0 +1,1536 @@
+ .data
+foodata: .word 42
+ .text
+footext:
+ .text
+ .global sb
+sb:
+ sb $7,($fp)
+ sb $5,($9)
+ sb $7,($14)
+ sb $14,($fp)
+ sb $15,($14)
+ .text
+ .global sh
+sh:
+ sh $3,($fp)
+ sh $12,($1)
+ sh $13,($2)
+ sh $2,($8)
+ sh $12,($10)
+ .text
+ .global sw
+sw:
+ sw $11,($0)
+ sw $3,($7)
+ sw $13,($14)
+ sw $8,($9)
+ sw $gp,($fp)
+ .text
+ .global lb
+lb:
+ lb $12,($11)
+ lb $9,($2)
+ lb $fp,($11)
+ lb $gp,($2)
+ lb $2,($12)
+ .text
+ .global lh
+lh:
+ lh $15,($8)
+ lh $3,($10)
+ lh $9,($sp)
+ lh $6,($sp)
+ lh $15,($11)
+ .text
+ .global lw
+lw:
+ lw $12,($10)
+ lw $9,($13)
+ lw $12,($gp)
+ lw $12,($11)
+ lw $13,($10)
+ .text
+ .global lbu
+lbu:
+ lbu $14,($14)
+ lbu $12,($fp)
+ lbu $gp,($1)
+ lbu $fp,($12)
+ lbu $12,($1)
+ .text
+ .global lhu
+lhu:
+ lhu $15,($4)
+ lhu $14,($4)
+ lhu $5,($4)
+ lhu $sp,($tp)
+ lhu $4,($15)
+ .text
+ .global sw_sp
+sw_sp:
+ sw $9,3($8)
+ sw $10,4($5)
+ sw $0,3($gp)
+ sw $0,2($8)
+ sw $15,1($8)
+ .text
+ .global lw_sp
+lw_sp:
+ lw $tp,1($5)
+ lw $15,1($0)
+ lw $0,4($12)
+ lw $11,1($tp)
+ lw $9,3($4)
+ .text
+ .global sb_tp
+sb_tp:
+ sb $5,1($1)
+ sb $10,1($9)
+ sb $5,3($3)
+ sb $5,1($3)
+ sb $10,4($4)
+ .text
+ .global sh_tp
+sh_tp:
+ sh $3,1($0)
+ sh $tp,1($9)
+ sh $9,4($10)
+ sh $15,3($14)
+ sh $14,4($9)
+ .text
+ .global sw_tp
+sw_tp:
+ sw $6,2($13)
+ sw $6,1($15)
+ sw $2,2($3)
+ sw $6,2($12)
+ sw $3,1($11)
+ .text
+ .global lb_tp
+lb_tp:
+ lb $tp,4($11)
+ lb $13,4($8)
+ lb $5,4($5)
+ lb $sp,2($gp)
+ lb $3,2($3)
+ .text
+ .global lh_tp
+lh_tp:
+ lh $7,2($fp)
+ lh $4,3($8)
+ lh $14,1($sp)
+ lh $9,1($0)
+ lh $13,2($0)
+ .text
+ .global lw_tp
+lw_tp:
+ lw $8,4($15)
+ lw $11,4($9)
+ lw $gp,1($2)
+ lw $9,2($14)
+ lw $8,1($12)
+ .text
+ .global lbu_tp
+lbu_tp:
+ lbu $12,1($9)
+ lbu $11,1($9)
+ lbu $14,3($8)
+ lbu $0,2($sp)
+ lbu $13,1($11)
+ .text
+ .global lhu_tp
+lhu_tp:
+ lhu $14,2($10)
+ lhu $11,1($8)
+ lhu $1,1($0)
+ lhu $7,2($15)
+ lhu $3,2($tp)
+ .text
+ .global sb16
+sb16:
+ sb $7,-1($11)
+ sb $tp,1($gp)
+ sb $3,1($gp)
+ sb $14,2($6)
+ sb $14,1($7)
+ .text
+ .global sh16
+sh16:
+ sh $12,-1($4)
+ sh $sp,1($1)
+ sh $2,-2($12)
+ sh $9,2($11)
+ sh $9,-2($12)
+ .text
+ .global sw16
+sw16:
+ sw $11,-1($gp)
+ sw $4,4($15)
+ sw $2,-2($3)
+ sw $6,-1($2)
+ sw $fp,-2($tp)
+ .text
+ .global lb16
+lb16:
+ lb $10,-2($2)
+ lb $3,-2($11)
+ lb $12,1($5)
+ lb $5,1($5)
+ lb $11,2($13)
+ .text
+ .global lh16
+lh16:
+ lh $sp,-1($11)
+ lh $tp,-2($11)
+ lh $2,1($10)
+ lh $8,-1($7)
+ lh $14,-1($11)
+ .text
+ .global lw16
+lw16:
+ lw $0,-1($5)
+ lw $12,-2($7)
+ lw $1,-2($3)
+ lw $1,2($7)
+ lw $4,1($fp)
+ .text
+ .global lbu16
+lbu16:
+ lbu $12,-1($4)
+ lbu $14,1($11)
+ lbu $1,-1($13)
+ lbu $9,-1($tp)
+ lbu $8,1($15)
+ .text
+ .global lhu16
+lhu16:
+ lhu $tp,-1($15)
+ lhu $gp,2($fp)
+ lhu $15,-1($12)
+ lhu $3,-1($0)
+ lhu $3,-2($12)
+ .text
+ .global sw24
+sw24:
+ sw $11,(4)
+ sw $sp,(4)
+ sw $7,(8)
+ sw $10,(16)
+ sw $8,(160)
+ .text
+ .global lw24
+lw24:
+ lw $4,(4)
+ lw $sp,(4)
+ lw $4,(16)
+ lw $fp,(0)
+ lw $tp,(8)
+ .text
+ .global extb
+extb:
+ extb $13
+ extb $tp
+ extb $6
+ extb $14
+ extb $10
+ .text
+ .global exth
+exth:
+ exth $15
+ exth $2
+ exth $5
+ exth $10
+ exth $4
+ .text
+ .global extub
+extub:
+ extub $2
+ extub $tp
+ extub $3
+ extub $9
+ extub $gp
+ .text
+ .global extuh
+extuh:
+ extuh $8
+ extuh $8
+ extuh $4
+ extuh $0
+ extuh $0
+ .text
+ .global ssarb
+ssarb:
+ ssarb 2($fp)
+ ssarb 2($13)
+ ssarb 1($13)
+ ssarb 2($5)
+ ssarb 0($9)
+ .text
+ .global mov
+mov:
+ mov $2,$3
+ mov $3,$11
+ mov $15,$10
+ mov $15,$0
+ mov $3,$tp
+ .text
+ .global movi8
+movi8:
+ mov $11,-1
+ mov $6,2
+ mov $sp,-1
+ mov $sp,1
+ mov $gp,-1
+ .text
+ .global movi16
+movi16:
+ mov $15,0
+ mov $0,2
+ mov $8,-1
+ mov $12,1
+ mov $7,-1
+ .text
+ .global movu24
+movu24:
+ movu $2,1
+ movu $10,4
+ movu $9,0
+ movu $4,3
+ movu $14,1
+ .text
+ .global movu16
+movu16:
+ movu $sp,1
+ movu $6,3
+ movu $0,3
+ movu $gp,3
+ movu $10,2
+ .text
+ .global movh
+movh:
+ movh $8,2
+ movh $13,1
+ movh $gp,2
+ movh $12,0
+ movh $11,2
+ .text
+ .global add3
+add3:
+ add3 $6,$11,$3
+ add3 $14,$13,$5
+ add3 $3,$11,$7
+ add3 $13,$14,$13
+ add3 $0,$14,$8
+ .text
+ .global add
+add:
+ add $12,2
+ add $12,-1
+ add $4,1
+ add $6,1
+ add $6,2
+ .text
+ .global add3i
+add3i:
+ add3 $11,$sp,4
+ add3 $4,$sp,1
+ add3 $0,$sp,0
+ add3 $13,$sp,3
+ add3 $11,$sp,0
+ .text
+ .global advck3
+advck3:
+ advck3 $0,$gp,$10
+ advck3 $0,$tp,$0
+ advck3 $0,$gp,$13
+ advck3 $0,$7,$fp
+ advck3 $0,$1,$2
+ .text
+ .global sub
+sub:
+ sub $8,$14
+ sub $1,$9
+ sub $13,$7
+ sub $15,$3
+ sub $2,$7
+ .text
+ .global sbvck3
+sbvck3:
+ sbvck3 $0,$3,$gp
+ sbvck3 $0,$3,$7
+ sbvck3 $0,$10,$10
+ sbvck3 $0,$4,$tp
+ sbvck3 $0,$10,$15
+ .text
+ .global neg
+neg:
+ neg $14,$7
+ neg $1,$7
+ neg $2,$11
+ neg $13,$fp
+ neg $14,$13
+ .text
+ .global slt3
+slt3:
+ slt3 $0,$14,$8
+ slt3 $0,$4,$13
+ slt3 $0,$10,$14
+ slt3 $0,$14,$5
+ slt3 $0,$3,$12
+ .text
+ .global sltu3
+sltu3:
+ sltu3 $0,$2,$8
+ sltu3 $0,$gp,$11
+ sltu3 $0,$2,$tp
+ sltu3 $0,$9,$fp
+ sltu3 $0,$6,$9
+ .text
+ .global slt3i
+slt3i:
+ slt3 $0,$6,2
+ slt3 $0,$11,1
+ slt3 $0,$15,0
+ slt3 $0,$3,0
+ slt3 $0,$tp,0
+ .text
+ .global sltu3i
+sltu3i:
+ sltu3 $0,$14,4
+ sltu3 $0,$tp,3
+ sltu3 $0,$3,1
+ sltu3 $0,$12,0
+ sltu3 $0,$1,3
+ .text
+ .global sl1ad3
+sl1ad3:
+ sl1ad3 $0,$fp,$gp
+ sl1ad3 $0,$4,$2
+ sl1ad3 $0,$sp,$12
+ sl1ad3 $0,$9,$1
+ sl1ad3 $0,$fp,$2
+ .text
+ .global sl2ad3
+sl2ad3:
+ sl2ad3 $0,$8,$13
+ sl2ad3 $0,$2,$3
+ sl2ad3 $0,$8,$9
+ sl2ad3 $0,$7,$12
+ sl2ad3 $0,$4,$12
+ .text
+ .global add3x
+add3x:
+ add3 $tp,$11,1
+ add3 $tp,$4,-1
+ add3 $2,$13,1
+ add3 $3,$gp,1
+ add3 $10,$15,2
+ .text
+ .global slt3x
+slt3x:
+ slt3 $fp,$1,-1
+ slt3 $0,$3,-2
+ slt3 $9,$15,-1
+ slt3 $3,$fp,2
+ slt3 $tp,$14,0
+ .text
+ .global sltu3x
+sltu3x:
+ sltu3 $15,$11,2
+ sltu3 $6,$0,1
+ sltu3 $9,$11,3
+ sltu3 $0,$4,0
+ sltu3 $13,$gp,4
+ .text
+ .global or
+or:
+ or $sp,$gp
+ or $fp,$3
+ or $0,$sp
+ or $tp,$0
+ or $8,$6
+ .text
+ .global and
+and:
+ and $15,$sp
+ and $6,$14
+ and $4,$2
+ and $5,$fp
+ and $7,$14
+ .text
+ .global xor
+xor:
+ xor $1,$12
+ xor $12,$tp
+ xor $10,$8
+ xor $sp,$11
+ xor $12,$8
+ .text
+ .global nor
+nor:
+ nor $9,$5
+ nor $8,$2
+ nor $15,$9
+ nor $5,$sp
+ nor $sp,$14
+ .text
+ .global or3
+or3:
+ or3 $13,$sp,2
+ or3 $sp,$tp,3
+ or3 $0,$10,4
+ or3 $9,$15,3
+ or3 $9,$sp,0
+ .text
+ .global and3
+and3:
+ and3 $5,$8,1
+ and3 $11,$gp,3
+ and3 $6,$0,0
+ and3 $sp,$sp,0
+ and3 $1,$10,3
+ .text
+ .global xor3
+xor3:
+ xor3 $0,$0,2
+ xor3 $15,$6,0
+ xor3 $13,$5,0
+ xor3 $15,$7,0
+ xor3 $15,$sp,2
+ .text
+ .global sra
+sra:
+ sra $4,$1
+ sra $fp,$15
+ sra $1,$1
+ sra $0,$5
+ sra $9,$1
+ .text
+ .global srl
+srl:
+ srl $2,$11
+ srl $15,$7
+ srl $1,$7
+ srl $3,$13
+ srl $14,$1
+ .text
+ .global sll
+sll:
+ sll $11,$0
+ sll $tp,$fp
+ sll $8,$9
+ sll $13,$15
+ sll $sp,$sp
+ .text
+ .global srai
+srai:
+ sra $1,2
+ sra $15,3
+ sra $sp,3
+ sra $6,4
+ sra $sp,3
+ .text
+ .global srli
+srli:
+ srl $10,0
+ srl $9,3
+ srl $6,4
+ srl $10,2
+ srl $8,3
+ .text
+ .global slli
+slli:
+ sll $0,0
+ sll $4,0
+ sll $13,2
+ sll $11,2
+ sll $6,0
+ .text
+ .global sll3
+sll3:
+ sll3 $0,$tp,4
+ sll3 $0,$14,0
+ sll3 $0,$8,2
+ sll3 $0,$3,2
+ sll3 $0,$fp,0
+ .text
+ .global fsft
+fsft:
+ fsft $gp,$10
+ fsft $gp,$9
+ fsft $15,$13
+ fsft $11,$3
+ fsft $5,$3
+ .text
+ .global bra
+bra:
+ bra 2
+ bra -2
+ bra 2
+ bra 0
+ bra 2
+ .text
+ .global beqz
+beqz:
+ beqz $1,-2
+ beqz $sp,2
+ beqz $4,4
+ beqz $4,0
+ beqz $9,-2
+ .text
+ .global bnez
+bnez:
+ bnez $8,2
+ bnez $13,2
+ bnez $gp,0
+ bnez $6,2
+ bnez $8,-4
+ .text
+ .global beqi
+beqi:
+ beqi $tp,3,0
+ beqi $0,4,-2
+ beqi $sp,4,-2
+ beqi $13,2,0
+ beqi $4,2,-8
+ .text
+ .global bnei
+bnei:
+ bnei $8,1,0
+ bnei $5,1,2
+ bnei $5,0,8
+ bnei $9,4,-2
+ bnei $0,4,-8
+ .text
+ .global blti
+blti:
+ blti $7,3,0
+ blti $1,1,0
+ blti $8,2,2
+ blti $11,2,2
+ blti $15,3,-2
+ .text
+ .global bgei
+bgei:
+ bgei $4,3,-8
+ bgei $7,0,2
+ bgei $13,1,0
+ bgei $5,2,-2
+ bgei $12,4,-8
+ .text
+ .global beq
+beq:
+ beq $7,$2,-2
+ beq $1,$3,-8
+ beq $2,$0,2
+ beq $sp,$fp,2
+ beq $3,$0,0
+ .text
+ .global bne
+bne:
+ bne $6,$3,0
+ bne $sp,$3,-8
+ bne $8,$0,2
+ bne $gp,$sp,8
+ bne $sp,$4,2
+ .text
+ .global bsr12
+bsr12:
+ bsr 2
+ bsr -8
+ bsr -16
+ bsr -2
+ bsr -8
+ .text
+ .global bsr24
+bsr24:
+ bsr 4
+ bsr -2
+ bsr -4
+ bsr 0
+ bsr 2
+ .text
+ .global jmp
+jmp:
+ jmp $2
+ jmp $tp
+ jmp $5
+ jmp $sp
+ jmp $fp
+ .text
+ .global jmp24
+jmp24:
+ jmp 4
+ jmp 2
+ jmp 0
+ jmp 2
+ jmp 4
+ .text
+ .global jsr
+jsr:
+ jsr $15
+ jsr $13
+ jsr $13
+ jsr $6
+ jsr $6
+ .text
+ .global ret
+ret:
+ ret
+ .text
+ .global repeat
+repeat:
+ repeat $4,2
+ repeat $fp,4
+ repeat $0,8
+ repeat $6,2
+ repeat $4,2
+ .text
+ .global erepeat
+erepeat:
+ erepeat 2
+ erepeat 0
+ erepeat 2
+ erepeat -2
+ erepeat 0
+ .text
+ .global stc
+stc:
+ stc $13,$mb1
+ stc $tp,$ccfg
+ stc $11,$dbg
+ stc $10,$ccfg
+ stc $9,$epc
+ .text
+ .global ldc
+ldc:
+ ldc $tp,$lo
+ ldc $8,$npc
+ ldc $9,$mb0
+ ldc $15,$sar
+ ldc $9,$ccfg
+ .text
+ .global di
+di:
+ di
+ .text
+ .global ei
+ei:
+ ei
+ .text
+ .global reti
+reti:
+ reti
+ .text
+ .global halt
+halt:
+ halt
+ .text
+ .global swi
+swi:
+ swi 2
+ swi 0
+ swi 2
+ swi 3
+ swi 1
+ .text
+ .global break
+break:
+ break
+ .text
+ .global sycnm
+syncm:
+ syncm
+ .text
+ .global stcb
+stcb:
+ stcb $5,4
+ stcb $5,1
+ stcb $gp,0
+ stcb $15,4
+ stcb $11,2
+ .text
+ .global ldcb
+ldcb:
+ ldcb $2,3
+ ldcb $2,4
+ ldcb $9,1
+ ldcb $10,4
+ ldcb $1,4
+ .text
+ .global bsetm
+bsetm:
+ bsetm ($10),0
+ bsetm ($sp),0
+ bsetm ($1),2
+ bsetm ($sp),4
+ bsetm ($8),4
+ .text
+ .global bclrm
+bclrm:
+ bclrm ($5),0
+ bclrm ($5),2
+ bclrm ($8),0
+ bclrm ($9),2
+ bclrm ($5),3
+ .text
+ .global bnotm
+bnotm:
+ bnotm ($14),4
+ bnotm ($11),4
+ bnotm ($10),0
+ bnotm ($tp),4
+ bnotm ($fp),0
+ .text
+ .global btstm
+btstm:
+ btstm $0,($14),0
+ btstm $0,($14),1
+ btstm $0,($11),0
+ btstm $0,($14),3
+ btstm $0,($fp),2
+ .text
+ .global tas
+tas:
+ tas $7,($tp)
+ tas $7,($12)
+ tas $3,($fp)
+ tas $2,($5)
+ tas $6,($10)
+ .text
+ .global cache
+cache:
+ cache 1,($13)
+ cache 3,($12)
+ cache 3,($9)
+ cache 4,($2)
+ cache 4,($7)
+ .text
+ .global mul
+mul:
+ mul $8,$14
+ mul $2,$9
+ mul $14,$15
+ mul $9,$7
+ mul $7,$11
+ .text
+ .global mulu
+mulu:
+ mulu $2,$5
+ mulu $6,$gp
+ mulu $gp,$sp
+ mulu $11,$14
+ mulu $3,$9
+ .text
+ .global mulr
+mulr:
+ mulr $12,$6
+ mulr $13,$8
+ mulr $7,$10
+ mulr $gp,$1
+ mulr $0,$15
+ .text
+ .global mulru
+mulru:
+ mulru $4,$2
+ mulru $14,$1
+ mulru $15,$4
+ mulru $10,$6
+ mulru $0,$gp
+ .text
+ .global madd
+madd:
+ madd $4,$11
+ madd $15,$14
+ madd $14,$sp
+ madd $4,$tp
+ madd $1,$gp
+ .text
+ .global maddu
+maddu:
+ maddu $0,$1
+ maddu $7,$6
+ maddu $9,$5
+ maddu $gp,$15
+ maddu $7,$13
+ .text
+ .global maddr
+maddr:
+ maddr $6,$fp
+ maddr $9,$14
+ maddr $8,$gp
+ maddr $3,$2
+ maddr $1,$11
+ .text
+ .global maddru
+maddru:
+ maddru $10,$3
+ maddru $15,$12
+ maddru $8,$fp
+ maddru $14,$3
+ maddru $fp,$15
+ .text
+ .global div
+div:
+ div $9,$3
+ div $4,$14
+ div $2,$12
+ div $fp,$tp
+ div $tp,$6
+ .text
+ .global divu
+divu:
+ divu $9,$5
+ divu $8,$13
+ divu $0,$14
+ divu $9,$5
+ divu $0,$5
+ .text
+ .global dret
+dret:
+ dret
+ .text
+ .global dbreak
+dbreak:
+ dbreak
+ .text
+ .global ldz
+ldz:
+ ldz $gp,$4
+ ldz $10,$11
+ ldz $9,$9
+ ldz $15,$tp
+ ldz $gp,$3
+ .text
+ .global abs
+abs:
+ abs $sp,$9
+ abs $5,$4
+ abs $tp,$13
+ abs $0,$3
+ abs $3,$14
+ .text
+ .global ave
+ave:
+ ave $11,$10
+ ave $fp,$10
+ ave $14,$2
+ ave $10,$12
+ ave $15,$8
+ .text
+ .global min
+min:
+ min $8,$3
+ min $7,$0
+ min $2,$2
+ min $5,$6
+ min $11,$5
+ .text
+ .global max
+max:
+ max $11,$sp
+ max $gp,$0
+ max $12,$sp
+ max $gp,$2
+ max $14,$sp
+ .text
+ .global minu
+minu:
+ minu $11,$8
+ minu $7,$5
+ minu $fp,$14
+ minu $11,$4
+ minu $2,$sp
+ .text
+ .global maxu
+maxu:
+ maxu $3,$3
+ maxu $13,$0
+ maxu $4,$fp
+ maxu $gp,$2
+ maxu $12,$fp
+ .text
+ .global clip
+clip:
+ clip $10,1
+ clip $15,4
+ clip $4,3
+ clip $15,3
+ clip $1,0
+ .text
+ .global clipu
+clipu:
+ clipu $10,4
+ clipu $13,1
+ clipu $5,4
+ clipu $14,0
+ clipu $5,1
+ .text
+ .global sadd
+sadd:
+ sadd $5,$0
+ sadd $15,$3
+ sadd $0,$10
+ sadd $sp,$12
+ sadd $4,$2
+ .text
+ .global ssub
+ssub:
+ ssub $1,$10
+ ssub $4,$7
+ ssub $fp,$3
+ ssub $7,$gp
+ ssub $13,$4
+ .text
+ .global saddu
+saddu:
+ saddu $9,$14
+ saddu $0,$10
+ saddu $7,$12
+ saddu $5,$15
+ saddu $13,$3
+ .text
+ .global ssubu
+ssubu:
+ ssubu $15,$gp
+ ssubu $0,$15
+ ssubu $3,$10
+ ssubu $sp,$13
+ ssubu $2,$9
+ .text
+ .global swcp
+swcp:
+ swcp $c3,($13)
+ swcp $c15,($13)
+ swcp $c13,($0)
+ swcp $c12,($12)
+ swcp $c9,($gp)
+ .text
+ .global lwcp
+lwcp:
+ lwcp $c7,($3)
+ lwcp $c6,($3)
+ lwcp $c0,($2)
+ lwcp $c8,($fp)
+ lwcp $c11,($13)
+ .text
+ .global smcp
+smcp:
+ smcp $c14,($9)
+ smcp $c2,($fp)
+ smcp $c14,($15)
+ smcp $c10,($8)
+ smcp $c2,($8)
+ .text
+ .global lmcp
+lmcp:
+ lmcp $c11,($1)
+ lmcp $c8,($8)
+ lmcp $c11,($13)
+ lmcp $c8,($0)
+ lmcp $c8,($14)
+ .text
+ .global swcpi
+swcpi:
+ swcpi $c7,($0+)
+ swcpi $c6,($gp+)
+ swcpi $c12,($8+)
+ swcpi $c14,($15+)
+ swcpi $c6,($0+)
+ .text
+ .global lwcpi
+lwcpi:
+ lwcpi $c8,($2+)
+ lwcpi $c9,($0+)
+ lwcpi $c3,($14+)
+ lwcpi $c13,($5+)
+ lwcpi $c11,($gp+)
+ .text
+ .global smcpi
+smcpi:
+ smcpi $c8,($2+)
+ smcpi $c11,($9+)
+ smcpi $c4,($3+)
+ smcpi $c14,($2+)
+ smcpi $c9,($3+)
+ .text
+ .global lmcpi
+lmcpi:
+ lmcpi $c6,($14+)
+ lmcpi $c9,($5+)
+ lmcpi $c10,($6+)
+ lmcpi $c1,($6+)
+ lmcpi $c2,($8+)
+ .text
+ .global swcp16
+swcp16:
+ swcp $c0,-1($2)
+ swcp $c5,1($10)
+ swcp $c8,2($12)
+ swcp $c14,-1($1)
+ swcp $c12,2($3)
+ .text
+ .global lwcp16
+lwcp16:
+ lwcp $c8,-1($5)
+ lwcp $c12,1($15)
+ lwcp $c1,2($0)
+ lwcp $c4,1($13)
+ lwcp $c6,2($11)
+ .text
+ .global smcp16
+smcp16:
+ smcp $c9,-1($10)
+ smcp $c14,1($gp)
+ smcp $c3,2($sp)
+ smcp $c15,-2($8)
+ smcp $c13,1($13)
+ .text
+ .global lmcp16
+lmcp16:
+ lmcp $c0,1($15)
+ lmcp $c15,1($fp)
+ lmcp $c2,-1($8)
+ lmcp $c14,1($fp)
+ lmcp $c1,-1($10)
+ .text
+ .global sbcpa
+sbcpa:
+ sbcpa $c14,($sp+),2
+ sbcpa $c2,($4+),-2
+ sbcpa $c8,($1+),0
+ sbcpa $c11,($3+),0
+ sbcpa $c9,($14+),-2
+ .text
+ .global lbcpa
+lbcpa:
+ lbcpa $c7,($2+),-2
+ lbcpa $c12,($sp+),2
+ lbcpa $c5,($4+),-2
+ lbcpa $c7,($4+),-2
+ lbcpa $c8,($15+),0
+ .text
+ .global shcpa
+shcpa:
+ shcpa $c0,($14+),0
+ shcpa $c12,($sp+),16
+ shcpa $c1,($4+),4
+ shcpa $c5,($4+),-32
+ shcpa $c1,($15+),0
+ .text
+ .global lhcpa
+lhcpa:
+ lhcpa $c4,($4+),0
+ lhcpa $c6,($5+),48
+ lhcpa $c3,($6+),-52
+ lhcpa $c8,($6+),-24
+ lhcpa $c0,($9+),0
+ .text
+ .global swcpa
+swcpa:
+ swcpa $c1,($9+),16
+ swcpa $c7,($sp+),32
+ swcpa $c3,($12+),48
+ swcpa $c10,($9+),8
+ swcpa $c14,($8+),4
+ .text
+ .global lwcpa
+lwcpa:
+ lwcpa $c6,($gp+),-8
+ lwcpa $c4,($7+),4
+ lwcpa $c11,($gp+),-16
+ lwcpa $c10,($sp+),-32
+ lwcpa $c2,($2+),8
+ .text
+ .global smcpa
+smcpa:
+ smcpa $c13,($15+),-8
+ smcpa $c6,($7+),-8
+ smcpa $c5,($3+),16
+ smcpa $c13,($15+),16
+ smcpa $c3,($12+),48
+ .text
+ .global lmcpa
+lmcpa:
+ lmcpa $c9,($4+),0
+ lmcpa $c3,($sp+),-16
+ lmcpa $c15,($13+),8
+ lmcpa $c8,($8+),-8
+ lmcpa $c10,($9+),0
+ .text
+ .global sbcpm0
+sbcpm0:
+ sbcpm0 $c10,($13+),8
+ sbcpm0 $c13,($5+),-8
+ sbcpm0 $c4,($5+),-8
+ sbcpm0 $c10,($tp+),16
+ sbcpm0 $c4,($5+),-24
+ .text
+ .global lbcpm0
+lbcpm0:
+ lbcpm0 $c0,($4+),0
+ lbcpm0 $c9,($7+),-8
+ lbcpm0 $c12,($fp+),24
+ lbcpm0 $c8,($12+),16
+ lbcpm0 $c7,($fp+),16
+ .text
+ .global shcpm0
+shcpm0:
+ shcpm0 $c2,($13+),2
+ shcpm0 $c7,($15+),-2
+ shcpm0 $c8,($2+),2
+ shcpm0 $c13,($5+),0
+ shcpm0 $c3,($14+),8
+ .text
+ .global lhcpm0
+lhcpm0:
+ lhcpm0 $c7,($4+),8
+ lhcpm0 $c3,($3+),-2
+ lhcpm0 $c3,($1+),0
+ lhcpm0 $c2,($gp+),0
+ lhcpm0 $c12,($6+),2
+ .text
+ .global swcpm0
+swcpm0:
+ swcpm0 $c8,($fp+),32
+ swcpm0 $c9,($sp+),0
+ swcpm0 $c9,($2+),-16
+ swcpm0 $c0,($14+),48
+ swcpm0 $c15,($1+),8
+ .text
+ .global lwcpm0
+lwcpm0:
+ lwcpm0 $c14,($10+),-4
+ lwcpm0 $c11,($sp+),-4
+ lwcpm0 $c5,($7+),-8
+ lwcpm0 $c2,($12+),32
+ lwcpm0 $c2,($gp+),16
+ .text
+ .global smcpm0
+smcpm0:
+ smcpm0 $c1,($12+),8
+ smcpm0 $c8,($4+),-16
+ smcpm0 $c10,($11+),0
+ smcpm0 $c1,($3+),-16
+ smcpm0 $c11,($sp+),-8
+ .text
+ .global lmcpm0
+lmcpm0:
+ lmcpm0 $c14,($10+),0
+ lmcpm0 $c6,($15+),-16
+ lmcpm0 $c13,($1+),8
+ lmcpm0 $c10,($tp+),-24
+ lmcpm0 $c7,($14+),-24
+ .text
+ .global sbcpm1
+sbcpm1:
+ sbcpm1 $c9,($fp+),0
+ sbcpm1 $c7,($12+),-24
+ sbcpm1 $c15,($5+),-24
+ sbcpm1 $c5,($tp+),16
+ sbcpm1 $c6,($1+),-128
+ .text
+ .global lbcpm1
+lbcpm1:
+ lbcpm1 $c6,($gp+),2
+ lbcpm1 $c7,($tp+),-2
+ lbcpm1 $c4,($13+),1
+ lbcpm1 $c12,($2+),-2
+ lbcpm1 $c11,($7+),1
+ .text
+ .global shcpm1
+shcpm1:
+ shcpm1 $c4,($fp+),24
+ shcpm1 $c11,($6+),-16
+ shcpm1 $c7,($8+),8
+ shcpm1 $c5,($12+),16
+ shcpm1 $c0,($8+),-32
+ .text
+ .global lhcpm1
+lhcpm1:
+ lhcpm1 $c11,($0+),0
+ lhcpm1 $c7,($tp+),-2
+ lhcpm1 $c10,($8+),8
+ lhcpm1 $c3,($tp+),0
+ lhcpm1 $c9,($6+),2
+ .text
+ .global swcpm1
+swcpm1:
+ swcpm1 $c9,($8+),24
+ swcpm1 $c9,($14+),0
+ swcpm1 $c9,($fp+),16
+ swcpm1 $c14,($1+),0
+ swcpm1 $c2,($sp+),8
+ .text
+ .global lwcpm1
+lwcpm1:
+ lwcpm1 $c8,($fp+),0
+ lwcpm1 $c3,($14+),-16
+ lwcpm1 $c7,($6+),-8
+ lwcpm1 $c14,($fp+),-24
+ lwcpm1 $c3,($fp+),24
+ .text
+ .global smcpm1
+smcpm1:
+ smcpm1 $c10,($4+),0
+ smcpm1 $c6,($sp+),-16
+ smcpm1 $c13,($7+),-24
+ smcpm1 $c3,($gp+),-8
+ smcpm1 $c0,($2+),8
+ .text
+ .global lmcpm1
+lmcpm1:
+ lmcpm1 $c12,($1+),0
+ lmcpm1 $c0,($6+),8
+ lmcpm1 $c6,($2+),-8
+ lmcpm1 $c12,($gp+),-16
+ lmcpm1 $c14,($15+),48
+/*
+ .text
+ .global cmov1
+cmov1:
+ cmov $c11,$10
+ cmov $c14,$3
+ cmov $c3,$15
+ cmov $c6,$5
+ cmov $c6,$10
+ .text
+ .global cmov2
+cmov2:
+ cmov $11,$c2
+ cmov $10,$c2
+ cmov $tp,$c10
+ cmov $12,$c9
+ cmov $15,$c3
+ .text
+ .global cmovc1
+cmovc1:
+ cmovc $ccr9,$sp
+ cmovc $ccr12,$fp
+ cmovc $ccr1,$4
+ cmovc $ccr11,$sp
+ cmovc $ccr14,$7
+ .text
+ .global cmovc2
+cmovc2:
+ cmovc $fp,$ccr6
+ cmovc $fp,$ccr6
+ cmovc $7,$ccr8
+ cmovc $sp,$ccr12
+ cmovc $sp,$ccr5
+ .text
+ .global cmovh1
+cmovh1:
+ cmovh $c8,$1
+ cmovh $c12,$sp
+ cmovh $c11,$5
+ cmovh $c4,$4
+ cmovh $c3,$gp
+ .text
+ .global cmovh2
+cmovh2:
+ cmovh $4,$c7
+ cmovh $gp,$c8
+ cmovh $6,$c10
+ cmovh $2,$c8
+ cmovh $10,$c4
+*/
+ .text
+ .global bcpeq
+bcpeq:
+ bcpeq 4,0
+ bcpeq 0,-2
+ bcpeq 4,-2
+ bcpeq 1,2
+ bcpeq 2,2
+ .text
+ .global bcpne
+bcpne:
+ bcpne 2,0
+ bcpne 4,0
+ bcpne 1,0
+ bcpne 4,0
+ bcpne 1,2
+ .text
+ .global bcpat
+bcpat:
+ bcpat 1,-2
+ bcpat 0,2
+ bcpat 0,-2
+ bcpat 2,0
+ bcpat 1,-2
+ .text
+ .global bcpaf
+bcpaf:
+ bcpaf 4,0
+ bcpaf 3,0
+ bcpaf 4,0
+ bcpaf 1,2
+ bcpaf 4,2
+ .text
+ .global synccp
+synccp:
+ synccp
+ .text
+ .global jsrv
+jsrv:
+ jsrv $11
+ jsrv $5
+ jsrv $10
+ jsrv $12
+ jsrv $10
+ .text
+ .global bsrv
+bsrv:
+ bsrv -2
+ bsrv -2
+ bsrv -2
+ bsrv 2
+ bsrv 0
+ .text
+ .global case106341
+case106341:
+ stc $10,7
+ ldc $0, (4 + 4)
+case106821:
+ /* Actual 16 bit form */
+ sb $0,($0)
+ sh $0,($0)
+ sw $0,($0)
+ lb $0,($0)
+ lh $0,($0)
+ lw $0,($0)
+ lbu $0,($0)
+ lhu $0,($0)
+ /* Should use 16 bit form */
+ sb $0,0($0)
+ sb $0,%lo(0)($0)
+ sb $0,%hi(0)($0)
+ sb $0,%uhi(0)($0)
+ sb $0,%sdaoff(0)($0)
+ sb $0,%tpoff(0)($0)
+ sh $0,0($0)
+ sh $0,%lo(0)($0)
+ sh $0,%hi(0)($0)
+ sh $0,%uhi(0)($0)
+ sh $0,%sdaoff(0)($0)
+ sh $0,%tpoff(0)($0)
+ sw $0,0($0)
+ sw $0,%lo(0)($0)
+ sw $0,%hi(0)($0)
+ sw $0,%uhi(0)($0)
+ sw $0,%sdaoff(0)($0)
+ sw $0,%tpoff(0)($0)
+ lb $0,0($0)
+ lb $0,%lo(0)($0)
+ lb $0,%hi(0)($0)
+ lb $0,%uhi(0)($0)
+ lb $0,%sdaoff(0)($0)
+ lb $0,%tpoff(0)($0)
+ lh $0,0($0)
+ lh $0,%lo(0)($0)
+ lh $0,%hi(0)($0)
+ lh $0,%uhi(0)($0)
+ lh $0,%sdaoff(0)($0)
+ lh $0,%tpoff(0)($0)
+ lw $0,0($0)
+ lw $0,%lo(0)($0)
+ lw $0,%hi(0)($0)
+ lw $0,%uhi(0)($0)
+ lw $0,%sdaoff(0)($0)
+ lw $0,%tpoff(0)($0)
+ lbu $0,0($0)
+ lbu $0,%lo(0)($0)
+ lbu $0,%hi(0)($0)
+ lbu $0,%uhi(0)($0)
+ lbu $0,%sdaoff(0)($0)
+ lbu $0,%tpoff(0)($0)
+ lhu $0,0($0)
+ lhu $0,%lo(0)($0)
+ lhu $0,%hi(0)($0)
+ lhu $0,%uhi(0)($0)
+ lhu $0,%sdaoff(0)($0)
+ lhu $0,%tpoff(0)($0)
+ /* Should use 32 bit form */
+ sb $0,1($0)
+ sb $0,%lo(1)($0)
+ sb $0,%hi(1)($0)
+ sb $0,%uhi(1)($0)
+ sb $0,%sdaoff(1)($0)
+ sb $0,%tpoff(1)($0)
+ sh $0,1($0)
+ sh $0,%lo(1)($0)
+ sh $0,%hi(1)($0)
+ sh $0,%uhi(1)($0)
+ sh $0,%sdaoff(1)($0)
+ sh $0,%tpoff(1)($0)
+ sw $0,1($0)
+ sw $0,%lo(1)($0)
+ sw $0,%hi(1)($0)
+ sw $0,%uhi(1)($0)
+ sw $0,%sdaoff(1)($0)
+ sw $0,%tpoff(1)($0)
+ lb $0,1($0)
+ lb $0,%lo(1)($0)
+ lb $0,%hi(1)($0)
+ lb $0,%uhi(1)($0)
+ lb $0,%sdaoff(1)($0)
+ lb $0,%tpoff(1)($0)
+ lh $0,1($0)
+ lh $0,%lo(1)($0)
+ lh $0,%hi(1)($0)
+ lh $0,%uhi(1)($0)
+ lh $0,%sdaoff(1)($0)
+ lh $0,%tpoff(1)($0)
+ lw $0,1($0)
+ lw $0,%lo(1)($0)
+ lw $0,%hi(1)($0)
+ lw $0,%uhi(1)($0)
+ lw $0,%sdaoff(1)($0)
+ lw $0,%tpoff(1)($0)
+ lbu $0,1($0)
+ lbu $0,%lo(1)($0)
+ lbu $0,%hi(1)($0)
+ lbu $0,%uhi(1)($0)
+ lbu $0,%sdaoff(1)($0)
+ lbu $0,%tpoff(1)($0)
+ lhu $0,1($0)
+ lhu $0,%lo(1)($0)
+ lhu $0,%hi(1)($0)
+ lhu $0,%uhi(1)($0)
+ lhu $0,%sdaoff(1)($0)
+ lhu $0,%tpoff(1)($0)
+ /* Should use 32 bit form */
+ sb $0,case106821($0)
+ sb $0,%lo(case106821)($0)
+ sb $0,%hi(case106821)($0)
+ sb $0,%uhi(case106821)($0)
+ sh $0,case106821($0)
+ sh $0,%lo(case106821)($0)
+ sh $0,%hi(case106821)($0)
+ sh $0,%uhi(case106821)($0)
+ sw $0,case106821($0)
+ sw $0,%lo(case106821)($0)
+ sw $0,%hi(case106821)($0)
+ sw $0,%uhi(case106821)($0)
+ lb $0,case106821($0)
+ lb $0,%lo(case106821)($0)
+ lb $0,%hi(case106821)($0)
+ lb $0,%uhi(case106821)($0)
+ lh $0,case106821($0)
+ lh $0,%lo(case106821)($0)
+ lh $0,%hi(case106821)($0)
+ lh $0,%uhi(case106821)($0)
+ lw $0,case106821($0)
+ lw $0,%lo(case106821)($0)
+ lw $0,%hi(case106821)($0)
+ lw $0,%uhi(case106821)($0)
+ lbu $0,case106821($0)
+ lbu $0,%lo(case106821)($0)
+ lbu $0,%hi(case106821)($0)
+ lbu $0,%uhi(case106821)($0)
+ lhu $0,case106821($0)
+ lhu $0,%lo(case106821)($0)
+ lhu $0,%hi(case106821)($0)
+ lhu $0,%uhi(case106821)($0)
diff --git a/gas/testsuite/gas/mep/branch1.d b/gas/testsuite/gas/mep/branch1.d
new file mode 100644
index 0000000000..271b9184a5
--- /dev/null
+++ b/gas/testsuite/gas/mep/branch1.d
@@ -0,0 +1,14 @@
+#objdump: -dzr
+
+.*: *file format elf32-mep
+
+Disassembly of section \.text:
+
+.* <.*>:
+ .*: 00 00 * nop
+ .*: e4 51 00 04 * beq \$4,\$5,.* <foo>
+ .*: 00 00 * nop
+ .*: 00 00 * nop
+
+.* <foo>:
+ .*: 00 00 * nop
diff --git a/gas/testsuite/gas/mep/branch1.s b/gas/testsuite/gas/mep/branch1.s
new file mode 100644
index 0000000000..7c69985d7e
--- /dev/null
+++ b/gas/testsuite/gas/mep/branch1.s
@@ -0,0 +1,7 @@
+ .globl foo
+ nop
+ beq $4,$5,foo
+ nop
+ nop
+foo:
+ nop
diff --git a/gas/testsuite/gas/mep/complex-relocs.exp b/gas/testsuite/gas/mep/complex-relocs.exp
new file mode 100644
index 0000000000..ed8a72a413
--- /dev/null
+++ b/gas/testsuite/gas/mep/complex-relocs.exp
@@ -0,0 +1,42 @@
+# complex relocations testsuite
+
+proc ld_test { objects ldflags dest test } {
+ set ld_output [target_link $objects $dest $ldflags]
+ if [string match "" $ld_output] then { pass $test } else { fail $test }
+}
+
+proc ld_test_error { objects ldflags dest test } {
+ set ld_output [target_link $objects $dest $ldflags]
+ if [string match "" $ld_output] then { fail $test } else { pass $test }
+}
+
+proc objdump_test { exec flags dest test } {
+ set objdump [find_binutils_prog objdump]
+ verbose -log "$objdump $flags $exec > $dest"
+ catch "exec $objdump $flags $exec > $dest" objdump_output
+ if [string match "" $objdump_output] then { pass $test } else { fail $test }
+}
+
+proc regexp_test { file1 file2 test } {
+ if [regexp_diff $file1 $file2] then { fail $test } else { pass $test }
+}
+
+
+global srcdir subdir
+if [istarget mep*-*-*] {
+
+ # test that complex relocs between files work, generally
+ gas_test relocs-junk1.s {-mconfig=fmax -o relocs-junk1.o} {} {assembling relocs-junk1}
+ gas_test relocs-syms.s {-mconfig=fmax -o relocs-syms.o} {} {assembling relocs-syms}
+ gas_test relocs-junk2.s {-mconfig=fmax -o relocs-junk2.o} {} {assembling relocs-junk2}
+ gas_test relocs-refs.s {-mconfig=fmax -o relocs-refs.o} {} {assembling relocs-refs}
+ ld_test {relocs-junk1.o relocs-syms.o relocs-junk2.o relocs-refs.o} {--defsym __stack=0x1ffff0 --defsym __sbss_end=0x1000 -e 1233} {relocs.x} {linking relocs.x}
+ objdump_test {relocs.x} {-dzs} {relocs.dump} {disassembling relocs.x}
+ regexp_test {relocs.dump} "$srcdir/$subdir/relocs.d" {matching disassembly for relocs.x}
+
+ foreach test {3} {
+ # perform specific negative boundary tests
+ gas_test "relocs-bad$test.s" [list -mconfig=fmax -o "relocs-bad$test.o"] {} [list assembling "relocs-bad$test"]
+ ld_test_error "relocs-bad$test.o" {-e 1233} "relocs-bad$test.x" [list linking "relocs-bad$test"]
+ }
+}
diff --git a/gas/testsuite/gas/mep/dj1.d b/gas/testsuite/gas/mep/dj1.d
new file mode 100644
index 0000000000..c314d724ce
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj1.d
@@ -0,0 +1,1393 @@
+#as:
+#objdump: -dr
+#name: dj1
+
+dump.o: file format elf32-mep
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 00 00 nop
+ 2: 01 00 mov \$1,\$0
+ 4: 02 00 mov \$2,\$0
+ 6: 03 00 mov \$3,\$0
+ 8: 04 00 mov \$4,\$0
+ a: 05 00 mov \$5,\$0
+ c: 06 00 mov \$6,\$0
+ e: 07 00 mov \$7,\$0
+ 10: 08 00 mov \$8,\$0
+ 12: 09 00 mov \$9,\$0
+ 14: 0a 00 mov \$10,\$0
+ 16: 0b 00 mov \$11,\$0
+ 18: 0c 00 mov \$12,\$0
+ 1a: 0d 00 mov \$tp,\$0
+ 1c: 0e 00 mov \$gp,\$0
+ 1e: 0f 00 mov \$sp,\$0
+ 20: 08 00 mov \$8,\$0
+ 22: 0d 00 mov \$tp,\$0
+ 24: 0e 00 mov \$gp,\$0
+ 26: 0f 00 mov \$sp,\$0
+ 28: 00 08 sb \$0,\(\$0\)
+ 2a: 00 09 sh \$0,\(\$0\)
+ 2c: 00 0a sw \$0,\(\$0\)
+ 2e: 00 0c lb \$0,\(\$0\)
+ 30: 00 0d lh \$0,\(\$0\)
+ 32: 00 0e lw \$0,\(\$0\)
+ 34: 00 0b lbu \$0,\(\$0\)
+ 36: 00 0f lhu \$0,\(\$0\)
+ 38: 0f 08 sb \$sp,\(\$0\)
+ 3a: 0f 09 sh \$sp,\(\$0\)
+ 3c: 0f 0a sw \$sp,\(\$0\)
+ 3e: 0f 0c lb \$sp,\(\$0\)
+ 40: 0f 0d lh \$sp,\(\$0\)
+ 42: 0f 0e lw \$sp,\(\$0\)
+ 44: 0f 0b lbu \$sp,\(\$0\)
+ 46: 0f 0f lhu \$sp,\(\$0\)
+ 48: 00 f8 sb \$0,\(\$sp\)
+ 4a: 00 f9 sh \$0,\(\$sp\)
+ 4c: 00 fa sw \$0,\(\$sp\)
+ 4e: 00 fc lb \$0,\(\$sp\)
+ 50: 00 fd lh \$0,\(\$sp\)
+ 52: 00 fe lw \$0,\(\$sp\)
+ 54: 00 fb lbu \$0,\(\$sp\)
+ 56: 00 ff lhu \$0,\(\$sp\)
+ 58: 0f f8 sb \$sp,\(\$sp\)
+ 5a: 0f f9 sh \$sp,\(\$sp\)
+ 5c: 0f fa sw \$sp,\(\$sp\)
+ 5e: 0f fc lb \$sp,\(\$sp\)
+ 60: 0f fd lh \$sp,\(\$sp\)
+ 62: 0f fe lw \$sp,\(\$sp\)
+ 64: 0f fb lbu \$sp,\(\$sp\)
+ 66: 0f ff lhu \$sp,\(\$sp\)
+ 68: 00 fa sw \$0,\(\$sp\)
+ 6a: 00 fe lw \$0,\(\$sp\)
+ 6c: 0f fa sw \$sp,\(\$sp\)
+ 6e: 0f fe lw \$sp,\(\$sp\)
+ 70: 40 7e sw \$0,0x7c\(\$sp\)
+ 72: 40 7f lw \$0,0x7c\(\$sp\)
+ 74: 4f 7e sw \$sp,0x7c\(\$sp\)
+ 76: 4f 7f lw \$sp,0x7c\(\$sp\)
+ 78: 00 fa sw \$0,\(\$sp\)
+ 7a: 00 fe lw \$0,\(\$sp\)
+ 7c: 0f fa sw \$sp,\(\$sp\)
+ 7e: 0f fe lw \$sp,\(\$sp\)
+ 80: 40 7e sw \$0,0x7c\(\$sp\)
+ 82: 40 7f lw \$0,0x7c\(\$sp\)
+ 84: 4f 7e sw \$sp,0x7c\(\$sp\)
+ 86: 4f 7f lw \$sp,0x7c\(\$sp\)
+ 88: 00 d8 sb \$0,\(\$tp\)
+ 8a: 00 dc lb \$0,\(\$tp\)
+ 8c: 00 db lbu \$0,\(\$tp\)
+ 8e: 07 d8 sb \$7,\(\$tp\)
+ 90: 07 dc lb \$7,\(\$tp\)
+ 92: 07 db lbu \$7,\(\$tp\)
+ 94: 80 7f sb \$0,0x7f\(\$tp\)
+ 96: 88 7f lb \$0,0x7f\(\$tp\)
+ 98: 48 ff lbu \$0,0x7f\(\$tp\)
+ 9a: 87 7f sb \$7,0x7f\(\$tp\)
+ 9c: 8f 7f lb \$7,0x7f\(\$tp\)
+ 9e: 4f ff lbu \$7,0x7f\(\$tp\)
+ a0: 80 00 sb \$0,0x0\(\$tp\)
+ a0: R_MEP_TPREL7 symbol
+ a2: 88 00 lb \$0,0x0\(\$tp\)
+ a2: R_MEP_TPREL7 symbol
+ a4: 48 80 lbu \$0,0x0\(\$tp\)
+ a4: R_MEP_TPREL7 symbol
+ a6: 87 00 sb \$7,0x0\(\$tp\)
+ a6: R_MEP_TPREL7 symbol
+ a8: 8f 00 lb \$7,0x0\(\$tp\)
+ a8: R_MEP_TPREL7 symbol
+ aa: 4f 80 lbu \$7,0x0\(\$tp\)
+ aa: R_MEP_TPREL7 symbol
+ ac: 00 d8 sb \$0,\(\$tp\)
+ ae: 00 dc lb \$0,\(\$tp\)
+ b0: 00 db lbu \$0,\(\$tp\)
+ b2: 07 d8 sb \$7,\(\$tp\)
+ b4: 07 dc lb \$7,\(\$tp\)
+ b6: 07 db lbu \$7,\(\$tp\)
+ b8: 80 7f sb \$0,0x7f\(\$tp\)
+ ba: 88 7f lb \$0,0x7f\(\$tp\)
+ bc: 48 ff lbu \$0,0x7f\(\$tp\)
+ be: 87 7f sb \$7,0x7f\(\$tp\)
+ c0: 8f 7f lb \$7,0x7f\(\$tp\)
+ c2: 4f ff lbu \$7,0x7f\(\$tp\)
+ c4: 80 00 sb \$0,0x0\(\$tp\)
+ c4: R_MEP_TPREL7 symbol
+ c6: 88 00 lb \$0,0x0\(\$tp\)
+ c6: R_MEP_TPREL7 symbol
+ c8: 48 80 lbu \$0,0x0\(\$tp\)
+ c8: R_MEP_TPREL7 symbol
+ ca: 87 00 sb \$7,0x0\(\$tp\)
+ ca: R_MEP_TPREL7 symbol
+ cc: 8f 00 lb \$7,0x0\(\$tp\)
+ cc: R_MEP_TPREL7 symbol
+ ce: 4f 80 lbu \$7,0x0\(\$tp\)
+ ce: R_MEP_TPREL7 symbol
+ d0: 00 d9 sh \$0,\(\$tp\)
+ d2: 00 dd lh \$0,\(\$tp\)
+ d4: 00 df lhu \$0,\(\$tp\)
+ d6: 07 d9 sh \$7,\(\$tp\)
+ d8: 07 dd lh \$7,\(\$tp\)
+ da: 07 df lhu \$7,\(\$tp\)
+ dc: 80 fe sh \$0,0x7e\(\$tp\)
+ de: 88 fe lh \$0,0x7e\(\$tp\)
+ e0: 88 ff lhu \$0,0x7e\(\$tp\)
+ e2: 87 fe sh \$7,0x7e\(\$tp\)
+ e4: 8f fe lh \$7,0x7e\(\$tp\)
+ e6: 8f ff lhu \$7,0x7e\(\$tp\)
+ e8: 80 80 sh \$0,0x0\(\$tp\)
+ e8: R_MEP_TPREL7A2 symbol
+ ea: 88 80 lh \$0,0x0\(\$tp\)
+ ea: R_MEP_TPREL7A2 symbol
+ ec: 88 81 lhu \$0,0x0\(\$tp\)
+ ec: R_MEP_TPREL7A2 symbol
+ ee: 87 80 sh \$7,0x0\(\$tp\)
+ ee: R_MEP_TPREL7A2 symbol
+ f0: 8f 80 lh \$7,0x0\(\$tp\)
+ f0: R_MEP_TPREL7A2 symbol
+ f2: 8f 81 lhu \$7,0x0\(\$tp\)
+ f2: R_MEP_TPREL7A2 symbol
+ f4: 00 d9 sh \$0,\(\$tp\)
+ f6: 00 dd lh \$0,\(\$tp\)
+ f8: 00 df lhu \$0,\(\$tp\)
+ fa: 07 d9 sh \$7,\(\$tp\)
+ fc: 07 dd lh \$7,\(\$tp\)
+ fe: 07 df lhu \$7,\(\$tp\)
+ 100: 80 fe sh \$0,0x7e\(\$tp\)
+ 102: 88 fe lh \$0,0x7e\(\$tp\)
+ 104: 88 ff lhu \$0,0x7e\(\$tp\)
+ 106: 87 fe sh \$7,0x7e\(\$tp\)
+ 108: 8f fe lh \$7,0x7e\(\$tp\)
+ 10a: 8f ff lhu \$7,0x7e\(\$tp\)
+ 10c: 80 80 sh \$0,0x0\(\$tp\)
+ 10c: R_MEP_TPREL7A2 symbol
+ 10e: 88 80 lh \$0,0x0\(\$tp\)
+ 10e: R_MEP_TPREL7A2 symbol
+ 110: 88 81 lhu \$0,0x0\(\$tp\)
+ 110: R_MEP_TPREL7A2 symbol
+ 112: 87 80 sh \$7,0x0\(\$tp\)
+ 112: R_MEP_TPREL7A2 symbol
+ 114: 8f 80 lh \$7,0x0\(\$tp\)
+ 114: R_MEP_TPREL7A2 symbol
+ 116: 8f 81 lhu \$7,0x0\(\$tp\)
+ 116: R_MEP_TPREL7A2 symbol
+ 118: 00 da sw \$0,\(\$tp\)
+ 11a: 00 de lw \$0,\(\$tp\)
+ 11c: 07 da sw \$7,\(\$tp\)
+ 11e: 07 de lw \$7,\(\$tp\)
+ 120: 40 fe sw \$0,0x7c\(\$tp\)
+ 122: 40 ff lw \$0,0x7c\(\$tp\)
+ 124: 47 fe sw \$7,0x7c\(\$tp\)
+ 126: 47 ff lw \$7,0x7c\(\$tp\)
+ 128: 40 82 sw \$0,0x0\(\$tp\)
+ 128: R_MEP_TPREL7A4 symbol
+ 12a: 40 83 lw \$0,0x0\(\$tp\)
+ 12a: R_MEP_TPREL7A4 symbol
+ 12c: 47 82 sw \$7,0x0\(\$tp\)
+ 12c: R_MEP_TPREL7A4 symbol
+ 12e: 47 83 lw \$7,0x0\(\$tp\)
+ 12e: R_MEP_TPREL7A4 symbol
+ 130: 00 da sw \$0,\(\$tp\)
+ 132: 00 de lw \$0,\(\$tp\)
+ 134: 07 da sw \$7,\(\$tp\)
+ 136: 07 de lw \$7,\(\$tp\)
+ 138: 40 fe sw \$0,0x7c\(\$tp\)
+ 13a: 40 ff lw \$0,0x7c\(\$tp\)
+ 13c: 47 fe sw \$7,0x7c\(\$tp\)
+ 13e: 47 ff lw \$7,0x7c\(\$tp\)
+ 140: 40 82 sw \$0,0x0\(\$tp\)
+ 140: R_MEP_TPREL7A4 symbol
+ 142: 40 83 lw \$0,0x0\(\$tp\)
+ 142: R_MEP_TPREL7A4 symbol
+ 144: 47 82 sw \$7,0x0\(\$tp\)
+ 144: R_MEP_TPREL7A4 symbol
+ 146: 47 83 lw \$7,0x0\(\$tp\)
+ 146: R_MEP_TPREL7A4 symbol
+ 148: c0 08 80 00 sb \$0,-32768\(\$0\)
+ 14c: c0 09 80 00 sh \$0,-32768\(\$0\)
+ 150: c0 0a 80 00 sw \$0,-32768\(\$0\)
+ 154: c0 0c 80 00 lb \$0,-32768\(\$0\)
+ 158: c0 0d 80 00 lh \$0,-32768\(\$0\)
+ 15c: c0 0e 80 00 lw \$0,-32768\(\$0\)
+ 160: c0 0b 80 00 lbu \$0,-32768\(\$0\)
+ 164: c0 0f 80 00 lhu \$0,-32768\(\$0\)
+ 168: cf 08 80 00 sb \$sp,-32768\(\$0\)
+ 16c: cf 09 80 00 sh \$sp,-32768\(\$0\)
+ 170: cf 0a 80 00 sw \$sp,-32768\(\$0\)
+ 174: cf 0c 80 00 lb \$sp,-32768\(\$0\)
+ 178: cf 0d 80 00 lh \$sp,-32768\(\$0\)
+ 17c: cf 0e 80 00 lw \$sp,-32768\(\$0\)
+ 180: cf 0b 80 00 lbu \$sp,-32768\(\$0\)
+ 184: cf 0f 80 00 lhu \$sp,-32768\(\$0\)
+ 188: c0 08 7f ff sb \$0,32767\(\$0\)
+ 18c: c0 09 7f ff sh \$0,32767\(\$0\)
+ 190: c0 0a 7f ff sw \$0,32767\(\$0\)
+ 194: c0 0c 7f ff lb \$0,32767\(\$0\)
+ 198: c0 0d 7f ff lh \$0,32767\(\$0\)
+ 19c: c0 0e 7f ff lw \$0,32767\(\$0\)
+ 1a0: c0 0b 7f ff lbu \$0,32767\(\$0\)
+ 1a4: c0 0f 7f ff lhu \$0,32767\(\$0\)
+ 1a8: cf 08 7f ff sb \$sp,32767\(\$0\)
+ 1ac: cf 09 7f ff sh \$sp,32767\(\$0\)
+ 1b0: cf 0a 7f ff sw \$sp,32767\(\$0\)
+ 1b4: cf 0c 7f ff lb \$sp,32767\(\$0\)
+ 1b8: cf 0d 7f ff lh \$sp,32767\(\$0\)
+ 1bc: cf 0e 7f ff lw \$sp,32767\(\$0\)
+ 1c0: cf 0b 7f ff lbu \$sp,32767\(\$0\)
+ 1c4: cf 0f 7f ff lhu \$sp,32767\(\$0\)
+ 1c8: c0 08 00 00 sb \$0,0\(\$0\)
+ 1c8: R_MEP_GPREL symbol
+ 1cc: c0 09 00 00 sh \$0,0\(\$0\)
+ 1cc: R_MEP_GPREL symbol
+ 1d0: c0 0a 00 00 sw \$0,0\(\$0\)
+ 1d0: R_MEP_GPREL symbol
+ 1d4: c0 0c 00 00 lb \$0,0\(\$0\)
+ 1d4: R_MEP_GPREL symbol
+ 1d8: c0 0d 00 00 lh \$0,0\(\$0\)
+ 1d8: R_MEP_GPREL symbol
+ 1dc: c0 0e 00 00 lw \$0,0\(\$0\)
+ 1dc: R_MEP_GPREL symbol
+ 1e0: c0 0b 00 00 lbu \$0,0\(\$0\)
+ 1e0: R_MEP_GPREL symbol
+ 1e4: c0 0f 00 00 lhu \$0,0\(\$0\)
+ 1e4: R_MEP_GPREL symbol
+ 1e8: cf 08 00 00 sb \$sp,0\(\$0\)
+ 1e8: R_MEP_GPREL symbol
+ 1ec: cf 09 00 00 sh \$sp,0\(\$0\)
+ 1ec: R_MEP_GPREL symbol
+ 1f0: cf 0a 00 00 sw \$sp,0\(\$0\)
+ 1f0: R_MEP_GPREL symbol
+ 1f4: cf 0c 00 00 lb \$sp,0\(\$0\)
+ 1f4: R_MEP_GPREL symbol
+ 1f8: cf 0d 00 00 lh \$sp,0\(\$0\)
+ 1f8: R_MEP_GPREL symbol
+ 1fc: cf 0e 00 00 lw \$sp,0\(\$0\)
+ 1fc: R_MEP_GPREL symbol
+ 200: cf 0b 00 00 lbu \$sp,0\(\$0\)
+ 200: R_MEP_GPREL symbol
+ 204: cf 0f 00 00 lhu \$sp,0\(\$0\)
+ 204: R_MEP_GPREL symbol
+ 208: c0 08 80 00 sb \$0,-32768\(\$0\)
+ 20c: c0 09 80 00 sh \$0,-32768\(\$0\)
+ 210: c0 0a 80 00 sw \$0,-32768\(\$0\)
+ 214: c0 0c 80 00 lb \$0,-32768\(\$0\)
+ 218: c0 0d 80 00 lh \$0,-32768\(\$0\)
+ 21c: c0 0e 80 00 lw \$0,-32768\(\$0\)
+ 220: c0 0b 80 00 lbu \$0,-32768\(\$0\)
+ 224: c0 0f 80 00 lhu \$0,-32768\(\$0\)
+ 228: cf 08 80 00 sb \$sp,-32768\(\$0\)
+ 22c: cf 09 80 00 sh \$sp,-32768\(\$0\)
+ 230: cf 0a 80 00 sw \$sp,-32768\(\$0\)
+ 234: cf 0c 80 00 lb \$sp,-32768\(\$0\)
+ 238: cf 0d 80 00 lh \$sp,-32768\(\$0\)
+ 23c: cf 0e 80 00 lw \$sp,-32768\(\$0\)
+ 240: cf 0b 80 00 lbu \$sp,-32768\(\$0\)
+ 244: cf 0f 80 00 lhu \$sp,-32768\(\$0\)
+ 248: c0 08 7f ff sb \$0,32767\(\$0\)
+ 24c: c0 09 7f ff sh \$0,32767\(\$0\)
+ 250: c0 0a 7f ff sw \$0,32767\(\$0\)
+ 254: c0 0c 7f ff lb \$0,32767\(\$0\)
+ 258: c0 0d 7f ff lh \$0,32767\(\$0\)
+ 25c: c0 0e 7f ff lw \$0,32767\(\$0\)
+ 260: c0 0b 7f ff lbu \$0,32767\(\$0\)
+ 264: c0 0f 7f ff lhu \$0,32767\(\$0\)
+ 268: cf 08 7f ff sb \$sp,32767\(\$0\)
+ 26c: cf 09 7f ff sh \$sp,32767\(\$0\)
+ 270: cf 0a 7f ff sw \$sp,32767\(\$0\)
+ 274: cf 0c 7f ff lb \$sp,32767\(\$0\)
+ 278: cf 0d 7f ff lh \$sp,32767\(\$0\)
+ 27c: cf 0e 7f ff lw \$sp,32767\(\$0\)
+ 280: cf 0b 7f ff lbu \$sp,32767\(\$0\)
+ 284: cf 0f 7f ff lhu \$sp,32767\(\$0\)
+ 288: c0 08 00 00 sb \$0,0\(\$0\)
+ 288: R_MEP_TPREL symbol
+ 28c: c0 09 00 00 sh \$0,0\(\$0\)
+ 28c: R_MEP_TPREL symbol
+ 290: c0 0a 00 00 sw \$0,0\(\$0\)
+ 290: R_MEP_TPREL symbol
+ 294: c0 0c 00 00 lb \$0,0\(\$0\)
+ 294: R_MEP_TPREL symbol
+ 298: c0 0d 00 00 lh \$0,0\(\$0\)
+ 298: R_MEP_TPREL symbol
+ 29c: c0 0e 00 00 lw \$0,0\(\$0\)
+ 29c: R_MEP_TPREL symbol
+ 2a0: c0 0b 00 00 lbu \$0,0\(\$0\)
+ 2a0: R_MEP_TPREL symbol
+ 2a4: c0 0f 00 00 lhu \$0,0\(\$0\)
+ 2a4: R_MEP_TPREL symbol
+ 2a8: cf 08 00 00 sb \$sp,0\(\$0\)
+ 2a8: R_MEP_TPREL symbol
+ 2ac: cf 09 00 00 sh \$sp,0\(\$0\)
+ 2ac: R_MEP_TPREL symbol
+ 2b0: cf 0a 00 00 sw \$sp,0\(\$0\)
+ 2b0: R_MEP_TPREL symbol
+ 2b4: cf 0c 00 00 lb \$sp,0\(\$0\)
+ 2b4: R_MEP_TPREL symbol
+ 2b8: cf 0d 00 00 lh \$sp,0\(\$0\)
+ 2b8: R_MEP_TPREL symbol
+ 2bc: cf 0e 00 00 lw \$sp,0\(\$0\)
+ 2bc: R_MEP_TPREL symbol
+ 2c0: cf 0b 00 00 lbu \$sp,0\(\$0\)
+ 2c0: R_MEP_TPREL symbol
+ 2c4: cf 0f 00 00 lhu \$sp,0\(\$0\)
+ 2c4: R_MEP_TPREL symbol
+ 2c8: c0 f8 80 00 sb \$0,-32768\(\$sp\)
+ 2cc: c0 f9 80 00 sh \$0,-32768\(\$sp\)
+ 2d0: c0 fa 80 00 sw \$0,-32768\(\$sp\)
+ 2d4: c0 fc 80 00 lb \$0,-32768\(\$sp\)
+ 2d8: c0 fd 80 00 lh \$0,-32768\(\$sp\)
+ 2dc: c0 fe 80 00 lw \$0,-32768\(\$sp\)
+ 2e0: c0 fb 80 00 lbu \$0,-32768\(\$sp\)
+ 2e4: c0 ff 80 00 lhu \$0,-32768\(\$sp\)
+ 2e8: cf f8 80 00 sb \$sp,-32768\(\$sp\)
+ 2ec: cf f9 80 00 sh \$sp,-32768\(\$sp\)
+ 2f0: cf fa 80 00 sw \$sp,-32768\(\$sp\)
+ 2f4: cf fc 80 00 lb \$sp,-32768\(\$sp\)
+ 2f8: cf fd 80 00 lh \$sp,-32768\(\$sp\)
+ 2fc: cf fe 80 00 lw \$sp,-32768\(\$sp\)
+ 300: cf fb 80 00 lbu \$sp,-32768\(\$sp\)
+ 304: cf ff 80 00 lhu \$sp,-32768\(\$sp\)
+ 308: c0 f8 7f ff sb \$0,32767\(\$sp\)
+ 30c: c0 f9 7f ff sh \$0,32767\(\$sp\)
+ 310: c0 fa 7f ff sw \$0,32767\(\$sp\)
+ 314: c0 fc 7f ff lb \$0,32767\(\$sp\)
+ 318: c0 fd 7f ff lh \$0,32767\(\$sp\)
+ 31c: c0 fe 7f ff lw \$0,32767\(\$sp\)
+ 320: c0 fb 7f ff lbu \$0,32767\(\$sp\)
+ 324: c0 ff 7f ff lhu \$0,32767\(\$sp\)
+ 328: cf f8 7f ff sb \$sp,32767\(\$sp\)
+ 32c: cf f9 7f ff sh \$sp,32767\(\$sp\)
+ 330: cf fa 7f ff sw \$sp,32767\(\$sp\)
+ 334: cf fc 7f ff lb \$sp,32767\(\$sp\)
+ 338: cf fd 7f ff lh \$sp,32767\(\$sp\)
+ 33c: cf fe 7f ff lw \$sp,32767\(\$sp\)
+ 340: cf fb 7f ff lbu \$sp,32767\(\$sp\)
+ 344: cf ff 7f ff lhu \$sp,32767\(\$sp\)
+ 348: c0 f8 00 00 sb \$0,0\(\$sp\)
+ 348: R_MEP_GPREL symbol
+ 34c: c0 f9 00 00 sh \$0,0\(\$sp\)
+ 34c: R_MEP_GPREL symbol
+ 350: c0 fa 00 00 sw \$0,0\(\$sp\)
+ 350: R_MEP_GPREL symbol
+ 354: c0 fc 00 00 lb \$0,0\(\$sp\)
+ 354: R_MEP_GPREL symbol
+ 358: c0 fd 00 00 lh \$0,0\(\$sp\)
+ 358: R_MEP_GPREL symbol
+ 35c: c0 fe 00 00 lw \$0,0\(\$sp\)
+ 35c: R_MEP_GPREL symbol
+ 360: c0 fb 00 00 lbu \$0,0\(\$sp\)
+ 360: R_MEP_GPREL symbol
+ 364: c0 ff 00 00 lhu \$0,0\(\$sp\)
+ 364: R_MEP_GPREL symbol
+ 368: cf f8 00 00 sb \$sp,0\(\$sp\)
+ 368: R_MEP_GPREL symbol
+ 36c: cf f9 00 00 sh \$sp,0\(\$sp\)
+ 36c: R_MEP_GPREL symbol
+ 370: cf fa 00 00 sw \$sp,0\(\$sp\)
+ 370: R_MEP_GPREL symbol
+ 374: cf fc 00 00 lb \$sp,0\(\$sp\)
+ 374: R_MEP_GPREL symbol
+ 378: cf fd 00 00 lh \$sp,0\(\$sp\)
+ 378: R_MEP_GPREL symbol
+ 37c: cf fe 00 00 lw \$sp,0\(\$sp\)
+ 37c: R_MEP_GPREL symbol
+ 380: cf fb 00 00 lbu \$sp,0\(\$sp\)
+ 380: R_MEP_GPREL symbol
+ 384: cf ff 00 00 lhu \$sp,0\(\$sp\)
+ 384: R_MEP_GPREL symbol
+ 388: c0 f8 80 00 sb \$0,-32768\(\$sp\)
+ 38c: c0 f9 80 00 sh \$0,-32768\(\$sp\)
+ 390: c0 fa 80 00 sw \$0,-32768\(\$sp\)
+ 394: c0 fc 80 00 lb \$0,-32768\(\$sp\)
+ 398: c0 fd 80 00 lh \$0,-32768\(\$sp\)
+ 39c: c0 fe 80 00 lw \$0,-32768\(\$sp\)
+ 3a0: c0 fb 80 00 lbu \$0,-32768\(\$sp\)
+ 3a4: c0 ff 80 00 lhu \$0,-32768\(\$sp\)
+ 3a8: cf f8 80 00 sb \$sp,-32768\(\$sp\)
+ 3ac: cf f9 80 00 sh \$sp,-32768\(\$sp\)
+ 3b0: cf fa 80 00 sw \$sp,-32768\(\$sp\)
+ 3b4: cf fc 80 00 lb \$sp,-32768\(\$sp\)
+ 3b8: cf fd 80 00 lh \$sp,-32768\(\$sp\)
+ 3bc: cf fe 80 00 lw \$sp,-32768\(\$sp\)
+ 3c0: cf fb 80 00 lbu \$sp,-32768\(\$sp\)
+ 3c4: cf ff 80 00 lhu \$sp,-32768\(\$sp\)
+ 3c8: c0 f8 7f ff sb \$0,32767\(\$sp\)
+ 3cc: c0 f9 7f ff sh \$0,32767\(\$sp\)
+ 3d0: c0 fa 7f ff sw \$0,32767\(\$sp\)
+ 3d4: c0 fc 7f ff lb \$0,32767\(\$sp\)
+ 3d8: c0 fd 7f ff lh \$0,32767\(\$sp\)
+ 3dc: c0 fe 7f ff lw \$0,32767\(\$sp\)
+ 3e0: c0 fb 7f ff lbu \$0,32767\(\$sp\)
+ 3e4: c0 ff 7f ff lhu \$0,32767\(\$sp\)
+ 3e8: cf f8 7f ff sb \$sp,32767\(\$sp\)
+ 3ec: cf f9 7f ff sh \$sp,32767\(\$sp\)
+ 3f0: cf fa 7f ff sw \$sp,32767\(\$sp\)
+ 3f4: cf fc 7f ff lb \$sp,32767\(\$sp\)
+ 3f8: cf fd 7f ff lh \$sp,32767\(\$sp\)
+ 3fc: cf fe 7f ff lw \$sp,32767\(\$sp\)
+ 400: cf fb 7f ff lbu \$sp,32767\(\$sp\)
+ 404: cf ff 7f ff lhu \$sp,32767\(\$sp\)
+ 408: c0 f8 00 00 sb \$0,0\(\$sp\)
+ 408: R_MEP_TPREL symbol
+ 40c: c0 f9 00 00 sh \$0,0\(\$sp\)
+ 40c: R_MEP_TPREL symbol
+ 410: 40 02 sw \$0,0x0\(\$sp\)
+ 410: R_MEP_TPREL7A4 symbol
+ 412: c0 fc 00 00 lb \$0,0\(\$sp\)
+ 412: R_MEP_TPREL symbol
+ 416: c0 fd 00 00 lh \$0,0\(\$sp\)
+ 416: R_MEP_TPREL symbol
+ 41a: 40 03 lw \$0,0x0\(\$sp\)
+ 41a: R_MEP_TPREL7A4 symbol
+ 41c: c0 fb 00 00 lbu \$0,0\(\$sp\)
+ 41c: R_MEP_TPREL symbol
+ 420: c0 ff 00 00 lhu \$0,0\(\$sp\)
+ 420: R_MEP_TPREL symbol
+ 424: cf f8 00 00 sb \$sp,0\(\$sp\)
+ 424: R_MEP_TPREL symbol
+ 428: cf f9 00 00 sh \$sp,0\(\$sp\)
+ 428: R_MEP_TPREL symbol
+ 42c: 4f 02 sw \$sp,0x0\(\$sp\)
+ 42c: R_MEP_TPREL7A4 symbol
+ 42e: cf fc 00 00 lb \$sp,0\(\$sp\)
+ 42e: R_MEP_TPREL symbol
+ 432: cf fd 00 00 lh \$sp,0\(\$sp\)
+ 432: R_MEP_TPREL symbol
+ 436: 4f 03 lw \$sp,0x0\(\$sp\)
+ 436: R_MEP_TPREL7A4 symbol
+ 438: cf fb 00 00 lbu \$sp,0\(\$sp\)
+ 438: R_MEP_TPREL symbol
+ 43c: cf ff 00 00 lhu \$sp,0\(\$sp\)
+ 43c: R_MEP_TPREL symbol
+ 440: e0 02 00 00 sw \$0,\(0x0\)
+ 444: e0 03 00 00 lw \$0,\(0x0\)
+ 448: ef 02 00 00 sw \$sp,\(0x0\)
+ 44c: ef 03 00 00 lw \$sp,\(0x0\)
+ 450: e0 fe ff ff sw \$0,\(0xfffffc\)
+ 454: e0 ff ff ff lw \$0,\(0xfffffc\)
+ 458: ef fe ff ff sw \$sp,\(0xfffffc\)
+ 45c: ef ff ff ff lw \$sp,\(0xfffffc\)
+ 460: e0 02 00 00 sw \$0,\(0x0\)
+ 460: R_MEP_ADDR24A4 symbol
+ 464: e0 03 00 00 lw \$0,\(0x0\)
+ 464: R_MEP_ADDR24A4 symbol
+ 468: ef 02 00 00 sw \$sp,\(0x0\)
+ 468: R_MEP_ADDR24A4 symbol
+ 46c: ef 03 00 00 lw \$sp,\(0x0\)
+ 46c: R_MEP_ADDR24A4 symbol
+ 470: 10 0d extb \$0
+ 472: 10 8d extub \$0
+ 474: 10 2d exth \$0
+ 476: 10 ad extuh \$0
+ 478: 1f 0d extb \$sp
+ 47a: 1f 8d extub \$sp
+ 47c: 1f 2d exth \$sp
+ 47e: 1f ad extuh \$sp
+ 480: 10 0c ssarb 0\(\$0\)
+ 482: 13 0c ssarb 3\(\$0\)
+ 484: 10 fc ssarb 0\(\$sp\)
+ 486: 13 fc ssarb 3\(\$sp\)
+ 488: 00 00 nop
+ 48a: 0f 00 mov \$sp,\$0
+ 48c: 00 f0 mov \$0,\$sp
+ 48e: 0f f0 mov \$sp,\$sp
+ 490: c0 01 80 00 mov \$0,-32768
+ 494: cf 01 80 00 mov \$sp,-32768
+ 498: 50 80 mov \$0,-128
+ 49a: 5f 80 mov \$sp,-128
+ 49c: 50 00 mov \$0,0
+ 49e: 5f 00 mov \$sp,0
+ 4a0: 50 7f mov \$0,127
+ 4a2: 5f 7f mov \$sp,127
+ 4a4: c0 01 7f ff mov \$0,32767
+ 4a8: cf 01 7f ff mov \$sp,32767
+ 4ac: c0 01 00 00 mov \$0,0
+ 4ac: R_MEP_LOW16 symbol
+ 4b0: c0 01 00 00 mov \$0,0
+ 4b0: R_MEP_HI16S symbol
+ 4b4: c0 01 00 00 mov \$0,0
+ 4b4: R_MEP_HI16U symbol
+ 4b8: c0 01 00 00 mov \$0,0
+ 4b8: R_MEP_GPREL symbol
+ 4bc: c0 01 00 00 mov \$0,0
+ 4bc: R_MEP_TPREL symbol
+ 4c0: d0 00 00 00 movu \$0,0x0
+ 4c4: d7 00 00 00 movu \$7,0x0
+ 4c8: d0 ff ff ff movu \$0,0xffffff
+ 4cc: d7 ff ff ff movu \$7,0xffffff
+ 4d0: c0 11 00 00 movu \$0,0x0
+ 4d0: R_MEP_LOW16 symbol
+ 4d4: c7 11 00 00 movu \$7,0x0
+ 4d4: R_MEP_LOW16 symbol
+ 4d8: d0 00 00 00 movu \$0,0x0
+ 4d8: R_MEP_UIMM24 symbol
+ 4dc: d7 00 00 00 movu \$7,0x0
+ 4dc: R_MEP_UIMM24 symbol
+ 4e0: d0 00 00 00 movu \$0,0x0
+ 4e4: c0 21 00 00 movh \$0,0x0
+ 4e8: cf 11 00 00 movu \$sp,0x0
+ 4ec: cf 21 00 00 movh \$sp,0x0
+ 4f0: d0 ff 00 ff movu \$0,0xffff
+ 4f4: c0 21 ff ff movh \$0,0xffff
+ 4f8: cf 11 ff ff movu \$sp,0xffff
+ 4fc: cf 21 ff ff movh \$sp,0xffff
+ 500: c0 11 00 00 movu \$0,0x0
+ 500: R_MEP_LOW16 symbol
+ 504: c0 21 00 00 movh \$0,0x0
+ 504: R_MEP_LOW16 symbol
+ 508: cf 11 00 00 movu \$sp,0x0
+ 508: R_MEP_LOW16 symbol
+ 50c: cf 21 00 00 movh \$sp,0x0
+ 50c: R_MEP_LOW16 symbol
+ 510: c0 11 00 00 movu \$0,0x0
+ 510: R_MEP_HI16S symbol
+ 514: c0 21 00 00 movh \$0,0x0
+ 514: R_MEP_HI16S symbol
+ 518: cf 11 00 00 movu \$sp,0x0
+ 518: R_MEP_HI16S symbol
+ 51c: cf 21 00 00 movh \$sp,0x0
+ 51c: R_MEP_HI16S symbol
+ 520: c0 11 00 00 movu \$0,0x0
+ 520: R_MEP_HI16U symbol
+ 524: c0 21 00 00 movh \$0,0x0
+ 524: R_MEP_HI16U symbol
+ 528: cf 11 00 00 movu \$sp,0x0
+ 528: R_MEP_HI16U symbol
+ 52c: cf 21 00 00 movh \$sp,0x0
+ 52c: R_MEP_HI16U symbol
+ 530: c0 11 56 78 movu \$0,0x5678
+ 534: c0 21 56 78 movh \$0,0x5678
+ 538: cf 11 56 78 movu \$sp,0x5678
+ 53c: cf 21 56 78 movh \$sp,0x5678
+ 540: c0 11 12 34 movu \$0,0x1234
+ 544: c0 21 12 34 movh \$0,0x1234
+ 548: cf 11 12 34 movu \$sp,0x1234
+ 54c: cf 21 12 34 movh \$sp,0x1234
+ 550: c0 11 12 34 movu \$0,0x1234
+ 554: c0 21 12 34 movh \$0,0x1234
+ 558: cf 11 12 34 movu \$sp,0x1234
+ 55c: cf 21 12 34 movh \$sp,0x1234
+ 560: 90 00 add3 \$0,\$0,\$0
+ 562: 90 0f add3 \$sp,\$0,\$0
+ 564: 9f 00 add3 \$0,\$sp,\$0
+ 566: 9f 0f add3 \$sp,\$sp,\$0
+ 568: 90 f0 add3 \$0,\$0,\$sp
+ 56a: 90 ff add3 \$sp,\$0,\$sp
+ 56c: 9f f0 add3 \$0,\$sp,\$sp
+ 56e: 9f ff add3 \$sp,\$sp,\$sp
+ 570: 60 c0 add \$0,-16
+ 572: 6f c0 add \$sp,-16
+ 574: 60 00 add \$0,0
+ 576: 6f 00 add \$sp,0
+ 578: 60 3c add \$0,15
+ 57a: 6f 3c add \$sp,15
+ 57c: 40 00 add3 \$0,\$sp,0x0
+ 57e: 4f 00 add3 \$sp,\$sp,0x0
+ 580: 40 7c add3 \$0,\$sp,0x7c
+ 582: 4f 7c add3 \$sp,\$sp,0x7c
+ 584: c0 f0 00 01 add3 \$0,\$sp,1
+ 588: cf f0 00 01 add3 \$sp,\$sp,1
+ 58c: 00 07 advck3 \$0,\$0,\$0
+ 58e: 00 05 sbvck3 \$0,\$0,\$0
+ 590: 0f 07 advck3 \$0,\$sp,\$0
+ 592: 0f 05 sbvck3 \$0,\$sp,\$0
+ 594: 00 f7 advck3 \$0,\$0,\$sp
+ 596: 00 f5 sbvck3 \$0,\$0,\$sp
+ 598: 0f f7 advck3 \$0,\$sp,\$sp
+ 59a: 0f f5 sbvck3 \$0,\$sp,\$sp
+ 59c: 00 04 sub \$0,\$0
+ 59e: 00 01 neg \$0,\$0
+ 5a0: 0f 04 sub \$sp,\$0
+ 5a2: 0f 01 neg \$sp,\$0
+ 5a4: 00 f4 sub \$0,\$sp
+ 5a6: 00 f1 neg \$0,\$sp
+ 5a8: 0f f4 sub \$sp,\$sp
+ 5aa: 0f f1 neg \$sp,\$sp
+ 5ac: 00 02 slt3 \$0,\$0,\$0
+ 5ae: 00 03 sltu3 \$0,\$0,\$0
+ 5b0: 20 06 sl1ad3 \$0,\$0,\$0
+ 5b2: 20 07 sl2ad3 \$0,\$0,\$0
+ 5b4: 0f 02 slt3 \$0,\$sp,\$0
+ 5b6: 0f 03 sltu3 \$0,\$sp,\$0
+ 5b8: 2f 06 sl1ad3 \$0,\$sp,\$0
+ 5ba: 2f 07 sl2ad3 \$0,\$sp,\$0
+ 5bc: 00 f2 slt3 \$0,\$0,\$sp
+ 5be: 00 f3 sltu3 \$0,\$0,\$sp
+ 5c0: 20 f6 sl1ad3 \$0,\$0,\$sp
+ 5c2: 20 f7 sl2ad3 \$0,\$0,\$sp
+ 5c4: 0f f2 slt3 \$0,\$sp,\$sp
+ 5c6: 0f f3 sltu3 \$0,\$sp,\$sp
+ 5c8: 2f f6 sl1ad3 \$0,\$sp,\$sp
+ 5ca: 2f f7 sl2ad3 \$0,\$sp,\$sp
+ 5cc: c0 00 80 00 add3 \$0,\$0,-32768
+ 5d0: cf 00 80 00 add3 \$sp,\$0,-32768
+ 5d4: c0 f0 80 00 add3 \$0,\$sp,-32768
+ 5d8: cf f0 80 00 add3 \$sp,\$sp,-32768
+ 5dc: c0 00 7f ff add3 \$0,\$0,32767
+ 5e0: cf 00 7f ff add3 \$sp,\$0,32767
+ 5e4: c0 f0 7f ff add3 \$0,\$sp,32767
+ 5e8: cf f0 7f ff add3 \$sp,\$sp,32767
+ 5ec: c0 00 00 00 add3 \$0,\$0,0
+ 5ec: R_MEP_LOW16 symbol
+ 5f0: cf 00 00 00 add3 \$sp,\$0,0
+ 5f0: R_MEP_LOW16 symbol
+ 5f4: c0 f0 00 00 add3 \$0,\$sp,0
+ 5f4: R_MEP_LOW16 symbol
+ 5f8: cf f0 00 00 add3 \$sp,\$sp,0
+ 5f8: R_MEP_LOW16 symbol
+ 5fc: 60 01 slt3 \$0,\$0,0x0
+ 5fe: 60 05 sltu3 \$0,\$0,0x0
+ 600: 6f 01 slt3 \$0,\$sp,0x0
+ 602: 6f 05 sltu3 \$0,\$sp,0x0
+ 604: 60 f9 slt3 \$0,\$0,0x1f
+ 606: 60 fd sltu3 \$0,\$0,0x1f
+ 608: 6f f9 slt3 \$0,\$sp,0x1f
+ 60a: 6f fd sltu3 \$0,\$sp,0x1f
+ 60c: 10 00 or \$0,\$0
+ 60e: 10 01 and \$0,\$0
+ 610: 10 02 xor \$0,\$0
+ 612: 10 03 nor \$0,\$0
+ 614: 1f 00 or \$sp,\$0
+ 616: 1f 01 and \$sp,\$0
+ 618: 1f 02 xor \$sp,\$0
+ 61a: 1f 03 nor \$sp,\$0
+ 61c: 10 f0 or \$0,\$sp
+ 61e: 10 f1 and \$0,\$sp
+ 620: 10 f2 xor \$0,\$sp
+ 622: 10 f3 nor \$0,\$sp
+ 624: 1f f0 or \$sp,\$sp
+ 626: 1f f1 and \$sp,\$sp
+ 628: 1f f2 xor \$sp,\$sp
+ 62a: 1f f3 nor \$sp,\$sp
+ 62c: c0 04 00 00 or3 \$0,\$0,0x0
+ 630: c0 05 00 00 and3 \$0,\$0,0x0
+ 634: c0 06 00 00 xor3 \$0,\$0,0x0
+ 638: cf 04 00 00 or3 \$sp,\$0,0x0
+ 63c: cf 05 00 00 and3 \$sp,\$0,0x0
+ 640: cf 06 00 00 xor3 \$sp,\$0,0x0
+ 644: c0 f4 00 00 or3 \$0,\$sp,0x0
+ 648: c0 f5 00 00 and3 \$0,\$sp,0x0
+ 64c: c0 f6 00 00 xor3 \$0,\$sp,0x0
+ 650: cf f4 00 00 or3 \$sp,\$sp,0x0
+ 654: cf f5 00 00 and3 \$sp,\$sp,0x0
+ 658: cf f6 00 00 xor3 \$sp,\$sp,0x0
+ 65c: c0 04 ff ff or3 \$0,\$0,0xffff
+ 660: c0 05 ff ff and3 \$0,\$0,0xffff
+ 664: c0 06 ff ff xor3 \$0,\$0,0xffff
+ 668: cf 04 ff ff or3 \$sp,\$0,0xffff
+ 66c: cf 05 ff ff and3 \$sp,\$0,0xffff
+ 670: cf 06 ff ff xor3 \$sp,\$0,0xffff
+ 674: c0 f4 ff ff or3 \$0,\$sp,0xffff
+ 678: c0 f5 ff ff and3 \$0,\$sp,0xffff
+ 67c: c0 f6 ff ff xor3 \$0,\$sp,0xffff
+ 680: cf f4 ff ff or3 \$sp,\$sp,0xffff
+ 684: cf f5 ff ff and3 \$sp,\$sp,0xffff
+ 688: cf f6 ff ff xor3 \$sp,\$sp,0xffff
+ 68c: c0 04 00 00 or3 \$0,\$0,0x0
+ 68c: R_MEP_LOW16 symbol
+ 690: c0 05 00 00 and3 \$0,\$0,0x0
+ 690: R_MEP_LOW16 symbol
+ 694: c0 06 00 00 xor3 \$0,\$0,0x0
+ 694: R_MEP_LOW16 symbol
+ 698: cf 04 00 00 or3 \$sp,\$0,0x0
+ 698: R_MEP_LOW16 symbol
+ 69c: cf 05 00 00 and3 \$sp,\$0,0x0
+ 69c: R_MEP_LOW16 symbol
+ 6a0: cf 06 00 00 xor3 \$sp,\$0,0x0
+ 6a0: R_MEP_LOW16 symbol
+ 6a4: c0 f4 00 00 or3 \$0,\$sp,0x0
+ 6a4: R_MEP_LOW16 symbol
+ 6a8: c0 f5 00 00 and3 \$0,\$sp,0x0
+ 6a8: R_MEP_LOW16 symbol
+ 6ac: c0 f6 00 00 xor3 \$0,\$sp,0x0
+ 6ac: R_MEP_LOW16 symbol
+ 6b0: cf f4 00 00 or3 \$sp,\$sp,0x0
+ 6b0: R_MEP_LOW16 symbol
+ 6b4: cf f5 00 00 and3 \$sp,\$sp,0x0
+ 6b4: R_MEP_LOW16 symbol
+ 6b8: cf f6 00 00 xor3 \$sp,\$sp,0x0
+ 6b8: R_MEP_LOW16 symbol
+ 6bc: 20 0d sra \$0,\$0
+ 6be: 20 0c srl \$0,\$0
+ 6c0: 20 0e sll \$0,\$0
+ 6c2: 20 0f fsft \$0,\$0
+ 6c4: 2f 0d sra \$sp,\$0
+ 6c6: 2f 0c srl \$sp,\$0
+ 6c8: 2f 0e sll \$sp,\$0
+ 6ca: 2f 0f fsft \$sp,\$0
+ 6cc: 20 fd sra \$0,\$sp
+ 6ce: 20 fc srl \$0,\$sp
+ 6d0: 20 fe sll \$0,\$sp
+ 6d2: 20 ff fsft \$0,\$sp
+ 6d4: 2f fd sra \$sp,\$sp
+ 6d6: 2f fc srl \$sp,\$sp
+ 6d8: 2f fe sll \$sp,\$sp
+ 6da: 2f ff fsft \$sp,\$sp
+ 6dc: 60 03 sra \$0,0x0
+ 6de: 60 02 srl \$0,0x0
+ 6e0: 60 06 sll \$0,0x0
+ 6e2: 6f 03 sra \$sp,0x0
+ 6e4: 6f 02 srl \$sp,0x0
+ 6e6: 6f 06 sll \$sp,0x0
+ 6e8: 60 fb sra \$0,0x1f
+ 6ea: 60 fa srl \$0,0x1f
+ 6ec: 60 fe sll \$0,0x1f
+ 6ee: 6f fb sra \$sp,0x1f
+ 6f0: 6f fa srl \$sp,0x1f
+ 6f2: 6f fe sll \$sp,0x1f
+ 6f4: 60 07 sll3 \$0,\$0,0x0
+ 6f6: 6f 07 sll3 \$0,\$sp,0x0
+ 6f8: 60 ff sll3 \$0,\$0,0x1f
+ 6fa: 6f ff sll3 \$0,\$sp,0x1f
+ 6fc: b8 02 bra 0xfffffefe
+ 6fe: e0 01 04 00 beq \$0,\$0,0xefe
+ 702: b0 00 bra 0x702
+ 702: R_MEP_PCREL12A2 symbol
+ 704: a0 82 beqz \$0,0x686
+ 706: a0 83 bnez \$0,0x688
+ 708: af 82 beqz \$sp,0x68a
+ 70a: af 83 bnez \$sp,0x68c
+ 70c: e0 00 00 40 beqi \$0,0x0,0x78c
+ 710: e0 04 00 40 bnei \$0,0x0,0x790
+ 714: ef 00 00 40 beqi \$sp,0x0,0x794
+ 718: ef 04 00 40 bnei \$sp,0x0,0x798
+ 71c: a0 00 beqz \$0,0x71c
+ 71c: R_MEP_PCREL8A2 symbol
+ 71e: a0 01 bnez \$0,0x71e
+ 71e: R_MEP_PCREL8A2 symbol
+ 720: af 00 beqz \$sp,0x720
+ 720: R_MEP_PCREL8A2 symbol
+ 722: af 01 bnez \$sp,0x722
+ 722: R_MEP_PCREL8A2 symbol
+ 724: e0 00 80 02 beqi \$0,0x0,0xffff0728
+ 728: e0 04 80 02 bnei \$0,0x0,0xffff072c
+ 72c: e0 0c 80 02 blti \$0,0x0,0xffff0730
+ 730: e0 08 80 02 bgei \$0,0x0,0xffff0734
+ 734: ef 00 80 02 beqi \$sp,0x0,0xffff0738
+ 738: ef 04 80 02 bnei \$sp,0x0,0xffff073c
+ 73c: ef 0c 80 02 blti \$sp,0x0,0xffff0740
+ 740: ef 08 80 02 bgei \$sp,0x0,0xffff0744
+ 744: e0 f0 80 02 beqi \$0,0xf,0xffff0748
+ 748: e0 f4 80 02 bnei \$0,0xf,0xffff074c
+ 74c: e0 fc 80 02 blti \$0,0xf,0xffff0750
+ 750: e0 f8 80 02 bgei \$0,0xf,0xffff0754
+ 754: ef f0 80 02 beqi \$sp,0xf,0xffff0758
+ 758: ef f4 80 02 bnei \$sp,0xf,0xffff075c
+ 75c: ef fc 80 02 blti \$sp,0xf,0xffff0760
+ 760: ef f8 80 02 bgei \$sp,0xf,0xffff0764
+ 764: e0 00 3f ff beqi \$0,0x0,0x8762
+ 768: e0 04 3f ff bnei \$0,0x0,0x8766
+ 76c: e0 0c 3f ff blti \$0,0x0,0x876a
+ 770: e0 08 3f ff bgei \$0,0x0,0x876e
+ 774: ef 00 3f ff beqi \$sp,0x0,0x8772
+ 778: ef 04 3f ff bnei \$sp,0x0,0x8776
+ 77c: ef 0c 3f ff blti \$sp,0x0,0x877a
+ 780: ef 08 3f ff bgei \$sp,0x0,0x877e
+ 784: e0 f0 3f ff beqi \$0,0xf,0x8782
+ 788: e0 f4 3f ff bnei \$0,0xf,0x8786
+ 78c: e0 fc 3f ff blti \$0,0xf,0x878a
+ 790: e0 f8 3f ff bgei \$0,0xf,0x878e
+ 794: ef f0 3f ff beqi \$sp,0xf,0x8792
+ 798: ef f4 3f ff bnei \$sp,0xf,0x8796
+ 79c: ef fc 3f ff blti \$sp,0xf,0x879a
+ 7a0: ef f8 3f ff bgei \$sp,0xf,0x879e
+ 7a4: e0 00 00 00 beqi \$0,0x0,0x7a4
+ 7a4: R_MEP_PCREL17A2 symbol
+ 7a8: e0 04 00 00 bnei \$0,0x0,0x7a8
+ 7a8: R_MEP_PCREL17A2 symbol
+ 7ac: e0 0c 00 00 blti \$0,0x0,0x7ac
+ 7ac: R_MEP_PCREL17A2 symbol
+ 7b0: e0 08 00 00 bgei \$0,0x0,0x7b0
+ 7b0: R_MEP_PCREL17A2 symbol
+ 7b4: ef 00 00 00 beqi \$sp,0x0,0x7b4
+ 7b4: R_MEP_PCREL17A2 symbol
+ 7b8: ef 04 00 00 bnei \$sp,0x0,0x7b8
+ 7b8: R_MEP_PCREL17A2 symbol
+ 7bc: ef 0c 00 00 blti \$sp,0x0,0x7bc
+ 7bc: R_MEP_PCREL17A2 symbol
+ 7c0: ef 08 00 00 bgei \$sp,0x0,0x7c0
+ 7c0: R_MEP_PCREL17A2 symbol
+ 7c4: e0 f0 00 00 beqi \$0,0xf,0x7c4
+ 7c4: R_MEP_PCREL17A2 symbol
+ 7c8: e0 f4 00 00 bnei \$0,0xf,0x7c8
+ 7c8: R_MEP_PCREL17A2 symbol
+ 7cc: e0 fc 00 00 blti \$0,0xf,0x7cc
+ 7cc: R_MEP_PCREL17A2 symbol
+ 7d0: e0 f8 00 00 bgei \$0,0xf,0x7d0
+ 7d0: R_MEP_PCREL17A2 symbol
+ 7d4: ef f0 00 00 beqi \$sp,0xf,0x7d4
+ 7d4: R_MEP_PCREL17A2 symbol
+ 7d8: ef f4 00 00 bnei \$sp,0xf,0x7d8
+ 7d8: R_MEP_PCREL17A2 symbol
+ 7dc: ef fc 00 00 blti \$sp,0xf,0x7dc
+ 7dc: R_MEP_PCREL17A2 symbol
+ 7e0: ef f8 00 00 bgei \$sp,0xf,0x7e0
+ 7e0: R_MEP_PCREL17A2 symbol
+ 7e4: e0 01 80 02 beq \$0,\$0,0xffff07e8
+ 7e8: e0 05 80 02 bne \$0,\$0,0xffff07ec
+ 7ec: ef 01 80 02 beq \$sp,\$0,0xffff07f0
+ 7f0: ef 05 80 02 bne \$sp,\$0,0xffff07f4
+ 7f4: e0 f1 80 02 beq \$0,\$sp,0xffff07f8
+ 7f8: e0 f5 80 02 bne \$0,\$sp,0xffff07fc
+ 7fc: ef f1 80 02 beq \$sp,\$sp,0xffff0800
+ 800: ef f5 80 02 bne \$sp,\$sp,0xffff0804
+ 804: e0 01 3f ff beq \$0,\$0,0x8802
+ 808: e0 05 3f ff bne \$0,\$0,0x8806
+ 80c: ef 01 3f ff beq \$sp,\$0,0x880a
+ 810: ef 05 3f ff bne \$sp,\$0,0x880e
+ 814: e0 f1 3f ff beq \$0,\$sp,0x8812
+ 818: e0 f5 3f ff bne \$0,\$sp,0x8816
+ 81c: ef f1 3f ff beq \$sp,\$sp,0x881a
+ 820: ef f5 3f ff bne \$sp,\$sp,0x881e
+ 824: e0 01 00 00 beq \$0,\$0,0x824
+ 824: R_MEP_PCREL17A2 symbol
+ 828: e0 05 00 00 bne \$0,\$0,0x828
+ 828: R_MEP_PCREL17A2 symbol
+ 82c: ef 01 00 00 beq \$sp,\$0,0x82c
+ 82c: R_MEP_PCREL17A2 symbol
+ 830: ef 05 00 00 bne \$sp,\$0,0x830
+ 830: R_MEP_PCREL17A2 symbol
+ 834: e0 f1 00 00 beq \$0,\$sp,0x834
+ 834: R_MEP_PCREL17A2 symbol
+ 838: e0 f5 00 00 bne \$0,\$sp,0x838
+ 838: R_MEP_PCREL17A2 symbol
+ 83c: ef f1 00 00 beq \$sp,\$sp,0x83c
+ 83c: R_MEP_PCREL17A2 symbol
+ 840: ef f5 00 00 bne \$sp,\$sp,0x840
+ 840: R_MEP_PCREL17A2 symbol
+ 844: d8 29 80 00 bsr 0xff800848
+ 848: b8 03 bsr 0x4a
+ 84a: d8 09 00 08 bsr 0x104a
+ 84e: d8 19 80 00 bsr 0xff800850
+ 852: d8 09 00 00 bsr 0x852
+ 852: R_MEP_PCREL24A2 symbol
+ 856: 10 0e jmp \$0
+ 858: 10 fe jmp \$sp
+ 85a: d8 08 00 00 jmp 0x0
+ 85e: df f8 ff ff jmp 0xfffffe
+ 862: d8 08 00 00 jmp 0x0
+ 862: R_MEP_PCABS24A2 symbol
+ 866: 10 0f jsr \$0
+ 868: 10 ff jsr \$sp
+ 86a: 70 02 ret
+ 86c: e0 09 80 02 repeat \$0,0xffff0870
+ 870: ef 09 80 02 repeat \$sp,0xffff0874
+ 874: e0 09 3f ff repeat \$0,0x8872
+ 878: ef 09 3f ff repeat \$sp,0x8876
+ 87c: e0 09 00 00 repeat \$0,0x87c
+ 87c: R_MEP_PCREL17A2 symbol
+ 880: ef 09 00 00 repeat \$sp,0x880
+ 880: R_MEP_PCREL17A2 symbol
+ 884: e0 19 80 02 erepeat 0xffff0888
+ 888: e0 19 3f ff erepeat 0x8886
+ 88c: e0 19 00 00 erepeat 0x88c
+ 88c: R_MEP_PCREL17A2 symbol
+ 890: 70 08 stc \$0,\$pc
+ 892: 70 0a ldc \$0,\$pc
+ 894: 7f 08 stc \$sp,\$pc
+ 896: 7f 0a ldc \$sp,\$pc
+ 898: 70 18 stc \$0,\$lp
+ 89a: 70 1a ldc \$0,\$lp
+ 89c: 7f 18 stc \$sp,\$lp
+ 89e: 7f 1a ldc \$sp,\$lp
+ 8a0: 70 28 stc \$0,\$sar
+ 8a2: 70 2a ldc \$0,\$sar
+ 8a4: 7f 28 stc \$sp,\$sar
+ 8a6: 7f 2a ldc \$sp,\$sar
+ 8a8: 70 48 stc \$0,\$rpb
+ 8aa: 70 4a ldc \$0,\$rpb
+ 8ac: 7f 48 stc \$sp,\$rpb
+ 8ae: 7f 4a ldc \$sp,\$rpb
+ 8b0: 70 58 stc \$0,\$rpe
+ 8b2: 70 5a ldc \$0,\$rpe
+ 8b4: 7f 58 stc \$sp,\$rpe
+ 8b6: 7f 5a ldc \$sp,\$rpe
+ 8b8: 70 68 stc \$0,\$rpc
+ 8ba: 70 6a ldc \$0,\$rpc
+ 8bc: 7f 68 stc \$sp,\$rpc
+ 8be: 7f 6a ldc \$sp,\$rpc
+ 8c0: 70 78 stc \$0,\$hi
+ 8c2: 70 7a ldc \$0,\$hi
+ 8c4: 7f 78 stc \$sp,\$hi
+ 8c6: 7f 7a ldc \$sp,\$hi
+ 8c8: 70 88 stc \$0,\$lo
+ 8ca: 70 8a ldc \$0,\$lo
+ 8cc: 7f 88 stc \$sp,\$lo
+ 8ce: 7f 8a ldc \$sp,\$lo
+ 8d0: 70 c8 stc \$0,\$mb0
+ 8d2: 70 ca ldc \$0,\$mb0
+ 8d4: 7f c8 stc \$sp,\$mb0
+ 8d6: 7f ca ldc \$sp,\$mb0
+ 8d8: 70 d8 stc \$0,\$me0
+ 8da: 70 da ldc \$0,\$me0
+ 8dc: 7f d8 stc \$sp,\$me0
+ 8de: 7f da ldc \$sp,\$me0
+ 8e0: 70 e8 stc \$0,\$mb1
+ 8e2: 70 ea ldc \$0,\$mb1
+ 8e4: 7f e8 stc \$sp,\$mb1
+ 8e6: 7f ea ldc \$sp,\$mb1
+ 8e8: 70 f8 stc \$0,\$me1
+ 8ea: 70 fa ldc \$0,\$me1
+ 8ec: 7f f8 stc \$sp,\$me1
+ 8ee: 7f fa ldc \$sp,\$me1
+ 8f0: 70 09 stc \$0,\$psw
+ 8f2: 70 0b ldc \$0,\$psw
+ 8f4: 7f 09 stc \$sp,\$psw
+ 8f6: 7f 0b ldc \$sp,\$psw
+ 8f8: 70 19 stc \$0,\$id
+ 8fa: 70 1b ldc \$0,\$id
+ 8fc: 7f 19 stc \$sp,\$id
+ 8fe: 7f 1b ldc \$sp,\$id
+ 900: 70 29 stc \$0,\$tmp
+ 902: 70 2b ldc \$0,\$tmp
+ 904: 7f 29 stc \$sp,\$tmp
+ 906: 7f 2b ldc \$sp,\$tmp
+ 908: 70 39 stc \$0,\$epc
+ 90a: 70 3b ldc \$0,\$epc
+ 90c: 7f 39 stc \$sp,\$epc
+ 90e: 7f 3b ldc \$sp,\$epc
+ 910: 70 49 stc \$0,\$exc
+ 912: 70 4b ldc \$0,\$exc
+ 914: 7f 49 stc \$sp,\$exc
+ 916: 7f 4b ldc \$sp,\$exc
+ 918: 70 59 stc \$0,\$cfg
+ 91a: 70 5b ldc \$0,\$cfg
+ 91c: 7f 59 stc \$sp,\$cfg
+ 91e: 7f 5b ldc \$sp,\$cfg
+ 920: 70 79 stc \$0,\$npc
+ 922: 70 7b ldc \$0,\$npc
+ 924: 7f 79 stc \$sp,\$npc
+ 926: 7f 7b ldc \$sp,\$npc
+ 928: 70 89 stc \$0,\$dbg
+ 92a: 70 8b ldc \$0,\$dbg
+ 92c: 7f 89 stc \$sp,\$dbg
+ 92e: 7f 8b ldc \$sp,\$dbg
+ 930: 70 99 stc \$0,\$depc
+ 932: 70 9b ldc \$0,\$depc
+ 934: 7f 99 stc \$sp,\$depc
+ 936: 7f 9b ldc \$sp,\$depc
+ 938: 70 a9 stc \$0,\$opt
+ 93a: 70 ab ldc \$0,\$opt
+ 93c: 7f a9 stc \$sp,\$opt
+ 93e: 7f ab ldc \$sp,\$opt
+ 940: 70 b9 stc \$0,\$rcfg
+ 942: 70 bb ldc \$0,\$rcfg
+ 944: 7f b9 stc \$sp,\$rcfg
+ 946: 7f bb ldc \$sp,\$rcfg
+ 948: 70 c9 stc \$0,\$ccfg
+ 94a: 70 cb ldc \$0,\$ccfg
+ 94c: 7f c9 stc \$sp,\$ccfg
+ 94e: 7f cb ldc \$sp,\$ccfg
+ 950: 70 00 di
+ 952: 70 10 ei
+ 954: 70 12 reti
+ 956: 70 22 halt
+ 958: 70 32 break
+ 95a: 70 11 syncm
+ 95c: 70 06 swi 0x0
+ 95e: 70 36 swi 0x3
+ 960: f0 04 00 00 stcb \$0,0x0
+ 964: f0 14 00 00 ldcb \$0,0x0
+ 968: ff 04 00 00 stcb \$sp,0x0
+ 96c: ff 14 00 00 ldcb \$sp,0x0
+ 970: f0 04 ff ff stcb \$0,0xffff
+ 974: f0 14 ff ff ldcb \$0,0xffff
+ 978: ff 04 ff ff stcb \$sp,0xffff
+ 97c: ff 14 ff ff ldcb \$sp,0xffff
+ 980: f0 04 00 00 stcb \$0,0x0
+ 982: R_MEP_16 symbol
+ 984: f0 14 00 00 ldcb \$0,0x0
+ 986: R_MEP_16 symbol
+ 988: ff 04 00 00 stcb \$sp,0x0
+ 98a: R_MEP_16 symbol
+ 98c: ff 14 00 00 ldcb \$sp,0x0
+ 98e: R_MEP_16 symbol
+ 990: 20 00 bsetm \(\$0\),0x0
+ 992: 20 01 bclrm \(\$0\),0x0
+ 994: 20 02 bnotm \(\$0\),0x0
+ 996: 20 f0 bsetm \(\$sp\),0x0
+ 998: 20 f1 bclrm \(\$sp\),0x0
+ 99a: 20 f2 bnotm \(\$sp\),0x0
+ 99c: 27 00 bsetm \(\$0\),0x7
+ 99e: 27 01 bclrm \(\$0\),0x7
+ 9a0: 27 02 bnotm \(\$0\),0x7
+ 9a2: 27 f0 bsetm \(\$sp\),0x7
+ 9a4: 27 f1 bclrm \(\$sp\),0x7
+ 9a6: 27 f2 bnotm \(\$sp\),0x7
+ 9a8: 20 03 btstm \$0,\(\$0\),0x0
+ 9aa: 20 f3 btstm \$0,\(\$sp\),0x0
+ 9ac: 27 03 btstm \$0,\(\$0\),0x7
+ 9ae: 27 f3 btstm \$0,\(\$sp\),0x7
+ 9b0: 20 04 tas \$0,\(\$0\)
+ 9b2: 2f 04 tas \$sp,\(\$0\)
+ 9b4: 20 f4 tas \$0,\(\$sp\)
+ 9b6: 2f f4 tas \$sp,\(\$sp\)
+ 9b8: 70 04 cache 0x0,\(\$0\)
+ 9ba: 73 04 cache 0x3,\(\$0\)
+ 9bc: 70 f4 cache 0x0,\(\$sp\)
+ 9be: 73 f4 cache 0x3,\(\$sp\)
+ 9c0: 10 04 mul \$0,\$0
+ 9c2: f0 01 30 04 madd \$0,\$0
+ 9c6: 10 06 mulr \$0,\$0
+ 9c8: f0 01 30 06 maddr \$0,\$0
+ 9cc: 10 05 mulu \$0,\$0
+ 9ce: f0 01 30 05 maddu \$0,\$0
+ 9d2: 10 07 mulru \$0,\$0
+ 9d4: f0 01 30 07 maddru \$0,\$0
+ 9d8: 1f 04 mul \$sp,\$0
+ 9da: ff 01 30 04 madd \$sp,\$0
+ 9de: 1f 06 mulr \$sp,\$0
+ 9e0: ff 01 30 06 maddr \$sp,\$0
+ 9e4: 1f 05 mulu \$sp,\$0
+ 9e6: ff 01 30 05 maddu \$sp,\$0
+ 9ea: 1f 07 mulru \$sp,\$0
+ 9ec: ff 01 30 07 maddru \$sp,\$0
+ 9f0: 10 f4 mul \$0,\$sp
+ 9f2: f0 f1 30 04 madd \$0,\$sp
+ 9f6: 10 f6 mulr \$0,\$sp
+ 9f8: f0 f1 30 06 maddr \$0,\$sp
+ 9fc: 10 f5 mulu \$0,\$sp
+ 9fe: f0 f1 30 05 maddu \$0,\$sp
+ a02: 10 f7 mulru \$0,\$sp
+ a04: f0 f1 30 07 maddru \$0,\$sp
+ a08: 1f f4 mul \$sp,\$sp
+ a0a: ff f1 30 04 madd \$sp,\$sp
+ a0e: 1f f6 mulr \$sp,\$sp
+ a10: ff f1 30 06 maddr \$sp,\$sp
+ a14: 1f f5 mulu \$sp,\$sp
+ a16: ff f1 30 05 maddu \$sp,\$sp
+ a1a: 1f f7 mulru \$sp,\$sp
+ a1c: ff f1 30 07 maddru \$sp,\$sp
+ a20: 10 08 div \$0,\$0
+ a22: 10 09 divu \$0,\$0
+ a24: 1f 08 div \$sp,\$0
+ a26: 1f 09 divu \$sp,\$0
+ a28: 10 f8 div \$0,\$sp
+ a2a: 10 f9 divu \$0,\$sp
+ a2c: 1f f8 div \$sp,\$sp
+ a2e: 1f f9 divu \$sp,\$sp
+ a30: 70 13 dret
+ a32: 70 33 dbreak
+ a34: f0 01 00 00 ldz \$0,\$0
+ a38: f0 01 00 03 abs \$0,\$0
+ a3c: f0 01 00 02 ave \$0,\$0
+ a40: ff 01 00 00 ldz \$sp,\$0
+ a44: ff 01 00 03 abs \$sp,\$0
+ a48: ff 01 00 02 ave \$sp,\$0
+ a4c: f0 f1 00 00 ldz \$0,\$sp
+ a50: f0 f1 00 03 abs \$0,\$sp
+ a54: f0 f1 00 02 ave \$0,\$sp
+ a58: ff f1 00 00 ldz \$sp,\$sp
+ a5c: ff f1 00 03 abs \$sp,\$sp
+ a60: ff f1 00 02 ave \$sp,\$sp
+ a64: f0 01 00 04 min \$0,\$0
+ a68: f0 01 00 05 max \$0,\$0
+ a6c: f0 01 00 06 minu \$0,\$0
+ a70: f0 01 00 07 maxu \$0,\$0
+ a74: ff 01 00 04 min \$sp,\$0
+ a78: ff 01 00 05 max \$sp,\$0
+ a7c: ff 01 00 06 minu \$sp,\$0
+ a80: ff 01 00 07 maxu \$sp,\$0
+ a84: f0 f1 00 04 min \$0,\$sp
+ a88: f0 f1 00 05 max \$0,\$sp
+ a8c: f0 f1 00 06 minu \$0,\$sp
+ a90: f0 f1 00 07 maxu \$0,\$sp
+ a94: ff f1 00 04 min \$sp,\$sp
+ a98: ff f1 00 05 max \$sp,\$sp
+ a9c: ff f1 00 06 minu \$sp,\$sp
+ aa0: ff f1 00 07 maxu \$sp,\$sp
+ aa4: f0 01 10 00 clip \$0,0x0
+ aa8: f0 01 10 01 clipu \$0,0x0
+ aac: ff 01 10 00 clip \$sp,0x0
+ ab0: ff 01 10 01 clipu \$sp,0x0
+ ab4: f0 01 10 f8 clip \$0,0x1f
+ ab8: f0 01 10 f9 clipu \$0,0x1f
+ abc: ff 01 10 f8 clip \$sp,0x1f
+ ac0: ff 01 10 f9 clipu \$sp,0x1f
+ ac4: f0 01 00 08 sadd \$0,\$0
+ ac8: f0 01 00 0a ssub \$0,\$0
+ acc: f0 01 00 09 saddu \$0,\$0
+ ad0: f0 01 00 0b ssubu \$0,\$0
+ ad4: ff 01 00 08 sadd \$sp,\$0
+ ad8: ff 01 00 0a ssub \$sp,\$0
+ adc: ff 01 00 09 saddu \$sp,\$0
+ ae0: ff 01 00 0b ssubu \$sp,\$0
+ ae4: f0 f1 00 08 sadd \$0,\$sp
+ ae8: f0 f1 00 0a ssub \$0,\$sp
+ aec: f0 f1 00 09 saddu \$0,\$sp
+ af0: f0 f1 00 0b ssubu \$0,\$sp
+ af4: ff f1 00 08 sadd \$sp,\$sp
+ af8: ff f1 00 0a ssub \$sp,\$sp
+ afc: ff f1 00 09 saddu \$sp,\$sp
+ b00: ff f1 00 0b ssubu \$sp,\$sp
+ b04: 30 08 swcp \$c0,\(\$0\)
+ b06: 30 09 lwcp \$c0,\(\$0\)
+ b08: 30 0a smcp \$c0,\(\$0\)
+ b0a: 30 0b lmcp \$c0,\(\$0\)
+ b0c: 3f 08 swcp \$c15,\(\$0\)
+ b0e: 3f 09 lwcp \$c15,\(\$0\)
+ b10: 3f 0a smcp \$c15,\(\$0\)
+ b12: 3f 0b lmcp \$c15,\(\$0\)
+ b14: 30 f8 swcp \$c0,\(\$sp\)
+ b16: 30 f9 lwcp \$c0,\(\$sp\)
+ b18: 30 fa smcp \$c0,\(\$sp\)
+ b1a: 30 fb lmcp \$c0,\(\$sp\)
+ b1c: 3f f8 swcp \$c15,\(\$sp\)
+ b1e: 3f f9 lwcp \$c15,\(\$sp\)
+ b20: 3f fa smcp \$c15,\(\$sp\)
+ b22: 3f fb lmcp \$c15,\(\$sp\)
+ b24: 30 00 swcpi \$c0,\(\$0\+\)
+ b26: 30 01 lwcpi \$c0,\(\$0\+\)
+ b28: 30 02 smcpi \$c0,\(\$0\+\)
+ b2a: 30 03 lmcpi \$c0,\(\$0\+\)
+ b2c: 3f 00 swcpi \$c15,\(\$0\+\)
+ b2e: 3f 01 lwcpi \$c15,\(\$0\+\)
+ b30: 3f 02 smcpi \$c15,\(\$0\+\)
+ b32: 3f 03 lmcpi \$c15,\(\$0\+\)
+ b34: 30 f0 swcpi \$c0,\(\$sp\+\)
+ b36: 30 f1 lwcpi \$c0,\(\$sp\+\)
+ b38: 30 f2 smcpi \$c0,\(\$sp\+\)
+ b3a: 30 f3 lmcpi \$c0,\(\$sp\+\)
+ b3c: 3f f0 swcpi \$c15,\(\$sp\+\)
+ b3e: 3f f1 lwcpi \$c15,\(\$sp\+\)
+ b40: 3f f2 smcpi \$c15,\(\$sp\+\)
+ b42: 3f f3 lmcpi \$c15,\(\$sp\+\)
+ b44: f0 05 00 80 sbcpa \$c0,\(\$0\+\),-128
+ b48: f0 05 40 80 lbcpa \$c0,\(\$0\+\),-128
+ b4c: f0 05 08 80 sbcpm0 \$c0,\(\$0\+\),-128
+ b50: f0 05 48 80 lbcpm0 \$c0,\(\$0\+\),-128
+ b54: f0 05 0c 80 sbcpm1 \$c0,\(\$0\+\),-128
+ b58: f0 05 4c 80 lbcpm1 \$c0,\(\$0\+\),-128
+ b5c: ff 05 00 80 sbcpa \$c15,\(\$0\+\),-128
+ b60: ff 05 40 80 lbcpa \$c15,\(\$0\+\),-128
+ b64: ff 05 08 80 sbcpm0 \$c15,\(\$0\+\),-128
+ b68: ff 05 48 80 lbcpm0 \$c15,\(\$0\+\),-128
+ b6c: ff 05 0c 80 sbcpm1 \$c15,\(\$0\+\),-128
+ b70: ff 05 4c 80 lbcpm1 \$c15,\(\$0\+\),-128
+ b74: f0 f5 00 80 sbcpa \$c0,\(\$sp\+\),-128
+ b78: f0 f5 40 80 lbcpa \$c0,\(\$sp\+\),-128
+ b7c: f0 f5 08 80 sbcpm0 \$c0,\(\$sp\+\),-128
+ b80: f0 f5 48 80 lbcpm0 \$c0,\(\$sp\+\),-128
+ b84: f0 f5 0c 80 sbcpm1 \$c0,\(\$sp\+\),-128
+ b88: f0 f5 4c 80 lbcpm1 \$c0,\(\$sp\+\),-128
+ b8c: ff f5 00 80 sbcpa \$c15,\(\$sp\+\),-128
+ b90: ff f5 40 80 lbcpa \$c15,\(\$sp\+\),-128
+ b94: ff f5 08 80 sbcpm0 \$c15,\(\$sp\+\),-128
+ b98: ff f5 48 80 lbcpm0 \$c15,\(\$sp\+\),-128
+ b9c: ff f5 0c 80 sbcpm1 \$c15,\(\$sp\+\),-128
+ ba0: ff f5 4c 80 lbcpm1 \$c15,\(\$sp\+\),-128
+ ba4: f0 05 00 7f sbcpa \$c0,\(\$0\+\),127
+ ba8: f0 05 40 7f lbcpa \$c0,\(\$0\+\),127
+ bac: f0 05 08 7f sbcpm0 \$c0,\(\$0\+\),127
+ bb0: f0 05 48 7f lbcpm0 \$c0,\(\$0\+\),127
+ bb4: f0 05 0c 7f sbcpm1 \$c0,\(\$0\+\),127
+ bb8: f0 05 4c 7f lbcpm1 \$c0,\(\$0\+\),127
+ bbc: ff 05 00 7f sbcpa \$c15,\(\$0\+\),127
+ bc0: ff 05 40 7f lbcpa \$c15,\(\$0\+\),127
+ bc4: ff 05 08 7f sbcpm0 \$c15,\(\$0\+\),127
+ bc8: ff 05 48 7f lbcpm0 \$c15,\(\$0\+\),127
+ bcc: ff 05 0c 7f sbcpm1 \$c15,\(\$0\+\),127
+ bd0: ff 05 4c 7f lbcpm1 \$c15,\(\$0\+\),127
+ bd4: f0 f5 00 7f sbcpa \$c0,\(\$sp\+\),127
+ bd8: f0 f5 40 7f lbcpa \$c0,\(\$sp\+\),127
+ bdc: f0 f5 08 7f sbcpm0 \$c0,\(\$sp\+\),127
+ be0: f0 f5 48 7f lbcpm0 \$c0,\(\$sp\+\),127
+ be4: f0 f5 0c 7f sbcpm1 \$c0,\(\$sp\+\),127
+ be8: f0 f5 4c 7f lbcpm1 \$c0,\(\$sp\+\),127
+ bec: ff f5 00 7f sbcpa \$c15,\(\$sp\+\),127
+ bf0: ff f5 40 7f lbcpa \$c15,\(\$sp\+\),127
+ bf4: ff f5 08 7f sbcpm0 \$c15,\(\$sp\+\),127
+ bf8: ff f5 48 7f lbcpm0 \$c15,\(\$sp\+\),127
+ bfc: ff f5 0c 7f sbcpm1 \$c15,\(\$sp\+\),127
+ c00: ff f5 4c 7f lbcpm1 \$c15,\(\$sp\+\),127
+ c04: f0 05 10 80 shcpa \$c0,\(\$0\+\),-128
+ c08: f0 05 50 80 lhcpa \$c0,\(\$0\+\),-128
+ c0c: f0 05 18 80 shcpm0 \$c0,\(\$0\+\),-128
+ c10: f0 05 58 80 lhcpm0 \$c0,\(\$0\+\),-128
+ c14: f0 05 1c 80 shcpm1 \$c0,\(\$0\+\),-128
+ c18: f0 05 5c 80 lhcpm1 \$c0,\(\$0\+\),-128
+ c1c: ff 05 10 80 shcpa \$c15,\(\$0\+\),-128
+ c20: ff 05 50 80 lhcpa \$c15,\(\$0\+\),-128
+ c24: ff 05 18 80 shcpm0 \$c15,\(\$0\+\),-128
+ c28: ff 05 58 80 lhcpm0 \$c15,\(\$0\+\),-128
+ c2c: ff 05 1c 80 shcpm1 \$c15,\(\$0\+\),-128
+ c30: ff 05 5c 80 lhcpm1 \$c15,\(\$0\+\),-128
+ c34: f0 f5 10 80 shcpa \$c0,\(\$sp\+\),-128
+ c38: f0 f5 50 80 lhcpa \$c0,\(\$sp\+\),-128
+ c3c: f0 f5 18 80 shcpm0 \$c0,\(\$sp\+\),-128
+ c40: f0 f5 58 80 lhcpm0 \$c0,\(\$sp\+\),-128
+ c44: f0 f5 1c 80 shcpm1 \$c0,\(\$sp\+\),-128
+ c48: f0 f5 5c 80 lhcpm1 \$c0,\(\$sp\+\),-128
+ c4c: ff f5 10 80 shcpa \$c15,\(\$sp\+\),-128
+ c50: ff f5 50 80 lhcpa \$c15,\(\$sp\+\),-128
+ c54: ff f5 18 80 shcpm0 \$c15,\(\$sp\+\),-128
+ c58: ff f5 58 80 lhcpm0 \$c15,\(\$sp\+\),-128
+ c5c: ff f5 1c 80 shcpm1 \$c15,\(\$sp\+\),-128
+ c60: ff f5 5c 80 lhcpm1 \$c15,\(\$sp\+\),-128
+ c64: f0 05 10 7e shcpa \$c0,\(\$0\+\),126
+ c68: f0 05 50 7e lhcpa \$c0,\(\$0\+\),126
+ c6c: f0 05 18 7e shcpm0 \$c0,\(\$0\+\),126
+ c70: f0 05 58 7e lhcpm0 \$c0,\(\$0\+\),126
+ c74: f0 05 1c 7e shcpm1 \$c0,\(\$0\+\),126
+ c78: f0 05 5c 7e lhcpm1 \$c0,\(\$0\+\),126
+ c7c: ff 05 10 7e shcpa \$c15,\(\$0\+\),126
+ c80: ff 05 50 7e lhcpa \$c15,\(\$0\+\),126
+ c84: ff 05 18 7e shcpm0 \$c15,\(\$0\+\),126
+ c88: ff 05 58 7e lhcpm0 \$c15,\(\$0\+\),126
+ c8c: ff 05 1c 7e shcpm1 \$c15,\(\$0\+\),126
+ c90: ff 05 5c 7e lhcpm1 \$c15,\(\$0\+\),126
+ c94: f0 f5 10 7e shcpa \$c0,\(\$sp\+\),126
+ c98: f0 f5 50 7e lhcpa \$c0,\(\$sp\+\),126
+ c9c: f0 f5 18 7e shcpm0 \$c0,\(\$sp\+\),126
+ ca0: f0 f5 58 7e lhcpm0 \$c0,\(\$sp\+\),126
+ ca4: f0 f5 1c 7e shcpm1 \$c0,\(\$sp\+\),126
+ ca8: f0 f5 5c 7e lhcpm1 \$c0,\(\$sp\+\),126
+ cac: ff f5 10 7e shcpa \$c15,\(\$sp\+\),126
+ cb0: ff f5 50 7e lhcpa \$c15,\(\$sp\+\),126
+ cb4: ff f5 18 7e shcpm0 \$c15,\(\$sp\+\),126
+ cb8: ff f5 58 7e lhcpm0 \$c15,\(\$sp\+\),126
+ cbc: ff f5 1c 7e shcpm1 \$c15,\(\$sp\+\),126
+ cc0: ff f5 5c 7e lhcpm1 \$c15,\(\$sp\+\),126
+ cc4: f0 05 20 80 swcpa \$c0,\(\$0\+\),-128
+ cc8: f0 05 60 80 lwcpa \$c0,\(\$0\+\),-128
+ ccc: f0 05 28 80 swcpm0 \$c0,\(\$0\+\),-128
+ cd0: f0 05 68 80 lwcpm0 \$c0,\(\$0\+\),-128
+ cd4: f0 05 2c 80 swcpm1 \$c0,\(\$0\+\),-128
+ cd8: f0 05 6c 80 lwcpm1 \$c0,\(\$0\+\),-128
+ cdc: ff 05 20 80 swcpa \$c15,\(\$0\+\),-128
+ ce0: ff 05 60 80 lwcpa \$c15,\(\$0\+\),-128
+ ce4: ff 05 28 80 swcpm0 \$c15,\(\$0\+\),-128
+ ce8: ff 05 68 80 lwcpm0 \$c15,\(\$0\+\),-128
+ cec: ff 05 2c 80 swcpm1 \$c15,\(\$0\+\),-128
+ cf0: ff 05 6c 80 lwcpm1 \$c15,\(\$0\+\),-128
+ cf4: f0 f5 20 80 swcpa \$c0,\(\$sp\+\),-128
+ cf8: f0 f5 60 80 lwcpa \$c0,\(\$sp\+\),-128
+ cfc: f0 f5 28 80 swcpm0 \$c0,\(\$sp\+\),-128
+ d00: f0 f5 68 80 lwcpm0 \$c0,\(\$sp\+\),-128
+ d04: f0 f5 2c 80 swcpm1 \$c0,\(\$sp\+\),-128
+ d08: f0 f5 6c 80 lwcpm1 \$c0,\(\$sp\+\),-128
+ d0c: ff f5 20 80 swcpa \$c15,\(\$sp\+\),-128
+ d10: ff f5 60 80 lwcpa \$c15,\(\$sp\+\),-128
+ d14: ff f5 28 80 swcpm0 \$c15,\(\$sp\+\),-128
+ d18: ff f5 68 80 lwcpm0 \$c15,\(\$sp\+\),-128
+ d1c: ff f5 2c 80 swcpm1 \$c15,\(\$sp\+\),-128
+ d20: ff f5 6c 80 lwcpm1 \$c15,\(\$sp\+\),-128
+ d24: f0 05 20 7c swcpa \$c0,\(\$0\+\),124
+ d28: f0 05 60 7c lwcpa \$c0,\(\$0\+\),124
+ d2c: f0 05 28 7c swcpm0 \$c0,\(\$0\+\),124
+ d30: f0 05 68 7c lwcpm0 \$c0,\(\$0\+\),124
+ d34: f0 05 2c 7c swcpm1 \$c0,\(\$0\+\),124
+ d38: f0 05 6c 7c lwcpm1 \$c0,\(\$0\+\),124
+ d3c: ff 05 20 7c swcpa \$c15,\(\$0\+\),124
+ d40: ff 05 60 7c lwcpa \$c15,\(\$0\+\),124
+ d44: ff 05 28 7c swcpm0 \$c15,\(\$0\+\),124
+ d48: ff 05 68 7c lwcpm0 \$c15,\(\$0\+\),124
+ d4c: ff 05 2c 7c swcpm1 \$c15,\(\$0\+\),124
+ d50: ff 05 6c 7c lwcpm1 \$c15,\(\$0\+\),124
+ d54: f0 f5 20 7c swcpa \$c0,\(\$sp\+\),124
+ d58: f0 f5 60 7c lwcpa \$c0,\(\$sp\+\),124
+ d5c: f0 f5 28 7c swcpm0 \$c0,\(\$sp\+\),124
+ d60: f0 f5 68 7c lwcpm0 \$c0,\(\$sp\+\),124
+ d64: f0 f5 2c 7c swcpm1 \$c0,\(\$sp\+\),124
+ d68: f0 f5 6c 7c lwcpm1 \$c0,\(\$sp\+\),124
+ d6c: ff f5 20 7c swcpa \$c15,\(\$sp\+\),124
+ d70: ff f5 60 7c lwcpa \$c15,\(\$sp\+\),124
+ d74: ff f5 28 7c swcpm0 \$c15,\(\$sp\+\),124
+ d78: ff f5 68 7c lwcpm0 \$c15,\(\$sp\+\),124
+ d7c: ff f5 2c 7c swcpm1 \$c15,\(\$sp\+\),124
+ d80: ff f5 6c 7c lwcpm1 \$c15,\(\$sp\+\),124
+ d84: f0 05 30 80 smcpa \$c0,\(\$0\+\),-128
+ d88: f0 05 70 80 lmcpa \$c0,\(\$0\+\),-128
+ d8c: f0 05 38 80 smcpm0 \$c0,\(\$0\+\),-128
+ d90: f0 05 78 80 lmcpm0 \$c0,\(\$0\+\),-128
+ d94: f0 05 3c 80 smcpm1 \$c0,\(\$0\+\),-128
+ d98: f0 05 7c 80 lmcpm1 \$c0,\(\$0\+\),-128
+ d9c: ff 05 30 80 smcpa \$c15,\(\$0\+\),-128
+ da0: ff 05 70 80 lmcpa \$c15,\(\$0\+\),-128
+ da4: ff 05 38 80 smcpm0 \$c15,\(\$0\+\),-128
+ da8: ff 05 78 80 lmcpm0 \$c15,\(\$0\+\),-128
+ dac: ff 05 3c 80 smcpm1 \$c15,\(\$0\+\),-128
+ db0: ff 05 7c 80 lmcpm1 \$c15,\(\$0\+\),-128
+ db4: f0 f5 30 80 smcpa \$c0,\(\$sp\+\),-128
+ db8: f0 f5 70 80 lmcpa \$c0,\(\$sp\+\),-128
+ dbc: f0 f5 38 80 smcpm0 \$c0,\(\$sp\+\),-128
+ dc0: f0 f5 78 80 lmcpm0 \$c0,\(\$sp\+\),-128
+ dc4: f0 f5 3c 80 smcpm1 \$c0,\(\$sp\+\),-128
+ dc8: f0 f5 7c 80 lmcpm1 \$c0,\(\$sp\+\),-128
+ dcc: ff f5 30 80 smcpa \$c15,\(\$sp\+\),-128
+ dd0: ff f5 70 80 lmcpa \$c15,\(\$sp\+\),-128
+ dd4: ff f5 38 80 smcpm0 \$c15,\(\$sp\+\),-128
+ dd8: ff f5 78 80 lmcpm0 \$c15,\(\$sp\+\),-128
+ ddc: ff f5 3c 80 smcpm1 \$c15,\(\$sp\+\),-128
+ de0: ff f5 7c 80 lmcpm1 \$c15,\(\$sp\+\),-128
+ de4: f0 05 30 78 smcpa \$c0,\(\$0\+\),120
+ de8: f0 05 70 78 lmcpa \$c0,\(\$0\+\),120
+ dec: f0 05 38 78 smcpm0 \$c0,\(\$0\+\),120
+ df0: f0 05 78 78 lmcpm0 \$c0,\(\$0\+\),120
+ df4: f0 05 3c 78 smcpm1 \$c0,\(\$0\+\),120
+ df8: f0 05 7c 78 lmcpm1 \$c0,\(\$0\+\),120
+ dfc: ff 05 30 78 smcpa \$c15,\(\$0\+\),120
+ e00: ff 05 70 78 lmcpa \$c15,\(\$0\+\),120
+ e04: ff 05 38 78 smcpm0 \$c15,\(\$0\+\),120
+ e08: ff 05 78 78 lmcpm0 \$c15,\(\$0\+\),120
+ e0c: ff 05 3c 78 smcpm1 \$c15,\(\$0\+\),120
+ e10: ff 05 7c 78 lmcpm1 \$c15,\(\$0\+\),120
+ e14: f0 f5 30 78 smcpa \$c0,\(\$sp\+\),120
+ e18: f0 f5 70 78 lmcpa \$c0,\(\$sp\+\),120
+ e1c: f0 f5 38 78 smcpm0 \$c0,\(\$sp\+\),120
+ e20: f0 f5 78 78 lmcpm0 \$c0,\(\$sp\+\),120
+ e24: f0 f5 3c 78 smcpm1 \$c0,\(\$sp\+\),120
+ e28: f0 f5 7c 78 lmcpm1 \$c0,\(\$sp\+\),120
+ e2c: ff f5 30 78 smcpa \$c15,\(\$sp\+\),120
+ e30: ff f5 70 78 lmcpa \$c15,\(\$sp\+\),120
+ e34: ff f5 38 78 smcpm0 \$c15,\(\$sp\+\),120
+ e38: ff f5 78 78 lmcpm0 \$c15,\(\$sp\+\),120
+ e3c: ff f5 3c 78 smcpm1 \$c15,\(\$sp\+\),120
+ e40: ff f5 7c 78 lmcpm1 \$c15,\(\$sp\+\),120
+ e44: d8 04 80 02 bcpeq 0x0,0xffff0e48
+ e48: d8 05 80 02 bcpne 0x0,0xffff0e4c
+ e4c: d8 06 80 02 bcpat 0x0,0xffff0e50
+ e50: d8 07 80 02 bcpaf 0x0,0xffff0e54
+ e54: d8 f4 80 02 bcpeq 0xf,0xffff0e58
+ e58: d8 f5 80 02 bcpne 0xf,0xffff0e5c
+ e5c: d8 f6 80 02 bcpat 0xf,0xffff0e60
+ e60: d8 f7 80 02 bcpaf 0xf,0xffff0e64
+ e64: d8 04 3f ff bcpeq 0x0,0x8e62
+ e68: d8 05 3f ff bcpne 0x0,0x8e66
+ e6c: d8 06 3f ff bcpat 0x0,0x8e6a
+ e70: d8 07 3f ff bcpaf 0x0,0x8e6e
+ e74: d8 f4 3f ff bcpeq 0xf,0x8e72
+ e78: d8 f5 3f ff bcpne 0xf,0x8e76
+ e7c: d8 f6 3f ff bcpat 0xf,0x8e7a
+ e80: d8 f7 3f ff bcpaf 0xf,0x8e7e
+ e84: d8 04 00 00 bcpeq 0x0,0xe84
+ e84: R_MEP_PCREL17A2 symbol
+ e88: d8 05 00 00 bcpne 0x0,0xe88
+ e88: R_MEP_PCREL17A2 symbol
+ e8c: d8 06 00 00 bcpat 0x0,0xe8c
+ e8c: R_MEP_PCREL17A2 symbol
+ e90: d8 07 00 00 bcpaf 0x0,0xe90
+ e90: R_MEP_PCREL17A2 symbol
+ e94: d8 f4 00 00 bcpeq 0xf,0xe94
+ e94: R_MEP_PCREL17A2 symbol
+ e98: d8 f5 00 00 bcpne 0xf,0xe98
+ e98: R_MEP_PCREL17A2 symbol
+ e9c: d8 f6 00 00 bcpat 0xf,0xe9c
+ e9c: R_MEP_PCREL17A2 symbol
+ ea0: d8 f7 00 00 bcpaf 0xf,0xea0
+ ea0: R_MEP_PCREL17A2 symbol
+ ea4: 70 21 synccp
+ ea6: 18 0f jsrv \$0
+ ea8: 18 ff jsrv \$sp
+ eaa: d8 2b 80 00 bsrv 0xff800eae
+ eae: df fb 7f ff bsrv 0x800eac
+ eb2: d8 0b 00 00 bsrv 0xeb2
+ eb2: R_MEP_PCREL24A2 symbol
+ eb6: 00 00 nop
+ eb6: R_MEP_8 symbol
+ eb7: R_MEP_16 symbol
+ eb8: 00 00 nop
+ eb9: R_MEP_32 symbol
+ eba: 00 00 nop
+.*
+
diff --git a/gas/testsuite/gas/mep/dj1.le.d b/gas/testsuite/gas/mep/dj1.le.d
new file mode 100644
index 0000000000..c860c5be0f
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj1.le.d
@@ -0,0 +1,1393 @@
+#as: -EL
+#objdump: -dr
+#source: dj1.s
+#name: dj1.le
+
+dump.o: file format elf32-mep-little
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 00 00 nop
+ 2: 00 01 mov \$1,\$0
+ 4: 00 02 mov \$2,\$0
+ 6: 00 03 mov \$3,\$0
+ 8: 00 04 mov \$4,\$0
+ a: 00 05 mov \$5,\$0
+ c: 00 06 mov \$6,\$0
+ e: 00 07 mov \$7,\$0
+ 10: 00 08 mov \$8,\$0
+ 12: 00 09 mov \$9,\$0
+ 14: 00 0a mov \$10,\$0
+ 16: 00 0b mov \$11,\$0
+ 18: 00 0c mov \$12,\$0
+ 1a: 00 0d mov \$tp,\$0
+ 1c: 00 0e mov \$gp,\$0
+ 1e: 00 0f mov \$sp,\$0
+ 20: 00 08 mov \$8,\$0
+ 22: 00 0d mov \$tp,\$0
+ 24: 00 0e mov \$gp,\$0
+ 26: 00 0f mov \$sp,\$0
+ 28: 08 00 sb \$0,\(\$0\)
+ 2a: 09 00 sh \$0,\(\$0\)
+ 2c: 0a 00 sw \$0,\(\$0\)
+ 2e: 0c 00 lb \$0,\(\$0\)
+ 30: 0d 00 lh \$0,\(\$0\)
+ 32: 0e 00 lw \$0,\(\$0\)
+ 34: 0b 00 lbu \$0,\(\$0\)
+ 36: 0f 00 lhu \$0,\(\$0\)
+ 38: 08 0f sb \$sp,\(\$0\)
+ 3a: 09 0f sh \$sp,\(\$0\)
+ 3c: 0a 0f sw \$sp,\(\$0\)
+ 3e: 0c 0f lb \$sp,\(\$0\)
+ 40: 0d 0f lh \$sp,\(\$0\)
+ 42: 0e 0f lw \$sp,\(\$0\)
+ 44: 0b 0f lbu \$sp,\(\$0\)
+ 46: 0f 0f lhu \$sp,\(\$0\)
+ 48: f8 00 sb \$0,\(\$sp\)
+ 4a: f9 00 sh \$0,\(\$sp\)
+ 4c: fa 00 sw \$0,\(\$sp\)
+ 4e: fc 00 lb \$0,\(\$sp\)
+ 50: fd 00 lh \$0,\(\$sp\)
+ 52: fe 00 lw \$0,\(\$sp\)
+ 54: fb 00 lbu \$0,\(\$sp\)
+ 56: ff 00 lhu \$0,\(\$sp\)
+ 58: f8 0f sb \$sp,\(\$sp\)
+ 5a: f9 0f sh \$sp,\(\$sp\)
+ 5c: fa 0f sw \$sp,\(\$sp\)
+ 5e: fc 0f lb \$sp,\(\$sp\)
+ 60: fd 0f lh \$sp,\(\$sp\)
+ 62: fe 0f lw \$sp,\(\$sp\)
+ 64: fb 0f lbu \$sp,\(\$sp\)
+ 66: ff 0f lhu \$sp,\(\$sp\)
+ 68: fa 00 sw \$0,\(\$sp\)
+ 6a: fe 00 lw \$0,\(\$sp\)
+ 6c: fa 0f sw \$sp,\(\$sp\)
+ 6e: fe 0f lw \$sp,\(\$sp\)
+ 70: 7e 40 sw \$0,0x7c\(\$sp\)
+ 72: 7f 40 lw \$0,0x7c\(\$sp\)
+ 74: 7e 4f sw \$sp,0x7c\(\$sp\)
+ 76: 7f 4f lw \$sp,0x7c\(\$sp\)
+ 78: fa 00 sw \$0,\(\$sp\)
+ 7a: fe 00 lw \$0,\(\$sp\)
+ 7c: fa 0f sw \$sp,\(\$sp\)
+ 7e: fe 0f lw \$sp,\(\$sp\)
+ 80: 7e 40 sw \$0,0x7c\(\$sp\)
+ 82: 7f 40 lw \$0,0x7c\(\$sp\)
+ 84: 7e 4f sw \$sp,0x7c\(\$sp\)
+ 86: 7f 4f lw \$sp,0x7c\(\$sp\)
+ 88: d8 00 sb \$0,\(\$tp\)
+ 8a: dc 00 lb \$0,\(\$tp\)
+ 8c: db 00 lbu \$0,\(\$tp\)
+ 8e: d8 07 sb \$7,\(\$tp\)
+ 90: dc 07 lb \$7,\(\$tp\)
+ 92: db 07 lbu \$7,\(\$tp\)
+ 94: 7f 80 sb \$0,0x7f\(\$tp\)
+ 96: 7f 88 lb \$0,0x7f\(\$tp\)
+ 98: ff 48 lbu \$0,0x7f\(\$tp\)
+ 9a: 7f 87 sb \$7,0x7f\(\$tp\)
+ 9c: 7f 8f lb \$7,0x7f\(\$tp\)
+ 9e: ff 4f lbu \$7,0x7f\(\$tp\)
+ a0: 00 80 sb \$0,0x0\(\$tp\)
+ a0: R_MEP_TPREL7 symbol
+ a2: 00 88 lb \$0,0x0\(\$tp\)
+ a2: R_MEP_TPREL7 symbol
+ a4: 80 48 lbu \$0,0x0\(\$tp\)
+ a4: R_MEP_TPREL7 symbol
+ a6: 00 87 sb \$7,0x0\(\$tp\)
+ a6: R_MEP_TPREL7 symbol
+ a8: 00 8f lb \$7,0x0\(\$tp\)
+ a8: R_MEP_TPREL7 symbol
+ aa: 80 4f lbu \$7,0x0\(\$tp\)
+ aa: R_MEP_TPREL7 symbol
+ ac: d8 00 sb \$0,\(\$tp\)
+ ae: dc 00 lb \$0,\(\$tp\)
+ b0: db 00 lbu \$0,\(\$tp\)
+ b2: d8 07 sb \$7,\(\$tp\)
+ b4: dc 07 lb \$7,\(\$tp\)
+ b6: db 07 lbu \$7,\(\$tp\)
+ b8: 7f 80 sb \$0,0x7f\(\$tp\)
+ ba: 7f 88 lb \$0,0x7f\(\$tp\)
+ bc: ff 48 lbu \$0,0x7f\(\$tp\)
+ be: 7f 87 sb \$7,0x7f\(\$tp\)
+ c0: 7f 8f lb \$7,0x7f\(\$tp\)
+ c2: ff 4f lbu \$7,0x7f\(\$tp\)
+ c4: 00 80 sb \$0,0x0\(\$tp\)
+ c4: R_MEP_TPREL7 symbol
+ c6: 00 88 lb \$0,0x0\(\$tp\)
+ c6: R_MEP_TPREL7 symbol
+ c8: 80 48 lbu \$0,0x0\(\$tp\)
+ c8: R_MEP_TPREL7 symbol
+ ca: 00 87 sb \$7,0x0\(\$tp\)
+ ca: R_MEP_TPREL7 symbol
+ cc: 00 8f lb \$7,0x0\(\$tp\)
+ cc: R_MEP_TPREL7 symbol
+ ce: 80 4f lbu \$7,0x0\(\$tp\)
+ ce: R_MEP_TPREL7 symbol
+ d0: d9 00 sh \$0,\(\$tp\)
+ d2: dd 00 lh \$0,\(\$tp\)
+ d4: df 00 lhu \$0,\(\$tp\)
+ d6: d9 07 sh \$7,\(\$tp\)
+ d8: dd 07 lh \$7,\(\$tp\)
+ da: df 07 lhu \$7,\(\$tp\)
+ dc: fe 80 sh \$0,0x7e\(\$tp\)
+ de: fe 88 lh \$0,0x7e\(\$tp\)
+ e0: ff 88 lhu \$0,0x7e\(\$tp\)
+ e2: fe 87 sh \$7,0x7e\(\$tp\)
+ e4: fe 8f lh \$7,0x7e\(\$tp\)
+ e6: ff 8f lhu \$7,0x7e\(\$tp\)
+ e8: 80 80 sh \$0,0x0\(\$tp\)
+ e8: R_MEP_TPREL7A2 symbol
+ ea: 80 88 lh \$0,0x0\(\$tp\)
+ ea: R_MEP_TPREL7A2 symbol
+ ec: 81 88 lhu \$0,0x0\(\$tp\)
+ ec: R_MEP_TPREL7A2 symbol
+ ee: 80 87 sh \$7,0x0\(\$tp\)
+ ee: R_MEP_TPREL7A2 symbol
+ f0: 80 8f lh \$7,0x0\(\$tp\)
+ f0: R_MEP_TPREL7A2 symbol
+ f2: 81 8f lhu \$7,0x0\(\$tp\)
+ f2: R_MEP_TPREL7A2 symbol
+ f4: d9 00 sh \$0,\(\$tp\)
+ f6: dd 00 lh \$0,\(\$tp\)
+ f8: df 00 lhu \$0,\(\$tp\)
+ fa: d9 07 sh \$7,\(\$tp\)
+ fc: dd 07 lh \$7,\(\$tp\)
+ fe: df 07 lhu \$7,\(\$tp\)
+ 100: fe 80 sh \$0,0x7e\(\$tp\)
+ 102: fe 88 lh \$0,0x7e\(\$tp\)
+ 104: ff 88 lhu \$0,0x7e\(\$tp\)
+ 106: fe 87 sh \$7,0x7e\(\$tp\)
+ 108: fe 8f lh \$7,0x7e\(\$tp\)
+ 10a: ff 8f lhu \$7,0x7e\(\$tp\)
+ 10c: 80 80 sh \$0,0x0\(\$tp\)
+ 10c: R_MEP_TPREL7A2 symbol
+ 10e: 80 88 lh \$0,0x0\(\$tp\)
+ 10e: R_MEP_TPREL7A2 symbol
+ 110: 81 88 lhu \$0,0x0\(\$tp\)
+ 110: R_MEP_TPREL7A2 symbol
+ 112: 80 87 sh \$7,0x0\(\$tp\)
+ 112: R_MEP_TPREL7A2 symbol
+ 114: 80 8f lh \$7,0x0\(\$tp\)
+ 114: R_MEP_TPREL7A2 symbol
+ 116: 81 8f lhu \$7,0x0\(\$tp\)
+ 116: R_MEP_TPREL7A2 symbol
+ 118: da 00 sw \$0,\(\$tp\)
+ 11a: de 00 lw \$0,\(\$tp\)
+ 11c: da 07 sw \$7,\(\$tp\)
+ 11e: de 07 lw \$7,\(\$tp\)
+ 120: fe 40 sw \$0,0x7c\(\$tp\)
+ 122: ff 40 lw \$0,0x7c\(\$tp\)
+ 124: fe 47 sw \$7,0x7c\(\$tp\)
+ 126: ff 47 lw \$7,0x7c\(\$tp\)
+ 128: 82 40 sw \$0,0x0\(\$tp\)
+ 128: R_MEP_TPREL7A4 symbol
+ 12a: 83 40 lw \$0,0x0\(\$tp\)
+ 12a: R_MEP_TPREL7A4 symbol
+ 12c: 82 47 sw \$7,0x0\(\$tp\)
+ 12c: R_MEP_TPREL7A4 symbol
+ 12e: 83 47 lw \$7,0x0\(\$tp\)
+ 12e: R_MEP_TPREL7A4 symbol
+ 130: da 00 sw \$0,\(\$tp\)
+ 132: de 00 lw \$0,\(\$tp\)
+ 134: da 07 sw \$7,\(\$tp\)
+ 136: de 07 lw \$7,\(\$tp\)
+ 138: fe 40 sw \$0,0x7c\(\$tp\)
+ 13a: ff 40 lw \$0,0x7c\(\$tp\)
+ 13c: fe 47 sw \$7,0x7c\(\$tp\)
+ 13e: ff 47 lw \$7,0x7c\(\$tp\)
+ 140: 82 40 sw \$0,0x0\(\$tp\)
+ 140: R_MEP_TPREL7A4 symbol
+ 142: 83 40 lw \$0,0x0\(\$tp\)
+ 142: R_MEP_TPREL7A4 symbol
+ 144: 82 47 sw \$7,0x0\(\$tp\)
+ 144: R_MEP_TPREL7A4 symbol
+ 146: 83 47 lw \$7,0x0\(\$tp\)
+ 146: R_MEP_TPREL7A4 symbol
+ 148: 08 c0 00 80 sb \$0,-32768\(\$0\)
+ 14c: 09 c0 00 80 sh \$0,-32768\(\$0\)
+ 150: 0a c0 00 80 sw \$0,-32768\(\$0\)
+ 154: 0c c0 00 80 lb \$0,-32768\(\$0\)
+ 158: 0d c0 00 80 lh \$0,-32768\(\$0\)
+ 15c: 0e c0 00 80 lw \$0,-32768\(\$0\)
+ 160: 0b c0 00 80 lbu \$0,-32768\(\$0\)
+ 164: 0f c0 00 80 lhu \$0,-32768\(\$0\)
+ 168: 08 cf 00 80 sb \$sp,-32768\(\$0\)
+ 16c: 09 cf 00 80 sh \$sp,-32768\(\$0\)
+ 170: 0a cf 00 80 sw \$sp,-32768\(\$0\)
+ 174: 0c cf 00 80 lb \$sp,-32768\(\$0\)
+ 178: 0d cf 00 80 lh \$sp,-32768\(\$0\)
+ 17c: 0e cf 00 80 lw \$sp,-32768\(\$0\)
+ 180: 0b cf 00 80 lbu \$sp,-32768\(\$0\)
+ 184: 0f cf 00 80 lhu \$sp,-32768\(\$0\)
+ 188: 08 c0 ff 7f sb \$0,32767\(\$0\)
+ 18c: 09 c0 ff 7f sh \$0,32767\(\$0\)
+ 190: 0a c0 ff 7f sw \$0,32767\(\$0\)
+ 194: 0c c0 ff 7f lb \$0,32767\(\$0\)
+ 198: 0d c0 ff 7f lh \$0,32767\(\$0\)
+ 19c: 0e c0 ff 7f lw \$0,32767\(\$0\)
+ 1a0: 0b c0 ff 7f lbu \$0,32767\(\$0\)
+ 1a4: 0f c0 ff 7f lhu \$0,32767\(\$0\)
+ 1a8: 08 cf ff 7f sb \$sp,32767\(\$0\)
+ 1ac: 09 cf ff 7f sh \$sp,32767\(\$0\)
+ 1b0: 0a cf ff 7f sw \$sp,32767\(\$0\)
+ 1b4: 0c cf ff 7f lb \$sp,32767\(\$0\)
+ 1b8: 0d cf ff 7f lh \$sp,32767\(\$0\)
+ 1bc: 0e cf ff 7f lw \$sp,32767\(\$0\)
+ 1c0: 0b cf ff 7f lbu \$sp,32767\(\$0\)
+ 1c4: 0f cf ff 7f lhu \$sp,32767\(\$0\)
+ 1c8: 08 c0 00 00 sb \$0,0\(\$0\)
+ 1c8: R_MEP_GPREL symbol
+ 1cc: 09 c0 00 00 sh \$0,0\(\$0\)
+ 1cc: R_MEP_GPREL symbol
+ 1d0: 0a c0 00 00 sw \$0,0\(\$0\)
+ 1d0: R_MEP_GPREL symbol
+ 1d4: 0c c0 00 00 lb \$0,0\(\$0\)
+ 1d4: R_MEP_GPREL symbol
+ 1d8: 0d c0 00 00 lh \$0,0\(\$0\)
+ 1d8: R_MEP_GPREL symbol
+ 1dc: 0e c0 00 00 lw \$0,0\(\$0\)
+ 1dc: R_MEP_GPREL symbol
+ 1e0: 0b c0 00 00 lbu \$0,0\(\$0\)
+ 1e0: R_MEP_GPREL symbol
+ 1e4: 0f c0 00 00 lhu \$0,0\(\$0\)
+ 1e4: R_MEP_GPREL symbol
+ 1e8: 08 cf 00 00 sb \$sp,0\(\$0\)
+ 1e8: R_MEP_GPREL symbol
+ 1ec: 09 cf 00 00 sh \$sp,0\(\$0\)
+ 1ec: R_MEP_GPREL symbol
+ 1f0: 0a cf 00 00 sw \$sp,0\(\$0\)
+ 1f0: R_MEP_GPREL symbol
+ 1f4: 0c cf 00 00 lb \$sp,0\(\$0\)
+ 1f4: R_MEP_GPREL symbol
+ 1f8: 0d cf 00 00 lh \$sp,0\(\$0\)
+ 1f8: R_MEP_GPREL symbol
+ 1fc: 0e cf 00 00 lw \$sp,0\(\$0\)
+ 1fc: R_MEP_GPREL symbol
+ 200: 0b cf 00 00 lbu \$sp,0\(\$0\)
+ 200: R_MEP_GPREL symbol
+ 204: 0f cf 00 00 lhu \$sp,0\(\$0\)
+ 204: R_MEP_GPREL symbol
+ 208: 08 c0 00 80 sb \$0,-32768\(\$0\)
+ 20c: 09 c0 00 80 sh \$0,-32768\(\$0\)
+ 210: 0a c0 00 80 sw \$0,-32768\(\$0\)
+ 214: 0c c0 00 80 lb \$0,-32768\(\$0\)
+ 218: 0d c0 00 80 lh \$0,-32768\(\$0\)
+ 21c: 0e c0 00 80 lw \$0,-32768\(\$0\)
+ 220: 0b c0 00 80 lbu \$0,-32768\(\$0\)
+ 224: 0f c0 00 80 lhu \$0,-32768\(\$0\)
+ 228: 08 cf 00 80 sb \$sp,-32768\(\$0\)
+ 22c: 09 cf 00 80 sh \$sp,-32768\(\$0\)
+ 230: 0a cf 00 80 sw \$sp,-32768\(\$0\)
+ 234: 0c cf 00 80 lb \$sp,-32768\(\$0\)
+ 238: 0d cf 00 80 lh \$sp,-32768\(\$0\)
+ 23c: 0e cf 00 80 lw \$sp,-32768\(\$0\)
+ 240: 0b cf 00 80 lbu \$sp,-32768\(\$0\)
+ 244: 0f cf 00 80 lhu \$sp,-32768\(\$0\)
+ 248: 08 c0 ff 7f sb \$0,32767\(\$0\)
+ 24c: 09 c0 ff 7f sh \$0,32767\(\$0\)
+ 250: 0a c0 ff 7f sw \$0,32767\(\$0\)
+ 254: 0c c0 ff 7f lb \$0,32767\(\$0\)
+ 258: 0d c0 ff 7f lh \$0,32767\(\$0\)
+ 25c: 0e c0 ff 7f lw \$0,32767\(\$0\)
+ 260: 0b c0 ff 7f lbu \$0,32767\(\$0\)
+ 264: 0f c0 ff 7f lhu \$0,32767\(\$0\)
+ 268: 08 cf ff 7f sb \$sp,32767\(\$0\)
+ 26c: 09 cf ff 7f sh \$sp,32767\(\$0\)
+ 270: 0a cf ff 7f sw \$sp,32767\(\$0\)
+ 274: 0c cf ff 7f lb \$sp,32767\(\$0\)
+ 278: 0d cf ff 7f lh \$sp,32767\(\$0\)
+ 27c: 0e cf ff 7f lw \$sp,32767\(\$0\)
+ 280: 0b cf ff 7f lbu \$sp,32767\(\$0\)
+ 284: 0f cf ff 7f lhu \$sp,32767\(\$0\)
+ 288: 08 c0 00 00 sb \$0,0\(\$0\)
+ 288: R_MEP_TPREL symbol
+ 28c: 09 c0 00 00 sh \$0,0\(\$0\)
+ 28c: R_MEP_TPREL symbol
+ 290: 0a c0 00 00 sw \$0,0\(\$0\)
+ 290: R_MEP_TPREL symbol
+ 294: 0c c0 00 00 lb \$0,0\(\$0\)
+ 294: R_MEP_TPREL symbol
+ 298: 0d c0 00 00 lh \$0,0\(\$0\)
+ 298: R_MEP_TPREL symbol
+ 29c: 0e c0 00 00 lw \$0,0\(\$0\)
+ 29c: R_MEP_TPREL symbol
+ 2a0: 0b c0 00 00 lbu \$0,0\(\$0\)
+ 2a0: R_MEP_TPREL symbol
+ 2a4: 0f c0 00 00 lhu \$0,0\(\$0\)
+ 2a4: R_MEP_TPREL symbol
+ 2a8: 08 cf 00 00 sb \$sp,0\(\$0\)
+ 2a8: R_MEP_TPREL symbol
+ 2ac: 09 cf 00 00 sh \$sp,0\(\$0\)
+ 2ac: R_MEP_TPREL symbol
+ 2b0: 0a cf 00 00 sw \$sp,0\(\$0\)
+ 2b0: R_MEP_TPREL symbol
+ 2b4: 0c cf 00 00 lb \$sp,0\(\$0\)
+ 2b4: R_MEP_TPREL symbol
+ 2b8: 0d cf 00 00 lh \$sp,0\(\$0\)
+ 2b8: R_MEP_TPREL symbol
+ 2bc: 0e cf 00 00 lw \$sp,0\(\$0\)
+ 2bc: R_MEP_TPREL symbol
+ 2c0: 0b cf 00 00 lbu \$sp,0\(\$0\)
+ 2c0: R_MEP_TPREL symbol
+ 2c4: 0f cf 00 00 lhu \$sp,0\(\$0\)
+ 2c4: R_MEP_TPREL symbol
+ 2c8: f8 c0 00 80 sb \$0,-32768\(\$sp\)
+ 2cc: f9 c0 00 80 sh \$0,-32768\(\$sp\)
+ 2d0: fa c0 00 80 sw \$0,-32768\(\$sp\)
+ 2d4: fc c0 00 80 lb \$0,-32768\(\$sp\)
+ 2d8: fd c0 00 80 lh \$0,-32768\(\$sp\)
+ 2dc: fe c0 00 80 lw \$0,-32768\(\$sp\)
+ 2e0: fb c0 00 80 lbu \$0,-32768\(\$sp\)
+ 2e4: ff c0 00 80 lhu \$0,-32768\(\$sp\)
+ 2e8: f8 cf 00 80 sb \$sp,-32768\(\$sp\)
+ 2ec: f9 cf 00 80 sh \$sp,-32768\(\$sp\)
+ 2f0: fa cf 00 80 sw \$sp,-32768\(\$sp\)
+ 2f4: fc cf 00 80 lb \$sp,-32768\(\$sp\)
+ 2f8: fd cf 00 80 lh \$sp,-32768\(\$sp\)
+ 2fc: fe cf 00 80 lw \$sp,-32768\(\$sp\)
+ 300: fb cf 00 80 lbu \$sp,-32768\(\$sp\)
+ 304: ff cf 00 80 lhu \$sp,-32768\(\$sp\)
+ 308: f8 c0 ff 7f sb \$0,32767\(\$sp\)
+ 30c: f9 c0 ff 7f sh \$0,32767\(\$sp\)
+ 310: fa c0 ff 7f sw \$0,32767\(\$sp\)
+ 314: fc c0 ff 7f lb \$0,32767\(\$sp\)
+ 318: fd c0 ff 7f lh \$0,32767\(\$sp\)
+ 31c: fe c0 ff 7f lw \$0,32767\(\$sp\)
+ 320: fb c0 ff 7f lbu \$0,32767\(\$sp\)
+ 324: ff c0 ff 7f lhu \$0,32767\(\$sp\)
+ 328: f8 cf ff 7f sb \$sp,32767\(\$sp\)
+ 32c: f9 cf ff 7f sh \$sp,32767\(\$sp\)
+ 330: fa cf ff 7f sw \$sp,32767\(\$sp\)
+ 334: fc cf ff 7f lb \$sp,32767\(\$sp\)
+ 338: fd cf ff 7f lh \$sp,32767\(\$sp\)
+ 33c: fe cf ff 7f lw \$sp,32767\(\$sp\)
+ 340: fb cf ff 7f lbu \$sp,32767\(\$sp\)
+ 344: ff cf ff 7f lhu \$sp,32767\(\$sp\)
+ 348: f8 c0 00 00 sb \$0,0\(\$sp\)
+ 348: R_MEP_GPREL symbol
+ 34c: f9 c0 00 00 sh \$0,0\(\$sp\)
+ 34c: R_MEP_GPREL symbol
+ 350: fa c0 00 00 sw \$0,0\(\$sp\)
+ 350: R_MEP_GPREL symbol
+ 354: fc c0 00 00 lb \$0,0\(\$sp\)
+ 354: R_MEP_GPREL symbol
+ 358: fd c0 00 00 lh \$0,0\(\$sp\)
+ 358: R_MEP_GPREL symbol
+ 35c: fe c0 00 00 lw \$0,0\(\$sp\)
+ 35c: R_MEP_GPREL symbol
+ 360: fb c0 00 00 lbu \$0,0\(\$sp\)
+ 360: R_MEP_GPREL symbol
+ 364: ff c0 00 00 lhu \$0,0\(\$sp\)
+ 364: R_MEP_GPREL symbol
+ 368: f8 cf 00 00 sb \$sp,0\(\$sp\)
+ 368: R_MEP_GPREL symbol
+ 36c: f9 cf 00 00 sh \$sp,0\(\$sp\)
+ 36c: R_MEP_GPREL symbol
+ 370: fa cf 00 00 sw \$sp,0\(\$sp\)
+ 370: R_MEP_GPREL symbol
+ 374: fc cf 00 00 lb \$sp,0\(\$sp\)
+ 374: R_MEP_GPREL symbol
+ 378: fd cf 00 00 lh \$sp,0\(\$sp\)
+ 378: R_MEP_GPREL symbol
+ 37c: fe cf 00 00 lw \$sp,0\(\$sp\)
+ 37c: R_MEP_GPREL symbol
+ 380: fb cf 00 00 lbu \$sp,0\(\$sp\)
+ 380: R_MEP_GPREL symbol
+ 384: ff cf 00 00 lhu \$sp,0\(\$sp\)
+ 384: R_MEP_GPREL symbol
+ 388: f8 c0 00 80 sb \$0,-32768\(\$sp\)
+ 38c: f9 c0 00 80 sh \$0,-32768\(\$sp\)
+ 390: fa c0 00 80 sw \$0,-32768\(\$sp\)
+ 394: fc c0 00 80 lb \$0,-32768\(\$sp\)
+ 398: fd c0 00 80 lh \$0,-32768\(\$sp\)
+ 39c: fe c0 00 80 lw \$0,-32768\(\$sp\)
+ 3a0: fb c0 00 80 lbu \$0,-32768\(\$sp\)
+ 3a4: ff c0 00 80 lhu \$0,-32768\(\$sp\)
+ 3a8: f8 cf 00 80 sb \$sp,-32768\(\$sp\)
+ 3ac: f9 cf 00 80 sh \$sp,-32768\(\$sp\)
+ 3b0: fa cf 00 80 sw \$sp,-32768\(\$sp\)
+ 3b4: fc cf 00 80 lb \$sp,-32768\(\$sp\)
+ 3b8: fd cf 00 80 lh \$sp,-32768\(\$sp\)
+ 3bc: fe cf 00 80 lw \$sp,-32768\(\$sp\)
+ 3c0: fb cf 00 80 lbu \$sp,-32768\(\$sp\)
+ 3c4: ff cf 00 80 lhu \$sp,-32768\(\$sp\)
+ 3c8: f8 c0 ff 7f sb \$0,32767\(\$sp\)
+ 3cc: f9 c0 ff 7f sh \$0,32767\(\$sp\)
+ 3d0: fa c0 ff 7f sw \$0,32767\(\$sp\)
+ 3d4: fc c0 ff 7f lb \$0,32767\(\$sp\)
+ 3d8: fd c0 ff 7f lh \$0,32767\(\$sp\)
+ 3dc: fe c0 ff 7f lw \$0,32767\(\$sp\)
+ 3e0: fb c0 ff 7f lbu \$0,32767\(\$sp\)
+ 3e4: ff c0 ff 7f lhu \$0,32767\(\$sp\)
+ 3e8: f8 cf ff 7f sb \$sp,32767\(\$sp\)
+ 3ec: f9 cf ff 7f sh \$sp,32767\(\$sp\)
+ 3f0: fa cf ff 7f sw \$sp,32767\(\$sp\)
+ 3f4: fc cf ff 7f lb \$sp,32767\(\$sp\)
+ 3f8: fd cf ff 7f lh \$sp,32767\(\$sp\)
+ 3fc: fe cf ff 7f lw \$sp,32767\(\$sp\)
+ 400: fb cf ff 7f lbu \$sp,32767\(\$sp\)
+ 404: ff cf ff 7f lhu \$sp,32767\(\$sp\)
+ 408: f8 c0 00 00 sb \$0,0\(\$sp\)
+ 408: R_MEP_TPREL symbol
+ 40c: f9 c0 00 00 sh \$0,0\(\$sp\)
+ 40c: R_MEP_TPREL symbol
+ 410: 02 40 sw \$0,0x0\(\$sp\)
+ 410: R_MEP_TPREL7A4 symbol
+ 412: fc c0 00 00 lb \$0,0\(\$sp\)
+ 412: R_MEP_TPREL symbol
+ 416: fd c0 00 00 lh \$0,0\(\$sp\)
+ 416: R_MEP_TPREL symbol
+ 41a: 03 40 lw \$0,0x0\(\$sp\)
+ 41a: R_MEP_TPREL7A4 symbol
+ 41c: fb c0 00 00 lbu \$0,0\(\$sp\)
+ 41c: R_MEP_TPREL symbol
+ 420: ff c0 00 00 lhu \$0,0\(\$sp\)
+ 420: R_MEP_TPREL symbol
+ 424: f8 cf 00 00 sb \$sp,0\(\$sp\)
+ 424: R_MEP_TPREL symbol
+ 428: f9 cf 00 00 sh \$sp,0\(\$sp\)
+ 428: R_MEP_TPREL symbol
+ 42c: 02 4f sw \$sp,0x0\(\$sp\)
+ 42c: R_MEP_TPREL7A4 symbol
+ 42e: fc cf 00 00 lb \$sp,0\(\$sp\)
+ 42e: R_MEP_TPREL symbol
+ 432: fd cf 00 00 lh \$sp,0\(\$sp\)
+ 432: R_MEP_TPREL symbol
+ 436: 03 4f lw \$sp,0x0\(\$sp\)
+ 436: R_MEP_TPREL7A4 symbol
+ 438: fb cf 00 00 lbu \$sp,0\(\$sp\)
+ 438: R_MEP_TPREL symbol
+ 43c: ff cf 00 00 lhu \$sp,0\(\$sp\)
+ 43c: R_MEP_TPREL symbol
+ 440: 02 e0 00 00 sw \$0,\(0x0\)
+ 444: 03 e0 00 00 lw \$0,\(0x0\)
+ 448: 02 ef 00 00 sw \$sp,\(0x0\)
+ 44c: 03 ef 00 00 lw \$sp,\(0x0\)
+ 450: fe e0 ff ff sw \$0,\(0xfffffc\)
+ 454: ff e0 ff ff lw \$0,\(0xfffffc\)
+ 458: fe ef ff ff sw \$sp,\(0xfffffc\)
+ 45c: ff ef ff ff lw \$sp,\(0xfffffc\)
+ 460: 02 e0 00 00 sw \$0,\(0x0\)
+ 460: R_MEP_ADDR24A4 symbol
+ 464: 03 e0 00 00 lw \$0,\(0x0\)
+ 464: R_MEP_ADDR24A4 symbol
+ 468: 02 ef 00 00 sw \$sp,\(0x0\)
+ 468: R_MEP_ADDR24A4 symbol
+ 46c: 03 ef 00 00 lw \$sp,\(0x0\)
+ 46c: R_MEP_ADDR24A4 symbol
+ 470: 0d 10 extb \$0
+ 472: 8d 10 extub \$0
+ 474: 2d 10 exth \$0
+ 476: ad 10 extuh \$0
+ 478: 0d 1f extb \$sp
+ 47a: 8d 1f extub \$sp
+ 47c: 2d 1f exth \$sp
+ 47e: ad 1f extuh \$sp
+ 480: 0c 10 ssarb 0\(\$0\)
+ 482: 0c 13 ssarb 3\(\$0\)
+ 484: fc 10 ssarb 0\(\$sp\)
+ 486: fc 13 ssarb 3\(\$sp\)
+ 488: 00 00 nop
+ 48a: 00 0f mov \$sp,\$0
+ 48c: f0 00 mov \$0,\$sp
+ 48e: f0 0f mov \$sp,\$sp
+ 490: 01 c0 00 80 mov \$0,-32768
+ 494: 01 cf 00 80 mov \$sp,-32768
+ 498: 80 50 mov \$0,-128
+ 49a: 80 5f mov \$sp,-128
+ 49c: 00 50 mov \$0,0
+ 49e: 00 5f mov \$sp,0
+ 4a0: 7f 50 mov \$0,127
+ 4a2: 7f 5f mov \$sp,127
+ 4a4: 01 c0 ff 7f mov \$0,32767
+ 4a8: 01 cf ff 7f mov \$sp,32767
+ 4ac: 01 c0 00 00 mov \$0,0
+ 4ac: R_MEP_LOW16 symbol
+ 4b0: 01 c0 00 00 mov \$0,0
+ 4b0: R_MEP_HI16S symbol
+ 4b4: 01 c0 00 00 mov \$0,0
+ 4b4: R_MEP_HI16U symbol
+ 4b8: 01 c0 00 00 mov \$0,0
+ 4b8: R_MEP_GPREL symbol
+ 4bc: 01 c0 00 00 mov \$0,0
+ 4bc: R_MEP_TPREL symbol
+ 4c0: 00 d0 00 00 movu \$0,0x0
+ 4c4: 00 d7 00 00 movu \$7,0x0
+ 4c8: ff d0 ff ff movu \$0,0xffffff
+ 4cc: ff d7 ff ff movu \$7,0xffffff
+ 4d0: 11 c0 00 00 movu \$0,0x0
+ 4d0: R_MEP_LOW16 symbol
+ 4d4: 11 c7 00 00 movu \$7,0x0
+ 4d4: R_MEP_LOW16 symbol
+ 4d8: 00 d0 00 00 movu \$0,0x0
+ 4d8: R_MEP_UIMM24 symbol
+ 4dc: 00 d7 00 00 movu \$7,0x0
+ 4dc: R_MEP_UIMM24 symbol
+ 4e0: 00 d0 00 00 movu \$0,0x0
+ 4e4: 21 c0 00 00 movh \$0,0x0
+ 4e8: 11 cf 00 00 movu \$sp,0x0
+ 4ec: 21 cf 00 00 movh \$sp,0x0
+ 4f0: ff d0 ff 00 movu \$0,0xffff
+ 4f4: 21 c0 ff ff movh \$0,0xffff
+ 4f8: 11 cf ff ff movu \$sp,0xffff
+ 4fc: 21 cf ff ff movh \$sp,0xffff
+ 500: 11 c0 00 00 movu \$0,0x0
+ 500: R_MEP_LOW16 symbol
+ 504: 21 c0 00 00 movh \$0,0x0
+ 504: R_MEP_LOW16 symbol
+ 508: 11 cf 00 00 movu \$sp,0x0
+ 508: R_MEP_LOW16 symbol
+ 50c: 21 cf 00 00 movh \$sp,0x0
+ 50c: R_MEP_LOW16 symbol
+ 510: 11 c0 00 00 movu \$0,0x0
+ 510: R_MEP_HI16S symbol
+ 514: 21 c0 00 00 movh \$0,0x0
+ 514: R_MEP_HI16S symbol
+ 518: 11 cf 00 00 movu \$sp,0x0
+ 518: R_MEP_HI16S symbol
+ 51c: 21 cf 00 00 movh \$sp,0x0
+ 51c: R_MEP_HI16S symbol
+ 520: 11 c0 00 00 movu \$0,0x0
+ 520: R_MEP_HI16U symbol
+ 524: 21 c0 00 00 movh \$0,0x0
+ 524: R_MEP_HI16U symbol
+ 528: 11 cf 00 00 movu \$sp,0x0
+ 528: R_MEP_HI16U symbol
+ 52c: 21 cf 00 00 movh \$sp,0x0
+ 52c: R_MEP_HI16U symbol
+ 530: 11 c0 78 56 movu \$0,0x5678
+ 534: 21 c0 78 56 movh \$0,0x5678
+ 538: 11 cf 78 56 movu \$sp,0x5678
+ 53c: 21 cf 78 56 movh \$sp,0x5678
+ 540: 11 c0 34 12 movu \$0,0x1234
+ 544: 21 c0 34 12 movh \$0,0x1234
+ 548: 11 cf 34 12 movu \$sp,0x1234
+ 54c: 21 cf 34 12 movh \$sp,0x1234
+ 550: 11 c0 34 12 movu \$0,0x1234
+ 554: 21 c0 34 12 movh \$0,0x1234
+ 558: 11 cf 34 12 movu \$sp,0x1234
+ 55c: 21 cf 34 12 movh \$sp,0x1234
+ 560: 00 90 add3 \$0,\$0,\$0
+ 562: 0f 90 add3 \$sp,\$0,\$0
+ 564: 00 9f add3 \$0,\$sp,\$0
+ 566: 0f 9f add3 \$sp,\$sp,\$0
+ 568: f0 90 add3 \$0,\$0,\$sp
+ 56a: ff 90 add3 \$sp,\$0,\$sp
+ 56c: f0 9f add3 \$0,\$sp,\$sp
+ 56e: ff 9f add3 \$sp,\$sp,\$sp
+ 570: c0 60 add \$0,-16
+ 572: c0 6f add \$sp,-16
+ 574: 00 60 add \$0,0
+ 576: 00 6f add \$sp,0
+ 578: 3c 60 add \$0,15
+ 57a: 3c 6f add \$sp,15
+ 57c: 00 40 add3 \$0,\$sp,0x0
+ 57e: 00 4f add3 \$sp,\$sp,0x0
+ 580: 7c 40 add3 \$0,\$sp,0x7c
+ 582: 7c 4f add3 \$sp,\$sp,0x7c
+ 584: f0 c0 01 00 add3 \$0,\$sp,1
+ 588: f0 cf 01 00 add3 \$sp,\$sp,1
+ 58c: 07 00 advck3 \$0,\$0,\$0
+ 58e: 05 00 sbvck3 \$0,\$0,\$0
+ 590: 07 0f advck3 \$0,\$sp,\$0
+ 592: 05 0f sbvck3 \$0,\$sp,\$0
+ 594: f7 00 advck3 \$0,\$0,\$sp
+ 596: f5 00 sbvck3 \$0,\$0,\$sp
+ 598: f7 0f advck3 \$0,\$sp,\$sp
+ 59a: f5 0f sbvck3 \$0,\$sp,\$sp
+ 59c: 04 00 sub \$0,\$0
+ 59e: 01 00 neg \$0,\$0
+ 5a0: 04 0f sub \$sp,\$0
+ 5a2: 01 0f neg \$sp,\$0
+ 5a4: f4 00 sub \$0,\$sp
+ 5a6: f1 00 neg \$0,\$sp
+ 5a8: f4 0f sub \$sp,\$sp
+ 5aa: f1 0f neg \$sp,\$sp
+ 5ac: 02 00 slt3 \$0,\$0,\$0
+ 5ae: 03 00 sltu3 \$0,\$0,\$0
+ 5b0: 06 20 sl1ad3 \$0,\$0,\$0
+ 5b2: 07 20 sl2ad3 \$0,\$0,\$0
+ 5b4: 02 0f slt3 \$0,\$sp,\$0
+ 5b6: 03 0f sltu3 \$0,\$sp,\$0
+ 5b8: 06 2f sl1ad3 \$0,\$sp,\$0
+ 5ba: 07 2f sl2ad3 \$0,\$sp,\$0
+ 5bc: f2 00 slt3 \$0,\$0,\$sp
+ 5be: f3 00 sltu3 \$0,\$0,\$sp
+ 5c0: f6 20 sl1ad3 \$0,\$0,\$sp
+ 5c2: f7 20 sl2ad3 \$0,\$0,\$sp
+ 5c4: f2 0f slt3 \$0,\$sp,\$sp
+ 5c6: f3 0f sltu3 \$0,\$sp,\$sp
+ 5c8: f6 2f sl1ad3 \$0,\$sp,\$sp
+ 5ca: f7 2f sl2ad3 \$0,\$sp,\$sp
+ 5cc: 00 c0 00 80 add3 \$0,\$0,-32768
+ 5d0: 00 cf 00 80 add3 \$sp,\$0,-32768
+ 5d4: f0 c0 00 80 add3 \$0,\$sp,-32768
+ 5d8: f0 cf 00 80 add3 \$sp,\$sp,-32768
+ 5dc: 00 c0 ff 7f add3 \$0,\$0,32767
+ 5e0: 00 cf ff 7f add3 \$sp,\$0,32767
+ 5e4: f0 c0 ff 7f add3 \$0,\$sp,32767
+ 5e8: f0 cf ff 7f add3 \$sp,\$sp,32767
+ 5ec: 00 c0 00 00 add3 \$0,\$0,0
+ 5ec: R_MEP_LOW16 symbol
+ 5f0: 00 cf 00 00 add3 \$sp,\$0,0
+ 5f0: R_MEP_LOW16 symbol
+ 5f4: f0 c0 00 00 add3 \$0,\$sp,0
+ 5f4: R_MEP_LOW16 symbol
+ 5f8: f0 cf 00 00 add3 \$sp,\$sp,0
+ 5f8: R_MEP_LOW16 symbol
+ 5fc: 01 60 slt3 \$0,\$0,0x0
+ 5fe: 05 60 sltu3 \$0,\$0,0x0
+ 600: 01 6f slt3 \$0,\$sp,0x0
+ 602: 05 6f sltu3 \$0,\$sp,0x0
+ 604: f9 60 slt3 \$0,\$0,0x1f
+ 606: fd 60 sltu3 \$0,\$0,0x1f
+ 608: f9 6f slt3 \$0,\$sp,0x1f
+ 60a: fd 6f sltu3 \$0,\$sp,0x1f
+ 60c: 00 10 or \$0,\$0
+ 60e: 01 10 and \$0,\$0
+ 610: 02 10 xor \$0,\$0
+ 612: 03 10 nor \$0,\$0
+ 614: 00 1f or \$sp,\$0
+ 616: 01 1f and \$sp,\$0
+ 618: 02 1f xor \$sp,\$0
+ 61a: 03 1f nor \$sp,\$0
+ 61c: f0 10 or \$0,\$sp
+ 61e: f1 10 and \$0,\$sp
+ 620: f2 10 xor \$0,\$sp
+ 622: f3 10 nor \$0,\$sp
+ 624: f0 1f or \$sp,\$sp
+ 626: f1 1f and \$sp,\$sp
+ 628: f2 1f xor \$sp,\$sp
+ 62a: f3 1f nor \$sp,\$sp
+ 62c: 04 c0 00 00 or3 \$0,\$0,0x0
+ 630: 05 c0 00 00 and3 \$0,\$0,0x0
+ 634: 06 c0 00 00 xor3 \$0,\$0,0x0
+ 638: 04 cf 00 00 or3 \$sp,\$0,0x0
+ 63c: 05 cf 00 00 and3 \$sp,\$0,0x0
+ 640: 06 cf 00 00 xor3 \$sp,\$0,0x0
+ 644: f4 c0 00 00 or3 \$0,\$sp,0x0
+ 648: f5 c0 00 00 and3 \$0,\$sp,0x0
+ 64c: f6 c0 00 00 xor3 \$0,\$sp,0x0
+ 650: f4 cf 00 00 or3 \$sp,\$sp,0x0
+ 654: f5 cf 00 00 and3 \$sp,\$sp,0x0
+ 658: f6 cf 00 00 xor3 \$sp,\$sp,0x0
+ 65c: 04 c0 ff ff or3 \$0,\$0,0xffff
+ 660: 05 c0 ff ff and3 \$0,\$0,0xffff
+ 664: 06 c0 ff ff xor3 \$0,\$0,0xffff
+ 668: 04 cf ff ff or3 \$sp,\$0,0xffff
+ 66c: 05 cf ff ff and3 \$sp,\$0,0xffff
+ 670: 06 cf ff ff xor3 \$sp,\$0,0xffff
+ 674: f4 c0 ff ff or3 \$0,\$sp,0xffff
+ 678: f5 c0 ff ff and3 \$0,\$sp,0xffff
+ 67c: f6 c0 ff ff xor3 \$0,\$sp,0xffff
+ 680: f4 cf ff ff or3 \$sp,\$sp,0xffff
+ 684: f5 cf ff ff and3 \$sp,\$sp,0xffff
+ 688: f6 cf ff ff xor3 \$sp,\$sp,0xffff
+ 68c: 04 c0 00 00 or3 \$0,\$0,0x0
+ 68c: R_MEP_LOW16 symbol
+ 690: 05 c0 00 00 and3 \$0,\$0,0x0
+ 690: R_MEP_LOW16 symbol
+ 694: 06 c0 00 00 xor3 \$0,\$0,0x0
+ 694: R_MEP_LOW16 symbol
+ 698: 04 cf 00 00 or3 \$sp,\$0,0x0
+ 698: R_MEP_LOW16 symbol
+ 69c: 05 cf 00 00 and3 \$sp,\$0,0x0
+ 69c: R_MEP_LOW16 symbol
+ 6a0: 06 cf 00 00 xor3 \$sp,\$0,0x0
+ 6a0: R_MEP_LOW16 symbol
+ 6a4: f4 c0 00 00 or3 \$0,\$sp,0x0
+ 6a4: R_MEP_LOW16 symbol
+ 6a8: f5 c0 00 00 and3 \$0,\$sp,0x0
+ 6a8: R_MEP_LOW16 symbol
+ 6ac: f6 c0 00 00 xor3 \$0,\$sp,0x0
+ 6ac: R_MEP_LOW16 symbol
+ 6b0: f4 cf 00 00 or3 \$sp,\$sp,0x0
+ 6b0: R_MEP_LOW16 symbol
+ 6b4: f5 cf 00 00 and3 \$sp,\$sp,0x0
+ 6b4: R_MEP_LOW16 symbol
+ 6b8: f6 cf 00 00 xor3 \$sp,\$sp,0x0
+ 6b8: R_MEP_LOW16 symbol
+ 6bc: 0d 20 sra \$0,\$0
+ 6be: 0c 20 srl \$0,\$0
+ 6c0: 0e 20 sll \$0,\$0
+ 6c2: 0f 20 fsft \$0,\$0
+ 6c4: 0d 2f sra \$sp,\$0
+ 6c6: 0c 2f srl \$sp,\$0
+ 6c8: 0e 2f sll \$sp,\$0
+ 6ca: 0f 2f fsft \$sp,\$0
+ 6cc: fd 20 sra \$0,\$sp
+ 6ce: fc 20 srl \$0,\$sp
+ 6d0: fe 20 sll \$0,\$sp
+ 6d2: ff 20 fsft \$0,\$sp
+ 6d4: fd 2f sra \$sp,\$sp
+ 6d6: fc 2f srl \$sp,\$sp
+ 6d8: fe 2f sll \$sp,\$sp
+ 6da: ff 2f fsft \$sp,\$sp
+ 6dc: 03 60 sra \$0,0x0
+ 6de: 02 60 srl \$0,0x0
+ 6e0: 06 60 sll \$0,0x0
+ 6e2: 03 6f sra \$sp,0x0
+ 6e4: 02 6f srl \$sp,0x0
+ 6e6: 06 6f sll \$sp,0x0
+ 6e8: fb 60 sra \$0,0x1f
+ 6ea: fa 60 srl \$0,0x1f
+ 6ec: fe 60 sll \$0,0x1f
+ 6ee: fb 6f sra \$sp,0x1f
+ 6f0: fa 6f srl \$sp,0x1f
+ 6f2: fe 6f sll \$sp,0x1f
+ 6f4: 07 60 sll3 \$0,\$0,0x0
+ 6f6: 07 6f sll3 \$0,\$sp,0x0
+ 6f8: ff 60 sll3 \$0,\$0,0x1f
+ 6fa: ff 6f sll3 \$0,\$sp,0x1f
+ 6fc: 02 b8 bra 0xfffffefe
+ 6fe: 01 e0 00 04 beq \$0,\$0,0xefe
+ 702: 00 b0 bra 0x702
+ 702: R_MEP_PCREL12A2 symbol
+ 704: 82 a0 beqz \$0,0x686
+ 706: 83 a0 bnez \$0,0x688
+ 708: 82 af beqz \$sp,0x68a
+ 70a: 83 af bnez \$sp,0x68c
+ 70c: 00 e0 40 00 beqi \$0,0x0,0x78c
+ 710: 04 e0 40 00 bnei \$0,0x0,0x790
+ 714: 00 ef 40 00 beqi \$sp,0x0,0x794
+ 718: 04 ef 40 00 bnei \$sp,0x0,0x798
+ 71c: 00 a0 beqz \$0,0x71c
+ 71c: R_MEP_PCREL8A2 symbol
+ 71e: 01 a0 bnez \$0,0x71e
+ 71e: R_MEP_PCREL8A2 symbol
+ 720: 00 af beqz \$sp,0x720
+ 720: R_MEP_PCREL8A2 symbol
+ 722: 01 af bnez \$sp,0x722
+ 722: R_MEP_PCREL8A2 symbol
+ 724: 00 e0 02 80 beqi \$0,0x0,0xffff0728
+ 728: 04 e0 02 80 bnei \$0,0x0,0xffff072c
+ 72c: 0c e0 02 80 blti \$0,0x0,0xffff0730
+ 730: 08 e0 02 80 bgei \$0,0x0,0xffff0734
+ 734: 00 ef 02 80 beqi \$sp,0x0,0xffff0738
+ 738: 04 ef 02 80 bnei \$sp,0x0,0xffff073c
+ 73c: 0c ef 02 80 blti \$sp,0x0,0xffff0740
+ 740: 08 ef 02 80 bgei \$sp,0x0,0xffff0744
+ 744: f0 e0 02 80 beqi \$0,0xf,0xffff0748
+ 748: f4 e0 02 80 bnei \$0,0xf,0xffff074c
+ 74c: fc e0 02 80 blti \$0,0xf,0xffff0750
+ 750: f8 e0 02 80 bgei \$0,0xf,0xffff0754
+ 754: f0 ef 02 80 beqi \$sp,0xf,0xffff0758
+ 758: f4 ef 02 80 bnei \$sp,0xf,0xffff075c
+ 75c: fc ef 02 80 blti \$sp,0xf,0xffff0760
+ 760: f8 ef 02 80 bgei \$sp,0xf,0xffff0764
+ 764: 00 e0 ff 3f beqi \$0,0x0,0x8762
+ 768: 04 e0 ff 3f bnei \$0,0x0,0x8766
+ 76c: 0c e0 ff 3f blti \$0,0x0,0x876a
+ 770: 08 e0 ff 3f bgei \$0,0x0,0x876e
+ 774: 00 ef ff 3f beqi \$sp,0x0,0x8772
+ 778: 04 ef ff 3f bnei \$sp,0x0,0x8776
+ 77c: 0c ef ff 3f blti \$sp,0x0,0x877a
+ 780: 08 ef ff 3f bgei \$sp,0x0,0x877e
+ 784: f0 e0 ff 3f beqi \$0,0xf,0x8782
+ 788: f4 e0 ff 3f bnei \$0,0xf,0x8786
+ 78c: fc e0 ff 3f blti \$0,0xf,0x878a
+ 790: f8 e0 ff 3f bgei \$0,0xf,0x878e
+ 794: f0 ef ff 3f beqi \$sp,0xf,0x8792
+ 798: f4 ef ff 3f bnei \$sp,0xf,0x8796
+ 79c: fc ef ff 3f blti \$sp,0xf,0x879a
+ 7a0: f8 ef ff 3f bgei \$sp,0xf,0x879e
+ 7a4: 00 e0 00 00 beqi \$0,0x0,0x7a4
+ 7a4: R_MEP_PCREL17A2 symbol
+ 7a8: 04 e0 00 00 bnei \$0,0x0,0x7a8
+ 7a8: R_MEP_PCREL17A2 symbol
+ 7ac: 0c e0 00 00 blti \$0,0x0,0x7ac
+ 7ac: R_MEP_PCREL17A2 symbol
+ 7b0: 08 e0 00 00 bgei \$0,0x0,0x7b0
+ 7b0: R_MEP_PCREL17A2 symbol
+ 7b4: 00 ef 00 00 beqi \$sp,0x0,0x7b4
+ 7b4: R_MEP_PCREL17A2 symbol
+ 7b8: 04 ef 00 00 bnei \$sp,0x0,0x7b8
+ 7b8: R_MEP_PCREL17A2 symbol
+ 7bc: 0c ef 00 00 blti \$sp,0x0,0x7bc
+ 7bc: R_MEP_PCREL17A2 symbol
+ 7c0: 08 ef 00 00 bgei \$sp,0x0,0x7c0
+ 7c0: R_MEP_PCREL17A2 symbol
+ 7c4: f0 e0 00 00 beqi \$0,0xf,0x7c4
+ 7c4: R_MEP_PCREL17A2 symbol
+ 7c8: f4 e0 00 00 bnei \$0,0xf,0x7c8
+ 7c8: R_MEP_PCREL17A2 symbol
+ 7cc: fc e0 00 00 blti \$0,0xf,0x7cc
+ 7cc: R_MEP_PCREL17A2 symbol
+ 7d0: f8 e0 00 00 bgei \$0,0xf,0x7d0
+ 7d0: R_MEP_PCREL17A2 symbol
+ 7d4: f0 ef 00 00 beqi \$sp,0xf,0x7d4
+ 7d4: R_MEP_PCREL17A2 symbol
+ 7d8: f4 ef 00 00 bnei \$sp,0xf,0x7d8
+ 7d8: R_MEP_PCREL17A2 symbol
+ 7dc: fc ef 00 00 blti \$sp,0xf,0x7dc
+ 7dc: R_MEP_PCREL17A2 symbol
+ 7e0: f8 ef 00 00 bgei \$sp,0xf,0x7e0
+ 7e0: R_MEP_PCREL17A2 symbol
+ 7e4: 01 e0 02 80 beq \$0,\$0,0xffff07e8
+ 7e8: 05 e0 02 80 bne \$0,\$0,0xffff07ec
+ 7ec: 01 ef 02 80 beq \$sp,\$0,0xffff07f0
+ 7f0: 05 ef 02 80 bne \$sp,\$0,0xffff07f4
+ 7f4: f1 e0 02 80 beq \$0,\$sp,0xffff07f8
+ 7f8: f5 e0 02 80 bne \$0,\$sp,0xffff07fc
+ 7fc: f1 ef 02 80 beq \$sp,\$sp,0xffff0800
+ 800: f5 ef 02 80 bne \$sp,\$sp,0xffff0804
+ 804: 01 e0 ff 3f beq \$0,\$0,0x8802
+ 808: 05 e0 ff 3f bne \$0,\$0,0x8806
+ 80c: 01 ef ff 3f beq \$sp,\$0,0x880a
+ 810: 05 ef ff 3f bne \$sp,\$0,0x880e
+ 814: f1 e0 ff 3f beq \$0,\$sp,0x8812
+ 818: f5 e0 ff 3f bne \$0,\$sp,0x8816
+ 81c: f1 ef ff 3f beq \$sp,\$sp,0x881a
+ 820: f5 ef ff 3f bne \$sp,\$sp,0x881e
+ 824: 01 e0 00 00 beq \$0,\$0,0x824
+ 824: R_MEP_PCREL17A2 symbol
+ 828: 05 e0 00 00 bne \$0,\$0,0x828
+ 828: R_MEP_PCREL17A2 symbol
+ 82c: 01 ef 00 00 beq \$sp,\$0,0x82c
+ 82c: R_MEP_PCREL17A2 symbol
+ 830: 05 ef 00 00 bne \$sp,\$0,0x830
+ 830: R_MEP_PCREL17A2 symbol
+ 834: f1 e0 00 00 beq \$0,\$sp,0x834
+ 834: R_MEP_PCREL17A2 symbol
+ 838: f5 e0 00 00 bne \$0,\$sp,0x838
+ 838: R_MEP_PCREL17A2 symbol
+ 83c: f1 ef 00 00 beq \$sp,\$sp,0x83c
+ 83c: R_MEP_PCREL17A2 symbol
+ 840: f5 ef 00 00 bne \$sp,\$sp,0x840
+ 840: R_MEP_PCREL17A2 symbol
+ 844: 29 d8 00 80 bsr 0xff800848
+ 848: 03 b8 bsr 0x4a
+ 84a: 09 d8 08 00 bsr 0x104a
+ 84e: 19 d8 00 80 bsr 0xff800850
+ 852: 09 d8 00 00 bsr 0x852
+ 852: R_MEP_PCREL24A2 symbol
+ 856: 0e 10 jmp \$0
+ 858: fe 10 jmp \$sp
+ 85a: 08 d8 00 00 jmp 0x0
+ 85e: f8 df ff ff jmp 0xfffffe
+ 862: 08 d8 00 00 jmp 0x0
+ 862: R_MEP_PCABS24A2 symbol
+ 866: 0f 10 jsr \$0
+ 868: ff 10 jsr \$sp
+ 86a: 02 70 ret
+ 86c: 09 e0 02 80 repeat \$0,0xffff0870
+ 870: 09 ef 02 80 repeat \$sp,0xffff0874
+ 874: 09 e0 ff 3f repeat \$0,0x8872
+ 878: 09 ef ff 3f repeat \$sp,0x8876
+ 87c: 09 e0 00 00 repeat \$0,0x87c
+ 87c: R_MEP_PCREL17A2 symbol
+ 880: 09 ef 00 00 repeat \$sp,0x880
+ 880: R_MEP_PCREL17A2 symbol
+ 884: 19 e0 02 80 erepeat 0xffff0888
+ 888: 19 e0 ff 3f erepeat 0x8886
+ 88c: 19 e0 00 00 erepeat 0x88c
+ 88c: R_MEP_PCREL17A2 symbol
+ 890: 08 70 stc \$0,\$pc
+ 892: 0a 70 ldc \$0,\$pc
+ 894: 08 7f stc \$sp,\$pc
+ 896: 0a 7f ldc \$sp,\$pc
+ 898: 18 70 stc \$0,\$lp
+ 89a: 1a 70 ldc \$0,\$lp
+ 89c: 18 7f stc \$sp,\$lp
+ 89e: 1a 7f ldc \$sp,\$lp
+ 8a0: 28 70 stc \$0,\$sar
+ 8a2: 2a 70 ldc \$0,\$sar
+ 8a4: 28 7f stc \$sp,\$sar
+ 8a6: 2a 7f ldc \$sp,\$sar
+ 8a8: 48 70 stc \$0,\$rpb
+ 8aa: 4a 70 ldc \$0,\$rpb
+ 8ac: 48 7f stc \$sp,\$rpb
+ 8ae: 4a 7f ldc \$sp,\$rpb
+ 8b0: 58 70 stc \$0,\$rpe
+ 8b2: 5a 70 ldc \$0,\$rpe
+ 8b4: 58 7f stc \$sp,\$rpe
+ 8b6: 5a 7f ldc \$sp,\$rpe
+ 8b8: 68 70 stc \$0,\$rpc
+ 8ba: 6a 70 ldc \$0,\$rpc
+ 8bc: 68 7f stc \$sp,\$rpc
+ 8be: 6a 7f ldc \$sp,\$rpc
+ 8c0: 78 70 stc \$0,\$hi
+ 8c2: 7a 70 ldc \$0,\$hi
+ 8c4: 78 7f stc \$sp,\$hi
+ 8c6: 7a 7f ldc \$sp,\$hi
+ 8c8: 88 70 stc \$0,\$lo
+ 8ca: 8a 70 ldc \$0,\$lo
+ 8cc: 88 7f stc \$sp,\$lo
+ 8ce: 8a 7f ldc \$sp,\$lo
+ 8d0: c8 70 stc \$0,\$mb0
+ 8d2: ca 70 ldc \$0,\$mb0
+ 8d4: c8 7f stc \$sp,\$mb0
+ 8d6: ca 7f ldc \$sp,\$mb0
+ 8d8: d8 70 stc \$0,\$me0
+ 8da: da 70 ldc \$0,\$me0
+ 8dc: d8 7f stc \$sp,\$me0
+ 8de: da 7f ldc \$sp,\$me0
+ 8e0: e8 70 stc \$0,\$mb1
+ 8e2: ea 70 ldc \$0,\$mb1
+ 8e4: e8 7f stc \$sp,\$mb1
+ 8e6: ea 7f ldc \$sp,\$mb1
+ 8e8: f8 70 stc \$0,\$me1
+ 8ea: fa 70 ldc \$0,\$me1
+ 8ec: f8 7f stc \$sp,\$me1
+ 8ee: fa 7f ldc \$sp,\$me1
+ 8f0: 09 70 stc \$0,\$psw
+ 8f2: 0b 70 ldc \$0,\$psw
+ 8f4: 09 7f stc \$sp,\$psw
+ 8f6: 0b 7f ldc \$sp,\$psw
+ 8f8: 19 70 stc \$0,\$id
+ 8fa: 1b 70 ldc \$0,\$id
+ 8fc: 19 7f stc \$sp,\$id
+ 8fe: 1b 7f ldc \$sp,\$id
+ 900: 29 70 stc \$0,\$tmp
+ 902: 2b 70 ldc \$0,\$tmp
+ 904: 29 7f stc \$sp,\$tmp
+ 906: 2b 7f ldc \$sp,\$tmp
+ 908: 39 70 stc \$0,\$epc
+ 90a: 3b 70 ldc \$0,\$epc
+ 90c: 39 7f stc \$sp,\$epc
+ 90e: 3b 7f ldc \$sp,\$epc
+ 910: 49 70 stc \$0,\$exc
+ 912: 4b 70 ldc \$0,\$exc
+ 914: 49 7f stc \$sp,\$exc
+ 916: 4b 7f ldc \$sp,\$exc
+ 918: 59 70 stc \$0,\$cfg
+ 91a: 5b 70 ldc \$0,\$cfg
+ 91c: 59 7f stc \$sp,\$cfg
+ 91e: 5b 7f ldc \$sp,\$cfg
+ 920: 79 70 stc \$0,\$npc
+ 922: 7b 70 ldc \$0,\$npc
+ 924: 79 7f stc \$sp,\$npc
+ 926: 7b 7f ldc \$sp,\$npc
+ 928: 89 70 stc \$0,\$dbg
+ 92a: 8b 70 ldc \$0,\$dbg
+ 92c: 89 7f stc \$sp,\$dbg
+ 92e: 8b 7f ldc \$sp,\$dbg
+ 930: 99 70 stc \$0,\$depc
+ 932: 9b 70 ldc \$0,\$depc
+ 934: 99 7f stc \$sp,\$depc
+ 936: 9b 7f ldc \$sp,\$depc
+ 938: a9 70 stc \$0,\$opt
+ 93a: ab 70 ldc \$0,\$opt
+ 93c: a9 7f stc \$sp,\$opt
+ 93e: ab 7f ldc \$sp,\$opt
+ 940: b9 70 stc \$0,\$rcfg
+ 942: bb 70 ldc \$0,\$rcfg
+ 944: b9 7f stc \$sp,\$rcfg
+ 946: bb 7f ldc \$sp,\$rcfg
+ 948: c9 70 stc \$0,\$ccfg
+ 94a: cb 70 ldc \$0,\$ccfg
+ 94c: c9 7f stc \$sp,\$ccfg
+ 94e: cb 7f ldc \$sp,\$ccfg
+ 950: 00 70 di
+ 952: 10 70 ei
+ 954: 12 70 reti
+ 956: 22 70 halt
+ 958: 32 70 break
+ 95a: 11 70 syncm
+ 95c: 06 70 swi 0x0
+ 95e: 36 70 swi 0x3
+ 960: 04 f0 00 00 stcb \$0,0x0
+ 964: 14 f0 00 00 ldcb \$0,0x0
+ 968: 04 ff 00 00 stcb \$sp,0x0
+ 96c: 14 ff 00 00 ldcb \$sp,0x0
+ 970: 04 f0 ff ff stcb \$0,0xffff
+ 974: 14 f0 ff ff ldcb \$0,0xffff
+ 978: 04 ff ff ff stcb \$sp,0xffff
+ 97c: 14 ff ff ff ldcb \$sp,0xffff
+ 980: 04 f0 00 00 stcb \$0,0x0
+ 982: R_MEP_16 symbol
+ 984: 14 f0 00 00 ldcb \$0,0x0
+ 986: R_MEP_16 symbol
+ 988: 04 ff 00 00 stcb \$sp,0x0
+ 98a: R_MEP_16 symbol
+ 98c: 14 ff 00 00 ldcb \$sp,0x0
+ 98e: R_MEP_16 symbol
+ 990: 00 20 bsetm \(\$0\),0x0
+ 992: 01 20 bclrm \(\$0\),0x0
+ 994: 02 20 bnotm \(\$0\),0x0
+ 996: f0 20 bsetm \(\$sp\),0x0
+ 998: f1 20 bclrm \(\$sp\),0x0
+ 99a: f2 20 bnotm \(\$sp\),0x0
+ 99c: 00 27 bsetm \(\$0\),0x7
+ 99e: 01 27 bclrm \(\$0\),0x7
+ 9a0: 02 27 bnotm \(\$0\),0x7
+ 9a2: f0 27 bsetm \(\$sp\),0x7
+ 9a4: f1 27 bclrm \(\$sp\),0x7
+ 9a6: f2 27 bnotm \(\$sp\),0x7
+ 9a8: 03 20 btstm \$0,\(\$0\),0x0
+ 9aa: f3 20 btstm \$0,\(\$sp\),0x0
+ 9ac: 03 27 btstm \$0,\(\$0\),0x7
+ 9ae: f3 27 btstm \$0,\(\$sp\),0x7
+ 9b0: 04 20 tas \$0,\(\$0\)
+ 9b2: 04 2f tas \$sp,\(\$0\)
+ 9b4: f4 20 tas \$0,\(\$sp\)
+ 9b6: f4 2f tas \$sp,\(\$sp\)
+ 9b8: 04 70 cache 0x0,\(\$0\)
+ 9ba: 04 73 cache 0x3,\(\$0\)
+ 9bc: f4 70 cache 0x0,\(\$sp\)
+ 9be: f4 73 cache 0x3,\(\$sp\)
+ 9c0: 04 10 mul \$0,\$0
+ 9c2: 01 f0 04 30 madd \$0,\$0
+ 9c6: 06 10 mulr \$0,\$0
+ 9c8: 01 f0 06 30 maddr \$0,\$0
+ 9cc: 05 10 mulu \$0,\$0
+ 9ce: 01 f0 05 30 maddu \$0,\$0
+ 9d2: 07 10 mulru \$0,\$0
+ 9d4: 01 f0 07 30 maddru \$0,\$0
+ 9d8: 04 1f mul \$sp,\$0
+ 9da: 01 ff 04 30 madd \$sp,\$0
+ 9de: 06 1f mulr \$sp,\$0
+ 9e0: 01 ff 06 30 maddr \$sp,\$0
+ 9e4: 05 1f mulu \$sp,\$0
+ 9e6: 01 ff 05 30 maddu \$sp,\$0
+ 9ea: 07 1f mulru \$sp,\$0
+ 9ec: 01 ff 07 30 maddru \$sp,\$0
+ 9f0: f4 10 mul \$0,\$sp
+ 9f2: f1 f0 04 30 madd \$0,\$sp
+ 9f6: f6 10 mulr \$0,\$sp
+ 9f8: f1 f0 06 30 maddr \$0,\$sp
+ 9fc: f5 10 mulu \$0,\$sp
+ 9fe: f1 f0 05 30 maddu \$0,\$sp
+ a02: f7 10 mulru \$0,\$sp
+ a04: f1 f0 07 30 maddru \$0,\$sp
+ a08: f4 1f mul \$sp,\$sp
+ a0a: f1 ff 04 30 madd \$sp,\$sp
+ a0e: f6 1f mulr \$sp,\$sp
+ a10: f1 ff 06 30 maddr \$sp,\$sp
+ a14: f5 1f mulu \$sp,\$sp
+ a16: f1 ff 05 30 maddu \$sp,\$sp
+ a1a: f7 1f mulru \$sp,\$sp
+ a1c: f1 ff 07 30 maddru \$sp,\$sp
+ a20: 08 10 div \$0,\$0
+ a22: 09 10 divu \$0,\$0
+ a24: 08 1f div \$sp,\$0
+ a26: 09 1f divu \$sp,\$0
+ a28: f8 10 div \$0,\$sp
+ a2a: f9 10 divu \$0,\$sp
+ a2c: f8 1f div \$sp,\$sp
+ a2e: f9 1f divu \$sp,\$sp
+ a30: 13 70 dret
+ a32: 33 70 dbreak
+ a34: 01 f0 00 00 ldz \$0,\$0
+ a38: 01 f0 03 00 abs \$0,\$0
+ a3c: 01 f0 02 00 ave \$0,\$0
+ a40: 01 ff 00 00 ldz \$sp,\$0
+ a44: 01 ff 03 00 abs \$sp,\$0
+ a48: 01 ff 02 00 ave \$sp,\$0
+ a4c: f1 f0 00 00 ldz \$0,\$sp
+ a50: f1 f0 03 00 abs \$0,\$sp
+ a54: f1 f0 02 00 ave \$0,\$sp
+ a58: f1 ff 00 00 ldz \$sp,\$sp
+ a5c: f1 ff 03 00 abs \$sp,\$sp
+ a60: f1 ff 02 00 ave \$sp,\$sp
+ a64: 01 f0 04 00 min \$0,\$0
+ a68: 01 f0 05 00 max \$0,\$0
+ a6c: 01 f0 06 00 minu \$0,\$0
+ a70: 01 f0 07 00 maxu \$0,\$0
+ a74: 01 ff 04 00 min \$sp,\$0
+ a78: 01 ff 05 00 max \$sp,\$0
+ a7c: 01 ff 06 00 minu \$sp,\$0
+ a80: 01 ff 07 00 maxu \$sp,\$0
+ a84: f1 f0 04 00 min \$0,\$sp
+ a88: f1 f0 05 00 max \$0,\$sp
+ a8c: f1 f0 06 00 minu \$0,\$sp
+ a90: f1 f0 07 00 maxu \$0,\$sp
+ a94: f1 ff 04 00 min \$sp,\$sp
+ a98: f1 ff 05 00 max \$sp,\$sp
+ a9c: f1 ff 06 00 minu \$sp,\$sp
+ aa0: f1 ff 07 00 maxu \$sp,\$sp
+ aa4: 01 f0 00 10 clip \$0,0x0
+ aa8: 01 f0 01 10 clipu \$0,0x0
+ aac: 01 ff 00 10 clip \$sp,0x0
+ ab0: 01 ff 01 10 clipu \$sp,0x0
+ ab4: 01 f0 f8 10 clip \$0,0x1f
+ ab8: 01 f0 f9 10 clipu \$0,0x1f
+ abc: 01 ff f8 10 clip \$sp,0x1f
+ ac0: 01 ff f9 10 clipu \$sp,0x1f
+ ac4: 01 f0 08 00 sadd \$0,\$0
+ ac8: 01 f0 0a 00 ssub \$0,\$0
+ acc: 01 f0 09 00 saddu \$0,\$0
+ ad0: 01 f0 0b 00 ssubu \$0,\$0
+ ad4: 01 ff 08 00 sadd \$sp,\$0
+ ad8: 01 ff 0a 00 ssub \$sp,\$0
+ adc: 01 ff 09 00 saddu \$sp,\$0
+ ae0: 01 ff 0b 00 ssubu \$sp,\$0
+ ae4: f1 f0 08 00 sadd \$0,\$sp
+ ae8: f1 f0 0a 00 ssub \$0,\$sp
+ aec: f1 f0 09 00 saddu \$0,\$sp
+ af0: f1 f0 0b 00 ssubu \$0,\$sp
+ af4: f1 ff 08 00 sadd \$sp,\$sp
+ af8: f1 ff 0a 00 ssub \$sp,\$sp
+ afc: f1 ff 09 00 saddu \$sp,\$sp
+ b00: f1 ff 0b 00 ssubu \$sp,\$sp
+ b04: 08 30 swcp \$c0,\(\$0\)
+ b06: 09 30 lwcp \$c0,\(\$0\)
+ b08: 0a 30 smcp \$c0,\(\$0\)
+ b0a: 0b 30 lmcp \$c0,\(\$0\)
+ b0c: 08 3f swcp \$c15,\(\$0\)
+ b0e: 09 3f lwcp \$c15,\(\$0\)
+ b10: 0a 3f smcp \$c15,\(\$0\)
+ b12: 0b 3f lmcp \$c15,\(\$0\)
+ b14: f8 30 swcp \$c0,\(\$sp\)
+ b16: f9 30 lwcp \$c0,\(\$sp\)
+ b18: fa 30 smcp \$c0,\(\$sp\)
+ b1a: fb 30 lmcp \$c0,\(\$sp\)
+ b1c: f8 3f swcp \$c15,\(\$sp\)
+ b1e: f9 3f lwcp \$c15,\(\$sp\)
+ b20: fa 3f smcp \$c15,\(\$sp\)
+ b22: fb 3f lmcp \$c15,\(\$sp\)
+ b24: 00 30 swcpi \$c0,\(\$0\+\)
+ b26: 01 30 lwcpi \$c0,\(\$0\+\)
+ b28: 02 30 smcpi \$c0,\(\$0\+\)
+ b2a: 03 30 lmcpi \$c0,\(\$0\+\)
+ b2c: 00 3f swcpi \$c15,\(\$0\+\)
+ b2e: 01 3f lwcpi \$c15,\(\$0\+\)
+ b30: 02 3f smcpi \$c15,\(\$0\+\)
+ b32: 03 3f lmcpi \$c15,\(\$0\+\)
+ b34: f0 30 swcpi \$c0,\(\$sp\+\)
+ b36: f1 30 lwcpi \$c0,\(\$sp\+\)
+ b38: f2 30 smcpi \$c0,\(\$sp\+\)
+ b3a: f3 30 lmcpi \$c0,\(\$sp\+\)
+ b3c: f0 3f swcpi \$c15,\(\$sp\+\)
+ b3e: f1 3f lwcpi \$c15,\(\$sp\+\)
+ b40: f2 3f smcpi \$c15,\(\$sp\+\)
+ b42: f3 3f lmcpi \$c15,\(\$sp\+\)
+ b44: 05 f0 80 00 sbcpa \$c0,\(\$0\+\),-128
+ b48: 05 f0 80 40 lbcpa \$c0,\(\$0\+\),-128
+ b4c: 05 f0 80 08 sbcpm0 \$c0,\(\$0\+\),-128
+ b50: 05 f0 80 48 lbcpm0 \$c0,\(\$0\+\),-128
+ b54: 05 f0 80 0c sbcpm1 \$c0,\(\$0\+\),-128
+ b58: 05 f0 80 4c lbcpm1 \$c0,\(\$0\+\),-128
+ b5c: 05 ff 80 00 sbcpa \$c15,\(\$0\+\),-128
+ b60: 05 ff 80 40 lbcpa \$c15,\(\$0\+\),-128
+ b64: 05 ff 80 08 sbcpm0 \$c15,\(\$0\+\),-128
+ b68: 05 ff 80 48 lbcpm0 \$c15,\(\$0\+\),-128
+ b6c: 05 ff 80 0c sbcpm1 \$c15,\(\$0\+\),-128
+ b70: 05 ff 80 4c lbcpm1 \$c15,\(\$0\+\),-128
+ b74: f5 f0 80 00 sbcpa \$c0,\(\$sp\+\),-128
+ b78: f5 f0 80 40 lbcpa \$c0,\(\$sp\+\),-128
+ b7c: f5 f0 80 08 sbcpm0 \$c0,\(\$sp\+\),-128
+ b80: f5 f0 80 48 lbcpm0 \$c0,\(\$sp\+\),-128
+ b84: f5 f0 80 0c sbcpm1 \$c0,\(\$sp\+\),-128
+ b88: f5 f0 80 4c lbcpm1 \$c0,\(\$sp\+\),-128
+ b8c: f5 ff 80 00 sbcpa \$c15,\(\$sp\+\),-128
+ b90: f5 ff 80 40 lbcpa \$c15,\(\$sp\+\),-128
+ b94: f5 ff 80 08 sbcpm0 \$c15,\(\$sp\+\),-128
+ b98: f5 ff 80 48 lbcpm0 \$c15,\(\$sp\+\),-128
+ b9c: f5 ff 80 0c sbcpm1 \$c15,\(\$sp\+\),-128
+ ba0: f5 ff 80 4c lbcpm1 \$c15,\(\$sp\+\),-128
+ ba4: 05 f0 7f 00 sbcpa \$c0,\(\$0\+\),127
+ ba8: 05 f0 7f 40 lbcpa \$c0,\(\$0\+\),127
+ bac: 05 f0 7f 08 sbcpm0 \$c0,\(\$0\+\),127
+ bb0: 05 f0 7f 48 lbcpm0 \$c0,\(\$0\+\),127
+ bb4: 05 f0 7f 0c sbcpm1 \$c0,\(\$0\+\),127
+ bb8: 05 f0 7f 4c lbcpm1 \$c0,\(\$0\+\),127
+ bbc: 05 ff 7f 00 sbcpa \$c15,\(\$0\+\),127
+ bc0: 05 ff 7f 40 lbcpa \$c15,\(\$0\+\),127
+ bc4: 05 ff 7f 08 sbcpm0 \$c15,\(\$0\+\),127
+ bc8: 05 ff 7f 48 lbcpm0 \$c15,\(\$0\+\),127
+ bcc: 05 ff 7f 0c sbcpm1 \$c15,\(\$0\+\),127
+ bd0: 05 ff 7f 4c lbcpm1 \$c15,\(\$0\+\),127
+ bd4: f5 f0 7f 00 sbcpa \$c0,\(\$sp\+\),127
+ bd8: f5 f0 7f 40 lbcpa \$c0,\(\$sp\+\),127
+ bdc: f5 f0 7f 08 sbcpm0 \$c0,\(\$sp\+\),127
+ be0: f5 f0 7f 48 lbcpm0 \$c0,\(\$sp\+\),127
+ be4: f5 f0 7f 0c sbcpm1 \$c0,\(\$sp\+\),127
+ be8: f5 f0 7f 4c lbcpm1 \$c0,\(\$sp\+\),127
+ bec: f5 ff 7f 00 sbcpa \$c15,\(\$sp\+\),127
+ bf0: f5 ff 7f 40 lbcpa \$c15,\(\$sp\+\),127
+ bf4: f5 ff 7f 08 sbcpm0 \$c15,\(\$sp\+\),127
+ bf8: f5 ff 7f 48 lbcpm0 \$c15,\(\$sp\+\),127
+ bfc: f5 ff 7f 0c sbcpm1 \$c15,\(\$sp\+\),127
+ c00: f5 ff 7f 4c lbcpm1 \$c15,\(\$sp\+\),127
+ c04: 05 f0 80 10 shcpa \$c0,\(\$0\+\),-128
+ c08: 05 f0 80 50 lhcpa \$c0,\(\$0\+\),-128
+ c0c: 05 f0 80 18 shcpm0 \$c0,\(\$0\+\),-128
+ c10: 05 f0 80 58 lhcpm0 \$c0,\(\$0\+\),-128
+ c14: 05 f0 80 1c shcpm1 \$c0,\(\$0\+\),-128
+ c18: 05 f0 80 5c lhcpm1 \$c0,\(\$0\+\),-128
+ c1c: 05 ff 80 10 shcpa \$c15,\(\$0\+\),-128
+ c20: 05 ff 80 50 lhcpa \$c15,\(\$0\+\),-128
+ c24: 05 ff 80 18 shcpm0 \$c15,\(\$0\+\),-128
+ c28: 05 ff 80 58 lhcpm0 \$c15,\(\$0\+\),-128
+ c2c: 05 ff 80 1c shcpm1 \$c15,\(\$0\+\),-128
+ c30: 05 ff 80 5c lhcpm1 \$c15,\(\$0\+\),-128
+ c34: f5 f0 80 10 shcpa \$c0,\(\$sp\+\),-128
+ c38: f5 f0 80 50 lhcpa \$c0,\(\$sp\+\),-128
+ c3c: f5 f0 80 18 shcpm0 \$c0,\(\$sp\+\),-128
+ c40: f5 f0 80 58 lhcpm0 \$c0,\(\$sp\+\),-128
+ c44: f5 f0 80 1c shcpm1 \$c0,\(\$sp\+\),-128
+ c48: f5 f0 80 5c lhcpm1 \$c0,\(\$sp\+\),-128
+ c4c: f5 ff 80 10 shcpa \$c15,\(\$sp\+\),-128
+ c50: f5 ff 80 50 lhcpa \$c15,\(\$sp\+\),-128
+ c54: f5 ff 80 18 shcpm0 \$c15,\(\$sp\+\),-128
+ c58: f5 ff 80 58 lhcpm0 \$c15,\(\$sp\+\),-128
+ c5c: f5 ff 80 1c shcpm1 \$c15,\(\$sp\+\),-128
+ c60: f5 ff 80 5c lhcpm1 \$c15,\(\$sp\+\),-128
+ c64: 05 f0 7e 10 shcpa \$c0,\(\$0\+\),126
+ c68: 05 f0 7e 50 lhcpa \$c0,\(\$0\+\),126
+ c6c: 05 f0 7e 18 shcpm0 \$c0,\(\$0\+\),126
+ c70: 05 f0 7e 58 lhcpm0 \$c0,\(\$0\+\),126
+ c74: 05 f0 7e 1c shcpm1 \$c0,\(\$0\+\),126
+ c78: 05 f0 7e 5c lhcpm1 \$c0,\(\$0\+\),126
+ c7c: 05 ff 7e 10 shcpa \$c15,\(\$0\+\),126
+ c80: 05 ff 7e 50 lhcpa \$c15,\(\$0\+\),126
+ c84: 05 ff 7e 18 shcpm0 \$c15,\(\$0\+\),126
+ c88: 05 ff 7e 58 lhcpm0 \$c15,\(\$0\+\),126
+ c8c: 05 ff 7e 1c shcpm1 \$c15,\(\$0\+\),126
+ c90: 05 ff 7e 5c lhcpm1 \$c15,\(\$0\+\),126
+ c94: f5 f0 7e 10 shcpa \$c0,\(\$sp\+\),126
+ c98: f5 f0 7e 50 lhcpa \$c0,\(\$sp\+\),126
+ c9c: f5 f0 7e 18 shcpm0 \$c0,\(\$sp\+\),126
+ ca0: f5 f0 7e 58 lhcpm0 \$c0,\(\$sp\+\),126
+ ca4: f5 f0 7e 1c shcpm1 \$c0,\(\$sp\+\),126
+ ca8: f5 f0 7e 5c lhcpm1 \$c0,\(\$sp\+\),126
+ cac: f5 ff 7e 10 shcpa \$c15,\(\$sp\+\),126
+ cb0: f5 ff 7e 50 lhcpa \$c15,\(\$sp\+\),126
+ cb4: f5 ff 7e 18 shcpm0 \$c15,\(\$sp\+\),126
+ cb8: f5 ff 7e 58 lhcpm0 \$c15,\(\$sp\+\),126
+ cbc: f5 ff 7e 1c shcpm1 \$c15,\(\$sp\+\),126
+ cc0: f5 ff 7e 5c lhcpm1 \$c15,\(\$sp\+\),126
+ cc4: 05 f0 80 20 swcpa \$c0,\(\$0\+\),-128
+ cc8: 05 f0 80 60 lwcpa \$c0,\(\$0\+\),-128
+ ccc: 05 f0 80 28 swcpm0 \$c0,\(\$0\+\),-128
+ cd0: 05 f0 80 68 lwcpm0 \$c0,\(\$0\+\),-128
+ cd4: 05 f0 80 2c swcpm1 \$c0,\(\$0\+\),-128
+ cd8: 05 f0 80 6c lwcpm1 \$c0,\(\$0\+\),-128
+ cdc: 05 ff 80 20 swcpa \$c15,\(\$0\+\),-128
+ ce0: 05 ff 80 60 lwcpa \$c15,\(\$0\+\),-128
+ ce4: 05 ff 80 28 swcpm0 \$c15,\(\$0\+\),-128
+ ce8: 05 ff 80 68 lwcpm0 \$c15,\(\$0\+\),-128
+ cec: 05 ff 80 2c swcpm1 \$c15,\(\$0\+\),-128
+ cf0: 05 ff 80 6c lwcpm1 \$c15,\(\$0\+\),-128
+ cf4: f5 f0 80 20 swcpa \$c0,\(\$sp\+\),-128
+ cf8: f5 f0 80 60 lwcpa \$c0,\(\$sp\+\),-128
+ cfc: f5 f0 80 28 swcpm0 \$c0,\(\$sp\+\),-128
+ d00: f5 f0 80 68 lwcpm0 \$c0,\(\$sp\+\),-128
+ d04: f5 f0 80 2c swcpm1 \$c0,\(\$sp\+\),-128
+ d08: f5 f0 80 6c lwcpm1 \$c0,\(\$sp\+\),-128
+ d0c: f5 ff 80 20 swcpa \$c15,\(\$sp\+\),-128
+ d10: f5 ff 80 60 lwcpa \$c15,\(\$sp\+\),-128
+ d14: f5 ff 80 28 swcpm0 \$c15,\(\$sp\+\),-128
+ d18: f5 ff 80 68 lwcpm0 \$c15,\(\$sp\+\),-128
+ d1c: f5 ff 80 2c swcpm1 \$c15,\(\$sp\+\),-128
+ d20: f5 ff 80 6c lwcpm1 \$c15,\(\$sp\+\),-128
+ d24: 05 f0 7c 20 swcpa \$c0,\(\$0\+\),124
+ d28: 05 f0 7c 60 lwcpa \$c0,\(\$0\+\),124
+ d2c: 05 f0 7c 28 swcpm0 \$c0,\(\$0\+\),124
+ d30: 05 f0 7c 68 lwcpm0 \$c0,\(\$0\+\),124
+ d34: 05 f0 7c 2c swcpm1 \$c0,\(\$0\+\),124
+ d38: 05 f0 7c 6c lwcpm1 \$c0,\(\$0\+\),124
+ d3c: 05 ff 7c 20 swcpa \$c15,\(\$0\+\),124
+ d40: 05 ff 7c 60 lwcpa \$c15,\(\$0\+\),124
+ d44: 05 ff 7c 28 swcpm0 \$c15,\(\$0\+\),124
+ d48: 05 ff 7c 68 lwcpm0 \$c15,\(\$0\+\),124
+ d4c: 05 ff 7c 2c swcpm1 \$c15,\(\$0\+\),124
+ d50: 05 ff 7c 6c lwcpm1 \$c15,\(\$0\+\),124
+ d54: f5 f0 7c 20 swcpa \$c0,\(\$sp\+\),124
+ d58: f5 f0 7c 60 lwcpa \$c0,\(\$sp\+\),124
+ d5c: f5 f0 7c 28 swcpm0 \$c0,\(\$sp\+\),124
+ d60: f5 f0 7c 68 lwcpm0 \$c0,\(\$sp\+\),124
+ d64: f5 f0 7c 2c swcpm1 \$c0,\(\$sp\+\),124
+ d68: f5 f0 7c 6c lwcpm1 \$c0,\(\$sp\+\),124
+ d6c: f5 ff 7c 20 swcpa \$c15,\(\$sp\+\),124
+ d70: f5 ff 7c 60 lwcpa \$c15,\(\$sp\+\),124
+ d74: f5 ff 7c 28 swcpm0 \$c15,\(\$sp\+\),124
+ d78: f5 ff 7c 68 lwcpm0 \$c15,\(\$sp\+\),124
+ d7c: f5 ff 7c 2c swcpm1 \$c15,\(\$sp\+\),124
+ d80: f5 ff 7c 6c lwcpm1 \$c15,\(\$sp\+\),124
+ d84: 05 f0 80 30 smcpa \$c0,\(\$0\+\),-128
+ d88: 05 f0 80 70 lmcpa \$c0,\(\$0\+\),-128
+ d8c: 05 f0 80 38 smcpm0 \$c0,\(\$0\+\),-128
+ d90: 05 f0 80 78 lmcpm0 \$c0,\(\$0\+\),-128
+ d94: 05 f0 80 3c smcpm1 \$c0,\(\$0\+\),-128
+ d98: 05 f0 80 7c lmcpm1 \$c0,\(\$0\+\),-128
+ d9c: 05 ff 80 30 smcpa \$c15,\(\$0\+\),-128
+ da0: 05 ff 80 70 lmcpa \$c15,\(\$0\+\),-128
+ da4: 05 ff 80 38 smcpm0 \$c15,\(\$0\+\),-128
+ da8: 05 ff 80 78 lmcpm0 \$c15,\(\$0\+\),-128
+ dac: 05 ff 80 3c smcpm1 \$c15,\(\$0\+\),-128
+ db0: 05 ff 80 7c lmcpm1 \$c15,\(\$0\+\),-128
+ db4: f5 f0 80 30 smcpa \$c0,\(\$sp\+\),-128
+ db8: f5 f0 80 70 lmcpa \$c0,\(\$sp\+\),-128
+ dbc: f5 f0 80 38 smcpm0 \$c0,\(\$sp\+\),-128
+ dc0: f5 f0 80 78 lmcpm0 \$c0,\(\$sp\+\),-128
+ dc4: f5 f0 80 3c smcpm1 \$c0,\(\$sp\+\),-128
+ dc8: f5 f0 80 7c lmcpm1 \$c0,\(\$sp\+\),-128
+ dcc: f5 ff 80 30 smcpa \$c15,\(\$sp\+\),-128
+ dd0: f5 ff 80 70 lmcpa \$c15,\(\$sp\+\),-128
+ dd4: f5 ff 80 38 smcpm0 \$c15,\(\$sp\+\),-128
+ dd8: f5 ff 80 78 lmcpm0 \$c15,\(\$sp\+\),-128
+ ddc: f5 ff 80 3c smcpm1 \$c15,\(\$sp\+\),-128
+ de0: f5 ff 80 7c lmcpm1 \$c15,\(\$sp\+\),-128
+ de4: 05 f0 78 30 smcpa \$c0,\(\$0\+\),120
+ de8: 05 f0 78 70 lmcpa \$c0,\(\$0\+\),120
+ dec: 05 f0 78 38 smcpm0 \$c0,\(\$0\+\),120
+ df0: 05 f0 78 78 lmcpm0 \$c0,\(\$0\+\),120
+ df4: 05 f0 78 3c smcpm1 \$c0,\(\$0\+\),120
+ df8: 05 f0 78 7c lmcpm1 \$c0,\(\$0\+\),120
+ dfc: 05 ff 78 30 smcpa \$c15,\(\$0\+\),120
+ e00: 05 ff 78 70 lmcpa \$c15,\(\$0\+\),120
+ e04: 05 ff 78 38 smcpm0 \$c15,\(\$0\+\),120
+ e08: 05 ff 78 78 lmcpm0 \$c15,\(\$0\+\),120
+ e0c: 05 ff 78 3c smcpm1 \$c15,\(\$0\+\),120
+ e10: 05 ff 78 7c lmcpm1 \$c15,\(\$0\+\),120
+ e14: f5 f0 78 30 smcpa \$c0,\(\$sp\+\),120
+ e18: f5 f0 78 70 lmcpa \$c0,\(\$sp\+\),120
+ e1c: f5 f0 78 38 smcpm0 \$c0,\(\$sp\+\),120
+ e20: f5 f0 78 78 lmcpm0 \$c0,\(\$sp\+\),120
+ e24: f5 f0 78 3c smcpm1 \$c0,\(\$sp\+\),120
+ e28: f5 f0 78 7c lmcpm1 \$c0,\(\$sp\+\),120
+ e2c: f5 ff 78 30 smcpa \$c15,\(\$sp\+\),120
+ e30: f5 ff 78 70 lmcpa \$c15,\(\$sp\+\),120
+ e34: f5 ff 78 38 smcpm0 \$c15,\(\$sp\+\),120
+ e38: f5 ff 78 78 lmcpm0 \$c15,\(\$sp\+\),120
+ e3c: f5 ff 78 3c smcpm1 \$c15,\(\$sp\+\),120
+ e40: f5 ff 78 7c lmcpm1 \$c15,\(\$sp\+\),120
+ e44: 04 d8 02 80 bcpeq 0x0,0xffff0e48
+ e48: 05 d8 02 80 bcpne 0x0,0xffff0e4c
+ e4c: 06 d8 02 80 bcpat 0x0,0xffff0e50
+ e50: 07 d8 02 80 bcpaf 0x0,0xffff0e54
+ e54: f4 d8 02 80 bcpeq 0xf,0xffff0e58
+ e58: f5 d8 02 80 bcpne 0xf,0xffff0e5c
+ e5c: f6 d8 02 80 bcpat 0xf,0xffff0e60
+ e60: f7 d8 02 80 bcpaf 0xf,0xffff0e64
+ e64: 04 d8 ff 3f bcpeq 0x0,0x8e62
+ e68: 05 d8 ff 3f bcpne 0x0,0x8e66
+ e6c: 06 d8 ff 3f bcpat 0x0,0x8e6a
+ e70: 07 d8 ff 3f bcpaf 0x0,0x8e6e
+ e74: f4 d8 ff 3f bcpeq 0xf,0x8e72
+ e78: f5 d8 ff 3f bcpne 0xf,0x8e76
+ e7c: f6 d8 ff 3f bcpat 0xf,0x8e7a
+ e80: f7 d8 ff 3f bcpaf 0xf,0x8e7e
+ e84: 04 d8 00 00 bcpeq 0x0,0xe84
+ e84: R_MEP_PCREL17A2 symbol
+ e88: 05 d8 00 00 bcpne 0x0,0xe88
+ e88: R_MEP_PCREL17A2 symbol
+ e8c: 06 d8 00 00 bcpat 0x0,0xe8c
+ e8c: R_MEP_PCREL17A2 symbol
+ e90: 07 d8 00 00 bcpaf 0x0,0xe90
+ e90: R_MEP_PCREL17A2 symbol
+ e94: f4 d8 00 00 bcpeq 0xf,0xe94
+ e94: R_MEP_PCREL17A2 symbol
+ e98: f5 d8 00 00 bcpne 0xf,0xe98
+ e98: R_MEP_PCREL17A2 symbol
+ e9c: f6 d8 00 00 bcpat 0xf,0xe9c
+ e9c: R_MEP_PCREL17A2 symbol
+ ea0: f7 d8 00 00 bcpaf 0xf,0xea0
+ ea0: R_MEP_PCREL17A2 symbol
+ ea4: 21 70 synccp
+ ea6: 0f 18 jsrv \$0
+ ea8: ff 18 jsrv \$sp
+ eaa: 2b d8 00 80 bsrv 0xff800eae
+ eae: fb df ff 7f bsrv 0x800eac
+ eb2: 0b d8 00 00 bsrv 0xeb2
+ eb2: R_MEP_PCREL24A2 symbol
+ eb6: 00 00 nop
+ eb6: R_MEP_8 symbol
+ eb7: R_MEP_16 symbol
+ eb8: 00 00 nop
+ eb9: R_MEP_32 symbol
+ eba: 00 00 nop
+.*
diff --git a/gas/testsuite/gas/mep/dj1.s b/gas/testsuite/gas/mep/dj1.s
new file mode 100644
index 0000000000..e281cb8fa9
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj1.s
@@ -0,0 +1,1306 @@
+
+ mov $0,$0
+ mov $1,$0
+ mov $2,$0
+ mov $3,$0
+ mov $4,$0
+ mov $5,$0
+ mov $6,$0
+ mov $7,$0
+ mov $8,$0
+ mov $9,$0
+ mov $10,$0
+ mov $11,$0
+ mov $12,$0
+ mov $13,$0
+ mov $14,$0
+ mov $15,$0
+
+ mov $fp,$0
+ mov $tp,$0
+ mov $gp,$0
+ mov $sp,$0
+
+
+ sb $0,($0)
+ sh $0,($0)
+ sw $0,($0)
+ lb $0,($0)
+ lh $0,($0)
+ lw $0,($0)
+ lbu $0,($0)
+ lhu $0,($0)
+ sb $15,($0)
+ sh $15,($0)
+ sw $15,($0)
+ lb $15,($0)
+ lh $15,($0)
+ lw $15,($0)
+ lbu $15,($0)
+ lhu $15,($0)
+ sb $0,($15)
+ sh $0,($15)
+ sw $0,($15)
+ lb $0,($15)
+ lh $0,($15)
+ lw $0,($15)
+ lbu $0,($15)
+ lhu $0,($15)
+ sb $15,($15)
+ sh $15,($15)
+ sw $15,($15)
+ lb $15,($15)
+ lh $15,($15)
+ lw $15,($15)
+ lbu $15,($15)
+ lhu $15,($15)
+
+ sw $0,0($sp)
+ lw $0,0($sp)
+ sw $15,0($sp)
+ lw $15,0($sp)
+ sw $0,124($sp)
+ lw $0,124($sp)
+ sw $15,124($sp)
+ lw $15,124($sp)
+ sw $0,0($15)
+ lw $0,0($15)
+ sw $15,0($15)
+ lw $15,0($15)
+ sw $0,124($15)
+ lw $0,124($15)
+ sw $15,124($15)
+ lw $15,124($15)
+
+ sb $0,0($tp)
+ lb $0,0($tp)
+ lbu $0,0($tp)
+ sb $7,0($tp)
+ lb $7,0($tp)
+ lbu $7,0($tp)
+ sb $0,127($tp)
+ lb $0,127($tp)
+ lbu $0,127($tp)
+ sb $7,127($tp)
+ lb $7,127($tp)
+ lbu $7,127($tp)
+ sb $0,%tpoff(symbol)($tp)
+ lb $0,%tpoff(symbol)($tp)
+ lbu $0,%tpoff(symbol)($tp)
+ sb $7,%tpoff(symbol)($tp)
+ lb $7,%tpoff(symbol)($tp)
+ lbu $7,%tpoff(symbol)($tp)
+ sb $0,0($13)
+ lb $0,0($13)
+ lbu $0,0($13)
+ sb $7,0($13)
+ lb $7,0($13)
+ lbu $7,0($13)
+ sb $0,127($13)
+ lb $0,127($13)
+ lbu $0,127($13)
+ sb $7,127($13)
+ lb $7,127($13)
+ lbu $7,127($13)
+ sb $0,%tpoff(symbol)($13)
+ lb $0,%tpoff(symbol)($13)
+ lbu $0,%tpoff(symbol)($13)
+ sb $7,%tpoff(symbol)($13)
+ lb $7,%tpoff(symbol)($13)
+ lbu $7,%tpoff(symbol)($13)
+
+ sh $0,0($tp)
+ lh $0,0($tp)
+ lhu $0,0($tp)
+ sh $7,0($tp)
+ lh $7,0($tp)
+ lhu $7,0($tp)
+ sh $0,126($tp)
+ lh $0,126($tp)
+ lhu $0,126($tp)
+ sh $7,126($tp)
+ lh $7,126($tp)
+ lhu $7,126($tp)
+ sh $0,%tpoff(symbol)($tp)
+ lh $0,%tpoff(symbol)($tp)
+ lhu $0,%tpoff(symbol)($tp)
+ sh $7,%tpoff(symbol)($tp)
+ lh $7,%tpoff(symbol)($tp)
+ lhu $7,%tpoff(symbol)($tp)
+ sh $0,0($13)
+ lh $0,0($13)
+ lhu $0,0($13)
+ sh $7,0($13)
+ lh $7,0($13)
+ lhu $7,0($13)
+ sh $0,126($13)
+ lh $0,126($13)
+ lhu $0,126($13)
+ sh $7,126($13)
+ lh $7,126($13)
+ lhu $7,126($13)
+ sh $0,%tpoff(symbol)($13)
+ lh $0,%tpoff(symbol)($13)
+ lhu $0,%tpoff(symbol)($13)
+ sh $7,%tpoff(symbol)($13)
+ lh $7,%tpoff(symbol)($13)
+ lhu $7,%tpoff(symbol)($13)
+
+ sw $0,0($tp)
+ lw $0,0($tp)
+ sw $7,0($tp)
+ lw $7,0($tp)
+ sw $0,124($tp)
+ lw $0,124($tp)
+ sw $7,124($tp)
+ lw $7,124($tp)
+ sw $0,%tpoff(symbol)($tp)
+ lw $0,%tpoff(symbol)($tp)
+ sw $7,%tpoff(symbol)($tp)
+ lw $7,%tpoff(symbol)($tp)
+ sw $0,0($13)
+ lw $0,0($13)
+ sw $7,0($13)
+ lw $7,0($13)
+ sw $0,124($13)
+ lw $0,124($13)
+ sw $7,124($13)
+ lw $7,124($13)
+ sw $0,%tpoff(symbol)($13)
+ lw $0,%tpoff(symbol)($13)
+ sw $7,%tpoff(symbol)($13)
+ lw $7,%tpoff(symbol)($13)
+
+ sb $0,-32768($0)
+ sh $0,-32768($0)
+ sw $0,-32768($0)
+ lb $0,-32768($0)
+ lh $0,-32768($0)
+ lw $0,-32768($0)
+ lbu $0,-32768($0)
+ lhu $0,-32768($0)
+ sb $15,-32768($0)
+ sh $15,-32768($0)
+ sw $15,-32768($0)
+ lb $15,-32768($0)
+ lh $15,-32768($0)
+ lw $15,-32768($0)
+ lbu $15,-32768($0)
+ lhu $15,-32768($0)
+ sb $0,32767($0)
+ sh $0,32767($0)
+ sw $0,32767($0)
+ lb $0,32767($0)
+ lh $0,32767($0)
+ lw $0,32767($0)
+ lbu $0,32767($0)
+ lhu $0,32767($0)
+ sb $15,32767($0)
+ sh $15,32767($0)
+ sw $15,32767($0)
+ lb $15,32767($0)
+ lh $15,32767($0)
+ lw $15,32767($0)
+ lbu $15,32767($0)
+ lhu $15,32767($0)
+ sb $0,%sdaoff(symbol)($0)
+ sh $0,%sdaoff(symbol)($0)
+ sw $0,%sdaoff(symbol)($0)
+ lb $0,%sdaoff(symbol)($0)
+ lh $0,%sdaoff(symbol)($0)
+ lw $0,%sdaoff(symbol)($0)
+ lbu $0,%sdaoff(symbol)($0)
+ lhu $0,%sdaoff(symbol)($0)
+ sb $15,%sdaoff(symbol)($0)
+ sh $15,%sdaoff(symbol)($0)
+ sw $15,%sdaoff(symbol)($0)
+ lb $15,%sdaoff(symbol)($0)
+ lh $15,%sdaoff(symbol)($0)
+ lw $15,%sdaoff(symbol)($0)
+ lbu $15,%sdaoff(symbol)($0)
+ lhu $15,%sdaoff(symbol)($0)
+ sb $0,-32768($0)
+ sh $0,-32768($0)
+ sw $0,-32768($0)
+ lb $0,-32768($0)
+ lh $0,-32768($0)
+ lw $0,-32768($0)
+ lbu $0,-32768($0)
+ lhu $0,-32768($0)
+ sb $15,-32768($0)
+ sh $15,-32768($0)
+ sw $15,-32768($0)
+ lb $15,-32768($0)
+ lh $15,-32768($0)
+ lw $15,-32768($0)
+ lbu $15,-32768($0)
+ lhu $15,-32768($0)
+ sb $0,32767($0)
+ sh $0,32767($0)
+ sw $0,32767($0)
+ lb $0,32767($0)
+ lh $0,32767($0)
+ lw $0,32767($0)
+ lbu $0,32767($0)
+ lhu $0,32767($0)
+ sb $15,32767($0)
+ sh $15,32767($0)
+ sw $15,32767($0)
+ lb $15,32767($0)
+ lh $15,32767($0)
+ lw $15,32767($0)
+ lbu $15,32767($0)
+ lhu $15,32767($0)
+ sb $0,%tpoff(symbol)($0)
+ sh $0,%tpoff(symbol)($0)
+ sw $0,%tpoff(symbol)($0)
+ lb $0,%tpoff(symbol)($0)
+ lh $0,%tpoff(symbol)($0)
+ lw $0,%tpoff(symbol)($0)
+ lbu $0,%tpoff(symbol)($0)
+ lhu $0,%tpoff(symbol)($0)
+ sb $15,%tpoff(symbol)($0)
+ sh $15,%tpoff(symbol)($0)
+ sw $15,%tpoff(symbol)($0)
+ lb $15,%tpoff(symbol)($0)
+ lh $15,%tpoff(symbol)($0)
+ lw $15,%tpoff(symbol)($0)
+ lbu $15,%tpoff(symbol)($0)
+ lhu $15,%tpoff(symbol)($0)
+ sb $0,-32768($15)
+ sh $0,-32768($15)
+ sw $0,-32768($15)
+ lb $0,-32768($15)
+ lh $0,-32768($15)
+ lw $0,-32768($15)
+ lbu $0,-32768($15)
+ lhu $0,-32768($15)
+ sb $15,-32768($15)
+ sh $15,-32768($15)
+ sw $15,-32768($15)
+ lb $15,-32768($15)
+ lh $15,-32768($15)
+ lw $15,-32768($15)
+ lbu $15,-32768($15)
+ lhu $15,-32768($15)
+ sb $0,32767($15)
+ sh $0,32767($15)
+ sw $0,32767($15)
+ lb $0,32767($15)
+ lh $0,32767($15)
+ lw $0,32767($15)
+ lbu $0,32767($15)
+ lhu $0,32767($15)
+ sb $15,32767($15)
+ sh $15,32767($15)
+ sw $15,32767($15)
+ lb $15,32767($15)
+ lh $15,32767($15)
+ lw $15,32767($15)
+ lbu $15,32767($15)
+ lhu $15,32767($15)
+ sb $0,%sdaoff(symbol)($15)
+ sh $0,%sdaoff(symbol)($15)
+ sw $0,%sdaoff(symbol)($15)
+ lb $0,%sdaoff(symbol)($15)
+ lh $0,%sdaoff(symbol)($15)
+ lw $0,%sdaoff(symbol)($15)
+ lbu $0,%sdaoff(symbol)($15)
+ lhu $0,%sdaoff(symbol)($15)
+ sb $15,%sdaoff(symbol)($15)
+ sh $15,%sdaoff(symbol)($15)
+ sw $15,%sdaoff(symbol)($15)
+ lb $15,%sdaoff(symbol)($15)
+ lh $15,%sdaoff(symbol)($15)
+ lw $15,%sdaoff(symbol)($15)
+ lbu $15,%sdaoff(symbol)($15)
+ lhu $15,%sdaoff(symbol)($15)
+ sb $0,-32768($15)
+ sh $0,-32768($15)
+ sw $0,-32768($15)
+ lb $0,-32768($15)
+ lh $0,-32768($15)
+ lw $0,-32768($15)
+ lbu $0,-32768($15)
+ lhu $0,-32768($15)
+ sb $15,-32768($15)
+ sh $15,-32768($15)
+ sw $15,-32768($15)
+ lb $15,-32768($15)
+ lh $15,-32768($15)
+ lw $15,-32768($15)
+ lbu $15,-32768($15)
+ lhu $15,-32768($15)
+ sb $0,32767($15)
+ sh $0,32767($15)
+ sw $0,32767($15)
+ lb $0,32767($15)
+ lh $0,32767($15)
+ lw $0,32767($15)
+ lbu $0,32767($15)
+ lhu $0,32767($15)
+ sb $15,32767($15)
+ sh $15,32767($15)
+ sw $15,32767($15)
+ lb $15,32767($15)
+ lh $15,32767($15)
+ lw $15,32767($15)
+ lbu $15,32767($15)
+ lhu $15,32767($15)
+ sb $0,%tpoff(symbol)($15)
+ sh $0,%tpoff(symbol)($15)
+ sw $0,%tpoff(symbol)($15)
+ lb $0,%tpoff(symbol)($15)
+ lh $0,%tpoff(symbol)($15)
+ lw $0,%tpoff(symbol)($15)
+ lbu $0,%tpoff(symbol)($15)
+ lhu $0,%tpoff(symbol)($15)
+ sb $15,%tpoff(symbol)($15)
+ sh $15,%tpoff(symbol)($15)
+ sw $15,%tpoff(symbol)($15)
+ lb $15,%tpoff(symbol)($15)
+ lh $15,%tpoff(symbol)($15)
+ lw $15,%tpoff(symbol)($15)
+ lbu $15,%tpoff(symbol)($15)
+ lhu $15,%tpoff(symbol)($15)
+
+ sw $0,(0)
+ lw $0,(0)
+ sw $15,(0)
+ lw $15,(0)
+ sw $0,(0xfffffc)
+ lw $0,(0xfffffc)
+ sw $15,(0xfffffc)
+ lw $15,(0xfffffc)
+ sw $0,(symbol)
+ lw $0,(symbol)
+ sw $15,(symbol)
+ lw $15,(symbol)
+
+
+ extb $0
+ extub $0
+ exth $0
+ extuh $0
+ extb $15
+ extub $15
+ exth $15
+ extuh $15
+
+
+ ssarb 0($0)
+ ssarb 3($0)
+ ssarb 0($15)
+ ssarb 3($15)
+
+
+ mov $0,$0
+ mov $15,$0
+ mov $0,$15
+ mov $15,$15
+ mov $0,-32768
+ mov $15,-32768
+ mov $0,-128
+ mov $15,-128
+ mov $0,0
+ mov $15,0
+ mov $0,127
+ mov $15,127
+ mov $0,32767
+ mov $15,32767
+
+ mov $0,%lo(symbol)
+ mov $0,%hi(symbol)
+ mov $0,%uhi(symbol)
+ mov $0,%sdaoff(symbol)
+ mov $0,%tpoff(symbol)
+
+ movu $0,0
+ movu $7,0
+ movu $0,0xffffff
+ movu $7,0xffffff
+ movu $0,%lo(symbol)
+ movu $7,%lo(symbol)
+ movu $0,symbol
+ movu $7,symbol
+
+ movu $0,0
+ movh $0,0
+ movu $15,0
+ movh $15,0
+ movu $0,0xffff
+ movh $0,0xffff
+ movu $15,0xffff
+ movh $15,0xffff
+
+ movu $0,%lo(symbol)
+ movh $0,%lo(symbol)
+ movu $15,%lo(symbol)
+ movh $15,%lo(symbol)
+ movu $0,%hi(symbol)
+ movh $0,%hi(symbol)
+ movu $15,%hi(symbol)
+ movh $15,%hi(symbol)
+ movu $0,%uhi(symbol)
+ movh $0,%uhi(symbol)
+ movu $15,%uhi(symbol)
+ movh $15,%uhi(symbol)
+ movu $0,%lo(0x12345678)
+ movh $0,%lo(0x12345678)
+ movu $15,%lo(0x12345678)
+ movh $15,%lo(0x12345678)
+ movu $0,%hi(0x12345678)
+ movh $0,%hi(0x12345678)
+ movu $15,%hi(0x12345678)
+ movh $15,%hi(0x12345678)
+ movu $0,%uhi(0x12345678)
+ movh $0,%uhi(0x12345678)
+ movu $15,%uhi(0x12345678)
+ movh $15,%uhi(0x12345678)
+
+
+ add3 $0,$0,$0
+ add3 $15,$0,$0
+ add3 $0,$15,$0
+ add3 $15,$15,$0
+ add3 $0,$0,$15
+ add3 $15,$0,$15
+ add3 $0,$15,$15
+ add3 $15,$15,$15
+
+ add $0,-16
+ add $15,-16
+ add $0,0
+ add $15,0
+ add $0,15
+ add $15,15
+
+ add3 $0,$sp,0
+ add3 $15,$sp,0
+ add3 $0,$sp,124
+ add3 $15,$sp,124
+ add3 $0,$sp,1
+ add3 $15,$sp,1
+
+ advck3 $0,$0,$0
+ sbvck3 $0,$0,$0
+ advck3 $0,$15,$0
+ sbvck3 $0,$15,$0
+ advck3 $0,$0,$15
+ sbvck3 $0,$0,$15
+ advck3 $0,$15,$15
+ sbvck3 $0,$15,$15
+
+ sub $0,$0
+ neg $0,$0
+ sub $15,$0
+ neg $15,$0
+ sub $0,$15
+ neg $0,$15
+ sub $15,$15
+ neg $15,$15
+
+ slt3 $0,$0,$0
+ sltu3 $0,$0,$0
+ sl1ad3 $0,$0,$0
+ sl2ad3 $0,$0,$0
+ slt3 $0,$15,$0
+ sltu3 $0,$15,$0
+ sl1ad3 $0,$15,$0
+ sl2ad3 $0,$15,$0
+ slt3 $0,$0,$15
+ sltu3 $0,$0,$15
+ sl1ad3 $0,$0,$15
+ sl2ad3 $0,$0,$15
+ slt3 $0,$15,$15
+ sltu3 $0,$15,$15
+ sl1ad3 $0,$15,$15
+ sl2ad3 $0,$15,$15
+
+ add3 $0,$0,-32768
+ add3 $15,$0,-32768
+ add3 $0,$15,-32768
+ add3 $15,$15,-32768
+ add3 $0,$0,32767
+ add3 $15,$0,32767
+ add3 $0,$15,32767
+ add3 $15,$15,32767
+ add3 $0,$0,%lo(symbol)
+ add3 $15,$0,%lo(symbol)
+ add3 $0,$15,%lo(symbol)
+ add3 $15,$15,%lo(symbol)
+
+ slt3 $0,$0,0
+ sltu3 $0,$0,0
+ slt3 $0,$15,0
+ sltu3 $0,$15,0
+ slt3 $0,$0,31
+ sltu3 $0,$0,31
+ slt3 $0,$15,31
+ sltu3 $0,$15,31
+
+
+ or $0,$0
+ and $0,$0
+ xor $0,$0
+ nor $0,$0
+ or $15,$0
+ and $15,$0
+ xor $15,$0
+ nor $15,$0
+ or $0,$15
+ and $0,$15
+ xor $0,$15
+ nor $0,$15
+ or $15,$15
+ and $15,$15
+ xor $15,$15
+ nor $15,$15
+
+ or3 $0,$0,0
+ and3 $0,$0,0
+ xor3 $0,$0,0
+ or3 $15,$0,0
+ and3 $15,$0,0
+ xor3 $15,$0,0
+ or3 $0,$15,0
+ and3 $0,$15,0
+ xor3 $0,$15,0
+ or3 $15,$15,0
+ and3 $15,$15,0
+ xor3 $15,$15,0
+ or3 $0,$0,65535
+ and3 $0,$0,65535
+ xor3 $0,$0,65535
+ or3 $15,$0,65535
+ and3 $15,$0,65535
+ xor3 $15,$0,65535
+ or3 $0,$15,65535
+ and3 $0,$15,65535
+ xor3 $0,$15,65535
+ or3 $15,$15,65535
+ and3 $15,$15,65535
+ xor3 $15,$15,65535
+ or3 $0,$0,%lo(symbol)
+ and3 $0,$0,%lo(symbol)
+ xor3 $0,$0,%lo(symbol)
+ or3 $15,$0,%lo(symbol)
+ and3 $15,$0,%lo(symbol)
+ xor3 $15,$0,%lo(symbol)
+ or3 $0,$15,%lo(symbol)
+ and3 $0,$15,%lo(symbol)
+ xor3 $0,$15,%lo(symbol)
+ or3 $15,$15,%lo(symbol)
+ and3 $15,$15,%lo(symbol)
+ xor3 $15,$15,%lo(symbol)
+
+
+ sra $0,$0
+ srl $0,$0
+ sll $0,$0
+ fsft $0,$0
+ sra $15,$0
+ srl $15,$0
+ sll $15,$0
+ fsft $15,$0
+ sra $0,$15
+ srl $0,$15
+ sll $0,$15
+ fsft $0,$15
+ sra $15,$15
+ srl $15,$15
+ sll $15,$15
+ fsft $15,$15
+
+ sra $0,0
+ srl $0,0
+ sll $0,0
+ sra $15,0
+ srl $15,0
+ sll $15,0
+ sra $0,31
+ srl $0,31
+ sll $0,31
+ sra $15,31
+ srl $15,31
+ sll $15,31
+
+ sll3 $0,$0,0
+ sll3 $0,$15,0
+ sll3 $0,$0,31
+ sll3 $0,$15,31
+
+
+ bra .-2048+2
+ bra .+2046+2
+ bra symbol
+
+ beqz $0,.-128+2
+ bnez $0,.-128+2
+ beqz $15,.-128+2
+ bnez $15,.-128+2
+ beqz $0,.+126+2
+ bnez $0,.+126+2
+ beqz $15,.+126+2
+ bnez $15,.+126+2
+ beqz $0,symbol
+ bnez $0,symbol
+ beqz $15,symbol
+ bnez $15,symbol
+
+ beqi $0,0,.-65536+4
+ bnei $0,0,.-65536+4
+ blti $0,0,.-65536+4
+ bgei $0,0,.-65536+4
+ beqi $15,0,.-65536+4
+ bnei $15,0,.-65536+4
+ blti $15,0,.-65536+4
+ bgei $15,0,.-65536+4
+ beqi $0,15,.-65536+4
+ bnei $0,15,.-65536+4
+ blti $0,15,.-65536+4
+ bgei $0,15,.-65536+4
+ beqi $15,15,.-65536+4
+ bnei $15,15,.-65536+4
+ blti $15,15,.-65536+4
+ bgei $15,15,.-65536+4
+ beqi $0,0,.+32763+4
+ bnei $0,0,.+32763+4
+ blti $0,0,.+32763+4
+ bgei $0,0,.+32763+4
+ beqi $15,0,.+32763+4
+ bnei $15,0,.+32763+4
+ blti $15,0,.+32763+4
+ bgei $15,0,.+32763+4
+ beqi $0,15,.+32763+4
+ bnei $0,15,.+32763+4
+ blti $0,15,.+32763+4
+ bgei $0,15,.+32763+4
+ beqi $15,15,.+32763+4
+ bnei $15,15,.+32763+4
+ blti $15,15,.+32763+4
+ bgei $15,15,.+32763+4
+ beqi $0,0,symbol
+ bnei $0,0,symbol
+ blti $0,0,symbol
+ bgei $0,0,symbol
+ beqi $15,0,symbol
+ bnei $15,0,symbol
+ blti $15,0,symbol
+ bgei $15,0,symbol
+ beqi $0,15,symbol
+ bnei $0,15,symbol
+ blti $0,15,symbol
+ bgei $0,15,symbol
+ beqi $15,15,symbol
+ bnei $15,15,symbol
+ blti $15,15,symbol
+ bgei $15,15,symbol
+
+ beq $0,$0,.-65536+4
+ bne $0,$0,.-65536+4
+ beq $15,$0,.-65536+4
+ bne $15,$0,.-65536+4
+ beq $0,$15,.-65536+4
+ bne $0,$15,.-65536+4
+ beq $15,$15,.-65536+4
+ bne $15,$15,.-65536+4
+ beq $0,$0,.+32763+4
+ bne $0,$0,.+32763+4
+ beq $15,$0,.+32763+4
+ bne $15,$0,.+32763+4
+ beq $0,$15,.+32763+4
+ bne $0,$15,.+32763+4
+ beq $15,$15,.+32763+4
+ bne $15,$15,.+32763+4
+ beq $0,$0,symbol
+ bne $0,$0,symbol
+ beq $15,$0,symbol
+ bne $15,$0,symbol
+ beq $0,$15,symbol
+ bne $0,$15,symbol
+ beq $15,$15,symbol
+ bne $15,$15,symbol
+
+ bsr .-0x800000+4
+ bsr .-2048+2
+ bsr .+2046+2
+ bsr .+0x7ffffe+4
+ bsr symbol
+
+ jmp $0
+ jmp $15
+ jmp 0
+ jmp 0xfffffe
+ jmp symbol
+
+ jsr $0
+ jsr $15
+
+ ret
+
+ repeat $0,.-65536+4
+ repeat $15,.-65536+4
+ repeat $0,.+32763+4
+ repeat $15,.+32763+4
+ repeat $0,symbol
+ repeat $15,symbol
+
+ erepeat .-65536+4
+ erepeat .+32763+4
+ erepeat symbol
+
+
+ stc $0,$pc
+ ldc $0,$pc
+ stc $15,$pc
+ ldc $15,$pc
+ stc $0,$lp
+ ldc $0,$lp
+ stc $15,$lp
+ ldc $15,$lp
+ stc $0,$sar
+ ldc $0,$sar
+ stc $15,$sar
+ ldc $15,$sar
+ stc $0,$rpb
+ ldc $0,$rpb
+ stc $15,$rpb
+ ldc $15,$rpb
+ stc $0,$rpe
+ ldc $0,$rpe
+ stc $15,$rpe
+ ldc $15,$rpe
+ stc $0,$rpc
+ ldc $0,$rpc
+ stc $15,$rpc
+ ldc $15,$rpc
+ stc $0,$hi
+ ldc $0,$hi
+ stc $15,$hi
+ ldc $15,$hi
+ stc $0,$lo
+ ldc $0,$lo
+ stc $15,$lo
+ ldc $15,$lo
+ stc $0,$mb0
+ ldc $0,$mb0
+ stc $15,$mb0
+ ldc $15,$mb0
+ stc $0,$me0
+ ldc $0,$me0
+ stc $15,$me0
+ ldc $15,$me0
+ stc $0,$mb1
+ ldc $0,$mb1
+ stc $15,$mb1
+ ldc $15,$mb1
+ stc $0,$me1
+ ldc $0,$me1
+ stc $15,$me1
+ ldc $15,$me1
+
+ stc $0,$psw
+ ldc $0,$psw
+ stc $15,$psw
+ ldc $15,$psw
+ stc $0,$id
+ ldc $0,$id
+ stc $15,$id
+ ldc $15,$id
+ stc $0,$tmp
+ ldc $0,$tmp
+ stc $15,$tmp
+ ldc $15,$tmp
+ stc $0,$epc
+ ldc $0,$epc
+ stc $15,$epc
+ ldc $15,$epc
+ stc $0,$exc
+ ldc $0,$exc
+ stc $15,$exc
+ ldc $15,$exc
+ stc $0,$cfg
+ ldc $0,$cfg
+ stc $15,$cfg
+ ldc $15,$cfg
+ stc $0,$npc
+ ldc $0,$npc
+ stc $15,$npc
+ ldc $15,$npc
+ stc $0,$dbg
+ ldc $0,$dbg
+ stc $15,$dbg
+ ldc $15,$dbg
+ stc $0,$depc
+ ldc $0,$depc
+ stc $15,$depc
+ ldc $15,$depc
+ stc $0,$opt
+ ldc $0,$opt
+ stc $15,$opt
+ ldc $15,$opt
+ stc $0,$rcfg
+ ldc $0,$rcfg
+ stc $15,$rcfg
+ ldc $15,$rcfg
+ stc $0,$ccfg
+ ldc $0,$ccfg
+ stc $15,$ccfg
+ ldc $15,$ccfg
+
+ di
+ ei
+ reti
+ halt
+ break
+ syncm
+
+ swi 0
+ swi 3
+
+ stcb $0,0
+ ldcb $0,0
+ stcb $15,0
+ ldcb $15,0
+ stcb $0,65535
+ ldcb $0,65535
+ stcb $15,65535
+ ldcb $15,65535
+ stcb $0,symbol
+ ldcb $0,symbol
+ stcb $15,symbol
+ ldcb $15,symbol
+
+
+ bsetm ($0),0
+ bclrm ($0),0
+ bnotm ($0),0
+ bsetm ($15),0
+ bclrm ($15),0
+ bnotm ($15),0
+ bsetm ($0),7
+ bclrm ($0),7
+ bnotm ($0),7
+ bsetm ($15),7
+ bclrm ($15),7
+ bnotm ($15),7
+
+ btstm $0,($0),0
+ btstm $0,($15),0
+ btstm $0,($0),7
+ btstm $0,($15),7
+
+ tas $0,($0)
+ tas $15,($0)
+ tas $0,($15)
+ tas $15,($15)
+
+
+ cache 0,($0)
+ cache 3,($0)
+ cache 0,($15)
+ cache 3,($15)
+
+ mul $0,$0
+ madd $0,$0
+ mulr $0,$0
+ maddr $0,$0
+ mulu $0,$0
+ maddu $0,$0
+ mulru $0,$0
+ maddru $0,$0
+ mul $15,$0
+ madd $15,$0
+ mulr $15,$0
+ maddr $15,$0
+ mulu $15,$0
+ maddu $15,$0
+ mulru $15,$0
+ maddru $15,$0
+ mul $0,$15
+ madd $0,$15
+ mulr $0,$15
+ maddr $0,$15
+ mulu $0,$15
+ maddu $0,$15
+ mulru $0,$15
+ maddru $0,$15
+ mul $15,$15
+ madd $15,$15
+ mulr $15,$15
+ maddr $15,$15
+ mulu $15,$15
+ maddu $15,$15
+ mulru $15,$15
+ maddru $15,$15
+
+ div $0,$0
+ divu $0,$0
+ div $15,$0
+ divu $15,$0
+ div $0,$15
+ divu $0,$15
+ div $15,$15
+ divu $15,$15
+
+ dret
+ dbreak
+
+ ldz $0,$0
+ abs $0,$0
+ ave $0,$0
+ ldz $15,$0
+ abs $15,$0
+ ave $15,$0
+ ldz $0,$15
+ abs $0,$15
+ ave $0,$15
+ ldz $15,$15
+ abs $15,$15
+ ave $15,$15
+
+ min $0,$0
+ max $0,$0
+ minu $0,$0
+ maxu $0,$0
+ min $15,$0
+ max $15,$0
+ minu $15,$0
+ maxu $15,$0
+ min $0,$15
+ max $0,$15
+ minu $0,$15
+ maxu $0,$15
+ min $15,$15
+ max $15,$15
+ minu $15,$15
+ maxu $15,$15
+
+ clip $0,0
+ clipu $0,0
+ clip $15,0
+ clipu $15,0
+ clip $0,31
+ clipu $0,31
+ clip $15,31
+ clipu $15,31
+
+ sadd $0,$0
+ ssub $0,$0
+ saddu $0,$0
+ ssubu $0,$0
+ sadd $15,$0
+ ssub $15,$0
+ saddu $15,$0
+ ssubu $15,$0
+ sadd $0,$15
+ ssub $0,$15
+ saddu $0,$15
+ ssubu $0,$15
+ sadd $15,$15
+ ssub $15,$15
+ saddu $15,$15
+ ssubu $15,$15
+
+ swcp $c0,($0)
+ lwcp $c0,($0)
+ smcp $c0,($0)
+ lmcp $c0,($0)
+ swcp $c15,($0)
+ lwcp $c15,($0)
+ smcp $c15,($0)
+ lmcp $c15,($0)
+ swcp $c0,($15)
+ lwcp $c0,($15)
+ smcp $c0,($15)
+ lmcp $c0,($15)
+ swcp $c15,($15)
+ lwcp $c15,($15)
+ smcp $c15,($15)
+ lmcp $c15,($15)
+
+ swcpi $c0,($0+)
+ lwcpi $c0,($0+)
+ smcpi $c0,($0+)
+ lmcpi $c0,($0+)
+ swcpi $c15,($0+)
+ lwcpi $c15,($0+)
+ smcpi $c15,($0+)
+ lmcpi $c15,($0+)
+ swcpi $c0,($15+)
+ lwcpi $c0,($15+)
+ smcpi $c0,($15+)
+ lmcpi $c0,($15+)
+ swcpi $c15,($15+)
+ lwcpi $c15,($15+)
+ smcpi $c15,($15+)
+ lmcpi $c15,($15+)
+
+ sbcpa $c0,($0+),-128
+ lbcpa $c0,($0+),-128
+ sbcpm0 $c0,($0+),-128
+ lbcpm0 $c0,($0+),-128
+ sbcpm1 $c0,($0+),-128
+ lbcpm1 $c0,($0+),-128
+ sbcpa $c15,($0+),-128
+ lbcpa $c15,($0+),-128
+ sbcpm0 $c15,($0+),-128
+ lbcpm0 $c15,($0+),-128
+ sbcpm1 $c15,($0+),-128
+ lbcpm1 $c15,($0+),-128
+ sbcpa $c0,($15+),-128
+ lbcpa $c0,($15+),-128
+ sbcpm0 $c0,($15+),-128
+ lbcpm0 $c0,($15+),-128
+ sbcpm1 $c0,($15+),-128
+ lbcpm1 $c0,($15+),-128
+ sbcpa $c15,($15+),-128
+ lbcpa $c15,($15+),-128
+ sbcpm0 $c15,($15+),-128
+ lbcpm0 $c15,($15+),-128
+ sbcpm1 $c15,($15+),-128
+ lbcpm1 $c15,($15+),-128
+ sbcpa $c0,($0+),127
+ lbcpa $c0,($0+),127
+ sbcpm0 $c0,($0+),127
+ lbcpm0 $c0,($0+),127
+ sbcpm1 $c0,($0+),127
+ lbcpm1 $c0,($0+),127
+ sbcpa $c15,($0+),127
+ lbcpa $c15,($0+),127
+ sbcpm0 $c15,($0+),127
+ lbcpm0 $c15,($0+),127
+ sbcpm1 $c15,($0+),127
+ lbcpm1 $c15,($0+),127
+ sbcpa $c0,($15+),127
+ lbcpa $c0,($15+),127
+ sbcpm0 $c0,($15+),127
+ lbcpm0 $c0,($15+),127
+ sbcpm1 $c0,($15+),127
+ lbcpm1 $c0,($15+),127
+ sbcpa $c15,($15+),127
+ lbcpa $c15,($15+),127
+ sbcpm0 $c15,($15+),127
+ lbcpm0 $c15,($15+),127
+ sbcpm1 $c15,($15+),127
+ lbcpm1 $c15,($15+),127
+
+ shcpa $c0,($0+),-128
+ lhcpa $c0,($0+),-128
+ shcpm0 $c0,($0+),-128
+ lhcpm0 $c0,($0+),-128
+ shcpm1 $c0,($0+),-128
+ lhcpm1 $c0,($0+),-128
+ shcpa $c15,($0+),-128
+ lhcpa $c15,($0+),-128
+ shcpm0 $c15,($0+),-128
+ lhcpm0 $c15,($0+),-128
+ shcpm1 $c15,($0+),-128
+ lhcpm1 $c15,($0+),-128
+ shcpa $c0,($15+),-128
+ lhcpa $c0,($15+),-128
+ shcpm0 $c0,($15+),-128
+ lhcpm0 $c0,($15+),-128
+ shcpm1 $c0,($15+),-128
+ lhcpm1 $c0,($15+),-128
+ shcpa $c15,($15+),-128
+ lhcpa $c15,($15+),-128
+ shcpm0 $c15,($15+),-128
+ lhcpm0 $c15,($15+),-128
+ shcpm1 $c15,($15+),-128
+ lhcpm1 $c15,($15+),-128
+ shcpa $c0,($0+),126
+ lhcpa $c0,($0+),126
+ shcpm0 $c0,($0+),126
+ lhcpm0 $c0,($0+),126
+ shcpm1 $c0,($0+),126
+ lhcpm1 $c0,($0+),126
+ shcpa $c15,($0+),126
+ lhcpa $c15,($0+),126
+ shcpm0 $c15,($0+),126
+ lhcpm0 $c15,($0+),126
+ shcpm1 $c15,($0+),126
+ lhcpm1 $c15,($0+),126
+ shcpa $c0,($15+),126
+ lhcpa $c0,($15+),126
+ shcpm0 $c0,($15+),126
+ lhcpm0 $c0,($15+),126
+ shcpm1 $c0,($15+),126
+ lhcpm1 $c0,($15+),126
+ shcpa $c15,($15+),126
+ lhcpa $c15,($15+),126
+ shcpm0 $c15,($15+),126
+ lhcpm0 $c15,($15+),126
+ shcpm1 $c15,($15+),126
+ lhcpm1 $c15,($15+),126
+
+ swcpa $c0,($0+),-128
+ lwcpa $c0,($0+),-128
+ swcpm0 $c0,($0+),-128
+ lwcpm0 $c0,($0+),-128
+ swcpm1 $c0,($0+),-128
+ lwcpm1 $c0,($0+),-128
+ swcpa $c15,($0+),-128
+ lwcpa $c15,($0+),-128
+ swcpm0 $c15,($0+),-128
+ lwcpm0 $c15,($0+),-128
+ swcpm1 $c15,($0+),-128
+ lwcpm1 $c15,($0+),-128
+ swcpa $c0,($15+),-128
+ lwcpa $c0,($15+),-128
+ swcpm0 $c0,($15+),-128
+ lwcpm0 $c0,($15+),-128
+ swcpm1 $c0,($15+),-128
+ lwcpm1 $c0,($15+),-128
+ swcpa $c15,($15+),-128
+ lwcpa $c15,($15+),-128
+ swcpm0 $c15,($15+),-128
+ lwcpm0 $c15,($15+),-128
+ swcpm1 $c15,($15+),-128
+ lwcpm1 $c15,($15+),-128
+ swcpa $c0,($0+),124
+ lwcpa $c0,($0+),124
+ swcpm0 $c0,($0+),124
+ lwcpm0 $c0,($0+),124
+ swcpm1 $c0,($0+),124
+ lwcpm1 $c0,($0+),124
+ swcpa $c15,($0+),124
+ lwcpa $c15,($0+),124
+ swcpm0 $c15,($0+),124
+ lwcpm0 $c15,($0+),124
+ swcpm1 $c15,($0+),124
+ lwcpm1 $c15,($0+),124
+ swcpa $c0,($15+),124
+ lwcpa $c0,($15+),124
+ swcpm0 $c0,($15+),124
+ lwcpm0 $c0,($15+),124
+ swcpm1 $c0,($15+),124
+ lwcpm1 $c0,($15+),124
+ swcpa $c15,($15+),124
+ lwcpa $c15,($15+),124
+ swcpm0 $c15,($15+),124
+ lwcpm0 $c15,($15+),124
+ swcpm1 $c15,($15+),124
+ lwcpm1 $c15,($15+),124
+
+ smcpa $c0,($0+),-128
+ lmcpa $c0,($0+),-128
+ smcpm0 $c0,($0+),-128
+ lmcpm0 $c0,($0+),-128
+ smcpm1 $c0,($0+),-128
+ lmcpm1 $c0,($0+),-128
+ smcpa $c15,($0+),-128
+ lmcpa $c15,($0+),-128
+ smcpm0 $c15,($0+),-128
+ lmcpm0 $c15,($0+),-128
+ smcpm1 $c15,($0+),-128
+ lmcpm1 $c15,($0+),-128
+ smcpa $c0,($15+),-128
+ lmcpa $c0,($15+),-128
+ smcpm0 $c0,($15+),-128
+ lmcpm0 $c0,($15+),-128
+ smcpm1 $c0,($15+),-128
+ lmcpm1 $c0,($15+),-128
+ smcpa $c15,($15+),-128
+ lmcpa $c15,($15+),-128
+ smcpm0 $c15,($15+),-128
+ lmcpm0 $c15,($15+),-128
+ smcpm1 $c15,($15+),-128
+ lmcpm1 $c15,($15+),-128
+ smcpa $c0,($0+),120
+ lmcpa $c0,($0+),120
+ smcpm0 $c0,($0+),120
+ lmcpm0 $c0,($0+),120
+ smcpm1 $c0,($0+),120
+ lmcpm1 $c0,($0+),120
+ smcpa $c15,($0+),120
+ lmcpa $c15,($0+),120
+ smcpm0 $c15,($0+),120
+ lmcpm0 $c15,($0+),120
+ smcpm1 $c15,($0+),120
+ lmcpm1 $c15,($0+),120
+ smcpa $c0,($15+),120
+ lmcpa $c0,($15+),120
+ smcpm0 $c0,($15+),120
+ lmcpm0 $c0,($15+),120
+ smcpm1 $c0,($15+),120
+ lmcpm1 $c0,($15+),120
+ smcpa $c15,($15+),120
+ lmcpa $c15,($15+),120
+ smcpm0 $c15,($15+),120
+ lmcpm0 $c15,($15+),120
+ smcpm1 $c15,($15+),120
+ lmcpm1 $c15,($15+),120
+
+/*
+ cmov $c0,$0
+ cmov $c15,$0
+ cmov $c0,$15
+ cmov $c15,$15
+
+ cmov $0,$c0
+ cmov $15,$c0
+ cmov $0,$c15
+ cmov $15,$c15
+
+ cmovc $ccr0,$0
+ cmovc $ccr15,$0
+ cmovc $ccr0,$15
+ cmovc $ccr15,$15
+
+ cmovc $0,$ccr0
+ cmovc $15,$ccr0
+ cmovc $0,$ccr15
+ cmovc $15,$ccr15
+
+ cmovh $c0,$0
+ cmovh $c15,$0
+ cmovh $c0,$15
+ cmovh $c15,$15
+
+ cmovh $0,$c0
+ cmovh $15,$c0
+ cmovh $0,$c15
+ cmovh $15,$c15
+*/
+ bcpeq 0,.-65536+4
+ bcpne 0,.-65536+4
+ bcpat 0,.-65536+4
+ bcpaf 0,.-65536+4
+ bcpeq 15,.-65536+4
+ bcpne 15,.-65536+4
+ bcpat 15,.-65536+4
+ bcpaf 15,.-65536+4
+ bcpeq 0,.+32763+4
+ bcpne 0,.+32763+4
+ bcpat 0,.+32763+4
+ bcpaf 0,.+32763+4
+ bcpeq 15,.+32763+4
+ bcpne 15,.+32763+4
+ bcpat 15,.+32763+4
+ bcpaf 15,.+32763+4
+ bcpeq 0,symbol
+ bcpne 0,symbol
+ bcpat 0,symbol
+ bcpaf 0,symbol
+ bcpeq 15,symbol
+ bcpne 15,symbol
+ bcpat 15,symbol
+ bcpaf 15,symbol
+
+ synccp
+
+ jsrv $0
+ jsrv $15
+
+ bsrv .+4-0x800000
+ bsrv .+4+0x7ffffb
+ bsrv symbol
+
+
+ .byte symbol
+ .short symbol
+ .long symbol
+
+
diff --git a/gas/testsuite/gas/mep/dj2.d b/gas/testsuite/gas/mep/dj2.d
new file mode 100644
index 0000000000..9634cf4c43
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj2.d
@@ -0,0 +1,11 @@
+#as:
+#objdump: -dr
+#name: dj2
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 07 88 sb \$7,\(\$8\)
+ 2: 05 98 sb \$5,\(\$9\)
diff --git a/gas/testsuite/gas/mep/dj2.le.d b/gas/testsuite/gas/mep/dj2.le.d
new file mode 100644
index 0000000000..1c1053c51a
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj2.le.d
@@ -0,0 +1,12 @@
+#as: -EL
+#objdump: -dr
+#source: dj2.s
+#name: dj2.le
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 88 07 sb \$7,\(\$8\)
+ 2: 98 05 sb \$5,\(\$9\)
diff --git a/gas/testsuite/gas/mep/dj2.s b/gas/testsuite/gas/mep/dj2.s
new file mode 100644
index 0000000000..4eabf82b0f
--- /dev/null
+++ b/gas/testsuite/gas/mep/dj2.s
@@ -0,0 +1,5 @@
+
+ .text
+ sb $7,($fp)
+ sb $5,($9)
+
diff --git a/gas/testsuite/gas/mep/relocs-bad3.s b/gas/testsuite/gas/mep/relocs-bad3.s
new file mode 100644
index 0000000000..1e80a6b0dd
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-bad3.s
@@ -0,0 +1,15 @@
+ .global main
+
+test:
+ mov $0,0
+
+# negative test from case 106708
+
+L1:
+ mov $1,1
+ mov $1,((L1 & 0x00007fff) | 0x00008000)
+ ret
+ mov $0,0
+main:
+ mov $0,0
+ ret
diff --git a/gas/testsuite/gas/mep/relocs-junk1.s b/gas/testsuite/gas/mep/relocs-junk1.s
new file mode 100644
index 0000000000..6e9c6c2be0
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-junk1.s
@@ -0,0 +1,8 @@
+junk1:
+ nop
+ nop
+ nop
+ nop
+ nop
+ .data
+foodata: .word 42
diff --git a/gas/testsuite/gas/mep/relocs-junk2.s b/gas/testsuite/gas/mep/relocs-junk2.s
new file mode 100644
index 0000000000..361ad6ec7c
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-junk2.s
@@ -0,0 +1,7 @@
+junk2:
+ nop
+ nop
+ nop
+ nop
+ nop
+ \ No newline at end of file
diff --git a/gas/testsuite/gas/mep/relocs-refs.s b/gas/testsuite/gas/mep/relocs-refs.s
new file mode 100644
index 0000000000..43dc77ee64
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-refs.s
@@ -0,0 +1,55 @@
+
+ .global main
+ .global foo
+ .global bar
+main:
+ nop
+ nop
+ lb $5, foo($3)
+ bsr foo
+ repeat $5, foo
+
+ nop
+ nop
+ lb $5, (-foo & 0xffff)($3)
+ bsr -foo
+ repeat $5, -foo
+
+ nop
+ nop
+ lb $5, (foo + bar)($3)
+ bsr (foo + bar)
+ repeat $5, (foo + bar)
+
+ jmp (foo << 3)
+ jmp (foo >> 3)
+ jmp (foo - bar) & 0x7fffff
+ jmp (foo - main) & 0x7fffff
+ jmp (.text - foo) & 0x7fffff
+ jmp (.data - foo) & 0x7fffff
+ jmp (foo - %sizeof(.text))
+ jmp (foo * 7)
+ jmp (foo / 7)
+ jmp (foo % 7)
+ jmp (foo ^ bar)
+ jmp (foo | bar)
+ jmp (foo & bar)
+ jmp (foo == bar) << 5
+ jmp (foo < bar) << 5
+ jmp (foo <= bar) << 5
+ jmp (foo > bar) << 5
+ jmp (foo >= bar) << 5
+ # jmp (foo != bar) # FIXME this appears to not work atm.
+ jmp (foo && bar) << 5
+ jmp (foo || bar) << 5
+
+ nop
+ nop
+ nop
+ nop
+
+ jmp %sizeof(.data) >> (((main ^ (bar + 0xf)) - ((foo | .text) << 2)) / 3)
+
+ nop
+ nop
+ nop
diff --git a/gas/testsuite/gas/mep/relocs-syms.s b/gas/testsuite/gas/mep/relocs-syms.s
new file mode 100644
index 0000000000..508efaf103
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs-syms.s
@@ -0,0 +1,18 @@
+ .global foo
+ .global bar
+ nop
+ nop
+ nop
+ nop
+foo:
+ nop
+ nop
+ nop
+ nop
+bar:
+ nop
+ nop
+ nop
+ nop
+ nop
+ \ No newline at end of file
diff --git a/gas/testsuite/gas/mep/relocs.d b/gas/testsuite/gas/mep/relocs.d
new file mode 100644
index 0000000000..602545a316
--- /dev/null
+++ b/gas/testsuite/gas/mep/relocs.d
@@ -0,0 +1,98 @@
+
+relocs.x: file format elf32-mep
+
+Contents of section .text:
+ 1000 00000000 00000000 00000000 00000000 ................
+ 1010 00000000 00000000 00000000 00000000 ................
+ 1020 00000000 00000000 00000000 00000000 ................
+ 1030 0000c53c 1012dee9 ffffe509 ffec0000 ...<............
+ 1040 0000c53c efeedd49 ffdfe509 efd20000 ...<...I........
+ 1050 0000c53c 202cdeb9 000fe509 07e9dc88 ...< ,..........
+ 1060 0080d818 0002dfc8 7fffdf28 7fffdf78 ...........\(...x
+ 1070 7fffdd98 0001da98 000fdbf8 0070da58 .............p.X
+ 1080 0002d828 0000d848 0000d8d8 0010d898 ...\(...H........
+ 1090 0010d808 0000d908 0000d908 0000d808 ................
+ 10a0 0000d808 0000d908 0000d908 00000000 ................
+ 10b0 00000000 0000d808 00000000 00000000 ................
+Contents of section .rostacktab:
+ 10c0 001ffff0 ....
+Contents of section .data:
+ 11c4 0000002a ...*
+Disassembly of section .text:
+
+00001000 <junk1>:
+ 1000: 00 00 nop
+ 1002: 00 00 nop
+ 1004: 00 00 nop
+ 1006: 00 00 nop
+ 1008: 00 00 nop
+ 100a: 00 00 nop
+ 100c: 00 00 nop
+ 100e: 00 00 nop
+ 1010: 00 00 nop
+
+00001012 <foo>:
+ 1012: 00 00 nop
+ 1014: 00 00 nop
+ 1016: 00 00 nop
+ 1018: 00 00 nop
+
+0000101a <bar>:
+ 101a: 00 00 nop
+ 101c: 00 00 nop
+ 101e: 00 00 nop
+ 1020: 00 00 nop
+ 1022: 00 00 nop
+
+00001024 <junk2>:
+ 1024: 00 00 nop
+ 1026: 00 00 nop
+ 1028: 00 00 nop
+ 102a: 00 00 nop
+ 102c: 00 00 nop
+
+0000102e <main>:
+ 102e: 00 00 nop
+ 1030: 00 00 nop
+ 1032: c5 3c 10 12 lb \$5,4114\(\$3\)
+ 1036: de e9 ff ff bsr 1012 <&:s3:foo:s3:bar>
+ 103a: e5 09 ff ec repeat \$5,1012 <&:s3:foo:s3:bar>
+ 103e: 00 00 nop
+ 1040: 00 00 nop
+ 1042: c5 3c ef ee lb \$5,-4114\(\$3\)
+ 1046: dd 49 ff df bsr ffffefee <0-:s3:foo>
+ 104a: e5 09 ef d2 repeat \$5,ffffefee <0-:s3:foo>
+ 104e: 00 00 nop
+ 1050: 00 00 nop
+ 1052: c5 3c 20 2c lb \$5,8236\(\$3\)
+ 1056: de b9 00 0f bsr 202c <\+:s3:foo:s3:bar>
+ 105a: e5 09 07 e9 repeat \$5,202c <\+:s3:foo:s3:bar>
+ 105e: dc 88 00 80 jmp 8090 <<<:s3:foo:#00000003>
+ 1062: d8 18 00 02 jmp 202 <>>:s3:foo:#00000003>
+ 1066: df c8 7f ff jmp 7ffff8 <&:-:s3:foo:s3:bar:#007fffff>
+ 106a: df 28 7f ff jmp 7fffe4 <&:-:s3:foo:s4:main:#007fffff>
+ 106e: df 78 7f ff jmp 7fffee <&:-:S5:.text:s3:foo:#007fffff>
+ 1072: dd 98 00 01 jmp 1b2 <&:-:S5:.data:s3:foo:#007fffff>
+ 1076: da 98 00 0f jmp f52 <-:s3:foo:\+:s9:.text.end:0-:S5:.text>
+ 107a: db f8 00 70 jmp 707e <\*:s3:foo:#00000007>
+ 107e: da 58 00 02 jmp 24a <>>:s3:foo:#00000003\+0x48>
+ 1082: d8 28 00 00 jmp 4 <__assert_based_size\+0x3>
+ 1086: d8 48 00 00 jmp 8 <\^:s3:foo:s3:bar>
+ 108a: d8 d8 00 10 jmp 101a <|:s3:foo:s3:bar>
+ 108e: d8 98 00 10 jmp 1012 <&:s3:foo:s3:bar>
+ 1092: d8 08 00 00 jmp 0 <<<:==:s3:foo:s3:bar:#00000005>
+ 1096: d9 08 00 00 jmp 20 <<<:&&:s3:foo:s3:bar:#00000005>
+ 109a: d9 08 00 00 jmp 20 <<<:&&:s3:foo:s3:bar:#00000005>
+ 109e: d8 08 00 00 jmp 0 <<<:==:s3:foo:s3:bar:#00000005>
+ 10a2: d8 08 00 00 jmp 0 <<<:==:s3:foo:s3:bar:#00000005>
+ 10a6: d9 08 00 00 jmp 20 <<<:&&:s3:foo:s3:bar:#00000005>
+ 10aa: d9 08 00 00 jmp 20 <<<:&&:s3:foo:s3:bar:#00000005>
+ 10ae: 00 00 nop
+ 10b0: 00 00 nop
+ 10b2: 00 00 nop
+ 10b4: 00 00 nop
+ 10b6: d8 08 00 00 jmp 0 <<<:==:s3:foo:s3:bar:#00000005>
+ 10ba: 00 00 nop
+ 10bc: 00 00 nop
+ 10be: 00 00 nop
+#pass
diff --git a/gas/write.h b/gas/write.h
index fd21a09435..6e691a22a3 100644
--- a/gas/write.h
+++ b/gas/write.h
@@ -126,6 +126,10 @@ struct fix
const struct cgen_insn *insn;
/* Target specific data, usually reloc number. */
int opinfo;
+ /* Which ifield this fixup applies to. */
+ struct cgen_maybe_multi_ifield * field;
+ /* is this field is the MSB field in a set? */
+ int msb_field_p;
} fx_cgen;
#endif