[PATCH 01/15] opcode: Remove the copy of the binutils code from the repository

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
31 messages Options
12
Reply | Threaded
Open this post in threaded view
|

[PATCH 01/15] opcode: Remove the copy of the binutils code from the repository

Holger Freyther
From: Gwenael Casaccio <[hidden email]>

The disassemble function was never called, the opcode code is outdated,
GNU lightning gained functionality to do the disassembly. For debugging
implementing the GNU GDB JIT interface might be easier.

2013-01-21  Gwenael Casaccio  <[hidden email]>

         * main.c: Remove ENABLE_DISASSEMBLER support
         * opcode/dis-buf.c: Delete
         * opcode/disass.c: Delete
         * opcode/i386-dis.c: Delete
         * opcode/ppc-dis.c: Delete
         * opcode/ppc-opc.c: Delete
         * opcode/sparc-dis.c: Delete
         * opcode/sparc-opc.c: Delete
---
 ChangeLog          |   11 +
 Makefile.am        |   11 +-
 configure.ac       |   11 +-
 main.c             |   35 -
 opcode/Makefile.am |    8 -
 opcode/ansidecl.h  |   17 -
 opcode/bfd.h       |  185 ----
 opcode/dis-asm.h   |  175 ----
 opcode/dis-buf.c   |   70 --
 opcode/disass.c    |   65 --
 opcode/i386-dis.c  | 2031 -------------------------------------
 opcode/i386.h      |  898 -----------------
 opcode/ppc-dis.c   |  238 -----
 opcode/ppc-opc.c   | 2830 ----------------------------------------------------
 opcode/ppc.h       |  248 -----
 opcode/sparc-dis.c |  868 ----------------
 opcode/sparc-opc.c | 1757 --------------------------------
 opcode/sparc.h     |  220 ----
 opcode/sysdep.h    |    3 -
 19 files changed, 13 insertions(+), 9668 deletions(-)
 delete mode 100644 opcode/Makefile.am
 delete mode 100644 opcode/ansidecl.h
 delete mode 100644 opcode/bfd.h
 delete mode 100644 opcode/dis-asm.h
 delete mode 100644 opcode/dis-buf.c
 delete mode 100644 opcode/disass.c
 delete mode 100644 opcode/i386-dis.c
 delete mode 100644 opcode/i386.h
 delete mode 100644 opcode/ppc-dis.c
 delete mode 100644 opcode/ppc-opc.c
 delete mode 100644 opcode/ppc.h
 delete mode 100644 opcode/sparc-dis.c
 delete mode 100644 opcode/sparc-opc.c
 delete mode 100644 opcode/sparc.h
 delete mode 100644 opcode/sysdep.h

diff --git a/ChangeLog b/ChangeLog
index 5b8cf1b..2abc1c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2013-01-21  Gwenael Casaccio  <[hidden email]>
+
+ * main.c: Remove ENABLE_DISASSEMBLER support
+ * opcode/dis-buf.c: Delete
+ * opcode/disass.c: Delete
+ * opcode/i386-dis.c: Delete
+ * opcode/ppc-dis.c: Delete
+ * opcode/ppc-opc.c: Delete
+ * opcode/sparc-dis.c: Delete
+ * opcode/sparc-opc.c: Delete
+
 2013-02-14  Holger Hans Peter Freyther  <[hidden email]>
 
  * kernel/StreamOps.st: Override the >>#species selector.
diff --git a/Makefile.am b/Makefile.am
index 732a72c..4641e83 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -22,13 +22,10 @@ ACLOCAL_AMFLAGS = -I build-aux
 PACKAGE=smalltalk
 gstdatadir=$(pkgdatadir)
 
-DIST_SUBDIRS = lib-src snprintfv lightning opcode libgst \
+DIST_SUBDIRS = lib-src snprintfv lightning libgst \
  . $(ALL_PACKAGES) tests doc
 
 SUBDIRS = lib-src lightning $(subdirs)
-if ENABLE_DISASSEMBLER
-SUBDIRS += opcode
-endif
 SUBDIRS += libgst . $(BUILT_PACKAGES) doc tests
 
 # Running gst inside the build directory...
@@ -115,12 +112,6 @@ gst_LDADD = libgst/libgst.la lib-src/library.la @ICON@
 gst_DEPENDENCIES = libgst/libgst.la lib-src/library.la @ICON@
 gst_LDFLAGS = -export-dynamic $(RELOC_LDFLAGS) $(LIBFFI_EXECUTABLE_LDFLAGS)
 
-if ENABLE_DISASSEMBLER
-gst_LDADD += opcode/libdisass.la
-gst_DEPENDENCIES += opcode/libdisass.la
-AM_CPPFLAGS += -I$(top_srcdir)/opcode
-endif
-
 # The single gst-tool executable is installed with multiple names, hence
 # we use noinst here.
 noinst_PROGRAMS = gst-tool
diff --git a/configure.ac b/configure.ac
index 29bf036..798a6a8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -626,15 +626,6 @@ if test "$enable_jit" != no; then
     [Define to enable dynamic translation to machine code])
 fi
 
-AC_ARG_ENABLE(disassembler,
-[  --enable-disassembler   include a disassembler in the gst executable], ,
-enable_disassembler=no)
-AM_CONDITIONAL(ENABLE_DISASSEMBLER, test "$enable_disassembler" != no)
-if test "$enable_disassembler" != no; then
-  AC_DEFINE(ENABLE_DISASSEMBLER, 1,
-    [Define to include a disassembler in the gst executable])
-fi
-
 AC_ARG_ENABLE(dld,
 [  --disable-dld           disable loading of external modules at runtime], ,
 enable_dld=yes)
@@ -888,6 +879,6 @@ AC_CONFIG_FILES(Makefile)
 
 dnl VM makefiles
 AC_CONFIG_FILES(doc/Makefile lib-src/Makefile libgst/Makefile)
-AC_CONFIG_FILES(opcode/Makefile lightning/Makefile tests/Makefile)
+AC_CONFIG_FILES(lightning/Makefile tests/Makefile)
 
 AC_OUTPUT
diff --git a/main.c b/main.c
index 084c9ed..9c6bc60 100644
--- a/main.c
+++ b/main.c
@@ -64,11 +64,6 @@
 #include <sys/stat.h>
 #include <errno.h>
 
-#ifdef ENABLE_DISASSEMBLER
-#define TRUE_FALSE_ALREADY_DEFINED
-#include "dis-asm.h"
-#endif
-
 static const char help_text[] =
   "GNU Smalltalk usage:"
   "\n"
@@ -424,33 +419,3 @@ main(int argc, const char **argv)
   exit (0);
 }
 
-#ifdef ENABLE_DISASSEMBLER
-void disassemble(stream, from, to)
-     FILE *stream;
-     char *from, *to;
-{
-  disassemble_info info;
-  bfd_vma pc = (bfd_vma) from;
-  bfd_vma end = (bfd_vma) to;
-
-  INIT_DISASSEMBLE_INFO(info, stream, fprintf);
-  info.buffer = NULL;
-  info.buffer_vma = 0;
-  info.buffer_length = end;
-
-  while (pc < end) {
-    fprintf_vma(stream, pc);
-    putc('\t', stream);
-#ifdef __i386__
-    pc += print_insn_i386(pc, &info);
-#endif
-#ifdef __ppc__
-    pc += print_insn_big_powerpc(pc, &info);
-#endif
-#ifdef __sparc__
-    pc += print_insn_sparc(pc, &info);
-#endif
-    putc('\n', stream);
-  }
-}
-#endif
diff --git a/opcode/Makefile.am b/opcode/Makefile.am
deleted file mode 100644
index d771581..0000000
--- a/opcode/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-noinst_LTLIBRARIES = libdisass.la
-
-AM_CPPFLAGS = -I$(top_srcdir)
-
-libdisass_la_SOURCES = dis-buf.c i386-dis.c ppc-dis.c ppc-opc.c sparc-dis.c \
- sparc-opc.c disass.c
-
-noinst_HEADERS = ansidecl.h bfd.h dis-asm.h i386.h ppc.h sparc.h sysdep.h
diff --git a/opcode/ansidecl.h b/opcode/ansidecl.h
deleted file mode 100644
index f0dd187..0000000
--- a/opcode/ansidecl.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef __ANSIDECL_H_SEEN
-#define __ANSIDECL_H_SEEN
-
-#ifdef __STDC__
-#define PARAMS(x) x
-#ifndef PTR
-typedef void *PTR;
-#endif
-#else
-#define CONST const
-#define PARAMS(x) ()
-#ifndef PTR
-typedef char *PTR;
-#endif
-#endif
-
-#endif
diff --git a/opcode/bfd.h b/opcode/bfd.h
deleted file mode 100644
index 2f2669f..0000000
--- a/opcode/bfd.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Main header file for the bfd library -- portable access to object files.
-   Copyright 1990, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
-   Contributed by Cygnus Support.
-
-This file is part of BFD, the Binary File Descriptor library.
-(Simplified and modified for GNU lightning)
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* bfd.h -- The only header file required by users of the bfd library
-
-The bfd.h file is generated from bfd-in.h and various .c files; if you
-change it, your changes will probably be lost.
-
-All the prototypes and definitions following the comment "THE FOLLOWING
-IS EXTRACTED FROM THE SOURCE" are extracted from the source files for
-BFD.  If you change it, someone oneday will extract it from the source
-again, and your changes will be lost.  To save yourself from this bind,
-change the definitions in the source in the bfd directory.  Type "make
-docs" and then "make headers" in that directory, and magically this file
-will change to reflect your changes.
-
-If you don't have the tools to perform the extraction, then you are
-safe from someone on your system trampling over your header files.
-You should still maintain the equivalence between the source and this
-file though; every change you make to the .c file should be reflected
-here.  */
-
-#ifndef __BFD_H_SEEN__
-#define __BFD_H_SEEN__
-
-#include "ansidecl.h"
-
-#ifndef INLINE
-#if __GNUC__ >= 2
-#define INLINE __inline__
-#else
-#define INLINE
-#endif
-#endif
-
-/* To squelch erroneous compiler warnings ("illegal pointer
-   combination") from the SVR3 compiler, we would like to typedef
-   boolean to int (it doesn't like functions which return boolean.
-   Making sure they are never implicitly declared to return int
-   doesn't seem to help).  But this file is not configured based on
-   the host.  */
-/* General rules: functions which are boolean return true on success
-   and false on failure (unless they're a predicate).   -- bfd.doc */
-/* I'm sure this is going to break something and someone is going to
-   force me to change it. */
-/* typedef enum boolean {false, true} boolean; */
-/* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h>  -fnf */
-/* It gets worse if the host also defines a true/false enum... -sts */
-/* And even worse if your compiler has built-in boolean types... -law */
-#if defined (__GNUG__) && (__GNUC_MINOR__ > 5)
-#define TRUE_FALSE_ALREADY_DEFINED
-#endif
-#ifdef MPW
-/* Pre-emptive strike - get the file with the enum. */
-#include <Types.h>
-#define TRUE_FALSE_ALREADY_DEFINED
-#endif /* MPW */
-#ifndef TRUE_FALSE_ALREADY_DEFINED
-typedef enum bfd_boolean {false, true} boolean;
-#define BFD_TRUE_FALSE
-#else
-/* Use enum names that will appear nowhere else.  */
-typedef enum bfd_boolean {bfd_fffalse, bfd_tttrue} boolean;
-#endif
-
-/* A pointer to a position in a file.  */
-/* FIXME:  This should be using off_t from <sys/types.h>.
-   For now, try to avoid breaking stuff by not including <sys/types.h> here.
-   This will break on systems with 64-bit file offsets (e.g. 4.4BSD).
-   Probably the best long-term answer is to avoid using file_ptr AND off_t
-   in this header file, and to handle this in the BFD implementation
-   rather than in its interface.  */
-/* typedef off_t file_ptr; */
-typedef long int file_ptr;
-
-/* Represent a target address.  Also used as a generic unsigned type
-   which is guaranteed to be big enough to hold any arithmetic types
-   we need to deal with.  */
-typedef unsigned long bfd_vma;
-
-/* A generic signed type which is guaranteed to be big enough to hold any
-   arithmetic types we need to deal with.  Can be assumed to be compatible
-   with bfd_vma in the same way that signed and unsigned ints are compatible
-   (as parameters, in assignment, etc).  */
-typedef long bfd_signed_vma;
-
-typedef unsigned long symvalue;
-typedef unsigned long bfd_size_type;
-
-/* Print a bfd_vma x on stream s.  */
-#define fprintf_vma(s,x) fprintf(s, "%08lx", x)
-#define sprintf_vma(s,x) sprintf(s, "%08lx", x)
-#define printf_vma(x) fprintf_vma(stdout,x)
-
-typedef unsigned int flagword; /* 32 bits of flags */
-typedef unsigned char bfd_byte;
-
-enum bfd_architecture
-{
-  bfd_arch_unknown,    /* File arch not known */
-  bfd_arch_obscure,    /* Arch known, not one of these */
-  bfd_arch_m68k,       /* Motorola 68xxx */
-  bfd_arch_vax,        /* DEC Vax */  
-  bfd_arch_i960,       /* Intel 960 */
-     /* The order of the following is important.
-       lower number indicates a machine type that
-       only accepts a subset of the instructions
-       available to machines with higher numbers.
-       The exception is the "ca", which is
-       incompatible with all other machines except
-       "core". */
-
-#define bfd_mach_i960_core      1
-#define bfd_mach_i960_ka_sa     2
-#define bfd_mach_i960_kb_sb     3
-#define bfd_mach_i960_mc        4
-#define bfd_mach_i960_xa        5
-#define bfd_mach_i960_ca        6
-#define bfd_mach_i960_jx 7
-#define bfd_mach_i960_hx        8
-
-  bfd_arch_a29k,       /* AMD 29000 */
-  bfd_arch_sparc,      /* SPARC */
-#define bfd_mach_sparc 1
- /* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
-#define bfd_mach_sparc_v8plus 2
-#define bfd_mach_sparc_v8plusa 3  /* with ultrasparc add'ns */
-#define bfd_mach_sparc_v9 4
-#define bfd_mach_sparc_v9a 5  /* with ultrasparc add'ns */
- /* Nonzero if MACH has the v9 instruction set.  */
-#define bfd_mach_sparc_v9_p(mach) ((mach) != bfd_mach_sparc)
-  bfd_arch_mips,       /* MIPS Rxxxx */
-  bfd_arch_i386,       /* Intel 386 */
-  bfd_arch_we32k,      /* AT&T WE32xxx */
-  bfd_arch_tahoe,      /* CCI/Harris Tahoe */
-  bfd_arch_i860,       /* Intel 860 */
-  bfd_arch_romp,       /* IBM ROMP PC/RT */
-  bfd_arch_alliant,    /* Alliant */
-  bfd_arch_convex,     /* Convex */
-  bfd_arch_m88k,       /* Motorola 88xxx */
-  bfd_arch_pyramid,    /* Pyramid Technology */
-  bfd_arch_h8300,      /* Hitachi H8/300 */
-#define bfd_mach_h8300   1
-#define bfd_mach_h8300h  2
-  bfd_arch_powerpc,    /* PowerPC */
-  bfd_arch_rs6000,     /* IBM RS/6000 */
-  bfd_arch_hppa,       /* HP PA RISC */
-  bfd_arch_z8k,        /* Zilog Z8000 */
-#define bfd_mach_z8001 1
-#define bfd_mach_z8002 2
-  bfd_arch_h8500,      /* Hitachi H8/500 */
-  bfd_arch_sh,         /* Hitachi SH */
-  bfd_arch_alpha,      /* Dec Alpha */
-  bfd_arch_arm,        /* Advanced Risc Machines ARM */
-  bfd_arch_ns32k,      /* National Semiconductors ns32000 */
-  bfd_arch_w65,        /* WDC 65816 */
-  bfd_arch_last
-  };
-
-enum bfd_endian { BFD_ENDIAN_UNKNOWN };
-
-typedef struct bfd bfd;
-
-#define bfd_getb32(x) *((int *)(x))
-#define bfd_getl32(x) *((int *)(x))
-
-#endif
diff --git a/opcode/dis-asm.h b/opcode/dis-asm.h
deleted file mode 100644
index d70bd51..0000000
--- a/opcode/dis-asm.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Interface between the opcode library and its callers.
-   Written by Cygnus Support, 1993.
-
-   The opcode library (libopcodes.a) provides instruction decoders for
-   a large variety of instruction sets, callable with an identical
-   interface, for making instruction-processing programs more independent
-   of the instruction set being processed.  */
-
-#ifndef DIS_ASM_H
-#define DIS_ASM_H
-
-#include <stdio.h>
-#include "bfd.h"
-
-typedef int (*fprintf_ftype) PARAMS((FILE*, const char*, ...));
-
-enum dis_insn_type {
-  dis_noninsn, /* Not a valid instruction */
-  dis_nonbranch, /* Not a branch instruction */
-  dis_branch, /* Unconditional branch */
-  dis_condbranch, /* Conditional branch */
-  dis_jsr, /* Jump to subroutine */
-  dis_condjsr, /* Conditional jump to subroutine */
-  dis_dref, /* Data reference instruction */
-  dis_dref2 /* Two data references in instruction */
-};
-
-/* This struct is passed into the instruction decoding routine,
-   and is passed back out into each callback.  The various fields are used
-   for conveying information from your main routine into your callbacks,
-   for passing information into the instruction decoders (such as the
-   addresses of the callback functions), or for passing information
-   back from the instruction decoders to their callers.
-
-   It must be initialized before it is first passed; this can be done
-   by hand, or using one of the initialization macros below.  */
-
-typedef struct disassemble_info {
-  fprintf_ftype fprintf_func;
-  FILE *stream;
-  PTR application_data;
-
-  /* Target description.  We could replace this with a pointer to the bfd,
-     but that would require one.  There currently isn't any such requirement
-     so to avoid introducing one we record these explicitly.  */
-  /* The bfd_arch value.  */
-  enum bfd_architecture arch;
-  /* The bfd_mach value.  */
-  unsigned long mach;
-  /* Endianness (for bi-endian cpus).  Mono-endian cpus can ignore this.  */
-  enum bfd_endian endian;
-
-  /* For use by the disassembler.
-     The top 16 bits are reserved for public use (and are documented here).
-     The bottom 16 bits are for the internal use of the disassembler.  */
-  unsigned long flags;
-  PTR private_data;
-
-  /* Function used to get bytes to disassemble.  MEMADDR is the
-     address of the stuff to be disassembled, MYADDR is the address to
-     put the bytes in, and LENGTH is the number of bytes to read.
-     INFO is a pointer to this struct.
-     Returns an errno value or 0 for success.  */
-  int (*read_memory_func)
-    PARAMS ((bfd_vma memaddr, bfd_byte *myaddr, int length,
-     struct disassemble_info *info));
-
-  /* Function which should be called if we get an error that we can't
-     recover from.  STATUS is the errno value from read_memory_func and
-     MEMADDR is the address that we were trying to read.  INFO is a
-     pointer to this struct.  */
-  void (*memory_error_func)
-    PARAMS ((int status, bfd_vma memaddr, struct disassemble_info *info));
-
-  /* Function called to print ADDR.  */
-  void (*print_address_func)
-    PARAMS ((bfd_vma addr, struct disassemble_info *info));
-
-  /* These are for buffer_read_memory.  */
-  bfd_byte *buffer;
-  bfd_vma buffer_vma;
-  int buffer_length;
-
-  /* Results from instruction decoders.  Not all decoders yet support
-     this information.  This info is set each time an instruction is
-     decoded, and is only valid for the last such instruction.
-
-     To determine whether this decoder supports this information, set
-     insn_info_valid to 0, decode an instruction, then check it.  */
-
-  char insn_info_valid; /* Branch info has been set. */
-  char branch_delay_insns; /* How many sequential insn's will run before
-   a branch takes effect.  (0 = normal) */
-  char data_size; /* Size of data reference in insn, in bytes */
-  enum dis_insn_type insn_type; /* Type of instruction */
-  bfd_vma target; /* Target address of branch or dref, if known;
-   zero if unknown.  */
-  bfd_vma target2; /* Second target address for dref2 */
-
-} disassemble_info;
-
-
-/* Standard disassemblers.  Disassemble one instruction at the given
-   target address.  Return number of bytes processed.  */
-typedef int (*disassembler_ftype)
-     PARAMS((bfd_vma, disassemble_info *));
-
-extern int print_insn_big_mips PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_little_mips PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_i386 PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_m68k PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_z8001 PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_z8002 PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_h8300 PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_h8300h PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_h8500 PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_alpha PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_big_arm PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_little_arm PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_sparc PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_sparc64 PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_big_a29k PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_little_a29k PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_i960 PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_sh PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_shl PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_hppa PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_m88k PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_ns32k PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_big_powerpc PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_little_powerpc PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_rs6000 PARAMS ((bfd_vma, disassemble_info*));
-extern int print_insn_w65 PARAMS ((bfd_vma, disassemble_info*));
-
-/* Fetch the disassembler for a given BFD, if that support is available.  */
-extern disassembler_ftype disassembler PARAMS ((bfd *));
-
-
-/* This block of definitions is for particular callers who read instructions
-   into a buffer before calling the instruction decoder.  */
-
-/* Here is a function which callers may wish to use for read_memory_func.
-   It gets bytes from a buffer.  */
-extern int buffer_read_memory
-  PARAMS ((bfd_vma, bfd_byte *, int, struct disassemble_info *));
-
-/* This function goes with buffer_read_memory.
-   It prints a message using info->fprintf_func and info->stream.  */
-extern void perror_memory PARAMS ((int, bfd_vma, struct disassemble_info *));
-
-
-/* Just print the address in hex.  This is included for completeness even
-   though both GDB and objdump provide their own (to print symbolic
-   addresses).  */
-extern void generic_print_address
-  PARAMS ((bfd_vma, struct disassemble_info *));
-
-/* Macro to initialize a disassemble_info struct.  This should be called
-   by all applications creating such a struct.  */
-#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \
-  (INFO).fprintf_func = (FPRINTF_FUNC), \
-  (INFO).stream = (STREAM), \
-  (INFO).buffer = NULL, \
-  (INFO).buffer_vma = 0, \
-  (INFO).buffer_length = 0, \
-  (INFO).read_memory_func = buffer_read_memory, \
-  (INFO).memory_error_func = perror_memory, \
-  (INFO).print_address_func = generic_print_address, \
-  (INFO).arch = bfd_arch_unknown, \
-  (INFO).mach = 0, \
-  (INFO).endian = BFD_ENDIAN_UNKNOWN, \
-  (INFO).flags = 0, \
-  (INFO).insn_info_valid = 0
-
-#endif /* ! defined (DIS_ASM_H) */
diff --git a/opcode/dis-buf.c b/opcode/dis-buf.c
deleted file mode 100644
index d04ddfd..0000000
--- a/opcode/dis-buf.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Disassemble from a buffer, for GNU.
-   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include "sysdep.h"
-#include "dis-asm.h"
-#include <errno.h>
-
-/* Get LENGTH bytes from info's buffer, at target address memaddr.
-   Transfer them to myaddr.  */
-int
-buffer_read_memory (memaddr, myaddr, length, info)
-     bfd_vma memaddr;
-     bfd_byte *myaddr;
-     int length;
-     struct disassemble_info *info;
-{
-  if (memaddr < info->buffer_vma
-      || memaddr + length > info->buffer_vma + info->buffer_length)
-    /* Out of bounds.  Use EIO because GDB uses it.  */
-    return EIO;
-  memcpy (myaddr, info->buffer + (memaddr - info->buffer_vma), length);
-  return 0;
-}
-
-/* Print an error message.  We can assume that this is in response to
-   an error return from buffer_read_memory.  */
-void
-perror_memory (status, memaddr, info)
-     int status;
-     bfd_vma memaddr;
-     struct disassemble_info *info;
-{
-  if (status != EIO)
-    /* Can't happen.  */
-    (*info->fprintf_func) (info->stream, "Unknown error %d\n", status);
-  else
-    /* Actually, address between memaddr and memaddr + len was
-       out of bounds.  */
-    (*info->fprintf_func) (info->stream,
-   "Address 0x%x is out of bounds.\n", memaddr);
-}
-
-/* This could be in a separate file, to save miniscule amounts of space
-   in statically linked executables.  */
-
-/* Just print the address is hex.  This is included for completeness even
-   though both GDB and objdump provide their own (to print symbolic
-   addresses).  */
-
-void
-generic_print_address (addr, info)
-     bfd_vma addr;
-     struct disassemble_info *info;
-{
-  (*info->fprintf_func) (info->stream, "0x%x", addr);
-}
diff --git a/opcode/disass.c b/opcode/disass.c
deleted file mode 100644
index 008a9d9..0000000
--- a/opcode/disass.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/******************************** -*- C -*- ****************************
- *
- * lightning disassembling support
- *
- ***********************************************************************/
-
-
-/***********************************************************************
- *
- * Copyright 2000 Free Software Foundation, Inc.
- * Written by Paolo Bonzini.
- *
- * This file is part of GNU lightning.
- *
- * GNU lightning is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 2.1, or (at your option)
- * any later version.
- *
- * GNU lightning 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 Lesser General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with GNU lightning; see the file COPYING.LESSER; if not, write to the
- * Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- *
- ***********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "config.h"
-#include "dis-asm.h"
-
-void disassemble(stream, from, to)
-     FILE *stream;
-     char *from, *to;
-{
-  disassemble_info info;
-  bfd_vma pc = (bfd_vma) from;
-  bfd_vma end = (bfd_vma) to;
-
-  INIT_DISASSEMBLE_INFO(info, stream, fprintf);
-  info.buffer = NULL;
-  info.buffer_vma = 0;
-  info.buffer_length = end;
-
-  while (pc < end) {
-    fprintf_vma(stream, pc);
-    putc('\t', stream);
-#ifdef LIGHTNING_I386
-    pc += print_insn_i386(pc, &info);
-#endif
-#ifdef LIGHTNING_PPC
-    pc += print_insn_big_powerpc(pc, &info);
-#endif
-#ifdef LIGHTNING_SPARC
-    pc += print_insn_sparc(pc, &info);
-#endif
-    putc('\n', stream);
-  }
-}
-
diff --git a/opcode/i386-dis.c b/opcode/i386-dis.c
deleted file mode 100644
index 1c2ebea..0000000
--- a/opcode/i386-dis.c
+++ /dev/null
@@ -1,2031 +0,0 @@
-/* Print i386 instructions for GDB, the GNU debugger.
-   Copyright (C) 1988, 89, 91, 93, 94, 95, 1996 Free Software Foundation, Inc.
-
-This file is part of GDB.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/*
- * 80386 instruction printer by Pace Willisson ([hidden email])
- * July 1988
- *  modified by John Hassey ([hidden email])
- */
-
-/*
- * The main tables describing the instructions is essentially a copy
- * of the "Opcode Map" chapter (Appendix A) of the Intel 80386
- * Programmers Manual.  Usually, there is a capital letter, followed
- * by a small letter.  The capital letter tell the addressing mode,
- * and the small letter tells about the operand size.  Refer to
- * the Intel manual for details.
- */
-
-#include "dis-asm.h"
-#include "sysdep.h"
-
-#define MAXLEN 20
-
-#include <setjmp.h>
-
-struct dis_private
-{
-  /* Points to first byte not fetched.  */
-  bfd_byte *max_fetched;
-  bfd_byte the_buffer[MAXLEN];
-  bfd_vma insn_start;
-  jmp_buf bailout;
-};
-
-/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
-   to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
-   on error.  */
-#define FETCH_DATA(info, addr) \
-  ((addr) <= ((struct dis_private *)(info->private_data))->max_fetched \
-   ? 1 : fetch_data ((info), (addr)))
-
-static int
-fetch_data (info, addr)
-     struct disassemble_info *info;
-     bfd_byte *addr;
-{
-  int status;
-  struct dis_private *priv = (struct dis_private *)info->private_data;
-  bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
-
-  status = (*info->read_memory_func) (start,
-      priv->max_fetched,
-      addr - priv->max_fetched,
-      info);
-  if (status != 0)
-    {
-      (*info->memory_error_func) (status, start, info);
-      longjmp (priv->bailout, 1);
-    }
-  else
-    priv->max_fetched = addr;
-  return 1;
-}
-
-#define Eb OP_E, b_mode
-#define indirEb OP_indirE, b_mode
-#define Gb OP_G, b_mode
-#define Ev OP_E, v_mode
-#define indirEv OP_indirE, v_mode
-#define Ew OP_E, w_mode
-#define Ma OP_E, v_mode
-#define M OP_E, 0
-#define Mp OP_E, 0 /* ? */
-#define Gv OP_G, v_mode
-#define Gw OP_G, w_mode
-#define Rw OP_rm, w_mode
-#define Rd OP_rm, d_mode
-#define Ib OP_I, b_mode
-#define sIb OP_sI, b_mode /* sign extened byte */
-#define Iv OP_I, v_mode
-#define Iw OP_I, w_mode
-#define Jb OP_J, b_mode
-#define Jv OP_J, v_mode
-#define ONE OP_ONE, 0
-#define Cd OP_C, d_mode
-#define Dd OP_D, d_mode
-#define Td OP_T, d_mode
-
-#define eAX OP_REG, eAX_reg
-#define eBX OP_REG, eBX_reg
-#define eCX OP_REG, eCX_reg
-#define eDX OP_REG, eDX_reg
-#define eSP OP_REG, eSP_reg
-#define eBP OP_REG, eBP_reg
-#define eSI OP_REG, eSI_reg
-#define eDI OP_REG, eDI_reg
-#define AL OP_REG, al_reg
-#define CL OP_REG, cl_reg
-#define DL OP_REG, dl_reg
-#define BL OP_REG, bl_reg
-#define AH OP_REG, ah_reg
-#define CH OP_REG, ch_reg
-#define DH OP_REG, dh_reg
-#define BH OP_REG, bh_reg
-#define AX OP_REG, ax_reg
-#define DX OP_REG, dx_reg
-#define indirDX OP_REG, indir_dx_reg
-
-#define Sw OP_SEG, w_mode
-#define Ap OP_DIR, lptr
-#define Av OP_DIR, v_mode
-#define Ob OP_OFF, b_mode
-#define Ov OP_OFF, v_mode
-#define Xb OP_DSSI, b_mode
-#define Xv OP_DSSI, v_mode
-#define Yb OP_ESDI, b_mode
-#define Yv OP_ESDI, v_mode
-
-#define es OP_REG, es_reg
-#define ss OP_REG, ss_reg
-#define cs OP_REG, cs_reg
-#define ds OP_REG, ds_reg
-#define fs OP_REG, fs_reg
-#define gs OP_REG, gs_reg
-
-int OP_E(), OP_indirE(), OP_G(), OP_I(), OP_sI(), OP_REG();
-int OP_J(), OP_SEG();
-int OP_DIR(), OP_OFF(), OP_DSSI(), OP_ESDI(), OP_ONE(), OP_C();
-int OP_D(), OP_T(), OP_rm();
-
-static void dofloat (), putop (), append_prefix (), set_op ();
-static int get16 (), get32 ();
-
-#define b_mode 1
-#define v_mode 2
-#define w_mode 3
-#define d_mode 4
-
-#define es_reg 100
-#define cs_reg 101
-#define ss_reg 102
-#define ds_reg 103
-#define fs_reg 104
-#define gs_reg 105
-#define eAX_reg 107
-#define eCX_reg 108
-#define eDX_reg 109
-#define eBX_reg 110
-#define eSP_reg 111
-#define eBP_reg 112
-#define eSI_reg 113
-#define eDI_reg 114
-
-#define lptr 115
-
-#define al_reg 116
-#define cl_reg 117
-#define dl_reg 118
-#define bl_reg 119
-#define ah_reg 120
-#define ch_reg 121
-#define dh_reg 122
-#define bh_reg 123
-
-#define ax_reg 124
-#define cx_reg 125
-#define dx_reg 126
-#define bx_reg 127
-#define sp_reg 128
-#define bp_reg 129
-#define si_reg 130
-#define di_reg 131
-
-#define indir_dx_reg 150
-
-#define GRP1b NULL, NULL, 0
-#define GRP1S NULL, NULL, 1
-#define GRP1Ss NULL, NULL, 2
-#define GRP2b NULL, NULL, 3
-#define GRP2S NULL, NULL, 4
-#define GRP2b_one NULL, NULL, 5
-#define GRP2S_one NULL, NULL, 6
-#define GRP2b_cl NULL, NULL, 7
-#define GRP2S_cl NULL, NULL, 8
-#define GRP3b NULL, NULL, 9
-#define GRP3S NULL, NULL, 10
-#define GRP4  NULL, NULL, 11
-#define GRP5  NULL, NULL, 12
-#define GRP6  NULL, NULL, 13
-#define GRP7 NULL, NULL, 14
-#define GRP8 NULL, NULL, 15
-#define GRP9 NULL, NULL, 16
-
-#define FLOATCODE 50
-#define FLOAT NULL, NULL, FLOATCODE
-
-struct dis386 {
-  char *name;
-  int (*op1)();
-  int bytemode1;
-  int (*op2)();
-  int bytemode2;
-  int (*op3)();
-  int bytemode3;
-};
-
-struct dis386 dis386[] = {
-  /* 00 */
-  { "addb", Eb, Gb },
-  { "addS", Ev, Gv },
-  { "addb", Gb, Eb },
-  { "addS", Gv, Ev },
-  { "addb", AL, Ib },
-  { "addS", eAX, Iv },
-  { "pushl", es },
-  { "popl", es },
-  /* 08 */
-  { "orb", Eb, Gb },
-  { "orS", Ev, Gv },
-  { "orb", Gb, Eb },
-  { "orS", Gv, Ev },
-  { "orb", AL, Ib },
-  { "orS", eAX, Iv },
-  { "pushl", cs },
-  { "(bad)" }, /* 0x0f extended opcode escape */
-  /* 10 */
-  { "adcb", Eb, Gb },
-  { "adcS", Ev, Gv },
-  { "adcb", Gb, Eb },
-  { "adcS", Gv, Ev },
-  { "adcb", AL, Ib },
-  { "adcS", eAX, Iv },
-  { "pushl", ss },
-  { "popl", ss },
-  /* 18 */
-  { "sbbb", Eb, Gb },
-  { "sbbS", Ev, Gv },
-  { "sbbb", Gb, Eb },
-  { "sbbS", Gv, Ev },
-  { "sbbb", AL, Ib },
-  { "sbbS", eAX, Iv },
-  { "pushl", ds },
-  { "popl", ds },
-  /* 20 */
-  { "andb", Eb, Gb },
-  { "andS", Ev, Gv },
-  { "andb", Gb, Eb },
-  { "andS", Gv, Ev },
-  { "andb", AL, Ib },
-  { "andS", eAX, Iv },
-  { "(bad)" }, /* SEG ES prefix */
-  { "daa" },
-  /* 28 */
-  { "subb", Eb, Gb },
-  { "subS", Ev, Gv },
-  { "subb", Gb, Eb },
-  { "subS", Gv, Ev },
-  { "subb", AL, Ib },
-  { "subS", eAX, Iv },
-  { "(bad)" }, /* SEG CS prefix */
-  { "das" },
-  /* 30 */
-  { "xorb", Eb, Gb },
-  { "xorS", Ev, Gv },
-  { "xorb", Gb, Eb },
-  { "xorS", Gv, Ev },
-  { "xorb", AL, Ib },
-  { "xorS", eAX, Iv },
-  { "(bad)" }, /* SEG SS prefix */
-  { "aaa" },
-  /* 38 */
-  { "cmpb", Eb, Gb },
-  { "cmpS", Ev, Gv },
-  { "cmpb", Gb, Eb },
-  { "cmpS", Gv, Ev },
-  { "cmpb", AL, Ib },
-  { "cmpS", eAX, Iv },
-  { "(bad)" }, /* SEG DS prefix */
-  { "aas" },
-  /* 40 */
-  { "incS", eAX },
-  { "incS", eCX },
-  { "incS", eDX },
-  { "incS", eBX },
-  { "incS", eSP },
-  { "incS", eBP },
-  { "incS", eSI },
-  { "incS", eDI },
-  /* 48 */
-  { "decS", eAX },
-  { "decS", eCX },
-  { "decS", eDX },
-  { "decS", eBX },
-  { "decS", eSP },
-  { "decS", eBP },
-  { "decS", eSI },
-  { "decS", eDI },
-  /* 50 */
-  { "pushS", eAX },
-  { "pushS", eCX },
-  { "pushS", eDX },
-  { "pushS", eBX },
-  { "pushS", eSP },
-  { "pushS", eBP },
-  { "pushS", eSI },
-  { "pushS", eDI },
-  /* 58 */
-  { "popS", eAX },
-  { "popS", eCX },
-  { "popS", eDX },
-  { "popS", eBX },
-  { "popS", eSP },
-  { "popS", eBP },
-  { "popS", eSI },
-  { "popS", eDI },
-  /* 60 */
-  { "pusha" },
-  { "popa" },
-  { "boundS", Gv, Ma },
-  { "arpl", Ew, Gw },
-  { "(bad)" }, /* seg fs */
-  { "(bad)" }, /* seg gs */
-  { "(bad)" }, /* op size prefix */
-  { "(bad)" }, /* adr size prefix */
-  /* 68 */
-  { "pushS", Iv }, /* 386 book wrong */
-  { "imulS", Gv, Ev, Iv },
-  { "pushl", sIb }, /* push of byte really pushes 4 bytes */
-  { "imulS", Gv, Ev, Ib },
-  { "insb", Yb, indirDX },
-  { "insS", Yv, indirDX },
-  { "outsb", indirDX, Xb },
-  { "outsS", indirDX, Xv },
-  /* 70 */
-  { "jo", Jb },
-  { "jno", Jb },
-  { "jb", Jb },
-  { "jae", Jb },
-  { "je", Jb },
-  { "jne", Jb },
-  { "jbe", Jb },
-  { "ja", Jb },
-  /* 78 */
-  { "js", Jb },
-  { "jns", Jb },
-  { "jp", Jb },
-  { "jnp", Jb },
-  { "jl", Jb },
-  { "jnl", Jb },
-  { "jle", Jb },
-  { "jg", Jb },
-  /* 80 */
-  { GRP1b },
-  { GRP1S },
-  { "(bad)" },
-  { GRP1Ss },
-  { "testb", Eb, Gb },
-  { "testS", Ev, Gv },
-  { "xchgb", Eb, Gb },
-  { "xchgS", Ev, Gv },
-  /* 88 */
-  { "movb", Eb, Gb },
-  { "movS", Ev, Gv },
-  { "movb", Gb, Eb },
-  { "movS", Gv, Ev },
-  { "movw", Ew, Sw },
-  { "leaS", Gv, M },
-  { "movw", Sw, Ew },
-  { "popS", Ev },
-  /* 90 */
-  { "nop" },
-  { "xchgS", eCX, eAX },
-  { "xchgS", eDX, eAX },
-  { "xchgS", eBX, eAX },
-  { "xchgS", eSP, eAX },
-  { "xchgS", eBP, eAX },
-  { "xchgS", eSI, eAX },
-  { "xchgS", eDI, eAX },
-  /* 98 */
-  { "cwtl" },
-  { "cltd" },
-  { "lcall", Ap },
-  { "(bad)" }, /* fwait */
-  { "pushf" },
-  { "popf" },
-  { "sahf" },
-  { "lahf" },
-  /* a0 */
-  { "movb", AL, Ob },
-  { "movS", eAX, Ov },
-  { "movb", Ob, AL },
-  { "movS", Ov, eAX },
-  { "movsb", Yb, Xb },
-  { "movsS", Yv, Xv },
-  { "cmpsb", Yb, Xb },
-  { "cmpsS", Yv, Xv },
-  /* a8 */
-  { "testb", AL, Ib },
-  { "testS", eAX, Iv },
-  { "stosb", Yb, AL },
-  { "stosS", Yv, eAX },
-  { "lodsb", AL, Xb },
-  { "lodsS", eAX, Xv },
-  { "scasb", AL, Yb },
-  { "scasS", eAX, Yv },
-  /* b0 */
-  { "movb", AL, Ib },
-  { "movb", CL, Ib },
-  { "movb", DL, Ib },
-  { "movb", BL, Ib },
-  { "movb", AH, Ib },
-  { "movb", CH, Ib },
-  { "movb", DH, Ib },
-  { "movb", BH, Ib },
-  /* b8 */
-  { "movS", eAX, Iv },
-  { "movS", eCX, Iv },
-  { "movS", eDX, Iv },
-  { "movS", eBX, Iv },
-  { "movS", eSP, Iv },
-  { "movS", eBP, Iv },
-  { "movS", eSI, Iv },
-  { "movS", eDI, Iv },
-  /* c0 */
-  { GRP2b },
-  { GRP2S },
-  { "ret", Iw },
-  { "ret" },
-  { "lesS", Gv, Mp },
-  { "ldsS", Gv, Mp },
-  { "movb", Eb, Ib },
-  { "movS", Ev, Iv },
-  /* c8 */
-  { "enter", Iw, Ib },
-  { "leave" },
-  { "lret", Iw },
-  { "lret" },
-  { "int3" },
-  { "int", Ib },
-  { "into" },
-  { "iret" },
-  /* d0 */
-  { GRP2b_one },
-  { GRP2S_one },
-  { GRP2b_cl },
-  { GRP2S_cl },
-  { "aam", Ib },
-  { "aad", Ib },
-  { "(bad)" },
-  { "xlat" },
-  /* d8 */
-  { FLOAT },
-  { FLOAT },
-  { FLOAT },
-  { FLOAT },
-  { FLOAT },
-  { FLOAT },
-  { FLOAT },
-  { FLOAT },
-  /* e0 */
-  { "loopne", Jb },
-  { "loope", Jb },
-  { "loop", Jb },
-  { "jCcxz", Jb },
-  { "inb", AL, Ib },
-  { "inS", eAX, Ib },
-  { "outb", Ib, AL },
-  { "outS", Ib, eAX },
-  /* e8 */
-  { "call", Av },
-  { "jmp", Jv },
-  { "ljmp", Ap },
-  { "jmp", Jb },
-  { "inb", AL, indirDX },
-  { "inS", eAX, indirDX },
-  { "outb", indirDX, AL },
-  { "outS", indirDX, eAX },
-  /* f0 */
-  { "(bad)" }, /* lock prefix */
-  { "(bad)" },
-  { "(bad)" }, /* repne */
-  { "(bad)" }, /* repz */
-  { "hlt" },
-  { "cmc" },
-  { GRP3b },
-  { GRP3S },
-  /* f8 */
-  { "clc" },
-  { "stc" },
-  { "cli" },
-  { "sti" },
-  { "cld" },
-  { "std" },
-  { GRP4 },
-  { GRP5 },
-};
-
-struct dis386 dis386_twobyte[] = {
-  /* 00 */
-  { GRP6 },
-  { GRP7 },
-  { "larS", Gv, Ew },
-  { "lslS", Gv, Ew },  
-  { "(bad)" },
-  { "(bad)" },
-  { "clts" },
-  { "(bad)" },  
-  /* 08 */
-  { "invd" },
-  { "wbinvd" },
-  { "(bad)" },  { "ud2a" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 10 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 18 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 20 */
-  /* these are all backward in appendix A of the intel book */
-  { "movl", Rd, Cd },
-  { "movl", Rd, Dd },
-  { "movl", Cd, Rd },
-  { "movl", Dd, Rd },  
-  { "movl", Rd, Td },
-  { "(bad)" },
-  { "movl", Td, Rd },
-  { "(bad)" },  
-  /* 28 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 30 */
-  { "wrmsr" },  { "rdtsc" },  { "rdmsr" },  { "rdpmc" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 38 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 40 */
-  { "cmovo", Gv,Ev }, { "cmovno", Gv,Ev }, { "cmovb", Gv,Ev }, { "cmovae", Gv,Ev },
-  { "cmove", Gv,Ev }, { "cmovne", Gv,Ev }, { "cmovbe", Gv,Ev }, { "cmova", Gv,Ev },
-  /* 48 */
-  { "cmovs", Gv,Ev }, { "cmovns", Gv,Ev }, { "cmovp", Gv,Ev }, { "cmovnp", Gv,Ev },
-  { "cmovl", Gv,Ev }, { "cmovge", Gv,Ev }, { "cmovle", Gv,Ev }, { "cmovg", Gv,Ev },  
-  /* 50 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 58 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 60 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 68 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 70 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 78 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* 80 */
-  { "jo", Jv },
-  { "jno", Jv },
-  { "jb", Jv },
-  { "jae", Jv },  
-  { "je", Jv },
-  { "jne", Jv },
-  { "jbe", Jv },
-  { "ja", Jv },  
-  /* 88 */
-  { "js", Jv },
-  { "jns", Jv },
-  { "jp", Jv },
-  { "jnp", Jv },  
-  { "jl", Jv },
-  { "jge", Jv },
-  { "jle", Jv },
-  { "jg", Jv },  
-  /* 90 */
-  { "seto", Eb },
-  { "setno", Eb },
-  { "setb", Eb },
-  { "setae", Eb },
-  { "sete", Eb },
-  { "setne", Eb },
-  { "setbe", Eb },
-  { "seta", Eb },
-  /* 98 */
-  { "sets", Eb },
-  { "setns", Eb },
-  { "setp", Eb },
-  { "setnp", Eb },
-  { "setl", Eb },
-  { "setge", Eb },
-  { "setle", Eb },
-  { "setg", Eb },  
-  /* a0 */
-  { "pushl", fs },
-  { "popl", fs },
-  { "cpuid" },
-  { "btS", Ev, Gv },  
-  { "shldS", Ev, Gv, Ib },
-  { "shldS", Ev, Gv, CL },
-  { "(bad)" },
-  { "(bad)" },  
-  /* a8 */
-  { "pushl", gs },
-  { "popl", gs },
-  { "rsm" },
-  { "btsS", Ev, Gv },  
-  { "shrdS", Ev, Gv, Ib },
-  { "shrdS", Ev, Gv, CL },
-  { "(bad)" },
-  { "imulS", Gv, Ev },  
-  /* b0 */
-  { "cmpxchgb", Eb, Gb },
-  { "cmpxchgS", Ev, Gv },
-  { "lssS", Gv, Mp }, /* 386 lists only Mp */
-  { "btrS", Ev, Gv },  
-  { "lfsS", Gv, Mp }, /* 386 lists only Mp */
-  { "lgsS", Gv, Mp }, /* 386 lists only Mp */
-  { "movzbS", Gv, Eb },
-  { "movzwS", Gv, Ew },  
-  /* b8 */
-  { "ud2b" },
-  { "(bad)" },
-  { GRP8 },
-  { "btcS", Ev, Gv },  
-  { "bsfS", Gv, Ev },
-  { "bsrS", Gv, Ev },
-  { "movsbS", Gv, Eb },
-  { "movswS", Gv, Ew },  
-  /* c0 */
-  { "xaddb", Eb, Gb },
-  { "xaddS", Ev, Gv },
-  { "(bad)" },
-  { "(bad)" },  
-  { "(bad)" },
-  { "(bad)" },
-  { "(bad)" },
-  { GRP9 },  
-  /* c8 */
-  { "bswap", eAX },
-  { "bswap", eCX },
-  { "bswap", eDX },
-  { "bswap", eBX },
-  { "bswap", eSP },
-  { "bswap", eBP },
-  { "bswap", eSI },
-  { "bswap", eDI },
-  /* d0 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* d8 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* e0 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* e8 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* f0 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  /* f8 */
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
-};
-
-static const unsigned char onebyte_has_modrm[256] = {
-  1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
-  1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
-  1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
-  1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
-  1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1
-};
-
-static const unsigned char twobyte_has_modrm[256] = {
-  1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-  0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,
-  1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,
-  1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-};
-
-static char obuf[100];
-static char *obufp;
-static char scratchbuf[100];
-static unsigned char *start_codep;
-static unsigned char *codep;
-static disassemble_info *the_info;
-static int mod;
-static int rm;
-static int reg;
-static void oappend ();
-
-static char *names32[]={
-  "%eax","%ecx","%edx","%ebx", "%esp","%ebp","%esi","%edi",
-};
-static char *names16[] = {
-  "%ax","%cx","%dx","%bx","%sp","%bp","%si","%di",
-};
-static char *names8[] = {
-  "%al","%cl","%dl","%bl","%ah","%ch","%dh","%bh",
-};
-static char *names_seg[] = {
-  "%es","%cs","%ss","%ds","%fs","%gs","%?","%?",
-};
-static char *index16[] = {
-  "bx+si","bx+di","bp+si","bp+di","si","di","bp","bx"
-};
-
-struct dis386 grps[][8] = {
-  /* GRP1b */
-  {
-    { "addb", Eb, Ib },
-    { "orb", Eb, Ib },
-    { "adcb", Eb, Ib },
-    { "sbbb", Eb, Ib },
-    { "andb", Eb, Ib },
-    { "subb", Eb, Ib },
-    { "xorb", Eb, Ib },
-    { "cmpb", Eb, Ib }
-  },
-  /* GRP1S */
-  {
-    { "addS", Ev, Iv },
-    { "orS", Ev, Iv },
-    { "adcS", Ev, Iv },
-    { "sbbS", Ev, Iv },
-    { "andS", Ev, Iv },
-    { "subS", Ev, Iv },
-    { "xorS", Ev, Iv },
-    { "cmpS", Ev, Iv }
-  },
-  /* GRP1Ss */
-  {
-    { "addS", Ev, sIb },
-    { "orS", Ev, sIb },
-    { "adcS", Ev, sIb },
-    { "sbbS", Ev, sIb },
-    { "andS", Ev, sIb },
-    { "subS", Ev, sIb },
-    { "xorS", Ev, sIb },
-    { "cmpS", Ev, sIb }
-  },
-  /* GRP2b */
-  {
-    { "rolb", Eb, Ib },
-    { "rorb", Eb, Ib },
-    { "rclb", Eb, Ib },
-    { "rcrb", Eb, Ib },
-    { "shlb", Eb, Ib },
-    { "shrb", Eb, Ib },
-    { "(bad)" },
-    { "sarb", Eb, Ib },
-  },
-  /* GRP2S */
-  {
-    { "rolS", Ev, Ib },
-    { "rorS", Ev, Ib },
-    { "rclS", Ev, Ib },
-    { "rcrS", Ev, Ib },
-    { "shlS", Ev, Ib },
-    { "shrS", Ev, Ib },
-    { "(bad)" },
-    { "sarS", Ev, Ib },
-  },
-  /* GRP2b_one */
-  {
-    { "rolb", Eb },
-    { "rorb", Eb },
-    { "rclb", Eb },
-    { "rcrb", Eb },
-    { "shlb", Eb },
-    { "shrb", Eb },
-    { "(bad)" },
-    { "sarb", Eb },
-  },
-  /* GRP2S_one */
-  {
-    { "rolS", Ev },
-    { "rorS", Ev },
-    { "rclS", Ev },
-    { "rcrS", Ev },
-    { "shlS", Ev },
-    { "shrS", Ev },
-    { "(bad)" },
-    { "sarS", Ev },
-  },
-  /* GRP2b_cl */
-  {
-    { "rolb", Eb, CL },
-    { "rorb", Eb, CL },
-    { "rclb", Eb, CL },
-    { "rcrb", Eb, CL },
-    { "shlb", Eb, CL },
-    { "shrb", Eb, CL },
-    { "(bad)" },
-    { "sarb", Eb, CL },
-  },
-  /* GRP2S_cl */
-  {
-    { "rolS", Ev, CL },
-    { "rorS", Ev, CL },
-    { "rclS", Ev, CL },
-    { "rcrS", Ev, CL },
-    { "shlS", Ev, CL },
-    { "shrS", Ev, CL },
-    { "(bad)" },
-    { "sarS", Ev, CL }
-  },
-  /* GRP3b */
-  {
-    { "testb", Eb, Ib },
-    { "(bad)", Eb },
-    { "notb", Eb },
-    { "negb", Eb },
-    { "mulb", AL, Eb },
-    { "imulb", AL, Eb },
-    { "divb", AL, Eb },
-    { "idivb", AL, Eb }
-  },
-  /* GRP3S */
-  {
-    { "testS", Ev, Iv },
-    { "(bad)" },
-    { "notS", Ev },
-    { "negS", Ev },
-    { "mulS", eAX, Ev },
-    { "imulS", eAX, Ev },
-    { "divS", eAX, Ev },
-    { "idivS", eAX, Ev },
-  },
-  /* GRP4 */
-  {
-    { "incb", Eb },
-    { "decb", Eb },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-  },
-  /* GRP5 */
-  {
-    { "incS", Ev },
-    { "decS", Ev },
-    { "call", indirEv },
-    { "lcall", indirEv },
-    { "jmp", indirEv },
-    { "ljmp", indirEv },
-    { "pushS", Ev },
-    { "(bad)" },
-  },
-  /* GRP6 */
-  {
-    { "sldt", Ew },
-    { "str", Ew },
-    { "lldt", Ew },
-    { "ltr", Ew },
-    { "verr", Ew },
-    { "verw", Ew },
-    { "(bad)" },
-    { "(bad)" }
-  },
-  /* GRP7 */
-  {
-    { "sgdt", Ew },
-    { "sidt", Ew },
-    { "lgdt", Ew },
-    { "lidt", Ew },
-    { "smsw", Ew },
-    { "(bad)" },
-    { "lmsw", Ew },
-    { "invlpg", Ew },
-  },
-  /* GRP8 */
-  {
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "btS", Ev, Ib },
-    { "btsS", Ev, Ib },
-    { "btrS", Ev, Ib },
-    { "btcS", Ev, Ib },
-  },
-  /* GRP9 */
-  {
-    { "(bad)" },
-    { "cmpxchg8b", Ev },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-  }
-};
-
-#define PREFIX_REPZ 1
-#define PREFIX_REPNZ 2
-#define PREFIX_LOCK 4
-#define PREFIX_CS 8
-#define PREFIX_SS 0x10
-#define PREFIX_DS 0x20
-#define PREFIX_ES 0x40
-#define PREFIX_FS 0x80
-#define PREFIX_GS 0x100
-#define PREFIX_DATA 0x200
-#define PREFIX_ADR 0x400
-#define PREFIX_FWAIT 0x800
-
-static int prefixes;
-
-static void
-ckprefix ()
-{
-  prefixes = 0;
-  while (1)
-    {
-      FETCH_DATA (the_info, codep + 1);
-      switch (*codep)
- {
- case 0xf3:
-  prefixes |= PREFIX_REPZ;
-  break;
- case 0xf2:
-  prefixes |= PREFIX_REPNZ;
-  break;
- case 0xf0:
-  prefixes |= PREFIX_LOCK;
-  break;
- case 0x2e:
-  prefixes |= PREFIX_CS;
-  break;
- case 0x36:
-  prefixes |= PREFIX_SS;
-  break;
- case 0x3e:
-  prefixes |= PREFIX_DS;
-  break;
- case 0x26:
-  prefixes |= PREFIX_ES;
-  break;
- case 0x64:
-  prefixes |= PREFIX_FS;
-  break;
- case 0x65:
-  prefixes |= PREFIX_GS;
-  break;
- case 0x66:
-  prefixes |= PREFIX_DATA;
-  break;
- case 0x67:
-  prefixes |= PREFIX_ADR;
-  break;
- case 0x9b:
-  prefixes |= PREFIX_FWAIT;
-  break;
- default:
-  return;
- }
-      codep++;
-    }
-}
-
-static int dflag;
-static int aflag;
-
-static char op1out[100], op2out[100], op3out[100];
-static int op_address[3], op_ad, op_index[3];
-static int start_pc;
-
-
-/*
- *   On the 386's of 1988, the maximum length of an instruction is 15 bytes.
- *   (see topic "Redundant prefixes" in the "Differences from 8086"
- *   section of the "Virtual 8086 Mode" chapter.)
- * 'pc' should be the address of this instruction, it will
- *   be used to print the target address if this is a relative jump or call
- * The function returns the length of this instruction in bytes.
- */
-
-int
-print_insn_i386 (pc, info)
-     bfd_vma pc;
-     disassemble_info *info;
-{
-  struct dis386 *dp;
-  int i;
-  int enter_instruction;
-  char *first, *second, *third;
-  int needcomma;
-  unsigned char need_modrm;
-
-  struct dis_private priv;
-  bfd_byte *inbuf = priv.the_buffer;
-
-  info->private_data = (PTR) &priv;
-  priv.max_fetched = priv.the_buffer;
-  priv.insn_start = pc;
-  if (setjmp (priv.bailout) != 0)
-    /* Error return.  */
-    return -1;
-
-  obuf[0] = 0;
-  op1out[0] = 0;
-  op2out[0] = 0;
-  op3out[0] = 0;
-
-  op_index[0] = op_index[1] = op_index[2] = -1;
-
-  the_info = info;
-  start_pc = pc;
-  start_codep = inbuf;
-  codep = inbuf;
-  
-  ckprefix ();
-
-  FETCH_DATA (info, codep + 1);
-  if (*codep == 0xc8)
-    enter_instruction = 1;
-  else
-    enter_instruction = 0;
-  
-  obufp = obuf;
-  
-  if (prefixes & PREFIX_REPZ)
-    oappend ("repz ");
-  if (prefixes & PREFIX_REPNZ)
-    oappend ("repnz ");
-  if (prefixes & PREFIX_LOCK)
-    oappend ("lock ");
-  
-  if ((prefixes & PREFIX_FWAIT)
-      && ((*codep < 0xd8) || (*codep > 0xdf)))
-    {
-      /* fwait not followed by floating point instruction */
-      (*info->fprintf_func) (info->stream, "fwait");
-      return (1);
-    }
-  
-  /* these would be initialized to 0 if disassembling for 8086 or 286 */
-  dflag = 1;
-  aflag = 1;
-  
-  if (prefixes & PREFIX_DATA)
-    dflag ^= 1;
-  
-  if (prefixes & PREFIX_ADR)
-    {
-      aflag ^= 1;
-      oappend ("addr16 ");
-    }
-  
-  if (*codep == 0x0f)
-    {
-      FETCH_DATA (info, codep + 2);
-      dp = &dis386_twobyte[*++codep];
-      need_modrm = twobyte_has_modrm[*codep];
-    }
-  else
-    {
-      dp = &dis386[*codep];
-      need_modrm = onebyte_has_modrm[*codep];
-    }
-  codep++;
-
-  if (need_modrm)
-    {
-      FETCH_DATA (info, codep + 1);
-      mod = (*codep >> 6) & 3;
-      reg = (*codep >> 3) & 7;
-      rm = *codep & 7;
-    }
-
-  if (dp->name == NULL && dp->bytemode1 == FLOATCODE)
-    {
-      dofloat ();
-    }
-  else
-    {
-      if (dp->name == NULL)
- dp = &grps[dp->bytemode1][reg];
-      
-      putop (dp->name);
-      
-      obufp = op1out;
-      op_ad = 2;
-      if (dp->op1)
- (*dp->op1)(dp->bytemode1);
-      
-      obufp = op2out;
-      op_ad = 1;
-      if (dp->op2)
- (*dp->op2)(dp->bytemode2);
-      
-      obufp = op3out;
-      op_ad = 0;
-      if (dp->op3)
- (*dp->op3)(dp->bytemode3);
-    }
-  
-  obufp = obuf + strlen (obuf);
-  for (i = strlen (obuf); i < 6; i++)
-    oappend (" ");
-  oappend (" ");
-  (*info->fprintf_func) (info->stream, "%s", obuf);
-  
-  /* enter instruction is printed with operands in the
-   * same order as the intel book; everything else
-   * is printed in reverse order
-   */
-  if (enter_instruction)
-    {
-      first = op1out;
-      second = op2out;
-      third = op3out;
-      op_ad = op_index[0];
-      op_index[0] = op_index[2];
-      op_index[2] = op_ad;
-    }
-  else
-    {
-      first = op3out;
-      second = op2out;
-      third = op1out;
-    }
-  needcomma = 0;
-  if (*first)
-    {
-      if (op_index[0] != -1)
- (*info->print_address_func) (op_address[op_index[0]], info);
-      else
- (*info->fprintf_func) (info->stream, "%s", first);
-      needcomma = 1;
-    }
-  if (*second)
-    {
-      if (needcomma)
- (*info->fprintf_func) (info->stream, ",");
-      if (op_index[1] != -1)
- (*info->print_address_func) (op_address[op_index[1]], info);
-      else
- (*info->fprintf_func) (info->stream, "%s", second);
-      needcomma = 1;
-    }
-  if (*third)
-    {
-      if (needcomma)
- (*info->fprintf_func) (info->stream, ",");
-      if (op_index[2] != -1)
- (*info->print_address_func) (op_address[op_index[2]], info);
-      else
- (*info->fprintf_func) (info->stream, "%s", third);
-    }
-  return (codep - inbuf);
-}
-
-char *float_mem[] = {
-  /* d8 */
-  "fadds",
-  "fmuls",
-  "fcoms",
-  "fcomps",
-  "fsubs",
-  "fsubrs",
-  "fdivs",
-  "fdivrs",
-  /*  d9 */
-  "flds",
-  "(bad)",
-  "fsts",
-  "fstps",
-  "fldenv",
-  "fldcw",
-  "fNstenv",
-  "fNstcw",
-  /* da */
-  "fiaddl",
-  "fimull",
-  "ficoml",
-  "ficompl",
-  "fisubl",
-  "fisubrl",
-  "fidivl",
-  "fidivrl",
-  /* db */
-  "fildl",
-  "(bad)",
-  "fistl",
-  "fistpl",
-  "(bad)",
-  "fldt",
-  "(bad)",
-  "fstpt",
-  /* dc */
-  "faddl",
-  "fmull",
-  "fcoml",
-  "fcompl",
-  "fsubl",
-  "fsubrl",
-  "fdivl",
-  "fdivrl",
-  /* dd */
-  "fldl",
-  "(bad)",
-  "fstl",
-  "fstpl",
-  "frstor",
-  "(bad)",
-  "fNsave",
-  "fNstsw",
-  /* de */
-  "fiadd",
-  "fimul",
-  "ficom",
-  "ficomp",
-  "fisub",
-  "fisubr",
-  "fidiv",
-  "fidivr",
-  /* df */
-  "fild",
-  "(bad)",
-  "fist",
-  "fistp",
-  "fbld",
-  "fildll",
-  "fbstp",
-  "fistpll",
-};
-
-#define ST OP_ST, 0
-#define STi OP_STi, 0
-int OP_ST(), OP_STi();
-
-#define FGRPd9_2 NULL, NULL, 0
-#define FGRPd9_4 NULL, NULL, 1
-#define FGRPd9_5 NULL, NULL, 2
-#define FGRPd9_6 NULL, NULL, 3
-#define FGRPd9_7 NULL, NULL, 4
-#define FGRPda_5 NULL, NULL, 5
-#define FGRPdb_4 NULL, NULL, 6
-#define FGRPde_3 NULL, NULL, 7
-#define FGRPdf_4 NULL, NULL, 8
-
-struct dis386 float_reg[][8] = {
-  /* d8 */
-  {
-    { "fadd", ST, STi },
-    { "fmul", ST, STi },
-    { "fcom", STi },
-    { "fcomp", STi },
-    { "fsub", ST, STi },
-    { "fsubr", ST, STi },
-    { "fdiv", ST, STi },
-    { "fdivr", ST, STi },
-  },
-  /* d9 */
-  {
-    { "fld", STi },
-    { "fxch", STi },
-    { FGRPd9_2 },
-    { "(bad)" },
-    { FGRPd9_4 },
-    { FGRPd9_5 },
-    { FGRPd9_6 },
-    { FGRPd9_7 },
-  },
-  /* da */
-  {
-    { "fcmovb", ST, STi },
-    { "fcmove", ST, STi },
-    { "fcmovbe",ST, STi },
-    { "fcmovu", ST, STi },
-    { "(bad)" },
-    { FGRPda_5 },
-    { "(bad)" },
-    { "(bad)" },
-  },
-  /* db */
-  {
-    { "fcmovnb",ST, STi },
-    { "fcmovne",ST, STi },
-    { "fcmovnbe",ST, STi },
-    { "fcmovnu",ST, STi },
-    { FGRPdb_4 },
-    { "fucomi", ST, STi },
-    { "fcomi", ST, STi },
-    { "(bad)" },
-  },
-  /* dc */
-  {
-    { "fadd", STi, ST },
-    { "fmul", STi, ST },
-    { "(bad)" },
-    { "(bad)" },
-    { "fsub", STi, ST },
-    { "fsubr", STi, ST },
-    { "fdiv", STi, ST },
-    { "fdivr", STi, ST },
-  },
-  /* dd */
-  {
-    { "ffree", STi },
-    { "(bad)" },
-    { "fst", STi },
-    { "fstp", STi },
-    { "fucom", STi },
-    { "fucomp", STi },
-    { "(bad)" },
-    { "(bad)" },
-  },
-  /* de */
-  {
-    { "faddp", STi, ST },
-    { "fmulp", STi, ST },
-    { "(bad)" },
-    { FGRPde_3 },
-    { "fsubp", STi, ST },
-    { "fsubrp", STi, ST },
-    { "fdivp", STi, ST },
-    { "fdivrp", STi, ST },
-  },
-  /* df */
-  {
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { "(bad)" },
-    { FGRPdf_4 },
-    { "fucomip",ST, STi },
-    { "fcomip", ST, STi },
-    { "(bad)" },
-  },
-};
-
-
-char *fgrps[][8] = {
-  /* d9_2  0 */
-  {
-    "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
-  },
-
-  /* d9_4  1 */
-  {
-    "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
-  },
-
-  /* d9_5  2 */
-  {
-    "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
-  },
-
-  /* d9_6  3 */
-  {
-    "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
-  },
-
-  /* d9_7  4 */
-  {
-    "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
-  },
-
-  /* da_5  5 */
-  {
-    "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
-  },
-
-  /* db_4  6 */
-  {
-    "feni(287 only)","fdisi(287 only)","fNclex","fNinit",
-    "fNsetpm(287 only)","(bad)","(bad)","(bad)",
-  },
-
-  /* de_3  7 */
-  {
-    "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
-  },
-
-  /* df_4  8 */
-  {
-    "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
-  },
-};
-
-static void
-dofloat ()
-{
-  struct dis386 *dp;
-  unsigned char floatop;
-  
-  floatop = codep[-1];
-  
-  if (mod != 3)
-    {
-      putop (float_mem[(floatop - 0xd8) * 8 + reg]);
-      obufp = op1out;
-      OP_E (v_mode);
-      return;
-    }
-  codep++;
-  
-  dp = &float_reg[floatop - 0xd8][reg];
-  if (dp->name == NULL)
-    {
-      putop (fgrps[dp->bytemode1][rm]);
-      /* instruction fnstsw is only one with strange arg */
-      if (floatop == 0xdf
-  && FETCH_DATA (the_info, codep + 1)
-  && *codep == 0xe0)
- strcpy (op1out, "%eax");
-    }
-  else
-    {
-      putop (dp->name);
-      obufp = op1out;
-      if (dp->op1)
- (*dp->op1)(dp->bytemode1);
-      obufp = op2out;
-      if (dp->op2)
- (*dp->op2)(dp->bytemode2);
-    }
-}
-
-/* ARGSUSED */
-int
-OP_ST (ignore)
-     int ignore;
-{
-  oappend ("%st");
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_STi (ignore)
-     int ignore;
-{
-  sprintf (scratchbuf, "%%st(%d)", rm);
-  oappend (scratchbuf);
-  return (0);
-}
-
-
-/* capital letters in template are macros */
-static void
-putop (template)
-     char *template;
-{
-  char *p;
-  
-  for (p = template; *p; p++)
-    {
-      switch (*p)
- {
- default:
-  *obufp++ = *p;
-  break;
- case 'C': /* For jcxz/jecxz */
-  if (aflag)
-    *obufp++ = 'e';
-  break;
- case 'N':
-  if ((prefixes & PREFIX_FWAIT) == 0)
-    *obufp++ = 'n';
-  break;
- case 'S':
-  /* operand size flag */
-  if (dflag)
-    *obufp++ = 'l';
-  else
-    *obufp++ = 'w';
-  break;
- }
-    }
-  *obufp = 0;
-}
-
-static void
-oappend (s)
-     char *s;
-{
-  strcpy (obufp, s);
-  obufp += strlen (s);
-  *obufp = 0;
-}
-
-static void
-append_prefix ()
-{
-  if (prefixes & PREFIX_CS)
-    oappend ("%cs:");
-  if (prefixes & PREFIX_DS)
-    oappend ("%ds:");
-  if (prefixes & PREFIX_SS)
-    oappend ("%ss:");
-  if (prefixes & PREFIX_ES)
-    oappend ("%es:");
-  if (prefixes & PREFIX_FS)
-    oappend ("%fs:");
-  if (prefixes & PREFIX_GS)
-    oappend ("%gs:");
-}
-
-int
-OP_indirE (bytemode)
-     int bytemode;
-{
-  oappend ("*");
-  return OP_E (bytemode);
-}
-
-int
-OP_E (bytemode)
-     int bytemode;
-{
-  int disp;
-
-  /* skip mod/rm byte */
-  codep++;
-
-  if (mod == 3)
-    {
-      switch (bytemode)
- {
- case b_mode:
-  oappend (names8[rm]);
-  break;
- case w_mode:
-  oappend (names16[rm]);
-  break;
- case v_mode:
-  if (dflag)
-    oappend (names32[rm]);
-  else
-    oappend (names16[rm]);
-  break;
- default:
-  oappend ("<bad dis table>");
-  break;
- }
-      return 0;
-    }
-
-  disp = 0;
-  append_prefix ();
-
-  if (aflag) /* 32 bit address mode */
-    {
-      int havesib;
-      int havebase;
-      int base;
-      int index;
-      int scale;
-
-      havesib = 0;
-      havebase = 1;
-      base = rm;
-
-      if (base == 4)
- {
-  havesib = 1;
-  FETCH_DATA (the_info, codep + 1);
-  scale = (*codep >> 6) & 3;
-  index = (*codep >> 3) & 7;
-  base = *codep & 7;
-  codep++;
- }
-
-      switch (mod)
- {
- case 0:
-  if (base == 5)
-    {
-      havebase = 0;
-      disp = get32 ();
-    }
-  break;
- case 1:
-  FETCH_DATA (the_info, codep + 1);
-  disp = *(char *)codep++;
-  break;
- case 2:
-  disp = get32 ();
-  break;
- }
-
-      if (mod != 0 || base == 5)
- {
-  sprintf (scratchbuf, "0x%x", disp);
-  oappend (scratchbuf);
- }
-
-      if (havebase || (havesib && (index != 4 || scale != 0)))
- {
-  oappend ("(");
-  if (havebase)
-    oappend (names32[base]);
-  if (havesib)
-    {
-      if (index != 4)
- {
-  sprintf (scratchbuf, ",%s", names32[index]);
-  oappend (scratchbuf);
- }
-      sprintf (scratchbuf, ",%d", 1 << scale);
-      oappend (scratchbuf);
-    }
-  oappend (")");
- }
-    }
-  else
-    { /* 16 bit address mode */
-      switch (mod)
- {
- case 0:
-  if (rm == 6)
-    disp = (short) get16 ();
-  break;
- case 1:
-  FETCH_DATA (the_info, codep + 1);
-  disp = *(char *)codep++;
-  break;
- case 2:
-  disp = (short) get16 ();
-  break;
- }
-
-      if (mod != 0 || rm == 6)
- {
-  sprintf (scratchbuf, "0x%x", disp);
-  oappend (scratchbuf);
- }
-
-      if (mod != 0 || rm != 6)
- {
-  oappend ("(");
-  oappend (index16[rm]);
-  oappend (")");
- }
-    }
-  return 0;
-}
-
-int
-OP_G (bytemode)
-     int bytemode;
-{
-  switch (bytemode)
-    {
-    case b_mode:
-      oappend (names8[reg]);
-      break;
-    case w_mode:
-      oappend (names16[reg]);
-      break;
-    case d_mode:
-      oappend (names32[reg]);
-      break;
-    case v_mode:
-      if (dflag)
- oappend (names32[reg]);
-      else
- oappend (names16[reg]);
-      break;
-    default:
-      oappend ("<internal disassembler error>");
-      break;
-    }
-  return (0);
-}
-
-static int
-get32 ()
-{
-  int x = 0;
-
-  FETCH_DATA (the_info, codep + 4);
-  x = *codep++ & 0xff;
-  x |= (*codep++ & 0xff) << 8;
-  x |= (*codep++ & 0xff) << 16;
-  x |= (*codep++ & 0xff) << 24;
-  return (x);
-}
-
-static int
-get16 ()
-{
-  int x = 0;
-
-  FETCH_DATA (the_info, codep + 2);
-  x = *codep++ & 0xff;
-  x |= (*codep++ & 0xff) << 8;
-  return (x);
-}
-
-static void
-set_op (op)
-     int op;
-{
-  op_index[op_ad] = op_ad;
-  op_address[op_ad] = op;
-}
-
-int
-OP_REG (code)
-     int code;
-{
-  char *s;
-  
-  switch (code)
-    {
-    case indir_dx_reg: s = "(%dx)"; break;
- case ax_reg: case cx_reg: case dx_reg: case bx_reg:
- case sp_reg: case bp_reg: case si_reg: case di_reg:
- s = names16[code - ax_reg];
- break;
- case es_reg: case ss_reg: case cs_reg:
- case ds_reg: case fs_reg: case gs_reg:
- s = names_seg[code - es_reg];
- break;
- case al_reg: case ah_reg: case cl_reg: case ch_reg:
- case dl_reg: case dh_reg: case bl_reg: case bh_reg:
- s = names8[code - al_reg];
- break;
- case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
- case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
-      if (dflag)
- s = names32[code - eAX_reg];
-      else
- s = names16[code - eAX_reg];
-      break;
-    default:
-      s = "<internal disassembler error>";
-      break;
-    }
-  oappend (s);
-  return (0);
-}
-
-int
-OP_I (bytemode)
-     int bytemode;
-{
-  int op;
-  
-  switch (bytemode)
-    {
-    case b_mode:
-      FETCH_DATA (the_info, codep + 1);
-      op = *codep++ & 0xff;
-      break;
-    case v_mode:
-      if (dflag)
- op = get32 ();
-      else
- op = get16 ();
-      break;
-    case w_mode:
-      op = get16 ();
-      break;
-    default:
-      oappend ("<internal disassembler error>");
-      return (0);
-    }
-  sprintf (scratchbuf, "$0x%x", op);
-  oappend (scratchbuf);
-  return (0);
-}
-
-int
-OP_sI (bytemode)
-     int bytemode;
-{
-  int op;
-  
-  switch (bytemode)
-    {
-    case b_mode:
-      FETCH_DATA (the_info, codep + 1);
-      op = *(char *)codep++;
-      break;
-    case v_mode:
-      if (dflag)
- op = get32 ();
-      else
- op = (short)get16();
-      break;
-    case w_mode:
-      op = (short)get16 ();
-      break;
-    default:
-      oappend ("<internal disassembler error>");
-      return (0);
-    }
-  sprintf (scratchbuf, "$0x%x", op);
-  oappend (scratchbuf);
-  return (0);
-}
-
-int
-OP_J (bytemode)
-     int bytemode;
-{
-  int disp;
-  int mask = -1;
-  
-  switch (bytemode)
-    {
-    case b_mode:
-      FETCH_DATA (the_info, codep + 1);
-      disp = *(char *)codep++;
-      break;
-    case v_mode:
-      if (dflag)
- disp = get32 ();
-      else
- {
-  disp = (short)get16 ();
-  /* for some reason, a data16 prefix on a jump instruction
-     means that the pc is masked to 16 bits after the
-     displacement is added!  */
-  mask = 0xffff;
- }
-      break;
-    default:
-      oappend ("<internal disassembler error>");
-      return (0);
-    }
-  disp = (start_pc + codep - start_codep + disp) & mask;
-  set_op (disp);
-  sprintf (scratchbuf, "0x%x", disp);
-  oappend (scratchbuf);
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_SEG (dummy)
-     int dummy;
-{
-  static char *sreg[] = {
-    "%es","%cs","%ss","%ds","%fs","%gs","%?","%?",
-  };
-
-  oappend (sreg[reg]);
-  return (0);
-}
-
-int
-OP_DIR (size)
-     int size;
-{
-  int seg, offset;
-  
-  switch (size)
-    {
-    case lptr:
-      if (aflag)
- {
-  offset = get32 ();
-  seg = get16 ();
- }
-      else
- {
-  offset = get16 ();
-  seg = get16 ();
- }
-      sprintf (scratchbuf, "0x%x,0x%x", seg, offset);
-      oappend (scratchbuf);
-      break;
-    case v_mode:
-      if (aflag)
- offset = get32 ();
-      else
- offset = (short)get16 ();
-      
-      offset = start_pc + codep - start_codep + offset;
-      set_op (offset);
-      sprintf (scratchbuf, "0x%x", offset);
-      oappend (scratchbuf);
-      break;
-    default:
-      oappend ("<internal disassembler error>");
-      break;
-    }
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_OFF (bytemode)
-     int bytemode;
-{
-  int off;
-  
-  if (aflag)
-    off = get32 ();
-  else
-    off = get16 ();
-  
-  sprintf (scratchbuf, "0x%x", off);
-  oappend (scratchbuf);
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_ESDI (dummy)
-    int dummy;
-{
-  oappend ("%es:(");
-  oappend (aflag ? "%edi" : "%di");
-  oappend (")");
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_DSSI (dummy)
-    int dummy;
-{
-  oappend ("%ds:(");
-  oappend (aflag ? "%esi" : "%si");
-  oappend (")");
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_ONE (dummy)
-    int dummy;
-{
-  oappend ("1");
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_C (dummy)
-    int dummy;
-{
-  codep++; /* skip mod/rm */
-  sprintf (scratchbuf, "%%cr%d", reg);
-  oappend (scratchbuf);
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_D (dummy)
-    int dummy;
-{
-  codep++; /* skip mod/rm */
-  sprintf (scratchbuf, "%%db%d", reg);
-  oappend (scratchbuf);
-  return (0);
-}
-
-/* ARGSUSED */
-int
-OP_T (dummy)
-     int dummy;
-{
-  codep++; /* skip mod/rm */
-  sprintf (scratchbuf, "%%tr%d", reg);
-  oappend (scratchbuf);
-  return (0);
-}
-
-int
-OP_rm (bytemode)
-     int bytemode;
-{
-  switch (bytemode)
-    {
-    case d_mode:
-      oappend (names32[rm]);
-      break;
-    case w_mode:
-      oappend (names16[rm]);
-      break;
-    }
-  return (0);
-}
diff --git a/opcode/i386.h b/opcode/i386.h
deleted file mode 100644
index fe6211b..0000000
--- a/opcode/i386.h
+++ /dev/null
@@ -1,898 +0,0 @@
-/* i386-opcode.h -- Intel 80386 opcode table
-   Copyright 1989, 1991, 1992, 1995 Free Software Foundation.
-
-This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-static const template i386_optab[] = {
-
-#define _ None
-/* move instructions */
-#define MOV_AX_DISP32 0xa0
-{ "mov", 2, 0xa0, _, DW|NoModrm, { Disp32, Acc, 0 } },
-{ "mov", 2, 0x88, _, DW|Modrm, { Reg, Reg|Mem, 0 } },
-{ "mov", 2, 0xb0, _, ShortFormW, { Imm, Reg, 0 } },
-{ "mov", 2, 0xc6, _,  W|Modrm,  { Imm, Reg|Mem, 0 } },
-{ "mov", 2, 0x8c, _, D|Modrm,  { SReg3|SReg2, Reg16|Mem, 0 } },
-/* move to/from control debug registers */
-{ "mov", 2, 0x0f20, _, D|Modrm, { Control, Reg32, 0} },
-{ "mov", 2, 0x0f21, _, D|Modrm, { Debug, Reg32, 0} },
-{ "mov", 2, 0x0f24, _, D|Modrm, { Test, Reg32, 0} },
-
-/* move with sign extend */
-/* "movsbl" & "movsbw" must not be unified into "movsb" to avoid
-   conflict with the "movs" string move instruction.  Thus,
-   {"movsb", 2, 0x0fbe, _, ReverseRegRegmem|Modrm, { Reg8|Mem,  Reg16|Reg32, 0} },
-   is not kosher; we must seperate the two instructions. */
-{"movsbl", 2, 0x0fbe, _, ReverseRegRegmem|Modrm|Data32, { Reg8|Mem,  Reg32, 0} },
-{"movsbw", 2, 0x0fbe, _, ReverseRegRegmem|Modrm|Data16, { Reg8|Mem,  Reg16, 0} },
-{"movswl", 2, 0x0fbf, _, ReverseRegRegmem|Modrm, { Reg16|Mem, Reg32, 0} },
-
-/* move with zero extend */
-{"movzb", 2, 0x0fb6, _, ReverseRegRegmem|Modrm, { Reg8|Mem, Reg16|Reg32, 0} },
-{"movzwl", 2, 0x0fb7, _, ReverseRegRegmem|Modrm, { Reg16|Mem, Reg32, 0} },
-
-/* push instructions */
-{"push", 1, 0x50, _, ShortForm, { WordReg,0,0 } },
-{"push", 1, 0xff, 0x6,  Modrm, { WordReg|WordMem, 0, 0 } },
-{"push", 1, 0x6a, _, NoModrm, { Imm8S, 0, 0} },
-{"push", 1, 0x68, _, NoModrm, { Imm16|Imm32, 0, 0} },
-{"push", 1, 0x06, _,  Seg2ShortForm, { SReg2,0,0 } },
-{"push", 1, 0x0fa0, _, Seg3ShortForm, { SReg3,0,0 } },
-/* push all */
-{"pusha", 0, 0x60, _, NoModrm, { 0, 0, 0 } },
-
-/* pop instructions */
-{"pop", 1, 0x58, _, ShortForm, { WordReg,0,0 } },
-{"pop", 1, 0x8f, 0x0,  Modrm, { WordReg|WordMem, 0, 0 } },
-#define POP_SEG_SHORT 0x7
-{"pop", 1, 0x07, _,  Seg2ShortForm, { SReg2,0,0 } },
-{"pop", 1, 0x0fa1, _, Seg3ShortForm, { SReg3,0,0 } },
-/* pop all */
-{"popa", 0, 0x61, _, NoModrm, { 0, 0, 0 } },
-
-/* xchg exchange instructions
-   xchg commutes:  we allow both operand orders */
-{"xchg", 2, 0x90, _, ShortForm, { WordReg, Acc, 0 } },
-{"xchg", 2, 0x90, _, ShortForm, { Acc, WordReg, 0 } },
-{"xchg", 2, 0x86, _, W|Modrm, { Reg, Reg|Mem, 0 } },
-{"xchg", 2, 0x86, _, W|Modrm, { Reg|Mem, Reg, 0 } },
-
-/* in/out from ports */
-{"in", 2, 0xe4, _, W|NoModrm, { Imm8, Acc, 0 } },
-{"in", 2, 0xec, _, W|NoModrm, { InOutPortReg, Acc, 0 } },
-{"in", 1, 0xe4, _, W|NoModrm, { Imm8, 0, 0 } },
-{"in", 1, 0xec, _, W|NoModrm, { InOutPortReg, 0, 0 } },
-{"out", 2, 0xe6, _, W|NoModrm, { Acc, Imm8, 0 } },
-{"out", 2, 0xee, _, W|NoModrm, { Acc, InOutPortReg, 0 } },
-{"out", 1, 0xe6, _, W|NoModrm, { Imm8, 0, 0 } },
-{"out", 1, 0xee, _, W|NoModrm, { InOutPortReg, 0, 0 } },
-
-/* load effective address */
-{"lea", 2, 0x8d, _, Modrm, { WordMem, WordReg, 0 } },
-
-/* load segment registers from memory */
-{"lds", 2, 0xc5, _, Modrm, { Mem, Reg32, 0} },
-{"les", 2, 0xc4, _, Modrm, { Mem, Reg32, 0} },
-{"lfs", 2, 0x0fb4, _, Modrm, { Mem, Reg32, 0} },
-{"lgs", 2, 0x0fb5, _, Modrm, { Mem, Reg32, 0} },
-{"lss", 2, 0x0fb2, _, Modrm, { Mem, Reg32, 0} },
-
-/* flags register instructions */
-{"clc", 0, 0xf8, _, NoModrm, { 0, 0, 0} },
-{"cld", 0, 0xfc, _, NoModrm, { 0, 0, 0} },
-{"cli", 0, 0xfa, _, NoModrm, { 0, 0, 0} },
-{"clts", 0, 0x0f06, _, NoModrm, { 0, 0, 0} },
-{"cmc", 0, 0xf5, _, NoModrm, { 0, 0, 0} },
-{"lahf", 0, 0x9f, _, NoModrm, { 0, 0, 0} },
-{"sahf", 0, 0x9e, _, NoModrm, { 0, 0, 0} },
-{"pushfl", 0, 0x9c, _, NoModrm|Data32, { 0, 0, 0} },
-{"popfl", 0, 0x9d, _, NoModrm|Data32, { 0, 0, 0} },
-{"pushfw", 0, 0x9c, _, NoModrm|Data16, { 0, 0, 0} },
-{"popfw", 0, 0x9d, _, NoModrm|Data16, { 0, 0, 0} },
-{"pushf", 0, 0x9c, _, NoModrm, { 0, 0, 0} },
-{"popf", 0, 0x9d, _, NoModrm, { 0, 0, 0} },
-{"stc", 0, 0xf9, _, NoModrm, { 0, 0, 0} },
-{"std", 0, 0xfd, _, NoModrm, { 0, 0, 0} },
-{"sti", 0, 0xfb, _, NoModrm, { 0, 0, 0} },
-
-{"add", 2, 0x0,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
-{"add", 2, 0x83, 0,  Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"add", 2, 0x4,  _,  W|NoModrm, { Imm,  Acc,    0} },
-{"add", 2, 0x80, 0, W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"inc", 1, 0x40, _, ShortForm, { WordReg, 0, 0} },
-{"inc", 1, 0xfe, 0, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"sub", 2, 0x28,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
-{"sub", 2, 0x83, 5,  Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"sub", 2, 0x2c,  _,  W|NoModrm, { Imm,  Acc,    0} },
-{"sub", 2, 0x80, 5,  W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"dec", 1, 0x48, _, ShortForm, { WordReg, 0, 0} },
-{"dec", 1, 0xfe, 1, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"sbb", 2, 0x18,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
-{"sbb", 2, 0x83, 3,  Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"sbb", 2, 0x1c,  _,  W|NoModrm, { Imm,  Acc,    0} },
-{"sbb", 2, 0x80, 3,  W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"cmp", 2, 0x38,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
-{"cmp", 2, 0x83, 7,  Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"cmp", 2, 0x3c,  _,  W|NoModrm, { Imm,  Acc,    0} },
-{"cmp", 2, 0x80, 7,  W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"test", 2, 0x84, _, W|Modrm, { Reg|Mem, Reg, 0} },
-{"test", 2, 0x84, _, W|Modrm, { Reg, Reg|Mem, 0} },
-{"test", 2, 0xa8, _, W|NoModrm, { Imm, Acc, 0} },
-{"test", 2, 0xf6, 0, W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"and", 2, 0x20,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
-{"and", 2, 0x83, 4,  Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"and", 2, 0x24,  _,  W|NoModrm, { Imm,  Acc,    0} },
-{"and", 2, 0x80, 4,  W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"or", 2, 0x08,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
-{"or", 2, 0x83, 1,  Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"or", 2, 0x0c,  _,  W|NoModrm, { Imm,  Acc,    0} },
-{"or", 2, 0x80, 1,  W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"xor", 2, 0x30,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
-{"xor", 2, 0x83, 6,  Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"xor", 2, 0x34,  _,  W|NoModrm, { Imm,  Acc,    0} },
-{"xor", 2, 0x80, 6,  W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"adc", 2, 0x10,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
-{"adc", 2, 0x83, 2,  Modrm, { Imm8S, WordReg|WordMem, 0} },
-{"adc", 2, 0x14,  _,  W|NoModrm, { Imm,  Acc,    0} },
-{"adc", 2, 0x80, 2,  W|Modrm, { Imm, Reg|Mem, 0} },
-
-{"neg", 1, 0xf6, 3, W|Modrm, { Reg|Mem, 0, 0} },
-{"not", 1, 0xf6, 2, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"aaa", 0, 0x37, _, NoModrm, { 0, 0, 0} },
-{"aas", 0, 0x3f, _, NoModrm, { 0, 0, 0} },
-{"daa", 0, 0x27, _, NoModrm, { 0, 0, 0} },
-{"das", 0, 0x2f, _, NoModrm, { 0, 0, 0} },
-{"aad", 0, 0xd50a, _, NoModrm, { 0, 0, 0} },
-{"aam", 0, 0xd40a, _, NoModrm, { 0, 0, 0} },
-
-/* conversion insns */
-/* conversion:  intel naming */
-{"cbw", 0, 0x98, _, NoModrm|Data16, { 0, 0, 0} },
-{"cwd", 0, 0x99, _, NoModrm|Data16, { 0, 0, 0} },
-{"cwde", 0, 0x98, _, NoModrm|Data32, { 0, 0, 0} },
-{"cdq", 0, 0x99, _, NoModrm|Data32, { 0, 0, 0} },
-/*  att naming */
-{"cbtw", 0, 0x98, _, NoModrm|Data16, { 0, 0, 0} },
-{"cwtl", 0, 0x98, _, NoModrm|Data32, { 0, 0, 0} },
-{"cwtd", 0, 0x99, _, NoModrm|Data16, { 0, 0, 0} },
-{"cltd", 0, 0x99, _, NoModrm|Data32, { 0, 0, 0} },
-
-/* Warning! the mul/imul (opcode 0xf6) must only have 1 operand!  They are
-   expanding 64-bit multiplies, and *cannot* be selected to accomplish
-   'imul %ebx, %eax' (opcode 0x0faf must be used in this case)
-   These multiplies can only be selected with single operand forms. */
-{"mul",  1, 0xf6, 4, W|Modrm, { Reg|Mem, 0, 0} },
-{"imul", 1, 0xf6, 5, W|Modrm, { Reg|Mem, 0, 0} },
-
-
-
-
-/* imulKludge here is needed to reverse the i.rm.reg & i.rm.regmem fields.
-   These instructions are exceptions:  'imul $2, %eax, %ecx' would put
-   '%eax' in the reg field and '%ecx' in the regmem field if we did not
-   switch them. */
-{"imul", 2, 0x0faf, _, Modrm|ReverseRegRegmem, { WordReg|Mem, WordReg, 0} },
-{"imul", 3, 0x6b, _, Modrm|ReverseRegRegmem, { Imm8S, WordReg|Mem, WordReg} },
-{"imul", 3, 0x69, _, Modrm|ReverseRegRegmem, { Imm16|Imm32, WordReg|Mem, WordReg} },
-/*
-  imul with 2 operands mimicks imul with 3 by puting register both
-  in i.rm.reg & i.rm.regmem fields
-*/
-{"imul", 2, 0x6b, _, Modrm|imulKludge, { Imm8S, WordReg, 0} },
-{"imul", 2, 0x69, _, Modrm|imulKludge, { Imm16|Imm32, WordReg, 0} },
-{"div", 1, 0xf6, 6, W|Modrm, { Reg|Mem, 0, 0} },
-{"div", 2, 0xf6, 6, W|Modrm, { Reg|Mem, Acc, 0} },
-{"idiv", 1, 0xf6, 7, W|Modrm, { Reg|Mem, 0, 0} },
-{"idiv", 2, 0xf6, 7, W|Modrm, { Reg|Mem, Acc, 0} },
-
-{"rol", 2, 0xd0, 0, W|Modrm, { Imm1, Reg|Mem, 0} },
-{"rol", 2, 0xc0, 0, W|Modrm, { Imm8, Reg|Mem, 0} },
-{"rol", 2, 0xd2, 0, W|Modrm, { ShiftCount, Reg|Mem, 0} },
-{"rol", 1, 0xd0, 0, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"ror", 2, 0xd0, 1, W|Modrm, { Imm1, Reg|Mem, 0} },
-{"ror", 2, 0xc0, 1, W|Modrm, { Imm8, Reg|Mem, 0} },
-{"ror", 2, 0xd2, 1, W|Modrm, { ShiftCount, Reg|Mem, 0} },
-{"ror", 1, 0xd0, 1, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"rcl", 2, 0xd0, 2, W|Modrm, { Imm1, Reg|Mem, 0} },
-{"rcl", 2, 0xc0, 2, W|Modrm, { Imm8, Reg|Mem, 0} },
-{"rcl", 2, 0xd2, 2, W|Modrm, { ShiftCount, Reg|Mem, 0} },
-{"rcl", 1, 0xd0, 2, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"rcr", 2, 0xd0, 3, W|Modrm, { Imm1, Reg|Mem, 0} },
-{"rcr", 2, 0xc0, 3, W|Modrm, { Imm8, Reg|Mem, 0} },
-{"rcr", 2, 0xd2, 3, W|Modrm, { ShiftCount, Reg|Mem, 0} },
-{"rcr", 1, 0xd0, 3, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"sal", 2, 0xd0, 4, W|Modrm, { Imm1, Reg|Mem, 0} },
-{"sal", 2, 0xc0, 4, W|Modrm, { Imm8, Reg|Mem, 0} },
-{"sal", 2, 0xd2, 4, W|Modrm, { ShiftCount, Reg|Mem, 0} },
-{"sal", 1, 0xd0, 4, W|Modrm, { Reg|Mem, 0, 0} },
-{"shl", 2, 0xd0, 4, W|Modrm, { Imm1, Reg|Mem, 0} },
-{"shl", 2, 0xc0, 4, W|Modrm, { Imm8, Reg|Mem, 0} },
-{"shl", 2, 0xd2, 4, W|Modrm, { ShiftCount, Reg|Mem, 0} },
-{"shl", 1, 0xd0, 4, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"shld", 3, 0x0fa4, _, Modrm, { Imm8, WordReg, WordReg|Mem} },
-{"shld", 3, 0x0fa5, _, Modrm, { ShiftCount, WordReg, WordReg|Mem} },
-{"shld", 2, 0x0fa5, _, Modrm, { WordReg, WordReg|Mem, 0} },
-
-{"shr", 2, 0xd0, 5, W|Modrm, { Imm1, Reg|Mem, 0} },
-{"shr", 2, 0xc0, 5, W|Modrm, { Imm8, Reg|Mem, 0} },
-{"shr", 2, 0xd2, 5, W|Modrm, { ShiftCount, Reg|Mem, 0} },
-{"shr", 1, 0xd0, 5, W|Modrm, { Reg|Mem, 0, 0} },
-
-{"shrd", 3, 0x0fac, _, Modrm, { Imm8, WordReg, WordReg|Mem} },
-{"shrd", 3, 0x0fad, _, Modrm, { ShiftCount, WordReg, WordReg|Mem} },
-{"shrd", 2, 0x0fad, _, Modrm, { WordReg, WordReg|Mem, 0} },
-
-{"sar", 2, 0xd0, 7, W|Modrm, { Imm1, Reg|Mem, 0} },
-{"sar", 2, 0xc0, 7, W|Modrm, { Imm8, Reg|Mem, 0} },
-{"sar", 2, 0xd2, 7, W|Modrm, { ShiftCount, Reg|Mem, 0} },
-{"sar", 1, 0xd0, 7, W|Modrm, { Reg|Mem, 0, 0} },
-
-/* control transfer instructions */
-#define CALL_PC_RELATIVE 0xe8
-{"call", 1, 0xe8, _, JumpDword, { Disp32, 0, 0} },
-{"call", 1, 0xff, 2, Modrm|Data32, { Reg|Mem|JumpAbsolute, 0, 0} },
-{"callw", 1, 0xff, 2, Modrm|Data16, { Reg|Mem|JumpAbsolute, 0, 0} },
-#define CALL_FAR_IMMEDIATE 0x9a
-{"lcall", 2, 0x9a, _, JumpInterSegment, { Imm16, Abs32|Imm32, 0} },
-{"lcall", 1, 0xff, 3, Modrm|Data32, { Mem, 0, 0} },
-{"lcallw", 1, 0xff, 3, Modrm|Data16, { Mem, 0, 0} },
-
-#define JUMP_PC_RELATIVE 0xeb
-{"jmp", 1, 0xeb, _, Jump, { Disp, 0, 0} },
-{"jmp", 1, 0xff, 4, Modrm, { Reg32|Mem|JumpAbsolute, 0, 0} },
-#define JUMP_FAR_IMMEDIATE 0xea
-{"ljmp", 2, 0xea, _, JumpInterSegment, { Imm16, Imm32, 0} },
-{"ljmp", 1, 0xff, 5, Modrm|Data32, { Mem, 0, 0} },
-
-{"ret", 0, 0xc3, _, NoModrm|Data32, { 0, 0, 0} },
-{"ret", 1, 0xc2, _, NoModrm|Data32, { Imm16, 0, 0} },
-{"retw", 0, 0xc3, _, NoModrm|Data16, { 0, 0, 0} },
-{"retw", 1, 0xc2, _, NoModrm|Data16, { Imm16, 0, 0} },
-{"lret", 0, 0xcb, _, NoModrm|Data32, { 0, 0, 0} },
-{"lret", 1, 0xca, _, NoModrm|Data32, { Imm16, 0, 0} },
-{"lretw", 0, 0xcb, _, NoModrm|Data16, { 0, 0, 0} },
-{"lretw", 1, 0xca, _, NoModrm|Data16, { Imm16, 0, 0} },
-{"enter", 2, 0xc8, _, NoModrm|Data32, { Imm16, Imm8, 0} },
-{"leave", 0, 0xc9, _, NoModrm|Data32, { 0, 0, 0} },
-{"enterw", 2, 0xc8, _, NoModrm|Data16, { Imm16, Imm8, 0} },
-{"leavew", 0, 0xc9, _, NoModrm|Data16, { 0, 0, 0} },
-
-/* conditional jumps */
-{"jo", 1, 0x70, _, Jump, { Disp, 0, 0} },
-
-{"jno", 1, 0x71, _, Jump, { Disp, 0, 0} },
-
-{"jb", 1, 0x72, _, Jump, { Disp, 0, 0} },
-{"jc", 1, 0x72, _, Jump, { Disp, 0, 0} },
-{"jnae", 1, 0x72, _, Jump, { Disp, 0, 0} },
-
-{"jnb", 1, 0x73, _, Jump, { Disp, 0, 0} },
-{"jnc", 1, 0x73, _, Jump, { Disp, 0, 0} },
-{"jae", 1, 0x73, _, Jump, { Disp, 0, 0} },
-
-{"je", 1, 0x74, _, Jump, { Disp, 0, 0} },
-{"jz", 1, 0x74, _, Jump, { Disp, 0, 0} },
-
-{"jne", 1, 0x75, _, Jump, { Disp, 0, 0} },
-{"jnz", 1, 0x75, _, Jump, { Disp, 0, 0} },
-
-{"jbe", 1, 0x76, _, Jump, { Disp, 0, 0} },
-{"jna", 1, 0x76, _, Jump, { Disp, 0, 0} },
-
-{"jnbe", 1, 0x77, _, Jump, { Disp, 0, 0} },
-{"ja", 1, 0x77, _, Jump, { Disp, 0, 0} },
-
-{"js", 1, 0x78, _, Jump, { Disp, 0, 0} },
-
-{"jns", 1, 0x79, _, Jump, { Disp, 0, 0} },
-
-{"jp", 1, 0x7a, _, Jump, { Disp, 0, 0} },
-{"jpe", 1, 0x7a, _, Jump, { Disp, 0, 0} },
-
-{"jnp", 1, 0x7b, _, Jump, { Disp, 0, 0} },
-{"jpo", 1, 0x7b, _, Jump, { Disp, 0, 0} },
-
-{"jl", 1, 0x7c, _, Jump, { Disp, 0, 0} },
-{"jnge", 1, 0x7c, _, Jump, { Disp, 0, 0} },
-
-{"jnl", 1, 0x7d, _, Jump, { Disp, 0, 0} },
-{"jge", 1, 0x7d, _, Jump, { Disp, 0, 0} },
-
-{"jle", 1, 0x7e, _, Jump, { Disp, 0, 0} },
-{"jng", 1, 0x7e, _, Jump, { Disp, 0, 0} },
-
-{"jnle", 1, 0x7f, _, Jump, { Disp, 0, 0} },
-{"jg", 1, 0x7f, _, Jump, { Disp, 0, 0} },
-
-#if 0  /* XXX where are these macros used?
-  To get them working again, they need to take
-  an entire template as the parameter,
-  and check for Data16/Data32 flags.  */
-/* these turn into pseudo operations when disp is larger than 8 bits */
-#define IS_JUMP_ON_CX_ZERO(o) \
-  (o == 0x66e3)
-#define IS_JUMP_ON_ECX_ZERO(o) \
-  (o == 0xe3)
-#endif
-
-{"jcxz", 1, 0xe3, _, JumpByte|Data16, { Disp, 0, 0} },
-{"jecxz", 1, 0xe3, _, JumpByte|Data32, { Disp, 0, 0} },
-
-#define IS_LOOP_ECX_TIMES(o) \
-  (o == 0xe2 || o == 0xe1 || o == 0xe0)
-
-{"loop", 1, 0xe2, _, JumpByte, { Disp, 0, 0} },
-
-{"loopz", 1, 0xe1, _, JumpByte, { Disp, 0, 0} },
-{"loope", 1, 0xe1, _, JumpByte, { Disp, 0, 0} },
-
-{"loopnz", 1, 0xe0, _, JumpByte, { Disp, 0, 0} },
-{"loopne", 1, 0xe0, _, JumpByte, { Disp, 0, 0} },
-
-/* set byte on flag instructions */
-{"seto", 1, 0x0f90, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setno", 1, 0x0f91, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setb", 1, 0x0f92, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setc", 1, 0x0f92, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setnae", 1, 0x0f92, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setnb", 1, 0x0f93, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setnc", 1, 0x0f93, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setae", 1, 0x0f93, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"sete", 1, 0x0f94, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setz", 1, 0x0f94, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setne", 1, 0x0f95, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setnz", 1, 0x0f95, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setbe", 1, 0x0f96, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setna", 1, 0x0f96, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setnbe", 1, 0x0f97, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"seta", 1, 0x0f97, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"sets", 1, 0x0f98, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setns", 1, 0x0f99, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setp", 1, 0x0f9a, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setpe", 1, 0x0f9a, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setnp", 1, 0x0f9b, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setpo", 1, 0x0f9b, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setl", 1, 0x0f9c, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setnge", 1, 0x0f9c, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setnl", 1, 0x0f9d, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setge", 1, 0x0f9d, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setle", 1, 0x0f9e, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setng", 1, 0x0f9e, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-{"setnle", 1, 0x0f9f, 0, Modrm, { Reg8|Mem, 0, 0} },
-{"setg", 1, 0x0f9f, 0, Modrm, { Reg8|Mem, 0, 0} },
-
-#define IS_STRING_INSTRUCTION(o) \
-  ((o) == 0xa6 || (o) == 0x6c || (o) == 0x6e || (o) == 0x6e || \
-   (o) == 0xac || (o) == 0xa4 || (o) == 0xae || (o) == 0xaa || \
-   (o) == 0xd7)
-
-/* string manipulation */
-{"cmps", 0, 0xa6, _, W|NoModrm, { 0, 0, 0} },
-{"scmp", 0, 0xa6, _, W|NoModrm, { 0, 0, 0} },
-{"ins", 0, 0x6c, _, W|NoModrm, { 0, 0, 0} },
-{"outs", 0, 0x6e, _, W|NoModrm, { 0, 0, 0} },
-{"lods", 0, 0xac, _, W|NoModrm, { 0, 0, 0} },
-{"slod", 0, 0xac, _, W|NoModrm, { 0, 0, 0} },
-{"movs", 0, 0xa4, _, W|NoModrm, { 0, 0, 0} },
-{"smov", 0, 0xa4, _, W|NoModrm, { 0, 0, 0} },
-{"scas", 0, 0xae, _, W|NoModrm, { 0, 0, 0} },
-{"ssca", 0, 0xae, _, W|NoModrm, { 0, 0, 0} },
-{"stos", 0, 0xaa, _, W|NoModrm, { 0, 0, 0} },
-{"ssto", 0, 0xaa, _, W|NoModrm, { 0, 0, 0} },
-{"xlat", 0, 0xd7, _, NoModrm, { 0, 0, 0} },
-
-/* bit manipulation */
-{"bsf", 2, 0x0fbc, _, Modrm|ReverseRegRegmem, { Reg|Mem, Reg, 0} },
-{"bsr", 2, 0x0fbd, _, Modrm|ReverseRegRegmem, { Reg|Mem, Reg, 0} },
-{"bt", 2, 0x0fa3, _, Modrm, { Reg, Reg|Mem, 0} },
-{"bt", 2, 0x0fba, 4, Modrm, { Imm8, Reg|Mem, 0} },
-{"btc", 2, 0x0fbb, _, Modrm, { Reg, Reg|Mem, 0} },
-{"btc", 2, 0x0fba, 7, Modrm, { Imm8, Reg|Mem, 0} },
-{"btr", 2, 0x0fb3, _, Modrm, { Reg, Reg|Mem, 0} },
-{"btr", 2, 0x0fba, 6, Modrm, { Imm8, Reg|Mem, 0} },
-{"bts", 2, 0x0fab, _, Modrm, { Reg, Reg|Mem, 0} },
-{"bts", 2, 0x0fba, 5, Modrm, { Imm8, Reg|Mem, 0} },
-
-/* interrupts & op. sys insns */
-/* See gas/config/tc-i386.c for conversion of 'int $3' into the special
-   int 3 insn. */
-#define INT_OPCODE 0xcd
-#define INT3_OPCODE 0xcc
-{"int", 1, 0xcd, _, NoModrm, { Imm8, 0, 0} },
-{"int3", 0, 0xcc, _, NoModrm, { 0, 0, 0} },
-{"into", 0, 0xce, _, NoModrm, { 0, 0, 0} },
-{"iret", 0, 0xcf, _, NoModrm|Data32, { 0, 0, 0} },
-{"iretw", 0, 0xcf, _, NoModrm|Data16, { 0, 0, 0} },
-/* i386sl, i486sl, later 486, and Pentium */
-{"rsm", 0, 0x0faa, _, NoModrm,{ 0, 0, 0} },
-
-{"boundl", 2, 0x62, _, Modrm|Data32, { Reg32, Mem, 0} },
-{"boundw", 2, 0x62, _, Modrm|Data16, { Reg16, Mem, 0} },
-
-{"hlt", 0, 0xf4, _, NoModrm, { 0, 0, 0} },
-{"wait", 0, 0x9b, _, NoModrm, { 0, 0, 0} },
-/* nop is actually 'xchgl %eax, %eax' */
-{"nop", 0, 0x90, _, NoModrm, { 0, 0, 0} },
-
-/* protection control */
-{"arpl", 2, 0x63, _, Modrm, { Reg16, Reg16|Mem, 0} },
-{"lar", 2, 0x0f02, _, Modrm|ReverseRegRegmem, { WordReg|Mem, WordReg, 0} },
-{"lgdt", 1, 0x0f01, 2, Modrm, { Mem, 0, 0} },
-{"lidt", 1, 0x0f01, 3, Modrm, { Mem, 0, 0} },
-{"lldt", 1, 0x0f00, 2, Modrm, { WordReg|Mem, 0, 0} },
-{"lmsw", 1, 0x0f01, 6, Modrm, { WordReg|Mem, 0, 0} },
-{"lsl", 2, 0x0f03, _, Modrm|ReverseRegRegmem, { WordReg|Mem, WordReg, 0} },
-{"ltr", 1, 0x0f00, 3, Modrm, { WordReg|Mem, 0, 0} },
-
-{"sgdt", 1, 0x0f01, 0, Modrm, { Mem, 0, 0} },
-{"sidt", 1, 0x0f01, 1, Modrm, { Mem, 0, 0} },
-{"sldt", 1, 0x0f00, 0, Modrm, { WordReg|Mem, 0, 0} },
-{"smsw", 1, 0x0f01, 4, Modrm, { WordReg|Mem, 0, 0} },
-{"str", 1, 0x0f00, 1, Modrm, { Reg16|Mem, 0, 0} },
-
-{"verr", 1, 0x0f00, 4, Modrm, { WordReg|Mem, 0, 0} },
-{"verw", 1, 0x0f00, 5, Modrm, { WordReg|Mem, 0, 0} },
-
-/* floating point instructions */
-
-/* load */
-{"fld", 1, 0xd9c0, _, ShortForm, { FloatReg, 0, 0} }, /* register */
-{"flds", 1, 0xd9, 0, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem float */
-{"fldl", 1, 0xdd, 0, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem double */
-{"fldl", 1, 0xd9c0, _, ShortForm, { FloatReg, 0, 0} }, /* register */
-{"fild", 1, 0xdf, 0, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem word (16) */
-{"fildl", 1, 0xdb, 0, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem dword (32) */
-{"fildq",1, 0xdf, 5, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem qword (64) */
-{"fildll",1, 0xdf, 5, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem qword (64) */
-{"fldt", 1, 0xdb, 5, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem efloat */
-{"fbld", 1, 0xdf, 4, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem bcd */
-
-/* store (no pop) */
-{"fst", 1, 0xddd0, _, ShortForm, { FloatReg, 0, 0} }, /* register */
-{"fsts", 1, 0xd9, 2, Modrm, { Mem, 0, 0} }, /* %st0 --> mem float */
-{"fstl", 1, 0xdd, 2, Modrm, { Mem, 0, 0} }, /* %st0 --> mem double */
-{"fstl", 1, 0xddd0, _, ShortForm, { FloatReg, 0, 0} }, /* register */
-{"fist", 1, 0xdf, 2, Modrm, { Mem, 0, 0} }, /* %st0 --> mem word (16) */
-{"fistl", 1, 0xdb, 2, Modrm, { Mem, 0, 0} }, /* %st0 --> mem dword (32) */
-
-/* store (with pop) */
-{"fstp", 1, 0xddd8, _, ShortForm, { FloatReg, 0, 0} }, /* register */
-{"fstps", 1, 0xd9, 3, Modrm, { Mem, 0, 0} }, /* %st0 --> mem float */
-{"fstpl", 1, 0xdd, 3, Modrm, { Mem, 0, 0} }, /* %st0 --> mem double */
-{"fstpl", 1, 0xddd8, _, ShortForm, { FloatReg, 0, 0} }, /* register */
-{"fistp", 1, 0xdf, 3, Modrm, { Mem, 0, 0} }, /* %st0 --> mem word (16) */
-{"fistpl",1, 0xdb, 3, Modrm, { Mem, 0, 0} }, /* %st0 --> mem dword (32) */
-{"fistpq",1, 0xdf, 7, Modrm, { Mem, 0, 0} }, /* %st0 --> mem qword (64) */
-{"fistpll",1,0xdf, 7, Modrm, { Mem, 0, 0} }, /* %st0 --> mem qword (64) */
-{"fstpt", 1, 0xdb, 7, Modrm, { Mem, 0, 0} }, /* %st0 --> mem efloat */
-{"fbstp", 1, 0xdf, 6, Modrm, { Mem, 0, 0} }, /* %st0 --> mem bcd */
-
-/* exchange %st<n> with %st0 */
-{"fxch", 1, 0xd9c8, _, ShortForm, { FloatReg, 0, 0} },
-{"fxch", 0, 0xd9c9, _, NoModrm, { 0, 0, 0} }, /* alias for fxch %st, %st(1) */
-
-/* comparison (without pop) */
-{"fcom", 1, 0xd8d0, _, ShortForm, { FloatReg, 0, 0} },
-{"fcoms", 1, 0xd8, 2, Modrm, { Mem, 0, 0} }, /* compare %st0, mem float  */
-{"ficoml", 1, 0xda, 2, Modrm, { Mem, 0, 0} }, /* compare %st0, mem word  */
-{"fcoml", 1, 0xdc, 2, Modrm, { Mem, 0, 0} }, /* compare %st0, mem double  */
-{"fcoml", 1, 0xd8d0, _, ShortForm, { FloatReg, 0, 0} },
-{"ficoms", 1, 0xde, 2, Modrm, { Mem, 0, 0} }, /* compare %st0, mem dword */
-
-/* comparison (with pop) */
-{"fcomp", 1, 0xd8d8, _, ShortForm, { FloatReg, 0, 0} },
-{"fcomps", 1, 0xd8, 3, Modrm, { Mem, 0, 0} }, /* compare %st0, mem float  */
-{"ficompl", 1, 0xda, 3, Modrm, { Mem, 0, 0} }, /* compare %st0, mem word  */
-{"fcompl", 1, 0xdc, 3, Modrm, { Mem, 0, 0} }, /* compare %st0, mem double  */
-{"fcompl", 1, 0xd8d8, _, ShortForm, { FloatReg, 0, 0} },
-{"ficomps", 1, 0xde, 3, Modrm, { Mem, 0, 0} }, /* compare %st0, mem dword */
-{"fcompp", 0, 0xded9, _, NoModrm, { 0, 0, 0} }, /* compare %st0, %st1 & pop 2 */
-
-/* unordered comparison (with pop) */
-{"fucom", 1, 0xdde0, _, ShortForm, { FloatReg, 0, 0} },
-{"fucomp", 1, 0xdde8, _, ShortForm, { FloatReg, 0, 0} },
-{"fucompp", 0, 0xdae9, _, NoModrm, { 0, 0, 0} }, /* ucompare %st0, %st1 & pop twice */
-
-{"ftst", 0, 0xd9e4, _, NoModrm, { 0, 0, 0} }, /* test %st0 */
-{"fxam", 0, 0xd9e5, _, NoModrm, { 0, 0, 0} }, /* examine %st0 */
-
-/* load constants into %st0 */
-{"fld1", 0, 0xd9e8, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- 1.0 */
-{"fldl2t", 0, 0xd9e9, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- log2(10) */
-{"fldl2e", 0, 0xd9ea, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- log2(e) */
-{"fldpi", 0, 0xd9eb, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- pi */
-{"fldlg2", 0, 0xd9ec, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- log10(2) */
-{"fldln2", 0, 0xd9ed, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- ln(2) */
-{"fldz", 0, 0xd9ee, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- 0.0 */
-
-/* arithmetic */
-
-/* add */
-{"fadd", 1, 0xd8c0, _, ShortForm, { FloatReg, 0, 0} },
-{"fadd", 2, 0xd8c0, _, ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
-{"fadd", 0, 0xdcc1, _, NoModrm, { 0, 0, 0} }, /* alias for fadd %st, %st(1) */
-{"faddp", 1, 0xdac0, _, ShortForm, { FloatReg, 0, 0} },
-{"faddp", 2, 0xdac0, _, ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
-{"faddp", 0, 0xdec1, _, NoModrm, { 0, 0, 0} }, /* alias for faddp %st, %st(1) */
-{"fadds", 1, 0xd8, 0, Modrm, { Mem, 0, 0} },
-{"fiaddl", 1, 0xda, 0, Modrm, { Mem, 0, 0} },
-{"faddl", 1, 0xdc, 0, Modrm, { Mem, 0, 0} },
-{"fiadds", 1, 0xde, 0, Modrm, { Mem, 0, 0} },
-
-/* sub */
-/* Note:  intel has decided that certain of these operations are reversed
-   in assembler syntax. */
-{"fsub", 1, 0xd8e0, _, ShortForm, { FloatReg, 0, 0} },
-{"fsub", 2, 0xd8e0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-#ifdef NON_BROKEN_OPCODES
-{"fsub", 2, 0xdce8, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#else
-{"fsub", 2, 0xdce0, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#endif
-{"fsub", 0, 0xdce1, _, NoModrm, { 0, 0, 0} },
-{"fsubp", 1, 0xdae0, _, ShortForm, { FloatReg, 0, 0} },
-{"fsubp", 2, 0xdae0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-#ifdef NON_BROKEN_OPCODES
-{"fsubp", 2, 0xdee8, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#else
-{"fsubp", 2, 0xdee0, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#endif
-{"fsubp", 0, 0xdee1, _, NoModrm, { 0, 0, 0} },
-{"fsubs", 1, 0xd8, 4, Modrm, { Mem, 0, 0} },
-{"fisubl", 1, 0xda, 4, Modrm, { Mem, 0, 0} },
-{"fsubl", 1, 0xdc, 4, Modrm, { Mem, 0, 0} },
-{"fisubs", 1, 0xde, 4, Modrm, { Mem, 0, 0} },
-
-/* sub reverse */
-{"fsubr", 1, 0xd8e8, _, ShortForm, { FloatReg, 0, 0} },
-{"fsubr", 2, 0xd8e8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-#ifdef NON_BROKEN_OPCODES
-{"fsubr", 2, 0xdce0, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#else
-{"fsubr", 2, 0xdce8, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#endif
-{"fsubr", 0, 0xdce9, _, NoModrm, { 0, 0, 0} },
-{"fsubrp", 1, 0xdae8, _, ShortForm, { FloatReg, 0, 0} },
-{"fsubrp", 2, 0xdae8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-#ifdef NON_BROKEN_OPCODES
-{"fsubrp", 2, 0xdee0, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#else
-{"fsubrp", 2, 0xdee8, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#endif
-{"fsubrp", 0, 0xdee9, _, NoModrm, { 0, 0, 0} },
-{"fsubrs", 1, 0xd8, 5, Modrm, { Mem, 0, 0} },
-{"fisubrl", 1, 0xda, 5, Modrm, { Mem, 0, 0} },
-{"fsubrl", 1, 0xdc, 5, Modrm, { Mem, 0, 0} },
-{"fisubrs", 1, 0xde, 5, Modrm, { Mem, 0, 0} },
-
-/* mul */
-{"fmul", 1, 0xd8c8, _, ShortForm, { FloatReg, 0, 0} },
-{"fmul", 2, 0xd8c8, _, ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
-{"fmul", 0, 0xdcc9, _, NoModrm, { 0, 0, 0} },
-{"fmulp", 1, 0xdac8, _, ShortForm, { FloatReg, 0, 0} },
-{"fmulp", 2, 0xdac8, _, ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
-{"fmulp", 0, 0xdec9, _, NoModrm, { 0, 0, 0} },
-{"fmuls", 1, 0xd8, 1, Modrm, { Mem, 0, 0} },
-{"fimull", 1, 0xda, 1, Modrm, { Mem, 0, 0} },
-{"fmull", 1, 0xdc, 1, Modrm, { Mem, 0, 0} },
-{"fimuls", 1, 0xde, 1, Modrm, { Mem, 0, 0} },
-
-/* div */
-/* Note:  intel has decided that certain of these operations are reversed
-   in assembler syntax. */
-{"fdiv", 1, 0xd8f0, _, ShortForm, { FloatReg, 0, 0} },
-{"fdiv", 2, 0xd8f0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-#ifdef NON_BROKEN_OPCODES
-{"fdiv", 2, 0xdcf8, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#else
-{"fdiv", 2, 0xdcf0, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#endif
-{"fdiv", 0, 0xdcf1, _, NoModrm, { 0, 0, 0} },
-{"fdivp", 1, 0xdaf0, _, ShortForm, { FloatReg, 0, 0} },
-{"fdivp", 2, 0xdaf0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-#ifdef NON_BROKEN_OPCODES
-{"fdivp", 2, 0xdef8, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#else
-{"fdivp", 2, 0xdef0, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#endif
-{"fdivp", 0, 0xdef1, _, NoModrm, { 0, 0, 0} },
-{"fdivs", 1, 0xd8, 6, Modrm, { Mem, 0, 0} },
-{"fidivl", 1, 0xda, 6, Modrm, { Mem, 0, 0} },
-{"fdivl", 1, 0xdc, 6, Modrm, { Mem, 0, 0} },
-{"fidivs", 1, 0xde, 6, Modrm, { Mem, 0, 0} },
-
-/* div reverse */
-{"fdivr", 1, 0xd8f8, _, ShortForm, { FloatReg, 0, 0} },
-{"fdivr", 2, 0xd8f8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-#ifdef NON_BROKEN_OPCODES
-{"fdivr", 2, 0xdcf0, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#else
-{"fdivr", 2, 0xdcf8, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#endif
-{"fdivr", 0, 0xdcf9, _, NoModrm, { 0, 0, 0} },
-{"fdivrp", 1, 0xdaf8, _, ShortForm, { FloatReg, 0, 0} },
-{"fdivrp", 2, 0xdaf8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-#ifdef NON_BROKEN_OPCODES
-{"fdivrp", 2, 0xdef0, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#else
-{"fdivrp", 2, 0xdef8, _, ShortForm, { FloatAcc, FloatReg, 0} },
-#endif
-{"fdivrp", 0, 0xdef9, _, NoModrm, { 0, 0, 0} },
-{"fdivrs", 1, 0xd8, 7, Modrm, { Mem, 0, 0} },
-{"fidivrl", 1, 0xda, 7, Modrm, { Mem, 0, 0} },
-{"fdivrl", 1, 0xdc, 7, Modrm, { Mem, 0, 0} },
-{"fidivrs", 1, 0xde, 7, Modrm, { Mem, 0, 0} },
-
-{"f2xm1", 0,   0xd9f0, _, NoModrm, { 0, 0, 0} },
-{"fyl2x", 0,   0xd9f1, _, NoModrm, { 0, 0, 0} },
-{"fptan", 0,   0xd9f2, _, NoModrm, { 0, 0, 0} },
-{"fpatan", 0,  0xd9f3, _, NoModrm, { 0, 0, 0} },
-{"fxtract", 0, 0xd9f4, _, NoModrm, { 0, 0, 0} },
-{"fprem1", 0,  0xd9f5, _, NoModrm, { 0, 0, 0} },
-{"fdecstp", 0,  0xd9f6, _, NoModrm, { 0, 0, 0} },
-{"fincstp", 0,  0xd9f7, _, NoModrm, { 0, 0, 0} },
-{"fprem", 0,   0xd9f8, _, NoModrm, { 0, 0, 0} },
-{"fyl2xp1", 0, 0xd9f9, _, NoModrm, { 0, 0, 0} },
-{"fsqrt", 0,   0xd9fa, _, NoModrm, { 0, 0, 0} },
-{"fsincos", 0, 0xd9fb, _, NoModrm, { 0, 0, 0} },
-{"frndint", 0, 0xd9fc, _, NoModrm, { 0, 0, 0} },
-{"fscale", 0,  0xd9fd, _, NoModrm, { 0, 0, 0} },
-{"fsin", 0,    0xd9fe, _, NoModrm, { 0, 0, 0} },
-{"fcos", 0,    0xd9ff, _, NoModrm, { 0, 0, 0} },
-
-{"fchs", 0, 0xd9e0, _, NoModrm, { 0, 0, 0} },
-{"fabs", 0, 0xd9e1, _, NoModrm, { 0, 0, 0} },
-
-/* processor control */
-{"fninit", 0, 0xdbe3, _, NoModrm, { 0, 0, 0} },
-{"finit", 0, 0x9bdbe3, _, NoModrm, { 0, 0, 0} },
-{"fldcw", 1, 0xd9, 5, Modrm, { Mem, 0, 0} },
-{"fnstcw", 1, 0xd9, 7, Modrm, { Mem, 0, 0} },
-{"fstcw", 1, 0x9bd9, 7, Modrm, { Mem, 0, 0} },
-{"fnstsw", 1, 0xdfe0, _, NoModrm, { Acc, 0, 0} },
-{"fnstsw", 1, 0xdd, 7, Modrm, { Mem, 0, 0} },
-{"fnstsw", 0, 0xdfe0, _, NoModrm, { 0, 0, 0} },
-{"fstsw", 1, 0x9bdfe0, _, NoModrm, { Acc, 0, 0} },
-{"fstsw", 1, 0x9bdd, 7, Modrm, { Mem, 0, 0} },
-{"fstsw", 0, 0x9bdfe0, _, NoModrm, { 0, 0, 0} },
-{"fnclex", 0, 0xdbe2, _, NoModrm, { 0, 0, 0} },
-{"fclex", 0, 0x9bdbe2, _, NoModrm, { 0, 0, 0} },
-/*
- We ignore the short format (287) versions of fstenv/fldenv & fsave/frstor
- instructions;  i'm not sure how to add them or how they are different.
- My 386/387 book offers no details about this.
-*/
-{"fnstenv", 1, 0xd9, 6, Modrm, { Mem, 0, 0} },
-{"fstenv", 1, 0x9bd9, 6, Modrm, { Mem, 0, 0} },
-{"fldenv", 1, 0xd9, 4, Modrm, { Mem, 0, 0} },
-{"fnsave", 1, 0xdd, 6, Modrm, { Mem, 0, 0} },
-{"fsave", 1, 0x9bdd, 6, Modrm, { Mem, 0, 0} },
-{"frstor", 1, 0xdd, 4, Modrm, { Mem, 0, 0} },
-
-{"ffree", 1, 0xddc0, _, ShortForm, { FloatReg, 0, 0} },
-{"fnop", 0, 0xd9d0, _, NoModrm, { 0, 0, 0} },
-{"fwait", 0, 0x9b, _, NoModrm, { 0, 0, 0} },
-
-/*
-  opcode prefixes; we allow them as seperate insns too
-  (see prefix table below)
-*/
-{"aword", 0, 0x67, _, NoModrm, { 0, 0, 0} },
-{"addr16", 0, 0x67, _, NoModrm, { 0, 0, 0} },
-{"word", 0, 0x66, _, NoModrm, { 0, 0, 0} },
-{"data16", 0, 0x66, _, NoModrm, { 0, 0, 0} },
-{"lock", 0, 0xf0, _, NoModrm, { 0, 0, 0} },
-{"cs", 0, 0x2e, _, NoModrm, { 0, 0, 0} },
-{"ds", 0, 0x3e, _, NoModrm, { 0, 0, 0} },
-{"es", 0, 0x26, _, NoModrm, { 0, 0, 0} },
-{"fs", 0, 0x64, _, NoModrm, { 0, 0, 0} },
-{"gs", 0, 0x65, _, NoModrm, { 0, 0, 0} },
-{"ss", 0, 0x36, _, NoModrm, { 0, 0, 0} },
-{"rep", 0, 0xf3, _, NoModrm, { 0, 0, 0} },
-{"repe", 0, 0xf3, _, NoModrm, { 0, 0, 0} },
-{"repz", 0, 0xf3, _, NoModrm, { 0, 0, 0} },
-{"repne", 0, 0xf2, _, NoModrm, { 0, 0, 0} },
-{"repnz", 0, 0xf2, _, NoModrm, { 0, 0, 0} },
-
-/* 486 extensions */
-
-{"bswap", 1, 0x0fc8, _, ShortForm, { Reg32,0,0 } },
-{"xadd", 2, 0x0fc0, _, DW|Modrm, { Reg, Reg|Mem, 0 } },
-{"cmpxchg", 2, 0x0fb0, _, DW|Modrm, { Reg, Reg|Mem, 0 } },
-{"invd", 0, 0x0f08, _, NoModrm, { 0, 0, 0} },
-{"wbinvd", 0, 0x0f09, _, NoModrm, { 0, 0, 0} },
-{"invlpg", 1, 0x0f01, 7, Modrm, { Mem, 0, 0} },
-
-/* 586 and late 486 extensions */
-{"cpuid", 0, 0x0fa2, _, NoModrm, { 0, 0, 0} },
-
-/* Pentium extensions */
-{"wrmsr", 0, 0x0f30, _, NoModrm, { 0, 0, 0} },
-{"rdtsc", 0, 0x0f31, _, NoModrm, { 0, 0, 0} },
-{"rdmsr", 0, 0x0f32, _, NoModrm, { 0, 0, 0} },
-{"cmpxchg8b", 1, 0x0fc7, 1, Modrm, { Mem, 0, 0} },
-
-/* Pentium Pro extensions */
-{"rdpmc", 0, 0x0f33, _, NoModrm, { 0, 0, 0} },
-
-{"cmovo",  2, 0x0f40, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovno", 2, 0x0f41, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovb",  2, 0x0f42, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovae", 2, 0x0f43, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmove",  2, 0x0f44, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovne", 2, 0x0f45, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovbe", 2, 0x0f46, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmova",  2, 0x0f47, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovs",  2, 0x0f48, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovns", 2, 0x0f49, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovp",  2, 0x0f4a, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovnp", 2, 0x0f4b, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovl",  2, 0x0f4c, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovge", 2, 0x0f4d, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovle", 2, 0x0f4e, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-{"cmovg",  2, 0x0f4f, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
-
-{"fcmovb", 2, 0xdac0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmove", 2, 0xdac8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovbe",2, 0xdad0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovu", 2, 0xdad8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovnb", 2, 0xdbc0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovne", 2, 0xdbc8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovnbe",2, 0xdbd0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcmovnu", 2, 0xdbd8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-
-{"fcomi",  2, 0xdbf0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fucomi", 2, 0xdbe8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fcomip", 2, 0xdff0, _, ShortForm, { FloatReg, FloatAcc, 0} },
-{"fucomip",2, 0xdfe8, _, ShortForm, { FloatReg, FloatAcc, 0} },
-
-{"", 0, 0, 0, 0, { 0, 0, 0} } /* sentinel */
-};
-#undef _
-
-static const template *const i386_optab_end
-  = i386_optab + sizeof (i386_optab)/sizeof(i386_optab[0]);
-
-/* 386 register table */
-
-static const reg_entry i386_regtab[] = {
-  /* 8 bit regs */
-  {"al", Reg8|Acc, 0}, {"cl", Reg8|ShiftCount, 1}, {"dl", Reg8, 2},
-  {"bl", Reg8, 3},
-  {"ah", Reg8, 4}, {"ch", Reg8, 5}, {"dh", Reg8, 6}, {"bh", Reg8, 7},
-  /* 16 bit regs */
-  {"ax", Reg16|Acc, 0}, {"cx", Reg16, 1}, {"dx", Reg16|InOutPortReg, 2}, {"bx", Reg16, 3},
-  {"sp", Reg16, 4}, {"bp", Reg16, 5}, {"si", Reg16, 6}, {"di", Reg16, 7},
-  /* 32 bit regs */
-  {"eax", Reg32|Acc, 0}, {"ecx", Reg32, 1}, {"edx", Reg32, 2}, {"ebx", Reg32, 3},
-  {"esp", Reg32, 4}, {"ebp", Reg32, 5}, {"esi", Reg32, 6}, {"edi", Reg32, 7},
-  /* segment registers */
-  {"es", SReg2, 0}, {"cs", SReg2, 1}, {"ss", SReg2, 2},
-  {"ds", SReg2, 3}, {"fs", SReg3, 4}, {"gs", SReg3, 5},
-  /* control registers */
-  {"cr0", Control, 0},   {"cr2", Control, 2},   {"cr3", Control, 3},
-  {"cr4", Control, 4},
-  /* debug registers */
-  {"db0", Debug, 0},   {"db1", Debug, 1},   {"db2", Debug, 2},
-  {"db3", Debug, 3},   {"db6", Debug, 6},   {"db7", Debug, 7},
-  {"dr0", Debug, 0},   {"dr1", Debug, 1},   {"dr2", Debug, 2},
-  {"dr3", Debug, 3},   {"dr6", Debug, 6},   {"dr7", Debug, 7},
-  /* test registers */
-  {"tr3", Test, 3}, {"tr4", Test, 4}, {"tr5", Test, 5},
-  {"tr6", Test, 6}, {"tr7", Test, 7},
-  /* float registers */
-  {"st(0)", FloatReg|FloatAcc, 0},
-  {"st", FloatReg|FloatAcc, 0},
-  {"st(1)", FloatReg, 1}, {"st(2)", FloatReg, 2},
-  {"st(3)", FloatReg, 3}, {"st(4)", FloatReg, 4}, {"st(5)", FloatReg, 5},
-  {"st(6)", FloatReg, 6}, {"st(7)", FloatReg, 7}
-};
-
-#define MAX_REG_NAME_SIZE 8 /* for parsing register names from input */
-
-static const reg_entry *const i386_regtab_end
-  = i386_regtab + sizeof(i386_regtab)/sizeof(i386_regtab[0]);
-
-/* segment stuff */
-static const seg_entry cs = { "cs", 0x2e };
-static const seg_entry ds = { "ds", 0x3e };
-static const seg_entry ss = { "ss", 0x36 };
-static const seg_entry es = { "es", 0x26 };
-static const seg_entry fs = { "fs", 0x64 };
-static const seg_entry gs = { "gs", 0x65 };
-static const seg_entry null = { "", 0x0 };
-
-/*
-  This table is used to store the default segment register implied by all
-  possible memory addressing modes.
-  It is indexed by the mode & modrm entries of the modrm byte as follows:
-      index = (mode<<3) | modrm;
-*/
-static const seg_entry *const one_byte_segment_defaults[] = {
-  /* mode 0 */
-  &ds, &ds, &ds, &ds, &null, &ds, &ds, &ds,
-  /* mode 1 */
-  &ds, &ds, &ds, &ds, &null, &ss, &ds, &ds,
-  /* mode 2 */
-  &ds, &ds, &ds, &ds, &null, &ss, &ds, &ds,
-  /* mode 3 --- not a memory reference; never referenced */
-};
-
-static const seg_entry *const two_byte_segment_defaults[] = {
-  /* mode 0 */
-  &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds,
-  /* mode 1 */
-  &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds,
-  /* mode 2 */
-  &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds,
-  /* mode 3 --- not a memory reference; never referenced */
-};
-
-static const prefix_entry i386_prefixtab[] = {
-#define ADDR_PREFIX_OPCODE 0x67
-  { "addr16", 0x67 }, /* address size prefix ==> 16bit addressing
- * (How is this useful?) */
-#define WORD_PREFIX_OPCODE 0x66
-  { "data16", 0x66 }, /* operand size prefix */
-  { "lock", 0xf0 }, /* bus lock prefix */
-  { "wait", 0x9b }, /* wait for coprocessor */
-  { "cs", 0x2e }, { "ds", 0x3e }, /* segment overrides ... */
-  { "es", 0x26 }, { "fs", 0x64 },
-  { "gs", 0x65 }, { "ss", 0x36 },
-/* REPE & REPNE used to detect rep/repne with a non-string instruction */
-#define REPNE 0xf2
-#define REPE  0xf3
-  { "rep", 0xf3 }, /* repeat string instructions */
-  { "repe", 0xf3 },  { "repz", 0xf3 },
-  { "repne", 0xf2 }, { "repnz", 0xf2 }
-};
-
-static const prefix_entry *const i386_prefixtab_end
-  = i386_prefixtab + sizeof(i386_prefixtab)/sizeof(i386_prefixtab[0]);
-
-/* end of i386-opcode.h */
diff --git a/opcode/ppc-dis.c b/opcode/ppc-dis.c
deleted file mode 100644
index 6a50151..0000000
--- a/opcode/ppc-dis.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* ppc-dis.c -- Disassemble PowerPC instructions
-   Copyright 1994 Free Software Foundation, Inc.
-   Written by Ian Lance Taylor, Cygnus Support
-
-This file is part of GDB, GAS, and the GNU binutils.
-
-GDB, GAS, and the GNU binutils are free software; you can redistribute
-them and/or modify them 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.
-
-GDB, GAS, and the GNU binutils are distributed in the hope that they
-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 file; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <stdio.h>
-#include "ansidecl.h"
-#include "sysdep.h"
-#include "dis-asm.h"
-#include "opcode/ppc.h"
-
-/* This file provides several disassembler functions, all of which use
-   the disassembler interface defined in dis-asm.h.  Several functions
-   are provided because this file handles disassembly for the PowerPC
-   in both big and little endian mode and also for the POWER (RS/6000)
-   chip.  */
-
-static int print_insn_powerpc PARAMS ((bfd_vma, struct disassemble_info *,
-       int bigendian, int dialect));
-
-/* Print a big endian PowerPC instruction.  For convenience, also
-   disassemble instructions supported by the Motorola PowerPC 601.  */
-
-int
-print_insn_big_powerpc (memaddr, info)
-     bfd_vma memaddr;
-     struct disassemble_info *info;
-{
-  return print_insn_powerpc (memaddr, info, 1,
-     PPC_OPCODE_PPC | PPC_OPCODE_601);
-}
-
-/* Print a little endian PowerPC instruction.  For convenience, also
-   disassemble instructions supported by the Motorola PowerPC 601.  */
-
-int
-print_insn_little_powerpc (memaddr, info)
-     bfd_vma memaddr;
-     struct disassemble_info *info;
-{
-  return print_insn_powerpc (memaddr, info, 0,
-     PPC_OPCODE_PPC | PPC_OPCODE_601);
-}
-
-/* Print a POWER (RS/6000) instruction.  */
-
-int
-print_insn_rs6000 (memaddr, info)
-     bfd_vma memaddr;
-     struct disassemble_info *info;
-{
-  return print_insn_powerpc (memaddr, info, 1, PPC_OPCODE_POWER);
-}
-
-/* Print a PowerPC or POWER instruction.  */
-
-static int
-print_insn_powerpc (memaddr, info, bigendian, dialect)
-     bfd_vma memaddr;
-     struct disassemble_info *info;
-     int bigendian;
-     int dialect;
-{
-  bfd_byte buffer[4];
-  int status;
-  unsigned long insn;
-  const struct powerpc_opcode *opcode;
-  const struct powerpc_opcode *opcode_end;
-  unsigned long op;
-
-  status = (*info->read_memory_func) (memaddr, buffer, 4, info);
-  if (status != 0)
-    {
-      (*info->memory_error_func) (status, memaddr, info);
-      return -1;
-    }
-
-  if (bigendian)
-    insn = bfd_getb32 (buffer);
-  else
-    insn = bfd_getl32 (buffer);
-
-  /* Get the major opcode of the instruction.  */
-  op = PPC_OP (insn);
-
-  /* Find the first match in the opcode table.  We could speed this up
-     a bit by doing a binary search on the major opcode.  */
-  opcode_end = powerpc_opcodes + powerpc_num_opcodes;
-  for (opcode = powerpc_opcodes; opcode < opcode_end; opcode++)
-    {
-      unsigned long table_op;
-      const unsigned char *opindex;
-      const struct powerpc_operand *operand;
-      int invalid;
-      int need_comma;
-      int need_paren;
-
-      table_op = PPC_OP (opcode->opcode);
-      if (op < table_op)
- break;
-      if (op > table_op)
- continue;
-
-      if ((insn & opcode->mask) != opcode->opcode
-  || (opcode->flags & dialect) == 0)
- continue;
-
-      /* Make two passes over the operands.  First see if any of them
- have extraction functions, and, if they do, make sure the
- instruction is valid.  */
-      invalid = 0;
-      for (opindex = opcode->operands; *opindex != 0; opindex++)
- {
-  operand = powerpc_operands + *opindex;
-  if (operand->extract)
-    (*operand->extract) (insn, &invalid);
- }
-      if (invalid)
- continue;
-
-      /* The instruction is valid.  */
-      (*info->fprintf_func) (info->stream, "%s", opcode->name);
-      if (opcode->operands[0] != 0)
- (*info->fprintf_func) (info->stream, "\t");
-
-      /* Now extract and print the operands.  */
-      need_comma = 0;
-      need_paren = 0;
-      for (opindex = opcode->operands; *opindex != 0; opindex++)
- {
-  long value;
-
-  operand = powerpc_operands + *opindex;
-
-  /* Operands that are marked FAKE are simply ignored.  We
-     already made sure that the extract function considered
-     the instruction to be valid.  */
-  if ((operand->flags & PPC_OPERAND_FAKE) != 0)
-    continue;
-
-  /* Extract the value from the instruction.  */
-  if (operand->extract)
-    value = (*operand->extract) (insn, (int *) NULL);
-  else
-    {
-      value = (insn >> operand->shift) & ((1 << operand->bits) - 1);
-      if ((operand->flags & PPC_OPERAND_SIGNED) != 0
-  && (value & (1 << (operand->bits - 1))) != 0)
- value -= 1 << operand->bits;
-    }
-
-  /* If the operand is optional, and the value is zero, don't
-     print anything.  */
-  if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0
-      && (operand->flags & PPC_OPERAND_NEXT) == 0
-      && value == 0)
-    continue;
-
-  if (need_comma)
-    {
-      (*info->fprintf_func) (info->stream, ",");
-      need_comma = 0;
-    }
-
-  /* Print the operand as directed by the flags.  */
-  if ((operand->flags & PPC_OPERAND_GPR) != 0)
-    (*info->fprintf_func) (info->stream, "r%ld", value);
-  else if ((operand->flags & PPC_OPERAND_FPR) != 0)
-    (*info->fprintf_func) (info->stream, "f%ld", value);
-  else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0)
-    (*info->print_address_func) (memaddr + value, info);
-  else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
-    (*info->print_address_func) ((bfd_vma) value & 0xffffffff, info);
-  else if ((operand->flags & PPC_OPERAND_CR) == 0
-   || (dialect & PPC_OPCODE_PPC) == 0)
-    (*info->fprintf_func) (info->stream, "%ld", value);
-  else
-    {
-      if (operand->bits == 3)
- (*info->fprintf_func) (info->stream, "cr%d", value);
-      else
- {
-  static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
-  int cr;
-  int cc;
-
-  cr = value >> 2;
-  if (cr != 0)
-    (*info->fprintf_func) (info->stream, "4*cr%d", cr);
-  cc = value & 3;
-  if (cc != 0)
-    {
-      if (cr != 0)
- (*info->fprintf_func) (info->stream, "+");
-      (*info->fprintf_func) (info->stream, "%s", cbnames[cc]);
-    }
- }
-    }
-
-  if (need_paren)
-    {
-      (*info->fprintf_func) (info->stream, ")");
-      need_paren = 0;
-    }
-
-  if ((operand->flags & PPC_OPERAND_PARENS) == 0)
-    need_comma = 1;
-  else
-    {
-      (*info->fprintf_func) (info->stream, "(");
-      need_paren = 1;
-    }
- }
-
-      /* We have found and printed an instruction; return.  */
-      return 4;
-    }
-
-  /* We could not find a match.  */
-  (*info->fprintf_func) (info->stream, ".long 0x%lx", insn);
-
-  return 4;
-}
diff --git a/opcode/ppc-opc.c b/opcode/ppc-opc.c
deleted file mode 100644
index 5715415..0000000
--- a/opcode/ppc-opc.c
+++ /dev/null
@@ -1,2830 +0,0 @@
-/* ppc-opc.c -- PowerPC opcode list
-   Copyright 1994 Free Software Foundation, Inc.
-   Written by Ian Lance Taylor, Cygnus Support
-
-This file is part of GDB, GAS, and the GNU binutils.
-
-GDB, GAS, and the GNU binutils are free software; you can redistribute
-them and/or modify them 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.
-
-GDB, GAS, and the GNU binutils are distributed in the hope that they
-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 file; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <stdio.h>
-#include "ansidecl.h"
-#include "opcode/ppc.h"
-
-/* This file holds the PowerPC opcode table.  The opcode table
-   includes almost all of the extended instruction mnemonics.  This
-   permits the disassembler to use them, and simplifies the assembler
-   logic, at the cost of increasing the table size.  The table is
-   strictly constant data, so the compiler should be able to put it in
-   the .text section.
-
-   This file also holds the operand table.  All knowledge about
-   inserting operands into instructions and vice-versa is kept in this
-   file.  */
-
-/* Local insertion and extraction functions.  */
-
-static unsigned long insert_bat PARAMS ((unsigned long, long, const char **));
-static long extract_bat PARAMS ((unsigned long, int *));
-static unsigned long insert_bba PARAMS ((unsigned long, long, const char **));
-static long extract_bba PARAMS ((unsigned long, int *));
-static unsigned long insert_bd PARAMS ((unsigned long, long, const char **));
-static long extract_bd PARAMS ((unsigned long, int *));
-static unsigned long insert_bdm PARAMS ((unsigned long, long, const char **));
-static long extract_bdm PARAMS ((unsigned long, int *));
-static unsigned long insert_bdp PARAMS ((unsigned long, long, const char **));
-static long extract_bdp PARAMS ((unsigned long, int *));
-static unsigned long insert_bo PARAMS ((unsigned long, long, const char **));
-static long extract_bo PARAMS ((unsigned long, int *));
-static unsigned long insert_boe PARAMS ((unsigned long, long, const char **));
-static long extract_boe PARAMS ((unsigned long, int *));
-static unsigned long insert_ds PARAMS ((unsigned long, long, const char **));
-static long extract_ds PARAMS ((unsigned long, int *));
-static unsigned long insert_li PARAMS ((unsigned long, long, const char **));
-static long extract_li PARAMS ((unsigned long, int *));
-static unsigned long insert_mbe PARAMS ((unsigned long, long, const char **));
-static long extract_mbe PARAMS ((unsigned long, int *));
-static unsigned long insert_mb6 PARAMS ((unsigned long, long, const char **));
-static long extract_mb6 PARAMS ((unsigned long, int *));
-static unsigned long insert_nb PARAMS ((unsigned long, long, const char **));
-static long extract_nb PARAMS ((unsigned long, int *));
-static unsigned long insert_nsi PARAMS ((unsigned long, long, const char **));
-static long extract_nsi PARAMS ((unsigned long, int *));
-static unsigned long insert_ral PARAMS ((unsigned long, long, const char **));
-static unsigned long insert_ram PARAMS ((unsigned long, long, const char **));
-static unsigned long insert_ras PARAMS ((unsigned long, long, const char **));
-static unsigned long insert_rbs PARAMS ((unsigned long, long, const char **));
-static long extract_rbs PARAMS ((unsigned long, int *));
-static unsigned long insert_sh6 PARAMS ((unsigned long, long, const char **));
-static long extract_sh6 PARAMS ((unsigned long, int *));
-static unsigned long insert_spr PARAMS ((unsigned long, long, const char **));
-static long extract_spr PARAMS ((unsigned long, int *));
-static unsigned long insert_tbr PARAMS ((unsigned long, long, const char **));
-static long extract_tbr PARAMS ((unsigned long, int *));
-
-/* The operands table.
-
-   The fields are bits, shift, signed, insert, extract, flags.  */
-
-const struct powerpc_operand powerpc_operands[] =
-{
-  /* The zero index is used to indicate the end of the list of
-     operands.  */
-#define UNUSED (0)
-  { 0, 0, 0, 0, 0 },
-
-  /* The BA field in an XL form instruction.  */
-#define BA (UNUSED + 1)
-#define BA_MASK (0x1f << 16)
-  { 5, 16, 0, 0, PPC_OPERAND_CR },
-
-  /* The BA field in an XL form instruction when it must be the same
-     as the BT field in the same instruction.  */
-#define BAT (BA + 1)
-  { 5, 16, insert_bat, extract_bat, PPC_OPERAND_FAKE },
-
-  /* The BB field in an XL form instruction.  */
-#define BB (BAT + 1)
-#define BB_MASK (0x1f << 11)
-  { 5, 11, 0, 0, PPC_OPERAND_CR },
-
-  /* The BB field in an XL form instruction when it must be the same
-     as the BA field in the same instruction.  */
-#define BBA (BB + 1)
-  { 5, 11, insert_bba, extract_bba, PPC_OPERAND_FAKE },
-
-  /* The BD field in a B form instruction.  The lower two bits are
-     forced to zero.  */
-#define BD (BBA + 1)
-  { 16, 0, insert_bd, extract_bd, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
-
-  /* The BD field in a B form instruction when absolute addressing is
-     used.  */
-#define BDA (BD + 1)
-  { 16, 0, insert_bd, extract_bd, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
-
-  /* The BD field in a B form instruction when the - modifier is used.
-     This sets the y bit of the BO field appropriately.  */
-#define BDM (BDA + 1)
-  { 16, 0, insert_bdm, extract_bdm,
-      PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
-
-  /* The BD field in a B form instruction when the - modifier is used
-     and absolute address is used.  */
-#define BDMA (BDM + 1)
-  { 16, 0, insert_bdm, extract_bdm,
-      PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
-
-  /* The BD field in a B form instruction when the + modifier is used.
-     This sets the y bit of the BO field appropriately.  */
-#define BDP (BDMA + 1)
-  { 16, 0, insert_bdp, extract_bdp,
-      PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
-
-  /* The BD field in a B form instruction when the + modifier is used
-     and absolute addressing is used.  */
-#define BDPA (BDP + 1)
-  { 16, 0, insert_bdp, extract_bdp,
-      PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
-
-  /* The BF field in an X or XL form instruction.  */
-#define BF (BDPA + 1)
-  { 3, 23, 0, 0, PPC_OPERAND_CR },
-
-  /* An optional BF field.  This is used for comparison instructions,
-     in which an omitted BF field is taken as zero.  */
-#define OBF (BF + 1)
-  { 3, 23, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
-
-  /* The BFA field in an X or XL form instruction.  */
-#define BFA (OBF + 1)
-  { 3, 18, 0, 0, PPC_OPERAND_CR },
-
-  /* The BI field in a B form or XL form instruction.  */
-#define BI (BFA + 1)
-#define BI_MASK (0x1f << 16)
-  { 5, 16, 0, 0, PPC_OPERAND_CR },
-
-  /* The BO field in a B form instruction.  Certain values are
-     illegal.  */
-#define BO (BI + 1)
-#define BO_MASK (0x1f << 21)
-  { 5, 21, insert_bo, extract_bo, 0 },
-
-  /* The BO field in a B form instruction when the + or - modifier is
-     used.  This is like the BO field, but it must be even.  */
-#define BOE (BO + 1)
-  { 5, 21, insert_boe, extract_boe, 0 },
-
-  /* The BT field in an X or XL form instruction.  */
-#define BT (BOE + 1)
-  { 5, 21, 0, 0, PPC_OPERAND_CR },
-
-  /* The condition register number portion of the BI field in a B form
-     or XL form instruction.  This is used for the extended
-     conditional branch mnemonics, which set the lower two bits of the
-     BI field.  This field is optional.  */
-#define CR (BT + 1)
-  { 3, 18, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
-
-  /* The D field in a D form instruction.  This is a displacement off
-     a register, and implies that the next operand is a register in
-     parentheses.  */
-#define D (CR + 1)
-  { 16, 0, 0, 0, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
-
-  /* The DS field in a DS form instruction.  This is like D, but the
-     lower two bits are forced to zero.  */
-#define DS (D + 1)
-  { 16, 0, insert_ds, extract_ds, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
-
-  /* The FL1 field in a POWER SC form instruction.  */
-#define FL1 (DS + 1)
-  { 4, 12, 0, 0, 0 },
-
-  /* The FL2 field in a POWER SC form instruction.  */
-#define FL2 (FL1 + 1)
-  { 3, 2, 0, 0, 0 },
-
-  /* The FLM field in an XFL form instruction.  */
-#define FLM (FL2 + 1)
-  { 8, 17, 0, 0, 0 },
-
-  /* The FRA field in an X or A form instruction.  */
-#define FRA (FLM + 1)
-#define FRA_MASK (0x1f << 16)
-  { 5, 16, 0, 0, PPC_OPERAND_FPR },
-
-  /* The FRB field in an X or A form instruction.  */
-#define FRB (FRA + 1)
-#define FRB_MASK (0x1f << 11)
-  { 5, 11, 0, 0, PPC_OPERAND_FPR },
-
-  /* The FRC field in an A form instruction.  */
-#define FRC (FRB + 1)
-#define FRC_MASK (0x1f << 6)
-  { 5, 6, 0, 0, PPC_OPERAND_FPR },
-
-  /* The FRS field in an X form instruction or the FRT field in a D, X
-     or A form instruction.  */
-#define FRS (FRC + 1)
-#define FRT (FRS)
-  { 5, 21, 0, 0, PPC_OPERAND_FPR },
-
-  /* The FXM field in an XFX instruction.  */
-#define FXM (FRS + 1)
-#define FXM_MASK (0xff << 12)
-  { 8, 12, 0, 0, 0 },
-
-  /* The L field in a D or X form instruction.  */
-#define L (FXM + 1)
-  { 1, 21, 0, 0, PPC_OPERAND_OPTIONAL },
-
-  /* The LEV field in a POWER SC form instruction.  */
-#define LEV (L + 1)
-  { 7, 5, 0, 0, 0 },
-
-  /* The LI field in an I form instruction.  The lower two bits are
-     forced to zero.  */
-#define LI (LEV + 1)
-  { 26, 0, insert_li, extract_li, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
-
-  /* The LI field in an I form instruction when used as an absolute
-     address.  */
-#define LIA (LI + 1)
-  { 26, 0, insert_li, extract_li, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
-
-  /* The MB field in an M form instruction.  */
-#define MB (LIA + 1)
-#define MB_MASK (0x1f << 6)
-  { 5, 6, 0, 0, 0 },
-
-  /* The ME field in an M form instruction.  */
-#define ME (MB + 1)
-#define ME_MASK (0x1f << 1)
-  { 5, 1, 0, 0, 0 },
-
-  /* The MB and ME fields in an M form instruction expressed a single
-     operand which is a bitmask indicating which bits to select.  This
-     is a two operand form using PPC_OPERAND_NEXT.  See the
-     description in opcode/ppc.h for what this means.  */
-#define MBE (ME + 1)
-  { 5, 6, 0, 0, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
-  { 32, 0, insert_mbe, extract_mbe, 0 },
-
-  /* The MB or ME field in an MD or MDS form instruction.  The high
-     bit is wrapped to the low end.  */
-#define MB6 (MBE + 2)
-#define ME6 (MB6)
-#define MB6_MASK (0x3f << 5)
-  { 6, 5, insert_mb6, extract_mb6, 0 },
-
-  /* The NB field in an X form instruction.  The value 32 is stored as
-     0.  */
-#define NB (MB6 + 1)
-  { 6, 11, insert_nb, extract_nb, 0 },
-
-  /* The NSI field in a D form instruction.  This is the same as the
-     SI field, only negated.  */
-#define NSI (NB + 1)
-  { 16, 0, insert_nsi, extract_nsi,
-      PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED },
-
-  /* The RA field in an D, DS, X, XO, M, or MDS form instruction.  */
-#define RA (NSI + 1)
-#define RA_MASK (0x1f << 16)
-  { 5, 16, 0, 0, PPC_OPERAND_GPR },
-
-  /* The RA field in a D or X form instruction which is an updating
-     load, which means that the RA field may not be zero and may not
-     equal the RT field.  */
-#define RAL (RA + 1)
-  { 5, 16, insert_ral, 0, PPC_OPERAND_GPR },
-
-  /* The RA field in an lmw instruction, which has special value
-     restrictions.  */
-#define RAM (RAL + 1)
-  { 5, 16, insert_ram, 0, PPC_OPERAND_GPR },
-
-  /* The RA field in a D or X form instruction which is an updating
-     store or an updating floating point load, which means that the RA
-     field may not be zero.  */
-#define RAS (RAM + 1)
-  { 5, 16, insert_ras, 0, PPC_OPERAND_GPR },
-
-  /* The RB field in an X, XO, M, or MDS form instruction.  */
-#define RB (RAS + 1)
-#define RB_MASK (0x1f << 11)
-  { 5, 11, 0, 0, PPC_OPERAND_GPR },
-
-  /* The RB field in an X form instruction when it must be the same as
-     the RS field in the instruction.  This is used for extended
-     mnemonics like mr.  */
-#define RBS (RB + 1)
-  { 5, 1, insert_rbs, extract_rbs, PPC_OPERAND_FAKE },
-
-  /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
-     instruction or the RT field in a D, DS, X, XFX or XO form
-     instruction.  */
-#define RS (RBS + 1)
-#define RT (RS)
-#define RT_MASK (0x1f << 21)
-  { 5, 21, 0, 0, PPC_OPERAND_GPR },
-
-  /* The SH field in an X or M form instruction.  */
-#define SH (RS + 1)
-#define SH_MASK (0x1f << 11)
-  { 5, 11, 0, 0, 0 },
-
-  /* The SH field in an MD form instruction.  This is split.  */
-#define SH6 (SH + 1)
-#define SH6_MASK ((0x1f << 11) | (1 << 1))
-  { 6, 1, insert_sh6, extract_sh6, 0 },
-
-  /* The SI field in a D form instruction.  */
-#define SI (SH6 + 1)
-  { 16, 0, 0, 0, PPC_OPERAND_SIGNED },
-
-  /* The SI field in a D form instruction when we accept a wide range
-     of positive values.  */
-#define SISIGNOPT (SI + 1)
-  { 16, 0, 0, 0, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
-
-  /* The SPR field in an XFX form instruction.  This is flipped--the
-     lower 5 bits are stored in the upper 5 and vice- versa.  */
-#define SPR (SISIGNOPT + 1)
-#define SPR_MASK (0x3ff << 11)
-  { 10, 11, insert_spr, extract_spr, 0 },
-
-  /* The BAT index number in an XFX form m[ft]ibat[lu] instruction.  */
-#define SPRBAT (SPR + 1)
-#define SPRBAT_MASK (0x3 << 17)
-  { 2, 17, 0, 0, 0 },
-
-  /* The SPRG register number in an XFX form m[ft]sprg instruction.  */
-#define SPRG (SPRBAT + 1)
-#define SPRG_MASK (0x3 << 16)
-  { 2, 16, 0, 0, 0 },
-
-  /* The SR field in an X form instruction.  */
-#define SR (SPRG + 1)
-  { 4, 16, 0, 0, 0 },
-
-  /* The SV field in a POWER SC form instruction.  */
-#define SV (SR + 1)
-  { 14, 2, 0, 0, 0 },
-
-  /* The TBR field in an XFX form instruction.  This is like the SPR
-     field, but it is optional.  */
-#define TBR (SV + 1)
-  { 10, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
-
-  /* The TO field in a D or X form instruction.  */
-#define TO (TBR + 1)
-#define TO_MASK (0x1f << 21)
-  { 5, 21, 0, 0, 0 },
-
-  /* The U field in an X form instruction.  */
-#define U (TO + 1)
-  { 4, 12, 0, 0, 0 },
-
-  /* The UI field in a D form instruction.  */
-#define UI (U + 1)
-  { 16, 0, 0, 0, 0 },
-};
-
-/* The functions used to insert and extract complicated operands.  */
-
-/* The BA field in an XL form instruction when it must be the same as
-   the BT field in the same instruction.  This operand is marked FAKE.
-   The insertion function just copies the BT field into the BA field,
-   and the extraction function just checks that the fields are the
-   same.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_bat (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | (((insn >> 21) & 0x1f) << 16);
-}
-
-static long
-extract_bat (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if (invalid != (int *) NULL
-      && ((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
-    *invalid = 1;
-  return 0;
-}
-
-/* The BB field in an XL form instruction when it must be the same as
-   the BA field in the same instruction.  This operand is marked FAKE.
-   The insertion function just copies the BA field into the BB field,
-   and the extraction function just checks that the fields are the
-   same.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_bba (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | (((insn >> 16) & 0x1f) << 11);
-}
-
-static long
-extract_bba (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if (invalid != (int *) NULL
-      && ((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f))
-    *invalid = 1;
-  return 0;
-}
-
-/* The BD field in a B form instruction.  The lower two bits are
-   forced to zero.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_bd (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | (value & 0xfffc);
-}
-
-/*ARGSUSED*/
-static long
-extract_bd (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if ((insn & 0x8000) != 0)
-    return (insn & 0xfffc) - 0x10000;
-  else
-    return insn & 0xfffc;
-}
-
-/* The BD field in a B form instruction when the - modifier is used.
-   This modifier means that the branch is not expected to be taken.
-   We must set the y bit of the BO field to 1 if the offset is
-   negative.  When extracting, we require that the y bit be 1 and that
-   the offset be positive, since if the y bit is 0 we just want to
-   print the normal form of the instruction.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_bdm (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if ((value & 0x8000) != 0)
-    insn |= 1 << 21;
-  return insn | (value & 0xfffc);
-}
-
-static long
-extract_bdm (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if (invalid != (int *) NULL
-      && ((insn & (1 << 21)) == 0
-  || (insn & (1 << 15)) == 0))
-    *invalid = 1;
-  if ((insn & 0x8000) != 0)
-    return (insn & 0xfffc) - 0x10000;
-  else
-    return insn & 0xfffc;
-}
-
-/* The BD field in a B form instruction when the + modifier is used.
-   This is like BDM, above, except that the branch is expected to be
-   taken.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_bdp (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if ((value & 0x8000) == 0)
-    insn |= 1 << 21;
-  return insn | (value & 0xfffc);
-}
-
-static long
-extract_bdp (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if (invalid != (int *) NULL
-      && ((insn & (1 << 21)) == 0
-  || (insn & (1 << 15)) != 0))
-    *invalid = 1;
-  if ((insn & 0x8000) != 0)
-    return (insn & 0xfffc) - 0x10000;
-  else
-    return insn & 0xfffc;
-}
-
-/* Check for legal values of a BO field.  */
-
-static int
-valid_bo (value)
-     long value;
-{
-  /* Certain encodings have bits that are required to be zero.  These
-     are (z must be zero, y may be anything):
-         001zy
- 011zy
- 1z00y
- 1z01y
- 1z1zz
-     */
-  switch (value & 0x14)
-    {
-    default:
-    case 0:
-      return 1;
-    case 0x4:
-      return (value & 0x2) == 0;
-    case 0x10:
-      return (value & 0x8) == 0;
-    case 0x14:
-      return value == 0x14;
-    }
-}
-
-/* The BO field in a B form instruction.  Warn about attempts to set
-   the field to an illegal value.  */
-
-static unsigned long
-insert_bo (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if (errmsg != (const char **) NULL
-      && ! valid_bo (value))
-    *errmsg = "invalid conditional option";
-  return insn | ((value & 0x1f) << 21);
-}
-
-static long
-extract_bo (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  long value;
-
-  value = (insn >> 21) & 0x1f;
-  if (invalid != (int *) NULL
-      && ! valid_bo (value))
-    *invalid = 1;
-  return value;
-}
-
-/* The BO field in a B form instruction when the + or - modifier is
-   used.  This is like the BO field, but it must be even.  When
-   extracting it, we force it to be even.  */
-
-static unsigned long
-insert_boe (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if (errmsg != (const char **) NULL)
-    {
-      if (! valid_bo (value))
- *errmsg = "invalid conditional option";
-      else if ((value & 1) != 0)
- *errmsg = "attempt to set y bit when using + or - modifier";
-    }
-  return insn | ((value & 0x1f) << 21);
-}
-
-static long
-extract_boe (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  long value;
-
-  value = (insn >> 21) & 0x1f;
-  if (invalid != (int *) NULL
-      && ! valid_bo (value))
-    *invalid = 1;
-  return value & 0x1e;
-}
-
-/* The DS field in a DS form instruction.  This is like D, but the
-   lower two bits are forced to zero.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_ds (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | (value & 0xfffc);
-}
-
-/*ARGSUSED*/
-static long
-extract_ds (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if ((insn & 0x8000) != 0)
-    return (insn & 0xfffc) - 0x10000;
-  else
-    return insn & 0xfffc;
-}
-
-/* The LI field in an I form instruction.  The lower two bits are
-   forced to zero.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_li (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | (value & 0x3fffffc);
-}
-
-/*ARGSUSED*/
-static long
-extract_li (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if ((insn & 0x2000000) != 0)
-    return (insn & 0x3fffffc) - 0x4000000;
-  else
-    return insn & 0x3fffffc;
-}
-
-/* The MB and ME fields in an M form instruction expressed as a single
-   operand which is itself a bitmask.  The extraction function always
-   marks it as invalid, since we never want to recognize an
-   instruction which uses a field of this type.  */
-
-static unsigned long
-insert_mbe (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  unsigned long uval;
-  int mb, me;
-
-  uval = value;
-
-  if (uval == 0)
-    {
-      if (errmsg != (const char **) NULL)
- *errmsg = "illegal bitmask";
-      return insn;
-    }
-
-  me = 31;
-  while ((uval & 1) == 0)
-    {
-      uval >>= 1;
-      --me;
-    }
-
-  mb = me;
-  uval >>= 1;
-  while ((uval & 1) != 0)
-    {
-      uval >>= 1;
-      --mb;
-    }
-
-  if (uval != 0)
-    {
-      if (errmsg != (const char **) NULL)
- *errmsg = "illegal bitmask";
-    }
-
-  return insn | (mb << 6) | (me << 1);
-}
-
-static long
-extract_mbe (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  long ret;
-  int mb, me;
-  int i;
-
-  if (invalid != (int *) NULL)
-    *invalid = 1;
-
-  ret = 0;
-  mb = (insn >> 6) & 0x1f;
-  me = (insn >> 1) & 0x1f;
-  for (i = mb; i < me; i++)
-    ret |= 1 << (31 - i);
-  return ret;
-}
-
-/* The MB or ME field in an MD or MDS form instruction.  The high bit
-   is wrapped to the low end.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_mb6 (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | ((value & 0x1f) << 6) | (value & 0x20);
-}
-
-/*ARGSUSED*/
-static long
-extract_mb6 (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  return ((insn >> 6) & 0x1f) | (insn & 0x20);
-}
-
-/* The NB field in an X form instruction.  The value 32 is stored as
-   0.  */
-
-static unsigned long
-insert_nb (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if (value < 0 || value > 32)
-    *errmsg = "value out of range";
-  if (value == 32)
-    value = 0;
-  return insn | ((value & 0x1f) << 11);
-}
-
-/*ARGSUSED*/
-static long
-extract_nb (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  long ret;
-
-  ret = (insn >> 11) & 0x1f;
-  if (ret == 0)
-    ret = 32;
-  return ret;
-}
-
-/* The NSI field in a D form instruction.  This is the same as the SI
-   field, only negated.  The extraction function always marks it as
-   invalid, since we never want to recognize an instruction which uses
-   a field of this type.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_nsi (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | ((- value) & 0xffff);
-}
-
-static long
-extract_nsi (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if (invalid != (int *) NULL)
-    *invalid = 1;
-  if ((insn & 0x8000) != 0)
-    return - ((insn & 0xffff) - 0x10000);
-  else
-    return - (insn & 0xffff);
-}
-
-/* The RA field in a D or X form instruction which is an updating
-   load, which means that the RA field may not be zero and may not
-   equal the RT field.  */
-
-static unsigned long
-insert_ral (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if (value == 0
-      || value == ((insn >> 21) & 0x1f))
-    *errmsg = "invalid register operand when updating";
-  return insn | ((value & 0x1f) << 16);
-}
-
-/* The RA field in an lmw instruction, which has special value
-   restrictions.  */
-
-static unsigned long
-insert_ram (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if (value >= ((insn >> 21) & 0x1f))
-    *errmsg = "index register in load range";
-  return insn | ((value & 0x1f) << 16);
-}
-
-/* The RA field in a D or X form instruction which is an updating
-   store or an updating floating point load, which means that the RA
-   field may not be zero.  */
-
-static unsigned long
-insert_ras (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if (value == 0)
-    *errmsg = "invalid register operand when updating";
-  return insn | ((value & 0x1f) << 16);
-}
-
-/* The RB field in an X form instruction when it must be the same as
-   the RS field in the instruction.  This is used for extended
-   mnemonics like mr.  This operand is marked FAKE.  The insertion
-   function just copies the BT field into the BA field, and the
-   extraction function just checks that the fields are the same.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_rbs (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | (((insn >> 21) & 0x1f) << 11);
-}
-
-static long
-extract_rbs (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  if (invalid != (int *) NULL
-      && ((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f))
-    *invalid = 1;
-  return 0;
-}
-
-/* The SH field in an MD form instruction.  This is split.  */
-
-/*ARGSUSED*/
-static unsigned long
-insert_sh6 (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
-}
-
-/*ARGSUSED*/
-static long
-extract_sh6 (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
-}
-
-/* The SPR field in an XFX form instruction.  This is flipped--the
-   lower 5 bits are stored in the upper 5 and vice- versa.  */
-
-static unsigned long
-insert_spr (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
-}
-
-static long
-extract_spr (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
-}
-
-/* The TBR field in an XFX instruction.  This is just like SPR, but it
-   is optional.  When TBR is omitted, it must be inserted as 268 (the
-   magic number of the TB register).  These functions treat 0
-   (indicating an omitted optional operand) as 268.  This means that
-   ``mftb 4,0'' is not handled correctly.  This does not matter very
-   much, since the architecture manual does not define mftb as
-   accepting any values other than 268 or 269.  */
-
-#define TB (268)
-
-static unsigned long
-insert_tbr (insn, value, errmsg)
-     unsigned long insn;
-     long value;
-     const char **errmsg;
-{
-  if (value == 0)
-    value = TB;
-  return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
-}
-
-static long
-extract_tbr (insn, invalid)
-     unsigned long insn;
-     int *invalid;
-{
-  long ret;
-
-  ret = ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
-  if (ret == TB)
-    ret = 0;
-  return ret;
-}
-
-/* Macros used to form opcodes.  */
-
-/* The main opcode.  */
-#define OP(x) (((x) & 0x3f) << 26)
-#define OP_MASK OP (0x3f)
-
-/* The main opcode combined with a trap code in the TO field of a D
-   form instruction.  Used for extended mnemonics for the trap
-   instructions.  */
-#define OPTO(x,to) (OP (x) | (((to) & 0x1f) << 21))
-#define OPTO_MASK (OP_MASK | TO_MASK)
-
-/* The main opcode combined with a comparison size bit in the L field
-   of a D form or X form instruction.  Used for extended mnemonics for
-   the comparison instructions.  */
-#define OPL(x,l) (OP (x) | (((l) & 1) << 21))
-#define OPL_MASK OPL (0x3f,1)
-
-/* An A form instruction.  */
-#define A(op, xop, rc) (OP (op) | (((xop) & 0x1f) << 1) | ((rc) & 1))
-#define A_MASK A (0x3f, 0x1f, 1)
-
-/* An A_MASK with the FRB field fixed.  */
-#define AFRB_MASK (A_MASK | FRB_MASK)
-
-/* An A_MASK with the FRC field fixed.  */
-#define AFRC_MASK (A_MASK | FRC_MASK)
-
-/* An A_MASK with the FRA and FRC fields fixed.  */
-#define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
-
-/* A B form instruction.  */
-#define B(op, aa, lk) (OP (op) | (((aa) & 1) << 1) | ((lk) & 1))
-#define B_MASK B (0x3f, 1, 1)
-
-/* A B form instruction setting the BO field.  */
-#define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | (((bo) & 0x1f) << 21))
-#define BBO_MASK BBO (0x3f, 0x1f, 1, 1)
-
-/* A BBO_MASK with the y bit of the BO field removed.  This permits
-   matching a conditional branch regardless of the setting of the y
-   bit.  */
-#define Y_MASK (1 << 21)
-#define BBOY_MASK (BBO_MASK &~ Y_MASK)
-
-/* A B form instruction setting the BO field and the condition bits of
-   the BI field.  */
-#define BBOCB(op, bo, cb, aa, lk) \
-  (BBO ((op), (bo), (aa), (lk)) | (((cb) & 0x3) << 16))
-#define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1)
-
-/* A BBOCB_MASK with the y bit of the BO field removed.  */
-#define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK)
-
-/* A BBOYCB_MASK in which the BI field is fixed.  */
-#define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)
-
-/* The main opcode mask with the RA field clear.  */
-#define DRA_MASK (OP_MASK | RA_MASK)
-
-/* A DS form instruction.  */
-#define DSO(op, xop) (OP (op) | ((xop) & 0x3))
-#define DS_MASK DSO (0x3f, 3)
-
-/* An M form instruction.  */
-#define M(op, rc) (OP (op) | ((rc) & 1))
-#define M_MASK M (0x3f, 1)
-
-/* An M form instruction with the ME field specified.  */
-#define MME(op, me, rc) (M ((op), (rc)) | (((me) & 0x1f) << 1))
-
-/* An M_MASK with the MB and ME fields fixed.  */
-#define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)
-
-/* An M_MASK with the SH and ME fields fixed.  */
-#define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)
-
-/* An MD form instruction.  */
-#define MD(op, xop, rc) (OP (op) | (((xop) & 0x7) << 2) | ((rc) & 1))
-#define MD_MASK MD (0x3f, 0x7, 1)
-
-/* An MD_MASK with the MB field fixed.  */
-#define MDMB_MASK (MD_MASK | MB6_MASK)
-
-/* An MD_MASK with the SH field fixed.  */
-#define MDSH_MASK (MD_MASK | SH6_MASK)
-
-/* An MDS form instruction.  */
-#define MDS(op, xop, rc) (OP (op) | (((xop) & 0xf) << 1) | ((rc) & 1))
-#define MDS_MASK MDS (0x3f, 0xf, 1)
-
-/* An MDS_MASK with the MB field fixed.  */
-#define MDSMB_MASK (MDS_MASK | MB6_MASK)
-
-/* An SC form instruction.  */
-#define SC(op, sa, lk) (OP (op) | (((sa) & 1) << 1) | ((lk) & 1))
-#define SC_MASK (OP_MASK | (0x3ff << 16) | (1 << 1) | 1)
-
-/* An X form instruction.  */
-#define X(op, xop) (OP (op) | (((xop) & 0x3ff) << 1))
-
-/* An X form instruction with the RC bit specified.  */
-#define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
-
-/* The mask for an X form instruction.  */
-#define X_MASK XRC (0x3f, 0x3ff, 1)
-
-/* An X_MASK with the RA field fixed.  */
-#define XRA_MASK (X_MASK | RA_MASK)
-
-/* An X_MASK with the RB field fixed.  */
-#define XRB_MASK (X_MASK | RB_MASK)
-
-/* An X_MASK with the RT field fixed.  */
-#define XRT_MASK (X_MASK | RT_MASK)
-
-/* An X_MASK with the RA and RB fields fixed.  */
-#define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
-
-/* An X_MASK with the RT and RA fields fixed.  */
-#define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK)
-
-/* An X form comparison instruction.  */
-#define XCMPL(op, xop, l) (X ((op), (xop)) | (((l) & 1) << 21))
-
-/* The mask for an X form comparison instruction.  */
-#define XCMP_MASK (X_MASK | (1 << 22))
-
-/* The mask for an X form comparison instruction with the L field
-   fixed.  */
-#define XCMPL_MASK (XCMP_MASK | (1 << 21))
-
-/* An X form trap instruction with the TO field specified.  */
-#define XTO(op, xop, to) (X ((op), (xop)) | (((to) & 0x1f) << 21))
-#define XTO_MASK (X_MASK | TO_MASK)
-
-/* An XFL form instruction.  */
-#define XFL(op, xop, rc) (OP (op) | (((xop) & 0x3ff) << 1) | ((rc) & 1))
-#define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (1 << 25) | (1 << 16))
-
-/* An XL form instruction with the LK field set to 0.  */
-#define XL(op, xop) (OP (op) | (((xop) & 0x3ff) << 1))
-
-/* An XL form instruction which uses the LK field.  */
-#define XLLK(op, xop, lk) (XL ((op), (xop)) | ((lk) & 1))
-
-/* The mask for an XL form instruction.  */
-#define XL_MASK XLLK (0x3f, 0x3ff, 1)
-
-/* An XL form instruction which explicitly sets the BO field.  */
-#define XLO(op, bo, xop, lk) \
-  (XLLK ((op), (xop), (lk)) | (((bo) & 0x1f) << 21))
-#define XLO_MASK (XL_MASK | BO_MASK)
-
-/* An XL form instruction which explicitly sets the y bit of the BO
-   field.  */
-#define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | (((y) & 1) << 21))
-#define XLYLK_MASK (XL_MASK | Y_MASK)
-
-/* An XL form instruction which sets the BO field and the condition
-   bits of the BI field.  */
-#define XLOCB(op, bo, cb, xop, lk) \
-  (XLO ((op), (bo), (xop), (lk)) | (((cb) & 3) << 16))
-#define XLOCB_MASK XLOCB (0x3f, 0x1f, 0x3, 0x3ff, 1)
-
-/* An XL_MASK or XLYLK_MASK or XLOCB_MASK with the BB field fixed.  */
-#define XLBB_MASK (XL_MASK | BB_MASK)
-#define XLYBB_MASK (XLYLK_MASK | BB_MASK)
-#define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK)
-
-/* An XL_MASK with the BO and BB fields fixed.  */
-#define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK)
-
-/* An XL_MASK with the BO, BI and BB fields fixed.  */
-#define XLBOBIBB_MASK (XL_MASK | BO_MASK | BI_MASK | BB_MASK)
-
-/* An XO form instruction.  */
-#define XO(op, xop, oe, rc) \
-  (OP (op) | (((xop) & 0x1ff) << 1) | (((oe) & 1) << 10) | ((rc) & 1))
-#define XO_MASK XO (0x3f, 0x1ff, 1, 1)
-
-/* An XO_MASK with the RB field fixed.  */
-#define XORB_MASK (XO_MASK | RB_MASK)
-
-/* An XS form instruction.  */
-#define XS(op, xop, rc) (OP (op) | (((xop) & 0x1ff) << 2) | ((rc) & 1))
-#define XS_MASK XS (0x3f, 0x1ff, 1)
-
-/* A mask for the FXM version of an XFX form instruction.  */
-#define XFXFXM_MASK (X_MASK | (1 << 20) | (1 << 11))
-
-/* An XFX form instruction with the FXM field filled in.  */
-#define XFXM(op, xop, fxm) \
-  (X ((op), (xop)) | (((fxm) & 0xff) << 12))
-
-/* An XFX form instruction with the SPR field filled in.  */
-#define XSPR(op, xop, spr) \
-  (X ((op), (xop)) | (((spr) & 0x1f) << 16) | (((spr) & 0x3e0) << 6))
-#define XSPR_MASK (X_MASK | SPR_MASK)
-
-/* An XFX form instruction with the SPR field filled in except for the
-   SPRBAT field.  */
-#define XSPRBAT_MASK (XSPR_MASK &~ SPRBAT_MASK)
-
-/* An XFX form instruction with the SPR field filled in except for the
-   SPRG field.  */
-#define XSPRG_MASK (XSPR_MASK &~ SPRG_MASK)
-
-/* The BO encodings used in extended conditional branch mnemonics.  */
-#define BODNZF (0x0)
-#define BODNZFP (0x1)
-#define BODZF (0x2)
-#define BODZFP (0x3)
-#define BOF (0x4)
-#define BOFP (0x5)
-#define BODNZT (0x8)
-#define BODNZTP (0x9)
-#define BODZT (0xa)
-#define BODZTP (0xb)
-#define BOT (0xc)
-#define BOTP (0xd)
-#define BODNZ (0x10)
-#define BODNZP (0x11)
-#define BODZ (0x12)
-#define BODZP (0x13)
-#define BOU (0x14)
-
-/* The BI condition bit encodings used in extended conditional branch
-   mnemonics.  */
-#define CBLT (0)
-#define CBGT (1)
-#define CBEQ (2)
-#define CBSO (3)
-
-/* The TO encodings used in extended trap mnemonics.  */
-#define TOLGT (0x1)
-#define TOLLT (0x2)
-#define TOEQ (0x4)
-#define TOLGE (0x5)
-#define TOLNL (0x5)
-#define TOLLE (0x6)
-#define TOLNG (0x6)
-#define TOGT (0x8)
-#define TOGE (0xc)
-#define TONL (0xc)
-#define TOLT (0x10)
-#define TOLE (0x14)
-#define TONG (0x14)
-#define TONE (0x18)
-#define TOU (0x1f)
-
-/* Smaller names for the flags so each entry in the opcodes table will
-   fit on a single line.  */
-#undef PPC
-#define PPC PPC_OPCODE_PPC | PPC_OPCODE_ANY
-#define PPCCOM PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
-#define PPC32 PPC_OPCODE_PPC | PPC_OPCODE_32 | PPC_OPCODE_ANY
-#define PPC64 PPC_OPCODE_PPC | PPC_OPCODE_64 | PPC_OPCODE_ANY
-#define PPCONLY PPC_OPCODE_PPC
-#define POWER PPC_OPCODE_POWER | PPC_OPCODE_ANY
-#define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_ANY
-#define POWER32 PPC_OPCODE_POWER | PPC_OPCODE_ANY | PPC_OPCODE_32
-#define COM PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
-#define COM32 PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY | PPC_OPCODE_32
-#define M601 PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_ANY
-#define PWRCOM PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
-#define MFDEC1 PPC_OPCODE_POWER
-#define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601
-
-/* The opcode table.
-
-   The format of the opcode table is:
-
-   NAME     OPCODE MASK FLAGS { OPERANDS }
-
-   NAME is the name of the instruction.
-   OPCODE is the instruction opcode.
-   MASK is the opcode mask; this is used to tell the disassembler
-     which bits in the actual opcode must match OPCODE.
-   FLAGS are flags indicated what processors support the instruction.
-   OPERANDS is the list of operands.
-
-   The disassembler reads the table in order and prints the first
-   instruction which matches, so this table is sorted to put more
-   specific instructions before more general instructions.  It is also
-   sorted by major opcode.  */
-
-const struct powerpc_opcode powerpc_opcodes[] = {
-{ "tdlgti",  OPTO(2,TOLGT), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdllti",  OPTO(2,TOLLT), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdeqi",   OPTO(2,TOEQ), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdlgei",  OPTO(2,TOLGE), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdlnli",  OPTO(2,TOLNL), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdllei",  OPTO(2,TOLLE), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdlngi",  OPTO(2,TOLNG), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdgti",   OPTO(2,TOGT), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdgei",   OPTO(2,TOGE), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdnli",   OPTO(2,TONL), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdlti",   OPTO(2,TOLT), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdlei",   OPTO(2,TOLE), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdngi",   OPTO(2,TONG), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdnei",   OPTO(2,TONE), OPTO_MASK, PPC64, { RA, SI } },
-{ "tdi",     OP(2), OP_MASK, PPC64, { TO, RA, SI } },
-
-{ "twlgti",  OPTO(3,TOLGT), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tlgti",   OPTO(3,TOLGT), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twllti",  OPTO(3,TOLLT), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tllti",   OPTO(3,TOLLT), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "tweqi",   OPTO(3,TOEQ), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "teqi",    OPTO(3,TOEQ), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twlgei",  OPTO(3,TOLGE), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tlgei",   OPTO(3,TOLGE), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twlnli",  OPTO(3,TOLNL), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tlnli",   OPTO(3,TOLNL), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twllei",  OPTO(3,TOLLE), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tllei",   OPTO(3,TOLLE), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twlngi",  OPTO(3,TOLNG), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tlngi",   OPTO(3,TOLNG), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twgti",   OPTO(3,TOGT), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tgti",    OPTO(3,TOGT), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twgei",   OPTO(3,TOGE), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tgei",    OPTO(3,TOGE), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twnli",   OPTO(3,TONL), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tnli",    OPTO(3,TONL), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twlti",   OPTO(3,TOLT), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tlti",    OPTO(3,TOLT), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twlei",   OPTO(3,TOLE), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tlei",    OPTO(3,TOLE), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twngi",   OPTO(3,TONG), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tngi",    OPTO(3,TONG), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twnei",   OPTO(3,TONE), OPTO_MASK, PPCCOM, { RA, SI } },
-{ "tnei",    OPTO(3,TONE), OPTO_MASK, PWRCOM, { RA, SI } },
-{ "twi",     OP(3), OP_MASK, PPCCOM, { TO, RA, SI } },
-{ "ti",      OP(3), OP_MASK, PWRCOM, { TO, RA, SI } },
-
-{ "mulli",   OP(7), OP_MASK, PPCCOM, { RT, RA, SI } },
-{ "muli",    OP(7), OP_MASK, PWRCOM, { RT, RA, SI } },
-
-{ "subfic",  OP(8), OP_MASK, PPCCOM, { RT, RA, SI } },
-{ "sfi",     OP(8), OP_MASK, PWRCOM, { RT, RA, SI } },
-
-{ "dozi",    OP(9), OP_MASK, M601, { RT, RA, SI } },
-
-{ "cmplwi",  OPL(10,0), OPL_MASK, PPCCOM, { OBF, RA, UI } },
-{ "cmpldi",  OPL(10,1), OPL_MASK, PPC64, { OBF, RA, UI } },
-{ "cmpli",   OP(10), OP_MASK, PPCONLY, { BF, L, RA, UI } },
-{ "cmpli",   OP(10), OP_MASK, PWRCOM, { BF, RA, UI } },
-
-{ "cmpwi",   OPL(11,0), OPL_MASK, PPCCOM, { OBF, RA, SI } },
-{ "cmpdi",   OPL(11,1), OPL_MASK, PPC64, { OBF, RA, SI } },
-{ "cmpi",    OP(11), OP_MASK, PPCONLY, { BF, L, RA, SI } },
-{ "cmpi",    OP(11), OP_MASK, PWRCOM, { BF, RA, SI } },
-
-{ "addic",   OP(12), OP_MASK, PPCCOM, { RT, RA, SI } },
-{ "ai",     OP(12), OP_MASK, PWRCOM, { RT, RA, SI } },
-{ "subic",   OP(12), OP_MASK, PPCCOM, { RT, RA, NSI } },
-
-{ "addic.",  OP(13), OP_MASK, PPCCOM, { RT, RA, SI } },
-{ "ai.",     OP(13), OP_MASK, PWRCOM, { RT, RA, SI } },
-{ "subic.",  OP(13), OP_MASK, PPCCOM, { RT, RA, NSI } },
-
-{ "li",     OP(14), DRA_MASK, PPCCOM, { RT, SI } },
-{ "lil",     OP(14), DRA_MASK, PWRCOM, { RT, SI } },
-{ "addi",    OP(14), OP_MASK, PPCCOM, { RT, RA, SI } },
-{ "cal",     OP(14), OP_MASK, PWRCOM, { RT, D, RA } },
-{ "subi",    OP(14), OP_MASK, PPCCOM, { RT, RA, NSI } },
-{ "la",     OP(14), OP_MASK, PPCCOM, { RT, D, RA } },
-
-{ "lis",     OP(15), DRA_MASK, PPCCOM, { RT, SISIGNOPT } },
-{ "liu",     OP(15), DRA_MASK, PWRCOM, { RT, SISIGNOPT } },
-{ "addis",   OP(15), OP_MASK, PPCCOM, { RT,RA,SISIGNOPT } },
-{ "cau",     OP(15), OP_MASK, PWRCOM, { RT,RA,SISIGNOPT } },
-{ "subis",   OP(15), OP_MASK, PPCCOM, { RT, RA, NSI } },
-
-{ "bdnz-",   BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BDM } },
-{ "bdnz+",   BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BDP } },
-{ "bdnz",    BBO(16,BODNZ,0,0), BBOYBI_MASK, PPCCOM, { BD } },
-{ "bdn",     BBO(16,BODNZ,0,0), BBOYBI_MASK, PWRCOM, { BD } },
-{ "bdnzl-",  BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BDM } },
-{ "bdnzl+",  BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BDP } },
-{ "bdnzl",   BBO(16,BODNZ,0,1), BBOYBI_MASK, PPCCOM, { BD } },
-{ "bdnl",    BBO(16,BODNZ,0,1), BBOYBI_MASK, PWRCOM, { BD } },
-{ "bdnza-",  BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDMA } },
-{ "bdnza+",  BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDPA } },
-{ "bdnza",   BBO(16,BODNZ,1,0), BBOYBI_MASK, PPCCOM, { BDA } },
-{ "bdna",    BBO(16,BODNZ,1,0), BBOYBI_MASK, PWRCOM, { BDA } },
-{ "bdnzla-", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDMA } },
-{ "bdnzla+", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDPA } },
-{ "bdnzla",  BBO(16,BODNZ,1,1), BBOYBI_MASK, PPCCOM, { BDA } },
-{ "bdnla",   BBO(16,BODNZ,1,1), BBOYBI_MASK, PWRCOM, { BDA } },
-{ "bdz-",    BBO(16,BODZ,0,0),  BBOYBI_MASK, PPC, { BDM } },
-{ "bdz+",    BBO(16,BODZ,0,0),  BBOYBI_MASK, PPC, { BDP } },
-{ "bdz",     BBO(16,BODZ,0,0),  BBOYBI_MASK, COM, { BD } },
-{ "bdzl-",   BBO(16,BODZ,0,1),  BBOYBI_MASK, PPC, { BDM } },
-{ "bdzl+",   BBO(16,BODZ,0,1),  BBOYBI_MASK, PPC, { BDP } },
-{ "bdzl",    BBO(16,BODZ,0,1),  BBOYBI_MASK, COM, { BD } },
-{ "bdza-",   BBO(16,BODZ,1,0),  BBOYBI_MASK, PPC, { BDMA } },
-{ "bdza+",   BBO(16,BODZ,1,0),  BBOYBI_MASK, PPC, { BDPA } },
-{ "bdza",    BBO(16,BODZ,1,0),  BBOYBI_MASK, COM, { BDA } },
-{ "bdzla-",  BBO(16,BODZ,1,1),  BBOYBI_MASK, PPC, { BDMA } },
-{ "bdzla+",  BBO(16,BODZ,1,1),  BBOYBI_MASK, PPC, { BDPA } },
-{ "bdzla",   BBO(16,BODZ,1,1),  BBOYBI_MASK, COM, { BDA } },
-{ "blt-",    BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "blt+",    BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "blt",     BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "bltl-",   BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bltl+",   BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bltl",    BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "blta-",   BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "blta+",   BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "blta",    BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bltla-",  BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bltla+",  BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bltla",   BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bgt-",    BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bgt+",    BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bgt",     BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "bgtl-",   BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bgtl+",   BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bgtl",    BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "bgta-",   BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bgta+",   BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bgta",    BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bgtla-",  BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bgtla+",  BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bgtla",   BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "beq-",    BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "beq+",    BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "beq",     BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "beql-",   BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "beql+",   BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "beql",    BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "beqa-",   BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "beqa+",   BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "beqa",    BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "beqla-",  BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "beqla+",  BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "beqla",   BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bso-",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bso+",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bso",     BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "bsol-",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bsol+",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bsol",    BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "bsoa-",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bsoa+",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bsoa",    BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bsola-",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bsola+",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bsola",   BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bun-",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bun+",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bun",     BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPCCOM, { CR, BD } },
-{ "bunl-",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bunl+",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bunl",    BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPCCOM, { CR, BD } },
-{ "buna-",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "buna+",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "buna",    BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPCCOM, { CR, BDA } },
-{ "bunla-",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bunla+",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bunla",   BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPCCOM, { CR, BDA } },
-{ "bge-",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bge+",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bge",     BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "bgel-",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bgel+",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bgel",    BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "bgea-",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bgea+",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bgea",    BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bgela-",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bgela+",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bgela",   BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bnl-",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bnl+",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bnl",     BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "bnll-",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bnll+",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bnll",    BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "bnla-",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnla+",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnla",    BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bnlla-",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnlla+",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnlla",   BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "ble-",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "ble+",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "ble",     BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "blel-",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "blel+",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "blel",    BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "blea-",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "blea+",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "blea",    BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "blela-",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "blela+",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "blela",   BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bng-",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bng+",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bng",     BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "bngl-",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bngl+",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bngl",    BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "bnga-",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnga+",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnga",    BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bngla-",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bngla+",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bngla",   BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bne-",    BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bne+",    BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bne",     BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "bnel-",   BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bnel+",   BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bnel",    BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "bnea-",   BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnea+",   BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnea",    BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bnela-",  BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnela+",  BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnela",   BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bns-",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bns+",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bns",     BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, COM, { CR, BD } },
-{ "bnsl-",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bnsl+",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bnsl",    BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, COM, { CR, BD } },
-{ "bnsa-",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnsa+",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnsa",    BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bnsla-",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnsla+",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnsla",   BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, COM, { CR, BDA } },
-{ "bnu-",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bnu+",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bnu",     BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPCCOM, { CR, BD } },
-{ "bnul-",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
-{ "bnul+",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
-{ "bnul",    BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPCCOM, { CR, BD } },
-{ "bnua-",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnua+",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnua",    BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPCCOM, { CR, BDA } },
-{ "bnula-",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
-{ "bnula+",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
-{ "bnula",   BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPCCOM, { CR, BDA } },
-{ "bdnzt-",  BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BDM } },
-{ "bdnzt+",  BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BDP } },
-{ "bdnzt",   BBO(16,BODNZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BDM } },
-{ "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BDP } },
-{ "bdnztl",  BBO(16,BODNZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bdnzta",  BBO(16,BODNZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bdnzf-",  BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BDM } },
-{ "bdnzf+",  BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BDP } },
-{ "bdnzf",   BBO(16,BODNZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BDM } },
-{ "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BDP } },
-{ "bdnzfl",  BBO(16,BODNZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bdnzfa",  BBO(16,BODNZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bt-",     BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BDM } },
-{ "bt+",     BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BDP } },
-{ "bt",     BBO(16,BOT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bbt",     BBO(16,BOT,0,0), BBOY_MASK, PWRCOM, { BI, BD } },
-{ "btl-",    BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BDM } },
-{ "btl+",    BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BDP } },
-{ "btl",     BBO(16,BOT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bbtl",    BBO(16,BOT,0,1), BBOY_MASK, PWRCOM, { BI, BD } },
-{ "bta-",    BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bta+",    BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bta",     BBO(16,BOT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bbta",    BBO(16,BOT,1,0), BBOY_MASK, PWRCOM, { BI, BDA } },
-{ "btla-",   BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
-{ "btla+",   BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
-{ "btla",    BBO(16,BOT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bbtla",   BBO(16,BOT,1,1), BBOY_MASK, PWRCOM, { BI, BDA } },
-{ "bf-",     BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BDM } },
-{ "bf+",     BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BDP } },
-{ "bf",     BBO(16,BOF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bbf",     BBO(16,BOF,0,0), BBOY_MASK, PWRCOM, { BI, BD } },
-{ "bfl-",    BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BDM } },
-{ "bfl+",    BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BDP } },
-{ "bfl",     BBO(16,BOF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bbfl",    BBO(16,BOF,0,1), BBOY_MASK, PWRCOM, { BI, BD } },
-{ "bfa-",    BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bfa+",    BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bfa",     BBO(16,BOF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bbfa",    BBO(16,BOF,1,0), BBOY_MASK, PWRCOM, { BI, BDA } },
-{ "bfla-",   BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bfla+",   BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bfla",    BBO(16,BOF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bbfla",   BBO(16,BOF,1,1), BBOY_MASK, PWRCOM, { BI, BDA } },
-{ "bdzt-",   BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BDM } },
-{ "bdzt+",   BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BDP } },
-{ "bdzt",    BBO(16,BODZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bdztl-",  BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BDM } },
-{ "bdztl+",  BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BDP } },
-{ "bdztl",   BBO(16,BODZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bdzta-",  BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bdzta+",  BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bdzta",   BBO(16,BODZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bdztla",  BBO(16,BODZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bdzf-",   BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BDM } },
-{ "bdzf+",   BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BDP } },
-{ "bdzf",    BBO(16,BODZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bdzfl-",  BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BDM } },
-{ "bdzfl+",  BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BDP } },
-{ "bdzfl",   BBO(16,BODZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
-{ "bdzfa-",  BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bdzfa+",  BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bdzfa",   BBO(16,BODZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
-{ "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
-{ "bdzfla",  BBO(16,BODZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
-{ "bc-",     B(16,0,0), B_MASK, PPC, { BOE, BI, BDM } },
-{ "bc+",     B(16,0,0), B_MASK, PPC, { BOE, BI, BDP } },
-{ "bc",     B(16,0,0), B_MASK, COM, { BO, BI, BD } },
-{ "bcl-",    B(16,0,1), B_MASK, PPC, { BOE, BI, BDM } },
-{ "bcl+",    B(16,0,1), B_MASK, PPC, { BOE, BI, BDP } },
-{ "bcl",     B(16,0,1), B_MASK, COM, { BO, BI, BD } },
-{ "bca-",    B(16,1,0), B_MASK, PPC, { BOE, BI, BDMA } },
-{ "bca+",    B(16,1,0), B_MASK, PPC, { BOE, BI, BDPA } },
-{ "bca",     B(16,1,0), B_MASK, COM, { BO, BI, BDA } },
-{ "bcla-",   B(16,1,1), B_MASK, PPC, { BOE, BI, BDMA } },
-{ "bcla+",   B(16,1,1), B_MASK, PPC, { BOE, BI, BDPA } },
-{ "bcla",    B(16,1,1), B_MASK, COM, { BO, BI, BDA } },
-
-{ "sc",      SC(17,1,0), 0xffffffff, PPC, { 0 } },
-{ "svc",     SC(17,0,0), SC_MASK, POWER, { LEV, FL1, FL2 } },
-{ "svcl",    SC(17,0,1), SC_MASK, POWER, { LEV, FL1, FL2 } },
-{ "svca",    SC(17,1,0), SC_MASK, PWRCOM, { SV } },
-{ "svcla",   SC(17,1,1), SC_MASK, POWER, { SV } },
-
-{ "b",     B(18,0,0), B_MASK, COM, { LI } },
-{ "bl",      B(18,0,1), B_MASK, COM, { LI } },
-{ "ba",      B(18,1,0), B_MASK, COM, { LIA } },
-{ "bla",     B(18,1,1), B_MASK, COM, { LIA } },
-
-{ "mcrf",    XL(19,0), XLBB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
-
-{ "blr",     XLO(19,BOU,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
-{ "br",      XLO(19,BOU,16,0), XLBOBIBB_MASK, PWRCOM, { 0 } },
-{ "blrl",    XLO(19,BOU,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
-{ "brl",     XLO(19,BOU,16,1), XLBOBIBB_MASK, PWRCOM, { 0 } },
-{ "bdnzlr",  XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
-{ "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPC, { 0 } },
-{ "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, PPC, { 0 } },
-{ "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
-{ "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPC, { 0 } },
-{ "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, PPC, { 0 } },
-{ "bdzlr",   XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
-{ "bdzlr-",  XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPC, { 0 } },
-{ "bdzlr+",  XLO(19,BODZP,16,0), XLBOBIBB_MASK, PPC, { 0 } },
-{ "bdzlrl",  XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
-{ "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPC, { 0 } },
-{ "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, PPC, { 0 } },
-{ "bltlr",   XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bltlr-",  XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bltlr+",  XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bltr",    XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bltlrl",  XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bltrl",   XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bgtlr",   XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bgtlr-",  XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgtlr+",  XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgtr",    XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bgtlrl",  XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgtrl",   XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "beqlr",   XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "beqlr-",  XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "beqlr+",  XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "beqr",    XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "beqlrl",  XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "beqrl",   XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bsolr",   XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bsolr-",  XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bsolr+",  XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bsor",    XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bsolrl",  XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bsorl",   XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bunlr",   XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bunlr-",  XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bunlr+",  XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bunlrl",  XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgelr",   XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bgelr-",  XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgelr+",  XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bger",    XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bgelrl",  XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgerl",   XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnllr",   XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnllr-",  XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnllr+",  XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnlr",    XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnllrl",  XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnlrl",   XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "blelr",   XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "blelr-",  XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "blelr+",  XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bler",    XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "blelrl",  XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "blerl",   XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnglr",   XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnglr-",  XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnglr+",  XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bngr",    XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnglrl",  XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bngrl",   XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnelr",   XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnelr-",  XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnelr+",  XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bner",    XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnelrl",  XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnerl",   XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnslr",   XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnslr-",  XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnslr+",  XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnsr",    XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnslrl",  XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnsrl",   XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
-{ "bnulr",   XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnulr-",  XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnulr+",  XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnulrl",  XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "btlr",    XLO(19,BOT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
-{ "btlr-",   XLO(19,BOT,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "btlr+",   XLO(19,BOTP,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bbtr",    XLO(19,BOT,16,0), XLBOBB_MASK, PWRCOM, { BI } },
-{ "btlrl",   XLO(19,BOT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
-{ "btlrl-",  XLO(19,BOT,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "btlrl+",  XLO(19,BOTP,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bbtrl",   XLO(19,BOT,16,1), XLBOBB_MASK, PWRCOM, { BI } },
-{ "bflr",    XLO(19,BOF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bflr-",   XLO(19,BOF,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bflr+",   XLO(19,BOFP,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bbfr",    XLO(19,BOF,16,0), XLBOBB_MASK, PWRCOM, { BI } },
-{ "bflrl",   XLO(19,BOF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bflrl-",  XLO(19,BOF,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bflrl+",  XLO(19,BOFP,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bbfrl",   XLO(19,BOF,16,1), XLBOBB_MASK, PWRCOM, { BI } },
-{ "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bdztlr",  XLO(19,BODZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bdzflr",  XLO(19,BODZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, PPC, { BI } },
-{ "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
-{ "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, PPC, { BI } },
-{ "bclr",    XLLK(19,16,0), XLYBB_MASK, PPCCOM, { BO, BI } },
-{ "bclrl",   XLLK(19,16,1), XLYBB_MASK, PPCCOM, { BO, BI } },
-{ "bclr+",   XLYLK(19,16,1,0), XLYBB_MASK, PPC, { BOE, BI } },
-{ "bclrl+",  XLYLK(19,16,1,1), XLYBB_MASK, PPC, { BOE, BI } },
-{ "bclr-",   XLYLK(19,16,0,0), XLYBB_MASK, PPC, { BOE, BI } },
-{ "bclrl-",  XLYLK(19,16,0,1), XLYBB_MASK, PPC, { BOE, BI } },
-{ "bcr",     XLLK(19,16,0), XLBB_MASK, PWRCOM, { BO, BI } },
-{ "bcrl",    XLLK(19,16,1), XLBB_MASK, PWRCOM, { BO, BI } },
-
-{ "crnot",   XL(19,33), XL_MASK, PPCCOM, { BT, BA, BBA } },
-{ "crnor",   XL(19,33), XL_MASK, COM, { BT, BA, BB } },
-
-{ "rfi",     XL(19,50), 0xffffffff, COM, { 0 } },
-{ "rfci",    XL(19,51), 0xffffffff, PPC, { 0 } },
-
-{ "rfsvc",   XL(19,82), 0xffffffff, POWER, { 0 } },
-
-{ "crandc",  XL(19,129), XL_MASK, COM, { BT, BA, BB } },
-
-{ "isync",   XL(19,150), 0xffffffff, PPCCOM, { 0 } },
-{ "ics",     XL(19,150), 0xffffffff, PWRCOM, { 0 } },
-
-{ "crclr",   XL(19,193), XL_MASK, PPCCOM, { BT, BAT, BBA } },
-{ "crxor",   XL(19,193), XL_MASK, COM, { BT, BA, BB } },
-
-{ "crnand",  XL(19,225), XL_MASK, COM, { BT, BA, BB } },
-
-{ "crand",   XL(19,257), XL_MASK, COM, { BT, BA, BB } },
-
-{ "crset",   XL(19,289), XL_MASK, PPCCOM, { BT, BAT, BBA } },
-{ "creqv",   XL(19,289), XL_MASK, COM, { BT, BA, BB } },
-
-{ "crorc",   XL(19,417), XL_MASK, COM, { BT, BA, BB } },
-
-{ "crmove",  XL(19,449), XL_MASK, PPCCOM, { BT, BA, BBA } },
-{ "cror",    XL(19,449), XL_MASK, COM, { BT, BA, BB } },
-
-{ "bctr",    XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } },
-{ "bctrl",   XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } },
-{ "bltctr",  XLOCB(19,BOT,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bltctr-", XLOCB(19,BOT,CBLT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bltctrl", XLOCB(19,BOT,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bltctrl-",XLOCB(19,BOT,CBLT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgtctr",  XLOCB(19,BOT,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bgtctr-", XLOCB(19,BOT,CBGT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgtctrl", XLOCB(19,BOT,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bgtctrl-",XLOCB(19,BOT,CBGT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "beqctr",  XLOCB(19,BOT,CBEQ,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "beqctr-", XLOCB(19,BOT,CBEQ,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "beqctrl", XLOCB(19,BOT,CBEQ,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "beqctrl-",XLOCB(19,BOT,CBEQ,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bsoctr",  XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bsoctr-", XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bsoctrl", XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bsoctrl-",XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bunctr",  XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bunctr-", XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bunctrl", XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bunctrl-",XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgectr",  XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bgectr-", XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bgectrl", XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bgectrl-",XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnlctr",  XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnlctr-", XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnlctrl", XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnlctrl-",XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "blectr",  XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "blectr-", XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "blectrl", XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "blectrl-",XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bngctr",  XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bngctr-", XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bngctrl", XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bngctrl-",XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnectr",  XLOCB(19,BOF,CBEQ,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnectr-", XLOCB(19,BOF,CBEQ,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnectrl", XLOCB(19,BOF,CBEQ,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnectrl-",XLOCB(19,BOF,CBEQ,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnsctr",  XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnsctr-", XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnsctrl", XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnsctrl-",XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnuctr",  XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnuctr-", XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bnuctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
-{ "bnuctrl", XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
-{ "bnuctrl-",XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPC, { CR } },
-{ "bnuctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
-{ "btctr",   XLO(19,BOT,528,0),  XLBOBB_MASK, PPCCOM, { BI } },
-{ "btctr-",  XLO(19,BOT,528,0),  XLBOBB_MASK, PPC, { BI } },
-{ "btctr+",  XLO(19,BOTP,528,0), XLBOBB_MASK, PPC, { BI } },
-{ "btctrl",  XLO(19,BOT,528,1),  XLBOBB_MASK, PPCCOM, { BI } },
-{ "btctrl-", XLO(19,BOT,528,1),  XLBOBB_MASK, PPC, { BI } },
-{ "btctrl+", XLO(19,BOTP,528,1), XLBOBB_MASK, PPC, { BI } },
-{ "bfctr",   XLO(19,BOF,528,0),  XLBOBB_MASK, PPCCOM, { BI } },
-{ "bfctr-",  XLO(19,BOF,528,0),  XLBOBB_MASK, PPC, { BI } },
-{ "bfctr+",  XLO(19,BOFP,528,0), XLBOBB_MASK, PPC, { BI } },
-{ "bfctrl",  XLO(19,BOF,528,1),  XLBOBB_MASK, PPCCOM, { BI } },
-{ "bfctrl-", XLO(19,BOF,528,1),  XLBOBB_MASK, PPC, { BI } },
-{ "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, PPC, { BI } },
-{ "bcctr",   XLLK(19,528,0),     XLYBB_MASK,  PPCCOM, { BO, BI } },
-{ "bcctr-",  XLYLK(19,528,0,0),  XLYBB_MASK,  PPC, { BOE, BI } },
-{ "bcctr+",  XLYLK(19,528,1,0),  XLYBB_MASK,  PPC, { BOE, BI } },
-{ "bcctrl",  XLLK(19,528,1),     XLYBB_MASK,  PPCCOM, { BO, BI } },
-{ "bcctrl-", XLYLK(19,528,0,1),  XLYBB_MASK,  PPC, { BOE, BI } },
-{ "bcctrl+", XLYLK(19,528,1,1),  XLYBB_MASK,  PPC, { BOE, BI } },
-{ "bcc",     XLLK(19,528,0),     XLBB_MASK,   PWRCOM, { BO, BI } },
-{ "bccl",    XLLK(19,528,1),     XLBB_MASK,   PWRCOM, { BO, BI } },
-
-{ "rlwimi",  M(20,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
-{ "rlimi",   M(20,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
-
-{ "rlwimi.", M(20,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
-{ "rlimi.",  M(20,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
-
-{ "rotlwi",  MME(21,31,0), MMBME_MASK, PPCCOM, { RA, RS, SH } },
-{ "clrlwi",  MME(21,31,0), MSHME_MASK, PPCCOM, { RA, RS, MB } },
-{ "rlwinm",  M(21,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
-{ "rlinm",   M(21,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
-{ "rotlwi.", MME(21,31,1), MMBME_MASK, PPCCOM, { RA,RS,SH } },
-{ "clrlwi.", MME(21,31,1), MSHME_MASK, PPCCOM, { RA, RS, MB } },
-{ "rlwinm.", M(21,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
-{ "rlinm.",  M(21,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
-
-{ "rlmi",    M(22,0), M_MASK, M601, { RA,RS,RB,MBE,ME } },
-{ "rlmi.",   M(22,1), M_MASK, M601, { RA,RS,RB,MBE,ME } },
-
-{ "rotlw",   MME(23,31,0), MMBME_MASK, PPCCOM, { RA, RS, RB } },
-{ "rlwnm",   M(23,0), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
-{ "rlnm",    M(23,0), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } },
-{ "rotlw.",  MME(23,31,1), MMBME_MASK, PPCCOM, { RA, RS, RB } },
-{ "rlwnm.",  M(23,1), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
-{ "rlnm.",   M(23,1), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } },
-
-{ "nop",     OP(24), 0xffffffff, PPCCOM, { 0 } },
-{ "ori",     OP(24), OP_MASK, PPCCOM, { RA, RS, UI } },
-{ "oril",    OP(24), OP_MASK, PWRCOM, { RA, RS, UI } },
-
-{ "oris",    OP(25), OP_MASK, PPCCOM, { RA, RS, UI } },
-{ "oriu",    OP(25), OP_MASK, PWRCOM, { RA, RS, UI } },
-
-{ "xori",    OP(26), OP_MASK, PPCCOM, { RA, RS, UI } },
-{ "xoril",   OP(26), OP_MASK, PWRCOM, { RA, RS, UI } },
-
-{ "xoris",   OP(27), OP_MASK, PPCCOM, { RA, RS, UI } },
-{ "xoriu",   OP(27), OP_MASK, PWRCOM, { RA, RS, UI } },
-
-{ "andi.",   OP(28), OP_MASK, PPCCOM, { RA, RS, UI } },
-{ "andil.",  OP(28), OP_MASK, PWRCOM, { RA, RS, UI } },
-
-{ "andis.",  OP(29), OP_MASK, PPCCOM, { RA, RS, UI } },
-{ "andiu.",  OP(29), OP_MASK, PWRCOM, { RA, RS, UI } },
-
-{ "rotldi",  MD(30,0,0), MDMB_MASK, PPC64, { RA, RS, SH6 } },
-{ "clrldi",  MD(30,0,0), MDSH_MASK, PPC64, { RA, RS, MB6 } },
-{ "rldicl",  MD(30,0,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
-{ "rotldi.", MD(30,0,1), MDMB_MASK, PPC64, { RA, RS, SH6 } },
-{ "clrldi.", MD(30,0,1), MDSH_MASK, PPC64, { RA, RS, MB6 } },
-{ "rldicl.", MD(30,0,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
-
-{ "rldicr",  MD(30,1,0), MD_MASK, PPC64, { RA, RS, SH6, ME6 } },
-{ "rldicr.", MD(30,1,1), MD_MASK, PPC64, { RA, RS, SH6, ME6 } },
-
-{ "rldic",   MD(30,2,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
-{ "rldic.",  MD(30,2,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
-
-{ "rldimi",  MD(30,3,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
-{ "rldimi.", MD(30,3,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
-
-{ "rotld",   MDS(30,8,0), MDSMB_MASK, PPC64, { RA, RS, RB } },
-{ "rldcl",   MDS(30,8,0), MDS_MASK, PPC64, { RA, RS, RB, MB6 } },
-{ "rotld.",  MDS(30,8,1), MDSMB_MASK, PPC64, { RA, RS, RB } },
-{ "rldcl.",  MDS(30,8,1), MDS_MASK, PPC64, { RA, RS, RB, MB6 } },
-
-{ "rldcr",   MDS(30,9,0), MDS_MASK, PPC64, { RA, RS, RB, ME6 } },
-{ "rldcr.",  MDS(30,9,1), MDS_MASK, PPC64, { RA, RS, RB, ME6 } },
-
-{ "cmpw",    XCMPL(31,0,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
-{ "cmpd",    XCMPL(31,0,1), XCMPL_MASK, PPC64, { OBF, RA, RB } },
-{ "cmp",     X(31,0), XCMP_MASK, PPCONLY, { BF, L, RA, RB } },
-{ "cmp",     X(31,0), XCMPL_MASK, PWRCOM, { BF, RA, RB } },
-
-{ "twlgt",   XTO(31,4,TOLGT), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tlgt",    XTO(31,4,TOLGT), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twllt",   XTO(31,4,TOLLT), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tllt",    XTO(31,4,TOLLT), XTO_MASK, PWRCOM, { RA, RB } },
-{ "tweq",    XTO(31,4,TOEQ), XTO_MASK, PPCCOM, { RA, RB } },
-{ "teq",     XTO(31,4,TOEQ), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twlge",   XTO(31,4,TOLGE), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tlge",    XTO(31,4,TOLGE), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twlnl",   XTO(31,4,TOLNL), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tlnl",    XTO(31,4,TOLNL), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twlle",   XTO(31,4,TOLLE), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tlle",    XTO(31,4,TOLLE), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twlng",   XTO(31,4,TOLNG), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tlng",    XTO(31,4,TOLNG), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twgt",    XTO(31,4,TOGT), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tgt",     XTO(31,4,TOGT), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twge",    XTO(31,4,TOGE), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tge",     XTO(31,4,TOGE), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twnl",    XTO(31,4,TONL), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tnl",     XTO(31,4,TONL), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twlt",    XTO(31,4,TOLT), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tlt",     XTO(31,4,TOLT), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twle",    XTO(31,4,TOLE), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tle",     XTO(31,4,TOLE), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twng",    XTO(31,4,TONG), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tng",     XTO(31,4,TONG), XTO_MASK, PWRCOM, { RA, RB } },
-{ "twne",    XTO(31,4,TONE), XTO_MASK, PPCCOM, { RA, RB } },
-{ "tne",     XTO(31,4,TONE), XTO_MASK, PWRCOM, { RA, RB } },
-{ "trap",    XTO(31,4,TOU), 0xffffffff, PPCCOM, { 0 } },
-{ "tw",      X(31,4), X_MASK, PPCCOM, { TO, RA, RB } },
-{ "t",       X(31,4), X_MASK, PWRCOM, { TO, RA, RB } },
-
-{ "subfc",   XO(31,8,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "sf",      XO(31,8,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "subc",    XO(31,8,0,0), XO_MASK, PPC, { RT, RB, RA } },
-{ "subfc.",  XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "sf.",     XO(31,8,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "subc.",   XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RB, RA } },
-{ "subfco",  XO(31,8,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "sfo",     XO(31,8,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "subco",   XO(31,8,1,0), XO_MASK, PPC, { RT, RB, RA } },
-{ "subfco.", XO(31,8,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "sfo.",    XO(31,8,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "subco.",  XO(31,8,1,1), XO_MASK, PPC, { RT, RB, RA } },
-
-{ "mulhdu",  XO(31,9,0,0), XO_MASK, PPC64, { RT, RA, RB } },
-{ "mulhdu.", XO(31,9,0,1), XO_MASK, PPC64, { RT, RA, RB } },
-
-{ "addc",    XO(31,10,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "a",       XO(31,10,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "addc.",   XO(31,10,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "a.",      XO(31,10,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "addco",   XO(31,10,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "ao",      XO(31,10,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "addco.",  XO(31,10,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "ao.",     XO(31,10,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "mulhwu",  XO(31,11,0,0), XO_MASK, PPC, { RT, RA, RB } },
-{ "mulhwu.", XO(31,11,0,1), XO_MASK, PPC, { RT, RA, RB } },
-
-{ "mfcr",    X(31,19), XRARB_MASK, COM, { RT } },
-
-{ "lwarx",   X(31,20), X_MASK, PPC, { RT, RA, RB } },
-
-{ "ldx",     X(31,21), X_MASK, PPC64, { RT, RA, RB } },
-
-{ "lwzx",    X(31,23), X_MASK, PPCCOM, { RT, RA, RB } },
-{ "lx",      X(31,23), X_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "slw",     XRC(31,24,0), X_MASK, PPCCOM, { RA, RS, RB } },
-{ "sl",      XRC(31,24,0), X_MASK, PWRCOM, { RA, RS, RB } },
-{ "slw.",    XRC(31,24,1), X_MASK, PPCCOM, { RA, RS, RB } },
-{ "sl.",     XRC(31,24,1), X_MASK, PWRCOM, { RA, RS, RB } },
-
-{ "cntlzw",  XRC(31,26,0), XRB_MASK, PPCCOM, { RA, RS } },
-{ "cntlz",   XRC(31,26,0), XRB_MASK, PWRCOM, { RA, RS } },
-{ "cntlzw.", XRC(31,26,1), XRB_MASK, PPCCOM, { RA, RS } },
-{ "cntlz.",  XRC(31,26,1), XRB_MASK, PWRCOM, { RA, RS } },
-
-{ "sld",     XRC(31,27,0), X_MASK, PPC64, { RA, RS, RB } },
-{ "sld.",    XRC(31,27,1), X_MASK, PPC64, { RA, RS, RB } },
-
-{ "and",     XRC(31,28,0), X_MASK, COM, { RA, RS, RB } },
-{ "and.",    XRC(31,28,1), X_MASK, COM, { RA, RS, RB } },
-
-{ "maskg",   XRC(31,29,0), X_MASK, M601, { RA, RS, RB } },
-{ "maskg.",  XRC(31,29,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "cmplw",   XCMPL(31,32,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
-{ "cmpld",   XCMPL(31,32,1), XCMPL_MASK, PPC64, { OBF, RA, RB } },
-{ "cmpl",    X(31,32), XCMP_MASK, PPCONLY, { BF, L, RA, RB } },
-{ "cmpl",    X(31,32), XCMPL_MASK, PWRCOM, { BF, RA, RB } },
-
-{ "subf",    XO(31,40,0,0), XO_MASK, PPC, { RT, RA, RB } },
-{ "sub",     XO(31,40,0,0), XO_MASK, PPC, { RT, RB, RA } },
-{ "subf.",   XO(31,40,0,1), XO_MASK, PPC, { RT, RA, RB } },
-{ "sub.",    XO(31,40,0,1), XO_MASK, PPC, { RT, RB, RA } },
-{ "subfo",   XO(31,40,1,0), XO_MASK, PPC, { RT, RA, RB } },
-{ "subo",    XO(31,40,1,0), XO_MASK, PPC, { RT, RB, RA } },
-{ "subfo.",  XO(31,40,1,1), XO_MASK, PPC, { RT, RA, RB } },
-{ "subo.",   XO(31,40,1,1), XO_MASK, PPC, { RT, RB, RA } },
-
-{ "ldux",    X(31,53), X_MASK, PPC64, { RT, RAL, RB } },
-
-{ "dcbst",   X(31,54), XRT_MASK, PPC, { RA, RB } },
-
-{ "lwzux",   X(31,55), X_MASK, PPCCOM, { RT, RAL, RB } },
-{ "lux",     X(31,55), X_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "cntlzd",  XRC(31,58,0), XRB_MASK, PPC64, { RA, RS } },
-{ "cntlzd.", XRC(31,58,1), XRB_MASK, PPC64, { RA, RS } },
-
-{ "andc",    XRC(31,60,0), X_MASK, COM, { RA, RS, RB } },
-{ "andc.",   XRC(31,60,1), X_MASK, COM, { RA, RS, RB } },
-
-{ "tdlgt",   XTO(31,68,TOLGT), XTO_MASK, PPC64, { RA, RB } },
-{ "tdllt",   XTO(31,68,TOLLT), XTO_MASK, PPC64, { RA, RB } },
-{ "tdeq",    XTO(31,68,TOEQ), XTO_MASK,  PPC64, { RA, RB } },
-{ "tdlge",   XTO(31,68,TOLGE), XTO_MASK, PPC64, { RA, RB } },
-{ "tdlnl",   XTO(31,68,TOLNL), XTO_MASK, PPC64, { RA, RB } },
-{ "tdlle",   XTO(31,68,TOLLE), XTO_MASK, PPC64, { RA, RB } },
-{ "tdlng",   XTO(31,68,TOLNG), XTO_MASK, PPC64, { RA, RB } },
-{ "tdgt",    XTO(31,68,TOGT), XTO_MASK,  PPC64, { RA, RB } },
-{ "tdge",    XTO(31,68,TOGE), XTO_MASK,  PPC64, { RA, RB } },
-{ "tdnl",    XTO(31,68,TONL), XTO_MASK,  PPC64, { RA, RB } },
-{ "tdlt",    XTO(31,68,TOLT), XTO_MASK,  PPC64, { RA, RB } },
-{ "tdle",    XTO(31,68,TOLE), XTO_MASK,  PPC64, { RA, RB } },
-{ "tdng",    XTO(31,68,TONG), XTO_MASK,  PPC64, { RA, RB } },
-{ "tdne",    XTO(31,68,TONE), XTO_MASK,  PPC64, { RA, RB } },
-{ "td",     X(31,68), X_MASK, PPC64, { TO, RA, RB } },
-
-{ "mulhd",   XO(31,73,0,0), XO_MASK, PPC64, { RT, RA, RB } },
-{ "mulhd.",  XO(31,73,0,1), XO_MASK, PPC64, { RT, RA, RB } },
-
-{ "mulhw",   XO(31,75,0,0), XO_MASK, PPC, { RT, RA, RB } },
-{ "mulhw.",  XO(31,75,0,1), XO_MASK, PPC, { RT, RA, RB } },
-
-{ "mfmsr",   X(31,83), XRARB_MASK, COM, { RT } },
-
-{ "ldarx",   X(31,84), X_MASK, PPC64, { RT, RA, RB } },
-
-{ "dcbf",    X(31,86), XRT_MASK, PPC, { RA, RB } },
-
-{ "lbzx",    X(31,87), X_MASK, COM, { RT, RA, RB } },
-
-{ "neg",     XO(31,104,0,0), XORB_MASK, COM, { RT, RA } },
-{ "neg.",    XO(31,104,0,1), XORB_MASK, COM, { RT, RA } },
-{ "nego",    XO(31,104,1,0), XORB_MASK, COM, { RT, RA } },
-{ "nego.",   XO(31,104,1,1), XORB_MASK, COM, { RT, RA } },
-
-{ "mul",     XO(31,107,0,0), XO_MASK, M601, { RT, RA, RB } },
-{ "mul.",    XO(31,107,0,1), XO_MASK, M601, { RT, RA, RB } },
-{ "mulo",    XO(31,107,1,0), XO_MASK, M601, { RT, RA, RB } },
-{ "mulo.",   XO(31,107,1,1), XO_MASK, M601, { RT, RA, RB } },
-
-{ "clf",     X(31,118), XRB_MASK, POWER, { RT, RA } },
-
-{ "lbzux",   X(31,119), X_MASK, COM, { RT, RAL, RB } },
-
-{ "not",     XRC(31,124,0), X_MASK, COM, { RA, RS, RBS } },
-{ "nor",     XRC(31,124,0), X_MASK, COM, { RA, RS, RB } },
-{ "not.",    XRC(31,124,1), X_MASK, COM, { RA, RS, RBS } },
-{ "nor.",    XRC(31,124,1), X_MASK, COM, { RA, RS, RB } },
-
-{ "subfe",   XO(31,136,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "sfe",     XO(31,136,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "subfe.",  XO(31,136,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "sfe.",    XO(31,136,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "subfeo",  XO(31,136,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "sfeo",    XO(31,136,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "subfeo.", XO(31,136,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "sfeo.",   XO(31,136,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "adde",    XO(31,138,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "ae",      XO(31,138,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "adde.",   XO(31,138,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "ae.",     XO(31,138,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "addeo",   XO(31,138,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "aeo",     XO(31,138,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "addeo.",  XO(31,138,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "aeo.",    XO(31,138,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "mtcr",    XFXM(31,144,0xff), XFXFXM_MASK|FXM_MASK, COM, { RS }},
-{ "mtcrf",   X(31,144), XFXFXM_MASK, COM, { FXM, RS } },
-
-{ "mtmsr",   X(31,146), XRARB_MASK, COM, { RS } },
-
-{ "stdx",    X(31,149), X_MASK, PPC64, { RS, RA, RB } },
-
-{ "stwcx.",  XRC(31,150,1), X_MASK, PPC, { RS, RA, RB } },
-
-{ "stwx",    X(31,151), X_MASK, PPCCOM, { RS, RA, RB } },
-{ "stx",     X(31,151), X_MASK, PWRCOM, { RS, RA, RB } },
-
-{ "slq",     XRC(31,152,0), X_MASK, M601, { RA, RS, RB } },
-{ "slq.",    XRC(31,152,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "sle",     XRC(31,153,0), X_MASK, M601, { RA, RS, RB } },
-{ "sle.",    XRC(31,153,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "stdux",   X(31,181), X_MASK, PPC64, { RS, RAS, RB } },
-
-{ "stwux",   X(31,183), X_MASK, PPCCOM, { RS, RAS, RB } },
-{ "stux",    X(31,183), X_MASK, PWRCOM, { RS, RA, RB } },
-
-{ "sliq",    XRC(31,184,0), X_MASK, M601, { RA, RS, SH } },
-{ "sliq.",   XRC(31,184,1), X_MASK, M601, { RA, RS, SH } },
-
-{ "subfze",  XO(31,200,0,0), XORB_MASK, PPCCOM, { RT, RA } },
-{ "sfze",    XO(31,200,0,0), XORB_MASK, PWRCOM, { RT, RA } },
-{ "subfze.", XO(31,200,0,1), XORB_MASK, PPCCOM, { RT, RA } },
-{ "sfze.",   XO(31,200,0,1), XORB_MASK, PWRCOM, { RT, RA } },
-{ "subfzeo", XO(31,200,1,0), XORB_MASK, PPCCOM, { RT, RA } },
-{ "sfzeo",   XO(31,200,1,0), XORB_MASK, PWRCOM, { RT, RA } },
-{ "subfzeo.",XO(31,200,1,1), XORB_MASK, PPCCOM, { RT, RA } },
-{ "sfzeo.",  XO(31,200,1,1), XORB_MASK, PWRCOM, { RT, RA } },
-
-{ "addze",   XO(31,202,0,0), XORB_MASK, PPCCOM, { RT, RA } },
-{ "aze",     XO(31,202,0,0), XORB_MASK, PWRCOM, { RT, RA } },
-{ "addze.",  XO(31,202,0,1), XORB_MASK, PPCCOM, { RT, RA } },
-{ "aze.",    XO(31,202,0,1), XORB_MASK, PWRCOM, { RT, RA } },
-{ "addzeo",  XO(31,202,1,0), XORB_MASK, PPCCOM, { RT, RA } },
-{ "azeo",    XO(31,202,1,0), XORB_MASK, PWRCOM, { RT, RA } },
-{ "addzeo.", XO(31,202,1,1), XORB_MASK, PPCCOM, { RT, RA } },
-{ "azeo.",   XO(31,202,1,1), XORB_MASK, PWRCOM, { RT, RA } },
-
-{ "mtsr",    X(31,210), XRB_MASK|(1<<20), COM32, { SR, RS } },
-
-{ "stdcx.",  XRC(31,214,1), X_MASK, PPC64, { RS, RA, RB } },
-
-{ "stbx",    X(31,215), X_MASK, COM, { RS, RA, RB } },
-
-{ "sllq",    XRC(31,216,0), X_MASK, M601, { RA, RS, RB } },
-{ "sllq.",   XRC(31,216,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "sleq",    XRC(31,217,0), X_MASK, M601, { RA, RS, RB } },
-{ "sleq.",   XRC(31,217,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "subfme",  XO(31,232,0,0), XORB_MASK, PPCCOM, { RT, RA } },
-{ "sfme",    XO(31,232,0,0), XORB_MASK, PWRCOM, { RT, RA } },
-{ "subfme.", XO(31,232,0,1), XORB_MASK, PPCCOM, { RT, RA } },
-{ "sfme.",   XO(31,232,0,1), XORB_MASK, PWRCOM, { RT, RA } },
-{ "subfmeo", XO(31,232,1,0), XORB_MASK, PPCCOM, { RT, RA } },
-{ "sfmeo",   XO(31,232,1,0), XORB_MASK, PWRCOM, { RT, RA } },
-{ "subfmeo.",XO(31,232,1,1), XORB_MASK, PPCCOM, { RT, RA } },
-{ "sfmeo.",  XO(31,232,1,1), XORB_MASK, PWRCOM, { RT, RA } },
-
-{ "mulld",   XO(31,233,0,0), XO_MASK, PPC64, { RT, RA, RB } },
-{ "mulld.",  XO(31,233,0,1), XO_MASK, PPC64, { RT, RA, RB } },
-{ "mulldo",  XO(31,233,1,0), XO_MASK, PPC64, { RT, RA, RB } },
-{ "mulldo.", XO(31,233,1,1), XO_MASK, PPC64, { RT, RA, RB } },
-
-{ "addme",   XO(31,234,0,0), XORB_MASK, PPCCOM, { RT, RA } },
-{ "ame",     XO(31,234,0,0), XORB_MASK, PWRCOM, { RT, RA } },
-{ "addme.",  XO(31,234,0,1), XORB_MASK, PPCCOM, { RT, RA } },
-{ "ame.",    XO(31,234,0,1), XORB_MASK, PWRCOM, { RT, RA } },
-{ "addmeo",  XO(31,234,1,0), XORB_MASK, PPCCOM, { RT, RA } },
-{ "ameo",    XO(31,234,1,0), XORB_MASK, PWRCOM, { RT, RA } },
-{ "addmeo.", XO(31,234,1,1), XORB_MASK, PPCCOM, { RT, RA } },
-{ "ameo.",   XO(31,234,1,1), XORB_MASK, PWRCOM, { RT, RA } },
-
-{ "mullw",   XO(31,235,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "muls",    XO(31,235,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "mullw.",  XO(31,235,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "muls.",   XO(31,235,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "mullwo",  XO(31,235,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "mulso",   XO(31,235,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "mullwo.", XO(31,235,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "mulso.",  XO(31,235,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "mtsrin",  X(31,242), XRA_MASK, PPC32, { RS, RB } },
-{ "mtsri",   X(31,242), XRA_MASK, POWER32, { RS, RB } },
-
-{ "dcbtst",  X(31,246), XRT_MASK, PPC, { RA, RB } },
-
-{ "stbux",   X(31,247), X_MASK, COM, { RS, RAS, RB } },
-
-{ "slliq",   XRC(31,248,0), X_MASK, M601, { RA, RS, SH } },
-{ "slliq.",  XRC(31,248,1), X_MASK, M601, { RA, RS, SH } },
-
-{ "doz",     XO(31,264,0,0), XO_MASK, M601, { RT, RA, RB } },
-{ "doz.",    XO(31,264,0,1), XO_MASK, M601, { RT, RA, RB } },
-{ "dozo",    XO(31,264,1,0), XO_MASK, M601, { RT, RA, RB } },
-{ "dozo.",   XO(31,264,1,1), XO_MASK, M601, { RT, RA, RB } },
-
-{ "add",     XO(31,266,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "cax",     XO(31,266,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "add.",    XO(31,266,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "cax.",    XO(31,266,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "addo",    XO(31,266,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "caxo",    XO(31,266,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
-{ "addo.",   XO(31,266,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
-{ "caxo.",   XO(31,266,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "lscbx",   XRC(31,277,0), X_MASK, M601, { RT, RA, RB } },
-{ "lscbx.",  XRC(31,277,1), X_MASK, M601, { RT, RA, RB } },
-
-{ "dcbt",    X(31,278), XRT_MASK, PPC, { RA, RB } },
-
-{ "lhzx",    X(31,279), X_MASK, COM, { RT, RA, RB } },
-
-{ "icbt",    X(31,262), XRT_MASK, PPC, { RA, RB } },
-
-{ "eqv",     XRC(31,284,0), X_MASK, COM, { RA, RS, RB } },
-{ "eqv.",    XRC(31,284,1), X_MASK, COM, { RA, RS, RB } },
-
-{ "tlbie",   X(31,306), XRTRA_MASK, PPC, { RB } },
-{ "tlbi",    X(31,306), XRT_MASK, POWER, { RA, RB } },
-
-{ "eciwx",   X(31,310), X_MASK, PPC, { RT, RA, RB } },
-
-{ "lhzux",   X(31,311), X_MASK, COM, { RT, RAL, RB } },
-
-{ "xor",     XRC(31,316,0), X_MASK, COM, { RA, RS, RB } },
-{ "xor.",    XRC(31,316,1), X_MASK, COM, { RA, RS, RB } },
-
-{ "mfdcr",   X(31,323), X_MASK, PPC, { RT, SPR } },
-
-{ "div",     XO(31,331,0,0), XO_MASK, M601, { RT, RA, RB } },
-{ "div.",    XO(31,331,0,1), XO_MASK, M601, { RT, RA, RB } },
-{ "divo",    XO(31,331,1,0), XO_MASK, M601, { RT, RA, RB } },
-{ "divo.",   XO(31,331,1,1), XO_MASK, M601, { RT, RA, RB } },
-
-{ "mfmq",    XSPR(31,339,0),   XSPR_MASK, M601, { RT } },
-{ "mfxer",   XSPR(31,339,1),   XSPR_MASK, COM, { RT } },
-{ "mfrtcu",  XSPR(31,339,4),   XSPR_MASK, COM, { RT } },
-{ "mfrtcl",  XSPR(31,339,5),   XSPR_MASK, COM, { RT } },
-{ "mfdec",   XSPR(31,339,6),   XSPR_MASK, MFDEC1, { RT } },
-{ "mflr",    XSPR(31,339,8),   XSPR_MASK, COM, { RT } },
-{ "mfctr",   XSPR(31,339,9),   XSPR_MASK, COM, { RT } },
-{ "mftid",   XSPR(31,339,17),  XSPR_MASK, POWER, { RT } },
-{ "mfdsisr", XSPR(31,339,18),  XSPR_MASK, COM, { RT } },
-{ "mfdar",   XSPR(31,339,19),  XSPR_MASK, COM, { RT } },
-{ "mfdec",   XSPR(31,339,22),  XSPR_MASK, MFDEC2, { RT } },
-{ "mfsdr0",  XSPR(31,339,24),  XSPR_MASK, POWER, { RT } },
-{ "mfsdr1",  XSPR(31,339,25),  XSPR_MASK, COM, { RT } },
-{ "mfsrr0",  XSPR(31,339,26),  XSPR_MASK, COM, { RT } },
-{ "mfsrr1",  XSPR(31,339,27),  XSPR_MASK, COM, { RT } },
-{ "mfsprg",  XSPR(31,339,272), XSPRG_MASK, PPC, { RT, SPRG } },
-{ "mfasr",   XSPR(31,339,280), XSPR_MASK, PPC64, { RT } },
-{ "mfear",   XSPR(31,339,282), XSPR_MASK, PPC, { RT } },
-{ "mfpvr",   XSPR(31,339,287), XSPR_MASK, PPC, { RT } },
-{ "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
-{ "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
-{ "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
-{ "mfdbatl", XSPR(31,339,537), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
-{ "mfspr",   X(31,339), X_MASK, COM, { RT, SPR } },
-
-{ "lwax",    X(31,341), X_MASK, PPC64, { RT, RA, RB } },
-
-{ "lhax",    X(31,343), X_MASK, COM, { RT, RA, RB } },
-
-{ "dccci",   X(31,454), XRT_MASK, PPC, { RA, RB } },
-
-{ "abs",     XO(31,360,0,0), XORB_MASK, M601, { RT, RA } },
-{ "abs.",    XO(31,360,0,1), XORB_MASK, M601, { RT, RA } },
-{ "abso",    XO(31,360,1,0), XORB_MASK, M601, { RT, RA } },
-{ "abso.",   XO(31,360,1,1), XORB_MASK, M601, { RT, RA } },
-
-{ "divs",    XO(31,363,0,0), XO_MASK, M601, { RT, RA, RB } },
-{ "divs.",   XO(31,363,0,1), XO_MASK, M601, { RT, RA, RB } },
-{ "divso",   XO(31,363,1,0), XO_MASK, M601, { RT, RA, RB } },
-{ "divso.",  XO(31,363,1,1), XO_MASK, M601, { RT, RA, RB } },
-
-{ "tlbia",   X(31,370), 0xffffffff, PPC, { 0 } },
-
-{ "mftbu",   XSPR(31,371,269), XSPR_MASK, PPC, { RT } },
-{ "mftb",    X(31,371), X_MASK, PPC, { RT, TBR } },
-
-{ "lwaux",   X(31,373), X_MASK, PPC64, { RT, RAL, RB } },
-
-{ "lhaux",   X(31,375), X_MASK, COM, { RT, RAL, RB } },
-
-{ "sthx",    X(31,407), X_MASK, COM, { RS, RA, RB } },
-
-{ "lfqx",    X(31,791), X_MASK, POWER2, { FRT, RA, RB } },
-
-{ "lfqux",   X(31,823), X_MASK, POWER2, { FRT, RA, RB } },
-
-{ "stfqx",   X(31,919), X_MASK, POWER2, { FRS, RA, RB } },
-
-{ "stfqux",  X(31,951), X_MASK, POWER2, { FRS, RA, RB } },
-
-{ "orc",     XRC(31,412,0), X_MASK, COM, { RA, RS, RB } },
-{ "orc.",    XRC(31,412,1), X_MASK, COM, { RA, RS, RB } },
-
-{ "sradi",   XS(31,413,0), XS_MASK, PPC64, { RA, RS, SH6 } },
-{ "sradi.",  XS(31,413,1), XS_MASK, PPC64, { RA, RS, SH6 } },
-
-{ "slbie",   X(31,434), XRTRA_MASK, PPC64, { RB } },
-
-{ "ecowx",   X(31,438), X_MASK, PPC, { RT, RA, RB } },
-
-{ "sthux",   X(31,439), X_MASK, COM, { RS, RAS, RB } },
-
-{ "mr",     XRC(31,444,0), X_MASK, COM, { RA, RS, RBS } },
-{ "or",      XRC(31,444,0), X_MASK, COM, { RA, RS, RB } },
-{ "mr.",     XRC(31,444,1), X_MASK, COM, { RA, RS, RBS } },
-{ "or.",     XRC(31,444,1), X_MASK, COM, { RA, RS, RB } },
-
-{ "mtdcr",   X(31,451), X_MASK, PPC, { SPR, RS } },
-
-{ "divdu",   XO(31,457,0,0), XO_MASK, PPC64, { RT, RA, RB } },
-{ "divdu.",  XO(31,457,0,1), XO_MASK, PPC64, { RT, RA, RB } },
-{ "divduo",  XO(31,457,1,0), XO_MASK, PPC64, { RT, RA, RB } },
-{ "divduo.", XO(31,457,1,1), XO_MASK, PPC64, { RT, RA, RB } },
-
-{ "divwu",   XO(31,459,0,0), XO_MASK, PPC, { RT, RA, RB } },
-{ "divwu.",  XO(31,459,0,1), XO_MASK, PPC, { RT, RA, RB } },
-{ "divwuo",  XO(31,459,1,0), XO_MASK, PPC, { RT, RA, RB } },
-{ "divwuo.", XO(31,459,1,1), XO_MASK, PPC, { RT, RA, RB } },
-
-{ "mtmq",    XSPR(31,467,0),   XSPR_MASK,    M601, { RS } },
-{ "mtxer",   XSPR(31,467,1),   XSPR_MASK,    COM, { RS } },
-{ "mtlr",    XSPR(31,467,8),   XSPR_MASK,    COM, { RS } },
-{ "mtctr",   XSPR(31,467,9),   XSPR_MASK,    COM, { RS } },
-{ "mttid",   XSPR(31,467,17),  XSPR_MASK,    POWER, { RS } },
-{ "mtdsisr", XSPR(31,467,18),  XSPR_MASK,    COM, { RS } },
-{ "mtdar",   XSPR(31,467,19),  XSPR_MASK,    COM, { RS } },
-{ "mtrtcu",  XSPR(31,467,20),  XSPR_MASK,    COM, { RS } },
-{ "mtrtcl",  XSPR(31,467,21),  XSPR_MASK,    COM, { RS } },
-{ "mtdec",   XSPR(31,467,22),  XSPR_MASK,    COM, { RS } },
-{ "mtsdr0",  XSPR(31,467,24),  XSPR_MASK,    POWER, { RS } },
-{ "mtsdr1",  XSPR(31,467,25),  XSPR_MASK,    COM, { RS } },
-{ "mtsrr0",  XSPR(31,467,26),  XSPR_MASK,    COM, { RS } },
-{ "mtsrr1",  XSPR(31,467,27),  XSPR_MASK,    COM, { RS } },
-{ "mtsprg",  XSPR(31,467,272), XSPRG_MASK,   PPC, { SPRG, RS } },
-{ "mtasr",   XSPR(31,467,280), XSPR_MASK,    PPC64, { RS } },
-{ "mtear",   XSPR(31,467,282), XSPR_MASK,    PPC, { RS } },
-{ "mttbl",   XSPR(31,467,284), XSPR_MASK,    PPC, { RS } },
-{ "mttbu",   XSPR(31,467,285), XSPR_MASK,    PPC, { RS } },
-{ "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
-{ "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
-{ "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
-{ "mtdbatl", XSPR(31,467,537), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
-{ "mtspr",   X(31,467),       X_MASK,     COM, { SPR, RS } },
-
-{ "dcbi",    X(31,470), XRT_MASK, PPC, { RA, RB } },
-
-{ "nand",    XRC(31,476,0), X_MASK, COM, { RA, RS, RB } },
-{ "nand.",   XRC(31,476,1), X_MASK, COM, { RA, RS, RB } },
-
-{ "nabs",    XO(31,488,0,0), XORB_MASK, M601, { RT, RA } },
-{ "nabs.",   XO(31,488,0,1), XORB_MASK, M601, { RT, RA } },
-{ "nabso",   XO(31,488,1,0), XORB_MASK, M601, { RT, RA } },
-{ "nabso.",  XO(31,488,1,1), XORB_MASK, M601, { RT, RA } },
-
-{ "divd",    XO(31,489,0,0), XO_MASK, PPC64, { RT, RA, RB } },
-{ "divd.",   XO(31,489,0,1), XO_MASK, PPC64, { RT, RA, RB } },
-{ "divdo",   XO(31,489,1,0), XO_MASK, PPC64, { RT, RA, RB } },
-{ "divdo.",  XO(31,489,1,1), XO_MASK, PPC64, { RT, RA, RB } },
-
-{ "divw",    XO(31,491,0,0), XO_MASK, PPC, { RT, RA, RB } },
-{ "divw.",   XO(31,491,0,1), XO_MASK, PPC, { RT, RA, RB } },
-{ "divwo",   XO(31,491,1,0), XO_MASK, PPC, { RT, RA, RB } },
-{ "divwo.",  XO(31,491,1,1), XO_MASK, PPC, { RT, RA, RB } },
-
-{ "slbia",   X(31,498), 0xffffffff, PPC64, { 0 } },
-
-{ "cli",     X(31,502), XRB_MASK, POWER, { RT, RA } },
-
-{ "mcrxr",   X(31,512), XRARB_MASK|(3<<21), COM, { BF } },
-
-{ "clcs",    X(31,531), XRB_MASK, M601, { RT, RA } },
-
-{ "lswx",    X(31,533), X_MASK, PPCCOM, { RT, RA, RB } },
-{ "lsx",     X(31,533), X_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "lwbrx",   X(31,534), X_MASK, PPCCOM, { RT, RA, RB } },
-{ "lbrx",    X(31,534), X_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "lfsx",    X(31,535), X_MASK, COM, { FRT, RA, RB } },
-
-{ "srw",     XRC(31,536,0), X_MASK, PPCCOM, { RA, RS, RB } },
-{ "sr",      XRC(31,536,0), X_MASK, PWRCOM, { RA, RS, RB } },
-{ "srw.",    XRC(31,536,1), X_MASK, PPCCOM, { RA, RS, RB } },
-{ "sr.",     XRC(31,536,1), X_MASK, PWRCOM, { RA, RS, RB } },
-
-{ "rrib",    XRC(31,537,0), X_MASK, M601, { RA, RS, RB } },
-{ "rrib.",   XRC(31,537,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "srd",     XRC(31,539,0), X_MASK, PPC64, { RA, RS, RB } },
-{ "srd.",    XRC(31,539,1), X_MASK, PPC64, { RA, RS, RB } },
-
-{ "maskir",  XRC(31,541,0), X_MASK, M601, { RA, RS, RB } },
-{ "maskir.", XRC(31,541,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "tlbsync", X(31,566), 0xffffffff, PPC, { 0 } },
-
-{ "lfsux",   X(31,567), X_MASK, COM, { FRT, RAS, RB } },
-
-{ "mfsr",    X(31,595), XRB_MASK|(1<<20), COM32, { RT, SR } },
-
-{ "lswi",    X(31,597), X_MASK, PPCCOM, { RT, RA, NB } },
-{ "lsi",     X(31,597), X_MASK, PWRCOM, { RT, RA, NB } },
-
-{ "sync",    X(31,598), 0xffffffff, PPCCOM, { 0 } },
-{ "dcs",     X(31,598), 0xffffffff, PWRCOM, { 0 } },
-
-{ "lfdx",    X(31,599), X_MASK, COM, { FRT, RA, RB } },
-
-{ "mfsri",   X(31,627), X_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "dclst",   X(31,630), XRB_MASK, PWRCOM, { RS, RA } },
-
-{ "lfdux",   X(31,631), X_MASK, COM, { FRT, RAS, RB } },
-
-{ "mfsrin",  X(31,659), XRA_MASK, PPC32, { RT, RB } },
-
-{ "stswx",   X(31,661), X_MASK, PPCCOM, { RS, RA, RB } },
-{ "stsx",    X(31,661), X_MASK, PWRCOM, { RS, RA, RB } },
-
-{ "stwbrx",  X(31,662), X_MASK, PPCCOM, { RS, RA, RB } },
-{ "stbrx",   X(31,662), X_MASK, PWRCOM, { RS, RA, RB } },
-
-{ "stfsx",   X(31,663), X_MASK, COM, { FRS, RA, RB } },
-
-{ "srq",     XRC(31,664,0), X_MASK, M601, { RA, RS, RB } },
-{ "srq.",    XRC(31,664,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "sre",     XRC(31,665,0), X_MASK, M601, { RA, RS, RB } },
-{ "sre.",    XRC(31,665,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "stfsux",  X(31,695), X_MASK, COM, { FRS, RAS, RB } },
-
-{ "sriq",    XRC(31,696,0), X_MASK, M601, { RA, RS, SH } },
-{ "sriq.",   XRC(31,696,1), X_MASK, M601, { RA, RS, SH } },
-
-{ "stswi",   X(31,725), X_MASK, PPCCOM, { RS, RA, NB } },
-{ "stsi",    X(31,725), X_MASK, PWRCOM, { RS, RA, NB } },
-
-{ "stfdx",   X(31,727), X_MASK, COM, { FRS, RA, RB } },
-
-{ "srlq",    XRC(31,728,0), X_MASK, M601, { RA, RS, RB } },
-{ "srlq.",   XRC(31,728,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "sreq",    XRC(31,729,0), X_MASK, M601, { RA, RS, RB } },
-{ "sreq.",   XRC(31,729,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "stfdux",  X(31,759), X_MASK, COM, { FRS, RAS, RB } },
-
-{ "srliq",   XRC(31,760,0), X_MASK, M601, { RA, RS, SH } },
-{ "srliq.",  XRC(31,760,1), X_MASK, M601, { RA, RS, SH } },
-
-{ "lhbrx",   X(31,790), X_MASK, COM, { RT, RA, RB } },
-
-{ "sraw",    XRC(31,792,0), X_MASK, PPCCOM, { RA, RS, RB } },
-{ "sra",     XRC(31,792,0), X_MASK, PWRCOM, { RA, RS, RB } },
-{ "sraw.",   XRC(31,792,1), X_MASK, PPCCOM, { RA, RS, RB } },
-{ "sra.",    XRC(31,792,1), X_MASK, PWRCOM, { RA, RS, RB } },
-
-{ "srad",    XRC(31,794,0), X_MASK, PPC64, { RA, RS, RB } },
-{ "srad.",   XRC(31,794,1), X_MASK, PPC64, { RA, RS, RB } },
-
-{ "rac",     X(31,818), X_MASK, PWRCOM, { RT, RA, RB } },
-
-{ "srawi",   XRC(31,824,0), X_MASK, PPCCOM, { RA, RS, SH } },
-{ "srai",    XRC(31,824,0), X_MASK, PWRCOM, { RA, RS, SH } },
-{ "srawi.",  XRC(31,824,1), X_MASK, PPCCOM, { RA, RS, SH } },
-{ "srai.",   XRC(31,824,1), X_MASK, PWRCOM, { RA, RS, SH } },
-
-{ "eieio",   X(31,854), 0xffffffff, PPC, { 0 } },
-
-{ "sthbrx",  X(31,918), X_MASK, COM, { RS, RA, RB } },
-
-{ "sraq",    XRC(31,920,0), X_MASK, M601, { RA, RS, RB } },
-{ "sraq.",   XRC(31,920,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "srea",    XRC(31,921,0), X_MASK, M601, { RA, RS, RB } },
-{ "srea.",   XRC(31,921,1), X_MASK, M601, { RA, RS, RB } },
-
-{ "extsh",   XRC(31,922,0), XRB_MASK, PPCCOM, { RA, RS } },
-{ "exts",    XRC(31,922,0), XRB_MASK, PWRCOM, { RA, RS } },
-{ "extsh.",  XRC(31,922,1), XRB_MASK, PPCCOM, { RA, RS } },
-{ "exts.",   XRC(31,922,1), XRB_MASK, PWRCOM, { RA, RS } },
-
-{ "sraiq",   XRC(31,952,0), X_MASK, M601, { RA, RS, SH } },
-{ "sraiq.",  XRC(31,952,1), X_MASK, M601, { RA, RS, SH } },
-
-{ "extsb",   XRC(31,954,0), XRB_MASK, PPC, { RA, RS} },
-{ "extsb.",  XRC(31,954,1), XRB_MASK, PPC, { RA, RS} },
-
-{ "iccci",   X(31,966), XRT_MASK, PPC, { RA, RB } },
-
-{ "tlbld",   X(31,978), XRTRA_MASK, PPC, { RB } },
-
-{ "icbi",    X(31,982), XRT_MASK, PPC, { RA, RB } },
-
-{ "stfiwx",  X(31,983), X_MASK, PPC, { FRS, RA, RB } },
-
-{ "extsw",   XRC(31,986,0), XRB_MASK, PPC, { RA, RS } },
-{ "extsw.",  XRC(31,986,1), XRB_MASK, PPC, { RA, RS } },
-
-{ "tlbli",   X(31,1010), XRTRA_MASK, PPC, { RB } },
-
-{ "dcbz",    X(31,1014), XRT_MASK, PPC, { RA, RB } },
-{ "dclz",    X(31,1014), XRT_MASK, PPC, { RA, RB } },
-
-{ "lwz",     OP(32), OP_MASK, PPCCOM, { RT, D, RA } },
-{ "l",     OP(32), OP_MASK, PWRCOM, { RT, D, RA } },
-
-{ "lwzu",    OP(33), OP_MASK, PPCCOM, { RT, D, RAL } },
-{ "lu",      OP(33), OP_MASK, PWRCOM, { RT, D, RA } },
-
-{ "lbz",     OP(34), OP_MASK, COM, { RT, D, RA } },
-
-{ "lbzu",    OP(35), OP_MASK, COM, { RT, D, RAL } },
-
-{ "stw",     OP(36), OP_MASK, PPCCOM, { RS, D, RA } },
-{ "st",      OP(36), OP_MASK, PWRCOM, { RS, D, RA } },
-
-{ "stwu",    OP(37), OP_MASK, PPCCOM, { RS, D, RAS } },
-{ "stu",     OP(37), OP_MASK, PWRCOM, { RS, D, RA } },
-
-{ "stb",     OP(38), OP_MASK, COM, { RS, D, RA } },
-
-{ "stbu",    OP(39), OP_MASK, COM, { RS, D, RAS } },
-
-{ "lhz",     OP(40), OP_MASK, COM, { RT, D, RA } },
-
-{ "lhzu",    OP(41), OP_MASK, COM, { RT, D, RAL } },
-
-{ "lha",     OP(42), OP_MASK, COM, { RT, D, RA } },
-
-{ "lhau",    OP(43), OP_MASK, COM, { RT, D, RAL } },
-
-{ "sth",     OP(44), OP_MASK, COM, { RS, D, RA } },
-
-{ "sthu",    OP(45), OP_MASK, COM, { RS, D, RAS } },
-
-{ "lmw",     OP(46), OP_MASK, PPCCOM, { RT, D, RAM } },
-{ "lm",      OP(46), OP_MASK, PWRCOM, { RT, D, RA } },
-
-{ "stmw",    OP(47), OP_MASK, PPCCOM, { RS, D, RA } },
-{ "stm",     OP(47), OP_MASK, PWRCOM, { RS, D, RA } },
-
-{ "lfs",     OP(48), OP_MASK, COM, { FRT, D, RA } },
-
-{ "lfsu",    OP(49), OP_MASK, COM, { FRT, D, RAS } },
-
-{ "lfd",     OP(50), OP_MASK, COM, { FRT, D, RA } },
-
-{ "lfdu",    OP(51), OP_MASK, COM, { FRT, D, RAS } },
-
-{ "stfs",    OP(52), OP_MASK, COM, { FRS, D, RA } },
-
-{ "stfsu",   OP(53), OP_MASK, COM, { FRS, D, RAS } },
-
-{ "stfd",    OP(54), OP_MASK, COM, { FRS, D, RA } },
-
-{ "stfdu",   OP(55), OP_MASK, COM, { FRS, D, RAS } },
-
-{ "lfq",     OP(56), OP_MASK, POWER2, { FRT, D, RA } },
-
-{ "lfqu",    OP(57), OP_MASK, POWER2, { FRT, D, RA } },
-
-{ "ld",      DSO(58,0), DS_MASK, PPC64, { RT, DS, RA } },
-
-{ "ldu",     DSO(58,1), DS_MASK, PPC64, { RT, DS, RAL } },
-
-{ "lwa",     DSO(58,2), DS_MASK, PPC64, { RT, DS, RA } },
-
-{ "fdivs",   A(59,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
-{ "fdivs.",  A(59,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
-
-{ "fsubs",   A(59,20,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
-{ "fsubs.",  A(59,20,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
-
-{ "fadds",   A(59,21,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
-{ "fadds.",  A(59,21,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
-
-{ "fsqrts",  A(59,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
-{ "fsqrts.", A(59,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
-
-{ "fres",    A(59,24,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
-{ "fres.",   A(59,24,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
-
-{ "fmuls",   A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } },
-{ "fmuls.",  A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } },
-
-{ "fmsubs",  A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-{ "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-
-{ "fmadds",  A(59,29,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-{ "fmadds.", A(59,29,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-
-{ "fnmsubs", A(59,30,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-{ "fnmsubs.",A(59,30,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-
-{ "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-{ "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-
-{ "stfq",    OP(60), OP_MASK, POWER2, { FRS, D, RA } },
-
-{ "stfqu",   OP(61), OP_MASK, POWER2, { FRS, D, RA } },
-
-{ "std",     DSO(62,0), DS_MASK, PPC64, { RS, DS, RA } },
-
-{ "stdu",    DSO(62,1), DS_MASK, PPC64, { RS, DS, RAS } },
-
-{ "fcmpu",   X(63,0), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
-
-{ "frsp",    XRC(63,12,0), XRA_MASK, COM, { FRT, FRB } },
-{ "frsp.",   XRC(63,12,1), XRA_MASK, COM, { FRT, FRB } },
-
-{ "fctiw",   XRC(63,14,0), XRA_MASK, PPCCOM, { FRT, FRB } },
-{ "fcir",    XRC(63,14,0), XRA_MASK, POWER2, { FRT, FRB } },
-{ "fctiw.",  XRC(63,14,1), XRA_MASK, PPCCOM, { FRT, FRB } },
-{ "fcir.",   XRC(63,14,1), XRA_MASK, POWER2, { FRT, FRB } },
-
-{ "fctiwz",  XRC(63,15,0), XRA_MASK, PPCCOM, { FRT, FRB } },
-{ "fcirz",   XRC(63,15,0), XRA_MASK, POWER2, { FRT, FRB } },
-{ "fctiwz.", XRC(63,15,1), XRA_MASK, PPCCOM, { FRT, FRB } },
-{ "fcirz.",  XRC(63,15,1), XRA_MASK, POWER2, { FRT, FRB } },
-
-{ "fdiv",    A(63,18,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
-{ "fd",      A(63,18,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
-{ "fdiv.",   A(63,18,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
-{ "fd.",     A(63,18,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
-
-{ "fsub",    A(63,20,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
-{ "fs",      A(63,20,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
-{ "fsub.",   A(63,20,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
-{ "fs.",     A(63,20,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
-
-{ "fadd",    A(63,21,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
-{ "fa",      A(63,21,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
-{ "fadd.",   A(63,21,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
-{ "fa.",     A(63,21,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
-
-{ "fsqrt",   A(63,22,0), AFRAFRC_MASK, POWER2, { FRT, FRB } },
-{ "fsqrt.",  A(63,22,1), AFRAFRC_MASK, POWER2, { FRT, FRB } },
-{ "fsqrt",   A(63,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
-{ "fsqrt.",  A(63,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
-
-{ "fsel",    A(63,23,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-{ "fsel.",   A(63,23,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-
-{ "fmul",    A(63,25,0), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
-{ "fm",      A(63,25,0), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
-{ "fmul.",   A(63,25,1), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
-{ "fm.",     A(63,25,1), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
-
-{ "frsqrte", A(63,26,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
-{ "frsqrte.",A(63,26,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
-
-{ "fmsub",   A(63,28,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
-{ "fms",     A(63,28,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
-{ "fmsub.",  A(63,28,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
-{ "fms.",    A(63,28,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
-
-{ "fmadd",   A(63,29,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
-{ "fma",     A(63,29,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
-{ "fmadd.",  A(63,29,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
-{ "fma.",    A(63,29,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
-
-{ "fnmsub",  A(63,30,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
-{ "fnms",    A(63,30,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
-{ "fnmsub.", A(63,30,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
-{ "fnms.",   A(63,30,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
-
-{ "fnmadd",  A(63,31,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
-{ "fnma",    A(63,31,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
-{ "fnmadd.", A(63,31,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
-{ "fnma.",   A(63,31,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
-
-{ "fcmpo",   X(63,30), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
-
-{ "mtfsb1",  XRC(63,38,0), XRARB_MASK, COM, { BT } },
-{ "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM, { BT } },
-
-{ "fneg",    XRC(63,40,0), XRA_MASK, COM, { FRT, FRB } },
-{ "fneg.",   XRC(63,40,1), XRA_MASK, COM, { FRT, FRB } },
-
-{ "mcrfs",   X(63,64), XRB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
-
-{ "mtfsb0",  XRC(63,70,0), XRARB_MASK, COM, { BT } },
-{ "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } },
-
-{ "fmr",     XRC(63,72,0), XRA_MASK, COM, { FRT, FRB } },
-{ "fmr.",    XRC(63,72,1), XRA_MASK, COM, { FRT, FRB } },
-
-{ "mtfsfi",  XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
-{ "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
-
-{ "fnabs",   XRC(63,136,0), XRA_MASK, COM, { FRT, FRB } },
-{ "fnabs.",  XRC(63,136,1), XRA_MASK, COM, { FRT, FRB } },
-
-{ "fabs",    XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } },
-{ "fabs.",   XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } },
-
-{ "mffs",    XRC(63,583,0), XRARB_MASK, COM, { FRT } },
-{ "mffs.",   XRC(63,583,1), XRARB_MASK, COM, { FRT } },
-
-{ "mtfsf",   XFL(63,711,0), XFL_MASK, COM, { FLM, FRB } },
-{ "mtfsf.",  XFL(63,711,1), XFL_MASK, COM, { FLM, FRB } },
-
-{ "fctid",   XRC(63,814,0), XRA_MASK, PPC64, { FRT, FRB } },
-{ "fctid.",  XRC(63,814,1), XRA_MASK, PPC64, { FRT, FRB } },
-
-{ "fctidz",  XRC(63,815,0), XRA_MASK, PPC64, { FRT, FRB } },
-{ "fctidz.", XRC(63,815,1), XRA_MASK, PPC64, { FRT, FRB } },
-
-{ "fcfid",   XRC(63,846,0), XRA_MASK, PPC64, { FRT, FRB } },
-{ "fcfid.",  XRC(63,846,1), XRA_MASK, PPC64, { FRT, FRB } },
-
-};
-
-const int powerpc_num_opcodes =
-  sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
-
-/* The macro table.  This is only used by the assembler.  */
-
-const struct powerpc_macro powerpc_macros[] = {
-{ "extldi",  4,   PPC64, "rldicr %0,%1,%3,(%2)-1" },
-{ "extldi.", 4,   PPC64, "rldicr. %0,%1,%3,(%2)-1" },
-{ "extrdi",  4,   PPC64, "rldicl %0,%1,(%2)+(%3),64-(%2)" },
-{ "extrdi.", 4,   PPC64, "rldicl. %0,%1,(%2)+(%3),64-(%2)" },
-{ "insrdi",  4,   PPC64, "rldimi %0,%1,64-((%2)+(%3)),%3" },
-{ "insrdi.", 4,   PPC64, "rldimi. %0,%1,64-((%2)+(%3)),%3" },
-{ "rotrdi",  3,   PPC64, "rldicl %0,%1,64-(%2),0" },
-{ "rotrdi.", 3,   PPC64, "rldicl. %0,%1,64-(%2),0" },
-{ "sldi",    3,   PPC64, "rldicr %0,%1,%2,63-(%2)" },
-{ "sldi.",   3,   PPC64, "rldicr. %0,%1,%2,63-(%2)" },
-{ "srdi",    3,   PPC64, "rldicl %0,%1,64-(%2),%2" },
-{ "srdi.",   3,   PPC64, "rldicl. %0,%1,64-(%2),%2" },
-{ "clrrdi",  3,   PPC64, "rldicr %0,%1,0,63-(%2)" },
-{ "clrrdi.", 3,   PPC64, "rldicr. %0,%1,0,63-(%2)" },
-{ "clrlsldi",4,   PPC64, "rldic %0,%1,%3,(%2)-(%3)" },
-{ "clrlsldi.",4,  PPC64, "rldic. %0,%1,%3,(%2)-(%3)" },
-
-{ "extlwi",  4,   PPCCOM, "rlwinm %0,%1,%3,0,(%2)-1" },
-{ "extlwi.", 4,   PPCCOM, "rlwinm. %0,%1,%3,0,(%2)-1" },
-{ "extrwi",  4,   PPCCOM, "rlwinm %0,%1,(%2)+(%3),32-(%2),31" },
-{ "extrwi.", 4,   PPCCOM, "rlwinm. %0,%1,(%2)+(%3),32-(%2),31" },
-{ "inslwi",  4,   PPCCOM, "rlwimi %0,%1,32-(%3),%3,(%2)+(%3)-1" },
-{ "inslwi.", 4,   PPCCOM, "rlwimi. %0,%1,32-(%3),%3,(%2)+(%3)-1" },
-{ "insrwi",  4,   PPCCOM, "rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1" },
-{ "insrwi.", 4,   PPCCOM, "rlwimi. %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
-{ "rotrwi",  3,   PPCCOM, "rlwinm %0,%1,32-(%2),0,31" },
-{ "rotrwi.", 3,   PPCCOM, "rlwinm. %0,%1,32-(%2),0,31" },
-{ "slwi",    3,   PPCCOM, "rlwinm %0,%1,%2,0,31-(%2)" },
-{ "sli",     3,   PWRCOM, "rlinm %0,%1,%2,0,31-(%2)" },
-{ "slwi.",   3,   PPCCOM, "rlwinm. %0,%1,%2,0,31-(%2)" },
-{ "sli.",    3,   PWRCOM, "rlinm. %0,%1,%2,0,31-(%2)" },
-{ "srwi",    3,   PPCCOM, "rlwinm %0,%1,32-(%2),%2,31" },
-{ "sri",     3,   PWRCOM, "rlinm %0,%1,32-(%2),%2,31" },
-{ "srwi.",   3,   PPCCOM, "rlwinm. %0,%1,32-(%2),%2,31" },
-{ "sri.",    3,   PWRCOM, "rlinm. %0,%1,32-(%2),%2,31" },
-{ "clrrwi",  3,   PPCCOM, "rlwinm %0,%1,0,0,31-(%2)" },
-{ "clrrwi.", 3,   PPCCOM, "rlwinm. %0,%1,0,0,31-(%2)" },
-{ "clrlslwi",4,   PPCCOM, "rlwinm %0,%1,%3,(%2)-(%3),31-(%3)" },
-{ "clrlslwi.",4,  PPCCOM, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
-
-};
-
-const int powerpc_num_macros =
-  sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);
diff --git a/opcode/ppc.h b/opcode/ppc.h
deleted file mode 100644
index c22eb84..0000000
--- a/opcode/ppc.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/* ppc.h -- Header file for PowerPC opcode table
-   Copyright 1994, 1995 Free Software Foundation, Inc.
-   Written by Ian Lance Taylor, Cygnus Support
-
-This file is part of GDB, GAS, and the GNU binutils.
-
-GDB, GAS, and the GNU binutils are free software; you can redistribute
-them and/or modify them under the terms of the GNU General Public
-License as published by the Free Software Foundation; either version
-1, or (at your option) any later version.
-
-GDB, GAS, and the GNU binutils are distributed in the hope that they
-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 file; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef PPC_H
-#define PPC_H
-
-/* The opcode table is an array of struct powerpc_opcode.  */
-
-struct powerpc_opcode
-{
-  /* The opcode name.  */
-  const char *name;
-
-  /* The opcode itself.  Those bits which will be filled in with
-     operands are zeroes.  */
-  unsigned long opcode;
-
-  /* The opcode mask.  This is used by the disassembler.  This is a
-     mask containing ones indicating those bits which must match the
-     opcode field, and zeroes indicating those bits which need not
-     match (and are presumably filled in by operands).  */
-  unsigned long mask;
-
-  /* One bit flags for the opcode.  These are used to indicate which
-     specific processors support the instructions.  The defined values
-     are listed below.  */
-  unsigned long flags;
-
-  /* An array of operand codes.  Each code is an index into the
-     operand table.  They appear in the order which the operands must
-     appear in assembly code, and are terminated by a zero.  */
-  unsigned char operands[8];
-};
-
-/* The table itself is sorted by major opcode number, and is otherwise
-   in the order in which the disassembler should consider
-   instructions.  */
-extern const struct powerpc_opcode powerpc_opcodes[];
-extern const int powerpc_num_opcodes;
-
-/* Values defined for the flags field of a struct powerpc_opcode.  */
-
-/* Opcode is defined for the PowerPC architecture.  */
-#define PPC_OPCODE_PPC (01)
-
-/* Opcode is defined for the POWER (RS/6000) architecture.  */
-#define PPC_OPCODE_POWER (02)
-
-/* Opcode is defined for the POWER2 (Rios 2) architecture.  */
-#define PPC_OPCODE_POWER2 (04)
-
-/* Opcode is only defined on 32 bit architectures.  */
-#define PPC_OPCODE_32 (010)
-
-/* Opcode is only defined on 64 bit architectures.  */
-#define PPC_OPCODE_64 (020)
-
-/* Opcode is supported by the Motorola PowerPC 601 processor.  The 601
-   is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions,
-   but it also supports many additional POWER instructions.  */
-#define PPC_OPCODE_601 (040)
-
-/* Opcode is supported in both the Power and PowerPC architectures
-   (ie, compiler's -mcpu=common or assembler's -mcom).  */
-#define PPC_OPCODE_COMMON (0100)
-
-/* Opcode is supported for any Power or PowerPC platform (this is
-   for the assembler's -many option, and it eliminates duplicates).  */
-#define PPC_OPCODE_ANY (0200)
-
-/* A macro to extract the major opcode from an instruction.  */
-#define PPC_OP(i) (((i) >> 26) & 0x3f)
-
-/* The operands table is an array of struct powerpc_operand.  */
-
-struct powerpc_operand
-{
-  /* The number of bits in the operand.  */
-  int bits;
-
-  /* How far the operand is left shifted in the instruction.  */
-  int shift;
-
-  /* Insertion function.  This is used by the assembler.  To insert an
-     operand value into an instruction, check this field.
-
-     If it is NULL, execute
-         i |= (op & ((1 << o->bits) - 1)) << o->shift;
-     (i is the instruction which we are filling in, o is a pointer to
-     this structure, and op is the opcode value; this assumes twos
-     complement arithmetic).
-
-     If this field is not NULL, then simply call it with the
-     instruction and the operand value.  It will return the new value
-     of the instruction.  If the ERRMSG argument is not NULL, then if
-     the operand value is illegal, *ERRMSG will be set to a warning
-     string (the operand will be inserted in any case).  If the
-     operand value is legal, *ERRMSG will be unchanged (most operands
-     can accept any value).  */
-  unsigned long (*insert) PARAMS ((unsigned long instruction, long op,
-   const char **errmsg));
-
-  /* Extraction function.  This is used by the disassembler.  To
-     extract this operand type from an instruction, check this field.
-
-     If it is NULL, compute
-         op = ((i) >> o->shift) & ((1 << o->bits) - 1);
- if ((o->flags & PPC_OPERAND_SIGNED) != 0
-     && (op & (1 << (o->bits - 1))) != 0)
-   op -= 1 << o->bits;
-     (i is the instruction, o is a pointer to this structure, and op
-     is the result; this assumes twos complement arithmetic).
-
-     If this field is not NULL, then simply call it with the
-     instruction value.  It will return the value of the operand.  If
-     the INVALID argument is not NULL, *INVALID will be set to
-     non-zero if this operand type can not actually be extracted from
-     this operand (i.e., the instruction does not match).  If the
-     operand is valid, *INVALID will not be changed.  */
-  long (*extract) PARAMS ((unsigned long instruction, int *invalid));
-
-  /* One bit syntax flags.  */
-  unsigned long flags;
-};
-
-/* Elements in the table are retrieved by indexing with values from
-   the operands field of the powerpc_opcodes table.  */
-
-extern const struct powerpc_operand powerpc_operands[];
-
-/* Values defined for the flags field of a struct powerpc_operand.  */
-
-/* This operand takes signed values.  */
-#define PPC_OPERAND_SIGNED (01)
-
-/* This operand takes signed values, but also accepts a full positive
-   range of values when running in 32 bit mode.  That is, if bits is
-   16, it takes any value from -0x8000 to 0xffff.  In 64 bit mode,
-   this flag is ignored.  */
-#define PPC_OPERAND_SIGNOPT (02)
-
-/* This operand does not actually exist in the assembler input.  This
-   is used to support extended mnemonics such as mr, for which two
-   operands fields are identical.  The assembler should call the
-   insert function with any op value.  The disassembler should call
-   the extract function, ignore the return value, and check the value
-   placed in the valid argument.  */
-#define PPC_OPERAND_FAKE (04)
-
-/* The next operand should be wrapped in parentheses rather than
-   separated from this one by a comma.  This is used for the load and
-   store instructions which want their operands to look like
-       reg,displacement(reg)
-   */
-#define PPC_OPERAND_PARENS (010)
-
-/* This operand may use the symbolic names for the CR fields, which
-   are
-       lt  0 gt  1 eq  2 so  3 un  3
-       cr0 0 cr1 1 cr2 2 cr3 3
-       cr4 4 cr5 5 cr6 6 cr7 7
-   These may be combined arithmetically, as in cr2*4+gt.  These are
-   only supported on the PowerPC, not the POWER.  */
-#define PPC_OPERAND_CR (020)
-
-/* This operand names a register.  The disassembler uses this to print
-   register names with a leading 'r'.  */
-#define PPC_OPERAND_GPR (040)
-
-/* This operand names a floating point register.  The disassembler
-   prints these with a leading 'f'.  */
-#define PPC_OPERAND_FPR (0100)
-
-/* This operand is a relative branch displacement.  The disassembler
-   prints these symbolically if possible.  */
-#define PPC_OPERAND_RELATIVE (0200)
-
-/* This operand is an absolute branch address.  The disassembler
-   prints these symbolically if possible.  */
-#define PPC_OPERAND_ABSOLUTE (0400)
-
-/* This operand is optional, and is zero if omitted.  This is used for
-   the optional BF and L fields in the comparison instructions.  The
-   assembler must count the number of operands remaining on the line,
-   and the number of operands remaining for the opcode, and decide
-   whether this operand is present or not.  The disassembler should
-   print this operand out only if it is not zero.  */
-#define PPC_OPERAND_OPTIONAL (01000)
-
-/* This flag is only used with PPC_OPERAND_OPTIONAL.  If this operand
-   is omitted, then for the next operand use this operand value plus
-   1, ignoring the next operand field for the opcode.  This wretched
-   hack is needed because the Power rotate instructions can take
-   either 4 or 5 operands.  The disassembler should print this operand
-   out regardless of the PPC_OPERAND_OPTIONAL field.  */
-#define PPC_OPERAND_NEXT (02000)
-
-/* This operand should be regarded as a negative number for the
-   purposes of overflow checking (i.e., the normal most negative
-   number is disallowed and one more than the normal most positive
-   number is allowed).  This flag will only be set for a signed
-   operand.  */
-#define PPC_OPERAND_NEGATIVE (04000)
-
-/* The POWER and PowerPC assemblers use a few macros.  We keep them
-   with the operands table for simplicity.  The macro table is an
-   array of struct powerpc_macro.  */
-
-struct powerpc_macro
-{
-  /* The macro name.  */
-  const char *name;
-
-  /* The number of operands the macro takes.  */
-  unsigned int operands;
-
-  /* One bit flags for the opcode.  These are used to indicate which
-     specific processors support the instructions.  The values are the
-     same as those for the struct powerpc_opcode flags field.  */
-  unsigned long flags;
-
-  /* A format string to turn the macro into a normal instruction.
-     Each %N in the string is replaced with operand number N (zero
-     based).  */
-  const char *format;
-};
-
-extern const struct powerpc_macro powerpc_macros[];
-extern const int powerpc_num_macros;
-
-#endif /* PPC_H */
diff --git a/opcode/sparc-dis.c b/opcode/sparc-dis.c
deleted file mode 100644
index 23216be..0000000
--- a/opcode/sparc-dis.c
+++ /dev/null
@@ -1,868 +0,0 @@
-/* Print SPARC instructions.
-   Copyright (C) 1989, 91-93, 1995, 1996 Free Software Foundation, Inc.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include "ansidecl.h"
-#include "opcode/sparc.h"
-#include "dis-asm.h"
-
-#include <string.h>
-
-/* Bitmask of v9 architectures.  */
-#define MASK_V9 ((1 << SPARC_OPCODE_ARCH_V9) \
- | (1 << SPARC_OPCODE_ARCH_V9A))
-/* 1 if INSN is for v9 only.  */
-#define V9_ONLY_P(insn) (! ((insn)->architecture & ~MASK_V9))
-/* 1 if INSN is for v9.  */
-#define V9_P(insn) (((insn)->architecture & MASK_V9) != 0)
-
-/* For faster lookup, after insns are sorted they are hashed.  */
-/* ??? I think there is room for even more improvement.  */
-
-#define HASH_SIZE 256
-/* It is important that we only look at insn code bits as that is how the
-   opcode table is hashed.  OPCODE_BITS is a table of valid bits for each
-   of the main types (0,1,2,3).  */
-static int opcode_bits[4] = { 0x01c00000, 0x0, 0x01f80000, 0x01f80000 };
-#define HASH_INSN(INSN) \
-  ((((INSN) >> 24) & 0xc0) | (((INSN) & opcode_bits[((INSN) >> 30) & 3]) >> 19))
-struct opcode_hash {
-  struct opcode_hash *next;
-  struct sparc_opcode *opcode;
-};
-static struct opcode_hash *opcode_hash_table[HASH_SIZE];
-static void build_hash_table ();
-
-/* Sign-extend a value which is N bits long.  */
-#define SEX(value, bits) \
- ((((int)(value)) << ((8 * sizeof (int)) - bits)) \
- >> ((8 * sizeof (int)) - bits) )
-
-static  char *reg_names[] =
-{ "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
-  "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
-  "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
-  "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
-  "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
-  "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
-  "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
-  "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
-  "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
-  "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
-  "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
-  "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
-/* psr, wim, tbr, fpsr, cpsr are v8 only.  */
-  "y", "psr", "wim", "tbr", "pc", "npc", "fpsr", "cpsr"
-};
-
-#define freg_names (&reg_names[4 * 8])
-
-/* These are ordered according to there register number in
-   rdpr and wrpr insns.  */
-static char *v9_priv_reg_names[] =
-{
-  "tpc", "tnpc", "tstate", "tt", "tick", "tba", "pstate", "tl",
-  "pil", "cwp", "cansave", "canrestore", "cleanwin", "otherwin",
-  "wstate", "fq"
-  /* "ver" - special cased */
-};
-
-/* Macros used to extract instruction fields.  Not all fields have
-   macros defined here, only those which are actually used.  */
-
-#define X_RD(i) (((i) >> 25) & 0x1f)
-#define X_RS1(i) (((i) >> 14) & 0x1f)
-#define X_LDST_I(i) (((i) >> 13) & 1)
-#define X_ASI(i) (((i) >> 5) & 0xff)
-#define X_RS2(i) (((i) >> 0) & 0x1f)
-#define X_IMM13(i) (((i) >> 0) & 0x1fff)
-#define X_DISP22(i) (((i) >> 0) & 0x3fffff)
-#define X_IMM22(i) X_DISP22 (i)
-#define X_DISP30(i) (((i) >> 0) & 0x3fffffff)
-
-/* These are for v9.  */
-#define X_DISP16(i) (((((i) >> 20) & 3) << 14) | (((i) >> 0) & 0x3fff))
-#define X_DISP19(i) (((i) >> 0) & 0x7ffff)
-#define X_MEMBAR(i) ((i) & 0x7f)
-
-/* Here is the union which was used to extract instruction fields
-   before the shift and mask macros were written.
-
-   union sparc_insn
-     {
-       unsigned long int code;
-       struct
- {
-   unsigned int anop:2;
-   #define op ldst.anop
-   unsigned int anrd:5;
-   #define rd ldst.anrd
-   unsigned int op3:6;
-   unsigned int anrs1:5;
-   #define rs1 ldst.anrs1
-   unsigned int i:1;
-   unsigned int anasi:8;
-   #define asi ldst.anasi
-   unsigned int anrs2:5;
-   #define rs2 ldst.anrs2
-   #define shcnt rs2
- } ldst;
-       struct
- {
-   unsigned int anop:2, anrd:5, op3:6, anrs1:5, i:1;
-   unsigned int IMM13:13;
-   #define imm13 IMM13.IMM13
- } IMM13;
-       struct
- {
-   unsigned int anop:2;
-   unsigned int a:1;
-   unsigned int cond:4;
-   unsigned int op2:3;
-   unsigned int DISP22:22;
-   #define disp22 branch.DISP22
-   #define imm22 disp22
- } branch;
-       struct
- {
-   unsigned int anop:2;
-   unsigned int a:1;
-   unsigned int z:1;
-   unsigned int rcond:3;
-   unsigned int op2:3;
-   unsigned int DISP16HI:2;
-   unsigned int p:1;
-   unsigned int _rs1:5;
-   unsigned int DISP16LO:14;
- } branch16;
-       struct
- {
-   unsigned int anop:2;
-   unsigned int adisp30:30;
-   #define disp30 call.adisp30
- } call;
-     };
-
-   */
-
-/* Nonzero if INSN is the opcode for a delayed branch.  */
-static int
-is_delayed_branch (insn)
-     unsigned long insn;
-{
-  struct opcode_hash *op;
-
-  for (op = opcode_hash_table[HASH_INSN (insn)]; op; op = op->next)
-    {
-      const struct sparc_opcode *opcode = op->opcode;
-      if ((opcode->match & insn) == opcode->match
-  && (opcode->lose & insn) == 0)
- return (opcode->flags & F_DELAYED);
-    }
-  return 0;
-}
-
-/* Nonzero of opcode table has been initialized.  */
-static int opcodes_initialized = 0;
-
-/* extern void qsort (); */
-static int compare_opcodes ();
-
-/* Print one instruction from MEMADDR on INFO->STREAM.
-
-   We suffix the instruction with a comment that gives the absolute
-   address involved, as well as its symbolic form, if the instruction
-   is preceded by a findable `sethi' and it either adds an immediate
-   displacement to that register, or it is an `add' or `or' instruction
-   on that register.  */
-
-int
-print_insn_sparc (memaddr, info)
-     bfd_vma memaddr;
-     disassemble_info *info;
-{
-  FILE *stream = info->stream;
-  bfd_byte buffer[4];
-  unsigned long insn;
-  register unsigned int i;
-  register struct opcode_hash *op;
-  int sparc_v9_p = bfd_mach_sparc_v9_p (info->mach);
-
-  if (!opcodes_initialized)
-    {
-      qsort ((char *) sparc_opcodes, sparc_num_opcodes,
-     sizeof (sparc_opcodes[0]), compare_opcodes);
-      build_hash_table (sparc_opcodes, opcode_hash_table, sparc_num_opcodes);
-      opcodes_initialized = 1;
-    }
-
-  {
-    int status =
-      (*info->read_memory_func) (memaddr, buffer, sizeof (buffer), info);
-    if (status != 0)
-      {
- (*info->memory_error_func) (status, memaddr, info);
- return -1;
-      }
-  }
-
-  insn = bfd_getb32 (buffer);
-
-  info->insn_info_valid = 1; /* We do return this info */
-  info->insn_type = dis_nonbranch; /* Assume non branch insn */
-  info->branch_delay_insns = 0; /* Assume no delay */
-  info->target = 0; /* Assume no target known */
-
-  for (op = opcode_hash_table[HASH_INSN (insn)]; op; op = op->next)
-    {
-      const struct sparc_opcode *opcode = op->opcode;
-
-      /* ??? These architecture tests need to be more selective.  */
-
-      /* If the current architecture isn't sparc64, skip sparc64 insns.  */
-      if (!sparc_v9_p
-  && V9_ONLY_P (opcode))
- continue;
-
-      /* If the current architecture is sparc64, skip sparc32 only insns.  */
-      if (sparc_v9_p
-  && ! V9_P (opcode))
- continue;
-
-      if ((opcode->match & insn) == opcode->match
-  && (opcode->lose & insn) == 0)
- {
-  /* Nonzero means that we have found an instruction which has
-     the effect of adding or or'ing the imm13 field to rs1.  */
-  int imm_added_to_rs1 = 0;
-
-  /* Nonzero means that we have found a plus sign in the args
-     field of the opcode table.  */
-  int found_plus = 0;
-  
-  /* Nonzero means we have an annulled branch.  */
-  int is_annulled = 0;
-
-  /* Do we have an `add' or `or' instruction where rs1 is the same
-     as rsd, and which has the i bit set?  */
-  if ((opcode->match == 0x80102000 || opcode->match == 0x80002000)
-  /*  (or) (add)  */
-      && X_RS1 (insn) == X_RD (insn))
-    imm_added_to_rs1 = 1;
-
-  if (X_RS1 (insn) != X_RD (insn)
-      && strchr (opcode->args, 'r') != 0)
-      /* Can't do simple format if source and dest are different.  */
-      continue;
-  if (X_RS2 (insn) != X_RD (insn)
-      && strchr (opcode->args, 'O') != 0)
-      /* Can't do simple format if source and dest are different.  */
-      continue;
-
-  (*info->fprintf_func) (stream, opcode->name);
-
-  {
-    register const char *s;
-
-    if (opcode->args[0] != ',')
-      (*info->fprintf_func) (stream, " ");
-    for (s = opcode->args; *s != '\0'; ++s)
-      {
- while (*s == ',')
-  {
-    (*info->fprintf_func) (stream, ",");
-    ++s;
-    switch (*s) {
-    case 'a':
-      (*info->fprintf_func) (stream, "a");
-      is_annulled = 1;
-      ++s;
-      continue;
-    case 'N':
-      (*info->fprintf_func) (stream, "pn");
-      ++s;
-      continue;
-
-    case 'T':
-      (*info->fprintf_func) (stream, "pt");
-      ++s;
-      continue;
-
-    default:
-      break;
-    } /* switch on arg */
-  } /* while there are comma started args */
-
- (*info->fprintf_func) (stream, " ");
-
- switch (*s)
-  {
-  case '+':
-    found_plus = 1;
-
-    /* note fall-through */
-  default:
-    (*info->fprintf_func) (stream, "%c", *s);
-    break;
-
-  case '#':
-    (*info->fprintf_func) (stream, "0");
-    break;
-
-#define reg(n) (*info->fprintf_func) (stream, "%%%s", reg_names[n])
-  case '1':
-  case 'r':
-    reg (X_RS1 (insn));
-    break;
-
-  case '2':
-  case 'O':
-    reg (X_RS2 (insn));
-    break;
-
-  case 'd':
-    reg (X_RD (insn));
-    break;
-#undef reg
-
-#define freg(n) (*info->fprintf_func) (stream, "%%%s", freg_names[n])
-#define fregx(n) (*info->fprintf_func) (stream, "%%%s", freg_names[((n) & ~1) | (((n) & 1) << 5)])
-  case 'e':
-    freg (X_RS1 (insn));
-    break;
-  case 'v': /* double/even */
-  case 'V': /* quad/multiple of 4 */
-    fregx (X_RS1 (insn));
-    break;
-
-  case 'f':
-    freg (X_RS2 (insn));
-    break;
-  case 'B': /* double/even */
-  case 'R': /* quad/multiple of 4 */
-    fregx (X_RS2 (insn));
-    break;
-
-  case 'g':
-    freg (X_RD (insn));
-    break;
-  case 'H': /* double/even */
-  case 'J': /* quad/multiple of 4 */
-    fregx (X_RD (insn));
-    break;
-#undef freg
-#undef fregx
-
-#define creg(n) (*info->fprintf_func) (stream, "%%c%u", (unsigned int) (n))
-  case 'b':
-    creg (X_RS1 (insn));
-    break;
-
-  case 'c':
-    creg (X_RS2 (insn));
-    break;
-
-  case 'D':
-    creg (X_RD (insn));
-    break;
-#undef creg
-
-  case 'h':
-    (*info->fprintf_func) (stream, "%%hi(%#x)",
-   (0xFFFFFFFF
-    & ((int) X_IMM22 (insn) << 10)));
-    break;
-
-  case 'i':
-    {
-      int imm = SEX (X_IMM13 (insn), 13);
-
-      /* Check to see whether we have a 1+i, and take
- note of that fact.
-
- Note: because of the way we sort the table,
- we will be matching 1+i rather than i+1,
- so it is OK to assume that i is after +,
- not before it.  */
-      if (found_plus)
- imm_added_to_rs1 = 1;
-      
-      if (imm <= 9)
- (*info->fprintf_func) (stream, "%d", imm);
-      else
- (*info->fprintf_func) (stream, "%#x", imm);
-    }
-    break;
-
-  case 'I': /* 11 bit immediate.  */
-  case 'j': /* 10 bit immediate.  */
-    {
-      int imm;
-
-      if (*s == 'I')
- imm = SEX (X_IMM13 (insn), 11);
-      else
- imm = SEX (X_IMM13 (insn), 10);
-
-      /* Check to see whether we have a 1+i, and take
- note of that fact.
-
- Note: because of the way we sort the table,
- we will be matching 1+i rather than i+1,
- so it is OK to assume that i is after +,
- not before it.  */
-      if (found_plus)
- imm_added_to_rs1 = 1;
-      
-      if (imm <= 9)
- (info->fprintf_func) (stream, "%d", imm);
-      else
- (info->fprintf_func) (stream, "%#x", (unsigned) imm);
-    }
-    break;
-
-  case 'K':
-    {
-      int mask = X_MEMBAR (insn);
-      int bit = 0x40, printed_one = 0;
-      char *name;
-
-      if (mask == 0)
- (info->fprintf_func) (stream, "0");
-      else
- while (bit)
-  {
-    if (mask & bit)
-      {
- if (printed_one)
-  (info->fprintf_func) (stream, "|");
- name = sparc_decode_membar (bit);
- (info->fprintf_func) (stream, "%s", name);
- printed_one = 1;
-      }
-    bit >>= 1;
-  }
-      break;
-    }
-
-  case 'k':
-    info->target = memaddr + SEX (X_DISP16 (insn), 16) * 4;
-    (*info->print_address_func) (info->target, info);
-    break;
-
-  case 'G':
-    info->target = memaddr + SEX (X_DISP19 (insn), 19) * 4;
-    (*info->print_address_func) (info->target, info);
-    break;
-
-  case '6':
-  case '7':
-  case '8':
-  case '9':
-    (*info->fprintf_func) (stream, "%%fcc%c", *s - '6' + '0');
-    break;
-
-  case 'z':
-    (*info->fprintf_func) (stream, "%%icc");
-    break;
-
-  case 'Z':
-    (*info->fprintf_func) (stream, "%%xcc");
-    break;
-
-  case 'E':
-    (*info->fprintf_func) (stream, "%%ccr");
-    break;
-
-  case 's':
-    (*info->fprintf_func) (stream, "%%fprs");
-    break;
-
-  case 'o':
-    (*info->fprintf_func) (stream, "%%asi");
-    break;
-
-  case 'W':
-    (*info->fprintf_func) (stream, "%%tick");
-    break;
-
-  case 'P':
-    (*info->fprintf_func) (stream, "%%pc");
-    break;
-
-  case '?':
-    if (X_RS1 (insn) == 31)
-      (*info->fprintf_func) (stream, "%%ver");
-    else if ((unsigned) X_RS1 (insn) < 16)
-      (*info->fprintf_func) (stream, "%%%s",
-     v9_priv_reg_names[X_RS1 (insn)]);
-    else
-      (*info->fprintf_func) (stream, "%%reserved");
-    break;
-
-  case '!':
-    if ((unsigned) X_RD (insn) < 15)
-      (*info->fprintf_func) (stream, "%%%s",
-     v9_priv_reg_names[X_RD (insn)]);
-    else
-      (*info->fprintf_func) (stream, "%%reserved");
-    break;
-
-  case '*':
-    {
-      char *name = sparc_decode_prefetch (X_RD (insn));
-
-      if (name)
- (*info->fprintf_func) (stream, "%s", name);
-      else
- (*info->fprintf_func) (stream, "%d", X_RD (insn));
-      break;
-    }
-
-  case 'M':
-    (*info->fprintf_func) (stream, "%%asr%d", X_RS1 (insn));
-    break;
-    
-  case 'm':
-    (*info->fprintf_func) (stream, "%%asr%d", X_RD (insn));
-    break;
-    
-  case 'L':
-    info->target = memaddr + SEX (X_DISP30 (insn), 30) * 4;
-    (*info->print_address_func) (info->target, info);
-    break;
-
-  case 'n':
-    (*info->fprintf_func)
-      (stream, "%#x", SEX (X_DISP22 (insn), 22));
-    break;
-
-  case 'l':
-    info->target = memaddr + SEX (X_DISP22 (insn), 22) * 4;
-    (*info->print_address_func) (info->target, info);
-    break;
-
-  case 'A':
-    {
-      char *name = sparc_decode_asi (X_ASI (insn));
-
-      if (name)
- (*info->fprintf_func) (stream, "%s", name);
-      else
- (*info->fprintf_func) (stream, "(%d)", X_ASI (insn));
-      break;
-    }
-
-  case 'C':
-    (*info->fprintf_func) (stream, "%%csr");
-    break;
-
-  case 'F':
-    (*info->fprintf_func) (stream, "%%fsr");
-    break;
-
-  case 'p':
-    (*info->fprintf_func) (stream, "%%psr");
-    break;
-
-  case 'q':
-    (*info->fprintf_func) (stream, "%%fq");
-    break;
-
-  case 'Q':
-    (*info->fprintf_func) (stream, "%%cq");
-    break;
-
-  case 't':
-    (*info->fprintf_func) (stream, "%%tbr");
-    break;
-
-  case 'w':
-    (*info->fprintf_func) (stream, "%%wim");
-    break;
-
-  case 'x':
-    (*info->fprintf_func) (stream, "%d",
-   ((X_LDST_I (insn) << 8)
-    + X_ASI (insn)));
-    break;
-
-  case 'y':
-    (*info->fprintf_func) (stream, "%%y");
-    break;
-
-  case 'u':
-  case 'U':
-    {
-      int val = *s == 'U' ? X_RS1 (insn) : X_RD (insn);
-      char *name = sparc_decode_sparclet_cpreg (val);
-
-      if (name)
- (*info->fprintf_func) (stream, "%s", name);
-      else
- (*info->fprintf_func) (stream, "%%cpreg(%d)", val);
-      break;
-    }
-  }
-      }
-  }
-
-  /* If we are adding or or'ing something to rs1, then
-     check to see whether the previous instruction was
-     a sethi to the same register as in the sethi.
-     If so, attempt to print the result of the add or
-     or (in this context add and or do the same thing)
-     and its symbolic value.  */
-  if (imm_added_to_rs1)
-    {
-      unsigned long prev_insn;
-      int errcode;
-
-      errcode =
- (*info->read_memory_func)
-  (memaddr - 4, buffer, sizeof (buffer), info);
-      prev_insn = bfd_getb32 (buffer);
-
-      if (errcode == 0)
- {
-  /* If it is a delayed branch, we need to look at the
-     instruction before the delayed branch.  This handles
-     sequences such as
-
-     sethi %o1, %hi(_foo), %o1
-     call _printf
-     or %o1, %lo(_foo), %o1
-     */
-
-  if (is_delayed_branch (prev_insn))
-    {
-      errcode = (*info->read_memory_func)
- (memaddr - 8, buffer, sizeof (buffer), info);
-      prev_insn = bfd_getb32 (buffer);
-    }
- }
-
-      /* If there was a problem reading memory, then assume
- the previous instruction was not sethi.  */
-      if (errcode == 0)
- {
-  /* Is it sethi to the same register?  */
-  if ((prev_insn & 0xc1c00000) == 0x01000000
-      && X_RD (prev_insn) == X_RS1 (insn))
-    {
-      (*info->fprintf_func) (stream, "\t! ");
-      info->target =
- (0xFFFFFFFF & (int) X_IMM22 (prev_insn) << 10)
- | SEX (X_IMM13 (insn), 13);
-      (*info->print_address_func) (info->target, info);
-      info->insn_type = dis_dref;
-      info->data_size = 4;  /* FIXME!!! */
-    }
- }
-    }
-
-  if (opcode->flags & (F_UNBR|F_CONDBR|F_JSR))
-    {
- /* FIXME -- check is_annulled flag */
-      if (opcode->flags & F_UNBR)
- info->insn_type = dis_branch;
-      if (opcode->flags & F_CONDBR)
- info->insn_type = dis_condbranch;
-      if (opcode->flags & F_JSR)
- info->insn_type = dis_jsr;
-      if (opcode->flags & F_DELAYED)
- info->branch_delay_insns = 1;
-    }
-
-  return sizeof (buffer);
- }
-    }
-
-  info->insn_type = dis_noninsn; /* Mark as non-valid instruction */
-  (*info->fprintf_func) (stream, "unknown");
-  return sizeof (buffer);
-}
-
-/* Compare opcodes A and B.  */
-
-static int
-compare_opcodes (a, b)
-     char *a, *b;
-{
-  struct sparc_opcode *op0 = (struct sparc_opcode *) a;
-  struct sparc_opcode *op1 = (struct sparc_opcode *) b;
-  unsigned long int match0 = op0->match, match1 = op1->match;
-  unsigned long int lose0 = op0->lose, lose1 = op1->lose;
-  register unsigned int i;
-
-  /* If a bit is set in both match and lose, there is something
-     wrong with the opcode table.  */
-  if (match0 & lose0)
-    {
-      fprintf (stderr, "Internal error:  bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n",
-       op0->name, match0, lose0);
-      op0->lose &= ~op0->match;
-      lose0 = op0->lose;
-    }
-
-  if (match1 & lose1)
-    {
-      fprintf (stderr, "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n",
-       op1->name, match1, lose1);
-      op1->lose &= ~op1->match;
-      lose1 = op1->lose;
-    }
-
-  /* Because the bits that are variable in one opcode are constant in
-     another, it is important to order the opcodes in the right order.  */
-  for (i = 0; i < 32; ++i)
-    {
-      unsigned long int x = 1 << i;
-      int x0 = (match0 & x) != 0;
-      int x1 = (match1 & x) != 0;
-
-      if (x0 != x1)
- return x1 - x0;
-    }
-
-  for (i = 0; i < 32; ++i)
-    {
-      unsigned long int x = 1 << i;
-      int x0 = (lose0 & x) != 0;
-      int x1 = (lose1 & x) != 0;
-
-      if (x0 != x1)
- return x1 - x0;
-    }
-
-  /* Put non-sparc64 insns ahead of sparc64 ones.  */
-  if (V9_ONLY_P (op0) != V9_ONLY_P (op1))
-    return V9_ONLY_P (op0) - V9_ONLY_P (op1);
-
-  /* They are functionally equal.  So as long as the opcode table is
-     valid, we can put whichever one first we want, on aesthetic grounds.  */
-
-  /* Our first aesthetic ground is that aliases defer to real insns.  */
-  {
-    int alias_diff = (op0->flags & F_ALIAS) - (op1->flags & F_ALIAS);
-    if (alias_diff != 0)
-      /* Put the one that isn't an alias first.  */
-      return alias_diff;
-  }
-
-  /* Except for aliases, two "identical" instructions had
-     better have the same opcode.  This is a sanity check on the table.  */
-  i = strcmp (op0->name, op1->name);
-  if (i)
-      if (op0->flags & F_ALIAS) /* If they're both aliases, be arbitrary. */
-  return i;
-      else
-  fprintf (stderr,
-   "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n",
-   op0->name, op1->name);
-
-  /* Fewer arguments are preferred.  */
-  {
-    int length_diff = strlen (op0->args) - strlen (op1->args);
-    if (length_diff != 0)
-      /* Put the one with fewer arguments first.  */
-      return length_diff;
-  }
-
-  /* Put 1+i before i+1.  */
-  {
-    char *p0 = (char *) strchr(op0->args, '+');
-    char *p1 = (char *) strchr(op1->args, '+');
-
-    if (p0 && p1)
-      {
- /* There is a plus in both operands.  Note that a plus
-   sign cannot be the first character in args,
-   so the following [-1]'s are valid.  */
- if (p0[-1] == 'i' && p1[1] == 'i')
-  /* op0 is i+1 and op1 is 1+i, so op1 goes first.  */
-  return 1;
- if (p0[1] == 'i' && p1[-1] == 'i')
-  /* op0 is 1+i and op1 is i+1, so op0 goes first.  */
-  return -1;
-      }
-  }
-
-  /* Put 1,i before i,1.  */
-  {
-    int i0 = strncmp (op0->args, "i,1", 3) == 0;
-    int i1 = strncmp (op1->args, "i,1", 3) == 0;
-
-    if (i0 ^ i1)
-      return i0 - i1;
-  }
-
-  /* They are, as far as we can tell, identical.
-     Since qsort may have rearranged the table partially, there is
-     no way to tell which one was first in the opcode table as
-     written, so just say there are equal.  */
-  return 0;
-}
-
-/* Build a hash table from the opcode table.  */
-
-static void
-build_hash_table (table, hash_table, num_opcodes)
-     struct sparc_opcode *table;
-     struct opcode_hash **hash_table;
-     int num_opcodes;
-{
-  register int i;
-  int hash_count[HASH_SIZE];
-  static struct opcode_hash *hash_buf = NULL;
-
-  /* Start at the end of the table and work backwards so that each
-     chain is sorted.  */
-
-  memset (hash_table, 0, HASH_SIZE * sizeof (hash_table[0]));
-  memset (hash_count, 0, HASH_SIZE * sizeof (hash_count[0]));
-  if (hash_buf != NULL)
-    free (hash_buf);
-  hash_buf = (struct opcode_hash *) xmalloc (sizeof (struct opcode_hash) * num_opcodes);
-  for (i = num_opcodes - 1; i >= 0; --i)
-    {
-      register int hash = HASH_INSN (sparc_opcodes[i].match);
-      register struct opcode_hash *h = &hash_buf[i];
-      h->next = hash_table[hash];
-      h->opcode = &sparc_opcodes[i];
-      hash_table[hash] = h;
-      ++hash_count[hash];
-    }
-
-#if 0 /* for debugging */
-  {
-    int min_count = num_opcodes, max_count = 0;
-    int total;
-
-    for (i = 0; i < HASH_SIZE; ++i)
-      {
-        if (hash_count[i] < min_count)
-  min_count = hash_count[i];
- if (hash_count[i] > max_count)
-  max_count = hash_count[i];
- total += hash_count[i];
-      }
-
-    printf ("Opcode hash table stats: min %d, max %d, ave %f\n",
-    min_count, max_count, (double) total / HASH_SIZE);
-  }
-#endif
-}
diff --git a/opcode/sparc-opc.c b/opcode/sparc-opc.c
deleted file mode 100644
index d21835c..0000000
--- a/opcode/sparc-opc.c
+++ /dev/null
@@ -1,1757 +0,0 @@
-/* Table of opcodes for the sparc.
-   Copyright (C) 1989, 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
-
-This file is part of the BFD library.
-
-BFD 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.
-
-BFD 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 software; see the file COPYING.  If not, write to
-the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* FIXME-someday: perhaps the ,a's and such should be embedded in the
-   instruction's name rather than the args.  This would make gas faster, pinsn
-   slower, but would mess up some macros a bit.  xoxorich. */
-
-/* v9 FIXME: Doesn't accept `setsw', `setx' synthetic instructions for v9.  */
-
-#include <stdio.h>
-#include "ansidecl.h"
-#include "opcode/sparc.h"
-
-/* Some defines to make life easy.  */
-#define MASK_V6 (1 << SPARC_OPCODE_ARCH_V6)
-#define MASK_V7 (1 << SPARC_OPCODE_ARCH_V7)
-#define MASK_V8 (1 << SPARC_OPCODE_ARCH_V8)
-#define MASK_SPARCLET (1 << SPARC_OPCODE_ARCH_SPARCLET)
-#define MASK_SPARCLITE (1 << SPARC_OPCODE_ARCH_SPARCLITE)
-#define MASK_V9 (1 << SPARC_OPCODE_ARCH_V9)
-#define MASK_V9A (1 << SPARC_OPCODE_ARCH_V9A)
-
-/* Bit masks of architectures supporting the insn.  */
-
-#define v6 (MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLET \
- | MASK_SPARCLITE | MASK_V9 | MASK_V9A)
-#define v7 (MASK_V7 | MASK_V8 | MASK_SPARCLET \
- | MASK_SPARCLITE | MASK_V9 | MASK_V9A)
-/* Although not all insns are implemented in hardware, sparclite is defined
-   to be a superset of v8.  Unimplemented insns trap and are then theoretically
-   implemented in software.
-   It's not clear that the same is true for sparclet, although the docs
-   suggest it is.  Rather than complicating things, the sparclet assembler
-   recognizes all v8 insns.  */
-#define v8 (MASK_V8 | MASK_SPARCLET | MASK_SPARCLITE | MASK_V9 | MASK_V9A)
-#define sparclet (MASK_SPARCLET)
-#define sparclite (MASK_SPARCLITE)
-#define v9 (MASK_V9 | MASK_V9A)
-#define v9a (MASK_V9A)
-/* v6 insns not supported by v9 */
-#define v6notv9 (MASK_V6 | MASK_V7 | MASK_V8 \
- | MASK_SPARCLET | MASK_SPARCLITE)
-
-/* Table of opcode architectures.
-   The order is defined in opcode/sparc.h.  */
-const struct sparc_opcode_arch sparc_opcode_archs[] = {
-  { "v6", MASK_V6 },
-  { "v7", MASK_V6 | MASK_V7 },
-  { "v8", MASK_V6 | MASK_V7 | MASK_V8 },
-  { "sparclet", MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLET },
-  { "sparclite", MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLITE },
-  /* ??? Don't some v8 priviledged insns conflict with v9?  */
-  { "v9", MASK_V6 | MASK_V7 | MASK_V8 | MASK_V9 },
-  /* v9 with ultrasparc additions */
-  { "v9a", MASK_V6 | MASK_V7 | MASK_V8 | MASK_V9 | MASK_V9A },
-  { NULL, 0 }
-};
-
-/* Given NAME, return it's architecture entry.  */
-
-enum sparc_opcode_arch_val
-sparc_opcode_lookup_arch (name)
-     const char *name;
-{
-  const struct sparc_opcode_arch *p;
-
-  for (p = &sparc_opcode_archs[0]; p->name; ++p)
-    {
-      if (strcmp (name, p->name) == 0)
- return (enum sparc_opcode_arch_val) (p - &sparc_opcode_archs[0]);
-    }
-
-  return SPARC_OPCODE_ARCH_BAD;
-}
-
-/* Branch condition field.  */
-#define COND(x) (((x)&0xf)<<25)
-
-/* v9: Move (MOVcc and FMOVcc) condition field.  */
-#define MCOND(x,i_or_f) ((((i_or_f)&1)<<18)|(((x)>>11)&(0xf<<14))) /* v9 */
-
-/* v9: Move register (MOVRcc and FMOVRcc) condition field.  */
-#define RCOND(x) (((x)&0x7)<<10) /* v9 */
-
-#define CONDA (COND(0x8))
-#define CONDCC (COND(0xd))
-#define CONDCS (COND(0x5))
-#define CONDE (COND(0x1))
-#define CONDG (COND(0xa))
-#define CONDGE (COND(0xb))
-#define CONDGU (COND(0xc))
-#define CONDL (COND(0x3))
-#define CONDLE (COND(0x2))
-#define CONDLEU (COND(0x4))
-#define CONDN (COND(0x0))
-#define CONDNE (COND(0x9))
-#define CONDNEG (COND(0x6))
-#define CONDPOS (COND(0xe))
-#define CONDVC (COND(0xf))
-#define CONDVS (COND(0x7))
-
-#define CONDNZ CONDNE
-#define CONDZ CONDE
-#define CONDGEU CONDCC
-#define CONDLU CONDCS
-
-#define FCONDA (COND(0x8))
-#define FCONDE (COND(0x9))
-#define FCONDG (COND(0x6))
-#define FCONDGE (COND(0xb))
-#define FCONDL (COND(0x4))
-#define FCONDLE (COND(0xd))
-#define FCONDLG (COND(0x2))
-#define FCONDN (COND(0x0))
-#define FCONDNE (COND(0x1))
-#define FCONDO (COND(0xf))
-#define FCONDU (COND(0x7))
-#define FCONDUE (COND(0xa))
-#define FCONDUG (COND(0x5))
-#define FCONDUGE (COND(0xc))
-#define FCONDUL (COND(0x3))
-#define FCONDULE (COND(0xe))
-
-#define FCONDNZ FCONDNE
-#define FCONDZ FCONDE
-
-#define ICC (0) /* v9 */
-#define XCC (1<<12) /* v9 */
-#define FCC(x) (((x)&0x3)<<11) /* v9 */
-#define FBFCC(x) (((x)&0x3)<<20) /* v9 */
-
-/* The order of the opcodes in the table is significant:
-
- * The assembler requires that all instances of the same mnemonic must
- be consecutive. If they aren't, the assembler will bomb at runtime.
-
- * The disassembler should not care about the order of the opcodes.
-
-*/
-
-/* Entries for commutative arithmetic operations.  */
-/* ??? More entries can make use of this.  */
-#define commuteop(opcode, op3, arch_mask) \
-{ opcode, F3(2, op3, 0), F3(~2, ~op3, ~0)|ASI(~0), "1,2,d", 0, arch_mask }, \
-{ opcode, F3(2, op3, 1), F3(~2, ~op3, ~1), "1,i,d", 0, arch_mask }, \
-{ opcode, F3(2, op3, 1), F3(~2, ~op3, ~1), "i,1,d", 0, arch_mask }
-
-struct sparc_opcode sparc_opcodes[] = {
-
-{ "ld", F3(3, 0x00, 0), F3(~3, ~0x00, ~0), "[1+2],d", 0, v6 },
-{ "ld", F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0, "[1],d", 0, v6 }, /* ld [rs1+%g0],d */
-{ "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[1+i],d", 0, v6 },
-{ "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[i+1],d", 0, v6 },
-{ "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0, "[i],d", 0, v6 },
-{ "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ld [rs1+0],d */
-{ "ld", F3(3, 0x20, 0), F3(~3, ~0x20, ~0), "[1+2],g", 0, v6 },
-{ "ld", F3(3, 0x20, 0), F3(~3, ~0x20, ~0)|RS2_G0, "[1],g", 0, v6 }, /* ld [rs1+%g0],d */
-{ "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1), "[1+i],g", 0, v6 },
-{ "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1), "[i+1],g", 0, v6 },
-{ "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|RS1_G0, "[i],g", 0, v6 },
-{ "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|SIMM13(~0), "[1],g", 0, v6 }, /* ld [rs1+0],d */
-
-{ "ld", F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RD(~0), "[1+2],F", 0, v6 },
-{ "ld", F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RS2_G0|RD(~0),"[1],F", 0, v6 }, /* ld [rs1+%g0],d */
-{ "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0), "[1+i],F", 0, v6 },
-{ "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0), "[i+1],F", 0, v6 },
-{ "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~0),"[i],F", 0, v6 },
-{ "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~0),"[1],F", 0, v6 }, /* ld [rs1+0],d */
-
-{ "ld", F3(3, 0x30, 0), F3(~3, ~0x30, ~0), "[1+2],D", 0, v6notv9 },
-{ "ld", F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0, "[1],D", 0, v6notv9 }, /* ld [rs1+%g0],d */
-{ "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[1+i],D", 0, v6notv9 },
-{ "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[i+1],D", 0, v6notv9 },
-{ "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0, "[i],D", 0, v6notv9 },
-{ "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0), "[1],D", 0, v6notv9 }, /* ld [rs1+0],d */
-{ "ld", F3(3, 0x31, 0), F3(~3, ~0x31, ~0), "[1+2],C", 0, v6notv9 },
-{ "ld", F3(3, 0x31, 0), F3(~3, ~0x31, ~0)|RS2_G0, "[1],C", 0, v6notv9 }, /* ld [rs1+%g0],d */
-{ "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1), "[1+i],C", 0, v6notv9 },
-{ "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1), "[i+1],C", 0, v6notv9 },
-{ "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|RS1_G0, "[i],C", 0, v6notv9 },
-{ "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|SIMM13(~0), "[1],C", 0, v6notv9 }, /* ld [rs1+0],d */
-
-/* The v9 LDUW is the same as the old 'ld' opcode, it is not the same as the
-   'ld' pseudo-op in v9.  */
-{ "lduw", F3(3, 0x00, 0), F3(~3, ~0x00, ~0), "[1+2],d", F_ALIAS, v9 },
-{ "lduw", F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0, "[1],d", F_ALIAS, v9 }, /* ld [rs1+%g0],d */
-{ "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[1+i],d", F_ALIAS, v9 },
-{ "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[i+1],d", F_ALIAS, v9 },
-{ "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0, "[i],d", F_ALIAS, v9 },
-{ "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0), "[1],d", F_ALIAS, v9 }, /* ld [rs1+0],d */
-
-{ "ldd", F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI(~0), "[1+2],d", 0, v6 },
-{ "ldd", F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldd [rs1+%g0],d */
-{ "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1), "[1+i],d", 0, v6 },
-{ "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1), "[i+1],d", 0, v6 },
-{ "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|RS1_G0, "[i],d", 0, v6 },
-{ "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldd [rs1+0],d */
-{ "ldd", F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI(~0), "[1+2],H", 0, v6 },
-{ "ldd", F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI_RS2(~0), "[1],H", 0, v6 }, /* ldd [rs1+%g0],d */
-{ "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1), "[1+i],H", 0, v6 },
-{ "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1), "[i+1],H", 0, v6 },
-{ "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|RS1_G0, "[i],H", 0, v6 },
-{ "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|SIMM13(~0), "[1],H", 0, v6 }, /* ldd [rs1+0],d */
-
-{ "ldd", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI(~0), "[1+2],D", 0, v6notv9 },
-{ "ldd", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI_RS2(~0), "[1],D", 0, v6notv9 }, /* ldd [rs1+%g0],d */
-{ "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[1+i],D", 0, v6notv9 },
-{ "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[i+1],D", 0, v6notv9 },
-{ "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0, "[i],D", 0, v6notv9 },
-{ "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0), "[1],D", 0, v6notv9 }, /* ldd [rs1+0],d */
-
-{ "ldq", F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI(~0), "[1+2],J", 0, v9 },
-{ "ldq", F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI_RS2(~0), "[1],J", 0, v9 }, /* ldd [rs1+%g0],d */
-{ "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1), "[1+i],J", 0, v9 },
-{ "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1), "[i+1],J", 0, v9 },
-{ "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|RS1_G0, "[i],J", 0, v9 },
-{ "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|SIMM13(~0), "[1],J", 0, v9 }, /* ldd [rs1+0],d */
-
-{ "ldsb", F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI(~0), "[1+2],d", 0, v6 },
-{ "ldsb", F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldsb [rs1+%g0],d */
-{ "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1), "[1+i],d", 0, v6 },
-{ "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1), "[i+1],d", 0, v6 },
-{ "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|RS1_G0, "[i],d", 0, v6 },
-{ "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldsb [rs1+0],d */
-
-{ "ldsh", F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldsh [rs1+%g0],d */
-{ "ldsh", F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI(~0), "[1+2],d", 0, v6 },
-{ "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1), "[1+i],d", 0, v6 },
-{ "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1), "[i+1],d", 0, v6 },
-{ "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|RS1_G0, "[i],d", 0, v6 },
-{ "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldsh [rs1+0],d */
-
-{ "ldstub", F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI(~0), "[1+2],d", 0, v6 },
-{ "ldstub", F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldstub [rs1+%g0],d */
-{ "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1), "[1+i],d", 0, v6 },
-{ "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1), "[i+1],d", 0, v6 },
-{ "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|RS1_G0, "[i],d", 0, v6 },
-{ "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldstub [rs1+0],d */
-
-{ "ldsw", F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI(~0), "[1+2],d", 0, v9 },
-{ "ldsw", F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI_RS2(~0), "[1],d", 0, v9 }, /* ldsw [rs1+%g0],d */
-{ "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1), "[1+i],d", 0, v9 },
-{ "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1), "[i+1],d", 0, v9 },
-{ "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|RS1_G0, "[i],d", 0, v9 },
-{ "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|SIMM13(~0), "[1],d", 0, v9 }, /* ldsw [rs1+0],d */
-
-{ "ldub", F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI(~0), "[1+2],d", 0, v6 },
-{ "ldub", F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldub [rs1+%g0],d */
-{ "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1), "[1+i],d", 0, v6 },
-{ "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1), "[i+1],d", 0, v6 },
-{ "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|RS1_G0, "[i],d", 0, v6 },
-{ "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldub [rs1+0],d */
-
-{ "lduh", F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI(~0), "[1+2],d", 0, v6 },
-{ "lduh", F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* lduh [rs1+%g0],d */
-{ "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1), "[1+i],d", 0, v6 },
-{ "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1), "[i+1],d", 0, v6 },
-{ "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|RS1_G0, "[i],d", 0, v6 },
-{ "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* lduh [rs1+0],d */
-
-{ "ldx", F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI(~0), "[1+2],d", 0, v9 },
-{ "ldx", F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI_RS2(~0), "[1],d", 0, v9 }, /* ldx [rs1+%g0],d */
-{ "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1), "[1+i],d", 0, v9 },
-{ "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1), "[i+1],d", 0, v9 },
-{ "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|RS1_G0, "[i],d", 0, v9 },
-{ "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|SIMM13(~0), "[1],d", 0, v9 }, /* ldx [rs1+0],d */
-
-{ "ldx", F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RD(~1), "[1+2],F", 0, v9 },
-{ "ldx", F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RS2_G0|RD(~1), "[1],F", 0, v9 }, /* ld [rs1+%g0],d */
-{ "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1), "[1+i],F", 0, v9 },
-{ "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1), "[i+1],F", 0, v9 },
-{ "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~1), "[i],F", 0, v9 },
-{ "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~1),"[1],F", 0, v9 }, /* ld [rs1+0],d */
-
-{ "lda", F3(3, 0x10, 0), F3(~3, ~0x10, ~0), "[1+2]A,d", 0, v6 },
-{ "lda", F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lda [rs1+%g0],d */
-{ "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[1+i]o,d", 0, v9 },
-{ "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[i+1]o,d", 0, v9 },
-{ "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-{ "lda", F3(3, 0x30, 0), F3(~3, ~0x30, ~0), "[1+2]A,g", 0, v9 },
-{ "lda", F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0, "[1]A,g", 0, v9 }, /* lda [rs1+%g0],d */
-{ "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[1+i]o,g", 0, v9 },
-{ "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[i+1]o,g", 0, v9 },
-{ "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0, "[i]o,g", 0, v9 },
-{ "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0), "[1]o,g", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldda", F3(3, 0x13, 0), F3(~3, ~0x13, ~0), "[1+2]A,d", 0, v6 },
-{ "ldda", F3(3, 0x13, 0), F3(~3, ~0x13, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldda [rs1+%g0],d */
-{ "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1), "[1+i]o,d", 0, v9 },
-{ "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1), "[i+1]o,d", 0, v9 },
-{ "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldda", F3(3, 0x33, 0), F3(~3, ~0x33, ~0), "[1+2]A,H", 0, v9 },
-{ "ldda", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|RS2_G0, "[1]A,H", 0, v9 }, /* ldda [rs1+%g0],d */
-{ "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[1+i]o,H", 0, v9 },
-{ "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[i+1]o,H", 0, v9 },
-{ "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0, "[i]o,H", 0, v9 },
-{ "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0), "[1]o,H", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldqa", F3(3, 0x32, 0), F3(~3, ~0x32, ~0), "[1+2]A,J", 0, v9 },
-{ "ldqa", F3(3, 0x32, 0), F3(~3, ~0x32, ~0)|RS2_G0, "[1]A,J", 0, v9 }, /* ldd [rs1+%g0],d */
-{ "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1), "[1+i]o,J", 0, v9 },
-{ "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1), "[i+1]o,J", 0, v9 },
-{ "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|RS1_G0, "[i]o,J", 0, v9 },
-{ "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|SIMM13(~0), "[1]o,J", 0, v9 }, /* ldd [rs1+0],d */
-
-{ "ldsba", F3(3, 0x19, 0), F3(~3, ~0x19, ~0), "[1+2]A,d", 0, v6 },
-{ "ldsba", F3(3, 0x19, 0), F3(~3, ~0x19, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldsba [rs1+%g0],d */
-{ "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1), "[1+i]o,d", 0, v9 },
-{ "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1), "[i+1]o,d", 0, v9 },
-{ "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldsha", F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0), "[1+2]A,d", 0, v6 },
-{ "ldsha", F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldsha [rs1+%g0],d */
-{ "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1), "[1+i]o,d", 0, v9 },
-{ "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1), "[i+1]o,d", 0, v9 },
-{ "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldstuba", F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0), "[1+2]A,d", 0, v6 },
-{ "ldstuba", F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldstuba [rs1+%g0],d */
-{ "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1), "[1+i]o,d", 0, v9 },
-{ "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1), "[i+1]o,d", 0, v9 },
-{ "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldswa", F3(3, 0x18, 0), F3(~3, ~0x18, ~0), "[1+2]A,d", 0, v9 },
-{ "ldswa", F3(3, 0x18, 0), F3(~3, ~0x18, ~0)|RS2_G0, "[1]A,d", 0, v9 }, /* lda [rs1+%g0],d */
-{ "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1), "[1+i]o,d", 0, v9 },
-{ "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1), "[i+1]o,d", 0, v9 },
-{ "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "lduba", F3(3, 0x11, 0), F3(~3, ~0x11, ~0), "[1+2]A,d", 0, v6 },
-{ "lduba", F3(3, 0x11, 0), F3(~3, ~0x11, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lduba [rs1+%g0],d */
-{ "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1), "[1+i]o,d", 0, v9 },
-{ "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1), "[i+1]o,d", 0, v9 },
-{ "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "lduha", F3(3, 0x12, 0), F3(~3, ~0x12, ~0), "[1+2]A,d", 0, v6 },
-{ "lduha", F3(3, 0x12, 0), F3(~3, ~0x12, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lduha [rs1+%g0],d */
-{ "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1), "[1+i]o,d", 0, v9 },
-{ "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1), "[i+1]o,d", 0, v9 },
-{ "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "lduwa", F3(3, 0x10, 0), F3(~3, ~0x10, ~0), "[1+2]A,d", F_ALIAS, v9 }, /* lduwa === lda */
-{ "lduwa", F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0, "[1]A,d", F_ALIAS, v9 }, /* lda [rs1+%g0],d */
-{ "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[1+i]o,d", F_ALIAS, v9 },
-{ "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[i+1]o,d", F_ALIAS, v9 },
-{ "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0, "[i]o,d", F_ALIAS, v9 },
-{ "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0), "[1]o,d", F_ALIAS, v9 }, /* ld [rs1+0],d */
-
-{ "ldxa", F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0), "[1+2]A,d", 0, v9 }, /* lduwa === lda */
-{ "ldxa", F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0)|RS2_G0, "[1]A,d", 0, v9 }, /* lda [rs1+%g0],d */
-{ "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1), "[1+i]o,d", 0, v9 },
-{ "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1), "[i+1]o,d", 0, v9 },
-{ "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "st", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
-{ "st", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* st d,[rs1+%g0] */
-{ "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", 0, v6 },
-{ "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", 0, v6 },
-{ "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", 0, v6 },
-{ "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* st d,[rs1+0] */
-{ "st", F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI(~0), "g,[1+2]", 0, v6 },
-{ "st", F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI_RS2(~0), "g,[1]", 0, v6 }, /* st d[rs1+%g0] */
-{ "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1), "g,[1+i]", 0, v6 },
-{ "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1), "g,[i+1]", 0, v6 },
-{ "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|RS1_G0, "g,[i]", 0, v6 },
-{ "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|SIMM13(~0), "g,[1]", 0, v6 }, /* st d,[rs1+0] */
-
-{ "st", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI(~0), "D,[1+2]", 0, v6notv9 },
-{ "st", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI_RS2(~0), "D,[1]", 0, v6notv9 }, /* st d,[rs1+%g0] */
-{ "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "D,[1+i]", 0, v6notv9 },
-{ "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "D,[i+1]", 0, v6notv9 },
-{ "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0, "D,[i]", 0, v6notv9 },
-{ "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0), "D,[1]", 0, v6notv9 }, /* st d,[rs1+0] */
-{ "st", F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI(~0), "C,[1+2]", 0, v6notv9 },
-{ "st", F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI_RS2(~0), "C,[1]", 0, v6notv9 }, /* st d,[rs1+%g0] */
-{ "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1), "C,[1+i]", 0, v6notv9 },
-{ "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1), "C,[i+1]", 0, v6notv9 },
-{ "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|RS1_G0, "C,[i]", 0, v6notv9 },
-{ "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|SIMM13(~0), "C,[1]", 0, v6notv9 }, /* st d,[rs1+0] */
-
-{ "st", F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI(~0), "F,[1+2]", 0, v6 },
-{ "st", F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI_RS2(~0), "F,[1]", 0, v6 }, /* st d,[rs1+%g0] */
-{ "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0, "F,[1+i]", 0, v6 },
-{ "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0, "F,[i+1]", 0, v6 },
-{ "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|RS1_G0, "F,[i]", 0, v6 },
-{ "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|SIMM13(~0), "F,[1]", 0, v6 }, /* st d,[rs1+0] */
-
-{ "stw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v9 },
-{ "stw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+%g0] */
-{ "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", F_ALIAS, v9 },
-{ "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", F_ALIAS, v9 },
-{ "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", F_ALIAS, v9 },
-{ "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+0] */
-
-{ "sta", F3(3, 0x14, 0), F3(~3, ~0x14, ~0), "d,[1+2]A", 0, v6 },
-{ "sta", F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* sta d,[rs1+%g0] */
-{ "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[1+i]o", 0, v9 },
-{ "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[i+1]o", 0, v9 },
-{ "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0, "d,[i]o", 0, v9 },
-{ "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* st d,[rs1+0] */
-
-{ "sta", F3(3, 0x34, 0), F3(~3, ~0x34, ~0), "g,[1+2]A", 0, v9 },
-{ "sta", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|RS2(~0), "g,[1]A", 0, v9 }, /* sta d,[rs1+%g0] */
-{ "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "g,[1+i]o", 0, v9 },
-{ "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "g,[i+1]o", 0, v9 },
-{ "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0, "g,[i]o", 0, v9 },
-{ "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0), "g,[1]o", 0, v9 }, /* st d,[rs1+0] */
-
-{ "stwa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0), "d,[1+2]A", F_ALIAS, v9 },
-{ "stwa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v9 }, /* sta d,[rs1+%g0] */
-{ "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[1+i]o", F_ALIAS, v9 },
-{ "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[i+1]o", F_ALIAS, v9 },
-{ "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
-{ "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* st d,[rs1+0] */
-
-{ "stb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
-{ "stb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* stb d,[rs1+%g0] */
-{ "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[1+i]", 0, v6 },
-{ "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[i+1]", 0, v6 },
-{ "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0, "d,[i]", 0, v6 },
-{ "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* stb d,[rs1+0] */
-
-{ "stba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0), "d,[1+2]A", 0, v6 },
-{ "stba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stba d,[rs1+%g0] */
-{ "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[1+i]o", 0, v9 },
-{ "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[i+1]o", 0, v9 },
-{ "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0, "d,[i]o", 0, v9 },
-{ "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* stb d,[rs1+0] */
-
-{ "std", F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
-{ "std", F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* std d,[rs1+%g0] */
-{ "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1), "d,[1+i]", 0, v6 },
-{ "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1), "d,[i+1]", 0, v6 },
-{ "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|RS1_G0, "d,[i]", 0, v6 },
-{ "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* std d,[rs1+0] */
-
-{ "std", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0), "q,[1+2]", 0, v6notv9 },
-{ "std", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0), "q,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
-{ "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "q,[1+i]", 0, v6notv9 },
-{ "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "q,[i+1]", 0, v6notv9 },
-{ "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0, "q,[i]", 0, v6notv9 },
-{ "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0), "q,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
-{ "std", F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI(~0), "H,[1+2]", 0, v6 },
-{ "std", F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI_RS2(~0), "H,[1]", 0, v6 }, /* std d,[rs1+%g0] */
-{ "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1), "H,[1+i]", 0, v6 },
-{ "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1), "H,[i+1]", 0, v6 },
-{ "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|RS1_G0, "H,[i]", 0, v6 },
-{ "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|SIMM13(~0), "H,[1]", 0, v6 }, /* std d,[rs1+0] */
-
-{ "std", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0), "Q,[1+2]", 0, v6notv9 },
-{ "std", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0), "Q,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
-{ "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "Q,[1+i]", 0, v6notv9 },
-{ "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "Q,[i+1]", 0, v6notv9 },
-{ "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0, "Q,[i]", 0, v6notv9 },
-{ "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0), "Q,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
-{ "std", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI(~0), "D,[1+2]", 0, v6notv9 },
-{ "std", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI_RS2(~0), "D,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
-{ "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "D,[1+i]", 0, v6notv9 },
-{ "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "D,[i+1]", 0, v6notv9 },
-{ "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0, "D,[i]", 0, v6notv9 },
-{ "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0), "D,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
-
-{ "stda", F3(3, 0x17, 0), F3(~3, ~0x17, ~0), "d,[1+2]A", 0, v6 },
-{ "stda", F3(3, 0x17, 0), F3(~3, ~0x17, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stda d,[rs1+%g0] */
-{ "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1), "d,[1+i]o", 0, v9 },
-{ "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1), "d,[i+1]o", 0, v9 },
-{ "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|RS1_G0, "d,[i]o", 0, v9 },
-{ "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* std d,[rs1+0] */
-{ "stda", F3(3, 0x37, 0), F3(~3, ~0x37, ~0), "H,[1+2]A", 0, v9 },
-{ "stda", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|RS2(~0), "H,[1]A", 0, v9 }, /* stda d,[rs1+%g0] */
-{ "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "H,[1+i]o", 0, v9 },
-{ "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "H,[i+1]o", 0, v9 },
-{ "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0, "H,[i]o", 0, v9 },
-{ "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0), "H,[1]o", 0, v9 }, /* std d,[rs1+0] */
-
-{ "sth", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
-{ "sth", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* sth d,[rs1+%g0] */
-{ "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[1+i]", 0, v6 },
-{ "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[i+1]", 0, v6 },
-{ "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0, "d,[i]", 0, v6 },
-{ "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* sth d,[rs1+0] */
-
-{ "stha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0), "d,[1+2]A", 0, v6 },
-{ "stha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stha ,[rs1+%g0] */
-{ "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[1+i]o", 0, v9 },
-{ "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[i+1]o", 0, v9 },
-{ "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0, "d,[i]o", 0, v9 },
-{ "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* sth d,[rs1+0] */
-
-{ "stx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI(~0), "d,[1+2]", 0, v9 },
-{ "stx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI_RS2(~0), "d,[1]", 0, v9 }, /* stx d,[rs1+%g0] */
-{ "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1), "d,[1+i]", 0, v9 },
-{ "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1), "d,[i+1]", 0, v9 },
-{ "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RS1_G0, "d,[i]", 0, v9 },
-{ "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|SIMM13(~0), "d,[1]", 0, v9 }, /* stx d,[rs1+0] */
-
-{ "stx", F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI(~0)|RD(~1), "F,[1+2]", 0, v9 },
-{ "stx", F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI_RS2(~0)|RD(~1),"F,[1]", 0, v9 }, /* stx d,[rs1+%g0] */
-{ "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1), "F,[1+i]", 0, v9 },
-{ "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1), "F,[i+1]", 0, v9 },
-{ "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RS1_G0|RD(~1), "F,[i]", 0, v9 },
-{ "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|SIMM13(~0)|RD(~1),"F,[1]", 0, v9 }, /* stx d,[rs1+0] */
-
-{ "stxa", F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0), "d,[1+2]A", 0, v9 },
-{ "stxa", F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0)|RS2(~0), "d,[1]A", 0, v9 }, /* stxa d,[rs1+%g0] */
-{ "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1), "d,[1+i]o", 0, v9 },
-{ "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1), "d,[i+1]o", 0, v9 },
-{ "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|RS1_G0, "d,[i]o", 0, v9 },
-{ "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* stx d,[rs1+0] */
-
-{ "stq", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0), "J,[1+2]", 0, v9 },
-{ "stq", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0), "J,[1]", 0, v9 }, /* stq [rs1+%g0] */
-{ "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "J,[1+i]", 0, v9 },
-{ "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "J,[i+1]", 0, v9 },
-{ "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0, "J,[i]", 0, v9 },
-{ "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0), "J,[1]", 0, v9 }, /* stq [rs1+0] */
-
-{ "stqa", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0), "J,[1+2]A", 0, v9 },
-{ "stqa", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0), "J,[1]A", 0, v9 }, /* stqa [rs1+%g0] */
-{ "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "J,[1+i]o", 0, v9 },
-{ "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "J,[i+1]o", 0, v9 },
-{ "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0, "J,[i]o", 0, v9 },
-{ "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0), "J,[1]o", 0, v9 }, /* stqa [rs1+0] */
-
-{ "swap", F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI(~0), "[1+2],d", 0, v7 },
-{ "swap", F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI_RS2(~0), "[1],d", 0, v7 }, /* swap [rs1+%g0],d */
-{ "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1), "[1+i],d", 0, v7 },
-{ "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1), "[i+1],d", 0, v7 },
-{ "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|RS1_G0, "[i],d", 0, v7 },
-{ "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|SIMM13(~0), "[1],d", 0, v7 }, /* swap [rs1+0],d */
-
-{ "swapa", F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0), "[1+2]A,d", 0, v7 },
-{ "swapa", F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0)|RS2(~0), "[1]A,d", 0, v7 }, /* swapa [rs1+%g0],d */
-{ "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1), "[1+i]o,d", 0, v9 },
-{ "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1), "[i+1]o,d", 0, v9 },
-{ "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|RS1_G0, "[i]o,d", 0, v9 },
-{ "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* swap [rs1+0],d */
-
-{ "restore", F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "restore", F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "", 0, v6 }, /* restore %g0,%g0,%g0 */
-{ "restore", F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1), "1,i,d", 0, v6 },
-{ "restore", F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1)|RD_G0|RS1_G0|SIMM13(~0), "", 0, v6 }, /* restore %g0,0,%g0 */
-
-{ "rett", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI(~0), "1+2", F_UNBR|F_DELAYED, v6 }, /* rett rs1+rs2 */
-{ "rett", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI_RS2(~0), "1", F_UNBR|F_DELAYED, v6 }, /* rett rs1,%g0 */
-{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0, "1+i", F_UNBR|F_DELAYED, v6 }, /* rett rs1+X */
-{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0, "i+1", F_UNBR|F_DELAYED, v6 }, /* rett X+rs1 */
-{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* rett X+rs1 */
-{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* rett X */
-{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|SIMM13(~0), "1", F_UNBR|F_DELAYED, v6 }, /* rett rs1+0 */
-
-{ "save", F3(2, 0x3c, 0), F3(~2, ~0x3c, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "save", F3(2, 0x3c, 1), F3(~2, ~0x3c, ~1), "1,i,d", 0, v6 },
-{ "save", 0x81e00000, ~0x81e00000, "", F_ALIAS, v6 },
-
-{ "ret",  F3(2, 0x38, 1)|RS1(0x1f)|SIMM13(8), F3(~2, ~0x38, ~1)|SIMM13(~8),       "", F_UNBR|F_DELAYED, v6 }, /* jmpl %i7+8,%g0 */
-{ "retl", F3(2, 0x38, 1)|RS1(0x0f)|SIMM13(8), F3(~2, ~0x38, ~1)|RS1(~0x0f)|SIMM13(~8), "", F_UNBR|F_DELAYED, v6 }, /* jmpl %o7+8,%g0 */
-
-{ "jmpl", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI(~0), "1+2,d", F_JSR|F_DELAYED, v6 },
-{ "jmpl", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI_RS2(~0), "1,d", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+%g0,d */
-{ "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|SIMM13(~0), "1,d", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+0,d */
-{ "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RS1_G0, "i,d", F_JSR|F_DELAYED, v6 }, /* jmpl %g0+i,d */
-{ "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1), "1+i,d", F_JSR|F_DELAYED, v6 },
-{ "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1), "i+1,d", F_JSR|F_DELAYED, v6 },
-
-{ "done", F3(2, 0x3e, 0)|RD(0), F3(~2, ~0x3e, ~0)|RD(~0)|RS1_G0|SIMM13(~0), "", 0, v9 },
-{ "retry", F3(2, 0x3e, 0)|RD(1), F3(~2, ~0x3e, ~0)|RD(~1)|RS1_G0|SIMM13(~0), "", 0, v9 },
-{ "saved", F3(2, 0x31, 0)|RD(0), F3(~2, ~0x31, ~0)|RD(~0)|RS1_G0|SIMM13(~0), "", 0, v9 },
-{ "restored", F3(2, 0x31, 0)|RD(1), F3(~2, ~0x31, ~0)|RD(~1)|RS1_G0|SIMM13(~0), "", 0, v9 },
-{ "sir", F3(2, 0x30, 1)|RD(0xf), F3(~2, ~0x30, ~1)|RD(~0xf)|RS1_G0, "i", 0, v9 },
-
-{ "flush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0), "1+2", 0, v8 },
-{ "flush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0), "1", 0, v8 }, /* flush rs1+%g0 */
-{ "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0), "1", 0, v8 }, /* flush rs1+0 */
-{ "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0, "i", 0, v8 }, /* flush %g0+i */
-{ "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "1+i", 0, v8 },
-{ "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "i+1", 0, v8 },
-
-/* IFLUSH was renamed to FLUSH in v8.  */
-{ "iflush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0), "1+2", F_ALIAS, v6 },
-{ "iflush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0), "1", F_ALIAS, v6 }, /* flush rs1+%g0 */
-{ "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0), "1", F_ALIAS, v6 }, /* flush rs1+0 */
-{ "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0, "i", F_ALIAS, v6 },
-{ "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "1+i", F_ALIAS, v6 },
-{ "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "i+1", F_ALIAS, v6 },
-
-{ "return", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI(~0), "1+2", 0, v9 },
-{ "return", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI_RS2(~0), "1", 0, v9 }, /* return rs1+%g0 */
-{ "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|SIMM13(~0), "1", 0, v9 }, /* return rs1+0 */
-{ "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RS1_G0, "i", 0, v9 }, /* return %g0+i */
-{ "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1), "1+i", 0, v9 },
-{ "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1), "i+1", 0, v9 },
-
-{ "flushw", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "", 0, v9 },
-
-{ "membar", F3(2, 0x28, 1)|RS1(0xf), F3(~2, ~0x28, ~1)|RD_G0|RS1(~0xf)|SIMM13(~127), "K", 0, v9 },
-{ "stbar", F3(2, 0x28, 0)|RS1(0xf), F3(~2, ~0x28, ~0)|RD_G0|RS1(~0xf)|SIMM13(~0), "", 0, v8 },
-
-{ "prefetch", F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0), "[1+2],*", 0, v9 },
-{ "prefetch", F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0)|RS2_G0, "[1],*", 0, v9 }, /* prefetch [rs1+%g0],prefetch_fcn */
-{ "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1), "[1+i],*", 0, v9 },
-{ "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1), "[i+1],*", 0, v9 },
-{ "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|RS1_G0, "[i],*", 0, v9 },
-{ "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|SIMM13(~0), "[1],*", 0, v9 }, /* prefetch [rs1+0],prefetch_fcn */
-{ "prefetcha", F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0), "[1+2]A,*", 0, v9 },
-{ "prefetcha", F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0)|RS2_G0, "[1]A,*", 0, v9 }, /* prefetcha [rs1+%g0],prefetch_fcn */
-{ "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1), "[1+i]o,*", 0, v9 },
-{ "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1), "[i+1]o,*", 0, v9 },
-{ "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|RS1_G0, "[i]o,*", 0, v9 },
-{ "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|SIMM13(~0), "[1]o,*", 0, v9 }, /* prefetcha [rs1+0],d */
-
- /* The 1<<12 is a long story.  It is necessary.  For more info, please contact [hidden email] */
- /* FIXME: 'i' is wrong, need new letter for 5 bit unsigned constants.  */
-{ "sll", F3(2, 0x25, 0), F3(~2, ~0x25, ~0)|(1<<12)|ASI(~0), "1,2,d", 0, v6 },
-{ "sll", F3(2, 0x25, 1), F3(~2, ~0x25, ~1)|(1<<12), "1,i,d", 0, v6 },
-{ "sra", F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0), "1,2,d", 0, v6 },
-{ "sra", F3(2, 0x27, 1), F3(~2, ~0x27, ~1)|(1<<12), "1,i,d", 0, v6 },
-{ "srl", F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0), "1,2,d", 0, v6 },
-{ "srl", F3(2, 0x26, 1), F3(~2, ~0x26, ~1)|(1<<12), "1,i,d", 0, v6 },
-
- /* FIXME: 'j' is wrong, need new letter for 6 bit unsigned constants.  */
-{ "sllx", F3(2, 0x25, 0)|(1<<12), F3(~2, ~0x25, ~0)|(ASI(~0)^(1<<12)), "1,2,d", 0, v9 },
-{ "sllx", F3(2, 0x25, 1)|(1<<12), F3(~2, ~0x25, ~1)|(0x3f<<6), "1,j,d", 0, v9 },
-{ "srax", F3(2, 0x27, 0)|(1<<12), F3(~2, ~0x27, ~0)|(ASI(~0)^(1<<12)), "1,2,d", 0, v9 },
-{ "srax", F3(2, 0x27, 1)|(1<<12), F3(~2, ~0x27, ~1)|(0x3f<<6), "1,j,d", 0, v9 },
-{ "srlx", F3(2, 0x26, 0)|(1<<12), F3(~2, ~0x26, ~0)|(ASI(~0)^(1<<12)), "1,2,d", 0, v9 },
-{ "srlx", F3(2, 0x26, 1)|(1<<12), F3(~2, ~0x26, ~1)|(0x3f<<6), "1,j,d", 0, v9 },
-
-{ "mulscc", F3(2, 0x24, 0), F3(~2, ~0x24, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "mulscc", F3(2, 0x24, 1), F3(~2, ~0x24, ~1), "1,i,d", 0, v6 },
-
-{ "divscc", F3(2, 0x1d, 0), F3(~2, ~0x1d, ~0)|ASI(~0), "1,2,d", 0, sparclite },
-{ "divscc", F3(2, 0x1d, 1), F3(~2, ~0x1d, ~1), "1,i,d", 0, sparclite },
-
-{ "scan", F3(2, 0x2c, 0), F3(~2, ~0x2c, ~0)|ASI(~0), "1,2,d", 0, sparclet|sparclite },
-{ "scan", F3(2, 0x2c, 1), F3(~2, ~0x2c, ~1), "1,i,d", 0, sparclet|sparclite },
-
-{ "popc", F3(2, 0x2e, 0), F3(~2, ~0x2e, ~0)|RS2_G0|ASI(~0),"2,d", 0, v9 },
-{ "popc", F3(2, 0x2e, 1), F3(~2, ~0x2e, ~1)|RS2_G0, "i,d", 0, v9 },
-
-{ "clr", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "d", F_ALIAS, v6 }, /* or %g0,%g0,d */
-{ "clr", F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0|SIMM13(~0), "d", F_ALIAS, v6 }, /* or %g0,0,d */
-{ "clr", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
-{ "clr", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* st %g0,[rs1+%g0] */
-{ "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
-{ "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
-{ "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
-{ "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* st %g0,[rs1+0] */
-
-{ "clrb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
-{ "clrb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* stb %g0,[rs1+%g0] */
-{ "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
-{ "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
-{ "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
-{ "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* stb %g0,[rs1+0] */
-
-{ "clrh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
-{ "clrh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* sth %g0,[rs1+%g0] */
-{ "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
-{ "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
-{ "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
-{ "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* sth %g0,[rs1+0] */
-
-{ "clrx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v9 },
-{ "clrx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v9 }, /* stx %g0,[rs1+%g0] */
-{ "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0, "[1+i]", F_ALIAS, v9 },
-{ "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0, "[i+1]", F_ALIAS, v9 },
-{ "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v9 },
-{ "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v9 }, /* stx %g0,[rs1+0] */
-
-{ "orcc", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "orcc", F3(2, 0x12, 1), F3(~2, ~0x12, ~1), "1,i,d", 0, v6 },
-{ "orcc", F3(2, 0x12, 1), F3(~2, ~0x12, ~1), "i,1,d", 0, v6 },
-
-/* This is not a commutative instruction.  */
-{ "orncc", F3(2, 0x16, 0), F3(~2, ~0x16, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "orncc", F3(2, 0x16, 1), F3(~2, ~0x16, ~1), "1,i,d", 0, v6 },
-
-/* This is not a commutative instruction.  */
-{ "orn", F3(2, 0x06, 0), F3(~2, ~0x06, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "orn", F3(2, 0x06, 1), F3(~2, ~0x06, ~1), "1,i,d", 0, v6 },
-
-{ "tst", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|ASI_RS2(~0), "1", 0, v6 }, /* orcc rs1, %g0, %g0 */
-{ "tst", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|RS1_G0|ASI(~0), "2", 0, v6 }, /* orcc %g0, rs2, %g0 */
-{ "tst", F3(2, 0x12, 1), F3(~2, ~0x12, ~1)|RD_G0|SIMM13(~0), "1", 0, v6 }, /* orcc rs1, 0, %g0 */
-
-{ "wr", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI(~0), "1,2,m", 0, v8 }, /* wr r,r,%asrX */
-{ "wr", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI(~0), "1,2,y", 0, v6 }, /* wr r,r,%y */
-{ "wr", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "1,i,m", 0, v8 }, /* wr r,i,%asrX */
-{ "wr", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0, "1,i,y", 0, v6 }, /* wr r,i,%y */
-{ "wr", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI(~0), "1,2,p", 0, v6notv9 }, /* wr r,r,%psr */
-{ "wr", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0, "1,i,p", 0, v6notv9 }, /* wr r,i,%psr */
-{ "wr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI(~0), "1,2,w", 0, v6notv9 }, /* wr r,r,%wim */
-{ "wr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0, "1,i,w", 0, v6notv9 }, /* wr r,i,%wim */
-{ "wr", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI(~0), "1,2,t", 0, v6notv9 }, /* wr r,r,%tbr */
-{ "wr", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0, "1,i,t", 0, v6notv9 }, /* wr r,i,%tbr */
-
-{ "wr", F3(2, 0x30, 0)|RD(2), F3(~2, ~0x30, ~0)|RD(~2)|ASI(~0), "1,2,E", 0, v9 }, /* wr r,r,%ccr */
-{ "wr", F3(2, 0x30, 1)|RD(2), F3(~2, ~0x30, ~1)|RD(~2), "1,i,E", 0, v9 }, /* wr r,i,%ccr */
-{ "wr", F3(2, 0x30, 0)|RD(3), F3(~2, ~0x30, ~0)|RD(~3)|ASI(~0), "1,2,o", 0, v9 }, /* wr r,r,%asi */
-{ "wr", F3(2, 0x30, 1)|RD(3), F3(~2, ~0x30, ~1)|RD(~3), "1,i,o", 0, v9 }, /* wr r,i,%asi */
-{ "wr", F3(2, 0x30, 0)|RD(6), F3(~2, ~0x30, ~0)|RD(~6)|ASI(~0), "1,2,s", 0, v9 }, /* wr r,i,%fprs */
-{ "wr", F3(2, 0x30, 1)|RD(6), F3(~2, ~0x30, ~1)|RD(~6), "1,i,s", 0, v9 }, /* wr r,i,%fprs */
-
-{ "rd", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|SIMM13(~0), "M,d", 0, v8 }, /* rd %asrX,r */
-{ "rd", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0), "y,d", 0, v6 }, /* rd %y,r */
-{ "rd", F3(2, 0x29, 0), F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0), "p,d", 0, v6notv9 }, /* rd %psr,r */
-{ "rd", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0), "w,d", 0, v6notv9 }, /* rd %wim,r */
-{ "rd", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0), "t,d", 0, v6notv9 }, /* rd %tbr,r */
-
-{ "rd", F3(2, 0x28, 0)|RS1(2), F3(~2, ~0x28, ~0)|RS1(~2)|SIMM13(~0), "E,d", 0, v9 }, /* rd %ccr,r */
-{ "rd", F3(2, 0x28, 0)|RS1(3), F3(~2, ~0x28, ~0)|RS1(~3)|SIMM13(~0), "o,d", 0, v9 }, /* rd %asi,r */
-{ "rd", F3(2, 0x28, 0)|RS1(4), F3(~2, ~0x28, ~0)|RS1(~4)|SIMM13(~0), "W,d", 0, v9 }, /* rd %tick,r */
-{ "rd", F3(2, 0x28, 0)|RS1(5), F3(~2, ~0x28, ~0)|RS1(~5)|SIMM13(~0), "P,d", 0, v9 }, /* rd %pc,r */
-{ "rd", F3(2, 0x28, 0)|RS1(6), F3(~2, ~0x28, ~0)|RS1(~6)|SIMM13(~0), "s,d", 0, v9 }, /* rd %fprs,r */
-
-{ "rdpr", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|SIMM13(~0), "?,d", 0, v9 },   /* rdpr %priv,r */
-{ "wrpr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0), "1,2,!", 0, v9 }, /* wrpr r1,r2,%priv */
-{ "wrpr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|SIMM13(~0), "1,!", 0, v9 },   /* wrpr r1,%priv */
-{ "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1), "1,i,!", 0, v9 }, /* wrpr r1,i,%priv */
-{ "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1), "i,1,!", F_ALIAS, v9 }, /* wrpr i,r1,%priv */
-{ "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RS1(~0), "i,!", 0, v9 },   /* wrpr i,%priv */
-
-{ "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI(~0), "1,2,m", F_ALIAS, v8 }, /* wr r,r,%asrX */
-{ "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI(~0), "1,2,y", F_ALIAS, v6 }, /* wr r,r,%y */
-{ "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "1,i,m", F_ALIAS, v8 }, /* wr r,i,%asrX */
-{ "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0, "1,i,y", F_ALIAS, v6 }, /* wr r,i,%y */
-{ "mov", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI(~0), "1,2,p", F_ALIAS, v6notv9 }, /* wr r,r,%psr */
-{ "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0, "1,i,p", F_ALIAS, v6notv9 }, /* wr r,i,%psr */
-{ "mov", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI(~0), "1,2,w", F_ALIAS, v6notv9 }, /* wr r,r,%wim */
-{ "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0, "1,i,w", F_ALIAS, v6notv9 }, /* wr r,i,%wim */
-{ "mov", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI(~0), "1,2,t", F_ALIAS, v6notv9 }, /* wr r,r,%tbr */
-{ "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0, "1,i,t", F_ALIAS, v6notv9 }, /* wr r,i,%tbr */
-
-{ "mov", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|SIMM13(~0), "M,d", F_ALIAS, v8 }, /* rd %asr1,r */
-{ "mov", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0), "y,d", F_ALIAS, v6 }, /* rd %y,r */
-{ "mov", F3(2, 0x29, 0), F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0), "p,d", F_ALIAS, v6notv9 }, /* rd %psr,r */
-{ "mov", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0), "w,d", F_ALIAS, v6notv9 }, /* rd %wim,r */
-{ "mov", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0), "t,d", F_ALIAS, v6notv9 }, /* rd %tbr,r */
-
-{ "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI_RS2(~0), "1,y", F_ALIAS, v6 }, /* wr rs1,%g0,%y */
-{ "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "i,y", F_ALIAS, v6 }, /* wr %g0,i,%y */
-{ "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|SIMM13(~0), "1,y", F_ALIAS, v6 }, /* wr rs1,0,%y */
-{ "mov", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|ASI_RS2(~0), "1,p", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%psr */
-{ "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1), "i,p", F_ALIAS, v6notv9 }, /* wr %g0,i,%psr */
-{ "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|SIMM13(~0), "1,p", F_ALIAS, v6notv9 }, /* wr rs1,0,%psr */
-{ "mov", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|ASI_RS2(~0), "1,w", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%wim */
-{ "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1), "i,w", F_ALIAS, v6notv9 }, /* wr %g0,i,%wim */
-{ "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|SIMM13(~0), "1,w", F_ALIAS, v6notv9 }, /* wr rs1,0,%wim */
-{ "mov", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|ASI_RS2(~0), "1,t", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%tbr */
-{ "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1), "i,t", F_ALIAS, v6notv9 }, /* wr %g0,i,%tbr */
-{ "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|SIMM13(~0), "1,t", F_ALIAS, v6notv9 }, /* wr rs1,0,%tbr */
-
-{ "mov", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RS1_G0|ASI(~0), "2,d", 0, v6 }, /* or %g0,rs2,d */
-{ "mov", F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0, "i,d", 0, v6 }, /* or %g0,i,d */
-{ "mov",        F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI_RS2(~0), "1,d", 0, v6 }, /* or rs1,%g0,d   */
-{ "mov",        F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|SIMM13(~0), "1,d", 0, v6 }, /* or rs1,0,d */
-
-{ "or", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "or", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "1,i,d", 0, v6 },
-{ "or", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "i,1,d", 0, v6 },
-
-{ "bset", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* or rd,rs2,rd */
-{ "bset", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "i,r", F_ALIAS, v6 }, /* or rd,i,rd */
-
-/* This is not a commutative instruction.  */
-{ "andn", F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "andn", F3(2, 0x05, 1), F3(~2, ~0x05, ~1), "1,i,d", 0, v6 },
-
-/* This is not a commutative instruction.  */
-{ "andncc", F3(2, 0x15, 0), F3(~2, ~0x15, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "andncc", F3(2, 0x15, 1), F3(~2, ~0x15, ~1), "1,i,d", 0, v6 },
-
-{ "bclr", F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* andn rd,rs2,rd */
-{ "bclr", F3(2, 0x05, 1), F3(~2, ~0x05, ~1), "i,r", F_ALIAS, v6 }, /* andn rd,i,rd */
-
-{ "cmp", F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|RD_G0|ASI(~0), "1,2", 0, v6 }, /* subcc rs1,rs2,%g0 */
-{ "cmp", F3(2, 0x14, 1), F3(~2, ~0x14, ~1)|RD_G0, "1,i", 0, v6 }, /* subcc rs1,i,%g0 */
-
-{ "sub", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "sub", F3(2, 0x04, 1), F3(~2, ~0x04, ~1), "1,i,d", 0, v6 },
-
-{ "subcc", F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "subcc", F3(2, 0x14, 1), F3(~2, ~0x14, ~1), "1,i,d", 0, v6 },
-
-{ "subx", F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
-{ "subx", F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1), "1,i,d", 0, v6notv9 },
-{ "subc", F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0), "1,2,d", 0, v9 },
-{ "subc", F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1), "1,i,d", 0, v9 },
-
-{ "subxcc", F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
-{ "subxcc", F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1), "1,i,d", 0, v6notv9 },
-{ "subccc", F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0), "1,2,d", 0, v9 },
-{ "subccc", F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1), "1,i,d", 0, v9 },
-
-{ "and", F3(2, 0x01, 0), F3(~2, ~0x01, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "and", F3(2, 0x01, 1), F3(~2, ~0x01, ~1), "1,i,d", 0, v6 },
-{ "and", F3(2, 0x01, 1), F3(~2, ~0x01, ~1), "i,1,d", 0, v6 },
-
-{ "andcc", F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "andcc", F3(2, 0x11, 1), F3(~2, ~0x11, ~1), "1,i,d", 0, v6 },
-{ "andcc", F3(2, 0x11, 1), F3(~2, ~0x11, ~1), "i,1,d", 0, v6 },
-
-{ "dec", F3(2, 0x04, 1)|SIMM13(0x1), F3(~2, ~0x04, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* sub rd,1,rd */
-{ "dec", F3(2, 0x04, 1),    F3(~2, ~0x04, ~1),       "i,r", F_ALIAS, v8 }, /* sub rd,imm,rd */
-{ "deccc", F3(2, 0x14, 1)|SIMM13(0x1), F3(~2, ~0x14, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* subcc rd,1,rd */
-{ "deccc", F3(2, 0x14, 1),    F3(~2, ~0x14, ~1),       "i,r", F_ALIAS, v8 }, /* subcc rd,imm,rd */
-{ "inc", F3(2, 0x00, 1)|SIMM13(0x1), F3(~2, ~0x00, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* add rd,1,rd */
-{ "inc", F3(2, 0x00, 1),    F3(~2, ~0x00, ~1),       "i,r", F_ALIAS, v8 }, /* add rd,imm,rd */
-{ "inccc", F3(2, 0x10, 1)|SIMM13(0x1), F3(~2, ~0x10, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* addcc rd,1,rd */
-{ "inccc", F3(2, 0x10, 1),    F3(~2, ~0x10, ~1),       "i,r", F_ALIAS, v8 }, /* addcc rd,imm,rd */
-
-{ "btst", F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|RD_G0|ASI(~0), "1,2", F_ALIAS, v6 }, /* andcc rs1,rs2,%g0 */
-{ "btst", F3(2, 0x11, 1), F3(~2, ~0x11, ~1)|RD_G0, "i,1", F_ALIAS, v6 }, /* andcc rs1,i,%g0 */
-
-{ "neg", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "2,d", F_ALIAS, v6 }, /* sub %g0,rs2,rd */
-{ "neg", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "O", F_ALIAS, v6 }, /* sub %g0,rd,rd */
-
-{ "add", F3(2, 0x00, 0), F3(~2, ~0x00, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "add", F3(2, 0x00, 1), F3(~2, ~0x00, ~1), "1,i,d", 0, v6 },
-{ "add", F3(2, 0x00, 1), F3(~2, ~0x00, ~1), "i,1,d", 0, v6 },
-{ "addcc", F3(2, 0x10, 0), F3(~2, ~0x10, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "addcc", F3(2, 0x10, 1), F3(~2, ~0x10, ~1), "1,i,d", 0, v6 },
-{ "addcc", F3(2, 0x10, 1), F3(~2, ~0x10, ~1), "i,1,d", 0, v6 },
-
-{ "addx", F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
-{ "addx", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "1,i,d", 0, v6notv9 },
-{ "addx", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "i,1,d", 0, v6notv9 },
-{ "addc", F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0), "1,2,d", 0, v9 },
-{ "addc", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "1,i,d", 0, v9 },
-{ "addc", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "i,1,d", 0, v9 },
-
-{ "addxcc", F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
-{ "addxcc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "1,i,d", 0, v6notv9 },
-{ "addxcc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "i,1,d", 0, v6notv9 },
-{ "addccc", F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0), "1,2,d", 0, v9 },
-{ "addccc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "1,i,d", 0, v9 },
-{ "addccc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "i,1,d", 0, v9 },
-
-{ "smul", F3(2, 0x0b, 0), F3(~2, ~0x0b, ~0)|ASI(~0), "1,2,d", 0, v8 },
-{ "smul", F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1), "1,i,d", 0, v8 },
-{ "smul", F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1), "i,1,d", 0, v8 },
-{ "smulcc", F3(2, 0x1b, 0), F3(~2, ~0x1b, ~0)|ASI(~0), "1,2,d", 0, v8 },
-{ "smulcc", F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1), "1,i,d", 0, v8 },
-{ "smulcc", F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1), "i,1,d", 0, v8 },
-{ "umul", F3(2, 0x0a, 0), F3(~2, ~0x0a, ~0)|ASI(~0), "1,2,d", 0, v8 },
-{ "umul", F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1), "1,i,d", 0, v8 },
-{ "umul", F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1), "i,1,d", 0, v8 },
-{ "umulcc", F3(2, 0x1a, 0), F3(~2, ~0x1a, ~0)|ASI(~0), "1,2,d", 0, v8 },
-{ "umulcc", F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1), "1,i,d", 0, v8 },
-{ "umulcc", F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1), "i,1,d", 0, v8 },
-{ "sdiv", F3(2, 0x0f, 0), F3(~2, ~0x0f, ~0)|ASI(~0), "1,2,d", 0, v8 },
-{ "sdiv", F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1), "1,i,d", 0, v8 },
-{ "sdiv", F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1), "i,1,d", 0, v8 },
-{ "sdivcc", F3(2, 0x1f, 0), F3(~2, ~0x1f, ~0)|ASI(~0), "1,2,d", 0, v8 },
-{ "sdivcc", F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1), "1,i,d", 0, v8 },
-{ "sdivcc", F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1), "i,1,d", 0, v8 },
-{ "udiv", F3(2, 0x0e, 0), F3(~2, ~0x0e, ~0)|ASI(~0), "1,2,d", 0, v8 },
-{ "udiv", F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1), "1,i,d", 0, v8 },
-{ "udiv", F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1), "i,1,d", 0, v8 },
-{ "udivcc", F3(2, 0x1e, 0), F3(~2, ~0x1e, ~0)|ASI(~0), "1,2,d", 0, v8 },
-{ "udivcc", F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1), "1,i,d", 0, v8 },
-{ "udivcc", F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1), "i,1,d", 0, v8 },
-
-{ "mulx", F3(2, 0x09, 0), F3(~2, ~0x09, ~0)|ASI(~0), "1,2,d", 0, v9 },
-{ "mulx", F3(2, 0x09, 1), F3(~2, ~0x09, ~1), "1,i,d", 0, v9 },
-{ "sdivx", F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0), "1,2,d", 0, v9 },
-{ "sdivx", F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1), "1,i,d", 0, v9 },
-{ "udivx", F3(2, 0x0d, 0), F3(~2, ~0x0d, ~0)|ASI(~0), "1,2,d", 0, v9 },
-{ "udivx", F3(2, 0x0d, 1), F3(~2, ~0x0d, ~1), "1,i,d", 0, v9 },
-
-{ "call", F1(0x1), F1(~0x1), "L", F_JSR|F_DELAYED, v6 },
-{ "call", F1(0x1), F1(~0x1), "L,#", F_JSR|F_DELAYED, v6 },
-
-{ "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0), "1+2", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+rs2,%o7 */
-{ "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0), "1+2,#", F_JSR|F_DELAYED, v6 },
-{ "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0), "1", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+%g0,%o7 */
-{ "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0), "1,#", F_JSR|F_DELAYED, v6 },
-{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "1+i", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+i,%o7 */
-{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "1+i,#", F_JSR|F_DELAYED, v6 },
-{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "i+1", F_JSR|F_DELAYED, v6 }, /* jmpl i+rs1,%o7 */
-{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "i+1,#", F_JSR|F_DELAYED, v6 },
-{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0, "i", F_JSR|F_DELAYED, v6 }, /* jmpl %g0+i,%o7 */
-{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0, "i,#", F_JSR|F_DELAYED, v6 },
-{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0), "1", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+0,%o7 */
-{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0), "1,#", F_JSR|F_DELAYED, v6 },
-
-
-/* Conditional instructions.
-
-   Because this part of the table was such a mess earlier, I have
-   macrofied it so that all the branches and traps are generated from
-   a single-line description of each condition value.  John Gilmore. */
-
-/* Define branches -- one annulled, one without, etc. */
-#define br(opcode, mask, lose, flags) \
- { opcode, (mask)|ANNUL, (lose),       ",a l",   (flags), v6 }, \
- { opcode, (mask)      , (lose)|ANNUL, "l",     (flags), v6 }
-
-#define brx(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), "Z,G",      (flags), v9 }, \
- { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), ",T Z,G",   (flags), v9 }, \
- { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a Z,G",   (flags), v9 }, \
- { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a,T Z,G", (flags), v9 }, \
- { opcode, (mask)|(2<<20), ANNUL|BPRED|(lose), ",N Z,G",   (flags), v9 }, \
- { opcode, (mask)|(2<<20)|ANNUL, BPRED|(lose), ",a,N Z,G", (flags), v9 }, \
- { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), "z,G",      (flags), v9 }, \
- { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), ",T z,G",   (flags), v9 }, \
- { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a z,G",   (flags), v9 }, \
- { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a,T z,G", (flags), v9 }, \
- { opcode, (mask), ANNUL|BPRED|(lose)|(2<<20), ",N z,G",   (flags), v9 }, \
- { opcode, (mask)|ANNUL, BPRED|(lose)|(2<<20), ",a,N z,G", (flags), v9 }
-
-/* Define four traps: reg+reg, reg + immediate, immediate alone, reg alone. */
-#define tr(opcode, mask, lose, flags) \
- { opcode, (mask)|(2<<11)|IMMED, (lose)|RS1_G0, "Z,i",   (flags), v9 }, /* %g0 + imm */ \
- { opcode, (mask)|(2<<11)|IMMED, (lose), "Z,1+i", (flags), v9 }, /* rs1 + imm */ \
- { opcode, (mask)|(2<<11), IMMED|(lose), "Z,1+2", (flags), v9 }, /* rs1 + rs2 */ \
- { opcode, (mask)|(2<<11), IMMED|(lose)|RS2_G0, "Z,1",   (flags), v9 }, /* rs1 + %g0 */ \
- { opcode, (mask)|IMMED, (lose)|RS1_G0, "z,i",   (flags)|F_ALIAS, v9 }, /* %g0 + imm */ \
- { opcode, (mask)|IMMED, (lose), "z,1+i", (flags)|F_ALIAS, v9 }, /* rs1 + imm */ \
- { opcode, (mask), IMMED|(lose), "z,1+2", (flags)|F_ALIAS, v9 }, /* rs1 + rs2 */ \
- { opcode, (mask), IMMED|(lose)|RS2_G0, "z,1",   (flags)|F_ALIAS, v9 }, /* rs1 + %g0 */ \
- { opcode, (mask)|IMMED, (lose)|RS1_G0, "i",     (flags), v6 }, /* %g0 + imm */ \
- { opcode, (mask)|IMMED, (lose), "1+i",   (flags), v6 }, /* rs1 + imm */ \
- { opcode, (mask), IMMED|(lose), "1+2",   (flags), v6 }, /* rs1 + rs2 */ \
- { opcode, (mask), IMMED|(lose)|RS2_G0, "1",     (flags), v6 } /* rs1 + %g0 */
-
-/* v9: We must put `brx' before `br', to ensure that we never match something
-   v9: against an expression unless it is an expression.  Otherwise, we end
-   v9: up with undefined symbol tables entries, because they get added, but
-   v9: are not deleted if the pattern fails to match.  */
-
-/* Define both branches and traps based on condition mask */
-#define cond(bop, top, mask, flags) \
-  brx(bop, F2(0, 1)|(mask), F2(~0, ~1)|((~mask)&COND(~0)), F_DELAYED|(flags)), /* v9 */ \
-  br(bop,  F2(0, 2)|(mask), F2(~0, ~2)|((~mask)&COND(~0)), F_DELAYED|(flags)), \
-  tr(top,  F3(2, 0x3a, 0)|(mask), F3(~2, ~0x3a, 0)|((~mask)&COND(~0)), ((flags) & ~(F_UNBR|F_CONDBR)))
-
-/* Define all the conditions, all the branches, all the traps.  */
-
-/* Standard branch, trap mnemonics */
-cond ("b", "ta",   CONDA, F_UNBR),
-/* Alternative form (just for assembly, not for disassembly) */
-cond ("ba", "t",    CONDA, F_UNBR|F_ALIAS),
-
-cond ("bcc", "tcc",  CONDCC, F_CONDBR),
-cond ("bcs", "tcs",  CONDCS, F_CONDBR),
-cond ("be", "te",   CONDE, F_CONDBR),
-cond ("bg", "tg",   CONDG, F_CONDBR),
-cond ("bgt", "tgt",   CONDG, F_CONDBR|F_ALIAS),
-cond ("bge", "tge",  CONDGE, F_CONDBR),
-cond ("bgeu", "tgeu", CONDGEU, F_CONDBR|F_ALIAS), /* for cc */
-cond ("bgu", "tgu",  CONDGU, F_CONDBR),
-cond ("bl", "tl",   CONDL, F_CONDBR),
-cond ("blt", "tlt",   CONDL, F_CONDBR|F_ALIAS),
-cond ("ble", "tle",  CONDLE, F_CONDBR),
-cond ("bleu", "tleu", CONDLEU, F_CONDBR),
-cond ("blu", "tlu",  CONDLU, F_CONDBR|F_ALIAS), /* for cs */
-cond ("bn", "tn",   CONDN, F_CONDBR),
-cond ("bne", "tne",  CONDNE, F_CONDBR),
-cond ("bneg", "tneg", CONDNEG, F_CONDBR),
-cond ("bnz", "tnz",  CONDNZ, F_CONDBR|F_ALIAS), /* for ne */
-cond ("bpos", "tpos", CONDPOS, F_CONDBR),
-cond ("bvc", "tvc",  CONDVC, F_CONDBR),
-cond ("bvs", "tvs",  CONDVS, F_CONDBR),
-cond ("bz", "tz",   CONDZ, F_CONDBR|F_ALIAS), /* for e */
-
-#undef cond
-#undef br
-#undef brr /* v9 */
-#undef tr
-
-#define brr(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask)|BPRED, ANNUL|(lose), "1,k",      F_DELAYED|(flags), v9 }, \
- { opcode, (mask)|BPRED, ANNUL|(lose), ",T 1,k",   F_DELAYED|(flags), v9 }, \
- { opcode, (mask)|BPRED|ANNUL, (lose), ",a 1,k",   F_DELAYED|(flags), v9 }, \
- { opcode, (mask)|BPRED|ANNUL, (lose), ",a,T 1,k", F_DELAYED|(flags), v9 }, \
- { opcode, (mask), ANNUL|BPRED|(lose), ",N 1,k",   F_DELAYED|(flags), v9 }, \
- { opcode, (mask)|ANNUL, BPRED|(lose), ",a,N 1,k", F_DELAYED|(flags), v9 }
-
-#define condr(bop, mask, flags) /* v9 */ \
-  brr(bop, F2(0, 3)|COND(mask), F2(~0, ~3)|COND(~(mask)), (flags)) /* v9 */
-
-/* v9 */ condr("brnz", 0x5, F_CONDBR),
-/* v9 */ condr("brz", 0x1, F_CONDBR),
-/* v9 */ condr("brgez", 0x7, F_CONDBR),
-/* v9 */ condr("brlz", 0x3, F_CONDBR),
-/* v9 */ condr("brlez", 0x2, F_CONDBR),
-/* v9 */ condr("brgz", 0x6, F_CONDBR),
-
-#undef condr /* v9 */
-#undef brr /* v9 */
-
-#define movr(opcode, mask, flags) /* v9 */ \
- { opcode, F3(2, 0x2f, 0)|RCOND(mask), F3(~2, ~0x2f, ~0)|RCOND(~(mask)), "1,2,d", (flags), v9 }, \
- { opcode, F3(2, 0x2f, 1)|RCOND(mask), F3(~2, ~0x2f, ~1)|RCOND(~(mask)), "1,j,d", (flags), v9 }
-
-#define fmrrs(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask), (lose), "1,f,g", (flags), v9 }
-#define fmrrd(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask), (lose), "1,B,H", (flags), v9 }
-#define fmrrq(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask), (lose), "1,R,J", (flags), v9 }
-
-#define fmovrs(mop, mask, flags) /* v9 */ \
-  fmrrs(mop, F3(2, 0x35, 0)|OPF_LOW5(5)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~5)|RCOND(~(mask)), (flags)) /* v9 */
-#define fmovrd(mop, mask, flags) /* v9 */ \
-  fmrrd(mop, F3(2, 0x35, 0)|OPF_LOW5(6)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~6)|RCOND(~(mask)), (flags)) /* v9 */
-#define fmovrq(mop, mask, flags) /* v9 */ \
-  fmrrq(mop, F3(2, 0x35, 0)|OPF_LOW5(7)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~7)|RCOND(~(mask)), (flags)) /* v9 */
-
-/* v9 */ movr("movrne", 0x5, 0),
-/* v9 */ movr("movre", 0x1, 0),
-/* v9 */ movr("movrgez", 0x7, 0),
-/* v9 */ movr("movrlz", 0x3, 0),
-/* v9 */ movr("movrlez", 0x2, 0),
-/* v9 */ movr("movrgz", 0x6, 0),
-/* v9 */ movr("movrnz", 0x5, F_ALIAS),
-/* v9 */ movr("movrz", 0x1, F_ALIAS),
-
-/* v9 */ fmovrs("fmovrsne", 0x5, 0),
-/* v9 */ fmovrs("fmovrse", 0x1, 0),
-/* v9 */ fmovrs("fmovrsgez", 0x7, 0),
-/* v9 */ fmovrs("fmovrslz", 0x3, 0),
-/* v9 */ fmovrs("fmovrslez", 0x2, 0),
-/* v9 */ fmovrs("fmovrsgz", 0x6, 0),
-/* v9 */ fmovrs("fmovrsnz", 0x5, F_ALIAS),
-/* v9 */ fmovrs("fmovrsz", 0x1, F_ALIAS),
-
-/* v9 */ fmovrd("fmovrdne", 0x5, 0),
-/* v9 */ fmovrd("fmovrde", 0x1, 0),
-/* v9 */ fmovrd("fmovrdgez", 0x7, 0),
-/* v9 */ fmovrd("fmovrdlz", 0x3, 0),
-/* v9 */ fmovrd("fmovrdlez", 0x2, 0),
-/* v9 */ fmovrd("fmovrdgz", 0x6, 0),
-/* v9 */ fmovrd("fmovrdnz", 0x5, F_ALIAS),
-/* v9 */ fmovrd("fmovrdz", 0x1, F_ALIAS),
-
-/* v9 */ fmovrq("fmovrqne", 0x5, 0),
-/* v9 */ fmovrq("fmovrqe", 0x1, 0),
-/* v9 */ fmovrq("fmovrqgez", 0x7, 0),
-/* v9 */ fmovrq("fmovrqlz", 0x3, 0),
-/* v9 */ fmovrq("fmovrqlez", 0x2, 0),
-/* v9 */ fmovrq("fmovrqgz", 0x6, 0),
-/* v9 */ fmovrq("fmovrqnz", 0x5, F_ALIAS),
-/* v9 */ fmovrq("fmovrqz", 0x1, F_ALIAS),
-
-#undef movr /* v9 */
-#undef fmovr /* v9 */
-#undef fmrr /* v9 */
-
-#define movicc(opcode, cond, flags) /* v9 */ \
-  { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|XCC|(1<<11), "z,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|XCC|(1<<11), "z,I,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|(1<<11),     "Z,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|(1<<11),     "Z,I,d", flags, v9 }
-
-#define movfcc(opcode, fcond, flags) /* v9 */ \
-  { opcode, F3(2, 0x2c, 0)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~0), "6,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~1), "6,I,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 0)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~0), "7,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~1), "7,I,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 0)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~0), "8,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~1), "8,I,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 0)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~0), "9,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~1), "9,I,d", flags, v9 }
-
-#define movcc(opcode, cond, fcond, flags) /* v9 */ \
-  movfcc (opcode, fcond, flags), /* v9 */ \
-  movicc (opcode, cond, flags) /* v9 */
-
-/* v9 */ movcc  ("mova", CONDA, FCONDA, 0),
-/* v9 */ movicc ("movcc", CONDCC, 0),
-/* v9 */ movicc ("movgeu", CONDGEU, F_ALIAS),
-/* v9 */ movicc ("movcs", CONDCS, 0),
-/* v9 */ movicc ("movlu", CONDLU, F_ALIAS),
-/* v9 */ movcc  ("move", CONDE, FCONDE, 0),
-/* v9 */ movcc  ("movg", CONDG, FCONDG, 0),
-/* v9 */ movcc  ("movge", CONDGE, FCONDGE, 0),
-/* v9 */ movicc ("movgu", CONDGU, 0),
-/* v9 */ movcc  ("movl", CONDL, FCONDL, 0),
-/* v9 */ movcc  ("movle", CONDLE, FCONDLE, 0),
-/* v9 */ movicc ("movleu", CONDLEU, 0),
-/* v9 */ movfcc ("movlg", FCONDLG, 0),
-/* v9 */ movcc  ("movn", CONDN, FCONDN, 0),
-/* v9 */ movcc  ("movne", CONDNE, FCONDNE, 0),
-/* v9 */ movicc ("movneg", CONDNEG, 0),
-/* v9 */ movcc  ("movnz", CONDNZ, FCONDNZ, F_ALIAS),
-/* v9 */ movfcc ("movo", FCONDO, 0),
-/* v9 */ movicc ("movpos", CONDPOS, 0),
-/* v9 */ movfcc ("movu", FCONDU, 0),
-/* v9 */ movfcc ("movue", FCONDUE, 0),
-/* v9 */ movfcc ("movug", FCONDUG, 0),
-/* v9 */ movfcc ("movuge", FCONDUGE, 0),
-/* v9 */ movfcc ("movul", FCONDUL, 0),
-/* v9 */ movfcc ("movule", FCONDULE, 0),
-/* v9 */ movicc ("movvc", CONDVC, 0),
-/* v9 */ movicc ("movvs", CONDVS, 0),
-/* v9 */ movcc  ("movz", CONDZ, FCONDZ, F_ALIAS),
-
-#undef movicc /* v9 */
-#undef movfcc /* v9 */
-#undef movcc /* v9 */
-
-#define FM_SF 1 /* v9 - values for fpsize */
-#define FM_DF 2 /* v9 */
-#define FM_QF 3 /* v9 */
-
-#define fmovicc(opcode, fpsize, cond, flags) /* v9 */ \
-{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0),  "z,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0),  "Z,f,g", flags, v9 }
-
-#define fmovfcc(opcode, fpsize, fcond, flags) /* v9 */ \
-{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 }
-
-/* FIXME: use fmovicc/fmovfcc? */ /* v9 */
-#define fmovcc(opcode, fpsize, cond, fcond, flags) /* v9 */ \
-{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0),  "z,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0),  "Z,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 }
-
-/* v9 */ fmovcc  ("fmovda", FM_DF, CONDA, FCONDA, 0),
-/* v9 */ fmovcc  ("fmovqa", FM_QF, CONDA, FCONDA, 0),
-/* v9 */ fmovcc  ("fmovsa", FM_SF, CONDA, FCONDA, 0),
-/* v9 */ fmovicc ("fmovdcc", FM_DF, CONDCC, 0),
-/* v9 */ fmovicc ("fmovqcc", FM_QF, CONDCC, 0),
-/* v9 */ fmovicc ("fmovscc", FM_SF, CONDCC, 0),
-/* v9 */ fmovicc ("fmovdcs", FM_DF, CONDCS, 0),
-/* v9 */ fmovicc ("fmovqcs", FM_QF, CONDCS, 0),
-/* v9 */ fmovicc ("fmovscs", FM_SF, CONDCS, 0),
-/* v9 */ fmovcc  ("fmovde", FM_DF, CONDE, FCONDE, 0),
-/* v9 */ fmovcc  ("fmovqe", FM_QF, CONDE, FCONDE, 0),
-/* v9 */ fmovcc  ("fmovse", FM_SF, CONDE, FCONDE, 0),
-/* v9 */ fmovcc  ("fmovdg", FM_DF, CONDG, FCONDG, 0),
-/* v9 */ fmovcc  ("fmovqg", FM_QF, CONDG, FCONDG, 0),
-/* v9 */ fmovcc  ("fmovsg", FM_SF, CONDG, FCONDG, 0),
-/* v9 */ fmovcc  ("fmovdge", FM_DF, CONDGE, FCONDGE, 0),
-/* v9 */ fmovcc  ("fmovqge", FM_QF, CONDGE, FCONDGE, 0),
-/* v9 */ fmovcc  ("fmovsge", FM_SF, CONDGE, FCONDGE, 0),
-/* v9 */ fmovicc ("fmovdgeu", FM_DF, CONDGEU, F_ALIAS),
-/* v9 */ fmovicc ("fmovqgeu", FM_QF, CONDGEU, F_ALIAS),
-/* v9 */ fmovicc ("fmovsgeu", FM_SF, CONDGEU, F_ALIAS),
-/* v9 */ fmovicc ("fmovdgu", FM_DF, CONDGU, 0),
-/* v9 */ fmovicc ("fmovqgu", FM_QF, CONDGU, 0),
-/* v9 */ fmovicc ("fmovsgu", FM_SF, CONDGU, 0),
-/* v9 */ fmovcc  ("fmovdl", FM_DF, CONDL, FCONDL, 0),
-/* v9 */ fmovcc  ("fmovql", FM_QF, CONDL, FCONDL, 0),
-/* v9 */ fmovcc  ("fmovsl", FM_SF, CONDL, FCONDL, 0),
-/* v9 */ fmovcc  ("fmovdle", FM_DF, CONDLE, FCONDLE, 0),
-/* v9 */ fmovcc  ("fmovqle", FM_QF, CONDLE, FCONDLE, 0),
-/* v9 */ fmovcc  ("fmovsle", FM_SF, CONDLE, FCONDLE, 0),
-/* v9 */ fmovicc ("fmovdleu", FM_DF, CONDLEU, 0),
-/* v9 */ fmovicc ("fmovqleu", FM_QF, CONDLEU, 0),
-/* v9 */ fmovicc ("fmovsleu", FM_SF, CONDLEU, 0),
-/* v9 */ fmovfcc ("fmovdlg", FM_DF, FCONDLG, 0),
-/* v9 */ fmovfcc ("fmovqlg", FM_QF, FCONDLG, 0),
-/* v9 */ fmovfcc ("fmovslg", FM_SF, FCONDLG, 0),
-/* v9 */ fmovicc ("fmovdlu", FM_DF, CONDLU, F_ALIAS),
-/* v9 */ fmovicc ("fmovqlu", FM_QF, CONDLU, F_ALIAS),
-/* v9 */ fmovicc ("fmovslu", FM_SF, CONDLU, F_ALIAS),
-/* v9 */ fmovcc  ("fmovdn", FM_DF, CONDN, FCONDN, 0),
-/* v9 */ fmovcc  ("fmovqn", FM_QF, CONDN, FCONDN, 0),
-/* v9 */ fmovcc  ("fmovsn", FM_SF, CONDN, FCONDN, 0),
-/* v9 */ fmovcc  ("fmovdne", FM_DF, CONDNE, FCONDNE, 0),
-/* v9 */ fmovcc  ("fmovqne", FM_QF, CONDNE, FCONDNE, 0),
-/* v9 */ fmovcc  ("fmovsne", FM_SF, CONDNE, FCONDNE, 0),
-/* v9 */ fmovicc ("fmovdneg", FM_DF, CONDNEG, 0),
-/* v9 */ fmovicc ("fmovqneg", FM_QF, CONDNEG, 0),
-/* v9 */ fmovicc ("fmovsneg", FM_SF, CONDNEG, 0),
-/* v9 */ fmovcc  ("fmovdnz", FM_DF, CONDNZ, FCONDNZ, F_ALIAS),
-/* v9 */ fmovcc  ("fmovqnz", FM_QF, CONDNZ, FCONDNZ, F_ALIAS),
-/* v9 */ fmovcc  ("fmovsnz", FM_SF, CONDNZ, FCONDNZ, F_ALIAS),
-/* v9 */ fmovfcc ("fmovdo", FM_DF, FCONDO, 0),
-/* v9 */ fmovfcc ("fmovqo", FM_QF, FCONDO, 0),
-/* v9 */ fmovfcc ("fmovso", FM_SF, FCONDO, 0),
-/* v9 */ fmovicc ("fmovdpos", FM_DF, CONDPOS, 0),
-/* v9 */ fmovicc ("fmovqpos", FM_QF, CONDPOS, 0),
-/* v9 */ fmovicc ("fmovspos", FM_SF, CONDPOS, 0),
-/* v9 */ fmovfcc ("fmovdu", FM_DF, FCONDU, 0),
-/* v9 */ fmovfcc ("fmovqu", FM_QF, FCONDU, 0),
-/* v9 */ fmovfcc ("fmovsu", FM_SF, FCONDU, 0),
-/* v9 */ fmovfcc ("fmovdue", FM_DF, FCONDUE, 0),
-/* v9 */ fmovfcc ("fmovque", FM_QF, FCONDUE, 0),
-/* v9 */ fmovfcc ("fmovsue", FM_SF, FCONDUE, 0),
-/* v9 */ fmovfcc ("fmovdug", FM_DF, FCONDUG, 0),
-/* v9 */ fmovfcc ("fmovqug", FM_QF, FCONDUG, 0),
-/* v9 */ fmovfcc ("fmovsug", FM_SF, FCONDUG, 0),
-/* v9 */ fmovfcc ("fmovduge", FM_DF, FCONDUGE, 0),
-/* v9 */ fmovfcc ("fmovquge", FM_QF, FCONDUGE, 0),
-/* v9 */ fmovfcc ("fmovsuge", FM_SF, FCONDUGE, 0),
-/* v9 */ fmovfcc ("fmovdul", FM_DF, FCONDUL, 0),
-/* v9 */ fmovfcc ("fmovqul", FM_QF, FCONDUL, 0),
-/* v9 */ fmovfcc ("fmovsul", FM_SF, FCONDUL, 0),
-/* v9 */ fmovfcc ("fmovdule", FM_DF, FCONDULE, 0),
-/* v9 */ fmovfcc ("fmovqule", FM_QF, FCONDULE, 0),
-/* v9 */ fmovfcc ("fmovsule", FM_SF, FCONDULE, 0),
-/* v9 */ fmovicc ("fmovdvc", FM_DF, CONDVC, 0),
-/* v9 */ fmovicc ("fmovqvc", FM_QF, CONDVC, 0),
-/* v9 */ fmovicc ("fmovsvc", FM_SF, CONDVC, 0),
-/* v9 */ fmovicc ("fmovdvs", FM_DF, CONDVS, 0),
-/* v9 */ fmovicc ("fmovqvs", FM_QF, CONDVS, 0),
-/* v9 */ fmovicc ("fmovsvs", FM_SF, CONDVS, 0),
-/* v9 */ fmovcc  ("fmovdz", FM_DF, CONDZ, FCONDZ, F_ALIAS),
-/* v9 */ fmovcc  ("fmovqz", FM_QF, CONDZ, FCONDZ, F_ALIAS),
-/* v9 */ fmovcc  ("fmovsz", FM_SF, CONDZ, FCONDZ, F_ALIAS),
-
-#undef fmovicc /* v9 */
-#undef fmovfcc /* v9 */
-#undef fmovcc /* v9 */
-#undef FM_DF /* v9 */
-#undef FM_QF /* v9 */
-#undef FM_SF /* v9 */
-
-#define brfc(opcode, mask, lose, flags) \
- { opcode, (mask), ANNUL|(lose), "l",    flags|F_DELAYED, v6 }, \
- { opcode, (mask)|ANNUL, (lose), ",a l", flags|F_DELAYED, v6 }
-
-#define brfcx(opcode, mask, lose, flags) /* v9 */ \
- { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), "6,G",      flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), ",T 6,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a 6,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a,T 6,G", flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(0)|(mask), ANNUL|BPRED|FBFCC(~0)|(lose), ",N 6,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(0)|(mask)|ANNUL, BPRED|FBFCC(~0)|(lose), ",a,N 6,G", flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), "7,G",      flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), ",T 7,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a 7,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a,T 7,G", flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(1)|(mask), ANNUL|BPRED|FBFCC(~1)|(lose), ",N 7,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(1)|(mask)|ANNUL, BPRED|FBFCC(~1)|(lose), ",a,N 7,G", flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), "8,G",      flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), ",T 8,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a 8,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a,T 8,G", flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(2)|(mask), ANNUL|BPRED|FBFCC(~2)|(lose), ",N 8,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(2)|(mask)|ANNUL, BPRED|FBFCC(~2)|(lose), ",a,N 8,G", flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), "9,G",      flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), ",T 9,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a 9,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a,T 9,G", flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(3)|(mask), ANNUL|BPRED|FBFCC(~3)|(lose), ",N 9,G",   flags|F_DELAYED, v9 }, \
- { opcode, FBFCC(3)|(mask)|ANNUL, BPRED|FBFCC(~3)|(lose), ",a,N  9,G", flags|F_DELAYED, v9 }
-
-/* v9: We must put `brfcx' before `brfc', to ensure that we never match
-   v9: something against an expression unless it is an expression.  Otherwise,
-   v9: we end up with undefined symbol tables entries, because they get added,
-   v9: but are not deleted if the pattern fails to match.  */
-
-#define condfc(fop, cop, mask, flags) \
-  brfcx(fop, F2(0, 5)|COND(mask), F2(~0, ~5)|COND(~(mask)), flags), /* v9 */ \
-  brfc(fop, F2(0, 6)|COND(mask), F2(~0, ~6)|COND(~(mask)), flags), \
-  brfc(cop, F2(0, 7)|COND(mask), F2(~0, ~7)|COND(~(mask)), flags)
-
-#define condf(fop, mask, flags) \
-  brfcx(fop, F2(0, 5)|COND(mask), F2(~0, ~5)|COND(~(mask)), flags), /* v9 */ \
-  brfc(fop, F2(0, 6)|COND(mask), F2(~0, ~6)|COND(~(mask)), flags)
-
-condfc("fb", "cb", 0x8, 0),
-condfc("fba", "cba", 0x8, F_ALIAS),
-condfc("fbe", "cb0", 0x9, 0),
-condf("fbz", 0x9, F_ALIAS),
-condfc("fbg", "cb2", 0x6, 0),
-condfc("fbge", "cb02", 0xb, 0),
-condfc("fbl", "cb1", 0x4, 0),
-condfc("fble", "cb01", 0xd, 0),
-condfc("fblg", "cb12", 0x2, 0),
-condfc("fbn", "cbn", 0x0, 0),
-condfc("fbne", "cb123", 0x1, 0),
-condf("fbnz", 0x1, F_ALIAS),
-condfc("fbo", "cb012", 0xf, 0),
-condfc("fbu", "cb3", 0x7, 0),
-condfc("fbue", "cb03", 0xa, 0),
-condfc("fbug", "cb23", 0x5, 0),
-condfc("fbuge", "cb023", 0xc, 0),
-condfc("fbul", "cb13", 0x3, 0),
-condfc("fbule", "cb013", 0xe, 0),
-
-#undef condfc
-#undef brfc
-#undef brfcx /* v9 */
-
-{ "jmp", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI(~0), "1+2", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+rs2,%g0 */
-{ "jmp", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI_RS2(~0), "1", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+%g0,%g0 */
-{ "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0, "1+i", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+i,%g0 */
-{ "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0, "i+1", F_UNBR|F_DELAYED, v6 }, /* jmpl i+rs1,%g0 */
-{ "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* jmpl %g0+i,%g0 */
-{ "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|SIMM13(~0), "1", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+0,%g0 */
-
-{ "nop", F2(0, 4), 0xfeffffff, "", 0, v6 }, /* sethi 0, %g0 */
-
-{ "set", F2(0x0, 0x4), F2(~0x0, ~0x4), "Sh,d", F_ALIAS, v6 },
-
-{ "sethi", F2(0x0, 0x4), F2(~0x0, ~0x4), "h,d", 0, v6 },
-
-{ "taddcc", F3(2, 0x20, 0), F3(~2, ~0x20, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "taddcc", F3(2, 0x20, 1), F3(~2, ~0x20, ~1), "1,i,d", 0, v6 },
-{ "taddcc", F3(2, 0x20, 1), F3(~2, ~0x20, ~1), "i,1,d", 0, v6 },
-{ "taddcctv", F3(2, 0x22, 0), F3(~2, ~0x22, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "taddcctv", F3(2, 0x22, 1), F3(~2, ~0x22, ~1), "1,i,d", 0, v6 },
-{ "taddcctv", F3(2, 0x22, 1), F3(~2, ~0x22, ~1), "i,1,d", 0, v6 },
-
-{ "tsubcc", F3(2, 0x21, 0), F3(~2, ~0x21, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "tsubcc", F3(2, 0x21, 1), F3(~2, ~0x21, ~1), "1,i,d", 0, v6 },
-{ "tsubcctv", F3(2, 0x23, 0), F3(~2, ~0x23, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "tsubcctv", F3(2, 0x23, 1), F3(~2, ~0x23, ~1), "1,i,d", 0, v6 },
-
-{ "unimp", F2(0x0, 0x0), 0xffc00000, "n", 0, v6notv9 },
-{ "illtrap", F2(0, 0), F2(~0, ~0)|RD_G0, "n", 0, v9 },
-
-/* This *is* a commutative instruction.  */
-{ "xnor", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "xnor", F3(2, 0x07, 1), F3(~2, ~0x07, ~1), "1,i,d", 0, v6 },
-{ "xnor", F3(2, 0x07, 1), F3(~2, ~0x07, ~1), "i,1,d", 0, v6 },
-/* This *is* a commutative instruction.  */
-{ "xnorcc", F3(2, 0x17, 0), F3(~2, ~0x17, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "xnorcc", F3(2, 0x17, 1), F3(~2, ~0x17, ~1), "1,i,d", 0, v6 },
-{ "xnorcc", F3(2, 0x17, 1), F3(~2, ~0x17, ~1), "i,1,d", 0, v6 },
-{ "xor", F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "xor", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "1,i,d", 0, v6 },
-{ "xor", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "i,1,d", 0, v6 },
-{ "xorcc", F3(2, 0x13, 0), F3(~2, ~0x13, ~0)|ASI(~0), "1,2,d", 0, v6 },
-{ "xorcc", F3(2, 0x13, 1), F3(~2, ~0x13, ~1), "1,i,d", 0, v6 },
-{ "xorcc", F3(2, 0x13, 1), F3(~2, ~0x13, ~1), "i,1,d", 0, v6 },
-
-{ "not", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "1,d", F_ALIAS, v6 }, /* xnor rs1,%0,rd */
-{ "not", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "r", F_ALIAS, v6 }, /* xnor rd,%0,rd */
-
-{ "btog", F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* xor rd,rs2,rd */
-{ "btog", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "i,r", F_ALIAS, v6 }, /* xor rd,i,rd */
-
-/* FPop1 and FPop2 are not instructions.  Don't accept them.  */
-
-{ "fdtoi", F3F(2, 0x34, 0x0d2), F3F(~2, ~0x34, ~0x0d2)|RS1_G0, "B,g", 0, v6 },
-{ "fstoi", F3F(2, 0x34, 0x0d1), F3F(~2, ~0x34, ~0x0d1)|RS1_G0, "f,g", 0, v6 },
-{ "fqtoi", F3F(2, 0x34, 0x0d3), F3F(~2, ~0x34, ~0x0d3)|RS1_G0, "R,g", 0, v8 },
-
-{ "fdtox", F3F(2, 0x34, 0x082), F3F(~2, ~0x34, ~0x082)|RS1_G0, "B,g", 0, v9 },
-{ "fstox", F3F(2, 0x34, 0x081), F3F(~2, ~0x34, ~0x081)|RS1_G0, "f,g", 0, v9 },
-{ "fqtox", F3F(2, 0x34, 0x083), F3F(~2, ~0x34, ~0x083)|RS1_G0, "R,g", 0, v9 },
-
-{ "fitod", F3F(2, 0x34, 0x0c8), F3F(~2, ~0x34, ~0x0c8)|RS1_G0, "f,H", 0, v6 },
-{ "fitos", F3F(2, 0x34, 0x0c4), F3F(~2, ~0x34, ~0x0c4)|RS1_G0, "f,g", 0, v6 },
-{ "fitoq", F3F(2, 0x34, 0x0cc), F3F(~2, ~0x34, ~0x0cc)|RS1_G0, "f,J", 0, v8 },
-
-{ "fxtod", F3F(2, 0x34, 0x088), F3F(~2, ~0x34, ~0x088)|RS1_G0, "f,H", 0, v9 },
-{ "fxtos", F3F(2, 0x34, 0x084), F3F(~2, ~0x34, ~0x084)|RS1_G0, "f,g", 0, v9 },
-{ "fxtoq", F3F(2, 0x34, 0x08c), F3F(~2, ~0x34, ~0x08c)|RS1_G0, "f,J", 0, v9 },
-
-{ "fdtoq", F3F(2, 0x34, 0x0ce), F3F(~2, ~0x34, ~0x0ce)|RS1_G0, "B,J", 0, v8 },
-{ "fdtos", F3F(2, 0x34, 0x0c6), F3F(~2, ~0x34, ~0x0c6)|RS1_G0, "B,g", 0, v6 },
-{ "fqtod", F3F(2, 0x34, 0x0cb), F3F(~2, ~0x34, ~0x0cb)|RS1_G0, "R,H", 0, v8 },
-{ "fqtos", F3F(2, 0x34, 0x0c7), F3F(~2, ~0x34, ~0x0c7)|RS1_G0, "R,g", 0, v8 },
-{ "fstod", F3F(2, 0x34, 0x0c9), F3F(~2, ~0x34, ~0x0c9)|RS1_G0, "f,H", 0, v6 },
-{ "fstoq", F3F(2, 0x34, 0x0cd), F3F(~2, ~0x34, ~0x0cd)|RS1_G0, "f,J", 0, v8 },
-
-{ "fdivd", F3F(2, 0x34, 0x04e), F3F(~2, ~0x34, ~0x04e), "v,B,H", 0, v6 },
-{ "fdivq", F3F(2, 0x34, 0x04f), F3F(~2, ~0x34, ~0x04f), "V,R,J", 0, v8 },
-{ "fdivs", F3F(2, 0x34, 0x04d), F3F(~2, ~0x34, ~0x04d), "e,f,g", 0, v6 },
-{ "fmuld", F3F(2, 0x34, 0x04a), F3F(~2, ~0x34, ~0x04a), "v,B,H", 0, v6 },
-{ "fmulq", F3F(2, 0x34, 0x04b), F3F(~2, ~0x34, ~0x04b), "V,R,J", 0, v8 },
-{ "fmuls", F3F(2, 0x34, 0x049), F3F(~2, ~0x34, ~0x049), "e,f,g", 0, v6 },
-
-{ "fdmulq", F3F(2, 0x34, 0x06e), F3F(~2, ~0x34, ~0x06e), "v,B,J", 0, v8 },
-{ "fsmuld", F3F(2, 0x34, 0x069), F3F(~2, ~0x34, ~0x069), "e,f,H", 0, v8 },
-
-{ "fsqrtd", F3F(2, 0x34, 0x02a), F3F(~2, ~0x34, ~0x02a)|RS1_G0, "B,H", 0, v7 },
-{ "fsqrtq", F3F(2, 0x34, 0x02b), F3F(~2, ~0x34, ~0x02b)|RS1_G0, "R,J", 0, v8 },
-{ "fsqrts", F3F(2, 0x34, 0x029), F3F(~2, ~0x34, ~0x029)|RS1_G0, "f,g", 0, v7 },
-
-{ "fabsd", F3F(2, 0x34, 0x00a), F3F(~2, ~0x34, ~0x00a)|RS1_G0, "B,H", 0, v9 },
-{ "fabsq", F3F(2, 0x34, 0x00b), F3F(~2, ~0x34, ~0x00b)|RS1_G0, "R,J", 0, v9 },
-{ "fabss", F3F(2, 0x34, 0x009), F3F(~2, ~0x34, ~0x009)|RS1_G0, "f,g", 0, v6 },
-{ "fmovd", F3F(2, 0x34, 0x002), F3F(~2, ~0x34, ~0x002)|RS1_G0, "B,H", 0, v9 },
-{ "fmovq", F3F(2, 0x34, 0x003), F3F(~2, ~0x34, ~0x003)|RS1_G0, "R,J", 0, v9 },
-{ "fmovs", F3F(2, 0x34, 0x001), F3F(~2, ~0x34, ~0x001)|RS1_G0, "f,g", 0, v6 },
-{ "fnegd", F3F(2, 0x34, 0x006), F3F(~2, ~0x34, ~0x006)|RS1_G0, "B,H", 0, v9 },
-{ "fnegq", F3F(2, 0x34, 0x007), F3F(~2, ~0x34, ~0x007)|RS1_G0, "R,J", 0, v9 },
-{ "fnegs", F3F(2, 0x34, 0x005), F3F(~2, ~0x34, ~0x005)|RS1_G0, "f,g", 0, v6 },
-
-{ "faddd", F3F(2, 0x34, 0x042), F3F(~2, ~0x34, ~0x042), "v,B,H", 0, v6 },
-{ "faddq", F3F(2, 0x34, 0x043), F3F(~2, ~0x34, ~0x043), "V,R,J", 0, v8 },
-{ "fadds", F3F(2, 0x34, 0x041), F3F(~2, ~0x34, ~0x041), "e,f,g", 0, v6 },
-{ "fsubd", F3F(2, 0x34, 0x046), F3F(~2, ~0x34, ~0x046), "v,B,H", 0, v6 },
-{ "fsubq", F3F(2, 0x34, 0x047), F3F(~2, ~0x34, ~0x047), "V,R,J", 0, v8 },
-{ "fsubs", F3F(2, 0x34, 0x045), F3F(~2, ~0x34, ~0x045), "e,f,g", 0, v6 },
-
-#define CMPFCC(x) (((x)&0x3)<<25)
-
-{ "fcmpd",          F3F(2, 0x35, 0x052),            F3F(~2, ~0x35, ~0x052)|RD_G0,  "v,B",   0, v6 },
-{ "fcmpd", CMPFCC(0)|F3F(2, 0x35, 0x052), CMPFCC(~0)|F3F(~2, ~0x35, ~0x052), "6,v,B", 0, v9 },
-{ "fcmpd", CMPFCC(1)|F3F(2, 0x35, 0x052), CMPFCC(~1)|F3F(~2, ~0x35, ~0x052), "7,v,B", 0, v9 },
-{ "fcmpd", CMPFCC(2)|F3F(2, 0x35, 0x052), CMPFCC(~2)|F3F(~2, ~0x35, ~0x052), "8,v,B", 0, v9 },
-{ "fcmpd", CMPFCC(3)|F3F(2, 0x35, 0x052), CMPFCC(~3)|F3F(~2, ~0x35, ~0x052), "9,v,B", 0, v9 },
-{ "fcmped",          F3F(2, 0x35, 0x056),            F3F(~2, ~0x35, ~0x056)|RD_G0,  "v,B",   0, v6 },
-{ "fcmped", CMPFCC(0)|F3F(2, 0x35, 0x056), CMPFCC(~0)|F3F(~2, ~0x35, ~0x056), "6,v,B", 0, v9 },
-{ "fcmped", CMPFCC(1)|F3F(2, 0x35, 0x056), CMPFCC(~1)|F3F(~2, ~0x35, ~0x056), "7,v,B", 0, v9 },
-{ "fcmped", CMPFCC(2)|F3F(2, 0x35, 0x056), CMPFCC(~2)|F3F(~2, ~0x35, ~0x056), "8,v,B", 0, v9 },
-{ "fcmped", CMPFCC(3)|F3F(2, 0x35, 0x056), CMPFCC(~3)|F3F(~2, ~0x35, ~0x056), "9,v,B", 0, v9 },
-{ "fcmpq",          F3F(2, 0x34, 0x053),            F3F(~2, ~0x34, ~0x053)|RD_G0, "V,R", 0, v8 },
-{ "fcmpq", CMPFCC(0)|F3F(2, 0x35, 0x053), CMPFCC(~0)|F3F(~2, ~0x35, ~0x053), "6,V,R", 0, v9 },
-{ "fcmpq", CMPFCC(1)|F3F(2, 0x35, 0x053), CMPFCC(~1)|F3F(~2, ~0x35, ~0x053), "7,V,R", 0, v9 },
-{ "fcmpq", CMPFCC(2)|F3F(2, 0x35, 0x053), CMPFCC(~2)|F3F(~2, ~0x35, ~0x053), "8,V,R", 0, v9 },
-{ "fcmpq", CMPFCC(3)|F3F(2, 0x35, 0x053), CMPFCC(~3)|F3F(~2, ~0x35, ~0x053), "9,V,R", 0, v9 },
-{ "fcmpeq",          F3F(2, 0x34, 0x057),            F3F(~2, ~0x34, ~0x057)|RD_G0, "V,R", 0, v8 },
-{ "fcmpeq", CMPFCC(0)|F3F(2, 0x35, 0x057), CMPFCC(~0)|F3F(~2, ~0x35, ~0x057), "6,V,R", 0, v9 },
-{ "fcmpeq", CMPFCC(1)|F3F(2, 0x35, 0x057), CMPFCC(~1)|F3F(~2, ~0x35, ~0x057), "7,V,R", 0, v9 },
-{ "fcmpeq", CMPFCC(2)|F3F(2, 0x35, 0x057), CMPFCC(~2)|F3F(~2, ~0x35, ~0x057), "8,V,R", 0, v9 },
-{ "fcmpeq", CMPFCC(3)|F3F(2, 0x35, 0x057), CMPFCC(~3)|F3F(~2, ~0x35, ~0x057), "9,V,R", 0, v9 },
-{ "fcmps",          F3F(2, 0x35, 0x051),            F3F(~2, ~0x35, ~0x051)|RD_G0, "e,f",   0, v6 },
-{ "fcmps", CMPFCC(0)|F3F(2, 0x35, 0x051), CMPFCC(~0)|F3F(~2, ~0x35, ~0x051), "6,e,f", 0, v9 },
-{ "fcmps", CMPFCC(1)|F3F(2, 0x35, 0x051), CMPFCC(~1)|F3F(~2, ~0x35, ~0x051), "7,e,f", 0, v9 },
-{ "fcmps", CMPFCC(2)|F3F(2, 0x35, 0x051), CMPFCC(~2)|F3F(~2, ~0x35, ~0x051), "8,e,f", 0, v9 },
-{ "fcmps", CMPFCC(3)|F3F(2, 0x35, 0x051), CMPFCC(~3)|F3F(~2, ~0x35, ~0x051), "9,e,f", 0, v9 },
-{ "fcmpes",          F3F(2, 0x35, 0x055),            F3F(~2, ~0x35, ~0x055)|RD_G0, "e,f",   0, v6 },
-{ "fcmpes", CMPFCC(0)|F3F(2, 0x35, 0x055), CMPFCC(~0)|F3F(~2, ~0x35, ~0x055), "6,e,f", 0, v9 },
-{ "fcmpes", CMPFCC(1)|F3F(2, 0x35, 0x055), CMPFCC(~1)|F3F(~2, ~0x35, ~0x055), "7,e,f", 0, v9 },
-{ "fcmpes", CMPFCC(2)|F3F(2, 0x35, 0x055), CMPFCC(~2)|F3F(~2, ~0x35, ~0x055), "8,e,f", 0, v9 },
-{ "fcmpes", CMPFCC(3)|F3F(2, 0x35, 0x055), CMPFCC(~3)|F3F(~2, ~0x35, ~0x055), "9,e,f", 0, v9 },
-
-/* These Extended FPop (FIFO) instructions are new in the Fujitsu
-   MB86934, replacing the CPop instructions from v6 and later
-   processors.  */
-
-#define EFPOP1_2(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op)|RS1_G0, args, 0, sparclite }
-#define EFPOP1_3(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op),        args, 0, sparclite }
-#define EFPOP2_2(name, op, args) { name, F3F(2, 0x37, op), F3F(~2, ~0x37, ~op)|RD_G0,  args, 0, sparclite }
-
-EFPOP1_2 ("efitod", 0x0c8, "f,H"),
-EFPOP1_2 ("efitos", 0x0c4, "f,g"),
-EFPOP1_2 ("efdtoi", 0x0d2, "B,g"),
-EFPOP1_2 ("efstoi", 0x0d1, "f,g"),
-EFPOP1_2 ("efstod", 0x0c9, "f,H"),
-EFPOP1_2 ("efdtos", 0x0c6, "B,g"),
-EFPOP1_2 ("efmovs", 0x001, "f,g"),
-EFPOP1_2 ("efnegs", 0x005, "f,g"),
-EFPOP1_2 ("efabss", 0x009, "f,g"),
-EFPOP1_2 ("efsqrtd", 0x02a, "B,H"),
-EFPOP1_2 ("efsqrts", 0x029, "f,g"),
-EFPOP1_3 ("efaddd", 0x042, "v,B,H"),
-EFPOP1_3 ("efadds", 0x041, "e,f,g"),
-EFPOP1_3 ("efsubd", 0x046, "v,B,H"),
-EFPOP1_3 ("efsubs", 0x045, "e,f,g"),
-EFPOP1_3 ("efdivd", 0x04e, "v,B,H"),
-EFPOP1_3 ("efdivs", 0x04d, "e,f,g"),
-EFPOP1_3 ("efmuld", 0x04a, "v,B,H"),
-EFPOP1_3 ("efmuls", 0x049, "e,f,g"),
-EFPOP1_3 ("efsmuld", 0x069, "e,f,H"),
-EFPOP2_2 ("efcmpd", 0x052, "v,B"),
-EFPOP2_2 ("efcmped", 0x056, "v,B"),
-EFPOP2_2 ("efcmps", 0x051, "e,f"),
-EFPOP2_2 ("efcmpes", 0x055, "e,f"),
-
-#undef EFPOP1_2
-#undef EFPOP1_3
-#undef EFPOP2_2
-
-/* These are marked F_ALIAS, so that they won't conflict with sparclite insns
-   present.  Otherwise, the F_ALIAS flag is ignored.  */
-{ "cpop1", F3(2, 0x36, 0), F3(~2, ~0x36, ~1), "[1+2],d", F_ALIAS, v6notv9 },
-{ "cpop2", F3(2, 0x37, 0), F3(~2, ~0x37, ~1), "[1+2],d", F_ALIAS, v6notv9 },
-
-/* sparclet specific insns */
-
-commuteop ("umac", 0x3e, sparclet),
-commuteop ("smac", 0x3f, sparclet),
-commuteop ("umacd", 0x2e, sparclet),
-commuteop ("smacd", 0x2f, sparclet),
-commuteop ("umuld", 0x09, sparclet),
-commuteop ("smuld", 0x0d, sparclet),
-
-{ "shuffle", F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0), "1,2,d", 0, sparclet },
-{ "shuffle", F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1), "1,i,d", 0, sparclet },
-
-{ "crdcxt", F3(2, 0x36, 0)|ASI(4), F3(~2, ~0x36, ~0)|ASI(~4)|RS2(~0), "U,d", 0, sparclet },
-{ "cwrcxt", F3(2, 0x36, 0)|ASI(3), F3(~2, ~0x36, ~0)|ASI(~3)|RS2(~0), "1,u", 0, sparclet },
-{ "cpush", F3(2, 0x36, 0)|ASI(0), F3(~2, ~0x36, ~0)|ASI(~0)|RD(~0), "1,2", 0, sparclet },
-{ "cpusha", F3(2, 0x36, 0)|ASI(1), F3(~2, ~0x36, ~0)|ASI(~1)|RD(~0), "1,2", 0, sparclet },
-{ "cpull", F3(2, 0x36, 0)|ASI(2), F3(~2, ~0x36, ~0)|ASI(~2)|RS1(~0)|RS2(~0), "d", 0, sparclet },
-
-/* sparclet coprocessor branch insns */
-/* FIXME: We have to mark these as aliases until we can sort opcodes based
-   on selected cpu.  */
-#define slcbcc2(opcode, mask, lose) \
- { opcode, (mask), ANNUL|(lose), "l",    F_DELAYED|F_CONDBR|F_ALIAS, sparclet }, \
- { opcode, (mask)|ANNUL, (lose), ",a l", F_DELAYED|F_CONDBR|F_ALIAS, sparclet }
-#define slcbcc(opcode, mask) \
-  slcbcc2(opcode, F2(0, 7)|COND(mask), F2(~0, ~7)|COND(~(mask)))
-
-/*slcbcc("cbn", 0), - already defined */
-slcbcc("cbe", 1),
-slcbcc("cbf", 2),
-slcbcc("cbef", 3),
-slcbcc("cbr", 4),
-slcbcc("cber", 5),
-slcbcc("cbfr", 6),
-slcbcc("cbefr", 7),
-/*slcbcc("cba", 8), - already defined */
-slcbcc("cbne", 9),
-slcbcc("cbnf", 10),
-slcbcc("cbnef", 11),
-slcbcc("cbnr", 12),
-slcbcc("cbner", 13),
-slcbcc("cbnfr", 14),
-slcbcc("cbnefr", 15),
-
-#undef slcbcc2
-#undef slcbcc
-
-/* More v9 specific insns */
-
-#define IMPDEP(name, code) \
-{ name, F3(2, code, 0), F3(~2, ~code, ~0)|ASI(~0), "1,2,d", 0, v9 }, \
-{ name, F3(2, code, 1), F3(~2, ~code, ~1),   "1,i,d", 0, v9 }, \
-{ name, F3(2, code, 0), F3(~2, ~code, ~0),         "x,1,2,d", 0, v9 }, \
-{ name, F3(2, code, 0), F3(~2, ~code, ~0),         "x,e,f,g", 0, v9 }
-
-IMPDEP ("impdep1", 0x36),
-IMPDEP ("impdep2", 0x37),
-
-#undef IMPDEP
-
-{ "casa", F3(3, 0x3c, 0), F3(~3, ~0x3c, ~0), "[1]A,2,d", 0, v9 },
-{ "casa", F3(3, 0x3c, 1), F3(~3, ~0x3c, ~1), "[1]o,2,d", 0, v9 },
-{ "casxa", F3(3, 0x3e, 0), F3(~3, ~0x3e, ~0), "[1]A,2,d", 0, v9 },
-{ "casxa", F3(3, 0x3e, 1), F3(~3, ~0x3e, ~1), "[1]o,2,d", 0, v9 },
-
-/* v9 synthetic insns */
-/* FIXME: still missing "signx d", and "clruw d".  Can't be done here.  */
-{ "iprefetch", F2(0, 1)|(2<<20)|BPRED, F2(~0, ~1)|(1<<20)|ANNUL|COND(~0), "G", 0, v9 }, /* bn,a,pt %xcc,label */
-{ "signx", F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, v9 }, /* sra rs1,%g0,rd */
-{ "clruw", F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, v9 }, /* srl rs1,%g0,rd */
-{ "cas", F3(3, 0x3c, 0)|ASI(0x80), F3(~3, ~0x3c, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, v9 }, /* casa [rs1]ASI_P,rs2,rd */
-{ "casl", F3(3, 0x3c, 0)|ASI(0x88), F3(~3, ~0x3c, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, v9 }, /* casa [rs1]ASI_P_L,rs2,rd */
-{ "casx", F3(3, 0x3e, 0)|ASI(0x80), F3(~3, ~0x3e, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, v9 }, /* casxa [rs1]ASI_P,rs2,rd */
-{ "casxl", F3(3, 0x3e, 0)|ASI(0x88), F3(~3, ~0x3e, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, v9 }, /* casxa [rs1]ASI_P_L,rs2,rd */
-
-/* Ultrasparc extensions */
-/* FIXME: lots more to go */
-{ "shutdown", F3F(2, 0x36, 0x80), F3(~2, ~0x36, ~0x80)|RD_G0|RS1_G0|RS2_G0, "", 0, v9a },
-
-};
-
-const int sparc_num_opcodes = ((sizeof sparc_opcodes)/(sizeof sparc_opcodes[0]));
-
-/* Utilities for argument parsing.  */
-
-typedef struct
-{
-  int value;
-  char *name;
-} arg;
-
-/* Look up NAME in TABLE.  */
-
-static int
-lookup_name (table, name)
-     arg *table;
-     char *name;
-{
-  arg *p;
-
-  for (p = table; p->name; ++p)
-    if (strcmp (name, p->name) == 0)
-      return p->value;
-
-  return -1;
-}
-
-/* Look up VALUE in TABLE.  */
-
-static char *
-lookup_value (table, value)
-     arg *table;
-     int value;
-{
-  arg *p;
-
-  for (p = table; p->name; ++p)
-    if (value == p->value)
-      return p->name;
-
-  return (char *) 0;
-}
-
-/* Handle ASI's.  */
-
-static arg asi_table[] =
-{
-  { 0x10, "#ASI_AIUP" },
-  { 0x11, "#ASI_AIUS" },
-  { 0x18, "#ASI_AIUP_L" },
-  { 0x19, "#ASI_AIUS_L" },
-  { 0x80, "#ASI_P" },
-  { 0x81, "#ASI_S" },
-  { 0x82, "#ASI_PNF" },
-  { 0x83, "#ASI_SNF" },
-  { 0x88, "#ASI_P_L" },
-  { 0x89, "#ASI_S_L" },
-  { 0x8a, "#ASI_PNF_L" },
-  { 0x8b, "#ASI_SNF_L" },
-  { 0x10, "#ASI_AS_IF_USER_PRIMARY" },
-  { 0x11, "#ASI_AS_IF_USER_SECONDARY" },
-  { 0x18, "#ASI_AS_IF_USER_PRIMARY_L" },
-  { 0x19, "#ASI_AS_IF_USER_SECONDARY_L" },
-  { 0x80, "#ASI_PRIMARY" },
-  { 0x81, "#ASI_SECONDARY" },
-  { 0x82, "#ASI_PRIMARY_NOFAULT" },
-  { 0x83, "#ASI_SECONDARY_NOFAULT" },
-  { 0x88, "#ASI_PRIMARY_LITTLE" },
-  { 0x89, "#ASI_SECONDARY_LITTLE" },
-  { 0x8a, "#ASI_PRIMARY_NOFAULT_LITTLE" },
-  { 0x8b, "#ASI_SECONDARY_NOFAULT_LITTLE" },
-  { 0, 0 }
-};
-
-/* Return the value for ASI NAME, or -1 if not found.  */
-
-int
-sparc_encode_asi (name)
-     char *name;
-{
-  return lookup_name (asi_table, name);
-}
-
-/* Return the name for ASI value VALUE or NULL if not found.  */
-
-char *
-sparc_decode_asi (value)
-     int value;
-{
-  return lookup_value (asi_table, value);
-}
-
-/* Handle membar masks.  */
-
-static arg membar_table[] =
-{
-  { 0x40, "#Sync" },
-  { 0x20, "#MemIssue" },
-  { 0x10, "#Lookaside" },
-  { 0x08, "#StoreStore" },
-  { 0x04, "#LoadStore" },
-  { 0x02, "#StoreLoad" },
-  { 0x01, "#LoadLoad" },
-  { 0, 0 }
-};
-
-/* Return the value for membar arg NAME, or -1 if not found.  */
-
-int
-sparc_encode_membar (name)
-     char *name;
-{
-  return lookup_name (membar_table, name);
-}
-
-/* Return the name for membar value VALUE or NULL if not found.  */
-
-char *
-sparc_decode_membar (value)
-     int value;
-{
-  return lookup_value (membar_table, value);
-}
-
-/* Handle prefetch args.  */
-
-static arg prefetch_table[] =
-{
-  { 0, "#n_reads" },
-  { 1, "#one_read" },
-  { 2, "#n_writes" },
-  { 3, "#one_write" },
-  { 4, "#page" },
-  { 0, 0 }
-};
-
-/* Return the value for prefetch arg NAME, or -1 if not found.  */
-
-int
-sparc_encode_prefetch (name)
-     char *name;
-{
-  return lookup_name (prefetch_table, name);
-}
-
-/* Return the name for prefetch value VALUE or NULL if not found.  */
-
-char *
-sparc_decode_prefetch (value)
-     int value;
-{
-  return lookup_value (prefetch_table, value);
-}
-
-/* Handle sparclet coprocessor registers.  */
-
-static arg sparclet_cpreg_table[] =
-{
-  { 0, "%ccsr" },
-  { 1, "%ccfr" },
-  { 2, "%cccrcr" },
-  { 3, "%ccpr" },
-  { 0, 0 }
-};
-
-/* Return the value for sparclet cpreg arg NAME, or -1 if not found.  */
-
-int
-sparc_encode_sparclet_cpreg (name)
-     char *name;
-{
-  return lookup_name (sparclet_cpreg_table, name);
-}
-
-/* Return the name for sparclet cpreg value VALUE or NULL if not found.  */
-
-char *
-sparc_decode_sparclet_cpreg (value)
-     int value;
-{
-  return lookup_value (sparclet_cpreg_table, value);
-}
diff --git a/opcode/sparc.h b/opcode/sparc.h
deleted file mode 100644
index 014a534..0000000
--- a/opcode/sparc.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/* Definitions for opcode table for the sparc.
-   Copyright (C) 1989, 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
-
-This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
-the GNU Binutils.
-
-GAS/GDB 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/GDB 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 or GDB; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.  */
-
-/* The SPARC opcode table (and other related data) is defined in
-   the opcodes library in sparc-opc.c.  If you change anything here, make
-   sure you fix up that file, and vice versa.  */
-
- /* FIXME-someday: perhaps the ,a's and such should be embedded in the
-    instruction's name rather than the args.  This would make gas faster, pinsn
-    slower, but would mess up some macros a bit.  xoxorich. */
-
-/* List of instruction sets variations.
-   These values are such that each element is either a superset of a
-   preceding each one or they conflict in which case SPARC_OPCODE_CONFLICT_P
-   returns non-zero.
-   The values are indices into `sparc_opcode_archs' defined in sparc-opc.c.
-   Don't change this without updating sparc-opc.c.  */
-
-enum sparc_opcode_arch_val {
-  SPARC_OPCODE_ARCH_V6 = 0,
-  SPARC_OPCODE_ARCH_V7,
-  SPARC_OPCODE_ARCH_V8,
-  SPARC_OPCODE_ARCH_SPARCLET,
-  SPARC_OPCODE_ARCH_SPARCLITE,
-  /* v9 variants must appear last */
-  SPARC_OPCODE_ARCH_V9,
-  SPARC_OPCODE_ARCH_V9A, /* v9 with ultrasparc additions */
-  SPARC_OPCODE_ARCH_BAD /* error return from sparc_opcode_lookup_arch */
-};
-
-/* The highest architecture in the table.  */
-#define SPARC_OPCODE_ARCH_MAX (SPARC_OPCODE_ARCH_BAD - 1)
-
-/* Table of cpu variants.  */
-
-struct sparc_opcode_arch {
-  const char *name;
-  /* Mask of sparc_opcode_arch_val's supported.
-     EG: For v7 this would be ((1 << v6) | (1 << v7)).  */
-  /* These are short's because sparc_opcode.architecture is.  */
-  short supported;
-};
-
-extern const struct sparc_opcode_arch sparc_opcode_archs[];
-
-/* Given architecture name, look up it's sparc_opcode_arch_val value.  */
-extern enum sparc_opcode_arch_val sparc_opcode_lookup_arch ();
-
-/* Return the bitmask of supported architectures for ARCH.  */
-#define SPARC_OPCODE_SUPPORTED(ARCH) (sparc_opcode_archs[ARCH].supported)
-
-/* Non-zero if ARCH1 conflicts with ARCH2.
-   IE: ARCH1 as a supported bit set that ARCH2 doesn't, and vice versa.  */
-#define SPARC_OPCODE_CONFLICT_P(ARCH1, ARCH2) \
-(((SPARC_OPCODE_SUPPORTED (ARCH1) & SPARC_OPCODE_SUPPORTED (ARCH2)) \
-  != SPARC_OPCODE_SUPPORTED (ARCH1)) \
- && ((SPARC_OPCODE_SUPPORTED (ARCH1) & SPARC_OPCODE_SUPPORTED (ARCH2)) \
-     != SPARC_OPCODE_SUPPORTED (ARCH2)))
-
-/* Structure of an opcode table entry.  */
-
-struct sparc_opcode {
-  const char *name;
-  unsigned long match; /* Bits that must be set. */
-  unsigned long lose; /* Bits that must not be set. */
-  const char *args;
-  /* This was called "delayed" in versions before the flags. */
-  char flags;
-  short architecture; /* Bitmask of sparc_opcode_arch_val's.  */
-};
-
-#define F_DELAYED 1 /* Delayed branch */
-#define F_ALIAS 2 /* Alias for a "real" instruction */
-#define F_UNBR 4 /* Unconditional branch */
-#define F_CONDBR 8 /* Conditional branch */
-#define F_JSR 16 /* Subroutine call */
-/* FIXME: Add F_ANACHRONISTIC flag for v9.  */
-
-/*
-
-All sparc opcodes are 32 bits, except for the `set' instruction (really a
-macro), which is 64 bits. It is handled as a special case.
-
-The match component is a mask saying which bits must match a particular
-opcode in order for an instruction to be an instance of that opcode.
-
-The args component is a string containing one character for each operand of the
-instruction.
-
-Kinds of operands:
- # Number used by optimizer. It is ignored.
- 1 rs1 register.
- 2 rs2 register.
- d rd register.
- e frs1 floating point register.
- v frs1 floating point register (double/even).
- V frs1 floating point register (quad/multiple of 4).
- f frs2 floating point register.
- B frs2 floating point register (double/even).
- R frs2 floating point register (quad/multiple of 4).
- g frsd floating point register.
- H frsd floating point register (double/even).
- J frsd floating point register (quad/multiple of 4).
- b crs1 coprocessor register
- c crs2 coprocessor register
- D crsd coprocessor register
- m alternate space register (asr) in rd
- M alternate space register (asr) in rs1
- h 22 high bits.
- K MEMBAR mask (7 bits). (v9)
- j 10 bit Immediate. (v9)
- I 11 bit Immediate. (v9)
- i 13 bit Immediate.
- n 22 bit immediate.
- k 2+14 bit PC relative immediate. (v9)
- G 19 bit PC relative immediate. (v9)
- l 22 bit PC relative immediate.
- L 30 bit PC relative immediate.
- a Annul. The annul bit is set.
- A Alternate address space. Stored as 8 bits.
- C Coprocessor state register.
- F floating point state register.
- p Processor state register.
- N Branch predict clear ",pn" (v9)
- T Branch predict set ",pt" (v9)
- z %icc. (v9)
- Z %xcc. (v9)
- q Floating point queue.
- r Single register that is both rs1 and rd.
- O Single register that is both rs2 and rd.
- Q Coprocessor queue.
- S Special case.
- t Trap base register.
- w Window invalid mask register.
- y Y register.
- u sparclet coprocessor registers in rd position
- U sparclet coprocessor registers in rs1 position
- E %ccr. (v9)
- s %fprs. (v9)
- P %pc.  (v9)
- W %tick. (v9)
- o %asi. (v9)
- 6 %fcc0. (v9)
- 7 %fcc1. (v9)
- 8 %fcc2. (v9)
- 9 %fcc3. (v9)
- ! Privileged Register in rd (v9)
- ? Privileged Register in rs1 (v9)
- * Prefetch function constant. (v9)
- x OPF field (v9 impdep).
-
-The following chars are unused: (note: ,[] are used as punctuation)
-[XY3450]
-
-*/
-
-#define OP2(x) (((x)&0x7) << 22) /* op2 field of format2 insns */
-#define OP3(x) (((x)&0x3f) << 19) /* op3 field of format3 insns */
-#define OP(x) ((unsigned)((x)&0x3) << 30) /* op field of all insns */
-#define OPF(x) (((x)&0x1ff) << 5) /* opf field of float insns */
-#define OPF_LOW5(x) OPF((x)&0x1f) /* v9 */
-#define F3F(x, y, z) (OP(x) | OP3(y) | OPF(z)) /* format3 float insns */
-#define F3I(x) (((x)&0x1) << 13) /* immediate field of format 3 insns */
-#define F2(x, y) (OP(x) | OP2(y)) /* format 2 insns */
-#define F3(x, y, z) (OP(x) | OP3(y) | F3I(z)) /* format3 insns */
-#define F1(x) (OP(x))
-#define DISP30(x) ((x)&0x3fffffff)
-#define ASI(x) (((x)&0xff) << 5) /* asi field of format3 insns */
-#define RS2(x) ((x)&0x1f) /* rs2 field */
-#define SIMM13(x) ((x)&0x1fff) /* simm13 field */
-#define RD(x) (((x)&0x1f) << 25) /* destination register field */
-#define RS1(x) (((x)&0x1f) << 14) /* rs1 field */
-#define ASI_RS2(x) (SIMM13(x))
-#define MEMBAR(x) ((x)&0x7f)
-
-#define ANNUL (1<<29)
-#define BPRED (1<<19) /* v9 */
-#define IMMED F3I(1)
-#define RD_G0 RD(~0)
-#define RS1_G0 RS1(~0)
-#define RS2_G0 RS2(~0)
-
-extern struct sparc_opcode sparc_opcodes[];
-extern const int sparc_num_opcodes;
-
-int sparc_encode_asi ();
-char *sparc_decode_asi ();
-int sparc_encode_membar ();
-char *sparc_decode_membar ();
-int sparc_encode_prefetch ();
-char *sparc_decode_prefetch ();
-int sparc_encode_sparclet_cpreg ();
-char *sparc_decode_sparclet_cpreg ();
-
-/*
- * Local Variables:
- * fill-column: 131
- * comment-column: 0
- * End:
- */
-
-/* end of sparc.h */
diff --git a/opcode/sysdep.h b/opcode/sysdep.h
deleted file mode 100644
index b81e923..0000000
--- a/opcode/sysdep.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 02/15] misc: Fix compiler warnings in libgst.

Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

The user of the get_attributes_array is working on the message OOP,
no need to get the message and not use it.

2013-02-24  Holger Hans Peter Freyther  <[hidden email]>

        * libgst/dict.c: Remove ATTRIBUTE_HIDDEN from static methods.
        * libgst/comp.c: Remove unused variables in get_attributes_array.
        * libgst/save.c: Remove unused variable in make_oop_table_to_be_saved.
---
 libgst/ChangeLog |    6 ++++++
 libgst/comp.c    |    3 ---
 libgst/dict.c    |    6 ++----
 libgst/save.c    |    2 --
 4 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/libgst/ChangeLog b/libgst/ChangeLog
index a88ec3b..e95a837 100644
--- a/libgst/ChangeLog
+++ b/libgst/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-24  Holger Hans Peter Freyther  <[hidden email]>
+
+ * libgst/dict.c: Remove ATTRIBUTE_HIDDEN from static methods.
+ * libgst/comp.c: Remove unused variables in get_attributes_array.
+ * libgst/save.c: Remove unused variable in make_oop_table_to_be_saved.
+
 2013-01-17  Gwenael Casaccio  <[hidden email]>
 
  * libgst/sysdep/win32/timer.c: Correct the function signature.
diff --git a/libgst/comp.c b/libgst/comp.c
index 9d60cec..10330e1 100644
--- a/libgst/comp.c
+++ b/libgst/comp.c
@@ -2313,9 +2313,6 @@ get_attributes_array (tree_node attribute_list)
     {
       tree_node value = attribute_list->v_list.value;
       OOP messageOOP = value->v_const.val.oopVal;
-      gst_message message = (gst_message) OOP_TO_OBJ (messageOOP);
-      OOP selectorOOP = message->selector;
-
       attributes->data[i] = messageOOP;
     }
 
diff --git a/libgst/dict.c b/libgst/dict.c
index 542c42a..f4324b7 100644
--- a/libgst/dict.c
+++ b/libgst/dict.c
@@ -182,15 +182,13 @@ OOP _gst_processor_oop = NULL;
    dictionary instance that DICTIONARYOOP is pointing to with a new,
    larger dictionary, and returns this new dictionary (the object
    pointer, not the OOP).  */
-static gst_object grow_dictionary (OOP dictionaryOOP)
-  ATTRIBUTE_HIDDEN;
+static gst_object grow_dictionary (OOP dictionaryOOP);
 
 /* Called when an IdentityDictionary becomes full, this routine
    replaces the IdentityDictionary instance that IDENTITYDICTIONARYOOP
    is pointing to with a new, larger dictionary, and returns this new
    dictionary (the object pointer, not the OOP).  */
-static gst_object grow_identity_dictionary (OOP identityDictionaryOOP)
-  ATTRIBUTE_HIDDEN;
+static gst_object grow_identity_dictionary (OOP identityDictionaryOOP);
 
 /* Answer the number of slots that are in a dictionary of
    OLDNUMFIELDS items after growing it.  */
diff --git a/libgst/save.c b/libgst/save.c
index bf16368..be980a7 100644
--- a/libgst/save.c
+++ b/libgst/save.c
@@ -377,8 +377,6 @@ make_oop_table_to_be_saved (struct save_file_header *header)
     {
       if (IS_OOP_VALID_GC (oop))
  {
-  int numPointers = NUM_OOPS (oop->object);
-
           myOOPTable[i].flags = (oop->flags & ~F_RUNTIME) | F_OLD;
   myOOPTable[i].object = (gst_object) TO_INT (oop->object->objSize);
  }
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 03/15] misc: Add some more files to the .gitignore

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

---
 .gitignore |   37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/.gitignore b/.gitignore
index 504cfce..d0578bc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@
 *.lo
 *.o
 *.star
+*.sw?
 .svn
 .deps
 .dirstamp
@@ -34,3 +35,39 @@ termnorm
 /gst-tool
 /gst.im
 /smalltalk-mode-init.el
+
+
+libgst/genbc
+libgst/genbc-decl.stamp
+libgst/genbc-impl.stamp
+libgst/genpr-parse.stamp
+libgst/genprims
+libgst/genvm
+libgst/genvm-parse.stamp
+
+lightning/asm-i386.h
+lightning/core-i386.h
+packages/glib/libs.def
+packages/gtk/Enums.st
+packages/gtk/Funcs.st
+packages/gtk/Structs.st
+packages/gtk/cpp
+packages/gtk/enums
+packages/gtk/enums.c
+packages/gtk/funcs
+packages/gtk/libs.def
+packages/gtk/mk_enums
+packages/gtk/mk_sizeof
+packages/gtk/order
+packages/gtk/sizeof
+packages/gtk/sizeof.c
+packages/gtk/structs
+packages/i18n/ref-add.sed
+packages/i18n/ref-del.sed
+packages/net/gnutls-wrapper
+packages/object-dumper/stamp-classes
+snprintfv/snprintfv/compat.stamp
+
+tests/gst.im
+tests/testsuite.dir/
+tests/testsuite.log
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 04/15] kernel: Remove unused variable from the StarPackage class

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

2013-03-04  Holger Hans Peter Freyther  <[hidden email]>

        * kernel/PkgLoader.st: Remove unused variable.
---
 ChangeLog           |    4 ++++
 kernel/PkgLoader.st |    2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 2abc1c4..6b6d9d2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-03-04  Holger Hans Peter Freyther  <[hidden email]>
+
+ * kernel/PkgLoader.st: Remove unused variable.
+
 2013-01-21  Gwenael Casaccio  <[hidden email]>
 
  * main.c: Remove ENABLE_DISASSEMBLER support
diff --git a/kernel/PkgLoader.st b/kernel/PkgLoader.st
index 3464517..b9748f2 100644
--- a/kernel/PkgLoader.st
+++ b/kernel/PkgLoader.st
@@ -1080,7 +1080,7 @@ PackageInfo subclass: StarPackage [
 
     loadedPackage [
  <category: 'accessing'>
- | file package |
+ | package |
  loadedPackage isNil ifFalse: [^loadedPackage].
  package := self file zip / 'package.xml'
  withReadStreamDo: [ :fileStream | Package parse: fileStream].
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 05/15] kernel: Introduce the DirPackage packages to help with development

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

Add a way to load a Package from the package.xml and not go through
the creation of a star file. This can make developing with packages
more effective.

2013-03-24  Holger Hans Peter Freyther  <[hidden email]>

        * libgst/files.c: Add DirPackage.st to the bootstrap.
        * kernel/DirPackage.st: Add new file with the DirPackage and DirPackagesContainer.
        * kernel/PkgLoader.st: Refactor and create ExternalPackage baseclass.
---
 ChangeLog            |    6 +++
 NEWS                 |    7 +++
 kernel/DirPackage.st |  134 ++++++++++++++++++++++++++++++++++++++++++++++++++
 kernel/Makefile.frag |    2 +-
 kernel/PkgLoader.st  |   28 +++++++----
 libgst/files.c       |    1 +
 packages.xml         |    1 +
 7 files changed, 169 insertions(+), 10 deletions(-)
 create mode 100644 kernel/DirPackage.st

diff --git a/ChangeLog b/ChangeLog
index 6b6d9d2..8a3085d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-03-24  Holger Hans Peter Freyther  <[hidden email]>
+
+ * libgst/files.c: Add DirPackage.st to the bootstrap.
+ * kernel/DirPackage.st: Add new file with the DirPackage and DirPackagesContainer.
+ * kernel/PkgLoader.st: Refactor and create ExternalPackage baseclass.
+
 2013-03-04  Holger Hans Peter Freyther  <[hidden email]>
 
  * kernel/PkgLoader.st: Remove unused variable.
diff --git a/NEWS b/NEWS
index b5e9127..d768a8f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,12 @@
 List of user-visible changes in GNU Smalltalk
 
+NEWS FROM 3.2.5 to 3.2.90
+
+o   Add PackageLoader>>#loadPackageFromFile: to load a package by using
+    a package.xml. This can make the development more effective.
+
+-----------------------------------------------------------------------------
+
 NEWS FROM 3.2.4 to 3.2.5
 
 o   Add Delay>>#value:onTimeoutDo: as an easy way to timeout an operation.
diff --git a/kernel/DirPackage.st b/kernel/DirPackage.st
new file mode 100644
index 0000000..de353d9
--- /dev/null
+++ b/kernel/DirPackage.st
@@ -0,0 +1,134 @@
+"======================================================================
+|
+|   Load packages from a directory without loading a Star file.
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 2013
+| Free Software Foundation, Inc.
+| Written by Holger Hans Peter Freyther.
+|
+| This file is part of the GNU Smalltalk class library.
+|
+| The GNU Smalltalk class library is free software; you can redistribute it
+| and/or modify it under the terms of the GNU Lesser General Public License
+| as published by the Free Software Foundation; either version 2.1, or (at
+| your option) any later version.
+|
+| The GNU Smalltalk class library 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 Lesser
+| General Public License for more details.
+|
+| You should have received a copy of the GNU Lesser General Public License
+| along with the GNU Smalltalk class library; see the file COPYING.LIB.
+| If not, write to the Free Software Foundation, 59 Temple Place - Suite
+| 330, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+Namespace current: Kernel [
+
+ExternalPackage subclass: DirPackage [
+    <category: 'Language-Packaging'>
+    <comment: 'I can parse a package.xml from a directort and treat it
+    like a package. This allows loading packages from a directory without
+    the need of zipping them first.'>
+
+    DirPackage class >> file: aFile [
+        ^ self new
+            file: aFile;
+            yourself
+    ]
+
+    directory [
+        ^ self file asFile directory.
+    ]
+
+    name [
+        "Pick the name of the loaded package"
+        ^ self loadedPackage name.
+    ]
+
+    loadedPackage [
+        <category: 'accessing'>
+        | file package |
+        loadedPackage isNil ifFalse: [^loadedPackage].
+        file := self file asFile.
+        package := Package parse: file readStream.
+        package isNil
+            ifTrue: [^self error: 'invalid disabled-package tag inside a star file'].
+        package relativeDirectory: file directory.
+        package baseDirectories: {file directory}.
+        package name isNil
+            ifTrue: [^self error: 'package name must not be nil'].
+        loadedPackage := package.
+        ^loadedPackage
+    ]
+]
+
+PackageContainer subclass: DirPackageContainer [
+
+    <category: 'Language-Packaging'>
+    <comment: 'I hold a list of parsed packages.'>
+
+    DirPackageContainer class >> on: aPackage [
+        <category: 'creation'>
+        ^ self new
+            add: aPackage;
+            yourself
+    ]
+
+    add: aPackage [
+        <category: 'addition'>
+
+        self packages
+                at: aPackage name, '.dir' put: aPackage.
+    ]
+
+    refresh: aDate [
+        "no op.. packages contain what we need"
+    ]
+]
+
+]
+
+PackageLoader class extend [
+
+    dirPackages [
+        | container |
+
+        <category: '*Language-Kernel'>
+
+        "Check if there is already a container"
+        root do: [:each |
+            each class = Kernel.DirPackageContainer
+                ifTrue: [^each].
+        ].
+
+        container := Kernel.DirPackageContainer new.
+        root add: container.
+        ^ container.
+    ]
+
+    loadPackageFromFile: aFileName [
+        | package |
+        <category: '*Language-Kernel'>
+
+        "Make sure that root is initialized."
+        self refresh.
+
+        "Add the 'directory' to the packages"
+        package := Kernel.DirPackage file: aFileName.
+
+        self dirPackages add: package.
+
+        "And now file it in. Do not use >>fileIn as it will
+        attempt to load the package by name."
+        self fileInPackages: package prerequisites.
+        package primFileIn.
+    ]
+]
diff --git a/kernel/Makefile.frag b/kernel/Makefile.frag
index e61f2be..fb4b3d2 100644
--- a/kernel/Makefile.frag
+++ b/kernel/Makefile.frag
@@ -1,3 +1,3 @@
 $(srcdir)/kernel/stamp-classes: \
-kernel/Array.st kernel/CompildMeth.st kernel/LookupTable.st kernel/RunArray.st kernel/Iterable.st kernel/ArrayColl.st kernel/CompiledBlk.st kernel/Magnitude.st kernel/Semaphore.st kernel/DeferBinding.st kernel/Association.st kernel/HomedAssoc.st kernel/ContextPart.st kernel/MappedColl.st kernel/SeqCollect.st kernel/Autoload.st kernel/DLD.st kernel/Memory.st kernel/Set.st kernel/Bag.st kernel/Date.st kernel/Message.st kernel/MessageLookup.st kernel/SharedQueue.st kernel/Behavior.st kernel/Delay.st kernel/Metaclass.st kernel/SmallInt.st kernel/BlkClosure.st kernel/Continuation.st kernel/Generator.st kernel/Dictionary.st kernel/MethodDict.st kernel/SortCollect.st kernel/BlkContext.st kernel/DirMessage.st kernel/MethodInfo.st kernel/Stream.st kernel/Boolean.st kernel/Directory.st kernel/MthContext.st kernel/String.st kernel/UniString.st kernel/ExcHandling.st kernel/Namespace.st kernel/SymLink.st kernel/VFS.st kernel/VFSZip.st kernel/Builtins.st kernel/False.st kernel/Number.st kernel/Sy
 mbol.st kernel/ByteArray.st kernel/FilePath.st kernel/File.st kernel/SysDict.st kernel/ScaledDec.st kernel/FileSegment.st kernel/Object.st kernel/Time.st kernel/FileStream.st kernel/OrderColl.st kernel/CCallable.st kernel/CCallback.st kernel/CFuncs.st kernel/Float.st kernel/PkgLoader.st kernel/Transcript.st kernel/CObject.st kernel/Fraction.st kernel/Point.st kernel/True.st kernel/CStruct.st kernel/IdentDict.st kernel/PosStream.st kernel/UndefObject.st kernel/CType.st kernel/IdentitySet.st kernel/ProcSched.st kernel/ProcEnv.st kernel/ValueAdapt.st kernel/CharArray.st kernel/Integer.st kernel/Process.st kernel/CallinProcess.st kernel/WeakObjects.st kernel/Character.st kernel/UniChar.st kernel/Interval.st kernel/RWStream.st kernel/OtherArrays.st kernel/Class.st kernel/LargeInt.st kernel/Random.st kernel/WriteStream.st kernel/ClassDesc.st kernel/Link.st kernel/ReadStream.st kernel/ObjMemory.st kernel/Collection.st kernel/LinkedList.st kernel/Rectangle.st kernel/AnsiDates.st kernel/Comp
 ildCode.st kernel/LookupKey.st kernel/BindingDict.st kernel/AbstNamespc.st kernel/RootNamespc.st kernel/SysExcept.st kernel/DynVariable.st kernel/HashedColl.st kernel/FileDescr.st kernel/FloatD.st kernel/FloatE.st kernel/FloatQ.st kernel/URL.st kernel/VarBinding.st kernel/RecursionLock.st kernel/Getopt.st kernel/Regex.st kernel/StreamOps.st
+kernel/Array.st kernel/CompildMeth.st kernel/LookupTable.st kernel/RunArray.st kernel/Iterable.st kernel/ArrayColl.st kernel/CompiledBlk.st kernel/Magnitude.st kernel/Semaphore.st kernel/DeferBinding.st kernel/Association.st kernel/HomedAssoc.st kernel/ContextPart.st kernel/MappedColl.st kernel/SeqCollect.st kernel/Autoload.st kernel/DLD.st kernel/Memory.st kernel/Set.st kernel/Bag.st kernel/Date.st kernel/Message.st kernel/MessageLookup.st kernel/SharedQueue.st kernel/Behavior.st kernel/Delay.st kernel/Metaclass.st kernel/SmallInt.st kernel/BlkClosure.st kernel/Continuation.st kernel/Generator.st kernel/Dictionary.st kernel/MethodDict.st kernel/SortCollect.st kernel/BlkContext.st kernel/DirMessage.st kernel/MethodInfo.st kernel/Stream.st kernel/Boolean.st kernel/Directory.st kernel/MthContext.st kernel/String.st kernel/UniString.st kernel/ExcHandling.st kernel/Namespace.st kernel/SymLink.st kernel/VFS.st kernel/VFSZip.st kernel/Builtins.st kernel/False.st kernel/Number.st kernel/Sy
 mbol.st kernel/ByteArray.st kernel/FilePath.st kernel/File.st kernel/SysDict.st kernel/ScaledDec.st kernel/FileSegment.st kernel/Object.st kernel/Time.st kernel/FileStream.st kernel/OrderColl.st kernel/CCallable.st kernel/CCallback.st kernel/CFuncs.st kernel/Float.st kernel/PkgLoader.st kernel/DirPackage.st kernel/Transcript.st kernel/CObject.st kernel/Fraction.st kernel/Point.st kernel/True.st kernel/CStruct.st kernel/IdentDict.st kernel/PosStream.st kernel/UndefObject.st kernel/CType.st kernel/IdentitySet.st kernel/ProcSched.st kernel/ProcEnv.st kernel/ValueAdapt.st kernel/CharArray.st kernel/Integer.st kernel/Process.st kernel/CallinProcess.st kernel/WeakObjects.st kernel/Character.st kernel/UniChar.st kernel/Interval.st kernel/RWStream.st kernel/OtherArrays.st kernel/Class.st kernel/LargeInt.st kernel/Random.st kernel/WriteStream.st kernel/ClassDesc.st kernel/Link.st kernel/ReadStream.st kernel/ObjMemory.st kernel/Collection.st kernel/LinkedList.st kernel/Rectangle.st kernel/Ans
 iDates.st kernel/CompildCode.st kernel/LookupKey.st kernel/BindingDict.st kernel/AbstNamespc.st kernel/RootNamespc.st kernel/SysExcept.st kernel/DynVariable.st kernel/HashedColl.st kernel/FileDescr.st kernel/FloatD.st kernel/FloatE.st kernel/FloatQ.st kernel/URL.st kernel/VarBinding.st kernel/RecursionLock.st kernel/Getopt.st kernel/Regex.st kernel/StreamOps.st
  touch $(srcdir)/kernel/stamp-classes
diff --git a/kernel/PkgLoader.st b/kernel/PkgLoader.st
index b9748f2..53d9367 100644
--- a/kernel/PkgLoader.st
+++ b/kernel/PkgLoader.st
@@ -917,20 +917,12 @@ XML.'>
 
 Namespace current: Kernel [
 
-PackageInfo subclass: StarPackage [
+PackageInfo subclass: ExternalPackage [
     | file loadedPackage |
     
     <category: 'Language-Packaging'>
     <comment: nil>
 
-    StarPackage class >> file: file [
- <category: 'accessing'>
- ^(self new)
-    file: file;
-    name: (File stripPathFrom: (File stripExtensionFrom: file name));
-    yourself
-    ]
-
     fullPathOf: fileName [
  "Try appending 'self directory' and fileName to each of the directory
  in baseDirectories, and return the path to the first tried filename that
@@ -1079,6 +1071,24 @@ PackageInfo subclass: StarPackage [
     ]
 
     loadedPackage [
+        ^ self subclassResponsibility
+    ]
+]
+
+ExternalPackage subclass: StarPackage [
+
+    <category: 'Language-Packaging'>
+    <comment: 'I represent an external package in the form of a .star package'>
+
+    StarPackage class >> file: file [
+ <category: 'accessing'>
+ ^(self new)
+    file: file;
+    name: (File stripPathFrom: (File stripExtensionFrom: file name));
+    yourself
+    ]
+
+    loadedPackage [
  <category: 'accessing'>
  | package |
  loadedPackage isNil ifFalse: [^loadedPackage].
diff --git a/libgst/files.c b/libgst/files.c
index ec33933..a7156f9 100644
--- a/libgst/files.c
+++ b/libgst/files.c
@@ -288,6 +288,7 @@ static const char standard_files[] = {
   "StreamOps.st\0"
   "Regex.st\0"
   "PkgLoader.st\0"
+  "DirPackage.st\0"
   "Autoload.st\0"
 };
 
diff --git a/packages.xml b/packages.xml
index c6d0e8c..fc6a049 100644
--- a/packages.xml
+++ b/packages.xml
@@ -152,6 +152,7 @@
   <file>CFuncs.st</file>
   <file>Float.st</file>
   <file>PkgLoader.st</file>
+  <file>DirPackage.st</file>
   <file>Transcript.st</file>
   <file>CObject.st</file>
   <file>Fraction.st</file>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 06/15] stinst: Fix the sourcecode extraction in RBScanner>>#scanNumber

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

Fix two problems introduced by the RBNumberLiteralToken change.
The first one is to use >>#copyFrom:to: instead of re-positioning
the stream to fix an issue with the ConcatenatedStream and the
second is to pick the right stop for the token.

Code like '(Delay forSeconds: 3) wait' got re-formatted to
'(Delay forSeconds: 3)) wait'. The code that extracts the
sourcecode for the RBNumberLiteralToken should have operated on
the result of >>#previousStepPosition but instead the current
position of stream was used as an end.

Use self previousStepPosition to find the end of the number literal,
remove unused variables and remove the trimSeparators as we are now
using the right place to stop.

2013-02-17  Holger Hans Peter Freyther  <[hidden email]>

        * RBParser.st: Fix RBScanner>>#scanNumber.
        * RewriteTests.st: Add testcase for RBScanner>>#scanNumber.
        * package.xml: Add the new test to the testsuite.
---
 packages/stinst/parser/ChangeLog       |    6 ++++
 packages/stinst/parser/RBParser.st     |    9 ++---
 packages/stinst/parser/RewriteTests.st |   57 +++++++++++++++++++++++++++++++-
 packages/stinst/parser/package.xml     |    1 +
 4 files changed, 66 insertions(+), 7 deletions(-)

diff --git a/packages/stinst/parser/ChangeLog b/packages/stinst/parser/ChangeLog
index ed27e41..94dab52 100644
--- a/packages/stinst/parser/ChangeLog
+++ b/packages/stinst/parser/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-17  Holger Hans Peter Freyther  <[hidden email]>
+
+ * RBParser.st: Fix RBScanner>>#scanNumber.
+ * RewriteTests.st: Add testcase for RBScanner>>#scanNumber.
+ * package.xml: Add the new test to the testsuite.
+
 2013-02-10  Holger Hans Peter Freyther  <[hidden email]>
 
  * OldSyntaxExporter.st: Reformat the method node in
diff --git a/packages/stinst/parser/RBParser.st b/packages/stinst/parser/RBParser.st
index 6f2b1cb..7be57d6 100644
--- a/packages/stinst/parser/RBParser.st
+++ b/packages/stinst/parser/RBParser.st
@@ -1320,16 +1320,13 @@ Stream subclass: RBScanner [
     ]
 
     scanNumber [
-        | start stop val string |
+        | stop val string |
  <category: 'private-scanning'>
-        start := tokenStart.
         val := self scanNumberValue.
-        stop := stream position.
+        stop := self previousStepPosition.
 
         "Get the parsed source"
-        stream position: tokenStart - 1.
-        string := (stream next: stop - start + 1) trimSeparators.
-        stream position: stop.
+        string := stream copyFrom: tokenStart - 1 to: stop - 1.
 
  ^RBNumberLiteralToken
             value: val
diff --git a/packages/stinst/parser/RewriteTests.st b/packages/stinst/parser/RewriteTests.st
index 4c42cd8..d38b69b 100644
--- a/packages/stinst/parser/RewriteTests.st
+++ b/packages/stinst/parser/RewriteTests.st
@@ -7,7 +7,7 @@
 
 "======================================================================
 |
-| Copyright (C) 2007 Free Software Foundation, Inc.
+| Copyright (C) 2007,2013 Free Software Foundation, Inc.
 | Written by Stephen Compall.
 |
 | This file is part of the GNU Smalltalk class library.
@@ -278,6 +278,61 @@ TestCase subclass: TestFormat [
  res := RBFormatter new formatAll: (Array with: inp).
  self assert: res = '#(16r01 2r01 16rFF)'.
     ]
+
+    testParanthesis [
+        | inp |
+        inp := RBParser parseExpression: '(2r1)'.
+        self assert: inp formattedCode = '2r1'.
+    ]
+
+    testNumberLiteralFloatRewrite [
+        | inp |
+        inp := RBParser parseExpression: '2q'.
+        self
+            assert: inp value = 2.0;
+            assert: inp formattedCode = '2q'.
+
+        inp := RBParser parseExpression: '2d'.
+        self
+            assert: inp value = 2.0;
+            assert: inp formattedCode = '2d'.
+
+        inp := RBParser parseExpression: '2e'.
+        self
+            assert: inp value = 2.0;
+            assert: inp formattedCode = '2e'.
+
+        inp := RBParser parseExpression: '2q-'.
+        self
+            assert: inp value = 2.0;
+            assert: inp formattedCode = '2q-'.
+
+        inp := RBParser parseExpression: '20q-1'.
+        self
+            assert: inp value = 2.0;
+            assert: inp formattedCode = '20q-1'.
+    ]
+]
+
+TestCase subclass: TestScanner [
+    <comment: 'Test aspects of the RBScanner'>
+
+    testScanner [
+        | scanner num |
+        scanner := RBScanner on: '3' readStream.
+        num := scanner next.
+        self assert: num value = 3.
+    ]
+
+    testScannerConcatStream [
+        | scanner num |
+        "This is different to >>#testScanner by using a different kind of stream with
+        a different species."
+
+        scanner := RBScanner on: (Kernel.ConcatenatedStream with: '3' readStream).
+        num := scanner next.
+        self assert: num value = 3.
+    ]
 ]
 
 TestCase subclass: TestRewrite [
diff --git a/packages/stinst/parser/package.xml b/packages/stinst/parser/package.xml
index b54d14a..f14f6e0 100644
--- a/packages/stinst/parser/package.xml
+++ b/packages/stinst/parser/package.xml
@@ -30,6 +30,7 @@
    <sunit>STInST.Tests.TestStandardRewrites</sunit>
    <sunit>STInST.Tests.TestFormat</sunit>
    <sunit>STInST.Tests.TestRewrite</sunit>
+   <sunit>STInST.Tests.TestScanner</sunit>
    <sunit>STInST.Tests.TestDefaultPoolResolution</sunit>
    <sunit>STInST.Tests.TestClassicPoolResolution</sunit>
    <filein>RewriteTests.st</filein>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 07/15] stinst: Fix parsing of negated numbers with the new RBNumberLiteralToken

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

Negative numbers are not directly parsed in the RBScanner>>#scanNumber
but are made negative from within the RBParser>>#parseNegatedNumber. This
was done to help to differentiate a binary selector from the number. Add
a testcase for the formatting, make the number negative inside the number
literal token and prepend the $- to the source.

The start/stop of the token has been wrong before this commit and is still
wrong. This needs to be fixed in the future.
---
 packages/stinst/parser/ChangeLog       |    6 ++++++
 packages/stinst/parser/RBParser.st     |    2 +-
 packages/stinst/parser/RBToken.st      |    9 +++++++++
 packages/stinst/parser/RewriteTests.st |   17 +++++++++++++++++
 4 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/packages/stinst/parser/ChangeLog b/packages/stinst/parser/ChangeLog
index 94dab52..24bf131 100644
--- a/packages/stinst/parser/ChangeLog
+++ b/packages/stinst/parser/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-23  Holger Hans Peter Freyther  <[hidden email]>
+
+ * RBParser.st: Fix RBParser>>#parsedNegatedNumber.
+ * RBToken.st: Add RBNumberLiteralToken>>#makeNegative.
+ * RewriteTests.st: Add testcase for RBParser>>#parseNegatedNumber.
+
 2013-02-17  Holger Hans Peter Freyther  <[hidden email]>
 
  * RBParser.st: Fix RBScanner>>#scanNumber.
diff --git a/packages/stinst/parser/RBParser.st b/packages/stinst/parser/RBParser.st
index 7be57d6..1877e6b 100644
--- a/packages/stinst/parser/RBParser.st
+++ b/packages/stinst/parser/RBParser.st
@@ -544,7 +544,7 @@ Object subclass: RBParser [
     ^self parserError: 'Number expected' ].
  token value negative ifTrue: [
     ^self parserError: 'Positive number expected' ].
- token value: token value negated.
+ token makeNegative.
  self step.
  ^RBLiteralNode literalToken: token
     ]
diff --git a/packages/stinst/parser/RBToken.st b/packages/stinst/parser/RBToken.st
index e77252d..399a6db 100644
--- a/packages/stinst/parser/RBToken.st
+++ b/packages/stinst/parser/RBToken.st
@@ -297,6 +297,15 @@ RBLiteralToken subclass: RBNumberLiteralToken [
     source: aSource; yourself
     ]
 
+    makeNegative [
+        <category: 'creation'>
+        "Help with RBParser>>#parseNegatedNumber to make the value and the
+        code match. The token start and stop is still wrong."
+        self
+            value: value negated;
+            source: '-', self source.
+    ]
+
     source: aSource [
  <category: 'creation'>
  source := aSource
diff --git a/packages/stinst/parser/RewriteTests.st b/packages/stinst/parser/RewriteTests.st
index d38b69b..a7005f9 100644
--- a/packages/stinst/parser/RewriteTests.st
+++ b/packages/stinst/parser/RewriteTests.st
@@ -312,6 +312,23 @@ TestCase subclass: TestFormat [
             assert: inp value = 2.0;
             assert: inp formattedCode = '20q-1'.
     ]
+
+    testNegativeNumbers [
+        | inp |
+        inp := RBParser parseExpression: '-3'.
+        self assert: inp value = -3.
+        self assert: inp token source = '-3'.
+        self assert: inp formattedCode = '-3'.
+    ]
+
+    testNumberExpressionParsing [
+        | inp |
+        inp := RBParser parseExpression: '2-2'.
+        self
+            assert: inp receiver value = 2;
+            assert: inp selector = #-;
+            assert: inp arguments first value = 2.
+    ]
 ]
 
 TestCase subclass: TestScanner [
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 08/15] stinst: Avoid running into recursion in ProxyNamespace

Holger Freyther
In reply to this post by Holger Freyther
(STInST.STClassLoaderObjects.ProxyNamespace
        on: Smalltalk for: STInST.STClassLoader new) displayString

triggered a DNU and after fixing that it ended with an infinite
recursion as the value is self. Avoid the recursion but this is
probably not the right fix.

2013-03-31  Holger Hans Peter Freyther  <[hidden email]>

        * tests/stcompiler.ok: Update the test result.
        * tests/stcompiler.st: Add a testcase for ProxyNamespace>>#printOn:.

2013-03-31  Holger Hans Peter Freyther  <[hidden email]>

        * STLoaderObjs.st: Change ProxyNamespace>>#printOn to avoid
        recursion into self.
---
 ChangeLog                              |    5 +++++
 packages/stinst/parser/ChangeLog       |    5 +++++
 packages/stinst/parser/STLoaderObjs.st |   15 +++++++++------
 tests/stcompiler.ok                    |    5 +++++
 tests/stcompiler.st                    |    7 +++++++
 5 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8a3085d..277302a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-03-31  Holger Hans Peter Freyther  <[hidden email]>
+
+ * tests/stcompiler.ok: Update the test result.
+ * tests/stcompiler.st: Add a testcase for ProxyNamespace>>#printOn:.
+
 2013-03-24  Holger Hans Peter Freyther  <[hidden email]>
 
  * libgst/files.c: Add DirPackage.st to the bootstrap.
diff --git a/packages/stinst/parser/ChangeLog b/packages/stinst/parser/ChangeLog
index 24bf131..0bc8d23 100644
--- a/packages/stinst/parser/ChangeLog
+++ b/packages/stinst/parser/ChangeLog
@@ -1,3 +1,8 @@
+2013-03-31  Holger Hans Peter Freyther  <[hidden email]>
+
+ * STLoaderObjs.st: Change ProxyNamespace>>#printOn to avoid
+ recursion into self.
+
 2013-02-23  Holger Hans Peter Freyther  <[hidden email]>
 
  * RBParser.st: Fix RBParser>>#parsedNegatedNumber.
diff --git a/packages/stinst/parser/STLoaderObjs.st b/packages/stinst/parser/STLoaderObjs.st
index 195ceef..076b1ef 100644
--- a/packages/stinst/parser/STLoaderObjs.st
+++ b/packages/stinst/parser/STLoaderObjs.st
@@ -1507,13 +1507,16 @@ name
 
 printOn: aStream
     "Print a representation of the receiver on aStream"
-    aStream nextPutAll: self classNameString , '[', proxy name, '] (' ; nl.
+    aStream nextPutAll: self class storeString , '[', proxy name, '] (' ; nl.
     self myKeysAndValuesDo:
-     [ :key :value | aStream tab;
-   print: key;
-   nextPutAll: '->';
-   print: value;
-   nl ].
+        [ :key :value |
+            value == self ifFalse: [
+                aStream tab;
+                    print: key;
+                    nextPutAll: '->';
+                    print: value;
+                    nl ].
+        ].
     aStream nextPut: $)
 !
 
diff --git a/tests/stcompiler.ok b/tests/stcompiler.ok
index 4222e50..a0cebf4 100644
--- a/tests/stcompiler.ok
+++ b/tests/stcompiler.ok
@@ -52,6 +52,11 @@ Execution begins...
 returned value is 'an'
 
 Execution begins...
+STInST.STClassLoaderObjects.ProxyNamespace[Smalltalk] (
+)
+returned value is ProxyNamespace new: 32 "<0>"
+
+Execution begins...
 true
 true
 returned value is true
diff --git a/tests/stcompiler.st b/tests/stcompiler.st
index 36b48a7..5605a6e 100644
--- a/tests/stcompiler.st
+++ b/tests/stcompiler.st
@@ -118,6 +118,13 @@ Eval [
 ]
 
 Eval [
+    | proxy |
+    proxy := STInST.STClassLoaderObjects.ProxyNamespace
+                    on: Smalltalk for: STInST.STClassLoader new.
+    proxy printNl.
+]
+
+Eval [
     | classes bla |
     "Check class variable parsing.."
 
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 09/15] gtktools: Introduce a GTKTools package with helper classes

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

VisualGST has accumulated some GTK support that makes creating
widgets with GTK more easy. Begin to move these widgets from the
VisualGST package to the new GTKTools.

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * configure.ac: Introduce the GTKTools package

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * GtkAbstractConcreteWidget.st: Renamed from packages/visualgst/GtkAbstractConcreteWidget.st.
        * GtkConcreteWidget.st: Renamed from packages/visualgst/GtkConcreteWidget.st.
        * GtkEntryDialog.st: Renamed from packages/visualgst/GtkEntryDialog.st.
        * GtkMainWindow.st: Renamed from packages/visualgst/GtkMainWindow.st.
        * Tests/GtkConcreteWidgetTest.st: Renamed from packages/visualgst/Tests/GtkConcreteWidgetTest.st.
        * package.xml: Added.

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * Commands/CategoryMenus/AddCategoryCommand.st: Use GTKTools namespace.
        * Commands/CategoryMenus/RenameCategoryCommand.st: Use GTKTools namespace.
        * Commands/ClassMenus/AddClassCommand.st: Use GTKTools namespace.
        * Commands/ClassMenus/RenameClassCommand.st: Use GTKTools namespace.
        * Commands/NamespaceMenus/AddNamespaceCommand.st: Use GTKTools namespace.
        * Commands/NamespaceMenus/RenameNamespaceCommand.st: Use GTKTools namespace.
        * Debugger/GtkContextWidget.st: Use GTKTools namespace.
        * Debugger/GtkStackInspectorView.st: Use GTKTools namespace.
        * GtkEntryWidget.st: Use GTKTools namespace.
        * GtkHistoryWidget.st: Use GTKTools namespace.
        * GtkNotebookWidget.st: Use GTKTools namespace.
        * GtkPackageBuilderWidget.st: Use GTKTools namespace.
        * GtkScrollTreeWidget.st: Use GTKTools namespace.
        * GtkSidebarWidget.st: Use GTKTools namespace.
        * GtkVariableTrackerWidget.st: Use GTKTools namespace.
        * GtkVisualGSTTool.st: Use GTKTools namespace.
        * Image/GtkImageWidget.st: Use GTKTools namespace.
        * Implementors/GtkImageResultsWidget.st: Use GTKTools namespace.
        * Inspector/GtkInspectorBrowserWidget.st: Use GTKTools namespace.
        * Inspector/GtkInspectorWidget.st: Use GTKTools namespace.
        * SUnit/GtkSUnitResultWidget.st: Use GTKTools namespace.
        * StBrowser/GtkCategorizedClassWidget.st: Use GTKTools namespace.
        * StBrowser/GtkCategorizedNamespaceWidget.st: Use GTKTools namespace.
        * StBrowser/GtkCategoryWidget.st: Use GTKTools namespace.
        * StBrowser/GtkClassBrowserWidget.st: Use GTKTools namespace.
        * StBrowser/GtkClassHierarchyWidget.st: Use GTKTools namespace.
        * StBrowser/GtkMethodWidget.st: Use GTKTools namespace.
        * Tetris/Tetris.st: Use GTKTools namespace.
        * Text/GtkTextPluginWidget.st: Use GTKTools namespace.
        * Text/GtkTextWidget.st: Use GTKTools namespace.
        * package.xml: Use GTKTools namespace.
        * GtkAbstractConcreteWidget.st: Renamed to packages/gtktools/GtkAbstractConcreteWidget.st.
        * GtkConcreteWidget.st: Renamed to packages/gtktools/GtkConcreteWidget.st.
        * GtkEntryDialog.st: Renamed to packages/gtktools/GtkEntryDialog.st.
        * GtkMainWindow.st: Renamed to packages/gtktools/GtkMainWindow.st.
        * Tests/GtkConcreteWidgetTest.st: Renamed to packages/gtktools/Tests/GtkConcreteWidgetTest.st.
---
 .gitignore                                         |    1 +
 ChangeLog                                          |    4 +
 configure.ac                                       |    1 +
 packages/gtktools/ChangeLog                        |    8 +
 packages/gtktools/GtkAbstractConcreteWidget.st     |    5 +
 packages/gtktools/GtkConcreteWidget.st             |  122 +++++++++
 packages/gtktools/GtkEntryDialog.st                |   65 +++++
 packages/gtktools/GtkMainWindow.st                 |  276 ++++++++++++++++++++
 packages/gtktools/Makefile.frag                    |    5 +
 packages/gtktools/Tests/GtkConcreteWidgetTest.st   |   42 +++
 packages/gtktools/package.xml                      |   17 ++
 packages/visualgst/ChangeLog                       |   39 +++
 .../Commands/CategoryMenus/AddCategoryCommand.st   |    2 +-
 .../CategoryMenus/RenameCategoryCommand.st         |    2 +-
 .../Commands/ClassMenus/AddClassCommand.st         |    2 +-
 .../Commands/ClassMenus/RenameClassCommand.st      |    2 +-
 .../Commands/NamespaceMenus/AddNamespaceCommand.st |    2 +-
 .../NamespaceMenus/RenameNamespaceCommand.st       |    2 +-
 packages/visualgst/Debugger/GtkContextWidget.st    |    2 +-
 .../visualgst/Debugger/GtkStackInspectorView.st    |    2 +-
 packages/visualgst/GtkAbstractConcreteWidget.st    |    6 -
 packages/visualgst/GtkConcreteWidget.st            |  122 ---------
 packages/visualgst/GtkEntryDialog.st               |   66 -----
 packages/visualgst/GtkEntryWidget.st               |    2 +-
 packages/visualgst/GtkHistoryWidget.st             |    2 +-
 packages/visualgst/GtkMainWindow.st                |  276 --------------------
 packages/visualgst/GtkNotebookWidget.st            |    2 +-
 packages/visualgst/GtkPackageBuilderWidget.st      |    2 +-
 packages/visualgst/GtkScrollTreeWidget.st          |    2 +-
 packages/visualgst/GtkSidebarWidget.st             |    4 +-
 packages/visualgst/GtkVariableTrackerWidget.st     |    2 +-
 packages/visualgst/GtkVisualGSTTool.st             |    2 +-
 packages/visualgst/Image/GtkImageWidget.st         |    2 +-
 .../Implementors/GtkImageResultsWidget.st          |    2 +-
 .../Inspector/GtkInspectorBrowserWidget.st         |    2 +-
 packages/visualgst/Inspector/GtkInspectorWidget.st |    2 +-
 packages/visualgst/Makefile.frag                   |    2 +-
 packages/visualgst/SUnit/GtkSUnitResultWidget.st   |    2 +-
 .../StBrowser/GtkCategorizedClassWidget.st         |    2 +-
 .../StBrowser/GtkCategorizedNamespaceWidget.st     |    2 +-
 packages/visualgst/StBrowser/GtkCategoryWidget.st  |    2 +-
 .../visualgst/StBrowser/GtkClassBrowserWidget.st   |    2 +-
 .../visualgst/StBrowser/GtkClassHierarchyWidget.st |    2 +-
 packages/visualgst/StBrowser/GtkMethodWidget.st    |    2 +-
 packages/visualgst/Tests/GtkConcreteWidgetTest.st  |   43 ---
 packages/visualgst/Tetris/Tetris.st                |    2 +-
 packages/visualgst/Text/GtkTextPluginWidget.st     |    2 +-
 packages/visualgst/Text/GtkTextWidget.st           |    2 +-
 packages/visualgst/package.xml                     |   12 +-
 49 files changed, 618 insertions(+), 556 deletions(-)
 create mode 100644 packages/gtktools/ChangeLog
 create mode 100644 packages/gtktools/GtkAbstractConcreteWidget.st
 create mode 100644 packages/gtktools/GtkConcreteWidget.st
 create mode 100644 packages/gtktools/GtkEntryDialog.st
 create mode 100644 packages/gtktools/GtkMainWindow.st
 create mode 100644 packages/gtktools/Makefile.frag
 create mode 100644 packages/gtktools/Tests/GtkConcreteWidgetTest.st
 create mode 100644 packages/gtktools/package.xml
 delete mode 100644 packages/visualgst/GtkAbstractConcreteWidget.st
 delete mode 100644 packages/visualgst/GtkConcreteWidget.st
 delete mode 100644 packages/visualgst/GtkEntryDialog.st
 delete mode 100644 packages/visualgst/GtkMainWindow.st
 delete mode 100644 packages/visualgst/Tests/GtkConcreteWidgetTest.st

diff --git a/.gitignore b/.gitignore
index d0578bc..8e8fe08 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,6 +62,7 @@ packages/gtk/order
 packages/gtk/sizeof
 packages/gtk/sizeof.c
 packages/gtk/structs
+packages/gtktools/stamp-classes
 packages/i18n/ref-add.sed
 packages/i18n/ref-del.sed
 packages/net/gnutls-wrapper
diff --git a/ChangeLog b/ChangeLog
index 277302a..aa767b8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
+ * configure.ac: Introduce the GTKTools package
+
 2013-03-31  Holger Hans Peter Freyther  <[hidden email]>
 
  * tests/stcompiler.ok: Update the test result.
diff --git a/configure.ac b/configure.ac
index 798a6a8..5305622 100644
--- a/configure.ac
+++ b/configure.ac
@@ -587,6 +587,7 @@ GST_PACKAGE_ENABLE([SUnit], [sunit])
 GST_PACKAGE_ENABLE([Swazoo], [swazoo-httpd])
 GST_PACKAGE_ENABLE([Sockets], [sockets], [], [gst_cv_sockets])
 GST_PACKAGE_ENABLE([VFSAddOns], [vfs], [], [], [Makefile])
+GST_PACKAGE_ENABLE([GTKTools], [gtktools])
 GST_PACKAGE_ENABLE([VisualGST], [visualgst])
 GST_PACKAGE_ENABLE([XML-XMLNodeBuilder], [xml/builder])
 GST_PACKAGE_ENABLE([XML-DOM], [xml/dom])
diff --git a/packages/gtktools/ChangeLog b/packages/gtktools/ChangeLog
new file mode 100644
index 0000000..1299e7f
--- /dev/null
+++ b/packages/gtktools/ChangeLog
@@ -0,0 +1,8 @@
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
+ * GtkAbstractConcreteWidget.st: Renamed from packages/visualgst/GtkAbstractConcreteWidget.st.
+ * GtkConcreteWidget.st: Renamed from packages/visualgst/GtkConcreteWidget.st.
+ * GtkEntryDialog.st: Renamed from packages/visualgst/GtkEntryDialog.st.
+ * GtkMainWindow.st: Renamed from packages/visualgst/GtkMainWindow.st.
+ * Tests/GtkConcreteWidgetTest.st: Renamed from packages/visualgst/Tests/GtkConcreteWidgetTest.st.
+ * package.xml: Added.
diff --git a/packages/gtktools/GtkAbstractConcreteWidget.st b/packages/gtktools/GtkAbstractConcreteWidget.st
new file mode 100644
index 0000000..4354e1e
--- /dev/null
+++ b/packages/gtktools/GtkAbstractConcreteWidget.st
@@ -0,0 +1,5 @@
+Smalltalk.Object subclass: GtkAbstractConcreteWidget [
+
+    hideAll [
+    ]
+]
diff --git a/packages/gtktools/GtkConcreteWidget.st b/packages/gtktools/GtkConcreteWidget.st
new file mode 100644
index 0000000..4880921
--- /dev/null
+++ b/packages/gtktools/GtkConcreteWidget.st
@@ -0,0 +1,122 @@
+GtkAbstractConcreteWidget subclass: GtkConcreteWidget [
+    | child parentWindow popupMenu |
+
+    GtkConcreteWidget class >> parentWindow: aGtkWindow [
+ <category: 'instance creation'>
+
+        ^ self new
+            parentWindow: aGtkWindow;
+            initialize;
+            yourself
+    ]
+
+    GtkConcreteWidget class >> showAll [
+ <category: 'instance creation'>
+
+ ^ self new
+    initialize;
+    showAll;
+    yourself
+    ]
+
+    initialize [
+ <category: 'initialize'>
+
+    ]
+
+    parentWindow: aGtkWindow [
+        <category: 'accessing'>
+
+        parentWindow := aGtkWindow
+    ]
+
+    parentWindow [
+ <category: 'accessing'>
+
+ ^ parentWindow
+    ]
+
+    mainWidget [
+ <category: 'accessing'>
+
+ ^ child
+    ]
+
+    mainWidget: aGtkWidget [
+ <category: 'accessing'>
+
+ child ifNotNil: [ child hideAll  ].
+ child := aGtkWidget
+    ]
+
+    showAll [
+ <category: 'user interface'>
+
+ child showAll
+    ]
+
+    hideAll [
+ <category: 'user interface'>
+
+ child hideAll
+    ]
+
+    isVisible [
+ <category: 'testing'>
+
+ ^ child getVisible
+    ]
+
+    hasFocus [
+ <category: 'testing'>
+
+        | parent current |
+        parent := child.
+        [ (current := parent getFocusChild) notNil ] whileTrue: [
+            parent := current ].
+        ^ self parentWindow getFocus = parent
+
+    ]
+
+    focusedWidget [
+ <category: 'focus'>
+
+        self hasFocus ifTrue: [ ^ self ].
+        ^ nil
+    ]
+
+    onFocusPerform: aSymbol [
+        <category: 'widget'>
+
+        ^ self focusedWidget perform: aSymbol
+    ]
+
+    onPress: aGtkWidget event: aGdkEvent [
+        <category: 'button event'>
+
+        | menu aGdkButtonEvent |
+        aGdkButtonEvent := aGdkEvent castTo: GTK.GdkEventButton type.
+        aGdkButtonEvent button value = 3 ifFalse: [ ^ false ].
+        menu := popupMenu asPopupMenu.
+        menu attachToWidget: self treeView detacher: nil.
+        menu popup: nil parentMenuItem: nil func: nil data: nil button: 3 activateTime: aGdkButtonEvent time value.
+        menu showAll.
+        ^ true
+    ]
+
+    connectToWhenPopupMenu: aMenuBuilder [
+ <category: 'user interface'>
+
+ popupMenu := aMenuBuilder.
+ ^ self treeView connectSignal: 'button-press-event' to: self selector: #'onPress:event:'
+    ]
+
+    grabFocus [
+ <category: 'user interface'>
+
+    ]
+
+    close [
+ <category: 'user interface'>
+    ]
+]
diff --git a/packages/gtktools/GtkEntryDialog.st b/packages/gtktools/GtkEntryDialog.st
new file mode 100644
index 0000000..b45c779
--- /dev/null
+++ b/packages/gtktools/GtkEntryDialog.st
@@ -0,0 +1,65 @@
+Object subclass: GtkEntryDialog [
+    | dialog labelWidget entryWidget hasPressedOk buttons defaultButton |
+
+    GtkEntryDialog class >> title: aTitle text: aDescription [
+ <category: 'instance creation'>
+
+ ^ (self new)
+    title: aTitle text: aDescription;
+    yourself
+    ]
+
+    beOkCancel [
+        buttons := #( ('Ok' #gtkResponseOk) ('Cancel' #gtkResponseCancel))
+    ]
+
+    beYesNo [
+        buttons := #( ('Yes' #gtkResponseYes) ('No' #gtkResponseNo))
+    ]
+
+    title: aTitle text: aDescription [
+ <category: 'initialization'>
+
+ hasPressedOk := false.
+ dialog := GTK.GtkDialog newWithButtons: aTitle parent: nil flags: 0 varargs: {nil}.
+ self buildCentralWidget: aDescription on: dialog.
+ "dialog showModalOnAnswer: [ :dlg :res |
+ res = GTK.Gtk gtkResponseYes ifTrue: [ hasPressedOk := true ].
+ dlg destroy ]"
+    ]
+
+    hasPressedOk: aBlock [
+ <category: 'testing'>
+
+        dialog showModalOnAnswer: [ :dlg :res |
+                res = defaultButton ifTrue: [ aBlock value ].
+                dlg destroy ]
+    ]
+
+    result [
+ <category: 'accessing'>
+
+ ^ entryWidget getText
+    ]
+
+    buildCentralWidget: aString on: aGtkDialog [
+ <category: 'user interface'>
+
+ | hbox |
+        buttons isNil ifTrue: [ self beOkCancel ].
+        buttons do: [ :each |
+    aGtkDialog addButton: each first responseId: (GTK.Gtk perform: each second) ].
+
+        defaultButton := GTK.Gtk perform: buttons first second.
+        aGtkDialog setDefaultResponse: defaultButton.
+ hbox := GTK.GtkHBox new: true spacing: 0.
+ labelWidget := GTK.GtkLabel new: aString.
+ entryWidget := GTK.GtkEntry new.
+        entryWidget setActivatesDefault: true.
+ hbox
+    add: labelWidget;
+    add: entryWidget;
+    showAll.
+ aGtkDialog getVBox add: hbox
+    ]
+]
diff --git a/packages/gtktools/GtkMainWindow.st b/packages/gtktools/GtkMainWindow.st
new file mode 100644
index 0000000..6e59e2a
--- /dev/null
+++ b/packages/gtktools/GtkMainWindow.st
@@ -0,0 +1,276 @@
+Object subclass: GtkMainWindow [
+    | window container menuBar toolBar centralWidget statusBar accelGroup |
+
+    GtkMainWindow class >> open [
+ <category: 'user interface'>
+
+ ^ (self new)
+    initialize;
+    showAll;
+    postInitialize;
+    yourself
+    ]
+
+    GtkMainWindow class >> openSized: aPoint [
+ <category: 'user interface'>
+
+ ^ (self new)
+    initialize;
+    resize: aPoint;
+    showAll;
+    postInitialize;
+    yourself
+    ]
+
+    centralWidget [
+ <category: 'accessing'>
+
+ ^ centralWidget
+    ]
+
+    centralWidget: aGtkWidget [
+ <category: 'accessing'>
+
+ centralWidget := aGtkWidget
+    ]
+
+    container [
+ <category: 'accessing'>
+
+ ^ container ifNil: [ container := GTK.GtkVBox new: false spacing: 0 ]
+    ]
+
+    accelGroup [
+ <category: 'accessing'>
+
+ ^ accelGroup ifNil: [ accelGroup := GTK.GtkAccelGroup new ]
+    ]
+
+    menuBar [
+ <category: 'accessing'>
+
+ ^ menuBar ifNil: [ menuBar := GTK.GtkMenuBar new ]
+    ]
+
+    menuBar: aGtkMenuBar [
+ <category: 'accessing'>
+
+ menuBar := aGtkMenuBar
+    ]
+
+    statusBar [
+ <category: 'accessing'>
+
+ ^ statusBar ifNil: [ statusBar := GTK.GtkStatusbar new ]
+    ]
+
+    statusBar: aGtkStatusBar [
+ <category: 'accessing'>
+
+ statusBar := aGtkStatusBar
+    ]
+
+    title [
+ <category: 'accessing'>
+
+ ^ window title
+    ]
+
+    title: aString [
+ <category: 'accessing'>
+
+ window setTitle: aString
+    ]
+
+    toolBar [
+ <category: 'accessing'>
+
+ ^ toolBar ifNil: [ toolBar := GTK.GtkToolbar new ]
+    ]
+
+    toolBar: aGtkToolBar [
+ <category: 'accessing'>
+
+ toolBar := aGtkToolBar
+    ]
+
+    aboutGst [
+ <category: 'events'>
+
+ (GTK.GtkAboutDialog new)
+    setProgramName: 'GNU Smalltalk';
+    setVersion: (Smalltalk version =~ 'version (.*)' at: 1);
+    setLicense: 'GNU Smalltalk 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.
+
+GNU Smalltalk 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
+GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
+Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Please consult the GNU Smalltalk source code for additional permissions
+that are specific to this version of GNU Smalltalk.';
+    setWebsite: 'http://smalltalk.gnu.org/';
+    showModalDestroy
+    ]
+
+    close [
+ <category: 'events'>
+
+ window hideAll
+    ]
+
+    initialize [
+ <category: 'intialization'>
+
+ window := GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel.
+ window addAccelGroup: self accelGroup.
+        self
+            title: self windowTitle;
+            createMenus;
+            createToolbar;
+            createStatusBar;
+            centralWidget: self buildCentralWidget.
+    ]
+
+    buildCentralWidget [
+ <category: 'initialization'>
+        ^nil
+    ]
+
+    createStatusBar [
+        <category: 'user interface'>
+
+        self statusMessage: self windowTitle
+    ]
+
+    windowTitle [
+ <category: 'initialization'>
+        ^self class name
+    ]
+
+    createToolbar [
+ <category: 'initialization'>
+    ]
+
+    createMenus [
+ <category: 'initialization'>
+    ]
+
+    postInitialize [
+ <category: 'initialization'>
+
+        window
+            connectSignal: 'delete-event' to: self selector: #'onDelete:event:'
+    ]
+
+    onDelete: aGtkWidget event: aGdkEvent [
+ <category: 'events'>
+
+        window hideAll.
+        ^ true
+    ]
+
+    addMenuItem: aString [
+ <category: 'menubar'>
+
+ self menuBar append: (GTK.GtkMenuItem newWithLabel: aString)
+    ]
+
+    addMenuItem: aString withSubmenu: aGtkMenuItemArray [
+ <category: 'menubar'>
+
+ self menuBar append:
+    ((GTK.GtkMenuItem newWithLabel: aString)
+ setSubmenu: (self createNewMenuEntry: aGtkMenuItemArray))
+    ]
+
+    createMainMenu: anArray [
+ <category: 'menubar'>
+
+ anArray do: [ :each |
+    self addMenuItem: each first withSubmenu: (self perform: each second) ]
+    ]
+
+    createNewMenuEntry: anArray [
+        <category: 'menubar'>
+
+        | menu |
+        menu := (GTK.GtkMenu new)
+                    setAccelGroup: self accelGroup;
+                    yourself.
+        anArray do: [ :each |
+            menu append: each ].
+        ^ menu
+    ]
+
+    statusMessage: aString [
+ <category: 'statusbar'>
+
+ self statusBar
+    push: 0 text: aString
+    ]
+
+    appendSeparator [
+ <category: 'toolbar'>
+
+ self appendToolItem: GTK.GtkSeparatorToolItem new
+    ]
+
+    appendToolItem: aGtkToolItem [
+ <category: 'toolbar'>
+
+ self toolBar insert: aGtkToolItem pos: -1
+    ]
+
+    appendWidget: aGtkWidget [
+ <category: 'toolbar'>
+
+ self appendToolItem: ((GTK.GtkToolItem new) add: aGtkWidget)
+    ]
+
+    resize: aPoint [
+ <category: 'user interface'>
+
+ window resize: aPoint x height: aPoint y
+    ]
+
+    showAll [
+ {menuBar->false. toolBar->false. centralWidget->true. statusBar->false} do: [ :each |
+    each key ifNotNil: [ self container
+ packStart: each key expand: each value fill: true padding: 0 ] ].
+
+ window
+    add: self container;
+    showAll
+    ]
+
+    focusedWidget [
+        <category: 'focus'>
+
+        self subclassResponsibility
+    ]
+
+    onFocusPerform: aSymbol [
+        <category: 'widget'>
+
+        | widget |
+        widget := self focusedWidget.
+        widget isNil ifTrue: [ ^ self ].
+        ^ widget perform: aSymbol
+    ]
+
+    onFocusPerform: aSymbol with: anObject [
+        <category: 'widget'>
+
+        | widget |
+        widget := self focusedWidget.
+        widget isNil ifTrue: [ ^ self ].
+        ^ widget perform: aSymbol with: anObject
+    ]
+]
diff --git a/packages/gtktools/Makefile.frag b/packages/gtktools/Makefile.frag
new file mode 100644
index 0000000..e758dbc
--- /dev/null
+++ b/packages/gtktools/Makefile.frag
@@ -0,0 +1,5 @@
+GTKTools_FILES = \
+packages/gtktools/GtkMainWindow.st packages/gtktools/GtkAbstractConcreteWidget.st packages/gtktools/GtkConcreteWidget.st packages/gtktools/GtkEntryDialog.st packages/gtktools/Tests/GtkConcreteWidgetTest.st
+$(GTKTools_FILES):
+$(srcdir)/packages/gtktools/stamp-classes: $(GTKTools_FILES)
+ touch $(srcdir)/packages/gtktools/stamp-classes
diff --git a/packages/gtktools/Tests/GtkConcreteWidgetTest.st b/packages/gtktools/Tests/GtkConcreteWidgetTest.st
new file mode 100644
index 0000000..7fce2e4
--- /dev/null
+++ b/packages/gtktools/Tests/GtkConcreteWidgetTest.st
@@ -0,0 +1,42 @@
+TestCase subclass: GtkConcreteWidgetTest [
+
+    | show |
+
+    showAll [
+
+ show := true
+    ]
+
+    hideAll [
+
+ show := false
+    ]
+
+    getVisible [
+
+ ^ false
+    ]
+
+    testAbstractWidget [
+ <category: 'testing'>
+
+ self should: [ GtkAbstractConcreteWidget new hideAll. true ]
+    ]
+
+    testConcreteWidget [
+ <category: 'testing'>
+
+ | widget |
+ widget := GtkConcreteWidget parentWindow: #foo.
+ self assert: widget parentWindow = #foo.
+ widget mainWidget: self.
+ self assert: widget mainWidget = self.
+ widget showAll.
+ self assert: show.
+ widget hideAll.
+ self assert: show not.
+ self assert: widget isVisible not.
+ self should: [ widget grabFocus. true ].
+ self should: [ widget close. true].
+    ]
+]
diff --git a/packages/gtktools/package.xml b/packages/gtktools/package.xml
new file mode 100644
index 0000000..35c3414
--- /dev/null
+++ b/packages/gtktools/package.xml
@@ -0,0 +1,17 @@
+<package>
+  <name>GTKTools</name>
+  <namespace>GTKTools</namespace>
+  <prereq>GTK</prereq>
+
+  <filein>GtkMainWindow.st</filein>
+  <filein>GtkAbstractConcreteWidget.st</filein>
+  <filein>GtkConcreteWidget.st</filein>
+  <filein>GtkEntryDialog.st</filein>
+
+  <test>
+    <sunit>
+      GTKTools.GtkConcreteWidgetTest
+    </sunit>
+    <filein>Tests/GtkConcreteWidgetTest.st</filein>
+  </test>
+</package>
diff --git a/packages/visualgst/ChangeLog b/packages/visualgst/ChangeLog
index a12113b..a2d935f 100644
--- a/packages/visualgst/ChangeLog
+++ b/packages/visualgst/ChangeLog
@@ -1,3 +1,42 @@
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
+ * Commands/CategoryMenus/AddCategoryCommand.st: Use GTKTools namespace.
+ * Commands/CategoryMenus/RenameCategoryCommand.st: Use GTKTools namespace.
+ * Commands/ClassMenus/AddClassCommand.st: Use GTKTools namespace.
+ * Commands/ClassMenus/RenameClassCommand.st: Use GTKTools namespace.
+ * Commands/NamespaceMenus/AddNamespaceCommand.st: Use GTKTools namespace.
+ * Commands/NamespaceMenus/RenameNamespaceCommand.st: Use GTKTools namespace.
+ * Debugger/GtkContextWidget.st: Use GTKTools namespace.
+ * Debugger/GtkStackInspectorView.st: Use GTKTools namespace.
+ * GtkEntryWidget.st: Use GTKTools namespace.
+ * GtkHistoryWidget.st: Use GTKTools namespace.
+ * GtkNotebookWidget.st: Use GTKTools namespace.
+ * GtkPackageBuilderWidget.st: Use GTKTools namespace.
+ * GtkScrollTreeWidget.st: Use GTKTools namespace.
+ * GtkSidebarWidget.st: Use GTKTools namespace.
+ * GtkVariableTrackerWidget.st: Use GTKTools namespace.
+ * GtkVisualGSTTool.st: Use GTKTools namespace.
+ * Image/GtkImageWidget.st: Use GTKTools namespace.
+ * Implementors/GtkImageResultsWidget.st: Use GTKTools namespace.
+ * Inspector/GtkInspectorBrowserWidget.st: Use GTKTools namespace.
+ * Inspector/GtkInspectorWidget.st: Use GTKTools namespace.
+ * SUnit/GtkSUnitResultWidget.st: Use GTKTools namespace.
+ * StBrowser/GtkCategorizedClassWidget.st: Use GTKTools namespace.
+ * StBrowser/GtkCategorizedNamespaceWidget.st: Use GTKTools namespace.
+ * StBrowser/GtkCategoryWidget.st: Use GTKTools namespace.
+ * StBrowser/GtkClassBrowserWidget.st: Use GTKTools namespace.
+ * StBrowser/GtkClassHierarchyWidget.st: Use GTKTools namespace.
+ * StBrowser/GtkMethodWidget.st: Use GTKTools namespace.
+ * Tetris/Tetris.st: Use GTKTools namespace.
+ * Text/GtkTextPluginWidget.st: Use GTKTools namespace.
+ * Text/GtkTextWidget.st: Use GTKTools namespace.
+ * package.xml: Use GTKTools namespace.
+ * GtkAbstractConcreteWidget.st: Renamed to packages/gtktools/GtkAbstractConcreteWidget.st.
+ * GtkConcreteWidget.st: Renamed to packages/gtktools/GtkConcreteWidget.st.
+ * GtkEntryDialog.st: Renamed to packages/gtktools/GtkEntryDialog.st.
+ * GtkMainWindow.st: Renamed to packages/gtktools/GtkMainWindow.st.
+ * Tests/GtkConcreteWidgetTest.st: Renamed to packages/gtktools/Tests/GtkConcreteWidgetTest.st.
+
 2013-01-29  Holger Hans Peter Freyther  <[hidden email]>
 
  * Notification/Kernel/Metaclass.st: Remove usages of #isUntrusted
diff --git a/packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st b/packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st
index ef31ce2..8cbc060 100644
--- a/packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st
+++ b/packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st
@@ -9,7 +9,7 @@ ClassCommand subclass: AddCategoryCommand [
  <category: 'command'>
 
  | dlg |
-        dlg := GtkEntryDialog title: 'Add a category' text: 'Name of the category'.
+        dlg := GTKTools.GtkEntryDialog title: 'Add a category' text: 'Name of the category'.
         dlg hasPressedOk: [
             self addCategory: dlg result onWidget: target viewedCategoryWidget ]
 
diff --git a/packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st b/packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st
index fc27f7e..c577adf 100644
--- a/packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st
+++ b/packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st
@@ -9,7 +9,7 @@ CategoryCommand subclass: RenameCategoryCommand [
  <category: 'command'>
 
  | dlg |
-        dlg := GtkEntryDialog title: 'Rename a category' text: 'Name of the category'.
+        dlg := GTKTools.GtkEntryDialog title: 'Rename a category' text: 'Name of the category'.
         dlg hasPressedOk: [
             (RenameCategoryUndoCommand rename: target state category in: target state classOrMeta as: dlg result onModel: target viewedCategoryModel) push ]
     ]
diff --git a/packages/visualgst/Commands/ClassMenus/AddClassCommand.st b/packages/visualgst/Commands/ClassMenus/AddClassCommand.st
index 6d011a0..b000027 100644
--- a/packages/visualgst/Commands/ClassMenus/AddClassCommand.st
+++ b/packages/visualgst/Commands/ClassMenus/AddClassCommand.st
@@ -12,7 +12,7 @@ NamespaceCommand subclass: AddClassCommand [
  superclass := target state hasSelectedClass
             ifTrue: [ target state classOrMeta ]
             ifFalse: [ Object ].
-        dlg := GtkEntryDialog title: 'Add a class' text: 'Name of the new class'.
+        dlg := GTKTools.GtkEntryDialog title: 'Add a class' text: 'Name of the new class'.
         dlg hasPressedOk: [
             (AddClassUndoCommand
                 add: dlg result asSymbol
diff --git a/packages/visualgst/Commands/ClassMenus/RenameClassCommand.st b/packages/visualgst/Commands/ClassMenus/RenameClassCommand.st
index b80aa86..9ee81c3 100644
--- a/packages/visualgst/Commands/ClassMenus/RenameClassCommand.st
+++ b/packages/visualgst/Commands/ClassMenus/RenameClassCommand.st
@@ -9,7 +9,7 @@ ClassCommand subclass: RenameClassCommand [
  <category: 'command'>
 
  | dlg |
-        dlg := GtkEntryDialog title: 'Rename a class' text: 'Name of the class'.
+        dlg := GTKTools.GtkEntryDialog title: 'Rename a class' text: 'Name of the class'.
         dlg hasPressedOk: [
             (RenameClassUndoCommand rename: target state classOrMeta as: dlg result asSymbol) push ]
     ]
diff --git a/packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st b/packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st
index 8b87546..f899fb3 100644
--- a/packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st
+++ b/packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st
@@ -9,7 +9,7 @@ NamespaceCommand subclass: AddNamespaceCommand [
  <category: 'command'>
 
  | dlg |
-        dlg := GtkEntryDialog title: 'Add a namespace' text: 'Name of the new namespace'.
+        dlg := GTKTools.GtkEntryDialog title: 'Add a namespace' text: 'Name of the new namespace'.
         dlg hasPressedOk: [
             (AddNamespaceUndoCommand add: dlg result asSymbol to: target state namespace) push ]
     ]
diff --git a/packages/visualgst/Commands/NamespaceMenus/RenameNamespaceCommand.st b/packages/visualgst/Commands/NamespaceMenus/RenameNamespaceCommand.st
index b2b8e6c..d9daca4 100644
--- a/packages/visualgst/Commands/NamespaceMenus/RenameNamespaceCommand.st
+++ b/packages/visualgst/Commands/NamespaceMenus/RenameNamespaceCommand.st
@@ -9,7 +9,7 @@ NamespaceCommand subclass: RenameNamespaceCommand [
  <category: 'command'>
 
  | dlg |
-        dlg := GtkEntryDialog title: 'Rename a namespace' text: 'Name of the new namespace'.
+        dlg := GTKTools.GtkEntryDialog title: 'Rename a namespace' text: 'Name of the new namespace'.
         dlg hasPressedOk: [
             (RenameNamespaceUndoCommand rename: target state namespace as: dlg result asSymbol) push ]
     ]
diff --git a/packages/visualgst/Debugger/GtkContextWidget.st b/packages/visualgst/Debugger/GtkContextWidget.st
index db47adb..86bd2d9 100644
--- a/packages/visualgst/Debugger/GtkContextWidget.st
+++ b/packages/visualgst/Debugger/GtkContextWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkContextWidget [
+GTKTools.GtkConcreteWidget subclass: GtkContextWidget [
     | column contextTree model context contextList |
 
     GtkContextWidget class >> on: aContext [
diff --git a/packages/visualgst/Debugger/GtkStackInspectorView.st b/packages/visualgst/Debugger/GtkStackInspectorView.st
index dfb3436..45d2bdd 100644
--- a/packages/visualgst/Debugger/GtkStackInspectorView.st
+++ b/packages/visualgst/Debugger/GtkStackInspectorView.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkStackInspectorView [
+GTKTools.GtkConcreteWidget subclass: GtkStackInspectorView [
     | object variables |
 
     GtkStackInspectorView class >> openOn: aContext [
diff --git a/packages/visualgst/GtkAbstractConcreteWidget.st b/packages/visualgst/GtkAbstractConcreteWidget.st
deleted file mode 100644
index 47f5c26..0000000
--- a/packages/visualgst/GtkAbstractConcreteWidget.st
+++ /dev/null
@@ -1,6 +0,0 @@
-Smalltalk.Object subclass: GtkAbstractConcreteWidget [
-
-    hideAll [
-    ]
-]
-
diff --git a/packages/visualgst/GtkConcreteWidget.st b/packages/visualgst/GtkConcreteWidget.st
deleted file mode 100644
index 3c72f57..0000000
--- a/packages/visualgst/GtkConcreteWidget.st
+++ /dev/null
@@ -1,122 +0,0 @@
-GtkAbstractConcreteWidget subclass: GtkConcreteWidget [
-    | child parentWindow popupMenu |
-
-    GtkConcreteWidget class >> parentWindow: aGtkWindow [
- <category: 'instance creation'>
-
-        ^ self new
-            parentWindow: aGtkWindow;
-            initialize;
-            yourself
-    ]
-
-    GtkConcreteWidget class >> showAll [
- <category: 'instance creation'>
-
- ^ self new
-    initialize;
-    showAll;
-    yourself
-    ]
-
-    initialize [
- <category: 'initialize'>
-
-    ]
-
-    parentWindow: aGtkWindow [
-        <category: 'accessing'>
-
-        parentWindow := aGtkWindow
-    ]
-    
-    parentWindow [
- <category: 'accessing'>
-
- ^ parentWindow
-    ]
-
-    mainWidget [
- <category: 'accessing'>
-
- ^ child
-    ]
-
-    mainWidget: aGtkWidget [
- <category: 'accessing'>
-
- child ifNotNil: [ child hideAll  ].
- child := aGtkWidget
-    ]
-
-    showAll [
- <category: 'user interface'>
-
- child showAll
-    ]
-
-    hideAll [
- <category: 'user interface'>
-
- child hideAll
-    ]
-
-    isVisible [
- <category: 'testing'>
-
- ^ child getVisible
-    ]
-
-    hasFocus [
- <category: 'testing'>
-
-        | parent current |
-        parent := child.
-        [ (current := parent getFocusChild) notNil ] whileTrue: [
-            parent := current ].
-        ^ self parentWindow getFocus = parent
-
-    ]
-
-    focusedWidget [
- <category: 'focus'>
-
-        self hasFocus ifTrue: [ ^ self ].
-        ^ nil
-    ]
-
-    onFocusPerform: aSymbol [
-        <category: 'widget'>
-
-        ^ self focusedWidget perform: aSymbol
-    ]
-
-    onPress: aGtkWidget event: aGdkEvent [
-        <category: 'button event'>
-
-        | menu aGdkButtonEvent |
-        aGdkButtonEvent := aGdkEvent castTo: GTK.GdkEventButton type.
-        aGdkButtonEvent button value = 3 ifFalse: [ ^ false ].
-        menu := popupMenu asPopupMenu.
-        menu attachToWidget: self treeView detacher: nil.
-        menu popup: nil parentMenuItem: nil func: nil data: nil button: 3 activateTime: aGdkButtonEvent time value.
-        menu showAll.
-        ^ true
-    ]
-
-    connectToWhenPopupMenu: aMenuBuilder [
- <category: 'user interface'>
-
- popupMenu := aMenuBuilder.
- ^ self treeView connectSignal: 'button-press-event' to: self selector: #'onPress:event:'
-    ]
-
-    grabFocus [
- <category: 'user interface'>
-
-    ]
-
-    close [
- <category: 'user interface'>
-    ]
-]
diff --git a/packages/visualgst/GtkEntryDialog.st b/packages/visualgst/GtkEntryDialog.st
deleted file mode 100644
index 55827f5..0000000
--- a/packages/visualgst/GtkEntryDialog.st
+++ /dev/null
@@ -1,66 +0,0 @@
-Object subclass: GtkEntryDialog [
-    | dialog labelWidget entryWidget hasPressedOk buttons defaultButton |
-
-    GtkEntryDialog class >> title: aTitle text: aDescription [
- <category: 'instance creation'>
-
- ^ (self new)
-    title: aTitle text: aDescription;
-    yourself
-    ]
-
-    beOkCancel [
-        buttons := #( ('Ok' #gtkResponseOk) ('Cancel' #gtkResponseCancel))
-    ]
-
-    beYesNo [
-        buttons := #( ('Yes' #gtkResponseYes) ('No' #gtkResponseNo))
-    ]
-
-    title: aTitle text: aDescription [
- <category: 'initialization'>
-
- hasPressedOk := false.
- dialog := GTK.GtkDialog newWithButtons: aTitle parent: nil flags: 0 varargs: {nil}.
- self buildCentralWidget: aDescription on: dialog.
- "dialog showModalOnAnswer: [ :dlg :res |
- res = GTK.Gtk gtkResponseYes ifTrue: [ hasPressedOk := true ].
- dlg destroy ]"
-    ]
-
-    hasPressedOk: aBlock [
- <category: 'testing'>
-
-        dialog showModalOnAnswer: [ :dlg :res |
-                res = defaultButton ifTrue: [ aBlock value ].
-                dlg destroy ]
-    ]
-
-    result [
- <category: 'accessing'>
-
- ^ entryWidget getText
-    ]
-
-    buildCentralWidget: aString on: aGtkDialog [
- <category: 'user interface'>
-
- | hbox |
-        buttons isNil ifTrue: [ self beOkCancel ].
-        buttons do: [ :each |
-    aGtkDialog addButton: each first responseId: (GTK.Gtk perform: each second) ].
-
-        defaultButton := GTK.Gtk perform: buttons first second.
-        aGtkDialog setDefaultResponse: defaultButton.
- hbox := GTK.GtkHBox new: true spacing: 0.
- labelWidget := GTK.GtkLabel new: aString.
- entryWidget := GTK.GtkEntry new.
-        entryWidget setActivatesDefault: true.
- hbox
-    add: labelWidget;
-    add: entryWidget;
-    showAll.
- aGtkDialog getVBox add: hbox
-    ]
-]
-
diff --git a/packages/visualgst/GtkEntryWidget.st b/packages/visualgst/GtkEntryWidget.st
index d637d74..5ce6f17 100644
--- a/packages/visualgst/GtkEntryWidget.st
+++ b/packages/visualgst/GtkEntryWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkEntryWidget [
+GTKTools.GtkConcreteWidget subclass: GtkEntryWidget [
 
     GtkEntryWidget class >> labeled: aString [
  <category: 'instance creation'>
diff --git a/packages/visualgst/GtkHistoryWidget.st b/packages/visualgst/GtkHistoryWidget.st
index 3709bdb..571548b 100644
--- a/packages/visualgst/GtkHistoryWidget.st
+++ b/packages/visualgst/GtkHistoryWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkHistoryWidget [
+GTKTools.GtkConcreteWidget subclass: GtkHistoryWidget [
     | browser model widget |
 
     GtkHistoryWidget class >> new [
diff --git a/packages/visualgst/GtkMainWindow.st b/packages/visualgst/GtkMainWindow.st
deleted file mode 100644
index 4f15871..0000000
--- a/packages/visualgst/GtkMainWindow.st
+++ /dev/null
@@ -1,276 +0,0 @@
-Smalltalk.Object subclass: GtkMainWindow [
-    | window container menuBar toolBar centralWidget statusBar accelGroup |
-
-    GtkMainWindow class >> open [
- <category: 'user interface'>
-
- ^ (self new)
-    initialize;
-    showAll;
-    postInitialize;
-    yourself
-    ]
-
-    GtkMainWindow class >> openSized: aPoint [
- <category: 'user interface'>
-
- ^ (self new)
-    initialize;
-    resize: aPoint;
-    showAll;
-    postInitialize;
-    yourself
-    ]
-
-    centralWidget [
- <category: 'accessing'>
-
- ^ centralWidget
-    ]
-
-    centralWidget: aGtkWidget [
- <category: 'accessing'>
-
- centralWidget := aGtkWidget
-    ]
-
-    container [
- <category: 'accessing'>
-
- ^ container ifNil: [ container := GTK.GtkVBox new: false spacing: 0 ]
-    ]
-
-    accelGroup [
- <category: 'accessing'>
-
- ^ accelGroup ifNil: [ accelGroup := GTK.GtkAccelGroup new ]
-    ]
-
-    menuBar [
- <category: 'accessing'>
-
- ^ menuBar ifNil: [ menuBar := GTK.GtkMenuBar new ]
-    ]
-
-    menuBar: aGtkMenuBar [
- <category: 'accessing'>
-
- menuBar := aGtkMenuBar
-    ]
-
-    statusBar [
- <category: 'accessing'>
-
- ^ statusBar ifNil: [ statusBar := GTK.GtkStatusbar new ]
-    ]
-
-    statusBar: aGtkStatusBar [
- <category: 'accessing'>
-
- statusBar := aGtkStatusBar
-    ]
-
-    title [
- <category: 'accessing'>
-
- ^ window title
-    ]
-
-    title: aString [
- <category: 'accessing'>
-
- window setTitle: aString
-    ]
-
-    toolBar [
- <category: 'accessing'>
-
- ^ toolBar ifNil: [ toolBar := GTK.GtkToolbar new ]
-    ]
-
-    toolBar: aGtkToolBar [
- <category: 'accessing'>
-
- toolBar := aGtkToolBar
-    ]
-
-    aboutGst [
- <category: 'events'>
-
- (GTK.GtkAboutDialog new)
-    setProgramName: 'GNU Smalltalk';
-    setVersion: (Smalltalk version =~ 'version (.*)' at: 1);
-    setLicense: 'GNU Smalltalk 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.
-
-GNU Smalltalk 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
-GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
-Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-
-Please consult the GNU Smalltalk source code for additional permissions
-that are specific to this version of GNU Smalltalk.';
-    setWebsite: 'http://smalltalk.gnu.org/';
-    showModalDestroy
-    ]
-
-    close [
- <category: 'events'>
-
- window hideAll
-    ]
-
-    initialize [
- <category: 'intialization'>
-
- window := GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel.
- window addAccelGroup: self accelGroup.
-        self
-            title: self windowTitle;
-            createMenus;
-            createToolbar;
-            createStatusBar;
-            centralWidget: self buildCentralWidget.
-    ]
-
-    buildCentralWidget [
- <category: 'initialization'>
-        ^nil
-    ]
-
-    createStatusBar [
-        <category: 'user interface'>
-
-        self statusMessage: self windowTitle
-    ]
-
-    windowTitle [
- <category: 'initialization'>
-        ^self class name
-    ]
-
-    createToolbar [
- <category: 'initialization'>
-    ]
-
-    createMenus [
- <category: 'initialization'>
-    ]
-
-    postInitialize [
- <category: 'initialization'>
-
-        window
-            connectSignal: 'delete-event' to: self selector: #'onDelete:event:'
-    ]
-
-    onDelete: aGtkWidget event: aGdkEvent [
- <category: 'events'>
-
-        window hideAll.
-        ^ true
-    ]
-
-    addMenuItem: aString [
- <category: 'menubar'>
-
- self menuBar append: (GTK.GtkMenuItem newWithLabel: aString)
-    ]
-
-    addMenuItem: aString withSubmenu: aGtkMenuItemArray [
- <category: 'menubar'>
-
- self menuBar append:
-    ((GTK.GtkMenuItem newWithLabel: aString)
- setSubmenu: (self createNewMenuEntry: aGtkMenuItemArray))
-    ]
-
-    createMainMenu: anArray [
- <category: 'menubar'>
-
- anArray do: [ :each |
-    self addMenuItem: each first withSubmenu: (self perform: each second) ]
-    ]
-
-    createNewMenuEntry: anArray [
-        <category: 'menubar'>
-
-        | menu |
-        menu := (GTK.GtkMenu new)
-                    setAccelGroup: self accelGroup;
-                    yourself.
-        anArray do: [ :each |
-            menu append: each ].
-        ^ menu
-    ]
-
-    statusMessage: aString [
- <category: 'statusbar'>
-
- self statusBar
-    push: 0 text: aString
-    ]
-
-    appendSeparator [
- <category: 'toolbar'>
-
- self appendToolItem: GTK.GtkSeparatorToolItem new
-    ]
-
-    appendToolItem: aGtkToolItem [
- <category: 'toolbar'>
-
- self toolBar insert: aGtkToolItem pos: -1
-    ]
-
-    appendWidget: aGtkWidget [
- <category: 'toolbar'>
-
- self appendToolItem: ((GTK.GtkToolItem new) add: aGtkWidget)
-    ]
-
-    resize: aPoint [
- <category: 'user interface'>
-
- window resize: aPoint x height: aPoint y
-    ]
-
-    showAll [
- {menuBar->false. toolBar->false. centralWidget->true. statusBar->false} do: [ :each |
-    each key ifNotNil: [ self container
- packStart: each key expand: each value fill: true padding: 0 ] ].
-
- window
-    add: self container;
-    showAll
-    ]
-
-    focusedWidget [
-        <category: 'focus'>
-
-        self subclassResponsibility
-    ]
-
-    onFocusPerform: aSymbol [
-        <category: 'widget'>
-
-        | widget |
-        widget := self focusedWidget.
-        widget isNil ifTrue: [ ^ self ].
-        ^ widget perform: aSymbol
-    ]
-
-    onFocusPerform: aSymbol with: anObject [
-        <category: 'widget'>
-
-        | widget |
-        widget := self focusedWidget.
-        widget isNil ifTrue: [ ^ self ].
-        ^ widget perform: aSymbol with: anObject
-    ]
-]
diff --git a/packages/visualgst/GtkNotebookWidget.st b/packages/visualgst/GtkNotebookWidget.st
index d1a42bb..4916c65 100644
--- a/packages/visualgst/GtkNotebookWidget.st
+++ b/packages/visualgst/GtkNotebookWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkNotebookWidget [
+GTKTools.GtkConcreteWidget subclass: GtkNotebookWidget [
     | currentWidget selectMessage notebook pages labels |
 
     initialize [
diff --git a/packages/visualgst/GtkPackageBuilderWidget.st b/packages/visualgst/GtkPackageBuilderWidget.st
index 143c1f8..c06a308 100644
--- a/packages/visualgst/GtkPackageBuilderWidget.st
+++ b/packages/visualgst/GtkPackageBuilderWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkPackageBuilderWidget [
+GTKTools.GtkConcreteWidget subclass: GtkPackageBuilderWidget [
 
     | classList ressourceList packName namespace provide provideList test classCategory prereq prereqList entries |
 
diff --git a/packages/visualgst/GtkScrollTreeWidget.st b/packages/visualgst/GtkScrollTreeWidget.st
index 6099a9c..5adb618 100644
--- a/packages/visualgst/GtkScrollTreeWidget.st
+++ b/packages/visualgst/GtkScrollTreeWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkScrollTreeWidget [
+GTKTools.GtkConcreteWidget subclass: GtkScrollTreeWidget [
 
     GtkScrollTreeWidget class >> createListWithModel: anObject [
  <category: 'instance creation'>
diff --git a/packages/visualgst/GtkSidebarWidget.st b/packages/visualgst/GtkSidebarWidget.st
index c5f1eb7..3667e86 100644
--- a/packages/visualgst/GtkSidebarWidget.st
+++ b/packages/visualgst/GtkSidebarWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkSidebarWidget [
+GTKTools.GtkConcreteWidget subclass: GtkSidebarWidget [
     | activeWidget widgets widgetEvents paned |
 
     initialize [
@@ -10,7 +10,7 @@ GtkConcreteWidget subclass: GtkSidebarWidget [
  yourself.
  self mainWidget: paned.
  widgetEvents := Dictionary new.
- activeWidget := GtkAbstractConcreteWidget new.
+ activeWidget := GTKTools.GtkAbstractConcreteWidget new.
  widgets := OrderedCollection new
     ]
 
diff --git a/packages/visualgst/GtkVariableTrackerWidget.st b/packages/visualgst/GtkVariableTrackerWidget.st
index ff5b6b2..041162a 100644
--- a/packages/visualgst/GtkVariableTrackerWidget.st
+++ b/packages/visualgst/GtkVariableTrackerWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkVariableTrackerWidget [
+GTKTools.GtkConcreteWidget subclass: GtkVariableTrackerWidget [
     | model object widget |
 
     GtkVariableTrackerWidget class >> on: anObject [
diff --git a/packages/visualgst/GtkVisualGSTTool.st b/packages/visualgst/GtkVisualGSTTool.st
index 3859b39..a08f9a5 100644
--- a/packages/visualgst/GtkVisualGSTTool.st
+++ b/packages/visualgst/GtkVisualGSTTool.st
@@ -1,4 +1,4 @@
-GtkMainWindow subclass: GtkVisualGSTTool [
+GTKTools.GtkMainWindow subclass: GtkVisualGSTTool [
     <comment: 'I am the base for various tools of VisualGST.'>
 
     GtkVisualGSTTool class >> version [
diff --git a/packages/visualgst/Image/GtkImageWidget.st b/packages/visualgst/Image/GtkImageWidget.st
index e1e7865..6b5dc78 100644
--- a/packages/visualgst/Image/GtkImageWidget.st
+++ b/packages/visualgst/Image/GtkImageWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkImageWidget [
+GTKTools.GtkConcreteWidget subclass: GtkImageWidget [
 
     | imageTree image model searchEntry |
 
diff --git a/packages/visualgst/Implementors/GtkImageResultsWidget.st b/packages/visualgst/Implementors/GtkImageResultsWidget.st
index 9a7efbb..0901c53 100644
--- a/packages/visualgst/Implementors/GtkImageResultsWidget.st
+++ b/packages/visualgst/Implementors/GtkImageResultsWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkImageResultsWidget [
+GTKTools.GtkConcreteWidget subclass: GtkImageResultsWidget [
     | result resultTree model |
 
     initialize [
diff --git a/packages/visualgst/Inspector/GtkInspectorBrowserWidget.st b/packages/visualgst/Inspector/GtkInspectorBrowserWidget.st
index e4e3f3e..04a72ab 100644
--- a/packages/visualgst/Inspector/GtkInspectorBrowserWidget.st
+++ b/packages/visualgst/Inspector/GtkInspectorBrowserWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkInspectorBrowserWidget [
+GTKTools.GtkConcreteWidget subclass: GtkInspectorBrowserWidget [
     | checkCode namespaceWidget classHierarchyWidget classHierarchyUpdate iCategoryWidget iMethodWidget cCategoryWidget cMethodWidget codeWidget state |
 
     GtkInspectorBrowserWidget class >> title [
diff --git a/packages/visualgst/Inspector/GtkInspectorWidget.st b/packages/visualgst/Inspector/GtkInspectorWidget.st
index 99b6412..83a2364 100644
--- a/packages/visualgst/Inspector/GtkInspectorWidget.st
+++ b/packages/visualgst/Inspector/GtkInspectorWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkInspectorWidget [
+GTKTools.GtkConcreteWidget subclass: GtkInspectorWidget [
     | inspector model object inspectorTree workspaceWidget objectView stack |
 
     GtkInspectorWidget >> openOn: anObject [
diff --git a/packages/visualgst/Makefile.frag b/packages/visualgst/Makefile.frag
index a6686a4..a6487e6 100644
--- a/packages/visualgst/Makefile.frag
+++ b/packages/visualgst/Makefile.frag
@@ -1,5 +1,5 @@
 VisualGST_FILES = \
-packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkAbstractConcreteWidget.st packages/visualgst/GtkConcreteWidget.st packages/visualgst/GtkScrollT
 reeWidget.st packages/visualgst/GtkSimpleListWidget.st packages/visualgst/GtkEntryWidget.st packages/visualgst/GtkSidebarWidget.st packages/visualgst/GtkHSidebarWidget.st packages/visualgst/GtkVSidebarWidget.st packages/visualgst/Model/GtkColumnType.st packages/visualgst/Model/GtkColumnTextType.st packages/visualgst/Model/GtkColumnPixbufType.st packages/visualgst/Model/GtkColumnOOPType.st packages/visualgst/GtkListModel.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st packages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkMainWindow.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st
  packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/BrowserState.st packages/visualgst/State/NamespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/State/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWidget.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/GtkEntryDialog.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/v
 isualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/visualgst/Source/SourceFormatter.st packages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source/ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visu
 algst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/WorkspaceVariableTracker.st packages/visualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCommand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st packages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages
 /visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st packages/visualgst/Implementors/GtkImageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/GtkSenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debugger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/
 visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st packages/visualgst/Tetris/TetrisPieceZ.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnitResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Com
 mands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st packages/visualgst/Commands/WorkspaceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icon
 s/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png packages/visualgst/Icons/extension.png packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png packages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/GtkScrollTreeWidgetTest.st packages/visualgst/Tests/MenuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/GtkSimpleListWidgetTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTes
 t.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st packages/visualgst/Tests/GtkConcreteWidgetTest.st
+packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkScrollTreeWidget.st packages/visualgst/GtkSimpleListWidget.st packages/visualgst/GtkEntryWidget
 .st packages/visualgst/GtkSidebarWidget.st packages/visualgst/GtkHSidebarWidget.st packages/visualgst/GtkVSidebarWidget.st packages/visualgst/Model/GtkColumnType.st packages/visualgst/Model/GtkColumnTextType.st packages/visualgst/Model/GtkColumnPixbufType.st packages/visualgst/Model/GtkColumnOOPType.st packages/visualgst/GtkListModel.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st packages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/Browser
 State.st packages/visualgst/State/NamespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/State/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWidget.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/vis
 ualgst/Source/SourceFormatter.st packages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source/ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/Wor
 kspaceVariableTracker.st packages/visualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCommand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st packages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st p
 ackages/visualgst/Implementors/GtkImageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/GtkSenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debugger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st pa
 ckages/visualgst/Tetris/TetrisPieceZ.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnitResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st
  packages/visualgst/Commands/WorkspaceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png pack
 ages/visualgst/Icons/extension.png packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png packages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/GtkScrollTreeWidgetTest.st packages/visualgst/Tests/MenuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/GtkSimpleListWidgetTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
 $(VisualGST_FILES):
 $(srcdir)/packages/visualgst/stamp-classes: $(VisualGST_FILES)
  touch $(srcdir)/packages/visualgst/stamp-classes
diff --git a/packages/visualgst/SUnit/GtkSUnitResultWidget.st b/packages/visualgst/SUnit/GtkSUnitResultWidget.st
index 9a9122e..9357e49 100644
--- a/packages/visualgst/SUnit/GtkSUnitResultWidget.st
+++ b/packages/visualgst/SUnit/GtkSUnitResultWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkSUnitResult [
+GTKTools.GtkConcreteWidget subclass: GtkSUnitResult [
     | model resultTree results |
     initialize [
  <category: 'initialization'>
diff --git a/packages/visualgst/StBrowser/GtkCategorizedClassWidget.st b/packages/visualgst/StBrowser/GtkCategorizedClassWidget.st
index 270db8c..351532e 100644
--- a/packages/visualgst/StBrowser/GtkCategorizedClassWidget.st
+++ b/packages/visualgst/StBrowser/GtkCategorizedClassWidget.st
@@ -6,7 +6,7 @@ Smalltalk.String extend [
     ]
 ]
 
-GtkConcreteWidget subclass: GtkCategorizedClassWidget [
+GTKTools.GtkConcreteWidget subclass: GtkCategorizedClassWidget [
     | classesTree column model namespace category |
 
     GtkCategorizedClassWidget >> on: aNamespace [
diff --git a/packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st b/packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st
index 62f4ca0..5498756 100644
--- a/packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st
+++ b/packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkCategorizedNamespaceWidget [
+GTKTools.GtkConcreteWidget subclass: GtkCategorizedNamespaceWidget [
     | namespaceTree model |
 
     initialize [
diff --git a/packages/visualgst/StBrowser/GtkCategoryWidget.st b/packages/visualgst/StBrowser/GtkCategoryWidget.st
index 4f1288b..8a0196c 100644
--- a/packages/visualgst/StBrowser/GtkCategoryWidget.st
+++ b/packages/visualgst/StBrowser/GtkCategoryWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkCategoryWidget [
+GTKTools.GtkConcreteWidget subclass: GtkCategoryWidget [
     | categoryTree categories model class |
 
     GtkCategoryWidget >> on: aClass [
diff --git a/packages/visualgst/StBrowser/GtkClassBrowserWidget.st b/packages/visualgst/StBrowser/GtkClassBrowserWidget.st
index b491940..ba23e86 100644
--- a/packages/visualgst/StBrowser/GtkClassBrowserWidget.st
+++ b/packages/visualgst/StBrowser/GtkClassBrowserWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkClassBrowserWidget [
+GTKTools.GtkConcreteWidget subclass: GtkClassBrowserWidget [
     GtkClassBrowserWidget class [ | Undo | ]
 
     | launcher checkCode namespaceWidget classWidget classHierarchyWidget classHierarchyUpdate iCategoryWidget iMethodWidget cCategoryWidget cMethodWidget classAndInstanceSide codeWidget historyStack state |
diff --git a/packages/visualgst/StBrowser/GtkClassHierarchyWidget.st b/packages/visualgst/StBrowser/GtkClassHierarchyWidget.st
index 1b85188..0f947ef 100644
--- a/packages/visualgst/StBrowser/GtkClassHierarchyWidget.st
+++ b/packages/visualgst/StBrowser/GtkClassHierarchyWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkClassHierarchyWidget [
+GTKTools.GtkConcreteWidget subclass: GtkClassHierarchyWidget [
     | root dic classesTree model classOrMeta |
 
     GtkClassHierarchyWidget >> on: aClass [
diff --git a/packages/visualgst/StBrowser/GtkMethodWidget.st b/packages/visualgst/StBrowser/GtkMethodWidget.st
index f230175..3b4cd4f 100644
--- a/packages/visualgst/StBrowser/GtkMethodWidget.st
+++ b/packages/visualgst/StBrowser/GtkMethodWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkMethodWidget [
+GTKTools.GtkConcreteWidget subclass: GtkMethodWidget [
     | browser model methodTree class category |
 
     GtkMethodWidget >> on: aClass withCategory: aCategory [
diff --git a/packages/visualgst/Tests/GtkConcreteWidgetTest.st b/packages/visualgst/Tests/GtkConcreteWidgetTest.st
deleted file mode 100644
index 37fd7be..0000000
--- a/packages/visualgst/Tests/GtkConcreteWidgetTest.st
+++ /dev/null
@@ -1,43 +0,0 @@
-TestCase subclass: GtkConcreteWidgetTest [
-
-    | show |
-
-    showAll [
-
- show := true
-    ]
-
-    hideAll [
-
- show := false
-    ]
-
-    getVisible [
-
- ^ false
-    ]
-
-    testAbstractWidget [
- <category: 'testing'>
-
- self should: [ GtkAbstractConcreteWidget new hideAll. true ]
-    ]
-
-    testConcreteWidget [
- <category: 'testing'>
-
- | widget |
- widget := GtkConcreteWidget parentWindow: #foo.
- self assert: widget parentWindow = #foo.
- widget mainWidget: self.
- self assert: widget mainWidget = self.
- widget showAll.
- self assert: show.
- widget hideAll.
- self assert: show not.
- self assert: widget isVisible not.
- self should: [ widget grabFocus. true ].
- self should: [ widget close. true].
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/Tetris.st b/packages/visualgst/Tetris/Tetris.st
index 04856fb..c0c50de 100644
--- a/packages/visualgst/Tetris/Tetris.st
+++ b/packages/visualgst/Tetris/Tetris.st
@@ -27,7 +27,7 @@
 |
  ======================================================================"
 
-GtkMainWindow subclass: Tetris [
+GTKTools.GtkMainWindow subclass: Tetris [
     | canvasWidget canvas process pause delay grid movingBlocks level score level lines |
     
     <category: 'Graphics-Tetris'>
diff --git a/packages/visualgst/Text/GtkTextPluginWidget.st b/packages/visualgst/Text/GtkTextPluginWidget.st
index 88068c5..1dbb200 100644
--- a/packages/visualgst/Text/GtkTextPluginWidget.st
+++ b/packages/visualgst/Text/GtkTextPluginWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkTextPluginWidget [
+GTKTools.GtkConcreteWidget subclass: GtkTextPluginWidget [
     | textWidget closeButton |
 
     GtkTextPluginWidget class >> on: aTextWidget [
diff --git a/packages/visualgst/Text/GtkTextWidget.st b/packages/visualgst/Text/GtkTextWidget.st
index 4c08498..8559c04 100644
--- a/packages/visualgst/Text/GtkTextWidget.st
+++ b/packages/visualgst/Text/GtkTextWidget.st
@@ -1,4 +1,4 @@
-GtkConcreteWidget subclass: GtkTextWidget [
+GTKTools.GtkConcreteWidget subclass: GtkTextWidget [
     | findWidget replaceWidget textWidget userAction undoStack lastCommand cut textSaved lastSavedCommand |
 
     GtkTextWidget class >> newWithBuffer: aGtkTextBuffer [
diff --git a/packages/visualgst/package.xml b/packages/visualgst/package.xml
index 4267d1d..91a2415 100644
--- a/packages/visualgst/package.xml
+++ b/packages/visualgst/package.xml
@@ -3,6 +3,7 @@
   <namespace>VisualGST</namespace>
   <prereq>Parser</prereq>
   <prereq>GTK</prereq>
+  <prereq>GTKTools</prereq>
   <prereq>Cairo</prereq>
   <prereq>SUnit</prereq>
   <prereq>DebugTools</prereq>
@@ -26,7 +27,6 @@
     <filein>Tests/PragmaTest.st</filein>
     <filein>Tests/GtkCategorizedNamespaceWidgetTest.st</filein>
     <filein>Tests/GtkCategorizedClassWidgetTest.st</filein>
-    <filein>Tests/GtkConcreteWidgetTest.st</filein>
     <file>Tests/AddNamespaceUndoCommandTest.st</file>
     <file>Tests/GtkMethodWidgetTest.st</file>
     <file>Tests/CompiledMethodTest.st</file>
@@ -44,7 +44,6 @@
     <file>Tests/PragmaTest.st</file>
     <file>Tests/GtkCategorizedNamespaceWidgetTest.st</file>
     <file>Tests/GtkCategorizedClassWidgetTest.st</file>
-    <file>Tests/GtkConcreteWidgetTest.st</file>
     <sunit>
       VisualGST.AddNamespaceUndoCommandTest
       VisualGST.GtkMethodWidgetTest
@@ -65,7 +64,6 @@
       VisualGST.GtkCategorizedNamespaceWidgetTest
       VisualGST.GtkCategorizedClassWidgetTest
       VisualGST.#Test
-      VisualGST.GtkConcreteWidgetTest
     </sunit>
   </test>
   <filein>Extensions.st</filein>
@@ -159,8 +157,6 @@
   <filein>Category/ClassCategory.st</filein>
   <filein>Category/AbstractNamespace.st</filein>
   <filein>Category/Class.st</filein>
-  <filein>GtkAbstractConcreteWidget.st</filein>
-  <filein>GtkConcreteWidget.st</filein>
   <filein>GtkScrollTreeWidget.st</filein>
   <filein>GtkSimpleListWidget.st</filein>
   <filein>GtkEntryWidget.st</filein>
@@ -175,7 +171,6 @@
   <filein>GtkTreeModel.st</filein>
   <filein>Text/GtkTextWidget.st</filein>
   <filein>GtkPackageBuilderWidget.st</filein>
-  <filein>GtkMainWindow.st</filein>
   <filein>GtkVisualGSTTool.st</filein>
   <filein>GtkBrowsingTool.st</filein>
   <filein>GtkLauncher.st</filein>
@@ -204,7 +199,6 @@
   <filein>GtkHistoryWidget.st</filein>
   <filein>Inspector/GtkInspector.st</filein>
   <filein>StBrowser/GtkClassBrowserWidget.st</filein>
-  <filein>GtkEntryDialog.st</filein>
   <filein>HistoryStack.st</filein>
   <filein>Undo/UndoStack.st</filein>
   <filein>Undo/UndoCommand.st</filein>
@@ -385,8 +379,6 @@
   <file>Category/ClassCategory.st</file>
   <file>Category/AbstractNamespace.st</file>
   <file>Category/Class.st</file>
-  <file>GtkAbstractConcreteWidget.st</file>
-  <file>GtkConcreteWidget.st</file>
   <file>GtkScrollTreeWidget.st</file>
   <file>GtkSimpleListWidget.st</file>
   <file>GtkEntryWidget.st</file>
@@ -401,7 +393,6 @@
   <file>GtkTreeModel.st</file>
   <file>Text/GtkTextWidget.st</file>
   <file>GtkPackageBuilderWidget.st</file>
-  <file>GtkMainWindow.st</file>
   <file>GtkVisualGSTTool.st</file>
   <file>GtkBrowsingTool.st</file>
   <file>GtkLauncher.st</file>
@@ -430,7 +421,6 @@
   <file>GtkHistoryWidget.st</file>
   <file>Inspector/GtkInspector.st</file>
   <file>StBrowser/GtkClassBrowserWidget.st</file>
-  <file>GtkEntryDialog.st</file>
   <file>HistoryStack.st</file>
   <file>Undo/UndoStack.st</file>
   <file>Undo/UndoCommand.st</file>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 10/15] gtktools: Move GtkListModel from VisualGST to GTKTools

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * GtkListModel.st: Renamed from packages/visualgst/GtkListModel.st.
        * package.xml: Add GtkListModel.

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * Debugger/GtkContextWidget.st: Use GTKTools namespace.
        * GtkHistoryWidget.st: Use GTKTools namespace.
        * GtkSimpleListWidget.st: Use GTKTools namespace.
        * GtkVariableTrackerWidget.st: Use GTKTools namespace.
        * Image/GtkImageWidget.st: Use GTKTools namespace.
        * Implementors/GtkImageResultsWidget.st: Use GTKTools namespace.
        * Inspector/GtkInspectorWidget.st: Use GTKTools namespace.
        * StBrowser/GtkCategoryWidget.st: Use GTKTools namespace.
        * StBrowser/GtkMethodWidget.st: Use GTKTools namespace.
        * package.xml: Remove moved files.
        * GtkListModel.st: Renamed to packages/gtktools/GtkListModel.st.
---
 packages/gtktools/ChangeLog                        |    5 +
 packages/gtktools/GtkListModel.st                  |   97 +++++++++++++++++++
 packages/gtktools/Makefile.frag                    |    2 +-
 packages/gtktools/package.xml                      |    1 +
 packages/visualgst/ChangeLog                       |   14 +++
 packages/visualgst/Debugger/GtkContextWidget.st    |    2 +-
 packages/visualgst/GtkHistoryWidget.st             |    2 +-
 packages/visualgst/GtkListModel.st                 |   98 --------------------
 packages/visualgst/GtkSimpleListWidget.st          |    2 +-
 packages/visualgst/GtkVariableTrackerWidget.st     |    2 +-
 packages/visualgst/Image/GtkImageWidget.st         |    2 +-
 .../Implementors/GtkImageResultsWidget.st          |    2 +-
 packages/visualgst/Inspector/GtkInspectorWidget.st |    2 +-
 packages/visualgst/Makefile.frag                   |    2 +-
 packages/visualgst/StBrowser/GtkCategoryWidget.st  |    2 +-
 packages/visualgst/StBrowser/GtkMethodWidget.st    |    2 +-
 packages/visualgst/package.xml                     |    2 -
 17 files changed, 128 insertions(+), 111 deletions(-)
 create mode 100644 packages/gtktools/GtkListModel.st
 delete mode 100644 packages/visualgst/GtkListModel.st

diff --git a/packages/gtktools/ChangeLog b/packages/gtktools/ChangeLog
index 1299e7f..8cb59f2 100644
--- a/packages/gtktools/ChangeLog
+++ b/packages/gtktools/ChangeLog
@@ -1,5 +1,10 @@
 2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
 
+ * GtkListModel.st: Renamed from packages/visualgst/GtkListModel.st.
+ * package.xml: Add GtkListModel.
+
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
  * GtkAbstractConcreteWidget.st: Renamed from packages/visualgst/GtkAbstractConcreteWidget.st.
  * GtkConcreteWidget.st: Renamed from packages/visualgst/GtkConcreteWidget.st.
  * GtkEntryDialog.st: Renamed from packages/visualgst/GtkEntryDialog.st.
diff --git a/packages/gtktools/GtkListModel.st b/packages/gtktools/GtkListModel.st
new file mode 100644
index 0000000..ecc7fc4
--- /dev/null
+++ b/packages/gtktools/GtkListModel.st
@@ -0,0 +1,97 @@
+Object subclass: GtkListModel [
+
+    GtkListModel class >> on: aGtkListStore [
+ <category: 'instance creation'>
+
+ ^ super new
+    initialize;
+    gtkModel: aGtkListStore;
+    yourself
+    ]
+
+    | contentsBlock item model |
+
+    initialize [
+ <category: 'initialization'>
+
+    ]
+
+    gtkModel: aGtkListStore [
+ <category: 'accessing'>
+
+ model := aGtkListStore
+    ]
+
+    item: anObject [
+ <category: 'accessing'>
+
+ item := anObject
+    ]
+
+    item [
+ <category: 'accessing'>
+
+ ^ item
+    ]
+
+    contentsBlock: aBlock [
+ <category: 'accessing'>
+
+ contentsBlock := aBlock
+    ]
+
+    contentsBlock [
+ <category: 'accessing'>
+
+ ^ contentsBlock
+    ]
+
+    append: anItem [
+ <category: 'model'>
+
+ model appendItem: ((self contentsBlock value: anItem) copyWith: anItem)
+    ]
+
+    remove: anObject [
+ <category: 'model'>
+
+ | iter |
+ (iter := self findIter: anObject) ifNil: [ self error: 'item not found' ].
+ model remove: iter
+    ]
+
+    clear [
+ <category: 'model'>
+
+ model clear
+    ]
+
+    refresh [
+ <category: 'model'>
+
+ self clear.
+ self item ifNil: [ ^ self ].
+ self item do: [ :each | self append: each ]
+    ]
+
+    hasItem: anObject [
+        <category: 'item selection'>
+
+        self findIter: anObject ifAbsent: [ ^ false ].
+        ^ true
+    ]
+
+    findIter: anObject ifAbsent: aBlock [
+ <category: 'item selection'>
+
+ model do: [ :elem :iter |
+    elem last = anObject ifTrue: [ ^ iter ] ].
+ aBlock value
+    ]
+
+    findIter: anObject [
+ <category: 'item selection'>
+
+ ^ self findIter: anObject ifAbsent: [ self error: 'Item not found' ]
+    ]
+]
diff --git a/packages/gtktools/Makefile.frag b/packages/gtktools/Makefile.frag
index e758dbc..85d55ca 100644
--- a/packages/gtktools/Makefile.frag
+++ b/packages/gtktools/Makefile.frag
@@ -1,5 +1,5 @@
 GTKTools_FILES = \
-packages/gtktools/GtkMainWindow.st packages/gtktools/GtkAbstractConcreteWidget.st packages/gtktools/GtkConcreteWidget.st packages/gtktools/GtkEntryDialog.st packages/gtktools/Tests/GtkConcreteWidgetTest.st
+packages/gtktools/GtkMainWindow.st packages/gtktools/GtkAbstractConcreteWidget.st packages/gtktools/GtkConcreteWidget.st packages/gtktools/GtkEntryDialog.st packages/gtktools/GtkListModel.st packages/gtktools/Tests/GtkConcreteWidgetTest.st
 $(GTKTools_FILES):
 $(srcdir)/packages/gtktools/stamp-classes: $(GTKTools_FILES)
  touch $(srcdir)/packages/gtktools/stamp-classes
diff --git a/packages/gtktools/package.xml b/packages/gtktools/package.xml
index 35c3414..eddaf13 100644
--- a/packages/gtktools/package.xml
+++ b/packages/gtktools/package.xml
@@ -7,6 +7,7 @@
   <filein>GtkAbstractConcreteWidget.st</filein>
   <filein>GtkConcreteWidget.st</filein>
   <filein>GtkEntryDialog.st</filein>
+  <filein>GtkListModel.st</filein>
 
   <test>
     <sunit>
diff --git a/packages/visualgst/ChangeLog b/packages/visualgst/ChangeLog
index a2d935f..5b6ab83 100644
--- a/packages/visualgst/ChangeLog
+++ b/packages/visualgst/ChangeLog
@@ -1,5 +1,19 @@
 2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
 
+ * Debugger/GtkContextWidget.st: Use GTKTools namespace.
+ * GtkHistoryWidget.st: Use GTKTools namespace.
+ * GtkSimpleListWidget.st: Use GTKTools namespace.
+ * GtkVariableTrackerWidget.st: Use GTKTools namespace.
+ * Image/GtkImageWidget.st: Use GTKTools namespace.
+ * Implementors/GtkImageResultsWidget.st: Use GTKTools namespace.
+ * Inspector/GtkInspectorWidget.st: Use GTKTools namespace.
+ * StBrowser/GtkCategoryWidget.st: Use GTKTools namespace.
+ * StBrowser/GtkMethodWidget.st: Use GTKTools namespace.
+ * package.xml: Remove moved files.
+ * GtkListModel.st: Renamed to packages/gtktools/GtkListModel.st.
+
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
  * Commands/CategoryMenus/AddCategoryCommand.st: Use GTKTools namespace.
  * Commands/CategoryMenus/RenameCategoryCommand.st: Use GTKTools namespace.
  * Commands/ClassMenus/AddClassCommand.st: Use GTKTools namespace.
diff --git a/packages/visualgst/Debugger/GtkContextWidget.st b/packages/visualgst/Debugger/GtkContextWidget.st
index 86bd2d9..4af9bb6 100644
--- a/packages/visualgst/Debugger/GtkContextWidget.st
+++ b/packages/visualgst/Debugger/GtkContextWidget.st
@@ -43,7 +43,7 @@ GTKTools.GtkConcreteWidget subclass: GtkContextWidget [
         contextTree := GtkScrollTreeWidget createListWithModel: {{GtkColumnTextType title: 'Contexts'}}.
         contextTree connectToWhenPopupMenu: (ContextMenus on: self).
         contextTree treeView getSelection setMode: GTK.Gtk gtkSelectionBrowse.
-        (model := GtkListModel on: contextTree treeView getModel)
+        (model := GTKTools.GtkListModel on: contextTree treeView getModel)
                                         contentsBlock: [ :each | {each printString} ].
         ^ contextTree mainWidget
     ]
diff --git a/packages/visualgst/GtkHistoryWidget.st b/packages/visualgst/GtkHistoryWidget.st
index 571548b..f0736ae 100644
--- a/packages/visualgst/GtkHistoryWidget.st
+++ b/packages/visualgst/GtkHistoryWidget.st
@@ -29,7 +29,7 @@ GTKTools.GtkConcreteWidget subclass: GtkHistoryWidget [
                             yourself.
         widget getSelection setMode: GTK.Gtk gtkSelectionBrowse.
         widget getSelection connectSignal: 'changed' to: self selector: #onSelectionChanged.
-        (model := GtkListModel on: widget getModel)
+        (model := GTKTools.GtkListModel on: widget getModel)
                                         contentsBlock: [ :each | {each name displayString} ].
         ^ GTK.GtkScrolledWindow withChild: widget
     ]
diff --git a/packages/visualgst/GtkListModel.st b/packages/visualgst/GtkListModel.st
deleted file mode 100644
index 32ac085..0000000
--- a/packages/visualgst/GtkListModel.st
+++ /dev/null
@@ -1,98 +0,0 @@
-Object subclass: GtkListModel [
-
-    GtkListModel class >> on: aGtkListStore [
- <category: 'instance creation'>
-
- ^ super new
-    initialize;
-    gtkModel: aGtkListStore;
-    yourself
-    ]
-
-    | contentsBlock item model |
-
-    initialize [
- <category: 'initialization'>
-
-    ]
-
-    gtkModel: aGtkListStore [
- <category: 'accessing'>
-
- model := aGtkListStore
-    ]
-
-    item: anObject [
- <category: 'accessing'>
-
- item := anObject
-    ]
-
-    item [
- <category: 'accessing'>
-
- ^ item
-    ]
-
-    contentsBlock: aBlock [
- <category: 'accessing'>
-
- contentsBlock := aBlock
-    ]
-
-    contentsBlock [
- <category: 'accessing'>
-
- ^ contentsBlock
-    ]
-
-    append: anItem [
- <category: 'model'>
-
- model appendItem: ((self contentsBlock value: anItem) copyWith: anItem)
-    ]
-
-    remove: anObject [
- <category: 'model'>
-
- | iter |
- (iter := self findIter: anObject) ifNil: [ self error: 'item not found' ].
- model remove: iter
-    ]
-
-    clear [
- <category: 'model'>
-
- model clear
-    ]
-
-    refresh [
- <category: 'model'>
-
- self clear.
- self item ifNil: [ ^ self ].
- self item do: [ :each | self append: each ]
-    ]
-
-    hasItem: anObject [
-        <category: 'item selection'>
-
-        self findIter: anObject ifAbsent: [ ^ false ].
-        ^ true
-    ]
-
-    findIter: anObject ifAbsent: aBlock [
- <category: 'item selection'>
-
- model do: [ :elem :iter |
-    elem last = anObject ifTrue: [ ^ iter ] ].
- aBlock value
-    ]
-
-    findIter: anObject [
- <category: 'item selection'>
-
- ^ self findIter: anObject ifAbsent: [ self error: 'Item not found' ]
-    ]
-]
-
diff --git a/packages/visualgst/GtkSimpleListWidget.st b/packages/visualgst/GtkSimpleListWidget.st
index 6c1f9b9..fba980e 100644
--- a/packages/visualgst/GtkSimpleListWidget.st
+++ b/packages/visualgst/GtkSimpleListWidget.st
@@ -10,7 +10,7 @@ GtkScrollTreeWidget subclass: GtkSimpleListWidget [
         <category: 'user interface'>
 
         self treeView getSelection setMode: GTK.Gtk gtkSelectionBrowse.
-        (GtkListModel on: self treeView getModel)
+        (GTKTools.GtkListModel on: self treeView getModel)
                                         contentsBlock: [ :each | {each displayString} ]
     ]
 ]
diff --git a/packages/visualgst/GtkVariableTrackerWidget.st b/packages/visualgst/GtkVariableTrackerWidget.st
index 041162a..86d0446 100644
--- a/packages/visualgst/GtkVariableTrackerWidget.st
+++ b/packages/visualgst/GtkVariableTrackerWidget.st
@@ -29,7 +29,7 @@ GTKTools.GtkConcreteWidget subclass: GtkVariableTrackerWidget [
         widget := GtkScrollTreeWidget createListWithModel: {{GtkColumnTextType title: 'Variable'}. {GtkColumnTextType title: 'Value'}}.
         widget connectToWhenPopupMenu: (WorkspaceVariableMenus on: self).
         widget treeView getSelection setMode: GTK.Gtk gtkSelectionBrowse.
-        (model := GtkListModel on: widget treeView getModel)
+        (model := GTKTools.GtkListModel on: widget treeView getModel)
                                         contentsBlock: [ :each | {each asString. (object instVarNamed: each) displayString} ].
         ^ widget mainWidget
     ]
diff --git a/packages/visualgst/Image/GtkImageWidget.st b/packages/visualgst/Image/GtkImageWidget.st
index 6b5dc78..95e06dd 100644
--- a/packages/visualgst/Image/GtkImageWidget.st
+++ b/packages/visualgst/Image/GtkImageWidget.st
@@ -35,7 +35,7 @@ GTKTools.GtkConcreteWidget subclass: GtkImageWidget [
 
         imageTree := (GTK.GtkTreeView createListWithModel: {{GtkColumnTextType title: 'Methods and Classes'}}).
         imageTree setSearchEntry: searchEntry.
-        [ (model := GtkListModel on: imageTree getModel)
+        [ (model := GTKTools.GtkListModel on: imageTree getModel)
  item: (image := GtkImage new);
                                         contentsBlock: [ :each | {each displayString} ];
  refresh ] fork.
diff --git a/packages/visualgst/Implementors/GtkImageResultsWidget.st b/packages/visualgst/Implementors/GtkImageResultsWidget.st
index 0901c53..457c31c 100644
--- a/packages/visualgst/Implementors/GtkImageResultsWidget.st
+++ b/packages/visualgst/Implementors/GtkImageResultsWidget.st
@@ -12,7 +12,7 @@ GTKTools.GtkConcreteWidget subclass: GtkImageResultsWidget [
 
         resultTree := GTK.GtkTreeView createListWithModel: {{GtkColumnTextType title: 'Methods and Classes'}}.
         resultTree getSelection setMode: GTK.Gtk gtkSelectionBrowse.
-        (model := GtkListModel on: resultTree getModel)
+        (model := GTKTools.GtkListModel on: resultTree getModel)
                                         contentsBlock: [ :each | {each asString} ].
         ^ GTK.GtkScrolledWindow withChild: resultTree
     ]
diff --git a/packages/visualgst/Inspector/GtkInspectorWidget.st b/packages/visualgst/Inspector/GtkInspectorWidget.st
index 83a2364..833504b 100644
--- a/packages/visualgst/Inspector/GtkInspectorWidget.st
+++ b/packages/visualgst/Inspector/GtkInspectorWidget.st
@@ -53,7 +53,7 @@ GTKTools.GtkConcreteWidget subclass: GtkInspectorWidget [
 
         inspectorTree := GtkScrollTreeWidget createListWithModel: {{GtkColumnTextType title: 'Variables'}}.
         inspectorTree connectToWhenPopupMenu: (InspectorMenus on: self).
-        (model := GtkListModel on: inspectorTree treeView getModel)
+        (model := GTKTools.GtkListModel on: inspectorTree treeView getModel)
                                         contentsBlock: [ :each | {each displayString} ].
         ^ inspectorTree mainWidget
     ]
diff --git a/packages/visualgst/Makefile.frag b/packages/visualgst/Makefile.frag
index a6487e6..b26d26e 100644
--- a/packages/visualgst/Makefile.frag
+++ b/packages/visualgst/Makefile.frag
@@ -1,5 +1,5 @@
 VisualGST_FILES = \
-packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkScrollTreeWidget.st packages/visualgst/GtkSimpleListWidget.st packages/visualgst/GtkEntryWidget
 .st packages/visualgst/GtkSidebarWidget.st packages/visualgst/GtkHSidebarWidget.st packages/visualgst/GtkVSidebarWidget.st packages/visualgst/Model/GtkColumnType.st packages/visualgst/Model/GtkColumnTextType.st packages/visualgst/Model/GtkColumnPixbufType.st packages/visualgst/Model/GtkColumnOOPType.st packages/visualgst/GtkListModel.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st packages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/Browser
 State.st packages/visualgst/State/NamespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/State/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWidget.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/vis
 ualgst/Source/SourceFormatter.st packages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source/ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/Wor
 kspaceVariableTracker.st packages/visualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCommand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st packages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st p
 ackages/visualgst/Implementors/GtkImageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/GtkSenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debugger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st pa
 ckages/visualgst/Tetris/TetrisPieceZ.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnitResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st
  packages/visualgst/Commands/WorkspaceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png pack
 ages/visualgst/Icons/extension.png packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png packages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/GtkScrollTreeWidgetTest.st packages/visualgst/Tests/MenuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/GtkSimpleListWidgetTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
+packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkScrollTreeWidget.st packages/visualgst/GtkSimpleListWidget.st packages/visualgst/GtkEntryWidget
 .st packages/visualgst/GtkSidebarWidget.st packages/visualgst/GtkHSidebarWidget.st packages/visualgst/GtkVSidebarWidget.st packages/visualgst/Model/GtkColumnType.st packages/visualgst/Model/GtkColumnTextType.st packages/visualgst/Model/GtkColumnPixbufType.st packages/visualgst/Model/GtkColumnOOPType.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st packages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/BrowserState.st packages/visualgst/State/N
 amespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/State/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWidget.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/visualgst/Source/SourceFormatter.st pa
 ckages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source/ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/WorkspaceVariableTracker.st packages/v
 isualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCommand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st packages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st packages/visualgst/Implementors/GtkI
 mageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/GtkSenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debugger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st packages/visualgst/Tetris/TetrisPiece
 Z.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnitResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st packages/visualgst/Commands/Worksp
 aceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png packages/visualgst/Icons/extension.png
 packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png packages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/GtkScrollTreeWidgetTest.st packages/visualgst/Tests/MenuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/GtkSimpleListWidgetTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
 $(VisualGST_FILES):
 $(srcdir)/packages/visualgst/stamp-classes: $(VisualGST_FILES)
  touch $(srcdir)/packages/visualgst/stamp-classes
diff --git a/packages/visualgst/StBrowser/GtkCategoryWidget.st b/packages/visualgst/StBrowser/GtkCategoryWidget.st
index 8a0196c..caa8c59 100644
--- a/packages/visualgst/StBrowser/GtkCategoryWidget.st
+++ b/packages/visualgst/StBrowser/GtkCategoryWidget.st
@@ -74,7 +74,7 @@ GTKTools.GtkConcreteWidget subclass: GtkCategoryWidget [
  categoryTree := GtkScrollTreeWidget createListWithModel: {{GtkColumnTextType title: 'Method categories'}}.
  categoryTree treeView getSelection setMode: GTK.Gtk gtkSelectionBrowse.
  categoryTree connectToWhenPopupMenu: (CategoryMenus on: self).
-        (model := GtkListModel on: categoryTree treeView getModel)
+        (model := GTKTools.GtkListModel on: categoryTree treeView getModel)
                                         contentsBlock: [ :each | {each displayString} ].
  ^ categoryTree mainWidget
     ]
diff --git a/packages/visualgst/StBrowser/GtkMethodWidget.st b/packages/visualgst/StBrowser/GtkMethodWidget.st
index 3b4cd4f..3487ebf 100644
--- a/packages/visualgst/StBrowser/GtkMethodWidget.st
+++ b/packages/visualgst/StBrowser/GtkMethodWidget.st
@@ -100,7 +100,7 @@ GTKTools.GtkConcreteWidget subclass: GtkMethodWidget [
  methodTree := GtkScrollTreeWidget createListWithModel: {{GtkColumnPixbufType visible. GtkColumnTextType title: 'Methods'}}.
         methodTree connectToWhenPopupMenu: (MethodMenus on: self).
  methodTree treeView getSelection setMode: GTK.Gtk gtkSelectionBrowse.
- (model := GtkListModel on: methodTree treeView getModel)
+ (model := GTKTools.GtkListModel on: methodTree treeView getModel)
  contentsBlock: [ :each | {each methodViewIcon. each selector asString} ].
  ^ methodTree mainWidget
     ]
diff --git a/packages/visualgst/package.xml b/packages/visualgst/package.xml
index 91a2415..fdfb6fe 100644
--- a/packages/visualgst/package.xml
+++ b/packages/visualgst/package.xml
@@ -167,7 +167,6 @@
   <filein>Model/GtkColumnTextType.st</filein>
   <filein>Model/GtkColumnPixbufType.st</filein>
   <filein>Model/GtkColumnOOPType.st</filein>
-  <filein>GtkListModel.st</filein>
   <filein>GtkTreeModel.st</filein>
   <filein>Text/GtkTextWidget.st</filein>
   <filein>GtkPackageBuilderWidget.st</filein>
@@ -389,7 +388,6 @@
   <file>Model/GtkColumnTextType.st</file>
   <file>Model/GtkColumnPixbufType.st</file>
   <file>Model/GtkColumnOOPType.st</file>
-  <file>GtkListModel.st</file>
   <file>GtkTreeModel.st</file>
   <file>Text/GtkTextWidget.st</file>
   <file>GtkPackageBuilderWidget.st</file>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 11/15] gtktools: Move the GtkSideBarWidget from VisualGST to GTKTools

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * GtkHSidebarWidget.st: Renamed from packages/visualgst/GtkHSidebarWidget.st.
        * GtkSidebarWidget.st: Renamed from packages/visualgst/GtkSidebarWidget.st.
        * GtkVSidebarWidget.st: Renamed from packages/visualgst/GtkVSidebarWidget.st.
        * package.xml: Add the new files.

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * GtkLauncher.st: Use GTKTools namespace.
        * package.xml: Remove moved files.
        * GtkHSidebarWidget.st: Renamed to packages/gtktools/GtkHSidebarWidget.st.
        * GtkSidebarWidget.st: Renamed to packages/gtktools/GtkSidebarWidget.st.
        * GtkVSidebarWidget.st: Renamed to packages/gtktools/GtkVSidebarWidget.st.
---
 packages/gtktools/ChangeLog             |    7 +++
 packages/gtktools/GtkHSidebarWidget.st  |    6 ++
 packages/gtktools/GtkSidebarWidget.st   |   95 ++++++++++++++++++++++++++++++
 packages/gtktools/GtkVSidebarWidget.st  |    6 ++
 packages/gtktools/Makefile.frag         |    2 +-
 packages/gtktools/package.xml           |    3 +
 packages/visualgst/ChangeLog            |    8 +++
 packages/visualgst/GtkHSidebarWidget.st |    7 ---
 packages/visualgst/GtkLauncher.st       |    6 +-
 packages/visualgst/GtkSidebarWidget.st  |   96 -------------------------------
 packages/visualgst/GtkVSidebarWidget.st |    7 ---
 packages/visualgst/Makefile.frag        |    2 +-
 packages/visualgst/package.xml          |    6 --
 13 files changed, 130 insertions(+), 121 deletions(-)
 create mode 100644 packages/gtktools/GtkHSidebarWidget.st
 create mode 100644 packages/gtktools/GtkSidebarWidget.st
 create mode 100644 packages/gtktools/GtkVSidebarWidget.st
 delete mode 100644 packages/visualgst/GtkHSidebarWidget.st
 delete mode 100644 packages/visualgst/GtkSidebarWidget.st
 delete mode 100644 packages/visualgst/GtkVSidebarWidget.st

diff --git a/packages/gtktools/ChangeLog b/packages/gtktools/ChangeLog
index 8cb59f2..f7ee1f7 100644
--- a/packages/gtktools/ChangeLog
+++ b/packages/gtktools/ChangeLog
@@ -1,5 +1,12 @@
 2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
 
+ * GtkHSidebarWidget.st: Renamed from packages/visualgst/GtkHSidebarWidget.st.
+ * GtkSidebarWidget.st: Renamed from packages/visualgst/GtkSidebarWidget.st.
+ * GtkVSidebarWidget.st: Renamed from packages/visualgst/GtkVSidebarWidget.st.
+ * package.xml: Add the new files.
+
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
  * GtkListModel.st: Renamed from packages/visualgst/GtkListModel.st.
  * package.xml: Add GtkListModel.
 
diff --git a/packages/gtktools/GtkHSidebarWidget.st b/packages/gtktools/GtkHSidebarWidget.st
new file mode 100644
index 0000000..26c6d26
--- /dev/null
+++ b/packages/gtktools/GtkHSidebarWidget.st
@@ -0,0 +1,6 @@
+GtkSidebarWidget subclass: GtkHSidebarWidget [
+
+    panedOrientation [
+ ^ GTK.GtkHPaned
+    ]
+]
diff --git a/packages/gtktools/GtkSidebarWidget.st b/packages/gtktools/GtkSidebarWidget.st
new file mode 100644
index 0000000..d2bfee9
--- /dev/null
+++ b/packages/gtktools/GtkSidebarWidget.st
@@ -0,0 +1,95 @@
+GtkConcreteWidget subclass: GtkSidebarWidget [
+    | activeWidget widgets widgetEvents paned |
+
+    initialize [
+ <category: 'initialization'>
+
+ paned := GTK.GtkNotebook new
+ setTabPos: GTK.Gtk gtkPosBottom;
+ connectSignal: 'switch-page' to: self selector: #'switchPageOn:page:number:';
+ yourself.
+ self mainWidget: paned.
+ widgetEvents := Dictionary new.
+ activeWidget := GtkAbstractConcreteWidget new.
+ widgets := OrderedCollection new
+    ]
+
+    postInitialize [
+ <category: 'initialization'>
+
+ self hideAll
+    ]
+
+    add: aGtkWidget labeled: aString [
+ <category: 'notebook'>
+
+ paned
+            appendPage: aGtkWidget tabLabel: (GTK.GtkLabel new: aString).
+ widgets add: aGtkWidget
+    ]
+
+    addAll: anArray [
+ <category: 'notebook'>
+
+ anArray do: [ :each | self add: each key labeled: each value ]
+    ]
+
+    show: anIndex [
+ <category: 'notebook'>
+
+ activeWidget hideAll.
+ self mainWidget showAll.
+ self mainWidget setCurrentPage: anIndex - 1.
+ activeWidget := (widgets at: anIndex)
+ showAll;
+ yourself
+    ]
+
+    showAll [
+ <category: 'notebook'>
+
+ self mainWidget show
+    ]
+
+    hideTabs [
+ <category: 'notebook'>
+
+ self mainWidget setShowTabs: false
+    ]
+
+    hide [
+ <category: 'notebook'>
+
+ self hideMainPained
+    ]
+
+    hideAll [
+ <category: 'notebook'>
+
+ self hideMainPained
+    ]
+
+    hideMainPained [
+ <category: 'notebook'>
+
+ self mainWidget hideAll
+    ]
+
+    panedOrientation [
+ <category: 'accessing'>
+
+ ^ self subclassResponsibility
+    ]
+
+    switchPageOn: aGtkNotebook page: aGtkNotebookPage number: anInteger [
+        <category: 'notebook events'>
+
+ widgetEvents at: (aGtkNotebook getNthPage: anInteger) ifPresent: [ :msg | msg value ]
+    ]
+
+    whenWidgetIsVisible: aGtkWidget send: aSymbol to: anObject [
+ <category: 'notebook events'>
+
+ widgetEvents at: aGtkWidget put: (DirectedMessage receiver: anObject selector: aSymbol arguments: #())
+    ]
+]
diff --git a/packages/gtktools/GtkVSidebarWidget.st b/packages/gtktools/GtkVSidebarWidget.st
new file mode 100644
index 0000000..9a3e6a7
--- /dev/null
+++ b/packages/gtktools/GtkVSidebarWidget.st
@@ -0,0 +1,6 @@
+GtkSidebarWidget subclass: GtkVSidebarWidget [
+
+    panedOrientation [
+ ^ GTK.GtkVPaned
+    ]
+]
diff --git a/packages/gtktools/Makefile.frag b/packages/gtktools/Makefile.frag
index 85d55ca..eacb77b 100644
--- a/packages/gtktools/Makefile.frag
+++ b/packages/gtktools/Makefile.frag
@@ -1,5 +1,5 @@
 GTKTools_FILES = \
-packages/gtktools/GtkMainWindow.st packages/gtktools/GtkAbstractConcreteWidget.st packages/gtktools/GtkConcreteWidget.st packages/gtktools/GtkEntryDialog.st packages/gtktools/GtkListModel.st packages/gtktools/Tests/GtkConcreteWidgetTest.st
+packages/gtktools/GtkMainWindow.st packages/gtktools/GtkAbstractConcreteWidget.st packages/gtktools/GtkConcreteWidget.st packages/gtktools/GtkEntryDialog.st packages/gtktools/GtkListModel.st packages/gtktools/GtkSidebarWidget.st packages/gtktools/GtkHSidebarWidget.st packages/gtktools/GtkVSidebarWidget.st packages/gtktools/Tests/GtkConcreteWidgetTest.st
 $(GTKTools_FILES):
 $(srcdir)/packages/gtktools/stamp-classes: $(GTKTools_FILES)
  touch $(srcdir)/packages/gtktools/stamp-classes
diff --git a/packages/gtktools/package.xml b/packages/gtktools/package.xml
index eddaf13..ee00c33 100644
--- a/packages/gtktools/package.xml
+++ b/packages/gtktools/package.xml
@@ -8,6 +8,9 @@
   <filein>GtkConcreteWidget.st</filein>
   <filein>GtkEntryDialog.st</filein>
   <filein>GtkListModel.st</filein>
+  <filein>GtkSidebarWidget.st</filein>
+  <filein>GtkHSidebarWidget.st</filein>
+  <filein>GtkVSidebarWidget.st</filein>
 
   <test>
     <sunit>
diff --git a/packages/visualgst/ChangeLog b/packages/visualgst/ChangeLog
index 5b6ab83..7673f74 100644
--- a/packages/visualgst/ChangeLog
+++ b/packages/visualgst/ChangeLog
@@ -1,5 +1,13 @@
 2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
 
+ * GtkLauncher.st: Use GTKTools namespace.
+ * package.xml: Remove moved files.
+ * GtkHSidebarWidget.st: Renamed to packages/gtktools/GtkHSidebarWidget.st.
+ * GtkSidebarWidget.st: Renamed to packages/gtktools/GtkSidebarWidget.st.
+ * GtkVSidebarWidget.st: Renamed to packages/gtktools/GtkVSidebarWidget.st.
+
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
  * Debugger/GtkContextWidget.st: Use GTKTools namespace.
  * GtkHistoryWidget.st: Use GTKTools namespace.
  * GtkSimpleListWidget.st: Use GTKTools namespace.
diff --git a/packages/visualgst/GtkHSidebarWidget.st b/packages/visualgst/GtkHSidebarWidget.st
deleted file mode 100644
index 8f0a98c..0000000
--- a/packages/visualgst/GtkHSidebarWidget.st
+++ /dev/null
@@ -1,7 +0,0 @@
-GtkSidebarWidget subclass: GtkHSidebarWidget [
-
-    panedOrientation [
- ^ GTK.GtkHPaned
-    ]
-]
-
diff --git a/packages/visualgst/GtkLauncher.st b/packages/visualgst/GtkLauncher.st
index 70fe0f6..dee519e 100644
--- a/packages/visualgst/GtkLauncher.st
+++ b/packages/visualgst/GtkLauncher.st
@@ -334,7 +334,7 @@ GtkVisualGSTTool subclass: GtkLauncher [
     buildImplementorPaned [
        <category: 'user interface'>
 
- leftSidebar := GtkHSidebarWidget new
+ leftSidebar := GTKTools.GtkHSidebarWidget new
     initialize;
     addAll: {self buildImplementorView -> 'Implementor'. self buildSenderView -> 'Sender'. self buildHistoryView -> 'History'};
     yourself.
@@ -354,7 +354,7 @@ GtkVisualGSTTool subclass: GtkLauncher [
     buildRightSidebarPaned [
        <category: 'user interface'>
 
-        rightSidebar := GtkHSidebarWidget new
+        rightSidebar := GTKTools.GtkHSidebarWidget new
                             initialize;
                             addAll: {self buildPackageBuilderView -> 'Package Builder'};
                             yourself.
@@ -425,7 +425,7 @@ GtkVisualGSTTool subclass: GtkLauncher [
     buildTopSidebar [
         <category: 'user interface'>
 
-        topSidebar := GtkHSidebarWidget new
+        topSidebar := GTKTools.GtkHSidebarWidget new
                             initialize;
                             addAll: {self buildImplementorResultList mainWidget -> ''. self buildSenderResultList mainWidget -> ''};
     hideTabs;
diff --git a/packages/visualgst/GtkSidebarWidget.st b/packages/visualgst/GtkSidebarWidget.st
deleted file mode 100644
index 3667e86..0000000
--- a/packages/visualgst/GtkSidebarWidget.st
+++ /dev/null
@@ -1,96 +0,0 @@
-GTKTools.GtkConcreteWidget subclass: GtkSidebarWidget [
-    | activeWidget widgets widgetEvents paned |
-
-    initialize [
- <category: 'initialization'>
-
- paned := GTK.GtkNotebook new
- setTabPos: GTK.Gtk gtkPosBottom;
- connectSignal: 'switch-page' to: self selector: #'switchPageOn:page:number:';
- yourself.
- self mainWidget: paned.
- widgetEvents := Dictionary new.
- activeWidget := GTKTools.GtkAbstractConcreteWidget new.
- widgets := OrderedCollection new
-    ]
-
-    postInitialize [
- <category: 'initialization'>
-
- self hideAll
-    ]
-
-    add: aGtkWidget labeled: aString [
- <category: 'notebook'>
-
- paned
-            appendPage: aGtkWidget tabLabel: (GTK.GtkLabel new: aString).
- widgets add: aGtkWidget
-    ]
-
-    addAll: anArray [
- <category: 'notebook'>
-
- anArray do: [ :each | self add: each key labeled: each value ]
-    ]
-
-    show: anIndex [
- <category: 'notebook'>
-
- activeWidget hideAll.
- self mainWidget showAll.
- self mainWidget setCurrentPage: anIndex - 1.
- activeWidget := (widgets at: anIndex)
- showAll;
- yourself
-    ]
-
-    showAll [
- <category: 'notebook'>
-
- self mainWidget show
-    ]
-
-    hideTabs [
- <category: 'notebook'>
-
- self mainWidget setShowTabs: false
-    ]
-
-    hide [
- <category: 'notebook'>
-
- self hideMainPained
-    ]
-
-    hideAll [
- <category: 'notebook'>
-
- self hideMainPained
-    ]
-
-    hideMainPained [
- <category: 'notebook'>
-
- self mainWidget hideAll
-    ]
-
-    panedOrientation [
- <category: 'accessing'>
-
- ^ self subclassResponsibility
-    ]
-
-    switchPageOn: aGtkNotebook page: aGtkNotebookPage number: anInteger [
-        <category: 'notebook events'>
-
- widgetEvents at: (aGtkNotebook getNthPage: anInteger) ifPresent: [ :msg | msg value ]
-    ]
-
-    whenWidgetIsVisible: aGtkWidget send: aSymbol to: anObject [
- <category: 'notebook events'>
-
- widgetEvents at: aGtkWidget put: (DirectedMessage receiver: anObject selector: aSymbol arguments: #())
-    ]
-]
-
diff --git a/packages/visualgst/GtkVSidebarWidget.st b/packages/visualgst/GtkVSidebarWidget.st
deleted file mode 100644
index da8294c..0000000
--- a/packages/visualgst/GtkVSidebarWidget.st
+++ /dev/null
@@ -1,7 +0,0 @@
-GtkSidebarWidget subclass: GtkVSidebarWidget [
-
-    panedOrientation [
- ^ GTK.GtkVPaned
-    ]
-]
-
diff --git a/packages/visualgst/Makefile.frag b/packages/visualgst/Makefile.frag
index b26d26e..5cc7fa0 100644
--- a/packages/visualgst/Makefile.frag
+++ b/packages/visualgst/Makefile.frag
@@ -1,5 +1,5 @@
 VisualGST_FILES = \
-packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkScrollTreeWidget.st packages/visualgst/GtkSimpleListWidget.st packages/visualgst/GtkEntryWidget
 .st packages/visualgst/GtkSidebarWidget.st packages/visualgst/GtkHSidebarWidget.st packages/visualgst/GtkVSidebarWidget.st packages/visualgst/Model/GtkColumnType.st packages/visualgst/Model/GtkColumnTextType.st packages/visualgst/Model/GtkColumnPixbufType.st packages/visualgst/Model/GtkColumnOOPType.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st packages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/BrowserState.st packages/visualgst/State/N
 amespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/State/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWidget.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/visualgst/Source/SourceFormatter.st pa
 ckages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source/ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/WorkspaceVariableTracker.st packages/v
 isualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCommand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st packages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st packages/visualgst/Implementors/GtkI
 mageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/GtkSenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debugger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st packages/visualgst/Tetris/TetrisPiece
 Z.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnitResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st packages/visualgst/Commands/Worksp
 aceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png packages/visualgst/Icons/extension.png
 packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png packages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/GtkScrollTreeWidgetTest.st packages/visualgst/Tests/MenuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/GtkSimpleListWidgetTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
+packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkScrollTreeWidget.st packages/visualgst/GtkSimpleListWidget.st packages/visualgst/GtkEntryWidget
 .st packages/visualgst/Model/GtkColumnType.st packages/visualgst/Model/GtkColumnTextType.st packages/visualgst/Model/GtkColumnPixbufType.st packages/visualgst/Model/GtkColumnOOPType.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st packages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/BrowserState.st packages/visualgst/State/NamespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/St
 ate/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWidget.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/visualgst/Source/SourceFormatter.st packages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source
 /ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/WorkspaceVariableTracker.st packages/visualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCom
 mand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st packages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st packages/visualgst/Implementors/GtkImageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/Gtk
 SenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debugger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st packages/visualgst/Tetris/TetrisPieceZ.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnit
 ResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st packages/visualgst/Commands/WorkspaceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Comma
 nds/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png packages/visualgst/Icons/extension.png packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png pa
 ckages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/GtkScrollTreeWidgetTest.st packages/visualgst/Tests/MenuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/GtkSimpleListWidgetTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
 $(VisualGST_FILES):
 $(srcdir)/packages/visualgst/stamp-classes: $(VisualGST_FILES)
  touch $(srcdir)/packages/visualgst/stamp-classes
diff --git a/packages/visualgst/package.xml b/packages/visualgst/package.xml
index fdfb6fe..10c1c4e 100644
--- a/packages/visualgst/package.xml
+++ b/packages/visualgst/package.xml
@@ -160,9 +160,6 @@
   <filein>GtkScrollTreeWidget.st</filein>
   <filein>GtkSimpleListWidget.st</filein>
   <filein>GtkEntryWidget.st</filein>
-  <filein>GtkSidebarWidget.st</filein>
-  <filein>GtkHSidebarWidget.st</filein>
-  <filein>GtkVSidebarWidget.st</filein>
   <filein>Model/GtkColumnType.st</filein>
   <filein>Model/GtkColumnTextType.st</filein>
   <filein>Model/GtkColumnPixbufType.st</filein>
@@ -381,9 +378,6 @@
   <file>GtkScrollTreeWidget.st</file>
   <file>GtkSimpleListWidget.st</file>
   <file>GtkEntryWidget.st</file>
-  <file>GtkSidebarWidget.st</file>
-  <file>GtkHSidebarWidget.st</file>
-  <file>GtkVSidebarWidget.st</file>
   <file>Model/GtkColumnType.st</file>
   <file>Model/GtkColumnTextType.st</file>
   <file>Model/GtkColumnPixbufType.st</file>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 12/15] gtktools: Move model classes from VisualGST to GTKTools

Holger Freyther
In reply to this post by Holger Freyther
From: Holger Hans Peter Freyther <[hidden email]>

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * Extensions.st: Added.
        * GtkScrollTreeWidget.st: Renamed from packages/visualgst/GtkScrollTreeWidget.st.
        * GtkSimpleListWidget.st: Renamed from packages/visualgst/GtkSimpleListWidget.st.
        * Model/GtkColumnOOPType.st: Renamed from packages/visualgst/Model/GtkColumnOOPType.st.
        * Model/GtkColumnPixbufType.st: Renamed from packages/visualgst/Model/GtkColumnPixbufType.st.
        * Model/GtkColumnTextType.st: Renamed from packages/visualgst/Model/GtkColumnTextType.st.
        * Model/GtkColumnType.st: Renamed from packages/visualgst/Model/GtkColumnType.st.
        * Tests/GtkScrollTreeWidgetTest.st: Renamed from packages/visualgst/Tests/GtkScrollTreeWidgetTest.st.
        * Tests/GtkSimpleListWidgetTest.st: Renamed from packages/visualgst/Tests/GtkSimpleListWidgetTest.st.
        * package.xml: Add new files.

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * Extensions.st: Move the model extensiosn to GTKtools.
        * package.xml: Remove moved files.
        * GtkScrollTreeWidget.st: Renamed to packages/gtktools/GtkScrollTreeWidget.st.
        * GtkSimpleListWidget.st: Renamed to packages/gtktools/GtkSimpleListWidget.st.
        * Model/GtkColumnOOPType.st: Renamed to packages/gtktools/Model/GtkColumnOOPType.st.
        * Model/GtkColumnPixbufType.st: Renamed to packages/gtktools/Model/GtkColumnPixbufType.st.
        * Model/GtkColumnTextType.st: Renamed to packages/gtktools/Model/GtkColumnTextType.st.
        * Model/GtkColumnType.st: Renamed to packages/gtktools/Model/GtkColumnType.st.
        * Tests/GtkScrollTreeWidgetTest.st: Renamed to packages/gtktools/Tests/GtkScrollTreeWidgetTest.st.
        * Tests/GtkSimpleListWidgetTest.st: Renamed to packages/gtktools/Tests/GtkSimpleListWidgetTest.st.
---
 packages/gtktools/ChangeLog                        |   13 ++
 packages/gtktools/Extensions.st                    |  170 ++++++++++++++++++++
 packages/gtktools/GtkScrollTreeWidget.st           |   47 ++++++
 packages/gtktools/GtkSimpleListWidget.st           |   16 ++
 packages/gtktools/Makefile.frag                    |    2 +-
 packages/gtktools/Model/GtkColumnOOPType.st        |   20 +++
 packages/gtktools/Model/GtkColumnPixbufType.st     |   20 +++
 packages/gtktools/Model/GtkColumnTextType.st       |   20 +++
 packages/gtktools/Model/GtkColumnType.st           |  107 ++++++++++++
 packages/gtktools/Tests/GtkScrollTreeWidgetTest.st |   18 +++
 packages/gtktools/Tests/GtkSimpleListWidgetTest.st |   10 ++
 packages/gtktools/package.xml                      |   12 ++
 packages/visualgst/ChangeLog                       |   13 ++
 packages/visualgst/Extensions.st                   |  169 -------------------
 packages/visualgst/GtkScrollTreeWidget.st          |   48 ------
 packages/visualgst/GtkSimpleListWidget.st          |   17 --
 packages/visualgst/Makefile.frag                   |    2 +-
 packages/visualgst/Model/GtkColumnOOPType.st       |   21 ---
 packages/visualgst/Model/GtkColumnPixbufType.st    |   21 ---
 packages/visualgst/Model/GtkColumnTextType.st      |   21 ---
 packages/visualgst/Model/GtkColumnType.st          |  107 ------------
 .../visualgst/Tests/GtkScrollTreeWidgetTest.st     |   19 ---
 .../visualgst/Tests/GtkSimpleListWidgetTest.st     |   11 --
 packages/visualgst/package.xml                     |   18 ---
 24 files changed, 468 insertions(+), 454 deletions(-)
 create mode 100644 packages/gtktools/Extensions.st
 create mode 100644 packages/gtktools/GtkScrollTreeWidget.st
 create mode 100644 packages/gtktools/GtkSimpleListWidget.st
 create mode 100644 packages/gtktools/Model/GtkColumnOOPType.st
 create mode 100644 packages/gtktools/Model/GtkColumnPixbufType.st
 create mode 100644 packages/gtktools/Model/GtkColumnTextType.st
 create mode 100644 packages/gtktools/Model/GtkColumnType.st
 create mode 100644 packages/gtktools/Tests/GtkScrollTreeWidgetTest.st
 create mode 100644 packages/gtktools/Tests/GtkSimpleListWidgetTest.st
 delete mode 100644 packages/visualgst/GtkScrollTreeWidget.st
 delete mode 100644 packages/visualgst/GtkSimpleListWidget.st
 delete mode 100644 packages/visualgst/Model/GtkColumnOOPType.st
 delete mode 100644 packages/visualgst/Model/GtkColumnPixbufType.st
 delete mode 100644 packages/visualgst/Model/GtkColumnTextType.st
 delete mode 100644 packages/visualgst/Model/GtkColumnType.st
 delete mode 100644 packages/visualgst/Tests/GtkScrollTreeWidgetTest.st
 delete mode 100644 packages/visualgst/Tests/GtkSimpleListWidgetTest.st

diff --git a/packages/gtktools/ChangeLog b/packages/gtktools/ChangeLog
index f7ee1f7..42a5356 100644
--- a/packages/gtktools/ChangeLog
+++ b/packages/gtktools/ChangeLog
@@ -1,5 +1,18 @@
 2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
 
+ * Extensions.st: Added.
+ * GtkScrollTreeWidget.st: Renamed from packages/visualgst/GtkScrollTreeWidget.st.
+ * GtkSimpleListWidget.st: Renamed from packages/visualgst/GtkSimpleListWidget.st.
+ * Model/GtkColumnOOPType.st: Renamed from packages/visualgst/Model/GtkColumnOOPType.st.
+ * Model/GtkColumnPixbufType.st: Renamed from packages/visualgst/Model/GtkColumnPixbufType.st.
+ * Model/GtkColumnTextType.st: Renamed from packages/visualgst/Model/GtkColumnTextType.st.
+ * Model/GtkColumnType.st: Renamed from packages/visualgst/Model/GtkColumnType.st.
+ * Tests/GtkScrollTreeWidgetTest.st: Renamed from packages/visualgst/Tests/GtkScrollTreeWidgetTest.st.
+ * Tests/GtkSimpleListWidgetTest.st: Renamed from packages/visualgst/Tests/GtkSimpleListWidgetTest.st.
+ * package.xml: Add new files.
+
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
  * GtkHSidebarWidget.st: Renamed from packages/visualgst/GtkHSidebarWidget.st.
  * GtkSidebarWidget.st: Renamed from packages/visualgst/GtkSidebarWidget.st.
  * GtkVSidebarWidget.st: Renamed from packages/visualgst/GtkVSidebarWidget.st.
diff --git a/packages/gtktools/Extensions.st b/packages/gtktools/Extensions.st
new file mode 100644
index 0000000..04217c7
--- /dev/null
+++ b/packages/gtktools/Extensions.st
@@ -0,0 +1,170 @@
+
+GTK.GtkTreeModel class extend [
+    createModelWith: anArray [
+        <category: '*GTKTools'>
+
+        | model |
+        model := OrderedCollection new.
+        anArray do: [ :each | model addAll: (each collect: [ :elem | elem kind ]) ].
+        model addLast: GTKTools.GtkColumnOOPType kind.
+        ^ self new: model size varargs: model asArray
+    ]
+]
+
+GTK.GtkListStore class extend [
+    createModelWith: anArray [
+        <category: '*GTKTools'>
+
+        | model |
+        model := OrderedCollection new.
+        anArray do: [ :each | model addAll: (each collect: [ :elem | elem kind ]) ].
+        model addLast: GTKTools.GtkColumnOOPType kind.
+        ^ self new: model size varargs: model asArray
+    ]
+]
+
+GTK.GtkTreeStore class extend [
+    createModelWith: anArray [
+        <category: '*GTKTools'>
+
+        | model |
+        model := OrderedCollection new.
+        anArray do: [ :each | model addAll: (each collect: [ :elem | elem kind ]) ].
+        model addLast: GTKTools.GtkColumnOOPType kind.
+        ^ self new: model size varargs: model asArray
+    ]
+]
+
+
+GTK.GtkTreeView class extend [
+
+    createModel: aGtkStoreClass with: anArray [
+ <category: '*GTKTools'>
+
+ ^ self newWithModel: (aGtkStoreClass createModelWith: anArray)
+    ]
+
+    createTreeViewWith: anArray [
+ <category: '*GTKTools'>
+
+        ^ self createModel: GtkTreeStore with: anArray
+    ]
+
+    createListViewWith: anArray [
+        <category: '*GTKTools'>
+
+        ^ self createModel: GtkListStore with: anArray
+    ]
+
+    createColumnsOn: aGtkTreeView with: anArray [
+        <category: '*GTKTools'>
+
+        | colView i render |
+        i := 0.
+        anArray do: [ :each |
+            colView := GtkTreeViewColumn new.
+            each do: [ :column |
+            column isVisible ifTrue: [
+                colView
+                    packStart: (render := column cellRenderer new) expand: false;
+                    addAttribute: render attribute: column kindName column: i.
+                column hasTitle ifTrue: [ colView setTitle: column title ].
+                i := i + 1 ] ].
+            aGtkTreeView insertColumn: colView position: -1 ]
+    ]
+
+    createListWithModel: anArray [
+        <category: '*GTKTools'>
+
+        | view |
+        view := self createListViewWith: anArray.
+        self createColumnsOn: view with: anArray.
+ ^ view
+    ]
+
+    createTreeWithModel: anArray [
+ <category: '*GTKTools'>
+
+ | view |
+        view := self createTreeViewWith: anArray.
+        self createColumnsOn: view with: anArray.
+ ^ view
+    ]
+]
+
+GTK.GtkTreeView extend [
+    | model |
+
+    model: aGtkModel [
+ <category: 'accessing'>
+
+ model := aGtkModel
+    ]
+
+    model [
+ <category: 'accessing'>
+
+ ^ model
+    ]
+
+    selection [
+ <category: 'accessing'>
+
+        | iter string |
+        (iter := self selectedIter) ifNil: [ ^ self error: 'nothing is selected' ].
+ ^ (self getModel at: iter) last
+    ]
+
+    selections [
+ <category: 'accessing'>
+
+ | glist result |
+ result := OrderedCollection new.
+ (glist := self getSelection getSelectedRows: nil) ifNil: [ ^ result ].
+ glist do: [ :each | | iter path |
+    path := each castTo: GTK.GtkTreePath type.
+    iter := self getModel getIter: path.
+    result add: ((self getModel at: iter) last) ].
+ ^ result
+    ]
+
+    select: anObject [
+ <category: 'accessing'>
+
+        self getSelection unselectAll.
+ self getModel do: [ :elem :iter |
+    elem last = anObject ifTrue: [
+                    self scrollToCell: (self getModel getPath: iter) column: nil useAlign: false rowAlign: 0.5 colAlign: 0.5.
+                    ^ self getSelection selectIter: iter ] ].
+    ]
+
+    selectNth: anInteger [
+ <category: 'accessing'>
+
+        | path iter |
+        self getSelection unselectAll.
+        anInteger = 0 ifTrue: [^self].
+        path := GtkTreePath newFromIndices: {anInteger - 1. -1}.
+ (self getModel getIter: path) isNil ifTrue: [^self].
+        self scrollToCell: path column: nil useAlign: false rowAlign: 0.5 colAlign: 0.5.
+        self getSelection selectPath: path
+    ]
+
+    selectFirstItem [
+ <category: 'accessing'>
+
+ | selection |
+ (selection := self getSelection) unselectAll.
+        selection unselectAll.
+        selection selectIter: self getModel getIterFirst
+    ]
+
+    selectLastItem [
+ <category: 'accessing'>
+
+ | selection |
+ (selection := self getSelection) unselectAll.
+ selection unselectAll.
+        selection selectIter: self getModel getIterLast
+    ]
+]
diff --git a/packages/gtktools/GtkScrollTreeWidget.st b/packages/gtktools/GtkScrollTreeWidget.st
new file mode 100644
index 0000000..d88ddbe
--- /dev/null
+++ b/packages/gtktools/GtkScrollTreeWidget.st
@@ -0,0 +1,47 @@
+GtkConcreteWidget subclass: GtkScrollTreeWidget [
+
+    GtkScrollTreeWidget class >> createListWithModel: anObject [
+ <category: 'instance creation'>
+
+ ^ self basicNew
+ treeView: (GTK.GtkTreeView createListWithModel: anObject);
+ initialize;
+ yourself
+    ]
+
+    GtkScrollTreeWidget class >> createTreeWithModel: anObject [
+        <category: 'instance creation'>
+
+        ^ self basicNew
+                treeView: (GTK.GtkTreeView createTreeWithModel: anObject);
+                initialize;
+                yourself
+    ]
+
+    | treeView |
+
+    initialize [
+ <category:'initialize'>
+
+ popupMenu := [ :value | ].
+ self buildTreeView.
+ self mainWidget: (GTK.GtkScrolledWindow withChild: self treeView)
+    ]
+
+    buildTreeView [
+ <category: 'user interface'>
+
+    ]
+
+    treeView: aGtkTreeView [
+ <category: 'accessing'>
+
+ treeView := aGtkTreeView.
+    ]
+
+    treeView [
+ <category: 'accessing'>
+
+ ^ treeView
+    ]
+]
diff --git a/packages/gtktools/GtkSimpleListWidget.st b/packages/gtktools/GtkSimpleListWidget.st
new file mode 100644
index 0000000..9121c9b
--- /dev/null
+++ b/packages/gtktools/GtkSimpleListWidget.st
@@ -0,0 +1,16 @@
+GtkScrollTreeWidget subclass: GtkSimpleListWidget [
+
+    GtkSimpleListWidget class >> named: aString [
+ <category: 'instance creation'>
+
+ ^ self createListWithModel: {{GtkColumnTextType title: aString}}
+    ]
+
+    buildTreeView [
+        <category: 'user interface'>
+
+        self treeView getSelection setMode: GTK.Gtk gtkSelectionBrowse.
+        (GtkListModel on: self treeView getModel)
+                                        contentsBlock: [ :each | {each displayString} ]
+    ]
+]
diff --git a/packages/gtktools/Makefile.frag b/packages/gtktools/Makefile.frag
index eacb77b..cc99bda 100644
--- a/packages/gtktools/Makefile.frag
+++ b/packages/gtktools/Makefile.frag
@@ -1,5 +1,5 @@
 GTKTools_FILES = \
-packages/gtktools/GtkMainWindow.st packages/gtktools/GtkAbstractConcreteWidget.st packages/gtktools/GtkConcreteWidget.st packages/gtktools/GtkEntryDialog.st packages/gtktools/GtkListModel.st packages/gtktools/GtkSidebarWidget.st packages/gtktools/GtkHSidebarWidget.st packages/gtktools/GtkVSidebarWidget.st packages/gtktools/Tests/GtkConcreteWidgetTest.st
+packages/gtktools/Extensions.st packages/gtktools/GtkMainWindow.st packages/gtktools/GtkAbstractConcreteWidget.st packages/gtktools/GtkConcreteWidget.st packages/gtktools/GtkEntryDialog.st packages/gtktools/GtkListModel.st packages/gtktools/GtkSidebarWidget.st packages/gtktools/GtkHSidebarWidget.st packages/gtktools/GtkVSidebarWidget.st packages/gtktools/GtkScrollTreeWidget.st packages/gtktools/GtkSimpleListWidget.st packages/gtktools/Model/GtkColumnType.st packages/gtktools/Model/GtkColumnTextType.st packages/gtktools/Model/GtkColumnPixbufType.st packages/gtktools/Model/GtkColumnOOPType.st packages/gtktools/Tests/GtkConcreteWidgetTest.st packages/gtktools/Tests/GtkScrollTreeWidgetTest.st packages/gtktools/Tests/GtkSimpleListWidgetTest.st
 $(GTKTools_FILES):
 $(srcdir)/packages/gtktools/stamp-classes: $(GTKTools_FILES)
  touch $(srcdir)/packages/gtktools/stamp-classes
diff --git a/packages/gtktools/Model/GtkColumnOOPType.st b/packages/gtktools/Model/GtkColumnOOPType.st
new file mode 100644
index 0000000..0b4e4d6
--- /dev/null
+++ b/packages/gtktools/Model/GtkColumnOOPType.st
@@ -0,0 +1,20 @@
+GtkColumnType subclass: GtkColumnOOPType [
+
+    GtkColumnOOPType class >> kind [
+ <category: 'accessing'>
+
+ ^ GLib.GType oopType
+    ]
+
+    GtkColumnOOPType class >> kindName [
+        <category: 'accessing'>
+
+        ^ self error: 'OOP type should not be displayed'
+    ]
+
+    GtkColumnOOPType class >> cellRenderer [
+        <category: 'accessing'>
+
+        ^ self error: 'OOP type has no cell renderer'
+    ]
+]
diff --git a/packages/gtktools/Model/GtkColumnPixbufType.st b/packages/gtktools/Model/GtkColumnPixbufType.st
new file mode 100644
index 0000000..572bc7f
--- /dev/null
+++ b/packages/gtktools/Model/GtkColumnPixbufType.st
@@ -0,0 +1,20 @@
+GtkColumnType subclass: GtkColumnPixbufType [
+
+    GtkColumnPixbufType class >> kind [
+ <category: 'accessing'>
+
+ ^ GTK.GdkPixbuf getType
+    ]
+
+    GtkColumnPixbufType class >> kindName [
+        <category: 'accessing'>
+
+        ^ 'pixbuf'
+    ]
+
+    GtkColumnPixbufType class >> cellRenderer [
+        <category: 'accessing'>
+
+        ^ GTK.GtkCellRendererPixbuf
+    ]
+]
diff --git a/packages/gtktools/Model/GtkColumnTextType.st b/packages/gtktools/Model/GtkColumnTextType.st
new file mode 100644
index 0000000..c40507b
--- /dev/null
+++ b/packages/gtktools/Model/GtkColumnTextType.st
@@ -0,0 +1,20 @@
+GtkColumnType subclass: GtkColumnTextType [
+
+    GtkColumnTextType class >> kind [
+ <category: 'accessing'>
+
+ ^ GTK.GValue gTypeString
+    ]
+
+    GtkColumnTextType class >> kindName [
+        <category: 'accessing'>
+
+        ^ 'text'
+    ]
+
+    GtkColumnTextType class >> cellRenderer [
+        <category: 'accessing'>
+
+        ^ GTK.GtkCellRendererText
+    ]
+]
diff --git a/packages/gtktools/Model/GtkColumnType.st b/packages/gtktools/Model/GtkColumnType.st
new file mode 100644
index 0000000..39e1a2a
--- /dev/null
+++ b/packages/gtktools/Model/GtkColumnType.st
@@ -0,0 +1,107 @@
+Object subclass: GtkColumnType [
+    | visible title |
+
+    GtkColumnType class >> kind [
+ <category: 'accessing'>
+
+ ^ self subclassResponsibility
+    ]
+
+    GtkColumnType class >> kindName [
+        <category: 'accessing'>
+
+        ^ self subclassResponsibility
+    ]
+
+    GtkColumnType class >> cellRenderer [
+ <category: 'accessing'>
+
+ ^ self subclassResponsibility
+    ]
+
+    GtkColumnType class >> new [
+ <category: 'instance creation'>
+
+ ^ self error: 'should not call new'
+    ]
+
+    GtkColumnType class >> hidden [
+        <category: 'instance creation'>
+
+        ^ self basicNew
+            initialize;
+            yourself
+    ]
+
+    GtkColumnType class >> visible [
+        <category: 'instance creation'>
+
+        ^ self basicNew
+            initialize;
+    visible: true;
+            yourself
+    ]
+
+    GtkColumnType class >> title: aString [
+ <category: 'instance creation'>
+
+ ^ self basicNew
+    title: aString;
+    visible: true;
+    yourself
+    ]
+
+    initialize [
+ <category: 'initialization'>
+
+ visible := false
+    ]
+
+    kind [
+ <category: 'accessing'>
+
+ ^ self class kind
+    ]
+
+    kindName [
+        <category: 'accessing'>
+
+        ^ self class kindName
+    ]
+
+    cellRenderer [
+        <category: 'accessing'>
+
+        ^ self class cellRenderer
+    ]
+
+    visible: aBoolean [
+ <category: 'accessing'>
+
+ visible := aBoolean
+    ]
+
+    isVisible [
+ <category: 'testing'>
+
+ ^ visible
+    ]
+
+    hasTitle [
+ <category: 'testing'>
+
+ ^ title isNil not
+    ]
+
+    title: aString [
+ <category: 'accessing'>
+
+ title := aString
+    ]
+
+    title [
+ <category: 'accessing'>
+
+ ^ title
+    ]
+]
diff --git a/packages/gtktools/Tests/GtkScrollTreeWidgetTest.st b/packages/gtktools/Tests/GtkScrollTreeWidgetTest.st
new file mode 100644
index 0000000..8d334a5
--- /dev/null
+++ b/packages/gtktools/Tests/GtkScrollTreeWidgetTest.st
@@ -0,0 +1,18 @@
+TestCase subclass: GtkScrollTreeWidgetTest [
+
+    testAccessing [
+ <category: 'testing'>
+
+ | widget |
+ widget := GtkScrollTreeWidget basicNew.
+ widget treeView: 123.
+ self assert: widget treeView = 123
+    ]
+
+    testPopupConnection [
+ <category: 'testing'>
+
+        | widget |
+        widget := GtkScrollTreeWidget createListWithModel: {{GtkColumnTextType title: 'aString'}}.
+    ]
+]
diff --git a/packages/gtktools/Tests/GtkSimpleListWidgetTest.st b/packages/gtktools/Tests/GtkSimpleListWidgetTest.st
new file mode 100644
index 0000000..ea7e906
--- /dev/null
+++ b/packages/gtktools/Tests/GtkSimpleListWidgetTest.st
@@ -0,0 +1,10 @@
+TestCase subclass: GtkSimpleListWidgetTest [
+
+    testInstanceCreation [
+ <category: 'testing'>
+
+ | widget |
+ widget := GtkSimpleListWidget named: 'foo'.
+ self assert: widget treeView isNil not
+    ]
+]
diff --git a/packages/gtktools/package.xml b/packages/gtktools/package.xml
index ee00c33..0ff642e 100644
--- a/packages/gtktools/package.xml
+++ b/packages/gtktools/package.xml
@@ -3,6 +3,7 @@
   <namespace>GTKTools</namespace>
   <prereq>GTK</prereq>
 
+  <filein>Extensions.st</filein>
   <filein>GtkMainWindow.st</filein>
   <filein>GtkAbstractConcreteWidget.st</filein>
   <filein>GtkConcreteWidget.st</filein>
@@ -11,11 +12,22 @@
   <filein>GtkSidebarWidget.st</filein>
   <filein>GtkHSidebarWidget.st</filein>
   <filein>GtkVSidebarWidget.st</filein>
+  <filein>GtkScrollTreeWidget.st</filein>
+  <filein>GtkSimpleListWidget.st</filein>
+
+  <filein>Model/GtkColumnType.st</filein>
+  <filein>Model/GtkColumnTextType.st</filein>
+  <filein>Model/GtkColumnPixbufType.st</filein>
+  <filein>Model/GtkColumnOOPType.st</filein>
 
   <test>
     <sunit>
       GTKTools.GtkConcreteWidgetTest
+      GTKTools.GtkScrollTreeWidgetTest
+      GTKTools.GtkSimpleListWidgetTest
     </sunit>
     <filein>Tests/GtkConcreteWidgetTest.st</filein>
+    <filein>Tests/GtkScrollTreeWidgetTest.st</filein>
+    <filein>Tests/GtkSimpleListWidgetTest.st</filein>
   </test>
 </package>
diff --git a/packages/visualgst/ChangeLog b/packages/visualgst/ChangeLog
index 7673f74..654745f 100644
--- a/packages/visualgst/ChangeLog
+++ b/packages/visualgst/ChangeLog
@@ -1,5 +1,18 @@
 2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
 
+ * Extensions.st: Move the model extensiosn to GTKtools.
+ * package.xml: Remove moved files.
+ * GtkScrollTreeWidget.st: Renamed to packages/gtktools/GtkScrollTreeWidget.st.
+ * GtkSimpleListWidget.st: Renamed to packages/gtktools/GtkSimpleListWidget.st.
+ * Model/GtkColumnOOPType.st: Renamed to packages/gtktools/Model/GtkColumnOOPType.st.
+ * Model/GtkColumnPixbufType.st: Renamed to packages/gtktools/Model/GtkColumnPixbufType.st.
+ * Model/GtkColumnTextType.st: Renamed to packages/gtktools/Model/GtkColumnTextType.st.
+ * Model/GtkColumnType.st: Renamed to packages/gtktools/Model/GtkColumnType.st.
+ * Tests/GtkScrollTreeWidgetTest.st: Renamed to packages/gtktools/Tests/GtkScrollTreeWidgetTest.st.
+ * Tests/GtkSimpleListWidgetTest.st: Renamed to packages/gtktools/Tests/GtkSimpleListWidgetTest.st.
+
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
  * GtkLauncher.st: Use GTKTools namespace.
  * package.xml: Remove moved files.
  * GtkHSidebarWidget.st: Renamed to packages/gtktools/GtkHSidebarWidget.st.
diff --git a/packages/visualgst/Extensions.st b/packages/visualgst/Extensions.st
index 3608605..4a13832 100644
--- a/packages/visualgst/Extensions.st
+++ b/packages/visualgst/Extensions.st
@@ -516,175 +516,6 @@ STInST.RBParser class extend [
     ]
 ]
 
-GTK.GtkTreeModel class extend [
-    createModelWith: anArray [
-        <category: '*VisualGST'>
-
-        | model |
-        model := OrderedCollection new.
-        anArray do: [ :each | model addAll: (each collect: [ :elem | elem kind ]) ].
-        model addLast: VisualGST.GtkColumnOOPType kind.
-        ^ self new: model size varargs: model asArray
-    ]
-]
-
-GTK.GtkListStore class extend [
-    createModelWith: anArray [
-        <category: '*VisualGST'>
-
-        | model |
-        model := OrderedCollection new.
-        anArray do: [ :each | model addAll: (each collect: [ :elem | elem kind ]) ].
-        model addLast: VisualGST.GtkColumnOOPType kind.
-        ^ self new: model size varargs: model asArray
-    ]
-]
-
-GTK.GtkTreeStore class extend [
-    createModelWith: anArray [
-        <category: '*VisualGST'>
-
-        | model |
-        model := OrderedCollection new.
-        anArray do: [ :each | model addAll: (each collect: [ :elem | elem kind ]) ].
-        model addLast: VisualGST.GtkColumnOOPType kind.
-        ^ self new: model size varargs: model asArray
-    ]
-]
-
-GTK.GtkTreeView class extend [
-
-    createModel: aGtkStoreClass with: anArray [
- <category: '*VisualGST'>
-
- ^ self newWithModel: (aGtkStoreClass createModelWith: anArray)
-    ]
-
-    createTreeViewWith: anArray [
- <category: '*VisualGST'>
-
-        ^ self createModel: GtkTreeStore with: anArray
-    ]
-
-    createListViewWith: anArray [
-        <category: '*VisualGST'>
-
-        ^ self createModel: GtkListStore with: anArray
-    ]
-
-    createColumnsOn: aGtkTreeView with: anArray [
-        <category: '*VisualGST'>
-
-        | colView i render |
-        i := 0.
-        anArray do: [ :each |
-            colView := GtkTreeViewColumn new.
-            each do: [ :column |
-            column isVisible ifTrue: [
-                colView
-                    packStart: (render := column cellRenderer new) expand: false;
-                    addAttribute: render attribute: column kindName column: i.
-                column hasTitle ifTrue: [ colView setTitle: column title ].
-                i := i + 1 ] ].
-            aGtkTreeView insertColumn: colView position: -1 ]
-    ]
-
-    createListWithModel: anArray [
-        <category: '*VisualGST'>
-
-        | view |
-        view := self createListViewWith: anArray.
-        self createColumnsOn: view with: anArray.
- ^ view
-    ]
-
-    createTreeWithModel: anArray [
- <category: '*VisualGST'>
-
- | view |
-        view := self createTreeViewWith: anArray.
-        self createColumnsOn: view with: anArray.
- ^ view
-    ]
-]
-
-GTK.GtkTreeView extend [
-    | model |
-
-    model: aGtkModel [
- <category: 'accessing'>
-
- model := aGtkModel
-    ]
-
-    model [
- <category: 'accessing'>
-
- ^ model
-    ]
-
-    selection [
- <category: 'accessing'>
-
-        | iter string |
-        (iter := self selectedIter) ifNil: [ ^ self error: 'nothing is selected' ].
- ^ (self getModel at: iter) last
-    ]
-
-    selections [
- <category: 'accessing'>
-
- | glist result |
- result := OrderedCollection new.
- (glist := self getSelection getSelectedRows: nil) ifNil: [ ^ result ].
- glist do: [ :each | | iter path |
-    path := each castTo: GTK.GtkTreePath type.
-    iter := self getModel getIter: path.
-    result add: ((self getModel at: iter) last) ].
- ^ result
-    ]
-
-    select: anObject [
- <category: 'accessing'>
-
-        self getSelection unselectAll.
- self getModel do: [ :elem :iter |
-    elem last = anObject ifTrue: [
-                    self scrollToCell: (self getModel getPath: iter) column: nil useAlign: false rowAlign: 0.5 colAlign: 0.5.
-                    ^ self getSelection selectIter: iter ] ].
-    ]
-
-    selectNth: anInteger [
- <category: 'accessing'>
-
-        | path iter |
-        self getSelection unselectAll.
-        anInteger = 0 ifTrue: [^self].
-        path := GtkTreePath newFromIndices: {anInteger - 1. -1}.
- (self getModel getIter: path) isNil ifTrue: [^self].
-        self scrollToCell: path column: nil useAlign: false rowAlign: 0.5 colAlign: 0.5.
-        self getSelection selectPath: path
-    ]
-
-    selectFirstItem [
- <category: 'accessing'>
-
- | selection |
- (selection := self getSelection) unselectAll.
-        selection unselectAll.
-        selection selectIter: self getModel getIterFirst
-    ]
-
-    selectLastItem [
- <category: 'accessing'>
-
- | selection |
- (selection := self getSelection) unselectAll.
- selection unselectAll.
-        selection selectIter: self getModel getIterLast
-    ]
-]
-
 GTK.GtkDialog extend [
 
     showModal [
diff --git a/packages/visualgst/GtkScrollTreeWidget.st b/packages/visualgst/GtkScrollTreeWidget.st
deleted file mode 100644
index 5adb618..0000000
--- a/packages/visualgst/GtkScrollTreeWidget.st
+++ /dev/null
@@ -1,48 +0,0 @@
-GTKTools.GtkConcreteWidget subclass: GtkScrollTreeWidget [
-
-    GtkScrollTreeWidget class >> createListWithModel: anObject [
- <category: 'instance creation'>
-
- ^ self basicNew
- treeView: (GTK.GtkTreeView createListWithModel: anObject);
- initialize;
- yourself
-    ]
-
-    GtkScrollTreeWidget class >> createTreeWithModel: anObject [
-        <category: 'instance creation'>
-
-        ^ self basicNew
-                treeView: (GTK.GtkTreeView createTreeWithModel: anObject);
-                initialize;
-                yourself
-    ]
-
-    | treeView |
-
-    initialize [
- <category:'initialize'>
-
- popupMenu := [ :value | ].
- self buildTreeView.
- self mainWidget: (GTK.GtkScrolledWindow withChild: self treeView)
-    ]
-
-    buildTreeView [
- <category: 'user interface'>
-
-    ]
-
-    treeView: aGtkTreeView [
- <category: 'accessing'>
-
- treeView := aGtkTreeView.
-    ]
-
-    treeView [
- <category: 'accessing'>
-
- ^ treeView
-    ]
-]
-
diff --git a/packages/visualgst/GtkSimpleListWidget.st b/packages/visualgst/GtkSimpleListWidget.st
deleted file mode 100644
index fba980e..0000000
--- a/packages/visualgst/GtkSimpleListWidget.st
+++ /dev/null
@@ -1,17 +0,0 @@
-GtkScrollTreeWidget subclass: GtkSimpleListWidget [
-
-    GtkSimpleListWidget class >> named: aString [
- <category: 'instance creation'>
-
- ^ self createListWithModel: {{GtkColumnTextType title: aString}}
-    ]
-
-    buildTreeView [
-        <category: 'user interface'>
-
-        self treeView getSelection setMode: GTK.Gtk gtkSelectionBrowse.
-        (GTKTools.GtkListModel on: self treeView getModel)
-                                        contentsBlock: [ :each | {each displayString} ]
-    ]
-]
-
diff --git a/packages/visualgst/Makefile.frag b/packages/visualgst/Makefile.frag
index 5cc7fa0..5058822 100644
--- a/packages/visualgst/Makefile.frag
+++ b/packages/visualgst/Makefile.frag
@@ -1,5 +1,5 @@
 VisualGST_FILES = \
-packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkScrollTreeWidget.st packages/visualgst/GtkSimpleListWidget.st packages/visualgst/GtkEntryWidget
 .st packages/visualgst/Model/GtkColumnType.st packages/visualgst/Model/GtkColumnTextType.st packages/visualgst/Model/GtkColumnPixbufType.st packages/visualgst/Model/GtkColumnOOPType.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st packages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/BrowserState.st packages/visualgst/State/NamespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/St
 ate/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWidget.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/visualgst/Source/SourceFormatter.st packages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source
 /ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/WorkspaceVariableTracker.st packages/visualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCom
 mand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st packages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st packages/visualgst/Implementors/GtkImageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/Gtk
 SenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debugger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st packages/visualgst/Tetris/TetrisPieceZ.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnit
 ResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st packages/visualgst/Commands/WorkspaceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Comma
 nds/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png packages/visualgst/Icons/extension.png packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png pa
 ckages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/GtkScrollTreeWidgetTest.st packages/visualgst/Tests/MenuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/GtkSimpleListWidgetTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
+packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkEntryWidget.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st pack
 ages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/BrowserState.st packages/visualgst/State/NamespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/State/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWid
 get.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/visualgst/Source/SourceFormatter.st packages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source/ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/
 AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/WorkspaceVariableTracker.st packages/visualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCommand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st pack
 ages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st packages/visualgst/Implementors/GtkImageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/GtkSenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debu
 gger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st packages/visualgst/Tetris/TetrisPieceZ.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnitResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Co
 mmands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st packages/visualgst/Commands/WorkspaceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go
 -home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png packages/visualgst/Icons/extension.png packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png packages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/Me
 nuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
 $(VisualGST_FILES):
 $(srcdir)/packages/visualgst/stamp-classes: $(VisualGST_FILES)
  touch $(srcdir)/packages/visualgst/stamp-classes
diff --git a/packages/visualgst/Model/GtkColumnOOPType.st b/packages/visualgst/Model/GtkColumnOOPType.st
deleted file mode 100644
index 2959368..0000000
--- a/packages/visualgst/Model/GtkColumnOOPType.st
+++ /dev/null
@@ -1,21 +0,0 @@
-GtkColumnType subclass: GtkColumnOOPType [
-
-    GtkColumnOOPType class >> kind [
- <category: 'accessing'>
-
- ^ GLib.GType oopType
-    ]
-
-    GtkColumnOOPType class >> kindName [
-        <category: 'accessing'>
-
-        ^ self error: 'OOP type should not be displayed'
-    ]
-
-    GtkColumnOOPType class >> cellRenderer [
-        <category: 'accessing'>
-
-        ^ self error: 'OOP type has no cell renderer'
-    ]
-]
-
diff --git a/packages/visualgst/Model/GtkColumnPixbufType.st b/packages/visualgst/Model/GtkColumnPixbufType.st
deleted file mode 100644
index eb3e824..0000000
--- a/packages/visualgst/Model/GtkColumnPixbufType.st
+++ /dev/null
@@ -1,21 +0,0 @@
-GtkColumnType subclass: GtkColumnPixbufType [
-
-    GtkColumnPixbufType class >> kind [
- <category: 'accessing'>
-
- ^ GTK.GdkPixbuf getType
-    ]
-
-    GtkColumnPixbufType class >> kindName [
-        <category: 'accessing'>
-
-        ^ 'pixbuf'
-    ]
-
-    GtkColumnPixbufType class >> cellRenderer [
-        <category: 'accessing'>
-
-        ^ GTK.GtkCellRendererPixbuf
-    ]
-]
-
diff --git a/packages/visualgst/Model/GtkColumnTextType.st b/packages/visualgst/Model/GtkColumnTextType.st
deleted file mode 100644
index 51ff3a1..0000000
--- a/packages/visualgst/Model/GtkColumnTextType.st
+++ /dev/null
@@ -1,21 +0,0 @@
-GtkColumnType subclass: GtkColumnTextType [
-
-    GtkColumnTextType class >> kind [
- <category: 'accessing'>
-
- ^ GTK.GValue gTypeString
-    ]
-
-    GtkColumnTextType class >> kindName [
-        <category: 'accessing'>
-
-        ^ 'text'
-    ]
-
-    GtkColumnTextType class >> cellRenderer [
-        <category: 'accessing'>
-
-        ^ GTK.GtkCellRendererText
-    ]
-]
-
diff --git a/packages/visualgst/Model/GtkColumnType.st b/packages/visualgst/Model/GtkColumnType.st
deleted file mode 100644
index 39e1a2a..0000000
--- a/packages/visualgst/Model/GtkColumnType.st
+++ /dev/null
@@ -1,107 +0,0 @@
-Object subclass: GtkColumnType [
-    | visible title |
-
-    GtkColumnType class >> kind [
- <category: 'accessing'>
-
- ^ self subclassResponsibility
-    ]
-
-    GtkColumnType class >> kindName [
-        <category: 'accessing'>
-
-        ^ self subclassResponsibility
-    ]
-
-    GtkColumnType class >> cellRenderer [
- <category: 'accessing'>
-
- ^ self subclassResponsibility
-    ]
-
-    GtkColumnType class >> new [
- <category: 'instance creation'>
-
- ^ self error: 'should not call new'
-    ]
-
-    GtkColumnType class >> hidden [
-        <category: 'instance creation'>
-
-        ^ self basicNew
-            initialize;
-            yourself
-    ]
-
-    GtkColumnType class >> visible [
-        <category: 'instance creation'>
-
-        ^ self basicNew
-            initialize;
-    visible: true;
-            yourself
-    ]
-
-    GtkColumnType class >> title: aString [
- <category: 'instance creation'>
-
- ^ self basicNew
-    title: aString;
-    visible: true;
-    yourself
-    ]
-
-    initialize [
- <category: 'initialization'>
-
- visible := false
-    ]
-
-    kind [
- <category: 'accessing'>
-
- ^ self class kind
-    ]
-
-    kindName [
-        <category: 'accessing'>
-
-        ^ self class kindName
-    ]
-
-    cellRenderer [
-        <category: 'accessing'>
-
-        ^ self class cellRenderer
-    ]
-
-    visible: aBoolean [
- <category: 'accessing'>
-
- visible := aBoolean
-    ]
-
-    isVisible [
- <category: 'testing'>
-
- ^ visible
-    ]
-
-    hasTitle [
- <category: 'testing'>
-
- ^ title isNil not
-    ]
-
-    title: aString [
- <category: 'accessing'>
-
- title := aString
-    ]
-
-    title [
- <category: 'accessing'>
-
- ^ title
-    ]
-]
diff --git a/packages/visualgst/Tests/GtkScrollTreeWidgetTest.st b/packages/visualgst/Tests/GtkScrollTreeWidgetTest.st
deleted file mode 100644
index e239556..0000000
--- a/packages/visualgst/Tests/GtkScrollTreeWidgetTest.st
+++ /dev/null
@@ -1,19 +0,0 @@
-TestCase subclass: GtkScrollTreeWidgetTest [
-
-    testAccessing [
- <category: 'testing'>
-
- | widget |
- widget := GtkScrollTreeWidget basicNew.
- widget treeView: 123.
- self assert: widget treeView = 123
-    ]
-
-    testPopupConnection [
- <category: 'testing'>
-
-        | widget |
-        widget := GtkScrollTreeWidget createListWithModel: {{GtkColumnTextType title: 'aString'}}.
-    ]
-]
-
diff --git a/packages/visualgst/Tests/GtkSimpleListWidgetTest.st b/packages/visualgst/Tests/GtkSimpleListWidgetTest.st
deleted file mode 100644
index ba8e153..0000000
--- a/packages/visualgst/Tests/GtkSimpleListWidgetTest.st
+++ /dev/null
@@ -1,11 +0,0 @@
-TestCase subclass: GtkSimpleListWidgetTest [
-
-    testInstanceCreation [
- <category: 'testing'>
-
- | widget |
- widget := GtkSimpleListWidget named: 'foo'.
- self assert: widget treeView isNil not
-    ]
-]
-
diff --git a/packages/visualgst/package.xml b/packages/visualgst/package.xml
index 10c1c4e..3ab496d 100644
--- a/packages/visualgst/package.xml
+++ b/packages/visualgst/package.xml
@@ -15,10 +15,8 @@
     <filein>Tests/CompiledMethodTest.st</filein>
     <filein>Tests/ExtractLiteralsTest.st</filein>
     <filein>Tests/CategoryTest.st</filein>
-    <filein>Tests/GtkScrollTreeWidgetTest.st</filein>
     <filein>Tests/MenuBuilderTest.st</filein>
     <filein>Tests/GtkAssistantTest.st</filein>
-    <filein>Tests/GtkSimpleListWidgetTest.st</filein>
     <filein>Tests/EmptyTest.st</filein>
     <filein>Tests/AddClassUndoCommandTest.st</filein>
     <filein>Tests/GtkCategoryWidgetTest.st</filein>
@@ -32,10 +30,8 @@
     <file>Tests/CompiledMethodTest.st</file>
     <file>Tests/ExtractLiteralsTest.st</file>
     <file>Tests/CategoryTest.st</file>
-    <file>Tests/GtkScrollTreeWidgetTest.st</file>
     <file>Tests/MenuBuilderTest.st</file>
     <file>Tests/GtkAssistantTest.st</file>
-    <file>Tests/GtkSimpleListWidgetTest.st</file>
     <file>Tests/EmptyTest.st</file>
     <file>Tests/AddClassUndoCommandTest.st</file>
     <file>Tests/GtkCategoryWidgetTest.st</file>
@@ -50,11 +46,9 @@
       VisualGST.CompiledMethodTest
       VisualGST.ExtractLiteralsTest
       VisualGST.CategoryTest
-      VisualGST.GtkScrollTreeWidgetTest
       VisualGST.Test
       VisualGST.MenuBuilderTest
       VisualGST.GtkAssistantTest
-      VisualGST.GtkSimpleListWidgetTest
       VisualGST.EmptyTest
       VisualGST.AddClassUndoCommandTest
       VisualGST.GtkCategoryWidgetTest
@@ -157,13 +151,7 @@
   <filein>Category/ClassCategory.st</filein>
   <filein>Category/AbstractNamespace.st</filein>
   <filein>Category/Class.st</filein>
-  <filein>GtkScrollTreeWidget.st</filein>
-  <filein>GtkSimpleListWidget.st</filein>
   <filein>GtkEntryWidget.st</filein>
-  <filein>Model/GtkColumnType.st</filein>
-  <filein>Model/GtkColumnTextType.st</filein>
-  <filein>Model/GtkColumnPixbufType.st</filein>
-  <filein>Model/GtkColumnOOPType.st</filein>
   <filein>GtkTreeModel.st</filein>
   <filein>Text/GtkTextWidget.st</filein>
   <filein>GtkPackageBuilderWidget.st</filein>
@@ -375,13 +363,7 @@
   <file>Category/ClassCategory.st</file>
   <file>Category/AbstractNamespace.st</file>
   <file>Category/Class.st</file>
-  <file>GtkScrollTreeWidget.st</file>
-  <file>GtkSimpleListWidget.st</file>
   <file>GtkEntryWidget.st</file>
-  <file>Model/GtkColumnType.st</file>
-  <file>Model/GtkColumnTextType.st</file>
-  <file>Model/GtkColumnPixbufType.st</file>
-  <file>Model/GtkColumnOOPType.st</file>
   <file>GtkTreeModel.st</file>
   <file>Text/GtkTextWidget.st</file>
   <file>GtkPackageBuilderWidget.st</file>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 13/15] gtktools: Move the Clock/Tetris to the GTKTools

Holger Freyther
In reply to this post by Holger Freyther
One can now use gst-run --start GTKTools-Example-Tetris to start
the tetris game.
---
 .gitignore                                         |    2 +
 configure.ac                                       |    2 +
 packages/gtktools/Examples/Clock/GtkClock.st       |  165 +++++++++
 packages/gtktools/Examples/Clock/Makefile.frag     |    5 +
 packages/gtktools/Examples/Clock/package.xml       |    9 +
 packages/gtktools/Examples/Tetris/BlockWidget.st   |   44 +++
 packages/gtktools/Examples/Tetris/HighScores.st    |   36 ++
 packages/gtktools/Examples/Tetris/Makefile.frag    |    5 +
 packages/gtktools/Examples/Tetris/Score.st         |   24 ++
 packages/gtktools/Examples/Tetris/Tetris.st        |  390 +++++++++++++++++++
 packages/gtktools/Examples/Tetris/TetrisField.st   |  179 +++++++++
 .../gtktools/Examples/Tetris/TetrisFieldWidget.st  |   57 +++
 packages/gtktools/Examples/Tetris/TetrisPiece.st   |  174 +++++++++
 packages/gtktools/Examples/Tetris/TetrisPieceI.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceJ.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceL.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceO.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceS.st  |   61 +++
 packages/gtktools/Examples/Tetris/TetrisPieceT.st  |   60 +++
 .../gtktools/Examples/Tetris/TetrisPieceWidget.st  |   57 +++
 packages/gtktools/Examples/Tetris/TetrisPieceZ.st  |   61 +++
 packages/gtktools/Examples/Tetris/package.xml      |   23 ++
 packages/visualgst/Clock/GtkClock.st               |  165 ---------
 packages/visualgst/Makefile.frag                   |    2 +-
 packages/visualgst/Tetris/BlockWidget.st           |   44 ---
 packages/visualgst/Tetris/HighScores.st            |   37 --
 packages/visualgst/Tetris/Score.st                 |   25 --
 packages/visualgst/Tetris/Tetris.st                |  391 --------------------
 packages/visualgst/Tetris/TetrisField.st           |  180 ---------
 packages/visualgst/Tetris/TetrisFieldWidget.st     |   57 ---
 packages/visualgst/Tetris/TetrisPiece.st           |  175 ---------
 packages/visualgst/Tetris/TetrisPieceI.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceJ.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceL.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceO.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceS.st          |   62 ----
 packages/visualgst/Tetris/TetrisPieceT.st          |   60 ---
 packages/visualgst/Tetris/TetrisPieceWidget.st     |   57 ---
 packages/visualgst/Tetris/TetrisPieceZ.st          |   62 ----
 packages/visualgst/package.xml                     |   30 --
 40 files changed, 1599 insertions(+), 1594 deletions(-)
 create mode 100644 packages/gtktools/Examples/Clock/GtkClock.st
 create mode 100644 packages/gtktools/Examples/Clock/Makefile.frag
 create mode 100644 packages/gtktools/Examples/Clock/package.xml
 create mode 100644 packages/gtktools/Examples/Tetris/BlockWidget.st
 create mode 100644 packages/gtktools/Examples/Tetris/HighScores.st
 create mode 100644 packages/gtktools/Examples/Tetris/Makefile.frag
 create mode 100644 packages/gtktools/Examples/Tetris/Score.st
 create mode 100644 packages/gtktools/Examples/Tetris/Tetris.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisField.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisFieldWidget.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPiece.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceI.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceJ.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceL.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceO.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceS.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceT.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceWidget.st
 create mode 100644 packages/gtktools/Examples/Tetris/TetrisPieceZ.st
 create mode 100644 packages/gtktools/Examples/Tetris/package.xml
 delete mode 100644 packages/visualgst/Clock/GtkClock.st
 delete mode 100644 packages/visualgst/Tetris/BlockWidget.st
 delete mode 100644 packages/visualgst/Tetris/HighScores.st
 delete mode 100644 packages/visualgst/Tetris/Score.st
 delete mode 100644 packages/visualgst/Tetris/Tetris.st
 delete mode 100644 packages/visualgst/Tetris/TetrisField.st
 delete mode 100644 packages/visualgst/Tetris/TetrisFieldWidget.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPiece.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceI.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceJ.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceL.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceO.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceS.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceT.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceWidget.st
 delete mode 100644 packages/visualgst/Tetris/TetrisPieceZ.st

diff --git a/.gitignore b/.gitignore
index 8e8fe08..d7a3ac0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,6 +63,8 @@ packages/gtk/sizeof
 packages/gtk/sizeof.c
 packages/gtk/structs
 packages/gtktools/stamp-classes
+packages/gtktools/Examples/Clock/stamp-classes
+packages/gtktools/Examples/Tetris/stamp-classes
 packages/i18n/ref-add.sed
 packages/i18n/ref-del.sed
 packages/net/gnutls-wrapper
diff --git a/configure.ac b/configure.ac
index 5305622..c447b1c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -588,6 +588,8 @@ GST_PACKAGE_ENABLE([Swazoo], [swazoo-httpd])
 GST_PACKAGE_ENABLE([Sockets], [sockets], [], [gst_cv_sockets])
 GST_PACKAGE_ENABLE([VFSAddOns], [vfs], [], [], [Makefile])
 GST_PACKAGE_ENABLE([GTKTools], [gtktools])
+GST_PACKAGE_ENABLE([GTKTools-Example-Clock], [gtktools/Examples/Clock])
+GST_PACKAGE_ENABLE([GTKTools-Example-Tetris], [gtktools/Examples/Tetris])
 GST_PACKAGE_ENABLE([VisualGST], [visualgst])
 GST_PACKAGE_ENABLE([XML-XMLNodeBuilder], [xml/builder])
 GST_PACKAGE_ENABLE([XML-DOM], [xml/dom])
diff --git a/packages/gtktools/Examples/Clock/GtkClock.st b/packages/gtktools/Examples/Clock/GtkClock.st
new file mode 100644
index 0000000..42e0624
--- /dev/null
+++ b/packages/gtktools/Examples/Clock/GtkClock.st
@@ -0,0 +1,165 @@
+Smalltalk.Object subclass: GtkClock [
+    | canvas hour minute process radius second window x y |
+
+    GtkClock class >> open [
+ <category: 'user interface'>
+
+ ^ (self new)
+    initialize;
+    showAll;
+    yourself
+    ]
+
+    GtkClock class >> openSized: aPoint [
+ <category: 'user interface'>
+
+ ^ (self new)
+    initialize;
+    resize: aPoint;
+    showAll;
+    yourself
+    ]
+
+    quit [
+ <category: 'events'>
+
+ process terminate.
+ window hide
+    ]
+
+    time [
+ <category: 'time'>
+
+ | now |
+ now := DateTime now.
+        hour := now hour.
+        minute := now minute.
+        second := now second.
+    ]
+
+    clearArea: aGtkAllocation [
+ <category: 'drawing'>
+
+ | res |
+        res := aGtkAllocation castTo: (CIntType arrayType: 4).
+
+        canvas saveWhile: [
+            canvas
+                rectangle: ((0@0) extent: ((res at: 2) @ (res at: 3)));
+                operator: #clear;
+                fill ]
+    ]
+
+    drawClockCircle: context [
+ <category: 'drawing'>
+
+        context
+            lineWidth: 6;
+            stroke: [ context arc: x@y radius: radius from: 0 to: Float pi * 2 ]
+    ]
+
+    drawHourMarker: context [
+ <category: 'drawing'>
+
+        1 to: 12 do: [ :i |
+            context
+                lineWidth: 4;
+                stroke: [ | inset |
+                    inset := 0.1 * radius.
+                    context
+                        moveTo: (x + ((radius - inset) * (i * Float pi / 6.0) cos)) @ (y + ((radius - inset) * (i * Float pi / 6.0) sin));
+                        lineTo: (x + (radius * (i * Float pi / 6.0) cos)) @ (y + (radius * (i * Float pi / 6.0) sin)) ] ]
+    ]
+
+    drawClockLine: context angle: anAngFloat [
+ <category: 'drawing'>
+
+        context
+            lineWidth: 4;
+            paint: [
+                context stroke: [
+                    context
+                        sourceRed: 1 green: 0.2 blue: 0.2 alpha: 1.0;
+                        moveTo: x@y;
+                        lineTo: (x + (radius * anAngFloat  cos)) @ (y + (radius * anAngFloat sin)) ] ]
+            withAlpha: 0.64
+    ]
+
+    drawHourLine: context [
+ <category: 'drawing'>
+
+ self drawClockLine: context angle: (hour \\ 12 * (Float pi / 6.0)) - (Float pi / 2.0).
+    ]
+
+    drawMinuteLine: context [
+ <category: 'drawing'>
+
+ self drawClockLine: context angle: (minute * (Float pi / 30.0)) - (Float pi / 2.0)
+    ]
+
+    drawSecondLine: context [
+ <category: 'drawing'>
+
+ self drawClockLine: context angle: (second * (Float pi / 30.0)) - (Float pi / 2.0)
+    ]
+
+    drawClock: context [
+ <category: 'drawing'>
+
+ self
+            drawClockCircle: context;
+            drawHourMarker: context;
+            drawHourLine: context;
+            drawMinuteLine: context;
+            drawSecondLine: context
+    ]
+
+    expose: aGtkWidget event: aGdkEventExpose [
+
+ aGtkWidget getWindow withContextDo: [ :cr |
+    canvas := cr.
+
+    x := 128.
+    y := 128.
+
+    self
+ clearArea: aGtkWidget getAllocation;
+ time;
+ drawClock: cr ].
+
+ ^ true
+    ]
+
+    initialize [
+ <category: 'intialization'>
+
+ window := (GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel).
+ window
+    setColormap: window getScreen getRgbaColormap;
+    connectSignal: 'expose_event' to: self selector: #'expose:event:';
+    connectSignal: 'delete-event' to: self selector: #'delete:event:';
+    setDecorated: false.
+ radius := 100
+    ]
+
+    delete: aGtkWidget event: aGdkEvent [
+        <category: 'windows event'>
+
+        self quit.
+        ^ true
+    ]
+
+    resize: aPoint [
+ <category: 'user interface'>
+
+ window resize: aPoint x height: aPoint y
+    ]
+
+    showAll [
+ | delay |
+
+ delay := Delay forSeconds: 1.
+ window showAll.
+ process := [ [ true ] whileTrue: [ window queueDraw. delay wait ] ] fork
+    ]
+]
diff --git a/packages/gtktools/Examples/Clock/Makefile.frag b/packages/gtktools/Examples/Clock/Makefile.frag
new file mode 100644
index 0000000..44a1b4b
--- /dev/null
+++ b/packages/gtktools/Examples/Clock/Makefile.frag
@@ -0,0 +1,5 @@
+GTKTools-Example-Clock_FILES = \
+packages/gtktools/Examples/Clock/GtkClock.st
+$(GTKTools-Example-Clock_FILES):
+$(srcdir)/packages/gtktools/Examples/Clock/stamp-classes: $(GTKTools-Example-Clock_FILES)
+ touch $(srcdir)/packages/gtktools/Examples/Clock/stamp-classes
diff --git a/packages/gtktools/Examples/Clock/package.xml b/packages/gtktools/Examples/Clock/package.xml
new file mode 100644
index 0000000..dbde9cc
--- /dev/null
+++ b/packages/gtktools/Examples/Clock/package.xml
@@ -0,0 +1,9 @@
+<package>
+    <name>GTKTools-Example-Clock</name>
+    <namespace>Clock</namespace>
+    <prereq>GTKTools</prereq>
+
+    <filein>GtkClock.st</filein>
+    <start>Clock.GtkClock open.
+    GTK.Gtk main</start>
+</package>
diff --git a/packages/gtktools/Examples/Tetris/BlockWidget.st b/packages/gtktools/Examples/Tetris/BlockWidget.st
new file mode 100644
index 0000000..d5ff04c
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/BlockWidget.st
@@ -0,0 +1,44 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPieceWidget subclass: BlockWidget [
+
+    drawOn: aCanvas [
+ <category: 'drawing'>
+
+ | linear |
+        linear := Cairo.LinearGradient from: position to: (position x + size@ position y + size).
+        linear addStopAt: 0 color: color.
+        linear addStopAt: 1 color: Cairo.Color black.
+
+        aCanvas
+            fill: [ aCanvas rectangle: (position extent: size@size) ]
+            with: linear
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/HighScores.st b/packages/gtktools/Examples/Tetris/HighScores.st
new file mode 100644
index 0000000..6c21313
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/HighScores.st
@@ -0,0 +1,36 @@
+Object subclass: HighScores [
+
+    | highScores maxScores |
+
+    HighScores class >> newSized: anInteger [
+ <category: 'instance creation'>
+
+ ^ self new
+    maxScores: anInteger;
+    yourself
+    ]
+
+    highScores [
+ <category: 'accessing'>
+
+ ^ highScores ifNil: [ highScores := OrderedCollection new ]
+    ]
+
+    maxScores: anInteger [
+ <category: 'accessing'>
+
+ maxScores := anInteger
+    ]
+
+    addScore: aScore [
+ <category: 'updating'>
+
+ | pos |
+ pos := 0.
+ self highScores doWithIndex: [ :each :index |
+    each < index ifTrue: [ pos := index ] ].
+ pos = 0 ifTrue: [ ^ self ].
+ self highScores add: aScore after: pos.
+ self highScores size > self maxScores ifTrue: [ self highScores removeLast ]
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/Makefile.frag b/packages/gtktools/Examples/Tetris/Makefile.frag
new file mode 100644
index 0000000..a186062
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/Makefile.frag
@@ -0,0 +1,5 @@
+GTKTools-Example-Tetris_FILES = \
+packages/gtktools/Examples/Tetris/HighScores.st packages/gtktools/Examples/Tetris/Score.st packages/gtktools/Examples/Tetris/TetrisPieceWidget.st packages/gtktools/Examples/Tetris/BlockWidget.st packages/gtktools/Examples/Tetris/TetrisField.st packages/gtktools/Examples/Tetris/TetrisPiece.st packages/gtktools/Examples/Tetris/TetrisPieceI.st packages/gtktools/Examples/Tetris/TetrisPieceJ.st packages/gtktools/Examples/Tetris/TetrisPieceL.st packages/gtktools/Examples/Tetris/TetrisPieceO.st packages/gtktools/Examples/Tetris/TetrisPieceS.st packages/gtktools/Examples/Tetris/TetrisPieceT.st packages/gtktools/Examples/Tetris/TetrisPieceZ.st packages/gtktools/Examples/Tetris/Tetris.st
+$(GTKTools-Example-Tetris_FILES):
+$(srcdir)/packages/gtktools/Examples/Tetris/stamp-classes: $(GTKTools-Example-Tetris_FILES)
+ touch $(srcdir)/packages/gtktools/Examples/Tetris/stamp-classes
diff --git a/packages/gtktools/Examples/Tetris/Score.st b/packages/gtktools/Examples/Tetris/Score.st
new file mode 100644
index 0000000..967e7df
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/Score.st
@@ -0,0 +1,24 @@
+Object subclass: Score [
+
+    Score class >> score: anInteger [
+ <category: 'instance creation'>
+
+ ^ self new
+    score: anInteger;
+    yourself
+    ]
+
+    | score |
+
+    score: anInteger [
+ <category: 'accessing'>
+
+ score := anInteger
+    ]
+
+    score [
+ <category: 'acccessing'>
+
+ ^ score
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/Tetris.st b/packages/gtktools/Examples/Tetris/Tetris.st
new file mode 100644
index 0000000..358047e
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/Tetris.st
@@ -0,0 +1,390 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+GTKTools.GtkMainWindow subclass: Tetris [
+    | canvasWidget canvas process pause delay grid movingBlocks level score level lines |
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    Tetris class [ | highScores | ]
+
+    Tetris class >> highScores [
+ <category: 'accessing'>
+
+ ^ highScores ifNil: [ highScores := HighScores newSized: 10 ]
+    ]
+
+    Tetris class >> open [
+ <category: 'user interface'>
+
+ TetrisPiece initialize.
+
+ ^ super open
+    play;
+    yourself
+    ]
+
+    initialize [
+ <category: 'initialization'>
+
+ movingBlocks := false.
+ super initialize.
+    ]
+
+    windowTitle [
+ <category: 'initialization'>
+
+ ^'Tetris'
+    ]
+
+    postInitialize [
+ <category: 'initialization'>
+
+ super postInitialize.
+        canvasWidget grabFocus.
+ window
+    connectSignal: 'key-press-event' to: self selector: #'keyPressedOn:keyEvent:'
+    ]
+
+    onDelete [
+ <category: 'windows event'>
+
+ self quit.
+ ^ true
+    ]
+
+    createHelpMenus [
+        <category: 'user interface'>
+
+        ^{GTK.GtkMenuItem menuItem: 'About Tetris' connectTo: self selector: #aboutLauncher.
+            GTK.GtkMenuItem menuItem: 'About GNU Smalltalk' connectTo: self selector: #aboutGst}
+    ]
+
+    createMenus [
+        <category: 'user interface'>
+
+        self createMainMenu: #(#('Help' #createHelpMenus))
+    ]
+
+    buildCentralWidget [
+ <category: 'user interface'>
+
+ ^ canvasWidget := GTK.GtkDrawingArea new
+    setSizeRequest: 400 height: 700;
+    connectSignal: 'expose_event' to: self selector: #'expose:event:';
+    yourself
+    ]
+
+    clearArea: aGtkAllocation [
+        <category: 'drawing'>
+
+        | res |
+        res := aGtkAllocation castTo: (CIntType arrayType: 4).
+
+        canvas saveWhile: [
+    canvas
+                rectangle: ((0@0) extent: ((res at: 2) @ (res at: 3)));
+                operator: #clear;
+                fill ]
+    ]
+
+    drawArea [
+ <category: 'drawing'>
+
+ 1 to: 22 do: [ :i |
+    BlockWidget new
+ position: 50@(50 + ((i - 1) * 15));
+ size: 15;
+ color: Cairo.Color white;
+ drawOn: canvas.
+
+            BlockWidget new
+                position: (50 + (11 * 15))@(50 + ((i - 1) * 15));
+                size: 15;
+ color: Cairo.Color white;
+                drawOn: canvas ].
+
+ 1 to: 12 do: [ :i |
+            BlockWidget new
+                position: (50 + ((i - 1) * 15))@50;
+                size: 15;
+ color: Cairo.Color white;
+                drawOn: canvas.
+
+            BlockWidget new
+                position: (50 + ((i - 1) * 15))@(50 + (22 * 15));
+                size: 15;
+ color: Cairo.Color white;
+                drawOn: canvas ]
+    ]
+
+    drawGrid [
+ <category: 'drawing'>
+
+ grid ifNil: [ ^ self ].
+ grid drawOn: canvas
+    ]
+
+    drawScore [
+ <category: 'drawing'>
+
+ canvas
+    moveTo: 300@100;
+    sourceRed: 1 green: 1 blue: 1;
+    showText: 'Score : ', (self score displayString);
+    moveTo: 300@150;
+    showText: 'Level : ', (self level displayString);
+    stroke.
+    ]
+
+    expose: aGtkWidget event: aGdkEventExpose [
+ <category: 'drawing event'>
+
+ aGtkWidget getWindow withContextDo: [ :cr |
+            canvas := cr.
+            self
+                clearArea: aGtkWidget getAllocation;
+ drawArea;
+ drawGrid;
+ drawScore ].
+
+        ^ true
+    ]
+
+    keyPressedOn: aGtkWidget keyEvent: aGdkEventKey [
+ <category: 'key event'>
+
+ | event |
+ movingBlocks ifFalse: [ ^ false ].
+
+ event := aGdkEventKey castTo: GTK.GdkEventKey type.
+
+ event keyval value = 65361 ifTrue: [ self movePieceLeft. ^ true ].
+ event keyval value = 65363 ifTrue: [ self movePieceRight. ^ true ].
+ event keyval value = 65362 ifTrue: [ self rotatePiece. ^ true ].
+ event keyval value = 65364 ifTrue: [ self dropPiece. ^ true ].
+
+ ^ false
+    ]
+
+    refresh [
+ <category: 'drawing'>
+
+ canvasWidget queueDraw
+    ]
+
+    cycle [
+ <category: 'game'>
+
+ | result filledLines |
+ grid := TetrisField new.
+ [ movingBlocks := true.
+  result := grid currentPiece: TetrisPiece random.
+  result ifTrue: [ self
+    refresh;
+    delay ].
+  result ] whileTrue: [
+ [ result := self slidePiece.
+  self refresh.
+  result ] whileTrue: [ self delay ].
+  filledLines := self
+    resetMovingBlocks;
+    cementPiece;
+    removeLines.
+  self updateScore: filledLines.
+  Processor yield ].
+
+ ^ self gameOver
+    ]
+
+    initializeGame [
+ <category: 'game'>
+
+ self
+    level: 1;
+    lines: 0;
+    score: 0.
+ movingBlocks := true
+    ]
+
+    play [
+ <category: 'game'>
+
+ process := [ self
+ initializeGame;
+ cycle ] fork.
+    ]
+
+    quit [
+ <category: 'game'>
+
+ process terminate.
+ window hideAll
+    ]
+
+    gameOver [
+ <category: 'game'>
+
+ self highScores addScore: (Score score: self score)
+    ]
+
+    resetMovingBlocks [
+ <category: 'game'>
+
+ movingBlocks := false
+    ]
+
+    delay [
+ "I like this method a lot!"
+
+ <category: 'private'>
+ delay wait.
+
+ "Especially this semaphore!!
+ pause wait.
+ pause signal"
+    ]
+
+    highScores [
+ <category: 'accessing'>
+
+ ^ self class highScores
+    ]
+
+    level [
+ <category: 'accessing'>
+
+ ^ level
+    ]
+
+    level: nextLevel [
+ <category: 'private'>
+
+ level := nextLevel min: 10.
+ delay := Delay forMilliseconds: 825 - (75 * level).
+    ]
+
+    lines [
+ <category: 'private'>
+
+ ^ lines
+    ]
+
+    lines: newLines [
+ <category: 'private'>
+
+ lines := newLines
+    ]
+
+    score [
+ <category: 'private'>
+
+ ^ score
+    ]
+
+    score: newScore [
+ <category: 'private'>
+
+ score := newScore
+    ]
+
+    updateScore: filledLines [
+ <category: 'private'>
+
+ self lines: self lines + filledLines.
+        (self lines - 1) // 10 > (self level - 1) ifTrue: [ self advanceLevel ].
+        self score: 2 * self level squared + (#(0 50 150 400 900) at: filledLines + 1) + self score
+    ]
+
+    advanceLevel [
+ <category: 'events'>
+
+ self level: self level + 1
+    ]
+
+    movePieceLeft [
+ <category: 'events'>
+
+ grid movePieceLeft.
+ self refresh
+    ]
+
+    movePieceRight [
+ <category: 'events'>
+
+ grid movePieceRight.
+ self refresh
+    ]
+
+    pause [
+ <category: 'events'>
+
+ "I like this semaphore a lot!"
+ pause wait
+    ]
+
+    restart [
+ <category: 'events'>
+
+ "I like this semaphore a lot!"
+ pause signal
+    ]
+
+    rotatePiece [
+ <category: 'events'>
+
+ grid rotatePiece.
+ self refresh
+    ]
+
+    slidePiece [
+ <category: 'events'>
+
+ ^ grid slidePiece
+    ]
+
+    cementPiece [
+ <category: 'events'>
+
+ ^ grid cementPiece
+    ]
+
+    removeLines [
+ <category: 'game'>
+
+ ^ grid removeLines
+    ]
+
+    dropPiece [
+ <category: 'events'>
+
+ ^ grid dropPiece
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisField.st b/packages/gtktools/Examples/Tetris/TetrisField.st
new file mode 100644
index 0000000..1f2fadd
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisField.st
@@ -0,0 +1,179 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+
+Object subclass: TetrisField [
+    | rows currentPiece |
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisField class >> new [
+ <category: 'instance creation'>
+
+ ^ self basicNew initialize
+    ]
+
+    at: point [
+ <category: 'accessing'>
+
+ ^ (rows at: point y) at: point x
+    ]
+
+    at: point put: value [
+ <category: 'accessing'>
+
+ ^ (rows at: point y) at: point x put: value
+    ]
+
+    initialize [
+ <category: 'initializing'>
+
+ rows := (1 to: 22) collect: [:each | ByteArray new: 10].
+ rows do: [:each | self initializeLine: each].
+ (rows at: 22) atAll: (1 to: 10) put: 1
+    ]
+
+    initializeLine: line [
+ <category: 'initializing'>
+
+ line
+    atAll: (1 to: 10) put: 0
+    ]
+
+    checkLine: y [
+ <category: 'removing filled lines'>
+
+ ^ (rows at: y) allSatisfy: [:each | each ~~ 0]
+    ]
+
+    removeLines [
+ <category: 'removing filled lines'>
+
+ | removed lastLine firstLine |
+ removed := 0.
+ firstLine := self currentPiece y.
+ lastLine := 21 min: firstLine + 3.
+ lastLine - firstLine + 1 timesRepeat:
+ [(self checkLine: lastLine)
+    ifTrue:
+ [removed := removed + 1.
+ self removeLine: lastLine]
+    ifFalse: [lastLine := lastLine - 1]].
+ ^ removed
+    ]
+
+    removeLine: filledY [
+ <category: 'removing filled lines'>
+
+ | saved y shift line |
+ saved := rows at: filledY.
+ filledY to: 2
+    by: -1
+    do: [:each | rows at: each put: (rows at: each - 1)].
+ self initializeLine: saved.
+ rows at: 1 put: saved
+    ]
+
+    cementPiece [
+ <category: 'piece'>
+
+ self currentPiece cementOn: self
+    ]
+
+    dropPiece [
+ <category: 'moving pieces'>
+
+ [ self slidePiece ] whileTrue: []
+    ]
+
+    movePieceLeft [
+ <category: 'moving pieces'>
+
+ self currentPiece x: self currentPiece x - 1.
+ ^ self currentPiece moveInto: self
+    ifFail: [self currentPiece x: self currentPiece x + 1]
+    ]
+
+    movePieceRight [
+ <category: 'moving pieces'>
+
+ self currentPiece x: self currentPiece x + 1.
+ ^ self currentPiece moveInto: self
+    ifFail: [ self currentPiece x: self currentPiece x - 1 ]
+    ]
+
+    rotatePiece [
+ <category: 'moving pieces'>
+
+ self currentPiece rotate: 1.
+ ^ self currentPiece moveInto: self ifFail: [ self currentPiece rotate: 3 ]
+    ]
+
+    slidePiece [
+ <category: 'moving pieces'>
+
+ self currentPiece y: self currentPiece y + 1.
+ ^ self currentPiece moveInto: self
+    ifFail: [self currentPiece y: self currentPiece y - 1]
+    ]
+
+    currentPiece [
+ <category: 'accessing piece variables'>
+
+ ^ currentPiece
+    ]
+
+    currentPiece: piece [
+ <category: 'accessing piece variables'>
+
+ currentPiece := piece.
+ (self currentPiece)
+    x: 4;
+    y: 1.
+
+ self currentPiece moveInto: self
+            ifFail: [ ^ false ].
+ ^ true
+    ]
+
+    drawOn: aCanvas [
+ <category: 'drawing'>
+
+ 1 to: 21 do: [ :y |
+    1 to: 10 do: [ :x |
+ ((rows at: y) at: x) ~= 0 ifTrue: [
+    BlockWidget new
+ position: (50 + (x * 15))@(50 + (y * 15));
+ size: 15;
+ color: Cairo.Color white;
+ drawOn: aCanvas ] ] ].
+ self currentPiece drawOn: aCanvas
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisFieldWidget.st b/packages/gtktools/Examples/Tetris/TetrisFieldWidget.st
new file mode 100644
index 0000000..59efbad
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisFieldWidget.st
@@ -0,0 +1,57 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+Object subclass: TetrisFieldWidget [
+
+    | position size color |
+
+    position: aPoint [
+ <category: 'accessing'>
+
+ position := aPoint
+    ]
+
+    size: anInteger [
+ <category: 'accessing'>
+
+ size := anInteger
+    ]
+
+    color: aColor [
+ <category: 'accessing'>
+
+ color := aColor
+    ]
+
+    drawOn: aCanvas [
+ <category: 'drawing'>
+
+ self subclassResponsibility
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPiece.st b/packages/gtktools/Examples/Tetris/TetrisPiece.st
new file mode 100644
index 0000000..4b1c489
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPiece.st
@@ -0,0 +1,174 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+Object subclass: TetrisPiece [
+    | rotation origin |
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    Pieces := nil.
+
+    TetrisPiece class >> pieces [
+ <category: 'accessing'>
+
+ ^ Pieces ifNil: [ Pieces := self subclasses asOrderedCollection ]
+    ]
+
+    TetrisPiece class >> random [
+ <category: 'pieces'>
+
+ | piece |
+ piece := Random between: 1 and: 7.
+ ^ (self pieces at: piece) new
+    initialize;
+    yourself
+    ]
+
+    initialize [
+ <category: 'initialization'>
+
+ rotation := 1.
+ origin := Point new
+    ]
+
+    piece [
+ <category: 'accessing'>
+
+ ^ self class piece
+    ]
+
+    color [
+ <category: 'drawing'>
+
+ ^ self class color
+    ]
+
+    cementOn: field [
+ <category: 'blocks'>
+
+        | point x y |
+        point := Point new.
+        y := 0.
+        (self piece at: rotation) do: [ :line |
+                    x := 0.
+                    line do: [ :elem |
+                        elem = 1 ifTrue: [
+                            point
+                                x: self origin x + x;
+                                y: self origin y + y.
+                            (field at: point) = 0 ifTrue: [ field at: point put: elem ] ].
+ x := x + 1 ].
+    y := y + 1].
+    ]
+
+    canMoveInto: field [
+ <category: 'moving'>
+
+ | point x y |
+ point := Point new.
+ y := 0.
+ (self piece at: rotation) do: [ :line |
+    x := 0.
+    line do: [ :elem |
+ elem = 1 ifTrue: [
+    point
+ x: self origin x + x;
+ y: self origin y + y.
+    (field at: point) > 0 ifTrue: [ ^ false ] ].
+ x := x + 1 ].
+    y := y + 1 ].
+ ^ true
+    ]
+
+    moveInto: field ifFail: aBlock [
+ <category: 'moving'>
+
+ (self canMoveInto: field) ifFalse: [ aBlock value.
+    ^ false ].
+ ^ true
+    ]
+
+    rotate: howMany [
+ "Three lines are necessary because rotation is in the 1..4 range,
+ while \\ likes a 0..3 range"
+
+ <category: 'moving'>
+ rotation := rotation - 1.
+ rotation := (rotation + howMany) \\ 4.
+ rotation := rotation + 1
+    ]
+
+    origin [
+ <category: 'accessing'>
+
+ ^ origin
+    ]
+
+    x [
+ <category: 'accessing'>
+
+ ^ self origin x
+    ]
+
+    x: x [
+ <category: 'accessing'>
+
+ self origin x: x
+    ]
+
+    y [
+ <category: 'accessing'>
+
+ ^ self origin y
+    ]
+
+    y: y [
+ <category: 'accessing'>
+
+ self origin y: y
+    ]
+
+    drawOn: aCanvas [
+ <category: 'drawing'>
+
+ | y |
+ y := 0.
+        (self piece at: rotation) do: [ :line |
+    y := y + 1.
+            1 to: 4 do: [ :x |
+                (line at: x) ~= 0 ifTrue: [
+                    BlockWidget new
+                        position: (50 + ((self x + x - 1) * 15))@(50 + ((self y + y - 1) * 15));
+                        size: 15;
+ color: self color;
+                        drawOn: aCanvas ] ] ]
+    ]
+
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceI.st b/packages/gtktools/Examples/Tetris/TetrisPieceI.st
new file mode 100644
index 0000000..772e607
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceI.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceI [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceI class >> piece [
+ <category: 'pieces'>
+
+ ^#( #( #(1 0 0 0)
+       #(1 0 0 0)
+       #(1 0 0 0)
+       #(1 0 0 0))
+    #( #(0 0 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0)
+       #(1 1 1 1))
+    #( #(1 0 0 0)
+       #(1 0 0 0)
+       #(1 0 0 0)
+       #(1 0 0 0))
+    #( #(0 0 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0)
+       #(1 1 1 1)))
+    ]
+
+    TetrisPieceI class >> color [
+ <category: 'pieces'>
+
+ ^ Cairo.Color red
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceJ.st b/packages/gtktools/Examples/Tetris/TetrisPieceJ.st
new file mode 100644
index 0000000..aa26777
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceJ.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceJ [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceJ class >> piece [
+ <category: 'pieces'>
+
+ ^#( #( #(0 1 0 0)
+       #(0 1 0 0)
+       #(1 1 0 0)
+       #(0 0 0 0))
+    #( #(1 0 0 0)
+       #(1 1 1 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 0 0)
+       #(1 0 0 0)
+       #(1 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 1 0)
+       #(0 0 1 0)
+       #(0 0 0 0)
+       #(0 0 0 0)))
+    ]
+
+    TetrisPieceJ class >> color [
+ <category: 'pieces'>
+
+ ^ Cairo.Color magenta
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceL.st b/packages/gtktools/Examples/Tetris/TetrisPieceL.st
new file mode 100644
index 0000000..5a0748f
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceL.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceL [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceL class >> piece [
+ <category: 'pieces'>
+
+ ^#( #( #(1 0 0 0)
+       #(1 0 0 0)
+       #(1 1 0 0)
+       #(0 0 0 0))
+    #( #(1 1 1 0)
+       #(1 0 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 0 0)
+       #(0 1 0 0)
+       #(0 1 0 0)
+       #(0 0 0 0))
+    #( #(0 0 1 0)
+       #(1 1 1 0)
+       #(0 0 0 0)
+       #(0 0 0 0)))
+    ]
+
+    TetrisPieceL class >> color [
+ <category: 'pieces'>
+
+ ^ Cairo.Color r: 0.74 g: 0.71 b: 0.42 "DarkKhaki"
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceO.st b/packages/gtktools/Examples/Tetris/TetrisPieceO.st
new file mode 100644
index 0000000..417502f
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceO.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceO [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceO class >> piece [
+ <category: 'pieces'>
+
+ ^#( #( #(1 1 0 0)
+       #(1 1 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 0 0)
+       #(1 1 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 0 0)
+       #(1 1 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 0 0)
+       #(1 1 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0)))
+    ]
+
+    TetrisPieceO class >> color [
+ <category: 'piece'>
+
+ ^ Cairo.Color r: 0.54 g: 0.17 b: 0.88 "BlueViolet"
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceS.st b/packages/gtktools/Examples/Tetris/TetrisPieceS.st
new file mode 100644
index 0000000..b3b242b
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceS.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceS [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceS class >> piece [
+ <category: 'pieces'>
+
+ ^#( #( #(0 1 0 0)
+       #(1 1 0 0)
+       #(1 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 0 0)
+       #(0 1 1 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(0 1 0 0)
+       #(1 1 0 0)
+       #(1 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 0 0)
+       #(0 1 1 0)
+       #(0 0 0 0)
+       #(0 0 0 0)))
+    ]
+
+    TetrisPieceS class >> color [
+ <category: 'pieces'>
+
+ ^ Cairo.Color cyan
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceT.st b/packages/gtktools/Examples/Tetris/TetrisPieceT.st
new file mode 100644
index 0000000..f1f963b
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceT.st
@@ -0,0 +1,60 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceT [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceT class >> piece [
+ <category: 'pieces'>
+ ^#( #( #(0 1 0 0)
+       #(1 1 1 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(1 0 0 0)
+       #(1 1 0 0)
+       #(1 0 0 0)
+       #(0 0 0 0))
+    #( #(1 1 1 0)
+       #(0 1 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(0 1 0 0)
+       #(1 1 0 0)
+       #(0 1 0 0)
+       #(0 0 0 0)))
+    ]
+
+    TetrisPieceT class >> color [
+ <category: 'pieces'>
+
+ ^ Cairo.Color r: 0.13 g: 0.54 b: 0.13 "ForestGreen"
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceWidget.st b/packages/gtktools/Examples/Tetris/TetrisPieceWidget.st
new file mode 100644
index 0000000..f56a8ba
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceWidget.st
@@ -0,0 +1,57 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+Object subclass: TetrisPieceWidget [
+
+    | position size color |
+
+    position: aPoint [
+ <category: 'accessing'>
+
+ position := aPoint
+    ]
+
+    size: anInteger [
+ <category: 'accessing'>
+
+ size := anInteger
+    ]
+
+    color: aColor [
+ <category: 'accessing'>
+
+ color := aColor
+    ]
+
+    drawOn: aCanvas [
+ <category: 'drawing'>
+
+ self subclassResponsibility
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/TetrisPieceZ.st b/packages/gtktools/Examples/Tetris/TetrisPieceZ.st
new file mode 100644
index 0000000..b893aca
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/TetrisPieceZ.st
@@ -0,0 +1,61 @@
+"======================================================================
+|
+|   GTK Tetris... why not?
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 1999 Free Software Foundation, Inc.
+| Written by Paolo Bonzini, Gwenael Casaccio.
+|
+| This file is part of GNU Smalltalk.
+|
+| GNU Smalltalk 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.
+|
+| GNU Smalltalk 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
+| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
+| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+TetrisPiece subclass: TetrisPieceZ [
+
+    <category: 'Graphics-Tetris'>
+    <comment: nil>
+
+    TetrisPieceZ class >> piece [
+ <category: 'pieces'>
+
+ ^#( #( #(1 0 0 0)
+       #(1 1 0 0)
+       #(0 1 0 0)
+       #(0 0 0 0))
+    #( #(0 1 1 0)
+       #(1 1 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0))
+    #( #(1 0 0 0)
+       #(1 1 0 0)
+       #(0 1 0 0)
+       #(0 0 0 0))
+    #( #(0 1 1 0)
+       #(1 1 0 0)
+       #(0 0 0 0)
+       #(0 0 0 0)))
+    ]
+
+    TetrisPieceZ class >> color [
+ <category: 'pieces'>
+
+ ^ Cairo.Color r: 0.99 g: 0.55 b: 0 "DarkOrange"
+    ]
+]
diff --git a/packages/gtktools/Examples/Tetris/package.xml b/packages/gtktools/Examples/Tetris/package.xml
new file mode 100644
index 0000000..83978ae
--- /dev/null
+++ b/packages/gtktools/Examples/Tetris/package.xml
@@ -0,0 +1,23 @@
+<package>
+    <name>GTKTools-Example-Tetris</name>
+    <namespace>Tetris</namespace>
+    <prereq>GTKTools</prereq>
+
+    <filein>HighScores.st</filein>
+    <filein>Score.st</filein>
+    <filein>TetrisPieceWidget.st</filein>
+    <filein>BlockWidget.st</filein>
+    <filein>TetrisField.st</filein>
+    <filein>TetrisPiece.st</filein>
+    <filein>TetrisPieceI.st</filein>
+    <filein>TetrisPieceJ.st</filein>
+    <filein>TetrisPieceL.st</filein>
+    <filein>TetrisPieceO.st</filein>
+    <filein>TetrisPieceS.st</filein>
+    <filein>TetrisPieceT.st</filein>
+    <filein>TetrisPieceZ.st</filein>
+    <filein>Tetris.st</filein>
+
+    <start>Tetris.Tetris open.
+    GTK.Gtk main</start>
+</package>
diff --git a/packages/visualgst/Clock/GtkClock.st b/packages/visualgst/Clock/GtkClock.st
deleted file mode 100644
index a566c33..0000000
--- a/packages/visualgst/Clock/GtkClock.st
+++ /dev/null
@@ -1,165 +0,0 @@
-Smalltalk.Object subclass: GtkClock [
-    | canvas hour minute process radius second window x y |
-
-    GtkClock class >> open [
- <category: 'user interface'>
-
- ^ (self new)
-    initialize;
-    showAll;
-    yourself
-    ]
-
-    GtkClock class >> openSized: aPoint [
- <category: 'user interface'>
-
- ^ (self new)
-    initialize;
-    resize: aPoint;
-    showAll;
-    yourself
-    ]
-
-    quit [
- <category: 'events'>
-
- process terminate.
- window hide
-    ]
-
-    time [
- <category: 'time'>
-
- | now |
- now := DateTime now.
-        hour := now hour.
-        minute := now minute.
-        second := now second.
-    ]
-
-    clearArea: aGtkAllocation [
- <category: 'drawing'>
-
- | res |
-        res := aGtkAllocation castTo: (CIntType arrayType: 4).
-
-        canvas saveWhile: [
-            canvas
-                rectangle: ((0@0) extent: ((res at: 2) @ (res at: 3)));
-                operator: #clear;
-                fill ]
-    ]
-
-    drawClockCircle: context [
- <category: 'drawing'>
-
-        context
-            lineWidth: 6;
-            stroke: [ context arc: x@y radius: radius from: 0 to: Float pi * 2 ]
-    ]
-
-    drawHourMarker: context [
- <category: 'drawing'>
-
-        1 to: 12 do: [ :i |
-            context
-                lineWidth: 4;
-                stroke: [ | inset |
-                    inset := 0.1 * radius.
-                    context
-                        moveTo: (x + ((radius - inset) * (i * Float pi / 6.0) cos)) @ (y + ((radius - inset) * (i * Float pi / 6.0) sin));
-                        lineTo: (x + (radius * (i * Float pi / 6.0) cos)) @ (y + (radius * (i * Float pi / 6.0) sin)) ] ]
-    ]
-
-    drawClockLine: context angle: anAngFloat [
- <category: 'drawing'>
-
-        context
-            lineWidth: 4;
-            paint: [
-                context stroke: [
-                    context
-                        sourceRed: 1 green: 0.2 blue: 0.2 alpha: 1.0;
-                        moveTo: x@y;
-                        lineTo: (x + (radius * anAngFloat  cos)) @ (y + (radius * anAngFloat sin)) ] ]
-            withAlpha: 0.64
-    ]
-
-    drawHourLine: context [
- <category: 'drawing'>
-
- self drawClockLine: context angle: (hour \\ 12 * (Float pi / 6.0)) - (Float pi / 2.0).
-    ]
-
-    drawMinuteLine: context [
- <category: 'drawing'>
-
- self drawClockLine: context angle: (minute * (Float pi / 30.0)) - (Float pi / 2.0)
-    ]
-
-    drawSecondLine: context [
- <category: 'drawing'>
-
- self drawClockLine: context angle: (second * (Float pi / 30.0)) - (Float pi / 2.0)
-    ]
-
-    drawClock: context [
- <category: 'drawing'>
-
- self
-            drawClockCircle: context;
-            drawHourMarker: context;
-            drawHourLine: context;
-            drawMinuteLine: context;
-            drawSecondLine: context
-    ]
-
-    expose: aGtkWidget event: aGdkEventExpose [
-
- aGtkWidget getWindow withContextDo: [ :cr |
-    canvas := cr.
-
-    x := 128.
-    y := 128.
-
-    self
- clearArea: aGtkWidget getAllocation;
- time;
- drawClock: cr ].
-
- ^ true
-    ]
-
-    initialize [
- <category: 'intialization'>
-
- window := (GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel).
- window
-    setColormap: window getScreen getRgbaColormap;
-    connectSignal: 'expose_event' to: self selector: #'expose:event:';
-    connectSignal: 'delete-event' to: self selector: #'delete:event:';
-    setDecorated: false.
- radius := 100
-    ]
-
-    delete: aGtkWidget event: aGdkEvent [
-        <category: 'windows event'>
-
-        self quit.
-        ^ true
-    ]
-
-    resize: aPoint [
- <category: 'user interface'>
-
- window resize: aPoint x height: aPoint y
-    ]
-
-    showAll [
- | delay |
-
- delay := Delay forSeconds: 1.
- window showAll.
- process := [ [ true ] whileTrue: [ window queueDraw. delay wait ] ] fork
-    ]
-]
diff --git a/packages/visualgst/Makefile.frag b/packages/visualgst/Makefile.frag
index 5058822..f34ecaa 100644
--- a/packages/visualgst/Makefile.frag
+++ b/packages/visualgst/Makefile.frag
@@ -1,5 +1,5 @@
 VisualGST_FILES = \
-packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkEntryWidget.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st pack
 ages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/BrowserState.st packages/visualgst/State/NamespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/State/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWid
 get.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/visualgst/Source/SourceFormatter.st packages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source/ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/
 AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/WorkspaceVariableTracker.st packages/visualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCommand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Clock/GtkClock.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st pack
 ages/visualgst/Inspector/GtkInspectorWidget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st packages/visualgst/Implementors/GtkImageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/GtkSenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debu
 gger/GtkStackInspectorView.st packages/visualgst/Debugger/GtkStackInspector.st packages/visualgst/Tetris/HighScores.st packages/visualgst/Tetris/Score.st packages/visualgst/Tetris/TetrisPieceWidget.st packages/visualgst/Tetris/BlockWidget.st packages/visualgst/Tetris/TetrisField.st packages/visualgst/Tetris/TetrisPiece.st packages/visualgst/Tetris/TetrisPieceI.st packages/visualgst/Tetris/TetrisPieceJ.st packages/visualgst/Tetris/TetrisPieceL.st packages/visualgst/Tetris/TetrisPieceO.st packages/visualgst/Tetris/TetrisPieceS.st packages/visualgst/Tetris/TetrisPieceT.st packages/visualgst/Tetris/TetrisPieceZ.st packages/visualgst/Tetris/Tetris.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnitResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Co
 mmands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st packages/visualgst/Commands/WorkspaceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go
 -home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png packages/visualgst/Icons/extension.png packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png packages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/Me
 nuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
+packages/visualgst/Notification/AbstractEvent.st packages/visualgst/Notification/AddedEvent.st packages/visualgst/Notification/CommentedEvent.st packages/visualgst/Notification/DoItEvent.st packages/visualgst/Notification/SystemEventManager.st packages/visualgst/Notification/EventMultiplexer.st packages/visualgst/Notification/EventDispatcher.st packages/visualgst/Notification/ModifiedEvent.st packages/visualgst/Notification/ModifiedClassDefinitionEvent.st packages/visualgst/Notification/RecategorizedEvent.st packages/visualgst/Notification/RemovedEvent.st packages/visualgst/Notification/RenamedEvent.st packages/visualgst/Notification/ReorganizedEvent.st packages/visualgst/Notification/SystemChangeNotifier.st packages/visualgst/GtkAnnouncer.st packages/visualgst/GtkNamespaceSelectionChanged.st packages/visualgst/GtkClassSelectionChanged.st packages/visualgst/Commands/Command.st packages/visualgst/Commands/SmalltalkMenus/DoItCommand.st packages/visualgst/Commands/SmalltalkMenus/DebugI
 tCommand.st packages/visualgst/Commands/SmalltalkMenus/PrintItCommand.st packages/visualgst/Commands/SmalltalkMenus/InspectItCommand.st packages/visualgst/Commands/SmalltalkMenus/AcceptItCommand.st packages/visualgst/Commands/SmalltalkMenus/CancelCommand.st packages/visualgst/Commands/HistoryCommands/HistoryBackCommand.st packages/visualgst/Commands/HistoryCommands/HistoryDisplayCommand.st packages/visualgst/Commands/HistoryCommands/HistoryForwardCommand.st packages/visualgst/Commands/TabsMenus/CloseTabCommand.st packages/visualgst/Commands/TabsMenus/NextTabCommand.st packages/visualgst/Commands/TabsMenus/PreviousTabCommand.st packages/visualgst/Commands/NamespaceMenus/NamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/InspectNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/FileoutNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/AddNamespaceCommand.st packages/visualgst/Commands/NamespaceMenus/DeleteNamespaceCommand.st packages/visualgst/Comma
 nds/NamespaceMenus/RenameNamespaceCommand.st packages/visualgst/Commands/ClassMenus/ClassCommand.st packages/visualgst/Commands/ClassMenus/InspectClassCommand.st packages/visualgst/Commands/ClassMenus/FileoutClassCommand.st packages/visualgst/Commands/ClassMenus/AddClassCommand.st packages/visualgst/Commands/ClassMenus/DeleteClassCommand.st packages/visualgst/Commands/ClassMenus/RenameClassCommand.st packages/visualgst/Commands/CategoryMenus/CategoryCommand.st packages/visualgst/Commands/CategoryMenus/FileoutCategoryCommand.st packages/visualgst/Commands/CategoryMenus/AddCategoryCommand.st packages/visualgst/Commands/CategoryMenus/RenameCategoryCommand.st packages/visualgst/Commands/MethodMenus/MethodCommand.st packages/visualgst/Commands/MethodMenus/FileoutMethodCommand.st packages/visualgst/Commands/MethodMenus/InspectMethodCommand.st packages/visualgst/Commands/MethodMenus/DeleteMethodCommand.st packages/visualgst/Commands/MethodMenus/DebugTestCommand.st packages/visualgst/Comman
 ds/ToolsMenus/OpenAssistantCommand.st packages/visualgst/Commands/ToolsMenus/OpenWebBrowserCommand.st packages/visualgst/Commands/EditMenus/CancelEditCommand.st packages/visualgst/Commands/EditMenus/UndoEditCommand.st packages/visualgst/Commands/EditMenus/RedoEditCommand.st packages/visualgst/Commands/EditMenus/CutEditCommand.st packages/visualgst/Commands/EditMenus/CopyEditCommand.st packages/visualgst/Commands/EditMenus/PasteEditCommand.st packages/visualgst/Commands/EditMenus/SelectAllEditCommand.st packages/visualgst/Commands/EditMenus/FindEditCommand.st packages/visualgst/Commands/EditMenus/ReplaceEditCommand.st packages/visualgst/Commands/DebugMenus/DebugCommand.st packages/visualgst/Commands/DebugMenus/ContinueDebugCommand.st packages/visualgst/Commands/DebugMenus/StepIntoDebugCommand.st packages/visualgst/Commands/DebugMenus/StepToDebugCommand.st packages/visualgst/Menus/MenuBuilder.st packages/visualgst/Menus/MenuSeparator.st packages/visualgst/Menus/ToolbarSeparator.st pac
 kages/visualgst/Menus/LauncherToolbar.st packages/visualgst/Menus/DebuggerToolbar.st packages/visualgst/Menus/NamespaceMenus.st packages/visualgst/Menus/ClassMenus.st packages/visualgst/Menus/CategoryMenus.st packages/visualgst/Menus/ContextMenus.st packages/visualgst/Menus/MethodMenus.st packages/visualgst/Menus/EditMenus.st packages/visualgst/Menus/SmalltalkMenus.st packages/visualgst/Menus/ToolsMenus.st packages/visualgst/Menus/HistoryMenus.st packages/visualgst/Menus/TabsMenus.st packages/visualgst/Menus/InspectorMenus.st packages/visualgst/Menus/TextMenus.st packages/visualgst/Menus/WorkspaceVariableMenus.st packages/visualgst/Menus/SimpleWorkspaceMenus.st packages/visualgst/Menus/WorkspaceMenus.st packages/visualgst/FakeNamespace.st packages/visualgst/Category/ClassCategory.st packages/visualgst/Category/AbstractNamespace.st packages/visualgst/Category/Class.st packages/visualgst/GtkEntryWidget.st packages/visualgst/GtkTreeModel.st packages/visualgst/Text/GtkTextWidget.st pack
 ages/visualgst/GtkPackageBuilderWidget.st packages/visualgst/GtkVisualGSTTool.st packages/visualgst/GtkBrowsingTool.st packages/visualgst/GtkLauncher.st packages/visualgst/Text/GtkTextPluginWidget.st packages/visualgst/Text/GtkFindWidget.st packages/visualgst/Text/GtkReplaceWidget.st packages/visualgst/Text/GtkSaveTextWidget.st packages/visualgst/GtkNotebookWidget.st packages/visualgst/Image/GtkImageModel.st packages/visualgst/Image/GtkImageWidget.st packages/visualgst/Debugger/GtkContextWidget.st packages/visualgst/Debugger/GtkDebugger.st packages/visualgst/State/BrowserState.st packages/visualgst/State/NamespaceState.st packages/visualgst/State/ClassState.st packages/visualgst/State/CategoryState.st packages/visualgst/State/MethodState.st packages/visualgst/GtkWorkspaceWidget.st packages/visualgst/GtkTranscriptWidget.st packages/visualgst/StBrowser/GtkCategorizedNamespaceWidget.st packages/visualgst/StBrowser/GtkCategorizedClassWidget.st packages/visualgst/StBrowser/GtkCategoryWid
 get.st packages/visualgst/StBrowser/GtkMethodWidget.st packages/visualgst/Text/GtkSourceCodeWidget.st packages/visualgst/StBrowser/GtkClassHierarchyWidget.st packages/visualgst/GtkHistoryWidget.st packages/visualgst/Inspector/GtkInspector.st packages/visualgst/StBrowser/GtkClassBrowserWidget.st packages/visualgst/HistoryStack.st packages/visualgst/Undo/UndoStack.st packages/visualgst/Undo/UndoCommand.st packages/visualgst/Undo/AddNamespaceUndoCommand.st packages/visualgst/Undo/RenameNamespaceUndoCommand.st packages/visualgst/Undo/DeleteNamespaceUndoCommand.st packages/visualgst/Source/SourceFormatter.st packages/visualgst/Source/NamespaceHeaderSource.st packages/visualgst/Source/NamespaceSource.st packages/visualgst/Source/ClassHeaderSource.st packages/visualgst/Source/ClassSource.st packages/visualgst/Source/CategorySource.st packages/visualgst/Source/MethodSource.st packages/visualgst/Source/PackageSource.st packages/visualgst/Source/BrowserMethodSource.st packages/visualgst/Undo/
 AddClassUndoCommand.st packages/visualgst/Undo/RenameClassUndoCommand.st packages/visualgst/Undo/DeleteClassUndoCommand.st packages/visualgst/AbstractFinder.st packages/visualgst/NamespaceFinder.st packages/visualgst/ClassFinder.st packages/visualgst/MethodFinder.st packages/visualgst/GtkWebBrowser.st packages/visualgst/GtkWebView.st packages/visualgst/Extensions.st packages/visualgst/GtkAssistant.st packages/visualgst/Undo/RenameCategoryUndoCommand.st packages/visualgst/Undo/AddMethodUndoCommand.st packages/visualgst/Undo/DeleteMethodUndoCommand.st packages/visualgst/WorkspaceVariableTracker.st packages/visualgst/GtkVariableTrackerWidget.st packages/visualgst/SyntaxHighlighter.st packages/visualgst/Undo/Text/InsertTextCommand.st packages/visualgst/Undo/Text/DeleteTextCommand.st packages/visualgst/Undo/Text/ReplaceTextCommand.st packages/visualgst/Inspector/GtkInspectorSourceWidget.st packages/visualgst/Inspector/GtkInspectorBrowserWidget.st packages/visualgst/Inspector/GtkInspector
 Widget.st packages/visualgst/Inspector/GtkObjectInspectorView.st packages/visualgst/Inspector/GtkCompiledMethodInspectorView.st packages/visualgst/Inspector/GtkCompiledBlockInspectorView.st packages/visualgst/Inspector/GtkSequenceableCollectionInspectorView.st packages/visualgst/Inspector/GtkSetInspectorView.st packages/visualgst/Inspector/GtkDictionaryInspectorView.st packages/visualgst/Inspector/GtkCharacterInspectorView.st packages/visualgst/Inspector/GtkIntegerInspectorView.st packages/visualgst/Inspector/GtkFloatInspectorView.st packages/visualgst/Implementors/GtkImageResultsWidget.st packages/visualgst/Implementors/GtkImplementorResultsWidget.st packages/visualgst/Implementors/GtkSenderResultsWidget.st packages/visualgst/Notification/Kernel/AbstractNamespace.st packages/visualgst/Notification/Kernel/Metaclass.st packages/visualgst/Notification/Kernel/Class.st packages/visualgst/Notification/Kernel/MethodDictionary.st packages/visualgst/Debugger/GtkStackInspectorView.st package
 s/visualgst/Debugger/GtkStackInspector.st packages/visualgst/SUnit/TestBacktraceLog.st packages/visualgst/SUnit/GtkSUnitResultWidget.st packages/visualgst/GtkClassSUnitWidget.st packages/visualgst/GtkMethodSUnitWidget.st packages/visualgst/SUnit/GtkSUnit.st packages/visualgst/Commands/OpenBrowserCommand.st packages/visualgst/Commands/OpenTabbedBrowserCommand.st packages/visualgst/Commands/ToolsMenus/OpenSUnitCommand.st packages/visualgst/Commands/ToolsMenus/OpenBottomPaneCommand.st packages/visualgst/Commands/OpenWorkspaceCommand.st packages/visualgst/Commands/ToolsMenus/OpenImplementorCommand.st packages/visualgst/Commands/ToolsMenus/OpenSenderCommand.st packages/visualgst/Commands/ToolsMenus/OpenPackageBuilderCommand.st packages/visualgst/Commands/SaveImageCommand.st packages/visualgst/Commands/SaveImageAsCommand.st packages/visualgst/Commands/InspectorMenus/InspectorBackCommand.st packages/visualgst/Commands/InspectorMenus/InspectorDiveCommand.st packages/visualgst/Commands/Works
 paceMenus/DeleteItemCommand.st packages/visualgst/Commands/WorkspaceMenus/InspectItemCommand.st packages/visualgst/Commands/WorkspaceMenus/WorkspaceVariableCommand.st packages/visualgst/Icons/category.gif packages/visualgst/Icons/namespace.gif packages/visualgst/Icons/go-bottom.png packages/visualgst/Icons/go-down.png packages/visualgst/Icons/go-first.png packages/visualgst/Icons/go-home.png packages/visualgst/Icons/go-jump.png packages/visualgst/Icons/go-last.png packages/visualgst/Icons/go-next.png packages/visualgst/Icons/go-previous.png packages/visualgst/Icons/go-run.png packages/visualgst/Icons/go-top.png packages/visualgst/Icons/go-up.png packages/visualgst/Icons/NUnit.Failed.png packages/visualgst/Icons/NUnit.Loading.png packages/visualgst/Icons/NUnit.None.png packages/visualgst/Icons/NUnit.NotRun.png packages/visualgst/Icons/NUnit.Running.png packages/visualgst/Icons/NUnit.SuccessAndFailed.png packages/visualgst/Icons/NUnit.Success.png packages/visualgst/Icons/extension.png
  packages/visualgst/Icons/overridden.png packages/visualgst/Icons/override.png packages/visualgst/Icons/visualgst.png packages/visualgst/Tests/AddNamespaceUndoCommandTest.st packages/visualgst/Tests/GtkMethodWidgetTest.st packages/visualgst/Tests/CompiledMethodTest.st packages/visualgst/Tests/ExtractLiteralsTest.st packages/visualgst/Tests/CategoryTest.st packages/visualgst/Tests/MenuBuilderTest.st packages/visualgst/Tests/GtkAssistantTest.st packages/visualgst/Tests/EmptyTest.st packages/visualgst/Tests/AddClassUndoCommandTest.st packages/visualgst/Tests/GtkCategoryWidgetTest.st packages/visualgst/Tests/StateTest.st packages/visualgst/Tests/FinderTest.st packages/visualgst/Tests/PragmaTest.st packages/visualgst/Tests/GtkCategorizedNamespaceWidgetTest.st packages/visualgst/Tests/GtkCategorizedClassWidgetTest.st
 $(VisualGST_FILES):
 $(srcdir)/packages/visualgst/stamp-classes: $(VisualGST_FILES)
  touch $(srcdir)/packages/visualgst/stamp-classes
diff --git a/packages/visualgst/Tetris/BlockWidget.st b/packages/visualgst/Tetris/BlockWidget.st
deleted file mode 100644
index d5ff04c..0000000
--- a/packages/visualgst/Tetris/BlockWidget.st
+++ /dev/null
@@ -1,44 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-|
- ======================================================================"
-
-TetrisPieceWidget subclass: BlockWidget [
-
-    drawOn: aCanvas [
- <category: 'drawing'>
-
- | linear |
-        linear := Cairo.LinearGradient from: position to: (position x + size@ position y + size).
-        linear addStopAt: 0 color: color.
-        linear addStopAt: 1 color: Cairo.Color black.
-
-        aCanvas
-            fill: [ aCanvas rectangle: (position extent: size@size) ]
-            with: linear
-    ]
-]
diff --git a/packages/visualgst/Tetris/HighScores.st b/packages/visualgst/Tetris/HighScores.st
deleted file mode 100644
index 5629941..0000000
--- a/packages/visualgst/Tetris/HighScores.st
+++ /dev/null
@@ -1,37 +0,0 @@
-Object subclass: HighScores [
-
-    | highScores maxScores |
-
-    HighScores class >> newSized: anInteger [
- <category: 'instance creation'>
-
- ^ self new
-    maxScores: anInteger;
-    yourself
-    ]
-
-    highScores [
- <category: 'accessing'>
-
- ^ highScores ifNil: [ highScores := OrderedCollection new ]
-    ]
-
-    maxScores: anInteger [
- <category: 'accessing'>
-
- maxScores := anInteger
-    ]
-
-    addScore: aScore [
- <category: 'updating'>
-
- | pos |
- pos := 0.
- self highScores doWithIndex: [ :each :index |
-    each < index ifTrue: [ pos := index ] ].
- pos = 0 ifTrue: [ ^ self ].
- self highScores add: aScore after: pos.
- self highScores size > self maxScores ifTrue: [ self highScores removeLast ]
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/Score.st b/packages/visualgst/Tetris/Score.st
deleted file mode 100644
index 805651b..0000000
--- a/packages/visualgst/Tetris/Score.st
+++ /dev/null
@@ -1,25 +0,0 @@
-Object subclass: Score [
-
-    Score class >> score: anInteger [
- <category: 'instance creation'>
-
- ^ self new
-    score: anInteger;
-    yourself
-    ]
-
-    | score |
-
-    score: anInteger [
- <category: 'accessing'>
-
- score := anInteger
-    ]
-
-    score [
- <category: 'acccessing'>
-
- ^ score
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/Tetris.st b/packages/visualgst/Tetris/Tetris.st
deleted file mode 100644
index c0c50de..0000000
--- a/packages/visualgst/Tetris/Tetris.st
+++ /dev/null
@@ -1,391 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-GTKTools.GtkMainWindow subclass: Tetris [
-    | canvasWidget canvas process pause delay grid movingBlocks level score level lines |
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    Tetris class [ | highScores | ]
-
-    Tetris class >> highScores [
- <category: 'accessing'>
-
- ^ highScores ifNil: [ highScores := HighScores newSized: 10 ]
-    ]
-
-    Tetris class >> open [
- <category: 'user interface'>
-
- TetrisPiece initialize.
-
- ^ super open
-    play;
-    yourself
-    ]
-
-    initialize [
- <category: 'initialization'>
-
- movingBlocks := false.
- super initialize.
-    ]
-
-    windowTitle [
- <category: 'initialization'>
-
- ^'Tetris'
-    ]
-
-    postInitialize [
- <category: 'initialization'>
-
- super postInitialize.
-        canvasWidget grabFocus.
- window
-    connectSignal: 'key-press-event' to: self selector: #'keyPressedOn:keyEvent:'
-    ]
-
-    onDelete [
- <category: 'windows event'>
-
- self quit.
- ^ true
-    ]
-
-    createHelpMenus [
-        <category: 'user interface'>
-
-        ^{GTK.GtkMenuItem menuItem: 'About Tetris' connectTo: self selector: #aboutLauncher.
-            GTK.GtkMenuItem menuItem: 'About GNU Smalltalk' connectTo: self selector: #aboutGst}
-    ]
-
-    createMenus [
-        <category: 'user interface'>
-
-        self createMainMenu: #(#('Help' #createHelpMenus))
-    ]
-
-    buildCentralWidget [
- <category: 'user interface'>
-
- ^ canvasWidget := GTK.GtkDrawingArea new
-    setSizeRequest: 400 height: 700;
-    connectSignal: 'expose_event' to: self selector: #'expose:event:';
-    yourself
-    ]
-
-    clearArea: aGtkAllocation [
-        <category: 'drawing'>
-
-        | res |
-        res := aGtkAllocation castTo: (CIntType arrayType: 4).
-
-        canvas saveWhile: [
-    canvas
-                rectangle: ((0@0) extent: ((res at: 2) @ (res at: 3)));
-                operator: #clear;
-                fill ]
-    ]
-
-    drawArea [
- <category: 'drawing'>
-
- 1 to: 22 do: [ :i |
-    BlockWidget new
- position: 50@(50 + ((i - 1) * 15));
- size: 15;
- color: Cairo.Color white;
- drawOn: canvas.
-
-            BlockWidget new
-                position: (50 + (11 * 15))@(50 + ((i - 1) * 15));
-                size: 15;
- color: Cairo.Color white;
-                drawOn: canvas ].
-
- 1 to: 12 do: [ :i |
-            BlockWidget new
-                position: (50 + ((i - 1) * 15))@50;
-                size: 15;
- color: Cairo.Color white;
-                drawOn: canvas.
-
-            BlockWidget new
-                position: (50 + ((i - 1) * 15))@(50 + (22 * 15));
-                size: 15;
- color: Cairo.Color white;
-                drawOn: canvas ]
-    ]
-
-    drawGrid [
- <category: 'drawing'>
-
- grid ifNil: [ ^ self ].
- grid drawOn: canvas
-    ]
-
-    drawScore [
- <category: 'drawing'>
-
- canvas
-    moveTo: 300@100;
-    sourceRed: 1 green: 1 blue: 1;
-    showText: 'Score : ', (self score displayString);
-    moveTo: 300@150;
-    showText: 'Level : ', (self level displayString);
-    stroke.
-    ]
-
-    expose: aGtkWidget event: aGdkEventExpose [
- <category: 'drawing event'>
-
- aGtkWidget getWindow withContextDo: [ :cr |
-            canvas := cr.
-            self
-                clearArea: aGtkWidget getAllocation;
- drawArea;
- drawGrid;
- drawScore ].
-
-        ^ true
-    ]
-
-    keyPressedOn: aGtkWidget keyEvent: aGdkEventKey [
- <category: 'key event'>
-
- | event |
- movingBlocks ifFalse: [ ^ false ].
-
- event := aGdkEventKey castTo: GTK.GdkEventKey type.
-
- event keyval value = 65361 ifTrue: [ self movePieceLeft. ^ true ].
- event keyval value = 65363 ifTrue: [ self movePieceRight. ^ true ].
- event keyval value = 65362 ifTrue: [ self rotatePiece. ^ true ].
- event keyval value = 65364 ifTrue: [ self dropPiece. ^ true ].
-
- ^ false
-    ]
-
-    refresh [
- <category: 'drawing'>
-
- canvasWidget queueDraw
-    ]
-
-    cycle [
- <category: 'game'>
-
- | result filledLines |
- grid := TetrisField new.
- [ movingBlocks := true.
-  result := grid currentPiece: TetrisPiece random.
-  result ifTrue: [ self
-    refresh;
-    delay ].
-  result ] whileTrue: [
- [ result := self slidePiece.
-  self refresh.
-  result ] whileTrue: [ self delay ].
-  filledLines := self
-    resetMovingBlocks;
-    cementPiece;
-    removeLines.
-  self updateScore: filledLines.
-  Processor yield ].
-
- ^ self gameOver
-    ]
-
-    initializeGame [
- <category: 'game'>
-
- self
-    level: 1;
-    lines: 0;
-    score: 0.
- movingBlocks := true
-    ]
-
-    play [
- <category: 'game'>
-
- process := [ self
- initializeGame;
- cycle ] fork.
-    ]
-
-    quit [
- <category: 'game'>
-
- process terminate.
- window hideAll
-    ]
-
-    gameOver [
- <category: 'game'>
-
- self highScores addScore: (Score score: self score)
-    ]
-
-    resetMovingBlocks [
- <category: 'game'>
-
- movingBlocks := false
-    ]
-
-    delay [
- "I like this method a lot!"
-
- <category: 'private'>
- delay wait.
-
- "Especially this semaphore!!
- pause wait.
- pause signal"
-    ]
-
-    highScores [
- <category: 'accessing'>
-
- ^ self class highScores
-    ]
-
-    level [
- <category: 'accessing'>
-
- ^ level
-    ]
-
-    level: nextLevel [
- <category: 'private'>
-
- level := nextLevel min: 10.
- delay := Delay forMilliseconds: 825 - (75 * level).
-    ]
-
-    lines [
- <category: 'private'>
-
- ^ lines
-    ]
-
-    lines: newLines [
- <category: 'private'>
-
- lines := newLines
-    ]
-
-    score [
- <category: 'private'>
-
- ^ score
-    ]
-
-    score: newScore [
- <category: 'private'>
-
- score := newScore
-    ]
-
-    updateScore: filledLines [
- <category: 'private'>
-
- self lines: self lines + filledLines.
-        (self lines - 1) // 10 > (self level - 1) ifTrue: [ self advanceLevel ].
-        self score: 2 * self level squared + (#(0 50 150 400 900) at: filledLines + 1) + self score
-    ]
-
-    advanceLevel [
- <category: 'events'>
-
- self level: self level + 1
-    ]
-
-    movePieceLeft [
- <category: 'events'>
-
- grid movePieceLeft.
- self refresh
-    ]
-
-    movePieceRight [
- <category: 'events'>
-
- grid movePieceRight.
- self refresh
-    ]
-
-    pause [
- <category: 'events'>
-
- "I like this semaphore a lot!"
- pause wait
-    ]
-
-    restart [
- <category: 'events'>
-
- "I like this semaphore a lot!"
- pause signal
-    ]
-
-    rotatePiece [
- <category: 'events'>
-
- grid rotatePiece.
- self refresh
-    ]
-
-    slidePiece [
- <category: 'events'>
-
- ^ grid slidePiece
-    ]
-
-    cementPiece [
- <category: 'events'>
-
- ^ grid cementPiece
-    ]
-
-    removeLines [
- <category: 'game'>
-
- ^ grid removeLines
-    ]
-
-    dropPiece [
- <category: 'events'>
-
- ^ grid dropPiece
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisField.st b/packages/visualgst/Tetris/TetrisField.st
deleted file mode 100644
index afd0465..0000000
--- a/packages/visualgst/Tetris/TetrisField.st
+++ /dev/null
@@ -1,180 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-
-Object subclass: TetrisField [
-    | rows currentPiece |
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisField class >> new [
- <category: 'instance creation'>
-
- ^ self basicNew initialize
-    ]
-
-    at: point [
- <category: 'accessing'>
-
- ^ (rows at: point y) at: point x
-    ]
-
-    at: point put: value [
- <category: 'accessing'>
-
- ^ (rows at: point y) at: point x put: value
-    ]
-
-    initialize [
- <category: 'initializing'>
-
- rows := (1 to: 22) collect: [:each | ByteArray new: 10].
- rows do: [:each | self initializeLine: each].
- (rows at: 22) atAll: (1 to: 10) put: 1
-    ]
-
-    initializeLine: line [
- <category: 'initializing'>
-
- line
-    atAll: (1 to: 10) put: 0
-    ]
-
-    checkLine: y [
- <category: 'removing filled lines'>
-
- ^ (rows at: y) allSatisfy: [:each | each ~~ 0]
-    ]
-
-    removeLines [
- <category: 'removing filled lines'>
-
- | removed lastLine firstLine |
- removed := 0.
- firstLine := self currentPiece y.
- lastLine := 21 min: firstLine + 3.
- lastLine - firstLine + 1 timesRepeat:
- [(self checkLine: lastLine)
-    ifTrue:
- [removed := removed + 1.
- self removeLine: lastLine]
-    ifFalse: [lastLine := lastLine - 1]].
- ^ removed
-    ]
-
-    removeLine: filledY [
- <category: 'removing filled lines'>
-
- | saved y shift line |
- saved := rows at: filledY.
- filledY to: 2
-    by: -1
-    do: [:each | rows at: each put: (rows at: each - 1)].
- self initializeLine: saved.
- rows at: 1 put: saved
-    ]
-
-    cementPiece [
- <category: 'piece'>
-
- self currentPiece cementOn: self
-    ]
-
-    dropPiece [
- <category: 'moving pieces'>
-
- [ self slidePiece ] whileTrue: []
-    ]
-
-    movePieceLeft [
- <category: 'moving pieces'>
-
- self currentPiece x: self currentPiece x - 1.
- ^ self currentPiece moveInto: self
-    ifFail: [self currentPiece x: self currentPiece x + 1]
-    ]
-
-    movePieceRight [
- <category: 'moving pieces'>
-
- self currentPiece x: self currentPiece x + 1.
- ^ self currentPiece moveInto: self
-    ifFail: [ self currentPiece x: self currentPiece x - 1 ]
-    ]
-
-    rotatePiece [
- <category: 'moving pieces'>
-
- self currentPiece rotate: 1.
- ^ self currentPiece moveInto: self ifFail: [ self currentPiece rotate: 3 ]
-    ]
-
-    slidePiece [
- <category: 'moving pieces'>
-
- self currentPiece y: self currentPiece y + 1.
- ^ self currentPiece moveInto: self
-    ifFail: [self currentPiece y: self currentPiece y - 1]
-    ]
-
-    currentPiece [
- <category: 'accessing piece variables'>
-
- ^ currentPiece
-    ]
-
-    currentPiece: piece [
- <category: 'accessing piece variables'>
-
- currentPiece := piece.
- (self currentPiece)
-    x: 4;
-    y: 1.
-
- self currentPiece moveInto: self
-            ifFail: [ ^ false ].
- ^ true
-    ]
-
-    drawOn: aCanvas [
- <category: 'drawing'>
-
- 1 to: 21 do: [ :y |
-    1 to: 10 do: [ :x |
- ((rows at: y) at: x) ~= 0 ifTrue: [
-    BlockWidget new
- position: (50 + (x * 15))@(50 + (y * 15));
- size: 15;
- color: Cairo.Color white;
- drawOn: aCanvas ] ] ].
- self currentPiece drawOn: aCanvas
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisFieldWidget.st b/packages/visualgst/Tetris/TetrisFieldWidget.st
deleted file mode 100644
index 25beaa8..0000000
--- a/packages/visualgst/Tetris/TetrisFieldWidget.st
+++ /dev/null
@@ -1,57 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-|
- ======================================================================"
-
-Object subclass: TetrisFieldWidget [
-
-    | position size color |
-
-    position: aPoint [
- <category: 'accessing'>
-
- position := aPoint
-    ]
-
-    size: anInteger [
- <category: 'accessing'>
-
- size := anInteger
-    ]
-    
-    color: aColor [
- <category: 'accessing'>
-
- color := aColor
-    ]
-
-    drawOn: aCanvas [
- <category: 'drawing'>
-
- self subclassResponsibility
-    ]
-]
diff --git a/packages/visualgst/Tetris/TetrisPiece.st b/packages/visualgst/Tetris/TetrisPiece.st
deleted file mode 100644
index e4cab58..0000000
--- a/packages/visualgst/Tetris/TetrisPiece.st
+++ /dev/null
@@ -1,175 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-Object subclass: TetrisPiece [
-    | rotation origin |
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    Pieces := nil.
-
-    TetrisPiece class >> pieces [
- <category: 'accessing'>
-
- ^ Pieces ifNil: [ Pieces := self subclasses asOrderedCollection ]
-    ]
-
-    TetrisPiece class >> random [
- <category: 'pieces'>
-
- | piece |
- piece := Random between: 1 and: 7.
- ^ (self pieces at: piece) new
-    initialize;
-    yourself
-    ]
-
-    initialize [
- <category: 'initialization'>
-
- rotation := 1.
- origin := Point new
-    ]
-
-    piece [
- <category: 'accessing'>
-
- ^ self class piece
-    ]
-
-    color [
- <category: 'drawing'>
-
- ^ self class color
-    ]
-
-    cementOn: field [
- <category: 'blocks'>
-
-        | point x y |
-        point := Point new.
-        y := 0.
-        (self piece at: rotation) do: [ :line |
-                    x := 0.
-                    line do: [ :elem |
-                        elem = 1 ifTrue: [
-                            point
-                                x: self origin x + x;
-                                y: self origin y + y.
-                            (field at: point) = 0 ifTrue: [ field at: point put: elem ] ].
- x := x + 1 ].
-    y := y + 1].
-    ]
-
-    canMoveInto: field [
- <category: 'moving'>
-
- | point x y |
- point := Point new.
- y := 0.
- (self piece at: rotation) do: [ :line |
-    x := 0.
-    line do: [ :elem |
- elem = 1 ifTrue: [
-    point
- x: self origin x + x;
- y: self origin y + y.
-    (field at: point) > 0 ifTrue: [ ^ false ] ].
- x := x + 1 ].
-    y := y + 1 ].
- ^ true
-    ]
-
-    moveInto: field ifFail: aBlock [
- <category: 'moving'>
-
- (self canMoveInto: field) ifFalse: [ aBlock value.
-    ^ false ].
- ^ true
-    ]
-
-    rotate: howMany [
- "Three lines are necessary because rotation is in the 1..4 range,
- while \\ likes a 0..3 range"
-
- <category: 'moving'>
- rotation := rotation - 1.
- rotation := (rotation + howMany) \\ 4.
- rotation := rotation + 1
-    ]
-
-    origin [
- <category: 'accessing'>
-
- ^ origin
-    ]
-
-    x [
- <category: 'accessing'>
-
- ^ self origin x
-    ]
-
-    x: x [
- <category: 'accessing'>
-
- self origin x: x
-    ]
-
-    y [
- <category: 'accessing'>
-
- ^ self origin y
-    ]
-
-    y: y [
- <category: 'accessing'>
-
- self origin y: y
-    ]
-
-    drawOn: aCanvas [
- <category: 'drawing'>
-
- | y |
- y := 0.
-        (self piece at: rotation) do: [ :line |
-    y := y + 1.
-            1 to: 4 do: [ :x |
-                (line at: x) ~= 0 ifTrue: [
-                    BlockWidget new
-                        position: (50 + ((self x + x - 1) * 15))@(50 + ((self y + y - 1) * 15));
-                        size: 15;
- color: self color;
-                        drawOn: aCanvas ] ] ]
-    ]
-
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceI.st b/packages/visualgst/Tetris/TetrisPieceI.st
deleted file mode 100644
index 05fdd5a..0000000
--- a/packages/visualgst/Tetris/TetrisPieceI.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceI [
-
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceI class >> piece [
- <category: 'pieces'>
-
- ^#( #( #(1 0 0 0)
-       #(1 0 0 0)
-       #(1 0 0 0)
-       #(1 0 0 0))
-    #( #(0 0 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0)
-       #(1 1 1 1))
-    #( #(1 0 0 0)
-       #(1 0 0 0)
-       #(1 0 0 0)
-       #(1 0 0 0))
-    #( #(0 0 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0)
-       #(1 1 1 1)))
-    ]
-
-    TetrisPieceI class >> color [
- <category: 'pieces'>
-
- ^ Cairo.Color red
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceJ.st b/packages/visualgst/Tetris/TetrisPieceJ.st
deleted file mode 100644
index 6c4ce92..0000000
--- a/packages/visualgst/Tetris/TetrisPieceJ.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceJ [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceJ class >> piece [
- <category: 'pieces'>
-
- ^#( #( #(0 1 0 0)
-       #(0 1 0 0)
-       #(1 1 0 0)
-       #(0 0 0 0))
-    #( #(1 0 0 0)
-       #(1 1 1 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 0 0)
-       #(1 0 0 0)
-       #(1 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 1 0)
-       #(0 0 1 0)
-       #(0 0 0 0)
-       #(0 0 0 0)))
-    ]
-
-    TetrisPieceJ class >> color [
- <category: 'pieces'>
-
- ^ Cairo.Color magenta
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceL.st b/packages/visualgst/Tetris/TetrisPieceL.st
deleted file mode 100644
index e544c47..0000000
--- a/packages/visualgst/Tetris/TetrisPieceL.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceL [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceL class >> piece [
- <category: 'pieces'>
-
- ^#( #( #(1 0 0 0)
-       #(1 0 0 0)
-       #(1 1 0 0)
-       #(0 0 0 0))
-    #( #(1 1 1 0)
-       #(1 0 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 0 0)
-       #(0 1 0 0)
-       #(0 1 0 0)
-       #(0 0 0 0))
-    #( #(0 0 1 0)
-       #(1 1 1 0)
-       #(0 0 0 0)
-       #(0 0 0 0)))
-    ]
-
-    TetrisPieceL class >> color [
- <category: 'pieces'>
-
- ^ Cairo.Color r: 0.74 g: 0.71 b: 0.42 "DarkKhaki"
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceO.st b/packages/visualgst/Tetris/TetrisPieceO.st
deleted file mode 100644
index 46cf714..0000000
--- a/packages/visualgst/Tetris/TetrisPieceO.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceO [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceO class >> piece [
- <category: 'pieces'>
-
- ^#( #( #(1 1 0 0)
-       #(1 1 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 0 0)
-       #(1 1 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 0 0)
-       #(1 1 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 0 0)
-       #(1 1 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0)))
-    ]
-
-    TetrisPieceO class >> color [
- <category: 'piece'>
-
- ^ Cairo.Color r: 0.54 g: 0.17 b: 0.88 "BlueViolet"
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceS.st b/packages/visualgst/Tetris/TetrisPieceS.st
deleted file mode 100644
index 19b3ee1..0000000
--- a/packages/visualgst/Tetris/TetrisPieceS.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceS [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceS class >> piece [
- <category: 'pieces'>
-
- ^#( #( #(0 1 0 0)
-       #(1 1 0 0)
-       #(1 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 0 0)
-       #(0 1 1 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(0 1 0 0)
-       #(1 1 0 0)
-       #(1 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 0 0)
-       #(0 1 1 0)
-       #(0 0 0 0)
-       #(0 0 0 0)))
-    ]
-
-    TetrisPieceS class >> color [
- <category: 'pieces'>
-
- ^ Cairo.Color cyan
-    ]
-]
-
diff --git a/packages/visualgst/Tetris/TetrisPieceT.st b/packages/visualgst/Tetris/TetrisPieceT.st
deleted file mode 100644
index b7c6af0..0000000
--- a/packages/visualgst/Tetris/TetrisPieceT.st
+++ /dev/null
@@ -1,60 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceT [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceT class >> piece [
- <category: 'pieces'>
- ^#( #( #(0 1 0 0)
-       #(1 1 1 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(1 0 0 0)
-       #(1 1 0 0)
-       #(1 0 0 0)
-       #(0 0 0 0))
-    #( #(1 1 1 0)
-       #(0 1 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(0 1 0 0)
-       #(1 1 0 0)
-       #(0 1 0 0)
-       #(0 0 0 0)))
-    ]
-
-    TetrisPieceT class >> color [
- <category: 'pieces'>
-
- ^ Cairo.Color r: 0.13 g: 0.54 b: 0.13 "ForestGreen"
-    ]
-]
diff --git a/packages/visualgst/Tetris/TetrisPieceWidget.st b/packages/visualgst/Tetris/TetrisPieceWidget.st
deleted file mode 100644
index 1795612..0000000
--- a/packages/visualgst/Tetris/TetrisPieceWidget.st
+++ /dev/null
@@ -1,57 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-|
- ======================================================================"
-
-Object subclass: TetrisPieceWidget [
-
-    | position size color |
-
-    position: aPoint [
- <category: 'accessing'>
-
- position := aPoint
-    ]
-
-    size: anInteger [
- <category: 'accessing'>
-
- size := anInteger
-    ]
-    
-    color: aColor [
- <category: 'accessing'>
-
- color := aColor
-    ]
-
-    drawOn: aCanvas [
- <category: 'drawing'>
-
- self subclassResponsibility
-    ]
-]
diff --git a/packages/visualgst/Tetris/TetrisPieceZ.st b/packages/visualgst/Tetris/TetrisPieceZ.st
deleted file mode 100644
index e49cf3c..0000000
--- a/packages/visualgst/Tetris/TetrisPieceZ.st
+++ /dev/null
@@ -1,62 +0,0 @@
-"======================================================================
-|
-|   GTK Tetris... why not?
-|
-|
- ======================================================================"
-
-"======================================================================
-|
-| Copyright 1999 Free Software Foundation, Inc.
-| Written by Paolo Bonzini, Gwenael Casaccio.
-|
-| This file is part of GNU Smalltalk.
-|
-| GNU Smalltalk 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.
-|
-| GNU Smalltalk 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
-| GNU Smalltalk; see the file LICENSE.  If not, write to the Free Software
-| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  
-|
- ======================================================================"
-
-TetrisPiece subclass: TetrisPieceZ [
-    
-    <category: 'Graphics-Tetris'>
-    <comment: nil>
-
-    TetrisPieceZ class >> piece [
- <category: 'pieces'>
-
- ^#( #( #(1 0 0 0)
-       #(1 1 0 0)
-       #(0 1 0 0)
-       #(0 0 0 0))
-    #( #(0 1 1 0)
-       #(1 1 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0))
-    #( #(1 0 0 0)
-       #(1 1 0 0)
-       #(0 1 0 0)
-       #(0 0 0 0))
-    #( #(0 1 1 0)
-       #(1 1 0 0)
-       #(0 0 0 0)
-       #(0 0 0 0)))
-    ]
-
-    TetrisPieceZ class >> color [
- <category: 'pieces'>
-
- ^ Cairo.Color r: 0.99 g: 0.55 b: 0 "DarkOrange"
-    ]
-]
-
diff --git a/packages/visualgst/package.xml b/packages/visualgst/package.xml
index 3ab496d..d826135 100644
--- a/packages/visualgst/package.xml
+++ b/packages/visualgst/package.xml
@@ -217,7 +217,6 @@
   <filein>Undo/Text/InsertTextCommand.st</filein>
   <filein>Undo/Text/DeleteTextCommand.st</filein>
   <filein>Undo/Text/ReplaceTextCommand.st</filein>
-  <filein>Clock/GtkClock.st</filein>
   <filein>Inspector/GtkInspectorSourceWidget.st</filein>
   <filein>Inspector/GtkInspectorBrowserWidget.st</filein>
   <filein>Inspector/GtkInspectorWidget.st</filein>
@@ -239,20 +238,6 @@
   <filein>Notification/Kernel/MethodDictionary.st</filein>
   <filein>Debugger/GtkStackInspectorView.st</filein>
   <filein>Debugger/GtkStackInspector.st</filein>
-  <filein>Tetris/HighScores.st</filein>
-  <filein>Tetris/Score.st</filein>
-  <filein>Tetris/TetrisPieceWidget.st</filein>
-  <filein>Tetris/BlockWidget.st</filein>
-  <filein>Tetris/TetrisField.st</filein>
-  <filein>Tetris/TetrisPiece.st</filein>
-  <filein>Tetris/TetrisPieceI.st</filein>
-  <filein>Tetris/TetrisPieceJ.st</filein>
-  <filein>Tetris/TetrisPieceL.st</filein>
-  <filein>Tetris/TetrisPieceO.st</filein>
-  <filein>Tetris/TetrisPieceS.st</filein>
-  <filein>Tetris/TetrisPieceT.st</filein>
-  <filein>Tetris/TetrisPieceZ.st</filein>
-  <filein>Tetris/Tetris.st</filein>
   <filein>SUnit/TestBacktraceLog.st</filein>
   <filein>SUnit/GtkSUnitResultWidget.st</filein>
   <filein>GtkClassSUnitWidget.st</filein>
@@ -430,7 +415,6 @@
   <file>Undo/Text/InsertTextCommand.st</file>
   <file>Undo/Text/DeleteTextCommand.st</file>
   <file>Undo/Text/ReplaceTextCommand.st</file>
-  <file>Clock/GtkClock.st</file>
   <file>Inspector/GtkInspectorSourceWidget.st</file>
   <file>Inspector/GtkInspectorBrowserWidget.st</file>
   <file>Inspector/GtkInspectorWidget.st</file>
@@ -452,20 +436,6 @@
   <file>Notification/Kernel/MethodDictionary.st</file>
   <file>Debugger/GtkStackInspectorView.st</file>
   <file>Debugger/GtkStackInspector.st</file>
-  <file>Tetris/HighScores.st</file>
-  <file>Tetris/Score.st</file>
-  <file>Tetris/TetrisPieceWidget.st</file>
-  <file>Tetris/BlockWidget.st</file>
-  <file>Tetris/TetrisField.st</file>
-  <file>Tetris/TetrisPiece.st</file>
-  <file>Tetris/TetrisPieceI.st</file>
-  <file>Tetris/TetrisPieceJ.st</file>
-  <file>Tetris/TetrisPieceL.st</file>
-  <file>Tetris/TetrisPieceO.st</file>
-  <file>Tetris/TetrisPieceS.st</file>
-  <file>Tetris/TetrisPieceT.st</file>
-  <file>Tetris/TetrisPieceZ.st</file>
-  <file>Tetris/Tetris.st</file>
   <file>SUnit/TestBacktraceLog.st</file>
   <file>SUnit/GtkSUnitResultWidget.st</file>
   <file>GtkClassSUnitWidget.st</file>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 14/15] tooling: Introduce a new package for tooling helpers

Holger Freyther
In reply to this post by Holger Freyther
This will hold non UI tools to help with tooling. This can be linters,
the converter, package related tools. Beging with moving parts of the
gst-convert code into this package.

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * configure.ac: Introduce the Tooling package.

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * Makefile.frag: Added.
        * Parser/EmittedClass.st: Added from scripts/Convert.st.
        * Parser/EmittedComments.st: Added from scripts/Convert.st.
        * Parser/EmittedEntity.st: Added from scripts/Convert.st.
        * Parser/EmittedEval.st: Added from scripts/Convert.st.
        * Parser/Loader.st: Added from scripts/Convert.st.
        * README: Added.
        * TODO: Added.
        * package.xml: Added.
---
 .gitignore                                 |    1 +
 ChangeLog                                  |    4 +
 configure.ac                               |    1 +
 packages/tooling/ChangeLog                 |   11 ++
 packages/tooling/Makefile.frag             |    5 +
 packages/tooling/Parser/EmittedClass.st    |   85 ++++++++++
 packages/tooling/Parser/EmittedComments.st |   51 ++++++
 packages/tooling/Parser/EmittedEntity.st   |   39 +++++
 packages/tooling/Parser/EmittedEval.st     |   72 +++++++++
 packages/tooling/Parser/Loader.st          |  235 ++++++++++++++++++++++++++++
 packages/tooling/README                    |    2 +
 packages/tooling/TODO                      |    2 +
 packages/tooling/package.xml               |   11 ++
 13 files changed, 519 insertions(+)
 create mode 100644 packages/tooling/ChangeLog
 create mode 100644 packages/tooling/Makefile.frag
 create mode 100644 packages/tooling/Parser/EmittedClass.st
 create mode 100644 packages/tooling/Parser/EmittedComments.st
 create mode 100644 packages/tooling/Parser/EmittedEntity.st
 create mode 100644 packages/tooling/Parser/EmittedEval.st
 create mode 100644 packages/tooling/Parser/Loader.st
 create mode 100644 packages/tooling/README
 create mode 100644 packages/tooling/TODO
 create mode 100644 packages/tooling/package.xml

diff --git a/.gitignore b/.gitignore
index d7a3ac0..dc2aca2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,6 +69,7 @@ packages/i18n/ref-add.sed
 packages/i18n/ref-del.sed
 packages/net/gnutls-wrapper
 packages/object-dumper/stamp-classes
+packages/tooling/stamp-classes
 snprintfv/snprintfv/compat.stamp
 
 tests/gst.im
diff --git a/ChangeLog b/ChangeLog
index aa767b8..f162b3d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
 
+ * configure.ac: Introduce the Tooling package.
+
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
  * configure.ac: Introduce the GTKTools package
 
 2013-03-31  Holger Hans Peter Freyther  <[hidden email]>
diff --git a/configure.ac b/configure.ac
index c447b1c..e6ef587 100644
--- a/configure.ac
+++ b/configure.ac
@@ -586,6 +586,7 @@ GST_PACKAGE_ENABLE([Sport], [sport])
 GST_PACKAGE_ENABLE([SUnit], [sunit])
 GST_PACKAGE_ENABLE([Swazoo], [swazoo-httpd])
 GST_PACKAGE_ENABLE([Sockets], [sockets], [], [gst_cv_sockets])
+GST_PACKAGE_ENABLE([Tooling], [tooling])
 GST_PACKAGE_ENABLE([VFSAddOns], [vfs], [], [], [Makefile])
 GST_PACKAGE_ENABLE([GTKTools], [gtktools])
 GST_PACKAGE_ENABLE([GTKTools-Example-Clock], [gtktools/Examples/Clock])
diff --git a/packages/tooling/ChangeLog b/packages/tooling/ChangeLog
new file mode 100644
index 0000000..8c85f31
--- /dev/null
+++ b/packages/tooling/ChangeLog
@@ -0,0 +1,11 @@
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
+ * Makefile.frag: Added.
+ * Parser/EmittedClass.st: Added from scripts/Convert.st.
+ * Parser/EmittedComments.st: Added from scripts/Convert.st.
+ * Parser/EmittedEntity.st: Added from scripts/Convert.st.
+ * Parser/EmittedEval.st: Added from scripts/Convert.st.
+ * Parser/Loader.st: Added from scripts/Convert.st.
+ * README: Added.
+ * TODO: Added.
+ * package.xml: Added.
diff --git a/packages/tooling/Makefile.frag b/packages/tooling/Makefile.frag
new file mode 100644
index 0000000..01d8d86
--- /dev/null
+++ b/packages/tooling/Makefile.frag
@@ -0,0 +1,5 @@
+Tooling_FILES = \
+packages/tooling/Parser/EmittedEntity.st packages/tooling/Parser/EmittedClass.st packages/tooling/Parser/EmittedComments.st packages/tooling/Parser/EmittedEval.st packages/tooling/Parser/Loader.st packages/tooling/Lint/Monticello.st
+$(Tooling_FILES):
+$(srcdir)/packages/tooling/stamp-classes: $(Tooling_FILES)
+ touch $(srcdir)/packages/tooling/stamp-classes
diff --git a/packages/tooling/Parser/EmittedClass.st b/packages/tooling/Parser/EmittedClass.st
new file mode 100644
index 0000000..9a2cb13
--- /dev/null
+++ b/packages/tooling/Parser/EmittedClass.st
@@ -0,0 +1,85 @@
+"======================================================================
+|
+|   Smalltalk syntax conversion tool
+|
+|
+ ======================================================================"
+
+
+"======================================================================
+|
+| Copyright 2007, 2008, 2009 Free Software Foundation, Inc.
+| Written by Daniele Sciascia.
+|
+| This file is part of the GNU Smalltalk class library.
+|
+| The GNU Smalltalk class library is free software; you can redistribute it
+| and/or modify it under the terms of the GNU Lesser General Public License
+| as published by the Free Software Foundation; either version 2.1, or (at
+| your option) any later version.
+|
+| The GNU Smalltalk class library 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 Lesser
+| General Public License for more details.
+|
+| You should have received a copy of the GNU Lesser General Public License
+| along with the GNU Smalltalk class library; see the file COPYING.LIB.
+| If not, write to the Free Software Foundation, 59 Temple Place - Suite
+| 330, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+EmittedEntity subclass: EmittedClass [
+    | class methodsToEmit classMethodsToEmit isComplete |
+
+    <category: 'Tooling-Parser-Core'>
+    <comment: 'This class is responsible for emitting a class
+    by using a FormattingExporter.'>
+
+    EmittedClass class >> forClass: aClass [
+ (aClass superclass notNil and: [
+    aClass superclass isDefined not ]) ifTrue: [
+        Warning signal:
+    ('superclass %1 is undefined' % {aClass superclass}) ].
+        ^super new initializeWithClass: aClass complete: true
+    ]
+
+    EmittedClass class >> forExtension: aClass [
+ aClass isDefined ifFalse: [
+    Warning signal:
+ ('extensions for undefined class %1' % {aClass}) ].
+        ^super new initializeWithClass: aClass complete: false
+    ]
+
+    initializeWithClass: aClass complete: aBoolean [
+        class := aClass.
+        methodsToEmit := STInST.OrderedSet new.
+ classMethodsToEmit := STInST.OrderedSet new.
+ isComplete := aBoolean
+    ]
+
+    forClass [
+        ^class
+    ]
+
+    addMethod: aMethod [
+        methodsToEmit add: aMethod selector asSymbol.
+    ]
+
+    addClassMethod: aMethod [
+ classMethodsToEmit add: aMethod selector asSymbol.
+    ]
+
+    emitTo: aStream filteredBy: aBlock [
+ (aBlock value: class)
+    ifFalse: [
+        Notification signal: ('Skipping %1' % {class}).
+ ^self ].
+
+        Notification signal: ('Converting %1...' % {class}).
+        (STInST.FileOutExporter defaultExporter on: class to: aStream)
+            completeFileOut: isComplete;
+            fileOutSelectors: methodsToEmit classSelectors: classMethodsToEmit.
+    ]
+]
diff --git a/packages/tooling/Parser/EmittedComments.st b/packages/tooling/Parser/EmittedComments.st
new file mode 100644
index 0000000..fb09552
--- /dev/null
+++ b/packages/tooling/Parser/EmittedComments.st
@@ -0,0 +1,51 @@
+"======================================================================
+|
+|   Smalltalk syntax conversion tool
+|
+|
+ ======================================================================"
+
+
+"======================================================================
+|
+| Copyright 2007, 2008, 2009 Free Software Foundation, Inc.
+| Written by Daniele Sciascia.
+|
+| This file is part of the GNU Smalltalk class library.
+|
+| The GNU Smalltalk class library is free software; you can redistribute it
+| and/or modify it under the terms of the GNU Lesser General Public License
+| as published by the Free Software Foundation; either version 2.1, or (at
+| your option) any later version.
+|
+| The GNU Smalltalk class library 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 Lesser
+| General Public License for more details.
+|
+| You should have received a copy of the GNU Lesser General Public License
+| along with the GNU Smalltalk class library; see the file COPYING.LIB.
+| If not, write to the Free Software Foundation, 59 Temple Place - Suite
+| 330, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+EmittedEntity subclass: EmittedComments [
+    | comments |
+    <category: 'Tooling-Parser-Core'>
+
+    EmittedComments class >> comments: aCollection source: aString [
+ ^self new comments: (aCollection collect: [ :c |
+    aString copyFrom: c first to: c last ])
+    ]
+
+    emitTo: outStream filteredBy: aBlock [
+ comments do: [ :c |
+ STInST.FileOutExporter defaultExporter fileOutComment: c to: outStream.
+ outStream nl; nl]
+    ]
+
+    comments: anArray [
+ comments := anArray
+   ]
+]
diff --git a/packages/tooling/Parser/EmittedEntity.st b/packages/tooling/Parser/EmittedEntity.st
new file mode 100644
index 0000000..aeb6928
--- /dev/null
+++ b/packages/tooling/Parser/EmittedEntity.st
@@ -0,0 +1,39 @@
+"======================================================================
+|
+|   Parsing helper routines
+|
+|
+ ======================================================================"
+
+
+"======================================================================
+|
+| Copyright 2007, 2008, 2009 Free Software Foundation, Inc.
+| Written by Daniele Sciascia.
+|
+| This file is part of the GNU Smalltalk class library.
+|
+| The GNU Smalltalk class library is free software; you can redistribute it
+| and/or modify it under the terms of the GNU Lesser General Public License
+| as published by the Free Software Foundation; either version 2.1, or (at
+| your option) any later version.
+|
+| The GNU Smalltalk class library 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 Lesser
+| General Public License for more details.
+|
+| You should have received a copy of the GNU Lesser General Public License
+| along with the GNU Smalltalk class library; see the file COPYING.LIB.
+| If not, write to the Free Software Foundation, 59 Temple Place - Suite
+| 330, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+Object subclass: EmittedEntity [
+    <category: 'Tooling-Parser-Core'>
+
+    emitTo: aStream filteredBy: aBlock [
+        self subclassResponsibility
+    ]
+]
diff --git a/packages/tooling/Parser/EmittedEval.st b/packages/tooling/Parser/EmittedEval.st
new file mode 100644
index 0000000..2b82158
--- /dev/null
+++ b/packages/tooling/Parser/EmittedEval.st
@@ -0,0 +1,72 @@
+"======================================================================
+|
+|   Smalltalk syntax conversion tool
+|
+|
+ ======================================================================"
+
+
+"======================================================================
+|
+| Copyright 2007, 2008, 2009 Free Software Foundation, Inc.
+| Written by Daniele Sciascia.
+|
+| This file is part of the GNU Smalltalk class library.
+|
+| The GNU Smalltalk class library is free software; you can redistribute it
+| and/or modify it under the terms of the GNU Lesser General Public License
+| as published by the Free Software Foundation; either version 2.1, or (at
+| your option) any later version.
+|
+| The GNU Smalltalk class library 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 Lesser
+| General Public License for more details.
+|
+| You should have received a copy of the GNU Lesser General Public License
+| along with the GNU Smalltalk class library; see the file COPYING.LIB.
+| If not, write to the Free Software Foundation, 59 Temple Place - Suite
+| 330, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+EmittedEntity subclass: EmittedEval [
+    | statements comments namespace |
+
+    <category: 'Tooling-Parser-Core'>
+    <comment: 'This class is responsible for emitting a set of
+    statements that should be inside an Eval declaration.'>
+
+    EmittedEval class >> new [
+        ^super new initialize
+    ]
+
+    initialize [
+        statements := OrderedCollection new
+    ]
+
+    namespace [
+ ^namespace
+    ]
+
+    namespace: aNamespace [
+ namespace := aNamespace
+    ]
+
+    addStatement: aStatement [
+        statements add: aStatement
+    ]
+
+    emitTo: aStream filteredBy: aBlock [
+ statements isEmpty ifTrue: [ ^self ].
+ STInST.FileOutExporter defaultExporter
+    emitEval: [
+ | formatter |
+ formatter := STInST.RBFormatter new.
+ formatter indent: 1 while: [
+    formatter indent.
+            aStream nextPutAll: (formatter formatAll: statements) ]]
+    to: aStream
+    for: namespace.
+    ]
+]
diff --git a/packages/tooling/Parser/Loader.st b/packages/tooling/Parser/Loader.st
new file mode 100644
index 0000000..6b64301
--- /dev/null
+++ b/packages/tooling/Parser/Loader.st
@@ -0,0 +1,235 @@
+"======================================================================
+|
+|   Smalltalk syntax conversion tool
+|
+|
+ ======================================================================"
+
+
+"======================================================================
+|
+| Copyright 2007, 2008, 2009 Free Software Foundation, Inc.
+| Written by Daniele Sciascia.
+|
+| This file is part of the GNU Smalltalk class library.
+|
+| The GNU Smalltalk class library is free software; you can redistribute it
+| and/or modify it under the terms of the GNU Lesser General Public License
+| as published by the Free Software Foundation; either version 2.1, or (at
+| your option) any later version.
+|
+| The GNU Smalltalk class library 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 Lesser
+| General Public License for more details.
+|
+| You should have received a copy of the GNU Lesser General Public License
+| along with the GNU Smalltalk class library; see the file COPYING.LIB.
+| If not, write to the Free Software Foundation, 59 Temple Place - Suite
+| 330, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+STInST.STClassLoader subclass: Loader [
+    | stuffToEmit classesToEmit createdNamespaces filter outStream rewriter |
+
+    <category: 'Tooling-Parser-Core'>
+    <comment: 'A class loader that creates a set of "EmittedEntity"
+    based on the contents of the given file being loaded.
+    When the contents of the file are loaded, the responsibilty of
+    emitting code using the new syntax belongs to those various
+    entities that have been constructed.
+
+    TODO: Split the loading and converting'>
+
+
+    Loader class >> convertSqueakStream: in to: out [
+        <category: 'instance creation'>
+        ^self convertStream: in with: STInST.SqueakFileInParser to: out
+    ]
+
+    Loader class >> convertSIFStream: in to: out [
+        <category: 'instance creation'>
+        ^self convertStream: in with: STInST.SIFFileInParser to: out
+    ]
+
+    Loader class >> convertStream: in to: out [
+        <category: 'instance creation'>
+        ^self convertStream: in with: STInST.STFileInParser to: out
+    ]
+
+    Loader class >> convertStream: in with: aParserClass to: out [
+        <category: 'instance creation'>
+        ^self new convertStream: in with: aParserClass to: out
+    ]
+
+    initialize [
+        <category: 'initialization'>
+ super initialize.
+ filter := [ :class | [true] ].
+        stuffToEmit := OrderedSet new.
+        classesToEmit := Dictionary new.
+        createdNamespaces := OrderedSet new.
+    ]
+
+    convertStream: in with: aParserClass to: out onError: aBlock [
+        <category: 'operation'>
+        self
+    outStream: out;
+    parseSmalltalkStream: in with: aParserClass onError: aBlock;
+    doEmitStuff.
+    ]
+
+    convertStream: in with: aParserClass to: out [
+        <category: 'operation'>
+        self
+    outStream: out;
+    parseSmalltalkStream: in with: aParserClass;
+    doEmitStuff.
+    ]
+
+    filter: aBlock [
+        <category: 'accessing'>
+        filter := aBlock.
+    ]
+
+    outStream: out [
+        <category: 'accessing'>
+        outStream := out.
+    ]
+
+    rewrite: node [
+ ^rewriter isNil
+    ifTrue: [ node ]
+    ifFalse: [ rewriter executeTree: node; tree ].
+    ]
+
+    evaluate: node [
+        <category: 'overrides'>
+
+ | rewritten |
+ rewritten := self rewrite: node.
+ node comments isEmpty ifFalse: [
+    stuffToEmit add: (EmittedComments comments: node comments source: node source) ].
+
+        ^super evaluate: rewritten
+    ]
+
+    addRule: searchString parser: aParserClass [
+ | tree rule |
+ tree := aParserClass parseRewriteExpression: searchString.
+ tree isMessage ifFalse: [ self error: 'expected ->' ].
+ tree selector = #-> ifFalse: [ self error: 'expected ->' ].
+ rule := RBStringReplaceRule
+    searchForTree: tree receiver
+    replaceWith: tree arguments first.
+
+ rewriter isNil ifTrue: [ rewriter := ParseTreeRewriter new ].
+ rewriter addRule: rule
+    ]
+
+    compile: node [
+        <category: 'collecting entities'>
+
+        | rewritten method |
+
+ rewritten := self rewrite: node.
+        method := self defineMethod: rewritten.
+        (classesToEmit includesKey: currentClass asClass)
+            ifTrue: [ self addMethod: method toLoadedClass: currentClass ]
+            ifFalse: [ self addMethod: method toExtensionClass: currentClass ].
+ ^method
+    ]
+
+    lastEval [
+        <category: 'collecting entities'>
+
+ | lastIsEval evalNamespace |
+
+        evalNamespace := currentNamespace = self defaultNamespace
+    ifTrue: [ nil ]
+    ifFalse: [ currentNamespace ].
+
+        lastIsEval := stuffToEmit notEmpty
+    and: [ (stuffToEmit last isKindOf: EmittedEval)
+    and: [ stuffToEmit last namespace = evalNamespace ]].
+
+ ^lastIsEval
+    ifTrue: [ stuffToEmit last ]
+    ifFalse: [ stuffToEmit add: (EmittedEval new namespace: evalNamespace) ]
+    ]
+
+    createNamespaces [
+ createdNamespaces do: [ :each || stmt |
+    stmt := RBMessageNode
+                receiver: (RBVariableNode named: (each superspace nameIn: self currentNamespace))
+                selector: #addSubspace:
+                arguments: { RBLiteralNode value: each name asSymbol }.
+    self lastEval addStatement: stmt
+ ].
+ createdNamespaces := OrderedSet new
+    ]
+
+    unknown: node [
+        <category: 'collecting entities'>
+
+ self createNamespaces.
+ self lastEval addStatement: node.
+        ^false
+    ]
+
+    doSubclass: receiver selector: selector arguments: argumentNodes [
+        <category: 'evaluating statements'>
+
+        | class emittedClass |
+
+ createdNamespaces remove: self currentNamespace ifAbsent: [ ].
+ self createNamespaces.
+
+        class := super defineSubclass: receiver
+                       selector: selector
+                       arguments: argumentNodes.
+
+        Notification signal: ('Parsing %1' % {class}).
+        emittedClass := EmittedClass forClass: class.
+
+        classesToEmit at: class put: emittedClass.
+        stuffToEmit add: emittedClass.
+
+        ^false
+    ]
+
+    doAddNamespace: receiver selector: selector arguments: argumentNodes [
+ | ns |
+ super doAddNamespace: receiver selector: selector arguments: argumentNodes.
+
+        ns := (self resolveNamespace: receiver) at: argumentNodes first value.
+ createdNamespaces add: ns.
+ ^false
+    ]
+
+    doEmitStuff [
+        <category: 'emitting'>
+
+        stuffToEmit
+    do: [ :each | each emitTo: outStream filteredBy: filter ]
+    separatedBy: [ outStream nl; nextPut: 12 asCharacter; nl ].
+    ]
+
+    addMethod: aMethod toLoadedClass: aClass [
+        <category: 'collecting entities'>
+
+        (aClass isMetaclass)
+            ifTrue: [ (classesToEmit at: currentClass asClass) addClassMethod: aMethod ]
+            ifFalse: [ (classesToEmit at: currentClass) addMethod: aMethod ]
+    ]
+
+    addMethod: aMethod toExtensionClass: aClass [
+        <category: 'collecting entities'>
+
+        ((stuffToEmit size > 0)
+            and: [ (stuffToEmit last isKindOf: EmittedClass) and: [ stuffToEmit last forClass = aClass ] ])
+                ifTrue: [ stuffToEmit last addMethod: aMethod ]
+                ifFalse: [ stuffToEmit add: ((EmittedClass forExtension: currentClass) addMethod: aMethod) ]
+    ]
+]
diff --git a/packages/tooling/README b/packages/tooling/README
new file mode 100644
index 0000000..9c11254
--- /dev/null
+++ b/packages/tooling/README
@@ -0,0 +1,2 @@
+Random collection of tooling classes for GST. Used for import/export
+of GST to other dialects and the base for IDEs and similiar utilities.
diff --git a/packages/tooling/TODO b/packages/tooling/TODO
new file mode 100644
index 0000000..bc29fe6
--- /dev/null
+++ b/packages/tooling/TODO
@@ -0,0 +1,2 @@
+* Make the Loader have a Converter subclass and use a Visitor instead
+  of the calls to emitTo:.
diff --git a/packages/tooling/package.xml b/packages/tooling/package.xml
new file mode 100644
index 0000000..ff3c23f
--- /dev/null
+++ b/packages/tooling/package.xml
@@ -0,0 +1,11 @@
+<package>
+    <name>Tooling</name>
+    <namespace>Tooling</namespace>
+    <prereq>Parser</prereq>
+
+    <filein>Parser/EmittedEntity.st</filein>
+    <filein>Parser/EmittedClass.st</filein>
+    <filein>Parser/EmittedComments.st</filein>
+    <filein>Parser/EmittedEval.st</filein>
+    <filein>Parser/Loader.st</filein>
+</package>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

[PATCH 15/15] tooling: Introduce a helper for a Monticello export

Holger Freyther
In reply to this post by Holger Freyther
The category of classes and extensions should match the package
name. Create a small class that is checking this on a package and
print the errors.

2013-03-30  Holger Hans Peter Freyther  <[hidden email]>

        * Lint/Monticello.st: Added Monticello class for linting.
        * Parser/EmittedClass.st: Reimplement >>#isEmittedClass, >>#methodsToEmit,
                >>#classMethodsToEmit, #>>isComplete.
        * Parser/EmittedEntity.st: Added >>#isEmittedClass.
        * Parser/Loader.st: Add >>#stuffToEmit selector.
        * TODO: Add work item.
        * package.xml: Add the Lint/Monticello.st.
---
 packages/tooling/ChangeLog               |   10 ++
 packages/tooling/Lint/Monticello.st      |  151 ++++++++++++++++++++++++++++++
 packages/tooling/Makefile.frag           |    2 +-
 packages/tooling/Parser/EmittedClass.st  |   20 ++++
 packages/tooling/Parser/EmittedEntity.st |    4 +
 packages/tooling/Parser/Loader.st        |    5 +
 packages/tooling/TODO                    |   11 +++
 packages/tooling/package.xml             |    2 +
 8 files changed, 204 insertions(+), 1 deletion(-)
 create mode 100644 packages/tooling/Lint/Monticello.st

diff --git a/packages/tooling/ChangeLog b/packages/tooling/ChangeLog
index 8c85f31..a1a8760 100644
--- a/packages/tooling/ChangeLog
+++ b/packages/tooling/ChangeLog
@@ -1,5 +1,15 @@
 2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
 
+ * Lint/Monticello.st: Added Monticello class for linting.
+ * Parser/EmittedClass.st: Reimplement >>#isEmittedClass, >>#methodsToEmit,
+ >>#classMethodsToEmit, #>>isComplete.
+ * Parser/EmittedEntity.st: Added >>#isEmittedClass.
+ * Parser/Loader.st: Add >>#stuffToEmit selector.
+ * TODO: Add work item.
+ * package.xml: Add the Lint/Monticello.st.
+
+2013-03-30  Holger Hans Peter Freyther  <[hidden email]>
+
  * Makefile.frag: Added.
  * Parser/EmittedClass.st: Added from scripts/Convert.st.
  * Parser/EmittedComments.st: Added from scripts/Convert.st.
diff --git a/packages/tooling/Lint/Monticello.st b/packages/tooling/Lint/Monticello.st
new file mode 100644
index 0000000..3c7a45c
--- /dev/null
+++ b/packages/tooling/Lint/Monticello.st
@@ -0,0 +1,151 @@
+"======================================================================
+|
+|   Linting for Monticello export
+|
+|
+ ======================================================================"
+
+"======================================================================
+|
+| Copyright 2013 Free Software Foundation, Inc.
+| Written by Holger Hans Peter Freyther.
+|
+| This file is part of the GNU Smalltalk class library.
+|
+| The GNU Smalltalk class library is free software; you can redistribute it
+| and/or modify it under the terms of the GNU Lesser General Public License
+| as published by the Free Software Foundation; either version 2.1, or (at
+| your option) any later version.
+|
+| The GNU Smalltalk class library 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 Lesser
+| General Public License for more details.
+|
+| You should have received a copy of the GNU Lesser General Public License
+| along with the GNU Smalltalk class library; see the file COPYING.LIB.
+| If not, write to the Free Software Foundation, 59 Temple Place - Suite
+| 330, Boston, MA 02110-1301, USA.
+|
+ ======================================================================"
+
+
+Tooling.EmittedClass extend [
+    isComplete [
+        <category: 'accessing'>
+        ^ isComplete
+    ]
+
+    methodsToEmit [
+        <category: 'accessing'>
+        ^ methodsToEmit
+    ]
+
+    classMethodsToEmit [
+        <category: 'accessing'>
+        ^ classMethodsToEmit
+    ]
+
+    isComplete [
+        <category: 'accessing'>
+        ^ isComplete
+    ]
+]
+
+Object subclass: Monticello [
+    | loader package errors |
+    <category: 'Tooling-Lint-Monticello'>
+
+    Monticello class >> lint: aPackage [
+        "Work on a given package."
+        ^ self new
+            loadPackage: aPackage;
+            lint.
+    ]
+
+    loadPackage: aPackage [
+        package := aPackage.
+        loader := Tooling.Loader new.
+
+        self lintFiles: aPackage fileIns.
+        aPackage test ifNotNil: [
+            self lintFiles: aPackage test fileIns].
+    ]
+
+    lintFiles: aList [
+        | files |
+
+        files := package fullPathsOf: aList.
+        files do: [:each | | file |
+            file := each open: FileStream read.
+            loader parseSmalltalkStream: file with: STInST.GSTFileInParser.
+            file close.
+        ]
+    ]
+
+    loader [
+        <category: 'private'>
+        ^ loader
+    ]
+
+    lint [
+        <category: 'lint'>
+        "TODO: this should use the visitor..."
+        loader stuffToEmit do: [:each |
+            each isEmittedClass ifTrue: [self lintClass: each]].
+    ]
+
+    lintClass: aClass [
+        <category: 'lint'>
+        aClass isComplete
+            ifTrue: [self lintCompleteClass: aClass]
+            ifFalse: [self lintExtension: aClass].
+    ]
+
+    lintCompleteClass: aClass [
+        <category: 'lint'>
+        "Check if the package name is in the category"
+        (aClass forClass category startsWith: package name)
+            ifFalse: [self addError: 'Class does not begin with package name'
+                                for: aClass forClass].
+    ]
+
+    lintExtension: aClass [
+        <category: 'lint'>
+
+        aClass methodsToEmit do: [:each |
+            self lintExtensionMethod: each on: aClass].
+        aClass classMethodsToEmit do: [:each |
+            self lintExtensionMethod: each on: aClass ].
+    ]
+
+    lintExtensionMethod: aSymbol on: aClass [
+        | method |
+        <category: 'lint'>
+        method := aClass forClass >> aSymbol.
+        (method methodCategory startsWith: ('*', package name))
+            ifFalse: [self addError: 'Method does not beging with *package-name'
+                                for: aClass forClass method: aSymbol].
+    ]
+
+    addError: aString for: aClass method: aMethod [
+        <category: 'error-handling'>
+        self errors add: '%1 on %2>>%3' % {aString. aClass name asString. aMethod}.
+    ]
+
+    addError: aString for: aClass [
+        <category: 'error-handling'>
+        self errors add: '%1 on %2' % {aString. aClass name asString}.
+    ]
+
+    errors [
+        <category: 'error-handling'>
+        ^ errors ifNil: [errors := OrderedCollection new].
+    ]
+
+    printErrors [
+        <category: 'error-handling'>
+        self errors do: [:each |
+            Transcript nextPutAll: each; nl.]
+    ]
+]
diff --git a/packages/tooling/Makefile.frag b/packages/tooling/Makefile.frag
index 01d8d86..0083a52 100644
--- a/packages/tooling/Makefile.frag
+++ b/packages/tooling/Makefile.frag
@@ -1,5 +1,5 @@
 Tooling_FILES = \
-packages/tooling/Parser/EmittedEntity.st packages/tooling/Parser/EmittedClass.st packages/tooling/Parser/EmittedComments.st packages/tooling/Parser/EmittedEval.st packages/tooling/Parser/Loader.st packages/tooling/Lint/Monticello.st
+packages/tooling/Parser/EmittedEntity.st packages/tooling/Parser/EmittedClass.st packages/tooling/Parser/EmittedComments.st packages/tooling/Parser/EmittedEval.st packages/tooling/Parser/Loader.st packages/tooling/Lint/Monticello.st
 $(Tooling_FILES):
 $(srcdir)/packages/tooling/stamp-classes: $(Tooling_FILES)
  touch $(srcdir)/packages/tooling/stamp-classes
diff --git a/packages/tooling/Parser/EmittedClass.st b/packages/tooling/Parser/EmittedClass.st
index 9a2cb13..0db74eb 100644
--- a/packages/tooling/Parser/EmittedClass.st
+++ b/packages/tooling/Parser/EmittedClass.st
@@ -82,4 +82,24 @@ EmittedEntity subclass: EmittedClass [
             completeFileOut: isComplete;
             fileOutSelectors: methodsToEmit classSelectors: classMethodsToEmit.
     ]
+
+    isEmittedClass [
+        <category: 'accessing'>
+        ^ true
+    ]
+
+    methodsToEmit [
+        <category: 'accessing'>
+        ^ methodsToEmit
+    ]
+
+    classMethodsToEmit [
+        <category: 'accessing'>
+        ^ classMethodsToEmit
+    ]
+
+    isComplete [
+        <category: 'accessing'>
+        ^ isComplete
+    ]
 ]
diff --git a/packages/tooling/Parser/EmittedEntity.st b/packages/tooling/Parser/EmittedEntity.st
index aeb6928..9bdcf73 100644
--- a/packages/tooling/Parser/EmittedEntity.st
+++ b/packages/tooling/Parser/EmittedEntity.st
@@ -36,4 +36,8 @@ Object subclass: EmittedEntity [
     emitTo: aStream filteredBy: aBlock [
         self subclassResponsibility
     ]
+
+    isEmittedClass [
+        ^ false
+    ]
 ]
diff --git a/packages/tooling/Parser/Loader.st b/packages/tooling/Parser/Loader.st
index 6b64301..c8fb0ec 100644
--- a/packages/tooling/Parser/Loader.st
+++ b/packages/tooling/Parser/Loader.st
@@ -232,4 +232,9 @@ STInST.STClassLoader subclass: Loader [
                 ifTrue: [ stuffToEmit last addMethod: aMethod ]
                 ifFalse: [ stuffToEmit add: ((EmittedClass forExtension: currentClass) addMethod: aMethod) ]
     ]
+
+    stuffToEmit [
+        <category: 'accessing'>
+        ^ stuffToEmit
+    ]
 ]
diff --git a/packages/tooling/TODO b/packages/tooling/TODO
index bc29fe6..193c08a 100644
--- a/packages/tooling/TODO
+++ b/packages/tooling/TODO
@@ -1,2 +1,13 @@
 * Make the Loader have a Converter subclass and use a Visitor instead
   of the calls to emitTo:.
+
+* The following is shown as a a single class
+  Object subclass: Foo [
+        signal []
+  ]
+
+  Foo extend [
+        signalTwo []
+  ]
+
+  It should be two EmittedClass
diff --git a/packages/tooling/package.xml b/packages/tooling/package.xml
index ff3c23f..2bda19d 100644
--- a/packages/tooling/package.xml
+++ b/packages/tooling/package.xml
@@ -8,4 +8,6 @@
     <filein>Parser/EmittedComments.st</filein>
     <filein>Parser/EmittedEval.st</filein>
     <filein>Parser/Loader.st</filein>
+
+    <filein>Lint/Monticello.st</filein>
 </package>
--
1.7.10.4


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 02/15] misc: Fix compiler warnings in libgst.

Paolo Bonzini-2
In reply to this post by Holger Freyther
Il 08/04/2013 11:30, Holger Hans Peter Freyther ha scritto:

> From: Holger Hans Peter Freyther <[hidden email]>
>
> The user of the get_attributes_array is working on the message OOP,
> no need to get the message and not use it.
>
> 2013-02-24  Holger Hans Peter Freyther  <[hidden email]>
>
> * libgst/dict.c: Remove ATTRIBUTE_HIDDEN from static methods.
> * libgst/comp.c: Remove unused variables in get_attributes_array.
> * libgst/save.c: Remove unused variable in make_oop_table_to_be_saved.
> ---
>  libgst/ChangeLog |    6 ++++++
>  libgst/comp.c    |    3 ---
>  libgst/dict.c    |    6 ++----
>  libgst/save.c    |    2 --
>  4 files changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/libgst/ChangeLog b/libgst/ChangeLog
> index a88ec3b..e95a837 100644
> --- a/libgst/ChangeLog
> +++ b/libgst/ChangeLog
> @@ -1,3 +1,9 @@
> +2013-02-24  Holger Hans Peter Freyther  <[hidden email]>
> +
> + * libgst/dict.c: Remove ATTRIBUTE_HIDDEN from static methods.
> + * libgst/comp.c: Remove unused variables in get_attributes_array.
> + * libgst/save.c: Remove unused variable in make_oop_table_to_be_saved.
> +
>  2013-01-17  Gwenael Casaccio  <[hidden email]>
>  
>   * libgst/sysdep/win32/timer.c: Correct the function signature.
> diff --git a/libgst/comp.c b/libgst/comp.c
> index 9d60cec..10330e1 100644
> --- a/libgst/comp.c
> +++ b/libgst/comp.c
> @@ -2313,9 +2313,6 @@ get_attributes_array (tree_node attribute_list)
>      {
>        tree_node value = attribute_list->v_list.value;
>        OOP messageOOP = value->v_const.val.oopVal;
> -      gst_message message = (gst_message) OOP_TO_OBJ (messageOOP);
> -      OOP selectorOOP = message->selector;
> -
>        attributes->data[i] = messageOOP;
>      }
>  
> diff --git a/libgst/dict.c b/libgst/dict.c
> index 542c42a..f4324b7 100644
> --- a/libgst/dict.c
> +++ b/libgst/dict.c
> @@ -182,15 +182,13 @@ OOP _gst_processor_oop = NULL;
>     dictionary instance that DICTIONARYOOP is pointing to with a new,
>     larger dictionary, and returns this new dictionary (the object
>     pointer, not the OOP).  */
> -static gst_object grow_dictionary (OOP dictionaryOOP)
> -  ATTRIBUTE_HIDDEN;
> +static gst_object grow_dictionary (OOP dictionaryOOP);
>  
>  /* Called when an IdentityDictionary becomes full, this routine
>     replaces the IdentityDictionary instance that IDENTITYDICTIONARYOOP
>     is pointing to with a new, larger dictionary, and returns this new
>     dictionary (the object pointer, not the OOP).  */
> -static gst_object grow_identity_dictionary (OOP identityDictionaryOOP)
> -  ATTRIBUTE_HIDDEN;
> +static gst_object grow_identity_dictionary (OOP identityDictionaryOOP);
>  
>  /* Answer the number of slots that are in a dictionary of
>     OLDNUMFIELDS items after growing it.  */
> diff --git a/libgst/save.c b/libgst/save.c
> index bf16368..be980a7 100644
> --- a/libgst/save.c
> +++ b/libgst/save.c
> @@ -377,8 +377,6 @@ make_oop_table_to_be_saved (struct save_file_header *header)
>      {
>        if (IS_OOP_VALID_GC (oop))
>   {
> -  int numPointers = NUM_OOPS (oop->object);
> -
>            myOOPTable[i].flags = (oop->flags & ~F_RUNTIME) | F_OLD;
>    myOOPTable[i].object = (gst_object) TO_INT (oop->object->objSize);
>   }
>

Ok.

Paolo

_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 01/15] opcode: Remove the copy of the binutils code from the repository

Paolo Bonzini-2
In reply to this post by Holger Freyther
Il 08/04/2013 11:30, Holger Hans Peter Freyther ha scritto:

> From: Gwenael Casaccio <[hidden email]>
>
> The disassemble function was never called, the opcode code is outdated,
> GNU lightning gained functionality to do the disassembly. For debugging
> implementing the GNU GDB JIT interface might be easier.
>
> 2013-01-21  Gwenael Casaccio  <[hidden email]>
>
> * main.c: Remove ENABLE_DISASSEMBLER support
> * opcode/dis-buf.c: Delete
> * opcode/disass.c: Delete
> * opcode/i386-dis.c: Delete
> * opcode/ppc-dis.c: Delete
> * opcode/ppc-opc.c: Delete
> * opcode/sparc-dis.c: Delete
> * opcode/sparc-opc.c: Delete
> ---
>  ChangeLog          |   11 +
>  Makefile.am        |   11 +-
>  configure.ac       |   11 +-
>  main.c             |   35 -
>  opcode/Makefile.am |    8 -
>  opcode/ansidecl.h  |   17 -
>  opcode/bfd.h       |  185 ----
>  opcode/dis-asm.h   |  175 ----
>  opcode/dis-buf.c   |   70 --
>  opcode/disass.c    |   65 --
>  opcode/i386-dis.c  | 2031 -------------------------------------
>  opcode/i386.h      |  898 -----------------
>  opcode/ppc-dis.c   |  238 -----
>  opcode/ppc-opc.c   | 2830 ----------------------------------------------------
>  opcode/ppc.h       |  248 -----
>  opcode/sparc-dis.c |  868 ----------------
>  opcode/sparc-opc.c | 1757 --------------------------------
>  opcode/sparc.h     |  220 ----
>  opcode/sysdep.h    |    3 -
>  19 files changed, 13 insertions(+), 9668 deletions(-)
>  delete mode 100644 opcode/Makefile.am
>  delete mode 100644 opcode/ansidecl.h
>  delete mode 100644 opcode/bfd.h
>  delete mode 100644 opcode/dis-asm.h
>  delete mode 100644 opcode/dis-buf.c
>  delete mode 100644 opcode/disass.c
>  delete mode 100644 opcode/i386-dis.c
>  delete mode 100644 opcode/i386.h
>  delete mode 100644 opcode/ppc-dis.c
>  delete mode 100644 opcode/ppc-opc.c
>  delete mode 100644 opcode/ppc.h
>  delete mode 100644 opcode/sparc-dis.c
>  delete mode 100644 opcode/sparc-opc.c
>  delete mode 100644 opcode/sparc.h
>  delete mode 100644 opcode/sysdep.h
>
> diff --git a/ChangeLog b/ChangeLog
> index 5b8cf1b..2abc1c4 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,14 @@
> +2013-01-21  Gwenael Casaccio  <[hidden email]>
> +
> + * main.c: Remove ENABLE_DISASSEMBLER support
> + * opcode/dis-buf.c: Delete
> + * opcode/disass.c: Delete
> + * opcode/i386-dis.c: Delete
> + * opcode/ppc-dis.c: Delete
> + * opcode/ppc-opc.c: Delete
> + * opcode/sparc-dis.c: Delete
> + * opcode/sparc-opc.c: Delete
> +
>  2013-02-14  Holger Hans Peter Freyther  <[hidden email]>
>  
>   * kernel/StreamOps.st: Override the >>#species selector.
> diff --git a/Makefile.am b/Makefile.am
> index 732a72c..4641e83 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -22,13 +22,10 @@ ACLOCAL_AMFLAGS = -I build-aux
>  PACKAGE=smalltalk
>  gstdatadir=$(pkgdatadir)
>  
> -DIST_SUBDIRS = lib-src snprintfv lightning opcode libgst \
> +DIST_SUBDIRS = lib-src snprintfv lightning libgst \
>   . $(ALL_PACKAGES) tests doc
>  
>  SUBDIRS = lib-src lightning $(subdirs)
> -if ENABLE_DISASSEMBLER
> -SUBDIRS += opcode
> -endif
>  SUBDIRS += libgst . $(BUILT_PACKAGES) doc tests
>  
>  # Running gst inside the build directory...
> @@ -115,12 +112,6 @@ gst_LDADD = libgst/libgst.la lib-src/library.la @ICON@
>  gst_DEPENDENCIES = libgst/libgst.la lib-src/library.la @ICON@
>  gst_LDFLAGS = -export-dynamic $(RELOC_LDFLAGS) $(LIBFFI_EXECUTABLE_LDFLAGS)
>  
> -if ENABLE_DISASSEMBLER
> -gst_LDADD += opcode/libdisass.la
> -gst_DEPENDENCIES += opcode/libdisass.la
> -AM_CPPFLAGS += -I$(top_srcdir)/opcode
> -endif
> -
>  # The single gst-tool executable is installed with multiple names, hence
>  # we use noinst here.
>  noinst_PROGRAMS = gst-tool
> diff --git a/configure.ac b/configure.ac
> index 29bf036..798a6a8 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -626,15 +626,6 @@ if test "$enable_jit" != no; then
>      [Define to enable dynamic translation to machine code])
>  fi
>  
> -AC_ARG_ENABLE(disassembler,
> -[  --enable-disassembler   include a disassembler in the gst executable], ,
> -enable_disassembler=no)
> -AM_CONDITIONAL(ENABLE_DISASSEMBLER, test "$enable_disassembler" != no)
> -if test "$enable_disassembler" != no; then
> -  AC_DEFINE(ENABLE_DISASSEMBLER, 1,
> -    [Define to include a disassembler in the gst executable])
> -fi
> -
>  AC_ARG_ENABLE(dld,
>  [  --disable-dld           disable loading of external modules at runtime], ,
>  enable_dld=yes)
> @@ -888,6 +879,6 @@ AC_CONFIG_FILES(Makefile)
>  
>  dnl VM makefiles
>  AC_CONFIG_FILES(doc/Makefile lib-src/Makefile libgst/Makefile)
> -AC_CONFIG_FILES(opcode/Makefile lightning/Makefile tests/Makefile)
> +AC_CONFIG_FILES(lightning/Makefile tests/Makefile)
>  
>  AC_OUTPUT
> diff --git a/main.c b/main.c
> index 084c9ed..9c6bc60 100644
> --- a/main.c
> +++ b/main.c
> @@ -64,11 +64,6 @@
>  #include <sys/stat.h>
>  #include <errno.h>
>  
> -#ifdef ENABLE_DISASSEMBLER
> -#define TRUE_FALSE_ALREADY_DEFINED
> -#include "dis-asm.h"
> -#endif
> -
>  static const char help_text[] =
>    "GNU Smalltalk usage:"
>    "\n"
> @@ -424,33 +419,3 @@ main(int argc, const char **argv)
>    exit (0);
>  }
>  
> -#ifdef ENABLE_DISASSEMBLER
> -void disassemble(stream, from, to)
> -     FILE *stream;
> -     char *from, *to;
> -{
> -  disassemble_info info;
> -  bfd_vma pc = (bfd_vma) from;
> -  bfd_vma end = (bfd_vma) to;
> -
> -  INIT_DISASSEMBLE_INFO(info, stream, fprintf);
> -  info.buffer = NULL;
> -  info.buffer_vma = 0;
> -  info.buffer_length = end;
> -
> -  while (pc < end) {
> -    fprintf_vma(stream, pc);
> -    putc('\t', stream);
> -#ifdef __i386__
> -    pc += print_insn_i386(pc, &info);
> -#endif
> -#ifdef __ppc__
> -    pc += print_insn_big_powerpc(pc, &info);
> -#endif
> -#ifdef __sparc__
> -    pc += print_insn_sparc(pc, &info);
> -#endif
> -    putc('\n', stream);
> -  }
> -}
> -#endif
> diff --git a/opcode/Makefile.am b/opcode/Makefile.am
> deleted file mode 100644
> index d771581..0000000
> --- a/opcode/Makefile.am
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -noinst_LTLIBRARIES = libdisass.la
> -
> -AM_CPPFLAGS = -I$(top_srcdir)
> -
> -libdisass_la_SOURCES = dis-buf.c i386-dis.c ppc-dis.c ppc-opc.c sparc-dis.c \
> - sparc-opc.c disass.c
> -
> -noinst_HEADERS = ansidecl.h bfd.h dis-asm.h i386.h ppc.h sparc.h sysdep.h
> diff --git a/opcode/ansidecl.h b/opcode/ansidecl.h
> deleted file mode 100644
> index f0dd187..0000000
> --- a/opcode/ansidecl.h
> +++ /dev/null
> @@ -1,17 +0,0 @@
> -#ifndef __ANSIDECL_H_SEEN
> -#define __ANSIDECL_H_SEEN
> -
> -#ifdef __STDC__
> -#define PARAMS(x) x
> -#ifndef PTR
> -typedef void *PTR;
> -#endif
> -#else
> -#define CONST const
> -#define PARAMS(x) ()
> -#ifndef PTR
> -typedef char *PTR;
> -#endif
> -#endif
> -
> -#endif
> diff --git a/opcode/bfd.h b/opcode/bfd.h
> deleted file mode 100644
> index 2f2669f..0000000
> --- a/opcode/bfd.h
> +++ /dev/null
> @@ -1,185 +0,0 @@
> -/* Main header file for the bfd library -- portable access to object files.
> -   Copyright 1990, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
> -   Contributed by Cygnus Support.
> -
> -This file is part of BFD, the Binary File Descriptor library.
> -(Simplified and modified for GNU lightning)
> -
> -This program is free software; you can redistribute it and/or modify
> -it under the terms of the GNU General Public License as published by
> -the Free Software Foundation; either version 2 of the License, or
> -(at your option) any later version.
> -
> -This program is distributed in the hope that it will be useful,
> -but WITHOUT ANY WARRANTY; without even the implied warranty of
> -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -GNU General Public License for more details.
> -
> -You should have received a copy of the GNU General Public License
> -along with this program; if not, write to the Free Software
> -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
> -
> -/* bfd.h -- The only header file required by users of the bfd library
> -
> -The bfd.h file is generated from bfd-in.h and various .c files; if you
> -change it, your changes will probably be lost.
> -
> -All the prototypes and definitions following the comment "THE FOLLOWING
> -IS EXTRACTED FROM THE SOURCE" are extracted from the source files for
> -BFD.  If you change it, someone oneday will extract it from the source
> -again, and your changes will be lost.  To save yourself from this bind,
> -change the definitions in the source in the bfd directory.  Type "make
> -docs" and then "make headers" in that directory, and magically this file
> -will change to reflect your changes.
> -
> -If you don't have the tools to perform the extraction, then you are
> -safe from someone on your system trampling over your header files.
> -You should still maintain the equivalence between the source and this
> -file though; every change you make to the .c file should be reflected
> -here.  */
> -
> -#ifndef __BFD_H_SEEN__
> -#define __BFD_H_SEEN__
> -
> -#include "ansidecl.h"
> -
> -#ifndef INLINE
> -#if __GNUC__ >= 2
> -#define INLINE __inline__
> -#else
> -#define INLINE
> -#endif
> -#endif
> -
> -/* To squelch erroneous compiler warnings ("illegal pointer
> -   combination") from the SVR3 compiler, we would like to typedef
> -   boolean to int (it doesn't like functions which return boolean.
> -   Making sure they are never implicitly declared to return int
> -   doesn't seem to help).  But this file is not configured based on
> -   the host.  */
> -/* General rules: functions which are boolean return true on success
> -   and false on failure (unless they're a predicate).   -- bfd.doc */
> -/* I'm sure this is going to break something and someone is going to
> -   force me to change it. */
> -/* typedef enum boolean {false, true} boolean; */
> -/* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h>  -fnf */
> -/* It gets worse if the host also defines a true/false enum... -sts */
> -/* And even worse if your compiler has built-in boolean types... -law */
> -#if defined (__GNUG__) && (__GNUC_MINOR__ > 5)
> -#define TRUE_FALSE_ALREADY_DEFINED
> -#endif
> -#ifdef MPW
> -/* Pre-emptive strike - get the file with the enum. */
> -#include <Types.h>
> -#define TRUE_FALSE_ALREADY_DEFINED
> -#endif /* MPW */
> -#ifndef TRUE_FALSE_ALREADY_DEFINED
> -typedef enum bfd_boolean {false, true} boolean;
> -#define BFD_TRUE_FALSE
> -#else
> -/* Use enum names that will appear nowhere else.  */
> -typedef enum bfd_boolean {bfd_fffalse, bfd_tttrue} boolean;
> -#endif
> -
> -/* A pointer to a position in a file.  */
> -/* FIXME:  This should be using off_t from <sys/types.h>.
> -   For now, try to avoid breaking stuff by not including <sys/types.h> here.
> -   This will break on systems with 64-bit file offsets (e.g. 4.4BSD).
> -   Probably the best long-term answer is to avoid using file_ptr AND off_t
> -   in this header file, and to handle this in the BFD implementation
> -   rather than in its interface.  */
> -/* typedef off_t file_ptr; */
> -typedef long int file_ptr;
> -
> -/* Represent a target address.  Also used as a generic unsigned type
> -   which is guaranteed to be big enough to hold any arithmetic types
> -   we need to deal with.  */
> -typedef unsigned long bfd_vma;
> -
> -/* A generic signed type which is guaranteed to be big enough to hold any
> -   arithmetic types we need to deal with.  Can be assumed to be compatible
> -   with bfd_vma in the same way that signed and unsigned ints are compatible
> -   (as parameters, in assignment, etc).  */
> -typedef long bfd_signed_vma;
> -
> -typedef unsigned long symvalue;
> -typedef unsigned long bfd_size_type;
> -
> -/* Print a bfd_vma x on stream s.  */
> -#define fprintf_vma(s,x) fprintf(s, "%08lx", x)
> -#define sprintf_vma(s,x) sprintf(s, "%08lx", x)
> -#define printf_vma(x) fprintf_vma(stdout,x)
> -
> -typedef unsigned int flagword; /* 32 bits of flags */
> -typedef unsigned char bfd_byte;
> -
> -enum bfd_architecture
> -{
> -  bfd_arch_unknown,    /* File arch not known */
> -  bfd_arch_obscure,    /* Arch known, not one of these */
> -  bfd_arch_m68k,       /* Motorola 68xxx */
> -  bfd_arch_vax,        /* DEC Vax */  
> -  bfd_arch_i960,       /* Intel 960 */
> -     /* The order of the following is important.
> -       lower number indicates a machine type that
> -       only accepts a subset of the instructions
> -       available to machines with higher numbers.
> -       The exception is the "ca", which is
> -       incompatible with all other machines except
> -       "core". */
> -
> -#define bfd_mach_i960_core      1
> -#define bfd_mach_i960_ka_sa     2
> -#define bfd_mach_i960_kb_sb     3
> -#define bfd_mach_i960_mc        4
> -#define bfd_mach_i960_xa        5
> -#define bfd_mach_i960_ca        6
> -#define bfd_mach_i960_jx 7
> -#define bfd_mach_i960_hx        8
> -
> -  bfd_arch_a29k,       /* AMD 29000 */
> -  bfd_arch_sparc,      /* SPARC */
> -#define bfd_mach_sparc 1
> - /* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
> -#define bfd_mach_sparc_v8plus 2
> -#define bfd_mach_sparc_v8plusa 3  /* with ultrasparc add'ns */
> -#define bfd_mach_sparc_v9 4
> -#define bfd_mach_sparc_v9a 5  /* with ultrasparc add'ns */
> - /* Nonzero if MACH has the v9 instruction set.  */
> -#define bfd_mach_sparc_v9_p(mach) ((mach) != bfd_mach_sparc)
> -  bfd_arch_mips,       /* MIPS Rxxxx */
> -  bfd_arch_i386,       /* Intel 386 */
> -  bfd_arch_we32k,      /* AT&T WE32xxx */
> -  bfd_arch_tahoe,      /* CCI/Harris Tahoe */
> -  bfd_arch_i860,       /* Intel 860 */
> -  bfd_arch_romp,       /* IBM ROMP PC/RT */
> -  bfd_arch_alliant,    /* Alliant */
> -  bfd_arch_convex,     /* Convex */
> -  bfd_arch_m88k,       /* Motorola 88xxx */
> -  bfd_arch_pyramid,    /* Pyramid Technology */
> -  bfd_arch_h8300,      /* Hitachi H8/300 */
> -#define bfd_mach_h8300   1
> -#define bfd_mach_h8300h  2
> -  bfd_arch_powerpc,    /* PowerPC */
> -  bfd_arch_rs6000,     /* IBM RS/6000 */
> -  bfd_arch_hppa,       /* HP PA RISC */
> -  bfd_arch_z8k,        /* Zilog Z8000 */
> -#define bfd_mach_z8001 1
> -#define bfd_mach_z8002 2
> -  bfd_arch_h8500,      /* Hitachi H8/500 */
> -  bfd_arch_sh,         /* Hitachi SH */
> -  bfd_arch_alpha,      /* Dec Alpha */
> -  bfd_arch_arm,        /* Advanced Risc Machines ARM */
> -  bfd_arch_ns32k,      /* National Semiconductors ns32000 */
> -  bfd_arch_w65,        /* WDC 65816 */
> -  bfd_arch_last
> -  };
> -
> -enum bfd_endian { BFD_ENDIAN_UNKNOWN };
> -
> -typedef struct bfd bfd;
> -
> -#define bfd_getb32(x) *((int *)(x))
> -#define bfd_getl32(x) *((int *)(x))
> -
> -#endif
> diff --git a/opcode/dis-asm.h b/opcode/dis-asm.h
> deleted file mode 100644
> index d70bd51..0000000
> --- a/opcode/dis-asm.h
> +++ /dev/null
> @@ -1,175 +0,0 @@
> -/* Interface between the opcode library and its callers.
> -   Written by Cygnus Support, 1993.
> -
> -   The opcode library (libopcodes.a) provides instruction decoders for
> -   a large variety of instruction sets, callable with an identical
> -   interface, for making instruction-processing programs more independent
> -   of the instruction set being processed.  */
> -
> -#ifndef DIS_ASM_H
> -#define DIS_ASM_H
> -
> -#include <stdio.h>
> -#include "bfd.h"
> -
> -typedef int (*fprintf_ftype) PARAMS((FILE*, const char*, ...));
> -
> -enum dis_insn_type {
> -  dis_noninsn, /* Not a valid instruction */
> -  dis_nonbranch, /* Not a branch instruction */
> -  dis_branch, /* Unconditional branch */
> -  dis_condbranch, /* Conditional branch */
> -  dis_jsr, /* Jump to subroutine */
> -  dis_condjsr, /* Conditional jump to subroutine */
> -  dis_dref, /* Data reference instruction */
> -  dis_dref2 /* Two data references in instruction */
> -};
> -
> -/* This struct is passed into the instruction decoding routine,
> -   and is passed back out into each callback.  The various fields are used
> -   for conveying information from your main routine into your callbacks,
> -   for passing information into the instruction decoders (such as the
> -   addresses of the callback functions), or for passing information
> -   back from the instruction decoders to their callers.
> -
> -   It must be initialized before it is first passed; this can be done
> -   by hand, or using one of the initialization macros below.  */
> -
> -typedef struct disassemble_info {
> -  fprintf_ftype fprintf_func;
> -  FILE *stream;
> -  PTR application_data;
> -
> -  /* Target description.  We could replace this with a pointer to the bfd,
> -     but that would require one.  There currently isn't any such requirement
> -     so to avoid introducing one we record these explicitly.  */
> -  /* The bfd_arch value.  */
> -  enum bfd_architecture arch;
> -  /* The bfd_mach value.  */
> -  unsigned long mach;
> -  /* Endianness (for bi-endian cpus).  Mono-endian cpus can ignore this.  */
> -  enum bfd_endian endian;
> -
> -  /* For use by the disassembler.
> -     The top 16 bits are reserved for public use (and are documented here).
> -     The bottom 16 bits are for the internal use of the disassembler.  */
> -  unsigned long flags;
> -  PTR private_data;
> -
> -  /* Function used to get bytes to disassemble.  MEMADDR is the
> -     address of the stuff to be disassembled, MYADDR is the address to
> -     put the bytes in, and LENGTH is the number of bytes to read.
> -     INFO is a pointer to this struct.
> -     Returns an errno value or 0 for success.  */
> -  int (*read_memory_func)
> -    PARAMS ((bfd_vma memaddr, bfd_byte *myaddr, int length,
> -     struct disassemble_info *info));
> -
> -  /* Function which should be called if we get an error that we can't
> -     recover from.  STATUS is the errno value from read_memory_func and
> -     MEMADDR is the address that we were trying to read.  INFO is a
> -     pointer to this struct.  */
> -  void (*memory_error_func)
> -    PARAMS ((int status, bfd_vma memaddr, struct disassemble_info *info));
> -
> -  /* Function called to print ADDR.  */
> -  void (*print_address_func)
> -    PARAMS ((bfd_vma addr, struct disassemble_info *info));
> -
> -  /* These are for buffer_read_memory.  */
> -  bfd_byte *buffer;
> -  bfd_vma buffer_vma;
> -  int buffer_length;
> -
> -  /* Results from instruction decoders.  Not all decoders yet support
> -     this information.  This info is set each time an instruction is
> -     decoded, and is only valid for the last such instruction.
> -
> -     To determine whether this decoder supports this information, set
> -     insn_info_valid to 0, decode an instruction, then check it.  */
> -
> -  char insn_info_valid; /* Branch info has been set. */
> -  char branch_delay_insns; /* How many sequential insn's will run before
> -   a branch takes effect.  (0 = normal) */
> -  char data_size; /* Size of data reference in insn, in bytes */
> -  enum dis_insn_type insn_type; /* Type of instruction */
> -  bfd_vma target; /* Target address of branch or dref, if known;
> -   zero if unknown.  */
> -  bfd_vma target2; /* Second target address for dref2 */
> -
> -} disassemble_info;
> -
> -
> -/* Standard disassemblers.  Disassemble one instruction at the given
> -   target address.  Return number of bytes processed.  */
> -typedef int (*disassembler_ftype)
> -     PARAMS((bfd_vma, disassemble_info *));
> -
> -extern int print_insn_big_mips PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_little_mips PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_i386 PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_m68k PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_z8001 PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_z8002 PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_h8300 PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_h8300h PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_h8500 PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_alpha PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_big_arm PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_little_arm PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_sparc PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_sparc64 PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_big_a29k PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_little_a29k PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_i960 PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_sh PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_shl PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_hppa PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_m88k PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_ns32k PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_big_powerpc PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_little_powerpc PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_rs6000 PARAMS ((bfd_vma, disassemble_info*));
> -extern int print_insn_w65 PARAMS ((bfd_vma, disassemble_info*));
> -
> -/* Fetch the disassembler for a given BFD, if that support is available.  */
> -extern disassembler_ftype disassembler PARAMS ((bfd *));
> -
> -
> -/* This block of definitions is for particular callers who read instructions
> -   into a buffer before calling the instruction decoder.  */
> -
> -/* Here is a function which callers may wish to use for read_memory_func.
> -   It gets bytes from a buffer.  */
> -extern int buffer_read_memory
> -  PARAMS ((bfd_vma, bfd_byte *, int, struct disassemble_info *));
> -
> -/* This function goes with buffer_read_memory.
> -   It prints a message using info->fprintf_func and info->stream.  */
> -extern void perror_memory PARAMS ((int, bfd_vma, struct disassemble_info *));
> -
> -
> -/* Just print the address in hex.  This is included for completeness even
> -   though both GDB and objdump provide their own (to print symbolic
> -   addresses).  */
> -extern void generic_print_address
> -  PARAMS ((bfd_vma, struct disassemble_info *));
> -
> -/* Macro to initialize a disassemble_info struct.  This should be called
> -   by all applications creating such a struct.  */
> -#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \
> -  (INFO).fprintf_func = (FPRINTF_FUNC), \
> -  (INFO).stream = (STREAM), \
> -  (INFO).buffer = NULL, \
> -  (INFO).buffer_vma = 0, \
> -  (INFO).buffer_length = 0, \
> -  (INFO).read_memory_func = buffer_read_memory, \
> -  (INFO).memory_error_func = perror_memory, \
> -  (INFO).print_address_func = generic_print_address, \
> -  (INFO).arch = bfd_arch_unknown, \
> -  (INFO).mach = 0, \
> -  (INFO).endian = BFD_ENDIAN_UNKNOWN, \
> -  (INFO).flags = 0, \
> -  (INFO).insn_info_valid = 0
> -
> -#endif /* ! defined (DIS_ASM_H) */
> diff --git a/opcode/dis-buf.c b/opcode/dis-buf.c
> deleted file mode 100644
> index d04ddfd..0000000
> --- a/opcode/dis-buf.c
> +++ /dev/null
> @@ -1,70 +0,0 @@
> -/* Disassemble from a buffer, for GNU.
> -   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
> -
> -This program is free software; you can redistribute it and/or modify
> -it under the terms of the GNU General Public License as published by
> -the Free Software Foundation; either version 2 of the License, or
> -(at your option) any later version.
> -
> -This program is distributed in the hope that it will be useful,
> -but WITHOUT ANY WARRANTY; without even the implied warranty of
> -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -GNU General Public License for more details.
> -
> -You should have received a copy of the GNU General Public License
> -along with this program; if not, write to the Free Software
> -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
> -
> -#include "sysdep.h"
> -#include "dis-asm.h"
> -#include <errno.h>
> -
> -/* Get LENGTH bytes from info's buffer, at target address memaddr.
> -   Transfer them to myaddr.  */
> -int
> -buffer_read_memory (memaddr, myaddr, length, info)
> -     bfd_vma memaddr;
> -     bfd_byte *myaddr;
> -     int length;
> -     struct disassemble_info *info;
> -{
> -  if (memaddr < info->buffer_vma
> -      || memaddr + length > info->buffer_vma + info->buffer_length)
> -    /* Out of bounds.  Use EIO because GDB uses it.  */
> -    return EIO;
> -  memcpy (myaddr, info->buffer + (memaddr - info->buffer_vma), length);
> -  return 0;
> -}
> -
> -/* Print an error message.  We can assume that this is in response to
> -   an error return from buffer_read_memory.  */
> -void
> -perror_memory (status, memaddr, info)
> -     int status;
> -     bfd_vma memaddr;
> -     struct disassemble_info *info;
> -{
> -  if (status != EIO)
> -    /* Can't happen.  */
> -    (*info->fprintf_func) (info->stream, "Unknown error %d\n", status);
> -  else
> -    /* Actually, address between memaddr and memaddr + len was
> -       out of bounds.  */
> -    (*info->fprintf_func) (info->stream,
> -   "Address 0x%x is out of bounds.\n", memaddr);
> -}
> -
> -/* This could be in a separate file, to save miniscule amounts of space
> -   in statically linked executables.  */
> -
> -/* Just print the address is hex.  This is included for completeness even
> -   though both GDB and objdump provide their own (to print symbolic
> -   addresses).  */
> -
> -void
> -generic_print_address (addr, info)
> -     bfd_vma addr;
> -     struct disassemble_info *info;
> -{
> -  (*info->fprintf_func) (info->stream, "0x%x", addr);
> -}
> diff --git a/opcode/disass.c b/opcode/disass.c
> deleted file mode 100644
> index 008a9d9..0000000
> --- a/opcode/disass.c
> +++ /dev/null
> @@ -1,65 +0,0 @@
> -/******************************** -*- C -*- ****************************
> - *
> - * lightning disassembling support
> - *
> - ***********************************************************************/
> -
> -
> -/***********************************************************************
> - *
> - * Copyright 2000 Free Software Foundation, Inc.
> - * Written by Paolo Bonzini.
> - *
> - * This file is part of GNU lightning.
> - *
> - * GNU lightning is free software; you can redistribute it and/or modify it
> - * under the terms of the GNU Lesser General Public License as published
> - * by the Free Software Foundation; either version 2.1, or (at your option)
> - * any later version.
> - *
> - * GNU lightning 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 Lesser General Public
> - * License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public License
> - * along with GNU lightning; see the file COPYING.LESSER; if not, write to the
> - * Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
> - * MA 02110-1301, USA.
> - *
> - ***********************************************************************/
> -
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include "config.h"
> -#include "dis-asm.h"
> -
> -void disassemble(stream, from, to)
> -     FILE *stream;
> -     char *from, *to;
> -{
> -  disassemble_info info;
> -  bfd_vma pc = (bfd_vma) from;
> -  bfd_vma end = (bfd_vma) to;
> -
> -  INIT_DISASSEMBLE_INFO(info, stream, fprintf);
> -  info.buffer = NULL;
> -  info.buffer_vma = 0;
> -  info.buffer_length = end;
> -
> -  while (pc < end) {
> -    fprintf_vma(stream, pc);
> -    putc('\t', stream);
> -#ifdef LIGHTNING_I386
> -    pc += print_insn_i386(pc, &info);
> -#endif
> -#ifdef LIGHTNING_PPC
> -    pc += print_insn_big_powerpc(pc, &info);
> -#endif
> -#ifdef LIGHTNING_SPARC
> -    pc += print_insn_sparc(pc, &info);
> -#endif
> -    putc('\n', stream);
> -  }
> -}
> -
> diff --git a/opcode/i386-dis.c b/opcode/i386-dis.c
> deleted file mode 100644
> index 1c2ebea..0000000
> --- a/opcode/i386-dis.c
> +++ /dev/null
> @@ -1,2031 +0,0 @@
> -/* Print i386 instructions for GDB, the GNU debugger.
> -   Copyright (C) 1988, 89, 91, 93, 94, 95, 1996 Free Software Foundation, Inc.
> -
> -This file is part of GDB.
> -
> -This program is free software; you can redistribute it and/or modify
> -it under the terms of the GNU General Public License as published by
> -the Free Software Foundation; either version 2 of the License, or
> -(at your option) any later version.
> -
> -This program is distributed in the hope that it will be useful,
> -but WITHOUT ANY WARRANTY; without even the implied warranty of
> -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -GNU General Public License for more details.
> -
> -You should have received a copy of the GNU General Public License
> -along with this program; if not, write to the Free Software
> -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
> -
> -/*
> - * 80386 instruction printer by Pace Willisson ([hidden email])
> - * July 1988
> - *  modified by John Hassey ([hidden email])
> - */
> -
> -/*
> - * The main tables describing the instructions is essentially a copy
> - * of the "Opcode Map" chapter (Appendix A) of the Intel 80386
> - * Programmers Manual.  Usually, there is a capital letter, followed
> - * by a small letter.  The capital letter tell the addressing mode,
> - * and the small letter tells about the operand size.  Refer to
> - * the Intel manual for details.
> - */
> -
> -#include "dis-asm.h"
> -#include "sysdep.h"
> -
> -#define MAXLEN 20
> -
> -#include <setjmp.h>
> -
> -struct dis_private
> -{
> -  /* Points to first byte not fetched.  */
> -  bfd_byte *max_fetched;
> -  bfd_byte the_buffer[MAXLEN];
> -  bfd_vma insn_start;
> -  jmp_buf bailout;
> -};
> -
> -/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
> -   to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
> -   on error.  */
> -#define FETCH_DATA(info, addr) \
> -  ((addr) <= ((struct dis_private *)(info->private_data))->max_fetched \
> -   ? 1 : fetch_data ((info), (addr)))
> -
> -static int
> -fetch_data (info, addr)
> -     struct disassemble_info *info;
> -     bfd_byte *addr;
> -{
> -  int status;
> -  struct dis_private *priv = (struct dis_private *)info->private_data;
> -  bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
> -
> -  status = (*info->read_memory_func) (start,
> -      priv->max_fetched,
> -      addr - priv->max_fetched,
> -      info);
> -  if (status != 0)
> -    {
> -      (*info->memory_error_func) (status, start, info);
> -      longjmp (priv->bailout, 1);
> -    }
> -  else
> -    priv->max_fetched = addr;
> -  return 1;
> -}
> -
> -#define Eb OP_E, b_mode
> -#define indirEb OP_indirE, b_mode
> -#define Gb OP_G, b_mode
> -#define Ev OP_E, v_mode
> -#define indirEv OP_indirE, v_mode
> -#define Ew OP_E, w_mode
> -#define Ma OP_E, v_mode
> -#define M OP_E, 0
> -#define Mp OP_E, 0 /* ? */
> -#define Gv OP_G, v_mode
> -#define Gw OP_G, w_mode
> -#define Rw OP_rm, w_mode
> -#define Rd OP_rm, d_mode
> -#define Ib OP_I, b_mode
> -#define sIb OP_sI, b_mode /* sign extened byte */
> -#define Iv OP_I, v_mode
> -#define Iw OP_I, w_mode
> -#define Jb OP_J, b_mode
> -#define Jv OP_J, v_mode
> -#define ONE OP_ONE, 0
> -#define Cd OP_C, d_mode
> -#define Dd OP_D, d_mode
> -#define Td OP_T, d_mode
> -
> -#define eAX OP_REG, eAX_reg
> -#define eBX OP_REG, eBX_reg
> -#define eCX OP_REG, eCX_reg
> -#define eDX OP_REG, eDX_reg
> -#define eSP OP_REG, eSP_reg
> -#define eBP OP_REG, eBP_reg
> -#define eSI OP_REG, eSI_reg
> -#define eDI OP_REG, eDI_reg
> -#define AL OP_REG, al_reg
> -#define CL OP_REG, cl_reg
> -#define DL OP_REG, dl_reg
> -#define BL OP_REG, bl_reg
> -#define AH OP_REG, ah_reg
> -#define CH OP_REG, ch_reg
> -#define DH OP_REG, dh_reg
> -#define BH OP_REG, bh_reg
> -#define AX OP_REG, ax_reg
> -#define DX OP_REG, dx_reg
> -#define indirDX OP_REG, indir_dx_reg
> -
> -#define Sw OP_SEG, w_mode
> -#define Ap OP_DIR, lptr
> -#define Av OP_DIR, v_mode
> -#define Ob OP_OFF, b_mode
> -#define Ov OP_OFF, v_mode
> -#define Xb OP_DSSI, b_mode
> -#define Xv OP_DSSI, v_mode
> -#define Yb OP_ESDI, b_mode
> -#define Yv OP_ESDI, v_mode
> -
> -#define es OP_REG, es_reg
> -#define ss OP_REG, ss_reg
> -#define cs OP_REG, cs_reg
> -#define ds OP_REG, ds_reg
> -#define fs OP_REG, fs_reg
> -#define gs OP_REG, gs_reg
> -
> -int OP_E(), OP_indirE(), OP_G(), OP_I(), OP_sI(), OP_REG();
> -int OP_J(), OP_SEG();
> -int OP_DIR(), OP_OFF(), OP_DSSI(), OP_ESDI(), OP_ONE(), OP_C();
> -int OP_D(), OP_T(), OP_rm();
> -
> -static void dofloat (), putop (), append_prefix (), set_op ();
> -static int get16 (), get32 ();
> -
> -#define b_mode 1
> -#define v_mode 2
> -#define w_mode 3
> -#define d_mode 4
> -
> -#define es_reg 100
> -#define cs_reg 101
> -#define ss_reg 102
> -#define ds_reg 103
> -#define fs_reg 104
> -#define gs_reg 105
> -#define eAX_reg 107
> -#define eCX_reg 108
> -#define eDX_reg 109
> -#define eBX_reg 110
> -#define eSP_reg 111
> -#define eBP_reg 112
> -#define eSI_reg 113
> -#define eDI_reg 114
> -
> -#define lptr 115
> -
> -#define al_reg 116
> -#define cl_reg 117
> -#define dl_reg 118
> -#define bl_reg 119
> -#define ah_reg 120
> -#define ch_reg 121
> -#define dh_reg 122
> -#define bh_reg 123
> -
> -#define ax_reg 124
> -#define cx_reg 125
> -#define dx_reg 126
> -#define bx_reg 127
> -#define sp_reg 128
> -#define bp_reg 129
> -#define si_reg 130
> -#define di_reg 131
> -
> -#define indir_dx_reg 150
> -
> -#define GRP1b NULL, NULL, 0
> -#define GRP1S NULL, NULL, 1
> -#define GRP1Ss NULL, NULL, 2
> -#define GRP2b NULL, NULL, 3
> -#define GRP2S NULL, NULL, 4
> -#define GRP2b_one NULL, NULL, 5
> -#define GRP2S_one NULL, NULL, 6
> -#define GRP2b_cl NULL, NULL, 7
> -#define GRP2S_cl NULL, NULL, 8
> -#define GRP3b NULL, NULL, 9
> -#define GRP3S NULL, NULL, 10
> -#define GRP4  NULL, NULL, 11
> -#define GRP5  NULL, NULL, 12
> -#define GRP6  NULL, NULL, 13
> -#define GRP7 NULL, NULL, 14
> -#define GRP8 NULL, NULL, 15
> -#define GRP9 NULL, NULL, 16
> -
> -#define FLOATCODE 50
> -#define FLOAT NULL, NULL, FLOATCODE
> -
> -struct dis386 {
> -  char *name;
> -  int (*op1)();
> -  int bytemode1;
> -  int (*op2)();
> -  int bytemode2;
> -  int (*op3)();
> -  int bytemode3;
> -};
> -
> -struct dis386 dis386[] = {
> -  /* 00 */
> -  { "addb", Eb, Gb },
> -  { "addS", Ev, Gv },
> -  { "addb", Gb, Eb },
> -  { "addS", Gv, Ev },
> -  { "addb", AL, Ib },
> -  { "addS", eAX, Iv },
> -  { "pushl", es },
> -  { "popl", es },
> -  /* 08 */
> -  { "orb", Eb, Gb },
> -  { "orS", Ev, Gv },
> -  { "orb", Gb, Eb },
> -  { "orS", Gv, Ev },
> -  { "orb", AL, Ib },
> -  { "orS", eAX, Iv },
> -  { "pushl", cs },
> -  { "(bad)" }, /* 0x0f extended opcode escape */
> -  /* 10 */
> -  { "adcb", Eb, Gb },
> -  { "adcS", Ev, Gv },
> -  { "adcb", Gb, Eb },
> -  { "adcS", Gv, Ev },
> -  { "adcb", AL, Ib },
> -  { "adcS", eAX, Iv },
> -  { "pushl", ss },
> -  { "popl", ss },
> -  /* 18 */
> -  { "sbbb", Eb, Gb },
> -  { "sbbS", Ev, Gv },
> -  { "sbbb", Gb, Eb },
> -  { "sbbS", Gv, Ev },
> -  { "sbbb", AL, Ib },
> -  { "sbbS", eAX, Iv },
> -  { "pushl", ds },
> -  { "popl", ds },
> -  /* 20 */
> -  { "andb", Eb, Gb },
> -  { "andS", Ev, Gv },
> -  { "andb", Gb, Eb },
> -  { "andS", Gv, Ev },
> -  { "andb", AL, Ib },
> -  { "andS", eAX, Iv },
> -  { "(bad)" }, /* SEG ES prefix */
> -  { "daa" },
> -  /* 28 */
> -  { "subb", Eb, Gb },
> -  { "subS", Ev, Gv },
> -  { "subb", Gb, Eb },
> -  { "subS", Gv, Ev },
> -  { "subb", AL, Ib },
> -  { "subS", eAX, Iv },
> -  { "(bad)" }, /* SEG CS prefix */
> -  { "das" },
> -  /* 30 */
> -  { "xorb", Eb, Gb },
> -  { "xorS", Ev, Gv },
> -  { "xorb", Gb, Eb },
> -  { "xorS", Gv, Ev },
> -  { "xorb", AL, Ib },
> -  { "xorS", eAX, Iv },
> -  { "(bad)" }, /* SEG SS prefix */
> -  { "aaa" },
> -  /* 38 */
> -  { "cmpb", Eb, Gb },
> -  { "cmpS", Ev, Gv },
> -  { "cmpb", Gb, Eb },
> -  { "cmpS", Gv, Ev },
> -  { "cmpb", AL, Ib },
> -  { "cmpS", eAX, Iv },
> -  { "(bad)" }, /* SEG DS prefix */
> -  { "aas" },
> -  /* 40 */
> -  { "incS", eAX },
> -  { "incS", eCX },
> -  { "incS", eDX },
> -  { "incS", eBX },
> -  { "incS", eSP },
> -  { "incS", eBP },
> -  { "incS", eSI },
> -  { "incS", eDI },
> -  /* 48 */
> -  { "decS", eAX },
> -  { "decS", eCX },
> -  { "decS", eDX },
> -  { "decS", eBX },
> -  { "decS", eSP },
> -  { "decS", eBP },
> -  { "decS", eSI },
> -  { "decS", eDI },
> -  /* 50 */
> -  { "pushS", eAX },
> -  { "pushS", eCX },
> -  { "pushS", eDX },
> -  { "pushS", eBX },
> -  { "pushS", eSP },
> -  { "pushS", eBP },
> -  { "pushS", eSI },
> -  { "pushS", eDI },
> -  /* 58 */
> -  { "popS", eAX },
> -  { "popS", eCX },
> -  { "popS", eDX },
> -  { "popS", eBX },
> -  { "popS", eSP },
> -  { "popS", eBP },
> -  { "popS", eSI },
> -  { "popS", eDI },
> -  /* 60 */
> -  { "pusha" },
> -  { "popa" },
> -  { "boundS", Gv, Ma },
> -  { "arpl", Ew, Gw },
> -  { "(bad)" }, /* seg fs */
> -  { "(bad)" }, /* seg gs */
> -  { "(bad)" }, /* op size prefix */
> -  { "(bad)" }, /* adr size prefix */
> -  /* 68 */
> -  { "pushS", Iv }, /* 386 book wrong */
> -  { "imulS", Gv, Ev, Iv },
> -  { "pushl", sIb }, /* push of byte really pushes 4 bytes */
> -  { "imulS", Gv, Ev, Ib },
> -  { "insb", Yb, indirDX },
> -  { "insS", Yv, indirDX },
> -  { "outsb", indirDX, Xb },
> -  { "outsS", indirDX, Xv },
> -  /* 70 */
> -  { "jo", Jb },
> -  { "jno", Jb },
> -  { "jb", Jb },
> -  { "jae", Jb },
> -  { "je", Jb },
> -  { "jne", Jb },
> -  { "jbe", Jb },
> -  { "ja", Jb },
> -  /* 78 */
> -  { "js", Jb },
> -  { "jns", Jb },
> -  { "jp", Jb },
> -  { "jnp", Jb },
> -  { "jl", Jb },
> -  { "jnl", Jb },
> -  { "jle", Jb },
> -  { "jg", Jb },
> -  /* 80 */
> -  { GRP1b },
> -  { GRP1S },
> -  { "(bad)" },
> -  { GRP1Ss },
> -  { "testb", Eb, Gb },
> -  { "testS", Ev, Gv },
> -  { "xchgb", Eb, Gb },
> -  { "xchgS", Ev, Gv },
> -  /* 88 */
> -  { "movb", Eb, Gb },
> -  { "movS", Ev, Gv },
> -  { "movb", Gb, Eb },
> -  { "movS", Gv, Ev },
> -  { "movw", Ew, Sw },
> -  { "leaS", Gv, M },
> -  { "movw", Sw, Ew },
> -  { "popS", Ev },
> -  /* 90 */
> -  { "nop" },
> -  { "xchgS", eCX, eAX },
> -  { "xchgS", eDX, eAX },
> -  { "xchgS", eBX, eAX },
> -  { "xchgS", eSP, eAX },
> -  { "xchgS", eBP, eAX },
> -  { "xchgS", eSI, eAX },
> -  { "xchgS", eDI, eAX },
> -  /* 98 */
> -  { "cwtl" },
> -  { "cltd" },
> -  { "lcall", Ap },
> -  { "(bad)" }, /* fwait */
> -  { "pushf" },
> -  { "popf" },
> -  { "sahf" },
> -  { "lahf" },
> -  /* a0 */
> -  { "movb", AL, Ob },
> -  { "movS", eAX, Ov },
> -  { "movb", Ob, AL },
> -  { "movS", Ov, eAX },
> -  { "movsb", Yb, Xb },
> -  { "movsS", Yv, Xv },
> -  { "cmpsb", Yb, Xb },
> -  { "cmpsS", Yv, Xv },
> -  /* a8 */
> -  { "testb", AL, Ib },
> -  { "testS", eAX, Iv },
> -  { "stosb", Yb, AL },
> -  { "stosS", Yv, eAX },
> -  { "lodsb", AL, Xb },
> -  { "lodsS", eAX, Xv },
> -  { "scasb", AL, Yb },
> -  { "scasS", eAX, Yv },
> -  /* b0 */
> -  { "movb", AL, Ib },
> -  { "movb", CL, Ib },
> -  { "movb", DL, Ib },
> -  { "movb", BL, Ib },
> -  { "movb", AH, Ib },
> -  { "movb", CH, Ib },
> -  { "movb", DH, Ib },
> -  { "movb", BH, Ib },
> -  /* b8 */
> -  { "movS", eAX, Iv },
> -  { "movS", eCX, Iv },
> -  { "movS", eDX, Iv },
> -  { "movS", eBX, Iv },
> -  { "movS", eSP, Iv },
> -  { "movS", eBP, Iv },
> -  { "movS", eSI, Iv },
> -  { "movS", eDI, Iv },
> -  /* c0 */
> -  { GRP2b },
> -  { GRP2S },
> -  { "ret", Iw },
> -  { "ret" },
> -  { "lesS", Gv, Mp },
> -  { "ldsS", Gv, Mp },
> -  { "movb", Eb, Ib },
> -  { "movS", Ev, Iv },
> -  /* c8 */
> -  { "enter", Iw, Ib },
> -  { "leave" },
> -  { "lret", Iw },
> -  { "lret" },
> -  { "int3" },
> -  { "int", Ib },
> -  { "into" },
> -  { "iret" },
> -  /* d0 */
> -  { GRP2b_one },
> -  { GRP2S_one },
> -  { GRP2b_cl },
> -  { GRP2S_cl },
> -  { "aam", Ib },
> -  { "aad", Ib },
> -  { "(bad)" },
> -  { "xlat" },
> -  /* d8 */
> -  { FLOAT },
> -  { FLOAT },
> -  { FLOAT },
> -  { FLOAT },
> -  { FLOAT },
> -  { FLOAT },
> -  { FLOAT },
> -  { FLOAT },
> -  /* e0 */
> -  { "loopne", Jb },
> -  { "loope", Jb },
> -  { "loop", Jb },
> -  { "jCcxz", Jb },
> -  { "inb", AL, Ib },
> -  { "inS", eAX, Ib },
> -  { "outb", Ib, AL },
> -  { "outS", Ib, eAX },
> -  /* e8 */
> -  { "call", Av },
> -  { "jmp", Jv },
> -  { "ljmp", Ap },
> -  { "jmp", Jb },
> -  { "inb", AL, indirDX },
> -  { "inS", eAX, indirDX },
> -  { "outb", indirDX, AL },
> -  { "outS", indirDX, eAX },
> -  /* f0 */
> -  { "(bad)" }, /* lock prefix */
> -  { "(bad)" },
> -  { "(bad)" }, /* repne */
> -  { "(bad)" }, /* repz */
> -  { "hlt" },
> -  { "cmc" },
> -  { GRP3b },
> -  { GRP3S },
> -  /* f8 */
> -  { "clc" },
> -  { "stc" },
> -  { "cli" },
> -  { "sti" },
> -  { "cld" },
> -  { "std" },
> -  { GRP4 },
> -  { GRP5 },
> -};
> -
> -struct dis386 dis386_twobyte[] = {
> -  /* 00 */
> -  { GRP6 },
> -  { GRP7 },
> -  { "larS", Gv, Ew },
> -  { "lslS", Gv, Ew },  
> -  { "(bad)" },
> -  { "(bad)" },
> -  { "clts" },
> -  { "(bad)" },  
> -  /* 08 */
> -  { "invd" },
> -  { "wbinvd" },
> -  { "(bad)" },  { "ud2a" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 10 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 18 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 20 */
> -  /* these are all backward in appendix A of the intel book */
> -  { "movl", Rd, Cd },
> -  { "movl", Rd, Dd },
> -  { "movl", Cd, Rd },
> -  { "movl", Dd, Rd },  
> -  { "movl", Rd, Td },
> -  { "(bad)" },
> -  { "movl", Td, Rd },
> -  { "(bad)" },  
> -  /* 28 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 30 */
> -  { "wrmsr" },  { "rdtsc" },  { "rdmsr" },  { "rdpmc" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 38 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 40 */
> -  { "cmovo", Gv,Ev }, { "cmovno", Gv,Ev }, { "cmovb", Gv,Ev }, { "cmovae", Gv,Ev },
> -  { "cmove", Gv,Ev }, { "cmovne", Gv,Ev }, { "cmovbe", Gv,Ev }, { "cmova", Gv,Ev },
> -  /* 48 */
> -  { "cmovs", Gv,Ev }, { "cmovns", Gv,Ev }, { "cmovp", Gv,Ev }, { "cmovnp", Gv,Ev },
> -  { "cmovl", Gv,Ev }, { "cmovge", Gv,Ev }, { "cmovle", Gv,Ev }, { "cmovg", Gv,Ev },  
> -  /* 50 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 58 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 60 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 68 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 70 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 78 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* 80 */
> -  { "jo", Jv },
> -  { "jno", Jv },
> -  { "jb", Jv },
> -  { "jae", Jv },  
> -  { "je", Jv },
> -  { "jne", Jv },
> -  { "jbe", Jv },
> -  { "ja", Jv },  
> -  /* 88 */
> -  { "js", Jv },
> -  { "jns", Jv },
> -  { "jp", Jv },
> -  { "jnp", Jv },  
> -  { "jl", Jv },
> -  { "jge", Jv },
> -  { "jle", Jv },
> -  { "jg", Jv },  
> -  /* 90 */
> -  { "seto", Eb },
> -  { "setno", Eb },
> -  { "setb", Eb },
> -  { "setae", Eb },
> -  { "sete", Eb },
> -  { "setne", Eb },
> -  { "setbe", Eb },
> -  { "seta", Eb },
> -  /* 98 */
> -  { "sets", Eb },
> -  { "setns", Eb },
> -  { "setp", Eb },
> -  { "setnp", Eb },
> -  { "setl", Eb },
> -  { "setge", Eb },
> -  { "setle", Eb },
> -  { "setg", Eb },  
> -  /* a0 */
> -  { "pushl", fs },
> -  { "popl", fs },
> -  { "cpuid" },
> -  { "btS", Ev, Gv },  
> -  { "shldS", Ev, Gv, Ib },
> -  { "shldS", Ev, Gv, CL },
> -  { "(bad)" },
> -  { "(bad)" },  
> -  /* a8 */
> -  { "pushl", gs },
> -  { "popl", gs },
> -  { "rsm" },
> -  { "btsS", Ev, Gv },  
> -  { "shrdS", Ev, Gv, Ib },
> -  { "shrdS", Ev, Gv, CL },
> -  { "(bad)" },
> -  { "imulS", Gv, Ev },  
> -  /* b0 */
> -  { "cmpxchgb", Eb, Gb },
> -  { "cmpxchgS", Ev, Gv },
> -  { "lssS", Gv, Mp }, /* 386 lists only Mp */
> -  { "btrS", Ev, Gv },  
> -  { "lfsS", Gv, Mp }, /* 386 lists only Mp */
> -  { "lgsS", Gv, Mp }, /* 386 lists only Mp */
> -  { "movzbS", Gv, Eb },
> -  { "movzwS", Gv, Ew },  
> -  /* b8 */
> -  { "ud2b" },
> -  { "(bad)" },
> -  { GRP8 },
> -  { "btcS", Ev, Gv },  
> -  { "bsfS", Gv, Ev },
> -  { "bsrS", Gv, Ev },
> -  { "movsbS", Gv, Eb },
> -  { "movswS", Gv, Ew },  
> -  /* c0 */
> -  { "xaddb", Eb, Gb },
> -  { "xaddS", Ev, Gv },
> -  { "(bad)" },
> -  { "(bad)" },  
> -  { "(bad)" },
> -  { "(bad)" },
> -  { "(bad)" },
> -  { GRP9 },  
> -  /* c8 */
> -  { "bswap", eAX },
> -  { "bswap", eCX },
> -  { "bswap", eDX },
> -  { "bswap", eBX },
> -  { "bswap", eSP },
> -  { "bswap", eBP },
> -  { "bswap", eSI },
> -  { "bswap", eDI },
> -  /* d0 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* d8 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* e0 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* e8 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* f0 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  /* f8 */
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -  { "(bad)" },  { "(bad)" },  { "(bad)" },  { "(bad)" },  
> -};
> -
> -static const unsigned char onebyte_has_modrm[256] = {
> -  1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
> -  1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
> -  1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
> -  1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
> -  1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1
> -};
> -
> -static const unsigned char twobyte_has_modrm[256] = {
> -  1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
> -  0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,
> -  1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,
> -  1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -};
> -
> -static char obuf[100];
> -static char *obufp;
> -static char scratchbuf[100];
> -static unsigned char *start_codep;
> -static unsigned char *codep;
> -static disassemble_info *the_info;
> -static int mod;
> -static int rm;
> -static int reg;
> -static void oappend ();
> -
> -static char *names32[]={
> -  "%eax","%ecx","%edx","%ebx", "%esp","%ebp","%esi","%edi",
> -};
> -static char *names16[] = {
> -  "%ax","%cx","%dx","%bx","%sp","%bp","%si","%di",
> -};
> -static char *names8[] = {
> -  "%al","%cl","%dl","%bl","%ah","%ch","%dh","%bh",
> -};
> -static char *names_seg[] = {
> -  "%es","%cs","%ss","%ds","%fs","%gs","%?","%?",
> -};
> -static char *index16[] = {
> -  "bx+si","bx+di","bp+si","bp+di","si","di","bp","bx"
> -};
> -
> -struct dis386 grps[][8] = {
> -  /* GRP1b */
> -  {
> -    { "addb", Eb, Ib },
> -    { "orb", Eb, Ib },
> -    { "adcb", Eb, Ib },
> -    { "sbbb", Eb, Ib },
> -    { "andb", Eb, Ib },
> -    { "subb", Eb, Ib },
> -    { "xorb", Eb, Ib },
> -    { "cmpb", Eb, Ib }
> -  },
> -  /* GRP1S */
> -  {
> -    { "addS", Ev, Iv },
> -    { "orS", Ev, Iv },
> -    { "adcS", Ev, Iv },
> -    { "sbbS", Ev, Iv },
> -    { "andS", Ev, Iv },
> -    { "subS", Ev, Iv },
> -    { "xorS", Ev, Iv },
> -    { "cmpS", Ev, Iv }
> -  },
> -  /* GRP1Ss */
> -  {
> -    { "addS", Ev, sIb },
> -    { "orS", Ev, sIb },
> -    { "adcS", Ev, sIb },
> -    { "sbbS", Ev, sIb },
> -    { "andS", Ev, sIb },
> -    { "subS", Ev, sIb },
> -    { "xorS", Ev, sIb },
> -    { "cmpS", Ev, sIb }
> -  },
> -  /* GRP2b */
> -  {
> -    { "rolb", Eb, Ib },
> -    { "rorb", Eb, Ib },
> -    { "rclb", Eb, Ib },
> -    { "rcrb", Eb, Ib },
> -    { "shlb", Eb, Ib },
> -    { "shrb", Eb, Ib },
> -    { "(bad)" },
> -    { "sarb", Eb, Ib },
> -  },
> -  /* GRP2S */
> -  {
> -    { "rolS", Ev, Ib },
> -    { "rorS", Ev, Ib },
> -    { "rclS", Ev, Ib },
> -    { "rcrS", Ev, Ib },
> -    { "shlS", Ev, Ib },
> -    { "shrS", Ev, Ib },
> -    { "(bad)" },
> -    { "sarS", Ev, Ib },
> -  },
> -  /* GRP2b_one */
> -  {
> -    { "rolb", Eb },
> -    { "rorb", Eb },
> -    { "rclb", Eb },
> -    { "rcrb", Eb },
> -    { "shlb", Eb },
> -    { "shrb", Eb },
> -    { "(bad)" },
> -    { "sarb", Eb },
> -  },
> -  /* GRP2S_one */
> -  {
> -    { "rolS", Ev },
> -    { "rorS", Ev },
> -    { "rclS", Ev },
> -    { "rcrS", Ev },
> -    { "shlS", Ev },
> -    { "shrS", Ev },
> -    { "(bad)" },
> -    { "sarS", Ev },
> -  },
> -  /* GRP2b_cl */
> -  {
> -    { "rolb", Eb, CL },
> -    { "rorb", Eb, CL },
> -    { "rclb", Eb, CL },
> -    { "rcrb", Eb, CL },
> -    { "shlb", Eb, CL },
> -    { "shrb", Eb, CL },
> -    { "(bad)" },
> -    { "sarb", Eb, CL },
> -  },
> -  /* GRP2S_cl */
> -  {
> -    { "rolS", Ev, CL },
> -    { "rorS", Ev, CL },
> -    { "rclS", Ev, CL },
> -    { "rcrS", Ev, CL },
> -    { "shlS", Ev, CL },
> -    { "shrS", Ev, CL },
> -    { "(bad)" },
> -    { "sarS", Ev, CL }
> -  },
> -  /* GRP3b */
> -  {
> -    { "testb", Eb, Ib },
> -    { "(bad)", Eb },
> -    { "notb", Eb },
> -    { "negb", Eb },
> -    { "mulb", AL, Eb },
> -    { "imulb", AL, Eb },
> -    { "divb", AL, Eb },
> -    { "idivb", AL, Eb }
> -  },
> -  /* GRP3S */
> -  {
> -    { "testS", Ev, Iv },
> -    { "(bad)" },
> -    { "notS", Ev },
> -    { "negS", Ev },
> -    { "mulS", eAX, Ev },
> -    { "imulS", eAX, Ev },
> -    { "divS", eAX, Ev },
> -    { "idivS", eAX, Ev },
> -  },
> -  /* GRP4 */
> -  {
> -    { "incb", Eb },
> -    { "decb", Eb },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -  },
> -  /* GRP5 */
> -  {
> -    { "incS", Ev },
> -    { "decS", Ev },
> -    { "call", indirEv },
> -    { "lcall", indirEv },
> -    { "jmp", indirEv },
> -    { "ljmp", indirEv },
> -    { "pushS", Ev },
> -    { "(bad)" },
> -  },
> -  /* GRP6 */
> -  {
> -    { "sldt", Ew },
> -    { "str", Ew },
> -    { "lldt", Ew },
> -    { "ltr", Ew },
> -    { "verr", Ew },
> -    { "verw", Ew },
> -    { "(bad)" },
> -    { "(bad)" }
> -  },
> -  /* GRP7 */
> -  {
> -    { "sgdt", Ew },
> -    { "sidt", Ew },
> -    { "lgdt", Ew },
> -    { "lidt", Ew },
> -    { "smsw", Ew },
> -    { "(bad)" },
> -    { "lmsw", Ew },
> -    { "invlpg", Ew },
> -  },
> -  /* GRP8 */
> -  {
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "btS", Ev, Ib },
> -    { "btsS", Ev, Ib },
> -    { "btrS", Ev, Ib },
> -    { "btcS", Ev, Ib },
> -  },
> -  /* GRP9 */
> -  {
> -    { "(bad)" },
> -    { "cmpxchg8b", Ev },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -  }
> -};
> -
> -#define PREFIX_REPZ 1
> -#define PREFIX_REPNZ 2
> -#define PREFIX_LOCK 4
> -#define PREFIX_CS 8
> -#define PREFIX_SS 0x10
> -#define PREFIX_DS 0x20
> -#define PREFIX_ES 0x40
> -#define PREFIX_FS 0x80
> -#define PREFIX_GS 0x100
> -#define PREFIX_DATA 0x200
> -#define PREFIX_ADR 0x400
> -#define PREFIX_FWAIT 0x800
> -
> -static int prefixes;
> -
> -static void
> -ckprefix ()
> -{
> -  prefixes = 0;
> -  while (1)
> -    {
> -      FETCH_DATA (the_info, codep + 1);
> -      switch (*codep)
> - {
> - case 0xf3:
> -  prefixes |= PREFIX_REPZ;
> -  break;
> - case 0xf2:
> -  prefixes |= PREFIX_REPNZ;
> -  break;
> - case 0xf0:
> -  prefixes |= PREFIX_LOCK;
> -  break;
> - case 0x2e:
> -  prefixes |= PREFIX_CS;
> -  break;
> - case 0x36:
> -  prefixes |= PREFIX_SS;
> -  break;
> - case 0x3e:
> -  prefixes |= PREFIX_DS;
> -  break;
> - case 0x26:
> -  prefixes |= PREFIX_ES;
> -  break;
> - case 0x64:
> -  prefixes |= PREFIX_FS;
> -  break;
> - case 0x65:
> -  prefixes |= PREFIX_GS;
> -  break;
> - case 0x66:
> -  prefixes |= PREFIX_DATA;
> -  break;
> - case 0x67:
> -  prefixes |= PREFIX_ADR;
> -  break;
> - case 0x9b:
> -  prefixes |= PREFIX_FWAIT;
> -  break;
> - default:
> -  return;
> - }
> -      codep++;
> -    }
> -}
> -
> -static int dflag;
> -static int aflag;
> -
> -static char op1out[100], op2out[100], op3out[100];
> -static int op_address[3], op_ad, op_index[3];
> -static int start_pc;
> -
> -
> -/*
> - *   On the 386's of 1988, the maximum length of an instruction is 15 bytes.
> - *   (see topic "Redundant prefixes" in the "Differences from 8086"
> - *   section of the "Virtual 8086 Mode" chapter.)
> - * 'pc' should be the address of this instruction, it will
> - *   be used to print the target address if this is a relative jump or call
> - * The function returns the length of this instruction in bytes.
> - */
> -
> -int
> -print_insn_i386 (pc, info)
> -     bfd_vma pc;
> -     disassemble_info *info;
> -{
> -  struct dis386 *dp;
> -  int i;
> -  int enter_instruction;
> -  char *first, *second, *third;
> -  int needcomma;
> -  unsigned char need_modrm;
> -
> -  struct dis_private priv;
> -  bfd_byte *inbuf = priv.the_buffer;
> -
> -  info->private_data = (PTR) &priv;
> -  priv.max_fetched = priv.the_buffer;
> -  priv.insn_start = pc;
> -  if (setjmp (priv.bailout) != 0)
> -    /* Error return.  */
> -    return -1;
> -
> -  obuf[0] = 0;
> -  op1out[0] = 0;
> -  op2out[0] = 0;
> -  op3out[0] = 0;
> -
> -  op_index[0] = op_index[1] = op_index[2] = -1;
> -
> -  the_info = info;
> -  start_pc = pc;
> -  start_codep = inbuf;
> -  codep = inbuf;
> -  
> -  ckprefix ();
> -
> -  FETCH_DATA (info, codep + 1);
> -  if (*codep == 0xc8)
> -    enter_instruction = 1;
> -  else
> -    enter_instruction = 0;
> -  
> -  obufp = obuf;
> -  
> -  if (prefixes & PREFIX_REPZ)
> -    oappend ("repz ");
> -  if (prefixes & PREFIX_REPNZ)
> -    oappend ("repnz ");
> -  if (prefixes & PREFIX_LOCK)
> -    oappend ("lock ");
> -  
> -  if ((prefixes & PREFIX_FWAIT)
> -      && ((*codep < 0xd8) || (*codep > 0xdf)))
> -    {
> -      /* fwait not followed by floating point instruction */
> -      (*info->fprintf_func) (info->stream, "fwait");
> -      return (1);
> -    }
> -  
> -  /* these would be initialized to 0 if disassembling for 8086 or 286 */
> -  dflag = 1;
> -  aflag = 1;
> -  
> -  if (prefixes & PREFIX_DATA)
> -    dflag ^= 1;
> -  
> -  if (prefixes & PREFIX_ADR)
> -    {
> -      aflag ^= 1;
> -      oappend ("addr16 ");
> -    }
> -  
> -  if (*codep == 0x0f)
> -    {
> -      FETCH_DATA (info, codep + 2);
> -      dp = &dis386_twobyte[*++codep];
> -      need_modrm = twobyte_has_modrm[*codep];
> -    }
> -  else
> -    {
> -      dp = &dis386[*codep];
> -      need_modrm = onebyte_has_modrm[*codep];
> -    }
> -  codep++;
> -
> -  if (need_modrm)
> -    {
> -      FETCH_DATA (info, codep + 1);
> -      mod = (*codep >> 6) & 3;
> -      reg = (*codep >> 3) & 7;
> -      rm = *codep & 7;
> -    }
> -
> -  if (dp->name == NULL && dp->bytemode1 == FLOATCODE)
> -    {
> -      dofloat ();
> -    }
> -  else
> -    {
> -      if (dp->name == NULL)
> - dp = &grps[dp->bytemode1][reg];
> -      
> -      putop (dp->name);
> -      
> -      obufp = op1out;
> -      op_ad = 2;
> -      if (dp->op1)
> - (*dp->op1)(dp->bytemode1);
> -      
> -      obufp = op2out;
> -      op_ad = 1;
> -      if (dp->op2)
> - (*dp->op2)(dp->bytemode2);
> -      
> -      obufp = op3out;
> -      op_ad = 0;
> -      if (dp->op3)
> - (*dp->op3)(dp->bytemode3);
> -    }
> -  
> -  obufp = obuf + strlen (obuf);
> -  for (i = strlen (obuf); i < 6; i++)
> -    oappend (" ");
> -  oappend (" ");
> -  (*info->fprintf_func) (info->stream, "%s", obuf);
> -  
> -  /* enter instruction is printed with operands in the
> -   * same order as the intel book; everything else
> -   * is printed in reverse order
> -   */
> -  if (enter_instruction)
> -    {
> -      first = op1out;
> -      second = op2out;
> -      third = op3out;
> -      op_ad = op_index[0];
> -      op_index[0] = op_index[2];
> -      op_index[2] = op_ad;
> -    }
> -  else
> -    {
> -      first = op3out;
> -      second = op2out;
> -      third = op1out;
> -    }
> -  needcomma = 0;
> -  if (*first)
> -    {
> -      if (op_index[0] != -1)
> - (*info->print_address_func) (op_address[op_index[0]], info);
> -      else
> - (*info->fprintf_func) (info->stream, "%s", first);
> -      needcomma = 1;
> -    }
> -  if (*second)
> -    {
> -      if (needcomma)
> - (*info->fprintf_func) (info->stream, ",");
> -      if (op_index[1] != -1)
> - (*info->print_address_func) (op_address[op_index[1]], info);
> -      else
> - (*info->fprintf_func) (info->stream, "%s", second);
> -      needcomma = 1;
> -    }
> -  if (*third)
> -    {
> -      if (needcomma)
> - (*info->fprintf_func) (info->stream, ",");
> -      if (op_index[2] != -1)
> - (*info->print_address_func) (op_address[op_index[2]], info);
> -      else
> - (*info->fprintf_func) (info->stream, "%s", third);
> -    }
> -  return (codep - inbuf);
> -}
> -
> -char *float_mem[] = {
> -  /* d8 */
> -  "fadds",
> -  "fmuls",
> -  "fcoms",
> -  "fcomps",
> -  "fsubs",
> -  "fsubrs",
> -  "fdivs",
> -  "fdivrs",
> -  /*  d9 */
> -  "flds",
> -  "(bad)",
> -  "fsts",
> -  "fstps",
> -  "fldenv",
> -  "fldcw",
> -  "fNstenv",
> -  "fNstcw",
> -  /* da */
> -  "fiaddl",
> -  "fimull",
> -  "ficoml",
> -  "ficompl",
> -  "fisubl",
> -  "fisubrl",
> -  "fidivl",
> -  "fidivrl",
> -  /* db */
> -  "fildl",
> -  "(bad)",
> -  "fistl",
> -  "fistpl",
> -  "(bad)",
> -  "fldt",
> -  "(bad)",
> -  "fstpt",
> -  /* dc */
> -  "faddl",
> -  "fmull",
> -  "fcoml",
> -  "fcompl",
> -  "fsubl",
> -  "fsubrl",
> -  "fdivl",
> -  "fdivrl",
> -  /* dd */
> -  "fldl",
> -  "(bad)",
> -  "fstl",
> -  "fstpl",
> -  "frstor",
> -  "(bad)",
> -  "fNsave",
> -  "fNstsw",
> -  /* de */
> -  "fiadd",
> -  "fimul",
> -  "ficom",
> -  "ficomp",
> -  "fisub",
> -  "fisubr",
> -  "fidiv",
> -  "fidivr",
> -  /* df */
> -  "fild",
> -  "(bad)",
> -  "fist",
> -  "fistp",
> -  "fbld",
> -  "fildll",
> -  "fbstp",
> -  "fistpll",
> -};
> -
> -#define ST OP_ST, 0
> -#define STi OP_STi, 0
> -int OP_ST(), OP_STi();
> -
> -#define FGRPd9_2 NULL, NULL, 0
> -#define FGRPd9_4 NULL, NULL, 1
> -#define FGRPd9_5 NULL, NULL, 2
> -#define FGRPd9_6 NULL, NULL, 3
> -#define FGRPd9_7 NULL, NULL, 4
> -#define FGRPda_5 NULL, NULL, 5
> -#define FGRPdb_4 NULL, NULL, 6
> -#define FGRPde_3 NULL, NULL, 7
> -#define FGRPdf_4 NULL, NULL, 8
> -
> -struct dis386 float_reg[][8] = {
> -  /* d8 */
> -  {
> -    { "fadd", ST, STi },
> -    { "fmul", ST, STi },
> -    { "fcom", STi },
> -    { "fcomp", STi },
> -    { "fsub", ST, STi },
> -    { "fsubr", ST, STi },
> -    { "fdiv", ST, STi },
> -    { "fdivr", ST, STi },
> -  },
> -  /* d9 */
> -  {
> -    { "fld", STi },
> -    { "fxch", STi },
> -    { FGRPd9_2 },
> -    { "(bad)" },
> -    { FGRPd9_4 },
> -    { FGRPd9_5 },
> -    { FGRPd9_6 },
> -    { FGRPd9_7 },
> -  },
> -  /* da */
> -  {
> -    { "fcmovb", ST, STi },
> -    { "fcmove", ST, STi },
> -    { "fcmovbe",ST, STi },
> -    { "fcmovu", ST, STi },
> -    { "(bad)" },
> -    { FGRPda_5 },
> -    { "(bad)" },
> -    { "(bad)" },
> -  },
> -  /* db */
> -  {
> -    { "fcmovnb",ST, STi },
> -    { "fcmovne",ST, STi },
> -    { "fcmovnbe",ST, STi },
> -    { "fcmovnu",ST, STi },
> -    { FGRPdb_4 },
> -    { "fucomi", ST, STi },
> -    { "fcomi", ST, STi },
> -    { "(bad)" },
> -  },
> -  /* dc */
> -  {
> -    { "fadd", STi, ST },
> -    { "fmul", STi, ST },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "fsub", STi, ST },
> -    { "fsubr", STi, ST },
> -    { "fdiv", STi, ST },
> -    { "fdivr", STi, ST },
> -  },
> -  /* dd */
> -  {
> -    { "ffree", STi },
> -    { "(bad)" },
> -    { "fst", STi },
> -    { "fstp", STi },
> -    { "fucom", STi },
> -    { "fucomp", STi },
> -    { "(bad)" },
> -    { "(bad)" },
> -  },
> -  /* de */
> -  {
> -    { "faddp", STi, ST },
> -    { "fmulp", STi, ST },
> -    { "(bad)" },
> -    { FGRPde_3 },
> -    { "fsubp", STi, ST },
> -    { "fsubrp", STi, ST },
> -    { "fdivp", STi, ST },
> -    { "fdivrp", STi, ST },
> -  },
> -  /* df */
> -  {
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { "(bad)" },
> -    { FGRPdf_4 },
> -    { "fucomip",ST, STi },
> -    { "fcomip", ST, STi },
> -    { "(bad)" },
> -  },
> -};
> -
> -
> -char *fgrps[][8] = {
> -  /* d9_2  0 */
> -  {
> -    "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
> -  },
> -
> -  /* d9_4  1 */
> -  {
> -    "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
> -  },
> -
> -  /* d9_5  2 */
> -  {
> -    "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
> -  },
> -
> -  /* d9_6  3 */
> -  {
> -    "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
> -  },
> -
> -  /* d9_7  4 */
> -  {
> -    "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
> -  },
> -
> -  /* da_5  5 */
> -  {
> -    "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
> -  },
> -
> -  /* db_4  6 */
> -  {
> -    "feni(287 only)","fdisi(287 only)","fNclex","fNinit",
> -    "fNsetpm(287 only)","(bad)","(bad)","(bad)",
> -  },
> -
> -  /* de_3  7 */
> -  {
> -    "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
> -  },
> -
> -  /* df_4  8 */
> -  {
> -    "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
> -  },
> -};
> -
> -static void
> -dofloat ()
> -{
> -  struct dis386 *dp;
> -  unsigned char floatop;
> -  
> -  floatop = codep[-1];
> -  
> -  if (mod != 3)
> -    {
> -      putop (float_mem[(floatop - 0xd8) * 8 + reg]);
> -      obufp = op1out;
> -      OP_E (v_mode);
> -      return;
> -    }
> -  codep++;
> -  
> -  dp = &float_reg[floatop - 0xd8][reg];
> -  if (dp->name == NULL)
> -    {
> -      putop (fgrps[dp->bytemode1][rm]);
> -      /* instruction fnstsw is only one with strange arg */
> -      if (floatop == 0xdf
> -  && FETCH_DATA (the_info, codep + 1)
> -  && *codep == 0xe0)
> - strcpy (op1out, "%eax");
> -    }
> -  else
> -    {
> -      putop (dp->name);
> -      obufp = op1out;
> -      if (dp->op1)
> - (*dp->op1)(dp->bytemode1);
> -      obufp = op2out;
> -      if (dp->op2)
> - (*dp->op2)(dp->bytemode2);
> -    }
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_ST (ignore)
> -     int ignore;
> -{
> -  oappend ("%st");
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_STi (ignore)
> -     int ignore;
> -{
> -  sprintf (scratchbuf, "%%st(%d)", rm);
> -  oappend (scratchbuf);
> -  return (0);
> -}
> -
> -
> -/* capital letters in template are macros */
> -static void
> -putop (template)
> -     char *template;
> -{
> -  char *p;
> -  
> -  for (p = template; *p; p++)
> -    {
> -      switch (*p)
> - {
> - default:
> -  *obufp++ = *p;
> -  break;
> - case 'C': /* For jcxz/jecxz */
> -  if (aflag)
> -    *obufp++ = 'e';
> -  break;
> - case 'N':
> -  if ((prefixes & PREFIX_FWAIT) == 0)
> -    *obufp++ = 'n';
> -  break;
> - case 'S':
> -  /* operand size flag */
> -  if (dflag)
> -    *obufp++ = 'l';
> -  else
> -    *obufp++ = 'w';
> -  break;
> - }
> -    }
> -  *obufp = 0;
> -}
> -
> -static void
> -oappend (s)
> -     char *s;
> -{
> -  strcpy (obufp, s);
> -  obufp += strlen (s);
> -  *obufp = 0;
> -}
> -
> -static void
> -append_prefix ()
> -{
> -  if (prefixes & PREFIX_CS)
> -    oappend ("%cs:");
> -  if (prefixes & PREFIX_DS)
> -    oappend ("%ds:");
> -  if (prefixes & PREFIX_SS)
> -    oappend ("%ss:");
> -  if (prefixes & PREFIX_ES)
> -    oappend ("%es:");
> -  if (prefixes & PREFIX_FS)
> -    oappend ("%fs:");
> -  if (prefixes & PREFIX_GS)
> -    oappend ("%gs:");
> -}
> -
> -int
> -OP_indirE (bytemode)
> -     int bytemode;
> -{
> -  oappend ("*");
> -  return OP_E (bytemode);
> -}
> -
> -int
> -OP_E (bytemode)
> -     int bytemode;
> -{
> -  int disp;
> -
> -  /* skip mod/rm byte */
> -  codep++;
> -
> -  if (mod == 3)
> -    {
> -      switch (bytemode)
> - {
> - case b_mode:
> -  oappend (names8[rm]);
> -  break;
> - case w_mode:
> -  oappend (names16[rm]);
> -  break;
> - case v_mode:
> -  if (dflag)
> -    oappend (names32[rm]);
> -  else
> -    oappend (names16[rm]);
> -  break;
> - default:
> -  oappend ("<bad dis table>");
> -  break;
> - }
> -      return 0;
> -    }
> -
> -  disp = 0;
> -  append_prefix ();
> -
> -  if (aflag) /* 32 bit address mode */
> -    {
> -      int havesib;
> -      int havebase;
> -      int base;
> -      int index;
> -      int scale;
> -
> -      havesib = 0;
> -      havebase = 1;
> -      base = rm;
> -
> -      if (base == 4)
> - {
> -  havesib = 1;
> -  FETCH_DATA (the_info, codep + 1);
> -  scale = (*codep >> 6) & 3;
> -  index = (*codep >> 3) & 7;
> -  base = *codep & 7;
> -  codep++;
> - }
> -
> -      switch (mod)
> - {
> - case 0:
> -  if (base == 5)
> -    {
> -      havebase = 0;
> -      disp = get32 ();
> -    }
> -  break;
> - case 1:
> -  FETCH_DATA (the_info, codep + 1);
> -  disp = *(char *)codep++;
> -  break;
> - case 2:
> -  disp = get32 ();
> -  break;
> - }
> -
> -      if (mod != 0 || base == 5)
> - {
> -  sprintf (scratchbuf, "0x%x", disp);
> -  oappend (scratchbuf);
> - }
> -
> -      if (havebase || (havesib && (index != 4 || scale != 0)))
> - {
> -  oappend ("(");
> -  if (havebase)
> -    oappend (names32[base]);
> -  if (havesib)
> -    {
> -      if (index != 4)
> - {
> -  sprintf (scratchbuf, ",%s", names32[index]);
> -  oappend (scratchbuf);
> - }
> -      sprintf (scratchbuf, ",%d", 1 << scale);
> -      oappend (scratchbuf);
> -    }
> -  oappend (")");
> - }
> -    }
> -  else
> -    { /* 16 bit address mode */
> -      switch (mod)
> - {
> - case 0:
> -  if (rm == 6)
> -    disp = (short) get16 ();
> -  break;
> - case 1:
> -  FETCH_DATA (the_info, codep + 1);
> -  disp = *(char *)codep++;
> -  break;
> - case 2:
> -  disp = (short) get16 ();
> -  break;
> - }
> -
> -      if (mod != 0 || rm == 6)
> - {
> -  sprintf (scratchbuf, "0x%x", disp);
> -  oappend (scratchbuf);
> - }
> -
> -      if (mod != 0 || rm != 6)
> - {
> -  oappend ("(");
> -  oappend (index16[rm]);
> -  oappend (")");
> - }
> -    }
> -  return 0;
> -}
> -
> -int
> -OP_G (bytemode)
> -     int bytemode;
> -{
> -  switch (bytemode)
> -    {
> -    case b_mode:
> -      oappend (names8[reg]);
> -      break;
> -    case w_mode:
> -      oappend (names16[reg]);
> -      break;
> -    case d_mode:
> -      oappend (names32[reg]);
> -      break;
> -    case v_mode:
> -      if (dflag)
> - oappend (names32[reg]);
> -      else
> - oappend (names16[reg]);
> -      break;
> -    default:
> -      oappend ("<internal disassembler error>");
> -      break;
> -    }
> -  return (0);
> -}
> -
> -static int
> -get32 ()
> -{
> -  int x = 0;
> -
> -  FETCH_DATA (the_info, codep + 4);
> -  x = *codep++ & 0xff;
> -  x |= (*codep++ & 0xff) << 8;
> -  x |= (*codep++ & 0xff) << 16;
> -  x |= (*codep++ & 0xff) << 24;
> -  return (x);
> -}
> -
> -static int
> -get16 ()
> -{
> -  int x = 0;
> -
> -  FETCH_DATA (the_info, codep + 2);
> -  x = *codep++ & 0xff;
> -  x |= (*codep++ & 0xff) << 8;
> -  return (x);
> -}
> -
> -static void
> -set_op (op)
> -     int op;
> -{
> -  op_index[op_ad] = op_ad;
> -  op_address[op_ad] = op;
> -}
> -
> -int
> -OP_REG (code)
> -     int code;
> -{
> -  char *s;
> -  
> -  switch (code)
> -    {
> -    case indir_dx_reg: s = "(%dx)"; break;
> - case ax_reg: case cx_reg: case dx_reg: case bx_reg:
> - case sp_reg: case bp_reg: case si_reg: case di_reg:
> - s = names16[code - ax_reg];
> - break;
> - case es_reg: case ss_reg: case cs_reg:
> - case ds_reg: case fs_reg: case gs_reg:
> - s = names_seg[code - es_reg];
> - break;
> - case al_reg: case ah_reg: case cl_reg: case ch_reg:
> - case dl_reg: case dh_reg: case bl_reg: case bh_reg:
> - s = names8[code - al_reg];
> - break;
> - case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
> - case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
> -      if (dflag)
> - s = names32[code - eAX_reg];
> -      else
> - s = names16[code - eAX_reg];
> -      break;
> -    default:
> -      s = "<internal disassembler error>";
> -      break;
> -    }
> -  oappend (s);
> -  return (0);
> -}
> -
> -int
> -OP_I (bytemode)
> -     int bytemode;
> -{
> -  int op;
> -  
> -  switch (bytemode)
> -    {
> -    case b_mode:
> -      FETCH_DATA (the_info, codep + 1);
> -      op = *codep++ & 0xff;
> -      break;
> -    case v_mode:
> -      if (dflag)
> - op = get32 ();
> -      else
> - op = get16 ();
> -      break;
> -    case w_mode:
> -      op = get16 ();
> -      break;
> -    default:
> -      oappend ("<internal disassembler error>");
> -      return (0);
> -    }
> -  sprintf (scratchbuf, "$0x%x", op);
> -  oappend (scratchbuf);
> -  return (0);
> -}
> -
> -int
> -OP_sI (bytemode)
> -     int bytemode;
> -{
> -  int op;
> -  
> -  switch (bytemode)
> -    {
> -    case b_mode:
> -      FETCH_DATA (the_info, codep + 1);
> -      op = *(char *)codep++;
> -      break;
> -    case v_mode:
> -      if (dflag)
> - op = get32 ();
> -      else
> - op = (short)get16();
> -      break;
> -    case w_mode:
> -      op = (short)get16 ();
> -      break;
> -    default:
> -      oappend ("<internal disassembler error>");
> -      return (0);
> -    }
> -  sprintf (scratchbuf, "$0x%x", op);
> -  oappend (scratchbuf);
> -  return (0);
> -}
> -
> -int
> -OP_J (bytemode)
> -     int bytemode;
> -{
> -  int disp;
> -  int mask = -1;
> -  
> -  switch (bytemode)
> -    {
> -    case b_mode:
> -      FETCH_DATA (the_info, codep + 1);
> -      disp = *(char *)codep++;
> -      break;
> -    case v_mode:
> -      if (dflag)
> - disp = get32 ();
> -      else
> - {
> -  disp = (short)get16 ();
> -  /* for some reason, a data16 prefix on a jump instruction
> -     means that the pc is masked to 16 bits after the
> -     displacement is added!  */
> -  mask = 0xffff;
> - }
> -      break;
> -    default:
> -      oappend ("<internal disassembler error>");
> -      return (0);
> -    }
> -  disp = (start_pc + codep - start_codep + disp) & mask;
> -  set_op (disp);
> -  sprintf (scratchbuf, "0x%x", disp);
> -  oappend (scratchbuf);
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_SEG (dummy)
> -     int dummy;
> -{
> -  static char *sreg[] = {
> -    "%es","%cs","%ss","%ds","%fs","%gs","%?","%?",
> -  };
> -
> -  oappend (sreg[reg]);
> -  return (0);
> -}
> -
> -int
> -OP_DIR (size)
> -     int size;
> -{
> -  int seg, offset;
> -  
> -  switch (size)
> -    {
> -    case lptr:
> -      if (aflag)
> - {
> -  offset = get32 ();
> -  seg = get16 ();
> - }
> -      else
> - {
> -  offset = get16 ();
> -  seg = get16 ();
> - }
> -      sprintf (scratchbuf, "0x%x,0x%x", seg, offset);
> -      oappend (scratchbuf);
> -      break;
> -    case v_mode:
> -      if (aflag)
> - offset = get32 ();
> -      else
> - offset = (short)get16 ();
> -      
> -      offset = start_pc + codep - start_codep + offset;
> -      set_op (offset);
> -      sprintf (scratchbuf, "0x%x", offset);
> -      oappend (scratchbuf);
> -      break;
> -    default:
> -      oappend ("<internal disassembler error>");
> -      break;
> -    }
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_OFF (bytemode)
> -     int bytemode;
> -{
> -  int off;
> -  
> -  if (aflag)
> -    off = get32 ();
> -  else
> -    off = get16 ();
> -  
> -  sprintf (scratchbuf, "0x%x", off);
> -  oappend (scratchbuf);
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_ESDI (dummy)
> -    int dummy;
> -{
> -  oappend ("%es:(");
> -  oappend (aflag ? "%edi" : "%di");
> -  oappend (")");
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_DSSI (dummy)
> -    int dummy;
> -{
> -  oappend ("%ds:(");
> -  oappend (aflag ? "%esi" : "%si");
> -  oappend (")");
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_ONE (dummy)
> -    int dummy;
> -{
> -  oappend ("1");
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_C (dummy)
> -    int dummy;
> -{
> -  codep++; /* skip mod/rm */
> -  sprintf (scratchbuf, "%%cr%d", reg);
> -  oappend (scratchbuf);
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_D (dummy)
> -    int dummy;
> -{
> -  codep++; /* skip mod/rm */
> -  sprintf (scratchbuf, "%%db%d", reg);
> -  oappend (scratchbuf);
> -  return (0);
> -}
> -
> -/* ARGSUSED */
> -int
> -OP_T (dummy)
> -     int dummy;
> -{
> -  codep++; /* skip mod/rm */
> -  sprintf (scratchbuf, "%%tr%d", reg);
> -  oappend (scratchbuf);
> -  return (0);
> -}
> -
> -int
> -OP_rm (bytemode)
> -     int bytemode;
> -{
> -  switch (bytemode)
> -    {
> -    case d_mode:
> -      oappend (names32[rm]);
> -      break;
> -    case w_mode:
> -      oappend (names16[rm]);
> -      break;
> -    }
> -  return (0);
> -}
> diff --git a/opcode/i386.h b/opcode/i386.h
> deleted file mode 100644
> index fe6211b..0000000
> --- a/opcode/i386.h
> +++ /dev/null
> @@ -1,898 +0,0 @@
> -/* i386-opcode.h -- Intel 80386 opcode table
> -   Copyright 1989, 1991, 1992, 1995 Free Software Foundation.
> -
> -This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger.
> -
> -This program is free software; you can redistribute it and/or modify
> -it under the terms of the GNU General Public License as published by
> -the Free Software Foundation; either version 2 of the License, or
> -(at your option) any later version.
> -
> -This program is distributed in the hope that it will be useful,
> -but WITHOUT ANY WARRANTY; without even the implied warranty of
> -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -GNU General Public License for more details.
> -
> -You should have received a copy of the GNU General Public License
> -along with this program; if not, write to the Free Software
> -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
> -
> -static const template i386_optab[] = {
> -
> -#define _ None
> -/* move instructions */
> -#define MOV_AX_DISP32 0xa0
> -{ "mov", 2, 0xa0, _, DW|NoModrm, { Disp32, Acc, 0 } },
> -{ "mov", 2, 0x88, _, DW|Modrm, { Reg, Reg|Mem, 0 } },
> -{ "mov", 2, 0xb0, _, ShortFormW, { Imm, Reg, 0 } },
> -{ "mov", 2, 0xc6, _,  W|Modrm,  { Imm, Reg|Mem, 0 } },
> -{ "mov", 2, 0x8c, _, D|Modrm,  { SReg3|SReg2, Reg16|Mem, 0 } },
> -/* move to/from control debug registers */
> -{ "mov", 2, 0x0f20, _, D|Modrm, { Control, Reg32, 0} },
> -{ "mov", 2, 0x0f21, _, D|Modrm, { Debug, Reg32, 0} },
> -{ "mov", 2, 0x0f24, _, D|Modrm, { Test, Reg32, 0} },
> -
> -/* move with sign extend */
> -/* "movsbl" & "movsbw" must not be unified into "movsb" to avoid
> -   conflict with the "movs" string move instruction.  Thus,
> -   {"movsb", 2, 0x0fbe, _, ReverseRegRegmem|Modrm, { Reg8|Mem,  Reg16|Reg32, 0} },
> -   is not kosher; we must seperate the two instructions. */
> -{"movsbl", 2, 0x0fbe, _, ReverseRegRegmem|Modrm|Data32, { Reg8|Mem,  Reg32, 0} },
> -{"movsbw", 2, 0x0fbe, _, ReverseRegRegmem|Modrm|Data16, { Reg8|Mem,  Reg16, 0} },
> -{"movswl", 2, 0x0fbf, _, ReverseRegRegmem|Modrm, { Reg16|Mem, Reg32, 0} },
> -
> -/* move with zero extend */
> -{"movzb", 2, 0x0fb6, _, ReverseRegRegmem|Modrm, { Reg8|Mem, Reg16|Reg32, 0} },
> -{"movzwl", 2, 0x0fb7, _, ReverseRegRegmem|Modrm, { Reg16|Mem, Reg32, 0} },
> -
> -/* push instructions */
> -{"push", 1, 0x50, _, ShortForm, { WordReg,0,0 } },
> -{"push", 1, 0xff, 0x6,  Modrm, { WordReg|WordMem, 0, 0 } },
> -{"push", 1, 0x6a, _, NoModrm, { Imm8S, 0, 0} },
> -{"push", 1, 0x68, _, NoModrm, { Imm16|Imm32, 0, 0} },
> -{"push", 1, 0x06, _,  Seg2ShortForm, { SReg2,0,0 } },
> -{"push", 1, 0x0fa0, _, Seg3ShortForm, { SReg3,0,0 } },
> -/* push all */
> -{"pusha", 0, 0x60, _, NoModrm, { 0, 0, 0 } },
> -
> -/* pop instructions */
> -{"pop", 1, 0x58, _, ShortForm, { WordReg,0,0 } },
> -{"pop", 1, 0x8f, 0x0,  Modrm, { WordReg|WordMem, 0, 0 } },
> -#define POP_SEG_SHORT 0x7
> -{"pop", 1, 0x07, _,  Seg2ShortForm, { SReg2,0,0 } },
> -{"pop", 1, 0x0fa1, _, Seg3ShortForm, { SReg3,0,0 } },
> -/* pop all */
> -{"popa", 0, 0x61, _, NoModrm, { 0, 0, 0 } },
> -
> -/* xchg exchange instructions
> -   xchg commutes:  we allow both operand orders */
> -{"xchg", 2, 0x90, _, ShortForm, { WordReg, Acc, 0 } },
> -{"xchg", 2, 0x90, _, ShortForm, { Acc, WordReg, 0 } },
> -{"xchg", 2, 0x86, _, W|Modrm, { Reg, Reg|Mem, 0 } },
> -{"xchg", 2, 0x86, _, W|Modrm, { Reg|Mem, Reg, 0 } },
> -
> -/* in/out from ports */
> -{"in", 2, 0xe4, _, W|NoModrm, { Imm8, Acc, 0 } },
> -{"in", 2, 0xec, _, W|NoModrm, { InOutPortReg, Acc, 0 } },
> -{"in", 1, 0xe4, _, W|NoModrm, { Imm8, 0, 0 } },
> -{"in", 1, 0xec, _, W|NoModrm, { InOutPortReg, 0, 0 } },
> -{"out", 2, 0xe6, _, W|NoModrm, { Acc, Imm8, 0 } },
> -{"out", 2, 0xee, _, W|NoModrm, { Acc, InOutPortReg, 0 } },
> -{"out", 1, 0xe6, _, W|NoModrm, { Imm8, 0, 0 } },
> -{"out", 1, 0xee, _, W|NoModrm, { InOutPortReg, 0, 0 } },
> -
> -/* load effective address */
> -{"lea", 2, 0x8d, _, Modrm, { WordMem, WordReg, 0 } },
> -
> -/* load segment registers from memory */
> -{"lds", 2, 0xc5, _, Modrm, { Mem, Reg32, 0} },
> -{"les", 2, 0xc4, _, Modrm, { Mem, Reg32, 0} },
> -{"lfs", 2, 0x0fb4, _, Modrm, { Mem, Reg32, 0} },
> -{"lgs", 2, 0x0fb5, _, Modrm, { Mem, Reg32, 0} },
> -{"lss", 2, 0x0fb2, _, Modrm, { Mem, Reg32, 0} },
> -
> -/* flags register instructions */
> -{"clc", 0, 0xf8, _, NoModrm, { 0, 0, 0} },
> -{"cld", 0, 0xfc, _, NoModrm, { 0, 0, 0} },
> -{"cli", 0, 0xfa, _, NoModrm, { 0, 0, 0} },
> -{"clts", 0, 0x0f06, _, NoModrm, { 0, 0, 0} },
> -{"cmc", 0, 0xf5, _, NoModrm, { 0, 0, 0} },
> -{"lahf", 0, 0x9f, _, NoModrm, { 0, 0, 0} },
> -{"sahf", 0, 0x9e, _, NoModrm, { 0, 0, 0} },
> -{"pushfl", 0, 0x9c, _, NoModrm|Data32, { 0, 0, 0} },
> -{"popfl", 0, 0x9d, _, NoModrm|Data32, { 0, 0, 0} },
> -{"pushfw", 0, 0x9c, _, NoModrm|Data16, { 0, 0, 0} },
> -{"popfw", 0, 0x9d, _, NoModrm|Data16, { 0, 0, 0} },
> -{"pushf", 0, 0x9c, _, NoModrm, { 0, 0, 0} },
> -{"popf", 0, 0x9d, _, NoModrm, { 0, 0, 0} },
> -{"stc", 0, 0xf9, _, NoModrm, { 0, 0, 0} },
> -{"std", 0, 0xfd, _, NoModrm, { 0, 0, 0} },
> -{"sti", 0, 0xfb, _, NoModrm, { 0, 0, 0} },
> -
> -{"add", 2, 0x0,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
> -{"add", 2, 0x83, 0,  Modrm, { Imm8S, WordReg|WordMem, 0} },
> -{"add", 2, 0x4,  _,  W|NoModrm, { Imm,  Acc,    0} },
> -{"add", 2, 0x80, 0, W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"inc", 1, 0x40, _, ShortForm, { WordReg, 0, 0} },
> -{"inc", 1, 0xfe, 0, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"sub", 2, 0x28,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
> -{"sub", 2, 0x83, 5,  Modrm, { Imm8S, WordReg|WordMem, 0} },
> -{"sub", 2, 0x2c,  _,  W|NoModrm, { Imm,  Acc,    0} },
> -{"sub", 2, 0x80, 5,  W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"dec", 1, 0x48, _, ShortForm, { WordReg, 0, 0} },
> -{"dec", 1, 0xfe, 1, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"sbb", 2, 0x18,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
> -{"sbb", 2, 0x83, 3,  Modrm, { Imm8S, WordReg|WordMem, 0} },
> -{"sbb", 2, 0x1c,  _,  W|NoModrm, { Imm,  Acc,    0} },
> -{"sbb", 2, 0x80, 3,  W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"cmp", 2, 0x38,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
> -{"cmp", 2, 0x83, 7,  Modrm, { Imm8S, WordReg|WordMem, 0} },
> -{"cmp", 2, 0x3c,  _,  W|NoModrm, { Imm,  Acc,    0} },
> -{"cmp", 2, 0x80, 7,  W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"test", 2, 0x84, _, W|Modrm, { Reg|Mem, Reg, 0} },
> -{"test", 2, 0x84, _, W|Modrm, { Reg, Reg|Mem, 0} },
> -{"test", 2, 0xa8, _, W|NoModrm, { Imm, Acc, 0} },
> -{"test", 2, 0xf6, 0, W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"and", 2, 0x20,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
> -{"and", 2, 0x83, 4,  Modrm, { Imm8S, WordReg|WordMem, 0} },
> -{"and", 2, 0x24,  _,  W|NoModrm, { Imm,  Acc,    0} },
> -{"and", 2, 0x80, 4,  W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"or", 2, 0x08,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
> -{"or", 2, 0x83, 1,  Modrm, { Imm8S, WordReg|WordMem, 0} },
> -{"or", 2, 0x0c,  _,  W|NoModrm, { Imm,  Acc,    0} },
> -{"or", 2, 0x80, 1,  W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"xor", 2, 0x30,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
> -{"xor", 2, 0x83, 6,  Modrm, { Imm8S, WordReg|WordMem, 0} },
> -{"xor", 2, 0x34,  _,  W|NoModrm, { Imm,  Acc,    0} },
> -{"xor", 2, 0x80, 6,  W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"adc", 2, 0x10,  _, DW|Modrm, { Reg, Reg|Mem, 0} },
> -{"adc", 2, 0x83, 2,  Modrm, { Imm8S, WordReg|WordMem, 0} },
> -{"adc", 2, 0x14,  _,  W|NoModrm, { Imm,  Acc,    0} },
> -{"adc", 2, 0x80, 2,  W|Modrm, { Imm, Reg|Mem, 0} },
> -
> -{"neg", 1, 0xf6, 3, W|Modrm, { Reg|Mem, 0, 0} },
> -{"not", 1, 0xf6, 2, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"aaa", 0, 0x37, _, NoModrm, { 0, 0, 0} },
> -{"aas", 0, 0x3f, _, NoModrm, { 0, 0, 0} },
> -{"daa", 0, 0x27, _, NoModrm, { 0, 0, 0} },
> -{"das", 0, 0x2f, _, NoModrm, { 0, 0, 0} },
> -{"aad", 0, 0xd50a, _, NoModrm, { 0, 0, 0} },
> -{"aam", 0, 0xd40a, _, NoModrm, { 0, 0, 0} },
> -
> -/* conversion insns */
> -/* conversion:  intel naming */
> -{"cbw", 0, 0x98, _, NoModrm|Data16, { 0, 0, 0} },
> -{"cwd", 0, 0x99, _, NoModrm|Data16, { 0, 0, 0} },
> -{"cwde", 0, 0x98, _, NoModrm|Data32, { 0, 0, 0} },
> -{"cdq", 0, 0x99, _, NoModrm|Data32, { 0, 0, 0} },
> -/*  att naming */
> -{"cbtw", 0, 0x98, _, NoModrm|Data16, { 0, 0, 0} },
> -{"cwtl", 0, 0x98, _, NoModrm|Data32, { 0, 0, 0} },
> -{"cwtd", 0, 0x99, _, NoModrm|Data16, { 0, 0, 0} },
> -{"cltd", 0, 0x99, _, NoModrm|Data32, { 0, 0, 0} },
> -
> -/* Warning! the mul/imul (opcode 0xf6) must only have 1 operand!  They are
> -   expanding 64-bit multiplies, and *cannot* be selected to accomplish
> -   'imul %ebx, %eax' (opcode 0x0faf must be used in this case)
> -   These multiplies can only be selected with single operand forms. */
> -{"mul",  1, 0xf6, 4, W|Modrm, { Reg|Mem, 0, 0} },
> -{"imul", 1, 0xf6, 5, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -
> -
> -
> -/* imulKludge here is needed to reverse the i.rm.reg & i.rm.regmem fields.
> -   These instructions are exceptions:  'imul $2, %eax, %ecx' would put
> -   '%eax' in the reg field and '%ecx' in the regmem field if we did not
> -   switch them. */
> -{"imul", 2, 0x0faf, _, Modrm|ReverseRegRegmem, { WordReg|Mem, WordReg, 0} },
> -{"imul", 3, 0x6b, _, Modrm|ReverseRegRegmem, { Imm8S, WordReg|Mem, WordReg} },
> -{"imul", 3, 0x69, _, Modrm|ReverseRegRegmem, { Imm16|Imm32, WordReg|Mem, WordReg} },
> -/*
> -  imul with 2 operands mimicks imul with 3 by puting register both
> -  in i.rm.reg & i.rm.regmem fields
> -*/
> -{"imul", 2, 0x6b, _, Modrm|imulKludge, { Imm8S, WordReg, 0} },
> -{"imul", 2, 0x69, _, Modrm|imulKludge, { Imm16|Imm32, WordReg, 0} },
> -{"div", 1, 0xf6, 6, W|Modrm, { Reg|Mem, 0, 0} },
> -{"div", 2, 0xf6, 6, W|Modrm, { Reg|Mem, Acc, 0} },
> -{"idiv", 1, 0xf6, 7, W|Modrm, { Reg|Mem, 0, 0} },
> -{"idiv", 2, 0xf6, 7, W|Modrm, { Reg|Mem, Acc, 0} },
> -
> -{"rol", 2, 0xd0, 0, W|Modrm, { Imm1, Reg|Mem, 0} },
> -{"rol", 2, 0xc0, 0, W|Modrm, { Imm8, Reg|Mem, 0} },
> -{"rol", 2, 0xd2, 0, W|Modrm, { ShiftCount, Reg|Mem, 0} },
> -{"rol", 1, 0xd0, 0, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"ror", 2, 0xd0, 1, W|Modrm, { Imm1, Reg|Mem, 0} },
> -{"ror", 2, 0xc0, 1, W|Modrm, { Imm8, Reg|Mem, 0} },
> -{"ror", 2, 0xd2, 1, W|Modrm, { ShiftCount, Reg|Mem, 0} },
> -{"ror", 1, 0xd0, 1, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"rcl", 2, 0xd0, 2, W|Modrm, { Imm1, Reg|Mem, 0} },
> -{"rcl", 2, 0xc0, 2, W|Modrm, { Imm8, Reg|Mem, 0} },
> -{"rcl", 2, 0xd2, 2, W|Modrm, { ShiftCount, Reg|Mem, 0} },
> -{"rcl", 1, 0xd0, 2, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"rcr", 2, 0xd0, 3, W|Modrm, { Imm1, Reg|Mem, 0} },
> -{"rcr", 2, 0xc0, 3, W|Modrm, { Imm8, Reg|Mem, 0} },
> -{"rcr", 2, 0xd2, 3, W|Modrm, { ShiftCount, Reg|Mem, 0} },
> -{"rcr", 1, 0xd0, 3, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"sal", 2, 0xd0, 4, W|Modrm, { Imm1, Reg|Mem, 0} },
> -{"sal", 2, 0xc0, 4, W|Modrm, { Imm8, Reg|Mem, 0} },
> -{"sal", 2, 0xd2, 4, W|Modrm, { ShiftCount, Reg|Mem, 0} },
> -{"sal", 1, 0xd0, 4, W|Modrm, { Reg|Mem, 0, 0} },
> -{"shl", 2, 0xd0, 4, W|Modrm, { Imm1, Reg|Mem, 0} },
> -{"shl", 2, 0xc0, 4, W|Modrm, { Imm8, Reg|Mem, 0} },
> -{"shl", 2, 0xd2, 4, W|Modrm, { ShiftCount, Reg|Mem, 0} },
> -{"shl", 1, 0xd0, 4, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"shld", 3, 0x0fa4, _, Modrm, { Imm8, WordReg, WordReg|Mem} },
> -{"shld", 3, 0x0fa5, _, Modrm, { ShiftCount, WordReg, WordReg|Mem} },
> -{"shld", 2, 0x0fa5, _, Modrm, { WordReg, WordReg|Mem, 0} },
> -
> -{"shr", 2, 0xd0, 5, W|Modrm, { Imm1, Reg|Mem, 0} },
> -{"shr", 2, 0xc0, 5, W|Modrm, { Imm8, Reg|Mem, 0} },
> -{"shr", 2, 0xd2, 5, W|Modrm, { ShiftCount, Reg|Mem, 0} },
> -{"shr", 1, 0xd0, 5, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -{"shrd", 3, 0x0fac, _, Modrm, { Imm8, WordReg, WordReg|Mem} },
> -{"shrd", 3, 0x0fad, _, Modrm, { ShiftCount, WordReg, WordReg|Mem} },
> -{"shrd", 2, 0x0fad, _, Modrm, { WordReg, WordReg|Mem, 0} },
> -
> -{"sar", 2, 0xd0, 7, W|Modrm, { Imm1, Reg|Mem, 0} },
> -{"sar", 2, 0xc0, 7, W|Modrm, { Imm8, Reg|Mem, 0} },
> -{"sar", 2, 0xd2, 7, W|Modrm, { ShiftCount, Reg|Mem, 0} },
> -{"sar", 1, 0xd0, 7, W|Modrm, { Reg|Mem, 0, 0} },
> -
> -/* control transfer instructions */
> -#define CALL_PC_RELATIVE 0xe8
> -{"call", 1, 0xe8, _, JumpDword, { Disp32, 0, 0} },
> -{"call", 1, 0xff, 2, Modrm|Data32, { Reg|Mem|JumpAbsolute, 0, 0} },
> -{"callw", 1, 0xff, 2, Modrm|Data16, { Reg|Mem|JumpAbsolute, 0, 0} },
> -#define CALL_FAR_IMMEDIATE 0x9a
> -{"lcall", 2, 0x9a, _, JumpInterSegment, { Imm16, Abs32|Imm32, 0} },
> -{"lcall", 1, 0xff, 3, Modrm|Data32, { Mem, 0, 0} },
> -{"lcallw", 1, 0xff, 3, Modrm|Data16, { Mem, 0, 0} },
> -
> -#define JUMP_PC_RELATIVE 0xeb
> -{"jmp", 1, 0xeb, _, Jump, { Disp, 0, 0} },
> -{"jmp", 1, 0xff, 4, Modrm, { Reg32|Mem|JumpAbsolute, 0, 0} },
> -#define JUMP_FAR_IMMEDIATE 0xea
> -{"ljmp", 2, 0xea, _, JumpInterSegment, { Imm16, Imm32, 0} },
> -{"ljmp", 1, 0xff, 5, Modrm|Data32, { Mem, 0, 0} },
> -
> -{"ret", 0, 0xc3, _, NoModrm|Data32, { 0, 0, 0} },
> -{"ret", 1, 0xc2, _, NoModrm|Data32, { Imm16, 0, 0} },
> -{"retw", 0, 0xc3, _, NoModrm|Data16, { 0, 0, 0} },
> -{"retw", 1, 0xc2, _, NoModrm|Data16, { Imm16, 0, 0} },
> -{"lret", 0, 0xcb, _, NoModrm|Data32, { 0, 0, 0} },
> -{"lret", 1, 0xca, _, NoModrm|Data32, { Imm16, 0, 0} },
> -{"lretw", 0, 0xcb, _, NoModrm|Data16, { 0, 0, 0} },
> -{"lretw", 1, 0xca, _, NoModrm|Data16, { Imm16, 0, 0} },
> -{"enter", 2, 0xc8, _, NoModrm|Data32, { Imm16, Imm8, 0} },
> -{"leave", 0, 0xc9, _, NoModrm|Data32, { 0, 0, 0} },
> -{"enterw", 2, 0xc8, _, NoModrm|Data16, { Imm16, Imm8, 0} },
> -{"leavew", 0, 0xc9, _, NoModrm|Data16, { 0, 0, 0} },
> -
> -/* conditional jumps */
> -{"jo", 1, 0x70, _, Jump, { Disp, 0, 0} },
> -
> -{"jno", 1, 0x71, _, Jump, { Disp, 0, 0} },
> -
> -{"jb", 1, 0x72, _, Jump, { Disp, 0, 0} },
> -{"jc", 1, 0x72, _, Jump, { Disp, 0, 0} },
> -{"jnae", 1, 0x72, _, Jump, { Disp, 0, 0} },
> -
> -{"jnb", 1, 0x73, _, Jump, { Disp, 0, 0} },
> -{"jnc", 1, 0x73, _, Jump, { Disp, 0, 0} },
> -{"jae", 1, 0x73, _, Jump, { Disp, 0, 0} },
> -
> -{"je", 1, 0x74, _, Jump, { Disp, 0, 0} },
> -{"jz", 1, 0x74, _, Jump, { Disp, 0, 0} },
> -
> -{"jne", 1, 0x75, _, Jump, { Disp, 0, 0} },
> -{"jnz", 1, 0x75, _, Jump, { Disp, 0, 0} },
> -
> -{"jbe", 1, 0x76, _, Jump, { Disp, 0, 0} },
> -{"jna", 1, 0x76, _, Jump, { Disp, 0, 0} },
> -
> -{"jnbe", 1, 0x77, _, Jump, { Disp, 0, 0} },
> -{"ja", 1, 0x77, _, Jump, { Disp, 0, 0} },
> -
> -{"js", 1, 0x78, _, Jump, { Disp, 0, 0} },
> -
> -{"jns", 1, 0x79, _, Jump, { Disp, 0, 0} },
> -
> -{"jp", 1, 0x7a, _, Jump, { Disp, 0, 0} },
> -{"jpe", 1, 0x7a, _, Jump, { Disp, 0, 0} },
> -
> -{"jnp", 1, 0x7b, _, Jump, { Disp, 0, 0} },
> -{"jpo", 1, 0x7b, _, Jump, { Disp, 0, 0} },
> -
> -{"jl", 1, 0x7c, _, Jump, { Disp, 0, 0} },
> -{"jnge", 1, 0x7c, _, Jump, { Disp, 0, 0} },
> -
> -{"jnl", 1, 0x7d, _, Jump, { Disp, 0, 0} },
> -{"jge", 1, 0x7d, _, Jump, { Disp, 0, 0} },
> -
> -{"jle", 1, 0x7e, _, Jump, { Disp, 0, 0} },
> -{"jng", 1, 0x7e, _, Jump, { Disp, 0, 0} },
> -
> -{"jnle", 1, 0x7f, _, Jump, { Disp, 0, 0} },
> -{"jg", 1, 0x7f, _, Jump, { Disp, 0, 0} },
> -
> -#if 0  /* XXX where are these macros used?
> -  To get them working again, they need to take
> -  an entire template as the parameter,
> -  and check for Data16/Data32 flags.  */
> -/* these turn into pseudo operations when disp is larger than 8 bits */
> -#define IS_JUMP_ON_CX_ZERO(o) \
> -  (o == 0x66e3)
> -#define IS_JUMP_ON_ECX_ZERO(o) \
> -  (o == 0xe3)
> -#endif
> -
> -{"jcxz", 1, 0xe3, _, JumpByte|Data16, { Disp, 0, 0} },
> -{"jecxz", 1, 0xe3, _, JumpByte|Data32, { Disp, 0, 0} },
> -
> -#define IS_LOOP_ECX_TIMES(o) \
> -  (o == 0xe2 || o == 0xe1 || o == 0xe0)
> -
> -{"loop", 1, 0xe2, _, JumpByte, { Disp, 0, 0} },
> -
> -{"loopz", 1, 0xe1, _, JumpByte, { Disp, 0, 0} },
> -{"loope", 1, 0xe1, _, JumpByte, { Disp, 0, 0} },
> -
> -{"loopnz", 1, 0xe0, _, JumpByte, { Disp, 0, 0} },
> -{"loopne", 1, 0xe0, _, JumpByte, { Disp, 0, 0} },
> -
> -/* set byte on flag instructions */
> -{"seto", 1, 0x0f90, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setno", 1, 0x0f91, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setb", 1, 0x0f92, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setc", 1, 0x0f92, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setnae", 1, 0x0f92, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setnb", 1, 0x0f93, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setnc", 1, 0x0f93, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setae", 1, 0x0f93, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"sete", 1, 0x0f94, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setz", 1, 0x0f94, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setne", 1, 0x0f95, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setnz", 1, 0x0f95, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setbe", 1, 0x0f96, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setna", 1, 0x0f96, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setnbe", 1, 0x0f97, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"seta", 1, 0x0f97, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"sets", 1, 0x0f98, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setns", 1, 0x0f99, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setp", 1, 0x0f9a, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setpe", 1, 0x0f9a, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setnp", 1, 0x0f9b, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setpo", 1, 0x0f9b, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setl", 1, 0x0f9c, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setnge", 1, 0x0f9c, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setnl", 1, 0x0f9d, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setge", 1, 0x0f9d, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setle", 1, 0x0f9e, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setng", 1, 0x0f9e, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -{"setnle", 1, 0x0f9f, 0, Modrm, { Reg8|Mem, 0, 0} },
> -{"setg", 1, 0x0f9f, 0, Modrm, { Reg8|Mem, 0, 0} },
> -
> -#define IS_STRING_INSTRUCTION(o) \
> -  ((o) == 0xa6 || (o) == 0x6c || (o) == 0x6e || (o) == 0x6e || \
> -   (o) == 0xac || (o) == 0xa4 || (o) == 0xae || (o) == 0xaa || \
> -   (o) == 0xd7)
> -
> -/* string manipulation */
> -{"cmps", 0, 0xa6, _, W|NoModrm, { 0, 0, 0} },
> -{"scmp", 0, 0xa6, _, W|NoModrm, { 0, 0, 0} },
> -{"ins", 0, 0x6c, _, W|NoModrm, { 0, 0, 0} },
> -{"outs", 0, 0x6e, _, W|NoModrm, { 0, 0, 0} },
> -{"lods", 0, 0xac, _, W|NoModrm, { 0, 0, 0} },
> -{"slod", 0, 0xac, _, W|NoModrm, { 0, 0, 0} },
> -{"movs", 0, 0xa4, _, W|NoModrm, { 0, 0, 0} },
> -{"smov", 0, 0xa4, _, W|NoModrm, { 0, 0, 0} },
> -{"scas", 0, 0xae, _, W|NoModrm, { 0, 0, 0} },
> -{"ssca", 0, 0xae, _, W|NoModrm, { 0, 0, 0} },
> -{"stos", 0, 0xaa, _, W|NoModrm, { 0, 0, 0} },
> -{"ssto", 0, 0xaa, _, W|NoModrm, { 0, 0, 0} },
> -{"xlat", 0, 0xd7, _, NoModrm, { 0, 0, 0} },
> -
> -/* bit manipulation */
> -{"bsf", 2, 0x0fbc, _, Modrm|ReverseRegRegmem, { Reg|Mem, Reg, 0} },
> -{"bsr", 2, 0x0fbd, _, Modrm|ReverseRegRegmem, { Reg|Mem, Reg, 0} },
> -{"bt", 2, 0x0fa3, _, Modrm, { Reg, Reg|Mem, 0} },
> -{"bt", 2, 0x0fba, 4, Modrm, { Imm8, Reg|Mem, 0} },
> -{"btc", 2, 0x0fbb, _, Modrm, { Reg, Reg|Mem, 0} },
> -{"btc", 2, 0x0fba, 7, Modrm, { Imm8, Reg|Mem, 0} },
> -{"btr", 2, 0x0fb3, _, Modrm, { Reg, Reg|Mem, 0} },
> -{"btr", 2, 0x0fba, 6, Modrm, { Imm8, Reg|Mem, 0} },
> -{"bts", 2, 0x0fab, _, Modrm, { Reg, Reg|Mem, 0} },
> -{"bts", 2, 0x0fba, 5, Modrm, { Imm8, Reg|Mem, 0} },
> -
> -/* interrupts & op. sys insns */
> -/* See gas/config/tc-i386.c for conversion of 'int $3' into the special
> -   int 3 insn. */
> -#define INT_OPCODE 0xcd
> -#define INT3_OPCODE 0xcc
> -{"int", 1, 0xcd, _, NoModrm, { Imm8, 0, 0} },
> -{"int3", 0, 0xcc, _, NoModrm, { 0, 0, 0} },
> -{"into", 0, 0xce, _, NoModrm, { 0, 0, 0} },
> -{"iret", 0, 0xcf, _, NoModrm|Data32, { 0, 0, 0} },
> -{"iretw", 0, 0xcf, _, NoModrm|Data16, { 0, 0, 0} },
> -/* i386sl, i486sl, later 486, and Pentium */
> -{"rsm", 0, 0x0faa, _, NoModrm,{ 0, 0, 0} },
> -
> -{"boundl", 2, 0x62, _, Modrm|Data32, { Reg32, Mem, 0} },
> -{"boundw", 2, 0x62, _, Modrm|Data16, { Reg16, Mem, 0} },
> -
> -{"hlt", 0, 0xf4, _, NoModrm, { 0, 0, 0} },
> -{"wait", 0, 0x9b, _, NoModrm, { 0, 0, 0} },
> -/* nop is actually 'xchgl %eax, %eax' */
> -{"nop", 0, 0x90, _, NoModrm, { 0, 0, 0} },
> -
> -/* protection control */
> -{"arpl", 2, 0x63, _, Modrm, { Reg16, Reg16|Mem, 0} },
> -{"lar", 2, 0x0f02, _, Modrm|ReverseRegRegmem, { WordReg|Mem, WordReg, 0} },
> -{"lgdt", 1, 0x0f01, 2, Modrm, { Mem, 0, 0} },
> -{"lidt", 1, 0x0f01, 3, Modrm, { Mem, 0, 0} },
> -{"lldt", 1, 0x0f00, 2, Modrm, { WordReg|Mem, 0, 0} },
> -{"lmsw", 1, 0x0f01, 6, Modrm, { WordReg|Mem, 0, 0} },
> -{"lsl", 2, 0x0f03, _, Modrm|ReverseRegRegmem, { WordReg|Mem, WordReg, 0} },
> -{"ltr", 1, 0x0f00, 3, Modrm, { WordReg|Mem, 0, 0} },
> -
> -{"sgdt", 1, 0x0f01, 0, Modrm, { Mem, 0, 0} },
> -{"sidt", 1, 0x0f01, 1, Modrm, { Mem, 0, 0} },
> -{"sldt", 1, 0x0f00, 0, Modrm, { WordReg|Mem, 0, 0} },
> -{"smsw", 1, 0x0f01, 4, Modrm, { WordReg|Mem, 0, 0} },
> -{"str", 1, 0x0f00, 1, Modrm, { Reg16|Mem, 0, 0} },
> -
> -{"verr", 1, 0x0f00, 4, Modrm, { WordReg|Mem, 0, 0} },
> -{"verw", 1, 0x0f00, 5, Modrm, { WordReg|Mem, 0, 0} },
> -
> -/* floating point instructions */
> -
> -/* load */
> -{"fld", 1, 0xd9c0, _, ShortForm, { FloatReg, 0, 0} }, /* register */
> -{"flds", 1, 0xd9, 0, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem float */
> -{"fldl", 1, 0xdd, 0, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem double */
> -{"fldl", 1, 0xd9c0, _, ShortForm, { FloatReg, 0, 0} }, /* register */
> -{"fild", 1, 0xdf, 0, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem word (16) */
> -{"fildl", 1, 0xdb, 0, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem dword (32) */
> -{"fildq",1, 0xdf, 5, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem qword (64) */
> -{"fildll",1, 0xdf, 5, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem qword (64) */
> -{"fldt", 1, 0xdb, 5, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem efloat */
> -{"fbld", 1, 0xdf, 4, Modrm, { Mem, 0, 0} }, /* %st0 <-- mem bcd */
> -
> -/* store (no pop) */
> -{"fst", 1, 0xddd0, _, ShortForm, { FloatReg, 0, 0} }, /* register */
> -{"fsts", 1, 0xd9, 2, Modrm, { Mem, 0, 0} }, /* %st0 --> mem float */
> -{"fstl", 1, 0xdd, 2, Modrm, { Mem, 0, 0} }, /* %st0 --> mem double */
> -{"fstl", 1, 0xddd0, _, ShortForm, { FloatReg, 0, 0} }, /* register */
> -{"fist", 1, 0xdf, 2, Modrm, { Mem, 0, 0} }, /* %st0 --> mem word (16) */
> -{"fistl", 1, 0xdb, 2, Modrm, { Mem, 0, 0} }, /* %st0 --> mem dword (32) */
> -
> -/* store (with pop) */
> -{"fstp", 1, 0xddd8, _, ShortForm, { FloatReg, 0, 0} }, /* register */
> -{"fstps", 1, 0xd9, 3, Modrm, { Mem, 0, 0} }, /* %st0 --> mem float */
> -{"fstpl", 1, 0xdd, 3, Modrm, { Mem, 0, 0} }, /* %st0 --> mem double */
> -{"fstpl", 1, 0xddd8, _, ShortForm, { FloatReg, 0, 0} }, /* register */
> -{"fistp", 1, 0xdf, 3, Modrm, { Mem, 0, 0} }, /* %st0 --> mem word (16) */
> -{"fistpl",1, 0xdb, 3, Modrm, { Mem, 0, 0} }, /* %st0 --> mem dword (32) */
> -{"fistpq",1, 0xdf, 7, Modrm, { Mem, 0, 0} }, /* %st0 --> mem qword (64) */
> -{"fistpll",1,0xdf, 7, Modrm, { Mem, 0, 0} }, /* %st0 --> mem qword (64) */
> -{"fstpt", 1, 0xdb, 7, Modrm, { Mem, 0, 0} }, /* %st0 --> mem efloat */
> -{"fbstp", 1, 0xdf, 6, Modrm, { Mem, 0, 0} }, /* %st0 --> mem bcd */
> -
> -/* exchange %st<n> with %st0 */
> -{"fxch", 1, 0xd9c8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fxch", 0, 0xd9c9, _, NoModrm, { 0, 0, 0} }, /* alias for fxch %st, %st(1) */
> -
> -/* comparison (without pop) */
> -{"fcom", 1, 0xd8d0, _, ShortForm, { FloatReg, 0, 0} },
> -{"fcoms", 1, 0xd8, 2, Modrm, { Mem, 0, 0} }, /* compare %st0, mem float  */
> -{"ficoml", 1, 0xda, 2, Modrm, { Mem, 0, 0} }, /* compare %st0, mem word  */
> -{"fcoml", 1, 0xdc, 2, Modrm, { Mem, 0, 0} }, /* compare %st0, mem double  */
> -{"fcoml", 1, 0xd8d0, _, ShortForm, { FloatReg, 0, 0} },
> -{"ficoms", 1, 0xde, 2, Modrm, { Mem, 0, 0} }, /* compare %st0, mem dword */
> -
> -/* comparison (with pop) */
> -{"fcomp", 1, 0xd8d8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fcomps", 1, 0xd8, 3, Modrm, { Mem, 0, 0} }, /* compare %st0, mem float  */
> -{"ficompl", 1, 0xda, 3, Modrm, { Mem, 0, 0} }, /* compare %st0, mem word  */
> -{"fcompl", 1, 0xdc, 3, Modrm, { Mem, 0, 0} }, /* compare %st0, mem double  */
> -{"fcompl", 1, 0xd8d8, _, ShortForm, { FloatReg, 0, 0} },
> -{"ficomps", 1, 0xde, 3, Modrm, { Mem, 0, 0} }, /* compare %st0, mem dword */
> -{"fcompp", 0, 0xded9, _, NoModrm, { 0, 0, 0} }, /* compare %st0, %st1 & pop 2 */
> -
> -/* unordered comparison (with pop) */
> -{"fucom", 1, 0xdde0, _, ShortForm, { FloatReg, 0, 0} },
> -{"fucomp", 1, 0xdde8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fucompp", 0, 0xdae9, _, NoModrm, { 0, 0, 0} }, /* ucompare %st0, %st1 & pop twice */
> -
> -{"ftst", 0, 0xd9e4, _, NoModrm, { 0, 0, 0} }, /* test %st0 */
> -{"fxam", 0, 0xd9e5, _, NoModrm, { 0, 0, 0} }, /* examine %st0 */
> -
> -/* load constants into %st0 */
> -{"fld1", 0, 0xd9e8, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- 1.0 */
> -{"fldl2t", 0, 0xd9e9, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- log2(10) */
> -{"fldl2e", 0, 0xd9ea, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- log2(e) */
> -{"fldpi", 0, 0xd9eb, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- pi */
> -{"fldlg2", 0, 0xd9ec, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- log10(2) */
> -{"fldln2", 0, 0xd9ed, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- ln(2) */
> -{"fldz", 0, 0xd9ee, _, NoModrm, { 0, 0, 0} }, /* %st0 <-- 0.0 */
> -
> -/* arithmetic */
> -
> -/* add */
> -{"fadd", 1, 0xd8c0, _, ShortForm, { FloatReg, 0, 0} },
> -{"fadd", 2, 0xd8c0, _, ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
> -{"fadd", 0, 0xdcc1, _, NoModrm, { 0, 0, 0} }, /* alias for fadd %st, %st(1) */
> -{"faddp", 1, 0xdac0, _, ShortForm, { FloatReg, 0, 0} },
> -{"faddp", 2, 0xdac0, _, ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
> -{"faddp", 0, 0xdec1, _, NoModrm, { 0, 0, 0} }, /* alias for faddp %st, %st(1) */
> -{"fadds", 1, 0xd8, 0, Modrm, { Mem, 0, 0} },
> -{"fiaddl", 1, 0xda, 0, Modrm, { Mem, 0, 0} },
> -{"faddl", 1, 0xdc, 0, Modrm, { Mem, 0, 0} },
> -{"fiadds", 1, 0xde, 0, Modrm, { Mem, 0, 0} },
> -
> -/* sub */
> -/* Note:  intel has decided that certain of these operations are reversed
> -   in assembler syntax. */
> -{"fsub", 1, 0xd8e0, _, ShortForm, { FloatReg, 0, 0} },
> -{"fsub", 2, 0xd8e0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -#ifdef NON_BROKEN_OPCODES
> -{"fsub", 2, 0xdce8, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#else
> -{"fsub", 2, 0xdce0, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#endif
> -{"fsub", 0, 0xdce1, _, NoModrm, { 0, 0, 0} },
> -{"fsubp", 1, 0xdae0, _, ShortForm, { FloatReg, 0, 0} },
> -{"fsubp", 2, 0xdae0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -#ifdef NON_BROKEN_OPCODES
> -{"fsubp", 2, 0xdee8, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#else
> -{"fsubp", 2, 0xdee0, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#endif
> -{"fsubp", 0, 0xdee1, _, NoModrm, { 0, 0, 0} },
> -{"fsubs", 1, 0xd8, 4, Modrm, { Mem, 0, 0} },
> -{"fisubl", 1, 0xda, 4, Modrm, { Mem, 0, 0} },
> -{"fsubl", 1, 0xdc, 4, Modrm, { Mem, 0, 0} },
> -{"fisubs", 1, 0xde, 4, Modrm, { Mem, 0, 0} },
> -
> -/* sub reverse */
> -{"fsubr", 1, 0xd8e8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fsubr", 2, 0xd8e8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -#ifdef NON_BROKEN_OPCODES
> -{"fsubr", 2, 0xdce0, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#else
> -{"fsubr", 2, 0xdce8, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#endif
> -{"fsubr", 0, 0xdce9, _, NoModrm, { 0, 0, 0} },
> -{"fsubrp", 1, 0xdae8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fsubrp", 2, 0xdae8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -#ifdef NON_BROKEN_OPCODES
> -{"fsubrp", 2, 0xdee0, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#else
> -{"fsubrp", 2, 0xdee8, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#endif
> -{"fsubrp", 0, 0xdee9, _, NoModrm, { 0, 0, 0} },
> -{"fsubrs", 1, 0xd8, 5, Modrm, { Mem, 0, 0} },
> -{"fisubrl", 1, 0xda, 5, Modrm, { Mem, 0, 0} },
> -{"fsubrl", 1, 0xdc, 5, Modrm, { Mem, 0, 0} },
> -{"fisubrs", 1, 0xde, 5, Modrm, { Mem, 0, 0} },
> -
> -/* mul */
> -{"fmul", 1, 0xd8c8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fmul", 2, 0xd8c8, _, ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
> -{"fmul", 0, 0xdcc9, _, NoModrm, { 0, 0, 0} },
> -{"fmulp", 1, 0xdac8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fmulp", 2, 0xdac8, _, ShortForm|FloatD, { FloatReg, FloatAcc, 0} },
> -{"fmulp", 0, 0xdec9, _, NoModrm, { 0, 0, 0} },
> -{"fmuls", 1, 0xd8, 1, Modrm, { Mem, 0, 0} },
> -{"fimull", 1, 0xda, 1, Modrm, { Mem, 0, 0} },
> -{"fmull", 1, 0xdc, 1, Modrm, { Mem, 0, 0} },
> -{"fimuls", 1, 0xde, 1, Modrm, { Mem, 0, 0} },
> -
> -/* div */
> -/* Note:  intel has decided that certain of these operations are reversed
> -   in assembler syntax. */
> -{"fdiv", 1, 0xd8f0, _, ShortForm, { FloatReg, 0, 0} },
> -{"fdiv", 2, 0xd8f0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -#ifdef NON_BROKEN_OPCODES
> -{"fdiv", 2, 0xdcf8, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#else
> -{"fdiv", 2, 0xdcf0, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#endif
> -{"fdiv", 0, 0xdcf1, _, NoModrm, { 0, 0, 0} },
> -{"fdivp", 1, 0xdaf0, _, ShortForm, { FloatReg, 0, 0} },
> -{"fdivp", 2, 0xdaf0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -#ifdef NON_BROKEN_OPCODES
> -{"fdivp", 2, 0xdef8, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#else
> -{"fdivp", 2, 0xdef0, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#endif
> -{"fdivp", 0, 0xdef1, _, NoModrm, { 0, 0, 0} },
> -{"fdivs", 1, 0xd8, 6, Modrm, { Mem, 0, 0} },
> -{"fidivl", 1, 0xda, 6, Modrm, { Mem, 0, 0} },
> -{"fdivl", 1, 0xdc, 6, Modrm, { Mem, 0, 0} },
> -{"fidivs", 1, 0xde, 6, Modrm, { Mem, 0, 0} },
> -
> -/* div reverse */
> -{"fdivr", 1, 0xd8f8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fdivr", 2, 0xd8f8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -#ifdef NON_BROKEN_OPCODES
> -{"fdivr", 2, 0xdcf0, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#else
> -{"fdivr", 2, 0xdcf8, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#endif
> -{"fdivr", 0, 0xdcf9, _, NoModrm, { 0, 0, 0} },
> -{"fdivrp", 1, 0xdaf8, _, ShortForm, { FloatReg, 0, 0} },
> -{"fdivrp", 2, 0xdaf8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -#ifdef NON_BROKEN_OPCODES
> -{"fdivrp", 2, 0xdef0, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#else
> -{"fdivrp", 2, 0xdef8, _, ShortForm, { FloatAcc, FloatReg, 0} },
> -#endif
> -{"fdivrp", 0, 0xdef9, _, NoModrm, { 0, 0, 0} },
> -{"fdivrs", 1, 0xd8, 7, Modrm, { Mem, 0, 0} },
> -{"fidivrl", 1, 0xda, 7, Modrm, { Mem, 0, 0} },
> -{"fdivrl", 1, 0xdc, 7, Modrm, { Mem, 0, 0} },
> -{"fidivrs", 1, 0xde, 7, Modrm, { Mem, 0, 0} },
> -
> -{"f2xm1", 0,   0xd9f0, _, NoModrm, { 0, 0, 0} },
> -{"fyl2x", 0,   0xd9f1, _, NoModrm, { 0, 0, 0} },
> -{"fptan", 0,   0xd9f2, _, NoModrm, { 0, 0, 0} },
> -{"fpatan", 0,  0xd9f3, _, NoModrm, { 0, 0, 0} },
> -{"fxtract", 0, 0xd9f4, _, NoModrm, { 0, 0, 0} },
> -{"fprem1", 0,  0xd9f5, _, NoModrm, { 0, 0, 0} },
> -{"fdecstp", 0,  0xd9f6, _, NoModrm, { 0, 0, 0} },
> -{"fincstp", 0,  0xd9f7, _, NoModrm, { 0, 0, 0} },
> -{"fprem", 0,   0xd9f8, _, NoModrm, { 0, 0, 0} },
> -{"fyl2xp1", 0, 0xd9f9, _, NoModrm, { 0, 0, 0} },
> -{"fsqrt", 0,   0xd9fa, _, NoModrm, { 0, 0, 0} },
> -{"fsincos", 0, 0xd9fb, _, NoModrm, { 0, 0, 0} },
> -{"frndint", 0, 0xd9fc, _, NoModrm, { 0, 0, 0} },
> -{"fscale", 0,  0xd9fd, _, NoModrm, { 0, 0, 0} },
> -{"fsin", 0,    0xd9fe, _, NoModrm, { 0, 0, 0} },
> -{"fcos", 0,    0xd9ff, _, NoModrm, { 0, 0, 0} },
> -
> -{"fchs", 0, 0xd9e0, _, NoModrm, { 0, 0, 0} },
> -{"fabs", 0, 0xd9e1, _, NoModrm, { 0, 0, 0} },
> -
> -/* processor control */
> -{"fninit", 0, 0xdbe3, _, NoModrm, { 0, 0, 0} },
> -{"finit", 0, 0x9bdbe3, _, NoModrm, { 0, 0, 0} },
> -{"fldcw", 1, 0xd9, 5, Modrm, { Mem, 0, 0} },
> -{"fnstcw", 1, 0xd9, 7, Modrm, { Mem, 0, 0} },
> -{"fstcw", 1, 0x9bd9, 7, Modrm, { Mem, 0, 0} },
> -{"fnstsw", 1, 0xdfe0, _, NoModrm, { Acc, 0, 0} },
> -{"fnstsw", 1, 0xdd, 7, Modrm, { Mem, 0, 0} },
> -{"fnstsw", 0, 0xdfe0, _, NoModrm, { 0, 0, 0} },
> -{"fstsw", 1, 0x9bdfe0, _, NoModrm, { Acc, 0, 0} },
> -{"fstsw", 1, 0x9bdd, 7, Modrm, { Mem, 0, 0} },
> -{"fstsw", 0, 0x9bdfe0, _, NoModrm, { 0, 0, 0} },
> -{"fnclex", 0, 0xdbe2, _, NoModrm, { 0, 0, 0} },
> -{"fclex", 0, 0x9bdbe2, _, NoModrm, { 0, 0, 0} },
> -/*
> - We ignore the short format (287) versions of fstenv/fldenv & fsave/frstor
> - instructions;  i'm not sure how to add them or how they are different.
> - My 386/387 book offers no details about this.
> -*/
> -{"fnstenv", 1, 0xd9, 6, Modrm, { Mem, 0, 0} },
> -{"fstenv", 1, 0x9bd9, 6, Modrm, { Mem, 0, 0} },
> -{"fldenv", 1, 0xd9, 4, Modrm, { Mem, 0, 0} },
> -{"fnsave", 1, 0xdd, 6, Modrm, { Mem, 0, 0} },
> -{"fsave", 1, 0x9bdd, 6, Modrm, { Mem, 0, 0} },
> -{"frstor", 1, 0xdd, 4, Modrm, { Mem, 0, 0} },
> -
> -{"ffree", 1, 0xddc0, _, ShortForm, { FloatReg, 0, 0} },
> -{"fnop", 0, 0xd9d0, _, NoModrm, { 0, 0, 0} },
> -{"fwait", 0, 0x9b, _, NoModrm, { 0, 0, 0} },
> -
> -/*
> -  opcode prefixes; we allow them as seperate insns too
> -  (see prefix table below)
> -*/
> -{"aword", 0, 0x67, _, NoModrm, { 0, 0, 0} },
> -{"addr16", 0, 0x67, _, NoModrm, { 0, 0, 0} },
> -{"word", 0, 0x66, _, NoModrm, { 0, 0, 0} },
> -{"data16", 0, 0x66, _, NoModrm, { 0, 0, 0} },
> -{"lock", 0, 0xf0, _, NoModrm, { 0, 0, 0} },
> -{"cs", 0, 0x2e, _, NoModrm, { 0, 0, 0} },
> -{"ds", 0, 0x3e, _, NoModrm, { 0, 0, 0} },
> -{"es", 0, 0x26, _, NoModrm, { 0, 0, 0} },
> -{"fs", 0, 0x64, _, NoModrm, { 0, 0, 0} },
> -{"gs", 0, 0x65, _, NoModrm, { 0, 0, 0} },
> -{"ss", 0, 0x36, _, NoModrm, { 0, 0, 0} },
> -{"rep", 0, 0xf3, _, NoModrm, { 0, 0, 0} },
> -{"repe", 0, 0xf3, _, NoModrm, { 0, 0, 0} },
> -{"repz", 0, 0xf3, _, NoModrm, { 0, 0, 0} },
> -{"repne", 0, 0xf2, _, NoModrm, { 0, 0, 0} },
> -{"repnz", 0, 0xf2, _, NoModrm, { 0, 0, 0} },
> -
> -/* 486 extensions */
> -
> -{"bswap", 1, 0x0fc8, _, ShortForm, { Reg32,0,0 } },
> -{"xadd", 2, 0x0fc0, _, DW|Modrm, { Reg, Reg|Mem, 0 } },
> -{"cmpxchg", 2, 0x0fb0, _, DW|Modrm, { Reg, Reg|Mem, 0 } },
> -{"invd", 0, 0x0f08, _, NoModrm, { 0, 0, 0} },
> -{"wbinvd", 0, 0x0f09, _, NoModrm, { 0, 0, 0} },
> -{"invlpg", 1, 0x0f01, 7, Modrm, { Mem, 0, 0} },
> -
> -/* 586 and late 486 extensions */
> -{"cpuid", 0, 0x0fa2, _, NoModrm, { 0, 0, 0} },
> -
> -/* Pentium extensions */
> -{"wrmsr", 0, 0x0f30, _, NoModrm, { 0, 0, 0} },
> -{"rdtsc", 0, 0x0f31, _, NoModrm, { 0, 0, 0} },
> -{"rdmsr", 0, 0x0f32, _, NoModrm, { 0, 0, 0} },
> -{"cmpxchg8b", 1, 0x0fc7, 1, Modrm, { Mem, 0, 0} },
> -
> -/* Pentium Pro extensions */
> -{"rdpmc", 0, 0x0f33, _, NoModrm, { 0, 0, 0} },
> -
> -{"cmovo",  2, 0x0f40, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovno", 2, 0x0f41, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovb",  2, 0x0f42, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovae", 2, 0x0f43, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmove",  2, 0x0f44, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovne", 2, 0x0f45, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovbe", 2, 0x0f46, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmova",  2, 0x0f47, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovs",  2, 0x0f48, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovns", 2, 0x0f49, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovp",  2, 0x0f4a, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovnp", 2, 0x0f4b, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovl",  2, 0x0f4c, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovge", 2, 0x0f4d, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovle", 2, 0x0f4e, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -{"cmovg",  2, 0x0f4f, _, W|Modrm|ReverseRegRegmem, { WordReg|WordMem, WordReg, 0} },
> -
> -{"fcmovb", 2, 0xdac0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fcmove", 2, 0xdac8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fcmovbe",2, 0xdad0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fcmovu", 2, 0xdad8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fcmovnb", 2, 0xdbc0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fcmovne", 2, 0xdbc8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fcmovnbe",2, 0xdbd0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fcmovnu", 2, 0xdbd8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -
> -{"fcomi",  2, 0xdbf0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fucomi", 2, 0xdbe8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fcomip", 2, 0xdff0, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -{"fucomip",2, 0xdfe8, _, ShortForm, { FloatReg, FloatAcc, 0} },
> -
> -{"", 0, 0, 0, 0, { 0, 0, 0} } /* sentinel */
> -};
> -#undef _
> -
> -static const template *const i386_optab_end
> -  = i386_optab + sizeof (i386_optab)/sizeof(i386_optab[0]);
> -
> -/* 386 register table */
> -
> -static const reg_entry i386_regtab[] = {
> -  /* 8 bit regs */
> -  {"al", Reg8|Acc, 0}, {"cl", Reg8|ShiftCount, 1}, {"dl", Reg8, 2},
> -  {"bl", Reg8, 3},
> -  {"ah", Reg8, 4}, {"ch", Reg8, 5}, {"dh", Reg8, 6}, {"bh", Reg8, 7},
> -  /* 16 bit regs */
> -  {"ax", Reg16|Acc, 0}, {"cx", Reg16, 1}, {"dx", Reg16|InOutPortReg, 2}, {"bx", Reg16, 3},
> -  {"sp", Reg16, 4}, {"bp", Reg16, 5}, {"si", Reg16, 6}, {"di", Reg16, 7},
> -  /* 32 bit regs */
> -  {"eax", Reg32|Acc, 0}, {"ecx", Reg32, 1}, {"edx", Reg32, 2}, {"ebx", Reg32, 3},
> -  {"esp", Reg32, 4}, {"ebp", Reg32, 5}, {"esi", Reg32, 6}, {"edi", Reg32, 7},
> -  /* segment registers */
> -  {"es", SReg2, 0}, {"cs", SReg2, 1}, {"ss", SReg2, 2},
> -  {"ds", SReg2, 3}, {"fs", SReg3, 4}, {"gs", SReg3, 5},
> -  /* control registers */
> -  {"cr0", Control, 0},   {"cr2", Control, 2},   {"cr3", Control, 3},
> -  {"cr4", Control, 4},
> -  /* debug registers */
> -  {"db0", Debug, 0},   {"db1", Debug, 1},   {"db2", Debug, 2},
> -  {"db3", Debug, 3},   {"db6", Debug, 6},   {"db7", Debug, 7},
> -  {"dr0", Debug, 0},   {"dr1", Debug, 1},   {"dr2", Debug, 2},
> -  {"dr3", Debug, 3},   {"dr6", Debug, 6},   {"dr7", Debug, 7},
> -  /* test registers */
> -  {"tr3", Test, 3}, {"tr4", Test, 4}, {"tr5", Test, 5},
> -  {"tr6", Test, 6}, {"tr7", Test, 7},
> -  /* float registers */
> -  {"st(0)", FloatReg|FloatAcc, 0},
> -  {"st", FloatReg|FloatAcc, 0},
> -  {"st(1)", FloatReg, 1}, {"st(2)", FloatReg, 2},
> -  {"st(3)", FloatReg, 3}, {"st(4)", FloatReg, 4}, {"st(5)", FloatReg, 5},
> -  {"st(6)", FloatReg, 6}, {"st(7)", FloatReg, 7}
> -};
> -
> -#define MAX_REG_NAME_SIZE 8 /* for parsing register names from input */
> -
> -static const reg_entry *const i386_regtab_end
> -  = i386_regtab + sizeof(i386_regtab)/sizeof(i386_regtab[0]);
> -
> -/* segment stuff */
> -static const seg_entry cs = { "cs", 0x2e };
> -static const seg_entry ds = { "ds", 0x3e };
> -static const seg_entry ss = { "ss", 0x36 };
> -static const seg_entry es = { "es", 0x26 };
> -static const seg_entry fs = { "fs", 0x64 };
> -static const seg_entry gs = { "gs", 0x65 };
> -static const seg_entry null = { "", 0x0 };
> -
> -/*
> -  This table is used to store the default segment register implied by all
> -  possible memory addressing modes.
> -  It is indexed by the mode & modrm entries of the modrm byte as follows:
> -      index = (mode<<3) | modrm;
> -*/
> -static const seg_entry *const one_byte_segment_defaults[] = {
> -  /* mode 0 */
> -  &ds, &ds, &ds, &ds, &null, &ds, &ds, &ds,
> -  /* mode 1 */
> -  &ds, &ds, &ds, &ds, &null, &ss, &ds, &ds,
> -  /* mode 2 */
> -  &ds, &ds, &ds, &ds, &null, &ss, &ds, &ds,
> -  /* mode 3 --- not a memory reference; never referenced */
> -};
> -
> -static const seg_entry *const two_byte_segment_defaults[] = {
> -  /* mode 0 */
> -  &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds,
> -  /* mode 1 */
> -  &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds,
> -  /* mode 2 */
> -  &ds, &ds, &ds, &ds, &ss, &ds, &ds, &ds,
> -  /* mode 3 --- not a memory reference; never referenced */
> -};
> -
> -static const prefix_entry i386_prefixtab[] = {
> -#define ADDR_PREFIX_OPCODE 0x67
> -  { "addr16", 0x67 }, /* address size prefix ==> 16bit addressing
> - * (How is this useful?) */
> -#define WORD_PREFIX_OPCODE 0x66
> -  { "data16", 0x66 }, /* operand size prefix */
> -  { "lock", 0xf0 }, /* bus lock prefix */
> -  { "wait", 0x9b }, /* wait for coprocessor */
> -  { "cs", 0x2e }, { "ds", 0x3e }, /* segment overrides ... */
> -  { "es", 0x26 }, { "fs", 0x64 },
> -  { "gs", 0x65 }, { "ss", 0x36 },
> -/* REPE & REPNE used to detect rep/repne with a non-string instruction */
> -#define REPNE 0xf2
> -#define REPE  0xf3
> -  { "rep", 0xf3 }, /* repeat string instructions */
> -  { "repe", 0xf3 },  { "repz", 0xf3 },
> -  { "repne", 0xf2 }, { "repnz", 0xf2 }
> -};
> -
> -static const prefix_entry *const i386_prefixtab_end
> -  = i386_prefixtab + sizeof(i386_prefixtab)/sizeof(i386_prefixtab[0]);
> -
> -/* end of i386-opcode.h */
> diff --git a/opcode/ppc-dis.c b/opcode/ppc-dis.c
> deleted file mode 100644
> index 6a50151..0000000
> --- a/opcode/ppc-dis.c
> +++ /dev/null
> @@ -1,238 +0,0 @@
> -/* ppc-dis.c -- Disassemble PowerPC instructions
> -   Copyright 1994 Free Software Foundation, Inc.
> -   Written by Ian Lance Taylor, Cygnus Support
> -
> -This file is part of GDB, GAS, and the GNU binutils.
> -
> -GDB, GAS, and the GNU binutils are free software; you can redistribute
> -them and/or modify them 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.
> -
> -GDB, GAS, and the GNU binutils are distributed in the hope that they
> -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 file; see the file COPYING.  If not, write to the Free
> -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
> -
> -#include <stdio.h>
> -#include "ansidecl.h"
> -#include "sysdep.h"
> -#include "dis-asm.h"
> -#include "opcode/ppc.h"
> -
> -/* This file provides several disassembler functions, all of which use
> -   the disassembler interface defined in dis-asm.h.  Several functions
> -   are provided because this file handles disassembly for the PowerPC
> -   in both big and little endian mode and also for the POWER (RS/6000)
> -   chip.  */
> -
> -static int print_insn_powerpc PARAMS ((bfd_vma, struct disassemble_info *,
> -       int bigendian, int dialect));
> -
> -/* Print a big endian PowerPC instruction.  For convenience, also
> -   disassemble instructions supported by the Motorola PowerPC 601.  */
> -
> -int
> -print_insn_big_powerpc (memaddr, info)
> -     bfd_vma memaddr;
> -     struct disassemble_info *info;
> -{
> -  return print_insn_powerpc (memaddr, info, 1,
> -     PPC_OPCODE_PPC | PPC_OPCODE_601);
> -}
> -
> -/* Print a little endian PowerPC instruction.  For convenience, also
> -   disassemble instructions supported by the Motorola PowerPC 601.  */
> -
> -int
> -print_insn_little_powerpc (memaddr, info)
> -     bfd_vma memaddr;
> -     struct disassemble_info *info;
> -{
> -  return print_insn_powerpc (memaddr, info, 0,
> -     PPC_OPCODE_PPC | PPC_OPCODE_601);
> -}
> -
> -/* Print a POWER (RS/6000) instruction.  */
> -
> -int
> -print_insn_rs6000 (memaddr, info)
> -     bfd_vma memaddr;
> -     struct disassemble_info *info;
> -{
> -  return print_insn_powerpc (memaddr, info, 1, PPC_OPCODE_POWER);
> -}
> -
> -/* Print a PowerPC or POWER instruction.  */
> -
> -static int
> -print_insn_powerpc (memaddr, info, bigendian, dialect)
> -     bfd_vma memaddr;
> -     struct disassemble_info *info;
> -     int bigendian;
> -     int dialect;
> -{
> -  bfd_byte buffer[4];
> -  int status;
> -  unsigned long insn;
> -  const struct powerpc_opcode *opcode;
> -  const struct powerpc_opcode *opcode_end;
> -  unsigned long op;
> -
> -  status = (*info->read_memory_func) (memaddr, buffer, 4, info);
> -  if (status != 0)
> -    {
> -      (*info->memory_error_func) (status, memaddr, info);
> -      return -1;
> -    }
> -
> -  if (bigendian)
> -    insn = bfd_getb32 (buffer);
> -  else
> -    insn = bfd_getl32 (buffer);
> -
> -  /* Get the major opcode of the instruction.  */
> -  op = PPC_OP (insn);
> -
> -  /* Find the first match in the opcode table.  We could speed this up
> -     a bit by doing a binary search on the major opcode.  */
> -  opcode_end = powerpc_opcodes + powerpc_num_opcodes;
> -  for (opcode = powerpc_opcodes; opcode < opcode_end; opcode++)
> -    {
> -      unsigned long table_op;
> -      const unsigned char *opindex;
> -      const struct powerpc_operand *operand;
> -      int invalid;
> -      int need_comma;
> -      int need_paren;
> -
> -      table_op = PPC_OP (opcode->opcode);
> -      if (op < table_op)
> - break;
> -      if (op > table_op)
> - continue;
> -
> -      if ((insn & opcode->mask) != opcode->opcode
> -  || (opcode->flags & dialect) == 0)
> - continue;
> -
> -      /* Make two passes over the operands.  First see if any of them
> - have extraction functions, and, if they do, make sure the
> - instruction is valid.  */
> -      invalid = 0;
> -      for (opindex = opcode->operands; *opindex != 0; opindex++)
> - {
> -  operand = powerpc_operands + *opindex;
> -  if (operand->extract)
> -    (*operand->extract) (insn, &invalid);
> - }
> -      if (invalid)
> - continue;
> -
> -      /* The instruction is valid.  */
> -      (*info->fprintf_func) (info->stream, "%s", opcode->name);
> -      if (opcode->operands[0] != 0)
> - (*info->fprintf_func) (info->stream, "\t");
> -
> -      /* Now extract and print the operands.  */
> -      need_comma = 0;
> -      need_paren = 0;
> -      for (opindex = opcode->operands; *opindex != 0; opindex++)
> - {
> -  long value;
> -
> -  operand = powerpc_operands + *opindex;
> -
> -  /* Operands that are marked FAKE are simply ignored.  We
> -     already made sure that the extract function considered
> -     the instruction to be valid.  */
> -  if ((operand->flags & PPC_OPERAND_FAKE) != 0)
> -    continue;
> -
> -  /* Extract the value from the instruction.  */
> -  if (operand->extract)
> -    value = (*operand->extract) (insn, (int *) NULL);
> -  else
> -    {
> -      value = (insn >> operand->shift) & ((1 << operand->bits) - 1);
> -      if ((operand->flags & PPC_OPERAND_SIGNED) != 0
> -  && (value & (1 << (operand->bits - 1))) != 0)
> - value -= 1 << operand->bits;
> -    }
> -
> -  /* If the operand is optional, and the value is zero, don't
> -     print anything.  */
> -  if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0
> -      && (operand->flags & PPC_OPERAND_NEXT) == 0
> -      && value == 0)
> -    continue;
> -
> -  if (need_comma)
> -    {
> -      (*info->fprintf_func) (info->stream, ",");
> -      need_comma = 0;
> -    }
> -
> -  /* Print the operand as directed by the flags.  */
> -  if ((operand->flags & PPC_OPERAND_GPR) != 0)
> -    (*info->fprintf_func) (info->stream, "r%ld", value);
> -  else if ((operand->flags & PPC_OPERAND_FPR) != 0)
> -    (*info->fprintf_func) (info->stream, "f%ld", value);
> -  else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0)
> -    (*info->print_address_func) (memaddr + value, info);
> -  else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
> -    (*info->print_address_func) ((bfd_vma) value & 0xffffffff, info);
> -  else if ((operand->flags & PPC_OPERAND_CR) == 0
> -   || (dialect & PPC_OPCODE_PPC) == 0)
> -    (*info->fprintf_func) (info->stream, "%ld", value);
> -  else
> -    {
> -      if (operand->bits == 3)
> - (*info->fprintf_func) (info->stream, "cr%d", value);
> -      else
> - {
> -  static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
> -  int cr;
> -  int cc;
> -
> -  cr = value >> 2;
> -  if (cr != 0)
> -    (*info->fprintf_func) (info->stream, "4*cr%d", cr);
> -  cc = value & 3;
> -  if (cc != 0)
> -    {
> -      if (cr != 0)
> - (*info->fprintf_func) (info->stream, "+");
> -      (*info->fprintf_func) (info->stream, "%s", cbnames[cc]);
> -    }
> - }
> -    }
> -
> -  if (need_paren)
> -    {
> -      (*info->fprintf_func) (info->stream, ")");
> -      need_paren = 0;
> -    }
> -
> -  if ((operand->flags & PPC_OPERAND_PARENS) == 0)
> -    need_comma = 1;
> -  else
> -    {
> -      (*info->fprintf_func) (info->stream, "(");
> -      need_paren = 1;
> -    }
> - }
> -
> -      /* We have found and printed an instruction; return.  */
> -      return 4;
> -    }
> -
> -  /* We could not find a match.  */
> -  (*info->fprintf_func) (info->stream, ".long 0x%lx", insn);
> -
> -  return 4;
> -}
> diff --git a/opcode/ppc-opc.c b/opcode/ppc-opc.c
> deleted file mode 100644
> index 5715415..0000000
> --- a/opcode/ppc-opc.c
> +++ /dev/null
> @@ -1,2830 +0,0 @@
> -/* ppc-opc.c -- PowerPC opcode list
> -   Copyright 1994 Free Software Foundation, Inc.
> -   Written by Ian Lance Taylor, Cygnus Support
> -
> -This file is part of GDB, GAS, and the GNU binutils.
> -
> -GDB, GAS, and the GNU binutils are free software; you can redistribute
> -them and/or modify them 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.
> -
> -GDB, GAS, and the GNU binutils are distributed in the hope that they
> -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 file; see the file COPYING.  If not, write to the Free
> -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
> -
> -#include <stdio.h>
> -#include "ansidecl.h"
> -#include "opcode/ppc.h"
> -
> -/* This file holds the PowerPC opcode table.  The opcode table
> -   includes almost all of the extended instruction mnemonics.  This
> -   permits the disassembler to use them, and simplifies the assembler
> -   logic, at the cost of increasing the table size.  The table is
> -   strictly constant data, so the compiler should be able to put it in
> -   the .text section.
> -
> -   This file also holds the operand table.  All knowledge about
> -   inserting operands into instructions and vice-versa is kept in this
> -   file.  */
> -
> -/* Local insertion and extraction functions.  */
> -
> -static unsigned long insert_bat PARAMS ((unsigned long, long, const char **));
> -static long extract_bat PARAMS ((unsigned long, int *));
> -static unsigned long insert_bba PARAMS ((unsigned long, long, const char **));
> -static long extract_bba PARAMS ((unsigned long, int *));
> -static unsigned long insert_bd PARAMS ((unsigned long, long, const char **));
> -static long extract_bd PARAMS ((unsigned long, int *));
> -static unsigned long insert_bdm PARAMS ((unsigned long, long, const char **));
> -static long extract_bdm PARAMS ((unsigned long, int *));
> -static unsigned long insert_bdp PARAMS ((unsigned long, long, const char **));
> -static long extract_bdp PARAMS ((unsigned long, int *));
> -static unsigned long insert_bo PARAMS ((unsigned long, long, const char **));
> -static long extract_bo PARAMS ((unsigned long, int *));
> -static unsigned long insert_boe PARAMS ((unsigned long, long, const char **));
> -static long extract_boe PARAMS ((unsigned long, int *));
> -static unsigned long insert_ds PARAMS ((unsigned long, long, const char **));
> -static long extract_ds PARAMS ((unsigned long, int *));
> -static unsigned long insert_li PARAMS ((unsigned long, long, const char **));
> -static long extract_li PARAMS ((unsigned long, int *));
> -static unsigned long insert_mbe PARAMS ((unsigned long, long, const char **));
> -static long extract_mbe PARAMS ((unsigned long, int *));
> -static unsigned long insert_mb6 PARAMS ((unsigned long, long, const char **));
> -static long extract_mb6 PARAMS ((unsigned long, int *));
> -static unsigned long insert_nb PARAMS ((unsigned long, long, const char **));
> -static long extract_nb PARAMS ((unsigned long, int *));
> -static unsigned long insert_nsi PARAMS ((unsigned long, long, const char **));
> -static long extract_nsi PARAMS ((unsigned long, int *));
> -static unsigned long insert_ral PARAMS ((unsigned long, long, const char **));
> -static unsigned long insert_ram PARAMS ((unsigned long, long, const char **));
> -static unsigned long insert_ras PARAMS ((unsigned long, long, const char **));
> -static unsigned long insert_rbs PARAMS ((unsigned long, long, const char **));
> -static long extract_rbs PARAMS ((unsigned long, int *));
> -static unsigned long insert_sh6 PARAMS ((unsigned long, long, const char **));
> -static long extract_sh6 PARAMS ((unsigned long, int *));
> -static unsigned long insert_spr PARAMS ((unsigned long, long, const char **));
> -static long extract_spr PARAMS ((unsigned long, int *));
> -static unsigned long insert_tbr PARAMS ((unsigned long, long, const char **));
> -static long extract_tbr PARAMS ((unsigned long, int *));
> -
> -/* The operands table.
> -
> -   The fields are bits, shift, signed, insert, extract, flags.  */
> -
> -const struct powerpc_operand powerpc_operands[] =
> -{
> -  /* The zero index is used to indicate the end of the list of
> -     operands.  */
> -#define UNUSED (0)
> -  { 0, 0, 0, 0, 0 },
> -
> -  /* The BA field in an XL form instruction.  */
> -#define BA (UNUSED + 1)
> -#define BA_MASK (0x1f << 16)
> -  { 5, 16, 0, 0, PPC_OPERAND_CR },
> -
> -  /* The BA field in an XL form instruction when it must be the same
> -     as the BT field in the same instruction.  */
> -#define BAT (BA + 1)
> -  { 5, 16, insert_bat, extract_bat, PPC_OPERAND_FAKE },
> -
> -  /* The BB field in an XL form instruction.  */
> -#define BB (BAT + 1)
> -#define BB_MASK (0x1f << 11)
> -  { 5, 11, 0, 0, PPC_OPERAND_CR },
> -
> -  /* The BB field in an XL form instruction when it must be the same
> -     as the BA field in the same instruction.  */
> -#define BBA (BB + 1)
> -  { 5, 11, insert_bba, extract_bba, PPC_OPERAND_FAKE },
> -
> -  /* The BD field in a B form instruction.  The lower two bits are
> -     forced to zero.  */
> -#define BD (BBA + 1)
> -  { 16, 0, insert_bd, extract_bd, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
> -
> -  /* The BD field in a B form instruction when absolute addressing is
> -     used.  */
> -#define BDA (BD + 1)
> -  { 16, 0, insert_bd, extract_bd, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
> -
> -  /* The BD field in a B form instruction when the - modifier is used.
> -     This sets the y bit of the BO field appropriately.  */
> -#define BDM (BDA + 1)
> -  { 16, 0, insert_bdm, extract_bdm,
> -      PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
> -
> -  /* The BD field in a B form instruction when the - modifier is used
> -     and absolute address is used.  */
> -#define BDMA (BDM + 1)
> -  { 16, 0, insert_bdm, extract_bdm,
> -      PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
> -
> -  /* The BD field in a B form instruction when the + modifier is used.
> -     This sets the y bit of the BO field appropriately.  */
> -#define BDP (BDMA + 1)
> -  { 16, 0, insert_bdp, extract_bdp,
> -      PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
> -
> -  /* The BD field in a B form instruction when the + modifier is used
> -     and absolute addressing is used.  */
> -#define BDPA (BDP + 1)
> -  { 16, 0, insert_bdp, extract_bdp,
> -      PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
> -
> -  /* The BF field in an X or XL form instruction.  */
> -#define BF (BDPA + 1)
> -  { 3, 23, 0, 0, PPC_OPERAND_CR },
> -
> -  /* An optional BF field.  This is used for comparison instructions,
> -     in which an omitted BF field is taken as zero.  */
> -#define OBF (BF + 1)
> -  { 3, 23, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
> -
> -  /* The BFA field in an X or XL form instruction.  */
> -#define BFA (OBF + 1)
> -  { 3, 18, 0, 0, PPC_OPERAND_CR },
> -
> -  /* The BI field in a B form or XL form instruction.  */
> -#define BI (BFA + 1)
> -#define BI_MASK (0x1f << 16)
> -  { 5, 16, 0, 0, PPC_OPERAND_CR },
> -
> -  /* The BO field in a B form instruction.  Certain values are
> -     illegal.  */
> -#define BO (BI + 1)
> -#define BO_MASK (0x1f << 21)
> -  { 5, 21, insert_bo, extract_bo, 0 },
> -
> -  /* The BO field in a B form instruction when the + or - modifier is
> -     used.  This is like the BO field, but it must be even.  */
> -#define BOE (BO + 1)
> -  { 5, 21, insert_boe, extract_boe, 0 },
> -
> -  /* The BT field in an X or XL form instruction.  */
> -#define BT (BOE + 1)
> -  { 5, 21, 0, 0, PPC_OPERAND_CR },
> -
> -  /* The condition register number portion of the BI field in a B form
> -     or XL form instruction.  This is used for the extended
> -     conditional branch mnemonics, which set the lower two bits of the
> -     BI field.  This field is optional.  */
> -#define CR (BT + 1)
> -  { 3, 18, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
> -
> -  /* The D field in a D form instruction.  This is a displacement off
> -     a register, and implies that the next operand is a register in
> -     parentheses.  */
> -#define D (CR + 1)
> -  { 16, 0, 0, 0, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
> -
> -  /* The DS field in a DS form instruction.  This is like D, but the
> -     lower two bits are forced to zero.  */
> -#define DS (D + 1)
> -  { 16, 0, insert_ds, extract_ds, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
> -
> -  /* The FL1 field in a POWER SC form instruction.  */
> -#define FL1 (DS + 1)
> -  { 4, 12, 0, 0, 0 },
> -
> -  /* The FL2 field in a POWER SC form instruction.  */
> -#define FL2 (FL1 + 1)
> -  { 3, 2, 0, 0, 0 },
> -
> -  /* The FLM field in an XFL form instruction.  */
> -#define FLM (FL2 + 1)
> -  { 8, 17, 0, 0, 0 },
> -
> -  /* The FRA field in an X or A form instruction.  */
> -#define FRA (FLM + 1)
> -#define FRA_MASK (0x1f << 16)
> -  { 5, 16, 0, 0, PPC_OPERAND_FPR },
> -
> -  /* The FRB field in an X or A form instruction.  */
> -#define FRB (FRA + 1)
> -#define FRB_MASK (0x1f << 11)
> -  { 5, 11, 0, 0, PPC_OPERAND_FPR },
> -
> -  /* The FRC field in an A form instruction.  */
> -#define FRC (FRB + 1)
> -#define FRC_MASK (0x1f << 6)
> -  { 5, 6, 0, 0, PPC_OPERAND_FPR },
> -
> -  /* The FRS field in an X form instruction or the FRT field in a D, X
> -     or A form instruction.  */
> -#define FRS (FRC + 1)
> -#define FRT (FRS)
> -  { 5, 21, 0, 0, PPC_OPERAND_FPR },
> -
> -  /* The FXM field in an XFX instruction.  */
> -#define FXM (FRS + 1)
> -#define FXM_MASK (0xff << 12)
> -  { 8, 12, 0, 0, 0 },
> -
> -  /* The L field in a D or X form instruction.  */
> -#define L (FXM + 1)
> -  { 1, 21, 0, 0, PPC_OPERAND_OPTIONAL },
> -
> -  /* The LEV field in a POWER SC form instruction.  */
> -#define LEV (L + 1)
> -  { 7, 5, 0, 0, 0 },
> -
> -  /* The LI field in an I form instruction.  The lower two bits are
> -     forced to zero.  */
> -#define LI (LEV + 1)
> -  { 26, 0, insert_li, extract_li, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
> -
> -  /* The LI field in an I form instruction when used as an absolute
> -     address.  */
> -#define LIA (LI + 1)
> -  { 26, 0, insert_li, extract_li, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
> -
> -  /* The MB field in an M form instruction.  */
> -#define MB (LIA + 1)
> -#define MB_MASK (0x1f << 6)
> -  { 5, 6, 0, 0, 0 },
> -
> -  /* The ME field in an M form instruction.  */
> -#define ME (MB + 1)
> -#define ME_MASK (0x1f << 1)
> -  { 5, 1, 0, 0, 0 },
> -
> -  /* The MB and ME fields in an M form instruction expressed a single
> -     operand which is a bitmask indicating which bits to select.  This
> -     is a two operand form using PPC_OPERAND_NEXT.  See the
> -     description in opcode/ppc.h for what this means.  */
> -#define MBE (ME + 1)
> -  { 5, 6, 0, 0, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
> -  { 32, 0, insert_mbe, extract_mbe, 0 },
> -
> -  /* The MB or ME field in an MD or MDS form instruction.  The high
> -     bit is wrapped to the low end.  */
> -#define MB6 (MBE + 2)
> -#define ME6 (MB6)
> -#define MB6_MASK (0x3f << 5)
> -  { 6, 5, insert_mb6, extract_mb6, 0 },
> -
> -  /* The NB field in an X form instruction.  The value 32 is stored as
> -     0.  */
> -#define NB (MB6 + 1)
> -  { 6, 11, insert_nb, extract_nb, 0 },
> -
> -  /* The NSI field in a D form instruction.  This is the same as the
> -     SI field, only negated.  */
> -#define NSI (NB + 1)
> -  { 16, 0, insert_nsi, extract_nsi,
> -      PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED },
> -
> -  /* The RA field in an D, DS, X, XO, M, or MDS form instruction.  */
> -#define RA (NSI + 1)
> -#define RA_MASK (0x1f << 16)
> -  { 5, 16, 0, 0, PPC_OPERAND_GPR },
> -
> -  /* The RA field in a D or X form instruction which is an updating
> -     load, which means that the RA field may not be zero and may not
> -     equal the RT field.  */
> -#define RAL (RA + 1)
> -  { 5, 16, insert_ral, 0, PPC_OPERAND_GPR },
> -
> -  /* The RA field in an lmw instruction, which has special value
> -     restrictions.  */
> -#define RAM (RAL + 1)
> -  { 5, 16, insert_ram, 0, PPC_OPERAND_GPR },
> -
> -  /* The RA field in a D or X form instruction which is an updating
> -     store or an updating floating point load, which means that the RA
> -     field may not be zero.  */
> -#define RAS (RAM + 1)
> -  { 5, 16, insert_ras, 0, PPC_OPERAND_GPR },
> -
> -  /* The RB field in an X, XO, M, or MDS form instruction.  */
> -#define RB (RAS + 1)
> -#define RB_MASK (0x1f << 11)
> -  { 5, 11, 0, 0, PPC_OPERAND_GPR },
> -
> -  /* The RB field in an X form instruction when it must be the same as
> -     the RS field in the instruction.  This is used for extended
> -     mnemonics like mr.  */
> -#define RBS (RB + 1)
> -  { 5, 1, insert_rbs, extract_rbs, PPC_OPERAND_FAKE },
> -
> -  /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
> -     instruction or the RT field in a D, DS, X, XFX or XO form
> -     instruction.  */
> -#define RS (RBS + 1)
> -#define RT (RS)
> -#define RT_MASK (0x1f << 21)
> -  { 5, 21, 0, 0, PPC_OPERAND_GPR },
> -
> -  /* The SH field in an X or M form instruction.  */
> -#define SH (RS + 1)
> -#define SH_MASK (0x1f << 11)
> -  { 5, 11, 0, 0, 0 },
> -
> -  /* The SH field in an MD form instruction.  This is split.  */
> -#define SH6 (SH + 1)
> -#define SH6_MASK ((0x1f << 11) | (1 << 1))
> -  { 6, 1, insert_sh6, extract_sh6, 0 },
> -
> -  /* The SI field in a D form instruction.  */
> -#define SI (SH6 + 1)
> -  { 16, 0, 0, 0, PPC_OPERAND_SIGNED },
> -
> -  /* The SI field in a D form instruction when we accept a wide range
> -     of positive values.  */
> -#define SISIGNOPT (SI + 1)
> -  { 16, 0, 0, 0, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
> -
> -  /* The SPR field in an XFX form instruction.  This is flipped--the
> -     lower 5 bits are stored in the upper 5 and vice- versa.  */
> -#define SPR (SISIGNOPT + 1)
> -#define SPR_MASK (0x3ff << 11)
> -  { 10, 11, insert_spr, extract_spr, 0 },
> -
> -  /* The BAT index number in an XFX form m[ft]ibat[lu] instruction.  */
> -#define SPRBAT (SPR + 1)
> -#define SPRBAT_MASK (0x3 << 17)
> -  { 2, 17, 0, 0, 0 },
> -
> -  /* The SPRG register number in an XFX form m[ft]sprg instruction.  */
> -#define SPRG (SPRBAT + 1)
> -#define SPRG_MASK (0x3 << 16)
> -  { 2, 16, 0, 0, 0 },
> -
> -  /* The SR field in an X form instruction.  */
> -#define SR (SPRG + 1)
> -  { 4, 16, 0, 0, 0 },
> -
> -  /* The SV field in a POWER SC form instruction.  */
> -#define SV (SR + 1)
> -  { 14, 2, 0, 0, 0 },
> -
> -  /* The TBR field in an XFX form instruction.  This is like the SPR
> -     field, but it is optional.  */
> -#define TBR (SV + 1)
> -  { 10, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
> -
> -  /* The TO field in a D or X form instruction.  */
> -#define TO (TBR + 1)
> -#define TO_MASK (0x1f << 21)
> -  { 5, 21, 0, 0, 0 },
> -
> -  /* The U field in an X form instruction.  */
> -#define U (TO + 1)
> -  { 4, 12, 0, 0, 0 },
> -
> -  /* The UI field in a D form instruction.  */
> -#define UI (U + 1)
> -  { 16, 0, 0, 0, 0 },
> -};
> -
> -/* The functions used to insert and extract complicated operands.  */
> -
> -/* The BA field in an XL form instruction when it must be the same as
> -   the BT field in the same instruction.  This operand is marked FAKE.
> -   The insertion function just copies the BT field into the BA field,
> -   and the extraction function just checks that the fields are the
> -   same.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_bat (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | (((insn >> 21) & 0x1f) << 16);
> -}
> -
> -static long
> -extract_bat (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if (invalid != (int *) NULL
> -      && ((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
> -    *invalid = 1;
> -  return 0;
> -}
> -
> -/* The BB field in an XL form instruction when it must be the same as
> -   the BA field in the same instruction.  This operand is marked FAKE.
> -   The insertion function just copies the BA field into the BB field,
> -   and the extraction function just checks that the fields are the
> -   same.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_bba (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | (((insn >> 16) & 0x1f) << 11);
> -}
> -
> -static long
> -extract_bba (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if (invalid != (int *) NULL
> -      && ((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f))
> -    *invalid = 1;
> -  return 0;
> -}
> -
> -/* The BD field in a B form instruction.  The lower two bits are
> -   forced to zero.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_bd (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | (value & 0xfffc);
> -}
> -
> -/*ARGSUSED*/
> -static long
> -extract_bd (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if ((insn & 0x8000) != 0)
> -    return (insn & 0xfffc) - 0x10000;
> -  else
> -    return insn & 0xfffc;
> -}
> -
> -/* The BD field in a B form instruction when the - modifier is used.
> -   This modifier means that the branch is not expected to be taken.
> -   We must set the y bit of the BO field to 1 if the offset is
> -   negative.  When extracting, we require that the y bit be 1 and that
> -   the offset be positive, since if the y bit is 0 we just want to
> -   print the normal form of the instruction.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_bdm (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if ((value & 0x8000) != 0)
> -    insn |= 1 << 21;
> -  return insn | (value & 0xfffc);
> -}
> -
> -static long
> -extract_bdm (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if (invalid != (int *) NULL
> -      && ((insn & (1 << 21)) == 0
> -  || (insn & (1 << 15)) == 0))
> -    *invalid = 1;
> -  if ((insn & 0x8000) != 0)
> -    return (insn & 0xfffc) - 0x10000;
> -  else
> -    return insn & 0xfffc;
> -}
> -
> -/* The BD field in a B form instruction when the + modifier is used.
> -   This is like BDM, above, except that the branch is expected to be
> -   taken.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_bdp (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if ((value & 0x8000) == 0)
> -    insn |= 1 << 21;
> -  return insn | (value & 0xfffc);
> -}
> -
> -static long
> -extract_bdp (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if (invalid != (int *) NULL
> -      && ((insn & (1 << 21)) == 0
> -  || (insn & (1 << 15)) != 0))
> -    *invalid = 1;
> -  if ((insn & 0x8000) != 0)
> -    return (insn & 0xfffc) - 0x10000;
> -  else
> -    return insn & 0xfffc;
> -}
> -
> -/* Check for legal values of a BO field.  */
> -
> -static int
> -valid_bo (value)
> -     long value;
> -{
> -  /* Certain encodings have bits that are required to be zero.  These
> -     are (z must be zero, y may be anything):
> -         001zy
> - 011zy
> - 1z00y
> - 1z01y
> - 1z1zz
> -     */
> -  switch (value & 0x14)
> -    {
> -    default:
> -    case 0:
> -      return 1;
> -    case 0x4:
> -      return (value & 0x2) == 0;
> -    case 0x10:
> -      return (value & 0x8) == 0;
> -    case 0x14:
> -      return value == 0x14;
> -    }
> -}
> -
> -/* The BO field in a B form instruction.  Warn about attempts to set
> -   the field to an illegal value.  */
> -
> -static unsigned long
> -insert_bo (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if (errmsg != (const char **) NULL
> -      && ! valid_bo (value))
> -    *errmsg = "invalid conditional option";
> -  return insn | ((value & 0x1f) << 21);
> -}
> -
> -static long
> -extract_bo (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  long value;
> -
> -  value = (insn >> 21) & 0x1f;
> -  if (invalid != (int *) NULL
> -      && ! valid_bo (value))
> -    *invalid = 1;
> -  return value;
> -}
> -
> -/* The BO field in a B form instruction when the + or - modifier is
> -   used.  This is like the BO field, but it must be even.  When
> -   extracting it, we force it to be even.  */
> -
> -static unsigned long
> -insert_boe (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if (errmsg != (const char **) NULL)
> -    {
> -      if (! valid_bo (value))
> - *errmsg = "invalid conditional option";
> -      else if ((value & 1) != 0)
> - *errmsg = "attempt to set y bit when using + or - modifier";
> -    }
> -  return insn | ((value & 0x1f) << 21);
> -}
> -
> -static long
> -extract_boe (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  long value;
> -
> -  value = (insn >> 21) & 0x1f;
> -  if (invalid != (int *) NULL
> -      && ! valid_bo (value))
> -    *invalid = 1;
> -  return value & 0x1e;
> -}
> -
> -/* The DS field in a DS form instruction.  This is like D, but the
> -   lower two bits are forced to zero.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_ds (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | (value & 0xfffc);
> -}
> -
> -/*ARGSUSED*/
> -static long
> -extract_ds (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if ((insn & 0x8000) != 0)
> -    return (insn & 0xfffc) - 0x10000;
> -  else
> -    return insn & 0xfffc;
> -}
> -
> -/* The LI field in an I form instruction.  The lower two bits are
> -   forced to zero.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_li (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | (value & 0x3fffffc);
> -}
> -
> -/*ARGSUSED*/
> -static long
> -extract_li (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if ((insn & 0x2000000) != 0)
> -    return (insn & 0x3fffffc) - 0x4000000;
> -  else
> -    return insn & 0x3fffffc;
> -}
> -
> -/* The MB and ME fields in an M form instruction expressed as a single
> -   operand which is itself a bitmask.  The extraction function always
> -   marks it as invalid, since we never want to recognize an
> -   instruction which uses a field of this type.  */
> -
> -static unsigned long
> -insert_mbe (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  unsigned long uval;
> -  int mb, me;
> -
> -  uval = value;
> -
> -  if (uval == 0)
> -    {
> -      if (errmsg != (const char **) NULL)
> - *errmsg = "illegal bitmask";
> -      return insn;
> -    }
> -
> -  me = 31;
> -  while ((uval & 1) == 0)
> -    {
> -      uval >>= 1;
> -      --me;
> -    }
> -
> -  mb = me;
> -  uval >>= 1;
> -  while ((uval & 1) != 0)
> -    {
> -      uval >>= 1;
> -      --mb;
> -    }
> -
> -  if (uval != 0)
> -    {
> -      if (errmsg != (const char **) NULL)
> - *errmsg = "illegal bitmask";
> -    }
> -
> -  return insn | (mb << 6) | (me << 1);
> -}
> -
> -static long
> -extract_mbe (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  long ret;
> -  int mb, me;
> -  int i;
> -
> -  if (invalid != (int *) NULL)
> -    *invalid = 1;
> -
> -  ret = 0;
> -  mb = (insn >> 6) & 0x1f;
> -  me = (insn >> 1) & 0x1f;
> -  for (i = mb; i < me; i++)
> -    ret |= 1 << (31 - i);
> -  return ret;
> -}
> -
> -/* The MB or ME field in an MD or MDS form instruction.  The high bit
> -   is wrapped to the low end.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_mb6 (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | ((value & 0x1f) << 6) | (value & 0x20);
> -}
> -
> -/*ARGSUSED*/
> -static long
> -extract_mb6 (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  return ((insn >> 6) & 0x1f) | (insn & 0x20);
> -}
> -
> -/* The NB field in an X form instruction.  The value 32 is stored as
> -   0.  */
> -
> -static unsigned long
> -insert_nb (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if (value < 0 || value > 32)
> -    *errmsg = "value out of range";
> -  if (value == 32)
> -    value = 0;
> -  return insn | ((value & 0x1f) << 11);
> -}
> -
> -/*ARGSUSED*/
> -static long
> -extract_nb (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  long ret;
> -
> -  ret = (insn >> 11) & 0x1f;
> -  if (ret == 0)
> -    ret = 32;
> -  return ret;
> -}
> -
> -/* The NSI field in a D form instruction.  This is the same as the SI
> -   field, only negated.  The extraction function always marks it as
> -   invalid, since we never want to recognize an instruction which uses
> -   a field of this type.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_nsi (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | ((- value) & 0xffff);
> -}
> -
> -static long
> -extract_nsi (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if (invalid != (int *) NULL)
> -    *invalid = 1;
> -  if ((insn & 0x8000) != 0)
> -    return - ((insn & 0xffff) - 0x10000);
> -  else
> -    return - (insn & 0xffff);
> -}
> -
> -/* The RA field in a D or X form instruction which is an updating
> -   load, which means that the RA field may not be zero and may not
> -   equal the RT field.  */
> -
> -static unsigned long
> -insert_ral (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if (value == 0
> -      || value == ((insn >> 21) & 0x1f))
> -    *errmsg = "invalid register operand when updating";
> -  return insn | ((value & 0x1f) << 16);
> -}
> -
> -/* The RA field in an lmw instruction, which has special value
> -   restrictions.  */
> -
> -static unsigned long
> -insert_ram (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if (value >= ((insn >> 21) & 0x1f))
> -    *errmsg = "index register in load range";
> -  return insn | ((value & 0x1f) << 16);
> -}
> -
> -/* The RA field in a D or X form instruction which is an updating
> -   store or an updating floating point load, which means that the RA
> -   field may not be zero.  */
> -
> -static unsigned long
> -insert_ras (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if (value == 0)
> -    *errmsg = "invalid register operand when updating";
> -  return insn | ((value & 0x1f) << 16);
> -}
> -
> -/* The RB field in an X form instruction when it must be the same as
> -   the RS field in the instruction.  This is used for extended
> -   mnemonics like mr.  This operand is marked FAKE.  The insertion
> -   function just copies the BT field into the BA field, and the
> -   extraction function just checks that the fields are the same.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_rbs (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | (((insn >> 21) & 0x1f) << 11);
> -}
> -
> -static long
> -extract_rbs (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  if (invalid != (int *) NULL
> -      && ((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f))
> -    *invalid = 1;
> -  return 0;
> -}
> -
> -/* The SH field in an MD form instruction.  This is split.  */
> -
> -/*ARGSUSED*/
> -static unsigned long
> -insert_sh6 (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
> -}
> -
> -/*ARGSUSED*/
> -static long
> -extract_sh6 (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
> -}
> -
> -/* The SPR field in an XFX form instruction.  This is flipped--the
> -   lower 5 bits are stored in the upper 5 and vice- versa.  */
> -
> -static unsigned long
> -insert_spr (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
> -}
> -
> -static long
> -extract_spr (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
> -}
> -
> -/* The TBR field in an XFX instruction.  This is just like SPR, but it
> -   is optional.  When TBR is omitted, it must be inserted as 268 (the
> -   magic number of the TB register).  These functions treat 0
> -   (indicating an omitted optional operand) as 268.  This means that
> -   ``mftb 4,0'' is not handled correctly.  This does not matter very
> -   much, since the architecture manual does not define mftb as
> -   accepting any values other than 268 or 269.  */
> -
> -#define TB (268)
> -
> -static unsigned long
> -insert_tbr (insn, value, errmsg)
> -     unsigned long insn;
> -     long value;
> -     const char **errmsg;
> -{
> -  if (value == 0)
> -    value = TB;
> -  return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
> -}
> -
> -static long
> -extract_tbr (insn, invalid)
> -     unsigned long insn;
> -     int *invalid;
> -{
> -  long ret;
> -
> -  ret = ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
> -  if (ret == TB)
> -    ret = 0;
> -  return ret;
> -}
> -
> -/* Macros used to form opcodes.  */
> -
> -/* The main opcode.  */
> -#define OP(x) (((x) & 0x3f) << 26)
> -#define OP_MASK OP (0x3f)
> -
> -/* The main opcode combined with a trap code in the TO field of a D
> -   form instruction.  Used for extended mnemonics for the trap
> -   instructions.  */
> -#define OPTO(x,to) (OP (x) | (((to) & 0x1f) << 21))
> -#define OPTO_MASK (OP_MASK | TO_MASK)
> -
> -/* The main opcode combined with a comparison size bit in the L field
> -   of a D form or X form instruction.  Used for extended mnemonics for
> -   the comparison instructions.  */
> -#define OPL(x,l) (OP (x) | (((l) & 1) << 21))
> -#define OPL_MASK OPL (0x3f,1)
> -
> -/* An A form instruction.  */
> -#define A(op, xop, rc) (OP (op) | (((xop) & 0x1f) << 1) | ((rc) & 1))
> -#define A_MASK A (0x3f, 0x1f, 1)
> -
> -/* An A_MASK with the FRB field fixed.  */
> -#define AFRB_MASK (A_MASK | FRB_MASK)
> -
> -/* An A_MASK with the FRC field fixed.  */
> -#define AFRC_MASK (A_MASK | FRC_MASK)
> -
> -/* An A_MASK with the FRA and FRC fields fixed.  */
> -#define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
> -
> -/* A B form instruction.  */
> -#define B(op, aa, lk) (OP (op) | (((aa) & 1) << 1) | ((lk) & 1))
> -#define B_MASK B (0x3f, 1, 1)
> -
> -/* A B form instruction setting the BO field.  */
> -#define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | (((bo) & 0x1f) << 21))
> -#define BBO_MASK BBO (0x3f, 0x1f, 1, 1)
> -
> -/* A BBO_MASK with the y bit of the BO field removed.  This permits
> -   matching a conditional branch regardless of the setting of the y
> -   bit.  */
> -#define Y_MASK (1 << 21)
> -#define BBOY_MASK (BBO_MASK &~ Y_MASK)
> -
> -/* A B form instruction setting the BO field and the condition bits of
> -   the BI field.  */
> -#define BBOCB(op, bo, cb, aa, lk) \
> -  (BBO ((op), (bo), (aa), (lk)) | (((cb) & 0x3) << 16))
> -#define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1)
> -
> -/* A BBOCB_MASK with the y bit of the BO field removed.  */
> -#define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK)
> -
> -/* A BBOYCB_MASK in which the BI field is fixed.  */
> -#define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)
> -
> -/* The main opcode mask with the RA field clear.  */
> -#define DRA_MASK (OP_MASK | RA_MASK)
> -
> -/* A DS form instruction.  */
> -#define DSO(op, xop) (OP (op) | ((xop) & 0x3))
> -#define DS_MASK DSO (0x3f, 3)
> -
> -/* An M form instruction.  */
> -#define M(op, rc) (OP (op) | ((rc) & 1))
> -#define M_MASK M (0x3f, 1)
> -
> -/* An M form instruction with the ME field specified.  */
> -#define MME(op, me, rc) (M ((op), (rc)) | (((me) & 0x1f) << 1))
> -
> -/* An M_MASK with the MB and ME fields fixed.  */
> -#define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)
> -
> -/* An M_MASK with the SH and ME fields fixed.  */
> -#define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)
> -
> -/* An MD form instruction.  */
> -#define MD(op, xop, rc) (OP (op) | (((xop) & 0x7) << 2) | ((rc) & 1))
> -#define MD_MASK MD (0x3f, 0x7, 1)
> -
> -/* An MD_MASK with the MB field fixed.  */
> -#define MDMB_MASK (MD_MASK | MB6_MASK)
> -
> -/* An MD_MASK with the SH field fixed.  */
> -#define MDSH_MASK (MD_MASK | SH6_MASK)
> -
> -/* An MDS form instruction.  */
> -#define MDS(op, xop, rc) (OP (op) | (((xop) & 0xf) << 1) | ((rc) & 1))
> -#define MDS_MASK MDS (0x3f, 0xf, 1)
> -
> -/* An MDS_MASK with the MB field fixed.  */
> -#define MDSMB_MASK (MDS_MASK | MB6_MASK)
> -
> -/* An SC form instruction.  */
> -#define SC(op, sa, lk) (OP (op) | (((sa) & 1) << 1) | ((lk) & 1))
> -#define SC_MASK (OP_MASK | (0x3ff << 16) | (1 << 1) | 1)
> -
> -/* An X form instruction.  */
> -#define X(op, xop) (OP (op) | (((xop) & 0x3ff) << 1))
> -
> -/* An X form instruction with the RC bit specified.  */
> -#define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
> -
> -/* The mask for an X form instruction.  */
> -#define X_MASK XRC (0x3f, 0x3ff, 1)
> -
> -/* An X_MASK with the RA field fixed.  */
> -#define XRA_MASK (X_MASK | RA_MASK)
> -
> -/* An X_MASK with the RB field fixed.  */
> -#define XRB_MASK (X_MASK | RB_MASK)
> -
> -/* An X_MASK with the RT field fixed.  */
> -#define XRT_MASK (X_MASK | RT_MASK)
> -
> -/* An X_MASK with the RA and RB fields fixed.  */
> -#define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
> -
> -/* An X_MASK with the RT and RA fields fixed.  */
> -#define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK)
> -
> -/* An X form comparison instruction.  */
> -#define XCMPL(op, xop, l) (X ((op), (xop)) | (((l) & 1) << 21))
> -
> -/* The mask for an X form comparison instruction.  */
> -#define XCMP_MASK (X_MASK | (1 << 22))
> -
> -/* The mask for an X form comparison instruction with the L field
> -   fixed.  */
> -#define XCMPL_MASK (XCMP_MASK | (1 << 21))
> -
> -/* An X form trap instruction with the TO field specified.  */
> -#define XTO(op, xop, to) (X ((op), (xop)) | (((to) & 0x1f) << 21))
> -#define XTO_MASK (X_MASK | TO_MASK)
> -
> -/* An XFL form instruction.  */
> -#define XFL(op, xop, rc) (OP (op) | (((xop) & 0x3ff) << 1) | ((rc) & 1))
> -#define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (1 << 25) | (1 << 16))
> -
> -/* An XL form instruction with the LK field set to 0.  */
> -#define XL(op, xop) (OP (op) | (((xop) & 0x3ff) << 1))
> -
> -/* An XL form instruction which uses the LK field.  */
> -#define XLLK(op, xop, lk) (XL ((op), (xop)) | ((lk) & 1))
> -
> -/* The mask for an XL form instruction.  */
> -#define XL_MASK XLLK (0x3f, 0x3ff, 1)
> -
> -/* An XL form instruction which explicitly sets the BO field.  */
> -#define XLO(op, bo, xop, lk) \
> -  (XLLK ((op), (xop), (lk)) | (((bo) & 0x1f) << 21))
> -#define XLO_MASK (XL_MASK | BO_MASK)
> -
> -/* An XL form instruction which explicitly sets the y bit of the BO
> -   field.  */
> -#define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | (((y) & 1) << 21))
> -#define XLYLK_MASK (XL_MASK | Y_MASK)
> -
> -/* An XL form instruction which sets the BO field and the condition
> -   bits of the BI field.  */
> -#define XLOCB(op, bo, cb, xop, lk) \
> -  (XLO ((op), (bo), (xop), (lk)) | (((cb) & 3) << 16))
> -#define XLOCB_MASK XLOCB (0x3f, 0x1f, 0x3, 0x3ff, 1)
> -
> -/* An XL_MASK or XLYLK_MASK or XLOCB_MASK with the BB field fixed.  */
> -#define XLBB_MASK (XL_MASK | BB_MASK)
> -#define XLYBB_MASK (XLYLK_MASK | BB_MASK)
> -#define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK)
> -
> -/* An XL_MASK with the BO and BB fields fixed.  */
> -#define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK)
> -
> -/* An XL_MASK with the BO, BI and BB fields fixed.  */
> -#define XLBOBIBB_MASK (XL_MASK | BO_MASK | BI_MASK | BB_MASK)
> -
> -/* An XO form instruction.  */
> -#define XO(op, xop, oe, rc) \
> -  (OP (op) | (((xop) & 0x1ff) << 1) | (((oe) & 1) << 10) | ((rc) & 1))
> -#define XO_MASK XO (0x3f, 0x1ff, 1, 1)
> -
> -/* An XO_MASK with the RB field fixed.  */
> -#define XORB_MASK (XO_MASK | RB_MASK)
> -
> -/* An XS form instruction.  */
> -#define XS(op, xop, rc) (OP (op) | (((xop) & 0x1ff) << 2) | ((rc) & 1))
> -#define XS_MASK XS (0x3f, 0x1ff, 1)
> -
> -/* A mask for the FXM version of an XFX form instruction.  */
> -#define XFXFXM_MASK (X_MASK | (1 << 20) | (1 << 11))
> -
> -/* An XFX form instruction with the FXM field filled in.  */
> -#define XFXM(op, xop, fxm) \
> -  (X ((op), (xop)) | (((fxm) & 0xff) << 12))
> -
> -/* An XFX form instruction with the SPR field filled in.  */
> -#define XSPR(op, xop, spr) \
> -  (X ((op), (xop)) | (((spr) & 0x1f) << 16) | (((spr) & 0x3e0) << 6))
> -#define XSPR_MASK (X_MASK | SPR_MASK)
> -
> -/* An XFX form instruction with the SPR field filled in except for the
> -   SPRBAT field.  */
> -#define XSPRBAT_MASK (XSPR_MASK &~ SPRBAT_MASK)
> -
> -/* An XFX form instruction with the SPR field filled in except for the
> -   SPRG field.  */
> -#define XSPRG_MASK (XSPR_MASK &~ SPRG_MASK)
> -
> -/* The BO encodings used in extended conditional branch mnemonics.  */
> -#define BODNZF (0x0)
> -#define BODNZFP (0x1)
> -#define BODZF (0x2)
> -#define BODZFP (0x3)
> -#define BOF (0x4)
> -#define BOFP (0x5)
> -#define BODNZT (0x8)
> -#define BODNZTP (0x9)
> -#define BODZT (0xa)
> -#define BODZTP (0xb)
> -#define BOT (0xc)
> -#define BOTP (0xd)
> -#define BODNZ (0x10)
> -#define BODNZP (0x11)
> -#define BODZ (0x12)
> -#define BODZP (0x13)
> -#define BOU (0x14)
> -
> -/* The BI condition bit encodings used in extended conditional branch
> -   mnemonics.  */
> -#define CBLT (0)
> -#define CBGT (1)
> -#define CBEQ (2)
> -#define CBSO (3)
> -
> -/* The TO encodings used in extended trap mnemonics.  */
> -#define TOLGT (0x1)
> -#define TOLLT (0x2)
> -#define TOEQ (0x4)
> -#define TOLGE (0x5)
> -#define TOLNL (0x5)
> -#define TOLLE (0x6)
> -#define TOLNG (0x6)
> -#define TOGT (0x8)
> -#define TOGE (0xc)
> -#define TONL (0xc)
> -#define TOLT (0x10)
> -#define TOLE (0x14)
> -#define TONG (0x14)
> -#define TONE (0x18)
> -#define TOU (0x1f)
> -
> -/* Smaller names for the flags so each entry in the opcodes table will
> -   fit on a single line.  */
> -#undef PPC
> -#define PPC PPC_OPCODE_PPC | PPC_OPCODE_ANY
> -#define PPCCOM PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
> -#define PPC32 PPC_OPCODE_PPC | PPC_OPCODE_32 | PPC_OPCODE_ANY
> -#define PPC64 PPC_OPCODE_PPC | PPC_OPCODE_64 | PPC_OPCODE_ANY
> -#define PPCONLY PPC_OPCODE_PPC
> -#define POWER PPC_OPCODE_POWER | PPC_OPCODE_ANY
> -#define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_ANY
> -#define POWER32 PPC_OPCODE_POWER | PPC_OPCODE_ANY | PPC_OPCODE_32
> -#define COM PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
> -#define COM32 PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY | PPC_OPCODE_32
> -#define M601 PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_ANY
> -#define PWRCOM PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
> -#define MFDEC1 PPC_OPCODE_POWER
> -#define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601
> -
> -/* The opcode table.
> -
> -   The format of the opcode table is:
> -
> -   NAME     OPCODE MASK FLAGS { OPERANDS }
> -
> -   NAME is the name of the instruction.
> -   OPCODE is the instruction opcode.
> -   MASK is the opcode mask; this is used to tell the disassembler
> -     which bits in the actual opcode must match OPCODE.
> -   FLAGS are flags indicated what processors support the instruction.
> -   OPERANDS is the list of operands.
> -
> -   The disassembler reads the table in order and prints the first
> -   instruction which matches, so this table is sorted to put more
> -   specific instructions before more general instructions.  It is also
> -   sorted by major opcode.  */
> -
> -const struct powerpc_opcode powerpc_opcodes[] = {
> -{ "tdlgti",  OPTO(2,TOLGT), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdllti",  OPTO(2,TOLLT), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdeqi",   OPTO(2,TOEQ), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdlgei",  OPTO(2,TOLGE), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdlnli",  OPTO(2,TOLNL), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdllei",  OPTO(2,TOLLE), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdlngi",  OPTO(2,TOLNG), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdgti",   OPTO(2,TOGT), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdgei",   OPTO(2,TOGE), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdnli",   OPTO(2,TONL), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdlti",   OPTO(2,TOLT), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdlei",   OPTO(2,TOLE), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdngi",   OPTO(2,TONG), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdnei",   OPTO(2,TONE), OPTO_MASK, PPC64, { RA, SI } },
> -{ "tdi",     OP(2), OP_MASK, PPC64, { TO, RA, SI } },
> -
> -{ "twlgti",  OPTO(3,TOLGT), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tlgti",   OPTO(3,TOLGT), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twllti",  OPTO(3,TOLLT), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tllti",   OPTO(3,TOLLT), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "tweqi",   OPTO(3,TOEQ), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "teqi",    OPTO(3,TOEQ), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twlgei",  OPTO(3,TOLGE), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tlgei",   OPTO(3,TOLGE), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twlnli",  OPTO(3,TOLNL), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tlnli",   OPTO(3,TOLNL), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twllei",  OPTO(3,TOLLE), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tllei",   OPTO(3,TOLLE), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twlngi",  OPTO(3,TOLNG), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tlngi",   OPTO(3,TOLNG), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twgti",   OPTO(3,TOGT), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tgti",    OPTO(3,TOGT), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twgei",   OPTO(3,TOGE), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tgei",    OPTO(3,TOGE), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twnli",   OPTO(3,TONL), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tnli",    OPTO(3,TONL), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twlti",   OPTO(3,TOLT), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tlti",    OPTO(3,TOLT), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twlei",   OPTO(3,TOLE), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tlei",    OPTO(3,TOLE), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twngi",   OPTO(3,TONG), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tngi",    OPTO(3,TONG), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twnei",   OPTO(3,TONE), OPTO_MASK, PPCCOM, { RA, SI } },
> -{ "tnei",    OPTO(3,TONE), OPTO_MASK, PWRCOM, { RA, SI } },
> -{ "twi",     OP(3), OP_MASK, PPCCOM, { TO, RA, SI } },
> -{ "ti",      OP(3), OP_MASK, PWRCOM, { TO, RA, SI } },
> -
> -{ "mulli",   OP(7), OP_MASK, PPCCOM, { RT, RA, SI } },
> -{ "muli",    OP(7), OP_MASK, PWRCOM, { RT, RA, SI } },
> -
> -{ "subfic",  OP(8), OP_MASK, PPCCOM, { RT, RA, SI } },
> -{ "sfi",     OP(8), OP_MASK, PWRCOM, { RT, RA, SI } },
> -
> -{ "dozi",    OP(9), OP_MASK, M601, { RT, RA, SI } },
> -
> -{ "cmplwi",  OPL(10,0), OPL_MASK, PPCCOM, { OBF, RA, UI } },
> -{ "cmpldi",  OPL(10,1), OPL_MASK, PPC64, { OBF, RA, UI } },
> -{ "cmpli",   OP(10), OP_MASK, PPCONLY, { BF, L, RA, UI } },
> -{ "cmpli",   OP(10), OP_MASK, PWRCOM, { BF, RA, UI } },
> -
> -{ "cmpwi",   OPL(11,0), OPL_MASK, PPCCOM, { OBF, RA, SI } },
> -{ "cmpdi",   OPL(11,1), OPL_MASK, PPC64, { OBF, RA, SI } },
> -{ "cmpi",    OP(11), OP_MASK, PPCONLY, { BF, L, RA, SI } },
> -{ "cmpi",    OP(11), OP_MASK, PWRCOM, { BF, RA, SI } },
> -
> -{ "addic",   OP(12), OP_MASK, PPCCOM, { RT, RA, SI } },
> -{ "ai",     OP(12), OP_MASK, PWRCOM, { RT, RA, SI } },
> -{ "subic",   OP(12), OP_MASK, PPCCOM, { RT, RA, NSI } },
> -
> -{ "addic.",  OP(13), OP_MASK, PPCCOM, { RT, RA, SI } },
> -{ "ai.",     OP(13), OP_MASK, PWRCOM, { RT, RA, SI } },
> -{ "subic.",  OP(13), OP_MASK, PPCCOM, { RT, RA, NSI } },
> -
> -{ "li",     OP(14), DRA_MASK, PPCCOM, { RT, SI } },
> -{ "lil",     OP(14), DRA_MASK, PWRCOM, { RT, SI } },
> -{ "addi",    OP(14), OP_MASK, PPCCOM, { RT, RA, SI } },
> -{ "cal",     OP(14), OP_MASK, PWRCOM, { RT, D, RA } },
> -{ "subi",    OP(14), OP_MASK, PPCCOM, { RT, RA, NSI } },
> -{ "la",     OP(14), OP_MASK, PPCCOM, { RT, D, RA } },
> -
> -{ "lis",     OP(15), DRA_MASK, PPCCOM, { RT, SISIGNOPT } },
> -{ "liu",     OP(15), DRA_MASK, PWRCOM, { RT, SISIGNOPT } },
> -{ "addis",   OP(15), OP_MASK, PPCCOM, { RT,RA,SISIGNOPT } },
> -{ "cau",     OP(15), OP_MASK, PWRCOM, { RT,RA,SISIGNOPT } },
> -{ "subis",   OP(15), OP_MASK, PPCCOM, { RT, RA, NSI } },
> -
> -{ "bdnz-",   BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BDM } },
> -{ "bdnz+",   BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BDP } },
> -{ "bdnz",    BBO(16,BODNZ,0,0), BBOYBI_MASK, PPCCOM, { BD } },
> -{ "bdn",     BBO(16,BODNZ,0,0), BBOYBI_MASK, PWRCOM, { BD } },
> -{ "bdnzl-",  BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BDM } },
> -{ "bdnzl+",  BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BDP } },
> -{ "bdnzl",   BBO(16,BODNZ,0,1), BBOYBI_MASK, PPCCOM, { BD } },
> -{ "bdnl",    BBO(16,BODNZ,0,1), BBOYBI_MASK, PWRCOM, { BD } },
> -{ "bdnza-",  BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDMA } },
> -{ "bdnza+",  BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDPA } },
> -{ "bdnza",   BBO(16,BODNZ,1,0), BBOYBI_MASK, PPCCOM, { BDA } },
> -{ "bdna",    BBO(16,BODNZ,1,0), BBOYBI_MASK, PWRCOM, { BDA } },
> -{ "bdnzla-", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDMA } },
> -{ "bdnzla+", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDPA } },
> -{ "bdnzla",  BBO(16,BODNZ,1,1), BBOYBI_MASK, PPCCOM, { BDA } },
> -{ "bdnla",   BBO(16,BODNZ,1,1), BBOYBI_MASK, PWRCOM, { BDA } },
> -{ "bdz-",    BBO(16,BODZ,0,0),  BBOYBI_MASK, PPC, { BDM } },
> -{ "bdz+",    BBO(16,BODZ,0,0),  BBOYBI_MASK, PPC, { BDP } },
> -{ "bdz",     BBO(16,BODZ,0,0),  BBOYBI_MASK, COM, { BD } },
> -{ "bdzl-",   BBO(16,BODZ,0,1),  BBOYBI_MASK, PPC, { BDM } },
> -{ "bdzl+",   BBO(16,BODZ,0,1),  BBOYBI_MASK, PPC, { BDP } },
> -{ "bdzl",    BBO(16,BODZ,0,1),  BBOYBI_MASK, COM, { BD } },
> -{ "bdza-",   BBO(16,BODZ,1,0),  BBOYBI_MASK, PPC, { BDMA } },
> -{ "bdza+",   BBO(16,BODZ,1,0),  BBOYBI_MASK, PPC, { BDPA } },
> -{ "bdza",    BBO(16,BODZ,1,0),  BBOYBI_MASK, COM, { BDA } },
> -{ "bdzla-",  BBO(16,BODZ,1,1),  BBOYBI_MASK, PPC, { BDMA } },
> -{ "bdzla+",  BBO(16,BODZ,1,1),  BBOYBI_MASK, PPC, { BDPA } },
> -{ "bdzla",   BBO(16,BODZ,1,1),  BBOYBI_MASK, COM, { BDA } },
> -{ "blt-",    BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "blt+",    BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "blt",     BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bltl-",   BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bltl+",   BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bltl",    BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "blta-",   BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "blta+",   BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "blta",    BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bltla-",  BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bltla+",  BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bltla",   BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bgt-",    BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bgt+",    BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bgt",     BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bgtl-",   BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bgtl+",   BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bgtl",    BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bgta-",   BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bgta+",   BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bgta",    BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bgtla-",  BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bgtla+",  BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bgtla",   BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "beq-",    BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "beq+",    BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "beq",     BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "beql-",   BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "beql+",   BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "beql",    BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "beqa-",   BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "beqa+",   BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "beqa",    BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "beqla-",  BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "beqla+",  BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "beqla",   BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bso-",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bso+",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bso",     BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bsol-",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bsol+",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bsol",    BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bsoa-",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bsoa+",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bsoa",    BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bsola-",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bsola+",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bsola",   BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bun-",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bun+",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bun",     BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPCCOM, { CR, BD } },
> -{ "bunl-",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bunl+",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bunl",    BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPCCOM, { CR, BD } },
> -{ "buna-",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "buna+",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "buna",    BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPCCOM, { CR, BDA } },
> -{ "bunla-",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bunla+",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bunla",   BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPCCOM, { CR, BDA } },
> -{ "bge-",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bge+",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bge",     BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bgel-",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bgel+",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bgel",    BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bgea-",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bgea+",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bgea",    BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bgela-",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bgela+",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bgela",   BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bnl-",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bnl+",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bnl",     BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bnll-",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bnll+",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bnll",    BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bnla-",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnla+",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnla",    BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bnlla-",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnlla+",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnlla",   BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "ble-",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "ble+",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "ble",     BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "blel-",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "blel+",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "blel",    BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "blea-",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "blea+",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "blea",    BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "blela-",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "blela+",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "blela",   BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bng-",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bng+",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bng",     BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bngl-",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bngl+",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bngl",    BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bnga-",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnga+",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnga",    BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bngla-",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bngla+",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bngla",   BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bne-",    BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bne+",    BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bne",     BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bnel-",   BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bnel+",   BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bnel",    BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bnea-",   BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnea+",   BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnea",    BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bnela-",  BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnela+",  BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnela",   BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bns-",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bns+",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bns",     BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bnsl-",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bnsl+",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bnsl",    BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, COM, { CR, BD } },
> -{ "bnsa-",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnsa+",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnsa",    BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bnsla-",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnsla+",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnsla",   BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, COM, { CR, BDA } },
> -{ "bnu-",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bnu+",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bnu",     BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPCCOM, { CR, BD } },
> -{ "bnul-",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
> -{ "bnul+",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
> -{ "bnul",    BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPCCOM, { CR, BD } },
> -{ "bnua-",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnua+",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnua",    BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPCCOM, { CR, BDA } },
> -{ "bnula-",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
> -{ "bnula+",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
> -{ "bnula",   BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPCCOM, { CR, BDA } },
> -{ "bdnzt-",  BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bdnzt+",  BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bdnzt",   BBO(16,BODNZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bdnztl",  BBO(16,BODNZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bdnzta",  BBO(16,BODNZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bdnzf-",  BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bdnzf+",  BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bdnzf",   BBO(16,BODNZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bdnzfl",  BBO(16,BODNZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bdnzfa",  BBO(16,BODNZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bt-",     BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bt+",     BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bt",     BBO(16,BOT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bbt",     BBO(16,BOT,0,0), BBOY_MASK, PWRCOM, { BI, BD } },
> -{ "btl-",    BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BDM } },
> -{ "btl+",    BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BDP } },
> -{ "btl",     BBO(16,BOT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bbtl",    BBO(16,BOT,0,1), BBOY_MASK, PWRCOM, { BI, BD } },
> -{ "bta-",    BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bta+",    BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bta",     BBO(16,BOT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bbta",    BBO(16,BOT,1,0), BBOY_MASK, PWRCOM, { BI, BDA } },
> -{ "btla-",   BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "btla+",   BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "btla",    BBO(16,BOT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bbtla",   BBO(16,BOT,1,1), BBOY_MASK, PWRCOM, { BI, BDA } },
> -{ "bf-",     BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bf+",     BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bf",     BBO(16,BOF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bbf",     BBO(16,BOF,0,0), BBOY_MASK, PWRCOM, { BI, BD } },
> -{ "bfl-",    BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bfl+",    BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bfl",     BBO(16,BOF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bbfl",    BBO(16,BOF,0,1), BBOY_MASK, PWRCOM, { BI, BD } },
> -{ "bfa-",    BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bfa+",    BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bfa",     BBO(16,BOF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bbfa",    BBO(16,BOF,1,0), BBOY_MASK, PWRCOM, { BI, BDA } },
> -{ "bfla-",   BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bfla+",   BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bfla",    BBO(16,BOF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bbfla",   BBO(16,BOF,1,1), BBOY_MASK, PWRCOM, { BI, BDA } },
> -{ "bdzt-",   BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bdzt+",   BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bdzt",    BBO(16,BODZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bdztl-",  BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bdztl+",  BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bdztl",   BBO(16,BODZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bdzta-",  BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bdzta+",  BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bdzta",   BBO(16,BODZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bdztla",  BBO(16,BODZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bdzf-",   BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bdzf+",   BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bdzf",    BBO(16,BODZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bdzfl-",  BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BDM } },
> -{ "bdzfl+",  BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BDP } },
> -{ "bdzfl",   BBO(16,BODZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
> -{ "bdzfa-",  BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bdzfa+",  BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bdzfa",   BBO(16,BODZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
> -{ "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
> -{ "bdzfla",  BBO(16,BODZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
> -{ "bc-",     B(16,0,0), B_MASK, PPC, { BOE, BI, BDM } },
> -{ "bc+",     B(16,0,0), B_MASK, PPC, { BOE, BI, BDP } },
> -{ "bc",     B(16,0,0), B_MASK, COM, { BO, BI, BD } },
> -{ "bcl-",    B(16,0,1), B_MASK, PPC, { BOE, BI, BDM } },
> -{ "bcl+",    B(16,0,1), B_MASK, PPC, { BOE, BI, BDP } },
> -{ "bcl",     B(16,0,1), B_MASK, COM, { BO, BI, BD } },
> -{ "bca-",    B(16,1,0), B_MASK, PPC, { BOE, BI, BDMA } },
> -{ "bca+",    B(16,1,0), B_MASK, PPC, { BOE, BI, BDPA } },
> -{ "bca",     B(16,1,0), B_MASK, COM, { BO, BI, BDA } },
> -{ "bcla-",   B(16,1,1), B_MASK, PPC, { BOE, BI, BDMA } },
> -{ "bcla+",   B(16,1,1), B_MASK, PPC, { BOE, BI, BDPA } },
> -{ "bcla",    B(16,1,1), B_MASK, COM, { BO, BI, BDA } },
> -
> -{ "sc",      SC(17,1,0), 0xffffffff, PPC, { 0 } },
> -{ "svc",     SC(17,0,0), SC_MASK, POWER, { LEV, FL1, FL2 } },
> -{ "svcl",    SC(17,0,1), SC_MASK, POWER, { LEV, FL1, FL2 } },
> -{ "svca",    SC(17,1,0), SC_MASK, PWRCOM, { SV } },
> -{ "svcla",   SC(17,1,1), SC_MASK, POWER, { SV } },
> -
> -{ "b",     B(18,0,0), B_MASK, COM, { LI } },
> -{ "bl",      B(18,0,1), B_MASK, COM, { LI } },
> -{ "ba",      B(18,1,0), B_MASK, COM, { LIA } },
> -{ "bla",     B(18,1,1), B_MASK, COM, { LIA } },
> -
> -{ "mcrf",    XL(19,0), XLBB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
> -
> -{ "blr",     XLO(19,BOU,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
> -{ "br",      XLO(19,BOU,16,0), XLBOBIBB_MASK, PWRCOM, { 0 } },
> -{ "blrl",    XLO(19,BOU,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
> -{ "brl",     XLO(19,BOU,16,1), XLBOBIBB_MASK, PWRCOM, { 0 } },
> -{ "bdnzlr",  XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
> -{ "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPC, { 0 } },
> -{ "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, PPC, { 0 } },
> -{ "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
> -{ "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPC, { 0 } },
> -{ "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, PPC, { 0 } },
> -{ "bdzlr",   XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
> -{ "bdzlr-",  XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPC, { 0 } },
> -{ "bdzlr+",  XLO(19,BODZP,16,0), XLBOBIBB_MASK, PPC, { 0 } },
> -{ "bdzlrl",  XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
> -{ "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPC, { 0 } },
> -{ "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, PPC, { 0 } },
> -{ "bltlr",   XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bltlr-",  XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bltlr+",  XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bltr",    XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bltlrl",  XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bltrl",   XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bgtlr",   XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bgtlr-",  XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgtlr+",  XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgtr",    XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bgtlrl",  XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgtrl",   XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "beqlr",   XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "beqlr-",  XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "beqlr+",  XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "beqr",    XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "beqlrl",  XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "beqrl",   XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bsolr",   XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bsolr-",  XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bsolr+",  XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bsor",    XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bsolrl",  XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bsorl",   XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bunlr",   XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bunlr-",  XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bunlr+",  XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bunlrl",  XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgelr",   XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bgelr-",  XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgelr+",  XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bger",    XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bgelrl",  XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgerl",   XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnllr",   XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnllr-",  XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnllr+",  XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnlr",    XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnllrl",  XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnlrl",   XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "blelr",   XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "blelr-",  XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "blelr+",  XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bler",    XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "blelrl",  XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "blerl",   XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnglr",   XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnglr-",  XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnglr+",  XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bngr",    XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnglrl",  XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bngrl",   XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnelr",   XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnelr-",  XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnelr+",  XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bner",    XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnelrl",  XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnerl",   XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnslr",   XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnslr-",  XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnslr+",  XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnsr",    XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnslrl",  XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnsrl",   XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
> -{ "bnulr",   XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnulr-",  XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnulr+",  XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnulrl",  XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "btlr",    XLO(19,BOT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "btlr-",   XLO(19,BOT,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "btlr+",   XLO(19,BOTP,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bbtr",    XLO(19,BOT,16,0), XLBOBB_MASK, PWRCOM, { BI } },
> -{ "btlrl",   XLO(19,BOT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "btlrl-",  XLO(19,BOT,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "btlrl+",  XLO(19,BOTP,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bbtrl",   XLO(19,BOT,16,1), XLBOBB_MASK, PWRCOM, { BI } },
> -{ "bflr",    XLO(19,BOF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bflr-",   XLO(19,BOF,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bflr+",   XLO(19,BOFP,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bbfr",    XLO(19,BOF,16,0), XLBOBB_MASK, PWRCOM, { BI } },
> -{ "bflrl",   XLO(19,BOF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bflrl-",  XLO(19,BOF,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bflrl+",  XLO(19,BOFP,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bbfrl",   XLO(19,BOF,16,1), XLBOBB_MASK, PWRCOM, { BI } },
> -{ "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bdztlr",  XLO(19,BODZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bdzflr",  XLO(19,BODZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bclr",    XLLK(19,16,0), XLYBB_MASK, PPCCOM, { BO, BI } },
> -{ "bclrl",   XLLK(19,16,1), XLYBB_MASK, PPCCOM, { BO, BI } },
> -{ "bclr+",   XLYLK(19,16,1,0), XLYBB_MASK, PPC, { BOE, BI } },
> -{ "bclrl+",  XLYLK(19,16,1,1), XLYBB_MASK, PPC, { BOE, BI } },
> -{ "bclr-",   XLYLK(19,16,0,0), XLYBB_MASK, PPC, { BOE, BI } },
> -{ "bclrl-",  XLYLK(19,16,0,1), XLYBB_MASK, PPC, { BOE, BI } },
> -{ "bcr",     XLLK(19,16,0), XLBB_MASK, PWRCOM, { BO, BI } },
> -{ "bcrl",    XLLK(19,16,1), XLBB_MASK, PWRCOM, { BO, BI } },
> -
> -{ "crnot",   XL(19,33), XL_MASK, PPCCOM, { BT, BA, BBA } },
> -{ "crnor",   XL(19,33), XL_MASK, COM, { BT, BA, BB } },
> -
> -{ "rfi",     XL(19,50), 0xffffffff, COM, { 0 } },
> -{ "rfci",    XL(19,51), 0xffffffff, PPC, { 0 } },
> -
> -{ "rfsvc",   XL(19,82), 0xffffffff, POWER, { 0 } },
> -
> -{ "crandc",  XL(19,129), XL_MASK, COM, { BT, BA, BB } },
> -
> -{ "isync",   XL(19,150), 0xffffffff, PPCCOM, { 0 } },
> -{ "ics",     XL(19,150), 0xffffffff, PWRCOM, { 0 } },
> -
> -{ "crclr",   XL(19,193), XL_MASK, PPCCOM, { BT, BAT, BBA } },
> -{ "crxor",   XL(19,193), XL_MASK, COM, { BT, BA, BB } },
> -
> -{ "crnand",  XL(19,225), XL_MASK, COM, { BT, BA, BB } },
> -
> -{ "crand",   XL(19,257), XL_MASK, COM, { BT, BA, BB } },
> -
> -{ "crset",   XL(19,289), XL_MASK, PPCCOM, { BT, BAT, BBA } },
> -{ "creqv",   XL(19,289), XL_MASK, COM, { BT, BA, BB } },
> -
> -{ "crorc",   XL(19,417), XL_MASK, COM, { BT, BA, BB } },
> -
> -{ "crmove",  XL(19,449), XL_MASK, PPCCOM, { BT, BA, BBA } },
> -{ "cror",    XL(19,449), XL_MASK, COM, { BT, BA, BB } },
> -
> -{ "bctr",    XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } },
> -{ "bctrl",   XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } },
> -{ "bltctr",  XLOCB(19,BOT,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bltctr-", XLOCB(19,BOT,CBLT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bltctrl", XLOCB(19,BOT,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bltctrl-",XLOCB(19,BOT,CBLT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgtctr",  XLOCB(19,BOT,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bgtctr-", XLOCB(19,BOT,CBGT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgtctrl", XLOCB(19,BOT,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bgtctrl-",XLOCB(19,BOT,CBGT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "beqctr",  XLOCB(19,BOT,CBEQ,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "beqctr-", XLOCB(19,BOT,CBEQ,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "beqctrl", XLOCB(19,BOT,CBEQ,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "beqctrl-",XLOCB(19,BOT,CBEQ,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bsoctr",  XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bsoctr-", XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bsoctrl", XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bsoctrl-",XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bunctr",  XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bunctr-", XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bunctrl", XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bunctrl-",XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgectr",  XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bgectr-", XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgectrl", XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bgectrl-",XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnlctr",  XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnlctr-", XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnlctrl", XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnlctrl-",XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "blectr",  XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "blectr-", XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "blectrl", XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "blectrl-",XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bngctr",  XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bngctr-", XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bngctrl", XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bngctrl-",XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnectr",  XLOCB(19,BOF,CBEQ,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnectr-", XLOCB(19,BOF,CBEQ,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnectrl", XLOCB(19,BOF,CBEQ,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnectrl-",XLOCB(19,BOF,CBEQ,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnsctr",  XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnsctr-", XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnsctrl", XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnsctrl-",XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnuctr",  XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnuctr-", XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnuctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnuctrl", XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM, { CR } },
> -{ "bnuctrl-",XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPC, { CR } },
> -{ "bnuctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
> -{ "btctr",   XLO(19,BOT,528,0),  XLBOBB_MASK, PPCCOM, { BI } },
> -{ "btctr-",  XLO(19,BOT,528,0),  XLBOBB_MASK, PPC, { BI } },
> -{ "btctr+",  XLO(19,BOTP,528,0), XLBOBB_MASK, PPC, { BI } },
> -{ "btctrl",  XLO(19,BOT,528,1),  XLBOBB_MASK, PPCCOM, { BI } },
> -{ "btctrl-", XLO(19,BOT,528,1),  XLBOBB_MASK, PPC, { BI } },
> -{ "btctrl+", XLO(19,BOTP,528,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bfctr",   XLO(19,BOF,528,0),  XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bfctr-",  XLO(19,BOF,528,0),  XLBOBB_MASK, PPC, { BI } },
> -{ "bfctr+",  XLO(19,BOFP,528,0), XLBOBB_MASK, PPC, { BI } },
> -{ "bfctrl",  XLO(19,BOF,528,1),  XLBOBB_MASK, PPCCOM, { BI } },
> -{ "bfctrl-", XLO(19,BOF,528,1),  XLBOBB_MASK, PPC, { BI } },
> -{ "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, PPC, { BI } },
> -{ "bcctr",   XLLK(19,528,0),     XLYBB_MASK,  PPCCOM, { BO, BI } },
> -{ "bcctr-",  XLYLK(19,528,0,0),  XLYBB_MASK,  PPC, { BOE, BI } },
> -{ "bcctr+",  XLYLK(19,528,1,0),  XLYBB_MASK,  PPC, { BOE, BI } },
> -{ "bcctrl",  XLLK(19,528,1),     XLYBB_MASK,  PPCCOM, { BO, BI } },
> -{ "bcctrl-", XLYLK(19,528,0,1),  XLYBB_MASK,  PPC, { BOE, BI } },
> -{ "bcctrl+", XLYLK(19,528,1,1),  XLYBB_MASK,  PPC, { BOE, BI } },
> -{ "bcc",     XLLK(19,528,0),     XLBB_MASK,   PWRCOM, { BO, BI } },
> -{ "bccl",    XLLK(19,528,1),     XLBB_MASK,   PWRCOM, { BO, BI } },
> -
> -{ "rlwimi",  M(20,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
> -{ "rlimi",   M(20,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
> -
> -{ "rlwimi.", M(20,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
> -{ "rlimi.",  M(20,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
> -
> -{ "rotlwi",  MME(21,31,0), MMBME_MASK, PPCCOM, { RA, RS, SH } },
> -{ "clrlwi",  MME(21,31,0), MSHME_MASK, PPCCOM, { RA, RS, MB } },
> -{ "rlwinm",  M(21,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
> -{ "rlinm",   M(21,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
> -{ "rotlwi.", MME(21,31,1), MMBME_MASK, PPCCOM, { RA,RS,SH } },
> -{ "clrlwi.", MME(21,31,1), MSHME_MASK, PPCCOM, { RA, RS, MB } },
> -{ "rlwinm.", M(21,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
> -{ "rlinm.",  M(21,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
> -
> -{ "rlmi",    M(22,0), M_MASK, M601, { RA,RS,RB,MBE,ME } },
> -{ "rlmi.",   M(22,1), M_MASK, M601, { RA,RS,RB,MBE,ME } },
> -
> -{ "rotlw",   MME(23,31,0), MMBME_MASK, PPCCOM, { RA, RS, RB } },
> -{ "rlwnm",   M(23,0), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
> -{ "rlnm",    M(23,0), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } },
> -{ "rotlw.",  MME(23,31,1), MMBME_MASK, PPCCOM, { RA, RS, RB } },
> -{ "rlwnm.",  M(23,1), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
> -{ "rlnm.",   M(23,1), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } },
> -
> -{ "nop",     OP(24), 0xffffffff, PPCCOM, { 0 } },
> -{ "ori",     OP(24), OP_MASK, PPCCOM, { RA, RS, UI } },
> -{ "oril",    OP(24), OP_MASK, PWRCOM, { RA, RS, UI } },
> -
> -{ "oris",    OP(25), OP_MASK, PPCCOM, { RA, RS, UI } },
> -{ "oriu",    OP(25), OP_MASK, PWRCOM, { RA, RS, UI } },
> -
> -{ "xori",    OP(26), OP_MASK, PPCCOM, { RA, RS, UI } },
> -{ "xoril",   OP(26), OP_MASK, PWRCOM, { RA, RS, UI } },
> -
> -{ "xoris",   OP(27), OP_MASK, PPCCOM, { RA, RS, UI } },
> -{ "xoriu",   OP(27), OP_MASK, PWRCOM, { RA, RS, UI } },
> -
> -{ "andi.",   OP(28), OP_MASK, PPCCOM, { RA, RS, UI } },
> -{ "andil.",  OP(28), OP_MASK, PWRCOM, { RA, RS, UI } },
> -
> -{ "andis.",  OP(29), OP_MASK, PPCCOM, { RA, RS, UI } },
> -{ "andiu.",  OP(29), OP_MASK, PWRCOM, { RA, RS, UI } },
> -
> -{ "rotldi",  MD(30,0,0), MDMB_MASK, PPC64, { RA, RS, SH6 } },
> -{ "clrldi",  MD(30,0,0), MDSH_MASK, PPC64, { RA, RS, MB6 } },
> -{ "rldicl",  MD(30,0,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
> -{ "rotldi.", MD(30,0,1), MDMB_MASK, PPC64, { RA, RS, SH6 } },
> -{ "clrldi.", MD(30,0,1), MDSH_MASK, PPC64, { RA, RS, MB6 } },
> -{ "rldicl.", MD(30,0,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
> -
> -{ "rldicr",  MD(30,1,0), MD_MASK, PPC64, { RA, RS, SH6, ME6 } },
> -{ "rldicr.", MD(30,1,1), MD_MASK, PPC64, { RA, RS, SH6, ME6 } },
> -
> -{ "rldic",   MD(30,2,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
> -{ "rldic.",  MD(30,2,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
> -
> -{ "rldimi",  MD(30,3,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
> -{ "rldimi.", MD(30,3,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
> -
> -{ "rotld",   MDS(30,8,0), MDSMB_MASK, PPC64, { RA, RS, RB } },
> -{ "rldcl",   MDS(30,8,0), MDS_MASK, PPC64, { RA, RS, RB, MB6 } },
> -{ "rotld.",  MDS(30,8,1), MDSMB_MASK, PPC64, { RA, RS, RB } },
> -{ "rldcl.",  MDS(30,8,1), MDS_MASK, PPC64, { RA, RS, RB, MB6 } },
> -
> -{ "rldcr",   MDS(30,9,0), MDS_MASK, PPC64, { RA, RS, RB, ME6 } },
> -{ "rldcr.",  MDS(30,9,1), MDS_MASK, PPC64, { RA, RS, RB, ME6 } },
> -
> -{ "cmpw",    XCMPL(31,0,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
> -{ "cmpd",    XCMPL(31,0,1), XCMPL_MASK, PPC64, { OBF, RA, RB } },
> -{ "cmp",     X(31,0), XCMP_MASK, PPCONLY, { BF, L, RA, RB } },
> -{ "cmp",     X(31,0), XCMPL_MASK, PWRCOM, { BF, RA, RB } },
> -
> -{ "twlgt",   XTO(31,4,TOLGT), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tlgt",    XTO(31,4,TOLGT), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twllt",   XTO(31,4,TOLLT), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tllt",    XTO(31,4,TOLLT), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "tweq",    XTO(31,4,TOEQ), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "teq",     XTO(31,4,TOEQ), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twlge",   XTO(31,4,TOLGE), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tlge",    XTO(31,4,TOLGE), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twlnl",   XTO(31,4,TOLNL), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tlnl",    XTO(31,4,TOLNL), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twlle",   XTO(31,4,TOLLE), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tlle",    XTO(31,4,TOLLE), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twlng",   XTO(31,4,TOLNG), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tlng",    XTO(31,4,TOLNG), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twgt",    XTO(31,4,TOGT), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tgt",     XTO(31,4,TOGT), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twge",    XTO(31,4,TOGE), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tge",     XTO(31,4,TOGE), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twnl",    XTO(31,4,TONL), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tnl",     XTO(31,4,TONL), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twlt",    XTO(31,4,TOLT), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tlt",     XTO(31,4,TOLT), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twle",    XTO(31,4,TOLE), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tle",     XTO(31,4,TOLE), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twng",    XTO(31,4,TONG), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tng",     XTO(31,4,TONG), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "twne",    XTO(31,4,TONE), XTO_MASK, PPCCOM, { RA, RB } },
> -{ "tne",     XTO(31,4,TONE), XTO_MASK, PWRCOM, { RA, RB } },
> -{ "trap",    XTO(31,4,TOU), 0xffffffff, PPCCOM, { 0 } },
> -{ "tw",      X(31,4), X_MASK, PPCCOM, { TO, RA, RB } },
> -{ "t",       X(31,4), X_MASK, PWRCOM, { TO, RA, RB } },
> -
> -{ "subfc",   XO(31,8,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "sf",      XO(31,8,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "subc",    XO(31,8,0,0), XO_MASK, PPC, { RT, RB, RA } },
> -{ "subfc.",  XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "sf.",     XO(31,8,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "subc.",   XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RB, RA } },
> -{ "subfco",  XO(31,8,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "sfo",     XO(31,8,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "subco",   XO(31,8,1,0), XO_MASK, PPC, { RT, RB, RA } },
> -{ "subfco.", XO(31,8,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "sfo.",    XO(31,8,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "subco.",  XO(31,8,1,1), XO_MASK, PPC, { RT, RB, RA } },
> -
> -{ "mulhdu",  XO(31,9,0,0), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "mulhdu.", XO(31,9,0,1), XO_MASK, PPC64, { RT, RA, RB } },
> -
> -{ "addc",    XO(31,10,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "a",       XO(31,10,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "addc.",   XO(31,10,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "a.",      XO(31,10,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "addco",   XO(31,10,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "ao",      XO(31,10,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "addco.",  XO(31,10,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "ao.",     XO(31,10,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "mulhwu",  XO(31,11,0,0), XO_MASK, PPC, { RT, RA, RB } },
> -{ "mulhwu.", XO(31,11,0,1), XO_MASK, PPC, { RT, RA, RB } },
> -
> -{ "mfcr",    X(31,19), XRARB_MASK, COM, { RT } },
> -
> -{ "lwarx",   X(31,20), X_MASK, PPC, { RT, RA, RB } },
> -
> -{ "ldx",     X(31,21), X_MASK, PPC64, { RT, RA, RB } },
> -
> -{ "lwzx",    X(31,23), X_MASK, PPCCOM, { RT, RA, RB } },
> -{ "lx",      X(31,23), X_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "slw",     XRC(31,24,0), X_MASK, PPCCOM, { RA, RS, RB } },
> -{ "sl",      XRC(31,24,0), X_MASK, PWRCOM, { RA, RS, RB } },
> -{ "slw.",    XRC(31,24,1), X_MASK, PPCCOM, { RA, RS, RB } },
> -{ "sl.",     XRC(31,24,1), X_MASK, PWRCOM, { RA, RS, RB } },
> -
> -{ "cntlzw",  XRC(31,26,0), XRB_MASK, PPCCOM, { RA, RS } },
> -{ "cntlz",   XRC(31,26,0), XRB_MASK, PWRCOM, { RA, RS } },
> -{ "cntlzw.", XRC(31,26,1), XRB_MASK, PPCCOM, { RA, RS } },
> -{ "cntlz.",  XRC(31,26,1), XRB_MASK, PWRCOM, { RA, RS } },
> -
> -{ "sld",     XRC(31,27,0), X_MASK, PPC64, { RA, RS, RB } },
> -{ "sld.",    XRC(31,27,1), X_MASK, PPC64, { RA, RS, RB } },
> -
> -{ "and",     XRC(31,28,0), X_MASK, COM, { RA, RS, RB } },
> -{ "and.",    XRC(31,28,1), X_MASK, COM, { RA, RS, RB } },
> -
> -{ "maskg",   XRC(31,29,0), X_MASK, M601, { RA, RS, RB } },
> -{ "maskg.",  XRC(31,29,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "cmplw",   XCMPL(31,32,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
> -{ "cmpld",   XCMPL(31,32,1), XCMPL_MASK, PPC64, { OBF, RA, RB } },
> -{ "cmpl",    X(31,32), XCMP_MASK, PPCONLY, { BF, L, RA, RB } },
> -{ "cmpl",    X(31,32), XCMPL_MASK, PWRCOM, { BF, RA, RB } },
> -
> -{ "subf",    XO(31,40,0,0), XO_MASK, PPC, { RT, RA, RB } },
> -{ "sub",     XO(31,40,0,0), XO_MASK, PPC, { RT, RB, RA } },
> -{ "subf.",   XO(31,40,0,1), XO_MASK, PPC, { RT, RA, RB } },
> -{ "sub.",    XO(31,40,0,1), XO_MASK, PPC, { RT, RB, RA } },
> -{ "subfo",   XO(31,40,1,0), XO_MASK, PPC, { RT, RA, RB } },
> -{ "subo",    XO(31,40,1,0), XO_MASK, PPC, { RT, RB, RA } },
> -{ "subfo.",  XO(31,40,1,1), XO_MASK, PPC, { RT, RA, RB } },
> -{ "subo.",   XO(31,40,1,1), XO_MASK, PPC, { RT, RB, RA } },
> -
> -{ "ldux",    X(31,53), X_MASK, PPC64, { RT, RAL, RB } },
> -
> -{ "dcbst",   X(31,54), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "lwzux",   X(31,55), X_MASK, PPCCOM, { RT, RAL, RB } },
> -{ "lux",     X(31,55), X_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "cntlzd",  XRC(31,58,0), XRB_MASK, PPC64, { RA, RS } },
> -{ "cntlzd.", XRC(31,58,1), XRB_MASK, PPC64, { RA, RS } },
> -
> -{ "andc",    XRC(31,60,0), X_MASK, COM, { RA, RS, RB } },
> -{ "andc.",   XRC(31,60,1), X_MASK, COM, { RA, RS, RB } },
> -
> -{ "tdlgt",   XTO(31,68,TOLGT), XTO_MASK, PPC64, { RA, RB } },
> -{ "tdllt",   XTO(31,68,TOLLT), XTO_MASK, PPC64, { RA, RB } },
> -{ "tdeq",    XTO(31,68,TOEQ), XTO_MASK,  PPC64, { RA, RB } },
> -{ "tdlge",   XTO(31,68,TOLGE), XTO_MASK, PPC64, { RA, RB } },
> -{ "tdlnl",   XTO(31,68,TOLNL), XTO_MASK, PPC64, { RA, RB } },
> -{ "tdlle",   XTO(31,68,TOLLE), XTO_MASK, PPC64, { RA, RB } },
> -{ "tdlng",   XTO(31,68,TOLNG), XTO_MASK, PPC64, { RA, RB } },
> -{ "tdgt",    XTO(31,68,TOGT), XTO_MASK,  PPC64, { RA, RB } },
> -{ "tdge",    XTO(31,68,TOGE), XTO_MASK,  PPC64, { RA, RB } },
> -{ "tdnl",    XTO(31,68,TONL), XTO_MASK,  PPC64, { RA, RB } },
> -{ "tdlt",    XTO(31,68,TOLT), XTO_MASK,  PPC64, { RA, RB } },
> -{ "tdle",    XTO(31,68,TOLE), XTO_MASK,  PPC64, { RA, RB } },
> -{ "tdng",    XTO(31,68,TONG), XTO_MASK,  PPC64, { RA, RB } },
> -{ "tdne",    XTO(31,68,TONE), XTO_MASK,  PPC64, { RA, RB } },
> -{ "td",     X(31,68), X_MASK, PPC64, { TO, RA, RB } },
> -
> -{ "mulhd",   XO(31,73,0,0), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "mulhd.",  XO(31,73,0,1), XO_MASK, PPC64, { RT, RA, RB } },
> -
> -{ "mulhw",   XO(31,75,0,0), XO_MASK, PPC, { RT, RA, RB } },
> -{ "mulhw.",  XO(31,75,0,1), XO_MASK, PPC, { RT, RA, RB } },
> -
> -{ "mfmsr",   X(31,83), XRARB_MASK, COM, { RT } },
> -
> -{ "ldarx",   X(31,84), X_MASK, PPC64, { RT, RA, RB } },
> -
> -{ "dcbf",    X(31,86), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "lbzx",    X(31,87), X_MASK, COM, { RT, RA, RB } },
> -
> -{ "neg",     XO(31,104,0,0), XORB_MASK, COM, { RT, RA } },
> -{ "neg.",    XO(31,104,0,1), XORB_MASK, COM, { RT, RA } },
> -{ "nego",    XO(31,104,1,0), XORB_MASK, COM, { RT, RA } },
> -{ "nego.",   XO(31,104,1,1), XORB_MASK, COM, { RT, RA } },
> -
> -{ "mul",     XO(31,107,0,0), XO_MASK, M601, { RT, RA, RB } },
> -{ "mul.",    XO(31,107,0,1), XO_MASK, M601, { RT, RA, RB } },
> -{ "mulo",    XO(31,107,1,0), XO_MASK, M601, { RT, RA, RB } },
> -{ "mulo.",   XO(31,107,1,1), XO_MASK, M601, { RT, RA, RB } },
> -
> -{ "clf",     X(31,118), XRB_MASK, POWER, { RT, RA } },
> -
> -{ "lbzux",   X(31,119), X_MASK, COM, { RT, RAL, RB } },
> -
> -{ "not",     XRC(31,124,0), X_MASK, COM, { RA, RS, RBS } },
> -{ "nor",     XRC(31,124,0), X_MASK, COM, { RA, RS, RB } },
> -{ "not.",    XRC(31,124,1), X_MASK, COM, { RA, RS, RBS } },
> -{ "nor.",    XRC(31,124,1), X_MASK, COM, { RA, RS, RB } },
> -
> -{ "subfe",   XO(31,136,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "sfe",     XO(31,136,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "subfe.",  XO(31,136,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "sfe.",    XO(31,136,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "subfeo",  XO(31,136,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "sfeo",    XO(31,136,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "subfeo.", XO(31,136,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "sfeo.",   XO(31,136,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "adde",    XO(31,138,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "ae",      XO(31,138,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "adde.",   XO(31,138,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "ae.",     XO(31,138,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "addeo",   XO(31,138,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "aeo",     XO(31,138,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "addeo.",  XO(31,138,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "aeo.",    XO(31,138,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "mtcr",    XFXM(31,144,0xff), XFXFXM_MASK|FXM_MASK, COM, { RS }},
> -{ "mtcrf",   X(31,144), XFXFXM_MASK, COM, { FXM, RS } },
> -
> -{ "mtmsr",   X(31,146), XRARB_MASK, COM, { RS } },
> -
> -{ "stdx",    X(31,149), X_MASK, PPC64, { RS, RA, RB } },
> -
> -{ "stwcx.",  XRC(31,150,1), X_MASK, PPC, { RS, RA, RB } },
> -
> -{ "stwx",    X(31,151), X_MASK, PPCCOM, { RS, RA, RB } },
> -{ "stx",     X(31,151), X_MASK, PWRCOM, { RS, RA, RB } },
> -
> -{ "slq",     XRC(31,152,0), X_MASK, M601, { RA, RS, RB } },
> -{ "slq.",    XRC(31,152,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "sle",     XRC(31,153,0), X_MASK, M601, { RA, RS, RB } },
> -{ "sle.",    XRC(31,153,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "stdux",   X(31,181), X_MASK, PPC64, { RS, RAS, RB } },
> -
> -{ "stwux",   X(31,183), X_MASK, PPCCOM, { RS, RAS, RB } },
> -{ "stux",    X(31,183), X_MASK, PWRCOM, { RS, RA, RB } },
> -
> -{ "sliq",    XRC(31,184,0), X_MASK, M601, { RA, RS, SH } },
> -{ "sliq.",   XRC(31,184,1), X_MASK, M601, { RA, RS, SH } },
> -
> -{ "subfze",  XO(31,200,0,0), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "sfze",    XO(31,200,0,0), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "subfze.", XO(31,200,0,1), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "sfze.",   XO(31,200,0,1), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "subfzeo", XO(31,200,1,0), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "sfzeo",   XO(31,200,1,0), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "subfzeo.",XO(31,200,1,1), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "sfzeo.",  XO(31,200,1,1), XORB_MASK, PWRCOM, { RT, RA } },
> -
> -{ "addze",   XO(31,202,0,0), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "aze",     XO(31,202,0,0), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "addze.",  XO(31,202,0,1), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "aze.",    XO(31,202,0,1), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "addzeo",  XO(31,202,1,0), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "azeo",    XO(31,202,1,0), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "addzeo.", XO(31,202,1,1), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "azeo.",   XO(31,202,1,1), XORB_MASK, PWRCOM, { RT, RA } },
> -
> -{ "mtsr",    X(31,210), XRB_MASK|(1<<20), COM32, { SR, RS } },
> -
> -{ "stdcx.",  XRC(31,214,1), X_MASK, PPC64, { RS, RA, RB } },
> -
> -{ "stbx",    X(31,215), X_MASK, COM, { RS, RA, RB } },
> -
> -{ "sllq",    XRC(31,216,0), X_MASK, M601, { RA, RS, RB } },
> -{ "sllq.",   XRC(31,216,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "sleq",    XRC(31,217,0), X_MASK, M601, { RA, RS, RB } },
> -{ "sleq.",   XRC(31,217,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "subfme",  XO(31,232,0,0), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "sfme",    XO(31,232,0,0), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "subfme.", XO(31,232,0,1), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "sfme.",   XO(31,232,0,1), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "subfmeo", XO(31,232,1,0), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "sfmeo",   XO(31,232,1,0), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "subfmeo.",XO(31,232,1,1), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "sfmeo.",  XO(31,232,1,1), XORB_MASK, PWRCOM, { RT, RA } },
> -
> -{ "mulld",   XO(31,233,0,0), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "mulld.",  XO(31,233,0,1), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "mulldo",  XO(31,233,1,0), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "mulldo.", XO(31,233,1,1), XO_MASK, PPC64, { RT, RA, RB } },
> -
> -{ "addme",   XO(31,234,0,0), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "ame",     XO(31,234,0,0), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "addme.",  XO(31,234,0,1), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "ame.",    XO(31,234,0,1), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "addmeo",  XO(31,234,1,0), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "ameo",    XO(31,234,1,0), XORB_MASK, PWRCOM, { RT, RA } },
> -{ "addmeo.", XO(31,234,1,1), XORB_MASK, PPCCOM, { RT, RA } },
> -{ "ameo.",   XO(31,234,1,1), XORB_MASK, PWRCOM, { RT, RA } },
> -
> -{ "mullw",   XO(31,235,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "muls",    XO(31,235,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "mullw.",  XO(31,235,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "muls.",   XO(31,235,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "mullwo",  XO(31,235,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "mulso",   XO(31,235,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "mullwo.", XO(31,235,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "mulso.",  XO(31,235,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "mtsrin",  X(31,242), XRA_MASK, PPC32, { RS, RB } },
> -{ "mtsri",   X(31,242), XRA_MASK, POWER32, { RS, RB } },
> -
> -{ "dcbtst",  X(31,246), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "stbux",   X(31,247), X_MASK, COM, { RS, RAS, RB } },
> -
> -{ "slliq",   XRC(31,248,0), X_MASK, M601, { RA, RS, SH } },
> -{ "slliq.",  XRC(31,248,1), X_MASK, M601, { RA, RS, SH } },
> -
> -{ "doz",     XO(31,264,0,0), XO_MASK, M601, { RT, RA, RB } },
> -{ "doz.",    XO(31,264,0,1), XO_MASK, M601, { RT, RA, RB } },
> -{ "dozo",    XO(31,264,1,0), XO_MASK, M601, { RT, RA, RB } },
> -{ "dozo.",   XO(31,264,1,1), XO_MASK, M601, { RT, RA, RB } },
> -
> -{ "add",     XO(31,266,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "cax",     XO(31,266,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "add.",    XO(31,266,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "cax.",    XO(31,266,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "addo",    XO(31,266,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "caxo",    XO(31,266,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
> -{ "addo.",   XO(31,266,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
> -{ "caxo.",   XO(31,266,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "lscbx",   XRC(31,277,0), X_MASK, M601, { RT, RA, RB } },
> -{ "lscbx.",  XRC(31,277,1), X_MASK, M601, { RT, RA, RB } },
> -
> -{ "dcbt",    X(31,278), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "lhzx",    X(31,279), X_MASK, COM, { RT, RA, RB } },
> -
> -{ "icbt",    X(31,262), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "eqv",     XRC(31,284,0), X_MASK, COM, { RA, RS, RB } },
> -{ "eqv.",    XRC(31,284,1), X_MASK, COM, { RA, RS, RB } },
> -
> -{ "tlbie",   X(31,306), XRTRA_MASK, PPC, { RB } },
> -{ "tlbi",    X(31,306), XRT_MASK, POWER, { RA, RB } },
> -
> -{ "eciwx",   X(31,310), X_MASK, PPC, { RT, RA, RB } },
> -
> -{ "lhzux",   X(31,311), X_MASK, COM, { RT, RAL, RB } },
> -
> -{ "xor",     XRC(31,316,0), X_MASK, COM, { RA, RS, RB } },
> -{ "xor.",    XRC(31,316,1), X_MASK, COM, { RA, RS, RB } },
> -
> -{ "mfdcr",   X(31,323), X_MASK, PPC, { RT, SPR } },
> -
> -{ "div",     XO(31,331,0,0), XO_MASK, M601, { RT, RA, RB } },
> -{ "div.",    XO(31,331,0,1), XO_MASK, M601, { RT, RA, RB } },
> -{ "divo",    XO(31,331,1,0), XO_MASK, M601, { RT, RA, RB } },
> -{ "divo.",   XO(31,331,1,1), XO_MASK, M601, { RT, RA, RB } },
> -
> -{ "mfmq",    XSPR(31,339,0),   XSPR_MASK, M601, { RT } },
> -{ "mfxer",   XSPR(31,339,1),   XSPR_MASK, COM, { RT } },
> -{ "mfrtcu",  XSPR(31,339,4),   XSPR_MASK, COM, { RT } },
> -{ "mfrtcl",  XSPR(31,339,5),   XSPR_MASK, COM, { RT } },
> -{ "mfdec",   XSPR(31,339,6),   XSPR_MASK, MFDEC1, { RT } },
> -{ "mflr",    XSPR(31,339,8),   XSPR_MASK, COM, { RT } },
> -{ "mfctr",   XSPR(31,339,9),   XSPR_MASK, COM, { RT } },
> -{ "mftid",   XSPR(31,339,17),  XSPR_MASK, POWER, { RT } },
> -{ "mfdsisr", XSPR(31,339,18),  XSPR_MASK, COM, { RT } },
> -{ "mfdar",   XSPR(31,339,19),  XSPR_MASK, COM, { RT } },
> -{ "mfdec",   XSPR(31,339,22),  XSPR_MASK, MFDEC2, { RT } },
> -{ "mfsdr0",  XSPR(31,339,24),  XSPR_MASK, POWER, { RT } },
> -{ "mfsdr1",  XSPR(31,339,25),  XSPR_MASK, COM, { RT } },
> -{ "mfsrr0",  XSPR(31,339,26),  XSPR_MASK, COM, { RT } },
> -{ "mfsrr1",  XSPR(31,339,27),  XSPR_MASK, COM, { RT } },
> -{ "mfsprg",  XSPR(31,339,272), XSPRG_MASK, PPC, { RT, SPRG } },
> -{ "mfasr",   XSPR(31,339,280), XSPR_MASK, PPC64, { RT } },
> -{ "mfear",   XSPR(31,339,282), XSPR_MASK, PPC, { RT } },
> -{ "mfpvr",   XSPR(31,339,287), XSPR_MASK, PPC, { RT } },
> -{ "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
> -{ "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
> -{ "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
> -{ "mfdbatl", XSPR(31,339,537), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
> -{ "mfspr",   X(31,339), X_MASK, COM, { RT, SPR } },
> -
> -{ "lwax",    X(31,341), X_MASK, PPC64, { RT, RA, RB } },
> -
> -{ "lhax",    X(31,343), X_MASK, COM, { RT, RA, RB } },
> -
> -{ "dccci",   X(31,454), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "abs",     XO(31,360,0,0), XORB_MASK, M601, { RT, RA } },
> -{ "abs.",    XO(31,360,0,1), XORB_MASK, M601, { RT, RA } },
> -{ "abso",    XO(31,360,1,0), XORB_MASK, M601, { RT, RA } },
> -{ "abso.",   XO(31,360,1,1), XORB_MASK, M601, { RT, RA } },
> -
> -{ "divs",    XO(31,363,0,0), XO_MASK, M601, { RT, RA, RB } },
> -{ "divs.",   XO(31,363,0,1), XO_MASK, M601, { RT, RA, RB } },
> -{ "divso",   XO(31,363,1,0), XO_MASK, M601, { RT, RA, RB } },
> -{ "divso.",  XO(31,363,1,1), XO_MASK, M601, { RT, RA, RB } },
> -
> -{ "tlbia",   X(31,370), 0xffffffff, PPC, { 0 } },
> -
> -{ "mftbu",   XSPR(31,371,269), XSPR_MASK, PPC, { RT } },
> -{ "mftb",    X(31,371), X_MASK, PPC, { RT, TBR } },
> -
> -{ "lwaux",   X(31,373), X_MASK, PPC64, { RT, RAL, RB } },
> -
> -{ "lhaux",   X(31,375), X_MASK, COM, { RT, RAL, RB } },
> -
> -{ "sthx",    X(31,407), X_MASK, COM, { RS, RA, RB } },
> -
> -{ "lfqx",    X(31,791), X_MASK, POWER2, { FRT, RA, RB } },
> -
> -{ "lfqux",   X(31,823), X_MASK, POWER2, { FRT, RA, RB } },
> -
> -{ "stfqx",   X(31,919), X_MASK, POWER2, { FRS, RA, RB } },
> -
> -{ "stfqux",  X(31,951), X_MASK, POWER2, { FRS, RA, RB } },
> -
> -{ "orc",     XRC(31,412,0), X_MASK, COM, { RA, RS, RB } },
> -{ "orc.",    XRC(31,412,1), X_MASK, COM, { RA, RS, RB } },
> -
> -{ "sradi",   XS(31,413,0), XS_MASK, PPC64, { RA, RS, SH6 } },
> -{ "sradi.",  XS(31,413,1), XS_MASK, PPC64, { RA, RS, SH6 } },
> -
> -{ "slbie",   X(31,434), XRTRA_MASK, PPC64, { RB } },
> -
> -{ "ecowx",   X(31,438), X_MASK, PPC, { RT, RA, RB } },
> -
> -{ "sthux",   X(31,439), X_MASK, COM, { RS, RAS, RB } },
> -
> -{ "mr",     XRC(31,444,0), X_MASK, COM, { RA, RS, RBS } },
> -{ "or",      XRC(31,444,0), X_MASK, COM, { RA, RS, RB } },
> -{ "mr.",     XRC(31,444,1), X_MASK, COM, { RA, RS, RBS } },
> -{ "or.",     XRC(31,444,1), X_MASK, COM, { RA, RS, RB } },
> -
> -{ "mtdcr",   X(31,451), X_MASK, PPC, { SPR, RS } },
> -
> -{ "divdu",   XO(31,457,0,0), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "divdu.",  XO(31,457,0,1), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "divduo",  XO(31,457,1,0), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "divduo.", XO(31,457,1,1), XO_MASK, PPC64, { RT, RA, RB } },
> -
> -{ "divwu",   XO(31,459,0,0), XO_MASK, PPC, { RT, RA, RB } },
> -{ "divwu.",  XO(31,459,0,1), XO_MASK, PPC, { RT, RA, RB } },
> -{ "divwuo",  XO(31,459,1,0), XO_MASK, PPC, { RT, RA, RB } },
> -{ "divwuo.", XO(31,459,1,1), XO_MASK, PPC, { RT, RA, RB } },
> -
> -{ "mtmq",    XSPR(31,467,0),   XSPR_MASK,    M601, { RS } },
> -{ "mtxer",   XSPR(31,467,1),   XSPR_MASK,    COM, { RS } },
> -{ "mtlr",    XSPR(31,467,8),   XSPR_MASK,    COM, { RS } },
> -{ "mtctr",   XSPR(31,467,9),   XSPR_MASK,    COM, { RS } },
> -{ "mttid",   XSPR(31,467,17),  XSPR_MASK,    POWER, { RS } },
> -{ "mtdsisr", XSPR(31,467,18),  XSPR_MASK,    COM, { RS } },
> -{ "mtdar",   XSPR(31,467,19),  XSPR_MASK,    COM, { RS } },
> -{ "mtrtcu",  XSPR(31,467,20),  XSPR_MASK,    COM, { RS } },
> -{ "mtrtcl",  XSPR(31,467,21),  XSPR_MASK,    COM, { RS } },
> -{ "mtdec",   XSPR(31,467,22),  XSPR_MASK,    COM, { RS } },
> -{ "mtsdr0",  XSPR(31,467,24),  XSPR_MASK,    POWER, { RS } },
> -{ "mtsdr1",  XSPR(31,467,25),  XSPR_MASK,    COM, { RS } },
> -{ "mtsrr0",  XSPR(31,467,26),  XSPR_MASK,    COM, { RS } },
> -{ "mtsrr1",  XSPR(31,467,27),  XSPR_MASK,    COM, { RS } },
> -{ "mtsprg",  XSPR(31,467,272), XSPRG_MASK,   PPC, { SPRG, RS } },
> -{ "mtasr",   XSPR(31,467,280), XSPR_MASK,    PPC64, { RS } },
> -{ "mtear",   XSPR(31,467,282), XSPR_MASK,    PPC, { RS } },
> -{ "mttbl",   XSPR(31,467,284), XSPR_MASK,    PPC, { RS } },
> -{ "mttbu",   XSPR(31,467,285), XSPR_MASK,    PPC, { RS } },
> -{ "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
> -{ "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
> -{ "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
> -{ "mtdbatl", XSPR(31,467,537), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
> -{ "mtspr",   X(31,467),       X_MASK,     COM, { SPR, RS } },
> -
> -{ "dcbi",    X(31,470), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "nand",    XRC(31,476,0), X_MASK, COM, { RA, RS, RB } },
> -{ "nand.",   XRC(31,476,1), X_MASK, COM, { RA, RS, RB } },
> -
> -{ "nabs",    XO(31,488,0,0), XORB_MASK, M601, { RT, RA } },
> -{ "nabs.",   XO(31,488,0,1), XORB_MASK, M601, { RT, RA } },
> -{ "nabso",   XO(31,488,1,0), XORB_MASK, M601, { RT, RA } },
> -{ "nabso.",  XO(31,488,1,1), XORB_MASK, M601, { RT, RA } },
> -
> -{ "divd",    XO(31,489,0,0), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "divd.",   XO(31,489,0,1), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "divdo",   XO(31,489,1,0), XO_MASK, PPC64, { RT, RA, RB } },
> -{ "divdo.",  XO(31,489,1,1), XO_MASK, PPC64, { RT, RA, RB } },
> -
> -{ "divw",    XO(31,491,0,0), XO_MASK, PPC, { RT, RA, RB } },
> -{ "divw.",   XO(31,491,0,1), XO_MASK, PPC, { RT, RA, RB } },
> -{ "divwo",   XO(31,491,1,0), XO_MASK, PPC, { RT, RA, RB } },
> -{ "divwo.",  XO(31,491,1,1), XO_MASK, PPC, { RT, RA, RB } },
> -
> -{ "slbia",   X(31,498), 0xffffffff, PPC64, { 0 } },
> -
> -{ "cli",     X(31,502), XRB_MASK, POWER, { RT, RA } },
> -
> -{ "mcrxr",   X(31,512), XRARB_MASK|(3<<21), COM, { BF } },
> -
> -{ "clcs",    X(31,531), XRB_MASK, M601, { RT, RA } },
> -
> -{ "lswx",    X(31,533), X_MASK, PPCCOM, { RT, RA, RB } },
> -{ "lsx",     X(31,533), X_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "lwbrx",   X(31,534), X_MASK, PPCCOM, { RT, RA, RB } },
> -{ "lbrx",    X(31,534), X_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "lfsx",    X(31,535), X_MASK, COM, { FRT, RA, RB } },
> -
> -{ "srw",     XRC(31,536,0), X_MASK, PPCCOM, { RA, RS, RB } },
> -{ "sr",      XRC(31,536,0), X_MASK, PWRCOM, { RA, RS, RB } },
> -{ "srw.",    XRC(31,536,1), X_MASK, PPCCOM, { RA, RS, RB } },
> -{ "sr.",     XRC(31,536,1), X_MASK, PWRCOM, { RA, RS, RB } },
> -
> -{ "rrib",    XRC(31,537,0), X_MASK, M601, { RA, RS, RB } },
> -{ "rrib.",   XRC(31,537,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "srd",     XRC(31,539,0), X_MASK, PPC64, { RA, RS, RB } },
> -{ "srd.",    XRC(31,539,1), X_MASK, PPC64, { RA, RS, RB } },
> -
> -{ "maskir",  XRC(31,541,0), X_MASK, M601, { RA, RS, RB } },
> -{ "maskir.", XRC(31,541,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "tlbsync", X(31,566), 0xffffffff, PPC, { 0 } },
> -
> -{ "lfsux",   X(31,567), X_MASK, COM, { FRT, RAS, RB } },
> -
> -{ "mfsr",    X(31,595), XRB_MASK|(1<<20), COM32, { RT, SR } },
> -
> -{ "lswi",    X(31,597), X_MASK, PPCCOM, { RT, RA, NB } },
> -{ "lsi",     X(31,597), X_MASK, PWRCOM, { RT, RA, NB } },
> -
> -{ "sync",    X(31,598), 0xffffffff, PPCCOM, { 0 } },
> -{ "dcs",     X(31,598), 0xffffffff, PWRCOM, { 0 } },
> -
> -{ "lfdx",    X(31,599), X_MASK, COM, { FRT, RA, RB } },
> -
> -{ "mfsri",   X(31,627), X_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "dclst",   X(31,630), XRB_MASK, PWRCOM, { RS, RA } },
> -
> -{ "lfdux",   X(31,631), X_MASK, COM, { FRT, RAS, RB } },
> -
> -{ "mfsrin",  X(31,659), XRA_MASK, PPC32, { RT, RB } },
> -
> -{ "stswx",   X(31,661), X_MASK, PPCCOM, { RS, RA, RB } },
> -{ "stsx",    X(31,661), X_MASK, PWRCOM, { RS, RA, RB } },
> -
> -{ "stwbrx",  X(31,662), X_MASK, PPCCOM, { RS, RA, RB } },
> -{ "stbrx",   X(31,662), X_MASK, PWRCOM, { RS, RA, RB } },
> -
> -{ "stfsx",   X(31,663), X_MASK, COM, { FRS, RA, RB } },
> -
> -{ "srq",     XRC(31,664,0), X_MASK, M601, { RA, RS, RB } },
> -{ "srq.",    XRC(31,664,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "sre",     XRC(31,665,0), X_MASK, M601, { RA, RS, RB } },
> -{ "sre.",    XRC(31,665,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "stfsux",  X(31,695), X_MASK, COM, { FRS, RAS, RB } },
> -
> -{ "sriq",    XRC(31,696,0), X_MASK, M601, { RA, RS, SH } },
> -{ "sriq.",   XRC(31,696,1), X_MASK, M601, { RA, RS, SH } },
> -
> -{ "stswi",   X(31,725), X_MASK, PPCCOM, { RS, RA, NB } },
> -{ "stsi",    X(31,725), X_MASK, PWRCOM, { RS, RA, NB } },
> -
> -{ "stfdx",   X(31,727), X_MASK, COM, { FRS, RA, RB } },
> -
> -{ "srlq",    XRC(31,728,0), X_MASK, M601, { RA, RS, RB } },
> -{ "srlq.",   XRC(31,728,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "sreq",    XRC(31,729,0), X_MASK, M601, { RA, RS, RB } },
> -{ "sreq.",   XRC(31,729,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "stfdux",  X(31,759), X_MASK, COM, { FRS, RAS, RB } },
> -
> -{ "srliq",   XRC(31,760,0), X_MASK, M601, { RA, RS, SH } },
> -{ "srliq.",  XRC(31,760,1), X_MASK, M601, { RA, RS, SH } },
> -
> -{ "lhbrx",   X(31,790), X_MASK, COM, { RT, RA, RB } },
> -
> -{ "sraw",    XRC(31,792,0), X_MASK, PPCCOM, { RA, RS, RB } },
> -{ "sra",     XRC(31,792,0), X_MASK, PWRCOM, { RA, RS, RB } },
> -{ "sraw.",   XRC(31,792,1), X_MASK, PPCCOM, { RA, RS, RB } },
> -{ "sra.",    XRC(31,792,1), X_MASK, PWRCOM, { RA, RS, RB } },
> -
> -{ "srad",    XRC(31,794,0), X_MASK, PPC64, { RA, RS, RB } },
> -{ "srad.",   XRC(31,794,1), X_MASK, PPC64, { RA, RS, RB } },
> -
> -{ "rac",     X(31,818), X_MASK, PWRCOM, { RT, RA, RB } },
> -
> -{ "srawi",   XRC(31,824,0), X_MASK, PPCCOM, { RA, RS, SH } },
> -{ "srai",    XRC(31,824,0), X_MASK, PWRCOM, { RA, RS, SH } },
> -{ "srawi.",  XRC(31,824,1), X_MASK, PPCCOM, { RA, RS, SH } },
> -{ "srai.",   XRC(31,824,1), X_MASK, PWRCOM, { RA, RS, SH } },
> -
> -{ "eieio",   X(31,854), 0xffffffff, PPC, { 0 } },
> -
> -{ "sthbrx",  X(31,918), X_MASK, COM, { RS, RA, RB } },
> -
> -{ "sraq",    XRC(31,920,0), X_MASK, M601, { RA, RS, RB } },
> -{ "sraq.",   XRC(31,920,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "srea",    XRC(31,921,0), X_MASK, M601, { RA, RS, RB } },
> -{ "srea.",   XRC(31,921,1), X_MASK, M601, { RA, RS, RB } },
> -
> -{ "extsh",   XRC(31,922,0), XRB_MASK, PPCCOM, { RA, RS } },
> -{ "exts",    XRC(31,922,0), XRB_MASK, PWRCOM, { RA, RS } },
> -{ "extsh.",  XRC(31,922,1), XRB_MASK, PPCCOM, { RA, RS } },
> -{ "exts.",   XRC(31,922,1), XRB_MASK, PWRCOM, { RA, RS } },
> -
> -{ "sraiq",   XRC(31,952,0), X_MASK, M601, { RA, RS, SH } },
> -{ "sraiq.",  XRC(31,952,1), X_MASK, M601, { RA, RS, SH } },
> -
> -{ "extsb",   XRC(31,954,0), XRB_MASK, PPC, { RA, RS} },
> -{ "extsb.",  XRC(31,954,1), XRB_MASK, PPC, { RA, RS} },
> -
> -{ "iccci",   X(31,966), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "tlbld",   X(31,978), XRTRA_MASK, PPC, { RB } },
> -
> -{ "icbi",    X(31,982), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "stfiwx",  X(31,983), X_MASK, PPC, { FRS, RA, RB } },
> -
> -{ "extsw",   XRC(31,986,0), XRB_MASK, PPC, { RA, RS } },
> -{ "extsw.",  XRC(31,986,1), XRB_MASK, PPC, { RA, RS } },
> -
> -{ "tlbli",   X(31,1010), XRTRA_MASK, PPC, { RB } },
> -
> -{ "dcbz",    X(31,1014), XRT_MASK, PPC, { RA, RB } },
> -{ "dclz",    X(31,1014), XRT_MASK, PPC, { RA, RB } },
> -
> -{ "lwz",     OP(32), OP_MASK, PPCCOM, { RT, D, RA } },
> -{ "l",     OP(32), OP_MASK, PWRCOM, { RT, D, RA } },
> -
> -{ "lwzu",    OP(33), OP_MASK, PPCCOM, { RT, D, RAL } },
> -{ "lu",      OP(33), OP_MASK, PWRCOM, { RT, D, RA } },
> -
> -{ "lbz",     OP(34), OP_MASK, COM, { RT, D, RA } },
> -
> -{ "lbzu",    OP(35), OP_MASK, COM, { RT, D, RAL } },
> -
> -{ "stw",     OP(36), OP_MASK, PPCCOM, { RS, D, RA } },
> -{ "st",      OP(36), OP_MASK, PWRCOM, { RS, D, RA } },
> -
> -{ "stwu",    OP(37), OP_MASK, PPCCOM, { RS, D, RAS } },
> -{ "stu",     OP(37), OP_MASK, PWRCOM, { RS, D, RA } },
> -
> -{ "stb",     OP(38), OP_MASK, COM, { RS, D, RA } },
> -
> -{ "stbu",    OP(39), OP_MASK, COM, { RS, D, RAS } },
> -
> -{ "lhz",     OP(40), OP_MASK, COM, { RT, D, RA } },
> -
> -{ "lhzu",    OP(41), OP_MASK, COM, { RT, D, RAL } },
> -
> -{ "lha",     OP(42), OP_MASK, COM, { RT, D, RA } },
> -
> -{ "lhau",    OP(43), OP_MASK, COM, { RT, D, RAL } },
> -
> -{ "sth",     OP(44), OP_MASK, COM, { RS, D, RA } },
> -
> -{ "sthu",    OP(45), OP_MASK, COM, { RS, D, RAS } },
> -
> -{ "lmw",     OP(46), OP_MASK, PPCCOM, { RT, D, RAM } },
> -{ "lm",      OP(46), OP_MASK, PWRCOM, { RT, D, RA } },
> -
> -{ "stmw",    OP(47), OP_MASK, PPCCOM, { RS, D, RA } },
> -{ "stm",     OP(47), OP_MASK, PWRCOM, { RS, D, RA } },
> -
> -{ "lfs",     OP(48), OP_MASK, COM, { FRT, D, RA } },
> -
> -{ "lfsu",    OP(49), OP_MASK, COM, { FRT, D, RAS } },
> -
> -{ "lfd",     OP(50), OP_MASK, COM, { FRT, D, RA } },
> -
> -{ "lfdu",    OP(51), OP_MASK, COM, { FRT, D, RAS } },
> -
> -{ "stfs",    OP(52), OP_MASK, COM, { FRS, D, RA } },
> -
> -{ "stfsu",   OP(53), OP_MASK, COM, { FRS, D, RAS } },
> -
> -{ "stfd",    OP(54), OP_MASK, COM, { FRS, D, RA } },
> -
> -{ "stfdu",   OP(55), OP_MASK, COM, { FRS, D, RAS } },
> -
> -{ "lfq",     OP(56), OP_MASK, POWER2, { FRT, D, RA } },
> -
> -{ "lfqu",    OP(57), OP_MASK, POWER2, { FRT, D, RA } },
> -
> -{ "ld",      DSO(58,0), DS_MASK, PPC64, { RT, DS, RA } },
> -
> -{ "ldu",     DSO(58,1), DS_MASK, PPC64, { RT, DS, RAL } },
> -
> -{ "lwa",     DSO(58,2), DS_MASK, PPC64, { RT, DS, RA } },
> -
> -{ "fdivs",   A(59,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
> -{ "fdivs.",  A(59,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
> -
> -{ "fsubs",   A(59,20,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
> -{ "fsubs.",  A(59,20,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
> -
> -{ "fadds",   A(59,21,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
> -{ "fadds.",  A(59,21,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
> -
> -{ "fsqrts",  A(59,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
> -{ "fsqrts.", A(59,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
> -
> -{ "fres",    A(59,24,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
> -{ "fres.",   A(59,24,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
> -
> -{ "fmuls",   A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } },
> -{ "fmuls.",  A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } },
> -
> -{ "fmsubs",  A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -{ "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -
> -{ "fmadds",  A(59,29,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -{ "fmadds.", A(59,29,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -
> -{ "fnmsubs", A(59,30,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -{ "fnmsubs.",A(59,30,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -
> -{ "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -{ "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -
> -{ "stfq",    OP(60), OP_MASK, POWER2, { FRS, D, RA } },
> -
> -{ "stfqu",   OP(61), OP_MASK, POWER2, { FRS, D, RA } },
> -
> -{ "std",     DSO(62,0), DS_MASK, PPC64, { RS, DS, RA } },
> -
> -{ "stdu",    DSO(62,1), DS_MASK, PPC64, { RS, DS, RAS } },
> -
> -{ "fcmpu",   X(63,0), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
> -
> -{ "frsp",    XRC(63,12,0), XRA_MASK, COM, { FRT, FRB } },
> -{ "frsp.",   XRC(63,12,1), XRA_MASK, COM, { FRT, FRB } },
> -
> -{ "fctiw",   XRC(63,14,0), XRA_MASK, PPCCOM, { FRT, FRB } },
> -{ "fcir",    XRC(63,14,0), XRA_MASK, POWER2, { FRT, FRB } },
> -{ "fctiw.",  XRC(63,14,1), XRA_MASK, PPCCOM, { FRT, FRB } },
> -{ "fcir.",   XRC(63,14,1), XRA_MASK, POWER2, { FRT, FRB } },
> -
> -{ "fctiwz",  XRC(63,15,0), XRA_MASK, PPCCOM, { FRT, FRB } },
> -{ "fcirz",   XRC(63,15,0), XRA_MASK, POWER2, { FRT, FRB } },
> -{ "fctiwz.", XRC(63,15,1), XRA_MASK, PPCCOM, { FRT, FRB } },
> -{ "fcirz.",  XRC(63,15,1), XRA_MASK, POWER2, { FRT, FRB } },
> -
> -{ "fdiv",    A(63,18,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
> -{ "fd",      A(63,18,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
> -{ "fdiv.",   A(63,18,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
> -{ "fd.",     A(63,18,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
> -
> -{ "fsub",    A(63,20,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
> -{ "fs",      A(63,20,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
> -{ "fsub.",   A(63,20,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
> -{ "fs.",     A(63,20,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
> -
> -{ "fadd",    A(63,21,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
> -{ "fa",      A(63,21,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
> -{ "fadd.",   A(63,21,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
> -{ "fa.",     A(63,21,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
> -
> -{ "fsqrt",   A(63,22,0), AFRAFRC_MASK, POWER2, { FRT, FRB } },
> -{ "fsqrt.",  A(63,22,1), AFRAFRC_MASK, POWER2, { FRT, FRB } },
> -{ "fsqrt",   A(63,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
> -{ "fsqrt.",  A(63,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
> -
> -{ "fsel",    A(63,23,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -{ "fsel.",   A(63,23,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
> -
> -{ "fmul",    A(63,25,0), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
> -{ "fm",      A(63,25,0), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
> -{ "fmul.",   A(63,25,1), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
> -{ "fm.",     A(63,25,1), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
> -
> -{ "frsqrte", A(63,26,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
> -{ "frsqrte.",A(63,26,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
> -
> -{ "fmsub",   A(63,28,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
> -{ "fms",     A(63,28,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
> -{ "fmsub.",  A(63,28,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
> -{ "fms.",    A(63,28,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
> -
> -{ "fmadd",   A(63,29,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
> -{ "fma",     A(63,29,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
> -{ "fmadd.",  A(63,29,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
> -{ "fma.",    A(63,29,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
> -
> -{ "fnmsub",  A(63,30,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
> -{ "fnms",    A(63,30,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
> -{ "fnmsub.", A(63,30,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
> -{ "fnms.",   A(63,30,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
> -
> -{ "fnmadd",  A(63,31,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
> -{ "fnma",    A(63,31,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
> -{ "fnmadd.", A(63,31,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
> -{ "fnma.",   A(63,31,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
> -
> -{ "fcmpo",   X(63,30), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
> -
> -{ "mtfsb1",  XRC(63,38,0), XRARB_MASK, COM, { BT } },
> -{ "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM, { BT } },
> -
> -{ "fneg",    XRC(63,40,0), XRA_MASK, COM, { FRT, FRB } },
> -{ "fneg.",   XRC(63,40,1), XRA_MASK, COM, { FRT, FRB } },
> -
> -{ "mcrfs",   X(63,64), XRB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
> -
> -{ "mtfsb0",  XRC(63,70,0), XRARB_MASK, COM, { BT } },
> -{ "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } },
> -
> -{ "fmr",     XRC(63,72,0), XRA_MASK, COM, { FRT, FRB } },
> -{ "fmr.",    XRC(63,72,1), XRA_MASK, COM, { FRT, FRB } },
> -
> -{ "mtfsfi",  XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
> -{ "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
> -
> -{ "fnabs",   XRC(63,136,0), XRA_MASK, COM, { FRT, FRB } },
> -{ "fnabs.",  XRC(63,136,1), XRA_MASK, COM, { FRT, FRB } },
> -
> -{ "fabs",    XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } },
> -{ "fabs.",   XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } },
> -
> -{ "mffs",    XRC(63,583,0), XRARB_MASK, COM, { FRT } },
> -{ "mffs.",   XRC(63,583,1), XRARB_MASK, COM, { FRT } },
> -
> -{ "mtfsf",   XFL(63,711,0), XFL_MASK, COM, { FLM, FRB } },
> -{ "mtfsf.",  XFL(63,711,1), XFL_MASK, COM, { FLM, FRB } },
> -
> -{ "fctid",   XRC(63,814,0), XRA_MASK, PPC64, { FRT, FRB } },
> -{ "fctid.",  XRC(63,814,1), XRA_MASK, PPC64, { FRT, FRB } },
> -
> -{ "fctidz",  XRC(63,815,0), XRA_MASK, PPC64, { FRT, FRB } },
> -{ "fctidz.", XRC(63,815,1), XRA_MASK, PPC64, { FRT, FRB } },
> -
> -{ "fcfid",   XRC(63,846,0), XRA_MASK, PPC64, { FRT, FRB } },
> -{ "fcfid.",  XRC(63,846,1), XRA_MASK, PPC64, { FRT, FRB } },
> -
> -};
> -
> -const int powerpc_num_opcodes =
> -  sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
> -
> -/* The macro table.  This is only used by the assembler.  */
> -
> -const struct powerpc_macro powerpc_macros[] = {
> -{ "extldi",  4,   PPC64, "rldicr %0,%1,%3,(%2)-1" },
> -{ "extldi.", 4,   PPC64, "rldicr. %0,%1,%3,(%2)-1" },
> -{ "extrdi",  4,   PPC64, "rldicl %0,%1,(%2)+(%3),64-(%2)" },
> -{ "extrdi.", 4,   PPC64, "rldicl. %0,%1,(%2)+(%3),64-(%2)" },
> -{ "insrdi",  4,   PPC64, "rldimi %0,%1,64-((%2)+(%3)),%3" },
> -{ "insrdi.", 4,   PPC64, "rldimi. %0,%1,64-((%2)+(%3)),%3" },
> -{ "rotrdi",  3,   PPC64, "rldicl %0,%1,64-(%2),0" },
> -{ "rotrdi.", 3,   PPC64, "rldicl. %0,%1,64-(%2),0" },
> -{ "sldi",    3,   PPC64, "rldicr %0,%1,%2,63-(%2)" },
> -{ "sldi.",   3,   PPC64, "rldicr. %0,%1,%2,63-(%2)" },
> -{ "srdi",    3,   PPC64, "rldicl %0,%1,64-(%2),%2" },
> -{ "srdi.",   3,   PPC64, "rldicl. %0,%1,64-(%2),%2" },
> -{ "clrrdi",  3,   PPC64, "rldicr %0,%1,0,63-(%2)" },
> -{ "clrrdi.", 3,   PPC64, "rldicr. %0,%1,0,63-(%2)" },
> -{ "clrlsldi",4,   PPC64, "rldic %0,%1,%3,(%2)-(%3)" },
> -{ "clrlsldi.",4,  PPC64, "rldic. %0,%1,%3,(%2)-(%3)" },
> -
> -{ "extlwi",  4,   PPCCOM, "rlwinm %0,%1,%3,0,(%2)-1" },
> -{ "extlwi.", 4,   PPCCOM, "rlwinm. %0,%1,%3,0,(%2)-1" },
> -{ "extrwi",  4,   PPCCOM, "rlwinm %0,%1,(%2)+(%3),32-(%2),31" },
> -{ "extrwi.", 4,   PPCCOM, "rlwinm. %0,%1,(%2)+(%3),32-(%2),31" },
> -{ "inslwi",  4,   PPCCOM, "rlwimi %0,%1,32-(%3),%3,(%2)+(%3)-1" },
> -{ "inslwi.", 4,   PPCCOM, "rlwimi. %0,%1,32-(%3),%3,(%2)+(%3)-1" },
> -{ "insrwi",  4,   PPCCOM, "rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1" },
> -{ "insrwi.", 4,   PPCCOM, "rlwimi. %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
> -{ "rotrwi",  3,   PPCCOM, "rlwinm %0,%1,32-(%2),0,31" },
> -{ "rotrwi.", 3,   PPCCOM, "rlwinm. %0,%1,32-(%2),0,31" },
> -{ "slwi",    3,   PPCCOM, "rlwinm %0,%1,%2,0,31-(%2)" },
> -{ "sli",     3,   PWRCOM, "rlinm %0,%1,%2,0,31-(%2)" },
> -{ "slwi.",   3,   PPCCOM, "rlwinm. %0,%1,%2,0,31-(%2)" },
> -{ "sli.",    3,   PWRCOM, "rlinm. %0,%1,%2,0,31-(%2)" },
> -{ "srwi",    3,   PPCCOM, "rlwinm %0,%1,32-(%2),%2,31" },
> -{ "sri",     3,   PWRCOM, "rlinm %0,%1,32-(%2),%2,31" },
> -{ "srwi.",   3,   PPCCOM, "rlwinm. %0,%1,32-(%2),%2,31" },
> -{ "sri.",    3,   PWRCOM, "rlinm. %0,%1,32-(%2),%2,31" },
> -{ "clrrwi",  3,   PPCCOM, "rlwinm %0,%1,0,0,31-(%2)" },
> -{ "clrrwi.", 3,   PPCCOM, "rlwinm. %0,%1,0,0,31-(%2)" },
> -{ "clrlslwi",4,   PPCCOM, "rlwinm %0,%1,%3,(%2)-(%3),31-(%3)" },
> -{ "clrlslwi.",4,  PPCCOM, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
> -
> -};
> -
> -const int powerpc_num_macros =
> -  sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);
> diff --git a/opcode/ppc.h b/opcode/ppc.h
> deleted file mode 100644
> index c22eb84..0000000
> --- a/opcode/ppc.h
> +++ /dev/null
> @@ -1,248 +0,0 @@
> -/* ppc.h -- Header file for PowerPC opcode table
> -   Copyright 1994, 1995 Free Software Foundation, Inc.
> -   Written by Ian Lance Taylor, Cygnus Support
> -
> -This file is part of GDB, GAS, and the GNU binutils.
> -
> -GDB, GAS, and the GNU binutils are free software; you can redistribute
> -them and/or modify them under the terms of the GNU General Public
> -License as published by the Free Software Foundation; either version
> -1, or (at your option) any later version.
> -
> -GDB, GAS, and the GNU binutils are distributed in the hope that they
> -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 file; see the file COPYING.  If not, write to the Free
> -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
> -
> -#ifndef PPC_H
> -#define PPC_H
> -
> -/* The opcode table is an array of struct powerpc_opcode.  */
> -
> -struct powerpc_opcode
> -{
> -  /* The opcode name.  */
> -  const char *name;
> -
> -  /* The opcode itself.  Those bits which will be filled in with
> -     operands are zeroes.  */
> -  unsigned long opcode;
> -
> -  /* The opcode mask.  This is used by the disassembler.  This is a
> -     mask containing ones indicating those bits which must match the
> -     opcode field, and zeroes indicating those bits which need not
> -     match (and are presumably filled in by operands).  */
> -  unsigned long mask;
> -
> -  /* One bit flags for the opcode.  These are used to indicate which
> -     specific processors support the instructions.  The defined values
> -     are listed below.  */
> -  unsigned long flags;
> -
> -  /* An array of operand codes.  Each code is an index into the
> -     operand table.  They appear in the order which the operands must
> -     appear in assembly code, and are terminated by a zero.  */
> -  unsigned char operands[8];
> -};
> -
> -/* The table itself is sorted by major opcode number, and is otherwise
> -   in the order in which the disassembler should consider
> -   instructions.  */
> -extern const struct powerpc_opcode powerpc_opcodes[];
> -extern const int powerpc_num_opcodes;
> -
> -/* Values defined for the flags field of a struct powerpc_opcode.  */
> -
> -/* Opcode is defined for the PowerPC architecture.  */
> -#define PPC_OPCODE_PPC (01)
> -
> -/* Opcode is defined for the POWER (RS/6000) architecture.  */
> -#define PPC_OPCODE_POWER (02)
> -
> -/* Opcode is defined for the POWER2 (Rios 2) architecture.  */
> -#define PPC_OPCODE_POWER2 (04)
> -
> -/* Opcode is only defined on 32 bit architectures.  */
> -#define PPC_OPCODE_32 (010)
> -
> -/* Opcode is only defined on 64 bit architectures.  */
> -#define PPC_OPCODE_64 (020)
> -
> -/* Opcode is supported by the Motorola PowerPC 601 processor.  The 601
> -   is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions,
> -   but it also supports many additional POWER instructions.  */
> -#define PPC_OPCODE_601 (040)
> -
> -/* Opcode is supported in both the Power and PowerPC architectures
> -   (ie, compiler's -mcpu=common or assembler's -mcom).  */
> -#define PPC_OPCODE_COMMON (0100)
> -
> -/* Opcode is supported for any Power or PowerPC platform (this is
> -   for the assembler's -many option, and it eliminates duplicates).  */
> -#define PPC_OPCODE_ANY (0200)
> -
> -/* A macro to extract the major opcode from an instruction.  */
> -#define PPC_OP(i) (((i) >> 26) & 0x3f)
> -
> -/* The operands table is an array of struct powerpc_operand.  */
> -
> -struct powerpc_operand
> -{
> -  /* The number of bits in the operand.  */
> -  int bits;
> -
> -  /* How far the operand is left shifted in the instruction.  */
> -  int shift;
> -
> -  /* Insertion function.  This is used by the assembler.  To insert an
> -     operand value into an instruction, check this field.
> -
> -     If it is NULL, execute
> -         i |= (op & ((1 << o->bits) - 1)) << o->shift;
> -     (i is the instruction which we are filling in, o is a pointer to
> -     this structure, and op is the opcode value; this assumes twos
> -     complement arithmetic).
> -
> -     If this field is not NULL, then simply call it with the
> -     instruction and the operand value.  It will return the new value
> -     of the instruction.  If the ERRMSG argument is not NULL, then if
> -     the operand value is illegal, *ERRMSG will be set to a warning
> -     string (the operand will be inserted in any case).  If the
> -     operand value is legal, *ERRMSG will be unchanged (most operands
> -     can accept any value).  */
> -  unsigned long (*insert) PARAMS ((unsigned long instruction, long op,
> -   const char **errmsg));
> -
> -  /* Extraction function.  This is used by the disassembler.  To
> -     extract this operand type from an instruction, check this field.
> -
> -     If it is NULL, compute
> -         op = ((i) >> o->shift) & ((1 << o->bits) - 1);
> - if ((o->flags & PPC_OPERAND_SIGNED) != 0
> -     && (op & (1 << (o->bits - 1))) != 0)
> -   op -= 1 << o->bits;
> -     (i is the instruction, o is a pointer to this structure, and op
> -     is the result; this assumes twos complement arithmetic).
> -
> -     If this field is not NULL, then simply call it with the
> -     instruction value.  It will return the value of the operand.  If
> -     the INVALID argument is not NULL, *INVALID will be set to
> -     non-zero if this operand type can not actually be extracted from
> -     this operand (i.e., the instruction does not match).  If the
> -     operand is valid, *INVALID will not be changed.  */
> -  long (*extract) PARAMS ((unsigned long instruction, int *invalid));
> -
> -  /* One bit syntax flags.  */
> -  unsigned long flags;
> -};
> -
> -/* Elements in the table are retrieved by indexing with values from
> -   the operands field of the powerpc_opcodes table.  */
> -
> -extern const struct powerpc_operand powerpc_operands[];
> -
> -/* Values defined for the flags field of a struct powerpc_operand.  */
> -
> -/* This operand takes signed values.  */
> -#define PPC_OPERAND_SIGNED (01)
> -
> -/* This operand takes signed values, but also accepts a full positive
> -   range of values when running in 32 bit mode.  That is, if bits is
> -   16, it takes any value from -0x8000 to 0xffff.  In 64 bit mode,
> -   this flag is ignored.  */
> -#define PPC_OPERAND_SIGNOPT (02)
> -
> -/* This operand does not actually exist in the assembler input.  This
> -   is used to support extended mnemonics such as mr, for which two
> -   operands fields are identical.  The assembler should call the
> -   insert function with any op value.  The disassembler should call
> -   the extract function, ignore the return value, and check the value
> -   placed in the valid argument.  */
> -#define PPC_OPERAND_FAKE (04)
> -
> -/* The next operand should be wrapped in parentheses rather than
> -   separated from this one by a comma.  This is used for the load and
> -   store instructions which want their operands to look like
> -       reg,displacement(reg)
> -   */
> -#define PPC_OPERAND_PARENS (010)
> -
> -/* This operand may use the symbolic names for the CR fields, which
> -   are
> -       lt  0 gt  1 eq  2 so  3 un  3
> -       cr0 0 cr1 1 cr2 2 cr3 3
> -       cr4 4 cr5 5 cr6 6 cr7 7
> -   These may be combined arithmetically, as in cr2*4+gt.  These are
> -   only supported on the PowerPC, not the POWER.  */
> -#define PPC_OPERAND_CR (020)
> -
> -/* This operand names a register.  The disassembler uses this to print
> -   register names with a leading 'r'.  */
> -#define PPC_OPERAND_GPR (040)
> -
> -/* This operand names a floating point register.  The disassembler
> -   prints these with a leading 'f'.  */
> -#define PPC_OPERAND_FPR (0100)
> -
> -/* This operand is a relative branch displacement.  The disassembler
> -   prints these symbolically if possible.  */
> -#define PPC_OPERAND_RELATIVE (0200)
> -
> -/* This operand is an absolute branch address.  The disassembler
> -   prints these symbolically if possible.  */
> -#define PPC_OPERAND_ABSOLUTE (0400)
> -
> -/* This operand is optional, and is zero if omitted.  This is used for
> -   the optional BF and L fields in the comparison instructions.  The
> -   assembler must count the number of operands remaining on the line,
> -   and the number of operands remaining for the opcode, and decide
> -   whether this operand is present or not.  The disassembler should
> -   print this operand out only if it is not zero.  */
> -#define PPC_OPERAND_OPTIONAL (01000)
> -
> -/* This flag is only used with PPC_OPERAND_OPTIONAL.  If this operand
> -   is omitted, then for the next operand use this operand value plus
> -   1, ignoring the next operand field for the opcode.  This wretched
> -   hack is needed because the Power rotate instructions can take
> -   either 4 or 5 operands.  The disassembler should print this operand
> -   out regardless of the PPC_OPERAND_OPTIONAL field.  */
> -#define PPC_OPERAND_NEXT (02000)
> -
> -/* This operand should be regarded as a negative number for the
> -   purposes of overflow checking (i.e., the normal most negative
> -   number is disallowed and one more than the normal most positive
> -   number is allowed).  This flag will only be set for a signed
> -   operand.  */
> -#define PPC_OPERAND_NEGATIVE (04000)
> -
> -/* The POWER and PowerPC assemblers use a few macros.  We keep them
> -   with the operands table for simplicity.  The macro table is an
> -   array of struct powerpc_macro.  */
> -
> -struct powerpc_macro
> -{
> -  /* The macro name.  */
> -  const char *name;
> -
> -  /* The number of operands the macro takes.  */
> -  unsigned int operands;
> -
> -  /* One bit flags for the opcode.  These are used to indicate which
> -     specific processors support the instructions.  The values are the
> -     same as those for the struct powerpc_opcode flags field.  */
> -  unsigned long flags;
> -
> -  /* A format string to turn the macro into a normal instruction.
> -     Each %N in the string is replaced with operand number N (zero
> -     based).  */
> -  const char *format;
> -};
> -
> -extern const struct powerpc_macro powerpc_macros[];
> -extern const int powerpc_num_macros;
> -
> -#endif /* PPC_H */
> diff --git a/opcode/sparc-dis.c b/opcode/sparc-dis.c
> deleted file mode 100644
> index 23216be..0000000
> --- a/opcode/sparc-dis.c
> +++ /dev/null
> @@ -1,868 +0,0 @@
> -/* Print SPARC instructions.
> -   Copyright (C) 1989, 91-93, 1995, 1996 Free Software Foundation, Inc.
> -
> -This program is free software; you can redistribute it and/or modify
> -it under the terms of the GNU General Public License as published by
> -the Free Software Foundation; either version 2 of the License, or
> -(at your option) any later version.
> -
> -This program is distributed in the hope that it will be useful,
> -but WITHOUT ANY WARRANTY; without even the implied warranty of
> -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -GNU General Public License for more details.
> -
> -You should have received a copy of the GNU General Public License
> -along with this program; if not, write to the Free Software
> -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
> -
> -#include "ansidecl.h"
> -#include "opcode/sparc.h"
> -#include "dis-asm.h"
> -
> -#include <string.h>
> -
> -/* Bitmask of v9 architectures.  */
> -#define MASK_V9 ((1 << SPARC_OPCODE_ARCH_V9) \
> - | (1 << SPARC_OPCODE_ARCH_V9A))
> -/* 1 if INSN is for v9 only.  */
> -#define V9_ONLY_P(insn) (! ((insn)->architecture & ~MASK_V9))
> -/* 1 if INSN is for v9.  */
> -#define V9_P(insn) (((insn)->architecture & MASK_V9) != 0)
> -
> -/* For faster lookup, after insns are sorted they are hashed.  */
> -/* ??? I think there is room for even more improvement.  */
> -
> -#define HASH_SIZE 256
> -/* It is important that we only look at insn code bits as that is how the
> -   opcode table is hashed.  OPCODE_BITS is a table of valid bits for each
> -   of the main types (0,1,2,3).  */
> -static int opcode_bits[4] = { 0x01c00000, 0x0, 0x01f80000, 0x01f80000 };
> -#define HASH_INSN(INSN) \
> -  ((((INSN) >> 24) & 0xc0) | (((INSN) & opcode_bits[((INSN) >> 30) & 3]) >> 19))
> -struct opcode_hash {
> -  struct opcode_hash *next;
> -  struct sparc_opcode *opcode;
> -};
> -static struct opcode_hash *opcode_hash_table[HASH_SIZE];
> -static void build_hash_table ();
> -
> -/* Sign-extend a value which is N bits long.  */
> -#define SEX(value, bits) \
> - ((((int)(value)) << ((8 * sizeof (int)) - bits)) \
> - >> ((8 * sizeof (int)) - bits) )
> -
> -static  char *reg_names[] =
> -{ "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
> -  "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
> -  "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
> -  "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
> -  "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
> -  "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
> -  "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
> -  "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
> -  "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
> -  "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
> -  "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
> -  "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
> -/* psr, wim, tbr, fpsr, cpsr are v8 only.  */
> -  "y", "psr", "wim", "tbr", "pc", "npc", "fpsr", "cpsr"
> -};
> -
> -#define freg_names (&reg_names[4 * 8])
> -
> -/* These are ordered according to there register number in
> -   rdpr and wrpr insns.  */
> -static char *v9_priv_reg_names[] =
> -{
> -  "tpc", "tnpc", "tstate", "tt", "tick", "tba", "pstate", "tl",
> -  "pil", "cwp", "cansave", "canrestore", "cleanwin", "otherwin",
> -  "wstate", "fq"
> -  /* "ver" - special cased */
> -};
> -
> -/* Macros used to extract instruction fields.  Not all fields have
> -   macros defined here, only those which are actually used.  */
> -
> -#define X_RD(i) (((i) >> 25) & 0x1f)
> -#define X_RS1(i) (((i) >> 14) & 0x1f)
> -#define X_LDST_I(i) (((i) >> 13) & 1)
> -#define X_ASI(i) (((i) >> 5) & 0xff)
> -#define X_RS2(i) (((i) >> 0) & 0x1f)
> -#define X_IMM13(i) (((i) >> 0) & 0x1fff)
> -#define X_DISP22(i) (((i) >> 0) & 0x3fffff)
> -#define X_IMM22(i) X_DISP22 (i)
> -#define X_DISP30(i) (((i) >> 0) & 0x3fffffff)
> -
> -/* These are for v9.  */
> -#define X_DISP16(i) (((((i) >> 20) & 3) << 14) | (((i) >> 0) & 0x3fff))
> -#define X_DISP19(i) (((i) >> 0) & 0x7ffff)
> -#define X_MEMBAR(i) ((i) & 0x7f)
> -
> -/* Here is the union which was used to extract instruction fields
> -   before the shift and mask macros were written.
> -
> -   union sparc_insn
> -     {
> -       unsigned long int code;
> -       struct
> - {
> -   unsigned int anop:2;
> -   #define op ldst.anop
> -   unsigned int anrd:5;
> -   #define rd ldst.anrd
> -   unsigned int op3:6;
> -   unsigned int anrs1:5;
> -   #define rs1 ldst.anrs1
> -   unsigned int i:1;
> -   unsigned int anasi:8;
> -   #define asi ldst.anasi
> -   unsigned int anrs2:5;
> -   #define rs2 ldst.anrs2
> -   #define shcnt rs2
> - } ldst;
> -       struct
> - {
> -   unsigned int anop:2, anrd:5, op3:6, anrs1:5, i:1;
> -   unsigned int IMM13:13;
> -   #define imm13 IMM13.IMM13
> - } IMM13;
> -       struct
> - {
> -   unsigned int anop:2;
> -   unsigned int a:1;
> -   unsigned int cond:4;
> -   unsigned int op2:3;
> -   unsigned int DISP22:22;
> -   #define disp22 branch.DISP22
> -   #define imm22 disp22
> - } branch;
> -       struct
> - {
> -   unsigned int anop:2;
> -   unsigned int a:1;
> -   unsigned int z:1;
> -   unsigned int rcond:3;
> -   unsigned int op2:3;
> -   unsigned int DISP16HI:2;
> -   unsigned int p:1;
> -   unsigned int _rs1:5;
> -   unsigned int DISP16LO:14;
> - } branch16;
> -       struct
> - {
> -   unsigned int anop:2;
> -   unsigned int adisp30:30;
> -   #define disp30 call.adisp30
> - } call;
> -     };
> -
> -   */
> -
> -/* Nonzero if INSN is the opcode for a delayed branch.  */
> -static int
> -is_delayed_branch (insn)
> -     unsigned long insn;
> -{
> -  struct opcode_hash *op;
> -
> -  for (op = opcode_hash_table[HASH_INSN (insn)]; op; op = op->next)
> -    {
> -      const struct sparc_opcode *opcode = op->opcode;
> -      if ((opcode->match & insn) == opcode->match
> -  && (opcode->lose & insn) == 0)
> - return (opcode->flags & F_DELAYED);
> -    }
> -  return 0;
> -}
> -
> -/* Nonzero of opcode table has been initialized.  */
> -static int opcodes_initialized = 0;
> -
> -/* extern void qsort (); */
> -static int compare_opcodes ();
> -
> -/* Print one instruction from MEMADDR on INFO->STREAM.
> -
> -   We suffix the instruction with a comment that gives the absolute
> -   address involved, as well as its symbolic form, if the instruction
> -   is preceded by a findable `sethi' and it either adds an immediate
> -   displacement to that register, or it is an `add' or `or' instruction
> -   on that register.  */
> -
> -int
> -print_insn_sparc (memaddr, info)
> -     bfd_vma memaddr;
> -     disassemble_info *info;
> -{
> -  FILE *stream = info->stream;
> -  bfd_byte buffer[4];
> -  unsigned long insn;
> -  register unsigned int i;
> -  register struct opcode_hash *op;
> -  int sparc_v9_p = bfd_mach_sparc_v9_p (info->mach);
> -
> -  if (!opcodes_initialized)
> -    {
> -      qsort ((char *) sparc_opcodes, sparc_num_opcodes,
> -     sizeof (sparc_opcodes[0]), compare_opcodes);
> -      build_hash_table (sparc_opcodes, opcode_hash_table, sparc_num_opcodes);
> -      opcodes_initialized = 1;
> -    }
> -
> -  {
> -    int status =
> -      (*info->read_memory_func) (memaddr, buffer, sizeof (buffer), info);
> -    if (status != 0)
> -      {
> - (*info->memory_error_func) (status, memaddr, info);
> - return -1;
> -      }
> -  }
> -
> -  insn = bfd_getb32 (buffer);
> -
> -  info->insn_info_valid = 1; /* We do return this info */
> -  info->insn_type = dis_nonbranch; /* Assume non branch insn */
> -  info->branch_delay_insns = 0; /* Assume no delay */
> -  info->target = 0; /* Assume no target known */
> -
> -  for (op = opcode_hash_table[HASH_INSN (insn)]; op; op = op->next)
> -    {
> -      const struct sparc_opcode *opcode = op->opcode;
> -
> -      /* ??? These architecture tests need to be more selective.  */
> -
> -      /* If the current architecture isn't sparc64, skip sparc64 insns.  */
> -      if (!sparc_v9_p
> -  && V9_ONLY_P (opcode))
> - continue;
> -
> -      /* If the current architecture is sparc64, skip sparc32 only insns.  */
> -      if (sparc_v9_p
> -  && ! V9_P (opcode))
> - continue;
> -
> -      if ((opcode->match & insn) == opcode->match
> -  && (opcode->lose & insn) == 0)
> - {
> -  /* Nonzero means that we have found an instruction which has
> -     the effect of adding or or'ing the imm13 field to rs1.  */
> -  int imm_added_to_rs1 = 0;
> -
> -  /* Nonzero means that we have found a plus sign in the args
> -     field of the opcode table.  */
> -  int found_plus = 0;
> -  
> -  /* Nonzero means we have an annulled branch.  */
> -  int is_annulled = 0;
> -
> -  /* Do we have an `add' or `or' instruction where rs1 is the same
> -     as rsd, and which has the i bit set?  */
> -  if ((opcode->match == 0x80102000 || opcode->match == 0x80002000)
> -  /*  (or) (add)  */
> -      && X_RS1 (insn) == X_RD (insn))
> -    imm_added_to_rs1 = 1;
> -
> -  if (X_RS1 (insn) != X_RD (insn)
> -      && strchr (opcode->args, 'r') != 0)
> -      /* Can't do simple format if source and dest are different.  */
> -      continue;
> -  if (X_RS2 (insn) != X_RD (insn)
> -      && strchr (opcode->args, 'O') != 0)
> -      /* Can't do simple format if source and dest are different.  */
> -      continue;
> -
> -  (*info->fprintf_func) (stream, opcode->name);
> -
> -  {
> -    register const char *s;
> -
> -    if (opcode->args[0] != ',')
> -      (*info->fprintf_func) (stream, " ");
> -    for (s = opcode->args; *s != '\0'; ++s)
> -      {
> - while (*s == ',')
> -  {
> -    (*info->fprintf_func) (stream, ",");
> -    ++s;
> -    switch (*s) {
> -    case 'a':
> -      (*info->fprintf_func) (stream, "a");
> -      is_annulled = 1;
> -      ++s;
> -      continue;
> -    case 'N':
> -      (*info->fprintf_func) (stream, "pn");
> -      ++s;
> -      continue;
> -
> -    case 'T':
> -      (*info->fprintf_func) (stream, "pt");
> -      ++s;
> -      continue;
> -
> -    default:
> -      break;
> -    } /* switch on arg */
> -  } /* while there are comma started args */
> -
> - (*info->fprintf_func) (stream, " ");
> -
> - switch (*s)
> -  {
> -  case '+':
> -    found_plus = 1;
> -
> -    /* note fall-through */
> -  default:
> -    (*info->fprintf_func) (stream, "%c", *s);
> -    break;
> -
> -  case '#':
> -    (*info->fprintf_func) (stream, "0");
> -    break;
> -
> -#define reg(n) (*info->fprintf_func) (stream, "%%%s", reg_names[n])
> -  case '1':
> -  case 'r':
> -    reg (X_RS1 (insn));
> -    break;
> -
> -  case '2':
> -  case 'O':
> -    reg (X_RS2 (insn));
> -    break;
> -
> -  case 'd':
> -    reg (X_RD (insn));
> -    break;
> -#undef reg
> -
> -#define freg(n) (*info->fprintf_func) (stream, "%%%s", freg_names[n])
> -#define fregx(n) (*info->fprintf_func) (stream, "%%%s", freg_names[((n) & ~1) | (((n) & 1) << 5)])
> -  case 'e':
> -    freg (X_RS1 (insn));
> -    break;
> -  case 'v': /* double/even */
> -  case 'V': /* quad/multiple of 4 */
> -    fregx (X_RS1 (insn));
> -    break;
> -
> -  case 'f':
> -    freg (X_RS2 (insn));
> -    break;
> -  case 'B': /* double/even */
> -  case 'R': /* quad/multiple of 4 */
> -    fregx (X_RS2 (insn));
> -    break;
> -
> -  case 'g':
> -    freg (X_RD (insn));
> -    break;
> -  case 'H': /* double/even */
> -  case 'J': /* quad/multiple of 4 */
> -    fregx (X_RD (insn));
> -    break;
> -#undef freg
> -#undef fregx
> -
> -#define creg(n) (*info->fprintf_func) (stream, "%%c%u", (unsigned int) (n))
> -  case 'b':
> -    creg (X_RS1 (insn));
> -    break;
> -
> -  case 'c':
> -    creg (X_RS2 (insn));
> -    break;
> -
> -  case 'D':
> -    creg (X_RD (insn));
> -    break;
> -#undef creg
> -
> -  case 'h':
> -    (*info->fprintf_func) (stream, "%%hi(%#x)",
> -   (0xFFFFFFFF
> -    & ((int) X_IMM22 (insn) << 10)));
> -    break;
> -
> -  case 'i':
> -    {
> -      int imm = SEX (X_IMM13 (insn), 13);
> -
> -      /* Check to see whether we have a 1+i, and take
> - note of that fact.
> -
> - Note: because of the way we sort the table,
> - we will be matching 1+i rather than i+1,
> - so it is OK to assume that i is after +,
> - not before it.  */
> -      if (found_plus)
> - imm_added_to_rs1 = 1;
> -      
> -      if (imm <= 9)
> - (*info->fprintf_func) (stream, "%d", imm);
> -      else
> - (*info->fprintf_func) (stream, "%#x", imm);
> -    }
> -    break;
> -
> -  case 'I': /* 11 bit immediate.  */
> -  case 'j': /* 10 bit immediate.  */
> -    {
> -      int imm;
> -
> -      if (*s == 'I')
> - imm = SEX (X_IMM13 (insn), 11);
> -      else
> - imm = SEX (X_IMM13 (insn), 10);
> -
> -      /* Check to see whether we have a 1+i, and take
> - note of that fact.
> -
> - Note: because of the way we sort the table,
> - we will be matching 1+i rather than i+1,
> - so it is OK to assume that i is after +,
> - not before it.  */
> -      if (found_plus)
> - imm_added_to_rs1 = 1;
> -      
> -      if (imm <= 9)
> - (info->fprintf_func) (stream, "%d", imm);
> -      else
> - (info->fprintf_func) (stream, "%#x", (unsigned) imm);
> -    }
> -    break;
> -
> -  case 'K':
> -    {
> -      int mask = X_MEMBAR (insn);
> -      int bit = 0x40, printed_one = 0;
> -      char *name;
> -
> -      if (mask == 0)
> - (info->fprintf_func) (stream, "0");
> -      else
> - while (bit)
> -  {
> -    if (mask & bit)
> -      {
> - if (printed_one)
> -  (info->fprintf_func) (stream, "|");
> - name = sparc_decode_membar (bit);
> - (info->fprintf_func) (stream, "%s", name);
> - printed_one = 1;
> -      }
> -    bit >>= 1;
> -  }
> -      break;
> -    }
> -
> -  case 'k':
> -    info->target = memaddr + SEX (X_DISP16 (insn), 16) * 4;
> -    (*info->print_address_func) (info->target, info);
> -    break;
> -
> -  case 'G':
> -    info->target = memaddr + SEX (X_DISP19 (insn), 19) * 4;
> -    (*info->print_address_func) (info->target, info);
> -    break;
> -
> -  case '6':
> -  case '7':
> -  case '8':
> -  case '9':
> -    (*info->fprintf_func) (stream, "%%fcc%c", *s - '6' + '0');
> -    break;
> -
> -  case 'z':
> -    (*info->fprintf_func) (stream, "%%icc");
> -    break;
> -
> -  case 'Z':
> -    (*info->fprintf_func) (stream, "%%xcc");
> -    break;
> -
> -  case 'E':
> -    (*info->fprintf_func) (stream, "%%ccr");
> -    break;
> -
> -  case 's':
> -    (*info->fprintf_func) (stream, "%%fprs");
> -    break;
> -
> -  case 'o':
> -    (*info->fprintf_func) (stream, "%%asi");
> -    break;
> -
> -  case 'W':
> -    (*info->fprintf_func) (stream, "%%tick");
> -    break;
> -
> -  case 'P':
> -    (*info->fprintf_func) (stream, "%%pc");
> -    break;
> -
> -  case '?':
> -    if (X_RS1 (insn) == 31)
> -      (*info->fprintf_func) (stream, "%%ver");
> -    else if ((unsigned) X_RS1 (insn) < 16)
> -      (*info->fprintf_func) (stream, "%%%s",
> -     v9_priv_reg_names[X_RS1 (insn)]);
> -    else
> -      (*info->fprintf_func) (stream, "%%reserved");
> -    break;
> -
> -  case '!':
> -    if ((unsigned) X_RD (insn) < 15)
> -      (*info->fprintf_func) (stream, "%%%s",
> -     v9_priv_reg_names[X_RD (insn)]);
> -    else
> -      (*info->fprintf_func) (stream, "%%reserved");
> -    break;
> -
> -  case '*':
> -    {
> -      char *name = sparc_decode_prefetch (X_RD (insn));
> -
> -      if (name)
> - (*info->fprintf_func) (stream, "%s", name);
> -      else
> - (*info->fprintf_func) (stream, "%d", X_RD (insn));
> -      break;
> -    }
> -
> -  case 'M':
> -    (*info->fprintf_func) (stream, "%%asr%d", X_RS1 (insn));
> -    break;
> -    
> -  case 'm':
> -    (*info->fprintf_func) (stream, "%%asr%d", X_RD (insn));
> -    break;
> -    
> -  case 'L':
> -    info->target = memaddr + SEX (X_DISP30 (insn), 30) * 4;
> -    (*info->print_address_func) (info->target, info);
> -    break;
> -
> -  case 'n':
> -    (*info->fprintf_func)
> -      (stream, "%#x", SEX (X_DISP22 (insn), 22));
> -    break;
> -
> -  case 'l':
> -    info->target = memaddr + SEX (X_DISP22 (insn), 22) * 4;
> -    (*info->print_address_func) (info->target, info);
> -    break;
> -
> -  case 'A':
> -    {
> -      char *name = sparc_decode_asi (X_ASI (insn));
> -
> -      if (name)
> - (*info->fprintf_func) (stream, "%s", name);
> -      else
> - (*info->fprintf_func) (stream, "(%d)", X_ASI (insn));
> -      break;
> -    }
> -
> -  case 'C':
> -    (*info->fprintf_func) (stream, "%%csr");
> -    break;
> -
> -  case 'F':
> -    (*info->fprintf_func) (stream, "%%fsr");
> -    break;
> -
> -  case 'p':
> -    (*info->fprintf_func) (stream, "%%psr");
> -    break;
> -
> -  case 'q':
> -    (*info->fprintf_func) (stream, "%%fq");
> -    break;
> -
> -  case 'Q':
> -    (*info->fprintf_func) (stream, "%%cq");
> -    break;
> -
> -  case 't':
> -    (*info->fprintf_func) (stream, "%%tbr");
> -    break;
> -
> -  case 'w':
> -    (*info->fprintf_func) (stream, "%%wim");
> -    break;
> -
> -  case 'x':
> -    (*info->fprintf_func) (stream, "%d",
> -   ((X_LDST_I (insn) << 8)
> -    + X_ASI (insn)));
> -    break;
> -
> -  case 'y':
> -    (*info->fprintf_func) (stream, "%%y");
> -    break;
> -
> -  case 'u':
> -  case 'U':
> -    {
> -      int val = *s == 'U' ? X_RS1 (insn) : X_RD (insn);
> -      char *name = sparc_decode_sparclet_cpreg (val);
> -
> -      if (name)
> - (*info->fprintf_func) (stream, "%s", name);
> -      else
> - (*info->fprintf_func) (stream, "%%cpreg(%d)", val);
> -      break;
> -    }
> -  }
> -      }
> -  }
> -
> -  /* If we are adding or or'ing something to rs1, then
> -     check to see whether the previous instruction was
> -     a sethi to the same register as in the sethi.
> -     If so, attempt to print the result of the add or
> -     or (in this context add and or do the same thing)
> -     and its symbolic value.  */
> -  if (imm_added_to_rs1)
> -    {
> -      unsigned long prev_insn;
> -      int errcode;
> -
> -      errcode =
> - (*info->read_memory_func)
> -  (memaddr - 4, buffer, sizeof (buffer), info);
> -      prev_insn = bfd_getb32 (buffer);
> -
> -      if (errcode == 0)
> - {
> -  /* If it is a delayed branch, we need to look at the
> -     instruction before the delayed branch.  This handles
> -     sequences such as
> -
> -     sethi %o1, %hi(_foo), %o1
> -     call _printf
> -     or %o1, %lo(_foo), %o1
> -     */
> -
> -  if (is_delayed_branch (prev_insn))
> -    {
> -      errcode = (*info->read_memory_func)
> - (memaddr - 8, buffer, sizeof (buffer), info);
> -      prev_insn = bfd_getb32 (buffer);
> -    }
> - }
> -
> -      /* If there was a problem reading memory, then assume
> - the previous instruction was not sethi.  */
> -      if (errcode == 0)
> - {
> -  /* Is it sethi to the same register?  */
> -  if ((prev_insn & 0xc1c00000) == 0x01000000
> -      && X_RD (prev_insn) == X_RS1 (insn))
> -    {
> -      (*info->fprintf_func) (stream, "\t! ");
> -      info->target =
> - (0xFFFFFFFF & (int) X_IMM22 (prev_insn) << 10)
> - | SEX (X_IMM13 (insn), 13);
> -      (*info->print_address_func) (info->target, info);
> -      info->insn_type = dis_dref;
> -      info->data_size = 4;  /* FIXME!!! */
> -    }
> - }
> -    }
> -
> -  if (opcode->flags & (F_UNBR|F_CONDBR|F_JSR))
> -    {
> - /* FIXME -- check is_annulled flag */
> -      if (opcode->flags & F_UNBR)
> - info->insn_type = dis_branch;
> -      if (opcode->flags & F_CONDBR)
> - info->insn_type = dis_condbranch;
> -      if (opcode->flags & F_JSR)
> - info->insn_type = dis_jsr;
> -      if (opcode->flags & F_DELAYED)
> - info->branch_delay_insns = 1;
> -    }
> -
> -  return sizeof (buffer);
> - }
> -    }
> -
> -  info->insn_type = dis_noninsn; /* Mark as non-valid instruction */
> -  (*info->fprintf_func) (stream, "unknown");
> -  return sizeof (buffer);
> -}
> -
> -/* Compare opcodes A and B.  */
> -
> -static int
> -compare_opcodes (a, b)
> -     char *a, *b;
> -{
> -  struct sparc_opcode *op0 = (struct sparc_opcode *) a;
> -  struct sparc_opcode *op1 = (struct sparc_opcode *) b;
> -  unsigned long int match0 = op0->match, match1 = op1->match;
> -  unsigned long int lose0 = op0->lose, lose1 = op1->lose;
> -  register unsigned int i;
> -
> -  /* If a bit is set in both match and lose, there is something
> -     wrong with the opcode table.  */
> -  if (match0 & lose0)
> -    {
> -      fprintf (stderr, "Internal error:  bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n",
> -       op0->name, match0, lose0);
> -      op0->lose &= ~op0->match;
> -      lose0 = op0->lose;
> -    }
> -
> -  if (match1 & lose1)
> -    {
> -      fprintf (stderr, "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n",
> -       op1->name, match1, lose1);
> -      op1->lose &= ~op1->match;
> -      lose1 = op1->lose;
> -    }
> -
> -  /* Because the bits that are variable in one opcode are constant in
> -     another, it is important to order the opcodes in the right order.  */
> -  for (i = 0; i < 32; ++i)
> -    {
> -      unsigned long int x = 1 << i;
> -      int x0 = (match0 & x) != 0;
> -      int x1 = (match1 & x) != 0;
> -
> -      if (x0 != x1)
> - return x1 - x0;
> -    }
> -
> -  for (i = 0; i < 32; ++i)
> -    {
> -      unsigned long int x = 1 << i;
> -      int x0 = (lose0 & x) != 0;
> -      int x1 = (lose1 & x) != 0;
> -
> -      if (x0 != x1)
> - return x1 - x0;
> -    }
> -
> -  /* Put non-sparc64 insns ahead of sparc64 ones.  */
> -  if (V9_ONLY_P (op0) != V9_ONLY_P (op1))
> -    return V9_ONLY_P (op0) - V9_ONLY_P (op1);
> -
> -  /* They are functionally equal.  So as long as the opcode table is
> -     valid, we can put whichever one first we want, on aesthetic grounds.  */
> -
> -  /* Our first aesthetic ground is that aliases defer to real insns.  */
> -  {
> -    int alias_diff = (op0->flags & F_ALIAS) - (op1->flags & F_ALIAS);
> -    if (alias_diff != 0)
> -      /* Put the one that isn't an alias first.  */
> -      return alias_diff;
> -  }
> -
> -  /* Except for aliases, two "identical" instructions had
> -     better have the same opcode.  This is a sanity check on the table.  */
> -  i = strcmp (op0->name, op1->name);
> -  if (i)
> -      if (op0->flags & F_ALIAS) /* If they're both aliases, be arbitrary. */
> -  return i;
> -      else
> -  fprintf (stderr,
> -   "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n",
> -   op0->name, op1->name);
> -
> -  /* Fewer arguments are preferred.  */
> -  {
> -    int length_diff = strlen (op0->args) - strlen (op1->args);
> -    if (length_diff != 0)
> -      /* Put the one with fewer arguments first.  */
> -      return length_diff;
> -  }
> -
> -  /* Put 1+i before i+1.  */
> -  {
> -    char *p0 = (char *) strchr(op0->args, '+');
> -    char *p1 = (char *) strchr(op1->args, '+');
> -
> -    if (p0 && p1)
> -      {
> - /* There is a plus in both operands.  Note that a plus
> -   sign cannot be the first character in args,
> -   so the following [-1]'s are valid.  */
> - if (p0[-1] == 'i' && p1[1] == 'i')
> -  /* op0 is i+1 and op1 is 1+i, so op1 goes first.  */
> -  return 1;
> - if (p0[1] == 'i' && p1[-1] == 'i')
> -  /* op0 is 1+i and op1 is i+1, so op0 goes first.  */
> -  return -1;
> -      }
> -  }
> -
> -  /* Put 1,i before i,1.  */
> -  {
> -    int i0 = strncmp (op0->args, "i,1", 3) == 0;
> -    int i1 = strncmp (op1->args, "i,1", 3) == 0;
> -
> -    if (i0 ^ i1)
> -      return i0 - i1;
> -  }
> -
> -  /* They are, as far as we can tell, identical.
> -     Since qsort may have rearranged the table partially, there is
> -     no way to tell which one was first in the opcode table as
> -     written, so just say there are equal.  */
> -  return 0;
> -}
> -
> -/* Build a hash table from the opcode table.  */
> -
> -static void
> -build_hash_table (table, hash_table, num_opcodes)
> -     struct sparc_opcode *table;
> -     struct opcode_hash **hash_table;
> -     int num_opcodes;
> -{
> -  register int i;
> -  int hash_count[HASH_SIZE];
> -  static struct opcode_hash *hash_buf = NULL;
> -
> -  /* Start at the end of the table and work backwards so that each
> -     chain is sorted.  */
> -
> -  memset (hash_table, 0, HASH_SIZE * sizeof (hash_table[0]));
> -  memset (hash_count, 0, HASH_SIZE * sizeof (hash_count[0]));
> -  if (hash_buf != NULL)
> -    free (hash_buf);
> -  hash_buf = (struct opcode_hash *) xmalloc (sizeof (struct opcode_hash) * num_opcodes);
> -  for (i = num_opcodes - 1; i >= 0; --i)
> -    {
> -      register int hash = HASH_INSN (sparc_opcodes[i].match);
> -      register struct opcode_hash *h = &hash_buf[i];
> -      h->next = hash_table[hash];
> -      h->opcode = &sparc_opcodes[i];
> -      hash_table[hash] = h;
> -      ++hash_count[hash];
> -    }
> -
> -#if 0 /* for debugging */
> -  {
> -    int min_count = num_opcodes, max_count = 0;
> -    int total;
> -
> -    for (i = 0; i < HASH_SIZE; ++i)
> -      {
> -        if (hash_count[i] < min_count)
> -  min_count = hash_count[i];
> - if (hash_count[i] > max_count)
> -  max_count = hash_count[i];
> - total += hash_count[i];
> -      }
> -
> -    printf ("Opcode hash table stats: min %d, max %d, ave %f\n",
> -    min_count, max_count, (double) total / HASH_SIZE);
> -  }
> -#endif
> -}
> diff --git a/opcode/sparc-opc.c b/opcode/sparc-opc.c
> deleted file mode 100644
> index d21835c..0000000
> --- a/opcode/sparc-opc.c
> +++ /dev/null
> @@ -1,1757 +0,0 @@
> -/* Table of opcodes for the sparc.
> -   Copyright (C) 1989, 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
> -
> -This file is part of the BFD library.
> -
> -BFD 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.
> -
> -BFD 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 software; see the file COPYING.  If not, write to
> -the Free Software Foundation, 51 Franklin Street, Fifth Floor,
> -Boston, MA 02110-1301, USA. */
> -
> -/* FIXME-someday: perhaps the ,a's and such should be embedded in the
> -   instruction's name rather than the args.  This would make gas faster, pinsn
> -   slower, but would mess up some macros a bit.  xoxorich. */
> -
> -/* v9 FIXME: Doesn't accept `setsw', `setx' synthetic instructions for v9.  */
> -
> -#include <stdio.h>
> -#include "ansidecl.h"
> -#include "opcode/sparc.h"
> -
> -/* Some defines to make life easy.  */
> -#define MASK_V6 (1 << SPARC_OPCODE_ARCH_V6)
> -#define MASK_V7 (1 << SPARC_OPCODE_ARCH_V7)
> -#define MASK_V8 (1 << SPARC_OPCODE_ARCH_V8)
> -#define MASK_SPARCLET (1 << SPARC_OPCODE_ARCH_SPARCLET)
> -#define MASK_SPARCLITE (1 << SPARC_OPCODE_ARCH_SPARCLITE)
> -#define MASK_V9 (1 << SPARC_OPCODE_ARCH_V9)
> -#define MASK_V9A (1 << SPARC_OPCODE_ARCH_V9A)
> -
> -/* Bit masks of architectures supporting the insn.  */
> -
> -#define v6 (MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLET \
> - | MASK_SPARCLITE | MASK_V9 | MASK_V9A)
> -#define v7 (MASK_V7 | MASK_V8 | MASK_SPARCLET \
> - | MASK_SPARCLITE | MASK_V9 | MASK_V9A)
> -/* Although not all insns are implemented in hardware, sparclite is defined
> -   to be a superset of v8.  Unimplemented insns trap and are then theoretically
> -   implemented in software.
> -   It's not clear that the same is true for sparclet, although the docs
> -   suggest it is.  Rather than complicating things, the sparclet assembler
> -   recognizes all v8 insns.  */
> -#define v8 (MASK_V8 | MASK_SPARCLET | MASK_SPARCLITE | MASK_V9 | MASK_V9A)
> -#define sparclet (MASK_SPARCLET)
> -#define sparclite (MASK_SPARCLITE)
> -#define v9 (MASK_V9 | MASK_V9A)
> -#define v9a (MASK_V9A)
> -/* v6 insns not supported by v9 */
> -#define v6notv9 (MASK_V6 | MASK_V7 | MASK_V8 \
> - | MASK_SPARCLET | MASK_SPARCLITE)
> -
> -/* Table of opcode architectures.
> -   The order is defined in opcode/sparc.h.  */
> -const struct sparc_opcode_arch sparc_opcode_archs[] = {
> -  { "v6", MASK_V6 },
> -  { "v7", MASK_V6 | MASK_V7 },
> -  { "v8", MASK_V6 | MASK_V7 | MASK_V8 },
> -  { "sparclet", MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLET },
> -  { "sparclite", MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLITE },
> -  /* ??? Don't some v8 priviledged insns conflict with v9?  */
> -  { "v9", MASK_V6 | MASK_V7 | MASK_V8 | MASK_V9 },
> -  /* v9 with ultrasparc additions */
> -  { "v9a", MASK_V6 | MASK_V7 | MASK_V8 | MASK_V9 | MASK_V9A },
> -  { NULL, 0 }
> -};
> -
> -/* Given NAME, return it's architecture entry.  */
> -
> -enum sparc_opcode_arch_val
> -sparc_opcode_lookup_arch (name)
> -     const char *name;
> -{
> -  const struct sparc_opcode_arch *p;
> -
> -  for (p = &sparc_opcode_archs[0]; p->name; ++p)
> -    {
> -      if (strcmp (name, p->name) == 0)
> - return (enum sparc_opcode_arch_val) (p - &sparc_opcode_archs[0]);
> -    }
> -
> -  return SPARC_OPCODE_ARCH_BAD;
> -}
> -
> -/* Branch condition field.  */
> -#define COND(x) (((x)&0xf)<<25)
> -
> -/* v9: Move (MOVcc and FMOVcc) condition field.  */
> -#define MCOND(x,i_or_f) ((((i_or_f)&1)<<18)|(((x)>>11)&(0xf<<14))) /* v9 */
> -
> -/* v9: Move register (MOVRcc and FMOVRcc) condition field.  */
> -#define RCOND(x) (((x)&0x7)<<10) /* v9 */
> -
> -#define CONDA (COND(0x8))
> -#define CONDCC (COND(0xd))
> -#define CONDCS (COND(0x5))
> -#define CONDE (COND(0x1))
> -#define CONDG (COND(0xa))
> -#define CONDGE (COND(0xb))
> -#define CONDGU (COND(0xc))
> -#define CONDL (COND(0x3))
> -#define CONDLE (COND(0x2))
> -#define CONDLEU (COND(0x4))
> -#define CONDN (COND(0x0))
> -#define CONDNE (COND(0x9))
> -#define CONDNEG (COND(0x6))
> -#define CONDPOS (COND(0xe))
> -#define CONDVC (COND(0xf))
> -#define CONDVS (COND(0x7))
> -
> -#define CONDNZ CONDNE
> -#define CONDZ CONDE
> -#define CONDGEU CONDCC
> -#define CONDLU CONDCS
> -
> -#define FCONDA (COND(0x8))
> -#define FCONDE (COND(0x9))
> -#define FCONDG (COND(0x6))
> -#define FCONDGE (COND(0xb))
> -#define FCONDL (COND(0x4))
> -#define FCONDLE (COND(0xd))
> -#define FCONDLG (COND(0x2))
> -#define FCONDN (COND(0x0))
> -#define FCONDNE (COND(0x1))
> -#define FCONDO (COND(0xf))
> -#define FCONDU (COND(0x7))
> -#define FCONDUE (COND(0xa))
> -#define FCONDUG (COND(0x5))
> -#define FCONDUGE (COND(0xc))
> -#define FCONDUL (COND(0x3))
> -#define FCONDULE (COND(0xe))
> -
> -#define FCONDNZ FCONDNE
> -#define FCONDZ FCONDE
> -
> -#define ICC (0) /* v9 */
> -#define XCC (1<<12) /* v9 */
> -#define FCC(x) (((x)&0x3)<<11) /* v9 */
> -#define FBFCC(x) (((x)&0x3)<<20) /* v9 */
> -
> -/* The order of the opcodes in the table is significant:
> -
> - * The assembler requires that all instances of the same mnemonic must
> - be consecutive. If they aren't, the assembler will bomb at runtime.
> -
> - * The disassembler should not care about the order of the opcodes.
> -
> -*/
> -
> -/* Entries for commutative arithmetic operations.  */
> -/* ??? More entries can make use of this.  */
> -#define commuteop(opcode, op3, arch_mask) \
> -{ opcode, F3(2, op3, 0), F3(~2, ~op3, ~0)|ASI(~0), "1,2,d", 0, arch_mask }, \
> -{ opcode, F3(2, op3, 1), F3(~2, ~op3, ~1), "1,i,d", 0, arch_mask }, \
> -{ opcode, F3(2, op3, 1), F3(~2, ~op3, ~1), "i,1,d", 0, arch_mask }
> -
> -struct sparc_opcode sparc_opcodes[] = {
> -
> -{ "ld", F3(3, 0x00, 0), F3(~3, ~0x00, ~0), "[1+2],d", 0, v6 },
> -{ "ld", F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0, "[1],d", 0, v6 }, /* ld [rs1+%g0],d */
> -{ "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[1+i],d", 0, v6 },
> -{ "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[i+1],d", 0, v6 },
> -{ "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0, "[i],d", 0, v6 },
> -{ "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ld [rs1+0],d */
> -{ "ld", F3(3, 0x20, 0), F3(~3, ~0x20, ~0), "[1+2],g", 0, v6 },
> -{ "ld", F3(3, 0x20, 0), F3(~3, ~0x20, ~0)|RS2_G0, "[1],g", 0, v6 }, /* ld [rs1+%g0],d */
> -{ "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1), "[1+i],g", 0, v6 },
> -{ "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1), "[i+1],g", 0, v6 },
> -{ "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|RS1_G0, "[i],g", 0, v6 },
> -{ "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|SIMM13(~0), "[1],g", 0, v6 }, /* ld [rs1+0],d */
> -
> -{ "ld", F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RD(~0), "[1+2],F", 0, v6 },
> -{ "ld", F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RS2_G0|RD(~0),"[1],F", 0, v6 }, /* ld [rs1+%g0],d */
> -{ "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0), "[1+i],F", 0, v6 },
> -{ "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0), "[i+1],F", 0, v6 },
> -{ "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~0),"[i],F", 0, v6 },
> -{ "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~0),"[1],F", 0, v6 }, /* ld [rs1+0],d */
> -
> -{ "ld", F3(3, 0x30, 0), F3(~3, ~0x30, ~0), "[1+2],D", 0, v6notv9 },
> -{ "ld", F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0, "[1],D", 0, v6notv9 }, /* ld [rs1+%g0],d */
> -{ "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[1+i],D", 0, v6notv9 },
> -{ "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[i+1],D", 0, v6notv9 },
> -{ "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0, "[i],D", 0, v6notv9 },
> -{ "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0), "[1],D", 0, v6notv9 }, /* ld [rs1+0],d */
> -{ "ld", F3(3, 0x31, 0), F3(~3, ~0x31, ~0), "[1+2],C", 0, v6notv9 },
> -{ "ld", F3(3, 0x31, 0), F3(~3, ~0x31, ~0)|RS2_G0, "[1],C", 0, v6notv9 }, /* ld [rs1+%g0],d */
> -{ "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1), "[1+i],C", 0, v6notv9 },
> -{ "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1), "[i+1],C", 0, v6notv9 },
> -{ "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|RS1_G0, "[i],C", 0, v6notv9 },
> -{ "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|SIMM13(~0), "[1],C", 0, v6notv9 }, /* ld [rs1+0],d */
> -
> -/* The v9 LDUW is the same as the old 'ld' opcode, it is not the same as the
> -   'ld' pseudo-op in v9.  */
> -{ "lduw", F3(3, 0x00, 0), F3(~3, ~0x00, ~0), "[1+2],d", F_ALIAS, v9 },
> -{ "lduw", F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0, "[1],d", F_ALIAS, v9 }, /* ld [rs1+%g0],d */
> -{ "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[1+i],d", F_ALIAS, v9 },
> -{ "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[i+1],d", F_ALIAS, v9 },
> -{ "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0, "[i],d", F_ALIAS, v9 },
> -{ "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0), "[1],d", F_ALIAS, v9 }, /* ld [rs1+0],d */
> -
> -{ "ldd", F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI(~0), "[1+2],d", 0, v6 },
> -{ "ldd", F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldd [rs1+%g0],d */
> -{ "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1), "[1+i],d", 0, v6 },
> -{ "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1), "[i+1],d", 0, v6 },
> -{ "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|RS1_G0, "[i],d", 0, v6 },
> -{ "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldd [rs1+0],d */
> -{ "ldd", F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI(~0), "[1+2],H", 0, v6 },
> -{ "ldd", F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI_RS2(~0), "[1],H", 0, v6 }, /* ldd [rs1+%g0],d */
> -{ "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1), "[1+i],H", 0, v6 },
> -{ "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1), "[i+1],H", 0, v6 },
> -{ "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|RS1_G0, "[i],H", 0, v6 },
> -{ "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|SIMM13(~0), "[1],H", 0, v6 }, /* ldd [rs1+0],d */
> -
> -{ "ldd", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI(~0), "[1+2],D", 0, v6notv9 },
> -{ "ldd", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI_RS2(~0), "[1],D", 0, v6notv9 }, /* ldd [rs1+%g0],d */
> -{ "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[1+i],D", 0, v6notv9 },
> -{ "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[i+1],D", 0, v6notv9 },
> -{ "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0, "[i],D", 0, v6notv9 },
> -{ "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0), "[1],D", 0, v6notv9 }, /* ldd [rs1+0],d */
> -
> -{ "ldq", F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI(~0), "[1+2],J", 0, v9 },
> -{ "ldq", F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI_RS2(~0), "[1],J", 0, v9 }, /* ldd [rs1+%g0],d */
> -{ "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1), "[1+i],J", 0, v9 },
> -{ "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1), "[i+1],J", 0, v9 },
> -{ "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|RS1_G0, "[i],J", 0, v9 },
> -{ "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|SIMM13(~0), "[1],J", 0, v9 }, /* ldd [rs1+0],d */
> -
> -{ "ldsb", F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI(~0), "[1+2],d", 0, v6 },
> -{ "ldsb", F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldsb [rs1+%g0],d */
> -{ "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1), "[1+i],d", 0, v6 },
> -{ "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1), "[i+1],d", 0, v6 },
> -{ "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|RS1_G0, "[i],d", 0, v6 },
> -{ "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldsb [rs1+0],d */
> -
> -{ "ldsh", F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldsh [rs1+%g0],d */
> -{ "ldsh", F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI(~0), "[1+2],d", 0, v6 },
> -{ "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1), "[1+i],d", 0, v6 },
> -{ "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1), "[i+1],d", 0, v6 },
> -{ "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|RS1_G0, "[i],d", 0, v6 },
> -{ "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldsh [rs1+0],d */
> -
> -{ "ldstub", F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI(~0), "[1+2],d", 0, v6 },
> -{ "ldstub", F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldstub [rs1+%g0],d */
> -{ "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1), "[1+i],d", 0, v6 },
> -{ "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1), "[i+1],d", 0, v6 },
> -{ "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|RS1_G0, "[i],d", 0, v6 },
> -{ "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldstub [rs1+0],d */
> -
> -{ "ldsw", F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI(~0), "[1+2],d", 0, v9 },
> -{ "ldsw", F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI_RS2(~0), "[1],d", 0, v9 }, /* ldsw [rs1+%g0],d */
> -{ "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1), "[1+i],d", 0, v9 },
> -{ "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1), "[i+1],d", 0, v9 },
> -{ "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|RS1_G0, "[i],d", 0, v9 },
> -{ "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|SIMM13(~0), "[1],d", 0, v9 }, /* ldsw [rs1+0],d */
> -
> -{ "ldub", F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI(~0), "[1+2],d", 0, v6 },
> -{ "ldub", F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldub [rs1+%g0],d */
> -{ "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1), "[1+i],d", 0, v6 },
> -{ "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1), "[i+1],d", 0, v6 },
> -{ "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|RS1_G0, "[i],d", 0, v6 },
> -{ "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldub [rs1+0],d */
> -
> -{ "lduh", F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI(~0), "[1+2],d", 0, v6 },
> -{ "lduh", F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* lduh [rs1+%g0],d */
> -{ "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1), "[1+i],d", 0, v6 },
> -{ "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1), "[i+1],d", 0, v6 },
> -{ "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|RS1_G0, "[i],d", 0, v6 },
> -{ "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* lduh [rs1+0],d */
> -
> -{ "ldx", F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI(~0), "[1+2],d", 0, v9 },
> -{ "ldx", F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI_RS2(~0), "[1],d", 0, v9 }, /* ldx [rs1+%g0],d */
> -{ "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1), "[1+i],d", 0, v9 },
> -{ "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1), "[i+1],d", 0, v9 },
> -{ "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|RS1_G0, "[i],d", 0, v9 },
> -{ "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|SIMM13(~0), "[1],d", 0, v9 }, /* ldx [rs1+0],d */
> -
> -{ "ldx", F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RD(~1), "[1+2],F", 0, v9 },
> -{ "ldx", F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RS2_G0|RD(~1), "[1],F", 0, v9 }, /* ld [rs1+%g0],d */
> -{ "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1), "[1+i],F", 0, v9 },
> -{ "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1), "[i+1],F", 0, v9 },
> -{ "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~1), "[i],F", 0, v9 },
> -{ "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~1),"[1],F", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "lda", F3(3, 0x10, 0), F3(~3, ~0x10, ~0), "[1+2]A,d", 0, v6 },
> -{ "lda", F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lda [rs1+%g0],d */
> -{ "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[1+i]o,d", 0, v9 },
> -{ "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[i+1]o,d", 0, v9 },
> -{ "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -{ "lda", F3(3, 0x30, 0), F3(~3, ~0x30, ~0), "[1+2]A,g", 0, v9 },
> -{ "lda", F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0, "[1]A,g", 0, v9 }, /* lda [rs1+%g0],d */
> -{ "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[1+i]o,g", 0, v9 },
> -{ "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[i+1]o,g", 0, v9 },
> -{ "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0, "[i]o,g", 0, v9 },
> -{ "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0), "[1]o,g", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "ldda", F3(3, 0x13, 0), F3(~3, ~0x13, ~0), "[1+2]A,d", 0, v6 },
> -{ "ldda", F3(3, 0x13, 0), F3(~3, ~0x13, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldda [rs1+%g0],d */
> -{ "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1), "[1+i]o,d", 0, v9 },
> -{ "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1), "[i+1]o,d", 0, v9 },
> -{ "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "ldda", F3(3, 0x33, 0), F3(~3, ~0x33, ~0), "[1+2]A,H", 0, v9 },
> -{ "ldda", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|RS2_G0, "[1]A,H", 0, v9 }, /* ldda [rs1+%g0],d */
> -{ "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[1+i]o,H", 0, v9 },
> -{ "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[i+1]o,H", 0, v9 },
> -{ "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0, "[i]o,H", 0, v9 },
> -{ "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0), "[1]o,H", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "ldqa", F3(3, 0x32, 0), F3(~3, ~0x32, ~0), "[1+2]A,J", 0, v9 },
> -{ "ldqa", F3(3, 0x32, 0), F3(~3, ~0x32, ~0)|RS2_G0, "[1]A,J", 0, v9 }, /* ldd [rs1+%g0],d */
> -{ "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1), "[1+i]o,J", 0, v9 },
> -{ "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1), "[i+1]o,J", 0, v9 },
> -{ "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|RS1_G0, "[i]o,J", 0, v9 },
> -{ "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|SIMM13(~0), "[1]o,J", 0, v9 }, /* ldd [rs1+0],d */
> -
> -{ "ldsba", F3(3, 0x19, 0), F3(~3, ~0x19, ~0), "[1+2]A,d", 0, v6 },
> -{ "ldsba", F3(3, 0x19, 0), F3(~3, ~0x19, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldsba [rs1+%g0],d */
> -{ "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1), "[1+i]o,d", 0, v9 },
> -{ "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1), "[i+1]o,d", 0, v9 },
> -{ "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "ldsha", F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0), "[1+2]A,d", 0, v6 },
> -{ "ldsha", F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldsha [rs1+%g0],d */
> -{ "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1), "[1+i]o,d", 0, v9 },
> -{ "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1), "[i+1]o,d", 0, v9 },
> -{ "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "ldstuba", F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0), "[1+2]A,d", 0, v6 },
> -{ "ldstuba", F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldstuba [rs1+%g0],d */
> -{ "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1), "[1+i]o,d", 0, v9 },
> -{ "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1), "[i+1]o,d", 0, v9 },
> -{ "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "ldswa", F3(3, 0x18, 0), F3(~3, ~0x18, ~0), "[1+2]A,d", 0, v9 },
> -{ "ldswa", F3(3, 0x18, 0), F3(~3, ~0x18, ~0)|RS2_G0, "[1]A,d", 0, v9 }, /* lda [rs1+%g0],d */
> -{ "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1), "[1+i]o,d", 0, v9 },
> -{ "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1), "[i+1]o,d", 0, v9 },
> -{ "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "lduba", F3(3, 0x11, 0), F3(~3, ~0x11, ~0), "[1+2]A,d", 0, v6 },
> -{ "lduba", F3(3, 0x11, 0), F3(~3, ~0x11, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lduba [rs1+%g0],d */
> -{ "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1), "[1+i]o,d", 0, v9 },
> -{ "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1), "[i+1]o,d", 0, v9 },
> -{ "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "lduha", F3(3, 0x12, 0), F3(~3, ~0x12, ~0), "[1+2]A,d", 0, v6 },
> -{ "lduha", F3(3, 0x12, 0), F3(~3, ~0x12, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lduha [rs1+%g0],d */
> -{ "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1), "[1+i]o,d", 0, v9 },
> -{ "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1), "[i+1]o,d", 0, v9 },
> -{ "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "lduwa", F3(3, 0x10, 0), F3(~3, ~0x10, ~0), "[1+2]A,d", F_ALIAS, v9 }, /* lduwa === lda */
> -{ "lduwa", F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0, "[1]A,d", F_ALIAS, v9 }, /* lda [rs1+%g0],d */
> -{ "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[1+i]o,d", F_ALIAS, v9 },
> -{ "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[i+1]o,d", F_ALIAS, v9 },
> -{ "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0, "[i]o,d", F_ALIAS, v9 },
> -{ "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0), "[1]o,d", F_ALIAS, v9 }, /* ld [rs1+0],d */
> -
> -{ "ldxa", F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0), "[1+2]A,d", 0, v9 }, /* lduwa === lda */
> -{ "ldxa", F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0)|RS2_G0, "[1]A,d", 0, v9 }, /* lda [rs1+%g0],d */
> -{ "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1), "[1+i]o,d", 0, v9 },
> -{ "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1), "[i+1]o,d", 0, v9 },
> -{ "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
> -
> -{ "st", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
> -{ "st", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* st d,[rs1+%g0] */
> -{ "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", 0, v6 },
> -{ "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", 0, v6 },
> -{ "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", 0, v6 },
> -{ "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* st d,[rs1+0] */
> -{ "st", F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI(~0), "g,[1+2]", 0, v6 },
> -{ "st", F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI_RS2(~0), "g,[1]", 0, v6 }, /* st d[rs1+%g0] */
> -{ "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1), "g,[1+i]", 0, v6 },
> -{ "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1), "g,[i+1]", 0, v6 },
> -{ "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|RS1_G0, "g,[i]", 0, v6 },
> -{ "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|SIMM13(~0), "g,[1]", 0, v6 }, /* st d,[rs1+0] */
> -
> -{ "st", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI(~0), "D,[1+2]", 0, v6notv9 },
> -{ "st", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI_RS2(~0), "D,[1]", 0, v6notv9 }, /* st d,[rs1+%g0] */
> -{ "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "D,[1+i]", 0, v6notv9 },
> -{ "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "D,[i+1]", 0, v6notv9 },
> -{ "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0, "D,[i]", 0, v6notv9 },
> -{ "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0), "D,[1]", 0, v6notv9 }, /* st d,[rs1+0] */
> -{ "st", F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI(~0), "C,[1+2]", 0, v6notv9 },
> -{ "st", F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI_RS2(~0), "C,[1]", 0, v6notv9 }, /* st d,[rs1+%g0] */
> -{ "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1), "C,[1+i]", 0, v6notv9 },
> -{ "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1), "C,[i+1]", 0, v6notv9 },
> -{ "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|RS1_G0, "C,[i]", 0, v6notv9 },
> -{ "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|SIMM13(~0), "C,[1]", 0, v6notv9 }, /* st d,[rs1+0] */
> -
> -{ "st", F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI(~0), "F,[1+2]", 0, v6 },
> -{ "st", F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI_RS2(~0), "F,[1]", 0, v6 }, /* st d,[rs1+%g0] */
> -{ "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0, "F,[1+i]", 0, v6 },
> -{ "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0, "F,[i+1]", 0, v6 },
> -{ "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|RS1_G0, "F,[i]", 0, v6 },
> -{ "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|SIMM13(~0), "F,[1]", 0, v6 }, /* st d,[rs1+0] */
> -
> -{ "stw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v9 },
> -{ "stw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+%g0] */
> -{ "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", F_ALIAS, v9 },
> -{ "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", F_ALIAS, v9 },
> -{ "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", F_ALIAS, v9 },
> -{ "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+0] */
> -
> -{ "sta", F3(3, 0x14, 0), F3(~3, ~0x14, ~0), "d,[1+2]A", 0, v6 },
> -{ "sta", F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* sta d,[rs1+%g0] */
> -{ "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[1+i]o", 0, v9 },
> -{ "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[i+1]o", 0, v9 },
> -{ "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0, "d,[i]o", 0, v9 },
> -{ "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* st d,[rs1+0] */
> -
> -{ "sta", F3(3, 0x34, 0), F3(~3, ~0x34, ~0), "g,[1+2]A", 0, v9 },
> -{ "sta", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|RS2(~0), "g,[1]A", 0, v9 }, /* sta d,[rs1+%g0] */
> -{ "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "g,[1+i]o", 0, v9 },
> -{ "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "g,[i+1]o", 0, v9 },
> -{ "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0, "g,[i]o", 0, v9 },
> -{ "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0), "g,[1]o", 0, v9 }, /* st d,[rs1+0] */
> -
> -{ "stwa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0), "d,[1+2]A", F_ALIAS, v9 },
> -{ "stwa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v9 }, /* sta d,[rs1+%g0] */
> -{ "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[1+i]o", F_ALIAS, v9 },
> -{ "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[i+1]o", F_ALIAS, v9 },
> -{ "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
> -{ "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* st d,[rs1+0] */
> -
> -{ "stb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
> -{ "stb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* stb d,[rs1+%g0] */
> -{ "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[1+i]", 0, v6 },
> -{ "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[i+1]", 0, v6 },
> -{ "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0, "d,[i]", 0, v6 },
> -{ "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* stb d,[rs1+0] */
> -
> -{ "stba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0), "d,[1+2]A", 0, v6 },
> -{ "stba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stba d,[rs1+%g0] */
> -{ "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[1+i]o", 0, v9 },
> -{ "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[i+1]o", 0, v9 },
> -{ "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0, "d,[i]o", 0, v9 },
> -{ "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* stb d,[rs1+0] */
> -
> -{ "std", F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
> -{ "std", F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* std d,[rs1+%g0] */
> -{ "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1), "d,[1+i]", 0, v6 },
> -{ "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1), "d,[i+1]", 0, v6 },
> -{ "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|RS1_G0, "d,[i]", 0, v6 },
> -{ "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* std d,[rs1+0] */
> -
> -{ "std", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0), "q,[1+2]", 0, v6notv9 },
> -{ "std", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0), "q,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
> -{ "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "q,[1+i]", 0, v6notv9 },
> -{ "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "q,[i+1]", 0, v6notv9 },
> -{ "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0, "q,[i]", 0, v6notv9 },
> -{ "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0), "q,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
> -{ "std", F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI(~0), "H,[1+2]", 0, v6 },
> -{ "std", F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI_RS2(~0), "H,[1]", 0, v6 }, /* std d,[rs1+%g0] */
> -{ "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1), "H,[1+i]", 0, v6 },
> -{ "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1), "H,[i+1]", 0, v6 },
> -{ "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|RS1_G0, "H,[i]", 0, v6 },
> -{ "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|SIMM13(~0), "H,[1]", 0, v6 }, /* std d,[rs1+0] */
> -
> -{ "std", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0), "Q,[1+2]", 0, v6notv9 },
> -{ "std", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0), "Q,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
> -{ "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "Q,[1+i]", 0, v6notv9 },
> -{ "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "Q,[i+1]", 0, v6notv9 },
> -{ "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0, "Q,[i]", 0, v6notv9 },
> -{ "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0), "Q,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
> -{ "std", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI(~0), "D,[1+2]", 0, v6notv9 },
> -{ "std", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI_RS2(~0), "D,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
> -{ "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "D,[1+i]", 0, v6notv9 },
> -{ "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "D,[i+1]", 0, v6notv9 },
> -{ "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0, "D,[i]", 0, v6notv9 },
> -{ "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0), "D,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
> -
> -{ "stda", F3(3, 0x17, 0), F3(~3, ~0x17, ~0), "d,[1+2]A", 0, v6 },
> -{ "stda", F3(3, 0x17, 0), F3(~3, ~0x17, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stda d,[rs1+%g0] */
> -{ "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1), "d,[1+i]o", 0, v9 },
> -{ "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1), "d,[i+1]o", 0, v9 },
> -{ "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|RS1_G0, "d,[i]o", 0, v9 },
> -{ "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* std d,[rs1+0] */
> -{ "stda", F3(3, 0x37, 0), F3(~3, ~0x37, ~0), "H,[1+2]A", 0, v9 },
> -{ "stda", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|RS2(~0), "H,[1]A", 0, v9 }, /* stda d,[rs1+%g0] */
> -{ "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "H,[1+i]o", 0, v9 },
> -{ "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "H,[i+1]o", 0, v9 },
> -{ "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0, "H,[i]o", 0, v9 },
> -{ "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0), "H,[1]o", 0, v9 }, /* std d,[rs1+0] */
> -
> -{ "sth", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
> -{ "sth", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* sth d,[rs1+%g0] */
> -{ "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[1+i]", 0, v6 },
> -{ "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[i+1]", 0, v6 },
> -{ "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0, "d,[i]", 0, v6 },
> -{ "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* sth d,[rs1+0] */
> -
> -{ "stha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0), "d,[1+2]A", 0, v6 },
> -{ "stha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stha ,[rs1+%g0] */
> -{ "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[1+i]o", 0, v9 },
> -{ "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[i+1]o", 0, v9 },
> -{ "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0, "d,[i]o", 0, v9 },
> -{ "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* sth d,[rs1+0] */
> -
> -{ "stx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI(~0), "d,[1+2]", 0, v9 },
> -{ "stx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI_RS2(~0), "d,[1]", 0, v9 }, /* stx d,[rs1+%g0] */
> -{ "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1), "d,[1+i]", 0, v9 },
> -{ "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1), "d,[i+1]", 0, v9 },
> -{ "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RS1_G0, "d,[i]", 0, v9 },
> -{ "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|SIMM13(~0), "d,[1]", 0, v9 }, /* stx d,[rs1+0] */
> -
> -{ "stx", F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI(~0)|RD(~1), "F,[1+2]", 0, v9 },
> -{ "stx", F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI_RS2(~0)|RD(~1),"F,[1]", 0, v9 }, /* stx d,[rs1+%g0] */
> -{ "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1), "F,[1+i]", 0, v9 },
> -{ "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1), "F,[i+1]", 0, v9 },
> -{ "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RS1_G0|RD(~1), "F,[i]", 0, v9 },
> -{ "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|SIMM13(~0)|RD(~1),"F,[1]", 0, v9 }, /* stx d,[rs1+0] */
> -
> -{ "stxa", F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0), "d,[1+2]A", 0, v9 },
> -{ "stxa", F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0)|RS2(~0), "d,[1]A", 0, v9 }, /* stxa d,[rs1+%g0] */
> -{ "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1), "d,[1+i]o", 0, v9 },
> -{ "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1), "d,[i+1]o", 0, v9 },
> -{ "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|RS1_G0, "d,[i]o", 0, v9 },
> -{ "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* stx d,[rs1+0] */
> -
> -{ "stq", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0), "J,[1+2]", 0, v9 },
> -{ "stq", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0), "J,[1]", 0, v9 }, /* stq [rs1+%g0] */
> -{ "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "J,[1+i]", 0, v9 },
> -{ "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "J,[i+1]", 0, v9 },
> -{ "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0, "J,[i]", 0, v9 },
> -{ "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0), "J,[1]", 0, v9 }, /* stq [rs1+0] */
> -
> -{ "stqa", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0), "J,[1+2]A", 0, v9 },
> -{ "stqa", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0), "J,[1]A", 0, v9 }, /* stqa [rs1+%g0] */
> -{ "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "J,[1+i]o", 0, v9 },
> -{ "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "J,[i+1]o", 0, v9 },
> -{ "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0, "J,[i]o", 0, v9 },
> -{ "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0), "J,[1]o", 0, v9 }, /* stqa [rs1+0] */
> -
> -{ "swap", F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI(~0), "[1+2],d", 0, v7 },
> -{ "swap", F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI_RS2(~0), "[1],d", 0, v7 }, /* swap [rs1+%g0],d */
> -{ "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1), "[1+i],d", 0, v7 },
> -{ "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1), "[i+1],d", 0, v7 },
> -{ "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|RS1_G0, "[i],d", 0, v7 },
> -{ "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|SIMM13(~0), "[1],d", 0, v7 }, /* swap [rs1+0],d */
> -
> -{ "swapa", F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0), "[1+2]A,d", 0, v7 },
> -{ "swapa", F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0)|RS2(~0), "[1]A,d", 0, v7 }, /* swapa [rs1+%g0],d */
> -{ "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1), "[1+i]o,d", 0, v9 },
> -{ "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1), "[i+1]o,d", 0, v9 },
> -{ "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|RS1_G0, "[i]o,d", 0, v9 },
> -{ "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* swap [rs1+0],d */
> -
> -{ "restore", F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "restore", F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "", 0, v6 }, /* restore %g0,%g0,%g0 */
> -{ "restore", F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1), "1,i,d", 0, v6 },
> -{ "restore", F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1)|RD_G0|RS1_G0|SIMM13(~0), "", 0, v6 }, /* restore %g0,0,%g0 */
> -
> -{ "rett", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI(~0), "1+2", F_UNBR|F_DELAYED, v6 }, /* rett rs1+rs2 */
> -{ "rett", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI_RS2(~0), "1", F_UNBR|F_DELAYED, v6 }, /* rett rs1,%g0 */
> -{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0, "1+i", F_UNBR|F_DELAYED, v6 }, /* rett rs1+X */
> -{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0, "i+1", F_UNBR|F_DELAYED, v6 }, /* rett X+rs1 */
> -{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* rett X+rs1 */
> -{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* rett X */
> -{ "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|SIMM13(~0), "1", F_UNBR|F_DELAYED, v6 }, /* rett rs1+0 */
> -
> -{ "save", F3(2, 0x3c, 0), F3(~2, ~0x3c, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "save", F3(2, 0x3c, 1), F3(~2, ~0x3c, ~1), "1,i,d", 0, v6 },
> -{ "save", 0x81e00000, ~0x81e00000, "", F_ALIAS, v6 },
> -
> -{ "ret",  F3(2, 0x38, 1)|RS1(0x1f)|SIMM13(8), F3(~2, ~0x38, ~1)|SIMM13(~8),       "", F_UNBR|F_DELAYED, v6 }, /* jmpl %i7+8,%g0 */
> -{ "retl", F3(2, 0x38, 1)|RS1(0x0f)|SIMM13(8), F3(~2, ~0x38, ~1)|RS1(~0x0f)|SIMM13(~8), "", F_UNBR|F_DELAYED, v6 }, /* jmpl %o7+8,%g0 */
> -
> -{ "jmpl", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI(~0), "1+2,d", F_JSR|F_DELAYED, v6 },
> -{ "jmpl", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI_RS2(~0), "1,d", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+%g0,d */
> -{ "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|SIMM13(~0), "1,d", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+0,d */
> -{ "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RS1_G0, "i,d", F_JSR|F_DELAYED, v6 }, /* jmpl %g0+i,d */
> -{ "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1), "1+i,d", F_JSR|F_DELAYED, v6 },
> -{ "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1), "i+1,d", F_JSR|F_DELAYED, v6 },
> -
> -{ "done", F3(2, 0x3e, 0)|RD(0), F3(~2, ~0x3e, ~0)|RD(~0)|RS1_G0|SIMM13(~0), "", 0, v9 },
> -{ "retry", F3(2, 0x3e, 0)|RD(1), F3(~2, ~0x3e, ~0)|RD(~1)|RS1_G0|SIMM13(~0), "", 0, v9 },
> -{ "saved", F3(2, 0x31, 0)|RD(0), F3(~2, ~0x31, ~0)|RD(~0)|RS1_G0|SIMM13(~0), "", 0, v9 },
> -{ "restored", F3(2, 0x31, 0)|RD(1), F3(~2, ~0x31, ~0)|RD(~1)|RS1_G0|SIMM13(~0), "", 0, v9 },
> -{ "sir", F3(2, 0x30, 1)|RD(0xf), F3(~2, ~0x30, ~1)|RD(~0xf)|RS1_G0, "i", 0, v9 },
> -
> -{ "flush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0), "1+2", 0, v8 },
> -{ "flush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0), "1", 0, v8 }, /* flush rs1+%g0 */
> -{ "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0), "1", 0, v8 }, /* flush rs1+0 */
> -{ "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0, "i", 0, v8 }, /* flush %g0+i */
> -{ "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "1+i", 0, v8 },
> -{ "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "i+1", 0, v8 },
> -
> -/* IFLUSH was renamed to FLUSH in v8.  */
> -{ "iflush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0), "1+2", F_ALIAS, v6 },
> -{ "iflush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0), "1", F_ALIAS, v6 }, /* flush rs1+%g0 */
> -{ "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0), "1", F_ALIAS, v6 }, /* flush rs1+0 */
> -{ "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0, "i", F_ALIAS, v6 },
> -{ "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "1+i", F_ALIAS, v6 },
> -{ "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "i+1", F_ALIAS, v6 },
> -
> -{ "return", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI(~0), "1+2", 0, v9 },
> -{ "return", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI_RS2(~0), "1", 0, v9 }, /* return rs1+%g0 */
> -{ "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|SIMM13(~0), "1", 0, v9 }, /* return rs1+0 */
> -{ "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RS1_G0, "i", 0, v9 }, /* return %g0+i */
> -{ "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1), "1+i", 0, v9 },
> -{ "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1), "i+1", 0, v9 },
> -
> -{ "flushw", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "", 0, v9 },
> -
> -{ "membar", F3(2, 0x28, 1)|RS1(0xf), F3(~2, ~0x28, ~1)|RD_G0|RS1(~0xf)|SIMM13(~127), "K", 0, v9 },
> -{ "stbar", F3(2, 0x28, 0)|RS1(0xf), F3(~2, ~0x28, ~0)|RD_G0|RS1(~0xf)|SIMM13(~0), "", 0, v8 },
> -
> -{ "prefetch", F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0), "[1+2],*", 0, v9 },
> -{ "prefetch", F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0)|RS2_G0, "[1],*", 0, v9 }, /* prefetch [rs1+%g0],prefetch_fcn */
> -{ "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1), "[1+i],*", 0, v9 },
> -{ "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1), "[i+1],*", 0, v9 },
> -{ "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|RS1_G0, "[i],*", 0, v9 },
> -{ "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|SIMM13(~0), "[1],*", 0, v9 }, /* prefetch [rs1+0],prefetch_fcn */
> -{ "prefetcha", F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0), "[1+2]A,*", 0, v9 },
> -{ "prefetcha", F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0)|RS2_G0, "[1]A,*", 0, v9 }, /* prefetcha [rs1+%g0],prefetch_fcn */
> -{ "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1), "[1+i]o,*", 0, v9 },
> -{ "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1), "[i+1]o,*", 0, v9 },
> -{ "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|RS1_G0, "[i]o,*", 0, v9 },
> -{ "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|SIMM13(~0), "[1]o,*", 0, v9 }, /* prefetcha [rs1+0],d */
> -
> - /* The 1<<12 is a long story.  It is necessary.  For more info, please contact [hidden email] */
> - /* FIXME: 'i' is wrong, need new letter for 5 bit unsigned constants.  */
> -{ "sll", F3(2, 0x25, 0), F3(~2, ~0x25, ~0)|(1<<12)|ASI(~0), "1,2,d", 0, v6 },
> -{ "sll", F3(2, 0x25, 1), F3(~2, ~0x25, ~1)|(1<<12), "1,i,d", 0, v6 },
> -{ "sra", F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0), "1,2,d", 0, v6 },
> -{ "sra", F3(2, 0x27, 1), F3(~2, ~0x27, ~1)|(1<<12), "1,i,d", 0, v6 },
> -{ "srl", F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0), "1,2,d", 0, v6 },
> -{ "srl", F3(2, 0x26, 1), F3(~2, ~0x26, ~1)|(1<<12), "1,i,d", 0, v6 },
> -
> - /* FIXME: 'j' is wrong, need new letter for 6 bit unsigned constants.  */
> -{ "sllx", F3(2, 0x25, 0)|(1<<12), F3(~2, ~0x25, ~0)|(ASI(~0)^(1<<12)), "1,2,d", 0, v9 },
> -{ "sllx", F3(2, 0x25, 1)|(1<<12), F3(~2, ~0x25, ~1)|(0x3f<<6), "1,j,d", 0, v9 },
> -{ "srax", F3(2, 0x27, 0)|(1<<12), F3(~2, ~0x27, ~0)|(ASI(~0)^(1<<12)), "1,2,d", 0, v9 },
> -{ "srax", F3(2, 0x27, 1)|(1<<12), F3(~2, ~0x27, ~1)|(0x3f<<6), "1,j,d", 0, v9 },
> -{ "srlx", F3(2, 0x26, 0)|(1<<12), F3(~2, ~0x26, ~0)|(ASI(~0)^(1<<12)), "1,2,d", 0, v9 },
> -{ "srlx", F3(2, 0x26, 1)|(1<<12), F3(~2, ~0x26, ~1)|(0x3f<<6), "1,j,d", 0, v9 },
> -
> -{ "mulscc", F3(2, 0x24, 0), F3(~2, ~0x24, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "mulscc", F3(2, 0x24, 1), F3(~2, ~0x24, ~1), "1,i,d", 0, v6 },
> -
> -{ "divscc", F3(2, 0x1d, 0), F3(~2, ~0x1d, ~0)|ASI(~0), "1,2,d", 0, sparclite },
> -{ "divscc", F3(2, 0x1d, 1), F3(~2, ~0x1d, ~1), "1,i,d", 0, sparclite },
> -
> -{ "scan", F3(2, 0x2c, 0), F3(~2, ~0x2c, ~0)|ASI(~0), "1,2,d", 0, sparclet|sparclite },
> -{ "scan", F3(2, 0x2c, 1), F3(~2, ~0x2c, ~1), "1,i,d", 0, sparclet|sparclite },
> -
> -{ "popc", F3(2, 0x2e, 0), F3(~2, ~0x2e, ~0)|RS2_G0|ASI(~0),"2,d", 0, v9 },
> -{ "popc", F3(2, 0x2e, 1), F3(~2, ~0x2e, ~1)|RS2_G0, "i,d", 0, v9 },
> -
> -{ "clr", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "d", F_ALIAS, v6 }, /* or %g0,%g0,d */
> -{ "clr", F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0|SIMM13(~0), "d", F_ALIAS, v6 }, /* or %g0,0,d */
> -{ "clr", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
> -{ "clr", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* st %g0,[rs1+%g0] */
> -{ "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
> -{ "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
> -{ "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
> -{ "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* st %g0,[rs1+0] */
> -
> -{ "clrb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
> -{ "clrb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* stb %g0,[rs1+%g0] */
> -{ "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
> -{ "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
> -{ "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
> -{ "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* stb %g0,[rs1+0] */
> -
> -{ "clrh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
> -{ "clrh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* sth %g0,[rs1+%g0] */
> -{ "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
> -{ "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
> -{ "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
> -{ "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* sth %g0,[rs1+0] */
> -
> -{ "clrx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v9 },
> -{ "clrx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v9 }, /* stx %g0,[rs1+%g0] */
> -{ "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0, "[1+i]", F_ALIAS, v9 },
> -{ "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0, "[i+1]", F_ALIAS, v9 },
> -{ "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v9 },
> -{ "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v9 }, /* stx %g0,[rs1+0] */
> -
> -{ "orcc", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "orcc", F3(2, 0x12, 1), F3(~2, ~0x12, ~1), "1,i,d", 0, v6 },
> -{ "orcc", F3(2, 0x12, 1), F3(~2, ~0x12, ~1), "i,1,d", 0, v6 },
> -
> -/* This is not a commutative instruction.  */
> -{ "orncc", F3(2, 0x16, 0), F3(~2, ~0x16, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "orncc", F3(2, 0x16, 1), F3(~2, ~0x16, ~1), "1,i,d", 0, v6 },
> -
> -/* This is not a commutative instruction.  */
> -{ "orn", F3(2, 0x06, 0), F3(~2, ~0x06, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "orn", F3(2, 0x06, 1), F3(~2, ~0x06, ~1), "1,i,d", 0, v6 },
> -
> -{ "tst", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|ASI_RS2(~0), "1", 0, v6 }, /* orcc rs1, %g0, %g0 */
> -{ "tst", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|RS1_G0|ASI(~0), "2", 0, v6 }, /* orcc %g0, rs2, %g0 */
> -{ "tst", F3(2, 0x12, 1), F3(~2, ~0x12, ~1)|RD_G0|SIMM13(~0), "1", 0, v6 }, /* orcc rs1, 0, %g0 */
> -
> -{ "wr", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI(~0), "1,2,m", 0, v8 }, /* wr r,r,%asrX */
> -{ "wr", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI(~0), "1,2,y", 0, v6 }, /* wr r,r,%y */
> -{ "wr", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "1,i,m", 0, v8 }, /* wr r,i,%asrX */
> -{ "wr", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0, "1,i,y", 0, v6 }, /* wr r,i,%y */
> -{ "wr", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI(~0), "1,2,p", 0, v6notv9 }, /* wr r,r,%psr */
> -{ "wr", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0, "1,i,p", 0, v6notv9 }, /* wr r,i,%psr */
> -{ "wr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI(~0), "1,2,w", 0, v6notv9 }, /* wr r,r,%wim */
> -{ "wr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0, "1,i,w", 0, v6notv9 }, /* wr r,i,%wim */
> -{ "wr", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI(~0), "1,2,t", 0, v6notv9 }, /* wr r,r,%tbr */
> -{ "wr", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0, "1,i,t", 0, v6notv9 }, /* wr r,i,%tbr */
> -
> -{ "wr", F3(2, 0x30, 0)|RD(2), F3(~2, ~0x30, ~0)|RD(~2)|ASI(~0), "1,2,E", 0, v9 }, /* wr r,r,%ccr */
> -{ "wr", F3(2, 0x30, 1)|RD(2), F3(~2, ~0x30, ~1)|RD(~2), "1,i,E", 0, v9 }, /* wr r,i,%ccr */
> -{ "wr", F3(2, 0x30, 0)|RD(3), F3(~2, ~0x30, ~0)|RD(~3)|ASI(~0), "1,2,o", 0, v9 }, /* wr r,r,%asi */
> -{ "wr", F3(2, 0x30, 1)|RD(3), F3(~2, ~0x30, ~1)|RD(~3), "1,i,o", 0, v9 }, /* wr r,i,%asi */
> -{ "wr", F3(2, 0x30, 0)|RD(6), F3(~2, ~0x30, ~0)|RD(~6)|ASI(~0), "1,2,s", 0, v9 }, /* wr r,i,%fprs */
> -{ "wr", F3(2, 0x30, 1)|RD(6), F3(~2, ~0x30, ~1)|RD(~6), "1,i,s", 0, v9 }, /* wr r,i,%fprs */
> -
> -{ "rd", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|SIMM13(~0), "M,d", 0, v8 }, /* rd %asrX,r */
> -{ "rd", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0), "y,d", 0, v6 }, /* rd %y,r */
> -{ "rd", F3(2, 0x29, 0), F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0), "p,d", 0, v6notv9 }, /* rd %psr,r */
> -{ "rd", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0), "w,d", 0, v6notv9 }, /* rd %wim,r */
> -{ "rd", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0), "t,d", 0, v6notv9 }, /* rd %tbr,r */
> -
> -{ "rd", F3(2, 0x28, 0)|RS1(2), F3(~2, ~0x28, ~0)|RS1(~2)|SIMM13(~0), "E,d", 0, v9 }, /* rd %ccr,r */
> -{ "rd", F3(2, 0x28, 0)|RS1(3), F3(~2, ~0x28, ~0)|RS1(~3)|SIMM13(~0), "o,d", 0, v9 }, /* rd %asi,r */
> -{ "rd", F3(2, 0x28, 0)|RS1(4), F3(~2, ~0x28, ~0)|RS1(~4)|SIMM13(~0), "W,d", 0, v9 }, /* rd %tick,r */
> -{ "rd", F3(2, 0x28, 0)|RS1(5), F3(~2, ~0x28, ~0)|RS1(~5)|SIMM13(~0), "P,d", 0, v9 }, /* rd %pc,r */
> -{ "rd", F3(2, 0x28, 0)|RS1(6), F3(~2, ~0x28, ~0)|RS1(~6)|SIMM13(~0), "s,d", 0, v9 }, /* rd %fprs,r */
> -
> -{ "rdpr", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|SIMM13(~0), "?,d", 0, v9 },   /* rdpr %priv,r */
> -{ "wrpr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0), "1,2,!", 0, v9 }, /* wrpr r1,r2,%priv */
> -{ "wrpr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|SIMM13(~0), "1,!", 0, v9 },   /* wrpr r1,%priv */
> -{ "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1), "1,i,!", 0, v9 }, /* wrpr r1,i,%priv */
> -{ "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1), "i,1,!", F_ALIAS, v9 }, /* wrpr i,r1,%priv */
> -{ "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RS1(~0), "i,!", 0, v9 },   /* wrpr i,%priv */
> -
> -{ "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI(~0), "1,2,m", F_ALIAS, v8 }, /* wr r,r,%asrX */
> -{ "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI(~0), "1,2,y", F_ALIAS, v6 }, /* wr r,r,%y */
> -{ "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "1,i,m", F_ALIAS, v8 }, /* wr r,i,%asrX */
> -{ "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0, "1,i,y", F_ALIAS, v6 }, /* wr r,i,%y */
> -{ "mov", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI(~0), "1,2,p", F_ALIAS, v6notv9 }, /* wr r,r,%psr */
> -{ "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0, "1,i,p", F_ALIAS, v6notv9 }, /* wr r,i,%psr */
> -{ "mov", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI(~0), "1,2,w", F_ALIAS, v6notv9 }, /* wr r,r,%wim */
> -{ "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0, "1,i,w", F_ALIAS, v6notv9 }, /* wr r,i,%wim */
> -{ "mov", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI(~0), "1,2,t", F_ALIAS, v6notv9 }, /* wr r,r,%tbr */
> -{ "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0, "1,i,t", F_ALIAS, v6notv9 }, /* wr r,i,%tbr */
> -
> -{ "mov", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|SIMM13(~0), "M,d", F_ALIAS, v8 }, /* rd %asr1,r */
> -{ "mov", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0), "y,d", F_ALIAS, v6 }, /* rd %y,r */
> -{ "mov", F3(2, 0x29, 0), F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0), "p,d", F_ALIAS, v6notv9 }, /* rd %psr,r */
> -{ "mov", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0), "w,d", F_ALIAS, v6notv9 }, /* rd %wim,r */
> -{ "mov", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0), "t,d", F_ALIAS, v6notv9 }, /* rd %tbr,r */
> -
> -{ "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI_RS2(~0), "1,y", F_ALIAS, v6 }, /* wr rs1,%g0,%y */
> -{ "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "i,y", F_ALIAS, v6 }, /* wr %g0,i,%y */
> -{ "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|SIMM13(~0), "1,y", F_ALIAS, v6 }, /* wr rs1,0,%y */
> -{ "mov", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|ASI_RS2(~0), "1,p", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%psr */
> -{ "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1), "i,p", F_ALIAS, v6notv9 }, /* wr %g0,i,%psr */
> -{ "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|SIMM13(~0), "1,p", F_ALIAS, v6notv9 }, /* wr rs1,0,%psr */
> -{ "mov", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|ASI_RS2(~0), "1,w", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%wim */
> -{ "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1), "i,w", F_ALIAS, v6notv9 }, /* wr %g0,i,%wim */
> -{ "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|SIMM13(~0), "1,w", F_ALIAS, v6notv9 }, /* wr rs1,0,%wim */
> -{ "mov", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|ASI_RS2(~0), "1,t", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%tbr */
> -{ "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1), "i,t", F_ALIAS, v6notv9 }, /* wr %g0,i,%tbr */
> -{ "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|SIMM13(~0), "1,t", F_ALIAS, v6notv9 }, /* wr rs1,0,%tbr */
> -
> -{ "mov", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RS1_G0|ASI(~0), "2,d", 0, v6 }, /* or %g0,rs2,d */
> -{ "mov", F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0, "i,d", 0, v6 }, /* or %g0,i,d */
> -{ "mov",        F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI_RS2(~0), "1,d", 0, v6 }, /* or rs1,%g0,d   */
> -{ "mov",        F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|SIMM13(~0), "1,d", 0, v6 }, /* or rs1,0,d */
> -
> -{ "or", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "or", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "1,i,d", 0, v6 },
> -{ "or", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "i,1,d", 0, v6 },
> -
> -{ "bset", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* or rd,rs2,rd */
> -{ "bset", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "i,r", F_ALIAS, v6 }, /* or rd,i,rd */
> -
> -/* This is not a commutative instruction.  */
> -{ "andn", F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "andn", F3(2, 0x05, 1), F3(~2, ~0x05, ~1), "1,i,d", 0, v6 },
> -
> -/* This is not a commutative instruction.  */
> -{ "andncc", F3(2, 0x15, 0), F3(~2, ~0x15, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "andncc", F3(2, 0x15, 1), F3(~2, ~0x15, ~1), "1,i,d", 0, v6 },
> -
> -{ "bclr", F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* andn rd,rs2,rd */
> -{ "bclr", F3(2, 0x05, 1), F3(~2, ~0x05, ~1), "i,r", F_ALIAS, v6 }, /* andn rd,i,rd */
> -
> -{ "cmp", F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|RD_G0|ASI(~0), "1,2", 0, v6 }, /* subcc rs1,rs2,%g0 */
> -{ "cmp", F3(2, 0x14, 1), F3(~2, ~0x14, ~1)|RD_G0, "1,i", 0, v6 }, /* subcc rs1,i,%g0 */
> -
> -{ "sub", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "sub", F3(2, 0x04, 1), F3(~2, ~0x04, ~1), "1,i,d", 0, v6 },
> -
> -{ "subcc", F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "subcc", F3(2, 0x14, 1), F3(~2, ~0x14, ~1), "1,i,d", 0, v6 },
> -
> -{ "subx", F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
> -{ "subx", F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1), "1,i,d", 0, v6notv9 },
> -{ "subc", F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0), "1,2,d", 0, v9 },
> -{ "subc", F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1), "1,i,d", 0, v9 },
> -
> -{ "subxcc", F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
> -{ "subxcc", F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1), "1,i,d", 0, v6notv9 },
> -{ "subccc", F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0), "1,2,d", 0, v9 },
> -{ "subccc", F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1), "1,i,d", 0, v9 },
> -
> -{ "and", F3(2, 0x01, 0), F3(~2, ~0x01, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "and", F3(2, 0x01, 1), F3(~2, ~0x01, ~1), "1,i,d", 0, v6 },
> -{ "and", F3(2, 0x01, 1), F3(~2, ~0x01, ~1), "i,1,d", 0, v6 },
> -
> -{ "andcc", F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "andcc", F3(2, 0x11, 1), F3(~2, ~0x11, ~1), "1,i,d", 0, v6 },
> -{ "andcc", F3(2, 0x11, 1), F3(~2, ~0x11, ~1), "i,1,d", 0, v6 },
> -
> -{ "dec", F3(2, 0x04, 1)|SIMM13(0x1), F3(~2, ~0x04, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* sub rd,1,rd */
> -{ "dec", F3(2, 0x04, 1),    F3(~2, ~0x04, ~1),       "i,r", F_ALIAS, v8 }, /* sub rd,imm,rd */
> -{ "deccc", F3(2, 0x14, 1)|SIMM13(0x1), F3(~2, ~0x14, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* subcc rd,1,rd */
> -{ "deccc", F3(2, 0x14, 1),    F3(~2, ~0x14, ~1),       "i,r", F_ALIAS, v8 }, /* subcc rd,imm,rd */
> -{ "inc", F3(2, 0x00, 1)|SIMM13(0x1), F3(~2, ~0x00, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* add rd,1,rd */
> -{ "inc", F3(2, 0x00, 1),    F3(~2, ~0x00, ~1),       "i,r", F_ALIAS, v8 }, /* add rd,imm,rd */
> -{ "inccc", F3(2, 0x10, 1)|SIMM13(0x1), F3(~2, ~0x10, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* addcc rd,1,rd */
> -{ "inccc", F3(2, 0x10, 1),    F3(~2, ~0x10, ~1),       "i,r", F_ALIAS, v8 }, /* addcc rd,imm,rd */
> -
> -{ "btst", F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|RD_G0|ASI(~0), "1,2", F_ALIAS, v6 }, /* andcc rs1,rs2,%g0 */
> -{ "btst", F3(2, 0x11, 1), F3(~2, ~0x11, ~1)|RD_G0, "i,1", F_ALIAS, v6 }, /* andcc rs1,i,%g0 */
> -
> -{ "neg", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "2,d", F_ALIAS, v6 }, /* sub %g0,rs2,rd */
> -{ "neg", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "O", F_ALIAS, v6 }, /* sub %g0,rd,rd */
> -
> -{ "add", F3(2, 0x00, 0), F3(~2, ~0x00, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "add", F3(2, 0x00, 1), F3(~2, ~0x00, ~1), "1,i,d", 0, v6 },
> -{ "add", F3(2, 0x00, 1), F3(~2, ~0x00, ~1), "i,1,d", 0, v6 },
> -{ "addcc", F3(2, 0x10, 0), F3(~2, ~0x10, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "addcc", F3(2, 0x10, 1), F3(~2, ~0x10, ~1), "1,i,d", 0, v6 },
> -{ "addcc", F3(2, 0x10, 1), F3(~2, ~0x10, ~1), "i,1,d", 0, v6 },
> -
> -{ "addx", F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
> -{ "addx", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "1,i,d", 0, v6notv9 },
> -{ "addx", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "i,1,d", 0, v6notv9 },
> -{ "addc", F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0), "1,2,d", 0, v9 },
> -{ "addc", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "1,i,d", 0, v9 },
> -{ "addc", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "i,1,d", 0, v9 },
> -
> -{ "addxcc", F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
> -{ "addxcc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "1,i,d", 0, v6notv9 },
> -{ "addxcc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "i,1,d", 0, v6notv9 },
> -{ "addccc", F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0), "1,2,d", 0, v9 },
> -{ "addccc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "1,i,d", 0, v9 },
> -{ "addccc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "i,1,d", 0, v9 },
> -
> -{ "smul", F3(2, 0x0b, 0), F3(~2, ~0x0b, ~0)|ASI(~0), "1,2,d", 0, v8 },
> -{ "smul", F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1), "1,i,d", 0, v8 },
> -{ "smul", F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1), "i,1,d", 0, v8 },
> -{ "smulcc", F3(2, 0x1b, 0), F3(~2, ~0x1b, ~0)|ASI(~0), "1,2,d", 0, v8 },
> -{ "smulcc", F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1), "1,i,d", 0, v8 },
> -{ "smulcc", F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1), "i,1,d", 0, v8 },
> -{ "umul", F3(2, 0x0a, 0), F3(~2, ~0x0a, ~0)|ASI(~0), "1,2,d", 0, v8 },
> -{ "umul", F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1), "1,i,d", 0, v8 },
> -{ "umul", F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1), "i,1,d", 0, v8 },
> -{ "umulcc", F3(2, 0x1a, 0), F3(~2, ~0x1a, ~0)|ASI(~0), "1,2,d", 0, v8 },
> -{ "umulcc", F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1), "1,i,d", 0, v8 },
> -{ "umulcc", F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1), "i,1,d", 0, v8 },
> -{ "sdiv", F3(2, 0x0f, 0), F3(~2, ~0x0f, ~0)|ASI(~0), "1,2,d", 0, v8 },
> -{ "sdiv", F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1), "1,i,d", 0, v8 },
> -{ "sdiv", F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1), "i,1,d", 0, v8 },
> -{ "sdivcc", F3(2, 0x1f, 0), F3(~2, ~0x1f, ~0)|ASI(~0), "1,2,d", 0, v8 },
> -{ "sdivcc", F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1), "1,i,d", 0, v8 },
> -{ "sdivcc", F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1), "i,1,d", 0, v8 },
> -{ "udiv", F3(2, 0x0e, 0), F3(~2, ~0x0e, ~0)|ASI(~0), "1,2,d", 0, v8 },
> -{ "udiv", F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1), "1,i,d", 0, v8 },
> -{ "udiv", F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1), "i,1,d", 0, v8 },
> -{ "udivcc", F3(2, 0x1e, 0), F3(~2, ~0x1e, ~0)|ASI(~0), "1,2,d", 0, v8 },
> -{ "udivcc", F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1), "1,i,d", 0, v8 },
> -{ "udivcc", F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1), "i,1,d", 0, v8 },
> -
> -{ "mulx", F3(2, 0x09, 0), F3(~2, ~0x09, ~0)|ASI(~0), "1,2,d", 0, v9 },
> -{ "mulx", F3(2, 0x09, 1), F3(~2, ~0x09, ~1), "1,i,d", 0, v9 },
> -{ "sdivx", F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0), "1,2,d", 0, v9 },
> -{ "sdivx", F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1), "1,i,d", 0, v9 },
> -{ "udivx", F3(2, 0x0d, 0), F3(~2, ~0x0d, ~0)|ASI(~0), "1,2,d", 0, v9 },
> -{ "udivx", F3(2, 0x0d, 1), F3(~2, ~0x0d, ~1), "1,i,d", 0, v9 },
> -
> -{ "call", F1(0x1), F1(~0x1), "L", F_JSR|F_DELAYED, v6 },
> -{ "call", F1(0x1), F1(~0x1), "L,#", F_JSR|F_DELAYED, v6 },
> -
> -{ "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0), "1+2", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+rs2,%o7 */
> -{ "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0), "1+2,#", F_JSR|F_DELAYED, v6 },
> -{ "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0), "1", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+%g0,%o7 */
> -{ "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0), "1,#", F_JSR|F_DELAYED, v6 },
> -{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "1+i", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+i,%o7 */
> -{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "1+i,#", F_JSR|F_DELAYED, v6 },
> -{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "i+1", F_JSR|F_DELAYED, v6 }, /* jmpl i+rs1,%o7 */
> -{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "i+1,#", F_JSR|F_DELAYED, v6 },
> -{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0, "i", F_JSR|F_DELAYED, v6 }, /* jmpl %g0+i,%o7 */
> -{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0, "i,#", F_JSR|F_DELAYED, v6 },
> -{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0), "1", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+0,%o7 */
> -{ "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0), "1,#", F_JSR|F_DELAYED, v6 },
> -
> -
> -/* Conditional instructions.
> -
> -   Because this part of the table was such a mess earlier, I have
> -   macrofied it so that all the branches and traps are generated from
> -   a single-line description of each condition value.  John Gilmore. */
> -
> -/* Define branches -- one annulled, one without, etc. */
> -#define br(opcode, mask, lose, flags) \
> - { opcode, (mask)|ANNUL, (lose),       ",a l",   (flags), v6 }, \
> - { opcode, (mask)      , (lose)|ANNUL, "l",     (flags), v6 }
> -
> -#define brx(opcode, mask, lose, flags) /* v9 */ \
> - { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), "Z,G",      (flags), v9 }, \
> - { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), ",T Z,G",   (flags), v9 }, \
> - { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a Z,G",   (flags), v9 }, \
> - { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a,T Z,G", (flags), v9 }, \
> - { opcode, (mask)|(2<<20), ANNUL|BPRED|(lose), ",N Z,G",   (flags), v9 }, \
> - { opcode, (mask)|(2<<20)|ANNUL, BPRED|(lose), ",a,N Z,G", (flags), v9 }, \
> - { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), "z,G",      (flags), v9 }, \
> - { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), ",T z,G",   (flags), v9 }, \
> - { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a z,G",   (flags), v9 }, \
> - { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a,T z,G", (flags), v9 }, \
> - { opcode, (mask), ANNUL|BPRED|(lose)|(2<<20), ",N z,G",   (flags), v9 }, \
> - { opcode, (mask)|ANNUL, BPRED|(lose)|(2<<20), ",a,N z,G", (flags), v9 }
> -
> -/* Define four traps: reg+reg, reg + immediate, immediate alone, reg alone. */
> -#define tr(opcode, mask, lose, flags) \
> - { opcode, (mask)|(2<<11)|IMMED, (lose)|RS1_G0, "Z,i",   (flags), v9 }, /* %g0 + imm */ \
> - { opcode, (mask)|(2<<11)|IMMED, (lose), "Z,1+i", (flags), v9 }, /* rs1 + imm */ \
> - { opcode, (mask)|(2<<11), IMMED|(lose), "Z,1+2", (flags), v9 }, /* rs1 + rs2 */ \
> - { opcode, (mask)|(2<<11), IMMED|(lose)|RS2_G0, "Z,1",   (flags), v9 }, /* rs1 + %g0 */ \
> - { opcode, (mask)|IMMED, (lose)|RS1_G0, "z,i",   (flags)|F_ALIAS, v9 }, /* %g0 + imm */ \
> - { opcode, (mask)|IMMED, (lose), "z,1+i", (flags)|F_ALIAS, v9 }, /* rs1 + imm */ \
> - { opcode, (mask), IMMED|(lose), "z,1+2", (flags)|F_ALIAS, v9 }, /* rs1 + rs2 */ \
> - { opcode, (mask), IMMED|(lose)|RS2_G0, "z,1",   (flags)|F_ALIAS, v9 }, /* rs1 + %g0 */ \
> - { opcode, (mask)|IMMED, (lose)|RS1_G0, "i",     (flags), v6 }, /* %g0 + imm */ \
> - { opcode, (mask)|IMMED, (lose), "1+i",   (flags), v6 }, /* rs1 + imm */ \
> - { opcode, (mask), IMMED|(lose), "1+2",   (flags), v6 }, /* rs1 + rs2 */ \
> - { opcode, (mask), IMMED|(lose)|RS2_G0, "1",     (flags), v6 } /* rs1 + %g0 */
> -
> -/* v9: We must put `brx' before `br', to ensure that we never match something
> -   v9: against an expression unless it is an expression.  Otherwise, we end
> -   v9: up with undefined symbol tables entries, because they get added, but
> -   v9: are not deleted if the pattern fails to match.  */
> -
> -/* Define both branches and traps based on condition mask */
> -#define cond(bop, top, mask, flags) \
> -  brx(bop, F2(0, 1)|(mask), F2(~0, ~1)|((~mask)&COND(~0)), F_DELAYED|(flags)), /* v9 */ \
> -  br(bop,  F2(0, 2)|(mask), F2(~0, ~2)|((~mask)&COND(~0)), F_DELAYED|(flags)), \
> -  tr(top,  F3(2, 0x3a, 0)|(mask), F3(~2, ~0x3a, 0)|((~mask)&COND(~0)), ((flags) & ~(F_UNBR|F_CONDBR)))
> -
> -/* Define all the conditions, all the branches, all the traps.  */
> -
> -/* Standard branch, trap mnemonics */
> -cond ("b", "ta",   CONDA, F_UNBR),
> -/* Alternative form (just for assembly, not for disassembly) */
> -cond ("ba", "t",    CONDA, F_UNBR|F_ALIAS),
> -
> -cond ("bcc", "tcc",  CONDCC, F_CONDBR),
> -cond ("bcs", "tcs",  CONDCS, F_CONDBR),
> -cond ("be", "te",   CONDE, F_CONDBR),
> -cond ("bg", "tg",   CONDG, F_CONDBR),
> -cond ("bgt", "tgt",   CONDG, F_CONDBR|F_ALIAS),
> -cond ("bge", "tge",  CONDGE, F_CONDBR),
> -cond ("bgeu", "tgeu", CONDGEU, F_CONDBR|F_ALIAS), /* for cc */
> -cond ("bgu", "tgu",  CONDGU, F_CONDBR),
> -cond ("bl", "tl",   CONDL, F_CONDBR),
> -cond ("blt", "tlt",   CONDL, F_CONDBR|F_ALIAS),
> -cond ("ble", "tle",  CONDLE, F_CONDBR),
> -cond ("bleu", "tleu", CONDLEU, F_CONDBR),
> -cond ("blu", "tlu",  CONDLU, F_CONDBR|F_ALIAS), /* for cs */
> -cond ("bn", "tn",   CONDN, F_CONDBR),
> -cond ("bne", "tne",  CONDNE, F_CONDBR),
> -cond ("bneg", "tneg", CONDNEG, F_CONDBR),
> -cond ("bnz", "tnz",  CONDNZ, F_CONDBR|F_ALIAS), /* for ne */
> -cond ("bpos", "tpos", CONDPOS, F_CONDBR),
> -cond ("bvc", "tvc",  CONDVC, F_CONDBR),
> -cond ("bvs", "tvs",  CONDVS, F_CONDBR),
> -cond ("bz", "tz",   CONDZ, F_CONDBR|F_ALIAS), /* for e */
> -
> -#undef cond
> -#undef br
> -#undef brr /* v9 */
> -#undef tr
> -
> -#define brr(opcode, mask, lose, flags) /* v9 */ \
> - { opcode, (mask)|BPRED, ANNUL|(lose), "1,k",      F_DELAYED|(flags), v9 }, \
> - { opcode, (mask)|BPRED, ANNUL|(lose), ",T 1,k",   F_DELAYED|(flags), v9 }, \
> - { opcode, (mask)|BPRED|ANNUL, (lose), ",a 1,k",   F_DELAYED|(flags), v9 }, \
> - { opcode, (mask)|BPRED|ANNUL, (lose), ",a,T 1,k", F_DELAYED|(flags), v9 }, \
> - { opcode, (mask), ANNUL|BPRED|(lose), ",N 1,k",   F_DELAYED|(flags), v9 }, \
> - { opcode, (mask)|ANNUL, BPRED|(lose), ",a,N 1,k", F_DELAYED|(flags), v9 }
> -
> -#define condr(bop, mask, flags) /* v9 */ \
> -  brr(bop, F2(0, 3)|COND(mask), F2(~0, ~3)|COND(~(mask)), (flags)) /* v9 */
> -
> -/* v9 */ condr("brnz", 0x5, F_CONDBR),
> -/* v9 */ condr("brz", 0x1, F_CONDBR),
> -/* v9 */ condr("brgez", 0x7, F_CONDBR),
> -/* v9 */ condr("brlz", 0x3, F_CONDBR),
> -/* v9 */ condr("brlez", 0x2, F_CONDBR),
> -/* v9 */ condr("brgz", 0x6, F_CONDBR),
> -
> -#undef condr /* v9 */
> -#undef brr /* v9 */
> -
> -#define movr(opcode, mask, flags) /* v9 */ \
> - { opcode, F3(2, 0x2f, 0)|RCOND(mask), F3(~2, ~0x2f, ~0)|RCOND(~(mask)), "1,2,d", (flags), v9 }, \
> - { opcode, F3(2, 0x2f, 1)|RCOND(mask), F3(~2, ~0x2f, ~1)|RCOND(~(mask)), "1,j,d", (flags), v9 }
> -
> -#define fmrrs(opcode, mask, lose, flags) /* v9 */ \
> - { opcode, (mask), (lose), "1,f,g", (flags), v9 }
> -#define fmrrd(opcode, mask, lose, flags) /* v9 */ \
> - { opcode, (mask), (lose), "1,B,H", (flags), v9 }
> -#define fmrrq(opcode, mask, lose, flags) /* v9 */ \
> - { opcode, (mask), (lose), "1,R,J", (flags), v9 }
> -
> -#define fmovrs(mop, mask, flags) /* v9 */ \
> -  fmrrs(mop, F3(2, 0x35, 0)|OPF_LOW5(5)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~5)|RCOND(~(mask)), (flags)) /* v9 */
> -#define fmovrd(mop, mask, flags) /* v9 */ \
> -  fmrrd(mop, F3(2, 0x35, 0)|OPF_LOW5(6)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~6)|RCOND(~(mask)), (flags)) /* v9 */
> -#define fmovrq(mop, mask, flags) /* v9 */ \
> -  fmrrq(mop, F3(2, 0x35, 0)|OPF_LOW5(7)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~7)|RCOND(~(mask)), (flags)) /* v9 */
> -
> -/* v9 */ movr("movrne", 0x5, 0),
> -/* v9 */ movr("movre", 0x1, 0),
> -/* v9 */ movr("movrgez", 0x7, 0),
> -/* v9 */ movr("movrlz", 0x3, 0),
> -/* v9 */ movr("movrlez", 0x2, 0),
> -/* v9 */ movr("movrgz", 0x6, 0),
> -/* v9 */ movr("movrnz", 0x5, F_ALIAS),
> -/* v9 */ movr("movrz", 0x1, F_ALIAS),
> -
> -/* v9 */ fmovrs("fmovrsne", 0x5, 0),
> -/* v9 */ fmovrs("fmovrse", 0x1, 0),
> -/* v9 */ fmovrs("fmovrsgez", 0x7, 0),
> -/* v9 */ fmovrs("fmovrslz", 0x3, 0),
> -/* v9 */ fmovrs("fmovrslez", 0x2, 0),
> -/* v9 */ fmovrs("fmovrsgz", 0x6, 0),
> -/* v9 */ fmovrs("fmovrsnz", 0x5, F_ALIAS),
> -/* v9 */ fmovrs("fmovrsz", 0x1, F_ALIAS),
> -
> -/* v9 */ fmovrd("fmovrdne", 0x5, 0),
> -/* v9 */ fmovrd("fmovrde", 0x1, 0),
> -/* v9 */ fmovrd("fmovrdgez", 0x7, 0),
> -/* v9 */ fmovrd("fmovrdlz", 0x3, 0),
> -/* v9 */ fmovrd("fmovrdlez", 0x2, 0),
> -/* v9 */ fmovrd("fmovrdgz", 0x6, 0),
> -/* v9 */ fmovrd("fmovrdnz", 0x5, F_ALIAS),
> -/* v9 */ fmovrd("fmovrdz", 0x1, F_ALIAS),
> -
> -/* v9 */ fmovrq("fmovrqne", 0x5, 0),
> -/* v9 */ fmovrq("fmovrqe", 0x1, 0),
> -/* v9 */ fmovrq("fmovrqgez", 0x7, 0),
> -/* v9 */ fmovrq("fmovrqlz", 0x3, 0),
> -/* v9 */ fmovrq("fmovrqlez", 0x2, 0),
> -/* v9 */ fmovrq("fmovrqgz", 0x6, 0),
> -/* v9 */ fmovrq("fmovrqnz", 0x5, F_ALIAS),
> -/* v9 */ fmovrq("fmovrqz", 0x1, F_ALIAS),
> -
> -#undef movr /* v9 */
> -#undef fmovr /* v9 */
> -#undef fmrr /* v9 */
> -
> -#define movicc(opcode, cond, flags) /* v9 */ \
> -  { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|XCC|(1<<11), "z,2,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|XCC|(1<<11), "z,I,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|(1<<11),     "Z,2,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|(1<<11),     "Z,I,d", flags, v9 }
> -
> -#define movfcc(opcode, fcond, flags) /* v9 */ \
> -  { opcode, F3(2, 0x2c, 0)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~0), "6,2,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 1)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~1), "6,I,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 0)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~0), "7,2,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 1)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~1), "7,I,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 0)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~0), "8,2,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 1)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~1), "8,I,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 0)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~0), "9,2,d", flags, v9 }, \
> -  { opcode, F3(2, 0x2c, 1)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~1), "9,I,d", flags, v9 }
> -
> -#define movcc(opcode, cond, fcond, flags) /* v9 */ \
> -  movfcc (opcode, fcond, flags), /* v9 */ \
> -  movicc (opcode, cond, flags) /* v9 */
> -
> -/* v9 */ movcc  ("mova", CONDA, FCONDA, 0),
> -/* v9 */ movicc ("movcc", CONDCC, 0),
> -/* v9 */ movicc ("movgeu", CONDGEU, F_ALIAS),
> -/* v9 */ movicc ("movcs", CONDCS, 0),
> -/* v9 */ movicc ("movlu", CONDLU, F_ALIAS),
> -/* v9 */ movcc  ("move", CONDE, FCONDE, 0),
> -/* v9 */ movcc  ("movg", CONDG, FCONDG, 0),
> -/* v9 */ movcc  ("movge", CONDGE, FCONDGE, 0),
> -/* v9 */ movicc ("movgu", CONDGU, 0),
> -/* v9 */ movcc  ("movl", CONDL, FCONDL, 0),
> -/* v9 */ movcc  ("movle", CONDLE, FCONDLE, 0),
> -/* v9 */ movicc ("movleu", CONDLEU, 0),
> -/* v9 */ movfcc ("movlg", FCONDLG, 0),
> -/* v9 */ movcc  ("movn", CONDN, FCONDN, 0),
> -/* v9 */ movcc  ("movne", CONDNE, FCONDNE, 0),
> -/* v9 */ movicc ("movneg", CONDNEG, 0),
> -/* v9 */ movcc  ("movnz", CONDNZ, FCONDNZ, F_ALIAS),
> -/* v9 */ movfcc ("movo", FCONDO, 0),
> -/* v9 */ movicc ("movpos", CONDPOS, 0),
> -/* v9 */ movfcc ("movu", FCONDU, 0),
> -/* v9 */ movfcc ("movue", FCONDUE, 0),
> -/* v9 */ movfcc ("movug", FCONDUG, 0),
> -/* v9 */ movfcc ("movuge", FCONDUGE, 0),
> -/* v9 */ movfcc ("movul", FCONDUL, 0),
> -/* v9 */ movfcc ("movule", FCONDULE, 0),
> -/* v9 */ movicc ("movvc", CONDVC, 0),
> -/* v9 */ movicc ("movvs", CONDVS, 0),
> -/* v9 */ movcc  ("movz", CONDZ, FCONDZ, F_ALIAS),
> -
> -#undef movicc /* v9 */
> -#undef movfcc /* v9 */
> -#undef movcc /* v9 */
> -
> -#define FM_SF 1 /* v9 - values for fpsize */
> -#define FM_DF 2 /* v9 */
> -#define FM_QF 3 /* v9 */
> -
> -#define fmovicc(opcode, fpsize, cond, flags) /* v9 */ \
> -{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0),  "z,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0),  "Z,f,g", flags, v9 }
> -
> -#define fmovfcc(opcode, fpsize, fcond, flags) /* v9 */ \
> -{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 }
> -
> -/* FIXME: use fmovicc/fmovfcc? */ /* v9 */
> -#define fmovcc(opcode, fpsize, cond, fcond, flags) /* v9 */ \
> -{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0),  "z,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0),  "Z,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \
> -{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 }
> -
> -/* v9 */ fmovcc  ("fmovda", FM_DF, CONDA, FCONDA, 0),
> -/* v9 */ fmovcc  ("fmovqa", FM_QF, CONDA, FCONDA, 0),
> -/* v9 */ fmovcc  ("fmovsa", FM_SF, CONDA, FCONDA, 0),
> -/* v9 */ fmovicc ("fmovdcc", FM_DF, CONDCC, 0),
> -/* v9 */ fmovicc ("fmovqcc", FM_QF, CONDCC, 0),
> -/* v9 */ fmovicc ("fmovscc", FM_SF, CONDCC, 0),
> -/* v9 */ fmovicc ("fmovdcs", FM_DF, CONDCS, 0),
> -/* v9 */ fmovicc ("fmovqcs", FM_QF, CONDCS, 0),
> -/* v9 */ fmovicc ("fmovscs", FM_SF, CONDCS, 0),
> -/* v9 */ fmovcc  ("fmovde", FM_DF, CONDE, FCONDE, 0),
> -/* v9 */ fmovcc  ("fmovqe", FM_QF, CONDE, FCONDE, 0),
> -/* v9 */ fmovcc  ("fmovse", FM_SF, CONDE, FCONDE, 0),
> -/* v9 */ fmovcc  ("fmovdg", FM_DF, CONDG, FCONDG, 0),
> -/* v9 */ fmovcc  ("fmovqg", FM_QF, CONDG, FCONDG, 0),
> -/* v9 */ fmovcc  ("fmovsg", FM_SF, CONDG, FCONDG, 0),
> -/* v9 */ fmovcc  ("fmovdge", FM_DF, CONDGE, FCONDGE, 0),
> -/* v9 */ fmovcc  ("fmovqge", FM_QF, CONDGE, FCONDGE, 0),
> -/* v9 */ fmovcc  ("fmovsge", FM_SF, CONDGE, FCONDGE, 0),
> -/* v9 */ fmovicc ("fmovdgeu", FM_DF, CONDGEU, F_ALIAS),
> -/* v9 */ fmovicc ("fmovqgeu", FM_QF, CONDGEU, F_ALIAS),
> -/* v9 */ fmovicc ("fmovsgeu", FM_SF, CONDGEU, F_ALIAS),
> -/* v9 */ fmovicc ("fmovdgu", FM_DF, CONDGU, 0),
> -/* v9 */ fmovicc ("fmovqgu", FM_QF, CONDGU, 0),
> -/* v9 */ fmovicc ("fmovsgu", FM_SF, CONDGU, 0),
> -/* v9 */ fmovcc  ("fmovdl", FM_DF, CONDL, FCONDL, 0),
> -/* v9 */ fmovcc  ("fmovql", FM_QF, CONDL, FCONDL, 0),
> -/* v9 */ fmovcc  ("fmovsl", FM_SF, CONDL, FCONDL, 0),
> -/* v9 */ fmovcc  ("fmovdle", FM_DF, CONDLE, FCONDLE, 0),
> -/* v9 */ fmovcc  ("fmovqle", FM_QF, CONDLE, FCONDLE, 0),
> -/* v9 */ fmovcc  ("fmovsle", FM_SF, CONDLE, FCONDLE, 0),
> -/* v9 */ fmovicc ("fmovdleu", FM_DF, CONDLEU, 0),
> -/* v9 */ fmovicc ("fmovqleu", FM_QF, CONDLEU, 0),
> -/* v9 */ fmovicc ("fmovsleu", FM_SF, CONDLEU, 0),
> -/* v9 */ fmovfcc ("fmovdlg", FM_DF, FCONDLG, 0),
> -/* v9 */ fmovfcc ("fmovqlg", FM_QF, FCONDLG, 0),
> -/* v9 */ fmovfcc ("fmovslg", FM_SF, FCONDLG, 0),
> -/* v9 */ fmovicc ("fmovdlu", FM_DF, CONDLU, F_ALIAS),
> -/* v9 */ fmovicc ("fmovqlu", FM_QF, CONDLU, F_ALIAS),
> -/* v9 */ fmovicc ("fmovslu", FM_SF, CONDLU, F_ALIAS),
> -/* v9 */ fmovcc  ("fmovdn", FM_DF, CONDN, FCONDN, 0),
> -/* v9 */ fmovcc  ("fmovqn", FM_QF, CONDN, FCONDN, 0),
> -/* v9 */ fmovcc  ("fmovsn", FM_SF, CONDN, FCONDN, 0),
> -/* v9 */ fmovcc  ("fmovdne", FM_DF, CONDNE, FCONDNE, 0),
> -/* v9 */ fmovcc  ("fmovqne", FM_QF, CONDNE, FCONDNE, 0),
> -/* v9 */ fmovcc  ("fmovsne", FM_SF, CONDNE, FCONDNE, 0),
> -/* v9 */ fmovicc ("fmovdneg", FM_DF, CONDNEG, 0),
> -/* v9 */ fmovicc ("fmovqneg", FM_QF, CONDNEG, 0),
> -/* v9 */ fmovicc ("fmovsneg", FM_SF, CONDNEG, 0),
> -/* v9 */ fmovcc  ("fmovdnz", FM_DF, CONDNZ, FCONDNZ, F_ALIAS),
> -/* v9 */ fmovcc  ("fmovqnz", FM_QF, CONDNZ, FCONDNZ, F_ALIAS),
> -/* v9 */ fmovcc  ("fmovsnz", FM_SF, CONDNZ, FCONDNZ, F_ALIAS),
> -/* v9 */ fmovfcc ("fmovdo", FM_DF, FCONDO, 0),
> -/* v9 */ fmovfcc ("fmovqo", FM_QF, FCONDO, 0),
> -/* v9 */ fmovfcc ("fmovso", FM_SF, FCONDO, 0),
> -/* v9 */ fmovicc ("fmovdpos", FM_DF, CONDPOS, 0),
> -/* v9 */ fmovicc ("fmovqpos", FM_QF, CONDPOS, 0),
> -/* v9 */ fmovicc ("fmovspos", FM_SF, CONDPOS, 0),
> -/* v9 */ fmovfcc ("fmovdu", FM_DF, FCONDU, 0),
> -/* v9 */ fmovfcc ("fmovqu", FM_QF, FCONDU, 0),
> -/* v9 */ fmovfcc ("fmovsu", FM_SF, FCONDU, 0),
> -/* v9 */ fmovfcc ("fmovdue", FM_DF, FCONDUE, 0),
> -/* v9 */ fmovfcc ("fmovque", FM_QF, FCONDUE, 0),
> -/* v9 */ fmovfcc ("fmovsue", FM_SF, FCONDUE, 0),
> -/* v9 */ fmovfcc ("fmovdug", FM_DF, FCONDUG, 0),
> -/* v9 */ fmovfcc ("fmovqug", FM_QF, FCONDUG, 0),
> -/* v9 */ fmovfcc ("fmovsug", FM_SF, FCONDUG, 0),
> -/* v9 */ fmovfcc ("fmovduge", FM_DF, FCONDUGE, 0),
> -/* v9 */ fmovfcc ("fmovquge", FM_QF, FCONDUGE, 0),
> -/* v9 */ fmovfcc ("fmovsuge", FM_SF, FCONDUGE, 0),
> -/* v9 */ fmovfcc ("fmovdul", FM_DF, FCONDUL, 0),
> -/* v9 */ fmovfcc ("fmovqul", FM_QF, FCONDUL, 0),
> -/* v9 */ fmovfcc ("fmovsul", FM_SF, FCONDUL, 0),
> -/* v9 */ fmovfcc ("fmovdule", FM_DF, FCONDULE, 0),
> -/* v9 */ fmovfcc ("fmovqule", FM_QF, FCONDULE, 0),
> -/* v9 */ fmovfcc ("fmovsule", FM_SF, FCONDULE, 0),
> -/* v9 */ fmovicc ("fmovdvc", FM_DF, CONDVC, 0),
> -/* v9 */ fmovicc ("fmovqvc", FM_QF, CONDVC, 0),
> -/* v9 */ fmovicc ("fmovsvc", FM_SF, CONDVC, 0),
> -/* v9 */ fmovicc ("fmovdvs", FM_DF, CONDVS, 0),
> -/* v9 */ fmovicc ("fmovqvs", FM_QF, CONDVS, 0),
> -/* v9 */ fmovicc ("fmovsvs", FM_SF, CONDVS, 0),
> -/* v9 */ fmovcc  ("fmovdz", FM_DF, CONDZ, FCONDZ, F_ALIAS),
> -/* v9 */ fmovcc  ("fmovqz", FM_QF, CONDZ, FCONDZ, F_ALIAS),
> -/* v9 */ fmovcc  ("fmovsz", FM_SF, CONDZ, FCONDZ, F_ALIAS),
> -
> -#undef fmovicc /* v9 */
> -#undef fmovfcc /* v9 */
> -#undef fmovcc /* v9 */
> -#undef FM_DF /* v9 */
> -#undef FM_QF /* v9 */
> -#undef FM_SF /* v9 */
> -
> -#define brfc(opcode, mask, lose, flags) \
> - { opcode, (mask), ANNUL|(lose), "l",    flags|F_DELAYED, v6 }, \
> - { opcode, (mask)|ANNUL, (lose), ",a l", flags|F_DELAYED, v6 }
> -
> -#define brfcx(opcode, mask, lose, flags) /* v9 */ \
> - { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), "6,G",      flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), ",T 6,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a 6,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a,T 6,G", flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(0)|(mask), ANNUL|BPRED|FBFCC(~0)|(lose), ",N 6,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(0)|(mask)|ANNUL, BPRED|FBFCC(~0)|(lose), ",a,N 6,G", flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), "7,G",      flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), ",T 7,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a 7,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a,T 7,G", flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(1)|(mask), ANNUL|BPRED|FBFCC(~1)|(lose), ",N 7,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(1)|(mask)|ANNUL, BPRED|FBFCC(~1)|(lose), ",a,N 7,G", flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), "8,G",      flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), ",T 8,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a 8,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a,T 8,G", flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(2)|(mask), ANNUL|BPRED|FBFCC(~2)|(lose), ",N 8,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(2)|(mask)|ANNUL, BPRED|FBFCC(~2)|(lose), ",a,N 8,G", flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), "9,G",      flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), ",T 9,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a 9,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a,T 9,G", flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(3)|(mask), ANNUL|BPRED|FBFCC(~3)|(lose), ",N 9,G",   flags|F_DELAYED, v9 }, \
> - { opcode, FBFCC(3)|(mask)|ANNUL, BPRED|FBFCC(~3)|(lose), ",a,N  9,G", flags|F_DELAYED, v9 }
> -
> -/* v9: We must put `brfcx' before `brfc', to ensure that we never match
> -   v9: something against an expression unless it is an expression.  Otherwise,
> -   v9: we end up with undefined symbol tables entries, because they get added,
> -   v9: but are not deleted if the pattern fails to match.  */
> -
> -#define condfc(fop, cop, mask, flags) \
> -  brfcx(fop, F2(0, 5)|COND(mask), F2(~0, ~5)|COND(~(mask)), flags), /* v9 */ \
> -  brfc(fop, F2(0, 6)|COND(mask), F2(~0, ~6)|COND(~(mask)), flags), \
> -  brfc(cop, F2(0, 7)|COND(mask), F2(~0, ~7)|COND(~(mask)), flags)
> -
> -#define condf(fop, mask, flags) \
> -  brfcx(fop, F2(0, 5)|COND(mask), F2(~0, ~5)|COND(~(mask)), flags), /* v9 */ \
> -  brfc(fop, F2(0, 6)|COND(mask), F2(~0, ~6)|COND(~(mask)), flags)
> -
> -condfc("fb", "cb", 0x8, 0),
> -condfc("fba", "cba", 0x8, F_ALIAS),
> -condfc("fbe", "cb0", 0x9, 0),
> -condf("fbz", 0x9, F_ALIAS),
> -condfc("fbg", "cb2", 0x6, 0),
> -condfc("fbge", "cb02", 0xb, 0),
> -condfc("fbl", "cb1", 0x4, 0),
> -condfc("fble", "cb01", 0xd, 0),
> -condfc("fblg", "cb12", 0x2, 0),
> -condfc("fbn", "cbn", 0x0, 0),
> -condfc("fbne", "cb123", 0x1, 0),
> -condf("fbnz", 0x1, F_ALIAS),
> -condfc("fbo", "cb012", 0xf, 0),
> -condfc("fbu", "cb3", 0x7, 0),
> -condfc("fbue", "cb03", 0xa, 0),
> -condfc("fbug", "cb23", 0x5, 0),
> -condfc("fbuge", "cb023", 0xc, 0),
> -condfc("fbul", "cb13", 0x3, 0),
> -condfc("fbule", "cb013", 0xe, 0),
> -
> -#undef condfc
> -#undef brfc
> -#undef brfcx /* v9 */
> -
> -{ "jmp", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI(~0), "1+2", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+rs2,%g0 */
> -{ "jmp", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI_RS2(~0), "1", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+%g0,%g0 */
> -{ "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0, "1+i", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+i,%g0 */
> -{ "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0, "i+1", F_UNBR|F_DELAYED, v6 }, /* jmpl i+rs1,%g0 */
> -{ "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* jmpl %g0+i,%g0 */
> -{ "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|SIMM13(~0), "1", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+0,%g0 */
> -
> -{ "nop", F2(0, 4), 0xfeffffff, "", 0, v6 }, /* sethi 0, %g0 */
> -
> -{ "set", F2(0x0, 0x4), F2(~0x0, ~0x4), "Sh,d", F_ALIAS, v6 },
> -
> -{ "sethi", F2(0x0, 0x4), F2(~0x0, ~0x4), "h,d", 0, v6 },
> -
> -{ "taddcc", F3(2, 0x20, 0), F3(~2, ~0x20, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "taddcc", F3(2, 0x20, 1), F3(~2, ~0x20, ~1), "1,i,d", 0, v6 },
> -{ "taddcc", F3(2, 0x20, 1), F3(~2, ~0x20, ~1), "i,1,d", 0, v6 },
> -{ "taddcctv", F3(2, 0x22, 0), F3(~2, ~0x22, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "taddcctv", F3(2, 0x22, 1), F3(~2, ~0x22, ~1), "1,i,d", 0, v6 },
> -{ "taddcctv", F3(2, 0x22, 1), F3(~2, ~0x22, ~1), "i,1,d", 0, v6 },
> -
> -{ "tsubcc", F3(2, 0x21, 0), F3(~2, ~0x21, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "tsubcc", F3(2, 0x21, 1), F3(~2, ~0x21, ~1), "1,i,d", 0, v6 },
> -{ "tsubcctv", F3(2, 0x23, 0), F3(~2, ~0x23, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "tsubcctv", F3(2, 0x23, 1), F3(~2, ~0x23, ~1), "1,i,d", 0, v6 },
> -
> -{ "unimp", F2(0x0, 0x0), 0xffc00000, "n", 0, v6notv9 },
> -{ "illtrap", F2(0, 0), F2(~0, ~0)|RD_G0, "n", 0, v9 },
> -
> -/* This *is* a commutative instruction.  */
> -{ "xnor", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "xnor", F3(2, 0x07, 1), F3(~2, ~0x07, ~1), "1,i,d", 0, v6 },
> -{ "xnor", F3(2, 0x07, 1), F3(~2, ~0x07, ~1), "i,1,d", 0, v6 },
> -/* This *is* a commutative instruction.  */
> -{ "xnorcc", F3(2, 0x17, 0), F3(~2, ~0x17, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "xnorcc", F3(2, 0x17, 1), F3(~2, ~0x17, ~1), "1,i,d", 0, v6 },
> -{ "xnorcc", F3(2, 0x17, 1), F3(~2, ~0x17, ~1), "i,1,d", 0, v6 },
> -{ "xor", F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "xor", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "1,i,d", 0, v6 },
> -{ "xor", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "i,1,d", 0, v6 },
> -{ "xorcc", F3(2, 0x13, 0), F3(~2, ~0x13, ~0)|ASI(~0), "1,2,d", 0, v6 },
> -{ "xorcc", F3(2, 0x13, 1), F3(~2, ~0x13, ~1), "1,i,d", 0, v6 },
> -{ "xorcc", F3(2, 0x13, 1), F3(~2, ~0x13, ~1), "i,1,d", 0, v6 },
> -
> -{ "not", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "1,d", F_ALIAS, v6 }, /* xnor rs1,%0,rd */
> -{ "not", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "r", F_ALIAS, v6 }, /* xnor rd,%0,rd */
> -
> -{ "btog", F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* xor rd,rs2,rd */
> -{ "btog", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "i,r", F_ALIAS, v6 }, /* xor rd,i,rd */
> -
> -/* FPop1 and FPop2 are not instructions.  Don't accept them.  */
> -
> -{ "fdtoi", F3F(2, 0x34, 0x0d2), F3F(~2, ~0x34, ~0x0d2)|RS1_G0, "B,g", 0, v6 },
> -{ "fstoi", F3F(2, 0x34, 0x0d1), F3F(~2, ~0x34, ~0x0d1)|RS1_G0, "f,g", 0, v6 },
> -{ "fqtoi", F3F(2, 0x34, 0x0d3), F3F(~2, ~0x34, ~0x0d3)|RS1_G0, "R,g", 0, v8 },
> -
> -{ "fdtox", F3F(2, 0x34, 0x082), F3F(~2, ~0x34, ~0x082)|RS1_G0, "B,g", 0, v9 },
> -{ "fstox", F3F(2, 0x34, 0x081), F3F(~2, ~0x34, ~0x081)|RS1_G0, "f,g", 0, v9 },
> -{ "fqtox", F3F(2, 0x34, 0x083), F3F(~2, ~0x34, ~0x083)|RS1_G0, "R,g", 0, v9 },
> -
> -{ "fitod", F3F(2, 0x34, 0x0c8), F3F(~2, ~0x34, ~0x0c8)|RS1_G0, "f,H", 0, v6 },
> -{ "fitos", F3F(2, 0x34, 0x0c4), F3F(~2, ~0x34, ~0x0c4)|RS1_G0, "f,g", 0, v6 },
> -{ "fitoq", F3F(2, 0x34, 0x0cc), F3F(~2, ~0x34, ~0x0cc)|RS1_G0, "f,J", 0, v8 },
> -
> -{ "fxtod", F3F(2, 0x34, 0x088), F3F(~2, ~0x34, ~0x088)|RS1_G0, "f,H", 0, v9 },
> -{ "fxtos", F3F(2, 0x34, 0x084), F3F(~2, ~0x34, ~0x084)|RS1_G0, "f,g", 0, v9 },
> -{ "fxtoq", F3F(2, 0x34, 0x08c), F3F(~2, ~0x34, ~0x08c)|RS1_G0, "f,J", 0, v9 },
> -
> -{ "fdtoq", F3F(2, 0x34, 0x0ce), F3F(~2, ~0x34, ~0x0ce)|RS1_G0, "B,J", 0, v8 },
> -{ "fdtos", F3F(2, 0x34, 0x0c6), F3F(~2, ~0x34, ~0x0c6)|RS1_G0, "B,g", 0, v6 },
> -{ "fqtod", F3F(2, 0x34, 0x0cb), F3F(~2, ~0x34, ~0x0cb)|RS1_G0, "R,H", 0, v8 },
> -{ "fqtos", F3F(2, 0x34, 0x0c7), F3F(~2, ~0x34, ~0x0c7)|RS1_G0, "R,g", 0, v8 },
> -{ "fstod", F3F(2, 0x34, 0x0c9), F3F(~2, ~0x34, ~0x0c9)|RS1_G0, "f,H", 0, v6 },
> -{ "fstoq", F3F(2, 0x34, 0x0cd), F3F(~2, ~0x34, ~0x0cd)|RS1_G0, "f,J", 0, v8 },
> -
> -{ "fdivd", F3F(2, 0x34, 0x04e), F3F(~2, ~0x34, ~0x04e), "v,B,H", 0, v6 },
> -{ "fdivq", F3F(2, 0x34, 0x04f), F3F(~2, ~0x34, ~0x04f), "V,R,J", 0, v8 },
> -{ "fdivs", F3F(2, 0x34, 0x04d), F3F(~2, ~0x34, ~0x04d), "e,f,g", 0, v6 },
> -{ "fmuld", F3F(2, 0x34, 0x04a), F3F(~2, ~0x34, ~0x04a), "v,B,H", 0, v6 },
> -{ "fmulq", F3F(2, 0x34, 0x04b), F3F(~2, ~0x34, ~0x04b), "V,R,J", 0, v8 },
> -{ "fmuls", F3F(2, 0x34, 0x049), F3F(~2, ~0x34, ~0x049), "e,f,g", 0, v6 },
> -
> -{ "fdmulq", F3F(2, 0x34, 0x06e), F3F(~2, ~0x34, ~0x06e), "v,B,J", 0, v8 },
> -{ "fsmuld", F3F(2, 0x34, 0x069), F3F(~2, ~0x34, ~0x069), "e,f,H", 0, v8 },
> -
> -{ "fsqrtd", F3F(2, 0x34, 0x02a), F3F(~2, ~0x34, ~0x02a)|RS1_G0, "B,H", 0, v7 },
> -{ "fsqrtq", F3F(2, 0x34, 0x02b), F3F(~2, ~0x34, ~0x02b)|RS1_G0, "R,J", 0, v8 },
> -{ "fsqrts", F3F(2, 0x34, 0x029), F3F(~2, ~0x34, ~0x029)|RS1_G0, "f,g", 0, v7 },
> -
> -{ "fabsd", F3F(2, 0x34, 0x00a), F3F(~2, ~0x34, ~0x00a)|RS1_G0, "B,H", 0, v9 },
> -{ "fabsq", F3F(2, 0x34, 0x00b), F3F(~2, ~0x34, ~0x00b)|RS1_G0, "R,J", 0, v9 },
> -{ "fabss", F3F(2, 0x34, 0x009), F3F(~2, ~0x34, ~0x009)|RS1_G0, "f,g", 0, v6 },
> -{ "fmovd", F3F(2, 0x34, 0x002), F3F(~2, ~0x34, ~0x002)|RS1_G0, "B,H", 0, v9 },
> -{ "fmovq", F3F(2, 0x34, 0x003), F3F(~2, ~0x34, ~0x003)|RS1_G0, "R,J", 0, v9 },
> -{ "fmovs", F3F(2, 0x34, 0x001), F3F(~2, ~0x34, ~0x001)|RS1_G0, "f,g", 0, v6 },
> -{ "fnegd", F3F(2, 0x34, 0x006), F3F(~2, ~0x34, ~0x006)|RS1_G0, "B,H", 0, v9 },
> -{ "fnegq", F3F(2, 0x34, 0x007), F3F(~2, ~0x34, ~0x007)|RS1_G0, "R,J", 0, v9 },
> -{ "fnegs", F3F(2, 0x34, 0x005), F3F(~2, ~0x34, ~0x005)|RS1_G0, "f,g", 0, v6 },
> -
> -{ "faddd", F3F(2, 0x34, 0x042), F3F(~2, ~0x34, ~0x042), "v,B,H", 0, v6 },
> -{ "faddq", F3F(2, 0x34, 0x043), F3F(~2, ~0x34, ~0x043), "V,R,J", 0, v8 },
> -{ "fadds", F3F(2, 0x34, 0x041), F3F(~2, ~0x34, ~0x041), "e,f,g", 0, v6 },
> -{ "fsubd", F3F(2, 0x34, 0x046), F3F(~2, ~0x34, ~0x046), "v,B,H", 0, v6 },
> -{ "fsubq", F3F(2, 0x34, 0x047), F3F(~2, ~0x34, ~0x047), "V,R,J", 0, v8 },
> -{ "fsubs", F3F(2, 0x34, 0x045), F3F(~2, ~0x34, ~0x045), "e,f,g", 0, v6 },
> -
> -#define CMPFCC(x) (((x)&0x3)<<25)
> -
> -{ "fcmpd",          F3F(2, 0x35, 0x052),            F3F(~2, ~0x35, ~0x052)|RD_G0,  "v,B",   0, v6 },
> -{ "fcmpd", CMPFCC(0)|F3F(2, 0x35, 0x052), CMPFCC(~0)|F3F(~2, ~0x35, ~0x052), "6,v,B", 0, v9 },
> -{ "fcmpd", CMPFCC(1)|F3F(2, 0x35, 0x052), CMPFCC(~1)|F3F(~2, ~0x35, ~0x052), "7,v,B", 0, v9 },
> -{ "fcmpd", CMPFCC(2)|F3F(2, 0x35, 0x052), CMPFCC(~2)|F3F(~2, ~0x35, ~0x052), "8,v,B", 0, v9 },
> -{ "fcmpd", CMPFCC(3)|F3F(2, 0x35, 0x052), CMPFCC(~3)|F3F(~2, ~0x35, ~0x052), "9,v,B", 0, v9 },
> -{ "fcmped",          F3F(2, 0x35, 0x056),            F3F(~2, ~0x35, ~0x056)|RD_G0,  "v,B",   0, v6 },
> -{ "fcmped", CMPFCC(0)|F3F(2, 0x35, 0x056), CMPFCC(~0)|F3F(~2, ~0x35, ~0x056), "6,v,B", 0, v9 },
> -{ "fcmped", CMPFCC(1)|F3F(2, 0x35, 0x056), CMPFCC(~1)|F3F(~2, ~0x35, ~0x056), "7,v,B", 0, v9 },
> -{ "fcmped", CMPFCC(2)|F3F(2, 0x35, 0x056), CMPFCC(~2)|F3F(~2, ~0x35, ~0x056), "8,v,B", 0, v9 },
> -{ "fcmped", CMPFCC(3)|F3F(2, 0x35, 0x056), CMPFCC(~3)|F3F(~2, ~0x35, ~0x056), "9,v,B", 0, v9 },
> -{ "fcmpq",          F3F(2, 0x34, 0x053),            F3F(~2, ~0x34, ~0x053)|RD_G0, "V,R", 0, v8 },
> -{ "fcmpq", CMPFCC(0)|F3F(2, 0x35, 0x053), CMPFCC(~0)|F3F(~2, ~0x35, ~0x053), "6,V,R", 0, v9 },
> -{ "fcmpq", CMPFCC(1)|F3F(2, 0x35, 0x053), CMPFCC(~1)|F3F(~2, ~0x35, ~0x053), "7,V,R", 0, v9 },
> -{ "fcmpq", CMPFCC(2)|F3F(2, 0x35, 0x053), CMPFCC(~2)|F3F(~2, ~0x35, ~0x053), "8,V,R", 0, v9 },
> -{ "fcmpq", CMPFCC(3)|F3F(2, 0x35, 0x053), CMPFCC(~3)|F3F(~2, ~0x35, ~0x053), "9,V,R", 0, v9 },
> -{ "fcmpeq",          F3F(2, 0x34, 0x057),            F3F(~2, ~0x34, ~0x057)|RD_G0, "V,R", 0, v8 },
> -{ "fcmpeq", CMPFCC(0)|F3F(2, 0x35, 0x057), CMPFCC(~0)|F3F(~2, ~0x35, ~0x057), "6,V,R", 0, v9 },
> -{ "fcmpeq", CMPFCC(1)|F3F(2, 0x35, 0x057), CMPFCC(~1)|F3F(~2, ~0x35, ~0x057), "7,V,R", 0, v9 },
> -{ "fcmpeq", CMPFCC(2)|F3F(2, 0x35, 0x057), CMPFCC(~2)|F3F(~2, ~0x35, ~0x057), "8,V,R", 0, v9 },
> -{ "fcmpeq", CMPFCC(3)|F3F(2, 0x35, 0x057), CMPFCC(~3)|F3F(~2, ~0x35, ~0x057), "9,V,R", 0, v9 },
> -{ "fcmps",          F3F(2, 0x35, 0x051),            F3F(~2, ~0x35, ~0x051)|RD_G0, "e,f",   0, v6 },
> -{ "fcmps", CMPFCC(0)|F3F(2, 0x35, 0x051), CMPFCC(~0)|F3F(~2, ~0x35, ~0x051), "6,e,f", 0, v9 },
> -{ "fcmps", CMPFCC(1)|F3F(2, 0x35, 0x051), CMPFCC(~1)|F3F(~2, ~0x35, ~0x051), "7,e,f", 0, v9 },
> -{ "fcmps", CMPFCC(2)|F3F(2, 0x35, 0x051), CMPFCC(~2)|F3F(~2, ~0x35, ~0x051), "8,e,f", 0, v9 },
> -{ "fcmps", CMPFCC(3)|F3F(2, 0x35, 0x051), CMPFCC(~3)|F3F(~2, ~0x35, ~0x051), "9,e,f", 0, v9 },
> -{ "fcmpes",          F3F(2, 0x35, 0x055),            F3F(~2, ~0x35, ~0x055)|RD_G0, "e,f",   0, v6 },
> -{ "fcmpes", CMPFCC(0)|F3F(2, 0x35, 0x055), CMPFCC(~0)|F3F(~2, ~0x35, ~0x055), "6,e,f", 0, v9 },
> -{ "fcmpes", CMPFCC(1)|F3F(2, 0x35, 0x055), CMPFCC(~1)|F3F(~2, ~0x35, ~0x055), "7,e,f", 0, v9 },
> -{ "fcmpes", CMPFCC(2)|F3F(2, 0x35, 0x055), CMPFCC(~2)|F3F(~2, ~0x35, ~0x055), "8,e,f", 0, v9 },
> -{ "fcmpes", CMPFCC(3)|F3F(2, 0x35, 0x055), CMPFCC(~3)|F3F(~2, ~0x35, ~0x055), "9,e,f", 0, v9 },
> -
> -/* These Extended FPop (FIFO) instructions are new in the Fujitsu
> -   MB86934, replacing the CPop instructions from v6 and later
> -   processors.  */
> -
> -#define EFPOP1_2(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op)|RS1_G0, args, 0, sparclite }
> -#define EFPOP1_3(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op),        args, 0, sparclite }
> -#define EFPOP2_2(name, op, args) { name, F3F(2, 0x37, op), F3F(~2, ~0x37, ~op)|RD_G0,  args, 0, sparclite }
> -
> -EFPOP1_2 ("efitod", 0x0c8, "f,H"),
> -EFPOP1_2 ("efitos", 0x0c4, "f,g"),
> -EFPOP1_2 ("efdtoi", 0x0d2, "B,g"),
> -EFPOP1_2 ("efstoi", 0x0d1, "f,g"),
> -EFPOP1_2 ("efstod", 0x0c9, "f,H"),
> -EFPOP1_2 ("efdtos", 0x0c6, "B,g"),
> -EFPOP1_2 ("efmovs", 0x001, "f,g"),
> -EFPOP1_2 ("efnegs", 0x005, "f,g"),
> -EFPOP1_2 ("efabss", 0x009, "f,g"),
> -EFPOP1_2 ("efsqrtd", 0x02a, "B,H"),
> -EFPOP1_2 ("efsqrts", 0x029, "f,g"),
> -EFPOP1_3 ("efaddd", 0x042, "v,B,H"),
> -EFPOP1_3 ("efadds", 0x041, "e,f,g"),
> -EFPOP1_3 ("efsubd", 0x046, "v,B,H"),
> -EFPOP1_3 ("efsubs", 0x045, "e,f,g"),
> -EFPOP1_3 ("efdivd", 0x04e, "v,B,H"),
> -EFPOP1_3 ("efdivs", 0x04d, "e,f,g"),
> -EFPOP1_3 ("efmuld", 0x04a, "v,B,H"),
> -EFPOP1_3 ("efmuls", 0x049, "e,f,g"),
> -EFPOP1_3 ("efsmuld", 0x069, "e,f,H"),
> -EFPOP2_2 ("efcmpd", 0x052, "v,B"),
> -EFPOP2_2 ("efcmped", 0x056, "v,B"),
> -EFPOP2_2 ("efcmps", 0x051, "e,f"),
> -EFPOP2_2 ("efcmpes", 0x055, "e,f"),
> -
> -#undef EFPOP1_2
> -#undef EFPOP1_3
> -#undef EFPOP2_2
> -
> -/* These are marked F_ALIAS, so that they won't conflict with sparclite insns
> -   present.  Otherwise, the F_ALIAS flag is ignored.  */
> -{ "cpop1", F3(2, 0x36, 0), F3(~2, ~0x36, ~1), "[1+2],d", F_ALIAS, v6notv9 },
> -{ "cpop2", F3(2, 0x37, 0), F3(~2, ~0x37, ~1), "[1+2],d", F_ALIAS, v6notv9 },
> -
> -/* sparclet specific insns */
> -
> -commuteop ("umac", 0x3e, sparclet),
> -commuteop ("smac", 0x3f, sparclet),
> -commuteop ("umacd", 0x2e, sparclet),
> -commuteop ("smacd", 0x2f, sparclet),
> -commuteop ("umuld", 0x09, sparclet),
> -commuteop ("smuld", 0x0d, sparclet),
> -
> -{ "shuffle", F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0), "1,2,d", 0, sparclet },
> -{ "shuffle", F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1), "1,i,d", 0, sparclet },
> -
> -{ "crdcxt", F3(2, 0x36, 0)|ASI(4), F3(~2, ~0x36, ~0)|ASI(~4)|RS2(~0), "U,d", 0, sparclet },
> -{ "cwrcxt", F3(2, 0x36, 0)|ASI(3), F3(~2, ~0x36, ~0)|ASI(~3)|RS2(~0), "1,u", 0, sparclet },
> -{ "cpush", F3(2, 0x36, 0)|ASI(0), F3(~2, ~0x36, ~0)|ASI(~0)|RD(~0), "1,2", 0, sparclet },
> -{ "cpusha", F3(2, 0x36, 0)|ASI(1), F3(~2, ~0x36, ~0)|ASI(~1)|RD(~0), "1,2", 0, sparclet },
> -{ "cpull", F3(2, 0x36, 0)|ASI(2), F3(~2, ~0x36, ~0)|ASI(~2)|RS1(~0)|RS2(~0), "d", 0, sparclet },
> -
> -/* sparclet coprocessor branch insns */
> -/* FIXME: We have to mark these as aliases until we can sort opcodes based
> -   on selected cpu.  */
> -#define slcbcc2(opcode, mask, lose) \
> - { opcode, (mask), ANNUL|(lose), "l",    F_DELAYED|F_CONDBR|F_ALIAS, sparclet }, \
> - { opcode, (mask)|ANNUL, (lose), ",a l", F_DELAYED|F_CONDBR|F_ALIAS, sparclet }
> -#define slcbcc(opcode, mask) \
> -  slcbcc2(opcode, F2(0, 7)|COND(mask), F2(~0, ~7)|COND(~(mask)))
> -
> -/*slcbcc("cbn", 0), - already defined */
> -slcbcc("cbe", 1),
> -slcbcc("cbf", 2),
> -slcbcc("cbef", 3),
> -slcbcc("cbr", 4),
> -slcbcc("cber", 5),
> -slcbcc("cbfr", 6),
> -slcbcc("cbefr", 7),
> -/*slcbcc("cba", 8), - already defined */
> -slcbcc("cbne", 9),
> -slcbcc("cbnf", 10),
> -slcbcc("cbnef", 11),
> -slcbcc("cbnr", 12),
> -slcbcc("cbner", 13),
> -slcbcc("cbnfr", 14),
> -slcbcc("cbnefr", 15),
> -
> -#undef slcbcc2
> -#undef slcbcc
> -
> -/* More v9 specific insns */
> -
> -#define IMPDEP(name, code) \
> -{ name, F3(2, code, 0), F3(~2, ~code, ~0)|ASI(~0), "1,2,d", 0, v9 }, \
> -{ name, F3(2, code, 1), F3(~2, ~code, ~1),   "1,i,d", 0, v9 }, \
> -{ name, F3(2, code, 0), F3(~2, ~code, ~0),         "x,1,2,d", 0, v9 }, \
> -{ name, F3(2, code, 0), F3(~2, ~code, ~0),         "x,e,f,g", 0, v9 }
> -
> -IMPDEP ("impdep1", 0x36),
> -IMPDEP ("impdep2", 0x37),
> -
> -#undef IMPDEP
> -
> -{ "casa", F3(3, 0x3c, 0), F3(~3, ~0x3c, ~0), "[1]A,2,d", 0, v9 },
> -{ "casa", F3(3, 0x3c, 1), F3(~3, ~0x3c, ~1), "[1]o,2,d", 0, v9 },
> -{ "casxa", F3(3, 0x3e, 0), F3(~3, ~0x3e, ~0), "[1]A,2,d", 0, v9 },
> -{ "casxa", F3(3, 0x3e, 1), F3(~3, ~0x3e, ~1), "[1]o,2,d", 0, v9 },
> -
> -/* v9 synthetic insns */
> -/* FIXME: still missing "signx d", and "clruw d".  Can't be done here.  */
> -{ "iprefetch", F2(0, 1)|(2<<20)|BPRED, F2(~0, ~1)|(1<<20)|ANNUL|COND(~0), "G", 0, v9 }, /* bn,a,pt %xcc,label */
> -{ "signx", F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, v9 }, /* sra rs1,%g0,rd */
> -{ "clruw", F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, v9 }, /* srl rs1,%g0,rd */
> -{ "cas", F3(3, 0x3c, 0)|ASI(0x80), F3(~3, ~0x3c, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, v9 }, /* casa [rs1]ASI_P,rs2,rd */
> -{ "casl", F3(3, 0x3c, 0)|ASI(0x88), F3(~3, ~0x3c, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, v9 }, /* casa [rs1]ASI_P_L,rs2,rd */
> -{ "casx", F3(3, 0x3e, 0)|ASI(0x80), F3(~3, ~0x3e, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, v9 }, /* casxa [rs1]ASI_P,rs2,rd */
> -{ "casxl", F3(3, 0x3e, 0)|ASI(0x88), F3(~3, ~0x3e, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, v9 }, /* casxa [rs1]ASI_P_L,rs2,rd */
> -
> -/* Ultrasparc extensions */
> -/* FIXME: lots more to go */
> -{ "shutdown", F3F(2, 0x36, 0x80), F3(~2, ~0x36, ~0x80)|RD_G0|RS1_G0|RS2_G0, "", 0, v9a },
> -
> -};
> -
> -const int sparc_num_opcodes = ((sizeof sparc_opcodes)/(sizeof sparc_opcodes[0]));
> -
> -/* Utilities for argument parsing.  */
> -
> -typedef struct
> -{
> -  int value;
> -  char *name;
> -} arg;
> -
> -/* Look up NAME in TABLE.  */
> -
> -static int
> -lookup_name (table, name)
> -     arg *table;
> -     char *name;
> -{
> -  arg *p;
> -
> -  for (p = table; p->name; ++p)
> -    if (strcmp (name, p->name) == 0)
> -      return p->value;
> -
> -  return -1;
> -}
> -
> -/* Look up VALUE in TABLE.  */
> -
> -static char *
> -lookup_value (table, value)
> -     arg *table;
> -     int value;
> -{
> -  arg *p;
> -
> -  for (p = table; p->name; ++p)
> -    if (value == p->value)
> -      return p->name;
> -
> -  return (char *) 0;
> -}
> -
> -/* Handle ASI's.  */
> -
> -static arg asi_table[] =
> -{
> -  { 0x10, "#ASI_AIUP" },
> -  { 0x11, "#ASI_AIUS" },
> -  { 0x18, "#ASI_AIUP_L" },
> -  { 0x19, "#ASI_AIUS_L" },
> -  { 0x80, "#ASI_P" },
> -  { 0x81, "#ASI_S" },
> -  { 0x82, "#ASI_PNF" },
> -  { 0x83, "#ASI_SNF" },
> -  { 0x88, "#ASI_P_L" },
> -  { 0x89, "#ASI_S_L" },
> -  { 0x8a, "#ASI_PNF_L" },
> -  { 0x8b, "#ASI_SNF_L" },
> -  { 0x10, "#ASI_AS_IF_USER_PRIMARY" },
> -  { 0x11, "#ASI_AS_IF_USER_SECONDARY" },
> -  { 0x18, "#ASI_AS_IF_USER_PRIMARY_L" },
> -  { 0x19, "#ASI_AS_IF_USER_SECONDARY_L" },
> -  { 0x80, "#ASI_PRIMARY" },
> -  { 0x81, "#ASI_SECONDARY" },
> -  { 0x82, "#ASI_PRIMARY_NOFAULT" },
> -  { 0x83, "#ASI_SECONDARY_NOFAULT" },
> -  { 0x88, "#ASI_PRIMARY_LITTLE" },
> -  { 0x89, "#ASI_SECONDARY_LITTLE" },
> -  { 0x8a, "#ASI_PRIMARY_NOFAULT_LITTLE" },
> -  { 0x8b, "#ASI_SECONDARY_NOFAULT_LITTLE" },
> -  { 0, 0 }
> -};
> -
> -/* Return the value for ASI NAME, or -1 if not found.  */
> -
> -int
> -sparc_encode_asi (name)
> -     char *name;
> -{
> -  return lookup_name (asi_table, name);
> -}
> -
> -/* Return the name for ASI value VALUE or NULL if not found.  */
> -
> -char *
> -sparc_decode_asi (value)
> -     int value;
> -{
> -  return lookup_value (asi_table, value);
> -}
> -
> -/* Handle membar masks.  */
> -
> -static arg membar_table[] =
> -{
> -  { 0x40, "#Sync" },
> -  { 0x20, "#MemIssue" },
> -  { 0x10, "#Lookaside" },
> -  { 0x08, "#StoreStore" },
> -  { 0x04, "#LoadStore" },
> -  { 0x02, "#StoreLoad" },
> -  { 0x01, "#LoadLoad" },
> -  { 0, 0 }
> -};
> -
> -/* Return the value for membar arg NAME, or -1 if not found.  */
> -
> -int
> -sparc_encode_membar (name)
> -     char *name;
> -{
> -  return lookup_name (membar_table, name);
> -}
> -
> -/* Return the name for membar value VALUE or NULL if not found.  */
> -
> -char *
> -sparc_decode_membar (value)
> -     int value;
> -{
> -  return lookup_value (membar_table, value);
> -}
> -
> -/* Handle prefetch args.  */
> -
> -static arg prefetch_table[] =
> -{
> -  { 0, "#n_reads" },
> -  { 1, "#one_read" },
> -  { 2, "#n_writes" },
> -  { 3, "#one_write" },
> -  { 4, "#page" },
> -  { 0, 0 }
> -};
> -
> -/* Return the value for prefetch arg NAME, or -1 if not found.  */
> -
> -int
> -sparc_encode_prefetch (name)
> -     char *name;
> -{
> -  return lookup_name (prefetch_table, name);
> -}
> -
> -/* Return the name for prefetch value VALUE or NULL if not found.  */
> -
> -char *
> -sparc_decode_prefetch (value)
> -     int value;
> -{
> -  return lookup_value (prefetch_table, value);
> -}
> -
> -/* Handle sparclet coprocessor registers.  */
> -
> -static arg sparclet_cpreg_table[] =
> -{
> -  { 0, "%ccsr" },
> -  { 1, "%ccfr" },
> -  { 2, "%cccrcr" },
> -  { 3, "%ccpr" },
> -  { 0, 0 }
> -};
> -
> -/* Return the value for sparclet cpreg arg NAME, or -1 if not found.  */
> -
> -int
> -sparc_encode_sparclet_cpreg (name)
> -     char *name;
> -{
> -  return lookup_name (sparclet_cpreg_table, name);
> -}
> -
> -/* Return the name for sparclet cpreg value VALUE or NULL if not found.  */
> -
> -char *
> -sparc_decode_sparclet_cpreg (value)
> -     int value;
> -{
> -  return lookup_value (sparclet_cpreg_table, value);
> -}
> diff --git a/opcode/sparc.h b/opcode/sparc.h
> deleted file mode 100644
> index 014a534..0000000
> --- a/opcode/sparc.h
> +++ /dev/null
> @@ -1,220 +0,0 @@
> -/* Definitions for opcode table for the sparc.
> -   Copyright (C) 1989, 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
> -
> -This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
> -the GNU Binutils.
> -
> -GAS/GDB 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/GDB 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 or GDB; see the file COPYING. If not, write to
> -the Free Software Foundation, 51 Franklin Street, Fifth Floor,
> -Boston, MA 02110-1301, USA.  */
> -
> -/* The SPARC opcode table (and other related data) is defined in
> -   the opcodes library in sparc-opc.c.  If you change anything here, make
> -   sure you fix up that file, and vice versa.  */
> -
> - /* FIXME-someday: perhaps the ,a's and such should be embedded in the
> -    instruction's name rather than the args.  This would make gas faster, pinsn
> -    slower, but would mess up some macros a bit.  xoxorich. */
> -
> -/* List of instruction sets variations.
> -   These values are such that each element is either a superset of a
> -   preceding each one or they conflict in which case SPARC_OPCODE_CONFLICT_P
> -   returns non-zero.
> -   The values are indices into `sparc_opcode_archs' defined in sparc-opc.c.
> -   Don't change this without updating sparc-opc.c.  */
> -
> -enum sparc_opcode_arch_val {
> -  SPARC_OPCODE_ARCH_V6 = 0,
> -  SPARC_OPCODE_ARCH_V7,
> -  SPARC_OPCODE_ARCH_V8,
> -  SPARC_OPCODE_ARCH_SPARCLET,
> -  SPARC_OPCODE_ARCH_SPARCLITE,
> -  /* v9 variants must appear last */
> -  SPARC_OPCODE_ARCH_V9,
> -  SPARC_OPCODE_ARCH_V9A, /* v9 with ultrasparc additions */
> -  SPARC_OPCODE_ARCH_BAD /* error return from sparc_opcode_lookup_arch */
> -};
> -
> -/* The highest architecture in the table.  */
> -#define SPARC_OPCODE_ARCH_MAX (SPARC_OPCODE_ARCH_BAD - 1)
> -
> -/* Table of cpu variants.  */
> -
> -struct sparc_opcode_arch {
> -  const char *name;
> -  /* Mask of sparc_opcode_arch_val's supported.
> -     EG: For v7 this would be ((1 << v6) | (1 << v7)).  */
> -  /* These are short's because sparc_opcode.architecture is.  */
> -  short supported;
> -};
> -
> -extern const struct sparc_opcode_arch sparc_opcode_archs[];
> -
> -/* Given architecture name, look up it's sparc_opcode_arch_val value.  */
> -extern enum sparc_opcode_arch_val sparc_opcode_lookup_arch ();
> -
> -/* Return the bitmask of supported architectures for ARCH.  */
> -#define SPARC_OPCODE_SUPPORTED(ARCH) (sparc_opcode_archs[ARCH].supported)
> -
> -/* Non-zero if ARCH1 conflicts with ARCH2.
> -   IE: ARCH1 as a supported bit set that ARCH2 doesn't, and vice versa.  */
> -#define SPARC_OPCODE_CONFLICT_P(ARCH1, ARCH2) \
> -(((SPARC_OPCODE_SUPPORTED (ARCH1) & SPARC_OPCODE_SUPPORTED (ARCH2)) \
> -  != SPARC_OPCODE_SUPPORTED (ARCH1)) \
> - && ((SPARC_OPCODE_SUPPORTED (ARCH1) & SPARC_OPCODE_SUPPORTED (ARCH2)) \
> -     != SPARC_OPCODE_SUPPORTED (ARCH2)))
> -
> -/* Structure of an opcode table entry.  */
> -
> -struct sparc_opcode {
> -  const char *name;
> -  unsigned long match; /* Bits that must be set. */
> -  unsigned long lose; /* Bits that must not be set. */
> -  const char *args;
> -  /* This was called "delayed" in versions before the flags. */
> -  char flags;
> -  short architecture; /* Bitmask of sparc_opcode_arch_val's.  */
> -};
> -
> -#define F_DELAYED 1 /* Delayed branch */
> -#define F_ALIAS 2 /* Alias for a "real" instruction */
> -#define F_UNBR 4 /* Unconditional branch */
> -#define F_CONDBR 8 /* Conditional branch */
> -#define F_JSR 16 /* Subroutine call */
> -/* FIXME: Add F_ANACHRONISTIC flag for v9.  */
> -
> -/*
> -
> -All sparc opcodes are 32 bits, except for the `set' instruction (really a
> -macro), which is 64 bits. It is handled as a special case.
> -
> -The match component is a mask saying which bits must match a particular
> -opcode in order for an instruction to be an instance of that opcode.
> -
> -The args component is a string containing one character for each operand of the
> -instruction.
> -
> -Kinds of operands:
> - # Number used by optimizer. It is ignored.
> - 1 rs1 register.
> - 2 rs2 register.
> - d rd register.
> - e frs1 floating point register.
> - v frs1 floating point register (double/even).
> - V frs1 floating point register (quad/multiple of 4).
> - f frs2 floating point register.
> - B frs2 floating point register (double/even).
> - R frs2 floating point register (quad/multiple of 4).
> - g frsd floating point register.
> - H frsd floating point register (double/even).
> - J frsd floating point register (quad/multiple of 4).
> - b crs1 coprocessor register
> - c crs2 coprocessor register
> - D crsd coprocessor register
> - m alternate space register (asr) in rd
> - M alternate space register (asr) in rs1
> - h 22 high bits.
> - K MEMBAR mask (7 bits). (v9)
> - j 10 bit Immediate. (v9)
> - I 11 bit Immediate. (v9)
> - i 13 bit Immediate.
> - n 22 bit immediate.
> - k 2+14 bit PC relative immediate. (v9)
> - G 19 bit PC relative immediate. (v9)
> - l 22 bit PC relative immediate.
> - L 30 bit PC relative immediate.
> - a Annul. The annul bit is set.
> - A Alternate address space. Stored as 8 bits.
> - C Coprocessor state register.
> - F floating point state register.
> - p Processor state register.
> - N Branch predict clear ",pn" (v9)
> - T Branch predict set ",pt" (v9)
> - z %icc. (v9)
> - Z %xcc. (v9)
> - q Floating point queue.
> - r Single register that is both rs1 and rd.
> - O Single register that is both rs2 and rd.
> - Q Coprocessor queue.
> - S Special case.
> - t Trap base register.
> - w Window invalid mask register.
> - y Y register.
> - u sparclet coprocessor registers in rd position
> - U sparclet coprocessor registers in rs1 position
> - E %ccr. (v9)
> - s %fprs. (v9)
> - P %pc.  (v9)
> - W %tick. (v9)
> - o %asi. (v9)
> - 6 %fcc0. (v9)
> - 7 %fcc1. (v9)
> - 8 %fcc2. (v9)
> - 9 %fcc3. (v9)
> - ! Privileged Register in rd (v9)
> - ? Privileged Register in rs1 (v9)
> - * Prefetch function constant. (v9)
> - x OPF field (v9 impdep).
> -
> -The following chars are unused: (note: ,[] are used as punctuation)
> -[XY3450]
> -
> -*/
> -
> -#define OP2(x) (((x)&0x7) << 22) /* op2 field of format2 insns */
> -#define OP3(x) (((x)&0x3f) << 19) /* op3 field of format3 insns */
> -#define OP(x) ((unsigned)((x)&0x3) << 30) /* op field of all insns */
> -#define OPF(x) (((x)&0x1ff) << 5) /* opf field of float insns */
> -#define OPF_LOW5(x) OPF((x)&0x1f) /* v9 */
> -#define F3F(x, y, z) (OP(x) | OP3(y) | OPF(z)) /* format3 float insns */
> -#define F3I(x) (((x)&0x1) << 13) /* immediate field of format 3 insns */
> -#define F2(x, y) (OP(x) | OP2(y)) /* format 2 insns */
> -#define F3(x, y, z) (OP(x) | OP3(y) | F3I(z)) /* format3 insns */
> -#define F1(x) (OP(x))
> -#define DISP30(x) ((x)&0x3fffffff)
> -#define ASI(x) (((x)&0xff) << 5) /* asi field of format3 insns */
> -#define RS2(x) ((x)&0x1f) /* rs2 field */
> -#define SIMM13(x) ((x)&0x1fff) /* simm13 field */
> -#define RD(x) (((x)&0x1f) << 25) /* destination register field */
> -#define RS1(x) (((x)&0x1f) << 14) /* rs1 field */
> -#define ASI_RS2(x) (SIMM13(x))
> -#define MEMBAR(x) ((x)&0x7f)
> -
> -#define ANNUL (1<<29)
> -#define BPRED (1<<19) /* v9 */
> -#define IMMED F3I(1)
> -#define RD_G0 RD(~0)
> -#define RS1_G0 RS1(~0)
> -#define RS2_G0 RS2(~0)
> -
> -extern struct sparc_opcode sparc_opcodes[];
> -extern const int sparc_num_opcodes;
> -
> -int sparc_encode_asi ();
> -char *sparc_decode_asi ();
> -int sparc_encode_membar ();
> -char *sparc_decode_membar ();
> -int sparc_encode_prefetch ();
> -char *sparc_decode_prefetch ();
> -int sparc_encode_sparclet_cpreg ();
> -char *sparc_decode_sparclet_cpreg ();
> -
> -/*
> - * Local Variables:
> - * fill-column: 131
> - * comment-column: 0
> - * End:
> - */
> -
> -/* end of sparc.h */
> diff --git a/opcode/sysdep.h b/opcode/sysdep.h
> deleted file mode 100644
> index b81e923..0000000
> --- a/opcode/sysdep.h
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
>

Ok.

Paolo

_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 03/15] misc: Add some more files to the .gitignore

Paolo Bonzini-2
In reply to this post by Holger Freyther
Il 08/04/2013 11:30, Holger Hans Peter Freyther ha scritto:

> From: Holger Hans Peter Freyther <[hidden email]>
>
> ---
>  .gitignore |   37 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
>
> diff --git a/.gitignore b/.gitignore
> index 504cfce..d0578bc 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -6,6 +6,7 @@
>  *.lo
>  *.o
>  *.star
> +*.sw?
>  .svn
>  .deps
>  .dirstamp
> @@ -34,3 +35,39 @@ termnorm
>  /gst-tool
>  /gst.im
>  /smalltalk-mode-init.el
> +
> +
> +libgst/genbc
> +libgst/genbc-decl.stamp
> +libgst/genbc-impl.stamp
> +libgst/genpr-parse.stamp
> +libgst/genprims
> +libgst/genvm
> +libgst/genvm-parse.stamp
> +
> +lightning/asm-i386.h
> +lightning/core-i386.h
> +packages/glib/libs.def
> +packages/gtk/Enums.st
> +packages/gtk/Funcs.st
> +packages/gtk/Structs.st
> +packages/gtk/cpp
> +packages/gtk/enums
> +packages/gtk/enums.c
> +packages/gtk/funcs
> +packages/gtk/libs.def
> +packages/gtk/mk_enums
> +packages/gtk/mk_sizeof
> +packages/gtk/order
> +packages/gtk/sizeof
> +packages/gtk/sizeof.c
> +packages/gtk/structs
> +packages/i18n/ref-add.sed
> +packages/i18n/ref-del.sed
> +packages/net/gnutls-wrapper
> +packages/object-dumper/stamp-classes
> +snprintfv/snprintfv/compat.stamp
> +
> +tests/gst.im
> +tests/testsuite.dir/
> +tests/testsuite.log
>

Ok.

Paolo


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 04/15] kernel: Remove unused variable from the StarPackage class

Paolo Bonzini-2
In reply to this post by Holger Freyther
Il 08/04/2013 11:30, Holger Hans Peter Freyther ha scritto:

> From: Holger Hans Peter Freyther <[hidden email]>
>
> 2013-03-04  Holger Hans Peter Freyther  <[hidden email]>
>
> * kernel/PkgLoader.st: Remove unused variable.
> ---
>  ChangeLog           |    4 ++++
>  kernel/PkgLoader.st |    2 +-
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 2abc1c4..6b6d9d2 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,7 @@
> +2013-03-04  Holger Hans Peter Freyther  <[hidden email]>
> +
> + * kernel/PkgLoader.st: Remove unused variable.
> +
>  2013-01-21  Gwenael Casaccio  <[hidden email]>
>  
>   * main.c: Remove ENABLE_DISASSEMBLER support
> diff --git a/kernel/PkgLoader.st b/kernel/PkgLoader.st
> index 3464517..b9748f2 100644
> --- a/kernel/PkgLoader.st
> +++ b/kernel/PkgLoader.st
> @@ -1080,7 +1080,7 @@ PackageInfo subclass: StarPackage [
>  
>      loadedPackage [
>   <category: 'accessing'>
> - | file package |
> + | package |
>   loadedPackage isNil ifFalse: [^loadedPackage].
>   package := self file zip / 'package.xml'
>   withReadStreamDo: [ :fileStream | Package parse: fileStream].
>

Ok.

Paolo

_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 05/15] kernel: Introduce the DirPackage packages to help with development

Paolo Bonzini-2
In reply to this post by Holger Freyther
Il 08/04/2013 11:30, Holger Hans Peter Freyther ha scritto:

> From: Holger Hans Peter Freyther <[hidden email]>
>
> Add a way to load a Package from the package.xml and not go through
> the creation of a star file. This can make developing with packages
> more effective.
>
> 2013-03-24  Holger Hans Peter Freyther  <[hidden email]>
>
> * libgst/files.c: Add DirPackage.st to the bootstrap.
> * kernel/DirPackage.st: Add new file with the DirPackage and DirPackagesContainer.
> * kernel/PkgLoader.st: Refactor and create ExternalPackage baseclass.
> ---
>  ChangeLog            |    6 +++
>  NEWS                 |    7 +++
>  kernel/DirPackage.st |  134 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  kernel/Makefile.frag |    2 +-
>  kernel/PkgLoader.st  |   28 +++++++----
>  libgst/files.c       |    1 +
>  packages.xml         |    1 +
>  7 files changed, 169 insertions(+), 10 deletions(-)
>  create mode 100644 kernel/DirPackage.st
>
> diff --git a/ChangeLog b/ChangeLog
> index 6b6d9d2..8a3085d 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,9 @@
> +2013-03-24  Holger Hans Peter Freyther  <[hidden email]>
> +
> + * libgst/files.c: Add DirPackage.st to the bootstrap.
> + * kernel/DirPackage.st: Add new file with the DirPackage and DirPackagesContainer.
> + * kernel/PkgLoader.st: Refactor and create ExternalPackage baseclass.
> +
>  2013-03-04  Holger Hans Peter Freyther  <[hidden email]>
>  
>   * kernel/PkgLoader.st: Remove unused variable.
> diff --git a/NEWS b/NEWS
> index b5e9127..d768a8f 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -1,5 +1,12 @@
>  List of user-visible changes in GNU Smalltalk
>  
> +NEWS FROM 3.2.5 to 3.2.90
> +
> +o   Add PackageLoader>>#loadPackageFromFile: to load a package by using
> +    a package.xml. This can make the development more effective.
> +
> +-----------------------------------------------------------------------------
> +
>  NEWS FROM 3.2.4 to 3.2.5
>  
>  o   Add Delay>>#value:onTimeoutDo: as an easy way to timeout an operation.
> diff --git a/kernel/DirPackage.st b/kernel/DirPackage.st
> new file mode 100644
> index 0000000..de353d9
> --- /dev/null
> +++ b/kernel/DirPackage.st
> @@ -0,0 +1,134 @@
> +"======================================================================
> +|
> +|   Load packages from a directory without loading a Star file.
> +|
> +|
> + ======================================================================"
> +
> +"======================================================================
> +|
> +| Copyright 2013
> +| Free Software Foundation, Inc.
> +| Written by Holger Hans Peter Freyther.
> +|
> +| This file is part of the GNU Smalltalk class library.
> +|
> +| The GNU Smalltalk class library is free software; you can redistribute it
> +| and/or modify it under the terms of the GNU Lesser General Public License
> +| as published by the Free Software Foundation; either version 2.1, or (at
> +| your option) any later version.
> +|
> +| The GNU Smalltalk class library 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 Lesser
> +| General Public License for more details.
> +|
> +| You should have received a copy of the GNU Lesser General Public License
> +| along with the GNU Smalltalk class library; see the file COPYING.LIB.
> +| If not, write to the Free Software Foundation, 59 Temple Place - Suite
> +| 330, Boston, MA 02110-1301, USA.
> +|
> + ======================================================================"
> +
> +Namespace current: Kernel [
> +
> +ExternalPackage subclass: DirPackage [
> +    <category: 'Language-Packaging'>
> +    <comment: 'I can parse a package.xml from a directort and treat it
> +    like a package. This allows loading packages from a directory without
> +    the need of zipping them first.'>
> +
> +    DirPackage class >> file: aFile [
> +        ^ self new
> +            file: aFile;
> +            yourself
> +    ]
> +
> +    directory [
> +        ^ self file asFile directory.
> +    ]
> +
> +    name [
> +        "Pick the name of the loaded package"
> +        ^ self loadedPackage name.
> +    ]
> +
> +    loadedPackage [
> +        <category: 'accessing'>
> +        | file package |
> +        loadedPackage isNil ifFalse: [^loadedPackage].
> +        file := self file asFile.
> +        package := Package parse: file readStream.
> +        package isNil
> +            ifTrue: [^self error: 'invalid disabled-package tag inside a star file'].
> +        package relativeDirectory: file directory.
> +        package baseDirectories: {file directory}.
> +        package name isNil
> +            ifTrue: [^self error: 'package name must not be nil'].
> +        loadedPackage := package.
> +        ^loadedPackage
> +    ]
> +]
> +
> +PackageContainer subclass: DirPackageContainer [
> +
> +    <category: 'Language-Packaging'>
> +    <comment: 'I hold a list of parsed packages.'>

I'm not sure why this class is needed.  Also, why adding ".dir"?  It
seems to me that this is the real reason why you cannot use #fileIn.

> +    DirPackageContainer class >> on: aPackage [
> +        <category: 'creation'>
> +        ^ self new
> +            add: aPackage;
> +            yourself
> +    ]
> +
> +    add: aPackage [
> +        <category: 'addition'>
> +
> +        self packages
> +                at: aPackage name, '.dir' put: aPackage.
> +    ]
> +
> +    refresh: aDate [
> +        "no op.. packages contain what we need"
> +    ]
> +]
> +
> +]
> +
> +PackageLoader class extend [
> +
> +    dirPackages [
> +        | container |
> +
> +        <category: '*Language-Kernel'>
> +
> +        "Check if there is already a container"
> +        root do: [:each |
> +            each class = Kernel.DirPackageContainer
> +                ifTrue: [^each].
> +        ].

If this is really needed, please put the Kernel.DirPackageContainer
instance in DirPackageContainer, and call this
DirPackageContainer>>#uniqueInstance.

> +        container := Kernel.DirPackageContainer new.
> +        root add: container.
> +        ^ container.
> +    ]
> +
> +    loadPackageFromFile: aFileName [
> +        | package |
> +        <category: '*Language-Kernel'>
> +
> +        "Make sure that root is initialized."
> +        self refresh.
> +
> +        "Add the 'directory' to the packages"
> +        package := Kernel.DirPackage file: aFileName.
> +
> +        self dirPackages add: package.
> +
> +        "And now file it in. Do not use >>fileIn as it will
> +        attempt to load the package by name."
> +        self fileInPackages: package prerequisites.
> +        package primFileIn.
> +    ]
> +]
> diff --git a/kernel/Makefile.frag b/kernel/Makefile.frag
> index e61f2be..fb4b3d2 100644
> --- a/kernel/Makefile.frag
> +++ b/kernel/Makefile.frag
> @@ -1,3 +1,3 @@
>  $(srcdir)/kernel/stamp-classes: \
> -kernel/Array.st kernel/CompildMeth.st kernel/LookupTable.st kernel/RunArray.st kernel/Iterable.st kernel/ArrayColl.st kernel/CompiledBlk.st kernel/Magnitude.st kernel/Semaphore.st kernel/DeferBinding.st kernel/Association.st kernel/HomedAssoc.st kernel/ContextPart.st kernel/MappedColl.st kernel/SeqCollect.st kernel/Autoload.st kernel/DLD.st kernel/Memory.st kernel/Set.st kernel/Bag.st kernel/Date.st kernel/Message.st kernel/MessageLookup.st kernel/SharedQueue.st kernel/Behavior.st kernel/Delay.st kernel/Metaclass.st kernel/SmallInt.st kernel/BlkClosure.st kernel/Continuation.st kernel/Generator.st kernel/Dictionary.st kernel/MethodDict.st kernel/SortCollect.st kernel/BlkContext.st kernel/DirMessage.st kernel/MethodInfo.st kernel/Stream.st kernel/Boolean.st kernel/Directory.st kernel/MthCo
>  ntext.st kernel/String.st kernel/UniString.st kernel/ExcHandling.st kernel/Namespace.st kernel/SymLink.st kernel/VFS.st kernel/VFSZip.st kernel/Builtins.st kernel/False.st kernel/Number.st kernel/Sy
>  mbol.st kernel/ByteArray.st kernel/FilePath.st kernel/File.st kernel/SysDict.st kernel/ScaledDec.st kernel/FileSegment.st kernel/Object.st kernel/Time.st kernel/FileStream.st kernel/OrderColl.st kernel/CCallable.st kernel/CCallback.st kernel/CFuncs.st kernel/Float.st kernel/PkgLoader.st kernel/Transcript.st kernel/CObject.st kernel/Fraction.st kernel/Point.st kernel/True.st kernel/CStruct.st kernel/IdentDict.st kernel/PosStream.st kernel/UndefObject.st kernel/CType.st kernel/IdentitySet.st kernel/ProcSched.st kernel/ProcEnv.st kernel/ValueAdapt.st kernel/CharArray.st kernel/Integer.st kernel/Process.st kernel/CallinProcess.st kernel/WeakObjects.st kernel/Character.st kernel/UniChar.st kernel/Interval.st kernel/RWStream.st kernel/OtherArrays.st kernel/Class.st kernel/LargeInt.st kernel/Ran
>  dom.st kernel/WriteStream.st kernel/ClassDesc.st kernel/Link.st kernel/ReadStream.st kernel/ObjMemory.st kernel/Collection.st kernel/LinkedList.st kernel/Rectangle.st kernel/AnsiDates.st kernel/Comp
>  ildCode.st kernel/LookupKey.st kernel/BindingDict.st kernel/AbstNamespc.st kernel/RootNamespc.st kernel/SysExcept.st kernel/DynVariable.st kernel/HashedColl.st kernel/FileDescr.st kernel/FloatD.st kernel/FloatE.st kernel/FloatQ.st kernel/URL.st kernel/VarBinding.st kernel/RecursionLock.st kernel/Getopt.st kernel/Regex.st kernel/StreamOps.st
> +kernel/Array.st kernel/CompildMeth.st kernel/LookupTable.st kernel/RunArray.st kernel/Iterable.st kernel/ArrayColl.st kernel/CompiledBlk.st kernel/Magnitude.st kernel/Semaphore.st kernel/DeferBinding.st kernel/Association.st kernel/HomedAssoc.st kernel/ContextPart.st kernel/MappedColl.st kernel/SeqCollect.st kernel/Autoload.st kernel/DLD.st kernel/Memory.st kernel/Set.st kernel/Bag.st kernel/Date.st kernel/Message.st kernel/MessageLookup.st kernel/SharedQueue.st kernel/Behavior.st kernel/Delay.st kernel/Metaclass.st kernel/SmallInt.st kernel/BlkClosure.st kernel/Continuation.st kernel/Generator.st kernel/Dictionary.st kernel/MethodDict.st kernel/SortCollect.st kernel/BlkContext.st kernel/DirMessage.st kernel/MethodInfo.st kernel/Stream.st kernel/Boolean.st kernel/Directory.st kernel/MthCo
>  ntext.st kernel/String.st kernel/UniString.st kernel/ExcHandling.st kernel/Namespace.st kernel/SymLink.st kernel/VFS.st kernel/VFSZip.st kernel/Builtins.st kernel/False.st kernel/Number.st kernel/Sy
>  mbol.st kernel/ByteArray.st kernel/FilePath.st kernel/File.st kernel/SysDict.st kernel/ScaledDec.st kernel/FileSegment.st kernel/Object.st kernel/Time.st kernel/FileStream.st kernel/OrderColl.st kernel/CCallable.st kernel/CCallback.st kernel/CFuncs.st kernel/Float.st kernel/PkgLoader.st kernel/DirPackage.st kernel/Transcript.st kernel/CObject.st kernel/Fraction.st kernel/Point.st kernel/True.st kernel/CStruct.st kernel/IdentDict.st kernel/PosStream.st kernel/UndefObject.st kernel/CType.st kernel/IdentitySet.st kernel/ProcSched.st kernel/ProcEnv.st kernel/ValueAdapt.st kernel/CharArray.st kernel/Integer.st kernel/Process.st kernel/CallinProcess.st kernel/WeakObjects.st kernel/Character.st kernel/UniChar.st kernel/Interval.st kernel/RWStream.st kernel/OtherArrays.st kernel/Class.st kernel/L
>  argeInt.st kernel/Random.st kernel/WriteStream.st kernel/ClassDesc.st kernel/Link.st kernel/ReadStream.st kernel/ObjMemory.st kernel/Collection.st kernel/LinkedList.st kernel/Rectangle.st kernel/Ans
>  iDates.st kernel/CompildCode.st kernel/LookupKey.st kernel/BindingDict.st kernel/AbstNamespc.st kernel/RootNamespc.st kernel/SysExcept.st kernel/DynVariable.st kernel/HashedColl.st kernel/FileDescr.st kernel/FloatD.st kernel/FloatE.st kernel/FloatQ.st kernel/URL.st kernel/VarBinding.st kernel/RecursionLock.st kernel/Getopt.st kernel/Regex.st kernel/StreamOps.st
>   touch $(srcdir)/kernel/stamp-classes
> diff --git a/kernel/PkgLoader.st b/kernel/PkgLoader.st
> index b9748f2..53d9367 100644
> --- a/kernel/PkgLoader.st
> +++ b/kernel/PkgLoader.st
> @@ -917,20 +917,12 @@ XML.'>
>  
>  Namespace current: Kernel [
>  
> -PackageInfo subclass: StarPackage [
> +PackageInfo subclass: ExternalPackage [
>      | file loadedPackage |
>      
>      <category: 'Language-Packaging'>
>      <comment: nil>
>  
> -    StarPackage class >> file: file [
> - <category: 'accessing'>
> - ^(self new)
> -    file: file;
> -    name: (File stripPathFrom: (File stripExtensionFrom: file name));
> -    yourself
> -    ]
> -
>      fullPathOf: fileName [
>   "Try appending 'self directory' and fileName to each of the directory
>   in baseDirectories, and return the path to the first tried filename that
> @@ -1079,6 +1071,24 @@ PackageInfo subclass: StarPackage [
>      ]
>  
>      loadedPackage [
> +        ^ self subclassResponsibility
> +    ]
> +]
> +
> +ExternalPackage subclass: StarPackage [
> +
> +    <category: 'Language-Packaging'>
> +    <comment: 'I represent an external package in the form of a .star package'>
> +
> +    StarPackage class >> file: file [
> + <category: 'accessing'>
> + ^(self new)
> +    file: file;
> +    name: (File stripPathFrom: (File stripExtensionFrom: file name));
> +    yourself
> +    ]
> +
> +    loadedPackage [
>   <category: 'accessing'>
>   | package |
>   loadedPackage isNil ifFalse: [^loadedPackage].
> diff --git a/libgst/files.c b/libgst/files.c
> index ec33933..a7156f9 100644
> --- a/libgst/files.c
> +++ b/libgst/files.c
> @@ -288,6 +288,7 @@ static const char standard_files[] = {
>    "StreamOps.st\0"
>    "Regex.st\0"
>    "PkgLoader.st\0"
> +  "DirPackage.st\0"
>    "Autoload.st\0"
>  };
>  
> diff --git a/packages.xml b/packages.xml
> index c6d0e8c..fc6a049 100644
> --- a/packages.xml
> +++ b/packages.xml
> @@ -152,6 +152,7 @@
>    <file>CFuncs.st</file>
>    <file>Float.st</file>
>    <file>PkgLoader.st</file>
> +  <file>DirPackage.st</file>
>    <file>Transcript.st</file>
>    <file>CObject.st</file>
>    <file>Fraction.st</file>
>


_______________________________________________
help-smalltalk mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/help-smalltalk
12