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