From 21971afd3a2cea62f4a2b4758955a87326d87dab Mon Sep 17 00:00:00 2001 From: Dave Brolley Date: Mon, 5 Feb 2007 20:10:25 +0000 Subject: [PATCH] Support for Toshiba MeP and for complex relocations. --- bfd/Makefile.am | 9 + bfd/Makefile.in | 9 + bfd/archures.c | 5 + bfd/bfd-in2.h | 39 + bfd/config.bfd | 5 + bfd/configure | 2 + bfd/configure.in | 2 + bfd/cpu-mep.c | 28 + bfd/elf-bfd.h | 10 + bfd/elf.c | 4 + bfd/elf32-mep.c | 940 +++++++++++++++ bfd/elfcode.h | 6 + bfd/elflink.c | 713 +++++++++++ bfd/libbfd.h | 23 + bfd/mep-relocs.pl | 274 +++++ bfd/reloc.c | 50 + bfd/syms.c | 8 + bfd/targets.c | 4 + gas/ChangeLog | 116 ++ gas/Makefile.am | 34 + gas/Makefile.in | 40 + gas/cgen.c | 327 +++++- gas/config/obj-elf.c | 4 + gas/config/tc-mep.c | 1886 ++++++++++++++++++++++++++++++ gas/config/tc-mep.h | 119 ++ gas/configure | 4 + gas/configure.in | 4 + gas/configure.tgt | 3 + gas/symbols.c | 326 ++++++ gas/symbols.h | 3 + gas/testsuite/ChangeLog | 5 + gas/testsuite/gas/all/gas.exp | 5 +- gas/testsuite/gas/mep/allinsn.d | 1345 +++++++++++++++++++++ gas/testsuite/gas/mep/allinsn.exp | 9 + gas/testsuite/gas/mep/allinsn.le.d | 1346 +++++++++++++++++++++ gas/testsuite/gas/mep/allinsn.s | 1536 ++++++++++++++++++++++++ gas/testsuite/gas/mep/branch1.d | 14 + gas/testsuite/gas/mep/branch1.s | 7 + gas/testsuite/gas/mep/complex-relocs.exp | 42 + gas/testsuite/gas/mep/dj1.d | 1393 ++++++++++++++++++++++ gas/testsuite/gas/mep/dj1.le.d | 1393 ++++++++++++++++++++++ gas/testsuite/gas/mep/dj1.s | 1306 +++++++++++++++++++++ gas/testsuite/gas/mep/dj2.d | 11 + gas/testsuite/gas/mep/dj2.le.d | 12 + gas/testsuite/gas/mep/dj2.s | 5 + gas/testsuite/gas/mep/relocs-bad3.s | 15 + gas/testsuite/gas/mep/relocs-junk1.s | 8 + gas/testsuite/gas/mep/relocs-junk2.s | 7 + gas/testsuite/gas/mep/relocs-refs.s | 55 + gas/testsuite/gas/mep/relocs-syms.s | 18 + gas/testsuite/gas/mep/relocs.d | 98 ++ gas/write.h | 4 + 52 files changed, 13629 insertions(+), 2 deletions(-) create mode 100644 bfd/cpu-mep.c create mode 100644 bfd/elf32-mep.c create mode 100755 bfd/mep-relocs.pl create mode 100644 gas/config/tc-mep.c create mode 100644 gas/config/tc-mep.h create mode 100644 gas/testsuite/gas/mep/allinsn.d create mode 100644 gas/testsuite/gas/mep/allinsn.exp create mode 100644 gas/testsuite/gas/mep/allinsn.le.d create mode 100644 gas/testsuite/gas/mep/allinsn.s create mode 100644 gas/testsuite/gas/mep/branch1.d create mode 100644 gas/testsuite/gas/mep/branch1.s create mode 100644 gas/testsuite/gas/mep/complex-relocs.exp create mode 100644 gas/testsuite/gas/mep/dj1.d create mode 100644 gas/testsuite/gas/mep/dj1.le.d create mode 100644 gas/testsuite/gas/mep/dj1.s create mode 100644 gas/testsuite/gas/mep/dj2.d create mode 100644 gas/testsuite/gas/mep/dj2.le.d create mode 100644 gas/testsuite/gas/mep/dj2.s create mode 100644 gas/testsuite/gas/mep/relocs-bad3.s create mode 100644 gas/testsuite/gas/mep/relocs-junk1.s create mode 100644 gas/testsuite/gas/mep/relocs-junk2.s create mode 100644 gas/testsuite/gas/mep/relocs-refs.s create mode 100644 gas/testsuite/gas/mep/relocs-syms.s create mode 100644 gas/testsuite/gas/mep/relocs.d diff --git a/bfd/Makefile.am b/bfd/Makefile.am index 6b4aebfb2..2e6915b40 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 c9a8c3233..1fbbc0e2f 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 a9fca3bff..f43e2e6be 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 e641e838c..66a7dd21f 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 70d2c703b..871fb4380 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 bb52f50be..5295a2608 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 5dcb91c26..662d93abc 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 000000000..66db75074 --- /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 a9d51a359..151c5d060 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 7efca9ca1..460502c2e 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 000000000..4036d1e8d --- /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 d58cf3447..04c2d914b 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 77aae5e49..4da5d792b 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: + + := + | ':' + | ':' ':' + ; + + := 's' ':' + | 'S' ':' + | '#' + ; + + := as in C + := 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 8c552643f..c564e3043 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 000000000..d227b8252 --- /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 +# +# 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 () { + 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 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 $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 ; + last; + } + + print " looking for $start\n"; + while () { + 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 () { + 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 () { + $n = ; + 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 1b8c8d75e..f81a3bffe 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 0ff94164e..17c4ce804 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 71e3337f4..ae4d4bf45 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 6db4d2fff..6ea65ea8e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,119 @@ +2007-02-05 Dave Brolley + + * 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 + + * cgen.c (gas_cgen_install_complex_reloc): Removed. + (complex_reloc_installation_howto): Removed. + +2007-02-05 Dave Brolley + + * Contribute the following changes: + 2002-06-06 Graydon Hoare + + * symbols.c (use_complex_relocs_for): Tighten up conditions on + resolving expression symbols. + + 2002-04-04 DJ Delorie + + * symbols.c (use_complex_relocs_for): New, to decide + when to use complex relocs. + (resolve_symbol_value): Use it. + + 2002-03-07 Graydon Hoare + + * cgen.c: Minor debugging touchups, warning removal. + + 2002-02-17 Catherine Moore + + * cgen.c (gas_cgen_md_apply_fix3): Only set signed_p if RELC. + + 2002-01-23 Graydon Hoare + + * 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 + + * 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 + + * 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 + + * cgen.c (weak_operand_overflow_check): Improve accuracy of + detecting overflows. + + 2001-12-17 Nick Clifton + + * cgen.c: Tidy up RELC code after the merge. + + 2001-11-15 graydon hoare + + * 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 + + * 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 + + * symbols.c (symbol_relc_make_expr): Conform to K & R C. + + 2001-06-20 Frank Ch. Eigler + + * 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 * config/tc-m32c.c (m32c_cons_fix_new): New. Added to support 3 diff --git a/gas/Makefile.am b/gas/Makefile.am index 31609e64f..aba954de3 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 bbd6f9a6b..7b43142de 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 5a5378999..5b0694b03 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 a9d34c467..f08373351 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 000000000..b3b17d3c7 --- /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 +#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= 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;iisas = 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; ifr_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 000000000..1d48bd4c9 --- /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 6f45a0e3e..6f9b7b80e 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 751b21a7e..6b35bf17d 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 8650dac78..74f08527c 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 41fabc5df..8943af3c1 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 0527abbb9..483f8ee08 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 e587314f3..b52d8e766 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-02-05 Dave Brolley + + * gas/mep/relocs-junk1.s: Add a .data section. + * gas/mep/relocs.d: Updated to match above. + 2007-02-04 H.J. Lu PR gas/3961 diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp index 294d09181..397a0bb58 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 000000000..3a1f62c30 --- /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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 3da: b0 02 bra 3dc + 3dc: bf fe bra 3da + 3de: b0 02 bra 3e0 + 3e0: b0 00 bra 3e0 + 3e2: b0 02 bra 3e4 + +000003e4 : + 3e4: a1 fe beqz \$1,3e2 + 3e6: af 02 beqz \$sp,3e8 + 3e8: a4 04 beqz \$4,3ec + 3ea: a4 00 beqz \$4,3ea + 3ec: a9 fe beqz \$9,3ea + +000003ee : + 3ee: a8 03 bnez \$8,3f0 + 3f0: ad 03 bnez \$tp,3f2 + 3f2: ae 01 bnez \$gp,3f2 + 3f4: a6 03 bnez \$6,3f6 + 3f6: a8 fd bnez \$8,3f2 + +000003f8 : + 3f8: ed 30 00 00 beqi \$tp,0x3,3f8 + 3fc: e0 40 ff ff beqi \$0,0x4,3fa + 400: ef 40 ff ff beqi \$sp,0x4,3fe + 404: ed 20 00 00 beqi \$tp,0x2,404 + 408: e4 20 ff fc beqi \$4,0x2,400 + +0000040c : + 40c: e8 14 00 00 bnei \$8,0x1,40c + 410: e5 14 00 01 bnei \$5,0x1,412 + 414: e5 04 00 04 bnei \$5,0x0,41c + 418: e9 44 ff ff bnei \$9,0x4,416 + 41c: e0 44 ff fc bnei \$0,0x4,414 + +00000420 : + 420: e7 3c 00 00 blti \$7,0x3,420 + 424: e1 1c 00 00 blti \$1,0x1,424 + 428: e8 2c 00 01 blti \$8,0x2,42a + 42c: eb 2c 00 01 blti \$11,0x2,42e + 430: ef 3c ff ff blti \$sp,0x3,42e + +00000434 : + 434: e4 38 ff fc bgei \$4,0x3,42c + 438: e7 08 00 01 bgei \$7,0x0,43a + 43c: ed 18 00 00 bgei \$tp,0x1,43c + 440: e5 28 ff ff bgei \$5,0x2,43e + 444: ec 48 ff fc bgei \$12,0x4,43c + +00000448 : + 448: e7 21 ff ff beq \$7,\$2,446 + 44c: e1 31 ff fc beq \$1,\$3,444 + 450: e2 01 00 01 beq \$2,\$0,452 + 454: ef 81 00 01 beq \$sp,\$8,456 + 458: e3 01 00 00 beq \$3,\$0,458 + +0000045c : + 45c: e6 35 00 00 bne \$6,\$3,45c + 460: ef 35 ff fc bne \$sp,\$3,458 + 464: e8 05 00 01 bne \$8,\$0,466 + 468: ee f5 00 04 bne \$gp,\$sp,470 + 46c: ef 45 00 01 bne \$sp,\$4,46e + +00000470 : + 470: b0 03 bsr 472 + 472: bf f9 bsr 46a + 474: bf f1 bsr 464 + 476: bf ff bsr 474 + 478: bf f9 bsr 470 + +0000047a : + 47a: b0 05 bsr 47e + 47c: bf ff bsr 47a + 47e: bf fd bsr 47a + 480: b0 01 bsr 480 + 482: b0 03 bsr 484 + +00000484 : + 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 : + 48e: d8 28 00 00 jmp 4 + 492: d8 18 00 00 jmp 2 + 496: d8 08 00 00 jmp 0 + 49a: d8 18 00 00 jmp 2 + 49e: d8 28 00 00 jmp 4 + +000004a2 : + 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 : + 4ac: 70 02 ret + +000004ae : + 4ae: e4 09 00 01 repeat \$4,4b0 + 4b2: e8 09 00 02 repeat \$8,4b6 + 4b6: e0 09 00 04 repeat \$0,4be + 4ba: e6 09 00 01 repeat \$6,4bc + 4be: e4 09 00 01 repeat \$4,4c0 + +000004c2 : + 4c2: e0 19 00 01 erepeat 4c4 + 4c6: e0 19 00 00 erepeat 4c6 + 4ca: e0 19 00 01 erepeat 4cc + 4ce: e0 19 ff ff erepeat 4cc + 4d2: e0 19 00 00 erepeat 4d2 + +000004d6 : + 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 : + 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 : + 4ea: 70 00 di + +000004ec : + 4ec: 70 10 ei + +000004ee : + 4ee: 70 12 reti + +000004f0 : + 4f0: 70 22 halt + +000004f2 : + 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 : + 4fc: 70 32 break + +000004fe : + 4fe: 70 11 syncm + +00000500 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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
: + 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 : + 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 : + 5f0: 70 13 dret + +000005f2 : + 5f2: 70 33 dbreak + +000005f4 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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... : + ...: d8 44 00 00 bcpeq 0x4,... + ...: d8 04 ff ff bcpeq 0x0,... + ...: d8 44 ff ff bcpeq 0x4,... + ...: d8 14 00 01 bcpeq 0x1,... + ...: d8 24 00 01 bcpeq 0x2,... + +00000... : + ...: d8 25 00 00 bcpne 0x2,... + ...: d8 45 00 00 bcpne 0x4,... + ...: d8 15 00 00 bcpne 0x1,... + ...: d8 45 00 00 bcpne 0x4,... + ...: d8 15 00 01 bcpne 0x1,... + +00000... : + ...: d8 16 ff ff bcpat 0x1,... + ...: d8 06 00 01 bcpat 0x0,... + ...: d8 06 ff ff bcpat 0x0,... + ...: d8 26 00 00 bcpat 0x2,... + ...: d8 16 ff ff bcpat 0x1,... + +00000... : + ...: d8 47 00 00 bcpaf 0x4,... + ...: d8 37 00 00 bcpaf 0x3,... + ...: d8 47 00 00 bcpaf 0x4,... + ...: d8 17 00 01 bcpaf 0x1,... + ...: d8 47 00 01 bcpaf 0x4,... + +00000... : + ...: 70 21 synccp + +00000... : + ...: 18 bf jsrv \$11 + ...: 18 5f jsrv \$5 + ...: 18 af jsrv \$10 + ...: 18 cf jsrv \$12 + ...: 18 af jsrv \$10 + +00000... : + ...: df fb ff ff bsrv ... + ...: df fb ff ff bsrv ... + ...: df fb ff ff bsrv ... + ...: d8 1b 00 00 bsrv ... + ...: d8 0b 00 00 bsrv ... + +00000... : + ...: 7a 78 stc \$10,\$hi + ...: 70 8a ldc \$0,\$lo + +00000... : + ...: 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 000000000..259ed10b1 --- /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 000000000..2d9c50bad --- /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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 3da: 02 b0 bra 3dc + 3dc: fe bf bra 3da + 3de: 02 b0 bra 3e0 + 3e0: 00 b0 bra 3e0 + 3e2: 02 b0 bra 3e4 + +000003e4 : + 3e4: fe a1 beqz \$1,3e2 + 3e6: 02 af beqz \$sp,3e8 + 3e8: 04 a4 beqz \$4,3ec + 3ea: 00 a4 beqz \$4,3ea + 3ec: fe a9 beqz \$9,3ea + +000003ee : + 3ee: 03 a8 bnez \$8,3f0 + 3f0: 03 ad bnez \$tp,3f2 + 3f2: 01 ae bnez \$gp,3f2 + 3f4: 03 a6 bnez \$6,3f6 + 3f6: fd a8 bnez \$8,3f2 + +000003f8 : + 3f8: 30 ed 00 00 beqi \$tp,0x3,3f8 + 3fc: 40 e0 ff ff beqi \$0,0x4,3fa + 400: 40 ef ff ff beqi \$sp,0x4,3fe + 404: 20 ed 00 00 beqi \$tp,0x2,404 + 408: 20 e4 fc ff beqi \$4,0x2,400 + +0000040c : + 40c: 14 e8 00 00 bnei \$8,0x1,40c + 410: 14 e5 01 00 bnei \$5,0x1,412 + 414: 04 e5 04 00 bnei \$5,0x0,41c + 418: 44 e9 ff ff bnei \$9,0x4,416 + 41c: 44 e0 fc ff bnei \$0,0x4,414 + +00000420 : + 420: 3c e7 00 00 blti \$7,0x3,420 + 424: 1c e1 00 00 blti \$1,0x1,424 + 428: 2c e8 01 00 blti \$8,0x2,42a + 42c: 2c eb 01 00 blti \$11,0x2,42e + 430: 3c ef ff ff blti \$sp,0x3,42e + +00000434 : + 434: 38 e4 fc ff bgei \$4,0x3,42c + 438: 08 e7 01 00 bgei \$7,0x0,43a + 43c: 18 ed 00 00 bgei \$tp,0x1,43c + 440: 28 e5 ff ff bgei \$5,0x2,43e + 444: 48 ec fc ff bgei \$12,0x4,43c + +00000448 : + 448: 21 e7 ff ff beq \$7,\$2,446 + 44c: 31 e1 fc ff beq \$1,\$3,444 + 450: 01 e2 01 00 beq \$2,\$0,452 + 454: 81 ef 01 00 beq \$sp,\$8,456 + 458: 01 e3 00 00 beq \$3,\$0,458 + +0000045c : + 45c: 35 e6 00 00 bne \$6,\$3,45c + 460: 35 ef fc ff bne \$sp,\$3,458 + 464: 05 e8 01 00 bne \$8,\$0,466 + 468: f5 ee 04 00 bne \$gp,\$sp,470 + 46c: 45 ef 01 00 bne \$sp,\$4,46e + +00000470 : + 470: 03 b0 bsr 472 + 472: f9 bf bsr 46a + 474: f1 bf bsr 464 + 476: ff bf bsr 474 + 478: f9 bf bsr 470 + +0000047a : + 47a: 05 b0 bsr 47e + 47c: ff bf bsr 47a + 47e: fd bf bsr 47a + 480: 01 b0 bsr 480 + 482: 03 b0 bsr 484 + +00000484 : + 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 : + 48e: 28 d8 00 00 jmp 4 + 492: 18 d8 00 00 jmp 2 + 496: 08 d8 00 00 jmp 0 + 49a: 18 d8 00 00 jmp 2 + 49e: 28 d8 00 00 jmp 4 + +000004a2 : + 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 : + 4ac: 02 70 ret + +000004ae : + 4ae: 09 e4 01 00 repeat \$4,4b0 + 4b2: 09 e8 02 00 repeat \$8,4b6 + 4b6: 09 e0 04 00 repeat \$0,4be + 4ba: 09 e6 01 00 repeat \$6,4bc + 4be: 09 e4 01 00 repeat \$4,4c0 + +000004c2 : + 4c2: 19 e0 01 00 erepeat 4c4 + 4c6: 19 e0 00 00 erepeat 4c6 + 4ca: 19 e0 01 00 erepeat 4cc + 4ce: 19 e0 ff ff erepeat 4cc + 4d2: 19 e0 00 00 erepeat 4d2 + +000004d6 : + 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 : + 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 : + 4ea: 00 70 di + +000004ec : + 4ec: 10 70 ei + +000004ee : + 4ee: 12 70 reti + +000004f0 : + 4f0: 22 70 halt + +000004f2 : + 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 : + 4fc: 32 70 break + +000004fe : + 4fe: 11 70 syncm + +00000500 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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
: + 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 : + 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 : + 5f0: 13 70 dret + +000005f2 : + 5f2: 33 70 dbreak + +000005f4 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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 : + 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... : + ...: 44 d8 00 00 bcpeq 0x4,... + ...: 04 d8 ff ff bcpeq 0x0,... + ...: 44 d8 ff ff bcpeq 0x4,... + ...: 14 d8 01 00 bcpeq 0x1,... + ...: 24 d8 01 00 bcpeq 0x2,... + +00000... : + ...: 25 d8 00 00 bcpne 0x2,... + ...: 45 d8 00 00 bcpne 0x4,... + ...: 15 d8 00 00 bcpne 0x1,... + ...: 45 d8 00 00 bcpne 0x4,... + ...: 15 d8 01 00 bcpne 0x1,... + +00000... : + ...: 16 d8 ff ff bcpat 0x1,... + ...: 06 d8 01 00 bcpat 0x0,... + ...: 06 d8 ff ff bcpat 0x0,... + ...: 26 d8 00 00 bcpat 0x2,... + ...: 16 d8 ff ff bcpat 0x1,... + +00000... : + ...: 47 d8 00 00 bcpaf 0x4,... + ...: 37 d8 00 00 bcpaf 0x3,... + ...: 47 d8 00 00 bcpaf 0x4,... + ...: 17 d8 01 00 bcpaf 0x1,... + ...: 47 d8 01 00 bcpaf 0x4,... + +00000... : + ...: 21 70 synccp + +00000... : + ...: bf 18 jsrv \$11 + ...: 5f 18 jsrv \$5 + ...: af 18 jsrv \$10 + ...: cf 18 jsrv \$12 + ...: af 18 jsrv \$10 + +00000... : + ...: fb df ff ff bsrv ... + ...: fb df ff ff bsrv ... + ...: fb df ff ff bsrv ... + ...: 1b d8 00 00 bsrv ... + ...: 0b d8 00 00 bsrv ... + +00000... : + ...: 78 7a stc \$10,\$hi + ...: 8a 70 ldc \$0,\$lo + +00000... : + ...: 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 000000000..784337c86 --- /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 000000000..271b9184a --- /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,.* + .*: 00 00 * nop + .*: 00 00 * nop + +.* : + .*: 00 00 * nop diff --git a/gas/testsuite/gas/mep/branch1.s b/gas/testsuite/gas/mep/branch1.s new file mode 100644 index 000000000..7c69985d7 --- /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 000000000..ed8a72a41 --- /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 000000000..c314d724c --- /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 000000000..c860c5be0 --- /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 000000000..e281cb8fa --- /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 000000000..9634cf4c4 --- /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 000000000..1c1053c51 --- /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 000000000..4eabf82b0 --- /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 000000000..1e80a6b0d --- /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 000000000..6e9c6c2be --- /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 000000000..361ad6ec7 --- /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 000000000..43dc77ee6 --- /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 000000000..508efaf10 --- /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 000000000..602545a31 --- /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 : + 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 : + 1012: 00 00 nop + 1014: 00 00 nop + 1016: 00 00 nop + 1018: 00 00 nop + +0000101a : + 101a: 00 00 nop + 101c: 00 00 nop + 101e: 00 00 nop + 1020: 00 00 nop + 1022: 00 00 nop + +00001024 : + 1024: 00 00 nop + 1026: 00 00 nop + 1028: 00 00 nop + 102a: 00 00 nop + 102c: 00 00 nop + +0000102e
: + 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 fd21a0943..6e691a22a 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 -- 2.11.4.GIT