This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

support for xstormy16



This adds support for the Sanyo Xstormy16 CPU core.  It shouldn't
affect any other target.

OK to commit?

-- 
Geoff Keating <geoffk@redhat.com>

===File ~/patches/sanyo-contrib-bfd.patch===================
Index: bfd/ChangeLog
2001-11-26  Geoffrey Keating  <geoffk@redhat.com>

	* Makefile.am: Add support for xstormy16.
	* archures.c: Add support for xstormy16.
	* config.bfd: Add support for xstormy16.
	* configure.in: Add support for xstormy16.
	* reloc.c: Add support for xstormy16.
	* targets.c: Add support for xstormy16.
	* cpu-xstormy16.c: New file.
	* elf32-xstormy16.c: New file.
	* Makefile.in: Regenerated.
	* bfd-in2.h: Regenerated.
	* configure: Regenerated.
	* libbfd.h: Regenerated.

Index: binutils/ChangeLog
2001-11-26  Geoffrey Keating  <geoffk@redhat.com>

	* readelf.c (guess_is_rela): Add support for stormy16.
	(dump_relocations): Likewise.
	(get_machine_name): Likewise.

Index: gas/ChangeLog
2001-11-26  Geoffrey Keating  <geoffk@redhat.com>

	* configure.in: Add support for xstormy16.
	* configure: Regenerated.
	* Makefile.am: Add support for xstormy16.
	* Makefile.in: Regenerated.
	* config/tc-xstormy16.c: New file.
	* config/tc-xstormy16.h: New file.

Index: gas/testsuite/ChangeLog
2001-11-26  Geoffrey Keating  <geoffk@redhat.com>

	* gas/xstormy16/allinsn.d: New file.
	* gas/xstormy16/allinsn.exp: New file.
	* gas/xstormy16/allinsn.s: New file.
	* gas/xstormy16/allinsn.sh: New file.
	* gas/xstormy16/gcc.d: New file.
	* gas/xstormy16/gcc.s: New file.
	* gas/xstormy16/gcc.sh: New file.
	* gas/xstormy16/reloc-1.d: New file.
	* gas/xstormy16/reloc-1.s: New file.
	* gas/xstormy16/reloc-2.d: New file.
	* gas/xstormy16/reloc-2.s: New file.

Index: ld/ChangeLog
2001-11-26  Geoffrey Keating  <geoffk@redhat.com>

	* Makefile.am: Add support for xstormy16.
	* configure.tgt: Add support for xstormy16.
	* Makefile.in: Regenerate.
	* emulparams/elf32xstormy16.sh: New file.
	* scripttempl/xstormy16.sc: New file.

Index: opcodes/ChangeLog
2001-11-26  Geoffrey Keating  <geoffk@redhat.com>

	* Makefile.am: Add support for xstormy16.
	* Makefile.in: Regenerate.
	* configure.in: Add support for xstormy16.
	* configure: Regenerate.
	* disassemble.c: Add support for xstormy16.
	* xstormy16-asm.c: New generated file.
	* xstormy16-desc.c: New generated file.
	* xstormy16-desc.h: New generated file.
	* xstormy16-dis.c: New generated file.
	* xstormy16-ibld.c: New generated file.
	* xstormy16-opc.c: New generated file.
	* xstormy16-opc.h: New generated file.

Index: bfd/Makefile.am
===================================================================
RCS file: /cvs/src/src/bfd/Makefile.am,v
retrieving revision 1.69
diff -p -u -p -r1.69 Makefile.am
--- bfd/Makefile.am	2001/12/05 22:46:20	1.69
+++ bfd/Makefile.am	2001/12/07 22:26:45
@@ -89,6 +89,7 @@ ALL_MACHINES = \
 	cpu-vax.lo \
 	cpu-we32k.lo \
 	cpu-w65.lo \
+	cpu-xstormy16.lo \
 	cpu-z8k.lo
 
 ALL_MACHINES_CFILES = \
@@ -135,6 +136,7 @@ ALL_MACHINES_CFILES = \
 	cpu-vax.c \
 	cpu-we32k.c \
 	cpu-w65.c \
+	cpu-xstormy16.c \
 	cpu-z8k.c
 
 # The .o files needed by all of the 32 bit vectors that are configured into
@@ -217,6 +219,7 @@ BFD32_BACKENDS = \
 	elf32-sh-lin.lo \
 	elf32-sparc.lo \
 	elf32-v850.lo \
+	elf32-xstormy16.lo \
 	elf32.lo \
 	elflink.lo \
 	elf-strtab.lo \
@@ -358,6 +361,7 @@ BFD32_BACKENDS_CFILES = \
 	elf32-sh-lin.c \
 	elf32-sparc.c \
 	elf32-v850.c \
+	elf32-xstormy16.c \
 	elf32.c \
 	elflink.c \
 	elf-strtab.c \
@@ -857,6 +861,7 @@ cpu-v850.lo: cpu-v850.c $(INCDIR)/filena
 cpu-vax.lo: cpu-vax.c $(INCDIR)/filenames.h
 cpu-we32k.lo: cpu-we32k.c $(INCDIR)/filenames.h
 cpu-w65.lo: cpu-w65.c $(INCDIR)/filenames.h
+cpu-xstormy16.lo: cpu-xstormy16.c $(INCDIR)/filenames.h
 cpu-z8k.lo: cpu-z8k.c $(INCDIR)/filenames.h
 aout-adobe.lo: aout-adobe.c $(INCDIR)/filenames.h $(INCDIR)/aout/adobe.h \
   $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def libaout.h \
@@ -1132,6 +1137,10 @@ elf32-v850.lo: elf32-v850.c $(INCDIR)/fi
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/reloc-macros.h \
   $(INCDIR)/libiberty.h elf32-target.h
+elf32-xstormy16.lo: elf32-xstormy16.c $(INCDIR)/filenames.h elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/elf/xstormy16.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/reloc-macros.h \
+  elf32-target.h
 elf32.lo: elf32.c elfcode.h $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
   $(INCDIR)/bfdlink.h elf-bfd.h $(INCDIR)/elf/common.h \
   $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elfcore.h \
Index: bfd/archures.c
===================================================================
RCS file: /cvs/src/src/bfd/archures.c,v
retrieving revision 1.40
diff -p -u -p -r1.40 archures.c
--- bfd/archures.c	2001/10/30 15:20:02	1.40
+++ bfd/archures.c	2001/12/07 22:26:46
@@ -259,6 +259,8 @@ DESCRIPTION
 .#define bfd_mach_s390_esame    1
 .  bfd_arch_openrisc,  {* OpenRISC *}
 .  bfd_arch_mmix,      {* Donald Knuth's educational processor *}
+.  bfd_arch_xstormy16,
+.#define bfd_mach_xstormy16	0
 .  bfd_arch_last
 .  };
 */
@@ -338,6 +340,7 @@ extern const bfd_arch_info_type bfd_ia64
 extern const bfd_arch_info_type bfd_s390_arch;
 extern const bfd_arch_info_type bfd_openrisc_arch;
 extern const bfd_arch_info_type bfd_mmix_arch;
+extern const bfd_arch_info_type bfd_xstormy16_arch;
 
 static const bfd_arch_info_type * const bfd_archures_list[] = {
 #ifdef SELECT_ARCHITECTURES
@@ -386,6 +389,7 @@ static const bfd_arch_info_type * const 
   &bfd_s390_arch,
   &bfd_openrisc_arch,
   &bfd_mmix_arch,
+  &bfd_xstormy16_arch,
 #endif
   0
 };
Index: bfd/config.bfd
===================================================================
RCS file: /cvs/src/src/bfd/config.bfd,v
retrieving revision 1.73
diff -p -u -p -r1.73 config.bfd
--- bfd/config.bfd	2001/12/05 22:46:21	1.73
+++ bfd/config.bfd	2001/12/07 22:26:47
@@ -972,6 +972,10 @@ case "${targ}" in
     targ_defvec=w65_vec
     ;;
 
+  xstormy16-*-elf)
+    targ_defvec=bfd_elf32_xstormy16_vec
+    ;;
+
   z8k*-*-*)
     targ_defvec=z8kcoff_vec
     targ_underscore=yes
Index: bfd/configure.in
===================================================================
RCS file: /cvs/src/src/bfd/configure.in,v
retrieving revision 1.70
diff -p -u -p -r1.70 configure.in
--- bfd/configure.in	2001/12/05 22:46:21	1.70
+++ bfd/configure.in	2001/12/07 22:26:48
@@ -583,6 +583,7 @@ do
     bfd_elf32_tradlittlemips_vec) tb="$tb elf32-mips.lo elf32.lo $elf ecofflink.lo" ;;
     bfd_elf32_us_cris_vec)	tb="$tb elf32-cris.lo elf32.lo $elf" ;;
     bfd_elf32_v850_vec)		tb="$tb elf32-v850.lo elf32.lo $elf" ;;
+    bfd_elf32_xstormy16_vec)	tb="$tb elf32-xstormy16.lo elf32.lo $elf" ;;
     bfd_elf64_alpha_vec)	tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_big_generic_vec) 	tb="$tb elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_bigmips_vec) 	tb="$tb elf64-mips.lo elf64.lo elf32-mips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
Index: bfd/cpu-xstormy16.c
===================================================================
RCS file: cpu-xstormy16.c
diff -N cpu-xstormy16.c
--- bfd/cpu-xstormy16.c	Tue May  5 13:32:27 1998
+++ bfd/cpu-xstormy16.c	Fri Dec  7 14:26:48 2001
@@ -0,0 +1,38 @@
+/* BFD support for the XSTORMY16 processor.
+   Copyright (C) 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+
+const bfd_arch_info_type bfd_xstormy16_arch =
+{
+  16,				/* bits per word */
+  32,				/* bits per address */
+  8,				/* bits per byte */
+  bfd_arch_xstormy16,		/* architecture */
+  bfd_mach_xstormy16,		/* machine */
+  "xstormy16",			/* architecture name */
+  "xstormy16",			/* printable name */
+  2,				/* section align power */
+  true,				/* the default ? */
+  bfd_default_compatible,	/* architecture comparison fn */
+  bfd_default_scan,		/* string to architecture convert fn */
+  NULL				/* next in list */
+};
Index: bfd/elf32-xstormy16.c
===================================================================
RCS file: elf32-xstormy16.c
diff -N elf32-xstormy16.c
--- bfd/elf32-xstormy16.c	Tue May  5 13:32:27 1998
+++ bfd/elf32-xstormy16.c	Fri Dec  7 14:26:48 2001
@@ -0,0 +1,1074 @@
+/* XSTORMY16-specific support for 32-bit ELF.
+   Copyright (C) 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/xstormy16.h"
+
+/* Forward declarations.  */
+static reloc_howto_type * xstormy16_reloc_type_lookup
+  PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
+static void xstormy16_info_to_howto_rela 
+  PARAMS ((bfd *, arelent *, Elf32_Internal_Rela *));
+static bfd_reloc_status_type xstormy16_elf_24_reloc 
+  PARAMS ((bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+	   PTR data, asection *input_section, bfd *output_bfd,
+	   char **error_message));
+static boolean xstormy16_elf_check_relocs
+  PARAMS ((bfd *, struct bfd_link_info *, asection *,
+	   const Elf_Internal_Rela *));
+static boolean xstormy16_relax_plt_check
+  PARAMS ((struct elf_link_hash_entry *, PTR));
+static boolean xstormy16_relax_plt_realloc
+  PARAMS ((struct elf_link_hash_entry *, PTR));
+static boolean xstormy16_elf_relax_section
+  PARAMS ((bfd *abfd, asection *sec, struct bfd_link_info *link_info,
+	   boolean *again));
+static boolean xstormy16_elf_always_size_sections
+  PARAMS ((bfd *, struct bfd_link_info *));
+static boolean xstormy16_elf_relocate_section 
+  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
+	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
+static boolean xstormy16_elf_finish_dynamic_sections
+  PARAMS((bfd *, struct bfd_link_info *));
+static boolean xstormy16_elf_gc_sweep_hook
+  PARAMS ((bfd *, struct bfd_link_info *, asection *,
+	   const Elf_Internal_Rela *));
+static asection * xstormy16_elf_gc_mark_hook
+  PARAMS ((bfd *, struct bfd_link_info *, Elf_Internal_Rela *,
+	   struct elf_link_hash_entry *, Elf_Internal_Sym *));
+
+static reloc_howto_type xstormy16_elf_howto_table [] =
+{
+  /* This reloc does nothing.  */
+  HOWTO (R_XSTORMY16_NONE,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_NONE",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* A 32 bit absolute relocation.  */
+  HOWTO (R_XSTORMY16_32,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_32",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+ 
+  /* A 16 bit absolute relocation.  */
+  HOWTO (R_XSTORMY16_16,	/* type */
+	 0,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_16",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+ 
+  /* An 8 bit absolute relocation.  */
+  HOWTO (R_XSTORMY16_8,	/* type */
+	 0,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_8",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+ 
+  /* A 32 bit pc-relative relocation.  */
+  HOWTO (R_XSTORMY16_PC32,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 true,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_PC32",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 true),		/* pcrel_offset */
+ 
+  /* A 16 bit pc-relative relocation.  */
+  HOWTO (R_XSTORMY16_PC16,	/* type */
+	 0,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 true,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_PC16",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 true),		/* pcrel_offset */
+ 
+  /* An 8 bit pc-relative relocation.  */
+  HOWTO (R_XSTORMY16_PC8,	/* type */
+	 0,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* bitsize */
+	 true,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_PC8",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 true),		/* pcrel_offset */
+ 
+  /* A 12-bit pc-relative relocation suitable for the branch instructions.  */
+  HOWTO (R_XSTORMY16_REL_12,	/* type */
+	 1,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 11,			/* bitsize */
+	 true,			/* pc_relative */
+	 1,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_REL_12",	/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x0fff,		/* dst_mask */
+	 true),		/* pcrel_offset */
+ 
+  /* A 24-bit absolute relocation suitable for the jump instructions.  */
+  HOWTO (R_XSTORMY16_24,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 24,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_unsigned, /* complain_on_overflow */
+	 xstormy16_elf_24_reloc,	/* special_function */
+	 "R_XSTORMY16_24",	/* name */
+	 true,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff00ff,		/* dst_mask */
+	 true),		/* pcrel_offset */
+ 
+  /* A 16 bit absolute relocation to a function pointer.  */
+  HOWTO (R_XSTORMY16_FPTR16,	/* type */
+	 0,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_XSTORMY16_FPTR16",	/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+};
+ 
+static reloc_howto_type xstormy16_elf_howto_table2 [] =
+{
+  /* GNU extension to record C++ vtable hierarchy */
+  HOWTO (R_XSTORMY16_GNU_VTINHERIT, /* type */
+         0,                     /* rightshift */
+         2,                     /* size (0 = byte, 1 = short, 2 = long) */
+         0,                     /* bitsize */
+         false,                 /* pc_relative */
+         0,                     /* bitpos */
+         complain_overflow_dont, /* complain_on_overflow */
+         NULL,                  /* special_function */
+         "R_XSTORMY16_GNU_VTINHERIT", /* name */
+         false,                 /* partial_inplace */
+         0,                     /* src_mask */
+         0,                     /* dst_mask */
+         false),                /* pcrel_offset */
+
+  /* GNU extension to record C++ vtable member usage */
+  HOWTO (R_XSTORMY16_GNU_VTENTRY,     /* type */
+         0,                     /* rightshift */
+         2,                     /* size (0 = byte, 1 = short, 2 = long) */
+         0,                     /* bitsize */
+         false,                 /* pc_relative */
+         0,                     /* bitpos */
+         complain_overflow_dont, /* complain_on_overflow */
+         _bfd_elf_rel_vtable_reloc_fn,  /* special_function */
+         "R_XSTORMY16_GNU_VTENTRY",   /* name */
+         false,                 /* partial_inplace */
+         0,                     /* src_mask */
+         0,                     /* dst_mask */
+         false),                /* pcrel_offset */
+ 
+};
+
+/* Map BFD reloc types to XSTORMY16 ELF reloc types.  */
+
+struct xstormy16_reloc_map
+{
+  bfd_reloc_code_real_type bfd_reloc_val;
+  unsigned int xstormy16_reloc_val;
+};
+
+static const struct xstormy16_reloc_map xstormy16_reloc_map [] =
+{
+  { BFD_RELOC_NONE,                 R_XSTORMY16_NONE },
+  { BFD_RELOC_32,                   R_XSTORMY16_32 },
+  { BFD_RELOC_16,                   R_XSTORMY16_16 },
+  { BFD_RELOC_8,                    R_XSTORMY16_8 },
+  { BFD_RELOC_32_PCREL,             R_XSTORMY16_PC32 },
+  { BFD_RELOC_16_PCREL,             R_XSTORMY16_PC16 },
+  { BFD_RELOC_8_PCREL,              R_XSTORMY16_PC8 },
+  { BFD_RELOC_XSTORMY16_REL_12,      R_XSTORMY16_REL_12 },
+  { BFD_RELOC_XSTORMY16_24,	    R_XSTORMY16_24 },
+  { BFD_RELOC_XSTORMY16_FPTR16,	    R_XSTORMY16_FPTR16 },
+  { BFD_RELOC_VTABLE_INHERIT,       R_XSTORMY16_GNU_VTINHERIT },
+  { BFD_RELOC_VTABLE_ENTRY,         R_XSTORMY16_GNU_VTENTRY },
+};
+
+static reloc_howto_type *
+xstormy16_reloc_type_lookup (abfd, code)
+     bfd * abfd ATTRIBUTE_UNUSED;
+     bfd_reloc_code_real_type code;
+{
+  unsigned int i;
+
+  for (i = sizeof (xstormy16_reloc_map) / sizeof (xstormy16_reloc_map[0]);
+       --i;)
+    if (xstormy16_reloc_map [i].bfd_reloc_val == code)
+      return & xstormy16_elf_howto_table [xstormy16_reloc_map[i].xstormy16_reloc_val];
+  
+  return NULL;
+}
+
+/* Set the howto pointer for an XSTORMY16 ELF reloc.  */
+
+static void
+xstormy16_info_to_howto_rela (abfd, cache_ptr, dst)
+     bfd * abfd ATTRIBUTE_UNUSED;
+     arelent * cache_ptr;
+     Elf32_Internal_Rela * dst;
+{
+  unsigned int r_type = ELF32_R_TYPE (dst->r_info);
+
+  if (r_type <= (unsigned int) R_XSTORMY16_FPTR16)
+    cache_ptr->howto = &xstormy16_elf_howto_table [r_type];
+  else if (r_type - R_XSTORMY16_GNU_VTINHERIT
+	   <= (unsigned int) R_XSTORMY16_GNU_VTENTRY)
+    cache_ptr->howto
+      = &xstormy16_elf_howto_table2 [r_type - R_XSTORMY16_GNU_VTINHERIT];
+  else
+    abort ();
+}
+
+/* Handle the R_XSTORMY16_24 reloc, which has an odd bit arrangement.  */
+
+static bfd_reloc_status_type
+xstormy16_elf_24_reloc (abfd, reloc_entry, symbol, data, input_section,
+			 output_bfd, error_message)
+     bfd *abfd;
+     arelent *reloc_entry;
+     asymbol *symbol;
+     PTR data;
+     asection *input_section;
+     bfd *output_bfd;
+     char **error_message ATTRIBUTE_UNUSED;
+{
+  bfd_vma relocation, x;
+
+  if (output_bfd != NULL)
+    {
+      reloc_entry->address += input_section->output_offset;
+      return bfd_reloc_ok;
+    }
+
+  if (reloc_entry->address > input_section->_cooked_size)
+    return bfd_reloc_outofrange;
+
+  if (bfd_is_com_section (symbol->section))
+    relocation = 0;
+  else
+    relocation = symbol->value;
+
+  relocation += symbol->section->output_section->vma;
+  relocation += symbol->section->output_offset;
+  relocation += reloc_entry->addend;
+
+  x = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
+  x &= 0x0000ff00;
+  x |= relocation & 0xff;
+  x |= (relocation << 8) & 0xffff0000;
+  bfd_put_32 (abfd, x, (bfd_byte *) data + reloc_entry->address);
+
+  if (relocation & ~ (bfd_vma) 0xffffff)
+    return bfd_reloc_overflow;
+
+  return bfd_reloc_ok;
+}
+
+/* We support 16-bit pointers to code above 64k by generating a thunk
+   below 64k containing a JMPF instruction to the final address.  We
+   cannot, unfortunately, minimize the number of thunks unless the
+   -relax switch is given, as otherwise we have no idea where the
+   sections will fall in the address space.  */
+
+static boolean
+xstormy16_elf_check_relocs (abfd, info, sec, relocs)
+     bfd *abfd;
+     struct bfd_link_info *info;
+     asection *sec;
+     const Elf_Internal_Rela *relocs;
+{
+  const Elf_Internal_Rela *rel, *relend;
+  struct elf_link_hash_entry **sym_hashes;
+  Elf_Internal_Shdr *symtab_hdr;
+  bfd_vma *local_plt_offsets;
+  asection *splt;
+  bfd *dynobj;
+
+  if (info->relocateable)
+    return true;
+
+  symtab_hdr = &elf_tdata(abfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (abfd);
+  local_plt_offsets = elf_local_got_offsets (abfd);
+  splt = NULL;
+  dynobj = elf_hash_table(info)->dynobj;
+
+  relend = relocs + sec->reloc_count;
+  for (rel = relocs; rel < relend; ++rel)
+    {
+      unsigned long r_symndx;
+      struct elf_link_hash_entry *h;
+      bfd_vma *offset;
+
+      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];
+	  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;
+	}
+
+      switch (ELF32_R_TYPE (rel->r_info))
+        {
+	  /* This relocation describes a 16-bit pointer to a function.
+	     We may need to allocate a thunk in low memory; reserve memory
+	     for it now.  */
+	case R_XSTORMY16_FPTR16:
+	  if (rel->r_addend != 0)
+	    {
+	      (*info->callbacks->warning)
+		(info, _("non-zero addend in @fptr reloc"), 0,
+		 abfd, 0, 0);
+	    }
+
+	  if (dynobj == NULL)
+	    elf_hash_table (info)->dynobj = dynobj = abfd;
+	  if (splt == NULL)
+	    {
+	      splt = bfd_get_section_by_name (dynobj, ".plt");
+	      if (splt == NULL)
+		{
+		  splt = bfd_make_section (dynobj, ".plt");
+		  if (splt == NULL
+		      || ! bfd_set_section_flags (dynobj, splt,
+						  (SEC_ALLOC
+						   | SEC_LOAD
+						   | SEC_HAS_CONTENTS
+						   | SEC_IN_MEMORY
+						   | SEC_LINKER_CREATED
+						   | SEC_READONLY
+						   | SEC_CODE))
+		      || ! bfd_set_section_alignment (dynobj, splt, 1))
+		    return false;
+		}
+	    }
+
+	  if (h != NULL)
+	    offset = &h->plt.offset;
+	  else
+	    {
+	      if (local_plt_offsets == NULL)
+		{
+		  size_t size;
+		  unsigned int i;
+
+		  size = symtab_hdr->sh_info * sizeof (bfd_vma);
+		  local_plt_offsets = (bfd_vma *) bfd_alloc (abfd, size);
+		  if (local_plt_offsets == NULL)
+		    return false;
+		  elf_local_got_offsets (abfd) = local_plt_offsets;
+	
+		  for (i = 0; i < symtab_hdr->sh_info; i++)
+		    local_plt_offsets[i] = (bfd_vma) -1;
+		}
+	      offset = &local_plt_offsets[r_symndx];
+	    }
+
+	  if (*offset == (bfd_vma) -1)
+	    {
+	      *offset = splt->_raw_size;
+	      splt->_raw_size += 4;
+	    }
+	  break;
+
+	  /* This relocation describes the C++ object vtable hierarchy.
+	     Reconstruct it for later use during GC.  */
+        case R_XSTORMY16_GNU_VTINHERIT:
+          if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
+            return false;
+          break;
+ 
+	  /* This relocation describes which C++ vtable entries are actually
+	     used.  Record for later use during GC.  */
+        case R_XSTORMY16_GNU_VTENTRY:
+          if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+            return false;
+          break;
+	}
+    }
+
+  return true;
+}
+
+/* A subroutine of xstormy16_elf_relax_section.  If the global symbol H
+   is within the low 64k, remove any entry for it in the plt.  */
+
+struct relax_plt_data
+{
+  asection *splt;
+  boolean *again;
+};
+
+static boolean
+xstormy16_relax_plt_check (h, xdata)
+     struct elf_link_hash_entry *h;
+     PTR xdata;
+{
+  struct relax_plt_data *data = (struct relax_plt_data *) xdata;
+
+  if (h->plt.offset != (bfd_vma) -1)
+    {
+      bfd_vma address;
+
+      if (h->root.type == bfd_link_hash_undefined
+	  || h->root.type == bfd_link_hash_undefweak)
+	address = 0;
+      else
+	address = (h->root.u.def.section->output_section->vma
+		   + h->root.u.def.section->output_offset
+		   + h->root.u.def.value);
+
+      if (address <= 0xffff)
+	{
+	  h->plt.offset = -1;
+	  data->splt->_cooked_size -= 4;
+	  *data->again = true;
+	}
+    }
+
+  return true;
+}
+
+/* A subroutine of xstormy16_elf_relax_section.  If the global symbol H
+   previously had a plt entry, give it a new entry offset.  */
+
+static boolean
+xstormy16_relax_plt_realloc (h, xdata)
+     struct elf_link_hash_entry *h;
+     PTR xdata;
+{
+  bfd_vma *entry = (bfd_vma *) xdata;
+
+  if (h->plt.offset != (bfd_vma) -1)
+    {
+      h->plt.offset = *entry;
+      *entry += 4;
+    }
+
+  return true;
+}
+
+static boolean
+xstormy16_elf_relax_section (dynobj, splt, info, again)
+     bfd *dynobj;
+     asection *splt;
+     struct bfd_link_info *info;
+     boolean *again;
+{
+  struct relax_plt_data relax_plt_data;
+  bfd *ibfd;
+
+  /* Assume nothing changes.  */
+  *again = false;
+
+  if (info->relocateable)
+    return true;
+
+  /* We only relax the .plt section at the moment.  */
+  if (dynobj != elf_hash_table (info)->dynobj
+      || strcmp (splt->name, ".plt") != 0)
+    return true;
+
+  /* Quick check for an empty plt.  */
+  if (splt->_raw_size == 0)
+    return true;
+
+  /* If this is the first time we have been called for this section,
+     initialize the cooked size.  */
+  if (splt->_cooked_size == 0)
+    splt->_cooked_size = splt->_raw_size;
+
+  /* Map across all global symbols; see which ones happen to 
+     fall in the low 64k.  */
+  relax_plt_data.splt = splt;
+  relax_plt_data.again = again;
+  elf_link_hash_traverse (elf_hash_table (info), xstormy16_relax_plt_check,
+			  &relax_plt_data);
+
+  /* Likewise for local symbols, though that's somewhat less convenient
+     as we have walk the list of input bfds and swap in symbol data.  */
+  for (ibfd = info->input_bfds; ibfd ; ibfd = ibfd->link_next)
+    {
+      bfd_vma *local_plt_offsets = elf_local_got_offsets (ibfd);
+      Elf_Internal_Shdr *symtab_hdr;
+      Elf32_External_Sym *extsyms;
+      unsigned int idx;
+
+      if (! local_plt_offsets)
+	continue;
+
+      symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
+
+      if (symtab_hdr->contents != NULL)
+	extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
+      else
+	{
+	  extsyms = (Elf32_External_Sym *) bfd_malloc (symtab_hdr->sh_size);
+	  if (extsyms == NULL)
+	    return false;
+	  if (bfd_seek (ibfd, symtab_hdr->sh_offset, SEEK_SET) != 0
+	      || (bfd_bread (extsyms, symtab_hdr->sh_size, ibfd)
+		  != symtab_hdr->sh_size))
+	    {
+	      free (extsyms);
+	      return false;
+	    }
+	}
+
+      for (idx = 0; idx < symtab_hdr->sh_info; ++idx)
+	{
+	  Elf_Internal_Sym isym;
+	  asection *tsec;
+	  bfd_vma address;
+
+	  if (local_plt_offsets[idx] == (bfd_vma) -1)
+	    continue;
+
+	  bfd_elf32_swap_symbol_in (ibfd, extsyms + idx, &isym);
+	  if (isym.st_shndx == SHN_UNDEF)
+	    continue;
+	  else if (isym.st_shndx > 0 && isym.st_shndx < SHN_LORESERVE)
+	    tsec = bfd_section_from_elf_index (ibfd, isym.st_shndx);
+	  else if (isym.st_shndx == SHN_ABS)
+	    tsec = bfd_abs_section_ptr;
+	  else
+	    continue;
+
+	  address = (tsec->output_section->vma
+		     + tsec->output_offset
+		     + isym.st_value);
+	  if (address <= 0xffff)
+	    {
+	      local_plt_offsets[idx] = -1;
+	      splt->_cooked_size -= 4;
+	      *again = true;
+	    }
+	}
+
+      if (symtab_hdr->contents != extsyms)
+        free (extsyms);
+    }
+
+  /* If we changed anything, walk the symbols again to reallocate
+     .plt entry addresses.  */
+  if (*again && splt->_cooked_size > 0)
+    {
+      bfd_vma entry = 0;
+
+      elf_link_hash_traverse (elf_hash_table (info),
+			      xstormy16_relax_plt_realloc, &entry);
+
+      for (ibfd = info->input_bfds; ibfd ; ibfd = ibfd->link_next)
+	{
+	  bfd_vma *local_plt_offsets = elf_local_got_offsets (ibfd);
+	  unsigned int nlocals = elf_tdata (ibfd)->symtab_hdr.sh_info;
+	  unsigned int idx;
+
+	  if (! local_plt_offsets)
+	    continue;
+
+	  for (idx = 0; idx < nlocals; ++idx)
+	    if (local_plt_offsets[idx] != (bfd_vma) -1)
+	      {
+	        local_plt_offsets[idx] = entry;
+		entry += 4;
+	      }
+	}
+    }
+
+  splt->_raw_size = splt->_cooked_size;
+  return true;
+}
+
+static boolean
+xstormy16_elf_always_size_sections (output_bfd, info)
+     bfd *output_bfd ATTRIBUTE_UNUSED;
+     struct bfd_link_info *info;
+{
+  bfd *dynobj;
+  asection *splt;
+
+  if (info->relocateable)
+    return true;
+
+  dynobj = elf_hash_table (info)->dynobj;
+  if (dynobj == NULL)
+    return true;
+
+  splt = bfd_get_section_by_name (dynobj, ".plt");
+  BFD_ASSERT (splt != NULL);
+
+  splt->contents = (bfd_byte *) bfd_zalloc (dynobj, splt->_raw_size);
+  if (splt->contents == NULL)
+    return false;
+
+  return true;
+}
+
+/* Relocate an XSTORMY16 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 relocateable
+   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 relocateable 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 boolean
+xstormy16_elf_relocate_section (output_bfd, info, input_bfd, input_section,
+			   contents, relocs, local_syms, local_sections)
+     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;
+  bfd *dynobj;
+  asection *splt;
+
+  symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (input_bfd);
+  relend     = relocs + input_section->reloc_count;
+
+  dynobj = elf_hash_table (info)->dynobj;
+  splt = NULL;
+  if (dynobj != NULL)
+    splt = bfd_get_section_by_name (dynobj, ".plt");
+
+  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);
+      
+      if (   r_type == R_XSTORMY16_GNU_VTINHERIT
+	  || r_type == R_XSTORMY16_GNU_VTENTRY)
+	continue;
+      
+      r_symndx = ELF32_R_SYM (rel->r_info);
+
+      if (info->relocateable)
+	{
+	  /* This is a relocateable 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;
+	}
+
+      /* This is a final link.  */
+      howto  = xstormy16_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 = (sec->output_section->vma
+			+ sec->output_offset
+			+ sym->st_value);
+	  
+	  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;
+	}
+      else
+	{
+	  h = sym_hashes [r_symndx - symtab_hdr->sh_info];
+	  
+	  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);
+	    }
+	  else if (h->root.type == bfd_link_hash_undefweak)
+	    {
+	      relocation = 0;
+	    }
+	  else
+	    {
+	      if (! ((*info->callbacks->undefined_symbol)
+		     (info, h->root.root.string, input_bfd,
+		      input_section, rel->r_offset, true)))
+		return false;
+	      relocation = 0;
+	    }
+	}
+      
+      switch (ELF32_R_TYPE (rel->r_info))
+	{
+	case R_XSTORMY16_24:
+	  {
+	    bfd_vma reloc = relocation + rel->r_addend;
+	    unsigned int x;
+	  
+	    x = bfd_get_32 (input_bfd, contents + rel->r_offset);
+	    x &= 0x0000ff00;
+	    x |= reloc & 0xff;
+	    x |= (reloc << 8) & 0xffff0000;
+	    bfd_put_32 (input_bfd, x, contents + rel->r_offset);
+
+	    if (reloc & ~0xffffff)
+	      r = bfd_reloc_overflow;
+	    else
+	      r = bfd_reloc_ok;
+	    break;
+	  }
+
+	case R_XSTORMY16_FPTR16:
+	  {
+	    bfd_vma *plt_offset;
+
+	    if (h != NULL)
+	      plt_offset = &h->plt.offset;
+	    else
+	      plt_offset = elf_local_got_offsets (input_bfd) + r_symndx;
+
+	    if (relocation <= 0xffff)
+	      {
+	        /* If the symbol is in range for a 16-bit address, we should
+		   have deallocated the plt entry in relax_section.  */
+	        BFD_ASSERT (*plt_offset == (bfd_vma) -1);
+	      }
+	    else
+	      {
+		/* If the symbol is out of range for a 16-bit address,
+		   we must have allocated a plt entry.  */
+		BFD_ASSERT (*plt_offset != (bfd_vma) -1);
+
+		/* If this is the first time we've processed this symbol,
+		   fill in the plt entry with the correct symbol address.  */
+		if ((*plt_offset & 1) == 0)
+		  {
+		    unsigned int x;
+
+		    x = 0x00000200;  /* jmpf */
+		    x |= relocation & 0xff;
+		    x |= (relocation << 8) & 0xffff0000;
+		    bfd_put_32 (input_bfd, x, splt->contents + *plt_offset);
+		    *plt_offset |= 1;
+		  }
+
+		relocation = (splt->output_section->vma
+			      + splt->output_offset
+			      + (*plt_offset & -2));
+	      }
+	    r = _bfd_final_link_relocate (howto, input_bfd, input_section,
+					  contents, rel->r_offset,
+					  relocation, 0);
+	    break;
+	  }
+
+	default:
+	  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
+					contents, rel->r_offset,
+					relocation, rel->r_addend);
+	  break;
+	}
+
+      if (r != bfd_reloc_ok)
+	{
+	  const char * msg = (const char *) NULL;
+
+	  switch (r)
+	    {
+	    case bfd_reloc_overflow:
+	      r = info->callbacks->reloc_overflow
+		(info, 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;
+	}
+    }
+
+  return true;
+}
+
+/* This must exist if dynobj is ever set.  */
+
+static boolean
+xstormy16_elf_finish_dynamic_sections (abfd, info)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     struct bfd_link_info *info;
+{
+  bfd *dynobj;
+  asection *splt;
+
+  /* As an extra sanity check, verify that all plt entries have
+     been filled in.  */
+
+  if ((dynobj = elf_hash_table (info)->dynobj) != NULL
+      && (splt = bfd_get_section_by_name (dynobj, ".plt")) != NULL)
+    {
+      bfd_byte *contents = splt->contents;
+      unsigned int i, size = splt->_raw_size;
+      for (i = 0; i < size; i += 4)
+	{
+	  unsigned int x = bfd_get_32 (dynobj, contents + i);
+	  BFD_ASSERT (x != 0);
+	}
+    }
+
+  return true;
+}
+
+/* Return the section that should be marked against GC for a given
+   relocation.  */
+
+static asection *
+xstormy16_elf_gc_mark_hook (abfd, info, rel, h, sym)
+     bfd *                        abfd;
+     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))
+	{
+	case R_XSTORMY16_GNU_VTINHERIT:
+	case R_XSTORMY16_GNU_VTENTRY:
+	  break;
+
+	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 (abfd)
+	    && 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 (abfd, sym->st_shndx);
+	}
+    }
+
+  return NULL;
+}
+
+/* Update the got entry reference counts for the section being removed.  */
+
+static boolean
+xstormy16_elf_gc_sweep_hook (abfd, info, sec, relocs)
+     bfd *                     abfd ATTRIBUTE_UNUSED;
+     struct bfd_link_info *    info ATTRIBUTE_UNUSED;
+     asection *                sec ATTRIBUTE_UNUSED;
+     const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED;
+{
+  return true;
+}
+
+#define ELF_ARCH		bfd_arch_xstormy16
+#define ELF_MACHINE_CODE	EM_XSTORMY16
+#define ELF_MAXPAGESIZE		0x100
+
+#define TARGET_LITTLE_SYM       bfd_elf32_xstormy16_vec
+#define TARGET_LITTLE_NAME	"elf32-xstormy16"
+
+#define elf_info_to_howto_rel			NULL
+#define elf_info_to_howto			xstormy16_info_to_howto_rela
+#define elf_backend_relocate_section		xstormy16_elf_relocate_section
+#define elf_backend_gc_mark_hook		xstormy16_elf_gc_mark_hook
+#define elf_backend_gc_sweep_hook		xstormy16_elf_gc_sweep_hook
+#define elf_backend_check_relocs                xstormy16_elf_check_relocs
+#define elf_backend_always_size_sections \
+  xstormy16_elf_always_size_sections
+#define elf_backend_finish_dynamic_sections \
+  xstormy16_elf_finish_dynamic_sections
+
+#define elf_backend_can_gc_sections		1
+
+#define bfd_elf32_bfd_reloc_type_lookup		xstormy16_reloc_type_lookup
+#define bfd_elf32_bfd_relax_section		xstormy16_elf_relax_section
+
+#include "elf32-target.h"
Index: bfd/reloc.c
===================================================================
RCS file: /cvs/src/src/bfd/reloc.c,v
retrieving revision 1.50
diff -p -u -p -r1.50 reloc.c
--- bfd/reloc.c	2001/12/03 23:16:20	1.50
+++ bfd/reloc.c	2001/12/07 22:26:49
@@ -3253,6 +3253,15 @@ ENUMX
 ENUMDOC
   H8 elf Relocations.
 
+ENUM
+  BFD_RELOC_XSTORMY16_REL_12
+ENUMX
+  BFD_RELOC_XSTORMY16_24
+ENUMX
+  BFD_RELOC_XSTORMY16_FPTR16
+ENUMDOC
+  Sony Xstormy16 Relocations.
+
 ENDSENUM
   BFD_RELOC_UNUSED
 CODE_FRAGMENT
Index: bfd/targets.c
===================================================================
RCS file: /cvs/src/src/bfd/targets.c,v
retrieving revision 1.50
diff -p -u -p -r1.50 targets.c
--- bfd/targets.c	2001/10/31 09:01:21	1.50
+++ bfd/targets.c	2001/12/07 22:26:49
@@ -554,6 +554,7 @@ extern const bfd_target bfd_elf32_tradbi
 extern const bfd_target bfd_elf32_tradlittlemips_vec;
 extern const bfd_target bfd_elf32_us_cris_vec;
 extern const bfd_target bfd_elf32_v850_vec;
+extern const bfd_target bfd_elf32_xstormy16_vec;
 extern const bfd_target bfd_elf64_alpha_vec;
 extern const bfd_target bfd_elf64_big_generic_vec;
 extern const bfd_target bfd_elf64_bigmips_vec;
@@ -793,6 +794,7 @@ static const bfd_target * const _bfd_tar
 	&bfd_elf32_tradlittlemips_vec,
 	&bfd_elf32_us_cris_vec,
 	&bfd_elf32_v850_vec,
+	&bfd_elf32_xstormy16_vec,
 #ifdef BFD64
 	&bfd_elf64_alpha_vec,
 	&bfd_elf64_big_generic_vec,
Index: binutils/readelf.c
===================================================================
RCS file: /cvs/src/src/binutils/readelf.c,v
retrieving revision 1.136
diff -p -u -p -r1.136 readelf.c
--- binutils/readelf.c	2001/12/06 10:22:36	1.136
+++ binutils/readelf.c	2001/12/07 22:26:51
@@ -77,6 +77,7 @@
 #include "elf/i860.h"
 #include "elf/x86-64.h"
 #include "elf/s390.h"
+#include "elf/xstormy16.h"
 
 #include "bucomm.h"
 #include "getopt.h"
@@ -595,6 +596,7 @@ guess_is_rela (e_machine)
     case EM_S390:
     case EM_S390_OLD:
     case EM_MMIX:
+    case EM_XSTORMY16:
       return TRUE;
 
     case EM_MMA:
@@ -1009,6 +1011,10 @@ dump_relocations (file, rel_offset, rel_
         case EM_S390:
           rtype = elf_s390_reloc_type (type);
           break;
+
+	case EM_XSTORMY16:
+	  rtype = elf_xstormy16_reloc_type (type);
+	  break;
 	}
 
       if (rtype == NULL)
@@ -1396,6 +1402,7 @@ get_machine_name (e_machine)
     case EM_X86_64:		return "Advanced Micro Devices X86-64";
     case EM_S390_OLD:
     case EM_S390:               return "IBM S/390";
+    case EM_XSTORMY16:		return "Sanyo Xstormy16 CPU core";
     default:
       sprintf (buff, _("<unknown>: %x"), e_machine);
       return buff;
Index: gas/Makefile.am
===================================================================
RCS file: /cvs/src/src/gas/Makefile.am,v
retrieving revision 1.44
diff -p -u -p -r1.44 Makefile.am
--- gas/Makefile.am	2001/10/31 05:04:33	1.44
+++ gas/Makefile.am	2001/12/07 22:26:53
@@ -78,6 +78,7 @@ CPU_TYPES = \
 	vax \
 	w65 \
 	v850 \
+	xstormy16 \
 	z8k
 
 # Object format types.  This is only used for dependency information.
@@ -263,6 +264,7 @@ TARGET_CPU_CFILES = \
 	config/tc-vax.c \
 	config/tc-w65.c \
 	config/tc-v850.c \
+	config/tc-xstormy16.c \
 	config/tc-z8k.c
 
 TARGET_CPU_HFILES = \
@@ -307,6 +309,7 @@ TARGET_CPU_HFILES = \
 	config/tc-vax.h \
 	config/tc-w65.h \
 	config/tc-v850.h \
+	config/tc-xstormy16.h \
 	config/tc-z8k.h
 
 # OBJ files in config
Index: gas/configure.in
===================================================================
RCS file: /cvs/src/src/gas/configure.in,v
retrieving revision 1.84
diff -p -u -p -r1.84 configure.in
--- gas/configure.in	2001/11/04 19:06:38	1.84
+++ gas/configure.in	2001/12/07 22:26:54
@@ -449,12 +449,13 @@ changequote([,])dnl
 			    fmt=aout ;;
       vax-*-vms)            fmt=vms ;;
 
+      w65-*-*)              fmt=coff ;;
+
+      xstormy16-*-*)	    fmt=elf bfd_gas=yes ;;
 
       z8k-*-coff | z8k-*-sim)
 			    fmt=coff ;;
 
-      w65-*-*)              fmt=coff ;;
-
       *-*-aout | *-*-scout)
 			    fmt=aout ;;
       *-*-freebsd*)	    fmt=elf em=freebsd bfd_gas=yes ;;
@@ -570,6 +571,11 @@ changequote([,])dnl
 	  AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.])
 	fi
 	;;
+
+      xstormy16)
+	using_cgen=yes
+	;;
+
       *)
 	;;
     esac
Index: gas/config/tc-xstormy16.c
===================================================================
RCS file: tc-xstormy16.c
diff -N tc-xstormy16.c
--- gas/config/tc-xstormy16.c	Tue May  5 13:32:27 1998
+++ gas/config/tc-xstormy16.c	Fri Dec  7 14:26:54 2001
@@ -0,0 +1,650 @@
+/* tc-xstormy16.c -- Assembler for the Sanyo XSTORMY16.
+   Copyright (C) 2000, 2001 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, 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <stdio.h>
+#include "as.h"
+#include "subsegs.h"     
+#include "symcat.h"
+#include "opcodes/xstormy16-desc.h"
+#include "opcodes/xstormy16-opc.h"
+#include "cgen.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];
+}
+xstormy16_insn;
+
+const char comment_chars[]        = ";";
+const char line_comment_chars[]   = "#";
+const char line_separator_chars[] = "|";
+const char EXP_CHARS[]            = "eE";
+const char FLT_CHARS[]            = "dD";
+
+#define O_fptr_symbol	(O_max + 1)
+
+#define XSTORMY16_SHORTOPTS ""
+const char * md_shortopts = XSTORMY16_SHORTOPTS;
+
+struct option md_longopts[] =
+{
+  {NULL, no_argument, NULL, 0}
+};
+size_t md_longopts_size = sizeof (md_longopts);
+
+int
+md_parse_option (c, arg)
+     int    c ATTRIBUTE_UNUSED;
+     char * arg ATTRIBUTE_UNUSED;
+{
+  return 0;
+}
+
+void
+md_show_usage (stream)
+  FILE * stream;
+{
+  fprintf (stream, _(" XSTORMY16 specific command line options:\n"));
+} 
+
+/* The target specific pseudo-ops which we support.  */
+const pseudo_typeS md_pseudo_table[] =
+{
+  { "word",	cons,		4 },
+  { NULL, 	NULL, 		0 }
+};
+
+
+void
+md_begin ()
+{
+  /* Initialize the `cgen' interface.  */
+  
+  /* Set the machine number and endian.  */
+  gas_cgen_cpu_desc = xstormy16_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, 0,
+					  CGEN_CPU_OPEN_ENDIAN,
+					  CGEN_ENDIAN_LITTLE,
+					  CGEN_CPU_OPEN_END);
+  xstormy16_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, gas_cgen_parse_operand);
+}
+
+void
+md_assemble (str)
+     char * str;
+{
+  xstormy16_insn insn;
+  char *    errmsg;
+
+  /* Initialize GAS's cgen interface for a new instruction.  */
+  gas_cgen_init_parse ();
+
+  insn.insn = xstormy16_cgen_assemble_insn
+    (gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg);
+  
+  if (!insn.insn)
+    {
+      as_bad (errmsg);
+      return;
+    }
+
+  /* Doesn't really matter what we pass for RELAX_P here.  */
+  gas_cgen_finish_insn (insn.insn, insn.buffer,
+			CGEN_FIELDS_BITSIZE (& insn.fields), 0, NULL);
+}
+
+void 
+md_operand (e)
+     expressionS * e;
+{
+  if (*input_line_pointer != '@')
+    return;
+
+  if (strncmp (input_line_pointer+1, "fptr", 4) == 0)
+    {
+      input_line_pointer += 5;
+      SKIP_WHITESPACE ();
+      if (*input_line_pointer != '(')
+	{
+	  as_bad ("Expected '('");
+	  goto err;
+	}
+      input_line_pointer++;
+
+      expression (e);
+
+      if (*input_line_pointer != ')')
+	{
+	  as_bad ("Missing ')'");
+	  goto err;
+	}
+      input_line_pointer++;
+
+      if (e->X_op != O_symbol)
+	as_bad ("Not a symbolic expression");
+      else
+        e->X_op = O_fptr_symbol;
+    }
+
+  return;
+ err:
+  ignore_rest_of_line ();
+}
+
+/* Called while parsing data to create a fixup.
+   Create BFD_RELOC_XSTORMY16_FPTR16 relocations.  */
+
+void
+xstormy16_cons_fix_new (f, where, nbytes, exp)
+     fragS *f;
+     int where;
+     int nbytes;
+     expressionS *exp;
+{
+  bfd_reloc_code_real_type code;
+  fixS *fix;
+
+  if (exp->X_op == O_fptr_symbol)
+    {
+      if (nbytes != 2)
+	{
+	  as_bad ("unsupported fptr fixup size %d", nbytes);
+	  return;
+	}
+      exp->X_op = O_symbol;
+      code = BFD_RELOC_XSTORMY16_FPTR16;
+    }
+  else if (nbytes == 1)
+    code = BFD_RELOC_8;
+  else if (nbytes == 2)
+    code = BFD_RELOC_16;
+  else if (nbytes == 4)
+    code = BFD_RELOC_32;
+  else
+    {
+      as_bad ("unsupported fixup size %d", nbytes);
+      return;
+    }
+
+  fix = fix_new_exp (f, where, nbytes, exp, 0, code);
+}
+
+/* Called while parsing an instruction to create a fixup. 
+   Create BFD_RELOC_XSTORMY16_FPTR16 relocations.  */
+
+fixS *
+xstormy16_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp)
+     fragS *              frag;
+     int                  where;
+     const CGEN_INSN *    insn;
+     int                  length;
+     const CGEN_OPERAND * operand;
+     int                  opinfo;
+     expressionS *        exp;
+{
+  fixS *fixP;
+  operatorT op = exp->X_op;
+  
+  if (op == O_fptr_symbol)
+    exp->X_op = O_symbol;
+
+  fixP = gas_cgen_record_fixup_exp (frag, where, insn, length,
+				    operand, opinfo, exp);
+
+  if (op == O_fptr_symbol)
+    {
+      if (operand->type != XSTORMY16_OPERAND_IMM16)
+	as_bad ("unsupported fptr fixup");
+      else
+	{
+	  fixP->fx_r_type = BFD_RELOC_XSTORMY16_FPTR16;
+	  fixP->fx_where += 2;
+	}
+    }
+
+  return fixP;
+}
+
+valueT
+md_section_align (segment, size)
+     segT   segment;
+     valueT size;
+{
+  int align = bfd_get_section_alignment (stdoutput, segment);
+  return ((size + (1 << align) - 1) & (-1 << align));
+}
+
+symbolS *
+md_undefined_symbol (name)
+  char * name ATTRIBUTE_UNUSED;
+{
+  return 0;
+}
+
+/* Return an initial guess of the length by which a fragment must grow to
+   hold a branch to reach its destination.
+   Also updates fr_type/fr_subtype as necessary.
+
+   Called just before doing relaxation.
+   Any symbol that is now undefined will not become defined.
+   The guess for fr_var is ACTUALLY the growth beyond fr_fix.
+   Whatever we do to grow fr_fix or fr_var contributes to our returned value.
+   Although it may not be explicit in the frag, pretend fr_var starts with a
+   0 value.  */
+
+int
+md_estimate_size_before_relax (fragP, segment)
+     fragS * fragP ATTRIBUTE_UNUSED;
+     segT    segment ATTRIBUTE_UNUSED;
+{
+  /* No assembler relaxation is defined (or necessary) for this port.  */
+  abort ();
+} 
+
+/* *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.  */
+
+void
+md_convert_frag (abfd, sec, fragP)
+  bfd *   abfd ATTRIBUTE_UNUSED;
+  segT    sec ATTRIBUTE_UNUSED;
+  fragS * fragP ATTRIBUTE_UNUSED;
+{
+  /* No assembler relaxation is defined (or necessary) for this port.  */
+  abort ();
+}
+
+/* Functions concerning relocs.  */
+
+/* The location from which a PC relative jump should be calculated,
+   given a PC relative reloc.  */
+
+long
+md_pcrel_from_section (fixP, sec)
+     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 fixP->fx_frag->fr_address + fixP->fx_where;
+}
+
+/* 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.  */
+
+bfd_reloc_code_real_type
+md_cgen_lookup_reloc (insn, operand, fixP)
+     const CGEN_INSN *    insn ATTRIBUTE_UNUSED;
+     const CGEN_OPERAND * operand;
+     fixS *               fixP;
+{
+  switch (operand->type)
+    {
+    case XSTORMY16_OPERAND_IMM2:
+    case XSTORMY16_OPERAND_IMM3:
+    case XSTORMY16_OPERAND_IMM3B:
+    case XSTORMY16_OPERAND_IMM4:
+    case XSTORMY16_OPERAND_IMM12:
+    case XSTORMY16_OPERAND_HMEM8:
+      return BFD_RELOC_NONE;
+      
+    case XSTORMY16_OPERAND_IMM8:
+    case XSTORMY16_OPERAND_LMEM8:
+      return fixP->fx_pcrel ? BFD_RELOC_8_PCREL : BFD_RELOC_8;
+      
+    case XSTORMY16_OPERAND_IMM16:
+      fixP->fx_where += 2;
+      return fixP->fx_pcrel ? BFD_RELOC_16_PCREL : BFD_RELOC_16;
+
+    case XSTORMY16_OPERAND_ABS24:
+      return BFD_RELOC_XSTORMY16_24;
+
+    case XSTORMY16_OPERAND_REL8_2:
+    case XSTORMY16_OPERAND_REL8_4:
+      fixP->fx_pcrel = 1;
+      return BFD_RELOC_8_PCREL;
+
+    case XSTORMY16_OPERAND_REL12:
+      fixP->fx_where += 2;
+      /* Fall through... */
+    case XSTORMY16_OPERAND_REL12A:
+      fixP->fx_pcrel = 1;
+      return BFD_RELOC_XSTORMY16_REL_12;
+
+    default : /* avoid -Wall warning */
+      abort ();
+    }
+}
+
+/* See whether we need to force a relocation into the output file.
+   This is used to force out switch and PC relative relocations when
+   relaxing.  */
+
+int
+xstormy16_force_relocation (fix)
+     fixS * fix;
+{
+  switch (fix->fx_r_type)
+    {
+    case BFD_RELOC_XSTORMY16_FPTR16:
+    case BFD_RELOC_VTABLE_INHERIT:
+    case BFD_RELOC_VTABLE_ENTRY:
+      return 1;
+
+    default:
+      return 0;
+    }
+}
+
+/* Return true if a relocation against a symbol may be replaced with
+   a relocation against section+offset.  */
+
+boolean
+xstormy16_fix_adjustable (fixP)
+   fixS * fixP;
+{
+  if (fixP->fx_addsy == NULL)
+    return 1;
+  
+  /* Prevent all adjustments to global symbols. */
+  if (S_IS_EXTERN (fixP->fx_addsy))
+    return 0;
+  
+  if (S_IS_WEAK (fixP->fx_addsy))
+    return 0;
+  
+  return ! xstormy16_force_relocation (fixP);
+}
+
+/* This is a copy of gas_cgen_md_apply_fix3, with some enhancements to
+   do various things that would not be valid for all ports.  */
+
+void
+xstormy16_md_apply_fix3 (fixP, valueP, seg)
+     fixS *   fixP;
+     valueT * valueP;
+     segT     seg ATTRIBUTE_UNUSED;
+{
+  char *where = fixP->fx_frag->fr_literal + fixP->fx_where;
+  valueT value;
+  /* Canonical name, since used a lot.  */
+  CGEN_CPU_DESC cd = gas_cgen_cpu_desc;
+
+  /* This port has pc-relative relocs and DIFF_EXPR_OK defined, so
+     it must deal with turning a BFD_RELOC_{8,16,32,64} into a
+     BFD_RELOC_*_PCREL for the case of
+
+	.word something-.
+  */
+  if (fixP->fx_pcrel)
+    switch (fixP->fx_r_type)
+      {
+      case BFD_RELOC_8:
+	fixP->fx_r_type = BFD_RELOC_8_PCREL;
+	break;
+      case BFD_RELOC_16:
+	fixP->fx_r_type = BFD_RELOC_16_PCREL;
+	break;
+      case BFD_RELOC_32:
+	fixP->fx_r_type = BFD_RELOC_32_PCREL;
+	break;
+      case BFD_RELOC_64:
+	fixP->fx_r_type = BFD_RELOC_64_PCREL;
+	break;
+      default:
+	break;
+      }
+  
+  /* FIXME FIXME FIXME: The value we are passed in *valuep includes
+     the symbol values.  Since we are using BFD_ASSEMBLER, if we are
+     doing this relocation the code in write.c is going to call
+     bfd_install_relocation, which is also going to use the symbol
+     value.  That means that if the reloc is fully resolved we want to
+     use *valuep since bfd_install_relocation is not being used.
+     However, if the reloc is not fully resolved we do not want to use
+     *valuep, and must use fx_offset instead.  However, if the reloc
+     is PC relative, we do want to use *valuep since it includes the
+     result of md_pcrel_from.  This is confusing.  */
+
+  if (fixP->fx_addsy == (symbolS *) NULL)
+    {
+      value = *valueP;
+      fixP->fx_done = 1;
+    }
+  else if (fixP->fx_pcrel)
+    value = *valueP;
+  else
+    {
+      value = fixP->fx_offset;
+      if (fixP->fx_subsy != (symbolS *) NULL)
+	{
+	  if (S_GET_SEGMENT (fixP->fx_subsy) == absolute_section)
+	    value -= S_GET_VALUE (fixP->fx_subsy);
+	  else
+	    {
+	      /* We don't actually support subtracting a symbol.  */
+	      as_bad_where (fixP->fx_file, fixP->fx_line,
+			    _("expression too complex"));
+	    }
+	}
+    }
+
+  if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED)
+    {
+      int opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED;
+      const CGEN_OPERAND *operand = cgen_operand_lookup_by_num (cd, opindex);
+      const char *errmsg;
+      bfd_reloc_code_real_type reloc_type;
+      CGEN_FIELDS *fields = alloca (CGEN_CPU_SIZEOF_FIELDS (cd));
+      const CGEN_INSN *insn = fixP->fx_cgen.insn;
+
+      /* If the reloc has been fully resolved finish the operand here.  */
+      /* FIXME: This duplicates the capabilities of code in BFD.  */
+      if (fixP->fx_done)
+	{
+	  CGEN_CPU_SET_FIELDS_BITSIZE (cd) (fields, CGEN_INSN_BITSIZE (insn));
+	  CGEN_CPU_SET_VMA_OPERAND (cd) (cd, opindex, fields, (bfd_vma) value);
+
+#if CGEN_INT_INSN_P
+	  {
+	    CGEN_INSN_INT insn_value =
+	      cgen_get_insn_value (cd, where, CGEN_INSN_BITSIZE (insn));
+
+	    /* ??? 0 is passed for `pc'.  */
+	    errmsg = CGEN_CPU_INSERT_OPERAND (cd) (cd, opindex, fields,
+						   &insn_value, (bfd_vma) 0);
+	    cgen_put_insn_value (cd, where, CGEN_INSN_BITSIZE (insn),
+				 insn_value);
+	  }
+#else
+	  /* ??? 0 is passed for `pc'.  */
+	  errmsg = CGEN_CPU_INSERT_OPERAND (cd) (cd, opindex, fields, where,
+						 (bfd_vma) 0);
+#endif
+	  if (errmsg)
+	    as_bad_where (fixP->fx_file, fixP->fx_line, "%s", errmsg);
+	}
+
+      if (fixP->fx_done)
+	return 1;
+
+      /* The operand isn't fully resolved.  Determine a BFD reloc value
+	 based on the operand information and leave it to
+	 bfd_install_relocation.  Note that this doesn't work when
+	 partial_inplace == false.  */
+
+      reloc_type = md_cgen_lookup_reloc (insn, operand, fixP);
+      if (reloc_type != BFD_RELOC_NONE)
+	{
+	  fixP->fx_r_type = reloc_type;
+	}
+      else
+	{
+	  as_bad_where (fixP->fx_file, fixP->fx_line,
+			_("unresolved expression that must be resolved"));
+	  fixP->fx_done = 1;
+	  return 1;
+	}
+    }
+  else if (fixP->fx_done)
+    {
+      /* We're finished with this fixup.  Install it because
+	 bfd_install_relocation won't be called to do it.  */
+      switch (fixP->fx_r_type)
+	{
+	case BFD_RELOC_8:
+	  md_number_to_chars (where, value, 1);
+	  break;
+	case BFD_RELOC_16:
+	  md_number_to_chars (where, value, 2);
+	  break;
+	case BFD_RELOC_32:
+	  md_number_to_chars (where, value, 4);
+	  break;
+	case BFD_RELOC_64:
+	  md_number_to_chars (where, value, 8);
+	  break;
+	default:
+	  as_bad_where (fixP->fx_file, fixP->fx_line,
+			_("internal error: can't install fix for reloc type %d (`%s')"),
+			fixP->fx_r_type, bfd_get_reloc_code_name (fixP->fx_r_type));
+	  break;
+	}
+    }
+  else
+    {
+      /* bfd_install_relocation will be called to finish things up.  */
+    }
+
+  /* This is a RELA port.  Thus, it does not need to store a
+     value if it is going to make a reloc.  What's more, when
+     assembling a line like
+     
+     .byte global-0x7f00
+     
+     we'll get a spurious error message if we try to stuff 0x7f00 into
+     the byte.  */
+  if (! fixP->fx_done)
+    *valueP = 0;
+
+  /* Tuck `value' away for use by tc_gen_reloc.
+     See the comment describing fx_addnumber in write.h.
+     This field is misnamed (or misused :-).  */
+  fixP->fx_addnumber = value;
+
+  return 1;
+}
+
+
+/* Write a value out to the object file, using the appropriate endianness.  */
+
+void
+md_number_to_chars (buf, val, n)
+     char * buf;
+     valueT val;
+     int    n;
+{
+  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 (type, litP, sizeP)
+     char   type;
+     char * litP;
+     int *  sizeP;
+{
+  int              prec;
+  LITTLENUM_TYPE   words [MAX_LITTLENUMS];
+  LITTLENUM_TYPE   *wordP;
+  char *           t;
+
+  switch (type)
+    {
+    case 'f':
+    case 'F':
+      prec = 2;
+      break;
+
+    case 'd':
+    case 'D':
+      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);
+
+  *sizeP = prec * sizeof (LITTLENUM_TYPE);
+  /* This loops outputs the LITTLENUMs in REVERSE order; in accord with
+     the littleendianness of the processor.  */
+  for (wordP = words + prec - 1; prec--;)
+    {
+      md_number_to_chars (litP, (valueT) (*wordP--), sizeof (LITTLENUM_TYPE));
+      litP += sizeof (LITTLENUM_TYPE);
+    }
+     
+  return 0;
+}
Index: gas/config/tc-xstormy16.h
===================================================================
RCS file: tc-xstormy16.h
diff -N tc-xstormy16.h
--- gas/config/tc-xstormy16.h	Tue May  5 13:32:27 1998
+++ gas/config/tc-xstormy16.h	Fri Dec  7 14:26:54 2001
@@ -0,0 +1,69 @@
+/* tc-xstormy16.h -- Header file for tc-xstormy16.c.
+   Copyright (C) 2000, 2001 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, 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA. */
+
+#define TC_XSTORMY16
+
+#ifndef BFD_ASSEMBLER
+/* leading space so will compile with cc */
+ #error XSTORMY16 support requires BFD_ASSEMBLER
+#endif
+
+#define LISTING_HEADER "XSTORMY16 GAS "
+
+/* The target BFD architecture.  */
+#define TARGET_ARCH bfd_arch_xstormy16
+
+#define TARGET_FORMAT "elf32-xstormy16"
+
+#define TARGET_BYTES_BIG_ENDIAN 0
+
+/* call md_pcrel_from_section, not md_pcrel_from */
+long md_pcrel_from_section PARAMS ((struct fix *, segT));
+#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC)
+
+/* Permit temporary numeric labels.  */
+#define LOCAL_LABELS_FB 1
+
+#define DIFF_EXPR_OK		/* foo-. gets turned into PC relative relocs */
+
+/* We don't need to handle .word strangely.  */
+#define WORKING_DOT_WORD
+
+#define MD_APPLY_FIX3
+#define md_apply_fix3 xstormy16_md_apply_fix3
+
+#define obj_fix_adjustable(fixP) xstormy16_fix_adjustable (fixP)
+extern boolean xstormy16_fix_adjustable PARAMS ((struct fix *));
+
+#define TC_FORCE_RELOCATION(fix) xstormy16_force_relocation (fix)
+extern int xstormy16_force_relocation PARAMS ((struct fix *));
+
+#define TC_HANDLES_FX_DONE
+
+#define tc_gen_reloc gas_cgen_tc_gen_reloc
+
+/* 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 PARAMS ((struct fix *, segT));
+
+#define TC_CONS_FIX_NEW xstormy16_cons_fix_new
+extern void xstormy16_cons_fix_new PARAMS ((fragS *f, int, int, expressionS *));
+
+#define md_cgen_record_fixup_exp  xstormy16_cgen_record_fixup_exp
Index: gas/testsuite/gas/xstormy16/allinsn.d
===================================================================
RCS file: allinsn.d
diff -N allinsn.d
--- gas/testsuite/gas/xstormy16/allinsn.d	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/allinsn.d	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,1222 @@
+#as:
+#objdump: -dr
+#name: allinsn
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <movlmemimm>:
+   0:	00 78 00 00 	mov\.b 0x0,#0x0
+   4:	ff 79 ff ff 	mov\.w 0xff,#0xffff
+   8:	80 79 00 80 	mov\.w 0x80,#0x8000
+   c:	7f 78 ff 7f 	mov\.b 0x7f,#0x7fff
+  10:	01 79 01 00 	mov\.w 0x1,#0x1
+  14:	51 79 a9 fc 	mov\.w 0x51,#0xfca9
+  18:	f7 79 f6 a4 	mov\.w 0xf7,#0xa4f6
+  1c:	54 78 07 41 	mov\.b 0x54,#0x4107
+
+00000020 <movhmemimm>:
+  20:	00 7a 00 00 	mov\.b 0x7f00,#0x0
+  24:	ff 7b ff ff 	mov\.w 0x7fff,#0xffff
+  28:	80 7b 00 80 	mov\.w 0x7f80,#0x8000
+  2c:	7f 7a ff 7f 	mov\.b 0x7f7f,#0x7fff
+  30:	01 7b 01 00 	mov\.w 0x7f01,#0x1
+  34:	a5 7a 98 07 	mov\.b 0x7fa5,#0x798
+  38:	ba 7b fd 2c 	mov\.w 0x7fba,#0x2cfd
+  3c:	3f 7a d4 63 	mov\.b 0x7f3f,#0x63d4
+
+00000040 <movlgrmem>:
+  40:	00 80       	mov\.b r0,0x0
+  42:	ff 8f       	mov\.w r7,0xff
+  44:	80 89       	mov\.w r4,0x80
+  46:	7f 86       	mov\.b r3,0x7f
+  48:	01 83       	mov\.w r1,0x1
+  4a:	b3 8d       	mov\.w r6,0xb3
+  4c:	b7 81       	mov\.w r0,0xb7
+  4e:	29 86       	mov\.b r3,0x29
+
+00000050 <movhgrmem>:
+  50:	00 a0       	mov\.b r0,0x7f00
+  52:	ff af       	mov\.w r7,0x7fff
+  54:	80 a9       	mov\.w r4,0x7f80
+  56:	7f a6       	mov\.b r3,0x7f7f
+  58:	01 a3       	mov\.w r1,0x7f01
+  5a:	72 a4       	mov\.b r2,0x7f72
+  5c:	d2 a5       	mov\.w r2,0x7fd2
+  5e:	b5 ab       	mov\.w r5,0x7fb5
+
+00000060 <movlmemgr>:
+  60:	00 90       	mov\.b 0x0,r0
+  62:	ff 9f       	mov\.w 0xff,r7
+  64:	80 99       	mov\.w 0x80,r4
+  66:	7f 96       	mov\.b 0x7f,r3
+  68:	01 93       	mov\.w 0x1,r1
+  6a:	89 91       	mov\.w 0x89,r0
+  6c:	1a 91       	mov\.w 0x1a,r0
+  6e:	7f 98       	mov\.b 0x7f,r4
+
+00000070 <movhmemgr>:
+  70:	00 b0       	mov\.b 0x7f00,r0
+  72:	ff bf       	mov\.w 0x7fff,r7
+  74:	80 b9       	mov\.w 0x7f80,r4
+  76:	7f b6       	mov\.b 0x7f7f,r3
+  78:	01 b3       	mov\.w 0x7f01,r1
+  7a:	62 b7       	mov\.w 0x7f62,r3
+  7c:	87 bf       	mov\.w 0x7f87,r7
+  7e:	e5 b4       	mov\.b 0x7fe5,r2
+
+00000080 <movgrgri>:
+  80:	00 70       	mov\.b r0,\(r0\)
+  82:	f7 71       	mov\.w r7,\(r15\)
+  84:	84 71       	mov\.w r4,\(r8\)
+  86:	73 70       	mov\.b r3,\(r7\)
+  88:	11 71       	mov\.w r1,\(r1\)
+  8a:	46 71       	mov\.w r6,\(r4\)
+  8c:	c0 70       	mov\.b r0,\(r12\)
+  8e:	95 71       	mov\.w r5,\(r9\)
+
+00000090 <movgrgripostinc>:
+  90:	00 60       	mov\.b r0,\(r0\+\+\)
+  92:	f7 61       	mov\.w r7,\(r15\+\+\)
+  94:	84 61       	mov\.w r4,\(r8\+\+\)
+  96:	73 60       	mov\.b r3,\(r7\+\+\)
+  98:	11 61       	mov\.w r1,\(r1\+\+\)
+  9a:	84 61       	mov\.w r4,\(r8\+\+\)
+  9c:	c3 61       	mov\.w r3,\(r12\+\+\)
+  9e:	46 60       	mov\.b r6,\(r4\+\+\)
+
+000000a0 <movgrgripredec>:
+  a0:	00 68       	mov\.b r0,\(--r0\)
+  a2:	f7 69       	mov\.w r7,\(--r15\)
+  a4:	84 69       	mov\.w r4,\(--r8\)
+  a6:	73 68       	mov\.b r3,\(--r7\)
+  a8:	11 69       	mov\.w r1,\(--r1\)
+  aa:	95 69       	mov\.w r5,\(--r9\)
+  ac:	e4 69       	mov\.w r4,\(--r14\)
+  ae:	74 68       	mov\.b r4,\(--r7\)
+
+000000b0 <movgrigr>:
+  b0:	00 72       	mov\.b \(r0\),r0
+  b2:	f7 73       	mov\.w \(r15\),r7
+  b4:	84 73       	mov\.w \(r8\),r4
+  b6:	73 72       	mov\.b \(r7\),r3
+  b8:	11 73       	mov\.w \(r1\),r1
+  ba:	43 73       	mov\.w \(r4\),r3
+  bc:	36 72       	mov\.b \(r3\),r6
+  be:	70 73       	mov\.w \(r7\),r0
+
+000000c0 <movgripostincgr>:
+  c0:	00 62       	mov\.b \(r0\+\+\),r0
+  c2:	f7 63       	mov\.w \(r15\+\+\),r7
+  c4:	84 63       	mov\.w \(r8\+\+\),r4
+  c6:	73 62       	mov\.b \(r7\+\+\),r3
+  c8:	11 63       	mov\.w \(r1\+\+\),r1
+  ca:	c5 63       	mov\.w \(r12\+\+\),r5
+  cc:	42 62       	mov\.b \(r4\+\+\),r2
+  ce:	b6 62       	mov\.b \(r11\+\+\),r6
+
+000000d0 <movgripredecgr>:
+  d0:	00 6a       	mov\.b \(--r0\),r0
+  d2:	f7 6b       	mov\.w \(--r15\),r7
+  d4:	84 6b       	mov\.w \(--r8\),r4
+  d6:	73 6a       	mov\.b \(--r7\),r3
+  d8:	11 6b       	mov\.w \(--r1\),r1
+  da:	83 6a       	mov\.b \(--r8\),r3
+  dc:	b4 6a       	mov\.b \(--r11\),r4
+  de:	16 6b       	mov\.w \(--r1\),r6
+
+000000e0 <movgrgrii>:
+  e0:	08 70 00 00 	mov\.b r0,\(r0,0\)
+  e4:	ff 71 ff 0f 	mov\.w r7,\(r15,-1\)
+  e8:	8c 71 00 08 	mov\.w r4,\(r8,-2048\)
+  ec:	7b 70 ff 07 	mov\.b r3,\(r7,2047\)
+  f0:	19 71 01 00 	mov\.w r1,\(r1,1\)
+  f4:	8e 71 3c 0e 	mov\.w r6,\(r8,-452\)
+  f8:	bc 71 3c 02 	mov\.w r4,\(r11,572\)
+  fc:	19 70 4a 09 	mov\.b r1,\(r1,-1718\)
+
+00000100 <movgrgriipostinc>:
+ 100:	08 60 00 00 	mov\.b r0,\(r0\+\+,0\)
+ 104:	ff 61 ff 0f 	mov\.w r7,\(r15\+\+,-1\)
+ 108:	8c 61 00 08 	mov\.w r4,\(r8\+\+,-2048\)
+ 10c:	7b 60 ff 07 	mov\.b r3,\(r7\+\+,2047\)
+ 110:	19 61 01 00 	mov\.w r1,\(r1\+\+,1\)
+ 114:	0e 61 c0 0f 	mov\.w r6,\(r0\+\+,-64\)
+ 118:	ff 60 24 04 	mov\.b r7,\(r15\+\+,1060\)
+ 11c:	78 60 4f 03 	mov\.b r0,\(r7\+\+,847\)
+
+00000120 <movgrgriipredec>:
+ 120:	08 68 00 00 	mov\.b r0,\(--r0,0\)
+ 124:	ff 69 ff 0f 	mov\.w r7,\(--r15,-1\)
+ 128:	8c 69 00 08 	mov\.w r4,\(--r8,-2048\)
+ 12c:	7b 68 ff 07 	mov\.b r3,\(--r7,2047\)
+ 130:	19 69 01 00 	mov\.w r1,\(--r1,1\)
+ 134:	f8 69 f4 06 	mov\.w r0,\(--r15,1780\)
+ 138:	1e 69 e2 05 	mov\.w r6,\(--r1,1506\)
+ 13c:	3f 69 0f 08 	mov\.w r7,\(--r3,-2033\)
+
+00000140 <movgriigr>:
+ 140:	08 72 00 00 	mov\.b \(r0,0\),r0
+ 144:	ff 73 ff 0f 	mov\.w \(r15,-1\),r7
+ 148:	8c 73 00 08 	mov\.w \(r8,-2048\),r4
+ 14c:	7b 72 ff 07 	mov\.b \(r7,2047\),r3
+ 150:	19 73 01 00 	mov\.w \(r1,1\),r1
+ 154:	7d 73 9c 07 	mov\.w \(r7,1948\),r5
+ 158:	3c 72 b4 0c 	mov\.b \(r3,-844\),r4
+ 15c:	f8 73 a8 06 	mov\.w \(r15,1704\),r0
+
+00000160 <movgriipostincgr>:
+ 160:	08 62 00 00 	mov\.b \(r0\+\+,0\),r0
+ 164:	ff 63 ff 0f 	mov\.w \(r15\+\+,-1\),r7
+ 168:	8c 63 00 08 	mov\.w \(r8\+\+,-2048\),r4
+ 16c:	7b 62 ff 07 	mov\.b \(r7\+\+,2047\),r3
+ 170:	19 63 01 00 	mov\.w \(r1\+\+,1\),r1
+ 174:	2f 63 50 0f 	mov\.w \(r2\+\+,-176\),r7
+ 178:	8c 63 6d 05 	mov\.w \(r8\+\+,1389\),r4
+ 17c:	38 62 2f 00 	mov\.b \(r3\+\+,47\),r0
+
+00000180 <movgriipredecgr>:
+ 180:	08 6a 00 00 	mov\.b \(--r0,0\),r0
+ 184:	ff 6b ff 0f 	mov\.w \(--r15,-1\),r7
+ 188:	8c 6b 00 08 	mov\.w \(--r8,-2048\),r4
+ 18c:	7b 6a ff 07 	mov\.b \(--r7,2047\),r3
+ 190:	19 6b 01 00 	mov\.w \(--r1,1\),r1
+ 194:	8c 6a ec 03 	mov\.b \(--r8,1004\),r4
+ 198:	ea 6b 5c 0a 	mov\.w \(--r14,-1444\),r2
+ 19c:	5c 6a 61 0c 	mov\.b \(--r5,-927\),r4
+
+000001a0 <movgrgr>:
+ 1a0:	00 46       	mov r0,r0
+ 1a2:	ff 46       	mov r15,r15
+ 1a4:	88 46       	mov r8,r8
+ 1a6:	77 46       	mov r7,r7
+ 1a8:	11 46       	mov r1,r1
+ 1aa:	e9 46       	mov r9,r14
+ 1ac:	f7 46       	mov r7,r15
+ 1ae:	fc 46       	mov r12,r15
+
+000001b0 <movimm8>:
+ 1b0:	00 47       	mov Rx,#0x0
+ 1b2:	ff 47       	mov Rx,#0xff
+ 1b4:	80 47       	mov Rx,#0x80
+ 1b6:	7f 47       	mov Rx,#0x7f
+ 1b8:	01 47       	mov Rx,#0x1
+ 1ba:	88 47       	mov Rx,#0x88
+ 1bc:	53 47       	mov Rx,#0x53
+ 1be:	68 47       	mov Rx,#0x68
+
+000001c0 <movwimm8>:
+ 1c0:	00 47       	mov Rx,#0x0
+ 1c2:	ff 47       	mov Rx,#0xff
+ 1c4:	80 47       	mov Rx,#0x80
+ 1c6:	7f 47       	mov Rx,#0x7f
+ 1c8:	01 47       	mov Rx,#0x1
+ 1ca:	5c 47       	mov Rx,#0x5c
+ 1cc:	61 47       	mov Rx,#0x61
+ 1ce:	04 47       	mov Rx,#0x4
+
+000001d0 <movgrimm8>:
+ 1d0:	00 21       	mov r0,#0x0
+ 1d2:	ff 2f       	mov r7,#0xff
+ 1d4:	80 29       	mov r4,#0x80
+ 1d6:	7f 27       	mov r3,#0x7f
+ 1d8:	01 23       	mov r1,#0x1
+ 1da:	ce 25       	mov r2,#0xce
+ 1dc:	37 29       	mov r4,#0x37
+ 1de:	03 25       	mov r2,#0x3
+
+000001e0 <movwgrimm8>:
+ 1e0:	00 21       	mov r0,#0x0
+ 1e2:	ff 2f       	mov r7,#0xff
+ 1e4:	80 29       	mov r4,#0x80
+ 1e6:	7f 27       	mov r3,#0x7f
+ 1e8:	01 23       	mov r1,#0x1
+ 1ea:	f3 29       	mov r4,#0xf3
+ 1ec:	37 27       	mov r3,#0x37
+ 1ee:	6c 25       	mov r2,#0x6c
+
+000001f0 <movgrimm16>:
+ 1f0:	00 21       	mov r0,#0x0
+ 1f2:	3f 31 ff ff 	mov r15,#0xffff
+ 1f6:	38 31 00 80 	mov r8,#0x8000
+ 1fa:	37 31 ff 7f 	mov r7,#0x7fff
+ 1fe:	01 23       	mov r1,#0x1
+ 200:	34 31 62 4e 	mov r4,#0x4e62
+ 204:	33 31 16 1c 	mov r3,#0x1c16
+ 208:	32 31 64 3e 	mov r2,#0x3e64
+
+0000020c <movwgrimm16>:
+ 20c:	00 21       	mov r0,#0x0
+ 20e:	3f 31 ff ff 	mov r15,#0xffff
+ 212:	38 31 00 80 	mov r8,#0x8000
+ 216:	37 31 ff 7f 	mov r7,#0x7fff
+ 21a:	01 23       	mov r1,#0x1
+ 21c:	36 31 08 41 	mov r6,#0x4108
+ 220:	38 31 f1 68 	mov r8,#0x68f1
+ 224:	3a 31 2a 4e 	mov r10,#0x4e2a
+
+00000228 <movlowgr>:
+ 228:	c0 30       	mov\.b r0,RxL
+ 22a:	cf 30       	mov\.b r15,RxL
+ 22c:	c8 30       	mov\.b r8,RxL
+ 22e:	c7 30       	mov\.b r7,RxL
+ 230:	c1 30       	mov\.b r1,RxL
+ 232:	cb 30       	mov\.b r11,RxL
+ 234:	c5 30       	mov\.b r5,RxL
+ 236:	c2 30       	mov\.b r2,RxL
+
+00000238 <movhighgr>:
+ 238:	d0 30       	mov\.b r0,RxH
+ 23a:	df 30       	mov\.b r15,RxH
+ 23c:	d8 30       	mov\.b r8,RxH
+ 23e:	d7 30       	mov\.b r7,RxH
+ 240:	d1 30       	mov\.b r1,RxH
+ 242:	d2 30       	mov\.b r2,RxH
+ 244:	d7 30       	mov\.b r7,RxH
+ 246:	d2 30       	mov\.b r2,RxH
+
+00000248 <movfgrgri>:
+ 248:	00 74       	movf\.b r0,\(r0\)
+ 24a:	f7 75       	movf\.w r7,\(r15\)
+ 24c:	84 75       	movf\.w r4,\(r8\)
+ 24e:	73 74       	movf\.b r3,\(r7\)
+ 250:	11 75       	movf\.w r1,\(r1\)
+ 252:	f6 74       	movf\.b r6,\(r15\)
+ 254:	a1 74       	movf\.b r1,\(r10\)
+ 256:	16 74       	movf\.b r6,\(r1\)
+
+00000258 <movfgrgripostinc>:
+ 258:	00 64       	movf\.b r0,\(r0\+\+\)
+ 25a:	f7 65       	movf\.w r7,\(r15\+\+\)
+ 25c:	84 65       	movf\.w r4,\(r8\+\+\)
+ 25e:	73 64       	movf\.b r3,\(r7\+\+\)
+ 260:	11 65       	movf\.w r1,\(r1\+\+\)
+ 262:	52 64       	movf\.b r2,\(r5\+\+\)
+ 264:	a5 65       	movf\.w r5,\(r10\+\+\)
+ 266:	57 65       	movf\.w r7,\(r5\+\+\)
+
+00000268 <movfgrgripredec>:
+ 268:	00 6c       	movf\.b r0,\(--r0\)
+ 26a:	f7 6d       	movf\.w r7,\(--r15\)
+ 26c:	84 6d       	movf\.w r4,\(--r8\)
+ 26e:	73 6c       	movf\.b r3,\(--r7\)
+ 270:	11 6d       	movf\.w r1,\(--r1\)
+ 272:	a6 6d       	movf\.w r6,\(--r10\)
+ 274:	e1 6c       	movf\.b r1,\(--r14\)
+ 276:	73 6d       	movf\.w r3,\(--r7\)
+
+00000278 <movfgrigr>:
+ 278:	00 76       	movf\.b \(r0\),r0
+ 27a:	f7 77       	movf\.w \(r15\),r7
+ 27c:	84 77       	movf\.w \(r8\),r4
+ 27e:	73 76       	movf\.b \(r7\),r3
+ 280:	11 77       	movf\.w \(r1\),r1
+ 282:	54 76       	movf\.b \(r5\),r4
+ 284:	34 76       	movf\.b \(r3\),r4
+ 286:	c3 77       	movf\.w \(r12\),r3
+
+00000288 <movfgripostincgr>:
+ 288:	00 66       	movf\.b \(r0\+\+\),r0
+ 28a:	f7 67       	movf\.w \(r15\+\+\),r7
+ 28c:	84 67       	movf\.w \(r8\+\+\),r4
+ 28e:	73 66       	movf\.b \(r7\+\+\),r3
+ 290:	11 67       	movf\.w \(r1\+\+\),r1
+ 292:	95 66       	movf\.b \(r9\+\+\),r5
+ 294:	a4 67       	movf\.w \(r10\+\+\),r4
+ 296:	91 66       	movf\.b \(r9\+\+\),r1
+
+00000298 <movfgripredecgr>:
+ 298:	00 6e       	movf\.b \(--r0\),r0
+ 29a:	f7 6f       	movf\.w \(--r15\),r7
+ 29c:	84 6f       	movf\.w \(--r8\),r4
+ 29e:	73 6e       	movf\.b \(--r7\),r3
+ 2a0:	11 6f       	movf\.w \(--r1\),r1
+ 2a2:	02 6e       	movf\.b \(--r0\),r2
+ 2a4:	b2 6f       	movf\.w \(--r11\),r2
+ 2a6:	a5 6e       	movf\.b \(--r10\),r5
+
+000002a8 <movfgrgrii>:
+ 2a8:	08 74 00 00 	movf\.b r0,\(r0,r0,0\)
+ 2ac:	ff 75 ff 7f 	movf\.w r7,\(r7,r15,-1\)
+ 2b0:	8c 75 00 48 	movf\.w r4,\(r4,r8,-2048\)
+ 2b4:	7b 74 ff 37 	movf\.b r3,\(r3,r7,2047\)
+ 2b8:	19 75 01 10 	movf\.w r1,\(r1,r1,1\)
+ 2bc:	0f 74 c1 75 	movf\.b r7,\(r7,r0,1473\)
+ 2c0:	9a 75 0e 0a 	movf\.w r2,\(r0,r9,-1522\)
+ 2c4:	1a 75 e0 51 	movf\.w r2,\(r5,r1,480\)
+
+000002c8 <movfgrgriipostinc>:
+ 2c8:	08 64 00 00 	movf\.b r0,\(r0,r0\+\+,0\)
+ 2cc:	ff 65 ff 7f 	movf\.w r7,\(r7,r15\+\+,-1\)
+ 2d0:	8c 65 00 48 	movf\.w r4,\(r4,r8\+\+,-2048\)
+ 2d4:	7b 64 ff 37 	movf\.b r3,\(r3,r7\+\+,2047\)
+ 2d8:	19 65 01 10 	movf\.w r1,\(r1,r1\+\+,1\)
+ 2dc:	29 64 76 05 	movf\.b r1,\(r0,r2\+\+,1398\)
+ 2e0:	9c 65 f6 0c 	movf\.w r4,\(r0,r9\+\+,-778\)
+ 2e4:	e9 65 1c 56 	movf\.w r1,\(r5,r14\+\+,1564\)
+
+000002e8 <movfgrgriipredec>:
+ 2e8:	08 6c 00 00 	movf\.b r0,\(r0,--r0,0\)
+ 2ec:	ff 6d ff 7f 	movf\.w r7,\(r7,--r15,-1\)
+ 2f0:	8c 6d 00 48 	movf\.w r4,\(r4,--r8,-2048\)
+ 2f4:	7b 6c ff 37 	movf\.b r3,\(r3,--r7,2047\)
+ 2f8:	19 6d 01 10 	movf\.w r1,\(r1,--r1,1\)
+ 2fc:	7e 6c fe 00 	movf\.b r6,\(r0,--r7,254\)
+ 300:	cd 6d 89 46 	movf\.w r5,\(r4,--r12,1673\)
+ 304:	a8 6c da 0f 	movf\.b r0,\(r0,--r10,-38\)
+
+00000308 <movfgriigr>:
+ 308:	08 76 00 00 	movf\.b \(r0,r0,0\),r0
+ 30c:	ff 77 ff 7f 	movf\.w \(r7,r15,-1\),r7
+ 310:	8c 77 00 48 	movf\.w \(r4,r8,-2048\),r4
+ 314:	7b 76 ff 37 	movf\.b \(r3,r7,2047\),r3
+ 318:	19 77 01 10 	movf\.w \(r1,r1,1\),r1
+ 31c:	2b 77 9c 79 	movf\.w \(r7,r2,-1636\),r3
+ 320:	c9 77 5a 66 	movf\.w \(r6,r12,1626\),r1
+ 324:	e8 76 04 36 	movf\.b \(r3,r14,1540\),r0
+
+00000328 <movfgriipostincgr>:
+ 328:	08 66 00 00 	movf\.b \(r0,r0\+\+,0\),r0
+ 32c:	ff 67 ff 7f 	movf\.w \(r7,r15\+\+,-1\),r7
+ 330:	8c 67 00 48 	movf\.w \(r4,r8\+\+,-2048\),r4
+ 334:	7b 66 ff 37 	movf\.b \(r3,r7\+\+,2047\),r3
+ 338:	19 67 01 10 	movf\.w \(r1,r1\+\+,1\),r1
+ 33c:	db 66 d2 71 	movf\.b \(r7,r13\+\+,466\),r3
+ 340:	bc 66 fa 30 	movf\.b \(r3,r11\+\+,250\),r4
+ 344:	af 66 38 2a 	movf\.b \(r2,r10\+\+,-1480\),r7
+
+00000348 <movfgriipredecgr>:
+ 348:	08 6e 00 00 	movf\.b \(r0,--r0,0\),r0
+ 34c:	ff 6f ff 7f 	movf\.w \(r7,--r15,-1\),r7
+ 350:	8c 6f 00 48 	movf\.w \(r4,--r8,-2048\),r4
+ 354:	7b 6e ff 37 	movf\.b \(r3,--r7,2047\),r3
+ 358:	19 6f 01 10 	movf\.w \(r1,--r1,1\),r1
+ 35c:	a8 6e a0 5d 	movf\.b \(r5,--r10,-608\),r0
+ 360:	bf 6e 3f 13 	movf\.b \(r1,--r11,831\),r7
+ 364:	fe 6f 0c 78 	movf\.w \(r7,--r15,-2036\),r6
+
+00000368 <maskgrgr>:
+ 368:	00 33       	mask r0,r0
+ 36a:	ff 33       	mask r15,r15
+ 36c:	88 33       	mask r8,r8
+ 36e:	77 33       	mask r7,r7
+ 370:	11 33       	mask r1,r1
+ 372:	04 33       	mask r4,r0
+ 374:	b6 33       	mask r6,r11
+ 376:	48 33       	mask r8,r4
+
+00000378 <maskgrimm16>:
+ 378:	e0 30 00 00 	mask r0,#0x0
+ 37c:	ef 30 ff ff 	mask r15,#0xffff
+ 380:	e8 30 00 80 	mask r8,#0x8000
+ 384:	e7 30 ff 7f 	mask r7,#0x7fff
+ 388:	e1 30 01 00 	mask r1,#0x1
+ 38c:	e7 30 e9 46 	mask r7,#0x46e9
+ 390:	ef 30 64 1d 	mask r15,#0x1d64
+ 394:	ee 30 2d 86 	mask r14,#0x862d
+
+00000398 <pushgr>:
+ 398:	80 00       	push r0
+ 39a:	8f 00       	push r15
+ 39c:	88 00       	push r8
+ 39e:	87 00       	push r7
+ 3a0:	81 00       	push r1
+ 3a2:	89 00       	push r9
+ 3a4:	84 00       	push r4
+ 3a6:	83 00       	push r3
+
+000003a8 <popgr>:
+ 3a8:	90 00       	pop r0
+ 3aa:	9f 00       	pop r15
+ 3ac:	98 00       	pop r8
+ 3ae:	97 00       	pop r7
+ 3b0:	91 00       	pop r1
+ 3b2:	93 00       	pop r3
+ 3b4:	92 00       	pop r2
+ 3b6:	9c 00       	pop r12
+
+000003b8 <swpn>:
+ 3b8:	90 30       	swpn r0
+ 3ba:	9f 30       	swpn r15
+ 3bc:	98 30       	swpn r8
+ 3be:	97 30       	swpn r7
+ 3c0:	91 30       	swpn r1
+ 3c2:	9f 30       	swpn r15
+ 3c4:	94 30       	swpn r4
+ 3c6:	93 30       	swpn r3
+
+000003c8 <swpb>:
+ 3c8:	80 30       	swpb r0
+ 3ca:	8f 30       	swpb r15
+ 3cc:	88 30       	swpb r8
+ 3ce:	87 30       	swpb r7
+ 3d0:	81 30       	swpb r1
+ 3d2:	82 30       	swpb r2
+ 3d4:	8c 30       	swpb r12
+ 3d6:	82 30       	swpb r2
+
+000003d8 <swpw>:
+ 3d8:	00 32       	swpw r0,r0
+ 3da:	ff 32       	swpw r15,r15
+ 3dc:	88 32       	swpw r8,r8
+ 3de:	77 32       	swpw r7,r7
+ 3e0:	11 32       	swpw r1,r1
+ 3e2:	4c 32       	swpw r12,r4
+ 3e4:	28 32       	swpw r8,r2
+ 3e6:	d5 32       	swpw r5,r13
+
+000003e8 <andgrgr>:
+ 3e8:	00 40       	and r0,r0
+ 3ea:	ff 40       	and r15,r15
+ 3ec:	88 40       	and r8,r8
+ 3ee:	77 40       	and r7,r7
+ 3f0:	11 40       	and r1,r1
+ 3f2:	22 40       	and r2,r2
+ 3f4:	5f 40       	and r15,r5
+ 3f6:	57 40       	and r7,r5
+
+000003f8 <andimm8>:
+ 3f8:	00 41       	and Rx,#0x0
+ 3fa:	ff 41       	and Rx,#0xff
+ 3fc:	80 41       	and Rx,#0x80
+ 3fe:	7f 41       	and Rx,#0x7f
+ 400:	01 41       	and Rx,#0x1
+ 402:	ce 41       	and Rx,#0xce
+ 404:	0b 41       	and Rx,#0xb
+ 406:	e8 41       	and Rx,#0xe8
+
+00000408 <andgrimm16>:
+ 408:	00 31 00 00 	and r0,#0x0
+ 40c:	0f 31 ff ff 	and r15,#0xffff
+ 410:	08 31 00 80 	and r8,#0x8000
+ 414:	07 31 ff 7f 	and r7,#0x7fff
+ 418:	01 31 01 00 	and r1,#0x1
+ 41c:	0a 31 4d 43 	and r10,#0x434d
+ 420:	0b 31 0b f0 	and r11,#0xf00b
+ 424:	05 31 4d b7 	and r5,#0xb74d
+
+00000428 <orgrgr>:
+ 428:	00 42       	or r0,r0
+ 42a:	ff 42       	or r15,r15
+ 42c:	88 42       	or r8,r8
+ 42e:	77 42       	or r7,r7
+ 430:	11 42       	or r1,r1
+ 432:	53 42       	or r3,r5
+ 434:	fe 42       	or r14,r15
+ 436:	c5 42       	or r5,r12
+
+00000438 <orimm8>:
+ 438:	00 43       	or Rx,#0x0
+ 43a:	ff 43       	or Rx,#0xff
+ 43c:	80 43       	or Rx,#0x80
+ 43e:	7f 43       	or Rx,#0x7f
+ 440:	01 43       	or Rx,#0x1
+ 442:	04 43       	or Rx,#0x4
+ 444:	26 43       	or Rx,#0x26
+ 446:	34 43       	or Rx,#0x34
+
+00000448 <orgrimm16>:
+ 448:	10 31 00 00 	or r0,#0x0
+ 44c:	1f 31 ff ff 	or r15,#0xffff
+ 450:	18 31 00 80 	or r8,#0x8000
+ 454:	17 31 ff 7f 	or r7,#0x7fff
+ 458:	11 31 01 00 	or r1,#0x1
+ 45c:	12 31 33 fc 	or r2,#0xfc33
+ 460:	12 31 db 47 	or r2,#0x47db
+ 464:	11 31 53 f6 	or r1,#0xf653
+
+00000468 <xorgrgr>:
+ 468:	00 44       	xor r0,r0
+ 46a:	ff 44       	xor r15,r15
+ 46c:	88 44       	xor r8,r8
+ 46e:	77 44       	xor r7,r7
+ 470:	11 44       	xor r1,r1
+ 472:	1e 44       	xor r14,r1
+ 474:	99 44       	xor r9,r9
+ 476:	8c 44       	xor r12,r8
+
+00000478 <xorimm8>:
+ 478:	00 45       	xor Rx,#0x0
+ 47a:	ff 45       	xor Rx,#0xff
+ 47c:	80 45       	xor Rx,#0x80
+ 47e:	7f 45       	xor Rx,#0x7f
+ 480:	01 45       	xor Rx,#0x1
+ 482:	d0 45       	xor Rx,#0xd0
+ 484:	7e 45       	xor Rx,#0x7e
+ 486:	37 45       	xor Rx,#0x37
+
+00000488 <xorgrimm16>:
+ 488:	20 31 00 00 	xor r0,#0x0
+ 48c:	2f 31 ff ff 	xor r15,#0xffff
+ 490:	28 31 00 80 	xor r8,#0x8000
+ 494:	27 31 ff 7f 	xor r7,#0x7fff
+ 498:	21 31 01 00 	xor r1,#0x1
+ 49c:	2f 31 75 dc 	xor r15,#0xdc75
+ 4a0:	23 31 85 03 	xor r3,#0x385
+ 4a4:	22 31 99 90 	xor r2,#0x9099
+
+000004a8 <notgr>:
+ 4a8:	b0 30       	not r0
+ 4aa:	bf 30       	not r15
+ 4ac:	b8 30       	not r8
+ 4ae:	b7 30       	not r7
+ 4b0:	b1 30       	not r1
+ 4b2:	b4 30       	not r4
+ 4b4:	b3 30       	not r3
+ 4b6:	b3 30       	not r3
+
+000004b8 <addgrgr>:
+ 4b8:	00 49       	add r0,r0
+ 4ba:	ff 49       	add r15,r15
+ 4bc:	88 49       	add r8,r8
+ 4be:	77 49       	add r7,r7
+ 4c0:	11 49       	add r1,r1
+ 4c2:	7c 49       	add r12,r7
+ 4c4:	a1 49       	add r1,r10
+ 4c6:	ee 49       	add r14,r14
+
+000004c8 <addgrimm4>:
+ 4c8:	00 51       	add r0,#0x0
+ 4ca:	ff 51       	add r15,#0xf
+ 4cc:	88 51       	add r8,#0x8
+ 4ce:	77 51       	add r7,#0x7
+ 4d0:	11 51       	add r1,#0x1
+ 4d2:	07 51       	add r7,#0x0
+ 4d4:	9a 51       	add r10,#0x9
+ 4d6:	87 51       	add r7,#0x8
+
+000004d8 <addimm8>:
+ 4d8:	00 59       	add Rx,#0x0
+ 4da:	ff 59       	add Rx,#0xff
+ 4dc:	80 59       	add Rx,#0x80
+ 4de:	7f 59       	add Rx,#0x7f
+ 4e0:	01 59       	add Rx,#0x1
+ 4e2:	19 59       	add Rx,#0x19
+ 4e4:	f7 59       	add Rx,#0xf7
+ 4e6:	dd 59       	add Rx,#0xdd
+
+000004e8 <addgrimm16>:
+ 4e8:	00 51       	add r0,#0x0
+ 4ea:	4f 31 ff 00 	add r15,#0xff
+ 4ee:	48 31 80 00 	add r8,#0x80
+ 4f2:	47 31 7f 00 	add r7,#0x7f
+ 4f6:	11 51       	add r1,#0x1
+ 4f8:	43 31 63 00 	add r3,#0x63
+ 4fc:	f0 51       	add r0,#0xf
+ 4fe:	47 31 d6 00 	add r7,#0xd6
+
+00000502 <adcgrgr>:
+ 502:	00 4b       	adc r0,r0
+ 504:	ff 4b       	adc r15,r15
+ 506:	88 4b       	adc r8,r8
+ 508:	77 4b       	adc r7,r7
+ 50a:	11 4b       	adc r1,r1
+ 50c:	d2 4b       	adc r2,r13
+ 50e:	ae 4b       	adc r14,r10
+ 510:	f2 4b       	adc r2,r15
+
+00000512 <adcgrimm4>:
+ 512:	00 53       	adc r0,#0x0
+ 514:	ff 53       	adc r15,#0xf
+ 516:	88 53       	adc r8,#0x8
+ 518:	77 53       	adc r7,#0x7
+ 51a:	11 53       	adc r1,#0x1
+ 51c:	1f 53       	adc r15,#0x1
+ 51e:	31 53       	adc r1,#0x3
+ 520:	b6 53       	adc r6,#0xb
+
+00000522 <adcimm8>:
+ 522:	00 5b       	adc Rx,#0x0
+ 524:	ff 5b       	adc Rx,#0xff
+ 526:	80 5b       	adc Rx,#0x80
+ 528:	7f 5b       	adc Rx,#0x7f
+ 52a:	01 5b       	adc Rx,#0x1
+ 52c:	e1 5b       	adc Rx,#0xe1
+ 52e:	4b 5b       	adc Rx,#0x4b
+ 530:	12 5b       	adc Rx,#0x12
+
+00000532 <adcgrimm16>:
+ 532:	00 53       	adc r0,#0x0
+ 534:	5f 31 ff ff 	adc r15,#0xffff
+ 538:	58 31 00 80 	adc r8,#0x8000
+ 53c:	57 31 ff 7f 	adc r7,#0x7fff
+ 540:	11 53       	adc r1,#0x1
+ 542:	5d 31 99 f6 	adc r13,#0xf699
+ 546:	53 31 f3 5c 	adc r3,#0x5cf3
+ 54a:	5b 31 5d c0 	adc r11,#0xc05d
+
+0000054e <subgrgr>:
+ 54e:	00 4d       	sub r0,r0
+ 550:	ff 4d       	sub r15,r15
+ 552:	88 4d       	sub r8,r8
+ 554:	77 4d       	sub r7,r7
+ 556:	11 4d       	sub r1,r1
+ 558:	88 4d       	sub r8,r8
+ 55a:	99 4d       	sub r9,r9
+ 55c:	f9 4d       	sub r9,r15
+
+0000055e <subgrimm4>:
+ 55e:	00 55       	sub r0,#0x0
+ 560:	ff 55       	sub r15,#0xf
+ 562:	88 55       	sub r8,#0x8
+ 564:	77 55       	sub r7,#0x7
+ 566:	11 55       	sub r1,#0x1
+ 568:	f2 55       	sub r2,#0xf
+ 56a:	9c 55       	sub r12,#0x9
+ 56c:	48 55       	sub r8,#0x4
+
+0000056e <subimm8>:
+ 56e:	00 5d       	sub Rx,#0x0
+ 570:	ff 5d       	sub Rx,#0xff
+ 572:	80 5d       	sub Rx,#0x80
+ 574:	7f 5d       	sub Rx,#0x7f
+ 576:	01 5d       	sub Rx,#0x1
+ 578:	cd 5d       	sub Rx,#0xcd
+ 57a:	99 5d       	sub Rx,#0x99
+ 57c:	d9 5d       	sub Rx,#0xd9
+
+0000057e <subgrimm16>:
+ 57e:	00 55       	sub r0,#0x0
+ 580:	6f 31 ff ff 	sub r15,#0xffff
+ 584:	68 31 00 80 	sub r8,#0x8000
+ 588:	67 31 ff 7f 	sub r7,#0x7fff
+ 58c:	11 55       	sub r1,#0x1
+ 58e:	63 31 b7 ca 	sub r3,#0xcab7
+ 592:	6b 31 41 5c 	sub r11,#0x5c41
+ 596:	6a 31 4a 1e 	sub r10,#0x1e4a
+
+0000059a <sbcgrgr>:
+ 59a:	00 4f       	sbc r0,r0
+ 59c:	ff 4f       	sbc r15,r15
+ 59e:	88 4f       	sbc r8,r8
+ 5a0:	77 4f       	sbc r7,r7
+ 5a2:	11 4f       	sbc r1,r1
+ 5a4:	2b 4f       	sbc r11,r2
+ 5a6:	19 4f       	sbc r9,r1
+ 5a8:	f4 4f       	sbc r4,r15
+
+000005aa <sbcgrimm4>:
+ 5aa:	00 57       	sbc r0,#0x0
+ 5ac:	ff 57       	sbc r15,#0xf
+ 5ae:	88 57       	sbc r8,#0x8
+ 5b0:	77 57       	sbc r7,#0x7
+ 5b2:	11 57       	sbc r1,#0x1
+ 5b4:	ba 57       	sbc r10,#0xb
+ 5b6:	ab 57       	sbc r11,#0xa
+ 5b8:	ad 57       	sbc r13,#0xa
+
+000005ba <sbcgrimm8>:
+ 5ba:	00 5f       	sbc Rx,#0x0
+ 5bc:	ff 5f       	sbc Rx,#0xff
+ 5be:	80 5f       	sbc Rx,#0x80
+ 5c0:	7f 5f       	sbc Rx,#0x7f
+ 5c2:	01 5f       	sbc Rx,#0x1
+ 5c4:	89 5f       	sbc Rx,#0x89
+ 5c6:	e0 5f       	sbc Rx,#0xe0
+ 5c8:	9c 5f       	sbc Rx,#0x9c
+
+000005ca <sbcgrimm16>:
+ 5ca:	00 57       	sbc r0,#0x0
+ 5cc:	7f 31 ff ff 	sbc r15,#0xffff
+ 5d0:	78 31 00 80 	sbc r8,#0x8000
+ 5d4:	77 31 ff 7f 	sbc r7,#0x7fff
+ 5d8:	11 57       	sbc r1,#0x1
+ 5da:	70 31 fb 7e 	sbc r0,#0x7efb
+ 5de:	77 31 a2 21 	sbc r7,#0x21a2
+ 5e2:	7e 31 95 4f 	sbc r14,#0x4f95
+
+000005e6 <incgr>:
+ 5e6:	00 30       	inc r0
+ 5e8:	0f 30       	inc r15
+ 5ea:	08 30       	inc r8
+ 5ec:	07 30       	inc r7
+ 5ee:	01 30       	inc r1
+ 5f0:	0d 30       	inc r13
+ 5f2:	01 30       	inc r1
+ 5f4:	0b 30       	inc r11
+
+000005f6 <incgrimm2>:
+ 5f6:	00 30       	inc r0
+ 5f8:	3f 30       	inc r15,#0x3
+ 5fa:	28 30       	inc r8,#0x2
+ 5fc:	17 30       	inc r7,#0x1
+ 5fe:	11 30       	inc r1,#0x1
+ 600:	1e 30       	inc r14,#0x1
+ 602:	05 30       	inc r5
+ 604:	3c 30       	inc r12,#0x3
+
+00000606 <decgr>:
+ 606:	40 30       	dec r0
+ 608:	4f 30       	dec r15
+ 60a:	48 30       	dec r8
+ 60c:	47 30       	dec r7
+ 60e:	41 30       	dec r1
+ 610:	4c 30       	dec r12
+ 612:	48 30       	dec r8
+ 614:	4a 30       	dec r10
+
+00000616 <decgrimm2>:
+ 616:	40 30       	dec r0
+ 618:	7f 30       	dec r15,#0x3
+ 61a:	68 30       	dec r8,#0x2
+ 61c:	57 30       	dec r7,#0x1
+ 61e:	51 30       	dec r1,#0x1
+ 620:	45 30       	dec r5
+ 622:	4d 30       	dec r13
+ 624:	6d 30       	dec r13,#0x2
+
+00000626 <rrcgrgr>:
+ 626:	00 38       	rrc r0,r0
+ 628:	ff 38       	rrc r15,r15
+ 62a:	88 38       	rrc r8,r8
+ 62c:	77 38       	rrc r7,r7
+ 62e:	11 38       	rrc r1,r1
+ 630:	48 38       	rrc r8,r4
+ 632:	ea 38       	rrc r10,r14
+ 634:	9f 38       	rrc r15,r9
+
+00000636 <rrcgrimm4>:
+ 636:	00 39       	rrc r0,#0x0
+ 638:	ff 39       	rrc r15,#0xf
+ 63a:	88 39       	rrc r8,#0x8
+ 63c:	77 39       	rrc r7,#0x7
+ 63e:	11 39       	rrc r1,#0x1
+ 640:	3b 39       	rrc r11,#0x3
+ 642:	ce 39       	rrc r14,#0xc
+ 644:	f2 39       	rrc r2,#0xf
+
+00000646 <rlcgrgr>:
+ 646:	00 3a       	rlc r0,r0
+ 648:	ff 3a       	rlc r15,r15
+ 64a:	88 3a       	rlc r8,r8
+ 64c:	77 3a       	rlc r7,r7
+ 64e:	11 3a       	rlc r1,r1
+ 650:	3f 3a       	rlc r15,r3
+ 652:	7f 3a       	rlc r15,r7
+ 654:	af 3a       	rlc r15,r10
+
+00000656 <rlcgrimm4>:
+ 656:	00 3b       	rlc r0,#0x0
+ 658:	ff 3b       	rlc r15,#0xf
+ 65a:	88 3b       	rlc r8,#0x8
+ 65c:	77 3b       	rlc r7,#0x7
+ 65e:	11 3b       	rlc r1,#0x1
+ 660:	28 3b       	rlc r8,#0x2
+ 662:	62 3b       	rlc r2,#0x6
+ 664:	a6 3b       	rlc r6,#0xa
+
+00000666 <shrgrgr>:
+ 666:	00 3c       	shr r0,r0
+ 668:	ff 3c       	shr r15,r15
+ 66a:	88 3c       	shr r8,r8
+ 66c:	77 3c       	shr r7,r7
+ 66e:	11 3c       	shr r1,r1
+ 670:	2d 3c       	shr r13,r2
+ 672:	87 3c       	shr r7,r8
+ 674:	86 3c       	shr r6,r8
+
+00000676 <shrgrimm>:
+ 676:	00 3d       	shr r0,#0x0
+ 678:	ff 3d       	shr r15,#0xf
+ 67a:	88 3d       	shr r8,#0x8
+ 67c:	77 3d       	shr r7,#0x7
+ 67e:	11 3d       	shr r1,#0x1
+ 680:	d9 3d       	shr r9,#0xd
+ 682:	72 3d       	shr r2,#0x7
+ 684:	88 3d       	shr r8,#0x8
+
+00000686 <shlgrgr>:
+ 686:	00 3e       	shl r0,r0
+ 688:	ff 3e       	shl r15,r15
+ 68a:	88 3e       	shl r8,r8
+ 68c:	77 3e       	shl r7,r7
+ 68e:	11 3e       	shl r1,r1
+ 690:	32 3e       	shl r2,r3
+ 692:	30 3e       	shl r0,r3
+ 694:	12 3e       	shl r2,r1
+
+00000696 <shlgrimm>:
+ 696:	00 3f       	shl r0,#0x0
+ 698:	ff 3f       	shl r15,#0xf
+ 69a:	88 3f       	shl r8,#0x8
+ 69c:	77 3f       	shl r7,#0x7
+ 69e:	11 3f       	shl r1,#0x1
+ 6a0:	d6 3f       	shl r6,#0xd
+ 6a2:	63 3f       	shl r3,#0x6
+ 6a4:	ff 3f       	shl r15,#0xf
+
+000006a6 <asrgrgr>:
+ 6a6:	00 36       	asr r0,r0
+ 6a8:	ff 36       	asr r15,r15
+ 6aa:	88 36       	asr r8,r8
+ 6ac:	77 36       	asr r7,r7
+ 6ae:	11 36       	asr r1,r1
+ 6b0:	a5 36       	asr r5,r10
+ 6b2:	53 36       	asr r3,r5
+ 6b4:	b6 36       	asr r6,r11
+
+000006b6 <asrgrimm>:
+ 6b6:	00 37       	asr r0,#0x0
+ 6b8:	ff 37       	asr r15,#0xf
+ 6ba:	88 37       	asr r8,#0x8
+ 6bc:	77 37       	asr r7,#0x7
+ 6be:	11 37       	asr r1,#0x1
+ 6c0:	4d 37       	asr r13,#0x4
+ 6c2:	d0 37       	asr r0,#0xd
+ 6c4:	36 37       	asr r6,#0x3
+
+000006c6 <set1grimm>:
+ 6c6:	00 09       	set1 r0,#0x0
+ 6c8:	ff 09       	set1 r15,#0xf
+ 6ca:	88 09       	set1 r8,#0x8
+ 6cc:	77 09       	set1 r7,#0x7
+ 6ce:	11 09       	set1 r1,#0x1
+ 6d0:	a6 09       	set1 r6,#0xa
+ 6d2:	1d 09       	set1 r13,#0x1
+ 6d4:	fd 09       	set1 r13,#0xf
+
+000006d6 <set1grgr>:
+ 6d6:	00 0b       	set1 r0,r0
+ 6d8:	ff 0b       	set1 r15,r15
+ 6da:	88 0b       	set1 r8,r8
+ 6dc:	77 0b       	set1 r7,r7
+ 6de:	11 0b       	set1 r1,r1
+ 6e0:	06 0b       	set1 r6,r0
+ 6e2:	76 0b       	set1 r6,r7
+ 6e4:	2e 0b       	set1 r14,r2
+
+000006e6 <set1lmemimm>:
+ 6e6:	00 e1       	set1 0x0,#0x0
+ 6e8:	ff ef       	set1 0xff,#0x7
+ 6ea:	80 e9       	set1 0x80,#0x4
+ 6ec:	7f e7       	set1 0x7f,#0x3
+ 6ee:	01 e3       	set1 0x1,#0x1
+ 6f0:	f4 e7       	set1 0xf4,#0x3
+ 6f2:	37 ef       	set1 0x37,#0x7
+ 6f4:	fc eb       	set1 0xfc,#0x5
+
+000006f6 <set1hmemimm>:
+ 6f6:	00 f1       	set1 0x7f00,#0x0
+ 6f8:	ff ff       	set1 0x7fff,#0x7
+ 6fa:	80 f9       	set1 0x7f80,#0x4
+ 6fc:	7f f7       	set1 0x7f7f,#0x3
+ 6fe:	01 f3       	set1 0x7f01,#0x1
+ 700:	0a f7       	set1 0x7f0a,#0x3
+ 702:	63 f9       	set1 0x7f63,#0x4
+ 704:	94 f7       	set1 0x7f94,#0x3
+
+00000706 <clr1grimm>:
+ 706:	00 08       	clr1 r0,#0x0
+ 708:	ff 08       	clr1 r15,#0xf
+ 70a:	88 08       	clr1 r8,#0x8
+ 70c:	77 08       	clr1 r7,#0x7
+ 70e:	11 08       	clr1 r1,#0x1
+ 710:	0c 08       	clr1 r12,#0x0
+ 712:	b8 08       	clr1 r8,#0xb
+ 714:	77 08       	clr1 r7,#0x7
+
+00000716 <clr1grgr>:
+ 716:	00 0a       	clr1 r0,r0
+ 718:	ff 0a       	clr1 r15,r15
+ 71a:	88 0a       	clr1 r8,r8
+ 71c:	77 0a       	clr1 r7,r7
+ 71e:	11 0a       	clr1 r1,r1
+ 720:	33 0a       	clr1 r3,r3
+ 722:	10 0a       	clr1 r0,r1
+ 724:	0f 0a       	clr1 r15,r0
+
+00000726 <clr1lmemimm>:
+ 726:	00 e0       	clr1 0x0,#0x0
+ 728:	ff ee       	clr1 0xff,#0x7
+ 72a:	80 e8       	clr1 0x80,#0x4
+ 72c:	7f e6       	clr1 0x7f,#0x3
+ 72e:	01 e2       	clr1 0x1,#0x1
+ 730:	72 ee       	clr1 0x72,#0x7
+ 732:	e5 e8       	clr1 0xe5,#0x4
+ 734:	56 e2       	clr1 0x56,#0x1
+
+00000736 <clr1hmemimm>:
+ 736:	00 f0       	clr1 0x7f00,#0x0
+ 738:	ff fe       	clr1 0x7fff,#0x7
+ 73a:	80 f8       	clr1 0x7f80,#0x4
+ 73c:	7f f6       	clr1 0x7f7f,#0x3
+ 73e:	01 f2       	clr1 0x7f01,#0x1
+ 740:	2c f6       	clr1 0x7f2c,#0x3
+ 742:	d4 fa       	clr1 0x7fd4,#0x5
+ 744:	43 fe       	clr1 0x7f43,#0x7
+
+00000746 <cbwgr>:
+ 746:	a0 30       	cbw r0
+ 748:	af 30       	cbw r15
+ 74a:	a8 30       	cbw r8
+ 74c:	a7 30       	cbw r7
+ 74e:	a1 30       	cbw r1
+ 750:	a8 30       	cbw r8
+ 752:	ab 30       	cbw r11
+ 754:	a3 30       	cbw r3
+
+00000756 <revgr>:
+ 756:	f0 30       	rev r0
+ 758:	ff 30       	rev r15
+ 75a:	f8 30       	rev r8
+ 75c:	f7 30       	rev r7
+ 75e:	f1 30       	rev r1
+ 760:	f1 30       	rev r1
+ 762:	f1 30       	rev r1
+ 764:	fe 30       	rev r14
+
+00000766 <bgr>:
+ 766:	20 00       	br r0
+ 768:	2f 00       	br r15
+ 76a:	28 00       	br r8
+ 76c:	27 00       	br r7
+ 76e:	21 00       	br r1
+ 770:	20 00       	br r0
+ 772:	2f 00       	br r15
+ 774:	2c 00       	br r12
+
+00000776 <jmp>:
+ 776:	40 00       	jmp r8,r0
+ 778:	5f 00       	jmp r9,r15
+ 77a:	58 00       	jmp r9,r8
+ 77c:	47 00       	jmp r8,r7
+ 77e:	51 00       	jmp r9,r1
+ 780:	57 00       	jmp r9,r7
+ 782:	55 00       	jmp r9,r5
+ 784:	4c 00       	jmp r8,r12
+
+00000786 <jmpf>:
+ 786:	00 02 00 00 	jmpf 0x0
+ 78a:	ff 02 ff ff 	jmpf 0xffffff
+ 78e:	00 02 00 80 	jmpf 0x800000
+ 792:	ff 02 ff 7f 	jmpf 0x7fffff
+ 796:	01 02 00 00 	jmpf 0x1
+ 79a:	6d 02 c0 a3 	jmpf 0xa3c06d
+ 79e:	52 02 54 e6 	jmpf 0xe65452
+ 7a2:	d8 02 56 16 	jmpf 0x1656d8
+
+000007a6 <callrgr>:
+ 7a6:	10 00       	callr r0
+ 7a8:	1f 00       	callr r15
+ 7aa:	18 00       	callr r8
+ 7ac:	17 00       	callr r7
+ 7ae:	11 00       	callr r1
+ 7b0:	11 00       	callr r1
+ 7b2:	1c 00       	callr r12
+ 7b4:	18 00       	callr r8
+
+000007b6 <callgr>:
+ 7b6:	a0 00       	call r8,r0
+ 7b8:	bf 00       	call r9,r15
+ 7ba:	b8 00       	call r9,r8
+ 7bc:	a7 00       	call r8,r7
+ 7be:	b1 00       	call r9,r1
+ 7c0:	b6 00       	call r9,r6
+ 7c2:	be 00       	call r9,r14
+ 7c4:	ac 00       	call r8,r12
+
+000007c6 <callfimm>:
+ 7c6:	00 01 00 00 	callf 0x0
+ 7ca:	ff 01 ff ff 	callf 0xffffff
+ 7ce:	00 01 00 80 	callf 0x800000
+ 7d2:	ff 01 ff 7f 	callf 0x7fffff
+ 7d6:	01 01 00 00 	callf 0x1
+ 7da:	56 01 b2 ce 	callf 0xceb256
+ 7de:	df 01 5f a5 	callf 0xa55fdf
+ 7e2:	b3 01 e6 e7 	callf 0xe7e6b3
+
+000007e6 <icallrgr>:
+ 7e6:	30 00       	icallr r0
+ 7e8:	3f 00       	icallr r15
+ 7ea:	38 00       	icallr r8
+ 7ec:	37 00       	icallr r7
+ 7ee:	31 00       	icallr r1
+ 7f0:	3f 00       	icallr r15
+ 7f2:	3c 00       	icallr r12
+ 7f4:	39 00       	icallr r9
+
+000007f6 <icallgr>:
+ 7f6:	60 00       	icall r8,r0
+ 7f8:	7f 00       	icall r9,r15
+ 7fa:	78 00       	icall r9,r8
+ 7fc:	67 00       	icall r8,r7
+ 7fe:	71 00       	icall r9,r1
+ 800:	7a 00       	icall r9,r10
+ 802:	6f 00       	icall r8,r15
+ 804:	6a 00       	icall r8,r10
+
+00000806 <icallfimm>:
+ 806:	00 03 00 00 	icallf 0x0
+ 80a:	ff 03 ff ff 	icallf 0xffffff
+ 80e:	00 03 00 80 	icallf 0x800000
+ 812:	ff 03 ff 7f 	icallf 0x7fffff
+ 816:	01 03 00 00 	icallf 0x1
+ 81a:	22 03 3f 93 	icallf 0x933f22
+ 81e:	6e 03 35 1e 	icallf 0x1e356e
+ 822:	48 03 e8 74 	icallf 0x74e848
+
+00000826 <iret>:
+ 826:	02 00       	iret
+
+00000828 <ret>:
+ 828:	03 00       	ret
+
+0000082a <mul>:
+ 82a:	d0 00       	mul
+
+0000082c <div>:
+ 82c:	c0 00       	div
+
+0000082e <nop>:
+ 82e:	00 00       	nop
+ 830:	03 00       	ret
+
+00000832 <halt>:
+ 832:	08 00       	halt
+
+00000834 <hold>:
+ 834:	0a 00       	hold
+
+00000836 <brk>:
+ 836:	05 00       	brk
+
+00000838 <bccgrgr>:
+ 838:	00 0d 00 00 	bge r0,r0,0x83c
+ 83c:	ff 0d ff ff 	bz r15,r15,0x83f
+ 840:	88 0d 00 88 	bpl r8,r8,0x44
+ 844:	77 0d ff 77 	bls r7,r7,0x1047
+ 848:	11 0d 01 10 	bnc r1,r1,0x84d
+ 84c:	d3 0d 07 37 	bc r3,r13,0xf57
+ 850:	a1 0d 1d 08 	bge r1,r10,0x71
+ 854:	50 0d 94 fb 	bz r0,r5,0x3ec
+
+00000858 <bccgrimm8>:
+ 858:	00 20 00 00 	bge r0,#0x0,0x85c
+ 85c:	ff 2e ff ff 	bz r7,#0xff,0x85f
+ 860:	80 28 00 88 	bpl r4,#0x80,0x64
+ 864:	7f 26 ff 77 	bls r3,#0x7f,0x1067
+ 868:	01 22 01 10 	bnc r1,#0x1,0x86d
+ 86c:	08 26 c1 15 	bnc r3,#0x8,0xe31
+ 870:	cb 2a 53 c6 	bnz\.b r5,#0xcb,0xec7
+ 874:	e1 2e d2 33 	bc r7,#0xe1,0xc4a
+
+00000878 <bccimm16>:
+ 878:	00 c0 00 00 	bge Rx,#0x0,0x87c
+ 87c:	ff cf ff ff 	bz Rx,#0xffff,0x87f
+ 880:	80 c8 00 80 	bpl Rx,#0x8000,0x804
+ 884:	7f c7 ff 7f 	bls Rx,#0x7fff,0x907
+ 888:	01 c1 01 00 	bnc Rx,#0x1,0x88d
+ 88c:	04 ce fb 77 	bz\.b Rx,#0x77fb,0x894
+ 890:	f3 c9 3a f3 	bnv Rx,#0xf33a,0x887
+ 894:	6c c9 32 bc 	bnv Rx,#0xbc32,0x904
+
+00000898 <bngrimm4>:
+ 898:	00 04 00 00 	bn r0,#0x0,0x89c
+ 89c:	ff 04 ff 0f 	bn r15,#0xf,0x89f
+ 8a0:	88 04 00 08 	bn r8,#0x8,0xa4
+ 8a4:	77 04 ff 07 	bn r7,#0x7,0x10a7
+ 8a8:	11 04 01 00 	bn r1,#0x1,0x8ad
+ 8ac:	3b 04 49 08 	bn r11,#0x3,0xf9
+ 8b0:	4f 04 4b 0b 	bn r15,#0x4,0x3ff
+ 8b4:	8a 04 9b 06 	bn r10,#0x8,0xf53
+
+000008b8 <bngrgr>:
+ 8b8:	00 06 00 00 	bn r0,r0,0x8bc
+ 8bc:	ff 06 ff 0f 	bn r15,r15,0x8bf
+ 8c0:	88 06 00 08 	bn r8,r8,0xc4
+ 8c4:	77 06 ff 07 	bn r7,r7,0x10c7
+ 8c8:	11 06 01 00 	bn r1,r1,0x8cd
+ 8cc:	34 06 9d 04 	bn r4,r3,0xd6d
+ 8d0:	25 06 4d 00 	bn r5,r2,0x921
+ 8d4:	73 06 77 02 	bn r3,r7,0xb4f
+
+000008d8 <bnlmemimm>:
+ 8d8:	00 7c 00 00 	bn 0x0,#0x0,0x8dc
+ 8dc:	ff 7c ff 7f 	bn 0xff,#0x7,0x8df
+ 8e0:	80 7c 00 48 	bn 0x80,#0x4,0xe4
+ 8e4:	7f 7c ff 37 	bn 0x7f,#0x3,0x10e7
+ 8e8:	01 7c 01 10 	bn 0x1,#0x1,0x8ed
+ 8ec:	99 7c b1 7c 	bn 0x99,#0x7,0x5a1
+ 8f0:	cc 7c a7 08 	bn 0xcc,#0x0,0x19b
+ 8f4:	f2 7c 74 75 	bn 0xf2,#0x7,0xe6c
+
+000008f8 <bnhmemimm>:
+ 8f8:	00 7e 00 00 	bn 0x7f00,#0x0,0x8fc
+ 8fc:	ff 7e ff 7f 	bn 0x7fff,#0x7,0x8ff
+ 900:	80 7e 00 48 	bn 0x7f80,#0x4,0x104
+ 904:	7f 7e ff 37 	bn 0x7f7f,#0x3,0x1107
+ 908:	01 7e 01 10 	bn 0x7f01,#0x1,0x90d
+ 90c:	b9 7e 9a 3d 	bn 0x7fb9,#0x3,0x6aa
+ 910:	69 7e 64 1d 	bn 0x7f69,#0x1,0x678
+ 914:	4f 7e 20 75 	bn 0x7f4f,#0x7,0xe38
+
+00000918 <bpgrimm4>:
+ 918:	00 05 00 00 	bp r0,#0x0,0x91c
+ 91c:	ff 05 ff 0f 	bp r15,#0xf,0x91f
+ 920:	88 05 00 08 	bp r8,#0x8,0x124
+ 924:	77 05 ff 07 	bp r7,#0x7,0x1127
+ 928:	11 05 01 00 	bp r1,#0x1,0x92d
+ 92c:	c0 05 33 04 	bp r0,#0xc,0xd63
+ 930:	51 05 27 02 	bp r1,#0x5,0xb5b
+ 934:	86 05 34 06 	bp r6,#0x8,0xf6c
+
+00000938 <bpgrgr>:
+ 938:	00 07 00 00 	bp r0,r0,0x93c
+ 93c:	ff 07 ff 0f 	bp r15,r15,0x93f
+ 940:	88 07 00 08 	bp r8,r8,0x144
+ 944:	77 07 ff 07 	bp r7,r7,0x1147
+ 948:	11 07 01 00 	bp r1,r1,0x94d
+ 94c:	94 07 9a 0d 	bp r4,r9,0x6ea
+ 950:	a9 07 b0 0a 	bp r9,r10,0x404
+ 954:	14 07 97 01 	bp r4,r1,0xaef
+
+00000958 <bplmemimm>:
+ 958:	00 7d 00 00 	bp 0x0,#0x0,0x95c
+ 95c:	ff 7d ff 7f 	bp 0xff,#0x7,0x95f
+ 960:	80 7d 00 48 	bp 0x80,#0x4,0x164
+ 964:	7f 7d ff 37 	bp 0x7f,#0x3,0x1167
+ 968:	01 7d 01 10 	bp 0x1,#0x1,0x96d
+ 96c:	c1 7d 72 3e 	bp 0xc1,#0x3,0x7e2
+ 970:	fa 7d ef 29 	bp 0xfa,#0x2,0x363
+ 974:	b4 7d 43 62 	bp 0xb4,#0x6,0xbbb
+
+00000978 <bphmemimm>:
+ 978:	00 7f 00 00 	bp 0x7f00,#0x0,0x97c
+ 97c:	ff 7f ff 7f 	bp 0x7fff,#0x7,0x97f
+ 980:	80 7f 00 48 	bp 0x7f80,#0x4,0x184
+ 984:	7f 7f ff 37 	bp 0x7f7f,#0x3,0x1187
+ 988:	01 7f 01 10 	bp 0x7f01,#0x1,0x98d
+ 98c:	c3 7f 50 1e 	bp 0x7fc3,#0x1,0x7e0
+ 990:	81 7f 1c 5a 	bp 0x7f81,#0x5,0x3b0
+ 994:	38 7f bb 36 	bp 0x7f38,#0x3,0x1053
+
+00000998 <bcc>:
+ 998:	00 d0       	bge 0x99a
+ 99a:	ff df       	bz 0x99b
+ 99c:	80 d8       	bpl 0x91e
+ 99e:	7f d7       	bls 0xa1f
+ 9a0:	01 d1       	bnc 0x9a3
+ 9a2:	30 dc       	bnz\.b 0x9d4
+ 9a4:	f9 d1       	bnc 0x99f
+ 9a6:	4a dc       	bnz\.b 0x9f2
+
+000009a8 <br>:
+ 9a8:	00 10       	br 0x9aa
+ 9aa:	fe 1f       	br 0x9aa
+ 9ac:	00 18       	br 0x1ae
+ 9ae:	fe 17       	br 0x11ae
+ 9b0:	00 10       	br 0x9b2
+ 9b2:	c0 15       	br 0xf74
+ 9b4:	52 16       	br 0x1008
+ 9b6:	d2 13       	br 0xd8a
+
+000009b8 <callrimm>:
+ 9b8:	01 10       	callr 0x9ba
+ 9ba:	ff 1f       	callr 0x9ba
+ 9bc:	01 18       	callr 0x1be
+ 9be:	ff 17       	callr 0x11be
+ 9c0:	01 10       	callr 0x9c2
+ 9c2:	c1 15       	callr 0xf84
+ 9c4:	53 16       	callr 0x1018
+ 9c6:	d3 13       	callr 0xd9a
Index: gas/testsuite/gas/xstormy16/allinsn.exp
===================================================================
RCS file: allinsn.exp
diff -N allinsn.exp
--- gas/testsuite/gas/xstormy16/allinsn.exp	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/allinsn.exp	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,8 @@
+# XSTORMY16 assembler testsuite. -*- Tcl -*-
+
+if [istarget xstormy16*-*-*] {
+    run_dump_test "allinsn"
+    run_dump_test "reloc-1"
+    run_dump_test "reloc-2"
+    run_dump_test "gcc"
+}
Index: gas/testsuite/gas/xstormy16/allinsn.s
===================================================================
RCS file: allinsn.s
diff -N allinsn.s
--- gas/testsuite/gas/xstormy16/allinsn.s	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/allinsn.s	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,1346 @@
+ .data
+foodata: .word 42
+ .text
+footext:
+	.text
+	.global movlmemimm
+movlmemimm:
+	mov.b 0,#0
+	mov.w 255,#65535
+	mov.w 128,#32768
+	mov.b 127,#32767
+	mov.w 1,#1
+	mov.w 81,#64681
+	mov.w 247,#42230
+	mov.b 84,#16647
+	.text
+	.global movhmemimm
+movhmemimm:
+	mov.b 0x7f00+0,#0
+	mov.w 0x7f00+255,#65535
+	mov.w 0x7f00+128,#32768
+	mov.b 0x7f00+127,#32767
+	mov.w 0x7f00+1,#1
+	mov.b 0x7f00+165,#1944
+	mov.w 0x7f00+186,#11517
+	mov.b 0x7f00+63,#25556
+	.text
+	.global movlgrmem
+movlgrmem:
+	mov.b r0,0
+	mov.w r7,255
+	mov.w r4,128
+	mov.b r3,127
+	mov.w r1,1
+	mov.w r6,179
+	mov.w r0,183
+	mov.b r3,41
+	.text
+	.global movhgrmem
+movhgrmem:
+	mov.b r0,0x7f00+0
+	mov.w r7,0x7f00+255
+	mov.w r4,0x7f00+128
+	mov.b r3,0x7f00+127
+	mov.w r1,0x7f00+1
+	mov.b r2,0x7f00+114
+	mov.w r2,0x7f00+210
+	mov.w r5,0x7f00+181
+	.text
+	.global movlmemgr
+movlmemgr:
+	mov.b 0,r0
+	mov.w 255,r7
+	mov.w 128,r4
+	mov.b 127,r3
+	mov.w 1,r1
+	mov.w 137,r0
+	mov.w 26,r0
+	mov.b 127,r4
+	.text
+	.global movhmemgr
+movhmemgr:
+	mov.b 0x7f00+0,r0
+	mov.w 0x7f00+255,r7
+	mov.w 0x7f00+128,r4
+	mov.b 0x7f00+127,r3
+	mov.w 0x7f00+1,r1
+	mov.w 0x7f00+98,r3
+	mov.w 0x7f00+135,r7
+	mov.b 0x7f00+229,r2
+	.text
+	.global movgrgri
+movgrgri:
+	mov.b r0,(r0)
+	mov.w r7,(r15)
+	mov.w r4,(r8)
+	mov.b r3,(r7)
+	mov.w r1,(r1)
+	mov.w r6,(r4)
+	mov.b r0,(r12)
+	mov.w r5,(r9)
+	.text
+	.global movgrgripostinc
+movgrgripostinc:
+	mov.b r0,(r0++)
+	mov.w r7,(r15++)
+	mov.w r4,(r8++)
+	mov.b r3,(r7++)
+	mov.w r1,(r1++)
+	mov.w r4,(r8++)
+	mov.w r3,(r12++)
+	mov.b r6,(r4++)
+	.text
+	.global movgrgripredec
+movgrgripredec:
+	mov.b r0,(--r0)
+	mov.w r7,(--r15)
+	mov.w r4,(--r8)
+	mov.b r3,(--r7)
+	mov.w r1,(--r1)
+	mov.w r5,(--r9)
+	mov.w r4,(--r14)
+	mov.b r4,(--r7)
+	.text
+	.global movgrigr
+movgrigr:
+	mov.b (r0),r0
+	mov.w (r15),r7
+	mov.w (r8),r4
+	mov.b (r7),r3
+	mov.w (r1),r1
+	mov.w (r4),r3
+	mov.b (r3),r6
+	mov.w (r7),r0
+	.text
+	.global movgripostincgr
+movgripostincgr:
+	mov.b (r0++),r0
+	mov.w (r15++),r7
+	mov.w (r8++),r4
+	mov.b (r7++),r3
+	mov.w (r1++),r1
+	mov.w (r12++),r5
+	mov.b (r4++),r2
+	mov.b (r11++),r6
+	.text
+	.global movgripredecgr
+movgripredecgr:
+	mov.b (--r0),r0
+	mov.w (--r15),r7
+	mov.w (--r8),r4
+	mov.b (--r7),r3
+	mov.w (--r1),r1
+	mov.b (--r8),r3
+	mov.b (--r11),r4
+	mov.w (--r1),r6
+	.text
+	.global movgrgrii
+movgrgrii:
+	mov.b r0,(r0,0)
+	mov.w r7,(r15,-1)
+	mov.w r4,(r8,-2048)
+	mov.b r3,(r7,2047)
+	mov.w r1,(r1,1)
+	mov.w r6,(r8,-452)
+	mov.w r4,(r11,572)
+	mov.b r1,(r1,-1718)
+	.text
+	.global movgrgriipostinc
+movgrgriipostinc:
+	mov.b r0,(r0++,0)
+	mov.w r7,(r15++,-1)
+	mov.w r4,(r8++,-2048)
+	mov.b r3,(r7++,2047)
+	mov.w r1,(r1++,1)
+	mov.w r6,(r0++,-64)
+	mov.b r7,(r15++,1060)
+	mov.b r0,(r7++,847)
+	.text
+	.global movgrgriipredec
+movgrgriipredec:
+	mov.b r0,(--r0,0)
+	mov.w r7,(--r15,-1)
+	mov.w r4,(--r8,-2048)
+	mov.b r3,(--r7,2047)
+	mov.w r1,(--r1,1)
+	mov.w r0,(--r15,1780)
+	mov.w r6,(--r1,1506)
+	mov.w r7,(--r3,-2033)
+	.text
+	.global movgriigr
+movgriigr:
+	mov.b (r0,0),r0
+	mov.w (r15,-1),r7
+	mov.w (r8,-2048),r4
+	mov.b (r7,2047),r3
+	mov.w (r1,1),r1
+	mov.w (r7,1948),r5
+	mov.b (r3,-844),r4
+	mov.w (r15,1704),r0
+	.text
+	.global movgriipostincgr
+movgriipostincgr:
+	mov.b (r0++,0),r0
+	mov.w (r15++,-1),r7
+	mov.w (r8++,-2048),r4
+	mov.b (r7++,2047),r3
+	mov.w (r1++,1),r1
+	mov.w (r2++,-176),r7
+	mov.w (r8++,1389),r4
+	mov.b (r3++,47),r0
+	.text
+	.global movgriipredecgr
+movgriipredecgr:
+	mov.b (--r0,0),r0
+	mov.w (--r15,-1),r7
+	mov.w (--r8,-2048),r4
+	mov.b (--r7,2047),r3
+	mov.w (--r1,1),r1
+	mov.b (--r8,1004),r4
+	mov.w (--r14,-1444),r2
+	mov.b (--r5,-927),r4
+	.text
+	.global movgrgr
+movgrgr:
+	mov r0,r0
+	mov r15,r15
+	mov r8,r8
+	mov r7,r7
+	mov r1,r1
+	mov r9,r14
+	mov r7,r15
+	mov r12,r15
+	.text
+	.global movimm8
+movimm8:
+	mov Rx,#0
+	mov Rx,#255
+	mov Rx,#128
+	mov Rx,#127
+	mov Rx,#1
+	mov Rx,#136
+	mov Rx,#83
+	mov Rx,#104
+	.text
+	.global movwimm8
+movwimm8:
+	mov.w Rx,#0
+	mov.w Rx,#255
+	mov.w Rx,#128
+	mov.w Rx,#127
+	mov.w Rx,#1
+	mov.w Rx,#92
+	mov.w Rx,#97
+	mov.w Rx,#4
+	.text
+	.global movgrimm8
+movgrimm8:
+	mov r0,#0
+	mov r7,#255
+	mov r4,#128
+	mov r3,#127
+	mov r1,#1
+	mov r2,#206
+	mov r4,#55
+	mov r2,#3
+	.text
+	.global movwgrimm8
+movwgrimm8:
+	mov.w r0,#0
+	mov.w r7,#255
+	mov.w r4,#128
+	mov.w r3,#127
+	mov.w r1,#1
+	mov.w r4,#243
+	mov.w r3,#55
+	mov.w r2,#108
+	.text
+	.global movgrimm16
+movgrimm16:
+	mov r0,#0
+	mov r15,#65535
+	mov r8,#32768
+	mov r7,#32767
+	mov r1,#1
+	mov r4,#20066
+	mov r3,#7190
+	mov r2,#15972
+	.text
+	.global movwgrimm16
+movwgrimm16:
+	mov.w r0,#0
+	mov.w r15,#65535
+	mov.w r8,#32768
+	mov.w r7,#32767
+	mov.w r1,#1
+	mov.w r6,#16648
+	mov.w r8,#26865
+	mov.w r10,#20010
+	.text
+	.global movlowgr
+movlowgr:
+	mov.b r0,RxL
+	mov.b r15,RxL
+	mov.b r8,RxL
+	mov.b r7,RxL
+	mov.b r1,RxL
+	mov.b r11,RxL
+	mov.b r5,RxL
+	mov.b r2,RxL
+	.text
+	.global movhighgr
+movhighgr:
+	mov.b r0,RxH
+	mov.b r15,RxH
+	mov.b r8,RxH
+	mov.b r7,RxH
+	mov.b r1,RxH
+	mov.b r2,RxH
+	mov.b r7,RxH
+	mov.b r2,RxH
+	.text
+	.global movfgrgri
+movfgrgri:
+	movf.b r0,(r0)
+	movf.w r7,(r15)
+	movf.w r4,(r8)
+	movf.b r3,(r7)
+	movf.w r1,(r1)
+	movf.b r6,(r15)
+	movf.b r1,(r10)
+	movf.b r6,(r1)
+	.text
+	.global movfgrgripostinc
+movfgrgripostinc:
+	movf.b r0,(r0++)
+	movf.w r7,(r15++)
+	movf.w r4,(r8++)
+	movf.b r3,(r7++)
+	movf.w r1,(r1++)
+	movf.b r2,(r5++)
+	movf.w r5,(r10++)
+	movf.w r7,(r5++)
+	.text
+	.global movfgrgripredec
+movfgrgripredec:
+	movf.b r0,(--r0)
+	movf.w r7,(--r15)
+	movf.w r4,(--r8)
+	movf.b r3,(--r7)
+	movf.w r1,(--r1)
+	movf.w r6,(--r10)
+	movf.b r1,(--r14)
+	movf.w r3,(--r7)
+	.text
+	.global movfgrigr
+movfgrigr:
+	movf.b (r0),r0
+	movf.w (r15),r7
+	movf.w (r8),r4
+	movf.b (r7),r3
+	movf.w (r1),r1
+	movf.b (r5),r4
+	movf.b (r3),r4
+	movf.w (r12),r3
+	.text
+	.global movfgripostincgr
+movfgripostincgr:
+	movf.b (r0++),r0
+	movf.w (r15++),r7
+	movf.w (r8++),r4
+	movf.b (r7++),r3
+	movf.w (r1++),r1
+	movf.b (r9++),r5
+	movf.w (r10++),r4
+	movf.b (r9++),r1
+	.text
+	.global movfgripredecgr
+movfgripredecgr:
+	movf.b (--r0),r0
+	movf.w (--r15),r7
+	movf.w (--r8),r4
+	movf.b (--r7),r3
+	movf.w (--r1),r1
+	movf.b (--r0),r2
+	movf.w (--r11),r2
+	movf.b (--r10),r5
+	.text
+	.global movfgrgrii
+movfgrgrii:
+	movf.b r0,(r0,r0,0)
+	movf.w r7,(r7,r15,-1)
+	movf.w r4,(r4,r8,-2048)
+	movf.b r3,(r3,r7,2047)
+	movf.w r1,(r1,r1,1)
+	movf.b r7,(r7,r0,1473)
+	movf.w r2,(r0,r9,-1522)
+	movf.w r2,(r5,r1,480)
+	.text
+	.global movfgrgriipostinc
+movfgrgriipostinc:
+	movf.b r0,(r0,r0++,0)
+	movf.w r7,(r7,r15++,-1)
+	movf.w r4,(r4,r8++,-2048)
+	movf.b r3,(r3,r7++,2047)
+	movf.w r1,(r1,r1++,1)
+	movf.b r1,(r0,r2++,1398)
+	movf.w r4,(r0,r9++,-778)
+	movf.w r1,(r5,r14++,1564)
+	.text
+	.global movfgrgriipredec
+movfgrgriipredec:
+	movf.b r0,(r0,--r0,0)
+	movf.w r7,(r7,--r15,-1)
+	movf.w r4,(r4,--r8,-2048)
+	movf.b r3,(r3,--r7,2047)
+	movf.w r1,(r1,--r1,1)
+	movf.b r6,(r0,--r7,254)
+	movf.w r5,(r4,--r12,1673)
+	movf.b r0,(r0,--r10,-38)
+	.text
+	.global movfgriigr
+movfgriigr:
+	movf.b (r0,r0,0),r0
+	movf.w (r7,r15,-1),r7
+	movf.w (r4,r8,-2048),r4
+	movf.b (r3,r7,2047),r3
+	movf.w (r1,r1,1),r1
+	movf.w (r7,r2,-1636),r3
+	movf.w (r6,r12,1626),r1
+	movf.b (r3,r14,1540),r0
+	.text
+	.global movfgriipostincgr
+movfgriipostincgr:
+	movf.b (r0,r0++,0),r0
+	movf.w (r7,r15++,-1),r7
+	movf.w (r4,r8++,-2048),r4
+	movf.b (r3,r7++,2047),r3
+	movf.w (r1,r1++,1),r1
+	movf.b (r7,r13++,466),r3
+	movf.b (r3,r11++,250),r4
+	movf.b (r2,r10++,-1480),r7
+	.text
+	.global movfgriipredecgr
+movfgriipredecgr:
+	movf.b (r0,--r0,0),r0
+	movf.w (r7,--r15,-1),r7
+	movf.w (r4,--r8,-2048),r4
+	movf.b (r3,--r7,2047),r3
+	movf.w (r1,--r1,1),r1
+	movf.b (r5,--r10,-608),r0
+	movf.b (r1,--r11,831),r7
+	movf.w (r7,--r15,-2036),r6
+	.text
+	.global maskgrgr
+maskgrgr:
+	mask r0,r0
+	mask r15,r15
+	mask r8,r8
+	mask r7,r7
+	mask r1,r1
+	mask r4,r0
+	mask r6,r11
+	mask r8,r4
+	.text
+	.global maskgrimm16
+maskgrimm16:
+	mask r0,#0
+	mask r15,#65535
+	mask r8,#32768
+	mask r7,#32767
+	mask r1,#1
+	mask r7,#18153
+	mask r15,#7524
+	mask r14,#34349
+	.text
+	.global pushgr
+pushgr:
+	push r0
+	push r15
+	push r8
+	push r7
+	push r1
+	push r9
+	push r4
+	push r3
+	.text
+	.global popgr
+popgr:
+	pop r0
+	pop r15
+	pop r8
+	pop r7
+	pop r1
+	pop r3
+	pop r2
+	pop r12
+	.text
+	.global swpn
+swpn:
+	swpn r0
+	swpn r15
+	swpn r8
+	swpn r7
+	swpn r1
+	swpn r15
+	swpn r4
+	swpn r3
+	.text
+	.global swpb
+swpb:
+	swpb r0
+	swpb r15
+	swpb r8
+	swpb r7
+	swpb r1
+	swpb r2
+	swpb r12
+	swpb r2
+	.text
+	.global swpw
+swpw:
+	swpw r0,r0
+	swpw r15,r15
+	swpw r8,r8
+	swpw r7,r7
+	swpw r1,r1
+	swpw r12,r4
+	swpw r8,r2
+	swpw r5,r13
+	.text
+	.global andgrgr
+andgrgr:
+	and r0,r0
+	and r15,r15
+	and r8,r8
+	and r7,r7
+	and r1,r1
+	and r2,r2
+	and r15,r5
+	and r7,r5
+	.text
+	.global andimm8
+andimm8:
+	and Rx,#0
+	and Rx,#255
+	and Rx,#128
+	and Rx,#127
+	and Rx,#1
+	and Rx,#206
+	and Rx,#11
+	and Rx,#232
+	.text
+	.global andgrimm16
+andgrimm16:
+	and r0,#0
+	and r15,#65535
+	and r8,#32768
+	and r7,#32767
+	and r1,#1
+	and r10,#17229
+	and r11,#61451
+	and r5,#46925
+	.text
+	.global orgrgr
+orgrgr:
+	or r0,r0
+	or r15,r15
+	or r8,r8
+	or r7,r7
+	or r1,r1
+	or r3,r5
+	or r14,r15
+	or r5,r12
+	.text
+	.global orimm8
+orimm8:
+	or Rx,#0
+	or Rx,#255
+	or Rx,#128
+	or Rx,#127
+	or Rx,#1
+	or Rx,#4
+	or Rx,#38
+	or Rx,#52
+	.text
+	.global orgrimm16
+orgrimm16:
+	or r0,#0
+	or r15,#65535
+	or r8,#32768
+	or r7,#32767
+	or r1,#1
+	or r2,#64563
+	or r2,#18395
+	or r1,#63059
+	.text
+	.global xorgrgr
+xorgrgr:
+	xor r0,r0
+	xor r15,r15
+	xor r8,r8
+	xor r7,r7
+	xor r1,r1
+	xor r14,r1
+	xor r9,r9
+	xor r12,r8
+	.text
+	.global xorimm8
+xorimm8:
+	xor Rx,#0
+	xor Rx,#255
+	xor Rx,#128
+	xor Rx,#127
+	xor Rx,#1
+	xor Rx,#208
+	xor Rx,#126
+	xor Rx,#55
+	.text
+	.global xorgrimm16
+xorgrimm16:
+	xor r0,#0
+	xor r15,#65535
+	xor r8,#32768
+	xor r7,#32767
+	xor r1,#1
+	xor r15,#56437
+	xor r3,#901
+	xor r2,#37017
+	.text
+	.global notgr
+notgr:
+	not r0
+	not r15
+	not r8
+	not r7
+	not r1
+	not r4
+	not r3
+	not r3
+	.text
+	.global addgrgr
+addgrgr:
+	add r0,r0
+	add r15,r15
+	add r8,r8
+	add r7,r7
+	add r1,r1
+	add r12,r7
+	add r1,r10
+	add r14,r14
+	.text
+	.global addgrimm4
+addgrimm4:
+	add r0,#0
+	add r15,#15
+	add r8,#8
+	add r7,#7
+	add r1,#1
+	add r7,#0
+	add r10,#9
+	add r7,#8
+	.text
+	.global addimm8
+addimm8:
+	add Rx,#0
+	add Rx,#255
+	add Rx,#128
+	add Rx,#127
+	add Rx,#1
+	add Rx,#25
+	add Rx,#247
+	add Rx,#221
+	.text
+	.global addgrimm16
+addgrimm16:
+	add r0,#0
+	add r15,#255
+	add r8,#128
+	add r7,#127
+	add r1,#1
+	add r3,#99
+	add r0,#15
+	add r7,#214
+	.text
+	.global adcgrgr
+adcgrgr:
+	adc r0,r0
+	adc r15,r15
+	adc r8,r8
+	adc r7,r7
+	adc r1,r1
+	adc r2,r13
+	adc r14,r10
+	adc r2,r15
+	.text
+	.global adcgrimm4
+adcgrimm4:
+	adc r0,#0
+	adc r15,#15
+	adc r8,#8
+	adc r7,#7
+	adc r1,#1
+	adc r15,#1
+	adc r1,#3
+	adc r6,#11
+	.text
+	.global adcimm8
+adcimm8:
+	adc Rx,#0
+	adc Rx,#255
+	adc Rx,#128
+	adc Rx,#127
+	adc Rx,#1
+	adc Rx,#225
+	adc Rx,#75
+	adc Rx,#18
+	.text
+	.global adcgrimm16
+adcgrimm16:
+	adc r0,#0
+	adc r15,#65535
+	adc r8,#32768
+	adc r7,#32767
+	adc r1,#1
+	adc r13,#63129
+	adc r3,#23795
+	adc r11,#49245
+	.text
+	.global subgrgr
+subgrgr:
+	sub r0,r0
+	sub r15,r15
+	sub r8,r8
+	sub r7,r7
+	sub r1,r1
+	sub r8,r8
+	sub r9,r9
+	sub r9,r15
+	.text
+	.global subgrimm4
+subgrimm4:
+	sub r0,#0
+	sub r15,#15
+	sub r8,#8
+	sub r7,#7
+	sub r1,#1
+	sub r2,#15
+	sub r12,#9
+	sub r8,#4
+	.text
+	.global subimm8
+subimm8:
+	sub Rx,#0
+	sub Rx,#255
+	sub Rx,#128
+	sub Rx,#127
+	sub Rx,#1
+	sub Rx,#205
+	sub Rx,#153
+	sub Rx,#217
+	.text
+	.global subgrimm16
+subgrimm16:
+	sub r0,#0
+	sub r15,#65535
+	sub r8,#32768
+	sub r7,#32767
+	sub r1,#1
+	sub r3,#51895
+	sub r11,#23617
+	sub r10,#7754
+	.text
+	.global sbcgrgr
+sbcgrgr:
+	sbc r0,r0
+	sbc r15,r15
+	sbc r8,r8
+	sbc r7,r7
+	sbc r1,r1
+	sbc r11,r2
+	sbc r9,r1
+	sbc r4,r15
+	.text
+	.global sbcgrimm4
+sbcgrimm4:
+	sbc r0,#0
+	sbc r15,#15
+	sbc r8,#8
+	sbc r7,#7
+	sbc r1,#1
+	sbc r10,#11
+	sbc r11,#10
+	sbc r13,#10
+	.text
+	.global sbcgrimm8
+sbcgrimm8:
+	sbc Rx,#0
+	sbc Rx,#255
+	sbc Rx,#128
+	sbc Rx,#127
+	sbc Rx,#1
+	sbc Rx,#137
+	sbc Rx,#224
+	sbc Rx,#156
+	.text
+	.global sbcgrimm16
+sbcgrimm16:
+	sbc r0,#0
+	sbc r15,#65535
+	sbc r8,#32768
+	sbc r7,#32767
+	sbc r1,#1
+	sbc r0,#32507
+	sbc r7,#8610
+	sbc r14,#20373
+	.text
+	.global incgr
+incgr:
+	inc r0
+	inc r15
+	inc r8
+	inc r7
+	inc r1
+	inc r13
+	inc r1
+	inc r11
+	.text
+	.global incgrimm2
+incgrimm2:
+	inc r0,#0
+	inc r15,#3
+	inc r8,#2
+	inc r7,#1
+	inc r1,#1
+	inc r14,#1
+	inc r5,#0
+	inc r12,#3
+	.text
+	.global decgr
+decgr:
+	dec r0
+	dec r15
+	dec r8
+	dec r7
+	dec r1
+	dec r12
+	dec r8
+	dec r10
+	.text
+	.global decgrimm2
+decgrimm2:
+	dec r0,#0
+	dec r15,#3
+	dec r8,#2
+	dec r7,#1
+	dec r1,#1
+	dec r5,#0
+	dec r13,#0
+	dec r13,#2
+	.text
+	.global rrcgrgr
+rrcgrgr:
+	rrc r0,r0
+	rrc r15,r15
+	rrc r8,r8
+	rrc r7,r7
+	rrc r1,r1
+	rrc r8,r4
+	rrc r10,r14
+	rrc r15,r9
+	.text
+	.global rrcgrimm4
+rrcgrimm4:
+	rrc r0,#0
+	rrc r15,#15
+	rrc r8,#8
+	rrc r7,#7
+	rrc r1,#1
+	rrc r11,#3
+	rrc r14,#12
+	rrc r2,#15
+	.text
+	.global rlcgrgr
+rlcgrgr:
+	rlc r0,r0
+	rlc r15,r15
+	rlc r8,r8
+	rlc r7,r7
+	rlc r1,r1
+	rlc r15,r3
+	rlc r15,r7
+	rlc r15,r10
+	.text
+	.global rlcgrimm4
+rlcgrimm4:
+	rlc r0,#0
+	rlc r15,#15
+	rlc r8,#8
+	rlc r7,#7
+	rlc r1,#1
+	rlc r8,#2
+	rlc r2,#6
+	rlc r6,#10
+	.text
+	.global shrgrgr
+shrgrgr:
+	shr r0,r0
+	shr r15,r15
+	shr r8,r8
+	shr r7,r7
+	shr r1,r1
+	shr r13,r2
+	shr r7,r8
+	shr r6,r8
+	.text
+	.global shrgrimm
+shrgrimm:
+	shr r0,#0
+	shr r15,#15
+	shr r8,#8
+	shr r7,#7
+	shr r1,#1
+	shr r9,#13
+	shr r2,#7
+	shr r8,#8
+	.text
+	.global shlgrgr
+shlgrgr:
+	shl r0,r0
+	shl r15,r15
+	shl r8,r8
+	shl r7,r7
+	shl r1,r1
+	shl r2,r3
+	shl r0,r3
+	shl r2,r1
+	.text
+	.global shlgrimm
+shlgrimm:
+	shl r0,#0
+	shl r15,#15
+	shl r8,#8
+	shl r7,#7
+	shl r1,#1
+	shl r6,#13
+	shl r3,#6
+	shl r15,#15
+	.text
+	.global asrgrgr
+asrgrgr:
+	asr r0,r0
+	asr r15,r15
+	asr r8,r8
+	asr r7,r7
+	asr r1,r1
+	asr r5,r10
+	asr r3,r5
+	asr r6,r11
+	.text
+	.global asrgrimm
+asrgrimm:
+	asr r0,#0
+	asr r15,#15
+	asr r8,#8
+	asr r7,#7
+	asr r1,#1
+	asr r13,#4
+	asr r0,#13
+	asr r6,#3
+	.text
+	.global set1grimm
+set1grimm:
+	set1 r0,#0
+	set1 r15,#15
+	set1 r8,#8
+	set1 r7,#7
+	set1 r1,#1
+	set1 r6,#10
+	set1 r13,#1
+	set1 r13,#15
+	.text
+	.global set1grgr
+set1grgr:
+	set1 r0,r0
+	set1 r15,r15
+	set1 r8,r8
+	set1 r7,r7
+	set1 r1,r1
+	set1 r6,r0
+	set1 r6,r7
+	set1 r14,r2
+	.text
+	.global set1lmemimm
+set1lmemimm:
+	set1 0,#0
+	set1 255,#7
+	set1 128,#4
+	set1 127,#3
+	set1 1,#1
+	set1 244,#3
+	set1 55,#7
+	set1 252,#5
+	.text
+	.global set1hmemimm
+set1hmemimm:
+	set1 0x7f00+0,#0
+	set1 0x7f00+255,#7
+	set1 0x7f00+128,#4
+	set1 0x7f00+127,#3
+	set1 0x7f00+1,#1
+	set1 0x7f00+10,#3
+	set1 0x7f00+99,#4
+	set1 0x7f00+148,#3
+	.text
+	.global clr1grimm
+clr1grimm:
+	clr1 r0,#0
+	clr1 r15,#15
+	clr1 r8,#8
+	clr1 r7,#7
+	clr1 r1,#1
+	clr1 r12,#0
+	clr1 r8,#11
+	clr1 r7,#7
+	.text
+	.global clr1grgr
+clr1grgr:
+	clr1 r0,r0
+	clr1 r15,r15
+	clr1 r8,r8
+	clr1 r7,r7
+	clr1 r1,r1
+	clr1 r3,r3
+	clr1 r0,r1
+	clr1 r15,r0
+	.text
+	.global clr1lmemimm
+clr1lmemimm:
+	clr1 0,#0
+	clr1 255,#7
+	clr1 128,#4
+	clr1 127,#3
+	clr1 1,#1
+	clr1 114,#7
+	clr1 229,#4
+	clr1 86,#1
+	.text
+	.global clr1hmemimm
+clr1hmemimm:
+	clr1 0x7f00+0,#0
+	clr1 0x7f00+255,#7
+	clr1 0x7f00+128,#4
+	clr1 0x7f00+127,#3
+	clr1 0x7f00+1,#1
+	clr1 0x7f00+44,#3
+	clr1 0x7f00+212,#5
+	clr1 0x7f00+67,#7
+	.text
+	.global cbwgr
+cbwgr:
+	cbw r0
+	cbw r15
+	cbw r8
+	cbw r7
+	cbw r1
+	cbw r8
+	cbw r11
+	cbw r3
+	.text
+	.global revgr
+revgr:
+	rev r0
+	rev r15
+	rev r8
+	rev r7
+	rev r1
+	rev r1
+	rev r1
+	rev r14
+	.text
+	.global bgr
+bgr:
+	br r0
+	br r15
+	br r8
+	br r7
+	br r1
+	br r0
+	br r15
+	br r12
+	.text
+	.global jmp
+jmp:
+	jmp r8,r0
+	jmp r9,r15
+	jmp r9,r8
+	jmp r8,r7
+	jmp r9,r1
+	jmp r9,r7
+	jmp r9,r5
+	jmp r8,r12
+	.text
+	.global jmpf
+jmpf:
+	jmpf 0
+	jmpf 16777215
+	jmpf 8388608
+	jmpf 8388607
+	jmpf 1
+	jmpf 10731629
+	jmpf 15094866
+	jmpf 1464024
+	.text
+	.global callrgr
+callrgr:
+	callr r0
+	callr r15
+	callr r8
+	callr r7
+	callr r1
+	callr r1
+	callr r12
+	callr r8
+	.text
+	.global callgr
+callgr:
+	call r8,r0
+	call r9,r15
+	call r9,r8
+	call r8,r7
+	call r9,r1
+	call r9,r6
+	call r9,r14
+	call r8,r12
+	.text
+	.global callfimm
+callfimm:
+	callf 0
+	callf 16777215
+	callf 8388608
+	callf 8388607
+	callf 1
+	callf 13546070
+	callf 10837983
+	callf 15197875
+	.text
+	.global icallrgr
+icallrgr:
+	icallr r0
+	icallr r15
+	icallr r8
+	icallr r7
+	icallr r1
+	icallr r15
+	icallr r12
+	icallr r9
+	.text
+	.global icallgr
+icallgr:
+	icall r8,r0
+	icall r9,r15
+	icall r9,r8
+	icall r8,r7
+	icall r9,r1
+	icall r9,r10
+	icall r8,r15
+	icall r8,r10
+	.text
+	.global icallfimm
+icallfimm:
+	icallf 0
+	icallf 16777215
+	icallf 8388608
+	icallf 8388607
+	icallf 1
+	icallf 9649954
+	icallf 1979758
+	icallf 7661640
+	.text
+	.global iret
+iret:
+	iret
+	.text
+	.global ret
+ret:
+	ret
+	.text
+	.global mul
+mul:
+	mul
+	.text
+	.global div
+div:
+	div
+	.text
+	.global nop
+nop:
+	nop
+	ret
+	.text
+	.global halt
+halt:
+	halt
+	.text
+	.global hold
+hold:
+	hold
+	.text
+	.global brk
+brk:
+	brk
+	.text
+	.global bccgrgr
+bccgrgr:
+	bge r0,r0,0+(.+4)
+	bz r15,r15,-1+(.+4)
+	bpl r8,r8,-2048+(.+4)
+	bls r7,r7,2047+(.+4)
+	bnc r1,r1,1+(.+4)
+	bc r3,r13,1799+(.+4)
+	bge r1,r10,-2019+(.+4)
+	bz r0,r5,-1132+(.+4)
+	.text
+	.global bccgrimm8
+bccgrimm8:
+	bge r0,#0,0+(.+4)
+	bz r7,#255,-1+(.+4)
+	bpl r4,#128,-2048+(.+4)
+	bls r3,#127,2047+(.+4)
+	bnc r1,#1,1+(.+4)
+	bnc r3,#8,1473+(.+4)
+	bnz.b r5,#203,1619+(.+4)
+	bc r7,#225,978+(.+4)
+	.text
+	.global bccimm16
+bccimm16:
+	bge Rx,#0,0+(.+4)
+	bz Rx,#65535,-1+(.+4)
+	bpl Rx,#32768,-128+(.+4)
+	bls Rx,#32767,127+(.+4)
+	bnc Rx,#1,1+(.+4)
+	bz.b Rx,#30715,4+(.+4)
+	bnv Rx,#62266,-13+(.+4)
+	bnv Rx,#48178,108+(.+4)
+	.text
+	.global bngrimm4
+bngrimm4:
+	bn r0,#0,0+(.+4)
+	bn r15,#15,-1+(.+4)
+	bn r8,#8,-2048+(.+4)
+	bn r7,#7,2047+(.+4)
+	bn r1,#1,1+(.+4)
+	bn r11,#3,-1975+(.+4)
+	bn r15,#4,-1205+(.+4)
+	bn r10,#8,1691+(.+4)
+	.text
+	.global bngrgr
+bngrgr:
+	bn r0,r0,0+(.+4)
+	bn r15,r15,-1+(.+4)
+	bn r8,r8,-2048+(.+4)
+	bn r7,r7,2047+(.+4)
+	bn r1,r1,1+(.+4)
+	bn r4,r3,1181+(.+4)
+	bn r5,r2,77+(.+4)
+	bn r3,r7,631+(.+4)
+	.text
+	.global bnlmemimm
+bnlmemimm:
+	bn 0,#0,0+(.+4)
+	bn 255,#7,-1+(.+4)
+	bn 128,#4,-2048+(.+4)
+	bn 127,#3,2047+(.+4)
+	bn 1,#1,1+(.+4)
+	bn 153,#7,-847+(.+4)
+	bn 204,#0,-1881+(.+4)
+	bn 242,#7,1396+(.+4)
+	.text
+	.global bnhmemimm
+bnhmemimm:
+	bn 0x7f00+0,#0,0+(.+4)
+	bn 0x7f00+255,#7,-1+(.+4)
+	bn 0x7f00+128,#4,-2048+(.+4)
+	bn 0x7f00+127,#3,2047+(.+4)
+	bn 0x7f00+1,#1,1+(.+4)
+	bn 0x7f00+185,#3,-614+(.+4)
+	bn 0x7f00+105,#1,-668+(.+4)
+	bn 0x7f00+79,#7,1312+(.+4)
+	.text
+	.global bpgrimm4
+bpgrimm4:
+	bp r0,#0,0+(.+4)
+	bp r15,#15,-1+(.+4)
+	bp r8,#8,-2048+(.+4)
+	bp r7,#7,2047+(.+4)
+	bp r1,#1,1+(.+4)
+	bp r0,#12,1075+(.+4)
+	bp r1,#5,551+(.+4)
+	bp r6,#8,1588+(.+4)
+	.text
+	.global bpgrgr
+bpgrgr:
+	bp r0,r0,0+(.+4)
+	bp r15,r15,-1+(.+4)
+	bp r8,r8,-2048+(.+4)
+	bp r7,r7,2047+(.+4)
+	bp r1,r1,1+(.+4)
+	bp r4,r9,-614+(.+4)
+	bp r9,r10,-1360+(.+4)
+	bp r4,r1,407+(.+4)
+	.text
+	.global bplmemimm
+bplmemimm:
+	bp 0,#0,0+(.+4)
+	bp 255,#7,-1+(.+4)
+	bp 128,#4,-2048+(.+4)
+	bp 127,#3,2047+(.+4)
+	bp 1,#1,1+(.+4)
+	bp 193,#3,-398+(.+4)
+	bp 250,#2,-1553+(.+4)
+	bp 180,#6,579+(.+4)
+	.text
+	.global bphmemimm
+bphmemimm:
+	bp 0x7f00+0,#0,0+(.+4)
+	bp 0x7f00+255,#7,-1+(.+4)
+	bp 0x7f00+128,#4,-2048+(.+4)
+	bp 0x7f00+127,#3,2047+(.+4)
+	bp 0x7f00+1,#1,1+(.+4)
+	bp 0x7f00+195,#1,-432+(.+4)
+	bp 0x7f00+129,#5,-1508+(.+4)
+	bp 0x7f00+56,#3,1723+(.+4)
+	.text
+	.global bcc
+bcc:
+	bge 0+(.+2)
+	bz -1+(.+2)
+	bpl -128+(.+2)
+	bls 127+(.+2)
+	bnc 1+(.+2)
+	bnz.b 48+(.+2)
+	bnc -7+(.+2)
+	bnz.b 74+(.+2)
+	.text
+	.global br
+br:
+	br 0+(.+2)
+	br -2+(.+2)
+	br -2048+(.+2)
+	br 2046+(.+2)
+	br 1+(.+2)
+	br 1472+(.+2)
+	br 1618+(.+2)
+	br 978+(.+2)
+	.text
+	.global callrimm
+callrimm:
+	callr 0+(.+2)
+	callr -2+(.+2)
+	callr -2048+(.+2)
+	callr 2046+(.+2)
+	callr 1+(.+2)
+	callr 1472+(.+2)
+	callr 1618+(.+2)
+	callr 978+(.+2)
Index: gas/testsuite/gas/xstormy16/allinsn.sh
===================================================================
RCS file: allinsn.sh
diff -N allinsn.sh
--- gas/testsuite/gas/xstormy16/allinsn.sh	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/allinsn.sh	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,1389 @@
+#/bin/sh
+# Generate test result data for xstormy16 GAS testing.
+# This script is machine generated.
+# It is intended to be run in the testsuite source directory.
+#
+# Syntax: build.sh /path/to/build/gas
+
+if [ $# = 0 ] ; then
+  if [ ! -x ../gas/as-new ] ; then
+    echo "Usage: $0 [/path/to/gas/build]"
+  else
+    BUILD=`pwd`/../gas
+  fi
+else
+  BUILD=$1
+fi
+
+if [ ! -x $BUILD/as-new ] ; then
+  echo "$BUILD is not a gas build directory"
+  exit 1
+fi
+
+# Put results here, so we preserve the existing set for comparison.
+rm -rf tmpdir
+mkdir tmpdir
+cd tmpdir
+
+function gentest {
+    rm -f a.out
+    $BUILD/as-new ${1}.s -o a.out
+    echo "#as:" >${1}.d
+    echo "#objdump: -dr" >>${1}.d
+    echo "#name: $1" >>${1}.d
+    $BUILD/../binutils/objdump -dr a.out | 	sed -e 's/(/\\(/g'             -e 's/)/\\)/g'             -e 's/\$/\\$/g'             -e 's/\[/\\\[/g'             -e 's/\]/\\\]/g'             -e 's/[+]/\\+/g'             -e 's/[.]/\\./g'             -e 's/[*]/\\*/g' | 	sed -e 's/^.*file format.*$/.*: +file format .*/' 	>>${1}.d
+    rm -f a.out
+}
+
+# Now come all the testcases.
+cat > allinsn.s <<EOF
+ .data
+foodata: .word 42
+ .text
+footext:
+	.text
+	.global movlmemimm
+movlmemimm:
+	mov.b 0,#0
+	mov.w 255,#65535
+	mov.w 128,#32768
+	mov.b 127,#32767
+	mov.w 1,#1
+	mov.w 81,#64681
+	mov.w 247,#42230
+	mov.b 84,#16647
+	.text
+	.global movhmemimm
+movhmemimm:
+	mov.b 0x7f00+0,#0
+	mov.w 0x7f00+255,#65535
+	mov.w 0x7f00+128,#32768
+	mov.b 0x7f00+127,#32767
+	mov.w 0x7f00+1,#1
+	mov.b 0x7f00+165,#1944
+	mov.w 0x7f00+186,#11517
+	mov.b 0x7f00+63,#25556
+	.text
+	.global movlgrmem
+movlgrmem:
+	mov.b r0,0
+	mov.w r7,255
+	mov.w r4,128
+	mov.b r3,127
+	mov.w r1,1
+	mov.w r6,179
+	mov.w r0,183
+	mov.b r3,41
+	.text
+	.global movhgrmem
+movhgrmem:
+	mov.b r0,0x7f00+0
+	mov.w r7,0x7f00+255
+	mov.w r4,0x7f00+128
+	mov.b r3,0x7f00+127
+	mov.w r1,0x7f00+1
+	mov.b r2,0x7f00+114
+	mov.w r2,0x7f00+210
+	mov.w r5,0x7f00+181
+	.text
+	.global movlmemgr
+movlmemgr:
+	mov.b 0,r0
+	mov.w 255,r7
+	mov.w 128,r4
+	mov.b 127,r3
+	mov.w 1,r1
+	mov.w 137,r0
+	mov.w 26,r0
+	mov.b 127,r4
+	.text
+	.global movhmemgr
+movhmemgr:
+	mov.b 0x7f00+0,r0
+	mov.w 0x7f00+255,r7
+	mov.w 0x7f00+128,r4
+	mov.b 0x7f00+127,r3
+	mov.w 0x7f00+1,r1
+	mov.w 0x7f00+98,r3
+	mov.w 0x7f00+135,r7
+	mov.b 0x7f00+229,r2
+	.text
+	.global movgrgri
+movgrgri:
+	mov.b r0,(r0)
+	mov.w r7,(r15)
+	mov.w r4,(r8)
+	mov.b r3,(r7)
+	mov.w r1,(r1)
+	mov.w r6,(r4)
+	mov.b r0,(r12)
+	mov.w r5,(r9)
+	.text
+	.global movgrgripostinc
+movgrgripostinc:
+	mov.b r0,(r0++)
+	mov.w r7,(r15++)
+	mov.w r4,(r8++)
+	mov.b r3,(r7++)
+	mov.w r1,(r1++)
+	mov.w r4,(r8++)
+	mov.w r3,(r12++)
+	mov.b r6,(r4++)
+	.text
+	.global movgrgripredec
+movgrgripredec:
+	mov.b r0,(--r0)
+	mov.w r7,(--r15)
+	mov.w r4,(--r8)
+	mov.b r3,(--r7)
+	mov.w r1,(--r1)
+	mov.w r5,(--r9)
+	mov.w r4,(--r14)
+	mov.b r4,(--r7)
+	.text
+	.global movgrigr
+movgrigr:
+	mov.b (r0),r0
+	mov.w (r15),r7
+	mov.w (r8),r4
+	mov.b (r7),r3
+	mov.w (r1),r1
+	mov.w (r4),r3
+	mov.b (r3),r6
+	mov.w (r7),r0
+	.text
+	.global movgripostincgr
+movgripostincgr:
+	mov.b (r0++),r0
+	mov.w (r15++),r7
+	mov.w (r8++),r4
+	mov.b (r7++),r3
+	mov.w (r1++),r1
+	mov.w (r12++),r5
+	mov.b (r4++),r2
+	mov.b (r11++),r6
+	.text
+	.global movgripredecgr
+movgripredecgr:
+	mov.b (--r0),r0
+	mov.w (--r15),r7
+	mov.w (--r8),r4
+	mov.b (--r7),r3
+	mov.w (--r1),r1
+	mov.b (--r8),r3
+	mov.b (--r11),r4
+	mov.w (--r1),r6
+	.text
+	.global movgrgrii
+movgrgrii:
+	mov.b r0,(r0,0)
+	mov.w r7,(r15,-1)
+	mov.w r4,(r8,-2048)
+	mov.b r3,(r7,2047)
+	mov.w r1,(r1,1)
+	mov.w r6,(r8,-452)
+	mov.w r4,(r11,572)
+	mov.b r1,(r1,-1718)
+	.text
+	.global movgrgriipostinc
+movgrgriipostinc:
+	mov.b r0,(r0++,0)
+	mov.w r7,(r15++,-1)
+	mov.w r4,(r8++,-2048)
+	mov.b r3,(r7++,2047)
+	mov.w r1,(r1++,1)
+	mov.w r6,(r0++,-64)
+	mov.b r7,(r15++,1060)
+	mov.b r0,(r7++,847)
+	.text
+	.global movgrgriipredec
+movgrgriipredec:
+	mov.b r0,(--r0,0)
+	mov.w r7,(--r15,-1)
+	mov.w r4,(--r8,-2048)
+	mov.b r3,(--r7,2047)
+	mov.w r1,(--r1,1)
+	mov.w r0,(--r15,1780)
+	mov.w r6,(--r1,1506)
+	mov.w r7,(--r3,-2033)
+	.text
+	.global movgriigr
+movgriigr:
+	mov.b (r0,0),r0
+	mov.w (r15,-1),r7
+	mov.w (r8,-2048),r4
+	mov.b (r7,2047),r3
+	mov.w (r1,1),r1
+	mov.w (r7,1948),r5
+	mov.b (r3,-844),r4
+	mov.w (r15,1704),r0
+	.text
+	.global movgriipostincgr
+movgriipostincgr:
+	mov.b (r0++,0),r0
+	mov.w (r15++,-1),r7
+	mov.w (r8++,-2048),r4
+	mov.b (r7++,2047),r3
+	mov.w (r1++,1),r1
+	mov.w (r2++,-176),r7
+	mov.w (r8++,1389),r4
+	mov.b (r3++,47),r0
+	.text
+	.global movgriipredecgr
+movgriipredecgr:
+	mov.b (--r0,0),r0
+	mov.w (--r15,-1),r7
+	mov.w (--r8,-2048),r4
+	mov.b (--r7,2047),r3
+	mov.w (--r1,1),r1
+	mov.b (--r8,1004),r4
+	mov.w (--r14,-1444),r2
+	mov.b (--r5,-927),r4
+	.text
+	.global movgrgr
+movgrgr:
+	mov r0,r0
+	mov r15,r15
+	mov r8,r8
+	mov r7,r7
+	mov r1,r1
+	mov r9,r14
+	mov r7,r15
+	mov r12,r15
+	.text
+	.global movimm8
+movimm8:
+	mov Rx,#0
+	mov Rx,#255
+	mov Rx,#128
+	mov Rx,#127
+	mov Rx,#1
+	mov Rx,#136
+	mov Rx,#83
+	mov Rx,#104
+	.text
+	.global movwimm8
+movwimm8:
+	mov.w Rx,#0
+	mov.w Rx,#255
+	mov.w Rx,#128
+	mov.w Rx,#127
+	mov.w Rx,#1
+	mov.w Rx,#92
+	mov.w Rx,#97
+	mov.w Rx,#4
+	.text
+	.global movgrimm8
+movgrimm8:
+	mov r0,#0
+	mov r7,#255
+	mov r4,#128
+	mov r3,#127
+	mov r1,#1
+	mov r2,#206
+	mov r4,#55
+	mov r2,#3
+	.text
+	.global movwgrimm8
+movwgrimm8:
+	mov.w r0,#0
+	mov.w r7,#255
+	mov.w r4,#128
+	mov.w r3,#127
+	mov.w r1,#1
+	mov.w r4,#243
+	mov.w r3,#55
+	mov.w r2,#108
+	.text
+	.global movgrimm16
+movgrimm16:
+	mov r0,#0
+	mov r15,#65535
+	mov r8,#32768
+	mov r7,#32767
+	mov r1,#1
+	mov r4,#20066
+	mov r3,#7190
+	mov r2,#15972
+	.text
+	.global movwgrimm16
+movwgrimm16:
+	mov.w r0,#0
+	mov.w r15,#65535
+	mov.w r8,#32768
+	mov.w r7,#32767
+	mov.w r1,#1
+	mov.w r6,#16648
+	mov.w r8,#26865
+	mov.w r10,#20010
+	.text
+	.global movlowgr
+movlowgr:
+	mov.b r0,RxL
+	mov.b r15,RxL
+	mov.b r8,RxL
+	mov.b r7,RxL
+	mov.b r1,RxL
+	mov.b r11,RxL
+	mov.b r5,RxL
+	mov.b r2,RxL
+	.text
+	.global movhighgr
+movhighgr:
+	mov.b r0,RxH
+	mov.b r15,RxH
+	mov.b r8,RxH
+	mov.b r7,RxH
+	mov.b r1,RxH
+	mov.b r2,RxH
+	mov.b r7,RxH
+	mov.b r2,RxH
+	.text
+	.global movfgrgri
+movfgrgri:
+	movf.b r0,(r0)
+	movf.w r7,(r15)
+	movf.w r4,(r8)
+	movf.b r3,(r7)
+	movf.w r1,(r1)
+	movf.b r6,(r15)
+	movf.b r1,(r10)
+	movf.b r6,(r1)
+	.text
+	.global movfgrgripostinc
+movfgrgripostinc:
+	movf.b r0,(r0++)
+	movf.w r7,(r15++)
+	movf.w r4,(r8++)
+	movf.b r3,(r7++)
+	movf.w r1,(r1++)
+	movf.b r2,(r5++)
+	movf.w r5,(r10++)
+	movf.w r7,(r5++)
+	.text
+	.global movfgrgripredec
+movfgrgripredec:
+	movf.b r0,(--r0)
+	movf.w r7,(--r15)
+	movf.w r4,(--r8)
+	movf.b r3,(--r7)
+	movf.w r1,(--r1)
+	movf.w r6,(--r10)
+	movf.b r1,(--r14)
+	movf.w r3,(--r7)
+	.text
+	.global movfgrigr
+movfgrigr:
+	movf.b (r0),r0
+	movf.w (r15),r7
+	movf.w (r8),r4
+	movf.b (r7),r3
+	movf.w (r1),r1
+	movf.b (r5),r4
+	movf.b (r3),r4
+	movf.w (r12),r3
+	.text
+	.global movfgripostincgr
+movfgripostincgr:
+	movf.b (r0++),r0
+	movf.w (r15++),r7
+	movf.w (r8++),r4
+	movf.b (r7++),r3
+	movf.w (r1++),r1
+	movf.b (r9++),r5
+	movf.w (r10++),r4
+	movf.b (r9++),r1
+	.text
+	.global movfgripredecgr
+movfgripredecgr:
+	movf.b (--r0),r0
+	movf.w (--r15),r7
+	movf.w (--r8),r4
+	movf.b (--r7),r3
+	movf.w (--r1),r1
+	movf.b (--r0),r2
+	movf.w (--r11),r2
+	movf.b (--r10),r5
+	.text
+	.global movfgrgrii
+movfgrgrii:
+	movf.b r0,(r0,r0,0)
+	movf.w r7,(r7,r15,-1)
+	movf.w r4,(r4,r8,-2048)
+	movf.b r3,(r3,r7,2047)
+	movf.w r1,(r1,r1,1)
+	movf.b r7,(r7,r0,1473)
+	movf.w r2,(r0,r9,-1522)
+	movf.w r2,(r5,r1,480)
+	.text
+	.global movfgrgriipostinc
+movfgrgriipostinc:
+	movf.b r0,(r0,r0++,0)
+	movf.w r7,(r7,r15++,-1)
+	movf.w r4,(r4,r8++,-2048)
+	movf.b r3,(r3,r7++,2047)
+	movf.w r1,(r1,r1++,1)
+	movf.b r1,(r0,r2++,1398)
+	movf.w r4,(r0,r9++,-778)
+	movf.w r1,(r5,r14++,1564)
+	.text
+	.global movfgrgriipredec
+movfgrgriipredec:
+	movf.b r0,(r0,--r0,0)
+	movf.w r7,(r7,--r15,-1)
+	movf.w r4,(r4,--r8,-2048)
+	movf.b r3,(r3,--r7,2047)
+	movf.w r1,(r1,--r1,1)
+	movf.b r6,(r0,--r7,254)
+	movf.w r5,(r4,--r12,1673)
+	movf.b r0,(r0,--r10,-38)
+	.text
+	.global movfgriigr
+movfgriigr:
+	movf.b (r0,r0,0),r0
+	movf.w (r7,r15,-1),r7
+	movf.w (r4,r8,-2048),r4
+	movf.b (r3,r7,2047),r3
+	movf.w (r1,r1,1),r1
+	movf.w (r7,r2,-1636),r3
+	movf.w (r6,r12,1626),r1
+	movf.b (r3,r14,1540),r0
+	.text
+	.global movfgriipostincgr
+movfgriipostincgr:
+	movf.b (r0,r0++,0),r0
+	movf.w (r7,r15++,-1),r7
+	movf.w (r4,r8++,-2048),r4
+	movf.b (r3,r7++,2047),r3
+	movf.w (r1,r1++,1),r1
+	movf.b (r7,r13++,466),r3
+	movf.b (r3,r11++,250),r4
+	movf.b (r2,r10++,-1480),r7
+	.text
+	.global movfgriipredecgr
+movfgriipredecgr:
+	movf.b (r0,--r0,0),r0
+	movf.w (r7,--r15,-1),r7
+	movf.w (r4,--r8,-2048),r4
+	movf.b (r3,--r7,2047),r3
+	movf.w (r1,--r1,1),r1
+	movf.b (r5,--r10,-608),r0
+	movf.b (r1,--r11,831),r7
+	movf.w (r7,--r15,-2036),r6
+	.text
+	.global maskgrgr
+maskgrgr:
+	mask r0,r0
+	mask r15,r15
+	mask r8,r8
+	mask r7,r7
+	mask r1,r1
+	mask r4,r0
+	mask r6,r11
+	mask r8,r4
+	.text
+	.global maskgrimm16
+maskgrimm16:
+	mask r0,#0
+	mask r15,#65535
+	mask r8,#32768
+	mask r7,#32767
+	mask r1,#1
+	mask r7,#18153
+	mask r15,#7524
+	mask r14,#34349
+	.text
+	.global pushgr
+pushgr:
+	push r0
+	push r15
+	push r8
+	push r7
+	push r1
+	push r9
+	push r4
+	push r3
+	.text
+	.global popgr
+popgr:
+	pop r0
+	pop r15
+	pop r8
+	pop r7
+	pop r1
+	pop r3
+	pop r2
+	pop r12
+	.text
+	.global swpn
+swpn:
+	swpn r0
+	swpn r15
+	swpn r8
+	swpn r7
+	swpn r1
+	swpn r15
+	swpn r4
+	swpn r3
+	.text
+	.global swpb
+swpb:
+	swpb r0
+	swpb r15
+	swpb r8
+	swpb r7
+	swpb r1
+	swpb r2
+	swpb r12
+	swpb r2
+	.text
+	.global swpw
+swpw:
+	swpw r0,r0
+	swpw r15,r15
+	swpw r8,r8
+	swpw r7,r7
+	swpw r1,r1
+	swpw r12,r4
+	swpw r8,r2
+	swpw r5,r13
+	.text
+	.global andgrgr
+andgrgr:
+	and r0,r0
+	and r15,r15
+	and r8,r8
+	and r7,r7
+	and r1,r1
+	and r2,r2
+	and r15,r5
+	and r7,r5
+	.text
+	.global andimm8
+andimm8:
+	and Rx,#0
+	and Rx,#255
+	and Rx,#128
+	and Rx,#127
+	and Rx,#1
+	and Rx,#206
+	and Rx,#11
+	and Rx,#232
+	.text
+	.global andgrimm16
+andgrimm16:
+	and r0,#0
+	and r15,#65535
+	and r8,#32768
+	and r7,#32767
+	and r1,#1
+	and r10,#17229
+	and r11,#61451
+	and r5,#46925
+	.text
+	.global orgrgr
+orgrgr:
+	or r0,r0
+	or r15,r15
+	or r8,r8
+	or r7,r7
+	or r1,r1
+	or r3,r5
+	or r14,r15
+	or r5,r12
+	.text
+	.global orimm8
+orimm8:
+	or Rx,#0
+	or Rx,#255
+	or Rx,#128
+	or Rx,#127
+	or Rx,#1
+	or Rx,#4
+	or Rx,#38
+	or Rx,#52
+	.text
+	.global orgrimm16
+orgrimm16:
+	or r0,#0
+	or r15,#65535
+	or r8,#32768
+	or r7,#32767
+	or r1,#1
+	or r2,#64563
+	or r2,#18395
+	or r1,#63059
+	.text
+	.global xorgrgr
+xorgrgr:
+	xor r0,r0
+	xor r15,r15
+	xor r8,r8
+	xor r7,r7
+	xor r1,r1
+	xor r14,r1
+	xor r9,r9
+	xor r12,r8
+	.text
+	.global xorimm8
+xorimm8:
+	xor Rx,#0
+	xor Rx,#255
+	xor Rx,#128
+	xor Rx,#127
+	xor Rx,#1
+	xor Rx,#208
+	xor Rx,#126
+	xor Rx,#55
+	.text
+	.global xorgrimm16
+xorgrimm16:
+	xor r0,#0
+	xor r15,#65535
+	xor r8,#32768
+	xor r7,#32767
+	xor r1,#1
+	xor r15,#56437
+	xor r3,#901
+	xor r2,#37017
+	.text
+	.global notgr
+notgr:
+	not r0
+	not r15
+	not r8
+	not r7
+	not r1
+	not r4
+	not r3
+	not r3
+	.text
+	.global addgrgr
+addgrgr:
+	add r0,r0
+	add r15,r15
+	add r8,r8
+	add r7,r7
+	add r1,r1
+	add r12,r7
+	add r1,r10
+	add r14,r14
+	.text
+	.global addgrimm4
+addgrimm4:
+	add r0,#0
+	add r15,#15
+	add r8,#8
+	add r7,#7
+	add r1,#1
+	add r7,#0
+	add r10,#9
+	add r7,#8
+	.text
+	.global addimm8
+addimm8:
+	add Rx,#0
+	add Rx,#255
+	add Rx,#128
+	add Rx,#127
+	add Rx,#1
+	add Rx,#25
+	add Rx,#247
+	add Rx,#221
+	.text
+	.global addgrimm16
+addgrimm16:
+	add r0,#0
+	add r15,#255
+	add r8,#128
+	add r7,#127
+	add r1,#1
+	add r3,#99
+	add r0,#15
+	add r7,#214
+	.text
+	.global adcgrgr
+adcgrgr:
+	adc r0,r0
+	adc r15,r15
+	adc r8,r8
+	adc r7,r7
+	adc r1,r1
+	adc r2,r13
+	adc r14,r10
+	adc r2,r15
+	.text
+	.global adcgrimm4
+adcgrimm4:
+	adc r0,#0
+	adc r15,#15
+	adc r8,#8
+	adc r7,#7
+	adc r1,#1
+	adc r15,#1
+	adc r1,#3
+	adc r6,#11
+	.text
+	.global adcimm8
+adcimm8:
+	adc Rx,#0
+	adc Rx,#255
+	adc Rx,#128
+	adc Rx,#127
+	adc Rx,#1
+	adc Rx,#225
+	adc Rx,#75
+	adc Rx,#18
+	.text
+	.global adcgrimm16
+adcgrimm16:
+	adc r0,#0
+	adc r15,#65535
+	adc r8,#32768
+	adc r7,#32767
+	adc r1,#1
+	adc r13,#63129
+	adc r3,#23795
+	adc r11,#49245
+	.text
+	.global subgrgr
+subgrgr:
+	sub r0,r0
+	sub r15,r15
+	sub r8,r8
+	sub r7,r7
+	sub r1,r1
+	sub r8,r8
+	sub r9,r9
+	sub r9,r15
+	.text
+	.global subgrimm4
+subgrimm4:
+	sub r0,#0
+	sub r15,#15
+	sub r8,#8
+	sub r7,#7
+	sub r1,#1
+	sub r2,#15
+	sub r12,#9
+	sub r8,#4
+	.text
+	.global subimm8
+subimm8:
+	sub Rx,#0
+	sub Rx,#255
+	sub Rx,#128
+	sub Rx,#127
+	sub Rx,#1
+	sub Rx,#205
+	sub Rx,#153
+	sub Rx,#217
+	.text
+	.global subgrimm16
+subgrimm16:
+	sub r0,#0
+	sub r15,#65535
+	sub r8,#32768
+	sub r7,#32767
+	sub r1,#1
+	sub r3,#51895
+	sub r11,#23617
+	sub r10,#7754
+	.text
+	.global sbcgrgr
+sbcgrgr:
+	sbc r0,r0
+	sbc r15,r15
+	sbc r8,r8
+	sbc r7,r7
+	sbc r1,r1
+	sbc r11,r2
+	sbc r9,r1
+	sbc r4,r15
+	.text
+	.global sbcgrimm4
+sbcgrimm4:
+	sbc r0,#0
+	sbc r15,#15
+	sbc r8,#8
+	sbc r7,#7
+	sbc r1,#1
+	sbc r10,#11
+	sbc r11,#10
+	sbc r13,#10
+	.text
+	.global sbcgrimm8
+sbcgrimm8:
+	sbc Rx,#0
+	sbc Rx,#255
+	sbc Rx,#128
+	sbc Rx,#127
+	sbc Rx,#1
+	sbc Rx,#137
+	sbc Rx,#224
+	sbc Rx,#156
+	.text
+	.global sbcgrimm16
+sbcgrimm16:
+	sbc r0,#0
+	sbc r15,#65535
+	sbc r8,#32768
+	sbc r7,#32767
+	sbc r1,#1
+	sbc r0,#32507
+	sbc r7,#8610
+	sbc r14,#20373
+	.text
+	.global incgr
+incgr:
+	inc r0
+	inc r15
+	inc r8
+	inc r7
+	inc r1
+	inc r13
+	inc r1
+	inc r11
+	.text
+	.global incgrimm2
+incgrimm2:
+	inc r0,#0
+	inc r15,#3
+	inc r8,#2
+	inc r7,#1
+	inc r1,#1
+	inc r14,#1
+	inc r5,#0
+	inc r12,#3
+	.text
+	.global decgr
+decgr:
+	dec r0
+	dec r15
+	dec r8
+	dec r7
+	dec r1
+	dec r12
+	dec r8
+	dec r10
+	.text
+	.global decgrimm2
+decgrimm2:
+	dec r0,#0
+	dec r15,#3
+	dec r8,#2
+	dec r7,#1
+	dec r1,#1
+	dec r5,#0
+	dec r13,#0
+	dec r13,#2
+	.text
+	.global rrcgrgr
+rrcgrgr:
+	rrc r0,r0
+	rrc r15,r15
+	rrc r8,r8
+	rrc r7,r7
+	rrc r1,r1
+	rrc r8,r4
+	rrc r10,r14
+	rrc r15,r9
+	.text
+	.global rrcgrimm4
+rrcgrimm4:
+	rrc r0,#0
+	rrc r15,#15
+	rrc r8,#8
+	rrc r7,#7
+	rrc r1,#1
+	rrc r11,#3
+	rrc r14,#12
+	rrc r2,#15
+	.text
+	.global rlcgrgr
+rlcgrgr:
+	rlc r0,r0
+	rlc r15,r15
+	rlc r8,r8
+	rlc r7,r7
+	rlc r1,r1
+	rlc r15,r3
+	rlc r15,r7
+	rlc r15,r10
+	.text
+	.global rlcgrimm4
+rlcgrimm4:
+	rlc r0,#0
+	rlc r15,#15
+	rlc r8,#8
+	rlc r7,#7
+	rlc r1,#1
+	rlc r8,#2
+	rlc r2,#6
+	rlc r6,#10
+	.text
+	.global shrgrgr
+shrgrgr:
+	shr r0,r0
+	shr r15,r15
+	shr r8,r8
+	shr r7,r7
+	shr r1,r1
+	shr r13,r2
+	shr r7,r8
+	shr r6,r8
+	.text
+	.global shrgrimm
+shrgrimm:
+	shr r0,#0
+	shr r15,#15
+	shr r8,#8
+	shr r7,#7
+	shr r1,#1
+	shr r9,#13
+	shr r2,#7
+	shr r8,#8
+	.text
+	.global shlgrgr
+shlgrgr:
+	shl r0,r0
+	shl r15,r15
+	shl r8,r8
+	shl r7,r7
+	shl r1,r1
+	shl r2,r3
+	shl r0,r3
+	shl r2,r1
+	.text
+	.global shlgrimm
+shlgrimm:
+	shl r0,#0
+	shl r15,#15
+	shl r8,#8
+	shl r7,#7
+	shl r1,#1
+	shl r6,#13
+	shl r3,#6
+	shl r15,#15
+	.text
+	.global asrgrgr
+asrgrgr:
+	asr r0,r0
+	asr r15,r15
+	asr r8,r8
+	asr r7,r7
+	asr r1,r1
+	asr r5,r10
+	asr r3,r5
+	asr r6,r11
+	.text
+	.global asrgrimm
+asrgrimm:
+	asr r0,#0
+	asr r15,#15
+	asr r8,#8
+	asr r7,#7
+	asr r1,#1
+	asr r13,#4
+	asr r0,#13
+	asr r6,#3
+	.text
+	.global set1grimm
+set1grimm:
+	set1 r0,#0
+	set1 r15,#15
+	set1 r8,#8
+	set1 r7,#7
+	set1 r1,#1
+	set1 r6,#10
+	set1 r13,#1
+	set1 r13,#15
+	.text
+	.global set1grgr
+set1grgr:
+	set1 r0,r0
+	set1 r15,r15
+	set1 r8,r8
+	set1 r7,r7
+	set1 r1,r1
+	set1 r6,r0
+	set1 r6,r7
+	set1 r14,r2
+	.text
+	.global set1lmemimm
+set1lmemimm:
+	set1 0,#0
+	set1 255,#7
+	set1 128,#4
+	set1 127,#3
+	set1 1,#1
+	set1 244,#3
+	set1 55,#7
+	set1 252,#5
+	.text
+	.global set1hmemimm
+set1hmemimm:
+	set1 0x7f00+0,#0
+	set1 0x7f00+255,#7
+	set1 0x7f00+128,#4
+	set1 0x7f00+127,#3
+	set1 0x7f00+1,#1
+	set1 0x7f00+10,#3
+	set1 0x7f00+99,#4
+	set1 0x7f00+148,#3
+	.text
+	.global clr1grimm
+clr1grimm:
+	clr1 r0,#0
+	clr1 r15,#15
+	clr1 r8,#8
+	clr1 r7,#7
+	clr1 r1,#1
+	clr1 r12,#0
+	clr1 r8,#11
+	clr1 r7,#7
+	.text
+	.global clr1grgr
+clr1grgr:
+	clr1 r0,r0
+	clr1 r15,r15
+	clr1 r8,r8
+	clr1 r7,r7
+	clr1 r1,r1
+	clr1 r3,r3
+	clr1 r0,r1
+	clr1 r15,r0
+	.text
+	.global clr1lmemimm
+clr1lmemimm:
+	clr1 0,#0
+	clr1 255,#7
+	clr1 128,#4
+	clr1 127,#3
+	clr1 1,#1
+	clr1 114,#7
+	clr1 229,#4
+	clr1 86,#1
+	.text
+	.global clr1hmemimm
+clr1hmemimm:
+	clr1 0x7f00+0,#0
+	clr1 0x7f00+255,#7
+	clr1 0x7f00+128,#4
+	clr1 0x7f00+127,#3
+	clr1 0x7f00+1,#1
+	clr1 0x7f00+44,#3
+	clr1 0x7f00+212,#5
+	clr1 0x7f00+67,#7
+	.text
+	.global cbwgr
+cbwgr:
+	cbw r0
+	cbw r15
+	cbw r8
+	cbw r7
+	cbw r1
+	cbw r8
+	cbw r11
+	cbw r3
+	.text
+	.global revgr
+revgr:
+	rev r0
+	rev r15
+	rev r8
+	rev r7
+	rev r1
+	rev r1
+	rev r1
+	rev r14
+	.text
+	.global bgr
+bgr:
+	br r0
+	br r15
+	br r8
+	br r7
+	br r1
+	br r0
+	br r15
+	br r12
+	.text
+	.global jmp
+jmp:
+	jmp r0,r0
+	jmp r1,r15
+	jmp r1,r8
+	jmp r0,r7
+	jmp r1,r1
+	jmp r1,r7
+	jmp r1,r5
+	jmp r0,r12
+	.text
+	.global jmpf
+jmpf:
+	jmpf 0
+	jmpf 16777215
+	jmpf 8388608
+	jmpf 8388607
+	jmpf 1
+	jmpf 10731629
+	jmpf 15094866
+	jmpf 1464024
+	.text
+	.global callrgr
+callrgr:
+	callr r0
+	callr r15
+	callr r8
+	callr r7
+	callr r1
+	callr r1
+	callr r12
+	callr r8
+	.text
+	.global callgr
+callgr:
+	call r0,r0
+	call r1,r15
+	call r1,r8
+	call r0,r7
+	call r1,r1
+	call r1,r6
+	call r1,r14
+	call r0,r12
+	.text
+	.global callfimm
+callfimm:
+	callf 0
+	callf 16777215
+	callf 8388608
+	callf 8388607
+	callf 1
+	callf 13546070
+	callf 10837983
+	callf 15197875
+	.text
+	.global icallrgr
+icallrgr:
+	icallr r0
+	icallr r15
+	icallr r8
+	icallr r7
+	icallr r1
+	icallr r15
+	icallr r12
+	icallr r9
+	.text
+	.global icallgr
+icallgr:
+	icall r0,r0
+	icall r1,r15
+	icall r1,r8
+	icall r0,r7
+	icall r1,r1
+	icall r1,r10
+	icall r0,r15
+	icall r0,r10
+	.text
+	.global icallfimm
+icallfimm:
+	icallf 0
+	icallf 16777215
+	icallf 8388608
+	icallf 8388607
+	icallf 1
+	icallf 9649954
+	icallf 1979758
+	icallf 7661640
+	.text
+	.global iret
+iret:
+	iret
+	.text
+	.global ret
+ret:
+	ret
+	.text
+	.global mul
+mul:
+	mul
+	.text
+	.global div
+div:
+	div
+	.text
+	.global nop
+nop:
+	nop
+	ret
+	.text
+	.global halt
+halt:
+	halt
+	.text
+	.global hold
+hold:
+	hold
+	.text
+	.global brk
+brk:
+	brk
+	.text
+	.global bccgrgr
+bccgrgr:
+	bge r0,r0,0+(.+4)
+	bz r15,r15,-1+(.+4)
+	bpl r8,r8,-2048+(.+4)
+	bls r7,r7,2047+(.+4)
+	bnc r1,r1,1+(.+4)
+	bc r3,r13,1799+(.+4)
+	bge r1,r10,-2019+(.+4)
+	bz r0,r5,-1132+(.+4)
+	.text
+	.global bccgrimm8
+bccgrimm8:
+	bge r0,#0,0+(.+4)
+	bz r7,#255,-1+(.+4)
+	bpl r4,#128,-2048+(.+4)
+	bls r3,#127,2047+(.+4)
+	bnc r1,#1,1+(.+4)
+	bnc r3,#8,1473+(.+4)
+	bnz.b r5,#203,1619+(.+4)
+	bc r7,#225,978+(.+4)
+	.text
+	.global bccimm16
+bccimm16:
+	bge Rx,#0,0+(.+4)
+	bz Rx,#65535,-1+(.+4)
+	bpl Rx,#32768,-128+(.+4)
+	bls Rx,#32767,127+(.+4)
+	bnc Rx,#1,1+(.+4)
+	bz.b Rx,#30715,4+(.+4)
+	bnv Rx,#62266,-13+(.+4)
+	bnv Rx,#48178,108+(.+4)
+	.text
+	.global bngrimm4
+bngrimm4:
+	bn r0,#0,0+(.+4)
+	bn r15,#15,-1+(.+4)
+	bn r8,#8,-2048+(.+4)
+	bn r7,#7,2047+(.+4)
+	bn r1,#1,1+(.+4)
+	bn r11,#3,-1975+(.+4)
+	bn r15,#4,-1205+(.+4)
+	bn r10,#8,1691+(.+4)
+	.text
+	.global bngrgr
+bngrgr:
+	bn r0,r0,0+(.+4)
+	bn r15,r15,-1+(.+4)
+	bn r8,r8,-2048+(.+4)
+	bn r7,r7,2047+(.+4)
+	bn r1,r1,1+(.+4)
+	bn r4,r3,1181+(.+4)
+	bn r5,r2,77+(.+4)
+	bn r3,r7,631+(.+4)
+	.text
+	.global bnlmemimm
+bnlmemimm:
+	bn 0,#0,0+(.+4)
+	bn 255,#7,-1+(.+4)
+	bn 128,#4,-2048+(.+4)
+	bn 127,#3,2047+(.+4)
+	bn 1,#1,1+(.+4)
+	bn 153,#7,-847+(.+4)
+	bn 204,#0,-1881+(.+4)
+	bn 242,#7,1396+(.+4)
+	.text
+	.global bnhmemimm
+bnhmemimm:
+	bn 0x7f00+0,#0,0+(.+4)
+	bn 0x7f00+255,#7,-1+(.+4)
+	bn 0x7f00+128,#4,-2048+(.+4)
+	bn 0x7f00+127,#3,2047+(.+4)
+	bn 0x7f00+1,#1,1+(.+4)
+	bn 0x7f00+185,#3,-614+(.+4)
+	bn 0x7f00+105,#1,-668+(.+4)
+	bn 0x7f00+79,#7,1312+(.+4)
+	.text
+	.global bpgrimm4
+bpgrimm4:
+	bp r0,#0,0+(.+4)
+	bp r15,#15,-1+(.+4)
+	bp r8,#8,-2048+(.+4)
+	bp r7,#7,2047+(.+4)
+	bp r1,#1,1+(.+4)
+	bp r0,#12,1075+(.+4)
+	bp r1,#5,551+(.+4)
+	bp r6,#8,1588+(.+4)
+	.text
+	.global bpgrgr
+bpgrgr:
+	bp r0,r0,0+(.+4)
+	bp r15,r15,-1+(.+4)
+	bp r8,r8,-2048+(.+4)
+	bp r7,r7,2047+(.+4)
+	bp r1,r1,1+(.+4)
+	bp r4,r9,-614+(.+4)
+	bp r9,r10,-1360+(.+4)
+	bp r4,r1,407+(.+4)
+	.text
+	.global bplmemimm
+bplmemimm:
+	bp 0,#0,0+(.+4)
+	bp 255,#7,-1+(.+4)
+	bp 128,#4,-2048+(.+4)
+	bp 127,#3,2047+(.+4)
+	bp 1,#1,1+(.+4)
+	bp 193,#3,-398+(.+4)
+	bp 250,#2,-1553+(.+4)
+	bp 180,#6,579+(.+4)
+	.text
+	.global bphmemimm
+bphmemimm:
+	bp 0x7f00+0,#0,0+(.+4)
+	bp 0x7f00+255,#7,-1+(.+4)
+	bp 0x7f00+128,#4,-2048+(.+4)
+	bp 0x7f00+127,#3,2047+(.+4)
+	bp 0x7f00+1,#1,1+(.+4)
+	bp 0x7f00+195,#1,-432+(.+4)
+	bp 0x7f00+129,#5,-1508+(.+4)
+	bp 0x7f00+56,#3,1723+(.+4)
+	.text
+	.global bcc
+bcc:
+	bge 0+(.+2)
+	bz -1+(.+2)
+	bpl -128+(.+2)
+	bls 127+(.+2)
+	bnc 1+(.+2)
+	bnz.b 48+(.+2)
+	bnc -7+(.+2)
+	bnz.b 74+(.+2)
+	.text
+	.global br
+br:
+	br 0+(.+2)
+	br -2+(.+2)
+	br -2048+(.+2)
+	br 2046+(.+2)
+	br 1+(.+2)
+	br 1472+(.+2)
+	br 1618+(.+2)
+	br 978+(.+2)
+	.text
+	.global callrimm
+callrimm:
+	callr 0+(.+2)
+	callr -2+(.+2)
+	callr -2048+(.+2)
+	callr 2046+(.+2)
+	callr 1+(.+2)
+	callr 1472+(.+2)
+	callr 1618+(.+2)
+	callr 978+(.+2)
+EOF
+
+# Finally, generate the .d file.
+gentest allinsn
Index: gas/testsuite/gas/xstormy16/gcc.d
===================================================================
RCS file: gcc.d
diff -N gcc.d
--- gas/testsuite/gas/xstormy16/gcc.d	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/gcc.d	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,15 @@
+#as:
+#objdump: -dr
+#name: gcc
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+   0:	30 31 ff ff 	mov r0,#0xffff
+   4:	30 31 ff ff 	mov r0,#0xffff
+   8:	40 31 00 00 	add r0,#0x0
+			a: R_XSTORMY16_16	some_external_symbol
+   c:	30 31 00 00 	mov r0,#0x0
+			e: R_XSTORMY16_16	some_external_symbol
Index: gas/testsuite/gas/xstormy16/gcc.s
===================================================================
RCS file: gcc.s
diff -N gcc.s
--- gas/testsuite/gas/xstormy16/gcc.s	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/gcc.s	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,4 @@
+	mov.w r0,#-1
+	mov.w r0,#0xFFFF
+	add r0,#some_external_symbol
+	mov.w r0,#some_external_symbol
Index: gas/testsuite/gas/xstormy16/gcc.sh
===================================================================
RCS file: gcc.sh
diff -N gcc.sh
--- gas/testsuite/gas/xstormy16/gcc.sh	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/gcc.sh	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,45 @@
+#/bin/sh
+# Generate test result data for xstormy16 GAS testing.
+# It is intended to be run in the testsuite source directory.
+#
+# Syntax: build.sh /path/to/build/gas
+
+if [ $# = 0 ] ; then
+  if [ ! -x ../gas/as-new ] ; then
+    echo "Usage: $0 [/path/to/gas/build]"
+  else
+    BUILD=`pwd`/../gas
+  fi
+else
+  BUILD=$1
+fi
+
+if [ ! -x $BUILD/as-new ] ; then
+  echo "$BUILD is not a gas build directory"
+  exit 1
+fi
+
+# Put results here, so we preserve the existing set for comparison.
+rm -rf tmpdir
+mkdir tmpdir
+cd tmpdir
+
+function gentest {
+    rm -f a.out
+    $BUILD/as-new ${1}.s -o a.out
+    echo "#as:" >${1}.d
+    echo "#objdump: -dr" >>${1}.d
+    echo "#name: $1" >>${1}.d
+    $BUILD/../binutils/objdump -dr a.out | 	sed -e 's/(/\\(/g'             -e 's/)/\\)/g'             -e 's/\$/\\$/g'             -e 's/\[/\\\[/g'             -e 's/\]/\\\]/g'             -e 's/[+]/\\+/g'             -e 's/[.]/\\./g'             -e 's/[*]/\\*/g' | 	sed -e 's/^.*file format.*$/.*: +file format .*/' 	>>${1}.d
+    rm -f a.out
+}
+
+# Now come all the testcases.
+cat > gcc.s <<EOF
+	mov.w r0,#-1
+	mov.w r0,#0xFFFF
+	add r0,#some_external_symbol
+EOF
+
+# Finally, generate the .d file.
+gentest gcc
Index: gas/testsuite/gas/xstormy16/reloc-1.d
===================================================================
RCS file: reloc-1.d
diff -N reloc-1.d
--- gas/testsuite/gas/xstormy16/reloc-1.d	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/reloc-1.d	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,26 @@
+#as:
+#objdump: -rs
+#name: reloc-1
+
+.*: +file format .*
+
+RELOCATION RECORDS FOR \[\.text\]:
+OFFSET   TYPE              VALUE 
+0*000 R_XSTORMY16_16    global
+0*002 R_XSTORMY16_16    global\+0x00000003
+0*004 R_XSTORMY16_PC16  global\+0xfffffffc
+0*006 R_XSTORMY16_32    global
+0*00a R_XSTORMY16_32    global\+0x00000003
+0*00e R_XSTORMY16_PC32  global\+0xfffffff2
+0*012 R_XSTORMY16_8     global
+0*013 R_XSTORMY16_8     global\+0xffff8100
+0*014 R_XSTORMY16_8     global\+0x00000003
+0*015 R_XSTORMY16_PC8   global\+0xffffffeb
+0*016 R_XSTORMY16_16    dglobal
+0*018 R_XSTORMY16_16    dwglobal
+
+
+Contents of section \.text:
+ 0000 00000000 00000000 00000000 00000000  \................
+ 0010 00000000 00000000 0000               \..........      
+Contents of section \.data:
Index: gas/testsuite/gas/xstormy16/reloc-1.s
===================================================================
RCS file: reloc-1.s
diff -N reloc-1.s
--- gas/testsuite/gas/xstormy16/reloc-1.s	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/reloc-1.s	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,20 @@
+	.text
+	.hword global
+	.hword global+3
+	.hword global-.
+	.word global
+	.word global+3
+	.word global-.
+	.byte global
+	.byte global-0x7F00
+	.byte global+3
+	.byte global-.
+dglobal:
+dwglobal:
+	.globl dglobal
+	.globl dwglobal
+	.weak dwglobal
+	.hword dglobal
+	.hword dwglobal
+
+	
\ No newline at end of file
Index: gas/testsuite/gas/xstormy16/reloc-2.d
===================================================================
RCS file: reloc-2.d
diff -N reloc-2.d
--- gas/testsuite/gas/xstormy16/reloc-2.d	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/reloc-2.d	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,56 @@
+#as:
+#objdump: -dr
+#name: reloc-2
+
+.*: +file format .*
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+   0:	10 30       	inc r0,#0x1
+   2:	00 e3       	set1 0x0,#0x1
+   4:	00 7c fc 1f 	bn 0x0,#0x1,0x4
+   8:	40 31 01 00 	add r0,#0x1
+   c:	08 71 01 00 	mov\.w r0,\(r0,1\)
+  10:	01 79 00 00 	mov\.w 0x1,#0x0
+  14:	01 47       	mov Rx,#0x1
+  16:	00 79 01 00 	mov\.w 0x0,#0x1
+  1a:	01 02 00 00 	jmpf 0x1
+  1e:	ff d0       	bge 0x1f
+  20:	fd c0 00 00 	bge Rx,#0x0,0x21
+  24:	00 0d fd 0f 	bge r0,r0,0x25
+  28:	fe 1f       	br 0x28
+  2a:	00 79 00 00 	mov\.w 0x0,#0x0
+			2a: R_XSTORMY16_8	global
+  2e:	00 47       	mov Rx,#0x0
+			2e: R_XSTORMY16_8	global
+  30:	00 79 00 00 	mov\.w 0x0,#0x0
+			32: R_XSTORMY16_16	global
+  34:	fe d0       	bge 0x34
+			34: R_XSTORMY16_PC8	global
+  36:	fc c0 00 00 	bge Rx,#0x0,0x36
+			36: R_XSTORMY16_PC8	global
+  3a:	00 0d fc 0f 	bge r0,r0,0x3a
+			3c: R_XSTORMY16_REL_12	global
+  3e:	fe 1f       	br 0x3e
+			3e: R_XSTORMY16_REL_12	global
+  40:	0a d0       	bge 0x4c
+  42:	06 c0 00 00 	bge Rx,#0x0,0x4c
+  46:	00 0d 02 00 	bge r0,r0,0x4c
+  4a:	00 10       	br 0x4c
+  4c:	fe d0       	bge 0x4c
+  4e:	fa c0 00 00 	bge Rx,#0x0,0x4c
+  52:	00 0d f6 0f 	bge r0,r0,0x4c
+  56:	f4 1f       	br 0x4c
+  58:	00 79 00 00 	mov\.w 0x0,#0x0
+			5a: R_XSTORMY16_16	global\+0x4
+  5c:	00 79 00 00 	mov\.w 0x0,#0x0
+			5e: R_XSTORMY16_16	\.text\+0x4c
+  60:	00 79 00 00 	mov\.w 0x0,#0x0
+			62: R_XSTORMY16_16	\.text\+0x50
+  64:	00 79 00 00 	mov\.w 0x0,#0x0
+			66: R_XSTORMY16_PC16	global\+0xffffff9c
+  68:	00 79 00 00 	mov\.w 0x0,#0x0
+			6a: R_XSTORMY16_PC16	global\+0xffffffb4
+  6c:	00 02 00 00 	jmpf 0x0
+			6c: R_XSTORMY16_24	global
Index: gas/testsuite/gas/xstormy16/reloc-2.s
===================================================================
RCS file: reloc-2.s
diff -N reloc-2.s
--- gas/testsuite/gas/xstormy16/reloc-2.s	Tue May  5 13:32:27 1998
+++ gas/testsuite/gas/xstormy16/reloc-2.s	Fri Dec  7 14:26:56 2001
@@ -0,0 +1,48 @@
+	.text
+; check that forward references work for all operands.
+	inc r0,#fwd1
+	set1 0,#fwd1
+	bn 0,#fwd1,.
+	add r0,#fwd1
+	mov r0,(r0,fwd1)
+	mov fwd1,#0
+	mov rx,#fwd1
+	mov 0,#fwd1
+	jmpf fwd1
+	bge fwd1+.
+	bge Rx,#0,fwd1+.
+	bge r0,r0,fwd1+.
+	br fwd1+.
+fwd1	= 1
+
+; check that global references work for those operands that support them
+	.globl global
+	
+	mov global,#0
+	mov rx,#global
+	mov 0,#global
+;	jmpf global
+	bge global
+	bge Rx,#0,global
+	bge r0,r0,global
+	br global
+
+; check branch operations to local labels
+	bge .L1
+	bge Rx,#0,.L1
+	bge r0,r0,.L1
+	br .L1
+.L1:
+	bge .L1
+	bge Rx,#0,.L1
+	bge r0,r0,.L1
+	br .L1
+
+; check immediate operands thoroughly
+	mov 0,#global+4
+	mov 0,#.L1
+	mov 0,#.L1+4
+	mov 0,#global-.
+	mov 0,#global-.L1
+
+	jmpf global
Index: ld/Makefile.am
===================================================================
RCS file: /cvs/src/src/ld/Makefile.am,v
retrieving revision 1.77
diff -p -u -p -r1.77 Makefile.am
--- ld/Makefile.am	2001/12/05 21:46:39	1.77
+++ ld/Makefile.am	2001/12/07 22:26:57
@@ -160,6 +160,7 @@ ALL_EMULATIONS = \
 	eelf32ppc.o \
 	eelf32ppclinux.o \
 	eelf32ppcsim.o \
+	eelf32xstormy16.o \
 	eelf_i386.o \
 	eelf_i386_be.o \
 	eelf_i386_chaos.o \
@@ -436,6 +437,10 @@ edelta68.c: $(srcdir)/emulparams/delta68
 eebmon29k.c: $(srcdir)/emulparams/ebmon29k.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/ebmon29k.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} ebmon29k "$(tdir_ebmon29k)"
+eelf32xstormy16.c: $(srcdir)/emulparams/elf32xstormy16.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+  $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf32xstormy16 "$(tdir_xstormy16)"
 eelf32fr30.c: $(srcdir)/emulparams/elf32fr30.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf32fr30 "$(tdir_fr30)"
Index: ld/configure.tgt
===================================================================
RCS file: /cvs/src/src/ld/configure.tgt,v
retrieving revision 1.69
diff -p -u -p -r1.69 configure.tgt
--- ld/configure.tgt	2001/12/03 23:15:26	1.69
+++ ld/configure.tgt	2001/12/07 22:26:58
@@ -388,6 +388,7 @@ v850-*-*)		targ_emul=v850 ;;
 v850e-*-*)		targ_emul=v850 ;;
 v850ea-*-*)		targ_emul=v850 ;;
 w65-*-*)		targ_emul=w65 ;;
+xstormy16-*-*)		targ_emul=elf32xstormy16 ;;
 fr30-*-*)		targ_emul=elf32fr30 ;;
 mcore-*-pe)		targ_emul=mcorepe ;
 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
Index: ld/emulparams/elf32xstormy16.sh
===================================================================
RCS file: elf32xstormy16.sh
diff -N elf32xstormy16.sh
--- ld/emulparams/elf32xstormy16.sh	Tue May  5 13:32:27 1998
+++ ld/emulparams/elf32xstormy16.sh	Fri Dec  7 14:26:58 2001
@@ -0,0 +1,13 @@
+MACHINE=
+SCRIPT_NAME=xstormy16
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=needrelax
+OUTPUT_FORMAT="elf32-xstormy16"
+# See also `include/elf/xstormy16.h'
+ARCH=xstormy16
+ALIGNMENT=2
+ENTRY=_start
+EMBEDDED=yes
+NOP=0
+
+
Index: ld/scripttempl/xstormy16.sc
===================================================================
RCS file: xstormy16.sc
diff -N xstormy16.sc
--- ld/scripttempl/xstormy16.sc	Tue May  5 13:32:27 1998
+++ ld/scripttempl/xstormy16.sc	Fri Dec  7 14:26:58 2001
@@ -0,0 +1,238 @@
+#
+# Unusual variables checked by this code:
+#	NOP - two byte opcode for no-op (defaults to 0)
+#	INITIAL_READONLY_SECTIONS - at start of text segment
+#	OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
+#		(e.g., .PARISC.milli)
+#	OTHER_TEXT_SECTIONS - these get put in .text when relocating
+#	OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
+#		(e.g., .PARISC.global)
+#	OTHER_BSS_SECTIONS - other than .bss .sbss ...
+#	OTHER_SECTIONS - at the end
+#	EXECUTABLE_SYMBOLS - symbols that must be defined for an
+#		executable (e.g., _DYNAMIC_LINK)
+#	TEXT_START_SYMBOLS - symbols that appear at the start of the
+#		.text section.
+#	DATA_START_SYMBOLS - symbols that appear at the start of the
+#		.data section.
+#	OTHER_GOT_SYMBOLS - symbols defined just before .got.
+#	OTHER_GOT_SECTIONS - sections just after .got and .sdata.
+#	OTHER_BSS_SYMBOLS - symbols that appear at the start of the
+#		.bss section besides __bss_start.
+#	INPUT_FILES - INPUT command of files to always include
+#	INIT_START, INIT_END -  statements just before and just after
+# 	combination of .init sections.
+#	FINI_START, FINI_END - statements just before and just after
+# 	combination of .fini sections.
+#
+# When adding sections, do note that the names of some sections are used
+# when specifying the start address of the next.
+#
+
+#  Many sections come in three flavours.  There is the 'real' section,
+#  like ".data".  Then there are the per-procedure or per-variable
+#  sections, generated by -ffunction-sections and -fdata-sections in GCC,
+#  and useful for --gc-sections, which for a variable "foo" might be
+#  ".data.foo".  Then there are the linkonce sections, for which the linker
+#  eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
+#  The exact correspondences are:
+#
+#  Section	Linkonce section
+#  .text	.gnu.linkonce.t.foo
+#  .rodata	.gnu.linkonce.r.foo
+#  .data	.gnu.linkonce.d.foo
+#  .bss		.gnu.linkonce.b.foo
+#  .sdata	.gnu.linkonce.s.foo
+#  .sbss	.gnu.linkonce.sb.foo
+#  .sdata2	.gnu.linkonce.s2.foo
+#  .sbss2	.gnu.linkonce.sb2.foo
+#
+#  Each of these can also have corresponding .rel.* and .rela.* sections.
+
+test -z "$ENTRY" && ENTRY=_start
+test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
+test -z "${ELFSIZE}" && ELFSIZE=32
+test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
+CTOR=".ctors ${CONSTRUCTING-0} : 
+  {
+    ${CONSTRUCTING+${CTOR_START}}
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+
+    KEEP (*crtbegin.o(.ctors))
+
+    /* We don't want to include the .ctor section from
+       from the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+
+    KEEP (*(EXCLUDE_FILE (*crtend.o $OTHER_EXCLUDE_FILES) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+    ${CONSTRUCTING+${CTOR_END}}
+  } > ROM"
+
+DTOR=" .dtors       ${CONSTRUCTING-0} :
+  {
+    ${CONSTRUCTING+${DTOR_START}}
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o $OTHER_EXCLUDE_FILES) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+    ${CONSTRUCTING+${DTOR_END}}
+  } > ROM"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
+	      "${LITTLE_OUTPUT_FORMAT}")
+OUTPUT_ARCH(${OUTPUT_ARCH})
+ENTRY(${ENTRY})
+
+${RELOCATING+${LIB_SEARCH_DIRS}}
+${RELOCATING+${EXECUTABLE_SYMBOLS}}
+${RELOCATING+${INPUT_FILES}}
+${RELOCATING- /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */}
+
+/* There are two memory regions we care about, one from 0 through 0x7F00
+   that is RAM and one from 0x8000 up which is ROM.  */
+MEMORY 
+{
+  RAM (w) : ORIGIN = 0, LENGTH = 0x7F00
+  ROM (!w) : ORIGIN = 0x8000, LENGTH = 0xFF8000
+}
+
+SECTIONS
+{
+  .data  ${RELOCATING-0} :
+  {
+    ${RELOCATING+${DATA_START_SYMBOLS}}
+    *(.data)
+    ${RELOCATING+*(.data.*)}
+    ${RELOCATING+*(.gnu.linkonce.d.*)}
+    ${CONSTRUCTING+SORT(CONSTRUCTORS)}
+  } > RAM
+  ${RELOCATING+${OTHER_READWRITE_SECTIONS}}
+  ${RELOCATING+${OTHER_GOT_SYMBOLS}}
+  ${RELOCATING+${OTHER_GOT_SECTIONS}}
+  ${RELOCATING+_edata = .;}
+  ${RELOCATING+PROVIDE (edata = .);}
+  ${RELOCATING+__bss_start = .;}
+  ${RELOCATING+${OTHER_BSS_SYMBOLS}}
+  .bss     ${RELOCATING-0} :
+  {
+   *(.dynbss)
+   *(.bss)
+   ${RELOCATING+*(.bss.*)}
+   ${RELOCATING+*(.gnu.linkonce.b.*)}
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.  */
+   ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+  } > RAM
+  ${RELOCATING+${OTHER_BSS_SECTIONS}}
+  ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+  ${RELOCATING+__stack = .;}
+  ${RELOCATING+. = . + 4096;}
+  ${RELOCATING+_end = .;}
+  ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+  ${RELOCATING+PROVIDE (end = .);}
+
+  /* Read-only sections in ROM.  */
+  .int_vec     ${RELOCATING-0} : { *(.int_vec)	} > ROM
+
+  .rodata ${RELOCATING-0} : { *(.rodata) ${RELOCATING+*(.rodata.*)} ${RELOCATING+*(.gnu.linkonce.r.*)} } > ROM
+  ${RELOCATING+${CTOR}}
+  ${RELOCATING+${DTOR}}
+  .eh_frame : { KEEP (*(.eh_frame)) } > ROM
+  .gcc_except_table : { *(.gcc_except_table) } > ROM
+  .plt : { *(.plt) } > ROM
+
+  .text    ${RELOCATING-0} :
+  {
+    ${RELOCATING+${TEXT_START_SYMBOLS}}
+    *(.text)
+    ${RELOCATING+*(.text.*)}
+    *(.stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    ${RELOCATING+*(.gnu.linkonce.t.*)}
+    ${RELOCATING+${OTHER_TEXT_SECTIONS}}
+  } > ROM =${NOP-0}
+  .init        ${RELOCATING-0} : 
+  { 
+    ${RELOCATING+${INIT_START}}
+    KEEP (*(.init))
+    ${RELOCATING+${INIT_END}}
+  } > ROM =${NOP-0}
+  .fini    ${RELOCATING-0} :
+  {
+    ${RELOCATING+${FINI_START}}
+    KEEP (*(.fini))
+    ${RELOCATING+${FINI_END}}
+  } > ROM =${NOP-0}
+  ${RELOCATING+PROVIDE (__etext = .);}
+  ${RELOCATING+PROVIDE (_etext = .);}
+  ${RELOCATING+PROVIDE (etext = .);}
+  ${RELOCATING+${OTHER_READONLY_SECTIONS}}
+
+
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+
+  .comment 0 : { *(.comment) }
+
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+
+  ${RELOCATING+${OTHER_RELOCATING_SECTIONS}}
+
+  /* These must appear regardless of ${RELOCATING}.  */
+  ${OTHER_SECTIONS}
+}
+EOF
Index: opcodes/Makefile.am
===================================================================
RCS file: /cvs/src/src/opcodes/Makefile.am,v
retrieving revision 1.37
diff -p -u -p -r1.37 Makefile.am
--- opcodes/Makefile.am	2001/10/30 15:20:14	1.37
+++ opcodes/Makefile.am	2001/12/07 22:26:59
@@ -32,6 +32,7 @@ HFILES = \
 	ia64-asmtab.h \
 	ia64-opc.h \
 	w65-opc.h \
+	xstormy16-desc.h xstormy16-opc.h \
 	z8k-opc.h
 
 # C source files that correspond to .o's.
@@ -126,6 +127,11 @@ CFILES = \
 	v850-opc.c \
 	vax-dis.c \
 	w65-dis.c \
+	xstormy16-asm.c \
+	xstormy16-desc.c \
+	xstormy16-dis.c \
+	xstormy16-ibld.c \
+	xstormy16-opc.c \
 	z8k-dis.c \
 	z8kgen.c
 
@@ -209,6 +215,11 @@ ALL_MACHINES = \
 	v850-opc.lo \
 	vax-dis.lo \
 	w65-dis.lo \
+	xstormy16-asm.lo \
+	xstormy16-desc.lo \
+	xstormy16-dis.lo \
+	xstormy16-ibld.lo \
+	xstormy16-opc.lo \
 	z8k-dis.lo
 
 OFILES = @BFD_MACHINES@
@@ -253,6 +264,7 @@ config.status: $(srcdir)/configure $(src
 
 CLEANFILES = \
 	stamp-m32r stamp-fr30 stamp-openrisc \
+	stamp-xstormy16 \
 	libopcodes.a stamp-lib dep.sed DEP DEPA DEP1 DEP2
 
 
@@ -272,10 +284,12 @@ if CGEN_MAINT
 M32R_DEPS = stamp-m32r
 FR30_DEPS = stamp-fr30
 OPENRISC_DEPS = stamp-openrisc
+XSTORMY16_DEPS = stamp-xstormy16
 else
 M32R_DEPS =
 FR30_DEPS =
 OPENRISC_DEPS = 
+XSTORMY16_DEPS = 
 endif
 
 run-cgen:
@@ -300,6 +314,11 @@ $(srcdir)/openrisc-desc.h $(srcdir)/open
 	@true
 stamp-openrisc: $(CGENDEPS) $(CPUDIR)/openrisc.cpu $(CPUDIR)/openrisc.opc
 	$(MAKE) run-cgen arch=openrisc prefix=openrisc options= extrafiles=
+
+$(srcdir)/xstormy16-desc.h $(srcdir)/xstormy16-desc.c $(srcdir)/xstormy16-opc.h $(srcdir)/xstormy16-opc.c $(srcdir)/xstormy16-ibld.c $(srcdir)/xstormy16-asm.c $(srcdir)/xstormy16-dis.c: $(XSTORMY16_DEPS)
+	@true
+stamp-xstormy16: $(CGENDEPS) $(CPUDIR)/xstormy16.cpu $(CPUDIR)/xstormy16.opc
+	$(MAKE) run-cgen arch=xstormy16 prefix=xstormy16 options= extrafiles=
 
 ia64-gen: ia64-gen.o
 	$(LINK) ia64-gen.o $(LIBIBERTY)
Index: opcodes/configure.in
===================================================================
RCS file: /cvs/src/src/opcodes/configure.in,v
retrieving revision 1.25
diff -p -u -p -r1.25 configure.in
--- opcodes/configure.in	2001/11/02 19:07:57	1.25
+++ opcodes/configure.in	2001/12/07 22:27:00
@@ -220,6 +220,7 @@ if test x${all_targets} = xfalse ; then
 	bfd_vax_arch)		ta="$ta vax-dis.lo" ;;
 	bfd_w65_arch)		ta="$ta w65-dis.lo" ;;
 	bfd_we32k_arch)		;;
+	bfd_xstormy16_arch)	ta="$ta xstormy16-asm.lo xstormy16-desc.lo xstormy16-dis.lo xstormy16-ibld.lo xstormy16-opc.lo" using_cgen=yes ;;
 	bfd_z8k_arch)		ta="$ta z8k-dis.lo" ;;
 
 	"")			;;
Index: opcodes/disassemble.c
===================================================================
RCS file: /cvs/src/src/opcodes/disassemble.c,v
retrieving revision 1.29
diff -p -u -p -r1.29 disassemble.c
--- opcodes/disassemble.c	2001/11/14 03:15:28	1.29
+++ opcodes/disassemble.c	2001/12/07 22:27:00
@@ -62,6 +62,7 @@ Foundation, Inc., 59 Temple Place - Suit
 #define ARCH_v850
 #define ARCH_vax
 #define ARCH_w65
+#define ARCH_xstormy16
 #define ARCH_z8k
 #endif
 
@@ -301,6 +302,11 @@ disassembler (abfd)
 #ifdef ARCH_w65
     case bfd_arch_w65:
       disassemble = print_insn_w65;
+      break;
+#endif
+#ifdef ARCH_xstormy16
+    case bfd_arch_xstormy16:
+      disassemble = print_insn_xstormy16;
       break;
 #endif
 #ifdef ARCH_z8k
============================================================


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]