xref: /openbsd-src/gnu/usr.bin/binutils-2.17/opcodes/mips16-opc.c (revision 3d8817e467ea46cf4772788d6804dd293abfb01a)
1*3d8817e4Smiod /* mips16-opc.c.  Mips16 opcode table.
2*3d8817e4Smiod    Copyright 1996, 1997, 1998, 2000, 2005 Free Software Foundation, Inc.
3*3d8817e4Smiod    Contributed by Ian Lance Taylor, Cygnus Support
4*3d8817e4Smiod 
5*3d8817e4Smiod This file is part of GDB, GAS, and the GNU binutils.
6*3d8817e4Smiod 
7*3d8817e4Smiod GDB, GAS, and the GNU binutils are free software; you can redistribute
8*3d8817e4Smiod them and/or modify them under the terms of the GNU General Public
9*3d8817e4Smiod License as published by the Free Software Foundation; either version
10*3d8817e4Smiod 1, or (at your option) any later version.
11*3d8817e4Smiod 
12*3d8817e4Smiod GDB, GAS, and the GNU binutils are distributed in the hope that they
13*3d8817e4Smiod will be useful, but WITHOUT ANY WARRANTY; without even the implied
14*3d8817e4Smiod warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
15*3d8817e4Smiod the GNU General Public License for more details.
16*3d8817e4Smiod 
17*3d8817e4Smiod You should have received a copy of the GNU General Public License
18*3d8817e4Smiod along with this file; see the file COPYING.  If not, write to the Free
19*3d8817e4Smiod Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20*3d8817e4Smiod 02110-1301, USA.  */
21*3d8817e4Smiod 
22*3d8817e4Smiod #include <stdio.h>
23*3d8817e4Smiod #include "sysdep.h"
24*3d8817e4Smiod #include "opcode/mips.h"
25*3d8817e4Smiod 
26*3d8817e4Smiod /* This is the opcodes table for the mips16 processor.  The format of
27*3d8817e4Smiod    this table is intentionally identical to the one in mips-opc.c.
28*3d8817e4Smiod    However, the special letters that appear in the argument string are
29*3d8817e4Smiod    different, and the table uses some different flags.  */
30*3d8817e4Smiod 
31*3d8817e4Smiod /* Use some short hand macros to keep down the length of the lines in
32*3d8817e4Smiod    the opcodes table.  */
33*3d8817e4Smiod 
34*3d8817e4Smiod #define UBD     INSN_UNCOND_BRANCH_DELAY
35*3d8817e4Smiod #define BR      MIPS16_INSN_BRANCH
36*3d8817e4Smiod 
37*3d8817e4Smiod #define WR_x	MIPS16_INSN_WRITE_X
38*3d8817e4Smiod #define WR_y	MIPS16_INSN_WRITE_Y
39*3d8817e4Smiod #define WR_z	MIPS16_INSN_WRITE_Z
40*3d8817e4Smiod #define WR_T	MIPS16_INSN_WRITE_T
41*3d8817e4Smiod #define WR_SP	MIPS16_INSN_WRITE_SP
42*3d8817e4Smiod #define WR_31	MIPS16_INSN_WRITE_31
43*3d8817e4Smiod #define WR_Y	MIPS16_INSN_WRITE_GPR_Y
44*3d8817e4Smiod 
45*3d8817e4Smiod #define RD_x	MIPS16_INSN_READ_X
46*3d8817e4Smiod #define RD_y	MIPS16_INSN_READ_Y
47*3d8817e4Smiod #define RD_Z	MIPS16_INSN_READ_Z
48*3d8817e4Smiod #define RD_T	MIPS16_INSN_READ_T
49*3d8817e4Smiod #define RD_SP	MIPS16_INSN_READ_SP
50*3d8817e4Smiod #define RD_31	MIPS16_INSN_READ_31
51*3d8817e4Smiod #define RD_PC	MIPS16_INSN_READ_PC
52*3d8817e4Smiod #define RD_X	MIPS16_INSN_READ_GPR_X
53*3d8817e4Smiod 
54*3d8817e4Smiod #define WR_HI	INSN_WRITE_HI
55*3d8817e4Smiod #define WR_LO	INSN_WRITE_LO
56*3d8817e4Smiod #define RD_HI	INSN_READ_HI
57*3d8817e4Smiod #define RD_LO	INSN_READ_LO
58*3d8817e4Smiod 
59*3d8817e4Smiod #define TRAP	INSN_TRAP
60*3d8817e4Smiod 
61*3d8817e4Smiod #define I3	INSN_ISA3
62*3d8817e4Smiod 
63*3d8817e4Smiod #define T3      INSN_3900
64*3d8817e4Smiod 
65*3d8817e4Smiod const struct mips_opcode mips16_opcodes[] =
66*3d8817e4Smiod {
67*3d8817e4Smiod {"nop",	    "",		0x6500, 0xffff, RD_Z,		0,	0 }, /* move $0,$Z */
68*3d8817e4Smiod {"la",	    "x,A",	0x0800, 0xf800, WR_x|RD_PC,	0,	0 },
69*3d8817e4Smiod {"abs",	    "x,w",	0, (int) M_ABS, INSN_MACRO,	0,	0 },
70*3d8817e4Smiod {"addiu",   "y,x,4",	0x4000, 0xf810, WR_y|RD_x,	0,	0 },
71*3d8817e4Smiod {"addiu",   "x,k",	0x4800, 0xf800, WR_x|RD_x,	0,	0 },
72*3d8817e4Smiod {"addiu",   "S,K",	0x6300, 0xff00, WR_SP|RD_SP,	0,	0 },
73*3d8817e4Smiod {"addiu",   "S,S,K",	0x6300, 0xff00, WR_SP|RD_SP,	0,	0 },
74*3d8817e4Smiod {"addiu",   "x,P,V",	0x0800, 0xf800, WR_x|RD_PC,	0,	0 },
75*3d8817e4Smiod {"addiu",   "x,S,V",	0x0000, 0xf800, WR_x|RD_SP,	0,	0 },
76*3d8817e4Smiod {"addu",    "z,v,y",	0xe001, 0xf803, WR_z|RD_x|RD_y,	0,	0 },
77*3d8817e4Smiod {"addu",    "y,x,4",	0x4000, 0xf810, WR_y|RD_x,	0,	0 },
78*3d8817e4Smiod {"addu",    "x,k",	0x4800, 0xf800, WR_x|RD_x,	0,	0 },
79*3d8817e4Smiod {"addu",    "S,K",	0x6300, 0xff00, WR_SP|RD_SP,	0,	0 },
80*3d8817e4Smiod {"addu",    "S,S,K",	0x6300, 0xff00, WR_SP|RD_SP,	0,	0 },
81*3d8817e4Smiod {"addu",    "x,P,V",	0x0800, 0xf800, WR_x|RD_PC,	0,	0 },
82*3d8817e4Smiod {"addu",    "x,S,V",	0x0000, 0xf800, WR_x|RD_SP,	0,	0 },
83*3d8817e4Smiod {"and",	    "x,y",	0xe80c, 0xf81f, WR_x|RD_x|RD_y,	0,	0 },
84*3d8817e4Smiod {"b",	    "q",	0x1000, 0xf800, BR,		0,	0 },
85*3d8817e4Smiod {"beq",	    "x,y,p",	0, (int) M_BEQ, INSN_MACRO,	0,	0 },
86*3d8817e4Smiod {"beq",     "x,U,p",	0, (int) M_BEQ_I, INSN_MACRO,	0,	0 },
87*3d8817e4Smiod {"beqz",    "x,p",	0x2000, 0xf800, BR|RD_x,	0,	0 },
88*3d8817e4Smiod {"bge",	    "x,y,p",	0, (int) M_BGE, INSN_MACRO,	0,	0 },
89*3d8817e4Smiod {"bge",     "x,8,p",	0, (int) M_BGE_I, INSN_MACRO,	0,	0 },
90*3d8817e4Smiod {"bgeu",    "x,y,p",	0, (int) M_BGEU, INSN_MACRO,	0,	0 },
91*3d8817e4Smiod {"bgeu",    "x,8,p",	0, (int) M_BGEU_I, INSN_MACRO,	0,	0 },
92*3d8817e4Smiod {"bgt",	    "x,y,p",	0, (int) M_BGT, INSN_MACRO,	0,	0 },
93*3d8817e4Smiod {"bgt",     "x,8,p",	0, (int) M_BGT_I, INSN_MACRO,	0,	0 },
94*3d8817e4Smiod {"bgtu",    "x,y,p",	0, (int) M_BGTU, INSN_MACRO,	0,	0 },
95*3d8817e4Smiod {"bgtu",    "x,8,p",	0, (int) M_BGTU_I, INSN_MACRO,	0,	0 },
96*3d8817e4Smiod {"ble",	    "x,y,p",	0, (int) M_BLE, INSN_MACRO,	0,	0 },
97*3d8817e4Smiod {"ble",     "x,8,p",	0, (int) M_BLE_I, INSN_MACRO,	0,	0 },
98*3d8817e4Smiod {"bleu",    "x,y,p",	0, (int) M_BLEU, INSN_MACRO,	0,	0 },
99*3d8817e4Smiod {"bleu",    "x,8,p",	0, (int) M_BLEU_I, INSN_MACRO,	0,	0 },
100*3d8817e4Smiod {"blt",	    "x,y,p",	0, (int) M_BLT, INSN_MACRO,	0,	0 },
101*3d8817e4Smiod {"blt",     "x,8,p",	0, (int) M_BLT_I, INSN_MACRO,	0,	0 },
102*3d8817e4Smiod {"bltu",    "x,y,p",	0, (int) M_BLTU, INSN_MACRO,	0,	0 },
103*3d8817e4Smiod {"bltu",    "x,8,p",	0, (int) M_BLTU_I, INSN_MACRO,	0,	0 },
104*3d8817e4Smiod {"bne",	    "x,y,p",	0, (int) M_BNE, INSN_MACRO,	0,	0 },
105*3d8817e4Smiod {"bne",     "x,U,p",	0, (int) M_BNE_I, INSN_MACRO,	0,	0 },
106*3d8817e4Smiod {"bnez",    "x,p",	0x2800, 0xf800, BR|RD_x,	0,	0 },
107*3d8817e4Smiod {"break",   "6",	0xe805, 0xf81f, TRAP,		0,	0 },
108*3d8817e4Smiod {"bteqz",   "p",	0x6000, 0xff00, BR|RD_T,	0,	0 },
109*3d8817e4Smiod {"btnez",   "p",	0x6100, 0xff00, BR|RD_T,	0,	0 },
110*3d8817e4Smiod {"cmpi",    "x,U",	0x7000, 0xf800, WR_T|RD_x,	0,	0 },
111*3d8817e4Smiod {"cmp",	    "x,y",	0xe80a, 0xf81f, WR_T|RD_x|RD_y,	0,	0 },
112*3d8817e4Smiod {"cmp",     "x,U",	0x7000, 0xf800, WR_T|RD_x,	0,	0 },
113*3d8817e4Smiod {"dla",	    "y,E",	0xfe00, 0xff00, WR_y|RD_PC, 	0,	I3 },
114*3d8817e4Smiod {"daddiu",  "y,x,4",	0x4010, 0xf810, WR_y|RD_x, 	0,	I3 },
115*3d8817e4Smiod {"daddiu",  "y,j",	0xfd00, 0xff00, WR_y|RD_y, 	0,	I3 },
116*3d8817e4Smiod {"daddiu",  "S,K",	0xfb00, 0xff00, WR_SP|RD_SP, 	0,	I3 },
117*3d8817e4Smiod {"daddiu",  "S,S,K",	0xfb00, 0xff00, WR_SP|RD_SP, 	0,	I3 },
118*3d8817e4Smiod {"daddiu",  "y,P,W",	0xfe00, 0xff00, WR_y|RD_PC, 	0,	I3 },
119*3d8817e4Smiod {"daddiu",  "y,S,W",	0xff00, 0xff00, WR_y|RD_SP, 	0,	I3 },
120*3d8817e4Smiod {"daddu",   "z,v,y",	0xe000, 0xf803, WR_z|RD_x|RD_y, 0,	I3 },
121*3d8817e4Smiod {"daddu",   "y,x,4",	0x4010, 0xf810, WR_y|RD_x, 	0,	I3 },
122*3d8817e4Smiod {"daddu",   "y,j",	0xfd00, 0xff00, WR_y|RD_y, 	0,	I3 },
123*3d8817e4Smiod {"daddu",   "S,K",	0xfb00, 0xff00, WR_SP|RD_SP, 	0,	I3 },
124*3d8817e4Smiod {"daddu",   "S,S,K",	0xfb00, 0xff00, WR_SP|RD_SP, 	0,	I3 },
125*3d8817e4Smiod {"daddu",   "y,P,W",	0xfe00, 0xff00, WR_y|RD_PC, 	0,	I3 },
126*3d8817e4Smiod {"daddu",   "y,S,W",	0xff00, 0xff00, WR_y|RD_SP, 	0,	I3 },
127*3d8817e4Smiod {"ddiv",    "0,x,y",	0xe81e, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 	0,	I3 },
128*3d8817e4Smiod {"ddiv",    "z,v,y",	0, (int) M_DDIV_3, INSN_MACRO,	0,	0 },
129*3d8817e4Smiod {"ddivu",   "0,x,y",	0xe81f, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0,	I3 },
130*3d8817e4Smiod {"ddivu",   "z,v,y",	0, (int) M_DDIVU_3, INSN_MACRO,	0,	0 },
131*3d8817e4Smiod {"div",     "0,x,y",	0xe81a, 0xf81f, RD_x|RD_y|WR_HI|WR_LO,	0,	0 },
132*3d8817e4Smiod {"div",     "z,v,y",	0, (int) M_DIV_3, INSN_MACRO,	0,	0 },
133*3d8817e4Smiod {"divu",    "0,x,y",	0xe81b, 0xf81f, RD_x|RD_y|WR_HI|WR_LO,	0,	0 },
134*3d8817e4Smiod {"divu",    "z,v,y",	0, (int) M_DIVU_3, INSN_MACRO,	0,	0 },
135*3d8817e4Smiod {"dmul",    "z,v,y",	0, (int) M_DMUL, INSN_MACRO, 	0,	I3 },
136*3d8817e4Smiod {"dmult",   "x,y",	0xe81c, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0,	I3 },
137*3d8817e4Smiod {"dmultu",  "x,y",	0xe81d, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0,	I3 },
138*3d8817e4Smiod {"drem",    "0,x,y",	0xe81e, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0,	I3 },
139*3d8817e4Smiod {"drem",    "z,v,y",	0, (int) M_DREM_3, INSN_MACRO,	0,	0 },
140*3d8817e4Smiod {"dremu",   "0,x,y",	0xe81f, 0xf81f, RD_x|RD_y|WR_HI|WR_LO, 0,	I3 },
141*3d8817e4Smiod {"dremu",   "z,v,y",	0, (int) M_DREMU_3, INSN_MACRO,	0,	0 },
142*3d8817e4Smiod {"dsllv",   "y,x",	0xe814, 0xf81f, WR_y|RD_y|RD_x, 0,	I3 },
143*3d8817e4Smiod {"dsll",    "x,w,[",	0x3001, 0xf803, WR_x|RD_y, 	0,	I3 },
144*3d8817e4Smiod {"dsll",    "y,x",	0xe814, 0xf81f, WR_y|RD_y|RD_x, 0,	I3 },
145*3d8817e4Smiod {"dsrav",   "y,x",	0xe817, 0xf81f, WR_y|RD_y|RD_x, 0,	I3 },
146*3d8817e4Smiod {"dsra",    "y,]",	0xe813, 0xf81f, WR_y|RD_y, 	0,	I3 },
147*3d8817e4Smiod {"dsra",    "y,x",	0xe817, 0xf81f, WR_y|RD_y|RD_x, 0,	I3 },
148*3d8817e4Smiod {"dsrlv",   "y,x",	0xe816, 0xf81f, WR_y|RD_y|RD_x, 0,	I3 },
149*3d8817e4Smiod {"dsrl",    "y,]",	0xe808, 0xf81f, WR_y|RD_y, 	0,	I3 },
150*3d8817e4Smiod {"dsrl",    "y,x",	0xe816, 0xf81f, WR_y|RD_y|RD_x, 0,	I3 },
151*3d8817e4Smiod {"dsubu",   "z,v,y",	0xe002, 0xf803, WR_z|RD_x|RD_y, 0,	I3 },
152*3d8817e4Smiod {"dsubu",   "y,x,4",	0, (int) M_DSUBU_I, INSN_MACRO,	0,	0 },
153*3d8817e4Smiod {"dsubu",   "y,j",	0, (int) M_DSUBU_I_2, INSN_MACRO, 0,	0 },
154*3d8817e4Smiod {"exit",    "L",	0xed09, 0xff1f, TRAP,		0,	0 },
155*3d8817e4Smiod {"exit",    "L",	0xee09, 0xff1f, TRAP,		0,	0 },
156*3d8817e4Smiod {"exit",    "L",	0xef09, 0xff1f, TRAP,		0,	0 },
157*3d8817e4Smiod {"entry",   "l",	0xe809, 0xf81f, TRAP,		0,	0 },
158*3d8817e4Smiod {"extend",  "e",	0xf000, 0xf800, 0,		0,	0 },
159*3d8817e4Smiod {"jalr",    "x",	0xe840, 0xf8ff, UBD|WR_31|RD_x,	0,	0 },
160*3d8817e4Smiod {"jalr",    "R,x",	0xe840, 0xf8ff, UBD|WR_31|RD_x,	0,	0 },
161*3d8817e4Smiod {"jal",     "x",	0xe840, 0xf8ff, UBD|WR_31|RD_x,	0,	0 },
162*3d8817e4Smiod {"jal",     "R,x",	0xe840, 0xf8ff, UBD|WR_31|RD_x,	0,	0 },
163*3d8817e4Smiod {"jal",	    "a",	0x1800, 0xfc00, UBD|WR_31,	0,	0 },
164*3d8817e4Smiod {"jalx",    "a",	0x1c00, 0xfc00, UBD|WR_31,	0,	0 },
165*3d8817e4Smiod {"jr",	    "x",	0xe800, 0xf8ff, UBD|RD_x,	0,	0 },
166*3d8817e4Smiod {"jr",	    "R",	0xe820, 0xffff, UBD|RD_31,	0,	0 },
167*3d8817e4Smiod {"j",	    "x",	0xe800, 0xf8ff, UBD|RD_x,	0,	0 },
168*3d8817e4Smiod {"j",	    "R",	0xe820, 0xffff, UBD|RD_31,	0,	0 },
169*3d8817e4Smiod {"lb",	    "y,5(x)",	0x8000, 0xf800, WR_y|RD_x,	0,	0 },
170*3d8817e4Smiod {"lbu",	    "y,5(x)",	0xa000, 0xf800, WR_y|RD_x,	0,	0 },
171*3d8817e4Smiod {"ld",	    "y,D(x)",	0x3800, 0xf800, WR_y|RD_x, 	0,	I3 },
172*3d8817e4Smiod {"ld",	    "y,B",	0xfc00, 0xff00, WR_y|RD_PC, 	0,	I3 },
173*3d8817e4Smiod {"ld",	    "y,D(P)",	0xfc00, 0xff00, WR_y|RD_PC, 	0,	I3 },
174*3d8817e4Smiod {"ld",	    "y,D(S)",	0xf800, 0xff00, WR_y|RD_SP, 	0,	I3 },
175*3d8817e4Smiod {"lh",	    "y,H(x)",	0x8800, 0xf800, WR_y|RD_x,	0,	0 },
176*3d8817e4Smiod {"lhu",	    "y,H(x)",	0xa800, 0xf800, WR_y|RD_x,	0,	0 },
177*3d8817e4Smiod {"li",	    "x,U",	0x6800, 0xf800, WR_x,		0,	0 },
178*3d8817e4Smiod {"lw",	    "y,W(x)",	0x9800, 0xf800, WR_y|RD_x,	0,	0 },
179*3d8817e4Smiod {"lw",	    "x,A",	0xb000, 0xf800, WR_x|RD_PC,	0,	0 },
180*3d8817e4Smiod {"lw",	    "x,V(P)",	0xb000, 0xf800, WR_x|RD_PC,	0,	0 },
181*3d8817e4Smiod {"lw",	    "x,V(S)",	0x9000, 0xf800, WR_x|RD_SP,	0,	0 },
182*3d8817e4Smiod {"lwu",     "y,W(x)",	0xb800, 0xf800, WR_y|RD_x, 	0,	I3 },
183*3d8817e4Smiod {"mfhi",    "x",	0xe810, 0xf8ff, WR_x|RD_HI,	0,	0 },
184*3d8817e4Smiod {"mflo",    "x",	0xe812, 0xf8ff, WR_x|RD_LO,	0,	0 },
185*3d8817e4Smiod {"move",    "y,X",	0x6700, 0xff00, WR_y|RD_X, 	0,	0 },
186*3d8817e4Smiod {"move",    "Y,Z",	0x6500, 0xff00, WR_Y|RD_Z,	0,	0 },
187*3d8817e4Smiod {"mul",     "z,v,y",	0, (int) M_MUL, INSN_MACRO,	0,	0 },
188*3d8817e4Smiod {"mult",    "x,y",	0xe818, 0xf81f, RD_x|RD_y|WR_HI|WR_LO,	0,	0 },
189*3d8817e4Smiod {"multu",   "x,y",	0xe819, 0xf81f, RD_x|RD_y|WR_HI|WR_LO,	0,	0 },
190*3d8817e4Smiod {"neg",	    "x,w",	0xe80b, 0xf81f, WR_x|RD_y,	0,	0 },
191*3d8817e4Smiod {"not",	    "x,w",	0xe80f, 0xf81f, WR_x|RD_y,	0,	0 },
192*3d8817e4Smiod {"or",	    "x,y",	0xe80d, 0xf81f, WR_x|RD_x|RD_y,	0,	0 },
193*3d8817e4Smiod {"rem",     "0,x,y",	0xe81a, 0xf81f, RD_x|RD_y|WR_HI|WR_LO,	0,	0 },
194*3d8817e4Smiod {"rem",     "z,v,y",	0, (int) M_REM_3, INSN_MACRO,	0,	0 },
195*3d8817e4Smiod {"remu",    "0,x,y",	0xe81b, 0xf81f, RD_x|RD_y|WR_HI|WR_LO,	0,	0 },
196*3d8817e4Smiod {"remu",    "z,v,y",	0, (int) M_REMU_3, INSN_MACRO,	0,	0 },
197*3d8817e4Smiod {"sb",	    "y,5(x)",	0xc000, 0xf800, RD_y|RD_x,	0,	0 },
198*3d8817e4Smiod {"sd",	    "y,D(x)",	0x7800, 0xf800, RD_y|RD_x, 	0,	I3 },
199*3d8817e4Smiod {"sd",	    "y,D(S)",	0xf900, 0xff00, RD_y|RD_PC, 	0,	I3 },
200*3d8817e4Smiod {"sd",	    "R,C(S)",	0xfa00, 0xff00, RD_31|RD_PC,	0,	0 },
201*3d8817e4Smiod {"sh",	    "y,H(x)",	0xc800, 0xf800, RD_y|RD_x,	0,	0 },
202*3d8817e4Smiod {"sllv",    "y,x",	0xe804, 0xf81f, WR_y|RD_y|RD_x, 0,	0 },
203*3d8817e4Smiod {"sll",	    "x,w,<",	0x3000, 0xf803, WR_x|RD_y,	0,	0 },
204*3d8817e4Smiod {"sll",     "y,x",	0xe804, 0xf81f, WR_y|RD_y|RD_x,	0,	0 },
205*3d8817e4Smiod {"slti",    "x,8",	0x5000, 0xf800, WR_T|RD_x,	0,	0 },
206*3d8817e4Smiod {"slt",	    "x,y",	0xe802, 0xf81f, WR_T|RD_x|RD_y,	0,	0 },
207*3d8817e4Smiod {"slt",     "x,8",	0x5000, 0xf800, WR_T|RD_x,	0,	0 },
208*3d8817e4Smiod {"sltiu",   "x,8",	0x5800, 0xf800, WR_T|RD_x,	0,	0 },
209*3d8817e4Smiod {"sltu",    "x,y",	0xe803, 0xf81f, WR_T|RD_x|RD_y,	0,	0 },
210*3d8817e4Smiod {"sltu",    "x,8",	0x5800, 0xf800, WR_T|RD_x,	0,	0 },
211*3d8817e4Smiod {"srav",    "y,x",	0xe807, 0xf81f, WR_y|RD_y|RD_x,	0,	0 },
212*3d8817e4Smiod {"sra",	    "x,w,<",	0x3003, 0xf803, WR_x|RD_y,	0,	0 },
213*3d8817e4Smiod {"sra",     "y,x",	0xe807, 0xf81f, WR_y|RD_y|RD_x,	0,	0 },
214*3d8817e4Smiod {"srlv",    "y,x",	0xe806, 0xf81f, WR_y|RD_y|RD_x,	0,	0 },
215*3d8817e4Smiod {"srl",	    "x,w,<",	0x3002, 0xf803, WR_x|RD_y,	0,	0 },
216*3d8817e4Smiod {"srl",     "y,x",	0xe806, 0xf81f, WR_y|RD_y|RD_x,	0,	0 },
217*3d8817e4Smiod {"subu",    "z,v,y",	0xe003, 0xf803, WR_z|RD_x|RD_y,	0,	0 },
218*3d8817e4Smiod {"subu",    "y,x,4",	0, (int) M_SUBU_I, INSN_MACRO,	0,	0 },
219*3d8817e4Smiod {"subu",    "x,k",	0, (int) M_SUBU_I_2, INSN_MACRO,0,	0 },
220*3d8817e4Smiod {"sw",	    "y,W(x)",	0xd800, 0xf800, RD_y|RD_x,	0,	0 },
221*3d8817e4Smiod {"sw",	    "x,V(S)",	0xd000, 0xf800, RD_x|RD_SP,	0,	0 },
222*3d8817e4Smiod {"sw",	    "R,V(S)",	0x6200, 0xff00, RD_31|RD_SP,	0,	0 },
223*3d8817e4Smiod {"xor",	    "x,y",	0xe80e, 0xf81f, WR_x|RD_x|RD_y, 0,	0 },
224*3d8817e4Smiod   /* MIPS16e additions */
225*3d8817e4Smiod {"jalrc",   "x",	0xe8c0, 0xf8ff, WR_31|RD_x|TRAP, 0,     0 },
226*3d8817e4Smiod {"jalrc",   "R,x",	0xe8c0, 0xf8ff, WR_31|RD_x|TRAP, 0,     0 },
227*3d8817e4Smiod {"jrc",     "x",	0xe880, 0xf8ff, RD_x|TRAP,	0,      0 },
228*3d8817e4Smiod {"jrc",     "R",	0xe8a0, 0xffff, RD_31|TRAP,	0,      0 },
229*3d8817e4Smiod {"restore", "M",	0x6400, 0xff80, WR_31|RD_SP|WR_SP|TRAP,	0,	0 },
230*3d8817e4Smiod {"save",    "m",	0x6480, 0xff80, RD_31|RD_SP|WR_SP|TRAP,	0,	0 },
231*3d8817e4Smiod {"seb",	    "x",	0xe891, 0xf8ff, WR_x|RD_x,	0,      0 },
232*3d8817e4Smiod {"seh",	    "x",	0xe8b1, 0xf8ff, WR_x|RD_x,	0,      0 },
233*3d8817e4Smiod {"sew",	    "x",	0xe8d1, 0xf8ff, WR_x|RD_x,	0,      I3 },
234*3d8817e4Smiod {"zeb",	    "x",	0xe811, 0xf8ff, WR_x|RD_x,	0,      0 },
235*3d8817e4Smiod {"zeh",	    "x",	0xe831, 0xf8ff, WR_x|RD_x,	0,      0 },
236*3d8817e4Smiod {"zew",	    "x",	0xe851, 0xf8ff, WR_x|RD_x,	0,      I3 },
237*3d8817e4Smiod };
238*3d8817e4Smiod 
239*3d8817e4Smiod const int bfd_mips16_num_opcodes =
240*3d8817e4Smiod   ((sizeof mips16_opcodes) / (sizeof (mips16_opcodes[0])));
241