* cgen-asm.in (insert_normal): Use CGEN_BOOL_ATTR.
[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: condition code bits */
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 /* Operand references.  */
630
631 #define INPUT CGEN_OPERAND_INSTANCE_INPUT
632 #define OUTPUT CGEN_OPERAND_INSTANCE_OUTPUT
633 #define COND_REF CGEN_OPERAND_INSTANCE_COND_REF
634
635 static const CGEN_OPERAND_INSTANCE fmt_add_ops[] = {
636   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
637   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
638   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
639   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
640   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
641   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
642   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
643   { 0 }
644 };
645
646 static const CGEN_OPERAND_INSTANCE fmt_addi_ops[] = {
647   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
648   { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
649   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
650   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
651   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
652   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
653   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
654   { 0 }
655 };
656
657 static const CGEN_OPERAND_INSTANCE fmt_add2_ops[] = {
658   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
659   { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
660   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
661   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
662   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
663   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
664   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
665   { 0 }
666 };
667
668 static const CGEN_OPERAND_INSTANCE fmt_addc_ops[] = {
669   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
670   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
671   { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
672   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
673   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
674   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
675   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
676   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
677   { 0 }
678 };
679
680 static const CGEN_OPERAND_INSTANCE fmt_addn_ops[] = {
681   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
682   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
683   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
684   { 0 }
685 };
686
687 static const CGEN_OPERAND_INSTANCE fmt_addni_ops[] = {
688   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
689   { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
690   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
691   { 0 }
692 };
693
694 static const CGEN_OPERAND_INSTANCE fmt_addn2_ops[] = {
695   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
696   { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
697   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
698   { 0 }
699 };
700
701 static const CGEN_OPERAND_INSTANCE fmt_cmp_ops[] = {
702   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
703   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
704   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
705   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
706   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
707   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
708   { 0 }
709 };
710
711 static const CGEN_OPERAND_INSTANCE fmt_cmpi_ops[] = {
712   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
713   { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
714   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
715   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
716   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
717   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
718   { 0 }
719 };
720
721 static const CGEN_OPERAND_INSTANCE fmt_cmp2_ops[] = {
722   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
723   { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
724   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
725   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
726   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
727   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
728   { 0 }
729 };
730
731 static const CGEN_OPERAND_INSTANCE fmt_and_ops[] = {
732   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
733   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
734   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
735   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
736   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
737   { 0 }
738 };
739
740 static const CGEN_OPERAND_INSTANCE fmt_andm_ops[] = {
741   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
742   { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
743   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
744   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
745   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
746   { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
747   { 0 }
748 };
749
750 static const CGEN_OPERAND_INSTANCE fmt_andh_ops[] = {
751   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
752   { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
753   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_HI, & OP_ENT (RJ), 0, 0 },
754   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
755   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
756   { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
757   { 0 }
758 };
759
760 static const CGEN_OPERAND_INSTANCE fmt_andb_ops[] = {
761   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
762   { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
763   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_QI, & OP_ENT (RJ), 0, 0 },
764   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
765   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
766   { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
767   { 0 }
768 };
769
770 static const CGEN_OPERAND_INSTANCE fmt_bandl_ops[] = {
771   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
772   { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_QI, & OP_ENT (U4), 0, 0 },
773   { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
774   { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
775   { 0 }
776 };
777
778 static const CGEN_OPERAND_INSTANCE fmt_btstl_ops[] = {
779   { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_QI, & OP_ENT (U4), 0, 0 },
780   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
781   { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
782   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
783   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
784   { 0 }
785 };
786
787 static const CGEN_OPERAND_INSTANCE fmt_mul_ops[] = {
788   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
789   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
790   { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
791   { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
792   { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
793   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
794   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
795   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
796   { 0 }
797 };
798
799 static const CGEN_OPERAND_INSTANCE fmt_mulu_ops[] = {
800   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
801   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
802   { INPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
803   { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
804   { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
805   { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
806   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
807   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
808   { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
809   { 0 }
810 };
811
812 static const CGEN_OPERAND_INSTANCE fmt_mulh_ops[] = {
813   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
814   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
815   { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
816   { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
817   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
818   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
819   { 0 }
820 };
821
822 static const CGEN_OPERAND_INSTANCE fmt_div0s_ops[] = {
823   { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
824   { INPUT, "d0bit", & HW_ENT (HW_H_D0BIT), CGEN_MODE_BI, 0, 0, 0 },
825   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
826   { OUTPUT, "d0bit", & HW_ENT (HW_H_D0BIT), CGEN_MODE_BI, 0, 0, 0 },
827   { OUTPUT, "d1bit", & HW_ENT (HW_H_D1BIT), CGEN_MODE_BI, 0, 0, 0 },
828   { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, COND_REF },
829   { 0 }
830 };
831
832 static const CGEN_OPERAND_INSTANCE fmt_div0u_ops[] = {
833   { OUTPUT, "d0bit", & HW_ENT (HW_H_D0BIT), CGEN_MODE_BI, 0, 0, 0 },
834   { OUTPUT, "d1bit", & HW_ENT (HW_H_D1BIT), CGEN_MODE_BI, 0, 0, 0 },
835   { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
836   { 0 }
837 };
838
839 static const CGEN_OPERAND_INSTANCE fmt_div1_ops[] = {
840   { INPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
841   { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
842   { INPUT, "d1bit", & HW_ENT (HW_H_D1BIT), CGEN_MODE_BI, 0, 0, 0 },
843   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
844   { INPUT, "d0bit", & HW_ENT (HW_H_D0BIT), CGEN_MODE_BI, 0, 0, 0 },
845   { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
846   { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
847   { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
848   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, COND_REF },
849   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
850   { 0 }
851 };
852
853 static const CGEN_OPERAND_INSTANCE fmt_div2_ops[] = {
854   { INPUT, "d1bit", & HW_ENT (HW_H_D1BIT), CGEN_MODE_BI, 0, 0, 0 },
855   { INPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, COND_REF },
856   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
857   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, COND_REF },
858   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, COND_REF },
859   { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, COND_REF },
860   { 0 }
861 };
862
863 static const CGEN_OPERAND_INSTANCE fmt_div3_ops[] = {
864   { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
865   { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, COND_REF },
866   { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, COND_REF },
867   { 0 }
868 };
869
870 static const CGEN_OPERAND_INSTANCE fmt_div4s_ops[] = {
871   { INPUT, "d1bit", & HW_ENT (HW_H_D1BIT), CGEN_MODE_BI, 0, 0, 0 },
872   { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, COND_REF },
873   { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, COND_REF },
874   { 0 }
875 };
876
877 static const CGEN_OPERAND_INSTANCE fmt_lsl_ops[] = {
878   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
879   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
880   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, COND_REF },
881   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
882   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
883   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
884   { 0 }
885 };
886
887 static const CGEN_OPERAND_INSTANCE fmt_lsli_ops[] = {
888   { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
889   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
890   { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, COND_REF },
891   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
892   { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
893   { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
894   { 0 }
895 };
896
897 static const CGEN_OPERAND_INSTANCE fmt_ldi8_ops[] = {
898   { INPUT, "i8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I8), 0, 0 },
899   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
900   { 0 }
901 };
902
903 static const CGEN_OPERAND_INSTANCE fmt_ldi20_ops[] = {
904   { INPUT, "i20", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I20), 0, 0 },
905   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
906   { 0 }
907 };
908
909 static const CGEN_OPERAND_INSTANCE fmt_ldi32_ops[] = {
910   { INPUT, "i32", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I32), 0, 0 },
911   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
912   { 0 }
913 };
914
915 static const CGEN_OPERAND_INSTANCE fmt_ld_ops[] = {
916   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
917   { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
918   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
919   { 0 }
920 };
921
922 static const CGEN_OPERAND_INSTANCE fmt_lduh_ops[] = {
923   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
924   { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UHI, 0, 0, 0 },
925   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
926   { 0 }
927 };
928
929 static const CGEN_OPERAND_INSTANCE fmt_ldub_ops[] = {
930   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
931   { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
932   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
933   { 0 }
934 };
935
936 static const CGEN_OPERAND_INSTANCE fmt_ldr13_ops[] = {
937   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
938   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
939   { INPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
940   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
941   { 0 }
942 };
943
944 static const CGEN_OPERAND_INSTANCE fmt_ldr13uh_ops[] = {
945   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
946   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
947   { INPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UHI, 0, 0, 0 },
948   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
949   { 0 }
950 };
951
952 static const CGEN_OPERAND_INSTANCE fmt_ldr13ub_ops[] = {
953   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
954   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
955   { INPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
956   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
957   { 0 }
958 };
959
960 static const CGEN_OPERAND_INSTANCE fmt_ldr14_ops[] = {
961   { INPUT, "disp10", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP10), 0, 0 },
962   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
963   { INPUT, "h_memory_add__VM_disp10_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
964   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
965   { 0 }
966 };
967
968 static const CGEN_OPERAND_INSTANCE fmt_ldr14uh_ops[] = {
969   { INPUT, "disp9", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP9), 0, 0 },
970   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
971   { INPUT, "h_memory_add__VM_disp9_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UHI, 0, 0, 0 },
972   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
973   { 0 }
974 };
975
976 static const CGEN_OPERAND_INSTANCE fmt_ldr14ub_ops[] = {
977   { INPUT, "disp8", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP8), 0, 0 },
978   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
979   { INPUT, "h_memory_add__VM_disp8_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
980   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
981   { 0 }
982 };
983
984 static const CGEN_OPERAND_INSTANCE fmt_ldr15_ops[] = {
985   { INPUT, "udisp6", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (UDISP6), 0, 0 },
986   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
987   { INPUT, "h_memory_add__VM_udisp6_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
988   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
989   { 0 }
990 };
991
992 static const CGEN_OPERAND_INSTANCE fmt_ldr15gr_ops[] = {
993   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
994   { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
995   { INPUT, "f_Ri", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, 0, 0, COND_REF },
996   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
997   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
998   { 0 }
999 };
1000
1001 static const CGEN_OPERAND_INSTANCE fmt_ldr15dr_ops[] = {
1002   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1003   { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1004   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1005   { OUTPUT, "Rs2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS2), 0, 0 },
1006   { 0 }
1007 };
1008
1009 static const CGEN_OPERAND_INSTANCE fmt_ldr15ps_ops[] = {
1010   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1011   { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1012   { OUTPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, 0 },
1013   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1014   { 0 }
1015 };
1016
1017 static const CGEN_OPERAND_INSTANCE fmt_st_ops[] = {
1018   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
1019   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1020   { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1021   { 0 }
1022 };
1023
1024 static const CGEN_OPERAND_INSTANCE fmt_sth_ops[] = {
1025   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
1026   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1027   { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1028   { 0 }
1029 };
1030
1031 static const CGEN_OPERAND_INSTANCE fmt_stb_ops[] = {
1032   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
1033   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1034   { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1035   { 0 }
1036 };
1037
1038 static const CGEN_OPERAND_INSTANCE fmt_str13_ops[] = {
1039   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
1040   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1041   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1042   { OUTPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1043   { 0 }
1044 };
1045
1046 static const CGEN_OPERAND_INSTANCE fmt_str13h_ops[] = {
1047   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
1048   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1049   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1050   { OUTPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1051   { 0 }
1052 };
1053
1054 static const CGEN_OPERAND_INSTANCE fmt_str13b_ops[] = {
1055   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
1056   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1057   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1058   { OUTPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1059   { 0 }
1060 };
1061
1062 static const CGEN_OPERAND_INSTANCE fmt_str14_ops[] = {
1063   { INPUT, "disp10", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP10), 0, 0 },
1064   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1065   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1066   { OUTPUT, "h_memory_add__VM_disp10_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1067   { 0 }
1068 };
1069
1070 static const CGEN_OPERAND_INSTANCE fmt_str14h_ops[] = {
1071   { INPUT, "disp9", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP9), 0, 0 },
1072   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1073   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1074   { OUTPUT, "h_memory_add__VM_disp9_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1075   { 0 }
1076 };
1077
1078 static const CGEN_OPERAND_INSTANCE fmt_str14b_ops[] = {
1079   { INPUT, "disp8", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP8), 0, 0 },
1080   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1081   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1082   { OUTPUT, "h_memory_add__VM_disp8_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1083   { 0 }
1084 };
1085
1086 static const CGEN_OPERAND_INSTANCE fmt_str15_ops[] = {
1087   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1088   { INPUT, "udisp6", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (UDISP6), 0, 0 },
1089   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1090   { OUTPUT, "h_memory_add__VM_reg__VM_h_gr_15_udisp6", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1091   { 0 }
1092 };
1093
1094 static const CGEN_OPERAND_INSTANCE fmt_str15gr_ops[] = {
1095   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1096   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1097   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1098   { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1099   { 0 }
1100 };
1101
1102 static const CGEN_OPERAND_INSTANCE fmt_str15dr_ops[] = {
1103   { INPUT, "Rs2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS2), 0, 0 },
1104   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1105   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1106   { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1107   { 0 }
1108 };
1109
1110 static const CGEN_OPERAND_INSTANCE fmt_str15ps_ops[] = {
1111   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1112   { INPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, 0 },
1113   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1114   { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1115   { 0 }
1116 };
1117
1118 static const CGEN_OPERAND_INSTANCE fmt_mov_ops[] = {
1119   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
1120   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1121   { 0 }
1122 };
1123
1124 static const CGEN_OPERAND_INSTANCE fmt_movdr_ops[] = {
1125   { INPUT, "Rs1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS1), 0, 0 },
1126   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1127   { 0 }
1128 };
1129
1130 static const CGEN_OPERAND_INSTANCE fmt_movps_ops[] = {
1131   { INPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, 0 },
1132   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1133   { 0 }
1134 };
1135
1136 static const CGEN_OPERAND_INSTANCE fmt_mov2dr_ops[] = {
1137   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1138   { OUTPUT, "Rs1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS1), 0, 0 },
1139   { 0 }
1140 };
1141
1142 static const CGEN_OPERAND_INSTANCE fmt_mov2ps_ops[] = {
1143   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1144   { OUTPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, 0 },
1145   { 0 }
1146 };
1147
1148 static const CGEN_OPERAND_INSTANCE fmt_jmp_ops[] = {
1149   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1150   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1151   { 0 }
1152 };
1153
1154 static const CGEN_OPERAND_INSTANCE fmt_callr_ops[] = {
1155   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1156   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1157   { OUTPUT, "h_dr_1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 1, 0 },
1158   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1159   { 0 }
1160 };
1161
1162 static const CGEN_OPERAND_INSTANCE fmt_call_ops[] = {
1163   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1164   { INPUT, "label12", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL12), 0, 0 },
1165   { OUTPUT, "h_dr_1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 1, 0 },
1166   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1167   { 0 }
1168 };
1169
1170 static const CGEN_OPERAND_INSTANCE fmt_ret_ops[] = {
1171   { INPUT, "h_dr_1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 1, 0 },
1172   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1173   { 0 }
1174 };
1175
1176 static const CGEN_OPERAND_INSTANCE fmt_int_ops[] = {
1177   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1178   { INPUT, "u8", & HW_ENT (HW_H_UINT), CGEN_MODE_SI, & OP_ENT (U8), 0, 0 },
1179   { OUTPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, 0 },
1180   { OUTPUT, "ibit", & HW_ENT (HW_H_IBIT), CGEN_MODE_BI, 0, 0, 0 },
1181   { OUTPUT, "sbit", & HW_ENT (HW_H_SBIT), CGEN_MODE_BI, 0, 0, 0 },
1182   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1183   { 0 }
1184 };
1185
1186 static const CGEN_OPERAND_INSTANCE fmt_inte_ops[] = {
1187   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1188   { OUTPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, 0 },
1189   { OUTPUT, "ibit", & HW_ENT (HW_H_IBIT), CGEN_MODE_BI, 0, 0, 0 },
1190   { OUTPUT, "ilm", & HW_ENT (HW_H_ILM), CGEN_MODE_UQI, 0, 0, 0 },
1191   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1192   { 0 }
1193 };
1194
1195 static const CGEN_OPERAND_INSTANCE fmt_reti_ops[] = {
1196   { INPUT, "sbit", & HW_ENT (HW_H_SBIT), CGEN_MODE_BI, 0, 0, 0 },
1197   { INPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, COND_REF },
1198   { INPUT, "h_memory_reg__VM_h_dr_2", & HW_ENT (HW_H_MEMORY), CGEN_MODE_USI, 0, 0, COND_REF },
1199   { INPUT, "h_dr_3", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 3, COND_REF },
1200   { INPUT, "h_memory_reg__VM_h_dr_3", & HW_ENT (HW_H_MEMORY), CGEN_MODE_USI, 0, 0, COND_REF },
1201   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1202   { OUTPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, COND_REF },
1203   { OUTPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, COND_REF },
1204   { OUTPUT, "h_dr_3", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 3, COND_REF },
1205   { 0 }
1206 };
1207
1208 static const CGEN_OPERAND_INSTANCE fmt_brad_ops[] = {
1209   { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1210   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1211   { 0 }
1212 };
1213
1214 static const CGEN_OPERAND_INSTANCE fmt_beqd_ops[] = {
1215   { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
1216   { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1217   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1218   { 0 }
1219 };
1220
1221 static const CGEN_OPERAND_INSTANCE fmt_bcd_ops[] = {
1222   { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
1223   { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1224   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1225   { 0 }
1226 };
1227
1228 static const CGEN_OPERAND_INSTANCE fmt_bnd_ops[] = {
1229   { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
1230   { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1231   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1232   { 0 }
1233 };
1234
1235 static const CGEN_OPERAND_INSTANCE fmt_bvd_ops[] = {
1236   { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
1237   { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1238   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1239   { 0 }
1240 };
1241
1242 static const CGEN_OPERAND_INSTANCE fmt_bltd_ops[] = {
1243   { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
1244   { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
1245   { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1246   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1247   { 0 }
1248 };
1249
1250 static const CGEN_OPERAND_INSTANCE fmt_bled_ops[] = {
1251   { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
1252   { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
1253   { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
1254   { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1255   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1256   { 0 }
1257 };
1258
1259 static const CGEN_OPERAND_INSTANCE fmt_blsd_ops[] = {
1260   { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
1261   { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
1262   { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1263   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1264   { 0 }
1265 };
1266
1267 static const CGEN_OPERAND_INSTANCE fmt_dmovr13_ops[] = {
1268   { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1269   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1270   { OUTPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1271   { 0 }
1272 };
1273
1274 static const CGEN_OPERAND_INSTANCE fmt_dmovr13h_ops[] = {
1275   { INPUT, "dir9", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR9), 0, 0 },
1276   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1277   { OUTPUT, "h_memory_dir9", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1278   { 0 }
1279 };
1280
1281 static const CGEN_OPERAND_INSTANCE fmt_dmovr13b_ops[] = {
1282   { INPUT, "dir8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR8), 0, 0 },
1283   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1284   { OUTPUT, "h_memory_dir8", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1285   { 0 }
1286 };
1287
1288 static const CGEN_OPERAND_INSTANCE fmt_dmovr13pi_ops[] = {
1289   { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1290   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1291   { INPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1292   { OUTPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1293   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1294   { 0 }
1295 };
1296
1297 static const CGEN_OPERAND_INSTANCE fmt_dmovr13pih_ops[] = {
1298   { INPUT, "dir9", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR9), 0, 0 },
1299   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1300   { INPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1301   { OUTPUT, "h_memory_dir9", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1302   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1303   { 0 }
1304 };
1305
1306 static const CGEN_OPERAND_INSTANCE fmt_dmovr13pib_ops[] = {
1307   { INPUT, "dir8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR8), 0, 0 },
1308   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1309   { INPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1310   { OUTPUT, "h_memory_dir8", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1311   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1312   { 0 }
1313 };
1314
1315 static const CGEN_OPERAND_INSTANCE fmt_dmovr15pi_ops[] = {
1316   { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1317   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1318   { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1319   { OUTPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1320   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1321   { 0 }
1322 };
1323
1324 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13_ops[] = {
1325   { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1326   { INPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1327   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1328   { 0 }
1329 };
1330
1331 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13h_ops[] = {
1332   { INPUT, "dir9", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR9), 0, 0 },
1333   { INPUT, "h_memory_dir9", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1334   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1335   { 0 }
1336 };
1337
1338 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13b_ops[] = {
1339   { INPUT, "dir8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR8), 0, 0 },
1340   { INPUT, "h_memory_dir8", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1341   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1342   { 0 }
1343 };
1344
1345 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13pi_ops[] = {
1346   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1347   { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1348   { INPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1349   { OUTPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1350   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1351   { 0 }
1352 };
1353
1354 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13pih_ops[] = {
1355   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1356   { INPUT, "dir9", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR9), 0, 0 },
1357   { INPUT, "h_memory_dir9", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1358   { OUTPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1359   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1360   { 0 }
1361 };
1362
1363 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13pib_ops[] = {
1364   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1365   { INPUT, "dir8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR8), 0, 0 },
1366   { INPUT, "h_memory_dir8", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1367   { OUTPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1368   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1369   { 0 }
1370 };
1371
1372 static const CGEN_OPERAND_INSTANCE fmt_dmov2r15pd_ops[] = {
1373   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1374   { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1375   { INPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1376   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1377   { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1378   { 0 }
1379 };
1380
1381 static const CGEN_OPERAND_INSTANCE fmt_ldres_ops[] = {
1382   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1383   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1384   { 0 }
1385 };
1386
1387 static const CGEN_OPERAND_INSTANCE fmt_andccr_ops[] = {
1388   { INPUT, "ccr", & HW_ENT (HW_H_CCR), CGEN_MODE_UQI, 0, 0, 0 },
1389   { INPUT, "u8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U8), 0, 0 },
1390   { OUTPUT, "ccr", & HW_ENT (HW_H_CCR), CGEN_MODE_UQI, 0, 0, 0 },
1391   { 0 }
1392 };
1393
1394 static const CGEN_OPERAND_INSTANCE fmt_stilm_ops[] = {
1395   { INPUT, "u8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U8), 0, 0 },
1396   { OUTPUT, "ilm", & HW_ENT (HW_H_ILM), CGEN_MODE_UQI, 0, 0, 0 },
1397   { 0 }
1398 };
1399
1400 static const CGEN_OPERAND_INSTANCE fmt_addsp_ops[] = {
1401   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1402   { INPUT, "s10", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (S10), 0, 0 },
1403   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1404   { 0 }
1405 };
1406
1407 static const CGEN_OPERAND_INSTANCE fmt_extsb_ops[] = {
1408   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_QI, & OP_ENT (RI), 0, 0 },
1409   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1410   { 0 }
1411 };
1412
1413 static const CGEN_OPERAND_INSTANCE fmt_extub_ops[] = {
1414   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_UQI, & OP_ENT (RI), 0, 0 },
1415   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1416   { 0 }
1417 };
1418
1419 static const CGEN_OPERAND_INSTANCE fmt_extsh_ops[] = {
1420   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_HI, & OP_ENT (RI), 0, 0 },
1421   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1422   { 0 }
1423 };
1424
1425 static const CGEN_OPERAND_INSTANCE fmt_extuh_ops[] = {
1426   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_UHI, & OP_ENT (RI), 0, 0 },
1427   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1428   { 0 }
1429 };
1430
1431 static const CGEN_OPERAND_INSTANCE fmt_ldm0_ops[] = {
1432   { INPUT, "reglist_low_ld", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (REGLIST_LOW_LD), 0, 0 },
1433   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1434   { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, COND_REF },
1435   { OUTPUT, "h_gr_0", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 0, COND_REF },
1436   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1437   { OUTPUT, "h_gr_1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 1, COND_REF },
1438   { OUTPUT, "h_gr_2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 2, COND_REF },
1439   { OUTPUT, "h_gr_3", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 3, COND_REF },
1440   { OUTPUT, "h_gr_4", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 4, COND_REF },
1441   { OUTPUT, "h_gr_5", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 5, COND_REF },
1442   { OUTPUT, "h_gr_6", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 6, COND_REF },
1443   { OUTPUT, "h_gr_7", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 7, COND_REF },
1444   { 0 }
1445 };
1446
1447 static const CGEN_OPERAND_INSTANCE fmt_ldm1_ops[] = {
1448   { INPUT, "reglist_hi_ld", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (REGLIST_HI_LD), 0, 0 },
1449   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1450   { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, COND_REF },
1451   { OUTPUT, "h_gr_8", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 8, COND_REF },
1452   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1453   { OUTPUT, "h_gr_9", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 9, COND_REF },
1454   { OUTPUT, "h_gr_10", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 10, COND_REF },
1455   { OUTPUT, "h_gr_11", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 11, COND_REF },
1456   { OUTPUT, "h_gr_12", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 12, COND_REF },
1457   { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, COND_REF },
1458   { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, COND_REF },
1459   { 0 }
1460 };
1461
1462 static const CGEN_OPERAND_INSTANCE fmt_stm0_ops[] = {
1463   { INPUT, "reglist_low_st", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (REGLIST_LOW_ST), 0, 0 },
1464   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1465   { INPUT, "h_gr_7", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 7, COND_REF },
1466   { INPUT, "h_gr_6", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 6, COND_REF },
1467   { INPUT, "h_gr_5", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 5, COND_REF },
1468   { INPUT, "h_gr_4", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 4, COND_REF },
1469   { INPUT, "h_gr_3", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 3, COND_REF },
1470   { INPUT, "h_gr_2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 2, COND_REF },
1471   { INPUT, "h_gr_1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 1, COND_REF },
1472   { INPUT, "h_gr_0", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 0, COND_REF },
1473   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1474   { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, COND_REF },
1475   { 0 }
1476 };
1477
1478 static const CGEN_OPERAND_INSTANCE fmt_stm1_ops[] = {
1479   { INPUT, "reglist_hi_st", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (REGLIST_HI_ST), 0, 0 },
1480   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1481   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, COND_REF },
1482   { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, COND_REF },
1483   { INPUT, "h_gr_12", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 12, COND_REF },
1484   { INPUT, "h_gr_11", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 11, COND_REF },
1485   { INPUT, "h_gr_10", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 10, COND_REF },
1486   { INPUT, "h_gr_9", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 9, COND_REF },
1487   { INPUT, "h_gr_8", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 8, COND_REF },
1488   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1489   { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, COND_REF },
1490   { 0 }
1491 };
1492
1493 static const CGEN_OPERAND_INSTANCE fmt_enter_ops[] = {
1494   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1495   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1496   { INPUT, "u10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U10), 0, 0 },
1497   { OUTPUT, "h_memory_tmp", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1498   { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1499   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1500   { 0 }
1501 };
1502
1503 static const CGEN_OPERAND_INSTANCE fmt_leave_ops[] = {
1504   { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1505   { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1506   { INPUT, "h_memory_sub__VM_reg__VM_h_gr_15_const__WI_4", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1507   { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1508   { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1509   { 0 }
1510 };
1511
1512 static const CGEN_OPERAND_INSTANCE fmt_xchb_ops[] = {
1513   { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1514   { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
1515   { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
1516   { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1517   { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
1518   { 0 }
1519 };
1520
1521 #undef INPUT
1522 #undef OUTPUT
1523 #undef COND_REF
1524
1525 /* Instruction formats.  */
1526
1527 #define F(f) & fr30_cgen_ifld_table[CONCAT2 (FR30_,f)]
1528
1529 static const CGEN_IFMT fmt_empty = {
1530   0, 0, 0x0, { 0 }
1531 };
1532
1533 static const CGEN_IFMT fmt_add = {
1534   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1535 };
1536
1537 static const CGEN_IFMT fmt_addi = {
1538   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1539 };
1540
1541 static const CGEN_IFMT fmt_add2 = {
1542   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1543 };
1544
1545 static const CGEN_IFMT fmt_addc = {
1546   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1547 };
1548
1549 static const CGEN_IFMT fmt_addn = {
1550   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1551 };
1552
1553 static const CGEN_IFMT fmt_addni = {
1554   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1555 };
1556
1557 static const CGEN_IFMT fmt_addn2 = {
1558   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1559 };
1560
1561 static const CGEN_IFMT fmt_cmp = {
1562   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1563 };
1564
1565 static const CGEN_IFMT fmt_cmpi = {
1566   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1567 };
1568
1569 static const CGEN_IFMT fmt_cmp2 = {
1570   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1571 };
1572
1573 static const CGEN_IFMT fmt_and = {
1574   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1575 };
1576
1577 static const CGEN_IFMT fmt_andm = {
1578   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1579 };
1580
1581 static const CGEN_IFMT fmt_andh = {
1582   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1583 };
1584
1585 static const CGEN_IFMT fmt_andb = {
1586   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1587 };
1588
1589 static const CGEN_IFMT fmt_bandl = {
1590   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1591 };
1592
1593 static const CGEN_IFMT fmt_btstl = {
1594   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1595 };
1596
1597 static const CGEN_IFMT fmt_mul = {
1598   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1599 };
1600
1601 static const CGEN_IFMT fmt_mulu = {
1602   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1603 };
1604
1605 static const CGEN_IFMT fmt_mulh = {
1606   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1607 };
1608
1609 static const CGEN_IFMT fmt_div0s = {
1610   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1611 };
1612
1613 static const CGEN_IFMT fmt_div0u = {
1614   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1615 };
1616
1617 static const CGEN_IFMT fmt_div1 = {
1618   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1619 };
1620
1621 static const CGEN_IFMT fmt_div2 = {
1622   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1623 };
1624
1625 static const CGEN_IFMT fmt_div3 = {
1626   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1627 };
1628
1629 static const CGEN_IFMT fmt_div4s = {
1630   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1631 };
1632
1633 static const CGEN_IFMT fmt_lsl = {
1634   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1635 };
1636
1637 static const CGEN_IFMT fmt_lsli = {
1638   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1639 };
1640
1641 static const CGEN_IFMT fmt_ldi8 = {
1642   16, 16, 0xf000, { F (F_OP1), F (F_I8), F (F_RI), 0 }
1643 };
1644
1645 static const CGEN_IFMT fmt_ldi20 = {
1646   16, 32, 0xff00, { F (F_OP1), F (F_I20), F (F_OP2), F (F_RI), 0 }
1647 };
1648
1649 static const CGEN_IFMT fmt_ldi32 = {
1650   16, 48, 0xfff0, { F (F_OP1), F (F_I32), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1651 };
1652
1653 static const CGEN_IFMT fmt_ld = {
1654   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1655 };
1656
1657 static const CGEN_IFMT fmt_lduh = {
1658   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1659 };
1660
1661 static const CGEN_IFMT fmt_ldub = {
1662   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1663 };
1664
1665 static const CGEN_IFMT fmt_ldr13 = {
1666   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1667 };
1668
1669 static const CGEN_IFMT fmt_ldr13uh = {
1670   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1671 };
1672
1673 static const CGEN_IFMT fmt_ldr13ub = {
1674   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1675 };
1676
1677 static const CGEN_IFMT fmt_ldr14 = {
1678   16, 16, 0xf000, { F (F_OP1), F (F_DISP10), F (F_RI), 0 }
1679 };
1680
1681 static const CGEN_IFMT fmt_ldr14uh = {
1682   16, 16, 0xf000, { F (F_OP1), F (F_DISP9), F (F_RI), 0 }
1683 };
1684
1685 static const CGEN_IFMT fmt_ldr14ub = {
1686   16, 16, 0xf000, { F (F_OP1), F (F_DISP8), F (F_RI), 0 }
1687 };
1688
1689 static const CGEN_IFMT fmt_ldr15 = {
1690   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_UDISP6), F (F_RI), 0 }
1691 };
1692
1693 static const CGEN_IFMT fmt_ldr15gr = {
1694   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1695 };
1696
1697 static const CGEN_IFMT fmt_ldr15dr = {
1698   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RS2), 0 }
1699 };
1700
1701 static const CGEN_IFMT fmt_ldr15ps = {
1702   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1703 };
1704
1705 static const CGEN_IFMT fmt_st = {
1706   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1707 };
1708
1709 static const CGEN_IFMT fmt_sth = {
1710   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1711 };
1712
1713 static const CGEN_IFMT fmt_stb = {
1714   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1715 };
1716
1717 static const CGEN_IFMT fmt_str13 = {
1718   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1719 };
1720
1721 static const CGEN_IFMT fmt_str13h = {
1722   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1723 };
1724
1725 static const CGEN_IFMT fmt_str13b = {
1726   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1727 };
1728
1729 static const CGEN_IFMT fmt_str14 = {
1730   16, 16, 0xf000, { F (F_OP1), F (F_DISP10), F (F_RI), 0 }
1731 };
1732
1733 static const CGEN_IFMT fmt_str14h = {
1734   16, 16, 0xf000, { F (F_OP1), F (F_DISP9), F (F_RI), 0 }
1735 };
1736
1737 static const CGEN_IFMT fmt_str14b = {
1738   16, 16, 0xf000, { F (F_OP1), F (F_DISP8), F (F_RI), 0 }
1739 };
1740
1741 static const CGEN_IFMT fmt_str15 = {
1742   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_UDISP6), F (F_RI), 0 }
1743 };
1744
1745 static const CGEN_IFMT fmt_str15gr = {
1746   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1747 };
1748
1749 static const CGEN_IFMT fmt_str15dr = {
1750   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RS2), 0 }
1751 };
1752
1753 static const CGEN_IFMT fmt_str15ps = {
1754   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1755 };
1756
1757 static const CGEN_IFMT fmt_mov = {
1758   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1759 };
1760
1761 static const CGEN_IFMT fmt_movdr = {
1762   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RS1), F (F_RI), 0 }
1763 };
1764
1765 static const CGEN_IFMT fmt_movps = {
1766   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1767 };
1768
1769 static const CGEN_IFMT fmt_mov2dr = {
1770   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RS1), F (F_RI), 0 }
1771 };
1772
1773 static const CGEN_IFMT fmt_mov2ps = {
1774   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1775 };
1776
1777 static const CGEN_IFMT fmt_jmp = {
1778   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1779 };
1780
1781 static const CGEN_IFMT fmt_callr = {
1782   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1783 };
1784
1785 static const CGEN_IFMT fmt_call = {
1786   16, 16, 0xf800, { F (F_OP1), F (F_OP5), F (F_REL12), 0 }
1787 };
1788
1789 static const CGEN_IFMT fmt_ret = {
1790   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1791 };
1792
1793 static const CGEN_IFMT fmt_int = {
1794   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1795 };
1796
1797 static const CGEN_IFMT fmt_inte = {
1798   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1799 };
1800
1801 static const CGEN_IFMT fmt_reti = {
1802   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1803 };
1804
1805 static const CGEN_IFMT fmt_brad = {
1806   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1807 };
1808
1809 static const CGEN_IFMT fmt_beqd = {
1810   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1811 };
1812
1813 static const CGEN_IFMT fmt_bcd = {
1814   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1815 };
1816
1817 static const CGEN_IFMT fmt_bnd = {
1818   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1819 };
1820
1821 static const CGEN_IFMT fmt_bvd = {
1822   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1823 };
1824
1825 static const CGEN_IFMT fmt_bltd = {
1826   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1827 };
1828
1829 static const CGEN_IFMT fmt_bled = {
1830   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1831 };
1832
1833 static const CGEN_IFMT fmt_blsd = {
1834   16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1835 };
1836
1837 static const CGEN_IFMT fmt_dmovr13 = {
1838   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1839 };
1840
1841 static const CGEN_IFMT fmt_dmovr13h = {
1842   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1843 };
1844
1845 static const CGEN_IFMT fmt_dmovr13b = {
1846   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1847 };
1848
1849 static const CGEN_IFMT fmt_dmovr13pi = {
1850   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1851 };
1852
1853 static const CGEN_IFMT fmt_dmovr13pih = {
1854   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1855 };
1856
1857 static const CGEN_IFMT fmt_dmovr13pib = {
1858   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1859 };
1860
1861 static const CGEN_IFMT fmt_dmovr15pi = {
1862   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1863 };
1864
1865 static const CGEN_IFMT fmt_dmov2r13 = {
1866   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1867 };
1868
1869 static const CGEN_IFMT fmt_dmov2r13h = {
1870   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1871 };
1872
1873 static const CGEN_IFMT fmt_dmov2r13b = {
1874   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1875 };
1876
1877 static const CGEN_IFMT fmt_dmov2r13pi = {
1878   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1879 };
1880
1881 static const CGEN_IFMT fmt_dmov2r13pih = {
1882   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1883 };
1884
1885 static const CGEN_IFMT fmt_dmov2r13pib = {
1886   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1887 };
1888
1889 static const CGEN_IFMT fmt_dmov2r15pd = {
1890   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1891 };
1892
1893 static const CGEN_IFMT fmt_ldres = {
1894   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1895 };
1896
1897 static const CGEN_IFMT fmt_copop = {
1898   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 }
1899 };
1900
1901 static const CGEN_IFMT fmt_copld = {
1902   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 }
1903 };
1904
1905 static const CGEN_IFMT fmt_copst = {
1906   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 }
1907 };
1908
1909 static const CGEN_IFMT fmt_nop = {
1910   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1911 };
1912
1913 static const CGEN_IFMT fmt_andccr = {
1914   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1915 };
1916
1917 static const CGEN_IFMT fmt_stilm = {
1918   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1919 };
1920
1921 static const CGEN_IFMT fmt_addsp = {
1922   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_S10), 0 }
1923 };
1924
1925 static const CGEN_IFMT fmt_extsb = {
1926   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1927 };
1928
1929 static const CGEN_IFMT fmt_extub = {
1930   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1931 };
1932
1933 static const CGEN_IFMT fmt_extsh = {
1934   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1935 };
1936
1937 static const CGEN_IFMT fmt_extuh = {
1938   16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1939 };
1940
1941 static const CGEN_IFMT fmt_ldm0 = {
1942   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_LOW_LD), 0 }
1943 };
1944
1945 static const CGEN_IFMT fmt_ldm1 = {
1946   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_HI_LD), 0 }
1947 };
1948
1949 static const CGEN_IFMT fmt_stm0 = {
1950   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_LOW_ST), 0 }
1951 };
1952
1953 static const CGEN_IFMT fmt_stm1 = {
1954   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_HI_ST), 0 }
1955 };
1956
1957 static const CGEN_IFMT fmt_enter = {
1958   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U10), 0 }
1959 };
1960
1961 static const CGEN_IFMT fmt_leave = {
1962   16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1963 };
1964
1965 static const CGEN_IFMT fmt_xchb = {
1966   16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1967 };
1968
1969 #undef F
1970
1971 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
1972 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1973 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1974
1975 /* The instruction table.
1976    This is currently non-static because the simulator accesses it
1977    directly.  */
1978
1979 const CGEN_INSN fr30_cgen_insn_table_entries[MAX_INSNS] =
1980 {
1981   /* Special null first entry.
1982      A `num' value of zero is thus invalid.
1983      Also, the special `invalid' insn resides here.  */
1984   { { 0 }, 0 },
1985 /* add $Rj,$Ri */
1986   {
1987     { 1, 1, 1, 1 },
1988     FR30_INSN_ADD, "add", "add",
1989     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1990     & fmt_add, { 0xa600 },
1991     (PTR) & fmt_add_ops[0],
1992     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
1993   },
1994 /* add $u4,$Ri */
1995   {
1996     { 1, 1, 1, 1 },
1997     FR30_INSN_ADDI, "addi", "add",
1998     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1999     & fmt_addi, { 0xa400 },
2000     (PTR) & fmt_addi_ops[0],
2001     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2002   },
2003 /* add2 $m4,$Ri */
2004   {
2005     { 1, 1, 1, 1 },
2006     FR30_INSN_ADD2, "add2", "add2",
2007     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
2008     & fmt_add2, { 0xa500 },
2009     (PTR) & fmt_add2_ops[0],
2010     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2011   },
2012 /* addc $Rj,$Ri */
2013   {
2014     { 1, 1, 1, 1 },
2015     FR30_INSN_ADDC, "addc", "addc",
2016     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2017     & fmt_addc, { 0xa700 },
2018     (PTR) & fmt_addc_ops[0],
2019     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2020   },
2021 /* addn $Rj,$Ri */
2022   {
2023     { 1, 1, 1, 1 },
2024     FR30_INSN_ADDN, "addn", "addn",
2025     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2026     & fmt_addn, { 0xa200 },
2027     (PTR) & fmt_addn_ops[0],
2028     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2029   },
2030 /* addn $u4,$Ri */
2031   {
2032     { 1, 1, 1, 1 },
2033     FR30_INSN_ADDNI, "addni", "addn",
2034     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2035     & fmt_addni, { 0xa000 },
2036     (PTR) & fmt_addni_ops[0],
2037     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2038   },
2039 /* addn2 $m4,$Ri */
2040   {
2041     { 1, 1, 1, 1 },
2042     FR30_INSN_ADDN2, "addn2", "addn2",
2043     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
2044     & fmt_addn2, { 0xa100 },
2045     (PTR) & fmt_addn2_ops[0],
2046     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2047   },
2048 /* sub $Rj,$Ri */
2049   {
2050     { 1, 1, 1, 1 },
2051     FR30_INSN_SUB, "sub", "sub",
2052     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2053     & fmt_add, { 0xac00 },
2054     (PTR) & fmt_add_ops[0],
2055     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2056   },
2057 /* subc $Rj,$Ri */
2058   {
2059     { 1, 1, 1, 1 },
2060     FR30_INSN_SUBC, "subc", "subc",
2061     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2062     & fmt_addc, { 0xad00 },
2063     (PTR) & fmt_addc_ops[0],
2064     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2065   },
2066 /* subn $Rj,$Ri */
2067   {
2068     { 1, 1, 1, 1 },
2069     FR30_INSN_SUBN, "subn", "subn",
2070     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2071     & fmt_addn, { 0xae00 },
2072     (PTR) & fmt_addn_ops[0],
2073     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2074   },
2075 /* cmp $Rj,$Ri */
2076   {
2077     { 1, 1, 1, 1 },
2078     FR30_INSN_CMP, "cmp", "cmp",
2079     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2080     & fmt_cmp, { 0xaa00 },
2081     (PTR) & fmt_cmp_ops[0],
2082     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2083   },
2084 /* cmp $u4,$Ri */
2085   {
2086     { 1, 1, 1, 1 },
2087     FR30_INSN_CMPI, "cmpi", "cmp",
2088     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2089     & fmt_cmpi, { 0xa800 },
2090     (PTR) & fmt_cmpi_ops[0],
2091     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2092   },
2093 /* cmp2 $m4,$Ri */
2094   {
2095     { 1, 1, 1, 1 },
2096     FR30_INSN_CMP2, "cmp2", "cmp2",
2097     { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
2098     & fmt_cmp2, { 0xa900 },
2099     (PTR) & fmt_cmp2_ops[0],
2100     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2101   },
2102 /* and $Rj,$Ri */
2103   {
2104     { 1, 1, 1, 1 },
2105     FR30_INSN_AND, "and", "and",
2106     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2107     & fmt_and, { 0x8200 },
2108     (PTR) & fmt_and_ops[0],
2109     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2110   },
2111 /* or $Rj,$Ri */
2112   {
2113     { 1, 1, 1, 1 },
2114     FR30_INSN_OR, "or", "or",
2115     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2116     & fmt_and, { 0x9200 },
2117     (PTR) & fmt_and_ops[0],
2118     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2119   },
2120 /* eor $Rj,$Ri */
2121   {
2122     { 1, 1, 1, 1 },
2123     FR30_INSN_EOR, "eor", "eor",
2124     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2125     & fmt_and, { 0x9a00 },
2126     (PTR) & fmt_and_ops[0],
2127     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2128   },
2129 /* and $Rj,@$Ri */
2130   {
2131     { 1, 1, 1, 1 },
2132     FR30_INSN_ANDM, "andm", "and",
2133     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2134     & fmt_andm, { 0x8400 },
2135     (PTR) & fmt_andm_ops[0],
2136     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2137   },
2138 /* andh $Rj,@$Ri */
2139   {
2140     { 1, 1, 1, 1 },
2141     FR30_INSN_ANDH, "andh", "andh",
2142     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2143     & fmt_andh, { 0x8500 },
2144     (PTR) & fmt_andh_ops[0],
2145     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2146   },
2147 /* andb $Rj,@$Ri */
2148   {
2149     { 1, 1, 1, 1 },
2150     FR30_INSN_ANDB, "andb", "andb",
2151     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2152     & fmt_andb, { 0x8600 },
2153     (PTR) & fmt_andb_ops[0],
2154     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2155   },
2156 /* or $Rj,@$Ri */
2157   {
2158     { 1, 1, 1, 1 },
2159     FR30_INSN_ORM, "orm", "or",
2160     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2161     & fmt_andm, { 0x9400 },
2162     (PTR) & fmt_andm_ops[0],
2163     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2164   },
2165 /* orh $Rj,@$Ri */
2166   {
2167     { 1, 1, 1, 1 },
2168     FR30_INSN_ORH, "orh", "orh",
2169     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2170     & fmt_andh, { 0x9500 },
2171     (PTR) & fmt_andh_ops[0],
2172     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2173   },
2174 /* orb $Rj,@$Ri */
2175   {
2176     { 1, 1, 1, 1 },
2177     FR30_INSN_ORB, "orb", "orb",
2178     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2179     & fmt_andb, { 0x9600 },
2180     (PTR) & fmt_andb_ops[0],
2181     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2182   },
2183 /* eor $Rj,@$Ri */
2184   {
2185     { 1, 1, 1, 1 },
2186     FR30_INSN_EORM, "eorm", "eor",
2187     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2188     & fmt_andm, { 0x9c00 },
2189     (PTR) & fmt_andm_ops[0],
2190     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2191   },
2192 /* eorh $Rj,@$Ri */
2193   {
2194     { 1, 1, 1, 1 },
2195     FR30_INSN_EORH, "eorh", "eorh",
2196     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2197     & fmt_andh, { 0x9d00 },
2198     (PTR) & fmt_andh_ops[0],
2199     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2200   },
2201 /* eorb $Rj,@$Ri */
2202   {
2203     { 1, 1, 1, 1 },
2204     FR30_INSN_EORB, "eorb", "eorb",
2205     { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2206     & fmt_andb, { 0x9e00 },
2207     (PTR) & fmt_andb_ops[0],
2208     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2209   },
2210 /* bandl $u4,@$Ri */
2211   {
2212     { 1, 1, 1, 1 },
2213     FR30_INSN_BANDL, "bandl", "bandl",
2214     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2215     & fmt_bandl, { 0x8000 },
2216     (PTR) & fmt_bandl_ops[0],
2217     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2218   },
2219 /* borl $u4,@$Ri */
2220   {
2221     { 1, 1, 1, 1 },
2222     FR30_INSN_BORL, "borl", "borl",
2223     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2224     & fmt_bandl, { 0x9000 },
2225     (PTR) & fmt_bandl_ops[0],
2226     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2227   },
2228 /* beorl $u4,@$Ri */
2229   {
2230     { 1, 1, 1, 1 },
2231     FR30_INSN_BEORL, "beorl", "beorl",
2232     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2233     & fmt_bandl, { 0x9800 },
2234     (PTR) & fmt_bandl_ops[0],
2235     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2236   },
2237 /* bandh $u4,@$Ri */
2238   {
2239     { 1, 1, 1, 1 },
2240     FR30_INSN_BANDH, "bandh", "bandh",
2241     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2242     & fmt_bandl, { 0x8100 },
2243     (PTR) & fmt_bandl_ops[0],
2244     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2245   },
2246 /* borh $u4,@$Ri */
2247   {
2248     { 1, 1, 1, 1 },
2249     FR30_INSN_BORH, "borh", "borh",
2250     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2251     & fmt_bandl, { 0x9100 },
2252     (PTR) & fmt_bandl_ops[0],
2253     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2254   },
2255 /* beorh $u4,@$Ri */
2256   {
2257     { 1, 1, 1, 1 },
2258     FR30_INSN_BEORH, "beorh", "beorh",
2259     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2260     & fmt_bandl, { 0x9900 },
2261     (PTR) & fmt_bandl_ops[0],
2262     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2263   },
2264 /* btstl $u4,@$Ri */
2265   {
2266     { 1, 1, 1, 1 },
2267     FR30_INSN_BTSTL, "btstl", "btstl",
2268     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2269     & fmt_btstl, { 0x8800 },
2270     (PTR) & fmt_btstl_ops[0],
2271     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2272   },
2273 /* btsth $u4,@$Ri */
2274   {
2275     { 1, 1, 1, 1 },
2276     FR30_INSN_BTSTH, "btsth", "btsth",
2277     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2278     & fmt_btstl, { 0x8900 },
2279     (PTR) & fmt_btstl_ops[0],
2280     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2281   },
2282 /* mul $Rj,$Ri */
2283   {
2284     { 1, 1, 1, 1 },
2285     FR30_INSN_MUL, "mul", "mul",
2286     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2287     & fmt_mul, { 0xaf00 },
2288     (PTR) & fmt_mul_ops[0],
2289     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2290   },
2291 /* mulu $Rj,$Ri */
2292   {
2293     { 1, 1, 1, 1 },
2294     FR30_INSN_MULU, "mulu", "mulu",
2295     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2296     & fmt_mulu, { 0xab00 },
2297     (PTR) & fmt_mulu_ops[0],
2298     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2299   },
2300 /* mulh $Rj,$Ri */
2301   {
2302     { 1, 1, 1, 1 },
2303     FR30_INSN_MULH, "mulh", "mulh",
2304     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2305     & fmt_mulh, { 0xbf00 },
2306     (PTR) & fmt_mulh_ops[0],
2307     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2308   },
2309 /* muluh $Rj,$Ri */
2310   {
2311     { 1, 1, 1, 1 },
2312     FR30_INSN_MULUH, "muluh", "muluh",
2313     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2314     & fmt_mulh, { 0xbb00 },
2315     (PTR) & fmt_mulh_ops[0],
2316     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2317   },
2318 /* div0s $Ri */
2319   {
2320     { 1, 1, 1, 1 },
2321     FR30_INSN_DIV0S, "div0s", "div0s",
2322     { { MNEM, ' ', OP (RI), 0 } },
2323     & fmt_div0s, { 0x9740 },
2324     (PTR) & fmt_div0s_ops[0],
2325     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2326   },
2327 /* div0u $Ri */
2328   {
2329     { 1, 1, 1, 1 },
2330     FR30_INSN_DIV0U, "div0u", "div0u",
2331     { { MNEM, ' ', OP (RI), 0 } },
2332     & fmt_div0u, { 0x9750 },
2333     (PTR) & fmt_div0u_ops[0],
2334     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2335   },
2336 /* div1 $Ri */
2337   {
2338     { 1, 1, 1, 1 },
2339     FR30_INSN_DIV1, "div1", "div1",
2340     { { MNEM, ' ', OP (RI), 0 } },
2341     & fmt_div1, { 0x9760 },
2342     (PTR) & fmt_div1_ops[0],
2343     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2344   },
2345 /* div2 $Ri */
2346   {
2347     { 1, 1, 1, 1 },
2348     FR30_INSN_DIV2, "div2", "div2",
2349     { { MNEM, ' ', OP (RI), 0 } },
2350     & fmt_div2, { 0x9770 },
2351     (PTR) & fmt_div2_ops[0],
2352     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2353   },
2354 /* div3 */
2355   {
2356     { 1, 1, 1, 1 },
2357     FR30_INSN_DIV3, "div3", "div3",
2358     { { MNEM, 0 } },
2359     & fmt_div3, { 0x9f60 },
2360     (PTR) & fmt_div3_ops[0],
2361     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2362   },
2363 /* div4s */
2364   {
2365     { 1, 1, 1, 1 },
2366     FR30_INSN_DIV4S, "div4s", "div4s",
2367     { { MNEM, 0 } },
2368     & fmt_div4s, { 0x9f70 },
2369     (PTR) & fmt_div4s_ops[0],
2370     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2371   },
2372 /* lsl $Rj,$Ri */
2373   {
2374     { 1, 1, 1, 1 },
2375     FR30_INSN_LSL, "lsl", "lsl",
2376     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2377     & fmt_lsl, { 0xb600 },
2378     (PTR) & fmt_lsl_ops[0],
2379     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2380   },
2381 /* lsl $u4,$Ri */
2382   {
2383     { 1, 1, 1, 1 },
2384     FR30_INSN_LSLI, "lsli", "lsl",
2385     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2386     & fmt_lsli, { 0xb400 },
2387     (PTR) & fmt_lsli_ops[0],
2388     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2389   },
2390 /* lsl2 $u4,$Ri */
2391   {
2392     { 1, 1, 1, 1 },
2393     FR30_INSN_LSL2, "lsl2", "lsl2",
2394     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2395     & fmt_lsli, { 0xb500 },
2396     (PTR) & fmt_lsli_ops[0],
2397     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2398   },
2399 /* lsr $Rj,$Ri */
2400   {
2401     { 1, 1, 1, 1 },
2402     FR30_INSN_LSR, "lsr", "lsr",
2403     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2404     & fmt_lsl, { 0xb200 },
2405     (PTR) & fmt_lsl_ops[0],
2406     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2407   },
2408 /* lsr $u4,$Ri */
2409   {
2410     { 1, 1, 1, 1 },
2411     FR30_INSN_LSRI, "lsri", "lsr",
2412     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2413     & fmt_lsli, { 0xb000 },
2414     (PTR) & fmt_lsli_ops[0],
2415     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2416   },
2417 /* lsr2 $u4,$Ri */
2418   {
2419     { 1, 1, 1, 1 },
2420     FR30_INSN_LSR2, "lsr2", "lsr2",
2421     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2422     & fmt_lsli, { 0xb100 },
2423     (PTR) & fmt_lsli_ops[0],
2424     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2425   },
2426 /* asr $Rj,$Ri */
2427   {
2428     { 1, 1, 1, 1 },
2429     FR30_INSN_ASR, "asr", "asr",
2430     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2431     & fmt_lsl, { 0xba00 },
2432     (PTR) & fmt_lsl_ops[0],
2433     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2434   },
2435 /* asr $u4,$Ri */
2436   {
2437     { 1, 1, 1, 1 },
2438     FR30_INSN_ASRI, "asri", "asr",
2439     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2440     & fmt_lsli, { 0xb800 },
2441     (PTR) & fmt_lsli_ops[0],
2442     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2443   },
2444 /* asr2 $u4,$Ri */
2445   {
2446     { 1, 1, 1, 1 },
2447     FR30_INSN_ASR2, "asr2", "asr2",
2448     { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2449     & fmt_lsli, { 0xb900 },
2450     (PTR) & fmt_lsli_ops[0],
2451     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2452   },
2453 /* ldi:8 $i8,$Ri */
2454   {
2455     { 1, 1, 1, 1 },
2456     FR30_INSN_LDI8, "ldi8", "ldi:8",
2457     { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
2458     & fmt_ldi8, { 0xc000 },
2459     (PTR) & fmt_ldi8_ops[0],
2460     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2461   },
2462 /* ldi:20 $i20,$Ri */
2463   {
2464     { 1, 1, 1, 1 },
2465     FR30_INSN_LDI20, "ldi20", "ldi:20",
2466     { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
2467     & fmt_ldi20, { 0x9b00 },
2468     (PTR) & fmt_ldi20_ops[0],
2469     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2470   },
2471 /* ldi:32 $i32,$Ri */
2472   {
2473     { 1, 1, 1, 1 },
2474     FR30_INSN_LDI32, "ldi32", "ldi:32",
2475     { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
2476     & fmt_ldi32, { 0x9f80 },
2477     (PTR) & fmt_ldi32_ops[0],
2478     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2479   },
2480 /* ld @$Rj,$Ri */
2481   {
2482     { 1, 1, 1, 1 },
2483     FR30_INSN_LD, "ld", "ld",
2484     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
2485     & fmt_ld, { 0x400 },
2486     (PTR) & fmt_ld_ops[0],
2487     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2488   },
2489 /* lduh @$Rj,$Ri */
2490   {
2491     { 1, 1, 1, 1 },
2492     FR30_INSN_LDUH, "lduh", "lduh",
2493     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
2494     & fmt_lduh, { 0x500 },
2495     (PTR) & fmt_lduh_ops[0],
2496     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2497   },
2498 /* ldub @$Rj,$Ri */
2499   {
2500     { 1, 1, 1, 1 },
2501     FR30_INSN_LDUB, "ldub", "ldub",
2502     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
2503     & fmt_ldub, { 0x600 },
2504     (PTR) & fmt_ldub_ops[0],
2505     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2506   },
2507 /* ld @($R13,$Rj),$Ri */
2508   {
2509     { 1, 1, 1, 1 },
2510     FR30_INSN_LDR13, "ldr13", "ld",
2511     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
2512     & fmt_ldr13, { 0x0 },
2513     (PTR) & fmt_ldr13_ops[0],
2514     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2515   },
2516 /* lduh @($R13,$Rj),$Ri */
2517   {
2518     { 1, 1, 1, 1 },
2519     FR30_INSN_LDR13UH, "ldr13uh", "lduh",
2520     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
2521     & fmt_ldr13uh, { 0x100 },
2522     (PTR) & fmt_ldr13uh_ops[0],
2523     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2524   },
2525 /* ldub @($R13,$Rj),$Ri */
2526   {
2527     { 1, 1, 1, 1 },
2528     FR30_INSN_LDR13UB, "ldr13ub", "ldub",
2529     { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
2530     & fmt_ldr13ub, { 0x200 },
2531     (PTR) & fmt_ldr13ub_ops[0],
2532     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2533   },
2534 /* ld @($R14,$disp10),$Ri */
2535   {
2536     { 1, 1, 1, 1 },
2537     FR30_INSN_LDR14, "ldr14", "ld",
2538     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } },
2539     & fmt_ldr14, { 0x2000 },
2540     (PTR) & fmt_ldr14_ops[0],
2541     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2542   },
2543 /* lduh @($R14,$disp9),$Ri */
2544   {
2545     { 1, 1, 1, 1 },
2546     FR30_INSN_LDR14UH, "ldr14uh", "lduh",
2547     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } },
2548     & fmt_ldr14uh, { 0x4000 },
2549     (PTR) & fmt_ldr14uh_ops[0],
2550     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2551   },
2552 /* ldub @($R14,$disp8),$Ri */
2553   {
2554     { 1, 1, 1, 1 },
2555     FR30_INSN_LDR14UB, "ldr14ub", "ldub",
2556     { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } },
2557     & fmt_ldr14ub, { 0x6000 },
2558     (PTR) & fmt_ldr14ub_ops[0],
2559     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2560   },
2561 /* ld @($R15,$udisp6),$Ri */
2562   {
2563     { 1, 1, 1, 1 },
2564     FR30_INSN_LDR15, "ldr15", "ld",
2565     { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } },
2566     & fmt_ldr15, { 0x300 },
2567     (PTR) & fmt_ldr15_ops[0],
2568     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2569   },
2570 /* ld @$R15+,$Ri */
2571   {
2572     { 1, 1, 1, 1 },
2573     FR30_INSN_LDR15GR, "ldr15gr", "ld",
2574     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } },
2575     & fmt_ldr15gr, { 0x700 },
2576     (PTR) & fmt_ldr15gr_ops[0],
2577     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2578   },
2579 /* ld @$R15+,$Rs2 */
2580   {
2581     { 1, 1, 1, 1 },
2582     FR30_INSN_LDR15DR, "ldr15dr", "ld",
2583     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } },
2584     & fmt_ldr15dr, { 0x780 },
2585     (PTR) & fmt_ldr15dr_ops[0],
2586     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2587   },
2588 /* ld @$R15+,$ps */
2589   {
2590     { 1, 1, 1, 1 },
2591     FR30_INSN_LDR15PS, "ldr15ps", "ld",
2592     { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } },
2593     & fmt_ldr15ps, { 0x790 },
2594     (PTR) & fmt_ldr15ps_ops[0],
2595     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2596   },
2597 /* st $Ri,@$Rj */
2598   {
2599     { 1, 1, 1, 1 },
2600     FR30_INSN_ST, "st", "st",
2601     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
2602     & fmt_st, { 0x1400 },
2603     (PTR) & fmt_st_ops[0],
2604     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2605   },
2606 /* sth $Ri,@$Rj */
2607   {
2608     { 1, 1, 1, 1 },
2609     FR30_INSN_STH, "sth", "sth",
2610     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
2611     & fmt_sth, { 0x1500 },
2612     (PTR) & fmt_sth_ops[0],
2613     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2614   },
2615 /* stb $Ri,@$Rj */
2616   {
2617     { 1, 1, 1, 1 },
2618     FR30_INSN_STB, "stb", "stb",
2619     { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
2620     & fmt_stb, { 0x1600 },
2621     (PTR) & fmt_stb_ops[0],
2622     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2623   },
2624 /* st $Ri,@($R13,$Rj) */
2625   {
2626     { 1, 1, 1, 1 },
2627     FR30_INSN_STR13, "str13", "st",
2628     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
2629     & fmt_str13, { 0x1000 },
2630     (PTR) & fmt_str13_ops[0],
2631     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2632   },
2633 /* sth $Ri,@($R13,$Rj) */
2634   {
2635     { 1, 1, 1, 1 },
2636     FR30_INSN_STR13H, "str13h", "sth",
2637     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
2638     & fmt_str13h, { 0x1100 },
2639     (PTR) & fmt_str13h_ops[0],
2640     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2641   },
2642 /* stb $Ri,@($R13,$Rj) */
2643   {
2644     { 1, 1, 1, 1 },
2645     FR30_INSN_STR13B, "str13b", "stb",
2646     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
2647     & fmt_str13b, { 0x1200 },
2648     (PTR) & fmt_str13b_ops[0],
2649     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2650   },
2651 /* st $Ri,@($R14,$disp10) */
2652   {
2653     { 1, 1, 1, 1 },
2654     FR30_INSN_STR14, "str14", "st",
2655     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } },
2656     & fmt_str14, { 0x3000 },
2657     (PTR) & fmt_str14_ops[0],
2658     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2659   },
2660 /* sth $Ri,@($R14,$disp9) */
2661   {
2662     { 1, 1, 1, 1 },
2663     FR30_INSN_STR14H, "str14h", "sth",
2664     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } },
2665     & fmt_str14h, { 0x5000 },
2666     (PTR) & fmt_str14h_ops[0],
2667     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2668   },
2669 /* stb $Ri,@($R14,$disp8) */
2670   {
2671     { 1, 1, 1, 1 },
2672     FR30_INSN_STR14B, "str14b", "stb",
2673     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } },
2674     & fmt_str14b, { 0x7000 },
2675     (PTR) & fmt_str14b_ops[0],
2676     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2677   },
2678 /* st $Ri,@($R15,$udisp6) */
2679   {
2680     { 1, 1, 1, 1 },
2681     FR30_INSN_STR15, "str15", "st",
2682     { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } },
2683     & fmt_str15, { 0x1300 },
2684     (PTR) & fmt_str15_ops[0],
2685     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2686   },
2687 /* st $Ri,@-$R15 */
2688   {
2689     { 1, 1, 1, 1 },
2690     FR30_INSN_STR15GR, "str15gr", "st",
2691     { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } },
2692     & fmt_str15gr, { 0x1700 },
2693     (PTR) & fmt_str15gr_ops[0],
2694     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2695   },
2696 /* st $Rs2,@-$R15 */
2697   {
2698     { 1, 1, 1, 1 },
2699     FR30_INSN_STR15DR, "str15dr", "st",
2700     { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } },
2701     & fmt_str15dr, { 0x1780 },
2702     (PTR) & fmt_str15dr_ops[0],
2703     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2704   },
2705 /* st $ps,@-$R15 */
2706   {
2707     { 1, 1, 1, 1 },
2708     FR30_INSN_STR15PS, "str15ps", "st",
2709     { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } },
2710     & fmt_str15ps, { 0x1790 },
2711     (PTR) & fmt_str15ps_ops[0],
2712     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2713   },
2714 /* mov $Rj,$Ri */
2715   {
2716     { 1, 1, 1, 1 },
2717     FR30_INSN_MOV, "mov", "mov",
2718     { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2719     & fmt_mov, { 0x8b00 },
2720     (PTR) & fmt_mov_ops[0],
2721     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2722   },
2723 /* mov $Rs1,$Ri */
2724   {
2725     { 1, 1, 1, 1 },
2726     FR30_INSN_MOVDR, "movdr", "mov",
2727     { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
2728     & fmt_movdr, { 0xb700 },
2729     (PTR) & fmt_movdr_ops[0],
2730     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2731   },
2732 /* mov $ps,$Ri */
2733   {
2734     { 1, 1, 1, 1 },
2735     FR30_INSN_MOVPS, "movps", "mov",
2736     { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } },
2737     & fmt_movps, { 0x1710 },
2738     (PTR) & fmt_movps_ops[0],
2739     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2740   },
2741 /* mov $Ri,$Rs1 */
2742   {
2743     { 1, 1, 1, 1 },
2744     FR30_INSN_MOV2DR, "mov2dr", "mov",
2745     { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
2746     & fmt_mov2dr, { 0xb300 },
2747     (PTR) & fmt_mov2dr_ops[0],
2748     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2749   },
2750 /* mov $Ri,$ps */
2751   {
2752     { 1, 1, 1, 1 },
2753     FR30_INSN_MOV2PS, "mov2ps", "mov",
2754     { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } },
2755     & fmt_mov2ps, { 0x710 },
2756     (PTR) & fmt_mov2ps_ops[0],
2757     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
2758   },
2759 /* jmp @$Ri */
2760   {
2761     { 1, 1, 1, 1 },
2762     FR30_INSN_JMP, "jmp", "jmp",
2763     { { MNEM, ' ', '@', OP (RI), 0 } },
2764     & fmt_jmp, { 0x9700 },
2765     (PTR) & fmt_jmp_ops[0],
2766     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
2767   },
2768 /* jmp:d @$Ri */
2769   {
2770     { 1, 1, 1, 1 },
2771     FR30_INSN_JMPD, "jmpd", "jmp:d",
2772     { { MNEM, ' ', '@', OP (RI), 0 } },
2773     & fmt_jmp, { 0x9f00 },
2774     (PTR) & fmt_jmp_ops[0],
2775     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2776   },
2777 /* call @$Ri */
2778   {
2779     { 1, 1, 1, 1 },
2780     FR30_INSN_CALLR, "callr", "call",
2781     { { MNEM, ' ', '@', OP (RI), 0 } },
2782     & fmt_callr, { 0x9710 },
2783     (PTR) & fmt_callr_ops[0],
2784     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
2785   },
2786 /* call:d @$Ri */
2787   {
2788     { 1, 1, 1, 1 },
2789     FR30_INSN_CALLRD, "callrd", "call:d",
2790     { { MNEM, ' ', '@', OP (RI), 0 } },
2791     & fmt_callr, { 0x9f10 },
2792     (PTR) & fmt_callr_ops[0],
2793     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2794   },
2795 /* call $label12 */
2796   {
2797     { 1, 1, 1, 1 },
2798     FR30_INSN_CALL, "call", "call",
2799     { { MNEM, ' ', OP (LABEL12), 0 } },
2800     & fmt_call, { 0xd000 },
2801     (PTR) & fmt_call_ops[0],
2802     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
2803   },
2804 /* call:d $label12 */
2805   {
2806     { 1, 1, 1, 1 },
2807     FR30_INSN_CALLD, "calld", "call:d",
2808     { { MNEM, ' ', OP (LABEL12), 0 } },
2809     & fmt_call, { 0xd800 },
2810     (PTR) & fmt_call_ops[0],
2811     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2812   },
2813 /* ret */
2814   {
2815     { 1, 1, 1, 1 },
2816     FR30_INSN_RET, "ret", "ret",
2817     { { MNEM, 0 } },
2818     & fmt_ret, { 0x9720 },
2819     (PTR) & fmt_ret_ops[0],
2820     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
2821   },
2822 /* ret:d */
2823   {
2824     { 1, 1, 1, 1 },
2825     FR30_INSN_RET_D, "ret:d", "ret:d",
2826     { { MNEM, 0 } },
2827     & fmt_ret, { 0x9f20 },
2828     (PTR) & fmt_ret_ops[0],
2829     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2830   },
2831 /* int $u8 */
2832   {
2833     { 1, 1, 1, 1 },
2834     FR30_INSN_INT, "int", "int",
2835     { { MNEM, ' ', OP (U8), 0 } },
2836     & fmt_int, { 0x1f00 },
2837     (PTR) & fmt_int_ops[0],
2838     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
2839   },
2840 /* inte */
2841   {
2842     { 1, 1, 1, 1 },
2843     FR30_INSN_INTE, "inte", "inte",
2844     { { MNEM, 0 } },
2845     & fmt_inte, { 0x9f30 },
2846     (PTR) & fmt_inte_ops[0],
2847     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE) } }
2848   },
2849 /* reti */
2850   {
2851     { 1, 1, 1, 1 },
2852     FR30_INSN_RETI, "reti", "reti",
2853     { { MNEM, 0 } },
2854     & fmt_reti, { 0x9730 },
2855     (PTR) & fmt_reti_ops[0],
2856     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { (1<<MACH_BASE) } }
2857   },
2858 /* bra:d $label9 */
2859   {
2860     { 1, 1, 1, 1 },
2861     FR30_INSN_BRAD, "brad", "bra:d",
2862     { { MNEM, ' ', OP (LABEL9), 0 } },
2863     & fmt_brad, { 0xf000 },
2864     (PTR) & fmt_brad_ops[0],
2865     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2866   },
2867 /* bra $label9 */
2868   {
2869     { 1, 1, 1, 1 },
2870     FR30_INSN_BRA, "bra", "bra",
2871     { { MNEM, ' ', OP (LABEL9), 0 } },
2872     & fmt_brad, { 0xe000 },
2873     (PTR) & fmt_brad_ops[0],
2874     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2875   },
2876 /* bno:d $label9 */
2877   {
2878     { 1, 1, 1, 1 },
2879     FR30_INSN_BNOD, "bnod", "bno:d",
2880     { { MNEM, ' ', OP (LABEL9), 0 } },
2881     & fmt_brad, { 0xf100 },
2882     (PTR) & fmt_brad_ops[0],
2883     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2884   },
2885 /* bno $label9 */
2886   {
2887     { 1, 1, 1, 1 },
2888     FR30_INSN_BNO, "bno", "bno",
2889     { { MNEM, ' ', OP (LABEL9), 0 } },
2890     & fmt_brad, { 0xe100 },
2891     (PTR) & fmt_brad_ops[0],
2892     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2893   },
2894 /* beq:d $label9 */
2895   {
2896     { 1, 1, 1, 1 },
2897     FR30_INSN_BEQD, "beqd", "beq:d",
2898     { { MNEM, ' ', OP (LABEL9), 0 } },
2899     & fmt_beqd, { 0xf200 },
2900     (PTR) & fmt_beqd_ops[0],
2901     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2902   },
2903 /* beq $label9 */
2904   {
2905     { 1, 1, 1, 1 },
2906     FR30_INSN_BEQ, "beq", "beq",
2907     { { MNEM, ' ', OP (LABEL9), 0 } },
2908     & fmt_beqd, { 0xe200 },
2909     (PTR) & fmt_beqd_ops[0],
2910     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2911   },
2912 /* bne:d $label9 */
2913   {
2914     { 1, 1, 1, 1 },
2915     FR30_INSN_BNED, "bned", "bne:d",
2916     { { MNEM, ' ', OP (LABEL9), 0 } },
2917     & fmt_beqd, { 0xf300 },
2918     (PTR) & fmt_beqd_ops[0],
2919     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2920   },
2921 /* bne $label9 */
2922   {
2923     { 1, 1, 1, 1 },
2924     FR30_INSN_BNE, "bne", "bne",
2925     { { MNEM, ' ', OP (LABEL9), 0 } },
2926     & fmt_beqd, { 0xe300 },
2927     (PTR) & fmt_beqd_ops[0],
2928     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2929   },
2930 /* bc:d $label9 */
2931   {
2932     { 1, 1, 1, 1 },
2933     FR30_INSN_BCD, "bcd", "bc:d",
2934     { { MNEM, ' ', OP (LABEL9), 0 } },
2935     & fmt_bcd, { 0xf400 },
2936     (PTR) & fmt_bcd_ops[0],
2937     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2938   },
2939 /* bc $label9 */
2940   {
2941     { 1, 1, 1, 1 },
2942     FR30_INSN_BC, "bc", "bc",
2943     { { MNEM, ' ', OP (LABEL9), 0 } },
2944     & fmt_bcd, { 0xe400 },
2945     (PTR) & fmt_bcd_ops[0],
2946     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2947   },
2948 /* bnc:d $label9 */
2949   {
2950     { 1, 1, 1, 1 },
2951     FR30_INSN_BNCD, "bncd", "bnc:d",
2952     { { MNEM, ' ', OP (LABEL9), 0 } },
2953     & fmt_bcd, { 0xf500 },
2954     (PTR) & fmt_bcd_ops[0],
2955     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2956   },
2957 /* bnc $label9 */
2958   {
2959     { 1, 1, 1, 1 },
2960     FR30_INSN_BNC, "bnc", "bnc",
2961     { { MNEM, ' ', OP (LABEL9), 0 } },
2962     & fmt_bcd, { 0xe500 },
2963     (PTR) & fmt_bcd_ops[0],
2964     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2965   },
2966 /* bn:d $label9 */
2967   {
2968     { 1, 1, 1, 1 },
2969     FR30_INSN_BND, "bnd", "bn:d",
2970     { { MNEM, ' ', OP (LABEL9), 0 } },
2971     & fmt_bnd, { 0xf600 },
2972     (PTR) & fmt_bnd_ops[0],
2973     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2974   },
2975 /* bn $label9 */
2976   {
2977     { 1, 1, 1, 1 },
2978     FR30_INSN_BN, "bn", "bn",
2979     { { MNEM, ' ', OP (LABEL9), 0 } },
2980     & fmt_bnd, { 0xe600 },
2981     (PTR) & fmt_bnd_ops[0],
2982     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
2983   },
2984 /* bp:d $label9 */
2985   {
2986     { 1, 1, 1, 1 },
2987     FR30_INSN_BPD, "bpd", "bp:d",
2988     { { MNEM, ' ', OP (LABEL9), 0 } },
2989     & fmt_bnd, { 0xf700 },
2990     (PTR) & fmt_bnd_ops[0],
2991     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
2992   },
2993 /* bp $label9 */
2994   {
2995     { 1, 1, 1, 1 },
2996     FR30_INSN_BP, "bp", "bp",
2997     { { MNEM, ' ', OP (LABEL9), 0 } },
2998     & fmt_bnd, { 0xe700 },
2999     (PTR) & fmt_bnd_ops[0],
3000     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3001   },
3002 /* bv:d $label9 */
3003   {
3004     { 1, 1, 1, 1 },
3005     FR30_INSN_BVD, "bvd", "bv:d",
3006     { { MNEM, ' ', OP (LABEL9), 0 } },
3007     & fmt_bvd, { 0xf800 },
3008     (PTR) & fmt_bvd_ops[0],
3009     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
3010   },
3011 /* bv $label9 */
3012   {
3013     { 1, 1, 1, 1 },
3014     FR30_INSN_BV, "bv", "bv",
3015     { { MNEM, ' ', OP (LABEL9), 0 } },
3016     & fmt_bvd, { 0xe800 },
3017     (PTR) & fmt_bvd_ops[0],
3018     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3019   },
3020 /* bnv:d $label9 */
3021   {
3022     { 1, 1, 1, 1 },
3023     FR30_INSN_BNVD, "bnvd", "bnv:d",
3024     { { MNEM, ' ', OP (LABEL9), 0 } },
3025     & fmt_bvd, { 0xf900 },
3026     (PTR) & fmt_bvd_ops[0],
3027     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
3028   },
3029 /* bnv $label9 */
3030   {
3031     { 1, 1, 1, 1 },
3032     FR30_INSN_BNV, "bnv", "bnv",
3033     { { MNEM, ' ', OP (LABEL9), 0 } },
3034     & fmt_bvd, { 0xe900 },
3035     (PTR) & fmt_bvd_ops[0],
3036     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3037   },
3038 /* blt:d $label9 */
3039   {
3040     { 1, 1, 1, 1 },
3041     FR30_INSN_BLTD, "bltd", "blt:d",
3042     { { MNEM, ' ', OP (LABEL9), 0 } },
3043     & fmt_bltd, { 0xfa00 },
3044     (PTR) & fmt_bltd_ops[0],
3045     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
3046   },
3047 /* blt $label9 */
3048   {
3049     { 1, 1, 1, 1 },
3050     FR30_INSN_BLT, "blt", "blt",
3051     { { MNEM, ' ', OP (LABEL9), 0 } },
3052     & fmt_bltd, { 0xea00 },
3053     (PTR) & fmt_bltd_ops[0],
3054     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3055   },
3056 /* bge:d $label9 */
3057   {
3058     { 1, 1, 1, 1 },
3059     FR30_INSN_BGED, "bged", "bge:d",
3060     { { MNEM, ' ', OP (LABEL9), 0 } },
3061     & fmt_bltd, { 0xfb00 },
3062     (PTR) & fmt_bltd_ops[0],
3063     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
3064   },
3065 /* bge $label9 */
3066   {
3067     { 1, 1, 1, 1 },
3068     FR30_INSN_BGE, "bge", "bge",
3069     { { MNEM, ' ', OP (LABEL9), 0 } },
3070     & fmt_bltd, { 0xeb00 },
3071     (PTR) & fmt_bltd_ops[0],
3072     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3073   },
3074 /* ble:d $label9 */
3075   {
3076     { 1, 1, 1, 1 },
3077     FR30_INSN_BLED, "bled", "ble:d",
3078     { { MNEM, ' ', OP (LABEL9), 0 } },
3079     & fmt_bled, { 0xfc00 },
3080     (PTR) & fmt_bled_ops[0],
3081     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
3082   },
3083 /* ble $label9 */
3084   {
3085     { 1, 1, 1, 1 },
3086     FR30_INSN_BLE, "ble", "ble",
3087     { { MNEM, ' ', OP (LABEL9), 0 } },
3088     & fmt_bled, { 0xec00 },
3089     (PTR) & fmt_bled_ops[0],
3090     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3091   },
3092 /* bgt:d $label9 */
3093   {
3094     { 1, 1, 1, 1 },
3095     FR30_INSN_BGTD, "bgtd", "bgt:d",
3096     { { MNEM, ' ', OP (LABEL9), 0 } },
3097     & fmt_bled, { 0xfd00 },
3098     (PTR) & fmt_bled_ops[0],
3099     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
3100   },
3101 /* bgt $label9 */
3102   {
3103     { 1, 1, 1, 1 },
3104     FR30_INSN_BGT, "bgt", "bgt",
3105     { { MNEM, ' ', OP (LABEL9), 0 } },
3106     & fmt_bled, { 0xed00 },
3107     (PTR) & fmt_bled_ops[0],
3108     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3109   },
3110 /* bls:d $label9 */
3111   {
3112     { 1, 1, 1, 1 },
3113     FR30_INSN_BLSD, "blsd", "bls:d",
3114     { { MNEM, ' ', OP (LABEL9), 0 } },
3115     & fmt_blsd, { 0xfe00 },
3116     (PTR) & fmt_blsd_ops[0],
3117     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
3118   },
3119 /* bls $label9 */
3120   {
3121     { 1, 1, 1, 1 },
3122     FR30_INSN_BLS, "bls", "bls",
3123     { { MNEM, ' ', OP (LABEL9), 0 } },
3124     & fmt_blsd, { 0xee00 },
3125     (PTR) & fmt_blsd_ops[0],
3126     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3127   },
3128 /* bhi:d $label9 */
3129   {
3130     { 1, 1, 1, 1 },
3131     FR30_INSN_BHID, "bhid", "bhi:d",
3132     { { MNEM, ' ', OP (LABEL9), 0 } },
3133     & fmt_blsd, { 0xff00 },
3134     (PTR) & fmt_blsd_ops[0],
3135     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { (1<<MACH_BASE) } }
3136   },
3137 /* bhi $label9 */
3138   {
3139     { 1, 1, 1, 1 },
3140     FR30_INSN_BHI, "bhi", "bhi",
3141     { { MNEM, ' ', OP (LABEL9), 0 } },
3142     & fmt_blsd, { 0xef00 },
3143     (PTR) & fmt_blsd_ops[0],
3144     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3145   },
3146 /* dmov $R13,@$dir10 */
3147   {
3148     { 1, 1, 1, 1 },
3149     FR30_INSN_DMOVR13, "dmovr13", "dmov",
3150     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } },
3151     & fmt_dmovr13, { 0x1800 },
3152     (PTR) & fmt_dmovr13_ops[0],
3153     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3154   },
3155 /* dmovh $R13,@$dir9 */
3156   {
3157     { 1, 1, 1, 1 },
3158     FR30_INSN_DMOVR13H, "dmovr13h", "dmovh",
3159     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } },
3160     & fmt_dmovr13h, { 0x1900 },
3161     (PTR) & fmt_dmovr13h_ops[0],
3162     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3163   },
3164 /* dmovb $R13,@$dir8 */
3165   {
3166     { 1, 1, 1, 1 },
3167     FR30_INSN_DMOVR13B, "dmovr13b", "dmovb",
3168     { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } },
3169     & fmt_dmovr13b, { 0x1a00 },
3170     (PTR) & fmt_dmovr13b_ops[0],
3171     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3172   },
3173 /* dmov @$R13+,@$dir10 */
3174   {
3175     { 1, 1, 1, 1 },
3176     FR30_INSN_DMOVR13PI, "dmovr13pi", "dmov",
3177     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } },
3178     & fmt_dmovr13pi, { 0x1c00 },
3179     (PTR) & fmt_dmovr13pi_ops[0],
3180     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3181   },
3182 /* dmovh @$R13+,@$dir9 */
3183   {
3184     { 1, 1, 1, 1 },
3185     FR30_INSN_DMOVR13PIH, "dmovr13pih", "dmovh",
3186     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } },
3187     & fmt_dmovr13pih, { 0x1d00 },
3188     (PTR) & fmt_dmovr13pih_ops[0],
3189     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3190   },
3191 /* dmovb @$R13+,@$dir8 */
3192   {
3193     { 1, 1, 1, 1 },
3194     FR30_INSN_DMOVR13PIB, "dmovr13pib", "dmovb",
3195     { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } },
3196     & fmt_dmovr13pib, { 0x1e00 },
3197     (PTR) & fmt_dmovr13pib_ops[0],
3198     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3199   },
3200 /* dmov @$R15+,@$dir10 */
3201   {
3202     { 1, 1, 1, 1 },
3203     FR30_INSN_DMOVR15PI, "dmovr15pi", "dmov",
3204     { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } },
3205     & fmt_dmovr15pi, { 0x1b00 },
3206     (PTR) & fmt_dmovr15pi_ops[0],
3207     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3208   },
3209 /* dmov @$dir10,$R13 */
3210   {
3211     { 1, 1, 1, 1 },
3212     FR30_INSN_DMOV2R13, "dmov2r13", "dmov",
3213     { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } },
3214     & fmt_dmov2r13, { 0x800 },
3215     (PTR) & fmt_dmov2r13_ops[0],
3216     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3217   },
3218 /* dmovh @$dir9,$R13 */
3219   {
3220     { 1, 1, 1, 1 },
3221     FR30_INSN_DMOV2R13H, "dmov2r13h", "dmovh",
3222     { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } },
3223     & fmt_dmov2r13h, { 0x900 },
3224     (PTR) & fmt_dmov2r13h_ops[0],
3225     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3226   },
3227 /* dmovb @$dir8,$R13 */
3228   {
3229     { 1, 1, 1, 1 },
3230     FR30_INSN_DMOV2R13B, "dmov2r13b", "dmovb",
3231     { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } },
3232     & fmt_dmov2r13b, { 0xa00 },
3233     (PTR) & fmt_dmov2r13b_ops[0],
3234     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3235   },
3236 /* dmov @$dir10,@$R13+ */
3237   {
3238     { 1, 1, 1, 1 },
3239     FR30_INSN_DMOV2R13PI, "dmov2r13pi", "dmov",
3240     { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } },
3241     & fmt_dmov2r13pi, { 0xc00 },
3242     (PTR) & fmt_dmov2r13pi_ops[0],
3243     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3244   },
3245 /* dmovh @$dir9,@$R13+ */
3246   {
3247     { 1, 1, 1, 1 },
3248     FR30_INSN_DMOV2R13PIH, "dmov2r13pih", "dmovh",
3249     { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } },
3250     & fmt_dmov2r13pih, { 0xd00 },
3251     (PTR) & fmt_dmov2r13pih_ops[0],
3252     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3253   },
3254 /* dmovb @$dir8,@$R13+ */
3255   {
3256     { 1, 1, 1, 1 },
3257     FR30_INSN_DMOV2R13PIB, "dmov2r13pib", "dmovb",
3258     { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } },
3259     & fmt_dmov2r13pib, { 0xe00 },
3260     (PTR) & fmt_dmov2r13pib_ops[0],
3261     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3262   },
3263 /* dmov @$dir10,@-$R15 */
3264   {
3265     { 1, 1, 1, 1 },
3266     FR30_INSN_DMOV2R15PD, "dmov2r15pd", "dmov",
3267     { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } },
3268     & fmt_dmov2r15pd, { 0xb00 },
3269     (PTR) & fmt_dmov2r15pd_ops[0],
3270     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3271   },
3272 /* ldres @$Ri+,$u4 */
3273   {
3274     { 1, 1, 1, 1 },
3275     FR30_INSN_LDRES, "ldres", "ldres",
3276     { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
3277     & fmt_ldres, { 0xbc00 },
3278     (PTR) & fmt_ldres_ops[0],
3279     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3280   },
3281 /* stres $u4,@$Ri+ */
3282   {
3283     { 1, 1, 1, 1 },
3284     FR30_INSN_STRES, "stres", "stres",
3285     { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
3286     & fmt_ldres, { 0xbd00 },
3287     (PTR) & fmt_ldres_ops[0],
3288     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3289   },
3290 /* copop $u4c,$ccc,$CRj,$CRi */
3291   {
3292     { 1, 1, 1, 1 },
3293     FR30_INSN_COPOP, "copop", "copop",
3294     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } },
3295     & fmt_copop, { 0x9fc0 },
3296     (PTR) 0,
3297     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3298   },
3299 /* copld $u4c,$ccc,$Rjc,$CRi */
3300   {
3301     { 1, 1, 1, 1 },
3302     FR30_INSN_COPLD, "copld", "copld",
3303     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } },
3304     & fmt_copld, { 0x9fd0 },
3305     (PTR) 0,
3306     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3307   },
3308 /* copst $u4c,$ccc,$CRj,$Ric */
3309   {
3310     { 1, 1, 1, 1 },
3311     FR30_INSN_COPST, "copst", "copst",
3312     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
3313     & fmt_copst, { 0x9fe0 },
3314     (PTR) 0,
3315     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3316   },
3317 /* copsv $u4c,$ccc,$CRj,$Ric */
3318   {
3319     { 1, 1, 1, 1 },
3320     FR30_INSN_COPSV, "copsv", "copsv",
3321     { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
3322     & fmt_copst, { 0x9ff0 },
3323     (PTR) 0,
3324     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3325   },
3326 /* nop */
3327   {
3328     { 1, 1, 1, 1 },
3329     FR30_INSN_NOP, "nop", "nop",
3330     { { MNEM, 0 } },
3331     & fmt_nop, { 0x9fa0 },
3332     (PTR) 0,
3333     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3334   },
3335 /* andccr $u8 */
3336   {
3337     { 1, 1, 1, 1 },
3338     FR30_INSN_ANDCCR, "andccr", "andccr",
3339     { { MNEM, ' ', OP (U8), 0 } },
3340     & fmt_andccr, { 0x8300 },
3341     (PTR) & fmt_andccr_ops[0],
3342     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3343   },
3344 /* orccr $u8 */
3345   {
3346     { 1, 1, 1, 1 },
3347     FR30_INSN_ORCCR, "orccr", "orccr",
3348     { { MNEM, ' ', OP (U8), 0 } },
3349     & fmt_andccr, { 0x9300 },
3350     (PTR) & fmt_andccr_ops[0],
3351     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3352   },
3353 /* stilm $u8 */
3354   {
3355     { 1, 1, 1, 1 },
3356     FR30_INSN_STILM, "stilm", "stilm",
3357     { { MNEM, ' ', OP (U8), 0 } },
3358     & fmt_stilm, { 0x8700 },
3359     (PTR) & fmt_stilm_ops[0],
3360     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3361   },
3362 /* addsp $s10 */
3363   {
3364     { 1, 1, 1, 1 },
3365     FR30_INSN_ADDSP, "addsp", "addsp",
3366     { { MNEM, ' ', OP (S10), 0 } },
3367     & fmt_addsp, { 0xa300 },
3368     (PTR) & fmt_addsp_ops[0],
3369     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3370   },
3371 /* extsb $Ri */
3372   {
3373     { 1, 1, 1, 1 },
3374     FR30_INSN_EXTSB, "extsb", "extsb",
3375     { { MNEM, ' ', OP (RI), 0 } },
3376     & fmt_extsb, { 0x9780 },
3377     (PTR) & fmt_extsb_ops[0],
3378     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3379   },
3380 /* extub $Ri */
3381   {
3382     { 1, 1, 1, 1 },
3383     FR30_INSN_EXTUB, "extub", "extub",
3384     { { MNEM, ' ', OP (RI), 0 } },
3385     & fmt_extub, { 0x9790 },
3386     (PTR) & fmt_extub_ops[0],
3387     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3388   },
3389 /* extsh $Ri */
3390   {
3391     { 1, 1, 1, 1 },
3392     FR30_INSN_EXTSH, "extsh", "extsh",
3393     { { MNEM, ' ', OP (RI), 0 } },
3394     & fmt_extsh, { 0x97a0 },
3395     (PTR) & fmt_extsh_ops[0],
3396     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3397   },
3398 /* extuh $Ri */
3399   {
3400     { 1, 1, 1, 1 },
3401     FR30_INSN_EXTUH, "extuh", "extuh",
3402     { { MNEM, ' ', OP (RI), 0 } },
3403     & fmt_extuh, { 0x97b0 },
3404     (PTR) & fmt_extuh_ops[0],
3405     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3406   },
3407 /* ldm0 ($reglist_low_ld) */
3408   {
3409     { 1, 1, 1, 1 },
3410     FR30_INSN_LDM0, "ldm0", "ldm0",
3411     { { MNEM, ' ', '(', OP (REGLIST_LOW_LD), ')', 0 } },
3412     & fmt_ldm0, { 0x8c00 },
3413     (PTR) & fmt_ldm0_ops[0],
3414     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3415   },
3416 /* ldm1 ($reglist_hi_ld) */
3417   {
3418     { 1, 1, 1, 1 },
3419     FR30_INSN_LDM1, "ldm1", "ldm1",
3420     { { MNEM, ' ', '(', OP (REGLIST_HI_LD), ')', 0 } },
3421     & fmt_ldm1, { 0x8d00 },
3422     (PTR) & fmt_ldm1_ops[0],
3423     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3424   },
3425 /* stm0 ($reglist_low_st) */
3426   {
3427     { 1, 1, 1, 1 },
3428     FR30_INSN_STM0, "stm0", "stm0",
3429     { { MNEM, ' ', '(', OP (REGLIST_LOW_ST), ')', 0 } },
3430     & fmt_stm0, { 0x8e00 },
3431     (PTR) & fmt_stm0_ops[0],
3432     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3433   },
3434 /* stm1 ($reglist_hi_st) */
3435   {
3436     { 1, 1, 1, 1 },
3437     FR30_INSN_STM1, "stm1", "stm1",
3438     { { MNEM, ' ', '(', OP (REGLIST_HI_ST), ')', 0 } },
3439     & fmt_stm1, { 0x8f00 },
3440     (PTR) & fmt_stm1_ops[0],
3441     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3442   },
3443 /* enter $u10 */
3444   {
3445     { 1, 1, 1, 1 },
3446     FR30_INSN_ENTER, "enter", "enter",
3447     { { MNEM, ' ', OP (U10), 0 } },
3448     & fmt_enter, { 0xf00 },
3449     (PTR) & fmt_enter_ops[0],
3450     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3451   },
3452 /* leave */
3453   {
3454     { 1, 1, 1, 1 },
3455     FR30_INSN_LEAVE, "leave", "leave",
3456     { { MNEM, 0 } },
3457     & fmt_leave, { 0x9f90 },
3458     (PTR) & fmt_leave_ops[0],
3459     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }
3460   },
3461 /* xchb @$Rj,$Ri */
3462   {
3463     { 1, 1, 1, 1 },
3464     FR30_INSN_XCHB, "xchb", "xchb",
3465     { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
3466     & fmt_xchb, { 0x8a00 },
3467     (PTR) & fmt_xchb_ops[0],
3468     { CGEN_INSN_NBOOL_ATTRS, 0|A(NOT_IN_DELAY_SLOT), { (1<<MACH_BASE) } }
3469   },
3470 };
3471
3472 #undef A
3473 #undef MNEM
3474 #undef OP
3475
3476 static const CGEN_INSN_TABLE insn_table =
3477 {
3478   & fr30_cgen_insn_table_entries[0],
3479   sizeof (CGEN_INSN),
3480   MAX_INSNS,
3481   NULL
3482 };
3483
3484 /* Formats for ALIAS macro-insns.  */
3485
3486 #define F(f) & fr30_cgen_ifld_table[CONCAT2 (FR30_,f)]
3487
3488 static const CGEN_IFMT fmt_ldi8m = {
3489   16, 16, 0xf000, { F (F_OP1), F (F_I8), F (F_RI), 0 }
3490 };
3491
3492 static const CGEN_IFMT fmt_ldi20m = {
3493   16, 32, 0xff00, { F (F_OP1), F (F_I20), F (F_OP2), F (F_RI), 0 }
3494 };
3495
3496 static const CGEN_IFMT fmt_ldi32m = {
3497   16, 48, 0xfff0, { F (F_OP1), F (F_I32), F (F_OP2), F (F_OP3), F (F_RI), 0 }
3498 };
3499
3500 #undef F
3501
3502 /* Each non-simple macro entry points to an array of expansion possibilities.  */
3503
3504 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
3505 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
3506 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
3507
3508 /* The macro instruction table.  */
3509
3510 static const CGEN_INSN macro_insn_table_entries[] =
3511 {
3512 /* ldi8 $i8,$Ri */
3513   {
3514     { 1, 1, 1, 1 },
3515     -1, "ldi8m", "ldi8",
3516     { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
3517     & fmt_ldi8m, { 0xc000 },
3518     (PTR) 0,
3519     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
3520   },
3521 /* ldi20 $i20,$Ri */
3522   {
3523     { 1, 1, 1, 1 },
3524     -1, "ldi20m", "ldi20",
3525     { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
3526     & fmt_ldi20m, { 0x9b00 },
3527     (PTR) 0,
3528     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
3529   },
3530 /* ldi32 $i32,$Ri */
3531   {
3532     { 1, 1, 1, 1 },
3533     -1, "ldi32m", "ldi32",
3534     { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
3535     & fmt_ldi32m, { 0x9f80 },
3536     (PTR) 0,
3537     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE) } }
3538   },
3539 };
3540
3541 #undef A
3542 #undef MNEM
3543 #undef OP
3544
3545 static const CGEN_INSN_TABLE macro_insn_table =
3546 {
3547   & macro_insn_table_entries[0],
3548   sizeof (CGEN_INSN),
3549   (sizeof (macro_insn_table_entries) /
3550    sizeof (macro_insn_table_entries[0])),
3551   NULL
3552 };
3553
3554 static void
3555 init_tables ()
3556 {
3557 }
3558
3559 /* Return non-zero if INSN is to be added to the hash table.
3560    Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
3561
3562 static int
3563 asm_hash_insn_p (insn)
3564      const CGEN_INSN * insn;
3565 {
3566   return CGEN_ASM_HASH_P (insn);
3567 }
3568
3569 static int
3570 dis_hash_insn_p (insn)
3571      const CGEN_INSN * insn;
3572 {
3573   /* If building the hash table and the NO-DIS attribute is present,
3574      ignore.  */
3575   if (CGEN_INSN_ATTR (insn, CGEN_INSN_NO_DIS))
3576     return 0;
3577   return CGEN_DIS_HASH_P (insn);
3578 }
3579
3580 /* The result is the hash value of the insn.
3581    Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
3582
3583 static unsigned int
3584 asm_hash_insn (mnem)
3585      const char * mnem;
3586 {
3587   return CGEN_ASM_HASH (mnem);
3588 }
3589
3590 /* BUF is a pointer to the insn's bytes in target order.
3591    VALUE is an integer of the first CGEN_BASE_INSN_BITSIZE bits,
3592    host order.  */
3593
3594 static unsigned int
3595 dis_hash_insn (buf, value)
3596      const char * buf;
3597      CGEN_INSN_INT value;
3598 {
3599   return CGEN_DIS_HASH (buf, value);
3600 }
3601
3602 /* Initialize an opcode table and return a descriptor.
3603    It's much like opening a file, and must be the first function called.  */
3604
3605 CGEN_OPCODE_DESC
3606 fr30_cgen_opcode_open (mach, endian)
3607      int mach;
3608      enum cgen_endian endian;
3609 {
3610   CGEN_OPCODE_TABLE * table = (CGEN_OPCODE_TABLE *) xmalloc (sizeof (CGEN_OPCODE_TABLE));
3611   static int init_p;
3612
3613   if (! init_p)
3614     {
3615       init_tables ();
3616       init_p = 1;
3617     }
3618
3619   memset (table, 0, sizeof (*table));
3620
3621   CGEN_OPCODE_MACH (table) = mach;
3622   CGEN_OPCODE_ENDIAN (table) = endian;
3623   /* FIXME: for the sparc case we can determine insn-endianness statically.
3624      The worry here is where both data and insn endian can be independently
3625      chosen, in which case this function will need another argument.
3626      Actually, will want to allow for more arguments in the future anyway.  */
3627   CGEN_OPCODE_INSN_ENDIAN (table) = endian;
3628
3629   CGEN_OPCODE_HW_LIST (table) = & fr30_cgen_hw_entries[0];
3630
3631   CGEN_OPCODE_IFLD_TABLE (table) = & fr30_cgen_ifld_table[0];
3632
3633   CGEN_OPCODE_OPERAND_TABLE (table) = & fr30_cgen_operand_table[0];
3634
3635   * CGEN_OPCODE_INSN_TABLE (table) = insn_table;
3636
3637   * CGEN_OPCODE_MACRO_INSN_TABLE (table) = macro_insn_table;
3638
3639   CGEN_OPCODE_ASM_HASH_P (table) = asm_hash_insn_p;
3640   CGEN_OPCODE_ASM_HASH (table) = asm_hash_insn;
3641   CGEN_OPCODE_ASM_HASH_SIZE (table) = CGEN_ASM_HASH_SIZE;
3642
3643   CGEN_OPCODE_DIS_HASH_P (table) = dis_hash_insn_p;
3644   CGEN_OPCODE_DIS_HASH (table) = dis_hash_insn;
3645   CGEN_OPCODE_DIS_HASH_SIZE (table) = CGEN_DIS_HASH_SIZE;
3646
3647   return (CGEN_OPCODE_DESC) table;
3648 }
3649
3650 /* Close an opcode table.  */
3651
3652 void
3653 fr30_cgen_opcode_close (desc)
3654      CGEN_OPCODE_DESC desc;
3655 {
3656   free (desc);
3657 }
3658
3659 /* Getting values from cgen_fields is handled by a collection of functions.
3660    They are distinguished by the type of the VALUE argument they return.
3661    TODO: floating point, inlining support, remove cases where result type
3662    not appropriate.  */
3663
3664 int
3665 fr30_cgen_get_int_operand (opindex, fields)
3666      int opindex;
3667      const CGEN_FIELDS * fields;
3668 {
3669   int value;
3670
3671   switch (opindex)
3672     {
3673     case FR30_OPERAND_RI :
3674       value = fields->f_Ri;
3675       break;
3676     case FR30_OPERAND_RJ :
3677       value = fields->f_Rj;
3678       break;
3679     case FR30_OPERAND_RIC :
3680       value = fields->f_Ric;
3681       break;
3682     case FR30_OPERAND_RJC :
3683       value = fields->f_Rjc;
3684       break;
3685     case FR30_OPERAND_CRI :
3686       value = fields->f_CRi;
3687       break;
3688     case FR30_OPERAND_CRJ :
3689       value = fields->f_CRj;
3690       break;
3691     case FR30_OPERAND_RS1 :
3692       value = fields->f_Rs1;
3693       break;
3694     case FR30_OPERAND_RS2 :
3695       value = fields->f_Rs2;
3696       break;
3697     case FR30_OPERAND_R13 :
3698       value = fields->f_nil;
3699       break;
3700     case FR30_OPERAND_R14 :
3701       value = fields->f_nil;
3702       break;
3703     case FR30_OPERAND_R15 :
3704       value = fields->f_nil;
3705       break;
3706     case FR30_OPERAND_PS :
3707       value = fields->f_nil;
3708       break;
3709     case FR30_OPERAND_U4 :
3710       value = fields->f_u4;
3711       break;
3712     case FR30_OPERAND_U4C :
3713       value = fields->f_u4c;
3714       break;
3715     case FR30_OPERAND_U8 :
3716       value = fields->f_u8;
3717       break;
3718     case FR30_OPERAND_I8 :
3719       value = fields->f_i8;
3720       break;
3721     case FR30_OPERAND_UDISP6 :
3722       value = fields->f_udisp6;
3723       break;
3724     case FR30_OPERAND_DISP8 :
3725       value = fields->f_disp8;
3726       break;
3727     case FR30_OPERAND_DISP9 :
3728       value = fields->f_disp9;
3729       break;
3730     case FR30_OPERAND_DISP10 :
3731       value = fields->f_disp10;
3732       break;
3733     case FR30_OPERAND_S10 :
3734       value = fields->f_s10;
3735       break;
3736     case FR30_OPERAND_U10 :
3737       value = fields->f_u10;
3738       break;
3739     case FR30_OPERAND_I32 :
3740       value = fields->f_i32;
3741       break;
3742     case FR30_OPERAND_M4 :
3743       value = fields->f_m4;
3744       break;
3745     case FR30_OPERAND_I20 :
3746       value = fields->f_i20;
3747       break;
3748     case FR30_OPERAND_DIR8 :
3749       value = fields->f_dir8;
3750       break;
3751     case FR30_OPERAND_DIR9 :
3752       value = fields->f_dir9;
3753       break;
3754     case FR30_OPERAND_DIR10 :
3755       value = fields->f_dir10;
3756       break;
3757     case FR30_OPERAND_LABEL9 :
3758       value = fields->f_rel9;
3759       break;
3760     case FR30_OPERAND_LABEL12 :
3761       value = fields->f_rel12;
3762       break;
3763     case FR30_OPERAND_REGLIST_LOW_LD :
3764       value = fields->f_reglist_low_ld;
3765       break;
3766     case FR30_OPERAND_REGLIST_HI_LD :
3767       value = fields->f_reglist_hi_ld;
3768       break;
3769     case FR30_OPERAND_REGLIST_LOW_ST :
3770       value = fields->f_reglist_low_st;
3771       break;
3772     case FR30_OPERAND_REGLIST_HI_ST :
3773       value = fields->f_reglist_hi_st;
3774       break;
3775     case FR30_OPERAND_CC :
3776       value = fields->f_cc;
3777       break;
3778     case FR30_OPERAND_CCC :
3779       value = fields->f_ccc;
3780       break;
3781
3782     default :
3783       /* xgettext:c-format */
3784       fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),
3785                        opindex);
3786       abort ();
3787   }
3788
3789   return value;
3790 }
3791
3792 bfd_vma
3793 fr30_cgen_get_vma_operand (opindex, fields)
3794      int opindex;
3795      const CGEN_FIELDS * fields;
3796 {
3797   bfd_vma value;
3798
3799   switch (opindex)
3800     {
3801     case FR30_OPERAND_RI :
3802       value = fields->f_Ri;
3803       break;
3804     case FR30_OPERAND_RJ :
3805       value = fields->f_Rj;
3806       break;
3807     case FR30_OPERAND_RIC :
3808       value = fields->f_Ric;
3809       break;
3810     case FR30_OPERAND_RJC :
3811       value = fields->f_Rjc;
3812       break;
3813     case FR30_OPERAND_CRI :
3814       value = fields->f_CRi;
3815       break;
3816     case FR30_OPERAND_CRJ :
3817       value = fields->f_CRj;
3818       break;
3819     case FR30_OPERAND_RS1 :
3820       value = fields->f_Rs1;
3821       break;
3822     case FR30_OPERAND_RS2 :
3823       value = fields->f_Rs2;
3824       break;
3825     case FR30_OPERAND_R13 :
3826       value = fields->f_nil;
3827       break;
3828     case FR30_OPERAND_R14 :
3829       value = fields->f_nil;
3830       break;
3831     case FR30_OPERAND_R15 :
3832       value = fields->f_nil;
3833       break;
3834     case FR30_OPERAND_PS :
3835       value = fields->f_nil;
3836       break;
3837     case FR30_OPERAND_U4 :
3838       value = fields->f_u4;
3839       break;
3840     case FR30_OPERAND_U4C :
3841       value = fields->f_u4c;
3842       break;
3843     case FR30_OPERAND_U8 :
3844       value = fields->f_u8;
3845       break;
3846     case FR30_OPERAND_I8 :
3847       value = fields->f_i8;
3848       break;
3849     case FR30_OPERAND_UDISP6 :
3850       value = fields->f_udisp6;
3851       break;
3852     case FR30_OPERAND_DISP8 :
3853       value = fields->f_disp8;
3854       break;
3855     case FR30_OPERAND_DISP9 :
3856       value = fields->f_disp9;
3857       break;
3858     case FR30_OPERAND_DISP10 :
3859       value = fields->f_disp10;
3860       break;
3861     case FR30_OPERAND_S10 :
3862       value = fields->f_s10;
3863       break;
3864     case FR30_OPERAND_U10 :
3865       value = fields->f_u10;
3866       break;
3867     case FR30_OPERAND_I32 :
3868       value = fields->f_i32;
3869       break;
3870     case FR30_OPERAND_M4 :
3871       value = fields->f_m4;
3872       break;
3873     case FR30_OPERAND_I20 :
3874       value = fields->f_i20;
3875       break;
3876     case FR30_OPERAND_DIR8 :
3877       value = fields->f_dir8;
3878       break;
3879     case FR30_OPERAND_DIR9 :
3880       value = fields->f_dir9;
3881       break;
3882     case FR30_OPERAND_DIR10 :
3883       value = fields->f_dir10;
3884       break;
3885     case FR30_OPERAND_LABEL9 :
3886       value = fields->f_rel9;
3887       break;
3888     case FR30_OPERAND_LABEL12 :
3889       value = fields->f_rel12;
3890       break;
3891     case FR30_OPERAND_REGLIST_LOW_LD :
3892       value = fields->f_reglist_low_ld;
3893       break;
3894     case FR30_OPERAND_REGLIST_HI_LD :
3895       value = fields->f_reglist_hi_ld;
3896       break;
3897     case FR30_OPERAND_REGLIST_LOW_ST :
3898       value = fields->f_reglist_low_st;
3899       break;
3900     case FR30_OPERAND_REGLIST_HI_ST :
3901       value = fields->f_reglist_hi_st;
3902       break;
3903     case FR30_OPERAND_CC :
3904       value = fields->f_cc;
3905       break;
3906     case FR30_OPERAND_CCC :
3907       value = fields->f_ccc;
3908       break;
3909
3910     default :
3911       /* xgettext:c-format */
3912       fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),
3913                        opindex);
3914       abort ();
3915   }
3916
3917   return value;
3918 }
3919
3920 /* Stuffing values in cgen_fields is handled by a collection of functions.
3921    They are distinguished by the type of the VALUE argument they accept.
3922    TODO: floating point, inlining support, remove cases where argument type
3923    not appropriate.  */
3924
3925 void
3926 fr30_cgen_set_int_operand (opindex, fields, value)
3927      int opindex;
3928      CGEN_FIELDS * fields;
3929      int value;
3930 {
3931   switch (opindex)
3932     {
3933     case FR30_OPERAND_RI :
3934       fields->f_Ri = value;
3935       break;
3936     case FR30_OPERAND_RJ :
3937       fields->f_Rj = value;
3938       break;
3939     case FR30_OPERAND_RIC :
3940       fields->f_Ric = value;
3941       break;
3942     case FR30_OPERAND_RJC :
3943       fields->f_Rjc = value;
3944       break;
3945     case FR30_OPERAND_CRI :
3946       fields->f_CRi = value;
3947       break;
3948     case FR30_OPERAND_CRJ :
3949       fields->f_CRj = value;
3950       break;
3951     case FR30_OPERAND_RS1 :
3952       fields->f_Rs1 = value;
3953       break;
3954     case FR30_OPERAND_RS2 :
3955       fields->f_Rs2 = value;
3956       break;
3957     case FR30_OPERAND_R13 :
3958       fields->f_nil = value;
3959       break;
3960     case FR30_OPERAND_R14 :
3961       fields->f_nil = value;
3962       break;
3963     case FR30_OPERAND_R15 :
3964       fields->f_nil = value;
3965       break;
3966     case FR30_OPERAND_PS :
3967       fields->f_nil = value;
3968       break;
3969     case FR30_OPERAND_U4 :
3970       fields->f_u4 = value;
3971       break;
3972     case FR30_OPERAND_U4C :
3973       fields->f_u4c = value;
3974       break;
3975     case FR30_OPERAND_U8 :
3976       fields->f_u8 = value;
3977       break;
3978     case FR30_OPERAND_I8 :
3979       fields->f_i8 = value;
3980       break;
3981     case FR30_OPERAND_UDISP6 :
3982       fields->f_udisp6 = value;
3983       break;
3984     case FR30_OPERAND_DISP8 :
3985       fields->f_disp8 = value;
3986       break;
3987     case FR30_OPERAND_DISP9 :
3988       fields->f_disp9 = value;
3989       break;
3990     case FR30_OPERAND_DISP10 :
3991       fields->f_disp10 = value;
3992       break;
3993     case FR30_OPERAND_S10 :
3994       fields->f_s10 = value;
3995       break;
3996     case FR30_OPERAND_U10 :
3997       fields->f_u10 = value;
3998       break;
3999     case FR30_OPERAND_I32 :
4000       fields->f_i32 = value;
4001       break;
4002     case FR30_OPERAND_M4 :
4003       fields->f_m4 = value;
4004       break;
4005     case FR30_OPERAND_I20 :
4006       fields->f_i20 = value;
4007       break;
4008     case FR30_OPERAND_DIR8 :
4009       fields->f_dir8 = value;
4010       break;
4011     case FR30_OPERAND_DIR9 :
4012       fields->f_dir9 = value;
4013       break;
4014     case FR30_OPERAND_DIR10 :
4015       fields->f_dir10 = value;
4016       break;
4017     case FR30_OPERAND_LABEL9 :
4018       fields->f_rel9 = value;
4019       break;
4020     case FR30_OPERAND_LABEL12 :
4021       fields->f_rel12 = value;
4022       break;
4023     case FR30_OPERAND_REGLIST_LOW_LD :
4024       fields->f_reglist_low_ld = value;
4025       break;
4026     case FR30_OPERAND_REGLIST_HI_LD :
4027       fields->f_reglist_hi_ld = value;
4028       break;
4029     case FR30_OPERAND_REGLIST_LOW_ST :
4030       fields->f_reglist_low_st = value;
4031       break;
4032     case FR30_OPERAND_REGLIST_HI_ST :
4033       fields->f_reglist_hi_st = value;
4034       break;
4035     case FR30_OPERAND_CC :
4036       fields->f_cc = value;
4037       break;
4038     case FR30_OPERAND_CCC :
4039       fields->f_ccc = value;
4040       break;
4041
4042     default :
4043       /* xgettext:c-format */
4044       fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),
4045                        opindex);
4046       abort ();
4047   }
4048 }
4049
4050 void
4051 fr30_cgen_set_vma_operand (opindex, fields, value)
4052      int opindex;
4053      CGEN_FIELDS * fields;
4054      bfd_vma value;
4055 {
4056   switch (opindex)
4057     {
4058     case FR30_OPERAND_RI :
4059       fields->f_Ri = value;
4060       break;
4061     case FR30_OPERAND_RJ :
4062       fields->f_Rj = value;
4063       break;
4064     case FR30_OPERAND_RIC :
4065       fields->f_Ric = value;
4066       break;
4067     case FR30_OPERAND_RJC :
4068       fields->f_Rjc = value;
4069       break;
4070     case FR30_OPERAND_CRI :
4071       fields->f_CRi = value;
4072       break;
4073     case FR30_OPERAND_CRJ :
4074       fields->f_CRj = value;
4075       break;
4076     case FR30_OPERAND_RS1 :
4077       fields->f_Rs1 = value;
4078       break;
4079     case FR30_OPERAND_RS2 :
4080       fields->f_Rs2 = value;
4081       break;
4082     case FR30_OPERAND_R13 :
4083       fields->f_nil = value;
4084       break;
4085     case FR30_OPERAND_R14 :
4086       fields->f_nil = value;
4087       break;
4088     case FR30_OPERAND_R15 :
4089       fields->f_nil = value;
4090       break;
4091     case FR30_OPERAND_PS :
4092       fields->f_nil = value;
4093       break;
4094     case FR30_OPERAND_U4 :
4095       fields->f_u4 = value;
4096       break;
4097     case FR30_OPERAND_U4C :
4098       fields->f_u4c = value;
4099       break;
4100     case FR30_OPERAND_U8 :
4101       fields->f_u8 = value;
4102       break;
4103     case FR30_OPERAND_I8 :
4104       fields->f_i8 = value;
4105       break;
4106     case FR30_OPERAND_UDISP6 :
4107       fields->f_udisp6 = value;
4108       break;
4109     case FR30_OPERAND_DISP8 :
4110       fields->f_disp8 = value;
4111       break;
4112     case FR30_OPERAND_DISP9 :
4113       fields->f_disp9 = value;
4114       break;
4115     case FR30_OPERAND_DISP10 :
4116       fields->f_disp10 = value;
4117       break;
4118     case FR30_OPERAND_S10 :
4119       fields->f_s10 = value;
4120       break;
4121     case FR30_OPERAND_U10 :
4122       fields->f_u10 = value;
4123       break;
4124     case FR30_OPERAND_I32 :
4125       fields->f_i32 = value;
4126       break;
4127     case FR30_OPERAND_M4 :
4128       fields->f_m4 = value;
4129       break;
4130     case FR30_OPERAND_I20 :
4131       fields->f_i20 = value;
4132       break;
4133     case FR30_OPERAND_DIR8 :
4134       fields->f_dir8 = value;
4135       break;
4136     case FR30_OPERAND_DIR9 :
4137       fields->f_dir9 = value;
4138       break;
4139     case FR30_OPERAND_DIR10 :
4140       fields->f_dir10 = value;
4141       break;
4142     case FR30_OPERAND_LABEL9 :
4143       fields->f_rel9 = value;
4144       break;
4145     case FR30_OPERAND_LABEL12 :
4146       fields->f_rel12 = value;
4147       break;
4148     case FR30_OPERAND_REGLIST_LOW_LD :
4149       fields->f_reglist_low_ld = value;
4150       break;
4151     case FR30_OPERAND_REGLIST_HI_LD :
4152       fields->f_reglist_hi_ld = value;
4153       break;
4154     case FR30_OPERAND_REGLIST_LOW_ST :
4155       fields->f_reglist_low_st = value;
4156       break;
4157     case FR30_OPERAND_REGLIST_HI_ST :
4158       fields->f_reglist_hi_st = value;
4159       break;
4160     case FR30_OPERAND_CC :
4161       fields->f_cc = value;
4162       break;
4163     case FR30_OPERAND_CCC :
4164       fields->f_ccc = value;
4165       break;
4166
4167     default :
4168       /* xgettext:c-format */
4169       fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),
4170                        opindex);
4171       abort ();
4172   }
4173 }
4174