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