1130561Sobrien/* Print GOULD NPL instructions for GDB, the GNU debugger.
2130561Sobrien   Copyright 1986, 1987, 1989, 1991 Free Software Foundation, Inc.
3130561Sobrien
4130561SobrienThis file is part of GDB.
5130561Sobrien
6130561SobrienGDB is free software; you can redistribute it and/or modify
7130561Sobrienit under the terms of the GNU General Public License as published by
8130561Sobrienthe Free Software Foundation; either version 1, or (at your option)
9130561Sobrienany later version.
10130561Sobrien
11130561SobrienGDB is distributed in the hope that it will be useful,
12130561Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of
13130561SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14130561SobrienGNU General Public License for more details.
15130561Sobrien
16130561SobrienYou should have received a copy of the GNU General Public License
17130561Sobrienalong with GDB; see the file COPYING.  If not, write to
18218822Sdimthe Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
19130561Sobrien
20130561Sobrienstruct gld_opcode
21130561Sobrien{
22130561Sobrien  char *name;
23130561Sobrien  unsigned long opcode;
24130561Sobrien  unsigned long mask;
25130561Sobrien  char *args;
26130561Sobrien  int length;
27130561Sobrien};
28130561Sobrien
29130561Sobrien/* We store four bytes of opcode for all opcodes because that
30130561Sobrien   is the most any of them need.  The actual length of an instruction
31130561Sobrien   is always at least 2 bytes, and at most four.  The length of the
32130561Sobrien   instruction is based on the opcode.
33130561Sobrien
34130561Sobrien   The mask component is a mask saying which bits must match
35130561Sobrien   particular opcode in order for an instruction to be an instance
36130561Sobrien   of that opcode.
37130561Sobrien
38130561Sobrien   The args component is a string containing characters
39130561Sobrien   that are used to format the arguments to the instruction. */
40130561Sobrien
41130561Sobrien/* Kinds of operands:
42130561Sobrien   r  Register in first field
43130561Sobrien   R  Register in second field
44130561Sobrien   b  Base register in first field
45130561Sobrien   B  Base register in second field
46130561Sobrien   v  Vector register in first field
47130561Sobrien   V  Vector register in first field
48130561Sobrien   A  Optional address register (base register)
49130561Sobrien   X  Optional index register
50130561Sobrien   I  Immediate data (16bits signed)
51130561Sobrien   O  Offset field (16bits signed)
52130561Sobrien   h  Offset field (15bits signed)
53130561Sobrien   d  Offset field (14bits signed)
54130561Sobrien   S  Shift count field
55130561Sobrien
56130561Sobrien   any other characters are printed as is...
57130561Sobrien*/
58130561Sobrien
59130561Sobrien/* The assembler requires that this array be sorted as follows:
60130561Sobrien   all instances of the same mnemonic must be consecutive.
61130561Sobrien   All instances of the same mnemonic with the same number of operands
62130561Sobrien   must be consecutive.
63130561Sobrien */
64130561Sobrienstruct gld_opcode gld_opcodes[] =
65130561Sobrien{
66130561Sobrien{ "lb",		0xb4080000,	0xfc080000,	"r,xOA,X",	4 },
67130561Sobrien{ "lnb",	0xb8080000,	0xfc080000,	"r,xOA,X",	4 },
68130561Sobrien{ "lbs",	0xec080000,	0xfc080000,	"r,xOA,X",	4 },
69130561Sobrien{ "lh",		0xb4000001,	0xfc080001,	"r,xOA,X",	4 },
70130561Sobrien{ "lnh",	0xb8000001,	0xfc080001,	"r,xOA,X",	4 },
71130561Sobrien{ "lw",		0xb4000000,	0xfc080000,	"r,xOA,X",	4 },
72130561Sobrien{ "lnw",	0xb8000000,	0xfc080000,	"r,xOA,X",	4 },
73130561Sobrien{ "ld",		0xb4000002,	0xfc080002,	"r,xOA,X",	4 },
74130561Sobrien{ "lnd",	0xb8000002,	0xfc080002,	"r,xOA,X",	4 },
75130561Sobrien{ "li",		0xf8000000,	0xfc7f0000,	"r,I",		4 },
76130561Sobrien{ "lpa",	0x50080000,	0xfc080000,	"r,xOA,X",	4 },
77130561Sobrien{ "la",		0x50000000,	0xfc080000,	"r,xOA,X",	4 },
78130561Sobrien{ "labr",	0x58080000,	0xfc080000,	"b,xOA,X",	4 },
79130561Sobrien{ "lbp",	0x90080000,	0xfc080000,	"r,xOA,X",	4 },
80130561Sobrien{ "lhp",	0x90000001,	0xfc080001,	"r,xOA,X",	4 },
81130561Sobrien{ "lwp",	0x90000000,	0xfc080000,	"r,xOA,X",	4 },
82130561Sobrien{ "ldp",	0x90000002,	0xfc080002,	"r,xOA,X",	4 },
83130561Sobrien{ "suabr",	0x58000000,	0xfc080000,	"b,xOA,X",	4 },
84130561Sobrien{ "lf",		0xbc000000,	0xfc080000,	"r,xOA,X",	4 },
85130561Sobrien{ "lfbr",	0xbc080000,	0xfc080000,	"b,xOA,X",	4 },
86130561Sobrien{ "lwbr",	0x5c000000,	0xfc080000,	"b,xOA,X",	4 },
87130561Sobrien{ "stb",	0xd4080000,	0xfc080000,	"r,xOA,X",	4 },
88130561Sobrien{ "sth",	0xd4000001,	0xfc080001,	"r,xOA,X",	4 },
89130561Sobrien{ "stw",	0xd4000000,	0xfc080000,	"r,xOA,X",	4 },
90130561Sobrien{ "std",	0xd4000002,	0xfc080002,	"r,xOA,X",	4 },
91130561Sobrien{ "stf",	0xdc000000,	0xfc080000,	"r,xOA,X",	4 },
92130561Sobrien{ "stfbr",	0xdc080000,	0xfc080000,	"b,xOA,X",	4 },
93130561Sobrien{ "stwbr",	0x54000000,	0xfc080000,	"b,xOA,X",	4 },
94130561Sobrien{ "zmb",	0xd8080000,	0xfc080000,	"r,xOA,X",	4 },
95130561Sobrien{ "zmh",	0xd8000001,	0xfc080001,	"r,xOA,X",	4 },
96130561Sobrien{ "zmw",	0xd8000000,	0xfc080000,	"r,xOA,X",	4 },
97130561Sobrien{ "zmd",	0xd8000002,	0xfc080002,	"r,xOA,X",	4 },
98130561Sobrien{ "stbp",	0x94080000,	0xfc080000,	"r,xOA,X",	4 },
99130561Sobrien{ "sthp",	0x94000001,	0xfc080001,	"r,xOA,X",	4 },
100130561Sobrien{ "stwp",	0x94000000,	0xfc080000,	"r,xOA,X",	4 },
101130561Sobrien{ "stdp",	0x94000002,	0xfc080002,	"r,xOA,X",	4 },
102130561Sobrien{ "lil",	0xf80b0000,	0xfc7f0000,	"r,D",		4 },
103130561Sobrien{ "lwsl1",	0xec000000,	0xfc080000,	"r,xOA,X",	4 },
104130561Sobrien{ "lwsl2",	0xfc000000,	0xfc080000,	"r,xOA,X",	4 },
105130561Sobrien{ "lwsl3",	0xfc080000,	0xfc080000,	"r,xOA,X",	4 },
106130561Sobrien
107130561Sobrien{ "lvb",	0xb0080000,	0xfc080000,	"v,xOA,X",	4 },
108130561Sobrien{ "lvh",	0xb0000001,	0xfc080001,	"v,xOA,X",	4 },
109130561Sobrien{ "lvw",	0xb0000000,	0xfc080000,	"v,xOA,X",	4 },
110130561Sobrien{ "lvd",	0xb0000002,	0xfc080002,	"v,xOA,X",	4 },
111130561Sobrien{ "liv",	0x3c040000,	0xfc0f0000,	"v,R",		2 },
112130561Sobrien{ "livf",	0x3c080000,	0xfc0f0000,	"v,R",		2 },
113130561Sobrien{ "stvb",	0xd0080000,	0xfc080000,	"v,xOA,X",	4 },
114130561Sobrien{ "stvh",	0xd0000001,	0xfc080001,	"v,xOA,X",	4 },
115130561Sobrien{ "stvw",	0xd0000000,	0xfc080000,	"v,xOA,X",	4 },
116130561Sobrien{ "stvd",	0xd0000002,	0xfc080002,	"v,xOA,X",	4 },
117130561Sobrien
118130561Sobrien{ "trr",	0x2c000000,	0xfc0f0000,	"r,R",		2 },
119130561Sobrien{ "trn",	0x2c040000,	0xfc0f0000,	"r,R",		2 },
120130561Sobrien{ "trnd",	0x2c0c0000,	0xfc0f0000,	"r,R",		2 },
121130561Sobrien{ "trabs",	0x2c010000,	0xfc0f0000,	"r,R",		2 },
122130561Sobrien{ "trabsd",	0x2c090000,	0xfc0f0000,	"r,R",		2 },
123130561Sobrien{ "trc",	0x2c030000,	0xfc0f0000,	"r,R",		2 },
124130561Sobrien{ "xcr",	0x28040000,	0xfc0f0000,	"r,R",		2 },
125130561Sobrien{ "cxcr",	0x2c060000,	0xfc0f0000,	"r,R",		2 },
126130561Sobrien{ "cxcrd",	0x2c0e0000,	0xfc0f0000,	"r,R",		2 },
127130561Sobrien{ "tbrr",	0x2c020000,	0xfc0f0000,	"r,B",		2 },
128130561Sobrien{ "trbr",	0x28030000,	0xfc0f0000,	"b,R",		2 },
129130561Sobrien{ "xcbr",	0x28020000,	0xfc0f0000,	"b,B",		2 },
130130561Sobrien{ "tbrbr",	0x28010000,	0xfc0f0000,	"b,B",		2 },
131130561Sobrien
132130561Sobrien{ "trvv",	0x28050000,	0xfc0f0000,	"v,V",		2 },
133130561Sobrien{ "trvvn",	0x2c050000,	0xfc0f0000,	"v,V",		2 },
134130561Sobrien{ "trvvnd",	0x2c0d0000,	0xfc0f0000,	"v,V",		2 },
135130561Sobrien{ "trvab",	0x2c070000,	0xfc0f0000,	"v,V",		2 },
136130561Sobrien{ "trvabd",	0x2c0f0000,	0xfc0f0000,	"v,V",		2 },
137130561Sobrien{ "cmpv",	0x14060000,	0xfc0f0000,	"v,V",		2 },
138130561Sobrien{ "expv",	0x14070000,	0xfc0f0000,	"v,V",		2 },
139130561Sobrien{ "mrvvlt",	0x10030000,	0xfc0f0000,	"v,V",		2 },
140130561Sobrien{ "mrvvle",	0x10040000,	0xfc0f0000,	"v,V",		2 },
141130561Sobrien{ "mrvvgt",	0x14030000,	0xfc0f0000,	"v,V",		2 },
142130561Sobrien{ "mrvvge",	0x14040000,	0xfc0f0000,	"v,V",		2 },
143130561Sobrien{ "mrvveq",	0x10050000,	0xfc0f0000,	"v,V",		2 },
144130561Sobrien{ "mrvvne",	0x10050000,	0xfc0f0000,	"v,V",		2 },
145130561Sobrien{ "mrvrlt",	0x100d0000,	0xfc0f0000,	"v,R",		2 },
146130561Sobrien{ "mrvrle",	0x100e0000,	0xfc0f0000,	"v,R",		2 },
147130561Sobrien{ "mrvrgt",	0x140d0000,	0xfc0f0000,	"v,R",		2 },
148130561Sobrien{ "mrvrge",	0x140e0000,	0xfc0f0000,	"v,R",		2 },
149130561Sobrien{ "mrvreq",	0x100f0000,	0xfc0f0000,	"v,R",		2 },
150130561Sobrien{ "mrvrne",	0x140f0000,	0xfc0f0000,	"v,R",		2 },
151130561Sobrien{ "trvr",	0x140b0000,	0xfc0f0000,	"r,V",		2 },
152130561Sobrien{ "trrv",	0x140c0000,	0xfc0f0000,	"v,R",		2 },
153130561Sobrien
154130561Sobrien{ "bu",		0x40000000,	0xff880000,	"xOA,X",	4 },
155130561Sobrien{ "bns",	0x70080000,	0xff880000,	"xOA,X",	4 },
156130561Sobrien{ "bnco",	0x70880000,	0xff880000,	"xOA,X",	4 },
157130561Sobrien{ "bge",	0x71080000,	0xff880000,	"xOA,X",	4 },
158130561Sobrien{ "bne",	0x71880000,	0xff880000,	"xOA,X",	4 },
159130561Sobrien{ "bunge",	0x72080000,	0xff880000,	"xOA,X",	4 },
160130561Sobrien{ "bunle",	0x72880000,	0xff880000,	"xOA,X",	4 },
161130561Sobrien{ "bgt",	0x73080000,	0xff880000,	"xOA,X",	4 },
162130561Sobrien{ "bnany",	0x73880000,	0xff880000,	"xOA,X",	4 },
163130561Sobrien{ "bs"	,	0x70000000,	0xff880000,	"xOA,X",	4 },
164130561Sobrien{ "bco",	0x70800000,	0xff880000,	"xOA,X",	4 },
165130561Sobrien{ "blt",	0x71000000,	0xff880000,	"xOA,X",	4 },
166130561Sobrien{ "beq",	0x71800000,	0xff880000,	"xOA,X",	4 },
167130561Sobrien{ "buge",	0x72000000,	0xff880000,	"xOA,X",	4 },
168130561Sobrien{ "bult",	0x72800000,	0xff880000,	"xOA,X",	4 },
169130561Sobrien{ "ble",	0x73000000,	0xff880000,	"xOA,X",	4 },
170130561Sobrien{ "bany",	0x73800000,	0xff880000,	"xOA,X",	4 },
171130561Sobrien{ "brlnk",	0x44000000,	0xfc080000,	"r,xOA,X",	4 },
172130561Sobrien{ "bib",	0x48000000,	0xfc080000,	"r,xOA,X",	4 },
173130561Sobrien{ "bih",	0x48080000,	0xfc080000,	"r,xOA,X",	4 },
174130561Sobrien{ "biw",	0x4c000000,	0xfc080000,	"r,xOA,X",	4 },
175130561Sobrien{ "bid",	0x4c080000,	0xfc080000,	"r,xOA,X",	4 },
176130561Sobrien{ "bivb",	0x60000000,	0xfc080000,	"r,xOA,X",	4 },
177130561Sobrien{ "bivh",	0x60080000,	0xfc080000,	"r,xOA,X",	4 },
178130561Sobrien{ "bivw",	0x64000000,	0xfc080000,	"r,xOA,X",	4 },
179130561Sobrien{ "bivd",	0x64080000,	0xfc080000,	"r,xOA,X",	4 },
180130561Sobrien{ "bvsb",	0x68000000,	0xfc080000,	"r,xOA,X",	4 },
181130561Sobrien{ "bvsh",	0x68080000,	0xfc080000,	"r,xOA,X",	4 },
182130561Sobrien{ "bvsw",	0x6c000000,	0xfc080000,	"r,xOA,X",	4 },
183130561Sobrien{ "bvsd",	0x6c080000,	0xfc080000,	"r,xOA,X",	4 },
184130561Sobrien
185130561Sobrien{ "camb",	0x80080000,	0xfc080000,	"r,xOA,X",	4 },
186130561Sobrien{ "camh",	0x80000001,	0xfc080001,	"r,xOA,X",	4 },
187130561Sobrien{ "camw",	0x80000000,	0xfc080000,	"r,xOA,X",	4 },
188130561Sobrien{ "camd",	0x80000002,	0xfc080002,	"r,xOA,X",	4 },
189130561Sobrien{ "car",	0x10000000,	0xfc0f0000,	"r,R",		2 },
190130561Sobrien{ "card",	0x14000000,	0xfc0f0000,	"r,R",		2 },
191130561Sobrien{ "ci",		0xf8050000,	0xfc7f0000,	"r,I",		4 },
192130561Sobrien{ "chkbnd",	0x5c080000,	0xfc080000,	"r,xOA,X",	4 },
193130561Sobrien
194130561Sobrien{ "cavv",	0x10010000,	0xfc0f0000,	"v,V",		2 },
195130561Sobrien{ "cavr",	0x10020000,	0xfc0f0000,	"v,R",		2 },
196130561Sobrien{ "cavvd",	0x10090000,	0xfc0f0000,	"v,V",		2 },
197130561Sobrien{ "cavrd",	0x100b0000,	0xfc0f0000,	"v,R",		2 },
198130561Sobrien
199130561Sobrien{ "anmb",	0x84080000,	0xfc080000,	"r,xOA,X",	4 },
200130561Sobrien{ "anmh",	0x84000001,	0xfc080001,	"r,xOA,X",	4 },
201130561Sobrien{ "anmw",	0x84000000,	0xfc080000,	"r,xOA,X",	4 },
202130561Sobrien{ "anmd",	0x84000002,	0xfc080002,	"r,xOA,X",	4 },
203130561Sobrien{ "anr",	0x04000000,	0xfc0f0000,	"r,R",		2 },
204130561Sobrien{ "ani",	0xf8080000,	0xfc7f0000,	"r,I",		4 },
205130561Sobrien{ "ormb",	0xb8080000,	0xfc080000,	"r,xOA,X",	4 },
206130561Sobrien{ "ormh",	0xb8000001,	0xfc080001,	"r,xOA,X",	4 },
207130561Sobrien{ "ormw",	0xb8000000,	0xfc080000,	"r,xOA,X",	4 },
208130561Sobrien{ "ormd",	0xb8000002,	0xfc080002,	"r,xOA,X",	4 },
209130561Sobrien{ "orr",	0x08000000,	0xfc0f0000,	"r,R",		2 },
210130561Sobrien{ "oi",		0xf8090000,	0xfc7f0000,	"r,I",		4 },
211130561Sobrien{ "eomb",	0x8c080000,	0xfc080000,	"r,xOA,X",	4 },
212130561Sobrien{ "eomh",	0x8c000001,	0xfc080001,	"r,xOA,X",	4 },
213130561Sobrien{ "eomw",	0x8c000000,	0xfc080000,	"r,xOA,X",	4 },
214130561Sobrien{ "eomd",	0x8c000002,	0xfc080002,	"r,xOA,X",	4 },
215130561Sobrien{ "eor",	0x0c000000,	0xfc0f0000,	"r,R",		2 },
216130561Sobrien{ "eoi",	0xf80a0000,	0xfc7f0000,	"r,I",		4 },
217130561Sobrien
218130561Sobrien{ "anvv",	0x04010000,	0xfc0f0000,	"v,V",		2 },
219130561Sobrien{ "anvr",	0x04020000,	0xfc0f0000,	"v,R",		2 },
220130561Sobrien{ "orvv",	0x08010000,	0xfc0f0000,	"v,V",		2 },
221130561Sobrien{ "orvr",	0x08020000,	0xfc0f0000,	"v,R",		2 },
222130561Sobrien{ "eovv",	0x0c010000,	0xfc0f0000,	"v,V",		2 },
223130561Sobrien{ "eovr",	0x0c020000,	0xfc0f0000,	"v,R",		2 },
224130561Sobrien
225130561Sobrien{ "sacz",	0x100c0000,	0xfc0f0000,	"r,R",		2 },
226130561Sobrien{ "sla",	0x1c400000,	0xfc600000,	"r,S",		2 },
227130561Sobrien{ "sll",	0x1c600000,	0xfc600000,	"r,S",		2 },
228130561Sobrien{ "slc",	0x24400000,	0xfc600000,	"r,S",		2 },
229130561Sobrien{ "slad",	0x20400000,	0xfc600000,	"r,S",		2 },
230130561Sobrien{ "slld",	0x20600000,	0xfc600000,	"r,S",		2 },
231130561Sobrien{ "sra",	0x1c000000,	0xfc600000,	"r,S",		2 },
232130561Sobrien{ "srl",	0x1c200000,	0xfc600000,	"r,S",		2 },
233130561Sobrien{ "src",	0x24000000,	0xfc600000,	"r,S",		2 },
234130561Sobrien{ "srad",	0x20000000,	0xfc600000,	"r,S",		2 },
235130561Sobrien{ "srld",	0x20200000,	0xfc600000,	"r,S",		2 },
236130561Sobrien{ "sda",	0x3c030000,	0xfc0f0000,	"r,R",		2 },
237130561Sobrien{ "sdl",	0x3c020000,	0xfc0f0000,	"r,R",		2 },
238130561Sobrien{ "sdc",	0x3c010000,	0xfc0f0000,	"r,R",		2 },
239130561Sobrien{ "sdad",	0x3c0b0000,	0xfc0f0000,	"r,R",		2 },
240130561Sobrien{ "sdld",	0x3c0a0000,	0xfc0f0000,	"r,R",		2 },
241130561Sobrien
242130561Sobrien{ "svda",	0x3c070000,	0xfc0f0000,	"v,R",		2 },
243130561Sobrien{ "svdl",	0x3c060000,	0xfc0f0000,	"v,R",		2 },
244130561Sobrien{ "svdc",	0x3c050000,	0xfc0f0000,	"v,R",		2 },
245130561Sobrien{ "svdad",	0x3c0e0000,	0xfc0f0000,	"v,R",		2 },
246130561Sobrien{ "svdld",	0x3c0d0000,	0xfc0f0000,	"v,R",		2 },
247130561Sobrien
248130561Sobrien{ "sbm",	0xac080000,	0xfc080000,	"f,xOA,X",	4 },
249130561Sobrien{ "zbm",	0xac000000,	0xfc080000,	"f,xOA,X",	4 },
250130561Sobrien{ "tbm",	0xa8080000,	0xfc080000,	"f,xOA,X",	4 },
251130561Sobrien{ "incmb",	0xa0000000,	0xfc080000,	"xOA,X",	4 },
252130561Sobrien{ "incmh",	0xa0080000,	0xfc080000,	"xOA,X",	4 },
253130561Sobrien{ "incmw",	0xa4000000,	0xfc080000,	"xOA,X",	4 },
254130561Sobrien{ "incmd",	0xa4080000,	0xfc080000,	"xOA,X",	4 },
255130561Sobrien{ "sbmd",	0x7c080000,	0xfc080000,	"r,xOA,X",	4 },
256130561Sobrien{ "zbmd",	0x7c000000,	0xfc080000,	"r,xOA,X",	4 },
257130561Sobrien{ "tbmd",	0x78080000,	0xfc080000,	"r,xOA,X",	4 },
258130561Sobrien
259130561Sobrien{ "ssm",	0x9c080000,	0xfc080000,	"f,xOA,X",	4 },
260130561Sobrien{ "zsm",	0x9c000000,	0xfc080000,	"f,xOA,X",	4 },
261130561Sobrien{ "tsm",	0x98080000,	0xfc080000,	"f,xOA,X",	4 },
262130561Sobrien
263130561Sobrien{ "admb",	0xc8080000,	0xfc080000,	"r,xOA,X",	4 },
264130561Sobrien{ "admh",	0xc8000001,	0xfc080001,	"r,xOA,X",	4 },
265130561Sobrien{ "admw",	0xc8000000,	0xfc080000,	"r,xOA,X",	4 },
266130561Sobrien{ "admd",	0xc8000002,	0xfc080002,	"r,xOA,X",	4 },
267130561Sobrien{ "adr",	0x38000000,	0xfc0f0000,	"r,R",		2 },
268130561Sobrien{ "armb",	0xe8080000,	0xfc080000,	"r,xOA,X",	4 },
269130561Sobrien{ "armh",	0xe8000001,	0xfc080001,	"r,xOA,X",	4 },
270130561Sobrien{ "armw",	0xe8000000,	0xfc080000,	"r,xOA,X",	4 },
271130561Sobrien{ "armd",	0xe8000002,	0xfc080002,	"r,xOA,X",	4 },
272130561Sobrien{ "adi",	0xf8010000,	0xfc0f0000,	"r,I",		4 },
273130561Sobrien{ "sumb",	0xcc080000,	0xfc080000,	"r,xOA,X",	4 },
274130561Sobrien{ "sumh",	0xcc000001,	0xfc080001,	"r,xOA,X",	4 },
275130561Sobrien{ "sumw",	0xcc000000,	0xfc080000,	"r,xOA,X",	4 },
276130561Sobrien{ "sumd",	0xcc000002,	0xfc080002,	"r,xOA,X",	4 },
277130561Sobrien{ "sur",	0x3c000000,	0xfc0f0000,	"r,R",		2 },
278130561Sobrien{ "sui",	0xf8020000,	0xfc0f0000,	"r,I",		4 },
279130561Sobrien{ "mpmb",	0xc0080000,	0xfc080000,	"r,xOA,X",	4 },
280130561Sobrien{ "mpmh",	0xc0000001,	0xfc080001,	"r,xOA,X",	4 },
281130561Sobrien{ "mpmw",	0xc0000000,	0xfc080000,	"r,xOA,X",	4 },
282130561Sobrien{ "mpr",	0x38020000,	0xfc0f0000,	"r,R",		2 },
283130561Sobrien{ "mprd",	0x3c0f0000,	0xfc0f0000,	"r,R",		2 },
284130561Sobrien{ "mpi",	0xf8030000,	0xfc0f0000,	"r,I",		4 },
285130561Sobrien{ "dvmb",	0xc4080000,	0xfc080000,	"r,xOA,X",	4 },
286130561Sobrien{ "dvmh",	0xc4000001,	0xfc080001,	"r,xOA,X",	4 },
287130561Sobrien{ "dvmw",	0xc4000000,	0xfc080000,	"r,xOA,X",	4 },
288130561Sobrien{ "dvr",	0x380a0000,	0xfc0f0000,	"r,R",		2 },
289130561Sobrien{ "dvi",	0xf8040000,	0xfc0f0000,	"r,I",		4 },
290130561Sobrien{ "exs",	0x38080000,	0xfc0f0000,	"r,R",		2 },
291130561Sobrien
292130561Sobrien{ "advv",	0x30000000,	0xfc0f0000,	"v,V",		2 },
293130561Sobrien{ "advvd",	0x30080000,	0xfc0f0000,	"v,V",		2 },
294130561Sobrien{ "adrv",	0x34000000,	0xfc0f0000,	"v,R",		2 },
295130561Sobrien{ "adrvd",	0x34080000,	0xfc0f0000,	"v,R",		2 },
296130561Sobrien{ "suvv",	0x30010000,	0xfc0f0000,	"v,V",		2 },
297130561Sobrien{ "suvvd",	0x30090000,	0xfc0f0000,	"v,V",		2 },
298130561Sobrien{ "surv",	0x34010000,	0xfc0f0000,	"v,R",		2 },
299130561Sobrien{ "survd",	0x34090000,	0xfc0f0000,	"v,R",		2 },
300130561Sobrien{ "mpvv",	0x30020000,	0xfc0f0000,	"v,V",		2 },
301130561Sobrien{ "mprv",	0x34020000,	0xfc0f0000,	"v,R",		2 },
302130561Sobrien
303130561Sobrien{ "adfw",	0xe0080000,	0xfc080000,	"r,xOA,X",	4 },
304130561Sobrien{ "adfd",	0xe0080002,	0xfc080002,	"r,xOA,X",	4 },
305130561Sobrien{ "adrfw",	0x38010000,	0xfc0f0000,	"r,R",		2 },
306130561Sobrien{ "adrfd",	0x38090000,	0xfc0f0000,	"r,R",		2 },
307130561Sobrien{ "surfw",	0xe0000000,	0xfc080000,	"r,xOA,X",	4 },
308130561Sobrien{ "surfd",	0xe0000002,	0xfc080002,	"r,xOA,X",	4 },
309130561Sobrien{ "surfw",	0x38030000,	0xfc0f0000,	"r,R",		2 },
310130561Sobrien{ "surfd",	0x380b0000,	0xfc0f0000,	"r,R",		2 },
311130561Sobrien{ "mpfw",	0xe4080000,	0xfc080000,	"r,xOA,X",	4 },
312130561Sobrien{ "mpfd",	0xe4080002,	0xfc080002,	"r,xOA,X",	4 },
313130561Sobrien{ "mprfw",	0x38060000,	0xfc0f0000,	"r,R",		2 },
314130561Sobrien{ "mprfd",	0x380e0000,	0xfc0f0000,	"r,R",		2 },
315130561Sobrien{ "rfw",	0xe4000000,	0xfc080000,	"r,xOA,X",	4 },
316130561Sobrien{ "rfd",	0xe4000002,	0xfc080002,	"r,xOA,X",	4 },
317130561Sobrien{ "rrfw",	0x0c0e0000,	0xfc0f0000,	"r",		2 },
318130561Sobrien{ "rrfd",	0x0c0f0000,	0xfc0f0000,	"r",		2 },
319130561Sobrien
320130561Sobrien{ "advvfw",	0x30040000,	0xfc0f0000,	"v,V",		2 },
321130561Sobrien{ "advvfd",	0x300c0000,	0xfc0f0000,	"v,V",		2 },
322130561Sobrien{ "adrvfw",	0x34040000,	0xfc0f0000,	"v,R",		2 },
323130561Sobrien{ "adrvfd",	0x340c0000,	0xfc0f0000,	"v,R",		2 },
324130561Sobrien{ "suvvfw",	0x30050000,	0xfc0f0000,	"v,V",		2 },
325130561Sobrien{ "suvvfd",	0x300d0000,	0xfc0f0000,	"v,V",		2 },
326130561Sobrien{ "survfw",	0x34050000,	0xfc0f0000,	"v,R",		2 },
327130561Sobrien{ "survfd",	0x340d0000,	0xfc0f0000,	"v,R",		2 },
328130561Sobrien{ "mpvvfw",	0x30060000,	0xfc0f0000,	"v,V",		2 },
329130561Sobrien{ "mpvvfd",	0x300e0000,	0xfc0f0000,	"v,V",		2 },
330130561Sobrien{ "mprvfw",	0x34060000,	0xfc0f0000,	"v,R",		2 },
331130561Sobrien{ "mprvfd",	0x340e0000,	0xfc0f0000,	"v,R",		2 },
332130561Sobrien{ "rvfw",	0x30070000,	0xfc0f0000,	"v",		2 },
333130561Sobrien{ "rvfd",	0x300f0000,	0xfc0f0000,	"v",		2 },
334130561Sobrien
335130561Sobrien{ "fltw",	0x38070000,	0xfc0f0000,	"r,R",		2 },
336130561Sobrien{ "fltd",	0x380f0000,	0xfc0f0000,	"r,R",		2 },
337130561Sobrien{ "fixw",	0x38050000,	0xfc0f0000,	"r,R",		2 },
338130561Sobrien{ "fixd",	0x380d0000,	0xfc0f0000,	"r,R",		2 },
339130561Sobrien{ "cfpds",	0x3c090000,	0xfc0f0000,	"r,R",		2 },
340130561Sobrien
341130561Sobrien{ "fltvw",	0x080d0000,	0xfc0f0000,	"v,V",		2 },
342130561Sobrien{ "fltvd",	0x080f0000,	0xfc0f0000,	"v,V",		2 },
343130561Sobrien{ "fixvw",	0x080c0000,	0xfc0f0000,	"v,V",		2 },
344130561Sobrien{ "fixvd",	0x080e0000,	0xfc0f0000,	"v,V",		2 },
345130561Sobrien{ "cfpvds",	0x0c0d0000,	0xfc0f0000,	"v,V",		2 },
346130561Sobrien
347130561Sobrien{ "orvrn",	0x000a0000,	0xfc0f0000,	"r,V",		2 },
348130561Sobrien{ "andvrn",	0x00080000,	0xfc0f0000,	"r,V",		2 },
349130561Sobrien{ "frsteq",	0x04090000,	0xfc0f0000,	"r,V",		2 },
350130561Sobrien{ "sigma",	0x0c080000,	0xfc0f0000,	"r,V",		2 },
351130561Sobrien{ "sigmad",	0x0c0a0000,	0xfc0f0000,	"r,V",		2 },
352130561Sobrien{ "sigmf",	0x08080000,	0xfc0f0000,	"r,V",		2 },
353130561Sobrien{ "sigmfd",	0x080a0000,	0xfc0f0000,	"r,V",		2 },
354130561Sobrien{ "prodf",	0x04080000,	0xfc0f0000,	"r,V",		2 },
355130561Sobrien{ "prodfd",	0x040a0000,	0xfc0f0000,	"r,V",		2 },
356130561Sobrien{ "maxv",	0x10080000,	0xfc0f0000,	"r,V",		2 },
357130561Sobrien{ "maxvd",	0x100a0000,	0xfc0f0000,	"r,V",		2 },
358130561Sobrien{ "minv",	0x14080000,	0xfc0f0000,	"r,V",		2 },
359130561Sobrien{ "minvd",	0x140a0000,	0xfc0f0000,	"r,V",		2 },
360130561Sobrien
361130561Sobrien{ "lpsd",	0xf0000000,	0xfc080000,	"xOA,X",	4 },
362130561Sobrien{ "ldc",	0xf0080000,	0xfc080000,	"xOA,X",	4 },
363130561Sobrien{ "spm",	0x040c0000,	0xfc0f0000,	"r",		2 },
364130561Sobrien{ "rpm",	0x040d0000,	0xfc0f0000,	"r",		2 },
365130561Sobrien{ "tritr",	0x00070000,	0xfc0f0000,	"r",		2 },
366130561Sobrien{ "trrit",	0x00060000,	0xfc0f0000,	"r",		2 },
367130561Sobrien{ "rpswt",	0x04080000,	0xfc0f0000,	"r",		2 },
368130561Sobrien{ "exr",	0xf8070000,	0xfc0f0000,	"",		4 },
369130561Sobrien{ "halt",	0x00000000,	0xfc0f0000,	"",		2 },
370130561Sobrien{ "wait",	0x00010000,	0xfc0f0000,	"",		2 },
371130561Sobrien{ "nop",	0x00020000,	0xfc0f0000,	"",		2 },
372130561Sobrien{ "eiae",	0x00030000,	0xfc0f0000,	"",		2 },
373130561Sobrien{ "efae",	0x000d0000,	0xfc0f0000,	"",		2 },
374130561Sobrien{ "diae",	0x000e0000,	0xfc0f0000,	"",		2 },
375130561Sobrien{ "dfae",	0x000f0000,	0xfc0f0000,	"",		2 },
376130561Sobrien{ "spvc",	0xf8060000,	0xfc0f0000,	"r,T,N",	4 },
377130561Sobrien{ "rdsts",	0x00090000,	0xfc0f0000,	"r",		2 },
378130561Sobrien{ "setcpu",	0x000c0000,	0xfc0f0000,	"r",		2 },
379130561Sobrien{ "cmc",	0x000b0000,	0xfc0f0000,	"r",		2 },
380130561Sobrien{ "trrcu",	0x00040000,	0xfc0f0000,	"r",		2 },
381130561Sobrien{ "attnio",	0x00050000,	0xfc0f0000,	"",		2 },
382130561Sobrien{ "fudit",	0x28080000,	0xfc0f0000,	"",		2 },
383130561Sobrien{ "break",	0x28090000,	0xfc0f0000,	"",		2 },
384130561Sobrien{ "frzss",	0x280a0000,	0xfc0f0000,	"",		2 },
385130561Sobrien{ "ripi",	0x04040000,	0xfc0f0000,	"r,R",		2 },
386130561Sobrien{ "xcp",	0x04050000,	0xfc0f0000,	"r",		2 },
387130561Sobrien{ "block",	0x04060000,	0xfc0f0000,	"",		2 },
388130561Sobrien{ "unblock",	0x04070000,	0xfc0f0000,	"",		2 },
389130561Sobrien{ "trsc",	0x08060000,	0xfc0f0000,	"r,R",		2 },
390130561Sobrien{ "tscr",	0x08070000,	0xfc0f0000,	"r,R",		2 },
391130561Sobrien{ "fq",		0x04080000,	0xfc0f0000,	"r",		2 },
392130561Sobrien{ "flupte",	0x2c080000,	0xfc0f0000,	"r",		2 },
393130561Sobrien{ "rviu",	0x040f0000,	0xfc0f0000,	"",		2 },
394130561Sobrien{ "ldel",	0x280c0000,	0xfc0f0000,	"r,R",		2 },
395130561Sobrien{ "ldu",	0x280d0000,	0xfc0f0000,	"r,R",		2 },
396130561Sobrien{ "stdecc",	0x280b0000,	0xfc0f0000,	"r,R",		2 },
397130561Sobrien{ "trpc",	0x08040000,	0xfc0f0000,	"r",		2 },
398130561Sobrien{ "tpcr",	0x08050000,	0xfc0f0000,	"r",		2 },
399130561Sobrien{ "ghalt",	0x0c050000,	0xfc0f0000,	"r",		2 },
400130561Sobrien{ "grun",	0x0c040000,	0xfc0f0000,	"",		2 },
401130561Sobrien{ "tmpr",	0x2c0a0000,	0xfc0f0000,	"r,R",		2 },
402130561Sobrien{ "trmp",	0x2c0b0000,	0xfc0f0000,	"r,R",		2 },
403130561Sobrien
404130561Sobrien{ "trrve",	0x28060000,	0xfc0f0000,	"r",		2 },
405130561Sobrien{ "trver",	0x28070000,	0xfc0f0000,	"r",		2 },
406130561Sobrien{ "trvlr",	0x280f0000,	0xfc0f0000,	"r",		2 },
407130561Sobrien
408130561Sobrien{ "linkfl",	0x18000000,	0xfc0f0000,	"r,R",		2 },
409130561Sobrien{ "linkbl",	0x18020000,	0xfc0f0000,	"r,R",		2 },
410130561Sobrien{ "linkfp",	0x18010000,	0xfc0f0000,	"r,R",		2 },
411130561Sobrien{ "linkbp",	0x18030000,	0xfc0f0000,	"r,R",		2 },
412130561Sobrien{ "linkpl",	0x18040000,	0xfc0f0000,	"r,R",		2 },
413130561Sobrien{ "ulinkl",	0x18080000,	0xfc0f0000,	"r,R",		2 },
414130561Sobrien{ "ulinkp",	0x18090000,	0xfc0f0000,	"r,R",		2 },
415130561Sobrien{ "ulinktl",	0x180a0000,	0xfc0f0000,	"r,R",		2 },
416130561Sobrien{ "ulinktp",	0x180b0000,	0xfc0f0000,	"r,R",		2 },
417130561Sobrien};
418130561Sobrien
419130561Sobrienint numopcodes = sizeof(gld_opcodes) / sizeof(gld_opcodes[0]);
420130561Sobrien
421130561Sobrienstruct gld_opcode *endop = gld_opcodes + sizeof(gld_opcodes) /
422130561Sobrien		 		sizeof(gld_opcodes[0]);
423