* Makefile.am (run-cgen): Pass options to cgen.
[external/binutils.git] / opcodes / fr30-opc.c
1 /* Generic opcode table support for targets using CGEN. -*- C -*-
2    CGEN: Cpu tools GENerator
3
4 THIS FILE IS USED TO GENERATE fr30-opc.c.
5
6 Copyright (C) 1998 Free Software Foundation, Inc.
7
8 This file is part of the GNU Binutils and GDB, the GNU debugger.
9
10 This program 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 2, or (at your option)
13 any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software Foundation, Inc.,
22 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
23
24 #include "sysdep.h"
25 #include <stdio.h>
26 #include "ansidecl.h"
27 #include "libiberty.h"
28 #include "bfd.h"
29 #include "symcat.h"
30 #include "fr30-opc.h"
31 #include "opintl.h"
32
33 /* Used by the ifield rtx function.  */
34 #define FLD(f) (fields->f)
35
36 /* The hash functions are recorded here to help keep assembler code out of
37    the disassembler and vice versa.  */
38
39 static int asm_hash_insn_p PARAMS ((const CGEN_INSN *));
40 static unsigned int asm_hash_insn PARAMS ((const char *));
41 static int dis_hash_insn_p PARAMS ((const CGEN_INSN *));
42 static unsigned int dis_hash_insn PARAMS ((const char *, CGEN_INSN_INT));
43
44 /* Look up instruction INSN_VALUE and extract its fields.
45    INSN, if non-null, is the insn table entry.
46    Otherwise INSN_VALUE is examined to compute it.
47    LENGTH is the bit length of INSN_VALUE if known, otherwise 0.
48    0 is only valid if `insn == NULL && ! CGEN_INT_INSN_P'.
49    If INSN != NULL, LENGTH must be valid.
50    ALIAS_P is non-zero if alias insns are to be included in the search.
51
52    The result is a pointer to the insn table entry, or NULL if the instruction
53    wasn't recognized.  */
54
55 const CGEN_INSN *
56 fr30_cgen_lookup_insn (od, insn, insn_value, length, fields, alias_p)
57      CGEN_OPCODE_DESC od;
58      const CGEN_INSN *insn;
59      CGEN_INSN_BYTES insn_value;
60      int length;
61      CGEN_FIELDS *fields;
62      int alias_p;
63 {
64   unsigned char buf[CGEN_MAX_INSN_SIZE];
65   unsigned char *bufp;
66   CGEN_INSN_INT base_insn;
67 #if CGEN_INT_INSN_P
68   CGEN_EXTRACT_INFO *info = NULL;
69 #else
70   CGEN_EXTRACT_INFO ex_info;
71   CGEN_EXTRACT_INFO *info = &ex_info;
72 #endif
73
74 #if CGEN_INT_INSN_P
75   cgen_put_insn_value (od, buf, length, insn_value);
76   bufp = buf;
77   base_insn = insn_value; /*???*/
78 #else
79   ex_info.dis_info = NULL;
80   ex_info.insn_bytes = insn_value;
81   ex_info.valid = -1;
82   base_insn = cgen_get_insn_value (od, buf, length);
83   bufp = insn_value;
84 #endif
85
86   if (!insn)
87     {
88       const CGEN_INSN_LIST *insn_list;
89
90       /* The instructions are stored in hash lists.
91          Pick the first one and keep trying until we find the right one.  */
92
93       insn_list = CGEN_DIS_LOOKUP_INSN (od, bufp, base_insn);
94       while (insn_list != NULL)
95         {
96           insn = insn_list->insn;
97
98           if (alias_p
99               || ! CGEN_INSN_ATTR (insn, CGEN_INSN_ALIAS))
100             {
101               /* Basic bit mask must be correct.  */
102               /* ??? May wish to allow target to defer this check until the
103                  extract handler.  */
104               if ((base_insn & CGEN_INSN_BASE_MASK (insn))
105                   == CGEN_INSN_BASE_VALUE (insn))
106                 {
107                   /* ??? 0 is passed for `pc' */
108                   int elength = (*CGEN_EXTRACT_FN (insn)) (od, insn, info,
109                                                            base_insn, fields,
110                                                            (bfd_vma) 0);
111                   if (elength > 0)
112                     {
113                       /* sanity check */
114                       if (length != 0 && length != elength)
115                         abort ();
116                       return insn;
117                     }
118                 }
119             }
120
121           insn_list = CGEN_DIS_NEXT_INSN (insn_list);
122         }
123     }
124   else
125     {
126       /* Sanity check: can't pass an alias insn if ! alias_p.  */
127       if (! alias_p
128           && CGEN_INSN_ATTR (insn, CGEN_INSN_ALIAS))
129         abort ();
130       /* Sanity check: length must be correct.  */
131       if (length != CGEN_INSN_BITSIZE (insn))
132         abort ();
133
134       /* ??? 0 is passed for `pc' */
135       length = (*CGEN_EXTRACT_FN (insn)) (od, insn, info, base_insn, fields,
136                                           (bfd_vma) 0);
137       /* Sanity check: must succeed.
138          Could relax this later if it ever proves useful.  */
139       if (length == 0)
140         abort ();
141       return insn;
142     }
143
144   return NULL;
145 }
146
147 /* Fill in the operand instances used by INSN whose operands are FIELDS.
148    INDICES is a pointer to a buffer of MAX_OPERAND_INSTANCES ints to be filled
149    in.  */
150
151 void
152 fr30_cgen_get_insn_operands (od, insn, fields, indices)
153      CGEN_OPCODE_DESC od;
154      const CGEN_INSN * insn;
155      const CGEN_FIELDS * fields;
156      int *indices;
157 {
158   const CGEN_OPERAND_INSTANCE *opinst;
159   int i;
160
161   for (i = 0, opinst = CGEN_INSN_OPERANDS (insn);
162        opinst != NULL
163          && CGEN_OPERAND_INSTANCE_TYPE (opinst) != CGEN_OPERAND_INSTANCE_END;
164        ++i, ++opinst)
165     {
166       const CGEN_OPERAND *op = CGEN_OPERAND_INSTANCE_OPERAND (opinst);
167       if (op == NULL)
168         indices[i] = CGEN_OPERAND_INSTANCE_INDEX (opinst);
169       else
170         indices[i] = fr30_cgen_get_int_operand (CGEN_OPERAND_INDEX (op),
171                                                   fields);
172     }
173 }
174
175 /* Cover function to fr30_cgen_get_insn_operands when either INSN or FIELDS
176    isn't known.
177    The INSN, INSN_VALUE, and LENGTH arguments are passed to
178    fr30_cgen_lookup_insn unchanged.
179
180    The result is the insn table entry or NULL if the instruction wasn't
181    recognized.  */
182
183 const CGEN_INSN *
184 fr30_cgen_lookup_get_insn_operands (od, insn, insn_value, length, indices)
185      CGEN_OPCODE_DESC od;
186      const CGEN_INSN *insn;
187      CGEN_INSN_BYTES insn_value;
188      int length;
189      int *indices;
190 {
191   CGEN_FIELDS fields;
192
193   /* Pass non-zero for ALIAS_P only if INSN != NULL.
194      If INSN == NULL, we want a real insn.  */
195   insn = fr30_cgen_lookup_insn (od, insn, insn_value, length, &fields,
196                                   insn != NULL);
197   if (! insn)
198     return NULL;
199
200   fr30_cgen_get_insn_operands (od, insn, &fields, indices);
201   return insn;
202 }
203 /* Attributes.  */
204
205 static const CGEN_ATTR_ENTRY bool_attr[] =
206 {
207   { "#f", 0 },
208   { "#t", 1 },
209   { 0, 0 }
210 };
211
212 static const CGEN_ATTR_ENTRY MACH_attr[] =
213 {
214   { "base", MACH_BASE },
215   { "fr30", MACH_FR30 },
216   { "max", MACH_MAX },
217   { 0, 0 }
218 };
219
220 const CGEN_ATTR_TABLE fr30_cgen_ifield_attr_table[] =
221 {
222   { "MACH", & MACH_attr[0] },
223   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
224   { "UNSIGNED", &bool_attr[0], &bool_attr[0] },
225   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
226   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
227   { "RESERVED", &bool_attr[0], &bool_attr[0] },
228   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
229   { 0, 0, 0 }
230 };
231
232 const CGEN_ATTR_TABLE fr30_cgen_hardware_attr_table[] =
233 {
234   { "MACH", & MACH_attr[0] },
235   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
236   { "UNSIGNED", &bool_attr[0], &bool_attr[0] },
237   { "SIGNED", &bool_attr[0], &bool_attr[0] },
238   { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
239   { "FUN-ACCESS", &bool_attr[0], &bool_attr[0] },
240   { "PC", &bool_attr[0], &bool_attr[0] },
241   { "PROFILE", &bool_attr[0], &bool_attr[0] },
242   { 0, 0, 0 }
243 };
244
245 const CGEN_ATTR_TABLE fr30_cgen_operand_attr_table[] =
246 {
247   { "MACH", & MACH_attr[0] },
248   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
249   { "UNSIGNED", &bool_attr[0], &bool_attr[0] },
250   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
251   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
252   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
253   { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
254   { "RELAX", &bool_attr[0], &bool_attr[0] },
255   { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
256   { "HASH-PREFIX", &bool_attr[0], &bool_attr[0] },
257   { 0, 0, 0 }
258 };
259
260 const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[] =
261 {
262   { "MACH", & MACH_attr[0] },
263   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
264   { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
265   { "COND-CTI", &bool_attr[0], &bool_attr[0] },
266   { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
267   { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
268   { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
269   { "RELAX", &bool_attr[0], &bool_attr[0] },
270   { "ALIAS", &bool_attr[0], &bool_attr[0] },
271   { "NO-DIS", &bool_attr[0], &bool_attr[0] },
272   { "PBB", &bool_attr[0], &bool_attr[0] },
273   { "NOT-IN-DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
274   { 0, 0, 0 }
275 };
276
277 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_gr_entries[] = 
278 {
279   { "r0", 0 },
280   { "r1", 1 },
281   { "r2", 2 },
282   { "r3", 3 },
283   { "r4", 4 },
284   { "r5", 5 },
285   { "r6", 6 },
286   { "r7", 7 },
287   { "r8", 8 },
288   { "r9", 9 },
289   { "r10", 10 },
290   { "r11", 11 },
291   { "r12", 12 },
292   { "r13", 13 },
293   { "r14", 14 },
294   { "r15", 15 },
295   { "ac", 13 },
296   { "fp", 14 },
297   { "sp", 15 }
298 };
299
300 CGEN_KEYWORD fr30_cgen_opval_h_gr = 
301 {
302   & fr30_cgen_opval_h_gr_entries[0],
303   19
304 };
305
306 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_cr_entries[] = 
307 {
308   { "cr0", 0 },
309   { "cr1", 1 },
310   { "cr2", 2 },
311   { "cr3", 3 },
312   { "cr4", 4 },
313   { "cr5", 5 },
314   { "cr6", 6 },
315   { "cr7", 7 },
316   { "cr8", 8 },
317   { "cr9", 9 },
318   { "cr10", 10 },
319   { "cr11", 11 },
320   { "cr12", 12 },
321   { "cr13", 13 },
322   { "cr14", 14 },
323   { "cr15", 15 }
324 };
325
326 CGEN_KEYWORD fr30_cgen_opval_h_cr = 
327 {
328   & fr30_cgen_opval_h_cr_entries[0],
329   16
330 };
331
332 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_dr_entries[] = 
333 {
334   { "tbr", 0 },
335   { "rp", 1 },
336   { "ssp", 2 },
337   { "usp", 3 },
338   { "mdh", 4 },
339   { "mdl", 5 }
340 };
341
342 CGEN_KEYWORD fr30_cgen_opval_h_dr = 
343 {
344   & fr30_cgen_opval_h_dr_entries[0],
345   6
346 };
347
348 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_ps_entries[] = 
349 {
350   { "ps", 0 }
351 };
352
353 CGEN_KEYWORD fr30_cgen_opval_h_ps = 
354 {
355   & fr30_cgen_opval_h_ps_entries[0],
356   1
357 };
358
359 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r13_entries[] = 
360 {
361   { "r13", 0 }
362 };
363
364 CGEN_KEYWORD fr30_cgen_opval_h_r13 = 
365 {
366   & fr30_cgen_opval_h_r13_entries[0],
367   1
368 };
369
370 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r14_entries[] = 
371 {
372   { "r14", 0 }
373 };
374
375 CGEN_KEYWORD fr30_cgen_opval_h_r14 = 
376 {
377   & fr30_cgen_opval_h_r14_entries[0],
378   1
379 };
380
381 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r15_entries[] = 
382 {
383   { "r15", 0 }
384 };
385
386 CGEN_KEYWORD fr30_cgen_opval_h_r15 = 
387 {
388   & fr30_cgen_opval_h_r15_entries[0],
389   1
390 };
391
392
393 /* The hardware table.  */
394
395 #define HW_ENT(n) fr30_cgen_hw_entries[n]
396 static const CGEN_HW_ENTRY fr30_cgen_hw_entries[] =
397 {
398   { HW_H_PC, & HW_ENT (HW_H_PC + 1), "h-pc", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_PROFILE)|(1<<CGEN_HW_PC), { (1<<MACH_BASE) } } },
399   { HW_H_MEMORY, & HW_ENT (HW_H_MEMORY + 1), "h-memory", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
400   { HW_H_SINT, & HW_ENT (HW_H_SINT + 1), "h-sint", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
401   { HW_H_UINT, & HW_ENT (HW_H_UINT + 1), "h-uint", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
402   { HW_H_ADDR, & HW_ENT (HW_H_ADDR + 1), "h-addr", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
403   { HW_H_IADDR, & HW_ENT (HW_H_IADDR + 1), "h-iaddr", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
404   { HW_H_GR, & HW_ENT (HW_H_GR + 1), "h-gr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_gr, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_CACHE_ADDR)|(1<<CGEN_HW_PROFILE), { (1<<MACH_BASE) } } },
405   { HW_H_CR, & HW_ENT (HW_H_CR + 1), "h-cr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_cr, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
406   { HW_H_DR, & HW_ENT (HW_H_DR + 1), "h-dr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_dr, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
407   { HW_H_PS, & HW_ENT (HW_H_PS + 1), "h-ps", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_ps, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
408   { HW_H_R13, & HW_ENT (HW_H_R13 + 1), "h-r13", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r13, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
409   { HW_H_R14, & HW_ENT (HW_H_R14 + 1), "h-r14", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r14, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
410   { HW_H_R15, & HW_ENT (HW_H_R15 + 1), "h-r15", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r15, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
411   { HW_H_NBIT, & HW_ENT (HW_H_NBIT + 1), "h-nbit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
412   { HW_H_ZBIT, & HW_ENT (HW_H_ZBIT + 1), "h-zbit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
413   { HW_H_VBIT, & HW_ENT (HW_H_VBIT + 1), "h-vbit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
414   { HW_H_CBIT, & HW_ENT (HW_H_CBIT + 1), "h-cbit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
415   { HW_H_IBIT, & HW_ENT (HW_H_IBIT + 1), "h-ibit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
416   { HW_H_SBIT, & HW_ENT (HW_H_SBIT + 1), "h-sbit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
417   { HW_H_TBIT, & HW_ENT (HW_H_TBIT + 1), "h-tbit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
418   { HW_H_D0BIT, & HW_ENT (HW_H_D0BIT + 1), "h-d0bit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
419   { HW_H_D1BIT, & HW_ENT (HW_H_D1BIT + 1), "h-d1bit", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
420   { HW_H_CCR, & HW_ENT (HW_H_CCR + 1), "h-ccr", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
421   { HW_H_SCR, & HW_ENT (HW_H_SCR + 1), "h-scr", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
422   { HW_H_ILM, & HW_ENT (HW_H_ILM + 1), "h-ilm", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
423   { 0 }
424 };
425
426 /* The instruction field table.  */
427
428 static const CGEN_IFLD fr30_cgen_ifld_table[] =
429 {
430   { FR30_F_NIL, "f-nil", 0, 0, 0, 0, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
431   { FR30_F_OP1, "f-op1", 0, 16, 0, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
432   { FR30_F_OP2, "f-op2", 0, 16, 4, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
433   { FR30_F_OP3, "f-op3", 0, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
434   { FR30_F_OP4, "f-op4", 0, 16, 12, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
435   { FR30_F_OP5, "f-op5", 0, 16, 4, 1, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
436   { FR30_F_CC, "f-cc", 0, 16, 4, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
437   { FR30_F_CCC, "f-ccc", 16, 16, 0, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
438   { FR30_F_RJ, "f-Rj", 0, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
439   { FR30_F_RI, "f-Ri", 0, 16, 12, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
440   { FR30_F_RS1, "f-Rs1", 0, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
441   { FR30_F_RS2, "f-Rs2", 0, 16, 12, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
442   { FR30_F_RJC, "f-Rjc", 16, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
443   { FR30_F_RIC, "f-Ric", 16, 16, 12, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
444   { FR30_F_CRJ, "f-CRj", 16, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
445   { FR30_F_CRI, "f-CRi", 16, 16, 12, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
446   { FR30_F_U4, "f-u4", 0, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
447   { FR30_F_U4C, "f-u4c", 0, 16, 12, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
448   { FR30_F_I4, "f-i4", 0, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
449   { FR30_F_M4, "f-m4", 0, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
450   { FR30_F_U8, "f-u8", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
451   { FR30_F_I8, "f-i8", 0, 16, 4, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
452   { FR30_F_I20_4, "f-i20-4", 0, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
453   { FR30_F_I20_16, "f-i20-16", 16, 16, 0, 16, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
454   { FR30_F_I32, "f-i32", 16, 32, 0, 32, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_SIGN_OPT)|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
455   { FR30_F_UDISP6, "f-udisp6", 0, 16, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
456   { FR30_F_DISP8, "f-disp8", 0, 16, 4, 8, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
457   { FR30_F_DISP9, "f-disp9", 0, 16, 4, 8, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
458   { FR30_F_DISP10, "f-disp10", 0, 16, 4, 8, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
459   { FR30_F_S10, "f-s10", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
460   { FR30_F_U10, "f-u10", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
461   { FR30_F_REL9, "f-rel9", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_PCREL_ADDR), { (1<<MACH_BASE) } }  },
462   { FR30_F_DIR8, "f-dir8", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
463   { FR30_F_DIR9, "f-dir9", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
464   { FR30_F_DIR10, "f-dir10", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
465   { FR30_F_REL12, "f-rel12", 0, 16, 5, 11, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_PCREL_ADDR), { (1<<MACH_BASE) } }  },
466   { FR30_F_REGLIST_HI_ST, "f-reglist_hi_st", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
467   { FR30_F_REGLIST_LOW_ST, "f-reglist_low_st", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
468   { FR30_F_REGLIST_HI_LD, "f-reglist_hi_ld", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
469   { FR30_F_REGLIST_LOW_LD, "f-reglist_low_ld", 0, 16, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
470   { 0 }
471 };
472
473 /* The operand table.  */
474
475 #define OPERAND(op) CONCAT2 (FR30_OPERAND_,op)
476 #define OP_ENT(op) fr30_cgen_operand_table[OPERAND (op)]
477
478 const CGEN_OPERAND fr30_cgen_operand_table[MAX_OPERANDS] =
479 {
480 /* pc: program counter */
481   { "pc", & HW_ENT (HW_H_PC), 0, 0,
482     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
483 /* Ri: destination register */
484   { "Ri", & HW_ENT (HW_H_GR), 12, 4,
485     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
486 /* Rj: source register */
487   { "Rj", & HW_ENT (HW_H_GR), 8, 4,
488     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
489 /* Ric: target register coproc insn */
490   { "Ric", & HW_ENT (HW_H_GR), 12, 4,
491     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
492 /* Rjc: source register coproc insn */
493   { "Rjc", & HW_ENT (HW_H_GR), 8, 4,
494     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
495 /* CRi: coprocessor register */
496   { "CRi", & HW_ENT (HW_H_CR), 12, 4,
497     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
498 /* CRj: coprocessor register */
499   { "CRj", & HW_ENT (HW_H_CR), 8, 4,
500     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
501 /* Rs1: dedicated register */
502   { "Rs1", & HW_ENT (HW_H_DR), 8, 4,
503     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
504 /* Rs2: dedicated register */
505   { "Rs2", & HW_ENT (HW_H_DR), 12, 4,
506     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
507 /* R13: General Register 13 */
508   { "R13", & HW_ENT (HW_H_R13), 0, 0,
509     { CGEN_OPERAND_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
510 /* R14: General Register 14 */
511   { "R14", & HW_ENT (HW_H_R14), 0, 0,
512     { CGEN_OPERAND_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
513 /* R15: General Register 15 */
514   { "R15", & HW_ENT (HW_H_R15), 0, 0,
515     { CGEN_OPERAND_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
516 /* ps: Program Status register */
517   { "ps", & HW_ENT (HW_H_PS), 0, 0,
518     { CGEN_OPERAND_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
519 /* u4: 4  bit unsigned immediate */
520   { "u4", & HW_ENT (HW_H_UINT), 8, 4,
521     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
522 /* u4c: 4  bit unsigned immediate */
523   { "u4c", & HW_ENT (HW_H_UINT), 12, 4,
524     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
525 /* u8: 8  bit unsigned immediate */
526   { "u8", & HW_ENT (HW_H_UINT), 8, 8,
527     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
528 /* i8: 8  bit unsigned immediate */
529   { "i8", & HW_ENT (HW_H_UINT), 4, 8,
530     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
531 /* udisp6: 6  bit unsigned immediate */
532   { "udisp6", & HW_ENT (HW_H_UINT), 8, 4,
533     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
534 /* disp8: 8  bit signed   immediate */
535   { "disp8", & HW_ENT (HW_H_SINT), 4, 8,
536     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX), { (1<<MACH_BASE) } }  },
537 /* disp9: 9  bit signed   immediate */
538   { "disp9", & HW_ENT (HW_H_SINT), 4, 8,
539     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX), { (1<<MACH_BASE) } }  },
540 /* disp10: 10 bit signed   immediate */
541   { "disp10", & HW_ENT (HW_H_SINT), 4, 8,
542     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX), { (1<<MACH_BASE) } }  },
543 /* s10: 10 bit signed   immediate */
544   { "s10", & HW_ENT (HW_H_SINT), 8, 8,
545     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX), { (1<<MACH_BASE) } }  },
546 /* u10: 10 bit unsigned immediate */
547   { "u10", & HW_ENT (HW_H_UINT), 8, 8,
548     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
549 /* i32: 32 bit immediate */
550   { "i32", & HW_ENT (HW_H_UINT), 0, 32,
551     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGN_OPT)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
552 /* m4: 4  bit negative immediate */
553   { "m4", & HW_ENT (HW_H_SINT), 8, 4,
554     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
555 /* i20: 20 bit immediate */
556   { "i20", & HW_ENT (HW_H_UINT), 0, 20,
557     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED)|(1<<CGEN_OPERAND_VIRTUAL), { (1<<MACH_BASE) } }  },
558 /* dir8: 8  bit direct address */
559   { "dir8", & HW_ENT (HW_H_UINT), 8, 8,
560     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
561 /* dir9: 9  bit direct address */
562   { "dir9", & HW_ENT (HW_H_UINT), 8, 8,
563     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
564 /* dir10: 10 bit direct address */
565   { "dir10", & HW_ENT (HW_H_UINT), 8, 8,
566     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
567 /* label9: 9  bit pc relative address */
568   { "label9", & HW_ENT (HW_H_IADDR), 8, 8,
569     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_PCREL_ADDR), { (1<<MACH_BASE) } }  },
570 /* label12: 12 bit pc relative address */
571   { "label12", & HW_ENT (HW_H_IADDR), 5, 11,
572     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_PCREL_ADDR), { (1<<MACH_BASE) } }  },
573 /* reglist_low_ld: 8 bit register mask for ldm */
574   { "reglist_low_ld", & HW_ENT (HW_H_UINT), 8, 8,
575     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
576 /* reglist_hi_ld: 8 bit register mask for ldm */
577   { "reglist_hi_ld", & HW_ENT (HW_H_UINT), 8, 8,
578     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
579 /* reglist_low_st: 8 bit register mask for ldm */
580   { "reglist_low_st", & HW_ENT (HW_H_UINT), 8, 8,
581     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
582 /* reglist_hi_st: 8 bit register mask for ldm */
583   { "reglist_hi_st", & HW_ENT (HW_H_UINT), 8, 8,
584     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
585 /* cc: condition codes */
586   { "cc", & HW_ENT (HW_H_UINT), 4, 4,
587     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
588 /* ccc: coprocessor calc */
589   { "ccc", & HW_ENT (HW_H_UINT), 0, 8,
590     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
591 /* nbit: negative   bit */
592   { "nbit", & HW_ENT (HW_H_NBIT), 0, 0,
593     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
594 /* vbit: overflow   bit */
595   { "vbit", & HW_ENT (HW_H_VBIT), 0, 0,
596     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
597 /* zbit: zero       bit */
598   { "zbit", & HW_ENT (HW_H_ZBIT), 0, 0,
599     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
600 /* cbit: carry      bit */
601   { "cbit", & HW_ENT (HW_H_CBIT), 0, 0,
602     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
603 /* ibit: interrupt  bit */
604   { "ibit", & HW_ENT (HW_H_IBIT), 0, 0,
605     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
606 /* sbit: stack      bit */
607   { "sbit", & HW_ENT (HW_H_SBIT), 0, 0,
608     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
609 /* tbit: trace trap bit */
610   { "tbit", & HW_ENT (HW_H_TBIT), 0, 0,
611     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
612 /* d0bit: division 0 bit */
613   { "d0bit", & HW_ENT (HW_H_D0BIT), 0, 0,
614     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
615 /* d1bit: division 1 bit */
616   { "d1bit", & HW_ENT (HW_H_D1BIT), 0, 0,
617     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
618 /* ccr: condition code bits */
619   { "ccr", & HW_ENT (HW_H_CCR), 0, 0,
620     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
621 /* scr: system condition bits */
622   { "scr", & HW_ENT (HW_H_SCR), 0, 0,
623     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
624 /* ilm: interrupt level mask */
625   { "ilm", & HW_ENT (HW_H_ILM), 0, 0,
626     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
627 };
628
629 /* Instruction formats.  */
630
631 #define F(f) & fr30_cgen_ifld_table[CONCAT2 (FR30_,f)]
632
633 static const CGEN_IFMT fmt_empty = {
634   0, 0, 0x0, { 0 }
635 };
636
637 static const CGEN_IFMT fmt_add = {
638   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
639 };
640
641 static const CGEN_IFMT fmt_addi = {
642   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
643 };
644
645 static const CGEN_IFMT fmt_add2 = {
646   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
647 };
648
649 static const CGEN_IFMT fmt_addc = {
650   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
651 };
652
653 static const CGEN_IFMT fmt_addn = {
654   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
655 };
656
657 static const CGEN_IFMT fmt_addni = {
658   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
659 };
660
661 static const CGEN_IFMT fmt_addn2 = {
662   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
663 };
664
665 static const CGEN_IFMT fmt_cmp = {
666   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
667 };
668
669 static const CGEN_IFMT fmt_cmpi = {
670   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
671 };
672
673 static const CGEN_IFMT fmt_cmp2 = {
674   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
675 };
676
677 static const CGEN_IFMT fmt_and = {
678   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
679 };
680
681 static const CGEN_IFMT fmt_andm = {
682   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
683 };
684
685 static const CGEN_IFMT fmt_andh = {
686   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
687 };
688
689 static const CGEN_IFMT fmt_andb = {
690   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
691 };
692
693 static const CGEN_IFMT fmt_bandl = {
694   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
695 };
696
697 static const CGEN_IFMT fmt_btstl = {
698   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
699 };
700
701 static const CGEN_IFMT fmt_mul = {
702   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
703 };
704
705 static const CGEN_IFMT fmt_mulu = {
706   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
707 };
708
709 static const CGEN_IFMT fmt_mulh = {
710   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
711 };
712
713 static const CGEN_IFMT fmt_div0s = {
714   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
715 };
716
717 static const CGEN_IFMT fmt_div0u = {
718   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
719 };
720
721 static const CGEN_IFMT fmt_div1 = {
722   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
723 };
724
725 static const CGEN_IFMT fmt_div2 = {
726   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
727 };
728
729 static const CGEN_IFMT fmt_div3 = {
730   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
731 };
732
733 static const CGEN_IFMT fmt_div4s = {
734   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
735 };
736
737 static const CGEN_IFMT fmt_lsl = {
738   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
739 };
740
741 static const CGEN_IFMT fmt_lsli = {
742   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
743 };
744
745 static const CGEN_IFMT fmt_ldi8 = {
746   16, 16, 0xf000, { F (F_OP1), F (F_I8), F (F_RI), 0 }
747 };
748
749 static const CGEN_IFMT fmt_ldi20 = {
750   16, 32, 0xff00, { F (F_OP1), F (F_I20), F (F_OP2), F (F_RI), 0 }
751 };
752
753 static const CGEN_IFMT fmt_ldi32 = {
754   16, 48, 0xfff0, { F (F_OP1), F (F_I32), F (F_OP2), F (F_OP3), F (F_RI), 0 }
755 };
756
757 static const CGEN_IFMT fmt_ld = {
758   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
759 };
760
761 static const CGEN_IFMT fmt_lduh = {
762   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
763 };
764
765 static const CGEN_IFMT fmt_ldub = {
766   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
767 };
768
769 static const CGEN_IFMT fmt_ldr13 = {
770   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
771 };
772
773 static const CGEN_IFMT fmt_ldr13uh = {
774   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
775 };
776
777 static const CGEN_IFMT fmt_ldr13ub = {
778   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
779 };
780
781 static const CGEN_IFMT fmt_ldr14 = {
782   16, 16, 0xf000, { F (F_OP1), F (F_DISP10), F (F_RI), 0 }
783 };
784
785 static const CGEN_IFMT fmt_ldr14uh = {
786   16, 16, 0xf000, { F (F_OP1), F (F_DISP9), F (F_RI), 0 }
787 };
788
789 static const CGEN_IFMT fmt_ldr14ub = {
790   16, 16, 0xf000, { F (F_OP1), F (F_DISP8), F (F_RI), 0 }
791 };
792
793 static const CGEN_IFMT fmt_ldr15 = {
794   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_UDISP6), F (F_RI), 0 }
795 };
796
797 static const CGEN_IFMT fmt_ldr15gr = {
798   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
799 };
800
801 static const CGEN_IFMT fmt_ldr15dr = {
802   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RS2), 0 }
803 };
804
805 static const CGEN_IFMT fmt_ldr15ps = {
806   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
807 };
808
809 static const CGEN_IFMT fmt_st = {
810   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
811 };
812
813 static const CGEN_IFMT fmt_sth = {
814   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
815 };
816
817 static const CGEN_IFMT fmt_stb = {
818   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
819 };
820
821 static const CGEN_IFMT fmt_str13 = {
822   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
823 };
824
825 static const CGEN_IFMT fmt_str13h = {
826   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
827 };
828
829 static const CGEN_IFMT fmt_str13b = {
830   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
831 };
832
833 static const CGEN_IFMT fmt_str14 = {
834   16, 16, 0xf000, { F (F_OP1), F (F_DISP10), F (F_RI), 0 }
835 };
836
837 static const CGEN_IFMT fmt_str14h = {
838   16, 16, 0xf000, { F (F_OP1), F (F_DISP9), F (F_RI), 0 }
839 };
840
841 static const CGEN_IFMT fmt_str14b = {
842   16, 16, 0xf000, { F (F_OP1), F (F_DISP8), F (F_RI), 0 }
843 };
844
845 static const CGEN_IFMT fmt_str15 = {
846   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_UDISP6), F (F_RI), 0 }
847 };
848
849 static const CGEN_IFMT fmt_str15gr = {
850   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
851 };
852
853 static const CGEN_IFMT fmt_str15dr = {
854   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RS2), 0 }
855 };
856
857 static const CGEN_IFMT fmt_str15ps = {
858   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
859 };
860
861 static const CGEN_IFMT fmt_mov = {
862   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
863 };
864
865 static const CGEN_IFMT fmt_movdr = {
866   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RS1), F (F_RI), 0 }
867 };
868
869 static const CGEN_IFMT fmt_movps = {
870   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
871 };
872
873 static const CGEN_IFMT fmt_mov2dr = {
874   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RS1), F (F_RI), 0 }
875 };
876
877 static const CGEN_IFMT fmt_mov2ps = {
878   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
879 };
880
881 static const CGEN_IFMT fmt_jmp = {
882   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
883 };
884
885 static const CGEN_IFMT fmt_callr = {
886   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
887 };
888
889 static const CGEN_IFMT fmt_call = {
890   16, 16, 0xf800, { F (F_OP1), F (F_OP5), F (F_REL12), 0 }
891 };
892
893 static const CGEN_IFMT fmt_ret = {
894   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
895 };
896
897 static const CGEN_IFMT fmt_int = {
898   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
899 };
900
901 static const CGEN_IFMT fmt_inte = {
902   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
903 };
904
905 static const CGEN_IFMT fmt_reti = {
906   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
907 };
908
909 static const CGEN_IFMT fmt_brad = {
910   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
911 };
912
913 static const CGEN_IFMT fmt_beqd = {
914   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
915 };
916
917 static const CGEN_IFMT fmt_bcd = {
918   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
919 };
920
921 static const CGEN_IFMT fmt_bnd = {
922   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
923 };
924
925 static const CGEN_IFMT fmt_bvd = {
926   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
927 };
928
929 static const CGEN_IFMT fmt_bltd = {
930   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
931 };
932
933 static const CGEN_IFMT fmt_bled = {
934   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
935 };
936
937 static const CGEN_IFMT fmt_blsd = {
938   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
939 };
940
941 static const CGEN_IFMT fmt_dmovr13 = {
942   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
943 };
944
945 static const CGEN_IFMT fmt_dmovr13h = {
946   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
947 };
948
949 static const CGEN_IFMT fmt_dmovr13b = {
950   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
951 };
952
953 static const CGEN_IFMT fmt_dmovr13pi = {
954   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
955 };
956
957 static const CGEN_IFMT fmt_dmovr13pih = {
958   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
959 };
960
961 static const CGEN_IFMT fmt_dmovr13pib = {
962   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
963 };
964
965 static const CGEN_IFMT fmt_dmovr15pi = {
966   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
967 };
968
969 static const CGEN_IFMT fmt_dmov2r13 = {
970   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
971 };
972
973 static const CGEN_IFMT fmt_dmov2r13h = {
974   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
975 };
976
977 static const CGEN_IFMT fmt_dmov2r13b = {
978   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
979 };
980
981 static const CGEN_IFMT fmt_dmov2r13pi = {
982   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
983 };
984
985 static const CGEN_IFMT fmt_dmov2r13pih = {
986   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
987 };
988
989 static const CGEN_IFMT fmt_dmov2r13pib = {
990   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
991 };
992
993 static const CGEN_IFMT fmt_dmov2r15pd = {
994   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
995 };
996
997 static const CGEN_IFMT fmt_ldres = {
998   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
999 };
1000
1001 static const CGEN_IFMT fmt_copop = {
1002   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 }
1003 };
1004
1005 static const CGEN_IFMT fmt_copld = {
1006   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 }
1007 };
1008
1009 static const CGEN_IFMT fmt_copst = {
1010   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 }
1011 };
1012
1013 static const CGEN_IFMT fmt_nop = {
1014   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1015 };
1016
1017 static const CGEN_IFMT fmt_andccr = {
1018   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1019 };
1020
1021 static const CGEN_IFMT fmt_stilm = {
1022   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1023 };
1024
1025 static const CGEN_IFMT fmt_addsp = {
1026   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_S10), 0 }
1027 };
1028
1029 static const CGEN_IFMT fmt_extsb = {
1030   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1031 };
1032
1033 static const CGEN_IFMT fmt_extub = {
1034   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1035 };
1036
1037 static const CGEN_IFMT fmt_extsh = {
1038   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1039 };
1040
1041 static const CGEN_IFMT fmt_extuh = {
1042   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1043 };
1044
1045 static const CGEN_IFMT fmt_ldm0 = {
1046   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_LOW_LD), 0 }
1047 };
1048
1049 static const CGEN_IFMT fmt_ldm1 = {
1050   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_HI_LD), 0 }
1051 };
1052
1053 static const CGEN_IFMT fmt_stm0 = {
1054   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_LOW_ST), 0 }
1055 };
1056
1057 static const CGEN_IFMT fmt_stm1 = {
1058   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_HI_ST), 0 }
1059 };
1060
1061 static const CGEN_IFMT fmt_enter = {
1062   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U10), 0 }
1063 };
1064
1065 static const CGEN_IFMT fmt_leave = {
1066   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1067 };
1068
1069 static const CGEN_IFMT fmt_xchb = {
1070   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1071 };
1072
1073 #undef F
1074
1075 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
1076 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1077 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1078
1079 /* The instruction table.
1080    This is currently non-static because the simulator accesses it
1081    directly.  */
1082
1083 const CGEN_INSN fr30_cgen_insn_table_entries[MAX_INSNS] =
1084 {
1085   /* Special null first entry.
1086      A `num' value of zero is thus invalid.
1087      Also, the special `invalid' insn resides here.  */
1088   { { 0 }, 0 },
1089 /* add $Rj,$Ri */
1090   {
1091     { 1, 1, 1, 1 },
1092     FR30_INSN_ADD, "add", "add",
1093     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1094     & fmt_add, { 0xa600 },
1095     (PTR) 0,
1096     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1097   },
1098 /* add $u4,$Ri */
1099   {
1100     { 1, 1, 1, 1 },
1101     FR30_INSN_ADDI, "addi", "add",
1102     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1103     & fmt_addi, { 0xa400 },
1104     (PTR) 0,
1105     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1106   },
1107 /* add2 $m4,$Ri */
1108   {
1109     { 1, 1, 1, 1 },
1110     FR30_INSN_ADD2, "add2", "add2",
1111     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1112     & fmt_add2, { 0xa500 },
1113     (PTR) 0,
1114     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1115   },
1116 /* addc $Rj,$Ri */
1117   {
1118     { 1, 1, 1, 1 },
1119     FR30_INSN_ADDC, "addc", "addc",
1120     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1121     & fmt_addc, { 0xa700 },
1122     (PTR) 0,
1123     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1124   },
1125 /* addn $Rj,$Ri */
1126   {
1127     { 1, 1, 1, 1 },
1128     FR30_INSN_ADDN, "addn", "addn",
1129     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1130     & fmt_addn, { 0xa200 },
1131     (PTR) 0,
1132     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1133   },
1134 /* addn $u4,$Ri */
1135   {
1136     { 1, 1, 1, 1 },
1137     FR30_INSN_ADDNI, "addni", "addn",
1138     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1139     & fmt_addni, { 0xa000 },
1140     (PTR) 0,
1141     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1142   },
1143 /* addn2 $m4,$Ri */
1144   {
1145     { 1, 1, 1, 1 },
1146     FR30_INSN_ADDN2, "addn2", "addn2",
1147     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1148     & fmt_addn2, { 0xa100 },
1149     (PTR) 0,
1150     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1151   },
1152 /* sub $Rj,$Ri */
1153   {
1154     { 1, 1, 1, 1 },
1155     FR30_INSN_SUB, "sub", "sub",
1156     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1157     & fmt_add, { 0xac00 },
1158     (PTR) 0,
1159     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1160   },
1161 /* subc $Rj,$Ri */
1162   {
1163     { 1, 1, 1, 1 },
1164     FR30_INSN_SUBC, "subc", "subc",
1165     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1166     & fmt_addc, { 0xad00 },
1167     (PTR) 0,
1168     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1169   },
1170 /* subn $Rj,$Ri */
1171   {
1172     { 1, 1, 1, 1 },
1173     FR30_INSN_SUBN, "subn", "subn",
1174     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1175     & fmt_addn, { 0xae00 },
1176     (PTR) 0,
1177     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1178   },
1179 /* cmp $Rj,$Ri */
1180   {
1181     { 1, 1, 1, 1 },
1182     FR30_INSN_CMP, "cmp", "cmp",
1183     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1184     & fmt_cmp, { 0xaa00 },
1185     (PTR) 0,
1186     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1187   },
1188 /* cmp $u4,$Ri */
1189   {
1190     { 1, 1, 1, 1 },
1191     FR30_INSN_CMPI, "cmpi", "cmp",
1192     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1193     & fmt_cmpi, { 0xa800 },
1194     (PTR) 0,
1195     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1196   },
1197 /* cmp2 $m4,$Ri */
1198   {
1199     { 1, 1, 1, 1 },
1200     FR30_INSN_CMP2, "cmp2", "cmp2",
1201     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1202     & fmt_cmp2, { 0xa900 },
1203     (PTR) 0,
1204     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1205   },
1206 /* and $Rj,$Ri */
1207   {
1208     { 1, 1, 1, 1 },
1209     FR30_INSN_AND, "and", "and",
1210     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1211     & fmt_and, { 0x8200 },
1212     (PTR) 0,
1213     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1214   },
1215 /* or $Rj,$Ri */
1216   {
1217     { 1, 1, 1, 1 },
1218     FR30_INSN_OR, "or", "or",
1219     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1220     & fmt_and, { 0x9200 },
1221     (PTR) 0,
1222     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1223   },
1224 /* eor $Rj,$Ri */
1225   {
1226     { 1, 1, 1, 1 },
1227     FR30_INSN_EOR, "eor", "eor",
1228     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1229     & fmt_and, { 0x9a00 },
1230     (PTR) 0,
1231     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1232   },
1233 /* and $Rj,@$Ri */
1234   {
1235     { 1, 1, 1, 1 },
1236     FR30_INSN_ANDM, "andm", "and",
1237     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1238     & fmt_andm, { 0x8400 },
1239     (PTR) 0,
1240     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1241   },
1242 /* andh $Rj,@$Ri */
1243   {
1244     { 1, 1, 1, 1 },
1245     FR30_INSN_ANDH, "andh", "andh",
1246     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1247     & fmt_andh, { 0x8500 },
1248     (PTR) 0,
1249     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1250   },
1251 /* andb $Rj,@$Ri */
1252   {
1253     { 1, 1, 1, 1 },
1254     FR30_INSN_ANDB, "andb", "andb",
1255     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1256     & fmt_andb, { 0x8600 },
1257     (PTR) 0,
1258     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1259   },
1260 /* or $Rj,@$Ri */
1261   {
1262     { 1, 1, 1, 1 },
1263     FR30_INSN_ORM, "orm", "or",
1264     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1265     & fmt_andm, { 0x9400 },
1266     (PTR) 0,
1267     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1268   },
1269 /* orh $Rj,@$Ri */
1270   {
1271     { 1, 1, 1, 1 },
1272     FR30_INSN_ORH, "orh", "orh",
1273     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1274     & fmt_andh, { 0x9500 },
1275     (PTR) 0,
1276     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1277   },
1278 /* orb $Rj,@$Ri */
1279   {
1280     { 1, 1, 1, 1 },
1281     FR30_INSN_ORB, "orb", "orb",
1282     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1283     & fmt_andb, { 0x9600 },
1284     (PTR) 0,
1285     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1286   },
1287 /* eor $Rj,@$Ri */
1288   {
1289     { 1, 1, 1, 1 },
1290     FR30_INSN_EORM, "eorm", "eor",
1291     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1292     & fmt_andm, { 0x9c00 },
1293     (PTR) 0,
1294     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1295   },
1296 /* eorh $Rj,@$Ri */
1297   {
1298     { 1, 1, 1, 1 },
1299     FR30_INSN_EORH, "eorh", "eorh",
1300     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1301     & fmt_andh, { 0x9d00 },
1302     (PTR) 0,
1303     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1304   },
1305 /* eorb $Rj,@$Ri */
1306   {
1307     { 1, 1, 1, 1 },
1308     FR30_INSN_EORB, "eorb", "eorb",
1309     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1310     & fmt_andb, { 0x9e00 },
1311     (PTR) 0,
1312     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1313   },
1314 /* bandl $u4,@$Ri */
1315   {
1316     { 1, 1, 1, 1 },
1317     FR30_INSN_BANDL, "bandl", "bandl",
1318     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1319     & fmt_bandl, { 0x8000 },
1320     (PTR) 0,
1321     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1322   },
1323 /* borl $u4,@$Ri */
1324   {
1325     { 1, 1, 1, 1 },
1326     FR30_INSN_BORL, "borl", "borl",
1327     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1328     & fmt_bandl, { 0x9000 },
1329     (PTR) 0,
1330     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1331   },
1332 /* beorl $u4,@$Ri */
1333   {
1334     { 1, 1, 1, 1 },
1335     FR30_INSN_BEORL, "beorl", "beorl",
1336     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1337     & fmt_bandl, { 0x9800 },
1338     (PTR) 0,
1339     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1340   },
1341 /* bandh $u4,@$Ri */
1342   {
1343     { 1, 1, 1, 1 },
1344     FR30_INSN_BANDH, "bandh", "bandh",
1345     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1346     & fmt_bandl, { 0x8100 },
1347     (PTR) 0,
1348     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1349   },
1350 /* borh $u4,@$Ri */
1351   {
1352     { 1, 1, 1, 1 },
1353     FR30_INSN_BORH, "borh", "borh",
1354     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1355     & fmt_bandl, { 0x9100 },
1356     (PTR) 0,
1357     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1358   },
1359 /* beorh $u4,@$Ri */
1360   {
1361     { 1, 1, 1, 1 },
1362     FR30_INSN_BEORH, "beorh", "beorh",
1363     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1364     & fmt_bandl, { 0x9900 },
1365     (PTR) 0,
1366     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1367   },
1368 /* btstl $u4,@$Ri */
1369   {
1370     { 1, 1, 1, 1 },
1371     FR30_INSN_BTSTL, "btstl", "btstl",
1372     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1373     & fmt_btstl, { 0x8800 },
1374     (PTR) 0,
1375     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1376   },
1377 /* btsth $u4,@$Ri */
1378   {
1379     { 1, 1, 1, 1 },
1380     FR30_INSN_BTSTH, "btsth", "btsth",
1381     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1382     & fmt_btstl, { 0x8900 },
1383     (PTR) 0,
1384     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1385   },
1386 /* mul $Rj,$Ri */
1387   {
1388     { 1, 1, 1, 1 },
1389     FR30_INSN_MUL, "mul", "mul",
1390     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1391     & fmt_mul, { 0xaf00 },
1392     (PTR) 0,
1393     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1394   },
1395 /* mulu $Rj,$Ri */
1396   {
1397     { 1, 1, 1, 1 },
1398     FR30_INSN_MULU, "mulu", "mulu",
1399     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1400     & fmt_mulu, { 0xab00 },
1401     (PTR) 0,
1402     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1403   },
1404 /* mulh $Rj,$Ri */
1405   {
1406     { 1, 1, 1, 1 },
1407     FR30_INSN_MULH, "mulh", "mulh",
1408     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1409     & fmt_mulh, { 0xbf00 },
1410     (PTR) 0,
1411     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1412   },
1413 /* muluh $Rj,$Ri */
1414   {
1415     { 1, 1, 1, 1 },
1416     FR30_INSN_MULUH, "muluh", "muluh",
1417     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1418     & fmt_mulh, { 0xbb00 },
1419     (PTR) 0,
1420     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1421   },
1422 /* div0s $Ri */
1423   {
1424     { 1, 1, 1, 1 },
1425     FR30_INSN_DIV0S, "div0s", "div0s",
1426     { { MNEM, ' ', OP (RI), 0 } },
1427     & fmt_div0s, { 0x9740 },
1428     (PTR) 0,
1429     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1430   },
1431 /* div0u $Ri */
1432   {
1433     { 1, 1, 1, 1 },
1434     FR30_INSN_DIV0U, "div0u", "div0u",
1435     { { MNEM, ' ', OP (RI), 0 } },
1436     & fmt_div0u, { 0x9750 },
1437     (PTR) 0,
1438     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1439   },
1440 /* div1 $Ri */
1441   {
1442     { 1, 1, 1, 1 },
1443     FR30_INSN_DIV1, "div1", "div1",
1444     { { MNEM, ' ', OP (RI), 0 } },
1445     & fmt_div1, { 0x9760 },
1446     (PTR) 0,
1447     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1448   },
1449 /* div2 $Ri */
1450   {
1451     { 1, 1, 1, 1 },
1452     FR30_INSN_DIV2, "div2", "div2",
1453     { { MNEM, ' ', OP (RI), 0 } },
1454     & fmt_div2, { 0x9770 },
1455     (PTR) 0,
1456     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1457   },
1458 /* div3 */
1459   {
1460     { 1, 1, 1, 1 },
1461     FR30_INSN_DIV3, "div3", "div3",
1462     { { MNEM, 0 } },
1463     & fmt_div3, { 0x9f60 },
1464     (PTR) 0,
1465     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1466   },
1467 /* div4s */
1468   {
1469     { 1, 1, 1, 1 },
1470     FR30_INSN_DIV4S, "div4s", "div4s",
1471     { { MNEM, 0 } },
1472     & fmt_div4s, { 0x9f70 },
1473     (PTR) 0,
1474     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1475   },
1476 /* lsl $Rj,$Ri */
1477   {
1478     { 1, 1, 1, 1 },
1479     FR30_INSN_LSL, "lsl", "lsl",
1480     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1481     & fmt_lsl, { 0xb600 },
1482     (PTR) 0,
1483     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1484   },
1485 /* lsl $u4,$Ri */
1486   {
1487     { 1, 1, 1, 1 },
1488     FR30_INSN_LSLI, "lsli", "lsl",
1489     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1490     & fmt_lsli, { 0xb400 },
1491     (PTR) 0,
1492     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1493   },
1494 /* lsl2 $u4,$Ri */
1495   {
1496     { 1, 1, 1, 1 },
1497     FR30_INSN_LSL2, "lsl2", "lsl2",
1498     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1499     & fmt_lsli, { 0xb500 },
1500     (PTR) 0,
1501     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1502   },
1503 /* lsr $Rj,$Ri */
1504   {
1505     { 1, 1, 1, 1 },
1506     FR30_INSN_LSR, "lsr", "lsr",
1507     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1508     & fmt_lsl, { 0xb200 },
1509     (PTR) 0,
1510     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1511   },
1512 /* lsr $u4,$Ri */
1513   {
1514     { 1, 1, 1, 1 },
1515     FR30_INSN_LSRI, "lsri", "lsr",
1516     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1517     & fmt_lsli, { 0xb000 },
1518     (PTR) 0,
1519     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1520   },
1521 /* lsr2 $u4,$Ri */
1522   {
1523     { 1, 1, 1, 1 },
1524     FR30_INSN_LSR2, "lsr2", "lsr2",
1525     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1526     & fmt_lsli, { 0xb100 },
1527     (PTR) 0,
1528     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1529   },
1530 /* asr $Rj,$Ri */
1531   {
1532     { 1, 1, 1, 1 },
1533     FR30_INSN_ASR, "asr", "asr",
1534     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1535     & fmt_lsl, { 0xba00 },
1536     (PTR) 0,
1537     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1538   },
1539 /* asr $u4,$Ri */
1540   {
1541     { 1, 1, 1, 1 },
1542     FR30_INSN_ASRI, "asri", "asr",
1543     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1544     & fmt_lsli, { 0xb800 },
1545     (PTR) 0,
1546     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1547   },
1548 /* asr2 $u4,$Ri */
1549   {
1550     { 1, 1, 1, 1 },
1551     FR30_INSN_ASR2, "asr2", "asr2",
1552     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1553     & fmt_lsli, { 0xb900 },
1554     (PTR) 0,
1555     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1556   },
1557 /* ldi:8 $i8,$Ri */
1558   {
1559     { 1, 1, 1, 1 },
1560     FR30_INSN_LDI8, "ldi8", "ldi:8",
1561     { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
1562     & fmt_ldi8, { 0xc000 },
1563     (PTR) 0,
1564     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1565   },
1566 /* ldi:20 $i20,$Ri */
1567   {
1568     { 1, 1, 1, 1 },
1569     FR30_INSN_LDI20, "ldi20", "ldi:20",
1570     { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
1571     & fmt_ldi20, { 0x9b00 },
1572     (PTR) 0,
1573     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1574   },
1575 /* ldi:32 $i32,$Ri */
1576   {
1577     { 1, 1, 1, 1 },
1578     FR30_INSN_LDI32, "ldi32", "ldi:32",
1579     { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
1580     & fmt_ldi32, { 0x9f80 },
1581     (PTR) 0,
1582     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1583   },
1584 /* ld @$Rj,$Ri */
1585   {
1586     { 1, 1, 1, 1 },
1587     FR30_INSN_LD, "ld", "ld",
1588     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1589     & fmt_ld, { 0x400 },
1590     (PTR) 0,
1591     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1592   },
1593 /* lduh @$Rj,$Ri */
1594   {
1595     { 1, 1, 1, 1 },
1596     FR30_INSN_LDUH, "lduh", "lduh",
1597     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1598     & fmt_lduh, { 0x500 },
1599     (PTR) 0,
1600     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1601   },
1602 /* ldub @$Rj,$Ri */
1603   {
1604     { 1, 1, 1, 1 },
1605     FR30_INSN_LDUB, "ldub", "ldub",
1606     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1607     & fmt_ldub, { 0x600 },
1608     (PTR) 0,
1609     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1610   },
1611 /* ld @($R13,$Rj),$Ri */
1612   {
1613     { 1, 1, 1, 1 },
1614     FR30_INSN_LDR13, "ldr13", "ld",
1615     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
1616     & fmt_ldr13, { 0x0 },
1617     (PTR) 0,
1618     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1619   },
1620 /* lduh @($R13,$Rj),$Ri */
1621   {
1622     { 1, 1, 1, 1 },
1623     FR30_INSN_LDR13UH, "ldr13uh", "lduh",
1624     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
1625     & fmt_ldr13uh, { 0x100 },
1626     (PTR) 0,
1627     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1628   },
1629 /* ldub @($R13,$Rj),$Ri */
1630   {
1631     { 1, 1, 1, 1 },
1632     FR30_INSN_LDR13UB, "ldr13ub", "ldub",
1633     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
1634     & fmt_ldr13ub, { 0x200 },
1635     (PTR) 0,
1636     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1637   },
1638 /* ld @($R14,$disp10),$Ri */
1639   {
1640     { 1, 1, 1, 1 },
1641     FR30_INSN_LDR14, "ldr14", "ld",
1642     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } },
1643     & fmt_ldr14, { 0x2000 },
1644     (PTR) 0,
1645     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1646   },
1647 /* lduh @($R14,$disp9),$Ri */
1648   {
1649     { 1, 1, 1, 1 },
1650     FR30_INSN_LDR14UH, "ldr14uh", "lduh",
1651     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } },
1652     & fmt_ldr14uh, { 0x4000 },
1653     (PTR) 0,
1654     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1655   },
1656 /* ldub @($R14,$disp8),$Ri */
1657   {
1658     { 1, 1, 1, 1 },
1659     FR30_INSN_LDR14UB, "ldr14ub", "ldub",
1660     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } },
1661     & fmt_ldr14ub, { 0x6000 },
1662     (PTR) 0,
1663     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1664   },
1665 /* ld @($R15,$udisp6),$Ri */
1666   {
1667     { 1, 1, 1, 1 },
1668     FR30_INSN_LDR15, "ldr15", "ld",
1669     { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } },
1670     & fmt_ldr15, { 0x300 },
1671     (PTR) 0,
1672     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1673   },
1674 /* ld @$R15+,$Ri */
1675   {
1676     { 1, 1, 1, 1 },
1677     FR30_INSN_LDR15GR, "ldr15gr", "ld",
1678     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } },
1679     & fmt_ldr15gr, { 0x700 },
1680     (PTR) 0,
1681     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1682   },
1683 /* ld @$R15+,$Rs2 */
1684   {
1685     { 1, 1, 1, 1 },
1686     FR30_INSN_LDR15DR, "ldr15dr", "ld",
1687     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } },
1688     & fmt_ldr15dr, { 0x780 },
1689     (PTR) 0,
1690     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1691   },
1692 /* ld @$R15+,$ps */
1693   {
1694     { 1, 1, 1, 1 },
1695     FR30_INSN_LDR15PS, "ldr15ps", "ld",
1696     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } },
1697     & fmt_ldr15ps, { 0x790 },
1698     (PTR) 0,
1699     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
1700   },
1701 /* st $Ri,@$Rj */
1702   {
1703     { 1, 1, 1, 1 },
1704     FR30_INSN_ST, "st", "st",
1705     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
1706     & fmt_st, { 0x1400 },
1707     (PTR) 0,
1708     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1709   },
1710 /* sth $Ri,@$Rj */
1711   {
1712     { 1, 1, 1, 1 },
1713     FR30_INSN_STH, "sth", "sth",
1714     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
1715     & fmt_sth, { 0x1500 },
1716     (PTR) 0,
1717     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1718   },
1719 /* stb $Ri,@$Rj */
1720   {
1721     { 1, 1, 1, 1 },
1722     FR30_INSN_STB, "stb", "stb",
1723     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
1724     & fmt_stb, { 0x1600 },
1725     (PTR) 0,
1726     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1727   },
1728 /* st $Ri,@($R13,$Rj) */
1729   {
1730     { 1, 1, 1, 1 },
1731     FR30_INSN_STR13, "str13", "st",
1732     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
1733     & fmt_str13, { 0x1000 },
1734     (PTR) 0,
1735     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1736   },
1737 /* sth $Ri,@($R13,$Rj) */
1738   {
1739     { 1, 1, 1, 1 },
1740     FR30_INSN_STR13H, "str13h", "sth",
1741     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
1742     & fmt_str13h, { 0x1100 },
1743     (PTR) 0,
1744     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1745   },
1746 /* stb $Ri,@($R13,$Rj) */
1747   {
1748     { 1, 1, 1, 1 },
1749     FR30_INSN_STR13B, "str13b", "stb",
1750     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
1751     & fmt_str13b, { 0x1200 },
1752     (PTR) 0,
1753     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1754   },
1755 /* st $Ri,@($R14,$disp10) */
1756   {
1757     { 1, 1, 1, 1 },
1758     FR30_INSN_STR14, "str14", "st",
1759     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } },
1760     & fmt_str14, { 0x3000 },
1761     (PTR) 0,
1762     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1763   },
1764 /* sth $Ri,@($R14,$disp9) */
1765   {
1766     { 1, 1, 1, 1 },
1767     FR30_INSN_STR14H, "str14h", "sth",
1768     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } },
1769     & fmt_str14h, { 0x5000 },
1770     (PTR) 0,
1771     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1772   },
1773 /* stb $Ri,@($R14,$disp8) */
1774   {
1775     { 1, 1, 1, 1 },
1776     FR30_INSN_STR14B, "str14b", "stb",
1777     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } },
1778     & fmt_str14b, { 0x7000 },
1779     (PTR) 0,
1780     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1781   },
1782 /* st $Ri,@($R15,$udisp6) */
1783   {
1784     { 1, 1, 1, 1 },
1785     FR30_INSN_STR15, "str15", "st",
1786     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } },
1787     & fmt_str15, { 0x1300 },
1788     (PTR) 0,
1789     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1790   },
1791 /* st $Ri,@-$R15 */
1792   {
1793     { 1, 1, 1, 1 },
1794     FR30_INSN_STR15GR, "str15gr", "st",
1795     { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } },
1796     & fmt_str15gr, { 0x1700 },
1797     (PTR) 0,
1798     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1799   },
1800 /* st $Rs2,@-$R15 */
1801   {
1802     { 1, 1, 1, 1 },
1803     FR30_INSN_STR15DR, "str15dr", "st",
1804     { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } },
1805     & fmt_str15dr, { 0x1780 },
1806     (PTR) 0,
1807     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1808   },
1809 /* st $ps,@-$R15 */
1810   {
1811     { 1, 1, 1, 1 },
1812     FR30_INSN_STR15PS, "str15ps", "st",
1813     { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } },
1814     & fmt_str15ps, { 0x1790 },
1815     (PTR) 0,
1816     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1817   },
1818 /* mov $Rj,$Ri */
1819   {
1820     { 1, 1, 1, 1 },
1821     FR30_INSN_MOV, "mov", "mov",
1822     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1823     & fmt_mov, { 0x8b00 },
1824     (PTR) 0,
1825     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1826   },
1827 /* mov $Rs1,$Ri */
1828   {
1829     { 1, 1, 1, 1 },
1830     FR30_INSN_MOVDR, "movdr", "mov",
1831     { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
1832     & fmt_movdr, { 0xb700 },
1833     (PTR) 0,
1834     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1835   },
1836 /* mov $ps,$Ri */
1837   {
1838     { 1, 1, 1, 1 },
1839     FR30_INSN_MOVPS, "movps", "mov",
1840     { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } },
1841     & fmt_movps, { 0x1710 },
1842     (PTR) 0,
1843     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1844   },
1845 /* mov $Ri,$Rs1 */
1846   {
1847     { 1, 1, 1, 1 },
1848     FR30_INSN_MOV2DR, "mov2dr", "mov",
1849     { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
1850     & fmt_mov2dr, { 0xb300 },
1851     (PTR) 0,
1852     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1853   },
1854 /* mov $Ri,$ps */
1855   {
1856     { 1, 1, 1, 1 },
1857     FR30_INSN_MOV2PS, "mov2ps", "mov",
1858     { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } },
1859     & fmt_mov2ps, { 0x710 },
1860     (PTR) 0,
1861     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1862   },
1863 /* jmp @$Ri */
1864   {
1865     { 1, 1, 1, 1 },
1866     FR30_INSN_JMP, "jmp", "jmp",
1867     { { MNEM, ' ', '@', OP (RI), 0 } },
1868     & fmt_jmp, { 0x9700 },
1869     (PTR) 0,
1870     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
1871   },
1872 /* jmp:d @$Ri */
1873   {
1874     { 1, 1, 1, 1 },
1875     FR30_INSN_JMPD, "jmpd", "jmp:d",
1876     { { MNEM, ' ', '@', OP (RI), 0 } },
1877     & fmt_jmp, { 0x9f00 },
1878     (PTR) 0,
1879     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
1880   },
1881 /* call @$Ri */
1882   {
1883     { 1, 1, 1, 1 },
1884     FR30_INSN_CALLR, "callr", "call",
1885     { { MNEM, ' ', '@', OP (RI), 0 } },
1886     & fmt_callr, { 0x9710 },
1887     (PTR) 0,
1888     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
1889   },
1890 /* call:d @$Ri */
1891   {
1892     { 1, 1, 1, 1 },
1893     FR30_INSN_CALLRD, "callrd", "call:d",
1894     { { MNEM, ' ', '@', OP (RI), 0 } },
1895     & fmt_callr, { 0x9f10 },
1896     (PTR) 0,
1897     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
1898   },
1899 /* call $label12 */
1900   {
1901     { 1, 1, 1, 1 },
1902     FR30_INSN_CALL, "call", "call",
1903     { { MNEM, ' ', OP (LABEL12), 0 } },
1904     & fmt_call, { 0xd000 },
1905     (PTR) 0,
1906     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
1907   },
1908 /* call:d $label12 */
1909   {
1910     { 1, 1, 1, 1 },
1911     FR30_INSN_CALLD, "calld", "call:d",
1912     { { MNEM, ' ', OP (LABEL12), 0 } },
1913     & fmt_call, { 0xd800 },
1914     (PTR) 0,
1915     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
1916   },
1917 /* ret */
1918   {
1919     { 1, 1, 1, 1 },
1920     FR30_INSN_RET, "ret", "ret",
1921     { { MNEM, 0 } },
1922     & fmt_ret, { 0x9720 },
1923     (PTR) 0,
1924     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
1925   },
1926 /* ret:d */
1927   {
1928     { 1, 1, 1, 1 },
1929     FR30_INSN_RET_D, "ret:d", "ret:d",
1930     { { MNEM, 0 } },
1931     & fmt_ret, { 0x9f20 },
1932     (PTR) 0,
1933     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
1934   },
1935 /* int $u8 */
1936   {
1937     { 1, 1, 1, 1 },
1938     FR30_INSN_INT, "int", "int",
1939     { { MNEM, ' ', OP (U8), 0 } },
1940     & fmt_int, { 0x1f00 },
1941     (PTR) 0,
1942     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
1943   },
1944 /* inte */
1945   {
1946     { 1, 1, 1, 1 },
1947     FR30_INSN_INTE, "inte", "inte",
1948     { { MNEM, 0 } },
1949     & fmt_inte, { 0x9f30 },
1950     (PTR) 0,
1951     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
1952   },
1953 /* reti */
1954   {
1955     { 1, 1, 1, 1 },
1956     FR30_INSN_RETI, "reti", "reti",
1957     { { MNEM, 0 } },
1958     & fmt_reti, { 0x9730 },
1959     (PTR) 0,
1960     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
1961   },
1962 /* bra:d $label9 */
1963   {
1964     { 1, 1, 1, 1 },
1965     FR30_INSN_BRAD, "brad", "bra:d",
1966     { { MNEM, ' ', OP (LABEL9), 0 } },
1967     & fmt_brad, { 0xf000 },
1968     (PTR) 0,
1969     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
1970   },
1971 /* bra $label9 */
1972   {
1973     { 1, 1, 1, 1 },
1974     FR30_INSN_BRA, "bra", "bra",
1975     { { MNEM, ' ', OP (LABEL9), 0 } },
1976     & fmt_brad, { 0xe000 },
1977     (PTR) 0,
1978     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
1979   },
1980 /* bno:d $label9 */
1981   {
1982     { 1, 1, 1, 1 },
1983     FR30_INSN_BNOD, "bnod", "bno:d",
1984     { { MNEM, ' ', OP (LABEL9), 0 } },
1985     & fmt_brad, { 0xf100 },
1986     (PTR) 0,
1987     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
1988   },
1989 /* bno $label9 */
1990   {
1991     { 1, 1, 1, 1 },
1992     FR30_INSN_BNO, "bno", "bno",
1993     { { MNEM, ' ', OP (LABEL9), 0 } },
1994     & fmt_brad, { 0xe100 },
1995     (PTR) 0,
1996     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
1997   },
1998 /* beq:d $label9 */
1999   {
2000     { 1, 1, 1, 1 },
2001     FR30_INSN_BEQD, "beqd", "beq:d",
2002     { { MNEM, ' ', OP (LABEL9), 0 } },
2003     & fmt_beqd, { 0xf200 },
2004     (PTR) 0,
2005     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2006   },
2007 /* beq $label9 */
2008   {
2009     { 1, 1, 1, 1 },
2010     FR30_INSN_BEQ, "beq", "beq",
2011     { { MNEM, ' ', OP (LABEL9), 0 } },
2012     & fmt_beqd, { 0xe200 },
2013     (PTR) 0,
2014     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2015   },
2016 /* bne:d $label9 */
2017   {
2018     { 1, 1, 1, 1 },
2019     FR30_INSN_BNED, "bned", "bne:d",
2020     { { MNEM, ' ', OP (LABEL9), 0 } },
2021     & fmt_beqd, { 0xf300 },
2022     (PTR) 0,
2023     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2024   },
2025 /* bne $label9 */
2026   {
2027     { 1, 1, 1, 1 },
2028     FR30_INSN_BNE, "bne", "bne",
2029     { { MNEM, ' ', OP (LABEL9), 0 } },
2030     & fmt_beqd, { 0xe300 },
2031     (PTR) 0,
2032     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2033   },
2034 /* bc:d $label9 */
2035   {
2036     { 1, 1, 1, 1 },
2037     FR30_INSN_BCD, "bcd", "bc:d",
2038     { { MNEM, ' ', OP (LABEL9), 0 } },
2039     & fmt_bcd, { 0xf400 },
2040     (PTR) 0,
2041     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2042   },
2043 /* bc $label9 */
2044   {
2045     { 1, 1, 1, 1 },
2046     FR30_INSN_BC, "bc", "bc",
2047     { { MNEM, ' ', OP (LABEL9), 0 } },
2048     & fmt_bcd, { 0xe400 },
2049     (PTR) 0,
2050     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2051   },
2052 /* bnc:d $label9 */
2053   {
2054     { 1, 1, 1, 1 },
2055     FR30_INSN_BNCD, "bncd", "bnc:d",
2056     { { MNEM, ' ', OP (LABEL9), 0 } },
2057     & fmt_bcd, { 0xf500 },
2058     (PTR) 0,
2059     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2060   },
2061 /* bnc $label9 */
2062   {
2063     { 1, 1, 1, 1 },
2064     FR30_INSN_BNC, "bnc", "bnc",
2065     { { MNEM, ' ', OP (LABEL9), 0 } },
2066     & fmt_bcd, { 0xe500 },
2067     (PTR) 0,
2068     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2069   },
2070 /* bn:d $label9 */
2071   {
2072     { 1, 1, 1, 1 },
2073     FR30_INSN_BND, "bnd", "bn:d",
2074     { { MNEM, ' ', OP (LABEL9), 0 } },
2075     & fmt_bnd, { 0xf600 },
2076     (PTR) 0,
2077     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2078   },
2079 /* bn $label9 */
2080   {
2081     { 1, 1, 1, 1 },
2082     FR30_INSN_BN, "bn", "bn",
2083     { { MNEM, ' ', OP (LABEL9), 0 } },
2084     & fmt_bnd, { 0xe600 },
2085     (PTR) 0,
2086     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2087   },
2088 /* bp:d $label9 */
2089   {
2090     { 1, 1, 1, 1 },
2091     FR30_INSN_BPD, "bpd", "bp:d",
2092     { { MNEM, ' ', OP (LABEL9), 0 } },
2093     & fmt_bnd, { 0xf700 },
2094     (PTR) 0,
2095     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2096   },
2097 /* bp $label9 */
2098   {
2099     { 1, 1, 1, 1 },
2100     FR30_INSN_BP, "bp", "bp",
2101     { { MNEM, ' ', OP (LABEL9), 0 } },
2102     & fmt_bnd, { 0xe700 },
2103     (PTR) 0,
2104     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2105   },
2106 /* bv:d $label9 */
2107   {
2108     { 1, 1, 1, 1 },
2109     FR30_INSN_BVD, "bvd", "bv:d",
2110     { { MNEM, ' ', OP (LABEL9), 0 } },
2111     & fmt_bvd, { 0xf800 },
2112     (PTR) 0,
2113     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2114   },
2115 /* bv $label9 */
2116   {
2117     { 1, 1, 1, 1 },
2118     FR30_INSN_BV, "bv", "bv",
2119     { { MNEM, ' ', OP (LABEL9), 0 } },
2120     & fmt_bvd, { 0xe800 },
2121     (PTR) 0,
2122     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2123   },
2124 /* bnv:d $label9 */
2125   {
2126     { 1, 1, 1, 1 },
2127     FR30_INSN_BNVD, "bnvd", "bnv:d",
2128     { { MNEM, ' ', OP (LABEL9), 0 } },
2129     & fmt_bvd, { 0xf900 },
2130     (PTR) 0,
2131     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2132   },
2133 /* bnv $label9 */
2134   {
2135     { 1, 1, 1, 1 },
2136     FR30_INSN_BNV, "bnv", "bnv",
2137     { { MNEM, ' ', OP (LABEL9), 0 } },
2138     & fmt_bvd, { 0xe900 },
2139     (PTR) 0,
2140     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2141   },
2142 /* blt:d $label9 */
2143   {
2144     { 1, 1, 1, 1 },
2145     FR30_INSN_BLTD, "bltd", "blt:d",
2146     { { MNEM, ' ', OP (LABEL9), 0 } },
2147     & fmt_bltd, { 0xfa00 },
2148     (PTR) 0,
2149     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2150   },
2151 /* blt $label9 */
2152   {
2153     { 1, 1, 1, 1 },
2154     FR30_INSN_BLT, "blt", "blt",
2155     { { MNEM, ' ', OP (LABEL9), 0 } },
2156     & fmt_bltd, { 0xea00 },
2157     (PTR) 0,
2158     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2159   },
2160 /* bge:d $label9 */
2161   {
2162     { 1, 1, 1, 1 },
2163     FR30_INSN_BGED, "bged", "bge:d",
2164     { { MNEM, ' ', OP (LABEL9), 0 } },
2165     & fmt_bltd, { 0xfb00 },
2166     (PTR) 0,
2167     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2168   },
2169 /* bge $label9 */
2170   {
2171     { 1, 1, 1, 1 },
2172     FR30_INSN_BGE, "bge", "bge",
2173     { { MNEM, ' ', OP (LABEL9), 0 } },
2174     & fmt_bltd, { 0xeb00 },
2175     (PTR) 0,
2176     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2177   },
2178 /* ble:d $label9 */
2179   {
2180     { 1, 1, 1, 1 },
2181     FR30_INSN_BLED, "bled", "ble:d",
2182     { { MNEM, ' ', OP (LABEL9), 0 } },
2183     & fmt_bled, { 0xfc00 },
2184     (PTR) 0,
2185     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2186   },
2187 /* ble $label9 */
2188   {
2189     { 1, 1, 1, 1 },
2190     FR30_INSN_BLE, "ble", "ble",
2191     { { MNEM, ' ', OP (LABEL9), 0 } },
2192     & fmt_bled, { 0xec00 },
2193     (PTR) 0,
2194     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2195   },
2196 /* bgt:d $label9 */
2197   {
2198     { 1, 1, 1, 1 },
2199     FR30_INSN_BGTD, "bgtd", "bgt:d",
2200     { { MNEM, ' ', OP (LABEL9), 0 } },
2201     & fmt_bled, { 0xfd00 },
2202     (PTR) 0,
2203     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2204   },
2205 /* bgt $label9 */
2206   {
2207     { 1, 1, 1, 1 },
2208     FR30_INSN_BGT, "bgt", "bgt",
2209     { { MNEM, ' ', OP (LABEL9), 0 } },
2210     & fmt_bled, { 0xed00 },
2211     (PTR) 0,
2212     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2213   },
2214 /* bls:d $label9 */
2215   {
2216     { 1, 1, 1, 1 },
2217     FR30_INSN_BLSD, "blsd", "bls:d",
2218     { { MNEM, ' ', OP (LABEL9), 0 } },
2219     & fmt_blsd, { 0xfe00 },
2220     (PTR) 0,
2221     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2222   },
2223 /* bls $label9 */
2224   {
2225     { 1, 1, 1, 1 },
2226     FR30_INSN_BLS, "bls", "bls",
2227     { { MNEM, ' ', OP (LABEL9), 0 } },
2228     & fmt_blsd, { 0xee00 },
2229     (PTR) 0,
2230     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2231   },
2232 /* bhi:d $label9 */
2233   {
2234     { 1, 1, 1, 1 },
2235     FR30_INSN_BHID, "bhid", "bhi:d",
2236     { { MNEM, ' ', OP (LABEL9), 0 } },
2237     & fmt_blsd, { 0xff00 },
2238     (PTR) 0,
2239     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2240   },
2241 /* bhi $label9 */
2242   {
2243     { 1, 1, 1, 1 },
2244     FR30_INSN_BHI, "bhi", "bhi",
2245     { { MNEM, ' ', OP (LABEL9), 0 } },
2246     & fmt_blsd, { 0xef00 },
2247     (PTR) 0,
2248     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2249   },
2250 /* dmov $R13,@$dir10 */
2251   {
2252     { 1, 1, 1, 1 },
2253     FR30_INSN_DMOVR13, "dmovr13", "dmov",
2254     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } },
2255     & fmt_dmovr13, { 0x1800 },
2256     (PTR) 0,
2257     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2258   },
2259 /* dmovh $R13,@$dir9 */
2260   {
2261     { 1, 1, 1, 1 },
2262     FR30_INSN_DMOVR13H, "dmovr13h", "dmovh",
2263     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } },
2264     & fmt_dmovr13h, { 0x1900 },
2265     (PTR) 0,
2266     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2267   },
2268 /* dmovb $R13,@$dir8 */
2269   {
2270     { 1, 1, 1, 1 },
2271     FR30_INSN_DMOVR13B, "dmovr13b", "dmovb",
2272     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } },
2273     & fmt_dmovr13b, { 0x1a00 },
2274     (PTR) 0,
2275     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2276   },
2277 /* dmov @$R13+,@$dir10 */
2278   {
2279     { 1, 1, 1, 1 },
2280     FR30_INSN_DMOVR13PI, "dmovr13pi", "dmov",
2281     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } },
2282     & fmt_dmovr13pi, { 0x1c00 },
2283     (PTR) 0,
2284     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2285   },
2286 /* dmovh @$R13+,@$dir9 */
2287   {
2288     { 1, 1, 1, 1 },
2289     FR30_INSN_DMOVR13PIH, "dmovr13pih", "dmovh",
2290     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } },
2291     & fmt_dmovr13pih, { 0x1d00 },
2292     (PTR) 0,
2293     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2294   },
2295 /* dmovb @$R13+,@$dir8 */
2296   {
2297     { 1, 1, 1, 1 },
2298     FR30_INSN_DMOVR13PIB, "dmovr13pib", "dmovb",
2299     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } },
2300     & fmt_dmovr13pib, { 0x1e00 },
2301     (PTR) 0,
2302     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2303   },
2304 /* dmov @$R15+,@$dir10 */
2305   {
2306     { 1, 1, 1, 1 },
2307     FR30_INSN_DMOVR15PI, "dmovr15pi", "dmov",
2308     { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } },
2309     & fmt_dmovr15pi, { 0x1b00 },
2310     (PTR) 0,
2311     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2312   },
2313 /* dmov @$dir10,$R13 */
2314   {
2315     { 1, 1, 1, 1 },
2316     FR30_INSN_DMOV2R13, "dmov2r13", "dmov",
2317     { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } },
2318     & fmt_dmov2r13, { 0x800 },
2319     (PTR) 0,
2320     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2321   },
2322 /* dmovh @$dir9,$R13 */
2323   {
2324     { 1, 1, 1, 1 },
2325     FR30_INSN_DMOV2R13H, "dmov2r13h", "dmovh",
2326     { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } },
2327     & fmt_dmov2r13h, { 0x900 },
2328     (PTR) 0,
2329     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2330   },
2331 /* dmovb @$dir8,$R13 */
2332   {
2333     { 1, 1, 1, 1 },
2334     FR30_INSN_DMOV2R13B, "dmov2r13b", "dmovb",
2335     { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } },
2336     & fmt_dmov2r13b, { 0xa00 },
2337     (PTR) 0,
2338     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2339   },
2340 /* dmov @$dir10,@$R13+ */
2341   {
2342     { 1, 1, 1, 1 },
2343     FR30_INSN_DMOV2R13PI, "dmov2r13pi", "dmov",
2344     { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } },
2345     & fmt_dmov2r13pi, { 0xc00 },
2346     (PTR) 0,
2347     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2348   },
2349 /* dmovh @$dir9,@$R13+ */
2350   {
2351     { 1, 1, 1, 1 },
2352     FR30_INSN_DMOV2R13PIH, "dmov2r13pih", "dmovh",
2353     { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } },
2354     & fmt_dmov2r13pih, { 0xd00 },
2355     (PTR) 0,
2356     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2357   },
2358 /* dmovb @$dir8,@$R13+ */
2359   {
2360     { 1, 1, 1, 1 },
2361     FR30_INSN_DMOV2R13PIB, "dmov2r13pib", "dmovb",
2362     { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } },
2363     & fmt_dmov2r13pib, { 0xe00 },
2364     (PTR) 0,
2365     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2366   },
2367 /* dmov @$dir10,@-$R15 */
2368   {
2369     { 1, 1, 1, 1 },
2370     FR30_INSN_DMOV2R15PD, "dmov2r15pd", "dmov",
2371     { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } },
2372     & fmt_dmov2r15pd, { 0xb00 },
2373     (PTR) 0,
2374     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2375   },
2376 /* ldres @$Ri+,$u4 */
2377   {
2378     { 1, 1, 1, 1 },
2379     FR30_INSN_LDRES, "ldres", "ldres",
2380     { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
2381     & fmt_ldres, { 0xbc00 },
2382     (PTR) 0,
2383     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2384   },
2385 /* stres $u4,@$Ri+ */
2386   {
2387     { 1, 1, 1, 1 },
2388     FR30_INSN_STRES, "stres", "stres",
2389     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
2390     & fmt_ldres, { 0xbd00 },
2391     (PTR) 0,
2392     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2393   },
2394 /* copop $u4c,$ccc,$CRj,$CRi */
2395   {
2396     { 1, 1, 1, 1 },
2397     FR30_INSN_COPOP, "copop", "copop",
2398     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } },
2399     & fmt_copop, { 0x9fc0 },
2400     (PTR) 0,
2401     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2402   },
2403 /* copld $u4c,$ccc,$Rjc,$CRi */
2404   {
2405     { 1, 1, 1, 1 },
2406     FR30_INSN_COPLD, "copld", "copld",
2407     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } },
2408     & fmt_copld, { 0x9fd0 },
2409     (PTR) 0,
2410     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2411   },
2412 /* copst $u4c,$ccc,$CRj,$Ric */
2413   {
2414     { 1, 1, 1, 1 },
2415     FR30_INSN_COPST, "copst", "copst",
2416     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
2417     & fmt_copst, { 0x9fe0 },
2418     (PTR) 0,
2419     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2420   },
2421 /* copsv $u4c,$ccc,$CRj,$Ric */
2422   {
2423     { 1, 1, 1, 1 },
2424     FR30_INSN_COPSV, "copsv", "copsv",
2425     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
2426     & fmt_copst, { 0x9ff0 },
2427     (PTR) 0,
2428     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2429   },
2430 /* nop */
2431   {
2432     { 1, 1, 1, 1 },
2433     FR30_INSN_NOP, "nop", "nop",
2434     { { MNEM, 0 } },
2435     & fmt_nop, { 0x9fa0 },
2436     (PTR) 0,
2437     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2438   },
2439 /* andccr $u8 */
2440   {
2441     { 1, 1, 1, 1 },
2442     FR30_INSN_ANDCCR, "andccr", "andccr",
2443     { { MNEM, ' ', OP (U8), 0 } },
2444     & fmt_andccr, { 0x8300 },
2445     (PTR) 0,
2446     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2447   },
2448 /* orccr $u8 */
2449   {
2450     { 1, 1, 1, 1 },
2451     FR30_INSN_ORCCR, "orccr", "orccr",
2452     { { MNEM, ' ', OP (U8), 0 } },
2453     & fmt_andccr, { 0x9300 },
2454     (PTR) 0,
2455     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2456   },
2457 /* stilm $u8 */
2458   {
2459     { 1, 1, 1, 1 },
2460     FR30_INSN_STILM, "stilm", "stilm",
2461     { { MNEM, ' ', OP (U8), 0 } },
2462     & fmt_stilm, { 0x8700 },
2463     (PTR) 0,
2464     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2465   },
2466 /* addsp $s10 */
2467   {
2468     { 1, 1, 1, 1 },
2469     FR30_INSN_ADDSP, "addsp", "addsp",
2470     { { MNEM, ' ', OP (S10), 0 } },
2471     & fmt_addsp, { 0xa300 },
2472     (PTR) 0,
2473     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2474   },
2475 /* extsb $Ri */
2476   {
2477     { 1, 1, 1, 1 },
2478     FR30_INSN_EXTSB, "extsb", "extsb",
2479     { { MNEM, ' ', OP (RI), 0 } },
2480     & fmt_extsb, { 0x9780 },
2481     (PTR) 0,
2482     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2483   },
2484 /* extub $Ri */
2485   {
2486     { 1, 1, 1, 1 },
2487     FR30_INSN_EXTUB, "extub", "extub",
2488     { { MNEM, ' ', OP (RI), 0 } },
2489     & fmt_extub, { 0x9790 },
2490     (PTR) 0,
2491     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2492   },
2493 /* extsh $Ri */
2494   {
2495     { 1, 1, 1, 1 },
2496     FR30_INSN_EXTSH, "extsh", "extsh",
2497     { { MNEM, ' ', OP (RI), 0 } },
2498     & fmt_extsh, { 0x97a0 },
2499     (PTR) 0,
2500     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2501   },
2502 /* extuh $Ri */
2503   {
2504     { 1, 1, 1, 1 },
2505     FR30_INSN_EXTUH, "extuh", "extuh",
2506     { { MNEM, ' ', OP (RI), 0 } },
2507     & fmt_extuh, { 0x97b0 },
2508     (PTR) 0,
2509     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2510   },
2511 /* ldm0 ($reglist_low_ld) */
2512   {
2513     { 1, 1, 1, 1 },
2514     FR30_INSN_LDM0, "ldm0", "ldm0",
2515     { { MNEM, ' ', '(', OP (REGLIST_LOW_LD), ')', 0 } },
2516     & fmt_ldm0, { 0x8c00 },
2517     (PTR) 0,
2518     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2519   },
2520 /* ldm1 ($reglist_hi_ld) */
2521   {
2522     { 1, 1, 1, 1 },
2523     FR30_INSN_LDM1, "ldm1", "ldm1",
2524     { { MNEM, ' ', '(', OP (REGLIST_HI_LD), ')', 0 } },
2525     & fmt_ldm1, { 0x8d00 },
2526     (PTR) 0,
2527     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2528   },
2529 /* stm0 ($reglist_low_st) */
2530   {
2531     { 1, 1, 1, 1 },
2532     FR30_INSN_STM0, "stm0", "stm0",
2533     { { MNEM, ' ', '(', OP (REGLIST_LOW_ST), ')', 0 } },
2534     & fmt_stm0, { 0x8e00 },
2535     (PTR) 0,
2536     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2537   },
2538 /* stm1 ($reglist_hi_st) */
2539   {
2540     { 1, 1, 1, 1 },
2541     FR30_INSN_STM1, "stm1", "stm1",
2542     { { MNEM, ' ', '(', OP (REGLIST_HI_ST), ')', 0 } },
2543     & fmt_stm1, { 0x8f00 },
2544     (PTR) 0,
2545     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2546   },
2547 /* enter $u10 */
2548   {
2549     { 1, 1, 1, 1 },
2550     FR30_INSN_ENTER, "enter", "enter",
2551     { { MNEM, ' ', OP (U10), 0 } },
2552     & fmt_enter, { 0xf00 },
2553     (PTR) 0,
2554     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2555   },
2556 /* leave */
2557   {
2558     { 1, 1, 1, 1 },
2559     FR30_INSN_LEAVE, "leave", "leave",
2560     { { MNEM, 0 } },
2561     & fmt_leave, { 0x9f90 },
2562     (PTR) 0,
2563     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2564   },
2565 /* xchb @$Rj,$Ri */
2566   {
2567     { 1, 1, 1, 1 },
2568     FR30_INSN_XCHB, "xchb", "xchb",
2569     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
2570     & fmt_xchb, { 0x8a00 },
2571     (PTR) 0,
2572     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2573   },
2574 };
2575
2576 #undef A
2577 #undef MNEM
2578 #undef OP
2579
2580 static const CGEN_INSN_TABLE insn_table =
2581 {
2582   & fr30_cgen_insn_table_entries[0],
2583   sizeof (CGEN_INSN),
2584   MAX_INSNS,
2585   NULL
2586 };
2587
2588 /* Formats for ALIAS macro-insns.  */
2589
2590 #define F(f) & fr30_cgen_ifld_table[CONCAT2 (FR30_,f)]
2591
2592 static const CGEN_IFMT fmt_ldi8m = {
2593   16, 16, 0xf000, { F (F_OP1), F (F_I8), F (F_RI), 0 }
2594 };
2595
2596 static const CGEN_IFMT fmt_ldi20m = {
2597   16, 32, 0xff00, { F (F_OP1), F (F_I20), F (F_OP2), F (F_RI), 0 }
2598 };
2599
2600 static const CGEN_IFMT fmt_ldi32m = {
2601   16, 48, 0xfff0, { F (F_OP1), F (F_I32), F (F_OP2), F (F_OP3), F (F_RI), 0 }
2602 };
2603
2604 #undef F
2605
2606 /* Each non-simple macro entry points to an array of expansion possibilities.  */
2607
2608 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
2609 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
2610 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
2611
2612 /* The macro instruction table.  */
2613
2614 static const CGEN_INSN macro_insn_table_entries[] =
2615 {
2616 /* ldi8 $i8,$Ri */
2617   {
2618     { 1, 1, 1, 1 },
2619     -1, "ldi8m", "ldi8",
2620     { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
2621     & fmt_ldi8m, { 0xc000 },
2622     (PTR) 0,
2623     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
2624   },
2625 /* ldi20 $i20,$Ri */
2626   {
2627     { 1, 1, 1, 1 },
2628     -1, "ldi20m", "ldi20",
2629     { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
2630     & fmt_ldi20m, { 0x9b00 },
2631     (PTR) 0,
2632     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
2633   },
2634 /* ldi32 $i32,$Ri */
2635   {
2636     { 1, 1, 1, 1 },
2637     -1, "ldi32m", "ldi32",
2638     { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
2639     & fmt_ldi32m, { 0x9f80 },
2640     (PTR) 0,
2641     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
2642   },
2643 };
2644
2645 #undef A
2646 #undef MNEM
2647 #undef OP
2648
2649 static const CGEN_INSN_TABLE macro_insn_table =
2650 {
2651   & macro_insn_table_entries[0],
2652   sizeof (CGEN_INSN),
2653   (sizeof (macro_insn_table_entries) /
2654    sizeof (macro_insn_table_entries[0])),
2655   NULL
2656 };
2657
2658 static void
2659 init_tables ()
2660 {
2661 }
2662
2663 /* Return non-zero if INSN is to be added to the hash table.
2664    Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
2665
2666 static int
2667 asm_hash_insn_p (insn)
2668      const CGEN_INSN * insn;
2669 {
2670   return CGEN_ASM_HASH_P (insn);
2671 }
2672
2673 static int
2674 dis_hash_insn_p (insn)
2675      const CGEN_INSN * insn;
2676 {
2677   /* If building the hash table and the NO-DIS attribute is present,
2678      ignore.  */
2679   if (CGEN_INSN_ATTR (insn, CGEN_INSN_NO_DIS))
2680     return 0;
2681   return CGEN_DIS_HASH_P (insn);
2682 }
2683
2684 /* The result is the hash value of the insn.
2685    Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
2686
2687 static unsigned int
2688 asm_hash_insn (mnem)
2689      const char * mnem;
2690 {
2691   return CGEN_ASM_HASH (mnem);
2692 }
2693
2694 /* BUF is a pointer to the insn's bytes in target order.
2695    VALUE is an integer of the first CGEN_BASE_INSN_BITSIZE bits,
2696    host order.  */
2697
2698 static unsigned int
2699 dis_hash_insn (buf, value)
2700      const char * buf;
2701      CGEN_INSN_INT value;
2702 {
2703   return CGEN_DIS_HASH (buf, value);
2704 }
2705
2706 /* Initialize an opcode table and return a descriptor.
2707    It's much like opening a file, and must be the first function called.  */
2708
2709 CGEN_OPCODE_DESC
2710 fr30_cgen_opcode_open (mach, endian)
2711      int mach;
2712      enum cgen_endian endian;
2713 {
2714   CGEN_OPCODE_TABLE * table = (CGEN_OPCODE_TABLE *) xmalloc (sizeof (CGEN_OPCODE_TABLE));
2715   static int init_p;
2716
2717   if (! init_p)
2718     {
2719       init_tables ();
2720       init_p = 1;
2721     }
2722
2723   memset (table, 0, sizeof (*table));
2724
2725   CGEN_OPCODE_MACH (table) = mach;
2726   CGEN_OPCODE_ENDIAN (table) = endian;
2727   /* FIXME: for the sparc case we can determine insn-endianness statically.
2728      The worry here is where both data and insn endian can be independently
2729      chosen, in which case this function will need another argument.
2730      Actually, will want to allow for more arguments in the future anyway.  */
2731   CGEN_OPCODE_INSN_ENDIAN (table) = endian;
2732
2733   CGEN_OPCODE_HW_LIST (table) = & fr30_cgen_hw_entries[0];
2734
2735   CGEN_OPCODE_IFLD_TABLE (table) = & fr30_cgen_ifld_table[0];
2736
2737   CGEN_OPCODE_OPERAND_TABLE (table) = & fr30_cgen_operand_table[0];
2738
2739   * CGEN_OPCODE_INSN_TABLE (table) = insn_table;
2740
2741   * CGEN_OPCODE_MACRO_INSN_TABLE (table) = macro_insn_table;
2742
2743   CGEN_OPCODE_ASM_HASH_P (table) = asm_hash_insn_p;
2744   CGEN_OPCODE_ASM_HASH (table) = asm_hash_insn;
2745   CGEN_OPCODE_ASM_HASH_SIZE (table) = CGEN_ASM_HASH_SIZE;
2746
2747   CGEN_OPCODE_DIS_HASH_P (table) = dis_hash_insn_p;
2748   CGEN_OPCODE_DIS_HASH (table) = dis_hash_insn;
2749   CGEN_OPCODE_DIS_HASH_SIZE (table) = CGEN_DIS_HASH_SIZE;
2750
2751   return (CGEN_OPCODE_DESC) table;
2752 }
2753
2754 /* Close an opcode table.  */
2755
2756 void
2757 fr30_cgen_opcode_close (desc)
2758      CGEN_OPCODE_DESC desc;
2759 {
2760   free (desc);
2761 }
2762
2763 /* Getting values from cgen_fields is handled by a collection of functions.
2764    They are distinguished by the type of the VALUE argument they return.
2765    TODO: floating point, inlining support, remove cases where result type
2766    not appropriate.  */
2767
2768 int
2769 fr30_cgen_get_int_operand (opindex, fields)
2770      int opindex;
2771      const CGEN_FIELDS * fields;
2772 {
2773   int value;
2774
2775   switch (opindex)
2776     {
2777     case FR30_OPERAND_RI :
2778       value = fields->f_Ri;
2779       break;
2780     case FR30_OPERAND_RJ :
2781       value = fields->f_Rj;
2782       break;
2783     case FR30_OPERAND_RIC :
2784       value = fields->f_Ric;
2785       break;
2786     case FR30_OPERAND_RJC :
2787       value = fields->f_Rjc;
2788       break;
2789     case FR30_OPERAND_CRI :
2790       value = fields->f_CRi;
2791       break;
2792     case FR30_OPERAND_CRJ :
2793       value = fields->f_CRj;
2794       break;
2795     case FR30_OPERAND_RS1 :
2796       value = fields->f_Rs1;
2797       break;
2798     case FR30_OPERAND_RS2 :
2799       value = fields->f_Rs2;
2800       break;
2801     case FR30_OPERAND_R13 :
2802       value = fields->f_nil;
2803       break;
2804     case FR30_OPERAND_R14 :
2805       value = fields->f_nil;
2806       break;
2807     case FR30_OPERAND_R15 :
2808       value = fields->f_nil;
2809       break;
2810     case FR30_OPERAND_PS :
2811       value = fields->f_nil;
2812       break;
2813     case FR30_OPERAND_U4 :
2814       value = fields->f_u4;
2815       break;
2816     case FR30_OPERAND_U4C :
2817       value = fields->f_u4c;
2818       break;
2819     case FR30_OPERAND_U8 :
2820       value = fields->f_u8;
2821       break;
2822     case FR30_OPERAND_I8 :
2823       value = fields->f_i8;
2824       break;
2825     case FR30_OPERAND_UDISP6 :
2826       value = fields->f_udisp6;
2827       break;
2828     case FR30_OPERAND_DISP8 :
2829       value = fields->f_disp8;
2830       break;
2831     case FR30_OPERAND_DISP9 :
2832       value = fields->f_disp9;
2833       break;
2834     case FR30_OPERAND_DISP10 :
2835       value = fields->f_disp10;
2836       break;
2837     case FR30_OPERAND_S10 :
2838       value = fields->f_s10;
2839       break;
2840     case FR30_OPERAND_U10 :
2841       value = fields->f_u10;
2842       break;
2843     case FR30_OPERAND_I32 :
2844       value = fields->f_i32;
2845       break;
2846     case FR30_OPERAND_M4 :
2847       value = fields->f_m4;
2848       break;
2849     case FR30_OPERAND_I20 :
2850       value = fields->f_i20;
2851       break;
2852     case FR30_OPERAND_DIR8 :
2853       value = fields->f_dir8;
2854       break;
2855     case FR30_OPERAND_DIR9 :
2856       value = fields->f_dir9;
2857       break;
2858     case FR30_OPERAND_DIR10 :
2859       value = fields->f_dir10;
2860       break;
2861     case FR30_OPERAND_LABEL9 :
2862       value = fields->f_rel9;
2863       break;
2864     case FR30_OPERAND_LABEL12 :
2865       value = fields->f_rel12;
2866       break;
2867     case FR30_OPERAND_REGLIST_LOW_LD :
2868       value = fields->f_reglist_low_ld;
2869       break;
2870     case FR30_OPERAND_REGLIST_HI_LD :
2871       value = fields->f_reglist_hi_ld;
2872       break;
2873     case FR30_OPERAND_REGLIST_LOW_ST :
2874       value = fields->f_reglist_low_st;
2875       break;
2876     case FR30_OPERAND_REGLIST_HI_ST :
2877       value = fields->f_reglist_hi_st;
2878       break;
2879     case FR30_OPERAND_CC :
2880       value = fields->f_cc;
2881       break;
2882     case FR30_OPERAND_CCC :
2883       value = fields->f_ccc;
2884       break;
2885
2886     default :
2887       /* xgettext:c-format */
2888       fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),
2889                        opindex);
2890       abort ();
2891   }
2892
2893   return value;
2894 }
2895
2896 bfd_vma
2897 fr30_cgen_get_vma_operand (opindex, fields)
2898      int opindex;
2899      const CGEN_FIELDS * fields;
2900 {
2901   bfd_vma value;
2902
2903   switch (opindex)
2904     {
2905     case FR30_OPERAND_RI :
2906       value = fields->f_Ri;
2907       break;
2908     case FR30_OPERAND_RJ :
2909       value = fields->f_Rj;
2910       break;
2911     case FR30_OPERAND_RIC :
2912       value = fields->f_Ric;
2913       break;
2914     case FR30_OPERAND_RJC :
2915       value = fields->f_Rjc;
2916       break;
2917     case FR30_OPERAND_CRI :
2918       value = fields->f_CRi;
2919       break;
2920     case FR30_OPERAND_CRJ :
2921       value = fields->f_CRj;
2922       break;
2923     case FR30_OPERAND_RS1 :
2924       value = fields->f_Rs1;
2925       break;
2926     case FR30_OPERAND_RS2 :
2927       value = fields->f_Rs2;
2928       break;
2929     case FR30_OPERAND_R13 :
2930       value = fields->f_nil;
2931       break;
2932     case FR30_OPERAND_R14 :
2933       value = fields->f_nil;
2934       break;
2935     case FR30_OPERAND_R15 :
2936       value = fields->f_nil;
2937       break;
2938     case FR30_OPERAND_PS :
2939       value = fields->f_nil;
2940       break;
2941     case FR30_OPERAND_U4 :
2942       value = fields->f_u4;
2943       break;
2944     case FR30_OPERAND_U4C :
2945       value = fields->f_u4c;
2946       break;
2947     case FR30_OPERAND_U8 :
2948       value = fields->f_u8;
2949       break;
2950     case FR30_OPERAND_I8 :
2951       value = fields->f_i8;
2952       break;
2953     case FR30_OPERAND_UDISP6 :
2954       value = fields->f_udisp6;
2955       break;
2956     case FR30_OPERAND_DISP8 :
2957       value = fields->f_disp8;
2958       break;
2959     case FR30_OPERAND_DISP9 :
2960       value = fields->f_disp9;
2961       break;
2962     case FR30_OPERAND_DISP10 :
2963       value = fields->f_disp10;
2964       break;
2965     case FR30_OPERAND_S10 :
2966       value = fields->f_s10;
2967       break;
2968     case FR30_OPERAND_U10 :
2969       value = fields->f_u10;
2970       break;
2971     case FR30_OPERAND_I32 :
2972       value = fields->f_i32;
2973       break;
2974     case FR30_OPERAND_M4 :
2975       value = fields->f_m4;
2976       break;
2977     case FR30_OPERAND_I20 :
2978       value = fields->f_i20;
2979       break;
2980     case FR30_OPERAND_DIR8 :
2981       value = fields->f_dir8;
2982       break;
2983     case FR30_OPERAND_DIR9 :
2984       value = fields->f_dir9;
2985       break;
2986     case FR30_OPERAND_DIR10 :
2987       value = fields->f_dir10;
2988       break;
2989     case FR30_OPERAND_LABEL9 :
2990       value = fields->f_rel9;
2991       break;
2992     case FR30_OPERAND_LABEL12 :
2993       value = fields->f_rel12;
2994       break;
2995     case FR30_OPERAND_REGLIST_LOW_LD :
2996       value = fields->f_reglist_low_ld;
2997       break;
2998     case FR30_OPERAND_REGLIST_HI_LD :
2999       value = fields->f_reglist_hi_ld;
3000       break;
3001     case FR30_OPERAND_REGLIST_LOW_ST :
3002       value = fields->f_reglist_low_st;
3003       break;
3004     case FR30_OPERAND_REGLIST_HI_ST :
3005       value = fields->f_reglist_hi_st;
3006       break;
3007     case FR30_OPERAND_CC :
3008       value = fields->f_cc;
3009       break;
3010     case FR30_OPERAND_CCC :
3011       value = fields->f_ccc;
3012       break;
3013
3014     default :
3015       /* xgettext:c-format */
3016       fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),
3017                        opindex);
3018       abort ();
3019   }
3020
3021   return value;
3022 }
3023
3024 /* Stuffing values in cgen_fields is handled by a collection of functions.
3025    They are distinguished by the type of the VALUE argument they accept.
3026    TODO: floating point, inlining support, remove cases where argument type
3027    not appropriate.  */
3028
3029 void
3030 fr30_cgen_set_int_operand (opindex, fields, value)
3031      int opindex;
3032      CGEN_FIELDS * fields;
3033      int value;
3034 {
3035   switch (opindex)
3036     {
3037     case FR30_OPERAND_RI :
3038       fields->f_Ri = value;
3039       break;
3040     case FR30_OPERAND_RJ :
3041       fields->f_Rj = value;
3042       break;
3043     case FR30_OPERAND_RIC :
3044       fields->f_Ric = value;
3045       break;
3046     case FR30_OPERAND_RJC :
3047       fields->f_Rjc = value;
3048       break;
3049     case FR30_OPERAND_CRI :
3050       fields->f_CRi = value;
3051       break;
3052     case FR30_OPERAND_CRJ :
3053       fields->f_CRj = value;
3054       break;
3055     case FR30_OPERAND_RS1 :
3056       fields->f_Rs1 = value;
3057       break;
3058     case FR30_OPERAND_RS2 :
3059       fields->f_Rs2 = value;
3060       break;
3061     case FR30_OPERAND_R13 :
3062       fields->f_nil = value;
3063       break;
3064     case FR30_OPERAND_R14 :
3065       fields->f_nil = value;
3066       break;
3067     case FR30_OPERAND_R15 :
3068       fields->f_nil = value;
3069       break;
3070     case FR30_OPERAND_PS :
3071       fields->f_nil = value;
3072       break;
3073     case FR30_OPERAND_U4 :
3074       fields->f_u4 = value;
3075       break;
3076     case FR30_OPERAND_U4C :
3077       fields->f_u4c = value;
3078       break;
3079     case FR30_OPERAND_U8 :
3080       fields->f_u8 = value;
3081       break;
3082     case FR30_OPERAND_I8 :
3083       fields->f_i8 = value;
3084       break;
3085     case FR30_OPERAND_UDISP6 :
3086       fields->f_udisp6 = value;
3087       break;
3088     case FR30_OPERAND_DISP8 :
3089       fields->f_disp8 = value;
3090       break;
3091     case FR30_OPERAND_DISP9 :
3092       fields->f_disp9 = value;
3093       break;
3094     case FR30_OPERAND_DISP10 :
3095       fields->f_disp10 = value;
3096       break;
3097     case FR30_OPERAND_S10 :
3098       fields->f_s10 = value;
3099       break;
3100     case FR30_OPERAND_U10 :
3101       fields->f_u10 = value;
3102       break;
3103     case FR30_OPERAND_I32 :
3104       fields->f_i32 = value;
3105       break;
3106     case FR30_OPERAND_M4 :
3107       fields->f_m4 = value;
3108       break;
3109     case FR30_OPERAND_I20 :
3110       fields->f_i20 = value;
3111       break;
3112     case FR30_OPERAND_DIR8 :
3113       fields->f_dir8 = value;
3114       break;
3115     case FR30_OPERAND_DIR9 :
3116       fields->f_dir9 = value;
3117       break;
3118     case FR30_OPERAND_DIR10 :
3119       fields->f_dir10 = value;
3120       break;
3121     case FR30_OPERAND_LABEL9 :
3122       fields->f_rel9 = value;
3123       break;
3124     case FR30_OPERAND_LABEL12 :
3125       fields->f_rel12 = value;
3126       break;
3127     case FR30_OPERAND_REGLIST_LOW_LD :
3128       fields->f_reglist_low_ld = value;
3129       break;
3130     case FR30_OPERAND_REGLIST_HI_LD :
3131       fields->f_reglist_hi_ld = value;
3132       break;
3133     case FR30_OPERAND_REGLIST_LOW_ST :
3134       fields->f_reglist_low_st = value;
3135       break;
3136     case FR30_OPERAND_REGLIST_HI_ST :
3137       fields->f_reglist_hi_st = value;
3138       break;
3139     case FR30_OPERAND_CC :
3140       fields->f_cc = value;
3141       break;
3142     case FR30_OPERAND_CCC :
3143       fields->f_ccc = value;
3144       break;
3145
3146     default :
3147       /* xgettext:c-format */
3148       fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),
3149                        opindex);
3150       abort ();
3151   }
3152 }
3153
3154 void
3155 fr30_cgen_set_vma_operand (opindex, fields, value)
3156      int opindex;
3157      CGEN_FIELDS * fields;
3158      bfd_vma value;
3159 {
3160   switch (opindex)
3161     {
3162     case FR30_OPERAND_RI :
3163       fields->f_Ri = value;
3164       break;
3165     case FR30_OPERAND_RJ :
3166       fields->f_Rj = value;
3167       break;
3168     case FR30_OPERAND_RIC :
3169       fields->f_Ric = value;
3170       break;
3171     case FR30_OPERAND_RJC :
3172       fields->f_Rjc = value;
3173       break;
3174     case FR30_OPERAND_CRI :
3175       fields->f_CRi = value;
3176       break;
3177     case FR30_OPERAND_CRJ :
3178       fields->f_CRj = value;
3179       break;
3180     case FR30_OPERAND_RS1 :
3181       fields->f_Rs1 = value;
3182       break;
3183     case FR30_OPERAND_RS2 :
3184       fields->f_Rs2 = value;
3185       break;
3186     case FR30_OPERAND_R13 :
3187       fields->f_nil = value;
3188       break;
3189     case FR30_OPERAND_R14 :
3190       fields->f_nil = value;
3191       break;
3192     case FR30_OPERAND_R15 :
3193       fields->f_nil = value;
3194       break;
3195     case FR30_OPERAND_PS :
3196       fields->f_nil = value;
3197       break;
3198     case FR30_OPERAND_U4 :
3199       fields->f_u4 = value;
3200       break;
3201     case FR30_OPERAND_U4C :
3202       fields->f_u4c = value;
3203       break;
3204     case FR30_OPERAND_U8 :
3205       fields->f_u8 = value;
3206       break;
3207     case FR30_OPERAND_I8 :
3208       fields->f_i8 = value;
3209       break;
3210     case FR30_OPERAND_UDISP6 :
3211       fields->f_udisp6 = value;
3212       break;
3213     case FR30_OPERAND_DISP8 :
3214       fields->f_disp8 = value;
3215       break;
3216     case FR30_OPERAND_DISP9 :
3217       fields->f_disp9 = value;
3218       break;
3219     case FR30_OPERAND_DISP10 :
3220       fields->f_disp10 = value;
3221       break;
3222     case FR30_OPERAND_S10 :
3223       fields->f_s10 = value;
3224       break;
3225     case FR30_OPERAND_U10 :
3226       fields->f_u10 = value;
3227       break;
3228     case FR30_OPERAND_I32 :
3229       fields->f_i32 = value;
3230       break;
3231     case FR30_OPERAND_M4 :
3232       fields->f_m4 = value;
3233       break;
3234     case FR30_OPERAND_I20 :
3235       fields->f_i20 = value;
3236       break;
3237     case FR30_OPERAND_DIR8 :
3238       fields->f_dir8 = value;
3239       break;
3240     case FR30_OPERAND_DIR9 :
3241       fields->f_dir9 = value;
3242       break;
3243     case FR30_OPERAND_DIR10 :
3244       fields->f_dir10 = value;
3245       break;
3246     case FR30_OPERAND_LABEL9 :
3247       fields->f_rel9 = value;
3248       break;
3249     case FR30_OPERAND_LABEL12 :
3250       fields->f_rel12 = value;
3251       break;
3252     case FR30_OPERAND_REGLIST_LOW_LD :
3253       fields->f_reglist_low_ld = value;
3254       break;
3255     case FR30_OPERAND_REGLIST_HI_LD :
3256       fields->f_reglist_hi_ld = value;
3257       break;
3258     case FR30_OPERAND_REGLIST_LOW_ST :
3259       fields->f_reglist_low_st = value;
3260       break;
3261     case FR30_OPERAND_REGLIST_HI_ST :
3262       fields->f_reglist_hi_st = value;
3263       break;
3264     case FR30_OPERAND_CC :
3265       fields->f_cc = value;
3266       break;
3267     case FR30_OPERAND_CCC :
3268       fields->f_ccc = value;
3269       break;
3270
3271     default :
3272       /* xgettext:c-format */
3273       fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),
3274                        opindex);
3275       abort ();
3276   }
3277 }
3278