* cgen-asm.in (insert_normal): Use CGEN_BOOL_ATTR.
[platform/upstream/binutils.git] / opcodes / m32r-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 m32r-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 "m32r-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 m32r_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 m32r_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] = m32r_cgen_get_int_operand (CGEN_OPERAND_INDEX (op),
171                                                   fields);
172     }
173 }
174
175 /* Cover function to m32r_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    m32r_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 m32r_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 = m32r_cgen_lookup_insn (od, insn, insn_value, length, &fields,
196                                   insn != NULL);
197   if (! insn)
198     return NULL;
199
200   m32r_cgen_get_insn_operands (od, insn, &fields, indices);
201   return insn;
202 }
203 /* Attributes.  */
204
205 static const CGEN_ATTR_ENTRY bool_attr[] =
206 {
207   { "#f", 0 },
208   { "#t", 1 },
209   { 0, 0 }
210 };
211
212 static const CGEN_ATTR_ENTRY MACH_attr[] =
213 {
214   { "base", MACH_BASE },
215   { "m32r", MACH_M32R },
216 /* start-sanitize-m32rx */
217   { "m32rx", MACH_M32RX },
218 /* end-sanitize-m32rx */
219   { "max", MACH_MAX },
220   { 0, 0 }
221 };
222
223 /* start-sanitize-m32rx */
224 static const CGEN_ATTR_ENTRY PIPE_attr[] =
225 {
226   { "NONE", PIPE_NONE },
227   { "O", PIPE_O },
228   { "S", PIPE_S },
229   { "OS", PIPE_OS },
230   { 0, 0 }
231 };
232
233 /* end-sanitize-m32rx */
234 const CGEN_ATTR_TABLE m32r_cgen_ifield_attr_table[] =
235 {
236   { "MACH", & MACH_attr[0] },
237   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
238   { "UNSIGNED", &bool_attr[0], &bool_attr[0] },
239   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
240   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
241   { "RESERVED", &bool_attr[0], &bool_attr[0] },
242   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
243   { "RELOC", &bool_attr[0], &bool_attr[0] },
244   { 0, 0, 0 }
245 };
246
247 const CGEN_ATTR_TABLE m32r_cgen_hardware_attr_table[] =
248 {
249   { "MACH", & MACH_attr[0] },
250   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
251   { "UNSIGNED", &bool_attr[0], &bool_attr[0] },
252   { "SIGNED", &bool_attr[0], &bool_attr[0] },
253   { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
254   { "FUN-ACCESS", &bool_attr[0], &bool_attr[0] },
255   { "PC", &bool_attr[0], &bool_attr[0] },
256   { "PROFILE", &bool_attr[0], &bool_attr[0] },
257   { 0, 0, 0 }
258 };
259
260 const CGEN_ATTR_TABLE m32r_cgen_operand_attr_table[] =
261 {
262   { "MACH", & MACH_attr[0] },
263   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
264   { "UNSIGNED", &bool_attr[0], &bool_attr[0] },
265   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
266   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
267   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
268   { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
269   { "RELAX", &bool_attr[0], &bool_attr[0] },
270   { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
271   { "RELOC", &bool_attr[0], &bool_attr[0] },
272   { "HASH-PREFIX", &bool_attr[0], &bool_attr[0] },
273   { 0, 0, 0 }
274 };
275
276 const CGEN_ATTR_TABLE m32r_cgen_insn_attr_table[] =
277 {
278   { "MACH", & MACH_attr[0] },
279 /* start-sanitize-m32rx */
280   { "PIPE", & PIPE_attr[0] },
281 /* end-sanitize-m32rx */
282   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
283   { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
284   { "COND-CTI", &bool_attr[0], &bool_attr[0] },
285   { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
286   { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
287   { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
288   { "RELAX", &bool_attr[0], &bool_attr[0] },
289   { "ALIAS", &bool_attr[0], &bool_attr[0] },
290   { "NO-DIS", &bool_attr[0], &bool_attr[0] },
291   { "PBB", &bool_attr[0], &bool_attr[0] },
292   { "FILL-SLOT", &bool_attr[0], &bool_attr[0] },
293 /* start-sanitize-m32rx */
294   { "SPECIAL", &bool_attr[0], &bool_attr[0] },
295 /* end-sanitize-m32rx */
296   { 0, 0, 0 }
297 };
298
299 CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_gr_entries[] = 
300 {
301   { "fp", 13 },
302   { "lr", 14 },
303   { "sp", 15 },
304   { "r0", 0 },
305   { "r1", 1 },
306   { "r2", 2 },
307   { "r3", 3 },
308   { "r4", 4 },
309   { "r5", 5 },
310   { "r6", 6 },
311   { "r7", 7 },
312   { "r8", 8 },
313   { "r9", 9 },
314   { "r10", 10 },
315   { "r11", 11 },
316   { "r12", 12 },
317   { "r13", 13 },
318   { "r14", 14 },
319   { "r15", 15 }
320 };
321
322 CGEN_KEYWORD m32r_cgen_opval_h_gr = 
323 {
324   & m32r_cgen_opval_h_gr_entries[0],
325   19
326 };
327
328 CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_cr_entries[] = 
329 {
330   { "psw", 0 },
331   { "cbr", 1 },
332   { "spi", 2 },
333   { "spu", 3 },
334   { "bpc", 6 },
335   { "bbpsw", 8 },
336   { "bbpc", 14 },
337   { "cr0", 0 },
338   { "cr1", 1 },
339   { "cr2", 2 },
340   { "cr3", 3 },
341   { "cr4", 4 },
342   { "cr5", 5 },
343   { "cr6", 6 },
344   { "cr7", 7 },
345   { "cr8", 8 },
346   { "cr9", 9 },
347   { "cr10", 10 },
348   { "cr11", 11 },
349   { "cr12", 12 },
350   { "cr13", 13 },
351   { "cr14", 14 },
352   { "cr15", 15 }
353 };
354
355 CGEN_KEYWORD m32r_cgen_opval_h_cr = 
356 {
357   & m32r_cgen_opval_h_cr_entries[0],
358   23
359 };
360
361 /* start-sanitize-m32rx */
362 CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_accums_entries[] = 
363 {
364   { "a0", 0 },
365   { "a1", 1 }
366 };
367
368 CGEN_KEYWORD m32r_cgen_opval_h_accums = 
369 {
370   & m32r_cgen_opval_h_accums_entries[0],
371   2
372 };
373
374 /* end-sanitize-m32rx */
375
376 /* The hardware table.  */
377
378 #define HW_ENT(n) m32r_cgen_hw_entries[n]
379 static const CGEN_HW_ENTRY m32r_cgen_hw_entries[] =
380 {
381   { HW_H_PC, & HW_ENT (HW_H_PC + 1), "h-pc", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_PROFILE)|(1<<CGEN_HW_PC), { (1<<MACH_BASE) } } },
382   { HW_H_MEMORY, & HW_ENT (HW_H_MEMORY + 1), "h-memory", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
383   { HW_H_SINT, & HW_ENT (HW_H_SINT + 1), "h-sint", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
384   { HW_H_UINT, & HW_ENT (HW_H_UINT + 1), "h-uint", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
385   { HW_H_ADDR, & HW_ENT (HW_H_ADDR + 1), "h-addr", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
386   { HW_H_IADDR, & HW_ENT (HW_H_IADDR + 1), "h-iaddr", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
387   { HW_H_HI16, & HW_ENT (HW_H_HI16 + 1), "h-hi16", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
388   { HW_H_SLO16, & HW_ENT (HW_H_SLO16 + 1), "h-slo16", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
389   { HW_H_ULO16, & HW_ENT (HW_H_ULO16 + 1), "h-ulo16", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
390   { HW_H_GR, & HW_ENT (HW_H_GR + 1), "h-gr", CGEN_ASM_KEYWORD, (PTR) & m32r_cgen_opval_h_gr, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_CACHE_ADDR)|(1<<CGEN_HW_PROFILE), { (1<<MACH_BASE) } } },
391   { HW_H_CR, & HW_ENT (HW_H_CR + 1), "h-cr", CGEN_ASM_KEYWORD, (PTR) & m32r_cgen_opval_h_cr, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
392   { HW_H_ACCUM, & HW_ENT (HW_H_ACCUM + 1), "h-accum", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
393 /* start-sanitize-m32rx */
394   { HW_H_ACCUMS, & HW_ENT (HW_H_ACCUMS + 1), "h-accums", CGEN_ASM_KEYWORD, (PTR) & m32r_cgen_opval_h_accums, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_M32RX) } } },
395 /* end-sanitize-m32rx */
396   { HW_H_COND, & HW_ENT (HW_H_COND + 1), "h-cond", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
397   { HW_H_PSW, & HW_ENT (HW_H_PSW + 1), "h-psw", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0|(1<<CGEN_HW_FUN_ACCESS), { (1<<MACH_BASE) } } },
398   { HW_H_BPSW, & HW_ENT (HW_H_BPSW + 1), "h-bpsw", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
399   { HW_H_BBPSW, & HW_ENT (HW_H_BBPSW + 1), "h-bbpsw", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
400   { HW_H_LOCK, & HW_ENT (HW_H_LOCK + 1), "h-lock", CGEN_ASM_KEYWORD, (PTR) 0, { CGEN_HW_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } } },
401   { 0 }
402 };
403
404 /* The instruction field table.  */
405
406 static const CGEN_IFLD m32r_cgen_ifld_table[] =
407 {
408   { M32R_F_NIL, "f-nil", 0, 0, 0, 0, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
409   { M32R_F_OP1, "f-op1", 0, 32, 0, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
410   { M32R_F_OP2, "f-op2", 0, 32, 8, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
411   { M32R_F_COND, "f-cond", 0, 32, 4, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
412   { M32R_F_R1, "f-r1", 0, 32, 4, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
413   { M32R_F_R2, "f-r2", 0, 32, 12, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
414   { M32R_F_SIMM8, "f-simm8", 0, 32, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
415   { M32R_F_SIMM16, "f-simm16", 0, 32, 16, 16, { CGEN_IFLD_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
416   { M32R_F_SHIFT_OP2, "f-shift-op2", 0, 32, 8, 3, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
417   { M32R_F_UIMM4, "f-uimm4", 0, 32, 12, 4, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
418   { M32R_F_UIMM5, "f-uimm5", 0, 32, 11, 5, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
419   { M32R_F_UIMM16, "f-uimm16", 0, 32, 16, 16, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
420   { M32R_F_UIMM24, "f-uimm24", 0, 32, 8, 24, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_RELOC)|(1<<CGEN_IFLD_ABS_ADDR)|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
421   { M32R_F_HI16, "f-hi16", 0, 32, 16, 16, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_SIGN_OPT)|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
422   { M32R_F_DISP8, "f-disp8", 0, 32, 8, 8, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_RELOC)|(1<<CGEN_IFLD_PCREL_ADDR), { (1<<MACH_BASE) } }  },
423   { M32R_F_DISP16, "f-disp16", 0, 32, 16, 16, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_RELOC)|(1<<CGEN_IFLD_PCREL_ADDR), { (1<<MACH_BASE) } }  },
424   { M32R_F_DISP24, "f-disp24", 0, 32, 8, 24, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_RELOC)|(1<<CGEN_IFLD_PCREL_ADDR), { (1<<MACH_BASE) } }  },
425 /* start-sanitize-m32rx */
426   { M32R_F_OP23, "f-op23", 0, 32, 9, 3, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
427 /* end-sanitize-m32rx */
428 /* start-sanitize-m32rx */
429   { M32R_F_OP3, "f-op3", 0, 32, 14, 2, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
430 /* end-sanitize-m32rx */
431 /* start-sanitize-m32rx */
432   { M32R_F_ACC, "f-acc", 0, 32, 8, 1, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
433 /* end-sanitize-m32rx */
434 /* start-sanitize-m32rx */
435   { M32R_F_ACCS, "f-accs", 0, 32, 12, 2, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
436 /* end-sanitize-m32rx */
437 /* start-sanitize-m32rx */
438   { M32R_F_ACCD, "f-accd", 0, 32, 4, 2, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
439 /* end-sanitize-m32rx */
440 /* start-sanitize-m32rx */
441   { M32R_F_BITS67, "f-bits67", 0, 32, 6, 2, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
442 /* end-sanitize-m32rx */
443 /* start-sanitize-m32rx */
444   { M32R_F_BIT14, "f-bit14", 0, 32, 14, 1, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
445 /* end-sanitize-m32rx */
446 /* start-sanitize-m32rx */
447   { M32R_F_IMM1, "f-imm1", 0, 32, 15, 1, { CGEN_IFLD_NBOOL_ATTRS, 0|(1<<CGEN_IFLD_UNSIGNED), { (1<<MACH_BASE) } }  },
448 /* end-sanitize-m32rx */
449   { 0 }
450 };
451
452 /* The operand table.  */
453
454 #define OPERAND(op) CONCAT2 (M32R_OPERAND_,op)
455 #define OP_ENT(op) m32r_cgen_operand_table[OPERAND (op)]
456
457 const CGEN_OPERAND m32r_cgen_operand_table[MAX_OPERANDS] =
458 {
459 /* pc: program counter */
460   { "pc", & HW_ENT (HW_H_PC), 0, 0,
461     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
462 /* sr: source register */
463   { "sr", & HW_ENT (HW_H_GR), 12, 4,
464     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
465 /* dr: destination register */
466   { "dr", & HW_ENT (HW_H_GR), 4, 4,
467     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
468 /* src1: source register 1 */
469   { "src1", & HW_ENT (HW_H_GR), 4, 4,
470     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
471 /* src2: source register 2 */
472   { "src2", & HW_ENT (HW_H_GR), 12, 4,
473     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
474 /* scr: source control register */
475   { "scr", & HW_ENT (HW_H_CR), 12, 4,
476     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
477 /* dcr: destination control register */
478   { "dcr", & HW_ENT (HW_H_CR), 4, 4,
479     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
480 /* simm8: 8 bit signed immediate */
481   { "simm8", & HW_ENT (HW_H_SINT), 8, 8,
482     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX), { (1<<MACH_BASE) } }  },
483 /* simm16: 16 bit signed immediate */
484   { "simm16", & HW_ENT (HW_H_SINT), 16, 16,
485     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX), { (1<<MACH_BASE) } }  },
486 /* uimm4: 4 bit trap number */
487   { "uimm4", & HW_ENT (HW_H_UINT), 12, 4,
488     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
489 /* uimm5: 5 bit shift count */
490   { "uimm5", & HW_ENT (HW_H_UINT), 11, 5,
491     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
492 /* uimm16: 16 bit unsigned immediate */
493   { "uimm16", & HW_ENT (HW_H_UINT), 16, 16,
494     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
495 /* start-sanitize-m32rx */
496 /* imm1: 1 bit immediate */
497   { "imm1", & HW_ENT (HW_H_UINT), 15, 1,
498     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
499 /* end-sanitize-m32rx */
500 /* start-sanitize-m32rx */
501 /* accd: accumulator destination register */
502   { "accd", & HW_ENT (HW_H_ACCUMS), 4, 2,
503     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
504 /* end-sanitize-m32rx */
505 /* start-sanitize-m32rx */
506 /* accs: accumulator source register */
507   { "accs", & HW_ENT (HW_H_ACCUMS), 12, 2,
508     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
509 /* end-sanitize-m32rx */
510 /* start-sanitize-m32rx */
511 /* acc: accumulator reg (d) */
512   { "acc", & HW_ENT (HW_H_ACCUMS), 8, 1,
513     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
514 /* end-sanitize-m32rx */
515 /* hash: # prefix */
516   { "hash", & HW_ENT (HW_H_SINT), 0, 0,
517     { CGEN_OPERAND_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
518 /* hi16: high 16 bit immediate, sign optional */
519   { "hi16", & HW_ENT (HW_H_HI16), 16, 16,
520     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SIGN_OPT)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
521 /* slo16: 16 bit signed immediate, for low() */
522   { "slo16", & HW_ENT (HW_H_SLO16), 16, 16,
523     { CGEN_OPERAND_NBOOL_ATTRS, 0, { (1<<MACH_BASE) } }  },
524 /* ulo16: 16 bit unsigned immediate, for low() */
525   { "ulo16", & HW_ENT (HW_H_ULO16), 16, 16,
526     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
527 /* uimm24: 24 bit address */
528   { "uimm24", & HW_ENT (HW_H_ADDR), 8, 24,
529     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_RELOC)|(1<<CGEN_OPERAND_ABS_ADDR)|(1<<CGEN_OPERAND_UNSIGNED), { (1<<MACH_BASE) } }  },
530 /* disp8: 8 bit displacement */
531   { "disp8", & HW_ENT (HW_H_IADDR), 8, 8,
532     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_RELOC)|(1<<CGEN_OPERAND_PCREL_ADDR), { (1<<MACH_BASE) } }  },
533 /* disp16: 16 bit displacement */
534   { "disp16", & HW_ENT (HW_H_IADDR), 16, 16,
535     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_RELOC)|(1<<CGEN_OPERAND_PCREL_ADDR), { (1<<MACH_BASE) } }  },
536 /* disp24: 24 bit displacement */
537   { "disp24", & HW_ENT (HW_H_IADDR), 8, 24,
538     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_RELOC)|(1<<CGEN_OPERAND_PCREL_ADDR), { (1<<MACH_BASE) } }  },
539 /* condbit: condition bit */
540   { "condbit", & HW_ENT (HW_H_COND), 0, 0,
541     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
542 /* accum: accumulator */
543   { "accum", & HW_ENT (HW_H_ACCUM), 0, 0,
544     { CGEN_OPERAND_NBOOL_ATTRS, 0|(1<<CGEN_OPERAND_SEM_ONLY), { (1<<MACH_BASE) } }  },
545 };
546
547 /* Operand references.  */
548
549 #define INPUT CGEN_OPERAND_INSTANCE_INPUT
550 #define OUTPUT CGEN_OPERAND_INSTANCE_OUTPUT
551 #define COND_REF CGEN_OPERAND_INSTANCE_COND_REF
552
553 static const CGEN_OPERAND_INSTANCE fmt_add_ops[] = {
554   { INPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
555   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
556   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
557   { 0 }
558 };
559
560 static const CGEN_OPERAND_INSTANCE fmt_add3_ops[] = {
561   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
562   { INPUT, "slo16", & HW_ENT (HW_H_SLO16), CGEN_MODE_HI, & OP_ENT (SLO16), 0, 0 },
563   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
564   { 0 }
565 };
566
567 static const CGEN_OPERAND_INSTANCE fmt_and3_ops[] = {
568   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
569   { INPUT, "uimm16", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (UIMM16), 0, 0 },
570   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
571   { 0 }
572 };
573
574 static const CGEN_OPERAND_INSTANCE fmt_or3_ops[] = {
575   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
576   { INPUT, "ulo16", & HW_ENT (HW_H_ULO16), CGEN_MODE_UHI, & OP_ENT (ULO16), 0, 0 },
577   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
578   { 0 }
579 };
580
581 static const CGEN_OPERAND_INSTANCE fmt_addi_ops[] = {
582   { INPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
583   { INPUT, "simm8", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (SIMM8), 0, 0 },
584   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
585   { 0 }
586 };
587
588 static const CGEN_OPERAND_INSTANCE fmt_addv_ops[] = {
589   { INPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
590   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
591   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
592   { OUTPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
593   { 0 }
594 };
595
596 static const CGEN_OPERAND_INSTANCE fmt_addv3_ops[] = {
597   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
598   { INPUT, "simm16", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (SIMM16), 0, 0 },
599   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
600   { OUTPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
601   { 0 }
602 };
603
604 static const CGEN_OPERAND_INSTANCE fmt_addx_ops[] = {
605   { INPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
606   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
607   { INPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
608   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
609   { OUTPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
610   { 0 }
611 };
612
613 static const CGEN_OPERAND_INSTANCE fmt_bc8_ops[] = {
614   { INPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
615   { INPUT, "disp8", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP8), 0, COND_REF },
616   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
617   { 0 }
618 };
619
620 static const CGEN_OPERAND_INSTANCE fmt_bc24_ops[] = {
621   { INPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
622   { INPUT, "disp24", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP24), 0, COND_REF },
623   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
624   { 0 }
625 };
626
627 static const CGEN_OPERAND_INSTANCE fmt_beq_ops[] = {
628   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
629   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
630   { INPUT, "disp16", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP16), 0, COND_REF },
631   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
632   { 0 }
633 };
634
635 static const CGEN_OPERAND_INSTANCE fmt_beqz_ops[] = {
636   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
637   { INPUT, "disp16", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP16), 0, COND_REF },
638   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
639   { 0 }
640 };
641
642 static const CGEN_OPERAND_INSTANCE fmt_bl8_ops[] = {
643   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
644   { INPUT, "disp8", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP8), 0, 0 },
645   { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
646   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
647   { 0 }
648 };
649
650 static const CGEN_OPERAND_INSTANCE fmt_bl24_ops[] = {
651   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
652   { INPUT, "disp24", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP24), 0, 0 },
653   { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
654   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
655   { 0 }
656 };
657
658 /* start-sanitize-m32rx */
659 static const CGEN_OPERAND_INSTANCE fmt_bcl8_ops[] = {
660   { INPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
661   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
662   { INPUT, "disp8", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP8), 0, COND_REF },
663   { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, COND_REF },
664   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
665   { 0 }
666 };
667
668 /* end-sanitize-m32rx */
669 /* start-sanitize-m32rx */
670 static const CGEN_OPERAND_INSTANCE fmt_bcl24_ops[] = {
671   { INPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
672   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
673   { INPUT, "disp24", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP24), 0, COND_REF },
674   { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, COND_REF },
675   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
676   { 0 }
677 };
678
679 /* end-sanitize-m32rx */
680 static const CGEN_OPERAND_INSTANCE fmt_bra8_ops[] = {
681   { INPUT, "disp8", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP8), 0, 0 },
682   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
683   { 0 }
684 };
685
686 static const CGEN_OPERAND_INSTANCE fmt_bra24_ops[] = {
687   { INPUT, "disp24", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (DISP24), 0, 0 },
688   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
689   { 0 }
690 };
691
692 static const CGEN_OPERAND_INSTANCE fmt_cmp_ops[] = {
693   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
694   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
695   { OUTPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
696   { 0 }
697 };
698
699 static const CGEN_OPERAND_INSTANCE fmt_cmpi_ops[] = {
700   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
701   { INPUT, "simm16", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (SIMM16), 0, 0 },
702   { OUTPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
703   { 0 }
704 };
705
706 /* start-sanitize-m32rx */
707 static const CGEN_OPERAND_INSTANCE fmt_cmpz_ops[] = {
708   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
709   { OUTPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
710   { 0 }
711 };
712
713 /* end-sanitize-m32rx */
714 static const CGEN_OPERAND_INSTANCE fmt_div_ops[] = {
715   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
716   { INPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, COND_REF },
717   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, COND_REF },
718   { 0 }
719 };
720
721 /* start-sanitize-m32rx */
722 static const CGEN_OPERAND_INSTANCE fmt_jc_ops[] = {
723   { INPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
724   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, COND_REF },
725   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
726   { 0 }
727 };
728
729 /* end-sanitize-m32rx */
730 static const CGEN_OPERAND_INSTANCE fmt_jl_ops[] = {
731   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
732   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
733   { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
734   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
735   { 0 }
736 };
737
738 static const CGEN_OPERAND_INSTANCE fmt_jmp_ops[] = {
739   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
740   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
741   { 0 }
742 };
743
744 static const CGEN_OPERAND_INSTANCE fmt_ld_ops[] = {
745   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SR), 0, 0 },
746   { INPUT, "h_memory_sr", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
747   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
748   { 0 }
749 };
750
751 static const CGEN_OPERAND_INSTANCE fmt_ld_d_ops[] = {
752   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
753   { INPUT, "slo16", & HW_ENT (HW_H_SLO16), CGEN_MODE_HI, & OP_ENT (SLO16), 0, 0 },
754   { INPUT, "h_memory_add__VM_sr_slo16", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
755   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
756   { 0 }
757 };
758
759 static const CGEN_OPERAND_INSTANCE fmt_ldb_ops[] = {
760   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SR), 0, 0 },
761   { INPUT, "h_memory_sr", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
762   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
763   { 0 }
764 };
765
766 static const CGEN_OPERAND_INSTANCE fmt_ldb_d_ops[] = {
767   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
768   { INPUT, "slo16", & HW_ENT (HW_H_SLO16), CGEN_MODE_HI, & OP_ENT (SLO16), 0, 0 },
769   { INPUT, "h_memory_add__VM_sr_slo16", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
770   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
771   { 0 }
772 };
773
774 static const CGEN_OPERAND_INSTANCE fmt_ldh_ops[] = {
775   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SR), 0, 0 },
776   { INPUT, "h_memory_sr", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
777   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
778   { 0 }
779 };
780
781 static const CGEN_OPERAND_INSTANCE fmt_ldh_d_ops[] = {
782   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
783   { INPUT, "slo16", & HW_ENT (HW_H_SLO16), CGEN_MODE_HI, & OP_ENT (SLO16), 0, 0 },
784   { INPUT, "h_memory_add__VM_sr_slo16", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
785   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
786   { 0 }
787 };
788
789 static const CGEN_OPERAND_INSTANCE fmt_ld_plus_ops[] = {
790   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SR), 0, 0 },
791   { INPUT, "h_memory_sr", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
792   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
793   { OUTPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
794   { 0 }
795 };
796
797 static const CGEN_OPERAND_INSTANCE fmt_ld24_ops[] = {
798   { INPUT, "uimm24", & HW_ENT (HW_H_ADDR), CGEN_MODE_USI, & OP_ENT (UIMM24), 0, 0 },
799   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
800   { 0 }
801 };
802
803 static const CGEN_OPERAND_INSTANCE fmt_ldi8_ops[] = {
804   { INPUT, "simm8", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (SIMM8), 0, 0 },
805   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
806   { 0 }
807 };
808
809 static const CGEN_OPERAND_INSTANCE fmt_ldi16_ops[] = {
810   { INPUT, "slo16", & HW_ENT (HW_H_SLO16), CGEN_MODE_HI, & OP_ENT (SLO16), 0, 0 },
811   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
812   { 0 }
813 };
814
815 static const CGEN_OPERAND_INSTANCE fmt_lock_ops[] = {
816   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SR), 0, 0 },
817   { INPUT, "h_memory_sr", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
818   { OUTPUT, "h_lock_0", & HW_ENT (HW_H_LOCK), CGEN_MODE_BI, 0, 0, 0 },
819   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
820   { 0 }
821 };
822
823 static const CGEN_OPERAND_INSTANCE fmt_machi_ops[] = {
824   { INPUT, "accum", & HW_ENT (HW_H_ACCUM), CGEN_MODE_DI, 0, 0, 0 },
825   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
826   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
827   { OUTPUT, "accum", & HW_ENT (HW_H_ACCUM), CGEN_MODE_DI, 0, 0, 0 },
828   { 0 }
829 };
830
831 /* start-sanitize-m32rx */
832 static const CGEN_OPERAND_INSTANCE fmt_machi_a_ops[] = {
833   { INPUT, "acc", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, & OP_ENT (ACC), 0, 0 },
834   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
835   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
836   { OUTPUT, "acc", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, & OP_ENT (ACC), 0, 0 },
837   { 0 }
838 };
839
840 /* end-sanitize-m32rx */
841 static const CGEN_OPERAND_INSTANCE fmt_mulhi_ops[] = {
842   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
843   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
844   { OUTPUT, "accum", & HW_ENT (HW_H_ACCUM), CGEN_MODE_DI, 0, 0, 0 },
845   { 0 }
846 };
847
848 /* start-sanitize-m32rx */
849 static const CGEN_OPERAND_INSTANCE fmt_mulhi_a_ops[] = {
850   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
851   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
852   { OUTPUT, "acc", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, & OP_ENT (ACC), 0, 0 },
853   { 0 }
854 };
855
856 /* end-sanitize-m32rx */
857 static const CGEN_OPERAND_INSTANCE fmt_mv_ops[] = {
858   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
859   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
860   { 0 }
861 };
862
863 static const CGEN_OPERAND_INSTANCE fmt_mvfachi_ops[] = {
864   { INPUT, "accum", & HW_ENT (HW_H_ACCUM), CGEN_MODE_DI, 0, 0, 0 },
865   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
866   { 0 }
867 };
868
869 /* start-sanitize-m32rx */
870 static const CGEN_OPERAND_INSTANCE fmt_mvfachi_a_ops[] = {
871   { INPUT, "accs", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, & OP_ENT (ACCS), 0, 0 },
872   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
873   { 0 }
874 };
875
876 /* end-sanitize-m32rx */
877 static const CGEN_OPERAND_INSTANCE fmt_mvfc_ops[] = {
878   { INPUT, "scr", & HW_ENT (HW_H_CR), CGEN_MODE_USI, & OP_ENT (SCR), 0, 0 },
879   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
880   { 0 }
881 };
882
883 static const CGEN_OPERAND_INSTANCE fmt_mvtachi_ops[] = {
884   { INPUT, "accum", & HW_ENT (HW_H_ACCUM), CGEN_MODE_DI, 0, 0, 0 },
885   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
886   { OUTPUT, "accum", & HW_ENT (HW_H_ACCUM), CGEN_MODE_DI, 0, 0, 0 },
887   { 0 }
888 };
889
890 /* start-sanitize-m32rx */
891 static const CGEN_OPERAND_INSTANCE fmt_mvtachi_a_ops[] = {
892   { INPUT, "accs", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, & OP_ENT (ACCS), 0, 0 },
893   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
894   { OUTPUT, "accs", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, & OP_ENT (ACCS), 0, 0 },
895   { 0 }
896 };
897
898 /* end-sanitize-m32rx */
899 static const CGEN_OPERAND_INSTANCE fmt_mvtc_ops[] = {
900   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
901   { OUTPUT, "dcr", & HW_ENT (HW_H_CR), CGEN_MODE_USI, & OP_ENT (DCR), 0, 0 },
902   { 0 }
903 };
904
905 static const CGEN_OPERAND_INSTANCE fmt_rac_ops[] = {
906   { INPUT, "accum", & HW_ENT (HW_H_ACCUM), CGEN_MODE_DI, 0, 0, 0 },
907   { OUTPUT, "accum", & HW_ENT (HW_H_ACCUM), CGEN_MODE_DI, 0, 0, 0 },
908   { 0 }
909 };
910
911 /* start-sanitize-m32rx */
912 static const CGEN_OPERAND_INSTANCE fmt_rac_dsi_ops[] = {
913   { INPUT, "accs", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, & OP_ENT (ACCS), 0, 0 },
914   { INPUT, "imm1", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (IMM1), 0, 0 },
915   { OUTPUT, "accd", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, & OP_ENT (ACCD), 0, 0 },
916   { 0 }
917 };
918
919 /* end-sanitize-m32rx */
920 static const CGEN_OPERAND_INSTANCE fmt_rte_ops[] = {
921   { INPUT, "h_cr_6", & HW_ENT (HW_H_CR), CGEN_MODE_USI, 0, 6, 0 },
922   { INPUT, "h_cr_14", & HW_ENT (HW_H_CR), CGEN_MODE_USI, 0, 14, 0 },
923   { INPUT, "h_bpsw_0", & HW_ENT (HW_H_BPSW), CGEN_MODE_UQI, 0, 0, 0 },
924   { INPUT, "h_bbpsw_0", & HW_ENT (HW_H_BBPSW), CGEN_MODE_UQI, 0, 0, 0 },
925   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
926   { OUTPUT, "h_cr_6", & HW_ENT (HW_H_CR), CGEN_MODE_USI, 0, 6, 0 },
927   { OUTPUT, "h_psw_0", & HW_ENT (HW_H_PSW), CGEN_MODE_UQI, 0, 0, 0 },
928   { OUTPUT, "h_bpsw_0", & HW_ENT (HW_H_BPSW), CGEN_MODE_UQI, 0, 0, 0 },
929   { 0 }
930 };
931
932 static const CGEN_OPERAND_INSTANCE fmt_seth_ops[] = {
933   { INPUT, "hi16", & HW_ENT (HW_H_HI16), CGEN_MODE_SI, & OP_ENT (HI16), 0, 0 },
934   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
935   { 0 }
936 };
937
938 static const CGEN_OPERAND_INSTANCE fmt_sll3_ops[] = {
939   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
940   { INPUT, "simm16", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (SIMM16), 0, 0 },
941   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
942   { 0 }
943 };
944
945 static const CGEN_OPERAND_INSTANCE fmt_slli_ops[] = {
946   { INPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
947   { INPUT, "uimm5", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (UIMM5), 0, 0 },
948   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
949   { 0 }
950 };
951
952 static const CGEN_OPERAND_INSTANCE fmt_st_ops[] = {
953   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SRC2), 0, 0 },
954   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
955   { OUTPUT, "h_memory_src2", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
956   { 0 }
957 };
958
959 static const CGEN_OPERAND_INSTANCE fmt_st_d_ops[] = {
960   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
961   { INPUT, "slo16", & HW_ENT (HW_H_SLO16), CGEN_MODE_HI, & OP_ENT (SLO16), 0, 0 },
962   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
963   { OUTPUT, "h_memory_add__VM_src2_slo16", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
964   { 0 }
965 };
966
967 static const CGEN_OPERAND_INSTANCE fmt_stb_ops[] = {
968   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SRC2), 0, 0 },
969   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_QI, & OP_ENT (SRC1), 0, 0 },
970   { OUTPUT, "h_memory_src2", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
971   { 0 }
972 };
973
974 static const CGEN_OPERAND_INSTANCE fmt_stb_d_ops[] = {
975   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
976   { INPUT, "slo16", & HW_ENT (HW_H_SLO16), CGEN_MODE_HI, & OP_ENT (SLO16), 0, 0 },
977   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_QI, & OP_ENT (SRC1), 0, 0 },
978   { OUTPUT, "h_memory_add__VM_src2_slo16", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
979   { 0 }
980 };
981
982 static const CGEN_OPERAND_INSTANCE fmt_sth_ops[] = {
983   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SRC2), 0, 0 },
984   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_HI, & OP_ENT (SRC1), 0, 0 },
985   { OUTPUT, "h_memory_src2", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
986   { 0 }
987 };
988
989 static const CGEN_OPERAND_INSTANCE fmt_sth_d_ops[] = {
990   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
991   { INPUT, "slo16", & HW_ENT (HW_H_SLO16), CGEN_MODE_HI, & OP_ENT (SLO16), 0, 0 },
992   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_HI, & OP_ENT (SRC1), 0, 0 },
993   { OUTPUT, "h_memory_add__VM_src2_slo16", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
994   { 0 }
995 };
996
997 static const CGEN_OPERAND_INSTANCE fmt_st_plus_ops[] = {
998   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
999   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
1000   { OUTPUT, "h_memory_new_src2", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1001   { OUTPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
1002   { 0 }
1003 };
1004
1005 static const CGEN_OPERAND_INSTANCE fmt_trap_ops[] = {
1006   { INPUT, "h_cr_6", & HW_ENT (HW_H_CR), CGEN_MODE_USI, 0, 6, 0 },
1007   { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1008   { INPUT, "h_bpsw_0", & HW_ENT (HW_H_BPSW), CGEN_MODE_UQI, 0, 0, 0 },
1009   { INPUT, "h_psw_0", & HW_ENT (HW_H_PSW), CGEN_MODE_UQI, 0, 0, 0 },
1010   { INPUT, "uimm4", & HW_ENT (HW_H_UINT), CGEN_MODE_SI, & OP_ENT (UIMM4), 0, 0 },
1011   { OUTPUT, "h_cr_14", & HW_ENT (HW_H_CR), CGEN_MODE_USI, 0, 14, 0 },
1012   { OUTPUT, "h_cr_6", & HW_ENT (HW_H_CR), CGEN_MODE_USI, 0, 6, 0 },
1013   { OUTPUT, "h_bbpsw_0", & HW_ENT (HW_H_BBPSW), CGEN_MODE_UQI, 0, 0, 0 },
1014   { OUTPUT, "h_bpsw_0", & HW_ENT (HW_H_BPSW), CGEN_MODE_UQI, 0, 0, 0 },
1015   { OUTPUT, "h_psw_0", & HW_ENT (HW_H_PSW), CGEN_MODE_UQI, 0, 0, 0 },
1016   { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1017   { 0 }
1018 };
1019
1020 static const CGEN_OPERAND_INSTANCE fmt_unlock_ops[] = {
1021   { INPUT, "h_lock_0", & HW_ENT (HW_H_LOCK), CGEN_MODE_BI, 0, 0, 0 },
1022   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (SRC2), 0, COND_REF },
1023   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, COND_REF },
1024   { OUTPUT, "h_memory_src2", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, COND_REF },
1025   { OUTPUT, "h_lock_0", & HW_ENT (HW_H_LOCK), CGEN_MODE_BI, 0, 0, 0 },
1026   { 0 }
1027 };
1028
1029 /* start-sanitize-m32rx */
1030 static const CGEN_OPERAND_INSTANCE fmt_satb_ops[] = {
1031   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, 0 },
1032   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
1033   { 0 }
1034 };
1035
1036 /* end-sanitize-m32rx */
1037 /* start-sanitize-m32rx */
1038 static const CGEN_OPERAND_INSTANCE fmt_sat_ops[] = {
1039   { INPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
1040   { INPUT, "sr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SR), 0, COND_REF },
1041   { OUTPUT, "dr", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (DR), 0, 0 },
1042   { 0 }
1043 };
1044
1045 /* end-sanitize-m32rx */
1046 /* start-sanitize-m32rx */
1047 static const CGEN_OPERAND_INSTANCE fmt_sadd_ops[] = {
1048   { INPUT, "h_accums_1", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, 0, 1, 0 },
1049   { INPUT, "h_accums_0", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, 0, 0, 0 },
1050   { OUTPUT, "h_accums_0", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, 0, 0, 0 },
1051   { 0 }
1052 };
1053
1054 /* end-sanitize-m32rx */
1055 /* start-sanitize-m32rx */
1056 static const CGEN_OPERAND_INSTANCE fmt_macwu1_ops[] = {
1057   { INPUT, "h_accums_1", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, 0, 1, 0 },
1058   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
1059   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
1060   { OUTPUT, "h_accums_1", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, 0, 1, 0 },
1061   { 0 }
1062 };
1063
1064 /* end-sanitize-m32rx */
1065 /* start-sanitize-m32rx */
1066 static const CGEN_OPERAND_INSTANCE fmt_mulwu1_ops[] = {
1067   { INPUT, "src1", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC1), 0, 0 },
1068   { INPUT, "src2", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (SRC2), 0, 0 },
1069   { OUTPUT, "h_accums_1", & HW_ENT (HW_H_ACCUMS), CGEN_MODE_DI, 0, 1, 0 },
1070   { 0 }
1071 };
1072
1073 /* end-sanitize-m32rx */
1074 /* start-sanitize-m32rx */
1075 static const CGEN_OPERAND_INSTANCE fmt_sc_ops[] = {
1076   { INPUT, "condbit", & HW_ENT (HW_H_COND), CGEN_MODE_BI, 0, 0, 0 },
1077   { 0 }
1078 };
1079
1080 /* end-sanitize-m32rx */
1081 #undef INPUT
1082 #undef OUTPUT
1083 #undef COND_REF
1084
1085 /* Instruction formats.  */
1086
1087 #define F(f) & m32r_cgen_ifld_table[CONCAT2 (M32R_,f)]
1088
1089 static const CGEN_IFMT fmt_empty = {
1090   0, 0, 0x0, { 0 }
1091 };
1092
1093 static const CGEN_IFMT fmt_add = {
1094   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1095 };
1096
1097 static const CGEN_IFMT fmt_add3 = {
1098   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1099 };
1100
1101 static const CGEN_IFMT fmt_and3 = {
1102   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_UIMM16), 0 }
1103 };
1104
1105 static const CGEN_IFMT fmt_or3 = {
1106   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_UIMM16), 0 }
1107 };
1108
1109 static const CGEN_IFMT fmt_addi = {
1110   16, 16, 0xf000, { F (F_OP1), F (F_R1), F (F_SIMM8), 0 }
1111 };
1112
1113 static const CGEN_IFMT fmt_addv = {
1114   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1115 };
1116
1117 static const CGEN_IFMT fmt_addv3 = {
1118   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1119 };
1120
1121 static const CGEN_IFMT fmt_addx = {
1122   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1123 };
1124
1125 static const CGEN_IFMT fmt_bc8 = {
1126   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
1127 };
1128
1129 static const CGEN_IFMT fmt_bc24 = {
1130   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
1131 };
1132
1133 static const CGEN_IFMT fmt_beq = {
1134   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_DISP16), 0 }
1135 };
1136
1137 static const CGEN_IFMT fmt_beqz = {
1138   32, 32, 0xfff00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_DISP16), 0 }
1139 };
1140
1141 static const CGEN_IFMT fmt_bl8 = {
1142   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
1143 };
1144
1145 static const CGEN_IFMT fmt_bl24 = {
1146   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
1147 };
1148
1149 /* start-sanitize-m32rx */
1150 static const CGEN_IFMT fmt_bcl8 = {
1151   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
1152 };
1153
1154 /* end-sanitize-m32rx */
1155 /* start-sanitize-m32rx */
1156 static const CGEN_IFMT fmt_bcl24 = {
1157   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
1158 };
1159
1160 /* end-sanitize-m32rx */
1161 static const CGEN_IFMT fmt_bra8 = {
1162   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
1163 };
1164
1165 static const CGEN_IFMT fmt_bra24 = {
1166   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
1167 };
1168
1169 static const CGEN_IFMT fmt_cmp = {
1170   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1171 };
1172
1173 static const CGEN_IFMT fmt_cmpi = {
1174   32, 32, 0xfff00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1175 };
1176
1177 /* start-sanitize-m32rx */
1178 static const CGEN_IFMT fmt_cmpz = {
1179   16, 16, 0xfff0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1180 };
1181
1182 /* end-sanitize-m32rx */
1183 static const CGEN_IFMT fmt_div = {
1184   32, 32, 0xf0f0ffff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1185 };
1186
1187 /* start-sanitize-m32rx */
1188 static const CGEN_IFMT fmt_jc = {
1189   16, 16, 0xfff0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1190 };
1191
1192 /* end-sanitize-m32rx */
1193 static const CGEN_IFMT fmt_jl = {
1194   16, 16, 0xfff0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1195 };
1196
1197 static const CGEN_IFMT fmt_jmp = {
1198   16, 16, 0xfff0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1199 };
1200
1201 static const CGEN_IFMT fmt_ld = {
1202   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1203 };
1204
1205 static const CGEN_IFMT fmt_ld_d = {
1206   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1207 };
1208
1209 static const CGEN_IFMT fmt_ldb = {
1210   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1211 };
1212
1213 static const CGEN_IFMT fmt_ldb_d = {
1214   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1215 };
1216
1217 static const CGEN_IFMT fmt_ldh = {
1218   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1219 };
1220
1221 static const CGEN_IFMT fmt_ldh_d = {
1222   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1223 };
1224
1225 static const CGEN_IFMT fmt_ld_plus = {
1226   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1227 };
1228
1229 static const CGEN_IFMT fmt_ld24 = {
1230   32, 32, 0xf0000000, { F (F_OP1), F (F_R1), F (F_UIMM24), 0 }
1231 };
1232
1233 static const CGEN_IFMT fmt_ldi8 = {
1234   16, 16, 0xf000, { F (F_OP1), F (F_R1), F (F_SIMM8), 0 }
1235 };
1236
1237 static const CGEN_IFMT fmt_ldi16 = {
1238   32, 32, 0xf0ff0000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1239 };
1240
1241 static const CGEN_IFMT fmt_lock = {
1242   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1243 };
1244
1245 static const CGEN_IFMT fmt_machi = {
1246   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1247 };
1248
1249 /* start-sanitize-m32rx */
1250 static const CGEN_IFMT fmt_machi_a = {
1251   16, 16, 0xf070, { F (F_OP1), F (F_R1), F (F_ACC), F (F_OP23), F (F_R2), 0 }
1252 };
1253
1254 /* end-sanitize-m32rx */
1255 static const CGEN_IFMT fmt_mulhi = {
1256   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1257 };
1258
1259 /* start-sanitize-m32rx */
1260 static const CGEN_IFMT fmt_mulhi_a = {
1261   16, 16, 0xf070, { F (F_OP1), F (F_R1), F (F_ACC), F (F_OP23), F (F_R2), 0 }
1262 };
1263
1264 /* end-sanitize-m32rx */
1265 static const CGEN_IFMT fmt_mv = {
1266   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1267 };
1268
1269 static const CGEN_IFMT fmt_mvfachi = {
1270   16, 16, 0xf0ff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1271 };
1272
1273 /* start-sanitize-m32rx */
1274 static const CGEN_IFMT fmt_mvfachi_a = {
1275   16, 16, 0xf0f3, { F (F_OP1), F (F_R1), F (F_OP2), F (F_ACCS), F (F_OP3), 0 }
1276 };
1277
1278 /* end-sanitize-m32rx */
1279 static const CGEN_IFMT fmt_mvfc = {
1280   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1281 };
1282
1283 static const CGEN_IFMT fmt_mvtachi = {
1284   16, 16, 0xf0ff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1285 };
1286
1287 /* start-sanitize-m32rx */
1288 static const CGEN_IFMT fmt_mvtachi_a = {
1289   16, 16, 0xf0f3, { F (F_OP1), F (F_R1), F (F_OP2), F (F_ACCS), F (F_OP3), 0 }
1290 };
1291
1292 /* end-sanitize-m32rx */
1293 static const CGEN_IFMT fmt_mvtc = {
1294   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1295 };
1296
1297 static const CGEN_IFMT fmt_nop = {
1298   16, 16, 0xffff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1299 };
1300
1301 static const CGEN_IFMT fmt_rac = {
1302   16, 16, 0xffff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1303 };
1304
1305 /* start-sanitize-m32rx */
1306 static const CGEN_IFMT fmt_rac_dsi = {
1307   16, 16, 0xf3f2, { F (F_OP1), F (F_ACCD), F (F_BITS67), F (F_OP2), F (F_ACCS), F (F_BIT14), F (F_IMM1), 0 }
1308 };
1309
1310 /* end-sanitize-m32rx */
1311 static const CGEN_IFMT fmt_rte = {
1312   16, 16, 0xffff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1313 };
1314
1315 static const CGEN_IFMT fmt_seth = {
1316   32, 32, 0xf0ff0000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_HI16), 0 }
1317 };
1318
1319 static const CGEN_IFMT fmt_sll3 = {
1320   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1321 };
1322
1323 static const CGEN_IFMT fmt_slli = {
1324   16, 16, 0xf0e0, { F (F_OP1), F (F_R1), F (F_SHIFT_OP2), F (F_UIMM5), 0 }
1325 };
1326
1327 static const CGEN_IFMT fmt_st = {
1328   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1329 };
1330
1331 static const CGEN_IFMT fmt_st_d = {
1332   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1333 };
1334
1335 static const CGEN_IFMT fmt_stb = {
1336   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1337 };
1338
1339 static const CGEN_IFMT fmt_stb_d = {
1340   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1341 };
1342
1343 static const CGEN_IFMT fmt_sth = {
1344   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1345 };
1346
1347 static const CGEN_IFMT fmt_sth_d = {
1348   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
1349 };
1350
1351 static const CGEN_IFMT fmt_st_plus = {
1352   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1353 };
1354
1355 static const CGEN_IFMT fmt_trap = {
1356   16, 16, 0xfff0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_UIMM4), 0 }
1357 };
1358
1359 static const CGEN_IFMT fmt_unlock = {
1360   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1361 };
1362
1363 /* start-sanitize-m32rx */
1364 static const CGEN_IFMT fmt_satb = {
1365   32, 32, 0xf0f0ffff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_UIMM16), 0 }
1366 };
1367
1368 /* end-sanitize-m32rx */
1369 /* start-sanitize-m32rx */
1370 static const CGEN_IFMT fmt_sat = {
1371   32, 32, 0xf0f0ffff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_UIMM16), 0 }
1372 };
1373
1374 /* end-sanitize-m32rx */
1375 /* start-sanitize-m32rx */
1376 static const CGEN_IFMT fmt_sadd = {
1377   16, 16, 0xffff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1378 };
1379
1380 /* end-sanitize-m32rx */
1381 /* start-sanitize-m32rx */
1382 static const CGEN_IFMT fmt_macwu1 = {
1383   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1384 };
1385
1386 /* end-sanitize-m32rx */
1387 /* start-sanitize-m32rx */
1388 static const CGEN_IFMT fmt_mulwu1 = {
1389   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1390 };
1391
1392 /* end-sanitize-m32rx */
1393 /* start-sanitize-m32rx */
1394 static const CGEN_IFMT fmt_sc = {
1395   16, 16, 0xffff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
1396 };
1397
1398 /* end-sanitize-m32rx */
1399 #undef F
1400
1401 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
1402 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1403 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1404
1405 /* The instruction table.
1406    This is currently non-static because the simulator accesses it
1407    directly.  */
1408
1409 const CGEN_INSN m32r_cgen_insn_table_entries[MAX_INSNS] =
1410 {
1411   /* Special null first entry.
1412      A `num' value of zero is thus invalid.
1413      Also, the special `invalid' insn resides here.  */
1414   { { 0 }, 0 },
1415 /* add $dr,$sr */
1416   {
1417     { 1, 1, 1, 1 },
1418     M32R_INSN_ADD, "add", "add",
1419     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1420     & fmt_add, { 0xa0 },
1421     (PTR) & fmt_add_ops[0],
1422     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1423   },
1424 /* add3 $dr,$sr,$hash$slo16 */
1425   {
1426     { 1, 1, 1, 1 },
1427     M32R_INSN_ADD3, "add3", "add3",
1428     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (SLO16), 0 } },
1429     & fmt_add3, { 0x80a00000 },
1430     (PTR) & fmt_add3_ops[0],
1431     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1432   },
1433 /* and $dr,$sr */
1434   {
1435     { 1, 1, 1, 1 },
1436     M32R_INSN_AND, "and", "and",
1437     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1438     & fmt_add, { 0xc0 },
1439     (PTR) & fmt_add_ops[0],
1440     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1441   },
1442 /* and3 $dr,$sr,$uimm16 */
1443   {
1444     { 1, 1, 1, 1 },
1445     M32R_INSN_AND3, "and3", "and3",
1446     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } },
1447     & fmt_and3, { 0x80c00000 },
1448     (PTR) & fmt_and3_ops[0],
1449     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1450   },
1451 /* or $dr,$sr */
1452   {
1453     { 1, 1, 1, 1 },
1454     M32R_INSN_OR, "or", "or",
1455     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1456     & fmt_add, { 0xe0 },
1457     (PTR) & fmt_add_ops[0],
1458     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1459   },
1460 /* or3 $dr,$sr,$hash$ulo16 */
1461   {
1462     { 1, 1, 1, 1 },
1463     M32R_INSN_OR3, "or3", "or3",
1464     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (ULO16), 0 } },
1465     & fmt_or3, { 0x80e00000 },
1466     (PTR) & fmt_or3_ops[0],
1467     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1468   },
1469 /* xor $dr,$sr */
1470   {
1471     { 1, 1, 1, 1 },
1472     M32R_INSN_XOR, "xor", "xor",
1473     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1474     & fmt_add, { 0xd0 },
1475     (PTR) & fmt_add_ops[0],
1476     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1477   },
1478 /* xor3 $dr,$sr,$uimm16 */
1479   {
1480     { 1, 1, 1, 1 },
1481     M32R_INSN_XOR3, "xor3", "xor3",
1482     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } },
1483     & fmt_and3, { 0x80d00000 },
1484     (PTR) & fmt_and3_ops[0],
1485     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1486   },
1487 /* addi $dr,$simm8 */
1488   {
1489     { 1, 1, 1, 1 },
1490     M32R_INSN_ADDI, "addi", "addi",
1491     { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
1492     & fmt_addi, { 0x4000 },
1493     (PTR) & fmt_addi_ops[0],
1494     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1495   },
1496 /* addv $dr,$sr */
1497   {
1498     { 1, 1, 1, 1 },
1499     M32R_INSN_ADDV, "addv", "addv",
1500     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1501     & fmt_addv, { 0x80 },
1502     (PTR) & fmt_addv_ops[0],
1503     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1504   },
1505 /* addv3 $dr,$sr,$simm16 */
1506   {
1507     { 1, 1, 1, 1 },
1508     M32R_INSN_ADDV3, "addv3", "addv3",
1509     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
1510     & fmt_addv3, { 0x80800000 },
1511     (PTR) & fmt_addv3_ops[0],
1512     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1513   },
1514 /* addx $dr,$sr */
1515   {
1516     { 1, 1, 1, 1 },
1517     M32R_INSN_ADDX, "addx", "addx",
1518     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1519     & fmt_addx, { 0x90 },
1520     (PTR) & fmt_addx_ops[0],
1521     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1522   },
1523 /* bc.s $disp8 */
1524   {
1525     { 1, 1, 1, 1 },
1526     M32R_INSN_BC8, "bc8", "bc.s",
1527     { { MNEM, ' ', OP (DISP8), 0 } },
1528     & fmt_bc8, { 0x7c00 },
1529     (PTR) & fmt_bc8_ops[0],
1530     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_O } }
1531   },
1532 /* bc.l $disp24 */
1533   {
1534     { 1, 1, 1, 1 },
1535     M32R_INSN_BC24, "bc24", "bc.l",
1536     { { MNEM, ' ', OP (DISP24), 0 } },
1537     & fmt_bc24, { 0xfc000000 },
1538     (PTR) & fmt_bc24_ops[0],
1539     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1540   },
1541 /* beq $src1,$src2,$disp16 */
1542   {
1543     { 1, 1, 1, 1 },
1544     M32R_INSN_BEQ, "beq", "beq",
1545     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } },
1546     & fmt_beq, { 0xb0000000 },
1547     (PTR) & fmt_beq_ops[0],
1548     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1549   },
1550 /* beqz $src2,$disp16 */
1551   {
1552     { 1, 1, 1, 1 },
1553     M32R_INSN_BEQZ, "beqz", "beqz",
1554     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
1555     & fmt_beqz, { 0xb0800000 },
1556     (PTR) & fmt_beqz_ops[0],
1557     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1558   },
1559 /* bgez $src2,$disp16 */
1560   {
1561     { 1, 1, 1, 1 },
1562     M32R_INSN_BGEZ, "bgez", "bgez",
1563     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
1564     & fmt_beqz, { 0xb0b00000 },
1565     (PTR) & fmt_beqz_ops[0],
1566     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1567   },
1568 /* bgtz $src2,$disp16 */
1569   {
1570     { 1, 1, 1, 1 },
1571     M32R_INSN_BGTZ, "bgtz", "bgtz",
1572     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
1573     & fmt_beqz, { 0xb0d00000 },
1574     (PTR) & fmt_beqz_ops[0],
1575     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1576   },
1577 /* blez $src2,$disp16 */
1578   {
1579     { 1, 1, 1, 1 },
1580     M32R_INSN_BLEZ, "blez", "blez",
1581     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
1582     & fmt_beqz, { 0xb0c00000 },
1583     (PTR) & fmt_beqz_ops[0],
1584     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1585   },
1586 /* bltz $src2,$disp16 */
1587   {
1588     { 1, 1, 1, 1 },
1589     M32R_INSN_BLTZ, "bltz", "bltz",
1590     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
1591     & fmt_beqz, { 0xb0a00000 },
1592     (PTR) & fmt_beqz_ops[0],
1593     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1594   },
1595 /* bnez $src2,$disp16 */
1596   {
1597     { 1, 1, 1, 1 },
1598     M32R_INSN_BNEZ, "bnez", "bnez",
1599     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
1600     & fmt_beqz, { 0xb0900000 },
1601     (PTR) & fmt_beqz_ops[0],
1602     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1603   },
1604 /* bl.s $disp8 */
1605   {
1606     { 1, 1, 1, 1 },
1607     M32R_INSN_BL8, "bl8", "bl.s",
1608     { { MNEM, ' ', OP (DISP8), 0 } },
1609     & fmt_bl8, { 0x7e00 },
1610     (PTR) & fmt_bl8_ops[0],
1611     { CGEN_INSN_NBOOL_ATTRS, 0|A(FILL_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE), PIPE_O } }
1612   },
1613 /* bl.l $disp24 */
1614   {
1615     { 1, 1, 1, 1 },
1616     M32R_INSN_BL24, "bl24", "bl.l",
1617     { { MNEM, ' ', OP (DISP24), 0 } },
1618     & fmt_bl24, { 0xfe000000 },
1619     (PTR) & fmt_bl24_ops[0],
1620     { CGEN_INSN_NBOOL_ATTRS, 0|A(UNCOND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1621   },
1622 /* start-sanitize-m32rx */
1623 /* bcl.s $disp8 */
1624   {
1625     { 1, 1, 1, 1 },
1626     M32R_INSN_BCL8, "bcl8", "bcl.s",
1627     { { MNEM, ' ', OP (DISP8), 0 } },
1628     & fmt_bcl8, { 0x7800 },
1629     (PTR) & fmt_bcl8_ops[0],
1630     { CGEN_INSN_NBOOL_ATTRS, 0|A(FILL_SLOT)|A(COND_CTI), { (1<<MACH_M32RX), PIPE_O } }
1631   },
1632 /* end-sanitize-m32rx */
1633 /* start-sanitize-m32rx */
1634 /* bcl.l $disp24 */
1635   {
1636     { 1, 1, 1, 1 },
1637     M32R_INSN_BCL24, "bcl24", "bcl.l",
1638     { { MNEM, ' ', OP (DISP24), 0 } },
1639     & fmt_bcl24, { 0xf8000000 },
1640     (PTR) & fmt_bcl24_ops[0],
1641     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_M32RX), PIPE_NONE } }
1642   },
1643 /* end-sanitize-m32rx */
1644 /* bnc.s $disp8 */
1645   {
1646     { 1, 1, 1, 1 },
1647     M32R_INSN_BNC8, "bnc8", "bnc.s",
1648     { { MNEM, ' ', OP (DISP8), 0 } },
1649     & fmt_bc8, { 0x7d00 },
1650     (PTR) & fmt_bc8_ops[0],
1651     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_O } }
1652   },
1653 /* bnc.l $disp24 */
1654   {
1655     { 1, 1, 1, 1 },
1656     M32R_INSN_BNC24, "bnc24", "bnc.l",
1657     { { MNEM, ' ', OP (DISP24), 0 } },
1658     & fmt_bc24, { 0xfd000000 },
1659     (PTR) & fmt_bc24_ops[0],
1660     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1661   },
1662 /* bne $src1,$src2,$disp16 */
1663   {
1664     { 1, 1, 1, 1 },
1665     M32R_INSN_BNE, "bne", "bne",
1666     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } },
1667     & fmt_beq, { 0xb0100000 },
1668     (PTR) & fmt_beq_ops[0],
1669     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1670   },
1671 /* bra.s $disp8 */
1672   {
1673     { 1, 1, 1, 1 },
1674     M32R_INSN_BRA8, "bra8", "bra.s",
1675     { { MNEM, ' ', OP (DISP8), 0 } },
1676     & fmt_bra8, { 0x7f00 },
1677     (PTR) & fmt_bra8_ops[0],
1678     { CGEN_INSN_NBOOL_ATTRS, 0|A(FILL_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE), PIPE_O } }
1679   },
1680 /* bra.l $disp24 */
1681   {
1682     { 1, 1, 1, 1 },
1683     M32R_INSN_BRA24, "bra24", "bra.l",
1684     { { MNEM, ' ', OP (DISP24), 0 } },
1685     & fmt_bra24, { 0xff000000 },
1686     (PTR) & fmt_bra24_ops[0],
1687     { CGEN_INSN_NBOOL_ATTRS, 0|A(UNCOND_CTI), { (1<<MACH_BASE), PIPE_NONE } }
1688   },
1689 /* start-sanitize-m32rx */
1690 /* bncl.s $disp8 */
1691   {
1692     { 1, 1, 1, 1 },
1693     M32R_INSN_BNCL8, "bncl8", "bncl.s",
1694     { { MNEM, ' ', OP (DISP8), 0 } },
1695     & fmt_bcl8, { 0x7900 },
1696     (PTR) & fmt_bcl8_ops[0],
1697     { CGEN_INSN_NBOOL_ATTRS, 0|A(FILL_SLOT)|A(COND_CTI), { (1<<MACH_M32RX), PIPE_O } }
1698   },
1699 /* end-sanitize-m32rx */
1700 /* start-sanitize-m32rx */
1701 /* bncl.l $disp24 */
1702   {
1703     { 1, 1, 1, 1 },
1704     M32R_INSN_BNCL24, "bncl24", "bncl.l",
1705     { { MNEM, ' ', OP (DISP24), 0 } },
1706     & fmt_bcl24, { 0xf9000000 },
1707     (PTR) & fmt_bcl24_ops[0],
1708     { CGEN_INSN_NBOOL_ATTRS, 0|A(COND_CTI), { (1<<MACH_M32RX), PIPE_NONE } }
1709   },
1710 /* end-sanitize-m32rx */
1711 /* cmp $src1,$src2 */
1712   {
1713     { 1, 1, 1, 1 },
1714     M32R_INSN_CMP, "cmp", "cmp",
1715     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
1716     & fmt_cmp, { 0x40 },
1717     (PTR) & fmt_cmp_ops[0],
1718     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1719   },
1720 /* cmpi $src2,$simm16 */
1721   {
1722     { 1, 1, 1, 1 },
1723     M32R_INSN_CMPI, "cmpi", "cmpi",
1724     { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } },
1725     & fmt_cmpi, { 0x80400000 },
1726     (PTR) & fmt_cmpi_ops[0],
1727     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1728   },
1729 /* cmpu $src1,$src2 */
1730   {
1731     { 1, 1, 1, 1 },
1732     M32R_INSN_CMPU, "cmpu", "cmpu",
1733     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
1734     & fmt_cmp, { 0x50 },
1735     (PTR) & fmt_cmp_ops[0],
1736     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1737   },
1738 /* cmpui $src2,$simm16 */
1739   {
1740     { 1, 1, 1, 1 },
1741     M32R_INSN_CMPUI, "cmpui", "cmpui",
1742     { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } },
1743     & fmt_cmpi, { 0x80500000 },
1744     (PTR) & fmt_cmpi_ops[0],
1745     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1746   },
1747 /* start-sanitize-m32rx */
1748 /* cmpeq $src1,$src2 */
1749   {
1750     { 1, 1, 1, 1 },
1751     M32R_INSN_CMPEQ, "cmpeq", "cmpeq",
1752     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
1753     & fmt_cmp, { 0x60 },
1754     (PTR) & fmt_cmp_ops[0],
1755     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_OS } }
1756   },
1757 /* end-sanitize-m32rx */
1758 /* start-sanitize-m32rx */
1759 /* cmpz $src2 */
1760   {
1761     { 1, 1, 1, 1 },
1762     M32R_INSN_CMPZ, "cmpz", "cmpz",
1763     { { MNEM, ' ', OP (SRC2), 0 } },
1764     & fmt_cmpz, { 0x70 },
1765     (PTR) & fmt_cmpz_ops[0],
1766     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_OS } }
1767   },
1768 /* end-sanitize-m32rx */
1769 /* div $dr,$sr */
1770   {
1771     { 1, 1, 1, 1 },
1772     M32R_INSN_DIV, "div", "div",
1773     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1774     & fmt_div, { 0x90000000 },
1775     (PTR) & fmt_div_ops[0],
1776     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1777   },
1778 /* divu $dr,$sr */
1779   {
1780     { 1, 1, 1, 1 },
1781     M32R_INSN_DIVU, "divu", "divu",
1782     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1783     & fmt_div, { 0x90100000 },
1784     (PTR) & fmt_div_ops[0],
1785     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1786   },
1787 /* rem $dr,$sr */
1788   {
1789     { 1, 1, 1, 1 },
1790     M32R_INSN_REM, "rem", "rem",
1791     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1792     & fmt_div, { 0x90200000 },
1793     (PTR) & fmt_div_ops[0],
1794     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1795   },
1796 /* remu $dr,$sr */
1797   {
1798     { 1, 1, 1, 1 },
1799     M32R_INSN_REMU, "remu", "remu",
1800     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1801     & fmt_div, { 0x90300000 },
1802     (PTR) & fmt_div_ops[0],
1803     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1804   },
1805 /* start-sanitize-m32rx */
1806 /* divh $dr,$sr */
1807   {
1808     { 1, 1, 1, 1 },
1809     M32R_INSN_DIVH, "divh", "divh",
1810     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
1811     & fmt_div, { 0x90000010 },
1812     (PTR) & fmt_div_ops[0],
1813     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_NONE } }
1814   },
1815 /* end-sanitize-m32rx */
1816 /* start-sanitize-m32rx */
1817 /* jc $sr */
1818   {
1819     { 1, 1, 1, 1 },
1820     M32R_INSN_JC, "jc", "jc",
1821     { { MNEM, ' ', OP (SR), 0 } },
1822     & fmt_jc, { 0x1cc0 },
1823     (PTR) & fmt_jc_ops[0],
1824     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL)|A(COND_CTI), { (1<<MACH_M32RX), PIPE_O } }
1825   },
1826 /* end-sanitize-m32rx */
1827 /* start-sanitize-m32rx */
1828 /* jnc $sr */
1829   {
1830     { 1, 1, 1, 1 },
1831     M32R_INSN_JNC, "jnc", "jnc",
1832     { { MNEM, ' ', OP (SR), 0 } },
1833     & fmt_jc, { 0x1dc0 },
1834     (PTR) & fmt_jc_ops[0],
1835     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL)|A(COND_CTI), { (1<<MACH_M32RX), PIPE_O } }
1836   },
1837 /* end-sanitize-m32rx */
1838 /* jl $sr */
1839   {
1840     { 1, 1, 1, 1 },
1841     M32R_INSN_JL, "jl", "jl",
1842     { { MNEM, ' ', OP (SR), 0 } },
1843     & fmt_jl, { 0x1ec0 },
1844     (PTR) & fmt_jl_ops[0],
1845     { CGEN_INSN_NBOOL_ATTRS, 0|A(FILL_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE), PIPE_O } }
1846   },
1847 /* jmp $sr */
1848   {
1849     { 1, 1, 1, 1 },
1850     M32R_INSN_JMP, "jmp", "jmp",
1851     { { MNEM, ' ', OP (SR), 0 } },
1852     & fmt_jmp, { 0x1fc0 },
1853     (PTR) & fmt_jmp_ops[0],
1854     { CGEN_INSN_NBOOL_ATTRS, 0|A(UNCOND_CTI), { (1<<MACH_BASE), PIPE_O } }
1855   },
1856 /* ld $dr,@$sr */
1857   {
1858     { 1, 1, 1, 1 },
1859     M32R_INSN_LD, "ld", "ld",
1860     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
1861     & fmt_ld, { 0x20c0 },
1862     (PTR) & fmt_ld_ops[0],
1863     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
1864   },
1865 /* ld $dr,@($slo16,$sr) */
1866   {
1867     { 1, 1, 1, 1 },
1868     M32R_INSN_LD_D, "ld-d", "ld",
1869     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
1870     & fmt_ld_d, { 0xa0c00000 },
1871     (PTR) & fmt_ld_d_ops[0],
1872     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1873   },
1874 /* ldb $dr,@$sr */
1875   {
1876     { 1, 1, 1, 1 },
1877     M32R_INSN_LDB, "ldb", "ldb",
1878     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
1879     & fmt_ldb, { 0x2080 },
1880     (PTR) & fmt_ldb_ops[0],
1881     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
1882   },
1883 /* ldb $dr,@($slo16,$sr) */
1884   {
1885     { 1, 1, 1, 1 },
1886     M32R_INSN_LDB_D, "ldb-d", "ldb",
1887     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
1888     & fmt_ldb_d, { 0xa0800000 },
1889     (PTR) & fmt_ldb_d_ops[0],
1890     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1891   },
1892 /* ldh $dr,@$sr */
1893   {
1894     { 1, 1, 1, 1 },
1895     M32R_INSN_LDH, "ldh", "ldh",
1896     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
1897     & fmt_ldh, { 0x20a0 },
1898     (PTR) & fmt_ldh_ops[0],
1899     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
1900   },
1901 /* ldh $dr,@($slo16,$sr) */
1902   {
1903     { 1, 1, 1, 1 },
1904     M32R_INSN_LDH_D, "ldh-d", "ldh",
1905     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
1906     & fmt_ldh_d, { 0xa0a00000 },
1907     (PTR) & fmt_ldh_d_ops[0],
1908     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1909   },
1910 /* ldub $dr,@$sr */
1911   {
1912     { 1, 1, 1, 1 },
1913     M32R_INSN_LDUB, "ldub", "ldub",
1914     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
1915     & fmt_ldb, { 0x2090 },
1916     (PTR) & fmt_ldb_ops[0],
1917     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
1918   },
1919 /* ldub $dr,@($slo16,$sr) */
1920   {
1921     { 1, 1, 1, 1 },
1922     M32R_INSN_LDUB_D, "ldub-d", "ldub",
1923     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
1924     & fmt_ldb_d, { 0xa0900000 },
1925     (PTR) & fmt_ldb_d_ops[0],
1926     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1927   },
1928 /* lduh $dr,@$sr */
1929   {
1930     { 1, 1, 1, 1 },
1931     M32R_INSN_LDUH, "lduh", "lduh",
1932     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
1933     & fmt_ldh, { 0x20b0 },
1934     (PTR) & fmt_ldh_ops[0],
1935     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
1936   },
1937 /* lduh $dr,@($slo16,$sr) */
1938   {
1939     { 1, 1, 1, 1 },
1940     M32R_INSN_LDUH_D, "lduh-d", "lduh",
1941     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
1942     & fmt_ldh_d, { 0xa0b00000 },
1943     (PTR) & fmt_ldh_d_ops[0],
1944     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1945   },
1946 /* ld $dr,@$sr+ */
1947   {
1948     { 1, 1, 1, 1 },
1949     M32R_INSN_LD_PLUS, "ld-plus", "ld",
1950     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), '+', 0 } },
1951     & fmt_ld_plus, { 0x20e0 },
1952     (PTR) & fmt_ld_plus_ops[0],
1953     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
1954   },
1955 /* ld24 $dr,$uimm24 */
1956   {
1957     { 1, 1, 1, 1 },
1958     M32R_INSN_LD24, "ld24", "ld24",
1959     { { MNEM, ' ', OP (DR), ',', OP (UIMM24), 0 } },
1960     & fmt_ld24, { 0xe0000000 },
1961     (PTR) & fmt_ld24_ops[0],
1962     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1963   },
1964 /* ldi8 $dr,$simm8 */
1965   {
1966     { 1, 1, 1, 1 },
1967     M32R_INSN_LDI8, "ldi8", "ldi8",
1968     { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
1969     & fmt_ldi8, { 0x6000 },
1970     (PTR) & fmt_ldi8_ops[0],
1971     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
1972   },
1973 /* ldi16 $dr,$hash$slo16 */
1974   {
1975     { 1, 1, 1, 1 },
1976     M32R_INSN_LDI16, "ldi16", "ldi16",
1977     { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (SLO16), 0 } },
1978     & fmt_ldi16, { 0x90f00000 },
1979     (PTR) & fmt_ldi16_ops[0],
1980     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
1981   },
1982 /* lock $dr,@$sr */
1983   {
1984     { 1, 1, 1, 1 },
1985     M32R_INSN_LOCK, "lock", "lock",
1986     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
1987     & fmt_lock, { 0x20d0 },
1988     (PTR) & fmt_lock_ops[0],
1989     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
1990   },
1991 /* machi $src1,$src2 */
1992   {
1993     { 1, 1, 1, 1 },
1994     M32R_INSN_MACHI, "machi", "machi",
1995     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
1996     & fmt_machi, { 0x3040 },
1997     (PTR) & fmt_machi_ops[0],
1998     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
1999   },
2000 /* start-sanitize-m32rx */
2001 /* machi $src1,$src2,$acc */
2002   {
2003     { 1, 1, 1, 1 },
2004     M32R_INSN_MACHI_A, "machi-a", "machi",
2005     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
2006     & fmt_machi_a, { 0x3040 },
2007     (PTR) & fmt_machi_a_ops[0],
2008     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2009   },
2010 /* end-sanitize-m32rx */
2011 /* maclo $src1,$src2 */
2012   {
2013     { 1, 1, 1, 1 },
2014     M32R_INSN_MACLO, "maclo", "maclo",
2015     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2016     & fmt_machi, { 0x3050 },
2017     (PTR) & fmt_machi_ops[0],
2018     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2019   },
2020 /* start-sanitize-m32rx */
2021 /* maclo $src1,$src2,$acc */
2022   {
2023     { 1, 1, 1, 1 },
2024     M32R_INSN_MACLO_A, "maclo-a", "maclo",
2025     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
2026     & fmt_machi_a, { 0x3050 },
2027     (PTR) & fmt_machi_a_ops[0],
2028     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2029   },
2030 /* end-sanitize-m32rx */
2031 /* macwhi $src1,$src2 */
2032   {
2033     { 1, 1, 1, 1 },
2034     M32R_INSN_MACWHI, "macwhi", "macwhi",
2035     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2036     & fmt_machi, { 0x3060 },
2037     (PTR) & fmt_machi_ops[0],
2038     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2039   },
2040 /* start-sanitize-m32rx */
2041 /* macwhi $src1,$src2,$acc */
2042   {
2043     { 1, 1, 1, 1 },
2044     M32R_INSN_MACWHI_A, "macwhi-a", "macwhi",
2045     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
2046     & fmt_machi_a, { 0x3060 },
2047     (PTR) & fmt_machi_a_ops[0],
2048     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL), { (1<<MACH_M32RX), PIPE_S } }
2049   },
2050 /* end-sanitize-m32rx */
2051 /* macwlo $src1,$src2 */
2052   {
2053     { 1, 1, 1, 1 },
2054     M32R_INSN_MACWLO, "macwlo", "macwlo",
2055     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2056     & fmt_machi, { 0x3070 },
2057     (PTR) & fmt_machi_ops[0],
2058     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2059   },
2060 /* start-sanitize-m32rx */
2061 /* macwlo $src1,$src2,$acc */
2062   {
2063     { 1, 1, 1, 1 },
2064     M32R_INSN_MACWLO_A, "macwlo-a", "macwlo",
2065     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
2066     & fmt_machi_a, { 0x3070 },
2067     (PTR) & fmt_machi_a_ops[0],
2068     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL), { (1<<MACH_M32RX), PIPE_S } }
2069   },
2070 /* end-sanitize-m32rx */
2071 /* mul $dr,$sr */
2072   {
2073     { 1, 1, 1, 1 },
2074     M32R_INSN_MUL, "mul", "mul",
2075     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2076     & fmt_add, { 0x1060 },
2077     (PTR) & fmt_add_ops[0],
2078     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_S } }
2079   },
2080 /* mulhi $src1,$src2 */
2081   {
2082     { 1, 1, 1, 1 },
2083     M32R_INSN_MULHI, "mulhi", "mulhi",
2084     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2085     & fmt_mulhi, { 0x3000 },
2086     (PTR) & fmt_mulhi_ops[0],
2087     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2088   },
2089 /* start-sanitize-m32rx */
2090 /* mulhi $src1,$src2,$acc */
2091   {
2092     { 1, 1, 1, 1 },
2093     M32R_INSN_MULHI_A, "mulhi-a", "mulhi",
2094     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
2095     & fmt_mulhi_a, { 0x3000 },
2096     (PTR) & fmt_mulhi_a_ops[0],
2097     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2098   },
2099 /* end-sanitize-m32rx */
2100 /* mullo $src1,$src2 */
2101   {
2102     { 1, 1, 1, 1 },
2103     M32R_INSN_MULLO, "mullo", "mullo",
2104     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2105     & fmt_mulhi, { 0x3010 },
2106     (PTR) & fmt_mulhi_ops[0],
2107     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2108   },
2109 /* start-sanitize-m32rx */
2110 /* mullo $src1,$src2,$acc */
2111   {
2112     { 1, 1, 1, 1 },
2113     M32R_INSN_MULLO_A, "mullo-a", "mullo",
2114     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
2115     & fmt_mulhi_a, { 0x3010 },
2116     (PTR) & fmt_mulhi_a_ops[0],
2117     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2118   },
2119 /* end-sanitize-m32rx */
2120 /* mulwhi $src1,$src2 */
2121   {
2122     { 1, 1, 1, 1 },
2123     M32R_INSN_MULWHI, "mulwhi", "mulwhi",
2124     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2125     & fmt_mulhi, { 0x3020 },
2126     (PTR) & fmt_mulhi_ops[0],
2127     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2128   },
2129 /* start-sanitize-m32rx */
2130 /* mulwhi $src1,$src2,$acc */
2131   {
2132     { 1, 1, 1, 1 },
2133     M32R_INSN_MULWHI_A, "mulwhi-a", "mulwhi",
2134     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
2135     & fmt_mulhi_a, { 0x3020 },
2136     (PTR) & fmt_mulhi_a_ops[0],
2137     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL), { (1<<MACH_M32RX), PIPE_S } }
2138   },
2139 /* end-sanitize-m32rx */
2140 /* mulwlo $src1,$src2 */
2141   {
2142     { 1, 1, 1, 1 },
2143     M32R_INSN_MULWLO, "mulwlo", "mulwlo",
2144     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2145     & fmt_mulhi, { 0x3030 },
2146     (PTR) & fmt_mulhi_ops[0],
2147     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2148   },
2149 /* start-sanitize-m32rx */
2150 /* mulwlo $src1,$src2,$acc */
2151   {
2152     { 1, 1, 1, 1 },
2153     M32R_INSN_MULWLO_A, "mulwlo-a", "mulwlo",
2154     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
2155     & fmt_mulhi_a, { 0x3030 },
2156     (PTR) & fmt_mulhi_a_ops[0],
2157     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL), { (1<<MACH_M32RX), PIPE_S } }
2158   },
2159 /* end-sanitize-m32rx */
2160 /* mv $dr,$sr */
2161   {
2162     { 1, 1, 1, 1 },
2163     M32R_INSN_MV, "mv", "mv",
2164     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2165     & fmt_mv, { 0x1080 },
2166     (PTR) & fmt_mv_ops[0],
2167     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
2168   },
2169 /* mvfachi $dr */
2170   {
2171     { 1, 1, 1, 1 },
2172     M32R_INSN_MVFACHI, "mvfachi", "mvfachi",
2173     { { MNEM, ' ', OP (DR), 0 } },
2174     & fmt_mvfachi, { 0x50f0 },
2175     (PTR) & fmt_mvfachi_ops[0],
2176     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2177   },
2178 /* start-sanitize-m32rx */
2179 /* mvfachi $dr,$accs */
2180   {
2181     { 1, 1, 1, 1 },
2182     M32R_INSN_MVFACHI_A, "mvfachi-a", "mvfachi",
2183     { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
2184     & fmt_mvfachi_a, { 0x50f0 },
2185     (PTR) & fmt_mvfachi_a_ops[0],
2186     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2187   },
2188 /* end-sanitize-m32rx */
2189 /* mvfaclo $dr */
2190   {
2191     { 1, 1, 1, 1 },
2192     M32R_INSN_MVFACLO, "mvfaclo", "mvfaclo",
2193     { { MNEM, ' ', OP (DR), 0 } },
2194     & fmt_mvfachi, { 0x50f1 },
2195     (PTR) & fmt_mvfachi_ops[0],
2196     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2197   },
2198 /* start-sanitize-m32rx */
2199 /* mvfaclo $dr,$accs */
2200   {
2201     { 1, 1, 1, 1 },
2202     M32R_INSN_MVFACLO_A, "mvfaclo-a", "mvfaclo",
2203     { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
2204     & fmt_mvfachi_a, { 0x50f1 },
2205     (PTR) & fmt_mvfachi_a_ops[0],
2206     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2207   },
2208 /* end-sanitize-m32rx */
2209 /* mvfacmi $dr */
2210   {
2211     { 1, 1, 1, 1 },
2212     M32R_INSN_MVFACMI, "mvfacmi", "mvfacmi",
2213     { { MNEM, ' ', OP (DR), 0 } },
2214     & fmt_mvfachi, { 0x50f2 },
2215     (PTR) & fmt_mvfachi_ops[0],
2216     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2217   },
2218 /* start-sanitize-m32rx */
2219 /* mvfacmi $dr,$accs */
2220   {
2221     { 1, 1, 1, 1 },
2222     M32R_INSN_MVFACMI_A, "mvfacmi-a", "mvfacmi",
2223     { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
2224     & fmt_mvfachi_a, { 0x50f2 },
2225     (PTR) & fmt_mvfachi_a_ops[0],
2226     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2227   },
2228 /* end-sanitize-m32rx */
2229 /* mvfc $dr,$scr */
2230   {
2231     { 1, 1, 1, 1 },
2232     M32R_INSN_MVFC, "mvfc", "mvfc",
2233     { { MNEM, ' ', OP (DR), ',', OP (SCR), 0 } },
2234     & fmt_mvfc, { 0x1090 },
2235     (PTR) & fmt_mvfc_ops[0],
2236     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2237   },
2238 /* mvtachi $src1 */
2239   {
2240     { 1, 1, 1, 1 },
2241     M32R_INSN_MVTACHI, "mvtachi", "mvtachi",
2242     { { MNEM, ' ', OP (SRC1), 0 } },
2243     & fmt_mvtachi, { 0x5070 },
2244     (PTR) & fmt_mvtachi_ops[0],
2245     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2246   },
2247 /* start-sanitize-m32rx */
2248 /* mvtachi $src1,$accs */
2249   {
2250     { 1, 1, 1, 1 },
2251     M32R_INSN_MVTACHI_A, "mvtachi-a", "mvtachi",
2252     { { MNEM, ' ', OP (SRC1), ',', OP (ACCS), 0 } },
2253     & fmt_mvtachi_a, { 0x5070 },
2254     (PTR) & fmt_mvtachi_a_ops[0],
2255     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2256   },
2257 /* end-sanitize-m32rx */
2258 /* mvtaclo $src1 */
2259   {
2260     { 1, 1, 1, 1 },
2261     M32R_INSN_MVTACLO, "mvtaclo", "mvtaclo",
2262     { { MNEM, ' ', OP (SRC1), 0 } },
2263     & fmt_mvtachi, { 0x5071 },
2264     (PTR) & fmt_mvtachi_ops[0],
2265     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2266   },
2267 /* start-sanitize-m32rx */
2268 /* mvtaclo $src1,$accs */
2269   {
2270     { 1, 1, 1, 1 },
2271     M32R_INSN_MVTACLO_A, "mvtaclo-a", "mvtaclo",
2272     { { MNEM, ' ', OP (SRC1), ',', OP (ACCS), 0 } },
2273     & fmt_mvtachi_a, { 0x5071 },
2274     (PTR) & fmt_mvtachi_a_ops[0],
2275     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2276   },
2277 /* end-sanitize-m32rx */
2278 /* mvtc $sr,$dcr */
2279   {
2280     { 1, 1, 1, 1 },
2281     M32R_INSN_MVTC, "mvtc", "mvtc",
2282     { { MNEM, ' ', OP (SR), ',', OP (DCR), 0 } },
2283     & fmt_mvtc, { 0x10a0 },
2284     (PTR) & fmt_mvtc_ops[0],
2285     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2286   },
2287 /* neg $dr,$sr */
2288   {
2289     { 1, 1, 1, 1 },
2290     M32R_INSN_NEG, "neg", "neg",
2291     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2292     & fmt_mv, { 0x30 },
2293     (PTR) & fmt_mv_ops[0],
2294     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
2295   },
2296 /* nop */
2297   {
2298     { 1, 1, 1, 1 },
2299     M32R_INSN_NOP, "nop", "nop",
2300     { { MNEM, 0 } },
2301     & fmt_nop, { 0x7000 },
2302     (PTR) 0,
2303     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
2304   },
2305 /* not $dr,$sr */
2306   {
2307     { 1, 1, 1, 1 },
2308     M32R_INSN_NOT, "not", "not",
2309     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2310     & fmt_mv, { 0xb0 },
2311     (PTR) & fmt_mv_ops[0],
2312     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
2313   },
2314 /* rac */
2315   {
2316     { 1, 1, 1, 1 },
2317     M32R_INSN_RAC, "rac", "rac",
2318     { { MNEM, 0 } },
2319     & fmt_rac, { 0x5090 },
2320     (PTR) & fmt_rac_ops[0],
2321     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2322   },
2323 /* start-sanitize-m32rx */
2324 /* rac $accd,$accs,$imm1 */
2325   {
2326     { 1, 1, 1, 1 },
2327     M32R_INSN_RAC_DSI, "rac-dsi", "rac",
2328     { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), ',', OP (IMM1), 0 } },
2329     & fmt_rac_dsi, { 0x5090 },
2330     (PTR) & fmt_rac_dsi_ops[0],
2331     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2332   },
2333 /* end-sanitize-m32rx */
2334 /* rach */
2335   {
2336     { 1, 1, 1, 1 },
2337     M32R_INSN_RACH, "rach", "rach",
2338     { { MNEM, 0 } },
2339     & fmt_rac, { 0x5080 },
2340     (PTR) & fmt_rac_ops[0],
2341     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32R), PIPE_S } }
2342   },
2343 /* start-sanitize-m32rx */
2344 /* rach $accd,$accs,$imm1 */
2345   {
2346     { 1, 1, 1, 1 },
2347     M32R_INSN_RACH_DSI, "rach-dsi", "rach",
2348     { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), ',', OP (IMM1), 0 } },
2349     & fmt_rac_dsi, { 0x5080 },
2350     (PTR) & fmt_rac_dsi_ops[0],
2351     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2352   },
2353 /* end-sanitize-m32rx */
2354 /* rte */
2355   {
2356     { 1, 1, 1, 1 },
2357     M32R_INSN_RTE, "rte", "rte",
2358     { { MNEM, 0 } },
2359     & fmt_rte, { 0x10d6 },
2360     (PTR) & fmt_rte_ops[0],
2361     { CGEN_INSN_NBOOL_ATTRS, 0|A(UNCOND_CTI), { (1<<MACH_BASE), PIPE_O } }
2362   },
2363 /* seth $dr,$hash$hi16 */
2364   {
2365     { 1, 1, 1, 1 },
2366     M32R_INSN_SETH, "seth", "seth",
2367     { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (HI16), 0 } },
2368     & fmt_seth, { 0xd0c00000 },
2369     (PTR) & fmt_seth_ops[0],
2370     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
2371   },
2372 /* sll $dr,$sr */
2373   {
2374     { 1, 1, 1, 1 },
2375     M32R_INSN_SLL, "sll", "sll",
2376     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2377     & fmt_add, { 0x1040 },
2378     (PTR) & fmt_add_ops[0],
2379     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2380   },
2381 /* sll3 $dr,$sr,$simm16 */
2382   {
2383     { 1, 1, 1, 1 },
2384     M32R_INSN_SLL3, "sll3", "sll3",
2385     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
2386     & fmt_sll3, { 0x90c00000 },
2387     (PTR) & fmt_sll3_ops[0],
2388     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
2389   },
2390 /* slli $dr,$uimm5 */
2391   {
2392     { 1, 1, 1, 1 },
2393     M32R_INSN_SLLI, "slli", "slli",
2394     { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
2395     & fmt_slli, { 0x5040 },
2396     (PTR) & fmt_slli_ops[0],
2397     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2398   },
2399 /* sra $dr,$sr */
2400   {
2401     { 1, 1, 1, 1 },
2402     M32R_INSN_SRA, "sra", "sra",
2403     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2404     & fmt_add, { 0x1020 },
2405     (PTR) & fmt_add_ops[0],
2406     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2407   },
2408 /* sra3 $dr,$sr,$simm16 */
2409   {
2410     { 1, 1, 1, 1 },
2411     M32R_INSN_SRA3, "sra3", "sra3",
2412     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
2413     & fmt_sll3, { 0x90a00000 },
2414     (PTR) & fmt_sll3_ops[0],
2415     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
2416   },
2417 /* srai $dr,$uimm5 */
2418   {
2419     { 1, 1, 1, 1 },
2420     M32R_INSN_SRAI, "srai", "srai",
2421     { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
2422     & fmt_slli, { 0x5020 },
2423     (PTR) & fmt_slli_ops[0],
2424     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2425   },
2426 /* srl $dr,$sr */
2427   {
2428     { 1, 1, 1, 1 },
2429     M32R_INSN_SRL, "srl", "srl",
2430     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2431     & fmt_add, { 0x1000 },
2432     (PTR) & fmt_add_ops[0],
2433     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2434   },
2435 /* srl3 $dr,$sr,$simm16 */
2436   {
2437     { 1, 1, 1, 1 },
2438     M32R_INSN_SRL3, "srl3", "srl3",
2439     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
2440     & fmt_sll3, { 0x90800000 },
2441     (PTR) & fmt_sll3_ops[0],
2442     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
2443   },
2444 /* srli $dr,$uimm5 */
2445   {
2446     { 1, 1, 1, 1 },
2447     M32R_INSN_SRLI, "srli", "srli",
2448     { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
2449     & fmt_slli, { 0x5000 },
2450     (PTR) & fmt_slli_ops[0],
2451     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2452   },
2453 /* st $src1,@$src2 */
2454   {
2455     { 1, 1, 1, 1 },
2456     M32R_INSN_ST, "st", "st",
2457     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
2458     & fmt_st, { 0x2040 },
2459     (PTR) & fmt_st_ops[0],
2460     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2461   },
2462 /* st $src1,@($slo16,$src2) */
2463   {
2464     { 1, 1, 1, 1 },
2465     M32R_INSN_ST_D, "st-d", "st",
2466     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
2467     & fmt_st_d, { 0xa0400000 },
2468     (PTR) & fmt_st_d_ops[0],
2469     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
2470   },
2471 /* stb $src1,@$src2 */
2472   {
2473     { 1, 1, 1, 1 },
2474     M32R_INSN_STB, "stb", "stb",
2475     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
2476     & fmt_stb, { 0x2000 },
2477     (PTR) & fmt_stb_ops[0],
2478     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2479   },
2480 /* stb $src1,@($slo16,$src2) */
2481   {
2482     { 1, 1, 1, 1 },
2483     M32R_INSN_STB_D, "stb-d", "stb",
2484     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
2485     & fmt_stb_d, { 0xa0000000 },
2486     (PTR) & fmt_stb_d_ops[0],
2487     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
2488   },
2489 /* sth $src1,@$src2 */
2490   {
2491     { 1, 1, 1, 1 },
2492     M32R_INSN_STH, "sth", "sth",
2493     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
2494     & fmt_sth, { 0x2020 },
2495     (PTR) & fmt_sth_ops[0],
2496     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2497   },
2498 /* sth $src1,@($slo16,$src2) */
2499   {
2500     { 1, 1, 1, 1 },
2501     M32R_INSN_STH_D, "sth-d", "sth",
2502     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
2503     & fmt_sth_d, { 0xa0200000 },
2504     (PTR) & fmt_sth_d_ops[0],
2505     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_NONE } }
2506   },
2507 /* st $src1,@+$src2 */
2508   {
2509     { 1, 1, 1, 1 },
2510     M32R_INSN_ST_PLUS, "st-plus", "st",
2511     { { MNEM, ' ', OP (SRC1), ',', '@', '+', OP (SRC2), 0 } },
2512     & fmt_st_plus, { 0x2060 },
2513     (PTR) & fmt_st_plus_ops[0],
2514     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2515   },
2516 /* st $src1,@-$src2 */
2517   {
2518     { 1, 1, 1, 1 },
2519     M32R_INSN_ST_MINUS, "st-minus", "st",
2520     { { MNEM, ' ', OP (SRC1), ',', '@', '-', OP (SRC2), 0 } },
2521     & fmt_st_plus, { 0x2070 },
2522     (PTR) & fmt_st_plus_ops[0],
2523     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2524   },
2525 /* sub $dr,$sr */
2526   {
2527     { 1, 1, 1, 1 },
2528     M32R_INSN_SUB, "sub", "sub",
2529     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2530     & fmt_add, { 0x20 },
2531     (PTR) & fmt_add_ops[0],
2532     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
2533   },
2534 /* subv $dr,$sr */
2535   {
2536     { 1, 1, 1, 1 },
2537     M32R_INSN_SUBV, "subv", "subv",
2538     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2539     & fmt_addv, { 0x0 },
2540     (PTR) & fmt_addv_ops[0],
2541     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
2542   },
2543 /* subx $dr,$sr */
2544   {
2545     { 1, 1, 1, 1 },
2546     M32R_INSN_SUBX, "subx", "subx",
2547     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2548     & fmt_addx, { 0x10 },
2549     (PTR) & fmt_addx_ops[0],
2550     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_OS } }
2551   },
2552 /* trap $uimm4 */
2553   {
2554     { 1, 1, 1, 1 },
2555     M32R_INSN_TRAP, "trap", "trap",
2556     { { MNEM, ' ', OP (UIMM4), 0 } },
2557     & fmt_trap, { 0x10f0 },
2558     (PTR) & fmt_trap_ops[0],
2559     { CGEN_INSN_NBOOL_ATTRS, 0|A(FILL_SLOT)|A(UNCOND_CTI), { (1<<MACH_BASE), PIPE_O } }
2560   },
2561 /* unlock $src1,@$src2 */
2562   {
2563     { 1, 1, 1, 1 },
2564     M32R_INSN_UNLOCK, "unlock", "unlock",
2565     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
2566     & fmt_unlock, { 0x2050 },
2567     (PTR) & fmt_unlock_ops[0],
2568     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_BASE), PIPE_O } }
2569   },
2570 /* start-sanitize-m32rx */
2571 /* satb $dr,$sr */
2572   {
2573     { 1, 1, 1, 1 },
2574     M32R_INSN_SATB, "satb", "satb",
2575     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2576     & fmt_satb, { 0x80600300 },
2577     (PTR) & fmt_satb_ops[0],
2578     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_NONE } }
2579   },
2580 /* end-sanitize-m32rx */
2581 /* start-sanitize-m32rx */
2582 /* sath $dr,$sr */
2583   {
2584     { 1, 1, 1, 1 },
2585     M32R_INSN_SATH, "sath", "sath",
2586     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2587     & fmt_satb, { 0x80600200 },
2588     (PTR) & fmt_satb_ops[0],
2589     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_NONE } }
2590   },
2591 /* end-sanitize-m32rx */
2592 /* start-sanitize-m32rx */
2593 /* sat $dr,$sr */
2594   {
2595     { 1, 1, 1, 1 },
2596     M32R_INSN_SAT, "sat", "sat",
2597     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
2598     & fmt_sat, { 0x80600000 },
2599     (PTR) & fmt_sat_ops[0],
2600     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL), { (1<<MACH_M32RX), PIPE_NONE } }
2601   },
2602 /* end-sanitize-m32rx */
2603 /* start-sanitize-m32rx */
2604 /* pcmpbz $src2 */
2605   {
2606     { 1, 1, 1, 1 },
2607     M32R_INSN_PCMPBZ, "pcmpbz", "pcmpbz",
2608     { { MNEM, ' ', OP (SRC2), 0 } },
2609     & fmt_cmpz, { 0x370 },
2610     (PTR) & fmt_cmpz_ops[0],
2611     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_OS } }
2612   },
2613 /* end-sanitize-m32rx */
2614 /* start-sanitize-m32rx */
2615 /* sadd */
2616   {
2617     { 1, 1, 1, 1 },
2618     M32R_INSN_SADD, "sadd", "sadd",
2619     { { MNEM, 0 } },
2620     & fmt_sadd, { 0x50e4 },
2621     (PTR) & fmt_sadd_ops[0],
2622     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2623   },
2624 /* end-sanitize-m32rx */
2625 /* start-sanitize-m32rx */
2626 /* macwu1 $src1,$src2 */
2627   {
2628     { 1, 1, 1, 1 },
2629     M32R_INSN_MACWU1, "macwu1", "macwu1",
2630     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2631     & fmt_macwu1, { 0x50b0 },
2632     (PTR) & fmt_macwu1_ops[0],
2633     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2634   },
2635 /* end-sanitize-m32rx */
2636 /* start-sanitize-m32rx */
2637 /* msblo $src1,$src2 */
2638   {
2639     { 1, 1, 1, 1 },
2640     M32R_INSN_MSBLO, "msblo", "msblo",
2641     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2642     & fmt_machi, { 0x50d0 },
2643     (PTR) & fmt_machi_ops[0],
2644     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2645   },
2646 /* end-sanitize-m32rx */
2647 /* start-sanitize-m32rx */
2648 /* mulwu1 $src1,$src2 */
2649   {
2650     { 1, 1, 1, 1 },
2651     M32R_INSN_MULWU1, "mulwu1", "mulwu1",
2652     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2653     & fmt_mulwu1, { 0x50a0 },
2654     (PTR) & fmt_mulwu1_ops[0],
2655     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2656   },
2657 /* end-sanitize-m32rx */
2658 /* start-sanitize-m32rx */
2659 /* maclh1 $src1,$src2 */
2660   {
2661     { 1, 1, 1, 1 },
2662     M32R_INSN_MACLH1, "maclh1", "maclh1",
2663     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
2664     & fmt_macwu1, { 0x50c0 },
2665     (PTR) & fmt_macwu1_ops[0],
2666     { CGEN_INSN_NBOOL_ATTRS, 0, { (1<<MACH_M32RX), PIPE_S } }
2667   },
2668 /* end-sanitize-m32rx */
2669 /* start-sanitize-m32rx */
2670 /* sc */
2671   {
2672     { 1, 1, 1, 1 },
2673     M32R_INSN_SC, "sc", "sc",
2674     { { MNEM, 0 } },
2675     & fmt_sc, { 0x7401 },
2676     (PTR) & fmt_sc_ops[0],
2677     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL)|A(SKIP_CTI), { (1<<MACH_M32RX), PIPE_O } }
2678   },
2679 /* end-sanitize-m32rx */
2680 /* start-sanitize-m32rx */
2681 /* snc */
2682   {
2683     { 1, 1, 1, 1 },
2684     M32R_INSN_SNC, "snc", "snc",
2685     { { MNEM, 0 } },
2686     & fmt_sc, { 0x7501 },
2687     (PTR) & fmt_sc_ops[0],
2688     { CGEN_INSN_NBOOL_ATTRS, 0|A(SPECIAL)|A(SKIP_CTI), { (1<<MACH_M32RX), PIPE_O } }
2689   },
2690 /* end-sanitize-m32rx */
2691 };
2692
2693 #undef A
2694 #undef MNEM
2695 #undef OP
2696
2697 static const CGEN_INSN_TABLE insn_table =
2698 {
2699   & m32r_cgen_insn_table_entries[0],
2700   sizeof (CGEN_INSN),
2701   MAX_INSNS,
2702   NULL
2703 };
2704
2705 /* Formats for ALIAS macro-insns.  */
2706
2707 #define F(f) & m32r_cgen_ifld_table[CONCAT2 (M32R_,f)]
2708
2709 static const CGEN_IFMT fmt_bc8r = {
2710   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
2711 };
2712
2713 static const CGEN_IFMT fmt_bc24r = {
2714   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
2715 };
2716
2717 static const CGEN_IFMT fmt_bl8r = {
2718   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
2719 };
2720
2721 static const CGEN_IFMT fmt_bl24r = {
2722   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
2723 };
2724
2725 /* start-sanitize-m32rx */
2726 static const CGEN_IFMT fmt_bcl8r = {
2727   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
2728 };
2729
2730 /* end-sanitize-m32rx */
2731 /* start-sanitize-m32rx */
2732 static const CGEN_IFMT fmt_bcl24r = {
2733   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
2734 };
2735
2736 /* end-sanitize-m32rx */
2737 static const CGEN_IFMT fmt_bnc8r = {
2738   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
2739 };
2740
2741 static const CGEN_IFMT fmt_bnc24r = {
2742   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
2743 };
2744
2745 static const CGEN_IFMT fmt_bra8r = {
2746   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
2747 };
2748
2749 static const CGEN_IFMT fmt_bra24r = {
2750   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
2751 };
2752
2753 /* start-sanitize-m32rx */
2754 static const CGEN_IFMT fmt_bncl8r = {
2755   16, 16, 0xff00, { F (F_OP1), F (F_R1), F (F_DISP8), 0 }
2756 };
2757
2758 /* end-sanitize-m32rx */
2759 /* start-sanitize-m32rx */
2760 static const CGEN_IFMT fmt_bncl24r = {
2761   32, 32, 0xff000000, { F (F_OP1), F (F_R1), F (F_DISP24), 0 }
2762 };
2763
2764 /* end-sanitize-m32rx */
2765 static const CGEN_IFMT fmt_ld_2 = {
2766   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2767 };
2768
2769 static const CGEN_IFMT fmt_ld_d2 = {
2770   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2771 };
2772
2773 static const CGEN_IFMT fmt_ldb_2 = {
2774   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2775 };
2776
2777 static const CGEN_IFMT fmt_ldb_d2 = {
2778   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2779 };
2780
2781 static const CGEN_IFMT fmt_ldh_2 = {
2782   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2783 };
2784
2785 static const CGEN_IFMT fmt_ldh_d2 = {
2786   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2787 };
2788
2789 static const CGEN_IFMT fmt_ldub_2 = {
2790   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2791 };
2792
2793 static const CGEN_IFMT fmt_ldub_d2 = {
2794   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2795 };
2796
2797 static const CGEN_IFMT fmt_lduh_2 = {
2798   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2799 };
2800
2801 static const CGEN_IFMT fmt_lduh_d2 = {
2802   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2803 };
2804
2805 static const CGEN_IFMT fmt_pop = {
2806   16, 16, 0xf0ff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2807 };
2808
2809 static const CGEN_IFMT fmt_ldi8a = {
2810   16, 16, 0xf000, { F (F_OP1), F (F_R1), F (F_SIMM8), 0 }
2811 };
2812
2813 static const CGEN_IFMT fmt_ldi16a = {
2814   32, 32, 0xf0ff0000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2815 };
2816
2817 /* start-sanitize-m32rx */
2818 static const CGEN_IFMT fmt_rac_d = {
2819   16, 16, 0xf3ff, { F (F_OP1), F (F_ACCD), F (F_BITS67), F (F_OP2), F (F_ACCS), F (F_BIT14), F (F_IMM1), 0 }
2820 };
2821
2822 /* end-sanitize-m32rx */
2823 /* start-sanitize-m32rx */
2824 static const CGEN_IFMT fmt_rac_ds = {
2825   16, 16, 0xf3f3, { F (F_OP1), F (F_ACCD), F (F_BITS67), F (F_OP2), F (F_ACCS), F (F_BIT14), F (F_IMM1), 0 }
2826 };
2827
2828 /* end-sanitize-m32rx */
2829 /* start-sanitize-m32rx */
2830 static const CGEN_IFMT fmt_rach_d = {
2831   16, 16, 0xf3ff, { F (F_OP1), F (F_ACCD), F (F_BITS67), F (F_OP2), F (F_ACCS), F (F_BIT14), F (F_IMM1), 0 }
2832 };
2833
2834 /* end-sanitize-m32rx */
2835 /* start-sanitize-m32rx */
2836 static const CGEN_IFMT fmt_rach_ds = {
2837   16, 16, 0xf3f3, { F (F_OP1), F (F_ACCD), F (F_BITS67), F (F_OP2), F (F_ACCS), F (F_BIT14), F (F_IMM1), 0 }
2838 };
2839
2840 /* end-sanitize-m32rx */
2841 static const CGEN_IFMT fmt_st_2 = {
2842   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2843 };
2844
2845 static const CGEN_IFMT fmt_st_d2 = {
2846   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2847 };
2848
2849 static const CGEN_IFMT fmt_stb_2 = {
2850   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2851 };
2852
2853 static const CGEN_IFMT fmt_stb_d2 = {
2854   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2855 };
2856
2857 static const CGEN_IFMT fmt_sth_2 = {
2858   16, 16, 0xf0f0, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2859 };
2860
2861 static const CGEN_IFMT fmt_sth_d2 = {
2862   32, 32, 0xf0f00000, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), F (F_SIMM16), 0 }
2863 };
2864
2865 static const CGEN_IFMT fmt_push = {
2866   16, 16, 0xf0ff, { F (F_OP1), F (F_R1), F (F_OP2), F (F_R2), 0 }
2867 };
2868
2869 #undef F
2870
2871 /* Each non-simple macro entry points to an array of expansion possibilities.  */
2872
2873 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
2874 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
2875 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
2876
2877 /* The macro instruction table.  */
2878
2879 static const CGEN_INSN macro_insn_table_entries[] =
2880 {
2881 /* bc $disp8 */
2882   {
2883     { 1, 1, 1, 1 },
2884     -1, "bc8r", "bc",
2885     { { MNEM, ' ', OP (DISP8), 0 } },
2886     & fmt_bc8r, { 0x7c00 },
2887     (PTR) 0,
2888     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAXABLE)|A(COND_CTI)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
2889   },
2890 /* bc $disp24 */
2891   {
2892     { 1, 1, 1, 1 },
2893     -1, "bc24r", "bc",
2894     { { MNEM, ' ', OP (DISP24), 0 } },
2895     & fmt_bc24r, { 0xfc000000 },
2896     (PTR) 0,
2897     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAX)|A(COND_CTI)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
2898   },
2899 /* bl $disp8 */
2900   {
2901     { 1, 1, 1, 1 },
2902     -1, "bl8r", "bl",
2903     { { MNEM, ' ', OP (DISP8), 0 } },
2904     & fmt_bl8r, { 0x7e00 },
2905     (PTR) 0,
2906     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAXABLE)|A(FILL_SLOT)|A(UNCOND_CTI)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
2907   },
2908 /* bl $disp24 */
2909   {
2910     { 1, 1, 1, 1 },
2911     -1, "bl24r", "bl",
2912     { { MNEM, ' ', OP (DISP24), 0 } },
2913     & fmt_bl24r, { 0xfe000000 },
2914     (PTR) 0,
2915     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAX)|A(UNCOND_CTI)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
2916   },
2917 /* start-sanitize-m32rx */
2918 /* bcl $disp8 */
2919   {
2920     { 1, 1, 1, 1 },
2921     -1, "bcl8r", "bcl",
2922     { { MNEM, ' ', OP (DISP8), 0 } },
2923     & fmt_bcl8r, { 0x7800 },
2924     (PTR) 0,
2925     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAXABLE)|A(FILL_SLOT)|A(COND_CTI)|A(ALIAS), { (1<<MACH_M32RX), PIPE_O } }
2926   },
2927 /* end-sanitize-m32rx */
2928 /* start-sanitize-m32rx */
2929 /* bcl $disp24 */
2930   {
2931     { 1, 1, 1, 1 },
2932     -1, "bcl24r", "bcl",
2933     { { MNEM, ' ', OP (DISP24), 0 } },
2934     & fmt_bcl24r, { 0xf8000000 },
2935     (PTR) 0,
2936     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAX)|A(COND_CTI)|A(ALIAS), { (1<<MACH_M32RX), PIPE_NONE } }
2937   },
2938 /* end-sanitize-m32rx */
2939 /* bnc $disp8 */
2940   {
2941     { 1, 1, 1, 1 },
2942     -1, "bnc8r", "bnc",
2943     { { MNEM, ' ', OP (DISP8), 0 } },
2944     & fmt_bnc8r, { 0x7d00 },
2945     (PTR) 0,
2946     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAXABLE)|A(COND_CTI)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
2947   },
2948 /* bnc $disp24 */
2949   {
2950     { 1, 1, 1, 1 },
2951     -1, "bnc24r", "bnc",
2952     { { MNEM, ' ', OP (DISP24), 0 } },
2953     & fmt_bnc24r, { 0xfd000000 },
2954     (PTR) 0,
2955     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAX)|A(COND_CTI)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
2956   },
2957 /* bra $disp8 */
2958   {
2959     { 1, 1, 1, 1 },
2960     -1, "bra8r", "bra",
2961     { { MNEM, ' ', OP (DISP8), 0 } },
2962     & fmt_bra8r, { 0x7f00 },
2963     (PTR) 0,
2964     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAXABLE)|A(FILL_SLOT)|A(UNCOND_CTI)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
2965   },
2966 /* bra $disp24 */
2967   {
2968     { 1, 1, 1, 1 },
2969     -1, "bra24r", "bra",
2970     { { MNEM, ' ', OP (DISP24), 0 } },
2971     & fmt_bra24r, { 0xff000000 },
2972     (PTR) 0,
2973     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAX)|A(UNCOND_CTI)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
2974   },
2975 /* start-sanitize-m32rx */
2976 /* bncl $disp8 */
2977   {
2978     { 1, 1, 1, 1 },
2979     -1, "bncl8r", "bncl",
2980     { { MNEM, ' ', OP (DISP8), 0 } },
2981     & fmt_bncl8r, { 0x7900 },
2982     (PTR) 0,
2983     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAXABLE)|A(FILL_SLOT)|A(COND_CTI)|A(ALIAS), { (1<<MACH_M32RX), PIPE_O } }
2984   },
2985 /* end-sanitize-m32rx */
2986 /* start-sanitize-m32rx */
2987 /* bncl $disp24 */
2988   {
2989     { 1, 1, 1, 1 },
2990     -1, "bncl24r", "bncl",
2991     { { MNEM, ' ', OP (DISP24), 0 } },
2992     & fmt_bncl24r, { 0xf9000000 },
2993     (PTR) 0,
2994     { CGEN_INSN_NBOOL_ATTRS, 0|A(RELAX)|A(COND_CTI)|A(ALIAS), { (1<<MACH_M32RX), PIPE_NONE } }
2995   },
2996 /* end-sanitize-m32rx */
2997 /* ld $dr,@($sr) */
2998   {
2999     { 1, 1, 1, 1 },
3000     -1, "ld-2", "ld",
3001     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
3002     & fmt_ld_2, { 0x20c0 },
3003     (PTR) 0,
3004     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
3005   },
3006 /* ld $dr,@($sr,$slo16) */
3007   {
3008     { 1, 1, 1, 1 },
3009     -1, "ld-d2", "ld",
3010     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
3011     & fmt_ld_d2, { 0xa0c00000 },
3012     (PTR) 0,
3013     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3014   },
3015 /* ldb $dr,@($sr) */
3016   {
3017     { 1, 1, 1, 1 },
3018     -1, "ldb-2", "ldb",
3019     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
3020     & fmt_ldb_2, { 0x2080 },
3021     (PTR) 0,
3022     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
3023   },
3024 /* ldb $dr,@($sr,$slo16) */
3025   {
3026     { 1, 1, 1, 1 },
3027     -1, "ldb-d2", "ldb",
3028     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
3029     & fmt_ldb_d2, { 0xa0800000 },
3030     (PTR) 0,
3031     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3032   },
3033 /* ldh $dr,@($sr) */
3034   {
3035     { 1, 1, 1, 1 },
3036     -1, "ldh-2", "ldh",
3037     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
3038     & fmt_ldh_2, { 0x20a0 },
3039     (PTR) 0,
3040     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
3041   },
3042 /* ldh $dr,@($sr,$slo16) */
3043   {
3044     { 1, 1, 1, 1 },
3045     -1, "ldh-d2", "ldh",
3046     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
3047     & fmt_ldh_d2, { 0xa0a00000 },
3048     (PTR) 0,
3049     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3050   },
3051 /* ldub $dr,@($sr) */
3052   {
3053     { 1, 1, 1, 1 },
3054     -1, "ldub-2", "ldub",
3055     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
3056     & fmt_ldub_2, { 0x2090 },
3057     (PTR) 0,
3058     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
3059   },
3060 /* ldub $dr,@($sr,$slo16) */
3061   {
3062     { 1, 1, 1, 1 },
3063     -1, "ldub-d2", "ldub",
3064     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
3065     & fmt_ldub_d2, { 0xa0900000 },
3066     (PTR) 0,
3067     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3068   },
3069 /* lduh $dr,@($sr) */
3070   {
3071     { 1, 1, 1, 1 },
3072     -1, "lduh-2", "lduh",
3073     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
3074     & fmt_lduh_2, { 0x20b0 },
3075     (PTR) 0,
3076     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
3077   },
3078 /* lduh $dr,@($sr,$slo16) */
3079   {
3080     { 1, 1, 1, 1 },
3081     -1, "lduh-d2", "lduh",
3082     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
3083     & fmt_lduh_d2, { 0xa0b00000 },
3084     (PTR) 0,
3085     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3086   },
3087 /* pop $dr */
3088   {
3089     { 1, 1, 1, 1 },
3090     -1, "pop", "pop",
3091     { { MNEM, ' ', OP (DR), 0 } },
3092     & fmt_pop, { 0x20ef },
3093     (PTR) 0,
3094     { CGEN_INSN_NBOOL_ATTRS, 0|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3095   },
3096 /* ldi $dr,$simm8 */
3097   {
3098     { 1, 1, 1, 1 },
3099     -1, "ldi8a", "ldi",
3100     { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
3101     & fmt_ldi8a, { 0x6000 },
3102     (PTR) 0,
3103     { CGEN_INSN_NBOOL_ATTRS, 0|A(ALIAS), { (1<<MACH_BASE), PIPE_OS } }
3104   },
3105 /* ldi $dr,$hash$slo16 */
3106   {
3107     { 1, 1, 1, 1 },
3108     -1, "ldi16a", "ldi",
3109     { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (SLO16), 0 } },
3110     & fmt_ldi16a, { 0x90f00000 },
3111     (PTR) 0,
3112     { CGEN_INSN_NBOOL_ATTRS, 0|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3113   },
3114 /* start-sanitize-m32rx */
3115 /* rac $accd */
3116   {
3117     { 1, 1, 1, 1 },
3118     -1, "rac-d", "rac",
3119     { { MNEM, ' ', OP (ACCD), 0 } },
3120     & fmt_rac_d, { 0x5090 },
3121     (PTR) 0,
3122     { CGEN_INSN_NBOOL_ATTRS, 0|A(ALIAS), { (1<<MACH_M32RX), PIPE_S } }
3123   },
3124 /* end-sanitize-m32rx */
3125 /* start-sanitize-m32rx */
3126 /* rac $accd,$accs */
3127   {
3128     { 1, 1, 1, 1 },
3129     -1, "rac-ds", "rac",
3130     { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), 0 } },
3131     & fmt_rac_ds, { 0x5090 },
3132     (PTR) 0,
3133     { CGEN_INSN_NBOOL_ATTRS, 0|A(ALIAS), { (1<<MACH_M32RX), PIPE_S } }
3134   },
3135 /* end-sanitize-m32rx */
3136 /* start-sanitize-m32rx */
3137 /* rach $accd */
3138   {
3139     { 1, 1, 1, 1 },
3140     -1, "rach-d", "rach",
3141     { { MNEM, ' ', OP (ACCD), 0 } },
3142     & fmt_rach_d, { 0x5080 },
3143     (PTR) 0,
3144     { CGEN_INSN_NBOOL_ATTRS, 0|A(ALIAS), { (1<<MACH_M32RX), PIPE_S } }
3145   },
3146 /* end-sanitize-m32rx */
3147 /* start-sanitize-m32rx */
3148 /* rach $accd,$accs */
3149   {
3150     { 1, 1, 1, 1 },
3151     -1, "rach-ds", "rach",
3152     { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), 0 } },
3153     & fmt_rach_ds, { 0x5080 },
3154     (PTR) 0,
3155     { CGEN_INSN_NBOOL_ATTRS, 0|A(ALIAS), { (1<<MACH_M32RX), PIPE_S } }
3156   },
3157 /* end-sanitize-m32rx */
3158 /* st $src1,@($src2) */
3159   {
3160     { 1, 1, 1, 1 },
3161     -1, "st-2", "st",
3162     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
3163     & fmt_st_2, { 0x2040 },
3164     (PTR) 0,
3165     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
3166   },
3167 /* st $src1,@($src2,$slo16) */
3168   {
3169     { 1, 1, 1, 1 },
3170     -1, "st-d2", "st",
3171     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
3172     & fmt_st_d2, { 0xa0400000 },
3173     (PTR) 0,
3174     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3175   },
3176 /* stb $src1,@($src2) */
3177   {
3178     { 1, 1, 1, 1 },
3179     -1, "stb-2", "stb",
3180     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
3181     & fmt_stb_2, { 0x2000 },
3182     (PTR) 0,
3183     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
3184   },
3185 /* stb $src1,@($src2,$slo16) */
3186   {
3187     { 1, 1, 1, 1 },
3188     -1, "stb-d2", "stb",
3189     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
3190     & fmt_stb_d2, { 0xa0000000 },
3191     (PTR) 0,
3192     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3193   },
3194 /* sth $src1,@($src2) */
3195   {
3196     { 1, 1, 1, 1 },
3197     -1, "sth-2", "sth",
3198     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
3199     & fmt_sth_2, { 0x2020 },
3200     (PTR) 0,
3201     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_O } }
3202   },
3203 /* sth $src1,@($src2,$slo16) */
3204   {
3205     { 1, 1, 1, 1 },
3206     -1, "sth-d2", "sth",
3207     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
3208     & fmt_sth_d2, { 0xa0200000 },
3209     (PTR) 0,
3210     { CGEN_INSN_NBOOL_ATTRS, 0|A(NO_DIS)|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3211   },
3212 /* push $src1 */
3213   {
3214     { 1, 1, 1, 1 },
3215     -1, "push", "push",
3216     { { MNEM, ' ', OP (SRC1), 0 } },
3217     & fmt_push, { 0x207f },
3218     (PTR) 0,
3219     { CGEN_INSN_NBOOL_ATTRS, 0|A(ALIAS), { (1<<MACH_BASE), PIPE_NONE } }
3220   },
3221 };
3222
3223 #undef A
3224 #undef MNEM
3225 #undef OP
3226
3227 static const CGEN_INSN_TABLE macro_insn_table =
3228 {
3229   & macro_insn_table_entries[0],
3230   sizeof (CGEN_INSN),
3231   (sizeof (macro_insn_table_entries) /
3232    sizeof (macro_insn_table_entries[0])),
3233   NULL
3234 };
3235
3236 static void
3237 init_tables ()
3238 {
3239 }
3240
3241 /* Return non-zero if INSN is to be added to the hash table.
3242    Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
3243
3244 static int
3245 asm_hash_insn_p (insn)
3246      const CGEN_INSN * insn;
3247 {
3248   return CGEN_ASM_HASH_P (insn);
3249 }
3250
3251 static int
3252 dis_hash_insn_p (insn)
3253      const CGEN_INSN * insn;
3254 {
3255   /* If building the hash table and the NO-DIS attribute is present,
3256      ignore.  */
3257   if (CGEN_INSN_ATTR (insn, CGEN_INSN_NO_DIS))
3258     return 0;
3259   return CGEN_DIS_HASH_P (insn);
3260 }
3261
3262 /* The result is the hash value of the insn.
3263    Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
3264
3265 static unsigned int
3266 asm_hash_insn (mnem)
3267      const char * mnem;
3268 {
3269   return CGEN_ASM_HASH (mnem);
3270 }
3271
3272 /* BUF is a pointer to the insn's bytes in target order.
3273    VALUE is an integer of the first CGEN_BASE_INSN_BITSIZE bits,
3274    host order.  */
3275
3276 static unsigned int
3277 dis_hash_insn (buf, value)
3278      const char * buf;
3279      CGEN_INSN_INT value;
3280 {
3281   return CGEN_DIS_HASH (buf, value);
3282 }
3283
3284 /* Initialize an opcode table and return a descriptor.
3285    It's much like opening a file, and must be the first function called.  */
3286
3287 CGEN_OPCODE_DESC
3288 m32r_cgen_opcode_open (mach, endian)
3289      int mach;
3290      enum cgen_endian endian;
3291 {
3292   CGEN_OPCODE_TABLE * table = (CGEN_OPCODE_TABLE *) xmalloc (sizeof (CGEN_OPCODE_TABLE));
3293   static int init_p;
3294
3295   if (! init_p)
3296     {
3297       init_tables ();
3298       init_p = 1;
3299     }
3300
3301   memset (table, 0, sizeof (*table));
3302
3303   CGEN_OPCODE_MACH (table) = mach;
3304   CGEN_OPCODE_ENDIAN (table) = endian;
3305   /* FIXME: for the sparc case we can determine insn-endianness statically.
3306      The worry here is where both data and insn endian can be independently
3307      chosen, in which case this function will need another argument.
3308      Actually, will want to allow for more arguments in the future anyway.  */
3309   CGEN_OPCODE_INSN_ENDIAN (table) = endian;
3310
3311   CGEN_OPCODE_HW_LIST (table) = & m32r_cgen_hw_entries[0];
3312
3313   CGEN_OPCODE_IFLD_TABLE (table) = & m32r_cgen_ifld_table[0];
3314
3315   CGEN_OPCODE_OPERAND_TABLE (table) = & m32r_cgen_operand_table[0];
3316
3317   * CGEN_OPCODE_INSN_TABLE (table) = insn_table;
3318
3319   * CGEN_OPCODE_MACRO_INSN_TABLE (table) = macro_insn_table;
3320
3321   CGEN_OPCODE_ASM_HASH_P (table) = asm_hash_insn_p;
3322   CGEN_OPCODE_ASM_HASH (table) = asm_hash_insn;
3323   CGEN_OPCODE_ASM_HASH_SIZE (table) = CGEN_ASM_HASH_SIZE;
3324
3325   CGEN_OPCODE_DIS_HASH_P (table) = dis_hash_insn_p;
3326   CGEN_OPCODE_DIS_HASH (table) = dis_hash_insn;
3327   CGEN_OPCODE_DIS_HASH_SIZE (table) = CGEN_DIS_HASH_SIZE;
3328
3329   return (CGEN_OPCODE_DESC) table;
3330 }
3331
3332 /* Close an opcode table.  */
3333
3334 void
3335 m32r_cgen_opcode_close (desc)
3336      CGEN_OPCODE_DESC desc;
3337 {
3338   free (desc);
3339 }
3340
3341 /* Getting values from cgen_fields is handled by a collection of functions.
3342    They are distinguished by the type of the VALUE argument they return.
3343    TODO: floating point, inlining support, remove cases where result type
3344    not appropriate.  */
3345
3346 int
3347 m32r_cgen_get_int_operand (opindex, fields)
3348      int opindex;
3349      const CGEN_FIELDS * fields;
3350 {
3351   int value;
3352
3353   switch (opindex)
3354     {
3355     case M32R_OPERAND_SR :
3356       value = fields->f_r2;
3357       break;
3358     case M32R_OPERAND_DR :
3359       value = fields->f_r1;
3360       break;
3361     case M32R_OPERAND_SRC1 :
3362       value = fields->f_r1;
3363       break;
3364     case M32R_OPERAND_SRC2 :
3365       value = fields->f_r2;
3366       break;
3367     case M32R_OPERAND_SCR :
3368       value = fields->f_r2;
3369       break;
3370     case M32R_OPERAND_DCR :
3371       value = fields->f_r1;
3372       break;
3373     case M32R_OPERAND_SIMM8 :
3374       value = fields->f_simm8;
3375       break;
3376     case M32R_OPERAND_SIMM16 :
3377       value = fields->f_simm16;
3378       break;
3379     case M32R_OPERAND_UIMM4 :
3380       value = fields->f_uimm4;
3381       break;
3382     case M32R_OPERAND_UIMM5 :
3383       value = fields->f_uimm5;
3384       break;
3385     case M32R_OPERAND_UIMM16 :
3386       value = fields->f_uimm16;
3387       break;
3388 /* start-sanitize-m32rx */
3389     case M32R_OPERAND_IMM1 :
3390       value = fields->f_imm1;
3391       break;
3392 /* end-sanitize-m32rx */
3393 /* start-sanitize-m32rx */
3394     case M32R_OPERAND_ACCD :
3395       value = fields->f_accd;
3396       break;
3397 /* end-sanitize-m32rx */
3398 /* start-sanitize-m32rx */
3399     case M32R_OPERAND_ACCS :
3400       value = fields->f_accs;
3401       break;
3402 /* end-sanitize-m32rx */
3403 /* start-sanitize-m32rx */
3404     case M32R_OPERAND_ACC :
3405       value = fields->f_acc;
3406       break;
3407 /* end-sanitize-m32rx */
3408     case M32R_OPERAND_HASH :
3409       value = fields->f_nil;
3410       break;
3411     case M32R_OPERAND_HI16 :
3412       value = fields->f_hi16;
3413       break;
3414     case M32R_OPERAND_SLO16 :
3415       value = fields->f_simm16;
3416       break;
3417     case M32R_OPERAND_ULO16 :
3418       value = fields->f_uimm16;
3419       break;
3420     case M32R_OPERAND_UIMM24 :
3421       value = fields->f_uimm24;
3422       break;
3423     case M32R_OPERAND_DISP8 :
3424       value = fields->f_disp8;
3425       break;
3426     case M32R_OPERAND_DISP16 :
3427       value = fields->f_disp16;
3428       break;
3429     case M32R_OPERAND_DISP24 :
3430       value = fields->f_disp24;
3431       break;
3432
3433     default :
3434       /* xgettext:c-format */
3435       fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),
3436                        opindex);
3437       abort ();
3438   }
3439
3440   return value;
3441 }
3442
3443 bfd_vma
3444 m32r_cgen_get_vma_operand (opindex, fields)
3445      int opindex;
3446      const CGEN_FIELDS * fields;
3447 {
3448   bfd_vma value;
3449
3450   switch (opindex)
3451     {
3452     case M32R_OPERAND_SR :
3453       value = fields->f_r2;
3454       break;
3455     case M32R_OPERAND_DR :
3456       value = fields->f_r1;
3457       break;
3458     case M32R_OPERAND_SRC1 :
3459       value = fields->f_r1;
3460       break;
3461     case M32R_OPERAND_SRC2 :
3462       value = fields->f_r2;
3463       break;
3464     case M32R_OPERAND_SCR :
3465       value = fields->f_r2;
3466       break;
3467     case M32R_OPERAND_DCR :
3468       value = fields->f_r1;
3469       break;
3470     case M32R_OPERAND_SIMM8 :
3471       value = fields->f_simm8;
3472       break;
3473     case M32R_OPERAND_SIMM16 :
3474       value = fields->f_simm16;
3475       break;
3476     case M32R_OPERAND_UIMM4 :
3477       value = fields->f_uimm4;
3478       break;
3479     case M32R_OPERAND_UIMM5 :
3480       value = fields->f_uimm5;
3481       break;
3482     case M32R_OPERAND_UIMM16 :
3483       value = fields->f_uimm16;
3484       break;
3485 /* start-sanitize-m32rx */
3486     case M32R_OPERAND_IMM1 :
3487       value = fields->f_imm1;
3488       break;
3489 /* end-sanitize-m32rx */
3490 /* start-sanitize-m32rx */
3491     case M32R_OPERAND_ACCD :
3492       value = fields->f_accd;
3493       break;
3494 /* end-sanitize-m32rx */
3495 /* start-sanitize-m32rx */
3496     case M32R_OPERAND_ACCS :
3497       value = fields->f_accs;
3498       break;
3499 /* end-sanitize-m32rx */
3500 /* start-sanitize-m32rx */
3501     case M32R_OPERAND_ACC :
3502       value = fields->f_acc;
3503       break;
3504 /* end-sanitize-m32rx */
3505     case M32R_OPERAND_HASH :
3506       value = fields->f_nil;
3507       break;
3508     case M32R_OPERAND_HI16 :
3509       value = fields->f_hi16;
3510       break;
3511     case M32R_OPERAND_SLO16 :
3512       value = fields->f_simm16;
3513       break;
3514     case M32R_OPERAND_ULO16 :
3515       value = fields->f_uimm16;
3516       break;
3517     case M32R_OPERAND_UIMM24 :
3518       value = fields->f_uimm24;
3519       break;
3520     case M32R_OPERAND_DISP8 :
3521       value = fields->f_disp8;
3522       break;
3523     case M32R_OPERAND_DISP16 :
3524       value = fields->f_disp16;
3525       break;
3526     case M32R_OPERAND_DISP24 :
3527       value = fields->f_disp24;
3528       break;
3529
3530     default :
3531       /* xgettext:c-format */
3532       fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),
3533                        opindex);
3534       abort ();
3535   }
3536
3537   return value;
3538 }
3539
3540 /* Stuffing values in cgen_fields is handled by a collection of functions.
3541    They are distinguished by the type of the VALUE argument they accept.
3542    TODO: floating point, inlining support, remove cases where argument type
3543    not appropriate.  */
3544
3545 void
3546 m32r_cgen_set_int_operand (opindex, fields, value)
3547      int opindex;
3548      CGEN_FIELDS * fields;
3549      int value;
3550 {
3551   switch (opindex)
3552     {
3553     case M32R_OPERAND_SR :
3554       fields->f_r2 = value;
3555       break;
3556     case M32R_OPERAND_DR :
3557       fields->f_r1 = value;
3558       break;
3559     case M32R_OPERAND_SRC1 :
3560       fields->f_r1 = value;
3561       break;
3562     case M32R_OPERAND_SRC2 :
3563       fields->f_r2 = value;
3564       break;
3565     case M32R_OPERAND_SCR :
3566       fields->f_r2 = value;
3567       break;
3568     case M32R_OPERAND_DCR :
3569       fields->f_r1 = value;
3570       break;
3571     case M32R_OPERAND_SIMM8 :
3572       fields->f_simm8 = value;
3573       break;
3574     case M32R_OPERAND_SIMM16 :
3575       fields->f_simm16 = value;
3576       break;
3577     case M32R_OPERAND_UIMM4 :
3578       fields->f_uimm4 = value;
3579       break;
3580     case M32R_OPERAND_UIMM5 :
3581       fields->f_uimm5 = value;
3582       break;
3583     case M32R_OPERAND_UIMM16 :
3584       fields->f_uimm16 = value;
3585       break;
3586 /* start-sanitize-m32rx */
3587     case M32R_OPERAND_IMM1 :
3588       fields->f_imm1 = value;
3589       break;
3590 /* end-sanitize-m32rx */
3591 /* start-sanitize-m32rx */
3592     case M32R_OPERAND_ACCD :
3593       fields->f_accd = value;
3594       break;
3595 /* end-sanitize-m32rx */
3596 /* start-sanitize-m32rx */
3597     case M32R_OPERAND_ACCS :
3598       fields->f_accs = value;
3599       break;
3600 /* end-sanitize-m32rx */
3601 /* start-sanitize-m32rx */
3602     case M32R_OPERAND_ACC :
3603       fields->f_acc = value;
3604       break;
3605 /* end-sanitize-m32rx */
3606     case M32R_OPERAND_HASH :
3607       fields->f_nil = value;
3608       break;
3609     case M32R_OPERAND_HI16 :
3610       fields->f_hi16 = value;
3611       break;
3612     case M32R_OPERAND_SLO16 :
3613       fields->f_simm16 = value;
3614       break;
3615     case M32R_OPERAND_ULO16 :
3616       fields->f_uimm16 = value;
3617       break;
3618     case M32R_OPERAND_UIMM24 :
3619       fields->f_uimm24 = value;
3620       break;
3621     case M32R_OPERAND_DISP8 :
3622       fields->f_disp8 = value;
3623       break;
3624     case M32R_OPERAND_DISP16 :
3625       fields->f_disp16 = value;
3626       break;
3627     case M32R_OPERAND_DISP24 :
3628       fields->f_disp24 = value;
3629       break;
3630
3631     default :
3632       /* xgettext:c-format */
3633       fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),
3634                        opindex);
3635       abort ();
3636   }
3637 }
3638
3639 void
3640 m32r_cgen_set_vma_operand (opindex, fields, value)
3641      int opindex;
3642      CGEN_FIELDS * fields;
3643      bfd_vma value;
3644 {
3645   switch (opindex)
3646     {
3647     case M32R_OPERAND_SR :
3648       fields->f_r2 = value;
3649       break;
3650     case M32R_OPERAND_DR :
3651       fields->f_r1 = value;
3652       break;
3653     case M32R_OPERAND_SRC1 :
3654       fields->f_r1 = value;
3655       break;
3656     case M32R_OPERAND_SRC2 :
3657       fields->f_r2 = value;
3658       break;
3659     case M32R_OPERAND_SCR :
3660       fields->f_r2 = value;
3661       break;
3662     case M32R_OPERAND_DCR :
3663       fields->f_r1 = value;
3664       break;
3665     case M32R_OPERAND_SIMM8 :
3666       fields->f_simm8 = value;
3667       break;
3668     case M32R_OPERAND_SIMM16 :
3669       fields->f_simm16 = value;
3670       break;
3671     case M32R_OPERAND_UIMM4 :
3672       fields->f_uimm4 = value;
3673       break;
3674     case M32R_OPERAND_UIMM5 :
3675       fields->f_uimm5 = value;
3676       break;
3677     case M32R_OPERAND_UIMM16 :
3678       fields->f_uimm16 = value;
3679       break;
3680 /* start-sanitize-m32rx */
3681     case M32R_OPERAND_IMM1 :
3682       fields->f_imm1 = value;
3683       break;
3684 /* end-sanitize-m32rx */
3685 /* start-sanitize-m32rx */
3686     case M32R_OPERAND_ACCD :
3687       fields->f_accd = value;
3688       break;
3689 /* end-sanitize-m32rx */
3690 /* start-sanitize-m32rx */
3691     case M32R_OPERAND_ACCS :
3692       fields->f_accs = value;
3693       break;
3694 /* end-sanitize-m32rx */
3695 /* start-sanitize-m32rx */
3696     case M32R_OPERAND_ACC :
3697       fields->f_acc = value;
3698       break;
3699 /* end-sanitize-m32rx */
3700     case M32R_OPERAND_HASH :
3701       fields->f_nil = value;
3702       break;
3703     case M32R_OPERAND_HI16 :
3704       fields->f_hi16 = value;
3705       break;
3706     case M32R_OPERAND_SLO16 :
3707       fields->f_simm16 = value;
3708       break;
3709     case M32R_OPERAND_ULO16 :
3710       fields->f_uimm16 = value;
3711       break;
3712     case M32R_OPERAND_UIMM24 :
3713       fields->f_uimm24 = value;
3714       break;
3715     case M32R_OPERAND_DISP8 :
3716       fields->f_disp8 = value;
3717       break;
3718     case M32R_OPERAND_DISP16 :
3719       fields->f_disp16 = value;
3720       break;
3721     case M32R_OPERAND_DISP24 :
3722       fields->f_disp24 = value;
3723       break;
3724
3725     default :
3726       /* xgettext:c-format */
3727       fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),
3728                        opindex);
3729       abort ();
3730   }
3731 }
3732