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