Initial revision
authorK. Richard Pixley <rich@cygnus>
Sun, 19 May 1991 00:19:54 +0000 (00:19 +0000)
committerK. Richard Pixley <rich@cygnus>
Sun, 19 May 1991 00:19:54 +0000 (00:19 +0000)
16 files changed:
include/a29k-opcode.h [new file with mode: 0755]
include/arm-opcode.h [new file with mode: 0755]
include/convx-opcode.h [new file with mode: 0755]
include/i386-opcode.h [new file with mode: 0755]
include/i860-opcode.h [new file with mode: 0755]
include/i960-opcode.h [new file with mode: 0755]
include/m68k-opcode.h [new file with mode: 0755]
include/m88k-opcode.h [new file with mode: 0755]
include/mips-opcode.h [new file with mode: 0755]
include/np1-opcode.h [new file with mode: 0755]
include/ns32k-opcode.h [new file with mode: 0755]
include/pn-opcode.h [new file with mode: 0755]
include/pyr-opcode.h [new file with mode: 0755]
include/sparc-opcode.h [new file with mode: 0755]
include/tahoe-opcode.h [new file with mode: 0755]
include/vax-opcode.h [new file with mode: 0755]

diff --git a/include/a29k-opcode.h b/include/a29k-opcode.h
new file mode 100755 (executable)
index 0000000..59aac0e
--- /dev/null
@@ -0,0 +1,301 @@
+/* Table of opcodes for the AMD 29000
+   Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+
+This file is part of GDB and GAS.
+
+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 1, 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; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* $Id$ */
+
+struct a29k_opcode {
+  /* Name of the instruction.  */
+  char *name;
+
+  /* Opcode word */
+  unsigned long opcode;
+
+  /* A string of characters which describe the operands.
+     Valid characters are:
+     ,        Itself.  The character appears in the assembly code.
+     a        RA.  The register number is in bits 8-15 of the instruction.
+     b        RB.  The register number is in bits 0-7 of the instruction.
+     c        RC.  The register number is in bits 16-23 of the instruction.
+     i        An immediate operand is in bits 0-7 of the instruction.
+     x        Bits 0-7 and 16-23 of the instruction are bits 0-7 and 8-15
+              (respectively) of the immediate operand.
+     h        Same as x but the instruction contains bits 16-31 of the
+              immediate operand.
+     X        Same as x but bits 16-31 of the signed immediate operand
+              are set to 1 (thus the operand is always negative).
+     P,A      Bits 0-7 and 16-23 of the instruction are bits 2-9 and 10-17
+              (respectively) of the immediate operand.
+             P=PC-relative, sign-extended to 32 bits.
+             A=Absolute, zero-extended to 32 bits.
+     e        CE bit (bit 23) for a load/store instruction.
+     n        Control field (bits 16-22) for a load/store instruction.
+     v        Immediate operand in bits 16-23 of the instruction.
+              (used for trap numbers).
+     s        SA.  Special-purpose register number in bits 8-15
+              of the instruction.
+     u        UI--bit 7 of the instruction.
+     r        RND--bits 4-6 of the instruction.
+     d        FD--bits 2-3 of the instruction.
+     f        FS--bits 0-1 of the instruction.
+
+     Extensions for 29050:
+
+     d       FMT--bits 2-3 of the instruction (not really new).
+     f       ACN--bits 0-1 of the instruction (not really new).
+     F       FUNC--Special function in bits 18-21 of the instruction.
+     C       ACN--bits 16-17 specifying the accumlator register.  */
+  char *args;
+};
+
+static const struct a29k_opcode a29k_opcodes[] =
+{
+
+{ "add", 0x14000000, "c,a,b" },
+{ "add", 0x15000000, "c,a,i" },
+{ "addc", 0x1c000000, "c,a,b" },
+{ "addc", 0x1d000000, "c,a,i" },
+{ "addcs", 0x18000000, "c,a,b" },
+{ "addcs", 0x19000000, "c,a,i" },
+{ "addcu", 0x1a000000, "c,a,b" },
+{ "addcu", 0x1b000000, "c,a,i" },
+{ "adds", 0x10000000, "c,a,b" },
+{ "adds", 0x11000000, "c,a,i" },
+{ "addu", 0x12000000, "c,a,b" },
+{ "addu", 0x13000000, "c,a,i" },
+{ "and", 0x90000000, "c,a,b" },
+{ "and", 0x91000000, "c,a,i" },
+{ "andn", 0x9c000000, "c,a,b" },
+{ "andn", 0x9d000000, "c,a,i" },
+{ "aseq", 0x70000000, "v,a,b" },
+{ "aseq", 0x71000000, "v,a,i" },
+{ "asge", 0x5c000000, "v,a,b" },
+{ "asge", 0x5d000000, "v,a,i" },
+{ "asgeu", 0x5e000000, "v,a,b" },
+{ "asgeu", 0x5f000000, "v,a,i" },
+{ "asgt", 0x58000000, "v,a,b" },
+{ "asgt", 0x59000000, "v,a,i" },
+{ "asgtu", 0x5a000000, "v,a,b" },
+{ "asgtu", 0x5b000000, "v,a,i" },
+{ "asle", 0x54000000, "v,a,b" },
+{ "asle", 0x55000000, "v,a,i" },
+{ "asleu", 0x56000000, "v,a,b" },
+{ "asleu", 0x57000000, "v,a,i" },
+{ "aslt", 0x50000000, "v,a,b" },
+{ "aslt", 0x51000000, "v,a,i" },
+{ "asltu", 0x52000000, "v,a,b" },
+{ "asltu", 0x53000000, "v,a,i" },
+{ "asneq", 0x72000000, "v,a,b" },
+{ "asneq", 0x73000000, "v,a,i" },
+{ "call", 0xa8000000, "a,P" },
+{ "call", 0xa9000000, "a,A" },
+{ "calli", 0xc8000000, "a,b" },
+{ "class", 0xe6000000, "c,a,f" },
+{ "clz", 0x08000000, "c,b" },
+{ "clz", 0x09000000, "c,i" },
+{ "const", 0x03000000, "a,x" },
+{ "consth", 0x02000000, "a,h" },
+{ "consthz", 0x05000000, "a,h" },
+{ "constn", 0x01000000, "a,X" },
+{ "convert", 0xe4000000, "c,a,u,r,d,f" },
+{ "cpbyte", 0x2e000000, "c,a,b" },
+{ "cpbyte", 0x2f000000, "c,a,i" },
+{ "cpeq", 0x60000000, "c,a,b" },
+{ "cpeq", 0x61000000, "c,a,i" },
+{ "cpge", 0x4c000000, "c,a,b" },
+{ "cpge", 0x4d000000, "c,a,i" },
+{ "cpgeu", 0x4e000000, "c,a,b" },
+{ "cpgeu", 0x4f000000, "c,a,i" },
+{ "cpgt", 0x48000000, "c,a,b" },
+{ "cpgt", 0x49000000, "c,a,i" },
+{ "cpgtu", 0x4a000000, "c,a,b" },
+{ "cpgtu", 0x4b000000, "c,a,i" },
+{ "cple", 0x44000000, "c,a,b" },
+{ "cple", 0x45000000, "c,a,i" },
+{ "cpleu", 0x46000000, "c,a,b" },
+{ "cpleu", 0x47000000, "c,a,i" },
+{ "cplt", 0x40000000, "c,a,b" },
+{ "cplt", 0x41000000, "c,a,i" },
+{ "cpltu", 0x42000000, "c,a,b" },
+{ "cpltu", 0x43000000, "c,a,i" },
+{ "cpneq", 0x62000000, "c,a,b" },
+{ "cpneq", 0x63000000, "c,a,i" },
+{ "dadd", 0xf1000000, "c,a,b" },
+{ "ddiv", 0xf7000000, "c,a,b" },
+{ "deq", 0xeb000000, "c,a,b" },
+{ "dge", 0xef000000, "c,a,b" },
+{ "dgt", 0xed000000, "c,a,b" },
+{ "div", 0x6a000000, "c,a,b" },
+{ "div", 0x6b000000, "c,a,i" },
+{ "div0", 0x68000000, "c,b" },
+{ "div0", 0x69000000, "c,i" },
+{ "divide", 0xe1000000, "c,a,b" },
+{ "dividu", 0xe3000000, "c,a,b" },
+{ "divl", 0x6c000000, "c,a,b" },
+{ "divl", 0x6d000000, "c,a,i" },
+{ "divrem", 0x6e000000, "c,a,b" },
+{ "divrem", 0x6f000000, "c,a,i" },
+{ "dmac", 0xd9000000, "F,C,a,b" },
+{ "dmsm", 0xdb000000, "c,a,b" },
+{ "dmul", 0xf5000000, "c,a,b" },
+{ "dsub", 0xf3000000, "c,a,b" },
+{ "emulate", 0xd7000000, "v,a,b" },
+{ "exbyte", 0x0a000000, "c,a,b" },
+{ "exbyte", 0x0b000000, "c,a,i" },
+{ "exhw", 0x7c000000, "c,a,b" },
+{ "exhw", 0x7d000000, "c,a,i" },
+{ "exhws", 0x7e000000, "c,a" },
+{ "extract", 0x7a000000, "c,a,b" },
+{ "extract", 0x7b000000, "c,a,i" },
+{ "fadd", 0xf0000000, "c,a,b" },
+{ "fdiv", 0xf6000000, "c,a,b" },
+{ "fdmul", 0xf9000000, "c,a,b" },
+{ "feq", 0xea000000, "c,a,b" },
+{ "fge", 0xee000000, "c,a,b" },
+{ "fgt", 0xec000000, "c,a,b" },
+{ "fmac", 0xd8000000, "F,C,a,b" },
+{ "fmsm", 0xda000000, "c,a,b" },
+{ "fmul", 0xf4000000, "c,a,b" },
+{ "fsub", 0xf2000000, "c,a,b" },
+{ "halt", 0x89000000, "" },
+{ "inbyte", 0x0c000000, "c,a,b" },
+{ "inbyte", 0x0d000000, "c,a,i" },
+{ "inhw", 0x78000000, "c,a,b" },
+{ "inhw", 0x79000000, "c,a,i" },
+{ "inv", 0x9f000000, "" },
+{ "iret", 0x88000000, "" },
+{ "iretinv", 0x8c000000, "" },
+{ "jmp", 0xa0000000, "P" },
+{ "jmp", 0xa1000000, "A" },
+{ "jmpf", 0xa4000000, "a,P" },
+{ "jmpf", 0xa5000000, "a,A" },
+{ "jmpfdec", 0xb4000000, "a,P" },
+{ "jmpfdec", 0xb5000000, "a,A" },
+{ "jmpfi", 0xc4000000, "a,b" },
+{ "jmpi", 0xc0000000, "b" },
+{ "jmpt", 0xac000000, "a,P" },
+{ "jmpt", 0xad000000, "a,A" },
+{ "jmpti", 0xcc000000, "a,b" },
+{ "load", 0x16000000, "e,n,a,b" },
+{ "load", 0x17000000, "e,n,a,i" },
+{ "loadl", 0x06000000, "e,n,a,b" },
+{ "loadl", 0x07000000, "e,n,a,i" },
+{ "loadm", 0x36000000, "e,n,a,b" },
+{ "loadm", 0x37000000, "e,n,a,i" },
+{ "loadset", 0x26000000, "e,n,a,b" },
+{ "loadset", 0x27000000, "e,n,a,i" },
+{ "mfacc", 0xe9000100, "c,d,f" },
+{ "mfsr", 0xc6000000, "c,s" },
+{ "mftlb", 0xb6000000, "c,a" },
+{ "mtacc", 0xe8010000, "c,d,f" },
+{ "mtsr", 0xce000000, "s,b" },
+{ "mtsrim", 0x04000000, "s,x" },
+{ "mttlb", 0xbe000000, "a,b" },
+{ "mul", 0x64000000, "c,a,b" },
+{ "mul", 0x65000000, "c,a,i" },
+{ "mull", 0x66000000, "c,a,b" },
+{ "mull", 0x67000000, "c,a,i" },
+{ "multiplu", 0xe2000000, "c,a,b" },
+{ "multiply", 0xe0000000, "c,a,b" },
+{ "multm", 0xde000000, "c,a,b" },
+{ "multmu", 0xdf000000, "c,a,b" },
+{ "mulu", 0x74000000, "c,a,b" },
+{ "mulu", 0x75000000, "c,a,i" },
+{ "nand", 0x9a000000, "c,a,b" },
+{ "nand", 0x9b000000, "c,a,i" },
+{ "nop", 0x70400101, "" },
+{ "nor", 0x98000000, "c,a,b" },
+{ "nor", 0x99000000, "c,a,i" },
+{ "or", 0x92000000, "c,a,b" },
+{ "or", 0x93000000, "c,a,i" },
+{ "orn", 0xaa000000, "c,a,b" },
+{ "orn", 0xab000000, "c,a,i" },
+
+/* The description of "setip" in Chapter 8 ("instruction set") of the user's
+   manual claims that these are absolute register numbers.  But section
+   7.2.1 explains that they are not.  The latter is correct, so print
+   these normally ("lr0", "lr5", etc.).  */
+{ "setip", 0x9e000000, "c,a,b" },
+
+{ "sll", 0x80000000, "c,a,b" },
+{ "sll", 0x81000000, "c,a,i" },
+{ "sqrt", 0xe5000000, "c,a,f" },
+{ "sra", 0x86000000, "c,a,b" },
+{ "sra", 0x87000000, "c,a,i" },
+{ "srl", 0x82000000, "c,a,b" },
+{ "srl", 0x83000000, "c,a,i" },
+{ "store", 0x1e000000, "e,n,a,b" },
+{ "store", 0x1f000000, "e,n,a,i" },
+{ "storel", 0x0e000000, "e,n,a,b" },
+{ "storel", 0x0f000000, "e,n,a,i" },
+{ "storem", 0x3e000000, "e,n,a,b" },
+{ "storem", 0x3f000000, "e,n,a,i" },
+{ "sub", 0x24000000, "c,a,b" },
+{ "sub", 0x25000000, "c,a,i" },
+{ "subc", 0x2c000000, "c,a,b" },
+{ "subc", 0x2d000000, "c,a,i" },
+{ "subcs", 0x28000000, "c,a,b" },
+{ "subcs", 0x29000000, "c,a,i" },
+{ "subcu", 0x2a000000, "c,a,b" },
+{ "subcu", 0x2b000000, "c,a,i" },
+{ "subr", 0x34000000, "c,a,b" },
+{ "subr", 0x35000000, "c,a,i" },
+{ "subrc", 0x3c000000, "c,a,b" },
+{ "subrc", 0x3d000000, "c,a,i" },
+{ "subrcs", 0x38000000, "c,a,b" },
+{ "subrcs", 0x39000000, "c,a,i" },
+{ "subrcu", 0x3a000000, "c,a,b" },
+{ "subrcu", 0x3b000000, "c,a,i" },
+{ "subrs", 0x30000000, "c,a,b" },
+{ "subrs", 0x31000000, "c,a,i" },
+{ "subru", 0x32000000, "c,a,b" },
+{ "subru", 0x33000000, "c,a,i" },
+{ "subs", 0x20000000, "c,a,b" },
+{ "subs", 0x21000000, "c,a,i" },
+{ "subu", 0x22000000, "c,a,b" },
+{ "subu", 0x23000000, "c,a,i" },
+{ "xnor", 0x96000000, "c,a,b" },
+{ "xnor", 0x97000000, "c,a,i" },
+{ "xor", 0x94000000, "c,a,b" },
+{ "xor", 0x95000000, "c,a,i" },
+
+{ "", 0x0, "" }                /* Dummy entry, not included in NUM_OPCODES.  This
+                          lets code examine entry i+1 without checking
+                          if we've run off the end of the table.  */
+};
+
+const unsigned int num_opcodes = (((sizeof a29k_opcodes) / (sizeof a29k_opcodes[0])) - 1);
+
+/*
+ * $Log$
+ * Revision 1.1  1991/05/19 00:19:33  rich
+ * Initial revision
+ *
+ * Revision 1.1.1.1  1991/04/04  18:15:23  rich
+ * new gas main line
+ *
+ * Revision 1.1  1991/04/04  18:15:23  rich
+ * Initial revision
+ *
+ * Revision 1.2  1991/03/30  17:13:19  rich
+ * num_opcodes now unsigned.  Also, added rcsid and log.
+ *
+ *
+ */
+
+/* end of a29k-opcode.h */
diff --git a/include/arm-opcode.h b/include/arm-opcode.h
new file mode 100755 (executable)
index 0000000..d968e6e
--- /dev/null
@@ -0,0 +1,294 @@
+/* ARM opcode list.
+   Copyright (C) 1989, Free Software Foundation, Inc.
+
+This file is part of GDB and GAS.
+
+GDB and GAS are 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 1, or (at your option)
+any later version.
+
+GDB and GAS are 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 GDB or GAS; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* types of instruction (encoded in bits 26 and 27 of the instruction) */
+
+#define TYPE_ARITHMETIC                0
+#define TYPE_LDR_STR           1
+#define TYPE_BLOCK_BRANCH      2
+#define TYPE_SWI               3
+
+/* bit 25 decides whether an instruction is a block move or a branch */
+#define SUBTYPE_BLOCK          0
+#define SUBTYPE_BRANCH         1
+
+/* codes to distinguish the arithmetic instructions */
+
+#define OPCODE_AND     0
+#define OPCODE_EOR     1
+#define OPCODE_SUB     2
+#define OPCODE_RSB     3
+#define OPCODE_ADD     4
+#define OPCODE_ADC     5
+#define OPCODE_SBC     6
+#define OPCODE_RSC     7
+#define OPCODE_TST     8
+#define OPCODE_TEQ     9
+#define OPCODE_CMP     10
+#define OPCODE_CMN     11
+#define OPCODE_ORR     12
+#define OPCODE_MOV     13
+#define OPCODE_BIC     14
+#define OPCODE_MVN     15
+
+/* condition codes */
+
+#define COND_EQ                0
+#define COND_NE                1
+#define COND_CS                2
+#define COND_CC                3
+#define COND_MI                4
+#define COND_PL                5
+#define COND_VS                6
+#define COND_VC                7
+#define COND_HI                8
+#define COND_LS                9
+#define COND_GE                10
+#define COND_LT                11
+#define COND_GT                12
+#define COND_LE                13
+#define COND_AL                14
+#define COND_NV                15
+
+/* Describes the format of an ARM machine instruction */
+
+struct generic_fmt {
+    unsigned rest      :25;    /* the rest of the instruction */
+    unsigned subtype   :1;     /* used to decide between block and branch */
+    unsigned type      :2;     /* one of TYPE_* */
+    unsigned cond      :4;     /* one of COND_* defined above */
+};
+
+struct arith_fmt {
+    unsigned operand2  :12;    /* #nn or rn or rn shift #m or rn shift rm */
+    unsigned dest      :4;     /* place where the answer goes */
+    unsigned operand1  :4;     /* first operand to instruction */
+    unsigned set       :1;     /* == 1 means set processor flags */
+    unsigned opcode    :4;     /* one of OPCODE_* defined above */
+    unsigned immed     :1;     /* operand2 is an immediate value */
+    unsigned type      :2;     /* == TYPE_ARITHMETIC */
+    unsigned cond      :4;     /* one of COND_* defined above */
+};
+
+struct ldr_str_fmt {
+    unsigned offset    :12;    /* #nn or rn or rn shift #m */
+    unsigned reg       :4;     /* destination for LDR, source for STR */
+    unsigned base      :4;     /* base register */
+    unsigned is_load   :1;     /* == 1 for LDR */
+    unsigned writeback :1;     /* == 1 means write back (base+offset) into base */
+    unsigned byte      :1;     /* == 1 means byte access else word */
+    unsigned up                :1;     /* == 1 means add offset else subtract it */
+    unsigned pre_index :1;     /* == 1 means [a,b] form else [a],b form */
+    unsigned immed     :1;     /* == 0 means immediate offset */
+    unsigned type      :2;     /* == TYPE_LDR_STR */
+    unsigned cond      :4;     /* one of COND_* defined above */
+};
+
+struct block_fmt {
+    unsigned mask      :16;    /* register mask */
+    unsigned base      :4;     /* register used as base of move */
+    unsigned is_load   :1;     /* == 1 for LDM */
+    unsigned writeback :1;     /* == 1 means update base after move */
+    unsigned set       :1;     /* == 1 means set flags in pc if included in mask */
+    unsigned increment :1;     /* == 1 means increment base register */
+    unsigned before    :1;     /* == 1 means inc/dec before each move */
+    unsigned is_block  :1;     /* == SUBTYPE_BLOCK */
+    unsigned type      :2;     /* == TYPE_BLOCK_BRANCH */
+    unsigned cond      :4;     /* one of COND_* defined above */
+};
+
+struct branch_fmt {
+    unsigned dest      :24;    /* destination of the branch */
+    unsigned link      :1;     /* branch with link (function call) */
+    unsigned is_branch :1;     /* == SUBTYPE_BRANCH */
+    unsigned type      :2;     /* == TYPE_BLOCK_BRANCH */
+    unsigned cond      :4;     /* one of COND_* defined above */
+};
+
+#define ROUND_N                0
+#define ROUND_P                1
+#define ROUND_M                2
+#define ROUND_Z                3
+
+#define FLOAT2_MVF     0
+#define FLOAT2_MNF     1
+#define FLOAT2_ABS     2
+#define FLOAT2_RND     3
+#define FLOAT2_SQT     4
+#define FLOAT2_LOG     5
+#define FLOAT2_LGN     6
+#define FLOAT2_EXP     7
+#define FLOAT2_SIN     8
+#define FLOAT2_COS     9
+#define FLOAT2_TAN     10
+#define FLOAT2_ASN     11
+#define FLOAT2_ACS     12
+#define FLOAT2_ATN     13
+
+#define FLOAT3_ADF     0
+#define FLOAT3_MUF     1
+#define FLOAT3_SUF     2
+#define FLOAT3_RSF     3
+#define FLOAT3_DVF     4
+#define FLOAT3_RDF     5
+#define FLOAT3_POW     6
+#define FLOAT3_RPW     7
+#define FLOAT3_RMF     8
+#define FLOAT3_FML     9
+#define FLOAT3_FDV     10
+#define FLOAT3_FRD     11
+#define FLOAT3_POL     12
+
+struct float2_fmt {
+    unsigned operand2  :3;     /* second operand */
+    unsigned immed     :1;     /* == 1 if second operand is a constant */
+    unsigned pad1      :1;     /* == 0 */
+    unsigned rounding  :2;     /* ROUND_* */
+    unsigned is_double :1;     /* == 1 if precision is double (only if not extended) */
+    unsigned pad2      :4;     /* == 1 */
+    unsigned dest      :3;     /* destination */
+    unsigned is_2_op   :1;     /* == 1 if 2 operand ins */
+    unsigned operand1  :3;     /* first operand (only of is_2_op == 0) */
+    unsigned is_extended :1;   /* == 1 if precision is extended */
+    unsigned opcode    :4;     /* FLOAT2_* or FLOAT3_* depending on is_2_op */
+    unsigned must_be_2 :2;     /* == 2 */
+    unsigned type      :2;     /* == TYPE_SWI */
+    unsigned cond      :4;     /* COND_* */
+};
+
+struct swi_fmt {
+    unsigned argument  :24;    /* argument to SWI (syscall number) */
+    unsigned must_be_3 :2;     /* == 3 */
+    unsigned type      :2;     /* == TYPE_SWI */
+    unsigned cond      :4;     /* one of COND_* defined above */
+};
+
+union insn_fmt {
+    struct generic_fmt generic;
+    struct arith_fmt   arith;
+    struct ldr_str_fmt ldr_str;
+    struct block_fmt   block;
+    struct branch_fmt  branch;
+    struct swi_fmt     swi;
+    unsigned long      ins;
+};
+
+struct opcode {
+    unsigned long value, mask; /* recognise instruction if (op&mask)==value */
+    char *assembler;           /* how to disassemble this instruction */
+};
+
+/* format of the assembler string :
+   
+   %%                  %
+   %<bitfield>d                print the bitfield in decimal
+   %<bitfield>x                print the bitfield in hex
+   %<bitfield>r                print as an ARM register
+   %<bitfield>f                print a floating point constant if >7 else an fp register
+   %c                  print condition code (always bits 28-31)
+   %P                  print floating point precision in arithmetic insn
+   %Q                  print floating point precision in ldf/stf insn
+   %R                  print floating point rounding mode
+   %<bitnum>'c         print specified char iff bit is one
+   %<bitnum>`c         print specified char iff bit is zero
+   %<bitnum>?ab                print a if bit is one else print b
+   %p                  print 'p' iff bits 12-15 are 15
+   %o                  print operand2 (immediate or register + shift)
+   %a                  print address for ldr/str instruction
+   %b                  print branch destination
+   %A                  print address for ldc/stc/ldf/stf instruction
+   %m                  print register mask for ldm/stm instruction
+*/
+
+static struct opcode opcodes[] = {
+    /* ARM instructions */
+    0x00000090, 0x0fe000f0, "mul%20's %12-15r, %16-19r, %0-3r",
+    0x00200090, 0x0fe000f0, "mla%20's %12-15r, %16-19r, %0-3r, %8-11r",
+    0x00000000, 0x0de00000, "and%c%20's %12-15r, %16-19r, %o",
+    0x00200000, 0x0de00000, "eor%c%20's %12-15r, %16-19r, %o",
+    0x00400000, 0x0de00000, "sub%c%20's %12-15r, %16-19r, %o",
+    0x00600000, 0x0de00000, "rsb%c%20's %12-15r, %16-19r, %o",
+    0x00800000, 0x0de00000, "add%c%20's %12-15r, %16-19r, %o",
+    0x00a00000, 0x0de00000, "adc%c%20's %12-15r, %16-19r, %o",
+    0x00c00000, 0x0de00000, "sbc%c%20's %12-15r, %16-19r, %o",
+    0x00e00000, 0x0de00000, "rsc%c%20's %12-15r, %16-19r, %o",
+    0x01000000, 0x0de00000, "tst%c%p %16-19r, %o",
+    0x01200000, 0x0de00000, "teq%c%p %16-19r, %o",
+    0x01400000, 0x0de00000, "cmp%c%p %16-19r, %o",
+    0x01600000, 0x0de00000, "cmn%c%p %16-19r, %o",
+    0x01800000, 0x0de00000, "orr%c%20's %12-15r, %16-19r, %o",
+    0x01a00000, 0x0de00000, "mov%c%20's %12-15r, %o",
+    0x01c00000, 0x0de00000, "bic%c%20's %12-15r, %16-19r, %o",
+    0x01e00000, 0x0de00000, "mvn%c%20's %12-15r, %o",
+    0x04000000, 0x0c100000, "str%c%22'b %12-15r, %a",
+    0x04100000, 0x0c100000, "ldr%c%22'b %12-15r, %a",
+    0x08000000, 0x0e100000, "stm%c%23?id%24?ba %16-19r%22`!, %m",
+    0x08100000, 0x0e100000, "ldm%c%23?id%24?ba %16-19r%22`!, %m%22'^",
+    0x0a000000, 0x0e000000, "b%c%24'l %b",
+    0x0f000000, 0x0f000000, "swi%c %0-23x",
+    /* Floating point coprocessor instructions */
+    0x0e000100, 0x0ff08f10, "adf%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e100100, 0x0ff08f10, "muf%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e200100, 0x0ff08f10, "suf%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e300100, 0x0ff08f10, "rsf%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e400100, 0x0ff08f10, "dvf%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e500100, 0x0ff08f10, "rdf%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e600100, 0x0ff08f10, "pow%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e700100, 0x0ff08f10, "rpw%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e800100, 0x0ff08f10, "rmf%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e900100, 0x0ff08f10, "fml%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0ea00100, 0x0ff08f10, "fdv%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0eb00100, 0x0ff08f10, "frd%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0ec00100, 0x0ff08f10, "pol%c%P%R %12-14f, %16-18f, %0-3f",
+    0x0e008100, 0x0ff08f10, "mvf%c%P%R %12-14f, %0-3f",
+    0x0e108100, 0x0ff08f10, "mnf%c%P%R %12-14f, %0-3f",
+    0x0e208100, 0x0ff08f10, "abs%c%P%R %12-14f, %0-3f",
+    0x0e308100, 0x0ff08f10, "rnd%c%P%R %12-14f, %0-3f",
+    0x0e408100, 0x0ff08f10, "sqt%c%P%R %12-14f, %0-3f",
+    0x0e508100, 0x0ff08f10, "log%c%P%R %12-14f, %0-3f",
+    0x0e608100, 0x0ff08f10, "lgn%c%P%R %12-14f, %0-3f",
+    0x0e708100, 0x0ff08f10, "exp%c%P%R %12-14f, %0-3f",
+    0x0e808100, 0x0ff08f10, "sin%c%P%R %12-14f, %0-3f",
+    0x0e908100, 0x0ff08f10, "cos%c%P%R %12-14f, %0-3f",
+    0x0ea08100, 0x0ff08f10, "tan%c%P%R %12-14f, %0-3f",
+    0x0eb08100, 0x0ff08f10, "asn%c%P%R %12-14f, %0-3f",
+    0x0ec08100, 0x0ff08f10, "acs%c%P%R %12-14f, %0-3f",
+    0x0ed08100, 0x0ff08f10, "atn%c%P%R %12-14f, %0-3f",
+    0x0e000110, 0x0ff00f1f, "flt%c%P%R %16-18f, %12-15r",
+    0x0e100110, 0x0fff0f98, "fix%c%R %12-15r, %0-2f",
+    0x0e200110, 0x0fff0fff, "wfs%c %12-15r",
+    0x0e300110, 0x0fff0fff, "rfs%c %12-15r",
+    0x0e400110, 0x0fff0fff, "wfc%c %12-15r",
+    0x0e500110, 0x0fff0fff, "rfc%c %12-15r",
+    0x0e90f110, 0x0ff8fff0, "cmf%c %16-18f, %0-3f",
+    0x0eb0f110, 0x0ff8fff0, "cnf%c %16-18f, %0-3f",
+    0x0ed0f110, 0x0ff8fff0, "cmfe%c %16-18f, %0-3f",
+    0x0ef0f110, 0x0ff8fff0, "cnfe%c %16-18f, %0-3f",
+    0x0c000100, 0x0e100f00, "stf%c%Q %12-14f, %A",
+    0x0c100100, 0x0e100f00, "ldf%c%Q %12-14f, %A",
+    /* Generic coprocessor instructions */
+    0x0e000000, 0x0f000010, "cdp%c %8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}",
+    0x0e000010, 0x0f100010, "mrc%c %8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}",
+    0x0e100010, 0x0f100010, "mcr%c %8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}",
+    0x0c000000, 0x0e100000, "stc%c%22`l %8-11d, cr%12-15d, %A",
+    0x0c100000, 0x0e100000, "ldc%c%22`l %8-11d, cr%12-15d, %A",
+    /* the rest */
+    0x00000000, 0x00000000, "undefined instruction %0-31x",
+};
+#define N_OPCODES      (sizeof opcodes / sizeof opcodes[0])
diff --git a/include/convx-opcode.h b/include/convx-opcode.h
new file mode 100755 (executable)
index 0000000..523c874
--- /dev/null
@@ -0,0 +1,1677 @@
+/* Include information for instruction dissasembly on the Convex.
+   Copyright (C) 1989, Free Software Foundation.  
+
+This file is part of GDB.
+
+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 1, or (at your option)
+any later version.
+
+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 GDB; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#define xxx 0
+#define rrr 1
+#define rr 2
+#define rxr 3
+#define r 4
+#define nops 5
+#define nr 6
+#define pcrel 7
+#define lr 8
+#define rxl 9
+#define rlr 10
+#define rrl 11
+#define iml 12
+#define imr 13
+#define a1r 14
+#define a1l 15
+#define a2r 16
+#define a2l 17
+#define a3 18
+#define a4 19
+#define a5 20
+#define V 1
+#define S 2
+#define VM 3
+#define A 4
+#define VL 5
+#define VS 6
+#define VLS 7
+#define PSW 8
+/* Prevent an error during "make depend".  */
+#if !defined (PC)
+#define PC 9
+#endif
+#define ITR 10
+#define VV 11
+#define ITSR 12
+#define TOC 13
+#define CIR 14
+#define TTR 15
+#define VMU 16
+#define VML 17
+#define ICR 18
+#define TCPU 19
+#define CPUID 20
+#define TID 21
+char *op[] = {
+  "",
+  "v0\0v1\0v2\0v3\0v4\0v5\0v6\0v7",
+  "s0\0s1\0s2\0s3\0s4\0s5\0s6\0s7",
+  "vm",
+  "sp\0a1\0a2\0a3\0a4\0a5\0ap\0fp",
+  "vl",
+  "vs",
+  "vls",
+  "psw",
+  "pc",
+  "itr",
+  "vv",
+  "itsr",
+  "toc",
+  "cir",
+  "ttr",
+  "vmu",
+  "vml",
+  "icr",
+  "tcpu",
+  "cpuid",
+  "tid",
+};
+struct formstr format0[] = {
+  {0,0,rrr,V,S,S},     /* mov */
+  {0,0,rrr,S,S,V},     /* mov */
+  {1,1,rrr,V,V,V},     /* merg.t */
+  {2,1,rrr,V,V,V},     /* mask.t */
+  {1,2,rrr,V,S,V},     /* merg.f */
+  {2,2,rrr,V,S,V},     /* mask.f */
+  {1,1,rrr,V,S,V},     /* merg.t */
+  {2,1,rrr,V,S,V},     /* mask.t */
+  {3,3,rrr,V,V,V},     /* mul.s */
+  {3,4,rrr,V,V,V},     /* mul.d */
+  {4,3,rrr,V,V,V},     /* div.s */
+  {4,4,rrr,V,V,V},     /* div.d */
+  {3,3,rrr,V,S,V},     /* mul.s */
+  {3,4,rrr,V,S,V},     /* mul.d */
+  {4,3,rrr,V,S,V},     /* div.s */
+  {4,4,rrr,V,S,V},     /* div.d */
+  {5,0,rrr,V,V,V},     /* and */
+  {6,0,rrr,V,V,V},     /* or */
+  {7,0,rrr,V,V,V},     /* xor */
+  {8,0,rrr,V,V,V},     /* shf */
+  {5,0,rrr,V,S,V},     /* and */
+  {6,0,rrr,V,S,V},     /* or */
+  {7,0,rrr,V,S,V},     /* xor */
+  {8,0,rrr,V,S,V},     /* shf */
+  {9,3,rrr,V,V,V},     /* add.s */
+  {9,4,rrr,V,V,V},     /* add.d */
+  {10,3,rrr,V,V,V},    /* sub.s */
+  {10,4,rrr,V,V,V},    /* sub.d */
+  {9,3,rrr,V,S,V},     /* add.s */
+  {9,4,rrr,V,S,V},     /* add.d */
+  {10,3,rrr,V,S,V},    /* sub.s */
+  {10,4,rrr,V,S,V},    /* sub.d */
+  {9,5,rrr,V,V,V},     /* add.b */
+  {9,6,rrr,V,V,V},     /* add.h */
+  {9,7,rrr,V,V,V},     /* add.w */
+  {9,8,rrr,V,V,V},     /* add.l */
+  {9,5,rrr,V,S,V},     /* add.b */
+  {9,6,rrr,V,S,V},     /* add.h */
+  {9,7,rrr,V,S,V},     /* add.w */
+  {9,8,rrr,V,S,V},     /* add.l */
+  {10,5,rrr,V,V,V},    /* sub.b */
+  {10,6,rrr,V,V,V},    /* sub.h */
+  {10,7,rrr,V,V,V},    /* sub.w */
+  {10,8,rrr,V,V,V},    /* sub.l */
+  {10,5,rrr,V,S,V},    /* sub.b */
+  {10,6,rrr,V,S,V},    /* sub.h */
+  {10,7,rrr,V,S,V},    /* sub.w */
+  {10,8,rrr,V,S,V},    /* sub.l */
+  {3,5,rrr,V,V,V},     /* mul.b */
+  {3,6,rrr,V,V,V},     /* mul.h */
+  {3,7,rrr,V,V,V},     /* mul.w */
+  {3,8,rrr,V,V,V},     /* mul.l */
+  {3,5,rrr,V,S,V},     /* mul.b */
+  {3,6,rrr,V,S,V},     /* mul.h */
+  {3,7,rrr,V,S,V},     /* mul.w */
+  {3,8,rrr,V,S,V},     /* mul.l */
+  {4,5,rrr,V,V,V},     /* div.b */
+  {4,6,rrr,V,V,V},     /* div.h */
+  {4,7,rrr,V,V,V},     /* div.w */
+  {4,8,rrr,V,V,V},     /* div.l */
+  {4,5,rrr,V,S,V},     /* div.b */
+  {4,6,rrr,V,S,V},     /* div.h */
+  {4,7,rrr,V,S,V},     /* div.w */
+  {4,8,rrr,V,S,V},     /* div.l */
+};
+struct formstr format1[] = {
+  {11,0,xxx,0,0,0},    /* exit */
+  {12,0,a3,0,0,0},     /* jmp */
+  {13,2,a3,0,0,0},     /* jmpi.f */
+  {13,1,a3,0,0,0},     /* jmpi.t */
+  {14,2,a3,0,0,0},     /* jmpa.f */
+  {14,1,a3,0,0,0},     /* jmpa.t */
+  {15,2,a3,0,0,0},     /* jmps.f */
+  {15,1,a3,0,0,0},     /* jmps.t */
+  {16,0,a3,0,0,0},     /* tac */
+  {17,0,a1r,A,0,0},    /* ldea */
+  {18,8,a1l,VLS,0,0},  /* ld.l */
+  {18,9,a1l,VM,0,0},   /* ld.x */
+  {19,0,a3,0,0,0},     /* tas */
+  {20,0,a3,0,0,0},     /* pshea */
+  {21,8,a2l,VLS,0,0},  /* st.l */
+  {21,9,a2l,VM,0,0},   /* st.x */
+  {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,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},
+  {22,0,a3,0,0,0},     /* call */
+  {23,0,a3,0,0,0},     /* calls */
+  {24,0,a3,0,0,0},     /* callq */
+  {25,0,a1r,A,0,0},    /* pfork */
+  {26,5,a2r,S,0,0},    /* ste.b */
+  {26,6,a2r,S,0,0},    /* ste.h */
+  {26,7,a2r,S,0,0},    /* ste.w */
+  {26,8,a2r,S,0,0},    /* ste.l */
+  {18,5,a1r,A,0,0},    /* ld.b */
+  {18,6,a1r,A,0,0},    /* ld.h */
+  {18,7,a1r,A,0,0},    /* ld.w */
+  {27,7,a1r,A,0,0},    /* incr.w */
+  {21,5,a2r,A,0,0},    /* st.b */
+  {21,6,a2r,A,0,0},    /* st.h */
+  {21,7,a2r,A,0,0},    /* st.w */
+  {27,8,a1r,S,0,0},    /* incr.l */
+  {18,5,a1r,S,0,0},    /* ld.b */
+  {18,6,a1r,S,0,0},    /* ld.h */
+  {18,7,a1r,S,0,0},    /* ld.w */
+  {18,8,a1r,S,0,0},    /* ld.l */
+  {21,5,a2r,S,0,0},    /* st.b */
+  {21,6,a2r,S,0,0},    /* st.h */
+  {21,7,a2r,S,0,0},    /* st.w */
+  {21,8,a2r,S,0,0},    /* st.l */
+  {18,5,a1r,V,0,0},    /* ld.b */
+  {18,6,a1r,V,0,0},    /* ld.h */
+  {18,7,a1r,V,0,0},    /* ld.w */
+  {18,8,a1r,V,0,0},    /* ld.l */
+  {21,5,a2r,V,0,0},    /* st.b */
+  {21,6,a2r,V,0,0},    /* st.h */
+  {21,7,a2r,V,0,0},    /* st.w */
+  {21,8,a2r,V,0,0},    /* st.l */
+};
+struct formstr format2[] = {
+  {28,5,rr,A,A,0},     /* cvtw.b */
+  {28,6,rr,A,A,0},     /* cvtw.h */
+  {29,7,rr,A,A,0},     /* cvtb.w */
+  {30,7,rr,A,A,0},     /* cvth.w */
+  {28,5,rr,S,S,0},     /* cvtw.b */
+  {28,6,rr,S,S,0},     /* cvtw.h */
+  {29,7,rr,S,S,0},     /* cvtb.w */
+  {30,7,rr,S,S,0},     /* cvth.w */
+  {28,3,rr,S,S,0},     /* cvtw.s */
+  {31,7,rr,S,S,0},     /* cvts.w */
+  {32,3,rr,S,S,0},     /* cvtd.s */
+  {31,4,rr,S,S,0},     /* cvts.d */
+  {31,8,rr,S,S,0},     /* cvts.l */
+  {32,8,rr,S,S,0},     /* cvtd.l */
+  {33,3,rr,S,S,0},     /* cvtl.s */
+  {33,4,rr,S,S,0},     /* cvtl.d */
+  {34,0,rr,A,A,0},     /* ldpa */
+  {8,0,nr,A,0,0},      /* shf */
+  {18,6,nr,A,0,0},     /* ld.h */
+  {18,7,nr,A,0,0},     /* ld.w */
+  {33,7,rr,S,S,0},     /* cvtl.w */
+  {28,8,rr,S,S,0},     /* cvtw.l */
+  {35,1,rr,S,S,0},     /* plc.t */
+  {36,0,rr,S,S,0},     /* tzc */
+  {37,6,rr,A,A,0},     /* eq.h */
+  {37,7,rr,A,A,0},     /* eq.w */
+  {37,6,nr,A,0,0},     /* eq.h */
+  {37,7,nr,A,0,0},     /* eq.w */
+  {37,5,rr,S,S,0},     /* eq.b */
+  {37,6,rr,S,S,0},     /* eq.h */
+  {37,7,rr,S,S,0},     /* eq.w */
+  {37,8,rr,S,S,0},     /* eq.l */
+  {38,6,rr,A,A,0},     /* leu.h */
+  {38,7,rr,A,A,0},     /* leu.w */
+  {38,6,nr,A,0,0},     /* leu.h */
+  {38,7,nr,A,0,0},     /* leu.w */
+  {38,5,rr,S,S,0},     /* leu.b */
+  {38,6,rr,S,S,0},     /* leu.h */
+  {38,7,rr,S,S,0},     /* leu.w */
+  {38,8,rr,S,S,0},     /* leu.l */
+  {39,6,rr,A,A,0},     /* ltu.h */
+  {39,7,rr,A,A,0},     /* ltu.w */
+  {39,6,nr,A,0,0},     /* ltu.h */
+  {39,7,nr,A,0,0},     /* ltu.w */
+  {39,5,rr,S,S,0},     /* ltu.b */
+  {39,6,rr,S,S,0},     /* ltu.h */
+  {39,7,rr,S,S,0},     /* ltu.w */
+  {39,8,rr,S,S,0},     /* ltu.l */
+  {40,6,rr,A,A,0},     /* le.h */
+  {40,7,rr,A,A,0},     /* le.w */
+  {40,6,nr,A,0,0},     /* le.h */
+  {40,7,nr,A,0,0},     /* le.w */
+  {40,5,rr,S,S,0},     /* le.b */
+  {40,6,rr,S,S,0},     /* le.h */
+  {40,7,rr,S,S,0},     /* le.w */
+  {40,8,rr,S,S,0},     /* le.l */
+  {41,6,rr,A,A,0},     /* lt.h */
+  {41,7,rr,A,A,0},     /* lt.w */
+  {41,6,nr,A,0,0},     /* lt.h */
+  {41,7,nr,A,0,0},     /* lt.w */
+  {41,5,rr,S,S,0},     /* lt.b */
+  {41,6,rr,S,S,0},     /* lt.h */
+  {41,7,rr,S,S,0},     /* lt.w */
+  {41,8,rr,S,S,0},     /* lt.l */
+  {9,7,rr,S,A,0},      /* add.w */
+  {8,0,rr,A,A,0},      /* shf */
+  {0,0,rr,A,A,0},      /* mov */
+  {0,0,rr,S,A,0},      /* mov */
+  {0,7,rr,S,S,0},      /* mov.w */
+  {8,0,rr,S,S,0},      /* shf */
+  {0,0,rr,S,S,0},      /* mov */
+  {0,0,rr,A,S,0},      /* mov */
+  {5,0,rr,A,A,0},      /* and */
+  {6,0,rr,A,A,0},      /* or */
+  {7,0,rr,A,A,0},      /* xor */
+  {42,0,rr,A,A,0},     /* not */
+  {5,0,rr,S,S,0},      /* and */
+  {6,0,rr,S,S,0},      /* or */
+  {7,0,rr,S,S,0},      /* xor */
+  {42,0,rr,S,S,0},     /* not */
+  {40,3,rr,S,S,0},     /* le.s */
+  {40,4,rr,S,S,0},     /* le.d */
+  {41,3,rr,S,S,0},     /* lt.s */
+  {41,4,rr,S,S,0},     /* lt.d */
+  {9,3,rr,S,S,0},      /* add.s */
+  {9,4,rr,S,S,0},      /* add.d */
+  {10,3,rr,S,S,0},     /* sub.s */
+  {10,4,rr,S,S,0},     /* sub.d */
+  {37,3,rr,S,S,0},     /* eq.s */
+  {37,4,rr,S,S,0},     /* eq.d */
+  {43,6,rr,A,A,0},     /* neg.h */
+  {43,7,rr,A,A,0},     /* neg.w */
+  {3,3,rr,S,S,0},      /* mul.s */
+  {3,4,rr,S,S,0},      /* mul.d */
+  {4,3,rr,S,S,0},      /* div.s */
+  {4,4,rr,S,S,0},      /* div.d */
+  {9,6,rr,A,A,0},      /* add.h */
+  {9,7,rr,A,A,0},      /* add.w */
+  {9,6,nr,A,0,0},      /* add.h */
+  {9,7,nr,A,0,0},      /* add.w */
+  {9,5,rr,S,S,0},      /* add.b */
+  {9,6,rr,S,S,0},      /* add.h */
+  {9,7,rr,S,S,0},      /* add.w */
+  {9,8,rr,S,S,0},      /* add.l */
+  {10,6,rr,A,A,0},     /* sub.h */
+  {10,7,rr,A,A,0},     /* sub.w */
+  {10,6,nr,A,0,0},     /* sub.h */
+  {10,7,nr,A,0,0},     /* sub.w */
+  {10,5,rr,S,S,0},     /* sub.b */
+  {10,6,rr,S,S,0},     /* sub.h */
+  {10,7,rr,S,S,0},     /* sub.w */
+  {10,8,rr,S,S,0},     /* sub.l */
+  {3,6,rr,A,A,0},      /* mul.h */
+  {3,7,rr,A,A,0},      /* mul.w */
+  {3,6,nr,A,0,0},      /* mul.h */
+  {3,7,nr,A,0,0},      /* mul.w */
+  {3,5,rr,S,S,0},      /* mul.b */
+  {3,6,rr,S,S,0},      /* mul.h */
+  {3,7,rr,S,S,0},      /* mul.w */
+  {3,8,rr,S,S,0},      /* mul.l */
+  {4,6,rr,A,A,0},      /* div.h */
+  {4,7,rr,A,A,0},      /* div.w */
+  {4,6,nr,A,0,0},      /* div.h */
+  {4,7,nr,A,0,0},      /* div.w */
+  {4,5,rr,S,S,0},      /* div.b */
+  {4,6,rr,S,S,0},      /* div.h */
+  {4,7,rr,S,S,0},      /* div.w */
+  {4,8,rr,S,S,0},      /* div.l */
+};
+struct formstr format3[] = {
+  {32,3,rr,V,V,0},     /* cvtd.s */
+  {31,4,rr,V,V,0},     /* cvts.d */
+  {33,4,rr,V,V,0},     /* cvtl.d */
+  {32,8,rr,V,V,0},     /* cvtd.l */
+  {0,0,rrl,S,S,VM},    /* mov */
+  {0,0,rlr,S,VM,S},    /* mov */
+  {0,0,0,0,0,0},
+  {44,0,rr,S,S,0},     /* lop */
+  {36,0,rr,V,V,0},     /* tzc */
+  {44,0,rr,V,V,0},     /* lop */
+  {0,0,0,0,0,0},
+  {42,0,rr,V,V,0},     /* not */
+  {8,0,rr,S,V,0},      /* shf */
+  {35,1,rr,V,V,0},     /* plc.t */
+  {45,2,rr,V,V,0},     /* cprs.f */
+  {45,1,rr,V,V,0},     /* cprs.t */
+  {37,3,rr,V,V,0},     /* eq.s */
+  {37,4,rr,V,V,0},     /* eq.d */
+  {43,3,rr,V,V,0},     /* neg.s */
+  {43,4,rr,V,V,0},     /* neg.d */
+  {37,3,rr,S,V,0},     /* eq.s */
+  {37,4,rr,S,V,0},     /* eq.d */
+  {43,3,rr,S,S,0},     /* neg.s */
+  {43,4,rr,S,S,0},     /* neg.d */
+  {40,3,rr,V,V,0},     /* le.s */
+  {40,4,rr,V,V,0},     /* le.d */
+  {41,3,rr,V,V,0},     /* lt.s */
+  {41,4,rr,V,V,0},     /* lt.d */
+  {40,3,rr,S,V,0},     /* le.s */
+  {40,4,rr,S,V,0},     /* le.d */
+  {41,3,rr,S,V,0},     /* lt.s */
+  {41,4,rr,S,V,0},     /* lt.d */
+  {37,5,rr,V,V,0},     /* eq.b */
+  {37,6,rr,V,V,0},     /* eq.h */
+  {37,7,rr,V,V,0},     /* eq.w */
+  {37,8,rr,V,V,0},     /* eq.l */
+  {37,5,rr,S,V,0},     /* eq.b */
+  {37,6,rr,S,V,0},     /* eq.h */
+  {37,7,rr,S,V,0},     /* eq.w */
+  {37,8,rr,S,V,0},     /* eq.l */
+  {40,5,rr,V,V,0},     /* le.b */
+  {40,6,rr,V,V,0},     /* le.h */
+  {40,7,rr,V,V,0},     /* le.w */
+  {40,8,rr,V,V,0},     /* le.l */
+  {40,5,rr,S,V,0},     /* le.b */
+  {40,6,rr,S,V,0},     /* le.h */
+  {40,7,rr,S,V,0},     /* le.w */
+  {40,8,rr,S,V,0},     /* le.l */
+  {41,5,rr,V,V,0},     /* lt.b */
+  {41,6,rr,V,V,0},     /* lt.h */
+  {41,7,rr,V,V,0},     /* lt.w */
+  {41,8,rr,V,V,0},     /* lt.l */
+  {41,5,rr,S,V,0},     /* lt.b */
+  {41,6,rr,S,V,0},     /* lt.h */
+  {41,7,rr,S,V,0},     /* lt.w */
+  {41,8,rr,S,V,0},     /* lt.l */
+  {43,5,rr,V,V,0},     /* neg.b */
+  {43,6,rr,V,V,0},     /* neg.h */
+  {43,7,rr,V,V,0},     /* neg.w */
+  {43,8,rr,V,V,0},     /* neg.l */
+  {43,5,rr,S,S,0},     /* neg.b */
+  {43,6,rr,S,S,0},     /* neg.h */
+  {43,7,rr,S,S,0},     /* neg.w */
+  {43,8,rr,S,S,0},     /* neg.l */
+};
+struct formstr format4[] = {
+  {46,0,nops,0,0,0},   /* nop */
+  {47,0,pcrel,0,0,0},  /* br */
+  {48,2,pcrel,0,0,0},  /* bri.f */
+  {48,1,pcrel,0,0,0},  /* bri.t */
+  {49,2,pcrel,0,0,0},  /* bra.f */
+  {49,1,pcrel,0,0,0},  /* bra.t */
+  {50,2,pcrel,0,0,0},  /* brs.f */
+  {50,1,pcrel,0,0,0},  /* brs.t */
+};
+struct formstr format5[] = {
+  {51,5,rr,V,V,0},     /* ldvi.b */
+  {51,6,rr,V,V,0},     /* ldvi.h */
+  {51,7,rr,V,V,0},     /* ldvi.w */
+  {51,8,rr,V,V,0},     /* ldvi.l */
+  {28,3,rr,V,V,0},     /* cvtw.s */
+  {31,7,rr,V,V,0},     /* cvts.w */
+  {28,8,rr,V,V,0},     /* cvtw.l */
+  {33,7,rr,V,V,0},     /* cvtl.w */
+  {52,5,rxr,V,V,0},    /* stvi.b */
+  {52,6,rxr,V,V,0},    /* stvi.h */
+  {52,7,rxr,V,V,0},    /* stvi.w */
+  {52,8,rxr,V,V,0},    /* stvi.l */
+  {52,5,rxr,S,V,0},    /* stvi.b */
+  {52,6,rxr,S,V,0},    /* stvi.h */
+  {52,7,rxr,S,V,0},    /* stvi.w */
+  {52,8,rxr,S,V,0},    /* stvi.l */
+};
+struct formstr format6[] = {
+  {53,0,r,A,0,0},      /* ldsdr */
+  {54,0,r,A,0,0},      /* ldkdr */
+  {55,3,r,S,0,0},      /* ln.s */
+  {55,4,r,S,0,0},      /* ln.d */
+  {56,0,nops,0,0,0},   /* patu */
+  {57,0,r,A,0,0},      /* pate */
+  {58,0,nops,0,0,0},   /* pich */
+  {59,0,nops,0,0,0},   /* plch */
+  {0,0,lr,PSW,A,0},    /* mov */
+  {0,0,rxl,A,PSW,0},   /* mov */
+  {0,0,lr,PC,A,0},     /* mov */
+  {60,0,r,S,0,0},      /* idle */
+  {0,0,lr,ITR,S,0},    /* mov */
+  {0,0,rxl,S,ITR,0},   /* mov */
+  {0,0,0,0,0,0},
+  {0,0,rxl,S,ITSR,0},  /* mov */
+  {61,0,nops,0,0,0},   /* rtnq */
+  {62,0,nops,0,0,0},   /* cfork */
+  {63,0,nops,0,0,0},   /* rtn */
+  {64,0,nops,0,0,0},   /* wfork */
+  {65,0,nops,0,0,0},   /* join */
+  {66,0,nops,0,0,0},   /* rtnc */
+  {67,3,r,S,0,0},      /* exp.s */
+  {67,4,r,S,0,0},      /* exp.d */
+  {68,3,r,S,0,0},      /* sin.s */
+  {68,4,r,S,0,0},      /* sin.d */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {69,3,r,S,0,0},      /* cos.s */
+  {69,4,r,S,0,0},      /* cos.d */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {70,7,r,A,0,0},      /* psh.w */
+  {0,0,0,0,0,0},
+  {71,7,r,A,0,0},      /* pop.w */
+  {0,0,0,0,0,0},
+  {70,7,r,S,0,0},      /* psh.w */
+  {70,8,r,S,0,0},      /* psh.l */
+  {71,7,r,S,0,0},      /* pop.w */
+  {71,8,r,S,0,0},      /* pop.l */
+  {72,0,nops,0,0,0},   /* eni */
+  {73,0,nops,0,0,0},   /* dsi */
+  {74,0,nops,0,0,0},   /* bkpt */
+  {75,0,nops,0,0,0},   /* msync */
+  {76,0,r,S,0,0},      /* mski */
+  {77,0,r,S,0,0},      /* xmti */
+  {0,0,rxl,S,VV,0},    /* mov */
+  {78,0,nops,0,0,0},   /* tstvv */
+  {0,0,lr,VS,A,0},     /* mov */
+  {0,0,rxl,A,VS,0},    /* mov */
+  {0,0,lr,VL,A,0},     /* mov */
+  {0,0,rxl,A,VL,0},    /* mov */
+  {0,7,lr,VS,S,0},     /* mov.w */
+  {0,7,rxl,S,VS,0},    /* mov.w */
+  {0,7,lr,VL,S,0},     /* mov.w */
+  {0,7,rxl,S,VL,0},    /* mov.w */
+  {79,0,r,A,0,0},      /* diag */
+  {80,0,nops,0,0,0},   /* pbkpt */
+  {81,3,r,S,0,0},      /* sqrt.s */
+  {81,4,r,S,0,0},      /* sqrt.d */
+  {82,0,nops,0,0,0},   /* casr */
+  {0,0,0,0,0,0},
+  {83,3,r,S,0,0},      /* atan.s */
+  {83,4,r,S,0,0},      /* atan.d */
+};
+struct formstr format7[] = {
+  {84,5,r,V,0,0},      /* sum.b */
+  {84,6,r,V,0,0},      /* sum.h */
+  {84,7,r,V,0,0},      /* sum.w */
+  {84,8,r,V,0,0},      /* sum.l */
+  {85,0,r,V,0,0},      /* all */
+  {86,0,r,V,0,0},      /* any */
+  {87,0,r,V,0,0},      /* parity */
+  {0,0,0,0,0,0},
+  {88,5,r,V,0,0},      /* max.b */
+  {88,6,r,V,0,0},      /* max.h */
+  {88,7,r,V,0,0},      /* max.w */
+  {88,8,r,V,0,0},      /* max.l */
+  {89,5,r,V,0,0},      /* min.b */
+  {89,6,r,V,0,0},      /* min.h */
+  {89,7,r,V,0,0},      /* min.w */
+  {89,8,r,V,0,0},      /* min.l */
+  {84,3,r,V,0,0},      /* sum.s */
+  {84,4,r,V,0,0},      /* sum.d */
+  {90,3,r,V,0,0},      /* prod.s */
+  {90,4,r,V,0,0},      /* prod.d */
+  {88,3,r,V,0,0},      /* max.s */
+  {88,4,r,V,0,0},      /* max.d */
+  {89,3,r,V,0,0},      /* min.s */
+  {89,4,r,V,0,0},      /* min.d */
+  {90,5,r,V,0,0},      /* prod.b */
+  {90,6,r,V,0,0},      /* prod.h */
+  {90,7,r,V,0,0},      /* prod.w */
+  {90,8,r,V,0,0},      /* prod.l */
+  {35,2,lr,VM,S,0},    /* plc.f */
+  {35,1,lr,VM,S,0},    /* plc.t */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+};
+struct formstr formatx[] = {
+  {0,0,0,0,0,0},
+};
+struct formstr format1a[] = {
+  {91,0,imr,A,0,0},    /* halt */
+  {92,0,a4,0,0,0},     /* sysc */
+  {18,6,imr,A,0,0},    /* ld.h */
+  {18,7,imr,A,0,0},    /* ld.w */
+  {5,0,imr,A,0,0},     /* and */
+  {6,0,imr,A,0,0},     /* or */
+  {7,0,imr,A,0,0},     /* xor */
+  {8,0,imr,A,0,0},     /* shf */
+  {9,6,imr,A,0,0},     /* add.h */
+  {9,7,imr,A,0,0},     /* add.w */
+  {10,6,imr,A,0,0},    /* sub.h */
+  {10,7,imr,A,0,0},    /* sub.w */
+  {3,6,imr,A,0,0},     /* mul.h */
+  {3,7,imr,A,0,0},     /* mul.w */
+  {4,6,imr,A,0,0},     /* div.h */
+  {4,7,imr,A,0,0},     /* div.w */
+  {18,7,iml,VL,0,0},   /* ld.w */
+  {18,7,iml,VS,0,0},   /* ld.w */
+  {0,0,0,0,0,0},
+  {8,7,imr,S,0,0},     /* shf.w */
+  {93,0,a5,0,0,0},     /* trap */
+  {0,0,0,0,0,0},
+  {37,6,imr,A,0,0},    /* eq.h */
+  {37,7,imr,A,0,0},    /* eq.w */
+  {38,6,imr,A,0,0},    /* leu.h */
+  {38,7,imr,A,0,0},    /* leu.w */
+  {39,6,imr,A,0,0},    /* ltu.h */
+  {39,7,imr,A,0,0},    /* ltu.w */
+  {40,6,imr,A,0,0},    /* le.h */
+  {40,7,imr,A,0,0},    /* le.w */
+  {41,6,imr,A,0,0},    /* lt.h */
+  {41,7,imr,A,0,0},    /* lt.w */
+};
+struct formstr format1b[] = {
+  {18,4,imr,S,0,0},    /* ld.d */
+  {18,10,imr,S,0,0},   /* ld.u */
+  {18,8,imr,S,0,0},    /* ld.l */
+  {18,7,imr,S,0,0},    /* ld.w */
+  {5,0,imr,S,0,0},     /* and */
+  {6,0,imr,S,0,0},     /* or */
+  {7,0,imr,S,0,0},     /* xor */
+  {8,0,imr,S,0,0},     /* shf */
+  {9,6,imr,S,0,0},     /* add.h */
+  {9,7,imr,S,0,0},     /* add.w */
+  {10,6,imr,S,0,0},    /* sub.h */
+  {10,7,imr,S,0,0},    /* sub.w */
+  {3,6,imr,S,0,0},     /* mul.h */
+  {3,7,imr,S,0,0},     /* mul.w */
+  {4,6,imr,S,0,0},     /* div.h */
+  {4,7,imr,S,0,0},     /* div.w */
+  {9,3,imr,S,0,0},     /* add.s */
+  {10,3,imr,S,0,0},    /* sub.s */
+  {3,3,imr,S,0,0},     /* mul.s */
+  {4,3,imr,S,0,0},     /* div.s */
+  {40,3,imr,S,0,0},    /* le.s */
+  {41,3,imr,S,0,0},    /* lt.s */
+  {37,6,imr,S,0,0},    /* eq.h */
+  {37,7,imr,S,0,0},    /* eq.w */
+  {38,6,imr,S,0,0},    /* leu.h */
+  {38,7,imr,S,0,0},    /* leu.w */
+  {39,6,imr,S,0,0},    /* ltu.h */
+  {39,7,imr,S,0,0},    /* ltu.w */
+  {40,6,imr,S,0,0},    /* le.h */
+  {40,7,imr,S,0,0},    /* le.w */
+  {41,6,imr,S,0,0},    /* lt.h */
+  {41,7,imr,S,0,0},    /* lt.w */
+};
+struct formstr e0_format0[] = {
+  {10,3,rrr,S,V,V},    /* sub.s */
+  {10,4,rrr,S,V,V},    /* sub.d */
+  {4,3,rrr,S,V,V},     /* div.s */
+  {4,4,rrr,S,V,V},     /* div.d */
+  {10,11,rrr,S,V,V},   /* sub.s.f */
+  {10,12,rrr,S,V,V},   /* sub.d.f */
+  {4,11,rrr,S,V,V},    /* div.s.f */
+  {4,12,rrr,S,V,V},    /* div.d.f */
+  {3,11,rrr,V,V,V},    /* mul.s.f */
+  {3,12,rrr,V,V,V},    /* mul.d.f */
+  {4,11,rrr,V,V,V},    /* div.s.f */
+  {4,12,rrr,V,V,V},    /* div.d.f */
+  {3,11,rrr,V,S,V},    /* mul.s.f */
+  {3,12,rrr,V,S,V},    /* mul.d.f */
+  {4,11,rrr,V,S,V},    /* div.s.f */
+  {4,12,rrr,V,S,V},    /* div.d.f */
+  {5,2,rrr,V,V,V},     /* and.f */
+  {6,2,rrr,V,V,V},     /* or.f */
+  {7,2,rrr,V,V,V},     /* xor.f */
+  {8,2,rrr,V,V,V},     /* shf.f */
+  {5,2,rrr,V,S,V},     /* and.f */
+  {6,2,rrr,V,S,V},     /* or.f */
+  {7,2,rrr,V,S,V},     /* xor.f */
+  {8,2,rrr,V,S,V},     /* shf.f */
+  {9,11,rrr,V,V,V},    /* add.s.f */
+  {9,12,rrr,V,V,V},    /* add.d.f */
+  {10,11,rrr,V,V,V},   /* sub.s.f */
+  {10,12,rrr,V,V,V},   /* sub.d.f */
+  {9,11,rrr,V,S,V},    /* add.s.f */
+  {9,12,rrr,V,S,V},    /* add.d.f */
+  {10,11,rrr,V,S,V},   /* sub.s.f */
+  {10,12,rrr,V,S,V},   /* sub.d.f */
+  {9,13,rrr,V,V,V},    /* add.b.f */
+  {9,14,rrr,V,V,V},    /* add.h.f */
+  {9,15,rrr,V,V,V},    /* add.w.f */
+  {9,16,rrr,V,V,V},    /* add.l.f */
+  {9,13,rrr,V,S,V},    /* add.b.f */
+  {9,14,rrr,V,S,V},    /* add.h.f */
+  {9,15,rrr,V,S,V},    /* add.w.f */
+  {9,16,rrr,V,S,V},    /* add.l.f */
+  {10,13,rrr,V,V,V},   /* sub.b.f */
+  {10,14,rrr,V,V,V},   /* sub.h.f */
+  {10,15,rrr,V,V,V},   /* sub.w.f */
+  {10,16,rrr,V,V,V},   /* sub.l.f */
+  {10,13,rrr,V,S,V},   /* sub.b.f */
+  {10,14,rrr,V,S,V},   /* sub.h.f */
+  {10,15,rrr,V,S,V},   /* sub.w.f */
+  {10,16,rrr,V,S,V},   /* sub.l.f */
+  {3,13,rrr,V,V,V},    /* mul.b.f */
+  {3,14,rrr,V,V,V},    /* mul.h.f */
+  {3,15,rrr,V,V,V},    /* mul.w.f */
+  {3,16,rrr,V,V,V},    /* mul.l.f */
+  {3,13,rrr,V,S,V},    /* mul.b.f */
+  {3,14,rrr,V,S,V},    /* mul.h.f */
+  {3,15,rrr,V,S,V},    /* mul.w.f */
+  {3,16,rrr,V,S,V},    /* mul.l.f */
+  {4,13,rrr,V,V,V},    /* div.b.f */
+  {4,14,rrr,V,V,V},    /* div.h.f */
+  {4,15,rrr,V,V,V},    /* div.w.f */
+  {4,16,rrr,V,V,V},    /* div.l.f */
+  {4,13,rrr,V,S,V},    /* div.b.f */
+  {4,14,rrr,V,S,V},    /* div.h.f */
+  {4,15,rrr,V,S,V},    /* div.w.f */
+  {4,16,rrr,V,S,V},    /* div.l.f */
+};
+struct formstr e0_format1[] = {
+  {0,0,0,0,0,0},
+  {94,0,a3,0,0,0},     /* tst */
+  {95,0,a3,0,0,0},     /* lck */
+  {96,0,a3,0,0,0},     /* ulk */
+  {17,0,a1r,S,0,0},    /* ldea */
+  {97,0,a1r,A,0,0},    /* spawn */
+  {98,0,a1r,A,0,0},    /* ldcmr */
+  {99,0,a2r,A,0,0},    /* stcmr */
+  {100,0,a1r,A,0,0},   /* popr */
+  {101,0,a2r,A,0,0},   /* pshr */
+  {102,7,a1r,A,0,0},   /* rcvr.w */
+  {103,7,a2r,A,0,0},   /* matm.w */
+  {104,7,a2r,A,0,0},   /* sndr.w */
+  {104,8,a2r,S,0,0},   /* sndr.l */
+  {102,8,a1r,S,0,0},   /* rcvr.l */
+  {103,8,a2r,S,0,0},   /* matm.l */
+  {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,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},
+  {105,7,a2r,A,0,0},   /* putr.w */
+  {105,8,a2r,S,0,0},   /* putr.l */
+  {106,7,a1r,A,0,0},   /* getr.w */
+  {106,8,a1r,S,0,0},   /* getr.l */
+  {26,13,a2r,S,0,0},   /* ste.b.f */
+  {26,14,a2r,S,0,0},   /* ste.h.f */
+  {26,15,a2r,S,0,0},   /* ste.w.f */
+  {26,16,a2r,S,0,0},   /* ste.l.f */
+  {107,7,a2r,A,0,0},   /* matr.w */
+  {108,7,a2r,A,0,0},   /* mat.w */
+  {109,7,a1r,A,0,0},   /* get.w */
+  {110,7,a1r,A,0,0},   /* rcv.w */
+  {0,0,0,0,0,0},
+  {111,7,a1r,A,0,0},   /* inc.w */
+  {112,7,a2r,A,0,0},   /* put.w */
+  {113,7,a2r,A,0,0},   /* snd.w */
+  {107,8,a2r,S,0,0},   /* matr.l */
+  {108,8,a2r,S,0,0},   /* mat.l */
+  {109,8,a1r,S,0,0},   /* get.l */
+  {110,8,a1r,S,0,0},   /* rcv.l */
+  {0,0,0,0,0,0},
+  {111,8,a1r,S,0,0},   /* inc.l */
+  {112,8,a2r,S,0,0},   /* put.l */
+  {113,8,a2r,S,0,0},   /* snd.l */
+  {18,13,a1r,V,0,0},   /* ld.b.f */
+  {18,14,a1r,V,0,0},   /* ld.h.f */
+  {18,15,a1r,V,0,0},   /* ld.w.f */
+  {18,16,a1r,V,0,0},   /* ld.l.f */
+  {21,13,a2r,V,0,0},   /* st.b.f */
+  {21,14,a2r,V,0,0},   /* st.h.f */
+  {21,15,a2r,V,0,0},   /* st.w.f */
+  {21,16,a2r,V,0,0},   /* st.l.f */
+};
+struct formstr e0_format2[] = {
+  {28,5,rr,V,V,0},     /* cvtw.b */
+  {28,6,rr,V,V,0},     /* cvtw.h */
+  {29,7,rr,V,V,0},     /* cvtb.w */
+  {30,7,rr,V,V,0},     /* cvth.w */
+  {28,13,rr,V,V,0},    /* cvtw.b.f */
+  {28,14,rr,V,V,0},    /* cvtw.h.f */
+  {29,15,rr,V,V,0},    /* cvtb.w.f */
+  {30,15,rr,V,V,0},    /* cvth.w.f */
+  {31,8,rr,V,V,0},     /* cvts.l */
+  {32,7,rr,V,V,0},     /* cvtd.w */
+  {33,3,rr,V,V,0},     /* cvtl.s */
+  {28,4,rr,V,V,0},     /* cvtw.d */
+  {31,16,rr,V,V,0},    /* cvts.l.f */
+  {32,15,rr,V,V,0},    /* cvtd.w.f */
+  {33,11,rr,V,V,0},    /* cvtl.s.f */
+  {28,12,rr,V,V,0},    /* cvtw.d.f */
+  {114,0,rr,S,S,0},    /* enal */
+  {8,7,rr,S,S,0},      /* shf.w */
+  {115,0,rr,S,S,0},    /* enag */
+  {0,0,0,0,0,0},
+  {28,4,rr,S,S,0},     /* cvtw.d */
+  {32,7,rr,S,S,0},     /* cvtd.w */
+  {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},
+  {116,3,rr,S,S,0},    /* frint.s */
+  {116,4,rr,S,S,0},    /* frint.d */
+  {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,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,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},
+  {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,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,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},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {116,3,rr,V,V,0},    /* frint.s */
+  {116,4,rr,V,V,0},    /* frint.d */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {116,11,rr,V,V,0},   /* frint.s.f */
+  {116,12,rr,V,V,0},   /* frint.d.f */
+  {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,0,0},
+  {0,0,0,0,0,0},
+  {81,3,rr,V,V,0},     /* sqrt.s */
+  {81,4,rr,V,V,0},     /* sqrt.d */
+  {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},
+  {81,11,rr,V,V,0},    /* sqrt.s.f */
+  {81,12,rr,V,V,0},    /* sqrt.d.f */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+};
+struct formstr e0_format3[] = {
+  {32,11,rr,V,V,0},    /* cvtd.s.f */
+  {31,12,rr,V,V,0},    /* cvts.d.f */
+  {33,12,rr,V,V,0},    /* cvtl.d.f */
+  {32,16,rr,V,V,0},    /* cvtd.l.f */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {36,2,rr,V,V,0},     /* tzc.f */
+  {44,2,rr,V,V,0},     /* lop.f */
+  {117,2,rr,V,V,0},    /* xpnd.f */
+  {42,2,rr,V,V,0},     /* not.f */
+  {8,2,rr,S,V,0},      /* shf.f */
+  {35,17,rr,V,V,0},    /* plc.t.f */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {37,11,rr,V,V,0},    /* eq.s.f */
+  {37,12,rr,V,V,0},    /* eq.d.f */
+  {43,11,rr,V,V,0},    /* neg.s.f */
+  {43,12,rr,V,V,0},    /* neg.d.f */
+  {37,11,rr,S,V,0},    /* eq.s.f */
+  {37,12,rr,S,V,0},    /* eq.d.f */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {40,11,rr,V,V,0},    /* le.s.f */
+  {40,12,rr,V,V,0},    /* le.d.f */
+  {41,11,rr,V,V,0},    /* lt.s.f */
+  {41,12,rr,V,V,0},    /* lt.d.f */
+  {40,11,rr,S,V,0},    /* le.s.f */
+  {40,12,rr,S,V,0},    /* le.d.f */
+  {41,11,rr,S,V,0},    /* lt.s.f */
+  {41,12,rr,S,V,0},    /* lt.d.f */
+  {37,13,rr,V,V,0},    /* eq.b.f */
+  {37,14,rr,V,V,0},    /* eq.h.f */
+  {37,15,rr,V,V,0},    /* eq.w.f */
+  {37,16,rr,V,V,0},    /* eq.l.f */
+  {37,13,rr,S,V,0},    /* eq.b.f */
+  {37,14,rr,S,V,0},    /* eq.h.f */
+  {37,15,rr,S,V,0},    /* eq.w.f */
+  {37,16,rr,S,V,0},    /* eq.l.f */
+  {40,13,rr,V,V,0},    /* le.b.f */
+  {40,14,rr,V,V,0},    /* le.h.f */
+  {40,15,rr,V,V,0},    /* le.w.f */
+  {40,16,rr,V,V,0},    /* le.l.f */
+  {40,13,rr,S,V,0},    /* le.b.f */
+  {40,14,rr,S,V,0},    /* le.h.f */
+  {40,15,rr,S,V,0},    /* le.w.f */
+  {40,16,rr,S,V,0},    /* le.l.f */
+  {41,13,rr,V,V,0},    /* lt.b.f */
+  {41,14,rr,V,V,0},    /* lt.h.f */
+  {41,15,rr,V,V,0},    /* lt.w.f */
+  {41,16,rr,V,V,0},    /* lt.l.f */
+  {41,13,rr,S,V,0},    /* lt.b.f */
+  {41,14,rr,S,V,0},    /* lt.h.f */
+  {41,15,rr,S,V,0},    /* lt.w.f */
+  {41,16,rr,S,V,0},    /* lt.l.f */
+  {43,13,rr,V,V,0},    /* neg.b.f */
+  {43,14,rr,V,V,0},    /* neg.h.f */
+  {43,15,rr,V,V,0},    /* neg.w.f */
+  {43,16,rr,V,V,0},    /* neg.l.f */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+};
+struct formstr e0_format4[] = {
+  {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},
+};
+struct formstr e0_format5[] = {
+  {51,13,rr,V,V,0},    /* ldvi.b.f */
+  {51,14,rr,V,V,0},    /* ldvi.h.f */
+  {51,15,rr,V,V,0},    /* ldvi.w.f */
+  {51,16,rr,V,V,0},    /* ldvi.l.f */
+  {28,11,rr,V,V,0},    /* cvtw.s.f */
+  {31,15,rr,V,V,0},    /* cvts.w.f */
+  {28,16,rr,V,V,0},    /* cvtw.l.f */
+  {33,15,rr,V,V,0},    /* cvtl.w.f */
+  {52,13,rxr,V,V,0},   /* stvi.b.f */
+  {52,14,rxr,V,V,0},   /* stvi.h.f */
+  {52,15,rxr,V,V,0},   /* stvi.w.f */
+  {52,16,rxr,V,V,0},   /* stvi.l.f */
+  {52,13,rxr,S,V,0},   /* stvi.b.f */
+  {52,14,rxr,S,V,0},   /* stvi.h.f */
+  {52,15,rxr,S,V,0},   /* stvi.w.f */
+  {52,16,rxr,S,V,0},   /* stvi.l.f */
+};
+struct formstr e0_format6[] = {
+  {0,0,rxl,S,CIR,0},   /* mov */
+  {0,0,lr,CIR,S,0},    /* mov */
+  {0,0,lr,TOC,S,0},    /* mov */
+  {0,0,lr,CPUID,S,0},  /* mov */
+  {0,0,rxl,S,TTR,0},   /* mov */
+  {0,0,lr,TTR,S,0},    /* mov */
+  {118,0,nops,0,0,0},  /* ctrsl */
+  {119,0,nops,0,0,0},  /* ctrsg */
+  {0,0,rxl,S,VMU,0},   /* mov */
+  {0,0,lr,VMU,S,0},    /* mov */
+  {0,0,rxl,S,VML,0},   /* mov */
+  {0,0,lr,VML,S,0},    /* mov */
+  {0,0,rxl,S,ICR,0},   /* mov */
+  {0,0,lr,ICR,S,0},    /* mov */
+  {0,0,rxl,S,TCPU,0},  /* mov */
+  {0,0,lr,TCPU,S,0},   /* mov */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {120,0,nops,0,0,0},  /* stop */
+  {0,0,0,0,0,0},
+  {0,0,rxl,S,TID,0},   /* mov */
+  {0,0,lr,TID,S,0},    /* mov */
+  {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,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,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},
+  {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},
+};
+struct formstr e0_format7[] = {
+  {84,13,r,V,0,0},     /* sum.b.f */
+  {84,14,r,V,0,0},     /* sum.h.f */
+  {84,15,r,V,0,0},     /* sum.w.f */
+  {84,16,r,V,0,0},     /* sum.l.f */
+  {85,2,r,V,0,0},      /* all.f */
+  {86,2,r,V,0,0},      /* any.f */
+  {87,2,r,V,0,0},      /* parity.f */
+  {0,0,0,0,0,0},
+  {88,13,r,V,0,0},     /* max.b.f */
+  {88,14,r,V,0,0},     /* max.h.f */
+  {88,15,r,V,0,0},     /* max.w.f */
+  {88,16,r,V,0,0},     /* max.l.f */
+  {89,13,r,V,0,0},     /* min.b.f */
+  {89,14,r,V,0,0},     /* min.h.f */
+  {89,15,r,V,0,0},     /* min.w.f */
+  {89,16,r,V,0,0},     /* min.l.f */
+  {84,11,r,V,0,0},     /* sum.s.f */
+  {84,12,r,V,0,0},     /* sum.d.f */
+  {90,11,r,V,0,0},     /* prod.s.f */
+  {90,12,r,V,0,0},     /* prod.d.f */
+  {88,11,r,V,0,0},     /* max.s.f */
+  {88,12,r,V,0,0},     /* max.d.f */
+  {89,11,r,V,0,0},     /* min.s.f */
+  {89,12,r,V,0,0},     /* min.d.f */
+  {90,13,r,V,0,0},     /* prod.b.f */
+  {90,14,r,V,0,0},     /* prod.h.f */
+  {90,15,r,V,0,0},     /* prod.w.f */
+  {90,16,r,V,0,0},     /* prod.l.f */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+};
+struct formstr e1_format0[] = {
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {10,18,rrr,S,V,V},   /* sub.s.t */
+  {10,19,rrr,S,V,V},   /* sub.d.t */
+  {4,18,rrr,S,V,V},    /* div.s.t */
+  {4,19,rrr,S,V,V},    /* div.d.t */
+  {3,18,rrr,V,V,V},    /* mul.s.t */
+  {3,19,rrr,V,V,V},    /* mul.d.t */
+  {4,18,rrr,V,V,V},    /* div.s.t */
+  {4,19,rrr,V,V,V},    /* div.d.t */
+  {3,18,rrr,V,S,V},    /* mul.s.t */
+  {3,19,rrr,V,S,V},    /* mul.d.t */
+  {4,18,rrr,V,S,V},    /* div.s.t */
+  {4,19,rrr,V,S,V},    /* div.d.t */
+  {5,1,rrr,V,V,V},     /* and.t */
+  {6,1,rrr,V,V,V},     /* or.t */
+  {7,1,rrr,V,V,V},     /* xor.t */
+  {8,1,rrr,V,V,V},     /* shf.t */
+  {5,1,rrr,V,S,V},     /* and.t */
+  {6,1,rrr,V,S,V},     /* or.t */
+  {7,1,rrr,V,S,V},     /* xor.t */
+  {8,1,rrr,V,S,V},     /* shf.t */
+  {9,18,rrr,V,V,V},    /* add.s.t */
+  {9,19,rrr,V,V,V},    /* add.d.t */
+  {10,18,rrr,V,V,V},   /* sub.s.t */
+  {10,19,rrr,V,V,V},   /* sub.d.t */
+  {9,18,rrr,V,S,V},    /* add.s.t */
+  {9,19,rrr,V,S,V},    /* add.d.t */
+  {10,18,rrr,V,S,V},   /* sub.s.t */
+  {10,19,rrr,V,S,V},   /* sub.d.t */
+  {9,20,rrr,V,V,V},    /* add.b.t */
+  {9,21,rrr,V,V,V},    /* add.h.t */
+  {9,22,rrr,V,V,V},    /* add.w.t */
+  {9,23,rrr,V,V,V},    /* add.l.t */
+  {9,20,rrr,V,S,V},    /* add.b.t */
+  {9,21,rrr,V,S,V},    /* add.h.t */
+  {9,22,rrr,V,S,V},    /* add.w.t */
+  {9,23,rrr,V,S,V},    /* add.l.t */
+  {10,20,rrr,V,V,V},   /* sub.b.t */
+  {10,21,rrr,V,V,V},   /* sub.h.t */
+  {10,22,rrr,V,V,V},   /* sub.w.t */
+  {10,23,rrr,V,V,V},   /* sub.l.t */
+  {10,20,rrr,V,S,V},   /* sub.b.t */
+  {10,21,rrr,V,S,V},   /* sub.h.t */
+  {10,22,rrr,V,S,V},   /* sub.w.t */
+  {10,23,rrr,V,S,V},   /* sub.l.t */
+  {3,20,rrr,V,V,V},    /* mul.b.t */
+  {3,21,rrr,V,V,V},    /* mul.h.t */
+  {3,22,rrr,V,V,V},    /* mul.w.t */
+  {3,23,rrr,V,V,V},    /* mul.l.t */
+  {3,20,rrr,V,S,V},    /* mul.b.t */
+  {3,21,rrr,V,S,V},    /* mul.h.t */
+  {3,22,rrr,V,S,V},    /* mul.w.t */
+  {3,23,rrr,V,S,V},    /* mul.l.t */
+  {4,20,rrr,V,V,V},    /* div.b.t */
+  {4,21,rrr,V,V,V},    /* div.h.t */
+  {4,22,rrr,V,V,V},    /* div.w.t */
+  {4,23,rrr,V,V,V},    /* div.l.t */
+  {4,20,rrr,V,S,V},    /* div.b.t */
+  {4,21,rrr,V,S,V},    /* div.h.t */
+  {4,22,rrr,V,S,V},    /* div.w.t */
+  {4,23,rrr,V,S,V},    /* div.l.t */
+};
+struct formstr e1_format1[] = {
+  {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,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,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},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {26,20,a2r,S,0,0},   /* ste.b.t */
+  {26,21,a2r,S,0,0},   /* ste.h.t */
+  {26,22,a2r,S,0,0},   /* ste.w.t */
+  {26,23,a2r,S,0,0},   /* ste.l.t */
+  {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,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},
+  {18,20,a1r,V,0,0},   /* ld.b.t */
+  {18,21,a1r,V,0,0},   /* ld.h.t */
+  {18,22,a1r,V,0,0},   /* ld.w.t */
+  {18,23,a1r,V,0,0},   /* ld.l.t */
+  {21,20,a2r,V,0,0},   /* st.b.t */
+  {21,21,a2r,V,0,0},   /* st.h.t */
+  {21,22,a2r,V,0,0},   /* st.w.t */
+  {21,23,a2r,V,0,0},   /* st.l.t */
+};
+struct formstr e1_format2[] = {
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {28,20,rr,V,V,0},    /* cvtw.b.t */
+  {28,21,rr,V,V,0},    /* cvtw.h.t */
+  {29,22,rr,V,V,0},    /* cvtb.w.t */
+  {30,22,rr,V,V,0},    /* cvth.w.t */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {31,23,rr,V,V,0},    /* cvts.l.t */
+  {32,22,rr,V,V,0},    /* cvtd.w.t */
+  {33,18,rr,V,V,0},    /* cvtl.s.t */
+  {28,19,rr,V,V,0},    /* cvtw.d.t */
+  {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,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,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},
+  {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,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,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},
+  {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,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,0,0,0,0},
+  {116,18,rr,V,V,0},   /* frint.s.t */
+  {116,19,rr,V,V,0},   /* frint.d.t */
+  {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,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},
+  {81,18,rr,V,V,0},    /* sqrt.s.t */
+  {81,19,rr,V,V,0},    /* sqrt.d.t */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+};
+struct formstr e1_format3[] = {
+  {32,18,rr,V,V,0},    /* cvtd.s.t */
+  {31,19,rr,V,V,0},    /* cvts.d.t */
+  {33,19,rr,V,V,0},    /* cvtl.d.t */
+  {32,23,rr,V,V,0},    /* cvtd.l.t */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {36,1,rr,V,V,0},     /* tzc.t */
+  {44,1,rr,V,V,0},     /* lop.t */
+  {117,1,rr,V,V,0},    /* xpnd.t */
+  {42,1,rr,V,V,0},     /* not.t */
+  {8,1,rr,S,V,0},      /* shf.t */
+  {35,24,rr,V,V,0},    /* plc.t.t */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {37,18,rr,V,V,0},    /* eq.s.t */
+  {37,19,rr,V,V,0},    /* eq.d.t */
+  {43,18,rr,V,V,0},    /* neg.s.t */
+  {43,19,rr,V,V,0},    /* neg.d.t */
+  {37,18,rr,S,V,0},    /* eq.s.t */
+  {37,19,rr,S,V,0},    /* eq.d.t */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {40,18,rr,V,V,0},    /* le.s.t */
+  {40,19,rr,V,V,0},    /* le.d.t */
+  {41,18,rr,V,V,0},    /* lt.s.t */
+  {41,19,rr,V,V,0},    /* lt.d.t */
+  {40,18,rr,S,V,0},    /* le.s.t */
+  {40,19,rr,S,V,0},    /* le.d.t */
+  {41,18,rr,S,V,0},    /* lt.s.t */
+  {41,19,rr,S,V,0},    /* lt.d.t */
+  {37,20,rr,V,V,0},    /* eq.b.t */
+  {37,21,rr,V,V,0},    /* eq.h.t */
+  {37,22,rr,V,V,0},    /* eq.w.t */
+  {37,23,rr,V,V,0},    /* eq.l.t */
+  {37,20,rr,S,V,0},    /* eq.b.t */
+  {37,21,rr,S,V,0},    /* eq.h.t */
+  {37,22,rr,S,V,0},    /* eq.w.t */
+  {37,23,rr,S,V,0},    /* eq.l.t */
+  {40,20,rr,V,V,0},    /* le.b.t */
+  {40,21,rr,V,V,0},    /* le.h.t */
+  {40,22,rr,V,V,0},    /* le.w.t */
+  {40,23,rr,V,V,0},    /* le.l.t */
+  {40,20,rr,S,V,0},    /* le.b.t */
+  {40,21,rr,S,V,0},    /* le.h.t */
+  {40,22,rr,S,V,0},    /* le.w.t */
+  {40,23,rr,S,V,0},    /* le.l.t */
+  {41,20,rr,V,V,0},    /* lt.b.t */
+  {41,21,rr,V,V,0},    /* lt.h.t */
+  {41,22,rr,V,V,0},    /* lt.w.t */
+  {41,23,rr,V,V,0},    /* lt.l.t */
+  {41,20,rr,S,V,0},    /* lt.b.t */
+  {41,21,rr,S,V,0},    /* lt.h.t */
+  {41,22,rr,S,V,0},    /* lt.w.t */
+  {41,23,rr,S,V,0},    /* lt.l.t */
+  {43,20,rr,V,V,0},    /* neg.b.t */
+  {43,21,rr,V,V,0},    /* neg.h.t */
+  {43,22,rr,V,V,0},    /* neg.w.t */
+  {43,23,rr,V,V,0},    /* neg.l.t */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+};
+struct formstr e1_format4[] = {
+  {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},
+};
+struct formstr e1_format5[] = {
+  {51,20,rr,V,V,0},    /* ldvi.b.t */
+  {51,21,rr,V,V,0},    /* ldvi.h.t */
+  {51,22,rr,V,V,0},    /* ldvi.w.t */
+  {51,23,rr,V,V,0},    /* ldvi.l.t */
+  {28,18,rr,V,V,0},    /* cvtw.s.t */
+  {31,22,rr,V,V,0},    /* cvts.w.t */
+  {28,23,rr,V,V,0},    /* cvtw.l.t */
+  {33,22,rr,V,V,0},    /* cvtl.w.t */
+  {52,20,rxr,V,V,0},   /* stvi.b.t */
+  {52,21,rxr,V,V,0},   /* stvi.h.t */
+  {52,22,rxr,V,V,0},   /* stvi.w.t */
+  {52,23,rxr,V,V,0},   /* stvi.l.t */
+  {52,20,rxr,S,V,0},   /* stvi.b.t */
+  {52,21,rxr,S,V,0},   /* stvi.h.t */
+  {52,22,rxr,S,V,0},   /* stvi.w.t */
+  {52,23,rxr,S,V,0},   /* stvi.l.t */
+};
+struct formstr e1_format6[] = {
+  {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,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,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},
+  {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,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,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},
+};
+struct formstr e1_format7[] = {
+  {84,20,r,V,0,0},     /* sum.b.t */
+  {84,21,r,V,0,0},     /* sum.h.t */
+  {84,22,r,V,0,0},     /* sum.w.t */
+  {84,23,r,V,0,0},     /* sum.l.t */
+  {85,1,r,V,0,0},      /* all.t */
+  {86,1,r,V,0,0},      /* any.t */
+  {87,1,r,V,0,0},      /* parity.t */
+  {0,0,0,0,0,0},
+  {88,20,r,V,0,0},     /* max.b.t */
+  {88,21,r,V,0,0},     /* max.h.t */
+  {88,22,r,V,0,0},     /* max.w.t */
+  {88,23,r,V,0,0},     /* max.l.t */
+  {89,20,r,V,0,0},     /* min.b.t */
+  {89,21,r,V,0,0},     /* min.h.t */
+  {89,22,r,V,0,0},     /* min.w.t */
+  {89,23,r,V,0,0},     /* min.l.t */
+  {84,18,r,V,0,0},     /* sum.s.t */
+  {84,19,r,V,0,0},     /* sum.d.t */
+  {90,18,r,V,0,0},     /* prod.s.t */
+  {90,19,r,V,0,0},     /* prod.d.t */
+  {88,18,r,V,0,0},     /* max.s.t */
+  {88,19,r,V,0,0},     /* max.d.t */
+  {89,18,r,V,0,0},     /* min.s.t */
+  {89,19,r,V,0,0},     /* min.d.t */
+  {90,20,r,V,0,0},     /* prod.b.t */
+  {90,21,r,V,0,0},     /* prod.h.t */
+  {90,22,r,V,0,0},     /* prod.w.t */
+  {90,23,r,V,0,0},     /* prod.l.t */
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+  {0,0,0,0,0,0},
+};
+char *lop[] = {
+  "mov",       /* 0 */
+  "merg",      /* 1 */
+  "mask",      /* 2 */
+  "mul",       /* 3 */
+  "div",       /* 4 */
+  "and",       /* 5 */
+  "or",        /* 6 */
+  "xor",       /* 7 */
+  "shf",       /* 8 */
+  "add",       /* 9 */
+  "sub",       /* 10 */
+  "exit",      /* 11 */
+  "jmp",       /* 12 */
+  "jmpi",      /* 13 */
+  "jmpa",      /* 14 */
+  "jmps",      /* 15 */
+  "tac",       /* 16 */
+  "ldea",      /* 17 */
+  "ld",        /* 18 */
+  "tas",       /* 19 */
+  "pshea",     /* 20 */
+  "st",        /* 21 */
+  "call",      /* 22 */
+  "calls",     /* 23 */
+  "callq",     /* 24 */
+  "pfork",     /* 25 */
+  "ste",       /* 26 */
+  "incr",      /* 27 */
+  "cvtw",      /* 28 */
+  "cvtb",      /* 29 */
+  "cvth",      /* 30 */
+  "cvts",      /* 31 */
+  "cvtd",      /* 32 */
+  "cvtl",      /* 33 */
+  "ldpa",      /* 34 */
+  "plc",       /* 35 */
+  "tzc",       /* 36 */
+  "eq",        /* 37 */
+  "leu",       /* 38 */
+  "ltu",       /* 39 */
+  "le",        /* 40 */
+  "lt",        /* 41 */
+  "not",       /* 42 */
+  "neg",       /* 43 */
+  "lop",       /* 44 */
+  "cprs",      /* 45 */
+  "nop",       /* 46 */
+  "br",        /* 47 */
+  "bri",       /* 48 */
+  "bra",       /* 49 */
+  "brs",       /* 50 */
+  "ldvi",      /* 51 */
+  "stvi",      /* 52 */
+  "ldsdr",     /* 53 */
+  "ldkdr",     /* 54 */
+  "ln",        /* 55 */
+  "patu",      /* 56 */
+  "pate",      /* 57 */
+  "pich",      /* 58 */
+  "plch",      /* 59 */
+  "idle",      /* 60 */
+  "rtnq",      /* 61 */
+  "cfork",     /* 62 */
+  "rtn",       /* 63 */
+  "wfork",     /* 64 */
+  "join",      /* 65 */
+  "rtnc",      /* 66 */
+  "exp",       /* 67 */
+  "sin",       /* 68 */
+  "cos",       /* 69 */
+  "psh",       /* 70 */
+  "pop",       /* 71 */
+  "eni",       /* 72 */
+  "dsi",       /* 73 */
+  "bkpt",      /* 74 */
+  "msync",     /* 75 */
+  "mski",      /* 76 */
+  "xmti",      /* 77 */
+  "tstvv",     /* 78 */
+  "diag",      /* 79 */
+  "pbkpt",     /* 80 */
+  "sqrt",      /* 81 */
+  "casr",      /* 82 */
+  "atan",      /* 83 */
+  "sum",       /* 84 */
+  "all",       /* 85 */
+  "any",       /* 86 */
+  "parity",    /* 87 */
+  "max",       /* 88 */
+  "min",       /* 89 */
+  "prod",      /* 90 */
+  "halt",      /* 91 */
+  "sysc",      /* 92 */
+  "trap",      /* 93 */
+  "tst",       /* 94 */
+  "lck",       /* 95 */
+  "ulk",       /* 96 */
+  "spawn",     /* 97 */
+  "ldcmr",     /* 98 */
+  "stcmr",     /* 99 */
+  "popr",      /* 100 */
+  "pshr",      /* 101 */
+  "rcvr",      /* 102 */
+  "matm",      /* 103 */
+  "sndr",      /* 104 */
+  "putr",      /* 105 */
+  "getr",      /* 106 */
+  "matr",      /* 107 */
+  "mat",       /* 108 */
+  "get",       /* 109 */
+  "rcv",       /* 110 */
+  "inc",       /* 111 */
+  "put",       /* 112 */
+  "snd",       /* 113 */
+  "enal",      /* 114 */
+  "enag",      /* 115 */
+  "frint",     /* 116 */
+  "xpnd",      /* 117 */
+  "ctrsl",     /* 118 */
+  "ctrsg",     /* 119 */
+  "stop",      /* 120 */
+};
+char *rop[] = {
+  "",  /* 0 */
+  ".t",        /* 1 */
+  ".f",        /* 2 */
+  ".s",        /* 3 */
+  ".d",        /* 4 */
+  ".b",        /* 5 */
+  ".h",        /* 6 */
+  ".w",        /* 7 */
+  ".l",        /* 8 */
+  ".x",        /* 9 */
+  ".u",        /* 10 */
+  ".s.f",      /* 11 */
+  ".d.f",      /* 12 */
+  ".b.f",      /* 13 */
+  ".h.f",      /* 14 */
+  ".w.f",      /* 15 */
+  ".l.f",      /* 16 */
+  ".t.f",      /* 17 */
+  ".s.t",      /* 18 */
+  ".d.t",      /* 19 */
+  ".b.t",      /* 20 */
+  ".h.t",      /* 21 */
+  ".w.t",      /* 22 */
+  ".l.t",      /* 23 */
+  ".t.t",      /* 24 */
+};
diff --git a/include/i386-opcode.h b/include/i386-opcode.h
new file mode 100755 (executable)
index 0000000..4c87ba5
--- /dev/null
@@ -0,0 +1,800 @@
+/* i386-opcode.h -- Intel 80386 opcode table
+   Copyright (C) 1989, 1991, Free Software Foundation.
+
+This file is part of GAS, the GNU Assembler.
+
+GAS is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GAS is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GAS; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   
+/* $Id$ */
+
+static const template i386_optab[] = {
+
+#define _ None
+/* move instructions */
+{ "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|Mem16, 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, Reg8|Mem,  Reg32, 0},
+{"movsbw", 2, 0x660fbe, _, ReverseRegRegmem|Modrm, 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, 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 },
+{"out", 2, 0xe6, _, W|NoModrm, Acc, Imm8, 0 },
+{"out", 2, 0xee, _, W|NoModrm, Acc, InOutPortReg, 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},
+{"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, 0x6698, _, NoModrm, 0, 0, 0},
+{"cwd", 0, 0x6699, _, NoModrm, 0, 0, 0},
+{"cwde", 0, 0x98, _, NoModrm, 0, 0, 0},
+{"cdq", 0, 0x99, _, NoModrm, 0, 0, 0},
+/*  att naming */
+{"cbtw", 0, 0x6698, _, NoModrm, 0, 0, 0},
+{"cwtl", 0, 0x98, _, NoModrm, 0, 0, 0},
+{"cwtd", 0, 0x6699, _, NoModrm, 0, 0, 0},
+{"cltd", 0, 0x99, _, NoModrm, 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 opearnd 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},
+
+{"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},
+
+{"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, Reg|Mem|JumpAbsolute, 0, 0},
+#define CALL_FAR_IMMEDIATE 0x9a
+{"lcall", 2, 0x9a, _, JumpInterSegment, Imm16, Abs32, 0},
+{"lcall", 1, 0xff, 3, Modrm, 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, Mem, 0, 0},
+
+{"ret", 0, 0xc3, _, NoModrm, 0, 0, 0},
+{"ret", 1, 0xc2, _, NoModrm, Imm16, 0, 0},
+{"lret", 0, 0xcb, _, NoModrm, 0, 0, 0},
+{"lret", 1, 0xca, _, NoModrm, Imm16, 0, 0},
+{"enter", 2, 0xc8, _, NoModrm, Imm16, Imm8, 0},
+{"leave", 0, 0xc9, _, NoModrm, 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},
+
+/* these turn into pseudo operations when disp is larger than 8 bits */
+#define IS_JUMP_ON_CX_ZERO(o) \
+  (o == 0x67e3)
+#define IS_JUMP_ON_ECX_ZERO(o) \
+  (o == 0xe3)
+
+{"jcxz", 1, 0x67e3, _, JumpByte, Disp, 0, 0},
+{"jecxz", 1, 0xe3, _, JumpByte, 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},
+{"setnae", 1, 0x0f92, 0, Modrm, Reg8|Mem, 0, 0},
+
+{"setnb", 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},
+{"ins", 0, 0x6c, _, W|NoModrm, 0, 0, 0},
+{"outs", 0, 0x6e, _, W|NoModrm, 0, 0, 0},
+{"lods", 0, 0xac, _, W|NoModrm, 0, 0, 0},
+{"movs", 0, 0xa4, _, W|NoModrm, 0, 0, 0},
+{"scas", 0, 0xae, _, W|NoModrm, 0, 0, 0},
+{"stos", 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 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, 0, 0, 0},
+
+{"boundl", 2, 0x62, _, Modrm, Reg32, Mem, 0},
+{"boundw", 2, 0x6662, _, Modrm, 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 */
+{"fildl", 1, 0xdb, 0, Modrm, Mem, 0, 0},           /* %st0 <-- mem word */
+{"fldl", 1, 0xdd, 0, Modrm, Mem, 0, 0},           /* %st0 <-- mem double */
+{"fldl", 1, 0xd9c0, _, ShortForm, FloatReg, 0, 0}, /* register */
+{"filds", 1, 0xdf, 0, Modrm, Mem, 0, 0},           /* %st0 <-- mem dword */
+{"fildq", 1, 0xdf, 5, Modrm, Mem, 0, 0},           /* %st0 <-- mem qword */
+{"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 */
+{"fistl", 1, 0xdb, 2, Modrm, Mem, 0, 0},           /* %st0 --> mem dword */
+{"fstl", 1, 0xdd, 2, Modrm, Mem, 0, 0},           /* %st0 --> mem double */
+{"fstl", 1, 0xddd0, _, ShortForm, FloatReg, 0, 0}, /* register */
+{"fists", 1, 0xdf, 2, Modrm, Mem, 0, 0},           /* %st0 --> mem word */
+
+/* store (with pop) */
+{"fstp", 1, 0xddd8, _, ShortForm, FloatReg, 0, 0}, /* register */
+{"fstps", 1, 0xd9, 3, Modrm, Mem, 0, 0},           /* %st0 --> mem float */
+{"fistpl", 1, 0xdb, 3, Modrm, Mem, 0, 0},           /* %st0 --> mem word */
+{"fstpl", 1, 0xdd, 3, Modrm, Mem, 0, 0},           /* %st0 --> mem double */
+{"fstpl", 1, 0xddd8, _, ShortForm, FloatReg, 0, 0}, /* register */
+{"fistps", 1, 0xdf, 3, Modrm, Mem, 0, 0},           /* %st0 --> mem dword */
+{"fistpq", 1, 0xdf, 7, Modrm, Mem, 0, 0},           /* %st0 --> mem qword */
+{"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},
+
+/* 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 twice */
+
+/* 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, 0xdbe3, _, NoModrm, 0, 0, 0},
+{"fldcw", 1, 0xd9, 5, Modrm, Mem, 0, 0},
+{"fnstcw", 1, 0xd9, 7, Modrm, Mem, 0, 0},
+{"fstcw", 1, 0xd9, 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, 0xdfe0, _, NoModrm, Acc, 0, 0},
+{"fstsw", 1, 0xdd, 7, Modrm, Mem, 0, 0},
+{"fstsw", 0, 0xdfe0, _, NoModrm, 0, 0, 0},
+{"fnclex", 0, 0xdbe2, _, NoModrm, 0, 0, 0},
+{"fclex", 0, 0xdbe2, _, 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, 0xd9, 6, Modrm, Mem, 0, 0},
+{"fldenv", 1, 0xd9, 4, Modrm, Mem, 0, 0},
+{"fnsave", 1, 0xdd, 6, Modrm, Mem, 0, 0},
+{"fsave", 1, 0xdd, 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},
+{"word", 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},
+{ "repne", 0, 0xf2, _, NoModrm, 0, 0, 0},
+
+{"", 0, 0, 0, 0, 0, 0, 0}      /* sentinal */
+};
+#undef _
+
+static const template *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},
+  /* debug registers */
+  {"db0", Debug, 0},   {"db1", Debug, 1},   {"db2", Debug, 2},
+  {"db3", Debug, 3},   {"db6", Debug, 6},   {"db7", Debug, 7},
+  /* test registers */
+  {"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 *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 *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 *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[] = {
+  { "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 }, { "repe", 0xf3 }, /* repeat string instructions */
+  { "repne", 0xf2 }
+};
+
+static const prefix_entry *i386_prefixtab_end
+  = i386_prefixtab + sizeof(i386_prefixtab)/sizeof(i386_prefixtab[0]);
+
+/* end of i386-opcode.h */
diff --git a/include/i860-opcode.h b/include/i860-opcode.h
new file mode 100755 (executable)
index 0000000..c17e1f7
--- /dev/null
@@ -0,0 +1,491 @@
+/* Table of opcodes for the i860.
+   Copyright (C) 1989 Free Software Foundation, Inc.
+
+This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler.
+
+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 1, 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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#if !defined(__STDC__) && !defined(const)
+#define const
+#endif
+
+/*
+ * Structure of an opcode table entry.
+ */
+struct i860_opcode
+{
+    const char *name;
+    unsigned long match;       /* Bits that must be set.  */
+    unsigned long lose;        /* Bits that must not be set.  */
+    const char *args;
+    /* Nonzero if this is a possible expand-instruction.  */
+    char expand;
+};
+
+enum expand_type
+{
+    E_MOV = 1, E_ADDR, E_U32, E_AND, E_S32, E_DELAY
+};
+
+/*
+   All i860 opcodes are 32 bits, except for the pseudoinstructions
+   and the operations utilizing a 32-bit address expression, an
+   unsigned 32-bit constant, or a signed 32-bit constant.
+   These opcodes are expanded into a two-instruction sequence for
+   any situation where the immediate operand does not fit in 32 bits.
+   In the case of the add and subtract operations the expansion is
+   to a three-instruction sequence (ex: orh, or, adds).  In cases
+   where the address is to be relocated, the instruction is
+   expanded to handle the worse case, this could be optimized at
+   the final link if the actual address were known.
+
+   The pseudoinstructions are:  mov, fmov, pmov, nop, and fnop.
+   These instructions are implemented as a one or two instruction
+   sequence of other operations.
+
+   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    src1 integer register.
+   2    src2 integer register.
+   d    dest register.
+   c   ctrlreg control register.
+   i    16 bit immediate.
+   I    16 bit immediate, aligned.
+   5    5 bit immediate.
+   l    lbroff 26 bit PC relative immediate.
+   r    sbroff 16 bit PC relative immediate.
+   s   split 16 bit immediate.
+   S   split 16 bit immediate, aligned.
+   e    src1 floating point register.
+   f    src2 floating point register.
+   g    dest floating point register.
+
+*/
+
+/* The order of the opcodes in this 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.  */
+
+static struct i860_opcode i860_opcodes[] =
+{
+
+/* REG-Format Instructions */
+{ "ld.c",      0x30000000, 0xcc000000, "c,d", 0 },     /* ld.c csrc2,idest */
+{ "ld.b",      0x00000000, 0xfc000000, "1(2),d", 0 },  /* ld.b isrc1(isrc2),idest */
+{ "ld.b",      0x04000000, 0xf8000000, "I(2),d", E_ADDR },     /* ld.b #const(isrc2),idest */
+{ "ld.s",      0x10000000, 0xec000001, "1(2),d", 0 },  /* ld.s isrc1(isrc2),idest */
+{ "ld.s",      0x14000001, 0xe8000000, "I(2),d", E_ADDR },     /* ld.s #const(isrc2),idest */
+{ "ld.l",      0x10000001, 0xec000000, "1(2),d", 0 },  /* ld.l isrc1(isrc2),idest */
+{ "ld.l",      0x14000001, 0xe8000000, "I(2),d", E_ADDR },     /* ld.l #const(isrc2),idest */
+
+{ "st.c",      0x38000000, 0xc4000000, "1,c", 0 },     /* st.c isrc1ni,csrc2 */
+{ "st.b",      0x0c000000, 0xf0000000, "1,S(2)", E_ADDR },     /* st.b isrc1ni,#const(isrc2) */
+{ "st.s",      0x1c000000, 0xe0000000, "1,S(2)", E_ADDR },     /* st.s isrc1ni,#const(isrc2) */
+{ "st.l",      0x1c000001, 0xe0000000, "1,S(2)", E_ADDR },     /* st.l isrc1ni,#const(isrc2) */
+
+{ "ixfr",      0x08000000, 0xf4000000, "1,g", 0 },     /* ixfr isrc1ni,fdest */
+
+{ "fld.l",     0x20000002, 0xdc000001, "1(2),g", 0 },  /* fld.l isrc1(isrc2),fdest */
+{ "fld.l",     0x24000002, 0xd8000001, "i(2),g", E_ADDR },     /* fld.l #const(isrc2),fdest */
+{ "fld.l",     0x20000003, 0xdc000000, "1(2)++,g", 0 },        /* fld.l isrc1(isrc2)++,fdest */
+{ "fld.l",     0x24000003, 0xd8000000, "i(2)++,g", E_ADDR },   /* fld.l #const(isrc2)++,fdest */
+{ "fld.d",     0x20000000, 0xdc000007, "1(2),g", 0 },  /* fld.d isrc1(isrc2),fdest */
+{ "fld.d",     0x24000000, 0xd8000007, "i(2),g", E_ADDR },     /* fld.d #const(isrc2),fdest */
+{ "fld.d",     0x20000001, 0xdc000006, "1(2)++,g", 0 },        /* fld.d isrc1(isrc2)++,fdest */
+{ "fld.d",     0x24000001, 0xd8000006, "i(2)++,g", E_ADDR },   /* fld.d #const(isrc2)++,fdest */
+{ "fld.q",     0x20000004, 0xdc000003, "1(2),g", 0 },  /* fld.q isrc1(isrc2),fdest */
+{ "fld.q",     0x24000004, 0xd8000003, "i(2),g", E_ADDR },     /* fld.q #const(isrc2),fdest */
+{ "fld.q",     0x20000005, 0xdc000002, "1(2)++,g", 0 },        /* fld.q isrc1(isrc2)++,fdest */
+{ "fld.q",     0x24000005, 0xd8000002, "i(2)++,g", E_ADDR },   /* fld.q #const(isrc2)++,fdest */
+
+{ "pfld.l",    0x60000000, 0x9c000003, "1(2),g", 0 },  /* pfld.l isrc1(isrc2),fdest */
+{ "pfld.l",    0x64000000, 0x98000003, "i(2),g", E_ADDR },     /* pfld.l #const(isrc2),fdest */
+{ "pfld.l",    0x60000001, 0x9c000002, "1(2)++,g", 0 },        /* pfld.l isrc1(isrc2)++,fdest */
+{ "pfld.l",    0x64000001, 0x98000002, "i(2)++,g", E_ADDR },   /* pfld.l #const(isrc2)++,fdest */
+{ "pfld.d",    0x60000000, 0x9c000007, "1(2),g", 0 },  /* pfld.d isrc1(isrc2),fdest */
+{ "pfld.d",    0x64000000, 0x98000007, "i(2),g", E_ADDR },     /* pfld.d #const(isrc2),fdest */
+{ "pfld.d",    0x60000001, 0x9c000006, "1(2)++,g", 0 },        /* pfld.d isrc1(isrc2)++,fdest */
+{ "pfld.d",    0x64000001, 0x98000006, "i(2)++,g", E_ADDR },   /* pfld.d #const(isrc2)++,fdest */
+
+{ "fst.l",     0x28000002, 0xd4000001, "g,1(2)", 0 },  /* fst.l fdest,isrc1(isrc2) */
+{ "fst.l",     0x2c000002, 0xd0000001, "g,i(2)", E_ADDR },     /* fst.l fdest,#const(isrc2) */
+{ "fst.l",     0x28000003, 0xd4000000, "g,1(2)++", 0 },        /* fst.l fdest,isrc1(isrc2)++ */
+{ "fst.l",     0x2c000003, 0xd0000000, "g,i(2)++", E_ADDR },   /* fst.l fdest,#const(isrc2)++ */
+{ "fst.d",     0x28000000, 0xd4000007, "g,1(2)", 0 },  /* fst.d fdest,isrc1(isrc2) */
+{ "fst.d",     0x2c000000, 0xd0000007, "g,i(2)", E_ADDR },     /* fst.d fdest,#const(isrc2) */
+{ "fst.d",     0x28000001, 0xd4000006, "g,1(2)++", 0 },        /* fst.d fdest,isrc1(isrc2)++ */
+{ "fst.d",     0x2c000001, 0xd0000006, "g,i(2)++", E_ADDR },   /* fst.d fdest,#const(isrc2)++ */
+
+{ "pst.d",     0x3c000000, 0xc0000007, "g,i(2)", E_ADDR },     /* pst.d fdest,#const(isrc2) */
+{ "pst.d",     0x3c000001, 0xc0000006, "g,i(2)++", E_ADDR },   /* pst.d fdest,#const(isrc2)++ */
+
+{ "addu",      0x80000000, 0x7c000000, "1,2,d", 0 },   /* addu isrc1,isrc2,idest */
+{ "addu",      0x84000000, 0x78000000, "i,2,d", E_S32 },       /* addu #const,isrc2,idest */
+{ "adds",      0x90000000, 0x6c000000, "1,2,d", 0 },   /* adds isrc1,isrc2,idest */
+{ "adds",      0x94000000, 0x68000000, "i,2,d", E_S32 },       /* adds #const,isrc2,idest */
+{ "subu",      0x88000000, 0x74000000, "1,2,d", 0 },   /* subu isrc1,isrc2,idest */
+{ "subu",      0x8c000000, 0x70000000, "i,2,d", E_S32 },       /* subu #const,isrc2,idest */
+{ "subs",      0x98000000, 0x64000000, "1,2,d", 0 },   /* subs isrc1,isrc2,idest */
+{ "subs",      0x9c000000, 0x60000000, "i,2,d", E_S32 },       /* subs #const,isrc2,idest */
+
+{ "shl",       0xa0000000, 0x5c000000, "1,2,d", 0 },   /* shl isrc1,isrc2,idest */
+{ "shl",       0xa4000000, 0x58000000, "i,2,d", 0 },   /* shl #const,isrc2,idest */
+{ "shr",       0xa8000000, 0x54000000, "1,2,d", 0 },   /* shr isrc1,isrc2,idest */
+{ "shr",       0xac000000, 0x50000000, "i,2,d", 0 },   /* shr #const,isrc2,idest */
+{ "shrd",      0xb0000000, 0x4c000000, "1,2,d", 0 },   /* shrd isrc1,isrc2,idest */
+{ "shra",      0xb8000000, 0x44000000, "1,2,d", 0 },   /* shra isrc1,isrc2,idest */
+{ "shra",      0xbc000000, 0x40000000, "i,2,d", 0 },   /* shra #const,isrc2,idest */
+
+{ "mov",       0xa0000000, 0x5c00f800, "2,d", 0 },     /* shl r0,isrc2,idest */
+{ "mov",       0x94000000, 0x69e00000, "i,d", E_MOV }, /* adds #const,r0,idest */
+{ "nop",       0xa0000000, 0x5ffff800, "", 0 },        /* shl r0,r0,r0 */
+{ "fnop",      0xb0000000, 0x4ffff800, "", 0 },        /* shrd r0,r0,r0 */
+
+{ "trap",      0x44000000, 0xb8000000, "1,2,d", 0 },   /* trap isrc1ni,isrc2,idest */
+
+{ "flush",     0x34000000, 0xc81f0001, "i(2)", E_ADDR },       /* flush #const(isrc2) */
+{ "flush",     0x34000001, 0xc81f0000, "i(2)++", E_ADDR },     /* flush #const(isrc2)++ */
+
+{ "and",       0xc0000000, 0x3c000000, "1,2,d", 0 },   /* and isrc1,isrc2,idest */
+{ "and",       0xc4000000, 0x38000000, "i,2,d", E_AND },       /* and #const,isrc2,idest */
+{ "andh",      0xc8000000, 0x34000000, "1,2,d", 0 },   /* andh isrc1,isrc2,idest */
+{ "andh",      0xcc000000, 0x30000000, "i,2,d", 0 },   /* andh #const,isrc2,idest */
+{ "andnot",    0xd0000000, 0x2c000000, "1,2,d", 0 },   /* andnot isrc1,isrc2,idest */
+{ "andnot",    0xd4000000, 0x28000000, "i,2,d", E_U32 },       /* andnot #const,isrc2,idest */
+{ "andnoth",   0xd8000000, 0x24000000, "1,2,d", 0 },   /* andnoth isrc1,isrc2,idest */
+{ "andnoth",   0xdc000000, 0x20000000, "i,2,d", 0 },   /* andnoth #const,isrc2,idest */
+{ "or",                0xe0000000, 0x1c000000, "1,2,d", 0 },   /* or isrc1,isrc2,idest */
+{ "or",                0xe4000000, 0x18000000, "i,2,d", E_U32 },       /* or #const,isrc2,idest */
+{ "orh",       0xe8000000, 0x14000000, "1,2,d", 0 },   /* orh isrc1,isrc2,idest */
+{ "orh",       0xec000000, 0x10000000, "i,2,d", 0 },   /* orh #const,isrc2,idest */
+{ "xor",       0xf0000000, 0x0c000000, "1,2,d", 0 },   /* xor isrc1,isrc2,idest */
+{ "xor",       0xf4000000, 0x08000000, "i,2,d", E_U32 },       /* xor #const,isrc2,idest */
+{ "xorh",      0xf8000000, 0x04000000, "1,2,d", 0 },   /* xorh isrc1,isrc2,idest */
+{ "xorh",      0xfc000000, 0x00000000, "i,2,d", 0 },   /* xorh #const,isrc2,idest */
+
+{ "bte",       0x58000000, 0xa4000000, "1,2,s", 0 },   /* bte isrc1s,isrc2,sbroff */
+{ "bte",       0x5c000000, 0xa0000000, "5,2,s", 0 },   /* bte #const5,isrc2,sbroff */
+{ "btne",      0x50000000, 0xac000000, "1,2,s", 0 },   /* btne isrc1s,isrc2,sbroff */
+{ "btne",      0x54000000, 0xa8000000, "5,2,s", 0 },   /* btne #const5,isrc2,sbroff */
+{ "bla",       0xb4000000, 0x48000000, "1,2,s", E_DELAY },     /* bla isrc1s,isrc2,sbroff */
+{ "bri",       0x40000000, 0xbc000000, "1", E_DELAY }, /* bri isrc1ni */
+
+/* Core Escape Instruction Format */
+{ "lock",      0x4c000001, 0xb000001e, "", 0 },        /* lock set BL in dirbase */
+{ "calli",     0x4c000002, 0xb000001d, "1", E_DELAY }, /* calli isrc1ni */
+{ "intovr",    0x4c000004, 0xb000001b, "", 0 },        /* intovr trap on integer overflow */
+{ "unlock",    0x4c000007, 0xb0000018, "", 0 },        /* unlock clear BL in dirbase */
+
+/* CTRL-Format Instructions */
+{ "br",                0x68000000, 0x94000000, "l", E_DELAY }, /* br lbroff */
+{ "call",      0x6c000000, 0x90000000, "l", E_DELAY }, /* call lbroff */
+{ "bc",                0x70000000, 0x8c000000, "l", 0 },       /* bc lbroff */
+{ "bc.t",      0x74000000, 0x88000000, "l", E_DELAY }, /* bc.t lbroff */
+{ "bnc",       0x78000000, 0x84000000, "l", 0 },       /* bnc lbroff */
+{ "bnc.t",     0x7c000000, 0x80000000, "l", E_DELAY }, /* bnc.t lbroff */
+
+/* Floating Point Escape Instruction Format - pfam.p fsrc1,fsrc2,fdest */
+{ "r2p1.ss",   0x48000400, 0xb40003ff, "e,f,g", 0 },
+{ "r2p1.sd",   0x48000480, 0xb400037f, "e,f,g", 0 },
+{ "r2p1.dd",   0x48000580, 0xb400027f, "e,f,g", 0 },
+{ "r2pt.ss",   0x48000401, 0xb40003fe, "e,f,g", 0 },
+{ "r2pt.sd",   0x48000481, 0xb400037e, "e,f,g", 0 },
+{ "r2pt.dd",   0x48000581, 0xb400027e, "e,f,g", 0 },
+{ "r2ap1.ss",  0x48000402, 0xb40003fd, "e,f,g", 0 },
+{ "r2ap1.sd",  0x48000482, 0xb400037d, "e,f,g", 0 },
+{ "r2ap1.dd",  0x48000582, 0xb400027d, "e,f,g", 0 },
+{ "r2apt.ss",  0x48000403, 0xb40003fc, "e,f,g", 0 },
+{ "r2apt.sd",  0x48000483, 0xb400037c, "e,f,g", 0 },
+{ "r2apt.dd",  0x48000583, 0xb400027c, "e,f,g", 0 },
+{ "i2p1.ss",   0x48000404, 0xb40003fb, "e,f,g", 0 },
+{ "i2p1.sd",   0x48000484, 0xb400037b, "e,f,g", 0 },
+{ "i2p1.dd",   0x48000584, 0xb400027b, "e,f,g", 0 },
+{ "i2pt.ss",   0x48000405, 0xb40003fa, "e,f,g", 0 },
+{ "i2pt.sd",   0x48000485, 0xb400037a, "e,f,g", 0 },
+{ "i2pt.dd",   0x48000585, 0xb400027a, "e,f,g", 0 },
+{ "i2ap1.ss",  0x48000406, 0xb40003f9, "e,f,g", 0 },
+{ "i2ap1.sd",  0x48000486, 0xb4000379, "e,f,g", 0 },
+{ "i2ap1.dd",  0x48000586, 0xb4000279, "e,f,g", 0 },
+{ "i2apt.ss",  0x48000407, 0xb40003f8, "e,f,g", 0 },
+{ "i2apt.sd",  0x48000487, 0xb4000378, "e,f,g", 0 },
+{ "i2apt.dd",  0x48000587, 0xb4000278, "e,f,g", 0 },
+{ "rat1p2.ss", 0x48000408, 0xb40003f7, "e,f,g", 0 },
+{ "rat1p2.sd", 0x48000488, 0xb4000377, "e,f,g", 0 },
+{ "rat1p2.dd", 0x48000588, 0xb4000277, "e,f,g", 0 },
+{ "m12apm.ss", 0x48000409, 0xb40003f6, "e,f,g", 0 },
+{ "m12apm.sd", 0x48000489, 0xb4000376, "e,f,g", 0 },
+{ "m12apm.dd", 0x48000589, 0xb4000276, "e,f,g", 0 },
+{ "ra1p2.ss",  0x4800040a, 0xb40003f5, "e,f,g", 0 },
+{ "ra1p2.sd",  0x4800048a, 0xb4000375, "e,f,g", 0 },
+{ "ra1p2.dd",  0x4800058a, 0xb4000275, "e,f,g", 0 },
+{ "m12ttpa.ss",        0x4800040b, 0xb40003f4, "e,f,g", 0 },
+{ "m12ttpa.sd",        0x4800048b, 0xb4000374, "e,f,g", 0 },
+{ "m12ttpa.dd",        0x4800058b, 0xb4000274, "e,f,g", 0 },
+{ "iat1p2.ss", 0x4800040c, 0xb40003f3, "e,f,g", 0 },
+{ "iat1p2.sd", 0x4800048c, 0xb4000373, "e,f,g", 0 },
+{ "iat1p2.dd", 0x4800058c, 0xb4000273, "e,f,g", 0 },
+{ "m12tpm.ss", 0x4800040d, 0xb40003f2, "e,f,g", 0 },
+{ "m12tpm.sd", 0x4800048d, 0xb4000372, "e,f,g", 0 },
+{ "m12tpm.dd", 0x4800058d, 0xb4000272, "e,f,g", 0 },
+{ "ia1p2.ss",  0x4800040e, 0xb40003f1, "e,f,g", 0 },
+{ "ia1p2.sd",  0x4800048e, 0xb4000371, "e,f,g", 0 },
+{ "ia1p2.dd",  0x4800058e, 0xb4000271, "e,f,g", 0 },
+{ "m12tpa.ss", 0x4800040f, 0xb40003f0, "e,f,g", 0 },
+{ "m12tpa.sd", 0x4800048f, 0xb4000370, "e,f,g", 0 },
+{ "m12tpa.dd", 0x4800058f, 0xb4000270, "e,f,g", 0 },
+
+/* Floating Point Escape Instruction Format - pfsm.p fsrc1,fsrc2,fdest */
+{ "r2s1.ss",   0x48000410, 0xb40003ef, "e,f,g", 0 },
+{ "r2s1.sd",   0x48000490, 0xb400036f, "e,f,g", 0 },
+{ "r2s1.dd",   0x48000590, 0xb400026f, "e,f,g", 0 },
+{ "r2st.ss",   0x48000411, 0xb40003ee, "e,f,g", 0 },
+{ "r2st.sd",   0x48000491, 0xb400036e, "e,f,g", 0 },
+{ "r2st.dd",   0x48000591, 0xb400026e, "e,f,g", 0 },
+{ "r2as1.ss",  0x48000412, 0xb40003ed, "e,f,g", 0 },
+{ "r2as1.sd",  0x48000492, 0xb400036d, "e,f,g", 0 },
+{ "r2as1.dd",  0x48000592, 0xb400026d, "e,f,g", 0 },
+{ "r2ast.ss",  0x48000413, 0xb40003ec, "e,f,g", 0 },
+{ "r2ast.sd",  0x48000493, 0xb400036c, "e,f,g", 0 },
+{ "r2ast.dd",  0x48000593, 0xb400026c, "e,f,g", 0 },
+{ "i2s1.ss",   0x48000414, 0xb40003eb, "e,f,g", 0 },
+{ "i2s1.sd",   0x48000494, 0xb400036b, "e,f,g", 0 },
+{ "i2s1.dd",   0x48000594, 0xb400026b, "e,f,g", 0 },
+{ "i2st.ss",   0x48000415, 0xb40003ea, "e,f,g", 0 },
+{ "i2st.sd",   0x48000495, 0xb400036a, "e,f,g", 0 },
+{ "i2st.dd",   0x48000595, 0xb400026a, "e,f,g", 0 },
+{ "i2as1.ss",  0x48000416, 0xb40003e9, "e,f,g", 0 },
+{ "i2as1.sd",  0x48000496, 0xb4000369, "e,f,g", 0 },
+{ "i2as1.dd",  0x48000596, 0xb4000269, "e,f,g", 0 },
+{ "i2ast.ss",  0x48000417, 0xb40003e8, "e,f,g", 0 },
+{ "i2ast.sd",  0x48000497, 0xb4000368, "e,f,g", 0 },
+{ "i2ast.dd",  0x48000597, 0xb4000268, "e,f,g", 0 },
+{ "rat1s2.ss", 0x48000418, 0xb40003e7, "e,f,g", 0 },
+{ "rat1s2.sd", 0x48000498, 0xb4000367, "e,f,g", 0 },
+{ "rat1s2.dd", 0x48000598, 0xb4000267, "e,f,g", 0 },
+{ "m12asm.ss", 0x48000419, 0xb40003e6, "e,f,g", 0 },
+{ "m12asm.sd", 0x48000499, 0xb4000366, "e,f,g", 0 },
+{ "m12asm.dd", 0x48000599, 0xb4000266, "e,f,g", 0 },
+{ "ra1s2.ss",  0x4800041a, 0xb40003e5, "e,f,g", 0 },
+{ "ra1s2.sd",  0x4800049a, 0xb4000365, "e,f,g", 0 },
+{ "ra1s2.dd",  0x4800059a, 0xb4000265, "e,f,g", 0 },
+{ "m12ttsa.ss",        0x4800041b, 0xb40003e4, "e,f,g", 0 },
+{ "m12ttsa.sd",        0x4800049b, 0xb4000364, "e,f,g", 0 },
+{ "m12ttsa.dd",        0x4800059b, 0xb4000264, "e,f,g", 0 },
+{ "iat1s2.ss", 0x4800041c, 0xb40003e3, "e,f,g", 0 },
+{ "iat1s2.sd", 0x4800049c, 0xb4000363, "e,f,g", 0 },
+{ "iat1s2.dd", 0x4800059c, 0xb4000263, "e,f,g", 0 },
+{ "m12tsm.ss", 0x4800041d, 0xb40003e2, "e,f,g", 0 },
+{ "m12tsm.sd", 0x4800049d, 0xb4000362, "e,f,g", 0 },
+{ "m12tsm.dd", 0x4800059d, 0xb4000262, "e,f,g", 0 },
+{ "ia1s2.ss",  0x4800041e, 0xb40003e1, "e,f,g", 0 },
+{ "ia1s2.sd",  0x4800049e, 0xb4000361, "e,f,g", 0 },
+{ "ia1s2.dd",  0x4800059e, 0xb4000261, "e,f,g", 0 },
+{ "m12tsa.ss", 0x4800041f, 0xb40003e0, "e,f,g", 0 },
+{ "m12tsa.sd", 0x4800049f, 0xb4000360, "e,f,g", 0 },
+{ "m12tsa.dd", 0x4800059f, 0xb4000260, "e,f,g", 0 },
+
+/* Floating Point Escape Instruction Format - pfmam.p fsrc1,fsrc2,fdest */
+{ "mr2p1.ss",  0x48000000, 0xb40007ff, "e,f,g", 0 },
+{ "mr2p1.sd",  0x48000080, 0xb400077f, "e,f,g", 0 },
+{ "mr2p1.dd",  0x48000180, 0xb400067f, "e,f,g", 0 },
+{ "mr2pt.ss",  0x48000001, 0xb40007fe, "e,f,g", 0 },
+{ "mr2pt.sd",  0x48000081, 0xb400077e, "e,f,g", 0 },
+{ "mr2pt.dd",  0x48000181, 0xb400067e, "e,f,g", 0 },
+{ "mr2mp1.ss", 0x48000002, 0xb40007fd, "e,f,g", 0 },
+{ "mr2mp1.sd", 0x48000082, 0xb400077d, "e,f,g", 0 },
+{ "mr2mp1.dd", 0x48000182, 0xb400067d, "e,f,g", 0 },
+{ "mr2mpt.ss", 0x48000003, 0xb40007fc, "e,f,g", 0 },
+{ "mr2mpt.sd", 0x48000083, 0xb400077c, "e,f,g", 0 },
+{ "mr2mpt.dd", 0x48000183, 0xb400067c, "e,f,g", 0 },
+{ "mi2p1.ss",  0x48000004, 0xb40007fb, "e,f,g", 0 },
+{ "mi2p1.sd",  0x48000084, 0xb400077b, "e,f,g", 0 },
+{ "mi2p1.dd",  0x48000184, 0xb400067b, "e,f,g", 0 },
+{ "mi2pt.ss",  0x48000005, 0xb40007fa, "e,f,g", 0 },
+{ "mi2pt.sd",  0x48000085, 0xb400077a, "e,f,g", 0 },
+{ "mi2pt.dd",  0x48000185, 0xb400067a, "e,f,g", 0 },
+{ "mi2mp1.ss", 0x48000006, 0xb40007f9, "e,f,g", 0 },
+{ "mi2mp1.sd", 0x48000086, 0xb4000779, "e,f,g", 0 },
+{ "mi2mp1.dd", 0x48000186, 0xb4000679, "e,f,g", 0 },
+{ "mi2mpt.ss", 0x48000007, 0xb40007f8, "e,f,g", 0 },
+{ "mi2mpt.sd", 0x48000087, 0xb4000778, "e,f,g", 0 },
+{ "mi2mpt.dd", 0x48000187, 0xb4000678, "e,f,g", 0 },
+{ "mrmt1p2.ss",        0x48000008, 0xb40007f7, "e,f,g", 0 },
+{ "mrmt1p2.sd",        0x48000088, 0xb4000777, "e,f,g", 0 },
+{ "mrmt1p2.dd",        0x48000188, 0xb4000677, "e,f,g", 0 },
+{ "mm12mpm.ss",        0x48000009, 0xb40007f6, "e,f,g", 0 },
+{ "mm12mpm.sd",        0x48000089, 0xb4000776, "e,f,g", 0 },
+{ "mm12mpm.dd",        0x48000189, 0xb4000676, "e,f,g", 0 },
+{ "mrm1p2.ss", 0x4800000a, 0xb40007f5, "e,f,g", 0 },
+{ "mrm1p2.sd", 0x4800008a, 0xb4000775, "e,f,g", 0 },
+{ "mrm1p2.dd", 0x4800018a, 0xb4000675, "e,f,g", 0 },
+{ "mm12ttpm.ss",0x4800000b, 0xb40007f4, "e,f,g", 0 },
+{ "mm12ttpm.sd",0x4800008b, 0xb4000774, "e,f,g", 0 },
+{ "mm12ttpm.dd",0x4800018b, 0xb4000674, "e,f,g", 0 },
+{ "mimt1p2.ss",        0x4800000c, 0xb40007f3, "e,f,g", 0 },
+{ "mimt1p2.sd",        0x4800008c, 0xb4000773, "e,f,g", 0 },
+{ "mimt1p2.dd",        0x4800018c, 0xb4000673, "e,f,g", 0 },
+{ "mm12tpm.ss",        0x4800000d, 0xb40007f2, "e,f,g", 0 },
+{ "mm12tpm.sd",        0x4800008d, 0xb4000772, "e,f,g", 0 },
+{ "mm12tpm.dd",        0x4800018d, 0xb4000672, "e,f,g", 0 },
+{ "mim1p2.ss", 0x4800000e, 0xb40007f1, "e,f,g", 0 },
+{ "mim1p2.sd", 0x4800008e, 0xb4000771, "e,f,g", 0 },
+{ "mim1p2.dd", 0x4800018e, 0xb4000671, "e,f,g", 0 },
+
+/* Floating Point Escape Instruction Format - pfmsm.p fsrc1,fsrc2,fdest */
+{ "mr2s1.ss",  0x48000010, 0xb40007ef, "e,f,g", 0 },
+{ "mr2s1.sd",  0x48000090, 0xb400076f, "e,f,g", 0 },
+{ "mr2s1.dd",  0x48000190, 0xb400066f, "e,f,g", 0 },
+{ "mr2st.ss",  0x48000011, 0xb40007ee, "e,f,g", 0 },
+{ "mr2st.sd",  0x48000091, 0xb400076e, "e,f,g", 0 },
+{ "mr2st.dd",  0x48000191, 0xb400066e, "e,f,g", 0 },
+{ "mr2ms1.ss", 0x48000012, 0xb40007ed, "e,f,g", 0 },
+{ "mr2ms1.sd", 0x48000092, 0xb400076d, "e,f,g", 0 },
+{ "mr2ms1.dd", 0x48000192, 0xb400066d, "e,f,g", 0 },
+{ "mr2mst.ss", 0x48000013, 0xb40007ec, "e,f,g", 0 },
+{ "mr2mst.sd", 0x48000093, 0xb400076c, "e,f,g", 0 },
+{ "mr2mst.dd", 0x48000193, 0xb400066c, "e,f,g", 0 },
+{ "mi2s1.ss",  0x48000014, 0xb40007eb, "e,f,g", 0 },
+{ "mi2s1.sd",  0x48000094, 0xb400076b, "e,f,g", 0 },
+{ "mi2s1.dd",  0x48000194, 0xb400066b, "e,f,g", 0 },
+{ "mi2st.ss",  0x48000015, 0xb40007ea, "e,f,g", 0 },
+{ "mi2st.sd",  0x48000095, 0xb400076a, "e,f,g", 0 },
+{ "mi2st.dd",  0x48000195, 0xb400066a, "e,f,g", 0 },
+{ "mi2ms1.ss", 0x48000016, 0xb40007e9, "e,f,g", 0 },
+{ "mi2ms1.sd", 0x48000096, 0xb4000769, "e,f,g", 0 },
+{ "mi2ms1.dd", 0x48000196, 0xb4000669, "e,f,g", 0 },
+{ "mi2mst.ss", 0x48000017, 0xb40007e8, "e,f,g", 0 },
+{ "mi2mst.sd", 0x48000097, 0xb4000768, "e,f,g", 0 },
+{ "mi2mst.dd", 0x48000197, 0xb4000668, "e,f,g", 0 },
+{ "mrmt1s2.ss",        0x48000018, 0xb40007e7, "e,f,g", 0 },
+{ "mrmt1s2.sd",        0x48000098, 0xb4000767, "e,f,g", 0 },
+{ "mrmt1s2.dd",        0x48000198, 0xb4000667, "e,f,g", 0 },
+{ "mm12msm.ss",        0x48000019, 0xb40007e6, "e,f,g", 0 },
+{ "mm12msm.sd",        0x48000099, 0xb4000766, "e,f,g", 0 },
+{ "mm12msm.dd",        0x48000199, 0xb4000666, "e,f,g", 0 },
+{ "mrm1s2.ss", 0x4800001a, 0xb40007e5, "e,f,g", 0 },
+{ "mrm1s2.sd", 0x4800009a, 0xb4000765, "e,f,g", 0 },
+{ "mrm1s2.dd", 0x4800019a, 0xb4000665, "e,f,g", 0 },
+{ "mm12ttsm.ss",0x4800001b, 0xb40007e4, "e,f,g", 0 },
+{ "mm12ttsm.sd",0x4800009b, 0xb4000764, "e,f,g", 0 },
+{ "mm12ttsm.dd",0x4800019b, 0xb4000664, "e,f,g", 0 },
+{ "mimt1s2.ss",        0x4800001c, 0xb40007e3, "e,f,g", 0 },
+{ "mimt1s2.sd",        0x4800009c, 0xb4000763, "e,f,g", 0 },
+{ "mimt1s2.dd",        0x4800019c, 0xb4000663, "e,f,g", 0 },
+{ "mm12tsm.ss",        0x4800001d, 0xb40007e2, "e,f,g", 0 },
+{ "mm12tsm.sd",        0x4800009d, 0xb4000762, "e,f,g", 0 },
+{ "mm12tsm.dd",        0x4800019d, 0xb4000662, "e,f,g", 0 },
+{ "mim1s2.ss", 0x4800001e, 0xb40007e1, "e,f,g", 0 },
+{ "mim1s2.sd", 0x4800009e, 0xb4000761, "e,f,g", 0 },
+{ "mim1s2.dd", 0x4800019e, 0xb4000661, "e,f,g", 0 },
+
+
+{ "fmul.ss",   0x48000020, 0xb40007df, "e,f,g", 0 },   /* fmul.p fsrc1,fsrc2,fdest */
+{ "fmul.sd",   0x480000a0, 0xb400075f, "e,f,g", 0 },   /* fmul.p fsrc1,fsrc2,fdest */
+{ "fmul.dd",   0x480001a0, 0xb400065f, "e,f,g", 0 },   /* fmul.p fsrc1,fsrc2,fdest */
+{ "pfmul.ss",  0x48000420, 0xb40003df, "e,f,g", 0 },   /* pfmul.p fsrc1,fsrc2,fdest */
+{ "pfmul.sd",  0x480004a0, 0xb400035f, "e,f,g", 0 },   /* pfmul.p fsrc1,fsrc2,fdest */
+{ "pfmul.dd",  0x480005a0, 0xb400025f, "e,f,g", 0 },   /* pfmul.p fsrc1,fsrc2,fdest */
+{ "pfmul3.dd", 0x480005a4, 0xb400025b, "e,f,g", 0 },   /* pfmul3.p fsrc1,fsrc2,fdest */
+{ "fmlow.dd",  0x480001a1, 0xb400065e, "e,f,g", 0 },   /* fmlow.dd fsrc1,fsrc2,fdest */
+{ "frcp.ss",   0x48000022, 0xb40007dd, "f,g", 0 },     /* frcp.p fsrc2,fdest */
+{ "frcp.sd",   0x480000a2, 0xb400075d, "f,g", 0 },     /* frcp.p fsrc2,fdest */
+{ "frcp.dd",   0x480001a2, 0xb400065d, "f,g", 0 },     /* frcp.p fsrc2,fdest */
+{ "frsqr.ss",  0x48000023, 0xb40007dc, "f,g", 0 },     /* frsqr.p fsrc2,fdest */
+{ "frsqr.sd",  0x480000a3, 0xb400075c, "f,g", 0 },     /* frsqr.p fsrc2,fdest */
+{ "frsqr.dd",  0x480001a3, 0xb400065c, "f,g", 0 },     /* frsqr.p fsrc2,fdest */
+{ "fadd.ss",   0x48000030, 0xb40007cf, "e,f,g", 0 },   /* fadd.p fsrc1,fsrc2,fdest */
+{ "fadd.sd",   0x480000b0, 0xb400074f, "e,f,g", 0 },   /* fadd.p fsrc1,fsrc2,fdest */
+{ "fadd.dd",   0x480001b0, 0xb400064f, "e,f,g", 0 },   /* fadd.p fsrc1,fsrc2,fdest */
+{ "pfadd.ss",  0x48000430, 0xb40003cf, "e,f,g", 0 },   /* pfadd.p fsrc1,fsrc2,fdest */
+{ "pfadd.sd",  0x480004b0, 0xb400034f, "e,f,g", 0 },   /* pfadd.p fsrc1,fsrc2,fdest */
+{ "pfadd.dd",  0x480005b0, 0xb400024f, "e,f,g", 0 },   /* pfadd.p fsrc1,fsrc2,fdest */
+{ "fsub.ss",   0x48000031, 0xb40007ce, "e,f,g", 0 },   /* fsub.p fsrc1,fsrc2,fdest */
+{ "fsub.sd",   0x480000b1, 0xb400074e, "e,f,g", 0 },   /* fsub.p fsrc1,fsrc2,fdest */
+{ "fsub.dd",   0x480001b1, 0xb400064e, "e,f,g", 0 },   /* fsub.p fsrc1,fsrc2,fdest */
+{ "pfsub.ss",  0x48000431, 0xb40003ce, "e,f,g", 0 },   /* pfsub.p fsrc1,fsrc2,fdest */
+{ "pfsub.sd",  0x480004b1, 0xb400034e, "e,f,g", 0 },   /* pfsub.p fsrc1,fsrc2,fdest */
+{ "pfsub.dd",  0x480005b1, 0xb400024e, "e,f,g", 0 },   /* pfsub.p fsrc1,fsrc2,fdest */
+{ "fix.ss",    0x48000032, 0xb40007cd, "e,g", 0 },     /* fix.p fsrc1,fdest */
+{ "fix.sd",    0x480000b2, 0xb400074d, "e,g", 0 },     /* fix.p fsrc1,fdest */
+{ "fix.dd",    0x480001b2, 0xb400064d, "e,g", 0 },     /* fix.p fsrc1,fdest */
+{ "pfix.ss",   0x48000432, 0xb40003cd, "e,g", 0 },     /* pfix.p fsrc1,fdest */
+{ "pfix.sd",   0x480004b2, 0xb400034d, "e,g", 0 },     /* pfix.p fsrc1,fdest */
+{ "pfix.dd",   0x480005b2, 0xb400024d, "e,g", 0 },     /* pfix.p fsrc1,fdest */
+{ "famov.ss",  0x48000033, 0xb40007cc, "e,g", 0 },     /* famov.p fsrc1,fdest */
+{ "famov.ds",  0x48000133, 0xb40006cc, "e,g", 0 },     /* famov.p fsrc1,fdest */
+{ "famov.sd",  0x480000b3, 0xb400074c, "e,g", 0 },     /* famov.p fsrc1,fdest */
+{ "famov.dd",  0x480001b3, 0xb400064c, "e,g", 0 },     /* famov.p fsrc1,fdest */
+{ "pfamov.ss", 0x48000433, 0xb40003cc, "e,g", 0 },     /* pfamov.p fsrc1,fdest */
+{ "pfamov.ds", 0x48000533, 0xb40002cc, "e,g", 0 },     /* pfamov.p fsrc1,fdest */
+{ "pfamov.sd", 0x480004b3, 0xb400034c, "e,g", 0 },     /* pfamov.p fsrc1,fdest */
+{ "pfamov.dd", 0x480005b3, 0xb400024c, "e,g", 0 },     /* pfamov.p fsrc1,fdest */
+/* pfgt has R bit cleared; pfle has R bit set */
+{ "pfgt.ss",   0x48000434, 0xb40003cb, "e,f,g", 0 },   /* pfgt.p fsrc1,fsrc2,fdest */
+{ "pfgt.sd",   0x48000434, 0xb40003cb, "e,f,g", 0 },   /* pfgt.p fsrc1,fsrc2,fdest */
+{ "pfgt.dd",   0x48000534, 0xb40002cb, "e,f,g", 0 },   /* pfgt.p fsrc1,fsrc2,fdest */
+/* pfgt has R bit cleared; pfle has R bit set */
+{ "pfle.ss",   0x480004b4, 0xb400034b, "e,f,g", 0 },   /* pfle.p fsrc1,fsrc2,fdest */
+{ "pfle.sd",   0x480004b4, 0xb400034b, "e,f,g", 0 },   /* pfle.p fsrc1,fsrc2,fdest */
+{ "pfle.dd",   0x480005b4, 0xb400024b, "e,f,g", 0 },   /* pfle.p fsrc1,fsrc2,fdest */
+{ "ftrunc.ss", 0x4800003a, 0xb40007c5, "e,g", 0 },     /* ftrunc.p fsrc1,fdest */
+{ "ftrunc.sd", 0x480000ba, 0xb4000745, "e,g", 0 },     /* ftrunc.p fsrc1,fdest */
+{ "ftrunc.dd", 0x480001ba, 0xb4000645, "e,g", 0 },     /* ftrunc.p fsrc1,fdest */
+{ "pftrunc.ss",        0x4800043a, 0xb40003c5, "e,g", 0 },     /* pftrunc.p fsrc1,fdest */
+{ "pftrunc.sd",        0x480004ba, 0xb4000345, "e,g", 0 },     /* pftrunc.p fsrc1,fdest */
+{ "pftrunc.dd",        0x480005ba, 0xb4000245, "e,g", 0 },     /* pftrunc.p fsrc1,fdest */
+{ "fxfr",      0x48000040, 0xb40007bf, "e,d", 0 },     /* fxfr fsrc1,idest */
+{ "fiadd.ss",  0x48000049, 0xb40007b6, "e,f,g", 0 },   /* fiadd.w fsrc1,fsrc2,fdest */
+{ "fiadd.dd",  0x480001c9, 0xb4000636, "e,f,g", 0 },   /* fiadd.w fsrc1,fsrc2,fdest */
+{ "pfiadd.ss", 0x48000449, 0xb40003b6, "e,f,g", 0 },   /* pfiadd.w fsrc1,fsrc2,fdest */
+{ "pfiadd.dd", 0x480005c9, 0xb4000236, "e,f,g", 0 },   /* pfiadd.w fsrc1,fsrc2,fdest */
+{ "fisub.ss",  0x4800004d, 0xb40007b2, "e,f,g", 0 },   /* fisub.w fsrc1,fsrc2,fdest */
+{ "fisub.dd",  0x480001cd, 0xb4000632, "e,f,g", 0 },   /* fisub.w fsrc1,fsrc2,fdest */
+{ "pfisub.ss", 0x4800044d, 0xb40003b2, "e,f,g", 0 },   /* pfisub.w fsrc1,fsrc2,fdest */
+{ "pfisub.dd", 0x480005cd, 0xb4000232, "e,f,g", 0 },   /* pfisub.w fsrc1,fsrc2,fdest */
+{ "fzchkl",    0x48000057, 0xb40007a8, "e,f,g", 0 },   /* fzchkl fsrc1,fsrc2,fdest */
+{ "pfzchkl",   0x48000457, 0xb40003a8, "e,f,g", 0 },   /* pfzchkl fsrc1,fsrc2,fdest */
+{ "fzchks",    0x4800005f, 0xb40007a0, "e,f,g", 0 },   /* fzchks fsrc1,fsrc2,fdest */
+{ "pfzchks",   0x4800045f, 0xb40003a0, "e,f,g", 0 },   /* pfzchks fsrc1,fsrc2,fdest */
+{ "faddp",     0x48000050, 0xb40007af, "e,f,g", 0 },   /* faddp fsrc1,fsrc2,fdest */
+{ "pfaddp",    0x48000450, 0xb40003af, "e,f,g", 0 },   /* pfaddp fsrc1,fsrc2,fdest */
+{ "faddz",     0x48000051, 0xb40007ae, "e,f,g", 0 },   /* faddz fsrc1,fsrc2,fdest */
+{ "pfaddz",    0x48000451, 0xb40003ae, "e,f,g", 0 },   /* pfaddz fsrc1,fsrc2,fdest */
+{ "form",      0x4800005a, 0xb40007a5, "e,g", 0 },     /* form fsrc1,fdest */
+{ "pform",     0x4800045a, 0xb40003a5, "e,g", 0 },     /* pform fsrc1,fdest */
+
+/* Floating point pseudo-instructions */
+{ "fmov.ss",   0x48000049, 0xb7e007b6, "e,g", 0 },     /* fiadd.ss fsrc1,f0,fdest */
+{ "fmov.dd",   0x480001c9, 0xb7e00636, "e,g", 0 },     /* fiadd.dd fsrc1,f0,fdest */
+{ "fmov.sd",   0x480000b0, 0xb7e0074f, "e,g", 0 },     /* fadd.sd fsrc1,f0,fdest */
+{ "fmov.ds",   0x48000130, 0xb7e006cf, "e,g", 0 },     /* fadd.ds fsrc1,f0,fdest */
+{ "pfmov.ds",  0x48000530, 0xb73002cf, "e,g", 0 },     /* pfadd.ds fsrc1,f0,fdest */
+{ "pfmov.dd",  0x480005c9, 0xb7e00236, "e,g", 0 },     /* pfiadd.dd fsrc1,f0,fdest */
+
+
+};
+
+#define NUMOPCODES ((sizeof i860_opcodes)/(sizeof i860_opcodes[0]))
+
+
diff --git a/include/i960-opcode.h b/include/i960-opcode.h
new file mode 100755 (executable)
index 0000000..6572f4e
--- /dev/null
@@ -0,0 +1,434 @@
+/* Basic 80960 instruction formats.
+ *
+ * The 'COJ' instructions are actually COBR instructions with the 'b' in
+ * the mnemonic replaced by a 'j';  they are ALWAYS "de-optimized" if necessary:
+ * if the displacement will not fit in 13 bits, the assembler will replace them
+ * with the corresponding compare and branch instructions.
+ *
+ * All of the 'MEMn' instructions are the same format; the 'n' in the name
+ * indicates the default index scale factor (the size of the datum operated on).
+ *
+ * The FBRA formats are not actually an instruction format.  They are the
+ * "convenience directives" for branching on floating-point comparisons,
+ * each of which generates 2 instructions (a 'bno' and one other branch).
+ *
+ * The CALLJ format is not actually an instruction format.  It indicates that
+ * the instruction generated (a CTRL-format 'call') should have its relocation
+ * specially flagged for link-time replacement with a 'bal' or 'calls' if
+ * appropriate.
+ */ 
+
+/* $Id$ */
+
+#define CTRL   0
+#define COBR   1
+#define COJ    2
+#define REG    3
+#define MEM1   4
+#define MEM2   5
+#define MEM4   6
+#define MEM8   7
+#define MEM12  8
+#define MEM16  9
+#define FBRA   10
+#define CALLJ  11
+
+/* Masks for the mode bits in REG format instructions */
+#define M1             0x0800
+#define M2             0x1000
+#define M3             0x2000
+
+/* Generate the 12-bit opcode for a REG format instruction by placing the 
+ * high 8 bits in instruction bits 24-31, the low 4 bits in instruction bits
+ * 7-10.
+ */
+
+#define REG_OPC(opc)   ((opc & 0xff0) << 20) | ((opc & 0xf) << 7)
+
+/* Generate a template for a REG format instruction:  place the opcode bits
+ * in the appropriate fields and OR in mode bits for the operands that will not
+ * be used.  I.e.,
+ *             set m1=1, if src1 will not be used
+ *             set m2=1, if src2 will not be used
+ *             set m3=1, if dst  will not be used
+ *
+ * Setting the "unused" mode bits to 1 speeds up instruction execution(!).
+ * The information is also useful to us because some 1-operand REG instructions
+ * use the src1 field, others the dst field; and some 2-operand REG instructions
+ * use src1/src2, others src1/dst.  The set mode bits enable us to distinguish.
+ */
+#define R_0(opc)       ( REG_OPC(opc) | M1 | M2 | M3 ) /* No operands      */
+#define R_1(opc)       ( REG_OPC(opc) | M2 | M3 )      /* 1 operand: src1  */
+#define R_1D(opc)      ( REG_OPC(opc) | M1 | M2 )      /* 1 operand: dst   */
+#define R_2(opc)       ( REG_OPC(opc) | M3 )           /* 2 ops: src1/src2 */
+#define R_2D(opc)      ( REG_OPC(opc) | M2 )           /* 2 ops: src1/dst  */
+#define R_3(opc)       ( REG_OPC(opc) )                /* 3 operands       */
+
+/* DESCRIPTOR BYTES FOR REGISTER OPERANDS
+ *
+ * Interpret names as follows:
+ *     R:   global or local register only
+ *     RS:  global, local, or (if target allows) special-function register only
+ *     RL:  global or local register, or integer literal
+ *     RSL: global, local, or (if target allows) special-function register;
+ *             or integer literal
+ *     F:   global, local, or floating-point register
+ *     FL:  global, local, or floating-point register; or literal (including
+ *             floating point)
+ *
+ * A number appended to a name indicates that registers must be aligned,
+ * as follows:
+ *     2: register number must be multiple of 2
+ *     4: register number must be multiple of 4
+ */
+
+#define SFR    0x10            /* Mask for the "sfr-OK" bit */
+#define LIT    0x08            /* Mask for the "literal-OK" bit */
+#define FP     0x04            /* Mask for "floating-point-OK" bit */
+
+/* This macro ors the bits together.  Note that 'align' is a mask
+ * for the low 0, 1, or 2 bits of the register number, as appropriate.
+ */
+#define OP(align,lit,fp,sfr)   ( align | lit | fp | sfr )
+
+#define R      OP( 0, 0,   0,  0   )
+#define RS     OP( 0, 0,   0,  SFR )
+#define RL     OP( 0, LIT, 0,  0   )
+#define RSL    OP( 0, LIT, 0,  SFR )
+#define F      OP( 0, 0,   FP, 0   )
+#define FL     OP( 0, LIT, FP, 0   )
+#define R2     OP( 1, 0,   0,  0   )
+#define RL2    OP( 1, LIT, 0,  0   )
+#define F2     OP( 1, 0,   FP, 0   )
+#define FL2    OP( 1, LIT, FP, 0   )
+#define R4     OP( 3, 0,   0,  0   )
+#define RL4    OP( 3, LIT, 0,  0   )
+#define F4     OP( 3, 0,   FP, 0   )
+#define FL4    OP( 3, LIT, FP, 0   )
+
+#define M      0x7f    /* Memory operand (MEMA & MEMB format instructions) */
+
+/* Macros to extract info from the register operand descriptor byte 'od'.
+ */
+#define SFR_OK(od)     (od & SFR)      /* TRUE if sfr operand allowed */
+#define LIT_OK(od)     (od & LIT)      /* TRUE if literal operand allowed */
+#define FP_OK(od)      (od & FP)       /* TRUE if floating-point op allowed */
+#define REG_ALIGN(od,n)        ((od & 0x3 & n) == 0)
+                                       /* TRUE if reg #n is properly aligned */
+#define MEMOP(od)      (od == M)       /* TRUE if operand is a memory operand*/
+
+/* Description of a single i80960 instruction */
+struct i960_opcode {
+       long opcode;    /* 32 bits, constant fields filled in, rest zeroed */
+       char *name;     /* Assembler mnemonic                              */
+       short iclass;   /* Class: see #defines below                       */
+       char format;    /* REG, COBR, CTRL, MEMn, COJ, FBRA, or CALLJ      */
+       char num_ops;   /* Number of operands                              */
+       char operand[3];/* Operand descriptors; same order as assembler instr */
+};
+
+/* Classes of 960 intructions:
+ *     - each instruction falls into one class.
+ *     - each target architecture supports one or more classes.
+ *
+ * EACH CONSTANT MUST CONTAIN 1 AND ONLY 1 SET BIT!:  see targ_has_iclass().
+ */
+#define I_BASE 0x01    /* 80960 base instruction set   */
+#define I_CX   0x02    /* 80960Cx instruction          */
+#define I_DEC  0x04    /* Decimal instruction          */
+#define I_FP   0x08    /* Floating point instruction   */
+#define I_KX   0x10    /* 80960Kx instruction          */
+#define I_MIL  0x20    /* Military instruction         */
+#define I_CASIM        0x40    /* CA simulator instruction     */
+
+/******************************************************************************
+ *
+ *             TABLE OF i960 INSTRUCTION DESCRIPTIONS
+ *
+ ******************************************************************************/
+
+const struct i960_opcode i960_opcodes[] = {
+
+       /* if a CTRL instruction has an operand, it's always a displacement */
+
+       { 0x09000000,   "callj",        I_BASE, CALLJ,  1 },/*default=='call'*/
+       { 0x08000000,   "b",            I_BASE, CTRL,   1 },
+       { 0x09000000,   "call",         I_BASE, CTRL,   1 },
+       { 0x0a000000,   "ret",          I_BASE, CTRL,   0 },
+       { 0x0b000000,   "bal",          I_BASE, CTRL,   1 },
+       { 0x10000000,   "bno",          I_BASE, CTRL,   1 },
+       { 0x10000000,   "bf",           I_BASE, CTRL,   1 }, /* same as bno */
+       { 0x10000000,   "bru",          I_BASE, CTRL,   1 }, /* same as bno */
+       { 0x11000000,   "bg",           I_BASE, CTRL,   1 },
+       { 0x11000000,   "brg",          I_BASE, CTRL,   1 }, /* same as bg */
+       { 0x12000000,   "be",           I_BASE, CTRL,   1 },
+       { 0x12000000,   "bre",          I_BASE, CTRL,   1 }, /* same as be */
+       { 0x13000000,   "bge",          I_BASE, CTRL,   1 },
+       { 0x13000000,   "brge",         I_BASE, CTRL,   1 }, /* same as bge */
+       { 0x14000000,   "bl",           I_BASE, CTRL,   1 },
+       { 0x14000000,   "brl",          I_BASE, CTRL,   1 }, /* same as bl */
+       { 0x15000000,   "bne",          I_BASE, CTRL,   1 },
+       { 0x15000000,   "brlg",         I_BASE, CTRL,   1 }, /* same as bne */
+       { 0x16000000,   "ble",          I_BASE, CTRL,   1 },
+       { 0x16000000,   "brle",         I_BASE, CTRL,   1 }, /* same as ble */
+       { 0x17000000,   "bo",           I_BASE, CTRL,   1 },
+       { 0x17000000,   "bt",           I_BASE, CTRL,   1 }, /* same as bo */
+       { 0x17000000,   "bro",          I_BASE, CTRL,   1 }, /* same as bo */
+       { 0x18000000,   "faultno",      I_BASE, CTRL,   0 },
+       { 0x18000000,   "faultf",       I_BASE, CTRL,   0 }, /*same as faultno*/
+       { 0x19000000,   "faultg",       I_BASE, CTRL,   0 },
+       { 0x1a000000,   "faulte",       I_BASE, CTRL,   0 },
+       { 0x1b000000,   "faultge",      I_BASE, CTRL,   0 },
+       { 0x1c000000,   "faultl",       I_BASE, CTRL,   0 },
+       { 0x1d000000,   "faultne",      I_BASE, CTRL,   0 },
+       { 0x1e000000,   "faultle",      I_BASE, CTRL,   0 },
+       { 0x1f000000,   "faulto",       I_BASE, CTRL,   0 },
+       { 0x1f000000,   "faultt",       I_BASE, CTRL,   0 }, /* syn for faulto */
+
+       { 0x01000000,   "syscall",      I_CASIM,CTRL,   0 },
+
+       /* If a COBR (or COJ) has 3 operands, the last one is always a
+        * displacement and does not appear explicitly in the table.
+        */
+
+       { 0x20000000,   "testno",       I_BASE, COBR,   1, R            },
+       { 0x21000000,   "testg",        I_BASE, COBR,   1, R            },
+       { 0x22000000,   "teste",        I_BASE, COBR,   1, R            },
+       { 0x23000000,   "testge",       I_BASE, COBR,   1, R            },
+       { 0x24000000,   "testl",        I_BASE, COBR,   1, R            },
+       { 0x25000000,   "testne",       I_BASE, COBR,   1, R            },
+       { 0x26000000,   "testle",       I_BASE, COBR,   1, R            },
+       { 0x27000000,   "testo",        I_BASE, COBR,   1, R            },
+       { 0x30000000,   "bbc",          I_BASE, COBR,   3, RL, RS       },
+       { 0x31000000,   "cmpobg",       I_BASE, COBR,   3, RL, RS       },
+       { 0x32000000,   "cmpobe",       I_BASE, COBR,   3, RL, RS       },
+       { 0x33000000,   "cmpobge",      I_BASE, COBR,   3, RL, RS       },
+       { 0x34000000,   "cmpobl",       I_BASE, COBR,   3, RL, RS       },
+       { 0x35000000,   "cmpobne",      I_BASE, COBR,   3, RL, RS       },
+       { 0x36000000,   "cmpoble",      I_BASE, COBR,   3, RL, RS       },
+       { 0x37000000,   "bbs",          I_BASE, COBR,   3, RL, RS       },
+       { 0x38000000,   "cmpibno",      I_BASE, COBR,   3, RL, RS       },
+       { 0x39000000,   "cmpibg",       I_BASE, COBR,   3, RL, RS       },
+       { 0x3a000000,   "cmpibe",       I_BASE, COBR,   3, RL, RS       },
+       { 0x3b000000,   "cmpibge",      I_BASE, COBR,   3, RL, RS       },
+       { 0x3c000000,   "cmpibl",       I_BASE, COBR,   3, RL, RS       },
+       { 0x3d000000,   "cmpibne",      I_BASE, COBR,   3, RL, RS       },
+       { 0x3e000000,   "cmpible",      I_BASE, COBR,   3, RL, RS       },
+       { 0x3f000000,   "cmpibo",       I_BASE, COBR,   3, RL, RS       },
+       { 0x31000000,   "cmpojg",       I_BASE, COJ,    3, RL, RS       },
+       { 0x32000000,   "cmpoje",       I_BASE, COJ,    3, RL, RS       },
+       { 0x33000000,   "cmpojge",      I_BASE, COJ,    3, RL, RS       },
+       { 0x34000000,   "cmpojl",       I_BASE, COJ,    3, RL, RS       },
+       { 0x35000000,   "cmpojne",      I_BASE, COJ,    3, RL, RS       },
+       { 0x36000000,   "cmpojle",      I_BASE, COJ,    3, RL, RS       },
+       { 0x38000000,   "cmpijno",      I_BASE, COJ,    3, RL, RS       },
+       { 0x39000000,   "cmpijg",       I_BASE, COJ,    3, RL, RS       },
+       { 0x3a000000,   "cmpije",       I_BASE, COJ,    3, RL, RS       },
+       { 0x3b000000,   "cmpijge",      I_BASE, COJ,    3, RL, RS       },
+       { 0x3c000000,   "cmpijl",       I_BASE, COJ,    3, RL, RS       },
+       { 0x3d000000,   "cmpijne",      I_BASE, COJ,    3, RL, RS       },
+       { 0x3e000000,   "cmpijle",      I_BASE, COJ,    3, RL, RS       },
+       { 0x3f000000,   "cmpijo",       I_BASE, COJ,    3, RL, RS       },
+
+       { 0x80000000,   "ldob",         I_BASE, MEM1,   2, M,  R        },
+       { 0x82000000,   "stob",         I_BASE, MEM1,   2, R , M        },
+       { 0x84000000,   "bx",           I_BASE, MEM1,   1, M            },
+       { 0x85000000,   "balx",         I_BASE, MEM1,   2, M,  R        },
+       { 0x86000000,   "callx",        I_BASE, MEM1,   1, M            },
+       { 0x88000000,   "ldos",         I_BASE, MEM2,   2, M,  R        },
+       { 0x8a000000,   "stos",         I_BASE, MEM2,   2, R , M        },
+       { 0x8c000000,   "lda",          I_BASE, MEM1,   2, M,  R        },
+       { 0x90000000,   "ld",           I_BASE, MEM4,   2, M,  R        },
+       { 0x92000000,   "st",           I_BASE, MEM4,   2, R , M        },
+       { 0x98000000,   "ldl",          I_BASE, MEM8,   2, M,  R2       },
+       { 0x9a000000,   "stl",          I_BASE, MEM8,   2, R2 ,M        },
+       { 0xa0000000,   "ldt",          I_BASE, MEM12,  2, M,  R4       },
+       { 0xa2000000,   "stt",          I_BASE, MEM12,  2, R4 ,M        },
+       { 0xb0000000,   "ldq",          I_BASE, MEM16,  2, M,  R4       },
+       { 0xb2000000,   "stq",          I_BASE, MEM16,  2, R4 ,M        },
+       { 0xc0000000,   "ldib",         I_BASE, MEM1,   2, M,  R        },
+       { 0xc2000000,   "stib",         I_BASE, MEM1,   2, R , M        },
+       { 0xc8000000,   "ldis",         I_BASE, MEM2,   2, M,  R        },
+       { 0xca000000,   "stis",         I_BASE, MEM2,   2, R , M        },
+
+       { R_3(0x580),   "notbit",       I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x581),   "and",          I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x582),   "andnot",       I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x583),   "setbit",       I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x584),   "notand",       I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x586),   "xor",          I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x587),   "or",           I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x588),   "nor",          I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x589),   "xnor",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_2D(0x58a),  "not",          I_BASE, REG,    2, RSL,RS       },
+       { R_3(0x58b),   "ornot",        I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x58c),   "clrbit",       I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x58d),   "notor",        I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x58e),   "nand",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x58f),   "alterbit",     I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x590),   "addo",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x591),   "addi",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x592),   "subo",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x593),   "subi",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x598),   "shro",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x59a),   "shrdi",        I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x59b),   "shri",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x59c),   "shlo",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x59d),   "rotate",       I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x59e),   "shli",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_2(0x5a0),   "cmpo",         I_BASE, REG,    2, RSL,RSL      },
+       { R_2(0x5a1),   "cmpi",         I_BASE, REG,    2, RSL,RSL      },
+       { R_2(0x5a2),   "concmpo",      I_BASE, REG,    2, RSL,RSL      },
+       { R_2(0x5a3),   "concmpi",      I_BASE, REG,    2, RSL,RSL      },
+       { R_3(0x5a4),   "cmpinco",      I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x5a5),   "cmpinci",      I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x5a6),   "cmpdeco",      I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x5a7),   "cmpdeci",      I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_2(0x5ac),   "scanbyte",     I_BASE, REG,    2, RSL,RSL      },
+       { R_2(0x5ae),   "chkbit",       I_BASE, REG,    2, RSL,RSL      },
+       { R_3(0x5b0),   "addc",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x5b2),   "subc",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_2D(0x5cc),  "mov",          I_BASE, REG,    2, RSL,RS       },
+       { R_2D(0x5dc),  "movl",         I_BASE, REG,    2, RL2,R2       },
+       { R_2D(0x5ec),  "movt",         I_BASE, REG,    2, RL4,R4       },
+       { R_2D(0x5fc),  "movq",         I_BASE, REG,    2, RL4,R4       },
+       { R_3(0x610),   "atmod",        I_BASE, REG,    3, RS, RSL,R    },
+       { R_3(0x612),   "atadd",        I_BASE, REG,    3, RS, RSL,RS   },
+       { R_2D(0x640),  "spanbit",      I_BASE, REG,    2, RSL,RS       },
+       { R_2D(0x641),  "scanbit",      I_BASE, REG,    2, RSL,RS       },
+       { R_3(0x645),   "modac",        I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x650),   "modify",       I_BASE, REG,    3, RSL,RSL,R    },
+       { R_3(0x651),   "extract",      I_BASE, REG,    3, RSL,RSL,R    },
+       { R_3(0x654),   "modtc",        I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x655),   "modpc",        I_BASE, REG,    3, RSL,RSL,R    },
+       { R_1(0x660),   "calls",        I_BASE, REG,    1, RSL          },
+       { R_0(0x66b),   "mark",         I_BASE, REG,    0,              },
+       { R_0(0x66c),   "fmark",        I_BASE, REG,    0,              },
+       { R_0(0x66d),   "flushreg",     I_BASE, REG,    0,              },
+       { R_0(0x66f),   "syncf",        I_BASE, REG,    0,              },
+       { R_3(0x670),   "emul",         I_BASE, REG,    3, RSL,RSL,R2   },
+       { R_3(0x671),   "ediv",         I_BASE, REG,    3, RSL,RL2,RS   },
+       { R_2D(0x672),  "cvtadr",       I_CASIM,REG,    2, RL, R2       },
+       { R_3(0x701),   "mulo",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x708),   "remo",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x70b),   "divo",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x741),   "muli",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x748),   "remi",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x749),   "modi",         I_BASE, REG,    3, RSL,RSL,RS   },
+       { R_3(0x74b),   "divi",         I_BASE, REG,    3, RSL,RSL,RS   },
+
+       /* Floating-point instructions */
+
+       { R_2D(0x674),  "cvtir",        I_FP,   REG,    2, RL, F        },
+       { R_2D(0x675),  "cvtilr",       I_FP,   REG,    2, RL, F        },
+       { R_3(0x676),   "scalerl",      I_FP,   REG,    3, RL, FL2,F2   },
+       { R_3(0x677),   "scaler",       I_FP,   REG,    3, RL, FL, F    },
+       { R_3(0x680),   "atanr",        I_FP,   REG,    3, FL, FL, F    },
+       { R_3(0x681),   "logepr",       I_FP,   REG,    3, FL, FL, F    },
+       { R_3(0x682),   "logr",         I_FP,   REG,    3, FL, FL, F    },
+       { R_3(0x683),   "remr",         I_FP,   REG,    3, FL, FL, F    },
+       { R_2(0x684),   "cmpor",        I_FP,   REG,    2, FL, FL       },
+       { R_2(0x685),   "cmpr",         I_FP,   REG,    2, FL, FL       },
+       { R_2D(0x688),  "sqrtr",        I_FP,   REG,    2, FL, F        },
+       { R_2D(0x689),  "expr",         I_FP,   REG,    2, FL, F        },
+       { R_2D(0x68a),  "logbnr",       I_FP,   REG,    2, FL, F        },
+       { R_2D(0x68b),  "roundr",       I_FP,   REG,    2, FL, F        },
+       { R_2D(0x68c),  "sinr",         I_FP,   REG,    2, FL, F        },
+       { R_2D(0x68d),  "cosr",         I_FP,   REG,    2, FL, F        },
+       { R_2D(0x68e),  "tanr",         I_FP,   REG,    2, FL, F        },
+       { R_1(0x68f),   "classr",       I_FP,   REG,    1, FL           },
+       { R_3(0x690),   "atanrl",       I_FP,   REG,    3, FL2,FL2,F2   },
+       { R_3(0x691),   "logeprl",      I_FP,   REG,    3, FL2,FL2,F2   },
+       { R_3(0x692),   "logrl",        I_FP,   REG,    3, FL2,FL2,F2   },
+       { R_3(0x693),   "remrl",        I_FP,   REG,    3, FL2,FL2,F2   },
+       { R_2(0x694),   "cmporl",       I_FP,   REG,    2, FL2,FL2      },
+       { R_2(0x695),   "cmprl",        I_FP,   REG,    2, FL2,FL2      },
+       { R_2D(0x698),  "sqrtrl",       I_FP,   REG,    2, FL2,F2       },
+       { R_2D(0x699),  "exprl",        I_FP,   REG,    2, FL2,F2       },
+       { R_2D(0x69a),  "logbnrl",      I_FP,   REG,    2, FL2,F2       },
+       { R_2D(0x69b),  "roundrl",      I_FP,   REG,    2, FL2,F2       },
+       { R_2D(0x69c),  "sinrl",        I_FP,   REG,    2, FL2,F2       },
+       { R_2D(0x69d),  "cosrl",        I_FP,   REG,    2, FL2,F2       },
+       { R_2D(0x69e),  "tanrl",        I_FP,   REG,    2, FL2,F2       },
+       { R_1(0x69f),   "classrl",      I_FP,   REG,    1, FL2          },
+       { R_2D(0x6c0),  "cvtri",        I_FP,   REG,    2, FL, R        },
+       { R_2D(0x6c1),  "cvtril",       I_FP,   REG,    2, FL, R2       },
+       { R_2D(0x6c2),  "cvtzri",       I_FP,   REG,    2, FL, R        },
+       { R_2D(0x6c3),  "cvtzril",      I_FP,   REG,    2, FL, R2       },
+       { R_2D(0x6c9),  "movr",         I_FP,   REG,    2, FL, F        },
+       { R_2D(0x6d9),  "movrl",        I_FP,   REG,    2, FL2,F2       },
+       { R_2D(0x6e1),  "movre",        I_FP,   REG,    2, FL4,F4       },
+       { R_3(0x6e2),   "cpysre",       I_FP,   REG,    3, FL4,FL4,F4   },
+       { R_3(0x6e3),   "cpyrsre",      I_FP,   REG,    3, FL4,FL4,F4   },
+       { R_3(0x78b),   "divr",         I_FP,   REG,    3, FL, FL, F    },
+       { R_3(0x78c),   "mulr",         I_FP,   REG,    3, FL, FL, F    },
+       { R_3(0x78d),   "subr",         I_FP,   REG,    3, FL, FL, F    },
+       { R_3(0x78f),   "addr",         I_FP,   REG,    3, FL, FL, F    },
+       { R_3(0x79b),   "divrl",        I_FP,   REG,    3, FL2,FL2,F2   },
+       { R_3(0x79c),   "mulrl",        I_FP,   REG,    3, FL2,FL2,F2   },
+       { R_3(0x79d),   "subrl",        I_FP,   REG,    3, FL2,FL2,F2   },
+       { R_3(0x79f),   "addrl",        I_FP,   REG,    3, FL2,FL2,F2   },
+
+       /* These are the floating point branch instructions.  Each actually
+        * generates 2 branch instructions:  the first a CTRL instruction with
+        * the indicated opcode, and the second a 'bno'.
+        */
+
+       { 0x12000000,   "brue",         I_FP,   FBRA,   1       },
+       { 0x11000000,   "brug",         I_FP,   FBRA,   1       },
+       { 0x13000000,   "bruge",        I_FP,   FBRA,   1       },
+       { 0x14000000,   "brul",         I_FP,   FBRA,   1       },
+       { 0x16000000,   "brule",        I_FP,   FBRA,   1       },
+       { 0x15000000,   "brulg",        I_FP,   FBRA,   1       },
+
+
+       /* Decimal instructions */
+
+       { R_3(0x642),   "daddc",        I_DEC,  REG,    3, RSL,RSL,RS   },
+       { R_3(0x643),   "dsubc",        I_DEC,  REG,    3, RSL,RSL,RS   },
+       { R_2D(0x644),  "dmovt",        I_DEC,  REG,    2, RSL,RS       },
+
+
+       /* KX extensions */
+
+       { R_2(0x600),   "synmov",       I_KX,   REG,    2, R,  R        },
+       { R_2(0x601),   "synmovl",      I_KX,   REG,    2, R,  R        },
+       { R_2(0x602),   "synmovq",      I_KX,   REG,    2, R,  R        },
+       { R_2D(0x615),  "synld",        I_KX,   REG,    2, R,  R        },
+
+
+       /* MC extensions */
+
+       { R_3(0x603),   "cmpstr",       I_MIL,  REG,    3, R,  R,  RL   },
+       { R_3(0x604),   "movqstr",      I_MIL,  REG,    3, R,  R,  RL   },
+       { R_3(0x605),   "movstr",       I_MIL,  REG,    3, R,  R,  RL   },
+       { R_2D(0x613),  "inspacc",      I_MIL,  REG,    2, R,  R        },
+       { R_2D(0x614),  "ldphy",        I_MIL,  REG,    2, R,  R        },
+       { R_3(0x617),   "fill",         I_MIL,  REG,    3, R,  RL, RL   },
+       { R_2D(0x646),  "condrec",      I_MIL,  REG,    2, R,  R        },
+       { R_2D(0x656),  "receive",      I_MIL,  REG,    2, R,  R        },
+       { R_3(0x662),   "send",         I_MIL,  REG,    3, R,  RL, R    },
+       { R_1(0x663),   "sendserv",     I_MIL,  REG,    1, R            },
+       { R_1(0x664),   "resumprcs",    I_MIL,  REG,    1, R            },
+       { R_1(0x665),   "schedprcs",    I_MIL,  REG,    1, R            },
+       { R_0(0x666),   "saveprcs",     I_MIL,  REG,    0,              },
+       { R_1(0x668),   "condwait",     I_MIL,  REG,    1, R            },
+       { R_1(0x669),   "wait",         I_MIL,  REG,    1, R            },
+       { R_1(0x66a),   "signal",       I_MIL,  REG,    1, R            },
+       { R_1D(0x673),  "ldtime",       I_MIL,  REG,    1, R2           },
+
+
+       /* CX extensions */
+
+       { R_3(0x5d8),   "eshro",        I_CX,   REG,    3, RSL,RSL,RS   },
+       { R_3(0x630),   "sdma",         I_CX,   REG,    3, RSL,RSL,RL   },
+       { R_3(0x631),   "udma",         I_CX,   REG,    0               },
+       { R_3(0x659),   "sysctl",       I_CX,   REG,    3, RSL,RSL,RL   },
+
+
+       /* END OF TABLE */
+
+       { 0,            NULL,           0,      0 }
+};
+
+ /* end of i960-opcode.h */
diff --git a/include/m68k-opcode.h b/include/m68k-opcode.h
new file mode 100755 (executable)
index 0000000..24dfb5b
--- /dev/null
@@ -0,0 +1,1717 @@
+/* Opcode table for m68000/m68020 and m68881.
+   Copyright (C) 1989, Free Software Foundation.
+
+This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler.
+
+Both GDB and GAS are free software; you can redistribute and/or modify
+it 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 and GAS are 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 GDB or GAS; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   
+/*
+$Id$
+$Log$
+Revision 1.1  1991/05/19 00:19:41  rich
+Initial revision
+
+ * Revision 1.1.1.1  1991/03/21  21:26:44  gumby
+ * Back from Intel with Steve
+ *
+ * Revision 1.1  1991/03/21  21:26:43  gumby
+ * Initial revision
+ *
+ * Revision 1.1  1991/03/13  00:33:57  chrisb
+ * Initial revision
+ *
+ * Revision 1.1  1991/02/22  16:48:06  sac
+ * Initial revision
+ *
+*/
+struct m68k_opcode
+{
+  char *name;
+  unsigned long opcode;
+  unsigned long  match;
+  char *args;
+};
+
+/* We store four bytes of opcode for all opcodes because that
+   is the most any of them need.  The actual length of an instruction
+   is always at least 2 bytes, and is as much longer as necessary to
+   hold the operands it has.
+
+   The match component is a mask saying which bits must match
+   particular opcode in order for an instruction to be an instance
+   of that opcode.
+
+   The args component is a string containing two characters
+   for each operand of the instruction.  The first specifies
+   the kind of operand; the second, the place it is stored.  */
+
+/* Kinds of operands:
+   D  data register only.  Stored as 3 bits.
+   A  address register only.  Stored as 3 bits.
+   R  either kind of register.  Stored as 4 bits.
+   F  floating point coprocessor register only.   Stored as 3 bits.
+   O  an offset (or width): immediate data 0-31 or data register.
+      Stored as 6 bits in special format for BF... insns.
+   +  autoincrement only.  Stored as 3 bits (number of the address register).
+   -  autodecrement only.  Stored as 3 bits (number of the address register).
+   Q  quick immediate data.  Stored as 3 bits.
+      This matches an immediate operand only when value is in range 1 .. 8.
+   M  moveq immediate data.  Stored as 8 bits.
+      This matches an immediate operand only when value is in range -128..127
+   T  trap vector immediate data.  Stored as 4 bits.
+
+   k  K-factor for fmove.p instruction.   Stored as a 7-bit constant or
+      a three bit register offset, depending on the field type.
+
+   #  immediate data.  Stored in special places (b, w or l)
+      which say how many bits to store.
+   ^  immediate data for floating point instructions.   Special places
+      are offset by 2 bytes from '#'...
+   B  pc-relative address, converted to an offset
+      that is treated as immediate data.
+   d  displacement and register.  Stores the register as 3 bits
+      and stores the displacement in the entire second word.
+
+   C  the CCR.  No need to store it; this is just for filtering validity.
+   S  the SR.  No need to store, just as with CCR.
+   U  the USP.  No need to store, just as with CCR.
+
+   I  Coprocessor ID.   Not printed if 1.   The Coprocessor ID is always
+      extracted from the 'd' field of word one, which means that an extended
+      coprocessor opcode can be skipped using the 'i' place, if needed.
+
+   s  System Control register for the floating point coprocessor.
+   S  List of system control registers for floating point coprocessor.
+
+   J  Misc register for movec instruction, stored in 'j' format.
+       Possible values:
+       000     SFC     Source Function Code reg
+       001     DFC     Data Function Code reg
+       002     CACR    Cache Control Register
+       800     USP     User Stack Pointer
+       801     VBR     Vector Base reg
+       802     CAAR    Cache Address Register
+       803     MSP     Master Stack Pointer
+       804     ISP     Interrupt Stack Pointer
+
+    L  Register list of the type d0-d7/a0-a7 etc.
+       (New!  Improved!  Can also hold fp0-fp7, as well!)
+       The assembler tries to see if the registers match the insn by
+       looking at where the insn wants them stored.
+
+    l  Register list like L, but with all the bits reversed.
+       Used for going the other way. . .
+
+ They are all stored as 6 bits using an address mode and a register number;
+ they differ in which addressing modes they match.
+
+   *  all                                      (modes 0-6,7.*)
+   ~  alterable memory                         (modes 2-6,7.0,7.1)(not 0,1,7.~)
+   %  alterable                                        (modes 0-6,7.0,7.1)(not 7.~)
+   ;  data                                     (modes 0,2-6,7.*)(not 1)
+   @  data, but not immediate                  (modes 0,2-6,7.? ? ?)(not 1,7.?)  This may really be ;, the 68020 book says it is
+   !  control                                  (modes 2,5,6,7.*-)(not 0,1,3,4,7.4)
+   &  alterable control                                (modes 2,5,6,7.0,7.1)(not 0,1,7.? ? ?)
+   $  alterable data                           (modes 0,2-6,7.0,7.1)(not 1,7.~)
+   ?  alterable control, or data register      (modes 0,2,5,6,7.0,7.1)(not 1,3,4,7.~)
+   /  control, or data register                        (modes 0,2,5,6,7.0,7.1,7.2,7.3)(not 1,3,4,7.4)
+*/
+
+/* JF: for the 68851 */
+/*
+   I didn't use much imagination in choosing the 
+   following codes, so many of them aren't very
+   mnemonic. -rab
+
+   P  pmmu register
+       Possible values:
+       000     TC      Translation Control reg
+       100     CAL     Current Access Level
+       101     VAL     Validate Access Level
+       110     SCC     Stack Change Control
+       111     AC      Access Control
+
+   W  wide pmmu registers
+       Possible values:
+       001     DRP     Dma Root Pointer
+       010     SRP     Supervisor Root Pointer
+       011     CRP     Cpu Root Pointer
+
+   f   function code register
+       0       SFC
+       1       DFC
+
+   V   VAL register only
+
+   X   BADx, BACx
+       100     BAD     Breakpoint Acknowledge Data
+       101     BAC     Breakpoint Acknowledge Control
+
+   Y   PSR
+   Z   PCSR
+
+   |   memory          (modes 2-6, 7.*)
+
+*/
+
+/* Places to put an operand, for non-general operands:
+   s  source, low bits of first word.
+   d  dest, shifted 9 in first word
+   1  second word, shifted 12
+   2  second word, shifted 6
+   3  second word, shifted 0
+   4  third word, shifted 12
+   5  third word, shifted 6
+   6  third word, shifted 0
+   7  second word, shifted 7
+   8  second word, shifted 10
+   D  store in both place 1 and place 3; for divul and divsl.
+   b  second word, low byte
+   w  second word (entire)
+   l  second and third word (entire)
+   g  branch offset for bra and similar instructions.
+      The place to store depends on the magnitude of offset.
+   t  store in both place 7 and place 8; for floating point operations
+   c  branch offset for cpBcc operations.
+      The place to store is word two if bit six of word one is zero,
+      and words two and three if bit six of word one is one.
+   i  Increment by two, to skip over coprocessor extended operands.   Only
+      works with the 'I' format.
+   k  Dynamic K-factor field.   Bits 6-4 of word 2, used as a register number.
+      Also used for dynamic fmovem instruction.
+   C  floating point coprocessor constant - 7 bits.  Also used for static
+      K-factors...
+   j  Movec register #, stored in 12 low bits of second word.
+
+ Places to put operand, for general operands:
+   d  destination, shifted 6 bits in first word
+   b  source, at low bit of first word, and immediate uses one byte
+   w  source, at low bit of first word, and immediate uses two bytes
+   l  source, at low bit of first word, and immediate uses four bytes
+   s  source, at low bit of first word.
+      Used sometimes in contexts where immediate is not allowed anyway.
+   f  single precision float, low bit of 1st word, immediate uses 4 bytes
+   F  double precision float, low bit of 1st word, immediate uses 8 bytes
+   x  extended precision float, low bit of 1st word, immediate uses 12 bytes
+   p  packed float, low bit of 1st word, immediate uses 12 bytes
+*/
+
+#define one(x) ((x) << 16)
+#define two(x, y) (((x) << 16) + y)
+
+/*
+       *** DANGER WILL ROBINSON ***
+
+   The assembler requires that all instances of the same mnemonic must be
+   consecutive.  If they aren't, the assembler will bomb at runtime
+ */
+struct m68k_opcode m68k_opcodes[] =
+{
+{"abcd",       one(0140400),           one(0170770),           "DsDd"},
+{"abcd",       one(0140410),           one(0170770),           "-s-d"},
+
+               /* Add instructions */
+{"addal",      one(0150700),           one(0170700),           "*lAd"},
+{"addaw",      one(0150300),           one(0170700),           "*wAd"},
+{"addib",      one(0003000),           one(0177700),           "#b$b"},
+{"addil",      one(0003200),           one(0177700),           "#l$l"},
+{"addiw",      one(0003100),           one(0177700),           "#w$w"},
+{"addqb",      one(0050000),           one(0170700),           "Qd$b"},
+{"addql",      one(0050200),           one(0170700),           "Qd%l"},
+{"addqw",      one(0050100),           one(0170700),           "Qd%w"},
+
+{"addb",       one(0050000),           one(0170700),           "Qd$b"},        /* addq written as add */
+{"addb",       one(0003000),           one(0177700),           "#b$b"},        /* addi written as add */
+{"addb",       one(0150000),           one(0170700),           ";bDd"},        /* addb <ea>,   Dd */
+{"addb",       one(0150400),           one(0170700),           "Dd~b"},        /* addb Dd,     <ea> */
+
+{"addw",       one(0050100),           one(0170700),           "Qd%w"},        /* addq written as add */
+{"addw",       one(0003100),           one(0177700),           "#w$w"},        /* addi written as add */
+{"addw",       one(0150300),           one(0170700),           "*wAd"},        /* adda written as add */
+{"addw",       one(0150100),           one(0170700),           "*wDd"},        /* addw <ea>,   Dd */
+{"addw",       one(0150500),           one(0170700),           "Dd~w"},        /* addw Dd,     <ea> */
+
+{"addl",       one(0050200),           one(0170700),           "Qd%l"},        /* addq written as add */
+{"addl",       one(0003200),           one(0177700),           "#l$l"},        /* addi written as add */
+{"addl",       one(0150700),           one(0170700),           "*lAd"},        /* adda written as add */
+{"addl",       one(0150200),           one(0170700),           "*lDd"},        /* addl <ea>,   Dd */
+{"addl",       one(0150600),           one(0170700),           "Dd~l"},        /* addl Dd,     <ea> */
+
+{"addxb",      one(0150400),           one(0170770),           "DsDd"},
+{"addxb",      one(0150410),           one(0170770),           "-s-d"},
+{"addxl",      one(0150600),           one(0170770),           "DsDd"},
+{"addxl",      one(0150610),           one(0170770),           "-s-d"},
+{"addxw",      one(0150500),           one(0170770),           "DsDd"},
+{"addxw",      one(0150510),           one(0170770),           "-s-d"},
+
+{"andib",      one(0001000),           one(0177700),           "#b$b"},
+{"andib",      one(0001074),           one(0177777),           "#bCb"},        /* andi to ccr */
+{"andiw",      one(0001100),           one(0177700),           "#w$w"},
+{"andiw",      one(0001174),           one(0177777),           "#wSw"},        /* andi to sr */
+{"andil",      one(0001200),           one(0177700),           "#l$l"},
+
+{"andb",       one(0001000),           one(0177700),           "#b$b"},        /* andi written as or */
+{"andb",       one(0001074),           one(0177777),           "#bCb"},        /* andi to ccr */
+{"andb",       one(0140000),           one(0170700),           ";bDd"},        /* memory to register */
+{"andb",       one(0140400),           one(0170700),           "Dd~b"},        /* register to memory */
+{"andw",       one(0001100),           one(0177700),           "#w$w"},        /* andi written as or */
+{"andw",       one(0001174),           one(0177777),           "#wSw"},        /* andi to sr */
+{"andw",       one(0140100),           one(0170700),           ";wDd"},        /* memory to register */
+{"andw",       one(0140500),           one(0170700),           "Dd~w"},        /* register to memory */
+{"andl",       one(0001200),           one(0177700),           "#l$l"},        /* andi written as or */
+{"andl",       one(0140200),           one(0170700),           ";lDd"},        /* memory to register */
+{"andl",       one(0140600),           one(0170700),           "Dd~l"},        /* register to memory */
+
+{"aslb",       one(0160400),           one(0170770),           "QdDs"},
+{"aslb",       one(0160440),           one(0170770),           "DdDs"},
+{"asll",       one(0160600),           one(0170770),           "QdDs"},
+{"asll",       one(0160640),           one(0170770),           "DdDs"},
+{"aslw",       one(0160500),           one(0170770),           "QdDs"},
+{"aslw",       one(0160540),           one(0170770),           "DdDs"},
+{"aslw",       one(0160700),           one(0177700),           "~s"},  /* Shift memory */
+{"asrb",       one(0160000),           one(0170770),           "QdDs"},
+{"asrb",       one(0160040),           one(0170770),           "DdDs"},
+{"asrl",       one(0160200),           one(0170770),           "QdDs"},
+{"asrl",       one(0160240),           one(0170770),           "DdDs"},
+{"asrw",       one(0160100),           one(0170770),           "QdDs"},
+{"asrw",       one(0160140),           one(0170770),           "DdDs"},
+{"asrw",       one(0160300),           one(0177700),           "~s"},  /* Shift memory */
+
+{"bhi",                one(0061000),           one(0177400),           "Bg"},
+{"bls",                one(0061400),           one(0177400),           "Bg"},
+{"bcc",                one(0062000),           one(0177400),           "Bg"},
+{"bcs",                one(0062400),           one(0177400),           "Bg"},
+{"bne",                one(0063000),           one(0177400),           "Bg"},
+{"beq",                one(0063400),           one(0177400),           "Bg"},
+{"bvc",                one(0064000),           one(0177400),           "Bg"},
+{"bvs",                one(0064400),           one(0177400),           "Bg"},
+{"bpl",                one(0065000),           one(0177400),           "Bg"},
+{"bmi",                one(0065400),           one(0177400),           "Bg"},
+{"bge",                one(0066000),           one(0177400),           "Bg"},
+{"blt",                one(0066400),           one(0177400),           "Bg"},
+{"bgt",                one(0067000),           one(0177400),           "Bg"},
+{"ble",                one(0067400),           one(0177400),           "Bg"},
+
+{"bchg",       one(0000500),           one(0170700),           "Dd$s"},
+{"bchg",       one(0004100),           one(0177700),           "#b$s"},
+{"bclr",       one(0000600),           one(0170700),           "Dd$s"},
+{"bclr",       one(0004200),           one(0177700),           "#b$s"},
+{"bfchg",      two(0165300, 0),        two(0177700, 0170000),  "?sO2O3"},
+{"bfclr",      two(0166300, 0),        two(0177700, 0170000),  "?sO2O3"},
+{"bfexts",     two(0165700, 0),        two(0177700, 0100000),  "/sO2O3D1"},
+{"bfextu",     two(0164700, 0),        two(0177700, 0100000),  "/sO2O3D1"},
+{"bfffo",      two(0166700, 0),        two(0177700, 0100000),  "/sO2O3D1"},
+{"bfins",      two(0167700, 0),        two(0177700, 0100000),  "D1?sO2O3"},
+{"bfset",      two(0167300, 0),        two(0177700, 0170000),  "?sO2O3"},
+{"bftst",      two(0164300, 0),        two(0177700, 0170000),  "/sO2O3"},
+{"bset",       one(0000700),           one(0170700),           "Dd$s"},
+{"bset",       one(0004300),           one(0177700),           "#b$s"},
+{"btst",       one(0000400),           one(0170700),           "Dd@s"},
+{"btst",       one(0004000),           one(0177700),           "#b@s"},
+
+{"bkpt",       one(0044110),           one(0177770),           "Qs"},
+{"bra",                one(0060000),           one(0177400),           "Bg"},
+{"bras",       one(0060000),           one(0177400),           "Bw"},
+{"bsr",                one(0060400),           one(0177400),           "Bg"},
+{"bsrs",       one(0060400),           one(0177400),           "Bw"},
+
+{"callm",      one(0003300),           one(0177700),           "#b!s"},
+{"cas2l",      two(0007374, 0),        two(0177777, 0107070),  "D3D6D2D5R1R4"}, /* JF FOO this is really a 3 word ins */
+{"cas2w",      two(0006374, 0),        two(0177777, 0107070),  "D3D6D2D5R1R4"}, /* JF ditto */
+{"casb",       two(0005300, 0),        two(0177700, 0177070),  "D3D2~s"},
+{"casl",       two(0007300, 0),        two(0177700, 0177070),  "D3D2~s"},
+{"casw",       two(0006300, 0),        two(0177700, 0177070),  "D3D2~s"},
+
+/*  {"chk",    one(0040600),           one(0170700),           ";wDd"}, JF FOO this looks wrong */
+{"chk2b",      two(0000300, 0004000),  two(0177700, 07777),    "!sR1"},
+{"chk2l",      two(0002300, 0004000),  two(0177700, 07777),    "!sR1"},
+{"chk2w",      two(0001300, 0004000),  two(0177700, 07777),    "!sR1"},
+{"chkl",       one(0040400),           one(0170700),           ";lDd"},
+{"chkw",       one(0040600),           one(0170700),           ";wDd"},
+{"clrb",       one(0041000),           one(0177700),           "$s"},
+{"clrl",       one(0041200),           one(0177700),           "$s"},
+{"clrw",       one(0041100),           one(0177700),           "$s"},
+
+{"cmp2b",      two(0000300, 0),        two(0177700, 07777),    "!sR1"},
+{"cmp2l",      two(0002300, 0),        two(0177700, 07777),    "!sR1"},
+{"cmp2w",      two(0001300, 0),        two(0177700, 07777),    "!sR1"},
+{"cmpal",      one(0130700),           one(0170700),           "*lAd"},
+{"cmpaw",      one(0130300),           one(0170700),           "*wAd"},
+{"cmpib",      one(0006000),           one(0177700),           "#b;b"},
+{"cmpil",      one(0006200),           one(0177700),           "#l;l"},
+{"cmpiw",      one(0006100),           one(0177700),           "#w;w"},
+{"cmpb",       one(0006000),           one(0177700),           "#b;b"},        /* cmpi written as cmp */
+{"cmpb",       one(0130000),           one(0170700),           ";bDd"},
+{"cmpw",       one(0006100),           one(0177700),           "#w;w"},
+{"cmpw",       one(0130100),           one(0170700),           "*wDd"},
+{"cmpw",       one(0130300),           one(0170700),           "*wAd"},        /* cmpa written as cmp */
+{"cmpl",       one(0006200),           one(0177700),           "#l;l"},
+{"cmpl",       one(0130200),           one(0170700),           "*lDd"},
+{"cmpl",       one(0130700),           one(0170700),           "*lAd"},
+{"cmpmb",      one(0130410),           one(0170770),           "+s+d"},
+{"cmpml",      one(0130610),           one(0170770),           "+s+d"},
+{"cmpmw",      one(0130510),           one(0170770),           "+s+d"},
+
+{"dbcc",       one(0052310),           one(0177770),           "DsBw"},
+{"dbcs",       one(0052710),           one(0177770),           "DsBw"},
+{"dbeq",       one(0053710),           one(0177770),           "DsBw"},
+{"dbf",                one(0050710),           one(0177770),           "DsBw"},
+{"dbge",       one(0056310),           one(0177770),           "DsBw"},
+{"dbgt",       one(0057310),           one(0177770),           "DsBw"},
+{"dbhi",       one(0051310),           one(0177770),           "DsBw"},
+{"dble",       one(0057710),           one(0177770),           "DsBw"},
+{"dbls",       one(0051710),           one(0177770),           "DsBw"},
+{"dblt",       one(0056710),           one(0177770),           "DsBw"},
+{"dbmi",       one(0055710),           one(0177770),           "DsBw"},
+{"dbne",       one(0053310),           one(0177770),           "DsBw"},
+{"dbpl",       one(0055310),           one(0177770),           "DsBw"},
+{"dbra",       one(0050710),           one(0177770),           "DsBw"},
+{"dbt",                one(0050310),           one(0177770),           "DsBw"},
+{"dbvc",       one(0054310),           one(0177770),           "DsBw"},
+{"dbvs",       one(0054710),           one(0177770),           "DsBw"},
+
+{"divsl",      two(0046100, 0006000),  two(0177700, 0107770),  ";lD3D1"},
+{"divsl",      two(0046100, 0004000),  two(0177700, 0107770),  ";lDD"},
+{"divsll",     two(0046100, 0004000),  two(0177700, 0107770),  ";lD3D1"},
+{"divsw",      one(0100700),           one(0170700),           ";wDd"},
+{"divs",       one(0100700),           one(0170700),           ";wDd"},
+{"divul",      two(0046100, 0002000),  two(0177700, 0107770),  ";lD3D1"},
+{"divul",      two(0046100, 0000000),  two(0177700, 0107770),  ";lDD"},
+{"divull",     two(0046100, 0000000),  two(0177700, 0107770),  ";lD3D1"},
+{"divuw",      one(0100300),           one(0170700),           ";wDd"},
+{"divu",       one(0100300),           one(0170700),           ";wDd"},
+{"eorb",       one(0005000),           one(0177700),           "#b$s"},        /* eori written as or */
+{"eorb",       one(0005074),           one(0177777),           "#bCs"},        /* eori to ccr */
+{"eorb",       one(0130400),           one(0170700),           "Dd$s"},        /* register to memory */
+{"eorib",      one(0005000),           one(0177700),           "#b$s"},
+{"eorib",      one(0005074),           one(0177777),           "#bCs"},        /* eori to ccr */
+{"eoril",      one(0005200),           one(0177700),           "#l$s"},
+{"eoriw",      one(0005100),           one(0177700),           "#w$s"},
+{"eoriw",      one(0005174),           one(0177777),           "#wSs"},        /* eori to sr */
+{"eorl",       one(0005200),           one(0177700),           "#l$s"},
+{"eorl",       one(0130600),           one(0170700),           "Dd$s"},
+{"eorw",       one(0005100),           one(0177700),           "#w$s"},
+{"eorw",       one(0005174),           one(0177777),           "#wSs"},        /* eori to sr */
+{"eorw",       one(0130500),           one(0170700),           "Dd$s"},
+
+{"exg",                one(0140500),           one(0170770),           "DdDs"},
+{"exg",                one(0140510),           one(0170770),           "AdAs"},
+{"exg",                one(0140610),           one(0170770),           "DdAs"},
+{"exg",                one(0140610),           one(0170770),           "AsDd"},
+
+{"extw",       one(0044200),           one(0177770),           "Ds"},
+{"extl",       one(0044300),           one(0177770),           "Ds"},
+{"extbl",      one(0044700),           one(0177770),           "Ds"},
+{"extb.l",     one(0044700),           one(0177770),           "Ds"},  /* Not sure we should support this one*/
+
+{"illegal",    one(0045374),           one(0177777),           ""},
+{"jmp",                one(0047300),           one(0177700),           "!s"},
+{"jsr",                one(0047200),           one(0177700),           "!s"},
+{"lea",                one(0040700),           one(0170700),           "!sAd"},
+{"linkw",      one(0047120),           one(0177770),           "As#w"},
+{"linkl",      one(0044010),           one(0177770),           "As#l"},
+{"link",       one(0047120),           one(0177770),           "As#w"},
+{"link",       one(0044010),           one(0177770),           "As#l"},
+
+{"lslb",       one(0160410),           one(0170770),           "QdDs"},        /* lsrb #Q,     Ds */
+{"lslb",       one(0160450),           one(0170770),           "DdDs"},        /* lsrb Dd,     Ds */
+{"lslw",       one(0160510),           one(0170770),           "QdDs"},        /* lsrb #Q,     Ds */
+{"lslw",       one(0160550),           one(0170770),           "DdDs"},        /* lsrb Dd,     Ds */
+{"lslw",       one(0161700),           one(0177700),           "~s"},  /* Shift memory */
+{"lsll",       one(0160610),           one(0170770),           "QdDs"},        /* lsrb #Q,     Ds */
+{"lsll",       one(0160650),           one(0170770),           "DdDs"},        /* lsrb Dd,     Ds */
+
+{"lsrb",       one(0160010),           one(0170770),           "QdDs"} /* lsrb #Q,     Ds */,
+{"lsrb",       one(0160050),           one(0170770),           "DdDs"},        /* lsrb Dd,     Ds */
+{"lsrl",       one(0160210),           one(0170770),           "QdDs"},        /* lsrb #Q,     Ds */
+{"lsrl",       one(0160250),           one(0170770),           "DdDs"},        /* lsrb #Q,     Ds */
+{"lsrw",       one(0160110),           one(0170770),           "QdDs"},        /* lsrb #Q,     Ds */
+{"lsrw",       one(0160150),           one(0170770),           "DdDs"},        /* lsrb #Q,     Ds */
+{"lsrw",       one(0161300),           one(0177700),           "~s"},  /* Shift memory */
+
+{"moveal",     one(0020100),           one(0170700),           "*lAd"},
+{"moveaw",     one(0030100),           one(0170700),           "*wAd"},
+{"moveb",      one(0010000),           one(0170000),           ";b$d"},        /* move */
+{"movel",      one(0070000),           one(0170400),           "MsDd"},        /* moveq written as move */
+{"movel",      one(0020000),           one(0170000),           "*l$d"},
+{"movel",      one(0020100),           one(0170700),           "*lAd"},
+{"movel",      one(0047140),           one(0177770),           "AsUd"},        /* move to USP */
+{"movel",      one(0047150),           one(0177770),           "UdAs"},        /* move from USP */
+
+{"movec",      one(0047173),           one(0177777),           "R1Jj"},
+{"movec",      one(0047173),           one(0177777),           "R1#j"},
+{"movec",      one(0047172),           one(0177777),           "JjR1"},
+{"movec",      one(0047172),           one(0177777),           "#jR1"},
+
+/* JF added these next four for the assembler */
+{"moveml",     one(0044300),           one(0177700),           "Lw&s"},        /* movem reg to mem. */
+{"moveml",     one(0044340),           one(0177770),           "lw-s"},        /* movem reg to autodecrement. */
+{"moveml",     one(0046300),           one(0177700),           "!sLw"},        /* movem mem to reg. */
+{"moveml",     one(0046330),           one(0177770),           "+sLw"},        /* movem autoinc to reg. */
+
+{"moveml",     one(0044300),           one(0177700),           "#w&s"},        /* movem reg to mem. */
+{"moveml",     one(0044340),           one(0177770),           "#w-s"},        /* movem reg to autodecrement. */
+{"moveml",     one(0046300),           one(0177700),           "!s#w"},        /* movem mem to reg. */
+{"moveml",     one(0046330),           one(0177770),           "+s#w"},        /* movem autoinc to reg. */
+
+/* JF added these next four for the assembler */
+{"movemw",     one(0044200),           one(0177700),           "Lw&s"},        /* movem reg to mem. */
+{"movemw",     one(0044240),           one(0177770),           "lw-s"},        /* movem reg to autodecrement. */
+{"movemw",     one(0046200),           one(0177700),           "!sLw"},        /* movem mem to reg. */
+{"movemw",     one(0046230),           one(0177770),           "+sLw"},        /* movem autoinc to reg. */
+
+{"movemw",     one(0044200),           one(0177700),           "#w&s"},        /* movem reg to mem. */
+{"movemw",     one(0044240),           one(0177770),           "#w-s"},        /* movem reg to autodecrement. */
+{"movemw",     one(0046200),           one(0177700),           "!s#w"},        /* movem mem to reg. */
+{"movemw",     one(0046230),           one(0177770),           "+s#w"},        /* movem autoinc to reg. */
+
+{"movepl",     one(0000510),           one(0170770),           "dsDd"},        /* memory to register */
+{"movepl",     one(0000710),           one(0170770),           "Ddds"},        /* register to memory */
+{"movepw",     one(0000410),           one(0170770),           "dsDd"},        /* memory to register */
+{"movepw",     one(0000610),           one(0170770),           "Ddds"},        /* register to memory */
+{"moveq",      one(0070000),           one(0170400),           "MsDd"},
+{"movew",      one(0030000),           one(0170000),           "*w$d"},
+{"movew",      one(0030100),           one(0170700),           "*wAd"},        /* movea,       written as move */
+{"movew",      one(0040300),           one(0177700),           "Ss$s"},        /* Move from sr */
+{"movew",      one(0041300),           one(0177700),           "Cs$s"},        /* Move from ccr */
+{"movew",      one(0042300),           one(0177700),           ";wCd"},        /* move to ccr */
+{"movew",      one(0043300),           one(0177700),           ";wSd"},        /* move to sr */
+
+{"movesb",     two(0007000, 0),        two(0177700, 07777),    "~sR1"},         /* moves from memory */
+{"movesb",     two(0007000, 04000),    two(0177700, 07777),    "R1~s"},         /* moves to memory */
+{"movesl",     two(0007200, 0),        two(0177700, 07777),    "~sR1"},         /* moves from memory */
+{"movesl",     two(0007200, 04000),    two(0177700, 07777),    "R1~s"},         /* moves to memory */
+{"movesw",     two(0007100, 0),        two(0177700, 07777),    "~sR1"},         /* moves from memory */
+{"movesw",     two(0007100, 04000),    two(0177700, 07777),    "R1~s"},         /* moves to memory */
+
+{"mulsl",      two(0046000, 004000),   two(0177700, 0107770),  ";lD1"},
+{"mulsl",      two(0046000, 006000),   two(0177700, 0107770),  ";lD3D1"},
+{"mulsw",      one(0140700),           one(0170700),           ";wDd"},
+{"muls",       one(0140700),           one(0170700),           ";wDd"},
+{"mulul",      two(0046000, 000000),   two(0177700, 0107770),  ";lD1"},
+{"mulul",      two(0046000, 002000),   two(0177700, 0107770),  ";lD3D1"},
+{"muluw",      one(0140300),           one(0170700),           ";wDd"},
+{"mulu",       one(0140300),           one(0170700),           ";wDd"},
+{"nbcd",       one(0044000),           one(0177700),           "$s"},
+{"negb",       one(0042000),           one(0177700),           "$s"},
+{"negl",       one(0042200),           one(0177700),           "$s"},
+{"negw",       one(0042100),           one(0177700),           "$s"},
+{"negxb",      one(0040000),           one(0177700),           "$s"},
+{"negxl",      one(0040200),           one(0177700),           "$s"},
+{"negxw",      one(0040100),           one(0177700),           "$s"},
+{"nop",                one(0047161),           one(0177777),           ""},
+{"notb",       one(0043000),           one(0177700),           "$s"},
+{"notl",       one(0043200),           one(0177700),           "$s"},
+{"notw",       one(0043100),           one(0177700),           "$s"},
+
+{"orb",                one(0000000),           one(0177700),           "#b$s"},        /* ori written as or */
+{"orb",                one(0000074),           one(0177777),           "#bCs"},        /* ori to ccr */
+{"orb",                one(0100000),           one(0170700),           ";bDd"},        /* memory to register */
+{"orb",                one(0100400),           one(0170700),           "Dd~s"},        /* register to memory */
+{"orib",       one(0000000),           one(0177700),           "#b$s"},
+{"orib",       one(0000074),           one(0177777),           "#bCs"},        /* ori to ccr */
+{"oril",       one(0000200),           one(0177700),           "#l$s"},
+{"oriw",       one(0000100),           one(0177700),           "#w$s"},
+{"oriw",       one(0000174),           one(0177777),           "#wSs"},        /* ori to sr */
+{"orl",                one(0000200),           one(0177700),           "#l$s"},
+{"orl",                one(0100200),           one(0170700),           ";lDd"},        /* memory to register */
+{"orl",                one(0100600),           one(0170700),           "Dd~s"},        /* register to memory */
+{"orw",                one(0000100),           one(0177700),           "#w$s"},
+{"orw",                one(0000174),           one(0177777),           "#wSs"},        /* ori to sr */
+{"orw",                one(0100100),           one(0170700),           ";wDd"},        /* memory to register */
+{"orw",                one(0100500),           one(0170700),           "Dd~s"},        /* register to memory */
+
+{"pack",       one(0100500),           one(0170770),           "DsDd#w"},      /* pack Ds,     Dd,     #w */
+{"pack",       one(0100510),           one(0170770),           "-s-d#w"},      /* pack -(As),  -(Ad),  #w */
+{"pea",                one(0044100),           one(0177700),           "!s"},
+{"reset",      one(0047160),           one(0177777),           ""},
+
+{"rolb",       one(0160430),           one(0170770),           "QdDs"},        /* rorb #Q,     Ds */
+{"rolb",       one(0160470),           one(0170770),           "DdDs"},        /* rorb Dd,     Ds */
+{"roll",       one(0160630),           one(0170770),           "QdDs"},        /* rorb #Q,     Ds */
+{"roll",       one(0160670),           one(0170770),           "DdDs"},        /* rorb Dd,     Ds */
+{"rolw",       one(0160530),           one(0170770),           "QdDs"},        /* rorb #Q,     Ds */
+{"rolw",       one(0160570),           one(0170770),           "DdDs"},        /* rorb Dd,     Ds */
+{"rolw",       one(0163700),           one(0177700),           "~s"},  /* Rotate memory */
+{"rorb",       one(0160030),           one(0170770),           "QdDs"},        /* rorb #Q,     Ds */
+{"rorb",       one(0160070),           one(0170770),           "DdDs"},        /* rorb Dd,     Ds */
+{"rorl",       one(0160230),           one(0170770),           "QdDs"},        /* rorb #Q,     Ds */
+{"rorl",       one(0160270),           one(0170770),           "DdDs"},        /* rorb Dd,     Ds */
+{"rorw",       one(0160130),           one(0170770),           "QdDs"},        /* rorb #Q,     Ds */
+{"rorw",       one(0160170),           one(0170770),           "DdDs"},        /* rorb Dd,     Ds */
+{"rorw",       one(0163300),           one(0177700),           "~s"},  /* Rotate memory */
+
+{"roxlb",      one(0160420),           one(0170770),           "QdDs"},        /* roxrb #Q,    Ds */
+{"roxlb",      one(0160460),           one(0170770),           "DdDs"},        /* roxrb Dd,    Ds */
+{"roxll",      one(0160620),           one(0170770),           "QdDs"},        /* roxrb #Q,    Ds */
+{"roxll",      one(0160660),           one(0170770),           "DdDs"},        /* roxrb Dd,    Ds */
+{"roxlw",      one(0160520),           one(0170770),           "QdDs"},        /* roxrb #Q,    Ds */
+{"roxlw",      one(0160560),           one(0170770),           "DdDs"},        /* roxrb Dd,    Ds */
+{"roxlw",      one(0162700),           one(0177700),           "~s"},  /* Rotate memory */
+{"roxrb",      one(0160020),           one(0170770),           "QdDs"},        /* roxrb #Q,    Ds */
+{"roxrb",      one(0160060),           one(0170770),           "DdDs"},        /* roxrb Dd,    Ds */
+{"roxrl",      one(0160220),           one(0170770),           "QdDs"},        /* roxrb #Q,    Ds */
+{"roxrl",      one(0160260),           one(0170770),           "DdDs"},        /* roxrb Dd,    Ds */
+{"roxrw",      one(0160120),           one(0170770),           "QdDs"},        /* roxrb #Q,    Ds */
+{"roxrw",      one(0160160),           one(0170770),           "DdDs"},        /* roxrb Dd,    Ds */
+{"roxrw",      one(0162300),           one(0177700),           "~s"},  /* Rotate memory */
+
+{"rtd",                one(0047164),           one(0177777),           "#w"},
+{"rte",                one(0047163),           one(0177777),           ""},
+{"rtm",                one(0003300),           one(0177760),           "Rs"},
+{"rtr",                one(0047167),           one(0177777),           ""},
+{"rts",                one(0047165),           one(0177777),           ""},
+
+{"scc",                one(0052300),           one(0177700),           "$s"},
+{"scs",                one(0052700),           one(0177700),           "$s"},
+{"seq",                one(0053700),           one(0177700),           "$s"},
+{"sf",         one(0050700),           one(0177700),           "$s"},
+{"sge",                one(0056300),           one(0177700),           "$s"},
+{"sgt",                one(0057300),           one(0177700),           "$s"},
+{"shi",                one(0051300),           one(0177700),           "$s"},
+{"sle",                one(0057700),           one(0177700),           "$s"},
+{"sls",                one(0051700),           one(0177700),           "$s"},
+{"slt",                one(0056700),           one(0177700),           "$s"},
+{"smi",                one(0055700),           one(0177700),           "$s"},
+{"sne",                one(0053300),           one(0177700),           "$s"},
+{"spl",                one(0055300),           one(0177700),           "$s"},
+{"st",         one(0050300),           one(0177700),           "$s"},
+{"svc",                one(0054300),           one(0177700),           "$s"},
+{"svs",                one(0054700),           one(0177700),           "$s"},
+
+{"sbcd",       one(0100400),           one(0170770),           "DsDd"},
+{"sbcd",       one(0100410),           one(0170770),           "-s-d"},
+{"stop",       one(0047162),           one(0177777),           "#w"},
+
+{"subal",      one(0110700),           one(0170700),           "*lAd"},
+{"subaw",      one(0110300),           one(0170700),           "*wAd"},
+{"subb",       one(0050400),           one(0170700),           "Qd%s"},        /* subq written as sub */
+{"subb",       one(0002000),           one(0177700),           "#b$s"},        /* subi written as sub */
+{"subb",       one(0110000),           one(0170700),           ";bDd"},        /* subb ? ?,    Dd */
+{"subb",       one(0110400),           one(0170700),           "Dd~s"},        /* subb Dd,     ? ? */
+{"subib",      one(0002000),           one(0177700),           "#b$s"},
+{"subil",      one(0002200),           one(0177700),           "#l$s"},
+{"subiw",      one(0002100),           one(0177700),           "#w$s"},
+{"subl",       one(0050600),           one(0170700),           "Qd%s"},
+{"subl",       one(0002200),           one(0177700),           "#l$s"},
+{"subl",       one(0110700),           one(0170700),           "*lAd"},
+{"subl",       one(0110200),           one(0170700),           "*lDd"},
+{"subl",       one(0110600),           one(0170700),           "Dd~s"},
+{"subqb",      one(0050400),           one(0170700),           "Qd%s"},
+{"subql",      one(0050600),           one(0170700),           "Qd%s"},
+{"subqw",      one(0050500),           one(0170700),           "Qd%s"},
+{"subw",       one(0050500),           one(0170700),           "Qd%s"},
+{"subw",       one(0002100),           one(0177700),           "#w$s"},
+{"subw",       one(0110100),           one(0170700),           "*wDd"},
+{"subw",       one(0110300),           one(0170700),           "*wAd"},        /* suba written as sub */
+{"subw",       one(0110500),           one(0170700),           "Dd~s"},
+{"subxb",      one(0110400),           one(0170770),           "DsDd"},        /* subxb Ds,    Dd */
+{"subxb",      one(0110410),           one(0170770),           "-s-d"},        /* subxb -(As), -(Ad) */
+{"subxl",      one(0110600),           one(0170770),           "DsDd"},
+{"subxl",      one(0110610),           one(0170770),           "-s-d"},
+{"subxw",      one(0110500),           one(0170770),           "DsDd"},
+{"subxw",      one(0110510),           one(0170770),           "-s-d"},
+
+{"swap",       one(0044100),           one(0177770),           "Ds"},
+       
+{"tas",                one(0045300),           one(0177700),           "$s"},
+{"trap",       one(0047100),           one(0177760),           "Ts"},
+
+{"trapcc",     one(0052374),           one(0177777),           ""},
+{"trapcs",     one(0052774),           one(0177777),           ""},
+{"trapeq",     one(0053774),           one(0177777),           ""},
+{"trapf",      one(0050774),           one(0177777),           ""},
+{"trapge",     one(0056374),           one(0177777),           ""},
+{"trapgt",     one(0057374),           one(0177777),           ""},
+{"traphi",     one(0051374),           one(0177777),           ""},
+{"traple",     one(0057774),           one(0177777),           ""},
+{"trapls",     one(0051774),           one(0177777),           ""},
+{"traplt",     one(0056774),           one(0177777),           ""},
+{"trapmi",     one(0055774),           one(0177777),           ""},
+{"trapne",     one(0053374),           one(0177777),           ""},
+{"trappl",     one(0055374),           one(0177777),           ""},
+{"trapt",      one(0050374),           one(0177777),           ""},
+{"trapvc",     one(0054374),           one(0177777),           ""},
+{"trapvs",     one(0054774),           one(0177777),           ""},
+
+{"trapcc.w",   one(0052372),           one(0177777),           ""},
+{"trapcs.w",   one(0052772),           one(0177777),           ""},
+{"trapeq.w",   one(0053772),           one(0177777),           ""},
+{"trapf.w",    one(0050772),           one(0177777),           ""},
+{"trapge.w",   one(0056372),           one(0177777),           ""},
+{"trapgt.w",   one(0057372),           one(0177777),           ""},
+{"traphi.w",   one(0051372),           one(0177777),           ""},
+{"traple.w",   one(0057772),           one(0177777),           ""},
+{"trapls.w",   one(0051772),           one(0177777),           ""},
+{"traplt.w",   one(0056772),           one(0177777),           ""},
+{"trapmi.w",   one(0055772),           one(0177777),           ""},
+{"trapne.w",   one(0053372),           one(0177777),           ""},
+{"trappl.w",   one(0055372),           one(0177777),           ""},
+{"trapt.w",    one(0050372),           one(0177777),           ""},
+{"trapvc.w",   one(0054372),           one(0177777),           ""},
+{"trapvs.w",   one(0054772),           one(0177777),           ""},
+
+{"trapcc.l",   one(0052373),           one(0177777),           ""},
+{"trapcs.l",   one(0052773),           one(0177777),           ""},
+{"trapeq.l",   one(0053773),           one(0177777),           ""},
+{"trapf.l",    one(0050773),           one(0177777),           ""},
+{"trapge.l",   one(0056373),           one(0177777),           ""},
+{"trapgt.l",   one(0057373),           one(0177777),           ""},
+{"traphi.l",   one(0051373),           one(0177777),           ""},
+{"traple.l",   one(0057773),           one(0177777),           ""},
+{"trapls.l",   one(0051773),           one(0177777),           ""},
+{"traplt.l",   one(0056773),           one(0177777),           ""},
+{"trapmi.l",   one(0055773),           one(0177777),           ""},
+{"trapne.l",   one(0053373),           one(0177777),           ""},
+{"trappl.l",   one(0055373),           one(0177777),           ""},
+{"trapt.l",    one(0050373),           one(0177777),           ""},
+{"trapvc.l",   one(0054373),           one(0177777),           ""},
+{"trapvs.l",   one(0054773),           one(0177777),           ""},
+
+{"trapv",      one(0047166),           one(0177777),           ""},
+
+{"tstb",       one(0045000),           one(0177700),           ";b"},
+{"tstw",       one(0045100),           one(0177700),           "*w"},
+{"tstl",       one(0045200),           one(0177700),           "*l"},
+
+{"unlk",       one(0047130),           one(0177770),           "As"},
+{"unpk",       one(0100600),           one(0170770),           "DsDd#w"},
+{"unpk",       one(0100610),           one(0170770),           "-s-d#w"},
+       /* JF floating pt stuff moved down here */
+
+{"fabsb",      two(0xF000, 0x5818),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fabsd",      two(0xF000, 0x5418),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fabsl",      two(0xF000, 0x4018),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fabsp",      two(0xF000, 0x4C18),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fabss",      two(0xF000, 0x4418),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fabsw",      two(0xF000, 0x5018),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fabsx",      two(0xF000, 0x0018),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fabsx",      two(0xF000, 0x4818),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fabsx",      two(0xF000, 0x0018),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"facosb",     two(0xF000, 0x581C),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"facosd",     two(0xF000, 0x541C),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"facosl",     two(0xF000, 0x401C),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"facosp",     two(0xF000, 0x4C1C),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"facoss",     two(0xF000, 0x441C),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"facosw",     two(0xF000, 0x501C),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"facosx",     two(0xF000, 0x001C),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"facosx",     two(0xF000, 0x481C),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"facosx",     two(0xF000, 0x001C),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"faddb",      two(0xF000, 0x5822),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"faddd",      two(0xF000, 0x5422),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"faddl",      two(0xF000, 0x4022),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"faddp",      two(0xF000, 0x4C22),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fadds",      two(0xF000, 0x4422),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"faddw",      two(0xF000, 0x5022),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"faddx",      two(0xF000, 0x0022),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"faddx",      two(0xF000, 0x4822),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+/* {"faddx",   two(0xF000, 0x0022),    two(0xF1C0, 0xE07F),    "IiFt"}, JF removed */
+
+{"fasinb",     two(0xF000, 0x580C),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fasind",     two(0xF000, 0x540C),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fasinl",     two(0xF000, 0x400C),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fasinp",     two(0xF000, 0x4C0C),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fasins",     two(0xF000, 0x440C),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fasinw",     two(0xF000, 0x500C),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fasinx",     two(0xF000, 0x000C),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fasinx",     two(0xF000, 0x480C),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fasinx",     two(0xF000, 0x000C),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fatanb",     two(0xF000, 0x580A),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fatand",     two(0xF000, 0x540A),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fatanl",     two(0xF000, 0x400A),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fatanp",     two(0xF000, 0x4C0A),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fatans",     two(0xF000, 0x440A),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fatanw",     two(0xF000, 0x500A),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fatanx",     two(0xF000, 0x000A),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fatanx",     two(0xF000, 0x480A),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fatanx",     two(0xF000, 0x000A),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fatanhb",    two(0xF000, 0x580D),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fatanhd",    two(0xF000, 0x540D),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fatanhl",    two(0xF000, 0x400D),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fatanhp",    two(0xF000, 0x4C0D),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fatanhs",    two(0xF000, 0x440D),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fatanhw",    two(0xF000, 0x500D),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fatanhx",    two(0xF000, 0x000D),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fatanhx",    two(0xF000, 0x480D),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fatanhx",    two(0xF000, 0x000D),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fbeq",       one(0xF081),            one(0xF1BF),            "IdBc"},
+{"fbf",                one(0xF080),            one(0xF1BF),            "IdBc"},
+{"fbge",       one(0xF093),            one(0xF1BF),            "IdBc"},
+{"fbgl",       one(0xF096),            one(0xF1BF),            "IdBc"},
+{"fbgle",      one(0xF097),            one(0xF1BF),            "IdBc"},
+{"fbgt",       one(0xF092),            one(0xF1BF),            "IdBc"},
+{"fble",       one(0xF095),            one(0xF1BF),            "IdBc"},
+{"fblt",       one(0xF094),            one(0xF1BF),            "IdBc"},
+{"fbne",       one(0xF08E),            one(0xF1BF),            "IdBc"},
+{"fbnge",      one(0xF09C),            one(0xF1BF),            "IdBc"},
+{"fbngl",      one(0xF099),            one(0xF1BF),            "IdBc"},
+{"fbngle",     one(0xF098),            one(0xF1BF),            "IdBc"},
+{"fbngt",      one(0xF09D),            one(0xF1BF),            "IdBc"},
+{"fbnle",      one(0xF09A),            one(0xF1BF),            "IdBc"},
+{"fbnlt",      one(0xF09B),            one(0xF1BF),            "IdBc"},
+{"fboge",      one(0xF083),            one(0xF1BF),            "IdBc"},
+{"fbogl",      one(0xF086),            one(0xF1BF),            "IdBc"},
+{"fbogt",      one(0xF082),            one(0xF1BF),            "IdBc"},
+{"fbole",      one(0xF085),            one(0xF1BF),            "IdBc"},
+{"fbolt",      one(0xF084),            one(0xF1BF),            "IdBc"},
+{"fbor",       one(0xF087),            one(0xF1BF),            "IdBc"},
+{"fbseq",      one(0xF091),            one(0xF1BF),            "IdBc"},
+{"fbsf",       one(0xF090),            one(0xF1BF),            "IdBc"},
+{"fbsne",      one(0xF09E),            one(0xF1BF),            "IdBc"},
+{"fbst",       one(0xF09F),            one(0xF1BF),            "IdBc"},
+{"fbt",                one(0xF08F),            one(0xF1BF),            "IdBc"},
+{"fbueq",      one(0xF089),            one(0xF1BF),            "IdBc"},
+{"fbuge",      one(0xF08B),            one(0xF1BF),            "IdBc"},
+{"fbugt",      one(0xF08A),            one(0xF1BF),            "IdBc"},
+{"fbule",      one(0xF08D),            one(0xF1BF),            "IdBc"},
+{"fbult",      one(0xF08C),            one(0xF1BF),            "IdBc"},
+{"fbun",       one(0xF088),            one(0xF1BF),            "IdBc"},
+
+{"fcmpb",      two(0xF000, 0x5838),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fcmpd",      two(0xF000, 0x5438),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fcmpl",      two(0xF000, 0x4038),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fcmpp",      two(0xF000, 0x4C38),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fcmps",      two(0xF000, 0x4438),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fcmpw",      two(0xF000, 0x5038),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fcmpx",      two(0xF000, 0x0038),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fcmpx",      two(0xF000, 0x4838),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+/* {"fcmpx",   two(0xF000, 0x0038),    two(0xF1C0, 0xE07F),    "IiFt"}, JF removed */
+
+{"fcosb",      two(0xF000, 0x581D),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fcosd",      two(0xF000, 0x541D),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fcosl",      two(0xF000, 0x401D),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fcosp",      two(0xF000, 0x4C1D),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fcoss",      two(0xF000, 0x441D),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fcosw",      two(0xF000, 0x501D),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fcosx",      two(0xF000, 0x001D),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fcosx",      two(0xF000, 0x481D),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fcosx",      two(0xF000, 0x001D),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fcoshb",     two(0xF000, 0x5819),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fcoshd",     two(0xF000, 0x5419),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fcoshl",     two(0xF000, 0x4019),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fcoshp",     two(0xF000, 0x4C19),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fcoshs",     two(0xF000, 0x4419),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fcoshw",     two(0xF000, 0x5019),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fcoshx",     two(0xF000, 0x0019),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fcoshx",     two(0xF000, 0x4819),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fcoshx",     two(0xF000, 0x0019),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fdbeq",      two(0xF048, 0x0001),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbf",       two(0xF048, 0x0000),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbge",      two(0xF048, 0x0013),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbgl",      two(0xF048, 0x0016),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbgle",     two(0xF048, 0x0017),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbgt",      two(0xF048, 0x0012),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdble",      two(0xF048, 0x0015),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdblt",      two(0xF048, 0x0014),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbne",      two(0xF048, 0x000E),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbnge",     two(0xF048, 0x001C),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbngl",     two(0xF048, 0x0019),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbngle",    two(0xF048, 0x0018),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbngt",     two(0xF048, 0x001D),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbnle",     two(0xF048, 0x001A),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbnlt",     two(0xF048, 0x001B),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdboge",     two(0xF048, 0x0003),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbogl",     two(0xF048, 0x0006),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbogt",     two(0xF048, 0x0002),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbole",     two(0xF048, 0x0005),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbolt",     two(0xF048, 0x0004),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbor",      two(0xF048, 0x0007),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbseq",     two(0xF048, 0x0011),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbsf",      two(0xF048, 0x0010),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbsne",     two(0xF048, 0x001E),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbst",      two(0xF048, 0x001F),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbt",       two(0xF048, 0x000F),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbueq",     two(0xF048, 0x0009),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbuge",     two(0xF048, 0x000B),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbugt",     two(0xF048, 0x000A),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbule",     two(0xF048, 0x000D),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbult",     two(0xF048, 0x000C),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+{"fdbun",      two(0xF048, 0x0008),    two(0xF1F8, 0xFFFF),    "IiDsBw"},
+
+{"fdivb",      two(0xF000, 0x5820),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fdivd",      two(0xF000, 0x5420),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fdivl",      two(0xF000, 0x4020),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fdivp",      two(0xF000, 0x4C20),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fdivs",      two(0xF000, 0x4420),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fdivw",      two(0xF000, 0x5020),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fdivx",      two(0xF000, 0x0020),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fdivx",      two(0xF000, 0x4820),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+/* {"fdivx",   two(0xF000, 0x0020),    two(0xF1C0, 0xE07F),    "IiFt"}, JF */
+
+{"fetoxb",     two(0xF000, 0x5810),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fetoxd",     two(0xF000, 0x5410),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fetoxl",     two(0xF000, 0x4010),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fetoxp",     two(0xF000, 0x4C10),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fetoxs",     two(0xF000, 0x4410),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fetoxw",     two(0xF000, 0x5010),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fetoxx",     two(0xF000, 0x0010),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fetoxx",     two(0xF000, 0x4810),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fetoxx",     two(0xF000, 0x0010),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fetoxm1b",   two(0xF000, 0x5808),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fetoxm1d",   two(0xF000, 0x5408),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fetoxm1l",   two(0xF000, 0x4008),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fetoxm1p",   two(0xF000, 0x4C08),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fetoxm1s",   two(0xF000, 0x4408),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fetoxm1w",   two(0xF000, 0x5008),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fetoxm1x",   two(0xF000, 0x0008),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fetoxm1x",   two(0xF000, 0x4808),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fetoxm1x",   two(0xF000, 0x0008),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fgetexpb",   two(0xF000, 0x581E),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fgetexpd",   two(0xF000, 0x541E),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fgetexpl",   two(0xF000, 0x401E),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fgetexpp",   two(0xF000, 0x4C1E),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fgetexps",   two(0xF000, 0x441E),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fgetexpw",   two(0xF000, 0x501E),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fgetexpx",   two(0xF000, 0x001E),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fgetexpx",   two(0xF000, 0x481E),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fgetexpx",   two(0xF000, 0x001E),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fgetmanb",   two(0xF000, 0x581F),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fgetmand",   two(0xF000, 0x541F),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fgetmanl",   two(0xF000, 0x401F),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fgetmanp",   two(0xF000, 0x4C1F),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fgetmans",   two(0xF000, 0x441F),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fgetmanw",   two(0xF000, 0x501F),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fgetmanx",   two(0xF000, 0x001F),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fgetmanx",   two(0xF000, 0x481F),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fgetmanx",   two(0xF000, 0x001F),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fintb",      two(0xF000, 0x5801),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fintd",      two(0xF000, 0x5401),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fintl",      two(0xF000, 0x4001),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fintp",      two(0xF000, 0x4C01),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fints",      two(0xF000, 0x4401),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fintw",      two(0xF000, 0x5001),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fintx",      two(0xF000, 0x0001),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fintx",      two(0xF000, 0x4801),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fintx",      two(0xF000, 0x0001),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fintrzb",    two(0xF000, 0x5803),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fintrzd",    two(0xF000, 0x5403),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fintrzl",    two(0xF000, 0x4003),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fintrzp",    two(0xF000, 0x4C03),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fintrzs",    two(0xF000, 0x4403),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fintrzw",    two(0xF000, 0x5003),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fintrzx",    two(0xF000, 0x0003),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fintrzx",    two(0xF000, 0x4803),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fintrzx",    two(0xF000, 0x0003),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"flog10b",    two(0xF000, 0x5815),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"flog10d",    two(0xF000, 0x5415),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"flog10l",    two(0xF000, 0x4015),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"flog10p",    two(0xF000, 0x4C15),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"flog10s",    two(0xF000, 0x4415),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"flog10w",    two(0xF000, 0x5015),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"flog10x",    two(0xF000, 0x0015),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"flog10x",    two(0xF000, 0x4815),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"flog10x",    two(0xF000, 0x0015),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"flog2b",     two(0xF000, 0x5816),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"flog2d",     two(0xF000, 0x5416),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"flog2l",     two(0xF000, 0x4016),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"flog2p",     two(0xF000, 0x4C16),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"flog2s",     two(0xF000, 0x4416),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"flog2w",     two(0xF000, 0x5016),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"flog2x",     two(0xF000, 0x0016),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"flog2x",     two(0xF000, 0x4816),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"flog2x",     two(0xF000, 0x0016),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"flognb",     two(0xF000, 0x5814),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"flognd",     two(0xF000, 0x5414),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"flognl",     two(0xF000, 0x4014),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"flognp",     two(0xF000, 0x4C14),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"flogns",     two(0xF000, 0x4414),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"flognw",     two(0xF000, 0x5014),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"flognx",     two(0xF000, 0x0014),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"flognx",     two(0xF000, 0x4814),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"flognx",     two(0xF000, 0x0014),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"flognp1b",   two(0xF000, 0x5806),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"flognp1d",   two(0xF000, 0x5406),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"flognp1l",   two(0xF000, 0x4006),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"flognp1p",   two(0xF000, 0x4C06),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"flognp1s",   two(0xF000, 0x4406),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"flognp1w",   two(0xF000, 0x5006),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"flognp1x",   two(0xF000, 0x0006),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"flognp1x",   two(0xF000, 0x4806),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"flognp1x",   two(0xF000, 0x0006),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fmodb",      two(0xF000, 0x5821),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fmodd",      two(0xF000, 0x5421),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fmodl",      two(0xF000, 0x4021),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fmodp",      two(0xF000, 0x4C21),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fmods",      two(0xF000, 0x4421),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fmodw",      two(0xF000, 0x5021),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fmodx",      two(0xF000, 0x0021),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fmodx",      two(0xF000, 0x4821),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+/* {"fmodx",   two(0xF000, 0x0021),    two(0xF1C0, 0xE07F),    "IiFt"}, JF */
+
+{"fmoveb",     two(0xF000, 0x5800),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},              /* fmove from <ea> to fp<n> */
+{"fmoveb",     two(0xF000, 0x7800),    two(0xF1C0, 0xFC7F),    "IiF7@b"},              /* fmove from fp<n> to <ea> */
+{"fmoved",     two(0xF000, 0x5400),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},              /* fmove from <ea> to fp<n> */
+{"fmoved",     two(0xF000, 0x7400),    two(0xF1C0, 0xFC7F),    "IiF7@F"},              /* fmove from fp<n> to <ea> */
+{"fmovel",     two(0xF000, 0x4000),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},              /* fmove from <ea> to fp<n> */
+{"fmovel",     two(0xF000, 0x6000),    two(0xF1C0, 0xFC7F),    "IiF7@l"},              /* fmove from fp<n> to <ea> */
+/* Warning:  The addressing modes on these are probably not right:
+   esp, Areg direct is only allowed for FPI */
+               /* fmove.l from/to system control registers: */
+{"fmovel",     two(0xF000, 0xA000),    two(0xF1C0, 0xE3FF),    "Iis8@s"},
+{"fmovel",     two(0xF000, 0x8000),    two(0xF1C0, 0xE3FF),    "Ii*ls8"},
+
+/* {"fmovel",  two(0xF000, 0xA000),    two(0xF1C0, 0xE3FF),    "Iis8@s"},
+{"fmovel",     two(0xF000, 0x8000),    two(0xF2C0, 0xE3FF),    "Ii*ss8"}, */
+
+{"fmovep",     two(0xF000, 0x4C00),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},              /* fmove from <ea> to fp<n> */
+{"fmovep",     two(0xF000, 0x6C00),    two(0xF1C0, 0xFC00),    "IiF7@pkC"},            /* fmove.p with k-factors: */
+{"fmovep",     two(0xF000, 0x7C00),    two(0xF1C0, 0xFC0F),    "IiF7@pDk"},            /* fmove.p with k-factors: */
+
+{"fmoves",     two(0xF000, 0x4400),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},              /* fmove from <ea> to fp<n> */
+{"fmoves",     two(0xF000, 0x6400),    two(0xF1C0, 0xFC7F),    "IiF7@f"},              /* fmove from fp<n> to <ea> */
+{"fmovew",     two(0xF000, 0x5000),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},              /* fmove from <ea> to fp<n> */
+{"fmovew",     two(0xF000, 0x7000),    two(0xF1C0, 0xFC7F),    "IiF7@w"},              /* fmove from fp<n> to <ea> */
+{"fmovex",     two(0xF000, 0x0000),    two(0xF1C0, 0xE07F),    "IiF8F7"},              /* fmove from <ea> to fp<n> */
+{"fmovex",     two(0xF000, 0x4800),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},              /* fmove from <ea> to fp<n> */
+{"fmovex",     two(0xF000, 0x6800),    two(0xF1C0, 0xFC7F),    "IiF7@x"},              /* fmove from fp<n> to <ea> */
+/* JF removed {"fmovex",       two(0xF000, 0x0000),    two(0xF1C0, 0xE07F),    "IiFt"},                / * fmove from <ea> to fp<n> */
+
+{"fmovecrx",   two(0xF000, 0x5C00),    two(0xF1FF, 0xFC00),    "Ii#CF7"},              /* fmovecr.x #ccc,      FPn */
+{"fmovecr",    two(0xF000, 0x5C00),    two(0xF1FF, 0xFC00),    "Ii#CF7"},
+
+/* Other fmovemx.  */
+{"fmovemx",    two(0xF020, 0xE000),    two(0xF1F8, 0xFF00),    "IdL3-s"},              /* fmovem.x to autodecrement,   static and dynamic */
+{"fmovemx",    two(0xF020, 0xE000),    two(0xF1F8, 0xFF00),    "Id#3-s"},              /* fmovem.x to autodecrement,   static and dynamic */
+
+{"fmovemx",    two(0xF020, 0xE800),    two(0xF1F8, 0xFF8F),    "IiDk-s"},              /* fmovem.x to autodecrement,   static and dynamic */
+
+{"fmovemx",    two(0xF000, 0xF000),    two(0xF1C0, 0xFF00),    "Id#3&s"},              /* fmovem.x to control, static and dynamic: */
+{"fmovemx",    two(0xF000, 0xF800),    two(0xF1C0, 0xFF8F),    "IiDk&s"},              /* fmovem.x to control, static and dynamic: */
+{"fmovemx",    two(0xF000, 0xD000),    two(0xF1C0, 0xFF00),    "Id&s#3"},              /* fmovem.x from control,       static and dynamic: */
+{"fmovemx",    two(0xF000, 0xD800),    two(0xF1C0, 0xFF8F),    "Ii&sDk"},              /* fmovem.x from control,       static and dynamic: */
+{"fmovemx",    two(0xF000, 0xF000),    two(0xF1C0, 0xFF00),    "Idl3&s"},              /* fmovem.x to control, static and dynamic: */
+{"fmovemx",    two(0xF000, 0xD000),    two(0xF1C0, 0xFF00),    "Id&sl3"},              /* fmovem.x from control,       static and dynamic: */
+
+{"fmovemx",    two(0xF018, 0xD000),    two(0xF1F8, 0xFF00),    "Id+sl3"},              /* fmovem.x from autoincrement, static and dynamic: */
+{"fmovemx",    two(0xF018, 0xD000),    two(0xF1F8, 0xFF00),    "Id+s#3"},              /* fmovem.x from autoincrement, static and dynamic: */
+{"fmovemx",    two(0xF018, 0xD800),    two(0xF1F8, 0xFF8F),    "Ii+sDk"},              /* fmovem.x from autoincrement, static and dynamic: */
+
+{"fmoveml",    two(0xF000, 0xA000),    two(0xF1C0, 0xE3FF),    "IiL8@s"},
+{"fmoveml",    two(0xF000, 0xA000),    two(0xF1C0, 0xE3FF),    "Ii#8@s"},
+{"fmoveml",    two(0xF000, 0xA000),    two(0xF1C0, 0xE3FF),    "Iis8@s"},
+
+{"fmoveml",    two(0xF000, 0x8000),    two(0xF2C0, 0xE3FF),    "Ii*sL8"},
+{"fmoveml",    two(0xF000, 0x8000),    two(0xF1C0, 0xE3FF),    "Ii*s#8"},
+{"fmoveml",    two(0xF000, 0x8000),    two(0xF1C0, 0xE3FF),    "Ii*ss8"},
+
+/* fmovemx with register lists */
+{"fmovem",     two(0xF020, 0xE000),    two(0xF1F8, 0xFF00),    "IdL3-s"},              /* fmovem.x to autodecrement,   static and dynamic */
+{"fmovem",     two(0xF000, 0xF000),    two(0xF1C0, 0xFF00),    "Idl3&s"},              /* fmovem.x to control, static and dynamic: */
+{"fmovem",     two(0xF018, 0xD000),    two(0xF1F8, 0xFF00),    "Id+sl3"},              /* fmovem.x from autoincrement, static and dynamic: */
+{"fmovem",     two(0xF000, 0xD000),    two(0xF1C0, 0xFF00),    "Id&sl3"},              /* fmovem.x from control,       static and dynamic: */
+
+       /* Alternate mnemonics for GNU as and GNU CC */
+{"fmovem",     two(0xF020, 0xE000),    two(0xF1F8, 0xFF00),    "Id#3-s"},              /* fmovem.x to autodecrement,   static and dynamic */
+{"fmovem",     two(0xF020, 0xE800),    two(0xF1F8, 0xFF8F),    "IiDk-s"},              /* fmovem.x to autodecrement,   static and dynamic */
+
+{"fmovem",     two(0xF000, 0xF000),    two(0xF1C0, 0xFF00),    "Id#3&s"},              /* fmovem.x to control, static and dynamic: */
+{"fmovem",     two(0xF000, 0xF800),    two(0xF1C0, 0xFF8F),    "IiDk&s"},              /* fmovem.x to control, static and dynamic: */
+
+{"fmovem",     two(0xF018, 0xD000),    two(0xF1F8, 0xFF00),    "Id+s#3"},              /* fmovem.x from autoincrement, static and dynamic: */
+{"fmovem",     two(0xF018, 0xD800),    two(0xF1F8, 0xFF8F),    "Ii+sDk"},              /* fmovem.x from autoincrement, static and dynamic: */
+  
+{"fmovem",     two(0xF000, 0xD000),    two(0xF1C0, 0xFF00),    "Id&s#3"},              /* fmovem.x from control,       static and dynamic: */
+{"fmovem",     two(0xF000, 0xD800),    two(0xF1C0, 0xFF8F),    "Ii&sDk"},              /* fmovem.x from control,       static and dynamic: */
+
+/* fmoveml a FP-control register */
+{"fmovem",     two(0xF000, 0xA000),    two(0xF1C0, 0xE3FF),    "Iis8@s"},
+{"fmovem",     two(0xF000, 0x8000),    two(0xF1C0, 0xE3FF),    "Ii*ss8"},
+
+/* fmoveml a FP-control reglist */
+{"fmovem",     two(0xF000, 0xA000),    two(0xF1C0, 0xE3FF),    "IiL8@s"},
+{"fmovem",     two(0xF000, 0x8000),    two(0xF2C0, 0xE3FF),    "Ii*sL8"},
+
+{"fmulb",      two(0xF000, 0x5823),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fmuld",      two(0xF000, 0x5423),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fmull",      two(0xF000, 0x4023),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fmulp",      two(0xF000, 0x4C23),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fmuls",      two(0xF000, 0x4423),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fmulw",      two(0xF000, 0x5023),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fmulx",      two(0xF000, 0x0023),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fmulx",      two(0xF000, 0x4823),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+/* {"fmulx",   two(0xF000, 0x0023),    two(0xF1C0, 0xE07F),    "IiFt"}, JF */
+
+{"fnegb",      two(0xF000, 0x581A),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fnegd",      two(0xF000, 0x541A),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fnegl",      two(0xF000, 0x401A),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fnegp",      two(0xF000, 0x4C1A),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fnegs",      two(0xF000, 0x441A),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fnegw",      two(0xF000, 0x501A),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fnegx",      two(0xF000, 0x001A),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fnegx",      two(0xF000, 0x481A),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fnegx",      two(0xF000, 0x001A),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fnop",       two(0xF280, 0x0000),    two(0xFFFF, 0xFFFF),    "Ii"},
+
+{"fremb",      two(0xF000, 0x5825),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fremd",      two(0xF000, 0x5425),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"freml",      two(0xF000, 0x4025),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fremp",      two(0xF000, 0x4C25),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"frems",      two(0xF000, 0x4425),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fremw",      two(0xF000, 0x5025),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fremx",      two(0xF000, 0x0025),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fremx",      two(0xF000, 0x4825),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+/* {"fremx",   two(0xF000, 0x0025),    two(0xF1C0, 0xE07F),    "IiFt"}, JF */
+
+{"frestore",   one(0xF140),            one(0xF1C0),            "Id&s"},
+{"frestore",   one(0xF158),            one(0xF1F8),            "Id+s"},
+{"fsave",      one(0xF100),            one(0xF1C0),            "Id&s"},
+{"fsave",      one(0xF120),            one(0xF1F8),            "Id-s"},
+
+{"fsincosb",   two(0xF000, 0x5830),    two(0xF1C0, 0xFC78),    "Ii;bF7FC"},
+{"fsincosd",   two(0xF000, 0x5430),    two(0xF1C0, 0xFC78),    "Ii;FF7FC"},
+{"fsincosl",   two(0xF000, 0x4030),    two(0xF1C0, 0xFC78),    "Ii;lF7FC"},
+{"fsincosp",   two(0xF000, 0x4C30),    two(0xF1C0, 0xFC78),    "Ii;pF7FC"},
+{"fsincoss",   two(0xF000, 0x4430),    two(0xF1C0, 0xFC78),    "Ii;fF7FC"},
+{"fsincosw",   two(0xF000, 0x5030),    two(0xF1C0, 0xFC78),    "Ii;wF7FC"},
+{"fsincosx",   two(0xF000, 0x0030),    two(0xF1C0, 0xE078),    "IiF8F7FC"},
+{"fsincosx",   two(0xF000, 0x4830),    two(0xF1C0, 0xFC78),    "Ii;xF7FC"},
+
+
+#ifdef comment
+/* gas's version had these. */
+{"fsincosb",   two(0xF000, 0x5830),    two(0xF1C0, 0xFC78),    "Ii;bF3F7"},
+{"fsincosd",   two(0xF000, 0x5430),    two(0xF1C0, 0xFC78),    "Ii;FF3F7"},
+{"fsincosl",   two(0xF000, 0x4030),    two(0xF1C0, 0xFC78),    "Ii;lF3F7"},
+{"fsincosp",   two(0xF000, 0x4C30),    two(0xF1C0, 0xFC78),    "Ii;pF3F7"},
+{"fsincoss",   two(0xF000, 0x4430),    two(0xF1C0, 0xFC78),    "Ii;fF3F7"},
+{"fsincosw",   two(0xF000, 0x5030),    two(0xF1C0, 0xFC78),    "Ii;wF3F7"},
+{"fsincosx",   two(0xF000, 0x0030),    two(0xF1C0, 0xE078),    "IiF8F3F7"},
+{"fsincosx",   two(0xF000, 0x4830),    two(0xF1C0, 0xFC78),    "Ii;xF3F7"},
+#endif /* comment */
+
+{"fscaleb",    two(0xF000, 0x5826),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fscaled",    two(0xF000, 0x5426),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fscalel",    two(0xF000, 0x4026),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fscalep",    two(0xF000, 0x4C26),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fscales",    two(0xF000, 0x4426),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fscalew",    two(0xF000, 0x5026),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fscalex",    two(0xF000, 0x0026),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fscalex",    two(0xF000, 0x4826),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+/* {"fscalex", two(0xF000, 0x0026),    two(0xF1C0, 0xE07F),    "IiFt"}, JF */
+
+/* $ is necessary to prevent the assembler from using PC-relative.
+   If @ were used, "label: fseq label" could produce "ftrapeq",
+   because "label" became "pc@label".  */
+{"fseq",       two(0xF040, 0x0001),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsf",                two(0xF040, 0x0000),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsge",       two(0xF040, 0x0013),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsgl",       two(0xF040, 0x0016),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsgle",      two(0xF040, 0x0017),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsgt",       two(0xF040, 0x0012),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsle",       two(0xF040, 0x0015),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fslt",       two(0xF040, 0x0014),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsne",       two(0xF040, 0x000E),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsnge",      two(0xF040, 0x001C),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsngl",      two(0xF040, 0x0019),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsngle",     two(0xF040, 0x0018),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsngt",      two(0xF040, 0x001D),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsnle",      two(0xF040, 0x001A),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsnlt",      two(0xF040, 0x001B),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsoge",      two(0xF040, 0x0003),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsogl",      two(0xF040, 0x0006),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsogt",      two(0xF040, 0x0002),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsole",      two(0xF040, 0x0005),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsolt",      two(0xF040, 0x0004),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsor",       two(0xF040, 0x0007),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsseq",      two(0xF040, 0x0011),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fssf",       two(0xF040, 0x0010),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fssne",      two(0xF040, 0x001E),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsst",       two(0xF040, 0x001F),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fst",                two(0xF040, 0x000F),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsueq",      two(0xF040, 0x0009),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsuge",      two(0xF040, 0x000B),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsugt",      two(0xF040, 0x000A),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsule",      two(0xF040, 0x000D),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsult",      two(0xF040, 0x000C),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+{"fsun",       two(0xF040, 0x0008),    two(0xF1C0, 0xFFFF),    "Ii$s"},
+
+{"fsgldivb",   two(0xF000, 0x5824),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fsgldivd",   two(0xF000, 0x5424),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fsgldivl",   two(0xF000, 0x4024),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fsgldivp",   two(0xF000, 0x4C24),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fsgldivs",   two(0xF000, 0x4424),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fsgldivw",   two(0xF000, 0x5024),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fsgldivx",   two(0xF000, 0x0024),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fsgldivx",   two(0xF000, 0x4824),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fsgldivx",   two(0xF000, 0x0024),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fsglmulb",   two(0xF000, 0x5827),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fsglmuld",   two(0xF000, 0x5427),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fsglmull",   two(0xF000, 0x4027),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fsglmulp",   two(0xF000, 0x4C27),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fsglmuls",   two(0xF000, 0x4427),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fsglmulw",   two(0xF000, 0x5027),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fsglmulx",   two(0xF000, 0x0027),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fsglmulx",   two(0xF000, 0x4827),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fsglmulx",   two(0xF000, 0x0027),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fsinb",      two(0xF000, 0x580E),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fsind",      two(0xF000, 0x540E),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fsinl",      two(0xF000, 0x400E),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fsinp",      two(0xF000, 0x4C0E),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fsins",      two(0xF000, 0x440E),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fsinw",      two(0xF000, 0x500E),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fsinx",      two(0xF000, 0x000E),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fsinx",      two(0xF000, 0x480E),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fsinx",      two(0xF000, 0x000E),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fsinhb",     two(0xF000, 0x5802),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fsinhd",     two(0xF000, 0x5402),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fsinhl",     two(0xF000, 0x4002),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fsinhp",     two(0xF000, 0x4C02),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fsinhs",     two(0xF000, 0x4402),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fsinhw",     two(0xF000, 0x5002),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fsinhx",     two(0xF000, 0x0002),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fsinhx",     two(0xF000, 0x4802),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fsinhx",     two(0xF000, 0x0002),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fsqrtb",     two(0xF000, 0x5804),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fsqrtd",     two(0xF000, 0x5404),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fsqrtl",     two(0xF000, 0x4004),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fsqrtp",     two(0xF000, 0x4C04),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fsqrts",     two(0xF000, 0x4404),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fsqrtw",     two(0xF000, 0x5004),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fsqrtx",     two(0xF000, 0x0004),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fsqrtx",     two(0xF000, 0x4804),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fsqrtx",     two(0xF000, 0x0004),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"fsubb",      two(0xF000, 0x5828),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"fsubd",      two(0xF000, 0x5428),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"fsubl",      two(0xF000, 0x4028),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"fsubp",      two(0xF000, 0x4C28),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"fsubs",      two(0xF000, 0x4428),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"fsubw",      two(0xF000, 0x5028),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"fsubx",      two(0xF000, 0x0028),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"fsubx",      two(0xF000, 0x4828),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"fsubx",      two(0xF000, 0x0028),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"ftanb",      two(0xF000, 0x580F),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"ftand",      two(0xF000, 0x540F),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"ftanl",      two(0xF000, 0x400F),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"ftanp",      two(0xF000, 0x4C0F),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"ftans",      two(0xF000, 0x440F),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"ftanw",      two(0xF000, 0x500F),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"ftanx",      two(0xF000, 0x000F),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"ftanx",      two(0xF000, 0x480F),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"ftanx",      two(0xF000, 0x000F),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"ftanhb",     two(0xF000, 0x5809),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"ftanhd",     two(0xF000, 0x5409),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"ftanhl",     two(0xF000, 0x4009),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"ftanhp",     two(0xF000, 0x4C09),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"ftanhs",     two(0xF000, 0x4409),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"ftanhw",     two(0xF000, 0x5009),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"ftanhx",     two(0xF000, 0x0009),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"ftanhx",     two(0xF000, 0x4809),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"ftanhx",     two(0xF000, 0x0009),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"ftentoxb",   two(0xF000, 0x5812),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"ftentoxd",   two(0xF000, 0x5412),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"ftentoxl",   two(0xF000, 0x4012),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"ftentoxp",   two(0xF000, 0x4C12),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"ftentoxs",   two(0xF000, 0x4412),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"ftentoxw",   two(0xF000, 0x5012),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"ftentoxx",   two(0xF000, 0x0012),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"ftentoxx",   two(0xF000, 0x4812),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"ftentoxx",   two(0xF000, 0x0012),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+{"ftrapeq",    two(0xF07C, 0x0001),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapf",     two(0xF07C, 0x0000),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapge",    two(0xF07C, 0x0013),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapgl",    two(0xF07C, 0x0016),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapgle",   two(0xF07C, 0x0017),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapgt",    two(0xF07C, 0x0012),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftraple",    two(0xF07C, 0x0015),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftraplt",    two(0xF07C, 0x0014),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapne",    two(0xF07C, 0x000E),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapnge",   two(0xF07C, 0x001C),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapngl",   two(0xF07C, 0x0019),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapngle",  two(0xF07C, 0x0018),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapngt",   two(0xF07C, 0x001D),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapnle",   two(0xF07C, 0x001A),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapnlt",   two(0xF07C, 0x001B),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapoge",   two(0xF07C, 0x0003),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapogl",   two(0xF07C, 0x0006),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapogt",   two(0xF07C, 0x0002),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapole",   two(0xF07C, 0x0005),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapolt",   two(0xF07C, 0x0004),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapor",    two(0xF07C, 0x0007),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapseq",   two(0xF07C, 0x0011),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapsf",    two(0xF07C, 0x0010),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapsne",   two(0xF07C, 0x001E),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapst",    two(0xF07C, 0x001F),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapt",     two(0xF07C, 0x000F),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapueq",   two(0xF07C, 0x0009),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapuge",   two(0xF07C, 0x000B),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapugt",   two(0xF07C, 0x000A),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapule",   two(0xF07C, 0x000D),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapult",   two(0xF07C, 0x000C),    two(0xF1FF, 0xFFFF),    "Ii"},
+{"ftrapun",    two(0xF07C, 0x0008),    two(0xF1FF, 0xFFFF),    "Ii"},
+        
+{"ftrapeqw",   two(0xF07A, 0x0001),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapfw",    two(0xF07A, 0x0000),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapgew",   two(0xF07A, 0x0013),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapglw",   two(0xF07A, 0x0016),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapglew",  two(0xF07A, 0x0017),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapgtw",   two(0xF07A, 0x0012),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftraplew",   two(0xF07A, 0x0015),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapltw",   two(0xF07A, 0x0014),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapnew",   two(0xF07A, 0x000E),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapngew",  two(0xF07A, 0x001C),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapnglw",  two(0xF07A, 0x0019),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapnglew", two(0xF07A, 0x0018),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapngtw",  two(0xF07A, 0x001D),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapnlew",  two(0xF07A, 0x001A),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapnltw",  two(0xF07A, 0x001B),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapogew",  two(0xF07A, 0x0003),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapoglw",  two(0xF07A, 0x0006),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapogtw",  two(0xF07A, 0x0002),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapolew",  two(0xF07A, 0x0005),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapoltw",  two(0xF07A, 0x0004),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftraporw",   two(0xF07A, 0x0007),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapseqw",  two(0xF07A, 0x0011),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapsfw",   two(0xF07A, 0x0010),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapsnew",  two(0xF07A, 0x001E),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapstw",   two(0xF07A, 0x001F),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftraptw",    two(0xF07A, 0x000F),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapueqw",  two(0xF07A, 0x0009),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapugew",  two(0xF07A, 0x000B),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapugtw",  two(0xF07A, 0x000A),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapulew",  two(0xF07A, 0x000D),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapultw",  two(0xF07A, 0x000C),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+{"ftrapunw",   two(0xF07A, 0x0008),    two(0xF1FF, 0xFFFF),    "Ii^w"},
+
+{"ftrapeql",   two(0xF07B, 0x0001),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapfl",    two(0xF07B, 0x0000),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapgel",   two(0xF07B, 0x0013),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapgll",   two(0xF07B, 0x0016),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapglel",  two(0xF07B, 0x0017),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapgtl",   two(0xF07B, 0x0012),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftraplel",   two(0xF07B, 0x0015),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapltl",   two(0xF07B, 0x0014),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapnel",   two(0xF07B, 0x000E),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapngel",  two(0xF07B, 0x001C),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapngll",  two(0xF07B, 0x0019),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapnglel", two(0xF07B, 0x0018),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapngtl",  two(0xF07B, 0x001D),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapnlel",  two(0xF07B, 0x001A),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapnltl",  two(0xF07B, 0x001B),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapogel",  two(0xF07B, 0x0003),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapogll",  two(0xF07B, 0x0006),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapogtl",  two(0xF07B, 0x0002),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapolel",  two(0xF07B, 0x0005),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapoltl",  two(0xF07B, 0x0004),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftraporl",   two(0xF07B, 0x0007),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapseql",  two(0xF07B, 0x0011),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapsfl",   two(0xF07B, 0x0010),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapsnel",  two(0xF07B, 0x001E),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapstl",   two(0xF07B, 0x001F),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftraptl",    two(0xF07B, 0x000F),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapueql",  two(0xF07B, 0x0009),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapugel",  two(0xF07B, 0x000B),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapugtl",  two(0xF07B, 0x000A),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapulel",  two(0xF07B, 0x000D),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapultl",  two(0xF07B, 0x000C),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+{"ftrapunl",   two(0xF07B, 0x0008),    two(0xF1FF, 0xFFFF),    "Ii^l"},
+
+{"ftstb",      two(0xF000, 0x583A),    two(0xF1C0, 0xFC7F),    "Ii;b"},
+{"ftstd",      two(0xF000, 0x543A),    two(0xF1C0, 0xFC7F),    "Ii;F"},
+{"ftstl",      two(0xF000, 0x403A),    two(0xF1C0, 0xFC7F),    "Ii;l"},
+{"ftstp",      two(0xF000, 0x4C3A),    two(0xF1C0, 0xFC7F),    "Ii;p"},
+{"ftsts",      two(0xF000, 0x443A),    two(0xF1C0, 0xFC7F),    "Ii;f"},
+{"ftstw",      two(0xF000, 0x503A),    two(0xF1C0, 0xFC7F),    "Ii;w"},
+{"ftstx",      two(0xF000, 0x003A),    two(0xF1C0, 0xE07F),    "IiF8"},
+{"ftstx",      two(0xF000, 0x483A),    two(0xF1C0, 0xFC7F),    "Ii;x"},
+
+{"ftwotoxb",   two(0xF000, 0x5811),    two(0xF1C0, 0xFC7F),    "Ii;bF7"},
+{"ftwotoxd",   two(0xF000, 0x5411),    two(0xF1C0, 0xFC7F),    "Ii;FF7"},
+{"ftwotoxl",   two(0xF000, 0x4011),    two(0xF1C0, 0xFC7F),    "Ii;lF7"},
+{"ftwotoxp",   two(0xF000, 0x4C11),    two(0xF1C0, 0xFC7F),    "Ii;pF7"},
+{"ftwotoxs",   two(0xF000, 0x4411),    two(0xF1C0, 0xFC7F),    "Ii;fF7"},
+{"ftwotoxw",   two(0xF000, 0x5011),    two(0xF1C0, 0xFC7F),    "Ii;wF7"},
+{"ftwotoxx",   two(0xF000, 0x0011),    two(0xF1C0, 0xE07F),    "IiF8F7"},
+{"ftwotoxx",   two(0xF000, 0x4811),    two(0xF1C0, 0xFC7F),    "Ii;xF7"},
+{"ftwotoxx",   two(0xF000, 0x0011),    two(0xF1C0, 0xE07F),    "IiFt"},
+
+
+{"fjeq",       one(0xF081),            one(0xF1FF),            "IdBc"},
+{"fjf",                one(0xF080),            one(0xF1FF),            "IdBc"},
+{"fjge",       one(0xF093),            one(0xF1FF),            "IdBc"},
+{"fjgl",       one(0xF096),            one(0xF1FF),            "IdBc"},
+{"fjgle",      one(0xF097),            one(0xF1FF),            "IdBc"},
+{"fjgt",       one(0xF092),            one(0xF1FF),            "IdBc"},
+{"fjle",       one(0xF095),            one(0xF1FF),            "IdBc"},
+{"fjlt",       one(0xF094),            one(0xF1FF),            "IdBc"},
+{"fjne",       one(0xF08E),            one(0xF1FF),            "IdBc"},
+{"fjnge",      one(0xF09C),            one(0xF1FF),            "IdBc"},
+{"fjngl",      one(0xF099),            one(0xF1FF),            "IdBc"},
+{"fjngle",     one(0xF098),            one(0xF1FF),            "IdBc"},
+{"fjngt",      one(0xF09D),            one(0xF1FF),            "IdBc"},
+{"fjnle",      one(0xF09A),            one(0xF1FF),            "IdBc"},
+{"fjnlt",      one(0xF09B),            one(0xF1FF),            "IdBc"},
+{"fjoge",      one(0xF083),            one(0xF1FF),            "IdBc"},
+{"fjogl",      one(0xF086),            one(0xF1FF),            "IdBc"},
+{"fjogt",      one(0xF082),            one(0xF1FF),            "IdBc"},
+{"fjole",      one(0xF085),            one(0xF1FF),            "IdBc"},
+{"fjolt",      one(0xF084),            one(0xF1FF),            "IdBc"},
+{"fjor",       one(0xF087),            one(0xF1FF),            "IdBc"},
+{"fjseq",      one(0xF091),            one(0xF1FF),            "IdBc"},
+{"fjsf",       one(0xF090),            one(0xF1FF),            "IdBc"},
+{"fjsne",      one(0xF09E),            one(0xF1FF),            "IdBc"},
+{"fjst",       one(0xF09F),            one(0xF1FF),            "IdBc"},
+{"fjt",                one(0xF08F),            one(0xF1FF),            "IdBc"},
+{"fjueq",      one(0xF089),            one(0xF1FF),            "IdBc"},
+{"fjuge",      one(0xF08B),            one(0xF1FF),            "IdBc"},
+{"fjugt",      one(0xF08A),            one(0xF1FF),            "IdBc"},
+{"fjule",      one(0xF08D),            one(0xF1FF),            "IdBc"},
+{"fjult",      one(0xF08C),            one(0xF1FF),            "IdBc"},
+{"fjun",       one(0xF088),            one(0xF1FF),            "IdBc"},
+
+/* The assembler will ignore attempts to force a short offset */
+
+{"bhis",       one(0061000),           one(0177400),           "Bg"},
+{"blss",       one(0061400),           one(0177400),           "Bg"},
+{"bccs",       one(0062000),           one(0177400),           "Bg"},
+{"bcss",       one(0062400),           one(0177400),           "Bg"},
+{"bnes",       one(0063000),           one(0177400),           "Bg"},
+{"beqs",       one(0063400),           one(0177400),           "Bg"},
+{"bvcs",       one(0064000),           one(0177400),           "Bg"},
+{"bvss",       one(0064400),           one(0177400),           "Bg"},
+{"bpls",       one(0065000),           one(0177400),           "Bg"},
+{"bmis",       one(0065400),           one(0177400),           "Bg"},
+{"bges",       one(0066000),           one(0177400),           "Bg"},
+{"blts",       one(0066400),           one(0177400),           "Bg"},
+{"bgts",       one(0067000),           one(0177400),           "Bg"},
+{"bles",       one(0067400),           one(0177400),           "Bg"},
+
+/* Alternate mnemonics for SUN */
+
+{"jbsr",       one(0060400),           one(0177400),           "Bg"},
+{"jbsr",       one(0047200),           one(0177700),           "!s"},
+{"jra",                one(0060000),           one(0177400),           "Bg"},
+{"jra",                one(0047300),           one(0177700),           "!s"},
+  
+{"jhi",                one(0061000),           one(0177400),           "Bg"},
+{"jls",                one(0061400),           one(0177400),           "Bg"},
+{"jcc",                one(0062000),           one(0177400),           "Bg"},
+{"jcs",                one(0062400),           one(0177400),           "Bg"},
+{"jne",                one(0063000),           one(0177400),           "Bg"},
+{"jeq",                one(0063400),           one(0177400),           "Bg"},
+{"jvc",                one(0064000),           one(0177400),           "Bg"},
+{"jvs",                one(0064400),           one(0177400),           "Bg"},
+{"jpl",                one(0065000),           one(0177400),           "Bg"},
+{"jmi",                one(0065400),           one(0177400),           "Bg"},
+{"jge",                one(0066000),           one(0177400),           "Bg"},
+{"jlt",                one(0066400),           one(0177400),           "Bg"},
+{"jgt",                one(0067000),           one(0177400),           "Bg"},
+{"jle",                one(0067400),           one(0177400),           "Bg"},
+
+/* Short offsets are ignored */
+
+{"jbsrs",      one(0060400),           one(0177400),           "Bg"},
+{"jras",       one(0060000),           one(0177400),           "Bg"},
+{"jhis",       one(0061000),           one(0177400),           "Bg"},
+{"jlss",       one(0061400),           one(0177400),           "Bg"},
+{"jccs",       one(0062000),           one(0177400),           "Bg"},
+{"jcss",       one(0062400),           one(0177400),           "Bg"},
+{"jnes",       one(0063000),           one(0177400),           "Bg"},
+{"jeqs",       one(0063400),           one(0177400),           "Bg"},
+{"jvcs",       one(0064000),           one(0177400),           "Bg"},
+{"jvss",       one(0064400),           one(0177400),           "Bg"},
+{"jpls",       one(0065000),           one(0177400),           "Bg"},
+{"jmis",       one(0065400),           one(0177400),           "Bg"},
+{"jges",       one(0066000),           one(0177400),           "Bg"},
+{"jlts",       one(0066400),           one(0177400),           "Bg"},
+{"jgts",       one(0067000),           one(0177400),           "Bg"},
+{"jles",       one(0067400),           one(0177400),           "Bg"},
+
+{"movql",      one(0070000),           one(0170400),           "MsDd"},
+{"moveql",     one(0070000),           one(0170400),           "MsDd"},
+{"moval",      one(0020100),           one(0170700),           "*lAd"},
+{"movaw",      one(0030100),           one(0170700),           "*wAd"},
+{"movb",       one(0010000),           one(0170000),           ";b$d"},        /* mov */
+{"movl",       one(0070000),           one(0170400),           "MsDd"},        /* movq written as mov */
+{"movl",       one(0020000),           one(0170000),           "*l$d"},
+{"movl",       one(0020100),           one(0170700),           "*lAd"},
+{"movl",       one(0047140),           one(0177770),           "AsUd"},        /* mov to USP */
+{"movl",       one(0047150),           one(0177770),           "UdAs"},        /* mov from USP */
+{"movc",       one(0047173),           one(0177777),           "R1Jj"},
+{"movc",       one(0047173),           one(0177777),           "R1#j"},
+{"movc",       one(0047172),           one(0177777),           "JjR1"},
+{"movc",       one(0047172),           one(0177777),           "#jR1"},
+{"movml",      one(0044300),           one(0177700),           "#w&s"},        /* movm reg to mem. */
+{"movml",      one(0044340),           one(0177770),           "#w-s"},        /* movm reg to autodecrement. */
+{"movml",      one(0046300),           one(0177700),           "!s#w"},        /* movm mem to reg. */
+{"movml",      one(0046330),           one(0177770),           "+s#w"},        /* movm autoinc to reg. */
+{"movml",      one(0044300),           one(0177700),           "Lw&s"},        /* movm reg to mem. */
+{"movml",      one(0044340),           one(0177770),           "lw-s"},        /* movm reg to autodecrement. */
+{"movml",      one(0046300),           one(0177700),           "!sLw"},        /* movm mem to reg. */
+{"movml",      one(0046330),           one(0177770),           "+sLw"},        /* movm autoinc to reg. */
+{"movmw",      one(0044200),           one(0177700),           "#w&s"},        /* movm reg to mem. */
+{"movmw",      one(0044240),           one(0177770),           "#w-s"},        /* movm reg to autodecrement. */
+{"movmw",      one(0046200),           one(0177700),           "!s#w"},        /* movm mem to reg. */
+{"movmw",      one(0046230),           one(0177770),           "+s#w"},        /* movm autoinc to reg. */
+{"movmw",      one(0044200),           one(0177700),           "Lw&s"},        /* movm reg to mem. */
+{"movmw",      one(0044240),           one(0177770),           "lw-s"},        /* movm reg to autodecrement. */
+{"movmw",      one(0046200),           one(0177700),           "!sLw"},        /* movm mem to reg. */
+{"movmw",      one(0046230),           one(0177770),           "+sLw"},        /* movm autoinc to reg. */
+{"movpl",      one(0000510),           one(0170770),           "dsDd"},        /* memory to register */
+{"movpl",      one(0000710),           one(0170770),           "Ddds"},        /* register to memory */
+{"movpw",      one(0000410),           one(0170770),           "dsDd"},        /* memory to register */
+{"movpw",      one(0000610),           one(0170770),           "Ddds"},        /* register to memory */
+{"movq",       one(0070000),           one(0170400),           "MsDd"},
+{"movw",       one(0030000),           one(0170000),           "*w$d"},
+{"movw",       one(0030100),           one(0170700),           "*wAd"},        /* mova,        written as mov */
+{"movw",       one(0040300),           one(0177700),           "Ss$s"},        /* Move from sr */
+{"movw",       one(0041300),           one(0177700),           "Cs$s"},        /* Move from ccr */
+{"movw",       one(0042300),           one(0177700),           ";wCd"},        /* mov to ccr */
+{"movw",       one(0043300),           one(0177700),           ";wSd"},        /* mov to sr */
+
+{"movsb",      two(0007000, 0),        two(0177700, 07777),    "~sR1"},
+{"movsb",      two(0007000, 04000),    two(0177700, 07777),    "R1~s"},
+{"movsl",      two(0007200, 0),        two(0177700, 07777),    "~sR1"},
+{"movsl",      two(0007200, 04000),    two(0177700, 07777),    "R1~s"},
+{"movsw",      two(0007100, 0),        two(0177700, 07777),    "~sR1"},
+{"movsw",      two(0007100, 04000),    two(0177700, 07777),    "R1~s"},
+
+#ifdef m68851
+ /* name */    /* opcode */            /* match */             /* args */
+
+{"pbac",       one(0xf0c7),            one(0xffbf),            "Bc"},
+{"pbacw",      one(0xf087),            one(0xffbf),            "Bc"},
+{"pbas",       one(0xf0c6),            one(0xffbf),            "Bc"},
+{"pbasw",      one(0xf086),            one(0xffbf),            "Bc"},
+{"pbbc",       one(0xf0c1),            one(0xffbf),            "Bc"},
+{"pbbcw",      one(0xf081),            one(0xffbf),            "Bc"},
+{"pbbs",       one(0xf0c0),            one(0xffbf),            "Bc"},
+{"pbbsw",      one(0xf080),            one(0xffbf),            "Bc"},
+{"pbcc",       one(0xf0cf),            one(0xffbf),            "Bc"},
+{"pbccw",      one(0xf08f),            one(0xffbf),            "Bc"},
+{"pbcs",       one(0xf0ce),            one(0xffbf),            "Bc"},
+{"pbcsw",      one(0xf08e),            one(0xffbf),            "Bc"},
+{"pbgc",       one(0xf0cd),            one(0xffbf),            "Bc"},
+{"pbgcw",      one(0xf08d),            one(0xffbf),            "Bc"},
+{"pbgs",       one(0xf0cc),            one(0xffbf),            "Bc"},
+{"pbgsw",      one(0xf08c),            one(0xffbf),            "Bc"},
+{"pbic",       one(0xf0cb),            one(0xffbf),            "Bc"},
+{"pbicw",      one(0xf08b),            one(0xffbf),            "Bc"},
+{"pbis",       one(0xf0ca),            one(0xffbf),            "Bc"},
+{"pbisw",      one(0xf08a),            one(0xffbf),            "Bc"},
+{"pblc",       one(0xf0c3),            one(0xffbf),            "Bc"},
+{"pblcw",      one(0xf083),            one(0xffbf),            "Bc"},
+{"pbls",       one(0xf0c2),            one(0xffbf),            "Bc"},
+{"pblsw",      one(0xf082),            one(0xffbf),            "Bc"},
+{"pbsc",       one(0xf0c5),            one(0xffbf),            "Bc"},
+{"pbscw",      one(0xf085),            one(0xffbf),            "Bc"},
+{"pbss",       one(0xf0c4),            one(0xffbf),            "Bc"},
+{"pbssw",      one(0xf084),            one(0xffbf),            "Bc"},
+{"pbwc",       one(0xf0c9),            one(0xffbf),            "Bc"},
+{"pbwcw",      one(0xf089),            one(0xffbf),            "Bc"},
+{"pbws",       one(0xf0c8),            one(0xffbf),            "Bc"},
+{"pbwsw",      one(0xf088),            one(0xffbf),            "Bc"},
+
+
+{"pdbac",      two(0xf048, 0x0007),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbas",      two(0xf048, 0x0006),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbbc",      two(0xf048, 0x0001),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbbs",      two(0xf048, 0x0000),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbcc",      two(0xf048, 0x000f),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbcs",      two(0xf048, 0x000e),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbgc",      two(0xf048, 0x000d),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbgs",      two(0xf048, 0x000c),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbic",      two(0xf048, 0x000b),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbis",      two(0xf048, 0x000a),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdblc",      two(0xf048, 0x0003),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbls",      two(0xf048, 0x0002),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbsc",      two(0xf048, 0x0005),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbss",      two(0xf048, 0x0004),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbwc",      two(0xf048, 0x0009),    two(0xfff8, 0xffff),    "DsBw"},
+{"pdbws",      two(0xf048, 0x0008),    two(0xfff8, 0xffff),    "DsBw"},
+
+{"pflusha",    two(0xf000, 0x2400),    two(0xffff, 0xffff),    "" },
+
+{"pflush",     two(0xf000, 0x3010),    two(0xffc0, 0xfe10),    "T3T9" },
+{"pflush",     two(0xf000, 0x3810),    two(0xffc0, 0xfe10),    "T3T9&s" },
+{"pflush",     two(0xf000, 0x3008),    two(0xffc0, 0xfe18),    "D3T9" },
+{"pflush",     two(0xf000, 0x3808),    two(0xffc0, 0xfe18),    "D3T9&s" },
+{"pflush",     two(0xf000, 0x3000),    two(0xffc0, 0xfe1e),    "f3T9" },
+{"pflush",     two(0xf000, 0x3800),    two(0xffc0, 0xfe1e),    "f3T9&s" },
+
+{"pflushs",    two(0xf000, 0x3410),    two(0xfff8, 0xfe10),    "T3T9" },
+{"pflushs",    two(0xf000, 0x3c00),    two(0xfff8, 0xfe00),    "T3T9&s" },
+
+#ifdef comment
+ /* gas's version had this instead. */
+{"pflushs",    two(0xf000, 0x3c10),    two(0xfff8, 0xfe00),    "T3T9&s" },
+#endif /* comment */
+
+{"pflushs",    two(0xf000, 0x3408),    two(0xfff8, 0xfe18),    "D3T9" },
+{"pflushs",    two(0xf000, 0x3c08),    two(0xfff8, 0xfe18),    "D3T9&s" },
+{"pflushs",    two(0xf000, 0x3400),    two(0xfff8, 0xfe1e),    "f3T9" },
+{"pflushs",    two(0xf000, 0x3c00),    two(0xfff8, 0xfe1e),    "f3T9&s"},
+
+{"pflushr",    two(0xf000, 0xa000),    two(0xffc0, 0xffff),    "|s" },
+
+{"ploadr",     two(0xf000, 0x2210),    two(0xffc0, 0xfff0),    "T3&s" },
+{"ploadr",     two(0xf000, 0x2208),    two(0xffc0, 0xfff8),    "D3&s" },
+{"ploadr",     two(0xf000, 0x2200),    two(0xffc0, 0xfffe),    "f3&s" },
+{"ploadw",     two(0xf000, 0x2010),    two(0xffc0, 0xfff0),    "T3&s" },
+{"ploadw",     two(0xf000, 0x2008),    two(0xffc0, 0xfff8),    "D3&s" },
+{"ploadw",     two(0xf000, 0x2000),    two(0xffc0, 0xfffe),    "f3&s" },
+
+/* TC, CRP, DRP, SRP, CAL, VAL, SCC, AC */
+{"pmove",      two(0xf000, 0x4000),    two(0xffc0, 0xe3ff),    "*sP8" },
+{"pmove",      two(0xf000, 0x4200),    two(0xffc0, 0xe3ff),    "P8%s" },
+{"pmove",      two(0xf000, 0x4000),    two(0xffc0, 0xe3ff),    "|sW8" },
+{"pmove",      two(0xf000, 0x4200),    two(0xffc0, 0xe3ff),    "W8~s" },
+
+/* BADx, BACx */
+{"pmove",      two(0xf000, 0x6200),    two(0xffc0, 0xe3e3),    "*sX3" },
+{"pmove",      two(0xf000, 0x6000),    two(0xffc0, 0xe3e3),    "X3%s" },
+
+/* PSR, PCSR */
+/* {"pmove",   two(0xf000, 0x6100),    two(oxffc0, oxffff),    "*sZ8" }, */
+{"pmove",      two(0xf000, 0x6000),    two(0xffc0, 0xffff),    "*sY8" },
+{"pmove",      two(0xf000, 0x6200),    two(0xffc0, 0xffff),    "Y8%s" },
+{"pmove",      two(0xf000, 0x6600),    two(0xffc0, 0xffff),    "Z8%s" },
+
+{"prestore",   one(0xf140),            one(0xffc0),            "&s"},
+{"prestore",   one(0xf158),            one(0xfff8),            "+s"},
+{"psave",      one(0xf100),            one(0xffc0),            "&s"},
+{"psave",      one(0xf100),            one(0xffc0),            "+s"},
+
+{"psac",       two(0xf040, 0x0007),    two(0xffc0, 0xffff),    "@s"},
+{"psas",       two(0xf040, 0x0006),    two(0xffc0, 0xffff),    "@s"},
+{"psbc",       two(0xf040, 0x0001),    two(0xffc0, 0xffff),    "@s"},
+{"psbs",       two(0xf040, 0x0000),    two(0xffc0, 0xffff),    "@s"},
+{"pscc",       two(0xf040, 0x000f),    two(0xffc0, 0xffff),    "@s"},
+{"pscs",       two(0xf040, 0x000e),    two(0xffc0, 0xffff),    "@s"},
+{"psgc",       two(0xf040, 0x000d),    two(0xffc0, 0xffff),    "@s"},
+{"psgs",       two(0xf040, 0x000c),    two(0xffc0, 0xffff),    "@s"},
+{"psic",       two(0xf040, 0x000b),    two(0xffc0, 0xffff),    "@s"},
+{"psis",       two(0xf040, 0x000a),    two(0xffc0, 0xffff),    "@s"},
+{"pslc",       two(0xf040, 0x0003),    two(0xffc0, 0xffff),    "@s"},
+{"psls",       two(0xf040, 0x0002),    two(0xffc0, 0xffff),    "@s"},
+{"pssc",       two(0xf040, 0x0005),    two(0xffc0, 0xffff),    "@s"},
+{"psss",       two(0xf040, 0x0004),    two(0xffc0, 0xffff),    "@s"},
+{"pswc",       two(0xf040, 0x0009),    two(0xffc0, 0xffff),    "@s"},
+{"psws",       two(0xf040, 0x0008),    two(0xffc0, 0xffff),    "@s"},
+
+{"ptestr",     two(0xf000, 0x8210),    two(0xffc0, 0xe3f0),    "T3&sQ8" },
+{"ptestr",     two(0xf000, 0x8310),    two(0xffc0, 0xe310),    "T3&sQ8A9" },
+{"ptestr",     two(0xf000, 0x8208),    two(0xffc0, 0xe3f8),    "D3&sQ8" },
+{"ptestr",     two(0xf000, 0x8308),    two(0xffc0, 0xe318),    "D3&sQ8A9" },
+{"ptestr",     two(0xf000, 0x8200),    two(0xffc0, 0xe3fe),    "f3&sQ8" },
+{"ptestr",     two(0xf000, 0x8300),    two(0xffc0, 0xe31e),    "f3&sQ8A9" },
+
+{"ptestw",     two(0xf000, 0x8010),    two(0xffc0, 0xe3f0),    "T3&sQ8" },
+{"ptestw",     two(0xf000, 0x8110),    two(0xffc0, 0xe310),    "T3&sQ8A9" },
+{"ptestw",     two(0xf000, 0x8008),    two(0xffc0, 0xe3f8),    "D3&sQ8" },
+{"ptestw",     two(0xf000, 0x8108),    two(0xffc0, 0xe318),    "D3&sQ8A9" },
+{"ptestw",     two(0xf000, 0x8000),    two(0xffc0, 0xe3fe),    "f3&sQ8" },
+{"ptestw",     two(0xf000, 0x8100),    two(0xffc0, 0xe31e),    "f3&sQ8A9" },
+
+{"ptrapacw",   two(0xf07a, 0x0007),    two(0xffff, 0xffff),    "#w"},
+{"ptrapacl",   two(0xf07b, 0x0007),    two(0xffff, 0xffff),    "#l"},
+{"ptrapac",    two(0xf07c, 0x0007),    two(0xffff, 0xffff),    ""},
+
+{"ptrapasw",   two(0xf07a, 0x0006),    two(0xffff, 0xffff),    "#w"},
+{"ptrapasl",   two(0xf07b, 0x0006),    two(0xffff, 0xffff),    "#l"},
+{"ptrapas",    two(0xf07c, 0x0006),    two(0xffff, 0xffff),    ""},
+
+{"ptrapbcw",   two(0xf07a, 0x0001),    two(0xffff, 0xffff),    "#w"},
+{"ptrapbcl",   two(0xf07b, 0x0001),    two(0xffff, 0xffff),    "#l"},
+{"ptrapbc",    two(0xf07c, 0x0001),    two(0xffff, 0xffff),    ""},
+
+{"ptrapbsw",   two(0xf07a, 0x0000),    two(0xffff, 0xffff),    "#w"},
+{"ptrapbsl",   two(0xf07b, 0x0000),    two(0xffff, 0xffff),    "#l"},
+{"ptrapbs",    two(0xf07c, 0x0000),    two(0xffff, 0xffff),    ""},
+
+{"ptrapccw",   two(0xf07a, 0x000f),    two(0xffff, 0xffff),    "#w"},
+{"ptrapccl",   two(0xf07b, 0x000f),    two(0xffff, 0xffff),    "#l"},
+{"ptrapcc",    two(0xf07c, 0x000f),    two(0xffff, 0xffff),    ""},
+
+{"ptrapcsw",   two(0xf07a, 0x000e),    two(0xffff, 0xffff),    "#w"},
+{"ptrapcsl",   two(0xf07b, 0x000e),    two(0xffff, 0xffff),    "#l"},
+{"ptrapcs",    two(0xf07c, 0x000e),    two(0xffff, 0xffff),    ""},
+
+{"ptrapgcw",   two(0xf07a, 0x000d),    two(0xffff, 0xffff),    "#w"},
+{"ptrapgcl",   two(0xf07b, 0x000d),    two(0xffff, 0xffff),    "#l"},
+{"ptrapgc",    two(0xf07c, 0x000d),    two(0xffff, 0xffff),    ""},
+
+{"ptrapgsw",   two(0xf07a, 0x000c),    two(0xffff, 0xffff),    "#w"},
+{"ptrapgsl",   two(0xf07b, 0x000c),    two(0xffff, 0xffff),    "#l"},
+{"ptrapgs",    two(0xf07c, 0x000c),    two(0xffff, 0xffff),    ""},
+
+{"ptrapicw",   two(0xf07a, 0x000b),    two(0xffff, 0xffff),    "#w"},
+{"ptrapicl",   two(0xf07b, 0x000b),    two(0xffff, 0xffff),    "#l"},
+{"ptrapic",    two(0xf07c, 0x000b),    two(0xffff, 0xffff),    ""},
+
+{"ptrapisw",   two(0xf07a, 0x000a),    two(0xffff, 0xffff),    "#w"},
+{"ptrapisl",   two(0xf07b, 0x000a),    two(0xffff, 0xffff),    "#l"},
+{"ptrapis",    two(0xf07c, 0x000a),    two(0xffff, 0xffff),    ""},
+
+{"ptraplcw",   two(0xf07a, 0x0003),    two(0xffff, 0xffff),    "#w"},
+{"ptraplcl",   two(0xf07b, 0x0003),    two(0xffff, 0xffff),    "#l"},
+{"ptraplc",    two(0xf07c, 0x0003),    two(0xffff, 0xffff),    ""},
+
+{"ptraplsw",   two(0xf07a, 0x0002),    two(0xffff, 0xffff),    "#w"},
+{"ptraplsl",   two(0xf07b, 0x0002),    two(0xffff, 0xffff),    "#l"},
+{"ptrapls",    two(0xf07c, 0x0002),    two(0xffff, 0xffff),    ""},
+
+{"ptrapscw",   two(0xf07a, 0x0005),    two(0xffff, 0xffff),    "#w"},
+{"ptrapscl",   two(0xf07b, 0x0005),    two(0xffff, 0xffff),    "#l"},
+{"ptrapsc",    two(0xf07c, 0x0005),    two(0xffff, 0xffff),    ""},
+
+{"ptrapssw",   two(0xf07a, 0x0004),    two(0xffff, 0xffff),    "#w"},
+{"ptrapssl",   two(0xf07b, 0x0004),    two(0xffff, 0xffff),    "#l"},
+{"ptrapss",    two(0xf07c, 0x0004),    two(0xffff, 0xffff),    ""},
+
+{"ptrapwcw",   two(0xf07a, 0x0009),    two(0xffff, 0xffff),    "#w"},
+{"ptrapwcl",   two(0xf07b, 0x0009),    two(0xffff, 0xffff),    "#l"},
+{"ptrapwc",    two(0xf07c, 0x0009),    two(0xffff, 0xffff),    ""},
+
+{"ptrapwsw",   two(0xf07a, 0x0008),    two(0xffff, 0xffff),    "#w"},
+{"ptrapwsl",   two(0xf07b, 0x0008),    two(0xffff, 0xffff),    "#l"},
+{"ptrapws",    two(0xf07c, 0x0008),    two(0xffff, 0xffff),    ""},
+
+{"pvalid",     two(0xf000, 0x2800),    two(0xffc0, 0xffff),    "Vs&s"},
+{"pvalid",     two(0xf000, 0x2c00),    two(0xffc0, 0xfff8),    "A3&s" },
+
+#endif /* m68851 */
+
+};
+
+int numopcodes=sizeof(m68k_opcodes)/sizeof(m68k_opcodes[0]);
+
+struct m68k_opcode *endop = m68k_opcodes+sizeof(m68k_opcodes)/sizeof(m68k_opcodes[0]);
diff --git a/include/m88k-opcode.h b/include/m88k-opcode.h
new file mode 100755 (executable)
index 0000000..c5e643a
--- /dev/null
@@ -0,0 +1,585 @@
+/* This file has been modified by Data General Corporation, November 1989. */
+
+
+/*
+*                      Disassembler Instruction Table
+*
+*      The first field of the table is the opcode field. If an opcode
+*      is specified which has any non-opcode bits on, a system error
+*      will occur when the system attempts the install it into the
+*      instruction table.  The second parameter is a pointer to the
+*      instruction mnemonic. Each operand is specified by offset, width,
+*      and type. The offset is the bit number of the least significant
+*      bit of the operand with bit 0 being the least significant bit of
+*      the instruction. The width is the number of bits used to specify
+*      the operand. The type specifies the output format to be used for
+*      the operand. The valid formats are: register, register indirect,
+*      hex constant, and bit field specification.  The last field is a
+*      pointer to the next instruction in the linked list.  These pointers
+*      are initialized by init_disasm().
+*
+*                              Structure Format
+*
+*       struct INSTAB {
+*          UPINT opcode;
+*          char *mnemonic;
+*          struct OPSPEC op1,op2,op3;
+*          struct SIM_FLAGS flgs;
+*          struct INSTAB *next;
+*       }
+*
+*       struct OPSPEC {
+*          UPINT offset:5;
+*          UPINT width:6;
+*          UPINT type:5;
+*       }
+*
+*                              Revision History
+*
+*      Revision 1.0    11/08/85        Creation date
+*               1.1    02/05/86        Updated instruction mnemonic table MD
+*               1.2    06/16/86        Updated SIM_FLAGS for floating point
+*               1.3    09/20/86        Updated for new encoding
+*                      05/11/89        R. Trawick adapted from Motorola disassembler
+*/
+
+#include <stdio.h>
+
+
+/*
+ * This file contains the structures and constants needed to build the M88000
+ * simulator.  It is the main include file, containing all the
+ * structures, macros and definitions except for the floating point
+ * instruction set.
+ */
+
+/*
+ * The following flag informs the Simulator as to what type of byte ordering
+ * will be used. For instance, a BOFLAG = 1 indicates a DEC VAX and IBM type
+ * of ordering shall be used.
+*/
+
+/* # define     BOFLAG   1                       /* BYTE ORDERING FLAG */
+
+/* define the number of bits in the primary opcode field of the instruction,
+ * the destination field, the source 1 and source 2 fields.
+ */
+# define    OP       8                        /* size of opcode field */ 
+# define    DEST     6                        /* size of destination  */
+# define    SOURCE1  6                        /* size of source1      */
+# define    SOURCE2  6                        /* size of source2      */
+
+# define    REGs    32                        /* number of registers  */
+
+# define    WORD    long
+# define    FLAG    unsigned
+# define    STATE   short 
+
+# define    TRUE     1
+# define    FALSE    0
+
+# define    READ     0
+# define    WRITE    1
+
+/* The next four equates define the priorities that the various classes
+ * of instructions have regarding writing results back into registers and
+ * signalling exceptions.
+ */
+
+# define    PINT  0   /* Integer Priority */
+# define    PFLT  1   /* Floating Point Priority */
+# define    PMEM  2   /* Memory Priority */
+# define    NA    3   /* Not Applicable, instruction doesnt write to regs */
+# define    HIPRI 3   /* highest of these priorities */
+
+/* The instruction registers are an artificial mechanism to speed up
+ * simulator execution.  In the real processor, an instruction register
+ * is 32 bits wide.  In the simulator, the 32 bit instruction is kept in
+ * a structure field called rawop, and the instruction is partially decoded,
+ * and split into various fields and flags which make up the other fields
+ * of the structure.
+ * The partial decode is done when the instructions are initially loaded
+ * into simulator memory.  The simulator code memory is not an array of
+ * 32 bit words, but is an array of instruction register structures.
+ * Yes this wastes memory, but it executes much quicker.
+ */
+
+struct IR_FIELDS {
+                   unsigned long   op:OP,
+                                   dest: DEST,
+                                   src1: SOURCE1,
+                                   src2: SOURCE2;
+                             int   ltncy,
+                                   extime,
+                                   wb_pri;     /* writeback priority     */
+                   unsigned short  imm_flags:2,/* immediate size         */
+                                   rs1_used:1, /* register source 1 used */
+                                   rs2_used:1, /* register source 2 used */
+                                   rsd_used:1, /* register source/dest. used */
+                                   c_flag:1,   /* complement      */
+                                   u_flag:1,   /* upper half word */
+                                   n_flag:1,   /* execute next    */
+                                   wb_flag:1,  /* uses writeback slot */
+                                   dest_64:1,  /* dest size       */
+                                   s1_64:1,    /* source 1 size   */
+                                   s2_64:1,    /* source 2 size   */
+                                   scale_flag:1, /* scaled register */
+                                   brk_flg:1;
+                 };
+
+struct mem_segs {
+       struct mem_wrd *seg;                    /* pointer (returned by calloc) to segment */
+       unsigned long baseaddr;                 /* base load address from file headers */
+       unsigned long endaddr;                  /* Ending address of segment */
+       int           flags;                    /* segment control flags (none defined 12/5/86) */
+};
+
+#define        MAXSEGS         (10)                    /* max number of segment allowed */
+#define        MEMSEGSIZE      (sizeof(struct mem_segs))/* size of mem_segs structure */
+
+
+#define BRK_RD         (0x01)                  /* break on memory read */
+#define BRK_WR         (0x02)                  /* break on memory write */
+#define BRK_EXEC       (0x04)                  /* break on execution */
+#define        BRK_CNT         (0x08)                  /* break on terminal count */
+
+
+struct mem_wrd {
+       struct IR_FIELDS opcode;                /* simulator instruction break down */
+       union {
+               unsigned long  l;               /* memory element break down */
+               unsigned short s[2];
+               unsigned char  c[4];
+       } mem;
+};
+
+#define        MEMWRDSIZE      (sizeof(struct mem_wrd))        /* size of each 32 bit memory model */
+
+/* External declarations */
+
+extern struct mem_segs memory[];
+extern struct PROCESSOR m78000;
+
+struct  PROCESSOR   {
+            unsigned WORD
+                           ip,          /* execute instruction pointer */
+                           vbr,         /* vector base register */
+                           psr;         /* processor status register */
+
+                   WORD    S1bus, /* source 1 */
+                            S2bus, /* source 2 */
+                            Dbus,  /* destination */
+                           DAbus, /* data address bus */
+                            ALU,
+                           Regs[REGs],       /* data registers */
+                           time_left[REGs],  /* max clocks before reg is available */
+                           wb_pri[REGs],     /* writeback priority of reg */
+                           SFU0_regs[REGs],  /* integer unit control regs */
+                           SFU1_regs[REGs],  /* floating point control regs */
+                           Scoreboard[REGs],
+                           Vbr;
+           unsigned WORD   scoreboard,
+                           Psw,
+                           Tpsw;
+                   FLAG   jump_pending:1;   /* waiting for a jump instr. */
+                    };
+
+# define    i26bit      1    /* size of immediate field */
+# define    i16bit      2
+# define    i10bit      3
+
+/* Definitions for fields in psr */
+
+# define mode  31
+# define rbo   30
+# define ser   29
+# define carry 28
+# define sf7m  11
+# define sf6m  10
+# define sf5m   9
+# define sf4m   8
+# define sf3m   7
+# define sf2m   6
+# define sf1m   5
+# define mam    4
+# define inm    3
+# define exm    2
+# define trm    1
+# define ovfm   0
+
+#define            MODEMASK   (1<<(mode-1))
+# define    SILENT     0   /* simulate without output to crt */
+# define    VERBOSE    1   /* simulate in verbose mode */
+# define    PR_INSTR   2   /* only print instructions */
+
+# define    RESET      16 /* reset phase */
+
+# define    PHASE1     0  /* data path phases */
+# define    PHASE2     1
+
+/* the 1 clock operations */
+
+# define    ADDU        1
+# define    ADDC        2
+# define    ADDUC       3
+# define    ADD         4
+
+# define    SUBU    ADD+1
+# define    SUBB    ADD+2
+# define    SUBUB   ADD+3
+# define    SUB     ADD+4
+
+# define    AND     ADD+5
+# define    OR      ADD+6
+# define    XOR     ADD+7
+# define    CMP     ADD+8
+                        
+/* the LOADS */
+
+# define    LDAB    CMP+1
+# define    LDAH    CMP+2
+# define    LDA     CMP+3
+# define    LDAD    CMP+4
+
+# define    LDB   LDAD+1
+# define    LDH   LDAD+2
+# define    LD    LDAD+3
+# define    LDD   LDAD+4
+# define    LDBU  LDAD+5
+# define    LDHU  LDAD+6
+
+/* the STORES */
+
+# define    STB    LDHU+1
+# define    STH    LDHU+2
+# define    ST     LDHU+3
+# define    STD    LDHU+4
+
+/* the exchange */
+
+# define    XMEMBU LDHU+5
+# define    XMEM   LDHU+6
+
+/* the branches */
+# define    JSR    STD+1
+# define    BSR    STD+2
+# define    BR     STD+3
+# define    JMP    STD+4
+# define    BB1    STD+5
+# define    BB0    STD+6
+# define    RTN    STD+7
+# define    BCND   STD+8
+
+/* the TRAPS */
+# define    TB1    BCND+1
+# define    TB0    BCND+2
+# define    TCND   BCND+3
+# define    RTE    BCND+4
+# define    TBND   BCND+5
+
+/* the MISC instructions */
+# define    MUL     TBND + 1
+# define    DIV     MUL  +2
+# define    DIVU    MUL  +3
+# define    MASK    MUL  +4
+# define    FF0     MUL  +5
+# define    FF1     MUL  +6
+# define    CLR     MUL  +7
+# define    SET     MUL  +8
+# define    EXT     MUL  +9
+# define    EXTU    MUL  +10
+# define    MAK     MUL  +11
+# define    ROT     MUL  +12
+
+/* control register manipulations */
+
+# define    LDCR    ROT  +1
+# define    STCR    ROT  +2
+# define    XCR     ROT  +3
+
+# define    FLDCR    ROT  +4
+# define    FSTCR    ROT  +5
+# define    FXCR     ROT  +6
+
+
+# define    NOP     XCR +1
+
+/* floating point instructions */
+
+# define    FADD    NOP +1
+# define    FSUB    NOP +2
+# define    FMUL    NOP +3
+# define    FDIV    NOP +4
+# define    FSQRT   NOP +5
+# define    FCMP    NOP +6
+# define    FIP     NOP +7
+# define    FLT     NOP +8
+# define    INT     NOP +9
+# define    NINT    NOP +10
+# define    TRNC    NOP +11
+# define    FLDC   NOP +12
+# define    FSTC   NOP +13
+# define    FXC    NOP +14
+
+# define UEXT(src,off,wid) ((((unsigned int)(src))>>(off)) & ((1<<(wid)) - 1))
+# define SEXT(src,off,wid) (((((int)(src))<<(32-((off)+(wid)))) >>(32-(wid))) )
+# define MAKE(src,off,wid) \
+  ((((unsigned int)(src)) & ((1<<(wid)) - 1)) << (off))
+
+# define opword(n) (unsigned long) (memaddr->mem.l)
+
+/*  Constants and Masks */
+
+#define SFU0       0x80000000
+#define SFU1       0x84000000
+#define SFU7       0x9c000000
+#define RRI10      0xf0000000
+#define RRR        0xf4000000
+#define SFUMASK    0xfc00ffe0
+#define RRRMASK    0xfc00ffe0
+#define RRI10MASK  0xfc00fc00
+#define DEFMASK    0xfc000000
+#define CTRL       0x0000f000
+#define CTRLMASK   0xfc00f800
+
+/* Operands types */
+
+#define HEX          1
+#define REG          2
+#define IND          3
+#define CONT         3
+#define IND          3
+#define BF           4
+#define REGSC        5    /* scaled register */
+#define CRREG        6    /* control register */
+#define FCRREG       7    /* floating point control register */
+#define PCREL       8
+#define CONDMASK     9
+
+/* Hashing Specification */
+
+#define HASHVAL     79
+
+/* Type definitions */
+
+typedef unsigned int UINT;
+
+/* Structure templates */
+
+typedef struct {
+   unsigned int offset:5;
+   unsigned int width:6;
+   unsigned int type:5;
+} OPSPEC;
+
+       struct SIM_FLAGS {
+             int  ltncy,   /* latency (max number of clocks needed to execute) */
+                 extime,   /* execution time (min number of clocks needed to execute) */
+                 wb_pri;   /* writeback slot priority */
+   unsigned long   op:OP,   /* simulator version of opcode */
+            imm_flags:2,   /* 10,16 or 26 bit immediate flags */
+             rs1_used:1,   /* register source 1 used */
+             rs2_used:1,   /* register source 2 used */
+             rsd_used:1,   /* register source/dest used */
+               c_flag:1,   /* complement */
+               u_flag:1,   /* upper half word */
+               n_flag:1,   /* execute next */
+              wb_flag:1,   /* uses writeback slot */
+              dest_64:1,   /* double precision dest */
+                s1_64:1,   /* double precision source 1 */
+                s2_64:1,   /* double precision source 2 */
+           scale_flag:1;   /* register is scaled */
+};
+
+typedef struct INSTRUCTAB {
+   unsigned int  opcode;
+   char          *mnemonic;
+   OPSPEC        op1,op2,op3;
+   struct SIM_FLAGS flgs;
+   struct INSTRUCTAB    *next;
+} INSTAB;
+\f
+
+/* Opcode     Mnemonic       Op 1 Spec     Op 2 Spec    Op 3 Spec         Simflags             Next  */
+
+static INSTAB  instructions[] =
+{0xf400c800,"jsr      ",{0,5,REG}   ,{0,0,0}      ,{0,0,0}   , {2,2,NA,JSR ,          0,0,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xf400cc00,"jsr.n    ",{0,5,REG}   ,{0,0,0}      ,{0,0,0}   , {1,1,NA,JSR ,          0,0,1,0,0,0,1,1,0,0,0,0}, NULL,
+ 0xf400c000,"jmp      ",{0,5,REG}   ,{0,0,0}      ,{0,0,0}   , {2,2,NA,JMP ,          0,0,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xf400c400,"jmp.n    ",{0,5,REG}   ,{0,0,0}      ,{0,0,0}   , {1,1,NA,JMP ,          0,0,1,0,0,0,1,1,0,0,0,0}, NULL,
+ 0xc8000000,"bsr      ",{0,26,PCREL},{0,0,0}      ,{0,0,0}   , {2,2,NA,BSR ,     i26bit,0,0,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xcc000000,"bsr.n    ",{0,26,PCREL},{0,0,0}      ,{0,0,0}   , {1,1,NA,BSR ,     i26bit,0,0,0,0,0,1,1,0,0,0,0}, NULL,
+ 0xc0000000,"br       ",{0,26,PCREL},{0,0,0}      ,{0,0,0}   , {2,2,NA,BR  ,     i26bit,0,0,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xc4000000,"br.n     ",{0,26,PCREL},{0,0,0}      ,{0,0,0}   , {1,1,NA,BR  ,     i26bit,0,0,0,0,0,1,1,0,0,0,0}, NULL,
+ 0xd0000000,"bb0      ",{21,5,HEX}  ,{16,5,REG}   ,{0,16,PCREL},{2,2,NA,BB0,     i16bit,0,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xd4000000,"bb0.n    ",{21,5,HEX}  ,{16,5,REG}   ,{0,16,PCREL},{1,1,NA,BB0,     i16bit,0,1,0,0,0,1,1,0,0,0,0}, NULL,
+ 0xd8000000,"bb1      ",{21,5,HEX},{16,5,REG}     ,{0,16,PCREL},{2,2,NA,BB1,     i16bit,0,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xdc000000,"bb1.n    ",{21,5,HEX},{16,5,REG}     ,{0,16,PCREL},{1,1,NA,BB1,     i16bit,0,1,0,0,0,1,1,0,0,0,0}, NULL,
+ 0xf000d000,"tb0      ",{21,5,HEX}  ,{16,5,REG}   ,{0,10,HEX}, {2,2,NA,TB0 ,     i10bit,0,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xf000d800,"tb1      ",{21,5,HEX}  ,{16,5,REG}   ,{0,10,HEX}, {2,2,NA,TB1 ,     i10bit,0,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xe8000000,"bcnd     ",{21,5,CONDMASK},{16,5,REG},{0,16,PCREL},{2,2,NA,BCND,    i16bit,0,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xec000000,"bcnd.n   ",{21,5,CONDMASK},{16,5,REG},{0,16,PCREL},{1,1,NA,BCND,    i16bit,0,1,0,0,0,1,1,0,0,0,0}, NULL,
+ 0xf000e800,"tcnd     ",{21,5,CONDMASK},{16,5,REG},{0,10,HEX}, {2,2,NA,TCND,     i10bit,0,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xf8000000,"tbnd     ",{16,5,REG}  ,{0,16,HEX}   ,{0,0,0}   , {2,2,NA,TBND,     i10bit,1,0,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xf400f800,"tbnd     ",{16,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {2,2,NA,TBND,          0,1,1,0,0,0,0,1,0,0,0,0}, NULL,
+ 0xf400fc00,"rte      ",{0,0,0}     ,{0,0,0}      ,{0,0,0}   , {2,2,NA,RTE ,          0,0,0,0,0,0,0,1,0,0,0,0}, NULL,
+ 0x1c000000,"ld.b     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {3,1,PMEM,LDB    ,i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4001c00,"ld.b     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,LDB     ,    0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0x0c000000,"ld.bu    ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {3,1,PMEM,LDBU,   i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4000c00,"ld.bu    ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,LDBU        ,0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0x18000000,"ld.h     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {3,1,PMEM,LDH    ,i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4001800,"ld.h     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,LDH         ,0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4001a00,"ld.h     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{3,1,PMEM,LDH         ,0,1,1,1,0,0,0,1,0,0,0,1}, NULL,
+ 0x08000000,"ld.hu    ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {3,1,PMEM,LDHU,   i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4000800,"ld.hu    ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,LDHU        ,0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4000a00,"ld.hu    ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{3,1,PMEM,LDHU        ,0,1,1,1,0,0,0,1,0,0,0,1}, NULL,
+ 0x14000000,"ld       ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {3,1,PMEM,LD     ,i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4001400,"ld       ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,LD          ,0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4001600,"ld       ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{3,1,PMEM,LD          ,0,1,1,1,0,0,0,1,0,0,0,1}, NULL,
+ 0x10000000,"ld.d     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {3,1,PMEM,LDD    ,i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4001000,"ld.d     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,LDD         ,0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4001200,"ld.d     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{3,1,PMEM,LDD         ,0,1,1,1,0,0,0,1,0,0,0,1}, NULL,
+ 0xf4001500,"ld.usr   ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,LD          ,0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4001700,"ld.usr   ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{3,1,PMEM,LD          ,0,1,1,1,0,0,0,1,0,0,0,1}, NULL,
+ 0x2c000000,"st.b     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,NA,STB      ,i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4002c00,"st.b     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,NA,STB           ,0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0x28000000,"st.h     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,NA,STH      ,i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4002800,"st.h     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,NA,STH           ,0,1,1,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4002a00,"st.h     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{1,1,NA,STH           ,0,1,1,1,0,0,0,1,0,0,0,1}, NULL,
+ 0x24000000,"st       ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,NA,ST       ,i16bit,1,0,1,0,0,0,1,0,0,0,0}, NULL,
+ 0xf4002400,"st       ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,NA,ST            ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0xf4002600,"st       ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{1,1,NA,ST            ,0,1,1,1,0,0,0,1,0,0,0,1}   ,NULL,
+ 0x20000000,"st.d     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,NA,STD      ,i16bit,0,1,0,0,0,0,1,0,0,0,0}   ,NULL,
+ 0xf4002000,"st.d     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,NA,STD           ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0xf4002200,"st.d     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{1,1,NA,STD           ,0,1,1,1,0,0,0,1,0,0,0,1}   ,NULL,
+ 0xf4002500,"st.usr   ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,NA,ST            ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0xf4002700,"st.usr   ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{1,1,NA,ST            ,0,1,1,1,0,0,0,1,0,0,0,1}   ,NULL,
+ 0x00000000,"xmem.bu  ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {3,1,PMEM,XMEMBU ,i16bit,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0xf4000000,"xmem.bu  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,XMEM        ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x04000000,"xmem     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {3,1,PMEM,XMEM   ,i16bit,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0xf4000400,"xmem     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,XMEM        ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0xf4000600,"xmem     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{3,1,PMEM,XMEM        ,0,1,1,1,0,0,0,1,0,0,0,1}   ,NULL,
+ 0xf4000500,"xmem.usr ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {3,1,PMEM,XMEM        ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0xf4000700,"xmem.usr ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{3,1,PMEM,XMEM        ,0,1,1,1,0,0,0,1,0,0,0,1}   ,NULL,
+ 0xf4003e00,"lda.b    ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{1,1,PINT,LDAH,        0,1,1,1,0,0,0,0,0,0,0,1}   ,NULL,
+ 0xf4003a00,"lda.h    ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{1,1,PINT,LDAH,        0,1,1,1,0,0,0,0,0,0,0,1}   ,NULL,
+ 0xf4003600,"lda      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{1,1,PINT,LDA ,        0,1,1,1,0,0,0,0,0,0,0,1}   ,NULL,
+ 0xf4003200,"lda.d    ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REGSC},{1,1,PINT,LDAD,        0,1,1,1,0,0,0,0,0,0,0,1}   ,NULL,
+
+ 0x80004000,"ldcr     ",{21,5,REG}  ,{5,6,CRREG}  ,{0,0,0}    ,{1,1,PINT,LDCR,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x80008000,"stcr     ",{16,5,REG}  ,{5,6,CRREG}  ,{0,0,0}    ,{1,1,PINT,STCR,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x8000c000,"xcr      ",{21,5,REG}  ,{16,5,REG}   ,{5,6,CRREG},{1,1,PINT,XCR,         0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+
+ 0xf4006000,"addu     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ADDU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006200,"addu.ci  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ADDU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006100,"addu.co  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ADDU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006300,"addu.cio ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ADDU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006400,"subu     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SUBU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006600,"subu.ci  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SUBU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006500,"subu.co  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SUBU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006700,"subu.cio ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SUBU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006900,"divu     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {32,32,PINT,DIVU,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4006d00,"mul      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,4,PINT,MUL,      0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007000,"add      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ADD ,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007200,"add.ci   ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ADD ,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007100,"add.co   ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ADD ,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007300,"add.cio  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ADD ,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007400,"sub      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SUB ,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007600,"sub.ci   ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SUB ,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007500,"sub.co   ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SUB ,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007700,"sub.cio  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SUB ,        0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007900,"div      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {32,32,PINT,DIV ,      0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4007d00,"cmp      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,CMP,         0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+
+ 0x60000000,"addu     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,ADDU,   i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x64000000,"subu     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,SUBU,   i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+
+ 0x68000000,"divu     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {32,32,PINT,DIVU, i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x6c000000,"mul      ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {4,1,PINT,MUL,    i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x70000000,"add      ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,ADD,    i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x74000000,"sub      ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,SUB,    i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x78000000,"div      ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {32,32,PINT,DIV,  i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x7c000000,"cmp      ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,CMP,    i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+
+ 0xf4004000,"and      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,AND         ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4004400,"and.c    ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,AND         ,0,1,1,1,1,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4005800,"or       ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,OR          ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4005c00,"or.c     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,OR          ,0,1,1,1,1,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4005000,"xor      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,XOR         ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4005400,"xor.c    ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,XOR         ,0,1,1,1,1,0,0,0,0,0,0,0}   ,NULL,
+ 0x40000000,"and      ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,AND    ,i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x44000000,"and.u    ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,AND    ,i16bit,1,0,1,0,1,0,0,0,0,0,0}   ,NULL,
+ 0x58000000,"or       ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,OR     ,i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x5c000000,"or.u     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,OR     ,i16bit,1,0,1,0,1,0,0,0,0,0,0}   ,NULL,
+ 0x50000000,"xor      ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,XOR    ,i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x54000000,"xor.u    ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,XOR    ,i16bit,1,0,1,0,1,0,0,0,0,0,0}   ,NULL,
+ 0x48000000,"mask     ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,MASK   ,i16bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0x4c000000,"mask.u   ",{21,5,REG}  ,{16,5,REG}   ,{0,16,HEX}, {1,1,PINT,MASK   ,i16bit,1,0,1,0,1,0,0,0,0,0,0}   ,NULL,
+ 0xf400ec00,"ff0      ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {1,1,PINT,FF0         ,0,0,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf400e800,"ff1      ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {1,1,PINT,FF1         ,0,0,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf0008000,"clr      ",{21,5,REG}  ,{16,5,REG}   ,{0,10,BF} , {1,1,PINT,CLR    ,i10bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf0008800,"set      ",{21,5,REG}  ,{16,5,REG}   ,{0,10,BF} , {1,1,PINT,SET    ,i10bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf0009000,"ext      ",{21,5,REG}  ,{16,5,REG}   ,{0,10,BF} , {1,1,PINT,EXT    ,i10bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf0009800,"extu     ",{21,5,REG}  ,{16,5,REG}   ,{0,10,BF} , {1,1,PINT,EXTU   ,i10bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf000a000,"mak      ",{21,5,REG}  ,{16,5,REG}   ,{0,10,BF} , {1,1,PINT,MAK    ,i10bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf000a800,"rot      ",{21,5,REG}  ,{16,5,REG}   ,{0,10,BF} , {1,1,PINT,ROT    ,i10bit,1,0,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4008000,"clr      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,CLR         ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4008800,"set      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,SET         ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4009000,"ext      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,EXT         ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf4009800,"extu     ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,EXTU        ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf400a000,"mak      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,MAK         ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+ 0xf400a800,"rot      ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {1,1,PINT,ROT         ,0,1,1,1,0,0,0,0,0,0,0,0}   ,NULL,
+
+ 0x84002800,"fadd.sss ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {5,1,PFLT,FADD        ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84002880,"fadd.ssd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FADD        ,0,1,1,1,0,0,0,1,0,0,1,0}   ,NULL,
+ 0x84002a00,"fadd.sds ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FADD        ,0,1,1,1,0,0,0,1,0,1,0,0}   ,NULL,
+ 0x84002a80,"fadd.sdd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FADD        ,0,1,1,1,0,0,0,1,0,1,1,0}   ,NULL,
+ 0x84002820,"fadd.dss ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FADD        ,0,1,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x840028a0,"fadd.dsd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FADD        ,0,1,1,1,0,0,0,1,1,0,1,0}   ,NULL,
+ 0x84002a20,"fadd.dds ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FADD        ,0,1,1,1,0,0,0,1,1,1,0,0}   ,NULL,
+ 0x84002aa0,"fadd.ddd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FADD        ,0,1,1,1,0,0,0,1,1,1,1,0}   ,NULL,
+ 0x84003000,"fsub.sss ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {5,1,PFLT,FSUB        ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84003080,"fsub.ssd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FSUB        ,0,1,1,1,0,0,0,1,0,0,1,0}   ,NULL,
+ 0x84003200,"fsub.sds ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FSUB        ,0,1,1,1,0,0,0,1,0,1,0,0}   ,NULL,
+ 0x84003280,"fsub.sdd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FSUB        ,0,1,1,1,0,0,0,1,0,1,1,0}   ,NULL,
+ 0x84003020,"fsub.dss ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FSUB        ,0,1,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x840030a0,"fsub.dsd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FSUB        ,0,1,1,1,0,0,0,1,1,0,1,0}   ,NULL,
+ 0x84003220,"fsub.dds ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FSUB        ,0,1,1,1,0,0,0,1,1,1,0,0}   ,NULL,
+ 0x840032a0,"fsub.ddd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,2,PFLT,FSUB        ,0,1,1,1,0,0,0,1,1,1,1,0}   ,NULL,
+ 0x84000000,"fmul.sss ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,1,PFLT,FMUL        ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84000080,"fmul.ssd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {9,2,PFLT,FMUL        ,0,1,1,1,0,0,0,1,0,0,1,0}   ,NULL,
+ 0x84000200,"fmul.sds ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {9,2,PFLT,FMUL        ,0,1,1,1,0,0,0,1,0,1,0,0}   ,NULL,
+ 0x84000280,"fmul.sdd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {9,2,PFLT,FMUL        ,0,1,1,1,0,0,0,1,0,1,1,0}   ,NULL,
+ 0x84000020,"fmul.dss ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {9,2,PFLT,FMUL        ,0,1,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x840000a0,"fmul.dsd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {9,2,PFLT,FMUL        ,0,1,1,1,0,0,0,1,1,0,1,0}   ,NULL,
+ 0x84000220,"fmul.dds ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {9,2,PFLT,FMUL        ,0,1,1,1,0,0,0,1,1,1,0,0}   ,NULL,
+ 0x840002a0,"fmul.ddd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {9,2,PFLT,FMUL        ,0,1,1,1,0,0,0,1,1,1,1,0}   ,NULL,
+ 0x84007000,"fdiv.sss ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {30,30,PFLT,FDIV      ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84007080,"fdiv.ssd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {60,60,PFLT,FDIV      ,0,1,1,1,0,0,0,1,0,0,1,0}   ,NULL,
+ 0x84007200,"fdiv.sds ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {60,60,PFLT,FDIV      ,0,1,1,1,0,0,0,1,0,1,0,0}   ,NULL,
+ 0x84007280,"fdiv.sdd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {60,60,PFLT,FDIV      ,0,1,1,1,0,0,0,1,0,1,1,0}   ,NULL,
+ 0x84007020,"fdiv.dss ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {60,60,PFLT,FDIV      ,0,1,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x840070a0,"fdiv.dsd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {60,60,PFLT,FDIV      ,0,1,1,1,0,0,0,1,1,0,1,0}   ,NULL,
+ 0x84007220,"fdiv.dds ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {60,60,PFLT,FDIV      ,0,1,1,1,0,0,0,1,1,1,0,0}   ,NULL,
+ 0x840072a0,"fdiv.ddd ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {60,60,PFLT,FDIV      ,0,1,1,1,0,0,0,1,1,1,1,0}   ,NULL,
+ 0x84007800,"fsqrt.ss ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {5,1,PFLT,FLT         ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84007880,"fsqrt.sd ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {5,1,PFLT,FLT         ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84007820,"fsqrt.ds ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {5,1,PFLT,FLT         ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x840078a0,"fsqrt.dd ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {6,1,PFLT,FLT         ,0,0,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x84003800,"fcmp.ss  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {5,1,PFLT,FCMP        ,0,1,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84003880,"fcmp.sd  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,1,PFLT,FCMP        ,0,1,1,1,0,0,0,1,0,1,0,0}   ,NULL,
+ 0x84003a00,"fcmp.ds  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,1,PFLT,FCMP        ,0,1,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x84003a80,"fcmp.dd  ",{21,5,REG}  ,{16,5,REG}   ,{0,5,REG} , {6,1,PFLT,FCMP        ,0,1,1,1,0,0,0,1,1,1,0,0}   ,NULL,
+ 0x84002000,"flt.s    ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {5,1,PFLT,FLT         ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84002020,"flt.d    ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {6,1,PFLT,FLT         ,0,0,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x84004800,"int.s    ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {5,1,PFLT,INT         ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84004880,"int.d    ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {6,1,PFLT,INT         ,0,0,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x84005000,"nint.s   ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {5,1,PFLT,INT         ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84005080,"nint.d   ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {6,1,PFLT,INT         ,0,0,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+ 0x84005800,"trnc.s   ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {5,1,PFLT,TRNC        ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x84005880,"trnc.d   ",{21,5,REG}  ,{0,5,REG}    ,{0,0,0}   , {6,1,PFLT,TRNC        ,0,0,1,1,0,0,0,1,1,0,0,0}   ,NULL,
+
+ 0x80004800,"fldcr    ",{21,5,REG}  ,{5,6,FCRREG} ,{0,0,0}   , {1,1,PFLT,FLDC        ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x80008800,"fstcr    ",{16,5,REG}  ,{5,6,FCRREG} ,{0,0,0}   , {1,1,PFLT,FSTC        ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL,
+ 0x8000c800,"fxcr     ",{21,5,REG}  ,{16,5,REG}   ,{5,6,FCRREG} , {1,1,PFLT,FXC         ,0,0,1,1,0,0,0,1,0,0,0,0}   ,NULL};
+
diff --git a/include/mips-opcode.h b/include/mips-opcode.h
new file mode 100755 (executable)
index 0000000..a65678a
--- /dev/null
@@ -0,0 +1,363 @@
+/* Mips opcde list for GDB, the GNU debugger.
+   Copyright (C) 1989 Free Software Foundation, Inc.
+   Contributed by Nobuyuki Hikichi(hikichi@sra.junet)
+   Made to work for little-endian machines, and debugged
+   by Per Bothner (bothner@cs.wisc.edu).
+   Many fixes contributed by Frank Yellin (fy@lucid.com).
+
+This file is part of GDB.
+
+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 1, or (at your option)
+any later version.
+
+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 GDB; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#if BITS_BIG_ENDIAN
+#define BIT_FIELDS_2(a,b) a;b;
+#define BIT_FIELDS_4(a,b,c,d) a;b;c;d;
+#define BIT_FIELDS_6(a,b,c,d,e,f) a;b;c;d;e;f;
+#else
+#define BIT_FIELDS_2(a,b) b;a;
+#define BIT_FIELDS_4(a,b,c,d) d;c;b;a;
+#define BIT_FIELDS_6(a,b,c,d,e,f) f;e;d;c;b;a;
+#endif
+
+struct op_i_fmt
+{
+BIT_FIELDS_4(
+  unsigned op : 6,
+  unsigned rs : 5,
+  unsigned rt : 5,
+  unsigned immediate : 16)
+};
+
+struct op_j_fmt
+{
+BIT_FIELDS_2(
+  unsigned op : 6,
+  unsigned target : 26)
+};
+
+struct op_r_fmt
+{
+BIT_FIELDS_6(
+  unsigned op : 6,
+  unsigned rs : 5,
+  unsigned rt : 5,
+  unsigned rd : 5,
+  unsigned shamt : 5,
+  unsigned funct : 6)
+};
+
+
+struct fop_i_fmt
+{
+BIT_FIELDS_4(
+  unsigned op : 6,
+  unsigned rs : 5,
+  unsigned rt : 5,
+  unsigned immediate : 16)
+};
+
+struct op_b_fmt
+{
+BIT_FIELDS_4(
+  unsigned op : 6,
+  unsigned rs : 5,
+  unsigned rt : 5,
+  short delta : 16)
+};
+
+struct fop_r_fmt
+{
+BIT_FIELDS_6(
+  unsigned op : 6,
+  unsigned fmt : 5,
+  unsigned ft : 5,
+  unsigned fs : 5,
+  unsigned fd : 5,
+  unsigned funct : 6)
+};
+
+struct mips_opcode
+{
+  char *name;
+  unsigned long opcode;
+  unsigned long match;
+  char *args;
+  int bdelay; /* Nonzero if delayed branch.  */
+};
+
+/* args format;
+
+   "s" rs: source register specifier
+   "t" rt: target register
+   "i" immediate
+   "a" target address
+   "c" branch condition
+   "d" rd: destination register specifier
+   "h" shamt: shift amount
+   "f" funct: function field
+
+  for fpu
+   "S" fs source 1 register
+   "T" ft source 2 register
+   "D" distination register
+*/
+
+#define one(x) (x << 26)
+#define op_func(x, y) ((x << 26) | y)
+#define op_cond(x, y) ((x << 26) | (y << 16))
+#define op_rs_func(x, y, z) ((x << 26) | (y << 21) | z)
+#define op_rs_b11(x, y, z) ((x << 26) | (y << 21) | z)
+#define op_o16(x, y) ((x << 26) | (y << 16))
+#define op_bc(x, y, z) ((x << 26) | (y << 21) | (z << 16))
+
+struct mips_opcode mips_opcodes[] = 
+{
+/* These first opcodes are special cases of the ones in the comments */
+  {"nop",      0,              0xffffffff,          /*li*/     "", 0},
+  {"li",       op_bc(9,0,0),   op_bc(0x3f,31,0),    /*addiu*/  "t,j", 0},
+  {"b",                one(4),         0xffff0000,          /*beq*/    "b", 1},
+  {"move",     op_func(0, 33), op_cond(0x3f,31)|0x7ff,/*addu*/ "d,s", 0},
+
+  {"sll",      op_func(0, 0),  op_func(0x3f, 0x3f),            "d,t,h", 0},
+  {"srl",      op_func(0, 2),  op_func(0x3f, 0x3f),            "d,t,h", 0},
+  {"sra",      op_func(0, 3),  op_func(0x3f, 0x3f),            "d,t,h", 0},
+  {"sllv",     op_func(0, 4),  op_func(0x3f, 0x7ff),           "d,t,s", 0},
+  {"srlv",     op_func(0, 6),  op_func(0x3f, 0x7ff),           "d,t,s", 0},
+  {"srav",     op_func(0, 7),  op_func(0x3f, 0x7ff),           "d,t,s", 0},
+  {"jr",       op_func(0, 8),  op_func(0x3f, 0x1fffff),        "s", 1},
+  {"jalr",     op_func(0, 9),  op_func(0x3f, 0x1f07ff),        "d,s", 1},
+  {"syscall",  op_func(0, 12), op_func(0x3f, 0x3f),            "", 0},
+  {"break",    op_func(0, 13), op_func(0x3f, 0x3f),            "", 0},
+  {"mfhi",      op_func(0, 16), op_func(0x3f, 0x03ff07ff),      "d", 0},
+  {"mthi",      op_func(0, 17), op_func(0x3f, 0x1fffff),        "s", 0},
+  {"mflo",      op_func(0, 18), op_func(0x3f, 0x03ff07ff),      "d", 0},
+  {"mtlo",      op_func(0, 19), op_func(0x3f, 0x1fffff),        "s", 0},
+  {"mult",     op_func(0, 24), op_func(0x3f, 0xffff),          "s,t", 0},
+  {"multu",    op_func(0, 25), op_func(0x3f, 0xffff),          "s,t", 0},
+  {"div",      op_func(0, 26), op_func(0x3f, 0xffff),          "s,t", 0},
+  {"divu",     op_func(0, 27), op_func(0x3f, 0xffff),          "s,t", 0},
+  {"add",      op_func(0, 32), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"addu",     op_func(0, 33), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"sub",      op_func(0, 34), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"subu",     op_func(0, 35), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"and",      op_func(0, 36), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"or",       op_func(0, 37), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"xor",      op_func(0, 38), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"nor",      op_func(0, 39), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"slt",      op_func(0, 42), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+  {"sltu",     op_func(0, 43), op_func(0x3f, 0x7ff),           "d,s,t", 0},
+
+  {"bltz",     op_cond (1, 0), op_cond(0x3f, 0x1f),            "s,b", 1},
+  {"bgez",     op_cond (1, 1), op_cond(0x3f, 0x1f),            "s,b", 1},
+  {"bltzal",   op_cond (1, 16),op_cond(0x3f, 0x1f),            "s,b", 1},
+  {"bgezal",   op_cond (1, 17),op_cond(0x3f, 0x1f),            "s,b", 1},
+
+
+  {"j",                one(2),         one(0x3f),                      "a", 1},
+  {"jal",      one(3),         one(0x3f),                      "a", 1},
+  {"beq",      one(4),         one(0x3f),                      "s,t,b", 1},
+  {"bne",      one(5),         one(0x3f),                      "s,t,b", 1},
+  {"blez",     one(6),         one(0x3f) | 0x1f0000,           "s,b", 1},
+  {"bgtz",     one(7),         one(0x3f) | 0x1f0000,           "s,b", 1},
+  {"addi",     one(8),         one(0x3f),                      "t,s,j", 0},
+  {"addiu",    one(9),         one(0x3f),                      "t,s,j", 0},
+  {"slti",     one(10),        one(0x3f),                      "t,s,j", 0},
+  {"sltiu",    one(11),        one(0x3f),                      "t,s,j", 0},
+  {"andi",     one(12),        one(0x3f),                      "t,s,i", 0},
+  {"ori",      one(13),        one(0x3f),                      "t,s,i", 0},
+  {"xori",     one(14),        one(0x3f),                      "t,s,i", 0},
+       /* rs field is don't care field? */
+  {"lui",      one(15),        one(0x3f),                      "t,i", 0},
+
+/* co processor 0 instruction */
+  {"mfc0",     op_rs_b11 (16, 0, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"cfc0",     op_rs_b11 (16, 2, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"mtc0",     op_rs_b11 (16, 4, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"ctc0",     op_rs_b11 (16, 6, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+
+  {"bc0f",     op_o16(16, 0x100),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc0f",     op_o16(16, 0x180),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc0t",     op_o16(16, 0x101),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc0t",     op_o16(16, 0x181),      op_o16(0x3f, 0x3ff),    "b", 1},
+
+  {"tlbr",     op_rs_func(16, 0x10, 1), ~0, "", 0},
+  {"tlbwi",    op_rs_func(16, 0x10, 2), ~0, "", 0},
+  {"tlbwr",    op_rs_func(16, 0x10, 6), ~0, "", 0},
+  {"tlbp",     op_rs_func(16, 0x10, 8), ~0, "", 0},
+  {"rfe",      op_rs_func(16, 0x10, 16), ~0, "", 0},
+
+  {"mfc1",     op_rs_b11 (17, 0, 0),   op_rs_b11(0x3f, 0x1f, 0),"t,S", 0},
+  {"cfc1",     op_rs_b11 (17, 2, 0),   op_rs_b11(0x3f, 0x1f, 0),"t,S", 0},
+  {"mtc1",     op_rs_b11 (17, 4, 0),   op_rs_b11(0x3f, 0x1f, 0),"t,S", 0},
+  {"ctc1",     op_rs_b11 (17, 6, 0),   op_rs_b11(0x3f, 0x1f, 0),"t,S", 0},
+
+  {"bc1f",     op_o16(17, 0x100),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc1f",     op_o16(17, 0x180),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc1t",     op_o16(17, 0x101),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc1t",     op_o16(17, 0x181),      op_o16(0x3f, 0x3ff),    "b", 1},
+
+/* fpu instruction */
+  {"add.s",    op_rs_func(17, 0x10, 0),
+                       op_rs_func(0x3f, 0x1f, 0x3f),   "D,S,T", 0},
+  {"add.d",    op_rs_func(17, 0x11, 0),
+                       op_rs_func(0x3f, 0x1f, 0x3f),   "D,S,T", 0},
+  {"sub.s",    op_rs_func(17, 0x10, 1),
+                       op_rs_func(0x3f, 0x1f, 0x3f),   "D,S,T", 0},
+  {"sub.d",    op_rs_func(17, 0x11, 1),
+                       op_rs_func(0x3f, 0x1f, 0x3f),   "D,S,T", 0},
+  {"mul.s",    op_rs_func(17, 0x10, 2),
+                       op_rs_func(0x3f, 0x1f, 0x3f),   "D,S,T", 0},
+  {"mul.d",    op_rs_func(17, 0x11, 2),
+                       op_rs_func(0x3f, 0x1f, 0x3f),   "D,S,T", 0},
+  {"div.s",    op_rs_func(17, 0x10, 3),
+                       op_rs_func(0x3f, 0x1f, 0x3f),   "D,S,T", 0},
+  {"div.d",    op_rs_func(17, 0x11, 3),
+                       op_rs_func(0x3f, 0x1f, 0x3f),   "D,S,T", 0},
+  {"abs.s",    op_rs_func(17, 0x10, 5),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"abs.d",    op_rs_func(17, 0x11, 5),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"mov.s",    op_rs_func(17, 0x10, 6),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"mov.d",    op_rs_func(17, 0x11, 6),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"neg.s",    op_rs_func(17, 0x10, 7),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"neg.d",    op_rs_func(17, 0x11, 7),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"cvt.s.s",  op_rs_func(17, 0x10, 32),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"cvt.s.d",  op_rs_func(17, 0x11, 32),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"cvt.s.w",  op_rs_func(17, 0x14, 32),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"cvt.d.s",  op_rs_func(17, 0x10, 33),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"cvt.d.d",  op_rs_func(17, 0x11, 33),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"cvt.d.w",  op_rs_func(17, 0x14, 33),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"cvt.w.s",  op_rs_func(17, 0x10, 36),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"cvt.w.d",  op_rs_func(17, 0x11, 36),
+                       op_rs_func(0x3f, 0x1f, 0x1f003f),       "D,S", 0},
+  {"c.f.s",    op_rs_func(17, 0x10, 48),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.f.d",    op_rs_func(17, 0x11, 48),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.un.s",   op_rs_func(17, 0x10, 49),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.un.d",   op_rs_func(17, 0x11, 49),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.eq.s",   op_rs_func(17, 0x10, 50),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.eq.d",   op_rs_func(17, 0x11, 50),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ueq.s",  op_rs_func(17, 0x10, 51),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ueq.d",  op_rs_func(17, 0x11, 51),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.olt.s",  op_rs_func(17, 0x10, 52),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.olt.d",  op_rs_func(17, 0x11, 52),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ult.s",  op_rs_func(17, 0x10, 53),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ult.d",  op_rs_func(17, 0x11, 53),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ole.s",  op_rs_func(17, 0x10, 54),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ole.d",  op_rs_func(17, 0x11, 54),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ule.s",  op_rs_func(17, 0x10, 55),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ule.d",  op_rs_func(17, 0x11, 55),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.sf.s",   op_rs_func(17, 0x10, 56),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.sf.d",   op_rs_func(17, 0x11, 56),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ngle.s", op_rs_func(17, 0x10, 57),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ngle.d", op_rs_func(17, 0x11, 57),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.seq.s",  op_rs_func(17, 0x10, 58),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.seq.d",  op_rs_func(17, 0x11, 58),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ngl.s",  op_rs_func(17, 0x10, 59),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ngl.d",  op_rs_func(17, 0x11, 59),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.lt.s",   op_rs_func(17, 0x10, 60),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.lt.d",   op_rs_func(17, 0x11, 60),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.nge.s",  op_rs_func(17, 0x10, 61),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.nge.d",  op_rs_func(17, 0x11, 61),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.le.s",   op_rs_func(17, 0x10, 62),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.le.d",   op_rs_func(17, 0x11, 62),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ngt.s",  op_rs_func(17, 0x10, 63),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+  {"c.ngt.d",  op_rs_func(17, 0x11, 63),
+                       op_rs_func(0x3f, 0x1f, 0x7ff),  "S,T", 0},
+
+/* co processor 2 instruction */
+  {"mfc2",     op_rs_b11 (18, 0, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"cfc2",     op_rs_b11 (18, 2, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"mtc2",     op_rs_b11 (18, 4, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"ctc2",     op_rs_b11 (18, 6, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"bc2f",     op_o16(18, 0x100),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc2f",     op_o16(18, 0x180),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc2f",     op_o16(18, 0x101),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc2t",     op_o16(18, 0x181),      op_o16(0x3f, 0x3ff),    "b", 1},
+
+/* co processor 3 instruction */
+  {"mtc3",     op_rs_b11 (19, 0, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"cfc3",     op_rs_b11 (19, 2, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"mtc3",     op_rs_b11 (19, 4, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"ctc3",     op_rs_b11 (19, 6, 0),   op_rs_b11(0x3f, 0x1f, 0x1ffff), "t,d", 0},
+  {"bc3f",     op_o16(19, 0x100),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc3f",     op_o16(19, 0x180),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc3t",     op_o16(19, 0x101),      op_o16(0x3f, 0x3ff),    "b", 1},
+  {"bc3t",     op_o16(19, 0x181),      op_o16(0x3f, 0x3ff),    "b", 1},
+
+  {"lb",       one(32),        one(0x3f),              "t,j(s)", 0},
+  {"lh",       one(33),        one(0x3f),              "t,j(s)", 0},
+  {"lwl",      one(34),        one(0x3f),              "t,j(s)", 0},
+  {"lw",       one(35),        one(0x3f),              "t,j(s)", 0},
+  {"lbu",      one(36),        one(0x3f),              "t,j(s)", 0},
+  {"lhu",      one(37),        one(0x3f),              "t,j(s)", 0},
+  {"lwr",      one(38),        one(0x3f),              "t,j(s)", 0},
+  {"sb",       one(40),        one(0x3f),              "t,j(s)", 0},
+  {"sh",       one(41),        one(0x3f),              "t,j(s)", 0},
+  {"swl",      one(42),        one(0x3f),              "t,j(s)", 0},
+  {"swr",       one(46),        one(0x3f),              "t,j(s)", 0},
+  {"sw",       one(43),        one(0x3f),              "t,j(s)", 0},
+  {"lwc0",     one(48),        one(0x3f),              "t,j(s)", 0},
+/* for fpu */
+  {"lwc1",     one(49),        one(0x3f),              "T,j(s)", 0},
+  {"lwc2",     one(50),        one(0x3f),              "t,j(s)", 0},
+  {"lwc3",     one(51),        one(0x3f),              "t,j(s)", 0},
+  {"swc0",     one(56),        one(0x3f),              "t,j(s)", 0},
+/* for fpu */
+  {"swc1",     one(57),        one(0x3f),              "T,j(s)", 0},
+  {"swc2",     one(58),        one(0x3f),              "t,j(s)", 0},
+  {"swc3",     one(59),        one(0x3f),              "t,j(s)", 0},
+};
diff --git a/include/np1-opcode.h b/include/np1-opcode.h
new file mode 100755 (executable)
index 0000000..6546825
--- /dev/null
@@ -0,0 +1,422 @@
+/* Print GOULD NPL instructions for GDB, the GNU debugger.
+   Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+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 1, or (at your option)
+any later version.
+
+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 GDB; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+struct gld_opcode
+{
+  char *name;
+  unsigned long opcode;
+  unsigned long mask;
+  char *args;
+  int length;
+};
+
+/* We store four bytes of opcode for all opcodes because that
+   is the most any of them need.  The actual length of an instruction
+   is always at least 2 bytes, and at most four.  The length of the
+   instruction is based on the opcode.
+
+   The mask component is a mask saying which bits must match
+   particular opcode in order for an instruction to be an instance
+   of that opcode.
+
+   The args component is a string containing characters
+   that are used to format the arguments to the instruction. */
+
+/* Kinds of operands:
+   r  Register in first field
+   R  Register in second field
+   b  Base register in first field
+   B  Base register in second field
+   v  Vector register in first field
+   V  Vector register in first field
+   A  Optional address register (base register)
+   X  Optional index register
+   I  Immediate data (16bits signed)
+   O  Offset field (16bits signed)
+   h  Offset field (15bits signed)
+   d  Offset field (14bits signed)
+   S  Shift count field
+
+   any other characters are printed as is...
+*/
+
+/* The assembler requires that this array be sorted as follows:
+   all instances of the same mnemonic must be consecutive.
+   All instances of the same mnemonic with the same number of operands
+   must be consecutive.
+ */
+struct gld_opcode gld_opcodes[] =
+{
+{ "lb",                0xb4080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lnb",       0xb8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lbs",       0xec080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lh",                0xb4000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "lnh",       0xb8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "lw",                0xb4000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lnw",       0xb8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "ld",                0xb4000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "lnd",       0xb8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "li",                0xf8000000,     0xfc7f0000,     "r,I",          4 },
+{ "lpa",       0x50080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "la",                0x50000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "labr",      0x58080000,     0xfc080000,     "b,xOA,X",      4 },
+{ "lbp",       0x90080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lhp",       0x90000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "lwp",       0x90000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "ldp",       0x90000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "suabr",     0x58000000,     0xfc080000,     "b,xOA,X",      4 },
+{ "lf",                0xbc000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lfbr",      0xbc080000,     0xfc080000,     "b,xOA,X",      4 },
+{ "lwbr",      0x5c000000,     0xfc080000,     "b,xOA,X",      4 },
+{ "stb",       0xd4080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "sth",       0xd4000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "stw",       0xd4000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "std",       0xd4000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "stf",       0xdc000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "stfbr",     0xdc080000,     0xfc080000,     "b,xOA,X",      4 },
+{ "stwbr",     0x54000000,     0xfc080000,     "b,xOA,X",      4 },
+{ "zmb",       0xd8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "zmh",       0xd8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "zmw",       0xd8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "zmd",       0xd8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "stbp",      0x94080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "sthp",      0x94000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "stwp",      0x94000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "stdp",      0x94000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "lil",       0xf80b0000,     0xfc7f0000,     "r,D",          4 },
+{ "lwsl1",     0xec000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lwsl2",     0xfc000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lwsl3",     0xfc080000,     0xfc080000,     "r,xOA,X",      4 },
+
+{ "lvb",       0xb0080000,     0xfc080000,     "v,xOA,X",      4 },
+{ "lvh",       0xb0000001,     0xfc080001,     "v,xOA,X",      4 },
+{ "lvw",       0xb0000000,     0xfc080000,     "v,xOA,X",      4 },
+{ "lvd",       0xb0000002,     0xfc080002,     "v,xOA,X",      4 },
+{ "liv",       0x3c040000,     0xfc0f0000,     "v,R",          2 },
+{ "livf",      0x3c080000,     0xfc0f0000,     "v,R",          2 },
+{ "stvb",      0xd0080000,     0xfc080000,     "v,xOA,X",      4 },
+{ "stvh",      0xd0000001,     0xfc080001,     "v,xOA,X",      4 },
+{ "stvw",      0xd0000000,     0xfc080000,     "v,xOA,X",      4 },
+{ "stvd",      0xd0000002,     0xfc080002,     "v,xOA,X",      4 },
+
+{ "trr",       0x2c000000,     0xfc0f0000,     "r,R",          2 },
+{ "trn",       0x2c040000,     0xfc0f0000,     "r,R",          2 },
+{ "trnd",      0x2c0c0000,     0xfc0f0000,     "r,R",          2 },
+{ "trabs",     0x2c010000,     0xfc0f0000,     "r,R",          2 },
+{ "trabsd",    0x2c090000,     0xfc0f0000,     "r,R",          2 },
+{ "trc",       0x2c030000,     0xfc0f0000,     "r,R",          2 },
+{ "xcr",       0x28040000,     0xfc0f0000,     "r,R",          2 },
+{ "cxcr",      0x2c060000,     0xfc0f0000,     "r,R",          2 },
+{ "cxcrd",     0x2c0e0000,     0xfc0f0000,     "r,R",          2 },
+{ "tbrr",      0x2c020000,     0xfc0f0000,     "r,B",          2 },
+{ "trbr",      0x28030000,     0xfc0f0000,     "b,R",          2 },
+{ "xcbr",      0x28020000,     0xfc0f0000,     "b,B",          2 },
+{ "tbrbr",     0x28010000,     0xfc0f0000,     "b,B",          2 },
+
+{ "trvv",      0x28050000,     0xfc0f0000,     "v,V",          2 },
+{ "trvvn",     0x2c050000,     0xfc0f0000,     "v,V",          2 },
+{ "trvvnd",    0x2c0d0000,     0xfc0f0000,     "v,V",          2 },
+{ "trvab",     0x2c070000,     0xfc0f0000,     "v,V",          2 },
+{ "trvabd",    0x2c0f0000,     0xfc0f0000,     "v,V",          2 },
+{ "cmpv",      0x14060000,     0xfc0f0000,     "v,V",          2 },
+{ "expv",      0x14070000,     0xfc0f0000,     "v,V",          2 },
+{ "mrvvlt",    0x10030000,     0xfc0f0000,     "v,V",          2 },
+{ "mrvvle",    0x10040000,     0xfc0f0000,     "v,V",          2 },
+{ "mrvvgt",    0x14030000,     0xfc0f0000,     "v,V",          2 },
+{ "mrvvge",    0x14040000,     0xfc0f0000,     "v,V",          2 },
+{ "mrvveq",    0x10050000,     0xfc0f0000,     "v,V",          2 },
+{ "mrvvne",    0x10050000,     0xfc0f0000,     "v,V",          2 },
+{ "mrvrlt",    0x100d0000,     0xfc0f0000,     "v,R",          2 },
+{ "mrvrle",    0x100e0000,     0xfc0f0000,     "v,R",          2 },
+{ "mrvrgt",    0x140d0000,     0xfc0f0000,     "v,R",          2 },
+{ "mrvrge",    0x140e0000,     0xfc0f0000,     "v,R",          2 },
+{ "mrvreq",    0x100f0000,     0xfc0f0000,     "v,R",          2 },
+{ "mrvrne",    0x140f0000,     0xfc0f0000,     "v,R",          2 },
+{ "trvr",      0x140b0000,     0xfc0f0000,     "r,V",          2 },
+{ "trrv",      0x140c0000,     0xfc0f0000,     "v,R",          2 },
+
+{ "bu",                0x40000000,     0xff880000,     "xOA,X",        4 },
+{ "bns",       0x70080000,     0xff880000,     "xOA,X",        4 },
+{ "bnco",      0x70880000,     0xff880000,     "xOA,X",        4 },
+{ "bge",       0x71080000,     0xff880000,     "xOA,X",        4 },
+{ "bne",       0x71880000,     0xff880000,     "xOA,X",        4 },
+{ "bunge",     0x72080000,     0xff880000,     "xOA,X",        4 },
+{ "bunle",     0x72880000,     0xff880000,     "xOA,X",        4 },
+{ "bgt",       0x73080000,     0xff880000,     "xOA,X",        4 },
+{ "bnany",     0x73880000,     0xff880000,     "xOA,X",        4 },
+{ "bs" ,       0x70000000,     0xff880000,     "xOA,X",        4 },
+{ "bco",       0x70800000,     0xff880000,     "xOA,X",        4 },
+{ "blt",       0x71000000,     0xff880000,     "xOA,X",        4 },
+{ "beq",       0x71800000,     0xff880000,     "xOA,X",        4 },
+{ "buge",      0x72000000,     0xff880000,     "xOA,X",        4 },
+{ "bult",      0x72800000,     0xff880000,     "xOA,X",        4 },
+{ "ble",       0x73000000,     0xff880000,     "xOA,X",        4 },
+{ "bany",      0x73800000,     0xff880000,     "xOA,X",        4 },
+{ "brlnk",     0x44000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bib",       0x48000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bih",       0x48080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "biw",       0x4c000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bid",       0x4c080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bivb",      0x60000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bivh",      0x60080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bivw",      0x64000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bivd",      0x64080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bvsb",      0x68000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bvsh",      0x68080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bvsw",      0x6c000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bvsd",      0x6c080000,     0xfc080000,     "r,xOA,X",      4 },
+
+{ "camb",      0x80080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "camh",      0x80000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "camw",      0x80000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "camd",      0x80000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "car",       0x10000000,     0xfc0f0000,     "r,R",          2 },
+{ "card",      0x14000000,     0xfc0f0000,     "r,R",          2 },
+{ "ci",                0xf8050000,     0xfc7f0000,     "r,I",          4 },
+{ "chkbnd",    0x5c080000,     0xfc080000,     "r,xOA,X",      4 },
+
+{ "cavv",      0x10010000,     0xfc0f0000,     "v,V",          2 },
+{ "cavr",      0x10020000,     0xfc0f0000,     "v,R",          2 },
+{ "cavvd",     0x10090000,     0xfc0f0000,     "v,V",          2 },
+{ "cavrd",     0x100b0000,     0xfc0f0000,     "v,R",          2 },
+
+{ "anmb",      0x84080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "anmh",      0x84000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "anmw",      0x84000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "anmd",      0x84000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "anr",       0x04000000,     0xfc0f0000,     "r,R",          2 },
+{ "ani",       0xf8080000,     0xfc7f0000,     "r,I",          4 },
+{ "ormb",      0xb8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "ormh",      0xb8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "ormw",      0xb8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "ormd",      0xb8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "orr",       0x08000000,     0xfc0f0000,     "r,R",          2 },
+{ "oi",                0xf8090000,     0xfc7f0000,     "r,I",          4 },
+{ "eomb",      0x8c080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "eomh",      0x8c000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "eomw",      0x8c000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "eomd",      0x8c000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "eor",       0x0c000000,     0xfc0f0000,     "r,R",          2 },
+{ "eoi",       0xf80a0000,     0xfc7f0000,     "r,I",          4 },
+
+{ "anvv",      0x04010000,     0xfc0f0000,     "v,V",          2 },
+{ "anvr",      0x04020000,     0xfc0f0000,     "v,R",          2 },
+{ "orvv",      0x08010000,     0xfc0f0000,     "v,V",          2 },
+{ "orvr",      0x08020000,     0xfc0f0000,     "v,R",          2 },
+{ "eovv",      0x0c010000,     0xfc0f0000,     "v,V",          2 },
+{ "eovr",      0x0c020000,     0xfc0f0000,     "v,R",          2 },
+
+{ "sacz",      0x100c0000,     0xfc0f0000,     "r,R",          2 },
+{ "sla",       0x1c400000,     0xfc600000,     "r,S",          2 },
+{ "sll",       0x1c600000,     0xfc600000,     "r,S",          2 },
+{ "slc",       0x24400000,     0xfc600000,     "r,S",          2 },
+{ "slad",      0x20400000,     0xfc600000,     "r,S",          2 },
+{ "slld",      0x20600000,     0xfc600000,     "r,S",          2 },
+{ "sra",       0x1c000000,     0xfc600000,     "r,S",          2 },
+{ "srl",       0x1c200000,     0xfc600000,     "r,S",          2 },
+{ "src",       0x24000000,     0xfc600000,     "r,S",          2 },
+{ "srad",      0x20000000,     0xfc600000,     "r,S",          2 },
+{ "srld",      0x20200000,     0xfc600000,     "r,S",          2 },
+{ "sda",       0x3c030000,     0xfc0f0000,     "r,R",          2 },
+{ "sdl",       0x3c020000,     0xfc0f0000,     "r,R",          2 },
+{ "sdc",       0x3c010000,     0xfc0f0000,     "r,R",          2 },
+{ "sdad",      0x3c0b0000,     0xfc0f0000,     "r,R",          2 },
+{ "sdld",      0x3c0a0000,     0xfc0f0000,     "r,R",          2 },
+
+{ "svda",      0x3c070000,     0xfc0f0000,     "v,R",          2 },
+{ "svdl",      0x3c060000,     0xfc0f0000,     "v,R",          2 },
+{ "svdc",      0x3c050000,     0xfc0f0000,     "v,R",          2 },
+{ "svdad",     0x3c0e0000,     0xfc0f0000,     "v,R",          2 },
+{ "svdld",     0x3c0d0000,     0xfc0f0000,     "v,R",          2 },
+
+{ "sbm",       0xac080000,     0xfc080000,     "f,xOA,X",      4 },
+{ "zbm",       0xac000000,     0xfc080000,     "f,xOA,X",      4 },
+{ "tbm",       0xa8080000,     0xfc080000,     "f,xOA,X",      4 },
+{ "incmb",     0xa0000000,     0xfc080000,     "xOA,X",        4 },
+{ "incmh",     0xa0080000,     0xfc080000,     "xOA,X",        4 },
+{ "incmw",     0xa4000000,     0xfc080000,     "xOA,X",        4 },
+{ "incmd",     0xa4080000,     0xfc080000,     "xOA,X",        4 },
+{ "sbmd",      0x7c080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "zbmd",      0x7c000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "tbmd",      0x78080000,     0xfc080000,     "r,xOA,X",      4 },
+
+{ "ssm",       0x9c080000,     0xfc080000,     "f,xOA,X",      4 },
+{ "zsm",       0x9c000000,     0xfc080000,     "f,xOA,X",      4 },
+{ "tsm",       0x98080000,     0xfc080000,     "f,xOA,X",      4 },
+
+{ "admb",      0xc8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "admh",      0xc8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "admw",      0xc8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "admd",      0xc8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "adr",       0x38000000,     0xfc0f0000,     "r,R",          2 },
+{ "armb",      0xe8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "armh",      0xe8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "armw",      0xe8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "armd",      0xe8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "adi",       0xf8010000,     0xfc0f0000,     "r,I",          4 },
+{ "sumb",      0xcc080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "sumh",      0xcc000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "sumw",      0xcc000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "sumd",      0xcc000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "sur",       0x3c000000,     0xfc0f0000,     "r,R",          2 },
+{ "sui",       0xf8020000,     0xfc0f0000,     "r,I",          4 },
+{ "mpmb",      0xc0080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "mpmh",      0xc0000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "mpmw",      0xc0000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "mpr",       0x38020000,     0xfc0f0000,     "r,R",          2 },
+{ "mprd",      0x3c0f0000,     0xfc0f0000,     "r,R",          2 },
+{ "mpi",       0xf8030000,     0xfc0f0000,     "r,I",          4 },
+{ "dvmb",      0xc4080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "dvmh",      0xc4000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "dvmw",      0xc4000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "dvr",       0x380a0000,     0xfc0f0000,     "r,R",          2 },
+{ "dvi",       0xf8040000,     0xfc0f0000,     "r,I",          4 },
+{ "exs",       0x38080000,     0xfc0f0000,     "r,R",          2 },
+
+{ "advv",      0x30000000,     0xfc0f0000,     "v,V",          2 },
+{ "advvd",     0x30080000,     0xfc0f0000,     "v,V",          2 },
+{ "adrv",      0x34000000,     0xfc0f0000,     "v,R",          2 },
+{ "adrvd",     0x34080000,     0xfc0f0000,     "v,R",          2 },
+{ "suvv",      0x30010000,     0xfc0f0000,     "v,V",          2 },
+{ "suvvd",     0x30090000,     0xfc0f0000,     "v,V",          2 },
+{ "surv",      0x34010000,     0xfc0f0000,     "v,R",          2 },
+{ "survd",     0x34090000,     0xfc0f0000,     "v,R",          2 },
+{ "mpvv",      0x30020000,     0xfc0f0000,     "v,V",          2 },
+{ "mprv",      0x34020000,     0xfc0f0000,     "v,R",          2 },
+
+{ "adfw",      0xe0080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "adfd",      0xe0080002,     0xfc080002,     "r,xOA,X",      4 },
+{ "adrfw",     0x38010000,     0xfc0f0000,     "r,R",          2 },
+{ "adrfd",     0x38090000,     0xfc0f0000,     "r,R",          2 },
+{ "surfw",     0xe0000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "surfd",     0xe0000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "surfw",     0x38030000,     0xfc0f0000,     "r,R",          2 },
+{ "surfd",     0x380b0000,     0xfc0f0000,     "r,R",          2 },
+{ "mpfw",      0xe4080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "mpfd",      0xe4080002,     0xfc080002,     "r,xOA,X",      4 },
+{ "mprfw",     0x38060000,     0xfc0f0000,     "r,R",          2 },
+{ "mprfd",     0x380e0000,     0xfc0f0000,     "r,R",          2 },
+{ "rfw",       0xe4000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "rfd",       0xe4000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "rrfw",      0x0c0e0000,     0xfc0f0000,     "r",            2 },
+{ "rrfd",      0x0c0f0000,     0xfc0f0000,     "r",            2 },
+
+{ "advvfw",    0x30040000,     0xfc0f0000,     "v,V",          2 },
+{ "advvfd",    0x300c0000,     0xfc0f0000,     "v,V",          2 },
+{ "adrvfw",    0x34040000,     0xfc0f0000,     "v,R",          2 },
+{ "adrvfd",    0x340c0000,     0xfc0f0000,     "v,R",          2 },
+{ "suvvfw",    0x30050000,     0xfc0f0000,     "v,V",          2 },
+{ "suvvfd",    0x300d0000,     0xfc0f0000,     "v,V",          2 },
+{ "survfw",    0x34050000,     0xfc0f0000,     "v,R",          2 },
+{ "survfd",    0x340d0000,     0xfc0f0000,     "v,R",          2 },
+{ "mpvvfw",    0x30060000,     0xfc0f0000,     "v,V",          2 },
+{ "mpvvfd",    0x300e0000,     0xfc0f0000,     "v,V",          2 },
+{ "mprvfw",    0x34060000,     0xfc0f0000,     "v,R",          2 },
+{ "mprvfd",    0x340e0000,     0xfc0f0000,     "v,R",          2 },
+{ "rvfw",      0x30070000,     0xfc0f0000,     "v",            2 },
+{ "rvfd",      0x300f0000,     0xfc0f0000,     "v",            2 },
+
+{ "fltw",      0x38070000,     0xfc0f0000,     "r,R",          2 },
+{ "fltd",      0x380f0000,     0xfc0f0000,     "r,R",          2 },
+{ "fixw",      0x38050000,     0xfc0f0000,     "r,R",          2 },
+{ "fixd",      0x380d0000,     0xfc0f0000,     "r,R",          2 },
+{ "cfpds",     0x3c090000,     0xfc0f0000,     "r,R",          2 },
+
+{ "fltvw",     0x080d0000,     0xfc0f0000,     "v,V",          2 },
+{ "fltvd",     0x080f0000,     0xfc0f0000,     "v,V",          2 },
+{ "fixvw",     0x080c0000,     0xfc0f0000,     "v,V",          2 },
+{ "fixvd",     0x080e0000,     0xfc0f0000,     "v,V",          2 },
+{ "cfpvds",    0x0c0d0000,     0xfc0f0000,     "v,V",          2 },
+
+{ "orvrn",     0x000a0000,     0xfc0f0000,     "r,V",          2 },
+{ "andvrn",    0x00080000,     0xfc0f0000,     "r,V",          2 },
+{ "frsteq",    0x04090000,     0xfc0f0000,     "r,V",          2 },
+{ "sigma",     0x0c080000,     0xfc0f0000,     "r,V",          2 },
+{ "sigmad",    0x0c0a0000,     0xfc0f0000,     "r,V",          2 },
+{ "sigmf",     0x08080000,     0xfc0f0000,     "r,V",          2 },
+{ "sigmfd",    0x080a0000,     0xfc0f0000,     "r,V",          2 },
+{ "prodf",     0x04080000,     0xfc0f0000,     "r,V",          2 },
+{ "prodfd",    0x040a0000,     0xfc0f0000,     "r,V",          2 },
+{ "maxv",      0x10080000,     0xfc0f0000,     "r,V",          2 },
+{ "maxvd",     0x100a0000,     0xfc0f0000,     "r,V",          2 },
+{ "minv",      0x14080000,     0xfc0f0000,     "r,V",          2 },
+{ "minvd",     0x140a0000,     0xfc0f0000,     "r,V",          2 },
+
+{ "lpsd",      0xf0000000,     0xfc080000,     "xOA,X",        4 },
+{ "ldc",       0xf0080000,     0xfc080000,     "xOA,X",        4 },
+{ "spm",       0x040c0000,     0xfc0f0000,     "r",            2 },
+{ "rpm",       0x040d0000,     0xfc0f0000,     "r",            2 },
+{ "tritr",     0x00070000,     0xfc0f0000,     "r",            2 },
+{ "trrit",     0x00060000,     0xfc0f0000,     "r",            2 },
+{ "rpswt",     0x04080000,     0xfc0f0000,     "r",            2 },
+{ "exr",       0xf8070000,     0xfc0f0000,     "",             4 },
+{ "halt",      0x00000000,     0xfc0f0000,     "",             2 },
+{ "wait",      0x00010000,     0xfc0f0000,     "",             2 },
+{ "nop",       0x00020000,     0xfc0f0000,     "",             2 },
+{ "eiae",      0x00030000,     0xfc0f0000,     "",             2 },
+{ "efae",      0x000d0000,     0xfc0f0000,     "",             2 },
+{ "diae",      0x000e0000,     0xfc0f0000,     "",             2 },
+{ "dfae",      0x000f0000,     0xfc0f0000,     "",             2 },
+{ "spvc",      0xf8060000,     0xfc0f0000,     "r,T,N",        4 },
+{ "rdsts",     0x00090000,     0xfc0f0000,     "r",            2 },
+{ "setcpu",    0x000c0000,     0xfc0f0000,     "r",            2 },
+{ "cmc",       0x000b0000,     0xfc0f0000,     "r",            2 },
+{ "trrcu",     0x00040000,     0xfc0f0000,     "r",            2 },
+{ "attnio",    0x00050000,     0xfc0f0000,     "",             2 },
+{ "fudit",     0x28080000,     0xfc0f0000,     "",             2 },
+{ "break",     0x28090000,     0xfc0f0000,     "",             2 },
+{ "frzss",     0x280a0000,     0xfc0f0000,     "",             2 },
+{ "ripi",      0x04040000,     0xfc0f0000,     "r,R",          2 },
+{ "xcp",       0x04050000,     0xfc0f0000,     "r",            2 },
+{ "block",     0x04060000,     0xfc0f0000,     "",             2 },
+{ "unblock",   0x04070000,     0xfc0f0000,     "",             2 },
+{ "trsc",      0x08060000,     0xfc0f0000,     "r,R",          2 },
+{ "tscr",      0x08070000,     0xfc0f0000,     "r,R",          2 },
+{ "fq",                0x04080000,     0xfc0f0000,     "r",            2 },
+{ "flupte",    0x2c080000,     0xfc0f0000,     "r",            2 },
+{ "rviu",      0x040f0000,     0xfc0f0000,     "",             2 },
+{ "ldel",      0x280c0000,     0xfc0f0000,     "r,R",          2 },
+{ "ldu",       0x280d0000,     0xfc0f0000,     "r,R",          2 },
+{ "stdecc",    0x280b0000,     0xfc0f0000,     "r,R",          2 },
+{ "trpc",      0x08040000,     0xfc0f0000,     "r",            2 },
+{ "tpcr",      0x08050000,     0xfc0f0000,     "r",            2 },
+{ "ghalt",     0x0c050000,     0xfc0f0000,     "r",            2 },
+{ "grun",      0x0c040000,     0xfc0f0000,     "",             2 },
+{ "tmpr",      0x2c0a0000,     0xfc0f0000,     "r,R",          2 },
+{ "trmp",      0x2c0b0000,     0xfc0f0000,     "r,R",          2 },
+
+{ "trrve",     0x28060000,     0xfc0f0000,     "r",            2 },
+{ "trver",     0x28070000,     0xfc0f0000,     "r",            2 },
+{ "trvlr",     0x280f0000,     0xfc0f0000,     "r",            2 },
+
+{ "linkfl",    0x18000000,     0xfc0f0000,     "r,R",          2 },
+{ "linkbl",    0x18020000,     0xfc0f0000,     "r,R",          2 },
+{ "linkfp",    0x18010000,     0xfc0f0000,     "r,R",          2 },
+{ "linkbp",    0x18030000,     0xfc0f0000,     "r,R",          2 },
+{ "linkpl",    0x18040000,     0xfc0f0000,     "r,R",          2 },
+{ "ulinkl",    0x18080000,     0xfc0f0000,     "r,R",          2 },
+{ "ulinkp",    0x18090000,     0xfc0f0000,     "r,R",          2 },
+{ "ulinktl",   0x180a0000,     0xfc0f0000,     "r,R",          2 },
+{ "ulinktp",   0x180b0000,     0xfc0f0000,     "r,R",          2 },
+};
+
+int numopcodes = sizeof(gld_opcodes) / sizeof(gld_opcodes[0]);
+
+struct gld_opcode *endop = gld_opcodes + sizeof(gld_opcodes) /
+                               sizeof(gld_opcodes[0]);
diff --git a/include/ns32k-opcode.h b/include/ns32k-opcode.h
new file mode 100755 (executable)
index 0000000..cc4ba6b
--- /dev/null
@@ -0,0 +1,491 @@
+/* ns32k-opcode.h -- Opcode table for National Semi 32k processor
+   Copyright (C) 1987 Free Software Foundation, Inc.
+
+This file is part of GAS, the GNU Assembler.
+
+GAS is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GAS is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GAS; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+
+#ifdef SEQUENT_COMPATABILITY
+#define DEF_MODEC 20
+#define DEF_MODEL 21
+#endif
+
+#ifndef DEF_MODEC
+#define DEF_MODEC 20
+#endif
+
+#ifndef DEF_MODEL
+#define DEF_MODEL 20
+#endif
+/*
+   After deciding the instruction entry (via hash.c) the instruction parser
+   will try to match the operands after the instruction to the required set
+   given in the entry operandfield. Every operand will result in a change in
+   the opcode or the addition of data to the opcode.
+   The operands in the source instruction are checked for inconsistent
+   semantics.
+       F : 32 bit float        general form
+       L : 64 bit float            "
+       B : byte                    "
+       W : word                    "
+       D : double-word             "
+       Q : quad-word               "
+       A : double-word         gen-address-form ie no regs allowed
+       d : displacement
+       b : displacement - pc relative addressing  acb
+       p : displacement - pc relative addressing  br bcond bsr cxp
+       q : quick
+       i : immediate (8 bits)
+           This is not a standard ns32k operandtype, it is used to build
+           instructions like    svc arg1,arg2
+           Svc is the instruction SuperVisorCall and is sometimes used to
+           call OS-routines from usermode. Some args might be handy!
+       r : register number (3 bits)
+       O : setcfg instruction optionslist
+       C : cinv instruction optionslist
+       S : stringinstruction optionslist
+       U : registerlist        save,enter
+       u : registerlist        restore,exit
+       M : mmu register
+       P : cpu register
+       g : 3:rd operand of inss or exts instruction
+       G : 4:th operand of inss or exts instruction
+           Those operands are encoded in the same byte.
+           This byte is placed last in the instruction.
+       f : operand of sfsr
+       H : sequent-hack for bsr (Warning)
+
+column 1       instructions
+       2       number of bits in opcode.
+       3       number of bits in opcode explicitly
+               determined by the instruction type.
+       4       opcodeseed, the number we build our opcode
+               from.
+       5       operandtypes, used by operandparser.
+       6       size in bytes of immediate
+*/
+struct ns32k_opcode {
+  char *name;
+  unsigned char opcode_id_size; /* not used by the assembler */
+  unsigned char opcode_size;
+  unsigned long opcode_seed;
+  char *operands;
+  unsigned char im_size;       /* not used by dissassembler */
+  char *default_args;          /* default to those args when none given */
+  char default_modec;          /* default to this addr-mode when ambigous
+                                  ie when the argument of a general addr-mode
+                                  is a plain constant */
+  char default_model;          /* is a plain label */
+};
+
+#ifdef comment
+/* This section was from the gdb version of this file. */
+
+#ifndef ns32k_opcodeT
+#define ns32k_opcodeT int
+#endif /* no ns32k_opcodeT */
+
+struct not_wot                 /* ns32k opcode table: wot to do with this */
+                               /* particular opcode */
+{
+  int obits;           /* number of opcode bits */
+  int ibits;           /* number of instruction bits */
+  ns32k_opcodeT        code;   /* op-code (may be > 8 bits!) */
+  char *args;          /* how to compile said opcode */
+};
+
+struct not                     /* ns32k opcode text */
+{
+  char *            name;      /* opcode name: lowercase string  [key]  */
+  struct not_wot    detail;    /* rest of opcode table          [datum] */
+};
+
+/* Instructions look like this:
+    
+   basic instruction--1, 2, or 3 bytes
+   index byte for operand A, if operand A is indexed--1 byte
+   index byte for operand B, if operand B is indexed--1 byte
+   addressing extension for operand A
+   addressing extension for operand B
+   implied operands
+
+   Operand A is the operand listed first in the following opcode table.
+   Operand B is the operand listed second in the following opcode table.
+   All instructions have at most 2 general operands, so this is enough.
+   The implied operands are associated with operands other than A and B.
+
+   Each operand has a digit and a letter.
+   
+   The digit gives the position in the assembly language.  The letter,
+   one of the following, tells us what kind of operand it is.  */
+
+/* F : 32 bit float
+ * L : 64 bit float
+ * B : byte
+ * W : word
+ * D : double-word
+ * Q : quad-word
+ * d : displacement
+ * q : quick
+ * i : immediate (8 bits)
+ * r : register number (3 bits)
+ * p : displacement - pc relative addressing
+*/
+
+
+#endif /* comment */
+
+static const struct ns32k_opcode ns32k_opcodes[]=
+{
+  { "absf",    14,24,  0x35be, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "absl",    14,24,  0x34be, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "absb",    14,24,  0x304e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "absw",    14,24,  0x314e, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "absd",    14,24,  0x334e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "acbb",     7,16,  0x4c,   "2B1q3p",       1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "acbw",     7,16,  0x4d,   "2W1q3p",       2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "acbd",     7,16,  0x4f,   "2D1q3p",       4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addf",    14,24,  0x01be, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addl",    14,24,  0x00be, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addb",     6,16,  0x00,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addw",     6,16,  0x01,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addd",     6,16,  0x03,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addcb",    6,16,  0x10,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addcw",    6,16,  0x11,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addcd",    6,16,  0x13,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addpb",   14,24,  0x3c4e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addpw",   14,24,  0x3d4e, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addpd",   14,24,  0x3f4e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addqb",    7,16,  0x0c,   "2B1q",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addqw",    7,16,  0x0d,   "2W1q",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addqd",    7,16,  0x0f,   "2D1q",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "addr",     6,16,  0x27,   "1A2D",         4,      "",     21,21   },
+  { "adjspb",  11,16,  0x057c, "1B",           1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "adjspw",  11,16,  0x057d, "1W",           2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "adjspd",  11,16,  0x057f, "1D",           4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "andb",     6,16,  0x28,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "andw",     6,16,  0x29,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "andd",     6,16,  0x2b,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ashb",    14,24,  0x044e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ashw",    14,24,  0x054e, "1B2W",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ashd",    14,24,  0x074e, "1B2D",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "beq",      8,8,   0x0a,   "1p",           0,      "",     21,21   },
+  { "bne",      8,8,   0x1a,   "1p",           0,      "",     21,21   },
+  { "bcs",      8,8,   0x2a,   "1p",           0,      "",     21,21   },
+  { "bcc",      8,8,   0x3a,   "1p",           0,      "",     21,21   },
+  { "bhi",      8,8,   0x4a,   "1p",           0,      "",     21,21   },
+  { "bls",      8,8,   0x5a,   "1p",           0,      "",     21,21   },
+  { "bgt",      8,8,   0x6a,   "1p",           0,      "",     21,21   },
+  { "ble",      8,8,   0x7a,   "1p",           0,      "",     21,21   },
+  { "bfs",      8,8,   0x8a,   "1p",           0,      "",     21,21   },
+  { "bfc",      8,8,   0x9a,   "1p",           0,      "",     21,21   },
+  { "blo",      8,8,   0xaa,   "1p",           0,      "",     21,21   },
+  { "bhs",      8,8,   0xba,   "1p",           0,      "",     21,21   },
+  { "blt",      8,8,   0xca,   "1p",           0,      "",     21,21   },
+  { "bge",      8,8,   0xda,   "1p",           0,      "",     21,21   },
+  { "but",      8,8,   0xea,   "1p",           0,      "",     21,21   },
+  { "buf",      8,8,   0xfa,   "1p",           0,      "",     21,21   },
+  { "bicb",     6,16,  0x08,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "bicw",     6,16,  0x09,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "bicd",     6,16,  0x0b,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "bicpsrb", 11,16,  0x17c,  "1B",           1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "bicpsrw", 11,16,  0x17d,  "1W",           2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "bispsrb", 11,16,  0x37c,  "1B",           1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "bispsrw", 11,16,  0x37d,  "1W",           2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "bpt",      8,8,   0xf2,   "",             0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "br",       8,8,   0xea,   "1p",           0,      "",     21,21   },
+#ifdef SEQUENT_COMPATABILITY
+  { "bsr",      8,8,   0x02,   "1H",           0,      "",     21,21   },
+#else
+  { "bsr",      8,8,   0x02,   "1p",           0,      "",     21,21   },
+#endif
+  { "caseb",   11,16,  0x77c,  "1B",           1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "casew",   11,16,  0x77d,  "1W",           2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cased",   11,16,  0x77f,  "1D",           4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cbitb",   14,24,  0x084e, "1B2D",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cbitw",   14,24,  0x094e, "1W2D",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cbitd",   14,24,  0x0b4e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cbitib",  14,24,  0x0c4e, "1B2D",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cbitiw",  14,24,  0x0d4e, "1W2D",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cbitid",  14,24,  0x0f4e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "checkb",  11,24,  0x0ee,  "2A3B1r",       1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "checkw",  11,24,  0x1ee,  "2A3W1r",       2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "checkd",  11,24,  0x3ee,  "2A3D1r",       4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cinv",    14,24,  0x271e, "2D1C",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpf",    14,24,  0x09be, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpl",    14,24,  0x08be, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpb",     6,16,  0x04,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpw",     6,16,  0x05,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpd",     6,16,  0x07,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpmb",   14,24,  0x04ce, "1A2A3b",       1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpmw",   14,24,  0x05ce, "1A2A3b",       2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpmd",   14,24,  0x07ce, "1A2A3b",       4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpqb",    7,16,  0x1c,   "2B1q",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpqw",    7,16,  0x1d,   "2W1q",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpqd",    7,16,  0x1f,   "2D1q",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cmpsb",   16,24,  0x040e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "cmpsw",   16,24,  0x050e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "cmpsd",   16,24,  0x070e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "cmpst",   16,24,  0x840e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "comb",    14,24,  0x344e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "comw",    14,24,  0x354e, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "comd",    14,24,  0x374e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cvtp",    11,24,  0x036e, "2A3D1r",       4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "cxp",      8,8,   0x22,   "1p",           0,      "",     21,21   },
+  { "cxpd",    11,16,  0x07f,  "1A",           4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "deib",    14,24,  0x2cce, "1B2W",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "deiw",    14,24,  0x2dce, "1W2D",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "deid",    14,24,  0x2fce, "1D2Q",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "dia",      8,8,   0xc2,   "",             1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "divf",    14,24,  0x21be, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "divl",    14,24,  0x20be, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "divb",    14,24,  0x3cce, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "divw",    14,24,  0x3dce, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "divd",    14,24,  0x3fce, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "enter",    8,8,   0x82,   "1U2d",         0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "exit",     8,8,   0x92,   "1u",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "extb",    11,24,  0x02e,  "2D3B1r4d",     1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "extw",    11,24,  0x12e,  "2D3W1r4d",     2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "extd",    11,24,  0x32e,  "2D3D1r4d",     4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "extsb",   14,24,  0x0cce, "1D2B3g4G",     1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "extsw",   14,24,  0x0dce, "1D2W3g4G",     2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "extsd",   14,24,  0x0fce, "1D2D3g4G",     4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ffsb",    14,24,  0x046e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ffsw",    14,24,  0x056e, "1W2B",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ffsd",    14,24,  0x076e, "1D2B",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "flag",     8,8,   0xd2,   "",             0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "floorfb", 14,24,  0x3c3e, "1F2B",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "floorfw", 14,24,  0x3d3e, "1F2W",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "floorfd", 14,24,  0x3f3e, "1F2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "floorlb", 14,24,  0x383e, "1L2B",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "floorlw", 14,24,  0x393e, "1L2W",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "floorld", 14,24,  0x3b3e, "1L2D",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ibitb",   14,24,  0x384e, "1B2D",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ibitw",   14,24,  0x394e, "1W2D",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ibitd",   14,24,  0x3b4e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "indexb",  11,24,  0x42e,  "2B3B1r",       1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "indexw",  11,24,  0x52e,  "2W3W1r",       2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "indexd",  11,24,  0x72e,  "2D3D1r",       4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "insb",    11,24,  0x0ae,  "2B3B1r4d",     1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "insw",    11,24,  0x1ae,  "2W3W1r4d",     2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "insd",    11,24,  0x3ae,  "2D3D1r4d",     4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "inssb",   14,24,  0x08ce, "1B2D3g4G",     1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "inssw",   14,24,  0x09ce, "1W2D3g4G",     2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "inssd",   14,24,  0x0bce, "1D2D3g4G",     4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "jsr",     11,16,  0x67f,  "1A",           4,      "",     21,21   },
+  { "jump",    11,16,  0x27f,  "1A",           4,      "",     21,21   },
+  { "lfsr",    19,24,  0x00f3e,"1D",           4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "lmr",     15,24,  0x0b1e, "2D1M",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "lprb",     7,16,  0x6c,   "2B1P",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "lprw",     7,16,  0x6d,   "2W1P",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "lprd",     7,16,  0x6f,   "2D1P",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "lshb",    14,24,  0x144e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "lshw",    14,24,  0x154e, "1B2W",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "lshd",    14,24,  0x174e, "1B2D",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "meib",    14,24,  0x24ce, "1B2W",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "meiw",    14,24,  0x25ce, "1W2D",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "meid",    14,24,  0x27ce, "1D2Q",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "modb",    14,24,  0x38ce, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "modw",    14,24,  0x39ce, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "modd",    14,24,  0x3bce, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movf",    14,24,  0x05be, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movl",    14,24,  0x04be, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movb",     6,16,  0x14,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movw",     6,16,  0x15,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movd",     6,16,  0x17,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movbf",   14,24,  0x043e, "1B2F",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movwf",   14,24,  0x053e, "1W2F",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movdf",   14,24,  0x073e, "1D2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movbl",   14,24,  0x003e, "1B2L",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movwl",   14,24,  0x013e, "1W2L",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movdl",   14,24,  0x033e, "1D2L",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movfl",   14,24,  0x1b3e, "1F2L",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movlf",   14,24,  0x163e, "1L2F",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movmb",   14,24,  0x00ce, "1A2A3b",       1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movmw",   14,24,  0x01ce, "1A2A3b",       2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movmd",   14,24,  0x03ce, "1A2A3b",       4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movqb",    7,16,  0x5c,   "2B1q",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movqw",    7,16,  0x5d,   "2B1q",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movqd",    7,16,  0x5f,   "2B1q",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movsb",   16,24,  0x000e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "movsw",   16,24,  0x010e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "movsd",   16,24,  0x030e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "movst",   16,24,  0x800e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "movsub",  14,24,  0x0cae, "1A2A",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movsuw",  14,24,  0x0dae, "1A2A",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movsud",  14,24,  0x0fae, "1A2A",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movusb",  14,24,  0x1cae, "1A2A",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movusw",  14,24,  0x1dae, "1A2A",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movusd",  14,24,  0x1fae, "1A2A",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movxbd",  14,24,  0x1cce, "1B2D",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movxwd",  14,24,  0x1dce, "1W2D",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movxbw",  14,24,  0x10ce, "1B2W",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movzbd",  14,24,  0x18ce, "1B2D",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movzwd",  14,24,  0x19ce, "1W2D",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "movzbw",  14,24,  0x14ce, "1B2W",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "mulf",    14,24,  0x31be, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "mull",    14,24,  0x30be, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "mulb",    14,24,  0x20ce, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "mulw",    14,24,  0x21ce, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "muld",    14,24,  0x23ce, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "negf",    14,24,  0x15be, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "negl",    14,24,  0x14be, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "negb",    14,24,  0x204e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "negw",    14,24,  0x214e, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "negd",    14,24,  0x234e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "nop",      8,8,   0xa2,   "",             0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "notb",    14,24,  0x244e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "notw",    14,24,  0x254e, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "notd",    14,24,  0x274e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "orb",      6,16,  0x18,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "orw",      6,16,  0x19,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ord",      6,16,  0x1b,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "quob",    14,24,  0x30ce, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "quow",    14,24,  0x31ce, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "quod",    14,24,  0x33ce, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "rdval",   19,24,  0x0031e,"1A",           4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "remb",    14,24,  0x34ce, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "remw",    14,24,  0x35ce, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "remd",    14,24,  0x37ce, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "restore",  8,8,   0x72,   "1u",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "ret",      8,8,   0x12,   "1d",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "reti",     8,8,   0x52,   "",             0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "rett",     8,8,   0x42,   "1d",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "rotb",    14,24,  0x004e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "rotw",    14,24,  0x014e, "1B2W",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "rotd",    14,24,  0x034e, "1B2D",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "roundfb", 14,24,  0x243e, "1F2B",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "roundfw", 14,24,  0x253e, "1F2W",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "roundfd", 14,24,  0x273e, "1F2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "roundlb", 14,24,  0x203e, "1L2B",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "roundlw", 14,24,  0x213e, "1L2W",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "roundld", 14,24,  0x233e, "1L2D",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "rxp",      8,8,   0x32,   "1d",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "seqb",    11,16,  0x3c,   "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "seqw",    11,16,  0x3d,   "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "seqd",    11,16,  0x3f,   "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sneb",    11,16,  0xbc,   "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "snew",    11,16,  0xbd,   "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sned",    11,16,  0xbf,   "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "scsb",    11,16,  0x13c,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "scsw",    11,16,  0x13d,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "scsd",    11,16,  0x13f,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sccb",    11,16,  0x1bc,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sccw",    11,16,  0x1bd,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sccd",    11,16,  0x1bf,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "shib",    11,16,  0x23c,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "shiw",    11,16,  0x23d,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "shid",    11,16,  0x23f,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "slsb",    11,16,  0x2bc,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "slsw",    11,16,  0x2bd,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "slsd",    11,16,  0x2bf,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sgtb",    11,16,  0x33c,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sgtw",    11,16,  0x33d,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sgtd",    11,16,  0x33f,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sleb",    11,16,  0x3bc,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "slew",    11,16,  0x3bd,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sled",    11,16,  0x3bf,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sfsb",    11,16,  0x43c,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sfsw",    11,16,  0x43d,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sfsd",    11,16,  0x43f,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sfcb",    11,16,  0x4bc,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sfcw",    11,16,  0x4bd,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sfcd",    11,16,  0x4bf,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "slob",    11,16,  0x53c,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "slow",    11,16,  0x53d,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "slod",    11,16,  0x53f,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "shsb",    11,16,  0x5bc,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "shsw",    11,16,  0x5bd,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "shsd",    11,16,  0x5bf,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sltb",    11,16,  0x63c,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sltw",    11,16,  0x63d,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sltd",    11,16,  0x63f,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sgeb",    11,16,  0x6bc,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sgew",    11,16,  0x6bd,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sged",    11,16,  0x6bf,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sutb",    11,16,  0x73c,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sutw",    11,16,  0x73d,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sutd",    11,16,  0x73f,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sufb",    11,16,  0x7bc,  "1B",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sufw",    11,16,  0x7bd,  "1W",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sufd",    11,16,  0x7bf,  "1D",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "save",     8,8,   0x62,   "1U",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sbitb",    14,24, 0x184e, "1B2A",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sbitw",   14,24,  0x194e, "1W2A",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sbitd",   14,24,  0x1b4e, "1D2A",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sbitib",  14,24,  0x1c4e, "1B2A",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sbitiw",  14,24,  0x1d4e, "1W2A",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sbitid",  14,24,  0x1f4e, "1D2A",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "setcfg",  15,24,  0x0b0e, "1O",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sfsr",    14,24,  0x373e, "1f",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "skpsb",   16,24,  0x0c0e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "skpsw",   16,24,  0x0d0e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "skpsd",   16,24,  0x0f0e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "skpst",   16,24,  0x8c0e, "1S",           0,      "[]",   DEF_MODEC,DEF_MODEL     },
+  { "smr",     15,24,  0x0f1e, "2D1M",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sprb",     7,16,  0x2c,   "2B1P",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sprw",     7,16,  0x2d,   "2W1P",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "sprd",     7,16,  0x2f,   "2D1P",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subf",    14,24,  0x11be, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subl",    14,24,  0x10be, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subb",     6,16,  0x20,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subw",     6,16,  0x21,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subd",     6,16,  0x23,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subcb",    6,16,  0x30,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subcw",    6,16,  0x31,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subcd",    6,16,  0x33,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subpb",   14,24,  0x2c4e, "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subpw",   14,24,  0x2d4e, "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "subpd",   14,24,  0x2f4e, "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+#ifdef NS32K_SVC_IMMED_OPERANDS
+  { "svc",      8,8,   0xe2,   "2i1i",         1,      "",     DEF_MODEC,DEF_MODEL     }, /* not really, but unix uses it */
+#else
+  { "svc",      8,8,   0xe2,   "",             0,      "",     DEF_MODEC,DEF_MODEL     },
+#endif
+  { "tbitb",    6,16,  0x34,   "1B2A",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "tbitw",    6,16,  0x35,   "1W2A",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "tbitd",    6,16,  0x37,   "1D2A",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "truncfb", 14,24,  0x2c3e, "1F2B",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "truncfw", 14,24,  0x2d3e, "1F2W",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "truncfd", 14,24,  0x2f3e, "1F2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "trunclb", 14,24,  0x283e, "1L2B",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "trunclw", 14,24,  0x293e, "1L2W",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "truncld", 14,24,  0x2b3e, "1L2D",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "wait",     8,8,   0xb2,   "",             0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "wrval",   19,24,  0x0071e,"1A",           0,      "",     DEF_MODEC,DEF_MODEL     },
+  { "xorb",     6,16,  0x38,   "1B2B",         1,      "",     DEF_MODEC,DEF_MODEL     },
+  { "xorw",     6,16,  0x39,   "1W2W",         2,      "",     DEF_MODEC,DEF_MODEL     },
+  { "xord",     6,16,  0x3b,   "1D2D",         4,      "",     DEF_MODEC,DEF_MODEL     },
+#if defined(NS32381)   /* I'm not too sure of these */
+  { "dotf",    14,24,  0x0dfe, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "dotl",    14,24,  0x0cfe, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "logbf",   14,24,  0x15fe, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "logbl",   14,24,  0x14fe, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "polyf",   14,24,  0x09fe, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "polyl",   14,24,  0x08fe, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+  { "scalbf",  14,24,  0x11fe, "1F2F",         4,      "",     DEF_MODEC,DEF_MODEL     },
+  { "scalbl",  14,24,  0x10fe, "1L2L",         8,      "",     DEF_MODEC,DEF_MODEL     },
+#endif
+};
+
+static const int numopcodes=sizeof(ns32k_opcodes)/sizeof(ns32k_opcodes[0]);
+
+static const struct ns32k_opcode *endop = ns32k_opcodes+sizeof(ns32k_opcodes)/sizeof(ns32k_opcodes[0]);
+
+#define MAX_ARGS 4
+#define ARG_LEN 50
+
diff --git a/include/pn-opcode.h b/include/pn-opcode.h
new file mode 100755 (executable)
index 0000000..fde4764
--- /dev/null
@@ -0,0 +1,282 @@
+/* Print GOULD PN (PowerNode) instructions for GDB, the GNU debugger.
+   Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+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 1, or (at your option)
+any later version.
+
+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 GDB; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+struct gld_opcode
+{
+  char *name;
+  unsigned long opcode;
+  unsigned long mask;
+  char *args;
+  int length;
+};
+
+/* We store four bytes of opcode for all opcodes because that
+   is the most any of them need.  The actual length of an instruction
+   is always at least 2 bytes, and at most four.  The length of the
+   instruction is based on the opcode.
+
+   The mask component is a mask saying which bits must match
+   particular opcode in order for an instruction to be an instance
+   of that opcode.
+
+   The args component is a string containing characters
+   that are used to format the arguments to the instruction. */
+
+/* Kinds of operands:
+   r  Register in first field
+   R  Register in second field
+   b  Base register in first field
+   B  Base register in second field
+   v  Vector register in first field
+   V  Vector register in first field
+   A  Optional address register (base register)
+   X  Optional index register
+   I  Immediate data (16bits signed)
+   O  Offset field (16bits signed)
+   h  Offset field (15bits signed)
+   d  Offset field (14bits signed)
+   S  Shift count field
+
+   any other characters are printed as is...
+*/
+
+/* The assembler requires that this array be sorted as follows:
+   all instances of the same mnemonic must be consecutive.
+   All instances of the same mnemonic with the same number of operands
+   must be consecutive.
+ */
+struct gld_opcode gld_opcodes[] =
+{
+{ "abm",       0xa0080000,     0xfc080000,     "f,xOA,X",      4 },
+{ "abr",       0x18080000,     0xfc0c0000,     "r,f",          2 },
+{ "aci",       0xfc770000,     0xfc7f8000,     "r,I",          4 },
+{ "adfd",      0xe0080002,     0xfc080002,     "r,xOA,X",      4 },
+{ "adfw",      0xe0080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "adi",       0xc8010000,     0xfc7f0000,     "r,I",          4 },
+{ "admb",      0xb8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "admd",      0xb8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "admh",      0xb8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "admw",      0xb8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "adr",       0x38000000,     0xfc0f0000,     "r,R",          2 },
+{ "adrfd",     0x38090000,     0xfc0f0000,     "r,R",          2 },
+{ "adrfw",     0x38010000,     0xfc0f0000,     "r,R",          2 },
+{ "adrm",      0x38080000,     0xfc0f0000,     "r,R",          2 },
+{ "ai",        0xfc030000,     0xfc07ffff,     "I",            4 },
+{ "anmb",      0x84080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "anmd",      0x84000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "anmh",      0x84000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "anmw",      0x84000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "anr",       0x04000000,     0xfc0f0000,     "r,R",          2 },
+{ "armb",      0xe8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "armd",      0xe8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "armh",      0xe8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "armw",      0xe8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "bcf",       0xf0000000,     0xfc080000,     "I,xOA,X",      4 },
+{ "bct",       0xec000000,     0xfc080000,     "I,xOA,X",      4 },
+{ "bei",       0x00060000,     0xffff0000,     "",             2 },
+{ "bft",       0xf0000000,     0xff880000,     "xOA,X",        4 },
+{ "bib",       0xf4000000,     0xfc780000,     "r,xOA",        4 },
+{ "bid",       0xf4600000,     0xfc780000,     "r,xOA",        4 },
+{ "bih",       0xf4200000,     0xfc780000,     "r,xOA",        4 },
+{ "biw",       0xf4400000,     0xfc780000,     "r,xOA",        4 },
+{ "bl",        0xf8800000,     0xff880000,     "xOA,X",        4 },
+{ "bsub",      0x5c080000,     0xff8f0000,     "",             2 },
+{ "bsubm",     0x28080000,     0xfc080000,     "",             4 },
+{ "bu",        0xec000000,     0xff880000,     "xOA,X",        4 },
+{ "call",      0x28080000,     0xfc0f0000,     "",             2 },
+{ "callm",     0x5c080000,     0xff880000,     "",             4 },
+{ "camb",      0x90080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "camd",      0x90000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "camh",      0x90000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "camw",      0x90000000,     0xfc080000,     "r.xOA,X",      4 },
+{ "car",       0x10000000,     0xfc0f0000,     "r,R",          2 },
+{ "cd",        0xfc060000,     0xfc070000,     "r,f",          4 },
+{ "cea",       0x000f0000,     0xffff0000,     "",             2 },
+{ "ci",        0xc8050000,     0xfc7f0000,     "r,I",          4 },
+{ "cmc",       0x040a0000,     0xfc7f0000,     "r",            2 },
+{ "cmmb",      0x94080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "cmmd",      0x94000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "cmmh",      0x94000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "cmmw",      0x94000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "cmr",       0x14000000,     0xfc0f0000,     "r,R",          2 },
+{ "daci",      0xfc7f0000,     0xfc7f8000,     "r,I",          4 },
+{ "dae",       0x000e0000,     0xffff0000,     "",             2 },
+{ "dai",       0xfc040000,     0xfc07ffff,     "I",            4 },
+{ "dci",       0xfc6f0000,     0xfc7f8000,     "r,I",          4 },
+{ "di",        0xfc010000,     0xfc07ffff,     "I",            4 },
+{ "dvfd",      0xe4000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "dvfw",      0xe4000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "dvi",       0xc8040000,     0xfc7f0000,     "r,I",          4 },
+{ "dvmb",      0xc4080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "dvmh",      0xc4000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "dvmw",      0xc4000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "dvr",       0x380a0000,     0xfc0f0000,     "r,R",          2 },
+{ "dvrfd",     0x380c0000,     0xfc0f0000,     "r,R",          4 },
+{ "dvrfw",     0x38040000,     0xfc0f0000,     "r,xOA,X",      4 },
+{ "eae",       0x00080000,     0xffff0000,     "",             2 },
+{ "eci",       0xfc670000,     0xfc7f8080,     "r,I",          4 },
+{ "ecwcs",     0xfc4f0000,     0xfc7f8000,     "",             4 },
+{ "ei",        0xfc000000,     0xfc07ffff,     "I",            4 },
+{ "eomb",      0x8c080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "eomd",      0x8c000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "eomh",      0x8c000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "eomw",      0x8c000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "eor",       0x0c000000,     0xfc0f0000,     "r,R",          2 },
+{ "eorm",      0x0c080000,     0xfc0f0000,     "r,R",          2 },
+{ "es",        0x00040000,     0xfc7f0000,     "r",            2 },
+{ "exm",       0xa8000000,     0xff880000,     "xOA,X",        4 },
+{ "exr",       0xc8070000,     0xfc7f0000,     "r",            2 },
+{ "exrr",      0xc8070002,     0xfc7f0002,     "r",            2 },
+{ "fixd",      0x380d0000,     0xfc0f0000,     "r,R",          2 },
+{ "fixw",      0x38050000,     0xfc0f0000,     "r,R",          2 },
+{ "fltd",      0x380f0000,     0xfc0f0000,     "r,R",          2 },
+{ "fltw",      0x38070000,     0xfc0f0000,     "r,R",          2 },
+{ "grio",      0xfc3f0000,     0xfc7f8000,     "r,I",          4 },
+{ "halt",      0x00000000,     0xffff0000,     "",             2 },
+{ "hio",       0xfc370000,     0xfc7f8000,     "r,I",          4 },
+{ "jwcs",      0xfa080000,     0xff880000,     "xOA,X",        4 },
+{ "la",        0x50000000,     0xfc000000,     "r,xOA,X",      4 },
+{ "labr",      0x58080000,     0xfc080000,     "b,xOA,X",      4 },
+{ "lb",        0xac080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lcs",       0x00030000,     0xfc7f0000,     "r",            2 },
+{ "ld",        0xac000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "lear",      0x80000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lf",        0xcc000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lfbr",      0xcc080000,     0xfc080000,     "b,xOA,X",      4 },
+{ "lh",        0xac000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "li",        0xc8000000,     0xfc7f0000,     "r,I",          4 },
+{ "lmap",      0x2c070000,     0xfc7f0000,     "r",            2 },
+{ "lmb",       0xb0080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lmd",       0xb0000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "lmh",       0xb0000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "lmw",       0xb0000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lnb",       0xb4080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lnd",       0xb4000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "lnh",       0xb4000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "lnw",       0xb4000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lpsd",      0xf9800000,     0xff880000,     "r,xOA,X",      4 },
+{ "lpsdcm",    0xfa800000,     0xff880000,     "r,xOA,X",      4 },
+{ "lw",        0xac000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "lwbr",      0x5c000000,     0xfc080000,     "b,xOA,X",      4 },
+{ "mpfd",      0xe4080002,     0xfc080002,     "r,xOA,X",      4 },
+{ "mpfw",      0xe4080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "mpi",       0xc8030000,     0xfc7f0000,     "r,I",          4 },
+{ "mpmb",      0xc0080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "mpmh",      0xc0000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "mpmw",      0xc0000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "mpr",       0x38020000,     0xfc0f0000,     "r,R",          2 },
+{ "mprfd",     0x380e0000,     0xfc0f0000,     "r,R",          2 },
+{ "mprfw",     0x38060000,     0xfc0f0000,     "r,R",          2 },
+{ "nop",       0x00020000,     0xffff0000,     "",             2 },
+{ "ormb",      0x88080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "ormd",      0x88000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "ormh",      0x88000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "ormw",      0x88000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "orr",       0x08000000,     0xfc0f0000,     "r,R",          2 },
+{ "orrm",      0x08080000,     0xfc0f0000,     "r,R",          2 },
+{ "rdsts",     0x00090000,     0xfc7f0000,     "r",            2 },
+{ "return",    0x280e0000,     0xfc7f0000,     "",             2 },
+{ "ri",        0xfc020000,     0xfc07ffff,     "I",            4 },
+{ "rnd",       0x00050000,     0xfc7f0000,     "r",            2 },
+{ "rpswt",     0x040b0000,     0xfc7f0000,     "r",            2 },
+{ "rschnl",    0xfc2f0000,     0xfc7f8000,     "r,I",          4 },
+{ "rsctl",     0xfc470000,     0xfc7f8000,     "r,I",          4 },
+{ "rwcs",      0x000b0000,     0xfc0f0000,     "r,R",          2 },
+{ "sacz",      0x10080000,     0xfc0f0000,     "r,R",          2 },
+{ "sbm",       0x98080000,     0xfc080000,     "f,xOA,X",      4 },
+{ "sbr",       0x18000000,     0xfc0c0000,     "r,f",          4 },
+{ "sea",       0x000d0000,     0xffff0000,     "",             2 },
+{ "setcpu",    0x2c090000,     0xfc7f0000,     "r",            2 },
+{ "sio",       0xfc170000,     0xfc7f8000,     "r,I",          4 },
+{ "sipu",      0x000a0000,     0xffff0000,     "",             2 },
+{ "sla",       0x1c400000,     0xfc600000,     "r,S",          2 },
+{ "slad",      0x20400000,     0xfc600000,     "r,S",          2 },
+{ "slc",       0x24400000,     0xfc600000,     "r,S",          2 },
+{ "sll",       0x1c600000,     0xfc600000,     "r,S",          2 },
+{ "slld",      0x20600000,     0xfc600000,     "r,S",          2 },
+{ "smc",       0x04070000,     0xfc070000,     "",             2 },
+{ "sra",       0x1c000000,     0xfc600000,     "r,S",          2 },
+{ "srad",      0x20000000,     0xfc600000,     "r,S",          2 },
+{ "src",       0x24000000,     0xfc600000,     "r,S",          2 },
+{ "srl",       0x1c200000,     0xfc600000,     "r,S",          2 },
+{ "srld",      0x20200000,     0xfc600000,     "r,S",          2 },
+{ "stb",       0xd4080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "std",       0xd4000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "stf",       0xdc000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "stfbr",     0x54000000,     0xfc080000,     "b,xOA,X",      4 },
+{ "sth",       0xd4000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "stmb",      0xd8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "stmd",      0xd8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "stmh",      0xd8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "stmw",      0xd8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "stpio",     0xfc270000,     0xfc7f8000,     "r,I",          4 },
+{ "stw",       0xd4000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "stwbr",     0x54000000,     0xfc080000,     "b,xOA,X",      4 },
+{ "suabr",     0x58000000,     0xfc080000,     "b,xOA,X",      4 },
+{ "sufd",      0xe0000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "sufw",      0xe0000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "sui",       0xc8020000,     0xfc7f0000,     "r,I",          4 },
+{ "sumb",      0xbc080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "sumd",      0xbc000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "sumh",      0xbc000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "sumw",      0xbc000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "sur",       0x3c000000,     0xfc0f0000,     "r,R",          2 },
+{ "surfd",     0x380b0000,     0xfc0f0000,     "r,xOA,X",      4 },
+{ "surfw",     0x38030000,     0xfc0f0000,     "r,R",          2 },
+{ "surm",      0x3c080000,     0xfc0f0000,     "r,R",          2 },
+{ "svc",       0xc8060000,     0xffff0000,     "",             4 },
+{ "tbm",       0xa4080000,     0xfc080000,     "f,xOA,X",      4 },
+{ "tbr",       0x180c0000,     0xfc0c0000,     "r,f",          2 },
+{ "tbrr",      0x2c020000,     0xfc0f0000,     "r,B",          2 },
+{ "tccr",      0x28040000,     0xfc7f0000,     "",             2 },
+{ "td",        0xfc050000,     0xfc070000,     "r,f",          4 },
+{ "tio",       0xfc1f0000,     0xfc7f8000,     "r,I",          4 },
+{ "tmapr",     0x2c0a0000,     0xfc0f0000,     "r,R",          2 },
+{ "tpcbr",     0x280c0000,     0xfc7f0000,     "r",            2 },
+{ "trbr",      0x2c010000,     0xfc0f0000,     "b,R",          2 },
+{ "trc",       0x2c030000,     0xfc0f0000,     "r,R",          2 },
+{ "trcc",      0x28050000,     0xfc7f0000,     "",             2 },
+{ "trcm",      0x2c0b0000,     0xfc0f0000,     "r,R",          2 },
+{ "trn",       0x2c040000,     0xfc0f0000,     "r,R",          2 },
+{ "trnm",      0x2c0c0000,     0xfc0f0000,     "r,R",          2 },
+{ "trr",       0x2c000000,     0xfc0f0000,     "r,R",          2 },
+{ "trrm",      0x2c080000,     0xfc0f0000,     "r,R",          2 },
+{ "trsc",      0x2c0e0000,     0xfc0f0000,     "r,R",          2 },
+{ "trsw",      0x28000000,     0xfc7f0000,     "r",            2 },
+{ "tscr",      0x2c0f0000,     0xfc0f0000,     "r,R",          2 },
+{ "uei",       0x00070000,     0xffff0000,     "",             2 },
+{ "wait",      0x00010000,     0xffff0000,     "",             2 },
+{ "wcwcs",     0xfc5f0000,     0xfc7f8000,     "",             4 },
+{ "wwcs",      0x000c0000,     0xfc0f0000,     "r,R",          2 },
+{ "xcbr",      0x28020000,     0xfc0f0000,     "b,B",          2 },
+{ "xcr",       0x2c050000,     0xfc0f0000,     "r,R",          2 },
+{ "xcrm",      0x2c0d0000,     0xfc0f0000,     "r,R",          2 },
+{ "zbm",       0x9c080000,     0xfc080000,     "f,xOA,X",      4 },
+{ "zbr",       0x18040000,     0xfc0c0000,     "r,f",          2 },
+{ "zmb",       0xf8080000,     0xfc080000,     "r,xOA,X",      4 },
+{ "zmd",       0xf8000002,     0xfc080002,     "r,xOA,X",      4 },
+{ "zmh",       0xf8000001,     0xfc080001,     "r,xOA,X",      4 },
+{ "zmw",       0xf8000000,     0xfc080000,     "r,xOA,X",      4 },
+{ "zr",        0x0c000000,     0xfc0f0000,     "r",            2 },
+};
+
+int numopcodes = sizeof(gld_opcodes) / sizeof(gld_opcodes[0]);
+
+struct gld_opcode *endop = gld_opcodes + sizeof(gld_opcodes) /
+               sizeof(gld_opcodes[0]);
diff --git a/include/pyr-opcode.h b/include/pyr-opcode.h
new file mode 100755 (executable)
index 0000000..06632b8
--- /dev/null
@@ -0,0 +1,287 @@
+/* pyramid.opcode.h -- gdb initial attempt. */
+
+/* pyramid opcode table: wot to do with this
+   particular opcode */
+
+struct pyr_datum
+{
+  char              nargs;
+  char *            args;      /* how to compile said opcode */
+  unsigned long     mask;      /* Bit vector: which operand modes are valid
+                                  for this opcode */
+  unsigned char     code;      /* op-code (always 6(?) bits */
+};
+
+typedef struct pyr_insn_format {
+    unsigned int mode :4;
+    unsigned int operator :8;
+    unsigned int index_scale :2;
+    unsigned int index_reg :6;
+    unsigned int operand_1 :6;
+    unsigned int operand_2:6;
+} pyr_insn_format;
+       
+
+/* We store four bytes of opcode for all opcodes.
+   Pyramid is sufficiently RISCy that:
+      - insns are always an integral number of words;
+      - the length of any insn can be told from the first word of
+        the insn. (ie, if there are zero, one, or two words of
+       immediate operand/offset).
+
+   
+   The args component is a string containing two characters for each
+   operand of the instruction.  The first specifies the kind of operand;
+   the second, the place it is stored. */
+
+/* Kinds of operands:
+   mask         assembler syntax       description
+   0x0001:  movw Rn,Rn         register to register
+   0x0002:  movw K,Rn          quick immediate to register
+   0x0004:  movw I,Rn          long immediate to register
+   0x0008:  movw (Rn),Rn       register indirect to register
+           movw (Rn)[x],Rn     register indirect to register
+   0x0010:  movw I(Rn),Rn      offset register indirect to register
+           movw I(Rn)[x],Rn    offset register indirect, indexed, to register
+
+   0x0020:  movw Rn,(Rn)       register to register indirect                
+   0x0040:  movw K,(Rn)                quick immediate to register indirect         
+   0x0080:  movw I,(Rn)                long immediate to register indirect          
+   0x0100:  movw (Rn),(Rn)     register indirect to-register indirect       
+   0x0100:  movw (Rn),(Rn)     register indirect to-register indirect       
+   0x0200:  movw I(Rn),(Rn)    register indirect+offset to register indirect
+   0x0200:  movw I(Rn),(Rn)    register indirect+offset to register indirect
+
+   0x0400:  movw Rn,I(Rn)      register to register indirect+offset
+   0x0800:  movw K,I(Rn)       quick immediate to register indirect+offset
+   0x1000:  movw I,I(Rn)       long immediate to register indirect+offset
+   0x1000:  movw (Rn),I(Rn)    register indirect to-register indirect+offset
+   0x1000:  movw I(Rn),I(Rn)   register indirect+offset to register indirect
+                                       +offset
+   0x0000:  (irregular)                ???
+   
+
+   Each insn has a four-bit field encoding the type(s) of its operands.
+*/
+
+/* Some common combinations
+   */
+
+/* the first 5,(0x1|0x2|0x4|0x8|0x10) ie (1|2|4|8|16), ie ( 32 -1)*/
+#define GEN_TO_REG (31)
+
+#define        UNKNOWN ((unsigned long)-1)
+#define ANY (GEN_TO_REG | (GEN_TO_REG << 5) | (GEN_TO_REG << 15))
+
+#define CONVERT (1|8|0x10|0x20|0x200)
+
+#define K_TO_REG (2)
+#define I_TO_REG (4)
+#define NOTK_TO_REG (GEN_TO_REG & ~K_TO_REG)
+#define NOTI_TO_REG (GEN_TO_REG & ~I_TO_REG)
+
+/* The assembler requires that this array be sorted as follows:
+   all instances of the same mnemonic must be consecutive.
+   All instances of the same mnemonic with the same number of operands
+   must be consecutive.
+ */
+
+struct pyr_opcode              /* pyr opcode text */
+{
+  char *            name;      /* opcode name: lowercase string  [key]  */
+  struct pyr_datum  datum;     /* rest of opcode table          [datum] */
+};
+
+#define pyr_how args
+#define pyr_nargs nargs
+#define pyr_mask mask
+#define pyr_name name
+
+struct pyr_opcode pyr_opcodes[] =
+{
+  {"movb",     { 2, "", UNKNOWN,               0x11}, },
+  {"movh",     { 2, "", UNKNOWN,               0x12} },
+  {"movw",     { 2, "", ANY,                   0x10} },
+  {"movl",     { 2, "", ANY,                   0x13} },
+  {"mnegw",    { 2, "", (0x1|0x8|0x10),        0x14} },
+  {"mnegf",    { 2, "", 0x1,                   0x15} },
+  {"mnegd",    { 2, "", 0x1,                   0x16} },
+  {"mcomw",    { 2, "", (0x1|0x8|0x10),        0x17} },
+  {"mabsw",    { 2, "", (0x1|0x8|0x10),        0x18} },
+  {"mabsf",    { 2, "", 0x1,                   0x19} },
+  {"mabsd",    { 2, "", 0x1,                   0x1a} },
+  {"mtstw",    { 2, "", (0x1|0x8|0x10),        0x1c} },
+  {"mtstf",    { 2, "", 0x1,                   0x1d} },
+  {"mtstd",    { 2, "", 0x1,                   0x1e} },
+  {"mova",     { 2, "", 0x8|0x10,              0x1f} },
+  {"movzbw",   { 2, "", (0x1|0x8|0x10),        0x20} },
+  {"movzhw",   { 2, "", (0x1|0x8|0x10),        0x21} },
+                               /* 2 insns out of order here */
+  {"movbl",    { 2, "", 1,                     0x4f} },
+  {"filbl",    { 2, "", 1,                     0x4e} },
+
+  {"cvtbw",    { 2, "", CONVERT,               0x22} },
+  {"cvthw",    { 2, "", CONVERT,               0x23} },
+  {"cvtwb",    { 2, "", CONVERT,               0x24} },
+  {"cvtwh",    { 2, "", CONVERT,               0x25} },
+  {"cvtwf",    { 2, "", CONVERT,               0x26} },
+  {"cvtwd",    { 2, "", CONVERT,               0x27} },
+  {"cvtfw",    { 2, "", CONVERT,               0x28} },
+  {"cvtfd",    { 2, "", CONVERT,               0x29} },
+  {"cvtdw",    { 2, "", CONVERT,               0x2a} },
+  {"cvtdf",    { 2, "", CONVERT,               0x2b} },
+
+  {"addw",     { 2, "", GEN_TO_REG,            0x40} },
+  {"addwc",    { 2, "", GEN_TO_REG,            0x41} },
+  {"subw",     { 2, "", GEN_TO_REG,            0x42} },
+  {"subwb",    { 2, "", GEN_TO_REG,            0x43} },
+  {"rsubw",    { 2, "", GEN_TO_REG,            0x44} },
+  {"mulw",     { 2, "", GEN_TO_REG,            0x45} },
+  {"emul",     { 2, "", GEN_TO_REG,            0x47} },
+  {"umulw",    { 2, "", GEN_TO_REG,            0x46} },
+  {"divw",     { 2, "", GEN_TO_REG,            0x48} },
+  {"ediv",     { 2, "", GEN_TO_REG,            0x4a} },
+  {"rdivw",    { 2, "", GEN_TO_REG,            0x4b} },
+  {"udivw",    { 2, "", GEN_TO_REG,            0x49} },
+  {"modw",     { 2, "", GEN_TO_REG,            0x4c} },
+  {"umodw",    { 2, "", GEN_TO_REG,            0x4d} },
+
+
+  {"addf",     { 2, "", 1,                     0x50} },
+  {"addd",     { 2, "", 1,                     0x51} },
+  {"subf",     { 2, "", 1,                     0x52} },
+  {"subd",     { 2, "", 1,                     0x53} },
+  {"mulf",     { 2, "", 1,                     0x56} },
+  {"muld",     { 2, "", 1,                     0x57} },
+  {"divf",     { 2, "", 1,                     0x58} },
+  {"divd",     { 2, "", 1,                     0x59} },
+
+
+  {"cmpb",     { 2, "", UNKNOWN,               0x61} },
+  {"cmph",     { 2, "", UNKNOWN,               0x62} },
+  {"cmpw",     { 2, "", UNKNOWN,               0x60} },
+  {"ucmpb",    { 2, "", UNKNOWN,               0x66} },
+  /* WHY no "ucmph"??? */
+  {"ucmpw",    { 2, "", UNKNOWN,               0x65} },
+  {"xchw",     { 2, "", UNKNOWN,               0x0f} },
+
+
+  {"andw",     { 2, "", GEN_TO_REG,            0x30} },
+  {"orw",      { 2, "", GEN_TO_REG,            0x31} },
+  {"xorw",     { 2, "", GEN_TO_REG,            0x32} },
+  {"bicw",     { 2, "", GEN_TO_REG,            0x33} },
+  {"lshlw",    { 2, "", GEN_TO_REG,            0x38} },
+  {"ashlw",    { 2, "", GEN_TO_REG,            0x3a} },
+  {"ashll",    { 2, "", GEN_TO_REG,            0x3c} },
+  {"ashrw",    { 2, "", GEN_TO_REG,            0x3b} },
+  {"ashrl",    { 2, "", GEN_TO_REG,            0x3d} },
+  {"rotlw",    { 2, "", GEN_TO_REG,            0x3e} },
+  {"rotrw",    { 2, "", GEN_TO_REG,            0x3f} },
+
+  /* push and pop insns are "going away next release". */
+  {"pushw",    { 2, "", GEN_TO_REG,            0x0c} },
+  {"popw",     { 2, "", (0x1|0x8|0x10),        0x0d} },
+  {"pusha",    { 2, "", (0x8|0x10),            0x0e} },
+
+  {"bitsw",    { 2, "", UNKNOWN,               0x35} },
+  {"bitcw",    { 2, "", UNKNOWN,               0x36} },
+  /* some kind of ibra/dbra insns??*/
+  {"icmpw",    { 2, "", UNKNOWN,               0x67} },
+  {"dcmpw",    { 2, "", (1|4|0x20|0x80|0x400|0x1000),  0x69} },/*FIXME*/
+  {"acmpw",    { 2, "", 1,                     0x6b} },
+
+  /* Call is written as a 1-op insn, but is always (dis)assembled as a 2-op
+     insn with a 2nd op of tr14.   The assembler will have to grok this.  */
+  {"call",     { 2, "", GEN_TO_REG,            0x04} },
+  {"call",     { 1, "", GEN_TO_REG,            0x04} },
+
+  {"callk",    { 1, "", UNKNOWN,               0x06} },/* system call?*/
+  /* Ret is usually written as a 0-op insn, but gets disassembled as a
+     1-op insn. The operand is always tr15. */
+  {"ret",      { 0, "", UNKNOWN,               0x09} },
+  {"ret",      { 1, "", UNKNOWN,               0x09} },
+  {"adsf",     { 2, "", (1|2|4),               0x08} },
+  {"retd",     { 2, "", UNKNOWN,               0x0a} },
+  {"btc",      { 2, "", UNKNOWN,               0x01} },
+  {"bfc",      { 2, "", UNKNOWN,               0x02} },
+  /* Careful: halt is 0x00000000. Jump must have some other (mode?)bit set?? */
+  {"jump",     { 1, "", UNKNOWN,               0x00} },
+  {"btp",      { 2, "", UNKNOWN,               0xf00} },
+  /* read control-stack pointer is another 1-or-2 operand insn. */
+  {"rcsp",     { 2, "", UNKNOWN,               0x01f} },
+  {"rcsp",     { 1, "", UNKNOWN,               0x01f} }
+};
+
+/* end: pyramid.opcode.h */
+/* One day I will have to take the time to find out what operands
+   are valid for these insns, and guess at what they mean.
+
+   I can't imagine what the "I???" insns (iglob, etc) do.
+
+   the arithmetic-sounding insns ending in "p" sound awfully like BCD
+   arithmetic insns:
+       dshlp -> Decimal SHift Left Packed
+       dshrp -> Decimal SHift Right Packed
+   and cvtlp would be convert long to packed.
+   I have no idea how the operands are interpreted; but having them be
+   a long register with (address, length) of an in-memory packed BCD operand
+   would not be surprising.
+   They are unlikely to be a packed bcd string: 64 bits of long give
+   is only 15 digits+sign, which isn't enough for COBOL.
+ */ 
+#if 0
+  {"wcsp",     { 2, "", UNKNOWN,               0x00} }, /*write csp?*/
+  /* The OSx Operating System Porting Guide claims SSL does things
+     with tr12 (a register reserved to it) to do with static block-structure
+     references.  SSL=Set Static Link?  It's "Going away next release". */
+  {"ssl",      { 2, "", UNKNOWN,               0x00} },
+  {"ccmps",    { 2, "", UNKNOWN,               0x00} },
+  {"lcd",      { 2, "", UNKNOWN,               0x00} },
+  {"uemul",    { 2, "", UNKNOWN,               0x00} }, /*unsigned emul*/
+  {"srf",      { 2, "", UNKNOWN,               0x00} }, /*Gidget time???*/
+  {"mnegp",    { 2, "", UNKNOWN,               0x00} }, /move-neg phys?*/
+  {"ldp",      { 2, "", UNKNOWN,               0x00} }, /*load phys?*/
+  {"ldti",     { 2, "", UNKNOWN,               0x00} },
+  {"ldb",      { 2, "", UNKNOWN,               0x00} },
+  {"stp",      { 2, "", UNKNOWN,               0x00} },
+  {"stti",     { 2, "", UNKNOWN,               0x00} },
+  {"stb",      { 2, "", UNKNOWN,               0x00} },
+  {"stu",      { 2, "", UNKNOWN,               0x00} },
+  {"addp",     { 2, "", UNKNOWN,               0x00} },
+  {"subp",     { 2, "", UNKNOWN,               0x00} },
+  {"mulp",     { 2, "", UNKNOWN,               0x00} },
+  {"divp",     { 2, "", UNKNOWN,               0x00} },
+  {"dshlp",    { 2, "", UNKNOWN,               0x00} },  /* dec shl packed? */
+  {"dshrp",    { 2, "", UNKNOWN,               0x00} }, /* dec shr packed? */
+  {"movs",     { 2, "", UNKNOWN,               0x00} }, /*move (string?)?*/
+  {"cmpp",     { 2, "", UNKNOWN,               0x00} }, /* cmp phys?*/
+  {"cmps",     { 2, "", UNKNOWN,               0x00} }, /* cmp (string?)?*/
+  {"cvtlp",    { 2, "", UNKNOWN,               0x00} }, /* cvt long to p??*/
+  {"cvtpl",    { 2, "", UNKNOWN,               0x00} }, /* cvt p to l??*/
+  {"dintr",    { 2, "", UNKNOWN,               0x00} }, /* ?? intr ?*/
+  {"rphysw",   { 2, "", UNKNOWN,               0x00} }, /* read phys word?*/
+  {"wphysw",   { 2, "", UNKNOWN,               0x00} }, /* write phys word?*/
+  {"cmovs",    { 2, "", UNKNOWN,               0x00} },
+  {"rsubw",    { 2, "", UNKNOWN,               0x00} },
+  {"bicpsw",   { 2, "", UNKNOWN,               0x00} }, /* clr bit in psw? */
+  {"bispsw",   { 2, "", UNKNOWN,               0x00} }, /* set bit in psw? */
+  {"eio",      { 2, "", UNKNOWN,               0x00} }, /* ?? ?io ? */
+  {"callp",    { 2, "", UNKNOWN,               0x00} }, /* call phys?*/
+  {"callr",    { 2, "", UNKNOWN,               0x00} },
+  {"lpcxt",    { 2, "", UNKNOWN,               0x00} }, /*load proc context*/
+  {"rei",      { 2, "", UNKNOWN,               0x00} }, /*ret from intrpt*/
+  {"rport",    { 2, "", UNKNOWN,               0x00} }, /*read-port?*/
+  {"rtod",     { 2, "", UNKNOWN,               0x00} }, /*read-time-of-day?*/
+  {"ssi",      { 2, "", UNKNOWN,               0x00} },
+  {"vtpa",     { 2, "", UNKNOWN,               0x00} }, /*virt-to-phys-addr?*/
+  {"wicl",     { 2, "", UNKNOWN,               0x00} }, /* write icl ? */
+  {"wport",    { 2, "", UNKNOWN,               0x00} }, /*write-port?*/
+  {"wtod",     { 2, "", UNKNOWN,               0x00} }, /*write-time-of-day?*/
+  {"flic",     { 2, "", UNKNOWN,               0x00} },
+  {"iglob",    { 2, "", UNKNOWN,               0x00} }, /* I global? */
+  {"iphys",    { 2, "", UNKNOWN,               0x00} }, /* I physical? */
+  {"ipid",     { 2, "", UNKNOWN,               0x00} }, /* I pid? */
+  {"ivect",    { 2, "", UNKNOWN,               0x00} }, /* I vector? */
+  {"lamst",    { 2, "", UNKNOWN,               0x00} },
+  {"tio",      { 2, "", UNKNOWN,               0x00} },
+#endif
diff --git a/include/sparc-opcode.h b/include/sparc-opcode.h
new file mode 100755 (executable)
index 0000000..6ecc6e2
--- /dev/null
@@ -0,0 +1,750 @@
+/* Table of opcodes for the sparc.
+   Copyright (C) 1989 Free Software Foundation, Inc.
+
+This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler.
+
+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 1, 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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+$Id$
+$Log$
+Revision 1.1  1991/05/19 00:19:52  rich
+Initial revision
+
+ * Revision 1.1.1.1  1991/03/21  21:26:54  gumby
+ * Back from Intel with Steve
+ *
+ * Revision 1.1  1991/03/21  21:26:53  gumby
+ * Initial revision
+ *
+ * Revision 1.1  1991/03/13  00:34:24  chrisb
+ * Initial revision
+ *
+ * Revision 1.2  1991/03/08  21:54:49  rich
+ *  Modified Files:
+ *     Makefile ar.c binutils.h bucomm.c copy.c cplus-dem.c getopt.c
+ *     i960-pinsn.c m68k-pinsn.c nm.c objdump.c sparc-opcode.h
+ *     sparc-pinsn.c strip.c
+ *
+ * Verifying Portland tree with steve's last changes.  Also, some partial
+ * porting.
+ *
+ * Revision 1.1  1991/02/22  16:48:08  sac
+ * Initial revision
+ *
+*/
+
+#if !defined(__STDC__) && !defined(const)
+#define const
+#endif
+
+/*
+ * Structure of an opcode table entry.
+ */
+struct sparc_opcode
+{
+    const char *name;
+    unsigned long int match;   /* Bits that must be set.  */
+    unsigned long int lose;    /* Bits that must not be set.  */
+    const char *args;
+    /* Nonzero if this is a delayed branch instruction.  */
+/* This was called "flags" in the gdb version. */
+    char delayed;
+};
+
+/*
+   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.
+   f    frs2 floating point register.
+   g    frsd floating point register.
+   b    crs1 coprocessor register
+   c    crs2 coprocessor register
+   D    crsd coprocessor register
+   h    22 high bits.
+   i    13 bit Immediate.
+   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.
+   q    Floating point queue.
+   r    Single register that is both rs1 and rsd.
+   Q    Coprocessor queue.
+   S    Special case.
+   t    Trap base register.
+   w    Window invalid mask register.
+   y    Y register.
+
+*/
+
+/* The order of the opcodes in this 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.  */
+
+static struct sparc_opcode sparc_opcodes[] =
+{
+
+{ "ldd",        0xc1980000, 0x0060201f, "[1],D", 0 }, /* ldd [rs1+%g0],d */
+{ "ldd",        0xc1982000, 0x00601fff, "[1],D", 0 }, /* ldd [rs1+0],d */
+{ "ldd",        0xc1982000, 0x00600000, "[1+i],D", 0 },
+{ "ldd",        0xc1982000, 0x00600000, "[i+1],D", 0 },
+{ "ldd",        0xc1980000, 0x00602000, "[1+2],D", 0 },
+{ "ldd",        0xc1180000, 0x00e0201f, "[1],g", 0 }, /* ldd [rs1+%g0],d */
+{ "ldd",        0xc1182000, 0x00e01fff, "[1],g", 0 }, /* ldd [rs1+0],d */
+{ "ldd",        0xc1182000, 0x00e00000, "[1+i],g", 0 },
+{ "ldd",        0xc1182000, 0x00e00000, "[i+1],g", 0 },
+{ "ldd",        0xc1180000, 0x00e02000, "[1+2],g", 0 },
+{ "ldd",       0xc0180000, 0x01e0201f, "[1],d", 0 }, /* ldd [rs1+%g0],d */
+{ "ldd",        0xc0182000, 0x01e01fff, "[1],d", 0 }, /* ldd [rs1+0],d */
+{ "ldd",       0xc0182000, 0x01e00000, "[1+i],d", 0 },
+{ "ldd",       0xc0182000, 0x01e00000, "[i+1],d", 0 },
+{ "ldd",       0xc0180000, 0x01e02000, "[1+2],d", 0 },
+{ "ld",         0xc1880000, 0x0070201f, "[1],C", 0 }, /* ld [rs1+%g0],d */
+{ "ld",         0xc1882000, 0x00701fff, "[1],C", 0 }, /* ld [rs1+0],d */
+{ "ld",         0xc1882000, 0x00700000, "[1+i],C", 0 },
+{ "ld",         0xc1882000, 0x00700000, "[i+1],C", 0 },
+{ "ld",         0xc1880000, 0x00702000, "[1+2],C", 0 },
+{ "ld",         0xc1800000, 0x0078201f, "[1],D", 0 }, /* ld [rs1+%g0],d */
+{ "ld",         0xc1802000, 0x00781fff, "[1],D", 0 }, /* ld [rs1+0],d */
+{ "ld",         0xc1802000, 0x00780000, "[1+i],D", 0 },
+{ "ld",         0xc1802000, 0x00780000, "[i+1],D", 0 },
+{ "ld",         0xc1800000, 0x00782000, "[1+2],D", 0 },
+{ "ld",         0xc1080000, 0x00f0201f, "[1],F", 0 }, /* ld [rs1+%g0],d */
+{ "ld",         0xc1082000, 0x00f01fff, "[1],F", 0 }, /* ld [rs1+0],d */
+{ "ld",         0xc1082000, 0x00f00000, "[1+i],F", 0 },
+{ "ld",         0xc1082000, 0x00f00000, "[i+1],F", 0 },
+{ "ld",         0xc1080000, 0x00f02000, "[1+2],F", 0 },
+{ "ld",         0xc1000000, 0x00f8201f, "[1],g", 0 }, /* ld [rs1+%g0],d */
+{ "ld",         0xc1002000, 0x00f81fff, "[1],g", 0 }, /* ld [rs1+0],d */
+{ "ld",         0xc1002000, 0x00f80000, "[1+i],g", 0 },
+{ "ld",         0xc1002000, 0x00f80000, "[i+1],g", 0 },
+{ "ld",         0xc1000000, 0x00f82000, "[1+2],g", 0 },
+{ "ld",                0xc0000000, 0x01f8201f, "[1],d", 0 }, /* ld [rs1+%g0],d */
+{ "ld",                0xc0002000, 0x01f81fff, "[1],d", 0 }, /* ld [rs1+0],d */
+{ "ld",                0xc0002000, 0x01f80000, "[1+i],d", 0 },
+{ "ld",                0xc0002000, 0x01f80000, "[i+1],d", 0 },
+{ "ld",                0xc0000000, 0x01f82000, "[1+2],d", 0 },
+{ "ldstuba",    0xc0d80000, 0x0100201f, "[1]A,d", 0 }, /* ldstuba [rs1+%g0],d */
+{ "ldstuba",   0xc0d80000, 0x01002000, "[1+2]A,d", 0 },
+{ "ldsha",      0xc0d00000, 0x0128201f, "[1]A,d", 0 }, /* ldsha [rs1+%g0],d */
+{ "ldsha",     0xc0d00000, 0x01282000, "[1+2]A,d", 0 },
+{ "ldsba",      0xc0c80000, 0x0130201f, "[1]A,d", 0 }, /* ldsba [rs1+%g0],d */
+{ "ldsba",     0xc0c80000, 0x01302000, "[1+2]A,d", 0 },
+{ "ldda",       0xc0980000, 0x0160201f, "[1]A,d", 0 }, /* ldda [rs1+%g0],d */
+{ "ldda",      0xc0980000, 0x01602000, "[1+2]A,d", 0 },
+{ "lduha",      0xc0900000, 0x0168201f, "[1]A,d", 0 }, /* lduha [rs1+%g0],d */
+{ "lduha",     0xc0900000, 0x01682000, "[1+2]A,d", 0 },
+{ "ldstub",     0xc0680000, 0x0190201f, "[1],d", 0 }, /* ldstub [rs1+%g0],d */
+{ "ldstub",    0xc0682000, 0x01900000, "[1+i],d", 0 },
+{ "ldstub",    0xc0682000, 0x01900000, "[i+1],d", 0 },
+{ "ldstub",    0xc0680000, 0x01902000, "[1+2],d", 0 },
+{ "lda",        0xc0800000, 0x0178201f, "[1]A,d", 0 }, /* lda [rs1+%g0],d */
+{ "lda",       0xc0800000, 0x01782000, "[1+2]A,d", 0 },
+{ "ldsh",       0xc0500000, 0x0000000d, "[1],d", 0 }, /* ldsh [rs1+%g0],d */
+{ "ldsh",       0xc0502000, 0x01a81fff, "[1],d", 0 }, /* ldsh [rs1+0],d */
+{ "ldsh",      0xc0502000, 0x01a80000, "[1+i],d", 0 },
+{ "ldsh",      0xc0502000, 0x01a80000, "[i+1],d", 0 },
+{ "ldsh",      0xc0500000, 0x01a82000, "[1+2],d", 0 },
+{ "ldsb",       0xc0480000, 0x01b0201f, "[1],d", 0 }, /* ldsb [rs1+%g0],d */
+{ "ldsb",      0xc0482000, 0x01b01fff, "[1],d", 0 }, /* ldsb [rs1+0],d */
+{ "ldsb",      0xc0482000, 0x01b00000, "[1+i],d", 0 },
+{ "ldsb",      0xc0482000, 0x01b00000, "[i+1],d", 0 },
+{ "ldsb",      0xc0480000, 0x01b02000, "[1+2],d", 0 },
+{ "ldub",       0xc0080000, 0x01f0201f, "[1],d", 0 }, /* ldub [rs1+%g0],d */
+{ "ldub",       0xc0082000, 0x01f01fff, "[1],d", 0 }, /* ldub [rs1+0],d */
+{ "ldub",      0xc0082000, 0x01f00000, "[1+i],d", 0 },
+{ "ldub",      0xc0082000, 0x01f00000, "[i+1],d", 0 },
+{ "ldub",      0xc0080000, 0x01f02000, "[1+2],d", 0 },
+{ "lduba",      0xc0880000, 0x0170201f, "[1]A,d", 0 }, /* lduba [rs1+%g0],d */
+{ "lduba",     0xc0880000, 0x01702000, "[1+2]A,d", 0 },
+{ "lduh",      0xc0102000, 0x01e80000, "[1+i],d", 0 },
+{ "lduh",      0xc0102000, 0x01e80000, "[i+1],d", 0 },
+{ "lduh",      0xc0100000, 0x01e8201f, "[1],d", 0 }, /* lduh [rs1+%g0],d */
+{ "lduh",      0xc0102000, 0x01e81fff, "[1],d", 0 }, /* lduh [rs1+0],d */
+{ "lduh",      0xc0100000, 0x01e82000, "[1+2],d", 0 },
+
+{ "st",                0xc0200000, 0x01d8201f, "d,[1]", 0 }, /* st d,[rs1+%g0] */
+{ "st",                0xc0202000, 0x01d81fff, "d,[1]", 0 }, /* st d,[rs1+0] */
+{ "st",                0xc0202000, 0x01d80000, "d,[1+i]", 0 },
+{ "st",                0xc0202000, 0x01d80000, "d,[i+1]", 0 },
+{ "st",                0xc0200000, 0x01d82000, "d,[1+2]", 0 },
+{ "st",                0xc1200000, 0x00d8201f, "g,[1]", 0 }, /* st d[rs1+%g0] */
+{ "st",                0xc1202000, 0x00d81fff, "g,[1]", 0 }, /* st d,[rs1+0] */
+{ "st",                0xc1202000, 0x00d80000, "g,[1+i]", 0 },
+{ "st",                0xc1202000, 0x00d80000, "g,[i+1]", 0 },
+{ "st",                0xc1200000, 0x00d82000, "g,[1+2]", 0 },
+{ "st",                0xc1280000, 0x00c0d01f, "F,[1]", 0 }, /* st d,[rs1+%g0] */
+{ "st",                0xc1282000, 0x00c0dfff, "F,[1]", 0 }, /* st d,[rs1+0] */
+{ "st",                0xc1282000, 0x00c0d000, "F,[1+i]", 0 },
+{ "st",                0xc1282000, 0x00c0d000, "F,[i+1]", 0 },
+{ "st",                0xc1280000, 0x00c0d000, "F,[1+2]", 0 },
+{ "st",                0xc1a00000, 0x0058201f, "D,[1]", 0 }, /* st d,[rs1+%g0] */
+{ "st",                0xc1a02000, 0x00581fff, "D,[1]", 0 }, /* st d,[rs1+0] */
+{ "st",                0xc1a02000, 0x00580000, "D,[1+i]", 0 },
+{ "st",                0xc1a02000, 0x00580000, "D,[i+1]", 0 },
+{ "st",                0xc1a00000, 0x00582000, "D,[1+2]", 0 },
+{ "st",                0xc1a80000, 0x0050201f, "C,[1]", 0 }, /* st d,[rs1+%g0] */
+{ "st",                0xc1a82000, 0x00501fff, "C,[1]", 0 }, /* st d,[rs1+0] */
+{ "st",                0xc1a82000, 0x00500000, "C,[1+i]", 0 },
+{ "st",                0xc1a82000, 0x00500000, "C,[i+1]", 0 },
+{ "st",                0xc1a80000, 0x00502000, "C,[1+2]", 0 },
+{ "sta",        0xc0a00000, 0x0108201f, "d,[1]A", 0 }, /* sta d,[rs1+%g0] */
+{ "sta",       0xc0a00000, 0x01082000, "d,[1+2]A", 0 },
+
+{ "stb",        0xc0280000, 0x01d0201f, "d,[1]", 0 }, /* stb d,[rs1+%g0] */
+{ "stb",       0xc0282000, 0x01d01fff, "d,[1]", 0 }, /* stb d,[rs1+0] */
+{ "stb",       0xc0282000, 0x01d00000, "d,[1+i]", 0 },
+{ "stb",       0xc0282000, 0x01d00000, "d,[i+1]", 0 },
+{ "stb",       0xc0280000, 0x01d02000, "d,[1+2]", 0 },
+{ "stba",       0xc0a80000, 0x01002000, "d,[1+2]A", 0 },
+{ "stba",      0xc0a80000, 0x0100201f, "d,[1]A", 0 }, /* stba d,[rs1+%g0] */
+
+{ "std",        0xc0380000, 0x01c0201f, "d,[1]", 0 }, /* std d,[rs1+%g0] */
+{ "std",       0xc0382000, 0x01c01fff, "d,[1]", 0 }, /* std d,[rs1+0] */
+{ "std",       0xc0382000, 0x01c00000, "d,[1+i]", 0 },
+{ "std",       0xc0382000, 0x01c00000, "d,[i+1]", 0 },
+{ "std",       0xc0380000, 0x01c02000, "d,[1+2]", 0 },
+{ "std",       0xc1380000, 0x00c0201f, "g,[1]", 0 }, /* std d,[rs1+%g0] */
+{ "std",        0xc1382000, 0x00c01fff, "g,[1]", 0 }, /* std d,[rs1+0] */
+{ "std",       0xc1382000, 0x00c00000, "g,[1+i]", 0 },
+{ "std",       0xc1382000, 0x00c00000, "g,[i+1]", 0 },
+{ "std",       0xc1380000, 0x00c02000, "g,[1+2]", 0 },
+{ "std",        0xc1300000, 0x00c8201f, "q,[1]", 0 }, /* std d,[rs1+%g0] */
+{ "std",       0xc1302000, 0x00c81fff, "q,[1]", 0 }, /* std d,[rs1+0] */
+{ "std",       0xc1302000, 0x00c80000, "q,[1+i]", 0 },
+{ "std",       0xc1302000, 0x00c80000, "q,[i+1]", 0 },
+{ "std",       0xc1300000, 0x00c82000, "q,[1+2]", 0 },
+{ "std",       0xc1b80000, 0x0040201f, "D,[1]", 0 }, /* std d,[rs1+%g0] */
+{ "std",       0xc1b82000, 0x00401fff, "D,[1]", 0 }, /* std d,[rs1+0] */
+{ "std",       0xc1b82000, 0x00400000, "D,[1+i]", 0 },
+{ "std",       0xc1b82000, 0x00400000, "D,[i+1]", 0 },
+{ "std",       0xc1b80000, 0x00402000, "D,[1+2]", 0 },
+{ "std",       0xc1b00000, 0x0048201f, "Q,[1]", 0 }, /* std d,[rs1+%g0] */
+{ "std",       0xc1b02000, 0x00481fff, "Q,[1]", 0 }, /* std d,[rs1+0] */
+{ "std",       0xc1b02000, 0x00480000, "Q,[1+i]", 0 },
+{ "std",       0xc1b02000, 0x00480000, "Q,[i+1]", 0 },
+{ "std",       0xc1b00000, 0x00482000, "Q,[1+2]", 0 },
+{ "stda",       0xc0b80000, 0x01402000, "d,[1+2]A", 0 },
+{ "stda",      0xc0b80000, 0x0140201f, "d,[1]A", 0 }, /* stda d,[rs1+%g0] */
+
+{ "sth",        0xc0300000, 0x01c8201f, "d,[1]", 0 }, /* sth d,[rs1+%g0] */
+{ "sth",       0xc0302000, 0x01c81fff, "d,[1]", 0 }, /* sth d,[rs1+0] */
+{ "sth",       0xc0300000, 0x01c82000, "d,[1+2]", 0 },
+{ "sth",       0xc0302000, 0x01c80000, "d,[1+i]", 0 },
+{ "sth",       0xc0302000, 0x01c80000, "d,[i+1]", 0 },
+{ "stha",       0xc0b00000, 0x0148201f, "d,[1]A", 0 }, /* stha d,[rs1+%g0] */
+{ "stha",      0xc0b00000, 0x01482000, "d,[1+2]A", 0 },
+
+{ "swap",       0xc0780000, 0x0180201f, "[1],d", 0 }, /* swap [rs1+%g0],d */
+{ "swap",       0xc0782000, 0x01801fff, "[1],d", 0 }, /* swap [rs1+0],d */
+{ "swap",       0xc0782000, 0x01800000, "[1+i],d", 0 },
+{ "swap",       0xc0782000, 0x01800000, "[i+1],d", 0 },
+{ "swap",       0xc0780000, 0x01802000, "[1+2],d", 0 },
+{ "swapa",      0xc0f80000, 0x01002000, "[1+2]A,d", 0 },
+{ "swapa",      0xc0f80000, 0x0100201f, "[1]A,d", 0 }, /* swapa [rs1+%g0],d */
+
+{ "restore",    0x81e80000, 0x7e17e01f, "", 0 }, /* restore %g0,%g0,%g0 */
+{ "restore",    0x81e82000, 0x7e14dfff, "", 0 }, /* restore %g0,0,%g0 */
+{ "restore",   0x81e82000, 0x00000000, "1,i,d", 0 },
+{ "restore",   0x81e80000, 0x00000000, "1,2,d", 0 },
+{ "rett",       0x81c82000, 0x40300000, "1+i", 1 },
+{ "rett",       0x81c82000, 0x40300000, "i+1", 1 },
+{ "rett",      0x81c80000, 0x40302000, "1+2", 1 },
+{ "rett",      0x81c82000, 0x40300000, "1", 1},
+{ "save",       0x81e02000, 0x40180000, "1,i,d", 0 },
+{ "save",      0x81e00000, 0x40180000, "1,2,d", 0 },
+
+{ "ret",       0x81c7e008, 0x00001ff7, "", 1 }, /* jmpl %i7+8,%g0 */
+{ "retl",       0x81c3e008, 0x00001ff7, "", 1 }, /* jmpl %o7+8,%g0 */
+
+{ "jmpl",       0x81c00000, 0x4038201f, "1,d", 1 }, /* jmpl rs1+%g0,d */
+{ "jmpl",      0x81c02000, 0x4037c000, "i,d", 1 }, /* jmpl %g0+i,d */
+{ "jmpl",      0x81c02000, 0x40380000, "1+i,d", 1 },
+{ "jmpl",      0x81c02000, 0x40380000, "i+1,d", 1 },
+{ "jmpl",      0x81c00000, 0x40382000, "1+2,d", 1 },
+{ "wr",         0x81982000, 0x40600000, "1,i,t", 0 },
+{ "wr",         0x81980000, 0x40600000, "1,2,t", 0 },
+{ "wr",         0x81902000, 0x40680000, "1,i,w", 0 },
+{ "wr",         0x81900000, 0x40680000, "1,2,w", 0 },
+{ "wr",         0x81882000, 0x40700000, "1,i,p", 0 },
+{ "wr",         0x81880000, 0x40700000, "1,2,p", 0 },
+{ "wr",         0x81802000, 0x40780000, "1,i,y", 0 },
+{ "wr",         0x81800000, 0x40780000, "1,2,y", 0 },
+
+{ "rd",        0x81580000, 0x40a00000, "t,d", 0 },
+{ "rd",        0x81500000, 0x40a80000, "w,d", 0 },
+{ "rd",        0x81480000, 0x40b00000, "p,d", 0 },
+{ "rd",         0x81400000, 0x40b80000, "y,d", 0 },
+
+{ "sra",       0x81382000, 0x00000000, "1,i,d", 0 },
+{ "sra",       0x81380000, 0x00000000, "1,2,d", 0 },
+{ "srl",        0x81302000, 0x40c80000, "1,i,d", 0 },
+{ "srl",       0x81300000, 0x40c80000, "1,2,d", 0 },
+{ "sll",        0x81282000, 0x40d00000, "1,i,d", 0 },
+{ "sll",       0x81280000, 0x40d00000, "1,2,d", 0 },
+
+{ "mulscc",     0x81202000, 0x40d80000, "1,i,d", 0 },
+{ "mulscc",    0x81200000, 0x40d80000, "1,2,d", 0 },
+
+{ "clr",        0x80100000, 0x4e87e01f, "d", 0 }, /* or %g0,%g0,d */
+{ "clr",        0x80102000, 0x41efdfff, "d", 0 }, /* or %g0,0,d   */
+{ "clr",       0xc0200000, 0x3fd8001f, "[1]", 0 }, /* st %g0,[rs1+%g0] */
+{ "clr",       0xc0202000, 0x3fd81fff, "[1]", 0 }, /* st %g0,[rs1+0] */
+{ "clr",       0xc0202000, 0x3fd80000, "[1+i]", 0 },
+{ "clr",       0xc0202000, 0x3fd80000, "[i+1]", 0 },
+{ "clr",       0xc0200000, 0x3fd80000, "[1+2]", 0 },
+
+{ "clrb",       0xc0280000, 0x3fd0001f, "[1]", 0 }, /* stb %g0,[rs1+%g0]
+
+{ "clrb",      0xc0282000, 0x3fd00000, "[1+i]", 0 },
+{ "clrb",      0xc0282000, 0x3fd00000, "[i+1]", 0 },
+{ "clrb",      0xc0280000, 0x3fd00000, "[1+2]", 0 },
+
+{ "clrh",       0xc0300000, 0x3fc8001f, "[1]", 0 }, */ /* sth %g0,[rs1+%g0]
+
+{ "clrh",      0xc0300000, 0x3fc80000, "[1+2]", 0 },
+{ "clrh",      0xc0302000, 0x3fc80000, "[1+i]", 0 },
+{ "clrh",      0xc0302000, 0x3fc80000, "[i+1]", 0 },
+
+{ "orncc",      0x80b02000, 0x04048000, "1,i,d", 0 },
+{ "orncc",      0x80b02000, 0x04048000, "i,1,d", 0 },
+{ "orncc",     0x80b00000, 0x04048000, "1,2,d", 0 },
+
+{ "tst",        0x80900000, 0x7f6fe000, "2", 0 }, */ /* orcc %g0, rs2, %g0 */
+{ "tst",        0x80900000, 0x7f68201f, "1", 0 }, /* orcc rs1, %g0, %g0 */
+{ "tst",        0x80902000, 0x7f681fff, "1", 0 }, /* orcc rs1, 0, %g0 */
+  
+{ "orcc",       0x80902000, 0x41680000, "1,i,d", 0 },
+{ "orcc",      0x80902000, 0x41680000, "i,1,d", 0 },
+{ "orcc",      0x80900000, 0x41680000, "1,2,d", 0 },
+{ "orn",        0x80302000, 0x41c80000, "1,i,d", 0 },
+{ "orn",       0x80302000, 0x41c80000, "i,1,d", 0 },
+{ "orn",       0x80300000, 0x41c80000, "1,2,d", 0 },
+
+{ "mov",        0x81800000, 0x4078201f, "1,y", 0 }, /* wr rs1,%g0,%y */
+{ "mov",        0x81802000, 0x40781fff, "1,y", 0 }, /* wr rs1,0,%y */
+{ "mov",        0x81802000, 0x40780000, "i,y", 0 },
+{ "mov",        0x81400000, 0x40b80000, "y,d", 0 }, /* rd %y,d */
+{ "mov",        0x81980000, 0x4060201f, "1,t", 0 }, /* wr rs1,%g0,%tbr */
+{ "mov",        0x81982000, 0x40601fff, "1,t", 0 }, /* wr rs1,0,%tbr */
+{ "mov",        0x81982000, 0x40600000, "i,t", 0 },
+{ "mov",        0x81580000, 0x40a00000, "t,d", 0 }, /* rd %tbr,d */
+{ "mov",        0x81900000, 0x4068201f, "1,w", 0 }, /* wr rs1,%g0,%wim */
+{ "mov",        0x81902000, 0x40681fff, "1,w", 0 }, /* wr rs1,0,%wim */
+{ "mov",        0x81902000, 0x40680000, "i,w", 0 },
+{ "mov",        0x81500000, 0x40a80000, "w,d", 0 }, /* rd %wim,d */
+{ "mov",        0x81880000, 0x4070201f, "1,p", 0 }, /* wr rs1,%g0,%psr */
+{ "mov",        0x81882000, 0x40701fff, "1,p", 0 }, /* wr rs1,0,%psr */
+{ "mov",        0x81882000, 0x40700000, "i,p", 0 },
+{ "mov",        0x81480000, 0x40b00000, "p,d", 0 }, /* rd %psr,d */
+
+{ "mov",        0x80102000, 0x41efc000, "i,d", 0 }, /* or %g0,i,d   */
+{ "mov",        0x80100000, 0x41efe000, "2,d", 0 }, /* or %g0,rs2,d */
+
+{ "or",                0x80102000, 0x40800000, "1,i,d", 0 },
+{ "or",                0x80102000, 0x40800000, "i,1,d", 0 },
+{ "or",                0x80100000, 0x40800000, "1,2,d", 0 },
+
+{ "bset",      0x80102000, 0x40800000, "i,r", 0 },     /* or rd,i,rd */
+{ "bset",      0x80100000, 0x40800000, "2,r", 0 },     /* or rd,rs2,rd */
+
+{ "andncc",     0x80a82000, 0x41500000, "1,i,d", 0 },
+{ "andncc",    0x80a82000, 0x41500000, "i,1,d", 0 },
+{ "andncc",    0x80a80000, 0x41500000, "1,2,d", 0 },
+{ "andn",       0x80282000, 0x41d00000, "1,i,d", 0 },
+{ "andn",      0x80282000, 0x41d00000, "i,1,d", 0 },
+{ "andn",      0x80280000, 0x41d00000, "1,2,d", 0 },
+
+{ "bclr",      0x80282000, 0x41d00000, "i,r", 0 },     /* andn rd,i,rd */
+{ "bclr",      0x80280000, 0x41d00000, "2,r", 0 },     /* andn rd,rs2,rd */
+
+{ "cmp",        0x80a02000, 0x7d580000, "1,i", 0 },     /* subcc rs1,i,%g0 */
+{ "cmp",       0x80a00000, 0x7d580000, "1,2", 0 },     /* subcc rs1,rs2,%g0 */
+
+{ "subcc",      0x80a02000, 0x41580000, "1,i,d", 0 },
+{ "subcc",     0x80a00000, 0x41580000, "1,2,d", 0 },
+{ "sub",       0x80202000, 0x41d80000, "1,i,d", 0 },
+{ "sub",       0x80200000, 0x41d80000, "1,2,d", 0 },
+{ "subx",      0x80602000, 0x41980000, "1,i,d", 0 },
+{ "subx",      0x80600000, 0x41980000, "1,2,d", 0 },
+{ "subxcc",     0x80e02000, 0x41180000, "1,i,d", 0 },
+{ "subxcc",    0x80e00000, 0x41180000, "1,2,d", 0 },
+
+{ "andcc",      0x80882000, 0x41700000, "1,i,d", 0 },
+{ "andcc",     0x80882000, 0x41700000, "i,1,d", 0 },
+{ "andcc",     0x80880000, 0x41700000, "1,2,d", 0 },
+{ "and",        0x80082000, 0x41f00000, "1,i,d", 0 },
+{ "and",       0x80082000, 0x41f00000, "i,1,d", 0 },
+{ "and",       0x80080000, 0x41f00000, "1,2,d", 0 },
+
+{ "inc",       0x80002001, 0x41f81ffe, "r", 0 },       /* add rs1,1,rsd */
+{ "inccc",     0x80802001, 0x41781ffe, "r", 0 },       /* addcc rd,1,rd */
+{ "dec",        0x80202001, 0x41d81ffe, "r", 0 },      /* sub rd,1,rd */
+{ "deccc",     0x80a02001, 0x41581ffe, "r", 0 },       /* subcc rd,1,rd */
+
+{ "btst",      0x80882000, 0x41700000, "i,1", 0 },     /* andcc rs1,i,%g0 */
+{ "btst",      0x80880000, 0x41700000, "1,2", 0 },     /* andcc rs1,rs2,%0 */
+
+{ "neg",       0x80200000, 0x41d80000, "r", 0 }, /* sub %0,rd,rd */
+{ "neg",       0x80200000, 0x41d80000, "2,d", 0 }, /* sub %0,rs2,rd */
+
+{ "addxcc",     0x80c02000, 0x41380000, "1,i,d", 0 },
+{ "addxcc",     0x80c02000, 0x41380000, "i,1,d", 0 },
+{ "addxcc",     0x80c00000, 0x41380000, "1,2,d", 0 },
+{ "addcc",      0x80802000, 0x41780000, "1,i,d", 0 },
+{ "addcc",      0x80802000, 0x41780000, "i,1,d", 0 },
+{ "addcc",      0x80800000, 0x41780000, "1,2,d", 0 },
+{ "addx",       0x80402000, 0x41b80000, "1,i,d", 0 },
+{ "addx",      0x80402000, 0x41b80000, "i,1,d", 0 },
+{ "addx",      0x80400000, 0x41b80000, "1,2,d", 0 },
+{ "add",        0x80002000, 0x41f80000, "1,i,d", 0 },
+{ "add",       0x80002000, 0x41f80000, "i,1,d", 0 },
+{ "add",       0x80000000, 0x41f80000, "1,2,d", 0 },
+
+{ "call",       0x9fc00000, 0x4038201f, "1", 1 }, /* jmpl rs1+%g0, %o7 */
+{ "call",      0x9fc00000, 0x4038201f, "1,#", 1 },
+{ "call",      0x40000000, 0x80000000, "L", 1 },
+{ "call",      0x40000000, 0x80000000, "L,#", 1 },
+
+{ "bvc",        0x3e800000, 0xc1400000, ",al", 1 },
+{ "bvc",       0x1e800000, 0xc1400000, "l", 1 },
+{ "bvs",       0x2e800000, 0xc1400000, ",al", 1 },
+{ "bvs",       0x0e800000, 0xc1400000, "l", 1 },
+{ "bpos",      0x3c800000, 0xc1400000, ",al", 1 },
+{ "bpos",      0x1c800000, 0xc1400000, "l", 1 },
+{ "bneg",      0x2c800000, 0xc1400000, ",al", 1 },
+{ "bneg",      0x0c800000, 0xc1400000, "l", 1 },
+{ "bcc",       0x3a800000, 0xc1400000, ",al", 1 },
+{ "bcc",       0x1a800000, 0xc1400000, "l", 1 },
+{ "bcs",       0x2a800000, 0xc1400000, ",al", 1 },
+{ "bcs",       0x0a800000, 0xc1400000, "l", 1 },
+{ "blu",       0x2a800000, 0xc1400000, ",al", 1 },
+{ "blu",       0x0a800000, 0xc1400000, "l", 1 }, /* same as bcs */
+{ "bgeu",      0x3a800000, 0xc1400000, ",al", 1 },
+{ "bgeu",      0x1a800000, 0xc1400000, "l", 1 }, /* same as bcc */
+{ "bgu",       0x38800000, 0xc1400000, ",al", 1 },
+{ "bgu",       0x18800000, 0xc1400000, "l", 1 },
+{ "bleu",      0x28800000, 0xc1400000, ",al", 1 },
+{ "bleu",      0x08800000, 0xc1400000, "l", 1 },
+{ "bge",       0x36800000, 0xc1400000, ",al", 1 },
+{ "bge",       0x16800000, 0xc1400000, "l", 1 },
+{ "bl",                0x26800000, 0xc1400000, ",al", 1 },
+{ "bl",                0x06800000, 0xc1400000, "l", 1 },
+{ "bg",                0x34800000, 0xc1400000, ",al", 1 },
+{ "bg",                0x14800000, 0xc1400000, "l", 1 },
+{ "ble",       0x24800000, 0xc1400000, ",al", 1 },
+{ "ble",       0x04800000, 0xc1400000, "l", 1 },
+{ "be",                0x22800000, 0xc1400000, ",al", 1 },
+{ "be",                0x02800000, 0xc1400000, "l", 1 },
+{ "bz",                0x22800000, 0xc1400000, ",al", 1 }, /* same as be */
+{ "bz",                0x02800000, 0xc1400000, "l", 1 },
+{ "bne",       0x32800000, 0xc1400000, ",al", 1 },
+{ "bne",       0x12800000, 0xc1400000, "l", 1 },
+{ "bnz",       0x32800000, 0xc1400000, ",al", 1 }, /* same as bne */
+{ "bnz",       0x12800000, 0xc1400000, "l", 1 },
+{ "b",         0x30800000, 0xc1400000, ",al", 1 },
+{ "b",         0x10800000, 0xc1400000, "l", 1 },
+{ "ba",                0x30800000, 0xc1400000, ",al", 1 },
+{ "ba",                0x10800000, 0xc1400000, "l", 1 },
+{ "bn",        0x20800000, 0xc1400000, ",al", 1 },
+{ "bn",                0x00800000, 0xc1400000, "l", 1 },
+
+{ "jmp",        0x81c00000, 0x7e38201f, "1", 1 }, /* jmpl rs1+%g0,%g0 */
+{ "jmp",        0x81c02000, 0x7e3fc000, "i", 1 }, /* jmpl %g0+i,%g0 */
+{ "jmp",        0x81c00000, 0x7e382000, "1+2", 1 }, /* jmpl rs1+rs2,%g0 */
+{ "jmp",        0x81c02000, 0x7e380000, "1+i", 1 }, /* jmpl rs1+i,%g0 */
+{ "jmp",        0x81c02000, 0x7e380000, "i+1", 1 }, /* jmpl i+rs1,%g0 */
+
+{ "nop",       0x01000000, 0xfe3fffff, "", 0 }, /* sethi 0, %g0 */
+
+{ "set",        0x01000000, 0xc0c00000, "Sh,d", 0 },
+
+{ "sethi",      0x01000000, 0xc0c00000, "h,d", 0 },
+
+{ "taddcctv",   0x81102000, 0x40e00000, "1,i,d", 0 },
+{ "taddcctv",   0x81100000, 0x40e00000, "1,2,d", 0 },
+{ "taddcc",     0x81002000, 0x40f80000, "1,i,d", 0 },
+{ "taddcc",     0x81000000, 0x40f80000, "1,2,d", 0 },
+
+{ "tvc",       0x9fd02000, 0x402fc000, "i", 0 }, /* tvc %g0+i */
+{ "tvc",        0x9fd02000, 0x40280000, "1+i", 0 },
+{ "tvc",       0x9fd00000, 0x40282000, "1+2", 0 },
+{ "tvc",        0x9fd00000, 0x4028201f, "1", 0 }, /* tvc rs1+%g0 */
+{ "tpos",      0x9dd02000, 0x402fc000, "i", 0 }, /* tpos %g0+i */
+{ "tpos",      0x9dd02000, 0x40280000, "1+i", 0 },
+{ "tpos",      0x9dd00000, 0x40282000, "1+2", 0 },
+{ "tpos",       0x9dd00000, 0x4028201f, "1", 0 }, /* tpos rs1+%g0 */
+
+{ "tcc",        0x9bd02000, 0x402fc000, "i", 0 }, /* tcc %g0+i */
+{ "tcc",       0x9bd02000, 0x40280000, "1+i", 0 },
+{ "tcc",       0x9bd00000, 0x40282000, "1+2", 0 },
+{ "tcc",        0x9bd00000, 0x4028201f, "1", 0 }, /* tcc rs1+%g0 */
+
+/* Same as tcc.  */
+{ "tlu",        0x9bd02000, 0x402fc000, "i", 0 }, /* tcc %g0+i */
+{ "tlu",       0x9bd02000, 0x40280000, "1+i", 0 },
+{ "tlu",       0x9bd00000, 0x40282000, "1+2", 0 },
+{ "tlu",        0x9bd00000, 0x4028201f, "1", 0 }, /* tcc rs1+%g0 */
+
+{ "tgu",       0x99d02000, 0x402fc000, "i", 0 }, /* tgu %g0+i */
+{ "tgu",       0x99d02000, 0x40280000, "1+i", 0 },
+{ "tgu",       0x99d00000, 0x40282000, "1+2", 0 },
+{ "tgu",        0x99d00000, 0x4028201f, "1", 0 }, /* tgu rs1+%g0 */
+{ "tge",       0x97d02000, 0x402fc000, "i", 0 }, /* tge %g0+i */
+{ "tge",       0x97d02000, 0x40280000, "1+i", 0 },
+{ "tge",       0x97d00000, 0x40282000, "1+2", 0 },
+{ "tge",        0x97d00000, 0x4028201f, "1", 0 }, /* tge rs1+%g0 */
+{ "tg",                0x95d02000, 0x402fc000, "i", 0 }, /* tg %g0+i */
+{ "tg",                0x95d02000, 0x40280000, "1+i", 0 },
+{ "tg",                0x95d00000, 0x40282000, "1+2", 0 },
+{ "tg",         0x95d00000, 0x4028201f, "1", 0 }, /* tg rs1+%g0 */
+{ "tne",        0x93d02000, 0x402fc000, "i", 0 }, /* tne %g0+i */
+{ "tne",       0x93d02000, 0x40280000, "1+i", 0 },
+{ "tne",       0x93d00000, 0x40282000, "1+2", 0 },
+{ "tne",        0x93d00000, 0x4028201f, "1", 0 }, /* tne rs1+%g0 */
+
+/* Same as tne.  */
+{ "tnz",        0x93d02000, 0x402fc000, "i", 0 }, /* tne %g0+i */
+{ "tnz",       0x93d02000, 0x40280000, "1+i", 0 },
+{ "tnz",       0x93d00000, 0x40282000, "1+2", 0 },
+{ "tnz",        0x93d00000, 0x4028201f, "1", 0 }, /* tne rs1+%g0 */
+
+{ "tleu",       0x8bd02000, 0x502fc000, "i", 0 }, /* tleu %g0+i */
+{ "tleu",      0x8bd02000, 0x50280000, "1+i", 0 },
+{ "tleu",      0x8bd00000, 0x50282000, "1+2", 0 },
+{ "tleu",       0x8bd00000, 0x5028201f, "1", 0 }, /* tleu rs1+%g0 */
+{ "ta",                0x91d02000, 0x402fc000, "i", 0 }, /* ta %g0+i */
+{ "ta",                0x91d02000, 0x402d0000, "1+i", 0 },
+{ "ta",                0x91d00000, 0x40282000, "1+2", 0 },
+{ "ta",         0x91d00000, 0x4028201f, "1", 0 }, /* ta rs1+%g0 */
+
+/* Same as ta.  */
+{ "t",         0x91d02000, 0x402fc000, "i", 0 }, /* ta %g0+i */
+{ "t",         0x91d02000, 0x402d0000, "1+i", 0 },
+{ "t",         0x91d00000, 0x40282000, "1+2", 0 },
+{ "t",          0x91d00000, 0x4028201f, "1", 0 }, /* ta rs1+%g0 */
+
+{ "tvs",       0x8fd02000, 0x502fc000, "i", 0 }, /* tvs %g0+i */
+{ "tvs",       0x8fd02000, 0x50280000, "1+i", 0 },
+{ "tvs",       0x8fd00000, 0x50282000, "1+2", 0 },
+{ "tvs",        0x8fd00000, 0x5028201f, "1", 0 }, /* tvs rs1+%g0 */
+{ "tneg",      0x8dd02000, 0x502fc000, "i", 0 }, /* tneg %g0+i */
+{ "tneg",      0x8dd02000, 0x50280000, "1+i", 0 },
+{ "tneg",      0x8dd00000, 0x50282000, "1+2", 0 },
+{ "tneg",      0x8dd00000, 0x5028201f, "1", 0 }, /* tneg rs1+%g0 */
+{ "tcs",        0x8bd02000, 0x502fc000, "i", 0 }, /* tcs %g0+i */
+{ "tcs",       0x8bd02000, 0x50280000, "1+i", 0 },
+{ "tcs",       0x8bd00000, 0x50282000, "1+2", 0 },
+{ "tcs",       0x8bd00000, 0x5028201f, "1", 0 }, /* tcs rs1+%g0 */
+
+/* Same as tcs.  */
+{ "tgeu",       0x8bd02000, 0x502fc000, "i", 0 }, /* tcs %g0+i */
+{ "tgeu",      0x8bd02000, 0x50280000, "1+i", 0 },
+{ "tgeu",      0x8bd00000, 0x50282000, "1+2", 0 },
+{ "tgeu",      0x8bd00000, 0x5028201f, "1", 0 }, /* tcs rs1+%g0 */
+
+{ "tl",                0x87d02000, 0x502fc000, "i", 0 }, /* tl %g0+i */
+{ "tl",                0x87d02000, 0x50280000, "1+i", 0 },
+{ "tl",                0x87d00000, 0x50282000, "1+2", 0 },
+{ "tl",                0x87d00000, 0x5028201f, "1", 0 }, /* tl rs1+%g0 */
+{ "tle",       0x85d02000, 0x502fc000, "i", 0 }, /* tle %g0+i */
+{ "tle",       0x85d02000, 0x50280000, "1+i", 0 },
+{ "tle",       0x85d00000, 0x50282000, "1+2", 0 },
+{ "tle",       0x85d00000, 0x5028201f, "1", 0 }, /* tle rs1+%g0 */
+{ "te",                0x83d02000, 0x502fc000, "i", 0 }, /* te %g0+i */
+{ "te",                0x83d02000, 0x50280000, "1+i", 0 },
+{ "te",                0x83d00000, 0x50282000, "1+2", 0 },
+{ "te",         0x83d00000, 0x5028201f, "1", 0 }, /* te rs1+%g0 */
+
+/* Same as te.  */
+{ "tz",                0x83d02000, 0x502fc000, "i", 0 }, /* te %g0+i */
+{ "tz",                0x83d02000, 0x50280000, "1+i", 0 },
+{ "tz",                0x83d00000, 0x50282000, "1+2", 0 },
+{ "tz",         0x83d00000, 0x5028201f, "1", 0 }, /* te rs1+%g0 */
+
+{ "tn",                0x81d02000, 0x502fc000, "i", 0 }, /* tn %g0+i */
+{ "tn",                0x81d02000, 0x50280000, "1+i", 0 },
+{ "tn",                0x81d00000, 0x50282000, "1+2", 0 },
+{ "tn",         0x81d00000, 0x5028201f, "1", 0 }, /* tn rs1+%g0 */
+
+{ "tsubcc",     0x81080000, 0x40f00000, "1,2,d", 0 },
+{ "tsubcc",     0x81082000, 0x40f00000, "1,i,d", 0 },
+{ "tsubcctv",   0x80580000, 0x40a00000, "1,2,d", 0 },
+{ "tsubcctv",   0x80582000, 0x40a00000, "1,i,d", 0 },
+
+{ "unimp",      0x00000000, 0x00000000, "l", 0 },
+
+{ "iflush",     0x81d80000, 0x40202000, "1+2", 0 },
+{ "iflush",     0x81d82000, 0x40200000, "1+i", 0 },
+
+{ "xnorcc",     0x80b80000, 0x41400000, "1,2,d", 0 },
+{ "xnorcc",    0x80b82000, 0x41400000, "1,i,d", 0 },
+{ "xnorcc",    0x80b82000, 0x41400000, "i,1,d", 0 },
+{ "xorcc",      0x80980000, 0x41600000, "1,2,d", 0 },
+{ "xorcc",     0x80982000, 0x41600000, "1,i,d", 0 },
+{ "xorcc",     0x80982000, 0x41600000, "i,1,d", 0 },
+{ "xnor",       0x80380000, 0x41c00000, "1,2,d", 0 },
+{ "xnor",      0x80382000, 0x41c00000, "1,i,d", 0 },
+{ "xnor",      0x80382000, 0x41c00000, "i,1,d", 0 },
+{ "xor",        0x80180000, 0x41e00000, "1,2,d", 0 },
+{ "xor",       0x80182000, 0x41e00000, "1,i,d", 0 },
+{ "xor",       0x80182000, 0x41e00000, "i,1,d", 0 },
+
+{ "not",        0x80380000, 0x41c00000, "r", 0 }, /* xnor rd,%0,rd */
+{ "not",        0x80380000, 0x41c00000, "1,d", 0 }, /* xnor rs1,%0,rd */
+
+{ "btog",      0x80180000, 0x41e02000, "2,r", 0 }, /* xor rd,rs2,rd */
+{ "btog",      0x80182000, 0x41e00000, "i,r", 0 }, /* xor rd,i,rd */
+
+{ "fpop1",      0x81a00000, 0x40580000, "[1+2],d", 0 },
+{ "fpop2",      0x81a80000, 0x40500000, "[1+2],d", 0 },
+
+{ "fb",         0x31800000, 0xc0400000, ",al", 1 },
+{ "fb",         0x11800000, 0xc0400000, "l", 1 },
+{ "fba",        0x31800000, 0xc0400000, ",al", 1 },
+{ "fba",        0x11800000, 0xc0400000, "l", 1 },
+{ "fbn",        0x21800000, 0xc0400000, ",al", 1 },
+{ "fbn",        0x01800000, 0xc0400000, "l", 1 },
+{ "fbu",        0x2f800000, 0xc0400000, ",al", 1 },
+{ "fbu",        0x0f800000, 0xc0400000, "l", 1 },
+{ "fbg",        0x2d800000, 0xc0400000, ",al", 1 },
+{ "fbg",        0x0d800000, 0xc0400000, "l", 1 },
+{ "fbug",       0x2b800000, 0xc0400000, ",al", 1 },
+{ "fbug",       0x0b800000, 0xc0400000, "l", 1 },
+{ "fbl",        0x29800000, 0xc0400000, ",al", 1 },
+{ "fbl",        0x09800000, 0xc0400000, "l", 1 },
+{ "fbul",       0x27800000, 0xc0400000, ",al", 1 },
+{ "fbul",       0x07800000, 0xc0400000, "l", 1 },
+{ "fblg",       0x25800000, 0xc0400000, ",al", 1 },
+{ "fblg",       0x05800000, 0xc0400000, "l", 1 },
+{ "fbne",       0x23800000, 0xc0400000, ",al", 1 },
+{ "fbne",       0x03800000, 0xc0400000, "l", 1 },
+{ "fbe",        0x33800000, 0xc0400000, ",al", 1 },
+{ "fbe",        0x13800000, 0xc0400000, "l", 1 },
+{ "fbue",       0x35800000, 0xc0400000, ",al", 1 },
+{ "fbue",       0x15800000, 0xc0400000, "l", 1 },
+{ "fbge",       0x37800000, 0xc0400000, ",al", 1 },
+{ "fbge",       0x17800000, 0xc0400000, "l", 1 },
+{ "fbuge",      0x39800000, 0xc0400000, ",al", 1 },
+{ "fbuge",      0x19800000, 0xc0400000, "l", 1 },
+{ "fble",       0x3b800000, 0xc0400000, ",al", 1 },
+{ "fble",       0x1b800000, 0xc0400000, "l", 1 },
+{ "fbule",      0x3d800000, 0xc0400000, ",al", 1 },
+{ "fbule",      0x1d800000, 0xc0400000, "l", 1 },
+{ "fbo",        0x3f800000, 0xc0400000, ",al", 1 },
+{ "fbo",        0x1f800000, 0xc0400000, "l", 1 },
+
+{ "cba",        0x31c00000, 0xce000000, ",al", 1 },
+{ "cba",        0x11c00000, 0xce000000, "l", 1 },
+{ "cbn",        0x21c00000, 0xde000000, ",al", 1 },
+{ "cbn",        0x01c00000, 0xde000000, "l", 1 },
+{ "cb3",        0x2fc00000, 0xc0000000, ",al", 1 },
+{ "cb3",        0x0fc00000, 0xc0000000, "l", 1 },
+{ "cb2",        0x2dc00000, 0xc0000000, ",al", 1 },
+{ "cb2",        0x0dc00000, 0xc0000000, "l", 1 },
+{ "cb23",       0x2bc00000, 0xc0000000, ",al", 1 },
+{ "cb23",       0x0bc00000, 0xc0000000, "l", 1 },
+{ "cb1",        0x29c00000, 0xc0000000, ",al", 1 },
+{ "cb1",        0x09c00000, 0xc0000000, "l", 1 },
+{ "cb13",       0x27c00000, 0xc0000000, ",al", 1 },
+{ "cb13",       0x07c00000, 0xc0000000, "l", 1 },
+{ "cb12",       0x25c00000, 0xc0000000, ",al", 1 },
+{ "cb12",       0x05c00000, 0xc0000000, "l", 1 },
+{ "cb123",      0x23c00000, 0xc0000000, ",al", 1 },
+{ "cb123",      0x03c00000, 0xc0000000, "l", 1 },
+{ "cb0",        0x33c00000, 0xc0000000, ",al", 1 },
+{ "cb0",        0x13c00000, 0xc0000000, "l", 1 },
+{ "cb03",       0x35c00000, 0xc0000000, ",al", 1 },
+{ "cb03",       0x15c00000, 0xc0000000, "l", 1 },
+{ "cb02",       0x37c00000, 0xc0000000, ",al", 1 },
+{ "cb02",       0x17c00000, 0xc0000000, "l", 1 },
+{ "cb023",      0x39c00000, 0xc0000000, ",al", 1 },
+{ "cb023",      0x19c00000, 0xc0000000, "l", 1 },
+{ "cb01",       0x3bc00000, 0xc0000000, ",al", 1 },
+{ "cb01",       0x1bc00000, 0xc0000000, "l", 1 },
+{ "cb013",      0x3dc00000, 0xc0000000, ",al", 1 },
+{ "cb013",      0x1dc00000, 0xc0000000, "l", 1 },
+{ "cb012",      0x3fc00000, 0xc0000000, ",al", 1 },
+{ "cb012",      0x1fc00000, 0xc0000000, "l", 1 },
+
+{ "fstoi",      0x81a01a20, 0x400025c0, "f,g", 0 },
+{ "fdtoi",      0x81a01a40, 0x400025a0, "f,g", 0 },
+{ "fxtoi",      0x81a01a60, 0x40002580, "f,g", 0 },
+
+{ "fitox",      0x81a01980, 0x40002660, "f,g", 0 },
+{ "fitod",      0x81a01900, 0x400026e0, "f,g", 0 },
+{ "fitos",      0x81a01880, 0x40002660, "f,g", 0 },
+
+{ "fstod",      0x81a01920, 0x400026c0, "f,g", 0 },
+{ "fstox",      0x81a019a0, 0x40002640, "f,g", 0 },
+{ "fdtos",      0x81a018c0, 0x40002720, "f,g", 0 },
+{ "fdtox",      0x81a019c0, 0x40002620, "f,g", 0 },
+{ "fxtos",      0x81a018e0, 0x40002700, "f,g", 0 },
+{ "fxtod",      0x81a01960, 0x40002680, "f,g", 0 },
+
+{ "fdivx",      0x81a009e0, 0x40083600, "e,f,g", 0 },
+{ "fdivd",      0x81a009c0, 0x40003620, "e,f,g", 0 },
+{ "fdivs",      0x81a009a0, 0x40003640, "e,f,g", 0 },
+{ "fmuls",      0x81a00920, 0x400036c0, "e,f,g", 0 },
+{ "fmuld",      0x81a00940, 0x400036a0, "e,f,g", 0 },
+{ "fmulx",      0x81a00960, 0x40003680, "e,f,g", 0 },
+
+{ "fsqrts",     0x81a00520, 0x40003ac0, "f,g", 0 },
+{ "fsqrtd",     0x81a00540, 0x40003aa8, "f,g", 0 },
+{ "fsqrtx",     0x81a00560, 0x40003a80, "f,g", 0 },
+
+{ "fabss",      0x81a00120, 0x40003ec0, "f,g", 0 },
+{ "fnegs",      0x81a000a0, 0x40003f40, "f,g", 0 },
+{ "fmovs",      0x81a00020, 0x40003fc0, "f,g", 0 },
+
+{ "fsubx",      0x81a008e0, 0x40003700, "e,f,g", 0 },
+{ "fsubd",      0x81a008c0, 0x40003720, "e,f,g", 0 },
+{ "fsubs",      0x81a008a0, 0x40003740, "e,f,g", 0 },
+{ "faddx",      0x81a00860, 0x40003780, "e,f,g", 0 },
+{ "faddd",      0x81a00840, 0x400037a0, "e,f,g", 0 },
+{ "fadds",      0x81a00820, 0x400037c0, "e,f,g", 0 },
+
+{ "fcmpex",     0x81a80ae0, 0x40003500, "e,f", 0 },
+{ "fcmped",     0x81a80ac0, 0x40003520, "e,f", 0 },
+{ "fcmpes",     0x81a80aa0, 0x40003540, "e,f", 0 },
+{ "fcmpx",      0x81a80a60, 0x40003580, "e,f", 0 },
+{ "fcmpd",      0x81a80a40, 0x400035a0, "e,f", 0 },
+{ "fcmps",      0x81a80a20, 0x400035c0, "e,f", 0 },
+
+{ "cpop1",      0x81b00000, 0x40480000, "[1+2],d", 0 },
+{ "cpop2",      0x81b80000, 0x40400000, "[1+2],d", 0 },
+};
+
+#define NUMOPCODES ((sizeof sparc_opcodes)/(sizeof sparc_opcodes[0]))
+
diff --git a/include/tahoe-opcode.h b/include/tahoe-opcode.h
new file mode 100755 (executable)
index 0000000..b5cee24
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * Ported by the State University of New York at Buffalo by the Distributed
+ * Computer Systems Lab, Department of Computer Science, 1991.
+ */
+
+#ifndef tahoe_opcodeT
+#define tahoe_opcodeT int
+#endif /* no tahoe_opcodeT */
+
+struct vot_wot                  /* tahoe opcode table: wot to do with this */
+                                /* particular opcode */
+{
+  char *            args;       /* how to compile said opcode */
+  tahoe_opcodeT       code;     /* op-code (may be > 8 bits!) */
+};
+
+struct vot                      /* tahoe opcode text */
+{
+  char *            name;       /* opcode name: lowercase string  [key]  */
+  struct vot_wot    detail;     /* rest of opcode table          [datum] */
+};
+
+#define vot_how args
+#define vot_code code
+#define vot_detail detail
+#define vot_name name
+
+static struct vot
+votstrs[] =
+{
+{    "halt",   {"",                    0x00    } },
+{    "sinf",    {"",                    0x05    } },
+{    "ldf",     {"rl",                  0x06    } },
+{    "ldd",     {"rq",                  0x07    } },
+{    "addb2",  {"rbmb",                0x08    } },
+{    "movb",   {"rbwb",                0x09    } },
+{    "addw2",  {"rwmw",                0x0a    } },
+{    "movw",   {"rwww",                0x0b    } },
+{    "addl2",  {"rlml",                0x0c    } },
+{    "movl",   {"rlwl",                0x0d    } },
+{    "bbs",    {"rlvlbw",              0x0e    } },
+{    "nop",     {"",                    0x10    } },
+{    "brb",    {"bb",                  0x11    } },
+{    "brw",    {"bw",                  0x13    } },
+{    "cosf",    {"",                    0x15    } },
+{    "lnf",     {"rl",                  0x16    } },
+{    "lnd",     {"rq",                  0x17    } },
+{    "addb3",  {"rbrbwb",              0x18    } },
+{    "cmpb",   {"rbwb",                0x19    } }, 
+{    "addw3",  {"rwrwww",              0x1a    } },
+{    "cmpw",   {"rwww",                0x1b    } },
+{    "addl3",  {"rlrlwl",              0x1c    } },
+{    "cmpl",   {"rlwl",                0x1d    } },
+{    "bbc",    {"rlvlbw",              0x1e    } },
+{    "rei",    {"",                    0x20    } },
+{    "bneq",   {"bb",                  0x21    } },
+{    "bnequ",  {"bb",                  0x21    } },
+{    "cvtwl",  {"rwwl",                0x23    } },
+{    "stf",     {"wl",                  0x26    } },
+{    "std",     {"wq",                  0x27    } },
+{    "subb2",  {"rbmb",                0x28    } },
+{    "mcomb",  {"rbwb",                0x29    } },
+{    "subw2",  {"rwmw",                0x2a    } },
+{    "mcomw",  {"rwww",                0x2b    } },
+{    "subl2",   {"rlml",                0x2c    } },
+{    "mcoml",   {"rlwl",                0x2d    } },
+{    "emul",   {"rlrlrlwq",            0x2e    } },
+{    "aoblss", {"rlmlbw",              0x2f    } },
+{    "bpt",    {"",                    0x30    } },
+{    "beql",   {"bb",                  0x31    } },
+{    "beqlu",  {"bb",                  0x31    } },
+{    "cvtwb",  {"rwwb",                0x33    } },
+{    "logf",    {"",                    0x35    } },
+{    "cmpf",    {"rl",                  0x36    } },
+{    "cmpd",    {"rq",                  0x37    } },
+{    "subb3",  {"rbrbwb",              0x38    } },
+{    "bitb",   {"rbrb",                0x39    } },
+{    "subw3",  {"rwrwww",              0x3a    } },
+{    "bitw",   {"rwrw",                0x3b    } },
+{    "subl3",  {"rlrlwl",              0x3c    } },
+{    "bitl",   {"rlrl",                0x3d    } },
+{    "ediv",   {"rlrqwlwl",            0x3e    } },
+{    "aobleq", {"rlmlbw",              0x3f    } },
+{    "ret",    {"",                    0x40    } },
+{    "bgtr",   {"bb",                  0x41    } },
+{    "sqrtf",   {"",                    0x45    } },
+{    "cmpf2",   {"rl",                  0x46    } },
+{    "cmpd2",   {"rqrq",                0x47    } },
+{    "shll",    {"rbrlwl",              0x48    } },
+{    "clrb",   {"wb",                  0x49    } },
+{    "shlq",   {"rbrqwq",              0x4a    } },
+{    "clrw",   {"ww",                  0x4b    } },
+{    "mull2",  {"rlml",                0x4c    } },
+{    "clrl",   {"wl",                  0x4d    } },
+{    "shal",    {"rbrlwl",             0x4e    } },
+{    "bleq",   {"bb",                  0x51    } },
+{    "expf",    {"",                    0x55    } },
+{    "tstf",    {"",                    0x56    } },
+{    "tstd",    {"",                    0x57    } },
+{    "shrl",    {"rbrlwl",             0x58    } },
+{    "tstb",   {"rb",                  0x59    } },
+{    "shrq",    {"rbrqwq",             0x5a    } },
+{    "tstw",   {"rw",                  0x5b    } },
+{    "mull3",  {"rlrlwl",              0x5c    } },
+{    "tstl",   {"rl",                  0x5d    } },
+{    "shar",   {"rbrlwl",              0x5e    } },
+{    "bbssi",  {"rlmlbw",              0x5f    } },
+{    "ldpctx", {"",                    0x60    } },
+{    "pushd",   {"",                    0x67    } },
+{    "incb",   {"mb",                  0x69    } },
+{    "incw",   {"mw",                  0x6b    } },
+{    "divl2",  {"rlml",                0x6c    } },
+{    "incl",   {"ml",                  0x6d    } },
+{    "cvtlb",  {"rlwb",                0x6f    } },
+{    "svpctx", {"",                    0x70    } },
+{    "jmp",    {"ab",                  0x71    } },
+{    "cvlf",    {"rl",                  0x76    } },
+{    "cvld",    {"rl",                  0x77    } },
+{    "decb",   {"mb",                  0x79    } },
+{    "decw",   {"mw",                  0x7b    } },
+{    "divl3",  {"rlrlwl",              0x7c    } },
+{    "decl",   {"ml",                  0x7d    } },
+{    "cvtlw",  {"rlww",                0x7f    } },
+{    "bgeq",   {"bb",                  0x81    } },
+{    "movs2",  {"abab",                0x82    } },
+{    "cvfl",    {"wl",                  0x86    } },
+{    "cvdl",    {"wl",                  0x87    } },
+{    "orb2",   {"rbmb",                0x88    } },
+{    "cvtbl",  {"rbwl",                0x89    } },
+{    "orw2",   {"rwmw",                0x8a    } },
+{    "bispsw", {"rw",                  0x8b    } },
+{    "orl2",    {"rlml",                0x8c    } },
+{    "adwc",   {"rlml",                0x8d    } },
+{    "adda",   {"rlml",                0x8e    } },
+{    "blss",   {"bb",                  0x91    } },
+{    "cmps2",   {"abab",               0x92    } },
+{    "ldfd",    {"rl",                  0x97    } },
+{    "orb3",   {"rbrbwb",              0x98    } },
+{    "cvtbw",  {"rbww",                0x99    } },
+{    "orw3",           {"rwrwww",              0x9a    } },
+{    "bicpsw", {"rw",                  0x9b    } },
+{    "orl3",    {"rlrlwl",              0x9c    } },
+{    "sbwc",   {"rlml",                0x9d    } },
+{    "suba",    {"rlml",                0x9e    } },
+{    "bgtru",  {"bb",                  0xa1    } },
+{    "cvdf",    {"",                    0xa6    } },
+{    "andb2",   {"rbmb",               0xa8    } },
+{    "movzbl", {"rbwl",                0xa9    } },
+{    "andw2",   {"rwmw",               0xaa    } },
+{    "loadr",   {"rwal",               0xab    } },
+{    "andl2",   {"rlml",               0xac    } },
+{    "mtpr",   {"rlrl",                0xad    } },
+{    "ffs",    {"rlwl",                0xae    } },
+{    "blequ",  {"bb",                  0xb1    } },
+{    "negf",    {"",                    0xb6    } },
+{    "negd",    {"",                    0xb7    } },
+{    "andb3",   {"rbrbwb",              0xb8    } },
+{    "movzbw", {"rbww",                0xb9    } },
+{    "andw3",   {"rwrwww",             0xba    } },
+{    "storer",  {"rwal",                0xbb    } },
+{    "andl3",   {"rlrlwl",             0xbc    } },
+{    "mfpr",   {"rlwl",                0xbd    } },
+{    "ffc",    {"rlwl",                0xbe    } },
+{    "calls",  {"rbab",                0xbf    } },
+{    "prober", {"rbabrl",              0xc0    } },
+{    "bvc",    {"bb",                  0xc1    } },
+{    "movs3",  {"ababrw",              0xc2    } },
+{    "movzwl", {"rwwl",                0xc3    } },
+{    "addf",    {"rl",                  0xc6    } },
+{    "addd",    {"rq",                  0xc7    } },
+{    "xorb2",   {"rbmb",                0xc8    } },
+{    "movob",   {"rbwb",                0xc9    } },
+{    "xorw2",   {"rwmw",                0xca    } },
+{    "movow",   {"rwww",                0xcb   } },
+{    "xorl2",  {"rlml",                0xcc    } },
+{    "movpsl",  {"wl",                  0xcd    } },
+{    "kcall",   {"rw",                 0xcf    } },
+{    "probew",  {"rbabrl",             0xd0    } },
+{    "bvs",     {"bb",                 0xd1    } },
+{    "cmps3",   {"ababrw",             0xd2    } },
+{    "subf",    {"rq",                  0xd6    } },
+{    "subd",    {"rq",                  0xd7    } },
+{    "xorb3",  {"rbrbwb",              0xd8    } },
+{    "pushb",   {"rb",                 0xd9    } },
+{    "xorw3",  {"rwrwww",              0xda    } },
+{    "pushw",   {"rw",                         0xdb    } },
+{    "xorl3",  {"rlrlwl",              0xdc    } },
+{    "pushl",  {"rl",                  0xdd    } },
+{    "insque", {"abab",                0xe0    } },
+{    "bcs",    {"bb",                  0xe1    } },
+{    "bgequ",  {"bb",                  0xe1    } },
+{    "mulf",    {"rq",                  0xe6    } },
+{    "muld",    {"rq",                  0xe7    } },
+{    "mnegb",  {"rbwb",                0xe8    } },
+{    "movab",  {"abwl",                0xe9    } },
+{    "mnegw",  {"rwww",                0xea    } },
+{    "movaw",  {"awwl",                0xeb    } },
+{    "mnegl",  {"rlwl",                0xec    } },
+{    "moval",  {"alwl",                0xed    } },
+{    "remque", {"ab",                  0xf0    } },
+{    "bcc",    {"bb",                  0xf1    } },
+{    "blssu",  {"bb",                  0xf1    } },
+{    "divf",    {"rq",                  0xf6    } },
+{    "divd",    {"rq",                  0xf7    } },
+{    "movblk",  {"alalrw",              0xf8   } },
+{    "pushab", {"ab",                  0xf9    } },
+{    "pushaw", {"aw",                  0xfb    } },
+{    "casel",  {"rlrlrl",              0xfc    } },
+{    "pushal", {"al",                  0xfd    } },
+{    "callf",  {"rbab",                0xfe    } },
+{      ""       ,   ""          } /* empty is end sentinel */
+
+};
diff --git a/include/vax-opcode.h b/include/vax-opcode.h
new file mode 100755 (executable)
index 0000000..d604e3f
--- /dev/null
@@ -0,0 +1,382 @@
+/* Vax opcde list.
+   Copyright (C) 1989, Free Software Foundation, Inc.
+
+This file is part of GDB and GAS.
+
+GDB and GAS are 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 1, or (at your option)
+any later version.
+
+GDB and GAS are 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 GDB or GAS; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#ifndef vax_opcodeT
+#define vax_opcodeT int
+#endif /* no vax_opcodeT */
+
+struct vot_wot                 /* vax opcode table: wot to do with this */
+                               /* particular opcode */
+{
+  char *            args;      /* how to compile said opcode */
+  vax_opcodeT       code;      /* op-code (may be > 8 bits!) */
+};
+
+struct vot                     /* vax opcode text */
+{
+  char *            name;      /* opcode name: lowercase string  [key]  */
+  struct vot_wot    detail;    /* rest of opcode table          [datum] */
+};
+
+#define vot_how args
+#define vot_code code
+#define vot_detail detail
+#define vot_name name
+
+static const struct vot
+votstrs[] =
+{
+{    "halt",   {"",                    0x00    } },
+{    "nop",    {"",                    0x01    } },
+{    "rei",    {"",                    0x02    } },
+{    "bpt",    {"",                    0x03    } },
+{    "ret",    {"",                    0x04    } },
+{    "rsb",    {"",                    0x05    } },
+{    "ldpctx", {"",                    0x06    } },
+{    "svpctx", {"",                    0x07    } },
+{    "cvtps",  {"rwabrwab",            0x08    } },
+{    "cvtsp",  {"rwabrwab",            0x09    } },
+{    "index",  {"rlrlrlrlrlwl",        0x0a    } },
+{    "crc",    {"abrlrwab",            0x0b    } },
+{    "prober", {"rbrwab",              0x0c    } },
+{    "probew", {"rbrwab",              0x0d    } },
+{    "insque", {"abab",                0x0e    } },
+{    "remque", {"abwl",                0x0f    } },
+{    "bsbb",   {"bb",                  0x10    } },
+{    "brb",    {"bb",                  0x11    } },
+{    "bneq",   {"bb",                  0x12    } },
+{    "bnequ",  {"bb",                  0x12    } },
+{    "beql",   {"bb",                  0x13    } },
+{    "beqlu",  {"bb",                  0x13    } },
+{    "bgtr",   {"bb",                  0x14    } },
+{    "bleq",   {"bb",                  0x15    } },
+{    "jsb",    {"ab",                  0x16    } },
+{    "jmp",    {"ab",                  0x17    } },
+{    "bgeq",   {"bb",                  0x18    } },
+{    "blss",   {"bb",                  0x19    } },
+{    "bgtru",  {"bb",                  0x1a    } },
+{    "blequ",  {"bb",                  0x1b    } },
+{    "bvc",    {"bb",                  0x1c    } },
+{    "bvs",    {"bb",                  0x1d    } },
+{    "bcc",    {"bb",                  0x1e    } },
+{    "bgequ",  {"bb",                  0x1e    } },
+{    "blssu",  {"bb",                  0x1f    } },
+{    "bcs",    {"bb",                  0x1f    } },
+{    "addp4",  {"rwabrwab",            0x20    } },
+{    "addp6",  {"rwabrwabrwab",        0x21    } },
+{    "subp4",  {"rwabrwab",            0x22    } },
+{    "subp6",  {"rwabrwabrwab",        0x23    } },
+{    "cvtpt",  {"rwababrwab",          0x24    } },
+{    "mulp",   {"rwabrwabrwab",        0x25    } },
+{    "cvttp",  {"rwababrwab",          0x26    } },
+{    "divp",   {"rwabrwabrwab",        0x27    } },
+{    "movc3",  {"rwabab",              0x28    } },
+{    "cmpc3",  {"rwabab",              0x29    } },
+{    "scanc",  {"rwababrb",            0x2a    } },
+{    "spanc",  {"rwababrb",            0x2b    } },
+{    "movc5",  {"rwabrbrwab",          0x2c    } },
+{    "cmpc5",  {"rwabrbrwab",          0x2d    } },
+{    "movtc",  {"rwabrbabrwab",        0x2e    } },
+{    "movtuc", {"rwabrbabrwab",        0x2f    } },
+{    "bsbw",   {"bw",                  0x30    } },
+{    "brw",    {"bw",                  0x31    } },
+{    "cvtwl",  {"rwwl",                0x32    } },
+{    "cvtwb",  {"rwwb",                0x33    } },
+{    "movp",   {"rwabab",              0x34    } },
+{    "cmpp3",  {"rwabab",              0x35    } },
+{    "cvtpl",  {"rwabwl",              0x36    } },
+{    "cmpp4",  {"rwabrwab",            0x37    } },
+{    "editpc", {"rwababab",            0x38    } },
+{    "matchc", {"rwabrwab",            0x39    } },
+{    "locc",   {"rbrwab",              0x3a    } },
+{    "skpc",   {"rbrwab",              0x3b    } },
+{    "movzwl", {"rwwl",                0x3c    } },
+{    "acbw",   {"rwrwmwbw",            0x3d    } },
+{    "movaw",  {"awwl",                0x3e    } },
+{    "pushaw", {"aw",                  0x3f    } },
+{    "addf2",  {"rfmf",                0x40    } },
+{    "addf3",  {"rfrfwf",              0x41    } },
+{    "subf2",  {"rfmf",                0x42    } },
+{    "subf3",  {"rfrfwf",              0x43    } },
+{    "mulf2",  {"rfmf",                0x44    } },
+{    "mulf3",  {"rfrfwf",              0x45    } },
+{    "divf2",  {"rfmf",                0x46    } },
+{    "divf3",  {"rfrfwf",              0x47    } },
+{    "cvtfb",  {"rfwb",                0x48    } },
+{    "cvtfw",  {"rfww",                0x49    } },
+{    "cvtfl",  {"rfwl",                0x4a    } },
+{    "cvtrfl", {"rfwl",                0x4b    } },
+{    "cvtbf",  {"rbwf",                0x4c    } },
+{    "cvtwf",  {"rwwf",                0x4d    } },
+{    "cvtlf",  {"rlwf",                0x4e    } },
+{    "acbf",   {"rfrfmfbw",            0x4f    } },
+{    "movf",   {"rfwf",                0x50    } },
+{    "cmpf",   {"rfrf",                0x51    } },
+{    "mnegf",  {"rfwf",                0x52    } },
+{    "tstf",   {"rf",                  0x53    } },
+{    "emodf",  {"rfrbrfwlwf",          0x54    } },
+{    "polyf",  {"rfrwab",              0x55    } },
+{    "cvtfd",  {"rfwd",                0x56    } },
+                                        /* opcode 57 is not defined yet */
+{    "adawi",  {"rwmw",                0x58    } },
+                                        /* opcode 59 is not defined yet */
+                                        /* opcode 5a is not defined yet */
+                                        /* opcode 5b is not defined yet */
+{    "insqhi", {"abaq",                0x5c    } },
+{    "insqti", {"abaq",                0x5d    } },
+{    "remqhi", {"aqwl",                0x5e    } },
+{    "remqti", {"aqwl",                0x5f    } },
+{    "addd2",  {"rdmd",                0x60    } },
+{    "addd3",  {"rdrdwd",              0x61    } },
+{    "subd2",  {"rdmd",                0x62    } },
+{    "subd3",  {"rdrdwd",              0x63    } },
+{    "muld2",  {"rdmd",                0x64    } },
+{    "muld3",  {"rdrdwd",              0x65    } },
+{    "divd2",  {"rdmd",                0x66    } },
+{    "divd3",  {"rdrdwd",              0x67    } },
+{    "cvtdb",  {"rdwb",                0x68    } },
+{    "cvtdw",  {"rdww",                0x69    } },
+{    "cvtdl",  {"rdwl",                0x6a    } },
+{    "cvtrdl", {"rdwl",                0x6b    } },
+{    "cvtbd",  {"rbwd",                0x6c    } },
+{    "cvtwd",  {"rwwd",                0x6d    } },
+{    "cvtld",  {"rlwd",                0x6e    } },
+{    "acbd",   {"rdrdmdbw",            0x6f    } },
+{    "movd",   {"rdwd",                0x70    } },
+{    "cmpd",   {"rdrd",                0x71    } },
+{    "mnegd",  {"rdwd",                0x72    } },
+{    "tstd",   {"rd",                  0x73    } },
+{    "emodd",  {"rdrbrdwlwd",          0x74    } },
+{    "polyd",  {"rdrwab",              0x75    } },
+{    "cvtdf",  {"rdwf",                0x76    } },
+                                        /* opcode 77 is not defined yet */
+{    "ashl",   {"rbrlwl",              0x78    } },
+{    "ashq",   {"rbrqwq",              0x79    } },
+{    "emul",   {"rlrlrlwq",            0x7a    } },
+{    "ediv",   {"rlrqwlwl",            0x7b    } },
+{    "clrd",   {"wd",                  0x7c    } },
+{    "clrg",   {"wg",                  0x7c    } },
+{    "clrq",   {"wd",                  0x7c    } },
+{    "movq",   {"rqwq",                0x7d    } },
+{    "movaq",  {"aqwl",                0x7e    } },
+{    "movad",  {"adwl",                0x7e    } },
+{    "pushaq", {"aq",                  0x7f    } },
+{    "pushad", {"ad",                  0x7f    } },
+{    "addb2",  {"rbmb",                0x80    } },
+{    "addb3",  {"rbrbwb",              0x81    } },
+{    "subb2",  {"rbmb",                0x82    } },
+{    "subb3",  {"rbrbwb",              0x83    } },
+{    "mulb2",  {"rbmb",                0x84    } },
+{    "mulb3",  {"rbrbwb",              0x85    } },
+{    "divb2",  {"rbmb",                0x86    } },
+{    "divb3",  {"rbrbwb",              0x87    } },
+{    "bisb2",  {"rbmb",                0x88    } },
+{    "bisb3",  {"rbrbwb",              0x89    } },
+{    "bicb2",  {"rbmb",                0x8a    } },
+{    "bicb3",  {"rbrbwb",              0x8b    } },
+{    "xorb2",  {"rbmb",                0x8c    } },
+{    "xorb3",  {"rbrbwb",              0x8d    } },
+{    "mnegb",  {"rbwb",                0x8e    } },
+{    "caseb",  {"rbrbrb",              0x8f    } },
+{    "movb",   {"rbwb",                0x90    } },
+{    "cmpb",   {"rbrb",                0x91    } },
+{    "mcomb",  {"rbwb",                0x92    } },
+{    "bitb",   {"rbrb",                0x93    } },
+{    "clrb",   {"wb",                  0x94    } },
+{    "tstb",   {"rb",                  0x95    } },
+{    "incb",   {"mb",                  0x96    } },
+{    "decb",   {"mb",                  0x97    } },
+{    "cvtbl",  {"rbwl",                0x98    } },
+{    "cvtbw",  {"rbww",                0x99    } },
+{    "movzbl", {"rbwl",                0x9a    } },
+{    "movzbw", {"rbww",                0x9b    } },
+{    "rotl",   {"rbrlwl",              0x9c    } },
+{    "acbb",   {"rbrbmbbw",            0x9d    } },
+{    "movab",  {"abwl",                0x9e    } },
+{    "pushab", {"ab",                  0x9f    } },
+{    "addw2",  {"rwmw",                0xa0    } },
+{    "addw3",  {"rwrwww",              0xa1    } },
+{    "subw2",  {"rwmw",                0xa2    } },
+{    "subw3",  {"rwrwww",              0xa3    } },
+{    "mulw2",  {"rwmw",                0xa4    } },
+{    "mulw3",  {"rwrwww",              0xa5    } },
+{    "divw2",  {"rwmw",                0xa6    } },
+{    "divw3",  {"rwrwww",              0xa7    } },
+{    "bisw2",  {"rwmw",                0xa8    } },
+{    "bisw3",  {"rwrwww",              0xa9    } },
+{    "bicw2",  {"rwmw",                0xaa    } },
+{    "bicw3",  {"rwrwww",              0xab    } },
+{    "xorw2",  {"rwmw",                0xac    } },
+{    "xorw3",  {"rwrwww",              0xad    } },
+{    "mnegw",  {"rwww",                0xae    } },
+{    "casew",  {"rwrwrw",              0xaf    } },
+{    "movw",   {"rwww",                0xb0    } },
+{    "cmpw",   {"rwrw",                0xb1    } },
+{    "mcomw",  {"rwww",                0xb2    } },
+{    "bitw",   {"rwrw",                0xb3    } },
+{    "clrw",   {"ww",                  0xb4    } },
+{    "tstw",   {"rw",                  0xb5    } },
+{    "incw",   {"mw",                  0xb6    } },
+{    "decw",   {"mw",                  0xb7    } },
+{    "bispsw", {"rw",                  0xb8    } },
+{    "bicpsw", {"rw",                  0xb9    } },
+{    "popr",   {"rw",                  0xba    } },
+{    "pushr",  {"rw",                  0xbb    } },
+{    "chmk",   {"rw",                  0xbc    } },
+{    "chme",   {"rw",                  0xbd    } },
+{    "chms",   {"rw",                  0xbe    } },
+{    "chmu",   {"rw",                  0xbf    } },
+{    "addl2",  {"rlml",                0xc0    } },
+{    "addl3",  {"rlrlwl",              0xc1    } },
+{    "subl2",  {"rlml",                0xc2    } },
+{    "subl3",  {"rlrlwl",              0xc3    } },
+{    "mull2",  {"rlml",                0xc4    } },
+{    "mull3",  {"rlrlwl",              0xc5    } },
+{    "divl2",  {"rlml",                0xc6    } },
+{    "divl3",  {"rlrlwl",              0xc7    } },
+{    "bisl2",  {"rlml",                0xc8    } },
+{    "bisl3",  {"rlrlwl",              0xc9    } },
+{    "bicl2",  {"rlml",                0xca    } },
+{    "bicl3",  {"rlrlwl",              0xcb    } },
+{    "xorl2",  {"rlml",                0xcc    } },
+{    "xorl3",  {"rlrlwl",              0xcd    } },
+{    "mnegl",  {"rlwl",                0xce    } },
+{    "casel",  {"rlrlrl",              0xcf    } },
+{    "movl",   {"rlwl",                0xd0    } },
+{    "cmpl",   {"rlrl",                0xd1    } },
+{    "mcoml",  {"rlwl",                0xd2    } },
+{    "bitl",   {"rlrl",                0xd3    } },
+{    "clrf",   {"wf",                  0xd4    } },
+{    "clrl",   {"wl",                  0xd4    } },
+{    "tstl",   {"rl",                  0xd5    } },
+{    "incl",   {"ml",                  0xd6    } },
+{    "decl",   {"ml",                  0xd7    } },
+{    "adwc",   {"rlml",                0xd8    } },
+{    "sbwc",   {"rlml",                0xd9    } },
+{    "mtpr",   {"rlrl",                0xda    } },
+{    "mfpr",   {"rlwl",                0xdb    } },
+{    "movpsl", {"wl",                  0xdc    } },
+{    "pushl",  {"rl",                  0xdd    } },
+{    "moval",  {"alwl",                0xde    } },
+{    "movaf",  {"afwl",                0xde    } },
+{    "pushal", {"al",                  0xdf    } },
+{    "pushaf", {"af",                  0xdf    } },
+{    "bbs",    {"rlabbb",              0xe0    } },
+{    "bbc",    {"rlabbb",              0xe1    } },
+{    "bbss",   {"rlabbb",              0xe2    } },
+{    "bbcs",   {"rlabbb",              0xe3    } },
+{    "bbsc",   {"rlabbb",              0xe4    } },
+{    "bbcc",   {"rlabbb",              0xe5    } },
+{    "bbssi",  {"rlabbb",              0xe6    } },
+{    "bbcci",  {"rlabbb",              0xe7    } },
+{    "blbs",   {"rlbb",                0xe8    } },
+{    "blbc",   {"rlbb",                0xe9    } },
+{    "ffs",    {"rlrbvbwl",            0xea    } },
+{    "ffc",    {"rlrbvbwl",            0xeb    } },
+{    "cmpv",   {"rlrbvbrl",            0xec    } },
+{    "cmpzv",  {"rlrbvbrl",            0xed    } },
+{    "extv",   {"rlrbvbwl",            0xee    } },
+{    "extzv",  {"rlrbvbwl",            0xef    } },
+{    "insv",   {"rlrlrbvb",            0xf0    } },
+{    "acbl",   {"rlrlmlbw",            0xf1    } },
+{    "aoblss", {"rlmlbb",              0xf2    } },
+{    "aobleq", {"rlmlbb",              0xf3    } },
+{    "sobgeq", {"mlbb",                0xf4    } },
+{    "sobgtr", {"mlbb",                0xf5    } },
+{    "cvtlb",  {"rlwb",                0xf6    } },
+{    "cvtlw",  {"rlww",                0xf7    } },
+{    "ashp",   {"rbrwabrbrwab",        0xf8    } },
+{    "cvtlp",  {"rlrwab",              0xf9    } },
+{    "callg",  {"abab",                0xfa    } },
+{    "calls",  {"rlab",                0xfb    } },
+{    "xfc",    {"",                    0xfc    } },
+                                        /* undefined opcodes here */
+{    "cvtdh",  {"rdwh",                0x32fd  } },
+{    "cvtgf",  {"rgwh",                0x33fd  } },
+{    "addg2",  {"rgmg",                0x40fd  } },
+{    "addg3",  {"rgrgwg",              0x41fd  } },
+{    "subg2",  {"rgmg",                0x42fd  } },
+{    "subg3",  {"rgrgwg",              0x43fd  } },
+{    "mulg2",  {"rgmg",                0x44fd  } },
+{    "mulg3",  {"rgrgwg",              0x45fd  } },
+{    "divg2",  {"rgmg",                0x46fd  } },
+{    "divg3",  {"rgrgwg",              0x47fd  } },
+{    "cvtgb",  {"rgwb",                0x48fd  } },
+{    "cvtgw",  {"rgww",                0x49fd  } },
+{    "cvtgl",  {"rgwl",                0x4afd  } },
+{    "cvtrgl", {"rgwl",                0x4bfd  } },
+{    "cvtbg",  {"rbwg",                0x4cfd  } },
+{    "cvtwg",  {"rwwg",                0x4dfd  } },
+{    "cvtlg",  {"rlwg",                0x4efd  } },
+{    "acbg",   {"rgrgmgbw",            0x4ffd  } },
+{    "movg",   {"rgwg",                0x50fd  } },
+{    "cmpg",   {"rgrg",                0x51fd  } },
+{    "mnegg",  {"rgwg",                0x52fd  } },
+{    "tstg",   {"rg",                  0x53fd  } },
+{    "emodg",  {"rgrwrgwlwg",          0x54fd  } },
+{    "polyg",  {"rgrwab",              0x55fd  } },
+{    "cvtgh",  {"rgwh",                0x56fd  } },
+                                        /* undefined opcodes here */
+{    "addh2",  {"rhmh",                0x60fd  } },
+{    "addh3",  {"rhrhwh",              0x61fd  } },
+{    "subh2",  {"rhmh",                0x62fd  } },
+{    "subh3",  {"rhrhwh",              0x63fd  } },
+{    "mulh2",  {"rhmh",                0x64fd  } },
+{    "mulh3",  {"rhrhwh",              0x65fd  } },
+{    "divh2",  {"rhmh",                0x66fd  } },
+{    "divh3",  {"rhrhwh",              0x67fd  } },
+{    "cvthb",  {"rhwb",                0x68fd  } },
+{    "cvthw",  {"rhww",                0x69fd  } },
+{    "cvthl",  {"rhwl",                0x6afd  } },
+{    "cvtrhl", {"rhwl",                0x6bfd  } },
+{    "cvtbh",  {"rbwh",                0x6cfd  } },
+{    "cvtwh",  {"rwwh",                0x6dfd  } },
+{    "cvtlh",  {"rlwh",                0x6efd  } },
+{    "acbh",   {"rhrhmhbw",            0x6ffd  } },
+{    "movh",   {"rhwh",                0x70fd  } },
+{    "cmph",   {"rhrh",                0x71fd  } },
+{    "mnegh",  {"rhwh",                0x72fd  } },
+{    "tsth",   {"rh",                  0x73fd  } },
+{    "emodh",  {"rhrwrhwlwh",          0x74fd  } },
+{    "polyh",  {"rhrwab",              0x75fd  } },
+{    "cvthg",  {"rhwg",                0x76fd  } },
+                                        /* undefined opcodes here */
+{    "clrh",   {"wh",                  0x7cfd  } },
+{    "clro",   {"wo",                  0x7cfd  } },
+{    "movo",   {"rowo",                0x7dfd  } },
+{    "movah",  {"ahwl",                0x7efd  } },
+{    "movao",  {"aowl",                0x7efd  } },
+{    "pushah", {"ah",                  0x7ffd  } },
+{    "pushao", {"ao",                  0x7ffd  } },
+                                        /* undefined opcodes here */
+{    "cvtfh",  {"rfwh",                0x98fd  } },
+{    "cvtfg",  {"rfwg",                0x99fd  } },
+                                        /* undefined opcodes here */
+{    "cvthf",  {"rhwf",                0xf6fd  } },
+{    "cvthd",  {"rhwd",                0xf7fd  } },
+                                        /* undefined opcodes here */
+{    "bugl",   {"rl",                  0xfdff  } },
+{    "bugw",   {"rw",                  0xfeff  } },
+                                        /* undefined opcodes here */
+
+{      ""       ,   ""          } /* empty is end sentinel */
+
+};                             /* votstrs */
+
+/* end: vax.opcode.h */
This page took 0.157562 seconds and 4 git commands to generate.