This commit was generated by cvs2svn to track changes on a CVS vendor
[platform/upstream/binutils.git] / sim / m32r / decode.c
1 /* Simulator instruction decoder for m32rbf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
6
7 This file is part of the GNU Simulators.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23 */
24
25 #define WANT_CPU m32rbf
26 #define WANT_CPU_M32RBF
27
28 #include "sim-main.h"
29 #include "sim-assert.h"
30
31 /* FIXME: Need to review choices for the following.  */
32
33 #if WITH_SEM_SWITCH_FULL
34 #define FULL(fn)
35 #else
36 #define FULL(fn) CONCAT3 (m32rbf,_sem_,fn) ,
37 #endif
38
39 #if WITH_FAST
40 #if WITH_SEM_SWITCH_FAST
41 #define FAST(fn)
42 #else
43 #define FAST(fn) CONCAT3 (m32rbf,_semf_,fn) , /* f for fast */
44 #endif
45 #else
46 #define FAST(fn)
47 #endif
48
49 /* The INSN_ prefix is not here and is instead part of the `insn' argument
50    to avoid collisions with header files (e.g. `AND' in ansidecl.h).  */
51 #define IDX(insn) CONCAT2 (M32RBF_,insn)
52 #define TYPE(insn) CONCAT2 (M32R_,insn)
53
54 /* The instruction descriptor array.
55    This is computed at runtime.  Space for it is not malloc'd to save a
56    teensy bit of cpu in the decoder.  Moving it to malloc space is trivial
57    but won't be done until necessary (we don't currently support the runtime
58    addition of instructions nor an SMP machine with different cpus).  */
59 static IDESC m32rbf_insn_data[M32RBF_INSN_MAX];
60
61 /* Commas between elements are contained in the macros.
62    Some of these are conditionally compiled out.  */
63
64 static const struct insn_sem m32rbf_insn_sem[] =
65 {
66   { VIRTUAL_INSN_X_INVALID, IDX (INSN_X_INVALID), FULL (x_invalid) FAST (x_invalid) },
67   { VIRTUAL_INSN_X_AFTER, IDX (INSN_X_AFTER), FULL (x_after) FAST (x_after) },
68   { VIRTUAL_INSN_X_BEFORE, IDX (INSN_X_BEFORE), FULL (x_before) FAST (x_before) },
69   { VIRTUAL_INSN_X_CTI_CHAIN, IDX (INSN_X_CTI_CHAIN), FULL (x_cti_chain) FAST (x_cti_chain) },
70   { VIRTUAL_INSN_X_CHAIN, IDX (INSN_X_CHAIN), FULL (x_chain) FAST (x_chain) },
71   { VIRTUAL_INSN_X_BEGIN, IDX (INSN_X_BEGIN), FULL (x_begin) FAST (x_begin) },
72   { TYPE (INSN_ADD), IDX (INSN_ADD), FULL (add) FAST (add) },
73   { TYPE (INSN_ADD3), IDX (INSN_ADD3), FULL (add3) FAST (add3) },
74   { TYPE (INSN_AND), IDX (INSN_AND), FULL (and) FAST (and) },
75   { TYPE (INSN_AND3), IDX (INSN_AND3), FULL (and3) FAST (and3) },
76   { TYPE (INSN_OR), IDX (INSN_OR), FULL (or) FAST (or) },
77   { TYPE (INSN_OR3), IDX (INSN_OR3), FULL (or3) FAST (or3) },
78   { TYPE (INSN_XOR), IDX (INSN_XOR), FULL (xor) FAST (xor) },
79   { TYPE (INSN_XOR3), IDX (INSN_XOR3), FULL (xor3) FAST (xor3) },
80   { TYPE (INSN_ADDI), IDX (INSN_ADDI), FULL (addi) FAST (addi) },
81   { TYPE (INSN_ADDV), IDX (INSN_ADDV), FULL (addv) FAST (addv) },
82   { TYPE (INSN_ADDV3), IDX (INSN_ADDV3), FULL (addv3) FAST (addv3) },
83   { TYPE (INSN_ADDX), IDX (INSN_ADDX), FULL (addx) FAST (addx) },
84   { TYPE (INSN_BC8), IDX (INSN_BC8), FULL (bc8) FAST (bc8) },
85   { TYPE (INSN_BC24), IDX (INSN_BC24), FULL (bc24) FAST (bc24) },
86   { TYPE (INSN_BEQ), IDX (INSN_BEQ), FULL (beq) FAST (beq) },
87   { TYPE (INSN_BEQZ), IDX (INSN_BEQZ), FULL (beqz) FAST (beqz) },
88   { TYPE (INSN_BGEZ), IDX (INSN_BGEZ), FULL (bgez) FAST (bgez) },
89   { TYPE (INSN_BGTZ), IDX (INSN_BGTZ), FULL (bgtz) FAST (bgtz) },
90   { TYPE (INSN_BLEZ), IDX (INSN_BLEZ), FULL (blez) FAST (blez) },
91   { TYPE (INSN_BLTZ), IDX (INSN_BLTZ), FULL (bltz) FAST (bltz) },
92   { TYPE (INSN_BNEZ), IDX (INSN_BNEZ), FULL (bnez) FAST (bnez) },
93   { TYPE (INSN_BL8), IDX (INSN_BL8), FULL (bl8) FAST (bl8) },
94   { TYPE (INSN_BL24), IDX (INSN_BL24), FULL (bl24) FAST (bl24) },
95   { TYPE (INSN_BNC8), IDX (INSN_BNC8), FULL (bnc8) FAST (bnc8) },
96   { TYPE (INSN_BNC24), IDX (INSN_BNC24), FULL (bnc24) FAST (bnc24) },
97   { TYPE (INSN_BNE), IDX (INSN_BNE), FULL (bne) FAST (bne) },
98   { TYPE (INSN_BRA8), IDX (INSN_BRA8), FULL (bra8) FAST (bra8) },
99   { TYPE (INSN_BRA24), IDX (INSN_BRA24), FULL (bra24) FAST (bra24) },
100   { TYPE (INSN_CMP), IDX (INSN_CMP), FULL (cmp) FAST (cmp) },
101   { TYPE (INSN_CMPI), IDX (INSN_CMPI), FULL (cmpi) FAST (cmpi) },
102   { TYPE (INSN_CMPU), IDX (INSN_CMPU), FULL (cmpu) FAST (cmpu) },
103   { TYPE (INSN_CMPUI), IDX (INSN_CMPUI), FULL (cmpui) FAST (cmpui) },
104   { TYPE (INSN_DIV), IDX (INSN_DIV), FULL (div) FAST (div) },
105   { TYPE (INSN_DIVU), IDX (INSN_DIVU), FULL (divu) FAST (divu) },
106   { TYPE (INSN_REM), IDX (INSN_REM), FULL (rem) FAST (rem) },
107   { TYPE (INSN_REMU), IDX (INSN_REMU), FULL (remu) FAST (remu) },
108   { TYPE (INSN_JL), IDX (INSN_JL), FULL (jl) FAST (jl) },
109   { TYPE (INSN_JMP), IDX (INSN_JMP), FULL (jmp) FAST (jmp) },
110   { TYPE (INSN_LD), IDX (INSN_LD), FULL (ld) FAST (ld) },
111   { TYPE (INSN_LD_D), IDX (INSN_LD_D), FULL (ld_d) FAST (ld_d) },
112   { TYPE (INSN_LDB), IDX (INSN_LDB), FULL (ldb) FAST (ldb) },
113   { TYPE (INSN_LDB_D), IDX (INSN_LDB_D), FULL (ldb_d) FAST (ldb_d) },
114   { TYPE (INSN_LDH), IDX (INSN_LDH), FULL (ldh) FAST (ldh) },
115   { TYPE (INSN_LDH_D), IDX (INSN_LDH_D), FULL (ldh_d) FAST (ldh_d) },
116   { TYPE (INSN_LDUB), IDX (INSN_LDUB), FULL (ldub) FAST (ldub) },
117   { TYPE (INSN_LDUB_D), IDX (INSN_LDUB_D), FULL (ldub_d) FAST (ldub_d) },
118   { TYPE (INSN_LDUH), IDX (INSN_LDUH), FULL (lduh) FAST (lduh) },
119   { TYPE (INSN_LDUH_D), IDX (INSN_LDUH_D), FULL (lduh_d) FAST (lduh_d) },
120   { TYPE (INSN_LD_PLUS), IDX (INSN_LD_PLUS), FULL (ld_plus) FAST (ld_plus) },
121   { TYPE (INSN_LD24), IDX (INSN_LD24), FULL (ld24) FAST (ld24) },
122   { TYPE (INSN_LDI8), IDX (INSN_LDI8), FULL (ldi8) FAST (ldi8) },
123   { TYPE (INSN_LDI16), IDX (INSN_LDI16), FULL (ldi16) FAST (ldi16) },
124   { TYPE (INSN_LOCK), IDX (INSN_LOCK), FULL (lock) FAST (lock) },
125   { TYPE (INSN_MACHI), IDX (INSN_MACHI), FULL (machi) FAST (machi) },
126   { TYPE (INSN_MACLO), IDX (INSN_MACLO), FULL (maclo) FAST (maclo) },
127   { TYPE (INSN_MACWHI), IDX (INSN_MACWHI), FULL (macwhi) FAST (macwhi) },
128   { TYPE (INSN_MACWLO), IDX (INSN_MACWLO), FULL (macwlo) FAST (macwlo) },
129   { TYPE (INSN_MUL), IDX (INSN_MUL), FULL (mul) FAST (mul) },
130   { TYPE (INSN_MULHI), IDX (INSN_MULHI), FULL (mulhi) FAST (mulhi) },
131   { TYPE (INSN_MULLO), IDX (INSN_MULLO), FULL (mullo) FAST (mullo) },
132   { TYPE (INSN_MULWHI), IDX (INSN_MULWHI), FULL (mulwhi) FAST (mulwhi) },
133   { TYPE (INSN_MULWLO), IDX (INSN_MULWLO), FULL (mulwlo) FAST (mulwlo) },
134   { TYPE (INSN_MV), IDX (INSN_MV), FULL (mv) FAST (mv) },
135   { TYPE (INSN_MVFACHI), IDX (INSN_MVFACHI), FULL (mvfachi) FAST (mvfachi) },
136   { TYPE (INSN_MVFACLO), IDX (INSN_MVFACLO), FULL (mvfaclo) FAST (mvfaclo) },
137   { TYPE (INSN_MVFACMI), IDX (INSN_MVFACMI), FULL (mvfacmi) FAST (mvfacmi) },
138   { TYPE (INSN_MVFC), IDX (INSN_MVFC), FULL (mvfc) FAST (mvfc) },
139   { TYPE (INSN_MVTACHI), IDX (INSN_MVTACHI), FULL (mvtachi) FAST (mvtachi) },
140   { TYPE (INSN_MVTACLO), IDX (INSN_MVTACLO), FULL (mvtaclo) FAST (mvtaclo) },
141   { TYPE (INSN_MVTC), IDX (INSN_MVTC), FULL (mvtc) FAST (mvtc) },
142   { TYPE (INSN_NEG), IDX (INSN_NEG), FULL (neg) FAST (neg) },
143   { TYPE (INSN_NOP), IDX (INSN_NOP), FULL (nop) FAST (nop) },
144   { TYPE (INSN_NOT), IDX (INSN_NOT), FULL (not) FAST (not) },
145   { TYPE (INSN_RAC), IDX (INSN_RAC), FULL (rac) FAST (rac) },
146   { TYPE (INSN_RACH), IDX (INSN_RACH), FULL (rach) FAST (rach) },
147   { TYPE (INSN_RTE), IDX (INSN_RTE), FULL (rte) FAST (rte) },
148   { TYPE (INSN_SETH), IDX (INSN_SETH), FULL (seth) FAST (seth) },
149   { TYPE (INSN_SLL), IDX (INSN_SLL), FULL (sll) FAST (sll) },
150   { TYPE (INSN_SLL3), IDX (INSN_SLL3), FULL (sll3) FAST (sll3) },
151   { TYPE (INSN_SLLI), IDX (INSN_SLLI), FULL (slli) FAST (slli) },
152   { TYPE (INSN_SRA), IDX (INSN_SRA), FULL (sra) FAST (sra) },
153   { TYPE (INSN_SRA3), IDX (INSN_SRA3), FULL (sra3) FAST (sra3) },
154   { TYPE (INSN_SRAI), IDX (INSN_SRAI), FULL (srai) FAST (srai) },
155   { TYPE (INSN_SRL), IDX (INSN_SRL), FULL (srl) FAST (srl) },
156   { TYPE (INSN_SRL3), IDX (INSN_SRL3), FULL (srl3) FAST (srl3) },
157   { TYPE (INSN_SRLI), IDX (INSN_SRLI), FULL (srli) FAST (srli) },
158   { TYPE (INSN_ST), IDX (INSN_ST), FULL (st) FAST (st) },
159   { TYPE (INSN_ST_D), IDX (INSN_ST_D), FULL (st_d) FAST (st_d) },
160   { TYPE (INSN_STB), IDX (INSN_STB), FULL (stb) FAST (stb) },
161   { TYPE (INSN_STB_D), IDX (INSN_STB_D), FULL (stb_d) FAST (stb_d) },
162   { TYPE (INSN_STH), IDX (INSN_STH), FULL (sth) FAST (sth) },
163   { TYPE (INSN_STH_D), IDX (INSN_STH_D), FULL (sth_d) FAST (sth_d) },
164   { TYPE (INSN_ST_PLUS), IDX (INSN_ST_PLUS), FULL (st_plus) FAST (st_plus) },
165   { TYPE (INSN_ST_MINUS), IDX (INSN_ST_MINUS), FULL (st_minus) FAST (st_minus) },
166   { TYPE (INSN_SUB), IDX (INSN_SUB), FULL (sub) FAST (sub) },
167   { TYPE (INSN_SUBV), IDX (INSN_SUBV), FULL (subv) FAST (subv) },
168   { TYPE (INSN_SUBX), IDX (INSN_SUBX), FULL (subx) FAST (subx) },
169   { TYPE (INSN_TRAP), IDX (INSN_TRAP), FULL (trap) FAST (trap) },
170   { TYPE (INSN_UNLOCK), IDX (INSN_UNLOCK), FULL (unlock) FAST (unlock) },
171 };
172
173 static const struct insn_sem m32rbf_insn_sem_invalid =
174 {
175   VIRTUAL_INSN_X_INVALID, IDX (INSN_X_INVALID), FULL (x_invalid) FAST (x_invalid)
176 };
177
178 #undef FMT
179 #undef FULL
180 #undef FAST
181 #undef IDX
182 #undef TYPE
183
184 /* Initialize an IDESC from the compile-time computable parts.  */
185
186 static INLINE void
187 init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
188 {
189   const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;
190
191   id->num = t->index;
192   if ((int) t->type <= 0)
193     id->idata = & cgen_virtual_insn_table[- (int) t->type];
194   else
195     id->idata = & insn_table[t->type];
196   id->attrs = CGEN_INSN_ATTRS (id->idata);
197   /* Oh my god, a magic number.  */
198   id->length = CGEN_INSN_BITSIZE (id->idata) / 8;
199 #if ! WITH_SEM_SWITCH_FULL
200   id->sem_full = t->sem_full;
201 #endif
202 #if WITH_FAST && ! WITH_SEM_SWITCH_FAST
203   id->sem_fast = t->sem_fast;
204 #endif
205 #if WITH_PROFILE_MODEL_P
206   id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
207   {
208     SIM_DESC sd = CPU_STATE (cpu);
209     SIM_ASSERT (t->index == id->timing->num);
210   }
211 #endif
212 }
213
214 /* Initialize the instruction descriptor table.  */
215
216 void
217 m32rbf_init_idesc_table (SIM_CPU *cpu)
218 {
219   IDESC *id,*tabend;
220   const struct insn_sem *t,*tend;
221   int tabsize = M32RBF_INSN_MAX;
222   IDESC *table = m32rbf_insn_data;
223
224   memset (table, 0, tabsize * sizeof (IDESC));
225
226   /* First set all entries to the `invalid insn'.  */
227   t = & m32rbf_insn_sem_invalid;
228   for (id = table, tabend = table + tabsize; id < tabend; ++id)
229     init_idesc (cpu, id, t);
230
231   /* Now fill in the values for the chosen cpu.  */
232   for (t = m32rbf_insn_sem, tend = t + sizeof (m32rbf_insn_sem) / sizeof (*t);
233        t != tend; ++t)
234     {
235       init_idesc (cpu, & table[t->index], t);
236     }
237
238   /* Link the IDESC table into the cpu.  */
239   CPU_IDESC (cpu) = table;
240 }
241
242 /* Given an instruction, return a pointer to its IDESC entry.  */
243
244 const IDESC *
245 m32rbf_decode (SIM_CPU *current_cpu, IADDR pc,
246               CGEN_INSN_INT base_insn, CGEN_INSN_INT entire_insn,
247               ARGBUF *abuf)
248 {
249   /* Result of decoder.  */
250   M32RBF_INSN_TYPE itype;
251
252   {
253     CGEN_INSN_INT insn = base_insn;
254
255     {
256       unsigned int val = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0)));
257       switch (val)
258       {
259       case 0 : itype = M32RBF_INSN_SUBV; goto extract_fmt_addv;
260       case 1 : itype = M32RBF_INSN_SUBX; goto extract_fmt_addx;
261       case 2 : itype = M32RBF_INSN_SUB; goto extract_fmt_add;
262       case 3 : itype = M32RBF_INSN_NEG; goto extract_fmt_mv;
263       case 4 : itype = M32RBF_INSN_CMP; goto extract_fmt_cmp;
264       case 5 : itype = M32RBF_INSN_CMPU; goto extract_fmt_cmp;
265       case 8 : itype = M32RBF_INSN_ADDV; goto extract_fmt_addv;
266       case 9 : itype = M32RBF_INSN_ADDX; goto extract_fmt_addx;
267       case 10 : itype = M32RBF_INSN_ADD; goto extract_fmt_add;
268       case 11 : itype = M32RBF_INSN_NOT; goto extract_fmt_mv;
269       case 12 : itype = M32RBF_INSN_AND; goto extract_fmt_add;
270       case 13 : itype = M32RBF_INSN_XOR; goto extract_fmt_add;
271       case 14 : itype = M32RBF_INSN_OR; goto extract_fmt_add;
272       case 16 : itype = M32RBF_INSN_SRL; goto extract_fmt_add;
273       case 18 : itype = M32RBF_INSN_SRA; goto extract_fmt_add;
274       case 20 : itype = M32RBF_INSN_SLL; goto extract_fmt_add;
275       case 22 : itype = M32RBF_INSN_MUL; goto extract_fmt_add;
276       case 24 : itype = M32RBF_INSN_MV; goto extract_fmt_mv;
277       case 25 : itype = M32RBF_INSN_MVFC; goto extract_fmt_mvfc;
278       case 26 : itype = M32RBF_INSN_MVTC; goto extract_fmt_mvtc;
279       case 28 :
280         {
281           unsigned int val = (((insn >> 8) & (15 << 0)));
282           switch (val)
283           {
284           case 14 : itype = M32RBF_INSN_JL; goto extract_fmt_jl;
285           case 15 : itype = M32RBF_INSN_JMP; goto extract_fmt_jmp;
286           default : itype = M32RBF_INSN_X_INVALID; goto extract_fmt_empty;
287           }
288         }
289       case 29 : itype = M32RBF_INSN_RTE; goto extract_fmt_rte;
290       case 31 : itype = M32RBF_INSN_TRAP; goto extract_fmt_trap;
291       case 32 : itype = M32RBF_INSN_STB; goto extract_fmt_stb;
292       case 34 : itype = M32RBF_INSN_STH; goto extract_fmt_sth;
293       case 36 : itype = M32RBF_INSN_ST; goto extract_fmt_st;
294       case 37 : itype = M32RBF_INSN_UNLOCK; goto extract_fmt_unlock;
295       case 38 : itype = M32RBF_INSN_ST_PLUS; goto extract_fmt_st_plus;
296       case 39 : itype = M32RBF_INSN_ST_MINUS; goto extract_fmt_st_plus;
297       case 40 : itype = M32RBF_INSN_LDB; goto extract_fmt_ldb;
298       case 41 : itype = M32RBF_INSN_LDUB; goto extract_fmt_ldb;
299       case 42 : itype = M32RBF_INSN_LDH; goto extract_fmt_ldh;
300       case 43 : itype = M32RBF_INSN_LDUH; goto extract_fmt_ldh;
301       case 44 : itype = M32RBF_INSN_LD; goto extract_fmt_ld;
302       case 45 : itype = M32RBF_INSN_LOCK; goto extract_fmt_lock;
303       case 46 : itype = M32RBF_INSN_LD_PLUS; goto extract_fmt_ld_plus;
304       case 48 : itype = M32RBF_INSN_MULHI; goto extract_fmt_mulhi;
305       case 49 : itype = M32RBF_INSN_MULLO; goto extract_fmt_mulhi;
306       case 50 : itype = M32RBF_INSN_MULWHI; goto extract_fmt_mulhi;
307       case 51 : itype = M32RBF_INSN_MULWLO; goto extract_fmt_mulhi;
308       case 52 : itype = M32RBF_INSN_MACHI; goto extract_fmt_machi;
309       case 53 : itype = M32RBF_INSN_MACLO; goto extract_fmt_machi;
310       case 54 : itype = M32RBF_INSN_MACWHI; goto extract_fmt_machi;
311       case 55 : itype = M32RBF_INSN_MACWLO; goto extract_fmt_machi;
312       case 64 : /* fall through */
313       case 65 : /* fall through */
314       case 66 : /* fall through */
315       case 67 : /* fall through */
316       case 68 : /* fall through */
317       case 69 : /* fall through */
318       case 70 : /* fall through */
319       case 71 : /* fall through */
320       case 72 : /* fall through */
321       case 73 : /* fall through */
322       case 74 : /* fall through */
323       case 75 : /* fall through */
324       case 76 : /* fall through */
325       case 77 : /* fall through */
326       case 78 : /* fall through */
327       case 79 : itype = M32RBF_INSN_ADDI; goto extract_fmt_addi;
328       case 80 : /* fall through */
329       case 81 : itype = M32RBF_INSN_SRLI; goto extract_fmt_slli;
330       case 82 : /* fall through */
331       case 83 : itype = M32RBF_INSN_SRAI; goto extract_fmt_slli;
332       case 84 : /* fall through */
333       case 85 : itype = M32RBF_INSN_SLLI; goto extract_fmt_slli;
334       case 87 :
335         {
336           unsigned int val = (((insn >> 0) & (15 << 0)));
337           switch (val)
338           {
339           case 0 : itype = M32RBF_INSN_MVTACHI; goto extract_fmt_mvtachi;
340           case 1 : itype = M32RBF_INSN_MVTACLO; goto extract_fmt_mvtachi;
341           default : itype = M32RBF_INSN_X_INVALID; goto extract_fmt_empty;
342           }
343         }
344       case 88 : itype = M32RBF_INSN_RACH; goto extract_fmt_rac;
345       case 89 : itype = M32RBF_INSN_RAC; goto extract_fmt_rac;
346       case 95 :
347         {
348           unsigned int val = (((insn >> 0) & (15 << 0)));
349           switch (val)
350           {
351           case 0 : itype = M32RBF_INSN_MVFACHI; goto extract_fmt_mvfachi;
352           case 1 : itype = M32RBF_INSN_MVFACLO; goto extract_fmt_mvfachi;
353           case 2 : itype = M32RBF_INSN_MVFACMI; goto extract_fmt_mvfachi;
354           default : itype = M32RBF_INSN_X_INVALID; goto extract_fmt_empty;
355           }
356         }
357       case 96 : /* fall through */
358       case 97 : /* fall through */
359       case 98 : /* fall through */
360       case 99 : /* fall through */
361       case 100 : /* fall through */
362       case 101 : /* fall through */
363       case 102 : /* fall through */
364       case 103 : /* fall through */
365       case 104 : /* fall through */
366       case 105 : /* fall through */
367       case 106 : /* fall through */
368       case 107 : /* fall through */
369       case 108 : /* fall through */
370       case 109 : /* fall through */
371       case 110 : /* fall through */
372       case 111 : itype = M32RBF_INSN_LDI8; goto extract_fmt_ldi8;
373       case 112 :
374         {
375           unsigned int val = (((insn >> 8) & (15 << 0)));
376           switch (val)
377           {
378           case 0 : itype = M32RBF_INSN_NOP; goto extract_fmt_nop;
379           case 12 : itype = M32RBF_INSN_BC8; goto extract_fmt_bc8;
380           case 13 : itype = M32RBF_INSN_BNC8; goto extract_fmt_bc8;
381           case 14 : itype = M32RBF_INSN_BL8; goto extract_fmt_bl8;
382           case 15 : itype = M32RBF_INSN_BRA8; goto extract_fmt_bra8;
383           default : itype = M32RBF_INSN_X_INVALID; goto extract_fmt_empty;
384           }
385         }
386       case 113 : /* fall through */
387       case 114 : /* fall through */
388       case 115 : /* fall through */
389       case 116 : /* fall through */
390       case 117 : /* fall through */
391       case 118 : /* fall through */
392       case 119 : /* fall through */
393       case 120 : /* fall through */
394       case 121 : /* fall through */
395       case 122 : /* fall through */
396       case 123 : /* fall through */
397       case 124 : /* fall through */
398       case 125 : /* fall through */
399       case 126 : /* fall through */
400       case 127 :
401         {
402           unsigned int val = (((insn >> 8) & (15 << 0)));
403           switch (val)
404           {
405           case 12 : itype = M32RBF_INSN_BC8; goto extract_fmt_bc8;
406           case 13 : itype = M32RBF_INSN_BNC8; goto extract_fmt_bc8;
407           case 14 : itype = M32RBF_INSN_BL8; goto extract_fmt_bl8;
408           case 15 : itype = M32RBF_INSN_BRA8; goto extract_fmt_bra8;
409           default : itype = M32RBF_INSN_X_INVALID; goto extract_fmt_empty;
410           }
411         }
412       case 132 : itype = M32RBF_INSN_CMPI; goto extract_fmt_cmpi;
413       case 133 : itype = M32RBF_INSN_CMPUI; goto extract_fmt_cmpi;
414       case 136 : itype = M32RBF_INSN_ADDV3; goto extract_fmt_addv3;
415       case 138 : itype = M32RBF_INSN_ADD3; goto extract_fmt_add3;
416       case 140 : itype = M32RBF_INSN_AND3; goto extract_fmt_and3;
417       case 141 : itype = M32RBF_INSN_XOR3; goto extract_fmt_and3;
418       case 142 : itype = M32RBF_INSN_OR3; goto extract_fmt_or3;
419       case 144 : itype = M32RBF_INSN_DIV; goto extract_fmt_div;
420       case 145 : itype = M32RBF_INSN_DIVU; goto extract_fmt_div;
421       case 146 : itype = M32RBF_INSN_REM; goto extract_fmt_div;
422       case 147 : itype = M32RBF_INSN_REMU; goto extract_fmt_div;
423       case 152 : itype = M32RBF_INSN_SRL3; goto extract_fmt_sll3;
424       case 154 : itype = M32RBF_INSN_SRA3; goto extract_fmt_sll3;
425       case 156 : itype = M32RBF_INSN_SLL3; goto extract_fmt_sll3;
426       case 159 : itype = M32RBF_INSN_LDI16; goto extract_fmt_ldi16;
427       case 160 : itype = M32RBF_INSN_STB_D; goto extract_fmt_stb_d;
428       case 162 : itype = M32RBF_INSN_STH_D; goto extract_fmt_sth_d;
429       case 164 : itype = M32RBF_INSN_ST_D; goto extract_fmt_st_d;
430       case 168 : itype = M32RBF_INSN_LDB_D; goto extract_fmt_ldb_d;
431       case 169 : itype = M32RBF_INSN_LDUB_D; goto extract_fmt_ldb_d;
432       case 170 : itype = M32RBF_INSN_LDH_D; goto extract_fmt_ldh_d;
433       case 171 : itype = M32RBF_INSN_LDUH_D; goto extract_fmt_ldh_d;
434       case 172 : itype = M32RBF_INSN_LD_D; goto extract_fmt_ld_d;
435       case 176 : itype = M32RBF_INSN_BEQ; goto extract_fmt_beq;
436       case 177 : itype = M32RBF_INSN_BNE; goto extract_fmt_beq;
437       case 184 : itype = M32RBF_INSN_BEQZ; goto extract_fmt_beqz;
438       case 185 : itype = M32RBF_INSN_BNEZ; goto extract_fmt_beqz;
439       case 186 : itype = M32RBF_INSN_BLTZ; goto extract_fmt_beqz;
440       case 187 : itype = M32RBF_INSN_BGEZ; goto extract_fmt_beqz;
441       case 188 : itype = M32RBF_INSN_BLEZ; goto extract_fmt_beqz;
442       case 189 : itype = M32RBF_INSN_BGTZ; goto extract_fmt_beqz;
443       case 220 : itype = M32RBF_INSN_SETH; goto extract_fmt_seth;
444       case 224 : /* fall through */
445       case 225 : /* fall through */
446       case 226 : /* fall through */
447       case 227 : /* fall through */
448       case 228 : /* fall through */
449       case 229 : /* fall through */
450       case 230 : /* fall through */
451       case 231 : /* fall through */
452       case 232 : /* fall through */
453       case 233 : /* fall through */
454       case 234 : /* fall through */
455       case 235 : /* fall through */
456       case 236 : /* fall through */
457       case 237 : /* fall through */
458       case 238 : /* fall through */
459       case 239 : itype = M32RBF_INSN_LD24; goto extract_fmt_ld24;
460       case 240 : /* fall through */
461       case 241 : /* fall through */
462       case 242 : /* fall through */
463       case 243 : /* fall through */
464       case 244 : /* fall through */
465       case 245 : /* fall through */
466       case 246 : /* fall through */
467       case 247 : /* fall through */
468       case 248 : /* fall through */
469       case 249 : /* fall through */
470       case 250 : /* fall through */
471       case 251 : /* fall through */
472       case 252 : /* fall through */
473       case 253 : /* fall through */
474       case 254 : /* fall through */
475       case 255 :
476         {
477           unsigned int val = (((insn >> 8) & (15 << 0)));
478           switch (val)
479           {
480           case 12 : itype = M32RBF_INSN_BC24; goto extract_fmt_bc24;
481           case 13 : itype = M32RBF_INSN_BNC24; goto extract_fmt_bc24;
482           case 14 : itype = M32RBF_INSN_BL24; goto extract_fmt_bl24;
483           case 15 : itype = M32RBF_INSN_BRA24; goto extract_fmt_bra24;
484           default : itype = M32RBF_INSN_X_INVALID; goto extract_fmt_empty;
485           }
486         }
487       default : itype = M32RBF_INSN_X_INVALID; goto extract_fmt_empty;
488       }
489     }
490   }
491
492   /* The instruction has been decoded, now extract the fields.  */
493
494  extract_fmt_empty:
495   {
496     const IDESC *idesc = &m32rbf_insn_data[itype];
497     CGEN_INSN_INT insn = entire_insn;
498 #define FLD(f) abuf->fields.fmt_empty.f
499   EXTRACT_IFMT_EMPTY_VARS /* */
500
501   EXTRACT_IFMT_EMPTY_CODE
502
503   /* Record the fields for the semantic handler.  */
504   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_empty", (char *) 0));
505
506 #undef FLD
507     return idesc;
508   }
509
510  extract_fmt_add:
511   {
512     const IDESC *idesc = &m32rbf_insn_data[itype];
513     CGEN_INSN_INT insn = entire_insn;
514 #define FLD(f) abuf->fields.fmt_add.f
515   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
516
517   EXTRACT_IFMT_ADD_CODE
518
519   /* Record the fields for the semantic handler.  */
520   FLD (i_dr) = & CPU (h_gr)[f_r1];
521   FLD (i_sr) = & CPU (h_gr)[f_r2];
522   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_add", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
523
524 #if WITH_PROFILE_MODEL_P
525   /* Record the fields for profiling.  */
526   if (PROFILE_MODEL_P (current_cpu))
527     {
528       FLD (in_dr) = f_r1;
529       FLD (in_sr) = f_r2;
530       FLD (out_dr) = f_r1;
531     }
532 #endif
533 #undef FLD
534     return idesc;
535   }
536
537  extract_fmt_add3:
538   {
539     const IDESC *idesc = &m32rbf_insn_data[itype];
540     CGEN_INSN_INT insn = entire_insn;
541 #define FLD(f) abuf->fields.fmt_add3.f
542   EXTRACT_IFMT_ADD3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
543
544   EXTRACT_IFMT_ADD3_CODE
545
546   /* Record the fields for the semantic handler.  */
547   FLD (f_simm16) = f_simm16;
548   FLD (i_sr) = & CPU (h_gr)[f_r2];
549   FLD (i_dr) = & CPU (h_gr)[f_r1];
550   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_add3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
551
552 #if WITH_PROFILE_MODEL_P
553   /* Record the fields for profiling.  */
554   if (PROFILE_MODEL_P (current_cpu))
555     {
556       FLD (in_sr) = f_r2;
557       FLD (out_dr) = f_r1;
558     }
559 #endif
560 #undef FLD
561     return idesc;
562   }
563
564  extract_fmt_and3:
565   {
566     const IDESC *idesc = &m32rbf_insn_data[itype];
567     CGEN_INSN_INT insn = entire_insn;
568 #define FLD(f) abuf->fields.fmt_and3.f
569   EXTRACT_IFMT_AND3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
570
571   EXTRACT_IFMT_AND3_CODE
572
573   /* Record the fields for the semantic handler.  */
574   FLD (f_uimm16) = f_uimm16;
575   FLD (i_sr) = & CPU (h_gr)[f_r2];
576   FLD (i_dr) = & CPU (h_gr)[f_r1];
577   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_and3", "f_uimm16 0x%x", 'x', f_uimm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
578
579 #if WITH_PROFILE_MODEL_P
580   /* Record the fields for profiling.  */
581   if (PROFILE_MODEL_P (current_cpu))
582     {
583       FLD (in_sr) = f_r2;
584       FLD (out_dr) = f_r1;
585     }
586 #endif
587 #undef FLD
588     return idesc;
589   }
590
591  extract_fmt_or3:
592   {
593     const IDESC *idesc = &m32rbf_insn_data[itype];
594     CGEN_INSN_INT insn = entire_insn;
595 #define FLD(f) abuf->fields.fmt_or3.f
596   EXTRACT_IFMT_OR3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
597
598   EXTRACT_IFMT_OR3_CODE
599
600   /* Record the fields for the semantic handler.  */
601   FLD (f_uimm16) = f_uimm16;
602   FLD (i_sr) = & CPU (h_gr)[f_r2];
603   FLD (i_dr) = & CPU (h_gr)[f_r1];
604   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_or3", "f_uimm16 0x%x", 'x', f_uimm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
605
606 #if WITH_PROFILE_MODEL_P
607   /* Record the fields for profiling.  */
608   if (PROFILE_MODEL_P (current_cpu))
609     {
610       FLD (in_sr) = f_r2;
611       FLD (out_dr) = f_r1;
612     }
613 #endif
614 #undef FLD
615     return idesc;
616   }
617
618  extract_fmt_addi:
619   {
620     const IDESC *idesc = &m32rbf_insn_data[itype];
621     CGEN_INSN_INT insn = entire_insn;
622 #define FLD(f) abuf->fields.fmt_addi.f
623   EXTRACT_IFMT_ADDI_VARS /* f-op1 f-r1 f-simm8 */
624
625   EXTRACT_IFMT_ADDI_CODE
626
627   /* Record the fields for the semantic handler.  */
628   FLD (f_simm8) = f_simm8;
629   FLD (i_dr) = & CPU (h_gr)[f_r1];
630   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_addi", "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
631
632 #if WITH_PROFILE_MODEL_P
633   /* Record the fields for profiling.  */
634   if (PROFILE_MODEL_P (current_cpu))
635     {
636       FLD (in_dr) = f_r1;
637       FLD (out_dr) = f_r1;
638     }
639 #endif
640 #undef FLD
641     return idesc;
642   }
643
644  extract_fmt_addv:
645   {
646     const IDESC *idesc = &m32rbf_insn_data[itype];
647     CGEN_INSN_INT insn = entire_insn;
648 #define FLD(f) abuf->fields.fmt_addv.f
649   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
650
651   EXTRACT_IFMT_ADD_CODE
652
653   /* Record the fields for the semantic handler.  */
654   FLD (i_dr) = & CPU (h_gr)[f_r1];
655   FLD (i_sr) = & CPU (h_gr)[f_r2];
656   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_addv", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
657
658 #if WITH_PROFILE_MODEL_P
659   /* Record the fields for profiling.  */
660   if (PROFILE_MODEL_P (current_cpu))
661     {
662       FLD (in_dr) = f_r1;
663       FLD (in_sr) = f_r2;
664       FLD (out_dr) = f_r1;
665     }
666 #endif
667 #undef FLD
668     return idesc;
669   }
670
671  extract_fmt_addv3:
672   {
673     const IDESC *idesc = &m32rbf_insn_data[itype];
674     CGEN_INSN_INT insn = entire_insn;
675 #define FLD(f) abuf->fields.fmt_addv3.f
676   EXTRACT_IFMT_ADDV3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
677
678   EXTRACT_IFMT_ADDV3_CODE
679
680   /* Record the fields for the semantic handler.  */
681   FLD (f_simm16) = f_simm16;
682   FLD (i_sr) = & CPU (h_gr)[f_r2];
683   FLD (i_dr) = & CPU (h_gr)[f_r1];
684   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_addv3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
685
686 #if WITH_PROFILE_MODEL_P
687   /* Record the fields for profiling.  */
688   if (PROFILE_MODEL_P (current_cpu))
689     {
690       FLD (in_sr) = f_r2;
691       FLD (out_dr) = f_r1;
692     }
693 #endif
694 #undef FLD
695     return idesc;
696   }
697
698  extract_fmt_addx:
699   {
700     const IDESC *idesc = &m32rbf_insn_data[itype];
701     CGEN_INSN_INT insn = entire_insn;
702 #define FLD(f) abuf->fields.fmt_addx.f
703   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
704
705   EXTRACT_IFMT_ADD_CODE
706
707   /* Record the fields for the semantic handler.  */
708   FLD (i_dr) = & CPU (h_gr)[f_r1];
709   FLD (i_sr) = & CPU (h_gr)[f_r2];
710   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_addx", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
711
712 #if WITH_PROFILE_MODEL_P
713   /* Record the fields for profiling.  */
714   if (PROFILE_MODEL_P (current_cpu))
715     {
716       FLD (in_dr) = f_r1;
717       FLD (in_sr) = f_r2;
718       FLD (out_dr) = f_r1;
719     }
720 #endif
721 #undef FLD
722     return idesc;
723   }
724
725  extract_fmt_bc8:
726   {
727     const IDESC *idesc = &m32rbf_insn_data[itype];
728     CGEN_INSN_INT insn = entire_insn;
729 #define FLD(f) abuf->fields.cti.fields.fmt_bc8.f
730   EXTRACT_IFMT_BC8_VARS /* f-op1 f-r1 f-disp8 */
731
732   EXTRACT_IFMT_BC8_CODE
733
734   /* Record the fields for the semantic handler.  */
735   FLD (i_disp8) = f_disp8;
736   SEM_BRANCH_INIT_EXTRACT (abuf);
737   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
738
739 #if WITH_PROFILE_MODEL_P
740   /* Record the fields for profiling.  */
741   if (PROFILE_MODEL_P (current_cpu))
742     {
743     }
744 #endif
745 #undef FLD
746     return idesc;
747   }
748
749  extract_fmt_bc24:
750   {
751     const IDESC *idesc = &m32rbf_insn_data[itype];
752     CGEN_INSN_INT insn = entire_insn;
753 #define FLD(f) abuf->fields.cti.fields.fmt_bc24.f
754   EXTRACT_IFMT_BC24_VARS /* f-op1 f-r1 f-disp24 */
755
756   EXTRACT_IFMT_BC24_CODE
757
758   /* Record the fields for the semantic handler.  */
759   FLD (i_disp24) = f_disp24;
760   SEM_BRANCH_INIT_EXTRACT (abuf);
761   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
762
763 #if WITH_PROFILE_MODEL_P
764   /* Record the fields for profiling.  */
765   if (PROFILE_MODEL_P (current_cpu))
766     {
767     }
768 #endif
769 #undef FLD
770     return idesc;
771   }
772
773  extract_fmt_beq:
774   {
775     const IDESC *idesc = &m32rbf_insn_data[itype];
776     CGEN_INSN_INT insn = entire_insn;
777 #define FLD(f) abuf->fields.cti.fields.fmt_beq.f
778   EXTRACT_IFMT_BEQ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
779
780   EXTRACT_IFMT_BEQ_CODE
781
782   /* Record the fields for the semantic handler.  */
783   FLD (i_disp16) = f_disp16;
784   FLD (i_src1) = & CPU (h_gr)[f_r1];
785   FLD (i_src2) = & CPU (h_gr)[f_r2];
786   SEM_BRANCH_INIT_EXTRACT (abuf);
787   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_beq", "disp16 0x%x", 'x', f_disp16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
788
789 #if WITH_PROFILE_MODEL_P
790   /* Record the fields for profiling.  */
791   if (PROFILE_MODEL_P (current_cpu))
792     {
793       FLD (in_src1) = f_r1;
794       FLD (in_src2) = f_r2;
795     }
796 #endif
797 #undef FLD
798     return idesc;
799   }
800
801  extract_fmt_beqz:
802   {
803     const IDESC *idesc = &m32rbf_insn_data[itype];
804     CGEN_INSN_INT insn = entire_insn;
805 #define FLD(f) abuf->fields.cti.fields.fmt_beqz.f
806   EXTRACT_IFMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
807
808   EXTRACT_IFMT_BEQZ_CODE
809
810   /* Record the fields for the semantic handler.  */
811   FLD (i_disp16) = f_disp16;
812   FLD (i_src2) = & CPU (h_gr)[f_r2];
813   SEM_BRANCH_INIT_EXTRACT (abuf);
814   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_beqz", "disp16 0x%x", 'x', f_disp16, "src2 0x%x", 'x', f_r2, (char *) 0));
815
816 #if WITH_PROFILE_MODEL_P
817   /* Record the fields for profiling.  */
818   if (PROFILE_MODEL_P (current_cpu))
819     {
820       FLD (in_src2) = f_r2;
821     }
822 #endif
823 #undef FLD
824     return idesc;
825   }
826
827  extract_fmt_bl8:
828   {
829     const IDESC *idesc = &m32rbf_insn_data[itype];
830     CGEN_INSN_INT insn = entire_insn;
831 #define FLD(f) abuf->fields.cti.fields.fmt_bl8.f
832   EXTRACT_IFMT_BC8_VARS /* f-op1 f-r1 f-disp8 */
833
834   EXTRACT_IFMT_BC8_CODE
835
836   /* Record the fields for the semantic handler.  */
837   FLD (i_disp8) = f_disp8;
838   SEM_BRANCH_INIT_EXTRACT (abuf);
839   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
840
841 #if WITH_PROFILE_MODEL_P
842   /* Record the fields for profiling.  */
843   if (PROFILE_MODEL_P (current_cpu))
844     {
845       FLD (out_h_gr_14) = 14;
846     }
847 #endif
848 #undef FLD
849     return idesc;
850   }
851
852  extract_fmt_bl24:
853   {
854     const IDESC *idesc = &m32rbf_insn_data[itype];
855     CGEN_INSN_INT insn = entire_insn;
856 #define FLD(f) abuf->fields.cti.fields.fmt_bl24.f
857   EXTRACT_IFMT_BC24_VARS /* f-op1 f-r1 f-disp24 */
858
859   EXTRACT_IFMT_BC24_CODE
860
861   /* Record the fields for the semantic handler.  */
862   FLD (i_disp24) = f_disp24;
863   SEM_BRANCH_INIT_EXTRACT (abuf);
864   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
865
866 #if WITH_PROFILE_MODEL_P
867   /* Record the fields for profiling.  */
868   if (PROFILE_MODEL_P (current_cpu))
869     {
870       FLD (out_h_gr_14) = 14;
871     }
872 #endif
873 #undef FLD
874     return idesc;
875   }
876
877  extract_fmt_bra8:
878   {
879     const IDESC *idesc = &m32rbf_insn_data[itype];
880     CGEN_INSN_INT insn = entire_insn;
881 #define FLD(f) abuf->fields.cti.fields.fmt_bra8.f
882   EXTRACT_IFMT_BC8_VARS /* f-op1 f-r1 f-disp8 */
883
884   EXTRACT_IFMT_BC8_CODE
885
886   /* Record the fields for the semantic handler.  */
887   FLD (i_disp8) = f_disp8;
888   SEM_BRANCH_INIT_EXTRACT (abuf);
889   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
890
891 #if WITH_PROFILE_MODEL_P
892   /* Record the fields for profiling.  */
893   if (PROFILE_MODEL_P (current_cpu))
894     {
895     }
896 #endif
897 #undef FLD
898     return idesc;
899   }
900
901  extract_fmt_bra24:
902   {
903     const IDESC *idesc = &m32rbf_insn_data[itype];
904     CGEN_INSN_INT insn = entire_insn;
905 #define FLD(f) abuf->fields.cti.fields.fmt_bra24.f
906   EXTRACT_IFMT_BC24_VARS /* f-op1 f-r1 f-disp24 */
907
908   EXTRACT_IFMT_BC24_CODE
909
910   /* Record the fields for the semantic handler.  */
911   FLD (i_disp24) = f_disp24;
912   SEM_BRANCH_INIT_EXTRACT (abuf);
913   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
914
915 #if WITH_PROFILE_MODEL_P
916   /* Record the fields for profiling.  */
917   if (PROFILE_MODEL_P (current_cpu))
918     {
919     }
920 #endif
921 #undef FLD
922     return idesc;
923   }
924
925  extract_fmt_cmp:
926   {
927     const IDESC *idesc = &m32rbf_insn_data[itype];
928     CGEN_INSN_INT insn = entire_insn;
929 #define FLD(f) abuf->fields.fmt_cmp.f
930   EXTRACT_IFMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
931
932   EXTRACT_IFMT_CMP_CODE
933
934   /* Record the fields for the semantic handler.  */
935   FLD (i_src1) = & CPU (h_gr)[f_r1];
936   FLD (i_src2) = & CPU (h_gr)[f_r2];
937   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_cmp", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
938
939 #if WITH_PROFILE_MODEL_P
940   /* Record the fields for profiling.  */
941   if (PROFILE_MODEL_P (current_cpu))
942     {
943       FLD (in_src1) = f_r1;
944       FLD (in_src2) = f_r2;
945     }
946 #endif
947 #undef FLD
948     return idesc;
949   }
950
951  extract_fmt_cmpi:
952   {
953     const IDESC *idesc = &m32rbf_insn_data[itype];
954     CGEN_INSN_INT insn = entire_insn;
955 #define FLD(f) abuf->fields.fmt_cmpi.f
956   EXTRACT_IFMT_CMPI_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
957
958   EXTRACT_IFMT_CMPI_CODE
959
960   /* Record the fields for the semantic handler.  */
961   FLD (f_simm16) = f_simm16;
962   FLD (i_src2) = & CPU (h_gr)[f_r2];
963   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_cmpi", "f_simm16 0x%x", 'x', f_simm16, "src2 0x%x", 'x', f_r2, (char *) 0));
964
965 #if WITH_PROFILE_MODEL_P
966   /* Record the fields for profiling.  */
967   if (PROFILE_MODEL_P (current_cpu))
968     {
969       FLD (in_src2) = f_r2;
970     }
971 #endif
972 #undef FLD
973     return idesc;
974   }
975
976  extract_fmt_div:
977   {
978     const IDESC *idesc = &m32rbf_insn_data[itype];
979     CGEN_INSN_INT insn = entire_insn;
980 #define FLD(f) abuf->fields.fmt_div.f
981   EXTRACT_IFMT_DIV_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
982
983   EXTRACT_IFMT_DIV_CODE
984
985   /* Record the fields for the semantic handler.  */
986   FLD (i_dr) = & CPU (h_gr)[f_r1];
987   FLD (i_sr) = & CPU (h_gr)[f_r2];
988   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_div", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
989
990 #if WITH_PROFILE_MODEL_P
991   /* Record the fields for profiling.  */
992   if (PROFILE_MODEL_P (current_cpu))
993     {
994       FLD (in_dr) = f_r1;
995       FLD (in_sr) = f_r2;
996       FLD (out_dr) = f_r1;
997     }
998 #endif
999 #undef FLD
1000     return idesc;
1001   }
1002
1003  extract_fmt_jl:
1004   {
1005     const IDESC *idesc = &m32rbf_insn_data[itype];
1006     CGEN_INSN_INT insn = entire_insn;
1007 #define FLD(f) abuf->fields.cti.fields.fmt_jl.f
1008   EXTRACT_IFMT_JL_VARS /* f-op1 f-r1 f-op2 f-r2 */
1009
1010   EXTRACT_IFMT_JL_CODE
1011
1012   /* Record the fields for the semantic handler.  */
1013   FLD (i_sr) = & CPU (h_gr)[f_r2];
1014   SEM_BRANCH_INIT_EXTRACT (abuf);
1015   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_jl", "sr 0x%x", 'x', f_r2, (char *) 0));
1016
1017 #if WITH_PROFILE_MODEL_P
1018   /* Record the fields for profiling.  */
1019   if (PROFILE_MODEL_P (current_cpu))
1020     {
1021       FLD (in_sr) = f_r2;
1022       FLD (out_h_gr_14) = 14;
1023     }
1024 #endif
1025 #undef FLD
1026     return idesc;
1027   }
1028
1029  extract_fmt_jmp:
1030   {
1031     const IDESC *idesc = &m32rbf_insn_data[itype];
1032     CGEN_INSN_INT insn = entire_insn;
1033 #define FLD(f) abuf->fields.cti.fields.fmt_jmp.f
1034   EXTRACT_IFMT_JL_VARS /* f-op1 f-r1 f-op2 f-r2 */
1035
1036   EXTRACT_IFMT_JL_CODE
1037
1038   /* Record the fields for the semantic handler.  */
1039   FLD (i_sr) = & CPU (h_gr)[f_r2];
1040   SEM_BRANCH_INIT_EXTRACT (abuf);
1041   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_jmp", "sr 0x%x", 'x', f_r2, (char *) 0));
1042
1043 #if WITH_PROFILE_MODEL_P
1044   /* Record the fields for profiling.  */
1045   if (PROFILE_MODEL_P (current_cpu))
1046     {
1047       FLD (in_sr) = f_r2;
1048     }
1049 #endif
1050 #undef FLD
1051     return idesc;
1052   }
1053
1054  extract_fmt_ld:
1055   {
1056     const IDESC *idesc = &m32rbf_insn_data[itype];
1057     CGEN_INSN_INT insn = entire_insn;
1058 #define FLD(f) abuf->fields.fmt_ld.f
1059   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1060
1061   EXTRACT_IFMT_ADD_CODE
1062
1063   /* Record the fields for the semantic handler.  */
1064   FLD (i_sr) = & CPU (h_gr)[f_r2];
1065   FLD (i_dr) = & CPU (h_gr)[f_r1];
1066   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ld", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1067
1068 #if WITH_PROFILE_MODEL_P
1069   /* Record the fields for profiling.  */
1070   if (PROFILE_MODEL_P (current_cpu))
1071     {
1072       FLD (in_sr) = f_r2;
1073       FLD (out_dr) = f_r1;
1074     }
1075 #endif
1076 #undef FLD
1077     return idesc;
1078   }
1079
1080  extract_fmt_ld_d:
1081   {
1082     const IDESC *idesc = &m32rbf_insn_data[itype];
1083     CGEN_INSN_INT insn = entire_insn;
1084 #define FLD(f) abuf->fields.fmt_ld_d.f
1085   EXTRACT_IFMT_ADD3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1086
1087   EXTRACT_IFMT_ADD3_CODE
1088
1089   /* Record the fields for the semantic handler.  */
1090   FLD (f_simm16) = f_simm16;
1091   FLD (i_sr) = & CPU (h_gr)[f_r2];
1092   FLD (i_dr) = & CPU (h_gr)[f_r1];
1093   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ld_d", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1094
1095 #if WITH_PROFILE_MODEL_P
1096   /* Record the fields for profiling.  */
1097   if (PROFILE_MODEL_P (current_cpu))
1098     {
1099       FLD (in_sr) = f_r2;
1100       FLD (out_dr) = f_r1;
1101     }
1102 #endif
1103 #undef FLD
1104     return idesc;
1105   }
1106
1107  extract_fmt_ldb:
1108   {
1109     const IDESC *idesc = &m32rbf_insn_data[itype];
1110     CGEN_INSN_INT insn = entire_insn;
1111 #define FLD(f) abuf->fields.fmt_ldb.f
1112   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1113
1114   EXTRACT_IFMT_ADD_CODE
1115
1116   /* Record the fields for the semantic handler.  */
1117   FLD (i_sr) = & CPU (h_gr)[f_r2];
1118   FLD (i_dr) = & CPU (h_gr)[f_r1];
1119   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldb", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1120
1121 #if WITH_PROFILE_MODEL_P
1122   /* Record the fields for profiling.  */
1123   if (PROFILE_MODEL_P (current_cpu))
1124     {
1125       FLD (in_sr) = f_r2;
1126       FLD (out_dr) = f_r1;
1127     }
1128 #endif
1129 #undef FLD
1130     return idesc;
1131   }
1132
1133  extract_fmt_ldb_d:
1134   {
1135     const IDESC *idesc = &m32rbf_insn_data[itype];
1136     CGEN_INSN_INT insn = entire_insn;
1137 #define FLD(f) abuf->fields.fmt_ldb_d.f
1138   EXTRACT_IFMT_ADD3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1139
1140   EXTRACT_IFMT_ADD3_CODE
1141
1142   /* Record the fields for the semantic handler.  */
1143   FLD (f_simm16) = f_simm16;
1144   FLD (i_sr) = & CPU (h_gr)[f_r2];
1145   FLD (i_dr) = & CPU (h_gr)[f_r1];
1146   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldb_d", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1147
1148 #if WITH_PROFILE_MODEL_P
1149   /* Record the fields for profiling.  */
1150   if (PROFILE_MODEL_P (current_cpu))
1151     {
1152       FLD (in_sr) = f_r2;
1153       FLD (out_dr) = f_r1;
1154     }
1155 #endif
1156 #undef FLD
1157     return idesc;
1158   }
1159
1160  extract_fmt_ldh:
1161   {
1162     const IDESC *idesc = &m32rbf_insn_data[itype];
1163     CGEN_INSN_INT insn = entire_insn;
1164 #define FLD(f) abuf->fields.fmt_ldh.f
1165   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1166
1167   EXTRACT_IFMT_ADD_CODE
1168
1169   /* Record the fields for the semantic handler.  */
1170   FLD (i_sr) = & CPU (h_gr)[f_r2];
1171   FLD (i_dr) = & CPU (h_gr)[f_r1];
1172   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldh", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1173
1174 #if WITH_PROFILE_MODEL_P
1175   /* Record the fields for profiling.  */
1176   if (PROFILE_MODEL_P (current_cpu))
1177     {
1178       FLD (in_sr) = f_r2;
1179       FLD (out_dr) = f_r1;
1180     }
1181 #endif
1182 #undef FLD
1183     return idesc;
1184   }
1185
1186  extract_fmt_ldh_d:
1187   {
1188     const IDESC *idesc = &m32rbf_insn_data[itype];
1189     CGEN_INSN_INT insn = entire_insn;
1190 #define FLD(f) abuf->fields.fmt_ldh_d.f
1191   EXTRACT_IFMT_ADD3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1192
1193   EXTRACT_IFMT_ADD3_CODE
1194
1195   /* Record the fields for the semantic handler.  */
1196   FLD (f_simm16) = f_simm16;
1197   FLD (i_sr) = & CPU (h_gr)[f_r2];
1198   FLD (i_dr) = & CPU (h_gr)[f_r1];
1199   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldh_d", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1200
1201 #if WITH_PROFILE_MODEL_P
1202   /* Record the fields for profiling.  */
1203   if (PROFILE_MODEL_P (current_cpu))
1204     {
1205       FLD (in_sr) = f_r2;
1206       FLD (out_dr) = f_r1;
1207     }
1208 #endif
1209 #undef FLD
1210     return idesc;
1211   }
1212
1213  extract_fmt_ld_plus:
1214   {
1215     const IDESC *idesc = &m32rbf_insn_data[itype];
1216     CGEN_INSN_INT insn = entire_insn;
1217 #define FLD(f) abuf->fields.fmt_ld_plus.f
1218   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1219
1220   EXTRACT_IFMT_ADD_CODE
1221
1222   /* Record the fields for the semantic handler.  */
1223   FLD (i_sr) = & CPU (h_gr)[f_r2];
1224   FLD (i_dr) = & CPU (h_gr)[f_r1];
1225   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ld_plus", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1226
1227 #if WITH_PROFILE_MODEL_P
1228   /* Record the fields for profiling.  */
1229   if (PROFILE_MODEL_P (current_cpu))
1230     {
1231       FLD (in_sr) = f_r2;
1232       FLD (out_dr) = f_r1;
1233       FLD (out_sr) = f_r2;
1234     }
1235 #endif
1236 #undef FLD
1237     return idesc;
1238   }
1239
1240  extract_fmt_ld24:
1241   {
1242     const IDESC *idesc = &m32rbf_insn_data[itype];
1243     CGEN_INSN_INT insn = entire_insn;
1244 #define FLD(f) abuf->fields.fmt_ld24.f
1245   EXTRACT_IFMT_LD24_VARS /* f-op1 f-r1 f-uimm24 */
1246
1247   EXTRACT_IFMT_LD24_CODE
1248
1249   /* Record the fields for the semantic handler.  */
1250   FLD (i_uimm24) = f_uimm24;
1251   FLD (i_dr) = & CPU (h_gr)[f_r1];
1252   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ld24", "uimm24 0x%x", 'x', f_uimm24, "dr 0x%x", 'x', f_r1, (char *) 0));
1253
1254 #if WITH_PROFILE_MODEL_P
1255   /* Record the fields for profiling.  */
1256   if (PROFILE_MODEL_P (current_cpu))
1257     {
1258       FLD (out_dr) = f_r1;
1259     }
1260 #endif
1261 #undef FLD
1262     return idesc;
1263   }
1264
1265  extract_fmt_ldi8:
1266   {
1267     const IDESC *idesc = &m32rbf_insn_data[itype];
1268     CGEN_INSN_INT insn = entire_insn;
1269 #define FLD(f) abuf->fields.fmt_ldi8.f
1270   EXTRACT_IFMT_ADDI_VARS /* f-op1 f-r1 f-simm8 */
1271
1272   EXTRACT_IFMT_ADDI_CODE
1273
1274   /* Record the fields for the semantic handler.  */
1275   FLD (f_simm8) = f_simm8;
1276   FLD (i_dr) = & CPU (h_gr)[f_r1];
1277   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldi8", "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
1278
1279 #if WITH_PROFILE_MODEL_P
1280   /* Record the fields for profiling.  */
1281   if (PROFILE_MODEL_P (current_cpu))
1282     {
1283       FLD (out_dr) = f_r1;
1284     }
1285 #endif
1286 #undef FLD
1287     return idesc;
1288   }
1289
1290  extract_fmt_ldi16:
1291   {
1292     const IDESC *idesc = &m32rbf_insn_data[itype];
1293     CGEN_INSN_INT insn = entire_insn;
1294 #define FLD(f) abuf->fields.fmt_ldi16.f
1295   EXTRACT_IFMT_LDI16_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1296
1297   EXTRACT_IFMT_LDI16_CODE
1298
1299   /* Record the fields for the semantic handler.  */
1300   FLD (f_simm16) = f_simm16;
1301   FLD (i_dr) = & CPU (h_gr)[f_r1];
1302   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldi16", "f_simm16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
1303
1304 #if WITH_PROFILE_MODEL_P
1305   /* Record the fields for profiling.  */
1306   if (PROFILE_MODEL_P (current_cpu))
1307     {
1308       FLD (out_dr) = f_r1;
1309     }
1310 #endif
1311 #undef FLD
1312     return idesc;
1313   }
1314
1315  extract_fmt_lock:
1316   {
1317     const IDESC *idesc = &m32rbf_insn_data[itype];
1318     CGEN_INSN_INT insn = entire_insn;
1319 #define FLD(f) abuf->fields.fmt_lock.f
1320   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1321
1322   EXTRACT_IFMT_ADD_CODE
1323
1324   /* Record the fields for the semantic handler.  */
1325   FLD (i_sr) = & CPU (h_gr)[f_r2];
1326   FLD (i_dr) = & CPU (h_gr)[f_r1];
1327   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_lock", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1328
1329 #if WITH_PROFILE_MODEL_P
1330   /* Record the fields for profiling.  */
1331   if (PROFILE_MODEL_P (current_cpu))
1332     {
1333       FLD (in_sr) = f_r2;
1334       FLD (out_dr) = f_r1;
1335     }
1336 #endif
1337 #undef FLD
1338     return idesc;
1339   }
1340
1341  extract_fmt_machi:
1342   {
1343     const IDESC *idesc = &m32rbf_insn_data[itype];
1344     CGEN_INSN_INT insn = entire_insn;
1345 #define FLD(f) abuf->fields.fmt_machi.f
1346   EXTRACT_IFMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1347
1348   EXTRACT_IFMT_CMP_CODE
1349
1350   /* Record the fields for the semantic handler.  */
1351   FLD (i_src1) = & CPU (h_gr)[f_r1];
1352   FLD (i_src2) = & CPU (h_gr)[f_r2];
1353   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_machi", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1354
1355 #if WITH_PROFILE_MODEL_P
1356   /* Record the fields for profiling.  */
1357   if (PROFILE_MODEL_P (current_cpu))
1358     {
1359       FLD (in_src1) = f_r1;
1360       FLD (in_src2) = f_r2;
1361     }
1362 #endif
1363 #undef FLD
1364     return idesc;
1365   }
1366
1367  extract_fmt_mulhi:
1368   {
1369     const IDESC *idesc = &m32rbf_insn_data[itype];
1370     CGEN_INSN_INT insn = entire_insn;
1371 #define FLD(f) abuf->fields.fmt_mulhi.f
1372   EXTRACT_IFMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1373
1374   EXTRACT_IFMT_CMP_CODE
1375
1376   /* Record the fields for the semantic handler.  */
1377   FLD (i_src1) = & CPU (h_gr)[f_r1];
1378   FLD (i_src2) = & CPU (h_gr)[f_r2];
1379   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mulhi", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1380
1381 #if WITH_PROFILE_MODEL_P
1382   /* Record the fields for profiling.  */
1383   if (PROFILE_MODEL_P (current_cpu))
1384     {
1385       FLD (in_src1) = f_r1;
1386       FLD (in_src2) = f_r2;
1387     }
1388 #endif
1389 #undef FLD
1390     return idesc;
1391   }
1392
1393  extract_fmt_mv:
1394   {
1395     const IDESC *idesc = &m32rbf_insn_data[itype];
1396     CGEN_INSN_INT insn = entire_insn;
1397 #define FLD(f) abuf->fields.fmt_mv.f
1398   EXTRACT_IFMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1399
1400   EXTRACT_IFMT_ADD_CODE
1401
1402   /* Record the fields for the semantic handler.  */
1403   FLD (i_sr) = & CPU (h_gr)[f_r2];
1404   FLD (i_dr) = & CPU (h_gr)[f_r1];
1405   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mv", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1406
1407 #if WITH_PROFILE_MODEL_P
1408   /* Record the fields for profiling.  */
1409   if (PROFILE_MODEL_P (current_cpu))
1410     {
1411       FLD (in_sr) = f_r2;
1412       FLD (out_dr) = f_r1;
1413     }
1414 #endif
1415 #undef FLD
1416     return idesc;
1417   }
1418
1419  extract_fmt_mvfachi:
1420   {
1421     const IDESC *idesc = &m32rbf_insn_data[itype];
1422     CGEN_INSN_INT insn = entire_insn;
1423 #define FLD(f) abuf->fields.fmt_mvfachi.f
1424   EXTRACT_IFMT_MVFACHI_VARS /* f-op1 f-r1 f-op2 f-r2 */
1425
1426   EXTRACT_IFMT_MVFACHI_CODE
1427
1428   /* Record the fields for the semantic handler.  */
1429   FLD (i_dr) = & CPU (h_gr)[f_r1];
1430   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mvfachi", "dr 0x%x", 'x', f_r1, (char *) 0));
1431
1432 #if WITH_PROFILE_MODEL_P
1433   /* Record the fields for profiling.  */
1434   if (PROFILE_MODEL_P (current_cpu))
1435     {
1436       FLD (out_dr) = f_r1;
1437     }
1438 #endif
1439 #undef FLD
1440     return idesc;
1441   }
1442
1443  extract_fmt_mvfc:
1444   {
1445     const IDESC *idesc = &m32rbf_insn_data[itype];
1446     CGEN_INSN_INT insn = entire_insn;
1447 #define FLD(f) abuf->fields.fmt_mvfc.f
1448   EXTRACT_IFMT_MVFC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1449
1450   EXTRACT_IFMT_MVFC_CODE
1451
1452   /* Record the fields for the semantic handler.  */
1453   FLD (f_r2) = f_r2;
1454   FLD (i_dr) = & CPU (h_gr)[f_r1];
1455   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mvfc", "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1456
1457 #if WITH_PROFILE_MODEL_P
1458   /* Record the fields for profiling.  */
1459   if (PROFILE_MODEL_P (current_cpu))
1460     {
1461       FLD (out_dr) = f_r1;
1462     }
1463 #endif
1464 #undef FLD
1465     return idesc;
1466   }
1467
1468  extract_fmt_mvtachi:
1469   {
1470     const IDESC *idesc = &m32rbf_insn_data[itype];
1471     CGEN_INSN_INT insn = entire_insn;
1472 #define FLD(f) abuf->fields.fmt_mvtachi.f
1473   EXTRACT_IFMT_MVTACHI_VARS /* f-op1 f-r1 f-op2 f-r2 */
1474
1475   EXTRACT_IFMT_MVTACHI_CODE
1476
1477   /* Record the fields for the semantic handler.  */
1478   FLD (i_src1) = & CPU (h_gr)[f_r1];
1479   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mvtachi", "src1 0x%x", 'x', f_r1, (char *) 0));
1480
1481 #if WITH_PROFILE_MODEL_P
1482   /* Record the fields for profiling.  */
1483   if (PROFILE_MODEL_P (current_cpu))
1484     {
1485       FLD (in_src1) = f_r1;
1486     }
1487 #endif
1488 #undef FLD
1489     return idesc;
1490   }
1491
1492  extract_fmt_mvtc:
1493   {
1494     const IDESC *idesc = &m32rbf_insn_data[itype];
1495     CGEN_INSN_INT insn = entire_insn;
1496 #define FLD(f) abuf->fields.fmt_mvtc.f
1497   EXTRACT_IFMT_MVTC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1498
1499   EXTRACT_IFMT_MVTC_CODE
1500
1501   /* Record the fields for the semantic handler.  */
1502   FLD (f_r1) = f_r1;
1503   FLD (i_sr) = & CPU (h_gr)[f_r2];
1504   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mvtc", "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1505
1506 #if WITH_PROFILE_MODEL_P
1507   /* Record the fields for profiling.  */
1508   if (PROFILE_MODEL_P (current_cpu))
1509     {
1510       FLD (in_sr) = f_r2;
1511     }
1512 #endif
1513 #undef FLD
1514     return idesc;
1515   }
1516
1517  extract_fmt_nop:
1518   {
1519     const IDESC *idesc = &m32rbf_insn_data[itype];
1520     CGEN_INSN_INT insn = entire_insn;
1521 #define FLD(f) abuf->fields.fmt_nop.f
1522   EXTRACT_IFMT_NOP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1523
1524   EXTRACT_IFMT_NOP_CODE
1525
1526   /* Record the fields for the semantic handler.  */
1527   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_nop", (char *) 0));
1528
1529 #undef FLD
1530     return idesc;
1531   }
1532
1533  extract_fmt_rac:
1534   {
1535     const IDESC *idesc = &m32rbf_insn_data[itype];
1536     CGEN_INSN_INT insn = entire_insn;
1537 #define FLD(f) abuf->fields.fmt_rac.f
1538   EXTRACT_IFMT_NOP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1539
1540   EXTRACT_IFMT_NOP_CODE
1541
1542   /* Record the fields for the semantic handler.  */
1543   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_rac", (char *) 0));
1544
1545 #undef FLD
1546     return idesc;
1547   }
1548
1549  extract_fmt_rte:
1550   {
1551     const IDESC *idesc = &m32rbf_insn_data[itype];
1552     CGEN_INSN_INT insn = entire_insn;
1553 #define FLD(f) abuf->fields.cti.fields.fmt_rte.f
1554   EXTRACT_IFMT_NOP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1555
1556   EXTRACT_IFMT_NOP_CODE
1557
1558   /* Record the fields for the semantic handler.  */
1559   SEM_BRANCH_INIT_EXTRACT (abuf);
1560   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_rte", (char *) 0));
1561
1562 #if WITH_PROFILE_MODEL_P
1563   /* Record the fields for profiling.  */
1564   if (PROFILE_MODEL_P (current_cpu))
1565     {
1566     }
1567 #endif
1568 #undef FLD
1569     return idesc;
1570   }
1571
1572  extract_fmt_seth:
1573   {
1574     const IDESC *idesc = &m32rbf_insn_data[itype];
1575     CGEN_INSN_INT insn = entire_insn;
1576 #define FLD(f) abuf->fields.fmt_seth.f
1577   EXTRACT_IFMT_SETH_VARS /* f-op1 f-r1 f-op2 f-r2 f-hi16 */
1578
1579   EXTRACT_IFMT_SETH_CODE
1580
1581   /* Record the fields for the semantic handler.  */
1582   FLD (f_hi16) = f_hi16;
1583   FLD (i_dr) = & CPU (h_gr)[f_r1];
1584   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_seth", "f_hi16 0x%x", 'x', f_hi16, "dr 0x%x", 'x', f_r1, (char *) 0));
1585
1586 #if WITH_PROFILE_MODEL_P
1587   /* Record the fields for profiling.  */
1588   if (PROFILE_MODEL_P (current_cpu))
1589     {
1590       FLD (out_dr) = f_r1;
1591     }
1592 #endif
1593 #undef FLD
1594     return idesc;
1595   }
1596
1597  extract_fmt_sll3:
1598   {
1599     const IDESC *idesc = &m32rbf_insn_data[itype];
1600     CGEN_INSN_INT insn = entire_insn;
1601 #define FLD(f) abuf->fields.fmt_sll3.f
1602   EXTRACT_IFMT_ADDV3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1603
1604   EXTRACT_IFMT_ADDV3_CODE
1605
1606   /* Record the fields for the semantic handler.  */
1607   FLD (f_simm16) = f_simm16;
1608   FLD (i_sr) = & CPU (h_gr)[f_r2];
1609   FLD (i_dr) = & CPU (h_gr)[f_r1];
1610   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sll3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1611
1612 #if WITH_PROFILE_MODEL_P
1613   /* Record the fields for profiling.  */
1614   if (PROFILE_MODEL_P (current_cpu))
1615     {
1616       FLD (in_sr) = f_r2;
1617       FLD (out_dr) = f_r1;
1618     }
1619 #endif
1620 #undef FLD
1621     return idesc;
1622   }
1623
1624  extract_fmt_slli:
1625   {
1626     const IDESC *idesc = &m32rbf_insn_data[itype];
1627     CGEN_INSN_INT insn = entire_insn;
1628 #define FLD(f) abuf->fields.fmt_slli.f
1629   EXTRACT_IFMT_SLLI_VARS /* f-op1 f-r1 f-shift-op2 f-uimm5 */
1630
1631   EXTRACT_IFMT_SLLI_CODE
1632
1633   /* Record the fields for the semantic handler.  */
1634   FLD (f_uimm5) = f_uimm5;
1635   FLD (i_dr) = & CPU (h_gr)[f_r1];
1636   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_slli", "f_uimm5 0x%x", 'x', f_uimm5, "dr 0x%x", 'x', f_r1, (char *) 0));
1637
1638 #if WITH_PROFILE_MODEL_P
1639   /* Record the fields for profiling.  */
1640   if (PROFILE_MODEL_P (current_cpu))
1641     {
1642       FLD (in_dr) = f_r1;
1643       FLD (out_dr) = f_r1;
1644     }
1645 #endif
1646 #undef FLD
1647     return idesc;
1648   }
1649
1650  extract_fmt_st:
1651   {
1652     const IDESC *idesc = &m32rbf_insn_data[itype];
1653     CGEN_INSN_INT insn = entire_insn;
1654 #define FLD(f) abuf->fields.fmt_st.f
1655   EXTRACT_IFMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1656
1657   EXTRACT_IFMT_CMP_CODE
1658
1659   /* Record the fields for the semantic handler.  */
1660   FLD (i_src1) = & CPU (h_gr)[f_r1];
1661   FLD (i_src2) = & CPU (h_gr)[f_r2];
1662   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_st", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1663
1664 #if WITH_PROFILE_MODEL_P
1665   /* Record the fields for profiling.  */
1666   if (PROFILE_MODEL_P (current_cpu))
1667     {
1668       FLD (in_src1) = f_r1;
1669       FLD (in_src2) = f_r2;
1670     }
1671 #endif
1672 #undef FLD
1673     return idesc;
1674   }
1675
1676  extract_fmt_st_d:
1677   {
1678     const IDESC *idesc = &m32rbf_insn_data[itype];
1679     CGEN_INSN_INT insn = entire_insn;
1680 #define FLD(f) abuf->fields.fmt_st_d.f
1681   EXTRACT_IFMT_ST_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1682
1683   EXTRACT_IFMT_ST_D_CODE
1684
1685   /* Record the fields for the semantic handler.  */
1686   FLD (f_simm16) = f_simm16;
1687   FLD (i_src1) = & CPU (h_gr)[f_r1];
1688   FLD (i_src2) = & CPU (h_gr)[f_r2];
1689   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_st_d", "f_simm16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1690
1691 #if WITH_PROFILE_MODEL_P
1692   /* Record the fields for profiling.  */
1693   if (PROFILE_MODEL_P (current_cpu))
1694     {
1695       FLD (in_src1) = f_r1;
1696       FLD (in_src2) = f_r2;
1697     }
1698 #endif
1699 #undef FLD
1700     return idesc;
1701   }
1702
1703  extract_fmt_stb:
1704   {
1705     const IDESC *idesc = &m32rbf_insn_data[itype];
1706     CGEN_INSN_INT insn = entire_insn;
1707 #define FLD(f) abuf->fields.fmt_stb.f
1708   EXTRACT_IFMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1709
1710   EXTRACT_IFMT_CMP_CODE
1711
1712   /* Record the fields for the semantic handler.  */
1713   FLD (i_src1) = & CPU (h_gr)[f_r1];
1714   FLD (i_src2) = & CPU (h_gr)[f_r2];
1715   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_stb", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1716
1717 #if WITH_PROFILE_MODEL_P
1718   /* Record the fields for profiling.  */
1719   if (PROFILE_MODEL_P (current_cpu))
1720     {
1721       FLD (in_src1) = f_r1;
1722       FLD (in_src2) = f_r2;
1723     }
1724 #endif
1725 #undef FLD
1726     return idesc;
1727   }
1728
1729  extract_fmt_stb_d:
1730   {
1731     const IDESC *idesc = &m32rbf_insn_data[itype];
1732     CGEN_INSN_INT insn = entire_insn;
1733 #define FLD(f) abuf->fields.fmt_stb_d.f
1734   EXTRACT_IFMT_ST_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1735
1736   EXTRACT_IFMT_ST_D_CODE
1737
1738   /* Record the fields for the semantic handler.  */
1739   FLD (f_simm16) = f_simm16;
1740   FLD (i_src1) = & CPU (h_gr)[f_r1];
1741   FLD (i_src2) = & CPU (h_gr)[f_r2];
1742   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_stb_d", "f_simm16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1743
1744 #if WITH_PROFILE_MODEL_P
1745   /* Record the fields for profiling.  */
1746   if (PROFILE_MODEL_P (current_cpu))
1747     {
1748       FLD (in_src1) = f_r1;
1749       FLD (in_src2) = f_r2;
1750     }
1751 #endif
1752 #undef FLD
1753     return idesc;
1754   }
1755
1756  extract_fmt_sth:
1757   {
1758     const IDESC *idesc = &m32rbf_insn_data[itype];
1759     CGEN_INSN_INT insn = entire_insn;
1760 #define FLD(f) abuf->fields.fmt_sth.f
1761   EXTRACT_IFMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1762
1763   EXTRACT_IFMT_CMP_CODE
1764
1765   /* Record the fields for the semantic handler.  */
1766   FLD (i_src1) = & CPU (h_gr)[f_r1];
1767   FLD (i_src2) = & CPU (h_gr)[f_r2];
1768   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sth", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1769
1770 #if WITH_PROFILE_MODEL_P
1771   /* Record the fields for profiling.  */
1772   if (PROFILE_MODEL_P (current_cpu))
1773     {
1774       FLD (in_src1) = f_r1;
1775       FLD (in_src2) = f_r2;
1776     }
1777 #endif
1778 #undef FLD
1779     return idesc;
1780   }
1781
1782  extract_fmt_sth_d:
1783   {
1784     const IDESC *idesc = &m32rbf_insn_data[itype];
1785     CGEN_INSN_INT insn = entire_insn;
1786 #define FLD(f) abuf->fields.fmt_sth_d.f
1787   EXTRACT_IFMT_ST_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1788
1789   EXTRACT_IFMT_ST_D_CODE
1790
1791   /* Record the fields for the semantic handler.  */
1792   FLD (f_simm16) = f_simm16;
1793   FLD (i_src1) = & CPU (h_gr)[f_r1];
1794   FLD (i_src2) = & CPU (h_gr)[f_r2];
1795   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sth_d", "f_simm16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1796
1797 #if WITH_PROFILE_MODEL_P
1798   /* Record the fields for profiling.  */
1799   if (PROFILE_MODEL_P (current_cpu))
1800     {
1801       FLD (in_src1) = f_r1;
1802       FLD (in_src2) = f_r2;
1803     }
1804 #endif
1805 #undef FLD
1806     return idesc;
1807   }
1808
1809  extract_fmt_st_plus:
1810   {
1811     const IDESC *idesc = &m32rbf_insn_data[itype];
1812     CGEN_INSN_INT insn = entire_insn;
1813 #define FLD(f) abuf->fields.fmt_st_plus.f
1814   EXTRACT_IFMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1815
1816   EXTRACT_IFMT_CMP_CODE
1817
1818   /* Record the fields for the semantic handler.  */
1819   FLD (i_src1) = & CPU (h_gr)[f_r1];
1820   FLD (i_src2) = & CPU (h_gr)[f_r2];
1821   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_st_plus", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1822
1823 #if WITH_PROFILE_MODEL_P
1824   /* Record the fields for profiling.  */
1825   if (PROFILE_MODEL_P (current_cpu))
1826     {
1827       FLD (in_src1) = f_r1;
1828       FLD (in_src2) = f_r2;
1829       FLD (out_src2) = f_r2;
1830     }
1831 #endif
1832 #undef FLD
1833     return idesc;
1834   }
1835
1836  extract_fmt_trap:
1837   {
1838     const IDESC *idesc = &m32rbf_insn_data[itype];
1839     CGEN_INSN_INT insn = entire_insn;
1840 #define FLD(f) abuf->fields.cti.fields.fmt_trap.f
1841   EXTRACT_IFMT_TRAP_VARS /* f-op1 f-r1 f-op2 f-uimm4 */
1842
1843   EXTRACT_IFMT_TRAP_CODE
1844
1845   /* Record the fields for the semantic handler.  */
1846   FLD (f_uimm4) = f_uimm4;
1847   SEM_BRANCH_INIT_EXTRACT (abuf);
1848   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0));
1849
1850 #if WITH_PROFILE_MODEL_P
1851   /* Record the fields for profiling.  */
1852   if (PROFILE_MODEL_P (current_cpu))
1853     {
1854     }
1855 #endif
1856 #undef FLD
1857     return idesc;
1858   }
1859
1860  extract_fmt_unlock:
1861   {
1862     const IDESC *idesc = &m32rbf_insn_data[itype];
1863     CGEN_INSN_INT insn = entire_insn;
1864 #define FLD(f) abuf->fields.fmt_unlock.f
1865   EXTRACT_IFMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1866
1867   EXTRACT_IFMT_CMP_CODE
1868
1869   /* Record the fields for the semantic handler.  */
1870   FLD (i_src1) = & CPU (h_gr)[f_r1];
1871   FLD (i_src2) = & CPU (h_gr)[f_r2];
1872   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_unlock", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1873
1874 #if WITH_PROFILE_MODEL_P
1875   /* Record the fields for profiling.  */
1876   if (PROFILE_MODEL_P (current_cpu))
1877     {
1878       FLD (in_src1) = f_r1;
1879       FLD (in_src2) = f_r2;
1880     }
1881 #endif
1882 #undef FLD
1883     return idesc;
1884   }
1885
1886 }