OSDN Git Service

daily update
[pf3gnuchains/pf3gnuchains3x.git] / opcodes / iq2000-desc.c
1 /* CPU data for iq2000.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright 1996-2010 Free Software Foundation, Inc.
6
7 This file is part of the GNU Binutils and/or GDB, the GNU debugger.
8
9    This file is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3, or (at your option)
12    any later version.
13
14    It is distributed in the hope that it will be useful, but WITHOUT
15    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
17    License for more details.
18
19    You should have received a copy of the GNU General Public License along
20    with this program; if not, write to the Free Software Foundation, Inc.,
21    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22
23 */
24
25 #include "sysdep.h"
26 #include <stdio.h>
27 #include <stdarg.h>
28 #include "ansidecl.h"
29 #include "bfd.h"
30 #include "symcat.h"
31 #include "iq2000-desc.h"
32 #include "iq2000-opc.h"
33 #include "opintl.h"
34 #include "libiberty.h"
35 #include "xregex.h"
36
37 /* Attributes.  */
38
39 static const CGEN_ATTR_ENTRY bool_attr[] =
40 {
41   { "#f", 0 },
42   { "#t", 1 },
43   { 0, 0 }
44 };
45
46 static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
47 {
48   { "base", MACH_BASE },
49   { "iq2000", MACH_IQ2000 },
50   { "iq10", MACH_IQ10 },
51   { "max", MACH_MAX },
52   { 0, 0 }
53 };
54
55 static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
56 {
57   { "iq2000", ISA_IQ2000 },
58   { "max", ISA_MAX },
59   { 0, 0 }
60 };
61
62 const CGEN_ATTR_TABLE iq2000_cgen_ifield_attr_table[] =
63 {
64   { "MACH", & MACH_attr[0], & MACH_attr[0] },
65   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
66   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
67   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
68   { "RESERVED", &bool_attr[0], &bool_attr[0] },
69   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
70   { "SIGNED", &bool_attr[0], &bool_attr[0] },
71   { 0, 0, 0 }
72 };
73
74 const CGEN_ATTR_TABLE iq2000_cgen_hardware_attr_table[] =
75 {
76   { "MACH", & MACH_attr[0], & MACH_attr[0] },
77   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
78   { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
79   { "PC", &bool_attr[0], &bool_attr[0] },
80   { "PROFILE", &bool_attr[0], &bool_attr[0] },
81   { 0, 0, 0 }
82 };
83
84 const CGEN_ATTR_TABLE iq2000_cgen_operand_attr_table[] =
85 {
86   { "MACH", & MACH_attr[0], & MACH_attr[0] },
87   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
88   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
89   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
90   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
91   { "SIGNED", &bool_attr[0], &bool_attr[0] },
92   { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
93   { "RELAX", &bool_attr[0], &bool_attr[0] },
94   { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
95   { 0, 0, 0 }
96 };
97
98 const CGEN_ATTR_TABLE iq2000_cgen_insn_attr_table[] =
99 {
100   { "MACH", & MACH_attr[0], & MACH_attr[0] },
101   { "ALIAS", &bool_attr[0], &bool_attr[0] },
102   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
103   { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
104   { "COND-CTI", &bool_attr[0], &bool_attr[0] },
105   { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
106   { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
107   { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
108   { "RELAXED", &bool_attr[0], &bool_attr[0] },
109   { "NO-DIS", &bool_attr[0], &bool_attr[0] },
110   { "PBB", &bool_attr[0], &bool_attr[0] },
111   { "YIELD-INSN", &bool_attr[0], &bool_attr[0] },
112   { "LOAD-DELAY", &bool_attr[0], &bool_attr[0] },
113   { "EVEN-REG-NUM", &bool_attr[0], &bool_attr[0] },
114   { "UNSUPPORTED", &bool_attr[0], &bool_attr[0] },
115   { "USES-RD", &bool_attr[0], &bool_attr[0] },
116   { "USES-RS", &bool_attr[0], &bool_attr[0] },
117   { "USES-RT", &bool_attr[0], &bool_attr[0] },
118   { "USES-R31", &bool_attr[0], &bool_attr[0] },
119   { 0, 0, 0 }
120 };
121
122 /* Instruction set variants.  */
123
124 static const CGEN_ISA iq2000_cgen_isa_table[] = {
125   { "iq2000", 32, 32, 32, 32 },
126   { 0, 0, 0, 0, 0 }
127 };
128
129 /* Machine variants.  */
130
131 static const CGEN_MACH iq2000_cgen_mach_table[] = {
132   { "iq2000", "iq2000", MACH_IQ2000, 0 },
133   { "iq10", "iq10", MACH_IQ10, 0 },
134   { 0, 0, 0, 0 }
135 };
136
137 static CGEN_KEYWORD_ENTRY iq2000_cgen_opval_gr_names_entries[] =
138 {
139   { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
140   { "%0", 0, {0, {{{0, 0}}}}, 0, 0 },
141   { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
142   { "%1", 1, {0, {{{0, 0}}}}, 0, 0 },
143   { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
144   { "%2", 2, {0, {{{0, 0}}}}, 0, 0 },
145   { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
146   { "%3", 3, {0, {{{0, 0}}}}, 0, 0 },
147   { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
148   { "%4", 4, {0, {{{0, 0}}}}, 0, 0 },
149   { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
150   { "%5", 5, {0, {{{0, 0}}}}, 0, 0 },
151   { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
152   { "%6", 6, {0, {{{0, 0}}}}, 0, 0 },
153   { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
154   { "%7", 7, {0, {{{0, 0}}}}, 0, 0 },
155   { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
156   { "%8", 8, {0, {{{0, 0}}}}, 0, 0 },
157   { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
158   { "%9", 9, {0, {{{0, 0}}}}, 0, 0 },
159   { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
160   { "%10", 10, {0, {{{0, 0}}}}, 0, 0 },
161   { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
162   { "%11", 11, {0, {{{0, 0}}}}, 0, 0 },
163   { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
164   { "%12", 12, {0, {{{0, 0}}}}, 0, 0 },
165   { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
166   { "%13", 13, {0, {{{0, 0}}}}, 0, 0 },
167   { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
168   { "%14", 14, {0, {{{0, 0}}}}, 0, 0 },
169   { "r15", 15, {0, {{{0, 0}}}}, 0, 0 },
170   { "%15", 15, {0, {{{0, 0}}}}, 0, 0 },
171   { "r16", 16, {0, {{{0, 0}}}}, 0, 0 },
172   { "%16", 16, {0, {{{0, 0}}}}, 0, 0 },
173   { "r17", 17, {0, {{{0, 0}}}}, 0, 0 },
174   { "%17", 17, {0, {{{0, 0}}}}, 0, 0 },
175   { "r18", 18, {0, {{{0, 0}}}}, 0, 0 },
176   { "%18", 18, {0, {{{0, 0}}}}, 0, 0 },
177   { "r19", 19, {0, {{{0, 0}}}}, 0, 0 },
178   { "%19", 19, {0, {{{0, 0}}}}, 0, 0 },
179   { "r20", 20, {0, {{{0, 0}}}}, 0, 0 },
180   { "%20", 20, {0, {{{0, 0}}}}, 0, 0 },
181   { "r21", 21, {0, {{{0, 0}}}}, 0, 0 },
182   { "%21", 21, {0, {{{0, 0}}}}, 0, 0 },
183   { "r22", 22, {0, {{{0, 0}}}}, 0, 0 },
184   { "%22", 22, {0, {{{0, 0}}}}, 0, 0 },
185   { "r23", 23, {0, {{{0, 0}}}}, 0, 0 },
186   { "%23", 23, {0, {{{0, 0}}}}, 0, 0 },
187   { "r24", 24, {0, {{{0, 0}}}}, 0, 0 },
188   { "%24", 24, {0, {{{0, 0}}}}, 0, 0 },
189   { "r25", 25, {0, {{{0, 0}}}}, 0, 0 },
190   { "%25", 25, {0, {{{0, 0}}}}, 0, 0 },
191   { "r26", 26, {0, {{{0, 0}}}}, 0, 0 },
192   { "%26", 26, {0, {{{0, 0}}}}, 0, 0 },
193   { "r27", 27, {0, {{{0, 0}}}}, 0, 0 },
194   { "%27", 27, {0, {{{0, 0}}}}, 0, 0 },
195   { "r28", 28, {0, {{{0, 0}}}}, 0, 0 },
196   { "%28", 28, {0, {{{0, 0}}}}, 0, 0 },
197   { "r29", 29, {0, {{{0, 0}}}}, 0, 0 },
198   { "%29", 29, {0, {{{0, 0}}}}, 0, 0 },
199   { "r30", 30, {0, {{{0, 0}}}}, 0, 0 },
200   { "%30", 30, {0, {{{0, 0}}}}, 0, 0 },
201   { "r31", 31, {0, {{{0, 0}}}}, 0, 0 },
202   { "%31", 31, {0, {{{0, 0}}}}, 0, 0 }
203 };
204
205 CGEN_KEYWORD iq2000_cgen_opval_gr_names =
206 {
207   & iq2000_cgen_opval_gr_names_entries[0],
208   64,
209   0, 0, 0, 0, ""
210 };
211
212
213 /* The hardware table.  */
214
215 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
216 #define A(a) (1 << CGEN_HW_##a)
217 #else
218 #define A(a) (1 << CGEN_HW_/**/a)
219 #endif
220
221 const CGEN_HW_ENTRY iq2000_cgen_hw_table[] =
222 {
223   { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
224   { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
225   { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
226   { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
227   { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
228   { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
229   { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & iq2000_cgen_opval_gr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
230   { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
231 };
232
233 #undef A
234
235
236 /* The instruction field table.  */
237
238 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
239 #define A(a) (1 << CGEN_IFLD_##a)
240 #else
241 #define A(a) (1 << CGEN_IFLD_/**/a)
242 #endif
243
244 const CGEN_IFLD iq2000_cgen_ifld_table[] =
245 {
246   { IQ2000_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
247   { IQ2000_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
248   { IQ2000_F_OPCODE, "f-opcode", 0, 32, 31, 6, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
249   { IQ2000_F_RS, "f-rs", 0, 32, 25, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
250   { IQ2000_F_RT, "f-rt", 0, 32, 20, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
251   { IQ2000_F_RD, "f-rd", 0, 32, 15, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
252   { IQ2000_F_SHAMT, "f-shamt", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
253   { IQ2000_F_CP_OP, "f-cp-op", 0, 32, 10, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
254   { IQ2000_F_CP_OP_10, "f-cp-op-10", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
255   { IQ2000_F_CP_GRP, "f-cp-grp", 0, 32, 7, 2, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
256   { IQ2000_F_FUNC, "f-func", 0, 32, 5, 6, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
257   { IQ2000_F_IMM, "f-imm", 0, 32, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
258   { IQ2000_F_RD_RS, "f-rd-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
259   { IQ2000_F_RD_RT, "f-rd-rt", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
260   { IQ2000_F_RT_RS, "f-rt-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
261   { IQ2000_F_JTARG, "f-jtarg", 0, 32, 15, 16, { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
262   { IQ2000_F_JTARGQ10, "f-jtargq10", 0, 32, 20, 21, { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
263   { IQ2000_F_OFFSET, "f-offset", 0, 32, 15, 16, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
264   { IQ2000_F_COUNT, "f-count", 0, 32, 15, 7, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
265   { IQ2000_F_BYTECOUNT, "f-bytecount", 0, 32, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
266   { IQ2000_F_INDEX, "f-index", 0, 32, 8, 9, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
267   { IQ2000_F_MASK, "f-mask", 0, 32, 9, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
268   { IQ2000_F_MASKQ10, "f-maskq10", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
269   { IQ2000_F_MASKL, "f-maskl", 0, 32, 4, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
270   { IQ2000_F_EXCODE, "f-excode", 0, 32, 25, 20, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
271   { IQ2000_F_RSRVD, "f-rsrvd", 0, 32, 25, 10, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
272   { IQ2000_F_10_11, "f-10-11", 0, 32, 10, 11, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
273   { IQ2000_F_24_19, "f-24-19", 0, 32, 24, 19, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
274   { IQ2000_F_5, "f-5", 0, 32, 5, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
275   { IQ2000_F_10, "f-10", 0, 32, 10, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
276   { IQ2000_F_25, "f-25", 0, 32, 25, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
277   { IQ2000_F_CAM_Z, "f-cam-z", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
278   { IQ2000_F_CAM_Y, "f-cam-y", 0, 32, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
279   { IQ2000_F_CM_3FUNC, "f-cm-3func", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
280   { IQ2000_F_CM_4FUNC, "f-cm-4func", 0, 32, 5, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
281   { IQ2000_F_CM_3Z, "f-cm-3z", 0, 32, 1, 2, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
282   { IQ2000_F_CM_4Z, "f-cm-4z", 0, 32, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
283   { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
284 };
285
286 #undef A
287
288
289
290 /* multi ifield declarations */
291
292 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RS_MULTI_IFIELD [];
293 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RT_MULTI_IFIELD [];
294 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RT_RS_MULTI_IFIELD [];
295
296
297 /* multi ifield definitions */
298
299 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RS_MULTI_IFIELD [] =
300 {
301     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
302     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
303     { 0, { (const PTR) 0 } }
304 };
305 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RT_MULTI_IFIELD [] =
306 {
307     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
308     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
309     { 0, { (const PTR) 0 } }
310 };
311 const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RT_RS_MULTI_IFIELD [] =
312 {
313     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
314     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
315     { 0, { (const PTR) 0 } }
316 };
317
318 /* The operand table.  */
319
320 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
321 #define A(a) (1 << CGEN_OPERAND_##a)
322 #else
323 #define A(a) (1 << CGEN_OPERAND_/**/a)
324 #endif
325 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
326 #define OPERAND(op) IQ2000_OPERAND_##op
327 #else
328 #define OPERAND(op) IQ2000_OPERAND_/**/op
329 #endif
330
331 const CGEN_OPERAND iq2000_cgen_operand_table[] =
332 {
333 /* pc: program counter */
334   { "pc", IQ2000_OPERAND_PC, HW_H_PC, 0, 0,
335     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_NIL] } }, 
336     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
337 /* rs: register Rs */
338   { "rs", IQ2000_OPERAND_RS, HW_H_GR, 25, 5,
339     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } }, 
340     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
341 /* rt: register Rt */
342   { "rt", IQ2000_OPERAND_RT, HW_H_GR, 20, 5,
343     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } }, 
344     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
345 /* rd: register Rd */
346   { "rd", IQ2000_OPERAND_RD, HW_H_GR, 15, 5,
347     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } }, 
348     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
349 /* rd-rs: register Rd from Rs */
350   { "rd-rs", IQ2000_OPERAND_RD_RS, HW_H_GR, 15, 10,
351     { 2, { (const PTR) &IQ2000_F_RD_RS_MULTI_IFIELD[0] } }, 
352     { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
353 /* rd-rt: register Rd from Rt */
354   { "rd-rt", IQ2000_OPERAND_RD_RT, HW_H_GR, 15, 10,
355     { 2, { (const PTR) &IQ2000_F_RD_RT_MULTI_IFIELD[0] } }, 
356     { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
357 /* rt-rs: register Rt from Rs */
358   { "rt-rs", IQ2000_OPERAND_RT_RS, HW_H_GR, 20, 10,
359     { 2, { (const PTR) &IQ2000_F_RT_RS_MULTI_IFIELD[0] } }, 
360     { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
361 /* shamt: shift amount */
362   { "shamt", IQ2000_OPERAND_SHAMT, HW_H_UINT, 10, 5,
363     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_SHAMT] } }, 
364     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
365 /* imm: immediate */
366   { "imm", IQ2000_OPERAND_IMM, HW_H_UINT, 15, 16,
367     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, 
368     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
369 /* offset: pc-relative offset */
370   { "offset", IQ2000_OPERAND_OFFSET, HW_H_IADDR, 15, 16,
371     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_OFFSET] } }, 
372     { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
373 /* baseoff: base register offset */
374   { "baseoff", IQ2000_OPERAND_BASEOFF, HW_H_IADDR, 15, 16,
375     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, 
376     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
377 /* jmptarg: jump target */
378   { "jmptarg", IQ2000_OPERAND_JMPTARG, HW_H_IADDR, 15, 16,
379     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARG] } }, 
380     { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
381 /* mask: mask */
382   { "mask", IQ2000_OPERAND_MASK, HW_H_UINT, 9, 4,
383     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASK] } }, 
384     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
385 /* maskq10: iq10 mask */
386   { "maskq10", IQ2000_OPERAND_MASKQ10, HW_H_UINT, 10, 5,
387     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKQ10] } }, 
388     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
389 /* maskl: mask left */
390   { "maskl", IQ2000_OPERAND_MASKL, HW_H_UINT, 4, 5,
391     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKL] } }, 
392     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
393 /* count: count */
394   { "count", IQ2000_OPERAND_COUNT, HW_H_UINT, 15, 7,
395     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_COUNT] } }, 
396     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
397 /* _index: index */
398   { "_index", IQ2000_OPERAND__INDEX, HW_H_UINT, 8, 9,
399     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_INDEX] } }, 
400     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
401 /* execode: execcode */
402   { "execode", IQ2000_OPERAND_EXECODE, HW_H_UINT, 25, 20,
403     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_EXCODE] } }, 
404     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
405 /* bytecount: byte count */
406   { "bytecount", IQ2000_OPERAND_BYTECOUNT, HW_H_UINT, 7, 8,
407     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_BYTECOUNT] } }, 
408     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
409 /* cam-y: cam global opn y */
410   { "cam-y", IQ2000_OPERAND_CAM_Y, HW_H_UINT, 2, 3,
411     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Y] } }, 
412     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
413 /* cam-z: cam global mask z */
414   { "cam-z", IQ2000_OPERAND_CAM_Z, HW_H_UINT, 5, 3,
415     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Z] } }, 
416     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
417 /* cm-3func: CM 3 bit fn field */
418   { "cm-3func", IQ2000_OPERAND_CM_3FUNC, HW_H_UINT, 5, 3,
419     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3FUNC] } }, 
420     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
421 /* cm-4func: CM 4 bit fn field */
422   { "cm-4func", IQ2000_OPERAND_CM_4FUNC, HW_H_UINT, 5, 4,
423     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4FUNC] } }, 
424     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
425 /* cm-3z: CM 3 bit Z field */
426   { "cm-3z", IQ2000_OPERAND_CM_3Z, HW_H_UINT, 1, 2,
427     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3Z] } }, 
428     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
429 /* cm-4z: CM 4 bit Z field */
430   { "cm-4z", IQ2000_OPERAND_CM_4Z, HW_H_UINT, 2, 3,
431     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4Z] } }, 
432     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
433 /* base: base register */
434   { "base", IQ2000_OPERAND_BASE, HW_H_GR, 25, 5,
435     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } }, 
436     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
437 /* maskr: mask right */
438   { "maskr", IQ2000_OPERAND_MASKR, HW_H_UINT, 25, 5,
439     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } }, 
440     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
441 /* bitnum: bit number */
442   { "bitnum", IQ2000_OPERAND_BITNUM, HW_H_UINT, 20, 5,
443     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } }, 
444     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
445 /* hi16: high 16 bit immediate */
446   { "hi16", IQ2000_OPERAND_HI16, HW_H_UINT, 15, 16,
447     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, 
448     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
449 /* lo16: 16 bit signed immediate, for low */
450   { "lo16", IQ2000_OPERAND_LO16, HW_H_UINT, 15, 16,
451     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, 
452     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
453 /* mlo16: negated 16 bit signed immediate */
454   { "mlo16", IQ2000_OPERAND_MLO16, HW_H_UINT, 15, 16,
455     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } }, 
456     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
457 /* jmptargq10: iq10 21-bit jump offset */
458   { "jmptargq10", IQ2000_OPERAND_JMPTARGQ10, HW_H_IADDR, 20, 21,
459     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARGQ10] } }, 
460     { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
461 /* sentinel */
462   { 0, 0, 0, 0, 0,
463     { 0, { (const PTR) 0 } },
464     { 0, { { { (1<<MACH_BASE), 0 } } } } }
465 };
466
467 #undef A
468
469
470 /* The instruction table.  */
471
472 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
473 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
474 #define A(a) (1 << CGEN_INSN_##a)
475 #else
476 #define A(a) (1 << CGEN_INSN_/**/a)
477 #endif
478
479 static const CGEN_IBASE iq2000_cgen_insn_table[MAX_INSNS] =
480 {
481   /* Special null first entry.
482      A `num' value of zero is thus invalid.
483      Also, the special `invalid' insn resides here.  */
484   { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
485 /* add ${rd-rs},$rt */
486   {
487     -1, "add2", "add", 32,
488     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
489   },
490 /* add $rd,$rs,$rt */
491   {
492     IQ2000_INSN_ADD, "add", "add", 32,
493     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
494   },
495 /* addi ${rt-rs},$lo16 */
496   {
497     -1, "addi2", "addi", 32,
498     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
499   },
500 /* addi $rt,$rs,$lo16 */
501   {
502     IQ2000_INSN_ADDI, "addi", "addi", 32,
503     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
504   },
505 /* addiu ${rt-rs},$lo16 */
506   {
507     -1, "addiu2", "addiu", 32,
508     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
509   },
510 /* addiu $rt,$rs,$lo16 */
511   {
512     IQ2000_INSN_ADDIU, "addiu", "addiu", 32,
513     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
514   },
515 /* addu ${rd-rs},$rt */
516   {
517     -1, "addu2", "addu", 32,
518     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
519   },
520 /* addu $rd,$rs,$rt */
521   {
522     IQ2000_INSN_ADDU, "addu", "addu", 32,
523     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
524   },
525 /* ado16 ${rd-rs},$rt */
526   {
527     -1, "ado162", "ado16", 32,
528     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
529   },
530 /* ado16 $rd,$rs,$rt */
531   {
532     IQ2000_INSN_ADO16, "ado16", "ado16", 32,
533     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
534   },
535 /* and ${rd-rs},$rt */
536   {
537     -1, "and2", "and", 32,
538     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
539   },
540 /* and $rd,$rs,$rt */
541   {
542     IQ2000_INSN_AND, "and", "and", 32,
543     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
544   },
545 /* andi ${rt-rs},$lo16 */
546   {
547     -1, "andi2", "andi", 32,
548     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
549   },
550 /* andi $rt,$rs,$lo16 */
551   {
552     IQ2000_INSN_ANDI, "andi", "andi", 32,
553     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
554   },
555 /* andoi ${rt-rs},$lo16 */
556   {
557     -1, "andoi2", "andoi", 32,
558     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
559   },
560 /* andoi $rt,$rs,$lo16 */
561   {
562     IQ2000_INSN_ANDOI, "andoi", "andoi", 32,
563     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
564   },
565 /* nor ${rd-rs},$rt */
566   {
567     -1, "nor2", "nor", 32,
568     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
569   },
570 /* nor $rd,$rs,$rt */
571   {
572     IQ2000_INSN_NOR, "nor", "nor", 32,
573     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
574   },
575 /* or ${rd-rs},$rt */
576   {
577     -1, "or2", "or", 32,
578     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
579   },
580 /* or $rd,$rs,$rt */
581   {
582     IQ2000_INSN_OR, "or", "or", 32,
583     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
584   },
585 /* ori ${rt-rs},$lo16 */
586   {
587     -1, "ori2", "ori", 32,
588     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
589   },
590 /* ori $rt,$rs,$lo16 */
591   {
592     IQ2000_INSN_ORI, "ori", "ori", 32,
593     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
594   },
595 /* ram $rd,$rt,$shamt,$maskl,$maskr */
596   {
597     IQ2000_INSN_RAM, "ram", "ram", 32,
598     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
599   },
600 /* sll $rd,$rt,$shamt */
601   {
602     IQ2000_INSN_SLL, "sll", "sll", 32,
603     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
604   },
605 /* sllv ${rd-rt},$rs */
606   {
607     -1, "sllv2", "sllv", 32,
608     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
609   },
610 /* sllv $rd,$rt,$rs */
611   {
612     IQ2000_INSN_SLLV, "sllv", "sllv", 32,
613     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
614   },
615 /* slmv ${rd-rt},$rs,$shamt */
616   {
617     -1, "slmv2", "slmv", 32,
618     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
619   },
620 /* slmv $rd,$rt,$rs,$shamt */
621   {
622     IQ2000_INSN_SLMV, "slmv", "slmv", 32,
623     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
624   },
625 /* slt ${rd-rs},$rt */
626   {
627     -1, "slt2", "slt", 32,
628     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
629   },
630 /* slt $rd,$rs,$rt */
631   {
632     IQ2000_INSN_SLT, "slt", "slt", 32,
633     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
634   },
635 /* slti ${rt-rs},$imm */
636   {
637     -1, "slti2", "slti", 32,
638     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
639   },
640 /* slti $rt,$rs,$imm */
641   {
642     IQ2000_INSN_SLTI, "slti", "slti", 32,
643     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
644   },
645 /* sltiu ${rt-rs},$imm */
646   {
647     -1, "sltiu2", "sltiu", 32,
648     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
649   },
650 /* sltiu $rt,$rs,$imm */
651   {
652     IQ2000_INSN_SLTIU, "sltiu", "sltiu", 32,
653     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
654   },
655 /* sltu ${rd-rs},$rt */
656   {
657     -1, "sltu2", "sltu", 32,
658     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
659   },
660 /* sltu $rd,$rs,$rt */
661   {
662     IQ2000_INSN_SLTU, "sltu", "sltu", 32,
663     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
664   },
665 /* sra ${rd-rt},$shamt */
666   {
667     -1, "sra2", "sra", 32,
668     { 0|A(USES_RT)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
669   },
670 /* sra $rd,$rt,$shamt */
671   {
672     IQ2000_INSN_SRA, "sra", "sra", 32,
673     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
674   },
675 /* srav ${rd-rt},$rs */
676   {
677     -1, "srav2", "srav", 32,
678     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
679   },
680 /* srav $rd,$rt,$rs */
681   {
682     IQ2000_INSN_SRAV, "srav", "srav", 32,
683     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
684   },
685 /* srl $rd,$rt,$shamt */
686   {
687     IQ2000_INSN_SRL, "srl", "srl", 32,
688     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
689   },
690 /* srlv ${rd-rt},$rs */
691   {
692     -1, "srlv2", "srlv", 32,
693     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
694   },
695 /* srlv $rd,$rt,$rs */
696   {
697     IQ2000_INSN_SRLV, "srlv", "srlv", 32,
698     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
699   },
700 /* srmv ${rd-rt},$rs,$shamt */
701   {
702     -1, "srmv2", "srmv", 32,
703     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
704   },
705 /* srmv $rd,$rt,$rs,$shamt */
706   {
707     IQ2000_INSN_SRMV, "srmv", "srmv", 32,
708     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
709   },
710 /* sub ${rd-rs},$rt */
711   {
712     -1, "sub2", "sub", 32,
713     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
714   },
715 /* sub $rd,$rs,$rt */
716   {
717     IQ2000_INSN_SUB, "sub", "sub", 32,
718     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
719   },
720 /* subu ${rd-rs},$rt */
721   {
722     -1, "subu2", "subu", 32,
723     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
724   },
725 /* subu $rd,$rs,$rt */
726   {
727     IQ2000_INSN_SUBU, "subu", "subu", 32,
728     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
729   },
730 /* xor ${rd-rs},$rt */
731   {
732     -1, "xor2", "xor", 32,
733     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
734   },
735 /* xor $rd,$rs,$rt */
736   {
737     IQ2000_INSN_XOR, "xor", "xor", 32,
738     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
739   },
740 /* xori ${rt-rs},$lo16 */
741   {
742     -1, "xori2", "xori", 32,
743     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
744   },
745 /* xori $rt,$rs,$lo16 */
746   {
747     IQ2000_INSN_XORI, "xori", "xori", 32,
748     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
749   },
750 /* bbi $rs($bitnum),$offset */
751   {
752     IQ2000_INSN_BBI, "bbi", "bbi", 32,
753     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
754   },
755 /* bbin $rs($bitnum),$offset */
756   {
757     IQ2000_INSN_BBIN, "bbin", "bbin", 32,
758     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
759   },
760 /* bbv $rs,$rt,$offset */
761   {
762     IQ2000_INSN_BBV, "bbv", "bbv", 32,
763     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
764   },
765 /* bbvn $rs,$rt,$offset */
766   {
767     IQ2000_INSN_BBVN, "bbvn", "bbvn", 32,
768     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
769   },
770 /* beq $rs,$rt,$offset */
771   {
772     IQ2000_INSN_BEQ, "beq", "beq", 32,
773     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
774   },
775 /* beql $rs,$rt,$offset */
776   {
777     IQ2000_INSN_BEQL, "beql", "beql", 32,
778     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
779   },
780 /* bgez $rs,$offset */
781   {
782     IQ2000_INSN_BGEZ, "bgez", "bgez", 32,
783     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
784   },
785 /* bgezal $rs,$offset */
786   {
787     IQ2000_INSN_BGEZAL, "bgezal", "bgezal", 32,
788     { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
789   },
790 /* bgezall $rs,$offset */
791   {
792     IQ2000_INSN_BGEZALL, "bgezall", "bgezall", 32,
793     { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
794   },
795 /* bgezl $rs,$offset */
796   {
797     IQ2000_INSN_BGEZL, "bgezl", "bgezl", 32,
798     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
799   },
800 /* bltz $rs,$offset */
801   {
802     IQ2000_INSN_BLTZ, "bltz", "bltz", 32,
803     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
804   },
805 /* bltzl $rs,$offset */
806   {
807     IQ2000_INSN_BLTZL, "bltzl", "bltzl", 32,
808     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
809   },
810 /* bltzal $rs,$offset */
811   {
812     IQ2000_INSN_BLTZAL, "bltzal", "bltzal", 32,
813     { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
814   },
815 /* bltzall $rs,$offset */
816   {
817     IQ2000_INSN_BLTZALL, "bltzall", "bltzall", 32,
818     { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
819   },
820 /* bmb0 $rs,$rt,$offset */
821   {
822     IQ2000_INSN_BMB0, "bmb0", "bmb0", 32,
823     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
824   },
825 /* bmb1 $rs,$rt,$offset */
826   {
827     IQ2000_INSN_BMB1, "bmb1", "bmb1", 32,
828     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
829   },
830 /* bmb2 $rs,$rt,$offset */
831   {
832     IQ2000_INSN_BMB2, "bmb2", "bmb2", 32,
833     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
834   },
835 /* bmb3 $rs,$rt,$offset */
836   {
837     IQ2000_INSN_BMB3, "bmb3", "bmb3", 32,
838     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
839   },
840 /* bne $rs,$rt,$offset */
841   {
842     IQ2000_INSN_BNE, "bne", "bne", 32,
843     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
844   },
845 /* bnel $rs,$rt,$offset */
846   {
847     IQ2000_INSN_BNEL, "bnel", "bnel", 32,
848     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
849   },
850 /* jalr $rd,$rs */
851   {
852     IQ2000_INSN_JALR, "jalr", "jalr", 32,
853     { 0|A(USES_RS)|A(USES_RD)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
854   },
855 /* jr $rs */
856   {
857     IQ2000_INSN_JR, "jr", "jr", 32,
858     { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
859   },
860 /* lb $rt,$lo16($base) */
861   {
862     IQ2000_INSN_LB, "lb", "lb", 32,
863     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
864   },
865 /* lbu $rt,$lo16($base) */
866   {
867     IQ2000_INSN_LBU, "lbu", "lbu", 32,
868     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
869   },
870 /* lh $rt,$lo16($base) */
871   {
872     IQ2000_INSN_LH, "lh", "lh", 32,
873     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
874   },
875 /* lhu $rt,$lo16($base) */
876   {
877     IQ2000_INSN_LHU, "lhu", "lhu", 32,
878     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
879   },
880 /* lui $rt,$hi16 */
881   {
882     IQ2000_INSN_LUI, "lui", "lui", 32,
883     { 0|A(USES_RT), { { { (1<<MACH_BASE), 0 } } } }
884   },
885 /* lw $rt,$lo16($base) */
886   {
887     IQ2000_INSN_LW, "lw", "lw", 32,
888     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
889   },
890 /* sb $rt,$lo16($base) */
891   {
892     IQ2000_INSN_SB, "sb", "sb", 32,
893     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
894   },
895 /* sh $rt,$lo16($base) */
896   {
897     IQ2000_INSN_SH, "sh", "sh", 32,
898     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
899   },
900 /* sw $rt,$lo16($base) */
901   {
902     IQ2000_INSN_SW, "sw", "sw", 32,
903     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
904   },
905 /* break */
906   {
907     IQ2000_INSN_BREAK, "break", "break", 32,
908     { 0, { { { (1<<MACH_BASE), 0 } } } }
909   },
910 /* syscall */
911   {
912     IQ2000_INSN_SYSCALL, "syscall", "syscall", 32,
913     { 0|A(YIELD_INSN), { { { (1<<MACH_BASE), 0 } } } }
914   },
915 /* andoui $rt,$rs,$hi16 */
916   {
917     IQ2000_INSN_ANDOUI, "andoui", "andoui", 32,
918     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ2000), 0 } } } }
919   },
920 /* andoui ${rt-rs},$hi16 */
921   {
922     -1, "andoui2", "andoui", 32,
923     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
924   },
925 /* orui ${rt-rs},$hi16 */
926   {
927     -1, "orui2", "orui", 32,
928     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
929   },
930 /* orui $rt,$rs,$hi16 */
931   {
932     IQ2000_INSN_ORUI, "orui", "orui", 32,
933     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ2000), 0 } } } }
934   },
935 /* bgtz $rs,$offset */
936   {
937     IQ2000_INSN_BGTZ, "bgtz", "bgtz", 32,
938     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
939   },
940 /* bgtzl $rs,$offset */
941   {
942     IQ2000_INSN_BGTZL, "bgtzl", "bgtzl", 32,
943     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
944   },
945 /* blez $rs,$offset */
946   {
947     IQ2000_INSN_BLEZ, "blez", "blez", 32,
948     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
949   },
950 /* blezl $rs,$offset */
951   {
952     IQ2000_INSN_BLEZL, "blezl", "blezl", 32,
953     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
954   },
955 /* mrgb $rd,$rs,$rt,$mask */
956   {
957     IQ2000_INSN_MRGB, "mrgb", "mrgb", 32,
958     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
959   },
960 /* mrgb ${rd-rs},$rt,$mask */
961   {
962     -1, "mrgb2", "mrgb", 32,
963     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
964   },
965 /* bctxt $rs,$offset */
966   {
967     IQ2000_INSN_BCTXT, "bctxt", "bctxt", 32,
968     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
969   },
970 /* bc0f $offset */
971   {
972     IQ2000_INSN_BC0F, "bc0f", "bc0f", 32,
973     { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
974   },
975 /* bc0fl $offset */
976   {
977     IQ2000_INSN_BC0FL, "bc0fl", "bc0fl", 32,
978     { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
979   },
980 /* bc3f $offset */
981   {
982     IQ2000_INSN_BC3F, "bc3f", "bc3f", 32,
983     { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
984   },
985 /* bc3fl $offset */
986   {
987     IQ2000_INSN_BC3FL, "bc3fl", "bc3fl", 32,
988     { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
989   },
990 /* bc0t $offset */
991   {
992     IQ2000_INSN_BC0T, "bc0t", "bc0t", 32,
993     { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
994   },
995 /* bc0tl $offset */
996   {
997     IQ2000_INSN_BC0TL, "bc0tl", "bc0tl", 32,
998     { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
999   },
1000 /* bc3t $offset */
1001   {
1002     IQ2000_INSN_BC3T, "bc3t", "bc3t", 32,
1003     { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1004   },
1005 /* bc3tl $offset */
1006   {
1007     IQ2000_INSN_BC3TL, "bc3tl", "bc3tl", 32,
1008     { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1009   },
1010 /* cfc0 $rt,$rd */
1011   {
1012     IQ2000_INSN_CFC0, "cfc0", "cfc0", 32,
1013     { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1014   },
1015 /* cfc1 $rt,$rd */
1016   {
1017     IQ2000_INSN_CFC1, "cfc1", "cfc1", 32,
1018     { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1019   },
1020 /* cfc2 $rt,$rd */
1021   {
1022     IQ2000_INSN_CFC2, "cfc2", "cfc2", 32,
1023     { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1024   },
1025 /* cfc3 $rt,$rd */
1026   {
1027     IQ2000_INSN_CFC3, "cfc3", "cfc3", 32,
1028     { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1029   },
1030 /* chkhdr $rd,$rt */
1031   {
1032     IQ2000_INSN_CHKHDR, "chkhdr", "chkhdr", 32,
1033     { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1034   },
1035 /* ctc0 $rt,$rd */
1036   {
1037     IQ2000_INSN_CTC0, "ctc0", "ctc0", 32,
1038     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1039   },
1040 /* ctc1 $rt,$rd */
1041   {
1042     IQ2000_INSN_CTC1, "ctc1", "ctc1", 32,
1043     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1044   },
1045 /* ctc2 $rt,$rd */
1046   {
1047     IQ2000_INSN_CTC2, "ctc2", "ctc2", 32,
1048     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1049   },
1050 /* ctc3 $rt,$rd */
1051   {
1052     IQ2000_INSN_CTC3, "ctc3", "ctc3", 32,
1053     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1054   },
1055 /* jcr $rs */
1056   {
1057     IQ2000_INSN_JCR, "jcr", "jcr", 32,
1058     { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1059   },
1060 /* luc32 $rt,$rd */
1061   {
1062     IQ2000_INSN_LUC32, "luc32", "luc32", 32,
1063     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1064   },
1065 /* luc32l $rt,$rd */
1066   {
1067     IQ2000_INSN_LUC32L, "luc32l", "luc32l", 32,
1068     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1069   },
1070 /* luc64 $rt,$rd */
1071   {
1072     IQ2000_INSN_LUC64, "luc64", "luc64", 32,
1073     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1074   },
1075 /* luc64l $rt,$rd */
1076   {
1077     IQ2000_INSN_LUC64L, "luc64l", "luc64l", 32,
1078     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1079   },
1080 /* luk $rt,$rd */
1081   {
1082     IQ2000_INSN_LUK, "luk", "luk", 32,
1083     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1084   },
1085 /* lulck $rt */
1086   {
1087     IQ2000_INSN_LULCK, "lulck", "lulck", 32,
1088     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1089   },
1090 /* lum32 $rt,$rd */
1091   {
1092     IQ2000_INSN_LUM32, "lum32", "lum32", 32,
1093     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1094   },
1095 /* lum32l $rt,$rd */
1096   {
1097     IQ2000_INSN_LUM32L, "lum32l", "lum32l", 32,
1098     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1099   },
1100 /* lum64 $rt,$rd */
1101   {
1102     IQ2000_INSN_LUM64, "lum64", "lum64", 32,
1103     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1104   },
1105 /* lum64l $rt,$rd */
1106   {
1107     IQ2000_INSN_LUM64L, "lum64l", "lum64l", 32,
1108     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1109   },
1110 /* lur $rt,$rd */
1111   {
1112     IQ2000_INSN_LUR, "lur", "lur", 32,
1113     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1114   },
1115 /* lurl $rt,$rd */
1116   {
1117     IQ2000_INSN_LURL, "lurl", "lurl", 32,
1118     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1119   },
1120 /* luulck $rt */
1121   {
1122     IQ2000_INSN_LUULCK, "luulck", "luulck", 32,
1123     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1124   },
1125 /* mfc0 $rt,$rd */
1126   {
1127     IQ2000_INSN_MFC0, "mfc0", "mfc0", 32,
1128     { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1129   },
1130 /* mfc1 $rt,$rd */
1131   {
1132     IQ2000_INSN_MFC1, "mfc1", "mfc1", 32,
1133     { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1134   },
1135 /* mfc2 $rt,$rd */
1136   {
1137     IQ2000_INSN_MFC2, "mfc2", "mfc2", 32,
1138     { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1139   },
1140 /* mfc3 $rt,$rd */
1141   {
1142     IQ2000_INSN_MFC3, "mfc3", "mfc3", 32,
1143     { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
1144   },
1145 /* mtc0 $rt,$rd */
1146   {
1147     IQ2000_INSN_MTC0, "mtc0", "mtc0", 32,
1148     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1149   },
1150 /* mtc1 $rt,$rd */
1151   {
1152     IQ2000_INSN_MTC1, "mtc1", "mtc1", 32,
1153     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1154   },
1155 /* mtc2 $rt,$rd */
1156   {
1157     IQ2000_INSN_MTC2, "mtc2", "mtc2", 32,
1158     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1159   },
1160 /* mtc3 $rt,$rd */
1161   {
1162     IQ2000_INSN_MTC3, "mtc3", "mtc3", 32,
1163     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1164   },
1165 /* pkrl $rd,$rt */
1166   {
1167     IQ2000_INSN_PKRL, "pkrl", "pkrl", 32,
1168     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1169   },
1170 /* pkrlr1 $rt,$_index,$count */
1171   {
1172     IQ2000_INSN_PKRLR1, "pkrlr1", "pkrlr1", 32,
1173     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1174   },
1175 /* pkrlr30 $rt,$_index,$count */
1176   {
1177     IQ2000_INSN_PKRLR30, "pkrlr30", "pkrlr30", 32,
1178     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1179   },
1180 /* rb $rd,$rt */
1181   {
1182     IQ2000_INSN_RB, "rb", "rb", 32,
1183     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1184   },
1185 /* rbr1 $rt,$_index,$count */
1186   {
1187     IQ2000_INSN_RBR1, "rbr1", "rbr1", 32,
1188     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1189   },
1190 /* rbr30 $rt,$_index,$count */
1191   {
1192     IQ2000_INSN_RBR30, "rbr30", "rbr30", 32,
1193     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1194   },
1195 /* rfe */
1196   {
1197     IQ2000_INSN_RFE, "rfe", "rfe", 32,
1198     { 0, { { { (1<<MACH_IQ2000), 0 } } } }
1199   },
1200 /* rx $rd,$rt */
1201   {
1202     IQ2000_INSN_RX, "rx", "rx", 32,
1203     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1204   },
1205 /* rxr1 $rt,$_index,$count */
1206   {
1207     IQ2000_INSN_RXR1, "rxr1", "rxr1", 32,
1208     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1209   },
1210 /* rxr30 $rt,$_index,$count */
1211   {
1212     IQ2000_INSN_RXR30, "rxr30", "rxr30", 32,
1213     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1214   },
1215 /* sleep */
1216   {
1217     IQ2000_INSN_SLEEP, "sleep", "sleep", 32,
1218     { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
1219   },
1220 /* srrd $rt */
1221   {
1222     IQ2000_INSN_SRRD, "srrd", "srrd", 32,
1223     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1224   },
1225 /* srrdl $rt */
1226   {
1227     IQ2000_INSN_SRRDL, "srrdl", "srrdl", 32,
1228     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1229   },
1230 /* srulck $rt */
1231   {
1232     IQ2000_INSN_SRULCK, "srulck", "srulck", 32,
1233     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1234   },
1235 /* srwr $rt,$rd */
1236   {
1237     IQ2000_INSN_SRWR, "srwr", "srwr", 32,
1238     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1239   },
1240 /* srwru $rt,$rd */
1241   {
1242     IQ2000_INSN_SRWRU, "srwru", "srwru", 32,
1243     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1244   },
1245 /* trapqfl */
1246   {
1247     IQ2000_INSN_TRAPQFL, "trapqfl", "trapqfl", 32,
1248     { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
1249   },
1250 /* trapqne */
1251   {
1252     IQ2000_INSN_TRAPQNE, "trapqne", "trapqne", 32,
1253     { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
1254   },
1255 /* traprel $rt */
1256   {
1257     IQ2000_INSN_TRAPREL, "traprel", "traprel", 32,
1258     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1259   },
1260 /* wb $rd,$rt */
1261   {
1262     IQ2000_INSN_WB, "wb", "wb", 32,
1263     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1264   },
1265 /* wbu $rd,$rt */
1266   {
1267     IQ2000_INSN_WBU, "wbu", "wbu", 32,
1268     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1269   },
1270 /* wbr1 $rt,$_index,$count */
1271   {
1272     IQ2000_INSN_WBR1, "wbr1", "wbr1", 32,
1273     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1274   },
1275 /* wbr1u $rt,$_index,$count */
1276   {
1277     IQ2000_INSN_WBR1U, "wbr1u", "wbr1u", 32,
1278     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1279   },
1280 /* wbr30 $rt,$_index,$count */
1281   {
1282     IQ2000_INSN_WBR30, "wbr30", "wbr30", 32,
1283     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1284   },
1285 /* wbr30u $rt,$_index,$count */
1286   {
1287     IQ2000_INSN_WBR30U, "wbr30u", "wbr30u", 32,
1288     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1289   },
1290 /* wx $rd,$rt */
1291   {
1292     IQ2000_INSN_WX, "wx", "wx", 32,
1293     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1294   },
1295 /* wxu $rd,$rt */
1296   {
1297     IQ2000_INSN_WXU, "wxu", "wxu", 32,
1298     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
1299   },
1300 /* wxr1 $rt,$_index,$count */
1301   {
1302     IQ2000_INSN_WXR1, "wxr1", "wxr1", 32,
1303     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1304   },
1305 /* wxr1u $rt,$_index,$count */
1306   {
1307     IQ2000_INSN_WXR1U, "wxr1u", "wxr1u", 32,
1308     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1309   },
1310 /* wxr30 $rt,$_index,$count */
1311   {
1312     IQ2000_INSN_WXR30, "wxr30", "wxr30", 32,
1313     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1314   },
1315 /* wxr30u $rt,$_index,$count */
1316   {
1317     IQ2000_INSN_WXR30U, "wxr30u", "wxr30u", 32,
1318     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
1319   },
1320 /* ldw $rt,$lo16($base) */
1321   {
1322     IQ2000_INSN_LDW, "ldw", "ldw", 32,
1323     { 0|A(USES_RT)|A(LOAD_DELAY)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ2000), 0 } } } }
1324   },
1325 /* sdw $rt,$lo16($base) */
1326   {
1327     IQ2000_INSN_SDW, "sdw", "sdw", 32,
1328     { 0|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ2000), 0 } } } }
1329   },
1330 /* j $jmptarg */
1331   {
1332     IQ2000_INSN_J, "j", "j", 32,
1333     { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1334   },
1335 /* jal $jmptarg */
1336   {
1337     IQ2000_INSN_JAL, "jal", "jal", 32,
1338     { 0|A(USES_R31)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1339   },
1340 /* bmb $rs,$rt,$offset */
1341   {
1342     IQ2000_INSN_BMB, "bmb", "bmb", 32,
1343     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
1344   },
1345 /* andoui $rt,$rs,$hi16 */
1346   {
1347     IQ2000_INSN_ANDOUI_Q10, "andoui-q10", "andoui", 32,
1348     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1349   },
1350 /* andoui ${rt-rs},$hi16 */
1351   {
1352     -1, "andoui2-q10", "andoui", 32,
1353     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
1354   },
1355 /* orui $rt,$rs,$hi16 */
1356   {
1357     IQ2000_INSN_ORUI_Q10, "orui-q10", "orui", 32,
1358     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1359   },
1360 /* orui ${rt-rs},$hi16 */
1361   {
1362     -1, "orui2-q10", "orui", 32,
1363     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
1364   },
1365 /* mrgb $rd,$rs,$rt,$maskq10 */
1366   {
1367     IQ2000_INSN_MRGBQ10, "mrgbq10", "mrgb", 32,
1368     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1369   },
1370 /* mrgb ${rd-rs},$rt,$maskq10 */
1371   {
1372     -1, "mrgbq102", "mrgb", 32,
1373     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
1374   },
1375 /* j $jmptarg */
1376   {
1377     IQ2000_INSN_JQ10, "jq10", "j", 32,
1378     { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1379   },
1380 /* jal $rt,$jmptarg */
1381   {
1382     IQ2000_INSN_JALQ10, "jalq10", "jal", 32,
1383     { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1384   },
1385 /* jal $jmptarg */
1386   {
1387     IQ2000_INSN_JALQ10_2, "jalq10-2", "jal", 32,
1388     { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1389   },
1390 /* bbil $rs($bitnum),$offset */
1391   {
1392     IQ2000_INSN_BBIL, "bbil", "bbil", 32,
1393     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1394   },
1395 /* bbinl $rs($bitnum),$offset */
1396   {
1397     IQ2000_INSN_BBINL, "bbinl", "bbinl", 32,
1398     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1399   },
1400 /* bbvl $rs,$rt,$offset */
1401   {
1402     IQ2000_INSN_BBVL, "bbvl", "bbvl", 32,
1403     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1404   },
1405 /* bbvnl $rs,$rt,$offset */
1406   {
1407     IQ2000_INSN_BBVNL, "bbvnl", "bbvnl", 32,
1408     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1409   },
1410 /* bgtzal $rs,$offset */
1411   {
1412     IQ2000_INSN_BGTZAL, "bgtzal", "bgtzal", 32,
1413     { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1414   },
1415 /* bgtzall $rs,$offset */
1416   {
1417     IQ2000_INSN_BGTZALL, "bgtzall", "bgtzall", 32,
1418     { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1419   },
1420 /* blezal $rs,$offset */
1421   {
1422     IQ2000_INSN_BLEZAL, "blezal", "blezal", 32,
1423     { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1424   },
1425 /* blezall $rs,$offset */
1426   {
1427     IQ2000_INSN_BLEZALL, "blezall", "blezall", 32,
1428     { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1429   },
1430 /* bgtz $rs,$offset */
1431   {
1432     IQ2000_INSN_BGTZ_Q10, "bgtz-q10", "bgtz", 32,
1433     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1434   },
1435 /* bgtzl $rs,$offset */
1436   {
1437     IQ2000_INSN_BGTZL_Q10, "bgtzl-q10", "bgtzl", 32,
1438     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1439   },
1440 /* blez $rs,$offset */
1441   {
1442     IQ2000_INSN_BLEZ_Q10, "blez-q10", "blez", 32,
1443     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1444   },
1445 /* blezl $rs,$offset */
1446   {
1447     IQ2000_INSN_BLEZL_Q10, "blezl-q10", "blezl", 32,
1448     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1449   },
1450 /* bmb $rs,$rt,$offset */
1451   {
1452     IQ2000_INSN_BMB_Q10, "bmb-q10", "bmb", 32,
1453     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1454   },
1455 /* bmbl $rs,$rt,$offset */
1456   {
1457     IQ2000_INSN_BMBL, "bmbl", "bmbl", 32,
1458     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1459   },
1460 /* bri $rs,$offset */
1461   {
1462     IQ2000_INSN_BRI, "bri", "bri", 32,
1463     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1464   },
1465 /* brv $rs,$offset */
1466   {
1467     IQ2000_INSN_BRV, "brv", "brv", 32,
1468     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1469   },
1470 /* bctx $rs,$offset */
1471   {
1472     IQ2000_INSN_BCTX, "bctx", "bctx", 32,
1473     { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
1474   },
1475 /* yield */
1476   {
1477     IQ2000_INSN_YIELD, "yield", "yield", 32,
1478     { 0, { { { (1<<MACH_IQ10), 0 } } } }
1479   },
1480 /* crc32 $rd,$rs,$rt */
1481   {
1482     IQ2000_INSN_CRC32, "crc32", "crc32", 32,
1483     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1484   },
1485 /* crc32b $rd,$rs,$rt */
1486   {
1487     IQ2000_INSN_CRC32B, "crc32b", "crc32b", 32,
1488     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1489   },
1490 /* cnt1s $rd,$rs */
1491   {
1492     IQ2000_INSN_CNT1S, "cnt1s", "cnt1s", 32,
1493     { 0|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1494   },
1495 /* avail $rd */
1496   {
1497     IQ2000_INSN_AVAIL, "avail", "avail", 32,
1498     { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1499   },
1500 /* free $rd,$rs */
1501   {
1502     IQ2000_INSN_FREE, "free", "free", 32,
1503     { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1504   },
1505 /* tstod $rd,$rs */
1506   {
1507     IQ2000_INSN_TSTOD, "tstod", "tstod", 32,
1508     { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1509   },
1510 /* cmphdr $rd */
1511   {
1512     IQ2000_INSN_CMPHDR, "cmphdr", "cmphdr", 32,
1513     { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1514   },
1515 /* mcid $rd,$rt */
1516   {
1517     IQ2000_INSN_MCID, "mcid", "mcid", 32,
1518     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1519   },
1520 /* dba $rd */
1521   {
1522     IQ2000_INSN_DBA, "dba", "dba", 32,
1523     { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1524   },
1525 /* dbd $rd,$rs,$rt */
1526   {
1527     IQ2000_INSN_DBD, "dbd", "dbd", 32,
1528     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1529   },
1530 /* dpwt $rd,$rs */
1531   {
1532     IQ2000_INSN_DPWT, "dpwt", "dpwt", 32,
1533     { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1534   },
1535 /* chkhdr $rd,$rs */
1536   {
1537     IQ2000_INSN_CHKHDRQ10, "chkhdrq10", "chkhdr", 32,
1538     { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1539   },
1540 /* rba $rd,$rs,$rt */
1541   {
1542     IQ2000_INSN_RBA, "rba", "rba", 32,
1543     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1544   },
1545 /* rbal $rd,$rs,$rt */
1546   {
1547     IQ2000_INSN_RBAL, "rbal", "rbal", 32,
1548     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1549   },
1550 /* rbar $rd,$rs,$rt */
1551   {
1552     IQ2000_INSN_RBAR, "rbar", "rbar", 32,
1553     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1554   },
1555 /* wba $rd,$rs,$rt */
1556   {
1557     IQ2000_INSN_WBA, "wba", "wba", 32,
1558     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1559   },
1560 /* wbau $rd,$rs,$rt */
1561   {
1562     IQ2000_INSN_WBAU, "wbau", "wbau", 32,
1563     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1564   },
1565 /* wbac $rd,$rs,$rt */
1566   {
1567     IQ2000_INSN_WBAC, "wbac", "wbac", 32,
1568     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1569   },
1570 /* rbi $rd,$rs,$rt,$bytecount */
1571   {
1572     IQ2000_INSN_RBI, "rbi", "rbi", 32,
1573     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1574   },
1575 /* rbil $rd,$rs,$rt,$bytecount */
1576   {
1577     IQ2000_INSN_RBIL, "rbil", "rbil", 32,
1578     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1579   },
1580 /* rbir $rd,$rs,$rt,$bytecount */
1581   {
1582     IQ2000_INSN_RBIR, "rbir", "rbir", 32,
1583     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1584   },
1585 /* wbi $rd,$rs,$rt,$bytecount */
1586   {
1587     IQ2000_INSN_WBI, "wbi", "wbi", 32,
1588     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1589   },
1590 /* wbic $rd,$rs,$rt,$bytecount */
1591   {
1592     IQ2000_INSN_WBIC, "wbic", "wbic", 32,
1593     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1594   },
1595 /* wbiu $rd,$rs,$rt,$bytecount */
1596   {
1597     IQ2000_INSN_WBIU, "wbiu", "wbiu", 32,
1598     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1599   },
1600 /* pkrli $rd,$rs,$rt,$bytecount */
1601   {
1602     IQ2000_INSN_PKRLI, "pkrli", "pkrli", 32,
1603     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1604   },
1605 /* pkrlih $rd,$rs,$rt,$bytecount */
1606   {
1607     IQ2000_INSN_PKRLIH, "pkrlih", "pkrlih", 32,
1608     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1609   },
1610 /* pkrliu $rd,$rs,$rt,$bytecount */
1611   {
1612     IQ2000_INSN_PKRLIU, "pkrliu", "pkrliu", 32,
1613     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1614   },
1615 /* pkrlic $rd,$rs,$rt,$bytecount */
1616   {
1617     IQ2000_INSN_PKRLIC, "pkrlic", "pkrlic", 32,
1618     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1619   },
1620 /* pkrla $rd,$rs,$rt */
1621   {
1622     IQ2000_INSN_PKRLA, "pkrla", "pkrla", 32,
1623     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1624   },
1625 /* pkrlau $rd,$rs,$rt */
1626   {
1627     IQ2000_INSN_PKRLAU, "pkrlau", "pkrlau", 32,
1628     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1629   },
1630 /* pkrlah $rd,$rs,$rt */
1631   {
1632     IQ2000_INSN_PKRLAH, "pkrlah", "pkrlah", 32,
1633     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1634   },
1635 /* pkrlac $rd,$rs,$rt */
1636   {
1637     IQ2000_INSN_PKRLAC, "pkrlac", "pkrlac", 32,
1638     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1639   },
1640 /* lock $rd,$rt */
1641   {
1642     IQ2000_INSN_LOCK, "lock", "lock", 32,
1643     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
1644   },
1645 /* unlk $rd,$rt */
1646   {
1647     IQ2000_INSN_UNLK, "unlk", "unlk", 32,
1648     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1649   },
1650 /* swrd $rd,$rt */
1651   {
1652     IQ2000_INSN_SWRD, "swrd", "swrd", 32,
1653     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1654   },
1655 /* swrdl $rd,$rt */
1656   {
1657     IQ2000_INSN_SWRDL, "swrdl", "swrdl", 32,
1658     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1659   },
1660 /* swwr $rd,$rs,$rt */
1661   {
1662     IQ2000_INSN_SWWR, "swwr", "swwr", 32,
1663     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1664   },
1665 /* swwru $rd,$rs,$rt */
1666   {
1667     IQ2000_INSN_SWWRU, "swwru", "swwru", 32,
1668     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1669   },
1670 /* dwrd $rd,$rt */
1671   {
1672     IQ2000_INSN_DWRD, "dwrd", "dwrd", 32,
1673     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1674   },
1675 /* dwrdl $rd,$rt */
1676   {
1677     IQ2000_INSN_DWRDL, "dwrdl", "dwrdl", 32,
1678     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1679   },
1680 /* cam36 $rd,$rt,${cam-z},${cam-y} */
1681   {
1682     IQ2000_INSN_CAM36, "cam36", "cam36", 32,
1683     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1684   },
1685 /* cam72 $rd,$rt,${cam-y},${cam-z} */
1686   {
1687     IQ2000_INSN_CAM72, "cam72", "cam72", 32,
1688     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1689   },
1690 /* cam144 $rd,$rt,${cam-y},${cam-z} */
1691   {
1692     IQ2000_INSN_CAM144, "cam144", "cam144", 32,
1693     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1694   },
1695 /* cam288 $rd,$rt,${cam-y},${cam-z} */
1696   {
1697     IQ2000_INSN_CAM288, "cam288", "cam288", 32,
1698     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1699   },
1700 /* cm32and $rd,$rs,$rt */
1701   {
1702     IQ2000_INSN_CM32AND, "cm32and", "cm32and", 32,
1703     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1704   },
1705 /* cm32andn $rd,$rs,$rt */
1706   {
1707     IQ2000_INSN_CM32ANDN, "cm32andn", "cm32andn", 32,
1708     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1709   },
1710 /* cm32or $rd,$rs,$rt */
1711   {
1712     IQ2000_INSN_CM32OR, "cm32or", "cm32or", 32,
1713     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1714   },
1715 /* cm32ra $rd,$rs,$rt */
1716   {
1717     IQ2000_INSN_CM32RA, "cm32ra", "cm32ra", 32,
1718     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1719   },
1720 /* cm32rd $rd,$rt */
1721   {
1722     IQ2000_INSN_CM32RD, "cm32rd", "cm32rd", 32,
1723     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1724   },
1725 /* cm32ri $rd,$rt */
1726   {
1727     IQ2000_INSN_CM32RI, "cm32ri", "cm32ri", 32,
1728     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1729   },
1730 /* cm32rs $rd,$rs,$rt */
1731   {
1732     IQ2000_INSN_CM32RS, "cm32rs", "cm32rs", 32,
1733     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1734   },
1735 /* cm32sa $rd,$rs,$rt */
1736   {
1737     IQ2000_INSN_CM32SA, "cm32sa", "cm32sa", 32,
1738     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1739   },
1740 /* cm32sd $rd,$rt */
1741   {
1742     IQ2000_INSN_CM32SD, "cm32sd", "cm32sd", 32,
1743     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1744   },
1745 /* cm32si $rd,$rt */
1746   {
1747     IQ2000_INSN_CM32SI, "cm32si", "cm32si", 32,
1748     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
1749   },
1750 /* cm32ss $rd,$rs,$rt */
1751   {
1752     IQ2000_INSN_CM32SS, "cm32ss", "cm32ss", 32,
1753     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1754   },
1755 /* cm32xor $rd,$rs,$rt */
1756   {
1757     IQ2000_INSN_CM32XOR, "cm32xor", "cm32xor", 32,
1758     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1759   },
1760 /* cm64clr $rd,$rt */
1761   {
1762     IQ2000_INSN_CM64CLR, "cm64clr", "cm64clr", 32,
1763     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1764   },
1765 /* cm64ra $rd,$rs,$rt */
1766   {
1767     IQ2000_INSN_CM64RA, "cm64ra", "cm64ra", 32,
1768     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1769   },
1770 /* cm64rd $rd,$rt */
1771   {
1772     IQ2000_INSN_CM64RD, "cm64rd", "cm64rd", 32,
1773     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1774   },
1775 /* cm64ri $rd,$rt */
1776   {
1777     IQ2000_INSN_CM64RI, "cm64ri", "cm64ri", 32,
1778     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1779   },
1780 /* cm64ria2 $rd,$rs,$rt */
1781   {
1782     IQ2000_INSN_CM64RIA2, "cm64ria2", "cm64ria2", 32,
1783     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1784   },
1785 /* cm64rs $rd,$rs,$rt */
1786   {
1787     IQ2000_INSN_CM64RS, "cm64rs", "cm64rs", 32,
1788     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1789   },
1790 /* cm64sa $rd,$rs,$rt */
1791   {
1792     IQ2000_INSN_CM64SA, "cm64sa", "cm64sa", 32,
1793     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1794   },
1795 /* cm64sd $rd,$rt */
1796   {
1797     IQ2000_INSN_CM64SD, "cm64sd", "cm64sd", 32,
1798     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1799   },
1800 /* cm64si $rd,$rt */
1801   {
1802     IQ2000_INSN_CM64SI, "cm64si", "cm64si", 32,
1803     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1804   },
1805 /* cm64sia2 $rd,$rs,$rt */
1806   {
1807     IQ2000_INSN_CM64SIA2, "cm64sia2", "cm64sia2", 32,
1808     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1809   },
1810 /* cm64ss $rd,$rs,$rt */
1811   {
1812     IQ2000_INSN_CM64SS, "cm64ss", "cm64ss", 32,
1813     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1814   },
1815 /* cm128ria2 $rd,$rs,$rt */
1816   {
1817     IQ2000_INSN_CM128RIA2, "cm128ria2", "cm128ria2", 32,
1818     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1819   },
1820 /* cm128ria3 $rd,$rs,$rt,${cm-3z} */
1821   {
1822     IQ2000_INSN_CM128RIA3, "cm128ria3", "cm128ria3", 32,
1823     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1824   },
1825 /* cm128ria4 $rd,$rs,$rt,${cm-4z} */
1826   {
1827     IQ2000_INSN_CM128RIA4, "cm128ria4", "cm128ria4", 32,
1828     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1829   },
1830 /* cm128sia2 $rd,$rs,$rt */
1831   {
1832     IQ2000_INSN_CM128SIA2, "cm128sia2", "cm128sia2", 32,
1833     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1834   },
1835 /* cm128sia3 $rd,$rs,$rt,${cm-3z} */
1836   {
1837     IQ2000_INSN_CM128SIA3, "cm128sia3", "cm128sia3", 32,
1838     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
1839   },
1840 /* cm128sia4 $rd,$rs,$rt,${cm-4z} */
1841   {
1842     IQ2000_INSN_CM128SIA4, "cm128sia4", "cm128sia4", 32,
1843     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1844   },
1845 /* cm128vsa $rd,$rs,$rt */
1846   {
1847     IQ2000_INSN_CM128VSA, "cm128vsa", "cm128vsa", 32,
1848     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1849   },
1850 /* cfc $rd,$rt */
1851   {
1852     IQ2000_INSN_CFC, "cfc", "cfc", 32,
1853     { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { { { (1<<MACH_IQ10), 0 } } } }
1854   },
1855 /* ctc $rs,$rt */
1856   {
1857     IQ2000_INSN_CTC, "ctc", "ctc", 32,
1858     { 0|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
1859   },
1860 };
1861
1862 #undef OP
1863 #undef A
1864
1865 /* Initialize anything needed to be done once, before any cpu_open call.  */
1866
1867 static void
1868 init_tables (void)
1869 {
1870 }
1871
1872 static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
1873 static void build_hw_table      (CGEN_CPU_TABLE *);
1874 static void build_ifield_table  (CGEN_CPU_TABLE *);
1875 static void build_operand_table (CGEN_CPU_TABLE *);
1876 static void build_insn_table    (CGEN_CPU_TABLE *);
1877 static void iq2000_cgen_rebuild_tables (CGEN_CPU_TABLE *);
1878
1879 /* Subroutine of iq2000_cgen_cpu_open to look up a mach via its bfd name.  */
1880
1881 static const CGEN_MACH *
1882 lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
1883 {
1884   while (table->name)
1885     {
1886       if (strcmp (name, table->bfd_name) == 0)
1887         return table;
1888       ++table;
1889     }
1890   abort ();
1891 }
1892
1893 /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.  */
1894
1895 static void
1896 build_hw_table (CGEN_CPU_TABLE *cd)
1897 {
1898   int i;
1899   int machs = cd->machs;
1900   const CGEN_HW_ENTRY *init = & iq2000_cgen_hw_table[0];
1901   /* MAX_HW is only an upper bound on the number of selected entries.
1902      However each entry is indexed by it's enum so there can be holes in
1903      the table.  */
1904   const CGEN_HW_ENTRY **selected =
1905     (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
1906
1907   cd->hw_table.init_entries = init;
1908   cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
1909   memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
1910   /* ??? For now we just use machs to determine which ones we want.  */
1911   for (i = 0; init[i].name != NULL; ++i)
1912     if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
1913         & machs)
1914       selected[init[i].type] = &init[i];
1915   cd->hw_table.entries = selected;
1916   cd->hw_table.num_entries = MAX_HW;
1917 }
1918
1919 /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.  */
1920
1921 static void
1922 build_ifield_table (CGEN_CPU_TABLE *cd)
1923 {
1924   cd->ifld_table = & iq2000_cgen_ifld_table[0];
1925 }
1926
1927 /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.  */
1928
1929 static void
1930 build_operand_table (CGEN_CPU_TABLE *cd)
1931 {
1932   int i;
1933   int machs = cd->machs;
1934   const CGEN_OPERAND *init = & iq2000_cgen_operand_table[0];
1935   /* MAX_OPERANDS is only an upper bound on the number of selected entries.
1936      However each entry is indexed by it's enum so there can be holes in
1937      the table.  */
1938   const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
1939
1940   cd->operand_table.init_entries = init;
1941   cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
1942   memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
1943   /* ??? For now we just use mach to determine which ones we want.  */
1944   for (i = 0; init[i].name != NULL; ++i)
1945     if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
1946         & machs)
1947       selected[init[i].type] = &init[i];
1948   cd->operand_table.entries = selected;
1949   cd->operand_table.num_entries = MAX_OPERANDS;
1950 }
1951
1952 /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.
1953    ??? This could leave out insns not supported by the specified mach/isa,
1954    but that would cause errors like "foo only supported by bar" to become
1955    "unknown insn", so for now we include all insns and require the app to
1956    do the checking later.
1957    ??? On the other hand, parsing of such insns may require their hardware or
1958    operand elements to be in the table [which they mightn't be].  */
1959
1960 static void
1961 build_insn_table (CGEN_CPU_TABLE *cd)
1962 {
1963   int i;
1964   const CGEN_IBASE *ib = & iq2000_cgen_insn_table[0];
1965   CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
1966
1967   memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
1968   for (i = 0; i < MAX_INSNS; ++i)
1969     insns[i].base = &ib[i];
1970   cd->insn_table.init_entries = insns;
1971   cd->insn_table.entry_size = sizeof (CGEN_IBASE);
1972   cd->insn_table.num_init_entries = MAX_INSNS;
1973 }
1974
1975 /* Subroutine of iq2000_cgen_cpu_open to rebuild the tables.  */
1976
1977 static void
1978 iq2000_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
1979 {
1980   int i;
1981   CGEN_BITSET *isas = cd->isas;
1982   unsigned int machs = cd->machs;
1983
1984   cd->int_insn_p = CGEN_INT_INSN_P;
1985
1986   /* Data derived from the isa spec.  */
1987 #define UNSET (CGEN_SIZE_UNKNOWN + 1)
1988   cd->default_insn_bitsize = UNSET;
1989   cd->base_insn_bitsize = UNSET;
1990   cd->min_insn_bitsize = 65535; /* Some ridiculously big number.  */
1991   cd->max_insn_bitsize = 0;
1992   for (i = 0; i < MAX_ISAS; ++i)
1993     if (cgen_bitset_contains (isas, i))
1994       {
1995         const CGEN_ISA *isa = & iq2000_cgen_isa_table[i];
1996
1997         /* Default insn sizes of all selected isas must be
1998            equal or we set the result to 0, meaning "unknown".  */
1999         if (cd->default_insn_bitsize == UNSET)
2000           cd->default_insn_bitsize = isa->default_insn_bitsize;
2001         else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
2002           ; /* This is ok.  */
2003         else
2004           cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
2005
2006         /* Base insn sizes of all selected isas must be equal
2007            or we set the result to 0, meaning "unknown".  */
2008         if (cd->base_insn_bitsize == UNSET)
2009           cd->base_insn_bitsize = isa->base_insn_bitsize;
2010         else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
2011           ; /* This is ok.  */
2012         else
2013           cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
2014
2015         /* Set min,max insn sizes.  */
2016         if (isa->min_insn_bitsize < cd->min_insn_bitsize)
2017           cd->min_insn_bitsize = isa->min_insn_bitsize;
2018         if (isa->max_insn_bitsize > cd->max_insn_bitsize)
2019           cd->max_insn_bitsize = isa->max_insn_bitsize;
2020       }
2021
2022   /* Data derived from the mach spec.  */
2023   for (i = 0; i < MAX_MACHS; ++i)
2024     if (((1 << i) & machs) != 0)
2025       {
2026         const CGEN_MACH *mach = & iq2000_cgen_mach_table[i];
2027
2028         if (mach->insn_chunk_bitsize != 0)
2029         {
2030           if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
2031             {
2032               fprintf (stderr, "iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'\n",
2033                        cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
2034               abort ();
2035             }
2036
2037           cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
2038         }
2039       }
2040
2041   /* Determine which hw elements are used by MACH.  */
2042   build_hw_table (cd);
2043
2044   /* Build the ifield table.  */
2045   build_ifield_table (cd);
2046
2047   /* Determine which operands are used by MACH/ISA.  */
2048   build_operand_table (cd);
2049
2050   /* Build the instruction table.  */
2051   build_insn_table (cd);
2052 }
2053
2054 /* Initialize a cpu table and return a descriptor.
2055    It's much like opening a file, and must be the first function called.
2056    The arguments are a set of (type/value) pairs, terminated with
2057    CGEN_CPU_OPEN_END.
2058
2059    Currently supported values:
2060    CGEN_CPU_OPEN_ISAS:    bitmap of values in enum isa_attr
2061    CGEN_CPU_OPEN_MACHS:   bitmap of values in enum mach_attr
2062    CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
2063    CGEN_CPU_OPEN_ENDIAN:  specify endian choice
2064    CGEN_CPU_OPEN_END:     terminates arguments
2065
2066    ??? Simultaneous multiple isas might not make sense, but it's not (yet)
2067    precluded.
2068
2069    ??? We only support ISO C stdargs here, not K&R.
2070    Laziness, plus experiment to see if anything requires K&R - eventually
2071    K&R will no longer be supported - e.g. GDB is currently trying this.  */
2072
2073 CGEN_CPU_DESC
2074 iq2000_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
2075 {
2076   CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
2077   static int init_p;
2078   CGEN_BITSET *isas = 0;  /* 0 = "unspecified" */
2079   unsigned int machs = 0; /* 0 = "unspecified" */
2080   enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
2081   va_list ap;
2082
2083   if (! init_p)
2084     {
2085       init_tables ();
2086       init_p = 1;
2087     }
2088
2089   memset (cd, 0, sizeof (*cd));
2090
2091   va_start (ap, arg_type);
2092   while (arg_type != CGEN_CPU_OPEN_END)
2093     {
2094       switch (arg_type)
2095         {
2096         case CGEN_CPU_OPEN_ISAS :
2097           isas = va_arg (ap, CGEN_BITSET *);
2098           break;
2099         case CGEN_CPU_OPEN_MACHS :
2100           machs = va_arg (ap, unsigned int);
2101           break;
2102         case CGEN_CPU_OPEN_BFDMACH :
2103           {
2104             const char *name = va_arg (ap, const char *);
2105             const CGEN_MACH *mach =
2106               lookup_mach_via_bfd_name (iq2000_cgen_mach_table, name);
2107
2108             machs |= 1 << mach->num;
2109             break;
2110           }
2111         case CGEN_CPU_OPEN_ENDIAN :
2112           endian = va_arg (ap, enum cgen_endian);
2113           break;
2114         default :
2115           fprintf (stderr, "iq2000_cgen_cpu_open: unsupported argument `%d'\n",
2116                    arg_type);
2117           abort (); /* ??? return NULL? */
2118         }
2119       arg_type = va_arg (ap, enum cgen_cpu_open_arg);
2120     }
2121   va_end (ap);
2122
2123   /* Mach unspecified means "all".  */
2124   if (machs == 0)
2125     machs = (1 << MAX_MACHS) - 1;
2126   /* Base mach is always selected.  */
2127   machs |= 1;
2128   if (endian == CGEN_ENDIAN_UNKNOWN)
2129     {
2130       /* ??? If target has only one, could have a default.  */
2131       fprintf (stderr, "iq2000_cgen_cpu_open: no endianness specified\n");
2132       abort ();
2133     }
2134
2135   cd->isas = cgen_bitset_copy (isas);
2136   cd->machs = machs;
2137   cd->endian = endian;
2138   /* FIXME: for the sparc case we can determine insn-endianness statically.
2139      The worry here is where both data and insn endian can be independently
2140      chosen, in which case this function will need another argument.
2141      Actually, will want to allow for more arguments in the future anyway.  */
2142   cd->insn_endian = endian;
2143
2144   /* Table (re)builder.  */
2145   cd->rebuild_tables = iq2000_cgen_rebuild_tables;
2146   iq2000_cgen_rebuild_tables (cd);
2147
2148   /* Default to not allowing signed overflow.  */
2149   cd->signed_overflow_ok_p = 0;
2150   
2151   return (CGEN_CPU_DESC) cd;
2152 }
2153
2154 /* Cover fn to iq2000_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
2155    MACH_NAME is the bfd name of the mach.  */
2156
2157 CGEN_CPU_DESC
2158 iq2000_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
2159 {
2160   return iq2000_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
2161                                CGEN_CPU_OPEN_ENDIAN, endian,
2162                                CGEN_CPU_OPEN_END);
2163 }
2164
2165 /* Close a cpu table.
2166    ??? This can live in a machine independent file, but there's currently
2167    no place to put this file (there's no libcgen).  libopcodes is the wrong
2168    place as some simulator ports use this but they don't use libopcodes.  */
2169
2170 void
2171 iq2000_cgen_cpu_close (CGEN_CPU_DESC cd)
2172 {
2173   unsigned int i;
2174   const CGEN_INSN *insns;
2175
2176   if (cd->macro_insn_table.init_entries)
2177     {
2178       insns = cd->macro_insn_table.init_entries;
2179       for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
2180         if (CGEN_INSN_RX ((insns)))
2181           regfree (CGEN_INSN_RX (insns));
2182     }
2183
2184   if (cd->insn_table.init_entries)
2185     {
2186       insns = cd->insn_table.init_entries;
2187       for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
2188         if (CGEN_INSN_RX (insns))
2189           regfree (CGEN_INSN_RX (insns));
2190     }  
2191
2192   if (cd->macro_insn_table.init_entries)
2193     free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
2194
2195   if (cd->insn_table.init_entries)
2196     free ((CGEN_INSN *) cd->insn_table.init_entries);
2197
2198   if (cd->hw_table.entries)
2199     free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
2200
2201   if (cd->operand_table.entries)
2202     free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
2203
2204   free (cd);
2205 }
2206