Home | History | Annotate | Download | only in qemu
      1 /* Print mips instructions for GDB, the GNU debugger, or for objdump.
      2    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
      3    2000, 2001, 2002, 2003
      4    Free Software Foundation, Inc.
      5    Contributed by Nobuyuki Hikichi(hikichi (at) sra.co.jp).
      6 
      7 This file is part of GDB, GAS, and the GNU binutils.
      8 
      9 This program is free software; you can redistribute it and/or modify
     10 it under the terms of the GNU General Public License as published by
     11 the Free Software Foundation; either version 2 of the License, or
     12 (at your option) any later version.
     13 
     14 This program is distributed in the hope that it will be useful,
     15 but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17 GNU General Public License for more details.
     18 
     19 You should have received a copy of the GNU General Public License
     20 along with this program; if not, see <http://www.gnu.org/licenses/>.  */
     21 
     22 #include "dis-asm.h"
     23 
     24 /* mips.h.  Mips opcode list for GDB, the GNU debugger.
     25    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
     26    Free Software Foundation, Inc.
     27    Contributed by Ralph Campbell and OSF
     28    Commented and modified by Ian Lance Taylor, Cygnus Support
     29 
     30 This file is part of GDB, GAS, and the GNU binutils.
     31 
     32 GDB, GAS, and the GNU binutils are free software; you can redistribute
     33 them and/or modify them under the terms of the GNU General Public
     34 License as published by the Free Software Foundation; either version
     35 1, or (at your option) any later version.
     36 
     37 GDB, GAS, and the GNU binutils are distributed in the hope that they
     38 will be useful, but WITHOUT ANY WARRANTY; without even the implied
     39 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
     40 the GNU General Public License for more details.
     41 
     42 You should have received a copy of the GNU General Public License
     43 along with this file; see the file COPYING.  If not,
     44 see <http://www.gnu.org/licenses/>.  */
     45 
     46 /* These are bit masks and shift counts to use to access the various
     47    fields of an instruction.  To retrieve the X field of an
     48    instruction, use the expression
     49 	(i >> OP_SH_X) & OP_MASK_X
     50    To set the same field (to j), use
     51 	i = (i &~ (OP_MASK_X << OP_SH_X)) | (j << OP_SH_X)
     52 
     53    Make sure you use fields that are appropriate for the instruction,
     54    of course.
     55 
     56    The 'i' format uses OP, RS, RT and IMMEDIATE.
     57 
     58    The 'j' format uses OP and TARGET.
     59 
     60    The 'r' format uses OP, RS, RT, RD, SHAMT and FUNCT.
     61 
     62    The 'b' format uses OP, RS, RT and DELTA.
     63 
     64    The floating point 'i' format uses OP, RS, RT and IMMEDIATE.
     65 
     66    The floating point 'r' format uses OP, FMT, FT, FS, FD and FUNCT.
     67 
     68    A breakpoint instruction uses OP, CODE and SPEC (10 bits of the
     69    breakpoint instruction are not defined; Kane says the breakpoint
     70    code field in BREAK is 20 bits; yet MIPS assemblers and debuggers
     71    only use ten bits).  An optional two-operand form of break/sdbbp
     72    allows the lower ten bits to be set too, and MIPS32 and later
     73    architectures allow 20 bits to be set with a signal operand
     74    (using CODE20).
     75 
     76    The syscall instruction uses CODE20.
     77 
     78    The general coprocessor instructions use COPZ.  */
     79 
     80 #define OP_MASK_OP		0x3f
     81 #define OP_SH_OP		26
     82 #define OP_MASK_RS		0x1f
     83 #define OP_SH_RS		21
     84 #define OP_MASK_FR		0x1f
     85 #define OP_SH_FR		21
     86 #define OP_MASK_FMT		0x1f
     87 #define OP_SH_FMT		21
     88 #define OP_MASK_BCC		0x7
     89 #define OP_SH_BCC		18
     90 #define OP_MASK_CODE		0x3ff
     91 #define OP_SH_CODE		16
     92 #define OP_MASK_CODE2		0x3ff
     93 #define OP_SH_CODE2		6
     94 #define OP_MASK_RT		0x1f
     95 #define OP_SH_RT		16
     96 #define OP_MASK_FT		0x1f
     97 #define OP_SH_FT		16
     98 #define OP_MASK_CACHE		0x1f
     99 #define OP_SH_CACHE		16
    100 #define OP_MASK_RD		0x1f
    101 #define OP_SH_RD		11
    102 #define OP_MASK_FS		0x1f
    103 #define OP_SH_FS		11
    104 #define OP_MASK_PREFX		0x1f
    105 #define OP_SH_PREFX		11
    106 #define OP_MASK_CCC		0x7
    107 #define OP_SH_CCC		8
    108 #define OP_MASK_CODE20		0xfffff /* 20 bit syscall/breakpoint code.  */
    109 #define OP_SH_CODE20		6
    110 #define OP_MASK_SHAMT		0x1f
    111 #define OP_SH_SHAMT		6
    112 #define OP_MASK_FD		0x1f
    113 #define OP_SH_FD		6
    114 #define OP_MASK_TARGET		0x3ffffff
    115 #define OP_SH_TARGET		0
    116 #define OP_MASK_COPZ		0x1ffffff
    117 #define OP_SH_COPZ		0
    118 #define OP_MASK_IMMEDIATE	0xffff
    119 #define OP_SH_IMMEDIATE		0
    120 #define OP_MASK_DELTA		0xffff
    121 #define OP_SH_DELTA		0
    122 #define OP_MASK_FUNCT		0x3f
    123 #define OP_SH_FUNCT		0
    124 #define OP_MASK_SPEC		0x3f
    125 #define OP_SH_SPEC		0
    126 #define OP_SH_LOCC              8       /* FP condition code.  */
    127 #define OP_SH_HICC              18      /* FP condition code.  */
    128 #define OP_MASK_CC              0x7
    129 #define OP_SH_COP1NORM          25      /* Normal COP1 encoding.  */
    130 #define OP_MASK_COP1NORM        0x1     /* a single bit.  */
    131 #define OP_SH_COP1SPEC          21      /* COP1 encodings.  */
    132 #define OP_MASK_COP1SPEC        0xf
    133 #define OP_MASK_COP1SCLR        0x4
    134 #define OP_MASK_COP1CMP         0x3
    135 #define OP_SH_COP1CMP           4
    136 #define OP_SH_FORMAT            21      /* FP short format field.  */
    137 #define OP_MASK_FORMAT          0x7
    138 #define OP_SH_TRUE              16
    139 #define OP_MASK_TRUE            0x1
    140 #define OP_SH_GE                17
    141 #define OP_MASK_GE              0x01
    142 #define OP_SH_UNSIGNED          16
    143 #define OP_MASK_UNSIGNED        0x1
    144 #define OP_SH_HINT              16
    145 #define OP_MASK_HINT            0x1f
    146 #define OP_SH_MMI               0       /* Multimedia (parallel) op.  */
    147 #define OP_MASK_MMI             0x3f
    148 #define OP_SH_MMISUB            6
    149 #define OP_MASK_MMISUB          0x1f
    150 #define OP_MASK_PERFREG		0x1f	/* Performance monitoring.  */
    151 #define OP_SH_PERFREG		1
    152 #define OP_SH_SEL		0	/* Coprocessor select field.  */
    153 #define OP_MASK_SEL		0x7	/* The sel field of mfcZ and mtcZ.  */
    154 #define OP_SH_CODE19		6       /* 19 bit wait code.  */
    155 #define OP_MASK_CODE19		0x7ffff
    156 #define OP_SH_ALN		21
    157 #define OP_MASK_ALN		0x7
    158 #define OP_SH_VSEL		21
    159 #define OP_MASK_VSEL		0x1f
    160 #define OP_MASK_VECBYTE		0x7	/* Selector field is really 4 bits,
    161 					   but 0x8-0xf don't select bytes.  */
    162 #define OP_SH_VECBYTE		22
    163 #define OP_MASK_VECALIGN	0x7	/* Vector byte-align (alni.ob) op.  */
    164 #define OP_SH_VECALIGN		21
    165 #define OP_MASK_INSMSB		0x1f	/* "ins" MSB.  */
    166 #define OP_SH_INSMSB		11
    167 #define OP_MASK_EXTMSBD		0x1f	/* "ext" MSBD.  */
    168 #define OP_SH_EXTMSBD		11
    169 
    170 #define	OP_OP_COP0		0x10
    171 #define	OP_OP_COP1		0x11
    172 #define	OP_OP_COP2		0x12
    173 #define	OP_OP_COP3		0x13
    174 #define	OP_OP_LWC1		0x31
    175 #define	OP_OP_LWC2		0x32
    176 #define	OP_OP_LWC3		0x33	/* a.k.a. pref */
    177 #define	OP_OP_LDC1		0x35
    178 #define	OP_OP_LDC2		0x36
    179 #define	OP_OP_LDC3		0x37	/* a.k.a. ld */
    180 #define	OP_OP_SWC1		0x39
    181 #define	OP_OP_SWC2		0x3a
    182 #define	OP_OP_SWC3		0x3b
    183 #define	OP_OP_SDC1		0x3d
    184 #define	OP_OP_SDC2		0x3e
    185 #define	OP_OP_SDC3		0x3f	/* a.k.a. sd */
    186 
    187 /* MIPS DSP ASE */
    188 #define OP_SH_DSPACC		11
    189 #define OP_MASK_DSPACC  	0x3
    190 #define OP_SH_DSPACC_S  	21
    191 #define OP_MASK_DSPACC_S	0x3
    192 #define OP_SH_DSPSFT		20
    193 #define OP_MASK_DSPSFT  	0x3f
    194 #define OP_SH_DSPSFT_7  	19
    195 #define OP_MASK_DSPSFT_7	0x7f
    196 #define OP_SH_SA3		21
    197 #define OP_MASK_SA3		0x7
    198 #define OP_SH_SA4		21
    199 #define OP_MASK_SA4		0xf
    200 #define OP_SH_IMM8		16
    201 #define OP_MASK_IMM8		0xff
    202 #define OP_SH_IMM10		16
    203 #define OP_MASK_IMM10		0x3ff
    204 #define OP_SH_WRDSP		11
    205 #define OP_MASK_WRDSP		0x3f
    206 #define OP_SH_RDDSP		16
    207 #define OP_MASK_RDDSP		0x3f
    208 #define OP_SH_BP		11
    209 #define OP_MASK_BP		0x3
    210 
    211 /* MIPS MT ASE */
    212 #define OP_SH_MT_U		5
    213 #define OP_MASK_MT_U		0x1
    214 #define OP_SH_MT_H		4
    215 #define OP_MASK_MT_H		0x1
    216 #define OP_SH_MTACC_T		18
    217 #define OP_MASK_MTACC_T		0x3
    218 #define OP_SH_MTACC_D		13
    219 #define OP_MASK_MTACC_D		0x3
    220 
    221 #define	OP_OP_COP0		0x10
    222 #define	OP_OP_COP1		0x11
    223 #define	OP_OP_COP2		0x12
    224 #define	OP_OP_COP3		0x13
    225 #define	OP_OP_LWC1		0x31
    226 #define	OP_OP_LWC2		0x32
    227 #define	OP_OP_LWC3		0x33	/* a.k.a. pref */
    228 #define	OP_OP_LDC1		0x35
    229 #define	OP_OP_LDC2		0x36
    230 #define	OP_OP_LDC3		0x37	/* a.k.a. ld */
    231 #define	OP_OP_SWC1		0x39
    232 #define	OP_OP_SWC2		0x3a
    233 #define	OP_OP_SWC3		0x3b
    234 #define	OP_OP_SDC1		0x3d
    235 #define	OP_OP_SDC2		0x3e
    236 #define	OP_OP_SDC3		0x3f	/* a.k.a. sd */
    237 
    238 /* Values in the 'VSEL' field.  */
    239 #define MDMX_FMTSEL_IMM_QH	0x1d
    240 #define MDMX_FMTSEL_IMM_OB	0x1e
    241 #define MDMX_FMTSEL_VEC_QH	0x15
    242 #define MDMX_FMTSEL_VEC_OB	0x16
    243 
    244 /* UDI */
    245 #define OP_SH_UDI1		6
    246 #define OP_MASK_UDI1		0x1f
    247 #define OP_SH_UDI2		6
    248 #define OP_MASK_UDI2		0x3ff
    249 #define OP_SH_UDI3		6
    250 #define OP_MASK_UDI3		0x7fff
    251 #define OP_SH_UDI4		6
    252 #define OP_MASK_UDI4		0xfffff
    253 /* This structure holds information for a particular instruction.  */
    254 
    255 struct mips_opcode
    256 {
    257   /* The name of the instruction.  */
    258   const char *name;
    259   /* A string describing the arguments for this instruction.  */
    260   const char *args;
    261   /* The basic opcode for the instruction.  When assembling, this
    262      opcode is modified by the arguments to produce the actual opcode
    263      that is used.  If pinfo is INSN_MACRO, then this is 0.  */
    264   unsigned long match;
    265   /* If pinfo is not INSN_MACRO, then this is a bit mask for the
    266      relevant portions of the opcode when disassembling.  If the
    267      actual opcode anded with the match field equals the opcode field,
    268      then we have found the correct instruction.  If pinfo is
    269      INSN_MACRO, then this field is the macro identifier.  */
    270   unsigned long mask;
    271   /* For a macro, this is INSN_MACRO.  Otherwise, it is a collection
    272      of bits describing the instruction, notably any relevant hazard
    273      information.  */
    274   unsigned long pinfo;
    275   /* A collection of additional bits describing the instruction. */
    276   unsigned long pinfo2;
    277   /* A collection of bits describing the instruction sets of which this
    278      instruction or macro is a member. */
    279   unsigned long membership;
    280 };
    281 
    282 /* These are the characters which may appear in the args field of an
    283    instruction.  They appear in the order in which the fields appear
    284    when the instruction is used.  Commas and parentheses in the args
    285    string are ignored when assembling, and written into the output
    286    when disassembling.
    287 
    288    Each of these characters corresponds to a mask field defined above.
    289 
    290    "<" 5 bit shift amount (OP_*_SHAMT)
    291    ">" shift amount between 32 and 63, stored after subtracting 32 (OP_*_SHAMT)
    292    "a" 26 bit target address (OP_*_TARGET)
    293    "b" 5 bit base register (OP_*_RS)
    294    "c" 10 bit breakpoint code (OP_*_CODE)
    295    "d" 5 bit destination register specifier (OP_*_RD)
    296    "h" 5 bit prefx hint (OP_*_PREFX)
    297    "i" 16 bit unsigned immediate (OP_*_IMMEDIATE)
    298    "j" 16 bit signed immediate (OP_*_DELTA)
    299    "k" 5 bit cache opcode in target register position (OP_*_CACHE)
    300        Also used for immediate operands in vr5400 vector insns.
    301    "o" 16 bit signed offset (OP_*_DELTA)
    302    "p" 16 bit PC relative branch target address (OP_*_DELTA)
    303    "q" 10 bit extra breakpoint code (OP_*_CODE2)
    304    "r" 5 bit same register used as both source and target (OP_*_RS)
    305    "s" 5 bit source register specifier (OP_*_RS)
    306    "t" 5 bit target register (OP_*_RT)
    307    "u" 16 bit upper 16 bits of address (OP_*_IMMEDIATE)
    308    "v" 5 bit same register used as both source and destination (OP_*_RS)
    309    "w" 5 bit same register used as both target and destination (OP_*_RT)
    310    "U" 5 bit same destination register in both OP_*_RD and OP_*_RT
    311        (used by clo and clz)
    312    "C" 25 bit coprocessor function code (OP_*_COPZ)
    313    "B" 20 bit syscall/breakpoint function code (OP_*_CODE20)
    314    "J" 19 bit wait function code (OP_*_CODE19)
    315    "x" accept and ignore register name
    316    "z" must be zero register
    317    "K" 5 bit Hardware Register (rdhwr instruction) (OP_*_RD)
    318    "+A" 5 bit ins/ext/dins/dext/dinsm/dextm position, which becomes
    319         LSB (OP_*_SHAMT).
    320 	Enforces: 0 <= pos < 32.
    321    "+B" 5 bit ins/dins size, which becomes MSB (OP_*_INSMSB).
    322 	Requires that "+A" or "+E" occur first to set position.
    323 	Enforces: 0 < (pos+size) <= 32.
    324    "+C" 5 bit ext/dext size, which becomes MSBD (OP_*_EXTMSBD).
    325 	Requires that "+A" or "+E" occur first to set position.
    326 	Enforces: 0 < (pos+size) <= 32.
    327 	(Also used by "dext" w/ different limits, but limits for
    328 	that are checked by the M_DEXT macro.)
    329    "+E" 5 bit dinsu/dextu position, which becomes LSB-32 (OP_*_SHAMT).
    330 	Enforces: 32 <= pos < 64.
    331    "+F" 5 bit "dinsm/dinsu" size, which becomes MSB-32 (OP_*_INSMSB).
    332 	Requires that "+A" or "+E" occur first to set position.
    333 	Enforces: 32 < (pos+size) <= 64.
    334    "+G" 5 bit "dextm" size, which becomes MSBD-32 (OP_*_EXTMSBD).
    335 	Requires that "+A" or "+E" occur first to set position.
    336 	Enforces: 32 < (pos+size) <= 64.
    337    "+H" 5 bit "dextu" size, which becomes MSBD (OP_*_EXTMSBD).
    338 	Requires that "+A" or "+E" occur first to set position.
    339 	Enforces: 32 < (pos+size) <= 64.
    340 
    341    Floating point instructions:
    342    "D" 5 bit destination register (OP_*_FD)
    343    "M" 3 bit compare condition code (OP_*_CCC) (only used for mips4 and up)
    344    "N" 3 bit branch condition code (OP_*_BCC) (only used for mips4 and up)
    345    "S" 5 bit fs source 1 register (OP_*_FS)
    346    "T" 5 bit ft source 2 register (OP_*_FT)
    347    "R" 5 bit fr source 3 register (OP_*_FR)
    348    "V" 5 bit same register used as floating source and destination (OP_*_FS)
    349    "W" 5 bit same register used as floating target and destination (OP_*_FT)
    350 
    351    Coprocessor instructions:
    352    "E" 5 bit target register (OP_*_RT)
    353    "G" 5 bit destination register (OP_*_RD)
    354    "H" 3 bit sel field for (d)mtc* and (d)mfc* (OP_*_SEL)
    355    "P" 5 bit performance-monitor register (OP_*_PERFREG)
    356    "e" 5 bit vector register byte specifier (OP_*_VECBYTE)
    357    "%" 3 bit immediate vr5400 vector alignment operand (OP_*_VECALIGN)
    358    see also "k" above
    359    "+D" Combined destination register ("G") and sel ("H") for CP0 ops,
    360 	for pretty-printing in disassembly only.
    361 
    362    Macro instructions:
    363    "A" General 32 bit expression
    364    "I" 32 bit immediate (value placed in imm_expr).
    365    "+I" 32 bit immediate (value placed in imm2_expr).
    366    "F" 64 bit floating point constant in .rdata
    367    "L" 64 bit floating point constant in .lit8
    368    "f" 32 bit floating point constant
    369    "l" 32 bit floating point constant in .lit4
    370 
    371    MDMX instruction operands (note that while these use the FP register
    372    fields, they accept both $fN and $vN names for the registers):
    373    "O"	MDMX alignment offset (OP_*_ALN)
    374    "Q"	MDMX vector/scalar/immediate source (OP_*_VSEL and OP_*_FT)
    375    "X"	MDMX destination register (OP_*_FD)
    376    "Y"	MDMX source register (OP_*_FS)
    377    "Z"	MDMX source register (OP_*_FT)
    378 
    379    DSP ASE usage:
    380    "2" 2 bit unsigned immediate for byte align (OP_*_BP)
    381    "3" 3 bit unsigned immediate (OP_*_SA3)
    382    "4" 4 bit unsigned immediate (OP_*_SA4)
    383    "5" 8 bit unsigned immediate (OP_*_IMM8)
    384    "6" 5 bit unsigned immediate (OP_*_RS)
    385    "7" 2 bit dsp accumulator register (OP_*_DSPACC)
    386    "8" 6 bit unsigned immediate (OP_*_WRDSP)
    387    "9" 2 bit dsp accumulator register (OP_*_DSPACC_S)
    388    "0" 6 bit signed immediate (OP_*_DSPSFT)
    389    ":" 7 bit signed immediate (OP_*_DSPSFT_7)
    390    "'" 6 bit unsigned immediate (OP_*_RDDSP)
    391    "@" 10 bit signed immediate (OP_*_IMM10)
    392 
    393    MT ASE usage:
    394    "!" 1 bit usermode flag (OP_*_MT_U)
    395    "$" 1 bit load high flag (OP_*_MT_H)
    396    "*" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_T)
    397    "&" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_D)
    398    "g" 5 bit coprocessor 1 and 2 destination register (OP_*_RD)
    399    "+t" 5 bit coprocessor 0 destination register (OP_*_RT)
    400    "+T" 5 bit coprocessor 0 destination register (OP_*_RT) - disassembly only
    401 
    402    UDI immediates:
    403    "+1" UDI immediate bits 6-10
    404    "+2" UDI immediate bits 6-15
    405    "+3" UDI immediate bits 6-20
    406    "+4" UDI immediate bits 6-25
    407 
    408    Other:
    409    "()" parens surrounding optional value
    410    ","  separates operands
    411    "[]" brackets around index for vector-op scalar operand specifier (vr5400)
    412    "+"  Start of extension sequence.
    413 
    414    Characters used so far, for quick reference when adding more:
    415    "234567890"
    416    "%[]<>(),+:'@!$*&"
    417    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    418    "abcdefghijklopqrstuvwxz"
    419 
    420    Extension character sequences used so far ("+" followed by the
    421    following), for quick reference when adding more:
    422    "1234"
    423    "ABCDEFGHIT"
    424    "t"
    425 */
    426 
    427 /* These are the bits which may be set in the pinfo field of an
    428    instructions, if it is not equal to INSN_MACRO.  */
    429 
    430 /* Modifies the general purpose register in OP_*_RD.  */
    431 #define INSN_WRITE_GPR_D            0x00000001
    432 /* Modifies the general purpose register in OP_*_RT.  */
    433 #define INSN_WRITE_GPR_T            0x00000002
    434 /* Modifies general purpose register 31.  */
    435 #define INSN_WRITE_GPR_31           0x00000004
    436 /* Modifies the floating point register in OP_*_FD.  */
    437 #define INSN_WRITE_FPR_D            0x00000008
    438 /* Modifies the floating point register in OP_*_FS.  */
    439 #define INSN_WRITE_FPR_S            0x00000010
    440 /* Modifies the floating point register in OP_*_FT.  */
    441 #define INSN_WRITE_FPR_T            0x00000020
    442 /* Reads the general purpose register in OP_*_RS.  */
    443 #define INSN_READ_GPR_S             0x00000040
    444 /* Reads the general purpose register in OP_*_RT.  */
    445 #define INSN_READ_GPR_T             0x00000080
    446 /* Reads the floating point register in OP_*_FS.  */
    447 #define INSN_READ_FPR_S             0x00000100
    448 /* Reads the floating point register in OP_*_FT.  */
    449 #define INSN_READ_FPR_T             0x00000200
    450 /* Reads the floating point register in OP_*_FR.  */
    451 #define INSN_READ_FPR_R		    0x00000400
    452 /* Modifies coprocessor condition code.  */
    453 #define INSN_WRITE_COND_CODE        0x00000800
    454 /* Reads coprocessor condition code.  */
    455 #define INSN_READ_COND_CODE         0x00001000
    456 /* TLB operation.  */
    457 #define INSN_TLB                    0x00002000
    458 /* Reads coprocessor register other than floating point register.  */
    459 #define INSN_COP                    0x00004000
    460 /* Instruction loads value from memory, requiring delay.  */
    461 #define INSN_LOAD_MEMORY_DELAY      0x00008000
    462 /* Instruction loads value from coprocessor, requiring delay.  */
    463 #define INSN_LOAD_COPROC_DELAY	    0x00010000
    464 /* Instruction has unconditional branch delay slot.  */
    465 #define INSN_UNCOND_BRANCH_DELAY    0x00020000
    466 /* Instruction has conditional branch delay slot.  */
    467 #define INSN_COND_BRANCH_DELAY      0x00040000
    468 /* Conditional branch likely: if branch not taken, insn nullified.  */
    469 #define INSN_COND_BRANCH_LIKELY	    0x00080000
    470 /* Moves to coprocessor register, requiring delay.  */
    471 #define INSN_COPROC_MOVE_DELAY      0x00100000
    472 /* Loads coprocessor register from memory, requiring delay.  */
    473 #define INSN_COPROC_MEMORY_DELAY    0x00200000
    474 /* Reads the HI register.  */
    475 #define INSN_READ_HI		    0x00400000
    476 /* Reads the LO register.  */
    477 #define INSN_READ_LO		    0x00800000
    478 /* Modifies the HI register.  */
    479 #define INSN_WRITE_HI		    0x01000000
    480 /* Modifies the LO register.  */
    481 #define INSN_WRITE_LO		    0x02000000
    482 /* Takes a trap (easier to keep out of delay slot).  */
    483 #define INSN_TRAP                   0x04000000
    484 /* Instruction stores value into memory.  */
    485 #define INSN_STORE_MEMORY	    0x08000000
    486 /* Instruction uses single precision floating point.  */
    487 #define FP_S			    0x10000000
    488 /* Instruction uses double precision floating point.  */
    489 #define FP_D			    0x20000000
    490 /* Instruction is part of the tx39's integer multiply family.    */
    491 #define INSN_MULT                   0x40000000
    492 /* Instruction synchronize shared memory.  */
    493 #define INSN_SYNC		    0x80000000
    494 
    495 /* These are the bits which may be set in the pinfo2 field of an
    496    instruction. */
    497 
    498 /* Instruction is a simple alias (I.E. "move" for daddu/addu/or) */
    499 #define	INSN2_ALIAS		    0x00000001
    500 /* Instruction reads MDMX accumulator. */
    501 #define INSN2_READ_MDMX_ACC	    0x00000002
    502 /* Instruction writes MDMX accumulator. */
    503 #define INSN2_WRITE_MDMX_ACC	    0x00000004
    504 
    505 /* Instruction is actually a macro.  It should be ignored by the
    506    disassembler, and requires special treatment by the assembler.  */
    507 #define INSN_MACRO                  0xffffffff
    508 
    509 /* Masks used to mark instructions to indicate which MIPS ISA level
    510    they were introduced in.  ISAs, as defined below, are logical
    511    ORs of these bits, indicating that they support the instructions
    512    defined at the given level.  */
    513 
    514 #define INSN_ISA_MASK		  0x00000fff
    515 #define INSN_ISA1                 0x00000001
    516 #define INSN_ISA2                 0x00000002
    517 #define INSN_ISA3                 0x00000004
    518 #define INSN_ISA4                 0x00000008
    519 #define INSN_ISA5                 0x00000010
    520 #define INSN_ISA32                0x00000020
    521 #define INSN_ISA64                0x00000040
    522 #define INSN_ISA32R2              0x00000080
    523 #define INSN_ISA64R2              0x00000100
    524 
    525 /* Masks used for MIPS-defined ASEs.  */
    526 #define INSN_ASE_MASK		  0x0000f000
    527 
    528 /* DSP ASE */
    529 #define INSN_DSP                  0x00001000
    530 #define INSN_DSP64                0x00002000
    531 /* MIPS 16 ASE */
    532 #define INSN_MIPS16               0x00004000
    533 /* MIPS-3D ASE */
    534 #define INSN_MIPS3D               0x00008000
    535 
    536 /* Chip specific instructions.  These are bitmasks.  */
    537 
    538 /* MIPS R4650 instruction.  */
    539 #define INSN_4650                 0x00010000
    540 /* LSI R4010 instruction.  */
    541 #define INSN_4010                 0x00020000
    542 /* NEC VR4100 instruction.  */
    543 #define INSN_4100                 0x00040000
    544 /* Toshiba R3900 instruction.  */
    545 #define INSN_3900                 0x00080000
    546 /* MIPS R10000 instruction.  */
    547 #define INSN_10000                0x00100000
    548 /* Broadcom SB-1 instruction.  */
    549 #define INSN_SB1                  0x00200000
    550 /* NEC VR4111/VR4181 instruction.  */
    551 #define INSN_4111                 0x00400000
    552 /* NEC VR4120 instruction.  */
    553 #define INSN_4120                 0x00800000
    554 /* NEC VR5400 instruction.  */
    555 #define INSN_5400		  0x01000000
    556 /* NEC VR5500 instruction.  */
    557 #define INSN_5500		  0x02000000
    558 
    559 /* MDMX ASE */
    560 #define INSN_MDMX                 0x04000000
    561 /* MT ASE */
    562 #define INSN_MT                   0x08000000
    563 /* SmartMIPS ASE  */
    564 #define INSN_SMARTMIPS            0x10000000
    565 /* DSP R2 ASE  */
    566 #define INSN_DSPR2                0x20000000
    567 
    568 /* MIPS ISA defines, use instead of hardcoding ISA level.  */
    569 
    570 #define       ISA_UNKNOWN     0               /* Gas internal use.  */
    571 #define       ISA_MIPS1       (INSN_ISA1)
    572 #define       ISA_MIPS2       (ISA_MIPS1 | INSN_ISA2)
    573 #define       ISA_MIPS3       (ISA_MIPS2 | INSN_ISA3)
    574 #define       ISA_MIPS4       (ISA_MIPS3 | INSN_ISA4)
    575 #define       ISA_MIPS5       (ISA_MIPS4 | INSN_ISA5)
    576 
    577 #define       ISA_MIPS32      (ISA_MIPS2 | INSN_ISA32)
    578 #define       ISA_MIPS64      (ISA_MIPS5 | INSN_ISA32 | INSN_ISA64)
    579 
    580 #define       ISA_MIPS32R2    (ISA_MIPS32 | INSN_ISA32R2)
    581 #define       ISA_MIPS64R2    (ISA_MIPS64 | INSN_ISA32R2 | INSN_ISA64R2)
    582 
    583 
    584 /* CPU defines, use instead of hardcoding processor number. Keep this
    585    in sync with bfd/archures.c in order for machine selection to work.  */
    586 #define CPU_UNKNOWN	0               /* Gas internal use.  */
    587 #define CPU_R3000	3000
    588 #define CPU_R3900	3900
    589 #define CPU_R4000	4000
    590 #define CPU_R4010	4010
    591 #define CPU_VR4100	4100
    592 #define CPU_R4111	4111
    593 #define CPU_VR4120	4120
    594 #define CPU_R4300	4300
    595 #define CPU_R4400	4400
    596 #define CPU_R4600	4600
    597 #define CPU_R4650	4650
    598 #define CPU_R5000	5000
    599 #define CPU_VR5400	5400
    600 #define CPU_VR5500	5500
    601 #define CPU_R6000	6000
    602 #define CPU_RM7000	7000
    603 #define CPU_R8000	8000
    604 #define CPU_R10000	10000
    605 #define CPU_R12000	12000
    606 #define CPU_MIPS16	16
    607 #define CPU_MIPS32	32
    608 #define CPU_MIPS32R2	33
    609 #define CPU_MIPS5       5
    610 #define CPU_MIPS64      64
    611 #define CPU_MIPS64R2	65
    612 #define CPU_SB1         12310201        /* octal 'SB', 01.  */
    613 
    614 /* Test for membership in an ISA including chip specific ISAs.  INSN
    615    is pointer to an element of the opcode table; ISA is the specified
    616    ISA/ASE bitmask to test against; and CPU is the CPU specific ISA to
    617    test, or zero if no CPU specific ISA test is desired.  */
    618 
    619 #if 0
    620 #define OPCODE_IS_MEMBER(insn, isa, cpu)				\
    621     (((insn)->membership & isa) != 0					\
    622      || (cpu == CPU_R4650 && ((insn)->membership & INSN_4650) != 0)	\
    623      || (cpu == CPU_RM7000 && ((insn)->membership & INSN_4650) != 0)	\
    624      || (cpu == CPU_RM9000 && ((insn)->membership & INSN_4650) != 0)	\
    625      || (cpu == CPU_R4010 && ((insn)->membership & INSN_4010) != 0)	\
    626      || (cpu == CPU_VR4100 && ((insn)->membership & INSN_4100) != 0)	\
    627      || (cpu == CPU_R3900 && ((insn)->membership & INSN_3900) != 0)	\
    628      || ((cpu == CPU_R10000 || cpu == CPU_R12000)			\
    629 	 && ((insn)->membership & INSN_10000) != 0)			\
    630      || (cpu == CPU_SB1 && ((insn)->membership & INSN_SB1) != 0)	\
    631      || (cpu == CPU_R4111 && ((insn)->membership & INSN_4111) != 0)	\
    632      || (cpu == CPU_VR4120 && ((insn)->membership & INSN_4120) != 0)	\
    633      || (cpu == CPU_VR5400 && ((insn)->membership & INSN_5400) != 0)	\
    634      || (cpu == CPU_VR5500 && ((insn)->membership & INSN_5500) != 0)	\
    635      || 0)	/* Please keep this term for easier source merging.  */
    636 #else
    637 #define OPCODE_IS_MEMBER(insn, isa, cpu)                               \
    638     (1 != 0)
    639 #endif
    640 
    641 /* This is a list of macro expanded instructions.
    642 
    643    _I appended means immediate
    644    _A appended means address
    645    _AB appended means address with base register
    646    _D appended means 64 bit floating point constant
    647    _S appended means 32 bit floating point constant.  */
    648 
    649 enum
    650 {
    651   M_ABS,
    652   M_ADD_I,
    653   M_ADDU_I,
    654   M_AND_I,
    655   M_BALIGN,
    656   M_BEQ,
    657   M_BEQ_I,
    658   M_BEQL_I,
    659   M_BGE,
    660   M_BGEL,
    661   M_BGE_I,
    662   M_BGEL_I,
    663   M_BGEU,
    664   M_BGEUL,
    665   M_BGEU_I,
    666   M_BGEUL_I,
    667   M_BGT,
    668   M_BGTL,
    669   M_BGT_I,
    670   M_BGTL_I,
    671   M_BGTU,
    672   M_BGTUL,
    673   M_BGTU_I,
    674   M_BGTUL_I,
    675   M_BLE,
    676   M_BLEL,
    677   M_BLE_I,
    678   M_BLEL_I,
    679   M_BLEU,
    680   M_BLEUL,
    681   M_BLEU_I,
    682   M_BLEUL_I,
    683   M_BLT,
    684   M_BLTL,
    685   M_BLT_I,
    686   M_BLTL_I,
    687   M_BLTU,
    688   M_BLTUL,
    689   M_BLTU_I,
    690   M_BLTUL_I,
    691   M_BNE,
    692   M_BNE_I,
    693   M_BNEL_I,
    694   M_CACHE_AB,
    695   M_DABS,
    696   M_DADD_I,
    697   M_DADDU_I,
    698   M_DDIV_3,
    699   M_DDIV_3I,
    700   M_DDIVU_3,
    701   M_DDIVU_3I,
    702   M_DEXT,
    703   M_DINS,
    704   M_DIV_3,
    705   M_DIV_3I,
    706   M_DIVU_3,
    707   M_DIVU_3I,
    708   M_DLA_AB,
    709   M_DLCA_AB,
    710   M_DLI,
    711   M_DMUL,
    712   M_DMUL_I,
    713   M_DMULO,
    714   M_DMULO_I,
    715   M_DMULOU,
    716   M_DMULOU_I,
    717   M_DREM_3,
    718   M_DREM_3I,
    719   M_DREMU_3,
    720   M_DREMU_3I,
    721   M_DSUB_I,
    722   M_DSUBU_I,
    723   M_DSUBU_I_2,
    724   M_J_A,
    725   M_JAL_1,
    726   M_JAL_2,
    727   M_JAL_A,
    728   M_L_DOB,
    729   M_L_DAB,
    730   M_LA_AB,
    731   M_LB_A,
    732   M_LB_AB,
    733   M_LBU_A,
    734   M_LBU_AB,
    735   M_LCA_AB,
    736   M_LD_A,
    737   M_LD_OB,
    738   M_LD_AB,
    739   M_LDC1_AB,
    740   M_LDC2_AB,
    741   M_LDC3_AB,
    742   M_LDL_AB,
    743   M_LDR_AB,
    744   M_LH_A,
    745   M_LH_AB,
    746   M_LHU_A,
    747   M_LHU_AB,
    748   M_LI,
    749   M_LI_D,
    750   M_LI_DD,
    751   M_LI_S,
    752   M_LI_SS,
    753   M_LL_AB,
    754   M_LLD_AB,
    755   M_LS_A,
    756   M_LW_A,
    757   M_LW_AB,
    758   M_LWC0_A,
    759   M_LWC0_AB,
    760   M_LWC1_A,
    761   M_LWC1_AB,
    762   M_LWC2_A,
    763   M_LWC2_AB,
    764   M_LWC3_A,
    765   M_LWC3_AB,
    766   M_LWL_A,
    767   M_LWL_AB,
    768   M_LWR_A,
    769   M_LWR_AB,
    770   M_LWU_AB,
    771   M_MOVE,
    772   M_MUL,
    773   M_MUL_I,
    774   M_MULO,
    775   M_MULO_I,
    776   M_MULOU,
    777   M_MULOU_I,
    778   M_NOR_I,
    779   M_OR_I,
    780   M_REM_3,
    781   M_REM_3I,
    782   M_REMU_3,
    783   M_REMU_3I,
    784   M_DROL,
    785   M_ROL,
    786   M_DROL_I,
    787   M_ROL_I,
    788   M_DROR,
    789   M_ROR,
    790   M_DROR_I,
    791   M_ROR_I,
    792   M_S_DA,
    793   M_S_DOB,
    794   M_S_DAB,
    795   M_S_S,
    796   M_SC_AB,
    797   M_SCD_AB,
    798   M_SD_A,
    799   M_SD_OB,
    800   M_SD_AB,
    801   M_SDC1_AB,
    802   M_SDC2_AB,
    803   M_SDC3_AB,
    804   M_SDL_AB,
    805   M_SDR_AB,
    806   M_SEQ,
    807   M_SEQ_I,
    808   M_SGE,
    809   M_SGE_I,
    810   M_SGEU,
    811   M_SGEU_I,
    812   M_SGT,
    813   M_SGT_I,
    814   M_SGTU,
    815   M_SGTU_I,
    816   M_SLE,
    817   M_SLE_I,
    818   M_SLEU,
    819   M_SLEU_I,
    820   M_SLT_I,
    821   M_SLTU_I,
    822   M_SNE,
    823   M_SNE_I,
    824   M_SB_A,
    825   M_SB_AB,
    826   M_SH_A,
    827   M_SH_AB,
    828   M_SW_A,
    829   M_SW_AB,
    830   M_SWC0_A,
    831   M_SWC0_AB,
    832   M_SWC1_A,
    833   M_SWC1_AB,
    834   M_SWC2_A,
    835   M_SWC2_AB,
    836   M_SWC3_A,
    837   M_SWC3_AB,
    838   M_SWL_A,
    839   M_SWL_AB,
    840   M_SWR_A,
    841   M_SWR_AB,
    842   M_SUB_I,
    843   M_SUBU_I,
    844   M_SUBU_I_2,
    845   M_TEQ_I,
    846   M_TGE_I,
    847   M_TGEU_I,
    848   M_TLT_I,
    849   M_TLTU_I,
    850   M_TNE_I,
    851   M_TRUNCWD,
    852   M_TRUNCWS,
    853   M_ULD,
    854   M_ULD_A,
    855   M_ULH,
    856   M_ULH_A,
    857   M_ULHU,
    858   M_ULHU_A,
    859   M_ULW,
    860   M_ULW_A,
    861   M_USH,
    862   M_USH_A,
    863   M_USW,
    864   M_USW_A,
    865   M_USD,
    866   M_USD_A,
    867   M_XOR_I,
    868   M_COP0,
    869   M_COP1,
    870   M_COP2,
    871   M_COP3,
    872   M_NUM_MACROS
    873 };
    874 
    875 
    876 /* The order of overloaded instructions matters.  Label arguments and
    877    register arguments look the same. Instructions that can have either
    878    for arguments must apear in the correct order in this table for the
    879    assembler to pick the right one. In other words, entries with
    880    immediate operands must apear after the same instruction with
    881    registers.
    882 
    883    Many instructions are short hand for other instructions (i.e., The
    884    jal <register> instruction is short for jalr <register>).  */
    885 
    886 extern const struct mips_opcode mips_builtin_opcodes[];
    887 extern const int bfd_mips_num_builtin_opcodes;
    888 extern struct mips_opcode *mips_opcodes;
    889 extern int bfd_mips_num_opcodes;
    890 #define NUMOPCODES bfd_mips_num_opcodes
    891 
    892 
    893 /* The rest of this file adds definitions for the mips16 TinyRISC
    895    processor.  */
    896 
    897 /* These are the bitmasks and shift counts used for the different
    898    fields in the instruction formats.  Other than OP, no masks are
    899    provided for the fixed portions of an instruction, since they are
    900    not needed.
    901 
    902    The I format uses IMM11.
    903 
    904    The RI format uses RX and IMM8.
    905 
    906    The RR format uses RX, and RY.
    907 
    908    The RRI format uses RX, RY, and IMM5.
    909 
    910    The RRR format uses RX, RY, and RZ.
    911 
    912    The RRI_A format uses RX, RY, and IMM4.
    913 
    914    The SHIFT format uses RX, RY, and SHAMT.
    915 
    916    The I8 format uses IMM8.
    917 
    918    The I8_MOVR32 format uses RY and REGR32.
    919 
    920    The IR_MOV32R format uses REG32R and MOV32Z.
    921 
    922    The I64 format uses IMM8.
    923 
    924    The RI64 format uses RY and IMM5.
    925    */
    926 
    927 #define MIPS16OP_MASK_OP	0x1f
    928 #define MIPS16OP_SH_OP		11
    929 #define MIPS16OP_MASK_IMM11	0x7ff
    930 #define MIPS16OP_SH_IMM11	0
    931 #define MIPS16OP_MASK_RX	0x7
    932 #define MIPS16OP_SH_RX		8
    933 #define MIPS16OP_MASK_IMM8	0xff
    934 #define MIPS16OP_SH_IMM8	0
    935 #define MIPS16OP_MASK_RY	0x7
    936 #define MIPS16OP_SH_RY		5
    937 #define MIPS16OP_MASK_IMM5	0x1f
    938 #define MIPS16OP_SH_IMM5	0
    939 #define MIPS16OP_MASK_RZ	0x7
    940 #define MIPS16OP_SH_RZ		2
    941 #define MIPS16OP_MASK_IMM4	0xf
    942 #define MIPS16OP_SH_IMM4	0
    943 #define MIPS16OP_MASK_REGR32	0x1f
    944 #define MIPS16OP_SH_REGR32	0
    945 #define MIPS16OP_MASK_REG32R	0x1f
    946 #define MIPS16OP_SH_REG32R	3
    947 #define MIPS16OP_EXTRACT_REG32R(i) ((((i) >> 5) & 7) | ((i) & 0x18))
    948 #define MIPS16OP_MASK_MOVE32Z	0x7
    949 #define MIPS16OP_SH_MOVE32Z	0
    950 #define MIPS16OP_MASK_IMM6	0x3f
    951 #define MIPS16OP_SH_IMM6	5
    952 
    953 /* These are the characters which may appears in the args field of an
    954    instruction.  They appear in the order in which the fields appear
    955    when the instruction is used.  Commas and parentheses in the args
    956    string are ignored when assembling, and written into the output
    957    when disassembling.
    958 
    959    "y" 3 bit register (MIPS16OP_*_RY)
    960    "x" 3 bit register (MIPS16OP_*_RX)
    961    "z" 3 bit register (MIPS16OP_*_RZ)
    962    "Z" 3 bit register (MIPS16OP_*_MOVE32Z)
    963    "v" 3 bit same register as source and destination (MIPS16OP_*_RX)
    964    "w" 3 bit same register as source and destination (MIPS16OP_*_RY)
    965    "0" zero register ($0)
    966    "S" stack pointer ($sp or $29)
    967    "P" program counter
    968    "R" return address register ($ra or $31)
    969    "X" 5 bit MIPS register (MIPS16OP_*_REGR32)
    970    "Y" 5 bit MIPS register (MIPS16OP_*_REG32R)
    971    "6" 6 bit unsigned break code (MIPS16OP_*_IMM6)
    972    "a" 26 bit jump address
    973    "e" 11 bit extension value
    974    "l" register list for entry instruction
    975    "L" register list for exit instruction
    976 
    977    The remaining codes may be extended.  Except as otherwise noted,
    978    the full extended operand is a 16 bit signed value.
    979    "<" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 5 bit unsigned)
    980    ">" 3 bit unsigned shift count * 0 (MIPS16OP_*_RX) (full 5 bit unsigned)
    981    "[" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 6 bit unsigned)
    982    "]" 3 bit unsigned shift count * 0 (MIPS16OP_*_RX) (full 6 bit unsigned)
    983    "4" 4 bit signed immediate * 0 (MIPS16OP_*_IMM4) (full 15 bit signed)
    984    "5" 5 bit unsigned immediate * 0 (MIPS16OP_*_IMM5)
    985    "H" 5 bit unsigned immediate * 2 (MIPS16OP_*_IMM5)
    986    "W" 5 bit unsigned immediate * 4 (MIPS16OP_*_IMM5)
    987    "D" 5 bit unsigned immediate * 8 (MIPS16OP_*_IMM5)
    988    "j" 5 bit signed immediate * 0 (MIPS16OP_*_IMM5)
    989    "8" 8 bit unsigned immediate * 0 (MIPS16OP_*_IMM8)
    990    "V" 8 bit unsigned immediate * 4 (MIPS16OP_*_IMM8)
    991    "C" 8 bit unsigned immediate * 8 (MIPS16OP_*_IMM8)
    992    "U" 8 bit unsigned immediate * 0 (MIPS16OP_*_IMM8) (full 16 bit unsigned)
    993    "k" 8 bit signed immediate * 0 (MIPS16OP_*_IMM8)
    994    "K" 8 bit signed immediate * 8 (MIPS16OP_*_IMM8)
    995    "p" 8 bit conditional branch address (MIPS16OP_*_IMM8)
    996    "q" 11 bit branch address (MIPS16OP_*_IMM11)
    997    "A" 8 bit PC relative address * 4 (MIPS16OP_*_IMM8)
    998    "B" 5 bit PC relative address * 8 (MIPS16OP_*_IMM5)
    999    "E" 5 bit PC relative address * 4 (MIPS16OP_*_IMM5)
   1000    */
   1001 
   1002 /* Save/restore encoding for the args field when all 4 registers are
   1003    either saved as arguments or saved/restored as statics.  */
   1004 #define MIPS16_ALL_ARGS    0xe
   1005 #define MIPS16_ALL_STATICS 0xb
   1006 
   1007 /* For the mips16, we use the same opcode table format and a few of
   1008    the same flags.  However, most of the flags are different.  */
   1009 
   1010 /* Modifies the register in MIPS16OP_*_RX.  */
   1011 #define MIPS16_INSN_WRITE_X		    0x00000001
   1012 /* Modifies the register in MIPS16OP_*_RY.  */
   1013 #define MIPS16_INSN_WRITE_Y		    0x00000002
   1014 /* Modifies the register in MIPS16OP_*_RZ.  */
   1015 #define MIPS16_INSN_WRITE_Z		    0x00000004
   1016 /* Modifies the T ($24) register.  */
   1017 #define MIPS16_INSN_WRITE_T		    0x00000008
   1018 /* Modifies the SP ($29) register.  */
   1019 #define MIPS16_INSN_WRITE_SP		    0x00000010
   1020 /* Modifies the RA ($31) register.  */
   1021 #define MIPS16_INSN_WRITE_31		    0x00000020
   1022 /* Modifies the general purpose register in MIPS16OP_*_REG32R.  */
   1023 #define MIPS16_INSN_WRITE_GPR_Y		    0x00000040
   1024 /* Reads the register in MIPS16OP_*_RX.  */
   1025 #define MIPS16_INSN_READ_X		    0x00000080
   1026 /* Reads the register in MIPS16OP_*_RY.  */
   1027 #define MIPS16_INSN_READ_Y		    0x00000100
   1028 /* Reads the register in MIPS16OP_*_MOVE32Z.  */
   1029 #define MIPS16_INSN_READ_Z		    0x00000200
   1030 /* Reads the T ($24) register.  */
   1031 #define MIPS16_INSN_READ_T		    0x00000400
   1032 /* Reads the SP ($29) register.  */
   1033 #define MIPS16_INSN_READ_SP		    0x00000800
   1034 /* Reads the RA ($31) register.  */
   1035 #define MIPS16_INSN_READ_31		    0x00001000
   1036 /* Reads the program counter.  */
   1037 #define MIPS16_INSN_READ_PC		    0x00002000
   1038 /* Reads the general purpose register in MIPS16OP_*_REGR32.  */
   1039 #define MIPS16_INSN_READ_GPR_X		    0x00004000
   1040 /* Is a branch insn. */
   1041 #define MIPS16_INSN_BRANCH                  0x00010000
   1042 
   1043 /* The following flags have the same value for the mips16 opcode
   1044    table:
   1045    INSN_UNCOND_BRANCH_DELAY
   1046    INSN_COND_BRANCH_DELAY
   1047    INSN_COND_BRANCH_LIKELY (never used)
   1048    INSN_READ_HI
   1049    INSN_READ_LO
   1050    INSN_WRITE_HI
   1051    INSN_WRITE_LO
   1052    INSN_TRAP
   1053    INSN_ISA3
   1054    */
   1055 
   1056 extern const struct mips_opcode mips16_opcodes[];
   1057 extern const int bfd_mips16_num_opcodes;
   1058 
   1059 /* Short hand so the lines aren't too long.  */
   1060 
   1061 #define LDD     INSN_LOAD_MEMORY_DELAY
   1062 #define LCD	INSN_LOAD_COPROC_DELAY
   1063 #define UBD     INSN_UNCOND_BRANCH_DELAY
   1064 #define CBD	INSN_COND_BRANCH_DELAY
   1065 #define COD     INSN_COPROC_MOVE_DELAY
   1066 #define CLD	INSN_COPROC_MEMORY_DELAY
   1067 #define CBL	INSN_COND_BRANCH_LIKELY
   1068 #define TRAP	INSN_TRAP
   1069 #define SM	INSN_STORE_MEMORY
   1070 
   1071 #define WR_d    INSN_WRITE_GPR_D
   1072 #define WR_t    INSN_WRITE_GPR_T
   1073 #define WR_31   INSN_WRITE_GPR_31
   1074 #define WR_D    INSN_WRITE_FPR_D
   1075 #define WR_T	INSN_WRITE_FPR_T
   1076 #define WR_S	INSN_WRITE_FPR_S
   1077 #define RD_s    INSN_READ_GPR_S
   1078 #define RD_b    INSN_READ_GPR_S
   1079 #define RD_t    INSN_READ_GPR_T
   1080 #define RD_S    INSN_READ_FPR_S
   1081 #define RD_T    INSN_READ_FPR_T
   1082 #define RD_R	INSN_READ_FPR_R
   1083 #define WR_CC	INSN_WRITE_COND_CODE
   1084 #define RD_CC	INSN_READ_COND_CODE
   1085 #define RD_C0   INSN_COP
   1086 #define RD_C1	INSN_COP
   1087 #define RD_C2   INSN_COP
   1088 #define RD_C3   INSN_COP
   1089 #define WR_C0   INSN_COP
   1090 #define WR_C1	INSN_COP
   1091 #define WR_C2   INSN_COP
   1092 #define WR_C3   INSN_COP
   1093 
   1094 #define WR_HI	INSN_WRITE_HI
   1095 #define RD_HI	INSN_READ_HI
   1096 #define MOD_HI  WR_HI|RD_HI
   1097 
   1098 #define WR_LO	INSN_WRITE_LO
   1099 #define RD_LO	INSN_READ_LO
   1100 #define MOD_LO  WR_LO|RD_LO
   1101 
   1102 #define WR_HILO WR_HI|WR_LO
   1103 #define RD_HILO RD_HI|RD_LO
   1104 #define MOD_HILO WR_HILO|RD_HILO
   1105 
   1106 #define IS_M    INSN_MULT
   1107 
   1108 #define WR_MACC INSN2_WRITE_MDMX_ACC
   1109 #define RD_MACC INSN2_READ_MDMX_ACC
   1110 
   1111 #define I1	INSN_ISA1
   1112 #define I2	INSN_ISA2
   1113 #define I3	INSN_ISA3
   1114 #define I4	INSN_ISA4
   1115 #define I5	INSN_ISA5
   1116 #define I32	INSN_ISA32
   1117 #define I64     INSN_ISA64
   1118 #define I33	INSN_ISA32R2
   1119 #define I65	INSN_ISA64R2
   1120 
   1121 /* MIPS64 MIPS-3D ASE support.  */
   1122 #define I16     INSN_MIPS16
   1123 
   1124 /* MIPS32 SmartMIPS ASE support.  */
   1125 #define SMT	INSN_SMARTMIPS
   1126 
   1127 /* MIPS64 MIPS-3D ASE support.  */
   1128 #define M3D     INSN_MIPS3D
   1129 
   1130 /* MIPS64 MDMX ASE support.  */
   1131 #define MX      INSN_MDMX
   1132 
   1133 #define P3	INSN_4650
   1134 #define L1	INSN_4010
   1135 #define V1	(INSN_4100 | INSN_4111 | INSN_4120)
   1136 #define T3      INSN_3900
   1137 #define M1	INSN_10000
   1138 #define SB1     INSN_SB1
   1139 #define N411	INSN_4111
   1140 #define N412	INSN_4120
   1141 #define N5	(INSN_5400 | INSN_5500)
   1142 #define N54	INSN_5400
   1143 #define N55	INSN_5500
   1144 
   1145 #define G1      (T3             \
   1146                  )
   1147 
   1148 #define G2      (T3             \
   1149                  )
   1150 
   1151 #define G3      (I4             \
   1152                  )
   1153 
   1154 /* MIPS DSP ASE support.
   1155    NOTE:
   1156    1. MIPS DSP ASE includes 4 accumulators ($ac0 - $ac3).  $ac0 is the pair
   1157    of original HI and LO.  $ac1, $ac2 and $ac3 are new registers, and have
   1158    the same structure as $ac0 (HI + LO).  For DSP instructions that write or
   1159    read accumulators (that may be $ac0), we add WR_a (WR_HILO) or RD_a
   1160    (RD_HILO) attributes, such that HILO dependencies are maintained
   1161    conservatively.
   1162 
   1163    2. For some mul. instructions that use integer registers as destinations
   1164    but destroy HI+LO as side-effect, we add WR_HILO to their attributes.
   1165 
   1166    3. MIPS DSP ASE includes a new DSP control register, which has 6 fields
   1167    (ccond, outflag, EFI, c, scount, pos).  Many DSP instructions read or write
   1168    certain fields of the DSP control register.  For simplicity, we decide not
   1169    to track dependencies of these fields.
   1170    However, "bposge32" is a branch instruction that depends on the "pos"
   1171    field.  In order to make sure that GAS does not reorder DSP instructions
   1172    that writes the "pos" field and "bposge32", we add DSP_VOLA (INSN_TRAP)
   1173    attribute to those instructions that write the "pos" field.  */
   1174 
   1175 #define WR_a	WR_HILO	/* Write dsp accumulators (reuse WR_HILO)  */
   1176 #define RD_a	RD_HILO	/* Read dsp accumulators (reuse RD_HILO)  */
   1177 #define MOD_a	WR_a|RD_a
   1178 #define DSP_VOLA	INSN_TRAP
   1179 #define D32	INSN_DSP
   1180 #define D33	INSN_DSPR2
   1181 #define D64	INSN_DSP64
   1182 
   1183 /* MIPS MT ASE support.  */
   1184 #define MT32	INSN_MT
   1185 
   1186 /* The order of overloaded instructions matters.  Label arguments and
   1187    register arguments look the same. Instructions that can have either
   1188    for arguments must apear in the correct order in this table for the
   1189    assembler to pick the right one. In other words, entries with
   1190    immediate operands must apear after the same instruction with
   1191    registers.
   1192 
   1193    Because of the lookup algorithm used, entries with the same opcode
   1194    name must be contiguous.
   1195 
   1196    Many instructions are short hand for other instructions (i.e., The
   1197    jal <register> instruction is short for jalr <register>).  */
   1198 
   1199 const struct mips_opcode mips_builtin_opcodes[] =
   1200 {
   1201 /* These instructions appear first so that the disassembler will find
   1202    them first.  The assemblers uses a hash table based on the
   1203    instruction name anyhow.  */
   1204 /* name,    args,	match,	    mask,	pinfo,          	membership */
   1205 {"pref",    "k,o(b)",   0xcc000000, 0xfc000000, RD_b,           	0,		I4|I32|G3	},
   1206 {"prefx",   "h,t(b)",	0x4c00000f, 0xfc0007ff, RD_b|RD_t,		0,		I4|I33	},
   1207 {"nop",     "",         0x00000000, 0xffffffff, 0,              	INSN2_ALIAS,	I1      }, /* sll */
   1208 {"ssnop",   "",         0x00000040, 0xffffffff, 0,              	INSN2_ALIAS,	I32|N55	}, /* sll */
   1209 {"ehb",     "",         0x000000c0, 0xffffffff, 0,              	INSN2_ALIAS,	I33	}, /* sll */
   1210 {"li",      "t,j",      0x24000000, 0xffe00000, WR_t,			INSN2_ALIAS,	I1	}, /* addiu */
   1211 {"li",	    "t,i",	0x34000000, 0xffe00000, WR_t,			INSN2_ALIAS,	I1	}, /* ori */
   1212 {"li",      "t,I",	0,    (int) M_LI,	INSN_MACRO,		0,		I1	},
   1213 {"move",    "d,s",	0,    (int) M_MOVE,	INSN_MACRO,		0,		I1	},
   1214 {"move",    "d,s",	0x0000002d, 0xfc1f07ff, WR_d|RD_s,		INSN2_ALIAS,	I3	},/* daddu */
   1215 {"move",    "d,s",	0x00000021, 0xfc1f07ff, WR_d|RD_s,		INSN2_ALIAS,	I1	},/* addu */
   1216 {"move",    "d,s",	0x00000025, 0xfc1f07ff,	WR_d|RD_s,		INSN2_ALIAS,	I1	},/* or */
   1217 {"b",       "p",	0x10000000, 0xffff0000,	UBD,			INSN2_ALIAS,	I1	},/* beq 0,0 */
   1218 {"b",       "p",	0x04010000, 0xffff0000,	UBD,			INSN2_ALIAS,	I1	},/* bgez 0 */
   1219 {"bal",     "p",	0x04110000, 0xffff0000,	UBD|WR_31,		INSN2_ALIAS,	I1	},/* bgezal 0*/
   1220 
   1221 {"abs",     "d,v",	0,    (int) M_ABS,	INSN_MACRO,		0,		I1	},
   1222 {"abs.s",   "D,V",	0x46000005, 0xffff003f,	WR_D|RD_S|FP_S,		0,		I1	},
   1223 {"abs.d",   "D,V",	0x46200005, 0xffff003f,	WR_D|RD_S|FP_D,		0,		I1	},
   1224 {"abs.ps",  "D,V",	0x46c00005, 0xffff003f,	WR_D|RD_S|FP_D,		0,		I5|I33	},
   1225 {"add",     "d,v,t",	0x00000020, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   1226 {"add",     "t,r,I",	0,    (int) M_ADD_I,	INSN_MACRO,		0,		I1	},
   1227 {"add.s",   "D,V,T",	0x46000000, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		I1	},
   1228 {"add.d",   "D,V,T",	0x46200000, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I1	},
   1229 {"add.ob",  "X,Y,Q",	0x7800000b, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1230 {"add.ob",  "D,S,T",	0x4ac0000b, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1231 {"add.ob",  "D,S,T[e]",	0x4800000b, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1232 {"add.ob",  "D,S,k",	0x4bc0000b, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1233 {"add.ps",  "D,V,T",	0x46c00000, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5|I33	},
   1234 {"add.qh",  "X,Y,Q",	0x7820000b, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   1235 {"adda.ob", "Y,Q",	0x78000037, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX|SB1	},
   1236 {"adda.qh", "Y,Q",	0x78200037, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   1237 {"addi",    "t,r,j",	0x20000000, 0xfc000000,	WR_t|RD_s,		0,		I1	},
   1238 {"addiu",   "t,r,j",	0x24000000, 0xfc000000,	WR_t|RD_s,		0,		I1	},
   1239 {"addl.ob", "Y,Q",	0x78000437, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX|SB1	},
   1240 {"addl.qh", "Y,Q",	0x78200437, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   1241 {"addr.ps", "D,S,T",	0x46c00018, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		M3D	},
   1242 {"addu",    "d,v,t",	0x00000021, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   1243 {"addu",    "t,r,I",	0,    (int) M_ADDU_I,	INSN_MACRO,		0,		I1	},
   1244 {"alni.ob", "X,Y,Z,O",	0x78000018, 0xff00003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1245 {"alni.ob", "D,S,T,%",	0x48000018, 0xff00003f,	WR_D|RD_S|RD_T, 	0,		N54	},
   1246 {"alni.qh", "X,Y,Z,O",	0x7800001a, 0xff00003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   1247 {"alnv.ps", "D,V,T,s",	0x4c00001e, 0xfc00003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5|I33	},
   1248 {"alnv.ob", "X,Y,Z,s",	0x78000019, 0xfc00003f,	WR_D|RD_S|RD_T|RD_s|FP_D, 0,		MX|SB1	},
   1249 {"alnv.qh", "X,Y,Z,s",	0x7800001b, 0xfc00003f,	WR_D|RD_S|RD_T|RD_s|FP_D, 0,		MX	},
   1250 {"and",     "d,v,t",	0x00000024, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   1251 {"and",     "t,r,I",	0,    (int) M_AND_I,	INSN_MACRO,		0,		I1	},
   1252 {"and.ob",  "X,Y,Q",	0x7800000c, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1253 {"and.ob",  "D,S,T",	0x4ac0000c, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1254 {"and.ob",  "D,S,T[e]",	0x4800000c, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1255 {"and.ob",  "D,S,k",	0x4bc0000c, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1256 {"and.qh",  "X,Y,Q",	0x7820000c, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   1257 {"andi",    "t,r,i",	0x30000000, 0xfc000000,	WR_t|RD_s,		0,		I1	},
   1258 /* b is at the top of the table.  */
   1259 /* bal is at the top of the table.  */
   1260 /* bc0[tf]l? are at the bottom of the table.  */
   1261 {"bc1any2f", "N,p",	0x45200000, 0xffe30000,	CBD|RD_CC|FP_S,		0,		M3D	},
   1262 {"bc1any2t", "N,p",	0x45210000, 0xffe30000,	CBD|RD_CC|FP_S,		0,		M3D	},
   1263 {"bc1any4f", "N,p",	0x45400000, 0xffe30000,	CBD|RD_CC|FP_S,		0,		M3D	},
   1264 {"bc1any4t", "N,p",	0x45410000, 0xffe30000,	CBD|RD_CC|FP_S,		0,		M3D	},
   1265 {"bc1f",    "p",	0x45000000, 0xffff0000,	CBD|RD_CC|FP_S,		0,		I1	},
   1266 {"bc1f",    "N,p",      0x45000000, 0xffe30000, CBD|RD_CC|FP_S, 	0,		I4|I32	},
   1267 {"bc1fl",   "p",	0x45020000, 0xffff0000,	CBL|RD_CC|FP_S,		0,		I2|T3	},
   1268 {"bc1fl",   "N,p",      0x45020000, 0xffe30000, CBL|RD_CC|FP_S, 	0,		I4|I32	},
   1269 {"bc1t",    "p",	0x45010000, 0xffff0000,	CBD|RD_CC|FP_S,		0,		I1	},
   1270 {"bc1t",    "N,p",      0x45010000, 0xffe30000, CBD|RD_CC|FP_S, 	0,		I4|I32	},
   1271 {"bc1tl",   "p",	0x45030000, 0xffff0000,	CBL|RD_CC|FP_S,		0,		I2|T3	},
   1272 {"bc1tl",   "N,p",      0x45030000, 0xffe30000, CBL|RD_CC|FP_S, 	0,		I4|I32	},
   1273 /* bc2* are at the bottom of the table.  */
   1274 /* bc3* are at the bottom of the table.  */
   1275 {"beqz",    "s,p",	0x10000000, 0xfc1f0000,	CBD|RD_s,		0,		I1	},
   1276 {"beqzl",   "s,p",	0x50000000, 0xfc1f0000,	CBL|RD_s,		0,		I2|T3	},
   1277 {"beq",     "s,t,p",	0x10000000, 0xfc000000,	CBD|RD_s|RD_t,		0,		I1	},
   1278 {"beq",     "s,I,p",	0,    (int) M_BEQ_I,	INSN_MACRO,		0,		I1	},
   1279 {"beql",    "s,t,p",	0x50000000, 0xfc000000,	CBL|RD_s|RD_t,		0,		I2|T3	},
   1280 {"beql",    "s,I,p",	0,    (int) M_BEQL_I,	INSN_MACRO,		0,		I2|T3	},
   1281 {"bge",     "s,t,p",	0,    (int) M_BGE,	INSN_MACRO,		0,		I1	},
   1282 {"bge",     "s,I,p",	0,    (int) M_BGE_I,	INSN_MACRO,		0,		I1	},
   1283 {"bgel",    "s,t,p",	0,    (int) M_BGEL,	INSN_MACRO,		0,		I2|T3	},
   1284 {"bgel",    "s,I,p",	0,    (int) M_BGEL_I,	INSN_MACRO,		0,		I2|T3	},
   1285 {"bgeu",    "s,t,p",	0,    (int) M_BGEU,	INSN_MACRO,		0,		I1	},
   1286 {"bgeu",    "s,I,p",	0,    (int) M_BGEU_I,	INSN_MACRO,		0,		I1	},
   1287 {"bgeul",   "s,t,p",	0,    (int) M_BGEUL,	INSN_MACRO,		0,		I2|T3	},
   1288 {"bgeul",   "s,I,p",	0,    (int) M_BGEUL_I,	INSN_MACRO,		0,		I2|T3	},
   1289 {"bgez",    "s,p",	0x04010000, 0xfc1f0000,	CBD|RD_s,		0,		I1	},
   1290 {"bgezl",   "s,p",	0x04030000, 0xfc1f0000,	CBL|RD_s,		0,		I2|T3	},
   1291 {"bgezal",  "s,p",	0x04110000, 0xfc1f0000,	CBD|RD_s|WR_31,		0,		I1	},
   1292 {"bgezall", "s,p",	0x04130000, 0xfc1f0000,	CBL|RD_s|WR_31,		0,		I2|T3	},
   1293 {"bgt",     "s,t,p",	0,    (int) M_BGT,	INSN_MACRO,		0,		I1	},
   1294 {"bgt",     "s,I,p",	0,    (int) M_BGT_I,	INSN_MACRO,		0,		I1	},
   1295 {"bgtl",    "s,t,p",	0,    (int) M_BGTL,	INSN_MACRO,		0,		I2|T3	},
   1296 {"bgtl",    "s,I,p",	0,    (int) M_BGTL_I,	INSN_MACRO,		0,		I2|T3	},
   1297 {"bgtu",    "s,t,p",	0,    (int) M_BGTU,	INSN_MACRO,		0,		I1	},
   1298 {"bgtu",    "s,I,p",	0,    (int) M_BGTU_I,	INSN_MACRO,		0,		I1	},
   1299 {"bgtul",   "s,t,p",	0,    (int) M_BGTUL,	INSN_MACRO,		0,		I2|T3	},
   1300 {"bgtul",   "s,I,p",	0,    (int) M_BGTUL_I,	INSN_MACRO,		0,		I2|T3	},
   1301 {"bgtz",    "s,p",	0x1c000000, 0xfc1f0000,	CBD|RD_s,		0,		I1	},
   1302 {"bgtzl",   "s,p",	0x5c000000, 0xfc1f0000,	CBL|RD_s,		0,		I2|T3	},
   1303 {"ble",     "s,t,p",	0,    (int) M_BLE,	INSN_MACRO,		0,		I1	},
   1304 {"ble",     "s,I,p",	0,    (int) M_BLE_I,	INSN_MACRO,		0,		I1	},
   1305 {"blel",    "s,t,p",	0,    (int) M_BLEL,	INSN_MACRO,		0,		I2|T3	},
   1306 {"blel",    "s,I,p",	0,    (int) M_BLEL_I,	INSN_MACRO,		0,		I2|T3	},
   1307 {"bleu",    "s,t,p",	0,    (int) M_BLEU,	INSN_MACRO,		0,		I1	},
   1308 {"bleu",    "s,I,p",	0,    (int) M_BLEU_I,	INSN_MACRO,		0,		I1	},
   1309 {"bleul",   "s,t,p",	0,    (int) M_BLEUL,	INSN_MACRO,		0,		I2|T3	},
   1310 {"bleul",   "s,I,p",	0,    (int) M_BLEUL_I,	INSN_MACRO,		0,		I2|T3	},
   1311 {"blez",    "s,p",	0x18000000, 0xfc1f0000,	CBD|RD_s,		0,		I1	},
   1312 {"blezl",   "s,p",	0x58000000, 0xfc1f0000,	CBL|RD_s,		0,		I2|T3	},
   1313 {"blt",     "s,t,p",	0,    (int) M_BLT,	INSN_MACRO,		0,		I1	},
   1314 {"blt",     "s,I,p",	0,    (int) M_BLT_I,	INSN_MACRO,		0,		I1	},
   1315 {"bltl",    "s,t,p",	0,    (int) M_BLTL,	INSN_MACRO,		0,		I2|T3	},
   1316 {"bltl",    "s,I,p",	0,    (int) M_BLTL_I,	INSN_MACRO,		0,		I2|T3	},
   1317 {"bltu",    "s,t,p",	0,    (int) M_BLTU,	INSN_MACRO,		0,		I1	},
   1318 {"bltu",    "s,I,p",	0,    (int) M_BLTU_I,	INSN_MACRO,		0,		I1	},
   1319 {"bltul",   "s,t,p",	0,    (int) M_BLTUL,	INSN_MACRO,		0,		I2|T3	},
   1320 {"bltul",   "s,I,p",	0,    (int) M_BLTUL_I,	INSN_MACRO,		0,		I2|T3	},
   1321 {"bltz",    "s,p",	0x04000000, 0xfc1f0000,	CBD|RD_s,		0,		I1	},
   1322 {"bltzl",   "s,p",	0x04020000, 0xfc1f0000,	CBL|RD_s,		0,		I2|T3	},
   1323 {"bltzal",  "s,p",	0x04100000, 0xfc1f0000,	CBD|RD_s|WR_31,		0,		I1	},
   1324 {"bltzall", "s,p",	0x04120000, 0xfc1f0000,	CBL|RD_s|WR_31,		0,		I2|T3	},
   1325 {"bnez",    "s,p",	0x14000000, 0xfc1f0000,	CBD|RD_s,		0,		I1	},
   1326 {"bnezl",   "s,p",	0x54000000, 0xfc1f0000,	CBL|RD_s,		0,		I2|T3	},
   1327 {"bne",     "s,t,p",	0x14000000, 0xfc000000,	CBD|RD_s|RD_t,		0,		I1	},
   1328 {"bne",     "s,I,p",	0,    (int) M_BNE_I,	INSN_MACRO,		0,		I1	},
   1329 {"bnel",    "s,t,p",	0x54000000, 0xfc000000,	CBL|RD_s|RD_t, 		0,		I2|T3	},
   1330 {"bnel",    "s,I,p",	0,    (int) M_BNEL_I,	INSN_MACRO,		0,		I2|T3	},
   1331 {"break",   "",		0x0000000d, 0xffffffff,	TRAP,			0,		I1	},
   1332 {"break",   "c",	0x0000000d, 0xfc00ffff,	TRAP,			0,		I1	},
   1333 {"break",   "c,q",	0x0000000d, 0xfc00003f,	TRAP,			0,		I1	},
   1334 {"c.f.d",   "S,T",	0x46200030, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1335 {"c.f.d",   "M,S,T",    0x46200030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1336 {"c.f.s",   "S,T",      0x46000030, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1337 {"c.f.s",   "M,S,T",    0x46000030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1338 {"c.f.ps",  "S,T",	0x46c00030, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1339 {"c.f.ps",  "M,S,T",	0x46c00030, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1340 {"c.un.d",  "S,T",	0x46200031, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1341 {"c.un.d",  "M,S,T",    0x46200031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1342 {"c.un.s",  "S,T",      0x46000031, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1343 {"c.un.s",  "M,S,T",    0x46000031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1344 {"c.un.ps", "S,T",	0x46c00031, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1345 {"c.un.ps", "M,S,T",	0x46c00031, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1346 {"c.eq.d",  "S,T",	0x46200032, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1347 {"c.eq.d",  "M,S,T",    0x46200032, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1348 {"c.eq.s",  "S,T",      0x46000032, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1349 {"c.eq.s",  "M,S,T",    0x46000032, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1350 {"c.eq.ob", "Y,Q",	0x78000001, 0xfc2007ff,	WR_CC|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1351 {"c.eq.ob", "S,T",	0x4ac00001, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1352 {"c.eq.ob", "S,T[e]",	0x48000001, 0xfe2007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1353 {"c.eq.ob", "S,k",	0x4bc00001, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1354 {"c.eq.ps", "S,T",	0x46c00032, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1355 {"c.eq.ps", "M,S,T",	0x46c00032, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1356 {"c.eq.qh", "Y,Q",	0x78200001, 0xfc2007ff,	WR_CC|RD_S|RD_T|FP_D,	0,		MX	},
   1357 {"c.ueq.d", "S,T",	0x46200033, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1358 {"c.ueq.d", "M,S,T",    0x46200033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1359 {"c.ueq.s", "S,T",      0x46000033, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1360 {"c.ueq.s", "M,S,T",    0x46000033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1361 {"c.ueq.ps","S,T",	0x46c00033, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1362 {"c.ueq.ps","M,S,T",	0x46c00033, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1363 {"c.olt.d", "S,T",      0x46200034, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D,   0,		I1      },
   1364 {"c.olt.d", "M,S,T",    0x46200034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1365 {"c.olt.s", "S,T",	0x46000034, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_S,	0,		I1	},
   1366 {"c.olt.s", "M,S,T",    0x46000034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1367 {"c.olt.ps","S,T",	0x46c00034, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1368 {"c.olt.ps","M,S,T",	0x46c00034, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1369 {"c.ult.d", "S,T",	0x46200035, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1370 {"c.ult.d", "M,S,T",    0x46200035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1371 {"c.ult.s", "S,T",      0x46000035, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1372 {"c.ult.s", "M,S,T",    0x46000035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1373 {"c.ult.ps","S,T",	0x46c00035, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1374 {"c.ult.ps","M,S,T",	0x46c00035, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1375 {"c.ole.d", "S,T",      0x46200036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D,   0,		I1      },
   1376 {"c.ole.d", "M,S,T",    0x46200036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1377 {"c.ole.s", "S,T",      0x46000036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1378 {"c.ole.s", "M,S,T",    0x46000036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1379 {"c.ole.ps","S,T",	0x46c00036, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1380 {"c.ole.ps","M,S,T",	0x46c00036, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1381 {"c.ule.d", "S,T",	0x46200037, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1382 {"c.ule.d", "M,S,T",    0x46200037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1383 {"c.ule.s", "S,T",      0x46000037, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1384 {"c.ule.s", "M,S,T",    0x46000037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1385 {"c.ule.ps","S,T",	0x46c00037, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1386 {"c.ule.ps","M,S,T",	0x46c00037, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1387 {"c.sf.d",  "S,T",	0x46200038, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1388 {"c.sf.d",  "M,S,T",    0x46200038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1389 {"c.sf.s",  "S,T",      0x46000038, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1390 {"c.sf.s",  "M,S,T",    0x46000038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1391 {"c.sf.ps", "S,T",	0x46c00038, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1392 {"c.sf.ps", "M,S,T",	0x46c00038, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1393 {"c.ngle.d","S,T",	0x46200039, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1394 {"c.ngle.d","M,S,T",    0x46200039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1395 {"c.ngle.s","S,T",      0x46000039, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1396 {"c.ngle.s","M,S,T",    0x46000039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1397 {"c.ngle.ps","S,T",	0x46c00039, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1398 {"c.ngle.ps","M,S,T",	0x46c00039, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1399 {"c.seq.d", "S,T",	0x4620003a, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1400 {"c.seq.d", "M,S,T",    0x4620003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1401 {"c.seq.s", "S,T",      0x4600003a, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1402 {"c.seq.s", "M,S,T",    0x4600003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1403 {"c.seq.ps","S,T",	0x46c0003a, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1404 {"c.seq.ps","M,S,T",	0x46c0003a, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1405 {"c.ngl.d", "S,T",	0x4620003b, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1406 {"c.ngl.d", "M,S,T",    0x4620003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1407 {"c.ngl.s", "S,T",      0x4600003b, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1408 {"c.ngl.s", "M,S,T",    0x4600003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1409 {"c.ngl.ps","S,T",	0x46c0003b, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1410 {"c.ngl.ps","M,S,T",	0x46c0003b, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1411 {"c.lt.d",  "S,T",	0x4620003c, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1412 {"c.lt.d",  "M,S,T",    0x4620003c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1413 {"c.lt.s",  "S,T",	0x4600003c, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_S,	0,		I1	},
   1414 {"c.lt.s",  "M,S,T",    0x4600003c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1415 {"c.lt.ob", "Y,Q",	0x78000004, 0xfc2007ff,	WR_CC|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1416 {"c.lt.ob", "S,T",	0x4ac00004, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1417 {"c.lt.ob", "S,T[e]",	0x48000004, 0xfe2007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1418 {"c.lt.ob", "S,k",	0x4bc00004, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1419 {"c.lt.ps", "S,T",	0x46c0003c, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1420 {"c.lt.ps", "M,S,T",	0x46c0003c, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1421 {"c.lt.qh", "Y,Q",	0x78200004, 0xfc2007ff,	WR_CC|RD_S|RD_T|FP_D,	0,		MX	},
   1422 {"c.nge.d", "S,T",	0x4620003d, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1423 {"c.nge.d", "M,S,T",    0x4620003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1424 {"c.nge.s", "S,T",      0x4600003d, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1425 {"c.nge.s", "M,S,T",    0x4600003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1426 {"c.nge.ps","S,T",	0x46c0003d, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1427 {"c.nge.ps","M,S,T",	0x46c0003d, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1428 {"c.le.d",  "S,T",	0x4620003e, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1429 {"c.le.d",  "M,S,T",    0x4620003e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1430 {"c.le.s",  "S,T",	0x4600003e, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_S,	0,		I1	},
   1431 {"c.le.s",  "M,S,T",    0x4600003e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1432 {"c.le.ob", "Y,Q",	0x78000005, 0xfc2007ff,	WR_CC|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1433 {"c.le.ob", "S,T",	0x4ac00005, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1434 {"c.le.ob", "S,T[e]",	0x48000005, 0xfe2007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1435 {"c.le.ob", "S,k",	0x4bc00005, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1436 {"c.le.ps", "S,T",	0x46c0003e, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1437 {"c.le.ps", "M,S,T",	0x46c0003e, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1438 {"c.le.qh", "Y,Q",	0x78200005, 0xfc2007ff,	WR_CC|RD_S|RD_T|FP_D,	0,		MX	},
   1439 {"c.ngt.d", "S,T",	0x4620003f, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I1	},
   1440 {"c.ngt.d", "M,S,T",    0x4620003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D,   0,		I4|I32	},
   1441 {"c.ngt.s", "S,T",      0x4600003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S,   0,		I1      },
   1442 {"c.ngt.s", "M,S,T",    0x4600003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S,   0,		I4|I32	},
   1443 {"c.ngt.ps","S,T",	0x46c0003f, 0xffe007ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1444 {"c.ngt.ps","M,S,T",	0x46c0003f, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		I5|I33	},
   1445 {"cabs.eq.d",  "M,S,T",	0x46200072, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1446 {"cabs.eq.ps", "M,S,T",	0x46c00072, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1447 {"cabs.eq.s",  "M,S,T",	0x46000072, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1448 {"cabs.f.d",   "M,S,T",	0x46200070, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1449 {"cabs.f.ps",  "M,S,T",	0x46c00070, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1450 {"cabs.f.s",   "M,S,T",	0x46000070, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1451 {"cabs.le.d",  "M,S,T",	0x4620007e, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1452 {"cabs.le.ps", "M,S,T",	0x46c0007e, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1453 {"cabs.le.s",  "M,S,T",	0x4600007e, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1454 {"cabs.lt.d",  "M,S,T",	0x4620007c, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1455 {"cabs.lt.ps", "M,S,T",	0x46c0007c, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1456 {"cabs.lt.s",  "M,S,T",	0x4600007c, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1457 {"cabs.nge.d", "M,S,T",	0x4620007d, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1458 {"cabs.nge.ps","M,S,T",	0x46c0007d, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1459 {"cabs.nge.s", "M,S,T",	0x4600007d, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1460 {"cabs.ngl.d", "M,S,T",	0x4620007b, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1461 {"cabs.ngl.ps","M,S,T",	0x46c0007b, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1462 {"cabs.ngl.s", "M,S,T",	0x4600007b, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1463 {"cabs.ngle.d","M,S,T",	0x46200079, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1464 {"cabs.ngle.ps","M,S,T",0x46c00079, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1465 {"cabs.ngle.s","M,S,T",	0x46000079, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1466 {"cabs.ngt.d", "M,S,T",	0x4620007f, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1467 {"cabs.ngt.ps","M,S,T",	0x46c0007f, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1468 {"cabs.ngt.s", "M,S,T",	0x4600007f, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1469 {"cabs.ole.d", "M,S,T",	0x46200076, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1470 {"cabs.ole.ps","M,S,T",	0x46c00076, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1471 {"cabs.ole.s", "M,S,T",	0x46000076, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1472 {"cabs.olt.d", "M,S,T",	0x46200074, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1473 {"cabs.olt.ps","M,S,T",	0x46c00074, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1474 {"cabs.olt.s", "M,S,T",	0x46000074, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1475 {"cabs.seq.d", "M,S,T",	0x4620007a, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1476 {"cabs.seq.ps","M,S,T",	0x46c0007a, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1477 {"cabs.seq.s", "M,S,T",	0x4600007a, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1478 {"cabs.sf.d",  "M,S,T",	0x46200078, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1479 {"cabs.sf.ps", "M,S,T",	0x46c00078, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1480 {"cabs.sf.s",  "M,S,T",	0x46000078, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1481 {"cabs.ueq.d", "M,S,T",	0x46200073, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1482 {"cabs.ueq.ps","M,S,T",	0x46c00073, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1483 {"cabs.ueq.s", "M,S,T",	0x46000073, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1484 {"cabs.ule.d", "M,S,T",	0x46200077, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1485 {"cabs.ule.ps","M,S,T",	0x46c00077, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1486 {"cabs.ule.s", "M,S,T",	0x46000077, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1487 {"cabs.ult.d", "M,S,T",	0x46200075, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1488 {"cabs.ult.ps","M,S,T",	0x46c00075, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1489 {"cabs.ult.s", "M,S,T",	0x46000075, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1490 {"cabs.un.d",  "M,S,T",	0x46200071, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1491 {"cabs.un.ps", "M,S,T",	0x46c00071, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_D,	0,		M3D	},
   1492 {"cabs.un.s",  "M,S,T",	0x46000071, 0xffe000ff,	RD_S|RD_T|WR_CC|FP_S,	0,		M3D	},
   1493 /* CW4010 instructions which are aliases for the cache instruction.  */
   1494 {"flushi",  "",		0xbc010000, 0xffffffff, 0,			0,		L1	},
   1495 {"flushd",  "",		0xbc020000, 0xffffffff, 0, 			0,		L1	},
   1496 {"flushid", "",		0xbc030000, 0xffffffff, 0, 			0,		L1	},
   1497 {"wb", 	    "o(b)",	0xbc040000, 0xfc1f0000, SM|RD_b,		0,		L1	},
   1498 {"cache",   "k,o(b)",   0xbc000000, 0xfc000000, RD_b,           	0,		I3|I32|T3},
   1499 {"cache",   "k,A(b)",	0,    (int) M_CACHE_AB, INSN_MACRO,		0,		I3|I32|T3},
   1500 {"ceil.l.d", "D,S",	0x4620000a, 0xffff003f, WR_D|RD_S|FP_D,		0,		I3|I33	},
   1501 {"ceil.l.s", "D,S",	0x4600000a, 0xffff003f, WR_D|RD_S|FP_S|FP_D,	0,		I3|I33	},
   1502 {"ceil.w.d", "D,S",	0x4620000e, 0xffff003f, WR_D|RD_S|FP_S|FP_D,	0,		I2	},
   1503 {"ceil.w.s", "D,S",	0x4600000e, 0xffff003f, WR_D|RD_S|FP_S,		0,		I2	},
   1504 {"cfc0",    "t,G",	0x40400000, 0xffe007ff,	LCD|WR_t|RD_C0,		0,		I1	},
   1505 {"cfc1",    "t,G",	0x44400000, 0xffe007ff,	LCD|WR_t|RD_C1|FP_S,	0,		I1	},
   1506 {"cfc1",    "t,S",	0x44400000, 0xffe007ff,	LCD|WR_t|RD_C1|FP_S,	0,		I1	},
   1507 /* cfc2 is at the bottom of the table.  */
   1508 /* cfc3 is at the bottom of the table.  */
   1509 {"cftc1",   "d,E",	0x41000023, 0xffe007ff, TRAP|LCD|WR_d|RD_C1|FP_S, 0,		MT32	},
   1510 {"cftc1",   "d,T",	0x41000023, 0xffe007ff, TRAP|LCD|WR_d|RD_C1|FP_S, 0,		MT32	},
   1511 {"cftc2",   "d,E",	0x41000025, 0xffe007ff, TRAP|LCD|WR_d|RD_C2,	0,		MT32	},
   1512 {"clo",     "U,s",      0x70000021, 0xfc0007ff, WR_d|WR_t|RD_s, 	0,		I32|N55 },
   1513 {"clz",     "U,s",      0x70000020, 0xfc0007ff, WR_d|WR_t|RD_s, 	0,		I32|N55 },
   1514 {"ctc0",    "t,G",	0x40c00000, 0xffe007ff,	COD|RD_t|WR_CC,		0,		I1	},
   1515 {"ctc1",    "t,G",	0x44c00000, 0xffe007ff,	COD|RD_t|WR_CC|FP_S,	0,		I1	},
   1516 {"ctc1",    "t,S",	0x44c00000, 0xffe007ff,	COD|RD_t|WR_CC|FP_S,	0,		I1	},
   1517 /* ctc2 is at the bottom of the table.  */
   1518 /* ctc3 is at the bottom of the table.  */
   1519 {"cttc1",   "t,g",	0x41800023, 0xffe007ff, TRAP|COD|RD_t|WR_CC|FP_S, 0,		MT32	},
   1520 {"cttc1",   "t,S",	0x41800023, 0xffe007ff, TRAP|COD|RD_t|WR_CC|FP_S, 0,		MT32	},
   1521 {"cttc2",   "t,g",	0x41800025, 0xffe007ff, TRAP|COD|RD_t|WR_CC,	0,		MT32	},
   1522 {"cvt.d.l", "D,S",	0x46a00021, 0xffff003f,	WR_D|RD_S|FP_D,		0,		I3|I33	},
   1523 {"cvt.d.s", "D,S",	0x46000021, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I1	},
   1524 {"cvt.d.w", "D,S",	0x46800021, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I1	},
   1525 {"cvt.l.d", "D,S",	0x46200025, 0xffff003f,	WR_D|RD_S|FP_D,		0,		I3|I33	},
   1526 {"cvt.l.s", "D,S",	0x46000025, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I3|I33	},
   1527 {"cvt.s.l", "D,S",	0x46a00020, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I3|I33	},
   1528 {"cvt.s.d", "D,S",	0x46200020, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I1	},
   1529 {"cvt.s.w", "D,S",	0x46800020, 0xffff003f,	WR_D|RD_S|FP_S,		0,		I1	},
   1530 {"cvt.s.pl","D,S",	0x46c00028, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I5|I33	},
   1531 {"cvt.s.pu","D,S",	0x46c00020, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I5|I33	},
   1532 {"cvt.w.d", "D,S",	0x46200024, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I1	},
   1533 {"cvt.w.s", "D,S",	0x46000024, 0xffff003f,	WR_D|RD_S|FP_S,		0,		I1	},
   1534 {"cvt.ps.pw", "D,S",	0x46800026, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		M3D	},
   1535 {"cvt.ps.s","D,V,T",	0x46000026, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S|FP_D, 0,		I5|I33	},
   1536 {"cvt.pw.ps", "D,S",	0x46c00024, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		M3D	},
   1537 {"dabs",    "d,v",	0,    (int) M_DABS,	INSN_MACRO,		0,		I3	},
   1538 {"dadd",    "d,v,t",	0x0000002c, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		I3	},
   1539 {"dadd",    "t,r,I",	0,    (int) M_DADD_I,	INSN_MACRO,		0,		I3	},
   1540 {"daddi",   "t,r,j",	0x60000000, 0xfc000000, WR_t|RD_s,		0,		I3	},
   1541 {"daddiu",  "t,r,j",	0x64000000, 0xfc000000, WR_t|RD_s,		0,		I3	},
   1542 {"daddu",   "d,v,t",	0x0000002d, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		I3	},
   1543 {"daddu",   "t,r,I",	0,    (int) M_DADDU_I,	INSN_MACRO,		0,		I3	},
   1544 {"dbreak",  "",		0x7000003f, 0xffffffff,	0,			0,		N5	},
   1545 {"dclo",    "U,s",      0x70000025, 0xfc0007ff, RD_s|WR_d|WR_t, 	0,		I64|N55 },
   1546 {"dclz",    "U,s",      0x70000024, 0xfc0007ff, RD_s|WR_d|WR_t, 	0,		I64|N55 },
   1547 /* dctr and dctw are used on the r5000.  */
   1548 {"dctr",    "o(b)",	0xbc050000, 0xfc1f0000, RD_b,			0,		I3	},
   1549 {"dctw",    "o(b)",	0xbc090000, 0xfc1f0000, RD_b,			0,		I3	},
   1550 {"deret",   "",         0x4200001f, 0xffffffff, 0, 			0,		I32|G2	},
   1551 {"dext",    "t,r,I,+I",	0,    (int) M_DEXT,	INSN_MACRO,		0,		I65	},
   1552 {"dext",    "t,r,+A,+C", 0x7c000003, 0xfc00003f, WR_t|RD_s,    		0,		I65	},
   1553 {"dextm",   "t,r,+A,+G", 0x7c000001, 0xfc00003f, WR_t|RD_s,    		0,		I65	},
   1554 {"dextu",   "t,r,+E,+H", 0x7c000002, 0xfc00003f, WR_t|RD_s,    		0,		I65	},
   1555 /* For ddiv, see the comments about div.  */
   1556 {"ddiv",    "z,s,t",    0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I3      },
   1557 {"ddiv",    "d,v,t",	0,    (int) M_DDIV_3,	INSN_MACRO,		0,		I3	},
   1558 {"ddiv",    "d,v,I",	0,    (int) M_DDIV_3I,	INSN_MACRO,		0,		I3	},
   1559 /* For ddivu, see the comments about div.  */
   1560 {"ddivu",   "z,s,t",    0x0000001f, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I3      },
   1561 {"ddivu",   "d,v,t",	0,    (int) M_DDIVU_3,	INSN_MACRO,		0,		I3	},
   1562 {"ddivu",   "d,v,I",	0,    (int) M_DDIVU_3I,	INSN_MACRO,		0,		I3	},
   1563 {"di",      "",		0x41606000, 0xffffffff,	WR_t|WR_C0,		0,		I33	},
   1564 {"di",      "t",	0x41606000, 0xffe0ffff,	WR_t|WR_C0,		0,		I33	},
   1565 {"dins",    "t,r,I,+I",	0,    (int) M_DINS,	INSN_MACRO,		0,		I65	},
   1566 {"dins",    "t,r,+A,+B", 0x7c000007, 0xfc00003f, WR_t|RD_s,    		0,		I65	},
   1567 {"dinsm",   "t,r,+A,+F", 0x7c000005, 0xfc00003f, WR_t|RD_s,    		0,		I65	},
   1568 {"dinsu",   "t,r,+E,+F", 0x7c000006, 0xfc00003f, WR_t|RD_s,    		0,		I65	},
   1569 /* The MIPS assembler treats the div opcode with two operands as
   1570    though the first operand appeared twice (the first operand is both
   1571    a source and a destination).  To get the div machine instruction,
   1572    you must use an explicit destination of $0.  */
   1573 {"div",     "z,s,t",    0x0000001a, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I1      },
   1574 {"div",     "z,t",      0x0000001a, 0xffe0ffff, RD_s|RD_t|WR_HILO,      0,		I1      },
   1575 {"div",     "d,v,t",	0,    (int) M_DIV_3,	INSN_MACRO,		0,		I1	},
   1576 {"div",     "d,v,I",	0,    (int) M_DIV_3I,	INSN_MACRO,		0,		I1	},
   1577 {"div.d",   "D,V,T",	0x46200003, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I1	},
   1578 {"div.s",   "D,V,T",	0x46000003, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		I1	},
   1579 {"div.ps",  "D,V,T",	0x46c00003, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		SB1	},
   1580 /* For divu, see the comments about div.  */
   1581 {"divu",    "z,s,t",    0x0000001b, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I1      },
   1582 {"divu",    "z,t",      0x0000001b, 0xffe0ffff, RD_s|RD_t|WR_HILO,      0,		I1      },
   1583 {"divu",    "d,v,t",	0,    (int) M_DIVU_3,	INSN_MACRO,		0,		I1	},
   1584 {"divu",    "d,v,I",	0,    (int) M_DIVU_3I,	INSN_MACRO,		0,		I1	},
   1585 {"dla",     "t,A(b)",	0,    (int) M_DLA_AB,	INSN_MACRO,		0,		I3	},
   1586 {"dlca",    "t,A(b)",	0,    (int) M_DLCA_AB,	INSN_MACRO,		0,		I3	},
   1587 {"dli",     "t,j",      0x24000000, 0xffe00000, WR_t,			0,		I3	}, /* addiu */
   1588 {"dli",	    "t,i",	0x34000000, 0xffe00000, WR_t,			0,		I3	}, /* ori */
   1589 {"dli",     "t,I",	0,    (int) M_DLI,	INSN_MACRO,		0,		I3	},
   1590 {"dmacc",   "d,s,t",	0x00000029, 0xfc0007ff,	RD_s|RD_t|WR_LO|WR_d,	0,		N412	},
   1591 {"dmacchi", "d,s,t",	0x00000229, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d,	0,		N412	},
   1592 {"dmacchis", "d,s,t",	0x00000629, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d,	0,		N412	},
   1593 {"dmacchiu", "d,s,t",	0x00000269, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d,	0,		N412	},
   1594 {"dmacchius", "d,s,t",	0x00000669, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d,	0,		N412	},
   1595 {"dmaccs",  "d,s,t",	0x00000429, 0xfc0007ff,	RD_s|RD_t|WR_LO|WR_d,	0,		N412	},
   1596 {"dmaccu",  "d,s,t",	0x00000069, 0xfc0007ff,	RD_s|RD_t|WR_LO|WR_d,	0,		N412	},
   1597 {"dmaccus", "d,s,t",	0x00000469, 0xfc0007ff,	RD_s|RD_t|WR_LO|WR_d,	0,		N412	},
   1598 {"dmadd16", "s,t",      0x00000029, 0xfc00ffff, RD_s|RD_t|MOD_LO,       0,		N411    },
   1599 {"dmfc0",   "t,G",	0x40200000, 0xffe007ff, LCD|WR_t|RD_C0,		0,		I3	},
   1600 {"dmfc0",   "t,+D",     0x40200000, 0xffe007f8, LCD|WR_t|RD_C0, 	0,		I64     },
   1601 {"dmfc0",   "t,G,H",    0x40200000, 0xffe007f8, LCD|WR_t|RD_C0, 	0,		I64     },
   1602 {"dmt",     "",		0x41600bc1, 0xffffffff, TRAP,			0,		MT32	},
   1603 {"dmt",     "t",	0x41600bc1, 0xffe0ffff, TRAP|WR_t,		0,		MT32	},
   1604 {"dmtc0",   "t,G",	0x40a00000, 0xffe007ff, COD|RD_t|WR_C0|WR_CC,	0,		I3	},
   1605 {"dmtc0",   "t,+D",     0x40a00000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC,   0,		I64     },
   1606 {"dmtc0",   "t,G,H",    0x40a00000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC,   0,		I64     },
   1607 {"dmfc1",   "t,S",	0x44200000, 0xffe007ff, LCD|WR_t|RD_S|FP_D,	0,		I3	},
   1608 {"dmfc1",   "t,G",      0x44200000, 0xffe007ff, LCD|WR_t|RD_S|FP_D,     0,		I3      },
   1609 {"dmtc1",   "t,S",	0x44a00000, 0xffe007ff, COD|RD_t|WR_S|FP_D,	0,		I3	},
   1610 {"dmtc1",   "t,G",      0x44a00000, 0xffe007ff, COD|RD_t|WR_S|FP_D,     0,		I3      },
   1611 /* dmfc2 is at the bottom of the table.  */
   1612 /* dmtc2 is at the bottom of the table.  */
   1613 /* dmfc3 is at the bottom of the table.  */
   1614 /* dmtc3 is at the bottom of the table.  */
   1615 {"dmul",    "d,v,t",	0,    (int) M_DMUL,	INSN_MACRO,		0,		I3	},
   1616 {"dmul",    "d,v,I",	0,    (int) M_DMUL_I,	INSN_MACRO,		0,		I3	},
   1617 {"dmulo",   "d,v,t",	0,    (int) M_DMULO,	INSN_MACRO,		0,		I3	},
   1618 {"dmulo",   "d,v,I",	0,    (int) M_DMULO_I,	INSN_MACRO,		0,		I3	},
   1619 {"dmulou",  "d,v,t",	0,    (int) M_DMULOU,	INSN_MACRO,		0,		I3	},
   1620 {"dmulou",  "d,v,I",	0,    (int) M_DMULOU_I,	INSN_MACRO,		0,		I3	},
   1621 {"dmult",   "s,t",      0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I3	},
   1622 {"dmultu",  "s,t",      0x0000001d, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I3	},
   1623 {"dneg",    "d,w",	0x0000002e, 0xffe007ff,	WR_d|RD_t,		0,		I3	}, /* dsub 0 */
   1624 {"dnegu",   "d,w",	0x0000002f, 0xffe007ff,	WR_d|RD_t,		0,		I3	}, /* dsubu 0*/
   1625 {"drem",    "z,s,t",    0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I3      },
   1626 {"drem",    "d,v,t",	3,    (int) M_DREM_3,	INSN_MACRO,		0,		I3	},
   1627 {"drem",    "d,v,I",	3,    (int) M_DREM_3I,	INSN_MACRO,		0,		I3	},
   1628 {"dremu",   "z,s,t",    0x0000001f, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I3      },
   1629 {"dremu",   "d,v,t",	3,    (int) M_DREMU_3,	INSN_MACRO,		0,		I3	},
   1630 {"dremu",   "d,v,I",	3,    (int) M_DREMU_3I,	INSN_MACRO,		0,		I3	},
   1631 {"dret",    "",		0x7000003e, 0xffffffff,	0,			0,		N5	},
   1632 {"drol",    "d,v,t",	0,    (int) M_DROL,	INSN_MACRO,		0,		I3	},
   1633 {"drol",    "d,v,I",	0,    (int) M_DROL_I,	INSN_MACRO,		0,		I3	},
   1634 {"dror",    "d,v,t",	0,    (int) M_DROR,	INSN_MACRO,		0,		I3	},
   1635 {"dror",    "d,v,I",	0,    (int) M_DROR_I,	INSN_MACRO,		0,		I3	},
   1636 {"dror",    "d,w,<",	0x0020003a, 0xffe0003f,	WR_d|RD_t,		0,		N5|I65	},
   1637 {"drorv",   "d,t,s",	0x00000056, 0xfc0007ff,	RD_t|RD_s|WR_d,		0,		N5|I65	},
   1638 {"dror32",  "d,w,<",	0x0020003e, 0xffe0003f,	WR_d|RD_t,		0,		N5|I65	},
   1639 {"drotl",   "d,v,t",	0,    (int) M_DROL,	INSN_MACRO,		0,		I65	},
   1640 {"drotl",   "d,v,I",	0,    (int) M_DROL_I,	INSN_MACRO,		0,		I65	},
   1641 {"drotr",   "d,v,t",	0,    (int) M_DROR,	INSN_MACRO,		0,		I65	},
   1642 {"drotr",   "d,v,I",	0,    (int) M_DROR_I,	INSN_MACRO,		0,		I65	},
   1643 {"drotrv",  "d,t,s",	0x00000056, 0xfc0007ff,	RD_t|RD_s|WR_d,		0,		I65	},
   1644 {"drotr32", "d,w,<",	0x0020003e, 0xffe0003f,	WR_d|RD_t,		0,		I65	},
   1645 {"dsbh",    "d,w",	0x7c0000a4, 0xffe007ff,	WR_d|RD_t,		0,		I65	},
   1646 {"dshd",    "d,w",	0x7c000164, 0xffe007ff,	WR_d|RD_t,		0,		I65	},
   1647 {"dsllv",   "d,t,s",	0x00000014, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I3	},
   1648 {"dsll32",  "d,w,<",	0x0000003c, 0xffe0003f, WR_d|RD_t,		0,		I3	},
   1649 {"dsll",    "d,w,s",	0x00000014, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I3	}, /* dsllv */
   1650 {"dsll",    "d,w,>",	0x0000003c, 0xffe0003f, WR_d|RD_t,		0,		I3	}, /* dsll32 */
   1651 {"dsll",    "d,w,<",	0x00000038, 0xffe0003f,	WR_d|RD_t,		0,		I3	},
   1652 {"dsrav",   "d,t,s",	0x00000017, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I3	},
   1653 {"dsra32",  "d,w,<",	0x0000003f, 0xffe0003f, WR_d|RD_t,		0,		I3	},
   1654 {"dsra",    "d,w,s",	0x00000017, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I3	}, /* dsrav */
   1655 {"dsra",    "d,w,>",	0x0000003f, 0xffe0003f, WR_d|RD_t,		0,		I3	}, /* dsra32 */
   1656 {"dsra",    "d,w,<",	0x0000003b, 0xffe0003f,	WR_d|RD_t,		0,		I3	},
   1657 {"dsrlv",   "d,t,s",	0x00000016, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I3	},
   1658 {"dsrl32",  "d,w,<",	0x0000003e, 0xffe0003f, WR_d|RD_t,		0,		I3	},
   1659 {"dsrl",    "d,w,s",	0x00000016, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I3	}, /* dsrlv */
   1660 {"dsrl",    "d,w,>",	0x0000003e, 0xffe0003f, WR_d|RD_t,		0,		I3	}, /* dsrl32 */
   1661 {"dsrl",    "d,w,<",	0x0000003a, 0xffe0003f,	WR_d|RD_t,		0,		I3	},
   1662 {"dsub",    "d,v,t",	0x0000002e, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I3	},
   1663 {"dsub",    "d,v,I",	0,    (int) M_DSUB_I,	INSN_MACRO,		0,		I3	},
   1664 {"dsubu",   "d,v,t",	0x0000002f, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I3	},
   1665 {"dsubu",   "d,v,I",	0,    (int) M_DSUBU_I,	INSN_MACRO,		0,		I3	},
   1666 {"dvpe",    "",		0x41600001, 0xffffffff, TRAP,			0,		MT32	},
   1667 {"dvpe",    "t",	0x41600001, 0xffe0ffff, TRAP|WR_t,		0,		MT32	},
   1668 {"ei",      "",		0x41606020, 0xffffffff,	WR_t|WR_C0,		0,		I33	},
   1669 {"ei",      "t",	0x41606020, 0xffe0ffff,	WR_t|WR_C0,		0,		I33	},
   1670 {"emt",     "",		0x41600be1, 0xffffffff, TRAP,			0,		MT32	},
   1671 {"emt",     "t",	0x41600be1, 0xffe0ffff, TRAP|WR_t,		0,		MT32	},
   1672 {"eret",    "",         0x42000018, 0xffffffff, 0,      		0,		I3|I32	},
   1673 {"evpe",    "",		0x41600021, 0xffffffff, TRAP,			0,		MT32	},
   1674 {"evpe",    "t",	0x41600021, 0xffe0ffff, TRAP|WR_t,		0,		MT32	},
   1675 {"ext",     "t,r,+A,+C", 0x7c000000, 0xfc00003f, WR_t|RD_s,    		0,		I33	},
   1676 {"floor.l.d", "D,S",	0x4620000b, 0xffff003f, WR_D|RD_S|FP_D,		0,		I3|I33	},
   1677 {"floor.l.s", "D,S",	0x4600000b, 0xffff003f, WR_D|RD_S|FP_S|FP_D,	0,		I3|I33	},
   1678 {"floor.w.d", "D,S",	0x4620000f, 0xffff003f, WR_D|RD_S|FP_S|FP_D,	0,		I2	},
   1679 {"floor.w.s", "D,S",	0x4600000f, 0xffff003f, WR_D|RD_S|FP_S,		0,		I2	},
   1680 {"hibernate","",        0x42000023, 0xffffffff,	0, 			0,		V1	},
   1681 {"ins",     "t,r,+A,+B", 0x7c000004, 0xfc00003f, WR_t|RD_s,    		0,		I33	},
   1682 {"jr",      "s",	0x00000008, 0xfc1fffff,	UBD|RD_s,		0,		I1	},
   1683 /* jr.hb is officially MIPS{32,64}R2, but it works on R1 as jr with
   1684    the same hazard barrier effect.  */
   1685 {"jr.hb",   "s",	0x00000408, 0xfc1fffff,	UBD|RD_s,		0,		I32	},
   1686 {"j",       "s",	0x00000008, 0xfc1fffff,	UBD|RD_s,		0,		I1	}, /* jr */
   1687 /* SVR4 PIC code requires special handling for j, so it must be a
   1688    macro.  */
   1689 {"j",	    "a",	0,     (int) M_J_A,	INSN_MACRO,		0,		I1	},
   1690 /* This form of j is used by the disassembler and internally by the
   1691    assembler, but will never match user input (because the line above
   1692    will match first).  */
   1693 {"j",       "a",	0x08000000, 0xfc000000,	UBD,			0,		I1	},
   1694 {"jalr",    "s",	0x0000f809, 0xfc1fffff,	UBD|RD_s|WR_d,		0,		I1	},
   1695 {"jalr",    "d,s",	0x00000009, 0xfc1f07ff,	UBD|RD_s|WR_d,		0,		I1	},
   1696 /* jalr.hb is officially MIPS{32,64}R2, but it works on R1 as jalr
   1697    with the same hazard barrier effect.  */
   1698 {"jalr.hb", "s",	0x0000fc09, 0xfc1fffff,	UBD|RD_s|WR_d,		0,		I32	},
   1699 {"jalr.hb", "d,s",	0x00000409, 0xfc1f07ff,	UBD|RD_s|WR_d,		0,		I32	},
   1700 /* SVR4 PIC code requires special handling for jal, so it must be a
   1701    macro.  */
   1702 {"jal",     "d,s",	0,     (int) M_JAL_2,	INSN_MACRO,		0,		I1	},
   1703 {"jal",     "s",	0,     (int) M_JAL_1,	INSN_MACRO,		0,		I1	},
   1704 {"jal",     "a",	0,     (int) M_JAL_A,	INSN_MACRO,		0,		I1	},
   1705 /* This form of jal is used by the disassembler and internally by the
   1706    assembler, but will never match user input (because the line above
   1707    will match first).  */
   1708 {"jal",     "a",	0x0c000000, 0xfc000000,	UBD|WR_31,		0,		I1	},
   1709 {"jalx",    "a",	0x74000000, 0xfc000000, UBD|WR_31,		0,		I16     },
   1710 {"la",      "t,A(b)",	0,    (int) M_LA_AB,	INSN_MACRO,		0,		I1	},
   1711 {"lb",      "t,o(b)",	0x80000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
   1712 {"lb",      "t,A(b)",	0,    (int) M_LB_AB,	INSN_MACRO,		0,		I1	},
   1713 {"lbu",     "t,o(b)",	0x90000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
   1714 {"lbu",     "t,A(b)",	0,    (int) M_LBU_AB,	INSN_MACRO,		0,		I1	},
   1715 {"lca",     "t,A(b)",	0,    (int) M_LCA_AB,	INSN_MACRO,		0,		I1	},
   1716 {"ld",	    "t,o(b)",   0xdc000000, 0xfc000000, WR_t|RD_b,		0,		I3	},
   1717 {"ld",      "t,o(b)",	0,    (int) M_LD_OB,	INSN_MACRO,		0,		I1	},
   1718 {"ld",      "t,A(b)",	0,    (int) M_LD_AB,	INSN_MACRO,		0,		I1	},
   1719 {"ldc1",    "T,o(b)",	0xd4000000, 0xfc000000, CLD|RD_b|WR_T|FP_D,	0,		I2	},
   1720 {"ldc1",    "E,o(b)",	0xd4000000, 0xfc000000, CLD|RD_b|WR_T|FP_D,	0,		I2	},
   1721 {"ldc1",    "T,A(b)",	0,    (int) M_LDC1_AB,	INSN_MACRO,		0,		I2	},
   1722 {"ldc1",    "E,A(b)",	0,    (int) M_LDC1_AB,	INSN_MACRO,		0,		I2	},
   1723 {"l.d",     "T,o(b)",	0xd4000000, 0xfc000000, CLD|RD_b|WR_T|FP_D,	0,		I2	}, /* ldc1 */
   1724 {"l.d",     "T,o(b)",	0,    (int) M_L_DOB,	INSN_MACRO,		0,		I1	},
   1725 {"l.d",     "T,A(b)",	0,    (int) M_L_DAB,	INSN_MACRO,		0,		I1	},
   1726 {"ldc2",    "E,o(b)",	0xd8000000, 0xfc000000, CLD|RD_b|WR_CC,		0,		I2	},
   1727 {"ldc2",    "E,A(b)",	0,    (int) M_LDC2_AB,	INSN_MACRO,		0,		I2	},
   1728 {"ldc3",    "E,o(b)",	0xdc000000, 0xfc000000, CLD|RD_b|WR_CC,		0,		I2	},
   1729 {"ldc3",    "E,A(b)",	0,    (int) M_LDC3_AB,	INSN_MACRO,		0,		I2	},
   1730 {"ldl",	    "t,o(b)",	0x68000000, 0xfc000000, LDD|WR_t|RD_b,		0,		I3	},
   1731 {"ldl",	    "t,A(b)",	0,    (int) M_LDL_AB,	INSN_MACRO,		0,		I3	},
   1732 {"ldr",	    "t,o(b)",	0x6c000000, 0xfc000000, LDD|WR_t|RD_b,		0,		I3	},
   1733 {"ldr",     "t,A(b)",	0,    (int) M_LDR_AB,	INSN_MACRO,		0,		I3	},
   1734 {"ldxc1",   "D,t(b)",	0x4c000001, 0xfc00f83f, LDD|WR_D|RD_t|RD_b|FP_D, 0,		I4|I33	},
   1735 {"lh",      "t,o(b)",	0x84000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
   1736 {"lh",      "t,A(b)",	0,    (int) M_LH_AB,	INSN_MACRO,		0,		I1	},
   1737 {"lhu",     "t,o(b)",	0x94000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
   1738 {"lhu",     "t,A(b)",	0,    (int) M_LHU_AB,	INSN_MACRO,		0,		I1	},
   1739 /* li is at the start of the table.  */
   1740 {"li.d",    "t,F",	0,    (int) M_LI_D,	INSN_MACRO,		0,		I1	},
   1741 {"li.d",    "T,L",	0,    (int) M_LI_DD,	INSN_MACRO,		0,		I1	},
   1742 {"li.s",    "t,f",	0,    (int) M_LI_S,	INSN_MACRO,		0,		I1	},
   1743 {"li.s",    "T,l",	0,    (int) M_LI_SS,	INSN_MACRO,		0,		I1	},
   1744 {"ll",	    "t,o(b)",	0xc0000000, 0xfc000000, LDD|RD_b|WR_t,		0,		I2	},
   1745 {"ll",	    "t,A(b)",	0,    (int) M_LL_AB,	INSN_MACRO,		0,		I2	},
   1746 {"lld",	    "t,o(b)",	0xd0000000, 0xfc000000, LDD|RD_b|WR_t,		0,		I3	},
   1747 {"lld",     "t,A(b)",	0,    (int) M_LLD_AB,	INSN_MACRO,		0,		I3	},
   1748 {"lui",     "t,u",	0x3c000000, 0xffe00000,	WR_t,			0,		I1	},
   1749 {"luxc1",   "D,t(b)",	0x4c000005, 0xfc00f83f, LDD|WR_D|RD_t|RD_b|FP_D, 0,		I5|I33|N55},
   1750 {"lw",      "t,o(b)",	0x8c000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
   1751 {"lw",      "t,A(b)",	0,    (int) M_LW_AB,	INSN_MACRO,		0,		I1	},
   1752 {"lwc0",    "E,o(b)",	0xc0000000, 0xfc000000,	CLD|RD_b|WR_CC,		0,		I1	},
   1753 {"lwc0",    "E,A(b)",	0,    (int) M_LWC0_AB,	INSN_MACRO,		0,		I1	},
   1754 {"lwc1",    "T,o(b)",	0xc4000000, 0xfc000000,	CLD|RD_b|WR_T|FP_S,	0,		I1	},
   1755 {"lwc1",    "E,o(b)",	0xc4000000, 0xfc000000,	CLD|RD_b|WR_T|FP_S,	0,		I1	},
   1756 {"lwc1",    "T,A(b)",	0,    (int) M_LWC1_AB,	INSN_MACRO,		0,		I1	},
   1757 {"lwc1",    "E,A(b)",	0,    (int) M_LWC1_AB,	INSN_MACRO,		0,		I1	},
   1758 {"l.s",     "T,o(b)",	0xc4000000, 0xfc000000,	CLD|RD_b|WR_T|FP_S,	0,		I1	}, /* lwc1 */
   1759 {"l.s",     "T,A(b)",	0,    (int) M_LWC1_AB,	INSN_MACRO,		0,		I1	},
   1760 {"lwc2",    "E,o(b)",	0xc8000000, 0xfc000000,	CLD|RD_b|WR_CC,		0,		I1	},
   1761 {"lwc2",    "E,A(b)",	0,    (int) M_LWC2_AB,	INSN_MACRO,		0,		I1	},
   1762 {"lwc3",    "E,o(b)",	0xcc000000, 0xfc000000,	CLD|RD_b|WR_CC,		0,		I1	},
   1763 {"lwc3",    "E,A(b)",	0,    (int) M_LWC3_AB,	INSN_MACRO,		0,		I1	},
   1764 {"lwl",     "t,o(b)",	0x88000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
   1765 {"lwl",     "t,A(b)",	0,    (int) M_LWL_AB,	INSN_MACRO,		0,		I1	},
   1766 {"lcache",  "t,o(b)",	0x88000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I2	}, /* same */
   1767 {"lcache",  "t,A(b)",	0,    (int) M_LWL_AB,	INSN_MACRO,		0,		I2	}, /* as lwl */
   1768 {"lwr",     "t,o(b)",	0x98000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I1	},
   1769 {"lwr",     "t,A(b)",	0,    (int) M_LWR_AB,	INSN_MACRO,		0,		I1	},
   1770 {"flush",   "t,o(b)",	0x98000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I2	}, /* same */
   1771 {"flush",   "t,A(b)",	0,    (int) M_LWR_AB,	INSN_MACRO,		0,		I2	}, /* as lwr */
   1772 {"fork",    "d,s,t",	0x7c000008, 0xfc0007ff, TRAP|WR_d|RD_s|RD_t,	0,		MT32	},
   1773 {"lwu",     "t,o(b)",	0x9c000000, 0xfc000000,	LDD|RD_b|WR_t,		0,		I3	},
   1774 {"lwu",     "t,A(b)",	0,    (int) M_LWU_AB,	INSN_MACRO,		0,		I3	},
   1775 {"lwxc1",   "D,t(b)",	0x4c000000, 0xfc00f83f, LDD|WR_D|RD_t|RD_b|FP_D, 0,		I4|I33	},
   1776 {"lwxs",    "d,t(b)",	0x70000088, 0xfc0007ff,	LDD|RD_b|RD_t|WR_d,	0,		SMT	},
   1777 {"macc",    "d,s,t",	0x00000028, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0,		N412    },
   1778 {"macc",    "d,s,t",	0x00000158, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d,	0,		N5      },
   1779 {"maccs",   "d,s,t",	0x00000428, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d, 0,		N412    },
   1780 {"macchi",  "d,s,t",	0x00000228, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0,		N412    },
   1781 {"macchi",  "d,s,t",	0x00000358, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5      },
   1782 {"macchis", "d,s,t",	0x00000628, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d, 0,		N412    },
   1783 {"macchiu", "d,s,t",	0x00000268, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d, 0,		N412    },
   1784 {"macchiu", "d,s,t",	0x00000359, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d,	0,		N5      },
   1785 {"macchius","d,s,t",	0x00000668, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d, 0,		N412    },
   1786 {"maccu",   "d,s,t",	0x00000068, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d, 0,		N412    },
   1787 {"maccu",   "d,s,t",	0x00000159, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d,	0,		N5      },
   1788 {"maccus",  "d,s,t",	0x00000468, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d, 0,		N412    },
   1789 {"mad",     "s,t",      0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO,     0,		P3      },
   1790 {"madu",    "s,t",      0x70000001, 0xfc00ffff, RD_s|RD_t|MOD_HILO,     0,		P3      },
   1791 {"madd.d",  "D,R,S,T",	0x4c000021, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D,    0,		I4|I33	},
   1792 {"madd.s",  "D,R,S,T",	0x4c000020, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S,    0,		I4|I33	},
   1793 {"madd.ps", "D,R,S,T",	0x4c000026, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D,    0,		I5|I33	},
   1794 {"madd",    "s,t",      0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO,           0,		L1	},
   1795 {"madd",    "s,t",      0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO,          0,		I32|N55	},
   1796 {"madd",    "s,t",      0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M,      0,		G1	},
   1797 {"madd",    "7,s,t",	0x70000000, 0xfc00e7ff, MOD_a|RD_s|RD_t,             0,         D33	},
   1798 {"madd",    "d,s,t",    0x70000000, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0,		G1	},
   1799 {"maddp",   "s,t",      0x70000441, 0xfc00ffff,	RD_s|RD_t|MOD_HILO,	     0,		SMT	},
   1800 {"maddu",   "s,t",      0x0000001d, 0xfc00ffff, RD_s|RD_t|WR_HILO,           0,		L1	},
   1801 {"maddu",   "s,t",      0x70000001, 0xfc00ffff, RD_s|RD_t|MOD_HILO,          0,		I32|N55	},
   1802 {"maddu",   "s,t",      0x70000001, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M,      0,		G1	},
   1803 {"maddu",   "7,s,t",	0x70000001, 0xfc00e7ff, MOD_a|RD_s|RD_t,             0,         D33	},
   1804 {"maddu",   "d,s,t",    0x70000001, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0,		G1	},
   1805 {"madd16",  "s,t",      0x00000028, 0xfc00ffff, RD_s|RD_t|MOD_HILO,	0,		N411    },
   1806 {"max.ob",  "X,Y,Q",	0x78000007, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1807 {"max.ob",  "D,S,T",	0x4ac00007, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1808 {"max.ob",  "D,S,T[e]",	0x48000007, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1809 {"max.ob",  "D,S,k",	0x4bc00007, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1810 {"max.qh",  "X,Y,Q",	0x78200007, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   1811 {"mfpc",    "t,P",	0x4000c801, 0xffe0ffc1,	LCD|WR_t|RD_C0,		0,		M1|N5	},
   1812 {"mfps",    "t,P",	0x4000c800, 0xffe0ffc1,	LCD|WR_t|RD_C0,		0,		M1|N5	},
   1813 {"mftacx",  "d",	0x41020021, 0xffff07ff, TRAP|WR_d|RD_a,		0,		MT32	},
   1814 {"mftacx",  "d,*",	0x41020021, 0xfff307ff, TRAP|WR_d|RD_a,		0,		MT32	},
   1815 {"mftc0",   "d,+t",	0x41000000, 0xffe007ff, TRAP|LCD|WR_d|RD_C0,	0,		MT32	},
   1816 {"mftc0",   "d,+T",	0x41000000, 0xffe007f8, TRAP|LCD|WR_d|RD_C0,	0,		MT32	},
   1817 {"mftc0",   "d,E,H",	0x41000000, 0xffe007f8, TRAP|LCD|WR_d|RD_C0,	0,		MT32	},
   1818 {"mftc1",   "d,T",	0x41000022, 0xffe007ff, TRAP|LCD|WR_d|RD_T|FP_S, 0,		MT32	},
   1819 {"mftc1",   "d,E",	0x41000022, 0xffe007ff, TRAP|LCD|WR_d|RD_T|FP_S, 0,		MT32	},
   1820 {"mftc2",   "d,E",	0x41000024, 0xffe007ff, TRAP|LCD|WR_d|RD_C2,	0,		MT32	},
   1821 {"mftdsp",  "d",	0x41100021, 0xffff07ff, TRAP|WR_d,		0,		MT32	},
   1822 {"mftgpr",  "d,t",	0x41000020, 0xffe007ff, TRAP|WR_d|RD_t,		0,		MT32	},
   1823 {"mfthc1",  "d,T",	0x41000032, 0xffe007ff, TRAP|LCD|WR_d|RD_T|FP_D, 0,		MT32	},
   1824 {"mfthc1",  "d,E",	0x41000032, 0xffe007ff, TRAP|LCD|WR_d|RD_T|FP_D, 0,		MT32	},
   1825 {"mfthc2",  "d,E",	0x41000034, 0xffe007ff, TRAP|LCD|WR_d|RD_C2,	0,		MT32	},
   1826 {"mfthi",   "d",	0x41010021, 0xffff07ff, TRAP|WR_d|RD_a,		0,		MT32	},
   1827 {"mfthi",   "d,*",	0x41010021, 0xfff307ff, TRAP|WR_d|RD_a,		0,		MT32	},
   1828 {"mftlo",   "d",	0x41000021, 0xffff07ff, TRAP|WR_d|RD_a,		0,		MT32	},
   1829 {"mftlo",   "d,*",	0x41000021, 0xfff307ff, TRAP|WR_d|RD_a,		0,		MT32	},
   1830 {"mftr",    "d,t,!,H,$", 0x41000000, 0xffe007c8, TRAP|WR_d,		0,		MT32	},
   1831 {"mfc0",    "t,G",	0x40000000, 0xffe007ff,	LCD|WR_t|RD_C0,		0,		I1	},
   1832 {"mfc0",    "t,+D",     0x40000000, 0xffe007f8, LCD|WR_t|RD_C0, 	0,		I32     },
   1833 {"mfc0",    "t,G,H",    0x40000000, 0xffe007f8, LCD|WR_t|RD_C0, 	0,		I32     },
   1834 {"mfc1",    "t,S",	0x44000000, 0xffe007ff,	LCD|WR_t|RD_S|FP_S,	0,		I1	},
   1835 {"mfc1",    "t,G",	0x44000000, 0xffe007ff,	LCD|WR_t|RD_S|FP_S,	0,		I1	},
   1836 {"mfhc1",   "t,S",	0x44600000, 0xffe007ff,	LCD|WR_t|RD_S|FP_D,	0,		I33	},
   1837 {"mfhc1",   "t,G",	0x44600000, 0xffe007ff,	LCD|WR_t|RD_S|FP_D,	0,		I33	},
   1838 /* mfc2 is at the bottom of the table.  */
   1839 /* mfhc2 is at the bottom of the table.  */
   1840 /* mfc3 is at the bottom of the table.  */
   1841 {"mfdr",    "t,G",	0x7000003d, 0xffe007ff,	LCD|WR_t|RD_C0,		0,		N5      },
   1842 {"mfhi",    "d",	0x00000010, 0xffff07ff,	WR_d|RD_HI,		0,		I1	},
   1843 {"mfhi",    "d,9",	0x00000010, 0xff9f07ff, WR_d|RD_HI,		0,		D32	},
   1844 {"mflo",    "d",	0x00000012, 0xffff07ff,	WR_d|RD_LO,		0,		I1	},
   1845 {"mflo",    "d,9",	0x00000012, 0xff9f07ff, WR_d|RD_LO,		0,		D32	},
   1846 {"mflhxu",  "d",	0x00000052, 0xffff07ff,	WR_d|MOD_HILO,		0,		SMT	},
   1847 {"min.ob",  "X,Y,Q",	0x78000006, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1848 {"min.ob",  "D,S,T",	0x4ac00006, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1849 {"min.ob",  "D,S,T[e]",	0x48000006, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1850 {"min.ob",  "D,S,k",	0x4bc00006, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1851 {"min.qh",  "X,Y,Q",	0x78200006, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   1852 {"mov.d",   "D,S",	0x46200006, 0xffff003f,	WR_D|RD_S|FP_D,		0,		I1	},
   1853 {"mov.s",   "D,S",	0x46000006, 0xffff003f,	WR_D|RD_S|FP_S,		0,		I1	},
   1854 {"mov.ps",  "D,S",	0x46c00006, 0xffff003f,	WR_D|RD_S|FP_D,		0,		I5|I33	},
   1855 {"movf",    "d,s,N",    0x00000001, 0xfc0307ff, WR_d|RD_s|RD_CC|FP_S|FP_D, 0,		I4|I32  },
   1856 {"movf.d",  "D,S,N",    0x46200011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D,   0,		I4|I32	},
   1857 {"movf.l",  "D,S,N",	0x46a00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D,	0,		MX|SB1	},
   1858 {"movf.l",  "X,Y,N",	0x46a00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D,	0,		MX|SB1	},
   1859 {"movf.s",  "D,S,N",    0x46000011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_S,   0,		I4|I32	},
   1860 {"movf.ps", "D,S,N",	0x46c00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D,	0,		I5|I33	},
   1861 {"movn",    "d,v,t",    0x0000000b, 0xfc0007ff, WR_d|RD_s|RD_t, 	0,		I4|I32	},
   1862 {"ffc",     "d,v",	0x0000000b, 0xfc1f07ff,	WR_d|RD_s,		0,		L1	},
   1863 {"movn.d",  "D,S,t",    0x46200013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D,    0,		I4|I32	},
   1864 {"movn.l",  "D,S,t",    0x46a00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D,    0,		MX|SB1	},
   1865 {"movn.l",  "X,Y,t",    0x46a00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D,    0,		MX|SB1	},
   1866 {"movn.s",  "D,S,t",    0x46000013, 0xffe0003f, WR_D|RD_S|RD_t|FP_S,    0,		I4|I32	},
   1867 {"movn.ps", "D,S,t",    0x46c00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D,    0,		I5|I33	},
   1868 {"movt",    "d,s,N",    0x00010001, 0xfc0307ff, WR_d|RD_s|RD_CC|FP_S|FP_D, 0,		I4|I32	},
   1869 {"movt.d",  "D,S,N",    0x46210011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D,   0,		I4|I32	},
   1870 {"movt.l",  "D,S,N",    0x46a10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D,   0,		MX|SB1	},
   1871 {"movt.l",  "X,Y,N",    0x46a10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D,   0,		MX|SB1	},
   1872 {"movt.s",  "D,S,N",    0x46010011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_S,   0,		I4|I32	},
   1873 {"movt.ps", "D,S,N",	0x46c10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D,	0,		I5|I33	},
   1874 {"movz",    "d,v,t",    0x0000000a, 0xfc0007ff, WR_d|RD_s|RD_t, 	0,		I4|I32	},
   1875 {"ffs",     "d,v",	0x0000000a, 0xfc1f07ff,	WR_d|RD_s,		0,		L1	},
   1876 {"movz.d",  "D,S,t",    0x46200012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D,    0,		I4|I32	},
   1877 {"movz.l",  "D,S,t",    0x46a00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D,    0,		MX|SB1	},
   1878 {"movz.l",  "X,Y,t",    0x46a00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D,    0,		MX|SB1	},
   1879 {"movz.s",  "D,S,t",    0x46000012, 0xffe0003f, WR_D|RD_S|RD_t|FP_S,    0,		I4|I32	},
   1880 {"movz.ps", "D,S,t",    0x46c00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D,    0,		I5|I33	},
   1881 {"msac",    "d,s,t",	0x000001d8, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1882 {"msacu",   "d,s,t",	0x000001d9, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1883 {"msachi",  "d,s,t",	0x000003d8, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1884 {"msachiu", "d,s,t",	0x000003d9, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1885 /* move is at the top of the table.  */
   1886 {"msgn.qh", "X,Y,Q",	0x78200000, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   1887 {"msub.d",  "D,R,S,T",	0x4c000029, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I4|I33	},
   1888 {"msub.s",  "D,R,S,T",	0x4c000028, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0,		I4|I33	},
   1889 {"msub.ps", "D,R,S,T",	0x4c00002e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5|I33	},
   1890 {"msub",    "s,t",      0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO,	0,		L1    	},
   1891 {"msub",    "s,t",      0x70000004, 0xfc00ffff, RD_s|RD_t|MOD_HILO,     0,		I32|N55 },
   1892 {"msub",    "7,s,t",	0x70000004, 0xfc00e7ff, MOD_a|RD_s|RD_t,        0,              D33	},
   1893 {"msubu",   "s,t",      0x0000001f, 0xfc00ffff, RD_s|RD_t|WR_HILO,	0,		L1	},
   1894 {"msubu",   "s,t",      0x70000005, 0xfc00ffff, RD_s|RD_t|MOD_HILO,     0,		I32|N55	},
   1895 {"msubu",   "7,s,t",	0x70000005, 0xfc00e7ff, MOD_a|RD_s|RD_t,        0,              D33	},
   1896 {"mtpc",    "t,P",	0x4080c801, 0xffe0ffc1,	COD|RD_t|WR_C0,		0,		M1|N5	},
   1897 {"mtps",    "t,P",	0x4080c800, 0xffe0ffc1,	COD|RD_t|WR_C0,		0,		M1|N5	},
   1898 {"mtc0",    "t,G",	0x40800000, 0xffe007ff,	COD|RD_t|WR_C0|WR_CC,	0,		I1	},
   1899 {"mtc0",    "t,+D",     0x40800000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC,   0,		I32     },
   1900 {"mtc0",    "t,G,H",    0x40800000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC,   0,		I32     },
   1901 {"mtc1",    "t,S",	0x44800000, 0xffe007ff,	COD|RD_t|WR_S|FP_S,	0,		I1	},
   1902 {"mtc1",    "t,G",	0x44800000, 0xffe007ff,	COD|RD_t|WR_S|FP_S,	0,		I1	},
   1903 {"mthc1",   "t,S",	0x44e00000, 0xffe007ff,	COD|RD_t|WR_S|FP_D,	0,		I33	},
   1904 {"mthc1",   "t,G",	0x44e00000, 0xffe007ff,	COD|RD_t|WR_S|FP_D,	0,		I33	},
   1905 /* mtc2 is at the bottom of the table.  */
   1906 /* mthc2 is at the bottom of the table.  */
   1907 /* mtc3 is at the bottom of the table.  */
   1908 {"mtdr",    "t,G",	0x7080003d, 0xffe007ff,	COD|RD_t|WR_C0,		0,		N5	},
   1909 {"mthi",    "s",	0x00000011, 0xfc1fffff,	RD_s|WR_HI,		0,		I1	},
   1910 {"mthi",    "s,7",	0x00000011, 0xfc1fe7ff, RD_s|WR_HI,		0,		D32	},
   1911 {"mtlo",    "s",	0x00000013, 0xfc1fffff,	RD_s|WR_LO,		0,		I1	},
   1912 {"mtlo",    "s,7",	0x00000013, 0xfc1fe7ff, RD_s|WR_LO,		0,		D32	},
   1913 {"mtlhx",   "s",	0x00000053, 0xfc1fffff,	RD_s|MOD_HILO,		0,		SMT	},
   1914 {"mttc0",   "t,G",	0x41800000, 0xffe007ff, TRAP|COD|RD_t|WR_C0|WR_CC, 0,		MT32	},
   1915 {"mttc0",   "t,+D",	0x41800000, 0xffe007f8, TRAP|COD|RD_t|WR_C0|WR_CC, 0,		MT32	},
   1916 {"mttc0",   "t,G,H",	0x41800000, 0xffe007f8, TRAP|COD|RD_t|WR_C0|WR_CC, 0,		MT32	},
   1917 {"mttc1",   "t,S",	0x41800022, 0xffe007ff, TRAP|COD|RD_t|WR_S|FP_S, 0,		MT32	},
   1918 {"mttc1",   "t,G",	0x41800022, 0xffe007ff, TRAP|COD|RD_t|WR_S|FP_S, 0,		MT32	},
   1919 {"mttc2",   "t,g",	0x41800024, 0xffe007ff, TRAP|COD|RD_t|WR_C2|WR_CC, 0,		MT32	},
   1920 {"mttacx",  "t",	0x41801021, 0xffe0ffff, TRAP|WR_a|RD_t,		0,		MT32	},
   1921 {"mttacx",  "t,&",	0x41801021, 0xffe09fff, TRAP|WR_a|RD_t,		0,		MT32	},
   1922 {"mttdsp",  "t",	0x41808021, 0xffe0ffff, TRAP|RD_t,		0,		MT32	},
   1923 {"mttgpr",  "t,d",	0x41800020, 0xffe007ff, TRAP|WR_d|RD_t,		0,		MT32	},
   1924 {"mtthc1",  "t,S",	0x41800032, 0xffe007ff, TRAP|COD|RD_t|WR_S|FP_D, 0,		MT32	},
   1925 {"mtthc1",  "t,G",	0x41800032, 0xffe007ff, TRAP|COD|RD_t|WR_S|FP_D, 0,		MT32	},
   1926 {"mtthc2",  "t,g",	0x41800034, 0xffe007ff, TRAP|COD|RD_t|WR_C2|WR_CC, 0,		MT32	},
   1927 {"mtthi",   "t",	0x41800821, 0xffe0ffff, TRAP|WR_a|RD_t,		0,		MT32	},
   1928 {"mtthi",   "t,&",	0x41800821, 0xffe09fff, TRAP|WR_a|RD_t,		0,		MT32	},
   1929 {"mttlo",   "t",	0x41800021, 0xffe0ffff, TRAP|WR_a|RD_t,		0,		MT32	},
   1930 {"mttlo",   "t,&",	0x41800021, 0xffe09fff, TRAP|WR_a|RD_t,		0,		MT32	},
   1931 {"mttr",    "t,d,!,H,$", 0x41800000, 0xffe007c8, TRAP|RD_t,		0,		MT32	},
   1932 {"mul.d",   "D,V,T",	0x46200002, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I1	},
   1933 {"mul.s",   "D,V,T",	0x46000002, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		I1	},
   1934 {"mul.ob",  "X,Y,Q",	0x78000030, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1935 {"mul.ob",  "D,S,T",	0x4ac00030, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1936 {"mul.ob",  "D,S,T[e]",	0x48000030, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1937 {"mul.ob",  "D,S,k",	0x4bc00030, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1938 {"mul.ps",  "D,V,T",	0x46c00002, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5|I33	},
   1939 {"mul.qh",  "X,Y,Q",	0x78200030, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   1940 {"mul",     "d,v,t",    0x70000002, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		I32|P3|N55},
   1941 {"mul",     "d,s,t",	0x00000058, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N54	},
   1942 {"mul",     "d,v,t",	0,    (int) M_MUL,	INSN_MACRO,		0,		I1	},
   1943 {"mul",     "d,v,I",	0,    (int) M_MUL_I,	INSN_MACRO,		0,		I1	},
   1944 {"mula.ob", "Y,Q",	0x78000033, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX|SB1	},
   1945 {"mula.ob", "S,T",	0x4ac00033, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1946 {"mula.ob", "S,T[e]",	0x48000033, 0xfe2007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1947 {"mula.ob", "S,k",	0x4bc00033, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1948 {"mula.qh", "Y,Q",	0x78200033, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   1949 {"mulhi",   "d,s,t",	0x00000258, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1950 {"mulhiu",  "d,s,t",	0x00000259, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1951 {"mull.ob", "Y,Q",	0x78000433, 0xfc2007ff,	RD_S|RD_T|FP_D, 	WR_MACC,	MX|SB1	},
   1952 {"mull.ob", "S,T",	0x4ac00433, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1953 {"mull.ob", "S,T[e]",	0x48000433, 0xfe2007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1954 {"mull.ob", "S,k",	0x4bc00433, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1955 {"mull.qh", "Y,Q",	0x78200433, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   1956 {"mulo",    "d,v,t",	0,    (int) M_MULO,	INSN_MACRO,		0,		I1	},
   1957 {"mulo",    "d,v,I",	0,    (int) M_MULO_I,	INSN_MACRO,		0,		I1	},
   1958 {"mulou",   "d,v,t",	0,    (int) M_MULOU,	INSN_MACRO,		0,		I1	},
   1959 {"mulou",   "d,v,I",	0,    (int) M_MULOU_I,	INSN_MACRO,		0,		I1	},
   1960 {"mulr.ps", "D,S,T",	0x46c0001a, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		M3D	},
   1961 {"muls",    "d,s,t",	0x000000d8, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1962 {"mulsu",   "d,s,t",	0x000000d9, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1963 {"mulshi",  "d,s,t",	0x000002d8, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1964 {"mulshiu", "d,s,t",	0x000002d9, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1965 {"muls.ob", "Y,Q",	0x78000032, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX|SB1	},
   1966 {"muls.ob", "S,T",	0x4ac00032, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1967 {"muls.ob", "S,T[e]",	0x48000032, 0xfe2007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1968 {"muls.ob", "S,k",	0x4bc00032, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1969 {"muls.qh", "Y,Q",	0x78200032, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   1970 {"mulsl.ob", "Y,Q",	0x78000432, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX|SB1	},
   1971 {"mulsl.ob", "S,T",	0x4ac00432, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1972 {"mulsl.ob", "S,T[e]",	0x48000432, 0xfe2007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1973 {"mulsl.ob", "S,k",	0x4bc00432, 0xffe007ff,	WR_CC|RD_S|RD_T,	0,		N54	},
   1974 {"mulsl.qh", "Y,Q",	0x78200432, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   1975 {"mult",    "s,t",      0x00000018, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0,		I1	},
   1976 {"mult",    "7,s,t",	0x00000018, 0xfc00e7ff, WR_a|RD_s|RD_t,         0,              D33	},
   1977 {"mult",    "d,s,t",    0x00000018, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0,		G1	},
   1978 {"multp",   "s,t",	0x00000459, 0xfc00ffff,	RD_s|RD_t|MOD_HILO,	0,		SMT	},
   1979 {"multu",   "s,t",      0x00000019, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0,		I1	},
   1980 {"multu",   "7,s,t",	0x00000019, 0xfc00e7ff, WR_a|RD_s|RD_t,         0,              D33	},
   1981 {"multu",   "d,s,t",    0x00000019, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0,		G1	},
   1982 {"mulu",    "d,s,t",	0x00000059, 0xfc0007ff,	RD_s|RD_t|WR_HILO|WR_d,	0,		N5	},
   1983 {"neg",     "d,w",	0x00000022, 0xffe007ff,	WR_d|RD_t,		0,		I1	}, /* sub 0 */
   1984 {"negu",    "d,w",	0x00000023, 0xffe007ff,	WR_d|RD_t,		0,		I1	}, /* subu 0 */
   1985 {"neg.d",   "D,V",	0x46200007, 0xffff003f,	WR_D|RD_S|FP_D,		0,		I1	},
   1986 {"neg.s",   "D,V",	0x46000007, 0xffff003f,	WR_D|RD_S|FP_S,		0,		I1	},
   1987 {"neg.ps",  "D,V",	0x46c00007, 0xffff003f,	WR_D|RD_S|FP_D,		0,		I5|I33	},
   1988 {"nmadd.d", "D,R,S,T",	0x4c000031, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I4|I33	},
   1989 {"nmadd.s", "D,R,S,T",	0x4c000030, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0,		I4|I33	},
   1990 {"nmadd.ps","D,R,S,T",	0x4c000036, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5|I33	},
   1991 {"nmsub.d", "D,R,S,T",	0x4c000039, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I4|I33	},
   1992 {"nmsub.s", "D,R,S,T",	0x4c000038, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0,		I4|I33	},
   1993 {"nmsub.ps","D,R,S,T",	0x4c00003e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I5|I33	},
   1994 /* nop is at the start of the table.  */
   1995 {"nor",     "d,v,t",	0x00000027, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   1996 {"nor",     "t,r,I",	0,    (int) M_NOR_I,	INSN_MACRO,		0,		I1	},
   1997 {"nor.ob",  "X,Y,Q",	0x7800000f, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   1998 {"nor.ob",  "D,S,T",	0x4ac0000f, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   1999 {"nor.ob",  "D,S,T[e]",	0x4800000f, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2000 {"nor.ob",  "D,S,k",	0x4bc0000f, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2001 {"nor.qh",  "X,Y,Q",	0x7820000f, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2002 {"not",     "d,v",	0x00000027, 0xfc1f07ff,	WR_d|RD_s|RD_t,		0,		I1	},/*nor d,s,0*/
   2003 {"or",      "d,v,t",	0x00000025, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   2004 {"or",      "t,r,I",	0,    (int) M_OR_I,	INSN_MACRO,		0,		I1	},
   2005 {"or.ob",   "X,Y,Q",	0x7800000e, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2006 {"or.ob",   "D,S,T",	0x4ac0000e, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2007 {"or.ob",   "D,S,T[e]",	0x4800000e, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2008 {"or.ob",   "D,S,k",	0x4bc0000e, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2009 {"or.qh",   "X,Y,Q",	0x7820000e, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2010 {"ori",     "t,r,i",	0x34000000, 0xfc000000,	WR_t|RD_s,		0,		I1	},
   2011 {"pabsdiff.ob", "X,Y,Q",0x78000009, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		SB1	},
   2012 {"pabsdiffc.ob", "Y,Q",	0x78000035, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	SB1	},
   2013 {"pavg.ob", "X,Y,Q",	0x78000008, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		SB1	},
   2014 {"pickf.ob", "X,Y,Q",	0x78000002, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2015 {"pickf.ob", "D,S,T",	0x4ac00002, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2016 {"pickf.ob", "D,S,T[e]",0x48000002, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2017 {"pickf.ob", "D,S,k",	0x4bc00002, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2018 {"pickf.qh", "X,Y,Q",	0x78200002, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2019 {"pickt.ob", "X,Y,Q",	0x78000003, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2020 {"pickt.ob", "D,S,T",	0x4ac00003, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2021 {"pickt.ob", "D,S,T[e]",0x48000003, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2022 {"pickt.ob", "D,S,k",	0x4bc00003, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2023 {"pickt.qh", "X,Y,Q",	0x78200003, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2024 {"pll.ps",  "D,V,T",	0x46c0002c, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5|I33	},
   2025 {"plu.ps",  "D,V,T",	0x46c0002d, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5|I33	},
   2026   /* pref and prefx are at the start of the table.  */
   2027 {"pul.ps",  "D,V,T",	0x46c0002e, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5|I33	},
   2028 {"puu.ps",  "D,V,T",	0x46c0002f, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5|I33	},
   2029 {"pperm",   "s,t",	0x70000481, 0xfc00ffff,	MOD_HILO|RD_s|RD_t,	0,		SMT	},
   2030 {"rach.ob", "X",	0x7a00003f, 0xfffff83f,	WR_D|FP_D,		RD_MACC,	MX|SB1	},
   2031 {"rach.ob", "D",	0x4a00003f, 0xfffff83f,	WR_D,			0,		N54	},
   2032 {"rach.qh", "X",	0x7a20003f, 0xfffff83f,	WR_D|FP_D,		RD_MACC,	MX	},
   2033 {"racl.ob", "X",	0x7800003f, 0xfffff83f,	WR_D|FP_D,		RD_MACC,	MX|SB1	},
   2034 {"racl.ob", "D",	0x4800003f, 0xfffff83f,	WR_D,			0,		N54	},
   2035 {"racl.qh", "X",	0x7820003f, 0xfffff83f,	WR_D|FP_D,		RD_MACC,	MX	},
   2036 {"racm.ob", "X",	0x7900003f, 0xfffff83f,	WR_D|FP_D,		RD_MACC,	MX|SB1	},
   2037 {"racm.ob", "D",	0x4900003f, 0xfffff83f,	WR_D,			0,		N54	},
   2038 {"racm.qh", "X",	0x7920003f, 0xfffff83f,	WR_D|FP_D,		RD_MACC,	MX	},
   2039 {"recip.d", "D,S",	0x46200015, 0xffff003f, WR_D|RD_S|FP_D,		0,		I4|I33	},
   2040 {"recip.ps","D,S",	0x46c00015, 0xffff003f, WR_D|RD_S|FP_D,		0,		SB1	},
   2041 {"recip.s", "D,S",	0x46000015, 0xffff003f, WR_D|RD_S|FP_S,		0,		I4|I33	},
   2042 {"recip1.d",  "D,S",	0x4620001d, 0xffff003f,	WR_D|RD_S|FP_D,		0,		M3D	},
   2043 {"recip1.ps", "D,S",	0x46c0001d, 0xffff003f,	WR_D|RD_S|FP_S,		0,		M3D	},
   2044 {"recip1.s",  "D,S",	0x4600001d, 0xffff003f,	WR_D|RD_S|FP_S,		0,		M3D	},
   2045 {"recip2.d",  "D,S,T",	0x4620001c, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		M3D	},
   2046 {"recip2.ps", "D,S,T",	0x46c0001c, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		M3D	},
   2047 {"recip2.s",  "D,S,T",	0x4600001c, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		M3D	},
   2048 {"rem",     "z,s,t",    0x0000001a, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I1	},
   2049 {"rem",     "d,v,t",	0,    (int) M_REM_3,	INSN_MACRO,		0,		I1	},
   2050 {"rem",     "d,v,I",	0,    (int) M_REM_3I,	INSN_MACRO,		0,		I1	},
   2051 {"remu",    "z,s,t",    0x0000001b, 0xfc00ffff, RD_s|RD_t|WR_HILO,      0,		I1	},
   2052 {"remu",    "d,v,t",	0,    (int) M_REMU_3,	INSN_MACRO,		0,		I1	},
   2053 {"remu",    "d,v,I",	0,    (int) M_REMU_3I,	INSN_MACRO,		0,		I1	},
   2054 {"rdhwr",   "t,K",	0x7c00003b, 0xffe007ff, WR_t,			0,		I33	},
   2055 {"rdpgpr",  "d,w",	0x41400000, 0xffe007ff, WR_d,			0,		I33	},
   2056 {"rfe",     "",		0x42000010, 0xffffffff,	0,			0,		I1|T3	},
   2057 {"rnas.qh", "X,Q",	0x78200025, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX	},
   2058 {"rnau.ob", "X,Q",	0x78000021, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX|SB1	},
   2059 {"rnau.qh", "X,Q",	0x78200021, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX	},
   2060 {"rnes.qh", "X,Q",	0x78200026, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX	},
   2061 {"rneu.ob", "X,Q",	0x78000022, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX|SB1	},
   2062 {"rneu.qh", "X,Q",	0x78200022, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX	},
   2063 {"rol",     "d,v,t",	0,    (int) M_ROL,	INSN_MACRO,		0,		I1	},
   2064 {"rol",     "d,v,I",	0,    (int) M_ROL_I,	INSN_MACRO,		0,		I1	},
   2065 {"ror",     "d,v,t",	0,    (int) M_ROR,	INSN_MACRO,		0,		I1	},
   2066 {"ror",     "d,v,I",	0,    (int) M_ROR_I,	INSN_MACRO,		0,		I1	},
   2067 {"ror",	    "d,w,<",	0x00200002, 0xffe0003f,	WR_d|RD_t,		0,		N5|I33|SMT },
   2068 {"rorv",    "d,t,s",	0x00000046, 0xfc0007ff,	RD_t|RD_s|WR_d,		0,		N5|I33|SMT },
   2069 {"rotl",    "d,v,t",	0,    (int) M_ROL,	INSN_MACRO,		0,		I33|SMT	},
   2070 {"rotl",    "d,v,I",	0,    (int) M_ROL_I,	INSN_MACRO,		0,		I33|SMT	},
   2071 {"rotr",    "d,v,t",	0,    (int) M_ROR,	INSN_MACRO,		0,		I33|SMT	},
   2072 {"rotr",    "d,v,I",	0,    (int) M_ROR_I,	INSN_MACRO,		0,		I33|SMT	},
   2073 {"rotrv",   "d,t,s",	0x00000046, 0xfc0007ff,	RD_t|RD_s|WR_d,		0,		I33|SMT	},
   2074 {"round.l.d", "D,S",	0x46200008, 0xffff003f, WR_D|RD_S|FP_D,		0,		I3|I33	},
   2075 {"round.l.s", "D,S",	0x46000008, 0xffff003f, WR_D|RD_S|FP_S|FP_D,	0,		I3|I33	},
   2076 {"round.w.d", "D,S",	0x4620000c, 0xffff003f, WR_D|RD_S|FP_S|FP_D,	0,		I2	},
   2077 {"round.w.s", "D,S",	0x4600000c, 0xffff003f, WR_D|RD_S|FP_S,		0,		I2	},
   2078 {"rsqrt.d", "D,S",	0x46200016, 0xffff003f, WR_D|RD_S|FP_D,		0,		I4|I33	},
   2079 {"rsqrt.ps","D,S",	0x46c00016, 0xffff003f, WR_D|RD_S|FP_D,		0,		SB1	},
   2080 {"rsqrt.s", "D,S",	0x46000016, 0xffff003f, WR_D|RD_S|FP_S,		0,		I4|I33	},
   2081 {"rsqrt1.d",  "D,S",	0x4620001e, 0xffff003f,	WR_D|RD_S|FP_D,		0,		M3D	},
   2082 {"rsqrt1.ps", "D,S",	0x46c0001e, 0xffff003f,	WR_D|RD_S|FP_S,		0,		M3D	},
   2083 {"rsqrt1.s",  "D,S",	0x4600001e, 0xffff003f,	WR_D|RD_S|FP_S,		0,		M3D	},
   2084 {"rsqrt2.d",  "D,S,T",	0x4620001f, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		M3D	},
   2085 {"rsqrt2.ps", "D,S,T",	0x46c0001f, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		M3D	},
   2086 {"rsqrt2.s",  "D,S,T",	0x4600001f, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		M3D	},
   2087 {"rzs.qh",  "X,Q",	0x78200024, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX	},
   2088 {"rzu.ob",  "X,Q",	0x78000020, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX|SB1	},
   2089 {"rzu.ob",  "D,k",	0x4bc00020, 0xffe0f83f,	WR_D|RD_S|RD_T,		0,		N54	},
   2090 {"rzu.qh",  "X,Q",	0x78200020, 0xfc20f83f,	WR_D|RD_T|FP_D,		RD_MACC,	MX	},
   2091 {"sb",      "t,o(b)",	0xa0000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I1	},
   2092 {"sb",      "t,A(b)",	0,    (int) M_SB_AB,	INSN_MACRO,		0,		I1	},
   2093 {"sc",	    "t,o(b)",	0xe0000000, 0xfc000000, SM|RD_t|WR_t|RD_b,	0,		I2	},
   2094 {"sc",	    "t,A(b)",	0,    (int) M_SC_AB,	INSN_MACRO,		0,		I2	},
   2095 {"scd",	    "t,o(b)",	0xf0000000, 0xfc000000, SM|RD_t|WR_t|RD_b,	0,		I3	},
   2096 {"scd",	    "t,A(b)",	0,    (int) M_SCD_AB,	INSN_MACRO,		0,		I3	},
   2097 {"sd",	    "t,o(b)",	0xfc000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I3	},
   2098 {"sd",      "t,o(b)",	0,    (int) M_SD_OB,	INSN_MACRO,		0,		I1	},
   2099 {"sd",      "t,A(b)",	0,    (int) M_SD_AB,	INSN_MACRO,		0,		I1	},
   2100 {"sdbbp",   "",		0x0000000e, 0xffffffff,	TRAP,           	0,		G2	},
   2101 {"sdbbp",   "c",	0x0000000e, 0xfc00ffff,	TRAP,			0,		G2	},
   2102 {"sdbbp",   "c,q",	0x0000000e, 0xfc00003f,	TRAP,			0,		G2	},
   2103 {"sdbbp",   "",         0x7000003f, 0xffffffff, TRAP,           	0,		I32     },
   2104 {"sdbbp",   "B",        0x7000003f, 0xfc00003f, TRAP,           	0,		I32     },
   2105 {"sdc1",    "T,o(b)",	0xf4000000, 0xfc000000, SM|RD_T|RD_b|FP_D,	0,		I2	},
   2106 {"sdc1",    "E,o(b)",	0xf4000000, 0xfc000000, SM|RD_T|RD_b|FP_D,	0,		I2	},
   2107 {"sdc1",    "T,A(b)",	0,    (int) M_SDC1_AB,	INSN_MACRO,		0,		I2	},
   2108 {"sdc1",    "E,A(b)",	0,    (int) M_SDC1_AB,	INSN_MACRO,		0,		I2	},
   2109 {"sdc2",    "E,o(b)",	0xf8000000, 0xfc000000, SM|RD_C2|RD_b,		0,		I2	},
   2110 {"sdc2",    "E,A(b)",	0,    (int) M_SDC2_AB,	INSN_MACRO,		0,		I2	},
   2111 {"sdc3",    "E,o(b)",	0xfc000000, 0xfc000000, SM|RD_C3|RD_b,		0,		I2	},
   2112 {"sdc3",    "E,A(b)",	0,    (int) M_SDC3_AB,	INSN_MACRO,		0,		I2	},
   2113 {"s.d",     "T,o(b)",	0xf4000000, 0xfc000000, SM|RD_T|RD_b|FP_D,	0,		I2	},
   2114 {"s.d",     "T,o(b)",	0,    (int) M_S_DOB,	INSN_MACRO,		0,		I1	},
   2115 {"s.d",     "T,A(b)",	0,    (int) M_S_DAB,	INSN_MACRO,		0,		I1	},
   2116 {"sdl",     "t,o(b)",	0xb0000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I3	},
   2117 {"sdl",     "t,A(b)",	0,    (int) M_SDL_AB,	INSN_MACRO,		0,		I3	},
   2118 {"sdr",     "t,o(b)",	0xb4000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I3	},
   2119 {"sdr",     "t,A(b)",	0,    (int) M_SDR_AB,	INSN_MACRO,		0,		I3	},
   2120 {"sdxc1",   "S,t(b)",   0x4c000009, 0xfc0007ff, SM|RD_S|RD_t|RD_b|FP_D,	0,		I4|I33	},
   2121 {"seb",     "d,w",	0x7c000420, 0xffe007ff,	WR_d|RD_t,		0,		I33	},
   2122 {"seh",     "d,w",	0x7c000620, 0xffe007ff,	WR_d|RD_t,		0,		I33	},
   2123 {"selsl",   "d,v,t",	0x00000005, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		L1	},
   2124 {"selsr",   "d,v,t",	0x00000001, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		L1	},
   2125 {"seq",     "d,v,t",	0,    (int) M_SEQ,	INSN_MACRO,		0,		I1	},
   2126 {"seq",     "d,v,I",	0,    (int) M_SEQ_I,	INSN_MACRO,		0,		I1	},
   2127 {"sge",     "d,v,t",	0,    (int) M_SGE,	INSN_MACRO,		0,		I1	},
   2128 {"sge",     "d,v,I",	0,    (int) M_SGE_I,	INSN_MACRO,		0,		I1	},
   2129 {"sgeu",    "d,v,t",	0,    (int) M_SGEU,	INSN_MACRO,		0,		I1	},
   2130 {"sgeu",    "d,v,I",	0,    (int) M_SGEU_I,	INSN_MACRO,		0,		I1	},
   2131 {"sgt",     "d,v,t",	0,    (int) M_SGT,	INSN_MACRO,		0,		I1	},
   2132 {"sgt",     "d,v,I",	0,    (int) M_SGT_I,	INSN_MACRO,		0,		I1	},
   2133 {"sgtu",    "d,v,t",	0,    (int) M_SGTU,	INSN_MACRO,		0,		I1	},
   2134 {"sgtu",    "d,v,I",	0,    (int) M_SGTU_I,	INSN_MACRO,		0,		I1	},
   2135 {"sh",      "t,o(b)",	0xa4000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I1	},
   2136 {"sh",      "t,A(b)",	0,    (int) M_SH_AB,	INSN_MACRO,		0,		I1	},
   2137 {"shfl.bfla.qh", "X,Y,Z", 0x7a20001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2138 {"shfl.mixh.ob", "X,Y,Z", 0x7980001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2139 {"shfl.mixh.ob", "D,S,T", 0x4980001f, 0xffe0003f, WR_D|RD_S|RD_T, 	0,		N54	},
   2140 {"shfl.mixh.qh", "X,Y,Z", 0x7820001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2141 {"shfl.mixl.ob", "X,Y,Z", 0x79c0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2142 {"shfl.mixl.ob", "D,S,T", 0x49c0001f, 0xffe0003f, WR_D|RD_S|RD_T, 	0,		N54	},
   2143 {"shfl.mixl.qh", "X,Y,Z", 0x78a0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2144 {"shfl.pach.ob", "X,Y,Z", 0x7900001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2145 {"shfl.pach.ob", "D,S,T", 0x4900001f, 0xffe0003f, WR_D|RD_S|RD_T, 	0,		N54	},
   2146 {"shfl.pach.qh", "X,Y,Z", 0x7920001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2147 {"shfl.pacl.ob", "D,S,T", 0x4940001f, 0xffe0003f, WR_D|RD_S|RD_T, 	0,		N54	},
   2148 {"shfl.repa.qh", "X,Y,Z", 0x7b20001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2149 {"shfl.repb.qh", "X,Y,Z", 0x7ba0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2150 {"shfl.upsl.ob", "X,Y,Z", 0x78c0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2151 {"sle",     "d,v,t",	0,    (int) M_SLE,	INSN_MACRO,		0,		I1	},
   2152 {"sle",     "d,v,I",	0,    (int) M_SLE_I,	INSN_MACRO,		0,		I1	},
   2153 {"sleu",    "d,v,t",	0,    (int) M_SLEU,	INSN_MACRO,		0,		I1	},
   2154 {"sleu",    "d,v,I",	0,    (int) M_SLEU_I,	INSN_MACRO,		0,		I1	},
   2155 {"sllv",    "d,t,s",	0x00000004, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I1	},
   2156 {"sll",     "d,w,s",	0x00000004, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I1	}, /* sllv */
   2157 {"sll",     "d,w,<",	0x00000000, 0xffe0003f,	WR_d|RD_t,		0,		I1	},
   2158 {"sll.ob",  "X,Y,Q",	0x78000010, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2159 {"sll.ob",  "D,S,T[e]",	0x48000010, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2160 {"sll.ob",  "D,S,k",	0x4bc00010, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2161 {"sll.qh",  "X,Y,Q",	0x78200010, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2162 {"slt",     "d,v,t",	0x0000002a, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   2163 {"slt",     "d,v,I",	0,    (int) M_SLT_I,	INSN_MACRO,		0,		I1	},
   2164 {"slti",    "t,r,j",	0x28000000, 0xfc000000,	WR_t|RD_s,		0,		I1	},
   2165 {"sltiu",   "t,r,j",	0x2c000000, 0xfc000000,	WR_t|RD_s,		0,		I1	},
   2166 {"sltu",    "d,v,t",	0x0000002b, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   2167 {"sltu",    "d,v,I",	0,    (int) M_SLTU_I,	INSN_MACRO,		0,		I1	},
   2168 {"sne",     "d,v,t",	0,    (int) M_SNE,	INSN_MACRO,		0,		I1	},
   2169 {"sne",     "d,v,I",	0,    (int) M_SNE_I,	INSN_MACRO,		0,		I1	},
   2170 {"sqrt.d",  "D,S",	0x46200004, 0xffff003f, WR_D|RD_S|FP_D,		0,		I2	},
   2171 {"sqrt.s",  "D,S",	0x46000004, 0xffff003f, WR_D|RD_S|FP_S,		0,		I2	},
   2172 {"sqrt.ps", "D,S",	0x46c00004, 0xffff003f, WR_D|RD_S|FP_D,		0,		SB1	},
   2173 {"srav",    "d,t,s",	0x00000007, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I1	},
   2174 {"sra",     "d,w,s",	0x00000007, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I1	}, /* srav */
   2175 {"sra",     "d,w,<",	0x00000003, 0xffe0003f,	WR_d|RD_t,		0,		I1	},
   2176 {"sra.qh",  "X,Y,Q",	0x78200013, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2177 {"srlv",    "d,t,s",	0x00000006, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I1	},
   2178 {"srl",     "d,w,s",	0x00000006, 0xfc0007ff,	WR_d|RD_t|RD_s,		0,		I1	}, /* srlv */
   2179 {"srl",     "d,w,<",	0x00000002, 0xffe0003f,	WR_d|RD_t,		0,		I1	},
   2180 {"srl.ob",  "X,Y,Q",	0x78000012, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2181 {"srl.ob",  "D,S,T[e]",	0x48000012, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2182 {"srl.ob",  "D,S,k",	0x4bc00012, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2183 {"srl.qh",  "X,Y,Q",	0x78200012, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2184 /* ssnop is at the start of the table.  */
   2185 {"standby", "",         0x42000021, 0xffffffff,	0,			0,		V1	},
   2186 {"sub",     "d,v,t",	0x00000022, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   2187 {"sub",     "d,v,I",	0,    (int) M_SUB_I,	INSN_MACRO,		0,		I1	},
   2188 {"sub.d",   "D,V,T",	0x46200001, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I1	},
   2189 {"sub.s",   "D,V,T",	0x46000001, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		I1	},
   2190 {"sub.ob",  "X,Y,Q",	0x7800000a, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2191 {"sub.ob",  "D,S,T",	0x4ac0000a, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2192 {"sub.ob",  "D,S,T[e]",	0x4800000a, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2193 {"sub.ob",  "D,S,k",	0x4bc0000a, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2194 {"sub.ps",  "D,V,T",	0x46c00001, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I5|I33	},
   2195 {"sub.qh",  "X,Y,Q",	0x7820000a, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2196 {"suba.ob", "Y,Q",	0x78000036, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX|SB1	},
   2197 {"suba.qh", "Y,Q",	0x78200036, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   2198 {"subl.ob", "Y,Q",	0x78000436, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX|SB1	},
   2199 {"subl.qh", "Y,Q",	0x78200436, 0xfc2007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   2200 {"subu",    "d,v,t",	0x00000023, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   2201 {"subu",    "d,v,I",	0,    (int) M_SUBU_I,	INSN_MACRO,		0,		I1	},
   2202 {"suspend", "",         0x42000022, 0xffffffff,	0,			0,		V1	},
   2203 {"suxc1",   "S,t(b)",   0x4c00000d, 0xfc0007ff, SM|RD_S|RD_t|RD_b,	0,		I5|I33|N55},
   2204 {"sw",      "t,o(b)",	0xac000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I1	},
   2205 {"sw",      "t,A(b)",	0,    (int) M_SW_AB,	INSN_MACRO,		0,		I1	},
   2206 {"swc0",    "E,o(b)",	0xe0000000, 0xfc000000,	SM|RD_C0|RD_b,		0,		I1	},
   2207 {"swc0",    "E,A(b)",	0,    (int) M_SWC0_AB,	INSN_MACRO,		0,		I1	},
   2208 {"swc1",    "T,o(b)",	0xe4000000, 0xfc000000,	SM|RD_T|RD_b|FP_S,	0,		I1	},
   2209 {"swc1",    "E,o(b)",	0xe4000000, 0xfc000000,	SM|RD_T|RD_b|FP_S,	0,		I1	},
   2210 {"swc1",    "T,A(b)",	0,    (int) M_SWC1_AB,	INSN_MACRO,		0,		I1	},
   2211 {"swc1",    "E,A(b)",	0,    (int) M_SWC1_AB,	INSN_MACRO,		0,		I1	},
   2212 {"s.s",     "T,o(b)",	0xe4000000, 0xfc000000,	SM|RD_T|RD_b|FP_S,	0,		I1	}, /* swc1 */
   2213 {"s.s",     "T,A(b)",	0,    (int) M_SWC1_AB,	INSN_MACRO,		0,		I1	},
   2214 {"swc2",    "E,o(b)",	0xe8000000, 0xfc000000,	SM|RD_C2|RD_b,		0,		I1	},
   2215 {"swc2",    "E,A(b)",	0,    (int) M_SWC2_AB,	INSN_MACRO,		0,		I1	},
   2216 {"swc3",    "E,o(b)",	0xec000000, 0xfc000000,	SM|RD_C3|RD_b,		0,		I1	},
   2217 {"swc3",    "E,A(b)",	0,    (int) M_SWC3_AB,	INSN_MACRO,		0,		I1	},
   2218 {"swl",     "t,o(b)",	0xa8000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I1	},
   2219 {"swl",     "t,A(b)",	0,    (int) M_SWL_AB,	INSN_MACRO,		0,		I1	},
   2220 {"scache",  "t,o(b)",	0xa8000000, 0xfc000000,	RD_t|RD_b,		0,		I2	}, /* same */
   2221 {"scache",  "t,A(b)",	0,    (int) M_SWL_AB,	INSN_MACRO,		0,		I2	}, /* as swl */
   2222 {"swr",     "t,o(b)",	0xb8000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I1	},
   2223 {"swr",     "t,A(b)",	0,    (int) M_SWR_AB,	INSN_MACRO,		0,		I1	},
   2224 {"invalidate", "t,o(b)",0xb8000000, 0xfc000000,	RD_t|RD_b,		0,		I2	}, /* same */
   2225 {"invalidate", "t,A(b)",0,    (int) M_SWR_AB,	INSN_MACRO,		0,		I2	}, /* as swr */
   2226 {"swxc1",   "S,t(b)",   0x4c000008, 0xfc0007ff, SM|RD_S|RD_t|RD_b|FP_S,	0,		I4|I33	},
   2227 {"sync",    "",		0x0000000f, 0xffffffff,	INSN_SYNC,		0,		I2|G1	},
   2228 {"sync.p",  "",		0x0000040f, 0xffffffff,	INSN_SYNC,		0,		I2	},
   2229 {"sync.l",  "",		0x0000000f, 0xffffffff,	INSN_SYNC,		0,		I2	},
   2230 {"synci",   "o(b)",	0x041f0000, 0xfc1f0000,	SM|RD_b,		0,		I33	},
   2231 {"syscall", "",		0x0000000c, 0xffffffff,	TRAP,			0,		I1	},
   2232 {"syscall", "B",	0x0000000c, 0xfc00003f,	TRAP,			0,		I1	},
   2233 {"teqi",    "s,j",	0x040c0000, 0xfc1f0000, RD_s|TRAP,		0,		I2	},
   2234 {"teq",	    "s,t",	0x00000034, 0xfc00ffff, RD_s|RD_t|TRAP,		0,		I2	},
   2235 {"teq",	    "s,t,q",	0x00000034, 0xfc00003f, RD_s|RD_t|TRAP,		0,		I2	},
   2236 {"teq",     "s,j",	0x040c0000, 0xfc1f0000, RD_s|TRAP,		0,		I2	}, /* teqi */
   2237 {"teq",     "s,I",	0,    (int) M_TEQ_I,	INSN_MACRO,		0,		I2	},
   2238 {"tgei",    "s,j",	0x04080000, 0xfc1f0000, RD_s|TRAP,		0,		I2	},
   2239 {"tge",	    "s,t",	0x00000030, 0xfc00ffff,	RD_s|RD_t|TRAP,		0,		I2	},
   2240 {"tge",	    "s,t,q",	0x00000030, 0xfc00003f,	RD_s|RD_t|TRAP,		0,		I2	},
   2241 {"tge",     "s,j",	0x04080000, 0xfc1f0000, RD_s|TRAP,		0,		I2	}, /* tgei */
   2242 {"tge",	    "s,I",	0,    (int) M_TGE_I,    INSN_MACRO,		0,		I2	},
   2243 {"tgeiu",   "s,j",	0x04090000, 0xfc1f0000, RD_s|TRAP,		0,		I2	},
   2244 {"tgeu",    "s,t",	0x00000031, 0xfc00ffff, RD_s|RD_t|TRAP,		0,		I2	},
   2245 {"tgeu",    "s,t,q",	0x00000031, 0xfc00003f, RD_s|RD_t|TRAP,		0,		I2	},
   2246 {"tgeu",    "s,j",	0x04090000, 0xfc1f0000, RD_s|TRAP,		0,		I2	}, /* tgeiu */
   2247 {"tgeu",    "s,I",	0,    (int) M_TGEU_I,	INSN_MACRO,		0,		I2	},
   2248 {"tlbp",    "",         0x42000008, 0xffffffff, INSN_TLB,       	0,		I1   	},
   2249 {"tlbr",    "",         0x42000001, 0xffffffff, INSN_TLB,       	0,		I1   	},
   2250 {"tlbwi",   "",         0x42000002, 0xffffffff, INSN_TLB,       	0,		I1   	},
   2251 {"tlbwr",   "",         0x42000006, 0xffffffff, INSN_TLB,       	0,		I1   	},
   2252 {"tlti",    "s,j",	0x040a0000, 0xfc1f0000,	RD_s|TRAP,		0,		I2	},
   2253 {"tlt",     "s,t",	0x00000032, 0xfc00ffff, RD_s|RD_t|TRAP,		0,		I2	},
   2254 {"tlt",     "s,t,q",	0x00000032, 0xfc00003f, RD_s|RD_t|TRAP,		0,		I2	},
   2255 {"tlt",     "s,j",	0x040a0000, 0xfc1f0000,	RD_s|TRAP,		0,		I2	}, /* tlti */
   2256 {"tlt",     "s,I",	0,    (int) M_TLT_I,	INSN_MACRO,		0,		I2	},
   2257 {"tltiu",   "s,j",	0x040b0000, 0xfc1f0000, RD_s|TRAP,		0,		I2	},
   2258 {"tltu",    "s,t",	0x00000033, 0xfc00ffff, RD_s|RD_t|TRAP,		0,		I2	},
   2259 {"tltu",    "s,t,q",	0x00000033, 0xfc00003f, RD_s|RD_t|TRAP,		0,		I2	},
   2260 {"tltu",    "s,j",	0x040b0000, 0xfc1f0000, RD_s|TRAP,		0,		I2	}, /* tltiu */
   2261 {"tltu",    "s,I",	0,    (int) M_TLTU_I,	INSN_MACRO,		0,		I2	},
   2262 {"tnei",    "s,j",	0x040e0000, 0xfc1f0000, RD_s|TRAP,		0,		I2	},
   2263 {"tne",     "s,t",	0x00000036, 0xfc00ffff, RD_s|RD_t|TRAP,		0,		I2	},
   2264 {"tne",     "s,t,q",	0x00000036, 0xfc00003f, RD_s|RD_t|TRAP,		0,		I2	},
   2265 {"tne",     "s,j",	0x040e0000, 0xfc1f0000, RD_s|TRAP,		0,		I2	}, /* tnei */
   2266 {"tne",     "s,I",	0,    (int) M_TNE_I,	INSN_MACRO,		0,		I2	},
   2267 {"trunc.l.d", "D,S",	0x46200009, 0xffff003f, WR_D|RD_S|FP_D,		0,		I3|I33	},
   2268 {"trunc.l.s", "D,S",	0x46000009, 0xffff003f,	WR_D|RD_S|FP_S|FP_D,	0,		I3|I33	},
   2269 {"trunc.w.d", "D,S",	0x4620000d, 0xffff003f, WR_D|RD_S|FP_S|FP_D,	0,		I2	},
   2270 {"trunc.w.d", "D,S,x",	0x4620000d, 0xffff003f, WR_D|RD_S|FP_S|FP_D,	0,		I2	},
   2271 {"trunc.w.d", "D,S,t",	0,    (int) M_TRUNCWD,	INSN_MACRO,		0,		I1	},
   2272 {"trunc.w.s", "D,S",	0x4600000d, 0xffff003f,	WR_D|RD_S|FP_S,		0,		I2	},
   2273 {"trunc.w.s", "D,S,x",	0x4600000d, 0xffff003f,	WR_D|RD_S|FP_S,		0,		I2	},
   2274 {"trunc.w.s", "D,S,t",	0,    (int) M_TRUNCWS,	INSN_MACRO,		0,		I1	},
   2275 {"uld",     "t,o(b)",	0,    (int) M_ULD,	INSN_MACRO,		0,		I3	},
   2276 {"uld",     "t,A(b)",	0,    (int) M_ULD_A,	INSN_MACRO,		0,		I3	},
   2277 {"ulh",     "t,o(b)",	0,    (int) M_ULH,	INSN_MACRO,		0,		I1	},
   2278 {"ulh",     "t,A(b)",	0,    (int) M_ULH_A,	INSN_MACRO,		0,		I1	},
   2279 {"ulhu",    "t,o(b)",	0,    (int) M_ULHU,	INSN_MACRO,		0,		I1	},
   2280 {"ulhu",    "t,A(b)",	0,    (int) M_ULHU_A,	INSN_MACRO,		0,		I1	},
   2281 {"ulw",     "t,o(b)",	0,    (int) M_ULW,	INSN_MACRO,		0,		I1	},
   2282 {"ulw",     "t,A(b)",	0,    (int) M_ULW_A,	INSN_MACRO,		0,		I1	},
   2283 {"usd",     "t,o(b)",	0,    (int) M_USD,	INSN_MACRO,		0,		I3	},
   2284 {"usd",     "t,A(b)",	0,    (int) M_USD_A,	INSN_MACRO,		0,		I3	},
   2285 {"ush",     "t,o(b)",	0,    (int) M_USH,	INSN_MACRO,		0,		I1	},
   2286 {"ush",     "t,A(b)",	0,    (int) M_USH_A,	INSN_MACRO,		0,		I1	},
   2287 {"usw",     "t,o(b)",	0,    (int) M_USW,	INSN_MACRO,		0,		I1	},
   2288 {"usw",     "t,A(b)",	0,    (int) M_USW_A,	INSN_MACRO,		0,		I1	},
   2289 {"wach.ob", "Y",	0x7a00003e, 0xffff07ff,	RD_S|FP_D,		WR_MACC,	MX|SB1	},
   2290 {"wach.ob", "S",	0x4a00003e, 0xffff07ff,	RD_S,			0,		N54	},
   2291 {"wach.qh", "Y",	0x7a20003e, 0xffff07ff,	RD_S|FP_D,		WR_MACC,	MX	},
   2292 {"wacl.ob", "Y,Z",	0x7800003e, 0xffe007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX|SB1	},
   2293 {"wacl.ob", "S,T",	0x4800003e, 0xffe007ff,	RD_S|RD_T,		0,		N54	},
   2294 {"wacl.qh", "Y,Z",	0x7820003e, 0xffe007ff,	RD_S|RD_T|FP_D,		WR_MACC,	MX	},
   2295 {"wait",    "",         0x42000020, 0xffffffff, TRAP,   		0,		I3|I32	},
   2296 {"wait",    "J",        0x42000020, 0xfe00003f, TRAP,   		0,		I32|N55	},
   2297 {"waiti",   "",		0x42000020, 0xffffffff,	TRAP,			0,		L1	},
   2298 {"wrpgpr",  "d,w",	0x41c00000, 0xffe007ff, RD_t,			0,		I33	},
   2299 {"wsbh",    "d,w",	0x7c0000a0, 0xffe007ff,	WR_d|RD_t,		0,		I33	},
   2300 {"xor",     "d,v,t",	0x00000026, 0xfc0007ff,	WR_d|RD_s|RD_t,		0,		I1	},
   2301 {"xor",     "t,r,I",	0,    (int) M_XOR_I,	INSN_MACRO,		0,		I1	},
   2302 {"xor.ob",  "X,Y,Q",	0x7800000d, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
   2303 {"xor.ob",  "D,S,T",	0x4ac0000d, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2304 {"xor.ob",  "D,S,T[e]",	0x4800000d, 0xfe20003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2305 {"xor.ob",  "D,S,k",	0x4bc0000d, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
   2306 {"xor.qh",  "X,Y,Q",	0x7820000d, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
   2307 {"xori",    "t,r,i",	0x38000000, 0xfc000000,	WR_t|RD_s,		0,		I1	},
   2308 {"yield",   "s",	0x7c000009, 0xfc1fffff, TRAP|RD_s,		0,		MT32	},
   2309 {"yield",   "d,s",	0x7c000009, 0xfc1f07ff, TRAP|WR_d|RD_s,		0,		MT32	},
   2310 
   2311 /* User Defined Instruction.  */
   2312 {"udi0",     "s,t,d,+1",0x70000010, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2313 {"udi0",     "s,t,+2",	0x70000010, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2314 {"udi0",     "s,+3",	0x70000010, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2315 {"udi0",     "+4",	0x70000010, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2316 {"udi1",     "s,t,d,+1",0x70000011, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2317 {"udi1",     "s,t,+2",	0x70000011, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2318 {"udi1",     "s,+3",	0x70000011, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2319 {"udi1",     "+4",	0x70000011, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2320 {"udi2",     "s,t,d,+1",0x70000012, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2321 {"udi2",     "s,t,+2",	0x70000012, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2322 {"udi2",     "s,+3",	0x70000012, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2323 {"udi2",     "+4",	0x70000012, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2324 {"udi3",     "s,t,d,+1",0x70000013, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2325 {"udi3",     "s,t,+2",	0x70000013, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2326 {"udi3",     "s,+3",	0x70000013, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2327 {"udi3",     "+4",	0x70000013, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2328 {"udi4",     "s,t,d,+1",0x70000014, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2329 {"udi4",     "s,t,+2",	0x70000014, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2330 {"udi4",     "s,+3",	0x70000014, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2331 {"udi4",     "+4",	0x70000014, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2332 {"udi5",     "s,t,d,+1",0x70000015, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2333 {"udi5",     "s,t,+2",	0x70000015, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2334 {"udi5",     "s,+3",	0x70000015, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2335 {"udi5",     "+4",	0x70000015, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2336 {"udi6",     "s,t,d,+1",0x70000016, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2337 {"udi6",     "s,t,+2",	0x70000016, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2338 {"udi6",     "s,+3",	0x70000016, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2339 {"udi6",     "+4",	0x70000016, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2340 {"udi7",     "s,t,d,+1",0x70000017, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2341 {"udi7",     "s,t,+2",	0x70000017, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2342 {"udi7",     "s,+3",	0x70000017, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2343 {"udi7",     "+4",	0x70000017, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2344 {"udi8",     "s,t,d,+1",0x70000018, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2345 {"udi8",     "s,t,+2",	0x70000018, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2346 {"udi8",     "s,+3",	0x70000018, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2347 {"udi8",     "+4",	0x70000018, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2348 {"udi9",     "s,t,d,+1",0x70000019, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2349 {"udi9",      "s,t,+2",	0x70000019, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2350 {"udi9",     "s,+3",	0x70000019, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2351 {"udi9",     "+4",	0x70000019, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2352 {"udi10",    "s,t,d,+1",0x7000001a, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2353 {"udi10",    "s,t,+2",	0x7000001a, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2354 {"udi10",    "s,+3",	0x7000001a, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2355 {"udi10",    "+4",	0x7000001a, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2356 {"udi11",    "s,t,d,+1",0x7000001b, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2357 {"udi11",    "s,t,+2",	0x7000001b, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2358 {"udi11",    "s,+3",	0x7000001b, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2359 {"udi11",    "+4",	0x7000001b, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2360 {"udi12",    "s,t,d,+1",0x7000001c, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2361 {"udi12",    "s,t,+2",	0x7000001c, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2362 {"udi12",    "s,+3",	0x7000001c, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2363 {"udi12",    "+4",	0x7000001c, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2364 {"udi13",    "s,t,d,+1",0x7000001d, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2365 {"udi13",    "s,t,+2",	0x7000001d, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2366 {"udi13",    "s,+3",	0x7000001d, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2367 {"udi13",    "+4",	0x7000001d, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2368 {"udi14",    "s,t,d,+1",0x7000001e, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2369 {"udi14",    "s,t,+2",	0x7000001e, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2370 {"udi14",    "s,+3",	0x7000001e, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2371 {"udi14",    "+4",	0x7000001e, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2372 {"udi15",    "s,t,d,+1",0x7000001f, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2373 {"udi15",    "s,t,+2",	0x7000001f, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2374 {"udi15",    "s,+3",	0x7000001f, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2375 {"udi15",    "+4",	0x7000001f, 0xfc00003f,	WR_d|RD_s|RD_t,		0,		I33	},
   2376 
   2377 /* Coprocessor 2 move/branch operations overlap with VR5400 .ob format
   2378    instructions so they are here for the latters to take precedence.  */
   2379 {"bc2f",    "p",	0x49000000, 0xffff0000,	CBD|RD_CC,		0,		I1	},
   2380 {"bc2f",    "N,p",	0x49000000, 0xffe30000,	CBD|RD_CC,		0,		I32	},
   2381 {"bc2fl",   "p",	0x49020000, 0xffff0000,	CBL|RD_CC,		0,		I2|T3	},
   2382 {"bc2fl",   "N,p",	0x49020000, 0xffe30000,	CBL|RD_CC,		0,		I32	},
   2383 {"bc2t",    "p",	0x49010000, 0xffff0000,	CBD|RD_CC,		0,		I1	},
   2384 {"bc2t",    "N,p",	0x49010000, 0xffe30000,	CBD|RD_CC,		0,		I32	},
   2385 {"bc2tl",   "p",	0x49030000, 0xffff0000,	CBL|RD_CC,		0,		I2|T3	},
   2386 {"bc2tl",   "N,p",	0x49030000, 0xffe30000,	CBL|RD_CC,		0,		I32	},
   2387 {"cfc2",    "t,G",	0x48400000, 0xffe007ff,	LCD|WR_t|RD_C2,		0,		I1	},
   2388 {"ctc2",    "t,G",	0x48c00000, 0xffe007ff,	COD|RD_t|WR_CC,		0,		I1	},
   2389 {"dmfc2",   "t,G",	0x48200000, 0xffe007ff,	LCD|WR_t|RD_C2,		0,		I3	},
   2390 {"dmfc2",   "t,G,H",	0x48200000, 0xffe007f8,	LCD|WR_t|RD_C2,		0,		I64	},
   2391 {"dmtc2",   "t,G",	0x48a00000, 0xffe007ff,	COD|RD_t|WR_C2|WR_CC,	0,		I3	},
   2392 {"dmtc2",   "t,G,H",	0x48a00000, 0xffe007f8,	COD|RD_t|WR_C2|WR_CC,	0,		I64	},
   2393 {"mfc2",    "t,G",	0x48000000, 0xffe007ff,	LCD|WR_t|RD_C2,		0,		I1	},
   2394 {"mfc2",    "t,G,H",	0x48000000, 0xffe007f8,	LCD|WR_t|RD_C2,		0,		I32	},
   2395 {"mfhc2",   "t,G",	0x48600000, 0xffe007ff,	LCD|WR_t|RD_C2,		0,		I33	},
   2396 {"mfhc2",   "t,G,H",	0x48600000, 0xffe007f8,	LCD|WR_t|RD_C2,		0,		I33	},
   2397 {"mfhc2",   "t,i",	0x48600000, 0xffe00000,	LCD|WR_t|RD_C2,		0,		I33	},
   2398 {"mtc2",    "t,G",	0x48800000, 0xffe007ff,	COD|RD_t|WR_C2|WR_CC,	0,		I1	},
   2399 {"mtc2",    "t,G,H",	0x48800000, 0xffe007f8,	COD|RD_t|WR_C2|WR_CC,	0,		I32	},
   2400 {"mthc2",   "t,G",	0x48e00000, 0xffe007ff,	COD|RD_t|WR_C2|WR_CC,	0,		I33	},
   2401 {"mthc2",   "t,G,H",	0x48e00000, 0xffe007f8,	COD|RD_t|WR_C2|WR_CC,	0,		I33	},
   2402 {"mthc2",   "t,i",	0x48e00000, 0xffe00000,	COD|RD_t|WR_C2|WR_CC,	0,		I33	},
   2403 
   2404 /* Coprocessor 3 move/branch operations overlap with MIPS IV COP1X
   2405    instructions, so they are here for the latters to take precedence.  */
   2406 {"bc3f",    "p",	0x4d000000, 0xffff0000,	CBD|RD_CC,		0,		I1	},
   2407 {"bc3fl",   "p",	0x4d020000, 0xffff0000,	CBL|RD_CC,		0,		I2|T3	},
   2408 {"bc3t",    "p",	0x4d010000, 0xffff0000,	CBD|RD_CC,		0,		I1	},
   2409 {"bc3tl",   "p",	0x4d030000, 0xffff0000,	CBL|RD_CC,		0,		I2|T3	},
   2410 {"cfc3",    "t,G",	0x4c400000, 0xffe007ff,	LCD|WR_t|RD_C3,		0,		I1	},
   2411 {"ctc3",    "t,G",	0x4cc00000, 0xffe007ff,	COD|RD_t|WR_CC,		0,		I1	},
   2412 {"dmfc3",   "t,G",	0x4c200000, 0xffe007ff, LCD|WR_t|RD_C3, 	0,		I3	},
   2413 {"dmtc3",   "t,G",	0x4ca00000, 0xffe007ff, COD|RD_t|WR_C3|WR_CC,	0,		I3	},
   2414 {"mfc3",    "t,G",	0x4c000000, 0xffe007ff,	LCD|WR_t|RD_C3,		0,		I1	},
   2415 {"mfc3",    "t,G,H",    0x4c000000, 0xffe007f8, LCD|WR_t|RD_C3, 	0,		I32     },
   2416 {"mtc3",    "t,G",	0x4c800000, 0xffe007ff,	COD|RD_t|WR_C3|WR_CC,	0,		I1	},
   2417 {"mtc3",    "t,G,H",    0x4c800000, 0xffe007f8, COD|RD_t|WR_C3|WR_CC,   0,		I32     },
   2418 
   2419 /* No hazard protection on coprocessor instructions--they shouldn't
   2420    change the state of the processor and if they do it's up to the
   2421    user to put in nops as necessary.  These are at the end so that the
   2422    disassembler recognizes more specific versions first.  */
   2423 {"c0",      "C",	0x42000000, 0xfe000000,	0,			0,		I1	},
   2424 {"c1",      "C",	0x46000000, 0xfe000000,	0,			0,		I1	},
   2425 {"c2",      "C",	0x4a000000, 0xfe000000,	0,			0,		I1	},
   2426 {"c3",      "C",	0x4e000000, 0xfe000000,	0,			0,		I1	},
   2427 {"cop0",     "C",	0,    (int) M_COP0,	INSN_MACRO,		0,		I1	},
   2428 {"cop1",     "C",	0,    (int) M_COP1,	INSN_MACRO,		0,		I1	},
   2429 {"cop2",     "C",	0,    (int) M_COP2,	INSN_MACRO,		0,		I1	},
   2430 {"cop3",     "C",	0,    (int) M_COP3,	INSN_MACRO,		0,		I1	},
   2431   /* Conflicts with the 4650's "mul" instruction.  Nobody's using the
   2432      4010 any more, so move this insn out of the way.  If the object
   2433      format gave us more info, we could do this right.  */
   2434 {"addciu",  "t,r,j",	0x70000000, 0xfc000000,	WR_t|RD_s,		0,		L1	},
   2435 /* MIPS DSP ASE */
   2436 {"absq_s.ph", "d,t",	0x7c000252, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2437 {"absq_s.pw", "d,t",	0x7c000456, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2438 {"absq_s.qh", "d,t",	0x7c000256, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2439 {"absq_s.w", "d,t",	0x7c000452, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2440 {"addq.ph", "d,s,t",	0x7c000290, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2441 {"addq.pw", "d,s,t",	0x7c000494, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2442 {"addq.qh", "d,s,t",	0x7c000294, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2443 {"addq_s.ph", "d,s,t",	0x7c000390, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2444 {"addq_s.pw", "d,s,t",	0x7c000594, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2445 {"addq_s.qh", "d,s,t",	0x7c000394, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2446 {"addq_s.w", "d,s,t",	0x7c000590, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2447 {"addsc",   "d,s,t",	0x7c000410, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2448 {"addu.ob", "d,s,t",	0x7c000014, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2449 {"addu.qb", "d,s,t",	0x7c000010, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2450 {"addu_s.ob", "d,s,t",	0x7c000114, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2451 {"addu_s.qb", "d,s,t",	0x7c000110, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2452 {"addwc",   "d,s,t",	0x7c000450, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2453 {"bitrev",  "d,t",	0x7c0006d2, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2454 {"bposge32", "p",	0x041c0000, 0xffff0000, CBD,			0,		D32	},
   2455 {"bposge64", "p",	0x041d0000, 0xffff0000, CBD,			0,		D64	},
   2456 {"cmp.eq.ph", "s,t",	0x7c000211, 0xfc00ffff, RD_s|RD_t,		0,		D32	},
   2457 {"cmp.eq.pw", "s,t",	0x7c000415, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2458 {"cmp.eq.qh", "s,t",	0x7c000215, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2459 {"cmpgu.eq.ob", "d,s,t", 0x7c000115, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D64	},
   2460 {"cmpgu.eq.qb", "d,s,t", 0x7c000111, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D32	},
   2461 {"cmpgu.le.ob", "d,s,t", 0x7c000195, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D64	},
   2462 {"cmpgu.le.qb", "d,s,t", 0x7c000191, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D32	},
   2463 {"cmpgu.lt.ob", "d,s,t", 0x7c000155, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D64	},
   2464 {"cmpgu.lt.qb", "d,s,t", 0x7c000151, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D32	},
   2465 {"cmp.le.ph", "s,t",	0x7c000291, 0xfc00ffff, RD_s|RD_t,		0,		D32	},
   2466 {"cmp.le.pw", "s,t",	0x7c000495, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2467 {"cmp.le.qh", "s,t",	0x7c000295, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2468 {"cmp.lt.ph", "s,t",	0x7c000251, 0xfc00ffff, RD_s|RD_t,		0,		D32	},
   2469 {"cmp.lt.pw", "s,t",	0x7c000455, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2470 {"cmp.lt.qh", "s,t",	0x7c000255, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2471 {"cmpu.eq.ob", "s,t",	0x7c000015, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2472 {"cmpu.eq.qb", "s,t",	0x7c000011, 0xfc00ffff, RD_s|RD_t,		0,		D32	},
   2473 {"cmpu.le.ob", "s,t",	0x7c000095, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2474 {"cmpu.le.qb", "s,t",	0x7c000091, 0xfc00ffff, RD_s|RD_t,		0,		D32	},
   2475 {"cmpu.lt.ob", "s,t",	0x7c000055, 0xfc00ffff, RD_s|RD_t,		0,		D64	},
   2476 {"cmpu.lt.qb", "s,t",	0x7c000051, 0xfc00ffff, RD_s|RD_t,		0,		D32	},
   2477 {"dextpdp", "t,7,6",	0x7c0002bc, 0xfc00e7ff, WR_t|RD_a|DSP_VOLA,	0,		D64	},
   2478 {"dextpdpv", "t,7,s",	0x7c0002fc, 0xfc00e7ff, WR_t|RD_a|RD_s|DSP_VOLA, 0,		D64	},
   2479 {"dextp",   "t,7,6",	0x7c0000bc, 0xfc00e7ff, WR_t|RD_a,		0,		D64	},
   2480 {"dextpv",  "t,7,s",	0x7c0000fc, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D64	},
   2481 {"dextr.l", "t,7,6",	0x7c00043c, 0xfc00e7ff, WR_t|RD_a,		0,		D64	},
   2482 {"dextr_r.l", "t,7,6",	0x7c00053c, 0xfc00e7ff, WR_t|RD_a,		0,		D64	},
   2483 {"dextr_rs.l", "t,7,6",	0x7c0005bc, 0xfc00e7ff, WR_t|RD_a,		0,		D64	},
   2484 {"dextr_rs.w", "t,7,6",	0x7c0001bc, 0xfc00e7ff, WR_t|RD_a,		0,		D64	},
   2485 {"dextr_r.w", "t,7,6",	0x7c00013c, 0xfc00e7ff, WR_t|RD_a,		0,		D64	},
   2486 {"dextr_s.h", "t,7,6",	0x7c0003bc, 0xfc00e7ff, WR_t|RD_a,		0,		D64	},
   2487 {"dextrv.l", "t,7,s",	0x7c00047c, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D64	},
   2488 {"dextrv_r.l", "t,7,s",	0x7c00057c, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D64	},
   2489 {"dextrv_rs.l", "t,7,s", 0x7c0005fc, 0xfc00e7ff, WR_t|RD_a|RD_s,	0,		D64	},
   2490 {"dextrv_rs.w", "t,7,s", 0x7c0001fc, 0xfc00e7ff, WR_t|RD_a|RD_s,	0,		D64	},
   2491 {"dextrv_r.w", "t,7,s",	0x7c00017c, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D64	},
   2492 {"dextrv_s.h", "t,7,s",	0x7c0003fc, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D64	},
   2493 {"dextrv.w", "t,7,s",	0x7c00007c, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D64	},
   2494 {"dextr.w", "t,7,6",	0x7c00003c, 0xfc00e7ff, WR_t|RD_a,		0,		D64	},
   2495 {"dinsv",   "t,s",	0x7c00000d, 0xfc00ffff, WR_t|RD_s,		0,		D64	},
   2496 {"dmadd",   "7,s,t",	0x7c000674, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2497 {"dmaddu",  "7,s,t",	0x7c000774, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2498 {"dmsub",   "7,s,t",	0x7c0006f4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2499 {"dmsubu",  "7,s,t",	0x7c0007f4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2500 {"dmthlip", "s,7",	0x7c0007fc, 0xfc1fe7ff, RD_s|MOD_a|DSP_VOLA,	0,		D64	},
   2501 {"dpaq_sa.l.pw", "7,s,t", 0x7c000334, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2502 {"dpaq_sa.l.w", "7,s,t", 0x7c000330, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2503 {"dpaq_s.w.ph", "7,s,t", 0x7c000130, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2504 {"dpaq_s.w.qh", "7,s,t", 0x7c000134, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2505 {"dpau.h.obl", "7,s,t",	0x7c0000f4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2506 {"dpau.h.obr", "7,s,t",	0x7c0001f4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2507 {"dpau.h.qbl", "7,s,t",	0x7c0000f0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2508 {"dpau.h.qbr", "7,s,t",	0x7c0001f0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2509 {"dpsq_sa.l.pw", "7,s,t", 0x7c000374, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2510 {"dpsq_sa.l.w", "7,s,t", 0x7c000370, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2511 {"dpsq_s.w.ph", "7,s,t", 0x7c000170, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2512 {"dpsq_s.w.qh", "7,s,t", 0x7c000174, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2513 {"dpsu.h.obl", "7,s,t",	0x7c0002f4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2514 {"dpsu.h.obr", "7,s,t",	0x7c0003f4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2515 {"dpsu.h.qbl", "7,s,t",	0x7c0002f0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2516 {"dpsu.h.qbr", "7,s,t",	0x7c0003f0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2517 {"dshilo",  "7,:",	0x7c0006bc, 0xfc07e7ff, MOD_a,			0,		D64	},
   2518 {"dshilov", "7,s",	0x7c0006fc, 0xfc1fe7ff, MOD_a|RD_s,		0,		D64	},
   2519 {"extpdp",  "t,7,6",	0x7c0002b8, 0xfc00e7ff, WR_t|RD_a|DSP_VOLA,	0,		D32	},
   2520 {"extpdpv", "t,7,s",	0x7c0002f8, 0xfc00e7ff, WR_t|RD_a|RD_s|DSP_VOLA, 0,		D32	},
   2521 {"extp",    "t,7,6",	0x7c0000b8, 0xfc00e7ff, WR_t|RD_a,		0,		D32	},
   2522 {"extpv",   "t,7,s",	0x7c0000f8, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D32	},
   2523 {"extr_rs.w", "t,7,6",	0x7c0001b8, 0xfc00e7ff, WR_t|RD_a,		0,		D32	},
   2524 {"extr_r.w", "t,7,6",	0x7c000138, 0xfc00e7ff, WR_t|RD_a,		0,		D32	},
   2525 {"extr_s.h", "t,7,6",	0x7c0003b8, 0xfc00e7ff, WR_t|RD_a,		0,		D32	},
   2526 {"extrv_rs.w", "t,7,s",	0x7c0001f8, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D32	},
   2527 {"extrv_r.w", "t,7,s",	0x7c000178, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D32	},
   2528 {"extrv_s.h", "t,7,s",	0x7c0003f8, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D32	},
   2529 {"extrv.w", "t,7,s",	0x7c000078, 0xfc00e7ff, WR_t|RD_a|RD_s,		0,		D32	},
   2530 {"extr.w",  "t,7,6",	0x7c000038, 0xfc00e7ff, WR_t|RD_a,		0,		D32	},
   2531 {"insv",    "t,s",	0x7c00000c, 0xfc00ffff, WR_t|RD_s,		0,		D32	},
   2532 {"lbux",    "d,t(b)",	0x7c00018a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32	},
   2533 {"ldx",     "d,t(b)",	0x7c00020a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D64	},
   2534 {"lhx",     "d,t(b)",	0x7c00010a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32	},
   2535 {"lwx",     "d,t(b)",	0x7c00000a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b,	0,		D32	},
   2536 {"maq_sa.w.phl", "7,s,t", 0x7c000430, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2537 {"maq_sa.w.phr", "7,s,t", 0x7c0004b0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2538 {"maq_sa.w.qhll", "7,s,t", 0x7c000434, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2539 {"maq_sa.w.qhlr", "7,s,t", 0x7c000474, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2540 {"maq_sa.w.qhrl", "7,s,t", 0x7c0004b4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2541 {"maq_sa.w.qhrr", "7,s,t", 0x7c0004f4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2542 {"maq_s.l.pwl", "7,s,t", 0x7c000734, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2543 {"maq_s.l.pwr", "7,s,t", 0x7c0007b4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2544 {"maq_s.w.phl", "7,s,t", 0x7c000530, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2545 {"maq_s.w.phr", "7,s,t", 0x7c0005b0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2546 {"maq_s.w.qhll", "7,s,t", 0x7c000534, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2547 {"maq_s.w.qhlr", "7,s,t", 0x7c000574, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2548 {"maq_s.w.qhrl", "7,s,t", 0x7c0005b4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2549 {"maq_s.w.qhrr", "7,s,t", 0x7c0005f4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2550 {"modsub",  "d,s,t",	0x7c000490, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2551 {"mthlip",  "s,7",	0x7c0007f8, 0xfc1fe7ff, RD_s|MOD_a|DSP_VOLA,	0,		D32	},
   2552 {"muleq_s.pw.qhl", "d,s,t", 0x7c000714, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		D64	},
   2553 {"muleq_s.pw.qhr", "d,s,t", 0x7c000754, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		D64	},
   2554 {"muleq_s.w.phl", "d,s,t", 0x7c000710, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		D32	},
   2555 {"muleq_s.w.phr", "d,s,t", 0x7c000750, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		D32	},
   2556 {"muleu_s.ph.qbl", "d,s,t", 0x7c000190, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		D32	},
   2557 {"muleu_s.ph.qbr", "d,s,t", 0x7c0001d0, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		D32	},
   2558 {"muleu_s.qh.obl", "d,s,t", 0x7c000194, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		D64	},
   2559 {"muleu_s.qh.obr", "d,s,t", 0x7c0001d4, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,		D64	},
   2560 {"mulq_rs.ph", "d,s,t",	0x7c0007d0, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO,	0,		D32	},
   2561 {"mulq_rs.qh", "d,s,t",	0x7c0007d4, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO,	0,		D64	},
   2562 {"mulsaq_s.l.pw", "7,s,t", 0x7c0003b4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2563 {"mulsaq_s.w.ph", "7,s,t", 0x7c0001b0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D32	},
   2564 {"mulsaq_s.w.qh", "7,s,t", 0x7c0001b4, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,		D64	},
   2565 {"packrl.ph", "d,s,t",	0x7c000391, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2566 {"packrl.pw", "d,s,t",	0x7c000395, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2567 {"pick.ob", "d,s,t",	0x7c0000d5, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2568 {"pick.ph", "d,s,t",	0x7c0002d1, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2569 {"pick.pw", "d,s,t",	0x7c0004d5, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2570 {"pick.qb", "d,s,t",	0x7c0000d1, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2571 {"pick.qh", "d,s,t",	0x7c0002d5, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2572 {"preceq.pw.qhla", "d,t", 0x7c000396, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2573 {"preceq.pw.qhl", "d,t", 0x7c000316, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2574 {"preceq.pw.qhra", "d,t", 0x7c0003d6, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2575 {"preceq.pw.qhr", "d,t", 0x7c000356, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2576 {"preceq.s.l.pwl", "d,t", 0x7c000516, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2577 {"preceq.s.l.pwr", "d,t", 0x7c000556, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2578 {"precequ.ph.qbla", "d,t", 0x7c000192, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2579 {"precequ.ph.qbl", "d,t", 0x7c000112, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2580 {"precequ.ph.qbra", "d,t", 0x7c0001d2, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2581 {"precequ.ph.qbr", "d,t", 0x7c000152, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2582 {"precequ.pw.qhla", "d,t", 0x7c000196, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2583 {"precequ.pw.qhl", "d,t", 0x7c000116, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2584 {"precequ.pw.qhra", "d,t", 0x7c0001d6, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2585 {"precequ.pw.qhr", "d,t", 0x7c000156, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2586 {"preceq.w.phl", "d,t",	0x7c000312, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2587 {"preceq.w.phr", "d,t",	0x7c000352, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2588 {"preceu.ph.qbla", "d,t", 0x7c000792, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2589 {"preceu.ph.qbl", "d,t", 0x7c000712, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2590 {"preceu.ph.qbra", "d,t", 0x7c0007d2, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2591 {"preceu.ph.qbr", "d,t", 0x7c000752, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2592 {"preceu.qh.obla", "d,t", 0x7c000796, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2593 {"preceu.qh.obl", "d,t", 0x7c000716, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2594 {"preceu.qh.obra", "d,t", 0x7c0007d6, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2595 {"preceu.qh.obr", "d,t", 0x7c000756, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2596 {"precrq.ob.qh", "d,s,t", 0x7c000315, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D64	},
   2597 {"precrq.ph.w", "d,s,t", 0x7c000511, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D32	},
   2598 {"precrq.pw.l", "d,s,t", 0x7c000715, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D64	},
   2599 {"precrq.qb.ph", "d,s,t", 0x7c000311, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D32	},
   2600 {"precrq.qh.pw", "d,s,t", 0x7c000515, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D64	},
   2601 {"precrq_rs.ph.w", "d,s,t", 0x7c000551, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D32	},
   2602 {"precrq_rs.qh.pw", "d,s,t", 0x7c000555, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D64	},
   2603 {"precrqu_s.ob.qh", "d,s,t", 0x7c0003d5, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D64	},
   2604 {"precrqu_s.qb.ph", "d,s,t", 0x7c0003d1, 0xfc0007ff, WR_d|RD_s|RD_t,	0,		D32	},
   2605 {"raddu.l.ob", "d,s",	0x7c000514, 0xfc1f07ff, WR_d|RD_s,		0,		D64	},
   2606 {"raddu.w.qb", "d,s",	0x7c000510, 0xfc1f07ff, WR_d|RD_s,		0,		D32	},
   2607 {"rddsp",   "d",	0x7fff04b8, 0xffff07ff, WR_d,			0,		D32	},
   2608 {"rddsp",   "d,'",	0x7c0004b8, 0xffc007ff, WR_d,			0,		D32	},
   2609 {"repl.ob", "d,5",	0x7c000096, 0xff0007ff, WR_d,			0,		D64	},
   2610 {"repl.ph", "d,@",	0x7c000292, 0xfc0007ff, WR_d,			0,		D32	},
   2611 {"repl.pw", "d,@",	0x7c000496, 0xfc0007ff, WR_d,			0,		D64	},
   2612 {"repl.qb", "d,5",	0x7c000092, 0xff0007ff, WR_d,			0,		D32	},
   2613 {"repl.qh", "d,@",	0x7c000296, 0xfc0007ff, WR_d,			0,		D64	},
   2614 {"replv.ob", "d,t",	0x7c0000d6, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2615 {"replv.ph", "d,t",	0x7c0002d2, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2616 {"replv.pw", "d,t",	0x7c0004d6, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2617 {"replv.qb", "d,t",	0x7c0000d2, 0xffe007ff, WR_d|RD_t,		0,		D32	},
   2618 {"replv.qh", "d,t",	0x7c0002d6, 0xffe007ff, WR_d|RD_t,		0,		D64	},
   2619 {"shilo",   "7,0",	0x7c0006b8, 0xfc0fe7ff, MOD_a,			0,		D32	},
   2620 {"shilov",  "7,s",	0x7c0006f8, 0xfc1fe7ff, MOD_a|RD_s,		0,		D32	},
   2621 {"shll.ob", "d,t,3",	0x7c000017, 0xff0007ff, WR_d|RD_t,		0,		D64	},
   2622 {"shll.ph", "d,t,4",	0x7c000213, 0xfe0007ff, WR_d|RD_t,		0,		D32	},
   2623 {"shll.pw", "d,t,6",	0x7c000417, 0xfc0007ff, WR_d|RD_t,		0,		D64	},
   2624 {"shll.qb", "d,t,3",	0x7c000013, 0xff0007ff, WR_d|RD_t,		0,		D32	},
   2625 {"shll.qh", "d,t,4",	0x7c000217, 0xfe0007ff, WR_d|RD_t,		0,		D64	},
   2626 {"shll_s.ph", "d,t,4",	0x7c000313, 0xfe0007ff, WR_d|RD_t,		0,		D32	},
   2627 {"shll_s.pw", "d,t,6",	0x7c000517, 0xfc0007ff, WR_d|RD_t,		0,		D64	},
   2628 {"shll_s.qh", "d,t,4",	0x7c000317, 0xfe0007ff, WR_d|RD_t,		0,		D64	},
   2629 {"shll_s.w", "d,t,6",	0x7c000513, 0xfc0007ff, WR_d|RD_t,		0,		D32	},
   2630 {"shllv.ob", "d,t,s",	0x7c000097, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2631 {"shllv.ph", "d,t,s",	0x7c000293, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2632 {"shllv.pw", "d,t,s",	0x7c000497, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2633 {"shllv.qb", "d,t,s",	0x7c000093, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2634 {"shllv.qh", "d,t,s",	0x7c000297, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2635 {"shllv_s.ph", "d,t,s",	0x7c000393, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2636 {"shllv_s.pw", "d,t,s",	0x7c000597, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2637 {"shllv_s.qh", "d,t,s",	0x7c000397, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2638 {"shllv_s.w", "d,t,s",	0x7c000593, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2639 {"shra.ph", "d,t,4",	0x7c000253, 0xfe0007ff, WR_d|RD_t,		0,		D32	},
   2640 {"shra.pw", "d,t,6",	0x7c000457, 0xfc0007ff, WR_d|RD_t,		0,		D64	},
   2641 {"shra.qh", "d,t,4",	0x7c000257, 0xfe0007ff, WR_d|RD_t,		0,		D64	},
   2642 {"shra_r.ph", "d,t,4",	0x7c000353, 0xfe0007ff, WR_d|RD_t,		0,		D32	},
   2643 {"shra_r.pw", "d,t,6",	0x7c000557, 0xfc0007ff, WR_d|RD_t,		0,		D64	},
   2644 {"shra_r.qh", "d,t,4",	0x7c000357, 0xfe0007ff, WR_d|RD_t,		0,		D64	},
   2645 {"shra_r.w", "d,t,6",	0x7c000553, 0xfc0007ff, WR_d|RD_t,		0,		D32	},
   2646 {"shrav.ph", "d,t,s",	0x7c0002d3, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2647 {"shrav.pw", "d,t,s",	0x7c0004d7, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2648 {"shrav.qh", "d,t,s",	0x7c0002d7, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2649 {"shrav_r.ph", "d,t,s",	0x7c0003d3, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2650 {"shrav_r.pw", "d,t,s",	0x7c0005d7, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2651 {"shrav_r.qh", "d,t,s",	0x7c0003d7, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2652 {"shrav_r.w", "d,t,s",	0x7c0005d3, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2653 {"shrl.ob", "d,t,3",	0x7c000057, 0xff0007ff, WR_d|RD_t,		0,		D64	},
   2654 {"shrl.qb", "d,t,3",	0x7c000053, 0xff0007ff, WR_d|RD_t,		0,		D32	},
   2655 {"shrlv.ob", "d,t,s",	0x7c0000d7, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2656 {"shrlv.qb", "d,t,s",	0x7c0000d3, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2657 {"subq.ph", "d,s,t",	0x7c0002d0, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2658 {"subq.pw", "d,s,t",	0x7c0004d4, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2659 {"subq.qh", "d,s,t",	0x7c0002d4, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2660 {"subq_s.ph", "d,s,t",	0x7c0003d0, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2661 {"subq_s.pw", "d,s,t",	0x7c0005d4, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2662 {"subq_s.qh", "d,s,t",	0x7c0003d4, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2663 {"subq_s.w", "d,s,t",	0x7c0005d0, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2664 {"subu.ob", "d,s,t",	0x7c000054, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2665 {"subu.qb", "d,s,t",	0x7c000050, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2666 {"subu_s.ob", "d,s,t",	0x7c000154, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D64	},
   2667 {"subu_s.qb", "d,s,t",	0x7c000150, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		D32	},
   2668 {"wrdsp",   "s",	0x7c1ffcf8, 0xfc1fffff, RD_s|DSP_VOLA,		0,		D32	},
   2669 {"wrdsp",   "s,8",	0x7c0004f8, 0xfc1e07ff, RD_s|DSP_VOLA,		0,		D32	},
   2670 /* MIPS DSP ASE Rev2 */
   2671 {"absq_s.qb", "d,t",	0x7c000052, 0xffe007ff, WR_d|RD_t,              0,              D33	},
   2672 {"addu.ph", "d,s,t",	0x7c000210, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2673 {"addu_s.ph", "d,s,t",	0x7c000310, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2674 {"adduh.qb", "d,s,t",	0x7c000018, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2675 {"adduh_r.qb", "d,s,t",	0x7c000098, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2676 {"append",  "t,s,h",	0x7c000031, 0xfc0007ff, WR_t|RD_t|RD_s,         0,              D33	},
   2677 {"balign",  "t,s,I",	0,    (int) M_BALIGN,	INSN_MACRO,             0,              D33	},
   2678 {"balign",  "t,s,2",	0x7c000431, 0xfc00e7ff, WR_t|RD_t|RD_s,         0,              D33	},
   2679 {"cmpgdu.eq.qb", "d,s,t", 0x7c000611, 0xfc0007ff, WR_d|RD_s|RD_t,       0,              D33	},
   2680 {"cmpgdu.lt.qb", "d,s,t", 0x7c000651, 0xfc0007ff, WR_d|RD_s|RD_t,       0,              D33	},
   2681 {"cmpgdu.le.qb", "d,s,t", 0x7c000691, 0xfc0007ff, WR_d|RD_s|RD_t,       0,              D33	},
   2682 {"dpa.w.ph", "7,s,t",	0x7c000030, 0xfc00e7ff, MOD_a|RD_s|RD_t,        0,              D33	},
   2683 {"dps.w.ph", "7,s,t",	0x7c000070, 0xfc00e7ff, MOD_a|RD_s|RD_t,        0,              D33	},
   2684 {"mul.ph",  "d,s,t",	0x7c000318, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,              D33	},
   2685 {"mul_s.ph", "d,s,t",	0x7c000398, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,              D33	},
   2686 {"mulq_rs.w", "d,s,t",	0x7c0005d8, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,              D33	},
   2687 {"mulq_s.ph", "d,s,t",	0x7c000790, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,              D33	},
   2688 {"mulq_s.w", "d,s,t",	0x7c000598, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0,              D33	},
   2689 {"mulsa.w.ph", "7,s,t",	0x7c0000b0, 0xfc00e7ff, MOD_a|RD_s|RD_t,        0,              D33	},
   2690 {"precr.qb.ph", "d,s,t", 0x7c000351, 0xfc0007ff, WR_d|RD_s|RD_t,        0,              D33	},
   2691 {"precr_sra.ph.w", "t,s,h", 0x7c000791, 0xfc0007ff, WR_t|RD_t|RD_s,     0,              D33	},
   2692 {"precr_sra_r.ph.w", "t,s,h", 0x7c0007d1, 0xfc0007ff, WR_t|RD_t|RD_s,   0,              D33	},
   2693 {"prepend", "t,s,h",	0x7c000071, 0xfc0007ff, WR_t|RD_t|RD_s,         0,              D33	},
   2694 {"shra.qb", "d,t,3",	0x7c000113, 0xff0007ff, WR_d|RD_t,              0,              D33	},
   2695 {"shra_r.qb", "d,t,3",	0x7c000153, 0xff0007ff, WR_d|RD_t,              0,              D33	},
   2696 {"shrav.qb", "d,t,s",	0x7c000193, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2697 {"shrav_r.qb", "d,t,s",	0x7c0001d3, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2698 {"shrl.ph", "d,t,4",	0x7c000653, 0xfe0007ff, WR_d|RD_t,              0,              D33	},
   2699 {"shrlv.ph", "d,t,s",	0x7c0006d3, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2700 {"subu.ph", "d,s,t",	0x7c000250, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2701 {"subu_s.ph", "d,s,t",	0x7c000350, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2702 {"subuh.qb", "d,s,t",	0x7c000058, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2703 {"subuh_r.qb", "d,s,t",	0x7c0000d8, 0xfc0007ff, WR_d|RD_s|RD_t,         0,              D33	},
   2704 {"addqh.ph", "d,s,t",	0x7c000218, 0xfc0007ff, WR_d|RD_s|RD_t,		0,              D33	},
   2705 {"addqh_r.ph", "d,s,t",	0x7c000298, 0xfc0007ff, WR_d|RD_s|RD_t,		0,              D33	},
   2706 {"addqh.w", "d,s,t",	0x7c000418, 0xfc0007ff, WR_d|RD_s|RD_t,		0,              D33	},
   2707 {"addqh_r.w", "d,s,t",	0x7c000498, 0xfc0007ff, WR_d|RD_s|RD_t,		0,              D33	},
   2708 {"subqh.ph", "d,s,t",	0x7c000258, 0xfc0007ff, WR_d|RD_s|RD_t,		0,              D33	},
   2709 {"subqh_r.ph", "d,s,t",	0x7c0002d8, 0xfc0007ff, WR_d|RD_s|RD_t,		0,              D33	},
   2710 {"subqh.w", "d,s,t",	0x7c000458, 0xfc0007ff, WR_d|RD_s|RD_t,		0,              D33	},
   2711 {"subqh_r.w", "d,s,t",	0x7c0004d8, 0xfc0007ff, WR_d|RD_s|RD_t,		0,              D33	},
   2712 {"dpax.w.ph", "7,s,t",	0x7c000230, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,              D33	},
   2713 {"dpsx.w.ph", "7,s,t",	0x7c000270, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,              D33	},
   2714 {"dpaqx_s.w.ph", "7,s,t", 0x7c000630, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,              D33	},
   2715 {"dpaqx_sa.w.ph", "7,s,t", 0x7c0006b0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,              D33	},
   2716 {"dpsqx_s.w.ph", "7,s,t", 0x7c000670, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,              D33	},
   2717 {"dpsqx_sa.w.ph", "7,s,t", 0x7c0006f0, 0xfc00e7ff, MOD_a|RD_s|RD_t,	0,              D33	},
   2718 /* Move bc0* after mftr and mttr to avoid opcode collision.  */
   2719 {"bc0f",    "p",	0x41000000, 0xffff0000,	CBD|RD_CC,		0,		I1	},
   2720 {"bc0fl",   "p",	0x41020000, 0xffff0000,	CBL|RD_CC,		0,		I2|T3	},
   2721 {"bc0t",    "p",	0x41010000, 0xffff0000,	CBD|RD_CC,		0,		I1	},
   2722 {"bc0tl",   "p",	0x41030000, 0xffff0000,	CBL|RD_CC,		0,		I2|T3	},
   2723 };
   2724 
   2725 #define MIPS_NUM_OPCODES \
   2726 	((sizeof mips_builtin_opcodes) / (sizeof (mips_builtin_opcodes[0])))
   2727 const int bfd_mips_num_builtin_opcodes = MIPS_NUM_OPCODES;
   2728 
   2729 /* const removed from the following to allow for dynamic extensions to the
   2730  * built-in instruction set. */
   2731 struct mips_opcode *mips_opcodes =
   2732   (struct mips_opcode *) mips_builtin_opcodes;
   2733 int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
   2734 #undef MIPS_NUM_OPCODES
   2735 
   2736 /* Mips instructions are at maximum this many bytes long.  */
   2737 #define INSNLEN 4
   2738 
   2739 
   2740 /* FIXME: These should be shared with gdb somehow.  */
   2742 
   2743 struct mips_cp0sel_name
   2744 {
   2745   unsigned int cp0reg;
   2746   unsigned int sel;
   2747   const char * const name;
   2748 };
   2749 
   2750 /* The mips16 registers.  */
   2751 static const unsigned int mips16_to_32_reg_map[] =
   2752 {
   2753   16, 17, 2, 3, 4, 5, 6, 7
   2754 };
   2755 
   2756 #define mips16_reg_names(rn)	mips_gpr_names[mips16_to_32_reg_map[rn]]
   2757 
   2758 
   2759 static const char * const mips_gpr_names_numeric[32] =
   2760 {
   2761   "$0",   "$1",   "$2",   "$3",   "$4",   "$5",   "$6",   "$7",
   2762   "$8",   "$9",   "$10",  "$11",  "$12",  "$13",  "$14",  "$15",
   2763   "$16",  "$17",  "$18",  "$19",  "$20",  "$21",  "$22",  "$23",
   2764   "$24",  "$25",  "$26",  "$27",  "$28",  "$29",  "$30",  "$31"
   2765 };
   2766 
   2767 static const char * const mips_gpr_names_oldabi[32] =
   2768 {
   2769   "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
   2770   "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
   2771   "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
   2772   "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra"
   2773 };
   2774 
   2775 static const char * const mips_gpr_names_newabi[32] =
   2776 {
   2777   "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
   2778   "a4",   "a5",   "a6",   "a7",   "t0",   "t1",   "t2",   "t3",
   2779   "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
   2780   "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra"
   2781 };
   2782 
   2783 static const char * const mips_fpr_names_numeric[32] =
   2784 {
   2785   "$f0",  "$f1",  "$f2",  "$f3",  "$f4",  "$f5",  "$f6",  "$f7",
   2786   "$f8",  "$f9",  "$f10", "$f11", "$f12", "$f13", "$f14", "$f15",
   2787   "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",
   2788   "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "$f31"
   2789 };
   2790 
   2791 static const char * const mips_fpr_names_32[32] =
   2792 {
   2793   "fv0",  "fv0f", "fv1",  "fv1f", "ft0",  "ft0f", "ft1",  "ft1f",
   2794   "ft2",  "ft2f", "ft3",  "ft3f", "fa0",  "fa0f", "fa1",  "fa1f",
   2795   "ft4",  "ft4f", "ft5",  "ft5f", "fs0",  "fs0f", "fs1",  "fs1f",
   2796   "fs2",  "fs2f", "fs3",  "fs3f", "fs4",  "fs4f", "fs5",  "fs5f"
   2797 };
   2798 
   2799 static const char * const mips_fpr_names_n32[32] =
   2800 {
   2801   "fv0",  "ft14", "fv1",  "ft15", "ft0",  "ft1",  "ft2",  "ft3",
   2802   "ft4",  "ft5",  "ft6",  "ft7",  "fa0",  "fa1",  "fa2",  "fa3",
   2803   "fa4",  "fa5",  "fa6",  "fa7",  "fs0",  "ft8",  "fs1",  "ft9",
   2804   "fs2",  "ft10", "fs3",  "ft11", "fs4",  "ft12", "fs5",  "ft13"
   2805 };
   2806 
   2807 static const char * const mips_fpr_names_64[32] =
   2808 {
   2809   "fv0",  "ft12", "fv1",  "ft13", "ft0",  "ft1",  "ft2",  "ft3",
   2810   "ft4",  "ft5",  "ft6",  "ft7",  "fa0",  "fa1",  "fa2",  "fa3",
   2811   "fa4",  "fa5",  "fa6",  "fa7",  "ft8",  "ft9",  "ft10", "ft11",
   2812   "fs0",  "fs1",  "fs2",  "fs3",  "fs4",  "fs5",  "fs6",  "fs7"
   2813 };
   2814 
   2815 static const char * const mips_cp0_names_numeric[32] =
   2816 {
   2817   "$0",   "$1",   "$2",   "$3",   "$4",   "$5",   "$6",   "$7",
   2818   "$8",   "$9",   "$10",  "$11",  "$12",  "$13",  "$14",  "$15",
   2819   "$16",  "$17",  "$18",  "$19",  "$20",  "$21",  "$22",  "$23",
   2820   "$24",  "$25",  "$26",  "$27",  "$28",  "$29",  "$30",  "$31"
   2821 };
   2822 
   2823 static const char * const mips_cp0_names_mips3264[32] =
   2824 {
   2825   "c0_index",     "c0_random",    "c0_entrylo0",  "c0_entrylo1",
   2826   "c0_context",   "c0_pagemask",  "c0_wired",     "$7",
   2827   "c0_badvaddr",  "c0_count",     "c0_entryhi",   "c0_compare",
   2828   "c0_status",    "c0_cause",     "c0_epc",       "c0_prid",
   2829   "c0_config",    "c0_lladdr",    "c0_watchlo",   "c0_watchhi",
   2830   "c0_xcontext",  "$21",          "$22",          "c0_debug",
   2831   "c0_depc",      "c0_perfcnt",   "c0_errctl",    "c0_cacheerr",
   2832   "c0_taglo",     "c0_taghi",     "c0_errorepc",  "c0_desave",
   2833 };
   2834 
   2835 static const struct mips_cp0sel_name mips_cp0sel_names_mips3264[] =
   2836 {
   2837   {  4, 1, "c0_contextconfig"	},
   2838   {  0, 1, "c0_mvpcontrol"	},
   2839   {  0, 2, "c0_mvpconf0"	},
   2840   {  0, 3, "c0_mvpconf1"	},
   2841   {  1, 1, "c0_vpecontrol"	},
   2842   {  1, 2, "c0_vpeconf0"	},
   2843   {  1, 3, "c0_vpeconf1"	},
   2844   {  1, 4, "c0_yqmask"		},
   2845   {  1, 5, "c0_vpeschedule"	},
   2846   {  1, 6, "c0_vpeschefback"	},
   2847   {  2, 1, "c0_tcstatus"	},
   2848   {  2, 2, "c0_tcbind"		},
   2849   {  2, 3, "c0_tcrestart"	},
   2850   {  2, 4, "c0_tchalt"		},
   2851   {  2, 5, "c0_tccontext"	},
   2852   {  2, 6, "c0_tcschedule"	},
   2853   {  2, 7, "c0_tcschefback"	},
   2854   {  5, 1, "c0_pagegrain"	},
   2855   {  6, 1, "c0_srsconf0"	},
   2856   {  6, 2, "c0_srsconf1"	},
   2857   {  6, 3, "c0_srsconf2"	},
   2858   {  6, 4, "c0_srsconf3"	},
   2859   {  6, 5, "c0_srsconf4"	},
   2860   { 12, 1, "c0_intctl"		},
   2861   { 12, 2, "c0_srsctl"		},
   2862   { 12, 3, "c0_srsmap"		},
   2863   { 15, 1, "c0_ebase"		},
   2864   { 16, 1, "c0_config1"		},
   2865   { 16, 2, "c0_config2"		},
   2866   { 16, 3, "c0_config3"		},
   2867   { 18, 1, "c0_watchlo,1"	},
   2868   { 18, 2, "c0_watchlo,2"	},
   2869   { 18, 3, "c0_watchlo,3"	},
   2870   { 18, 4, "c0_watchlo,4"	},
   2871   { 18, 5, "c0_watchlo,5"	},
   2872   { 18, 6, "c0_watchlo,6"	},
   2873   { 18, 7, "c0_watchlo,7"	},
   2874   { 19, 1, "c0_watchhi,1"	},
   2875   { 19, 2, "c0_watchhi,2"	},
   2876   { 19, 3, "c0_watchhi,3"	},
   2877   { 19, 4, "c0_watchhi,4"	},
   2878   { 19, 5, "c0_watchhi,5"	},
   2879   { 19, 6, "c0_watchhi,6"	},
   2880   { 19, 7, "c0_watchhi,7"	},
   2881   { 23, 1, "c0_tracecontrol"	},
   2882   { 23, 2, "c0_tracecontrol2"	},
   2883   { 23, 3, "c0_usertracedata"	},
   2884   { 23, 4, "c0_tracebpc"	},
   2885   { 25, 1, "c0_perfcnt,1"	},
   2886   { 25, 2, "c0_perfcnt,2"	},
   2887   { 25, 3, "c0_perfcnt,3"	},
   2888   { 25, 4, "c0_perfcnt,4"	},
   2889   { 25, 5, "c0_perfcnt,5"	},
   2890   { 25, 6, "c0_perfcnt,6"	},
   2891   { 25, 7, "c0_perfcnt,7"	},
   2892   { 27, 1, "c0_cacheerr,1"	},
   2893   { 27, 2, "c0_cacheerr,2"	},
   2894   { 27, 3, "c0_cacheerr,3"	},
   2895   { 28, 1, "c0_datalo"		},
   2896   { 28, 2, "c0_taglo1"		},
   2897   { 28, 3, "c0_datalo1"		},
   2898   { 28, 4, "c0_taglo2"		},
   2899   { 28, 5, "c0_datalo2"		},
   2900   { 28, 6, "c0_taglo3"		},
   2901   { 28, 7, "c0_datalo3"		},
   2902   { 29, 1, "c0_datahi"		},
   2903   { 29, 2, "c0_taghi1"		},
   2904   { 29, 3, "c0_datahi1"		},
   2905   { 29, 4, "c0_taghi2"		},
   2906   { 29, 5, "c0_datahi2"		},
   2907   { 29, 6, "c0_taghi3"		},
   2908   { 29, 7, "c0_datahi3"		},
   2909 };
   2910 
   2911 static const char * const mips_cp0_names_mips3264r2[32] =
   2912 {
   2913   "c0_index",     "c0_random",    "c0_entrylo0",  "c0_entrylo1",
   2914   "c0_context",   "c0_pagemask",  "c0_wired",     "c0_hwrena",
   2915   "c0_badvaddr",  "c0_count",     "c0_entryhi",   "c0_compare",
   2916   "c0_status",    "c0_cause",     "c0_epc",       "c0_prid",
   2917   "c0_config",    "c0_lladdr",    "c0_watchlo",   "c0_watchhi",
   2918   "c0_xcontext",  "$21",          "$22",          "c0_debug",
   2919   "c0_depc",      "c0_perfcnt",   "c0_errctl",    "c0_cacheerr",
   2920   "c0_taglo",     "c0_taghi",     "c0_errorepc",  "c0_desave",
   2921 };
   2922 
   2923 static const struct mips_cp0sel_name mips_cp0sel_names_mips3264r2[] =
   2924 {
   2925   {  4, 1, "c0_contextconfig"	},
   2926   {  5, 1, "c0_pagegrain"	},
   2927   { 12, 1, "c0_intctl"		},
   2928   { 12, 2, "c0_srsctl"		},
   2929   { 12, 3, "c0_srsmap"		},
   2930   { 15, 1, "c0_ebase"		},
   2931   { 16, 1, "c0_config1"		},
   2932   { 16, 2, "c0_config2"		},
   2933   { 16, 3, "c0_config3"		},
   2934   { 18, 1, "c0_watchlo,1"	},
   2935   { 18, 2, "c0_watchlo,2"	},
   2936   { 18, 3, "c0_watchlo,3"	},
   2937   { 18, 4, "c0_watchlo,4"	},
   2938   { 18, 5, "c0_watchlo,5"	},
   2939   { 18, 6, "c0_watchlo,6"	},
   2940   { 18, 7, "c0_watchlo,7"	},
   2941   { 19, 1, "c0_watchhi,1"	},
   2942   { 19, 2, "c0_watchhi,2"	},
   2943   { 19, 3, "c0_watchhi,3"	},
   2944   { 19, 4, "c0_watchhi,4"	},
   2945   { 19, 5, "c0_watchhi,5"	},
   2946   { 19, 6, "c0_watchhi,6"	},
   2947   { 19, 7, "c0_watchhi,7"	},
   2948   { 23, 1, "c0_tracecontrol"	},
   2949   { 23, 2, "c0_tracecontrol2"	},
   2950   { 23, 3, "c0_usertracedata"	},
   2951   { 23, 4, "c0_tracebpc"	},
   2952   { 25, 1, "c0_perfcnt,1"	},
   2953   { 25, 2, "c0_perfcnt,2"	},
   2954   { 25, 3, "c0_perfcnt,3"	},
   2955   { 25, 4, "c0_perfcnt,4"	},
   2956   { 25, 5, "c0_perfcnt,5"	},
   2957   { 25, 6, "c0_perfcnt,6"	},
   2958   { 25, 7, "c0_perfcnt,7"	},
   2959   { 27, 1, "c0_cacheerr,1"	},
   2960   { 27, 2, "c0_cacheerr,2"	},
   2961   { 27, 3, "c0_cacheerr,3"	},
   2962   { 28, 1, "c0_datalo"		},
   2963   { 28, 2, "c0_taglo1"		},
   2964   { 28, 3, "c0_datalo1"		},
   2965   { 28, 4, "c0_taglo2"		},
   2966   { 28, 5, "c0_datalo2"		},
   2967   { 28, 6, "c0_taglo3"		},
   2968   { 28, 7, "c0_datalo3"		},
   2969   { 29, 1, "c0_datahi"		},
   2970   { 29, 2, "c0_taghi1"		},
   2971   { 29, 3, "c0_datahi1"		},
   2972   { 29, 4, "c0_taghi2"		},
   2973   { 29, 5, "c0_datahi2"		},
   2974   { 29, 6, "c0_taghi3"		},
   2975   { 29, 7, "c0_datahi3"		},
   2976 };
   2977 
   2978 /* SB-1: MIPS64 (mips_cp0_names_mips3264) with minor mods.  */
   2979 static const char * const mips_cp0_names_sb1[32] =
   2980 {
   2981   "c0_index",     "c0_random",    "c0_entrylo0",  "c0_entrylo1",
   2982   "c0_context",   "c0_pagemask",  "c0_wired",     "$7",
   2983   "c0_badvaddr",  "c0_count",     "c0_entryhi",   "c0_compare",
   2984   "c0_status",    "c0_cause",     "c0_epc",       "c0_prid",
   2985   "c0_config",    "c0_lladdr",    "c0_watchlo",   "c0_watchhi",
   2986   "c0_xcontext",  "$21",          "$22",          "c0_debug",
   2987   "c0_depc",      "c0_perfcnt",   "c0_errctl",    "c0_cacheerr_i",
   2988   "c0_taglo_i",   "c0_taghi_i",   "c0_errorepc",  "c0_desave",
   2989 };
   2990 
   2991 static const struct mips_cp0sel_name mips_cp0sel_names_sb1[] =
   2992 {
   2993   { 16, 1, "c0_config1"		},
   2994   { 18, 1, "c0_watchlo,1"	},
   2995   { 19, 1, "c0_watchhi,1"	},
   2996   { 22, 0, "c0_perftrace"	},
   2997   { 23, 3, "c0_edebug"		},
   2998   { 25, 1, "c0_perfcnt,1"	},
   2999   { 25, 2, "c0_perfcnt,2"	},
   3000   { 25, 3, "c0_perfcnt,3"	},
   3001   { 25, 4, "c0_perfcnt,4"	},
   3002   { 25, 5, "c0_perfcnt,5"	},
   3003   { 25, 6, "c0_perfcnt,6"	},
   3004   { 25, 7, "c0_perfcnt,7"	},
   3005   { 26, 1, "c0_buserr_pa"	},
   3006   { 27, 1, "c0_cacheerr_d"	},
   3007   { 27, 3, "c0_cacheerr_d_pa"	},
   3008   { 28, 1, "c0_datalo_i"	},
   3009   { 28, 2, "c0_taglo_d"		},
   3010   { 28, 3, "c0_datalo_d"	},
   3011   { 29, 1, "c0_datahi_i"	},
   3012   { 29, 2, "c0_taghi_d"		},
   3013   { 29, 3, "c0_datahi_d"	},
   3014 };
   3015 
   3016 static const char * const mips_hwr_names_numeric[32] =
   3017 {
   3018   "$0",   "$1",   "$2",   "$3",   "$4",   "$5",   "$6",   "$7",
   3019   "$8",   "$9",   "$10",  "$11",  "$12",  "$13",  "$14",  "$15",
   3020   "$16",  "$17",  "$18",  "$19",  "$20",  "$21",  "$22",  "$23",
   3021   "$24",  "$25",  "$26",  "$27",  "$28",  "$29",  "$30",  "$31"
   3022 };
   3023 
   3024 static const char * const mips_hwr_names_mips3264r2[32] =
   3025 {
   3026   "hwr_cpunum",   "hwr_synci_step", "hwr_cc",     "hwr_ccres",
   3027   "$4",          "$5",            "$6",           "$7",
   3028   "$8",   "$9",   "$10",  "$11",  "$12",  "$13",  "$14",  "$15",
   3029   "$16",  "$17",  "$18",  "$19",  "$20",  "$21",  "$22",  "$23",
   3030   "$24",  "$25",  "$26",  "$27",  "$28",  "$29",  "$30",  "$31"
   3031 };
   3032 
   3033 struct mips_abi_choice
   3034 {
   3035   const char *name;
   3036   const char * const *gpr_names;
   3037   const char * const *fpr_names;
   3038 };
   3039 
   3040 struct mips_abi_choice mips_abi_choices[] =
   3041 {
   3042   { "numeric", mips_gpr_names_numeric, mips_fpr_names_numeric },
   3043   { "32", mips_gpr_names_oldabi, mips_fpr_names_32 },
   3044   { "n32", mips_gpr_names_newabi, mips_fpr_names_n32 },
   3045   { "64", mips_gpr_names_newabi, mips_fpr_names_64 },
   3046 };
   3047 
   3048 struct mips_arch_choice
   3049 {
   3050   const char *name;
   3051   int bfd_mach_valid;
   3052   unsigned long bfd_mach;
   3053   int processor;
   3054   int isa;
   3055   const char * const *cp0_names;
   3056   const struct mips_cp0sel_name *cp0sel_names;
   3057   unsigned int cp0sel_names_len;
   3058   const char * const *hwr_names;
   3059 };
   3060 
   3061 #define bfd_mach_mips3000              3000
   3062 #define bfd_mach_mips3900              3900
   3063 #define bfd_mach_mips4000              4000
   3064 #define bfd_mach_mips4010              4010
   3065 #define bfd_mach_mips4100              4100
   3066 #define bfd_mach_mips4111              4111
   3067 #define bfd_mach_mips4120              4120
   3068 #define bfd_mach_mips4300              4300
   3069 #define bfd_mach_mips4400              4400
   3070 #define bfd_mach_mips4600              4600
   3071 #define bfd_mach_mips4650              4650
   3072 #define bfd_mach_mips5000              5000
   3073 #define bfd_mach_mips5400              5400
   3074 #define bfd_mach_mips5500              5500
   3075 #define bfd_mach_mips6000              6000
   3076 #define bfd_mach_mips7000              7000
   3077 #define bfd_mach_mips8000              8000
   3078 #define bfd_mach_mips9000              9000
   3079 #define bfd_mach_mips10000             10000
   3080 #define bfd_mach_mips12000             12000
   3081 #define bfd_mach_mips16                16
   3082 #define bfd_mach_mips5                 5
   3083 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
   3084 #define bfd_mach_mipsisa32             32
   3085 #define bfd_mach_mipsisa32r2           33
   3086 #define bfd_mach_mipsisa64             64
   3087 #define bfd_mach_mipsisa64r2           65
   3088 
   3089 #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
   3090 
   3091 const struct mips_arch_choice mips_arch_choices[] =
   3092 {
   3093   { "numeric",	0, 0, 0, 0,
   3094     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3095 
   3096   { "r3000",	1, bfd_mach_mips3000, CPU_R3000, ISA_MIPS1,
   3097     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3098   { "r3900",	1, bfd_mach_mips3900, CPU_R3900, ISA_MIPS1,
   3099     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3100   { "r4000",	1, bfd_mach_mips4000, CPU_R4000, ISA_MIPS3,
   3101     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3102   { "r4010",	1, bfd_mach_mips4010, CPU_R4010, ISA_MIPS2,
   3103     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3104   { "vr4100",	1, bfd_mach_mips4100, CPU_VR4100, ISA_MIPS3,
   3105     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3106   { "vr4111",	1, bfd_mach_mips4111, CPU_R4111, ISA_MIPS3,
   3107     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3108   { "vr4120",	1, bfd_mach_mips4120, CPU_VR4120, ISA_MIPS3,
   3109     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3110   { "r4300",	1, bfd_mach_mips4300, CPU_R4300, ISA_MIPS3,
   3111     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3112   { "r4400",	1, bfd_mach_mips4400, CPU_R4400, ISA_MIPS3,
   3113     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3114   { "r4600",	1, bfd_mach_mips4600, CPU_R4600, ISA_MIPS3,
   3115     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3116   { "r4650",	1, bfd_mach_mips4650, CPU_R4650, ISA_MIPS3,
   3117     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3118   { "r5000",	1, bfd_mach_mips5000, CPU_R5000, ISA_MIPS4,
   3119     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3120   { "vr5400",	1, bfd_mach_mips5400, CPU_VR5400, ISA_MIPS4,
   3121     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3122   { "vr5500",	1, bfd_mach_mips5500, CPU_VR5500, ISA_MIPS4,
   3123     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3124   { "r6000",	1, bfd_mach_mips6000, CPU_R6000, ISA_MIPS2,
   3125     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3126   { "rm7000",	1, bfd_mach_mips7000, CPU_RM7000, ISA_MIPS4,
   3127     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3128   { "rm9000",	1, bfd_mach_mips7000, CPU_RM7000, ISA_MIPS4,
   3129     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3130   { "r8000",	1, bfd_mach_mips8000, CPU_R8000, ISA_MIPS4,
   3131     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3132   { "r10000",	1, bfd_mach_mips10000, CPU_R10000, ISA_MIPS4,
   3133     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3134   { "r12000",	1, bfd_mach_mips12000, CPU_R12000, ISA_MIPS4,
   3135     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3136   { "mips5",	1, bfd_mach_mips5, CPU_MIPS5, ISA_MIPS5,
   3137     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3138 
   3139   /* For stock MIPS32, disassemble all applicable MIPS-specified ASEs.
   3140      Note that MIPS-3D and MDMX are not applicable to MIPS32.  (See
   3141      _MIPS32 Architecture For Programmers Volume I: Introduction to the
   3142      MIPS32 Architecture_ (MIPS Document Number MD00082, Revision 0.95),
   3143      page 1.  */
   3144   { "mips32",	1, bfd_mach_mipsisa32, CPU_MIPS32,
   3145     ISA_MIPS32 | INSN_MIPS16 | INSN_SMARTMIPS,
   3146     mips_cp0_names_mips3264,
   3147     mips_cp0sel_names_mips3264, ARRAY_SIZE (mips_cp0sel_names_mips3264),
   3148     mips_hwr_names_numeric },
   3149 
   3150   { "mips32r2",	1, bfd_mach_mipsisa32r2, CPU_MIPS32R2,
   3151     (ISA_MIPS32R2 | INSN_MIPS16 | INSN_SMARTMIPS | INSN_DSP | INSN_DSPR2
   3152      | INSN_MIPS3D | INSN_MT),
   3153     mips_cp0_names_mips3264r2,
   3154     mips_cp0sel_names_mips3264r2, ARRAY_SIZE (mips_cp0sel_names_mips3264r2),
   3155     mips_hwr_names_mips3264r2 },
   3156 
   3157   /* For stock MIPS64, disassemble all applicable MIPS-specified ASEs.  */
   3158   { "mips64",	1, bfd_mach_mipsisa64, CPU_MIPS64,
   3159     ISA_MIPS64 | INSN_MIPS16 | INSN_MIPS3D | INSN_MDMX,
   3160     mips_cp0_names_mips3264,
   3161     mips_cp0sel_names_mips3264, ARRAY_SIZE (mips_cp0sel_names_mips3264),
   3162     mips_hwr_names_numeric },
   3163 
   3164   { "mips64r2",	1, bfd_mach_mipsisa64r2, CPU_MIPS64R2,
   3165     (ISA_MIPS64R2 | INSN_MIPS16 | INSN_MIPS3D | INSN_DSP | INSN_DSPR2
   3166      | INSN_DSP64 | INSN_MT | INSN_MDMX),
   3167     mips_cp0_names_mips3264r2,
   3168     mips_cp0sel_names_mips3264r2, ARRAY_SIZE (mips_cp0sel_names_mips3264r2),
   3169     mips_hwr_names_mips3264r2 },
   3170 
   3171   { "sb1",	1, bfd_mach_mips_sb1, CPU_SB1,
   3172     ISA_MIPS64 | INSN_MIPS3D | INSN_SB1,
   3173     mips_cp0_names_sb1,
   3174     mips_cp0sel_names_sb1, ARRAY_SIZE (mips_cp0sel_names_sb1),
   3175     mips_hwr_names_numeric },
   3176 
   3177   /* This entry, mips16, is here only for ISA/processor selection; do
   3178      not print its name.  */
   3179   { "",		1, bfd_mach_mips16, CPU_MIPS16, ISA_MIPS3 | INSN_MIPS16,
   3180     mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
   3181 };
   3182 
   3183 /* ISA and processor type to disassemble for, and register names to use.
   3184    set_default_mips_dis_options and parse_mips_dis_options fill in these
   3185    values.  */
   3186 static int mips_processor;
   3187 static int mips_isa;
   3188 static const char * const *mips_gpr_names;
   3189 static const char * const *mips_fpr_names;
   3190 static const char * const *mips_cp0_names;
   3191 static const struct mips_cp0sel_name *mips_cp0sel_names;
   3192 static int mips_cp0sel_names_len;
   3193 static const char * const *mips_hwr_names;
   3194 
   3195 /* Other options */
   3196 static int no_aliases;	/* If set disassemble as most general inst.  */
   3197 
   3198 static const struct mips_abi_choice *
   3200 choose_abi_by_name (const char *name, unsigned int namelen)
   3201 {
   3202   const struct mips_abi_choice *c;
   3203   unsigned int i;
   3204 
   3205   for (i = 0, c = NULL; i < ARRAY_SIZE (mips_abi_choices) && c == NULL; i++)
   3206     if (strncmp (mips_abi_choices[i].name, name, namelen) == 0
   3207 	&& strlen (mips_abi_choices[i].name) == namelen)
   3208       c = &mips_abi_choices[i];
   3209 
   3210   return c;
   3211 }
   3212 
   3213 static const struct mips_arch_choice *
   3214 choose_arch_by_name (const char *name, unsigned int namelen)
   3215 {
   3216   const struct mips_arch_choice *c = NULL;
   3217   unsigned int i;
   3218 
   3219   for (i = 0, c = NULL; i < ARRAY_SIZE (mips_arch_choices) && c == NULL; i++)
   3220     if (strncmp (mips_arch_choices[i].name, name, namelen) == 0
   3221 	&& strlen (mips_arch_choices[i].name) == namelen)
   3222       c = &mips_arch_choices[i];
   3223 
   3224   return c;
   3225 }
   3226 
   3227 static const struct mips_arch_choice *
   3228 choose_arch_by_number (unsigned long mach)
   3229 {
   3230   static unsigned long hint_bfd_mach;
   3231   static const struct mips_arch_choice *hint_arch_choice;
   3232   const struct mips_arch_choice *c;
   3233   unsigned int i;
   3234 
   3235   /* We optimize this because even if the user specifies no
   3236      flags, this will be done for every instruction!  */
   3237   if (hint_bfd_mach == mach
   3238       && hint_arch_choice != NULL
   3239       && hint_arch_choice->bfd_mach == hint_bfd_mach)
   3240     return hint_arch_choice;
   3241 
   3242   for (i = 0, c = NULL; i < ARRAY_SIZE (mips_arch_choices) && c == NULL; i++)
   3243     {
   3244       if (mips_arch_choices[i].bfd_mach_valid
   3245 	  && mips_arch_choices[i].bfd_mach == mach)
   3246 	{
   3247 	  c = &mips_arch_choices[i];
   3248 	  hint_bfd_mach = mach;
   3249 	  hint_arch_choice = c;
   3250 	}
   3251     }
   3252   return c;
   3253 }
   3254 
   3255 static void
   3256 set_default_mips_dis_options (struct disassemble_info *info)
   3257 {
   3258   const struct mips_arch_choice *chosen_arch;
   3259 
   3260   /* Defaults: mipsIII/r3000 (?!), (o)32-style ("oldabi") GPR names,
   3261      and numeric FPR, CP0 register, and HWR names.  */
   3262   mips_isa = ISA_MIPS3;
   3263   mips_processor =  CPU_R3000;
   3264   mips_gpr_names = mips_gpr_names_oldabi;
   3265   mips_fpr_names = mips_fpr_names_numeric;
   3266   mips_cp0_names = mips_cp0_names_numeric;
   3267   mips_cp0sel_names = NULL;
   3268   mips_cp0sel_names_len = 0;
   3269   mips_hwr_names = mips_hwr_names_numeric;
   3270   no_aliases = 0;
   3271 
   3272   /* If an ELF "newabi" binary, use the n32/(n)64 GPR names.  */
   3273 #if 0
   3274   if (info->flavour == bfd_target_elf_flavour && info->section != NULL)
   3275     {
   3276       Elf_Internal_Ehdr *header;
   3277 
   3278       header = elf_elfheader (info->section->owner);
   3279       if (is_newabi (header))
   3280 	mips_gpr_names = mips_gpr_names_newabi;
   3281     }
   3282 #endif
   3283 
   3284   /* Set ISA, architecture, and cp0 register names as best we can.  */
   3285 #if !defined(SYMTAB_AVAILABLE) && 0
   3286   /* This is running out on a target machine, not in a host tool.
   3287      FIXME: Where does mips_target_info come from?  */
   3288   target_processor = mips_target_info.processor;
   3289   mips_isa = mips_target_info.isa;
   3290 #else
   3291   chosen_arch = choose_arch_by_number (info->mach);
   3292   if (chosen_arch != NULL)
   3293     {
   3294       mips_processor = chosen_arch->processor;
   3295       mips_isa = chosen_arch->isa;
   3296       mips_cp0_names = chosen_arch->cp0_names;
   3297       mips_cp0sel_names = chosen_arch->cp0sel_names;
   3298       mips_cp0sel_names_len = chosen_arch->cp0sel_names_len;
   3299       mips_hwr_names = chosen_arch->hwr_names;
   3300     }
   3301 #endif
   3302 }
   3303 
   3304 static void
   3305 parse_mips_dis_option (const char *option, unsigned int len)
   3306 {
   3307   unsigned int i, optionlen, vallen;
   3308   const char *val;
   3309   const struct mips_abi_choice *chosen_abi;
   3310   const struct mips_arch_choice *chosen_arch;
   3311 
   3312   /* Look for the = that delimits the end of the option name.  */
   3313   for (i = 0; i < len; i++)
   3314     {
   3315       if (option[i] == '=')
   3316 	break;
   3317     }
   3318   if (i == 0)		/* Invalid option: no name before '='.  */
   3319     return;
   3320   if (i == len)		/* Invalid option: no '='.  */
   3321     return;
   3322   if (i == (len - 1))	/* Invalid option: no value after '='.  */
   3323     return;
   3324 
   3325   optionlen = i;
   3326   val = option + (optionlen + 1);
   3327   vallen = len - (optionlen + 1);
   3328 
   3329   if (strncmp("gpr-names", option, optionlen) == 0
   3330       && strlen("gpr-names") == optionlen)
   3331     {
   3332       chosen_abi = choose_abi_by_name (val, vallen);
   3333       if (chosen_abi != NULL)
   3334 	mips_gpr_names = chosen_abi->gpr_names;
   3335       return;
   3336     }
   3337 
   3338   if (strncmp("fpr-names", option, optionlen) == 0
   3339       && strlen("fpr-names") == optionlen)
   3340     {
   3341       chosen_abi = choose_abi_by_name (val, vallen);
   3342       if (chosen_abi != NULL)
   3343 	mips_fpr_names = chosen_abi->fpr_names;
   3344       return;
   3345     }
   3346 
   3347   if (strncmp("cp0-names", option, optionlen) == 0
   3348       && strlen("cp0-names") == optionlen)
   3349     {
   3350       chosen_arch = choose_arch_by_name (val, vallen);
   3351       if (chosen_arch != NULL)
   3352 	{
   3353 	  mips_cp0_names = chosen_arch->cp0_names;
   3354 	  mips_cp0sel_names = chosen_arch->cp0sel_names;
   3355 	  mips_cp0sel_names_len = chosen_arch->cp0sel_names_len;
   3356 	}
   3357       return;
   3358     }
   3359 
   3360   if (strncmp("hwr-names", option, optionlen) == 0
   3361       && strlen("hwr-names") == optionlen)
   3362     {
   3363       chosen_arch = choose_arch_by_name (val, vallen);
   3364       if (chosen_arch != NULL)
   3365 	mips_hwr_names = chosen_arch->hwr_names;
   3366       return;
   3367     }
   3368 
   3369   if (strncmp("reg-names", option, optionlen) == 0
   3370       && strlen("reg-names") == optionlen)
   3371     {
   3372       /* We check both ABI and ARCH here unconditionally, so
   3373 	 that "numeric" will do the desirable thing: select
   3374 	 numeric register names for all registers.  Other than
   3375 	 that, a given name probably won't match both.  */
   3376       chosen_abi = choose_abi_by_name (val, vallen);
   3377       if (chosen_abi != NULL)
   3378 	{
   3379 	  mips_gpr_names = chosen_abi->gpr_names;
   3380 	  mips_fpr_names = chosen_abi->fpr_names;
   3381 	}
   3382       chosen_arch = choose_arch_by_name (val, vallen);
   3383       if (chosen_arch != NULL)
   3384 	{
   3385 	  mips_cp0_names = chosen_arch->cp0_names;
   3386 	  mips_cp0sel_names = chosen_arch->cp0sel_names;
   3387 	  mips_cp0sel_names_len = chosen_arch->cp0sel_names_len;
   3388 	  mips_hwr_names = chosen_arch->hwr_names;
   3389 	}
   3390       return;
   3391     }
   3392 
   3393   /* Invalid option.  */
   3394 }
   3395 
   3396 static void
   3397 parse_mips_dis_options (const char *options)
   3398 {
   3399   const char *option_end;
   3400 
   3401   if (options == NULL)
   3402     return;
   3403 
   3404   while (*options != '\0')
   3405     {
   3406       /* Skip empty options.  */
   3407       if (*options == ',')
   3408 	{
   3409 	  options++;
   3410 	  continue;
   3411 	}
   3412 
   3413       /* We know that *options is neither NUL or a comma.  */
   3414       option_end = options + 1;
   3415       while (*option_end != ',' && *option_end != '\0')
   3416 	option_end++;
   3417 
   3418       parse_mips_dis_option (options, option_end - options);
   3419 
   3420       /* Go on to the next one.  If option_end points to a comma, it
   3421 	 will be skipped above.  */
   3422       options = option_end;
   3423     }
   3424 }
   3425 
   3426 static const struct mips_cp0sel_name *
   3427 lookup_mips_cp0sel_name (const struct mips_cp0sel_name *names,
   3428 			 unsigned int len,
   3429 			 unsigned int cp0reg,
   3430 			 unsigned int sel)
   3431 {
   3432   unsigned int i;
   3433 
   3434   for (i = 0; i < len; i++)
   3435     if (names[i].cp0reg == cp0reg && names[i].sel == sel)
   3436       return &names[i];
   3437   return NULL;
   3438 }
   3439 
   3440 /* Print insn arguments for 32/64-bit code.  */
   3442 
   3443 static void
   3444 print_insn_args (const char *d,
   3445 		 register unsigned long int l,
   3446 		 bfd_vma pc,
   3447 		 struct disassemble_info *info,
   3448 		 const struct mips_opcode *opp)
   3449 {
   3450   int op, delta;
   3451   unsigned int lsb, msb, msbd;
   3452 
   3453   lsb = 0;
   3454 
   3455   for (; *d != '\0'; d++)
   3456     {
   3457       switch (*d)
   3458 	{
   3459 	case ',':
   3460 	case '(':
   3461 	case ')':
   3462 	case '[':
   3463 	case ']':
   3464 	  (*info->fprintf_func) (info->stream, "%c", *d);
   3465 	  break;
   3466 
   3467 	case '+':
   3468 	  /* Extension character; switch for second char.  */
   3469 	  d++;
   3470 	  switch (*d)
   3471 	    {
   3472 	    case '\0':
   3473 	      /* xgettext:c-format */
   3474 	      (*info->fprintf_func) (info->stream,
   3475 				     _("# internal error, incomplete extension sequence (+)"));
   3476 	      return;
   3477 
   3478 	    case 'A':
   3479 	      lsb = (l >> OP_SH_SHAMT) & OP_MASK_SHAMT;
   3480 	      (*info->fprintf_func) (info->stream, "0x%x", lsb);
   3481 	      break;
   3482 
   3483 	    case 'B':
   3484 	      msb = (l >> OP_SH_INSMSB) & OP_MASK_INSMSB;
   3485 	      (*info->fprintf_func) (info->stream, "0x%x", msb - lsb + 1);
   3486 	      break;
   3487 
   3488 	    case '1':
   3489 	      (*info->fprintf_func) (info->stream, "0x%lx",
   3490 				     (l >> OP_SH_UDI1) & OP_MASK_UDI1);
   3491 	      break;
   3492 
   3493 	    case '2':
   3494 	      (*info->fprintf_func) (info->stream, "0x%lx",
   3495 				     (l >> OP_SH_UDI2) & OP_MASK_UDI2);
   3496 	      break;
   3497 
   3498 	    case '3':
   3499 	      (*info->fprintf_func) (info->stream, "0x%lx",
   3500 				     (l >> OP_SH_UDI3) & OP_MASK_UDI3);
   3501 	      break;
   3502 
   3503 	    case '4':
   3504 	      (*info->fprintf_func) (info->stream, "0x%lx",
   3505 				     (l >> OP_SH_UDI4) & OP_MASK_UDI4);
   3506 	      break;
   3507 
   3508 	    case 'C':
   3509 	    case 'H':
   3510 	      msbd = (l >> OP_SH_EXTMSBD) & OP_MASK_EXTMSBD;
   3511 	      (*info->fprintf_func) (info->stream, "0x%x", msbd + 1);
   3512 	      break;
   3513 
   3514 	    case 'D':
   3515 	      {
   3516 		const struct mips_cp0sel_name *n;
   3517 		unsigned int cp0reg, sel;
   3518 
   3519 		cp0reg = (l >> OP_SH_RD) & OP_MASK_RD;
   3520 		sel = (l >> OP_SH_SEL) & OP_MASK_SEL;
   3521 
   3522 		/* CP0 register including 'sel' code for mtcN (et al.), to be
   3523 		   printed textually if known.  If not known, print both
   3524 		   CP0 register name and sel numerically since CP0 register
   3525 		   with sel 0 may have a name unrelated to register being
   3526 		   printed.  */
   3527 		n = lookup_mips_cp0sel_name(mips_cp0sel_names,
   3528 					    mips_cp0sel_names_len, cp0reg, sel);
   3529 		if (n != NULL)
   3530 		  (*info->fprintf_func) (info->stream, "%s", n->name);
   3531 		else
   3532 		  (*info->fprintf_func) (info->stream, "$%d,%d", cp0reg, sel);
   3533 		break;
   3534 	      }
   3535 
   3536 	    case 'E':
   3537 	      lsb = ((l >> OP_SH_SHAMT) & OP_MASK_SHAMT) + 32;
   3538 	      (*info->fprintf_func) (info->stream, "0x%x", lsb);
   3539 	      break;
   3540 
   3541 	    case 'F':
   3542 	      msb = ((l >> OP_SH_INSMSB) & OP_MASK_INSMSB) + 32;
   3543 	      (*info->fprintf_func) (info->stream, "0x%x", msb - lsb + 1);
   3544 	      break;
   3545 
   3546 	    case 'G':
   3547 	      msbd = ((l >> OP_SH_EXTMSBD) & OP_MASK_EXTMSBD) + 32;
   3548 	      (*info->fprintf_func) (info->stream, "0x%x", msbd + 1);
   3549 	      break;
   3550 
   3551 	    case 't': /* Coprocessor 0 reg name */
   3552 	      (*info->fprintf_func) (info->stream, "%s",
   3553 				     mips_cp0_names[(l >> OP_SH_RT) &
   3554 						     OP_MASK_RT]);
   3555 	      break;
   3556 
   3557 	    case 'T': /* Coprocessor 0 reg name */
   3558 	      {
   3559 		const struct mips_cp0sel_name *n;
   3560 		unsigned int cp0reg, sel;
   3561 
   3562 		cp0reg = (l >> OP_SH_RT) & OP_MASK_RT;
   3563 		sel = (l >> OP_SH_SEL) & OP_MASK_SEL;
   3564 
   3565 		/* CP0 register including 'sel' code for mftc0, to be
   3566 		   printed textually if known.  If not known, print both
   3567 		   CP0 register name and sel numerically since CP0 register
   3568 		   with sel 0 may have a name unrelated to register being
   3569 		   printed.  */
   3570 		n = lookup_mips_cp0sel_name(mips_cp0sel_names,
   3571 					    mips_cp0sel_names_len, cp0reg, sel);
   3572 		if (n != NULL)
   3573 		  (*info->fprintf_func) (info->stream, "%s", n->name);
   3574 		else
   3575 		  (*info->fprintf_func) (info->stream, "$%d,%d", cp0reg, sel);
   3576 		break;
   3577 	      }
   3578 
   3579 	    default:
   3580 	      /* xgettext:c-format */
   3581 	      (*info->fprintf_func) (info->stream,
   3582 				     _("# internal error, undefined extension sequence (+%c)"),
   3583 				     *d);
   3584 	      return;
   3585 	    }
   3586 	  break;
   3587 
   3588 	case '2':
   3589 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3590 				 (l >> OP_SH_BP) & OP_MASK_BP);
   3591 	  break;
   3592 
   3593 	case '3':
   3594 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3595 				 (l >> OP_SH_SA3) & OP_MASK_SA3);
   3596 	  break;
   3597 
   3598 	case '4':
   3599 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3600 				 (l >> OP_SH_SA4) & OP_MASK_SA4);
   3601 	  break;
   3602 
   3603 	case '5':
   3604 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3605 				 (l >> OP_SH_IMM8) & OP_MASK_IMM8);
   3606 	  break;
   3607 
   3608 	case '6':
   3609 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3610 				 (l >> OP_SH_RS) & OP_MASK_RS);
   3611 	  break;
   3612 
   3613 	case '7':
   3614 	  (*info->fprintf_func) (info->stream, "$ac%ld",
   3615 				 (l >> OP_SH_DSPACC) & OP_MASK_DSPACC);
   3616 	  break;
   3617 
   3618 	case '8':
   3619 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3620 				 (l >> OP_SH_WRDSP) & OP_MASK_WRDSP);
   3621 	  break;
   3622 
   3623 	case '9':
   3624 	  (*info->fprintf_func) (info->stream, "$ac%ld",
   3625 				 (l >> OP_SH_DSPACC_S) & OP_MASK_DSPACC_S);
   3626 	  break;
   3627 
   3628 	case '0': /* dsp 6-bit signed immediate in bit 20 */
   3629 	  delta = ((l >> OP_SH_DSPSFT) & OP_MASK_DSPSFT);
   3630 	  if (delta & 0x20) /* test sign bit */
   3631 	    delta |= ~OP_MASK_DSPSFT;
   3632 	  (*info->fprintf_func) (info->stream, "%d", delta);
   3633 	  break;
   3634 
   3635 	case ':': /* dsp 7-bit signed immediate in bit 19 */
   3636 	  delta = ((l >> OP_SH_DSPSFT_7) & OP_MASK_DSPSFT_7);
   3637 	  if (delta & 0x40) /* test sign bit */
   3638 	    delta |= ~OP_MASK_DSPSFT_7;
   3639 	  (*info->fprintf_func) (info->stream, "%d", delta);
   3640 	  break;
   3641 
   3642 	case '\'':
   3643 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3644 				 (l >> OP_SH_RDDSP) & OP_MASK_RDDSP);
   3645 	  break;
   3646 
   3647 	case '@': /* dsp 10-bit signed immediate in bit 16 */
   3648 	  delta = ((l >> OP_SH_IMM10) & OP_MASK_IMM10);
   3649 	  if (delta & 0x200) /* test sign bit */
   3650 	    delta |= ~OP_MASK_IMM10;
   3651 	  (*info->fprintf_func) (info->stream, "%d", delta);
   3652 	  break;
   3653 
   3654 	case '!':
   3655 	  (*info->fprintf_func) (info->stream, "%ld",
   3656 				 (l >> OP_SH_MT_U) & OP_MASK_MT_U);
   3657 	  break;
   3658 
   3659 	case '$':
   3660 	  (*info->fprintf_func) (info->stream, "%ld",
   3661 				 (l >> OP_SH_MT_H) & OP_MASK_MT_H);
   3662 	  break;
   3663 
   3664 	case '*':
   3665 	  (*info->fprintf_func) (info->stream, "$ac%ld",
   3666 				 (l >> OP_SH_MTACC_T) & OP_MASK_MTACC_T);
   3667 	  break;
   3668 
   3669 	case '&':
   3670 	  (*info->fprintf_func) (info->stream, "$ac%ld",
   3671 				 (l >> OP_SH_MTACC_D) & OP_MASK_MTACC_D);
   3672 	  break;
   3673 
   3674 	case 'g':
   3675 	  /* Coprocessor register for CTTC1, MTTC2, MTHC2, CTTC2.  */
   3676 	  (*info->fprintf_func) (info->stream, "$%ld",
   3677 				 (l >> OP_SH_RD) & OP_MASK_RD);
   3678 	  break;
   3679 
   3680 	case 's':
   3681 	case 'b':
   3682 	case 'r':
   3683 	case 'v':
   3684 	  (*info->fprintf_func) (info->stream, "%s",
   3685 				 mips_gpr_names[(l >> OP_SH_RS) & OP_MASK_RS]);
   3686 	  break;
   3687 
   3688 	case 't':
   3689 	case 'w':
   3690 	  (*info->fprintf_func) (info->stream, "%s",
   3691 				 mips_gpr_names[(l >> OP_SH_RT) & OP_MASK_RT]);
   3692 	  break;
   3693 
   3694 	case 'i':
   3695 	case 'u':
   3696 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3697 				 (l >> OP_SH_IMMEDIATE) & OP_MASK_IMMEDIATE);
   3698 	  break;
   3699 
   3700 	case 'j': /* Same as i, but sign-extended.  */
   3701 	case 'o':
   3702 	  delta = (l >> OP_SH_DELTA) & OP_MASK_DELTA;
   3703 	  if (delta & 0x8000)
   3704 	    delta |= ~0xffff;
   3705 	  (*info->fprintf_func) (info->stream, "%d",
   3706 				 delta);
   3707 	  break;
   3708 
   3709 	case 'h':
   3710 	  (*info->fprintf_func) (info->stream, "0x%x",
   3711 				 (unsigned int) ((l >> OP_SH_PREFX)
   3712 						 & OP_MASK_PREFX));
   3713 	  break;
   3714 
   3715 	case 'k':
   3716 	  (*info->fprintf_func) (info->stream, "0x%x",
   3717 				 (unsigned int) ((l >> OP_SH_CACHE)
   3718 						 & OP_MASK_CACHE));
   3719 	  break;
   3720 
   3721 	case 'a':
   3722 	  info->target = (((pc + 4) & ~(bfd_vma) 0x0fffffff)
   3723 			  | (((l >> OP_SH_TARGET) & OP_MASK_TARGET) << 2));
   3724 	  /* For gdb disassembler, force odd address on jalx.  */
   3725 	  if (info->flavour == bfd_target_unknown_flavour
   3726 	      && strcmp (opp->name, "jalx") == 0)
   3727 	    info->target |= 1;
   3728 	  (*info->print_address_func) (info->target, info);
   3729 	  break;
   3730 
   3731 	case 'p':
   3732 	  /* Sign extend the displacement.  */
   3733 	  delta = (l >> OP_SH_DELTA) & OP_MASK_DELTA;
   3734 	  if (delta & 0x8000)
   3735 	    delta |= ~0xffff;
   3736 	  info->target = (delta << 2) + pc + INSNLEN;
   3737 	  (*info->print_address_func) (info->target, info);
   3738 	  break;
   3739 
   3740 	case 'd':
   3741 	  (*info->fprintf_func) (info->stream, "%s",
   3742 				 mips_gpr_names[(l >> OP_SH_RD) & OP_MASK_RD]);
   3743 	  break;
   3744 
   3745 	case 'U':
   3746 	  {
   3747 	    /* First check for both rd and rt being equal.  */
   3748 	    unsigned int reg = (l >> OP_SH_RD) & OP_MASK_RD;
   3749 	    if (reg == ((l >> OP_SH_RT) & OP_MASK_RT))
   3750 	      (*info->fprintf_func) (info->stream, "%s",
   3751 				     mips_gpr_names[reg]);
   3752 	    else
   3753 	      {
   3754 		/* If one is zero use the other.  */
   3755 		if (reg == 0)
   3756 		  (*info->fprintf_func) (info->stream, "%s",
   3757 					 mips_gpr_names[(l >> OP_SH_RT) & OP_MASK_RT]);
   3758 		else if (((l >> OP_SH_RT) & OP_MASK_RT) == 0)
   3759 		  (*info->fprintf_func) (info->stream, "%s",
   3760 					 mips_gpr_names[reg]);
   3761 		else /* Bogus, result depends on processor.  */
   3762 		  (*info->fprintf_func) (info->stream, "%s or %s",
   3763 					 mips_gpr_names[reg],
   3764 					 mips_gpr_names[(l >> OP_SH_RT) & OP_MASK_RT]);
   3765 	      }
   3766 	  }
   3767 	  break;
   3768 
   3769 	case 'z':
   3770 	  (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[0]);
   3771 	  break;
   3772 
   3773 	case '<':
   3774 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3775 				 (l >> OP_SH_SHAMT) & OP_MASK_SHAMT);
   3776 	  break;
   3777 
   3778 	case 'c':
   3779 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3780 				 (l >> OP_SH_CODE) & OP_MASK_CODE);
   3781 	  break;
   3782 
   3783 	case 'q':
   3784 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3785 				 (l >> OP_SH_CODE2) & OP_MASK_CODE2);
   3786 	  break;
   3787 
   3788 	case 'C':
   3789 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3790 				 (l >> OP_SH_COPZ) & OP_MASK_COPZ);
   3791 	  break;
   3792 
   3793 	case 'B':
   3794 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3795 
   3796 				 (l >> OP_SH_CODE20) & OP_MASK_CODE20);
   3797 	  break;
   3798 
   3799 	case 'J':
   3800 	  (*info->fprintf_func) (info->stream, "0x%lx",
   3801 				 (l >> OP_SH_CODE19) & OP_MASK_CODE19);
   3802 	  break;
   3803 
   3804 	case 'S':
   3805 	case 'V':
   3806 	  (*info->fprintf_func) (info->stream, "%s",
   3807 				 mips_fpr_names[(l >> OP_SH_FS) & OP_MASK_FS]);
   3808 	  break;
   3809 
   3810 	case 'T':
   3811 	case 'W':
   3812 	  (*info->fprintf_func) (info->stream, "%s",
   3813 				 mips_fpr_names[(l >> OP_SH_FT) & OP_MASK_FT]);
   3814 	  break;
   3815 
   3816 	case 'D':
   3817 	  (*info->fprintf_func) (info->stream, "%s",
   3818 				 mips_fpr_names[(l >> OP_SH_FD) & OP_MASK_FD]);
   3819 	  break;
   3820 
   3821 	case 'R':
   3822 	  (*info->fprintf_func) (info->stream, "%s",
   3823 				 mips_fpr_names[(l >> OP_SH_FR) & OP_MASK_FR]);
   3824 	  break;
   3825 
   3826 	case 'E':
   3827 	  /* Coprocessor register for lwcN instructions, et al.
   3828 
   3829 	     Note that there is no load/store cp0 instructions, and
   3830 	     that FPU (cp1) instructions disassemble this field using
   3831 	     'T' format.  Therefore, until we gain understanding of
   3832 	     cp2 register names, we can simply print the register
   3833 	     numbers.  */
   3834 	  (*info->fprintf_func) (info->stream, "$%ld",
   3835 				 (l >> OP_SH_RT) & OP_MASK_RT);
   3836 	  break;
   3837 
   3838 	case 'G':
   3839 	  /* Coprocessor register for mtcN instructions, et al.  Note
   3840 	     that FPU (cp1) instructions disassemble this field using
   3841 	     'S' format.  Therefore, we only need to worry about cp0,
   3842 	     cp2, and cp3.  */
   3843 	  op = (l >> OP_SH_OP) & OP_MASK_OP;
   3844 	  if (op == OP_OP_COP0)
   3845 	    (*info->fprintf_func) (info->stream, "%s",
   3846 				   mips_cp0_names[(l >> OP_SH_RD) & OP_MASK_RD]);
   3847 	  else
   3848 	    (*info->fprintf_func) (info->stream, "$%ld",
   3849 				   (l >> OP_SH_RD) & OP_MASK_RD);
   3850 	  break;
   3851 
   3852 	case 'K':
   3853 	  (*info->fprintf_func) (info->stream, "%s",
   3854 				 mips_hwr_names[(l >> OP_SH_RD) & OP_MASK_RD]);
   3855 	  break;
   3856 
   3857 	case 'N':
   3858 	  (*info->fprintf_func) (info->stream,
   3859 				 ((opp->pinfo & (FP_D | FP_S)) != 0
   3860 				  ? "$fcc%ld" : "$cc%ld"),
   3861 				 (l >> OP_SH_BCC) & OP_MASK_BCC);
   3862 	  break;
   3863 
   3864 	case 'M':
   3865 	  (*info->fprintf_func) (info->stream, "$fcc%ld",
   3866 				 (l >> OP_SH_CCC) & OP_MASK_CCC);
   3867 	  break;
   3868 
   3869 	case 'P':
   3870 	  (*info->fprintf_func) (info->stream, "%ld",
   3871 				 (l >> OP_SH_PERFREG) & OP_MASK_PERFREG);
   3872 	  break;
   3873 
   3874 	case 'e':
   3875 	  (*info->fprintf_func) (info->stream, "%ld",
   3876 				 (l >> OP_SH_VECBYTE) & OP_MASK_VECBYTE);
   3877 	  break;
   3878 
   3879 	case '%':
   3880 	  (*info->fprintf_func) (info->stream, "%ld",
   3881 				 (l >> OP_SH_VECALIGN) & OP_MASK_VECALIGN);
   3882 	  break;
   3883 
   3884 	case 'H':
   3885 	  (*info->fprintf_func) (info->stream, "%ld",
   3886 				 (l >> OP_SH_SEL) & OP_MASK_SEL);
   3887 	  break;
   3888 
   3889 	case 'O':
   3890 	  (*info->fprintf_func) (info->stream, "%ld",
   3891 				 (l >> OP_SH_ALN) & OP_MASK_ALN);
   3892 	  break;
   3893 
   3894 	case 'Q':
   3895 	  {
   3896 	    unsigned int vsel = (l >> OP_SH_VSEL) & OP_MASK_VSEL;
   3897 
   3898 	    if ((vsel & 0x10) == 0)
   3899 	      {
   3900 		int fmt;
   3901 
   3902 		vsel &= 0x0f;
   3903 		for (fmt = 0; fmt < 3; fmt++, vsel >>= 1)
   3904 		  if ((vsel & 1) == 0)
   3905 		    break;
   3906 		(*info->fprintf_func) (info->stream, "$v%ld[%d]",
   3907 				       (l >> OP_SH_FT) & OP_MASK_FT,
   3908 				       vsel >> 1);
   3909 	      }
   3910 	    else if ((vsel & 0x08) == 0)
   3911 	      {
   3912 		(*info->fprintf_func) (info->stream, "$v%ld",
   3913 				       (l >> OP_SH_FT) & OP_MASK_FT);
   3914 	      }
   3915 	    else
   3916 	      {
   3917 		(*info->fprintf_func) (info->stream, "0x%lx",
   3918 				       (l >> OP_SH_FT) & OP_MASK_FT);
   3919 	      }
   3920 	  }
   3921 	  break;
   3922 
   3923 	case 'X':
   3924 	  (*info->fprintf_func) (info->stream, "$v%ld",
   3925 				 (l >> OP_SH_FD) & OP_MASK_FD);
   3926 	  break;
   3927 
   3928 	case 'Y':
   3929 	  (*info->fprintf_func) (info->stream, "$v%ld",
   3930 				 (l >> OP_SH_FS) & OP_MASK_FS);
   3931 	  break;
   3932 
   3933 	case 'Z':
   3934 	  (*info->fprintf_func) (info->stream, "$v%ld",
   3935 				 (l >> OP_SH_FT) & OP_MASK_FT);
   3936 	  break;
   3937 
   3938 	default:
   3939 	  /* xgettext:c-format */
   3940 	  (*info->fprintf_func) (info->stream,
   3941 				 _("# internal error, undefined modifier(%c)"),
   3942 				 *d);
   3943 	  return;
   3944 	}
   3945     }
   3946 }
   3947 
   3948 /* Check if the object uses NewABI conventions.  */
   3950 #if 0
   3951 static int
   3952 is_newabi (header)
   3953      Elf_Internal_Ehdr *header;
   3954 {
   3955   /* There are no old-style ABIs which use 64-bit ELF.  */
   3956   if (header->e_ident[EI_CLASS] == ELFCLASS64)
   3957     return 1;
   3958 
   3959   /* If a 32-bit ELF file, n32 is a new-style ABI.  */
   3960   if ((header->e_flags & EF_MIPS_ABI2) != 0)
   3961     return 1;
   3962 
   3963   return 0;
   3964 }
   3965 #endif
   3966 
   3967 /* Print the mips instruction at address MEMADDR in debugged memory,
   3969    on using INFO.  Returns length of the instruction, in bytes, which is
   3970    always INSNLEN.  BIGENDIAN must be 1 if this is big-endian code, 0 if
   3971    this is little-endian code.  */
   3972 
   3973 static int
   3974 print_insn_mips (bfd_vma memaddr,
   3975 		 unsigned long int word,
   3976 		 struct disassemble_info *info)
   3977 {
   3978   const struct mips_opcode *op;
   3979   static bfd_boolean init = 0;
   3980   static const struct mips_opcode *mips_hash[OP_MASK_OP + 1];
   3981 
   3982   /* Build a hash table to shorten the search time.  */
   3983   if (! init)
   3984     {
   3985       unsigned int i;
   3986 
   3987       for (i = 0; i <= OP_MASK_OP; i++)
   3988 	{
   3989 	  for (op = mips_opcodes; op < &mips_opcodes[NUMOPCODES]; op++)
   3990 	    {
   3991 	      if (op->pinfo == INSN_MACRO
   3992 		  || (no_aliases && (op->pinfo2 & INSN2_ALIAS)))
   3993 		continue;
   3994 	      if (i == ((op->match >> OP_SH_OP) & OP_MASK_OP))
   3995 		{
   3996 		  mips_hash[i] = op;
   3997 		  break;
   3998 		}
   3999 	    }
   4000 	}
   4001 
   4002       init = 1;
   4003     }
   4004 
   4005   info->bytes_per_chunk = INSNLEN;
   4006   info->display_endian = info->endian;
   4007   info->insn_info_valid = 1;
   4008   info->branch_delay_insns = 0;
   4009   info->data_size = 0;
   4010   info->insn_type = dis_nonbranch;
   4011   info->target = 0;
   4012   info->target2 = 0;
   4013 
   4014   op = mips_hash[(word >> OP_SH_OP) & OP_MASK_OP];
   4015   if (op != NULL)
   4016     {
   4017       for (; op < &mips_opcodes[NUMOPCODES]; op++)
   4018 	{
   4019 	  if (op->pinfo != INSN_MACRO
   4020 	      && !(no_aliases && (op->pinfo2 & INSN2_ALIAS))
   4021 	      && (word & op->mask) == op->match)
   4022 	    {
   4023 	      const char *d;
   4024 
   4025 	      /* We always allow to disassemble the jalx instruction.  */
   4026 	      if (! OPCODE_IS_MEMBER (op, mips_isa, mips_processor)
   4027 		  && strcmp (op->name, "jalx"))
   4028 		continue;
   4029 
   4030 	      /* Figure out instruction type and branch delay information.  */
   4031 	      if ((op->pinfo & INSN_UNCOND_BRANCH_DELAY) != 0)
   4032 	        {
   4033 		  if ((info->insn_type & INSN_WRITE_GPR_31) != 0)
   4034 		    info->insn_type = dis_jsr;
   4035 		  else
   4036 		    info->insn_type = dis_branch;
   4037 		  info->branch_delay_insns = 1;
   4038 		}
   4039 	      else if ((op->pinfo & (INSN_COND_BRANCH_DELAY
   4040 				     | INSN_COND_BRANCH_LIKELY)) != 0)
   4041 		{
   4042 		  if ((info->insn_type & INSN_WRITE_GPR_31) != 0)
   4043 		    info->insn_type = dis_condjsr;
   4044 		  else
   4045 		    info->insn_type = dis_condbranch;
   4046 		  info->branch_delay_insns = 1;
   4047 		}
   4048 	      else if ((op->pinfo & (INSN_STORE_MEMORY
   4049 				     | INSN_LOAD_MEMORY_DELAY)) != 0)
   4050 		info->insn_type = dis_dref;
   4051 
   4052 	      (*info->fprintf_func) (info->stream, "%s", op->name);
   4053 
   4054 	      d = op->args;
   4055 	      if (d != NULL && *d != '\0')
   4056 		{
   4057 		  (*info->fprintf_func) (info->stream, "\t");
   4058 		  print_insn_args (d, word, memaddr, info, op);
   4059 		}
   4060 
   4061 	      return INSNLEN;
   4062 	    }
   4063 	}
   4064     }
   4065 
   4066   /* Handle undefined instructions.  */
   4067   info->insn_type = dis_noninsn;
   4068   (*info->fprintf_func) (info->stream, "0x%lx", word);
   4069   return INSNLEN;
   4070 }
   4071 
   4072 /* In an environment where we do not know the symbol type of the
   4074    instruction we are forced to assume that the low order bit of the
   4075    instructions' address may mark it as a mips16 instruction.  If we
   4076    are single stepping, or the pc is within the disassembled function,
   4077    this works.  Otherwise, we need a clue.  Sometimes.  */
   4078 
   4079 static int
   4080 _print_insn_mips (bfd_vma memaddr,
   4081 		  struct disassemble_info *info,
   4082 		  enum bfd_endian endianness)
   4083 {
   4084   bfd_byte buffer[INSNLEN];
   4085   int status;
   4086 
   4087   set_default_mips_dis_options (info);
   4088   parse_mips_dis_options (info->disassembler_options);
   4089 
   4090 #if 0
   4091 #if 1
   4092   /* FIXME: If odd address, this is CLEARLY a mips 16 instruction.  */
   4093   /* Only a few tools will work this way.  */
   4094   if (memaddr & 0x01)
   4095     return print_insn_mips16 (memaddr, info);
   4096 #endif
   4097 
   4098 #if SYMTAB_AVAILABLE
   4099   if (info->mach == bfd_mach_mips16
   4100       || (info->flavour == bfd_target_elf_flavour
   4101 	  && info->symbols != NULL
   4102 	  && ((*(elf_symbol_type **) info->symbols)->internal_elf_sym.st_other
   4103 	      == STO_MIPS16)))
   4104     return print_insn_mips16 (memaddr, info);
   4105 #endif
   4106 #endif
   4107 
   4108   status = (*info->read_memory_func) (memaddr, buffer, INSNLEN, info);
   4109   if (status == 0)
   4110     {
   4111       unsigned long insn;
   4112 
   4113       if (endianness == BFD_ENDIAN_BIG)
   4114 	insn = (unsigned long) bfd_getb32 (buffer);
   4115       else
   4116 	insn = (unsigned long) bfd_getl32 (buffer);
   4117 
   4118       return print_insn_mips (memaddr, insn, info);
   4119     }
   4120   else
   4121     {
   4122       (*info->memory_error_func) (status, memaddr, info);
   4123       return -1;
   4124     }
   4125 }
   4126 
   4127 int
   4128 print_insn_big_mips (bfd_vma memaddr, struct disassemble_info *info)
   4129 {
   4130   return _print_insn_mips (memaddr, info, BFD_ENDIAN_BIG);
   4131 }
   4132 
   4133 int
   4134 print_insn_little_mips (bfd_vma memaddr, struct disassemble_info *info)
   4135 {
   4136   return _print_insn_mips (memaddr, info, BFD_ENDIAN_LITTLE);
   4137 }
   4138 
   4139 /* Disassemble mips16 instructions.  */
   4141 #if 0
   4142 static int
   4143 print_insn_mips16 (bfd_vma memaddr, struct disassemble_info *info)
   4144 {
   4145   int status;
   4146   bfd_byte buffer[2];
   4147   int length;
   4148   int insn;
   4149   bfd_boolean use_extend;
   4150   int extend = 0;
   4151   const struct mips_opcode *op, *opend;
   4152 
   4153   info->bytes_per_chunk = 2;
   4154   info->display_endian = info->endian;
   4155   info->insn_info_valid = 1;
   4156   info->branch_delay_insns = 0;
   4157   info->data_size = 0;
   4158   info->insn_type = dis_nonbranch;
   4159   info->target = 0;
   4160   info->target2 = 0;
   4161 
   4162   status = (*info->read_memory_func) (memaddr, buffer, 2, info);
   4163   if (status != 0)
   4164     {
   4165       (*info->memory_error_func) (status, memaddr, info);
   4166       return -1;
   4167     }
   4168 
   4169   length = 2;
   4170 
   4171   if (info->endian == BFD_ENDIAN_BIG)
   4172     insn = bfd_getb16 (buffer);
   4173   else
   4174     insn = bfd_getl16 (buffer);
   4175 
   4176   /* Handle the extend opcode specially.  */
   4177   use_extend = FALSE;
   4178   if ((insn & 0xf800) == 0xf000)
   4179     {
   4180       use_extend = TRUE;
   4181       extend = insn & 0x7ff;
   4182 
   4183       memaddr += 2;
   4184 
   4185       status = (*info->read_memory_func) (memaddr, buffer, 2, info);
   4186       if (status != 0)
   4187 	{
   4188 	  (*info->fprintf_func) (info->stream, "extend 0x%x",
   4189 				 (unsigned int) extend);
   4190 	  (*info->memory_error_func) (status, memaddr, info);
   4191 	  return -1;
   4192 	}
   4193 
   4194       if (info->endian == BFD_ENDIAN_BIG)
   4195 	insn = bfd_getb16 (buffer);
   4196       else
   4197 	insn = bfd_getl16 (buffer);
   4198 
   4199       /* Check for an extend opcode followed by an extend opcode.  */
   4200       if ((insn & 0xf800) == 0xf000)
   4201 	{
   4202 	  (*info->fprintf_func) (info->stream, "extend 0x%x",
   4203 				 (unsigned int) extend);
   4204 	  info->insn_type = dis_noninsn;
   4205 	  return length;
   4206 	}
   4207 
   4208       length += 2;
   4209     }
   4210 
   4211   /* FIXME: Should probably use a hash table on the major opcode here.  */
   4212 
   4213   opend = mips16_opcodes + bfd_mips16_num_opcodes;
   4214   for (op = mips16_opcodes; op < opend; op++)
   4215     {
   4216       if (op->pinfo != INSN_MACRO
   4217 	  && !(no_aliases && (op->pinfo2 & INSN2_ALIAS))
   4218 	  && (insn & op->mask) == op->match)
   4219 	{
   4220 	  const char *s;
   4221 
   4222 	  if (strchr (op->args, 'a') != NULL)
   4223 	    {
   4224 	      if (use_extend)
   4225 		{
   4226 		  (*info->fprintf_func) (info->stream, "extend 0x%x",
   4227 					 (unsigned int) extend);
   4228 		  info->insn_type = dis_noninsn;
   4229 		  return length - 2;
   4230 		}
   4231 
   4232 	      use_extend = FALSE;
   4233 
   4234 	      memaddr += 2;
   4235 
   4236 	      status = (*info->read_memory_func) (memaddr, buffer, 2,
   4237 						  info);
   4238 	      if (status == 0)
   4239 		{
   4240 		  use_extend = TRUE;
   4241 		  if (info->endian == BFD_ENDIAN_BIG)
   4242 		    extend = bfd_getb16 (buffer);
   4243 		  else
   4244 		    extend = bfd_getl16 (buffer);
   4245 		  length += 2;
   4246 		}
   4247 	    }
   4248 
   4249 	  (*info->fprintf_func) (info->stream, "%s", op->name);
   4250 	  if (op->args[0] != '\0')
   4251 	    (*info->fprintf_func) (info->stream, "\t");
   4252 
   4253 	  for (s = op->args; *s != '\0'; s++)
   4254 	    {
   4255 	      if (*s == ','
   4256 		  && s[1] == 'w'
   4257 		  && (((insn >> MIPS16OP_SH_RX) & MIPS16OP_MASK_RX)
   4258 		      == ((insn >> MIPS16OP_SH_RY) & MIPS16OP_MASK_RY)))
   4259 		{
   4260 		  /* Skip the register and the comma.  */
   4261 		  ++s;
   4262 		  continue;
   4263 		}
   4264 	      if (*s == ','
   4265 		  && s[1] == 'v'
   4266 		  && (((insn >> MIPS16OP_SH_RZ) & MIPS16OP_MASK_RZ)
   4267 		      == ((insn >> MIPS16OP_SH_RX) & MIPS16OP_MASK_RX)))
   4268 		{
   4269 		  /* Skip the register and the comma.  */
   4270 		  ++s;
   4271 		  continue;
   4272 		}
   4273 	      print_mips16_insn_arg (*s, op, insn, use_extend, extend, memaddr,
   4274 				     info);
   4275 	    }
   4276 
   4277 	  if ((op->pinfo & INSN_UNCOND_BRANCH_DELAY) != 0)
   4278 	    {
   4279 	      info->branch_delay_insns = 1;
   4280 	      if (info->insn_type != dis_jsr)
   4281 		info->insn_type = dis_branch;
   4282 	    }
   4283 
   4284 	  return length;
   4285 	}
   4286     }
   4287 
   4288   if (use_extend)
   4289     (*info->fprintf_func) (info->stream, "0x%x", extend | 0xf000);
   4290   (*info->fprintf_func) (info->stream, "0x%x", insn);
   4291   info->insn_type = dis_noninsn;
   4292 
   4293   return length;
   4294 }
   4295 
   4296 /* Disassemble an operand for a mips16 instruction.  */
   4297 
   4298 static void
   4299 print_mips16_insn_arg (char type,
   4300 		       const struct mips_opcode *op,
   4301 		       int l,
   4302 		       bfd_boolean use_extend,
   4303 		       int extend,
   4304 		       bfd_vma memaddr,
   4305 		       struct disassemble_info *info)
   4306 {
   4307   switch (type)
   4308     {
   4309     case ',':
   4310     case '(':
   4311     case ')':
   4312       (*info->fprintf_func) (info->stream, "%c", type);
   4313       break;
   4314 
   4315     case 'y':
   4316     case 'w':
   4317       (*info->fprintf_func) (info->stream, "%s",
   4318 			     mips16_reg_names(((l >> MIPS16OP_SH_RY)
   4319 					       & MIPS16OP_MASK_RY)));
   4320       break;
   4321 
   4322     case 'x':
   4323     case 'v':
   4324       (*info->fprintf_func) (info->stream, "%s",
   4325 			     mips16_reg_names(((l >> MIPS16OP_SH_RX)
   4326 					       & MIPS16OP_MASK_RX)));
   4327       break;
   4328 
   4329     case 'z':
   4330       (*info->fprintf_func) (info->stream, "%s",
   4331 			     mips16_reg_names(((l >> MIPS16OP_SH_RZ)
   4332 					       & MIPS16OP_MASK_RZ)));
   4333       break;
   4334 
   4335     case 'Z':
   4336       (*info->fprintf_func) (info->stream, "%s",
   4337 			     mips16_reg_names(((l >> MIPS16OP_SH_MOVE32Z)
   4338 					       & MIPS16OP_MASK_MOVE32Z)));
   4339       break;
   4340 
   4341     case '0':
   4342       (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[0]);
   4343       break;
   4344 
   4345     case 'S':
   4346       (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[29]);
   4347       break;
   4348 
   4349     case 'P':
   4350       (*info->fprintf_func) (info->stream, "$pc");
   4351       break;
   4352 
   4353     case 'R':
   4354       (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[31]);
   4355       break;
   4356 
   4357     case 'X':
   4358       (*info->fprintf_func) (info->stream, "%s",
   4359 			     mips_gpr_names[((l >> MIPS16OP_SH_REGR32)
   4360 					    & MIPS16OP_MASK_REGR32)]);
   4361       break;
   4362 
   4363     case 'Y':
   4364       (*info->fprintf_func) (info->stream, "%s",
   4365 			     mips_gpr_names[MIPS16OP_EXTRACT_REG32R (l)]);
   4366       break;
   4367 
   4368     case '<':
   4369     case '>':
   4370     case '[':
   4371     case ']':
   4372     case '4':
   4373     case '5':
   4374     case 'H':
   4375     case 'W':
   4376     case 'D':
   4377     case 'j':
   4378     case '6':
   4379     case '8':
   4380     case 'V':
   4381     case 'C':
   4382     case 'U':
   4383     case 'k':
   4384     case 'K':
   4385     case 'p':
   4386     case 'q':
   4387     case 'A':
   4388     case 'B':
   4389     case 'E':
   4390       {
   4391 	int immed, nbits, shift, signedp, extbits, pcrel, extu, branch;
   4392 
   4393 	shift = 0;
   4394 	signedp = 0;
   4395 	extbits = 16;
   4396 	pcrel = 0;
   4397 	extu = 0;
   4398 	branch = 0;
   4399 	switch (type)
   4400 	  {
   4401 	  case '<':
   4402 	    nbits = 3;
   4403 	    immed = (l >> MIPS16OP_SH_RZ) & MIPS16OP_MASK_RZ;
   4404 	    extbits = 5;
   4405 	    extu = 1;
   4406 	    break;
   4407 	  case '>':
   4408 	    nbits = 3;
   4409 	    immed = (l >> MIPS16OP_SH_RX) & MIPS16OP_MASK_RX;
   4410 	    extbits = 5;
   4411 	    extu = 1;
   4412 	    break;
   4413 	  case '[':
   4414 	    nbits = 3;
   4415 	    immed = (l >> MIPS16OP_SH_RZ) & MIPS16OP_MASK_RZ;
   4416 	    extbits = 6;
   4417 	    extu = 1;
   4418 	    break;
   4419 	  case ']':
   4420 	    nbits = 3;
   4421 	    immed = (l >> MIPS16OP_SH_RX) & MIPS16OP_MASK_RX;
   4422 	    extbits = 6;
   4423 	    extu = 1;
   4424 	    break;
   4425 	  case '4':
   4426 	    nbits = 4;
   4427 	    immed = (l >> MIPS16OP_SH_IMM4) & MIPS16OP_MASK_IMM4;
   4428 	    signedp = 1;
   4429 	    extbits = 15;
   4430 	    break;
   4431 	  case '5':
   4432 	    nbits = 5;
   4433 	    immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
   4434 	    info->insn_type = dis_dref;
   4435 	    info->data_size = 1;
   4436 	    break;
   4437 	  case 'H':
   4438 	    nbits = 5;
   4439 	    shift = 1;
   4440 	    immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
   4441 	    info->insn_type = dis_dref;
   4442 	    info->data_size = 2;
   4443 	    break;
   4444 	  case 'W':
   4445 	    nbits = 5;
   4446 	    shift = 2;
   4447 	    immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
   4448 	    if ((op->pinfo & MIPS16_INSN_READ_PC) == 0
   4449 		&& (op->pinfo & MIPS16_INSN_READ_SP) == 0)
   4450 	      {
   4451 		info->insn_type = dis_dref;
   4452 		info->data_size = 4;
   4453 	      }
   4454 	    break;
   4455 	  case 'D':
   4456 	    nbits = 5;
   4457 	    shift = 3;
   4458 	    immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
   4459 	    info->insn_type = dis_dref;
   4460 	    info->data_size = 8;
   4461 	    break;
   4462 	  case 'j':
   4463 	    nbits = 5;
   4464 	    immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
   4465 	    signedp = 1;
   4466 	    break;
   4467 	  case '6':
   4468 	    nbits = 6;
   4469 	    immed = (l >> MIPS16OP_SH_IMM6) & MIPS16OP_MASK_IMM6;
   4470 	    break;
   4471 	  case '8':
   4472 	    nbits = 8;
   4473 	    immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
   4474 	    break;
   4475 	  case 'V':
   4476 	    nbits = 8;
   4477 	    shift = 2;
   4478 	    immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
   4479 	    /* FIXME: This might be lw, or it might be addiu to $sp or
   4480                $pc.  We assume it's load.  */
   4481 	    info->insn_type = dis_dref;
   4482 	    info->data_size = 4;
   4483 	    break;
   4484 	  case 'C':
   4485 	    nbits = 8;
   4486 	    shift = 3;
   4487 	    immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
   4488 	    info->insn_type = dis_dref;
   4489 	    info->data_size = 8;
   4490 	    break;
   4491 	  case 'U':
   4492 	    nbits = 8;
   4493 	    immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
   4494 	    extu = 1;
   4495 	    break;
   4496 	  case 'k':
   4497 	    nbits = 8;
   4498 	    immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
   4499 	    signedp = 1;
   4500 	    break;
   4501 	  case 'K':
   4502 	    nbits = 8;
   4503 	    shift = 3;
   4504 	    immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
   4505 	    signedp = 1;
   4506 	    break;
   4507 	  case 'p':
   4508 	    nbits = 8;
   4509 	    immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
   4510 	    signedp = 1;
   4511 	    pcrel = 1;
   4512 	    branch = 1;
   4513 	    info->insn_type = dis_condbranch;
   4514 	    break;
   4515 	  case 'q':
   4516 	    nbits = 11;
   4517 	    immed = (l >> MIPS16OP_SH_IMM11) & MIPS16OP_MASK_IMM11;
   4518 	    signedp = 1;
   4519 	    pcrel = 1;
   4520 	    branch = 1;
   4521 	    info->insn_type = dis_branch;
   4522 	    break;
   4523 	  case 'A':
   4524 	    nbits = 8;
   4525 	    shift = 2;
   4526 	    immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
   4527 	    pcrel = 1;
   4528 	    /* FIXME: This can be lw or la.  We assume it is lw.  */
   4529 	    info->insn_type = dis_dref;
   4530 	    info->data_size = 4;
   4531 	    break;
   4532 	  case 'B':
   4533 	    nbits = 5;
   4534 	    shift = 3;
   4535 	    immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
   4536 	    pcrel = 1;
   4537 	    info->insn_type = dis_dref;
   4538 	    info->data_size = 8;
   4539 	    break;
   4540 	  case 'E':
   4541 	    nbits = 5;
   4542 	    shift = 2;
   4543 	    immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
   4544 	    pcrel = 1;
   4545 	    break;
   4546 	  default:
   4547 	    abort ();
   4548 	  }
   4549 
   4550 	if (! use_extend)
   4551 	  {
   4552 	    if (signedp && immed >= (1 << (nbits - 1)))
   4553 	      immed -= 1 << nbits;
   4554 	    immed <<= shift;
   4555 	    if ((type == '<' || type == '>' || type == '[' || type == ']')
   4556 		&& immed == 0)
   4557 	      immed = 8;
   4558 	  }
   4559 	else
   4560 	  {
   4561 	    if (extbits == 16)
   4562 	      immed |= ((extend & 0x1f) << 11) | (extend & 0x7e0);
   4563 	    else if (extbits == 15)
   4564 	      immed |= ((extend & 0xf) << 11) | (extend & 0x7f0);
   4565 	    else
   4566 	      immed = ((extend >> 6) & 0x1f) | (extend & 0x20);
   4567 	    immed &= (1 << extbits) - 1;
   4568 	    if (! extu && immed >= (1 << (extbits - 1)))
   4569 	      immed -= 1 << extbits;
   4570 	  }
   4571 
   4572 	if (! pcrel)
   4573 	  (*info->fprintf_func) (info->stream, "%d", immed);
   4574 	else
   4575 	  {
   4576 	    bfd_vma baseaddr;
   4577 
   4578 	    if (branch)
   4579 	      {
   4580 		immed *= 2;
   4581 		baseaddr = memaddr + 2;
   4582 	      }
   4583 	    else if (use_extend)
   4584 	      baseaddr = memaddr - 2;
   4585 	    else
   4586 	      {
   4587 		int status;
   4588 		bfd_byte buffer[2];
   4589 
   4590 		baseaddr = memaddr;
   4591 
   4592 		/* If this instruction is in the delay slot of a jr
   4593                    instruction, the base address is the address of the
   4594                    jr instruction.  If it is in the delay slot of jalr
   4595                    instruction, the base address is the address of the
   4596                    jalr instruction.  This test is unreliable: we have
   4597                    no way of knowing whether the previous word is
   4598                    instruction or data.  */
   4599 		status = (*info->read_memory_func) (memaddr - 4, buffer, 2,
   4600 						    info);
   4601 		if (status == 0
   4602 		    && (((info->endian == BFD_ENDIAN_BIG
   4603 			  ? bfd_getb16 (buffer)
   4604 			  : bfd_getl16 (buffer))
   4605 			 & 0xf800) == 0x1800))
   4606 		  baseaddr = memaddr - 4;
   4607 		else
   4608 		  {
   4609 		    status = (*info->read_memory_func) (memaddr - 2, buffer,
   4610 							2, info);
   4611 		    if (status == 0
   4612 			&& (((info->endian == BFD_ENDIAN_BIG
   4613 			      ? bfd_getb16 (buffer)
   4614 			      : bfd_getl16 (buffer))
   4615 			     & 0xf81f) == 0xe800))
   4616 		      baseaddr = memaddr - 2;
   4617 		  }
   4618 	      }
   4619 	    info->target = (baseaddr & ~((1 << shift) - 1)) + immed;
   4620 	    if (pcrel && branch
   4621 		&& info->flavour == bfd_target_unknown_flavour)
   4622 	      /* For gdb disassembler, maintain odd address.  */
   4623 	      info->target |= 1;
   4624 	    (*info->print_address_func) (info->target, info);
   4625 	  }
   4626       }
   4627       break;
   4628 
   4629     case 'a':
   4630       {
   4631 	int jalx = l & 0x400;
   4632 
   4633 	if (! use_extend)
   4634 	  extend = 0;
   4635 	l = ((l & 0x1f) << 23) | ((l & 0x3e0) << 13) | (extend << 2);
   4636 	if (!jalx && info->flavour == bfd_target_unknown_flavour)
   4637 	  /* For gdb disassembler, maintain odd address.  */
   4638 	  l |= 1;
   4639       }
   4640       info->target = ((memaddr + 4) & ~(bfd_vma) 0x0fffffff) | l;
   4641       (*info->print_address_func) (info->target, info);
   4642       info->insn_type = dis_jsr;
   4643       info->branch_delay_insns = 1;
   4644       break;
   4645 
   4646     case 'l':
   4647     case 'L':
   4648       {
   4649 	int need_comma, amask, smask;
   4650 
   4651 	need_comma = 0;
   4652 
   4653 	l = (l >> MIPS16OP_SH_IMM6) & MIPS16OP_MASK_IMM6;
   4654 
   4655 	amask = (l >> 3) & 7;
   4656 
   4657 	if (amask > 0 && amask < 5)
   4658 	  {
   4659 	    (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[4]);
   4660 	    if (amask > 1)
   4661 	      (*info->fprintf_func) (info->stream, "-%s",
   4662 				     mips_gpr_names[amask + 3]);
   4663 	    need_comma = 1;
   4664 	  }
   4665 
   4666 	smask = (l >> 1) & 3;
   4667 	if (smask == 3)
   4668 	  {
   4669 	    (*info->fprintf_func) (info->stream, "%s??",
   4670 				   need_comma ? "," : "");
   4671 	    need_comma = 1;
   4672 	  }
   4673 	else if (smask > 0)
   4674 	  {
   4675 	    (*info->fprintf_func) (info->stream, "%s%s",
   4676 				   need_comma ? "," : "",
   4677 				   mips_gpr_names[16]);
   4678 	    if (smask > 1)
   4679 	      (*info->fprintf_func) (info->stream, "-%s",
   4680 				     mips_gpr_names[smask + 15]);
   4681 	    need_comma = 1;
   4682 	  }
   4683 
   4684 	if (l & 1)
   4685 	  {
   4686 	    (*info->fprintf_func) (info->stream, "%s%s",
   4687 				   need_comma ? "," : "",
   4688 				   mips_gpr_names[31]);
   4689 	    need_comma = 1;
   4690 	  }
   4691 
   4692 	if (amask == 5 || amask == 6)
   4693 	  {
   4694 	    (*info->fprintf_func) (info->stream, "%s$f0",
   4695 				   need_comma ? "," : "");
   4696 	    if (amask == 6)
   4697 	      (*info->fprintf_func) (info->stream, "-$f1");
   4698 	  }
   4699       }
   4700       break;
   4701 
   4702     case 'm':
   4703     case 'M':
   4704       /* MIPS16e save/restore.  */
   4705       {
   4706       int need_comma = 0;
   4707       int amask, args, statics;
   4708       int nsreg, smask;
   4709       int framesz;
   4710       int i, j;
   4711 
   4712       l = l & 0x7f;
   4713       if (use_extend)
   4714         l |= extend << 16;
   4715 
   4716       amask = (l >> 16) & 0xf;
   4717       if (amask == MIPS16_ALL_ARGS)
   4718         {
   4719           args = 4;
   4720           statics = 0;
   4721         }
   4722       else if (amask == MIPS16_ALL_STATICS)
   4723         {
   4724           args = 0;
   4725           statics = 4;
   4726         }
   4727       else
   4728         {
   4729           args = amask >> 2;
   4730           statics = amask & 3;
   4731         }
   4732 
   4733       if (args > 0) {
   4734           (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[4]);
   4735           if (args > 1)
   4736             (*info->fprintf_func) (info->stream, "-%s",
   4737                                    mips_gpr_names[4 + args - 1]);
   4738           need_comma = 1;
   4739       }
   4740 
   4741       framesz = (((l >> 16) & 0xf0) | (l & 0x0f)) * 8;
   4742       if (framesz == 0 && !use_extend)
   4743         framesz = 128;
   4744 
   4745       (*info->fprintf_func) (info->stream, "%s%d",
   4746                              need_comma ? "," : "",
   4747                              framesz);
   4748 
   4749       if (l & 0x40)                   /* $ra */
   4750         (*info->fprintf_func) (info->stream, ",%s", mips_gpr_names[31]);
   4751 
   4752       nsreg = (l >> 24) & 0x7;
   4753       smask = 0;
   4754       if (l & 0x20)                   /* $s0 */
   4755         smask |= 1 << 0;
   4756       if (l & 0x10)                   /* $s1 */
   4757         smask |= 1 << 1;
   4758       if (nsreg > 0)                  /* $s2-$s8 */
   4759         smask |= ((1 << nsreg) - 1) << 2;
   4760 
   4761       /* Find first set static reg bit.  */
   4762       for (i = 0; i < 9; i++)
   4763         {
   4764           if (smask & (1 << i))
   4765             {
   4766               (*info->fprintf_func) (info->stream, ",%s",
   4767                                      mips_gpr_names[i == 8 ? 30 : (16 + i)]);
   4768               /* Skip over string of set bits.  */
   4769               for (j = i; smask & (2 << j); j++)
   4770                 continue;
   4771               if (j > i)
   4772                 (*info->fprintf_func) (info->stream, "-%s",
   4773                                        mips_gpr_names[j == 8 ? 30 : (16 + j)]);
   4774               i = j + 1;
   4775             }
   4776         }
   4777 
   4778       /* Statics $ax - $a3.  */
   4779       if (statics == 1)
   4780         (*info->fprintf_func) (info->stream, ",%s", mips_gpr_names[7]);
   4781       else if (statics > 0)
   4782         (*info->fprintf_func) (info->stream, ",%s-%s",
   4783                                mips_gpr_names[7 - statics + 1],
   4784                                mips_gpr_names[7]);
   4785       }
   4786       break;
   4787 
   4788     default:
   4789       /* xgettext:c-format */
   4790       (*info->fprintf_func)
   4791 	(info->stream,
   4792 	 _("# internal disassembler error, unrecognised modifier (%c)"),
   4793 	 type);
   4794       abort ();
   4795     }
   4796 }
   4797 
   4798 void
   4799 print_mips_disassembler_options (FILE *stream)
   4800 {
   4801   unsigned int i;
   4802 
   4803   fprintf (stream, _("\n\
   4804 The following MIPS specific disassembler options are supported for use\n\
   4805 with the -M switch (multiple options should be separated by commas):\n"));
   4806 
   4807   fprintf (stream, _("\n\
   4808   gpr-names=ABI            Print GPR names according to  specified ABI.\n\
   4809                            Default: based on binary being disassembled.\n"));
   4810 
   4811   fprintf (stream, _("\n\
   4812   fpr-names=ABI            Print FPR names according to specified ABI.\n\
   4813                            Default: numeric.\n"));
   4814 
   4815   fprintf (stream, _("\n\
   4816   cp0-names=ARCH           Print CP0 register names according to\n\
   4817                            specified architecture.\n\
   4818                            Default: based on binary being disassembled.\n"));
   4819 
   4820   fprintf (stream, _("\n\
   4821   hwr-names=ARCH           Print HWR names according to specified \n\
   4822 			   architecture.\n\
   4823                            Default: based on binary being disassembled.\n"));
   4824 
   4825   fprintf (stream, _("\n\
   4826   reg-names=ABI            Print GPR and FPR names according to\n\
   4827                            specified ABI.\n"));
   4828 
   4829   fprintf (stream, _("\n\
   4830   reg-names=ARCH           Print CP0 register and HWR names according to\n\
   4831                            specified architecture.\n"));
   4832 
   4833   fprintf (stream, _("\n\
   4834   For the options above, the following values are supported for \"ABI\":\n\
   4835    "));
   4836   for (i = 0; i < ARRAY_SIZE (mips_abi_choices); i++)
   4837     fprintf (stream, " %s", mips_abi_choices[i].name);
   4838   fprintf (stream, _("\n"));
   4839 
   4840   fprintf (stream, _("\n\
   4841   For the options above, The following values are supported for \"ARCH\":\n\
   4842    "));
   4843   for (i = 0; i < ARRAY_SIZE (mips_arch_choices); i++)
   4844     if (*mips_arch_choices[i].name != '\0')
   4845       fprintf (stream, " %s", mips_arch_choices[i].name);
   4846   fprintf (stream, _("\n"));
   4847 
   4848   fprintf (stream, _("\n"));
   4849 }
   4850 #endif
   4851