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