This is the mail archive of the binutils@sourceware.cygnus.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]

support for picoJava



The following patches to the current binutils CVS tree provide support
for the most of the picoJava architecture, in both normal mode and
`little endian data mode'.

The bits missing are those things not needed by my picoJava gcc
backend, but they're quite small.

I've got gdb, simulator and gcc patches which I'll be sending to the
right places.  The entire toolchain runs pretty well, it's passed
several non trival tests.  You can also use the java gcc front end to
generate picoJava bytecodes.  The linker config is set up so you can
link i386 code with little endian picoJava bytecodes.

This binutils tree can link and inspect picoJava elf files made with
the Metaware tool chain, but I've not inspected the corner cases, and
so it's inevitable that there are lurking. In any case, the Metaware
linker does some magic stuff which I'm implementing in a different way
inside the gcc port, and interoperability isn't one of my highest
priorities.

I've put the ChangeLogs first, and all the patches follow.  I've
included the new bfd-in2.h and libbfd.h headers, but not the
regenerated Makefiles or configure scripts.


Steve


**********************************************************************
toplevel ChangeLog

1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* config.sub: Add support for configuring for pj.

**********************************************************************
bfd/ChangeLog

1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* Makefile.am: Add support for the picoJava architecture `pj'.
 	* archures.c: Ditto.
	* config.bfd: Ditto.
	* elf.c: Ditto.
	* reloc.c: Ditto.
	* targets.c: Ditto.
	* configure.in: Ditto.
	* Makefile.in: Rebuild.
	* configure: Rebuild.
	* cpu-pj.c: New file.
	* elf32-pj.c: New file.

**********************************************************************
binutils/ChangeLog

1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* readelf.c (get_machine_name): Notice picoJava.
	(get_machine_flags): Interpret pj flags.


**********************************************************************
binutils/testsuite/ChangeLog


1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* binutils-all/objdump.exp: Add pj to cpus_expected.

**********************************************************************
gas/ChangeLog

1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* configure.in (pjl*, pj*): New targets.
	* configure: Rebuild.
	* config/tc-pj.c: New file, supports picoJava in elf.		
	* config/tc-pj.h: Ditto.
	* doc/as.texinfo: Add some PJ specifics.
	* doc/all.texi: Add PJ to the list of all architectures, sort them
	all alphabetically.
	* doc/c-pj.texi: New file.

**********************************************************************
gas/testsuite/ChangeLog

1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* gas/pj/{pj.exp, ops.c, ops.d}: New tests for picoJava.

**********************************************************************
include/ChangeLog
	
1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* dis-asm.h (print_insn_pj): Declare.

**********************************************************************
include/elf/ChangeLog

1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* common.h (EM_PJ): New.
	* pj.h: New file.

**********************************************************************
ld/ChangeLog

1999-09-02  Steve Chamberlain  <sac@pobox.com>
	
	* Makefile.am: Add pjelf and pjlelf targets.
	* Makefile.in: Rebuild.
	* emulparams/{pjlelf.sh, pjelf.sh}: New files.
	* scripttempl/pj.sc: New file
	* configure.tgt (pjl*, pj*): Add.

**********************************************************************
opcodes/ChangeLog

1999-09-02  Steve Chamberlain  <sac@pobox.com>

	* Makefile.am (HFILES): Add pj-opc.h
	(CFILES): Add pj-dis.c
	(ALL_MACHINES): Add pj-dis.lo
	(pj-dis.lo): New Makefile rule.
	* Makefile.in: Rebuild.
	* configure.in: Add pj.
	* disassemble.c: Add support for pj.
	* pj-dis.c: New file.
	* pj-dis.h: New file.


--- ../original-binutils/config.sub	Wed Sep  1 13:49:01 1999
+++ config.sub	Thu Sep  2 16:52:08 1999
@@ -619,6 +619,10 @@
 	pentiumii-* | pentium2-*)
 		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
+        pjl*)   basic_machine=pjl-transmeta
+	        ;;
+        pj*)    basic_machine=pj-transmeta
+	        ;;
 	pn)
 		basic_machine=pn-gould
 		;;
diff  -u -N -r ../original-binutils/bfd/Makefile.am bfd/Makefile.am
--- ../original-binutils/bfd/Makefile.am	Wed Aug 25 09:22:06 1999
+++ bfd/Makefile.am	Wed Aug 25 14:42:19 1999
@@ -58,6 +58,7 @@
 	cpu-mcore.lo \
 	cpu-mips.lo \
 	cpu-ns32k.lo \
+	cpu-pj.lo \
 	cpu-powerpc.lo \
 	cpu-rs6000.lo \
 	cpu-sh.lo \
@@ -92,6 +93,7 @@
 	cpu-mcore.c \
 	cpu-mips.c \
 	cpu-ns32k.c \
+	cpu-pj.c \
 	cpu-powerpc.c \
 	cpu-rs6000.c \
 	cpu-sh.c \
@@ -168,6 +170,7 @@
 	elf-m10300.lo \
 	elf32-mcore.lo \
 	elf32-mips.lo \
+	elf32-pj.lo \
 	elf32-ppc.lo \
 	elf32-sh.lo \
 	elf32-sparc.lo \
@@ -291,6 +294,7 @@
 	elf-m10300.c \
 	elf32-mcore.c \
 	elf32-mips.c \
+	elf32-pj.c \
 	elf32-ppc.c \
 	elf32-sh.c \
 	elf32-sparc.c \
@@ -696,6 +700,7 @@
 cpu-powerpc.lo: cpu-powerpc.c
 cpu-rs6000.lo: cpu-rs6000.c
 cpu-sh.lo: cpu-sh.c
+cpu-pj.lo: cpu-pj.c
 cpu-sparc.lo: cpu-sparc.c
 cpu-tic30.lo: cpu-tic30.c
 cpu-tic80.lo: cpu-tic80.c
@@ -884,6 +889,9 @@
   $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/internal.h \
   $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h ecoffswap.h \
   elf32-target.h
+elf32-pj.lo: elf32-sh.c $(INCDIR)/bfdlink.h elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/elf/pj.h $(INCDIR)/elf/reloc-macros.h elf32-target.h
 elf32-ppc.lo: elf32-ppc.c $(INCDIR)/bfdlink.h elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h elf32-target.h
diff -u -N -r ../original-binutils/bfd/libbfd.h bfd/libbfd.h
--- ../original-binutils/bfd/libbfd.h	Wed Jul  7 04:40:42 1999
+++ bfd/libbfd.h	Mon Aug 16 08:15:14 1999
@@ -708,6 +708,12 @@
   "BFD_RELOC_NS32K_DISP_8_PCREL",
   "BFD_RELOC_NS32K_DISP_16_PCREL",
   "BFD_RELOC_NS32K_DISP_32_PCREL",
+  "BFD_RELOC_PJ_CODE_HI16",
+  "BFD_RELOC_PJ_CODE_LO16",
+  "BFD_RELOC_PJ_CODE_DIR16",
+  "BFD_RELOC_PJ_CODE_DIR32",
+  "BFD_RELOC_PJ_CODE_REL16",
+  "BFD_RELOC_PJ_CODE_REL32",
   "BFD_RELOC_PPC_B26",
   "BFD_RELOC_PPC_BA26",
   "BFD_RELOC_PPC_TOC16",
diff -u -N -r ../original-binutils/bfd/bfd-in2.h bfd/bfd-in2.h
--- ../original-binutils/bfd/bfd-in2.h	Tue Aug 10 14:42:02 1999
+++ bfd/bfd-in2.h	Thu Sep  2 20:57:01 1999
@@ -1350,6 +1350,7 @@
   bfd_arch_fr30,
 #define bfd_mach_fr30          0x46523330
   bfd_arch_mcore,
+  bfd_arch_pj,
   bfd_arch_last
   };
 
@@ -1884,6 +1885,14 @@
   BFD_RELOC_NS32K_DISP_8_PCREL,
   BFD_RELOC_NS32K_DISP_16_PCREL,
   BFD_RELOC_NS32K_DISP_32_PCREL,
+
+/* Picojava relocs.  Not all of these appear in object files. */
+  BFD_RELOC_PJ_CODE_HI16,
+  BFD_RELOC_PJ_CODE_LO16,
+  BFD_RELOC_PJ_CODE_DIR16,
+  BFD_RELOC_PJ_CODE_DIR32,
+  BFD_RELOC_PJ_CODE_REL16,
+  BFD_RELOC_PJ_CODE_REL32,
 
 /* Power(rs6000) and PowerPC relocations. */
   BFD_RELOC_PPC_B26,
diff  -u -N -r ../original-binutils/bfd/archures.c bfd/archures.c
--- ../original-binutils/bfd/archures.c	Mon Jul  5 00:28:21 1999
+++ bfd/archures.c	Thu Sep  2 19:05:01 1999
@@ -187,6 +187,7 @@
 .  bfd_arch_fr30,
 .#define bfd_mach_fr30		0x46523330
 .  bfd_arch_mcore,
+.  bfd_arch_pj,
 .  bfd_arch_last
 .  };
 
@@ -245,6 +246,7 @@
 extern const bfd_arch_info_type bfd_mn10300_arch;
 extern const bfd_arch_info_type bfd_powerpc_arch;
 extern const bfd_arch_info_type bfd_rs6000_arch;
+extern const bfd_arch_info_type bfd_pj_arch;
 extern const bfd_arch_info_type bfd_sh_arch;
 extern const bfd_arch_info_type bfd_sparc_arch;
 extern const bfd_arch_info_type bfd_tic30_arch;
diff  -u -N -r ../original-binutils/bfd/config.bfd bfd/config.bfd
--- ../original-binutils/bfd/config.bfd	Wed Aug 25 09:22:07 1999
+++ bfd/config.bfd	Tue Aug 31 10:40:40 1999
@@ -38,6 +38,7 @@
 m68*)	targ_archs=bfd_m68k_arch ;;
 m88*)	targ_archs=bfd_m88k_arch ;;
 mips*)	targ_archs=bfd_mips_arch ;;
+pj*)	targ_archs="bfd_pj_arch bfd_i386_arch";;
 powerpc*) targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
 rs6000)	targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
 sparc*) targ_archs=bfd_sparc_arch ;;
@@ -560,6 +561,16 @@
   ns32k-*-netbsd* | ns32k-*-lites* | ns32k-*-openbsd*)
     targ_defvec=pc532netbsd_vec
     targ_underscore=yes
+    ;;
+
+  pj-*)
+    targ_defvec=bfd_elf32_pj_vec
+    targ_selvecs="bfd_elf32_pj_vec bfd_elf32_pjl_vec"
+    ;;
+
+  pjl-*)
+    targ_defvec=bfd_elf32_pjl_vec
+    targ_selvecs="bfd_elf32_pjl_vec bfd_elf32_pj_vec bfd_elf32_i386_vec"
     ;;
 
   powerpc-*-aix* | powerpc-*-beos*)
diff  -u -N -r ../original-binutils/bfd/configure.in bfd/configure.in
--- ../original-binutils/bfd/configure.in	Wed Aug 25 09:22:15 1999
+++ bfd/configure.in	Wed Aug 25 14:42:22 1999
@@ -461,6 +461,8 @@
     bfd_elf32_mcore_little_vec)	tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
     bfd_elf32_mn10200_vec)	tb="$tb elf-m10200.lo elf32.lo $elf" ;;
     bfd_elf32_mn10300_vec)	tb="$tb elf-m10300.lo elf32.lo $elf" ;;
+    bfd_elf32_pj_vec)           tb="$tb elf32-pj.lo elf32.lo $elf";;
+    bfd_elf32_pjl_vec)          tb="$tb elf32-pj.lo elf32.lo $elf";;
     bfd_elf32_powerpc_vec)	tb="$tb elf32-ppc.lo elf32.lo $elf" ;;
     bfd_elf32_powerpcle_vec)	tb="$tb elf32-ppc.lo elf32.lo $elf" ;;
     bfd_elf32_sh_vec)		tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
diff  -u -N -r ../original-binutils/bfd/cpu-pj.c bfd/cpu-pj.c
--- ../original-binutils/bfd/cpu-pj.c	Wed Dec 31 16:00:00 1969
+++ bfd/cpu-pj.c	Thu Sep  2 19:08:12 1999
@@ -0,0 +1,85 @@
+/* BFD library support routines for the Pico Java architecture.
+   Copyright (C) 1993 Free Software Foundation, Inc.
+   Hacked by Steve Chamberlain of Transmeta. sac@pobox.com
+
+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"
+
+
+static boolean 
+scan_mach (info, string)
+     const struct bfd_arch_info *info;
+     const char *string;
+{
+  if (strcasecmp (info->printable_name, string) == 0)
+    return true;
+  return false;
+}
+
+
+#if 0
+/* This routine is provided two arch_infos and returns whether
+   they'd be compatible */
+
+static const bfd_arch_info_type *
+compatible (a,b)
+     const bfd_arch_info_type *a;
+     const bfd_arch_info_type *b;
+{
+  if (a->arch != b->arch || a->mach != b->mach)
+   return NULL;
+  return a;
+}
+#endif
+
+
+static const bfd_arch_info_type arch_info_struct[] = 
+{
+  {
+    32,				/* 32 bits in a word */
+    32,				/* 32 bits in an address */
+    8,				/* 8 bits in a byte */
+    bfd_arch_pj,
+    0,
+    "pj",			/* arch_name  */
+    "pj",			/* printable name */
+    1,
+    false,			/* not the default */
+    bfd_default_compatible,
+    scan_mach,
+    0,
+  },
+};
+
+const bfd_arch_info_type bfd_pj_arch =
+{
+  32,				/* 32 bits in a word */
+  32,				/* 32 bits in an address */
+  8,				/* 8 bits in a byte */
+  bfd_arch_pj,
+  0,
+  "pj",				/* arch_name  */
+  "pj",				/* printable name */
+  1,
+  true,				/* the default machine */
+  bfd_default_compatible,
+  scan_mach,
+  &arch_info_struct [0]
+};
diff  -u -N -r ../original-binutils/bfd/elf.c bfd/elf.c
--- ../original-binutils/bfd/elf.c	Tue Aug  3 15:13:13 1999
+++ bfd/elf.c	Tue Aug 10 15:20:23 1999
@@ -3185,6 +3185,9 @@
     case bfd_arch_mn10300:
       i_ehdrp->e_machine = EM_CYGNUS_MN10300;
       break;
+    case bfd_arch_pj:
+      i_ehdrp->e_machine = EM_PJ;
+      break;
       /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
     default:
       i_ehdrp->e_machine = EM_NONE;
diff  -u -N -r ../original-binutils/bfd/elf32-pj.c bfd/elf32-pj.c
--- ../original-binutils/bfd/elf32-pj.c	Wed Dec 31 16:00:00 1969
+++ bfd/elf32-pj.c	Thu Sep  2 19:45:21 1999
@@ -0,0 +1,357 @@
+/* picoJava specific support for 32-bit ELF
+   Copyright 1999 Free Software Foundation, Inc.
+   Contributed by Steve Chamberlan of Transmeta (sac@pobox.com).
+
+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 "bfdlink.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/pj.h"
+
+static bfd_reloc_status_type pj_elf_reloc
+  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+static reloc_howto_type *pj_elf_reloc_type_lookup
+  PARAMS ((bfd *, bfd_reloc_code_real_type));
+static void pj_elf_info_to_howto
+  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
+
+static reloc_howto_type pj_elf_howto_table[] =
+{
+  /* No relocation.  */
+  HOWTO (R_PJ_NONE,		/* type */
+	 0,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 pj_elf_reloc,		/* special_function */
+	 "R_PJ_NONE",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 32 bit absolute relocation.  Setting partial_inplace to true and
+     src_mask to a non-zero value is similar to the COFF toolchain.  */
+  HOWTO (R_PJ_DATA_DIR32,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 pj_elf_reloc,		/* special_function */
+	 "R_PJ_DIR32",		/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  /* 32 bit PC relative relocation.  */
+  HOWTO (R_PJ_CODE_REL32,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 true,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 pj_elf_reloc,		/* special_function */
+	 "R_PJ_REL32",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 true),			/* pcrel_offset */
+
+/* 16 bit PC relative relocation.  */
+  HOWTO (R_PJ_CODE_REL16,		/* type */
+	 0,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 true,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overf6w */
+	 pj_elf_reloc,		/* special_function */
+	 "R_PJ_REL16",		/* name */
+	 false,			/* partial_inplace */
+	 0xffff,		/* src_mask */
+	 0xffff,		/* dst_mask */
+	 true),			/* pcrel_offset */
+  EMPTY_HOWTO (4),
+  EMPTY_HOWTO (5),
+  HOWTO (R_PJ_CODE_DIR32,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 pj_elf_reloc,		/* special_function */
+	 "R_PJ_CODE_DIR32",	/* name */
+	 true,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  EMPTY_HOWTO (7),
+  EMPTY_HOWTO (8),
+  EMPTY_HOWTO (9),
+  EMPTY_HOWTO (10),
+  EMPTY_HOWTO (11),
+  EMPTY_HOWTO (12),
+
+  HOWTO (R_PJ_CODE_LO16,	/* type */
+	 0,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_unsigned, /* complain_on_overflow */
+	 pj_elf_reloc,		/* special_function */
+	 "R_PJ_LO16",		/* name */
+	 false,			/* partial_inplace */
+	 0xffff,		/* src_mask */
+	 0xffff,		/* dst_mask */
+	 true),			/* pcrel_offset */
+
+
+    HOWTO (R_PJ_CODE_HI16,	/* type */
+	 16,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_unsigned, /* complain_on_overflow */
+	 pj_elf_reloc,		/* special_function */
+	 "R_PJ_HI16",		/* name */
+	 false,			/* partial_inplace */
+	 0xffff,		/* src_mask */
+	 0xffff,		/* dst_mask */
+	 true),			/* pcrel_offset */
+
+  /* GNU extension to record C++ vtable hierarchy */
+  HOWTO (R_PJ_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_PJ_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_PJ_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_PJ_GNU_VTENTRY",   /* name */
+         false,                 /* partial_inplace */
+         0,                     /* src_mask */
+         0,                     /* dst_mask */
+         false),                /* pcrel_offset */
+
+
+};
+
+/* This function is used for normal relocs.  This is like the COFF
+   function, and is almost certainly incorrect for other ELF targets.  */
+
+static bfd_reloc_status_type
+pj_elf_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
+	  error_message)
+     bfd *abfd;
+     arelent *reloc_entry;
+     asymbol *symbol_in;
+     PTR data;
+     asection *input_section;
+     bfd *output_bfd;
+     char **error_message ATTRIBUTE_UNUSED;
+{
+  unsigned long insn;
+  bfd_vma sym_value;
+  enum elf_pj_reloc_type r_type;
+  bfd_vma addr = reloc_entry->address;
+  bfd_byte *hit_data = addr + (bfd_byte *) data;
+
+  r_type = (enum elf_pj_reloc_type) reloc_entry->howto->type;
+
+  if (output_bfd != NULL)
+    {
+      /* Partial linking--do nothing.  */
+      reloc_entry->address += input_section->output_offset;
+      return bfd_reloc_ok;
+    }
+
+  if (symbol_in != NULL
+      && bfd_is_und_section (symbol_in->section))
+    return bfd_reloc_undefined;
+
+  if (bfd_is_com_section (symbol_in->section))
+    sym_value = 0;                           
+  else 
+    sym_value = (symbol_in->value +
+		 symbol_in->section->output_section->vma +
+		 symbol_in->section->output_offset);
+
+  switch (r_type)
+    {
+    case R_PJ_DATA_DIR32:
+      insn = bfd_get_32 (abfd, hit_data);
+      insn += sym_value + reloc_entry->addend;
+      bfd_put_32 (abfd, insn, hit_data);
+      break;
+
+      /* Relocations in code are always bigendian, no matter what the
+	 data endianness is. */
+
+    case R_PJ_CODE_DIR32:
+      insn = bfd_getb32 (hit_data);
+      insn += sym_value + reloc_entry->addend;
+      bfd_putb32 (insn, hit_data);
+      break;
+
+    case R_PJ_CODE_REL16:
+      insn = bfd_getb16 (hit_data);
+      insn += sym_value + reloc_entry->addend
+        -  (input_section->output_section->vma
+            + input_section->output_offset);
+      bfd_putb16 (insn, hit_data);
+      break;
+    case R_PJ_CODE_LO16:
+      insn = bfd_getb16 (hit_data);
+      insn += sym_value + reloc_entry->addend;
+      bfd_putb16 (insn, hit_data);
+      break;
+
+    case R_PJ_CODE_HI16:
+      insn = bfd_getb16 (hit_data);
+      insn += (sym_value + reloc_entry->addend) >> 16;
+      bfd_putb16 (insn, hit_data);
+      break;
+      
+    default:
+      abort ();
+      break;
+    }
+
+  return bfd_reloc_ok;
+}
+
+/* This structure is used to map BFD reloc codes to PJ ELF relocs.  */
+
+struct elf_reloc_map
+{
+  bfd_reloc_code_real_type bfd_reloc_val;
+  unsigned char elf_reloc_val;
+};
+
+/* An array mapping BFD reloc codes to PJ ELF relocs.  */
+
+static const struct elf_reloc_map pj_reloc_map[] =
+{
+    { BFD_RELOC_NONE, 		R_PJ_NONE          },
+    { BFD_RELOC_32, 		R_PJ_DATA_DIR32    },
+    { BFD_RELOC_PJ_CODE_DIR16, 	R_PJ_CODE_DIR16    },
+    { BFD_RELOC_PJ_CODE_DIR32, 	R_PJ_CODE_DIR32    },
+    { BFD_RELOC_PJ_CODE_LO16, 	R_PJ_CODE_LO16     },
+    { BFD_RELOC_PJ_CODE_HI16, 	R_PJ_CODE_HI16     },
+    { BFD_RELOC_PJ_CODE_REL32,  R_PJ_CODE_REL32    },
+    { BFD_RELOC_PJ_CODE_REL16,  R_PJ_CODE_REL16    },
+    { BFD_RELOC_VTABLE_INHERIT, R_PJ_GNU_VTINHERIT },
+    { BFD_RELOC_VTABLE_ENTRY,   R_PJ_GNU_VTENTRY   },
+};
+
+/* Given a BFD reloc code, return the howto structure for the
+   corresponding PJ ELf reloc.  */
+
+static reloc_howto_type *
+pj_elf_reloc_type_lookup (abfd, code)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     bfd_reloc_code_real_type code;
+{
+  unsigned int i;
+  
+  for (i = 0; i < sizeof (pj_reloc_map) / sizeof (struct elf_reloc_map); i++)
+    {
+      if (pj_reloc_map[i].bfd_reloc_val == code)
+	return &pj_elf_howto_table[(int) pj_reloc_map[i].elf_reloc_val];
+    }
+
+  return NULL;
+}
+
+/* Given an ELF reloc, fill in the howto field of a relent.  */
+
+static void
+pj_elf_info_to_howto (abfd, cache_ptr, dst)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     arelent *cache_ptr;
+     Elf_Internal_Rela *dst;
+{
+  unsigned int r;
+
+  r = ELF32_R_TYPE (dst->r_info);
+
+  BFD_ASSERT (r < (unsigned int) R_PJ_max);
+
+  cache_ptr->howto = &pj_elf_howto_table[r];
+}
+
+/* Take this moment to fill in the special picoJava bits in the
+   e_flags field. */
+
+static void
+pj_elf_final_write_processing (abfd, linker)
+     bfd *abfd;
+     boolean linker ATTRIBUTE_UNUSED;
+{
+    elf_elfheader (abfd)->e_flags |= EF_PICOJAVA_ARCH;
+    elf_elfheader (abfd)->e_flags |= EF_PICOJAVA_GNUCALLS;
+}
+
+#define TARGET_BIG_SYM		bfd_elf32_pj_vec
+#define TARGET_BIG_NAME		"elf32-pj"
+#define TARGET_LITTLE_SYM	bfd_elf32_pjl_vec
+#define TARGET_LITTLE_NAME	"elf32-pjl"
+#define ELF_ARCH		bfd_arch_pj
+#define ELF_MACHINE_CODE	EM_PJ
+#define ELF_MAXPAGESIZE		0x1000
+#define bfd_elf32_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
+#define bfd_elf32_bfd_reloc_type_lookup	             pj_elf_reloc_type_lookup
+#define elf_backend_final_write_processing           pj_elf_final_write_processing
+#define elf_info_to_howto		             pj_elf_info_to_howto
+#include "elf32-target.h"
+
+
+
+
+
+
+
+
diff  -u -N -r ../original-binutils/bfd/reloc.c bfd/reloc.c
--- ../original-binutils/bfd/reloc.c	Tue Jul 13 09:58:13 1999
+++ bfd/reloc.c	Mon Aug 16 08:15:16 1999
@@ -2106,6 +2106,21 @@
   ns32k relocations
 
 ENUM
+  BFD_RELOC_PJ_CODE_HI16
+ENUMX
+  BFD_RELOC_PJ_CODE_LO16
+ENUMX
+  BFD_RELOC_PJ_CODE_DIR16
+ENUMX
+  BFD_RELOC_PJ_CODE_DIR32
+ENUMX
+  BFD_RELOC_PJ_CODE_REL16
+ENUMX
+  BFD_RELOC_PJ_CODE_REL32
+ENUMDOC
+  picoJava relocs.  Not all of these appear in object files.
+  
+ENUM
   BFD_RELOC_PPC_B26
 ENUMX
   BFD_RELOC_PPC_BA26
diff  -u -N -r ../original-binutils/bfd/targets.c bfd/targets.c
--- ../original-binutils/bfd/targets.c	Wed Aug 25 09:23:51 1999
+++ bfd/targets.c	Wed Aug 25 14:42:23 1999
@@ -529,6 +529,8 @@
 extern const bfd_target bfd_elf32_m88k_vec;
 extern const bfd_target bfd_elf32_mn10200_vec;
 extern const bfd_target bfd_elf32_mn10300_vec;
+extern const bfd_target bfd_elf32_pj_vec;
+extern const bfd_target bfd_elf32_pjl_vec;
 extern const bfd_target bfd_elf32_powerpc_vec;
 extern const bfd_target bfd_elf32_powerpcle_vec;
 extern const bfd_target bfd_elf32_sh_vec;
--- ../original-binutils/binutils/readelf.c	Wed Sep  1 13:49:17 1999
+++ binutils/readelf.c	Thu Sep  2 19:45:30 1999
@@ -67,6 +67,7 @@
 #include "elf/fr30.h"
 #include "elf/mcore.h"
 #include "elf/i960.h"
+#include "elf/pj.h"
 
 #include "bucomm.h"
 #include "getopt.h"
@@ -740,6 +741,10 @@
 	case EM_PARISC:
 	  rtype = elf_hppa_reloc_type (type);
 	  break;
+
+	case EM_PJ:
+	  rtype = elf_pj_reloc_type (type);
+	  break;
 	}
 
       if (rtype == NULL)
@@ -1032,7 +1037,7 @@
     case EM_CYGNUS_MN10300:	return "mn10300";
     case EM_CYGNUS_MN10200:	return "mn10200";
     case EM_CYGNUS_FR30:	return "Fujitsu FR30";
-
+    case EM_PJ:                 return "picoJava";
     default:
       sprintf (buff, _("<unknown>: %x"), e_machine);
       return buff;
@@ -1145,6 +1150,14 @@
 
 	  if ((e_flags & EF_SPARCV9_MM) == EF_SPARCV9_RMO)
 	    strcat (buf, ", rmo");
+	  break;
+
+	case EM_PJ:
+	  if ((e_flags & EF_PICOJAVA_NEWCALLS) == EF_PICOJAVA_NEWCALLS)
+	    strcat (buf, ", new calling convention");
+
+	  if ((e_flags & EF_PICOJAVA_GNUCALLS) == EF_PICOJAVA_GNUCALLS)
+	    strcat (buf, ", gnu calling convention");
 	  break;
 	}
     }
--- ../original-binutils/binutils/testsuite/binutils-all/objdump.exp	Mon Jun 28 18:31:18 1999
+++ binutils/testsuite/binutils-all/objdump.exp	Thu Sep  2 10:52:44 1999
@@ -33,7 +33,7 @@
 
 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -i"]
 
-set cpus_expected "(a29k|alliant|alpha|arc|arm|convex|d10v|d30v|fr30|h8|hppa|i386|i860|i960|m32r|m68k|m88k|MCore|mips|mn10200|mn10300|ns32k|powerpc|pyramid|romp|rs6000|sh|sparc|tahoe|v850|vax|we32k|z8k|z8001|z8002)"
+set cpus_expected "(a29k|alliant|alpha|arc|arm|convex|d10v|d30v|fr30|h8|hppa|i386|i860|i960|m32r|m68k|m88k|MCore|mips|mn10200|mn10300|ns32k|pj|powerpc|pyramid|romp|rs6000|sh|sparc|tahoe|v850|vax|we32k|z8k|z8001|z8002)"
 
 # Make sure the target CPU shows up in the list.
 if ![regexp $cpus_expected $target_cpu] {
diff  -u -N ../original-binutils/gas/config/tc-pj.c gas/config/tc-pj.c
--- ../original-binutils/gas/config/tc-pj.c	Wed Dec 31 16:00:00 1969
+++ gas/config/tc-pj.c	Thu Sep  2 20:58:47 1999
@@ -0,0 +1,591 @@
+/*-
+   tc-pj.c -- Assemble code for Pico Java
+   Copyright (C) 1999 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.  */
+
+/* Contributed by Steve Chamberlain of Transmeta, sac@pobox.com */
+
+#include "as.h"
+#include "opcodes/pj-opc.h"
+
+const char comment_chars[] = "!/";
+const char line_separator_chars[] = ";";
+const char line_comment_chars[] = "/!#";
+
+static int pending_reloc;
+static struct hash_control *opcode_hash_control;
+						
+
+static void
+little (ignore)
+     int ignore ATTRIBUTE_UNUSED;
+{
+  target_big_endian = 0;
+}
+
+static void
+big (ignore)
+     int ignore ATTRIBUTE_UNUSED;
+{
+  target_big_endian = 1;
+}
+
+
+const pseudo_typeS md_pseudo_table[] = {
+  {"ml",    little, 0},
+  {"mb",    big,    0},
+  {0, 0, 0}
+};
+
+
+const char FLT_CHARS[] = "rRsSfFdDxXpP";
+const char EXP_CHARS[] = "eE";
+
+void
+md_operand (op)
+     expressionS *op;
+{
+  if (strncmp (input_line_pointer, "%hi16", 5) == 0)
+    {
+      if (pending_reloc)
+	as_bad (_ ("confusing relocation expressions"));
+      pending_reloc = BFD_RELOC_PJ_CODE_HI16;
+      input_line_pointer += 5;
+      expression (op);
+    }
+  if (strncmp (input_line_pointer, "%lo16", 5) == 0)
+    {
+      if (pending_reloc)
+	as_bad (_ ("confusing relocation expressions"));
+      pending_reloc = BFD_RELOC_PJ_CODE_LO16;
+      input_line_pointer += 5;
+      expression (op);
+    }
+}
+
+/* Parse an expression and then restore the input line pointer. */
+
+static char *
+parse_exp_save_ilp (s, op)
+     char *s;
+     expressionS *op;
+{
+  char *save = input_line_pointer;
+  input_line_pointer = s;
+  expression (op);
+  s = input_line_pointer;
+  input_line_pointer = save;
+  return s;
+}
+
+/* This is called by emit_expr via TC_CONS_FIX_NEW when creating a
+   reloc for a cons.  We could use the definition there, except that
+   we want to handle magic pending reloc expressions specially.  */
+
+void
+pj_cons_fix_new_pj (frag, where, nbytes, exp)
+     fragS *frag;
+     int where;
+     int nbytes;
+     expressionS *exp;
+{
+  static int rv[5][2] = 
+  { { 0, 0 },
+    { BFD_RELOC_8, BFD_RELOC_8 },
+    { BFD_RELOC_PJ_CODE_DIR16, BFD_RELOC_16 },
+    { 0, 0 },
+    { BFD_RELOC_PJ_CODE_DIR32, BFD_RELOC_32 }};
+
+  fix_new_exp (frag, where, nbytes, exp, 0, 
+	       pending_reloc ? pending_reloc
+	       : rv [nbytes][(now_seg->flags & SEC_CODE) ? 0 : 1]);
+
+  pending_reloc = 0;
+}
+
+
+/* Turn a reloc description character from the pj-opc.h table into
+   code which BFD can handle. */
+
+static int
+c_to_r (x)
+     char x;
+{
+  switch (x)
+    {
+    case O_R8:
+      return BFD_RELOC_8_PCREL;
+    case O_U8:
+    case O_8:
+      return BFD_RELOC_8;
+    case O_R16:
+      return BFD_RELOC_PJ_CODE_REL16;
+    case O_U16:
+    case O_16:
+      return BFD_RELOC_PJ_CODE_DIR16;
+    case O_R32:
+      return BFD_RELOC_PJ_CODE_REL32;
+    case O_32:
+      return BFD_RELOC_PJ_CODE_DIR32;
+    }
+  abort ();
+  return 0;
+}
+
+
+
+
+/* Handler for the ipush fake opcode,
+   turns ipush <foo> into sipush lo16<foo>, sethi hi16<foo>. */
+
+static void
+ipush_code (opcode, str)
+     pj_opc_info_t *opcode ATTRIBUTE_UNUSED; 
+     char *str;
+{
+  int mod = 0;
+  char *b = frag_more (6);
+  expressionS arg;
+  b[0] = 0x11;
+  b[3] = 0xed;
+  parse_exp_save_ilp (str + 1, &arg, &mod);
+  if (mod)
+    as_bad (_ ("can't have relocation for ipush"));
+
+
+  fix_new_exp (frag_now, b - frag_now->fr_literal + 1, 2, 
+	       &arg,  0, BFD_RELOC_PJ_CODE_DIR16);
+  fix_new_exp (frag_now, b - frag_now->fr_literal + 4, 2,
+	       &arg,  0, BFD_RELOC_PJ_CODE_HI16);
+}
+
+/* Insert names into the opcode table which are really mini macros,
+   not opcodes.  The fakeness is inidicated with an opcode of -1. */
+
+static void
+     fake_opcode (name, func) const char *
+       name;
+     void (*func) ();
+{
+  pj_opc_info_t *fake = (pj_opc_info_t *) xmalloc (sizeof (pj_opc_info_t));
+
+  fake->opcode = -1;
+  fake->opcode_next = -1;
+  fake->name = (const char *) func;
+  hash_insert (opcode_hash_control, name, (char *) fake);
+}
+
+
+/* Enter another entry into the opcode hash table so the same opcode
+   can have another name. */
+static void
+     alias (new, old) const char *
+       new;
+     const char *old;
+{
+  hash_insert (opcode_hash_control, new,
+	       (char *) hash_find (opcode_hash_control, old));
+}
+
+
+/* This function is called once, at assembler startup time.  It sets
+   up the hash table with all the opcodes in it, and also initializes
+   some aliases for compatibility with other assemblers. */
+
+void
+md_begin ()
+{
+  pj_opc_info_t *opcode;
+  opcode_hash_control = hash_new ();
+
+  /* Insert names into hash table. */
+  for (opcode = pj_opc_info; opcode->name; opcode++)
+    hash_insert (opcode_hash_control, opcode->name, (char *) opcode);
+
+  /* Insert the only fake opcode. */
+  fake_opcode ("ipush", ipush_code);
+
+  /* Add some aliases for opcode names. */
+  alias ("ifeq_s", "ifeq");
+  alias ("ifne_s", "ifne");
+  alias ("if_icmpge_s", "if_icmpge");
+  alias ("if_icmpne_s", "if_icmpne");
+  alias ("if_icmpeq_s", "if_icmpeq");
+  alias ("if_icmpgt_s", "if_icmpgt");
+  alias ("goto_s", "goto");
+
+  bfd_set_arch_mach (stdoutput, TARGET_ARCH, 0);
+}
+
+/* This is the guts of the machine-dependent assembler.  STR points to a
+   machine dependent instruction.  This function is supposed to emit
+   the frags/bytes it assembles to.
+ */
+
+void
+md_assemble (str)
+     char *str;
+{
+  unsigned char *op_start;
+  unsigned char *op_end;
+
+  //  pj_operan_info operand[3];
+  pj_opc_info_t *opcode;
+  char *output;
+  int idx = 0;
+  char pend;
+
+  int nlen = 0;
+
+  /* Drop leading whitespace */
+  while (*str == ' ')
+    str++;
+
+  /* find the op code end */
+  for (op_start = op_end = (unsigned char *) (str);
+       *op_end && !is_end_of_line[*op_end] && *op_end != ' ';
+       op_end++) 
+    nlen++;
+
+  pend = *op_end;
+  *op_end = 0;
+
+  if (nlen == 0)
+    {
+      as_bad (_ ("can't find opcode "));
+    }
+
+  opcode = (pj_opc_info_t *) hash_find (opcode_hash_control, op_start);
+  *op_end = pend;
+
+  if (opcode == NULL)
+    {
+      as_bad (_ ("unknown opcode %s"), op_start);
+      return;
+    }
+
+  if (opcode->opcode == -1)
+    {
+      /* It's a fake opcode.. dig out the args and pretend that was
+         what we were passed */
+      ((void (*)()) opcode->name) (opcode, op_end);
+    }
+  else
+    {
+      int an;
+
+      output = frag_more (opcode->len);
+      output[idx++] = opcode->opcode;
+
+      if (opcode->opcode_next != -1)
+	output[idx++] = opcode->opcode_next;
+
+      for (an = 0; opcode->arg[an]; an++)
+	{
+	  expressionS arg;
+
+	  if (*op_end == ',' && an != 0)
+	    op_end++;
+
+	  if (*op_end == 0)
+	    as_bad ("expected expresssion");
+
+	  op_end = parse_exp_save_ilp (op_end, &arg);
+
+	  fix_new_exp (frag_now, 
+		       output - frag_now->fr_literal + idx,
+		       ASIZE (opcode->arg[an]),
+		       &arg,
+		       PCREL (opcode->arg[an]), 
+		       pending_reloc ? pending_reloc : c_to_r (opcode->arg[an]));
+
+	  idx += ASIZE (opcode->arg[an]);
+	  pending_reloc = 0;
+	}
+
+      while (isspace (*op_end))
+	op_end++;
+
+      if (*op_end != 0)
+	as_warn ("extra stuff on line ignored");
+
+    }
+
+  if (pending_reloc)
+    as_bad ("Something forgot to clean up\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.
+ */
+char *
+md_atof (type, litP, sizeP)
+     int type;
+     char *litP;
+     int *sizeP;
+{
+  int prec;
+  LITTLENUM_TYPE words[4];
+  char *t;
+  int i;
+
+  switch (type)
+    {
+    case 'f':
+      prec = 2;
+      break;
+
+    case 'd':
+      prec = 4;
+      break;
+
+    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 * 2;
+
+  if (!target_big_endian)
+    {
+      for (i = prec - 1; i >= 0; i--)
+	{
+	  md_number_to_chars (litP, (valueT) words[i], 2);
+	  litP += 2;
+	}
+    }
+  else
+    {
+      for (i = 0; i < prec; i++)
+	{
+	  md_number_to_chars (litP, (valueT) words[i], 2);
+	  litP += 2;
+	}
+    }
+
+  return NULL;
+}
+
+
+CONST char *md_shortopts = "";
+
+struct option md_longopts[] = {
+
+#define OPTION_LITTLE (OPTION_MD_BASE)
+#define OPTION_BIG    (OPTION_LITTLE + 1)
+
+  {"little", no_argument, NULL, OPTION_LITTLE},
+  {"big", no_argument, NULL, OPTION_BIG},
+  {NULL, no_argument, NULL, 0}
+};
+size_t md_longopts_size = sizeof (md_longopts);
+
+int
+md_parse_option (c, arg)
+     int c;
+     char *arg ATTRIBUTE_UNUSED; 
+{
+  switch (c)
+    {
+    case OPTION_LITTLE:
+      little ();
+      break;
+    case OPTION_BIG:
+      big ();
+      break;
+    default:
+      return 0;
+    }
+  return 1;
+}
+
+void
+md_show_usage (stream)
+     FILE *stream;
+{
+  fprintf (stream, _ ("\
+PJ options:\n\
+-little			generate little endian code\n\
+-big			generate big endian code\n"));
+}
+
+
+
+/* Apply a fixup to the object file.  */
+
+
+int
+md_apply_fix (fixP, valp)
+     fixS *fixP;
+     valueT *valp;
+{
+  char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
+  long val = *valp;
+  long max, min;
+  int shift;
+
+
+  /* adjust_reloc_syms won't convert a reloc against a weak symbol
+     into a reloc against a section, but bfd_install_relocation will
+     screw up if the symbol is defined, so we have to adjust val here
+     to avoid the screw up later.  */
+
+  if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
+    val -= S_GET_VALUE (fixP->fx_addsy);
+
+  max = min = 0;
+  shift = 0;
+  switch (fixP->fx_r_type)
+    {
+    case BFD_RELOC_VTABLE_INHERIT:
+    case BFD_RELOC_VTABLE_ENTRY:
+      fixP->fx_done = 0;
+      return 0;
+
+    case BFD_RELOC_PJ_CODE_REL16:
+      if (val < -0x8000 || val >= 0x7fff)
+	as_bad_where (fixP->fx_file, fixP->fx_line, _ ("pcrel too far"));
+      buf[0] |= (val >> 8) & 0xff;
+      buf[1] = val & 0xff;
+      break;
+
+    case BFD_RELOC_PJ_CODE_HI16:
+      *buf++ = val >> 24;
+      *buf++ = val >> 16;
+      fixP->fx_addnumber = val & 0xffff;
+      break;
+
+    case BFD_RELOC_PJ_CODE_DIR16:
+    case BFD_RELOC_PJ_CODE_LO16:
+      *buf++ = val >> 8;
+      *buf++ = val >> 0;
+
+      max = 0xffff;
+      min = -0xffff;
+      break;
+
+    case BFD_RELOC_8:
+      max = 0xff;
+      min = -0xff;
+      *buf++ = val;
+      break;
+
+    case BFD_RELOC_PJ_CODE_DIR32:
+      *buf++ = val >> 24;
+      *buf++ = val >> 16;
+      *buf++ = val >> 8;
+      *buf++ = val >> 0;
+      break;
+
+    case BFD_RELOC_32:
+      if (target_big_endian)
+	{
+	  *buf++ = val >> 24;
+	  *buf++ = val >> 16;
+	  *buf++ = val >> 8;
+	  *buf++ = val >> 0;
+	}
+      else 
+	{
+	  *buf++ = val >> 0;
+	  *buf++ = val >> 8;
+	  *buf++ = val >> 16;
+	  *buf++ = val >> 24;
+	}
+      break;
+
+    case BFD_RELOC_16:
+      if (target_big_endian)
+	{
+	  *buf++ = val >> 8;
+	  *buf++ = val >> 0;
+	}
+      else
+	{
+	  *buf++ = val >> 0;
+	  *buf++ = val >> 8;
+	}
+      break;
+
+
+    default:
+      abort ();
+    }
+
+  if (max != 0 && (val < min || val > max))
+    as_bad_where (fixP->fx_file, fixP->fx_line, _ ("offset out of range"));
+
+  return 0;
+}
+
+/* Put number into target byte order.  Always put values in an
+   executable section into big endian order. */
+
+void
+md_number_to_chars (ptr, use, nbytes)
+     char *ptr;
+     valueT use;
+     int nbytes;
+{
+  if (target_big_endian || now_seg->flags & SEC_CODE)
+    number_to_chars_bigendian (ptr, use, nbytes);
+  else
+    number_to_chars_littleendian (ptr, use, nbytes);
+}
+
+
+
+/* Translate internal representation of relocation info to BFD target
+   format. */
+
+arelent *
+tc_gen_reloc (section, fixp)
+     asection *section ATTRIBUTE_UNUSED;
+     fixS *fixp;
+{
+  arelent *rel;
+  bfd_reloc_code_real_type r_type;
+
+  rel = (arelent *) xmalloc (sizeof (arelent));
+  rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
+  *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+  rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
+
+  r_type = fixp->fx_r_type;
+  rel->addend = fixp->fx_addnumber;
+  rel->howto = bfd_reloc_type_lookup (stdoutput, r_type);
+
+  if (rel->howto == NULL)
+    {
+      as_bad_where (fixp->fx_file, fixp->fx_line,
+		    _ ("Cannot represent relocation type %s"),
+		    bfd_get_reloc_code_name (r_type));
+      /* Set howto to a garbage value so that we can keep going.  */
+      rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
+      assert (rel->howto != NULL);
+    }
+
+  return rel;
+}
diff  -u -N ../original-binutils/gas/config/tc-pj.h gas/config/tc-pj.h
--- ../original-binutils/gas/config/tc-pj.h	Wed Dec 31 16:00:00 1969
+++ gas/config/tc-pj.h	Wed Sep  1 15:40:07 1999
@@ -0,0 +1,62 @@
+/*-This file is tc-pj.h
+
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+   Contributed by Steve Chamberlain of Transmeta, sac@pobox.com
+
+   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.  */
+
+
+/* Contributed by Steve Chamberlain, of Transmeta. sac@pobox.com. */
+
+#define WORKING_DOT_WORD
+#define IGNORE_NONSTANDARD_ESCAPES
+#define TARGET_ARCH bfd_arch_pj
+#define TARGET_FORMAT (target_big_endian ? "elf32-pj" : "elf32-pjl")
+#define LISTING_HEADER                    				\
+  (target_big_endian                      				\
+   ? "Pico Java GAS Big Endian"           				\
+   : "Pico Java GAS Little Endian")
+
+
+void pj_cons_fix_new_pj PARAMS ((struct frag *, int, int, expressionS *));
+arelent *tc_gen_reloc PARAMS((asection *section, struct fix *fixp));
+
+#define md_section_align(SEGMENT, SIZE)     (SIZE)
+#define md_convert_frag(B, S, F)            (as_fatal (_("convert_frag\n")), 0)
+#define md_estimate_size_before_relax(A, B) (as_fatal (_("estimate size\n")),0)
+#define md_undefined_symbol(NAME)           0
+
+/* PC relative operands are relative to the start of the opcode, and the operand
+   is always one byte into the opcode. */
+
+#define md_pcrel_from(FIXP) 						\
+	((FIXP)->fx_where + (FIXP)->fx_frag->fr_address - 1)
+
+
+#define TC_CONS_FIX_NEW(FRAG, WHERE, NBYTES, EXP) \
+	pj_cons_fix_new_pj(FRAG, WHERE, NBYTES, EXP)
+
+/* Always leave vtable relocs untouched in the output. */
+#define TC_FORCE_RELOCATION(FIX)                                  	\
+          ((FIX)->fx_r_type == BFD_RELOC_VTABLE_INHERIT           	\
+	   || (FIX)->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
+
+#define obj_fix_adjustable(FIX) 					\
+          (! ((FIX)->fx_r_type == BFD_RELOC_VTABLE_INHERIT         	\
+	   || (FIX)->fx_r_type == BFD_RELOC_VTABLE_ENTRY))
--- ../original-binutils/gas/configure.in	Thu Sep  2 15:34:22 1999
+++ gas/configure.in	Thu Sep  2 10:40:16 1999
@@ -103,6 +103,8 @@
       m8*)		cpu_type=m88k ;;
       mips*el)		cpu_type=mips endian=little ;;
       mips*)		cpu_type=mips endian=big ;;
+      pjl*)		cpu_type=pj endian=little ;;
+      pj*)		cpu_type=pj endian=big ;;
       powerpcle*)	cpu_type=ppc endian=little ;;
       powerpc*)		cpu_type=ppc endian=big ;;
       rs6000*)		cpu_type=ppc ;;
@@ -277,6 +279,7 @@
 			    ;;
       mn10200-*-*)	    fmt=elf bfd_gas=yes ;;
       mn10300-*-*)	    fmt=elf bfd_gas=yes ;;
+      pj*)		    fmt=elf ;;
       ppc-*-pe | ppc-*-cygwin* | ppc-*-winnt*)
 		            fmt=coff em=pe ;;
       ppc-*-aix*)           fmt=coff ;;
diff  -u -N -r ../original-binutils/gas/doc/all.texi gas/doc/all.texi
--- ../original-binutils/gas/doc/all.texi	Mon May  3 00:28:44 1999
+++ gas/doc/all.texi	Thu Sep  2 18:55:22 1999
@@ -32,19 +32,20 @@
 @set D30V
 @set H8/300
 @set H8/500
-@set SH
+@set HPPA
 @set I80386
 @set I960
-@set MCORE
-@set MIPS
 @set M32R
 @set M680X0
-@set Z8000
+@set MCORE
+@set MIPS
+@set PJ
+@set SH
 @set SPARC
+@set V850
 @set VAX
 @set VXWORKS
-@set HPPA
-@set V850
+@set Z8000
 
 @c Does this version of the assembler use the difference-table kluge?
 @set DIFF-TBL-KLUGE
diff  -u -N -r ../original-binutils/gas/doc/as.texinfo gas/doc/as.texinfo
--- ../original-binutils/gas/doc/as.texinfo	Wed Sep  1 13:49:27 1999
+++ gas/doc/as.texinfo	Thu Sep  2 18:59:50 1999
@@ -239,6 +239,9 @@
 @ifset HPPA
 @c HPPA has no machine-dependent assembler options (yet).
 @end ifset
+@ifset PJ
+ [ -mb | -me ]
+@end ifset
 @ifset SPARC
 @c The order here is important.  See c-sparc.texi.
  [ -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite
@@ -504,6 +507,26 @@
 @end table
 @end ifset
 
+@ifset PJ
+The following options are available when @value{AS} is configured for
+a picoJava processor.
+
+@table @code
+
+@cindex PJ endianness
+@cindex endianness, PJ
+@cindex big endian output, PJ
+@item -mb
+Generate ``big endian'' format output.
+
+@cindex little endian output, PJ
+@item -ml
+Generate ``little endian'' format output.
+
+@end table
+@end ifset
+
+
 @ifset SPARC
 The following options are available when @code{@value{AS}} is configured
 for the SPARC architecture:
@@ -1523,6 +1546,9 @@
 @ifset I960
 @samp{#} on the i960;
 @end ifset
+@ifset PJ
+@samp{;} for picoJava;
+@end ifset
 @ifset SH
 @samp{!} for the Hitachi SH;
 @end ifset
@@ -4844,6 +4870,9 @@
 @ifset SH
 * SH-Dependent::                Hitachi SH Dependent Features
 @end ifset
+@ifset PJ
+* PJ-Dependent::                picoJava Dependent Features
+@end ifset
 @ifset SPARC
 * Sparc-Dependent::             SPARC Dependent Features
 @end ifset
@@ -5012,6 +5041,10 @@
 
 @ifset NS32K
 @include c-ns32k.texi
+@end ifset
+
+@ifset PJ
+@include c-pj.texi
 @end ifset
 
 @ifset SH
diff  -u -N -r ../original-binutils/gas/doc/c-pj.texi gas/doc/c-pj.texi
--- ../original-binutils/gas/doc/c-pj.texi	Wed Dec 31 16:00:00 1969
+++ gas/doc/c-pj.texi	Thu Sep  2 19:01:01 1999
@@ -0,0 +1,28 @@
+@c Copyright (C) 1999 Free Software Foundation, Inc.
+@c This is part of the GAS manual.
+@c For copying conditions, see the file as.texinfo.
+@page
+@node PJ-Dependent
+@chapter picoJava Dependent Features
+
+@cindex PJ support
+@menu
+* PJ Options::              Options
+@end menu
+
+@node PJ Options
+@section Options
+
+@cindex PJ options
+@cindex options, PJ
+@code{@value{AS}} has two addiitional command-line options for the picoJava
+architecture.
+@table @code
+@item -ml
+This option selects little endian data output.
+
+@item -mb
+This option selects big endian data output.
+@end table
+
+
diff  -u -N -r ../original-binutils/gas/testsuite/gas/pj/ops.d gas/testsuite/gas/pj/ops.d
--- ../original-binutils/gas/testsuite/gas/pj/ops.d	Wed Dec 31 16:00:00 1969
+++ gas/testsuite/gas/pj/ops.d	Wed Sep  1 22:07:50 1999
@@ -0,0 +1,407 @@
+#objdump: -dr
+#name: pj
+#as
+
+# test all the instructions
+
+.*: +file format elf32-pj.
+
+Disassembly of section .text:
+
+00000000 <foo0-0x1>:
+	...
+
+00000001 <foo0>:
+	...
+
+00000002 <foo1>:
+	...
+
+00000003 <foo2>:
+	...
+
+00000004 <foo3>:
+	...
+
+00000005 <foo4>:
+	...
+
+00000006 <foo5>:
+	...
+
+00000007 <foo6>:
+	...
+
+00000008 <foo7>:
+	...
+
+00000009 <foo8>:
+	...
+
+0000000a <foo9>:
+	...
+
+0000000b <foo10>:
+	...
+
+0000000c <foo11>:
+	...
+
+0000000d <foo12>:
+	...
+
+0000000e <foo13>:
+	...
+
+0000000f <foo14>:
+	...
+
+00000010 <foo15>:
+	...
+
+00000011 <foo16>:
+	...
+
+00000012 <foo17>:
+	...
+
+00000013 <foo18>:
+	...
+
+00000014 <foo19>:
+  14:	00          	nop
+  15:	01          	aconst_null
+  16:	02          	iconst_m1
+  17:	03          	iconst_0
+  18:	04          	iconst_1
+  19:	05          	iconst_2
+  1a:	06          	iconst_3
+  1b:	07          	iconst_4
+  1c:	08          	iconst_5
+  1d:	09          	lconst_0
+  1e:	0a          	lconst_1
+  1f:	0b          	fconst_0
+  20:	0c          	fconst_1
+  21:	0d          	fconst_2
+  22:	0e          	dconst_0
+  23:	0f          	dconst_1
+  24:	10 e7       	bipush	-25
+  26:	11 a3 c6    	sipush	-23610
+  29:	12 00       	ldc
+  2b:	13 00 00    	ldc_w
+  2e:	14 00 00    	ldc2_w
+  31:	15 69       	iload	105
+  33:	16 73       	lload	115
+  35:	17 51       	fload	81
+  37:	18 ff       	dload	255
+  39:	19 4a       	aload	74
+  3b:	1a          	iload_0
+  3c:	1b          	iload_1
+  3d:	1c          	iload_2
+  3e:	1d          	iload_3
+  3f:	1e          	lload_0
+  40:	1f          	lload_1
+  41:	20          	lload_2
+  42:	21          	lload_3
+  43:	22          	fload_0
+  44:	23          	fload_1
+  45:	24          	fload_2
+  46:	25          	fload_3
+  47:	26          	dload_0
+  48:	27          	dload_1
+  49:	28          	dload_2
+  4a:	29          	dload_3
+  4b:	2a          	aload_0
+  4c:	2b          	aload_1
+  4d:	2c          	aload_2
+  4e:	2d          	aload_3
+  4f:	2e          	iaload
+  50:	2f          	laload
+  51:	30          	faload
+  52:	31          	daload
+  53:	32          	aaload
+  54:	33          	baload
+  55:	34          	caload
+  56:	35          	saload
+  57:	36 ec       	istore	236
+  59:	37 29       	lstore	41
+  5b:	38 cd       	fstore	205
+  5d:	39 ba       	dstore	186
+  5f:	3a ab       	astore	171
+  61:	3b          	istore_0
+  62:	3c          	istore_1
+  63:	3d          	istore_2
+  64:	3e          	istore_3
+  65:	3f          	lstore_0
+  66:	40          	lstore_1
+  67:	41          	lstore_2
+  68:	42          	lstore_3
+  69:	43          	fstore_0
+  6a:	44          	fstore_1
+  6b:	45          	fstore_2
+  6c:	46          	fstore_3
+  6d:	47          	dstore_0
+  6e:	48          	dstore_1
+  6f:	49          	dstore_2
+  70:	4a          	dstore_3
+  71:	4b          	astore_0
+  72:	4c          	astore_1
+  73:	4d          	astore_2
+  74:	4e          	astore_3
+  75:	4f          	iastore
+  76:	50          	lastore
+  77:	51          	fastore
+  78:	52          	dastore
+  79:	53          	aastore
+  7a:	54          	bastore
+  7b:	55          	castore
+  7c:	56          	sastore
+  7d:	57          	pop
+  7e:	58          	pop2
+  7f:	59          	dup
+  80:	5a          	dup_x1
+  81:	5b          	dup_x2
+  82:	5c          	dup2
+  83:	5d          	dup2_x1
+  84:	5e          	dup2_x2
+  85:	5f          	swap
+  86:	60          	iadd
+  87:	61          	ladd
+  88:	62          	fadd
+  89:	63          	dadd
+  8a:	64          	isub
+  8b:	65          	lsub
+  8c:	66          	fsub
+  8d:	67          	dsub
+  8e:	68          	imul
+  8f:	69          	lmul
+  90:	6a          	fmul
+  91:	6b          	dmul
+  92:	6c          	idiv
+  93:	6d          	ldiv
+  94:	6e          	fdiv
+  95:	6f          	ddiv
+  96:	70          	irem
+  97:	71          	lrem
+  98:	72          	frem
+  99:	73          	drem
+  9a:	74          	ineg
+  9b:	75          	lneg
+  9c:	76          	fneg
+  9d:	77          	dneg
+  9e:	78          	ishl
+  9f:	79          	lshl
+  a0:	7a          	ishr
+  a1:	7b          	lshr
+  a2:	7c          	iushr
+  a3:	7d          	lushr
+  a4:	7e          	iand
+  a5:	7f          	land
+  a6:	80          	ior
+  a7:	81          	lor
+  a8:	82          	ixor
+  a9:	83          	lxor
+  aa:	84 f2 7b    	iinc	242,123
+  ad:	85          	i2l
+  ae:	86          	i2f
+  af:	87          	i2d
+  b0:	88          	l2i
+  b1:	89          	l2f
+  b2:	8a          	l2d
+  b3:	8b          	f2i
+  b4:	8c          	f2l
+  b5:	8d          	f2d
+  b6:	8e          	d2i
+  b7:	8f          	d2l
+  b8:	90          	d2f
+  b9:	91          	i2b
+  ba:	92          	i2c
+  bb:	93          	i2s
+  bc:	94          	lcmp
+  bd:	95          	fcmpl
+  be:	96          	fcmpg
+  bf:	97          	dcmpl
+  c0:	98          	dcmpg
+  c1:	99 ff 41    	ifeq2 <foo1>
+  c4:	9a ff 47    	ifneb <foo10>
+  c7:	9b ff 41    	iflt8 <foo7>
+  ca:	9c ff 48    	ifge12 <foo17>
+  cd:	9d ff 39    	ifgt6 <foo5>
+  d0:	9e ff 3a    	iflea <foo9>
+  d3:	9f ff 38    	if_icmpeqb <foo10>
+  d6:	a0 ff 3a    	if_icmpne10 <foo15>
+  d9:	a1 ff 30    	if_icmplt9 <foo8>
+  dc:	a2 ff 31    	if_icmpged <foo12>
+  df:	a3 ff 29    	if_icmpgt8 <foo7>
+  e2:	a4 ff 2b    	if_icmpled <foo12>
+  e5:	a5 ff 22    	if_acmpeq7 <foo6>
+  e8:	a6 ff 20    	if_acmpne8 <foo7>
+  eb:	a7 ff 1b    	goto6 <foo5>
+  ee:	a8 00 00    	jsr
+  f1:	a9 00       	ret
+  f3:	aa ff ff ff 	tableswitch default: .*
+  f7:	0f 00 00 00 
+  fb:	01 00 00 00 
+  ff:	05 ff ff ff 
+ 103:	14 ff ff ff 
+ 107:	12 ff ff ff 
+ 10b:	1f ff ff ff 
+ 10f:	14 ff ff ff 
+ 113:	12 
+ 114:	ab 00 00 00 	lookupswitch default: .*
+ 118:	ff ff fe f2 
+ 11c:	00 00 00 02 
+ 120:	00 00 00 07 
+ 124:	ff ff fe fb 
+ 128:	00 00 00 25 
+ 12c:	ff ff fe fc 
+ 130:	ac          	ireturn
+ 131:	ad          	lreturn
+ 132:	ae          	freturn
+ 133:	af          	dreturn
+ 134:	b0          	areturn
+ 135:	b1          	return
+ 136:	b2 00 00    	getstatic
+ 139:	b3 00 00    	putstatic
+ 13c:	b4 00 00    	getfield
+ 13f:	b5 00 00    	putfield
+ 142:	b6 00 00    	invokevirtual
+ 145:	b7 00 00    	invokespecial
+ 148:	b8 00 00    	invokestatic
+ 14b:	b9 00 00 00 	invokeinterface
+ 14f:	00 
+ 150:	bb 00 00    	new
+ 153:	bc 00       	newarray
+ 155:	bd 00 00    	anewarray
+ 158:	be          	arraylength
+ 159:	bf          	athrow
+ 15a:	c0 00 00    	checkcast
+ 15d:	c1 00 00    	instanceof
+ 160:	c2          	monitorenter
+ 161:	c3          	monitorexit
+ 162:	c4          	wide
+ 163:	c5 00 00 00 	multianewarray
+ 167:	c6 00 00    	ifnull
+ 16a:	c7 00 00    	ifnonnull
+ 16d:	c8 00 00 00 	goto_w
+ 171:	00 
+ 172:	c9 00 00 00 	jsr_w
+ 176:	00 
+ 177:	ca          	breakpoint
+ 178:	cb          	bytecode
+ 179:	cc          	try
+ 17a:	cd          	endtry
+ 17b:	ce          	catch
+ 17c:	cf          	var
+ 17d:	d0          	endvar
+ 17e:	ed b0 a3    	sethi	-20317
+ 181:	ee 5a a5    	load_word_index	90,165
+ 184:	ef 5d 85    	load_short_index	93,133
+ 187:	f0 17 d8    	load_char_index	23,216
+ 18a:	f1 e9 de    	load_byte_index	233,222
+ 18d:	f2 d4 2b    	load_ubyte_index	212,43
+ 190:	f3 b2 4d    	store_word_index	178,77
+ 193:	f4 c6 1b    	na_store_word_index	198,27
+ 196:	f5 b4 d4    	store_short_index	180,212
+ 199:	f6 11 8e    	store_byte_index	17,142
+ 19c:	ff 00       	load_ubyte	
+ 19e:	ff 01       	load_byte	
+ 1a0:	ff 02       	load_char	
+ 1a2:	ff 03       	load_short	
+ 1a4:	ff 04       	load_word	
+ 1a6:	ff 05       	priv_ret_from_trap	
+ 1a8:	ff 06       	priv_read_dcache_tag	
+ 1aa:	ff 07       	priv_read_dcache_data	
+ 1ac:	ff 0a       	load_char_oe	
+ 1ae:	ff 0b       	load_short_oe	
+ 1b0:	ff 0c       	load_word_oe	
+ 1b2:	ff 0d       	return0	
+ 1b4:	ff 0e       	priv_read_icache_tag	
+ 1b6:	ff 0f       	priv_read_icache_data	
+ 1b8:	ff 10       	ncload_ubyte	
+ 1ba:	ff 11       	ncload_byte	
+ 1bc:	ff 12       	ncload_char	
+ 1be:	ff 13       	ncload_short	
+ 1c0:	ff 14       	ncload_word	
+ 1c2:	ff 15       	iucmp	
+ 1c4:	ff 16       	priv_powerdown	
+ 1c6:	ff 17       	cache_invalidate	
+ 1c8:	ff 1a       	ncload_char_oe	
+ 1ca:	ff 1b       	ncload_short_oe	
+ 1cc:	ff 1c       	ncload_word_oe	
+ 1ce:	ff 1d       	return1	
+ 1d0:	ff 1e       	cache_flush	
+ 1d2:	ff 1f       	cache_index_flush	
+ 1d4:	ff 20       	store_byte	
+ 1d6:	ff 22       	store_short	
+ 1d8:	ff 24       	store_word	
+ 1da:	ff 25       	soft_trap	
+ 1dc:	ff 26       	priv_write_dcache_tag	
+ 1de:	ff 27       	priv_write_dcache_data	
+ 1e0:	ff 2a       	store_short_oe	
+ 1e2:	ff 2c       	store_word_oe	
+ 1e4:	ff 2d       	return2	
+ 1e6:	ff 2e       	priv_write_icache_tag	
+ 1e8:	ff 2f       	priv_write_icache_data	
+ 1ea:	ff 30       	ncstore_byte	
+ 1ec:	ff 32       	ncstore_short	
+ 1ee:	ff 34       	ncstore_word	
+ 1f0:	ff 36       	priv_reset	
+ 1f2:	ff 37       	get_current_class	
+ 1f4:	ff 3a       	ncstore_short_oe	
+ 1f6:	ff 3c       	ncstore_word_oe	
+ 1f8:	ff 3d       	call	
+ 1fa:	ff 3e       	zero_line	
+ 1fc:	ff 3f       	priv_update_optop	
+ 1fe:	ff 40       	read_pc	
+ 200:	ff 41       	read_vars	
+ 202:	ff 42       	read_frame	
+ 204:	ff 43       	read_optop	
+ 206:	ff 44       	priv_read_oplim	
+ 208:	ff 45       	read_const_pool	
+ 20a:	ff 46       	priv_read_psr	
+ 20c:	ff 47       	priv_read_trapbase	
+ 20e:	ff 48       	priv_read_lockcount0	
+ 210:	ff 49       	priv_read_lockcount1	
+ 212:	ff 4c       	priv_read_lockaddr0	
+ 214:	ff 4d       	priv_read_lockaddr1	
+ 216:	ff 50       	priv_read_userrange1	
+ 218:	ff 51       	priv_read_gc_config	
+ 21a:	ff 52       	priv_read_brk1a	
+ 21c:	ff 53       	priv_read_brk2a	
+ 21e:	ff 54       	priv_read_brk12c	
+ 220:	ff 55       	priv_read_userrange2	
+ 222:	ff 57       	priv_read_versionid	
+ 224:	ff 58       	priv_read_hcr	
+ 226:	ff 59       	priv_read_sc_bottom	
+ 228:	ff 5a       	read_global0	
+ 22a:	ff 5b       	read_global1	
+ 22c:	ff 5c       	read_global2	
+ 22e:	ff 5d       	read_global3	
+ 230:	ff 60       	write_pc	
+ 232:	ff 61       	write_vars	
+ 234:	ff 62       	write_frame	
+ 236:	ff 63       	write_optop	
+ 238:	ff 64       	priv_write_oplim	
+ 23a:	ff 65       	write_const_pool	
+ 23c:	ff 66       	priv_write_psr	
+ 23e:	ff 67       	priv_write_trapbase	
+ 240:	ff 68       	priv_write_lockcount0	
+ 242:	ff 69       	priv_write_lockcount1	
+ 244:	ff 6c       	priv_write_lockaddr0	
+ 246:	ff 6d       	priv_write_lockaddr1	
+ 248:	ff 70       	priv_write_userrange1	
+ 24a:	ff 71       	priv_write_gc_config	
+ 24c:	ff 72       	priv_write_brk1a	
+ 24e:	ff 73       	priv_write_brk2a	
+ 250:	ff 74       	priv_write_brk12c	
+ 252:	ff 75       	priv_write_userrange2	
+ 254:	ff 79       	priv_write_sc_bottom	
+ 256:	ff 7a       	write_global0	
+ 258:	ff 7b       	write_global1	
+ 25a:	ff 7c       	write_global2	
+ 25c:	ff 7d       	write_global3	
+ 25e:	ff ae       	tm_putchar	
+ 260:	ff af       	tm_exit	
+ 262:	ff b0       	tm_trap	
+ 264:	ff b1       	tm_minfo	
diff  -u -N -r ../original-binutils/gas/testsuite/gas/pj/ops.s gas/testsuite/gas/pj/ops.s
--- ../original-binutils/gas/testsuite/gas/pj/ops.s	Wed Dec 31 16:00:00 1969
+++ gas/testsuite/gas/pj/ops.s	Wed Sep  1 22:01:04 1999
@@ -0,0 +1,397 @@
+.L0:	nop
+.globl foo0
+foo0:
+.L1:	nop
+.globl foo1
+foo1:
+.L2:	nop
+.globl foo2
+foo2:
+.L3:	nop
+.globl foo3
+foo3:
+.L4:	nop
+.globl foo4
+foo4:
+.L5:	nop
+.globl foo5
+foo5:
+.L6:	nop
+.globl foo6
+foo6:
+.L7:	nop
+.globl foo7
+foo7:
+.L8:	nop
+.globl foo8
+foo8:
+.L9:	nop
+.globl foo9
+foo9:
+.L10:	nop
+.globl foo10
+foo10:
+.L11:	nop
+.globl foo11
+foo11:
+.L12:	nop
+.globl foo12
+foo12:
+.L13:	nop
+.globl foo13
+foo13:
+.L14:	nop
+.globl foo14
+foo14:
+.L15:	nop
+.globl foo15
+foo15:
+.L16:	nop
+.globl foo16
+foo16:
+.L17:	nop
+.globl foo17
+foo17:
+.L18:	nop
+.globl foo18
+foo18:
+.L19:	nop
+.globl foo19
+foo19:
+	nop
+	aconst_null
+	iconst_m1
+	iconst_0
+	iconst_1
+	iconst_2
+	iconst_3
+	iconst_4
+	iconst_5
+	lconst_0
+	lconst_1
+	fconst_0
+	fconst_1
+	fconst_2
+	dconst_0
+	dconst_1
+	bipush -25
+	sipush -23610
+	ldc
+	ldc_w
+	ldc2_w
+	iload 105
+	lload 115
+	fload 81
+	dload 255
+	aload 74
+	iload_0
+	iload_1
+	iload_2
+	iload_3
+	lload_0
+	lload_1
+	lload_2
+	lload_3
+	fload_0
+	fload_1
+	fload_2
+	fload_3
+	dload_0
+	dload_1
+	dload_2
+	dload_3
+	aload_0
+	aload_1
+	aload_2
+	aload_3
+	iaload
+	laload
+	faload
+	daload
+	aaload
+	baload
+	caload
+	saload
+	istore 236
+	lstore 41
+	fstore 205
+	dstore 186
+	astore 171
+	istore_0
+	istore_1
+	istore_2
+	istore_3
+	lstore_0
+	lstore_1
+	lstore_2
+	lstore_3
+	fstore_0
+	fstore_1
+	fstore_2
+	fstore_3
+	dstore_0
+	dstore_1
+	dstore_2
+	dstore_3
+	astore_0
+	astore_1
+	astore_2
+	astore_3
+	iastore
+	lastore
+	fastore
+	dastore
+	aastore
+	bastore
+	castore
+	sastore
+	pop
+	pop2
+	dup
+	dup_x1
+	dup_x2
+	dup2
+	dup2_x1
+	dup2_x2
+	swap
+	iadd
+	ladd
+	fadd
+	dadd
+	isub
+	lsub
+	fsub
+	dsub
+	imul
+	lmul
+	fmul
+	dmul
+	idiv
+	ldiv
+	fdiv
+	ddiv
+	irem
+	lrem
+	frem
+	drem
+	ineg
+	lneg
+	fneg
+	dneg
+	ishl
+	lshl
+	ishr
+	lshr
+	iushr
+	lushr
+	iand
+	land
+	ior
+	lor
+	ixor
+	lxor
+	iinc 242, 123
+	i2l
+	i2f
+	i2d
+	l2i
+	l2f
+	l2d
+	f2i
+	f2l
+	f2d
+	d2i
+	d2l
+	d2f
+	i2b
+	i2c
+	i2s
+	lcmp
+	fcmpl
+	fcmpg
+	dcmpl
+	dcmpg
+	ifeq .L2
+	ifne .L11
+	iflt .L8
+	ifge .L18
+	ifgt .L6
+	ifle .L10
+	if_icmpeq .L11
+	if_icmpne .L16
+	if_icmplt .L9
+	if_icmpge .L13
+	if_icmpgt .L8
+	if_icmple .L13
+	if_acmpeq .L7
+	if_acmpne .L8
+	goto .L6
+	jsr
+	ret
+.Lt:	tableswitch
+
+	.align 2
+	.long .L2-.Lt
+	.long 1
+	.long 5
+	.long .L7-.Lt
+	.long .L5-.Lt
+	.long .L18-.Lt
+	.long .L7-.Lt
+	.long .L5-.Lt
+.Ll:	lookupswitch
+
+	.align 2
+	.long .L6-.Ll
+	.long 2
+	.long 7
+	.long .L15-.Ll
+	.long 37
+	.long .L16-.Ll
+	ireturn
+	lreturn
+	freturn
+	dreturn
+	areturn
+	return
+	getstatic
+	putstatic
+	getfield
+	putfield
+	invokevirtual
+	invokespecial
+	invokestatic
+	invokeinterface
+	new
+	newarray
+	anewarray
+	arraylength
+	athrow
+	checkcast
+	instanceof
+	monitorenter
+	monitorexit
+	wide
+	multianewarray
+	ifnull
+	ifnonnull
+	goto_w
+	jsr_w
+	breakpoint
+	bytecode
+	try
+	endtry
+	catch
+	var
+	endvar
+	sethi -20317
+	load_word_index 90, -91
+	load_short_index 93, -123
+	load_char_index 23, -40
+	load_byte_index 233, -34
+	load_ubyte_index 212, 43
+	store_word_index 178, 77
+	na_store_word_index 198, 27
+	store_short_index 180, -44
+	store_byte_index 17, -114
+	load_ubyte
+	load_byte
+	load_char
+	load_short
+	load_word
+	priv_ret_from_trap
+	priv_read_dcache_tag
+	priv_read_dcache_data
+	load_char_oe
+	load_short_oe
+	load_word_oe
+	return0
+	priv_read_icache_tag
+	priv_read_icache_data
+	ncload_ubyte
+	ncload_byte
+	ncload_char
+	ncload_short
+	ncload_word
+	iucmp
+	priv_powerdown
+	cache_invalidate
+	ncload_char_oe
+	ncload_short_oe
+	ncload_word_oe
+	return1
+	cache_flush
+	cache_index_flush
+	store_byte
+	store_short
+	store_word
+	soft_trap
+	priv_write_dcache_tag
+	priv_write_dcache_data
+	store_short_oe
+	store_word_oe
+	return2
+	priv_write_icache_tag
+	priv_write_icache_data
+	ncstore_byte
+	ncstore_short
+	ncstore_word
+	priv_reset
+	get_current_class
+	ncstore_short_oe
+	ncstore_word_oe
+	call
+	zero_line
+	priv_update_optop
+	read_pc
+	read_vars
+	read_frame
+	read_optop
+	priv_read_oplim
+	read_const_pool
+	priv_read_psr
+	priv_read_trapbase
+	priv_read_lockcount0
+	priv_read_lockcount1
+	priv_read_lockaddr0
+	priv_read_lockaddr1
+	priv_read_userrange1
+	priv_read_gc_config
+	priv_read_brk1a
+	priv_read_brk2a
+	priv_read_brk12c
+	priv_read_userrange2
+	priv_read_versionid
+	priv_read_hcr
+	priv_read_sc_bottom
+	read_global0
+	read_global1
+	read_global2
+	read_global3
+	write_pc
+	write_vars
+	write_frame
+	write_optop
+	priv_write_oplim
+	write_const_pool
+	priv_write_psr
+	priv_write_trapbase
+	priv_write_lockcount0
+	priv_write_lockcount1
+	priv_write_lockaddr0
+	priv_write_lockaddr1
+	priv_write_userrange1
+	priv_write_gc_config
+	priv_write_brk1a
+	priv_write_brk2a
+	priv_write_brk12c
+	priv_write_userrange2
+	priv_write_sc_bottom
+	write_global0
+	write_global1
+	write_global2
+	write_global3
+	tm_putchar
+	tm_exit
+	tm_trap
+	tm_minfo
diff  -u -N -r ../original-binutils/gas/testsuite/gas/pj/pj.exp gas/testsuite/gas/pj/pj.exp
--- ../original-binutils/gas/testsuite/gas/pj/pj.exp	Wed Dec 31 16:00:00 1969
+++ gas/testsuite/gas/pj/pj.exp	Thu Sep  2 16:27:45 1999
@@ -0,0 +1,7 @@
+#
+# Some pj tests
+#
+if [istarget pj*] then {
+    run_dump_test "ops"
+}
+
--- ../original-binutils/include/dis-asm.h	Tue Jun 15 19:24:26 1999
+++ include/dis-asm.h	Tue Aug 10 15:36:25 1999
@@ -183,6 +183,7 @@
 extern int print_insn_tic30		PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_vax		PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_tic80		PARAMS ((bfd_vma, disassemble_info*));
+extern int print_insn_pj		PARAMS ((bfd_vma, disassemble_info*));
 
 extern int arm_toggle_regnames          PARAMS ((void));
 
diff  -u -N ../original-binutils/include/elf/ChangeLog include/elf/ChangeLog
--- ../original-binutils/include/elf/ChangeLog	Thu Sep  2 16:11:16 1999
+++ include/elf/ChangeLog	Thu Sep  2 10:55:35 1999
@@ -1,8 +1,3 @@
-1999-09-02  Ulrich Drepper  <drepper@cygnus.com>
-
-	* hppa.h: Add HPUX specific dynamic and program header table
-	specific definitions.
-
 1999-08-31  Scott Bambrough <scottb@netwinder.org>
 
 	* common.h (NT_TASKSTRUCT): Define.
diff  -u -N ../original-binutils/include/elf/common.h include/elf/common.h
--- ../original-binutils/include/elf/common.h	Wed Sep  1 13:49:29 1999
+++ include/elf/common.h	Thu Sep  2 10:58:17 1999
@@ -119,6 +119,8 @@
 #define EM_COLDFIRE    52       /* Motorola Coldfire */
 #define EM_68HC12      53       /* Motorola M68HC12 */
 
+#define EM_PJ          99       /* picoJava */
+
 /* If it is necessary to assign new unofficial EM_* values, please pick large
    random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision
    with official or non-GNU unofficial values.
diff  -u -N ../original-binutils/include/elf/pj.h include/elf/pj.h
--- ../original-binutils/include/elf/pj.h	Wed Dec 31 16:00:00 1969
+++ include/elf/pj.h	Thu Sep  2 08:08:46 1999
@@ -0,0 +1,45 @@
+/* picoJava ELF support for BFD.
+   Copyright (C) 1999 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.  */
+
+#ifndef _ELF_PJ_H
+#define _ELF_PJ_H
+
+#include "elf/reloc-macros.h"
+
+/* Relocations.  */
+
+START_RELOC_NUMBERS (elf_pj_reloc_type)
+  RELOC_NUMBER (R_PJ_NONE, 0)
+  RELOC_NUMBER (R_PJ_DATA_DIR32, 1)
+  RELOC_NUMBER (R_PJ_CODE_REL32, 2)
+  RELOC_NUMBER (R_PJ_CODE_REL16, 3) 
+  RELOC_NUMBER (R_PJ_CODE_DIR32, 6)
+  RELOC_NUMBER (R_PJ_CODE_DIR16, 7)  
+  RELOC_NUMBER (R_PJ_CODE_LO16, 13)
+  RELOC_NUMBER (R_PJ_CODE_HI16, 14)
+  RELOC_NUMBER (R_PJ_GNU_VTINHERIT, 15)
+  RELOC_NUMBER (R_PJ_GNU_VTENTRY, 16)
+  EMPTY_RELOC (R_PJ_max)
+END_RELOC_NUMBERS
+
+#define EF_PICOJAVA_ARCH     0x0000000f
+#define EF_PICOJAVA_NEWCALLS 0x00000010
+#define EF_PICOJAVA_GNUCALLS 0x00000020  /* The (currently) non standard GNU calling convention */
+
+#endif
--- ../original-binutils/ld/Makefile.am	Thu Sep  2 16:13:18 1999
+++ ld/Makefile.am	Wed Aug 25 14:42:50 1999
@@ -179,6 +179,8 @@
 	emipslit.o \
 	emipslnews.o \
 	enews.o \
+	epjelf.o \
+	epjlelf.o \
 	ens32knbsd.o \
 	epc532macha.o \
 	eppcmacos.o \
@@ -210,8 +212,7 @@
 ALL_64_EMULATIONS = \
 	eelf64_sparc.o \
 	eelf64alpha.o \
-	eelf64bmip.o \
-	eelf64hppa.o
+	eelf64bmip.o
 
 ALL_EMUL_EXTRA_OFILES = \
 	pe-dll.o \
@@ -388,9 +389,6 @@
 eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)"
-eelf64hppa.c: $(srcdir)/emulparams/elf64hppa.sh \
-  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
-	${GENSCRIPTS} elf64hppa "$(tdir_elf64hppa)"
 eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)"
@@ -553,6 +551,12 @@
 epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
+epjelf.c: $(srcdir)/emulparams/pjelf.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} pjelf "$(tdir_pjelf)"
+epjlelf.c: $(srcdir)/emulparams/pjlelf.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} pjlelf "$(tdir_pjlelf)"
 eppcmacos.c:	$(srcdir)/emulparams/ppcmacos.sh \
   $(srcdir)/emultempl/aix.em $(srcdir)/scripttempl/aix.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} ppcmacos "$(tdir_ppcmacos)"
--- ../original-binutils/ld/configure.tgt	Thu Sep  2 16:13:19 1999
+++ ld/configure.tgt	Thu Sep  2 20:24:17 1999
@@ -230,6 +230,8 @@
 ns32k-pc532-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd ;;
 powerpc-*-linux-gnu*)	targ_emul=elf32ppclinux; targ_extra_emuls=elf32ppc;
 			targ_extra_libpath=elf32ppc ;;
+pjl*)		        targ_emul=pjlelf ; targ_extra_emuls="elf_i386" ;;
+pj*)		        targ_emul=pjelf ;;
 powerpc-*-elf* | powerpc-*-eabi* | powerpc-*-sysv* \
   | powerpc-*-netbsd* | powerpc-*-vxworks*)
 	targ_emul=elf32ppc ;;
diff  -u -N ../original-binutils/ld/emulparams/pjelf.sh ld/emulparams/pjelf.sh
--- ../original-binutils/ld/emulparams/pjelf.sh	Wed Dec 31 16:00:00 1969
+++ ld/emulparams/pjelf.sh	Thu Sep  2 11:27:05 1999
@@ -0,0 +1,5 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-pj"
+TEXT_START_ADDR=0x1000000
+MAXPAGESIZE=0x1000
+ARCH=pj
diff  -u -N ../original-binutils/ld/emulparams/pjlelf.sh ld/emulparams/pjlelf.sh
--- ../original-binutils/ld/emulparams/pjlelf.sh	Wed Dec 31 16:00:00 1969
+++ ld/emulparams/pjlelf.sh	Wed Sep  1 13:59:54 1999
@@ -0,0 +1,5 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-pjl"
+TEXT_START_ADDR=0x1000000
+MAXPAGESIZE=0x1000
+ARCH=pj
diff  -u -N ../original-binutils/ld/scripttempl/pj.sc ld/scripttempl/pj.sc
--- ../original-binutils/ld/scripttempl/pj.sc	Wed Dec 31 16:00:00 1969
+++ ld/scripttempl/pj.sc	Thu Sep  2 11:27:47 1999
@@ -0,0 +1,55 @@
+TORS=".tors :
+  {
+    ___ctors = . ;
+    *(.ctors)
+    ___ctors_end = . ;
+    ___dtors = . ;
+    *(.dtors)
+    ___dtors_end = . ;
+  } > ram"
+
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+  ram : o = 0x1000, l = 512M
+}
+
+SECTIONS
+{
+  .text :
+  {
+    *(.text)
+    *(.strings)
+    ${RELOCATING+ _etext = . ; }
+  } ${RELOCATING+ > ram}
+  ${CONSTRUCTING+${TORS}}
+  .data :
+  {
+    *(.data)
+    ${RELOCATING+ _edata = . ; }
+  } ${RELOCATING+ > ram}
+  .bss :
+  {
+    ${RELOCATING+ _bss_start = . ; }
+    *(.bss)
+    *(COMMON)
+    ${RELOCATING+ _end = . ;  }
+  } ${RELOCATING+ > ram}
+  .stack ${RELOCATING+ 0x30000 }  :
+  {
+    ${RELOCATING+ _stack = . ; }
+    *(.stack)
+  } ${RELOCATING+ > ram}
+  .stab 0 ${RELOCATING+(NOLOAD)} :
+  {
+    *(.stab)
+  }
+  .stabstr 0 ${RELOCATING+(NOLOAD)} :
+  {
+    *(.stabstr)
+  }
+}
+EOF
diff  -u -N ../original-binutils/opcodes/Makefile.am opcodes/Makefile.am
--- ../original-binutils/opcodes/Makefile.am	Tue Aug 10 15:17:05 1999
+++ opcodes/Makefile.am	Mon Aug 16 08:46:09 1999
@@ -20,6 +20,7 @@
 	h8500-opc.h \
 	m32r-desc.h m32r-opc.h \
 	mcore-opc.h \
+	pj-opc.h \
 	sh-opc.h \
 	sysdep.h \
 	w65-opc.h \
@@ -70,6 +71,7 @@
 	m10300-dis.c \
 	m10300-opc.c \
 	ns32k-dis.c \
+	pj-dis.c \
 	ppc-dis.c \
 	ppc-opc.c \
 	sh-dis.c \
@@ -126,6 +128,7 @@
 	mips-dis.lo \
 	mips-opc.lo \
 	mips16-opc.lo \
+	pj-dis.lo \
 	ppc-dis.lo \
 	ppc-opc.lo \
 	ns32k-dis.lo \
@@ -334,6 +337,8 @@
 ns32k-dis.lo: ns32k-dis.c $(BFD_H) $(INCDIR)/ansidecl.h \
   sysdep.h config.h $(INCDIR)/dis-asm.h $(INCDIR)/opcode/ns32k.h \
   opintl.h
+pj-dis.lo: pj-dis.c pj-opc.h $(INCDIR)/dis-asm.h $(BFD_H) \
+  $(INCDIR)/ansidecl.h
 ppc-dis.lo: ppc-dis.c $(INCDIR)/ansidecl.h sysdep.h \
   config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/ppc.h
 ppc-opc.lo: ppc-opc.c $(INCDIR)/ansidecl.h $(INCDIR)/opcode/ppc.h \
diff  -u -N ../original-binutils/opcodes/configure.in opcodes/configure.in
--- ../original-binutils/opcodes/configure.in	Mon May  3 00:28:59 1999
+++ opcodes/configure.in	Thu Jul 15 06:54:30 1999
@@ -151,6 +151,7 @@
 	bfd_mn10200_arch)	ta="$ta m10200-dis.lo m10200-opc.lo" ;;
 	bfd_mn10300_arch)	ta="$ta m10300-dis.lo m10300-opc.lo" ;;
 	bfd_ns32k_arch)		ta="$ta ns32k-dis.lo" ;;
+	bfd_pj_arch)	        ta="$ta pj-dis.lo" ;;
 	bfd_powerpc_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
 	bfd_pyramid_arch)	;;
 	bfd_romp_arch)		;;
diff  -u -N ../original-binutils/opcodes/disassemble.c opcodes/disassemble.c
--- ../original-binutils/opcodes/disassemble.c	Tue Jun 15 19:24:30 1999
+++ opcodes/disassemble.c	Thu Jul 15 06:54:30 1999
@@ -39,6 +39,7 @@
 #define ARCH_mn10200
 #define ARCH_mn10300
 #define ARCH_ns32k
+#define ARCH_pj
 #define ARCH_powerpc
 #define ARCH_rs6000
 #define ARCH_sh
@@ -179,6 +180,11 @@
 #ifdef ARCH_mn10300
     case bfd_arch_mn10300:
       disassemble = print_insn_mn10300;
+      break;
+#endif
+#ifdef ARCH_pj
+    case bfd_arch_pj:
+      disassemble = print_insn_pj;
       break;
 #endif
 #ifdef ARCH_powerpc
diff  -u -N ../original-binutils/opcodes/pj-dis.c opcodes/pj-dis.c
--- ../original-binutils/opcodes/pj-dis.c	Wed Dec 31 16:00:00 1969
+++ opcodes/pj-dis.c	Thu Sep  2 19:47:56 1999
@@ -0,0 +1,173 @@
+/* Disassemble picoJava instructions.
+   Copyright (C) 1999 Free Software Foundation, Inc. 
+   Contributed by Steve Chamberlain, of Transmeta (sac@pobox.com).
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+
+#include <stdio.h>
+#include "pj-opc.h"
+#include "dis-asm.h"
+
+static int get_int (memaddr, iptr, info)
+     bfd_vma memaddr;
+     int *iptr;
+     struct disassemble_info *info;
+{
+  unsigned char ival[4];
+
+  int status = info->read_memory_func (memaddr, ival, 4, info);
+
+  *iptr = (ival[0] << 24) 
+    | (ival[1] << 16) 
+    | (ival[2] << 8) 
+    | (ival[3] << 0) ;
+
+  return status;
+}
+
+int
+print_insn_pj (addr, info)
+     bfd_vma addr;
+     struct disassemble_info *info;
+{
+  fprintf_ftype fprintf_fn = info->fprintf_func;
+  void *stream = info->stream;
+  unsigned char opcode;
+  int status;
+
+  if ((status = info->read_memory_func (addr, &opcode, 1, info)))
+    goto fail;
+
+  if (opcode == 0xff)
+    {
+      unsigned char byte_2;
+      if ((status = info->read_memory_func (addr + 1, &byte_2, 1, info)))
+	goto fail;
+      fprintf_fn (stream, "%s\t", pj_opc_info[opcode + byte_2].name);
+      return 2;
+    }
+  else
+    {
+      char *sep = "\t";
+      int insn_start = addr;
+      pj_opc_info_t *op = &pj_opc_info[opcode];
+      int a;
+      addr++;
+      fprintf_fn (stream, "%s", op->name);
+
+      /* The tableswitch instruction is followed by the default
+	 address, low value, high value and the destinations. */
+
+      if (strcmp (op->name, "tableswitch") == 0)
+	{
+	  int lowval;
+	  int highval;
+	  int val;
+
+	  addr = (addr + 3) & ~3;
+	  if ((status = get_int (addr, &val, info)))
+	    goto fail;
+
+	  fprintf_fn (stream," default: ");
+	  (*info->print_address_func) (val + insn_start, info);
+	  addr += 4;
+
+	  if ((status = get_int (addr, &lowval, info)))
+	    goto fail;
+	  addr += 4;
+
+	  if ((status = get_int (addr, &highval, info)))
+	    goto fail;
+	  addr += 4;
+
+	  while (lowval <= highval) {
+	    if ((status = get_int (addr, &val, info)))
+	      goto fail;
+	    fprintf_fn (stream," %d:[", lowval);
+	    (*info->print_address_func) (val + insn_start, info);
+	    fprintf_fn (stream," ]");
+	    addr += 4;
+	    lowval++;
+	  }
+	  return addr - insn_start;
+	}
+
+      /* The lookupswitch instruction is followed by the default
+	 address, element count and pairs of values and
+	 addresses. */
+	    
+      if (strcmp (op->name, "lookupswitch") == 0)
+	{
+	  int count;
+	  int val;
+
+	  addr = (addr + 3) & ~3;
+	  if ((status = get_int (addr, &val, info)))
+	    goto fail;
+	  addr += 4;
+
+	  fprintf_fn (stream," default: ");
+	  (*info->print_address_func) (val + insn_start, info);
+
+	  if ((status = get_int (addr, &count, info)))
+	    goto fail;
+	  addr += 4;
+
+	  while (count--) {
+	    if ((status = get_int (addr, &val, info)))
+	      goto fail;
+	    addr += 4;
+	    fprintf_fn (stream," %d:[", val);
+
+	    if ((status = get_int (addr, &val, info)))
+	      goto fail;
+	    addr += 4;
+
+	    (*info->print_address_func) (val + insn_start, info);
+	    fprintf_fn (stream," ]");
+	  }
+	  return addr - insn_start;
+	}
+      for (a = 0; op->arg[a]; a++)
+	{
+	  unsigned char data[4];
+	  int val = 0;
+	  int i;
+	  int size = ASIZE (op->arg[a]);
+
+	  if ((status = info->read_memory_func (addr, data, size, info)))
+	    goto fail;
+
+	  val = (UNS (op->arg[0]) || ((data[0] & 0x80) == 0)) ? 0 : -1;
+
+	  for (i = 0; i < size; i++)
+	    val = (val << 8) | (data[i] & 0xff);
+
+	  if (PCREL (op->arg[a]))
+	    (*info->print_address_func) (val + insn_start, info);
+	  else
+	    fprintf_fn (stream, "%s%d", sep, val);
+
+	  sep = ",";
+	  addr += size;
+	}
+      return op->len;
+    }
+
+ fail:
+  info->memory_error_func (status, addr, info);
+  return -1;
+}
diff  -u -N ../original-binutils/opcodes/pj-opc.h opcodes/pj-opc.h
--- ../original-binutils/opcodes/pj-opc.h	Wed Dec 31 16:00:00 1969
+++ opcodes/pj-opc.h	Thu Sep  2 19:48:01 1999
@@ -0,0 +1,564 @@
+/* Definitions for picoJava opcodes.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+   Contributed by Steve Chamberlain of Transmeta (sac@pobox.com).
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+
+/* Names used to describe the type of instruction operands, used by
+   the assembler and disassembler.  Attributes are encoded in various fields. */
+
+/*            reloc  size pcrel    uns */
+#define O_N    0
+#define O_16  (1<<4 | 2 | (0<<6) | (0<<3))
+#define O_U16 (1<<4 | 2 | (0<<6) | (1<<3))
+#define O_R16 (2<<4 | 2 | (1<<6) | (0<<3))
+#define O_8   (3<<4 | 1 | (0<<6) | (0<<3))
+#define O_U8  (3<<4 | 1 | (0<<6) | (1<<3))
+#define O_R8  (4<<4 | 1 | (0<<6) | (0<<3))
+#define O_R32 (5<<4 | 4 | (1<<6) | (0<<3))
+#define O_32  (6<<4 | 4 | (0<<6) | (0<<3))
+
+#define ASIZE(x)  ((x) & 0x7)
+#define PCREL(x)  (!!((x) & (1<<6)))
+#define UNS(x)    (!!((x) & (1<<3)))
+
+                  
+typedef struct 
+{
+  short opcode;
+  short opcode_next;
+  char len;
+  unsigned char arg[2];
+  const char *name;
+} pj_opc_info_t;
+
+pj_opc_info_t pj_opc_info[512] =
+{
+{ 0x00,   -1, 1, {O_N, O_N}, "nop"},
+{ 0x01,   -1, 1, {O_N, O_N}, "aconst_null"},
+{ 0x02,   -1, 1, {O_N, O_N}, "iconst_m1"},
+{ 0x03,   -1, 1, {O_N, O_N}, "iconst_0"},
+{ 0x04,   -1, 1, {O_N, O_N}, "iconst_1"},
+{ 0x05,   -1, 1, {O_N, O_N}, "iconst_2"},
+{ 0x06,   -1, 1, {O_N, O_N}, "iconst_3"},
+{ 0x07,   -1, 1, {O_N, O_N}, "iconst_4"},
+{ 0x08,   -1, 1, {O_N, O_N}, "iconst_5"},
+{ 0x09,   -1, 1, {O_N, O_N}, "lconst_0"},
+{ 0x0a,   -1, 1, {O_N, O_N}, "lconst_1"},
+{ 0x0b,   -1, 1, {O_N, O_N}, "fconst_0"},
+{ 0x0c,   -1, 1, {O_N, O_N}, "fconst_1"},
+{ 0x0d,   -1, 1, {O_N, O_N}, "fconst_2"},
+{ 0x0e,   -1, 1, {O_N, O_N}, "dconst_0"},
+{ 0x0f,   -1, 1, {O_N, O_N}, "dconst_1"},
+{ 0x10,   -1, 2, {O_8, O_N}, "bipush"},
+{ 0x11,   -1, 3, {O_16, O_N}, "sipush"},
+{ 0x12,   -1, 2, {O_N, O_N}, "ldc"},
+{ 0x13,   -1, 3, {O_N, O_N}, "ldc_w"},
+{ 0x14,   -1, 3, {O_N, O_N}, "ldc2_w"},
+{ 0x15,   -1, 2, {O_U8, O_N}, "iload"},
+{ 0x16,   -1, 2, {O_U8, O_N}, "lload"},
+{ 0x17,   -1, 2, {O_U8, O_N}, "fload"},
+{ 0x18,   -1, 2, {O_U8, O_N}, "dload"},
+{ 0x19,   -1, 2, {O_U8, O_N}, "aload"},
+{ 0x1a,   -1, 1, {O_N, O_N}, "iload_0"},
+{ 0x1b,   -1, 1, {O_N, O_N}, "iload_1"},
+{ 0x1c,   -1, 1, {O_N, O_N}, "iload_2"},
+{ 0x1d,   -1, 1, {O_N, O_N}, "iload_3"},
+{ 0x1e,   -1, 1, {O_N, O_N}, "lload_0"},
+{ 0x1f,   -1, 1, {O_N, O_N}, "lload_1"},
+{ 0x20,   -1, 1, {O_N, O_N}, "lload_2"},
+{ 0x21,   -1, 1, {O_N, O_N}, "lload_3"},
+{ 0x22,   -1, 1, {O_N, O_N}, "fload_0"},
+{ 0x23,   -1, 1, {O_N, O_N}, "fload_1"},
+{ 0x24,   -1, 1, {O_N, O_N}, "fload_2"},
+{ 0x25,   -1, 1, {O_N, O_N}, "fload_3"},
+{ 0x26,   -1, 1, {O_N, O_N}, "dload_0"},
+{ 0x27,   -1, 1, {O_N, O_N}, "dload_1"},
+{ 0x28,   -1, 1, {O_N, O_N}, "dload_2"},
+{ 0x29,   -1, 1, {O_N, O_N}, "dload_3"},
+{ 0x2a,   -1, 1, {O_N, O_N}, "aload_0"},
+{ 0x2b,   -1, 1, {O_N, O_N}, "aload_1"},
+{ 0x2c,   -1, 1, {O_N, O_N}, "aload_2"},
+{ 0x2d,   -1, 1, {O_N, O_N}, "aload_3"},
+{ 0x2e,   -1, 1, {O_N, O_N}, "iaload"},
+{ 0x2f,   -1, 1, {O_N, O_N}, "laload"},
+{ 0x30,   -1, 1, {O_N, O_N}, "faload"},
+{ 0x31,   -1, 1, {O_N, O_N}, "daload"},
+{ 0x32,   -1, 1, {O_N, O_N}, "aaload"},
+{ 0x33,   -1, 1, {O_N, O_N}, "baload"},
+{ 0x34,   -1, 1, {O_N, O_N}, "caload"},
+{ 0x35,   -1, 1, {O_N, O_N}, "saload"},
+{ 0x36,   -1, 2, {O_U8, O_N}, "istore"},
+{ 0x37,   -1, 2, {O_U8, O_N}, "lstore"},
+{ 0x38,   -1, 2, {O_U8, O_N}, "fstore"},
+{ 0x39,   -1, 2, {O_U8, O_N}, "dstore"},
+{ 0x3a,   -1, 2, {O_U8, O_N}, "astore"},
+{ 0x3b,   -1, 1, {O_N, O_N}, "istore_0"},
+{ 0x3c,   -1, 1, {O_N, O_N}, "istore_1"},
+{ 0x3d,   -1, 1, {O_N, O_N}, "istore_2"},
+{ 0x3e,   -1, 1, {O_N, O_N}, "istore_3"},
+{ 0x3f,   -1, 1, {O_N, O_N}, "lstore_0"},
+{ 0x40,   -1, 1, {O_N, O_N}, "lstore_1"},
+{ 0x41,   -1, 1, {O_N, O_N}, "lstore_2"},
+{ 0x42,   -1, 1, {O_N, O_N}, "lstore_3"},
+{ 0x43,   -1, 1, {O_N, O_N}, "fstore_0"},
+{ 0x44,   -1, 1, {O_N, O_N}, "fstore_1"},
+{ 0x45,   -1, 1, {O_N, O_N}, "fstore_2"},
+{ 0x46,   -1, 1, {O_N, O_N}, "fstore_3"},
+{ 0x47,   -1, 1, {O_N, O_N}, "dstore_0"},
+{ 0x48,   -1, 1, {O_N, O_N}, "dstore_1"},
+{ 0x49,   -1, 1, {O_N, O_N}, "dstore_2"},
+{ 0x4a,   -1, 1, {O_N, O_N}, "dstore_3"},
+{ 0x4b,   -1, 1, {O_N, O_N}, "astore_0"},
+{ 0x4c,   -1, 1, {O_N, O_N}, "astore_1"},
+{ 0x4d,   -1, 1, {O_N, O_N}, "astore_2"},
+{ 0x4e,   -1, 1, {O_N, O_N}, "astore_3"},
+{ 0x4f,   -1, 1, {O_N, O_N}, "iastore"},
+{ 0x50,   -1, 1, {O_N, O_N}, "lastore"},
+{ 0x51,   -1, 1, {O_N, O_N}, "fastore"},
+{ 0x52,   -1, 1, {O_N, O_N}, "dastore"},
+{ 0x53,   -1, 1, {O_N, O_N}, "aastore"},
+{ 0x54,   -1, 1, {O_N, O_N}, "bastore"},
+{ 0x55,   -1, 1, {O_N, O_N}, "castore"},
+{ 0x56,   -1, 1, {O_N, O_N}, "sastore"},
+{ 0x57,   -1, 1, {O_N, O_N}, "pop"},
+{ 0x58,   -1, 1, {O_N, O_N}, "pop2"},
+{ 0x59,   -1, 1, {O_N, O_N}, "dup"},
+{ 0x5a,   -1, 1, {O_N, O_N}, "dup_x1"},
+{ 0x5b,   -1, 1, {O_N, O_N}, "dup_x2"},
+{ 0x5c,   -1, 1, {O_N, O_N}, "dup2"},
+{ 0x5d,   -1, 1, {O_N, O_N}, "dup2_x1"},
+{ 0x5e,   -1, 1, {O_N, O_N}, "dup2_x2"},
+{ 0x5f,   -1, 1, {O_N, O_N}, "swap"},
+{ 0x60,   -1, 1, {O_N, O_N}, "iadd"},
+{ 0x61,   -1, 1, {O_N, O_N}, "ladd"},
+{ 0x62,   -1, 1, {O_N, O_N}, "fadd"},
+{ 0x63,   -1, 1, {O_N, O_N}, "dadd"},
+{ 0x64,   -1, 1, {O_N, O_N}, "isub"},
+{ 0x65,   -1, 1, {O_N, O_N}, "lsub"},
+{ 0x66,   -1, 1, {O_N, O_N}, "fsub"},
+{ 0x67,   -1, 1, {O_N, O_N}, "dsub"},
+{ 0x68,   -1, 1, {O_N, O_N}, "imul"},
+{ 0x69,   -1, 1, {O_N, O_N}, "lmul"},
+{ 0x6a,   -1, 1, {O_N, O_N}, "fmul"},
+{ 0x6b,   -1, 1, {O_N, O_N}, "dmul"},
+{ 0x6c,   -1, 1, {O_N, O_N}, "idiv"},
+{ 0x6d,   -1, 1, {O_N, O_N}, "ldiv"},
+{ 0x6e,   -1, 1, {O_N, O_N}, "fdiv"},
+{ 0x6f,   -1, 1, {O_N, O_N}, "ddiv"},
+{ 0x70,   -1, 1, {O_N, O_N}, "irem"},
+{ 0x71,   -1, 1, {O_N, O_N}, "lrem"},
+{ 0x72,   -1, 1, {O_N, O_N}, "frem"},
+{ 0x73,   -1, 1, {O_N, O_N}, "drem"},
+{ 0x74,   -1, 1, {O_N, O_N}, "ineg"},
+{ 0x75,   -1, 1, {O_N, O_N}, "lneg"},
+{ 0x76,   -1, 1, {O_N, O_N}, "fneg"},
+{ 0x77,   -1, 1, {O_N, O_N}, "dneg"},
+{ 0x78,   -1, 1, {O_N, O_N}, "ishl"},
+{ 0x79,   -1, 1, {O_N, O_N}, "lshl"},
+{ 0x7a,   -1, 1, {O_N, O_N}, "ishr"},
+{ 0x7b,   -1, 1, {O_N, O_N}, "lshr"},
+{ 0x7c,   -1, 1, {O_N, O_N}, "iushr"},
+{ 0x7d,   -1, 1, {O_N, O_N}, "lushr"},
+{ 0x7e,   -1, 1, {O_N, O_N}, "iand"},
+{ 0x7f,   -1, 1, {O_N, O_N}, "land"},
+{ 0x80,   -1, 1, {O_N, O_N}, "ior"},
+{ 0x81,   -1, 1, {O_N, O_N}, "lor"},
+{ 0x82,   -1, 1, {O_N, O_N}, "ixor"},
+{ 0x83,   -1, 1, {O_N, O_N}, "lxor"},
+{ 0x84,   -1, 3, {O_U8, O_8}, "iinc"},
+{ 0x85,   -1, 1, {O_N, O_N}, "i2l"},
+{ 0x86,   -1, 1, {O_N, O_N}, "i2f"},
+{ 0x87,   -1, 1, {O_N, O_N}, "i2d"},
+{ 0x88,   -1, 1, {O_N, O_N}, "l2i"},
+{ 0x89,   -1, 1, {O_N, O_N}, "l2f"},
+{ 0x8a,   -1, 1, {O_N, O_N}, "l2d"},
+{ 0x8b,   -1, 1, {O_N, O_N}, "f2i"},
+{ 0x8c,   -1, 1, {O_N, O_N}, "f2l"},
+{ 0x8d,   -1, 1, {O_N, O_N}, "f2d"},
+{ 0x8e,   -1, 1, {O_N, O_N}, "d2i"},
+{ 0x8f,   -1, 1, {O_N, O_N}, "d2l"},
+{ 0x90,   -1, 1, {O_N, O_N}, "d2f"},
+{ 0x91,   -1, 1, {O_N, O_N}, "i2b"},
+{ 0x92,   -1, 1, {O_N, O_N}, "i2c"},
+{ 0x93,   -1, 1, {O_N, O_N}, "i2s"},
+{ 0x94,   -1, 1, {O_N, O_N}, "lcmp"},
+{ 0x95,   -1, 1, {O_N, O_N}, "fcmpl"},
+{ 0x96,   -1, 1, {O_N, O_N}, "fcmpg"},
+{ 0x97,   -1, 1, {O_N, O_N}, "dcmpl"},
+{ 0x98,   -1, 1, {O_N, O_N}, "dcmpg"},
+{ 0x99,   -1, 3, {O_R16, O_N}, "ifeq"},
+{ 0x9a,   -1, 3, {O_R16, O_N}, "ifne"},
+{ 0x9b,   -1, 3, {O_R16, O_N}, "iflt"},
+{ 0x9c,   -1, 3, {O_R16, O_N}, "ifge"},
+{ 0x9d,   -1, 3, {O_R16, O_N}, "ifgt"},
+{ 0x9e,   -1, 3, {O_R16, O_N}, "ifle"},
+{ 0x9f,   -1, 3, {O_R16, O_N}, "if_icmpeq"},
+{ 0xa0,   -1, 3, {O_R16, O_N}, "if_icmpne"},
+{ 0xa1,   -1, 3, {O_R16, O_N}, "if_icmplt"},
+{ 0xa2,   -1, 3, {O_R16, O_N}, "if_icmpge"},
+{ 0xa3,   -1, 3, {O_R16, O_N}, "if_icmpgt"},
+{ 0xa4,   -1, 3, {O_R16, O_N}, "if_icmple"},
+{ 0xa5,   -1, 3, {O_R16, O_N}, "if_acmpeq"},
+{ 0xa6,   -1, 3, {O_R16, O_N}, "if_acmpne"},
+{ 0xa7,   -1, 3, {O_R16, O_N}, "goto"},
+{ 0xa8,   -1, 3, {O_N, O_N}, "jsr"},
+{ 0xa9,   -1, 2, {O_N, O_N}, "ret"},
+{ 0xaa,   -1, 1, {O_N, O_N}, "tableswitch"},
+{ 0xab,   -1, 1, {O_N, O_N}, "lookupswitch"},
+{ 0xac,   -1, 1, {O_N, O_N}, "ireturn"},
+{ 0xad,   -1, 1, {O_N, O_N}, "lreturn"},
+{ 0xae,   -1, 1, {O_N, O_N}, "freturn"},
+{ 0xaf,   -1, 1, {O_N, O_N}, "dreturn"},
+{ 0xb0,   -1, 1, {O_N, O_N}, "areturn"},
+{ 0xb1,   -1, 1, {O_N, O_N}, "return"},
+{ 0xb2,   -1, 3, {O_N, O_N}, "getstatic"},
+{ 0xb3,   -1, 3, {O_N, O_N}, "putstatic"},
+{ 0xb4,   -1, 3, {O_N, O_N}, "getfield"},
+{ 0xb5,   -1, 3, {O_N, O_N}, "putfield"},
+{ 0xb6,   -1, 3, {O_N, O_N}, "invokevirtual"},
+{ 0xb7,   -1, 3, {O_N, O_N}, "invokespecial"},
+{ 0xb8,   -1, 3, {O_N, O_N}, "invokestatic"},
+{ 0xb9,   -1, 5, {O_N, O_N}, "invokeinterface"},
+{ 0xba,   -1, 1, {O_N, O_N}, "bad_ba"},
+{ 0xbb,   -1, 3, {O_N, O_N}, "new"},
+{ 0xbc,   -1, 2, {O_N, O_N}, "newarray"},
+{ 0xbd,   -1, 3, {O_N, O_N}, "anewarray"},
+{ 0xbe,   -1, 1, {O_N, O_N}, "arraylength"},
+{ 0xbf,   -1, 1, {O_N, O_N}, "athrow"},
+{ 0xc0,   -1, 3, {O_N, O_N}, "checkcast"},
+{ 0xc1,   -1, 3, {O_N, O_N}, "instanceof"},
+{ 0xc2,   -1, 1, {O_N, O_N}, "monitorenter"},
+{ 0xc3,   -1, 1, {O_N, O_N}, "monitorexit"},
+{ 0xc4,   -1, 1, {O_N, O_N}, "wide"},
+{ 0xc5,   -1, 4, {O_N, O_N}, "multianewarray"},
+{ 0xc6,   -1, 3, {O_N, O_N}, "ifnull"},
+{ 0xc7,   -1, 3, {O_N, O_N}, "ifnonnull"},
+{ 0xc8,   -1, 5, {O_N, O_N}, "goto_w"},
+{ 0xc9,   -1, 5, {O_N, O_N}, "jsr_w"},
+{ 0xca,   -1, 1, {O_N, O_N}, "breakpoint"},
+{ 0xcb,   -1, 1, {O_N, O_N}, "bytecode"},
+{ 0xcc,   -1, 1, {O_N, O_N}, "try"},
+{ 0xcd,   -1, 1, {O_N, O_N}, "endtry"},
+{ 0xce,   -1, 1, {O_N, O_N}, "catch"},
+{ 0xcf,   -1, 1, {O_N, O_N}, "var"},
+{ 0xd0,   -1, 1, {O_N, O_N}, "endvar"},
+{ 0xd1,   -1, 1, {O_N, O_N}, "bad_d1"},
+{ 0xd2,   -1, 1, {O_N, O_N}, "bad_d2"},
+{ 0xd3,   -1, 1, {O_N, O_N}, "bad_d3"},
+{ 0xd4,   -1, 1, {O_N, O_N}, "bad_d4"},
+{ 0xd5,   -1, 1, {O_N, O_N}, "bad_d5"},
+{ 0xd6,   -1, 1, {O_N, O_N}, "bad_d6"},
+{ 0xd7,   -1, 1, {O_N, O_N}, "bad_d7"},
+{ 0xd8,   -1, 1, {O_N, O_N}, "bad_d8"},
+{ 0xd9,   -1, 1, {O_N, O_N}, "bad_d9"},
+{ 0xda,   -1, 1, {O_N, O_N}, "bad_da"},
+{ 0xdb,   -1, 1, {O_N, O_N}, "bad_db"},
+{ 0xdc,   -1, 1, {O_N, O_N}, "bad_dc"},
+{ 0xdd,   -1, 1, {O_N, O_N}, "bad_dd"},
+{ 0xde,   -1, 1, {O_N, O_N}, "bad_de"},
+{ 0xdf,   -1, 1, {O_N, O_N}, "bad_df"},
+{ 0xe0,   -1, 1, {O_N, O_N}, "bad_e0"},
+{ 0xe1,   -1, 1, {O_N, O_N}, "bad_e1"},
+{ 0xe2,   -1, 1, {O_N, O_N}, "bad_e2"},
+{ 0xe3,   -1, 1, {O_N, O_N}, "bad_e3"},
+{ 0xe4,   -1, 1, {O_N, O_N}, "bad_e4"},
+{ 0xe5,   -1, 1, {O_N, O_N}, "bad_e5"},
+{ 0xe6,   -1, 1, {O_N, O_N}, "bad_e6"},
+{ 0xe7,   -1, 1, {O_N, O_N}, "bad_e7"},
+{ 0xe8,   -1, 1, {O_N, O_N}, "bad_e8"},
+{ 0xe9,   -1, 1, {O_N, O_N}, "bad_e9"},
+{ 0xea,   -1, 1, {O_N, O_N}, "bad_ea"},
+{ 0xeb,   -1, 1, {O_N, O_N}, "bad_eb"},
+{ 0xec,   -1, 1, {O_N, O_N}, "bad_ec"},
+{ 0xed,   -1, 3, {O_16, O_N}, "sethi"},
+{ 0xee,   -1, 3, {O_U8, O_8}, "load_word_index"},
+{ 0xef,   -1, 3, {O_U8, O_8}, "load_short_index"},
+{ 0xf0,   -1, 3, {O_U8, O_8}, "load_char_index"},
+{ 0xf1,   -1, 3, {O_U8, O_8}, "load_byte_index"},
+{ 0xf2,   -1, 3, {O_U8, O_8}, "load_ubyte_index"},
+{ 0xf3,   -1, 3, {O_U8, O_8}, "store_word_index"},
+{ 0xf4,   -1, 3, {O_U8, O_8}, "na_store_word_index"},
+{ 0xf5,   -1, 3, {O_U8, O_8}, "store_short_index"},
+{ 0xf6,   -1, 3, {O_U8, O_8}, "store_byte_index"},
+{ 0xf7,   -1, 1, {O_N, O_N}, "bad_f7"},
+{ 0xf8,   -1, 1, {O_N, O_N}, "bad_f8"},
+{ 0xf9,   -1, 1, {O_N, O_N}, "bad_f9"},
+{ 0xfa,   -1, 1, {O_N, O_N}, "bad_fa"},
+{ 0xfb,   -1, 1, {O_N, O_N}, "bad_fb"},
+{ 0xfc,   -1, 1, {O_N, O_N}, "bad_fc"},
+{ 0xfd,   -1, 1, {O_N, O_N}, "bad_fd"},
+{ 0xfe,   -1, 1, {O_N, O_N}, "bad_fe"},
+{ 0xff, 0x00, 2, {O_N, O_N}, "load_ubyte"},
+{ 0xff, 0x01, 2, {O_N, O_N}, "load_byte"},
+{ 0xff, 0x02, 2, {O_N, O_N}, "load_char"},
+{ 0xff, 0x03, 2, {O_N, O_N}, "load_short"},
+{ 0xff, 0x04, 2, {O_N, O_N}, "load_word"},
+{ 0xff, 0x05, 2, {O_N, O_N}, "priv_ret_from_trap"},
+{ 0xff, 0x06, 2, {O_N, O_N}, "priv_read_dcache_tag"},
+{ 0xff, 0x07, 2, {O_N, O_N}, "priv_read_dcache_data"},
+{ 0xff, 0x08, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x09, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x0a, 2, {O_N, O_N}, "load_char_oe"},
+{ 0xff, 0x0b, 2, {O_N, O_N}, "load_short_oe"},
+{ 0xff, 0x0c, 2, {O_N, O_N}, "load_word_oe"},
+{ 0xff, 0x0d, 2, {O_N, O_N}, "return0"},
+{ 0xff, 0x0e, 2, {O_N, O_N}, "priv_read_icache_tag"},
+{ 0xff, 0x0f, 2, {O_N, O_N}, "priv_read_icache_data"},
+{ 0xff, 0x10, 2, {O_N, O_N}, "ncload_ubyte"},
+{ 0xff, 0x11, 2, {O_N, O_N}, "ncload_byte"},
+{ 0xff, 0x12, 2, {O_N, O_N}, "ncload_char"},
+{ 0xff, 0x13, 2, {O_N, O_N}, "ncload_short"},
+{ 0xff, 0x14, 2, {O_N, O_N}, "ncload_word"},
+{ 0xff, 0x15, 2, {O_N, O_N}, "iucmp"},
+{ 0xff, 0x16, 2, {O_N, O_N}, "priv_powerdown"},
+{ 0xff, 0x17, 2, {O_N, O_N}, "cache_invalidate"},
+{ 0xff, 0x18, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x19, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x1a, 2, {O_N, O_N}, "ncload_char_oe"},
+{ 0xff, 0x1b, 2, {O_N, O_N}, "ncload_short_oe"},
+{ 0xff, 0x1c, 2, {O_N, O_N}, "ncload_word_oe"},
+{ 0xff, 0x1d, 2, {O_N, O_N}, "return1"},
+{ 0xff, 0x1e, 2, {O_N, O_N}, "cache_flush"},
+{ 0xff, 0x1f, 2, {O_N, O_N}, "cache_index_flush"},
+{ 0xff, 0x20, 2, {O_N, O_N}, "store_byte"},
+{ 0xff, 0x21, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x22, 2, {O_N, O_N}, "store_short"},
+{ 0xff, 0x23, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x24, 2, {O_N, O_N}, "store_word"},
+{ 0xff, 0x25, 2, {O_N, O_N}, "soft_trap"},
+{ 0xff, 0x26, 2, {O_N, O_N}, "priv_write_dcache_tag"},
+{ 0xff, 0x27, 2, {O_N, O_N}, "priv_write_dcache_data"},
+{ 0xff, 0x28, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x29, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x2a, 2, {O_N, O_N}, "store_short_oe"},
+{ 0xff, 0x2b, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x2c, 2, {O_N, O_N}, "store_word_oe"},
+{ 0xff, 0x2d, 2, {O_N, O_N}, "return2"},
+{ 0xff, 0x2e, 2, {O_N, O_N}, "priv_write_icache_tag"},
+{ 0xff, 0x2f, 2, {O_N, O_N}, "priv_write_icache_data"},
+{ 0xff, 0x30, 2, {O_N, O_N}, "ncstore_byte"},
+{ 0xff, 0x31, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x32, 2, {O_N, O_N}, "ncstore_short"},
+{ 0xff, 0x33, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x34, 2, {O_N, O_N}, "ncstore_word"},
+{ 0xff, 0x35, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x36, 2, {O_N, O_N}, "priv_reset"},
+{ 0xff, 0x37, 2, {O_N, O_N}, "get_current_class"},
+{ 0xff, 0x38, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x39, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x3a, 2, {O_N, O_N}, "ncstore_short_oe"},
+{ 0xff, 0x3b, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x3c, 2, {O_N, O_N}, "ncstore_word_oe"},
+{ 0xff, 0x3d, 2, {O_N, O_N}, "call"},
+{ 0xff, 0x3e, 2, {O_N, O_N}, "zero_line"},
+{ 0xff, 0x3f, 2, {O_N, O_N}, "priv_update_optop"},
+{ 0xff, 0x40, 2, {O_N, O_N}, "read_pc"},
+{ 0xff, 0x41, 2, {O_N, O_N}, "read_vars"},
+{ 0xff, 0x42, 2, {O_N, O_N}, "read_frame"},
+{ 0xff, 0x43, 2, {O_N, O_N}, "read_optop"},
+{ 0xff, 0x44, 2, {O_N, O_N}, "priv_read_oplim"},
+{ 0xff, 0x45, 2, {O_N, O_N}, "read_const_pool"},
+{ 0xff, 0x46, 2, {O_N, O_N}, "priv_read_psr"},
+{ 0xff, 0x47, 2, {O_N, O_N}, "priv_read_trapbase"},
+{ 0xff, 0x48, 2, {O_N, O_N}, "priv_read_lockcount0"},
+{ 0xff, 0x49, 2, {O_N, O_N}, "priv_read_lockcount1"},
+{ 0xff, 0x4a, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x4b, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x4c, 2, {O_N, O_N}, "priv_read_lockaddr0"},
+{ 0xff, 0x4d, 2, {O_N, O_N}, "priv_read_lockaddr1"},
+{ 0xff, 0x4e, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x4f, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x50, 2, {O_N, O_N}, "priv_read_userrange1"},
+{ 0xff, 0x51, 2, {O_N, O_N}, "priv_read_gc_config"},
+{ 0xff, 0x52, 2, {O_N, O_N}, "priv_read_brk1a"},
+{ 0xff, 0x53, 2, {O_N, O_N}, "priv_read_brk2a"},
+{ 0xff, 0x54, 2, {O_N, O_N}, "priv_read_brk12c"},
+{ 0xff, 0x55, 2, {O_N, O_N}, "priv_read_userrange2"},
+{ 0xff, 0x56, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x57, 2, {O_N, O_N}, "priv_read_versionid"},
+{ 0xff, 0x58, 2, {O_N, O_N}, "priv_read_hcr"},
+{ 0xff, 0x59, 2, {O_N, O_N}, "priv_read_sc_bottom"},
+{ 0xff, 0x5a, 2, {O_N, O_N}, "read_global0"},
+{ 0xff, 0x5b, 2, {O_N, O_N}, "read_global1"},
+{ 0xff, 0x5c, 2, {O_N, O_N}, "read_global2"},
+{ 0xff, 0x5d, 2, {O_N, O_N}, "read_global3"},
+{ 0xff, 0x5e, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x5f, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x60, 2, {O_N, O_N}, "write_pc"},
+{ 0xff, 0x61, 2, {O_N, O_N}, "write_vars"},
+{ 0xff, 0x62, 2, {O_N, O_N}, "write_frame"},
+{ 0xff, 0x63, 2, {O_N, O_N}, "write_optop"},
+{ 0xff, 0x64, 2, {O_N, O_N}, "priv_write_oplim"},
+{ 0xff, 0x65, 2, {O_N, O_N}, "write_const_pool"},
+{ 0xff, 0x66, 2, {O_N, O_N}, "priv_write_psr"},
+{ 0xff, 0x67, 2, {O_N, O_N}, "priv_write_trapbase"},
+{ 0xff, 0x68, 2, {O_N, O_N}, "priv_write_lockcount0"},
+{ 0xff, 0x69, 2, {O_N, O_N}, "priv_write_lockcount1"},
+{ 0xff, 0x6a, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x6b, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x6c, 2, {O_N, O_N}, "priv_write_lockaddr0"},
+{ 0xff, 0x6d, 2, {O_N, O_N}, "priv_write_lockaddr1"},
+{ 0xff, 0x6e, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x6f, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x70, 2, {O_N, O_N}, "priv_write_userrange1"},
+{ 0xff, 0x71, 2, {O_N, O_N}, "priv_write_gc_config"},
+{ 0xff, 0x72, 2, {O_N, O_N}, "priv_write_brk1a"},
+{ 0xff, 0x73, 2, {O_N, O_N}, "priv_write_brk2a"},
+{ 0xff, 0x74, 2, {O_N, O_N}, "priv_write_brk12c"},
+{ 0xff, 0x75, 2, {O_N, O_N}, "priv_write_userrange2"},
+{ 0xff, 0x76, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x77, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x78, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x79, 2, {O_N, O_N}, "priv_write_sc_bottom"},
+{ 0xff, 0x7a, 2, {O_N, O_N}, "write_global0"},
+{ 0xff, 0x7b, 2, {O_N, O_N}, "write_global1"},
+{ 0xff, 0x7c, 2, {O_N, O_N}, "write_global2"},
+{ 0xff, 0x7d, 2, {O_N, O_N}, "write_global3"},
+{ 0xff, 0x7e, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x7f, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x80, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x81, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x82, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x83, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x84, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x85, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x86, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x87, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x88, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x89, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x8a, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x8b, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x8c, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x8d, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x8e, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x8f, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x90, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x91, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x92, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x93, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x94, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x95, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x96, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x97, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x98, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x99, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x9a, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x9b, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x9c, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x9d, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x9e, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0x9f, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa0, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa1, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa2, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa3, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa4, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa5, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa6, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa7, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa8, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xa9, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xaa, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xab, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xac, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xad, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xae, 2, {O_N, O_N}, "tm_putchar"},
+{ 0xff, 0xaf, 2, {O_N, O_N}, "tm_exit"},
+{ 0xff, 0xb0, 2, {O_N, O_N}, "tm_trap"},
+{ 0xff, 0xb1, 2, {O_N, O_N}, "tm_minfo"},
+{ 0xff, 0xb2, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xb3, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xb4, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xb5, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xb6, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xb7, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xb8, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xb9, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xba, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xbb, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xbc, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xbd, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xbe, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xbf, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc0, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc1, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc2, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc3, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc4, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc5, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc6, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc7, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc8, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xc9, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xca, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xcb, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xcc, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xcd, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xce, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xcf, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd0, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd1, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd2, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd3, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd4, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd5, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd6, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd7, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd8, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xd9, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xda, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xdb, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xdc, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xdd, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xde, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xdf, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe0, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe1, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe2, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe3, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe4, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe5, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe6, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe7, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe8, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xe9, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xea, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xeb, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xec, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xed, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xee, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xef, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf0, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf1, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf2, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf3, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf4, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf5, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf6, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf7, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf8, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xf9, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xfa, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xfb, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xfc, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xfd, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xfe, 2, {O_N, O_N}, "bad"},
+{ 0xff, 0xff, 2, {O_N, O_N}, "bad"},
+};
+
+
+

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