1f7cc78ecSespie /* Instruction opcode table for fr30.
2f7cc78ecSespie 
3f7cc78ecSespie THIS FILE IS MACHINE GENERATED WITH CGEN.
4f7cc78ecSespie 
5*d2201f2fSdrahn Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
6f7cc78ecSespie 
7f7cc78ecSespie This file is part of the GNU Binutils and/or GDB, the GNU debugger.
8f7cc78ecSespie 
9f7cc78ecSespie This program is free software; you can redistribute it and/or modify
10f7cc78ecSespie it under the terms of the GNU General Public License as published by
11f7cc78ecSespie the Free Software Foundation; either version 2, or (at your option)
12f7cc78ecSespie any later version.
13f7cc78ecSespie 
14f7cc78ecSespie This program is distributed in the hope that it will be useful,
15f7cc78ecSespie but WITHOUT ANY WARRANTY; without even the implied warranty of
16f7cc78ecSespie MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17f7cc78ecSespie GNU General Public License for more details.
18f7cc78ecSespie 
19f7cc78ecSespie You should have received a copy of the GNU General Public License along
20f7cc78ecSespie with this program; if not, write to the Free Software Foundation, Inc.,
21f7cc78ecSespie 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22f7cc78ecSespie 
23f7cc78ecSespie */
24f7cc78ecSespie 
25f7cc78ecSespie #include "sysdep.h"
26f7cc78ecSespie #include "ansidecl.h"
27f7cc78ecSespie #include "bfd.h"
28f7cc78ecSespie #include "symcat.h"
29f7cc78ecSespie #include "fr30-desc.h"
30f7cc78ecSespie #include "fr30-opc.h"
315f210c2aSfgsch #include "libiberty.h"
32f7cc78ecSespie 
33f7cc78ecSespie /* The hash functions are recorded here to help keep assembler code out of
34f7cc78ecSespie    the disassembler and vice versa.  */
35f7cc78ecSespie 
36f7cc78ecSespie static int asm_hash_insn_p PARAMS ((const CGEN_INSN *));
37f7cc78ecSespie static unsigned int asm_hash_insn PARAMS ((const char *));
38f7cc78ecSespie static int dis_hash_insn_p PARAMS ((const CGEN_INSN *));
39f7cc78ecSespie static unsigned int dis_hash_insn PARAMS ((const char *, CGEN_INSN_INT));
40f7cc78ecSespie 
41f7cc78ecSespie /* Instruction formats.  */
42f7cc78ecSespie 
43*d2201f2fSdrahn #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
44*d2201f2fSdrahn #define F(f) & fr30_cgen_ifld_table[FR30_##f]
45*d2201f2fSdrahn #else
46*d2201f2fSdrahn #define F(f) & fr30_cgen_ifld_table[FR30_/**/f]
47*d2201f2fSdrahn #endif
48f7cc78ecSespie static const CGEN_IFMT ifmt_empty = {
495f210c2aSfgsch   0, 0, 0x0, { { 0 } }
50f7cc78ecSespie };
51f7cc78ecSespie 
52f7cc78ecSespie static const CGEN_IFMT ifmt_add = {
535f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RJ) }, { F (F_RI) }, { 0 } }
54f7cc78ecSespie };
55f7cc78ecSespie 
56f7cc78ecSespie static const CGEN_IFMT ifmt_addi = {
575f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U4) }, { F (F_RI) }, { 0 } }
58f7cc78ecSespie };
59f7cc78ecSespie 
60f7cc78ecSespie static const CGEN_IFMT ifmt_add2 = {
615f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_M4) }, { F (F_RI) }, { 0 } }
62f7cc78ecSespie };
63f7cc78ecSespie 
64f7cc78ecSespie static const CGEN_IFMT ifmt_div0s = {
655f210c2aSfgsch   16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } }
66f7cc78ecSespie };
67f7cc78ecSespie 
68f7cc78ecSespie static const CGEN_IFMT ifmt_div3 = {
695f210c2aSfgsch   16, 16, 0xffff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_OP4) }, { 0 } }
70f7cc78ecSespie };
71f7cc78ecSespie 
72f7cc78ecSespie static const CGEN_IFMT ifmt_ldi8 = {
735f210c2aSfgsch   16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } }
74f7cc78ecSespie };
75f7cc78ecSespie 
76f7cc78ecSespie static const CGEN_IFMT ifmt_ldi20 = {
775f210c2aSfgsch   16, 32, 0xff00, { { F (F_OP1) }, { F (F_I20) }, { F (F_OP2) }, { F (F_RI) }, { 0 } }
78f7cc78ecSespie };
79f7cc78ecSespie 
80f7cc78ecSespie static const CGEN_IFMT ifmt_ldi32 = {
815f210c2aSfgsch   16, 48, 0xfff0, { { F (F_OP1) }, { F (F_I32) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } }
82f7cc78ecSespie };
83f7cc78ecSespie 
84f7cc78ecSespie static const CGEN_IFMT ifmt_ldr14 = {
855f210c2aSfgsch   16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP10) }, { F (F_RI) }, { 0 } }
86f7cc78ecSespie };
87f7cc78ecSespie 
88f7cc78ecSespie static const CGEN_IFMT ifmt_ldr14uh = {
895f210c2aSfgsch   16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP9) }, { F (F_RI) }, { 0 } }
90f7cc78ecSespie };
91f7cc78ecSespie 
92f7cc78ecSespie static const CGEN_IFMT ifmt_ldr14ub = {
935f210c2aSfgsch   16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP8) }, { F (F_RI) }, { 0 } }
94f7cc78ecSespie };
95f7cc78ecSespie 
96f7cc78ecSespie static const CGEN_IFMT ifmt_ldr15 = {
975f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_UDISP6) }, { F (F_RI) }, { 0 } }
98f7cc78ecSespie };
99f7cc78ecSespie 
100f7cc78ecSespie static const CGEN_IFMT ifmt_ldr15dr = {
1015f210c2aSfgsch   16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RS2) }, { 0 } }
102f7cc78ecSespie };
103f7cc78ecSespie 
104f7cc78ecSespie static const CGEN_IFMT ifmt_movdr = {
1055f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RS1) }, { F (F_RI) }, { 0 } }
106f7cc78ecSespie };
107f7cc78ecSespie 
108f7cc78ecSespie static const CGEN_IFMT ifmt_call = {
1095f210c2aSfgsch   16, 16, 0xf800, { { F (F_OP1) }, { F (F_OP5) }, { F (F_REL12) }, { 0 } }
110f7cc78ecSespie };
111f7cc78ecSespie 
112f7cc78ecSespie static const CGEN_IFMT ifmt_int = {
1135f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U8) }, { 0 } }
114f7cc78ecSespie };
115f7cc78ecSespie 
116f7cc78ecSespie static const CGEN_IFMT ifmt_brad = {
1175f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_CC) }, { F (F_REL9) }, { 0 } }
118f7cc78ecSespie };
119f7cc78ecSespie 
120f7cc78ecSespie static const CGEN_IFMT ifmt_dmovr13 = {
1215f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR10) }, { 0 } }
122f7cc78ecSespie };
123f7cc78ecSespie 
124f7cc78ecSespie static const CGEN_IFMT ifmt_dmovr13h = {
1255f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR9) }, { 0 } }
126f7cc78ecSespie };
127f7cc78ecSespie 
128f7cc78ecSespie static const CGEN_IFMT ifmt_dmovr13b = {
1295f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR8) }, { 0 } }
130f7cc78ecSespie };
131f7cc78ecSespie 
132f7cc78ecSespie static const CGEN_IFMT ifmt_copop = {
1335f210c2aSfgsch   16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } }
134f7cc78ecSespie };
135f7cc78ecSespie 
136f7cc78ecSespie static const CGEN_IFMT ifmt_copld = {
1375f210c2aSfgsch   16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RJC) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } }
138f7cc78ecSespie };
139f7cc78ecSespie 
140f7cc78ecSespie static const CGEN_IFMT ifmt_copst = {
1415f210c2aSfgsch   16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_RIC) }, { 0 } }
142f7cc78ecSespie };
143f7cc78ecSespie 
144f7cc78ecSespie static const CGEN_IFMT ifmt_addsp = {
1455f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_S10) }, { 0 } }
146f7cc78ecSespie };
147f7cc78ecSespie 
148f7cc78ecSespie static const CGEN_IFMT ifmt_ldm0 = {
1495f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_LD) }, { 0 } }
150f7cc78ecSespie };
151f7cc78ecSespie 
152f7cc78ecSespie static const CGEN_IFMT ifmt_ldm1 = {
1535f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_LD) }, { 0 } }
154f7cc78ecSespie };
155f7cc78ecSespie 
156f7cc78ecSespie static const CGEN_IFMT ifmt_stm0 = {
1575f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_ST) }, { 0 } }
158f7cc78ecSespie };
159f7cc78ecSespie 
160f7cc78ecSespie static const CGEN_IFMT ifmt_stm1 = {
1615f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_ST) }, { 0 } }
162f7cc78ecSespie };
163f7cc78ecSespie 
164f7cc78ecSespie static const CGEN_IFMT ifmt_enter = {
1655f210c2aSfgsch   16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U10) }, { 0 } }
166f7cc78ecSespie };
167f7cc78ecSespie 
168f7cc78ecSespie #undef F
169f7cc78ecSespie 
170*d2201f2fSdrahn #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
171*d2201f2fSdrahn #define A(a) (1 << CGEN_INSN_##a)
172*d2201f2fSdrahn #else
173*d2201f2fSdrahn #define A(a) (1 << CGEN_INSN_/**/a)
174*d2201f2fSdrahn #endif
175*d2201f2fSdrahn #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
176*d2201f2fSdrahn #define OPERAND(op) FR30_OPERAND_##op
177*d2201f2fSdrahn #else
178*d2201f2fSdrahn #define OPERAND(op) FR30_OPERAND_/**/op
179*d2201f2fSdrahn #endif
180f7cc78ecSespie #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
181f7cc78ecSespie #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
182f7cc78ecSespie 
183f7cc78ecSespie /* The instruction table.  */
184f7cc78ecSespie 
185f7cc78ecSespie static const CGEN_OPCODE fr30_cgen_insn_opcode_table[MAX_INSNS] =
186f7cc78ecSespie {
187f7cc78ecSespie   /* Special null first entry.
188f7cc78ecSespie      A `num' value of zero is thus invalid.
189f7cc78ecSespie      Also, the special `invalid' insn resides here.  */
1905f210c2aSfgsch   { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
191f7cc78ecSespie /* add $Rj,$Ri */
192f7cc78ecSespie   {
193f7cc78ecSespie     { 0, 0, 0, 0 },
194f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
195f7cc78ecSespie     & ifmt_add, { 0xa600 }
196f7cc78ecSespie   },
197f7cc78ecSespie /* add $u4,$Ri */
198f7cc78ecSespie   {
199f7cc78ecSespie     { 0, 0, 0, 0 },
200f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
201f7cc78ecSespie     & ifmt_addi, { 0xa400 }
202f7cc78ecSespie   },
203f7cc78ecSespie /* add2 $m4,$Ri */
204f7cc78ecSespie   {
205f7cc78ecSespie     { 0, 0, 0, 0 },
206f7cc78ecSespie     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
207f7cc78ecSespie     & ifmt_add2, { 0xa500 }
208f7cc78ecSespie   },
209f7cc78ecSespie /* addc $Rj,$Ri */
210f7cc78ecSespie   {
211f7cc78ecSespie     { 0, 0, 0, 0 },
212f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
213f7cc78ecSespie     & ifmt_add, { 0xa700 }
214f7cc78ecSespie   },
215f7cc78ecSespie /* addn $Rj,$Ri */
216f7cc78ecSespie   {
217f7cc78ecSespie     { 0, 0, 0, 0 },
218f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
219f7cc78ecSespie     & ifmt_add, { 0xa200 }
220f7cc78ecSespie   },
221f7cc78ecSespie /* addn $u4,$Ri */
222f7cc78ecSespie   {
223f7cc78ecSespie     { 0, 0, 0, 0 },
224f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
225f7cc78ecSespie     & ifmt_addi, { 0xa000 }
226f7cc78ecSespie   },
227f7cc78ecSespie /* addn2 $m4,$Ri */
228f7cc78ecSespie   {
229f7cc78ecSespie     { 0, 0, 0, 0 },
230f7cc78ecSespie     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
231f7cc78ecSespie     & ifmt_add2, { 0xa100 }
232f7cc78ecSespie   },
233f7cc78ecSespie /* sub $Rj,$Ri */
234f7cc78ecSespie   {
235f7cc78ecSespie     { 0, 0, 0, 0 },
236f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
237f7cc78ecSespie     & ifmt_add, { 0xac00 }
238f7cc78ecSespie   },
239f7cc78ecSespie /* subc $Rj,$Ri */
240f7cc78ecSespie   {
241f7cc78ecSespie     { 0, 0, 0, 0 },
242f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
243f7cc78ecSespie     & ifmt_add, { 0xad00 }
244f7cc78ecSespie   },
245f7cc78ecSespie /* subn $Rj,$Ri */
246f7cc78ecSespie   {
247f7cc78ecSespie     { 0, 0, 0, 0 },
248f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
249f7cc78ecSespie     & ifmt_add, { 0xae00 }
250f7cc78ecSespie   },
251f7cc78ecSespie /* cmp $Rj,$Ri */
252f7cc78ecSespie   {
253f7cc78ecSespie     { 0, 0, 0, 0 },
254f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
255f7cc78ecSespie     & ifmt_add, { 0xaa00 }
256f7cc78ecSespie   },
257f7cc78ecSespie /* cmp $u4,$Ri */
258f7cc78ecSespie   {
259f7cc78ecSespie     { 0, 0, 0, 0 },
260f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
261f7cc78ecSespie     & ifmt_addi, { 0xa800 }
262f7cc78ecSespie   },
263f7cc78ecSespie /* cmp2 $m4,$Ri */
264f7cc78ecSespie   {
265f7cc78ecSespie     { 0, 0, 0, 0 },
266f7cc78ecSespie     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
267f7cc78ecSespie     & ifmt_add2, { 0xa900 }
268f7cc78ecSespie   },
269f7cc78ecSespie /* and $Rj,$Ri */
270f7cc78ecSespie   {
271f7cc78ecSespie     { 0, 0, 0, 0 },
272f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
273f7cc78ecSespie     & ifmt_add, { 0x8200 }
274f7cc78ecSespie   },
275f7cc78ecSespie /* or $Rj,$Ri */
276f7cc78ecSespie   {
277f7cc78ecSespie     { 0, 0, 0, 0 },
278f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
279f7cc78ecSespie     & ifmt_add, { 0x9200 }
280f7cc78ecSespie   },
281f7cc78ecSespie /* eor $Rj,$Ri */
282f7cc78ecSespie   {
283f7cc78ecSespie     { 0, 0, 0, 0 },
284f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
285f7cc78ecSespie     & ifmt_add, { 0x9a00 }
286f7cc78ecSespie   },
287f7cc78ecSespie /* and $Rj,@$Ri */
288f7cc78ecSespie   {
289f7cc78ecSespie     { 0, 0, 0, 0 },
290f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
291f7cc78ecSespie     & ifmt_add, { 0x8400 }
292f7cc78ecSespie   },
293f7cc78ecSespie /* andh $Rj,@$Ri */
294f7cc78ecSespie   {
295f7cc78ecSespie     { 0, 0, 0, 0 },
296f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
297f7cc78ecSespie     & ifmt_add, { 0x8500 }
298f7cc78ecSespie   },
299f7cc78ecSespie /* andb $Rj,@$Ri */
300f7cc78ecSespie   {
301f7cc78ecSespie     { 0, 0, 0, 0 },
302f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
303f7cc78ecSespie     & ifmt_add, { 0x8600 }
304f7cc78ecSespie   },
305f7cc78ecSespie /* or $Rj,@$Ri */
306f7cc78ecSespie   {
307f7cc78ecSespie     { 0, 0, 0, 0 },
308f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
309f7cc78ecSespie     & ifmt_add, { 0x9400 }
310f7cc78ecSespie   },
311f7cc78ecSespie /* orh $Rj,@$Ri */
312f7cc78ecSespie   {
313f7cc78ecSespie     { 0, 0, 0, 0 },
314f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
315f7cc78ecSespie     & ifmt_add, { 0x9500 }
316f7cc78ecSespie   },
317f7cc78ecSespie /* orb $Rj,@$Ri */
318f7cc78ecSespie   {
319f7cc78ecSespie     { 0, 0, 0, 0 },
320f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
321f7cc78ecSespie     & ifmt_add, { 0x9600 }
322f7cc78ecSespie   },
323f7cc78ecSespie /* eor $Rj,@$Ri */
324f7cc78ecSespie   {
325f7cc78ecSespie     { 0, 0, 0, 0 },
326f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
327f7cc78ecSespie     & ifmt_add, { 0x9c00 }
328f7cc78ecSespie   },
329f7cc78ecSespie /* eorh $Rj,@$Ri */
330f7cc78ecSespie   {
331f7cc78ecSespie     { 0, 0, 0, 0 },
332f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
333f7cc78ecSespie     & ifmt_add, { 0x9d00 }
334f7cc78ecSespie   },
335f7cc78ecSespie /* eorb $Rj,@$Ri */
336f7cc78ecSespie   {
337f7cc78ecSespie     { 0, 0, 0, 0 },
338f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
339f7cc78ecSespie     & ifmt_add, { 0x9e00 }
340f7cc78ecSespie   },
341f7cc78ecSespie /* bandl $u4,@$Ri */
342f7cc78ecSespie   {
343f7cc78ecSespie     { 0, 0, 0, 0 },
344f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
345f7cc78ecSespie     & ifmt_addi, { 0x8000 }
346f7cc78ecSespie   },
347f7cc78ecSespie /* borl $u4,@$Ri */
348f7cc78ecSespie   {
349f7cc78ecSespie     { 0, 0, 0, 0 },
350f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
351f7cc78ecSespie     & ifmt_addi, { 0x9000 }
352f7cc78ecSespie   },
353f7cc78ecSespie /* beorl $u4,@$Ri */
354f7cc78ecSespie   {
355f7cc78ecSespie     { 0, 0, 0, 0 },
356f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
357f7cc78ecSespie     & ifmt_addi, { 0x9800 }
358f7cc78ecSespie   },
359f7cc78ecSespie /* bandh $u4,@$Ri */
360f7cc78ecSespie   {
361f7cc78ecSespie     { 0, 0, 0, 0 },
362f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
363f7cc78ecSespie     & ifmt_addi, { 0x8100 }
364f7cc78ecSespie   },
365f7cc78ecSespie /* borh $u4,@$Ri */
366f7cc78ecSespie   {
367f7cc78ecSespie     { 0, 0, 0, 0 },
368f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
369f7cc78ecSespie     & ifmt_addi, { 0x9100 }
370f7cc78ecSespie   },
371f7cc78ecSespie /* beorh $u4,@$Ri */
372f7cc78ecSespie   {
373f7cc78ecSespie     { 0, 0, 0, 0 },
374f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
375f7cc78ecSespie     & ifmt_addi, { 0x9900 }
376f7cc78ecSespie   },
377f7cc78ecSespie /* btstl $u4,@$Ri */
378f7cc78ecSespie   {
379f7cc78ecSespie     { 0, 0, 0, 0 },
380f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
381f7cc78ecSespie     & ifmt_addi, { 0x8800 }
382f7cc78ecSespie   },
383f7cc78ecSespie /* btsth $u4,@$Ri */
384f7cc78ecSespie   {
385f7cc78ecSespie     { 0, 0, 0, 0 },
386f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
387f7cc78ecSespie     & ifmt_addi, { 0x8900 }
388f7cc78ecSespie   },
389f7cc78ecSespie /* mul $Rj,$Ri */
390f7cc78ecSespie   {
391f7cc78ecSespie     { 0, 0, 0, 0 },
392f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
393f7cc78ecSespie     & ifmt_add, { 0xaf00 }
394f7cc78ecSespie   },
395f7cc78ecSespie /* mulu $Rj,$Ri */
396f7cc78ecSespie   {
397f7cc78ecSespie     { 0, 0, 0, 0 },
398f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
399f7cc78ecSespie     & ifmt_add, { 0xab00 }
400f7cc78ecSespie   },
401f7cc78ecSespie /* mulh $Rj,$Ri */
402f7cc78ecSespie   {
403f7cc78ecSespie     { 0, 0, 0, 0 },
404f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
405f7cc78ecSespie     & ifmt_add, { 0xbf00 }
406f7cc78ecSespie   },
407f7cc78ecSespie /* muluh $Rj,$Ri */
408f7cc78ecSespie   {
409f7cc78ecSespie     { 0, 0, 0, 0 },
410f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
411f7cc78ecSespie     & ifmt_add, { 0xbb00 }
412f7cc78ecSespie   },
413f7cc78ecSespie /* div0s $Ri */
414f7cc78ecSespie   {
415f7cc78ecSespie     { 0, 0, 0, 0 },
416f7cc78ecSespie     { { MNEM, ' ', OP (RI), 0 } },
417f7cc78ecSespie     & ifmt_div0s, { 0x9740 }
418f7cc78ecSespie   },
419f7cc78ecSespie /* div0u $Ri */
420f7cc78ecSespie   {
421f7cc78ecSespie     { 0, 0, 0, 0 },
422f7cc78ecSespie     { { MNEM, ' ', OP (RI), 0 } },
423f7cc78ecSespie     & ifmt_div0s, { 0x9750 }
424f7cc78ecSespie   },
425f7cc78ecSespie /* div1 $Ri */
426f7cc78ecSespie   {
427f7cc78ecSespie     { 0, 0, 0, 0 },
428f7cc78ecSespie     { { MNEM, ' ', OP (RI), 0 } },
429f7cc78ecSespie     & ifmt_div0s, { 0x9760 }
430f7cc78ecSespie   },
431f7cc78ecSespie /* div2 $Ri */
432f7cc78ecSespie   {
433f7cc78ecSespie     { 0, 0, 0, 0 },
434f7cc78ecSespie     { { MNEM, ' ', OP (RI), 0 } },
435f7cc78ecSespie     & ifmt_div0s, { 0x9770 }
436f7cc78ecSespie   },
437f7cc78ecSespie /* div3 */
438f7cc78ecSespie   {
439f7cc78ecSespie     { 0, 0, 0, 0 },
440f7cc78ecSespie     { { MNEM, 0 } },
441f7cc78ecSespie     & ifmt_div3, { 0x9f60 }
442f7cc78ecSespie   },
443f7cc78ecSespie /* div4s */
444f7cc78ecSespie   {
445f7cc78ecSespie     { 0, 0, 0, 0 },
446f7cc78ecSespie     { { MNEM, 0 } },
447f7cc78ecSespie     & ifmt_div3, { 0x9f70 }
448f7cc78ecSespie   },
449f7cc78ecSespie /* lsl $Rj,$Ri */
450f7cc78ecSespie   {
451f7cc78ecSespie     { 0, 0, 0, 0 },
452f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
453f7cc78ecSespie     & ifmt_add, { 0xb600 }
454f7cc78ecSespie   },
455f7cc78ecSespie /* lsl $u4,$Ri */
456f7cc78ecSespie   {
457f7cc78ecSespie     { 0, 0, 0, 0 },
458f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
459f7cc78ecSespie     & ifmt_addi, { 0xb400 }
460f7cc78ecSespie   },
461f7cc78ecSespie /* lsl2 $u4,$Ri */
462f7cc78ecSespie   {
463f7cc78ecSespie     { 0, 0, 0, 0 },
464f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
465f7cc78ecSespie     & ifmt_addi, { 0xb500 }
466f7cc78ecSespie   },
467f7cc78ecSespie /* lsr $Rj,$Ri */
468f7cc78ecSespie   {
469f7cc78ecSespie     { 0, 0, 0, 0 },
470f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
471f7cc78ecSespie     & ifmt_add, { 0xb200 }
472f7cc78ecSespie   },
473f7cc78ecSespie /* lsr $u4,$Ri */
474f7cc78ecSespie   {
475f7cc78ecSespie     { 0, 0, 0, 0 },
476f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
477f7cc78ecSespie     & ifmt_addi, { 0xb000 }
478f7cc78ecSespie   },
479f7cc78ecSespie /* lsr2 $u4,$Ri */
480f7cc78ecSespie   {
481f7cc78ecSespie     { 0, 0, 0, 0 },
482f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
483f7cc78ecSespie     & ifmt_addi, { 0xb100 }
484f7cc78ecSespie   },
485f7cc78ecSespie /* asr $Rj,$Ri */
486f7cc78ecSespie   {
487f7cc78ecSespie     { 0, 0, 0, 0 },
488f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
489f7cc78ecSespie     & ifmt_add, { 0xba00 }
490f7cc78ecSespie   },
491f7cc78ecSespie /* asr $u4,$Ri */
492f7cc78ecSespie   {
493f7cc78ecSespie     { 0, 0, 0, 0 },
494f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
495f7cc78ecSespie     & ifmt_addi, { 0xb800 }
496f7cc78ecSespie   },
497f7cc78ecSespie /* asr2 $u4,$Ri */
498f7cc78ecSespie   {
499f7cc78ecSespie     { 0, 0, 0, 0 },
500f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
501f7cc78ecSespie     & ifmt_addi, { 0xb900 }
502f7cc78ecSespie   },
503f7cc78ecSespie /* ldi:8 $i8,$Ri */
504f7cc78ecSespie   {
505f7cc78ecSespie     { 0, 0, 0, 0 },
506f7cc78ecSespie     { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
507f7cc78ecSespie     & ifmt_ldi8, { 0xc000 }
508f7cc78ecSespie   },
509f7cc78ecSespie /* ldi:20 $i20,$Ri */
510f7cc78ecSespie   {
511f7cc78ecSespie     { 0, 0, 0, 0 },
512f7cc78ecSespie     { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
513f7cc78ecSespie     & ifmt_ldi20, { 0x9b00 }
514f7cc78ecSespie   },
515f7cc78ecSespie /* ldi:32 $i32,$Ri */
516f7cc78ecSespie   {
517f7cc78ecSespie     { 0, 0, 0, 0 },
518f7cc78ecSespie     { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
519f7cc78ecSespie     & ifmt_ldi32, { 0x9f80 }
520f7cc78ecSespie   },
521f7cc78ecSespie /* ld @$Rj,$Ri */
522f7cc78ecSespie   {
523f7cc78ecSespie     { 0, 0, 0, 0 },
524f7cc78ecSespie     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
525f7cc78ecSespie     & ifmt_add, { 0x400 }
526f7cc78ecSespie   },
527f7cc78ecSespie /* lduh @$Rj,$Ri */
528f7cc78ecSespie   {
529f7cc78ecSespie     { 0, 0, 0, 0 },
530f7cc78ecSespie     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
531f7cc78ecSespie     & ifmt_add, { 0x500 }
532f7cc78ecSespie   },
533f7cc78ecSespie /* ldub @$Rj,$Ri */
534f7cc78ecSespie   {
535f7cc78ecSespie     { 0, 0, 0, 0 },
536f7cc78ecSespie     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
537f7cc78ecSespie     & ifmt_add, { 0x600 }
538f7cc78ecSespie   },
539f7cc78ecSespie /* ld @($R13,$Rj),$Ri */
540f7cc78ecSespie   {
541f7cc78ecSespie     { 0, 0, 0, 0 },
542f7cc78ecSespie     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
543f7cc78ecSespie     & ifmt_add, { 0x0 }
544f7cc78ecSespie   },
545f7cc78ecSespie /* lduh @($R13,$Rj),$Ri */
546f7cc78ecSespie   {
547f7cc78ecSespie     { 0, 0, 0, 0 },
548f7cc78ecSespie     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
549f7cc78ecSespie     & ifmt_add, { 0x100 }
550f7cc78ecSespie   },
551f7cc78ecSespie /* ldub @($R13,$Rj),$Ri */
552f7cc78ecSespie   {
553f7cc78ecSespie     { 0, 0, 0, 0 },
554f7cc78ecSespie     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
555f7cc78ecSespie     & ifmt_add, { 0x200 }
556f7cc78ecSespie   },
557f7cc78ecSespie /* ld @($R14,$disp10),$Ri */
558f7cc78ecSespie   {
559f7cc78ecSespie     { 0, 0, 0, 0 },
560f7cc78ecSespie     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } },
561f7cc78ecSespie     & ifmt_ldr14, { 0x2000 }
562f7cc78ecSespie   },
563f7cc78ecSespie /* lduh @($R14,$disp9),$Ri */
564f7cc78ecSespie   {
565f7cc78ecSespie     { 0, 0, 0, 0 },
566f7cc78ecSespie     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } },
567f7cc78ecSespie     & ifmt_ldr14uh, { 0x4000 }
568f7cc78ecSespie   },
569f7cc78ecSespie /* ldub @($R14,$disp8),$Ri */
570f7cc78ecSespie   {
571f7cc78ecSespie     { 0, 0, 0, 0 },
572f7cc78ecSespie     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } },
573f7cc78ecSespie     & ifmt_ldr14ub, { 0x6000 }
574f7cc78ecSespie   },
575f7cc78ecSespie /* ld @($R15,$udisp6),$Ri */
576f7cc78ecSespie   {
577f7cc78ecSespie     { 0, 0, 0, 0 },
578f7cc78ecSespie     { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } },
579f7cc78ecSespie     & ifmt_ldr15, { 0x300 }
580f7cc78ecSespie   },
581f7cc78ecSespie /* ld @$R15+,$Ri */
582f7cc78ecSespie   {
583f7cc78ecSespie     { 0, 0, 0, 0 },
584f7cc78ecSespie     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } },
585f7cc78ecSespie     & ifmt_div0s, { 0x700 }
586f7cc78ecSespie   },
587f7cc78ecSespie /* ld @$R15+,$Rs2 */
588f7cc78ecSespie   {
589f7cc78ecSespie     { 0, 0, 0, 0 },
590f7cc78ecSespie     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } },
591f7cc78ecSespie     & ifmt_ldr15dr, { 0x780 }
592f7cc78ecSespie   },
593f7cc78ecSespie /* ld @$R15+,$ps */
594f7cc78ecSespie   {
595f7cc78ecSespie     { 0, 0, 0, 0 },
596f7cc78ecSespie     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } },
597f7cc78ecSespie     & ifmt_div3, { 0x790 }
598f7cc78ecSespie   },
599f7cc78ecSespie /* st $Ri,@$Rj */
600f7cc78ecSespie   {
601f7cc78ecSespie     { 0, 0, 0, 0 },
602f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
603f7cc78ecSespie     & ifmt_add, { 0x1400 }
604f7cc78ecSespie   },
605f7cc78ecSespie /* sth $Ri,@$Rj */
606f7cc78ecSespie   {
607f7cc78ecSespie     { 0, 0, 0, 0 },
608f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
609f7cc78ecSespie     & ifmt_add, { 0x1500 }
610f7cc78ecSespie   },
611f7cc78ecSespie /* stb $Ri,@$Rj */
612f7cc78ecSespie   {
613f7cc78ecSespie     { 0, 0, 0, 0 },
614f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
615f7cc78ecSespie     & ifmt_add, { 0x1600 }
616f7cc78ecSespie   },
617f7cc78ecSespie /* st $Ri,@($R13,$Rj) */
618f7cc78ecSespie   {
619f7cc78ecSespie     { 0, 0, 0, 0 },
620f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
621f7cc78ecSespie     & ifmt_add, { 0x1000 }
622f7cc78ecSespie   },
623f7cc78ecSespie /* sth $Ri,@($R13,$Rj) */
624f7cc78ecSespie   {
625f7cc78ecSespie     { 0, 0, 0, 0 },
626f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
627f7cc78ecSespie     & ifmt_add, { 0x1100 }
628f7cc78ecSespie   },
629f7cc78ecSespie /* stb $Ri,@($R13,$Rj) */
630f7cc78ecSespie   {
631f7cc78ecSespie     { 0, 0, 0, 0 },
632f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
633f7cc78ecSespie     & ifmt_add, { 0x1200 }
634f7cc78ecSespie   },
635f7cc78ecSespie /* st $Ri,@($R14,$disp10) */
636f7cc78ecSespie   {
637f7cc78ecSespie     { 0, 0, 0, 0 },
638f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } },
639f7cc78ecSespie     & ifmt_ldr14, { 0x3000 }
640f7cc78ecSespie   },
641f7cc78ecSespie /* sth $Ri,@($R14,$disp9) */
642f7cc78ecSespie   {
643f7cc78ecSespie     { 0, 0, 0, 0 },
644f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } },
645f7cc78ecSespie     & ifmt_ldr14uh, { 0x5000 }
646f7cc78ecSespie   },
647f7cc78ecSespie /* stb $Ri,@($R14,$disp8) */
648f7cc78ecSespie   {
649f7cc78ecSespie     { 0, 0, 0, 0 },
650f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } },
651f7cc78ecSespie     & ifmt_ldr14ub, { 0x7000 }
652f7cc78ecSespie   },
653f7cc78ecSespie /* st $Ri,@($R15,$udisp6) */
654f7cc78ecSespie   {
655f7cc78ecSespie     { 0, 0, 0, 0 },
656f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } },
657f7cc78ecSespie     & ifmt_ldr15, { 0x1300 }
658f7cc78ecSespie   },
659f7cc78ecSespie /* st $Ri,@-$R15 */
660f7cc78ecSespie   {
661f7cc78ecSespie     { 0, 0, 0, 0 },
662f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } },
663f7cc78ecSespie     & ifmt_div0s, { 0x1700 }
664f7cc78ecSespie   },
665f7cc78ecSespie /* st $Rs2,@-$R15 */
666f7cc78ecSespie   {
667f7cc78ecSespie     { 0, 0, 0, 0 },
668f7cc78ecSespie     { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } },
669f7cc78ecSespie     & ifmt_ldr15dr, { 0x1780 }
670f7cc78ecSespie   },
671f7cc78ecSespie /* st $ps,@-$R15 */
672f7cc78ecSespie   {
673f7cc78ecSespie     { 0, 0, 0, 0 },
674f7cc78ecSespie     { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } },
675f7cc78ecSespie     & ifmt_div3, { 0x1790 }
676f7cc78ecSespie   },
677f7cc78ecSespie /* mov $Rj,$Ri */
678f7cc78ecSespie   {
679f7cc78ecSespie     { 0, 0, 0, 0 },
680f7cc78ecSespie     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
681f7cc78ecSespie     & ifmt_add, { 0x8b00 }
682f7cc78ecSespie   },
683f7cc78ecSespie /* mov $Rs1,$Ri */
684f7cc78ecSespie   {
685f7cc78ecSespie     { 0, 0, 0, 0 },
686f7cc78ecSespie     { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
687f7cc78ecSespie     & ifmt_movdr, { 0xb700 }
688f7cc78ecSespie   },
689f7cc78ecSespie /* mov $ps,$Ri */
690f7cc78ecSespie   {
691f7cc78ecSespie     { 0, 0, 0, 0 },
692f7cc78ecSespie     { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } },
693f7cc78ecSespie     & ifmt_div0s, { 0x1710 }
694f7cc78ecSespie   },
695f7cc78ecSespie /* mov $Ri,$Rs1 */
696f7cc78ecSespie   {
697f7cc78ecSespie     { 0, 0, 0, 0 },
698f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
699f7cc78ecSespie     & ifmt_movdr, { 0xb300 }
700f7cc78ecSespie   },
701f7cc78ecSespie /* mov $Ri,$ps */
702f7cc78ecSespie   {
703f7cc78ecSespie     { 0, 0, 0, 0 },
704f7cc78ecSespie     { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } },
705f7cc78ecSespie     & ifmt_div0s, { 0x710 }
706f7cc78ecSespie   },
707f7cc78ecSespie /* jmp @$Ri */
708f7cc78ecSespie   {
709f7cc78ecSespie     { 0, 0, 0, 0 },
710f7cc78ecSespie     { { MNEM, ' ', '@', OP (RI), 0 } },
711f7cc78ecSespie     & ifmt_div0s, { 0x9700 }
712f7cc78ecSespie   },
713f7cc78ecSespie /* jmp:d @$Ri */
714f7cc78ecSespie   {
715f7cc78ecSespie     { 0, 0, 0, 0 },
716f7cc78ecSespie     { { MNEM, ' ', '@', OP (RI), 0 } },
717f7cc78ecSespie     & ifmt_div0s, { 0x9f00 }
718f7cc78ecSespie   },
719f7cc78ecSespie /* call @$Ri */
720f7cc78ecSespie   {
721f7cc78ecSespie     { 0, 0, 0, 0 },
722f7cc78ecSespie     { { MNEM, ' ', '@', OP (RI), 0 } },
723f7cc78ecSespie     & ifmt_div0s, { 0x9710 }
724f7cc78ecSespie   },
725f7cc78ecSespie /* call:d @$Ri */
726f7cc78ecSespie   {
727f7cc78ecSespie     { 0, 0, 0, 0 },
728f7cc78ecSespie     { { MNEM, ' ', '@', OP (RI), 0 } },
729f7cc78ecSespie     & ifmt_div0s, { 0x9f10 }
730f7cc78ecSespie   },
731f7cc78ecSespie /* call $label12 */
732f7cc78ecSespie   {
733f7cc78ecSespie     { 0, 0, 0, 0 },
734f7cc78ecSespie     { { MNEM, ' ', OP (LABEL12), 0 } },
735f7cc78ecSespie     & ifmt_call, { 0xd000 }
736f7cc78ecSespie   },
737f7cc78ecSespie /* call:d $label12 */
738f7cc78ecSespie   {
739f7cc78ecSespie     { 0, 0, 0, 0 },
740f7cc78ecSespie     { { MNEM, ' ', OP (LABEL12), 0 } },
741f7cc78ecSespie     & ifmt_call, { 0xd800 }
742f7cc78ecSespie   },
743f7cc78ecSespie /* ret */
744f7cc78ecSespie   {
745f7cc78ecSespie     { 0, 0, 0, 0 },
746f7cc78ecSespie     { { MNEM, 0 } },
747f7cc78ecSespie     & ifmt_div3, { 0x9720 }
748f7cc78ecSespie   },
749f7cc78ecSespie /* ret:d */
750f7cc78ecSespie   {
751f7cc78ecSespie     { 0, 0, 0, 0 },
752f7cc78ecSespie     { { MNEM, 0 } },
753f7cc78ecSespie     & ifmt_div3, { 0x9f20 }
754f7cc78ecSespie   },
755f7cc78ecSespie /* int $u8 */
756f7cc78ecSespie   {
757f7cc78ecSespie     { 0, 0, 0, 0 },
758f7cc78ecSespie     { { MNEM, ' ', OP (U8), 0 } },
759f7cc78ecSespie     & ifmt_int, { 0x1f00 }
760f7cc78ecSespie   },
761f7cc78ecSespie /* inte */
762f7cc78ecSespie   {
763f7cc78ecSespie     { 0, 0, 0, 0 },
764f7cc78ecSespie     { { MNEM, 0 } },
765f7cc78ecSespie     & ifmt_div3, { 0x9f30 }
766f7cc78ecSespie   },
767f7cc78ecSespie /* reti */
768f7cc78ecSespie   {
769f7cc78ecSespie     { 0, 0, 0, 0 },
770f7cc78ecSespie     { { MNEM, 0 } },
771f7cc78ecSespie     & ifmt_div3, { 0x9730 }
772f7cc78ecSespie   },
773f7cc78ecSespie /* bra:d $label9 */
774f7cc78ecSespie   {
775f7cc78ecSespie     { 0, 0, 0, 0 },
776f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
777f7cc78ecSespie     & ifmt_brad, { 0xf000 }
778f7cc78ecSespie   },
779f7cc78ecSespie /* bra $label9 */
780f7cc78ecSespie   {
781f7cc78ecSespie     { 0, 0, 0, 0 },
782f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
783f7cc78ecSespie     & ifmt_brad, { 0xe000 }
784f7cc78ecSespie   },
785f7cc78ecSespie /* bno:d $label9 */
786f7cc78ecSespie   {
787f7cc78ecSespie     { 0, 0, 0, 0 },
788f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
789f7cc78ecSespie     & ifmt_brad, { 0xf100 }
790f7cc78ecSespie   },
791f7cc78ecSespie /* bno $label9 */
792f7cc78ecSespie   {
793f7cc78ecSespie     { 0, 0, 0, 0 },
794f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
795f7cc78ecSespie     & ifmt_brad, { 0xe100 }
796f7cc78ecSespie   },
797f7cc78ecSespie /* beq:d $label9 */
798f7cc78ecSespie   {
799f7cc78ecSespie     { 0, 0, 0, 0 },
800f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
801f7cc78ecSespie     & ifmt_brad, { 0xf200 }
802f7cc78ecSespie   },
803f7cc78ecSespie /* beq $label9 */
804f7cc78ecSespie   {
805f7cc78ecSespie     { 0, 0, 0, 0 },
806f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
807f7cc78ecSespie     & ifmt_brad, { 0xe200 }
808f7cc78ecSespie   },
809f7cc78ecSespie /* bne:d $label9 */
810f7cc78ecSespie   {
811f7cc78ecSespie     { 0, 0, 0, 0 },
812f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
813f7cc78ecSespie     & ifmt_brad, { 0xf300 }
814f7cc78ecSespie   },
815f7cc78ecSespie /* bne $label9 */
816f7cc78ecSespie   {
817f7cc78ecSespie     { 0, 0, 0, 0 },
818f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
819f7cc78ecSespie     & ifmt_brad, { 0xe300 }
820f7cc78ecSespie   },
821f7cc78ecSespie /* bc:d $label9 */
822f7cc78ecSespie   {
823f7cc78ecSespie     { 0, 0, 0, 0 },
824f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
825f7cc78ecSespie     & ifmt_brad, { 0xf400 }
826f7cc78ecSespie   },
827f7cc78ecSespie /* bc $label9 */
828f7cc78ecSespie   {
829f7cc78ecSespie     { 0, 0, 0, 0 },
830f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
831f7cc78ecSespie     & ifmt_brad, { 0xe400 }
832f7cc78ecSespie   },
833f7cc78ecSespie /* bnc:d $label9 */
834f7cc78ecSespie   {
835f7cc78ecSespie     { 0, 0, 0, 0 },
836f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
837f7cc78ecSespie     & ifmt_brad, { 0xf500 }
838f7cc78ecSespie   },
839f7cc78ecSespie /* bnc $label9 */
840f7cc78ecSespie   {
841f7cc78ecSespie     { 0, 0, 0, 0 },
842f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
843f7cc78ecSespie     & ifmt_brad, { 0xe500 }
844f7cc78ecSespie   },
845f7cc78ecSespie /* bn:d $label9 */
846f7cc78ecSespie   {
847f7cc78ecSespie     { 0, 0, 0, 0 },
848f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
849f7cc78ecSespie     & ifmt_brad, { 0xf600 }
850f7cc78ecSespie   },
851f7cc78ecSespie /* bn $label9 */
852f7cc78ecSespie   {
853f7cc78ecSespie     { 0, 0, 0, 0 },
854f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
855f7cc78ecSespie     & ifmt_brad, { 0xe600 }
856f7cc78ecSespie   },
857f7cc78ecSespie /* bp:d $label9 */
858f7cc78ecSespie   {
859f7cc78ecSespie     { 0, 0, 0, 0 },
860f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
861f7cc78ecSespie     & ifmt_brad, { 0xf700 }
862f7cc78ecSespie   },
863f7cc78ecSespie /* bp $label9 */
864f7cc78ecSespie   {
865f7cc78ecSespie     { 0, 0, 0, 0 },
866f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
867f7cc78ecSespie     & ifmt_brad, { 0xe700 }
868f7cc78ecSespie   },
869f7cc78ecSespie /* bv:d $label9 */
870f7cc78ecSespie   {
871f7cc78ecSespie     { 0, 0, 0, 0 },
872f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
873f7cc78ecSespie     & ifmt_brad, { 0xf800 }
874f7cc78ecSespie   },
875f7cc78ecSespie /* bv $label9 */
876f7cc78ecSespie   {
877f7cc78ecSespie     { 0, 0, 0, 0 },
878f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
879f7cc78ecSespie     & ifmt_brad, { 0xe800 }
880f7cc78ecSespie   },
881f7cc78ecSespie /* bnv:d $label9 */
882f7cc78ecSespie   {
883f7cc78ecSespie     { 0, 0, 0, 0 },
884f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
885f7cc78ecSespie     & ifmt_brad, { 0xf900 }
886f7cc78ecSespie   },
887f7cc78ecSespie /* bnv $label9 */
888f7cc78ecSespie   {
889f7cc78ecSespie     { 0, 0, 0, 0 },
890f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
891f7cc78ecSespie     & ifmt_brad, { 0xe900 }
892f7cc78ecSespie   },
893f7cc78ecSespie /* blt:d $label9 */
894f7cc78ecSespie   {
895f7cc78ecSespie     { 0, 0, 0, 0 },
896f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
897f7cc78ecSespie     & ifmt_brad, { 0xfa00 }
898f7cc78ecSespie   },
899f7cc78ecSespie /* blt $label9 */
900f7cc78ecSespie   {
901f7cc78ecSespie     { 0, 0, 0, 0 },
902f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
903f7cc78ecSespie     & ifmt_brad, { 0xea00 }
904f7cc78ecSespie   },
905f7cc78ecSespie /* bge:d $label9 */
906f7cc78ecSespie   {
907f7cc78ecSespie     { 0, 0, 0, 0 },
908f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
909f7cc78ecSespie     & ifmt_brad, { 0xfb00 }
910f7cc78ecSespie   },
911f7cc78ecSespie /* bge $label9 */
912f7cc78ecSespie   {
913f7cc78ecSespie     { 0, 0, 0, 0 },
914f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
915f7cc78ecSespie     & ifmt_brad, { 0xeb00 }
916f7cc78ecSespie   },
917f7cc78ecSespie /* ble:d $label9 */
918f7cc78ecSespie   {
919f7cc78ecSespie     { 0, 0, 0, 0 },
920f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
921f7cc78ecSespie     & ifmt_brad, { 0xfc00 }
922f7cc78ecSespie   },
923f7cc78ecSespie /* ble $label9 */
924f7cc78ecSespie   {
925f7cc78ecSespie     { 0, 0, 0, 0 },
926f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
927f7cc78ecSespie     & ifmt_brad, { 0xec00 }
928f7cc78ecSespie   },
929f7cc78ecSespie /* bgt:d $label9 */
930f7cc78ecSespie   {
931f7cc78ecSespie     { 0, 0, 0, 0 },
932f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
933f7cc78ecSespie     & ifmt_brad, { 0xfd00 }
934f7cc78ecSespie   },
935f7cc78ecSespie /* bgt $label9 */
936f7cc78ecSespie   {
937f7cc78ecSespie     { 0, 0, 0, 0 },
938f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
939f7cc78ecSespie     & ifmt_brad, { 0xed00 }
940f7cc78ecSespie   },
941f7cc78ecSespie /* bls:d $label9 */
942f7cc78ecSespie   {
943f7cc78ecSespie     { 0, 0, 0, 0 },
944f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
945f7cc78ecSespie     & ifmt_brad, { 0xfe00 }
946f7cc78ecSespie   },
947f7cc78ecSespie /* bls $label9 */
948f7cc78ecSespie   {
949f7cc78ecSespie     { 0, 0, 0, 0 },
950f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
951f7cc78ecSespie     & ifmt_brad, { 0xee00 }
952f7cc78ecSespie   },
953f7cc78ecSespie /* bhi:d $label9 */
954f7cc78ecSespie   {
955f7cc78ecSespie     { 0, 0, 0, 0 },
956f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
957f7cc78ecSespie     & ifmt_brad, { 0xff00 }
958f7cc78ecSespie   },
959f7cc78ecSespie /* bhi $label9 */
960f7cc78ecSespie   {
961f7cc78ecSespie     { 0, 0, 0, 0 },
962f7cc78ecSespie     { { MNEM, ' ', OP (LABEL9), 0 } },
963f7cc78ecSespie     & ifmt_brad, { 0xef00 }
964f7cc78ecSespie   },
965f7cc78ecSespie /* dmov $R13,@$dir10 */
966f7cc78ecSespie   {
967f7cc78ecSespie     { 0, 0, 0, 0 },
968f7cc78ecSespie     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } },
969f7cc78ecSespie     & ifmt_dmovr13, { 0x1800 }
970f7cc78ecSespie   },
971f7cc78ecSespie /* dmovh $R13,@$dir9 */
972f7cc78ecSespie   {
973f7cc78ecSespie     { 0, 0, 0, 0 },
974f7cc78ecSespie     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } },
975f7cc78ecSespie     & ifmt_dmovr13h, { 0x1900 }
976f7cc78ecSespie   },
977f7cc78ecSespie /* dmovb $R13,@$dir8 */
978f7cc78ecSespie   {
979f7cc78ecSespie     { 0, 0, 0, 0 },
980f7cc78ecSespie     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } },
981f7cc78ecSespie     & ifmt_dmovr13b, { 0x1a00 }
982f7cc78ecSespie   },
983f7cc78ecSespie /* dmov @$R13+,@$dir10 */
984f7cc78ecSespie   {
985f7cc78ecSespie     { 0, 0, 0, 0 },
986f7cc78ecSespie     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } },
987f7cc78ecSespie     & ifmt_dmovr13, { 0x1c00 }
988f7cc78ecSespie   },
989f7cc78ecSespie /* dmovh @$R13+,@$dir9 */
990f7cc78ecSespie   {
991f7cc78ecSespie     { 0, 0, 0, 0 },
992f7cc78ecSespie     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } },
993f7cc78ecSespie     & ifmt_dmovr13h, { 0x1d00 }
994f7cc78ecSespie   },
995f7cc78ecSespie /* dmovb @$R13+,@$dir8 */
996f7cc78ecSespie   {
997f7cc78ecSespie     { 0, 0, 0, 0 },
998f7cc78ecSespie     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } },
999f7cc78ecSespie     & ifmt_dmovr13b, { 0x1e00 }
1000f7cc78ecSespie   },
1001f7cc78ecSespie /* dmov @$R15+,@$dir10 */
1002f7cc78ecSespie   {
1003f7cc78ecSespie     { 0, 0, 0, 0 },
1004f7cc78ecSespie     { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } },
1005f7cc78ecSespie     & ifmt_dmovr13, { 0x1b00 }
1006f7cc78ecSespie   },
1007f7cc78ecSespie /* dmov @$dir10,$R13 */
1008f7cc78ecSespie   {
1009f7cc78ecSespie     { 0, 0, 0, 0 },
1010f7cc78ecSespie     { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } },
1011f7cc78ecSespie     & ifmt_dmovr13, { 0x800 }
1012f7cc78ecSespie   },
1013f7cc78ecSespie /* dmovh @$dir9,$R13 */
1014f7cc78ecSespie   {
1015f7cc78ecSespie     { 0, 0, 0, 0 },
1016f7cc78ecSespie     { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } },
1017f7cc78ecSespie     & ifmt_dmovr13h, { 0x900 }
1018f7cc78ecSespie   },
1019f7cc78ecSespie /* dmovb @$dir8,$R13 */
1020f7cc78ecSespie   {
1021f7cc78ecSespie     { 0, 0, 0, 0 },
1022f7cc78ecSespie     { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } },
1023f7cc78ecSespie     & ifmt_dmovr13b, { 0xa00 }
1024f7cc78ecSespie   },
1025f7cc78ecSespie /* dmov @$dir10,@$R13+ */
1026f7cc78ecSespie   {
1027f7cc78ecSespie     { 0, 0, 0, 0 },
1028f7cc78ecSespie     { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } },
1029f7cc78ecSespie     & ifmt_dmovr13, { 0xc00 }
1030f7cc78ecSespie   },
1031f7cc78ecSespie /* dmovh @$dir9,@$R13+ */
1032f7cc78ecSespie   {
1033f7cc78ecSespie     { 0, 0, 0, 0 },
1034f7cc78ecSespie     { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } },
1035f7cc78ecSespie     & ifmt_dmovr13h, { 0xd00 }
1036f7cc78ecSespie   },
1037f7cc78ecSespie /* dmovb @$dir8,@$R13+ */
1038f7cc78ecSespie   {
1039f7cc78ecSespie     { 0, 0, 0, 0 },
1040f7cc78ecSespie     { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } },
1041f7cc78ecSespie     & ifmt_dmovr13b, { 0xe00 }
1042f7cc78ecSespie   },
1043f7cc78ecSespie /* dmov @$dir10,@-$R15 */
1044f7cc78ecSespie   {
1045f7cc78ecSespie     { 0, 0, 0, 0 },
1046f7cc78ecSespie     { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } },
1047f7cc78ecSespie     & ifmt_dmovr13, { 0xb00 }
1048f7cc78ecSespie   },
1049f7cc78ecSespie /* ldres @$Ri+,$u4 */
1050f7cc78ecSespie   {
1051f7cc78ecSespie     { 0, 0, 0, 0 },
1052f7cc78ecSespie     { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
1053f7cc78ecSespie     & ifmt_addi, { 0xbc00 }
1054f7cc78ecSespie   },
1055f7cc78ecSespie /* stres $u4,@$Ri+ */
1056f7cc78ecSespie   {
1057f7cc78ecSespie     { 0, 0, 0, 0 },
1058f7cc78ecSespie     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
1059f7cc78ecSespie     & ifmt_addi, { 0xbd00 }
1060f7cc78ecSespie   },
1061f7cc78ecSespie /* copop $u4c,$ccc,$CRj,$CRi */
1062f7cc78ecSespie   {
1063f7cc78ecSespie     { 0, 0, 0, 0 },
1064f7cc78ecSespie     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } },
1065f7cc78ecSespie     & ifmt_copop, { 0x9fc0 }
1066f7cc78ecSespie   },
1067f7cc78ecSespie /* copld $u4c,$ccc,$Rjc,$CRi */
1068f7cc78ecSespie   {
1069f7cc78ecSespie     { 0, 0, 0, 0 },
1070f7cc78ecSespie     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } },
1071f7cc78ecSespie     & ifmt_copld, { 0x9fd0 }
1072f7cc78ecSespie   },
1073f7cc78ecSespie /* copst $u4c,$ccc,$CRj,$Ric */
1074f7cc78ecSespie   {
1075f7cc78ecSespie     { 0, 0, 0, 0 },
1076f7cc78ecSespie     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
1077f7cc78ecSespie     & ifmt_copst, { 0x9fe0 }
1078f7cc78ecSespie   },
1079f7cc78ecSespie /* copsv $u4c,$ccc,$CRj,$Ric */
1080f7cc78ecSespie   {
1081f7cc78ecSespie     { 0, 0, 0, 0 },
1082f7cc78ecSespie     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
1083f7cc78ecSespie     & ifmt_copst, { 0x9ff0 }
1084f7cc78ecSespie   },
1085f7cc78ecSespie /* nop */
1086f7cc78ecSespie   {
1087f7cc78ecSespie     { 0, 0, 0, 0 },
1088f7cc78ecSespie     { { MNEM, 0 } },
1089f7cc78ecSespie     & ifmt_div3, { 0x9fa0 }
1090f7cc78ecSespie   },
1091f7cc78ecSespie /* andccr $u8 */
1092f7cc78ecSespie   {
1093f7cc78ecSespie     { 0, 0, 0, 0 },
1094f7cc78ecSespie     { { MNEM, ' ', OP (U8), 0 } },
1095f7cc78ecSespie     & ifmt_int, { 0x8300 }
1096f7cc78ecSespie   },
1097f7cc78ecSespie /* orccr $u8 */
1098f7cc78ecSespie   {
1099f7cc78ecSespie     { 0, 0, 0, 0 },
1100f7cc78ecSespie     { { MNEM, ' ', OP (U8), 0 } },
1101f7cc78ecSespie     & ifmt_int, { 0x9300 }
1102f7cc78ecSespie   },
1103f7cc78ecSespie /* stilm $u8 */
1104f7cc78ecSespie   {
1105f7cc78ecSespie     { 0, 0, 0, 0 },
1106f7cc78ecSespie     { { MNEM, ' ', OP (U8), 0 } },
1107f7cc78ecSespie     & ifmt_int, { 0x8700 }
1108f7cc78ecSespie   },
1109f7cc78ecSespie /* addsp $s10 */
1110f7cc78ecSespie   {
1111f7cc78ecSespie     { 0, 0, 0, 0 },
1112f7cc78ecSespie     { { MNEM, ' ', OP (S10), 0 } },
1113f7cc78ecSespie     & ifmt_addsp, { 0xa300 }
1114f7cc78ecSespie   },
1115f7cc78ecSespie /* extsb $Ri */
1116f7cc78ecSespie   {
1117f7cc78ecSespie     { 0, 0, 0, 0 },
1118f7cc78ecSespie     { { MNEM, ' ', OP (RI), 0 } },
1119f7cc78ecSespie     & ifmt_div0s, { 0x9780 }
1120f7cc78ecSespie   },
1121f7cc78ecSespie /* extub $Ri */
1122f7cc78ecSespie   {
1123f7cc78ecSespie     { 0, 0, 0, 0 },
1124f7cc78ecSespie     { { MNEM, ' ', OP (RI), 0 } },
1125f7cc78ecSespie     & ifmt_div0s, { 0x9790 }
1126f7cc78ecSespie   },
1127f7cc78ecSespie /* extsh $Ri */
1128f7cc78ecSespie   {
1129f7cc78ecSespie     { 0, 0, 0, 0 },
1130f7cc78ecSespie     { { MNEM, ' ', OP (RI), 0 } },
1131f7cc78ecSespie     & ifmt_div0s, { 0x97a0 }
1132f7cc78ecSespie   },
1133f7cc78ecSespie /* extuh $Ri */
1134f7cc78ecSespie   {
1135f7cc78ecSespie     { 0, 0, 0, 0 },
1136f7cc78ecSespie     { { MNEM, ' ', OP (RI), 0 } },
1137f7cc78ecSespie     & ifmt_div0s, { 0x97b0 }
1138f7cc78ecSespie   },
1139f7cc78ecSespie /* ldm0 ($reglist_low_ld) */
1140f7cc78ecSespie   {
1141f7cc78ecSespie     { 0, 0, 0, 0 },
1142f7cc78ecSespie     { { MNEM, ' ', '(', OP (REGLIST_LOW_LD), ')', 0 } },
1143f7cc78ecSespie     & ifmt_ldm0, { 0x8c00 }
1144f7cc78ecSespie   },
1145f7cc78ecSespie /* ldm1 ($reglist_hi_ld) */
1146f7cc78ecSespie   {
1147f7cc78ecSespie     { 0, 0, 0, 0 },
1148f7cc78ecSespie     { { MNEM, ' ', '(', OP (REGLIST_HI_LD), ')', 0 } },
1149f7cc78ecSespie     & ifmt_ldm1, { 0x8d00 }
1150f7cc78ecSespie   },
1151f7cc78ecSespie /* stm0 ($reglist_low_st) */
1152f7cc78ecSespie   {
1153f7cc78ecSespie     { 0, 0, 0, 0 },
1154f7cc78ecSespie     { { MNEM, ' ', '(', OP (REGLIST_LOW_ST), ')', 0 } },
1155f7cc78ecSespie     & ifmt_stm0, { 0x8e00 }
1156f7cc78ecSespie   },
1157f7cc78ecSespie /* stm1 ($reglist_hi_st) */
1158f7cc78ecSespie   {
1159f7cc78ecSespie     { 0, 0, 0, 0 },
1160f7cc78ecSespie     { { MNEM, ' ', '(', OP (REGLIST_HI_ST), ')', 0 } },
1161f7cc78ecSespie     & ifmt_stm1, { 0x8f00 }
1162f7cc78ecSespie   },
1163f7cc78ecSespie /* enter $u10 */
1164f7cc78ecSespie   {
1165f7cc78ecSespie     { 0, 0, 0, 0 },
1166f7cc78ecSespie     { { MNEM, ' ', OP (U10), 0 } },
1167f7cc78ecSespie     & ifmt_enter, { 0xf00 }
1168f7cc78ecSespie   },
1169f7cc78ecSespie /* leave */
1170f7cc78ecSespie   {
1171f7cc78ecSespie     { 0, 0, 0, 0 },
1172f7cc78ecSespie     { { MNEM, 0 } },
1173f7cc78ecSespie     & ifmt_div3, { 0x9f90 }
1174f7cc78ecSespie   },
1175f7cc78ecSespie /* xchb @$Rj,$Ri */
1176f7cc78ecSespie   {
1177f7cc78ecSespie     { 0, 0, 0, 0 },
1178f7cc78ecSespie     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1179f7cc78ecSespie     & ifmt_add, { 0x8a00 }
1180f7cc78ecSespie   },
1181f7cc78ecSespie };
1182f7cc78ecSespie 
1183f7cc78ecSespie #undef A
1184f7cc78ecSespie #undef OPERAND
1185*d2201f2fSdrahn #undef MNEM
1186f7cc78ecSespie #undef OP
1187f7cc78ecSespie 
1188f7cc78ecSespie /* Formats for ALIAS macro-insns.  */
1189f7cc78ecSespie 
1190*d2201f2fSdrahn #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1191*d2201f2fSdrahn #define F(f) & fr30_cgen_ifld_table[FR30_##f]
1192*d2201f2fSdrahn #else
1193*d2201f2fSdrahn #define F(f) & fr30_cgen_ifld_table[FR30_/**/f]
1194*d2201f2fSdrahn #endif
1195f7cc78ecSespie static const CGEN_IFMT ifmt_ldi8m = {
11965f210c2aSfgsch   16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } }
1197f7cc78ecSespie };
1198f7cc78ecSespie 
1199f7cc78ecSespie static const CGEN_IFMT ifmt_ldi20m = {
12005f210c2aSfgsch   16, 32, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RI) }, { F (F_I20) }, { 0 } }
1201f7cc78ecSespie };
1202f7cc78ecSespie 
1203f7cc78ecSespie static const CGEN_IFMT ifmt_ldi32m = {
12045f210c2aSfgsch   16, 48, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { F (F_I32) }, { 0 } }
1205f7cc78ecSespie };
1206f7cc78ecSespie 
1207f7cc78ecSespie #undef F
1208f7cc78ecSespie 
1209f7cc78ecSespie /* Each non-simple macro entry points to an array of expansion possibilities.  */
1210f7cc78ecSespie 
1211*d2201f2fSdrahn #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1212*d2201f2fSdrahn #define A(a) (1 << CGEN_INSN_##a)
1213*d2201f2fSdrahn #else
1214*d2201f2fSdrahn #define A(a) (1 << CGEN_INSN_/**/a)
1215*d2201f2fSdrahn #endif
1216*d2201f2fSdrahn #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1217*d2201f2fSdrahn #define OPERAND(op) FR30_OPERAND_##op
1218*d2201f2fSdrahn #else
1219*d2201f2fSdrahn #define OPERAND(op) FR30_OPERAND_/**/op
1220*d2201f2fSdrahn #endif
1221f7cc78ecSespie #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1222f7cc78ecSespie #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1223f7cc78ecSespie 
1224f7cc78ecSespie /* The macro instruction table.  */
1225f7cc78ecSespie 
1226f7cc78ecSespie static const CGEN_IBASE fr30_cgen_macro_insn_table[] =
1227f7cc78ecSespie {
1228f7cc78ecSespie /* ldi8 $i8,$Ri */
1229f7cc78ecSespie   {
1230f7cc78ecSespie     -1, "ldi8m", "ldi8", 16,
1231f7cc78ecSespie     { 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
1232f7cc78ecSespie   },
1233f7cc78ecSespie /* ldi20 $i20,$Ri */
1234f7cc78ecSespie   {
1235f7cc78ecSespie     -1, "ldi20m", "ldi20", 32,
1236f7cc78ecSespie     { 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
1237f7cc78ecSespie   },
1238f7cc78ecSespie /* ldi32 $i32,$Ri */
1239f7cc78ecSespie   {
1240f7cc78ecSespie     -1, "ldi32m", "ldi32", 48,
1241f7cc78ecSespie     { 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
1242f7cc78ecSespie   },
1243f7cc78ecSespie };
1244f7cc78ecSespie 
1245f7cc78ecSespie /* The macro instruction opcode table.  */
1246f7cc78ecSespie 
1247f7cc78ecSespie static const CGEN_OPCODE fr30_cgen_macro_insn_opcode_table[] =
1248f7cc78ecSespie {
1249f7cc78ecSespie /* ldi8 $i8,$Ri */
1250f7cc78ecSespie   {
1251f7cc78ecSespie     { 0, 0, 0, 0 },
1252f7cc78ecSespie     { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
1253f7cc78ecSespie     & ifmt_ldi8m, { 0xc000 }
1254f7cc78ecSespie   },
1255f7cc78ecSespie /* ldi20 $i20,$Ri */
1256f7cc78ecSespie   {
1257f7cc78ecSespie     { 0, 0, 0, 0 },
1258f7cc78ecSespie     { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
1259f7cc78ecSespie     & ifmt_ldi20m, { 0x9b00 }
1260f7cc78ecSespie   },
1261f7cc78ecSespie /* ldi32 $i32,$Ri */
1262f7cc78ecSespie   {
1263f7cc78ecSespie     { 0, 0, 0, 0 },
1264f7cc78ecSespie     { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
1265f7cc78ecSespie     & ifmt_ldi32m, { 0x9f80 }
1266f7cc78ecSespie   },
1267f7cc78ecSespie };
1268f7cc78ecSespie 
1269f7cc78ecSespie #undef A
1270f7cc78ecSespie #undef OPERAND
1271*d2201f2fSdrahn #undef MNEM
1272f7cc78ecSespie #undef OP
1273f7cc78ecSespie 
1274f7cc78ecSespie #ifndef CGEN_ASM_HASH_P
1275f7cc78ecSespie #define CGEN_ASM_HASH_P(insn) 1
1276f7cc78ecSespie #endif
1277f7cc78ecSespie 
1278f7cc78ecSespie #ifndef CGEN_DIS_HASH_P
1279f7cc78ecSespie #define CGEN_DIS_HASH_P(insn) 1
1280f7cc78ecSespie #endif
1281f7cc78ecSespie 
1282f7cc78ecSespie /* Return non-zero if INSN is to be added to the hash table.
1283f7cc78ecSespie    Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
1284f7cc78ecSespie 
1285f7cc78ecSespie static int
asm_hash_insn_p(insn)1286f7cc78ecSespie asm_hash_insn_p (insn)
1287*d2201f2fSdrahn      const CGEN_INSN *insn ATTRIBUTE_UNUSED;
1288f7cc78ecSespie {
1289f7cc78ecSespie   return CGEN_ASM_HASH_P (insn);
1290f7cc78ecSespie }
1291f7cc78ecSespie 
1292f7cc78ecSespie static int
dis_hash_insn_p(insn)1293f7cc78ecSespie dis_hash_insn_p (insn)
1294f7cc78ecSespie      const CGEN_INSN *insn;
1295f7cc78ecSespie {
1296f7cc78ecSespie   /* If building the hash table and the NO-DIS attribute is present,
1297f7cc78ecSespie      ignore.  */
1298f7cc78ecSespie   if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
1299f7cc78ecSespie     return 0;
1300f7cc78ecSespie   return CGEN_DIS_HASH_P (insn);
1301f7cc78ecSespie }
1302f7cc78ecSespie 
1303f7cc78ecSespie #ifndef CGEN_ASM_HASH
1304f7cc78ecSespie #define CGEN_ASM_HASH_SIZE 127
1305f7cc78ecSespie #ifdef CGEN_MNEMONIC_OPERANDS
1306f7cc78ecSespie #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
1307f7cc78ecSespie #else
1308f7cc78ecSespie #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
1309f7cc78ecSespie #endif
1310f7cc78ecSespie #endif
1311f7cc78ecSespie 
1312f7cc78ecSespie /* It doesn't make much sense to provide a default here,
1313f7cc78ecSespie    but while this is under development we do.
1314f7cc78ecSespie    BUFFER is a pointer to the bytes of the insn, target order.
1315f7cc78ecSespie    VALUE is the first base_insn_bitsize bits as an int in host order.  */
1316f7cc78ecSespie 
1317f7cc78ecSespie #ifndef CGEN_DIS_HASH
1318f7cc78ecSespie #define CGEN_DIS_HASH_SIZE 256
1319f7cc78ecSespie #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
1320f7cc78ecSespie #endif
1321f7cc78ecSespie 
1322f7cc78ecSespie /* The result is the hash value of the insn.
1323f7cc78ecSespie    Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
1324f7cc78ecSespie 
1325f7cc78ecSespie static unsigned int
asm_hash_insn(mnem)1326f7cc78ecSespie asm_hash_insn (mnem)
1327f7cc78ecSespie      const char * mnem;
1328f7cc78ecSespie {
1329f7cc78ecSespie   return CGEN_ASM_HASH (mnem);
1330f7cc78ecSespie }
1331f7cc78ecSespie 
1332f7cc78ecSespie /* BUF is a pointer to the bytes of the insn, target order.
1333f7cc78ecSespie    VALUE is the first base_insn_bitsize bits as an int in host order.  */
1334f7cc78ecSespie 
1335f7cc78ecSespie static unsigned int
dis_hash_insn(buf,value)1336f7cc78ecSespie dis_hash_insn (buf, value)
1337*d2201f2fSdrahn      const char * buf ATTRIBUTE_UNUSED;
1338*d2201f2fSdrahn      CGEN_INSN_INT value ATTRIBUTE_UNUSED;
1339f7cc78ecSespie {
1340f7cc78ecSespie   return CGEN_DIS_HASH (buf, value);
1341f7cc78ecSespie }
1342f7cc78ecSespie 
1343*d2201f2fSdrahn static void set_fields_bitsize PARAMS ((CGEN_FIELDS *, int));
1344*d2201f2fSdrahn 
1345f7cc78ecSespie /* Set the recorded length of the insn in the CGEN_FIELDS struct.  */
1346f7cc78ecSespie 
1347f7cc78ecSespie static void
set_fields_bitsize(fields,size)1348f7cc78ecSespie set_fields_bitsize (fields, size)
1349f7cc78ecSespie      CGEN_FIELDS *fields;
1350f7cc78ecSespie      int size;
1351f7cc78ecSespie {
1352f7cc78ecSespie   CGEN_FIELDS_BITSIZE (fields) = size;
1353f7cc78ecSespie }
1354f7cc78ecSespie 
1355f7cc78ecSespie /* Function to call before using the operand instance table.
1356f7cc78ecSespie    This plugs the opcode entries and macro instructions into the cpu table.  */
1357f7cc78ecSespie 
1358f7cc78ecSespie void
fr30_cgen_init_opcode_table(cd)1359f7cc78ecSespie fr30_cgen_init_opcode_table (cd)
1360f7cc78ecSespie      CGEN_CPU_DESC cd;
1361f7cc78ecSespie {
1362f7cc78ecSespie   int i;
1363f7cc78ecSespie   int num_macros = (sizeof (fr30_cgen_macro_insn_table) /
1364f7cc78ecSespie 		    sizeof (fr30_cgen_macro_insn_table[0]));
1365f7cc78ecSespie   const CGEN_IBASE *ib = & fr30_cgen_macro_insn_table[0];
1366f7cc78ecSespie   const CGEN_OPCODE *oc = & fr30_cgen_macro_insn_opcode_table[0];
1367f7cc78ecSespie   CGEN_INSN *insns = (CGEN_INSN *) xmalloc (num_macros * sizeof (CGEN_INSN));
1368f7cc78ecSespie   memset (insns, 0, num_macros * sizeof (CGEN_INSN));
1369f7cc78ecSespie   for (i = 0; i < num_macros; ++i)
1370f7cc78ecSespie     {
1371f7cc78ecSespie       insns[i].base = &ib[i];
1372f7cc78ecSespie       insns[i].opcode = &oc[i];
1373*d2201f2fSdrahn       fr30_cgen_build_insn_regex (& insns[i]);
1374f7cc78ecSespie     }
1375f7cc78ecSespie   cd->macro_insn_table.init_entries = insns;
1376f7cc78ecSespie   cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
1377f7cc78ecSespie   cd->macro_insn_table.num_init_entries = num_macros;
1378f7cc78ecSespie 
1379f7cc78ecSespie   oc = & fr30_cgen_insn_opcode_table[0];
1380f7cc78ecSespie   insns = (CGEN_INSN *) cd->insn_table.init_entries;
1381f7cc78ecSespie   for (i = 0; i < MAX_INSNS; ++i)
1382*d2201f2fSdrahn     {
1383f7cc78ecSespie       insns[i].opcode = &oc[i];
1384*d2201f2fSdrahn       fr30_cgen_build_insn_regex (& insns[i]);
1385*d2201f2fSdrahn     }
1386f7cc78ecSespie 
1387f7cc78ecSespie   cd->sizeof_fields = sizeof (CGEN_FIELDS);
1388f7cc78ecSespie   cd->set_fields_bitsize = set_fields_bitsize;
1389f7cc78ecSespie 
1390f7cc78ecSespie   cd->asm_hash_p = asm_hash_insn_p;
1391f7cc78ecSespie   cd->asm_hash = asm_hash_insn;
1392f7cc78ecSespie   cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
1393f7cc78ecSespie 
1394f7cc78ecSespie   cd->dis_hash_p = dis_hash_insn_p;
1395f7cc78ecSespie   cd->dis_hash = dis_hash_insn;
1396f7cc78ecSespie   cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
1397f7cc78ecSespie }
1398