]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/m32r/decode.c
Regenerate cgen-derived files.
[thirdparty/binutils-gdb.git] / sim / m32r / decode.c
1 /* Simulator instruction decoder for m32rbf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright 1996-2010 Free Software Foundation, Inc.
6
7 This file is part of the GNU simulators.
8
9 This file 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 3, or (at your option)
12 any later version.
13
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 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 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, 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_LDB },
90 { M32R_INSN_LDB_D, M32RBF_INSN_LDB_D, M32RBF_SFMT_LDB_D },
91 { M32R_INSN_LDH, M32RBF_INSN_LDH, M32RBF_SFMT_LDH },
92 { M32R_INSN_LDH_D, M32RBF_INSN_LDH_D, M32RBF_SFMT_LDH_D },
93 { M32R_INSN_LDUB, M32RBF_INSN_LDUB, M32RBF_SFMT_LDB },
94 { M32R_INSN_LDUB_D, M32RBF_INSN_LDUB_D, M32RBF_SFMT_LDB_D },
95 { M32R_INSN_LDUH, M32RBF_INSN_LDUH, M32RBF_SFMT_LDH },
96 { M32R_INSN_LDUH_D, M32RBF_INSN_LDUH_D, M32RBF_SFMT_LDH_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 { M32R_INSN_CLRPSW, M32RBF_INSN_CLRPSW, M32RBF_SFMT_CLRPSW },
149 { M32R_INSN_SETPSW, M32RBF_INSN_SETPSW, M32RBF_SFMT_SETPSW },
150 { M32R_INSN_BSET, M32RBF_INSN_BSET, M32RBF_SFMT_BSET },
151 { M32R_INSN_BCLR, M32RBF_INSN_BCLR, M32RBF_SFMT_BSET },
152 { M32R_INSN_BTST, M32RBF_INSN_BTST, M32RBF_SFMT_BTST },
153 };
154
155 static const struct insn_sem m32rbf_insn_sem_invalid =
156 {
157 VIRTUAL_INSN_X_INVALID, M32RBF_INSN_X_INVALID, M32RBF_SFMT_EMPTY
158 };
159
160 /* Initialize an IDESC from the compile-time computable parts. */
161
162 static INLINE void
163 init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
164 {
165 const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;
166
167 id->num = t->index;
168 id->sfmt = t->sfmt;
169 if ((int) t->type <= 0)
170 id->idata = & cgen_virtual_insn_table[- (int) t->type];
171 else
172 id->idata = & insn_table[t->type];
173 id->attrs = CGEN_INSN_ATTRS (id->idata);
174 /* Oh my god, a magic number. */
175 id->length = CGEN_INSN_BITSIZE (id->idata) / 8;
176
177 #if WITH_PROFILE_MODEL_P
178 id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
179 {
180 SIM_DESC sd = CPU_STATE (cpu);
181 SIM_ASSERT (t->index == id->timing->num);
182 }
183 #endif
184
185 /* Semantic pointers are initialized elsewhere. */
186 }
187
188 /* Initialize the instruction descriptor table. */
189
190 void
191 m32rbf_init_idesc_table (SIM_CPU *cpu)
192 {
193 IDESC *id,*tabend;
194 const struct insn_sem *t,*tend;
195 int tabsize = M32RBF_INSN__MAX;
196 IDESC *table = m32rbf_insn_data;
197
198 memset (table, 0, tabsize * sizeof (IDESC));
199
200 /* First set all entries to the `invalid insn'. */
201 t = & m32rbf_insn_sem_invalid;
202 for (id = table, tabend = table + tabsize; id < tabend; ++id)
203 init_idesc (cpu, id, t);
204
205 /* Now fill in the values for the chosen cpu. */
206 for (t = m32rbf_insn_sem, tend = t + sizeof (m32rbf_insn_sem) / sizeof (*t);
207 t != tend; ++t)
208 {
209 init_idesc (cpu, & table[t->index], t);
210 }
211
212 /* Link the IDESC table into the cpu. */
213 CPU_IDESC (cpu) = table;
214 }
215
216 /* Given an instruction, return a pointer to its IDESC entry. */
217
218 const IDESC *
219 m32rbf_decode (SIM_CPU *current_cpu, IADDR pc,
220 CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn,
221 ARGBUF *abuf)
222 {
223 /* Result of decoder. */
224 M32RBF_INSN_TYPE itype;
225
226 {
227 CGEN_INSN_WORD insn = base_insn;
228
229 {
230 unsigned int val = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0)));
231 switch (val)
232 {
233 case 0 : itype = M32RBF_INSN_SUBV; goto extract_sfmt_addv;
234 case 1 : itype = M32RBF_INSN_SUBX; goto extract_sfmt_addx;
235 case 2 : itype = M32RBF_INSN_SUB; goto extract_sfmt_add;
236 case 3 : itype = M32RBF_INSN_NEG; goto extract_sfmt_mv;
237 case 4 : itype = M32RBF_INSN_CMP; goto extract_sfmt_cmp;
238 case 5 : itype = M32RBF_INSN_CMPU; goto extract_sfmt_cmp;
239 case 8 : itype = M32RBF_INSN_ADDV; goto extract_sfmt_addv;
240 case 9 : itype = M32RBF_INSN_ADDX; goto extract_sfmt_addx;
241 case 10 : itype = M32RBF_INSN_ADD; goto extract_sfmt_add;
242 case 11 : itype = M32RBF_INSN_NOT; goto extract_sfmt_mv;
243 case 12 : itype = M32RBF_INSN_AND; goto extract_sfmt_add;
244 case 13 : itype = M32RBF_INSN_XOR; goto extract_sfmt_add;
245 case 14 : itype = M32RBF_INSN_OR; goto extract_sfmt_add;
246 case 15 :
247 if ((entire_insn & 0xf8f0) == 0xf0)
248 { itype = M32RBF_INSN_BTST; goto extract_sfmt_btst; }
249 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
250 case 16 : itype = M32RBF_INSN_SRL; goto extract_sfmt_add;
251 case 18 : itype = M32RBF_INSN_SRA; goto extract_sfmt_add;
252 case 20 : itype = M32RBF_INSN_SLL; goto extract_sfmt_add;
253 case 22 : itype = M32RBF_INSN_MUL; goto extract_sfmt_add;
254 case 24 : itype = M32RBF_INSN_MV; goto extract_sfmt_mv;
255 case 25 : itype = M32RBF_INSN_MVFC; goto extract_sfmt_mvfc;
256 case 26 : itype = M32RBF_INSN_MVTC; goto extract_sfmt_mvtc;
257 case 28 :
258 {
259 unsigned int val = (((insn >> 8) & (1 << 0)));
260 switch (val)
261 {
262 case 0 :
263 if ((entire_insn & 0xfff0) == 0x1ec0)
264 { itype = M32RBF_INSN_JL; goto extract_sfmt_jl; }
265 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
266 case 1 :
267 if ((entire_insn & 0xfff0) == 0x1fc0)
268 { itype = M32RBF_INSN_JMP; goto extract_sfmt_jmp; }
269 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
270 default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
271 }
272 }
273 case 29 :
274 if ((entire_insn & 0xffff) == 0x10d6)
275 { itype = M32RBF_INSN_RTE; goto extract_sfmt_rte; }
276 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
277 case 31 :
278 if ((entire_insn & 0xfff0) == 0x10f0)
279 { itype = M32RBF_INSN_TRAP; goto extract_sfmt_trap; }
280 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
281 case 32 : itype = M32RBF_INSN_STB; goto extract_sfmt_stb;
282 case 34 : itype = M32RBF_INSN_STH; goto extract_sfmt_sth;
283 case 36 : itype = M32RBF_INSN_ST; goto extract_sfmt_st;
284 case 37 : itype = M32RBF_INSN_UNLOCK; goto extract_sfmt_unlock;
285 case 38 : itype = M32RBF_INSN_ST_PLUS; goto extract_sfmt_st_plus;
286 case 39 : itype = M32RBF_INSN_ST_MINUS; goto extract_sfmt_st_plus;
287 case 40 : itype = M32RBF_INSN_LDB; goto extract_sfmt_ldb;
288 case 41 : itype = M32RBF_INSN_LDUB; goto extract_sfmt_ldb;
289 case 42 : itype = M32RBF_INSN_LDH; goto extract_sfmt_ldh;
290 case 43 : itype = M32RBF_INSN_LDUH; goto extract_sfmt_ldh;
291 case 44 : itype = M32RBF_INSN_LD; goto extract_sfmt_ld;
292 case 45 : itype = M32RBF_INSN_LOCK; goto extract_sfmt_lock;
293 case 46 : itype = M32RBF_INSN_LD_PLUS; goto extract_sfmt_ld_plus;
294 case 48 : itype = M32RBF_INSN_MULHI; goto extract_sfmt_mulhi;
295 case 49 : itype = M32RBF_INSN_MULLO; goto extract_sfmt_mulhi;
296 case 50 : itype = M32RBF_INSN_MULWHI; goto extract_sfmt_mulhi;
297 case 51 : itype = M32RBF_INSN_MULWLO; goto extract_sfmt_mulhi;
298 case 52 : itype = M32RBF_INSN_MACHI; goto extract_sfmt_machi;
299 case 53 : itype = M32RBF_INSN_MACLO; goto extract_sfmt_machi;
300 case 54 : itype = M32RBF_INSN_MACWHI; goto extract_sfmt_machi;
301 case 55 : itype = M32RBF_INSN_MACWLO; goto extract_sfmt_machi;
302 case 64 : /* fall through */
303 case 65 : /* fall through */
304 case 66 : /* fall through */
305 case 67 : /* fall through */
306 case 68 : /* fall through */
307 case 69 : /* fall through */
308 case 70 : /* fall through */
309 case 71 : /* fall through */
310 case 72 : /* fall through */
311 case 73 : /* fall through */
312 case 74 : /* fall through */
313 case 75 : /* fall through */
314 case 76 : /* fall through */
315 case 77 : /* fall through */
316 case 78 : /* fall through */
317 case 79 : itype = M32RBF_INSN_ADDI; goto extract_sfmt_addi;
318 case 80 : /* fall through */
319 case 81 : itype = M32RBF_INSN_SRLI; goto extract_sfmt_slli;
320 case 82 : /* fall through */
321 case 83 : itype = M32RBF_INSN_SRAI; goto extract_sfmt_slli;
322 case 84 : /* fall through */
323 case 85 : itype = M32RBF_INSN_SLLI; goto extract_sfmt_slli;
324 case 87 :
325 {
326 unsigned int val = (((insn >> 0) & (1 << 0)));
327 switch (val)
328 {
329 case 0 :
330 if ((entire_insn & 0xf0ff) == 0x5070)
331 { itype = M32RBF_INSN_MVTACHI; goto extract_sfmt_mvtachi; }
332 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
333 case 1 :
334 if ((entire_insn & 0xf0ff) == 0x5071)
335 { itype = M32RBF_INSN_MVTACLO; goto extract_sfmt_mvtachi; }
336 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
337 default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
338 }
339 }
340 case 88 :
341 if ((entire_insn & 0xffff) == 0x5080)
342 { itype = M32RBF_INSN_RACH; goto extract_sfmt_rac; }
343 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
344 case 89 :
345 if ((entire_insn & 0xffff) == 0x5090)
346 { itype = M32RBF_INSN_RAC; goto extract_sfmt_rac; }
347 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
348 case 95 :
349 {
350 unsigned int val = (((insn >> 0) & (3 << 0)));
351 switch (val)
352 {
353 case 0 :
354 if ((entire_insn & 0xf0ff) == 0x50f0)
355 { itype = M32RBF_INSN_MVFACHI; goto extract_sfmt_mvfachi; }
356 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
357 case 1 :
358 if ((entire_insn & 0xf0ff) == 0x50f1)
359 { itype = M32RBF_INSN_MVFACLO; goto extract_sfmt_mvfachi; }
360 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
361 case 2 :
362 if ((entire_insn & 0xf0ff) == 0x50f2)
363 { itype = M32RBF_INSN_MVFACMI; goto extract_sfmt_mvfachi; }
364 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
365 default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
366 }
367 }
368 case 96 : /* fall through */
369 case 97 : /* fall through */
370 case 98 : /* fall through */
371 case 99 : /* fall through */
372 case 100 : /* fall through */
373 case 101 : /* fall through */
374 case 102 : /* fall through */
375 case 103 : /* fall through */
376 case 104 : /* fall through */
377 case 105 : /* fall through */
378 case 106 : /* fall through */
379 case 107 : /* fall through */
380 case 108 : /* fall through */
381 case 109 : /* fall through */
382 case 110 : /* fall through */
383 case 111 : itype = M32RBF_INSN_LDI8; goto extract_sfmt_ldi8;
384 case 112 :
385 {
386 unsigned int val = (((insn >> 8) & (15 << 0)));
387 switch (val)
388 {
389 case 0 :
390 if ((entire_insn & 0xffff) == 0x7000)
391 { itype = M32RBF_INSN_NOP; goto extract_sfmt_nop; }
392 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
393 case 1 : itype = M32RBF_INSN_SETPSW; goto extract_sfmt_setpsw;
394 case 2 : itype = M32RBF_INSN_CLRPSW; goto extract_sfmt_clrpsw;
395 case 12 : itype = M32RBF_INSN_BC8; goto extract_sfmt_bc8;
396 case 13 : itype = M32RBF_INSN_BNC8; goto extract_sfmt_bc8;
397 case 14 : itype = M32RBF_INSN_BL8; goto extract_sfmt_bl8;
398 case 15 : itype = M32RBF_INSN_BRA8; goto extract_sfmt_bra8;
399 default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
400 }
401 }
402 case 113 : /* fall through */
403 case 114 : /* fall through */
404 case 115 : /* fall through */
405 case 116 : /* fall through */
406 case 117 : /* fall through */
407 case 118 : /* fall through */
408 case 119 : /* fall through */
409 case 120 : /* fall through */
410 case 121 : /* fall through */
411 case 122 : /* fall through */
412 case 123 : /* fall through */
413 case 124 : /* fall through */
414 case 125 : /* fall through */
415 case 126 : /* fall through */
416 case 127 :
417 {
418 unsigned int val = (((insn >> 8) & (15 << 0)));
419 switch (val)
420 {
421 case 1 : itype = M32RBF_INSN_SETPSW; goto extract_sfmt_setpsw;
422 case 2 : itype = M32RBF_INSN_CLRPSW; goto extract_sfmt_clrpsw;
423 case 12 : itype = M32RBF_INSN_BC8; goto extract_sfmt_bc8;
424 case 13 : itype = M32RBF_INSN_BNC8; goto extract_sfmt_bc8;
425 case 14 : itype = M32RBF_INSN_BL8; goto extract_sfmt_bl8;
426 case 15 : itype = M32RBF_INSN_BRA8; goto extract_sfmt_bra8;
427 default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
428 }
429 }
430 case 132 :
431 if ((entire_insn & 0xfff00000) == 0x80400000)
432 { itype = M32RBF_INSN_CMPI; goto extract_sfmt_cmpi; }
433 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
434 case 133 :
435 if ((entire_insn & 0xfff00000) == 0x80500000)
436 { itype = M32RBF_INSN_CMPUI; goto extract_sfmt_cmpi; }
437 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
438 case 136 : itype = M32RBF_INSN_ADDV3; goto extract_sfmt_addv3;
439 case 138 : itype = M32RBF_INSN_ADD3; goto extract_sfmt_add3;
440 case 140 : itype = M32RBF_INSN_AND3; goto extract_sfmt_and3;
441 case 141 : itype = M32RBF_INSN_XOR3; goto extract_sfmt_and3;
442 case 142 : itype = M32RBF_INSN_OR3; goto extract_sfmt_or3;
443 case 144 :
444 if ((entire_insn & 0xf0f0ffff) == 0x90000000)
445 { itype = M32RBF_INSN_DIV; goto extract_sfmt_div; }
446 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
447 case 145 :
448 if ((entire_insn & 0xf0f0ffff) == 0x90100000)
449 { itype = M32RBF_INSN_DIVU; goto extract_sfmt_div; }
450 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
451 case 146 :
452 if ((entire_insn & 0xf0f0ffff) == 0x90200000)
453 { itype = M32RBF_INSN_REM; goto extract_sfmt_div; }
454 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
455 case 147 :
456 if ((entire_insn & 0xf0f0ffff) == 0x90300000)
457 { itype = M32RBF_INSN_REMU; goto extract_sfmt_div; }
458 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
459 case 152 : itype = M32RBF_INSN_SRL3; goto extract_sfmt_sll3;
460 case 154 : itype = M32RBF_INSN_SRA3; goto extract_sfmt_sll3;
461 case 156 : itype = M32RBF_INSN_SLL3; goto extract_sfmt_sll3;
462 case 159 :
463 if ((entire_insn & 0xf0ff0000) == 0x90f00000)
464 { itype = M32RBF_INSN_LDI16; goto extract_sfmt_ldi16; }
465 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
466 case 160 : itype = M32RBF_INSN_STB_D; goto extract_sfmt_stb_d;
467 case 162 : itype = M32RBF_INSN_STH_D; goto extract_sfmt_sth_d;
468 case 164 : itype = M32RBF_INSN_ST_D; goto extract_sfmt_st_d;
469 case 166 :
470 if ((entire_insn & 0xf8f00000) == 0xa0600000)
471 { itype = M32RBF_INSN_BSET; goto extract_sfmt_bset; }
472 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
473 case 167 :
474 if ((entire_insn & 0xf8f00000) == 0xa0700000)
475 { itype = M32RBF_INSN_BCLR; goto extract_sfmt_bset; }
476 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
477 case 168 : itype = M32RBF_INSN_LDB_D; goto extract_sfmt_ldb_d;
478 case 169 : itype = M32RBF_INSN_LDUB_D; goto extract_sfmt_ldb_d;
479 case 170 : itype = M32RBF_INSN_LDH_D; goto extract_sfmt_ldh_d;
480 case 171 : itype = M32RBF_INSN_LDUH_D; goto extract_sfmt_ldh_d;
481 case 172 : itype = M32RBF_INSN_LD_D; goto extract_sfmt_ld_d;
482 case 176 : itype = M32RBF_INSN_BEQ; goto extract_sfmt_beq;
483 case 177 : itype = M32RBF_INSN_BNE; goto extract_sfmt_beq;
484 case 184 :
485 if ((entire_insn & 0xfff00000) == 0xb0800000)
486 { itype = M32RBF_INSN_BEQZ; goto extract_sfmt_beqz; }
487 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
488 case 185 :
489 if ((entire_insn & 0xfff00000) == 0xb0900000)
490 { itype = M32RBF_INSN_BNEZ; goto extract_sfmt_beqz; }
491 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
492 case 186 :
493 if ((entire_insn & 0xfff00000) == 0xb0a00000)
494 { itype = M32RBF_INSN_BLTZ; goto extract_sfmt_beqz; }
495 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
496 case 187 :
497 if ((entire_insn & 0xfff00000) == 0xb0b00000)
498 { itype = M32RBF_INSN_BGEZ; goto extract_sfmt_beqz; }
499 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
500 case 188 :
501 if ((entire_insn & 0xfff00000) == 0xb0c00000)
502 { itype = M32RBF_INSN_BLEZ; goto extract_sfmt_beqz; }
503 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
504 case 189 :
505 if ((entire_insn & 0xfff00000) == 0xb0d00000)
506 { itype = M32RBF_INSN_BGTZ; goto extract_sfmt_beqz; }
507 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
508 case 220 :
509 if ((entire_insn & 0xf0ff0000) == 0xd0c00000)
510 { itype = M32RBF_INSN_SETH; goto extract_sfmt_seth; }
511 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
512 case 224 : /* fall through */
513 case 225 : /* fall through */
514 case 226 : /* fall through */
515 case 227 : /* fall through */
516 case 228 : /* fall through */
517 case 229 : /* fall through */
518 case 230 : /* fall through */
519 case 231 : /* fall through */
520 case 232 : /* fall through */
521 case 233 : /* fall through */
522 case 234 : /* fall through */
523 case 235 : /* fall through */
524 case 236 : /* fall through */
525 case 237 : /* fall through */
526 case 238 : /* fall through */
527 case 239 : itype = M32RBF_INSN_LD24; goto extract_sfmt_ld24;
528 case 240 : /* fall through */
529 case 241 : /* fall through */
530 case 242 : /* fall through */
531 case 243 : /* fall through */
532 case 244 : /* fall through */
533 case 245 : /* fall through */
534 case 246 : /* fall through */
535 case 247 : /* fall through */
536 case 248 : /* fall through */
537 case 249 : /* fall through */
538 case 250 : /* fall through */
539 case 251 : /* fall through */
540 case 252 : /* fall through */
541 case 253 : /* fall through */
542 case 254 : /* fall through */
543 case 255 :
544 {
545 unsigned int val = (((insn >> 8) & (3 << 0)));
546 switch (val)
547 {
548 case 0 :
549 if ((entire_insn & 0xff000000) == 0xfc000000)
550 { itype = M32RBF_INSN_BC24; goto extract_sfmt_bc24; }
551 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
552 case 1 :
553 if ((entire_insn & 0xff000000) == 0xfd000000)
554 { itype = M32RBF_INSN_BNC24; goto extract_sfmt_bc24; }
555 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
556 case 2 :
557 if ((entire_insn & 0xff000000) == 0xfe000000)
558 { itype = M32RBF_INSN_BL24; goto extract_sfmt_bl24; }
559 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
560 case 3 :
561 if ((entire_insn & 0xff000000) == 0xff000000)
562 { itype = M32RBF_INSN_BRA24; goto extract_sfmt_bra24; }
563 itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
564 default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
565 }
566 }
567 default : itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
568 }
569 }
570 }
571
572 /* The instruction has been decoded, now extract the fields. */
573
574 extract_sfmt_empty:
575 {
576 const IDESC *idesc = &m32rbf_insn_data[itype];
577 #define FLD(f) abuf->fields.sfmt_empty.f
578
579
580 /* Record the fields for the semantic handler. */
581 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0));
582
583 #undef FLD
584 return idesc;
585 }
586
587 extract_sfmt_add:
588 {
589 const IDESC *idesc = &m32rbf_insn_data[itype];
590 CGEN_INSN_WORD insn = entire_insn;
591 #define FLD(f) abuf->fields.sfmt_add.f
592 UINT f_r1;
593 UINT f_r2;
594
595 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
596 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
597
598 /* Record the fields for the semantic handler. */
599 FLD (f_r1) = f_r1;
600 FLD (f_r2) = f_r2;
601 FLD (i_dr) = & CPU (h_gr)[f_r1];
602 FLD (i_sr) = & CPU (h_gr)[f_r2];
603 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));
604
605 #if WITH_PROFILE_MODEL_P
606 /* Record the fields for profiling. */
607 if (PROFILE_MODEL_P (current_cpu))
608 {
609 FLD (in_dr) = f_r1;
610 FLD (in_sr) = f_r2;
611 FLD (out_dr) = f_r1;
612 }
613 #endif
614 #undef FLD
615 return idesc;
616 }
617
618 extract_sfmt_add3:
619 {
620 const IDESC *idesc = &m32rbf_insn_data[itype];
621 CGEN_INSN_WORD insn = entire_insn;
622 #define FLD(f) abuf->fields.sfmt_add3.f
623 UINT f_r1;
624 UINT f_r2;
625 INT f_simm16;
626
627 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
628 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
629 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
630
631 /* Record the fields for the semantic handler. */
632 FLD (f_simm16) = f_simm16;
633 FLD (f_r2) = f_r2;
634 FLD (f_r1) = f_r1;
635 FLD (i_sr) = & CPU (h_gr)[f_r2];
636 FLD (i_dr) = & CPU (h_gr)[f_r1];
637 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));
638
639 #if WITH_PROFILE_MODEL_P
640 /* Record the fields for profiling. */
641 if (PROFILE_MODEL_P (current_cpu))
642 {
643 FLD (in_sr) = f_r2;
644 FLD (out_dr) = f_r1;
645 }
646 #endif
647 #undef FLD
648 return idesc;
649 }
650
651 extract_sfmt_and3:
652 {
653 const IDESC *idesc = &m32rbf_insn_data[itype];
654 CGEN_INSN_WORD insn = entire_insn;
655 #define FLD(f) abuf->fields.sfmt_and3.f
656 UINT f_r1;
657 UINT f_r2;
658 UINT f_uimm16;
659
660 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
661 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
662 f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
663
664 /* Record the fields for the semantic handler. */
665 FLD (f_r2) = f_r2;
666 FLD (f_uimm16) = f_uimm16;
667 FLD (f_r1) = f_r1;
668 FLD (i_sr) = & CPU (h_gr)[f_r2];
669 FLD (i_dr) = & CPU (h_gr)[f_r1];
670 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));
671
672 #if WITH_PROFILE_MODEL_P
673 /* Record the fields for profiling. */
674 if (PROFILE_MODEL_P (current_cpu))
675 {
676 FLD (in_sr) = f_r2;
677 FLD (out_dr) = f_r1;
678 }
679 #endif
680 #undef FLD
681 return idesc;
682 }
683
684 extract_sfmt_or3:
685 {
686 const IDESC *idesc = &m32rbf_insn_data[itype];
687 CGEN_INSN_WORD insn = entire_insn;
688 #define FLD(f) abuf->fields.sfmt_and3.f
689 UINT f_r1;
690 UINT f_r2;
691 UINT f_uimm16;
692
693 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
694 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
695 f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
696
697 /* Record the fields for the semantic handler. */
698 FLD (f_r2) = f_r2;
699 FLD (f_uimm16) = f_uimm16;
700 FLD (f_r1) = f_r1;
701 FLD (i_sr) = & CPU (h_gr)[f_r2];
702 FLD (i_dr) = & CPU (h_gr)[f_r1];
703 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));
704
705 #if WITH_PROFILE_MODEL_P
706 /* Record the fields for profiling. */
707 if (PROFILE_MODEL_P (current_cpu))
708 {
709 FLD (in_sr) = f_r2;
710 FLD (out_dr) = f_r1;
711 }
712 #endif
713 #undef FLD
714 return idesc;
715 }
716
717 extract_sfmt_addi:
718 {
719 const IDESC *idesc = &m32rbf_insn_data[itype];
720 CGEN_INSN_WORD insn = entire_insn;
721 #define FLD(f) abuf->fields.sfmt_addi.f
722 UINT f_r1;
723 INT f_simm8;
724
725 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
726 f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8);
727
728 /* Record the fields for the semantic handler. */
729 FLD (f_r1) = f_r1;
730 FLD (f_simm8) = f_simm8;
731 FLD (i_dr) = & CPU (h_gr)[f_r1];
732 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));
733
734 #if WITH_PROFILE_MODEL_P
735 /* Record the fields for profiling. */
736 if (PROFILE_MODEL_P (current_cpu))
737 {
738 FLD (in_dr) = f_r1;
739 FLD (out_dr) = f_r1;
740 }
741 #endif
742 #undef FLD
743 return idesc;
744 }
745
746 extract_sfmt_addv:
747 {
748 const IDESC *idesc = &m32rbf_insn_data[itype];
749 CGEN_INSN_WORD insn = entire_insn;
750 #define FLD(f) abuf->fields.sfmt_add.f
751 UINT f_r1;
752 UINT f_r2;
753
754 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
755 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
756
757 /* Record the fields for the semantic handler. */
758 FLD (f_r1) = f_r1;
759 FLD (f_r2) = f_r2;
760 FLD (i_dr) = & CPU (h_gr)[f_r1];
761 FLD (i_sr) = & CPU (h_gr)[f_r2];
762 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));
763
764 #if WITH_PROFILE_MODEL_P
765 /* Record the fields for profiling. */
766 if (PROFILE_MODEL_P (current_cpu))
767 {
768 FLD (in_dr) = f_r1;
769 FLD (in_sr) = f_r2;
770 FLD (out_dr) = f_r1;
771 }
772 #endif
773 #undef FLD
774 return idesc;
775 }
776
777 extract_sfmt_addv3:
778 {
779 const IDESC *idesc = &m32rbf_insn_data[itype];
780 CGEN_INSN_WORD insn = entire_insn;
781 #define FLD(f) abuf->fields.sfmt_add3.f
782 UINT f_r1;
783 UINT f_r2;
784 INT f_simm16;
785
786 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
787 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
788 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
789
790 /* Record the fields for the semantic handler. */
791 FLD (f_simm16) = f_simm16;
792 FLD (f_r2) = f_r2;
793 FLD (f_r1) = f_r1;
794 FLD (i_sr) = & CPU (h_gr)[f_r2];
795 FLD (i_dr) = & CPU (h_gr)[f_r1];
796 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));
797
798 #if WITH_PROFILE_MODEL_P
799 /* Record the fields for profiling. */
800 if (PROFILE_MODEL_P (current_cpu))
801 {
802 FLD (in_sr) = f_r2;
803 FLD (out_dr) = f_r1;
804 }
805 #endif
806 #undef FLD
807 return idesc;
808 }
809
810 extract_sfmt_addx:
811 {
812 const IDESC *idesc = &m32rbf_insn_data[itype];
813 CGEN_INSN_WORD insn = entire_insn;
814 #define FLD(f) abuf->fields.sfmt_add.f
815 UINT f_r1;
816 UINT f_r2;
817
818 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
819 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
820
821 /* Record the fields for the semantic handler. */
822 FLD (f_r1) = f_r1;
823 FLD (f_r2) = f_r2;
824 FLD (i_dr) = & CPU (h_gr)[f_r1];
825 FLD (i_sr) = & CPU (h_gr)[f_r2];
826 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));
827
828 #if WITH_PROFILE_MODEL_P
829 /* Record the fields for profiling. */
830 if (PROFILE_MODEL_P (current_cpu))
831 {
832 FLD (in_dr) = f_r1;
833 FLD (in_sr) = f_r2;
834 FLD (out_dr) = f_r1;
835 }
836 #endif
837 #undef FLD
838 return idesc;
839 }
840
841 extract_sfmt_bc8:
842 {
843 const IDESC *idesc = &m32rbf_insn_data[itype];
844 CGEN_INSN_WORD insn = entire_insn;
845 #define FLD(f) abuf->fields.sfmt_bl8.f
846 SI f_disp8;
847
848 f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
849
850 /* Record the fields for the semantic handler. */
851 FLD (i_disp8) = f_disp8;
852 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
853
854 #if WITH_PROFILE_MODEL_P
855 /* Record the fields for profiling. */
856 if (PROFILE_MODEL_P (current_cpu))
857 {
858 }
859 #endif
860 #undef FLD
861 return idesc;
862 }
863
864 extract_sfmt_bc24:
865 {
866 const IDESC *idesc = &m32rbf_insn_data[itype];
867 CGEN_INSN_WORD insn = entire_insn;
868 #define FLD(f) abuf->fields.sfmt_bl24.f
869 SI f_disp24;
870
871 f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
872
873 /* Record the fields for the semantic handler. */
874 FLD (i_disp24) = f_disp24;
875 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
876
877 #if WITH_PROFILE_MODEL_P
878 /* Record the fields for profiling. */
879 if (PROFILE_MODEL_P (current_cpu))
880 {
881 }
882 #endif
883 #undef FLD
884 return idesc;
885 }
886
887 extract_sfmt_beq:
888 {
889 const IDESC *idesc = &m32rbf_insn_data[itype];
890 CGEN_INSN_WORD insn = entire_insn;
891 #define FLD(f) abuf->fields.sfmt_beq.f
892 UINT f_r1;
893 UINT f_r2;
894 SI f_disp16;
895
896 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
897 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
898 f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) << (2))) + (pc));
899
900 /* Record the fields for the semantic handler. */
901 FLD (f_r1) = f_r1;
902 FLD (f_r2) = f_r2;
903 FLD (i_disp16) = f_disp16;
904 FLD (i_src1) = & CPU (h_gr)[f_r1];
905 FLD (i_src2) = & CPU (h_gr)[f_r2];
906 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));
907
908 #if WITH_PROFILE_MODEL_P
909 /* Record the fields for profiling. */
910 if (PROFILE_MODEL_P (current_cpu))
911 {
912 FLD (in_src1) = f_r1;
913 FLD (in_src2) = f_r2;
914 }
915 #endif
916 #undef FLD
917 return idesc;
918 }
919
920 extract_sfmt_beqz:
921 {
922 const IDESC *idesc = &m32rbf_insn_data[itype];
923 CGEN_INSN_WORD insn = entire_insn;
924 #define FLD(f) abuf->fields.sfmt_beq.f
925 UINT f_r2;
926 SI f_disp16;
927
928 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
929 f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) << (2))) + (pc));
930
931 /* Record the fields for the semantic handler. */
932 FLD (f_r2) = f_r2;
933 FLD (i_disp16) = f_disp16;
934 FLD (i_src2) = & CPU (h_gr)[f_r2];
935 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));
936
937 #if WITH_PROFILE_MODEL_P
938 /* Record the fields for profiling. */
939 if (PROFILE_MODEL_P (current_cpu))
940 {
941 FLD (in_src2) = f_r2;
942 }
943 #endif
944 #undef FLD
945 return idesc;
946 }
947
948 extract_sfmt_bl8:
949 {
950 const IDESC *idesc = &m32rbf_insn_data[itype];
951 CGEN_INSN_WORD insn = entire_insn;
952 #define FLD(f) abuf->fields.sfmt_bl8.f
953 SI f_disp8;
954
955 f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
956
957 /* Record the fields for the semantic handler. */
958 FLD (i_disp8) = f_disp8;
959 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
960
961 #if WITH_PROFILE_MODEL_P
962 /* Record the fields for profiling. */
963 if (PROFILE_MODEL_P (current_cpu))
964 {
965 FLD (out_h_gr_SI_14) = 14;
966 }
967 #endif
968 #undef FLD
969 return idesc;
970 }
971
972 extract_sfmt_bl24:
973 {
974 const IDESC *idesc = &m32rbf_insn_data[itype];
975 CGEN_INSN_WORD insn = entire_insn;
976 #define FLD(f) abuf->fields.sfmt_bl24.f
977 SI f_disp24;
978
979 f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
980
981 /* Record the fields for the semantic handler. */
982 FLD (i_disp24) = f_disp24;
983 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (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 (out_h_gr_SI_14) = 14;
990 }
991 #endif
992 #undef FLD
993 return idesc;
994 }
995
996 extract_sfmt_bra8:
997 {
998 const IDESC *idesc = &m32rbf_insn_data[itype];
999 CGEN_INSN_WORD insn = entire_insn;
1000 #define FLD(f) abuf->fields.sfmt_bl8.f
1001 SI f_disp8;
1002
1003 f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (2))) + (((pc) & (-4))));
1004
1005 /* Record the fields for the semantic handler. */
1006 FLD (i_disp8) = f_disp8;
1007 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1008
1009 #if WITH_PROFILE_MODEL_P
1010 /* Record the fields for profiling. */
1011 if (PROFILE_MODEL_P (current_cpu))
1012 {
1013 }
1014 #endif
1015 #undef FLD
1016 return idesc;
1017 }
1018
1019 extract_sfmt_bra24:
1020 {
1021 const IDESC *idesc = &m32rbf_insn_data[itype];
1022 CGEN_INSN_WORD insn = entire_insn;
1023 #define FLD(f) abuf->fields.sfmt_bl24.f
1024 SI f_disp24;
1025
1026 f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) << (2))) + (pc));
1027
1028 /* Record the fields for the semantic handler. */
1029 FLD (i_disp24) = f_disp24;
1030 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1031
1032 #if WITH_PROFILE_MODEL_P
1033 /* Record the fields for profiling. */
1034 if (PROFILE_MODEL_P (current_cpu))
1035 {
1036 }
1037 #endif
1038 #undef FLD
1039 return idesc;
1040 }
1041
1042 extract_sfmt_cmp:
1043 {
1044 const IDESC *idesc = &m32rbf_insn_data[itype];
1045 CGEN_INSN_WORD insn = entire_insn;
1046 #define FLD(f) abuf->fields.sfmt_st_plus.f
1047 UINT f_r1;
1048 UINT f_r2;
1049
1050 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1051 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1052
1053 /* Record the fields for the semantic handler. */
1054 FLD (f_r1) = f_r1;
1055 FLD (f_r2) = f_r2;
1056 FLD (i_src1) = & CPU (h_gr)[f_r1];
1057 FLD (i_src2) = & CPU (h_gr)[f_r2];
1058 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));
1059
1060 #if WITH_PROFILE_MODEL_P
1061 /* Record the fields for profiling. */
1062 if (PROFILE_MODEL_P (current_cpu))
1063 {
1064 FLD (in_src1) = f_r1;
1065 FLD (in_src2) = f_r2;
1066 }
1067 #endif
1068 #undef FLD
1069 return idesc;
1070 }
1071
1072 extract_sfmt_cmpi:
1073 {
1074 const IDESC *idesc = &m32rbf_insn_data[itype];
1075 CGEN_INSN_WORD insn = entire_insn;
1076 #define FLD(f) abuf->fields.sfmt_st_d.f
1077 UINT f_r2;
1078 INT f_simm16;
1079
1080 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1081 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1082
1083 /* Record the fields for the semantic handler. */
1084 FLD (f_simm16) = f_simm16;
1085 FLD (f_r2) = f_r2;
1086 FLD (i_src2) = & CPU (h_gr)[f_r2];
1087 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));
1088
1089 #if WITH_PROFILE_MODEL_P
1090 /* Record the fields for profiling. */
1091 if (PROFILE_MODEL_P (current_cpu))
1092 {
1093 FLD (in_src2) = f_r2;
1094 }
1095 #endif
1096 #undef FLD
1097 return idesc;
1098 }
1099
1100 extract_sfmt_div:
1101 {
1102 const IDESC *idesc = &m32rbf_insn_data[itype];
1103 CGEN_INSN_WORD insn = entire_insn;
1104 #define FLD(f) abuf->fields.sfmt_add.f
1105 UINT f_r1;
1106 UINT f_r2;
1107
1108 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1109 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1110
1111 /* Record the fields for the semantic handler. */
1112 FLD (f_r1) = f_r1;
1113 FLD (f_r2) = f_r2;
1114 FLD (i_dr) = & CPU (h_gr)[f_r1];
1115 FLD (i_sr) = & CPU (h_gr)[f_r2];
1116 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));
1117
1118 #if WITH_PROFILE_MODEL_P
1119 /* Record the fields for profiling. */
1120 if (PROFILE_MODEL_P (current_cpu))
1121 {
1122 FLD (in_dr) = f_r1;
1123 FLD (in_sr) = f_r2;
1124 FLD (out_dr) = f_r1;
1125 }
1126 #endif
1127 #undef FLD
1128 return idesc;
1129 }
1130
1131 extract_sfmt_jl:
1132 {
1133 const IDESC *idesc = &m32rbf_insn_data[itype];
1134 CGEN_INSN_WORD insn = entire_insn;
1135 #define FLD(f) abuf->fields.sfmt_jl.f
1136 UINT f_r2;
1137
1138 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1139
1140 /* Record the fields for the semantic handler. */
1141 FLD (f_r2) = f_r2;
1142 FLD (i_sr) = & CPU (h_gr)[f_r2];
1143 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));
1144
1145 #if WITH_PROFILE_MODEL_P
1146 /* Record the fields for profiling. */
1147 if (PROFILE_MODEL_P (current_cpu))
1148 {
1149 FLD (in_sr) = f_r2;
1150 FLD (out_h_gr_SI_14) = 14;
1151 }
1152 #endif
1153 #undef FLD
1154 return idesc;
1155 }
1156
1157 extract_sfmt_jmp:
1158 {
1159 const IDESC *idesc = &m32rbf_insn_data[itype];
1160 CGEN_INSN_WORD insn = entire_insn;
1161 #define FLD(f) abuf->fields.sfmt_jl.f
1162 UINT f_r2;
1163
1164 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1165
1166 /* Record the fields for the semantic handler. */
1167 FLD (f_r2) = f_r2;
1168 FLD (i_sr) = & CPU (h_gr)[f_r2];
1169 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));
1170
1171 #if WITH_PROFILE_MODEL_P
1172 /* Record the fields for profiling. */
1173 if (PROFILE_MODEL_P (current_cpu))
1174 {
1175 FLD (in_sr) = f_r2;
1176 }
1177 #endif
1178 #undef FLD
1179 return idesc;
1180 }
1181
1182 extract_sfmt_ld:
1183 {
1184 const IDESC *idesc = &m32rbf_insn_data[itype];
1185 CGEN_INSN_WORD insn = entire_insn;
1186 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1187 UINT f_r1;
1188 UINT f_r2;
1189
1190 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1191 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1192
1193 /* Record the fields for the semantic handler. */
1194 FLD (f_r2) = f_r2;
1195 FLD (f_r1) = f_r1;
1196 FLD (i_sr) = & CPU (h_gr)[f_r2];
1197 FLD (i_dr) = & CPU (h_gr)[f_r1];
1198 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));
1199
1200 #if WITH_PROFILE_MODEL_P
1201 /* Record the fields for profiling. */
1202 if (PROFILE_MODEL_P (current_cpu))
1203 {
1204 FLD (in_sr) = f_r2;
1205 FLD (out_dr) = f_r1;
1206 }
1207 #endif
1208 #undef FLD
1209 return idesc;
1210 }
1211
1212 extract_sfmt_ld_d:
1213 {
1214 const IDESC *idesc = &m32rbf_insn_data[itype];
1215 CGEN_INSN_WORD insn = entire_insn;
1216 #define FLD(f) abuf->fields.sfmt_add3.f
1217 UINT f_r1;
1218 UINT f_r2;
1219 INT f_simm16;
1220
1221 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1222 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1223 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1224
1225 /* Record the fields for the semantic handler. */
1226 FLD (f_simm16) = f_simm16;
1227 FLD (f_r2) = f_r2;
1228 FLD (f_r1) = f_r1;
1229 FLD (i_sr) = & CPU (h_gr)[f_r2];
1230 FLD (i_dr) = & CPU (h_gr)[f_r1];
1231 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));
1232
1233 #if WITH_PROFILE_MODEL_P
1234 /* Record the fields for profiling. */
1235 if (PROFILE_MODEL_P (current_cpu))
1236 {
1237 FLD (in_sr) = f_r2;
1238 FLD (out_dr) = f_r1;
1239 }
1240 #endif
1241 #undef FLD
1242 return idesc;
1243 }
1244
1245 extract_sfmt_ldb:
1246 {
1247 const IDESC *idesc = &m32rbf_insn_data[itype];
1248 CGEN_INSN_WORD insn = entire_insn;
1249 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1250 UINT f_r1;
1251 UINT f_r2;
1252
1253 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1254 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1255
1256 /* Record the fields for the semantic handler. */
1257 FLD (f_r2) = f_r2;
1258 FLD (f_r1) = f_r1;
1259 FLD (i_sr) = & CPU (h_gr)[f_r2];
1260 FLD (i_dr) = & CPU (h_gr)[f_r1];
1261 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb", "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));
1262
1263 #if WITH_PROFILE_MODEL_P
1264 /* Record the fields for profiling. */
1265 if (PROFILE_MODEL_P (current_cpu))
1266 {
1267 FLD (in_sr) = f_r2;
1268 FLD (out_dr) = f_r1;
1269 }
1270 #endif
1271 #undef FLD
1272 return idesc;
1273 }
1274
1275 extract_sfmt_ldb_d:
1276 {
1277 const IDESC *idesc = &m32rbf_insn_data[itype];
1278 CGEN_INSN_WORD insn = entire_insn;
1279 #define FLD(f) abuf->fields.sfmt_add3.f
1280 UINT f_r1;
1281 UINT f_r2;
1282 INT f_simm16;
1283
1284 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1285 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1286 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1287
1288 /* Record the fields for the semantic handler. */
1289 FLD (f_simm16) = f_simm16;
1290 FLD (f_r2) = f_r2;
1291 FLD (f_r1) = f_r1;
1292 FLD (i_sr) = & CPU (h_gr)[f_r2];
1293 FLD (i_dr) = & CPU (h_gr)[f_r1];
1294 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb_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));
1295
1296 #if WITH_PROFILE_MODEL_P
1297 /* Record the fields for profiling. */
1298 if (PROFILE_MODEL_P (current_cpu))
1299 {
1300 FLD (in_sr) = f_r2;
1301 FLD (out_dr) = f_r1;
1302 }
1303 #endif
1304 #undef FLD
1305 return idesc;
1306 }
1307
1308 extract_sfmt_ldh:
1309 {
1310 const IDESC *idesc = &m32rbf_insn_data[itype];
1311 CGEN_INSN_WORD insn = entire_insn;
1312 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1313 UINT f_r1;
1314 UINT f_r2;
1315
1316 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1317 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1318
1319 /* Record the fields for the semantic handler. */
1320 FLD (f_r2) = f_r2;
1321 FLD (f_r1) = f_r1;
1322 FLD (i_sr) = & CPU (h_gr)[f_r2];
1323 FLD (i_dr) = & CPU (h_gr)[f_r1];
1324 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh", "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));
1325
1326 #if WITH_PROFILE_MODEL_P
1327 /* Record the fields for profiling. */
1328 if (PROFILE_MODEL_P (current_cpu))
1329 {
1330 FLD (in_sr) = f_r2;
1331 FLD (out_dr) = f_r1;
1332 }
1333 #endif
1334 #undef FLD
1335 return idesc;
1336 }
1337
1338 extract_sfmt_ldh_d:
1339 {
1340 const IDESC *idesc = &m32rbf_insn_data[itype];
1341 CGEN_INSN_WORD insn = entire_insn;
1342 #define FLD(f) abuf->fields.sfmt_add3.f
1343 UINT f_r1;
1344 UINT f_r2;
1345 INT f_simm16;
1346
1347 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1348 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1349 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1350
1351 /* Record the fields for the semantic handler. */
1352 FLD (f_simm16) = f_simm16;
1353 FLD (f_r2) = f_r2;
1354 FLD (f_r1) = f_r1;
1355 FLD (i_sr) = & CPU (h_gr)[f_r2];
1356 FLD (i_dr) = & CPU (h_gr)[f_r1];
1357 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh_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));
1358
1359 #if WITH_PROFILE_MODEL_P
1360 /* Record the fields for profiling. */
1361 if (PROFILE_MODEL_P (current_cpu))
1362 {
1363 FLD (in_sr) = f_r2;
1364 FLD (out_dr) = f_r1;
1365 }
1366 #endif
1367 #undef FLD
1368 return idesc;
1369 }
1370
1371 extract_sfmt_ld_plus:
1372 {
1373 const IDESC *idesc = &m32rbf_insn_data[itype];
1374 CGEN_INSN_WORD insn = entire_insn;
1375 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1376 UINT f_r1;
1377 UINT f_r2;
1378
1379 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1380 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1381
1382 /* Record the fields for the semantic handler. */
1383 FLD (f_r2) = f_r2;
1384 FLD (f_r1) = f_r1;
1385 FLD (i_sr) = & CPU (h_gr)[f_r2];
1386 FLD (i_dr) = & CPU (h_gr)[f_r1];
1387 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));
1388
1389 #if WITH_PROFILE_MODEL_P
1390 /* Record the fields for profiling. */
1391 if (PROFILE_MODEL_P (current_cpu))
1392 {
1393 FLD (in_sr) = f_r2;
1394 FLD (out_dr) = f_r1;
1395 FLD (out_sr) = f_r2;
1396 }
1397 #endif
1398 #undef FLD
1399 return idesc;
1400 }
1401
1402 extract_sfmt_ld24:
1403 {
1404 const IDESC *idesc = &m32rbf_insn_data[itype];
1405 CGEN_INSN_WORD insn = entire_insn;
1406 #define FLD(f) abuf->fields.sfmt_ld24.f
1407 UINT f_r1;
1408 UINT f_uimm24;
1409
1410 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1411 f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24);
1412
1413 /* Record the fields for the semantic handler. */
1414 FLD (f_r1) = f_r1;
1415 FLD (i_uimm24) = f_uimm24;
1416 FLD (i_dr) = & CPU (h_gr)[f_r1];
1417 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));
1418
1419 #if WITH_PROFILE_MODEL_P
1420 /* Record the fields for profiling. */
1421 if (PROFILE_MODEL_P (current_cpu))
1422 {
1423 FLD (out_dr) = f_r1;
1424 }
1425 #endif
1426 #undef FLD
1427 return idesc;
1428 }
1429
1430 extract_sfmt_ldi8:
1431 {
1432 const IDESC *idesc = &m32rbf_insn_data[itype];
1433 CGEN_INSN_WORD insn = entire_insn;
1434 #define FLD(f) abuf->fields.sfmt_addi.f
1435 UINT f_r1;
1436 INT f_simm8;
1437
1438 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1439 f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8);
1440
1441 /* Record the fields for the semantic handler. */
1442 FLD (f_simm8) = f_simm8;
1443 FLD (f_r1) = f_r1;
1444 FLD (i_dr) = & CPU (h_gr)[f_r1];
1445 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));
1446
1447 #if WITH_PROFILE_MODEL_P
1448 /* Record the fields for profiling. */
1449 if (PROFILE_MODEL_P (current_cpu))
1450 {
1451 FLD (out_dr) = f_r1;
1452 }
1453 #endif
1454 #undef FLD
1455 return idesc;
1456 }
1457
1458 extract_sfmt_ldi16:
1459 {
1460 const IDESC *idesc = &m32rbf_insn_data[itype];
1461 CGEN_INSN_WORD insn = entire_insn;
1462 #define FLD(f) abuf->fields.sfmt_add3.f
1463 UINT f_r1;
1464 INT f_simm16;
1465
1466 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1467 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1468
1469 /* Record the fields for the semantic handler. */
1470 FLD (f_simm16) = f_simm16;
1471 FLD (f_r1) = f_r1;
1472 FLD (i_dr) = & CPU (h_gr)[f_r1];
1473 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));
1474
1475 #if WITH_PROFILE_MODEL_P
1476 /* Record the fields for profiling. */
1477 if (PROFILE_MODEL_P (current_cpu))
1478 {
1479 FLD (out_dr) = f_r1;
1480 }
1481 #endif
1482 #undef FLD
1483 return idesc;
1484 }
1485
1486 extract_sfmt_lock:
1487 {
1488 const IDESC *idesc = &m32rbf_insn_data[itype];
1489 CGEN_INSN_WORD insn = entire_insn;
1490 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1491 UINT f_r1;
1492 UINT f_r2;
1493
1494 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1495 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1496
1497 /* Record the fields for the semantic handler. */
1498 FLD (f_r2) = f_r2;
1499 FLD (f_r1) = f_r1;
1500 FLD (i_sr) = & CPU (h_gr)[f_r2];
1501 FLD (i_dr) = & CPU (h_gr)[f_r1];
1502 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));
1503
1504 #if WITH_PROFILE_MODEL_P
1505 /* Record the fields for profiling. */
1506 if (PROFILE_MODEL_P (current_cpu))
1507 {
1508 FLD (in_sr) = f_r2;
1509 FLD (out_dr) = f_r1;
1510 }
1511 #endif
1512 #undef FLD
1513 return idesc;
1514 }
1515
1516 extract_sfmt_machi:
1517 {
1518 const IDESC *idesc = &m32rbf_insn_data[itype];
1519 CGEN_INSN_WORD insn = entire_insn;
1520 #define FLD(f) abuf->fields.sfmt_st_plus.f
1521 UINT f_r1;
1522 UINT f_r2;
1523
1524 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1525 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1526
1527 /* Record the fields for the semantic handler. */
1528 FLD (f_r1) = f_r1;
1529 FLD (f_r2) = f_r2;
1530 FLD (i_src1) = & CPU (h_gr)[f_r1];
1531 FLD (i_src2) = & CPU (h_gr)[f_r2];
1532 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));
1533
1534 #if WITH_PROFILE_MODEL_P
1535 /* Record the fields for profiling. */
1536 if (PROFILE_MODEL_P (current_cpu))
1537 {
1538 FLD (in_src1) = f_r1;
1539 FLD (in_src2) = f_r2;
1540 }
1541 #endif
1542 #undef FLD
1543 return idesc;
1544 }
1545
1546 extract_sfmt_mulhi:
1547 {
1548 const IDESC *idesc = &m32rbf_insn_data[itype];
1549 CGEN_INSN_WORD insn = entire_insn;
1550 #define FLD(f) abuf->fields.sfmt_st_plus.f
1551 UINT f_r1;
1552 UINT f_r2;
1553
1554 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1555 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1556
1557 /* Record the fields for the semantic handler. */
1558 FLD (f_r1) = f_r1;
1559 FLD (f_r2) = f_r2;
1560 FLD (i_src1) = & CPU (h_gr)[f_r1];
1561 FLD (i_src2) = & CPU (h_gr)[f_r2];
1562 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));
1563
1564 #if WITH_PROFILE_MODEL_P
1565 /* Record the fields for profiling. */
1566 if (PROFILE_MODEL_P (current_cpu))
1567 {
1568 FLD (in_src1) = f_r1;
1569 FLD (in_src2) = f_r2;
1570 }
1571 #endif
1572 #undef FLD
1573 return idesc;
1574 }
1575
1576 extract_sfmt_mv:
1577 {
1578 const IDESC *idesc = &m32rbf_insn_data[itype];
1579 CGEN_INSN_WORD insn = entire_insn;
1580 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1581 UINT f_r1;
1582 UINT f_r2;
1583
1584 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1585 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1586
1587 /* Record the fields for the semantic handler. */
1588 FLD (f_r2) = f_r2;
1589 FLD (f_r1) = f_r1;
1590 FLD (i_sr) = & CPU (h_gr)[f_r2];
1591 FLD (i_dr) = & CPU (h_gr)[f_r1];
1592 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));
1593
1594 #if WITH_PROFILE_MODEL_P
1595 /* Record the fields for profiling. */
1596 if (PROFILE_MODEL_P (current_cpu))
1597 {
1598 FLD (in_sr) = f_r2;
1599 FLD (out_dr) = f_r1;
1600 }
1601 #endif
1602 #undef FLD
1603 return idesc;
1604 }
1605
1606 extract_sfmt_mvfachi:
1607 {
1608 const IDESC *idesc = &m32rbf_insn_data[itype];
1609 CGEN_INSN_WORD insn = entire_insn;
1610 #define FLD(f) abuf->fields.sfmt_seth.f
1611 UINT f_r1;
1612
1613 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1614
1615 /* Record the fields for the semantic handler. */
1616 FLD (f_r1) = f_r1;
1617 FLD (i_dr) = & CPU (h_gr)[f_r1];
1618 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));
1619
1620 #if WITH_PROFILE_MODEL_P
1621 /* Record the fields for profiling. */
1622 if (PROFILE_MODEL_P (current_cpu))
1623 {
1624 FLD (out_dr) = f_r1;
1625 }
1626 #endif
1627 #undef FLD
1628 return idesc;
1629 }
1630
1631 extract_sfmt_mvfc:
1632 {
1633 const IDESC *idesc = &m32rbf_insn_data[itype];
1634 CGEN_INSN_WORD insn = entire_insn;
1635 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1636 UINT f_r1;
1637 UINT f_r2;
1638
1639 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1640 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1641
1642 /* Record the fields for the semantic handler. */
1643 FLD (f_r2) = f_r2;
1644 FLD (f_r1) = f_r1;
1645 FLD (i_dr) = & CPU (h_gr)[f_r1];
1646 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));
1647
1648 #if WITH_PROFILE_MODEL_P
1649 /* Record the fields for profiling. */
1650 if (PROFILE_MODEL_P (current_cpu))
1651 {
1652 FLD (out_dr) = f_r1;
1653 }
1654 #endif
1655 #undef FLD
1656 return idesc;
1657 }
1658
1659 extract_sfmt_mvtachi:
1660 {
1661 const IDESC *idesc = &m32rbf_insn_data[itype];
1662 CGEN_INSN_WORD insn = entire_insn;
1663 #define FLD(f) abuf->fields.sfmt_st_plus.f
1664 UINT f_r1;
1665
1666 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1667
1668 /* Record the fields for the semantic handler. */
1669 FLD (f_r1) = f_r1;
1670 FLD (i_src1) = & CPU (h_gr)[f_r1];
1671 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));
1672
1673 #if WITH_PROFILE_MODEL_P
1674 /* Record the fields for profiling. */
1675 if (PROFILE_MODEL_P (current_cpu))
1676 {
1677 FLD (in_src1) = f_r1;
1678 }
1679 #endif
1680 #undef FLD
1681 return idesc;
1682 }
1683
1684 extract_sfmt_mvtc:
1685 {
1686 const IDESC *idesc = &m32rbf_insn_data[itype];
1687 CGEN_INSN_WORD insn = entire_insn;
1688 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1689 UINT f_r1;
1690 UINT f_r2;
1691
1692 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1693 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1694
1695 /* Record the fields for the semantic handler. */
1696 FLD (f_r2) = f_r2;
1697 FLD (f_r1) = f_r1;
1698 FLD (i_sr) = & CPU (h_gr)[f_r2];
1699 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));
1700
1701 #if WITH_PROFILE_MODEL_P
1702 /* Record the fields for profiling. */
1703 if (PROFILE_MODEL_P (current_cpu))
1704 {
1705 FLD (in_sr) = f_r2;
1706 }
1707 #endif
1708 #undef FLD
1709 return idesc;
1710 }
1711
1712 extract_sfmt_nop:
1713 {
1714 const IDESC *idesc = &m32rbf_insn_data[itype];
1715 #define FLD(f) abuf->fields.sfmt_empty.f
1716
1717
1718 /* Record the fields for the semantic handler. */
1719 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0));
1720
1721 #undef FLD
1722 return idesc;
1723 }
1724
1725 extract_sfmt_rac:
1726 {
1727 const IDESC *idesc = &m32rbf_insn_data[itype];
1728 #define FLD(f) abuf->fields.sfmt_empty.f
1729
1730
1731 /* Record the fields for the semantic handler. */
1732 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rac", (char *) 0));
1733
1734 #undef FLD
1735 return idesc;
1736 }
1737
1738 extract_sfmt_rte:
1739 {
1740 const IDESC *idesc = &m32rbf_insn_data[itype];
1741 #define FLD(f) abuf->fields.sfmt_empty.f
1742
1743
1744 /* Record the fields for the semantic handler. */
1745 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0));
1746
1747 #if WITH_PROFILE_MODEL_P
1748 /* Record the fields for profiling. */
1749 if (PROFILE_MODEL_P (current_cpu))
1750 {
1751 }
1752 #endif
1753 #undef FLD
1754 return idesc;
1755 }
1756
1757 extract_sfmt_seth:
1758 {
1759 const IDESC *idesc = &m32rbf_insn_data[itype];
1760 CGEN_INSN_WORD insn = entire_insn;
1761 #define FLD(f) abuf->fields.sfmt_seth.f
1762 UINT f_r1;
1763 UINT f_hi16;
1764
1765 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1766 f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
1767
1768 /* Record the fields for the semantic handler. */
1769 FLD (f_hi16) = f_hi16;
1770 FLD (f_r1) = f_r1;
1771 FLD (i_dr) = & CPU (h_gr)[f_r1];
1772 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));
1773
1774 #if WITH_PROFILE_MODEL_P
1775 /* Record the fields for profiling. */
1776 if (PROFILE_MODEL_P (current_cpu))
1777 {
1778 FLD (out_dr) = f_r1;
1779 }
1780 #endif
1781 #undef FLD
1782 return idesc;
1783 }
1784
1785 extract_sfmt_sll3:
1786 {
1787 const IDESC *idesc = &m32rbf_insn_data[itype];
1788 CGEN_INSN_WORD insn = entire_insn;
1789 #define FLD(f) abuf->fields.sfmt_add3.f
1790 UINT f_r1;
1791 UINT f_r2;
1792 INT f_simm16;
1793
1794 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1795 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1796 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1797
1798 /* Record the fields for the semantic handler. */
1799 FLD (f_simm16) = f_simm16;
1800 FLD (f_r2) = f_r2;
1801 FLD (f_r1) = f_r1;
1802 FLD (i_sr) = & CPU (h_gr)[f_r2];
1803 FLD (i_dr) = & CPU (h_gr)[f_r1];
1804 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));
1805
1806 #if WITH_PROFILE_MODEL_P
1807 /* Record the fields for profiling. */
1808 if (PROFILE_MODEL_P (current_cpu))
1809 {
1810 FLD (in_sr) = f_r2;
1811 FLD (out_dr) = f_r1;
1812 }
1813 #endif
1814 #undef FLD
1815 return idesc;
1816 }
1817
1818 extract_sfmt_slli:
1819 {
1820 const IDESC *idesc = &m32rbf_insn_data[itype];
1821 CGEN_INSN_WORD insn = entire_insn;
1822 #define FLD(f) abuf->fields.sfmt_slli.f
1823 UINT f_r1;
1824 UINT f_uimm5;
1825
1826 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1827 f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5);
1828
1829 /* Record the fields for the semantic handler. */
1830 FLD (f_r1) = f_r1;
1831 FLD (f_uimm5) = f_uimm5;
1832 FLD (i_dr) = & CPU (h_gr)[f_r1];
1833 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));
1834
1835 #if WITH_PROFILE_MODEL_P
1836 /* Record the fields for profiling. */
1837 if (PROFILE_MODEL_P (current_cpu))
1838 {
1839 FLD (in_dr) = f_r1;
1840 FLD (out_dr) = f_r1;
1841 }
1842 #endif
1843 #undef FLD
1844 return idesc;
1845 }
1846
1847 extract_sfmt_st:
1848 {
1849 const IDESC *idesc = &m32rbf_insn_data[itype];
1850 CGEN_INSN_WORD insn = entire_insn;
1851 #define FLD(f) abuf->fields.sfmt_st_plus.f
1852 UINT f_r1;
1853 UINT f_r2;
1854
1855 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1856 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1857
1858 /* Record the fields for the semantic handler. */
1859 FLD (f_r1) = f_r1;
1860 FLD (f_r2) = f_r2;
1861 FLD (i_src1) = & CPU (h_gr)[f_r1];
1862 FLD (i_src2) = & CPU (h_gr)[f_r2];
1863 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));
1864
1865 #if WITH_PROFILE_MODEL_P
1866 /* Record the fields for profiling. */
1867 if (PROFILE_MODEL_P (current_cpu))
1868 {
1869 FLD (in_src1) = f_r1;
1870 FLD (in_src2) = f_r2;
1871 }
1872 #endif
1873 #undef FLD
1874 return idesc;
1875 }
1876
1877 extract_sfmt_st_d:
1878 {
1879 const IDESC *idesc = &m32rbf_insn_data[itype];
1880 CGEN_INSN_WORD insn = entire_insn;
1881 #define FLD(f) abuf->fields.sfmt_st_d.f
1882 UINT f_r1;
1883 UINT f_r2;
1884 INT f_simm16;
1885
1886 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1887 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1888 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1889
1890 /* Record the fields for the semantic handler. */
1891 FLD (f_simm16) = f_simm16;
1892 FLD (f_r1) = f_r1;
1893 FLD (f_r2) = f_r2;
1894 FLD (i_src1) = & CPU (h_gr)[f_r1];
1895 FLD (i_src2) = & CPU (h_gr)[f_r2];
1896 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));
1897
1898 #if WITH_PROFILE_MODEL_P
1899 /* Record the fields for profiling. */
1900 if (PROFILE_MODEL_P (current_cpu))
1901 {
1902 FLD (in_src1) = f_r1;
1903 FLD (in_src2) = f_r2;
1904 }
1905 #endif
1906 #undef FLD
1907 return idesc;
1908 }
1909
1910 extract_sfmt_stb:
1911 {
1912 const IDESC *idesc = &m32rbf_insn_data[itype];
1913 CGEN_INSN_WORD insn = entire_insn;
1914 #define FLD(f) abuf->fields.sfmt_st_plus.f
1915 UINT f_r1;
1916 UINT f_r2;
1917
1918 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1919 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1920
1921 /* Record the fields for the semantic handler. */
1922 FLD (f_r1) = f_r1;
1923 FLD (f_r2) = f_r2;
1924 FLD (i_src1) = & CPU (h_gr)[f_r1];
1925 FLD (i_src2) = & CPU (h_gr)[f_r2];
1926 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));
1927
1928 #if WITH_PROFILE_MODEL_P
1929 /* Record the fields for profiling. */
1930 if (PROFILE_MODEL_P (current_cpu))
1931 {
1932 FLD (in_src1) = f_r1;
1933 FLD (in_src2) = f_r2;
1934 }
1935 #endif
1936 #undef FLD
1937 return idesc;
1938 }
1939
1940 extract_sfmt_stb_d:
1941 {
1942 const IDESC *idesc = &m32rbf_insn_data[itype];
1943 CGEN_INSN_WORD insn = entire_insn;
1944 #define FLD(f) abuf->fields.sfmt_st_d.f
1945 UINT f_r1;
1946 UINT f_r2;
1947 INT f_simm16;
1948
1949 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1950 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1951 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1952
1953 /* Record the fields for the semantic handler. */
1954 FLD (f_simm16) = f_simm16;
1955 FLD (f_r1) = f_r1;
1956 FLD (f_r2) = f_r2;
1957 FLD (i_src1) = & CPU (h_gr)[f_r1];
1958 FLD (i_src2) = & CPU (h_gr)[f_r2];
1959 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));
1960
1961 #if WITH_PROFILE_MODEL_P
1962 /* Record the fields for profiling. */
1963 if (PROFILE_MODEL_P (current_cpu))
1964 {
1965 FLD (in_src1) = f_r1;
1966 FLD (in_src2) = f_r2;
1967 }
1968 #endif
1969 #undef FLD
1970 return idesc;
1971 }
1972
1973 extract_sfmt_sth:
1974 {
1975 const IDESC *idesc = &m32rbf_insn_data[itype];
1976 CGEN_INSN_WORD insn = entire_insn;
1977 #define FLD(f) abuf->fields.sfmt_st_plus.f
1978 UINT f_r1;
1979 UINT f_r2;
1980
1981 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1982 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1983
1984 /* Record the fields for the semantic handler. */
1985 FLD (f_r1) = f_r1;
1986 FLD (f_r2) = f_r2;
1987 FLD (i_src1) = & CPU (h_gr)[f_r1];
1988 FLD (i_src2) = & CPU (h_gr)[f_r2];
1989 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));
1990
1991 #if WITH_PROFILE_MODEL_P
1992 /* Record the fields for profiling. */
1993 if (PROFILE_MODEL_P (current_cpu))
1994 {
1995 FLD (in_src1) = f_r1;
1996 FLD (in_src2) = f_r2;
1997 }
1998 #endif
1999 #undef FLD
2000 return idesc;
2001 }
2002
2003 extract_sfmt_sth_d:
2004 {
2005 const IDESC *idesc = &m32rbf_insn_data[itype];
2006 CGEN_INSN_WORD insn = entire_insn;
2007 #define FLD(f) abuf->fields.sfmt_st_d.f
2008 UINT f_r1;
2009 UINT f_r2;
2010 INT f_simm16;
2011
2012 f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2013 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2014 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2015
2016 /* Record the fields for the semantic handler. */
2017 FLD (f_simm16) = f_simm16;
2018 FLD (f_r1) = f_r1;
2019 FLD (f_r2) = f_r2;
2020 FLD (i_src1) = & CPU (h_gr)[f_r1];
2021 FLD (i_src2) = & CPU (h_gr)[f_r2];
2022 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));
2023
2024 #if WITH_PROFILE_MODEL_P
2025 /* Record the fields for profiling. */
2026 if (PROFILE_MODEL_P (current_cpu))
2027 {
2028 FLD (in_src1) = f_r1;
2029 FLD (in_src2) = f_r2;
2030 }
2031 #endif
2032 #undef FLD
2033 return idesc;
2034 }
2035
2036 extract_sfmt_st_plus:
2037 {
2038 const IDESC *idesc = &m32rbf_insn_data[itype];
2039 CGEN_INSN_WORD insn = entire_insn;
2040 #define FLD(f) abuf->fields.sfmt_st_plus.f
2041 UINT f_r1;
2042 UINT f_r2;
2043
2044 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2045 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2046
2047 /* Record the fields for the semantic handler. */
2048 FLD (f_r1) = f_r1;
2049 FLD (f_r2) = f_r2;
2050 FLD (i_src1) = & CPU (h_gr)[f_r1];
2051 FLD (i_src2) = & CPU (h_gr)[f_r2];
2052 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));
2053
2054 #if WITH_PROFILE_MODEL_P
2055 /* Record the fields for profiling. */
2056 if (PROFILE_MODEL_P (current_cpu))
2057 {
2058 FLD (in_src1) = f_r1;
2059 FLD (in_src2) = f_r2;
2060 FLD (out_src2) = f_r2;
2061 }
2062 #endif
2063 #undef FLD
2064 return idesc;
2065 }
2066
2067 extract_sfmt_trap:
2068 {
2069 const IDESC *idesc = &m32rbf_insn_data[itype];
2070 CGEN_INSN_WORD insn = entire_insn;
2071 #define FLD(f) abuf->fields.sfmt_trap.f
2072 UINT f_uimm4;
2073
2074 f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2075
2076 /* Record the fields for the semantic handler. */
2077 FLD (f_uimm4) = f_uimm4;
2078 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0));
2079
2080 #if WITH_PROFILE_MODEL_P
2081 /* Record the fields for profiling. */
2082 if (PROFILE_MODEL_P (current_cpu))
2083 {
2084 }
2085 #endif
2086 #undef FLD
2087 return idesc;
2088 }
2089
2090 extract_sfmt_unlock:
2091 {
2092 const IDESC *idesc = &m32rbf_insn_data[itype];
2093 CGEN_INSN_WORD insn = entire_insn;
2094 #define FLD(f) abuf->fields.sfmt_st_plus.f
2095 UINT f_r1;
2096 UINT f_r2;
2097
2098 f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2099 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2100
2101 /* Record the fields for the semantic handler. */
2102 FLD (f_r1) = f_r1;
2103 FLD (f_r2) = f_r2;
2104 FLD (i_src1) = & CPU (h_gr)[f_r1];
2105 FLD (i_src2) = & CPU (h_gr)[f_r2];
2106 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));
2107
2108 #if WITH_PROFILE_MODEL_P
2109 /* Record the fields for profiling. */
2110 if (PROFILE_MODEL_P (current_cpu))
2111 {
2112 FLD (in_src1) = f_r1;
2113 FLD (in_src2) = f_r2;
2114 }
2115 #endif
2116 #undef FLD
2117 return idesc;
2118 }
2119
2120 extract_sfmt_clrpsw:
2121 {
2122 const IDESC *idesc = &m32rbf_insn_data[itype];
2123 CGEN_INSN_WORD insn = entire_insn;
2124 #define FLD(f) abuf->fields.sfmt_clrpsw.f
2125 UINT f_uimm8;
2126
2127 f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8);
2128
2129 /* Record the fields for the semantic handler. */
2130 FLD (f_uimm8) = f_uimm8;
2131 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0));
2132
2133 #undef FLD
2134 return idesc;
2135 }
2136
2137 extract_sfmt_setpsw:
2138 {
2139 const IDESC *idesc = &m32rbf_insn_data[itype];
2140 CGEN_INSN_WORD insn = entire_insn;
2141 #define FLD(f) abuf->fields.sfmt_clrpsw.f
2142 UINT f_uimm8;
2143
2144 f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8);
2145
2146 /* Record the fields for the semantic handler. */
2147 FLD (f_uimm8) = f_uimm8;
2148 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0));
2149
2150 #undef FLD
2151 return idesc;
2152 }
2153
2154 extract_sfmt_bset:
2155 {
2156 const IDESC *idesc = &m32rbf_insn_data[itype];
2157 CGEN_INSN_WORD insn = entire_insn;
2158 #define FLD(f) abuf->fields.sfmt_bset.f
2159 UINT f_uimm3;
2160 UINT f_r2;
2161 INT f_simm16;
2162
2163 f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3);
2164 f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2165 f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2166
2167 /* Record the fields for the semantic handler. */
2168 FLD (f_simm16) = f_simm16;
2169 FLD (f_r2) = f_r2;
2170 FLD (f_uimm3) = f_uimm3;
2171 FLD (i_sr) = & CPU (h_gr)[f_r2];
2172 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bset", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0));
2173
2174 #if WITH_PROFILE_MODEL_P
2175 /* Record the fields for profiling. */
2176 if (PROFILE_MODEL_P (current_cpu))
2177 {
2178 FLD (in_sr) = f_r2;
2179 }
2180 #endif
2181 #undef FLD
2182 return idesc;
2183 }
2184
2185 extract_sfmt_btst:
2186 {
2187 const IDESC *idesc = &m32rbf_insn_data[itype];
2188 CGEN_INSN_WORD insn = entire_insn;
2189 #define FLD(f) abuf->fields.sfmt_bset.f
2190 UINT f_uimm3;
2191 UINT f_r2;
2192
2193 f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3);
2194 f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2195
2196 /* Record the fields for the semantic handler. */
2197 FLD (f_r2) = f_r2;
2198 FLD (f_uimm3) = f_uimm3;
2199 FLD (i_sr) = & CPU (h_gr)[f_r2];
2200 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_btst", "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0));
2201
2202 #if WITH_PROFILE_MODEL_P
2203 /* Record the fields for profiling. */
2204 if (PROFILE_MODEL_P (current_cpu))
2205 {
2206 FLD (in_sr) = f_r2;
2207 }
2208 #endif
2209 #undef FLD
2210 return idesc;
2211 }
2212
2213 }