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