OSDN Git Service

import gdb-1999-08-09 snapshot
[pf3gnuchains/pf3gnuchains4x.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 /* The instruction descriptor array.
32    This is computed at runtime.  Space for it is not malloc'd to save a
33    teensy bit of cpu in the decoder.  Moving it to malloc space is trivial
34    but won't be done until necessary (we don't currently support the runtime
35    addition of instructions nor an SMP machine with different cpus).  */
36 static IDESC m32rbf_insn_data[M32RBF_INSN_MAX];
37
38 /* Commas between elements are contained in the macros.
39    Some of these are conditionally compiled out.  */
40
41 static const struct insn_sem m32rbf_insn_sem[] =
42 {
43   { VIRTUAL_INSN_X_INVALID, M32RBF_INSN_X_INVALID, M32RBF_SFMT_EMPTY },
44   { VIRTUAL_INSN_X_AFTER, M32RBF_INSN_X_AFTER, M32RBF_SFMT_EMPTY },
45   { VIRTUAL_INSN_X_BEFORE, M32RBF_INSN_X_BEFORE, M32RBF_SFMT_EMPTY },
46   { VIRTUAL_INSN_X_CTI_CHAIN, M32RBF_INSN_X_CTI_CHAIN, M32RBF_SFMT_EMPTY },
47   { VIRTUAL_INSN_X_CHAIN, M32RBF_INSN_X_CHAIN, M32RBF_SFMT_EMPTY },
48   { VIRTUAL_INSN_X_BEGIN, M32RBF_INSN_X_BEGIN, M32RBF_SFMT_EMPTY },
49   { M32R_INSN_ADD, M32RBF_INSN_ADD, M32RBF_SFMT_ADD },
50   { M32R_INSN_ADD3, M32RBF_INSN_ADD3, M32RBF_SFMT_ADD3 },
51   { M32R_INSN_AND, M32RBF_INSN_AND, M32RBF_SFMT_ADD },
52   { M32R_INSN_AND3, M32RBF_INSN_AND3, M32RBF_SFMT_AND3 },
53   { M32R_INSN_OR, M32RBF_INSN_OR, M32RBF_SFMT_ADD },
54   { M32R_INSN_OR3, M32RBF_INSN_OR3, M32RBF_SFMT_OR3 },
55   { M32R_INSN_XOR, M32RBF_INSN_XOR, M32RBF_SFMT_ADD },
56   { M32R_INSN_XOR3, M32RBF_INSN_XOR3, M32RBF_SFMT_AND3 },
57   { M32R_INSN_ADDI, M32RBF_INSN_ADDI, M32RBF_SFMT_ADDI },
58   { M32R_INSN_ADDV, M32RBF_INSN_ADDV, M32RBF_SFMT_ADDV },
59   { M32R_INSN_ADDV3, M32RBF_INSN_ADDV3, M32RBF_SFMT_ADDV3 },
60   { M32R_INSN_ADDX, M32RBF_INSN_ADDX, M32RBF_SFMT_ADDX },
61   { M32R_INSN_BC8, M32RBF_INSN_BC8, M32RBF_SFMT_BC8 },
62   { M32R_INSN_BC24, M32RBF_INSN_BC24, M32RBF_SFMT_BC24 },
63   { M32R_INSN_BEQ, M32RBF_INSN_BEQ, M32RBF_SFMT_BEQ },
64   { M32R_INSN_BEQZ, M32RBF_INSN_BEQZ, M32RBF_SFMT_BEQZ },
65   { M32R_INSN_BGEZ, M32RBF_INSN_BGEZ, M32RBF_SFMT_BEQZ },
66   { M32R_INSN_BGTZ, M32RBF_INSN_BGTZ, M32RBF_SFMT_BEQZ },
67   { M32R_INSN_BLEZ, M32RBF_INSN_BLEZ, M32RBF_SFMT_BEQZ },
68   { M32R_INSN_BLTZ, M32RBF_INSN_BLTZ, M32RBF_SFMT_BEQZ },
69   { M32R_INSN_BNEZ, M32RBF_INSN_BNEZ, M32RBF_SFMT_BEQZ },
70   { M32R_INSN_BL8, M32RBF_INSN_BL8, M32RBF_SFMT_BL8 },
71   { M32R_INSN_BL24, M32RBF_INSN_BL24, M32RBF_SFMT_BL24 },
72   { M32R_INSN_BNC8, M32RBF_INSN_BNC8, M32RBF_SFMT_BC8 },
73   { M32R_INSN_BNC24, M32RBF_INSN_BNC24, M32RBF_SFMT_BC24 },
74   { M32R_INSN_BNE, M32RBF_INSN_BNE, M32RBF_SFMT_BEQ },
75   { M32R_INSN_BRA8, M32RBF_INSN_BRA8, M32RBF_SFMT_BRA8 },
76   { M32R_INSN_BRA24, M32RBF_INSN_BRA24, M32RBF_SFMT_BRA24 },
77   { M32R_INSN_CMP, M32RBF_INSN_CMP, M32RBF_SFMT_CMP },
78   { M32R_INSN_CMPI, M32RBF_INSN_CMPI, M32RBF_SFMT_CMPI },
79   { M32R_INSN_CMPU, M32RBF_INSN_CMPU, M32RBF_SFMT_CMP },
80   { M32R_INSN_CMPUI, M32RBF_INSN_CMPUI, M32RBF_SFMT_CMPI },
81   { M32R_INSN_DIV, M32RBF_INSN_DIV, M32RBF_SFMT_DIV },
82   { M32R_INSN_DIVU, M32RBF_INSN_DIVU, M32RBF_SFMT_DIV },
83   { M32R_INSN_REM, M32RBF_INSN_REM, M32RBF_SFMT_DIV },
84   { M32R_INSN_REMU, M32RBF_INSN_REMU, M32RBF_SFMT_DIV },
85   { M32R_INSN_JL, M32RBF_INSN_JL, M32RBF_SFMT_JL },
86   { M32R_INSN_JMP, M32RBF_INSN_JMP, M32RBF_SFMT_JMP },
87   { M32R_INSN_LD, M32RBF_INSN_LD, M32RBF_SFMT_LD },
88   { M32R_INSN_LD_D, M32RBF_INSN_LD_D, M32RBF_SFMT_LD_D },
89   { M32R_INSN_LDB, M32RBF_INSN_LDB, M32RBF_SFMT_LD },
90   { M32R_INSN_LDB_D, M32RBF_INSN_LDB_D, M32RBF_SFMT_LD_D },
91   { M32R_INSN_LDH, M32RBF_INSN_LDH, M32RBF_SFMT_LD },
92   { M32R_INSN_LDH_D, M32RBF_INSN_LDH_D, M32RBF_SFMT_LD_D },
93   { M32R_INSN_LDUB, M32RBF_INSN_LDUB, M32RBF_SFMT_LD },
94   { M32R_INSN_LDUB_D, M32RBF_INSN_LDUB_D, M32RBF_SFMT_LD_D },
95   { M32R_INSN_LDUH, M32RBF_INSN_LDUH, M32RBF_SFMT_LD },
96   { M32R_INSN_LDUH_D, M32RBF_INSN_LDUH_D, M32RBF_SFMT_LD_D },
97   { M32R_INSN_LD_PLUS, M32RBF_INSN_LD_PLUS, M32RBF_SFMT_LD_PLUS },
98   { M32R_INSN_LD24, M32RBF_INSN_LD24, M32RBF_SFMT_LD24 },
99   { M32R_INSN_LDI8, M32RBF_INSN_LDI8, M32RBF_SFMT_LDI8 },
100   { M32R_INSN_LDI16, M32RBF_INSN_LDI16, M32RBF_SFMT_LDI16 },
101   { M32R_INSN_LOCK, M32RBF_INSN_LOCK, M32RBF_SFMT_LOCK },
102   { M32R_INSN_MACHI, M32RBF_INSN_MACHI, M32RBF_SFMT_MACHI },
103   { M32R_INSN_MACLO, M32RBF_INSN_MACLO, M32RBF_SFMT_MACHI },
104   { M32R_INSN_MACWHI, M32RBF_INSN_MACWHI, M32RBF_SFMT_MACHI },
105   { M32R_INSN_MACWLO, M32RBF_INSN_MACWLO, M32RBF_SFMT_MACHI },
106   { M32R_INSN_MUL, M32RBF_INSN_MUL, M32RBF_SFMT_ADD },
107   { M32R_INSN_MULHI, M32RBF_INSN_MULHI, M32RBF_SFMT_MULHI },
108   { M32R_INSN_MULLO, M32RBF_INSN_MULLO, M32RBF_SFMT_MULHI },
109   { M32R_INSN_MULWHI, M32RBF_INSN_MULWHI, M32RBF_SFMT_MULHI },
110   { M32R_INSN_MULWLO, M32RBF_INSN_MULWLO, M32RBF_SFMT_MULHI },
111   { M32R_INSN_MV, M32RBF_INSN_MV, M32RBF_SFMT_MV },
112   { M32R_INSN_MVFACHI, M32RBF_INSN_MVFACHI, M32RBF_SFMT_MVFACHI },
113   { M32R_INSN_MVFACLO, M32RBF_INSN_MVFACLO, M32RBF_SFMT_MVFACHI },
114   { M32R_INSN_MVFACMI, M32RBF_INSN_MVFACMI, M32RBF_SFMT_MVFACHI },
115   { M32R_INSN_MVFC, M32RBF_INSN_MVFC, M32RBF_SFMT_MVFC },
116   { M32R_INSN_MVTACHI, M32RBF_INSN_MVTACHI, M32RBF_SFMT_MVTACHI },
117   { M32R_INSN_MVTACLO, M32RBF_INSN_MVTACLO, M32RBF_SFMT_MVTACHI },
118   { M32R_INSN_MVTC, M32RBF_INSN_MVTC, M32RBF_SFMT_MVTC },
119   { M32R_INSN_NEG, M32RBF_INSN_NEG, M32RBF_SFMT_MV },
120   { M32R_INSN_NOP, M32RBF_INSN_NOP, M32RBF_SFMT_NOP },
121   { M32R_INSN_NOT, M32RBF_INSN_NOT, M32RBF_SFMT_MV },
122   { M32R_INSN_RAC, M32RBF_INSN_RAC, M32RBF_SFMT_RAC },
123   { M32R_INSN_RACH, M32RBF_INSN_RACH, M32RBF_SFMT_RAC },
124   { M32R_INSN_RTE, M32RBF_INSN_RTE, M32RBF_SFMT_RTE },
125   { M32R_INSN_SETH, M32RBF_INSN_SETH, M32RBF_SFMT_SETH },
126   { M32R_INSN_SLL, M32RBF_INSN_SLL, M32RBF_SFMT_ADD },
127   { M32R_INSN_SLL3, M32RBF_INSN_SLL3, M32RBF_SFMT_SLL3 },
128   { M32R_INSN_SLLI, M32RBF_INSN_SLLI, M32RBF_SFMT_SLLI },
129   { M32R_INSN_SRA, M32RBF_INSN_SRA, M32RBF_SFMT_ADD },
130   { M32R_INSN_SRA3, M32RBF_INSN_SRA3, M32RBF_SFMT_SLL3 },
131   { M32R_INSN_SRAI, M32RBF_INSN_SRAI, M32RBF_SFMT_SLLI },
132   { M32R_INSN_SRL, M32RBF_INSN_SRL, M32RBF_SFMT_ADD },
133   { M32R_INSN_SRL3, M32RBF_INSN_SRL3, M32RBF_SFMT_SLL3 },
134   { M32R_INSN_SRLI, M32RBF_INSN_SRLI, M32RBF_SFMT_SLLI },
135   { M32R_INSN_ST, M32RBF_INSN_ST, M32RBF_SFMT_ST },
136   { M32R_INSN_ST_D, M32RBF_INSN_ST_D, M32RBF_SFMT_ST_D },
137   { M32R_INSN_STB, M32RBF_INSN_STB, M32RBF_SFMT_STB },
138   { M32R_INSN_STB_D, M32RBF_INSN_STB_D, M32RBF_SFMT_STB_D },
139   { M32R_INSN_STH, M32RBF_INSN_STH, M32RBF_SFMT_STH },
140   { M32R_INSN_STH_D, M32RBF_INSN_STH_D, M32RBF_SFMT_STH_D },
141   { M32R_INSN_ST_PLUS, M32RBF_INSN_ST_PLUS, M32RBF_SFMT_ST_PLUS },
142   { M32R_INSN_ST_MINUS, M32RBF_INSN_ST_MINUS, M32RBF_SFMT_ST_PLUS },
143   { M32R_INSN_SUB, M32RBF_INSN_SUB, M32RBF_SFMT_ADD },
144   { M32R_INSN_SUBV, M32RBF_INSN_SUBV, M32RBF_SFMT_ADDV },
145   { M32R_INSN_SUBX, M32RBF_INSN_SUBX, M32RBF_SFMT_ADDX },
146   { M32R_INSN_TRAP, M32RBF_INSN_TRAP, M32RBF_SFMT_TRAP },
147   { M32R_INSN_UNLOCK, M32RBF_INSN_UNLOCK, M32RBF_SFMT_UNLOCK },
148 };
149
150 static const struct insn_sem m32rbf_insn_sem_invalid = {
151   VIRTUAL_INSN_X_INVALID, M32RBF_INSN_X_INVALID, M32RBF_SFMT_EMPTY
152 };
153
154 /* Initialize an IDESC from the compile-time computable parts.  */
155
156 static INLINE void
157 init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
158 {
159   const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;
160
161   id->num = t->index;
162   id->sfmt = t->sfmt;
163   if ((int) t->type <= 0)
164     id->idata = & cgen_virtual_insn_table[- (int) t->type];
165   else
166     id->idata = & insn_table[t->type];
167   id->attrs = CGEN_INSN_ATTRS (id->idata);
168   /* Oh my god, a magic number.  */
169   id->length = CGEN_INSN_BITSIZE (id->idata) / 8;
170
171 #if WITH_PROFILE_MODEL_P
172   id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
173   {
174     SIM_DESC sd = CPU_STATE (cpu);
175     SIM_ASSERT (t->index == id->timing->num);
176   }
177 #endif
178
179   /* Semantic pointers are initialized elsewhere.  */
180 }
181
182 /* Initialize the instruction descriptor table.  */
183
184 void
185 m32rbf_init_idesc_table (SIM_CPU *cpu)
186 {
187   IDESC *id,*tabend;
188   const struct insn_sem *t,*tend;
189   int tabsize = M32RBF_INSN_MAX;
190   IDESC *table = m32rbf_insn_data;
191
192   memset (table, 0, tabsize * sizeof (IDESC));
193
194   /* First set all entries to the `invalid insn'.  */
195   t = & m32rbf_insn_sem_invalid;
196   for (id = table, tabend = table + tabsize; id < tabend; ++id)
197     init_idesc (cpu, id, t);
198
199   /* Now fill in the values for the chosen cpu.  */
200   for (t = m32rbf_insn_sem, tend = t + sizeof (m32rbf_insn_sem) / sizeof (*t);
201        t != tend; ++t)
202     {
203       init_idesc (cpu, & table[t->index], t);
204     }
205
206   /* Link the IDESC table into the cpu.  */
207   CPU_IDESC (cpu) = table;
208 }
209
210 /* Given an instruction, return a pointer to its IDESC entry.  */
211
212 const IDESC *
213 m32rbf_decode (SIM_CPU *current_cpu, IADDR pc,
214               CGEN_INSN_INT base_insn, CGEN_INSN_INT entire_insn,
215               ARGBUF *abuf)
216 {
217   /* Result of decoder.  */
218   M32RBF_INSN_TYPE itype;
219
220   {
221     CGEN_INSN_INT insn = base_insn;
222
223     {
224       unsigned int val = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0)));
225       switch (val)
226       {
227       case 0 : itype = M32RBF_INSN_SUBV; goto extract_sfmt_addv;
228       case 1 : itype = M32RBF_INSN_SUBX; goto extract_sfmt_addx;
229       case 2 : itype = M32RBF_INSN_SUB; goto extract_sfmt_add;
230       case 3 : itype = M32RBF_INSN_NEG; goto extract_sfmt_mv;
231       case 4 : itype = M32RBF_INSN_CMP; goto extract_sfmt_cmp;
232       case 5 : itype = M32RBF_INSN_CMPU; goto extract_sfmt_cmp;
233       case 8 : itype = M32RBF_INSN_ADDV; goto extract_sfmt_addv;
234       case 9 : itype = M32RBF_INSN_ADDX; goto extract_sfmt_addx;
235       case 10 : itype = M32RBF_INSN_ADD; goto extract_sfmt_add;
236       case 11 : itype = M32RBF_INSN_NOT; goto extract_sfmt_mv;
237       case 12 : itype = M32RBF_INSN_AND; goto extract_sfmt_add;
238       case 13 : itype = M32RBF_INSN_XOR; goto extract_sfmt_add;
239       case 14 : itype = M32RBF_INSN_OR; goto extract_sfmt_add;
240       case 16 : itype = M32RBF_INSN_SRL; goto extract_sfmt_add;
241       case 18 : itype = M32RBF_INSN_SRA; goto extract_sfmt_add;
242       case 20 : itype = M32RBF_INSN_SLL; goto extract_sfmt_add;
243       case 22 : itype = M32RBF_INSN_MUL; goto extract_sfmt_add;
244       case 24 : itype = M32RBF_INSN_MV; goto extract_sfmt_mv;
245       case 25 : itype = M32RBF_INSN_MVFC; goto extract_sfmt_mvfc;
246       case 26 : itype = M32RBF_INSN_MVTC; goto extract_sfmt_mvtc;
247       case 28 :
248         {
249           unsigned int val = (((insn >> 8) & (15 << 0)));
250           switch (val)
251           {
252           case 14 : itype = M32RBF_INSN_JL; goto extract_sfmt_jl;
253           case 15 : itype = M32RBF_INSN_JMP; goto extract_sfmt_jmp;
254           default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
255           }
256         }
257       case 29 : itype = M32RBF_INSN_RTE; goto extract_sfmt_rte;
258       case 31 : itype = M32RBF_INSN_TRAP; goto extract_sfmt_trap;
259       case 32 : itype = M32RBF_INSN_STB; goto extract_sfmt_stb;
260       case 34 : itype = M32RBF_INSN_STH; goto extract_sfmt_sth;
261       case 36 : itype = M32RBF_INSN_ST; goto extract_sfmt_st;
262       case 37 : itype = M32RBF_INSN_UNLOCK; goto extract_sfmt_unlock;
263       case 38 : itype = M32RBF_INSN_ST_PLUS; goto extract_sfmt_st_plus;
264       case 39 : itype = M32RBF_INSN_ST_MINUS; goto extract_sfmt_st_plus;
265       case 40 : itype = M32RBF_INSN_LDB; goto extract_sfmt_ld;
266       case 41 : itype = M32RBF_INSN_LDUB; goto extract_sfmt_ld;
267       case 42 : itype = M32RBF_INSN_LDH; goto extract_sfmt_ld;
268       case 43 : itype = M32RBF_INSN_LDUH; goto extract_sfmt_ld;
269       case 44 : itype = M32RBF_INSN_LD; goto extract_sfmt_ld;
270       case 45 : itype = M32RBF_INSN_LOCK; goto extract_sfmt_lock;
271       case 46 : itype = M32RBF_INSN_LD_PLUS; goto extract_sfmt_ld_plus;
272       case 48 : itype = M32RBF_INSN_MULHI; goto extract_sfmt_mulhi;
273       case 49 : itype = M32RBF_INSN_MULLO; goto extract_sfmt_mulhi;
274       case 50 : itype = M32RBF_INSN_MULWHI; goto extract_sfmt_mulhi;
275       case 51 : itype = M32RBF_INSN_MULWLO; goto extract_sfmt_mulhi;
276       case 52 : itype = M32RBF_INSN_MACHI; goto extract_sfmt_machi;
277       case 53 : itype = M32RBF_INSN_MACLO; goto extract_sfmt_machi;
278       case 54 : itype = M32RBF_INSN_MACWHI; goto extract_sfmt_machi;
279       case 55 : itype = M32RBF_INSN_MACWLO; goto extract_sfmt_machi;
280       case 64 : /* fall through */
281       case 65 : /* fall through */
282       case 66 : /* fall through */
283       case 67 : /* fall through */
284       case 68 : /* fall through */
285       case 69 : /* fall through */
286       case 70 : /* fall through */
287       case 71 : /* fall through */
288       case 72 : /* fall through */
289       case 73 : /* fall through */
290       case 74 : /* fall through */
291       case 75 : /* fall through */
292       case 76 : /* fall through */
293       case 77 : /* fall through */
294       case 78 : /* fall through */
295       case 79 : itype = M32RBF_INSN_ADDI; goto extract_sfmt_addi;
296       case 80 : /* fall through */
297       case 81 : itype = M32RBF_INSN_SRLI; goto extract_sfmt_slli;
298       case 82 : /* fall through */
299       case 83 : itype = M32RBF_INSN_SRAI; goto extract_sfmt_slli;
300       case 84 : /* fall through */
301       case 85 : itype = M32RBF_INSN_SLLI; goto extract_sfmt_slli;
302       case 87 :
303         {
304           unsigned int val = (((insn >> 0) & (15 << 0)));
305           switch (val)
306           {
307           case 0 : itype = M32RBF_INSN_MVTACHI; goto extract_sfmt_mvtachi;
308           case 1 : itype = M32RBF_INSN_MVTACLO; goto extract_sfmt_mvtachi;
309           default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
310           }
311         }
312       case 88 : itype = M32RBF_INSN_RACH; goto extract_sfmt_rac;
313       case 89 : itype = M32RBF_INSN_RAC; goto extract_sfmt_rac;
314       case 95 :
315         {
316           unsigned int val = (((insn >> 0) & (15 << 0)));
317           switch (val)
318           {
319           case 0 : itype = M32RBF_INSN_MVFACHI; goto extract_sfmt_mvfachi;
320           case 1 : itype = M32RBF_INSN_MVFACLO; goto extract_sfmt_mvfachi;
321           case 2 : itype = M32RBF_INSN_MVFACMI; goto extract_sfmt_mvfachi;
322           default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
323           }
324         }
325       case 96 : /* fall through */
326       case 97 : /* fall through */
327       case 98 : /* fall through */
328       case 99 : /* fall through */
329       case 100 : /* fall through */
330       case 101 : /* fall through */
331       case 102 : /* fall through */
332       case 103 : /* fall through */
333       case 104 : /* fall through */
334       case 105 : /* fall through */
335       case 106 : /* fall through */
336       case 107 : /* fall through */
337       case 108 : /* fall through */
338       case 109 : /* fall through */
339       case 110 : /* fall through */
340       case 111 : itype = M32RBF_INSN_LDI8; goto extract_sfmt_ldi8;
341       case 112 :
342         {
343           unsigned int val = (((insn >> 8) & (15 << 0)));
344           switch (val)
345           {
346           case 0 : itype = M32RBF_INSN_NOP; goto extract_sfmt_nop;
347           case 12 : itype = M32RBF_INSN_BC8; goto extract_sfmt_bc8;
348           case 13 : itype = M32RBF_INSN_BNC8; goto extract_sfmt_bc8;
349           case 14 : itype = M32RBF_INSN_BL8; goto extract_sfmt_bl8;
350           case 15 : itype = M32RBF_INSN_BRA8; goto extract_sfmt_bra8;
351           default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
352           }
353         }
354       case 113 : /* fall through */
355       case 114 : /* fall through */
356       case 115 : /* fall through */
357       case 116 : /* fall through */
358       case 117 : /* fall through */
359       case 118 : /* fall through */
360       case 119 : /* fall through */
361       case 120 : /* fall through */
362       case 121 : /* fall through */
363       case 122 : /* fall through */
364       case 123 : /* fall through */
365       case 124 : /* fall through */
366       case 125 : /* fall through */
367       case 126 : /* fall through */
368       case 127 :
369         {
370           unsigned int val = (((insn >> 8) & (15 << 0)));
371           switch (val)
372           {
373           case 12 : itype = M32RBF_INSN_BC8; goto extract_sfmt_bc8;
374           case 13 : itype = M32RBF_INSN_BNC8; goto extract_sfmt_bc8;
375           case 14 : itype = M32RBF_INSN_BL8; goto extract_sfmt_bl8;
376           case 15 : itype = M32RBF_INSN_BRA8; goto extract_sfmt_bra8;
377           default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
378           }
379         }
380       case 132 : itype = M32RBF_INSN_CMPI; goto extract_sfmt_cmpi;
381       case 133 : itype = M32RBF_INSN_CMPUI; goto extract_sfmt_cmpi;
382       case 136 : itype = M32RBF_INSN_ADDV3; goto extract_sfmt_addv3;
383       case 138 : itype = M32RBF_INSN_ADD3; goto extract_sfmt_add3;
384       case 140 : itype = M32RBF_INSN_AND3; goto extract_sfmt_and3;
385       case 141 : itype = M32RBF_INSN_XOR3; goto extract_sfmt_and3;
386       case 142 : itype = M32RBF_INSN_OR3; goto extract_sfmt_or3;
387       case 144 : itype = M32RBF_INSN_DIV; goto extract_sfmt_div;
388       case 145 : itype = M32RBF_INSN_DIVU; goto extract_sfmt_div;
389       case 146 : itype = M32RBF_INSN_REM; goto extract_sfmt_div;
390       case 147 : itype = M32RBF_INSN_REMU; goto extract_sfmt_div;
391       case 152 : itype = M32RBF_INSN_SRL3; goto extract_sfmt_sll3;
392       case 154 : itype = M32RBF_INSN_SRA3; goto extract_sfmt_sll3;
393       case 156 : itype = M32RBF_INSN_SLL3; goto extract_sfmt_sll3;
394       case 159 : itype = M32RBF_INSN_LDI16; goto extract_sfmt_ldi16;
395       case 160 : itype = M32RBF_INSN_STB_D; goto extract_sfmt_stb_d;
396       case 162 : itype = M32RBF_INSN_STH_D; goto extract_sfmt_sth_d;
397       case 164 : itype = M32RBF_INSN_ST_D; goto extract_sfmt_st_d;
398       case 168 : itype = M32RBF_INSN_LDB_D; goto extract_sfmt_ld_d;
399       case 169 : itype = M32RBF_INSN_LDUB_D; goto extract_sfmt_ld_d;
400       case 170 : itype = M32RBF_INSN_LDH_D; goto extract_sfmt_ld_d;
401       case 171 : itype = M32RBF_INSN_LDUH_D; goto extract_sfmt_ld_d;
402       case 172 : itype = M32RBF_INSN_LD_D; goto extract_sfmt_ld_d;
403       case 176 : itype = M32RBF_INSN_BEQ; goto extract_sfmt_beq;
404       case 177 : itype = M32RBF_INSN_BNE; goto extract_sfmt_beq;
405       case 184 : itype = M32RBF_INSN_BEQZ; goto extract_sfmt_beqz;
406       case 185 : itype = M32RBF_INSN_BNEZ; goto extract_sfmt_beqz;
407       case 186 : itype = M32RBF_INSN_BLTZ; goto extract_sfmt_beqz;
408       case 187 : itype = M32RBF_INSN_BGEZ; goto extract_sfmt_beqz;
409       case 188 : itype = M32RBF_INSN_BLEZ; goto extract_sfmt_beqz;
410       case 189 : itype = M32RBF_INSN_BGTZ; goto extract_sfmt_beqz;
411       case 220 : itype = M32RBF_INSN_SETH; goto extract_sfmt_seth;
412       case 224 : /* fall through */
413       case 225 : /* fall through */
414       case 226 : /* fall through */
415       case 227 : /* fall through */
416       case 228 : /* fall through */
417       case 229 : /* fall through */
418       case 230 : /* fall through */
419       case 231 : /* fall through */
420       case 232 : /* fall through */
421       case 233 : /* fall through */
422       case 234 : /* fall through */
423       case 235 : /* fall through */
424       case 236 : /* fall through */
425       case 237 : /* fall through */
426       case 238 : /* fall through */
427       case 239 : itype = M32RBF_INSN_LD24; goto extract_sfmt_ld24;
428       case 240 : /* fall through */
429       case 241 : /* fall through */
430       case 242 : /* fall through */
431       case 243 : /* fall through */
432       case 244 : /* fall through */
433       case 245 : /* fall through */
434       case 246 : /* fall through */
435       case 247 : /* fall through */
436       case 248 : /* fall through */
437       case 249 : /* fall through */
438       case 250 : /* fall through */
439       case 251 : /* fall through */
440       case 252 : /* fall through */
441       case 253 : /* fall through */
442       case 254 : /* fall through */
443       case 255 :
444         {
445           unsigned int val = (((insn >> 8) & (15 << 0)));
446           switch (val)
447           {
448           case 12 : itype = M32RBF_INSN_BC24; goto extract_sfmt_bc24;
449           case 13 : itype = M32RBF_INSN_BNC24; goto extract_sfmt_bc24;
450           case 14 : itype = M32RBF_INSN_BL24; goto extract_sfmt_bl24;
451           case 15 : itype = M32RBF_INSN_BRA24; goto extract_sfmt_bra24;
452           default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
453           }
454         }
455       default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
456       }
457     }
458   }
459
460   /* The instruction has been decoded, now extract the fields.  */
461
462  extract_sfmt_empty:
463   {
464     const IDESC *idesc = &m32rbf_insn_data[itype];
465     CGEN_INSN_INT insn = entire_insn;
466 #define FLD(f) abuf->fields.fmt_empty.f
467
468
469   /* Record the fields for the semantic handler.  */
470   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0));
471
472 #undef FLD
473     return idesc;
474   }
475
476  extract_sfmt_add:
477   {
478     const IDESC *idesc = &m32rbf_insn_data[itype];
479     CGEN_INSN_INT insn = entire_insn;
480 #define FLD(f) abuf->fields.sfmt_add.f
481     UINT f_r1;
482     UINT f_r2;
483
484     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
485     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
486
487   /* Record the fields for the semantic handler.  */
488   FLD (i_dr) = & CPU (h_gr)[f_r1];
489   FLD (i_sr) = & CPU (h_gr)[f_r2];
490   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
491
492 #if WITH_PROFILE_MODEL_P
493   /* Record the fields for profiling.  */
494   if (PROFILE_MODEL_P (current_cpu))
495     {
496       FLD (in_dr) = f_r1;
497       FLD (in_sr) = f_r2;
498       FLD (out_dr) = f_r1;
499     }
500 #endif
501 #undef FLD
502     return idesc;
503   }
504
505  extract_sfmt_add3:
506   {
507     const IDESC *idesc = &m32rbf_insn_data[itype];
508     CGEN_INSN_INT insn = entire_insn;
509 #define FLD(f) abuf->fields.sfmt_add3.f
510     UINT f_r1;
511     UINT f_r2;
512     INT f_simm16;
513
514     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
515     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
516     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
517
518   /* Record the fields for the semantic handler.  */
519   FLD (f_simm16) = f_simm16;
520   FLD (i_sr) = & CPU (h_gr)[f_r2];
521   FLD (i_dr) = & CPU (h_gr)[f_r1];
522   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (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_sr) = f_r2;
529       FLD (out_dr) = f_r1;
530     }
531 #endif
532 #undef FLD
533     return idesc;
534   }
535
536  extract_sfmt_and3:
537   {
538     const IDESC *idesc = &m32rbf_insn_data[itype];
539     CGEN_INSN_INT insn = entire_insn;
540 #define FLD(f) abuf->fields.sfmt_and3.f
541     UINT f_r1;
542     UINT f_r2;
543     UINT f_uimm16;
544
545     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
546     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
547     f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
548
549   /* Record the fields for the semantic handler.  */
550   FLD (f_uimm16) = f_uimm16;
551   FLD (i_sr) = & CPU (h_gr)[f_r2];
552   FLD (i_dr) = & CPU (h_gr)[f_r1];
553   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and3", "f_uimm16 0x%x", 'x', f_uimm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
554
555 #if WITH_PROFILE_MODEL_P
556   /* Record the fields for profiling.  */
557   if (PROFILE_MODEL_P (current_cpu))
558     {
559       FLD (in_sr) = f_r2;
560       FLD (out_dr) = f_r1;
561     }
562 #endif
563 #undef FLD
564     return idesc;
565   }
566
567  extract_sfmt_or3:
568   {
569     const IDESC *idesc = &m32rbf_insn_data[itype];
570     CGEN_INSN_INT insn = entire_insn;
571 #define FLD(f) abuf->fields.sfmt_and3.f
572     UINT f_r1;
573     UINT f_r2;
574     UINT f_uimm16;
575
576     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
577     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
578     f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
579
580   /* Record the fields for the semantic handler.  */
581   FLD (f_uimm16) = f_uimm16;
582   FLD (i_sr) = & CPU (h_gr)[f_r2];
583   FLD (i_dr) = & CPU (h_gr)[f_r1];
584   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_or3", "f_uimm16 0x%x", 'x', f_uimm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
585
586 #if WITH_PROFILE_MODEL_P
587   /* Record the fields for profiling.  */
588   if (PROFILE_MODEL_P (current_cpu))
589     {
590       FLD (in_sr) = f_r2;
591       FLD (out_dr) = f_r1;
592     }
593 #endif
594 #undef FLD
595     return idesc;
596   }
597
598  extract_sfmt_addi:
599   {
600     const IDESC *idesc = &m32rbf_insn_data[itype];
601     CGEN_INSN_INT insn = entire_insn;
602 #define FLD(f) abuf->fields.sfmt_addi.f
603     UINT f_r1;
604     INT f_simm8;
605
606     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
607     f_simm8 = EXTRACT_MSB0_INT (insn, 16, 8, 8);
608
609   /* Record the fields for the semantic handler.  */
610   FLD (f_simm8) = f_simm8;
611   FLD (i_dr) = & CPU (h_gr)[f_r1];
612   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi", "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
613
614 #if WITH_PROFILE_MODEL_P
615   /* Record the fields for profiling.  */
616   if (PROFILE_MODEL_P (current_cpu))
617     {
618       FLD (in_dr) = f_r1;
619       FLD (out_dr) = f_r1;
620     }
621 #endif
622 #undef FLD
623     return idesc;
624   }
625
626  extract_sfmt_addv:
627   {
628     const IDESC *idesc = &m32rbf_insn_data[itype];
629     CGEN_INSN_INT insn = entire_insn;
630 #define FLD(f) abuf->fields.sfmt_add.f
631     UINT f_r1;
632     UINT f_r2;
633
634     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
635     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
636
637   /* Record the fields for the semantic handler.  */
638   FLD (i_dr) = & CPU (h_gr)[f_r1];
639   FLD (i_sr) = & CPU (h_gr)[f_r2];
640   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
641
642 #if WITH_PROFILE_MODEL_P
643   /* Record the fields for profiling.  */
644   if (PROFILE_MODEL_P (current_cpu))
645     {
646       FLD (in_dr) = f_r1;
647       FLD (in_sr) = f_r2;
648       FLD (out_dr) = f_r1;
649     }
650 #endif
651 #undef FLD
652     return idesc;
653   }
654
655  extract_sfmt_addv3:
656   {
657     const IDESC *idesc = &m32rbf_insn_data[itype];
658     CGEN_INSN_INT insn = entire_insn;
659 #define FLD(f) abuf->fields.sfmt_add3.f
660     UINT f_r1;
661     UINT f_r2;
662     INT f_simm16;
663
664     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
665     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
666     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
667
668   /* Record the fields for the semantic handler.  */
669   FLD (f_simm16) = f_simm16;
670   FLD (i_sr) = & CPU (h_gr)[f_r2];
671   FLD (i_dr) = & CPU (h_gr)[f_r1];
672   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
673
674 #if WITH_PROFILE_MODEL_P
675   /* Record the fields for profiling.  */
676   if (PROFILE_MODEL_P (current_cpu))
677     {
678       FLD (in_sr) = f_r2;
679       FLD (out_dr) = f_r1;
680     }
681 #endif
682 #undef FLD
683     return idesc;
684   }
685
686  extract_sfmt_addx:
687   {
688     const IDESC *idesc = &m32rbf_insn_data[itype];
689     CGEN_INSN_INT insn = entire_insn;
690 #define FLD(f) abuf->fields.sfmt_add.f
691     UINT f_r1;
692     UINT f_r2;
693
694     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
695     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
696
697   /* Record the fields for the semantic handler.  */
698   FLD (i_dr) = & CPU (h_gr)[f_r1];
699   FLD (i_sr) = & CPU (h_gr)[f_r2];
700   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addx", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
701
702 #if WITH_PROFILE_MODEL_P
703   /* Record the fields for profiling.  */
704   if (PROFILE_MODEL_P (current_cpu))
705     {
706       FLD (in_dr) = f_r1;
707       FLD (in_sr) = f_r2;
708       FLD (out_dr) = f_r1;
709     }
710 #endif
711 #undef FLD
712     return idesc;
713   }
714
715  extract_sfmt_bc8:
716   {
717     const IDESC *idesc = &m32rbf_insn_data[itype];
718     CGEN_INSN_INT insn = entire_insn;
719 #define FLD(f) abuf->fields.sfmt_bl8.f
720     SI f_disp8;
721
722     f_disp8 = ((((EXTRACT_MSB0_INT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
723
724   /* Record the fields for the semantic handler.  */
725   FLD (i_disp8) = f_disp8;
726   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
727
728 #if WITH_PROFILE_MODEL_P
729   /* Record the fields for profiling.  */
730   if (PROFILE_MODEL_P (current_cpu))
731     {
732     }
733 #endif
734 #undef FLD
735     return idesc;
736   }
737
738  extract_sfmt_bc24:
739   {
740     const IDESC *idesc = &m32rbf_insn_data[itype];
741     CGEN_INSN_INT insn = entire_insn;
742 #define FLD(f) abuf->fields.sfmt_bl24.f
743     SI f_disp24;
744
745     f_disp24 = ((((EXTRACT_MSB0_INT (insn, 32, 8, 24)) << (2))) + (pc));
746
747   /* Record the fields for the semantic handler.  */
748   FLD (i_disp24) = f_disp24;
749   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
750
751 #if WITH_PROFILE_MODEL_P
752   /* Record the fields for profiling.  */
753   if (PROFILE_MODEL_P (current_cpu))
754     {
755     }
756 #endif
757 #undef FLD
758     return idesc;
759   }
760
761  extract_sfmt_beq:
762   {
763     const IDESC *idesc = &m32rbf_insn_data[itype];
764     CGEN_INSN_INT insn = entire_insn;
765 #define FLD(f) abuf->fields.sfmt_beq.f
766     UINT f_r1;
767     UINT f_r2;
768     SI f_disp16;
769
770     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
771     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
772     f_disp16 = ((((EXTRACT_MSB0_INT (insn, 32, 16, 16)) << (2))) + (pc));
773
774   /* Record the fields for the semantic handler.  */
775   FLD (i_disp16) = f_disp16;
776   FLD (i_src1) = & CPU (h_gr)[f_r1];
777   FLD (i_src2) = & CPU (h_gr)[f_r2];
778   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beq", "disp16 0x%x", 'x', f_disp16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
779
780 #if WITH_PROFILE_MODEL_P
781   /* Record the fields for profiling.  */
782   if (PROFILE_MODEL_P (current_cpu))
783     {
784       FLD (in_src1) = f_r1;
785       FLD (in_src2) = f_r2;
786     }
787 #endif
788 #undef FLD
789     return idesc;
790   }
791
792  extract_sfmt_beqz:
793   {
794     const IDESC *idesc = &m32rbf_insn_data[itype];
795     CGEN_INSN_INT insn = entire_insn;
796 #define FLD(f) abuf->fields.sfmt_beq.f
797     UINT f_r2;
798     SI f_disp16;
799
800     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
801     f_disp16 = ((((EXTRACT_MSB0_INT (insn, 32, 16, 16)) << (2))) + (pc));
802
803   /* Record the fields for the semantic handler.  */
804   FLD (i_disp16) = f_disp16;
805   FLD (i_src2) = & CPU (h_gr)[f_r2];
806   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beqz", "disp16 0x%x", 'x', f_disp16, "src2 0x%x", 'x', f_r2, (char *) 0));
807
808 #if WITH_PROFILE_MODEL_P
809   /* Record the fields for profiling.  */
810   if (PROFILE_MODEL_P (current_cpu))
811     {
812       FLD (in_src2) = f_r2;
813     }
814 #endif
815 #undef FLD
816     return idesc;
817   }
818
819  extract_sfmt_bl8:
820   {
821     const IDESC *idesc = &m32rbf_insn_data[itype];
822     CGEN_INSN_INT insn = entire_insn;
823 #define FLD(f) abuf->fields.sfmt_bl8.f
824     SI f_disp8;
825
826     f_disp8 = ((((EXTRACT_MSB0_INT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
827
828   /* Record the fields for the semantic handler.  */
829   FLD (i_disp8) = f_disp8;
830   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
831
832 #if WITH_PROFILE_MODEL_P
833   /* Record the fields for profiling.  */
834   if (PROFILE_MODEL_P (current_cpu))
835     {
836       FLD (out_h_gr_14) = 14;
837     }
838 #endif
839 #undef FLD
840     return idesc;
841   }
842
843  extract_sfmt_bl24:
844   {
845     const IDESC *idesc = &m32rbf_insn_data[itype];
846     CGEN_INSN_INT insn = entire_insn;
847 #define FLD(f) abuf->fields.sfmt_bl24.f
848     SI f_disp24;
849
850     f_disp24 = ((((EXTRACT_MSB0_INT (insn, 32, 8, 24)) << (2))) + (pc));
851
852   /* Record the fields for the semantic handler.  */
853   FLD (i_disp24) = f_disp24;
854   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
855
856 #if WITH_PROFILE_MODEL_P
857   /* Record the fields for profiling.  */
858   if (PROFILE_MODEL_P (current_cpu))
859     {
860       FLD (out_h_gr_14) = 14;
861     }
862 #endif
863 #undef FLD
864     return idesc;
865   }
866
867  extract_sfmt_bra8:
868   {
869     const IDESC *idesc = &m32rbf_insn_data[itype];
870     CGEN_INSN_INT insn = entire_insn;
871 #define FLD(f) abuf->fields.sfmt_bl8.f
872     SI f_disp8;
873
874     f_disp8 = ((((EXTRACT_MSB0_INT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
875
876   /* Record the fields for the semantic handler.  */
877   FLD (i_disp8) = f_disp8;
878   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
879
880 #if WITH_PROFILE_MODEL_P
881   /* Record the fields for profiling.  */
882   if (PROFILE_MODEL_P (current_cpu))
883     {
884     }
885 #endif
886 #undef FLD
887     return idesc;
888   }
889
890  extract_sfmt_bra24:
891   {
892     const IDESC *idesc = &m32rbf_insn_data[itype];
893     CGEN_INSN_INT insn = entire_insn;
894 #define FLD(f) abuf->fields.sfmt_bl24.f
895     SI f_disp24;
896
897     f_disp24 = ((((EXTRACT_MSB0_INT (insn, 32, 8, 24)) << (2))) + (pc));
898
899   /* Record the fields for the semantic handler.  */
900   FLD (i_disp24) = f_disp24;
901   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
902
903 #if WITH_PROFILE_MODEL_P
904   /* Record the fields for profiling.  */
905   if (PROFILE_MODEL_P (current_cpu))
906     {
907     }
908 #endif
909 #undef FLD
910     return idesc;
911   }
912
913  extract_sfmt_cmp:
914   {
915     const IDESC *idesc = &m32rbf_insn_data[itype];
916     CGEN_INSN_INT insn = entire_insn;
917 #define FLD(f) abuf->fields.sfmt_st_plus.f
918     UINT f_r1;
919     UINT f_r2;
920
921     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
922     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
923
924   /* Record the fields for the semantic handler.  */
925   FLD (i_src1) = & CPU (h_gr)[f_r1];
926   FLD (i_src2) = & CPU (h_gr)[f_r2];
927   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
928
929 #if WITH_PROFILE_MODEL_P
930   /* Record the fields for profiling.  */
931   if (PROFILE_MODEL_P (current_cpu))
932     {
933       FLD (in_src1) = f_r1;
934       FLD (in_src2) = f_r2;
935     }
936 #endif
937 #undef FLD
938     return idesc;
939   }
940
941  extract_sfmt_cmpi:
942   {
943     const IDESC *idesc = &m32rbf_insn_data[itype];
944     CGEN_INSN_INT insn = entire_insn;
945 #define FLD(f) abuf->fields.sfmt_st_d.f
946     UINT f_r2;
947     INT f_simm16;
948
949     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
950     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
951
952   /* Record the fields for the semantic handler.  */
953   FLD (f_simm16) = f_simm16;
954   FLD (i_src2) = & CPU (h_gr)[f_r2];
955   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpi", "f_simm16 0x%x", 'x', f_simm16, "src2 0x%x", 'x', f_r2, (char *) 0));
956
957 #if WITH_PROFILE_MODEL_P
958   /* Record the fields for profiling.  */
959   if (PROFILE_MODEL_P (current_cpu))
960     {
961       FLD (in_src2) = f_r2;
962     }
963 #endif
964 #undef FLD
965     return idesc;
966   }
967
968  extract_sfmt_div:
969   {
970     const IDESC *idesc = &m32rbf_insn_data[itype];
971     CGEN_INSN_INT insn = entire_insn;
972 #define FLD(f) abuf->fields.sfmt_add.f
973     UINT f_r1;
974     UINT f_r2;
975
976     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
977     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
978
979   /* Record the fields for the semantic handler.  */
980   FLD (i_dr) = & CPU (h_gr)[f_r1];
981   FLD (i_sr) = & CPU (h_gr)[f_r2];
982   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_div", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
983
984 #if WITH_PROFILE_MODEL_P
985   /* Record the fields for profiling.  */
986   if (PROFILE_MODEL_P (current_cpu))
987     {
988       FLD (in_dr) = f_r1;
989       FLD (in_sr) = f_r2;
990       FLD (out_dr) = f_r1;
991     }
992 #endif
993 #undef FLD
994     return idesc;
995   }
996
997  extract_sfmt_jl:
998   {
999     const IDESC *idesc = &m32rbf_insn_data[itype];
1000     CGEN_INSN_INT insn = entire_insn;
1001 #define FLD(f) abuf->fields.sfmt_jl.f
1002     UINT f_r2;
1003
1004     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1005
1006   /* Record the fields for the semantic handler.  */
1007   FLD (i_sr) = & CPU (h_gr)[f_r2];
1008   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jl", "sr 0x%x", 'x', f_r2, (char *) 0));
1009
1010 #if WITH_PROFILE_MODEL_P
1011   /* Record the fields for profiling.  */
1012   if (PROFILE_MODEL_P (current_cpu))
1013     {
1014       FLD (in_sr) = f_r2;
1015       FLD (out_h_gr_14) = 14;
1016     }
1017 #endif
1018 #undef FLD
1019     return idesc;
1020   }
1021
1022  extract_sfmt_jmp:
1023   {
1024     const IDESC *idesc = &m32rbf_insn_data[itype];
1025     CGEN_INSN_INT insn = entire_insn;
1026 #define FLD(f) abuf->fields.sfmt_mvtc.f
1027     UINT f_r2;
1028
1029     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1030
1031   /* Record the fields for the semantic handler.  */
1032   FLD (i_sr) = & CPU (h_gr)[f_r2];
1033   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jmp", "sr 0x%x", 'x', f_r2, (char *) 0));
1034
1035 #if WITH_PROFILE_MODEL_P
1036   /* Record the fields for profiling.  */
1037   if (PROFILE_MODEL_P (current_cpu))
1038     {
1039       FLD (in_sr) = f_r2;
1040     }
1041 #endif
1042 #undef FLD
1043     return idesc;
1044   }
1045
1046  extract_sfmt_ld:
1047   {
1048     const IDESC *idesc = &m32rbf_insn_data[itype];
1049     CGEN_INSN_INT insn = entire_insn;
1050 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1051     UINT f_r1;
1052     UINT f_r2;
1053
1054     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1055     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1056
1057   /* Record the fields for the semantic handler.  */
1058   FLD (i_sr) = & CPU (h_gr)[f_r2];
1059   FLD (i_dr) = & CPU (h_gr)[f_r1];
1060   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1061
1062 #if WITH_PROFILE_MODEL_P
1063   /* Record the fields for profiling.  */
1064   if (PROFILE_MODEL_P (current_cpu))
1065     {
1066       FLD (in_sr) = f_r2;
1067       FLD (out_dr) = f_r1;
1068     }
1069 #endif
1070 #undef FLD
1071     return idesc;
1072   }
1073
1074  extract_sfmt_ld_d:
1075   {
1076     const IDESC *idesc = &m32rbf_insn_data[itype];
1077     CGEN_INSN_INT insn = entire_insn;
1078 #define FLD(f) abuf->fields.sfmt_add3.f
1079     UINT f_r1;
1080     UINT f_r2;
1081     INT f_simm16;
1082
1083     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1084     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1085     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
1086
1087   /* Record the fields for the semantic handler.  */
1088   FLD (f_simm16) = f_simm16;
1089   FLD (i_sr) = & CPU (h_gr)[f_r2];
1090   FLD (i_dr) = & CPU (h_gr)[f_r1];
1091   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_d", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1092
1093 #if WITH_PROFILE_MODEL_P
1094   /* Record the fields for profiling.  */
1095   if (PROFILE_MODEL_P (current_cpu))
1096     {
1097       FLD (in_sr) = f_r2;
1098       FLD (out_dr) = f_r1;
1099     }
1100 #endif
1101 #undef FLD
1102     return idesc;
1103   }
1104
1105  extract_sfmt_ld_plus:
1106   {
1107     const IDESC *idesc = &m32rbf_insn_data[itype];
1108     CGEN_INSN_INT insn = entire_insn;
1109 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1110     UINT f_r1;
1111     UINT f_r2;
1112
1113     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1114     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
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, "sfmt_ld_plus", "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       FLD (out_sr) = f_r2;
1128     }
1129 #endif
1130 #undef FLD
1131     return idesc;
1132   }
1133
1134  extract_sfmt_ld24:
1135   {
1136     const IDESC *idesc = &m32rbf_insn_data[itype];
1137     CGEN_INSN_INT insn = entire_insn;
1138 #define FLD(f) abuf->fields.sfmt_ld24.f
1139     UINT f_r1;
1140     UINT f_uimm24;
1141
1142     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1143     f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24);
1144
1145   /* Record the fields for the semantic handler.  */
1146   FLD (i_uimm24) = f_uimm24;
1147   FLD (i_dr) = & CPU (h_gr)[f_r1];
1148   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld24", "uimm24 0x%x", 'x', f_uimm24, "dr 0x%x", 'x', f_r1, (char *) 0));
1149
1150 #if WITH_PROFILE_MODEL_P
1151   /* Record the fields for profiling.  */
1152   if (PROFILE_MODEL_P (current_cpu))
1153     {
1154       FLD (out_dr) = f_r1;
1155     }
1156 #endif
1157 #undef FLD
1158     return idesc;
1159   }
1160
1161  extract_sfmt_ldi8:
1162   {
1163     const IDESC *idesc = &m32rbf_insn_data[itype];
1164     CGEN_INSN_INT insn = entire_insn;
1165 #define FLD(f) abuf->fields.sfmt_addi.f
1166     UINT f_r1;
1167     INT f_simm8;
1168
1169     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1170     f_simm8 = EXTRACT_MSB0_INT (insn, 16, 8, 8);
1171
1172   /* Record the fields for the semantic handler.  */
1173   FLD (f_simm8) = f_simm8;
1174   FLD (i_dr) = & CPU (h_gr)[f_r1];
1175   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi8", "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
1176
1177 #if WITH_PROFILE_MODEL_P
1178   /* Record the fields for profiling.  */
1179   if (PROFILE_MODEL_P (current_cpu))
1180     {
1181       FLD (out_dr) = f_r1;
1182     }
1183 #endif
1184 #undef FLD
1185     return idesc;
1186   }
1187
1188  extract_sfmt_ldi16:
1189   {
1190     const IDESC *idesc = &m32rbf_insn_data[itype];
1191     CGEN_INSN_INT insn = entire_insn;
1192 #define FLD(f) abuf->fields.sfmt_add3.f
1193     UINT f_r1;
1194     INT f_simm16;
1195
1196     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1197     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
1198
1199   /* Record the fields for the semantic handler.  */
1200   FLD (f_simm16) = f_simm16;
1201   FLD (i_dr) = & CPU (h_gr)[f_r1];
1202   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi16", "f_simm16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
1203
1204 #if WITH_PROFILE_MODEL_P
1205   /* Record the fields for profiling.  */
1206   if (PROFILE_MODEL_P (current_cpu))
1207     {
1208       FLD (out_dr) = f_r1;
1209     }
1210 #endif
1211 #undef FLD
1212     return idesc;
1213   }
1214
1215  extract_sfmt_lock:
1216   {
1217     const IDESC *idesc = &m32rbf_insn_data[itype];
1218     CGEN_INSN_INT insn = entire_insn;
1219 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1220     UINT f_r1;
1221     UINT f_r2;
1222
1223     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1224     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1225
1226   /* Record the fields for the semantic handler.  */
1227   FLD (i_sr) = & CPU (h_gr)[f_r2];
1228   FLD (i_dr) = & CPU (h_gr)[f_r1];
1229   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lock", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1230
1231 #if WITH_PROFILE_MODEL_P
1232   /* Record the fields for profiling.  */
1233   if (PROFILE_MODEL_P (current_cpu))
1234     {
1235       FLD (in_sr) = f_r2;
1236       FLD (out_dr) = f_r1;
1237     }
1238 #endif
1239 #undef FLD
1240     return idesc;
1241   }
1242
1243  extract_sfmt_machi:
1244   {
1245     const IDESC *idesc = &m32rbf_insn_data[itype];
1246     CGEN_INSN_INT insn = entire_insn;
1247 #define FLD(f) abuf->fields.sfmt_st_plus.f
1248     UINT f_r1;
1249     UINT f_r2;
1250
1251     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1252     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1253
1254   /* Record the fields for the semantic handler.  */
1255   FLD (i_src1) = & CPU (h_gr)[f_r1];
1256   FLD (i_src2) = & CPU (h_gr)[f_r2];
1257   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_machi", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1258
1259 #if WITH_PROFILE_MODEL_P
1260   /* Record the fields for profiling.  */
1261   if (PROFILE_MODEL_P (current_cpu))
1262     {
1263       FLD (in_src1) = f_r1;
1264       FLD (in_src2) = f_r2;
1265     }
1266 #endif
1267 #undef FLD
1268     return idesc;
1269   }
1270
1271  extract_sfmt_mulhi:
1272   {
1273     const IDESC *idesc = &m32rbf_insn_data[itype];
1274     CGEN_INSN_INT insn = entire_insn;
1275 #define FLD(f) abuf->fields.sfmt_st_plus.f
1276     UINT f_r1;
1277     UINT f_r2;
1278
1279     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1280     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1281
1282   /* Record the fields for the semantic handler.  */
1283   FLD (i_src1) = & CPU (h_gr)[f_r1];
1284   FLD (i_src2) = & CPU (h_gr)[f_r2];
1285   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulhi", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1286
1287 #if WITH_PROFILE_MODEL_P
1288   /* Record the fields for profiling.  */
1289   if (PROFILE_MODEL_P (current_cpu))
1290     {
1291       FLD (in_src1) = f_r1;
1292       FLD (in_src2) = f_r2;
1293     }
1294 #endif
1295 #undef FLD
1296     return idesc;
1297   }
1298
1299  extract_sfmt_mv:
1300   {
1301     const IDESC *idesc = &m32rbf_insn_data[itype];
1302     CGEN_INSN_INT insn = entire_insn;
1303 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1304     UINT f_r1;
1305     UINT f_r2;
1306
1307     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1308     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1309
1310   /* Record the fields for the semantic handler.  */
1311   FLD (i_sr) = & CPU (h_gr)[f_r2];
1312   FLD (i_dr) = & CPU (h_gr)[f_r1];
1313   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mv", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1314
1315 #if WITH_PROFILE_MODEL_P
1316   /* Record the fields for profiling.  */
1317   if (PROFILE_MODEL_P (current_cpu))
1318     {
1319       FLD (in_sr) = f_r2;
1320       FLD (out_dr) = f_r1;
1321     }
1322 #endif
1323 #undef FLD
1324     return idesc;
1325   }
1326
1327  extract_sfmt_mvfachi:
1328   {
1329     const IDESC *idesc = &m32rbf_insn_data[itype];
1330     CGEN_INSN_INT insn = entire_insn;
1331 #define FLD(f) abuf->fields.sfmt_seth.f
1332     UINT f_r1;
1333
1334     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1335
1336   /* Record the fields for the semantic handler.  */
1337   FLD (i_dr) = & CPU (h_gr)[f_r1];
1338   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfachi", "dr 0x%x", 'x', f_r1, (char *) 0));
1339
1340 #if WITH_PROFILE_MODEL_P
1341   /* Record the fields for profiling.  */
1342   if (PROFILE_MODEL_P (current_cpu))
1343     {
1344       FLD (out_dr) = f_r1;
1345     }
1346 #endif
1347 #undef FLD
1348     return idesc;
1349   }
1350
1351  extract_sfmt_mvfc:
1352   {
1353     const IDESC *idesc = &m32rbf_insn_data[itype];
1354     CGEN_INSN_INT insn = entire_insn;
1355 #define FLD(f) abuf->fields.sfmt_mvfc.f
1356     UINT f_r1;
1357     UINT f_r2;
1358
1359     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1360     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1361
1362   /* Record the fields for the semantic handler.  */
1363   FLD (f_r2) = f_r2;
1364   FLD (i_dr) = & CPU (h_gr)[f_r1];
1365   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfc", "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1366
1367 #if WITH_PROFILE_MODEL_P
1368   /* Record the fields for profiling.  */
1369   if (PROFILE_MODEL_P (current_cpu))
1370     {
1371       FLD (out_dr) = f_r1;
1372     }
1373 #endif
1374 #undef FLD
1375     return idesc;
1376   }
1377
1378  extract_sfmt_mvtachi:
1379   {
1380     const IDESC *idesc = &m32rbf_insn_data[itype];
1381     CGEN_INSN_INT insn = entire_insn;
1382 #define FLD(f) abuf->fields.sfmt_st_plus.f
1383     UINT f_r1;
1384
1385     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1386
1387   /* Record the fields for the semantic handler.  */
1388   FLD (i_src1) = & CPU (h_gr)[f_r1];
1389   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtachi", "src1 0x%x", 'x', f_r1, (char *) 0));
1390
1391 #if WITH_PROFILE_MODEL_P
1392   /* Record the fields for profiling.  */
1393   if (PROFILE_MODEL_P (current_cpu))
1394     {
1395       FLD (in_src1) = f_r1;
1396     }
1397 #endif
1398 #undef FLD
1399     return idesc;
1400   }
1401
1402  extract_sfmt_mvtc:
1403   {
1404     const IDESC *idesc = &m32rbf_insn_data[itype];
1405     CGEN_INSN_INT insn = entire_insn;
1406 #define FLD(f) abuf->fields.sfmt_mvtc.f
1407     UINT f_r1;
1408     UINT f_r2;
1409
1410     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1411     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1412
1413   /* Record the fields for the semantic handler.  */
1414   FLD (f_r1) = f_r1;
1415   FLD (i_sr) = & CPU (h_gr)[f_r2];
1416   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtc", "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1417
1418 #if WITH_PROFILE_MODEL_P
1419   /* Record the fields for profiling.  */
1420   if (PROFILE_MODEL_P (current_cpu))
1421     {
1422       FLD (in_sr) = f_r2;
1423     }
1424 #endif
1425 #undef FLD
1426     return idesc;
1427   }
1428
1429  extract_sfmt_nop:
1430   {
1431     const IDESC *idesc = &m32rbf_insn_data[itype];
1432     CGEN_INSN_INT insn = entire_insn;
1433 #define FLD(f) abuf->fields.fmt_empty.f
1434
1435
1436   /* Record the fields for the semantic handler.  */
1437   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0));
1438
1439 #undef FLD
1440     return idesc;
1441   }
1442
1443  extract_sfmt_rac:
1444   {
1445     const IDESC *idesc = &m32rbf_insn_data[itype];
1446     CGEN_INSN_INT insn = entire_insn;
1447 #define FLD(f) abuf->fields.fmt_empty.f
1448
1449
1450   /* Record the fields for the semantic handler.  */
1451   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rac", (char *) 0));
1452
1453 #undef FLD
1454     return idesc;
1455   }
1456
1457  extract_sfmt_rte:
1458   {
1459     const IDESC *idesc = &m32rbf_insn_data[itype];
1460     CGEN_INSN_INT insn = entire_insn;
1461 #define FLD(f) abuf->fields.fmt_empty.f
1462
1463
1464   /* Record the fields for the semantic handler.  */
1465   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0));
1466
1467 #if WITH_PROFILE_MODEL_P
1468   /* Record the fields for profiling.  */
1469   if (PROFILE_MODEL_P (current_cpu))
1470     {
1471     }
1472 #endif
1473 #undef FLD
1474     return idesc;
1475   }
1476
1477  extract_sfmt_seth:
1478   {
1479     const IDESC *idesc = &m32rbf_insn_data[itype];
1480     CGEN_INSN_INT insn = entire_insn;
1481 #define FLD(f) abuf->fields.sfmt_seth.f
1482     UINT f_r1;
1483     UINT f_hi16;
1484
1485     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1486     f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
1487
1488   /* Record the fields for the semantic handler.  */
1489   FLD (f_hi16) = f_hi16;
1490   FLD (i_dr) = & CPU (h_gr)[f_r1];
1491   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_seth", "f_hi16 0x%x", 'x', f_hi16, "dr 0x%x", 'x', f_r1, (char *) 0));
1492
1493 #if WITH_PROFILE_MODEL_P
1494   /* Record the fields for profiling.  */
1495   if (PROFILE_MODEL_P (current_cpu))
1496     {
1497       FLD (out_dr) = f_r1;
1498     }
1499 #endif
1500 #undef FLD
1501     return idesc;
1502   }
1503
1504  extract_sfmt_sll3:
1505   {
1506     const IDESC *idesc = &m32rbf_insn_data[itype];
1507     CGEN_INSN_INT insn = entire_insn;
1508 #define FLD(f) abuf->fields.sfmt_add3.f
1509     UINT f_r1;
1510     UINT f_r2;
1511     INT f_simm16;
1512
1513     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1514     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1515     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
1516
1517   /* Record the fields for the semantic handler.  */
1518   FLD (f_simm16) = f_simm16;
1519   FLD (i_sr) = & CPU (h_gr)[f_r2];
1520   FLD (i_dr) = & CPU (h_gr)[f_r1];
1521   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sll3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1522
1523 #if WITH_PROFILE_MODEL_P
1524   /* Record the fields for profiling.  */
1525   if (PROFILE_MODEL_P (current_cpu))
1526     {
1527       FLD (in_sr) = f_r2;
1528       FLD (out_dr) = f_r1;
1529     }
1530 #endif
1531 #undef FLD
1532     return idesc;
1533   }
1534
1535  extract_sfmt_slli:
1536   {
1537     const IDESC *idesc = &m32rbf_insn_data[itype];
1538     CGEN_INSN_INT insn = entire_insn;
1539 #define FLD(f) abuf->fields.sfmt_slli.f
1540     UINT f_r1;
1541     UINT f_uimm5;
1542
1543     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1544     f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5);
1545
1546   /* Record the fields for the semantic handler.  */
1547   FLD (f_uimm5) = f_uimm5;
1548   FLD (i_dr) = & CPU (h_gr)[f_r1];
1549   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slli", "f_uimm5 0x%x", 'x', f_uimm5, "dr 0x%x", 'x', f_r1, (char *) 0));
1550
1551 #if WITH_PROFILE_MODEL_P
1552   /* Record the fields for profiling.  */
1553   if (PROFILE_MODEL_P (current_cpu))
1554     {
1555       FLD (in_dr) = f_r1;
1556       FLD (out_dr) = f_r1;
1557     }
1558 #endif
1559 #undef FLD
1560     return idesc;
1561   }
1562
1563  extract_sfmt_st:
1564   {
1565     const IDESC *idesc = &m32rbf_insn_data[itype];
1566     CGEN_INSN_INT insn = entire_insn;
1567 #define FLD(f) abuf->fields.sfmt_st_plus.f
1568     UINT f_r1;
1569     UINT f_r2;
1570
1571     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1572     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1573
1574   /* Record the fields for the semantic handler.  */
1575   FLD (i_src1) = & CPU (h_gr)[f_r1];
1576   FLD (i_src2) = & CPU (h_gr)[f_r2];
1577   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1578
1579 #if WITH_PROFILE_MODEL_P
1580   /* Record the fields for profiling.  */
1581   if (PROFILE_MODEL_P (current_cpu))
1582     {
1583       FLD (in_src1) = f_r1;
1584       FLD (in_src2) = f_r2;
1585     }
1586 #endif
1587 #undef FLD
1588     return idesc;
1589   }
1590
1591  extract_sfmt_st_d:
1592   {
1593     const IDESC *idesc = &m32rbf_insn_data[itype];
1594     CGEN_INSN_INT insn = entire_insn;
1595 #define FLD(f) abuf->fields.sfmt_st_d.f
1596     UINT f_r1;
1597     UINT f_r2;
1598     INT f_simm16;
1599
1600     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1601     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1602     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
1603
1604   /* Record the fields for the semantic handler.  */
1605   FLD (f_simm16) = f_simm16;
1606   FLD (i_src1) = & CPU (h_gr)[f_r1];
1607   FLD (i_src2) = & CPU (h_gr)[f_r2];
1608   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_d", "f_simm16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1609
1610 #if WITH_PROFILE_MODEL_P
1611   /* Record the fields for profiling.  */
1612   if (PROFILE_MODEL_P (current_cpu))
1613     {
1614       FLD (in_src1) = f_r1;
1615       FLD (in_src2) = f_r2;
1616     }
1617 #endif
1618 #undef FLD
1619     return idesc;
1620   }
1621
1622  extract_sfmt_stb:
1623   {
1624     const IDESC *idesc = &m32rbf_insn_data[itype];
1625     CGEN_INSN_INT insn = entire_insn;
1626 #define FLD(f) abuf->fields.sfmt_st_plus.f
1627     UINT f_r1;
1628     UINT f_r2;
1629
1630     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1631     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1632
1633   /* Record the fields for the semantic handler.  */
1634   FLD (i_src1) = & CPU (h_gr)[f_r1];
1635   FLD (i_src2) = & CPU (h_gr)[f_r2];
1636   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (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_src1) = f_r1;
1643       FLD (in_src2) = f_r2;
1644     }
1645 #endif
1646 #undef FLD
1647     return idesc;
1648   }
1649
1650  extract_sfmt_stb_d:
1651   {
1652     const IDESC *idesc = &m32rbf_insn_data[itype];
1653     CGEN_INSN_INT insn = entire_insn;
1654 #define FLD(f) abuf->fields.sfmt_st_d.f
1655     UINT f_r1;
1656     UINT f_r2;
1657     INT f_simm16;
1658
1659     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1660     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1661     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
1662
1663   /* Record the fields for the semantic handler.  */
1664   FLD (f_simm16) = f_simm16;
1665   FLD (i_src1) = & CPU (h_gr)[f_r1];
1666   FLD (i_src2) = & CPU (h_gr)[f_r2];
1667   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb_d", "f_simm16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1668
1669 #if WITH_PROFILE_MODEL_P
1670   /* Record the fields for profiling.  */
1671   if (PROFILE_MODEL_P (current_cpu))
1672     {
1673       FLD (in_src1) = f_r1;
1674       FLD (in_src2) = f_r2;
1675     }
1676 #endif
1677 #undef FLD
1678     return idesc;
1679   }
1680
1681  extract_sfmt_sth:
1682   {
1683     const IDESC *idesc = &m32rbf_insn_data[itype];
1684     CGEN_INSN_INT insn = entire_insn;
1685 #define FLD(f) abuf->fields.sfmt_st_plus.f
1686     UINT f_r1;
1687     UINT f_r2;
1688
1689     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1690     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1691
1692   /* Record the fields for the semantic handler.  */
1693   FLD (i_src1) = & CPU (h_gr)[f_r1];
1694   FLD (i_src2) = & CPU (h_gr)[f_r2];
1695   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1696
1697 #if WITH_PROFILE_MODEL_P
1698   /* Record the fields for profiling.  */
1699   if (PROFILE_MODEL_P (current_cpu))
1700     {
1701       FLD (in_src1) = f_r1;
1702       FLD (in_src2) = f_r2;
1703     }
1704 #endif
1705 #undef FLD
1706     return idesc;
1707   }
1708
1709  extract_sfmt_sth_d:
1710   {
1711     const IDESC *idesc = &m32rbf_insn_data[itype];
1712     CGEN_INSN_INT insn = entire_insn;
1713 #define FLD(f) abuf->fields.sfmt_st_d.f
1714     UINT f_r1;
1715     UINT f_r2;
1716     INT f_simm16;
1717
1718     f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1719     f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1720     f_simm16 = EXTRACT_MSB0_INT (insn, 32, 16, 16);
1721
1722   /* Record the fields for the semantic handler.  */
1723   FLD (f_simm16) = f_simm16;
1724   FLD (i_src1) = & CPU (h_gr)[f_r1];
1725   FLD (i_src2) = & CPU (h_gr)[f_r2];
1726   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth_d", "f_simm16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1727
1728 #if WITH_PROFILE_MODEL_P
1729   /* Record the fields for profiling.  */
1730   if (PROFILE_MODEL_P (current_cpu))
1731     {
1732       FLD (in_src1) = f_r1;
1733       FLD (in_src2) = f_r2;
1734     }
1735 #endif
1736 #undef FLD
1737     return idesc;
1738   }
1739
1740  extract_sfmt_st_plus:
1741   {
1742     const IDESC *idesc = &m32rbf_insn_data[itype];
1743     CGEN_INSN_INT insn = entire_insn;
1744 #define FLD(f) abuf->fields.sfmt_st_plus.f
1745     UINT f_r1;
1746     UINT f_r2;
1747
1748     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1749     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1750
1751   /* Record the fields for the semantic handler.  */
1752   FLD (i_src1) = & CPU (h_gr)[f_r1];
1753   FLD (i_src2) = & CPU (h_gr)[f_r2];
1754   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_plus", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1755
1756 #if WITH_PROFILE_MODEL_P
1757   /* Record the fields for profiling.  */
1758   if (PROFILE_MODEL_P (current_cpu))
1759     {
1760       FLD (in_src1) = f_r1;
1761       FLD (in_src2) = f_r2;
1762       FLD (out_src2) = f_r2;
1763     }
1764 #endif
1765 #undef FLD
1766     return idesc;
1767   }
1768
1769  extract_sfmt_trap:
1770   {
1771     const IDESC *idesc = &m32rbf_insn_data[itype];
1772     CGEN_INSN_INT insn = entire_insn;
1773 #define FLD(f) abuf->fields.sfmt_trap.f
1774     UINT f_uimm4;
1775
1776     f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1777
1778   /* Record the fields for the semantic handler.  */
1779   FLD (f_uimm4) = f_uimm4;
1780   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0));
1781
1782 #if WITH_PROFILE_MODEL_P
1783   /* Record the fields for profiling.  */
1784   if (PROFILE_MODEL_P (current_cpu))
1785     {
1786     }
1787 #endif
1788 #undef FLD
1789     return idesc;
1790   }
1791
1792  extract_sfmt_unlock:
1793   {
1794     const IDESC *idesc = &m32rbf_insn_data[itype];
1795     CGEN_INSN_INT insn = entire_insn;
1796 #define FLD(f) abuf->fields.sfmt_st_plus.f
1797     UINT f_r1;
1798     UINT f_r2;
1799
1800     f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1801     f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1802
1803   /* Record the fields for the semantic handler.  */
1804   FLD (i_src1) = & CPU (h_gr)[f_r1];
1805   FLD (i_src2) = & CPU (h_gr)[f_r2];
1806   TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_unlock", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1807
1808 #if WITH_PROFILE_MODEL_P
1809   /* Record the fields for profiling.  */
1810   if (PROFILE_MODEL_P (current_cpu))
1811     {
1812       FLD (in_src1) = f_r1;
1813       FLD (in_src2) = f_r2;
1814     }
1815 #endif
1816 #undef FLD
1817     return idesc;
1818   }
1819
1820 }