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