176cad711SPaolo Bonzini /* Print mips instructions for GDB, the GNU debugger, or for objdump.
276cad711SPaolo Bonzini Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
376cad711SPaolo Bonzini 2000, 2001, 2002, 2003
476cad711SPaolo Bonzini Free Software Foundation, Inc.
576cad711SPaolo Bonzini Contributed by Nobuyuki Hikichi(hikichi@sra.co.jp).
676cad711SPaolo Bonzini
776cad711SPaolo Bonzini This file is part of GDB, GAS, and the GNU binutils.
876cad711SPaolo Bonzini
976cad711SPaolo Bonzini This program is free software; you can redistribute it and/or modify
1076cad711SPaolo Bonzini it under the terms of the GNU General Public License as published by
1176cad711SPaolo Bonzini the Free Software Foundation; either version 2 of the License, or
1276cad711SPaolo Bonzini (at your option) any later version.
1376cad711SPaolo Bonzini
1476cad711SPaolo Bonzini This program is distributed in the hope that it will be useful,
1576cad711SPaolo Bonzini but WITHOUT ANY WARRANTY; without even the implied warranty of
1676cad711SPaolo Bonzini MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1776cad711SPaolo Bonzini GNU General Public License for more details.
1876cad711SPaolo Bonzini
1976cad711SPaolo Bonzini You should have received a copy of the GNU General Public License
2076cad711SPaolo Bonzini along with this program; if not, see <http://www.gnu.org/licenses/>. */
2176cad711SPaolo Bonzini
22c684822aSPeter Maydell #include "qemu/osdep.h"
23*a6d89b45SDavid Daney #include "qemu/bitops.h"
243979fca4SMarkus Armbruster #include "disas/dis-asm.h"
2576cad711SPaolo Bonzini
2676cad711SPaolo Bonzini /* mips.h. Mips opcode list for GDB, the GNU debugger.
2776cad711SPaolo Bonzini Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
2876cad711SPaolo Bonzini Free Software Foundation, Inc.
2976cad711SPaolo Bonzini Contributed by Ralph Campbell and OSF
3076cad711SPaolo Bonzini Commented and modified by Ian Lance Taylor, Cygnus Support
3176cad711SPaolo Bonzini
3276cad711SPaolo Bonzini This file is part of GDB, GAS, and the GNU binutils.
3376cad711SPaolo Bonzini
3476cad711SPaolo Bonzini GDB, GAS, and the GNU binutils are free software; you can redistribute
3576cad711SPaolo Bonzini them and/or modify them under the terms of the GNU General Public
3676cad711SPaolo Bonzini License as published by the Free Software Foundation; either version
3776cad711SPaolo Bonzini 1, or (at your option) any later version.
3876cad711SPaolo Bonzini
3976cad711SPaolo Bonzini GDB, GAS, and the GNU binutils are distributed in the hope that they
4076cad711SPaolo Bonzini will be useful, but WITHOUT ANY WARRANTY; without even the implied
4176cad711SPaolo Bonzini warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
4276cad711SPaolo Bonzini the GNU General Public License for more details.
4376cad711SPaolo Bonzini
4476cad711SPaolo Bonzini You should have received a copy of the GNU General Public License
4576cad711SPaolo Bonzini along with this file; see the file COPYING. If not,
4676cad711SPaolo Bonzini see <http://www.gnu.org/licenses/>. */
4776cad711SPaolo Bonzini
4876cad711SPaolo Bonzini /* These are bit masks and shift counts to use to access the various
4976cad711SPaolo Bonzini fields of an instruction. To retrieve the X field of an
5076cad711SPaolo Bonzini instruction, use the expression
5176cad711SPaolo Bonzini (i >> OP_SH_X) & OP_MASK_X
5276cad711SPaolo Bonzini To set the same field (to j), use
5376cad711SPaolo Bonzini i = (i &~ (OP_MASK_X << OP_SH_X)) | (j << OP_SH_X)
5476cad711SPaolo Bonzini
5576cad711SPaolo Bonzini Make sure you use fields that are appropriate for the instruction,
5676cad711SPaolo Bonzini of course.
5776cad711SPaolo Bonzini
5876cad711SPaolo Bonzini The 'i' format uses OP, RS, RT and IMMEDIATE.
5976cad711SPaolo Bonzini
6076cad711SPaolo Bonzini The 'j' format uses OP and TARGET.
6176cad711SPaolo Bonzini
6276cad711SPaolo Bonzini The 'r' format uses OP, RS, RT, RD, SHAMT and FUNCT.
6376cad711SPaolo Bonzini
6476cad711SPaolo Bonzini The 'b' format uses OP, RS, RT and DELTA.
6576cad711SPaolo Bonzini
6676cad711SPaolo Bonzini The floating point 'i' format uses OP, RS, RT and IMMEDIATE.
6776cad711SPaolo Bonzini
6876cad711SPaolo Bonzini The floating point 'r' format uses OP, FMT, FT, FS, FD and FUNCT.
6976cad711SPaolo Bonzini
7076cad711SPaolo Bonzini A breakpoint instruction uses OP, CODE and SPEC (10 bits of the
7176cad711SPaolo Bonzini breakpoint instruction are not defined; Kane says the breakpoint
7276cad711SPaolo Bonzini code field in BREAK is 20 bits; yet MIPS assemblers and debuggers
7376cad711SPaolo Bonzini only use ten bits). An optional two-operand form of break/sdbbp
7476cad711SPaolo Bonzini allows the lower ten bits to be set too, and MIPS32 and later
7576cad711SPaolo Bonzini architectures allow 20 bits to be set with a signal operand
7676cad711SPaolo Bonzini (using CODE20).
7776cad711SPaolo Bonzini
7876cad711SPaolo Bonzini The syscall instruction uses CODE20.
7976cad711SPaolo Bonzini
8076cad711SPaolo Bonzini The general coprocessor instructions use COPZ. */
8176cad711SPaolo Bonzini
8276cad711SPaolo Bonzini #define OP_MASK_OP 0x3f
8376cad711SPaolo Bonzini #define OP_SH_OP 26
8476cad711SPaolo Bonzini #define OP_MASK_RS 0x1f
8576cad711SPaolo Bonzini #define OP_SH_RS 21
8676cad711SPaolo Bonzini #define OP_MASK_FR 0x1f
8776cad711SPaolo Bonzini #define OP_SH_FR 21
8876cad711SPaolo Bonzini #define OP_MASK_FMT 0x1f
8976cad711SPaolo Bonzini #define OP_SH_FMT 21
9076cad711SPaolo Bonzini #define OP_MASK_BCC 0x7
9176cad711SPaolo Bonzini #define OP_SH_BCC 18
9276cad711SPaolo Bonzini #define OP_MASK_CODE 0x3ff
9376cad711SPaolo Bonzini #define OP_SH_CODE 16
9476cad711SPaolo Bonzini #define OP_MASK_CODE2 0x3ff
9576cad711SPaolo Bonzini #define OP_SH_CODE2 6
9676cad711SPaolo Bonzini #define OP_MASK_RT 0x1f
9776cad711SPaolo Bonzini #define OP_SH_RT 16
9876cad711SPaolo Bonzini #define OP_MASK_FT 0x1f
9976cad711SPaolo Bonzini #define OP_SH_FT 16
10076cad711SPaolo Bonzini #define OP_MASK_CACHE 0x1f
10176cad711SPaolo Bonzini #define OP_SH_CACHE 16
10276cad711SPaolo Bonzini #define OP_MASK_RD 0x1f
10376cad711SPaolo Bonzini #define OP_SH_RD 11
10476cad711SPaolo Bonzini #define OP_MASK_FS 0x1f
10576cad711SPaolo Bonzini #define OP_SH_FS 11
10676cad711SPaolo Bonzini #define OP_MASK_PREFX 0x1f
10776cad711SPaolo Bonzini #define OP_SH_PREFX 11
10876cad711SPaolo Bonzini #define OP_MASK_CCC 0x7
10976cad711SPaolo Bonzini #define OP_SH_CCC 8
11076cad711SPaolo Bonzini #define OP_MASK_CODE20 0xfffff /* 20 bit syscall/breakpoint code. */
11176cad711SPaolo Bonzini #define OP_SH_CODE20 6
11276cad711SPaolo Bonzini #define OP_MASK_SHAMT 0x1f
11376cad711SPaolo Bonzini #define OP_SH_SHAMT 6
11476cad711SPaolo Bonzini #define OP_MASK_FD 0x1f
11576cad711SPaolo Bonzini #define OP_SH_FD 6
11676cad711SPaolo Bonzini #define OP_MASK_TARGET 0x3ffffff
11776cad711SPaolo Bonzini #define OP_SH_TARGET 0
11876cad711SPaolo Bonzini #define OP_MASK_COPZ 0x1ffffff
11976cad711SPaolo Bonzini #define OP_SH_COPZ 0
12076cad711SPaolo Bonzini #define OP_MASK_IMMEDIATE 0xffff
12176cad711SPaolo Bonzini #define OP_SH_IMMEDIATE 0
12276cad711SPaolo Bonzini #define OP_MASK_DELTA 0xffff
12376cad711SPaolo Bonzini #define OP_SH_DELTA 0
1244368b29aSLeon Alrae #define OP_MASK_DELTA_R6 0x1ff
1254368b29aSLeon Alrae #define OP_SH_DELTA_R6 7
12676cad711SPaolo Bonzini #define OP_MASK_FUNCT 0x3f
12776cad711SPaolo Bonzini #define OP_SH_FUNCT 0
12876cad711SPaolo Bonzini #define OP_MASK_SPEC 0x3f
12976cad711SPaolo Bonzini #define OP_SH_SPEC 0
13076cad711SPaolo Bonzini #define OP_SH_LOCC 8 /* FP condition code. */
13176cad711SPaolo Bonzini #define OP_SH_HICC 18 /* FP condition code. */
13276cad711SPaolo Bonzini #define OP_MASK_CC 0x7
13376cad711SPaolo Bonzini #define OP_SH_COP1NORM 25 /* Normal COP1 encoding. */
13476cad711SPaolo Bonzini #define OP_MASK_COP1NORM 0x1 /* a single bit. */
13576cad711SPaolo Bonzini #define OP_SH_COP1SPEC 21 /* COP1 encodings. */
13676cad711SPaolo Bonzini #define OP_MASK_COP1SPEC 0xf
13776cad711SPaolo Bonzini #define OP_MASK_COP1SCLR 0x4
13876cad711SPaolo Bonzini #define OP_MASK_COP1CMP 0x3
13976cad711SPaolo Bonzini #define OP_SH_COP1CMP 4
14076cad711SPaolo Bonzini #define OP_SH_FORMAT 21 /* FP short format field. */
14176cad711SPaolo Bonzini #define OP_MASK_FORMAT 0x7
14276cad711SPaolo Bonzini #define OP_SH_TRUE 16
14376cad711SPaolo Bonzini #define OP_MASK_TRUE 0x1
14476cad711SPaolo Bonzini #define OP_SH_GE 17
14576cad711SPaolo Bonzini #define OP_MASK_GE 0x01
14676cad711SPaolo Bonzini #define OP_SH_UNSIGNED 16
14776cad711SPaolo Bonzini #define OP_MASK_UNSIGNED 0x1
14876cad711SPaolo Bonzini #define OP_SH_HINT 16
14976cad711SPaolo Bonzini #define OP_MASK_HINT 0x1f
15076cad711SPaolo Bonzini #define OP_SH_MMI 0 /* Multimedia (parallel) op. */
15176cad711SPaolo Bonzini #define OP_MASK_MMI 0x3f
15276cad711SPaolo Bonzini #define OP_SH_MMISUB 6
15376cad711SPaolo Bonzini #define OP_MASK_MMISUB 0x1f
15476cad711SPaolo Bonzini #define OP_MASK_PERFREG 0x1f /* Performance monitoring. */
15576cad711SPaolo Bonzini #define OP_SH_PERFREG 1
15676cad711SPaolo Bonzini #define OP_SH_SEL 0 /* Coprocessor select field. */
15776cad711SPaolo Bonzini #define OP_MASK_SEL 0x7 /* The sel field of mfcZ and mtcZ. */
15876cad711SPaolo Bonzini #define OP_SH_CODE19 6 /* 19 bit wait code. */
15976cad711SPaolo Bonzini #define OP_MASK_CODE19 0x7ffff
16076cad711SPaolo Bonzini #define OP_SH_ALN 21
16176cad711SPaolo Bonzini #define OP_MASK_ALN 0x7
16276cad711SPaolo Bonzini #define OP_SH_VSEL 21
16376cad711SPaolo Bonzini #define OP_MASK_VSEL 0x1f
16476cad711SPaolo Bonzini #define OP_MASK_VECBYTE 0x7 /* Selector field is really 4 bits,
16576cad711SPaolo Bonzini but 0x8-0xf don't select bytes. */
16676cad711SPaolo Bonzini #define OP_SH_VECBYTE 22
16776cad711SPaolo Bonzini #define OP_MASK_VECALIGN 0x7 /* Vector byte-align (alni.ob) op. */
16876cad711SPaolo Bonzini #define OP_SH_VECALIGN 21
16976cad711SPaolo Bonzini #define OP_MASK_INSMSB 0x1f /* "ins" MSB. */
17076cad711SPaolo Bonzini #define OP_SH_INSMSB 11
17176cad711SPaolo Bonzini #define OP_MASK_EXTMSBD 0x1f /* "ext" MSBD. */
17276cad711SPaolo Bonzini #define OP_SH_EXTMSBD 11
17376cad711SPaolo Bonzini
17476cad711SPaolo Bonzini #define OP_OP_COP0 0x10
17576cad711SPaolo Bonzini #define OP_OP_COP1 0x11
17676cad711SPaolo Bonzini #define OP_OP_COP2 0x12
17776cad711SPaolo Bonzini #define OP_OP_COP3 0x13
17876cad711SPaolo Bonzini #define OP_OP_LWC1 0x31
17976cad711SPaolo Bonzini #define OP_OP_LWC2 0x32
18076cad711SPaolo Bonzini #define OP_OP_LWC3 0x33 /* a.k.a. pref */
18176cad711SPaolo Bonzini #define OP_OP_LDC1 0x35
18276cad711SPaolo Bonzini #define OP_OP_LDC2 0x36
18376cad711SPaolo Bonzini #define OP_OP_LDC3 0x37 /* a.k.a. ld */
18476cad711SPaolo Bonzini #define OP_OP_SWC1 0x39
18576cad711SPaolo Bonzini #define OP_OP_SWC2 0x3a
18676cad711SPaolo Bonzini #define OP_OP_SWC3 0x3b
18776cad711SPaolo Bonzini #define OP_OP_SDC1 0x3d
18876cad711SPaolo Bonzini #define OP_OP_SDC2 0x3e
18976cad711SPaolo Bonzini #define OP_OP_SDC3 0x3f /* a.k.a. sd */
19076cad711SPaolo Bonzini
19176cad711SPaolo Bonzini /* MIPS DSP ASE */
19276cad711SPaolo Bonzini #define OP_SH_DSPACC 11
19376cad711SPaolo Bonzini #define OP_MASK_DSPACC 0x3
19476cad711SPaolo Bonzini #define OP_SH_DSPACC_S 21
19576cad711SPaolo Bonzini #define OP_MASK_DSPACC_S 0x3
19676cad711SPaolo Bonzini #define OP_SH_DSPSFT 20
19776cad711SPaolo Bonzini #define OP_MASK_DSPSFT 0x3f
19876cad711SPaolo Bonzini #define OP_SH_DSPSFT_7 19
19976cad711SPaolo Bonzini #define OP_MASK_DSPSFT_7 0x7f
20076cad711SPaolo Bonzini #define OP_SH_SA3 21
20176cad711SPaolo Bonzini #define OP_MASK_SA3 0x7
20276cad711SPaolo Bonzini #define OP_SH_SA4 21
20376cad711SPaolo Bonzini #define OP_MASK_SA4 0xf
20476cad711SPaolo Bonzini #define OP_SH_IMM8 16
20576cad711SPaolo Bonzini #define OP_MASK_IMM8 0xff
20676cad711SPaolo Bonzini #define OP_SH_IMM10 16
20776cad711SPaolo Bonzini #define OP_MASK_IMM10 0x3ff
20876cad711SPaolo Bonzini #define OP_SH_WRDSP 11
20976cad711SPaolo Bonzini #define OP_MASK_WRDSP 0x3f
21076cad711SPaolo Bonzini #define OP_SH_RDDSP 16
21176cad711SPaolo Bonzini #define OP_MASK_RDDSP 0x3f
21276cad711SPaolo Bonzini #define OP_SH_BP 11
21376cad711SPaolo Bonzini #define OP_MASK_BP 0x3
21476cad711SPaolo Bonzini
21576cad711SPaolo Bonzini /* MIPS MT ASE */
21676cad711SPaolo Bonzini #define OP_SH_MT_U 5
21776cad711SPaolo Bonzini #define OP_MASK_MT_U 0x1
21876cad711SPaolo Bonzini #define OP_SH_MT_H 4
21976cad711SPaolo Bonzini #define OP_MASK_MT_H 0x1
22076cad711SPaolo Bonzini #define OP_SH_MTACC_T 18
22176cad711SPaolo Bonzini #define OP_MASK_MTACC_T 0x3
22276cad711SPaolo Bonzini #define OP_SH_MTACC_D 13
22376cad711SPaolo Bonzini #define OP_MASK_MTACC_D 0x3
22476cad711SPaolo Bonzini
225ed8a933fSYongbok Kim /* MSA */
226ed8a933fSYongbok Kim #define OP_MASK_1BIT 0x1
227ed8a933fSYongbok Kim #define OP_SH_1BIT 16
228ed8a933fSYongbok Kim #define OP_MASK_2BIT 0x3
229ed8a933fSYongbok Kim #define OP_SH_2BIT 16
230ed8a933fSYongbok Kim #define OP_MASK_3BIT 0x7
231ed8a933fSYongbok Kim #define OP_SH_3BIT 16
232ed8a933fSYongbok Kim #define OP_MASK_4BIT 0xf
233ed8a933fSYongbok Kim #define OP_SH_4BIT 16
234ed8a933fSYongbok Kim #define OP_MASK_5BIT 0x1f
235ed8a933fSYongbok Kim #define OP_SH_5BIT 16
236ed8a933fSYongbok Kim #define OP_MASK_10BIT 0x3ff
237ed8a933fSYongbok Kim #define OP_SH_10BIT 11
238ed8a933fSYongbok Kim #define OP_MASK_MSACR11 0x1f
239ed8a933fSYongbok Kim #define OP_SH_MSACR11 11
240ed8a933fSYongbok Kim #define OP_MASK_MSACR6 0x1f
241ed8a933fSYongbok Kim #define OP_SH_MSACR6 6
242ed8a933fSYongbok Kim #define OP_MASK_GPR 0x1f
243ed8a933fSYongbok Kim #define OP_SH_GPR 6
244ed8a933fSYongbok Kim #define OP_MASK_1_TO_4 0x3
245ed8a933fSYongbok Kim #define OP_SH_1_TO_4 6
246ed8a933fSYongbok Kim
24776cad711SPaolo Bonzini #define OP_OP_COP0 0x10
24876cad711SPaolo Bonzini #define OP_OP_COP1 0x11
24976cad711SPaolo Bonzini #define OP_OP_COP2 0x12
25076cad711SPaolo Bonzini #define OP_OP_COP3 0x13
25176cad711SPaolo Bonzini #define OP_OP_LWC1 0x31
25276cad711SPaolo Bonzini #define OP_OP_LWC2 0x32
25376cad711SPaolo Bonzini #define OP_OP_LWC3 0x33 /* a.k.a. pref */
25476cad711SPaolo Bonzini #define OP_OP_LDC1 0x35
25576cad711SPaolo Bonzini #define OP_OP_LDC2 0x36
25676cad711SPaolo Bonzini #define OP_OP_LDC3 0x37 /* a.k.a. ld */
25776cad711SPaolo Bonzini #define OP_OP_SWC1 0x39
25876cad711SPaolo Bonzini #define OP_OP_SWC2 0x3a
25976cad711SPaolo Bonzini #define OP_OP_SWC3 0x3b
26076cad711SPaolo Bonzini #define OP_OP_SDC1 0x3d
26176cad711SPaolo Bonzini #define OP_OP_SDC2 0x3e
26276cad711SPaolo Bonzini #define OP_OP_SDC3 0x3f /* a.k.a. sd */
26376cad711SPaolo Bonzini
26476cad711SPaolo Bonzini /* Values in the 'VSEL' field. */
26576cad711SPaolo Bonzini #define MDMX_FMTSEL_IMM_QH 0x1d
26676cad711SPaolo Bonzini #define MDMX_FMTSEL_IMM_OB 0x1e
26776cad711SPaolo Bonzini #define MDMX_FMTSEL_VEC_QH 0x15
26876cad711SPaolo Bonzini #define MDMX_FMTSEL_VEC_OB 0x16
26976cad711SPaolo Bonzini
27076cad711SPaolo Bonzini /* UDI */
27176cad711SPaolo Bonzini #define OP_SH_UDI1 6
27276cad711SPaolo Bonzini #define OP_MASK_UDI1 0x1f
27376cad711SPaolo Bonzini #define OP_SH_UDI2 6
27476cad711SPaolo Bonzini #define OP_MASK_UDI2 0x3ff
27576cad711SPaolo Bonzini #define OP_SH_UDI3 6
27676cad711SPaolo Bonzini #define OP_MASK_UDI3 0x7fff
27776cad711SPaolo Bonzini #define OP_SH_UDI4 6
27876cad711SPaolo Bonzini #define OP_MASK_UDI4 0xfffff
27976cad711SPaolo Bonzini /* This structure holds information for a particular instruction. */
28076cad711SPaolo Bonzini
28176cad711SPaolo Bonzini struct mips_opcode
28276cad711SPaolo Bonzini {
28376cad711SPaolo Bonzini /* The name of the instruction. */
28476cad711SPaolo Bonzini const char *name;
28576cad711SPaolo Bonzini /* A string describing the arguments for this instruction. */
28676cad711SPaolo Bonzini const char *args;
28776cad711SPaolo Bonzini /* The basic opcode for the instruction. When assembling, this
28876cad711SPaolo Bonzini opcode is modified by the arguments to produce the actual opcode
28976cad711SPaolo Bonzini that is used. If pinfo is INSN_MACRO, then this is 0. */
29076cad711SPaolo Bonzini unsigned long match;
29176cad711SPaolo Bonzini /* If pinfo is not INSN_MACRO, then this is a bit mask for the
29276cad711SPaolo Bonzini relevant portions of the opcode when disassembling. If the
29376cad711SPaolo Bonzini actual opcode anded with the match field equals the opcode field,
29476cad711SPaolo Bonzini then we have found the correct instruction. If pinfo is
29576cad711SPaolo Bonzini INSN_MACRO, then this field is the macro identifier. */
29676cad711SPaolo Bonzini unsigned long mask;
29776cad711SPaolo Bonzini /* For a macro, this is INSN_MACRO. Otherwise, it is a collection
29876cad711SPaolo Bonzini of bits describing the instruction, notably any relevant hazard
29976cad711SPaolo Bonzini information. */
30076cad711SPaolo Bonzini unsigned long pinfo;
30176cad711SPaolo Bonzini /* A collection of additional bits describing the instruction. */
30276cad711SPaolo Bonzini unsigned long pinfo2;
30376cad711SPaolo Bonzini /* A collection of bits describing the instruction sets of which this
30476cad711SPaolo Bonzini instruction or macro is a member. */
30576cad711SPaolo Bonzini unsigned long membership;
30676cad711SPaolo Bonzini };
30776cad711SPaolo Bonzini
30876cad711SPaolo Bonzini /* These are the characters which may appear in the args field of an
30976cad711SPaolo Bonzini instruction. They appear in the order in which the fields appear
31076cad711SPaolo Bonzini when the instruction is used. Commas and parentheses in the args
31176cad711SPaolo Bonzini string are ignored when assembling, and written into the output
31276cad711SPaolo Bonzini when disassembling.
31376cad711SPaolo Bonzini
31476cad711SPaolo Bonzini Each of these characters corresponds to a mask field defined above.
31576cad711SPaolo Bonzini
31676cad711SPaolo Bonzini "<" 5 bit shift amount (OP_*_SHAMT)
31776cad711SPaolo Bonzini ">" shift amount between 32 and 63, stored after subtracting 32 (OP_*_SHAMT)
31876cad711SPaolo Bonzini "a" 26 bit target address (OP_*_TARGET)
31976cad711SPaolo Bonzini "b" 5 bit base register (OP_*_RS)
32076cad711SPaolo Bonzini "c" 10 bit breakpoint code (OP_*_CODE)
32176cad711SPaolo Bonzini "d" 5 bit destination register specifier (OP_*_RD)
32276cad711SPaolo Bonzini "h" 5 bit prefx hint (OP_*_PREFX)
32376cad711SPaolo Bonzini "i" 16 bit unsigned immediate (OP_*_IMMEDIATE)
32476cad711SPaolo Bonzini "j" 16 bit signed immediate (OP_*_DELTA)
32576cad711SPaolo Bonzini "k" 5 bit cache opcode in target register position (OP_*_CACHE)
32676cad711SPaolo Bonzini Also used for immediate operands in vr5400 vector insns.
32776cad711SPaolo Bonzini "o" 16 bit signed offset (OP_*_DELTA)
32876cad711SPaolo Bonzini "p" 16 bit PC relative branch target address (OP_*_DELTA)
32976cad711SPaolo Bonzini "q" 10 bit extra breakpoint code (OP_*_CODE2)
33076cad711SPaolo Bonzini "r" 5 bit same register used as both source and target (OP_*_RS)
33176cad711SPaolo Bonzini "s" 5 bit source register specifier (OP_*_RS)
33276cad711SPaolo Bonzini "t" 5 bit target register (OP_*_RT)
33376cad711SPaolo Bonzini "u" 16 bit upper 16 bits of address (OP_*_IMMEDIATE)
33476cad711SPaolo Bonzini "v" 5 bit same register used as both source and destination (OP_*_RS)
33576cad711SPaolo Bonzini "w" 5 bit same register used as both target and destination (OP_*_RT)
33676cad711SPaolo Bonzini "U" 5 bit same destination register in both OP_*_RD and OP_*_RT
33776cad711SPaolo Bonzini (used by clo and clz)
33876cad711SPaolo Bonzini "C" 25 bit coprocessor function code (OP_*_COPZ)
33976cad711SPaolo Bonzini "B" 20 bit syscall/breakpoint function code (OP_*_CODE20)
34076cad711SPaolo Bonzini "J" 19 bit wait function code (OP_*_CODE19)
34176cad711SPaolo Bonzini "x" accept and ignore register name
34276cad711SPaolo Bonzini "z" must be zero register
34376cad711SPaolo Bonzini "K" 5 bit Hardware Register (rdhwr instruction) (OP_*_RD)
34476cad711SPaolo Bonzini "+A" 5 bit ins/ext/dins/dext/dinsm/dextm position, which becomes
34576cad711SPaolo Bonzini LSB (OP_*_SHAMT).
34676cad711SPaolo Bonzini Enforces: 0 <= pos < 32.
34776cad711SPaolo Bonzini "+B" 5 bit ins/dins size, which becomes MSB (OP_*_INSMSB).
34876cad711SPaolo Bonzini Requires that "+A" or "+E" occur first to set position.
34976cad711SPaolo Bonzini Enforces: 0 < (pos+size) <= 32.
35076cad711SPaolo Bonzini "+C" 5 bit ext/dext size, which becomes MSBD (OP_*_EXTMSBD).
35176cad711SPaolo Bonzini Requires that "+A" or "+E" occur first to set position.
35276cad711SPaolo Bonzini Enforces: 0 < (pos+size) <= 32.
35376cad711SPaolo Bonzini (Also used by "dext" w/ different limits, but limits for
35476cad711SPaolo Bonzini that are checked by the M_DEXT macro.)
35576cad711SPaolo Bonzini "+E" 5 bit dinsu/dextu position, which becomes LSB-32 (OP_*_SHAMT).
35676cad711SPaolo Bonzini Enforces: 32 <= pos < 64.
35776cad711SPaolo Bonzini "+F" 5 bit "dinsm/dinsu" size, which becomes MSB-32 (OP_*_INSMSB).
35876cad711SPaolo Bonzini Requires that "+A" or "+E" occur first to set position.
35976cad711SPaolo Bonzini Enforces: 32 < (pos+size) <= 64.
36076cad711SPaolo Bonzini "+G" 5 bit "dextm" size, which becomes MSBD-32 (OP_*_EXTMSBD).
36176cad711SPaolo Bonzini Requires that "+A" or "+E" occur first to set position.
36276cad711SPaolo Bonzini Enforces: 32 < (pos+size) <= 64.
36376cad711SPaolo Bonzini "+H" 5 bit "dextu" size, which becomes MSBD (OP_*_EXTMSBD).
36476cad711SPaolo Bonzini Requires that "+A" or "+E" occur first to set position.
36576cad711SPaolo Bonzini Enforces: 32 < (pos+size) <= 64.
36676cad711SPaolo Bonzini
36776cad711SPaolo Bonzini Floating point instructions:
36876cad711SPaolo Bonzini "D" 5 bit destination register (OP_*_FD)
36976cad711SPaolo Bonzini "M" 3 bit compare condition code (OP_*_CCC) (only used for mips4 and up)
37076cad711SPaolo Bonzini "N" 3 bit branch condition code (OP_*_BCC) (only used for mips4 and up)
37176cad711SPaolo Bonzini "S" 5 bit fs source 1 register (OP_*_FS)
37276cad711SPaolo Bonzini "T" 5 bit ft source 2 register (OP_*_FT)
37376cad711SPaolo Bonzini "R" 5 bit fr source 3 register (OP_*_FR)
37476cad711SPaolo Bonzini "V" 5 bit same register used as floating source and destination (OP_*_FS)
37576cad711SPaolo Bonzini "W" 5 bit same register used as floating target and destination (OP_*_FT)
37676cad711SPaolo Bonzini
37776cad711SPaolo Bonzini Coprocessor instructions:
37876cad711SPaolo Bonzini "E" 5 bit target register (OP_*_RT)
37976cad711SPaolo Bonzini "G" 5 bit destination register (OP_*_RD)
38076cad711SPaolo Bonzini "H" 3 bit sel field for (d)mtc* and (d)mfc* (OP_*_SEL)
38176cad711SPaolo Bonzini "P" 5 bit performance-monitor register (OP_*_PERFREG)
38276cad711SPaolo Bonzini "e" 5 bit vector register byte specifier (OP_*_VECBYTE)
38376cad711SPaolo Bonzini "%" 3 bit immediate vr5400 vector alignment operand (OP_*_VECALIGN)
38476cad711SPaolo Bonzini see also "k" above
38576cad711SPaolo Bonzini "+D" Combined destination register ("G") and sel ("H") for CP0 ops,
38676cad711SPaolo Bonzini for pretty-printing in disassembly only.
38776cad711SPaolo Bonzini
38876cad711SPaolo Bonzini Macro instructions:
38976cad711SPaolo Bonzini "A" General 32 bit expression
39076cad711SPaolo Bonzini "I" 32 bit immediate (value placed in imm_expr).
39176cad711SPaolo Bonzini "+I" 32 bit immediate (value placed in imm2_expr).
39276cad711SPaolo Bonzini "F" 64 bit floating point constant in .rdata
39376cad711SPaolo Bonzini "L" 64 bit floating point constant in .lit8
39476cad711SPaolo Bonzini "f" 32 bit floating point constant
39576cad711SPaolo Bonzini "l" 32 bit floating point constant in .lit4
39676cad711SPaolo Bonzini
39776cad711SPaolo Bonzini MDMX instruction operands (note that while these use the FP register
39876cad711SPaolo Bonzini fields, they accept both $fN and $vN names for the registers):
39976cad711SPaolo Bonzini "O" MDMX alignment offset (OP_*_ALN)
40076cad711SPaolo Bonzini "Q" MDMX vector/scalar/immediate source (OP_*_VSEL and OP_*_FT)
40176cad711SPaolo Bonzini "X" MDMX destination register (OP_*_FD)
40276cad711SPaolo Bonzini "Y" MDMX source register (OP_*_FS)
40376cad711SPaolo Bonzini "Z" MDMX source register (OP_*_FT)
40476cad711SPaolo Bonzini
40576cad711SPaolo Bonzini DSP ASE usage:
40676cad711SPaolo Bonzini "2" 2 bit unsigned immediate for byte align (OP_*_BP)
40776cad711SPaolo Bonzini "3" 3 bit unsigned immediate (OP_*_SA3)
40876cad711SPaolo Bonzini "4" 4 bit unsigned immediate (OP_*_SA4)
40976cad711SPaolo Bonzini "5" 8 bit unsigned immediate (OP_*_IMM8)
41076cad711SPaolo Bonzini "6" 5 bit unsigned immediate (OP_*_RS)
41176cad711SPaolo Bonzini "7" 2 bit dsp accumulator register (OP_*_DSPACC)
41276cad711SPaolo Bonzini "8" 6 bit unsigned immediate (OP_*_WRDSP)
41376cad711SPaolo Bonzini "9" 2 bit dsp accumulator register (OP_*_DSPACC_S)
41476cad711SPaolo Bonzini "0" 6 bit signed immediate (OP_*_DSPSFT)
41576cad711SPaolo Bonzini ":" 7 bit signed immediate (OP_*_DSPSFT_7)
41676cad711SPaolo Bonzini "'" 6 bit unsigned immediate (OP_*_RDDSP)
41776cad711SPaolo Bonzini "@" 10 bit signed immediate (OP_*_IMM10)
41876cad711SPaolo Bonzini
41976cad711SPaolo Bonzini MT ASE usage:
42076cad711SPaolo Bonzini "!" 1 bit usermode flag (OP_*_MT_U)
42176cad711SPaolo Bonzini "$" 1 bit load high flag (OP_*_MT_H)
42276cad711SPaolo Bonzini "*" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_T)
42376cad711SPaolo Bonzini "&" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_D)
42476cad711SPaolo Bonzini "g" 5 bit coprocessor 1 and 2 destination register (OP_*_RD)
42576cad711SPaolo Bonzini "+t" 5 bit coprocessor 0 destination register (OP_*_RT)
42676cad711SPaolo Bonzini "+T" 5 bit coprocessor 0 destination register (OP_*_RT) - disassembly only
42776cad711SPaolo Bonzini
42876cad711SPaolo Bonzini UDI immediates:
42976cad711SPaolo Bonzini "+1" UDI immediate bits 6-10
43076cad711SPaolo Bonzini "+2" UDI immediate bits 6-15
43176cad711SPaolo Bonzini "+3" UDI immediate bits 6-20
43276cad711SPaolo Bonzini "+4" UDI immediate bits 6-25
43376cad711SPaolo Bonzini
434d4ea6acdSLeon Alrae R6 immediates/displacements :
435d4ea6acdSLeon Alrae (adding suffix to 'o' to avoid adding new characters)
436d4ea6acdSLeon Alrae "+o" 9 bits immediate/displacement (shift = 7)
437d4ea6acdSLeon Alrae "+o1" 18 bits immediate/displacement (shift = 0)
438d4ea6acdSLeon Alrae "+o2" 19 bits immediate/displacement (shift = 0)
439d4ea6acdSLeon Alrae
44076cad711SPaolo Bonzini Other:
44176cad711SPaolo Bonzini "()" parens surrounding optional value
44276cad711SPaolo Bonzini "," separates operands
44376cad711SPaolo Bonzini "[]" brackets around index for vector-op scalar operand specifier (vr5400)
44476cad711SPaolo Bonzini "+" Start of extension sequence.
44576cad711SPaolo Bonzini
44676cad711SPaolo Bonzini Characters used so far, for quick reference when adding more:
44776cad711SPaolo Bonzini "234567890"
44876cad711SPaolo Bonzini "%[]<>(),+:'@!$*&"
44976cad711SPaolo Bonzini "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
45076cad711SPaolo Bonzini "abcdefghijklopqrstuvwxz"
45176cad711SPaolo Bonzini
45276cad711SPaolo Bonzini Extension character sequences used so far ("+" followed by the
45376cad711SPaolo Bonzini following), for quick reference when adding more:
45476cad711SPaolo Bonzini "1234"
45576cad711SPaolo Bonzini "ABCDEFGHIT"
45676cad711SPaolo Bonzini "t"
45776cad711SPaolo Bonzini */
45876cad711SPaolo Bonzini
45976cad711SPaolo Bonzini /* These are the bits which may be set in the pinfo field of an
46076cad711SPaolo Bonzini instructions, if it is not equal to INSN_MACRO. */
46176cad711SPaolo Bonzini
46276cad711SPaolo Bonzini /* Modifies the general purpose register in OP_*_RD. */
46376cad711SPaolo Bonzini #define INSN_WRITE_GPR_D 0x00000001
46476cad711SPaolo Bonzini /* Modifies the general purpose register in OP_*_RT. */
46576cad711SPaolo Bonzini #define INSN_WRITE_GPR_T 0x00000002
46676cad711SPaolo Bonzini /* Modifies general purpose register 31. */
46776cad711SPaolo Bonzini #define INSN_WRITE_GPR_31 0x00000004
46876cad711SPaolo Bonzini /* Modifies the floating point register in OP_*_FD. */
46976cad711SPaolo Bonzini #define INSN_WRITE_FPR_D 0x00000008
47076cad711SPaolo Bonzini /* Modifies the floating point register in OP_*_FS. */
47176cad711SPaolo Bonzini #define INSN_WRITE_FPR_S 0x00000010
47276cad711SPaolo Bonzini /* Modifies the floating point register in OP_*_FT. */
47376cad711SPaolo Bonzini #define INSN_WRITE_FPR_T 0x00000020
47476cad711SPaolo Bonzini /* Reads the general purpose register in OP_*_RS. */
47576cad711SPaolo Bonzini #define INSN_READ_GPR_S 0x00000040
47676cad711SPaolo Bonzini /* Reads the general purpose register in OP_*_RT. */
47776cad711SPaolo Bonzini #define INSN_READ_GPR_T 0x00000080
47876cad711SPaolo Bonzini /* Reads the floating point register in OP_*_FS. */
47976cad711SPaolo Bonzini #define INSN_READ_FPR_S 0x00000100
48076cad711SPaolo Bonzini /* Reads the floating point register in OP_*_FT. */
48176cad711SPaolo Bonzini #define INSN_READ_FPR_T 0x00000200
48276cad711SPaolo Bonzini /* Reads the floating point register in OP_*_FR. */
48376cad711SPaolo Bonzini #define INSN_READ_FPR_R 0x00000400
48476cad711SPaolo Bonzini /* Modifies coprocessor condition code. */
48576cad711SPaolo Bonzini #define INSN_WRITE_COND_CODE 0x00000800
48676cad711SPaolo Bonzini /* Reads coprocessor condition code. */
48776cad711SPaolo Bonzini #define INSN_READ_COND_CODE 0x00001000
48876cad711SPaolo Bonzini /* TLB operation. */
48976cad711SPaolo Bonzini #define INSN_TLB 0x00002000
49076cad711SPaolo Bonzini /* Reads coprocessor register other than floating point register. */
49176cad711SPaolo Bonzini #define INSN_COP 0x00004000
49276cad711SPaolo Bonzini /* Instruction loads value from memory, requiring delay. */
49376cad711SPaolo Bonzini #define INSN_LOAD_MEMORY_DELAY 0x00008000
49476cad711SPaolo Bonzini /* Instruction loads value from coprocessor, requiring delay. */
49576cad711SPaolo Bonzini #define INSN_LOAD_COPROC_DELAY 0x00010000
49676cad711SPaolo Bonzini /* Instruction has unconditional branch delay slot. */
49776cad711SPaolo Bonzini #define INSN_UNCOND_BRANCH_DELAY 0x00020000
49876cad711SPaolo Bonzini /* Instruction has conditional branch delay slot. */
49976cad711SPaolo Bonzini #define INSN_COND_BRANCH_DELAY 0x00040000
50076cad711SPaolo Bonzini /* Conditional branch likely: if branch not taken, insn nullified. */
50176cad711SPaolo Bonzini #define INSN_COND_BRANCH_LIKELY 0x00080000
50276cad711SPaolo Bonzini /* Moves to coprocessor register, requiring delay. */
50376cad711SPaolo Bonzini #define INSN_COPROC_MOVE_DELAY 0x00100000
50476cad711SPaolo Bonzini /* Loads coprocessor register from memory, requiring delay. */
50576cad711SPaolo Bonzini #define INSN_COPROC_MEMORY_DELAY 0x00200000
50676cad711SPaolo Bonzini /* Reads the HI register. */
50776cad711SPaolo Bonzini #define INSN_READ_HI 0x00400000
50876cad711SPaolo Bonzini /* Reads the LO register. */
50976cad711SPaolo Bonzini #define INSN_READ_LO 0x00800000
51076cad711SPaolo Bonzini /* Modifies the HI register. */
51176cad711SPaolo Bonzini #define INSN_WRITE_HI 0x01000000
51276cad711SPaolo Bonzini /* Modifies the LO register. */
51376cad711SPaolo Bonzini #define INSN_WRITE_LO 0x02000000
51476cad711SPaolo Bonzini /* Takes a trap (easier to keep out of delay slot). */
51576cad711SPaolo Bonzini #define INSN_TRAP 0x04000000
51676cad711SPaolo Bonzini /* Instruction stores value into memory. */
51776cad711SPaolo Bonzini #define INSN_STORE_MEMORY 0x08000000
51876cad711SPaolo Bonzini /* Instruction uses single precision floating point. */
51976cad711SPaolo Bonzini #define FP_S 0x10000000
52076cad711SPaolo Bonzini /* Instruction uses double precision floating point. */
52176cad711SPaolo Bonzini #define FP_D 0x20000000
52276cad711SPaolo Bonzini /* Instruction is part of the tx39's integer multiply family. */
52376cad711SPaolo Bonzini #define INSN_MULT 0x40000000
52476cad711SPaolo Bonzini /* Instruction synchronize shared memory. */
52576cad711SPaolo Bonzini #define INSN_SYNC 0x80000000
52676cad711SPaolo Bonzini
52776cad711SPaolo Bonzini /* These are the bits which may be set in the pinfo2 field of an
52876cad711SPaolo Bonzini instruction. */
52976cad711SPaolo Bonzini
53076cad711SPaolo Bonzini /* Instruction is a simple alias (I.E. "move" for daddu/addu/or) */
53176cad711SPaolo Bonzini #define INSN2_ALIAS 0x00000001
53276cad711SPaolo Bonzini /* Instruction reads MDMX accumulator. */
53376cad711SPaolo Bonzini #define INSN2_READ_MDMX_ACC 0x00000002
53476cad711SPaolo Bonzini /* Instruction writes MDMX accumulator. */
53576cad711SPaolo Bonzini #define INSN2_WRITE_MDMX_ACC 0x00000004
53676cad711SPaolo Bonzini
537ed8a933fSYongbok Kim /* Reads the general purpose register in OP_*_RD. */
538ed8a933fSYongbok Kim #define INSN2_READ_GPR_D 0x00000200
539ed8a933fSYongbok Kim
54076cad711SPaolo Bonzini /* Instruction is actually a macro. It should be ignored by the
54176cad711SPaolo Bonzini disassembler, and requires special treatment by the assembler. */
54276cad711SPaolo Bonzini #define INSN_MACRO 0xffffffff
54376cad711SPaolo Bonzini
54476cad711SPaolo Bonzini /* Masks used to mark instructions to indicate which MIPS ISA level
54576cad711SPaolo Bonzini they were introduced in. ISAs, as defined below, are logical
54676cad711SPaolo Bonzini ORs of these bits, indicating that they support the instructions
54776cad711SPaolo Bonzini defined at the given level. */
54876cad711SPaolo Bonzini
54976cad711SPaolo Bonzini #define INSN_ISA_MASK 0x00000fff
55076cad711SPaolo Bonzini #define INSN_ISA1 0x00000001
55176cad711SPaolo Bonzini #define INSN_ISA2 0x00000002
55276cad711SPaolo Bonzini #define INSN_ISA3 0x00000004
55376cad711SPaolo Bonzini #define INSN_ISA4 0x00000008
55476cad711SPaolo Bonzini #define INSN_ISA5 0x00000010
55576cad711SPaolo Bonzini #define INSN_ISA32 0x00000020
55676cad711SPaolo Bonzini #define INSN_ISA64 0x00000040
55776cad711SPaolo Bonzini #define INSN_ISA32R2 0x00000080
55876cad711SPaolo Bonzini #define INSN_ISA64R2 0x00000100
559b691d9d2SLeon Alrae #define INSN_ISA32R6 0x00000200
560b691d9d2SLeon Alrae #define INSN_ISA64R6 0x00000400
56176cad711SPaolo Bonzini
56276cad711SPaolo Bonzini /* Masks used for MIPS-defined ASEs. */
56376cad711SPaolo Bonzini #define INSN_ASE_MASK 0x0000f000
56476cad711SPaolo Bonzini
56576cad711SPaolo Bonzini /* DSP ASE */
56676cad711SPaolo Bonzini #define INSN_DSP 0x00001000
56776cad711SPaolo Bonzini #define INSN_DSP64 0x00002000
56876cad711SPaolo Bonzini /* MIPS 16 ASE */
56976cad711SPaolo Bonzini #define INSN_MIPS16 0x00004000
57076cad711SPaolo Bonzini /* MIPS-3D ASE */
57176cad711SPaolo Bonzini #define INSN_MIPS3D 0x00008000
57276cad711SPaolo Bonzini
57376cad711SPaolo Bonzini /* Chip specific instructions. These are bitmasks. */
57476cad711SPaolo Bonzini
57576cad711SPaolo Bonzini /* MIPS R4650 instruction. */
57676cad711SPaolo Bonzini #define INSN_4650 0x00010000
57776cad711SPaolo Bonzini /* LSI R4010 instruction. */
57876cad711SPaolo Bonzini #define INSN_4010 0x00020000
57976cad711SPaolo Bonzini /* NEC VR4100 instruction. */
58076cad711SPaolo Bonzini #define INSN_4100 0x00040000
58176cad711SPaolo Bonzini /* Toshiba R3900 instruction. */
58276cad711SPaolo Bonzini #define INSN_3900 0x00080000
58376cad711SPaolo Bonzini /* MIPS R10000 instruction. */
58476cad711SPaolo Bonzini #define INSN_10000 0x00100000
58576cad711SPaolo Bonzini /* Broadcom SB-1 instruction. */
58676cad711SPaolo Bonzini #define INSN_SB1 0x00200000
58776cad711SPaolo Bonzini /* NEC VR4111/VR4181 instruction. */
58876cad711SPaolo Bonzini #define INSN_4111 0x00400000
58976cad711SPaolo Bonzini /* NEC VR4120 instruction. */
59076cad711SPaolo Bonzini #define INSN_4120 0x00800000
59176cad711SPaolo Bonzini /* NEC VR5400 instruction. */
59276cad711SPaolo Bonzini #define INSN_5400 0x01000000
59376cad711SPaolo Bonzini /* NEC VR5500 instruction. */
59476cad711SPaolo Bonzini #define INSN_5500 0x02000000
59576cad711SPaolo Bonzini
59676cad711SPaolo Bonzini /* MDMX ASE */
597ed8a933fSYongbok Kim #define INSN_MDMX 0x00000000 /* Deprecated */
598ed8a933fSYongbok Kim
599ed8a933fSYongbok Kim /* MIPS MSA Extension */
600ed8a933fSYongbok Kim #define INSN_MSA 0x04000000
601ed8a933fSYongbok Kim #define INSN_MSA64 0x04000000
602ed8a933fSYongbok Kim
60376cad711SPaolo Bonzini /* MT ASE */
60476cad711SPaolo Bonzini #define INSN_MT 0x08000000
60576cad711SPaolo Bonzini /* SmartMIPS ASE */
60676cad711SPaolo Bonzini #define INSN_SMARTMIPS 0x10000000
60776cad711SPaolo Bonzini /* DSP R2 ASE */
60876cad711SPaolo Bonzini #define INSN_DSPR2 0x20000000
60976cad711SPaolo Bonzini
61076cad711SPaolo Bonzini /* ST Microelectronics Loongson 2E. */
61176cad711SPaolo Bonzini #define INSN_LOONGSON_2E 0x40000000
61276cad711SPaolo Bonzini /* ST Microelectronics Loongson 2F. */
61376cad711SPaolo Bonzini #define INSN_LOONGSON_2F 0x80000000
61476cad711SPaolo Bonzini
61576cad711SPaolo Bonzini /* MIPS ISA defines, use instead of hardcoding ISA level. */
61676cad711SPaolo Bonzini
61776cad711SPaolo Bonzini #define ISA_UNKNOWN 0 /* Gas internal use. */
61876cad711SPaolo Bonzini #define ISA_MIPS1 (INSN_ISA1)
61976cad711SPaolo Bonzini #define ISA_MIPS2 (ISA_MIPS1 | INSN_ISA2)
62076cad711SPaolo Bonzini #define ISA_MIPS3 (ISA_MIPS2 | INSN_ISA3)
62176cad711SPaolo Bonzini #define ISA_MIPS4 (ISA_MIPS3 | INSN_ISA4)
62276cad711SPaolo Bonzini #define ISA_MIPS5 (ISA_MIPS4 | INSN_ISA5)
62376cad711SPaolo Bonzini
62476cad711SPaolo Bonzini #define ISA_MIPS32 (ISA_MIPS2 | INSN_ISA32)
62576cad711SPaolo Bonzini #define ISA_MIPS64 (ISA_MIPS5 | INSN_ISA32 | INSN_ISA64)
62676cad711SPaolo Bonzini
62776cad711SPaolo Bonzini #define ISA_MIPS32R2 (ISA_MIPS32 | INSN_ISA32R2)
62876cad711SPaolo Bonzini #define ISA_MIPS64R2 (ISA_MIPS64 | INSN_ISA32R2 | INSN_ISA64R2)
62976cad711SPaolo Bonzini
630b691d9d2SLeon Alrae #define ISA_MIPS32R6 (ISA_MIPS32R2 | INSN_ISA32R6)
631b691d9d2SLeon Alrae #define ISA_MIPS64R6 (ISA_MIPS64R2 | INSN_ISA32R6 | INSN_ISA64R6)
63276cad711SPaolo Bonzini
63376cad711SPaolo Bonzini /* CPU defines, use instead of hardcoding processor number. Keep this
63476cad711SPaolo Bonzini in sync with bfd/archures.c in order for machine selection to work. */
63576cad711SPaolo Bonzini #define CPU_UNKNOWN 0 /* Gas internal use. */
63676cad711SPaolo Bonzini #define CPU_R3000 3000
63776cad711SPaolo Bonzini #define CPU_R3900 3900
63876cad711SPaolo Bonzini #define CPU_R4000 4000
63976cad711SPaolo Bonzini #define CPU_R4010 4010
64076cad711SPaolo Bonzini #define CPU_VR4100 4100
64176cad711SPaolo Bonzini #define CPU_R4111 4111
64276cad711SPaolo Bonzini #define CPU_VR4120 4120
64376cad711SPaolo Bonzini #define CPU_R4300 4300
64476cad711SPaolo Bonzini #define CPU_R4400 4400
64576cad711SPaolo Bonzini #define CPU_R4600 4600
64676cad711SPaolo Bonzini #define CPU_R4650 4650
64776cad711SPaolo Bonzini #define CPU_R5000 5000
64876cad711SPaolo Bonzini #define CPU_VR5400 5400
64976cad711SPaolo Bonzini #define CPU_VR5500 5500
65076cad711SPaolo Bonzini #define CPU_R6000 6000
65176cad711SPaolo Bonzini #define CPU_RM7000 7000
65276cad711SPaolo Bonzini #define CPU_R8000 8000
65376cad711SPaolo Bonzini #define CPU_R10000 10000
65476cad711SPaolo Bonzini #define CPU_R12000 12000
65576cad711SPaolo Bonzini #define CPU_MIPS16 16
65676cad711SPaolo Bonzini #define CPU_MIPS32 32
65776cad711SPaolo Bonzini #define CPU_MIPS32R2 33
65876cad711SPaolo Bonzini #define CPU_MIPS5 5
65976cad711SPaolo Bonzini #define CPU_MIPS64 64
66076cad711SPaolo Bonzini #define CPU_MIPS64R2 65
66176cad711SPaolo Bonzini #define CPU_SB1 12310201 /* octal 'SB', 01. */
66276cad711SPaolo Bonzini
66376cad711SPaolo Bonzini /* Test for membership in an ISA including chip specific ISAs. INSN
66476cad711SPaolo Bonzini is pointer to an element of the opcode table; ISA is the specified
66576cad711SPaolo Bonzini ISA/ASE bitmask to test against; and CPU is the CPU specific ISA to
66676cad711SPaolo Bonzini test, or zero if no CPU specific ISA test is desired. */
66776cad711SPaolo Bonzini
66876cad711SPaolo Bonzini #if 0
66976cad711SPaolo Bonzini #define OPCODE_IS_MEMBER(insn, isa, cpu) \
67076cad711SPaolo Bonzini (((insn)->membership & isa) != 0 \
67176cad711SPaolo Bonzini || (cpu == CPU_R4650 && ((insn)->membership & INSN_4650) != 0) \
67276cad711SPaolo Bonzini || (cpu == CPU_RM7000 && ((insn)->membership & INSN_4650) != 0) \
67376cad711SPaolo Bonzini || (cpu == CPU_RM9000 && ((insn)->membership & INSN_4650) != 0) \
67476cad711SPaolo Bonzini || (cpu == CPU_R4010 && ((insn)->membership & INSN_4010) != 0) \
67576cad711SPaolo Bonzini || (cpu == CPU_VR4100 && ((insn)->membership & INSN_4100) != 0) \
67676cad711SPaolo Bonzini || (cpu == CPU_R3900 && ((insn)->membership & INSN_3900) != 0) \
67776cad711SPaolo Bonzini || ((cpu == CPU_R10000 || cpu == CPU_R12000) \
67876cad711SPaolo Bonzini && ((insn)->membership & INSN_10000) != 0) \
67976cad711SPaolo Bonzini || (cpu == CPU_SB1 && ((insn)->membership & INSN_SB1) != 0) \
68076cad711SPaolo Bonzini || (cpu == CPU_R4111 && ((insn)->membership & INSN_4111) != 0) \
68176cad711SPaolo Bonzini || (cpu == CPU_VR4120 && ((insn)->membership & INSN_4120) != 0) \
68276cad711SPaolo Bonzini || (cpu == CPU_VR5400 && ((insn)->membership & INSN_5400) != 0) \
68376cad711SPaolo Bonzini || (cpu == CPU_VR5500 && ((insn)->membership & INSN_5500) != 0) \
68476cad711SPaolo Bonzini || 0) /* Please keep this term for easier source merging. */
68576cad711SPaolo Bonzini #else
68676cad711SPaolo Bonzini #define OPCODE_IS_MEMBER(insn, isa, cpu) \
68776cad711SPaolo Bonzini (1 != 0)
68876cad711SPaolo Bonzini #endif
68976cad711SPaolo Bonzini
69076cad711SPaolo Bonzini /* This is a list of macro expanded instructions.
69176cad711SPaolo Bonzini
69276cad711SPaolo Bonzini _I appended means immediate
69376cad711SPaolo Bonzini _A appended means address
69476cad711SPaolo Bonzini _AB appended means address with base register
69576cad711SPaolo Bonzini _D appended means 64 bit floating point constant
69676cad711SPaolo Bonzini _S appended means 32 bit floating point constant. */
69776cad711SPaolo Bonzini
69876cad711SPaolo Bonzini enum
69976cad711SPaolo Bonzini {
70076cad711SPaolo Bonzini M_ABS,
70176cad711SPaolo Bonzini M_ADD_I,
70276cad711SPaolo Bonzini M_ADDU_I,
70376cad711SPaolo Bonzini M_AND_I,
70476cad711SPaolo Bonzini M_BALIGN,
70576cad711SPaolo Bonzini M_BEQ,
70676cad711SPaolo Bonzini M_BEQ_I,
70776cad711SPaolo Bonzini M_BEQL_I,
70876cad711SPaolo Bonzini M_BGE,
70976cad711SPaolo Bonzini M_BGEL,
71076cad711SPaolo Bonzini M_BGE_I,
71176cad711SPaolo Bonzini M_BGEL_I,
71276cad711SPaolo Bonzini M_BGEU,
71376cad711SPaolo Bonzini M_BGEUL,
71476cad711SPaolo Bonzini M_BGEU_I,
71576cad711SPaolo Bonzini M_BGEUL_I,
71676cad711SPaolo Bonzini M_BGT,
71776cad711SPaolo Bonzini M_BGTL,
71876cad711SPaolo Bonzini M_BGT_I,
71976cad711SPaolo Bonzini M_BGTL_I,
72076cad711SPaolo Bonzini M_BGTU,
72176cad711SPaolo Bonzini M_BGTUL,
72276cad711SPaolo Bonzini M_BGTU_I,
72376cad711SPaolo Bonzini M_BGTUL_I,
72476cad711SPaolo Bonzini M_BLE,
72576cad711SPaolo Bonzini M_BLEL,
72676cad711SPaolo Bonzini M_BLE_I,
72776cad711SPaolo Bonzini M_BLEL_I,
72876cad711SPaolo Bonzini M_BLEU,
72976cad711SPaolo Bonzini M_BLEUL,
73076cad711SPaolo Bonzini M_BLEU_I,
73176cad711SPaolo Bonzini M_BLEUL_I,
73276cad711SPaolo Bonzini M_BLT,
73376cad711SPaolo Bonzini M_BLTL,
73476cad711SPaolo Bonzini M_BLT_I,
73576cad711SPaolo Bonzini M_BLTL_I,
73676cad711SPaolo Bonzini M_BLTU,
73776cad711SPaolo Bonzini M_BLTUL,
73876cad711SPaolo Bonzini M_BLTU_I,
73976cad711SPaolo Bonzini M_BLTUL_I,
74076cad711SPaolo Bonzini M_BNE,
74176cad711SPaolo Bonzini M_BNE_I,
74276cad711SPaolo Bonzini M_BNEL_I,
74376cad711SPaolo Bonzini M_CACHE_AB,
74476cad711SPaolo Bonzini M_DABS,
74576cad711SPaolo Bonzini M_DADD_I,
74676cad711SPaolo Bonzini M_DADDU_I,
74776cad711SPaolo Bonzini M_DDIV_3,
74876cad711SPaolo Bonzini M_DDIV_3I,
74976cad711SPaolo Bonzini M_DDIVU_3,
75076cad711SPaolo Bonzini M_DDIVU_3I,
75176cad711SPaolo Bonzini M_DEXT,
75276cad711SPaolo Bonzini M_DINS,
75376cad711SPaolo Bonzini M_DIV_3,
75476cad711SPaolo Bonzini M_DIV_3I,
75576cad711SPaolo Bonzini M_DIVU_3,
75676cad711SPaolo Bonzini M_DIVU_3I,
75776cad711SPaolo Bonzini M_DLA_AB,
75876cad711SPaolo Bonzini M_DLCA_AB,
75976cad711SPaolo Bonzini M_DLI,
76076cad711SPaolo Bonzini M_DMUL,
76176cad711SPaolo Bonzini M_DMUL_I,
76276cad711SPaolo Bonzini M_DMULO,
76376cad711SPaolo Bonzini M_DMULO_I,
76476cad711SPaolo Bonzini M_DMULOU,
76576cad711SPaolo Bonzini M_DMULOU_I,
76676cad711SPaolo Bonzini M_DREM_3,
76776cad711SPaolo Bonzini M_DREM_3I,
76876cad711SPaolo Bonzini M_DREMU_3,
76976cad711SPaolo Bonzini M_DREMU_3I,
77076cad711SPaolo Bonzini M_DSUB_I,
77176cad711SPaolo Bonzini M_DSUBU_I,
77276cad711SPaolo Bonzini M_DSUBU_I_2,
77376cad711SPaolo Bonzini M_J_A,
77476cad711SPaolo Bonzini M_JAL_1,
77576cad711SPaolo Bonzini M_JAL_2,
77676cad711SPaolo Bonzini M_JAL_A,
77776cad711SPaolo Bonzini M_L_DOB,
77876cad711SPaolo Bonzini M_L_DAB,
77976cad711SPaolo Bonzini M_LA_AB,
78076cad711SPaolo Bonzini M_LB_A,
78176cad711SPaolo Bonzini M_LB_AB,
78276cad711SPaolo Bonzini M_LBU_A,
78376cad711SPaolo Bonzini M_LBU_AB,
78476cad711SPaolo Bonzini M_LCA_AB,
78576cad711SPaolo Bonzini M_LD_A,
78676cad711SPaolo Bonzini M_LD_OB,
78776cad711SPaolo Bonzini M_LD_AB,
78876cad711SPaolo Bonzini M_LDC1_AB,
78976cad711SPaolo Bonzini M_LDC2_AB,
79076cad711SPaolo Bonzini M_LDC3_AB,
79176cad711SPaolo Bonzini M_LDL_AB,
79276cad711SPaolo Bonzini M_LDR_AB,
79376cad711SPaolo Bonzini M_LH_A,
79476cad711SPaolo Bonzini M_LH_AB,
79576cad711SPaolo Bonzini M_LHU_A,
79676cad711SPaolo Bonzini M_LHU_AB,
79776cad711SPaolo Bonzini M_LI,
79876cad711SPaolo Bonzini M_LI_D,
79976cad711SPaolo Bonzini M_LI_DD,
80076cad711SPaolo Bonzini M_LI_S,
80176cad711SPaolo Bonzini M_LI_SS,
80276cad711SPaolo Bonzini M_LL_AB,
80376cad711SPaolo Bonzini M_LLD_AB,
80476cad711SPaolo Bonzini M_LS_A,
80576cad711SPaolo Bonzini M_LW_A,
80676cad711SPaolo Bonzini M_LW_AB,
80776cad711SPaolo Bonzini M_LWC0_A,
80876cad711SPaolo Bonzini M_LWC0_AB,
80976cad711SPaolo Bonzini M_LWC1_A,
81076cad711SPaolo Bonzini M_LWC1_AB,
81176cad711SPaolo Bonzini M_LWC2_A,
81276cad711SPaolo Bonzini M_LWC2_AB,
81376cad711SPaolo Bonzini M_LWC3_A,
81476cad711SPaolo Bonzini M_LWC3_AB,
81576cad711SPaolo Bonzini M_LWL_A,
81676cad711SPaolo Bonzini M_LWL_AB,
81776cad711SPaolo Bonzini M_LWR_A,
81876cad711SPaolo Bonzini M_LWR_AB,
81976cad711SPaolo Bonzini M_LWU_AB,
82076cad711SPaolo Bonzini M_MOVE,
82176cad711SPaolo Bonzini M_MUL,
82276cad711SPaolo Bonzini M_MUL_I,
82376cad711SPaolo Bonzini M_MULO,
82476cad711SPaolo Bonzini M_MULO_I,
82576cad711SPaolo Bonzini M_MULOU,
82676cad711SPaolo Bonzini M_MULOU_I,
82776cad711SPaolo Bonzini M_NOR_I,
82876cad711SPaolo Bonzini M_OR_I,
82976cad711SPaolo Bonzini M_REM_3,
83076cad711SPaolo Bonzini M_REM_3I,
83176cad711SPaolo Bonzini M_REMU_3,
83276cad711SPaolo Bonzini M_REMU_3I,
83376cad711SPaolo Bonzini M_DROL,
83476cad711SPaolo Bonzini M_ROL,
83576cad711SPaolo Bonzini M_DROL_I,
83676cad711SPaolo Bonzini M_ROL_I,
83776cad711SPaolo Bonzini M_DROR,
83876cad711SPaolo Bonzini M_ROR,
83976cad711SPaolo Bonzini M_DROR_I,
84076cad711SPaolo Bonzini M_ROR_I,
84176cad711SPaolo Bonzini M_S_DA,
84276cad711SPaolo Bonzini M_S_DOB,
84376cad711SPaolo Bonzini M_S_DAB,
84476cad711SPaolo Bonzini M_S_S,
84576cad711SPaolo Bonzini M_SC_AB,
84676cad711SPaolo Bonzini M_SCD_AB,
84776cad711SPaolo Bonzini M_SD_A,
84876cad711SPaolo Bonzini M_SD_OB,
84976cad711SPaolo Bonzini M_SD_AB,
85076cad711SPaolo Bonzini M_SDC1_AB,
85176cad711SPaolo Bonzini M_SDC2_AB,
85276cad711SPaolo Bonzini M_SDC3_AB,
85376cad711SPaolo Bonzini M_SDL_AB,
85476cad711SPaolo Bonzini M_SDR_AB,
85576cad711SPaolo Bonzini M_SEQ,
85676cad711SPaolo Bonzini M_SEQ_I,
85776cad711SPaolo Bonzini M_SGE,
85876cad711SPaolo Bonzini M_SGE_I,
85976cad711SPaolo Bonzini M_SGEU,
86076cad711SPaolo Bonzini M_SGEU_I,
86176cad711SPaolo Bonzini M_SGT,
86276cad711SPaolo Bonzini M_SGT_I,
86376cad711SPaolo Bonzini M_SGTU,
86476cad711SPaolo Bonzini M_SGTU_I,
86576cad711SPaolo Bonzini M_SLE,
86676cad711SPaolo Bonzini M_SLE_I,
86776cad711SPaolo Bonzini M_SLEU,
86876cad711SPaolo Bonzini M_SLEU_I,
86976cad711SPaolo Bonzini M_SLT_I,
87076cad711SPaolo Bonzini M_SLTU_I,
87176cad711SPaolo Bonzini M_SNE,
87276cad711SPaolo Bonzini M_SNE_I,
87376cad711SPaolo Bonzini M_SB_A,
87476cad711SPaolo Bonzini M_SB_AB,
87576cad711SPaolo Bonzini M_SH_A,
87676cad711SPaolo Bonzini M_SH_AB,
87776cad711SPaolo Bonzini M_SW_A,
87876cad711SPaolo Bonzini M_SW_AB,
87976cad711SPaolo Bonzini M_SWC0_A,
88076cad711SPaolo Bonzini M_SWC0_AB,
88176cad711SPaolo Bonzini M_SWC1_A,
88276cad711SPaolo Bonzini M_SWC1_AB,
88376cad711SPaolo Bonzini M_SWC2_A,
88476cad711SPaolo Bonzini M_SWC2_AB,
88576cad711SPaolo Bonzini M_SWC3_A,
88676cad711SPaolo Bonzini M_SWC3_AB,
88776cad711SPaolo Bonzini M_SWL_A,
88876cad711SPaolo Bonzini M_SWL_AB,
88976cad711SPaolo Bonzini M_SWR_A,
89076cad711SPaolo Bonzini M_SWR_AB,
89176cad711SPaolo Bonzini M_SUB_I,
89276cad711SPaolo Bonzini M_SUBU_I,
89376cad711SPaolo Bonzini M_SUBU_I_2,
89476cad711SPaolo Bonzini M_TEQ_I,
89576cad711SPaolo Bonzini M_TGE_I,
89676cad711SPaolo Bonzini M_TGEU_I,
89776cad711SPaolo Bonzini M_TLT_I,
89876cad711SPaolo Bonzini M_TLTU_I,
89976cad711SPaolo Bonzini M_TNE_I,
90076cad711SPaolo Bonzini M_TRUNCWD,
90176cad711SPaolo Bonzini M_TRUNCWS,
90276cad711SPaolo Bonzini M_ULD,
90376cad711SPaolo Bonzini M_ULD_A,
90476cad711SPaolo Bonzini M_ULH,
90576cad711SPaolo Bonzini M_ULH_A,
90676cad711SPaolo Bonzini M_ULHU,
90776cad711SPaolo Bonzini M_ULHU_A,
90876cad711SPaolo Bonzini M_ULW,
90976cad711SPaolo Bonzini M_ULW_A,
91076cad711SPaolo Bonzini M_USH,
91176cad711SPaolo Bonzini M_USH_A,
91276cad711SPaolo Bonzini M_USW,
91376cad711SPaolo Bonzini M_USW_A,
91476cad711SPaolo Bonzini M_USD,
91576cad711SPaolo Bonzini M_USD_A,
91676cad711SPaolo Bonzini M_XOR_I,
91776cad711SPaolo Bonzini M_COP0,
91876cad711SPaolo Bonzini M_COP1,
91976cad711SPaolo Bonzini M_COP2,
92076cad711SPaolo Bonzini M_COP3,
92176cad711SPaolo Bonzini M_NUM_MACROS
92276cad711SPaolo Bonzini };
92376cad711SPaolo Bonzini
92476cad711SPaolo Bonzini
92576cad711SPaolo Bonzini /* The order of overloaded instructions matters. Label arguments and
92676cad711SPaolo Bonzini register arguments look the same. Instructions that can have either
92776cad711SPaolo Bonzini for arguments must apear in the correct order in this table for the
92876cad711SPaolo Bonzini assembler to pick the right one. In other words, entries with
92976cad711SPaolo Bonzini immediate operands must apear after the same instruction with
93076cad711SPaolo Bonzini registers.
93176cad711SPaolo Bonzini
93276cad711SPaolo Bonzini Many instructions are short hand for other instructions (i.e., The
93376cad711SPaolo Bonzini jal <register> instruction is short for jalr <register>). */
93476cad711SPaolo Bonzini
93576cad711SPaolo Bonzini extern const struct mips_opcode mips_builtin_opcodes[];
93676cad711SPaolo Bonzini extern const int bfd_mips_num_builtin_opcodes;
93776cad711SPaolo Bonzini extern struct mips_opcode *mips_opcodes;
93876cad711SPaolo Bonzini extern int bfd_mips_num_opcodes;
93976cad711SPaolo Bonzini #define NUMOPCODES bfd_mips_num_opcodes
94076cad711SPaolo Bonzini
94176cad711SPaolo Bonzini
94276cad711SPaolo Bonzini /* The rest of this file adds definitions for the mips16 TinyRISC
94376cad711SPaolo Bonzini processor. */
94476cad711SPaolo Bonzini
94576cad711SPaolo Bonzini /* These are the bitmasks and shift counts used for the different
94676cad711SPaolo Bonzini fields in the instruction formats. Other than OP, no masks are
94776cad711SPaolo Bonzini provided for the fixed portions of an instruction, since they are
94876cad711SPaolo Bonzini not needed.
94976cad711SPaolo Bonzini
95076cad711SPaolo Bonzini The I format uses IMM11.
95176cad711SPaolo Bonzini
95276cad711SPaolo Bonzini The RI format uses RX and IMM8.
95376cad711SPaolo Bonzini
95476cad711SPaolo Bonzini The RR format uses RX, and RY.
95576cad711SPaolo Bonzini
95676cad711SPaolo Bonzini The RRI format uses RX, RY, and IMM5.
95776cad711SPaolo Bonzini
95876cad711SPaolo Bonzini The RRR format uses RX, RY, and RZ.
95976cad711SPaolo Bonzini
96076cad711SPaolo Bonzini The RRI_A format uses RX, RY, and IMM4.
96176cad711SPaolo Bonzini
96276cad711SPaolo Bonzini The SHIFT format uses RX, RY, and SHAMT.
96376cad711SPaolo Bonzini
96476cad711SPaolo Bonzini The I8 format uses IMM8.
96576cad711SPaolo Bonzini
96676cad711SPaolo Bonzini The I8_MOVR32 format uses RY and REGR32.
96776cad711SPaolo Bonzini
96876cad711SPaolo Bonzini The IR_MOV32R format uses REG32R and MOV32Z.
96976cad711SPaolo Bonzini
97076cad711SPaolo Bonzini The I64 format uses IMM8.
97176cad711SPaolo Bonzini
97276cad711SPaolo Bonzini The RI64 format uses RY and IMM5.
97376cad711SPaolo Bonzini */
97476cad711SPaolo Bonzini
97576cad711SPaolo Bonzini #define MIPS16OP_MASK_OP 0x1f
97676cad711SPaolo Bonzini #define MIPS16OP_SH_OP 11
97776cad711SPaolo Bonzini #define MIPS16OP_MASK_IMM11 0x7ff
97876cad711SPaolo Bonzini #define MIPS16OP_SH_IMM11 0
97976cad711SPaolo Bonzini #define MIPS16OP_MASK_RX 0x7
98076cad711SPaolo Bonzini #define MIPS16OP_SH_RX 8
98176cad711SPaolo Bonzini #define MIPS16OP_MASK_IMM8 0xff
98276cad711SPaolo Bonzini #define MIPS16OP_SH_IMM8 0
98376cad711SPaolo Bonzini #define MIPS16OP_MASK_RY 0x7
98476cad711SPaolo Bonzini #define MIPS16OP_SH_RY 5
98576cad711SPaolo Bonzini #define MIPS16OP_MASK_IMM5 0x1f
98676cad711SPaolo Bonzini #define MIPS16OP_SH_IMM5 0
98776cad711SPaolo Bonzini #define MIPS16OP_MASK_RZ 0x7
98876cad711SPaolo Bonzini #define MIPS16OP_SH_RZ 2
98976cad711SPaolo Bonzini #define MIPS16OP_MASK_IMM4 0xf
99076cad711SPaolo Bonzini #define MIPS16OP_SH_IMM4 0
99176cad711SPaolo Bonzini #define MIPS16OP_MASK_REGR32 0x1f
99276cad711SPaolo Bonzini #define MIPS16OP_SH_REGR32 0
99376cad711SPaolo Bonzini #define MIPS16OP_MASK_REG32R 0x1f
99476cad711SPaolo Bonzini #define MIPS16OP_SH_REG32R 3
99576cad711SPaolo Bonzini #define MIPS16OP_EXTRACT_REG32R(i) ((((i) >> 5) & 7) | ((i) & 0x18))
99676cad711SPaolo Bonzini #define MIPS16OP_MASK_MOVE32Z 0x7
99776cad711SPaolo Bonzini #define MIPS16OP_SH_MOVE32Z 0
99876cad711SPaolo Bonzini #define MIPS16OP_MASK_IMM6 0x3f
99976cad711SPaolo Bonzini #define MIPS16OP_SH_IMM6 5
100076cad711SPaolo Bonzini
100176cad711SPaolo Bonzini /* These are the characters which may appears in the args field of an
100276cad711SPaolo Bonzini instruction. They appear in the order in which the fields appear
100376cad711SPaolo Bonzini when the instruction is used. Commas and parentheses in the args
100476cad711SPaolo Bonzini string are ignored when assembling, and written into the output
100576cad711SPaolo Bonzini when disassembling.
100676cad711SPaolo Bonzini
100776cad711SPaolo Bonzini "y" 3 bit register (MIPS16OP_*_RY)
100876cad711SPaolo Bonzini "x" 3 bit register (MIPS16OP_*_RX)
100976cad711SPaolo Bonzini "z" 3 bit register (MIPS16OP_*_RZ)
101076cad711SPaolo Bonzini "Z" 3 bit register (MIPS16OP_*_MOVE32Z)
101176cad711SPaolo Bonzini "v" 3 bit same register as source and destination (MIPS16OP_*_RX)
101276cad711SPaolo Bonzini "w" 3 bit same register as source and destination (MIPS16OP_*_RY)
101376cad711SPaolo Bonzini "0" zero register ($0)
101476cad711SPaolo Bonzini "S" stack pointer ($sp or $29)
101576cad711SPaolo Bonzini "P" program counter
101676cad711SPaolo Bonzini "R" return address register ($ra or $31)
101776cad711SPaolo Bonzini "X" 5 bit MIPS register (MIPS16OP_*_REGR32)
101876cad711SPaolo Bonzini "Y" 5 bit MIPS register (MIPS16OP_*_REG32R)
101976cad711SPaolo Bonzini "6" 6 bit unsigned break code (MIPS16OP_*_IMM6)
102076cad711SPaolo Bonzini "a" 26 bit jump address
102176cad711SPaolo Bonzini "e" 11 bit extension value
102276cad711SPaolo Bonzini "l" register list for entry instruction
102376cad711SPaolo Bonzini "L" register list for exit instruction
102476cad711SPaolo Bonzini
102576cad711SPaolo Bonzini The remaining codes may be extended. Except as otherwise noted,
102676cad711SPaolo Bonzini the full extended operand is a 16 bit signed value.
102776cad711SPaolo Bonzini "<" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 5 bit unsigned)
102876cad711SPaolo Bonzini ">" 3 bit unsigned shift count * 0 (MIPS16OP_*_RX) (full 5 bit unsigned)
102976cad711SPaolo Bonzini "[" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 6 bit unsigned)
103076cad711SPaolo Bonzini "]" 3 bit unsigned shift count * 0 (MIPS16OP_*_RX) (full 6 bit unsigned)
103176cad711SPaolo Bonzini "4" 4 bit signed immediate * 0 (MIPS16OP_*_IMM4) (full 15 bit signed)
103276cad711SPaolo Bonzini "5" 5 bit unsigned immediate * 0 (MIPS16OP_*_IMM5)
103376cad711SPaolo Bonzini "H" 5 bit unsigned immediate * 2 (MIPS16OP_*_IMM5)
103476cad711SPaolo Bonzini "W" 5 bit unsigned immediate * 4 (MIPS16OP_*_IMM5)
103576cad711SPaolo Bonzini "D" 5 bit unsigned immediate * 8 (MIPS16OP_*_IMM5)
103676cad711SPaolo Bonzini "j" 5 bit signed immediate * 0 (MIPS16OP_*_IMM5)
103776cad711SPaolo Bonzini "8" 8 bit unsigned immediate * 0 (MIPS16OP_*_IMM8)
103876cad711SPaolo Bonzini "V" 8 bit unsigned immediate * 4 (MIPS16OP_*_IMM8)
103976cad711SPaolo Bonzini "C" 8 bit unsigned immediate * 8 (MIPS16OP_*_IMM8)
104076cad711SPaolo Bonzini "U" 8 bit unsigned immediate * 0 (MIPS16OP_*_IMM8) (full 16 bit unsigned)
104176cad711SPaolo Bonzini "k" 8 bit signed immediate * 0 (MIPS16OP_*_IMM8)
104276cad711SPaolo Bonzini "K" 8 bit signed immediate * 8 (MIPS16OP_*_IMM8)
104376cad711SPaolo Bonzini "p" 8 bit conditional branch address (MIPS16OP_*_IMM8)
104476cad711SPaolo Bonzini "q" 11 bit branch address (MIPS16OP_*_IMM11)
104576cad711SPaolo Bonzini "A" 8 bit PC relative address * 4 (MIPS16OP_*_IMM8)
104676cad711SPaolo Bonzini "B" 5 bit PC relative address * 8 (MIPS16OP_*_IMM5)
104776cad711SPaolo Bonzini "E" 5 bit PC relative address * 4 (MIPS16OP_*_IMM5)
104876cad711SPaolo Bonzini */
104976cad711SPaolo Bonzini
105076cad711SPaolo Bonzini /* Save/restore encoding for the args field when all 4 registers are
105176cad711SPaolo Bonzini either saved as arguments or saved/restored as statics. */
105276cad711SPaolo Bonzini #define MIPS16_ALL_ARGS 0xe
105376cad711SPaolo Bonzini #define MIPS16_ALL_STATICS 0xb
105476cad711SPaolo Bonzini
105576cad711SPaolo Bonzini /* For the mips16, we use the same opcode table format and a few of
105676cad711SPaolo Bonzini the same flags. However, most of the flags are different. */
105776cad711SPaolo Bonzini
105876cad711SPaolo Bonzini /* Modifies the register in MIPS16OP_*_RX. */
105976cad711SPaolo Bonzini #define MIPS16_INSN_WRITE_X 0x00000001
106076cad711SPaolo Bonzini /* Modifies the register in MIPS16OP_*_RY. */
106176cad711SPaolo Bonzini #define MIPS16_INSN_WRITE_Y 0x00000002
106276cad711SPaolo Bonzini /* Modifies the register in MIPS16OP_*_RZ. */
106376cad711SPaolo Bonzini #define MIPS16_INSN_WRITE_Z 0x00000004
106476cad711SPaolo Bonzini /* Modifies the T ($24) register. */
106576cad711SPaolo Bonzini #define MIPS16_INSN_WRITE_T 0x00000008
106676cad711SPaolo Bonzini /* Modifies the SP ($29) register. */
106776cad711SPaolo Bonzini #define MIPS16_INSN_WRITE_SP 0x00000010
106876cad711SPaolo Bonzini /* Modifies the RA ($31) register. */
106976cad711SPaolo Bonzini #define MIPS16_INSN_WRITE_31 0x00000020
107076cad711SPaolo Bonzini /* Modifies the general purpose register in MIPS16OP_*_REG32R. */
107176cad711SPaolo Bonzini #define MIPS16_INSN_WRITE_GPR_Y 0x00000040
107276cad711SPaolo Bonzini /* Reads the register in MIPS16OP_*_RX. */
107376cad711SPaolo Bonzini #define MIPS16_INSN_READ_X 0x00000080
107476cad711SPaolo Bonzini /* Reads the register in MIPS16OP_*_RY. */
107576cad711SPaolo Bonzini #define MIPS16_INSN_READ_Y 0x00000100
107676cad711SPaolo Bonzini /* Reads the register in MIPS16OP_*_MOVE32Z. */
107776cad711SPaolo Bonzini #define MIPS16_INSN_READ_Z 0x00000200
107876cad711SPaolo Bonzini /* Reads the T ($24) register. */
107976cad711SPaolo Bonzini #define MIPS16_INSN_READ_T 0x00000400
108076cad711SPaolo Bonzini /* Reads the SP ($29) register. */
108176cad711SPaolo Bonzini #define MIPS16_INSN_READ_SP 0x00000800
108276cad711SPaolo Bonzini /* Reads the RA ($31) register. */
108376cad711SPaolo Bonzini #define MIPS16_INSN_READ_31 0x00001000
108476cad711SPaolo Bonzini /* Reads the program counter. */
108576cad711SPaolo Bonzini #define MIPS16_INSN_READ_PC 0x00002000
108676cad711SPaolo Bonzini /* Reads the general purpose register in MIPS16OP_*_REGR32. */
108776cad711SPaolo Bonzini #define MIPS16_INSN_READ_GPR_X 0x00004000
108876cad711SPaolo Bonzini /* Is a branch insn. */
108976cad711SPaolo Bonzini #define MIPS16_INSN_BRANCH 0x00010000
109076cad711SPaolo Bonzini
109176cad711SPaolo Bonzini /* The following flags have the same value for the mips16 opcode
109276cad711SPaolo Bonzini table:
109376cad711SPaolo Bonzini INSN_UNCOND_BRANCH_DELAY
109476cad711SPaolo Bonzini INSN_COND_BRANCH_DELAY
109576cad711SPaolo Bonzini INSN_COND_BRANCH_LIKELY (never used)
109676cad711SPaolo Bonzini INSN_READ_HI
109776cad711SPaolo Bonzini INSN_READ_LO
109876cad711SPaolo Bonzini INSN_WRITE_HI
109976cad711SPaolo Bonzini INSN_WRITE_LO
110076cad711SPaolo Bonzini INSN_TRAP
110176cad711SPaolo Bonzini INSN_ISA3
110276cad711SPaolo Bonzini */
110376cad711SPaolo Bonzini
110476cad711SPaolo Bonzini extern const struct mips_opcode mips16_opcodes[];
110576cad711SPaolo Bonzini extern const int bfd_mips16_num_opcodes;
110676cad711SPaolo Bonzini
110776cad711SPaolo Bonzini /* Short hand so the lines aren't too long. */
110876cad711SPaolo Bonzini
110976cad711SPaolo Bonzini #define LDD INSN_LOAD_MEMORY_DELAY
111076cad711SPaolo Bonzini #define LCD INSN_LOAD_COPROC_DELAY
111176cad711SPaolo Bonzini #define UBD INSN_UNCOND_BRANCH_DELAY
111276cad711SPaolo Bonzini #define CBD INSN_COND_BRANCH_DELAY
111376cad711SPaolo Bonzini #define COD INSN_COPROC_MOVE_DELAY
111476cad711SPaolo Bonzini #define CLD INSN_COPROC_MEMORY_DELAY
111576cad711SPaolo Bonzini #define CBL INSN_COND_BRANCH_LIKELY
111676cad711SPaolo Bonzini #define TRAP INSN_TRAP
111776cad711SPaolo Bonzini #define SM INSN_STORE_MEMORY
111876cad711SPaolo Bonzini
111976cad711SPaolo Bonzini #define WR_d INSN_WRITE_GPR_D
112076cad711SPaolo Bonzini #define WR_t INSN_WRITE_GPR_T
112176cad711SPaolo Bonzini #define WR_31 INSN_WRITE_GPR_31
112276cad711SPaolo Bonzini #define WR_D INSN_WRITE_FPR_D
112376cad711SPaolo Bonzini #define WR_T INSN_WRITE_FPR_T
112476cad711SPaolo Bonzini #define WR_S INSN_WRITE_FPR_S
112576cad711SPaolo Bonzini #define RD_s INSN_READ_GPR_S
112676cad711SPaolo Bonzini #define RD_b INSN_READ_GPR_S
112776cad711SPaolo Bonzini #define RD_t INSN_READ_GPR_T
112876cad711SPaolo Bonzini #define RD_S INSN_READ_FPR_S
112976cad711SPaolo Bonzini #define RD_T INSN_READ_FPR_T
113076cad711SPaolo Bonzini #define RD_R INSN_READ_FPR_R
113176cad711SPaolo Bonzini #define WR_CC INSN_WRITE_COND_CODE
113276cad711SPaolo Bonzini #define RD_CC INSN_READ_COND_CODE
113376cad711SPaolo Bonzini #define RD_C0 INSN_COP
113476cad711SPaolo Bonzini #define RD_C1 INSN_COP
113576cad711SPaolo Bonzini #define RD_C2 INSN_COP
113676cad711SPaolo Bonzini #define RD_C3 INSN_COP
113776cad711SPaolo Bonzini #define WR_C0 INSN_COP
113876cad711SPaolo Bonzini #define WR_C1 INSN_COP
113976cad711SPaolo Bonzini #define WR_C2 INSN_COP
114076cad711SPaolo Bonzini #define WR_C3 INSN_COP
114176cad711SPaolo Bonzini
114276cad711SPaolo Bonzini #define WR_HI INSN_WRITE_HI
114376cad711SPaolo Bonzini #define RD_HI INSN_READ_HI
114476cad711SPaolo Bonzini #define MOD_HI WR_HI|RD_HI
114576cad711SPaolo Bonzini
114676cad711SPaolo Bonzini #define WR_LO INSN_WRITE_LO
114776cad711SPaolo Bonzini #define RD_LO INSN_READ_LO
114876cad711SPaolo Bonzini #define MOD_LO WR_LO|RD_LO
114976cad711SPaolo Bonzini
115076cad711SPaolo Bonzini #define WR_HILO WR_HI|WR_LO
115176cad711SPaolo Bonzini #define RD_HILO RD_HI|RD_LO
115276cad711SPaolo Bonzini #define MOD_HILO WR_HILO|RD_HILO
115376cad711SPaolo Bonzini
115476cad711SPaolo Bonzini #define IS_M INSN_MULT
115576cad711SPaolo Bonzini
115676cad711SPaolo Bonzini #define WR_MACC INSN2_WRITE_MDMX_ACC
115776cad711SPaolo Bonzini #define RD_MACC INSN2_READ_MDMX_ACC
115876cad711SPaolo Bonzini
115976cad711SPaolo Bonzini #define I1 INSN_ISA1
116076cad711SPaolo Bonzini #define I2 INSN_ISA2
116176cad711SPaolo Bonzini #define I3 INSN_ISA3
116276cad711SPaolo Bonzini #define I4 INSN_ISA4
116376cad711SPaolo Bonzini #define I5 INSN_ISA5
116476cad711SPaolo Bonzini #define I32 INSN_ISA32
116576cad711SPaolo Bonzini #define I64 INSN_ISA64
116676cad711SPaolo Bonzini #define I33 INSN_ISA32R2
116776cad711SPaolo Bonzini #define I65 INSN_ISA64R2
1168b691d9d2SLeon Alrae #define I32R6 INSN_ISA32R6
1169b691d9d2SLeon Alrae #define I64R6 INSN_ISA64R6
117076cad711SPaolo Bonzini
117176cad711SPaolo Bonzini /* MIPS64 MIPS-3D ASE support. */
117276cad711SPaolo Bonzini #define I16 INSN_MIPS16
117376cad711SPaolo Bonzini
117476cad711SPaolo Bonzini /* MIPS32 SmartMIPS ASE support. */
117576cad711SPaolo Bonzini #define SMT INSN_SMARTMIPS
117676cad711SPaolo Bonzini
117776cad711SPaolo Bonzini /* MIPS64 MIPS-3D ASE support. */
117876cad711SPaolo Bonzini #define M3D INSN_MIPS3D
117976cad711SPaolo Bonzini
118076cad711SPaolo Bonzini /* MIPS64 MDMX ASE support. */
118176cad711SPaolo Bonzini #define MX INSN_MDMX
118276cad711SPaolo Bonzini
118376cad711SPaolo Bonzini #define IL2E (INSN_LOONGSON_2E)
118476cad711SPaolo Bonzini #define IL2F (INSN_LOONGSON_2F)
118576cad711SPaolo Bonzini
118676cad711SPaolo Bonzini #define P3 INSN_4650
118776cad711SPaolo Bonzini #define L1 INSN_4010
118876cad711SPaolo Bonzini #define V1 (INSN_4100 | INSN_4111 | INSN_4120)
118976cad711SPaolo Bonzini #define T3 INSN_3900
119076cad711SPaolo Bonzini #define M1 INSN_10000
119176cad711SPaolo Bonzini #define SB1 INSN_SB1
119276cad711SPaolo Bonzini #define N411 INSN_4111
119376cad711SPaolo Bonzini #define N412 INSN_4120
119476cad711SPaolo Bonzini #define N5 (INSN_5400 | INSN_5500)
119576cad711SPaolo Bonzini #define N54 INSN_5400
119676cad711SPaolo Bonzini #define N55 INSN_5500
119776cad711SPaolo Bonzini
119876cad711SPaolo Bonzini #define G1 (T3 \
119976cad711SPaolo Bonzini )
120076cad711SPaolo Bonzini
120176cad711SPaolo Bonzini #define G2 (T3 \
120276cad711SPaolo Bonzini )
120376cad711SPaolo Bonzini
120476cad711SPaolo Bonzini #define G3 (I4 \
120576cad711SPaolo Bonzini )
120676cad711SPaolo Bonzini
120776cad711SPaolo Bonzini /* MIPS DSP ASE support.
120876cad711SPaolo Bonzini NOTE:
120976cad711SPaolo Bonzini 1. MIPS DSP ASE includes 4 accumulators ($ac0 - $ac3). $ac0 is the pair
121076cad711SPaolo Bonzini of original HI and LO. $ac1, $ac2 and $ac3 are new registers, and have
121176cad711SPaolo Bonzini the same structure as $ac0 (HI + LO). For DSP instructions that write or
121276cad711SPaolo Bonzini read accumulators (that may be $ac0), we add WR_a (WR_HILO) or RD_a
121376cad711SPaolo Bonzini (RD_HILO) attributes, such that HILO dependencies are maintained
121476cad711SPaolo Bonzini conservatively.
121576cad711SPaolo Bonzini
121676cad711SPaolo Bonzini 2. For some mul. instructions that use integer registers as destinations
121776cad711SPaolo Bonzini but destroy HI+LO as side-effect, we add WR_HILO to their attributes.
121876cad711SPaolo Bonzini
121976cad711SPaolo Bonzini 3. MIPS DSP ASE includes a new DSP control register, which has 6 fields
122076cad711SPaolo Bonzini (ccond, outflag, EFI, c, scount, pos). Many DSP instructions read or write
122176cad711SPaolo Bonzini certain fields of the DSP control register. For simplicity, we decide not
122276cad711SPaolo Bonzini to track dependencies of these fields.
122376cad711SPaolo Bonzini However, "bposge32" is a branch instruction that depends on the "pos"
122476cad711SPaolo Bonzini field. In order to make sure that GAS does not reorder DSP instructions
122576cad711SPaolo Bonzini that writes the "pos" field and "bposge32", we add DSP_VOLA (INSN_TRAP)
122676cad711SPaolo Bonzini attribute to those instructions that write the "pos" field. */
122776cad711SPaolo Bonzini
122876cad711SPaolo Bonzini #define WR_a WR_HILO /* Write dsp accumulators (reuse WR_HILO) */
122976cad711SPaolo Bonzini #define RD_a RD_HILO /* Read dsp accumulators (reuse RD_HILO) */
123076cad711SPaolo Bonzini #define MOD_a WR_a|RD_a
123176cad711SPaolo Bonzini #define DSP_VOLA INSN_TRAP
123276cad711SPaolo Bonzini #define D32 INSN_DSP
123376cad711SPaolo Bonzini #define D33 INSN_DSPR2
123476cad711SPaolo Bonzini #define D64 INSN_DSP64
123576cad711SPaolo Bonzini
123676cad711SPaolo Bonzini /* MIPS MT ASE support. */
123776cad711SPaolo Bonzini #define MT32 INSN_MT
123876cad711SPaolo Bonzini
1239ed8a933fSYongbok Kim /* MSA */
1240ed8a933fSYongbok Kim #define MSA INSN_MSA
1241ed8a933fSYongbok Kim #define MSA64 INSN_MSA64
1242ed8a933fSYongbok Kim #define WR_VD INSN_WRITE_FPR_D /* Reuse INSN_WRITE_FPR_D */
1243ed8a933fSYongbok Kim #define RD_VD WR_VD /* Reuse WR_VD */
1244ed8a933fSYongbok Kim #define RD_VT INSN_READ_FPR_T /* Reuse INSN_READ_FPR_T */
1245ed8a933fSYongbok Kim #define RD_VS INSN_READ_FPR_S /* Reuse INSN_READ_FPR_S */
1246ed8a933fSYongbok Kim #define RD_d INSN2_READ_GPR_D /* Reuse INSN2_READ_GPR_D */
1247ed8a933fSYongbok Kim
1248ed8a933fSYongbok Kim #define RD_rd6 0
1249ed8a933fSYongbok Kim
125076cad711SPaolo Bonzini /* The order of overloaded instructions matters. Label arguments and
125176cad711SPaolo Bonzini register arguments look the same. Instructions that can have either
125276cad711SPaolo Bonzini for arguments must apear in the correct order in this table for the
125376cad711SPaolo Bonzini assembler to pick the right one. In other words, entries with
125476cad711SPaolo Bonzini immediate operands must apear after the same instruction with
125576cad711SPaolo Bonzini registers.
125676cad711SPaolo Bonzini
125776cad711SPaolo Bonzini Because of the lookup algorithm used, entries with the same opcode
125876cad711SPaolo Bonzini name must be contiguous.
125976cad711SPaolo Bonzini
126076cad711SPaolo Bonzini Many instructions are short hand for other instructions (i.e., The
126176cad711SPaolo Bonzini jal <register> instruction is short for jalr <register>). */
126276cad711SPaolo Bonzini
126376cad711SPaolo Bonzini const struct mips_opcode mips_builtin_opcodes[] =
126476cad711SPaolo Bonzini {
126576cad711SPaolo Bonzini /* These instructions appear first so that the disassembler will find
126676cad711SPaolo Bonzini them first. The assemblers uses a hash table based on the
126776cad711SPaolo Bonzini instruction name anyhow. */
126876cad711SPaolo Bonzini /* name, args, match, mask, pinfo, membership */
1269d4ea6acdSLeon Alrae {"lwpc", "s,+o2", 0xec080000, 0xfc180000, WR_d, 0, I32R6},
1270d4ea6acdSLeon Alrae {"lwupc", "s,+o2", 0xec100000, 0xfc180000, WR_d, 0, I64R6},
1271d4ea6acdSLeon Alrae {"ldpc", "s,+o1", 0xec180000, 0xfc1c0000, WR_d, 0, I64R6},
1272d4ea6acdSLeon Alrae {"addiupc", "s,+o2", 0xec000000, 0xfc180000, WR_d, 0, I32R6},
1273d4ea6acdSLeon Alrae {"auipc", "s,u", 0xec1e0000, 0xfc1f0000, WR_d, 0, I32R6},
1274d4ea6acdSLeon Alrae {"aluipc", "s,u", 0xec1f0000, 0xfc1f0000, WR_d, 0, I32R6},
1275d4ea6acdSLeon Alrae {"daui", "s,t,u", 0x74000000, 0xfc000000, RD_s|WR_t, 0, I64R6},
1276d4ea6acdSLeon Alrae {"dahi", "s,u", 0x04060000, 0xfc1f0000, RD_s, 0, I64R6},
1277d4ea6acdSLeon Alrae {"dati", "s,u", 0x041e0000, 0xfc1f0000, RD_s, 0, I64R6},
1278d4ea6acdSLeon Alrae {"lsa", "d,s,t", 0x00000005, 0xfc00073f, WR_d|RD_s|RD_t, 0, I32R6},
1279d4ea6acdSLeon Alrae {"dlsa", "d,s,t", 0x00000015, 0xfc00073f, WR_d|RD_s|RD_t, 0, I64R6},
12804267d3e6SLeon Alrae {"clz", "U,s", 0x00000050, 0xfc1f07ff, WR_d|RD_s, 0, I32R6},
12814267d3e6SLeon Alrae {"clo", "U,s", 0x00000051, 0xfc1f07ff, WR_d|RD_s, 0, I32R6},
12824267d3e6SLeon Alrae {"dclz", "U,s", 0x00000052, 0xfc1f07ff, WR_d|RD_s, 0, I64R6},
12834267d3e6SLeon Alrae {"dclo", "U,s", 0x00000053, 0xfc1f07ff, WR_d|RD_s, 0, I64R6},
12844267d3e6SLeon Alrae {"sdbbp", "B", 0x0000000e, 0xfc00003f, TRAP, 0, I32R6},
1285b42ee5e1SLeon Alrae {"mul", "d,s,t", 0x00000098, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1286b42ee5e1SLeon Alrae {"muh", "d,s,t", 0x000000d8, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1287b42ee5e1SLeon Alrae {"mulu", "d,s,t", 0x00000099, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1288b42ee5e1SLeon Alrae {"muhu", "d,s,t", 0x000000d9, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1289b42ee5e1SLeon Alrae {"div", "d,s,t", 0x0000009a, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1290b42ee5e1SLeon Alrae {"mod", "d,s,t", 0x000000da, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1291b42ee5e1SLeon Alrae {"divu", "d,s,t", 0x0000009b, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1292b42ee5e1SLeon Alrae {"modu", "d,s,t", 0x000000db, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1293b42ee5e1SLeon Alrae {"dmul", "d,s,t", 0x0000009c, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6},
1294b42ee5e1SLeon Alrae {"dmuh", "d,s,t", 0x000000dc, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6},
1295b42ee5e1SLeon Alrae {"dmulu", "d,s,t", 0x0000009d, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6},
1296b42ee5e1SLeon Alrae {"dmuhu", "d,s,t", 0x000000dd, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6},
1297b42ee5e1SLeon Alrae {"ddiv", "d,s,t", 0x0000009e, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6},
1298b42ee5e1SLeon Alrae {"dmod", "d,s,t", 0x000000de, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6},
1299b42ee5e1SLeon Alrae {"ddivu", "d,s,t", 0x0000009f, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6},
1300b42ee5e1SLeon Alrae {"dmodu", "d,s,t", 0x000000df, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I64R6},
13016b9c26fbSYongbok Kim {"ll", "t,+o(b)", 0x7c000036, 0xfc00007f, LDD|RD_b|WR_t, 0, I32R6},
13026b9c26fbSYongbok Kim {"sc", "t,+o(b)", 0x7c000026, 0xfc00007f, LDD|RD_b|WR_t, 0, I32R6},
13036b9c26fbSYongbok Kim {"lld", "t,+o(b)", 0x7c000037, 0xfc00007f, LDD|RD_b|WR_t, 0, I64R6},
13046b9c26fbSYongbok Kim {"scd", "t,+o(b)", 0x7c000027, 0xfc00007f, LDD|RD_b|WR_t, 0, I64R6},
13056b9c26fbSYongbok Kim {"pref", "h,+o(b)", 0x7c000035, 0xfc00007f, RD_b, 0, I32R6},
13066b9c26fbSYongbok Kim {"cache", "k,+o(b)", 0x7c000025, 0xfc00007f, RD_b, 0, I32R6},
1307b691d9d2SLeon Alrae {"seleqz", "d,v,t", 0x00000035, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1308b691d9d2SLeon Alrae {"selnez", "d,v,t", 0x00000037, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I32R6},
1309e7f16abbSLeon Alrae {"maddf.s", "D,S,T", 0x46000018, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1310e7f16abbSLeon Alrae {"maddf.d", "D,S,T", 0x46200018, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
1311e7f16abbSLeon Alrae {"msubf.s", "D,S,T", 0x46000019, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1312e7f16abbSLeon Alrae {"msubf.d", "D,S,T", 0x46200019, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
1313e7f16abbSLeon Alrae {"max.s", "D,S,T", 0x4600001e, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1314e7f16abbSLeon Alrae {"max.d", "D,S,T", 0x4620001e, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
1315e7f16abbSLeon Alrae {"maxa.s", "D,S,T", 0x4600001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1316e7f16abbSLeon Alrae {"maxa.d", "D,S,T", 0x4620001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
1317e7f16abbSLeon Alrae {"rint.s", "D,S", 0x4600001a, 0xffff003f, WR_D|RD_S|FP_S, 0, I32R6},
1318e7f16abbSLeon Alrae {"rint.d", "D,S", 0x4620001a, 0xffff003f, WR_D|RD_S|FP_D, 0, I32R6},
1319e7f16abbSLeon Alrae {"class.s", "D,S", 0x4600001b, 0xffff003f, WR_D|RD_S|FP_S, 0, I32R6},
1320e7f16abbSLeon Alrae {"class.d", "D,S", 0x4620001b, 0xffff003f, WR_D|RD_S|FP_D, 0, I32R6},
1321e7f16abbSLeon Alrae {"min.s", "D,S,T", 0x4600001c, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1322e7f16abbSLeon Alrae {"min.d", "D,S,T", 0x4620001c, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
1323e7f16abbSLeon Alrae {"mina.s", "D,S,T", 0x4600001d, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1324e7f16abbSLeon Alrae {"mina.d", "D,S,T", 0x4620001d, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
1325e7f16abbSLeon Alrae {"sel.s", "D,S,T", 0x46000010, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1326e7f16abbSLeon Alrae {"sel.d", "D,S,T", 0x46200010, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
1327e7f16abbSLeon Alrae {"seleqz.s", "D,S,T", 0x46000014, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1328e7f16abbSLeon Alrae {"seleqz.d", "D,S,T", 0x46200014, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
1329e7f16abbSLeon Alrae {"selnez.s", "D,S,T", 0x46000017, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I32R6},
1330e7f16abbSLeon Alrae {"selnez.d", "D,S,T", 0x46200017, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I32R6},
133115eacb9bSYongbok Kim {"align", "d,v,t", 0x7c000220, 0xfc00073f, WR_d|RD_s|RD_t, 0, I32R6},
133215eacb9bSYongbok Kim {"dalign", "d,v,t", 0x7c000224, 0xfc00063f, WR_d|RD_s|RD_t, 0, I64R6},
133315eacb9bSYongbok Kim {"bitswap", "d,w", 0x7c000020, 0xffe007ff, WR_d|RD_t, 0, I32R6},
133415eacb9bSYongbok Kim {"dbitswap","d,w", 0x7c000024, 0xffe007ff, WR_d|RD_t, 0, I64R6},
133531837be3SYongbok Kim {"balc", "+p", 0xe8000000, 0xfc000000, UBD|WR_31, 0, I32R6},
133631837be3SYongbok Kim {"bc", "+p", 0xc8000000, 0xfc000000, UBD|WR_31, 0, I32R6},
133731837be3SYongbok Kim {"jic", "t,o", 0xd8000000, 0xffe00000, UBD|RD_t, 0, I32R6},
1338*a6d89b45SDavid Daney {"beqzc", "s,+q", 0xd8000000, 0xfc000000, CBD|RD_s, 0, I32R6},
133931837be3SYongbok Kim {"jialc", "t,o", 0xf8000000, 0xffe00000, UBD|RD_t, 0, I32R6},
1340*a6d89b45SDavid Daney {"bnezc", "s,+q", 0xf8000000, 0xfc000000, CBD|RD_s, 0, I32R6},
134131837be3SYongbok Kim {"beqzalc", "s,t,p", 0x20000000, 0xffe00000, CBD|RD_s|RD_t, 0, I32R6},
134231837be3SYongbok Kim {"bovc", "s,t,p", 0x20000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
134331837be3SYongbok Kim {"beqc", "s,t,p", 0x20000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
134431837be3SYongbok Kim {"bnezalc", "s,t,p", 0x60000000, 0xffe00000, CBD|RD_s|RD_t, 0, I32R6},
134531837be3SYongbok Kim {"bnvc", "s,t,p", 0x60000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
134631837be3SYongbok Kim {"bnec", "s,t,p", 0x60000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
134731837be3SYongbok Kim {"blezc", "s,t,p", 0x58000000, 0xffe00000, CBD|RD_s|RD_t, 0, I32R6},
134831837be3SYongbok Kim {"bgezc", "s,t,p", 0x58000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
134931837be3SYongbok Kim {"bgec", "s,t,p", 0x58000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
135031837be3SYongbok Kim {"bgtzc", "s,t,p", 0x5c000000, 0xffe00000, CBD|RD_s|RD_t, 0, I32R6},
135131837be3SYongbok Kim {"bltzc", "s,t,p", 0x5c000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
135231837be3SYongbok Kim {"bltc", "s,t,p", 0x5c000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
135331837be3SYongbok Kim {"blezalc", "s,t,p", 0x18000000, 0xffe00000, CBD|RD_s|RD_t, 0, I32R6},
135431837be3SYongbok Kim {"bgezalc", "s,t,p", 0x18000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
135531837be3SYongbok Kim {"bgeuc", "s,t,p", 0x18000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
135631837be3SYongbok Kim {"bgtzalc", "s,t,p", 0x1c000000, 0xffe00000, CBD|RD_s|RD_t, 0, I32R6},
135731837be3SYongbok Kim {"bltzalc", "s,t,p", 0x1c000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
135831837be3SYongbok Kim {"bltuc", "s,t,p", 0x1c000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
13590aefa333SYongbok Kim {"nal", "p", 0x04100000, 0xffff0000, WR_31, 0, I32R6},
13600aefa333SYongbok Kim {"bal", "p", 0x04110000, 0xffff0000, UBD|WR_31, 0, I32R6},
136131837be3SYongbok Kim {"bc1eqz", "T,p", 0x45200000, 0xffe00000, CBD|RD_T|FP_S|FP_D, 0, I32R6},
136231837be3SYongbok Kim {"bc1nez", "T,p", 0x45a00000, 0xffe00000, CBD|RD_T|FP_S|FP_D, 0, I32R6},
136331837be3SYongbok Kim {"bc2eqz", "E,p", 0x49200000, 0xffe00000, CBD|RD_C2, 0, I32R6},
136431837be3SYongbok Kim {"bc2nez", "E,p", 0x49a00000, 0xffe00000, CBD|RD_C2, 0, I32R6},
13653f493883SYongbok Kim {"cmp.af.s", "D,S,T", 0x46800000, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13663f493883SYongbok Kim {"cmp.un.s", "D,S,T", 0x46800001, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13673f493883SYongbok Kim {"cmp.eq.s", "D,S,T", 0x46800002, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13683f493883SYongbok Kim {"cmp.ueq.s", "D,S,T", 0x46800003, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13693f493883SYongbok Kim {"cmp.lt.s", "D,S,T", 0x46800004, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13703f493883SYongbok Kim {"cmp.ult.s", "D,S,T", 0x46800005, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13713f493883SYongbok Kim {"cmp.le.s", "D,S,T", 0x46800006, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13723f493883SYongbok Kim {"cmp.ule.s", "D,S,T", 0x46800007, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13733f493883SYongbok Kim {"cmp.saf.s", "D,S,T", 0x46800008, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13743f493883SYongbok Kim {"cmp.sun.s", "D,S,T", 0x46800009, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13753f493883SYongbok Kim {"cmp.seq.s", "D,S,T", 0x4680000a, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13763f493883SYongbok Kim {"cmp.sueq.s", "D,S,T", 0x4680000b, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13773f493883SYongbok Kim {"cmp.slt.s", "D,S,T", 0x4680000c, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13783f493883SYongbok Kim {"cmp.sult.s", "D,S,T", 0x4680000d, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13793f493883SYongbok Kim {"cmp.sle.s", "D,S,T", 0x4680000e, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13803f493883SYongbok Kim {"cmp.sule.s", "D,S,T", 0x4680000f, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13813f493883SYongbok Kim {"cmp.or.s", "D,S,T", 0x46800011, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13823f493883SYongbok Kim {"cmp.une.s", "D,S,T", 0x46800012, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13833f493883SYongbok Kim {"cmp.ne.s", "D,S,T", 0x46800013, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13843f493883SYongbok Kim {"cmp.sor.s", "D,S,T", 0x46800019, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13853f493883SYongbok Kim {"cmp.sune.s", "D,S,T", 0x4680001a, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13863f493883SYongbok Kim {"cmp.sne.s", "D,S,T", 0x4680001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_S, 0, I32R6},
13873f493883SYongbok Kim {"cmp.af.d", "D,S,T", 0x46a00000, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13883f493883SYongbok Kim {"cmp.un.d", "D,S,T", 0x46a00001, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13893f493883SYongbok Kim {"cmp.eq.d", "D,S,T", 0x46a00002, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13903f493883SYongbok Kim {"cmp.ueq.d", "D,S,T", 0x46a00003, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13913f493883SYongbok Kim {"cmp.lt.d", "D,S,T", 0x46a00004, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13923f493883SYongbok Kim {"cmp.ult.d", "D,S,T", 0x46a00005, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13933f493883SYongbok Kim {"cmp.le.d", "D,S,T", 0x46a00006, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13943f493883SYongbok Kim {"cmp.ule.d", "D,S,T", 0x46a00007, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13953f493883SYongbok Kim {"cmp.saf.d", "D,S,T", 0x46a00008, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13963f493883SYongbok Kim {"cmp.sun.d", "D,S,T", 0x46a00009, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13973f493883SYongbok Kim {"cmp.seq.d", "D,S,T", 0x46a0000a, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13983f493883SYongbok Kim {"cmp.sueq.d", "D,S,T", 0x46a0000b, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
13993f493883SYongbok Kim {"cmp.slt.d", "D,S,T", 0x46a0000c, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14003f493883SYongbok Kim {"cmp.sult.d", "D,S,T", 0x46a0000d, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14013f493883SYongbok Kim {"cmp.sle.d", "D,S,T", 0x46a0000e, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14023f493883SYongbok Kim {"cmp.sule.d", "D,S,T", 0x46a0000f, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14033f493883SYongbok Kim {"cmp.or.d", "D,S,T", 0x46a00011, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14043f493883SYongbok Kim {"cmp.une.d", "D,S,T", 0x46a00012, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14053f493883SYongbok Kim {"cmp.ne.d", "D,S,T", 0x46a00013, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14063f493883SYongbok Kim {"cmp.sor.d", "D,S,T", 0x46a00019, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14073f493883SYongbok Kim {"cmp.sune.d", "D,S,T", 0x46a0001a, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
14083f493883SYongbok Kim {"cmp.sne.d", "D,S,T", 0x46a0001b, 0xffe0003f, RD_S|RD_T|WR_D|FP_D, 0, I32R6},
140901bc435bSYongbok Kim {"dvp", "", 0x41600024, 0xffffffff, TRAP, 0, I32R6},
141001bc435bSYongbok Kim {"dvp", "t", 0x41600024, 0xffe0ffff, TRAP|WR_t, 0, I32R6},
141101bc435bSYongbok Kim {"evp", "", 0x41600004, 0xffffffff, TRAP, 0, I32R6},
141201bc435bSYongbok Kim {"evp", "t", 0x41600004, 0xffe0ffff, TRAP|WR_t, 0, I32R6},
141399029be1SYongbok Kim {"ginvi", "v", 0x7c00003d, 0xfc1ffcff, TRAP | INSN_TLB, 0, I32R6},
141499029be1SYongbok Kim {"ginvt", "v", 0x7c0000bd, 0xfc1ffcff, TRAP | INSN_TLB, 0, I32R6},
141599029be1SYongbok Kim {"crc32b", "t,v,t", 0x7c00000f, 0xfc00ff3f, WR_d | RD_s | RD_t, 0, I32R6},
141699029be1SYongbok Kim {"crc32h", "t,v,t", 0x7c00004f, 0xfc00ff3f, WR_d | RD_s | RD_t, 0, I32R6},
141799029be1SYongbok Kim {"crc32w", "t,v,t", 0x7c00008f, 0xfc00ff3f, WR_d | RD_s | RD_t, 0, I32R6},
141899029be1SYongbok Kim {"crc32d", "t,v,t", 0x7c0000cf, 0xfc00ff3f, WR_d | RD_s | RD_t, 0, I64R6},
141999029be1SYongbok Kim {"crc32cb", "t,v,t", 0x7c00010f, 0xfc00ff3f, WR_d | RD_s | RD_t, 0, I32R6},
142099029be1SYongbok Kim {"crc32ch", "t,v,t", 0x7c00014f, 0xfc00ff3f, WR_d | RD_s | RD_t, 0, I32R6},
142199029be1SYongbok Kim {"crc32cw", "t,v,t", 0x7c00018f, 0xfc00ff3f, WR_d | RD_s | RD_t, 0, I32R6},
142299029be1SYongbok Kim {"crc32cd", "t,v,t", 0x7c0001cf, 0xfc00ff3f, WR_d | RD_s | RD_t, 0, I64R6},
1423ed8a933fSYongbok Kim
1424ed8a933fSYongbok Kim /* MSA */
1425ed8a933fSYongbok Kim {"sll.b", "+d,+e,+f", 0x7800000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1426ed8a933fSYongbok Kim {"sll.h", "+d,+e,+f", 0x7820000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1427ed8a933fSYongbok Kim {"sll.w", "+d,+e,+f", 0x7840000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1428ed8a933fSYongbok Kim {"sll.d", "+d,+e,+f", 0x7860000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1429ed8a933fSYongbok Kim {"slli.b", "+d,+e,+7", 0x78700009, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1430ed8a933fSYongbok Kim {"slli.h", "+d,+e,+8", 0x78600009, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1431ed8a933fSYongbok Kim {"slli.w", "+d,+e,+9", 0x78400009, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1432ed8a933fSYongbok Kim {"slli.d", "+d,+e,'", 0x78000009, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1433ed8a933fSYongbok Kim {"sra.b", "+d,+e,+f", 0x7880000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1434ed8a933fSYongbok Kim {"sra.h", "+d,+e,+f", 0x78a0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1435ed8a933fSYongbok Kim {"sra.w", "+d,+e,+f", 0x78c0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1436ed8a933fSYongbok Kim {"sra.d", "+d,+e,+f", 0x78e0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1437ed8a933fSYongbok Kim {"srai.b", "+d,+e,+7", 0x78f00009, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1438ed8a933fSYongbok Kim {"srai.h", "+d,+e,+8", 0x78e00009, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1439ed8a933fSYongbok Kim {"srai.w", "+d,+e,+9", 0x78c00009, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1440ed8a933fSYongbok Kim {"srai.d", "+d,+e,'", 0x78800009, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1441ed8a933fSYongbok Kim {"srl.b", "+d,+e,+f", 0x7900000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1442ed8a933fSYongbok Kim {"srl.h", "+d,+e,+f", 0x7920000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1443ed8a933fSYongbok Kim {"srl.w", "+d,+e,+f", 0x7940000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1444ed8a933fSYongbok Kim {"srl.d", "+d,+e,+f", 0x7960000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1445ed8a933fSYongbok Kim {"srli.b", "+d,+e,+7", 0x79700009, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1446ed8a933fSYongbok Kim {"srli.h", "+d,+e,+8", 0x79600009, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1447ed8a933fSYongbok Kim {"srli.w", "+d,+e,+9", 0x79400009, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1448ed8a933fSYongbok Kim {"srli.d", "+d,+e,'", 0x79000009, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1449ed8a933fSYongbok Kim {"bclr.b", "+d,+e,+f", 0x7980000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1450ed8a933fSYongbok Kim {"bclr.h", "+d,+e,+f", 0x79a0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1451ed8a933fSYongbok Kim {"bclr.w", "+d,+e,+f", 0x79c0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1452ed8a933fSYongbok Kim {"bclr.d", "+d,+e,+f", 0x79e0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1453ed8a933fSYongbok Kim {"bclri.b", "+d,+e,+7", 0x79f00009, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1454ed8a933fSYongbok Kim {"bclri.h", "+d,+e,+8", 0x79e00009, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1455ed8a933fSYongbok Kim {"bclri.w", "+d,+e,+9", 0x79c00009, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1456ed8a933fSYongbok Kim {"bclri.d", "+d,+e,'", 0x79800009, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1457ed8a933fSYongbok Kim {"bset.b", "+d,+e,+f", 0x7a00000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1458ed8a933fSYongbok Kim {"bset.h", "+d,+e,+f", 0x7a20000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1459ed8a933fSYongbok Kim {"bset.w", "+d,+e,+f", 0x7a40000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1460ed8a933fSYongbok Kim {"bset.d", "+d,+e,+f", 0x7a60000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1461ed8a933fSYongbok Kim {"bseti.b", "+d,+e,+7", 0x7a700009, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1462ed8a933fSYongbok Kim {"bseti.h", "+d,+e,+8", 0x7a600009, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1463ed8a933fSYongbok Kim {"bseti.w", "+d,+e,+9", 0x7a400009, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1464ed8a933fSYongbok Kim {"bseti.d", "+d,+e,'", 0x7a000009, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1465ed8a933fSYongbok Kim {"bneg.b", "+d,+e,+f", 0x7a80000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1466ed8a933fSYongbok Kim {"bneg.h", "+d,+e,+f", 0x7aa0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1467ed8a933fSYongbok Kim {"bneg.w", "+d,+e,+f", 0x7ac0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1468ed8a933fSYongbok Kim {"bneg.d", "+d,+e,+f", 0x7ae0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1469ed8a933fSYongbok Kim {"bnegi.b", "+d,+e,+7", 0x7af00009, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1470ed8a933fSYongbok Kim {"bnegi.h", "+d,+e,+8", 0x7ae00009, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1471ed8a933fSYongbok Kim {"bnegi.w", "+d,+e,+9", 0x7ac00009, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1472ed8a933fSYongbok Kim {"bnegi.d", "+d,+e,'", 0x7a800009, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1473ed8a933fSYongbok Kim {"binsl.b", "+d,+e,+f", 0x7b00000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1474ed8a933fSYongbok Kim {"binsl.h", "+d,+e,+f", 0x7b20000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1475ed8a933fSYongbok Kim {"binsl.w", "+d,+e,+f", 0x7b40000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1476ed8a933fSYongbok Kim {"binsl.d", "+d,+e,+f", 0x7b60000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1477ed8a933fSYongbok Kim {"binsli.b", "+d,+e,+7", 0x7b700009, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1478ed8a933fSYongbok Kim {"binsli.h", "+d,+e,+8", 0x7b600009, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1479ed8a933fSYongbok Kim {"binsli.w", "+d,+e,+9", 0x7b400009, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1480ed8a933fSYongbok Kim {"binsli.d", "+d,+e,'", 0x7b000009, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1481ed8a933fSYongbok Kim {"binsr.b", "+d,+e,+f", 0x7b80000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1482ed8a933fSYongbok Kim {"binsr.h", "+d,+e,+f", 0x7ba0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1483ed8a933fSYongbok Kim {"binsr.w", "+d,+e,+f", 0x7bc0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1484ed8a933fSYongbok Kim {"binsr.d", "+d,+e,+f", 0x7be0000d, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1485ed8a933fSYongbok Kim {"binsri.b", "+d,+e,+7", 0x7bf00009, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1486ed8a933fSYongbok Kim {"binsri.h", "+d,+e,+8", 0x7be00009, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1487ed8a933fSYongbok Kim {"binsri.w", "+d,+e,+9", 0x7bc00009, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1488ed8a933fSYongbok Kim {"binsri.d", "+d,+e,'", 0x7b800009, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1489ed8a933fSYongbok Kim {"addv.b", "+d,+e,+f", 0x7800000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1490ed8a933fSYongbok Kim {"addv.h", "+d,+e,+f", 0x7820000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1491ed8a933fSYongbok Kim {"addv.w", "+d,+e,+f", 0x7840000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1492ed8a933fSYongbok Kim {"addv.d", "+d,+e,+f", 0x7860000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1493ed8a933fSYongbok Kim {"addvi.b", "+d,+e,k", 0x78000006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1494ed8a933fSYongbok Kim {"addvi.h", "+d,+e,k", 0x78200006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1495ed8a933fSYongbok Kim {"addvi.w", "+d,+e,k", 0x78400006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1496ed8a933fSYongbok Kim {"addvi.d", "+d,+e,k", 0x78600006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1497ed8a933fSYongbok Kim {"subv.b", "+d,+e,+f", 0x7880000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1498ed8a933fSYongbok Kim {"subv.h", "+d,+e,+f", 0x78a0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1499ed8a933fSYongbok Kim {"subv.w", "+d,+e,+f", 0x78c0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1500ed8a933fSYongbok Kim {"subv.d", "+d,+e,+f", 0x78e0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1501ed8a933fSYongbok Kim {"subvi.b", "+d,+e,k", 0x78800006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1502ed8a933fSYongbok Kim {"subvi.h", "+d,+e,k", 0x78a00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1503ed8a933fSYongbok Kim {"subvi.w", "+d,+e,k", 0x78c00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1504ed8a933fSYongbok Kim {"subvi.d", "+d,+e,k", 0x78e00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1505ed8a933fSYongbok Kim {"max_s.b", "+d,+e,+f", 0x7900000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1506ed8a933fSYongbok Kim {"max_s.h", "+d,+e,+f", 0x7920000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1507ed8a933fSYongbok Kim {"max_s.w", "+d,+e,+f", 0x7940000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1508ed8a933fSYongbok Kim {"max_s.d", "+d,+e,+f", 0x7960000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1509ed8a933fSYongbok Kim {"maxi_s.b", "+d,+e,+5", 0x79000006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1510ed8a933fSYongbok Kim {"maxi_s.h", "+d,+e,+5", 0x79200006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1511ed8a933fSYongbok Kim {"maxi_s.w", "+d,+e,+5", 0x79400006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1512ed8a933fSYongbok Kim {"maxi_s.d", "+d,+e,+5", 0x79600006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1513ed8a933fSYongbok Kim {"max_u.b", "+d,+e,+f", 0x7980000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1514ed8a933fSYongbok Kim {"max_u.h", "+d,+e,+f", 0x79a0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1515ed8a933fSYongbok Kim {"max_u.w", "+d,+e,+f", 0x79c0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1516ed8a933fSYongbok Kim {"max_u.d", "+d,+e,+f", 0x79e0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1517ed8a933fSYongbok Kim {"maxi_u.b", "+d,+e,k", 0x79800006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1518ed8a933fSYongbok Kim {"maxi_u.h", "+d,+e,k", 0x79a00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1519ed8a933fSYongbok Kim {"maxi_u.w", "+d,+e,k", 0x79c00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1520ed8a933fSYongbok Kim {"maxi_u.d", "+d,+e,k", 0x79e00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1521ed8a933fSYongbok Kim {"min_s.b", "+d,+e,+f", 0x7a00000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1522ed8a933fSYongbok Kim {"min_s.h", "+d,+e,+f", 0x7a20000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1523ed8a933fSYongbok Kim {"min_s.w", "+d,+e,+f", 0x7a40000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1524ed8a933fSYongbok Kim {"min_s.d", "+d,+e,+f", 0x7a60000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1525ed8a933fSYongbok Kim {"mini_s.b", "+d,+e,+5", 0x7a000006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1526ed8a933fSYongbok Kim {"mini_s.h", "+d,+e,+5", 0x7a200006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1527ed8a933fSYongbok Kim {"mini_s.w", "+d,+e,+5", 0x7a400006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1528ed8a933fSYongbok Kim {"mini_s.d", "+d,+e,+5", 0x7a600006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1529ed8a933fSYongbok Kim {"min_u.b", "+d,+e,+f", 0x7a80000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1530ed8a933fSYongbok Kim {"min_u.h", "+d,+e,+f", 0x7aa0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1531ed8a933fSYongbok Kim {"min_u.w", "+d,+e,+f", 0x7ac0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1532ed8a933fSYongbok Kim {"min_u.d", "+d,+e,+f", 0x7ae0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1533ed8a933fSYongbok Kim {"mini_u.b", "+d,+e,k", 0x7a800006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1534ed8a933fSYongbok Kim {"mini_u.h", "+d,+e,k", 0x7aa00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1535ed8a933fSYongbok Kim {"mini_u.w", "+d,+e,k", 0x7ac00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1536ed8a933fSYongbok Kim {"mini_u.d", "+d,+e,k", 0x7ae00006, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1537ed8a933fSYongbok Kim {"max_a.b", "+d,+e,+f", 0x7b00000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1538ed8a933fSYongbok Kim {"max_a.h", "+d,+e,+f", 0x7b20000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1539ed8a933fSYongbok Kim {"max_a.w", "+d,+e,+f", 0x7b40000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1540ed8a933fSYongbok Kim {"max_a.d", "+d,+e,+f", 0x7b60000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1541ed8a933fSYongbok Kim {"min_a.b", "+d,+e,+f", 0x7b80000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1542ed8a933fSYongbok Kim {"min_a.h", "+d,+e,+f", 0x7ba0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1543ed8a933fSYongbok Kim {"min_a.w", "+d,+e,+f", 0x7bc0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1544ed8a933fSYongbok Kim {"min_a.d", "+d,+e,+f", 0x7be0000e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1545ed8a933fSYongbok Kim {"ceq.b", "+d,+e,+f", 0x7800000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1546ed8a933fSYongbok Kim {"ceq.h", "+d,+e,+f", 0x7820000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1547ed8a933fSYongbok Kim {"ceq.w", "+d,+e,+f", 0x7840000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1548ed8a933fSYongbok Kim {"ceq.d", "+d,+e,+f", 0x7860000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1549ed8a933fSYongbok Kim {"ceqi.b", "+d,+e,+5", 0x78000007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1550ed8a933fSYongbok Kim {"ceqi.h", "+d,+e,+5", 0x78200007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1551ed8a933fSYongbok Kim {"ceqi.w", "+d,+e,+5", 0x78400007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1552ed8a933fSYongbok Kim {"ceqi.d", "+d,+e,+5", 0x78600007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1553ed8a933fSYongbok Kim {"clt_s.b", "+d,+e,+f", 0x7900000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1554ed8a933fSYongbok Kim {"clt_s.h", "+d,+e,+f", 0x7920000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1555ed8a933fSYongbok Kim {"clt_s.w", "+d,+e,+f", 0x7940000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1556ed8a933fSYongbok Kim {"clt_s.d", "+d,+e,+f", 0x7960000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1557ed8a933fSYongbok Kim {"clti_s.b", "+d,+e,+5", 0x79000007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1558ed8a933fSYongbok Kim {"clti_s.h", "+d,+e,+5", 0x79200007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1559ed8a933fSYongbok Kim {"clti_s.w", "+d,+e,+5", 0x79400007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1560ed8a933fSYongbok Kim {"clti_s.d", "+d,+e,+5", 0x79600007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1561ed8a933fSYongbok Kim {"clt_u.b", "+d,+e,+f", 0x7980000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1562ed8a933fSYongbok Kim {"clt_u.h", "+d,+e,+f", 0x79a0000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1563ed8a933fSYongbok Kim {"clt_u.w", "+d,+e,+f", 0x79c0000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1564ed8a933fSYongbok Kim {"clt_u.d", "+d,+e,+f", 0x79e0000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1565ed8a933fSYongbok Kim {"clti_u.b", "+d,+e,k", 0x79800007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1566ed8a933fSYongbok Kim {"clti_u.h", "+d,+e,k", 0x79a00007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1567ed8a933fSYongbok Kim {"clti_u.w", "+d,+e,k", 0x79c00007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1568ed8a933fSYongbok Kim {"clti_u.d", "+d,+e,k", 0x79e00007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1569ed8a933fSYongbok Kim {"cle_s.b", "+d,+e,+f", 0x7a00000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1570ed8a933fSYongbok Kim {"cle_s.h", "+d,+e,+f", 0x7a20000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1571ed8a933fSYongbok Kim {"cle_s.w", "+d,+e,+f", 0x7a40000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1572ed8a933fSYongbok Kim {"cle_s.d", "+d,+e,+f", 0x7a60000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1573ed8a933fSYongbok Kim {"clei_s.b", "+d,+e,+5", 0x7a000007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1574ed8a933fSYongbok Kim {"clei_s.h", "+d,+e,+5", 0x7a200007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1575ed8a933fSYongbok Kim {"clei_s.w", "+d,+e,+5", 0x7a400007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1576ed8a933fSYongbok Kim {"clei_s.d", "+d,+e,+5", 0x7a600007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1577ed8a933fSYongbok Kim {"cle_u.b", "+d,+e,+f", 0x7a80000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1578ed8a933fSYongbok Kim {"cle_u.h", "+d,+e,+f", 0x7aa0000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1579ed8a933fSYongbok Kim {"cle_u.w", "+d,+e,+f", 0x7ac0000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1580ed8a933fSYongbok Kim {"cle_u.d", "+d,+e,+f", 0x7ae0000f, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1581ed8a933fSYongbok Kim {"clei_u.b", "+d,+e,k", 0x7a800007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1582ed8a933fSYongbok Kim {"clei_u.h", "+d,+e,k", 0x7aa00007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1583ed8a933fSYongbok Kim {"clei_u.w", "+d,+e,k", 0x7ac00007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1584ed8a933fSYongbok Kim {"clei_u.d", "+d,+e,k", 0x7ae00007, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1585ed8a933fSYongbok Kim {"ld.b", "+d,+^(d)", 0x78000020, 0xfc00003f, WR_VD|LDD, RD_d, MSA},
1586ed8a933fSYongbok Kim {"ld.h", "+d,+#(d)", 0x78000021, 0xfc00003f, WR_VD|LDD, RD_d, MSA},
1587ed8a933fSYongbok Kim {"ld.w", "+d,+$(d)", 0x78000022, 0xfc00003f, WR_VD|LDD, RD_d, MSA},
1588ed8a933fSYongbok Kim {"ld.d", "+d,+%(d)", 0x78000023, 0xfc00003f, WR_VD|LDD, RD_d, MSA},
1589ed8a933fSYongbok Kim {"st.b", "+d,+^(d)", 0x78000024, 0xfc00003f, RD_VD|SM, RD_d, MSA},
1590ed8a933fSYongbok Kim {"st.h", "+d,+#(d)", 0x78000025, 0xfc00003f, RD_VD|SM, RD_d, MSA},
1591ed8a933fSYongbok Kim {"st.w", "+d,+$(d)", 0x78000026, 0xfc00003f, RD_VD|SM, RD_d, MSA},
1592ed8a933fSYongbok Kim {"st.d", "+d,+%(d)", 0x78000027, 0xfc00003f, RD_VD|SM, RD_d, MSA},
1593ed8a933fSYongbok Kim {"sat_s.b", "+d,+e,+7", 0x7870000a, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1594ed8a933fSYongbok Kim {"sat_s.h", "+d,+e,+8", 0x7860000a, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1595ed8a933fSYongbok Kim {"sat_s.w", "+d,+e,+9", 0x7840000a, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1596ed8a933fSYongbok Kim {"sat_s.d", "+d,+e,'", 0x7800000a, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1597ed8a933fSYongbok Kim {"sat_u.b", "+d,+e,+7", 0x78f0000a, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1598ed8a933fSYongbok Kim {"sat_u.h", "+d,+e,+8", 0x78e0000a, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1599ed8a933fSYongbok Kim {"sat_u.w", "+d,+e,+9", 0x78c0000a, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1600ed8a933fSYongbok Kim {"sat_u.d", "+d,+e,'", 0x7880000a, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1601ed8a933fSYongbok Kim {"add_a.b", "+d,+e,+f", 0x78000010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1602ed8a933fSYongbok Kim {"add_a.h", "+d,+e,+f", 0x78200010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1603ed8a933fSYongbok Kim {"add_a.w", "+d,+e,+f", 0x78400010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1604ed8a933fSYongbok Kim {"add_a.d", "+d,+e,+f", 0x78600010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1605ed8a933fSYongbok Kim {"adds_a.b", "+d,+e,+f", 0x78800010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1606ed8a933fSYongbok Kim {"adds_a.h", "+d,+e,+f", 0x78a00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1607ed8a933fSYongbok Kim {"adds_a.w", "+d,+e,+f", 0x78c00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1608ed8a933fSYongbok Kim {"adds_a.d", "+d,+e,+f", 0x78e00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1609ed8a933fSYongbok Kim {"adds_s.b", "+d,+e,+f", 0x79000010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1610ed8a933fSYongbok Kim {"adds_s.h", "+d,+e,+f", 0x79200010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1611ed8a933fSYongbok Kim {"adds_s.w", "+d,+e,+f", 0x79400010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1612ed8a933fSYongbok Kim {"adds_s.d", "+d,+e,+f", 0x79600010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1613ed8a933fSYongbok Kim {"adds_u.b", "+d,+e,+f", 0x79800010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1614ed8a933fSYongbok Kim {"adds_u.h", "+d,+e,+f", 0x79a00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1615ed8a933fSYongbok Kim {"adds_u.w", "+d,+e,+f", 0x79c00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1616ed8a933fSYongbok Kim {"adds_u.d", "+d,+e,+f", 0x79e00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1617ed8a933fSYongbok Kim {"ave_s.b", "+d,+e,+f", 0x7a000010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1618ed8a933fSYongbok Kim {"ave_s.h", "+d,+e,+f", 0x7a200010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1619ed8a933fSYongbok Kim {"ave_s.w", "+d,+e,+f", 0x7a400010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1620ed8a933fSYongbok Kim {"ave_s.d", "+d,+e,+f", 0x7a600010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1621ed8a933fSYongbok Kim {"ave_u.b", "+d,+e,+f", 0x7a800010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1622ed8a933fSYongbok Kim {"ave_u.h", "+d,+e,+f", 0x7aa00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1623ed8a933fSYongbok Kim {"ave_u.w", "+d,+e,+f", 0x7ac00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1624ed8a933fSYongbok Kim {"ave_u.d", "+d,+e,+f", 0x7ae00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1625ed8a933fSYongbok Kim {"aver_s.b", "+d,+e,+f", 0x7b000010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1626ed8a933fSYongbok Kim {"aver_s.h", "+d,+e,+f", 0x7b200010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1627ed8a933fSYongbok Kim {"aver_s.w", "+d,+e,+f", 0x7b400010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1628ed8a933fSYongbok Kim {"aver_s.d", "+d,+e,+f", 0x7b600010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1629ed8a933fSYongbok Kim {"aver_u.b", "+d,+e,+f", 0x7b800010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1630ed8a933fSYongbok Kim {"aver_u.h", "+d,+e,+f", 0x7ba00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1631ed8a933fSYongbok Kim {"aver_u.w", "+d,+e,+f", 0x7bc00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1632ed8a933fSYongbok Kim {"aver_u.d", "+d,+e,+f", 0x7be00010, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1633ed8a933fSYongbok Kim {"subs_s.b", "+d,+e,+f", 0x78000011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1634ed8a933fSYongbok Kim {"subs_s.h", "+d,+e,+f", 0x78200011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1635ed8a933fSYongbok Kim {"subs_s.w", "+d,+e,+f", 0x78400011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1636ed8a933fSYongbok Kim {"subs_s.d", "+d,+e,+f", 0x78600011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1637ed8a933fSYongbok Kim {"subs_u.b", "+d,+e,+f", 0x78800011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1638ed8a933fSYongbok Kim {"subs_u.h", "+d,+e,+f", 0x78a00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1639ed8a933fSYongbok Kim {"subs_u.w", "+d,+e,+f", 0x78c00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1640ed8a933fSYongbok Kim {"subs_u.d", "+d,+e,+f", 0x78e00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1641ed8a933fSYongbok Kim {"subsus_u.b", "+d,+e,+f", 0x79000011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1642ed8a933fSYongbok Kim {"subsus_u.h", "+d,+e,+f", 0x79200011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1643ed8a933fSYongbok Kim {"subsus_u.w", "+d,+e,+f", 0x79400011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1644ed8a933fSYongbok Kim {"subsus_u.d", "+d,+e,+f", 0x79600011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1645ed8a933fSYongbok Kim {"subsuu_s.b", "+d,+e,+f", 0x79800011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1646ed8a933fSYongbok Kim {"subsuu_s.h", "+d,+e,+f", 0x79a00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1647ed8a933fSYongbok Kim {"subsuu_s.w", "+d,+e,+f", 0x79c00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1648ed8a933fSYongbok Kim {"subsuu_s.d", "+d,+e,+f", 0x79e00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1649ed8a933fSYongbok Kim {"asub_s.b", "+d,+e,+f", 0x7a000011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1650ed8a933fSYongbok Kim {"asub_s.h", "+d,+e,+f", 0x7a200011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1651ed8a933fSYongbok Kim {"asub_s.w", "+d,+e,+f", 0x7a400011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1652ed8a933fSYongbok Kim {"asub_s.d", "+d,+e,+f", 0x7a600011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1653ed8a933fSYongbok Kim {"asub_u.b", "+d,+e,+f", 0x7a800011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1654ed8a933fSYongbok Kim {"asub_u.h", "+d,+e,+f", 0x7aa00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1655ed8a933fSYongbok Kim {"asub_u.w", "+d,+e,+f", 0x7ac00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1656ed8a933fSYongbok Kim {"asub_u.d", "+d,+e,+f", 0x7ae00011, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1657ed8a933fSYongbok Kim {"mulv.b", "+d,+e,+f", 0x78000012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1658ed8a933fSYongbok Kim {"mulv.h", "+d,+e,+f", 0x78200012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1659ed8a933fSYongbok Kim {"mulv.w", "+d,+e,+f", 0x78400012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1660ed8a933fSYongbok Kim {"mulv.d", "+d,+e,+f", 0x78600012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1661ed8a933fSYongbok Kim {"maddv.b", "+d,+e,+f", 0x78800012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1662ed8a933fSYongbok Kim {"maddv.h", "+d,+e,+f", 0x78a00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1663ed8a933fSYongbok Kim {"maddv.w", "+d,+e,+f", 0x78c00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1664ed8a933fSYongbok Kim {"maddv.d", "+d,+e,+f", 0x78e00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1665ed8a933fSYongbok Kim {"msubv.b", "+d,+e,+f", 0x79000012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1666ed8a933fSYongbok Kim {"msubv.h", "+d,+e,+f", 0x79200012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1667ed8a933fSYongbok Kim {"msubv.w", "+d,+e,+f", 0x79400012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1668ed8a933fSYongbok Kim {"msubv.d", "+d,+e,+f", 0x79600012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1669ed8a933fSYongbok Kim {"div_s.b", "+d,+e,+f", 0x7a000012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1670ed8a933fSYongbok Kim {"div_s.h", "+d,+e,+f", 0x7a200012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1671ed8a933fSYongbok Kim {"div_s.w", "+d,+e,+f", 0x7a400012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1672ed8a933fSYongbok Kim {"div_s.d", "+d,+e,+f", 0x7a600012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1673ed8a933fSYongbok Kim {"div_u.b", "+d,+e,+f", 0x7a800012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1674ed8a933fSYongbok Kim {"div_u.h", "+d,+e,+f", 0x7aa00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1675ed8a933fSYongbok Kim {"div_u.w", "+d,+e,+f", 0x7ac00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1676ed8a933fSYongbok Kim {"div_u.d", "+d,+e,+f", 0x7ae00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1677ed8a933fSYongbok Kim {"mod_s.b", "+d,+e,+f", 0x7b000012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1678ed8a933fSYongbok Kim {"mod_s.h", "+d,+e,+f", 0x7b200012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1679ed8a933fSYongbok Kim {"mod_s.w", "+d,+e,+f", 0x7b400012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1680ed8a933fSYongbok Kim {"mod_s.d", "+d,+e,+f", 0x7b600012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1681ed8a933fSYongbok Kim {"mod_u.b", "+d,+e,+f", 0x7b800012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1682ed8a933fSYongbok Kim {"mod_u.h", "+d,+e,+f", 0x7ba00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1683ed8a933fSYongbok Kim {"mod_u.w", "+d,+e,+f", 0x7bc00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1684ed8a933fSYongbok Kim {"mod_u.d", "+d,+e,+f", 0x7be00012, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1685ed8a933fSYongbok Kim {"dotp_s.h", "+d,+e,+f", 0x78200013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1686ed8a933fSYongbok Kim {"dotp_s.w", "+d,+e,+f", 0x78400013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1687ed8a933fSYongbok Kim {"dotp_s.d", "+d,+e,+f", 0x78600013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1688ed8a933fSYongbok Kim {"dotp_u.h", "+d,+e,+f", 0x78a00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1689ed8a933fSYongbok Kim {"dotp_u.w", "+d,+e,+f", 0x78c00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1690ed8a933fSYongbok Kim {"dotp_u.d", "+d,+e,+f", 0x78e00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1691ed8a933fSYongbok Kim {"dpadd_s.h", "+d,+e,+f", 0x79200013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1692ed8a933fSYongbok Kim {"dpadd_s.w", "+d,+e,+f", 0x79400013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1693ed8a933fSYongbok Kim {"dpadd_s.d", "+d,+e,+f", 0x79600013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1694ed8a933fSYongbok Kim {"dpadd_u.h", "+d,+e,+f", 0x79a00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1695ed8a933fSYongbok Kim {"dpadd_u.w", "+d,+e,+f", 0x79c00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1696ed8a933fSYongbok Kim {"dpadd_u.d", "+d,+e,+f", 0x79e00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1697ed8a933fSYongbok Kim {"dpsub_s.h", "+d,+e,+f", 0x7a200013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1698ed8a933fSYongbok Kim {"dpsub_s.w", "+d,+e,+f", 0x7a400013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1699ed8a933fSYongbok Kim {"dpsub_s.d", "+d,+e,+f", 0x7a600013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1700ed8a933fSYongbok Kim {"dpsub_u.h", "+d,+e,+f", 0x7aa00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1701ed8a933fSYongbok Kim {"dpsub_u.w", "+d,+e,+f", 0x7ac00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1702ed8a933fSYongbok Kim {"dpsub_u.d", "+d,+e,+f", 0x7ae00013, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1703ed8a933fSYongbok Kim {"sld.b", "+d,+e[t]", 0x78000014, 0xffe0003f, WR_VD|RD_VS|RD_t, 0, MSA},
1704ed8a933fSYongbok Kim {"sld.h", "+d,+e[t]", 0x78200014, 0xffe0003f, WR_VD|RD_VS|RD_t, 0, MSA},
1705ed8a933fSYongbok Kim {"sld.w", "+d,+e[t]", 0x78400014, 0xffe0003f, WR_VD|RD_VS|RD_t, 0, MSA},
1706ed8a933fSYongbok Kim {"sld.d", "+d,+e[t]", 0x78600014, 0xffe0003f, WR_VD|RD_VS|RD_t, 0, MSA},
1707ed8a933fSYongbok Kim {"sldi.b", "+d,+e[+9]", 0x78000019, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1708ed8a933fSYongbok Kim {"sldi.h", "+d,+e[+8]", 0x78200019, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1709ed8a933fSYongbok Kim {"sldi.w", "+d,+e[+7]", 0x78300019, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1710ed8a933fSYongbok Kim {"sldi.d", "+d,+e[+6]", 0x78380019, 0xfffc003f, WR_VD|RD_VS, 0, MSA},
1711ed8a933fSYongbok Kim {"splat.b", "+d,+e[t]", 0x78800014, 0xffe0003f, WR_VD|RD_VS|RD_t, 0, MSA},
1712ed8a933fSYongbok Kim {"splat.h", "+d,+e[t]", 0x78a00014, 0xffe0003f, WR_VD|RD_VS|RD_t, 0, MSA},
1713ed8a933fSYongbok Kim {"splat.w", "+d,+e[t]", 0x78c00014, 0xffe0003f, WR_VD|RD_VS|RD_t, 0, MSA},
1714ed8a933fSYongbok Kim {"splat.d", "+d,+e[t]", 0x78e00014, 0xffe0003f, WR_VD|RD_VS|RD_t, 0, MSA},
1715ed8a933fSYongbok Kim {"splati.b", "+d,+e[+9]", 0x78400019, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1716ed8a933fSYongbok Kim {"splati.h", "+d,+e[+8]", 0x78600019, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1717ed8a933fSYongbok Kim {"splati.w", "+d,+e[+7]", 0x78700019, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1718ed8a933fSYongbok Kim {"splati.d", "+d,+e[+6]", 0x78780019, 0xfffc003f, WR_VD|RD_VS, 0, MSA},
1719ed8a933fSYongbok Kim {"pckev.b", "+d,+e,+f", 0x79000014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1720ed8a933fSYongbok Kim {"pckev.h", "+d,+e,+f", 0x79200014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1721ed8a933fSYongbok Kim {"pckev.w", "+d,+e,+f", 0x79400014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1722ed8a933fSYongbok Kim {"pckev.d", "+d,+e,+f", 0x79600014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1723ed8a933fSYongbok Kim {"pckod.b", "+d,+e,+f", 0x79800014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1724ed8a933fSYongbok Kim {"pckod.h", "+d,+e,+f", 0x79a00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1725ed8a933fSYongbok Kim {"pckod.w", "+d,+e,+f", 0x79c00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1726ed8a933fSYongbok Kim {"pckod.d", "+d,+e,+f", 0x79e00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1727ed8a933fSYongbok Kim {"ilvl.b", "+d,+e,+f", 0x7a000014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1728ed8a933fSYongbok Kim {"ilvl.h", "+d,+e,+f", 0x7a200014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1729ed8a933fSYongbok Kim {"ilvl.w", "+d,+e,+f", 0x7a400014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1730ed8a933fSYongbok Kim {"ilvl.d", "+d,+e,+f", 0x7a600014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1731ed8a933fSYongbok Kim {"ilvr.b", "+d,+e,+f", 0x7a800014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1732ed8a933fSYongbok Kim {"ilvr.h", "+d,+e,+f", 0x7aa00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1733ed8a933fSYongbok Kim {"ilvr.w", "+d,+e,+f", 0x7ac00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1734ed8a933fSYongbok Kim {"ilvr.d", "+d,+e,+f", 0x7ae00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1735ed8a933fSYongbok Kim {"ilvev.b", "+d,+e,+f", 0x7b000014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1736ed8a933fSYongbok Kim {"ilvev.h", "+d,+e,+f", 0x7b200014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1737ed8a933fSYongbok Kim {"ilvev.w", "+d,+e,+f", 0x7b400014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1738ed8a933fSYongbok Kim {"ilvev.d", "+d,+e,+f", 0x7b600014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1739ed8a933fSYongbok Kim {"ilvod.b", "+d,+e,+f", 0x7b800014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1740ed8a933fSYongbok Kim {"ilvod.h", "+d,+e,+f", 0x7ba00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1741ed8a933fSYongbok Kim {"ilvod.w", "+d,+e,+f", 0x7bc00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1742ed8a933fSYongbok Kim {"ilvod.d", "+d,+e,+f", 0x7be00014, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1743ed8a933fSYongbok Kim {"vshf.b", "+d,+e,+f", 0x78000015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1744ed8a933fSYongbok Kim {"vshf.h", "+d,+e,+f", 0x78200015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1745ed8a933fSYongbok Kim {"vshf.w", "+d,+e,+f", 0x78400015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1746ed8a933fSYongbok Kim {"vshf.d", "+d,+e,+f", 0x78600015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1747ed8a933fSYongbok Kim {"srar.b", "+d,+e,+f", 0x78800015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1748ed8a933fSYongbok Kim {"srar.h", "+d,+e,+f", 0x78a00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1749ed8a933fSYongbok Kim {"srar.w", "+d,+e,+f", 0x78c00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1750ed8a933fSYongbok Kim {"srar.d", "+d,+e,+f", 0x78e00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1751ed8a933fSYongbok Kim {"srari.b", "+d,+e,+7", 0x7970000a, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1752ed8a933fSYongbok Kim {"srari.h", "+d,+e,+8", 0x7960000a, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1753ed8a933fSYongbok Kim {"srari.w", "+d,+e,+9", 0x7940000a, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1754ed8a933fSYongbok Kim {"srari.d", "+d,+e,'", 0x7900000a, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1755ed8a933fSYongbok Kim {"srlr.b", "+d,+e,+f", 0x79000015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1756ed8a933fSYongbok Kim {"srlr.h", "+d,+e,+f", 0x79200015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1757ed8a933fSYongbok Kim {"srlr.w", "+d,+e,+f", 0x79400015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1758ed8a933fSYongbok Kim {"srlr.d", "+d,+e,+f", 0x79600015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1759ed8a933fSYongbok Kim {"srlri.b", "+d,+e,+7", 0x79f0000a, 0xfff8003f, WR_VD|RD_VS, 0, MSA},
1760ed8a933fSYongbok Kim {"srlri.h", "+d,+e,+8", 0x79e0000a, 0xfff0003f, WR_VD|RD_VS, 0, MSA},
1761ed8a933fSYongbok Kim {"srlri.w", "+d,+e,+9", 0x79c0000a, 0xffe0003f, WR_VD|RD_VS, 0, MSA},
1762ed8a933fSYongbok Kim {"srlri.d", "+d,+e,'", 0x7980000a, 0xffc0003f, WR_VD|RD_VS, 0, MSA},
1763ed8a933fSYongbok Kim {"hadd_s.h", "+d,+e,+f", 0x7a200015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1764ed8a933fSYongbok Kim {"hadd_s.w", "+d,+e,+f", 0x7a400015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1765ed8a933fSYongbok Kim {"hadd_s.d", "+d,+e,+f", 0x7a600015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1766ed8a933fSYongbok Kim {"hadd_u.h", "+d,+e,+f", 0x7aa00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1767ed8a933fSYongbok Kim {"hadd_u.w", "+d,+e,+f", 0x7ac00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1768ed8a933fSYongbok Kim {"hadd_u.d", "+d,+e,+f", 0x7ae00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1769ed8a933fSYongbok Kim {"hsub_s.h", "+d,+e,+f", 0x7b200015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1770ed8a933fSYongbok Kim {"hsub_s.w", "+d,+e,+f", 0x7b400015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1771ed8a933fSYongbok Kim {"hsub_s.d", "+d,+e,+f", 0x7b600015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1772ed8a933fSYongbok Kim {"hsub_u.h", "+d,+e,+f", 0x7ba00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1773ed8a933fSYongbok Kim {"hsub_u.w", "+d,+e,+f", 0x7bc00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1774ed8a933fSYongbok Kim {"hsub_u.d", "+d,+e,+f", 0x7be00015, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1775ed8a933fSYongbok Kim {"and.v", "+d,+e,+f", 0x7800001e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1776ed8a933fSYongbok Kim {"andi.b", "+d,+e,5", 0x78000000, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1777ed8a933fSYongbok Kim {"or.v", "+d,+e,+f", 0x7820001e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1778ed8a933fSYongbok Kim {"ori.b", "+d,+e,5", 0x79000000, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1779ed8a933fSYongbok Kim {"nor.v", "+d,+e,+f", 0x7840001e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1780ed8a933fSYongbok Kim {"nori.b", "+d,+e,5", 0x7a000000, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1781ed8a933fSYongbok Kim {"xor.v", "+d,+e,+f", 0x7860001e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1782ed8a933fSYongbok Kim {"xori.b", "+d,+e,5", 0x7b000000, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1783ed8a933fSYongbok Kim {"bmnz.v", "+d,+e,+f", 0x7880001e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1784ed8a933fSYongbok Kim {"bmnzi.b", "+d,+e,5", 0x78000001, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1785ed8a933fSYongbok Kim {"bmz.v", "+d,+e,+f", 0x78a0001e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1786ed8a933fSYongbok Kim {"bmzi.b", "+d,+e,5", 0x79000001, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1787ed8a933fSYongbok Kim {"bsel.v", "+d,+e,+f", 0x78c0001e, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1788ed8a933fSYongbok Kim {"bseli.b", "+d,+e,5", 0x7a000001, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1789ed8a933fSYongbok Kim {"shf.b", "+d,+e,5", 0x78000002, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1790ed8a933fSYongbok Kim {"shf.h", "+d,+e,5", 0x79000002, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1791ed8a933fSYongbok Kim {"shf.w", "+d,+e,5", 0x7a000002, 0xff00003f, WR_VD|RD_VS, 0, MSA},
1792ed8a933fSYongbok Kim {"bnz.v", "+f,p", 0x45e00000, 0xffe00000, CBD|RD_VT, 0, MSA},
1793ed8a933fSYongbok Kim {"bz.v", "+f,p", 0x45600000, 0xffe00000, CBD|RD_VT, 0, MSA},
1794ed8a933fSYongbok Kim {"fill.b", "+d,d", 0x7b00001e, 0xffff003f, WR_VD, RD_d, MSA},
1795ed8a933fSYongbok Kim {"fill.h", "+d,d", 0x7b01001e, 0xffff003f, WR_VD, RD_d, MSA},
1796ed8a933fSYongbok Kim {"fill.w", "+d,d", 0x7b02001e, 0xffff003f, WR_VD, RD_d, MSA},
1797ed8a933fSYongbok Kim {"fill.d", "+d,d", 0x7b03001e, 0xffff003f, WR_VD, RD_d, MSA64},
1798ed8a933fSYongbok Kim {"pcnt.b", "+d,+e", 0x7b04001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1799ed8a933fSYongbok Kim {"pcnt.h", "+d,+e", 0x7b05001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1800ed8a933fSYongbok Kim {"pcnt.w", "+d,+e", 0x7b06001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1801ed8a933fSYongbok Kim {"pcnt.d", "+d,+e", 0x7b07001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1802ed8a933fSYongbok Kim {"nloc.b", "+d,+e", 0x7b08001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1803ed8a933fSYongbok Kim {"nloc.h", "+d,+e", 0x7b09001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1804ed8a933fSYongbok Kim {"nloc.w", "+d,+e", 0x7b0a001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1805ed8a933fSYongbok Kim {"nloc.d", "+d,+e", 0x7b0b001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1806ed8a933fSYongbok Kim {"nlzc.b", "+d,+e", 0x7b0c001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1807ed8a933fSYongbok Kim {"nlzc.h", "+d,+e", 0x7b0d001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1808ed8a933fSYongbok Kim {"nlzc.w", "+d,+e", 0x7b0e001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1809ed8a933fSYongbok Kim {"nlzc.d", "+d,+e", 0x7b0f001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1810ed8a933fSYongbok Kim {"copy_s.b", "+i,+e[+9]", 0x78800019, 0xffe0003f, RD_VS, RD_rd6, MSA},
1811ed8a933fSYongbok Kim {"copy_s.h", "+i,+e[+8]", 0x78a00019, 0xfff0003f, RD_VS, RD_rd6, MSA},
1812ed8a933fSYongbok Kim {"copy_s.w", "+i,+e[+7]", 0x78b00019, 0xfff8003f, RD_VS, RD_rd6, MSA},
1813ed8a933fSYongbok Kim {"copy_s.d", "+i,+e[+6]", 0x78b80019, 0xfffc003f, RD_VS, RD_rd6, MSA64},
1814ed8a933fSYongbok Kim {"copy_u.b", "+i,+e[+9]", 0x78c00019, 0xffe0003f, RD_VS, RD_rd6, MSA},
1815ed8a933fSYongbok Kim {"copy_u.h", "+i,+e[+8]", 0x78e00019, 0xfff0003f, RD_VS, RD_rd6, MSA},
1816ed8a933fSYongbok Kim {"copy_u.w", "+i,+e[+7]", 0x78f00019, 0xfff8003f, RD_VS, RD_rd6, MSA},
1817ed8a933fSYongbok Kim {"copy_u.d", "+i,+e[+6]", 0x78f80019, 0xfffc003f, RD_VS, RD_rd6, MSA64},
1818ed8a933fSYongbok Kim {"insert.b", "+d[+9],d", 0x79000019, 0xffe0003f, WR_VD|RD_VD, RD_d, MSA},
1819ed8a933fSYongbok Kim {"insert.h", "+d[+8],d", 0x79200019, 0xfff0003f, WR_VD|RD_VD, RD_d, MSA},
1820ed8a933fSYongbok Kim {"insert.w", "+d[+7],d", 0x79300019, 0xfff8003f, WR_VD|RD_VD, RD_d, MSA},
1821ed8a933fSYongbok Kim {"insert.d", "+d[+6],d", 0x79380019, 0xfffc003f, WR_VD|RD_VD, RD_d, MSA64},
1822ed8a933fSYongbok Kim {"insve.b", "+d[+9],+e[+~]", 0x79400019, 0xffe0003f, WR_VD|RD_VD|RD_VS, 0, MSA},
1823ed8a933fSYongbok Kim {"insve.h", "+d[+8],+e[+~]", 0x79600019, 0xfff0003f, WR_VD|RD_VD|RD_VS, 0, MSA},
1824ed8a933fSYongbok Kim {"insve.w", "+d[+7],+e[+~]", 0x79700019, 0xfff8003f, WR_VD|RD_VD|RD_VS, 0, MSA},
1825ed8a933fSYongbok Kim {"insve.d", "+d[+6],+e[+~]", 0x79780019, 0xfffc003f, WR_VD|RD_VD|RD_VS, 0, MSA},
1826ed8a933fSYongbok Kim {"bnz.b", "+f,p", 0x47800000, 0xffe00000, CBD|RD_VT, 0, MSA},
1827ed8a933fSYongbok Kim {"bnz.h", "+f,p", 0x47a00000, 0xffe00000, CBD|RD_VT, 0, MSA},
1828ed8a933fSYongbok Kim {"bnz.w", "+f,p", 0x47c00000, 0xffe00000, CBD|RD_VT, 0, MSA},
1829ed8a933fSYongbok Kim {"bnz.d", "+f,p", 0x47e00000, 0xffe00000, CBD|RD_VT, 0, MSA},
1830ed8a933fSYongbok Kim {"bz.b", "+f,p", 0x47000000, 0xffe00000, CBD|RD_VT, 0, MSA},
1831ed8a933fSYongbok Kim {"bz.h", "+f,p", 0x47200000, 0xffe00000, CBD|RD_VT, 0, MSA},
1832ed8a933fSYongbok Kim {"bz.w", "+f,p", 0x47400000, 0xffe00000, CBD|RD_VT, 0, MSA},
1833ed8a933fSYongbok Kim {"bz.d", "+f,p", 0x47600000, 0xffe00000, CBD|RD_VT, 0, MSA},
1834ed8a933fSYongbok Kim {"ldi.b", "+d,+0", 0x7b000007, 0xffe0003f, WR_VD, 0, MSA},
1835ed8a933fSYongbok Kim {"ldi.h", "+d,+0", 0x7b200007, 0xffe0003f, WR_VD, 0, MSA},
1836ed8a933fSYongbok Kim {"ldi.w", "+d,+0", 0x7b400007, 0xffe0003f, WR_VD, 0, MSA},
1837ed8a933fSYongbok Kim {"ldi.d", "+d,+0", 0x7b600007, 0xffe0003f, WR_VD, 0, MSA},
1838ed8a933fSYongbok Kim {"fcaf.w", "+d,+e,+f", 0x7800001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1839ed8a933fSYongbok Kim {"fcaf.d", "+d,+e,+f", 0x7820001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1840ed8a933fSYongbok Kim {"fcun.w", "+d,+e,+f", 0x7840001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1841ed8a933fSYongbok Kim {"fcun.d", "+d,+e,+f", 0x7860001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1842ed8a933fSYongbok Kim {"fceq.w", "+d,+e,+f", 0x7880001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1843ed8a933fSYongbok Kim {"fceq.d", "+d,+e,+f", 0x78a0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1844ed8a933fSYongbok Kim {"fcueq.w", "+d,+e,+f", 0x78c0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1845ed8a933fSYongbok Kim {"fcueq.d", "+d,+e,+f", 0x78e0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1846ed8a933fSYongbok Kim {"fclt.w", "+d,+e,+f", 0x7900001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1847ed8a933fSYongbok Kim {"fclt.d", "+d,+e,+f", 0x7920001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1848ed8a933fSYongbok Kim {"fcult.w", "+d,+e,+f", 0x7940001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1849ed8a933fSYongbok Kim {"fcult.d", "+d,+e,+f", 0x7960001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1850ed8a933fSYongbok Kim {"fcle.w", "+d,+e,+f", 0x7980001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1851ed8a933fSYongbok Kim {"fcle.d", "+d,+e,+f", 0x79a0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1852ed8a933fSYongbok Kim {"fcule.w", "+d,+e,+f", 0x79c0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1853ed8a933fSYongbok Kim {"fcule.d", "+d,+e,+f", 0x79e0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1854ed8a933fSYongbok Kim {"fsaf.w", "+d,+e,+f", 0x7a00001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1855ed8a933fSYongbok Kim {"fsaf.d", "+d,+e,+f", 0x7a20001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1856ed8a933fSYongbok Kim {"fsun.w", "+d,+e,+f", 0x7a40001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1857ed8a933fSYongbok Kim {"fsun.d", "+d,+e,+f", 0x7a60001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1858ed8a933fSYongbok Kim {"fseq.w", "+d,+e,+f", 0x7a80001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1859ed8a933fSYongbok Kim {"fseq.d", "+d,+e,+f", 0x7aa0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1860ed8a933fSYongbok Kim {"fsueq.w", "+d,+e,+f", 0x7ac0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1861ed8a933fSYongbok Kim {"fsueq.d", "+d,+e,+f", 0x7ae0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1862ed8a933fSYongbok Kim {"fslt.w", "+d,+e,+f", 0x7b00001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1863ed8a933fSYongbok Kim {"fslt.d", "+d,+e,+f", 0x7b20001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1864ed8a933fSYongbok Kim {"fsult.w", "+d,+e,+f", 0x7b40001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1865ed8a933fSYongbok Kim {"fsult.d", "+d,+e,+f", 0x7b60001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1866ed8a933fSYongbok Kim {"fsle.w", "+d,+e,+f", 0x7b80001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1867ed8a933fSYongbok Kim {"fsle.d", "+d,+e,+f", 0x7ba0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1868ed8a933fSYongbok Kim {"fsule.w", "+d,+e,+f", 0x7bc0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1869ed8a933fSYongbok Kim {"fsule.d", "+d,+e,+f", 0x7be0001a, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1870ed8a933fSYongbok Kim {"fadd.w", "+d,+e,+f", 0x7800001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1871ed8a933fSYongbok Kim {"fadd.d", "+d,+e,+f", 0x7820001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1872ed8a933fSYongbok Kim {"fsub.w", "+d,+e,+f", 0x7840001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1873ed8a933fSYongbok Kim {"fsub.d", "+d,+e,+f", 0x7860001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1874ed8a933fSYongbok Kim {"fmul.w", "+d,+e,+f", 0x7880001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1875ed8a933fSYongbok Kim {"fmul.d", "+d,+e,+f", 0x78a0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1876ed8a933fSYongbok Kim {"fdiv.w", "+d,+e,+f", 0x78c0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1877ed8a933fSYongbok Kim {"fdiv.d", "+d,+e,+f", 0x78e0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1878ed8a933fSYongbok Kim {"fmadd.w", "+d,+e,+f", 0x7900001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1879ed8a933fSYongbok Kim {"fmadd.d", "+d,+e,+f", 0x7920001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1880ed8a933fSYongbok Kim {"fmsub.w", "+d,+e,+f", 0x7940001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1881ed8a933fSYongbok Kim {"fmsub.d", "+d,+e,+f", 0x7960001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1882ed8a933fSYongbok Kim {"fexp2.w", "+d,+e,+f", 0x79c0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1883ed8a933fSYongbok Kim {"fexp2.d", "+d,+e,+f", 0x79e0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1884ed8a933fSYongbok Kim {"fexdo.h", "+d,+e,+f", 0x7a00001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1885ed8a933fSYongbok Kim {"fexdo.w", "+d,+e,+f", 0x7a20001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1886ed8a933fSYongbok Kim {"ftq.h", "+d,+e,+f", 0x7a80001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1887ed8a933fSYongbok Kim {"ftq.w", "+d,+e,+f", 0x7aa0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1888ed8a933fSYongbok Kim {"fmin.w", "+d,+e,+f", 0x7b00001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1889ed8a933fSYongbok Kim {"fmin.d", "+d,+e,+f", 0x7b20001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1890ed8a933fSYongbok Kim {"fmin_a.w", "+d,+e,+f", 0x7b40001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1891ed8a933fSYongbok Kim {"fmin_a.d", "+d,+e,+f", 0x7b60001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1892ed8a933fSYongbok Kim {"fmax.w", "+d,+e,+f", 0x7b80001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1893ed8a933fSYongbok Kim {"fmax.d", "+d,+e,+f", 0x7ba0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1894ed8a933fSYongbok Kim {"fmax_a.w", "+d,+e,+f", 0x7bc0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1895ed8a933fSYongbok Kim {"fmax_a.d", "+d,+e,+f", 0x7be0001b, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1896ed8a933fSYongbok Kim {"fcor.w", "+d,+e,+f", 0x7840001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1897ed8a933fSYongbok Kim {"fcor.d", "+d,+e,+f", 0x7860001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1898ed8a933fSYongbok Kim {"fcune.w", "+d,+e,+f", 0x7880001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1899ed8a933fSYongbok Kim {"fcune.d", "+d,+e,+f", 0x78a0001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1900ed8a933fSYongbok Kim {"fcne.w", "+d,+e,+f", 0x78c0001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1901ed8a933fSYongbok Kim {"fcne.d", "+d,+e,+f", 0x78e0001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1902ed8a933fSYongbok Kim {"mul_q.h", "+d,+e,+f", 0x7900001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1903ed8a933fSYongbok Kim {"mul_q.w", "+d,+e,+f", 0x7920001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1904ed8a933fSYongbok Kim {"madd_q.h", "+d,+e,+f", 0x7940001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1905ed8a933fSYongbok Kim {"madd_q.w", "+d,+e,+f", 0x7960001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1906ed8a933fSYongbok Kim {"msub_q.h", "+d,+e,+f", 0x7980001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1907ed8a933fSYongbok Kim {"msub_q.w", "+d,+e,+f", 0x79a0001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1908ed8a933fSYongbok Kim {"fsor.w", "+d,+e,+f", 0x7a40001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1909ed8a933fSYongbok Kim {"fsor.d", "+d,+e,+f", 0x7a60001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1910ed8a933fSYongbok Kim {"fsune.w", "+d,+e,+f", 0x7a80001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1911ed8a933fSYongbok Kim {"fsune.d", "+d,+e,+f", 0x7aa0001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1912ed8a933fSYongbok Kim {"fsne.w", "+d,+e,+f", 0x7ac0001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1913ed8a933fSYongbok Kim {"fsne.d", "+d,+e,+f", 0x7ae0001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1914ed8a933fSYongbok Kim {"mulr_q.h", "+d,+e,+f", 0x7b00001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1915ed8a933fSYongbok Kim {"mulr_q.w", "+d,+e,+f", 0x7b20001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1916ed8a933fSYongbok Kim {"maddr_q.h", "+d,+e,+f", 0x7b40001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1917ed8a933fSYongbok Kim {"maddr_q.w", "+d,+e,+f", 0x7b60001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1918ed8a933fSYongbok Kim {"msubr_q.h", "+d,+e,+f", 0x7b80001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1919ed8a933fSYongbok Kim {"msubr_q.w", "+d,+e,+f", 0x7ba0001c, 0xffe0003f, WR_VD|RD_VS|RD_VT, 0, MSA},
1920ed8a933fSYongbok Kim {"fclass.w", "+d,+e", 0x7b20001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1921ed8a933fSYongbok Kim {"fclass.d", "+d,+e", 0x7b21001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1922ed8a933fSYongbok Kim {"fsqrt.w", "+d,+e", 0x7b26001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1923ed8a933fSYongbok Kim {"fsqrt.d", "+d,+e", 0x7b27001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1924ed8a933fSYongbok Kim {"frsqrt.w", "+d,+e", 0x7b28001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1925ed8a933fSYongbok Kim {"frsqrt.d", "+d,+e", 0x7b29001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1926ed8a933fSYongbok Kim {"frcp.w", "+d,+e", 0x7b2a001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1927ed8a933fSYongbok Kim {"frcp.d", "+d,+e", 0x7b2b001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1928ed8a933fSYongbok Kim {"frint.w", "+d,+e", 0x7b2c001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1929ed8a933fSYongbok Kim {"frint.d", "+d,+e", 0x7b2d001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1930ed8a933fSYongbok Kim {"flog2.w", "+d,+e", 0x7b2e001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1931ed8a933fSYongbok Kim {"flog2.d", "+d,+e", 0x7b2f001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1932ed8a933fSYongbok Kim {"fexupl.w", "+d,+e", 0x7b30001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1933ed8a933fSYongbok Kim {"fexupl.d", "+d,+e", 0x7b31001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1934ed8a933fSYongbok Kim {"fexupr.w", "+d,+e", 0x7b32001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1935ed8a933fSYongbok Kim {"fexupr.d", "+d,+e", 0x7b33001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1936ed8a933fSYongbok Kim {"ffql.w", "+d,+e", 0x7b34001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1937ed8a933fSYongbok Kim {"ffql.d", "+d,+e", 0x7b35001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1938ed8a933fSYongbok Kim {"ffqr.w", "+d,+e", 0x7b36001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1939ed8a933fSYongbok Kim {"ffqr.d", "+d,+e", 0x7b37001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1940ed8a933fSYongbok Kim {"ftint_s.w", "+d,+e", 0x7b38001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1941ed8a933fSYongbok Kim {"ftint_s.d", "+d,+e", 0x7b39001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1942ed8a933fSYongbok Kim {"ftint_u.w", "+d,+e", 0x7b3a001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1943ed8a933fSYongbok Kim {"ftint_u.d", "+d,+e", 0x7b3b001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1944ed8a933fSYongbok Kim {"ffint_s.w", "+d,+e", 0x7b3c001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1945ed8a933fSYongbok Kim {"ffint_s.d", "+d,+e", 0x7b3d001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1946ed8a933fSYongbok Kim {"ffint_u.w", "+d,+e", 0x7b3e001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1947ed8a933fSYongbok Kim {"ffint_u.d", "+d,+e", 0x7b3f001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1948ed8a933fSYongbok Kim {"ftrunc_s.w", "+d,+e", 0x7b40001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1949ed8a933fSYongbok Kim {"ftrunc_s.d", "+d,+e", 0x7b41001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1950ed8a933fSYongbok Kim {"ftrunc_u.w", "+d,+e", 0x7b42001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1951ed8a933fSYongbok Kim {"ftrunc_u.d", "+d,+e", 0x7b43001e, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1952ed8a933fSYongbok Kim {"ctcmsa", "+h,d", 0x783e0019, 0xffff003f, COD, RD_d, MSA},
1953ed8a933fSYongbok Kim {"cfcmsa", "+i,+g", 0x787e0019, 0xffff003f, COD, 0, MSA},
1954ed8a933fSYongbok Kim {"move.v", "+d,+e", 0x78be0019, 0xffff003f, WR_VD|RD_VS, 0, MSA},
1955ed8a933fSYongbok Kim {"lsa", "d,v,t,+@", 0x00000005, 0xfc00073f, WR_d|RD_s|RD_t, 0, MSA},
1956ed8a933fSYongbok Kim {"dlsa", "d,v,t,+@", 0x00000015, 0xfc00073f, WR_d|RD_s|RD_t, 0, MSA64},
1957ed8a933fSYongbok Kim
195876cad711SPaolo Bonzini {"pref", "k,o(b)", 0xcc000000, 0xfc000000, RD_b, 0, I4|I32|G3 },
195976cad711SPaolo Bonzini {"prefx", "h,t(b)", 0x4c00000f, 0xfc0007ff, RD_b|RD_t, 0, I4|I33 },
196076cad711SPaolo Bonzini {"nop", "", 0x00000000, 0xffffffff, 0, INSN2_ALIAS, I1 }, /* sll */
196176cad711SPaolo Bonzini {"ssnop", "", 0x00000040, 0xffffffff, 0, INSN2_ALIAS, I32|N55 }, /* sll */
196276cad711SPaolo Bonzini {"ehb", "", 0x000000c0, 0xffffffff, 0, INSN2_ALIAS, I33 }, /* sll */
196376cad711SPaolo Bonzini {"li", "t,j", 0x24000000, 0xffe00000, WR_t, INSN2_ALIAS, I1 }, /* addiu */
196476cad711SPaolo Bonzini {"li", "t,i", 0x34000000, 0xffe00000, WR_t, INSN2_ALIAS, I1 }, /* ori */
196576cad711SPaolo Bonzini {"li", "t,I", 0, (int) M_LI, INSN_MACRO, 0, I1 },
196676cad711SPaolo Bonzini {"move", "d,s", 0, (int) M_MOVE, INSN_MACRO, 0, I1 },
196776cad711SPaolo Bonzini {"move", "d,s", 0x0000002d, 0xfc1f07ff, WR_d|RD_s, INSN2_ALIAS, I3 },/* daddu */
196876cad711SPaolo Bonzini {"move", "d,s", 0x00000021, 0xfc1f07ff, WR_d|RD_s, INSN2_ALIAS, I1 },/* addu */
196976cad711SPaolo Bonzini {"move", "d,s", 0x00000025, 0xfc1f07ff, WR_d|RD_s, INSN2_ALIAS, I1 },/* or */
197076cad711SPaolo Bonzini {"b", "p", 0x10000000, 0xffff0000, UBD, INSN2_ALIAS, I1 },/* beq 0,0 */
197176cad711SPaolo Bonzini {"b", "p", 0x04010000, 0xffff0000, UBD, INSN2_ALIAS, I1 },/* bgez 0 */
197276cad711SPaolo Bonzini {"bal", "p", 0x04110000, 0xffff0000, UBD|WR_31, INSN2_ALIAS, I1 },/* bgezal 0*/
197376cad711SPaolo Bonzini
197476cad711SPaolo Bonzini {"abs", "d,v", 0, (int) M_ABS, INSN_MACRO, 0, I1 },
197576cad711SPaolo Bonzini {"abs.s", "D,V", 0x46000005, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
197676cad711SPaolo Bonzini {"abs.d", "D,V", 0x46200005, 0xffff003f, WR_D|RD_S|FP_D, 0, I1 },
197776cad711SPaolo Bonzini {"abs.ps", "D,V", 0x46c00005, 0xffff003f, WR_D|RD_S|FP_D, 0, I5|I33 },
197876cad711SPaolo Bonzini {"add", "d,v,t", 0x00000020, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
197976cad711SPaolo Bonzini {"add", "t,r,I", 0, (int) M_ADD_I, INSN_MACRO, 0, I1 },
198076cad711SPaolo Bonzini {"add.s", "D,V,T", 0x46000000, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I1 },
198176cad711SPaolo Bonzini {"add.d", "D,V,T", 0x46200000, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I1 },
198276cad711SPaolo Bonzini {"add.ob", "X,Y,Q", 0x7800000b, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
198376cad711SPaolo Bonzini {"add.ob", "D,S,T", 0x4ac0000b, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
198476cad711SPaolo Bonzini {"add.ob", "D,S,T[e]", 0x4800000b, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
198576cad711SPaolo Bonzini {"add.ob", "D,S,k", 0x4bc0000b, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
198676cad711SPaolo Bonzini {"add.ps", "D,V,T", 0x46c00000, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
198776cad711SPaolo Bonzini {"add.qh", "X,Y,Q", 0x7820000b, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
198876cad711SPaolo Bonzini {"adda.ob", "Y,Q", 0x78000037, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
198976cad711SPaolo Bonzini {"adda.qh", "Y,Q", 0x78200037, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
199076cad711SPaolo Bonzini {"addi", "t,r,j", 0x20000000, 0xfc000000, WR_t|RD_s, 0, I1 },
199176cad711SPaolo Bonzini {"addiu", "t,r,j", 0x24000000, 0xfc000000, WR_t|RD_s, 0, I1 },
199276cad711SPaolo Bonzini {"addl.ob", "Y,Q", 0x78000437, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
199376cad711SPaolo Bonzini {"addl.qh", "Y,Q", 0x78200437, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
199476cad711SPaolo Bonzini {"addr.ps", "D,S,T", 0x46c00018, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, M3D },
199576cad711SPaolo Bonzini {"addu", "d,v,t", 0x00000021, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
199676cad711SPaolo Bonzini {"addu", "t,r,I", 0, (int) M_ADDU_I, INSN_MACRO, 0, I1 },
199776cad711SPaolo Bonzini {"alni.ob", "X,Y,Z,O", 0x78000018, 0xff00003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
199876cad711SPaolo Bonzini {"alni.ob", "D,S,T,%", 0x48000018, 0xff00003f, WR_D|RD_S|RD_T, 0, N54 },
199976cad711SPaolo Bonzini {"alni.qh", "X,Y,Z,O", 0x7800001a, 0xff00003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
200076cad711SPaolo Bonzini {"alnv.ps", "D,V,T,s", 0x4c00001e, 0xfc00003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
200176cad711SPaolo Bonzini {"alnv.ob", "X,Y,Z,s", 0x78000019, 0xfc00003f, WR_D|RD_S|RD_T|RD_s|FP_D, 0, MX|SB1 },
200276cad711SPaolo Bonzini {"alnv.qh", "X,Y,Z,s", 0x7800001b, 0xfc00003f, WR_D|RD_S|RD_T|RD_s|FP_D, 0, MX },
200376cad711SPaolo Bonzini {"and", "d,v,t", 0x00000024, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
200476cad711SPaolo Bonzini {"and", "t,r,I", 0, (int) M_AND_I, INSN_MACRO, 0, I1 },
200576cad711SPaolo Bonzini {"and.ob", "X,Y,Q", 0x7800000c, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
200676cad711SPaolo Bonzini {"and.ob", "D,S,T", 0x4ac0000c, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
200776cad711SPaolo Bonzini {"and.ob", "D,S,T[e]", 0x4800000c, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
200876cad711SPaolo Bonzini {"and.ob", "D,S,k", 0x4bc0000c, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
200976cad711SPaolo Bonzini {"and.qh", "X,Y,Q", 0x7820000c, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
201076cad711SPaolo Bonzini {"andi", "t,r,i", 0x30000000, 0xfc000000, WR_t|RD_s, 0, I1 },
201176cad711SPaolo Bonzini /* b is at the top of the table. */
201276cad711SPaolo Bonzini /* bal is at the top of the table. */
201376cad711SPaolo Bonzini /* bc0[tf]l? are at the bottom of the table. */
201476cad711SPaolo Bonzini {"bc1any2f", "N,p", 0x45200000, 0xffe30000, CBD|RD_CC|FP_S, 0, M3D },
201576cad711SPaolo Bonzini {"bc1any2t", "N,p", 0x45210000, 0xffe30000, CBD|RD_CC|FP_S, 0, M3D },
201676cad711SPaolo Bonzini {"bc1any4f", "N,p", 0x45400000, 0xffe30000, CBD|RD_CC|FP_S, 0, M3D },
201776cad711SPaolo Bonzini {"bc1any4t", "N,p", 0x45410000, 0xffe30000, CBD|RD_CC|FP_S, 0, M3D },
201876cad711SPaolo Bonzini {"bc1f", "p", 0x45000000, 0xffff0000, CBD|RD_CC|FP_S, 0, I1 },
201976cad711SPaolo Bonzini {"bc1f", "N,p", 0x45000000, 0xffe30000, CBD|RD_CC|FP_S, 0, I4|I32 },
202076cad711SPaolo Bonzini {"bc1fl", "p", 0x45020000, 0xffff0000, CBL|RD_CC|FP_S, 0, I2|T3 },
202176cad711SPaolo Bonzini {"bc1fl", "N,p", 0x45020000, 0xffe30000, CBL|RD_CC|FP_S, 0, I4|I32 },
202276cad711SPaolo Bonzini {"bc1t", "p", 0x45010000, 0xffff0000, CBD|RD_CC|FP_S, 0, I1 },
202376cad711SPaolo Bonzini {"bc1t", "N,p", 0x45010000, 0xffe30000, CBD|RD_CC|FP_S, 0, I4|I32 },
202476cad711SPaolo Bonzini {"bc1tl", "p", 0x45030000, 0xffff0000, CBL|RD_CC|FP_S, 0, I2|T3 },
202576cad711SPaolo Bonzini {"bc1tl", "N,p", 0x45030000, 0xffe30000, CBL|RD_CC|FP_S, 0, I4|I32 },
202676cad711SPaolo Bonzini /* bc2* are at the bottom of the table. */
202776cad711SPaolo Bonzini /* bc3* are at the bottom of the table. */
202876cad711SPaolo Bonzini {"beqz", "s,p", 0x10000000, 0xfc1f0000, CBD|RD_s, 0, I1 },
202976cad711SPaolo Bonzini {"beqzl", "s,p", 0x50000000, 0xfc1f0000, CBL|RD_s, 0, I2|T3 },
203076cad711SPaolo Bonzini {"beq", "s,t,p", 0x10000000, 0xfc000000, CBD|RD_s|RD_t, 0, I1 },
203176cad711SPaolo Bonzini {"beq", "s,I,p", 0, (int) M_BEQ_I, INSN_MACRO, 0, I1 },
203276cad711SPaolo Bonzini {"beql", "s,t,p", 0x50000000, 0xfc000000, CBL|RD_s|RD_t, 0, I2|T3 },
203376cad711SPaolo Bonzini {"beql", "s,I,p", 0, (int) M_BEQL_I, INSN_MACRO, 0, I2|T3 },
203476cad711SPaolo Bonzini {"bge", "s,t,p", 0, (int) M_BGE, INSN_MACRO, 0, I1 },
203576cad711SPaolo Bonzini {"bge", "s,I,p", 0, (int) M_BGE_I, INSN_MACRO, 0, I1 },
203676cad711SPaolo Bonzini {"bgel", "s,t,p", 0, (int) M_BGEL, INSN_MACRO, 0, I2|T3 },
203776cad711SPaolo Bonzini {"bgel", "s,I,p", 0, (int) M_BGEL_I, INSN_MACRO, 0, I2|T3 },
203876cad711SPaolo Bonzini {"bgeu", "s,t,p", 0, (int) M_BGEU, INSN_MACRO, 0, I1 },
203976cad711SPaolo Bonzini {"bgeu", "s,I,p", 0, (int) M_BGEU_I, INSN_MACRO, 0, I1 },
204076cad711SPaolo Bonzini {"bgeul", "s,t,p", 0, (int) M_BGEUL, INSN_MACRO, 0, I2|T3 },
204176cad711SPaolo Bonzini {"bgeul", "s,I,p", 0, (int) M_BGEUL_I, INSN_MACRO, 0, I2|T3 },
204276cad711SPaolo Bonzini {"bgez", "s,p", 0x04010000, 0xfc1f0000, CBD|RD_s, 0, I1 },
204376cad711SPaolo Bonzini {"bgezl", "s,p", 0x04030000, 0xfc1f0000, CBL|RD_s, 0, I2|T3 },
204476cad711SPaolo Bonzini {"bgezal", "s,p", 0x04110000, 0xfc1f0000, CBD|RD_s|WR_31, 0, I1 },
204576cad711SPaolo Bonzini {"bgezall", "s,p", 0x04130000, 0xfc1f0000, CBL|RD_s|WR_31, 0, I2|T3 },
204676cad711SPaolo Bonzini {"bgt", "s,t,p", 0, (int) M_BGT, INSN_MACRO, 0, I1 },
204776cad711SPaolo Bonzini {"bgt", "s,I,p", 0, (int) M_BGT_I, INSN_MACRO, 0, I1 },
204876cad711SPaolo Bonzini {"bgtl", "s,t,p", 0, (int) M_BGTL, INSN_MACRO, 0, I2|T3 },
204976cad711SPaolo Bonzini {"bgtl", "s,I,p", 0, (int) M_BGTL_I, INSN_MACRO, 0, I2|T3 },
205076cad711SPaolo Bonzini {"bgtu", "s,t,p", 0, (int) M_BGTU, INSN_MACRO, 0, I1 },
205176cad711SPaolo Bonzini {"bgtu", "s,I,p", 0, (int) M_BGTU_I, INSN_MACRO, 0, I1 },
205276cad711SPaolo Bonzini {"bgtul", "s,t,p", 0, (int) M_BGTUL, INSN_MACRO, 0, I2|T3 },
205376cad711SPaolo Bonzini {"bgtul", "s,I,p", 0, (int) M_BGTUL_I, INSN_MACRO, 0, I2|T3 },
205476cad711SPaolo Bonzini {"bgtz", "s,p", 0x1c000000, 0xfc1f0000, CBD|RD_s, 0, I1 },
205576cad711SPaolo Bonzini {"bgtzl", "s,p", 0x5c000000, 0xfc1f0000, CBL|RD_s, 0, I2|T3 },
205676cad711SPaolo Bonzini {"ble", "s,t,p", 0, (int) M_BLE, INSN_MACRO, 0, I1 },
205776cad711SPaolo Bonzini {"ble", "s,I,p", 0, (int) M_BLE_I, INSN_MACRO, 0, I1 },
205876cad711SPaolo Bonzini {"blel", "s,t,p", 0, (int) M_BLEL, INSN_MACRO, 0, I2|T3 },
205976cad711SPaolo Bonzini {"blel", "s,I,p", 0, (int) M_BLEL_I, INSN_MACRO, 0, I2|T3 },
206076cad711SPaolo Bonzini {"bleu", "s,t,p", 0, (int) M_BLEU, INSN_MACRO, 0, I1 },
206176cad711SPaolo Bonzini {"bleu", "s,I,p", 0, (int) M_BLEU_I, INSN_MACRO, 0, I1 },
206276cad711SPaolo Bonzini {"bleul", "s,t,p", 0, (int) M_BLEUL, INSN_MACRO, 0, I2|T3 },
206376cad711SPaolo Bonzini {"bleul", "s,I,p", 0, (int) M_BLEUL_I, INSN_MACRO, 0, I2|T3 },
206476cad711SPaolo Bonzini {"blez", "s,p", 0x18000000, 0xfc1f0000, CBD|RD_s, 0, I1 },
206576cad711SPaolo Bonzini {"blezl", "s,p", 0x58000000, 0xfc1f0000, CBL|RD_s, 0, I2|T3 },
206676cad711SPaolo Bonzini {"blt", "s,t,p", 0, (int) M_BLT, INSN_MACRO, 0, I1 },
206776cad711SPaolo Bonzini {"blt", "s,I,p", 0, (int) M_BLT_I, INSN_MACRO, 0, I1 },
206876cad711SPaolo Bonzini {"bltl", "s,t,p", 0, (int) M_BLTL, INSN_MACRO, 0, I2|T3 },
206976cad711SPaolo Bonzini {"bltl", "s,I,p", 0, (int) M_BLTL_I, INSN_MACRO, 0, I2|T3 },
207076cad711SPaolo Bonzini {"bltu", "s,t,p", 0, (int) M_BLTU, INSN_MACRO, 0, I1 },
207176cad711SPaolo Bonzini {"bltu", "s,I,p", 0, (int) M_BLTU_I, INSN_MACRO, 0, I1 },
207276cad711SPaolo Bonzini {"bltul", "s,t,p", 0, (int) M_BLTUL, INSN_MACRO, 0, I2|T3 },
207376cad711SPaolo Bonzini {"bltul", "s,I,p", 0, (int) M_BLTUL_I, INSN_MACRO, 0, I2|T3 },
207476cad711SPaolo Bonzini {"bltz", "s,p", 0x04000000, 0xfc1f0000, CBD|RD_s, 0, I1 },
207576cad711SPaolo Bonzini {"bltzl", "s,p", 0x04020000, 0xfc1f0000, CBL|RD_s, 0, I2|T3 },
207676cad711SPaolo Bonzini {"bltzal", "s,p", 0x04100000, 0xfc1f0000, CBD|RD_s|WR_31, 0, I1 },
207776cad711SPaolo Bonzini {"bltzall", "s,p", 0x04120000, 0xfc1f0000, CBL|RD_s|WR_31, 0, I2|T3 },
207876cad711SPaolo Bonzini {"bnez", "s,p", 0x14000000, 0xfc1f0000, CBD|RD_s, 0, I1 },
207976cad711SPaolo Bonzini {"bnezl", "s,p", 0x54000000, 0xfc1f0000, CBL|RD_s, 0, I2|T3 },
208076cad711SPaolo Bonzini {"bne", "s,t,p", 0x14000000, 0xfc000000, CBD|RD_s|RD_t, 0, I1 },
208176cad711SPaolo Bonzini {"bne", "s,I,p", 0, (int) M_BNE_I, INSN_MACRO, 0, I1 },
208276cad711SPaolo Bonzini {"bnel", "s,t,p", 0x54000000, 0xfc000000, CBL|RD_s|RD_t, 0, I2|T3 },
208376cad711SPaolo Bonzini {"bnel", "s,I,p", 0, (int) M_BNEL_I, INSN_MACRO, 0, I2|T3 },
208476cad711SPaolo Bonzini {"break", "", 0x0000000d, 0xffffffff, TRAP, 0, I1 },
208576cad711SPaolo Bonzini {"break", "c", 0x0000000d, 0xfc00ffff, TRAP, 0, I1 },
208676cad711SPaolo Bonzini {"break", "c,q", 0x0000000d, 0xfc00003f, TRAP, 0, I1 },
208776cad711SPaolo Bonzini {"c.f.d", "S,T", 0x46200030, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
208876cad711SPaolo Bonzini {"c.f.d", "M,S,T", 0x46200030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
208976cad711SPaolo Bonzini {"c.f.s", "S,T", 0x46000030, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
209076cad711SPaolo Bonzini {"c.f.s", "M,S,T", 0x46000030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
209176cad711SPaolo Bonzini {"c.f.ps", "S,T", 0x46c00030, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
209276cad711SPaolo Bonzini {"c.f.ps", "M,S,T", 0x46c00030, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
209376cad711SPaolo Bonzini {"c.un.d", "S,T", 0x46200031, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
209476cad711SPaolo Bonzini {"c.un.d", "M,S,T", 0x46200031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
209576cad711SPaolo Bonzini {"c.un.s", "S,T", 0x46000031, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
209676cad711SPaolo Bonzini {"c.un.s", "M,S,T", 0x46000031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
209776cad711SPaolo Bonzini {"c.un.ps", "S,T", 0x46c00031, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
209876cad711SPaolo Bonzini {"c.un.ps", "M,S,T", 0x46c00031, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
209976cad711SPaolo Bonzini {"c.eq.d", "S,T", 0x46200032, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
210076cad711SPaolo Bonzini {"c.eq.d", "M,S,T", 0x46200032, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
210176cad711SPaolo Bonzini {"c.eq.s", "S,T", 0x46000032, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
210276cad711SPaolo Bonzini {"c.eq.s", "M,S,T", 0x46000032, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
210376cad711SPaolo Bonzini {"c.eq.ob", "Y,Q", 0x78000001, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX|SB1 },
210476cad711SPaolo Bonzini {"c.eq.ob", "S,T", 0x4ac00001, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
210576cad711SPaolo Bonzini {"c.eq.ob", "S,T[e]", 0x48000001, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
210676cad711SPaolo Bonzini {"c.eq.ob", "S,k", 0x4bc00001, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
210776cad711SPaolo Bonzini {"c.eq.ps", "S,T", 0x46c00032, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
210876cad711SPaolo Bonzini {"c.eq.ps", "M,S,T", 0x46c00032, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
210976cad711SPaolo Bonzini {"c.eq.qh", "Y,Q", 0x78200001, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX },
211076cad711SPaolo Bonzini {"c.ueq.d", "S,T", 0x46200033, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
211176cad711SPaolo Bonzini {"c.ueq.d", "M,S,T", 0x46200033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
211276cad711SPaolo Bonzini {"c.ueq.s", "S,T", 0x46000033, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
211376cad711SPaolo Bonzini {"c.ueq.s", "M,S,T", 0x46000033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
211476cad711SPaolo Bonzini {"c.ueq.ps","S,T", 0x46c00033, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
211576cad711SPaolo Bonzini {"c.ueq.ps","M,S,T", 0x46c00033, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
211676cad711SPaolo Bonzini {"c.olt.d", "S,T", 0x46200034, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
211776cad711SPaolo Bonzini {"c.olt.d", "M,S,T", 0x46200034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
211876cad711SPaolo Bonzini {"c.olt.s", "S,T", 0x46000034, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
211976cad711SPaolo Bonzini {"c.olt.s", "M,S,T", 0x46000034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
212076cad711SPaolo Bonzini {"c.olt.ps","S,T", 0x46c00034, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
212176cad711SPaolo Bonzini {"c.olt.ps","M,S,T", 0x46c00034, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
212276cad711SPaolo Bonzini {"c.ult.d", "S,T", 0x46200035, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
212376cad711SPaolo Bonzini {"c.ult.d", "M,S,T", 0x46200035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
212476cad711SPaolo Bonzini {"c.ult.s", "S,T", 0x46000035, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
212576cad711SPaolo Bonzini {"c.ult.s", "M,S,T", 0x46000035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
212676cad711SPaolo Bonzini {"c.ult.ps","S,T", 0x46c00035, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
212776cad711SPaolo Bonzini {"c.ult.ps","M,S,T", 0x46c00035, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
212876cad711SPaolo Bonzini {"c.ole.d", "S,T", 0x46200036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
212976cad711SPaolo Bonzini {"c.ole.d", "M,S,T", 0x46200036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
213076cad711SPaolo Bonzini {"c.ole.s", "S,T", 0x46000036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
213176cad711SPaolo Bonzini {"c.ole.s", "M,S,T", 0x46000036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
213276cad711SPaolo Bonzini {"c.ole.ps","S,T", 0x46c00036, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
213376cad711SPaolo Bonzini {"c.ole.ps","M,S,T", 0x46c00036, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
213476cad711SPaolo Bonzini {"c.ule.d", "S,T", 0x46200037, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
213576cad711SPaolo Bonzini {"c.ule.d", "M,S,T", 0x46200037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
213676cad711SPaolo Bonzini {"c.ule.s", "S,T", 0x46000037, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
213776cad711SPaolo Bonzini {"c.ule.s", "M,S,T", 0x46000037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
213876cad711SPaolo Bonzini {"c.ule.ps","S,T", 0x46c00037, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
213976cad711SPaolo Bonzini {"c.ule.ps","M,S,T", 0x46c00037, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
214076cad711SPaolo Bonzini {"c.sf.d", "S,T", 0x46200038, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
214176cad711SPaolo Bonzini {"c.sf.d", "M,S,T", 0x46200038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
214276cad711SPaolo Bonzini {"c.sf.s", "S,T", 0x46000038, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
214376cad711SPaolo Bonzini {"c.sf.s", "M,S,T", 0x46000038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
214476cad711SPaolo Bonzini {"c.sf.ps", "S,T", 0x46c00038, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
214576cad711SPaolo Bonzini {"c.sf.ps", "M,S,T", 0x46c00038, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
214676cad711SPaolo Bonzini {"c.ngle.d","S,T", 0x46200039, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
214776cad711SPaolo Bonzini {"c.ngle.d","M,S,T", 0x46200039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
214876cad711SPaolo Bonzini {"c.ngle.s","S,T", 0x46000039, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
214976cad711SPaolo Bonzini {"c.ngle.s","M,S,T", 0x46000039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
215076cad711SPaolo Bonzini {"c.ngle.ps","S,T", 0x46c00039, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
215176cad711SPaolo Bonzini {"c.ngle.ps","M,S,T", 0x46c00039, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
215276cad711SPaolo Bonzini {"c.seq.d", "S,T", 0x4620003a, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
215376cad711SPaolo Bonzini {"c.seq.d", "M,S,T", 0x4620003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
215476cad711SPaolo Bonzini {"c.seq.s", "S,T", 0x4600003a, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
215576cad711SPaolo Bonzini {"c.seq.s", "M,S,T", 0x4600003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
215676cad711SPaolo Bonzini {"c.seq.ps","S,T", 0x46c0003a, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
215776cad711SPaolo Bonzini {"c.seq.ps","M,S,T", 0x46c0003a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
215876cad711SPaolo Bonzini {"c.ngl.d", "S,T", 0x4620003b, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
215976cad711SPaolo Bonzini {"c.ngl.d", "M,S,T", 0x4620003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
216076cad711SPaolo Bonzini {"c.ngl.s", "S,T", 0x4600003b, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
216176cad711SPaolo Bonzini {"c.ngl.s", "M,S,T", 0x4600003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
216276cad711SPaolo Bonzini {"c.ngl.ps","S,T", 0x46c0003b, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
216376cad711SPaolo Bonzini {"c.ngl.ps","M,S,T", 0x46c0003b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
216476cad711SPaolo Bonzini {"c.lt.d", "S,T", 0x4620003c, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
216576cad711SPaolo Bonzini {"c.lt.d", "M,S,T", 0x4620003c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
216676cad711SPaolo Bonzini {"c.lt.s", "S,T", 0x4600003c, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
216776cad711SPaolo Bonzini {"c.lt.s", "M,S,T", 0x4600003c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
216876cad711SPaolo Bonzini {"c.lt.ob", "Y,Q", 0x78000004, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX|SB1 },
216976cad711SPaolo Bonzini {"c.lt.ob", "S,T", 0x4ac00004, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
217076cad711SPaolo Bonzini {"c.lt.ob", "S,T[e]", 0x48000004, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
217176cad711SPaolo Bonzini {"c.lt.ob", "S,k", 0x4bc00004, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
217276cad711SPaolo Bonzini {"c.lt.ps", "S,T", 0x46c0003c, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
217376cad711SPaolo Bonzini {"c.lt.ps", "M,S,T", 0x46c0003c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
217476cad711SPaolo Bonzini {"c.lt.qh", "Y,Q", 0x78200004, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX },
217576cad711SPaolo Bonzini {"c.nge.d", "S,T", 0x4620003d, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
217676cad711SPaolo Bonzini {"c.nge.d", "M,S,T", 0x4620003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
217776cad711SPaolo Bonzini {"c.nge.s", "S,T", 0x4600003d, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
217876cad711SPaolo Bonzini {"c.nge.s", "M,S,T", 0x4600003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
217976cad711SPaolo Bonzini {"c.nge.ps","S,T", 0x46c0003d, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
218076cad711SPaolo Bonzini {"c.nge.ps","M,S,T", 0x46c0003d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
218176cad711SPaolo Bonzini {"c.le.d", "S,T", 0x4620003e, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
218276cad711SPaolo Bonzini {"c.le.d", "M,S,T", 0x4620003e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
218376cad711SPaolo Bonzini {"c.le.s", "S,T", 0x4600003e, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
218476cad711SPaolo Bonzini {"c.le.s", "M,S,T", 0x4600003e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
218576cad711SPaolo Bonzini {"c.le.ob", "Y,Q", 0x78000005, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX|SB1 },
218676cad711SPaolo Bonzini {"c.le.ob", "S,T", 0x4ac00005, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
218776cad711SPaolo Bonzini {"c.le.ob", "S,T[e]", 0x48000005, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
218876cad711SPaolo Bonzini {"c.le.ob", "S,k", 0x4bc00005, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
218976cad711SPaolo Bonzini {"c.le.ps", "S,T", 0x46c0003e, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
219076cad711SPaolo Bonzini {"c.le.ps", "M,S,T", 0x46c0003e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
219176cad711SPaolo Bonzini {"c.le.qh", "Y,Q", 0x78200005, 0xfc2007ff, WR_CC|RD_S|RD_T|FP_D, 0, MX },
219276cad711SPaolo Bonzini {"c.ngt.d", "S,T", 0x4620003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I1 },
219376cad711SPaolo Bonzini {"c.ngt.d", "M,S,T", 0x4620003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I4|I32 },
219476cad711SPaolo Bonzini {"c.ngt.s", "S,T", 0x4600003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_S, 0, I1 },
219576cad711SPaolo Bonzini {"c.ngt.s", "M,S,T", 0x4600003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, I4|I32 },
219676cad711SPaolo Bonzini {"c.ngt.ps","S,T", 0x46c0003f, 0xffe007ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
219776cad711SPaolo Bonzini {"c.ngt.ps","M,S,T", 0x46c0003f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, I5|I33 },
219876cad711SPaolo Bonzini {"cabs.eq.d", "M,S,T", 0x46200072, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
219976cad711SPaolo Bonzini {"cabs.eq.ps", "M,S,T", 0x46c00072, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
220076cad711SPaolo Bonzini {"cabs.eq.s", "M,S,T", 0x46000072, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
220176cad711SPaolo Bonzini {"cabs.f.d", "M,S,T", 0x46200070, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
220276cad711SPaolo Bonzini {"cabs.f.ps", "M,S,T", 0x46c00070, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
220376cad711SPaolo Bonzini {"cabs.f.s", "M,S,T", 0x46000070, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
220476cad711SPaolo Bonzini {"cabs.le.d", "M,S,T", 0x4620007e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
220576cad711SPaolo Bonzini {"cabs.le.ps", "M,S,T", 0x46c0007e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
220676cad711SPaolo Bonzini {"cabs.le.s", "M,S,T", 0x4600007e, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
220776cad711SPaolo Bonzini {"cabs.lt.d", "M,S,T", 0x4620007c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
220876cad711SPaolo Bonzini {"cabs.lt.ps", "M,S,T", 0x46c0007c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
220976cad711SPaolo Bonzini {"cabs.lt.s", "M,S,T", 0x4600007c, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
221076cad711SPaolo Bonzini {"cabs.nge.d", "M,S,T", 0x4620007d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
221176cad711SPaolo Bonzini {"cabs.nge.ps","M,S,T", 0x46c0007d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
221276cad711SPaolo Bonzini {"cabs.nge.s", "M,S,T", 0x4600007d, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
221376cad711SPaolo Bonzini {"cabs.ngl.d", "M,S,T", 0x4620007b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
221476cad711SPaolo Bonzini {"cabs.ngl.ps","M,S,T", 0x46c0007b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
221576cad711SPaolo Bonzini {"cabs.ngl.s", "M,S,T", 0x4600007b, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
221676cad711SPaolo Bonzini {"cabs.ngle.d","M,S,T", 0x46200079, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
221776cad711SPaolo Bonzini {"cabs.ngle.ps","M,S,T",0x46c00079, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
221876cad711SPaolo Bonzini {"cabs.ngle.s","M,S,T", 0x46000079, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
221976cad711SPaolo Bonzini {"cabs.ngt.d", "M,S,T", 0x4620007f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
222076cad711SPaolo Bonzini {"cabs.ngt.ps","M,S,T", 0x46c0007f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
222176cad711SPaolo Bonzini {"cabs.ngt.s", "M,S,T", 0x4600007f, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
222276cad711SPaolo Bonzini {"cabs.ole.d", "M,S,T", 0x46200076, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
222376cad711SPaolo Bonzini {"cabs.ole.ps","M,S,T", 0x46c00076, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
222476cad711SPaolo Bonzini {"cabs.ole.s", "M,S,T", 0x46000076, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
222576cad711SPaolo Bonzini {"cabs.olt.d", "M,S,T", 0x46200074, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
222676cad711SPaolo Bonzini {"cabs.olt.ps","M,S,T", 0x46c00074, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
222776cad711SPaolo Bonzini {"cabs.olt.s", "M,S,T", 0x46000074, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
222876cad711SPaolo Bonzini {"cabs.seq.d", "M,S,T", 0x4620007a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
222976cad711SPaolo Bonzini {"cabs.seq.ps","M,S,T", 0x46c0007a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
223076cad711SPaolo Bonzini {"cabs.seq.s", "M,S,T", 0x4600007a, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
223176cad711SPaolo Bonzini {"cabs.sf.d", "M,S,T", 0x46200078, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
223276cad711SPaolo Bonzini {"cabs.sf.ps", "M,S,T", 0x46c00078, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
223376cad711SPaolo Bonzini {"cabs.sf.s", "M,S,T", 0x46000078, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
223476cad711SPaolo Bonzini {"cabs.ueq.d", "M,S,T", 0x46200073, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
223576cad711SPaolo Bonzini {"cabs.ueq.ps","M,S,T", 0x46c00073, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
223676cad711SPaolo Bonzini {"cabs.ueq.s", "M,S,T", 0x46000073, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
223776cad711SPaolo Bonzini {"cabs.ule.d", "M,S,T", 0x46200077, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
223876cad711SPaolo Bonzini {"cabs.ule.ps","M,S,T", 0x46c00077, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
223976cad711SPaolo Bonzini {"cabs.ule.s", "M,S,T", 0x46000077, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
224076cad711SPaolo Bonzini {"cabs.ult.d", "M,S,T", 0x46200075, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
224176cad711SPaolo Bonzini {"cabs.ult.ps","M,S,T", 0x46c00075, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
224276cad711SPaolo Bonzini {"cabs.ult.s", "M,S,T", 0x46000075, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
224376cad711SPaolo Bonzini {"cabs.un.d", "M,S,T", 0x46200071, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
224476cad711SPaolo Bonzini {"cabs.un.ps", "M,S,T", 0x46c00071, 0xffe000ff, RD_S|RD_T|WR_CC|FP_D, 0, M3D },
224576cad711SPaolo Bonzini {"cabs.un.s", "M,S,T", 0x46000071, 0xffe000ff, RD_S|RD_T|WR_CC|FP_S, 0, M3D },
224676cad711SPaolo Bonzini /* CW4010 instructions which are aliases for the cache instruction. */
224776cad711SPaolo Bonzini {"flushi", "", 0xbc010000, 0xffffffff, 0, 0, L1 },
224876cad711SPaolo Bonzini {"flushd", "", 0xbc020000, 0xffffffff, 0, 0, L1 },
224976cad711SPaolo Bonzini {"flushid", "", 0xbc030000, 0xffffffff, 0, 0, L1 },
225076cad711SPaolo Bonzini {"wb", "o(b)", 0xbc040000, 0xfc1f0000, SM|RD_b, 0, L1 },
225176cad711SPaolo Bonzini {"cache", "k,o(b)", 0xbc000000, 0xfc000000, RD_b, 0, I3|I32|T3},
225276cad711SPaolo Bonzini {"cache", "k,A(b)", 0, (int) M_CACHE_AB, INSN_MACRO, 0, I3|I32|T3},
225376cad711SPaolo Bonzini {"ceil.l.d", "D,S", 0x4620000a, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
225476cad711SPaolo Bonzini {"ceil.l.s", "D,S", 0x4600000a, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
225576cad711SPaolo Bonzini {"ceil.w.d", "D,S", 0x4620000e, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 },
225676cad711SPaolo Bonzini {"ceil.w.s", "D,S", 0x4600000e, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 },
22575204ea79SLeon Alrae {"mfhc0", "t,G,H", 0x40400000, 0xffe007f8, LCD|WR_t|RD_C0, 0, I33},
22585204ea79SLeon Alrae {"mthc0", "t,G,H", 0x40c00000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC, 0, I33},
225976cad711SPaolo Bonzini {"cfc0", "t,G", 0x40400000, 0xffe007ff, LCD|WR_t|RD_C0, 0, I1 },
226076cad711SPaolo Bonzini {"cfc1", "t,G", 0x44400000, 0xffe007ff, LCD|WR_t|RD_C1|FP_S, 0, I1 },
226176cad711SPaolo Bonzini {"cfc1", "t,S", 0x44400000, 0xffe007ff, LCD|WR_t|RD_C1|FP_S, 0, I1 },
226276cad711SPaolo Bonzini /* cfc2 is at the bottom of the table. */
226376cad711SPaolo Bonzini /* cfc3 is at the bottom of the table. */
226476cad711SPaolo Bonzini {"cftc1", "d,E", 0x41000023, 0xffe007ff, TRAP|LCD|WR_d|RD_C1|FP_S, 0, MT32 },
226576cad711SPaolo Bonzini {"cftc1", "d,T", 0x41000023, 0xffe007ff, TRAP|LCD|WR_d|RD_C1|FP_S, 0, MT32 },
226676cad711SPaolo Bonzini {"cftc2", "d,E", 0x41000025, 0xffe007ff, TRAP|LCD|WR_d|RD_C2, 0, MT32 },
226776cad711SPaolo Bonzini {"clo", "U,s", 0x70000021, 0xfc0007ff, WR_d|WR_t|RD_s, 0, I32|N55 },
226876cad711SPaolo Bonzini {"clz", "U,s", 0x70000020, 0xfc0007ff, WR_d|WR_t|RD_s, 0, I32|N55 },
226976cad711SPaolo Bonzini {"ctc0", "t,G", 0x40c00000, 0xffe007ff, COD|RD_t|WR_CC, 0, I1 },
227076cad711SPaolo Bonzini {"ctc1", "t,G", 0x44c00000, 0xffe007ff, COD|RD_t|WR_CC|FP_S, 0, I1 },
227176cad711SPaolo Bonzini {"ctc1", "t,S", 0x44c00000, 0xffe007ff, COD|RD_t|WR_CC|FP_S, 0, I1 },
227276cad711SPaolo Bonzini /* ctc2 is at the bottom of the table. */
227376cad711SPaolo Bonzini /* ctc3 is at the bottom of the table. */
227476cad711SPaolo Bonzini {"cttc1", "t,g", 0x41800023, 0xffe007ff, TRAP|COD|RD_t|WR_CC|FP_S, 0, MT32 },
227576cad711SPaolo Bonzini {"cttc1", "t,S", 0x41800023, 0xffe007ff, TRAP|COD|RD_t|WR_CC|FP_S, 0, MT32 },
227676cad711SPaolo Bonzini {"cttc2", "t,g", 0x41800025, 0xffe007ff, TRAP|COD|RD_t|WR_CC, 0, MT32 },
227776cad711SPaolo Bonzini {"cvt.d.l", "D,S", 0x46a00021, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
227876cad711SPaolo Bonzini {"cvt.d.s", "D,S", 0x46000021, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I1 },
227976cad711SPaolo Bonzini {"cvt.d.w", "D,S", 0x46800021, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I1 },
228076cad711SPaolo Bonzini {"cvt.l.d", "D,S", 0x46200025, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
228176cad711SPaolo Bonzini {"cvt.l.s", "D,S", 0x46000025, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
228276cad711SPaolo Bonzini {"cvt.s.l", "D,S", 0x46a00020, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
228376cad711SPaolo Bonzini {"cvt.s.d", "D,S", 0x46200020, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I1 },
228476cad711SPaolo Bonzini {"cvt.s.w", "D,S", 0x46800020, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
228576cad711SPaolo Bonzini {"cvt.s.pl","D,S", 0x46c00028, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I5|I33 },
228676cad711SPaolo Bonzini {"cvt.s.pu","D,S", 0x46c00020, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I5|I33 },
228776cad711SPaolo Bonzini {"cvt.w.d", "D,S", 0x46200024, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I1 },
228876cad711SPaolo Bonzini {"cvt.w.s", "D,S", 0x46000024, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
228976cad711SPaolo Bonzini {"cvt.ps.pw", "D,S", 0x46800026, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, M3D },
229076cad711SPaolo Bonzini {"cvt.ps.s","D,V,T", 0x46000026, 0xffe0003f, WR_D|RD_S|RD_T|FP_S|FP_D, 0, I5|I33 },
229176cad711SPaolo Bonzini {"cvt.pw.ps", "D,S", 0x46c00024, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, M3D },
229276cad711SPaolo Bonzini {"dabs", "d,v", 0, (int) M_DABS, INSN_MACRO, 0, I3 },
229376cad711SPaolo Bonzini {"dadd", "d,v,t", 0x0000002c, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I3 },
229476cad711SPaolo Bonzini {"dadd", "t,r,I", 0, (int) M_DADD_I, INSN_MACRO, 0, I3 },
229576cad711SPaolo Bonzini {"daddi", "t,r,j", 0x60000000, 0xfc000000, WR_t|RD_s, 0, I3 },
229676cad711SPaolo Bonzini {"daddiu", "t,r,j", 0x64000000, 0xfc000000, WR_t|RD_s, 0, I3 },
229776cad711SPaolo Bonzini {"daddu", "d,v,t", 0x0000002d, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I3 },
229876cad711SPaolo Bonzini {"daddu", "t,r,I", 0, (int) M_DADDU_I, INSN_MACRO, 0, I3 },
229976cad711SPaolo Bonzini {"dbreak", "", 0x7000003f, 0xffffffff, 0, 0, N5 },
230076cad711SPaolo Bonzini {"dclo", "U,s", 0x70000025, 0xfc0007ff, RD_s|WR_d|WR_t, 0, I64|N55 },
230176cad711SPaolo Bonzini {"dclz", "U,s", 0x70000024, 0xfc0007ff, RD_s|WR_d|WR_t, 0, I64|N55 },
230276cad711SPaolo Bonzini /* dctr and dctw are used on the r5000. */
230376cad711SPaolo Bonzini {"dctr", "o(b)", 0xbc050000, 0xfc1f0000, RD_b, 0, I3 },
230476cad711SPaolo Bonzini {"dctw", "o(b)", 0xbc090000, 0xfc1f0000, RD_b, 0, I3 },
230576cad711SPaolo Bonzini {"deret", "", 0x4200001f, 0xffffffff, 0, 0, I32|G2 },
230676cad711SPaolo Bonzini {"dext", "t,r,I,+I", 0, (int) M_DEXT, INSN_MACRO, 0, I65 },
230776cad711SPaolo Bonzini {"dext", "t,r,+A,+C", 0x7c000003, 0xfc00003f, WR_t|RD_s, 0, I65 },
230876cad711SPaolo Bonzini {"dextm", "t,r,+A,+G", 0x7c000001, 0xfc00003f, WR_t|RD_s, 0, I65 },
230976cad711SPaolo Bonzini {"dextu", "t,r,+E,+H", 0x7c000002, 0xfc00003f, WR_t|RD_s, 0, I65 },
231076cad711SPaolo Bonzini /* For ddiv, see the comments about div. */
231176cad711SPaolo Bonzini {"ddiv", "z,s,t", 0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I3 },
231276cad711SPaolo Bonzini {"ddiv", "d,v,t", 0, (int) M_DDIV_3, INSN_MACRO, 0, I3 },
231376cad711SPaolo Bonzini {"ddiv", "d,v,I", 0, (int) M_DDIV_3I, INSN_MACRO, 0, I3 },
231476cad711SPaolo Bonzini /* For ddivu, see the comments about div. */
231576cad711SPaolo Bonzini {"ddivu", "z,s,t", 0x0000001f, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I3 },
231676cad711SPaolo Bonzini {"ddivu", "d,v,t", 0, (int) M_DDIVU_3, INSN_MACRO, 0, I3 },
231776cad711SPaolo Bonzini {"ddivu", "d,v,I", 0, (int) M_DDIVU_3I, INSN_MACRO, 0, I3 },
231876cad711SPaolo Bonzini {"di", "", 0x41606000, 0xffffffff, WR_t|WR_C0, 0, I33 },
231976cad711SPaolo Bonzini {"di", "t", 0x41606000, 0xffe0ffff, WR_t|WR_C0, 0, I33 },
232076cad711SPaolo Bonzini {"dins", "t,r,I,+I", 0, (int) M_DINS, INSN_MACRO, 0, I65 },
232176cad711SPaolo Bonzini {"dins", "t,r,+A,+B", 0x7c000007, 0xfc00003f, WR_t|RD_s, 0, I65 },
232276cad711SPaolo Bonzini {"dinsm", "t,r,+A,+F", 0x7c000005, 0xfc00003f, WR_t|RD_s, 0, I65 },
232376cad711SPaolo Bonzini {"dinsu", "t,r,+E,+F", 0x7c000006, 0xfc00003f, WR_t|RD_s, 0, I65 },
232476cad711SPaolo Bonzini /* The MIPS assembler treats the div opcode with two operands as
232576cad711SPaolo Bonzini though the first operand appeared twice (the first operand is both
232676cad711SPaolo Bonzini a source and a destination). To get the div machine instruction,
232776cad711SPaolo Bonzini you must use an explicit destination of $0. */
232876cad711SPaolo Bonzini {"div", "z,s,t", 0x0000001a, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I1 },
232976cad711SPaolo Bonzini {"div", "z,t", 0x0000001a, 0xffe0ffff, RD_s|RD_t|WR_HILO, 0, I1 },
233076cad711SPaolo Bonzini {"div", "d,v,t", 0, (int) M_DIV_3, INSN_MACRO, 0, I1 },
233176cad711SPaolo Bonzini {"div", "d,v,I", 0, (int) M_DIV_3I, INSN_MACRO, 0, I1 },
233276cad711SPaolo Bonzini {"div.d", "D,V,T", 0x46200003, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I1 },
233376cad711SPaolo Bonzini {"div.s", "D,V,T", 0x46000003, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I1 },
233476cad711SPaolo Bonzini {"div.ps", "D,V,T", 0x46c00003, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, SB1 },
233576cad711SPaolo Bonzini /* For divu, see the comments about div. */
233676cad711SPaolo Bonzini {"divu", "z,s,t", 0x0000001b, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I1 },
233776cad711SPaolo Bonzini {"divu", "z,t", 0x0000001b, 0xffe0ffff, RD_s|RD_t|WR_HILO, 0, I1 },
233876cad711SPaolo Bonzini {"divu", "d,v,t", 0, (int) M_DIVU_3, INSN_MACRO, 0, I1 },
233976cad711SPaolo Bonzini {"divu", "d,v,I", 0, (int) M_DIVU_3I, INSN_MACRO, 0, I1 },
234076cad711SPaolo Bonzini {"dla", "t,A(b)", 0, (int) M_DLA_AB, INSN_MACRO, 0, I3 },
234176cad711SPaolo Bonzini {"dlca", "t,A(b)", 0, (int) M_DLCA_AB, INSN_MACRO, 0, I3 },
234276cad711SPaolo Bonzini {"dli", "t,j", 0x24000000, 0xffe00000, WR_t, 0, I3 }, /* addiu */
234376cad711SPaolo Bonzini {"dli", "t,i", 0x34000000, 0xffe00000, WR_t, 0, I3 }, /* ori */
234476cad711SPaolo Bonzini {"dli", "t,I", 0, (int) M_DLI, INSN_MACRO, 0, I3 },
234576cad711SPaolo Bonzini {"dmacc", "d,s,t", 0x00000029, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d, 0, N412 },
234676cad711SPaolo Bonzini {"dmacchi", "d,s,t", 0x00000229, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d, 0, N412 },
234776cad711SPaolo Bonzini {"dmacchis", "d,s,t", 0x00000629, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d, 0, N412 },
234876cad711SPaolo Bonzini {"dmacchiu", "d,s,t", 0x00000269, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d, 0, N412 },
234976cad711SPaolo Bonzini {"dmacchius", "d,s,t", 0x00000669, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d, 0, N412 },
235076cad711SPaolo Bonzini {"dmaccs", "d,s,t", 0x00000429, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d, 0, N412 },
235176cad711SPaolo Bonzini {"dmaccu", "d,s,t", 0x00000069, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d, 0, N412 },
235276cad711SPaolo Bonzini {"dmaccus", "d,s,t", 0x00000469, 0xfc0007ff, RD_s|RD_t|WR_LO|WR_d, 0, N412 },
235376cad711SPaolo Bonzini {"dmadd16", "s,t", 0x00000029, 0xfc00ffff, RD_s|RD_t|MOD_LO, 0, N411 },
235476cad711SPaolo Bonzini {"dmfc0", "t,G", 0x40200000, 0xffe007ff, LCD|WR_t|RD_C0, 0, I3 },
235576cad711SPaolo Bonzini {"dmfc0", "t,+D", 0x40200000, 0xffe007f8, LCD|WR_t|RD_C0, 0, I64 },
235676cad711SPaolo Bonzini {"dmfc0", "t,G,H", 0x40200000, 0xffe007f8, LCD|WR_t|RD_C0, 0, I64 },
235776cad711SPaolo Bonzini {"dmt", "", 0x41600bc1, 0xffffffff, TRAP, 0, MT32 },
235876cad711SPaolo Bonzini {"dmt", "t", 0x41600bc1, 0xffe0ffff, TRAP|WR_t, 0, MT32 },
235976cad711SPaolo Bonzini {"dmtc0", "t,G", 0x40a00000, 0xffe007ff, COD|RD_t|WR_C0|WR_CC, 0, I3 },
236076cad711SPaolo Bonzini {"dmtc0", "t,+D", 0x40a00000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC, 0, I64 },
236176cad711SPaolo Bonzini {"dmtc0", "t,G,H", 0x40a00000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC, 0, I64 },
236276cad711SPaolo Bonzini {"dmfc1", "t,S", 0x44200000, 0xffe007ff, LCD|WR_t|RD_S|FP_D, 0, I3 },
236376cad711SPaolo Bonzini {"dmfc1", "t,G", 0x44200000, 0xffe007ff, LCD|WR_t|RD_S|FP_D, 0, I3 },
236476cad711SPaolo Bonzini {"dmtc1", "t,S", 0x44a00000, 0xffe007ff, COD|RD_t|WR_S|FP_D, 0, I3 },
236576cad711SPaolo Bonzini {"dmtc1", "t,G", 0x44a00000, 0xffe007ff, COD|RD_t|WR_S|FP_D, 0, I3 },
236676cad711SPaolo Bonzini /* dmfc2 is at the bottom of the table. */
236776cad711SPaolo Bonzini /* dmtc2 is at the bottom of the table. */
236876cad711SPaolo Bonzini /* dmfc3 is at the bottom of the table. */
236976cad711SPaolo Bonzini /* dmtc3 is at the bottom of the table. */
237076cad711SPaolo Bonzini {"dmul", "d,v,t", 0, (int) M_DMUL, INSN_MACRO, 0, I3 },
237176cad711SPaolo Bonzini {"dmul", "d,v,I", 0, (int) M_DMUL_I, INSN_MACRO, 0, I3 },
237276cad711SPaolo Bonzini {"dmulo", "d,v,t", 0, (int) M_DMULO, INSN_MACRO, 0, I3 },
237376cad711SPaolo Bonzini {"dmulo", "d,v,I", 0, (int) M_DMULO_I, INSN_MACRO, 0, I3 },
237476cad711SPaolo Bonzini {"dmulou", "d,v,t", 0, (int) M_DMULOU, INSN_MACRO, 0, I3 },
237576cad711SPaolo Bonzini {"dmulou", "d,v,I", 0, (int) M_DMULOU_I, INSN_MACRO, 0, I3 },
237676cad711SPaolo Bonzini {"dmult", "s,t", 0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I3 },
237776cad711SPaolo Bonzini {"dmultu", "s,t", 0x0000001d, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I3 },
237876cad711SPaolo Bonzini {"dneg", "d,w", 0x0000002e, 0xffe007ff, WR_d|RD_t, 0, I3 }, /* dsub 0 */
237976cad711SPaolo Bonzini {"dnegu", "d,w", 0x0000002f, 0xffe007ff, WR_d|RD_t, 0, I3 }, /* dsubu 0*/
238076cad711SPaolo Bonzini {"drem", "z,s,t", 0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I3 },
238176cad711SPaolo Bonzini {"drem", "d,v,t", 3, (int) M_DREM_3, INSN_MACRO, 0, I3 },
238276cad711SPaolo Bonzini {"drem", "d,v,I", 3, (int) M_DREM_3I, INSN_MACRO, 0, I3 },
238376cad711SPaolo Bonzini {"dremu", "z,s,t", 0x0000001f, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I3 },
238476cad711SPaolo Bonzini {"dremu", "d,v,t", 3, (int) M_DREMU_3, INSN_MACRO, 0, I3 },
238576cad711SPaolo Bonzini {"dremu", "d,v,I", 3, (int) M_DREMU_3I, INSN_MACRO, 0, I3 },
238676cad711SPaolo Bonzini {"dret", "", 0x7000003e, 0xffffffff, 0, 0, N5 },
238776cad711SPaolo Bonzini {"drol", "d,v,t", 0, (int) M_DROL, INSN_MACRO, 0, I3 },
238876cad711SPaolo Bonzini {"drol", "d,v,I", 0, (int) M_DROL_I, INSN_MACRO, 0, I3 },
238976cad711SPaolo Bonzini {"dror", "d,v,t", 0, (int) M_DROR, INSN_MACRO, 0, I3 },
239076cad711SPaolo Bonzini {"dror", "d,v,I", 0, (int) M_DROR_I, INSN_MACRO, 0, I3 },
239176cad711SPaolo Bonzini {"dror", "d,w,<", 0x0020003a, 0xffe0003f, WR_d|RD_t, 0, N5|I65 },
239276cad711SPaolo Bonzini {"drorv", "d,t,s", 0x00000056, 0xfc0007ff, RD_t|RD_s|WR_d, 0, N5|I65 },
239376cad711SPaolo Bonzini {"dror32", "d,w,<", 0x0020003e, 0xffe0003f, WR_d|RD_t, 0, N5|I65 },
239476cad711SPaolo Bonzini {"drotl", "d,v,t", 0, (int) M_DROL, INSN_MACRO, 0, I65 },
239576cad711SPaolo Bonzini {"drotl", "d,v,I", 0, (int) M_DROL_I, INSN_MACRO, 0, I65 },
239676cad711SPaolo Bonzini {"drotr", "d,v,t", 0, (int) M_DROR, INSN_MACRO, 0, I65 },
239776cad711SPaolo Bonzini {"drotr", "d,v,I", 0, (int) M_DROR_I, INSN_MACRO, 0, I65 },
239876cad711SPaolo Bonzini {"drotrv", "d,t,s", 0x00000056, 0xfc0007ff, RD_t|RD_s|WR_d, 0, I65 },
239976cad711SPaolo Bonzini {"drotr32", "d,w,<", 0x0020003e, 0xffe0003f, WR_d|RD_t, 0, I65 },
240076cad711SPaolo Bonzini {"dsbh", "d,w", 0x7c0000a4, 0xffe007ff, WR_d|RD_t, 0, I65 },
240176cad711SPaolo Bonzini {"dshd", "d,w", 0x7c000164, 0xffe007ff, WR_d|RD_t, 0, I65 },
240276cad711SPaolo Bonzini {"dsllv", "d,t,s", 0x00000014, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I3 },
240376cad711SPaolo Bonzini {"dsll32", "d,w,<", 0x0000003c, 0xffe0003f, WR_d|RD_t, 0, I3 },
240476cad711SPaolo Bonzini {"dsll", "d,w,s", 0x00000014, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I3 }, /* dsllv */
240576cad711SPaolo Bonzini {"dsll", "d,w,>", 0x0000003c, 0xffe0003f, WR_d|RD_t, 0, I3 }, /* dsll32 */
240676cad711SPaolo Bonzini {"dsll", "d,w,<", 0x00000038, 0xffe0003f, WR_d|RD_t, 0, I3 },
240776cad711SPaolo Bonzini {"dsrav", "d,t,s", 0x00000017, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I3 },
240876cad711SPaolo Bonzini {"dsra32", "d,w,<", 0x0000003f, 0xffe0003f, WR_d|RD_t, 0, I3 },
240976cad711SPaolo Bonzini {"dsra", "d,w,s", 0x00000017, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I3 }, /* dsrav */
241076cad711SPaolo Bonzini {"dsra", "d,w,>", 0x0000003f, 0xffe0003f, WR_d|RD_t, 0, I3 }, /* dsra32 */
241176cad711SPaolo Bonzini {"dsra", "d,w,<", 0x0000003b, 0xffe0003f, WR_d|RD_t, 0, I3 },
241276cad711SPaolo Bonzini {"dsrlv", "d,t,s", 0x00000016, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I3 },
241376cad711SPaolo Bonzini {"dsrl32", "d,w,<", 0x0000003e, 0xffe0003f, WR_d|RD_t, 0, I3 },
241476cad711SPaolo Bonzini {"dsrl", "d,w,s", 0x00000016, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I3 }, /* dsrlv */
241576cad711SPaolo Bonzini {"dsrl", "d,w,>", 0x0000003e, 0xffe0003f, WR_d|RD_t, 0, I3 }, /* dsrl32 */
241676cad711SPaolo Bonzini {"dsrl", "d,w,<", 0x0000003a, 0xffe0003f, WR_d|RD_t, 0, I3 },
241776cad711SPaolo Bonzini {"dsub", "d,v,t", 0x0000002e, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I3 },
241876cad711SPaolo Bonzini {"dsub", "d,v,I", 0, (int) M_DSUB_I, INSN_MACRO, 0, I3 },
241976cad711SPaolo Bonzini {"dsubu", "d,v,t", 0x0000002f, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I3 },
242076cad711SPaolo Bonzini {"dsubu", "d,v,I", 0, (int) M_DSUBU_I, INSN_MACRO, 0, I3 },
242176cad711SPaolo Bonzini {"dvpe", "", 0x41600001, 0xffffffff, TRAP, 0, MT32 },
242276cad711SPaolo Bonzini {"dvpe", "t", 0x41600001, 0xffe0ffff, TRAP|WR_t, 0, MT32 },
242376cad711SPaolo Bonzini {"ei", "", 0x41606020, 0xffffffff, WR_t|WR_C0, 0, I33 },
242476cad711SPaolo Bonzini {"ei", "t", 0x41606020, 0xffe0ffff, WR_t|WR_C0, 0, I33 },
242576cad711SPaolo Bonzini {"emt", "", 0x41600be1, 0xffffffff, TRAP, 0, MT32 },
242676cad711SPaolo Bonzini {"emt", "t", 0x41600be1, 0xffe0ffff, TRAP|WR_t, 0, MT32 },
242776cad711SPaolo Bonzini {"eret", "", 0x42000018, 0xffffffff, 0, 0, I3|I32 },
2428ce9782f4SLeon Alrae {"eretnc", "", 0x42000058, 0xffffffff, 0, 0, I33},
242976cad711SPaolo Bonzini {"evpe", "", 0x41600021, 0xffffffff, TRAP, 0, MT32 },
243076cad711SPaolo Bonzini {"evpe", "t", 0x41600021, 0xffe0ffff, TRAP|WR_t, 0, MT32 },
243176cad711SPaolo Bonzini {"ext", "t,r,+A,+C", 0x7c000000, 0xfc00003f, WR_t|RD_s, 0, I33 },
243276cad711SPaolo Bonzini {"floor.l.d", "D,S", 0x4620000b, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
243376cad711SPaolo Bonzini {"floor.l.s", "D,S", 0x4600000b, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
243476cad711SPaolo Bonzini {"floor.w.d", "D,S", 0x4620000f, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 },
243576cad711SPaolo Bonzini {"floor.w.s", "D,S", 0x4600000f, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 },
243676cad711SPaolo Bonzini {"hibernate","", 0x42000023, 0xffffffff, 0, 0, V1 },
243776cad711SPaolo Bonzini {"ins", "t,r,+A,+B", 0x7c000004, 0xfc00003f, WR_t|RD_s, 0, I33 },
243876cad711SPaolo Bonzini {"jr", "s", 0x00000008, 0xfc1fffff, UBD|RD_s, 0, I1 },
2439d76f3653SJames Hogan {"jr", "s", 0x00000009, 0xfc1fffff, UBD|RD_s, 0, I32R6 }, /* jalr */
244076cad711SPaolo Bonzini /* jr.hb is officially MIPS{32,64}R2, but it works on R1 as jr with
244176cad711SPaolo Bonzini the same hazard barrier effect. */
244276cad711SPaolo Bonzini {"jr.hb", "s", 0x00000408, 0xfc1fffff, UBD|RD_s, 0, I32 },
2443d76f3653SJames Hogan {"jr.hb", "s", 0x00000409, 0xfc1fffff, UBD|RD_s, 0, I32R6 }, /* jalr.hb */
244476cad711SPaolo Bonzini {"j", "s", 0x00000008, 0xfc1fffff, UBD|RD_s, 0, I1 }, /* jr */
244576cad711SPaolo Bonzini /* SVR4 PIC code requires special handling for j, so it must be a
244676cad711SPaolo Bonzini macro. */
244776cad711SPaolo Bonzini {"j", "a", 0, (int) M_J_A, INSN_MACRO, 0, I1 },
244876cad711SPaolo Bonzini /* This form of j is used by the disassembler and internally by the
244976cad711SPaolo Bonzini assembler, but will never match user input (because the line above
245076cad711SPaolo Bonzini will match first). */
245176cad711SPaolo Bonzini {"j", "a", 0x08000000, 0xfc000000, UBD, 0, I1 },
245276cad711SPaolo Bonzini {"jalr", "s", 0x0000f809, 0xfc1fffff, UBD|RD_s|WR_d, 0, I1 },
245376cad711SPaolo Bonzini {"jalr", "d,s", 0x00000009, 0xfc1f07ff, UBD|RD_s|WR_d, 0, I1 },
245476cad711SPaolo Bonzini /* jalr.hb is officially MIPS{32,64}R2, but it works on R1 as jalr
245576cad711SPaolo Bonzini with the same hazard barrier effect. */
245676cad711SPaolo Bonzini {"jalr.hb", "s", 0x0000fc09, 0xfc1fffff, UBD|RD_s|WR_d, 0, I32 },
245776cad711SPaolo Bonzini {"jalr.hb", "d,s", 0x00000409, 0xfc1f07ff, UBD|RD_s|WR_d, 0, I32 },
245876cad711SPaolo Bonzini /* SVR4 PIC code requires special handling for jal, so it must be a
245976cad711SPaolo Bonzini macro. */
246076cad711SPaolo Bonzini {"jal", "d,s", 0, (int) M_JAL_2, INSN_MACRO, 0, I1 },
246176cad711SPaolo Bonzini {"jal", "s", 0, (int) M_JAL_1, INSN_MACRO, 0, I1 },
246276cad711SPaolo Bonzini {"jal", "a", 0, (int) M_JAL_A, INSN_MACRO, 0, I1 },
246376cad711SPaolo Bonzini /* This form of jal is used by the disassembler and internally by the
246476cad711SPaolo Bonzini assembler, but will never match user input (because the line above
246576cad711SPaolo Bonzini will match first). */
246676cad711SPaolo Bonzini {"jal", "a", 0x0c000000, 0xfc000000, UBD|WR_31, 0, I1 },
246776cad711SPaolo Bonzini {"jalx", "a", 0x74000000, 0xfc000000, UBD|WR_31, 0, I16 },
246876cad711SPaolo Bonzini {"la", "t,A(b)", 0, (int) M_LA_AB, INSN_MACRO, 0, I1 },
246976cad711SPaolo Bonzini {"lb", "t,o(b)", 0x80000000, 0xfc000000, LDD|RD_b|WR_t, 0, I1 },
247076cad711SPaolo Bonzini {"lb", "t,A(b)", 0, (int) M_LB_AB, INSN_MACRO, 0, I1 },
247176cad711SPaolo Bonzini {"lbu", "t,o(b)", 0x90000000, 0xfc000000, LDD|RD_b|WR_t, 0, I1 },
247276cad711SPaolo Bonzini {"lbu", "t,A(b)", 0, (int) M_LBU_AB, INSN_MACRO, 0, I1 },
247376cad711SPaolo Bonzini {"lca", "t,A(b)", 0, (int) M_LCA_AB, INSN_MACRO, 0, I1 },
247476cad711SPaolo Bonzini {"ld", "t,o(b)", 0xdc000000, 0xfc000000, WR_t|RD_b, 0, I3 },
247576cad711SPaolo Bonzini {"ld", "t,o(b)", 0, (int) M_LD_OB, INSN_MACRO, 0, I1 },
247676cad711SPaolo Bonzini {"ld", "t,A(b)", 0, (int) M_LD_AB, INSN_MACRO, 0, I1 },
247776cad711SPaolo Bonzini {"ldc1", "T,o(b)", 0xd4000000, 0xfc000000, CLD|RD_b|WR_T|FP_D, 0, I2 },
247876cad711SPaolo Bonzini {"ldc1", "E,o(b)", 0xd4000000, 0xfc000000, CLD|RD_b|WR_T|FP_D, 0, I2 },
247976cad711SPaolo Bonzini {"ldc1", "T,A(b)", 0, (int) M_LDC1_AB, INSN_MACRO, 0, I2 },
248076cad711SPaolo Bonzini {"ldc1", "E,A(b)", 0, (int) M_LDC1_AB, INSN_MACRO, 0, I2 },
248176cad711SPaolo Bonzini {"l.d", "T,o(b)", 0xd4000000, 0xfc000000, CLD|RD_b|WR_T|FP_D, 0, I2 }, /* ldc1 */
248276cad711SPaolo Bonzini {"l.d", "T,o(b)", 0, (int) M_L_DOB, INSN_MACRO, 0, I1 },
248376cad711SPaolo Bonzini {"l.d", "T,A(b)", 0, (int) M_L_DAB, INSN_MACRO, 0, I1 },
248476cad711SPaolo Bonzini {"ldc2", "E,o(b)", 0xd8000000, 0xfc000000, CLD|RD_b|WR_CC, 0, I2 },
248576cad711SPaolo Bonzini {"ldc2", "E,A(b)", 0, (int) M_LDC2_AB, INSN_MACRO, 0, I2 },
248676cad711SPaolo Bonzini {"ldc3", "E,o(b)", 0xdc000000, 0xfc000000, CLD|RD_b|WR_CC, 0, I2 },
248776cad711SPaolo Bonzini {"ldc3", "E,A(b)", 0, (int) M_LDC3_AB, INSN_MACRO, 0, I2 },
248876cad711SPaolo Bonzini {"ldl", "t,o(b)", 0x68000000, 0xfc000000, LDD|WR_t|RD_b, 0, I3 },
248976cad711SPaolo Bonzini {"ldl", "t,A(b)", 0, (int) M_LDL_AB, INSN_MACRO, 0, I3 },
249076cad711SPaolo Bonzini {"ldr", "t,o(b)", 0x6c000000, 0xfc000000, LDD|WR_t|RD_b, 0, I3 },
249176cad711SPaolo Bonzini {"ldr", "t,A(b)", 0, (int) M_LDR_AB, INSN_MACRO, 0, I3 },
249276cad711SPaolo Bonzini {"ldxc1", "D,t(b)", 0x4c000001, 0xfc00f83f, LDD|WR_D|RD_t|RD_b|FP_D, 0, I4|I33 },
249376cad711SPaolo Bonzini {"lh", "t,o(b)", 0x84000000, 0xfc000000, LDD|RD_b|WR_t, 0, I1 },
249476cad711SPaolo Bonzini {"lh", "t,A(b)", 0, (int) M_LH_AB, INSN_MACRO, 0, I1 },
249576cad711SPaolo Bonzini {"lhu", "t,o(b)", 0x94000000, 0xfc000000, LDD|RD_b|WR_t, 0, I1 },
249676cad711SPaolo Bonzini {"lhu", "t,A(b)", 0, (int) M_LHU_AB, INSN_MACRO, 0, I1 },
249776cad711SPaolo Bonzini /* li is at the start of the table. */
249876cad711SPaolo Bonzini {"li.d", "t,F", 0, (int) M_LI_D, INSN_MACRO, 0, I1 },
249976cad711SPaolo Bonzini {"li.d", "T,L", 0, (int) M_LI_DD, INSN_MACRO, 0, I1 },
250076cad711SPaolo Bonzini {"li.s", "t,f", 0, (int) M_LI_S, INSN_MACRO, 0, I1 },
250176cad711SPaolo Bonzini {"li.s", "T,l", 0, (int) M_LI_SS, INSN_MACRO, 0, I1 },
250276cad711SPaolo Bonzini {"ll", "t,o(b)", 0xc0000000, 0xfc000000, LDD|RD_b|WR_t, 0, I2 },
250376cad711SPaolo Bonzini {"ll", "t,A(b)", 0, (int) M_LL_AB, INSN_MACRO, 0, I2 },
250476cad711SPaolo Bonzini {"lld", "t,o(b)", 0xd0000000, 0xfc000000, LDD|RD_b|WR_t, 0, I3 },
250576cad711SPaolo Bonzini {"lld", "t,A(b)", 0, (int) M_LLD_AB, INSN_MACRO, 0, I3 },
250676cad711SPaolo Bonzini {"lui", "t,u", 0x3c000000, 0xffe00000, WR_t, 0, I1 },
2507d4ea6acdSLeon Alrae {"aui", "s,t,u", 0x3c000000, 0xfc000000, RD_s|WR_t, 0, I32R6},
250876cad711SPaolo Bonzini {"luxc1", "D,t(b)", 0x4c000005, 0xfc00f83f, LDD|WR_D|RD_t|RD_b|FP_D, 0, I5|I33|N55},
250976cad711SPaolo Bonzini {"lw", "t,o(b)", 0x8c000000, 0xfc000000, LDD|RD_b|WR_t, 0, I1 },
251076cad711SPaolo Bonzini {"lw", "t,A(b)", 0, (int) M_LW_AB, INSN_MACRO, 0, I1 },
251176cad711SPaolo Bonzini {"lwc0", "E,o(b)", 0xc0000000, 0xfc000000, CLD|RD_b|WR_CC, 0, I1 },
251276cad711SPaolo Bonzini {"lwc0", "E,A(b)", 0, (int) M_LWC0_AB, INSN_MACRO, 0, I1 },
251376cad711SPaolo Bonzini {"lwc1", "T,o(b)", 0xc4000000, 0xfc000000, CLD|RD_b|WR_T|FP_S, 0, I1 },
251476cad711SPaolo Bonzini {"lwc1", "E,o(b)", 0xc4000000, 0xfc000000, CLD|RD_b|WR_T|FP_S, 0, I1 },
251576cad711SPaolo Bonzini {"lwc1", "T,A(b)", 0, (int) M_LWC1_AB, INSN_MACRO, 0, I1 },
251676cad711SPaolo Bonzini {"lwc1", "E,A(b)", 0, (int) M_LWC1_AB, INSN_MACRO, 0, I1 },
251776cad711SPaolo Bonzini {"l.s", "T,o(b)", 0xc4000000, 0xfc000000, CLD|RD_b|WR_T|FP_S, 0, I1 }, /* lwc1 */
251876cad711SPaolo Bonzini {"l.s", "T,A(b)", 0, (int) M_LWC1_AB, INSN_MACRO, 0, I1 },
251976cad711SPaolo Bonzini {"lwc2", "E,o(b)", 0xc8000000, 0xfc000000, CLD|RD_b|WR_CC, 0, I1 },
252076cad711SPaolo Bonzini {"lwc2", "E,A(b)", 0, (int) M_LWC2_AB, INSN_MACRO, 0, I1 },
252176cad711SPaolo Bonzini {"lwc3", "E,o(b)", 0xcc000000, 0xfc000000, CLD|RD_b|WR_CC, 0, I1 },
252276cad711SPaolo Bonzini {"lwc3", "E,A(b)", 0, (int) M_LWC3_AB, INSN_MACRO, 0, I1 },
252376cad711SPaolo Bonzini {"lwl", "t,o(b)", 0x88000000, 0xfc000000, LDD|RD_b|WR_t, 0, I1 },
252476cad711SPaolo Bonzini {"lwl", "t,A(b)", 0, (int) M_LWL_AB, INSN_MACRO, 0, I1 },
252576cad711SPaolo Bonzini {"lcache", "t,o(b)", 0x88000000, 0xfc000000, LDD|RD_b|WR_t, 0, I2 }, /* same */
252676cad711SPaolo Bonzini {"lcache", "t,A(b)", 0, (int) M_LWL_AB, INSN_MACRO, 0, I2 }, /* as lwl */
252776cad711SPaolo Bonzini {"lwr", "t,o(b)", 0x98000000, 0xfc000000, LDD|RD_b|WR_t, 0, I1 },
252876cad711SPaolo Bonzini {"lwr", "t,A(b)", 0, (int) M_LWR_AB, INSN_MACRO, 0, I1 },
252976cad711SPaolo Bonzini {"flush", "t,o(b)", 0x98000000, 0xfc000000, LDD|RD_b|WR_t, 0, I2 }, /* same */
253076cad711SPaolo Bonzini {"flush", "t,A(b)", 0, (int) M_LWR_AB, INSN_MACRO, 0, I2 }, /* as lwr */
253176cad711SPaolo Bonzini {"fork", "d,s,t", 0x7c000008, 0xfc0007ff, TRAP|WR_d|RD_s|RD_t, 0, MT32 },
253276cad711SPaolo Bonzini {"lwu", "t,o(b)", 0x9c000000, 0xfc000000, LDD|RD_b|WR_t, 0, I3 },
253376cad711SPaolo Bonzini {"lwu", "t,A(b)", 0, (int) M_LWU_AB, INSN_MACRO, 0, I3 },
253476cad711SPaolo Bonzini {"lwxc1", "D,t(b)", 0x4c000000, 0xfc00f83f, LDD|WR_D|RD_t|RD_b|FP_D, 0, I4|I33 },
253576cad711SPaolo Bonzini {"lwxs", "d,t(b)", 0x70000088, 0xfc0007ff, LDD|RD_b|RD_t|WR_d, 0, SMT },
253676cad711SPaolo Bonzini {"macc", "d,s,t", 0x00000028, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
253776cad711SPaolo Bonzini {"macc", "d,s,t", 0x00000158, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
253876cad711SPaolo Bonzini {"maccs", "d,s,t", 0x00000428, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
253976cad711SPaolo Bonzini {"macchi", "d,s,t", 0x00000228, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
254076cad711SPaolo Bonzini {"macchi", "d,s,t", 0x00000358, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
254176cad711SPaolo Bonzini {"macchis", "d,s,t", 0x00000628, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
254276cad711SPaolo Bonzini {"macchiu", "d,s,t", 0x00000268, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
254376cad711SPaolo Bonzini {"macchiu", "d,s,t", 0x00000359, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
254476cad711SPaolo Bonzini {"macchius","d,s,t", 0x00000668, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
254576cad711SPaolo Bonzini {"maccu", "d,s,t", 0x00000068, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
254676cad711SPaolo Bonzini {"maccu", "d,s,t", 0x00000159, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
254776cad711SPaolo Bonzini {"maccus", "d,s,t", 0x00000468, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N412 },
254876cad711SPaolo Bonzini {"mad", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, P3 },
254976cad711SPaolo Bonzini {"madu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, P3 },
255076cad711SPaolo Bonzini {"madd.d", "D,R,S,T", 0x4c000021, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4|I33 },
255176cad711SPaolo Bonzini {"madd.s", "D,R,S,T", 0x4c000020, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0, I4|I33 },
255276cad711SPaolo Bonzini {"madd.ps", "D,R,S,T", 0x4c000026, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5|I33 },
255376cad711SPaolo Bonzini {"madd", "s,t", 0x0000001c, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
255476cad711SPaolo Bonzini {"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 },
255576cad711SPaolo Bonzini {"madd", "s,t", 0x70000000, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, G1 },
255676cad711SPaolo Bonzini {"madd", "7,s,t", 0x70000000, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
255776cad711SPaolo Bonzini {"madd", "d,s,t", 0x70000000, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
255876cad711SPaolo Bonzini {"maddp", "s,t", 0x70000441, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, SMT },
255976cad711SPaolo Bonzini {"maddu", "s,t", 0x0000001d, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
256076cad711SPaolo Bonzini {"maddu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 },
256176cad711SPaolo Bonzini {"maddu", "s,t", 0x70000001, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, G1 },
256276cad711SPaolo Bonzini {"maddu", "7,s,t", 0x70000001, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
256376cad711SPaolo Bonzini {"maddu", "d,s,t", 0x70000001, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
256476cad711SPaolo Bonzini {"madd16", "s,t", 0x00000028, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, N411 },
256576cad711SPaolo Bonzini {"max.ob", "X,Y,Q", 0x78000007, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
256676cad711SPaolo Bonzini {"max.ob", "D,S,T", 0x4ac00007, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
256776cad711SPaolo Bonzini {"max.ob", "D,S,T[e]", 0x48000007, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
256876cad711SPaolo Bonzini {"max.ob", "D,S,k", 0x4bc00007, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
256976cad711SPaolo Bonzini {"max.qh", "X,Y,Q", 0x78200007, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
257076cad711SPaolo Bonzini {"mfpc", "t,P", 0x4000c801, 0xffe0ffc1, LCD|WR_t|RD_C0, 0, M1|N5 },
257176cad711SPaolo Bonzini {"mfps", "t,P", 0x4000c800, 0xffe0ffc1, LCD|WR_t|RD_C0, 0, M1|N5 },
257276cad711SPaolo Bonzini {"mftacx", "d", 0x41020021, 0xffff07ff, TRAP|WR_d|RD_a, 0, MT32 },
257376cad711SPaolo Bonzini {"mftacx", "d,*", 0x41020021, 0xfff307ff, TRAP|WR_d|RD_a, 0, MT32 },
257476cad711SPaolo Bonzini {"mftc0", "d,+t", 0x41000000, 0xffe007ff, TRAP|LCD|WR_d|RD_C0, 0, MT32 },
257576cad711SPaolo Bonzini {"mftc0", "d,+T", 0x41000000, 0xffe007f8, TRAP|LCD|WR_d|RD_C0, 0, MT32 },
257676cad711SPaolo Bonzini {"mftc0", "d,E,H", 0x41000000, 0xffe007f8, TRAP|LCD|WR_d|RD_C0, 0, MT32 },
257776cad711SPaolo Bonzini {"mftc1", "d,T", 0x41000022, 0xffe007ff, TRAP|LCD|WR_d|RD_T|FP_S, 0, MT32 },
257876cad711SPaolo Bonzini {"mftc1", "d,E", 0x41000022, 0xffe007ff, TRAP|LCD|WR_d|RD_T|FP_S, 0, MT32 },
257976cad711SPaolo Bonzini {"mftc2", "d,E", 0x41000024, 0xffe007ff, TRAP|LCD|WR_d|RD_C2, 0, MT32 },
258076cad711SPaolo Bonzini {"mftdsp", "d", 0x41100021, 0xffff07ff, TRAP|WR_d, 0, MT32 },
258176cad711SPaolo Bonzini {"mftgpr", "d,t", 0x41000020, 0xffe007ff, TRAP|WR_d|RD_t, 0, MT32 },
258276cad711SPaolo Bonzini {"mfthc1", "d,T", 0x41000032, 0xffe007ff, TRAP|LCD|WR_d|RD_T|FP_D, 0, MT32 },
258376cad711SPaolo Bonzini {"mfthc1", "d,E", 0x41000032, 0xffe007ff, TRAP|LCD|WR_d|RD_T|FP_D, 0, MT32 },
258476cad711SPaolo Bonzini {"mfthc2", "d,E", 0x41000034, 0xffe007ff, TRAP|LCD|WR_d|RD_C2, 0, MT32 },
258576cad711SPaolo Bonzini {"mfthi", "d", 0x41010021, 0xffff07ff, TRAP|WR_d|RD_a, 0, MT32 },
258676cad711SPaolo Bonzini {"mfthi", "d,*", 0x41010021, 0xfff307ff, TRAP|WR_d|RD_a, 0, MT32 },
258776cad711SPaolo Bonzini {"mftlo", "d", 0x41000021, 0xffff07ff, TRAP|WR_d|RD_a, 0, MT32 },
258876cad711SPaolo Bonzini {"mftlo", "d,*", 0x41000021, 0xfff307ff, TRAP|WR_d|RD_a, 0, MT32 },
258976cad711SPaolo Bonzini {"mftr", "d,t,!,H,$", 0x41000000, 0xffe007c8, TRAP|WR_d, 0, MT32 },
259076cad711SPaolo Bonzini {"mfc0", "t,G", 0x40000000, 0xffe007ff, LCD|WR_t|RD_C0, 0, I1 },
259176cad711SPaolo Bonzini {"mfc0", "t,+D", 0x40000000, 0xffe007f8, LCD|WR_t|RD_C0, 0, I32 },
259276cad711SPaolo Bonzini {"mfc0", "t,G,H", 0x40000000, 0xffe007f8, LCD|WR_t|RD_C0, 0, I32 },
259376cad711SPaolo Bonzini {"mfc1", "t,S", 0x44000000, 0xffe007ff, LCD|WR_t|RD_S|FP_S, 0, I1 },
259476cad711SPaolo Bonzini {"mfc1", "t,G", 0x44000000, 0xffe007ff, LCD|WR_t|RD_S|FP_S, 0, I1 },
259576cad711SPaolo Bonzini {"mfhc1", "t,S", 0x44600000, 0xffe007ff, LCD|WR_t|RD_S|FP_D, 0, I33 },
259676cad711SPaolo Bonzini {"mfhc1", "t,G", 0x44600000, 0xffe007ff, LCD|WR_t|RD_S|FP_D, 0, I33 },
259776cad711SPaolo Bonzini /* mfc2 is at the bottom of the table. */
259876cad711SPaolo Bonzini /* mfhc2 is at the bottom of the table. */
259976cad711SPaolo Bonzini /* mfc3 is at the bottom of the table. */
260076cad711SPaolo Bonzini {"mfdr", "t,G", 0x7000003d, 0xffe007ff, LCD|WR_t|RD_C0, 0, N5 },
260176cad711SPaolo Bonzini {"mfhi", "d", 0x00000010, 0xffff07ff, WR_d|RD_HI, 0, I1 },
260276cad711SPaolo Bonzini {"mfhi", "d,9", 0x00000010, 0xff9f07ff, WR_d|RD_HI, 0, D32 },
260376cad711SPaolo Bonzini {"mflo", "d", 0x00000012, 0xffff07ff, WR_d|RD_LO, 0, I1 },
260476cad711SPaolo Bonzini {"mflo", "d,9", 0x00000012, 0xff9f07ff, WR_d|RD_LO, 0, D32 },
260576cad711SPaolo Bonzini {"mflhxu", "d", 0x00000052, 0xffff07ff, WR_d|MOD_HILO, 0, SMT },
260676cad711SPaolo Bonzini {"min.ob", "X,Y,Q", 0x78000006, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
260776cad711SPaolo Bonzini {"min.ob", "D,S,T", 0x4ac00006, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
260876cad711SPaolo Bonzini {"min.ob", "D,S,T[e]", 0x48000006, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
260976cad711SPaolo Bonzini {"min.ob", "D,S,k", 0x4bc00006, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
261076cad711SPaolo Bonzini {"min.qh", "X,Y,Q", 0x78200006, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
261176cad711SPaolo Bonzini {"mov.d", "D,S", 0x46200006, 0xffff003f, WR_D|RD_S|FP_D, 0, I1 },
261276cad711SPaolo Bonzini {"mov.s", "D,S", 0x46000006, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
261376cad711SPaolo Bonzini {"mov.ps", "D,S", 0x46c00006, 0xffff003f, WR_D|RD_S|FP_D, 0, I5|I33 },
261476cad711SPaolo Bonzini {"movf", "d,s,N", 0x00000001, 0xfc0307ff, WR_d|RD_s|RD_CC|FP_S|FP_D, 0, I4|I32 },
261576cad711SPaolo Bonzini {"movf.d", "D,S,N", 0x46200011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I4|I32 },
261676cad711SPaolo Bonzini {"movf.l", "D,S,N", 0x46a00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, MX|SB1 },
261776cad711SPaolo Bonzini {"movf.l", "X,Y,N", 0x46a00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, MX|SB1 },
261876cad711SPaolo Bonzini {"movf.s", "D,S,N", 0x46000011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_S, 0, I4|I32 },
261976cad711SPaolo Bonzini {"movf.ps", "D,S,N", 0x46c00011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I5|I33 },
262076cad711SPaolo Bonzini {"movn", "d,v,t", 0x0000000b, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I4|I32 },
262176cad711SPaolo Bonzini {"ffc", "d,v", 0x0000000b, 0xfc1f07ff, WR_d|RD_s, 0, L1 },
262276cad711SPaolo Bonzini {"movn.d", "D,S,t", 0x46200013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I4|I32 },
262376cad711SPaolo Bonzini {"movn.l", "D,S,t", 0x46a00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, MX|SB1 },
262476cad711SPaolo Bonzini {"movn.l", "X,Y,t", 0x46a00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, MX|SB1 },
262576cad711SPaolo Bonzini {"movn.s", "D,S,t", 0x46000013, 0xffe0003f, WR_D|RD_S|RD_t|FP_S, 0, I4|I32 },
262676cad711SPaolo Bonzini {"movn.ps", "D,S,t", 0x46c00013, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I5|I33 },
262776cad711SPaolo Bonzini {"movt", "d,s,N", 0x00010001, 0xfc0307ff, WR_d|RD_s|RD_CC|FP_S|FP_D, 0, I4|I32 },
262876cad711SPaolo Bonzini {"movt.d", "D,S,N", 0x46210011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I4|I32 },
262976cad711SPaolo Bonzini {"movt.l", "D,S,N", 0x46a10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, MX|SB1 },
263076cad711SPaolo Bonzini {"movt.l", "X,Y,N", 0x46a10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, MX|SB1 },
263176cad711SPaolo Bonzini {"movt.s", "D,S,N", 0x46010011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_S, 0, I4|I32 },
263276cad711SPaolo Bonzini {"movt.ps", "D,S,N", 0x46c10011, 0xffe3003f, WR_D|RD_S|RD_CC|FP_D, 0, I5|I33 },
263376cad711SPaolo Bonzini {"movz", "d,v,t", 0x0000000a, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I4|I32 },
263476cad711SPaolo Bonzini {"ffs", "d,v", 0x0000000a, 0xfc1f07ff, WR_d|RD_s, 0, L1 },
263576cad711SPaolo Bonzini {"movz.d", "D,S,t", 0x46200012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I4|I32 },
263676cad711SPaolo Bonzini {"movz.l", "D,S,t", 0x46a00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, MX|SB1 },
263776cad711SPaolo Bonzini {"movz.l", "X,Y,t", 0x46a00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, MX|SB1 },
263876cad711SPaolo Bonzini {"movz.s", "D,S,t", 0x46000012, 0xffe0003f, WR_D|RD_S|RD_t|FP_S, 0, I4|I32 },
263976cad711SPaolo Bonzini {"movz.ps", "D,S,t", 0x46c00012, 0xffe0003f, WR_D|RD_S|RD_t|FP_D, 0, I5|I33 },
264076cad711SPaolo Bonzini {"msac", "d,s,t", 0x000001d8, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
264176cad711SPaolo Bonzini {"msacu", "d,s,t", 0x000001d9, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
264276cad711SPaolo Bonzini {"msachi", "d,s,t", 0x000003d8, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
264376cad711SPaolo Bonzini {"msachiu", "d,s,t", 0x000003d9, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
264476cad711SPaolo Bonzini /* move is at the top of the table. */
264576cad711SPaolo Bonzini {"msgn.qh", "X,Y,Q", 0x78200000, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
264676cad711SPaolo Bonzini {"msub.d", "D,R,S,T", 0x4c000029, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4|I33 },
264776cad711SPaolo Bonzini {"msub.s", "D,R,S,T", 0x4c000028, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0, I4|I33 },
264876cad711SPaolo Bonzini {"msub.ps", "D,R,S,T", 0x4c00002e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5|I33 },
264976cad711SPaolo Bonzini {"msub", "s,t", 0x0000001e, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
265076cad711SPaolo Bonzini {"msub", "s,t", 0x70000004, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 },
265176cad711SPaolo Bonzini {"msub", "7,s,t", 0x70000004, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
265276cad711SPaolo Bonzini {"msubu", "s,t", 0x0000001f, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, L1 },
265376cad711SPaolo Bonzini {"msubu", "s,t", 0x70000005, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, I32|N55 },
265476cad711SPaolo Bonzini {"msubu", "7,s,t", 0x70000005, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
265576cad711SPaolo Bonzini {"mtpc", "t,P", 0x4080c801, 0xffe0ffc1, COD|RD_t|WR_C0, 0, M1|N5 },
265676cad711SPaolo Bonzini {"mtps", "t,P", 0x4080c800, 0xffe0ffc1, COD|RD_t|WR_C0, 0, M1|N5 },
265776cad711SPaolo Bonzini {"mtc0", "t,G", 0x40800000, 0xffe007ff, COD|RD_t|WR_C0|WR_CC, 0, I1 },
265876cad711SPaolo Bonzini {"mtc0", "t,+D", 0x40800000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC, 0, I32 },
265976cad711SPaolo Bonzini {"mtc0", "t,G,H", 0x40800000, 0xffe007f8, COD|RD_t|WR_C0|WR_CC, 0, I32 },
266076cad711SPaolo Bonzini {"mtc1", "t,S", 0x44800000, 0xffe007ff, COD|RD_t|WR_S|FP_S, 0, I1 },
266176cad711SPaolo Bonzini {"mtc1", "t,G", 0x44800000, 0xffe007ff, COD|RD_t|WR_S|FP_S, 0, I1 },
266276cad711SPaolo Bonzini {"mthc1", "t,S", 0x44e00000, 0xffe007ff, COD|RD_t|WR_S|FP_D, 0, I33 },
266376cad711SPaolo Bonzini {"mthc1", "t,G", 0x44e00000, 0xffe007ff, COD|RD_t|WR_S|FP_D, 0, I33 },
266476cad711SPaolo Bonzini /* mtc2 is at the bottom of the table. */
266576cad711SPaolo Bonzini /* mthc2 is at the bottom of the table. */
266676cad711SPaolo Bonzini /* mtc3 is at the bottom of the table. */
266776cad711SPaolo Bonzini {"mtdr", "t,G", 0x7080003d, 0xffe007ff, COD|RD_t|WR_C0, 0, N5 },
266876cad711SPaolo Bonzini {"mthi", "s", 0x00000011, 0xfc1fffff, RD_s|WR_HI, 0, I1 },
266976cad711SPaolo Bonzini {"mthi", "s,7", 0x00000011, 0xfc1fe7ff, RD_s|WR_HI, 0, D32 },
267076cad711SPaolo Bonzini {"mtlo", "s", 0x00000013, 0xfc1fffff, RD_s|WR_LO, 0, I1 },
267176cad711SPaolo Bonzini {"mtlo", "s,7", 0x00000013, 0xfc1fe7ff, RD_s|WR_LO, 0, D32 },
267276cad711SPaolo Bonzini {"mtlhx", "s", 0x00000053, 0xfc1fffff, RD_s|MOD_HILO, 0, SMT },
267376cad711SPaolo Bonzini {"mttc0", "t,G", 0x41800000, 0xffe007ff, TRAP|COD|RD_t|WR_C0|WR_CC, 0, MT32 },
267476cad711SPaolo Bonzini {"mttc0", "t,+D", 0x41800000, 0xffe007f8, TRAP|COD|RD_t|WR_C0|WR_CC, 0, MT32 },
267576cad711SPaolo Bonzini {"mttc0", "t,G,H", 0x41800000, 0xffe007f8, TRAP|COD|RD_t|WR_C0|WR_CC, 0, MT32 },
267676cad711SPaolo Bonzini {"mttc1", "t,S", 0x41800022, 0xffe007ff, TRAP|COD|RD_t|WR_S|FP_S, 0, MT32 },
267776cad711SPaolo Bonzini {"mttc1", "t,G", 0x41800022, 0xffe007ff, TRAP|COD|RD_t|WR_S|FP_S, 0, MT32 },
267876cad711SPaolo Bonzini {"mttc2", "t,g", 0x41800024, 0xffe007ff, TRAP|COD|RD_t|WR_C2|WR_CC, 0, MT32 },
267976cad711SPaolo Bonzini {"mttacx", "t", 0x41801021, 0xffe0ffff, TRAP|WR_a|RD_t, 0, MT32 },
268076cad711SPaolo Bonzini {"mttacx", "t,&", 0x41801021, 0xffe09fff, TRAP|WR_a|RD_t, 0, MT32 },
268176cad711SPaolo Bonzini {"mttdsp", "t", 0x41808021, 0xffe0ffff, TRAP|RD_t, 0, MT32 },
268276cad711SPaolo Bonzini {"mttgpr", "t,d", 0x41800020, 0xffe007ff, TRAP|WR_d|RD_t, 0, MT32 },
268376cad711SPaolo Bonzini {"mtthc1", "t,S", 0x41800032, 0xffe007ff, TRAP|COD|RD_t|WR_S|FP_D, 0, MT32 },
268476cad711SPaolo Bonzini {"mtthc1", "t,G", 0x41800032, 0xffe007ff, TRAP|COD|RD_t|WR_S|FP_D, 0, MT32 },
268576cad711SPaolo Bonzini {"mtthc2", "t,g", 0x41800034, 0xffe007ff, TRAP|COD|RD_t|WR_C2|WR_CC, 0, MT32 },
268676cad711SPaolo Bonzini {"mtthi", "t", 0x41800821, 0xffe0ffff, TRAP|WR_a|RD_t, 0, MT32 },
268776cad711SPaolo Bonzini {"mtthi", "t,&", 0x41800821, 0xffe09fff, TRAP|WR_a|RD_t, 0, MT32 },
268876cad711SPaolo Bonzini {"mttlo", "t", 0x41800021, 0xffe0ffff, TRAP|WR_a|RD_t, 0, MT32 },
268976cad711SPaolo Bonzini {"mttlo", "t,&", 0x41800021, 0xffe09fff, TRAP|WR_a|RD_t, 0, MT32 },
269076cad711SPaolo Bonzini {"mttr", "t,d,!,H,$", 0x41800000, 0xffe007c8, TRAP|RD_t, 0, MT32 },
269176cad711SPaolo Bonzini {"mul.d", "D,V,T", 0x46200002, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I1 },
269276cad711SPaolo Bonzini {"mul.s", "D,V,T", 0x46000002, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I1 },
269376cad711SPaolo Bonzini {"mul.ob", "X,Y,Q", 0x78000030, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
269476cad711SPaolo Bonzini {"mul.ob", "D,S,T", 0x4ac00030, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
269576cad711SPaolo Bonzini {"mul.ob", "D,S,T[e]", 0x48000030, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
269676cad711SPaolo Bonzini {"mul.ob", "D,S,k", 0x4bc00030, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
269776cad711SPaolo Bonzini {"mul.ps", "D,V,T", 0x46c00002, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
269876cad711SPaolo Bonzini {"mul.qh", "X,Y,Q", 0x78200030, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
269976cad711SPaolo Bonzini {"mul", "d,v,t", 0x70000002, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, I32|P3|N55},
270076cad711SPaolo Bonzini {"mul", "d,s,t", 0x00000058, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N54 },
270176cad711SPaolo Bonzini {"mul", "d,v,t", 0, (int) M_MUL, INSN_MACRO, 0, I1 },
270276cad711SPaolo Bonzini {"mul", "d,v,I", 0, (int) M_MUL_I, INSN_MACRO, 0, I1 },
270376cad711SPaolo Bonzini {"mula.ob", "Y,Q", 0x78000033, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
270476cad711SPaolo Bonzini {"mula.ob", "S,T", 0x4ac00033, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
270576cad711SPaolo Bonzini {"mula.ob", "S,T[e]", 0x48000033, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
270676cad711SPaolo Bonzini {"mula.ob", "S,k", 0x4bc00033, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
270776cad711SPaolo Bonzini {"mula.qh", "Y,Q", 0x78200033, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
270876cad711SPaolo Bonzini {"mulhi", "d,s,t", 0x00000258, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
270976cad711SPaolo Bonzini {"mulhiu", "d,s,t", 0x00000259, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
271076cad711SPaolo Bonzini {"mull.ob", "Y,Q", 0x78000433, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
271176cad711SPaolo Bonzini {"mull.ob", "S,T", 0x4ac00433, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
271276cad711SPaolo Bonzini {"mull.ob", "S,T[e]", 0x48000433, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
271376cad711SPaolo Bonzini {"mull.ob", "S,k", 0x4bc00433, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
271476cad711SPaolo Bonzini {"mull.qh", "Y,Q", 0x78200433, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
271576cad711SPaolo Bonzini {"mulo", "d,v,t", 0, (int) M_MULO, INSN_MACRO, 0, I1 },
271676cad711SPaolo Bonzini {"mulo", "d,v,I", 0, (int) M_MULO_I, INSN_MACRO, 0, I1 },
271776cad711SPaolo Bonzini {"mulou", "d,v,t", 0, (int) M_MULOU, INSN_MACRO, 0, I1 },
271876cad711SPaolo Bonzini {"mulou", "d,v,I", 0, (int) M_MULOU_I, INSN_MACRO, 0, I1 },
271976cad711SPaolo Bonzini {"mulr.ps", "D,S,T", 0x46c0001a, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, M3D },
272076cad711SPaolo Bonzini {"muls", "d,s,t", 0x000000d8, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
272176cad711SPaolo Bonzini {"mulsu", "d,s,t", 0x000000d9, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
272276cad711SPaolo Bonzini {"mulshi", "d,s,t", 0x000002d8, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
272376cad711SPaolo Bonzini {"mulshiu", "d,s,t", 0x000002d9, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
272476cad711SPaolo Bonzini {"muls.ob", "Y,Q", 0x78000032, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
272576cad711SPaolo Bonzini {"muls.ob", "S,T", 0x4ac00032, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
272676cad711SPaolo Bonzini {"muls.ob", "S,T[e]", 0x48000032, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
272776cad711SPaolo Bonzini {"muls.ob", "S,k", 0x4bc00032, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
272876cad711SPaolo Bonzini {"muls.qh", "Y,Q", 0x78200032, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
272976cad711SPaolo Bonzini {"mulsl.ob", "Y,Q", 0x78000432, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
273076cad711SPaolo Bonzini {"mulsl.ob", "S,T", 0x4ac00432, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
273176cad711SPaolo Bonzini {"mulsl.ob", "S,T[e]", 0x48000432, 0xfe2007ff, WR_CC|RD_S|RD_T, 0, N54 },
273276cad711SPaolo Bonzini {"mulsl.ob", "S,k", 0x4bc00432, 0xffe007ff, WR_CC|RD_S|RD_T, 0, N54 },
273376cad711SPaolo Bonzini {"mulsl.qh", "Y,Q", 0x78200432, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
273476cad711SPaolo Bonzini {"mult", "s,t", 0x00000018, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, I1 },
273576cad711SPaolo Bonzini {"mult", "7,s,t", 0x00000018, 0xfc00e7ff, WR_a|RD_s|RD_t, 0, D33 },
273676cad711SPaolo Bonzini {"mult", "d,s,t", 0x00000018, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
273776cad711SPaolo Bonzini {"multp", "s,t", 0x00000459, 0xfc00ffff, RD_s|RD_t|MOD_HILO, 0, SMT },
273876cad711SPaolo Bonzini {"multu", "s,t", 0x00000019, 0xfc00ffff, RD_s|RD_t|WR_HILO|IS_M, 0, I1 },
273976cad711SPaolo Bonzini {"multu", "7,s,t", 0x00000019, 0xfc00e7ff, WR_a|RD_s|RD_t, 0, D33 },
274076cad711SPaolo Bonzini {"multu", "d,s,t", 0x00000019, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d|IS_M, 0, G1 },
274176cad711SPaolo Bonzini {"mulu", "d,s,t", 0x00000059, 0xfc0007ff, RD_s|RD_t|WR_HILO|WR_d, 0, N5 },
274276cad711SPaolo Bonzini {"neg", "d,w", 0x00000022, 0xffe007ff, WR_d|RD_t, 0, I1 }, /* sub 0 */
274376cad711SPaolo Bonzini {"negu", "d,w", 0x00000023, 0xffe007ff, WR_d|RD_t, 0, I1 }, /* subu 0 */
274476cad711SPaolo Bonzini {"neg.d", "D,V", 0x46200007, 0xffff003f, WR_D|RD_S|FP_D, 0, I1 },
274576cad711SPaolo Bonzini {"neg.s", "D,V", 0x46000007, 0xffff003f, WR_D|RD_S|FP_S, 0, I1 },
274676cad711SPaolo Bonzini {"neg.ps", "D,V", 0x46c00007, 0xffff003f, WR_D|RD_S|FP_D, 0, I5|I33 },
274776cad711SPaolo Bonzini {"nmadd.d", "D,R,S,T", 0x4c000031, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4|I33 },
274876cad711SPaolo Bonzini {"nmadd.s", "D,R,S,T", 0x4c000030, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0, I4|I33 },
274976cad711SPaolo Bonzini {"nmadd.ps","D,R,S,T", 0x4c000036, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5|I33 },
275076cad711SPaolo Bonzini {"nmsub.d", "D,R,S,T", 0x4c000039, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I4|I33 },
275176cad711SPaolo Bonzini {"nmsub.s", "D,R,S,T", 0x4c000038, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0, I4|I33 },
275276cad711SPaolo Bonzini {"nmsub.ps","D,R,S,T", 0x4c00003e, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0, I5|I33 },
275376cad711SPaolo Bonzini /* nop is at the start of the table. */
275476cad711SPaolo Bonzini {"nor", "d,v,t", 0x00000027, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
275576cad711SPaolo Bonzini {"nor", "t,r,I", 0, (int) M_NOR_I, INSN_MACRO, 0, I1 },
275676cad711SPaolo Bonzini {"nor.ob", "X,Y,Q", 0x7800000f, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
275776cad711SPaolo Bonzini {"nor.ob", "D,S,T", 0x4ac0000f, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
275876cad711SPaolo Bonzini {"nor.ob", "D,S,T[e]", 0x4800000f, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
275976cad711SPaolo Bonzini {"nor.ob", "D,S,k", 0x4bc0000f, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
276076cad711SPaolo Bonzini {"nor.qh", "X,Y,Q", 0x7820000f, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
276176cad711SPaolo Bonzini {"not", "d,v", 0x00000027, 0xfc1f07ff, WR_d|RD_s|RD_t, 0, I1 },/*nor d,s,0*/
276276cad711SPaolo Bonzini {"or", "d,v,t", 0x00000025, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
276376cad711SPaolo Bonzini {"or", "t,r,I", 0, (int) M_OR_I, INSN_MACRO, 0, I1 },
276476cad711SPaolo Bonzini {"or.ob", "X,Y,Q", 0x7800000e, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
276576cad711SPaolo Bonzini {"or.ob", "D,S,T", 0x4ac0000e, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
276676cad711SPaolo Bonzini {"or.ob", "D,S,T[e]", 0x4800000e, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
276776cad711SPaolo Bonzini {"or.ob", "D,S,k", 0x4bc0000e, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
276876cad711SPaolo Bonzini {"or.qh", "X,Y,Q", 0x7820000e, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
276976cad711SPaolo Bonzini {"ori", "t,r,i", 0x34000000, 0xfc000000, WR_t|RD_s, 0, I1 },
277076cad711SPaolo Bonzini {"pabsdiff.ob", "X,Y,Q",0x78000009, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, SB1 },
277176cad711SPaolo Bonzini {"pabsdiffc.ob", "Y,Q", 0x78000035, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, SB1 },
277276cad711SPaolo Bonzini {"pavg.ob", "X,Y,Q", 0x78000008, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, SB1 },
277376cad711SPaolo Bonzini {"pickf.ob", "X,Y,Q", 0x78000002, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
277476cad711SPaolo Bonzini {"pickf.ob", "D,S,T", 0x4ac00002, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
277576cad711SPaolo Bonzini {"pickf.ob", "D,S,T[e]",0x48000002, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
277676cad711SPaolo Bonzini {"pickf.ob", "D,S,k", 0x4bc00002, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
277776cad711SPaolo Bonzini {"pickf.qh", "X,Y,Q", 0x78200002, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
277876cad711SPaolo Bonzini {"pickt.ob", "X,Y,Q", 0x78000003, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
277976cad711SPaolo Bonzini {"pickt.ob", "D,S,T", 0x4ac00003, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
278076cad711SPaolo Bonzini {"pickt.ob", "D,S,T[e]",0x48000003, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
278176cad711SPaolo Bonzini {"pickt.ob", "D,S,k", 0x4bc00003, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
278276cad711SPaolo Bonzini {"pickt.qh", "X,Y,Q", 0x78200003, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
278376cad711SPaolo Bonzini {"pll.ps", "D,V,T", 0x46c0002c, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
278476cad711SPaolo Bonzini {"plu.ps", "D,V,T", 0x46c0002d, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
278576cad711SPaolo Bonzini /* pref and prefx are at the start of the table. */
278676cad711SPaolo Bonzini {"pul.ps", "D,V,T", 0x46c0002e, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
278776cad711SPaolo Bonzini {"puu.ps", "D,V,T", 0x46c0002f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
278876cad711SPaolo Bonzini {"pperm", "s,t", 0x70000481, 0xfc00ffff, MOD_HILO|RD_s|RD_t, 0, SMT },
278976cad711SPaolo Bonzini {"rach.ob", "X", 0x7a00003f, 0xfffff83f, WR_D|FP_D, RD_MACC, MX|SB1 },
279076cad711SPaolo Bonzini {"rach.ob", "D", 0x4a00003f, 0xfffff83f, WR_D, 0, N54 },
279176cad711SPaolo Bonzini {"rach.qh", "X", 0x7a20003f, 0xfffff83f, WR_D|FP_D, RD_MACC, MX },
279276cad711SPaolo Bonzini {"racl.ob", "X", 0x7800003f, 0xfffff83f, WR_D|FP_D, RD_MACC, MX|SB1 },
279376cad711SPaolo Bonzini {"racl.ob", "D", 0x4800003f, 0xfffff83f, WR_D, 0, N54 },
279476cad711SPaolo Bonzini {"racl.qh", "X", 0x7820003f, 0xfffff83f, WR_D|FP_D, RD_MACC, MX },
279576cad711SPaolo Bonzini {"racm.ob", "X", 0x7900003f, 0xfffff83f, WR_D|FP_D, RD_MACC, MX|SB1 },
279676cad711SPaolo Bonzini {"racm.ob", "D", 0x4900003f, 0xfffff83f, WR_D, 0, N54 },
279776cad711SPaolo Bonzini {"racm.qh", "X", 0x7920003f, 0xfffff83f, WR_D|FP_D, RD_MACC, MX },
279876cad711SPaolo Bonzini {"recip.d", "D,S", 0x46200015, 0xffff003f, WR_D|RD_S|FP_D, 0, I4|I33 },
279976cad711SPaolo Bonzini {"recip.ps","D,S", 0x46c00015, 0xffff003f, WR_D|RD_S|FP_D, 0, SB1 },
280076cad711SPaolo Bonzini {"recip.s", "D,S", 0x46000015, 0xffff003f, WR_D|RD_S|FP_S, 0, I4|I33 },
280176cad711SPaolo Bonzini {"recip1.d", "D,S", 0x4620001d, 0xffff003f, WR_D|RD_S|FP_D, 0, M3D },
280276cad711SPaolo Bonzini {"recip1.ps", "D,S", 0x46c0001d, 0xffff003f, WR_D|RD_S|FP_S, 0, M3D },
280376cad711SPaolo Bonzini {"recip1.s", "D,S", 0x4600001d, 0xffff003f, WR_D|RD_S|FP_S, 0, M3D },
280476cad711SPaolo Bonzini {"recip2.d", "D,S,T", 0x4620001c, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, M3D },
280576cad711SPaolo Bonzini {"recip2.ps", "D,S,T", 0x46c0001c, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, M3D },
280676cad711SPaolo Bonzini {"recip2.s", "D,S,T", 0x4600001c, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, M3D },
280776cad711SPaolo Bonzini {"rem", "z,s,t", 0x0000001a, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I1 },
280876cad711SPaolo Bonzini {"rem", "d,v,t", 0, (int) M_REM_3, INSN_MACRO, 0, I1 },
280976cad711SPaolo Bonzini {"rem", "d,v,I", 0, (int) M_REM_3I, INSN_MACRO, 0, I1 },
281076cad711SPaolo Bonzini {"remu", "z,s,t", 0x0000001b, 0xfc00ffff, RD_s|RD_t|WR_HILO, 0, I1 },
281176cad711SPaolo Bonzini {"remu", "d,v,t", 0, (int) M_REMU_3, INSN_MACRO, 0, I1 },
281276cad711SPaolo Bonzini {"remu", "d,v,I", 0, (int) M_REMU_3I, INSN_MACRO, 0, I1 },
281376cad711SPaolo Bonzini {"rdhwr", "t,K", 0x7c00003b, 0xffe007ff, WR_t, 0, I33 },
281476cad711SPaolo Bonzini {"rdpgpr", "d,w", 0x41400000, 0xffe007ff, WR_d, 0, I33 },
281576cad711SPaolo Bonzini {"rfe", "", 0x42000010, 0xffffffff, 0, 0, I1|T3 },
281676cad711SPaolo Bonzini {"rnas.qh", "X,Q", 0x78200025, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX },
281776cad711SPaolo Bonzini {"rnau.ob", "X,Q", 0x78000021, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX|SB1 },
281876cad711SPaolo Bonzini {"rnau.qh", "X,Q", 0x78200021, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX },
281976cad711SPaolo Bonzini {"rnes.qh", "X,Q", 0x78200026, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX },
282076cad711SPaolo Bonzini {"rneu.ob", "X,Q", 0x78000022, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX|SB1 },
282176cad711SPaolo Bonzini {"rneu.qh", "X,Q", 0x78200022, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX },
282276cad711SPaolo Bonzini {"rol", "d,v,t", 0, (int) M_ROL, INSN_MACRO, 0, I1 },
282376cad711SPaolo Bonzini {"rol", "d,v,I", 0, (int) M_ROL_I, INSN_MACRO, 0, I1 },
282476cad711SPaolo Bonzini {"ror", "d,v,t", 0, (int) M_ROR, INSN_MACRO, 0, I1 },
282576cad711SPaolo Bonzini {"ror", "d,v,I", 0, (int) M_ROR_I, INSN_MACRO, 0, I1 },
282676cad711SPaolo Bonzini {"ror", "d,w,<", 0x00200002, 0xffe0003f, WR_d|RD_t, 0, N5|I33|SMT },
282776cad711SPaolo Bonzini {"rorv", "d,t,s", 0x00000046, 0xfc0007ff, RD_t|RD_s|WR_d, 0, N5|I33|SMT },
282876cad711SPaolo Bonzini {"rotl", "d,v,t", 0, (int) M_ROL, INSN_MACRO, 0, I33|SMT },
282976cad711SPaolo Bonzini {"rotl", "d,v,I", 0, (int) M_ROL_I, INSN_MACRO, 0, I33|SMT },
283076cad711SPaolo Bonzini {"rotr", "d,v,t", 0, (int) M_ROR, INSN_MACRO, 0, I33|SMT },
283176cad711SPaolo Bonzini {"rotr", "d,v,I", 0, (int) M_ROR_I, INSN_MACRO, 0, I33|SMT },
283276cad711SPaolo Bonzini {"rotrv", "d,t,s", 0x00000046, 0xfc0007ff, RD_t|RD_s|WR_d, 0, I33|SMT },
283376cad711SPaolo Bonzini {"round.l.d", "D,S", 0x46200008, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
283476cad711SPaolo Bonzini {"round.l.s", "D,S", 0x46000008, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
283576cad711SPaolo Bonzini {"round.w.d", "D,S", 0x4620000c, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 },
283676cad711SPaolo Bonzini {"round.w.s", "D,S", 0x4600000c, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 },
283776cad711SPaolo Bonzini {"rsqrt.d", "D,S", 0x46200016, 0xffff003f, WR_D|RD_S|FP_D, 0, I4|I33 },
283876cad711SPaolo Bonzini {"rsqrt.ps","D,S", 0x46c00016, 0xffff003f, WR_D|RD_S|FP_D, 0, SB1 },
283976cad711SPaolo Bonzini {"rsqrt.s", "D,S", 0x46000016, 0xffff003f, WR_D|RD_S|FP_S, 0, I4|I33 },
284076cad711SPaolo Bonzini {"rsqrt1.d", "D,S", 0x4620001e, 0xffff003f, WR_D|RD_S|FP_D, 0, M3D },
284176cad711SPaolo Bonzini {"rsqrt1.ps", "D,S", 0x46c0001e, 0xffff003f, WR_D|RD_S|FP_S, 0, M3D },
284276cad711SPaolo Bonzini {"rsqrt1.s", "D,S", 0x4600001e, 0xffff003f, WR_D|RD_S|FP_S, 0, M3D },
284376cad711SPaolo Bonzini {"rsqrt2.d", "D,S,T", 0x4620001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, M3D },
284476cad711SPaolo Bonzini {"rsqrt2.ps", "D,S,T", 0x46c0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, M3D },
284576cad711SPaolo Bonzini {"rsqrt2.s", "D,S,T", 0x4600001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, M3D },
284676cad711SPaolo Bonzini {"rzs.qh", "X,Q", 0x78200024, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX },
284776cad711SPaolo Bonzini {"rzu.ob", "X,Q", 0x78000020, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX|SB1 },
284876cad711SPaolo Bonzini {"rzu.ob", "D,k", 0x4bc00020, 0xffe0f83f, WR_D|RD_S|RD_T, 0, N54 },
284976cad711SPaolo Bonzini {"rzu.qh", "X,Q", 0x78200020, 0xfc20f83f, WR_D|RD_T|FP_D, RD_MACC, MX },
285076cad711SPaolo Bonzini {"sb", "t,o(b)", 0xa0000000, 0xfc000000, SM|RD_t|RD_b, 0, I1 },
285176cad711SPaolo Bonzini {"sb", "t,A(b)", 0, (int) M_SB_AB, INSN_MACRO, 0, I1 },
285276cad711SPaolo Bonzini {"sc", "t,o(b)", 0xe0000000, 0xfc000000, SM|RD_t|WR_t|RD_b, 0, I2 },
285376cad711SPaolo Bonzini {"sc", "t,A(b)", 0, (int) M_SC_AB, INSN_MACRO, 0, I2 },
285476cad711SPaolo Bonzini {"scd", "t,o(b)", 0xf0000000, 0xfc000000, SM|RD_t|WR_t|RD_b, 0, I3 },
285576cad711SPaolo Bonzini {"scd", "t,A(b)", 0, (int) M_SCD_AB, INSN_MACRO, 0, I3 },
285676cad711SPaolo Bonzini {"sd", "t,o(b)", 0xfc000000, 0xfc000000, SM|RD_t|RD_b, 0, I3 },
285776cad711SPaolo Bonzini {"sd", "t,o(b)", 0, (int) M_SD_OB, INSN_MACRO, 0, I1 },
285876cad711SPaolo Bonzini {"sd", "t,A(b)", 0, (int) M_SD_AB, INSN_MACRO, 0, I1 },
285976cad711SPaolo Bonzini {"sdbbp", "", 0x0000000e, 0xffffffff, TRAP, 0, G2 },
286076cad711SPaolo Bonzini {"sdbbp", "c", 0x0000000e, 0xfc00ffff, TRAP, 0, G2 },
286176cad711SPaolo Bonzini {"sdbbp", "c,q", 0x0000000e, 0xfc00003f, TRAP, 0, G2 },
286276cad711SPaolo Bonzini {"sdbbp", "", 0x7000003f, 0xffffffff, TRAP, 0, I32 },
286376cad711SPaolo Bonzini {"sdbbp", "B", 0x7000003f, 0xfc00003f, TRAP, 0, I32 },
286476cad711SPaolo Bonzini {"sdc1", "T,o(b)", 0xf4000000, 0xfc000000, SM|RD_T|RD_b|FP_D, 0, I2 },
286576cad711SPaolo Bonzini {"sdc1", "E,o(b)", 0xf4000000, 0xfc000000, SM|RD_T|RD_b|FP_D, 0, I2 },
286676cad711SPaolo Bonzini {"sdc1", "T,A(b)", 0, (int) M_SDC1_AB, INSN_MACRO, 0, I2 },
286776cad711SPaolo Bonzini {"sdc1", "E,A(b)", 0, (int) M_SDC1_AB, INSN_MACRO, 0, I2 },
286876cad711SPaolo Bonzini {"sdc2", "E,o(b)", 0xf8000000, 0xfc000000, SM|RD_C2|RD_b, 0, I2 },
286976cad711SPaolo Bonzini {"sdc2", "E,A(b)", 0, (int) M_SDC2_AB, INSN_MACRO, 0, I2 },
287076cad711SPaolo Bonzini {"sdc3", "E,o(b)", 0xfc000000, 0xfc000000, SM|RD_C3|RD_b, 0, I2 },
287176cad711SPaolo Bonzini {"sdc3", "E,A(b)", 0, (int) M_SDC3_AB, INSN_MACRO, 0, I2 },
287276cad711SPaolo Bonzini {"s.d", "T,o(b)", 0xf4000000, 0xfc000000, SM|RD_T|RD_b|FP_D, 0, I2 },
287376cad711SPaolo Bonzini {"s.d", "T,o(b)", 0, (int) M_S_DOB, INSN_MACRO, 0, I1 },
287476cad711SPaolo Bonzini {"s.d", "T,A(b)", 0, (int) M_S_DAB, INSN_MACRO, 0, I1 },
287576cad711SPaolo Bonzini {"sdl", "t,o(b)", 0xb0000000, 0xfc000000, SM|RD_t|RD_b, 0, I3 },
287676cad711SPaolo Bonzini {"sdl", "t,A(b)", 0, (int) M_SDL_AB, INSN_MACRO, 0, I3 },
287776cad711SPaolo Bonzini {"sdr", "t,o(b)", 0xb4000000, 0xfc000000, SM|RD_t|RD_b, 0, I3 },
287876cad711SPaolo Bonzini {"sdr", "t,A(b)", 0, (int) M_SDR_AB, INSN_MACRO, 0, I3 },
287976cad711SPaolo Bonzini {"sdxc1", "S,t(b)", 0x4c000009, 0xfc0007ff, SM|RD_S|RD_t|RD_b|FP_D, 0, I4|I33 },
288076cad711SPaolo Bonzini {"seb", "d,w", 0x7c000420, 0xffe007ff, WR_d|RD_t, 0, I33 },
288176cad711SPaolo Bonzini {"seh", "d,w", 0x7c000620, 0xffe007ff, WR_d|RD_t, 0, I33 },
288276cad711SPaolo Bonzini {"selsl", "d,v,t", 0x00000005, 0xfc0007ff, WR_d|RD_s|RD_t, 0, L1 },
288376cad711SPaolo Bonzini {"selsr", "d,v,t", 0x00000001, 0xfc0007ff, WR_d|RD_s|RD_t, 0, L1 },
288476cad711SPaolo Bonzini {"seq", "d,v,t", 0, (int) M_SEQ, INSN_MACRO, 0, I1 },
288576cad711SPaolo Bonzini {"seq", "d,v,I", 0, (int) M_SEQ_I, INSN_MACRO, 0, I1 },
288676cad711SPaolo Bonzini {"sge", "d,v,t", 0, (int) M_SGE, INSN_MACRO, 0, I1 },
288776cad711SPaolo Bonzini {"sge", "d,v,I", 0, (int) M_SGE_I, INSN_MACRO, 0, I1 },
288876cad711SPaolo Bonzini {"sgeu", "d,v,t", 0, (int) M_SGEU, INSN_MACRO, 0, I1 },
288976cad711SPaolo Bonzini {"sgeu", "d,v,I", 0, (int) M_SGEU_I, INSN_MACRO, 0, I1 },
289076cad711SPaolo Bonzini {"sgt", "d,v,t", 0, (int) M_SGT, INSN_MACRO, 0, I1 },
289176cad711SPaolo Bonzini {"sgt", "d,v,I", 0, (int) M_SGT_I, INSN_MACRO, 0, I1 },
289276cad711SPaolo Bonzini {"sgtu", "d,v,t", 0, (int) M_SGTU, INSN_MACRO, 0, I1 },
289376cad711SPaolo Bonzini {"sgtu", "d,v,I", 0, (int) M_SGTU_I, INSN_MACRO, 0, I1 },
289476cad711SPaolo Bonzini {"sh", "t,o(b)", 0xa4000000, 0xfc000000, SM|RD_t|RD_b, 0, I1 },
289576cad711SPaolo Bonzini {"sh", "t,A(b)", 0, (int) M_SH_AB, INSN_MACRO, 0, I1 },
289676cad711SPaolo Bonzini {"shfl.bfla.qh", "X,Y,Z", 0x7a20001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
289776cad711SPaolo Bonzini {"shfl.mixh.ob", "X,Y,Z", 0x7980001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
289876cad711SPaolo Bonzini {"shfl.mixh.ob", "D,S,T", 0x4980001f, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
289976cad711SPaolo Bonzini {"shfl.mixh.qh", "X,Y,Z", 0x7820001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
290076cad711SPaolo Bonzini {"shfl.mixl.ob", "X,Y,Z", 0x79c0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
290176cad711SPaolo Bonzini {"shfl.mixl.ob", "D,S,T", 0x49c0001f, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
290276cad711SPaolo Bonzini {"shfl.mixl.qh", "X,Y,Z", 0x78a0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
290376cad711SPaolo Bonzini {"shfl.pach.ob", "X,Y,Z", 0x7900001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
290476cad711SPaolo Bonzini {"shfl.pach.ob", "D,S,T", 0x4900001f, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
290576cad711SPaolo Bonzini {"shfl.pach.qh", "X,Y,Z", 0x7920001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
290676cad711SPaolo Bonzini {"shfl.pacl.ob", "D,S,T", 0x4940001f, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
290776cad711SPaolo Bonzini {"shfl.repa.qh", "X,Y,Z", 0x7b20001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
290876cad711SPaolo Bonzini {"shfl.repb.qh", "X,Y,Z", 0x7ba0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
290976cad711SPaolo Bonzini {"shfl.upsl.ob", "X,Y,Z", 0x78c0001f, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
291076cad711SPaolo Bonzini {"sle", "d,v,t", 0, (int) M_SLE, INSN_MACRO, 0, I1 },
291176cad711SPaolo Bonzini {"sle", "d,v,I", 0, (int) M_SLE_I, INSN_MACRO, 0, I1 },
291276cad711SPaolo Bonzini {"sleu", "d,v,t", 0, (int) M_SLEU, INSN_MACRO, 0, I1 },
291376cad711SPaolo Bonzini {"sleu", "d,v,I", 0, (int) M_SLEU_I, INSN_MACRO, 0, I1 },
291476cad711SPaolo Bonzini {"sllv", "d,t,s", 0x00000004, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I1 },
291576cad711SPaolo Bonzini {"sll", "d,w,s", 0x00000004, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I1 }, /* sllv */
291676cad711SPaolo Bonzini {"sll", "d,w,<", 0x00000000, 0xffe0003f, WR_d|RD_t, 0, I1 },
291776cad711SPaolo Bonzini {"sll.ob", "X,Y,Q", 0x78000010, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
291876cad711SPaolo Bonzini {"sll.ob", "D,S,T[e]", 0x48000010, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
291976cad711SPaolo Bonzini {"sll.ob", "D,S,k", 0x4bc00010, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
292076cad711SPaolo Bonzini {"sll.qh", "X,Y,Q", 0x78200010, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
292176cad711SPaolo Bonzini {"slt", "d,v,t", 0x0000002a, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
292276cad711SPaolo Bonzini {"slt", "d,v,I", 0, (int) M_SLT_I, INSN_MACRO, 0, I1 },
292376cad711SPaolo Bonzini {"slti", "t,r,j", 0x28000000, 0xfc000000, WR_t|RD_s, 0, I1 },
292476cad711SPaolo Bonzini {"sltiu", "t,r,j", 0x2c000000, 0xfc000000, WR_t|RD_s, 0, I1 },
292576cad711SPaolo Bonzini {"sltu", "d,v,t", 0x0000002b, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
292676cad711SPaolo Bonzini {"sltu", "d,v,I", 0, (int) M_SLTU_I, INSN_MACRO, 0, I1 },
292776cad711SPaolo Bonzini {"sne", "d,v,t", 0, (int) M_SNE, INSN_MACRO, 0, I1 },
292876cad711SPaolo Bonzini {"sne", "d,v,I", 0, (int) M_SNE_I, INSN_MACRO, 0, I1 },
292976cad711SPaolo Bonzini {"sqrt.d", "D,S", 0x46200004, 0xffff003f, WR_D|RD_S|FP_D, 0, I2 },
293076cad711SPaolo Bonzini {"sqrt.s", "D,S", 0x46000004, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 },
293176cad711SPaolo Bonzini {"sqrt.ps", "D,S", 0x46c00004, 0xffff003f, WR_D|RD_S|FP_D, 0, SB1 },
293276cad711SPaolo Bonzini {"srav", "d,t,s", 0x00000007, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I1 },
293376cad711SPaolo Bonzini {"sra", "d,w,s", 0x00000007, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I1 }, /* srav */
293476cad711SPaolo Bonzini {"sra", "d,w,<", 0x00000003, 0xffe0003f, WR_d|RD_t, 0, I1 },
293576cad711SPaolo Bonzini {"sra.qh", "X,Y,Q", 0x78200013, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
293676cad711SPaolo Bonzini {"srlv", "d,t,s", 0x00000006, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I1 },
293776cad711SPaolo Bonzini {"srl", "d,w,s", 0x00000006, 0xfc0007ff, WR_d|RD_t|RD_s, 0, I1 }, /* srlv */
293876cad711SPaolo Bonzini {"srl", "d,w,<", 0x00000002, 0xffe0003f, WR_d|RD_t, 0, I1 },
293976cad711SPaolo Bonzini {"srl.ob", "X,Y,Q", 0x78000012, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
294076cad711SPaolo Bonzini {"srl.ob", "D,S,T[e]", 0x48000012, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
294176cad711SPaolo Bonzini {"srl.ob", "D,S,k", 0x4bc00012, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
294276cad711SPaolo Bonzini {"srl.qh", "X,Y,Q", 0x78200012, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
294376cad711SPaolo Bonzini /* ssnop is at the start of the table. */
294476cad711SPaolo Bonzini {"standby", "", 0x42000021, 0xffffffff, 0, 0, V1 },
294576cad711SPaolo Bonzini {"sub", "d,v,t", 0x00000022, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
294676cad711SPaolo Bonzini {"sub", "d,v,I", 0, (int) M_SUB_I, INSN_MACRO, 0, I1 },
294776cad711SPaolo Bonzini {"sub.d", "D,V,T", 0x46200001, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I1 },
294876cad711SPaolo Bonzini {"sub.s", "D,V,T", 0x46000001, 0xffe0003f, WR_D|RD_S|RD_T|FP_S, 0, I1 },
294976cad711SPaolo Bonzini {"sub.ob", "X,Y,Q", 0x7800000a, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
295076cad711SPaolo Bonzini {"sub.ob", "D,S,T", 0x4ac0000a, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
295176cad711SPaolo Bonzini {"sub.ob", "D,S,T[e]", 0x4800000a, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
295276cad711SPaolo Bonzini {"sub.ob", "D,S,k", 0x4bc0000a, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
295376cad711SPaolo Bonzini {"sub.ps", "D,V,T", 0x46c00001, 0xffe0003f, WR_D|RD_S|RD_T|FP_D, 0, I5|I33 },
295476cad711SPaolo Bonzini {"sub.qh", "X,Y,Q", 0x7820000a, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
295576cad711SPaolo Bonzini {"suba.ob", "Y,Q", 0x78000036, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
295676cad711SPaolo Bonzini {"suba.qh", "Y,Q", 0x78200036, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
295776cad711SPaolo Bonzini {"subl.ob", "Y,Q", 0x78000436, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
295876cad711SPaolo Bonzini {"subl.qh", "Y,Q", 0x78200436, 0xfc2007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
295976cad711SPaolo Bonzini {"subu", "d,v,t", 0x00000023, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
296076cad711SPaolo Bonzini {"subu", "d,v,I", 0, (int) M_SUBU_I, INSN_MACRO, 0, I1 },
296176cad711SPaolo Bonzini {"suspend", "", 0x42000022, 0xffffffff, 0, 0, V1 },
296276cad711SPaolo Bonzini {"suxc1", "S,t(b)", 0x4c00000d, 0xfc0007ff, SM|RD_S|RD_t|RD_b, 0, I5|I33|N55},
296376cad711SPaolo Bonzini {"sw", "t,o(b)", 0xac000000, 0xfc000000, SM|RD_t|RD_b, 0, I1 },
296476cad711SPaolo Bonzini {"sw", "t,A(b)", 0, (int) M_SW_AB, INSN_MACRO, 0, I1 },
296576cad711SPaolo Bonzini {"swc0", "E,o(b)", 0xe0000000, 0xfc000000, SM|RD_C0|RD_b, 0, I1 },
296676cad711SPaolo Bonzini {"swc0", "E,A(b)", 0, (int) M_SWC0_AB, INSN_MACRO, 0, I1 },
296776cad711SPaolo Bonzini {"swc1", "T,o(b)", 0xe4000000, 0xfc000000, SM|RD_T|RD_b|FP_S, 0, I1 },
296876cad711SPaolo Bonzini {"swc1", "E,o(b)", 0xe4000000, 0xfc000000, SM|RD_T|RD_b|FP_S, 0, I1 },
296976cad711SPaolo Bonzini {"swc1", "T,A(b)", 0, (int) M_SWC1_AB, INSN_MACRO, 0, I1 },
297076cad711SPaolo Bonzini {"swc1", "E,A(b)", 0, (int) M_SWC1_AB, INSN_MACRO, 0, I1 },
297176cad711SPaolo Bonzini {"s.s", "T,o(b)", 0xe4000000, 0xfc000000, SM|RD_T|RD_b|FP_S, 0, I1 }, /* swc1 */
297276cad711SPaolo Bonzini {"s.s", "T,A(b)", 0, (int) M_SWC1_AB, INSN_MACRO, 0, I1 },
297376cad711SPaolo Bonzini {"swc2", "E,o(b)", 0xe8000000, 0xfc000000, SM|RD_C2|RD_b, 0, I1 },
297476cad711SPaolo Bonzini {"swc2", "E,A(b)", 0, (int) M_SWC2_AB, INSN_MACRO, 0, I1 },
297576cad711SPaolo Bonzini {"swc3", "E,o(b)", 0xec000000, 0xfc000000, SM|RD_C3|RD_b, 0, I1 },
297676cad711SPaolo Bonzini {"swc3", "E,A(b)", 0, (int) M_SWC3_AB, INSN_MACRO, 0, I1 },
297776cad711SPaolo Bonzini {"swl", "t,o(b)", 0xa8000000, 0xfc000000, SM|RD_t|RD_b, 0, I1 },
297876cad711SPaolo Bonzini {"swl", "t,A(b)", 0, (int) M_SWL_AB, INSN_MACRO, 0, I1 },
297976cad711SPaolo Bonzini {"scache", "t,o(b)", 0xa8000000, 0xfc000000, RD_t|RD_b, 0, I2 }, /* same */
298076cad711SPaolo Bonzini {"scache", "t,A(b)", 0, (int) M_SWL_AB, INSN_MACRO, 0, I2 }, /* as swl */
298176cad711SPaolo Bonzini {"swr", "t,o(b)", 0xb8000000, 0xfc000000, SM|RD_t|RD_b, 0, I1 },
298276cad711SPaolo Bonzini {"swr", "t,A(b)", 0, (int) M_SWR_AB, INSN_MACRO, 0, I1 },
298376cad711SPaolo Bonzini {"invalidate", "t,o(b)",0xb8000000, 0xfc000000, RD_t|RD_b, 0, I2 }, /* same */
298476cad711SPaolo Bonzini {"invalidate", "t,A(b)",0, (int) M_SWR_AB, INSN_MACRO, 0, I2 }, /* as swr */
298576cad711SPaolo Bonzini {"swxc1", "S,t(b)", 0x4c000008, 0xfc0007ff, SM|RD_S|RD_t|RD_b|FP_S, 0, I4|I33 },
298676cad711SPaolo Bonzini {"sync", "", 0x0000000f, 0xffffffff, INSN_SYNC, 0, I2|G1 },
298776cad711SPaolo Bonzini {"sync.p", "", 0x0000040f, 0xffffffff, INSN_SYNC, 0, I2 },
298876cad711SPaolo Bonzini {"sync.l", "", 0x0000000f, 0xffffffff, INSN_SYNC, 0, I2 },
298976cad711SPaolo Bonzini {"synci", "o(b)", 0x041f0000, 0xfc1f0000, SM|RD_b, 0, I33 },
299076cad711SPaolo Bonzini {"syscall", "", 0x0000000c, 0xffffffff, TRAP, 0, I1 },
299176cad711SPaolo Bonzini {"syscall", "B", 0x0000000c, 0xfc00003f, TRAP, 0, I1 },
299276cad711SPaolo Bonzini {"teqi", "s,j", 0x040c0000, 0xfc1f0000, RD_s|TRAP, 0, I2 },
299376cad711SPaolo Bonzini {"teq", "s,t", 0x00000034, 0xfc00ffff, RD_s|RD_t|TRAP, 0, I2 },
299476cad711SPaolo Bonzini {"teq", "s,t,q", 0x00000034, 0xfc00003f, RD_s|RD_t|TRAP, 0, I2 },
299576cad711SPaolo Bonzini {"teq", "s,j", 0x040c0000, 0xfc1f0000, RD_s|TRAP, 0, I2 }, /* teqi */
299676cad711SPaolo Bonzini {"teq", "s,I", 0, (int) M_TEQ_I, INSN_MACRO, 0, I2 },
299776cad711SPaolo Bonzini {"tgei", "s,j", 0x04080000, 0xfc1f0000, RD_s|TRAP, 0, I2 },
299876cad711SPaolo Bonzini {"tge", "s,t", 0x00000030, 0xfc00ffff, RD_s|RD_t|TRAP, 0, I2 },
299976cad711SPaolo Bonzini {"tge", "s,t,q", 0x00000030, 0xfc00003f, RD_s|RD_t|TRAP, 0, I2 },
300076cad711SPaolo Bonzini {"tge", "s,j", 0x04080000, 0xfc1f0000, RD_s|TRAP, 0, I2 }, /* tgei */
300176cad711SPaolo Bonzini {"tge", "s,I", 0, (int) M_TGE_I, INSN_MACRO, 0, I2 },
300276cad711SPaolo Bonzini {"tgeiu", "s,j", 0x04090000, 0xfc1f0000, RD_s|TRAP, 0, I2 },
300376cad711SPaolo Bonzini {"tgeu", "s,t", 0x00000031, 0xfc00ffff, RD_s|RD_t|TRAP, 0, I2 },
300476cad711SPaolo Bonzini {"tgeu", "s,t,q", 0x00000031, 0xfc00003f, RD_s|RD_t|TRAP, 0, I2 },
300576cad711SPaolo Bonzini {"tgeu", "s,j", 0x04090000, 0xfc1f0000, RD_s|TRAP, 0, I2 }, /* tgeiu */
300676cad711SPaolo Bonzini {"tgeu", "s,I", 0, (int) M_TGEU_I, INSN_MACRO, 0, I2 },
300776cad711SPaolo Bonzini {"tlbp", "", 0x42000008, 0xffffffff, INSN_TLB, 0, I1 },
300876cad711SPaolo Bonzini {"tlbr", "", 0x42000001, 0xffffffff, INSN_TLB, 0, I1 },
300976cad711SPaolo Bonzini {"tlbwi", "", 0x42000002, 0xffffffff, INSN_TLB, 0, I1 },
30109456c2fbSLeon Alrae {"tlbinv", "", 0x42000003, 0xffffffff, INSN_TLB, 0, I32 },
30119456c2fbSLeon Alrae {"tlbinvf", "", 0x42000004, 0xffffffff, INSN_TLB, 0, I32 },
301276cad711SPaolo Bonzini {"tlbwr", "", 0x42000006, 0xffffffff, INSN_TLB, 0, I1 },
301376cad711SPaolo Bonzini {"tlti", "s,j", 0x040a0000, 0xfc1f0000, RD_s|TRAP, 0, I2 },
301476cad711SPaolo Bonzini {"tlt", "s,t", 0x00000032, 0xfc00ffff, RD_s|RD_t|TRAP, 0, I2 },
301576cad711SPaolo Bonzini {"tlt", "s,t,q", 0x00000032, 0xfc00003f, RD_s|RD_t|TRAP, 0, I2 },
301676cad711SPaolo Bonzini {"tlt", "s,j", 0x040a0000, 0xfc1f0000, RD_s|TRAP, 0, I2 }, /* tlti */
301776cad711SPaolo Bonzini {"tlt", "s,I", 0, (int) M_TLT_I, INSN_MACRO, 0, I2 },
301876cad711SPaolo Bonzini {"tltiu", "s,j", 0x040b0000, 0xfc1f0000, RD_s|TRAP, 0, I2 },
301976cad711SPaolo Bonzini {"tltu", "s,t", 0x00000033, 0xfc00ffff, RD_s|RD_t|TRAP, 0, I2 },
302076cad711SPaolo Bonzini {"tltu", "s,t,q", 0x00000033, 0xfc00003f, RD_s|RD_t|TRAP, 0, I2 },
302176cad711SPaolo Bonzini {"tltu", "s,j", 0x040b0000, 0xfc1f0000, RD_s|TRAP, 0, I2 }, /* tltiu */
302276cad711SPaolo Bonzini {"tltu", "s,I", 0, (int) M_TLTU_I, INSN_MACRO, 0, I2 },
302376cad711SPaolo Bonzini {"tnei", "s,j", 0x040e0000, 0xfc1f0000, RD_s|TRAP, 0, I2 },
302476cad711SPaolo Bonzini {"tne", "s,t", 0x00000036, 0xfc00ffff, RD_s|RD_t|TRAP, 0, I2 },
302576cad711SPaolo Bonzini {"tne", "s,t,q", 0x00000036, 0xfc00003f, RD_s|RD_t|TRAP, 0, I2 },
302676cad711SPaolo Bonzini {"tne", "s,j", 0x040e0000, 0xfc1f0000, RD_s|TRAP, 0, I2 }, /* tnei */
302776cad711SPaolo Bonzini {"tne", "s,I", 0, (int) M_TNE_I, INSN_MACRO, 0, I2 },
302876cad711SPaolo Bonzini {"trunc.l.d", "D,S", 0x46200009, 0xffff003f, WR_D|RD_S|FP_D, 0, I3|I33 },
302976cad711SPaolo Bonzini {"trunc.l.s", "D,S", 0x46000009, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I3|I33 },
303076cad711SPaolo Bonzini {"trunc.w.d", "D,S", 0x4620000d, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 },
303176cad711SPaolo Bonzini {"trunc.w.d", "D,S,x", 0x4620000d, 0xffff003f, WR_D|RD_S|FP_S|FP_D, 0, I2 },
303276cad711SPaolo Bonzini {"trunc.w.d", "D,S,t", 0, (int) M_TRUNCWD, INSN_MACRO, 0, I1 },
303376cad711SPaolo Bonzini {"trunc.w.s", "D,S", 0x4600000d, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 },
303476cad711SPaolo Bonzini {"trunc.w.s", "D,S,x", 0x4600000d, 0xffff003f, WR_D|RD_S|FP_S, 0, I2 },
303576cad711SPaolo Bonzini {"trunc.w.s", "D,S,t", 0, (int) M_TRUNCWS, INSN_MACRO, 0, I1 },
303676cad711SPaolo Bonzini {"uld", "t,o(b)", 0, (int) M_ULD, INSN_MACRO, 0, I3 },
303776cad711SPaolo Bonzini {"uld", "t,A(b)", 0, (int) M_ULD_A, INSN_MACRO, 0, I3 },
303876cad711SPaolo Bonzini {"ulh", "t,o(b)", 0, (int) M_ULH, INSN_MACRO, 0, I1 },
303976cad711SPaolo Bonzini {"ulh", "t,A(b)", 0, (int) M_ULH_A, INSN_MACRO, 0, I1 },
304076cad711SPaolo Bonzini {"ulhu", "t,o(b)", 0, (int) M_ULHU, INSN_MACRO, 0, I1 },
304176cad711SPaolo Bonzini {"ulhu", "t,A(b)", 0, (int) M_ULHU_A, INSN_MACRO, 0, I1 },
304276cad711SPaolo Bonzini {"ulw", "t,o(b)", 0, (int) M_ULW, INSN_MACRO, 0, I1 },
304376cad711SPaolo Bonzini {"ulw", "t,A(b)", 0, (int) M_ULW_A, INSN_MACRO, 0, I1 },
304476cad711SPaolo Bonzini {"usd", "t,o(b)", 0, (int) M_USD, INSN_MACRO, 0, I3 },
304576cad711SPaolo Bonzini {"usd", "t,A(b)", 0, (int) M_USD_A, INSN_MACRO, 0, I3 },
304676cad711SPaolo Bonzini {"ush", "t,o(b)", 0, (int) M_USH, INSN_MACRO, 0, I1 },
304776cad711SPaolo Bonzini {"ush", "t,A(b)", 0, (int) M_USH_A, INSN_MACRO, 0, I1 },
304876cad711SPaolo Bonzini {"usw", "t,o(b)", 0, (int) M_USW, INSN_MACRO, 0, I1 },
304976cad711SPaolo Bonzini {"usw", "t,A(b)", 0, (int) M_USW_A, INSN_MACRO, 0, I1 },
305076cad711SPaolo Bonzini {"wach.ob", "Y", 0x7a00003e, 0xffff07ff, RD_S|FP_D, WR_MACC, MX|SB1 },
305176cad711SPaolo Bonzini {"wach.ob", "S", 0x4a00003e, 0xffff07ff, RD_S, 0, N54 },
305276cad711SPaolo Bonzini {"wach.qh", "Y", 0x7a20003e, 0xffff07ff, RD_S|FP_D, WR_MACC, MX },
305376cad711SPaolo Bonzini {"wacl.ob", "Y,Z", 0x7800003e, 0xffe007ff, RD_S|RD_T|FP_D, WR_MACC, MX|SB1 },
305476cad711SPaolo Bonzini {"wacl.ob", "S,T", 0x4800003e, 0xffe007ff, RD_S|RD_T, 0, N54 },
305576cad711SPaolo Bonzini {"wacl.qh", "Y,Z", 0x7820003e, 0xffe007ff, RD_S|RD_T|FP_D, WR_MACC, MX },
305676cad711SPaolo Bonzini {"wait", "", 0x42000020, 0xffffffff, TRAP, 0, I3|I32 },
305776cad711SPaolo Bonzini {"wait", "J", 0x42000020, 0xfe00003f, TRAP, 0, I32|N55 },
305876cad711SPaolo Bonzini {"waiti", "", 0x42000020, 0xffffffff, TRAP, 0, L1 },
305976cad711SPaolo Bonzini {"wrpgpr", "d,w", 0x41c00000, 0xffe007ff, RD_t, 0, I33 },
306076cad711SPaolo Bonzini {"wsbh", "d,w", 0x7c0000a0, 0xffe007ff, WR_d|RD_t, 0, I33 },
306176cad711SPaolo Bonzini {"xor", "d,v,t", 0x00000026, 0xfc0007ff, WR_d|RD_s|RD_t, 0, I1 },
306276cad711SPaolo Bonzini {"xor", "t,r,I", 0, (int) M_XOR_I, INSN_MACRO, 0, I1 },
306376cad711SPaolo Bonzini {"xor.ob", "X,Y,Q", 0x7800000d, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX|SB1 },
306476cad711SPaolo Bonzini {"xor.ob", "D,S,T", 0x4ac0000d, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
306576cad711SPaolo Bonzini {"xor.ob", "D,S,T[e]", 0x4800000d, 0xfe20003f, WR_D|RD_S|RD_T, 0, N54 },
306676cad711SPaolo Bonzini {"xor.ob", "D,S,k", 0x4bc0000d, 0xffe0003f, WR_D|RD_S|RD_T, 0, N54 },
306776cad711SPaolo Bonzini {"xor.qh", "X,Y,Q", 0x7820000d, 0xfc20003f, WR_D|RD_S|RD_T|FP_D, 0, MX },
306876cad711SPaolo Bonzini {"xori", "t,r,i", 0x38000000, 0xfc000000, WR_t|RD_s, 0, I1 },
306976cad711SPaolo Bonzini {"yield", "s", 0x7c000009, 0xfc1fffff, TRAP|RD_s, 0, MT32 },
307076cad711SPaolo Bonzini {"yield", "d,s", 0x7c000009, 0xfc1f07ff, TRAP|WR_d|RD_s, 0, MT32 },
307176cad711SPaolo Bonzini
307276cad711SPaolo Bonzini /* User Defined Instruction. */
307376cad711SPaolo Bonzini {"udi0", "s,t,d,+1",0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
307476cad711SPaolo Bonzini {"udi0", "s,t,+2", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
307576cad711SPaolo Bonzini {"udi0", "s,+3", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
307676cad711SPaolo Bonzini {"udi0", "+4", 0x70000010, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
307776cad711SPaolo Bonzini {"udi1", "s,t,d,+1",0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
307876cad711SPaolo Bonzini {"udi1", "s,t,+2", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
307976cad711SPaolo Bonzini {"udi1", "s,+3", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308076cad711SPaolo Bonzini {"udi1", "+4", 0x70000011, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308176cad711SPaolo Bonzini {"udi2", "s,t,d,+1",0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308276cad711SPaolo Bonzini {"udi2", "s,t,+2", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308376cad711SPaolo Bonzini {"udi2", "s,+3", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308476cad711SPaolo Bonzini {"udi2", "+4", 0x70000012, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308576cad711SPaolo Bonzini {"udi3", "s,t,d,+1",0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308676cad711SPaolo Bonzini {"udi3", "s,t,+2", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308776cad711SPaolo Bonzini {"udi3", "s,+3", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308876cad711SPaolo Bonzini {"udi3", "+4", 0x70000013, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
308976cad711SPaolo Bonzini {"udi4", "s,t,d,+1",0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309076cad711SPaolo Bonzini {"udi4", "s,t,+2", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309176cad711SPaolo Bonzini {"udi4", "s,+3", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309276cad711SPaolo Bonzini {"udi4", "+4", 0x70000014, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309376cad711SPaolo Bonzini {"udi5", "s,t,d,+1",0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309476cad711SPaolo Bonzini {"udi5", "s,t,+2", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309576cad711SPaolo Bonzini {"udi5", "s,+3", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309676cad711SPaolo Bonzini {"udi5", "+4", 0x70000015, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309776cad711SPaolo Bonzini {"udi6", "s,t,d,+1",0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309876cad711SPaolo Bonzini {"udi6", "s,t,+2", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
309976cad711SPaolo Bonzini {"udi6", "s,+3", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310076cad711SPaolo Bonzini {"udi6", "+4", 0x70000016, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310176cad711SPaolo Bonzini {"udi7", "s,t,d,+1",0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310276cad711SPaolo Bonzini {"udi7", "s,t,+2", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310376cad711SPaolo Bonzini {"udi7", "s,+3", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310476cad711SPaolo Bonzini {"udi7", "+4", 0x70000017, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310576cad711SPaolo Bonzini {"udi8", "s,t,d,+1",0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310676cad711SPaolo Bonzini {"udi8", "s,t,+2", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310776cad711SPaolo Bonzini {"udi8", "s,+3", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310876cad711SPaolo Bonzini {"udi8", "+4", 0x70000018, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
310976cad711SPaolo Bonzini {"udi9", "s,t,d,+1",0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311076cad711SPaolo Bonzini {"udi9", "s,t,+2", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311176cad711SPaolo Bonzini {"udi9", "s,+3", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311276cad711SPaolo Bonzini {"udi9", "+4", 0x70000019, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311376cad711SPaolo Bonzini {"udi10", "s,t,d,+1",0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311476cad711SPaolo Bonzini {"udi10", "s,t,+2", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311576cad711SPaolo Bonzini {"udi10", "s,+3", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311676cad711SPaolo Bonzini {"udi10", "+4", 0x7000001a, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311776cad711SPaolo Bonzini {"udi11", "s,t,d,+1",0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311876cad711SPaolo Bonzini {"udi11", "s,t,+2", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
311976cad711SPaolo Bonzini {"udi11", "s,+3", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312076cad711SPaolo Bonzini {"udi11", "+4", 0x7000001b, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312176cad711SPaolo Bonzini {"udi12", "s,t,d,+1",0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312276cad711SPaolo Bonzini {"udi12", "s,t,+2", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312376cad711SPaolo Bonzini {"udi12", "s,+3", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312476cad711SPaolo Bonzini {"udi12", "+4", 0x7000001c, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312576cad711SPaolo Bonzini {"udi13", "s,t,d,+1",0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312676cad711SPaolo Bonzini {"udi13", "s,t,+2", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312776cad711SPaolo Bonzini {"udi13", "s,+3", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312876cad711SPaolo Bonzini {"udi13", "+4", 0x7000001d, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
312976cad711SPaolo Bonzini {"udi14", "s,t,d,+1",0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
313076cad711SPaolo Bonzini {"udi14", "s,t,+2", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
313176cad711SPaolo Bonzini {"udi14", "s,+3", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
313276cad711SPaolo Bonzini {"udi14", "+4", 0x7000001e, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
313376cad711SPaolo Bonzini {"udi15", "s,t,d,+1",0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
313476cad711SPaolo Bonzini {"udi15", "s,t,+2", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
313576cad711SPaolo Bonzini {"udi15", "s,+3", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
313676cad711SPaolo Bonzini {"udi15", "+4", 0x7000001f, 0xfc00003f, WR_d|RD_s|RD_t, 0, I33 },
313776cad711SPaolo Bonzini
313876cad711SPaolo Bonzini /* Coprocessor 2 move/branch operations overlap with VR5400 .ob format
313976cad711SPaolo Bonzini instructions so they are here for the latters to take precedence. */
314076cad711SPaolo Bonzini {"bc2f", "p", 0x49000000, 0xffff0000, CBD|RD_CC, 0, I1 },
314176cad711SPaolo Bonzini {"bc2f", "N,p", 0x49000000, 0xffe30000, CBD|RD_CC, 0, I32 },
314276cad711SPaolo Bonzini {"bc2fl", "p", 0x49020000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
314376cad711SPaolo Bonzini {"bc2fl", "N,p", 0x49020000, 0xffe30000, CBL|RD_CC, 0, I32 },
314476cad711SPaolo Bonzini {"bc2t", "p", 0x49010000, 0xffff0000, CBD|RD_CC, 0, I1 },
314576cad711SPaolo Bonzini {"bc2t", "N,p", 0x49010000, 0xffe30000, CBD|RD_CC, 0, I32 },
314676cad711SPaolo Bonzini {"bc2tl", "p", 0x49030000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
314776cad711SPaolo Bonzini {"bc2tl", "N,p", 0x49030000, 0xffe30000, CBL|RD_CC, 0, I32 },
314876cad711SPaolo Bonzini {"cfc2", "t,G", 0x48400000, 0xffe007ff, LCD|WR_t|RD_C2, 0, I1 },
314976cad711SPaolo Bonzini {"ctc2", "t,G", 0x48c00000, 0xffe007ff, COD|RD_t|WR_CC, 0, I1 },
315076cad711SPaolo Bonzini {"dmfc2", "t,G", 0x48200000, 0xffe007ff, LCD|WR_t|RD_C2, 0, I3 },
315176cad711SPaolo Bonzini {"dmfc2", "t,G,H", 0x48200000, 0xffe007f8, LCD|WR_t|RD_C2, 0, I64 },
315276cad711SPaolo Bonzini {"dmtc2", "t,G", 0x48a00000, 0xffe007ff, COD|RD_t|WR_C2|WR_CC, 0, I3 },
315376cad711SPaolo Bonzini {"dmtc2", "t,G,H", 0x48a00000, 0xffe007f8, COD|RD_t|WR_C2|WR_CC, 0, I64 },
315476cad711SPaolo Bonzini {"mfc2", "t,G", 0x48000000, 0xffe007ff, LCD|WR_t|RD_C2, 0, I1 },
315576cad711SPaolo Bonzini {"mfc2", "t,G,H", 0x48000000, 0xffe007f8, LCD|WR_t|RD_C2, 0, I32 },
315676cad711SPaolo Bonzini {"mfhc2", "t,G", 0x48600000, 0xffe007ff, LCD|WR_t|RD_C2, 0, I33 },
315776cad711SPaolo Bonzini {"mfhc2", "t,G,H", 0x48600000, 0xffe007f8, LCD|WR_t|RD_C2, 0, I33 },
315876cad711SPaolo Bonzini {"mfhc2", "t,i", 0x48600000, 0xffe00000, LCD|WR_t|RD_C2, 0, I33 },
315976cad711SPaolo Bonzini {"mtc2", "t,G", 0x48800000, 0xffe007ff, COD|RD_t|WR_C2|WR_CC, 0, I1 },
316076cad711SPaolo Bonzini {"mtc2", "t,G,H", 0x48800000, 0xffe007f8, COD|RD_t|WR_C2|WR_CC, 0, I32 },
316176cad711SPaolo Bonzini {"mthc2", "t,G", 0x48e00000, 0xffe007ff, COD|RD_t|WR_C2|WR_CC, 0, I33 },
316276cad711SPaolo Bonzini {"mthc2", "t,G,H", 0x48e00000, 0xffe007f8, COD|RD_t|WR_C2|WR_CC, 0, I33 },
316376cad711SPaolo Bonzini {"mthc2", "t,i", 0x48e00000, 0xffe00000, COD|RD_t|WR_C2|WR_CC, 0, I33 },
316476cad711SPaolo Bonzini
316576cad711SPaolo Bonzini /* Coprocessor 3 move/branch operations overlap with MIPS IV COP1X
316676cad711SPaolo Bonzini instructions, so they are here for the latters to take precedence. */
316776cad711SPaolo Bonzini {"bc3f", "p", 0x4d000000, 0xffff0000, CBD|RD_CC, 0, I1 },
316876cad711SPaolo Bonzini {"bc3fl", "p", 0x4d020000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
316976cad711SPaolo Bonzini {"bc3t", "p", 0x4d010000, 0xffff0000, CBD|RD_CC, 0, I1 },
317076cad711SPaolo Bonzini {"bc3tl", "p", 0x4d030000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
317176cad711SPaolo Bonzini {"cfc3", "t,G", 0x4c400000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I1 },
317276cad711SPaolo Bonzini {"ctc3", "t,G", 0x4cc00000, 0xffe007ff, COD|RD_t|WR_CC, 0, I1 },
317376cad711SPaolo Bonzini {"dmfc3", "t,G", 0x4c200000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I3 },
317476cad711SPaolo Bonzini {"dmtc3", "t,G", 0x4ca00000, 0xffe007ff, COD|RD_t|WR_C3|WR_CC, 0, I3 },
317576cad711SPaolo Bonzini {"mfc3", "t,G", 0x4c000000, 0xffe007ff, LCD|WR_t|RD_C3, 0, I1 },
317676cad711SPaolo Bonzini {"mfc3", "t,G,H", 0x4c000000, 0xffe007f8, LCD|WR_t|RD_C3, 0, I32 },
317776cad711SPaolo Bonzini {"mtc3", "t,G", 0x4c800000, 0xffe007ff, COD|RD_t|WR_C3|WR_CC, 0, I1 },
317876cad711SPaolo Bonzini {"mtc3", "t,G,H", 0x4c800000, 0xffe007f8, COD|RD_t|WR_C3|WR_CC, 0, I32 },
317976cad711SPaolo Bonzini
318076cad711SPaolo Bonzini /* No hazard protection on coprocessor instructions--they shouldn't
318176cad711SPaolo Bonzini change the state of the processor and if they do it's up to the
318276cad711SPaolo Bonzini user to put in nops as necessary. These are at the end so that the
318376cad711SPaolo Bonzini disassembler recognizes more specific versions first. */
318476cad711SPaolo Bonzini {"c0", "C", 0x42000000, 0xfe000000, 0, 0, I1 },
318576cad711SPaolo Bonzini {"c1", "C", 0x46000000, 0xfe000000, 0, 0, I1 },
318676cad711SPaolo Bonzini {"c2", "C", 0x4a000000, 0xfe000000, 0, 0, I1 },
318776cad711SPaolo Bonzini {"c3", "C", 0x4e000000, 0xfe000000, 0, 0, I1 },
318876cad711SPaolo Bonzini {"cop0", "C", 0, (int) M_COP0, INSN_MACRO, 0, I1 },
318976cad711SPaolo Bonzini {"cop1", "C", 0, (int) M_COP1, INSN_MACRO, 0, I1 },
319076cad711SPaolo Bonzini {"cop2", "C", 0, (int) M_COP2, INSN_MACRO, 0, I1 },
319176cad711SPaolo Bonzini {"cop3", "C", 0, (int) M_COP3, INSN_MACRO, 0, I1 },
319276cad711SPaolo Bonzini /* Conflicts with the 4650's "mul" instruction. Nobody's using the
319376cad711SPaolo Bonzini 4010 any more, so move this insn out of the way. If the object
319476cad711SPaolo Bonzini format gave us more info, we could do this right. */
319576cad711SPaolo Bonzini {"addciu", "t,r,j", 0x70000000, 0xfc000000, WR_t|RD_s, 0, L1 },
319676cad711SPaolo Bonzini /* MIPS DSP ASE */
319776cad711SPaolo Bonzini {"absq_s.ph", "d,t", 0x7c000252, 0xffe007ff, WR_d|RD_t, 0, D32 },
319876cad711SPaolo Bonzini {"absq_s.pw", "d,t", 0x7c000456, 0xffe007ff, WR_d|RD_t, 0, D64 },
319976cad711SPaolo Bonzini {"absq_s.qh", "d,t", 0x7c000256, 0xffe007ff, WR_d|RD_t, 0, D64 },
320076cad711SPaolo Bonzini {"absq_s.w", "d,t", 0x7c000452, 0xffe007ff, WR_d|RD_t, 0, D32 },
320176cad711SPaolo Bonzini {"addq.ph", "d,s,t", 0x7c000290, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
320276cad711SPaolo Bonzini {"addq.pw", "d,s,t", 0x7c000494, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
320376cad711SPaolo Bonzini {"addq.qh", "d,s,t", 0x7c000294, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
320476cad711SPaolo Bonzini {"addq_s.ph", "d,s,t", 0x7c000390, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
320576cad711SPaolo Bonzini {"addq_s.pw", "d,s,t", 0x7c000594, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
320676cad711SPaolo Bonzini {"addq_s.qh", "d,s,t", 0x7c000394, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
320776cad711SPaolo Bonzini {"addq_s.w", "d,s,t", 0x7c000590, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
320876cad711SPaolo Bonzini {"addsc", "d,s,t", 0x7c000410, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
320976cad711SPaolo Bonzini {"addu.ob", "d,s,t", 0x7c000014, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
321076cad711SPaolo Bonzini {"addu.qb", "d,s,t", 0x7c000010, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
321176cad711SPaolo Bonzini {"addu_s.ob", "d,s,t", 0x7c000114, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
321276cad711SPaolo Bonzini {"addu_s.qb", "d,s,t", 0x7c000110, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
321376cad711SPaolo Bonzini {"addwc", "d,s,t", 0x7c000450, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
321476cad711SPaolo Bonzini {"bitrev", "d,t", 0x7c0006d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
321576cad711SPaolo Bonzini {"bposge32", "p", 0x041c0000, 0xffff0000, CBD, 0, D32 },
321676cad711SPaolo Bonzini {"bposge64", "p", 0x041d0000, 0xffff0000, CBD, 0, D64 },
321776cad711SPaolo Bonzini {"cmp.eq.ph", "s,t", 0x7c000211, 0xfc00ffff, RD_s|RD_t, 0, D32 },
321876cad711SPaolo Bonzini {"cmp.eq.pw", "s,t", 0x7c000415, 0xfc00ffff, RD_s|RD_t, 0, D64 },
321976cad711SPaolo Bonzini {"cmp.eq.qh", "s,t", 0x7c000215, 0xfc00ffff, RD_s|RD_t, 0, D64 },
322076cad711SPaolo Bonzini {"cmpgu.eq.ob", "d,s,t", 0x7c000115, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
322176cad711SPaolo Bonzini {"cmpgu.eq.qb", "d,s,t", 0x7c000111, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
322276cad711SPaolo Bonzini {"cmpgu.le.ob", "d,s,t", 0x7c000195, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
322376cad711SPaolo Bonzini {"cmpgu.le.qb", "d,s,t", 0x7c000191, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
322476cad711SPaolo Bonzini {"cmpgu.lt.ob", "d,s,t", 0x7c000155, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
322576cad711SPaolo Bonzini {"cmpgu.lt.qb", "d,s,t", 0x7c000151, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
322676cad711SPaolo Bonzini {"cmp.le.ph", "s,t", 0x7c000291, 0xfc00ffff, RD_s|RD_t, 0, D32 },
322776cad711SPaolo Bonzini {"cmp.le.pw", "s,t", 0x7c000495, 0xfc00ffff, RD_s|RD_t, 0, D64 },
322876cad711SPaolo Bonzini {"cmp.le.qh", "s,t", 0x7c000295, 0xfc00ffff, RD_s|RD_t, 0, D64 },
322976cad711SPaolo Bonzini {"cmp.lt.ph", "s,t", 0x7c000251, 0xfc00ffff, RD_s|RD_t, 0, D32 },
323076cad711SPaolo Bonzini {"cmp.lt.pw", "s,t", 0x7c000455, 0xfc00ffff, RD_s|RD_t, 0, D64 },
323176cad711SPaolo Bonzini {"cmp.lt.qh", "s,t", 0x7c000255, 0xfc00ffff, RD_s|RD_t, 0, D64 },
323276cad711SPaolo Bonzini {"cmpu.eq.ob", "s,t", 0x7c000015, 0xfc00ffff, RD_s|RD_t, 0, D64 },
323376cad711SPaolo Bonzini {"cmpu.eq.qb", "s,t", 0x7c000011, 0xfc00ffff, RD_s|RD_t, 0, D32 },
323476cad711SPaolo Bonzini {"cmpu.le.ob", "s,t", 0x7c000095, 0xfc00ffff, RD_s|RD_t, 0, D64 },
323576cad711SPaolo Bonzini {"cmpu.le.qb", "s,t", 0x7c000091, 0xfc00ffff, RD_s|RD_t, 0, D32 },
323676cad711SPaolo Bonzini {"cmpu.lt.ob", "s,t", 0x7c000055, 0xfc00ffff, RD_s|RD_t, 0, D64 },
323776cad711SPaolo Bonzini {"cmpu.lt.qb", "s,t", 0x7c000051, 0xfc00ffff, RD_s|RD_t, 0, D32 },
323876cad711SPaolo Bonzini {"dextpdp", "t,7,6", 0x7c0002bc, 0xfc00e7ff, WR_t|RD_a|DSP_VOLA, 0, D64 },
323976cad711SPaolo Bonzini {"dextpdpv", "t,7,s", 0x7c0002fc, 0xfc00e7ff, WR_t|RD_a|RD_s|DSP_VOLA, 0, D64 },
324076cad711SPaolo Bonzini {"dextp", "t,7,6", 0x7c0000bc, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
324176cad711SPaolo Bonzini {"dextpv", "t,7,s", 0x7c0000fc, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
324276cad711SPaolo Bonzini {"dextr.l", "t,7,6", 0x7c00043c, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
324376cad711SPaolo Bonzini {"dextr_r.l", "t,7,6", 0x7c00053c, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
324476cad711SPaolo Bonzini {"dextr_rs.l", "t,7,6", 0x7c0005bc, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
324576cad711SPaolo Bonzini {"dextr_rs.w", "t,7,6", 0x7c0001bc, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
324676cad711SPaolo Bonzini {"dextr_r.w", "t,7,6", 0x7c00013c, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
324776cad711SPaolo Bonzini {"dextr_s.h", "t,7,6", 0x7c0003bc, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
324876cad711SPaolo Bonzini {"dextrv.l", "t,7,s", 0x7c00047c, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
324976cad711SPaolo Bonzini {"dextrv_r.l", "t,7,s", 0x7c00057c, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
325076cad711SPaolo Bonzini {"dextrv_rs.l", "t,7,s", 0x7c0005fc, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
325176cad711SPaolo Bonzini {"dextrv_rs.w", "t,7,s", 0x7c0001fc, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
325276cad711SPaolo Bonzini {"dextrv_r.w", "t,7,s", 0x7c00017c, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
325376cad711SPaolo Bonzini {"dextrv_s.h", "t,7,s", 0x7c0003fc, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
325476cad711SPaolo Bonzini {"dextrv.w", "t,7,s", 0x7c00007c, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D64 },
325576cad711SPaolo Bonzini {"dextr.w", "t,7,6", 0x7c00003c, 0xfc00e7ff, WR_t|RD_a, 0, D64 },
325676cad711SPaolo Bonzini {"dinsv", "t,s", 0x7c00000d, 0xfc00ffff, WR_t|RD_s, 0, D64 },
325776cad711SPaolo Bonzini {"dmadd", "7,s,t", 0x7c000674, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
325876cad711SPaolo Bonzini {"dmaddu", "7,s,t", 0x7c000774, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
325976cad711SPaolo Bonzini {"dmsub", "7,s,t", 0x7c0006f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
326076cad711SPaolo Bonzini {"dmsubu", "7,s,t", 0x7c0007f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
326176cad711SPaolo Bonzini {"dmthlip", "s,7", 0x7c0007fc, 0xfc1fe7ff, RD_s|MOD_a|DSP_VOLA, 0, D64 },
326276cad711SPaolo Bonzini {"dpaq_sa.l.pw", "7,s,t", 0x7c000334, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
326376cad711SPaolo Bonzini {"dpaq_sa.l.w", "7,s,t", 0x7c000330, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
326476cad711SPaolo Bonzini {"dpaq_s.w.ph", "7,s,t", 0x7c000130, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
326576cad711SPaolo Bonzini {"dpaq_s.w.qh", "7,s,t", 0x7c000134, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
326676cad711SPaolo Bonzini {"dpau.h.obl", "7,s,t", 0x7c0000f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
326776cad711SPaolo Bonzini {"dpau.h.obr", "7,s,t", 0x7c0001f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
326876cad711SPaolo Bonzini {"dpau.h.qbl", "7,s,t", 0x7c0000f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
326976cad711SPaolo Bonzini {"dpau.h.qbr", "7,s,t", 0x7c0001f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
327076cad711SPaolo Bonzini {"dpsq_sa.l.pw", "7,s,t", 0x7c000374, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
327176cad711SPaolo Bonzini {"dpsq_sa.l.w", "7,s,t", 0x7c000370, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
327276cad711SPaolo Bonzini {"dpsq_s.w.ph", "7,s,t", 0x7c000170, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
327376cad711SPaolo Bonzini {"dpsq_s.w.qh", "7,s,t", 0x7c000174, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
327476cad711SPaolo Bonzini {"dpsu.h.obl", "7,s,t", 0x7c0002f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
327576cad711SPaolo Bonzini {"dpsu.h.obr", "7,s,t", 0x7c0003f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
327676cad711SPaolo Bonzini {"dpsu.h.qbl", "7,s,t", 0x7c0002f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
327776cad711SPaolo Bonzini {"dpsu.h.qbr", "7,s,t", 0x7c0003f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
327876cad711SPaolo Bonzini {"dshilo", "7,:", 0x7c0006bc, 0xfc07e7ff, MOD_a, 0, D64 },
327976cad711SPaolo Bonzini {"dshilov", "7,s", 0x7c0006fc, 0xfc1fe7ff, MOD_a|RD_s, 0, D64 },
328076cad711SPaolo Bonzini {"extpdp", "t,7,6", 0x7c0002b8, 0xfc00e7ff, WR_t|RD_a|DSP_VOLA, 0, D32 },
328176cad711SPaolo Bonzini {"extpdpv", "t,7,s", 0x7c0002f8, 0xfc00e7ff, WR_t|RD_a|RD_s|DSP_VOLA, 0, D32 },
328276cad711SPaolo Bonzini {"extp", "t,7,6", 0x7c0000b8, 0xfc00e7ff, WR_t|RD_a, 0, D32 },
328376cad711SPaolo Bonzini {"extpv", "t,7,s", 0x7c0000f8, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D32 },
328476cad711SPaolo Bonzini {"extr_rs.w", "t,7,6", 0x7c0001b8, 0xfc00e7ff, WR_t|RD_a, 0, D32 },
328576cad711SPaolo Bonzini {"extr_r.w", "t,7,6", 0x7c000138, 0xfc00e7ff, WR_t|RD_a, 0, D32 },
328676cad711SPaolo Bonzini {"extr_s.h", "t,7,6", 0x7c0003b8, 0xfc00e7ff, WR_t|RD_a, 0, D32 },
328776cad711SPaolo Bonzini {"extrv_rs.w", "t,7,s", 0x7c0001f8, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D32 },
328876cad711SPaolo Bonzini {"extrv_r.w", "t,7,s", 0x7c000178, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D32 },
328976cad711SPaolo Bonzini {"extrv_s.h", "t,7,s", 0x7c0003f8, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D32 },
329076cad711SPaolo Bonzini {"extrv.w", "t,7,s", 0x7c000078, 0xfc00e7ff, WR_t|RD_a|RD_s, 0, D32 },
329176cad711SPaolo Bonzini {"extr.w", "t,7,6", 0x7c000038, 0xfc00e7ff, WR_t|RD_a, 0, D32 },
329276cad711SPaolo Bonzini {"insv", "t,s", 0x7c00000c, 0xfc00ffff, WR_t|RD_s, 0, D32 },
329376cad711SPaolo Bonzini {"lbux", "d,t(b)", 0x7c00018a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b, 0, D32 },
329476cad711SPaolo Bonzini {"ldx", "d,t(b)", 0x7c00020a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b, 0, D64 },
329576cad711SPaolo Bonzini {"lhx", "d,t(b)", 0x7c00010a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b, 0, D32 },
329676cad711SPaolo Bonzini {"lwx", "d,t(b)", 0x7c00000a, 0xfc0007ff, LDD|WR_d|RD_t|RD_b, 0, D32 },
329776cad711SPaolo Bonzini {"maq_sa.w.phl", "7,s,t", 0x7c000430, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
329876cad711SPaolo Bonzini {"maq_sa.w.phr", "7,s,t", 0x7c0004b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
329976cad711SPaolo Bonzini {"maq_sa.w.qhll", "7,s,t", 0x7c000434, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
330076cad711SPaolo Bonzini {"maq_sa.w.qhlr", "7,s,t", 0x7c000474, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
330176cad711SPaolo Bonzini {"maq_sa.w.qhrl", "7,s,t", 0x7c0004b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
330276cad711SPaolo Bonzini {"maq_sa.w.qhrr", "7,s,t", 0x7c0004f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
330376cad711SPaolo Bonzini {"maq_s.l.pwl", "7,s,t", 0x7c000734, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
330476cad711SPaolo Bonzini {"maq_s.l.pwr", "7,s,t", 0x7c0007b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
330576cad711SPaolo Bonzini {"maq_s.w.phl", "7,s,t", 0x7c000530, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
330676cad711SPaolo Bonzini {"maq_s.w.phr", "7,s,t", 0x7c0005b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
330776cad711SPaolo Bonzini {"maq_s.w.qhll", "7,s,t", 0x7c000534, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
330876cad711SPaolo Bonzini {"maq_s.w.qhlr", "7,s,t", 0x7c000574, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
330976cad711SPaolo Bonzini {"maq_s.w.qhrl", "7,s,t", 0x7c0005b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
331076cad711SPaolo Bonzini {"maq_s.w.qhrr", "7,s,t", 0x7c0005f4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
331176cad711SPaolo Bonzini {"modsub", "d,s,t", 0x7c000490, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
331276cad711SPaolo Bonzini {"mthlip", "s,7", 0x7c0007f8, 0xfc1fe7ff, RD_s|MOD_a|DSP_VOLA, 0, D32 },
331376cad711SPaolo Bonzini {"muleq_s.pw.qhl", "d,s,t", 0x7c000714, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
331476cad711SPaolo Bonzini {"muleq_s.pw.qhr", "d,s,t", 0x7c000754, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
331576cad711SPaolo Bonzini {"muleq_s.w.phl", "d,s,t", 0x7c000710, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
331676cad711SPaolo Bonzini {"muleq_s.w.phr", "d,s,t", 0x7c000750, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
331776cad711SPaolo Bonzini {"muleu_s.ph.qbl", "d,s,t", 0x7c000190, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
331876cad711SPaolo Bonzini {"muleu_s.ph.qbr", "d,s,t", 0x7c0001d0, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
331976cad711SPaolo Bonzini {"muleu_s.qh.obl", "d,s,t", 0x7c000194, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
332076cad711SPaolo Bonzini {"muleu_s.qh.obr", "d,s,t", 0x7c0001d4, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
332176cad711SPaolo Bonzini {"mulq_rs.ph", "d,s,t", 0x7c0007d0, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D32 },
332276cad711SPaolo Bonzini {"mulq_rs.qh", "d,s,t", 0x7c0007d4, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D64 },
332376cad711SPaolo Bonzini {"mulsaq_s.l.pw", "7,s,t", 0x7c0003b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
332476cad711SPaolo Bonzini {"mulsaq_s.w.ph", "7,s,t", 0x7c0001b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D32 },
332576cad711SPaolo Bonzini {"mulsaq_s.w.qh", "7,s,t", 0x7c0001b4, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D64 },
332676cad711SPaolo Bonzini {"packrl.ph", "d,s,t", 0x7c000391, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
332776cad711SPaolo Bonzini {"packrl.pw", "d,s,t", 0x7c000395, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
332876cad711SPaolo Bonzini {"pick.ob", "d,s,t", 0x7c0000d5, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
332976cad711SPaolo Bonzini {"pick.ph", "d,s,t", 0x7c0002d1, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
333076cad711SPaolo Bonzini {"pick.pw", "d,s,t", 0x7c0004d5, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
333176cad711SPaolo Bonzini {"pick.qb", "d,s,t", 0x7c0000d1, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
333276cad711SPaolo Bonzini {"pick.qh", "d,s,t", 0x7c0002d5, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
333376cad711SPaolo Bonzini {"preceq.pw.qhla", "d,t", 0x7c000396, 0xffe007ff, WR_d|RD_t, 0, D64 },
333476cad711SPaolo Bonzini {"preceq.pw.qhl", "d,t", 0x7c000316, 0xffe007ff, WR_d|RD_t, 0, D64 },
333576cad711SPaolo Bonzini {"preceq.pw.qhra", "d,t", 0x7c0003d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
333676cad711SPaolo Bonzini {"preceq.pw.qhr", "d,t", 0x7c000356, 0xffe007ff, WR_d|RD_t, 0, D64 },
333776cad711SPaolo Bonzini {"preceq.s.l.pwl", "d,t", 0x7c000516, 0xffe007ff, WR_d|RD_t, 0, D64 },
333876cad711SPaolo Bonzini {"preceq.s.l.pwr", "d,t", 0x7c000556, 0xffe007ff, WR_d|RD_t, 0, D64 },
333976cad711SPaolo Bonzini {"precequ.ph.qbla", "d,t", 0x7c000192, 0xffe007ff, WR_d|RD_t, 0, D32 },
334076cad711SPaolo Bonzini {"precequ.ph.qbl", "d,t", 0x7c000112, 0xffe007ff, WR_d|RD_t, 0, D32 },
334176cad711SPaolo Bonzini {"precequ.ph.qbra", "d,t", 0x7c0001d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
334276cad711SPaolo Bonzini {"precequ.ph.qbr", "d,t", 0x7c000152, 0xffe007ff, WR_d|RD_t, 0, D32 },
334376cad711SPaolo Bonzini {"precequ.pw.qhla", "d,t", 0x7c000196, 0xffe007ff, WR_d|RD_t, 0, D64 },
334476cad711SPaolo Bonzini {"precequ.pw.qhl", "d,t", 0x7c000116, 0xffe007ff, WR_d|RD_t, 0, D64 },
334576cad711SPaolo Bonzini {"precequ.pw.qhra", "d,t", 0x7c0001d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
334676cad711SPaolo Bonzini {"precequ.pw.qhr", "d,t", 0x7c000156, 0xffe007ff, WR_d|RD_t, 0, D64 },
334776cad711SPaolo Bonzini {"preceq.w.phl", "d,t", 0x7c000312, 0xffe007ff, WR_d|RD_t, 0, D32 },
334876cad711SPaolo Bonzini {"preceq.w.phr", "d,t", 0x7c000352, 0xffe007ff, WR_d|RD_t, 0, D32 },
334976cad711SPaolo Bonzini {"preceu.ph.qbla", "d,t", 0x7c000792, 0xffe007ff, WR_d|RD_t, 0, D32 },
335076cad711SPaolo Bonzini {"preceu.ph.qbl", "d,t", 0x7c000712, 0xffe007ff, WR_d|RD_t, 0, D32 },
335176cad711SPaolo Bonzini {"preceu.ph.qbra", "d,t", 0x7c0007d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
335276cad711SPaolo Bonzini {"preceu.ph.qbr", "d,t", 0x7c000752, 0xffe007ff, WR_d|RD_t, 0, D32 },
335376cad711SPaolo Bonzini {"preceu.qh.obla", "d,t", 0x7c000796, 0xffe007ff, WR_d|RD_t, 0, D64 },
335476cad711SPaolo Bonzini {"preceu.qh.obl", "d,t", 0x7c000716, 0xffe007ff, WR_d|RD_t, 0, D64 },
335576cad711SPaolo Bonzini {"preceu.qh.obra", "d,t", 0x7c0007d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
335676cad711SPaolo Bonzini {"preceu.qh.obr", "d,t", 0x7c000756, 0xffe007ff, WR_d|RD_t, 0, D64 },
335776cad711SPaolo Bonzini {"precrq.ob.qh", "d,s,t", 0x7c000315, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
335876cad711SPaolo Bonzini {"precrq.ph.w", "d,s,t", 0x7c000511, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
335976cad711SPaolo Bonzini {"precrq.pw.l", "d,s,t", 0x7c000715, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
336076cad711SPaolo Bonzini {"precrq.qb.ph", "d,s,t", 0x7c000311, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
336176cad711SPaolo Bonzini {"precrq.qh.pw", "d,s,t", 0x7c000515, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
336276cad711SPaolo Bonzini {"precrq_rs.ph.w", "d,s,t", 0x7c000551, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
336376cad711SPaolo Bonzini {"precrq_rs.qh.pw", "d,s,t", 0x7c000555, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
336476cad711SPaolo Bonzini {"precrqu_s.ob.qh", "d,s,t", 0x7c0003d5, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
336576cad711SPaolo Bonzini {"precrqu_s.qb.ph", "d,s,t", 0x7c0003d1, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
336676cad711SPaolo Bonzini {"raddu.l.ob", "d,s", 0x7c000514, 0xfc1f07ff, WR_d|RD_s, 0, D64 },
336776cad711SPaolo Bonzini {"raddu.w.qb", "d,s", 0x7c000510, 0xfc1f07ff, WR_d|RD_s, 0, D32 },
336876cad711SPaolo Bonzini {"rddsp", "d", 0x7fff04b8, 0xffff07ff, WR_d, 0, D32 },
336976cad711SPaolo Bonzini {"rddsp", "d,'", 0x7c0004b8, 0xffc007ff, WR_d, 0, D32 },
337076cad711SPaolo Bonzini {"repl.ob", "d,5", 0x7c000096, 0xff0007ff, WR_d, 0, D64 },
337176cad711SPaolo Bonzini {"repl.ph", "d,@", 0x7c000292, 0xfc0007ff, WR_d, 0, D32 },
337276cad711SPaolo Bonzini {"repl.pw", "d,@", 0x7c000496, 0xfc0007ff, WR_d, 0, D64 },
337376cad711SPaolo Bonzini {"repl.qb", "d,5", 0x7c000092, 0xff0007ff, WR_d, 0, D32 },
337476cad711SPaolo Bonzini {"repl.qh", "d,@", 0x7c000296, 0xfc0007ff, WR_d, 0, D64 },
337576cad711SPaolo Bonzini {"replv.ob", "d,t", 0x7c0000d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
337676cad711SPaolo Bonzini {"replv.ph", "d,t", 0x7c0002d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
337776cad711SPaolo Bonzini {"replv.pw", "d,t", 0x7c0004d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
337876cad711SPaolo Bonzini {"replv.qb", "d,t", 0x7c0000d2, 0xffe007ff, WR_d|RD_t, 0, D32 },
337976cad711SPaolo Bonzini {"replv.qh", "d,t", 0x7c0002d6, 0xffe007ff, WR_d|RD_t, 0, D64 },
338076cad711SPaolo Bonzini {"shilo", "7,0", 0x7c0006b8, 0xfc0fe7ff, MOD_a, 0, D32 },
338176cad711SPaolo Bonzini {"shilov", "7,s", 0x7c0006f8, 0xfc1fe7ff, MOD_a|RD_s, 0, D32 },
338276cad711SPaolo Bonzini {"shll.ob", "d,t,3", 0x7c000017, 0xff0007ff, WR_d|RD_t, 0, D64 },
338376cad711SPaolo Bonzini {"shll.ph", "d,t,4", 0x7c000213, 0xfe0007ff, WR_d|RD_t, 0, D32 },
338476cad711SPaolo Bonzini {"shll.pw", "d,t,6", 0x7c000417, 0xfc0007ff, WR_d|RD_t, 0, D64 },
338576cad711SPaolo Bonzini {"shll.qb", "d,t,3", 0x7c000013, 0xff0007ff, WR_d|RD_t, 0, D32 },
338676cad711SPaolo Bonzini {"shll.qh", "d,t,4", 0x7c000217, 0xfe0007ff, WR_d|RD_t, 0, D64 },
338776cad711SPaolo Bonzini {"shll_s.ph", "d,t,4", 0x7c000313, 0xfe0007ff, WR_d|RD_t, 0, D32 },
338876cad711SPaolo Bonzini {"shll_s.pw", "d,t,6", 0x7c000517, 0xfc0007ff, WR_d|RD_t, 0, D64 },
338976cad711SPaolo Bonzini {"shll_s.qh", "d,t,4", 0x7c000317, 0xfe0007ff, WR_d|RD_t, 0, D64 },
339076cad711SPaolo Bonzini {"shll_s.w", "d,t,6", 0x7c000513, 0xfc0007ff, WR_d|RD_t, 0, D32 },
339176cad711SPaolo Bonzini {"shllv.ob", "d,t,s", 0x7c000097, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
339276cad711SPaolo Bonzini {"shllv.ph", "d,t,s", 0x7c000293, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
339376cad711SPaolo Bonzini {"shllv.pw", "d,t,s", 0x7c000497, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
339476cad711SPaolo Bonzini {"shllv.qb", "d,t,s", 0x7c000093, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
339576cad711SPaolo Bonzini {"shllv.qh", "d,t,s", 0x7c000297, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
339676cad711SPaolo Bonzini {"shllv_s.ph", "d,t,s", 0x7c000393, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
339776cad711SPaolo Bonzini {"shllv_s.pw", "d,t,s", 0x7c000597, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
339876cad711SPaolo Bonzini {"shllv_s.qh", "d,t,s", 0x7c000397, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
339976cad711SPaolo Bonzini {"shllv_s.w", "d,t,s", 0x7c000593, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
340076cad711SPaolo Bonzini {"shra.ph", "d,t,4", 0x7c000253, 0xfe0007ff, WR_d|RD_t, 0, D32 },
340176cad711SPaolo Bonzini {"shra.pw", "d,t,6", 0x7c000457, 0xfc0007ff, WR_d|RD_t, 0, D64 },
340276cad711SPaolo Bonzini {"shra.qh", "d,t,4", 0x7c000257, 0xfe0007ff, WR_d|RD_t, 0, D64 },
340376cad711SPaolo Bonzini {"shra_r.ph", "d,t,4", 0x7c000353, 0xfe0007ff, WR_d|RD_t, 0, D32 },
340476cad711SPaolo Bonzini {"shra_r.pw", "d,t,6", 0x7c000557, 0xfc0007ff, WR_d|RD_t, 0, D64 },
340576cad711SPaolo Bonzini {"shra_r.qh", "d,t,4", 0x7c000357, 0xfe0007ff, WR_d|RD_t, 0, D64 },
340676cad711SPaolo Bonzini {"shra_r.w", "d,t,6", 0x7c000553, 0xfc0007ff, WR_d|RD_t, 0, D32 },
340776cad711SPaolo Bonzini {"shrav.ph", "d,t,s", 0x7c0002d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
340876cad711SPaolo Bonzini {"shrav.pw", "d,t,s", 0x7c0004d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
340976cad711SPaolo Bonzini {"shrav.qh", "d,t,s", 0x7c0002d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
341076cad711SPaolo Bonzini {"shrav_r.ph", "d,t,s", 0x7c0003d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
341176cad711SPaolo Bonzini {"shrav_r.pw", "d,t,s", 0x7c0005d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
341276cad711SPaolo Bonzini {"shrav_r.qh", "d,t,s", 0x7c0003d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
341376cad711SPaolo Bonzini {"shrav_r.w", "d,t,s", 0x7c0005d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
341476cad711SPaolo Bonzini {"shrl.ob", "d,t,3", 0x7c000057, 0xff0007ff, WR_d|RD_t, 0, D64 },
341576cad711SPaolo Bonzini {"shrl.qb", "d,t,3", 0x7c000053, 0xff0007ff, WR_d|RD_t, 0, D32 },
341676cad711SPaolo Bonzini {"shrlv.ob", "d,t,s", 0x7c0000d7, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
341776cad711SPaolo Bonzini {"shrlv.qb", "d,t,s", 0x7c0000d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
341876cad711SPaolo Bonzini {"subq.ph", "d,s,t", 0x7c0002d0, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
341976cad711SPaolo Bonzini {"subq.pw", "d,s,t", 0x7c0004d4, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
342076cad711SPaolo Bonzini {"subq.qh", "d,s,t", 0x7c0002d4, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
342176cad711SPaolo Bonzini {"subq_s.ph", "d,s,t", 0x7c0003d0, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
342276cad711SPaolo Bonzini {"subq_s.pw", "d,s,t", 0x7c0005d4, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
342376cad711SPaolo Bonzini {"subq_s.qh", "d,s,t", 0x7c0003d4, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
342476cad711SPaolo Bonzini {"subq_s.w", "d,s,t", 0x7c0005d0, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
342576cad711SPaolo Bonzini {"subu.ob", "d,s,t", 0x7c000054, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
342676cad711SPaolo Bonzini {"subu.qb", "d,s,t", 0x7c000050, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
342776cad711SPaolo Bonzini {"subu_s.ob", "d,s,t", 0x7c000154, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D64 },
342876cad711SPaolo Bonzini {"subu_s.qb", "d,s,t", 0x7c000150, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D32 },
342976cad711SPaolo Bonzini {"wrdsp", "s", 0x7c1ffcf8, 0xfc1fffff, RD_s|DSP_VOLA, 0, D32 },
343076cad711SPaolo Bonzini {"wrdsp", "s,8", 0x7c0004f8, 0xfc1e07ff, RD_s|DSP_VOLA, 0, D32 },
343176cad711SPaolo Bonzini /* MIPS DSP ASE Rev2 */
343276cad711SPaolo Bonzini {"absq_s.qb", "d,t", 0x7c000052, 0xffe007ff, WR_d|RD_t, 0, D33 },
343376cad711SPaolo Bonzini {"addu.ph", "d,s,t", 0x7c000210, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
343476cad711SPaolo Bonzini {"addu_s.ph", "d,s,t", 0x7c000310, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
343576cad711SPaolo Bonzini {"adduh.qb", "d,s,t", 0x7c000018, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
343676cad711SPaolo Bonzini {"adduh_r.qb", "d,s,t", 0x7c000098, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
343776cad711SPaolo Bonzini {"append", "t,s,h", 0x7c000031, 0xfc0007ff, WR_t|RD_t|RD_s, 0, D33 },
343876cad711SPaolo Bonzini {"balign", "t,s,I", 0, (int) M_BALIGN, INSN_MACRO, 0, D33 },
343976cad711SPaolo Bonzini {"balign", "t,s,2", 0x7c000431, 0xfc00e7ff, WR_t|RD_t|RD_s, 0, D33 },
344076cad711SPaolo Bonzini {"cmpgdu.eq.qb", "d,s,t", 0x7c000611, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
344176cad711SPaolo Bonzini {"cmpgdu.lt.qb", "d,s,t", 0x7c000651, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
344276cad711SPaolo Bonzini {"cmpgdu.le.qb", "d,s,t", 0x7c000691, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
344376cad711SPaolo Bonzini {"dpa.w.ph", "7,s,t", 0x7c000030, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
344476cad711SPaolo Bonzini {"dps.w.ph", "7,s,t", 0x7c000070, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
344576cad711SPaolo Bonzini {"mul.ph", "d,s,t", 0x7c000318, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
344676cad711SPaolo Bonzini {"mul_s.ph", "d,s,t", 0x7c000398, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
344776cad711SPaolo Bonzini {"mulq_rs.w", "d,s,t", 0x7c0005d8, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
344876cad711SPaolo Bonzini {"mulq_s.ph", "d,s,t", 0x7c000790, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
344976cad711SPaolo Bonzini {"mulq_s.w", "d,s,t", 0x7c000598, 0xfc0007ff, WR_d|RD_s|RD_t|WR_HILO, 0, D33 },
345076cad711SPaolo Bonzini {"mulsa.w.ph", "7,s,t", 0x7c0000b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
345176cad711SPaolo Bonzini {"precr.qb.ph", "d,s,t", 0x7c000351, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
345276cad711SPaolo Bonzini {"precr_sra.ph.w", "t,s,h", 0x7c000791, 0xfc0007ff, WR_t|RD_t|RD_s, 0, D33 },
345376cad711SPaolo Bonzini {"precr_sra_r.ph.w", "t,s,h", 0x7c0007d1, 0xfc0007ff, WR_t|RD_t|RD_s, 0, D33 },
345476cad711SPaolo Bonzini {"prepend", "t,s,h", 0x7c000071, 0xfc0007ff, WR_t|RD_t|RD_s, 0, D33 },
345576cad711SPaolo Bonzini {"shra.qb", "d,t,3", 0x7c000113, 0xff0007ff, WR_d|RD_t, 0, D33 },
345676cad711SPaolo Bonzini {"shra_r.qb", "d,t,3", 0x7c000153, 0xff0007ff, WR_d|RD_t, 0, D33 },
345776cad711SPaolo Bonzini {"shrav.qb", "d,t,s", 0x7c000193, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
345876cad711SPaolo Bonzini {"shrav_r.qb", "d,t,s", 0x7c0001d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
345976cad711SPaolo Bonzini {"shrl.ph", "d,t,4", 0x7c000653, 0xfe0007ff, WR_d|RD_t, 0, D33 },
346076cad711SPaolo Bonzini {"shrlv.ph", "d,t,s", 0x7c0006d3, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346176cad711SPaolo Bonzini {"subu.ph", "d,s,t", 0x7c000250, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346276cad711SPaolo Bonzini {"subu_s.ph", "d,s,t", 0x7c000350, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346376cad711SPaolo Bonzini {"subuh.qb", "d,s,t", 0x7c000058, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346476cad711SPaolo Bonzini {"subuh_r.qb", "d,s,t", 0x7c0000d8, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346576cad711SPaolo Bonzini {"addqh.ph", "d,s,t", 0x7c000218, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346676cad711SPaolo Bonzini {"addqh_r.ph", "d,s,t", 0x7c000298, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346776cad711SPaolo Bonzini {"addqh.w", "d,s,t", 0x7c000418, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346876cad711SPaolo Bonzini {"addqh_r.w", "d,s,t", 0x7c000498, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
346976cad711SPaolo Bonzini {"subqh.ph", "d,s,t", 0x7c000258, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
347076cad711SPaolo Bonzini {"subqh_r.ph", "d,s,t", 0x7c0002d8, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
347176cad711SPaolo Bonzini {"subqh.w", "d,s,t", 0x7c000458, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
347276cad711SPaolo Bonzini {"subqh_r.w", "d,s,t", 0x7c0004d8, 0xfc0007ff, WR_d|RD_s|RD_t, 0, D33 },
347376cad711SPaolo Bonzini {"dpax.w.ph", "7,s,t", 0x7c000230, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
347476cad711SPaolo Bonzini {"dpsx.w.ph", "7,s,t", 0x7c000270, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
347576cad711SPaolo Bonzini {"dpaqx_s.w.ph", "7,s,t", 0x7c000630, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
347676cad711SPaolo Bonzini {"dpaqx_sa.w.ph", "7,s,t", 0x7c0006b0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
347776cad711SPaolo Bonzini {"dpsqx_s.w.ph", "7,s,t", 0x7c000670, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
347876cad711SPaolo Bonzini {"dpsqx_sa.w.ph", "7,s,t", 0x7c0006f0, 0xfc00e7ff, MOD_a|RD_s|RD_t, 0, D33 },
347976cad711SPaolo Bonzini /* Move bc0* after mftr and mttr to avoid opcode collision. */
348076cad711SPaolo Bonzini {"bc0f", "p", 0x41000000, 0xffff0000, CBD|RD_CC, 0, I1 },
348176cad711SPaolo Bonzini {"bc0fl", "p", 0x41020000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
348276cad711SPaolo Bonzini {"bc0t", "p", 0x41010000, 0xffff0000, CBD|RD_CC, 0, I1 },
348376cad711SPaolo Bonzini {"bc0tl", "p", 0x41030000, 0xffff0000, CBL|RD_CC, 0, I2|T3 },
348476cad711SPaolo Bonzini /* ST Microelectronics Loongson-2E and -2F. */
348576cad711SPaolo Bonzini {"mult.g", "d,s,t", 0x7c000018, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
348676cad711SPaolo Bonzini {"mult.g", "d,s,t", 0x70000010, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
348776cad711SPaolo Bonzini {"multu.g", "d,s,t", 0x7c000019, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
348876cad711SPaolo Bonzini {"multu.g", "d,s,t", 0x70000012, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
348976cad711SPaolo Bonzini {"dmult.g", "d,s,t", 0x7c00001c, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
349076cad711SPaolo Bonzini {"dmult.g", "d,s,t", 0x70000011, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
349176cad711SPaolo Bonzini {"dmultu.g", "d,s,t", 0x7c00001d, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
349276cad711SPaolo Bonzini {"dmultu.g", "d,s,t", 0x70000013, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
349376cad711SPaolo Bonzini {"div.g", "d,s,t", 0x7c00001a, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
349476cad711SPaolo Bonzini {"div.g", "d,s,t", 0x70000014, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
349576cad711SPaolo Bonzini {"divu.g", "d,s,t", 0x7c00001b, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
349676cad711SPaolo Bonzini {"divu.g", "d,s,t", 0x70000016, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
349776cad711SPaolo Bonzini {"ddiv.g", "d,s,t", 0x7c00001e, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
349876cad711SPaolo Bonzini {"ddiv.g", "d,s,t", 0x70000015, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
349976cad711SPaolo Bonzini {"ddivu.g", "d,s,t", 0x7c00001f, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
350076cad711SPaolo Bonzini {"ddivu.g", "d,s,t", 0x70000017, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
350176cad711SPaolo Bonzini {"mod.g", "d,s,t", 0x7c000022, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
350276cad711SPaolo Bonzini {"mod.g", "d,s,t", 0x7000001c, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
350376cad711SPaolo Bonzini {"modu.g", "d,s,t", 0x7c000023, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
350476cad711SPaolo Bonzini {"modu.g", "d,s,t", 0x7000001e, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
350576cad711SPaolo Bonzini {"dmod.g", "d,s,t", 0x7c000026, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
350676cad711SPaolo Bonzini {"dmod.g", "d,s,t", 0x7000001d, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
350776cad711SPaolo Bonzini {"dmodu.g", "d,s,t", 0x7c000027, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2E },
350876cad711SPaolo Bonzini {"dmodu.g", "d,s,t", 0x7000001f, 0xfc0007ff, RD_s|RD_t|WR_d, 0, IL2F },
350976cad711SPaolo Bonzini };
351076cad711SPaolo Bonzini
351176cad711SPaolo Bonzini #define MIPS_NUM_OPCODES \
351276cad711SPaolo Bonzini ((sizeof mips_builtin_opcodes) / (sizeof (mips_builtin_opcodes[0])))
351376cad711SPaolo Bonzini const int bfd_mips_num_builtin_opcodes = MIPS_NUM_OPCODES;
351476cad711SPaolo Bonzini
351576cad711SPaolo Bonzini /* const removed from the following to allow for dynamic extensions to the
351676cad711SPaolo Bonzini * built-in instruction set. */
351776cad711SPaolo Bonzini struct mips_opcode *mips_opcodes =
351876cad711SPaolo Bonzini (struct mips_opcode *) mips_builtin_opcodes;
351976cad711SPaolo Bonzini int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
352076cad711SPaolo Bonzini #undef MIPS_NUM_OPCODES
352176cad711SPaolo Bonzini
352276cad711SPaolo Bonzini /* Mips instructions are at maximum this many bytes long. */
352376cad711SPaolo Bonzini #define INSNLEN 4
352476cad711SPaolo Bonzini
352576cad711SPaolo Bonzini
352676cad711SPaolo Bonzini /* FIXME: These should be shared with gdb somehow. */
352776cad711SPaolo Bonzini
352876cad711SPaolo Bonzini struct mips_cp0sel_name
352976cad711SPaolo Bonzini {
353076cad711SPaolo Bonzini unsigned int cp0reg;
353176cad711SPaolo Bonzini unsigned int sel;
353276cad711SPaolo Bonzini const char * const name;
353376cad711SPaolo Bonzini };
353476cad711SPaolo Bonzini
35358ef39152SLeon Alrae #if 0
353676cad711SPaolo Bonzini /* The mips16 registers. */
353776cad711SPaolo Bonzini static const unsigned int mips16_to_32_reg_map[] =
353876cad711SPaolo Bonzini {
353976cad711SPaolo Bonzini 16, 17, 2, 3, 4, 5, 6, 7
354076cad711SPaolo Bonzini };
354176cad711SPaolo Bonzini
354276cad711SPaolo Bonzini #define mips16_reg_names(rn) mips_gpr_names[mips16_to_32_reg_map[rn]]
35438ef39152SLeon Alrae #endif
354476cad711SPaolo Bonzini
354576cad711SPaolo Bonzini static const char * const mips_gpr_names_numeric[32] =
354676cad711SPaolo Bonzini {
354776cad711SPaolo Bonzini "$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7",
354876cad711SPaolo Bonzini "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15",
354976cad711SPaolo Bonzini "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23",
355076cad711SPaolo Bonzini "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31"
355176cad711SPaolo Bonzini };
355276cad711SPaolo Bonzini
355376cad711SPaolo Bonzini static const char * const mips_gpr_names_oldabi[32] =
355476cad711SPaolo Bonzini {
355576cad711SPaolo Bonzini "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
355676cad711SPaolo Bonzini "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
355776cad711SPaolo Bonzini "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
355876cad711SPaolo Bonzini "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra"
355976cad711SPaolo Bonzini };
356076cad711SPaolo Bonzini
356176cad711SPaolo Bonzini static const char * const mips_gpr_names_newabi[32] =
356276cad711SPaolo Bonzini {
356376cad711SPaolo Bonzini "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
356476cad711SPaolo Bonzini "a4", "a5", "a6", "a7", "t0", "t1", "t2", "t3",
356576cad711SPaolo Bonzini "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
356676cad711SPaolo Bonzini "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra"
356776cad711SPaolo Bonzini };
356876cad711SPaolo Bonzini
356976cad711SPaolo Bonzini static const char * const mips_fpr_names_numeric[32] =
357076cad711SPaolo Bonzini {
357176cad711SPaolo Bonzini "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7",
357276cad711SPaolo Bonzini "$f8", "$f9", "$f10", "$f11", "$f12", "$f13", "$f14", "$f15",
357376cad711SPaolo Bonzini "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",
357476cad711SPaolo Bonzini "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "$f31"
357576cad711SPaolo Bonzini };
357676cad711SPaolo Bonzini
357776cad711SPaolo Bonzini static const char * const mips_fpr_names_32[32] =
357876cad711SPaolo Bonzini {
357976cad711SPaolo Bonzini "fv0", "fv0f", "fv1", "fv1f", "ft0", "ft0f", "ft1", "ft1f",
358076cad711SPaolo Bonzini "ft2", "ft2f", "ft3", "ft3f", "fa0", "fa0f", "fa1", "fa1f",
358176cad711SPaolo Bonzini "ft4", "ft4f", "ft5", "ft5f", "fs0", "fs0f", "fs1", "fs1f",
358276cad711SPaolo Bonzini "fs2", "fs2f", "fs3", "fs3f", "fs4", "fs4f", "fs5", "fs5f"
358376cad711SPaolo Bonzini };
358476cad711SPaolo Bonzini
358576cad711SPaolo Bonzini static const char * const mips_fpr_names_n32[32] =
358676cad711SPaolo Bonzini {
358776cad711SPaolo Bonzini "fv0", "ft14", "fv1", "ft15", "ft0", "ft1", "ft2", "ft3",
358876cad711SPaolo Bonzini "ft4", "ft5", "ft6", "ft7", "fa0", "fa1", "fa2", "fa3",
358976cad711SPaolo Bonzini "fa4", "fa5", "fa6", "fa7", "fs0", "ft8", "fs1", "ft9",
359076cad711SPaolo Bonzini "fs2", "ft10", "fs3", "ft11", "fs4", "ft12", "fs5", "ft13"
359176cad711SPaolo Bonzini };
359276cad711SPaolo Bonzini
359376cad711SPaolo Bonzini static const char * const mips_fpr_names_64[32] =
359476cad711SPaolo Bonzini {
359576cad711SPaolo Bonzini "fv0", "ft12", "fv1", "ft13", "ft0", "ft1", "ft2", "ft3",
359676cad711SPaolo Bonzini "ft4", "ft5", "ft6", "ft7", "fa0", "fa1", "fa2", "fa3",
359776cad711SPaolo Bonzini "fa4", "fa5", "fa6", "fa7", "ft8", "ft9", "ft10", "ft11",
359876cad711SPaolo Bonzini "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7"
359976cad711SPaolo Bonzini };
360076cad711SPaolo Bonzini
3601ed8a933fSYongbok Kim static const char * const mips_wr_names[32] = {
3602ed8a933fSYongbok Kim "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7",
3603ed8a933fSYongbok Kim "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15",
3604ed8a933fSYongbok Kim "w16", "w17", "w18", "w19", "w20", "w21", "w22", "w23",
3605ed8a933fSYongbok Kim "w24", "w25", "w26", "w27", "w28", "w29", "w30", "w31"
3606ed8a933fSYongbok Kim };
3607ed8a933fSYongbok Kim
360876cad711SPaolo Bonzini static const char * const mips_cp0_names_numeric[32] =
360976cad711SPaolo Bonzini {
361076cad711SPaolo Bonzini "$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7",
361176cad711SPaolo Bonzini "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15",
361276cad711SPaolo Bonzini "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23",
361376cad711SPaolo Bonzini "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31"
361476cad711SPaolo Bonzini };
361576cad711SPaolo Bonzini
361676cad711SPaolo Bonzini static const char * const mips_cp0_names_mips3264[32] =
361776cad711SPaolo Bonzini {
361876cad711SPaolo Bonzini "c0_index", "c0_random", "c0_entrylo0", "c0_entrylo1",
361976cad711SPaolo Bonzini "c0_context", "c0_pagemask", "c0_wired", "$7",
362076cad711SPaolo Bonzini "c0_badvaddr", "c0_count", "c0_entryhi", "c0_compare",
362176cad711SPaolo Bonzini "c0_status", "c0_cause", "c0_epc", "c0_prid",
362276cad711SPaolo Bonzini "c0_config", "c0_lladdr", "c0_watchlo", "c0_watchhi",
362376cad711SPaolo Bonzini "c0_xcontext", "$21", "$22", "c0_debug",
362476cad711SPaolo Bonzini "c0_depc", "c0_perfcnt", "c0_errctl", "c0_cacheerr",
362576cad711SPaolo Bonzini "c0_taglo", "c0_taghi", "c0_errorepc", "c0_desave",
362676cad711SPaolo Bonzini };
362776cad711SPaolo Bonzini
362876cad711SPaolo Bonzini static const struct mips_cp0sel_name mips_cp0sel_names_mips3264[] =
362976cad711SPaolo Bonzini {
363076cad711SPaolo Bonzini { 4, 1, "c0_contextconfig" },
363176cad711SPaolo Bonzini { 0, 1, "c0_mvpcontrol" },
363276cad711SPaolo Bonzini { 0, 2, "c0_mvpconf0" },
363376cad711SPaolo Bonzini { 0, 3, "c0_mvpconf1" },
363476cad711SPaolo Bonzini { 1, 1, "c0_vpecontrol" },
363576cad711SPaolo Bonzini { 1, 2, "c0_vpeconf0" },
363676cad711SPaolo Bonzini { 1, 3, "c0_vpeconf1" },
363776cad711SPaolo Bonzini { 1, 4, "c0_yqmask" },
363876cad711SPaolo Bonzini { 1, 5, "c0_vpeschedule" },
363976cad711SPaolo Bonzini { 1, 6, "c0_vpeschefback" },
364076cad711SPaolo Bonzini { 2, 1, "c0_tcstatus" },
364176cad711SPaolo Bonzini { 2, 2, "c0_tcbind" },
364276cad711SPaolo Bonzini { 2, 3, "c0_tcrestart" },
364376cad711SPaolo Bonzini { 2, 4, "c0_tchalt" },
364476cad711SPaolo Bonzini { 2, 5, "c0_tccontext" },
364576cad711SPaolo Bonzini { 2, 6, "c0_tcschedule" },
364676cad711SPaolo Bonzini { 2, 7, "c0_tcschefback" },
364776cad711SPaolo Bonzini { 5, 1, "c0_pagegrain" },
364876cad711SPaolo Bonzini { 6, 1, "c0_srsconf0" },
364976cad711SPaolo Bonzini { 6, 2, "c0_srsconf1" },
365076cad711SPaolo Bonzini { 6, 3, "c0_srsconf2" },
365176cad711SPaolo Bonzini { 6, 4, "c0_srsconf3" },
365276cad711SPaolo Bonzini { 6, 5, "c0_srsconf4" },
365376cad711SPaolo Bonzini { 12, 1, "c0_intctl" },
365476cad711SPaolo Bonzini { 12, 2, "c0_srsctl" },
365576cad711SPaolo Bonzini { 12, 3, "c0_srsmap" },
365676cad711SPaolo Bonzini { 15, 1, "c0_ebase" },
365776cad711SPaolo Bonzini { 16, 1, "c0_config1" },
365876cad711SPaolo Bonzini { 16, 2, "c0_config2" },
365976cad711SPaolo Bonzini { 16, 3, "c0_config3" },
366076cad711SPaolo Bonzini { 18, 1, "c0_watchlo,1" },
366176cad711SPaolo Bonzini { 18, 2, "c0_watchlo,2" },
366276cad711SPaolo Bonzini { 18, 3, "c0_watchlo,3" },
366376cad711SPaolo Bonzini { 18, 4, "c0_watchlo,4" },
366476cad711SPaolo Bonzini { 18, 5, "c0_watchlo,5" },
366576cad711SPaolo Bonzini { 18, 6, "c0_watchlo,6" },
366676cad711SPaolo Bonzini { 18, 7, "c0_watchlo,7" },
366776cad711SPaolo Bonzini { 19, 1, "c0_watchhi,1" },
366876cad711SPaolo Bonzini { 19, 2, "c0_watchhi,2" },
366976cad711SPaolo Bonzini { 19, 3, "c0_watchhi,3" },
367076cad711SPaolo Bonzini { 19, 4, "c0_watchhi,4" },
367176cad711SPaolo Bonzini { 19, 5, "c0_watchhi,5" },
367276cad711SPaolo Bonzini { 19, 6, "c0_watchhi,6" },
367376cad711SPaolo Bonzini { 19, 7, "c0_watchhi,7" },
367476cad711SPaolo Bonzini { 23, 1, "c0_tracecontrol" },
367576cad711SPaolo Bonzini { 23, 2, "c0_tracecontrol2" },
367676cad711SPaolo Bonzini { 23, 3, "c0_usertracedata" },
367776cad711SPaolo Bonzini { 23, 4, "c0_tracebpc" },
367876cad711SPaolo Bonzini { 25, 1, "c0_perfcnt,1" },
367976cad711SPaolo Bonzini { 25, 2, "c0_perfcnt,2" },
368076cad711SPaolo Bonzini { 25, 3, "c0_perfcnt,3" },
368176cad711SPaolo Bonzini { 25, 4, "c0_perfcnt,4" },
368276cad711SPaolo Bonzini { 25, 5, "c0_perfcnt,5" },
368376cad711SPaolo Bonzini { 25, 6, "c0_perfcnt,6" },
368476cad711SPaolo Bonzini { 25, 7, "c0_perfcnt,7" },
368576cad711SPaolo Bonzini { 27, 1, "c0_cacheerr,1" },
368676cad711SPaolo Bonzini { 27, 2, "c0_cacheerr,2" },
368776cad711SPaolo Bonzini { 27, 3, "c0_cacheerr,3" },
368876cad711SPaolo Bonzini { 28, 1, "c0_datalo" },
368976cad711SPaolo Bonzini { 28, 2, "c0_taglo1" },
369076cad711SPaolo Bonzini { 28, 3, "c0_datalo1" },
369176cad711SPaolo Bonzini { 28, 4, "c0_taglo2" },
369276cad711SPaolo Bonzini { 28, 5, "c0_datalo2" },
369376cad711SPaolo Bonzini { 28, 6, "c0_taglo3" },
369476cad711SPaolo Bonzini { 28, 7, "c0_datalo3" },
369576cad711SPaolo Bonzini { 29, 1, "c0_datahi" },
369676cad711SPaolo Bonzini { 29, 2, "c0_taghi1" },
369776cad711SPaolo Bonzini { 29, 3, "c0_datahi1" },
369876cad711SPaolo Bonzini { 29, 4, "c0_taghi2" },
369976cad711SPaolo Bonzini { 29, 5, "c0_datahi2" },
370076cad711SPaolo Bonzini { 29, 6, "c0_taghi3" },
370176cad711SPaolo Bonzini { 29, 7, "c0_datahi3" },
370276cad711SPaolo Bonzini };
370376cad711SPaolo Bonzini
370476cad711SPaolo Bonzini static const char * const mips_cp0_names_mips3264r2[32] =
370576cad711SPaolo Bonzini {
370676cad711SPaolo Bonzini "c0_index", "c0_random", "c0_entrylo0", "c0_entrylo1",
370776cad711SPaolo Bonzini "c0_context", "c0_pagemask", "c0_wired", "c0_hwrena",
370876cad711SPaolo Bonzini "c0_badvaddr", "c0_count", "c0_entryhi", "c0_compare",
370976cad711SPaolo Bonzini "c0_status", "c0_cause", "c0_epc", "c0_prid",
371076cad711SPaolo Bonzini "c0_config", "c0_lladdr", "c0_watchlo", "c0_watchhi",
371176cad711SPaolo Bonzini "c0_xcontext", "$21", "$22", "c0_debug",
371276cad711SPaolo Bonzini "c0_depc", "c0_perfcnt", "c0_errctl", "c0_cacheerr",
371376cad711SPaolo Bonzini "c0_taglo", "c0_taghi", "c0_errorepc", "c0_desave",
371476cad711SPaolo Bonzini };
371576cad711SPaolo Bonzini
371676cad711SPaolo Bonzini static const struct mips_cp0sel_name mips_cp0sel_names_mips3264r2[] =
371776cad711SPaolo Bonzini {
371876cad711SPaolo Bonzini { 4, 1, "c0_contextconfig" },
371976cad711SPaolo Bonzini { 5, 1, "c0_pagegrain" },
372076cad711SPaolo Bonzini { 12, 1, "c0_intctl" },
372176cad711SPaolo Bonzini { 12, 2, "c0_srsctl" },
372276cad711SPaolo Bonzini { 12, 3, "c0_srsmap" },
372376cad711SPaolo Bonzini { 15, 1, "c0_ebase" },
372476cad711SPaolo Bonzini { 16, 1, "c0_config1" },
372576cad711SPaolo Bonzini { 16, 2, "c0_config2" },
372676cad711SPaolo Bonzini { 16, 3, "c0_config3" },
372776cad711SPaolo Bonzini { 18, 1, "c0_watchlo,1" },
372876cad711SPaolo Bonzini { 18, 2, "c0_watchlo,2" },
372976cad711SPaolo Bonzini { 18, 3, "c0_watchlo,3" },
373076cad711SPaolo Bonzini { 18, 4, "c0_watchlo,4" },
373176cad711SPaolo Bonzini { 18, 5, "c0_watchlo,5" },
373276cad711SPaolo Bonzini { 18, 6, "c0_watchlo,6" },
373376cad711SPaolo Bonzini { 18, 7, "c0_watchlo,7" },
373476cad711SPaolo Bonzini { 19, 1, "c0_watchhi,1" },
373576cad711SPaolo Bonzini { 19, 2, "c0_watchhi,2" },
373676cad711SPaolo Bonzini { 19, 3, "c0_watchhi,3" },
373776cad711SPaolo Bonzini { 19, 4, "c0_watchhi,4" },
373876cad711SPaolo Bonzini { 19, 5, "c0_watchhi,5" },
373976cad711SPaolo Bonzini { 19, 6, "c0_watchhi,6" },
374076cad711SPaolo Bonzini { 19, 7, "c0_watchhi,7" },
374176cad711SPaolo Bonzini { 23, 1, "c0_tracecontrol" },
374276cad711SPaolo Bonzini { 23, 2, "c0_tracecontrol2" },
374376cad711SPaolo Bonzini { 23, 3, "c0_usertracedata" },
374476cad711SPaolo Bonzini { 23, 4, "c0_tracebpc" },
374576cad711SPaolo Bonzini { 25, 1, "c0_perfcnt,1" },
374676cad711SPaolo Bonzini { 25, 2, "c0_perfcnt,2" },
374776cad711SPaolo Bonzini { 25, 3, "c0_perfcnt,3" },
374876cad711SPaolo Bonzini { 25, 4, "c0_perfcnt,4" },
374976cad711SPaolo Bonzini { 25, 5, "c0_perfcnt,5" },
375076cad711SPaolo Bonzini { 25, 6, "c0_perfcnt,6" },
375176cad711SPaolo Bonzini { 25, 7, "c0_perfcnt,7" },
375276cad711SPaolo Bonzini { 27, 1, "c0_cacheerr,1" },
375376cad711SPaolo Bonzini { 27, 2, "c0_cacheerr,2" },
375476cad711SPaolo Bonzini { 27, 3, "c0_cacheerr,3" },
375576cad711SPaolo Bonzini { 28, 1, "c0_datalo" },
375676cad711SPaolo Bonzini { 28, 2, "c0_taglo1" },
375776cad711SPaolo Bonzini { 28, 3, "c0_datalo1" },
375876cad711SPaolo Bonzini { 28, 4, "c0_taglo2" },
375976cad711SPaolo Bonzini { 28, 5, "c0_datalo2" },
376076cad711SPaolo Bonzini { 28, 6, "c0_taglo3" },
376176cad711SPaolo Bonzini { 28, 7, "c0_datalo3" },
376276cad711SPaolo Bonzini { 29, 1, "c0_datahi" },
376376cad711SPaolo Bonzini { 29, 2, "c0_taghi1" },
376476cad711SPaolo Bonzini { 29, 3, "c0_datahi1" },
376576cad711SPaolo Bonzini { 29, 4, "c0_taghi2" },
376676cad711SPaolo Bonzini { 29, 5, "c0_datahi2" },
376776cad711SPaolo Bonzini { 29, 6, "c0_taghi3" },
376876cad711SPaolo Bonzini { 29, 7, "c0_datahi3" },
376976cad711SPaolo Bonzini };
377076cad711SPaolo Bonzini
377176cad711SPaolo Bonzini /* SB-1: MIPS64 (mips_cp0_names_mips3264) with minor mods. */
377276cad711SPaolo Bonzini static const char * const mips_cp0_names_sb1[32] =
377376cad711SPaolo Bonzini {
377476cad711SPaolo Bonzini "c0_index", "c0_random", "c0_entrylo0", "c0_entrylo1",
377576cad711SPaolo Bonzini "c0_context", "c0_pagemask", "c0_wired", "$7",
377676cad711SPaolo Bonzini "c0_badvaddr", "c0_count", "c0_entryhi", "c0_compare",
377776cad711SPaolo Bonzini "c0_status", "c0_cause", "c0_epc", "c0_prid",
377876cad711SPaolo Bonzini "c0_config", "c0_lladdr", "c0_watchlo", "c0_watchhi",
377976cad711SPaolo Bonzini "c0_xcontext", "$21", "$22", "c0_debug",
378076cad711SPaolo Bonzini "c0_depc", "c0_perfcnt", "c0_errctl", "c0_cacheerr_i",
378176cad711SPaolo Bonzini "c0_taglo_i", "c0_taghi_i", "c0_errorepc", "c0_desave",
378276cad711SPaolo Bonzini };
378376cad711SPaolo Bonzini
378476cad711SPaolo Bonzini static const struct mips_cp0sel_name mips_cp0sel_names_sb1[] =
378576cad711SPaolo Bonzini {
378676cad711SPaolo Bonzini { 16, 1, "c0_config1" },
378776cad711SPaolo Bonzini { 18, 1, "c0_watchlo,1" },
378876cad711SPaolo Bonzini { 19, 1, "c0_watchhi,1" },
378976cad711SPaolo Bonzini { 22, 0, "c0_perftrace" },
379076cad711SPaolo Bonzini { 23, 3, "c0_edebug" },
379176cad711SPaolo Bonzini { 25, 1, "c0_perfcnt,1" },
379276cad711SPaolo Bonzini { 25, 2, "c0_perfcnt,2" },
379376cad711SPaolo Bonzini { 25, 3, "c0_perfcnt,3" },
379476cad711SPaolo Bonzini { 25, 4, "c0_perfcnt,4" },
379576cad711SPaolo Bonzini { 25, 5, "c0_perfcnt,5" },
379676cad711SPaolo Bonzini { 25, 6, "c0_perfcnt,6" },
379776cad711SPaolo Bonzini { 25, 7, "c0_perfcnt,7" },
379876cad711SPaolo Bonzini { 26, 1, "c0_buserr_pa" },
379976cad711SPaolo Bonzini { 27, 1, "c0_cacheerr_d" },
380076cad711SPaolo Bonzini { 27, 3, "c0_cacheerr_d_pa" },
380176cad711SPaolo Bonzini { 28, 1, "c0_datalo_i" },
380276cad711SPaolo Bonzini { 28, 2, "c0_taglo_d" },
380376cad711SPaolo Bonzini { 28, 3, "c0_datalo_d" },
380476cad711SPaolo Bonzini { 29, 1, "c0_datahi_i" },
380576cad711SPaolo Bonzini { 29, 2, "c0_taghi_d" },
380676cad711SPaolo Bonzini { 29, 3, "c0_datahi_d" },
380776cad711SPaolo Bonzini };
380876cad711SPaolo Bonzini
380976cad711SPaolo Bonzini static const char * const mips_hwr_names_numeric[32] =
381076cad711SPaolo Bonzini {
381176cad711SPaolo Bonzini "$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7",
381276cad711SPaolo Bonzini "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15",
381376cad711SPaolo Bonzini "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23",
381476cad711SPaolo Bonzini "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31"
381576cad711SPaolo Bonzini };
381676cad711SPaolo Bonzini
381776cad711SPaolo Bonzini static const char * const mips_hwr_names_mips3264r2[32] =
381876cad711SPaolo Bonzini {
381976cad711SPaolo Bonzini "hwr_cpunum", "hwr_synci_step", "hwr_cc", "hwr_ccres",
382076cad711SPaolo Bonzini "$4", "$5", "$6", "$7",
382176cad711SPaolo Bonzini "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15",
382276cad711SPaolo Bonzini "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23",
382376cad711SPaolo Bonzini "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31"
382476cad711SPaolo Bonzini };
382576cad711SPaolo Bonzini
3826ed8a933fSYongbok Kim static const char * const mips_msa_control_names_mips3264r2[32] = {
3827ed8a933fSYongbok Kim "MSAIR", "MSACSR", "$2", "$3", "$4", "$5", "$6", "$7",
3828ed8a933fSYongbok Kim "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15",
3829ed8a933fSYongbok Kim "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23",
3830ed8a933fSYongbok Kim "$24", "$25", "$26", "$27", "$28", "$29", "$30", "$31"
3831ed8a933fSYongbok Kim };
3832ed8a933fSYongbok Kim
383376cad711SPaolo Bonzini struct mips_abi_choice
383476cad711SPaolo Bonzini {
383576cad711SPaolo Bonzini const char *name;
383676cad711SPaolo Bonzini const char * const *gpr_names;
383776cad711SPaolo Bonzini const char * const *fpr_names;
383876cad711SPaolo Bonzini };
383976cad711SPaolo Bonzini
384076cad711SPaolo Bonzini static struct mips_abi_choice mips_abi_choices[] =
384176cad711SPaolo Bonzini {
384276cad711SPaolo Bonzini { "numeric", mips_gpr_names_numeric, mips_fpr_names_numeric },
384376cad711SPaolo Bonzini { "32", mips_gpr_names_oldabi, mips_fpr_names_32 },
384476cad711SPaolo Bonzini { "n32", mips_gpr_names_newabi, mips_fpr_names_n32 },
384576cad711SPaolo Bonzini { "64", mips_gpr_names_newabi, mips_fpr_names_64 },
384676cad711SPaolo Bonzini };
384776cad711SPaolo Bonzini
384876cad711SPaolo Bonzini struct mips_arch_choice
384976cad711SPaolo Bonzini {
385076cad711SPaolo Bonzini const char *name;
385176cad711SPaolo Bonzini int bfd_mach_valid;
385276cad711SPaolo Bonzini unsigned long bfd_mach;
385376cad711SPaolo Bonzini int processor;
385476cad711SPaolo Bonzini int isa;
385576cad711SPaolo Bonzini const char * const *cp0_names;
385676cad711SPaolo Bonzini const struct mips_cp0sel_name *cp0sel_names;
385776cad711SPaolo Bonzini unsigned int cp0sel_names_len;
385876cad711SPaolo Bonzini const char * const *hwr_names;
385976cad711SPaolo Bonzini };
386076cad711SPaolo Bonzini
386176cad711SPaolo Bonzini #define bfd_mach_mips3000 3000
386276cad711SPaolo Bonzini #define bfd_mach_mips3900 3900
386376cad711SPaolo Bonzini #define bfd_mach_mips4000 4000
386476cad711SPaolo Bonzini #define bfd_mach_mips4010 4010
386576cad711SPaolo Bonzini #define bfd_mach_mips4100 4100
386676cad711SPaolo Bonzini #define bfd_mach_mips4111 4111
386776cad711SPaolo Bonzini #define bfd_mach_mips4120 4120
386876cad711SPaolo Bonzini #define bfd_mach_mips4300 4300
386976cad711SPaolo Bonzini #define bfd_mach_mips4400 4400
387076cad711SPaolo Bonzini #define bfd_mach_mips4600 4600
387176cad711SPaolo Bonzini #define bfd_mach_mips4650 4650
387276cad711SPaolo Bonzini #define bfd_mach_mips5000 5000
387376cad711SPaolo Bonzini #define bfd_mach_mips5400 5400
387476cad711SPaolo Bonzini #define bfd_mach_mips5500 5500
387576cad711SPaolo Bonzini #define bfd_mach_mips6000 6000
387676cad711SPaolo Bonzini #define bfd_mach_mips7000 7000
387776cad711SPaolo Bonzini #define bfd_mach_mips8000 8000
387876cad711SPaolo Bonzini #define bfd_mach_mips9000 9000
387976cad711SPaolo Bonzini #define bfd_mach_mips10000 10000
388076cad711SPaolo Bonzini #define bfd_mach_mips12000 12000
388176cad711SPaolo Bonzini #define bfd_mach_mips16 16
388276cad711SPaolo Bonzini #define bfd_mach_mips5 5
388376cad711SPaolo Bonzini #define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */
388476cad711SPaolo Bonzini #define bfd_mach_mipsisa32 32
388576cad711SPaolo Bonzini #define bfd_mach_mipsisa32r2 33
388676cad711SPaolo Bonzini #define bfd_mach_mipsisa64 64
388776cad711SPaolo Bonzini #define bfd_mach_mipsisa64r2 65
388876cad711SPaolo Bonzini
388976cad711SPaolo Bonzini static const struct mips_arch_choice mips_arch_choices[] =
389076cad711SPaolo Bonzini {
389176cad711SPaolo Bonzini { "numeric", 0, 0, 0, 0,
389276cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
389376cad711SPaolo Bonzini
389476cad711SPaolo Bonzini { "r3000", 1, bfd_mach_mips3000, CPU_R3000, ISA_MIPS1,
389576cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
389676cad711SPaolo Bonzini { "r3900", 1, bfd_mach_mips3900, CPU_R3900, ISA_MIPS1,
389776cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
389876cad711SPaolo Bonzini { "r4000", 1, bfd_mach_mips4000, CPU_R4000, ISA_MIPS3,
389976cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
390076cad711SPaolo Bonzini { "r4010", 1, bfd_mach_mips4010, CPU_R4010, ISA_MIPS2,
390176cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
390276cad711SPaolo Bonzini { "vr4100", 1, bfd_mach_mips4100, CPU_VR4100, ISA_MIPS3,
390376cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
390476cad711SPaolo Bonzini { "vr4111", 1, bfd_mach_mips4111, CPU_R4111, ISA_MIPS3,
390576cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
390676cad711SPaolo Bonzini { "vr4120", 1, bfd_mach_mips4120, CPU_VR4120, ISA_MIPS3,
390776cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
390876cad711SPaolo Bonzini { "r4300", 1, bfd_mach_mips4300, CPU_R4300, ISA_MIPS3,
390976cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
391076cad711SPaolo Bonzini { "r4400", 1, bfd_mach_mips4400, CPU_R4400, ISA_MIPS3,
391176cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
391276cad711SPaolo Bonzini { "r4600", 1, bfd_mach_mips4600, CPU_R4600, ISA_MIPS3,
391376cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
391476cad711SPaolo Bonzini { "r4650", 1, bfd_mach_mips4650, CPU_R4650, ISA_MIPS3,
391576cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
391676cad711SPaolo Bonzini { "r5000", 1, bfd_mach_mips5000, CPU_R5000, ISA_MIPS4,
391776cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
391876cad711SPaolo Bonzini { "vr5400", 1, bfd_mach_mips5400, CPU_VR5400, ISA_MIPS4,
391976cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
392076cad711SPaolo Bonzini { "vr5500", 1, bfd_mach_mips5500, CPU_VR5500, ISA_MIPS4,
392176cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
392276cad711SPaolo Bonzini { "r6000", 1, bfd_mach_mips6000, CPU_R6000, ISA_MIPS2,
392376cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
392476cad711SPaolo Bonzini { "rm7000", 1, bfd_mach_mips7000, CPU_RM7000, ISA_MIPS4,
392576cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
392676cad711SPaolo Bonzini { "rm9000", 1, bfd_mach_mips7000, CPU_RM7000, ISA_MIPS4,
392776cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
392876cad711SPaolo Bonzini { "r8000", 1, bfd_mach_mips8000, CPU_R8000, ISA_MIPS4,
392976cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
393076cad711SPaolo Bonzini { "r10000", 1, bfd_mach_mips10000, CPU_R10000, ISA_MIPS4,
393176cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
393276cad711SPaolo Bonzini { "r12000", 1, bfd_mach_mips12000, CPU_R12000, ISA_MIPS4,
393376cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
393476cad711SPaolo Bonzini { "mips5", 1, bfd_mach_mips5, CPU_MIPS5, ISA_MIPS5,
393576cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
393676cad711SPaolo Bonzini
393776cad711SPaolo Bonzini /* For stock MIPS32, disassemble all applicable MIPS-specified ASEs.
393876cad711SPaolo Bonzini Note that MIPS-3D and MDMX are not applicable to MIPS32. (See
393976cad711SPaolo Bonzini _MIPS32 Architecture For Programmers Volume I: Introduction to the
394076cad711SPaolo Bonzini MIPS32 Architecture_ (MIPS Document Number MD00082, Revision 0.95),
394176cad711SPaolo Bonzini page 1. */
394276cad711SPaolo Bonzini { "mips32", 1, bfd_mach_mipsisa32, CPU_MIPS32,
394376cad711SPaolo Bonzini ISA_MIPS32 | INSN_MIPS16 | INSN_SMARTMIPS,
394476cad711SPaolo Bonzini mips_cp0_names_mips3264,
394576cad711SPaolo Bonzini mips_cp0sel_names_mips3264, ARRAY_SIZE (mips_cp0sel_names_mips3264),
394676cad711SPaolo Bonzini mips_hwr_names_numeric },
394776cad711SPaolo Bonzini
394876cad711SPaolo Bonzini { "mips32r2", 1, bfd_mach_mipsisa32r2, CPU_MIPS32R2,
394976cad711SPaolo Bonzini (ISA_MIPS32R2 | INSN_MIPS16 | INSN_SMARTMIPS | INSN_DSP | INSN_DSPR2
3950ed8a933fSYongbok Kim | INSN_MIPS3D | INSN_MT | INSN_MSA),
395176cad711SPaolo Bonzini mips_cp0_names_mips3264r2,
395276cad711SPaolo Bonzini mips_cp0sel_names_mips3264r2, ARRAY_SIZE (mips_cp0sel_names_mips3264r2),
395376cad711SPaolo Bonzini mips_hwr_names_mips3264r2 },
395476cad711SPaolo Bonzini
395576cad711SPaolo Bonzini /* For stock MIPS64, disassemble all applicable MIPS-specified ASEs. */
395676cad711SPaolo Bonzini { "mips64", 1, bfd_mach_mipsisa64, CPU_MIPS64,
395776cad711SPaolo Bonzini ISA_MIPS64 | INSN_MIPS16 | INSN_MIPS3D | INSN_MDMX,
395876cad711SPaolo Bonzini mips_cp0_names_mips3264,
395976cad711SPaolo Bonzini mips_cp0sel_names_mips3264, ARRAY_SIZE (mips_cp0sel_names_mips3264),
396076cad711SPaolo Bonzini mips_hwr_names_numeric },
396176cad711SPaolo Bonzini
396276cad711SPaolo Bonzini { "mips64r2", 1, bfd_mach_mipsisa64r2, CPU_MIPS64R2,
396376cad711SPaolo Bonzini (ISA_MIPS64R2 | INSN_MIPS16 | INSN_MIPS3D | INSN_DSP | INSN_DSPR2
396476cad711SPaolo Bonzini | INSN_DSP64 | INSN_MT | INSN_MDMX),
396576cad711SPaolo Bonzini mips_cp0_names_mips3264r2,
396676cad711SPaolo Bonzini mips_cp0sel_names_mips3264r2, ARRAY_SIZE (mips_cp0sel_names_mips3264r2),
396776cad711SPaolo Bonzini mips_hwr_names_mips3264r2 },
396876cad711SPaolo Bonzini
396976cad711SPaolo Bonzini { "sb1", 1, bfd_mach_mips_sb1, CPU_SB1,
397076cad711SPaolo Bonzini ISA_MIPS64 | INSN_MIPS3D | INSN_SB1,
397176cad711SPaolo Bonzini mips_cp0_names_sb1,
397276cad711SPaolo Bonzini mips_cp0sel_names_sb1, ARRAY_SIZE (mips_cp0sel_names_sb1),
397376cad711SPaolo Bonzini mips_hwr_names_numeric },
397476cad711SPaolo Bonzini
397576cad711SPaolo Bonzini /* This entry, mips16, is here only for ISA/processor selection; do
397676cad711SPaolo Bonzini not print its name. */
397776cad711SPaolo Bonzini { "", 1, bfd_mach_mips16, CPU_MIPS16, ISA_MIPS3 | INSN_MIPS16,
397876cad711SPaolo Bonzini mips_cp0_names_numeric, NULL, 0, mips_hwr_names_numeric },
397976cad711SPaolo Bonzini };
398076cad711SPaolo Bonzini
398176cad711SPaolo Bonzini /* ISA and processor type to disassemble for, and register names to use.
398276cad711SPaolo Bonzini set_default_mips_dis_options and parse_mips_dis_options fill in these
398376cad711SPaolo Bonzini values. */
398476cad711SPaolo Bonzini static int mips_processor;
398576cad711SPaolo Bonzini static int mips_isa;
398676cad711SPaolo Bonzini static const char * const *mips_gpr_names;
398776cad711SPaolo Bonzini static const char * const *mips_fpr_names;
398876cad711SPaolo Bonzini static const char * const *mips_cp0_names;
398976cad711SPaolo Bonzini static const struct mips_cp0sel_name *mips_cp0sel_names;
399076cad711SPaolo Bonzini static int mips_cp0sel_names_len;
399176cad711SPaolo Bonzini static const char * const *mips_hwr_names;
399276cad711SPaolo Bonzini
399376cad711SPaolo Bonzini /* Other options */
399476cad711SPaolo Bonzini static int no_aliases; /* If set disassemble as most general inst. */
399576cad711SPaolo Bonzini
399676cad711SPaolo Bonzini static const struct mips_abi_choice *
choose_abi_by_name(const char * name,unsigned int namelen)399776cad711SPaolo Bonzini choose_abi_by_name (const char *name, unsigned int namelen)
399876cad711SPaolo Bonzini {
399976cad711SPaolo Bonzini const struct mips_abi_choice *c;
400076cad711SPaolo Bonzini unsigned int i;
400176cad711SPaolo Bonzini
400276cad711SPaolo Bonzini for (i = 0, c = NULL; i < ARRAY_SIZE (mips_abi_choices) && c == NULL; i++)
400376cad711SPaolo Bonzini if (strncmp (mips_abi_choices[i].name, name, namelen) == 0
400476cad711SPaolo Bonzini && strlen (mips_abi_choices[i].name) == namelen)
400576cad711SPaolo Bonzini c = &mips_abi_choices[i];
400676cad711SPaolo Bonzini
400776cad711SPaolo Bonzini return c;
400876cad711SPaolo Bonzini }
400976cad711SPaolo Bonzini
401076cad711SPaolo Bonzini static const struct mips_arch_choice *
choose_arch_by_name(const char * name,unsigned int namelen)401176cad711SPaolo Bonzini choose_arch_by_name (const char *name, unsigned int namelen)
401276cad711SPaolo Bonzini {
401376cad711SPaolo Bonzini const struct mips_arch_choice *c = NULL;
401476cad711SPaolo Bonzini unsigned int i;
401576cad711SPaolo Bonzini
401676cad711SPaolo Bonzini for (i = 0, c = NULL; i < ARRAY_SIZE (mips_arch_choices) && c == NULL; i++)
401776cad711SPaolo Bonzini if (strncmp (mips_arch_choices[i].name, name, namelen) == 0
401876cad711SPaolo Bonzini && strlen (mips_arch_choices[i].name) == namelen)
401976cad711SPaolo Bonzini c = &mips_arch_choices[i];
402076cad711SPaolo Bonzini
402176cad711SPaolo Bonzini return c;
402276cad711SPaolo Bonzini }
402376cad711SPaolo Bonzini
402476cad711SPaolo Bonzini static const struct mips_arch_choice *
choose_arch_by_number(unsigned long mach)402576cad711SPaolo Bonzini choose_arch_by_number (unsigned long mach)
402676cad711SPaolo Bonzini {
402776cad711SPaolo Bonzini static unsigned long hint_bfd_mach;
402876cad711SPaolo Bonzini static const struct mips_arch_choice *hint_arch_choice;
402976cad711SPaolo Bonzini const struct mips_arch_choice *c;
403076cad711SPaolo Bonzini unsigned int i;
403176cad711SPaolo Bonzini
403276cad711SPaolo Bonzini /* We optimize this because even if the user specifies no
403376cad711SPaolo Bonzini flags, this will be done for every instruction! */
403476cad711SPaolo Bonzini if (hint_bfd_mach == mach
403576cad711SPaolo Bonzini && hint_arch_choice != NULL
403676cad711SPaolo Bonzini && hint_arch_choice->bfd_mach == hint_bfd_mach)
403776cad711SPaolo Bonzini return hint_arch_choice;
403876cad711SPaolo Bonzini
403976cad711SPaolo Bonzini for (i = 0, c = NULL; i < ARRAY_SIZE (mips_arch_choices) && c == NULL; i++)
404076cad711SPaolo Bonzini {
404176cad711SPaolo Bonzini if (mips_arch_choices[i].bfd_mach_valid
404276cad711SPaolo Bonzini && mips_arch_choices[i].bfd_mach == mach)
404376cad711SPaolo Bonzini {
404476cad711SPaolo Bonzini c = &mips_arch_choices[i];
404576cad711SPaolo Bonzini hint_bfd_mach = mach;
404676cad711SPaolo Bonzini hint_arch_choice = c;
404776cad711SPaolo Bonzini }
404876cad711SPaolo Bonzini }
404976cad711SPaolo Bonzini return c;
405076cad711SPaolo Bonzini }
405176cad711SPaolo Bonzini
405276cad711SPaolo Bonzini static void
set_default_mips_dis_options(struct disassemble_info * info)405376cad711SPaolo Bonzini set_default_mips_dis_options (struct disassemble_info *info)
405476cad711SPaolo Bonzini {
405576cad711SPaolo Bonzini const struct mips_arch_choice *chosen_arch;
405676cad711SPaolo Bonzini
405776cad711SPaolo Bonzini /* Defaults: mipsIII/r3000 (?!), (o)32-style ("oldabi") GPR names,
405876cad711SPaolo Bonzini and numeric FPR, CP0 register, and HWR names. */
405976cad711SPaolo Bonzini mips_isa = ISA_MIPS3;
406076cad711SPaolo Bonzini mips_processor = CPU_R3000;
406176cad711SPaolo Bonzini mips_gpr_names = mips_gpr_names_oldabi;
406276cad711SPaolo Bonzini mips_fpr_names = mips_fpr_names_numeric;
406376cad711SPaolo Bonzini mips_cp0_names = mips_cp0_names_numeric;
406476cad711SPaolo Bonzini mips_cp0sel_names = NULL;
406576cad711SPaolo Bonzini mips_cp0sel_names_len = 0;
406676cad711SPaolo Bonzini mips_hwr_names = mips_hwr_names_numeric;
406776cad711SPaolo Bonzini no_aliases = 0;
406876cad711SPaolo Bonzini
406976cad711SPaolo Bonzini /* If an ELF "newabi" binary, use the n32/(n)64 GPR names. */
407076cad711SPaolo Bonzini #if 0
407176cad711SPaolo Bonzini if (info->flavour == bfd_target_elf_flavour && info->section != NULL)
407276cad711SPaolo Bonzini {
407376cad711SPaolo Bonzini Elf_Internal_Ehdr *header;
407476cad711SPaolo Bonzini
407576cad711SPaolo Bonzini header = elf_elfheader (info->section->owner);
407676cad711SPaolo Bonzini if (is_newabi (header))
407776cad711SPaolo Bonzini mips_gpr_names = mips_gpr_names_newabi;
407876cad711SPaolo Bonzini }
407976cad711SPaolo Bonzini #endif
408076cad711SPaolo Bonzini
408176cad711SPaolo Bonzini /* Set ISA, architecture, and cp0 register names as best we can. */
408276cad711SPaolo Bonzini #if !defined(SYMTAB_AVAILABLE) && 0
408376cad711SPaolo Bonzini /* This is running out on a target machine, not in a host tool.
408476cad711SPaolo Bonzini FIXME: Where does mips_target_info come from? */
408576cad711SPaolo Bonzini target_processor = mips_target_info.processor;
408676cad711SPaolo Bonzini mips_isa = mips_target_info.isa;
408776cad711SPaolo Bonzini #else
408876cad711SPaolo Bonzini chosen_arch = choose_arch_by_number (info->mach);
408976cad711SPaolo Bonzini if (chosen_arch != NULL)
409076cad711SPaolo Bonzini {
409176cad711SPaolo Bonzini mips_processor = chosen_arch->processor;
409276cad711SPaolo Bonzini mips_isa = chosen_arch->isa;
409376cad711SPaolo Bonzini mips_cp0_names = chosen_arch->cp0_names;
409476cad711SPaolo Bonzini mips_cp0sel_names = chosen_arch->cp0sel_names;
409576cad711SPaolo Bonzini mips_cp0sel_names_len = chosen_arch->cp0sel_names_len;
409676cad711SPaolo Bonzini mips_hwr_names = chosen_arch->hwr_names;
409776cad711SPaolo Bonzini }
409876cad711SPaolo Bonzini #endif
409976cad711SPaolo Bonzini }
410076cad711SPaolo Bonzini
410176cad711SPaolo Bonzini static void
parse_mips_dis_option(const char * option,unsigned int len)410276cad711SPaolo Bonzini parse_mips_dis_option (const char *option, unsigned int len)
410376cad711SPaolo Bonzini {
410476cad711SPaolo Bonzini unsigned int i, optionlen, vallen;
410576cad711SPaolo Bonzini const char *val;
410676cad711SPaolo Bonzini const struct mips_abi_choice *chosen_abi;
410776cad711SPaolo Bonzini const struct mips_arch_choice *chosen_arch;
410876cad711SPaolo Bonzini
410976cad711SPaolo Bonzini /* Look for the = that delimits the end of the option name. */
411076cad711SPaolo Bonzini for (i = 0; i < len; i++)
411176cad711SPaolo Bonzini {
411276cad711SPaolo Bonzini if (option[i] == '=')
411376cad711SPaolo Bonzini break;
411476cad711SPaolo Bonzini }
411576cad711SPaolo Bonzini if (i == 0) /* Invalid option: no name before '='. */
411676cad711SPaolo Bonzini return;
411776cad711SPaolo Bonzini if (i == len) /* Invalid option: no '='. */
411876cad711SPaolo Bonzini return;
411976cad711SPaolo Bonzini if (i == (len - 1)) /* Invalid option: no value after '='. */
412076cad711SPaolo Bonzini return;
412176cad711SPaolo Bonzini
412276cad711SPaolo Bonzini optionlen = i;
412376cad711SPaolo Bonzini val = option + (optionlen + 1);
412476cad711SPaolo Bonzini vallen = len - (optionlen + 1);
412576cad711SPaolo Bonzini
412676cad711SPaolo Bonzini if (strncmp("gpr-names", option, optionlen) == 0
412776cad711SPaolo Bonzini && strlen("gpr-names") == optionlen)
412876cad711SPaolo Bonzini {
412976cad711SPaolo Bonzini chosen_abi = choose_abi_by_name (val, vallen);
413076cad711SPaolo Bonzini if (chosen_abi != NULL)
413176cad711SPaolo Bonzini mips_gpr_names = chosen_abi->gpr_names;
413276cad711SPaolo Bonzini return;
413376cad711SPaolo Bonzini }
413476cad711SPaolo Bonzini
413576cad711SPaolo Bonzini if (strncmp("fpr-names", option, optionlen) == 0
413676cad711SPaolo Bonzini && strlen("fpr-names") == optionlen)
413776cad711SPaolo Bonzini {
413876cad711SPaolo Bonzini chosen_abi = choose_abi_by_name (val, vallen);
413976cad711SPaolo Bonzini if (chosen_abi != NULL)
414076cad711SPaolo Bonzini mips_fpr_names = chosen_abi->fpr_names;
414176cad711SPaolo Bonzini return;
414276cad711SPaolo Bonzini }
414376cad711SPaolo Bonzini
414476cad711SPaolo Bonzini if (strncmp("cp0-names", option, optionlen) == 0
414576cad711SPaolo Bonzini && strlen("cp0-names") == optionlen)
414676cad711SPaolo Bonzini {
414776cad711SPaolo Bonzini chosen_arch = choose_arch_by_name (val, vallen);
414876cad711SPaolo Bonzini if (chosen_arch != NULL)
414976cad711SPaolo Bonzini {
415076cad711SPaolo Bonzini mips_cp0_names = chosen_arch->cp0_names;
415176cad711SPaolo Bonzini mips_cp0sel_names = chosen_arch->cp0sel_names;
415276cad711SPaolo Bonzini mips_cp0sel_names_len = chosen_arch->cp0sel_names_len;
415376cad711SPaolo Bonzini }
415476cad711SPaolo Bonzini return;
415576cad711SPaolo Bonzini }
415676cad711SPaolo Bonzini
415776cad711SPaolo Bonzini if (strncmp("hwr-names", option, optionlen) == 0
415876cad711SPaolo Bonzini && strlen("hwr-names") == optionlen)
415976cad711SPaolo Bonzini {
416076cad711SPaolo Bonzini chosen_arch = choose_arch_by_name (val, vallen);
416176cad711SPaolo Bonzini if (chosen_arch != NULL)
416276cad711SPaolo Bonzini mips_hwr_names = chosen_arch->hwr_names;
416376cad711SPaolo Bonzini return;
416476cad711SPaolo Bonzini }
416576cad711SPaolo Bonzini
416676cad711SPaolo Bonzini if (strncmp("reg-names", option, optionlen) == 0
416776cad711SPaolo Bonzini && strlen("reg-names") == optionlen)
416876cad711SPaolo Bonzini {
416976cad711SPaolo Bonzini /* We check both ABI and ARCH here unconditionally, so
417076cad711SPaolo Bonzini that "numeric" will do the desirable thing: select
417176cad711SPaolo Bonzini numeric register names for all registers. Other than
417276cad711SPaolo Bonzini that, a given name probably won't match both. */
417376cad711SPaolo Bonzini chosen_abi = choose_abi_by_name (val, vallen);
417476cad711SPaolo Bonzini if (chosen_abi != NULL)
417576cad711SPaolo Bonzini {
417676cad711SPaolo Bonzini mips_gpr_names = chosen_abi->gpr_names;
417776cad711SPaolo Bonzini mips_fpr_names = chosen_abi->fpr_names;
417876cad711SPaolo Bonzini }
417976cad711SPaolo Bonzini chosen_arch = choose_arch_by_name (val, vallen);
418076cad711SPaolo Bonzini if (chosen_arch != NULL)
418176cad711SPaolo Bonzini {
418276cad711SPaolo Bonzini mips_cp0_names = chosen_arch->cp0_names;
418376cad711SPaolo Bonzini mips_cp0sel_names = chosen_arch->cp0sel_names;
418476cad711SPaolo Bonzini mips_cp0sel_names_len = chosen_arch->cp0sel_names_len;
418576cad711SPaolo Bonzini mips_hwr_names = chosen_arch->hwr_names;
418676cad711SPaolo Bonzini }
418776cad711SPaolo Bonzini return;
418876cad711SPaolo Bonzini }
418976cad711SPaolo Bonzini
419076cad711SPaolo Bonzini /* Invalid option. */
419176cad711SPaolo Bonzini }
419276cad711SPaolo Bonzini
419376cad711SPaolo Bonzini static void
parse_mips_dis_options(const char * options)419476cad711SPaolo Bonzini parse_mips_dis_options (const char *options)
419576cad711SPaolo Bonzini {
419676cad711SPaolo Bonzini const char *option_end;
419776cad711SPaolo Bonzini
419876cad711SPaolo Bonzini if (options == NULL)
419976cad711SPaolo Bonzini return;
420076cad711SPaolo Bonzini
420176cad711SPaolo Bonzini while (*options != '\0')
420276cad711SPaolo Bonzini {
420376cad711SPaolo Bonzini /* Skip empty options. */
420476cad711SPaolo Bonzini if (*options == ',')
420576cad711SPaolo Bonzini {
420676cad711SPaolo Bonzini options++;
420776cad711SPaolo Bonzini continue;
420876cad711SPaolo Bonzini }
420976cad711SPaolo Bonzini
421076cad711SPaolo Bonzini /* We know that *options is neither NUL or a comma. */
421176cad711SPaolo Bonzini option_end = options + 1;
421276cad711SPaolo Bonzini while (*option_end != ',' && *option_end != '\0')
421376cad711SPaolo Bonzini option_end++;
421476cad711SPaolo Bonzini
421576cad711SPaolo Bonzini parse_mips_dis_option (options, option_end - options);
421676cad711SPaolo Bonzini
421776cad711SPaolo Bonzini /* Go on to the next one. If option_end points to a comma, it
421876cad711SPaolo Bonzini will be skipped above. */
421976cad711SPaolo Bonzini options = option_end;
422076cad711SPaolo Bonzini }
422176cad711SPaolo Bonzini }
422276cad711SPaolo Bonzini
422376cad711SPaolo Bonzini static const struct mips_cp0sel_name *
lookup_mips_cp0sel_name(const struct mips_cp0sel_name * names,unsigned int len,unsigned int cp0reg,unsigned int sel)422476cad711SPaolo Bonzini lookup_mips_cp0sel_name (const struct mips_cp0sel_name *names,
422576cad711SPaolo Bonzini unsigned int len,
422676cad711SPaolo Bonzini unsigned int cp0reg,
422776cad711SPaolo Bonzini unsigned int sel)
422876cad711SPaolo Bonzini {
422976cad711SPaolo Bonzini unsigned int i;
423076cad711SPaolo Bonzini
423176cad711SPaolo Bonzini for (i = 0; i < len; i++)
423276cad711SPaolo Bonzini if (names[i].cp0reg == cp0reg && names[i].sel == sel)
423376cad711SPaolo Bonzini return &names[i];
423476cad711SPaolo Bonzini return NULL;
423576cad711SPaolo Bonzini }
423676cad711SPaolo Bonzini
423776cad711SPaolo Bonzini /* Print insn arguments for 32/64-bit code. */
423876cad711SPaolo Bonzini
423976cad711SPaolo Bonzini static void
print_insn_args(const char * d,register unsigned long int l,bfd_vma pc,struct disassemble_info * info,const struct mips_opcode * opp)424076cad711SPaolo Bonzini print_insn_args (const char *d,
424176cad711SPaolo Bonzini register unsigned long int l,
424276cad711SPaolo Bonzini bfd_vma pc,
424376cad711SPaolo Bonzini struct disassemble_info *info,
424476cad711SPaolo Bonzini const struct mips_opcode *opp)
424576cad711SPaolo Bonzini {
424676cad711SPaolo Bonzini int op, delta;
424776cad711SPaolo Bonzini unsigned int lsb, msb, msbd;
424876cad711SPaolo Bonzini
424976cad711SPaolo Bonzini lsb = 0;
425076cad711SPaolo Bonzini
425176cad711SPaolo Bonzini for (; *d != '\0'; d++)
425276cad711SPaolo Bonzini {
425376cad711SPaolo Bonzini switch (*d)
425476cad711SPaolo Bonzini {
425576cad711SPaolo Bonzini case ',':
425676cad711SPaolo Bonzini case '(':
425776cad711SPaolo Bonzini case ')':
425876cad711SPaolo Bonzini case '[':
425976cad711SPaolo Bonzini case ']':
426076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%c", *d);
426176cad711SPaolo Bonzini break;
426276cad711SPaolo Bonzini
426376cad711SPaolo Bonzini case '+':
426476cad711SPaolo Bonzini /* Extension character; switch for second char. */
426576cad711SPaolo Bonzini d++;
426676cad711SPaolo Bonzini switch (*d)
426776cad711SPaolo Bonzini {
426876cad711SPaolo Bonzini case '\0':
426976cad711SPaolo Bonzini /* xgettext:c-format */
427076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream,
4271ca66f1a1SLluís Vilanova "# internal error, incomplete extension sequence (+)");
427276cad711SPaolo Bonzini return;
427376cad711SPaolo Bonzini
427476cad711SPaolo Bonzini case 'A':
427576cad711SPaolo Bonzini lsb = (l >> OP_SH_SHAMT) & OP_MASK_SHAMT;
427676cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x", lsb);
427776cad711SPaolo Bonzini break;
427876cad711SPaolo Bonzini
427976cad711SPaolo Bonzini case 'B':
428076cad711SPaolo Bonzini msb = (l >> OP_SH_INSMSB) & OP_MASK_INSMSB;
428176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x", msb - lsb + 1);
428276cad711SPaolo Bonzini break;
428376cad711SPaolo Bonzini
428476cad711SPaolo Bonzini case '1':
428576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
428676cad711SPaolo Bonzini (l >> OP_SH_UDI1) & OP_MASK_UDI1);
428776cad711SPaolo Bonzini break;
428876cad711SPaolo Bonzini
428976cad711SPaolo Bonzini case '2':
429076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
429176cad711SPaolo Bonzini (l >> OP_SH_UDI2) & OP_MASK_UDI2);
429276cad711SPaolo Bonzini break;
429376cad711SPaolo Bonzini
429476cad711SPaolo Bonzini case '3':
429576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
429676cad711SPaolo Bonzini (l >> OP_SH_UDI3) & OP_MASK_UDI3);
429776cad711SPaolo Bonzini break;
429876cad711SPaolo Bonzini
429976cad711SPaolo Bonzini case '4':
430076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
430176cad711SPaolo Bonzini (l >> OP_SH_UDI4) & OP_MASK_UDI4);
430276cad711SPaolo Bonzini break;
430376cad711SPaolo Bonzini
4304ed8a933fSYongbok Kim case '5': /* 5-bit signed immediate in bit 16 */
4305ed8a933fSYongbok Kim delta = ((l >> OP_SH_RT) & OP_MASK_RT);
4306ed8a933fSYongbok Kim if (delta & 0x10) { /* test sign bit */
4307ed8a933fSYongbok Kim delta |= ~OP_MASK_RT;
4308ed8a933fSYongbok Kim }
4309ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%d", delta);
4310ed8a933fSYongbok Kim break;
4311ed8a933fSYongbok Kim
4312ed8a933fSYongbok Kim case '6':
4313ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "0x%lx",
4314ed8a933fSYongbok Kim (l >> OP_SH_2BIT) & OP_MASK_2BIT);
4315ed8a933fSYongbok Kim break;
4316ed8a933fSYongbok Kim
4317ed8a933fSYongbok Kim case '7':
4318ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "0x%lx",
4319ed8a933fSYongbok Kim (l >> OP_SH_3BIT) & OP_MASK_3BIT);
4320ed8a933fSYongbok Kim break;
4321ed8a933fSYongbok Kim
4322ed8a933fSYongbok Kim case '8':
4323ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "0x%lx",
4324ed8a933fSYongbok Kim (l >> OP_SH_4BIT) & OP_MASK_4BIT);
4325ed8a933fSYongbok Kim break;
4326ed8a933fSYongbok Kim
4327ed8a933fSYongbok Kim case '9':
4328ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "0x%lx",
4329ed8a933fSYongbok Kim (l >> OP_SH_5BIT) & OP_MASK_5BIT);
4330ed8a933fSYongbok Kim break;
4331ed8a933fSYongbok Kim
4332ed8a933fSYongbok Kim case ':':
4333ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "0x%lx",
4334ed8a933fSYongbok Kim (l >> OP_SH_1BIT) & OP_MASK_1BIT);
4335ed8a933fSYongbok Kim break;
4336ed8a933fSYongbok Kim
4337ed8a933fSYongbok Kim case '!': /* 10-bit pc-relative target in bit 11 */
4338ed8a933fSYongbok Kim delta = ((l >> OP_SH_10BIT) & OP_MASK_10BIT);
4339ed8a933fSYongbok Kim if (delta & 0x200) { /* test sign bit */
4340ed8a933fSYongbok Kim delta |= ~OP_MASK_10BIT;
4341ed8a933fSYongbok Kim }
4342ed8a933fSYongbok Kim info->target = (delta << 2) + pc + INSNLEN;
4343ed8a933fSYongbok Kim (*info->print_address_func) (info->target, info);
4344ed8a933fSYongbok Kim break;
4345ed8a933fSYongbok Kim
4346ed8a933fSYongbok Kim case '~':
4347ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "0");
4348ed8a933fSYongbok Kim break;
4349ed8a933fSYongbok Kim
4350ed8a933fSYongbok Kim case '@':
4351ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "0x%lx",
4352ed8a933fSYongbok Kim ((l >> OP_SH_1_TO_4) & OP_MASK_1_TO_4)+1);
4353ed8a933fSYongbok Kim break;
4354ed8a933fSYongbok Kim
4355ed8a933fSYongbok Kim case '^': /* 10-bit signed immediate << 0 in bit 16 */
4356ed8a933fSYongbok Kim delta = ((l >> OP_SH_IMM10) & OP_MASK_IMM10);
4357ed8a933fSYongbok Kim if (delta & 0x200) { /* test sign bit */
4358ed8a933fSYongbok Kim delta |= ~OP_MASK_IMM10;
4359ed8a933fSYongbok Kim }
4360ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%d", delta);
4361ed8a933fSYongbok Kim break;
4362ed8a933fSYongbok Kim
4363ed8a933fSYongbok Kim case '#': /* 10-bit signed immediate << 1 in bit 16 */
4364ed8a933fSYongbok Kim delta = ((l >> OP_SH_IMM10) & OP_MASK_IMM10);
4365ed8a933fSYongbok Kim if (delta & 0x200) { /* test sign bit */
4366ed8a933fSYongbok Kim delta |= ~OP_MASK_IMM10;
4367ed8a933fSYongbok Kim }
4368ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%d", delta << 1);
4369ed8a933fSYongbok Kim break;
4370ed8a933fSYongbok Kim
4371ed8a933fSYongbok Kim case '$': /* 10-bit signed immediate << 2 in bit 16 */
4372ed8a933fSYongbok Kim delta = ((l >> OP_SH_IMM10) & OP_MASK_IMM10);
4373ed8a933fSYongbok Kim if (delta & 0x200) { /* test sign bit */
4374ed8a933fSYongbok Kim delta |= ~OP_MASK_IMM10;
4375ed8a933fSYongbok Kim }
4376ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%d", delta << 2);
4377ed8a933fSYongbok Kim break;
4378ed8a933fSYongbok Kim
4379ed8a933fSYongbok Kim case '%': /* 10-bit signed immediate << 3 in bit 16 */
4380ed8a933fSYongbok Kim delta = ((l >> OP_SH_IMM10) & OP_MASK_IMM10);
4381ed8a933fSYongbok Kim if (delta & 0x200) { /* test sign bit */
4382ed8a933fSYongbok Kim delta |= ~OP_MASK_IMM10;
4383ed8a933fSYongbok Kim }
4384ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%d", delta << 3);
4385ed8a933fSYongbok Kim break;
4386ed8a933fSYongbok Kim
438776cad711SPaolo Bonzini case 'C':
438876cad711SPaolo Bonzini case 'H':
438976cad711SPaolo Bonzini msbd = (l >> OP_SH_EXTMSBD) & OP_MASK_EXTMSBD;
439076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x", msbd + 1);
439176cad711SPaolo Bonzini break;
439276cad711SPaolo Bonzini
439376cad711SPaolo Bonzini case 'D':
439476cad711SPaolo Bonzini {
439576cad711SPaolo Bonzini const struct mips_cp0sel_name *n;
439676cad711SPaolo Bonzini unsigned int cp0reg, sel;
439776cad711SPaolo Bonzini
439876cad711SPaolo Bonzini cp0reg = (l >> OP_SH_RD) & OP_MASK_RD;
439976cad711SPaolo Bonzini sel = (l >> OP_SH_SEL) & OP_MASK_SEL;
440076cad711SPaolo Bonzini
440176cad711SPaolo Bonzini /* CP0 register including 'sel' code for mtcN (et al.), to be
440276cad711SPaolo Bonzini printed textually if known. If not known, print both
440376cad711SPaolo Bonzini CP0 register name and sel numerically since CP0 register
440476cad711SPaolo Bonzini with sel 0 may have a name unrelated to register being
440576cad711SPaolo Bonzini printed. */
440676cad711SPaolo Bonzini n = lookup_mips_cp0sel_name(mips_cp0sel_names,
440776cad711SPaolo Bonzini mips_cp0sel_names_len, cp0reg, sel);
440876cad711SPaolo Bonzini if (n != NULL)
440976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", n->name);
441076cad711SPaolo Bonzini else
441176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$%d,%d", cp0reg, sel);
441276cad711SPaolo Bonzini break;
441376cad711SPaolo Bonzini }
441476cad711SPaolo Bonzini
441576cad711SPaolo Bonzini case 'E':
441676cad711SPaolo Bonzini lsb = ((l >> OP_SH_SHAMT) & OP_MASK_SHAMT) + 32;
441776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x", lsb);
441876cad711SPaolo Bonzini break;
441976cad711SPaolo Bonzini
442076cad711SPaolo Bonzini case 'F':
442176cad711SPaolo Bonzini msb = ((l >> OP_SH_INSMSB) & OP_MASK_INSMSB) + 32;
442276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x", msb - lsb + 1);
442376cad711SPaolo Bonzini break;
442476cad711SPaolo Bonzini
442576cad711SPaolo Bonzini case 'G':
442676cad711SPaolo Bonzini msbd = ((l >> OP_SH_EXTMSBD) & OP_MASK_EXTMSBD) + 32;
442776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x", msbd + 1);
442876cad711SPaolo Bonzini break;
442976cad711SPaolo Bonzini
443031837be3SYongbok Kim case 'o':
4431d4ea6acdSLeon Alrae switch (*(d+1)) {
4432d4ea6acdSLeon Alrae case '1':
4433d4ea6acdSLeon Alrae d++;
4434d4ea6acdSLeon Alrae delta = l & ((1 << 18) - 1);
4435d4ea6acdSLeon Alrae if (delta & 0x20000) {
4436d4ea6acdSLeon Alrae delta |= ~0x1ffff;
4437d4ea6acdSLeon Alrae }
4438d4ea6acdSLeon Alrae break;
4439d4ea6acdSLeon Alrae case '2':
4440d4ea6acdSLeon Alrae d++;
4441d4ea6acdSLeon Alrae delta = l & ((1 << 19) - 1);
4442d4ea6acdSLeon Alrae if (delta & 0x40000) {
4443d4ea6acdSLeon Alrae delta |= ~0x3ffff;
4444d4ea6acdSLeon Alrae }
4445d4ea6acdSLeon Alrae break;
4446d4ea6acdSLeon Alrae default:
444731837be3SYongbok Kim delta = (l >> OP_SH_DELTA_R6) & OP_MASK_DELTA_R6;
444831837be3SYongbok Kim if (delta & 0x8000) {
444931837be3SYongbok Kim delta |= ~0xffff;
445031837be3SYongbok Kim }
4451d4ea6acdSLeon Alrae }
4452d4ea6acdSLeon Alrae
445331837be3SYongbok Kim (*info->fprintf_func) (info->stream, "%d", delta);
445431837be3SYongbok Kim break;
445531837be3SYongbok Kim
445631837be3SYongbok Kim case 'p':
445731837be3SYongbok Kim /* Sign extend the displacement with 26 bits. */
445831837be3SYongbok Kim delta = (l >> OP_SH_DELTA) & OP_MASK_TARGET;
445931837be3SYongbok Kim if (delta & 0x2000000) {
446031837be3SYongbok Kim delta |= ~0x3FFFFFF;
446131837be3SYongbok Kim }
446231837be3SYongbok Kim info->target = (delta << 2) + pc + INSNLEN;
446331837be3SYongbok Kim (*info->print_address_func) (info->target, info);
446431837be3SYongbok Kim break;
446531837be3SYongbok Kim
4466*a6d89b45SDavid Daney case 'q':
4467*a6d89b45SDavid Daney /* Sign extend the displacement with 21 bits. */
4468*a6d89b45SDavid Daney delta = sextract32(l, OP_SH_DELTA, 21);
4469*a6d89b45SDavid Daney info->target = (delta << 2) + pc + INSNLEN;
4470*a6d89b45SDavid Daney (*info->print_address_func) (info->target, info);
4471*a6d89b45SDavid Daney break;
4472*a6d89b45SDavid Daney
447376cad711SPaolo Bonzini case 't': /* Coprocessor 0 reg name */
447476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
447576cad711SPaolo Bonzini mips_cp0_names[(l >> OP_SH_RT) &
447676cad711SPaolo Bonzini OP_MASK_RT]);
447776cad711SPaolo Bonzini break;
447876cad711SPaolo Bonzini
447976cad711SPaolo Bonzini case 'T': /* Coprocessor 0 reg name */
448076cad711SPaolo Bonzini {
448176cad711SPaolo Bonzini const struct mips_cp0sel_name *n;
448276cad711SPaolo Bonzini unsigned int cp0reg, sel;
448376cad711SPaolo Bonzini
448476cad711SPaolo Bonzini cp0reg = (l >> OP_SH_RT) & OP_MASK_RT;
448576cad711SPaolo Bonzini sel = (l >> OP_SH_SEL) & OP_MASK_SEL;
448676cad711SPaolo Bonzini
448776cad711SPaolo Bonzini /* CP0 register including 'sel' code for mftc0, to be
448876cad711SPaolo Bonzini printed textually if known. If not known, print both
448976cad711SPaolo Bonzini CP0 register name and sel numerically since CP0 register
449076cad711SPaolo Bonzini with sel 0 may have a name unrelated to register being
449176cad711SPaolo Bonzini printed. */
449276cad711SPaolo Bonzini n = lookup_mips_cp0sel_name(mips_cp0sel_names,
449376cad711SPaolo Bonzini mips_cp0sel_names_len, cp0reg, sel);
449476cad711SPaolo Bonzini if (n != NULL)
449576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", n->name);
449676cad711SPaolo Bonzini else
449776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$%d,%d", cp0reg, sel);
449876cad711SPaolo Bonzini break;
449976cad711SPaolo Bonzini }
450076cad711SPaolo Bonzini
4501ed8a933fSYongbok Kim case 'd':
4502ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%s",
4503ed8a933fSYongbok Kim mips_wr_names[(l >> OP_SH_FD) & OP_MASK_FD]);
4504ed8a933fSYongbok Kim break;
4505ed8a933fSYongbok Kim
4506ed8a933fSYongbok Kim case 'e':
4507ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%s",
4508ed8a933fSYongbok Kim mips_wr_names[(l >> OP_SH_FS) & OP_MASK_FS]);
4509ed8a933fSYongbok Kim break;
4510ed8a933fSYongbok Kim
4511ed8a933fSYongbok Kim case 'f':
4512ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%s",
4513ed8a933fSYongbok Kim mips_wr_names[(l >> OP_SH_FT) & OP_MASK_FT]);
4514ed8a933fSYongbok Kim break;
4515ed8a933fSYongbok Kim
4516ed8a933fSYongbok Kim case 'g':
4517ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%s",
4518ed8a933fSYongbok Kim mips_msa_control_names_mips3264r2[(l >> OP_SH_MSACR11)
4519ed8a933fSYongbok Kim & OP_MASK_MSACR11]);
4520ed8a933fSYongbok Kim break;
4521ed8a933fSYongbok Kim
4522ed8a933fSYongbok Kim case 'h':
4523ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%s",
4524ed8a933fSYongbok Kim mips_msa_control_names_mips3264r2[(l >> OP_SH_MSACR6)
4525ed8a933fSYongbok Kim & OP_MASK_MSACR6]);
4526ed8a933fSYongbok Kim break;
4527ed8a933fSYongbok Kim
4528ed8a933fSYongbok Kim case 'i':
4529ed8a933fSYongbok Kim (*info->fprintf_func) (info->stream, "%s",
4530ed8a933fSYongbok Kim mips_gpr_names[(l >> OP_SH_GPR) & OP_MASK_GPR]);
4531ed8a933fSYongbok Kim break;
4532ed8a933fSYongbok Kim
453376cad711SPaolo Bonzini default:
453476cad711SPaolo Bonzini /* xgettext:c-format */
453576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream,
4536ca66f1a1SLluís Vilanova "# internal error, undefined extension sequence (+%c)",
453776cad711SPaolo Bonzini *d);
453876cad711SPaolo Bonzini return;
453976cad711SPaolo Bonzini }
454076cad711SPaolo Bonzini break;
454176cad711SPaolo Bonzini
454276cad711SPaolo Bonzini case '2':
454376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
454476cad711SPaolo Bonzini (l >> OP_SH_BP) & OP_MASK_BP);
454576cad711SPaolo Bonzini break;
454676cad711SPaolo Bonzini
454776cad711SPaolo Bonzini case '3':
454876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
454976cad711SPaolo Bonzini (l >> OP_SH_SA3) & OP_MASK_SA3);
455076cad711SPaolo Bonzini break;
455176cad711SPaolo Bonzini
455276cad711SPaolo Bonzini case '4':
455376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
455476cad711SPaolo Bonzini (l >> OP_SH_SA4) & OP_MASK_SA4);
455576cad711SPaolo Bonzini break;
455676cad711SPaolo Bonzini
455776cad711SPaolo Bonzini case '5':
455876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
455976cad711SPaolo Bonzini (l >> OP_SH_IMM8) & OP_MASK_IMM8);
456076cad711SPaolo Bonzini break;
456176cad711SPaolo Bonzini
456276cad711SPaolo Bonzini case '6':
456376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
456476cad711SPaolo Bonzini (l >> OP_SH_RS) & OP_MASK_RS);
456576cad711SPaolo Bonzini break;
456676cad711SPaolo Bonzini
456776cad711SPaolo Bonzini case '7':
456876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$ac%ld",
456976cad711SPaolo Bonzini (l >> OP_SH_DSPACC) & OP_MASK_DSPACC);
457076cad711SPaolo Bonzini break;
457176cad711SPaolo Bonzini
457276cad711SPaolo Bonzini case '8':
457376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
457476cad711SPaolo Bonzini (l >> OP_SH_WRDSP) & OP_MASK_WRDSP);
457576cad711SPaolo Bonzini break;
457676cad711SPaolo Bonzini
457776cad711SPaolo Bonzini case '9':
457876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$ac%ld",
457976cad711SPaolo Bonzini (l >> OP_SH_DSPACC_S) & OP_MASK_DSPACC_S);
458076cad711SPaolo Bonzini break;
458176cad711SPaolo Bonzini
458276cad711SPaolo Bonzini case '0': /* dsp 6-bit signed immediate in bit 20 */
458376cad711SPaolo Bonzini delta = ((l >> OP_SH_DSPSFT) & OP_MASK_DSPSFT);
458476cad711SPaolo Bonzini if (delta & 0x20) /* test sign bit */
458576cad711SPaolo Bonzini delta |= ~OP_MASK_DSPSFT;
458676cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%d", delta);
458776cad711SPaolo Bonzini break;
458876cad711SPaolo Bonzini
458976cad711SPaolo Bonzini case ':': /* dsp 7-bit signed immediate in bit 19 */
459076cad711SPaolo Bonzini delta = ((l >> OP_SH_DSPSFT_7) & OP_MASK_DSPSFT_7);
459176cad711SPaolo Bonzini if (delta & 0x40) /* test sign bit */
459276cad711SPaolo Bonzini delta |= ~OP_MASK_DSPSFT_7;
459376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%d", delta);
459476cad711SPaolo Bonzini break;
459576cad711SPaolo Bonzini
459676cad711SPaolo Bonzini case '\'':
459776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
459876cad711SPaolo Bonzini (l >> OP_SH_RDDSP) & OP_MASK_RDDSP);
459976cad711SPaolo Bonzini break;
460076cad711SPaolo Bonzini
460176cad711SPaolo Bonzini case '@': /* dsp 10-bit signed immediate in bit 16 */
460276cad711SPaolo Bonzini delta = ((l >> OP_SH_IMM10) & OP_MASK_IMM10);
460376cad711SPaolo Bonzini if (delta & 0x200) /* test sign bit */
460476cad711SPaolo Bonzini delta |= ~OP_MASK_IMM10;
460576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%d", delta);
460676cad711SPaolo Bonzini break;
460776cad711SPaolo Bonzini
460876cad711SPaolo Bonzini case '!':
460976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%ld",
461076cad711SPaolo Bonzini (l >> OP_SH_MT_U) & OP_MASK_MT_U);
461176cad711SPaolo Bonzini break;
461276cad711SPaolo Bonzini
461376cad711SPaolo Bonzini case '$':
461476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%ld",
461576cad711SPaolo Bonzini (l >> OP_SH_MT_H) & OP_MASK_MT_H);
461676cad711SPaolo Bonzini break;
461776cad711SPaolo Bonzini
461876cad711SPaolo Bonzini case '*':
461976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$ac%ld",
462076cad711SPaolo Bonzini (l >> OP_SH_MTACC_T) & OP_MASK_MTACC_T);
462176cad711SPaolo Bonzini break;
462276cad711SPaolo Bonzini
462376cad711SPaolo Bonzini case '&':
462476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$ac%ld",
462576cad711SPaolo Bonzini (l >> OP_SH_MTACC_D) & OP_MASK_MTACC_D);
462676cad711SPaolo Bonzini break;
462776cad711SPaolo Bonzini
462876cad711SPaolo Bonzini case 'g':
462976cad711SPaolo Bonzini /* Coprocessor register for CTTC1, MTTC2, MTHC2, CTTC2. */
463076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$%ld",
463176cad711SPaolo Bonzini (l >> OP_SH_RD) & OP_MASK_RD);
463276cad711SPaolo Bonzini break;
463376cad711SPaolo Bonzini
463476cad711SPaolo Bonzini case 's':
463576cad711SPaolo Bonzini case 'b':
463676cad711SPaolo Bonzini case 'r':
463776cad711SPaolo Bonzini case 'v':
463876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
463976cad711SPaolo Bonzini mips_gpr_names[(l >> OP_SH_RS) & OP_MASK_RS]);
464076cad711SPaolo Bonzini break;
464176cad711SPaolo Bonzini
464276cad711SPaolo Bonzini case 't':
464376cad711SPaolo Bonzini case 'w':
464476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
464576cad711SPaolo Bonzini mips_gpr_names[(l >> OP_SH_RT) & OP_MASK_RT]);
464676cad711SPaolo Bonzini break;
464776cad711SPaolo Bonzini
464876cad711SPaolo Bonzini case 'i':
464976cad711SPaolo Bonzini case 'u':
465076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
465176cad711SPaolo Bonzini (l >> OP_SH_IMMEDIATE) & OP_MASK_IMMEDIATE);
465276cad711SPaolo Bonzini break;
465376cad711SPaolo Bonzini
465476cad711SPaolo Bonzini case 'j': /* Same as i, but sign-extended. */
465576cad711SPaolo Bonzini case 'o':
465631837be3SYongbok Kim delta = (l >> OP_SH_DELTA) & OP_MASK_DELTA;
46574368b29aSLeon Alrae
465876cad711SPaolo Bonzini if (delta & 0x8000)
465976cad711SPaolo Bonzini delta |= ~0xffff;
466076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%d",
466176cad711SPaolo Bonzini delta);
466276cad711SPaolo Bonzini break;
466376cad711SPaolo Bonzini
466476cad711SPaolo Bonzini case 'h':
466576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x",
466676cad711SPaolo Bonzini (unsigned int) ((l >> OP_SH_PREFX)
466776cad711SPaolo Bonzini & OP_MASK_PREFX));
466876cad711SPaolo Bonzini break;
466976cad711SPaolo Bonzini
467076cad711SPaolo Bonzini case 'k':
467176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x",
467276cad711SPaolo Bonzini (unsigned int) ((l >> OP_SH_CACHE)
467376cad711SPaolo Bonzini & OP_MASK_CACHE));
467476cad711SPaolo Bonzini break;
467576cad711SPaolo Bonzini
467676cad711SPaolo Bonzini case 'a':
467776cad711SPaolo Bonzini info->target = (((pc + 4) & ~(bfd_vma) 0x0fffffff)
467876cad711SPaolo Bonzini | (((l >> OP_SH_TARGET) & OP_MASK_TARGET) << 2));
467976cad711SPaolo Bonzini /* For gdb disassembler, force odd address on jalx. */
468076cad711SPaolo Bonzini if (info->flavour == bfd_target_unknown_flavour
468176cad711SPaolo Bonzini && strcmp (opp->name, "jalx") == 0)
468276cad711SPaolo Bonzini info->target |= 1;
468376cad711SPaolo Bonzini (*info->print_address_func) (info->target, info);
468476cad711SPaolo Bonzini break;
468576cad711SPaolo Bonzini
468676cad711SPaolo Bonzini case 'p':
468776cad711SPaolo Bonzini /* Sign extend the displacement. */
468876cad711SPaolo Bonzini delta = (l >> OP_SH_DELTA) & OP_MASK_DELTA;
468976cad711SPaolo Bonzini if (delta & 0x8000)
469076cad711SPaolo Bonzini delta |= ~0xffff;
469176cad711SPaolo Bonzini info->target = (delta << 2) + pc + INSNLEN;
469276cad711SPaolo Bonzini (*info->print_address_func) (info->target, info);
469376cad711SPaolo Bonzini break;
469476cad711SPaolo Bonzini
469576cad711SPaolo Bonzini case 'd':
469676cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
469776cad711SPaolo Bonzini mips_gpr_names[(l >> OP_SH_RD) & OP_MASK_RD]);
469876cad711SPaolo Bonzini break;
469976cad711SPaolo Bonzini
470076cad711SPaolo Bonzini case 'U':
470176cad711SPaolo Bonzini {
470276cad711SPaolo Bonzini /* First check for both rd and rt being equal. */
470376cad711SPaolo Bonzini unsigned int reg = (l >> OP_SH_RD) & OP_MASK_RD;
470476cad711SPaolo Bonzini if (reg == ((l >> OP_SH_RT) & OP_MASK_RT))
470576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
470676cad711SPaolo Bonzini mips_gpr_names[reg]);
470776cad711SPaolo Bonzini else
470876cad711SPaolo Bonzini {
470976cad711SPaolo Bonzini /* If one is zero use the other. */
471076cad711SPaolo Bonzini if (reg == 0)
471176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
471276cad711SPaolo Bonzini mips_gpr_names[(l >> OP_SH_RT) & OP_MASK_RT]);
471376cad711SPaolo Bonzini else if (((l >> OP_SH_RT) & OP_MASK_RT) == 0)
471476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
471576cad711SPaolo Bonzini mips_gpr_names[reg]);
471676cad711SPaolo Bonzini else /* Bogus, result depends on processor. */
471776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s or %s",
471876cad711SPaolo Bonzini mips_gpr_names[reg],
471976cad711SPaolo Bonzini mips_gpr_names[(l >> OP_SH_RT) & OP_MASK_RT]);
472076cad711SPaolo Bonzini }
472176cad711SPaolo Bonzini }
472276cad711SPaolo Bonzini break;
472376cad711SPaolo Bonzini
472476cad711SPaolo Bonzini case 'z':
472576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[0]);
472676cad711SPaolo Bonzini break;
472776cad711SPaolo Bonzini
472876cad711SPaolo Bonzini case '<':
472976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
473076cad711SPaolo Bonzini (l >> OP_SH_SHAMT) & OP_MASK_SHAMT);
473176cad711SPaolo Bonzini break;
473276cad711SPaolo Bonzini
473376cad711SPaolo Bonzini case 'c':
473476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
473576cad711SPaolo Bonzini (l >> OP_SH_CODE) & OP_MASK_CODE);
473676cad711SPaolo Bonzini break;
473776cad711SPaolo Bonzini
473876cad711SPaolo Bonzini case 'q':
473976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
474076cad711SPaolo Bonzini (l >> OP_SH_CODE2) & OP_MASK_CODE2);
474176cad711SPaolo Bonzini break;
474276cad711SPaolo Bonzini
474376cad711SPaolo Bonzini case 'C':
474476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
474576cad711SPaolo Bonzini (l >> OP_SH_COPZ) & OP_MASK_COPZ);
474676cad711SPaolo Bonzini break;
474776cad711SPaolo Bonzini
474876cad711SPaolo Bonzini case 'B':
474976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
475076cad711SPaolo Bonzini
475176cad711SPaolo Bonzini (l >> OP_SH_CODE20) & OP_MASK_CODE20);
475276cad711SPaolo Bonzini break;
475376cad711SPaolo Bonzini
475476cad711SPaolo Bonzini case 'J':
475576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
475676cad711SPaolo Bonzini (l >> OP_SH_CODE19) & OP_MASK_CODE19);
475776cad711SPaolo Bonzini break;
475876cad711SPaolo Bonzini
475976cad711SPaolo Bonzini case 'S':
476076cad711SPaolo Bonzini case 'V':
476176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
476276cad711SPaolo Bonzini mips_fpr_names[(l >> OP_SH_FS) & OP_MASK_FS]);
476376cad711SPaolo Bonzini break;
476476cad711SPaolo Bonzini
476576cad711SPaolo Bonzini case 'T':
476676cad711SPaolo Bonzini case 'W':
476776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
476876cad711SPaolo Bonzini mips_fpr_names[(l >> OP_SH_FT) & OP_MASK_FT]);
476976cad711SPaolo Bonzini break;
477076cad711SPaolo Bonzini
477176cad711SPaolo Bonzini case 'D':
477276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
477376cad711SPaolo Bonzini mips_fpr_names[(l >> OP_SH_FD) & OP_MASK_FD]);
477476cad711SPaolo Bonzini break;
477576cad711SPaolo Bonzini
477676cad711SPaolo Bonzini case 'R':
477776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
477876cad711SPaolo Bonzini mips_fpr_names[(l >> OP_SH_FR) & OP_MASK_FR]);
477976cad711SPaolo Bonzini break;
478076cad711SPaolo Bonzini
478176cad711SPaolo Bonzini case 'E':
478276cad711SPaolo Bonzini /* Coprocessor register for lwcN instructions, et al.
478376cad711SPaolo Bonzini
478476cad711SPaolo Bonzini Note that there is no load/store cp0 instructions, and
478576cad711SPaolo Bonzini that FPU (cp1) instructions disassemble this field using
478676cad711SPaolo Bonzini 'T' format. Therefore, until we gain understanding of
478776cad711SPaolo Bonzini cp2 register names, we can simply print the register
478876cad711SPaolo Bonzini numbers. */
478976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$%ld",
479076cad711SPaolo Bonzini (l >> OP_SH_RT) & OP_MASK_RT);
479176cad711SPaolo Bonzini break;
479276cad711SPaolo Bonzini
479376cad711SPaolo Bonzini case 'G':
479476cad711SPaolo Bonzini /* Coprocessor register for mtcN instructions, et al. Note
479576cad711SPaolo Bonzini that FPU (cp1) instructions disassemble this field using
479676cad711SPaolo Bonzini 'S' format. Therefore, we only need to worry about cp0,
479776cad711SPaolo Bonzini cp2, and cp3. */
479876cad711SPaolo Bonzini op = (l >> OP_SH_OP) & OP_MASK_OP;
479976cad711SPaolo Bonzini if (op == OP_OP_COP0)
480076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
480176cad711SPaolo Bonzini mips_cp0_names[(l >> OP_SH_RD) & OP_MASK_RD]);
480276cad711SPaolo Bonzini else
480376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$%ld",
480476cad711SPaolo Bonzini (l >> OP_SH_RD) & OP_MASK_RD);
480576cad711SPaolo Bonzini break;
480676cad711SPaolo Bonzini
480776cad711SPaolo Bonzini case 'K':
480876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
480976cad711SPaolo Bonzini mips_hwr_names[(l >> OP_SH_RD) & OP_MASK_RD]);
481076cad711SPaolo Bonzini break;
481176cad711SPaolo Bonzini
481276cad711SPaolo Bonzini case 'N':
481376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream,
481476cad711SPaolo Bonzini ((opp->pinfo & (FP_D | FP_S)) != 0
481576cad711SPaolo Bonzini ? "$fcc%ld" : "$cc%ld"),
481676cad711SPaolo Bonzini (l >> OP_SH_BCC) & OP_MASK_BCC);
481776cad711SPaolo Bonzini break;
481876cad711SPaolo Bonzini
481976cad711SPaolo Bonzini case 'M':
482076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$fcc%ld",
482176cad711SPaolo Bonzini (l >> OP_SH_CCC) & OP_MASK_CCC);
482276cad711SPaolo Bonzini break;
482376cad711SPaolo Bonzini
482476cad711SPaolo Bonzini case 'P':
482576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%ld",
482676cad711SPaolo Bonzini (l >> OP_SH_PERFREG) & OP_MASK_PERFREG);
482776cad711SPaolo Bonzini break;
482876cad711SPaolo Bonzini
482976cad711SPaolo Bonzini case 'e':
483076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%ld",
483176cad711SPaolo Bonzini (l >> OP_SH_VECBYTE) & OP_MASK_VECBYTE);
483276cad711SPaolo Bonzini break;
483376cad711SPaolo Bonzini
483476cad711SPaolo Bonzini case '%':
483576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%ld",
483676cad711SPaolo Bonzini (l >> OP_SH_VECALIGN) & OP_MASK_VECALIGN);
483776cad711SPaolo Bonzini break;
483876cad711SPaolo Bonzini
483976cad711SPaolo Bonzini case 'H':
484076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%ld",
484176cad711SPaolo Bonzini (l >> OP_SH_SEL) & OP_MASK_SEL);
484276cad711SPaolo Bonzini break;
484376cad711SPaolo Bonzini
484476cad711SPaolo Bonzini case 'O':
484576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%ld",
484676cad711SPaolo Bonzini (l >> OP_SH_ALN) & OP_MASK_ALN);
484776cad711SPaolo Bonzini break;
484876cad711SPaolo Bonzini
484976cad711SPaolo Bonzini case 'Q':
485076cad711SPaolo Bonzini {
485176cad711SPaolo Bonzini unsigned int vsel = (l >> OP_SH_VSEL) & OP_MASK_VSEL;
485276cad711SPaolo Bonzini
485376cad711SPaolo Bonzini if ((vsel & 0x10) == 0)
485476cad711SPaolo Bonzini {
485576cad711SPaolo Bonzini int fmt;
485676cad711SPaolo Bonzini
485776cad711SPaolo Bonzini vsel &= 0x0f;
485876cad711SPaolo Bonzini for (fmt = 0; fmt < 3; fmt++, vsel >>= 1)
485976cad711SPaolo Bonzini if ((vsel & 1) == 0)
486076cad711SPaolo Bonzini break;
486176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$v%ld[%d]",
486276cad711SPaolo Bonzini (l >> OP_SH_FT) & OP_MASK_FT,
486376cad711SPaolo Bonzini vsel >> 1);
486476cad711SPaolo Bonzini }
486576cad711SPaolo Bonzini else if ((vsel & 0x08) == 0)
486676cad711SPaolo Bonzini {
486776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$v%ld",
486876cad711SPaolo Bonzini (l >> OP_SH_FT) & OP_MASK_FT);
486976cad711SPaolo Bonzini }
487076cad711SPaolo Bonzini else
487176cad711SPaolo Bonzini {
487276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx",
487376cad711SPaolo Bonzini (l >> OP_SH_FT) & OP_MASK_FT);
487476cad711SPaolo Bonzini }
487576cad711SPaolo Bonzini }
487676cad711SPaolo Bonzini break;
487776cad711SPaolo Bonzini
487876cad711SPaolo Bonzini case 'X':
487976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$v%ld",
488076cad711SPaolo Bonzini (l >> OP_SH_FD) & OP_MASK_FD);
488176cad711SPaolo Bonzini break;
488276cad711SPaolo Bonzini
488376cad711SPaolo Bonzini case 'Y':
488476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$v%ld",
488576cad711SPaolo Bonzini (l >> OP_SH_FS) & OP_MASK_FS);
488676cad711SPaolo Bonzini break;
488776cad711SPaolo Bonzini
488876cad711SPaolo Bonzini case 'Z':
488976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$v%ld",
489076cad711SPaolo Bonzini (l >> OP_SH_FT) & OP_MASK_FT);
489176cad711SPaolo Bonzini break;
489276cad711SPaolo Bonzini
489376cad711SPaolo Bonzini default:
489476cad711SPaolo Bonzini /* xgettext:c-format */
489576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream,
4896ca66f1a1SLluís Vilanova "# internal error, undefined modifier(%c)",
489776cad711SPaolo Bonzini *d);
489876cad711SPaolo Bonzini return;
489976cad711SPaolo Bonzini }
490076cad711SPaolo Bonzini }
490176cad711SPaolo Bonzini }
490276cad711SPaolo Bonzini
490376cad711SPaolo Bonzini /* Check if the object uses NewABI conventions. */
490476cad711SPaolo Bonzini #if 0
490576cad711SPaolo Bonzini static int
490676cad711SPaolo Bonzini is_newabi (header)
490776cad711SPaolo Bonzini Elf_Internal_Ehdr *header;
490876cad711SPaolo Bonzini {
490976cad711SPaolo Bonzini /* There are no old-style ABIs which use 64-bit ELF. */
491076cad711SPaolo Bonzini if (header->e_ident[EI_CLASS] == ELFCLASS64)
491176cad711SPaolo Bonzini return 1;
491276cad711SPaolo Bonzini
491376cad711SPaolo Bonzini /* If a 32-bit ELF file, n32 is a new-style ABI. */
491476cad711SPaolo Bonzini if ((header->e_flags & EF_MIPS_ABI2) != 0)
491576cad711SPaolo Bonzini return 1;
491676cad711SPaolo Bonzini
491776cad711SPaolo Bonzini return 0;
491876cad711SPaolo Bonzini }
491976cad711SPaolo Bonzini #endif
492076cad711SPaolo Bonzini
492176cad711SPaolo Bonzini /* Print the mips instruction at address MEMADDR in debugged memory,
492276cad711SPaolo Bonzini on using INFO. Returns length of the instruction, in bytes, which is
492376cad711SPaolo Bonzini always INSNLEN. BIGENDIAN must be 1 if this is big-endian code, 0 if
492476cad711SPaolo Bonzini this is little-endian code. */
492576cad711SPaolo Bonzini
492676cad711SPaolo Bonzini static int
print_insn_mips(bfd_vma memaddr,unsigned long int word,struct disassemble_info * info)492776cad711SPaolo Bonzini print_insn_mips (bfd_vma memaddr,
492876cad711SPaolo Bonzini unsigned long int word,
492976cad711SPaolo Bonzini struct disassemble_info *info)
493076cad711SPaolo Bonzini {
493176cad711SPaolo Bonzini const struct mips_opcode *op;
493276cad711SPaolo Bonzini static bfd_boolean init = 0;
493376cad711SPaolo Bonzini static const struct mips_opcode *mips_hash[OP_MASK_OP + 1];
493476cad711SPaolo Bonzini
493576cad711SPaolo Bonzini /* Build a hash table to shorten the search time. */
493676cad711SPaolo Bonzini if (! init)
493776cad711SPaolo Bonzini {
493876cad711SPaolo Bonzini unsigned int i;
493976cad711SPaolo Bonzini
494076cad711SPaolo Bonzini for (i = 0; i <= OP_MASK_OP; i++)
494176cad711SPaolo Bonzini {
494276cad711SPaolo Bonzini for (op = mips_opcodes; op < &mips_opcodes[NUMOPCODES]; op++)
494376cad711SPaolo Bonzini {
494476cad711SPaolo Bonzini if (op->pinfo == INSN_MACRO
494576cad711SPaolo Bonzini || (no_aliases && (op->pinfo2 & INSN2_ALIAS)))
494676cad711SPaolo Bonzini continue;
494776cad711SPaolo Bonzini if (i == ((op->match >> OP_SH_OP) & OP_MASK_OP))
494876cad711SPaolo Bonzini {
494976cad711SPaolo Bonzini mips_hash[i] = op;
495076cad711SPaolo Bonzini break;
495176cad711SPaolo Bonzini }
495276cad711SPaolo Bonzini }
495376cad711SPaolo Bonzini }
495476cad711SPaolo Bonzini
495576cad711SPaolo Bonzini init = 1;
495676cad711SPaolo Bonzini }
495776cad711SPaolo Bonzini
495876cad711SPaolo Bonzini info->bytes_per_chunk = INSNLEN;
495976cad711SPaolo Bonzini info->display_endian = info->endian;
496076cad711SPaolo Bonzini info->insn_info_valid = 1;
496176cad711SPaolo Bonzini info->branch_delay_insns = 0;
496276cad711SPaolo Bonzini info->data_size = 0;
496376cad711SPaolo Bonzini info->insn_type = dis_nonbranch;
496476cad711SPaolo Bonzini info->target = 0;
496576cad711SPaolo Bonzini info->target2 = 0;
496676cad711SPaolo Bonzini
496776cad711SPaolo Bonzini op = mips_hash[(word >> OP_SH_OP) & OP_MASK_OP];
496876cad711SPaolo Bonzini if (op != NULL)
496976cad711SPaolo Bonzini {
497076cad711SPaolo Bonzini for (; op < &mips_opcodes[NUMOPCODES]; op++)
497176cad711SPaolo Bonzini {
497276cad711SPaolo Bonzini if (op->pinfo != INSN_MACRO
497376cad711SPaolo Bonzini && !(no_aliases && (op->pinfo2 & INSN2_ALIAS))
497476cad711SPaolo Bonzini && (word & op->mask) == op->match)
497576cad711SPaolo Bonzini {
497676cad711SPaolo Bonzini const char *d;
497776cad711SPaolo Bonzini
497876cad711SPaolo Bonzini /* We always allow to disassemble the jalx instruction. */
497976cad711SPaolo Bonzini if (! OPCODE_IS_MEMBER (op, mips_isa, mips_processor)
498076cad711SPaolo Bonzini && strcmp (op->name, "jalx"))
498176cad711SPaolo Bonzini continue;
498276cad711SPaolo Bonzini
498331837be3SYongbok Kim if (strcmp(op->name, "bovc") == 0
498431837be3SYongbok Kim || strcmp(op->name, "bnvc") == 0) {
498531837be3SYongbok Kim if (((word >> OP_SH_RS) & OP_MASK_RS) <
498631837be3SYongbok Kim ((word >> OP_SH_RT) & OP_MASK_RT)) {
498731837be3SYongbok Kim continue;
498831837be3SYongbok Kim }
498931837be3SYongbok Kim }
499031837be3SYongbok Kim if (strcmp(op->name, "bgezc") == 0
499131837be3SYongbok Kim || strcmp(op->name, "bltzc") == 0
499231837be3SYongbok Kim || strcmp(op->name, "bgezalc") == 0
499331837be3SYongbok Kim || strcmp(op->name, "bltzalc") == 0) {
499431837be3SYongbok Kim if (((word >> OP_SH_RS) & OP_MASK_RS) !=
499531837be3SYongbok Kim ((word >> OP_SH_RT) & OP_MASK_RT)) {
499631837be3SYongbok Kim continue;
499731837be3SYongbok Kim }
499831837be3SYongbok Kim }
499931837be3SYongbok Kim
500076cad711SPaolo Bonzini /* Figure out instruction type and branch delay information. */
500176cad711SPaolo Bonzini if ((op->pinfo & INSN_UNCOND_BRANCH_DELAY) != 0)
500276cad711SPaolo Bonzini {
500376cad711SPaolo Bonzini if ((info->insn_type & INSN_WRITE_GPR_31) != 0)
500476cad711SPaolo Bonzini info->insn_type = dis_jsr;
500576cad711SPaolo Bonzini else
500676cad711SPaolo Bonzini info->insn_type = dis_branch;
500776cad711SPaolo Bonzini info->branch_delay_insns = 1;
500876cad711SPaolo Bonzini }
500976cad711SPaolo Bonzini else if ((op->pinfo & (INSN_COND_BRANCH_DELAY
501076cad711SPaolo Bonzini | INSN_COND_BRANCH_LIKELY)) != 0)
501176cad711SPaolo Bonzini {
501276cad711SPaolo Bonzini if ((info->insn_type & INSN_WRITE_GPR_31) != 0)
501376cad711SPaolo Bonzini info->insn_type = dis_condjsr;
501476cad711SPaolo Bonzini else
501576cad711SPaolo Bonzini info->insn_type = dis_condbranch;
501676cad711SPaolo Bonzini info->branch_delay_insns = 1;
501776cad711SPaolo Bonzini }
501876cad711SPaolo Bonzini else if ((op->pinfo & (INSN_STORE_MEMORY
501976cad711SPaolo Bonzini | INSN_LOAD_MEMORY_DELAY)) != 0)
502076cad711SPaolo Bonzini info->insn_type = dis_dref;
502176cad711SPaolo Bonzini
502276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", op->name);
502376cad711SPaolo Bonzini
502476cad711SPaolo Bonzini d = op->args;
502576cad711SPaolo Bonzini if (d != NULL && *d != '\0')
502676cad711SPaolo Bonzini {
502776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "\t");
502876cad711SPaolo Bonzini print_insn_args (d, word, memaddr, info, op);
502976cad711SPaolo Bonzini }
503076cad711SPaolo Bonzini
503176cad711SPaolo Bonzini return INSNLEN;
503276cad711SPaolo Bonzini }
503376cad711SPaolo Bonzini }
503476cad711SPaolo Bonzini }
503576cad711SPaolo Bonzini
503676cad711SPaolo Bonzini /* Handle undefined instructions. */
503776cad711SPaolo Bonzini info->insn_type = dis_noninsn;
503876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%lx", word);
503976cad711SPaolo Bonzini return INSNLEN;
504076cad711SPaolo Bonzini }
504176cad711SPaolo Bonzini
504276cad711SPaolo Bonzini /* In an environment where we do not know the symbol type of the
504376cad711SPaolo Bonzini instruction we are forced to assume that the low order bit of the
504476cad711SPaolo Bonzini instructions' address may mark it as a mips16 instruction. If we
504576cad711SPaolo Bonzini are single stepping, or the pc is within the disassembled function,
504676cad711SPaolo Bonzini this works. Otherwise, we need a clue. Sometimes. */
504776cad711SPaolo Bonzini
504876cad711SPaolo Bonzini static int
_print_insn_mips(bfd_vma memaddr,struct disassemble_info * info,enum bfd_endian endianness)504976cad711SPaolo Bonzini _print_insn_mips (bfd_vma memaddr,
505076cad711SPaolo Bonzini struct disassemble_info *info,
505176cad711SPaolo Bonzini enum bfd_endian endianness)
505276cad711SPaolo Bonzini {
505376cad711SPaolo Bonzini bfd_byte buffer[INSNLEN];
505476cad711SPaolo Bonzini int status;
505576cad711SPaolo Bonzini
505676cad711SPaolo Bonzini set_default_mips_dis_options (info);
505776cad711SPaolo Bonzini parse_mips_dis_options (info->disassembler_options);
505876cad711SPaolo Bonzini
505976cad711SPaolo Bonzini #if 0
506076cad711SPaolo Bonzini #if 1
506176cad711SPaolo Bonzini /* FIXME: If odd address, this is CLEARLY a mips 16 instruction. */
506276cad711SPaolo Bonzini /* Only a few tools will work this way. */
506376cad711SPaolo Bonzini if (memaddr & 0x01)
506476cad711SPaolo Bonzini return print_insn_mips16 (memaddr, info);
506576cad711SPaolo Bonzini #endif
506676cad711SPaolo Bonzini
506776cad711SPaolo Bonzini #if SYMTAB_AVAILABLE
506876cad711SPaolo Bonzini if (info->mach == bfd_mach_mips16
506976cad711SPaolo Bonzini || (info->flavour == bfd_target_elf_flavour
507076cad711SPaolo Bonzini && info->symbols != NULL
507176cad711SPaolo Bonzini && ((*(elf_symbol_type **) info->symbols)->internal_elf_sym.st_other
507276cad711SPaolo Bonzini == STO_MIPS16)))
507376cad711SPaolo Bonzini return print_insn_mips16 (memaddr, info);
507476cad711SPaolo Bonzini #endif
507576cad711SPaolo Bonzini #endif
507676cad711SPaolo Bonzini
507776cad711SPaolo Bonzini status = (*info->read_memory_func) (memaddr, buffer, INSNLEN, info);
507876cad711SPaolo Bonzini if (status == 0)
507976cad711SPaolo Bonzini {
508076cad711SPaolo Bonzini unsigned long insn;
508176cad711SPaolo Bonzini
508276cad711SPaolo Bonzini if (endianness == BFD_ENDIAN_BIG)
508376cad711SPaolo Bonzini insn = (unsigned long) bfd_getb32 (buffer);
508476cad711SPaolo Bonzini else
508576cad711SPaolo Bonzini insn = (unsigned long) bfd_getl32 (buffer);
508676cad711SPaolo Bonzini
508776cad711SPaolo Bonzini return print_insn_mips (memaddr, insn, info);
508876cad711SPaolo Bonzini }
508976cad711SPaolo Bonzini else
509076cad711SPaolo Bonzini {
509176cad711SPaolo Bonzini (*info->memory_error_func) (status, memaddr, info);
509276cad711SPaolo Bonzini return -1;
509376cad711SPaolo Bonzini }
509476cad711SPaolo Bonzini }
509576cad711SPaolo Bonzini
509676cad711SPaolo Bonzini int
print_insn_big_mips(bfd_vma memaddr,struct disassemble_info * info)509776cad711SPaolo Bonzini print_insn_big_mips (bfd_vma memaddr, struct disassemble_info *info)
509876cad711SPaolo Bonzini {
509976cad711SPaolo Bonzini return _print_insn_mips (memaddr, info, BFD_ENDIAN_BIG);
510076cad711SPaolo Bonzini }
510176cad711SPaolo Bonzini
510276cad711SPaolo Bonzini int
print_insn_little_mips(bfd_vma memaddr,struct disassemble_info * info)510376cad711SPaolo Bonzini print_insn_little_mips (bfd_vma memaddr, struct disassemble_info *info)
510476cad711SPaolo Bonzini {
510576cad711SPaolo Bonzini return _print_insn_mips (memaddr, info, BFD_ENDIAN_LITTLE);
510676cad711SPaolo Bonzini }
510776cad711SPaolo Bonzini
510876cad711SPaolo Bonzini /* Disassemble mips16 instructions. */
510976cad711SPaolo Bonzini #if 0
511076cad711SPaolo Bonzini static int
511176cad711SPaolo Bonzini print_insn_mips16 (bfd_vma memaddr, struct disassemble_info *info)
511276cad711SPaolo Bonzini {
511376cad711SPaolo Bonzini int status;
511476cad711SPaolo Bonzini bfd_byte buffer[2];
511576cad711SPaolo Bonzini int length;
511676cad711SPaolo Bonzini int insn;
511776cad711SPaolo Bonzini bfd_boolean use_extend;
511876cad711SPaolo Bonzini int extend = 0;
511976cad711SPaolo Bonzini const struct mips_opcode *op, *opend;
512076cad711SPaolo Bonzini
512176cad711SPaolo Bonzini info->bytes_per_chunk = 2;
512276cad711SPaolo Bonzini info->display_endian = info->endian;
512376cad711SPaolo Bonzini info->insn_info_valid = 1;
512476cad711SPaolo Bonzini info->branch_delay_insns = 0;
512576cad711SPaolo Bonzini info->data_size = 0;
512676cad711SPaolo Bonzini info->insn_type = dis_nonbranch;
512776cad711SPaolo Bonzini info->target = 0;
512876cad711SPaolo Bonzini info->target2 = 0;
512976cad711SPaolo Bonzini
513076cad711SPaolo Bonzini status = (*info->read_memory_func) (memaddr, buffer, 2, info);
513176cad711SPaolo Bonzini if (status != 0)
513276cad711SPaolo Bonzini {
513376cad711SPaolo Bonzini (*info->memory_error_func) (status, memaddr, info);
513476cad711SPaolo Bonzini return -1;
513576cad711SPaolo Bonzini }
513676cad711SPaolo Bonzini
513776cad711SPaolo Bonzini length = 2;
513876cad711SPaolo Bonzini
513976cad711SPaolo Bonzini if (info->endian == BFD_ENDIAN_BIG)
514076cad711SPaolo Bonzini insn = bfd_getb16 (buffer);
514176cad711SPaolo Bonzini else
514276cad711SPaolo Bonzini insn = bfd_getl16 (buffer);
514376cad711SPaolo Bonzini
514476cad711SPaolo Bonzini /* Handle the extend opcode specially. */
514576cad711SPaolo Bonzini use_extend = FALSE;
514676cad711SPaolo Bonzini if ((insn & 0xf800) == 0xf000)
514776cad711SPaolo Bonzini {
514876cad711SPaolo Bonzini use_extend = TRUE;
514976cad711SPaolo Bonzini extend = insn & 0x7ff;
515076cad711SPaolo Bonzini
515176cad711SPaolo Bonzini memaddr += 2;
515276cad711SPaolo Bonzini
515376cad711SPaolo Bonzini status = (*info->read_memory_func) (memaddr, buffer, 2, info);
515476cad711SPaolo Bonzini if (status != 0)
515576cad711SPaolo Bonzini {
515676cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "extend 0x%x",
515776cad711SPaolo Bonzini (unsigned int) extend);
515876cad711SPaolo Bonzini (*info->memory_error_func) (status, memaddr, info);
515976cad711SPaolo Bonzini return -1;
516076cad711SPaolo Bonzini }
516176cad711SPaolo Bonzini
516276cad711SPaolo Bonzini if (info->endian == BFD_ENDIAN_BIG)
516376cad711SPaolo Bonzini insn = bfd_getb16 (buffer);
516476cad711SPaolo Bonzini else
516576cad711SPaolo Bonzini insn = bfd_getl16 (buffer);
516676cad711SPaolo Bonzini
516776cad711SPaolo Bonzini /* Check for an extend opcode followed by an extend opcode. */
516876cad711SPaolo Bonzini if ((insn & 0xf800) == 0xf000)
516976cad711SPaolo Bonzini {
517076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "extend 0x%x",
517176cad711SPaolo Bonzini (unsigned int) extend);
517276cad711SPaolo Bonzini info->insn_type = dis_noninsn;
517376cad711SPaolo Bonzini return length;
517476cad711SPaolo Bonzini }
517576cad711SPaolo Bonzini
517676cad711SPaolo Bonzini length += 2;
517776cad711SPaolo Bonzini }
517876cad711SPaolo Bonzini
517976cad711SPaolo Bonzini /* FIXME: Should probably use a hash table on the major opcode here. */
518076cad711SPaolo Bonzini
518176cad711SPaolo Bonzini opend = mips16_opcodes + bfd_mips16_num_opcodes;
518276cad711SPaolo Bonzini for (op = mips16_opcodes; op < opend; op++)
518376cad711SPaolo Bonzini {
518476cad711SPaolo Bonzini if (op->pinfo != INSN_MACRO
518576cad711SPaolo Bonzini && !(no_aliases && (op->pinfo2 & INSN2_ALIAS))
518676cad711SPaolo Bonzini && (insn & op->mask) == op->match)
518776cad711SPaolo Bonzini {
518876cad711SPaolo Bonzini const char *s;
518976cad711SPaolo Bonzini
519076cad711SPaolo Bonzini if (strchr (op->args, 'a') != NULL)
519176cad711SPaolo Bonzini {
519276cad711SPaolo Bonzini if (use_extend)
519376cad711SPaolo Bonzini {
519476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "extend 0x%x",
519576cad711SPaolo Bonzini (unsigned int) extend);
519676cad711SPaolo Bonzini info->insn_type = dis_noninsn;
519776cad711SPaolo Bonzini return length - 2;
519876cad711SPaolo Bonzini }
519976cad711SPaolo Bonzini
520076cad711SPaolo Bonzini use_extend = FALSE;
520176cad711SPaolo Bonzini
520276cad711SPaolo Bonzini memaddr += 2;
520376cad711SPaolo Bonzini
520476cad711SPaolo Bonzini status = (*info->read_memory_func) (memaddr, buffer, 2,
520576cad711SPaolo Bonzini info);
520676cad711SPaolo Bonzini if (status == 0)
520776cad711SPaolo Bonzini {
520876cad711SPaolo Bonzini use_extend = TRUE;
520976cad711SPaolo Bonzini if (info->endian == BFD_ENDIAN_BIG)
521076cad711SPaolo Bonzini extend = bfd_getb16 (buffer);
521176cad711SPaolo Bonzini else
521276cad711SPaolo Bonzini extend = bfd_getl16 (buffer);
521376cad711SPaolo Bonzini length += 2;
521476cad711SPaolo Bonzini }
521576cad711SPaolo Bonzini }
521676cad711SPaolo Bonzini
521776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", op->name);
521876cad711SPaolo Bonzini if (op->args[0] != '\0')
521976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "\t");
522076cad711SPaolo Bonzini
522176cad711SPaolo Bonzini for (s = op->args; *s != '\0'; s++)
522276cad711SPaolo Bonzini {
522376cad711SPaolo Bonzini if (*s == ','
522476cad711SPaolo Bonzini && s[1] == 'w'
522576cad711SPaolo Bonzini && (((insn >> MIPS16OP_SH_RX) & MIPS16OP_MASK_RX)
522676cad711SPaolo Bonzini == ((insn >> MIPS16OP_SH_RY) & MIPS16OP_MASK_RY)))
522776cad711SPaolo Bonzini {
522876cad711SPaolo Bonzini /* Skip the register and the comma. */
522976cad711SPaolo Bonzini ++s;
523076cad711SPaolo Bonzini continue;
523176cad711SPaolo Bonzini }
523276cad711SPaolo Bonzini if (*s == ','
523376cad711SPaolo Bonzini && s[1] == 'v'
523476cad711SPaolo Bonzini && (((insn >> MIPS16OP_SH_RZ) & MIPS16OP_MASK_RZ)
523576cad711SPaolo Bonzini == ((insn >> MIPS16OP_SH_RX) & MIPS16OP_MASK_RX)))
523676cad711SPaolo Bonzini {
523776cad711SPaolo Bonzini /* Skip the register and the comma. */
523876cad711SPaolo Bonzini ++s;
523976cad711SPaolo Bonzini continue;
524076cad711SPaolo Bonzini }
524176cad711SPaolo Bonzini print_mips16_insn_arg (*s, op, insn, use_extend, extend, memaddr,
524276cad711SPaolo Bonzini info);
524376cad711SPaolo Bonzini }
524476cad711SPaolo Bonzini
524576cad711SPaolo Bonzini if ((op->pinfo & INSN_UNCOND_BRANCH_DELAY) != 0)
524676cad711SPaolo Bonzini {
524776cad711SPaolo Bonzini info->branch_delay_insns = 1;
524876cad711SPaolo Bonzini if (info->insn_type != dis_jsr)
524976cad711SPaolo Bonzini info->insn_type = dis_branch;
525076cad711SPaolo Bonzini }
525176cad711SPaolo Bonzini
525276cad711SPaolo Bonzini return length;
525376cad711SPaolo Bonzini }
525476cad711SPaolo Bonzini }
525576cad711SPaolo Bonzini
525676cad711SPaolo Bonzini if (use_extend)
525776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x", extend | 0xf000);
525876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "0x%x", insn);
525976cad711SPaolo Bonzini info->insn_type = dis_noninsn;
526076cad711SPaolo Bonzini
526176cad711SPaolo Bonzini return length;
526276cad711SPaolo Bonzini }
526376cad711SPaolo Bonzini
526476cad711SPaolo Bonzini /* Disassemble an operand for a mips16 instruction. */
526576cad711SPaolo Bonzini
526676cad711SPaolo Bonzini static void
526776cad711SPaolo Bonzini print_mips16_insn_arg (char type,
526876cad711SPaolo Bonzini const struct mips_opcode *op,
526976cad711SPaolo Bonzini int l,
527076cad711SPaolo Bonzini bfd_boolean use_extend,
527176cad711SPaolo Bonzini int extend,
527276cad711SPaolo Bonzini bfd_vma memaddr,
527376cad711SPaolo Bonzini struct disassemble_info *info)
527476cad711SPaolo Bonzini {
527576cad711SPaolo Bonzini switch (type)
527676cad711SPaolo Bonzini {
527776cad711SPaolo Bonzini case ',':
527876cad711SPaolo Bonzini case '(':
527976cad711SPaolo Bonzini case ')':
528076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%c", type);
528176cad711SPaolo Bonzini break;
528276cad711SPaolo Bonzini
528376cad711SPaolo Bonzini case 'y':
528476cad711SPaolo Bonzini case 'w':
528576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
528676cad711SPaolo Bonzini mips16_reg_names(((l >> MIPS16OP_SH_RY)
528776cad711SPaolo Bonzini & MIPS16OP_MASK_RY)));
528876cad711SPaolo Bonzini break;
528976cad711SPaolo Bonzini
529076cad711SPaolo Bonzini case 'x':
529176cad711SPaolo Bonzini case 'v':
529276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
529376cad711SPaolo Bonzini mips16_reg_names(((l >> MIPS16OP_SH_RX)
529476cad711SPaolo Bonzini & MIPS16OP_MASK_RX)));
529576cad711SPaolo Bonzini break;
529676cad711SPaolo Bonzini
529776cad711SPaolo Bonzini case 'z':
529876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
529976cad711SPaolo Bonzini mips16_reg_names(((l >> MIPS16OP_SH_RZ)
530076cad711SPaolo Bonzini & MIPS16OP_MASK_RZ)));
530176cad711SPaolo Bonzini break;
530276cad711SPaolo Bonzini
530376cad711SPaolo Bonzini case 'Z':
530476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
530576cad711SPaolo Bonzini mips16_reg_names(((l >> MIPS16OP_SH_MOVE32Z)
530676cad711SPaolo Bonzini & MIPS16OP_MASK_MOVE32Z)));
530776cad711SPaolo Bonzini break;
530876cad711SPaolo Bonzini
530976cad711SPaolo Bonzini case '0':
531076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[0]);
531176cad711SPaolo Bonzini break;
531276cad711SPaolo Bonzini
531376cad711SPaolo Bonzini case 'S':
531476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[29]);
531576cad711SPaolo Bonzini break;
531676cad711SPaolo Bonzini
531776cad711SPaolo Bonzini case 'P':
531876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "$pc");
531976cad711SPaolo Bonzini break;
532076cad711SPaolo Bonzini
532176cad711SPaolo Bonzini case 'R':
532276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[31]);
532376cad711SPaolo Bonzini break;
532476cad711SPaolo Bonzini
532576cad711SPaolo Bonzini case 'X':
532676cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
532776cad711SPaolo Bonzini mips_gpr_names[((l >> MIPS16OP_SH_REGR32)
532876cad711SPaolo Bonzini & MIPS16OP_MASK_REGR32)]);
532976cad711SPaolo Bonzini break;
533076cad711SPaolo Bonzini
533176cad711SPaolo Bonzini case 'Y':
533276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s",
533376cad711SPaolo Bonzini mips_gpr_names[MIPS16OP_EXTRACT_REG32R (l)]);
533476cad711SPaolo Bonzini break;
533576cad711SPaolo Bonzini
533676cad711SPaolo Bonzini case '<':
533776cad711SPaolo Bonzini case '>':
533876cad711SPaolo Bonzini case '[':
533976cad711SPaolo Bonzini case ']':
534076cad711SPaolo Bonzini case '4':
534176cad711SPaolo Bonzini case '5':
534276cad711SPaolo Bonzini case 'H':
534376cad711SPaolo Bonzini case 'W':
534476cad711SPaolo Bonzini case 'D':
534576cad711SPaolo Bonzini case 'j':
534676cad711SPaolo Bonzini case '6':
534776cad711SPaolo Bonzini case '8':
534876cad711SPaolo Bonzini case 'V':
534976cad711SPaolo Bonzini case 'C':
535076cad711SPaolo Bonzini case 'U':
535176cad711SPaolo Bonzini case 'k':
535276cad711SPaolo Bonzini case 'K':
535376cad711SPaolo Bonzini case 'p':
535476cad711SPaolo Bonzini case 'q':
535576cad711SPaolo Bonzini case 'A':
535676cad711SPaolo Bonzini case 'B':
535776cad711SPaolo Bonzini case 'E':
535876cad711SPaolo Bonzini {
535976cad711SPaolo Bonzini int immed, nbits, shift, signedp, extbits, pcrel, extu, branch;
536076cad711SPaolo Bonzini
536176cad711SPaolo Bonzini shift = 0;
536276cad711SPaolo Bonzini signedp = 0;
536376cad711SPaolo Bonzini extbits = 16;
536476cad711SPaolo Bonzini pcrel = 0;
536576cad711SPaolo Bonzini extu = 0;
536676cad711SPaolo Bonzini branch = 0;
536776cad711SPaolo Bonzini switch (type)
536876cad711SPaolo Bonzini {
536976cad711SPaolo Bonzini case '<':
537076cad711SPaolo Bonzini nbits = 3;
537176cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_RZ) & MIPS16OP_MASK_RZ;
537276cad711SPaolo Bonzini extbits = 5;
537376cad711SPaolo Bonzini extu = 1;
537476cad711SPaolo Bonzini break;
537576cad711SPaolo Bonzini case '>':
537676cad711SPaolo Bonzini nbits = 3;
537776cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_RX) & MIPS16OP_MASK_RX;
537876cad711SPaolo Bonzini extbits = 5;
537976cad711SPaolo Bonzini extu = 1;
538076cad711SPaolo Bonzini break;
538176cad711SPaolo Bonzini case '[':
538276cad711SPaolo Bonzini nbits = 3;
538376cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_RZ) & MIPS16OP_MASK_RZ;
538476cad711SPaolo Bonzini extbits = 6;
538576cad711SPaolo Bonzini extu = 1;
538676cad711SPaolo Bonzini break;
538776cad711SPaolo Bonzini case ']':
538876cad711SPaolo Bonzini nbits = 3;
538976cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_RX) & MIPS16OP_MASK_RX;
539076cad711SPaolo Bonzini extbits = 6;
539176cad711SPaolo Bonzini extu = 1;
539276cad711SPaolo Bonzini break;
539376cad711SPaolo Bonzini case '4':
539476cad711SPaolo Bonzini nbits = 4;
539576cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM4) & MIPS16OP_MASK_IMM4;
539676cad711SPaolo Bonzini signedp = 1;
539776cad711SPaolo Bonzini extbits = 15;
539876cad711SPaolo Bonzini break;
539976cad711SPaolo Bonzini case '5':
540076cad711SPaolo Bonzini nbits = 5;
540176cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
540276cad711SPaolo Bonzini info->insn_type = dis_dref;
540376cad711SPaolo Bonzini info->data_size = 1;
540476cad711SPaolo Bonzini break;
540576cad711SPaolo Bonzini case 'H':
540676cad711SPaolo Bonzini nbits = 5;
540776cad711SPaolo Bonzini shift = 1;
540876cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
540976cad711SPaolo Bonzini info->insn_type = dis_dref;
541076cad711SPaolo Bonzini info->data_size = 2;
541176cad711SPaolo Bonzini break;
541276cad711SPaolo Bonzini case 'W':
541376cad711SPaolo Bonzini nbits = 5;
541476cad711SPaolo Bonzini shift = 2;
541576cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
541676cad711SPaolo Bonzini if ((op->pinfo & MIPS16_INSN_READ_PC) == 0
541776cad711SPaolo Bonzini && (op->pinfo & MIPS16_INSN_READ_SP) == 0)
541876cad711SPaolo Bonzini {
541976cad711SPaolo Bonzini info->insn_type = dis_dref;
542076cad711SPaolo Bonzini info->data_size = 4;
542176cad711SPaolo Bonzini }
542276cad711SPaolo Bonzini break;
542376cad711SPaolo Bonzini case 'D':
542476cad711SPaolo Bonzini nbits = 5;
542576cad711SPaolo Bonzini shift = 3;
542676cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
542776cad711SPaolo Bonzini info->insn_type = dis_dref;
542876cad711SPaolo Bonzini info->data_size = 8;
542976cad711SPaolo Bonzini break;
543076cad711SPaolo Bonzini case 'j':
543176cad711SPaolo Bonzini nbits = 5;
543276cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
543376cad711SPaolo Bonzini signedp = 1;
543476cad711SPaolo Bonzini break;
543576cad711SPaolo Bonzini case '6':
543676cad711SPaolo Bonzini nbits = 6;
543776cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM6) & MIPS16OP_MASK_IMM6;
543876cad711SPaolo Bonzini break;
543976cad711SPaolo Bonzini case '8':
544076cad711SPaolo Bonzini nbits = 8;
544176cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
544276cad711SPaolo Bonzini break;
544376cad711SPaolo Bonzini case 'V':
544476cad711SPaolo Bonzini nbits = 8;
544576cad711SPaolo Bonzini shift = 2;
544676cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
544776cad711SPaolo Bonzini /* FIXME: This might be lw, or it might be addiu to $sp or
544876cad711SPaolo Bonzini $pc. We assume it's load. */
544976cad711SPaolo Bonzini info->insn_type = dis_dref;
545076cad711SPaolo Bonzini info->data_size = 4;
545176cad711SPaolo Bonzini break;
545276cad711SPaolo Bonzini case 'C':
545376cad711SPaolo Bonzini nbits = 8;
545476cad711SPaolo Bonzini shift = 3;
545576cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
545676cad711SPaolo Bonzini info->insn_type = dis_dref;
545776cad711SPaolo Bonzini info->data_size = 8;
545876cad711SPaolo Bonzini break;
545976cad711SPaolo Bonzini case 'U':
546076cad711SPaolo Bonzini nbits = 8;
546176cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
546276cad711SPaolo Bonzini extu = 1;
546376cad711SPaolo Bonzini break;
546476cad711SPaolo Bonzini case 'k':
546576cad711SPaolo Bonzini nbits = 8;
546676cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
546776cad711SPaolo Bonzini signedp = 1;
546876cad711SPaolo Bonzini break;
546976cad711SPaolo Bonzini case 'K':
547076cad711SPaolo Bonzini nbits = 8;
547176cad711SPaolo Bonzini shift = 3;
547276cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
547376cad711SPaolo Bonzini signedp = 1;
547476cad711SPaolo Bonzini break;
547576cad711SPaolo Bonzini case 'p':
547676cad711SPaolo Bonzini nbits = 8;
547776cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
547876cad711SPaolo Bonzini signedp = 1;
547976cad711SPaolo Bonzini pcrel = 1;
548076cad711SPaolo Bonzini branch = 1;
548176cad711SPaolo Bonzini info->insn_type = dis_condbranch;
548276cad711SPaolo Bonzini break;
548376cad711SPaolo Bonzini case 'q':
548476cad711SPaolo Bonzini nbits = 11;
548576cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM11) & MIPS16OP_MASK_IMM11;
548676cad711SPaolo Bonzini signedp = 1;
548776cad711SPaolo Bonzini pcrel = 1;
548876cad711SPaolo Bonzini branch = 1;
548976cad711SPaolo Bonzini info->insn_type = dis_branch;
549076cad711SPaolo Bonzini break;
549176cad711SPaolo Bonzini case 'A':
549276cad711SPaolo Bonzini nbits = 8;
549376cad711SPaolo Bonzini shift = 2;
549476cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM8) & MIPS16OP_MASK_IMM8;
549576cad711SPaolo Bonzini pcrel = 1;
549676cad711SPaolo Bonzini /* FIXME: This can be lw or la. We assume it is lw. */
549776cad711SPaolo Bonzini info->insn_type = dis_dref;
549876cad711SPaolo Bonzini info->data_size = 4;
549976cad711SPaolo Bonzini break;
550076cad711SPaolo Bonzini case 'B':
550176cad711SPaolo Bonzini nbits = 5;
550276cad711SPaolo Bonzini shift = 3;
550376cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
550476cad711SPaolo Bonzini pcrel = 1;
550576cad711SPaolo Bonzini info->insn_type = dis_dref;
550676cad711SPaolo Bonzini info->data_size = 8;
550776cad711SPaolo Bonzini break;
550876cad711SPaolo Bonzini case 'E':
550976cad711SPaolo Bonzini nbits = 5;
551076cad711SPaolo Bonzini shift = 2;
551176cad711SPaolo Bonzini immed = (l >> MIPS16OP_SH_IMM5) & MIPS16OP_MASK_IMM5;
551276cad711SPaolo Bonzini pcrel = 1;
551376cad711SPaolo Bonzini break;
551476cad711SPaolo Bonzini default:
551576cad711SPaolo Bonzini abort ();
551676cad711SPaolo Bonzini }
551776cad711SPaolo Bonzini
551876cad711SPaolo Bonzini if (! use_extend)
551976cad711SPaolo Bonzini {
552076cad711SPaolo Bonzini if (signedp && immed >= (1 << (nbits - 1)))
552176cad711SPaolo Bonzini immed -= 1 << nbits;
552276cad711SPaolo Bonzini immed <<= shift;
552376cad711SPaolo Bonzini if ((type == '<' || type == '>' || type == '[' || type == ']')
552476cad711SPaolo Bonzini && immed == 0)
552576cad711SPaolo Bonzini immed = 8;
552676cad711SPaolo Bonzini }
552776cad711SPaolo Bonzini else
552876cad711SPaolo Bonzini {
552976cad711SPaolo Bonzini if (extbits == 16)
553076cad711SPaolo Bonzini immed |= ((extend & 0x1f) << 11) | (extend & 0x7e0);
553176cad711SPaolo Bonzini else if (extbits == 15)
553276cad711SPaolo Bonzini immed |= ((extend & 0xf) << 11) | (extend & 0x7f0);
553376cad711SPaolo Bonzini else
553476cad711SPaolo Bonzini immed = ((extend >> 6) & 0x1f) | (extend & 0x20);
553576cad711SPaolo Bonzini immed &= (1 << extbits) - 1;
553676cad711SPaolo Bonzini if (! extu && immed >= (1 << (extbits - 1)))
553776cad711SPaolo Bonzini immed -= 1 << extbits;
553876cad711SPaolo Bonzini }
553976cad711SPaolo Bonzini
554076cad711SPaolo Bonzini if (! pcrel)
554176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%d", immed);
554276cad711SPaolo Bonzini else
554376cad711SPaolo Bonzini {
554476cad711SPaolo Bonzini bfd_vma baseaddr;
554576cad711SPaolo Bonzini
554676cad711SPaolo Bonzini if (branch)
554776cad711SPaolo Bonzini {
554876cad711SPaolo Bonzini immed *= 2;
554976cad711SPaolo Bonzini baseaddr = memaddr + 2;
555076cad711SPaolo Bonzini }
555176cad711SPaolo Bonzini else if (use_extend)
555276cad711SPaolo Bonzini baseaddr = memaddr - 2;
555376cad711SPaolo Bonzini else
555476cad711SPaolo Bonzini {
555576cad711SPaolo Bonzini int status;
555676cad711SPaolo Bonzini bfd_byte buffer[2];
555776cad711SPaolo Bonzini
555876cad711SPaolo Bonzini baseaddr = memaddr;
555976cad711SPaolo Bonzini
556076cad711SPaolo Bonzini /* If this instruction is in the delay slot of a jr
556176cad711SPaolo Bonzini instruction, the base address is the address of the
556276cad711SPaolo Bonzini jr instruction. If it is in the delay slot of jalr
556376cad711SPaolo Bonzini instruction, the base address is the address of the
556476cad711SPaolo Bonzini jalr instruction. This test is unreliable: we have
556576cad711SPaolo Bonzini no way of knowing whether the previous word is
556676cad711SPaolo Bonzini instruction or data. */
556776cad711SPaolo Bonzini status = (*info->read_memory_func) (memaddr - 4, buffer, 2,
556876cad711SPaolo Bonzini info);
556976cad711SPaolo Bonzini if (status == 0
557076cad711SPaolo Bonzini && (((info->endian == BFD_ENDIAN_BIG
557176cad711SPaolo Bonzini ? bfd_getb16 (buffer)
557276cad711SPaolo Bonzini : bfd_getl16 (buffer))
557376cad711SPaolo Bonzini & 0xf800) == 0x1800))
557476cad711SPaolo Bonzini baseaddr = memaddr - 4;
557576cad711SPaolo Bonzini else
557676cad711SPaolo Bonzini {
557776cad711SPaolo Bonzini status = (*info->read_memory_func) (memaddr - 2, buffer,
557876cad711SPaolo Bonzini 2, info);
557976cad711SPaolo Bonzini if (status == 0
558076cad711SPaolo Bonzini && (((info->endian == BFD_ENDIAN_BIG
558176cad711SPaolo Bonzini ? bfd_getb16 (buffer)
558276cad711SPaolo Bonzini : bfd_getl16 (buffer))
558376cad711SPaolo Bonzini & 0xf81f) == 0xe800))
558476cad711SPaolo Bonzini baseaddr = memaddr - 2;
558576cad711SPaolo Bonzini }
558676cad711SPaolo Bonzini }
558776cad711SPaolo Bonzini info->target = (baseaddr & ~((1 << shift) - 1)) + immed;
558876cad711SPaolo Bonzini if (pcrel && branch
558976cad711SPaolo Bonzini && info->flavour == bfd_target_unknown_flavour)
559076cad711SPaolo Bonzini /* For gdb disassembler, maintain odd address. */
559176cad711SPaolo Bonzini info->target |= 1;
559276cad711SPaolo Bonzini (*info->print_address_func) (info->target, info);
559376cad711SPaolo Bonzini }
559476cad711SPaolo Bonzini }
559576cad711SPaolo Bonzini break;
559676cad711SPaolo Bonzini
559776cad711SPaolo Bonzini case 'a':
559876cad711SPaolo Bonzini {
559976cad711SPaolo Bonzini int jalx = l & 0x400;
560076cad711SPaolo Bonzini
560176cad711SPaolo Bonzini if (! use_extend)
560276cad711SPaolo Bonzini extend = 0;
560376cad711SPaolo Bonzini l = ((l & 0x1f) << 23) | ((l & 0x3e0) << 13) | (extend << 2);
560476cad711SPaolo Bonzini if (!jalx && info->flavour == bfd_target_unknown_flavour)
560576cad711SPaolo Bonzini /* For gdb disassembler, maintain odd address. */
560676cad711SPaolo Bonzini l |= 1;
560776cad711SPaolo Bonzini }
560876cad711SPaolo Bonzini info->target = ((memaddr + 4) & ~(bfd_vma) 0x0fffffff) | l;
560976cad711SPaolo Bonzini (*info->print_address_func) (info->target, info);
561076cad711SPaolo Bonzini info->insn_type = dis_jsr;
561176cad711SPaolo Bonzini info->branch_delay_insns = 1;
561276cad711SPaolo Bonzini break;
561376cad711SPaolo Bonzini
561476cad711SPaolo Bonzini case 'l':
561576cad711SPaolo Bonzini case 'L':
561676cad711SPaolo Bonzini {
561776cad711SPaolo Bonzini int need_comma, amask, smask;
561876cad711SPaolo Bonzini
561976cad711SPaolo Bonzini need_comma = 0;
562076cad711SPaolo Bonzini
562176cad711SPaolo Bonzini l = (l >> MIPS16OP_SH_IMM6) & MIPS16OP_MASK_IMM6;
562276cad711SPaolo Bonzini
562376cad711SPaolo Bonzini amask = (l >> 3) & 7;
562476cad711SPaolo Bonzini
562576cad711SPaolo Bonzini if (amask > 0 && amask < 5)
562676cad711SPaolo Bonzini {
562776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[4]);
562876cad711SPaolo Bonzini if (amask > 1)
562976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "-%s",
563076cad711SPaolo Bonzini mips_gpr_names[amask + 3]);
563176cad711SPaolo Bonzini need_comma = 1;
563276cad711SPaolo Bonzini }
563376cad711SPaolo Bonzini
563476cad711SPaolo Bonzini smask = (l >> 1) & 3;
563576cad711SPaolo Bonzini if (smask == 3)
563676cad711SPaolo Bonzini {
563776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s??",
563876cad711SPaolo Bonzini need_comma ? "," : "");
563976cad711SPaolo Bonzini need_comma = 1;
564076cad711SPaolo Bonzini }
564176cad711SPaolo Bonzini else if (smask > 0)
564276cad711SPaolo Bonzini {
564376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s%s",
564476cad711SPaolo Bonzini need_comma ? "," : "",
564576cad711SPaolo Bonzini mips_gpr_names[16]);
564676cad711SPaolo Bonzini if (smask > 1)
564776cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "-%s",
564876cad711SPaolo Bonzini mips_gpr_names[smask + 15]);
564976cad711SPaolo Bonzini need_comma = 1;
565076cad711SPaolo Bonzini }
565176cad711SPaolo Bonzini
565276cad711SPaolo Bonzini if (l & 1)
565376cad711SPaolo Bonzini {
565476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s%s",
565576cad711SPaolo Bonzini need_comma ? "," : "",
565676cad711SPaolo Bonzini mips_gpr_names[31]);
565776cad711SPaolo Bonzini need_comma = 1;
565876cad711SPaolo Bonzini }
565976cad711SPaolo Bonzini
566076cad711SPaolo Bonzini if (amask == 5 || amask == 6)
566176cad711SPaolo Bonzini {
566276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s$f0",
566376cad711SPaolo Bonzini need_comma ? "," : "");
566476cad711SPaolo Bonzini if (amask == 6)
566576cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "-$f1");
566676cad711SPaolo Bonzini }
566776cad711SPaolo Bonzini }
566876cad711SPaolo Bonzini break;
566976cad711SPaolo Bonzini
567076cad711SPaolo Bonzini case 'm':
567176cad711SPaolo Bonzini case 'M':
567276cad711SPaolo Bonzini /* MIPS16e save/restore. */
567376cad711SPaolo Bonzini {
567476cad711SPaolo Bonzini int need_comma = 0;
567576cad711SPaolo Bonzini int amask, args, statics;
567676cad711SPaolo Bonzini int nsreg, smask;
567776cad711SPaolo Bonzini int framesz;
567876cad711SPaolo Bonzini int i, j;
567976cad711SPaolo Bonzini
568076cad711SPaolo Bonzini l = l & 0x7f;
568176cad711SPaolo Bonzini if (use_extend)
568276cad711SPaolo Bonzini l |= extend << 16;
568376cad711SPaolo Bonzini
568476cad711SPaolo Bonzini amask = (l >> 16) & 0xf;
568576cad711SPaolo Bonzini if (amask == MIPS16_ALL_ARGS)
568676cad711SPaolo Bonzini {
568776cad711SPaolo Bonzini args = 4;
568876cad711SPaolo Bonzini statics = 0;
568976cad711SPaolo Bonzini }
569076cad711SPaolo Bonzini else if (amask == MIPS16_ALL_STATICS)
569176cad711SPaolo Bonzini {
569276cad711SPaolo Bonzini args = 0;
569376cad711SPaolo Bonzini statics = 4;
569476cad711SPaolo Bonzini }
569576cad711SPaolo Bonzini else
569676cad711SPaolo Bonzini {
569776cad711SPaolo Bonzini args = amask >> 2;
569876cad711SPaolo Bonzini statics = amask & 3;
569976cad711SPaolo Bonzini }
570076cad711SPaolo Bonzini
570176cad711SPaolo Bonzini if (args > 0) {
570276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", mips_gpr_names[4]);
570376cad711SPaolo Bonzini if (args > 1)
570476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "-%s",
570576cad711SPaolo Bonzini mips_gpr_names[4 + args - 1]);
570676cad711SPaolo Bonzini need_comma = 1;
570776cad711SPaolo Bonzini }
570876cad711SPaolo Bonzini
570976cad711SPaolo Bonzini framesz = (((l >> 16) & 0xf0) | (l & 0x0f)) * 8;
571076cad711SPaolo Bonzini if (framesz == 0 && !use_extend)
571176cad711SPaolo Bonzini framesz = 128;
571276cad711SPaolo Bonzini
571376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s%d",
571476cad711SPaolo Bonzini need_comma ? "," : "",
571576cad711SPaolo Bonzini framesz);
571676cad711SPaolo Bonzini
571776cad711SPaolo Bonzini if (l & 0x40) /* $ra */
571876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, ",%s", mips_gpr_names[31]);
571976cad711SPaolo Bonzini
572076cad711SPaolo Bonzini nsreg = (l >> 24) & 0x7;
572176cad711SPaolo Bonzini smask = 0;
572276cad711SPaolo Bonzini if (l & 0x20) /* $s0 */
572376cad711SPaolo Bonzini smask |= 1 << 0;
572476cad711SPaolo Bonzini if (l & 0x10) /* $s1 */
572576cad711SPaolo Bonzini smask |= 1 << 1;
572676cad711SPaolo Bonzini if (nsreg > 0) /* $s2-$s8 */
572776cad711SPaolo Bonzini smask |= ((1 << nsreg) - 1) << 2;
572876cad711SPaolo Bonzini
572976cad711SPaolo Bonzini /* Find first set static reg bit. */
573076cad711SPaolo Bonzini for (i = 0; i < 9; i++)
573176cad711SPaolo Bonzini {
573276cad711SPaolo Bonzini if (smask & (1 << i))
573376cad711SPaolo Bonzini {
573476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, ",%s",
573576cad711SPaolo Bonzini mips_gpr_names[i == 8 ? 30 : (16 + i)]);
573676cad711SPaolo Bonzini /* Skip over string of set bits. */
573776cad711SPaolo Bonzini for (j = i; smask & (2 << j); j++)
573876cad711SPaolo Bonzini continue;
573976cad711SPaolo Bonzini if (j > i)
574076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "-%s",
574176cad711SPaolo Bonzini mips_gpr_names[j == 8 ? 30 : (16 + j)]);
574276cad711SPaolo Bonzini i = j + 1;
574376cad711SPaolo Bonzini }
574476cad711SPaolo Bonzini }
574576cad711SPaolo Bonzini
574676cad711SPaolo Bonzini /* Statics $ax - $a3. */
574776cad711SPaolo Bonzini if (statics == 1)
574876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, ",%s", mips_gpr_names[7]);
574976cad711SPaolo Bonzini else if (statics > 0)
575076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, ",%s-%s",
575176cad711SPaolo Bonzini mips_gpr_names[7 - statics + 1],
575276cad711SPaolo Bonzini mips_gpr_names[7]);
575376cad711SPaolo Bonzini }
575476cad711SPaolo Bonzini break;
575576cad711SPaolo Bonzini
575676cad711SPaolo Bonzini default:
575776cad711SPaolo Bonzini /* xgettext:c-format */
575876cad711SPaolo Bonzini (*info->fprintf_func)
575976cad711SPaolo Bonzini (info->stream,
5760ca66f1a1SLluís Vilanova "# internal disassembler error, unrecognised modifier (%c)",
576176cad711SPaolo Bonzini type);
576276cad711SPaolo Bonzini abort ();
576376cad711SPaolo Bonzini }
576476cad711SPaolo Bonzini }
576576cad711SPaolo Bonzini
576676cad711SPaolo Bonzini void
576776cad711SPaolo Bonzini print_mips_disassembler_options (FILE *stream)
576876cad711SPaolo Bonzini {
576976cad711SPaolo Bonzini unsigned int i;
577076cad711SPaolo Bonzini
5771ca66f1a1SLluís Vilanova fprintf (stream, "\n\
577276cad711SPaolo Bonzini The following MIPS specific disassembler options are supported for use\n\
5773ca66f1a1SLluís Vilanova with the -M switch (multiple options should be separated by commas):\n");
577476cad711SPaolo Bonzini
5775ca66f1a1SLluís Vilanova fprintf (stream, "\n\
577676cad711SPaolo Bonzini gpr-names=ABI Print GPR names according to specified ABI.\n\
5777ca66f1a1SLluís Vilanova Default: based on binary being disassembled.\n");
577876cad711SPaolo Bonzini
5779ca66f1a1SLluís Vilanova fprintf (stream, "\n\
578076cad711SPaolo Bonzini fpr-names=ABI Print FPR names according to specified ABI.\n\
5781ca66f1a1SLluís Vilanova Default: numeric.\n");
578276cad711SPaolo Bonzini
5783ca66f1a1SLluís Vilanova fprintf (stream, "\n\
578476cad711SPaolo Bonzini cp0-names=ARCH Print CP0 register names according to\n\
578576cad711SPaolo Bonzini specified architecture.\n\
5786ca66f1a1SLluís Vilanova Default: based on binary being disassembled.\n");
578776cad711SPaolo Bonzini
5788ca66f1a1SLluís Vilanova fprintf (stream, "\n\
578976cad711SPaolo Bonzini hwr-names=ARCH Print HWR names according to specified\n\
579076cad711SPaolo Bonzini architecture.\n\
5791ca66f1a1SLluís Vilanova Default: based on binary being disassembled.\n");
579276cad711SPaolo Bonzini
5793ca66f1a1SLluís Vilanova fprintf (stream, "\n\
579476cad711SPaolo Bonzini reg-names=ABI Print GPR and FPR names according to\n\
5795ca66f1a1SLluís Vilanova specified ABI.\n");
579676cad711SPaolo Bonzini
5797ca66f1a1SLluís Vilanova fprintf (stream, "\n\
579876cad711SPaolo Bonzini reg-names=ARCH Print CP0 register and HWR names according to\n\
5799ca66f1a1SLluís Vilanova specified architecture.\n");
580076cad711SPaolo Bonzini
5801ca66f1a1SLluís Vilanova fprintf (stream, "\n\
580276cad711SPaolo Bonzini For the options above, the following values are supported for \"ABI\":\n\
5803ca66f1a1SLluís Vilanova ");
580476cad711SPaolo Bonzini for (i = 0; i < ARRAY_SIZE (mips_abi_choices); i++)
580576cad711SPaolo Bonzini fprintf (stream, " %s", mips_abi_choices[i].name);
5806ca66f1a1SLluís Vilanova fprintf (stream, "\n");
580776cad711SPaolo Bonzini
5808ca66f1a1SLluís Vilanova fprintf (stream, "\n\
580976cad711SPaolo Bonzini For the options above, The following values are supported for \"ARCH\":\n\
5810ca66f1a1SLluís Vilanova ");
581176cad711SPaolo Bonzini for (i = 0; i < ARRAY_SIZE (mips_arch_choices); i++)
581276cad711SPaolo Bonzini if (*mips_arch_choices[i].name != '\0')
581376cad711SPaolo Bonzini fprintf (stream, " %s", mips_arch_choices[i].name);
5814ca66f1a1SLluís Vilanova fprintf (stream, "\n");
581576cad711SPaolo Bonzini
5816ca66f1a1SLluís Vilanova fprintf (stream, "\n");
581776cad711SPaolo Bonzini }
581876cad711SPaolo Bonzini #endif
5819