1/* Simulator instruction decoder for iq2000bf.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
6
7This file is part of the GNU simulators.
8
9This program is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 3 of the License, or
12(at your option) any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
22*/
23
24#define WANT_CPU iq2000bf
25#define WANT_CPU_IQ2000BF
26
27#include "sim-main.h"
28#include "sim-assert.h"
29
30/* The instruction descriptor array.
31   This is computed at runtime.  Space for it is not malloc'd to save a
32   teensy bit of cpu in the decoder.  Moving it to malloc space is trivial
33   but won't be done until necessary (we don't currently support the runtime
34   addition of instructions nor an SMP machine with different cpus).  */
35static IDESC iq2000bf_insn_data[IQ2000BF_INSN_BMB + 1];
36
37/* Commas between elements are contained in the macros.
38   Some of these are conditionally compiled out.  */
39
40static const struct insn_sem iq2000bf_insn_sem[] =
41{
42  { VIRTUAL_INSN_X_INVALID, IQ2000BF_INSN_X_INVALID, IQ2000BF_SFMT_EMPTY },
43  { VIRTUAL_INSN_X_AFTER, IQ2000BF_INSN_X_AFTER, IQ2000BF_SFMT_EMPTY },
44  { VIRTUAL_INSN_X_BEFORE, IQ2000BF_INSN_X_BEFORE, IQ2000BF_SFMT_EMPTY },
45  { VIRTUAL_INSN_X_CTI_CHAIN, IQ2000BF_INSN_X_CTI_CHAIN, IQ2000BF_SFMT_EMPTY },
46  { VIRTUAL_INSN_X_CHAIN, IQ2000BF_INSN_X_CHAIN, IQ2000BF_SFMT_EMPTY },
47  { VIRTUAL_INSN_X_BEGIN, IQ2000BF_INSN_X_BEGIN, IQ2000BF_SFMT_EMPTY },
48  { IQ2000_INSN_ADD, IQ2000BF_INSN_ADD, IQ2000BF_SFMT_ADD },
49  { IQ2000_INSN_ADDI, IQ2000BF_INSN_ADDI, IQ2000BF_SFMT_ADDI },
50  { IQ2000_INSN_ADDIU, IQ2000BF_INSN_ADDIU, IQ2000BF_SFMT_ADDI },
51  { IQ2000_INSN_ADDU, IQ2000BF_INSN_ADDU, IQ2000BF_SFMT_ADD },
52  { IQ2000_INSN_ADO16, IQ2000BF_INSN_ADO16, IQ2000BF_SFMT_ADO16 },
53  { IQ2000_INSN_AND, IQ2000BF_INSN_AND, IQ2000BF_SFMT_ADD },
54  { IQ2000_INSN_ANDI, IQ2000BF_INSN_ANDI, IQ2000BF_SFMT_ADDI },
55  { IQ2000_INSN_ANDOI, IQ2000BF_INSN_ANDOI, IQ2000BF_SFMT_ADDI },
56  { IQ2000_INSN_NOR, IQ2000BF_INSN_NOR, IQ2000BF_SFMT_ADD },
57  { IQ2000_INSN_OR, IQ2000BF_INSN_OR, IQ2000BF_SFMT_ADD },
58  { IQ2000_INSN_ORI, IQ2000BF_INSN_ORI, IQ2000BF_SFMT_ADDI },
59  { IQ2000_INSN_RAM, IQ2000BF_INSN_RAM, IQ2000BF_SFMT_RAM },
60  { IQ2000_INSN_SLL, IQ2000BF_INSN_SLL, IQ2000BF_SFMT_SLL },
61  { IQ2000_INSN_SLLV, IQ2000BF_INSN_SLLV, IQ2000BF_SFMT_ADD },
62  { IQ2000_INSN_SLMV, IQ2000BF_INSN_SLMV, IQ2000BF_SFMT_SLMV },
63  { IQ2000_INSN_SLT, IQ2000BF_INSN_SLT, IQ2000BF_SFMT_SLT },
64  { IQ2000_INSN_SLTI, IQ2000BF_INSN_SLTI, IQ2000BF_SFMT_SLTI },
65  { IQ2000_INSN_SLTIU, IQ2000BF_INSN_SLTIU, IQ2000BF_SFMT_SLTI },
66  { IQ2000_INSN_SLTU, IQ2000BF_INSN_SLTU, IQ2000BF_SFMT_SLT },
67  { IQ2000_INSN_SRA, IQ2000BF_INSN_SRA, IQ2000BF_SFMT_SLL },
68  { IQ2000_INSN_SRAV, IQ2000BF_INSN_SRAV, IQ2000BF_SFMT_ADD },
69  { IQ2000_INSN_SRL, IQ2000BF_INSN_SRL, IQ2000BF_SFMT_SLL },
70  { IQ2000_INSN_SRLV, IQ2000BF_INSN_SRLV, IQ2000BF_SFMT_ADD },
71  { IQ2000_INSN_SRMV, IQ2000BF_INSN_SRMV, IQ2000BF_SFMT_SLMV },
72  { IQ2000_INSN_SUB, IQ2000BF_INSN_SUB, IQ2000BF_SFMT_ADD },
73  { IQ2000_INSN_SUBU, IQ2000BF_INSN_SUBU, IQ2000BF_SFMT_ADD },
74  { IQ2000_INSN_XOR, IQ2000BF_INSN_XOR, IQ2000BF_SFMT_ADD },
75  { IQ2000_INSN_XORI, IQ2000BF_INSN_XORI, IQ2000BF_SFMT_ADDI },
76  { IQ2000_INSN_BBI, IQ2000BF_INSN_BBI, IQ2000BF_SFMT_BBI },
77  { IQ2000_INSN_BBIN, IQ2000BF_INSN_BBIN, IQ2000BF_SFMT_BBI },
78  { IQ2000_INSN_BBV, IQ2000BF_INSN_BBV, IQ2000BF_SFMT_BBV },
79  { IQ2000_INSN_BBVN, IQ2000BF_INSN_BBVN, IQ2000BF_SFMT_BBV },
80  { IQ2000_INSN_BEQ, IQ2000BF_INSN_BEQ, IQ2000BF_SFMT_BBV },
81  { IQ2000_INSN_BEQL, IQ2000BF_INSN_BEQL, IQ2000BF_SFMT_BBV },
82  { IQ2000_INSN_BGEZ, IQ2000BF_INSN_BGEZ, IQ2000BF_SFMT_BGEZ },
83  { IQ2000_INSN_BGEZAL, IQ2000BF_INSN_BGEZAL, IQ2000BF_SFMT_BGEZAL },
84  { IQ2000_INSN_BGEZALL, IQ2000BF_INSN_BGEZALL, IQ2000BF_SFMT_BGEZAL },
85  { IQ2000_INSN_BGEZL, IQ2000BF_INSN_BGEZL, IQ2000BF_SFMT_BGEZ },
86  { IQ2000_INSN_BLTZ, IQ2000BF_INSN_BLTZ, IQ2000BF_SFMT_BGEZ },
87  { IQ2000_INSN_BLTZL, IQ2000BF_INSN_BLTZL, IQ2000BF_SFMT_BGEZ },
88  { IQ2000_INSN_BLTZAL, IQ2000BF_INSN_BLTZAL, IQ2000BF_SFMT_BGEZAL },
89  { IQ2000_INSN_BLTZALL, IQ2000BF_INSN_BLTZALL, IQ2000BF_SFMT_BGEZAL },
90  { IQ2000_INSN_BMB0, IQ2000BF_INSN_BMB0, IQ2000BF_SFMT_BBV },
91  { IQ2000_INSN_BMB1, IQ2000BF_INSN_BMB1, IQ2000BF_SFMT_BBV },
92  { IQ2000_INSN_BMB2, IQ2000BF_INSN_BMB2, IQ2000BF_SFMT_BBV },
93  { IQ2000_INSN_BMB3, IQ2000BF_INSN_BMB3, IQ2000BF_SFMT_BBV },
94  { IQ2000_INSN_BNE, IQ2000BF_INSN_BNE, IQ2000BF_SFMT_BBV },
95  { IQ2000_INSN_BNEL, IQ2000BF_INSN_BNEL, IQ2000BF_SFMT_BBV },
96  { IQ2000_INSN_JALR, IQ2000BF_INSN_JALR, IQ2000BF_SFMT_JALR },
97  { IQ2000_INSN_JR, IQ2000BF_INSN_JR, IQ2000BF_SFMT_JR },
98  { IQ2000_INSN_LB, IQ2000BF_INSN_LB, IQ2000BF_SFMT_LB },
99  { IQ2000_INSN_LBU, IQ2000BF_INSN_LBU, IQ2000BF_SFMT_LB },
100  { IQ2000_INSN_LH, IQ2000BF_INSN_LH, IQ2000BF_SFMT_LH },
101  { IQ2000_INSN_LHU, IQ2000BF_INSN_LHU, IQ2000BF_SFMT_LH },
102  { IQ2000_INSN_LUI, IQ2000BF_INSN_LUI, IQ2000BF_SFMT_LUI },
103  { IQ2000_INSN_LW, IQ2000BF_INSN_LW, IQ2000BF_SFMT_LW },
104  { IQ2000_INSN_SB, IQ2000BF_INSN_SB, IQ2000BF_SFMT_SB },
105  { IQ2000_INSN_SH, IQ2000BF_INSN_SH, IQ2000BF_SFMT_SH },
106  { IQ2000_INSN_SW, IQ2000BF_INSN_SW, IQ2000BF_SFMT_SW },
107  { IQ2000_INSN_BREAK, IQ2000BF_INSN_BREAK, IQ2000BF_SFMT_BREAK },
108  { IQ2000_INSN_SYSCALL, IQ2000BF_INSN_SYSCALL, IQ2000BF_SFMT_SYSCALL },
109  { IQ2000_INSN_ANDOUI, IQ2000BF_INSN_ANDOUI, IQ2000BF_SFMT_ANDOUI },
110  { IQ2000_INSN_ORUI, IQ2000BF_INSN_ORUI, IQ2000BF_SFMT_ANDOUI },
111  { IQ2000_INSN_BGTZ, IQ2000BF_INSN_BGTZ, IQ2000BF_SFMT_BGEZ },
112  { IQ2000_INSN_BGTZL, IQ2000BF_INSN_BGTZL, IQ2000BF_SFMT_BGEZ },
113  { IQ2000_INSN_BLEZ, IQ2000BF_INSN_BLEZ, IQ2000BF_SFMT_BGEZ },
114  { IQ2000_INSN_BLEZL, IQ2000BF_INSN_BLEZL, IQ2000BF_SFMT_BGEZ },
115  { IQ2000_INSN_MRGB, IQ2000BF_INSN_MRGB, IQ2000BF_SFMT_MRGB },
116  { IQ2000_INSN_BCTXT, IQ2000BF_INSN_BCTXT, IQ2000BF_SFMT_BCTXT },
117  { IQ2000_INSN_BC0F, IQ2000BF_INSN_BC0F, IQ2000BF_SFMT_BCTXT },
118  { IQ2000_INSN_BC0FL, IQ2000BF_INSN_BC0FL, IQ2000BF_SFMT_BCTXT },
119  { IQ2000_INSN_BC3F, IQ2000BF_INSN_BC3F, IQ2000BF_SFMT_BCTXT },
120  { IQ2000_INSN_BC3FL, IQ2000BF_INSN_BC3FL, IQ2000BF_SFMT_BCTXT },
121  { IQ2000_INSN_BC0T, IQ2000BF_INSN_BC0T, IQ2000BF_SFMT_BCTXT },
122  { IQ2000_INSN_BC0TL, IQ2000BF_INSN_BC0TL, IQ2000BF_SFMT_BCTXT },
123  { IQ2000_INSN_BC3T, IQ2000BF_INSN_BC3T, IQ2000BF_SFMT_BCTXT },
124  { IQ2000_INSN_BC3TL, IQ2000BF_INSN_BC3TL, IQ2000BF_SFMT_BCTXT },
125  { IQ2000_INSN_CFC0, IQ2000BF_INSN_CFC0, IQ2000BF_SFMT_SYSCALL },
126  { IQ2000_INSN_CFC1, IQ2000BF_INSN_CFC1, IQ2000BF_SFMT_SYSCALL },
127  { IQ2000_INSN_CFC2, IQ2000BF_INSN_CFC2, IQ2000BF_SFMT_SYSCALL },
128  { IQ2000_INSN_CFC3, IQ2000BF_INSN_CFC3, IQ2000BF_SFMT_SYSCALL },
129  { IQ2000_INSN_CHKHDR, IQ2000BF_INSN_CHKHDR, IQ2000BF_SFMT_SYSCALL },
130  { IQ2000_INSN_CTC0, IQ2000BF_INSN_CTC0, IQ2000BF_SFMT_SYSCALL },
131  { IQ2000_INSN_CTC1, IQ2000BF_INSN_CTC1, IQ2000BF_SFMT_SYSCALL },
132  { IQ2000_INSN_CTC2, IQ2000BF_INSN_CTC2, IQ2000BF_SFMT_SYSCALL },
133  { IQ2000_INSN_CTC3, IQ2000BF_INSN_CTC3, IQ2000BF_SFMT_SYSCALL },
134  { IQ2000_INSN_JCR, IQ2000BF_INSN_JCR, IQ2000BF_SFMT_BCTXT },
135  { IQ2000_INSN_LUC32, IQ2000BF_INSN_LUC32, IQ2000BF_SFMT_SYSCALL },
136  { IQ2000_INSN_LUC32L, IQ2000BF_INSN_LUC32L, IQ2000BF_SFMT_SYSCALL },
137  { IQ2000_INSN_LUC64, IQ2000BF_INSN_LUC64, IQ2000BF_SFMT_SYSCALL },
138  { IQ2000_INSN_LUC64L, IQ2000BF_INSN_LUC64L, IQ2000BF_SFMT_SYSCALL },
139  { IQ2000_INSN_LUK, IQ2000BF_INSN_LUK, IQ2000BF_SFMT_SYSCALL },
140  { IQ2000_INSN_LULCK, IQ2000BF_INSN_LULCK, IQ2000BF_SFMT_SYSCALL },
141  { IQ2000_INSN_LUM32, IQ2000BF_INSN_LUM32, IQ2000BF_SFMT_SYSCALL },
142  { IQ2000_INSN_LUM32L, IQ2000BF_INSN_LUM32L, IQ2000BF_SFMT_SYSCALL },
143  { IQ2000_INSN_LUM64, IQ2000BF_INSN_LUM64, IQ2000BF_SFMT_SYSCALL },
144  { IQ2000_INSN_LUM64L, IQ2000BF_INSN_LUM64L, IQ2000BF_SFMT_SYSCALL },
145  { IQ2000_INSN_LUR, IQ2000BF_INSN_LUR, IQ2000BF_SFMT_SYSCALL },
146  { IQ2000_INSN_LURL, IQ2000BF_INSN_LURL, IQ2000BF_SFMT_SYSCALL },
147  { IQ2000_INSN_LUULCK, IQ2000BF_INSN_LUULCK, IQ2000BF_SFMT_SYSCALL },
148  { IQ2000_INSN_MFC0, IQ2000BF_INSN_MFC0, IQ2000BF_SFMT_SYSCALL },
149  { IQ2000_INSN_MFC1, IQ2000BF_INSN_MFC1, IQ2000BF_SFMT_SYSCALL },
150  { IQ2000_INSN_MFC2, IQ2000BF_INSN_MFC2, IQ2000BF_SFMT_SYSCALL },
151  { IQ2000_INSN_MFC3, IQ2000BF_INSN_MFC3, IQ2000BF_SFMT_SYSCALL },
152  { IQ2000_INSN_MTC0, IQ2000BF_INSN_MTC0, IQ2000BF_SFMT_SYSCALL },
153  { IQ2000_INSN_MTC1, IQ2000BF_INSN_MTC1, IQ2000BF_SFMT_SYSCALL },
154  { IQ2000_INSN_MTC2, IQ2000BF_INSN_MTC2, IQ2000BF_SFMT_SYSCALL },
155  { IQ2000_INSN_MTC3, IQ2000BF_INSN_MTC3, IQ2000BF_SFMT_SYSCALL },
156  { IQ2000_INSN_PKRL, IQ2000BF_INSN_PKRL, IQ2000BF_SFMT_SYSCALL },
157  { IQ2000_INSN_PKRLR1, IQ2000BF_INSN_PKRLR1, IQ2000BF_SFMT_SYSCALL },
158  { IQ2000_INSN_PKRLR30, IQ2000BF_INSN_PKRLR30, IQ2000BF_SFMT_SYSCALL },
159  { IQ2000_INSN_RB, IQ2000BF_INSN_RB, IQ2000BF_SFMT_SYSCALL },
160  { IQ2000_INSN_RBR1, IQ2000BF_INSN_RBR1, IQ2000BF_SFMT_SYSCALL },
161  { IQ2000_INSN_RBR30, IQ2000BF_INSN_RBR30, IQ2000BF_SFMT_SYSCALL },
162  { IQ2000_INSN_RFE, IQ2000BF_INSN_RFE, IQ2000BF_SFMT_SYSCALL },
163  { IQ2000_INSN_RX, IQ2000BF_INSN_RX, IQ2000BF_SFMT_SYSCALL },
164  { IQ2000_INSN_RXR1, IQ2000BF_INSN_RXR1, IQ2000BF_SFMT_SYSCALL },
165  { IQ2000_INSN_RXR30, IQ2000BF_INSN_RXR30, IQ2000BF_SFMT_SYSCALL },
166  { IQ2000_INSN_SLEEP, IQ2000BF_INSN_SLEEP, IQ2000BF_SFMT_SYSCALL },
167  { IQ2000_INSN_SRRD, IQ2000BF_INSN_SRRD, IQ2000BF_SFMT_SYSCALL },
168  { IQ2000_INSN_SRRDL, IQ2000BF_INSN_SRRDL, IQ2000BF_SFMT_SYSCALL },
169  { IQ2000_INSN_SRULCK, IQ2000BF_INSN_SRULCK, IQ2000BF_SFMT_SYSCALL },
170  { IQ2000_INSN_SRWR, IQ2000BF_INSN_SRWR, IQ2000BF_SFMT_SYSCALL },
171  { IQ2000_INSN_SRWRU, IQ2000BF_INSN_SRWRU, IQ2000BF_SFMT_SYSCALL },
172  { IQ2000_INSN_TRAPQFL, IQ2000BF_INSN_TRAPQFL, IQ2000BF_SFMT_SYSCALL },
173  { IQ2000_INSN_TRAPQNE, IQ2000BF_INSN_TRAPQNE, IQ2000BF_SFMT_SYSCALL },
174  { IQ2000_INSN_TRAPREL, IQ2000BF_INSN_TRAPREL, IQ2000BF_SFMT_SYSCALL },
175  { IQ2000_INSN_WB, IQ2000BF_INSN_WB, IQ2000BF_SFMT_SYSCALL },
176  { IQ2000_INSN_WBU, IQ2000BF_INSN_WBU, IQ2000BF_SFMT_SYSCALL },
177  { IQ2000_INSN_WBR1, IQ2000BF_INSN_WBR1, IQ2000BF_SFMT_SYSCALL },
178  { IQ2000_INSN_WBR1U, IQ2000BF_INSN_WBR1U, IQ2000BF_SFMT_SYSCALL },
179  { IQ2000_INSN_WBR30, IQ2000BF_INSN_WBR30, IQ2000BF_SFMT_SYSCALL },
180  { IQ2000_INSN_WBR30U, IQ2000BF_INSN_WBR30U, IQ2000BF_SFMT_SYSCALL },
181  { IQ2000_INSN_WX, IQ2000BF_INSN_WX, IQ2000BF_SFMT_SYSCALL },
182  { IQ2000_INSN_WXU, IQ2000BF_INSN_WXU, IQ2000BF_SFMT_SYSCALL },
183  { IQ2000_INSN_WXR1, IQ2000BF_INSN_WXR1, IQ2000BF_SFMT_SYSCALL },
184  { IQ2000_INSN_WXR1U, IQ2000BF_INSN_WXR1U, IQ2000BF_SFMT_SYSCALL },
185  { IQ2000_INSN_WXR30, IQ2000BF_INSN_WXR30, IQ2000BF_SFMT_SYSCALL },
186  { IQ2000_INSN_WXR30U, IQ2000BF_INSN_WXR30U, IQ2000BF_SFMT_SYSCALL },
187  { IQ2000_INSN_LDW, IQ2000BF_INSN_LDW, IQ2000BF_SFMT_LDW },
188  { IQ2000_INSN_SDW, IQ2000BF_INSN_SDW, IQ2000BF_SFMT_SDW },
189  { IQ2000_INSN_J, IQ2000BF_INSN_J, IQ2000BF_SFMT_J },
190  { IQ2000_INSN_JAL, IQ2000BF_INSN_JAL, IQ2000BF_SFMT_JAL },
191  { IQ2000_INSN_BMB, IQ2000BF_INSN_BMB, IQ2000BF_SFMT_BBV },
192};
193
194static const struct insn_sem iq2000bf_insn_sem_invalid = {
195  VIRTUAL_INSN_X_INVALID, IQ2000BF_INSN_X_INVALID, IQ2000BF_SFMT_EMPTY
196};
197
198/* Initialize an IDESC from the compile-time computable parts.  */
199
200static INLINE void
201init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
202{
203  const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;
204
205  id->num = t->index;
206  id->sfmt = t->sfmt;
207  if ((int) t->type <= 0)
208    id->idata = & cgen_virtual_insn_table[- (int) t->type];
209  else
210    id->idata = & insn_table[t->type];
211  id->attrs = CGEN_INSN_ATTRS (id->idata);
212  /* Oh my god, a magic number.  */
213  id->length = CGEN_INSN_BITSIZE (id->idata) / 8;
214
215#if WITH_PROFILE_MODEL_P
216  id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
217  {
218    SIM_DESC sd = CPU_STATE (cpu);
219    SIM_ASSERT (t->index == id->timing->num);
220  }
221#endif
222
223  /* Semantic pointers are initialized elsewhere.  */
224}
225
226/* Initialize the instruction descriptor table.  */
227
228void
229iq2000bf_init_idesc_table (SIM_CPU *cpu)
230{
231  IDESC *id,*tabend;
232  const struct insn_sem *t,*tend;
233  int tabsize = sizeof (iq2000bf_insn_data) / sizeof (IDESC);
234  IDESC *table = iq2000bf_insn_data;
235
236  memset (table, 0, tabsize * sizeof (IDESC));
237
238  /* First set all entries to the `invalid insn'.  */
239  t = & iq2000bf_insn_sem_invalid;
240  for (id = table, tabend = table + tabsize; id < tabend; ++id)
241    init_idesc (cpu, id, t);
242
243  /* Now fill in the values for the chosen cpu.  */
244  for (t = iq2000bf_insn_sem, tend = t + sizeof (iq2000bf_insn_sem) / sizeof (*t);
245       t != tend; ++t)
246    {
247      init_idesc (cpu, & table[t->index], t);
248    }
249
250  /* Link the IDESC table into the cpu.  */
251  CPU_IDESC (cpu) = table;
252}
253
254/* Given an instruction, return a pointer to its IDESC entry.  */
255
256const IDESC *
257iq2000bf_decode (SIM_CPU *current_cpu, IADDR pc,
258              CGEN_INSN_INT base_insn, CGEN_INSN_INT entire_insn,
259              ARGBUF *abuf)
260{
261  /* Result of decoder.  */
262  IQ2000BF_INSN_TYPE itype;
263
264  {
265    CGEN_INSN_INT insn = base_insn;
266
267    {
268      unsigned int val = (((insn >> 26) & (63 << 0)));
269      switch (val)
270      {
271      case 0 :
272        {
273          unsigned int val = (((insn >> 1) & (1 << 4)) | ((insn >> 0) & (15 << 0)));
274          switch (val)
275          {
276          case 0 : itype = IQ2000BF_INSN_SLL;goto extract_sfmt_sll;
277          case 1 : itype = IQ2000BF_INSN_SLMV;goto extract_sfmt_slmv;
278          case 2 : itype = IQ2000BF_INSN_SRL;goto extract_sfmt_sll;
279          case 3 : itype = IQ2000BF_INSN_SRA;goto extract_sfmt_sll;
280          case 4 : itype = IQ2000BF_INSN_SLLV;goto extract_sfmt_add;
281          case 5 : itype = IQ2000BF_INSN_SRMV;goto extract_sfmt_slmv;
282          case 6 : itype = IQ2000BF_INSN_SRLV;goto extract_sfmt_add;
283          case 7 : itype = IQ2000BF_INSN_SRAV;goto extract_sfmt_add;
284          case 8 : itype = IQ2000BF_INSN_JR;goto extract_sfmt_jr;
285          case 9 : itype = IQ2000BF_INSN_JALR;goto extract_sfmt_jalr;
286          case 10 : itype = IQ2000BF_INSN_JCR;goto extract_sfmt_bctxt;
287          case 12 : itype = IQ2000BF_INSN_SYSCALL;goto extract_sfmt_syscall;
288          case 13 : itype = IQ2000BF_INSN_BREAK;goto extract_sfmt_break;
289          case 14 : itype = IQ2000BF_INSN_SLEEP;goto extract_sfmt_syscall;
290          case 16 : itype = IQ2000BF_INSN_ADD;goto extract_sfmt_add;
291          case 17 : itype = IQ2000BF_INSN_ADDU;goto extract_sfmt_add;
292          case 18 : itype = IQ2000BF_INSN_SUB;goto extract_sfmt_add;
293          case 19 : itype = IQ2000BF_INSN_SUBU;goto extract_sfmt_add;
294          case 20 : itype = IQ2000BF_INSN_AND;goto extract_sfmt_add;
295          case 21 : itype = IQ2000BF_INSN_OR;goto extract_sfmt_add;
296          case 22 : itype = IQ2000BF_INSN_XOR;goto extract_sfmt_add;
297          case 23 : itype = IQ2000BF_INSN_NOR;goto extract_sfmt_add;
298          case 25 : itype = IQ2000BF_INSN_ADO16;goto extract_sfmt_ado16;
299          case 26 : itype = IQ2000BF_INSN_SLT;goto extract_sfmt_slt;
300          case 27 : itype = IQ2000BF_INSN_SLTU;goto extract_sfmt_slt;
301          case 29 : itype = IQ2000BF_INSN_MRGB;goto extract_sfmt_mrgb;
302          default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
303          }
304        }
305      case 1 :
306        {
307          unsigned int val = (((insn >> 17) & (1 << 3)) | ((insn >> 16) & (7 << 0)));
308          switch (val)
309          {
310          case 0 : itype = IQ2000BF_INSN_BLTZ;goto extract_sfmt_bgez;
311          case 1 : itype = IQ2000BF_INSN_BGEZ;goto extract_sfmt_bgez;
312          case 2 : itype = IQ2000BF_INSN_BLTZL;goto extract_sfmt_bgez;
313          case 3 : itype = IQ2000BF_INSN_BGEZL;goto extract_sfmt_bgez;
314          case 6 : itype = IQ2000BF_INSN_BCTXT;goto extract_sfmt_bctxt;
315          case 8 : itype = IQ2000BF_INSN_BLTZAL;goto extract_sfmt_bgezal;
316          case 9 : itype = IQ2000BF_INSN_BGEZAL;goto extract_sfmt_bgezal;
317          case 10 : itype = IQ2000BF_INSN_BLTZALL;goto extract_sfmt_bgezal;
318          case 11 : itype = IQ2000BF_INSN_BGEZALL;goto extract_sfmt_bgezal;
319          default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
320          }
321        }
322      case 2 : itype = IQ2000BF_INSN_J;goto extract_sfmt_j;
323      case 3 : itype = IQ2000BF_INSN_JAL;goto extract_sfmt_jal;
324      case 4 : itype = IQ2000BF_INSN_BEQ;goto extract_sfmt_bbv;
325      case 5 : itype = IQ2000BF_INSN_BNE;goto extract_sfmt_bbv;
326      case 6 : itype = IQ2000BF_INSN_BLEZ;goto extract_sfmt_bgez;
327      case 7 : itype = IQ2000BF_INSN_BGTZ;goto extract_sfmt_bgez;
328      case 8 : itype = IQ2000BF_INSN_ADDI;goto extract_sfmt_addi;
329      case 9 : itype = IQ2000BF_INSN_ADDIU;goto extract_sfmt_addi;
330      case 10 : itype = IQ2000BF_INSN_SLTI;goto extract_sfmt_slti;
331      case 11 : itype = IQ2000BF_INSN_SLTIU;goto extract_sfmt_slti;
332      case 12 : itype = IQ2000BF_INSN_ANDI;goto extract_sfmt_addi;
333      case 13 : itype = IQ2000BF_INSN_ORI;goto extract_sfmt_addi;
334      case 14 : itype = IQ2000BF_INSN_XORI;goto extract_sfmt_addi;
335      case 15 : itype = IQ2000BF_INSN_LUI;goto extract_sfmt_lui;
336      case 16 :
337        {
338          unsigned int val = (((insn >> 19) & (15 << 3)) | ((insn >> 15) & (3 << 1)) | ((insn >> 4) & (1 << 0)));
339          switch (val)
340          {
341          case 0 : /* fall through */
342          case 2 : /* fall through */
343          case 4 : /* fall through */
344          case 6 : itype = IQ2000BF_INSN_MFC0;goto extract_sfmt_syscall;
345          case 8 : /* fall through */
346          case 10 : /* fall through */
347          case 12 : /* fall through */
348          case 14 : itype = IQ2000BF_INSN_CFC0;goto extract_sfmt_syscall;
349          case 16 : /* fall through */
350          case 18 : /* fall through */
351          case 20 : /* fall through */
352          case 22 : itype = IQ2000BF_INSN_MTC0;goto extract_sfmt_syscall;
353          case 24 : /* fall through */
354          case 26 : /* fall through */
355          case 28 : /* fall through */
356          case 30 : itype = IQ2000BF_INSN_CTC0;goto extract_sfmt_syscall;
357          case 32 : /* fall through */
358          case 33 : itype = IQ2000BF_INSN_BC0F;goto extract_sfmt_bctxt;
359          case 34 : /* fall through */
360          case 35 : itype = IQ2000BF_INSN_BC0T;goto extract_sfmt_bctxt;
361          case 36 : /* fall through */
362          case 37 : itype = IQ2000BF_INSN_BC0FL;goto extract_sfmt_bctxt;
363          case 38 : /* fall through */
364          case 39 : itype = IQ2000BF_INSN_BC0TL;goto extract_sfmt_bctxt;
365          case 65 : itype = IQ2000BF_INSN_RFE;goto extract_sfmt_syscall;
366          default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
367          }
368        }
369      case 17 :
370        {
371          unsigned int val = (((insn >> 22) & (3 << 0)));
372          switch (val)
373          {
374          case 0 : itype = IQ2000BF_INSN_MFC1;goto extract_sfmt_syscall;
375          case 1 : itype = IQ2000BF_INSN_CFC1;goto extract_sfmt_syscall;
376          case 2 : itype = IQ2000BF_INSN_MTC1;goto extract_sfmt_syscall;
377          case 3 : itype = IQ2000BF_INSN_CTC1;goto extract_sfmt_syscall;
378          default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
379          }
380        }
381      case 18 :
382        {
383          unsigned int val = (((insn >> 16) & (3 << 5)) | ((insn >> 0) & (31 << 0)));
384          switch (val)
385          {
386          case 0 :
387            {
388              unsigned int val = (((insn >> 23) & (1 << 0)));
389              switch (val)
390              {
391              case 0 : itype = IQ2000BF_INSN_MFC2;goto extract_sfmt_syscall;
392              case 1 : itype = IQ2000BF_INSN_MTC2;goto extract_sfmt_syscall;
393              default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
394              }
395            }
396          case 32 : itype = IQ2000BF_INSN_LUULCK;goto extract_sfmt_syscall;
397          case 33 : itype = IQ2000BF_INSN_LUR;goto extract_sfmt_syscall;
398          case 34 : itype = IQ2000BF_INSN_LUM32;goto extract_sfmt_syscall;
399          case 35 : itype = IQ2000BF_INSN_LUC32;goto extract_sfmt_syscall;
400          case 36 : itype = IQ2000BF_INSN_LULCK;goto extract_sfmt_syscall;
401          case 37 : itype = IQ2000BF_INSN_LURL;goto extract_sfmt_syscall;
402          case 38 : itype = IQ2000BF_INSN_LUM32L;goto extract_sfmt_syscall;
403          case 39 : itype = IQ2000BF_INSN_LUC32L;goto extract_sfmt_syscall;
404          case 40 : itype = IQ2000BF_INSN_LUK;goto extract_sfmt_syscall;
405          case 42 : itype = IQ2000BF_INSN_LUM64;goto extract_sfmt_syscall;
406          case 43 : itype = IQ2000BF_INSN_LUC64;goto extract_sfmt_syscall;
407          case 46 : itype = IQ2000BF_INSN_LUM64L;goto extract_sfmt_syscall;
408          case 47 : itype = IQ2000BF_INSN_LUC64L;goto extract_sfmt_syscall;
409          case 48 : itype = IQ2000BF_INSN_SRRD;goto extract_sfmt_syscall;
410          case 49 : itype = IQ2000BF_INSN_SRWR;goto extract_sfmt_syscall;
411          case 52 : itype = IQ2000BF_INSN_SRRDL;goto extract_sfmt_syscall;
412          case 53 : itype = IQ2000BF_INSN_SRWRU;goto extract_sfmt_syscall;
413          case 54 : itype = IQ2000BF_INSN_SRULCK;goto extract_sfmt_syscall;
414          case 64 :
415            {
416              unsigned int val = (((insn >> 23) & (1 << 0)));
417              switch (val)
418              {
419              case 0 : itype = IQ2000BF_INSN_CFC2;goto extract_sfmt_syscall;
420              case 1 : itype = IQ2000BF_INSN_CTC2;goto extract_sfmt_syscall;
421              default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
422              }
423            }
424          default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
425          }
426        }
427      case 19 :
428        {
429          unsigned int val = (((insn >> 19) & (31 << 2)) | ((insn >> 0) & (3 << 0)));
430          switch (val)
431          {
432          case 0 : itype = IQ2000BF_INSN_MFC3;goto extract_sfmt_syscall;
433          case 4 :
434            {
435              unsigned int val = (((insn >> 2) & (3 << 0)));
436              switch (val)
437              {
438              case 0 : itype = IQ2000BF_INSN_WB;goto extract_sfmt_syscall;
439              case 1 : itype = IQ2000BF_INSN_RB;goto extract_sfmt_syscall;
440              case 2 : itype = IQ2000BF_INSN_TRAPQFL;goto extract_sfmt_syscall;
441              default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
442              }
443            }
444          case 5 :
445            {
446              unsigned int val = (((insn >> 3) & (1 << 0)));
447              switch (val)
448              {
449              case 0 : itype = IQ2000BF_INSN_WBU;goto extract_sfmt_syscall;
450              case 1 : itype = IQ2000BF_INSN_TRAPQNE;goto extract_sfmt_syscall;
451              default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
452              }
453            }
454          case 6 :
455            {
456              unsigned int val = (((insn >> 2) & (3 << 0)));
457              switch (val)
458              {
459              case 0 : itype = IQ2000BF_INSN_WX;goto extract_sfmt_syscall;
460              case 1 : itype = IQ2000BF_INSN_RX;goto extract_sfmt_syscall;
461              case 2 : itype = IQ2000BF_INSN_TRAPREL;goto extract_sfmt_syscall;
462              default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
463              }
464            }
465          case 7 :
466            {
467              unsigned int val = (((insn >> 2) & (1 << 0)));
468              switch (val)
469              {
470              case 0 : itype = IQ2000BF_INSN_WXU;goto extract_sfmt_syscall;
471              case 1 : itype = IQ2000BF_INSN_PKRL;goto extract_sfmt_syscall;
472              default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
473              }
474            }
475          case 8 : itype = IQ2000BF_INSN_CFC3;goto extract_sfmt_syscall;
476          case 16 : itype = IQ2000BF_INSN_MTC3;goto extract_sfmt_syscall;
477          case 24 : itype = IQ2000BF_INSN_CTC3;goto extract_sfmt_syscall;
478          case 32 : /* fall through */
479          case 33 : /* fall through */
480          case 34 : /* fall through */
481          case 35 :
482            {
483              unsigned int val = (((insn >> 16) & (3 << 0)));
484              switch (val)
485              {
486              case 0 : itype = IQ2000BF_INSN_BC3F;goto extract_sfmt_bctxt;
487              case 1 : itype = IQ2000BF_INSN_BC3T;goto extract_sfmt_bctxt;
488              case 2 : itype = IQ2000BF_INSN_BC3FL;goto extract_sfmt_bctxt;
489              case 3 : itype = IQ2000BF_INSN_BC3TL;goto extract_sfmt_bctxt;
490              default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
491              }
492            }
493          case 36 : itype = IQ2000BF_INSN_CHKHDR;goto extract_sfmt_syscall;
494          case 64 : /* fall through */
495          case 65 : /* fall through */
496          case 66 : /* fall through */
497          case 67 : itype = IQ2000BF_INSN_WBR1;goto extract_sfmt_syscall;
498          case 68 : /* fall through */
499          case 69 : /* fall through */
500          case 70 : /* fall through */
501          case 71 : itype = IQ2000BF_INSN_WBR1U;goto extract_sfmt_syscall;
502          case 72 : /* fall through */
503          case 73 : /* fall through */
504          case 74 : /* fall through */
505          case 75 : itype = IQ2000BF_INSN_WBR30;goto extract_sfmt_syscall;
506          case 76 : /* fall through */
507          case 77 : /* fall through */
508          case 78 : /* fall through */
509          case 79 : itype = IQ2000BF_INSN_WBR30U;goto extract_sfmt_syscall;
510          case 80 : /* fall through */
511          case 81 : /* fall through */
512          case 82 : /* fall through */
513          case 83 : itype = IQ2000BF_INSN_WXR1;goto extract_sfmt_syscall;
514          case 84 : /* fall through */
515          case 85 : /* fall through */
516          case 86 : /* fall through */
517          case 87 : itype = IQ2000BF_INSN_WXR1U;goto extract_sfmt_syscall;
518          case 88 : /* fall through */
519          case 89 : /* fall through */
520          case 90 : /* fall through */
521          case 91 : itype = IQ2000BF_INSN_WXR30;goto extract_sfmt_syscall;
522          case 92 : /* fall through */
523          case 93 : /* fall through */
524          case 94 : /* fall through */
525          case 95 : itype = IQ2000BF_INSN_WXR30U;goto extract_sfmt_syscall;
526          case 96 : /* fall through */
527          case 97 : /* fall through */
528          case 98 : /* fall through */
529          case 99 : itype = IQ2000BF_INSN_RBR1;goto extract_sfmt_syscall;
530          case 104 : /* fall through */
531          case 105 : /* fall through */
532          case 106 : /* fall through */
533          case 107 : itype = IQ2000BF_INSN_RBR30;goto extract_sfmt_syscall;
534          case 112 : /* fall through */
535          case 113 : /* fall through */
536          case 114 : /* fall through */
537          case 115 : itype = IQ2000BF_INSN_RXR1;goto extract_sfmt_syscall;
538          case 116 : /* fall through */
539          case 117 : /* fall through */
540          case 118 : /* fall through */
541          case 119 : itype = IQ2000BF_INSN_PKRLR1;goto extract_sfmt_syscall;
542          case 120 : /* fall through */
543          case 121 : /* fall through */
544          case 122 : /* fall through */
545          case 123 : itype = IQ2000BF_INSN_RXR30;goto extract_sfmt_syscall;
546          case 124 : /* fall through */
547          case 125 : /* fall through */
548          case 126 : /* fall through */
549          case 127 : itype = IQ2000BF_INSN_PKRLR30;goto extract_sfmt_syscall;
550          default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
551          }
552        }
553      case 20 : itype = IQ2000BF_INSN_BEQL;goto extract_sfmt_bbv;
554      case 21 : itype = IQ2000BF_INSN_BNEL;goto extract_sfmt_bbv;
555      case 22 : itype = IQ2000BF_INSN_BLEZL;goto extract_sfmt_bgez;
556      case 23 : itype = IQ2000BF_INSN_BGTZL;goto extract_sfmt_bgez;
557      case 24 : itype = IQ2000BF_INSN_BMB0;goto extract_sfmt_bbv;
558      case 25 : itype = IQ2000BF_INSN_BMB1;goto extract_sfmt_bbv;
559      case 26 : itype = IQ2000BF_INSN_BMB2;goto extract_sfmt_bbv;
560      case 27 : itype = IQ2000BF_INSN_BMB3;goto extract_sfmt_bbv;
561      case 28 : itype = IQ2000BF_INSN_BBI;goto extract_sfmt_bbi;
562      case 29 : itype = IQ2000BF_INSN_BBV;goto extract_sfmt_bbv;
563      case 30 : itype = IQ2000BF_INSN_BBIN;goto extract_sfmt_bbi;
564      case 31 : itype = IQ2000BF_INSN_BBVN;goto extract_sfmt_bbv;
565      case 32 : itype = IQ2000BF_INSN_LB;goto extract_sfmt_lb;
566      case 33 : itype = IQ2000BF_INSN_LH;goto extract_sfmt_lh;
567      case 35 : itype = IQ2000BF_INSN_LW;goto extract_sfmt_lw;
568      case 36 : itype = IQ2000BF_INSN_LBU;goto extract_sfmt_lb;
569      case 37 : itype = IQ2000BF_INSN_LHU;goto extract_sfmt_lh;
570      case 39 : itype = IQ2000BF_INSN_RAM;goto extract_sfmt_ram;
571      case 40 : itype = IQ2000BF_INSN_SB;goto extract_sfmt_sb;
572      case 41 : itype = IQ2000BF_INSN_SH;goto extract_sfmt_sh;
573      case 43 : itype = IQ2000BF_INSN_SW;goto extract_sfmt_sw;
574      case 44 : itype = IQ2000BF_INSN_ANDOI;goto extract_sfmt_addi;
575      case 45 : itype = IQ2000BF_INSN_BMB;goto extract_sfmt_bbv;
576      case 47 : itype = IQ2000BF_INSN_ORUI;goto extract_sfmt_andoui;
577      case 48 : itype = IQ2000BF_INSN_LDW;goto extract_sfmt_ldw;
578      case 56 : itype = IQ2000BF_INSN_SDW;goto extract_sfmt_sdw;
579      case 63 : itype = IQ2000BF_INSN_ANDOUI;goto extract_sfmt_andoui;
580      default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
581      }
582    }
583  }
584
585  /* The instruction has been decoded, now extract the fields.  */
586
587 extract_sfmt_empty:
588  {
589    const IDESC *idesc = &iq2000bf_insn_data[itype];
590#define FLD(f) abuf->fields.fmt_empty.f
591
592
593  /* Record the fields for the semantic handler.  */
594  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0));
595
596#undef FLD
597    return idesc;
598  }
599
600 extract_sfmt_add:
601  {
602    const IDESC *idesc = &iq2000bf_insn_data[itype];
603    CGEN_INSN_INT insn = entire_insn;
604#define FLD(f) abuf->fields.sfmt_mrgb.f
605    UINT f_rs;
606    UINT f_rt;
607    UINT f_rd;
608
609    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
610    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
611    f_rd = EXTRACT_LSB0_UINT (insn, 32, 15, 5);
612
613  /* Record the fields for the semantic handler.  */
614  FLD (f_rs) = f_rs;
615  FLD (f_rt) = f_rt;
616  FLD (f_rd) = f_rd;
617  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add", "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, "f_rd 0x%x", 'x', f_rd, (char *) 0));
618
619#undef FLD
620    return idesc;
621  }
622
623 extract_sfmt_addi:
624  {
625    const IDESC *idesc = &iq2000bf_insn_data[itype];
626    CGEN_INSN_INT insn = entire_insn;
627#define FLD(f) abuf->fields.sfmt_addi.f
628    UINT f_rs;
629    UINT f_rt;
630    UINT f_imm;
631
632    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
633    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
634    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
635
636  /* Record the fields for the semantic handler.  */
637  FLD (f_imm) = f_imm;
638  FLD (f_rs) = f_rs;
639  FLD (f_rt) = f_rt;
640  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi", "f_imm 0x%x", 'x', f_imm, "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, (char *) 0));
641
642#undef FLD
643    return idesc;
644  }
645
646 extract_sfmt_ado16:
647  {
648    const IDESC *idesc = &iq2000bf_insn_data[itype];
649    CGEN_INSN_INT insn = entire_insn;
650#define FLD(f) abuf->fields.sfmt_mrgb.f
651    UINT f_rs;
652    UINT f_rt;
653    UINT f_rd;
654
655    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
656    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
657    f_rd = EXTRACT_LSB0_UINT (insn, 32, 15, 5);
658
659  /* Record the fields for the semantic handler.  */
660  FLD (f_rs) = f_rs;
661  FLD (f_rt) = f_rt;
662  FLD (f_rd) = f_rd;
663  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ado16", "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, "f_rd 0x%x", 'x', f_rd, (char *) 0));
664
665#undef FLD
666    return idesc;
667  }
668
669 extract_sfmt_ram:
670  {
671    const IDESC *idesc = &iq2000bf_insn_data[itype];
672    CGEN_INSN_INT insn = entire_insn;
673#define FLD(f) abuf->fields.sfmt_ram.f
674    UINT f_rs;
675    UINT f_rt;
676    UINT f_rd;
677    UINT f_shamt;
678    UINT f_maskl;
679
680    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
681    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
682    f_rd = EXTRACT_LSB0_UINT (insn, 32, 15, 5);
683    f_shamt = EXTRACT_LSB0_UINT (insn, 32, 10, 5);
684    f_maskl = EXTRACT_LSB0_UINT (insn, 32, 4, 5);
685
686  /* Record the fields for the semantic handler.  */
687  FLD (f_maskl) = f_maskl;
688  FLD (f_rs) = f_rs;
689  FLD (f_rd) = f_rd;
690  FLD (f_rt) = f_rt;
691  FLD (f_shamt) = f_shamt;
692  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ram", "f_maskl 0x%x", 'x', f_maskl, "f_rs 0x%x", 'x', f_rs, "f_rd 0x%x", 'x', f_rd, "f_rt 0x%x", 'x', f_rt, "f_shamt 0x%x", 'x', f_shamt, (char *) 0));
693
694#undef FLD
695    return idesc;
696  }
697
698 extract_sfmt_sll:
699  {
700    const IDESC *idesc = &iq2000bf_insn_data[itype];
701    CGEN_INSN_INT insn = entire_insn;
702#define FLD(f) abuf->fields.sfmt_ram.f
703    UINT f_rt;
704    UINT f_rd;
705    UINT f_shamt;
706
707    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
708    f_rd = EXTRACT_LSB0_UINT (insn, 32, 15, 5);
709    f_shamt = EXTRACT_LSB0_UINT (insn, 32, 10, 5);
710
711  /* Record the fields for the semantic handler.  */
712  FLD (f_rt) = f_rt;
713  FLD (f_shamt) = f_shamt;
714  FLD (f_rd) = f_rd;
715  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sll", "f_rt 0x%x", 'x', f_rt, "f_shamt 0x%x", 'x', f_shamt, "f_rd 0x%x", 'x', f_rd, (char *) 0));
716
717#undef FLD
718    return idesc;
719  }
720
721 extract_sfmt_slmv:
722  {
723    const IDESC *idesc = &iq2000bf_insn_data[itype];
724    CGEN_INSN_INT insn = entire_insn;
725#define FLD(f) abuf->fields.sfmt_ram.f
726    UINT f_rs;
727    UINT f_rt;
728    UINT f_rd;
729    UINT f_shamt;
730
731    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
732    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
733    f_rd = EXTRACT_LSB0_UINT (insn, 32, 15, 5);
734    f_shamt = EXTRACT_LSB0_UINT (insn, 32, 10, 5);
735
736  /* Record the fields for the semantic handler.  */
737  FLD (f_rs) = f_rs;
738  FLD (f_rt) = f_rt;
739  FLD (f_shamt) = f_shamt;
740  FLD (f_rd) = f_rd;
741  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slmv", "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, "f_shamt 0x%x", 'x', f_shamt, "f_rd 0x%x", 'x', f_rd, (char *) 0));
742
743#undef FLD
744    return idesc;
745  }
746
747 extract_sfmt_slt:
748  {
749    const IDESC *idesc = &iq2000bf_insn_data[itype];
750    CGEN_INSN_INT insn = entire_insn;
751#define FLD(f) abuf->fields.sfmt_mrgb.f
752    UINT f_rs;
753    UINT f_rt;
754    UINT f_rd;
755
756    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
757    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
758    f_rd = EXTRACT_LSB0_UINT (insn, 32, 15, 5);
759
760  /* Record the fields for the semantic handler.  */
761  FLD (f_rs) = f_rs;
762  FLD (f_rt) = f_rt;
763  FLD (f_rd) = f_rd;
764  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slt", "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, "f_rd 0x%x", 'x', f_rd, (char *) 0));
765
766#undef FLD
767    return idesc;
768  }
769
770 extract_sfmt_slti:
771  {
772    const IDESC *idesc = &iq2000bf_insn_data[itype];
773    CGEN_INSN_INT insn = entire_insn;
774#define FLD(f) abuf->fields.sfmt_addi.f
775    UINT f_rs;
776    UINT f_rt;
777    UINT f_imm;
778
779    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
780    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
781    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
782
783  /* Record the fields for the semantic handler.  */
784  FLD (f_imm) = f_imm;
785  FLD (f_rs) = f_rs;
786  FLD (f_rt) = f_rt;
787  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slti", "f_imm 0x%x", 'x', f_imm, "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, (char *) 0));
788
789#undef FLD
790    return idesc;
791  }
792
793 extract_sfmt_bbi:
794  {
795    const IDESC *idesc = &iq2000bf_insn_data[itype];
796    CGEN_INSN_INT insn = entire_insn;
797#define FLD(f) abuf->fields.sfmt_bbi.f
798    UINT f_rs;
799    UINT f_rt;
800    SI f_offset;
801
802    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
803    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
804    f_offset = ((((EXTRACT_LSB0_INT (insn, 32, 15, 16)) << (2))) + (((pc) + (4))));
805
806  /* Record the fields for the semantic handler.  */
807  FLD (f_rt) = f_rt;
808  FLD (f_rs) = f_rs;
809  FLD (i_offset) = f_offset;
810  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bbi", "f_rt 0x%x", 'x', f_rt, "f_rs 0x%x", 'x', f_rs, "offset 0x%x", 'x', f_offset, (char *) 0));
811
812#if WITH_PROFILE_MODEL_P
813  /* Record the fields for profiling.  */
814  if (PROFILE_MODEL_P (current_cpu))
815    {
816    }
817#endif
818#undef FLD
819    return idesc;
820  }
821
822 extract_sfmt_bbv:
823  {
824    const IDESC *idesc = &iq2000bf_insn_data[itype];
825    CGEN_INSN_INT insn = entire_insn;
826#define FLD(f) abuf->fields.sfmt_bbi.f
827    UINT f_rs;
828    UINT f_rt;
829    SI f_offset;
830
831    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
832    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
833    f_offset = ((((EXTRACT_LSB0_INT (insn, 32, 15, 16)) << (2))) + (((pc) + (4))));
834
835  /* Record the fields for the semantic handler.  */
836  FLD (f_rs) = f_rs;
837  FLD (f_rt) = f_rt;
838  FLD (i_offset) = f_offset;
839  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bbv", "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, "offset 0x%x", 'x', f_offset, (char *) 0));
840
841#if WITH_PROFILE_MODEL_P
842  /* Record the fields for profiling.  */
843  if (PROFILE_MODEL_P (current_cpu))
844    {
845    }
846#endif
847#undef FLD
848    return idesc;
849  }
850
851 extract_sfmt_bgez:
852  {
853    const IDESC *idesc = &iq2000bf_insn_data[itype];
854    CGEN_INSN_INT insn = entire_insn;
855#define FLD(f) abuf->fields.sfmt_bbi.f
856    UINT f_rs;
857    SI f_offset;
858
859    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
860    f_offset = ((((EXTRACT_LSB0_INT (insn, 32, 15, 16)) << (2))) + (((pc) + (4))));
861
862  /* Record the fields for the semantic handler.  */
863  FLD (f_rs) = f_rs;
864  FLD (i_offset) = f_offset;
865  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bgez", "f_rs 0x%x", 'x', f_rs, "offset 0x%x", 'x', f_offset, (char *) 0));
866
867#if WITH_PROFILE_MODEL_P
868  /* Record the fields for profiling.  */
869  if (PROFILE_MODEL_P (current_cpu))
870    {
871    }
872#endif
873#undef FLD
874    return idesc;
875  }
876
877 extract_sfmt_bgezal:
878  {
879    const IDESC *idesc = &iq2000bf_insn_data[itype];
880    CGEN_INSN_INT insn = entire_insn;
881#define FLD(f) abuf->fields.sfmt_bbi.f
882    UINT f_rs;
883    SI f_offset;
884
885    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
886    f_offset = ((((EXTRACT_LSB0_INT (insn, 32, 15, 16)) << (2))) + (((pc) + (4))));
887
888  /* Record the fields for the semantic handler.  */
889  FLD (f_rs) = f_rs;
890  FLD (i_offset) = f_offset;
891  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bgezal", "f_rs 0x%x", 'x', f_rs, "offset 0x%x", 'x', f_offset, (char *) 0));
892
893#if WITH_PROFILE_MODEL_P
894  /* Record the fields for profiling.  */
895  if (PROFILE_MODEL_P (current_cpu))
896    {
897    }
898#endif
899#undef FLD
900    return idesc;
901  }
902
903 extract_sfmt_jalr:
904  {
905    const IDESC *idesc = &iq2000bf_insn_data[itype];
906    CGEN_INSN_INT insn = entire_insn;
907#define FLD(f) abuf->fields.sfmt_mrgb.f
908    UINT f_rs;
909    UINT f_rd;
910
911    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
912    f_rd = EXTRACT_LSB0_UINT (insn, 32, 15, 5);
913
914  /* Record the fields for the semantic handler.  */
915  FLD (f_rs) = f_rs;
916  FLD (f_rd) = f_rd;
917  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jalr", "f_rs 0x%x", 'x', f_rs, "f_rd 0x%x", 'x', f_rd, (char *) 0));
918
919#if WITH_PROFILE_MODEL_P
920  /* Record the fields for profiling.  */
921  if (PROFILE_MODEL_P (current_cpu))
922    {
923    }
924#endif
925#undef FLD
926    return idesc;
927  }
928
929 extract_sfmt_jr:
930  {
931    const IDESC *idesc = &iq2000bf_insn_data[itype];
932    CGEN_INSN_INT insn = entire_insn;
933#define FLD(f) abuf->fields.sfmt_bbi.f
934    UINT f_rs;
935
936    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
937
938  /* Record the fields for the semantic handler.  */
939  FLD (f_rs) = f_rs;
940  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jr", "f_rs 0x%x", 'x', f_rs, (char *) 0));
941
942#if WITH_PROFILE_MODEL_P
943  /* Record the fields for profiling.  */
944  if (PROFILE_MODEL_P (current_cpu))
945    {
946    }
947#endif
948#undef FLD
949    return idesc;
950  }
951
952 extract_sfmt_lb:
953  {
954    const IDESC *idesc = &iq2000bf_insn_data[itype];
955    CGEN_INSN_INT insn = entire_insn;
956#define FLD(f) abuf->fields.sfmt_addi.f
957    UINT f_rs;
958    UINT f_rt;
959    UINT f_imm;
960
961    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
962    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
963    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
964
965  /* Record the fields for the semantic handler.  */
966  FLD (f_rs) = f_rs;
967  FLD (f_imm) = f_imm;
968  FLD (f_rt) = f_rt;
969  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lb", "f_rs 0x%x", 'x', f_rs, "f_imm 0x%x", 'x', f_imm, "f_rt 0x%x", 'x', f_rt, (char *) 0));
970
971#undef FLD
972    return idesc;
973  }
974
975 extract_sfmt_lh:
976  {
977    const IDESC *idesc = &iq2000bf_insn_data[itype];
978    CGEN_INSN_INT insn = entire_insn;
979#define FLD(f) abuf->fields.sfmt_addi.f
980    UINT f_rs;
981    UINT f_rt;
982    UINT f_imm;
983
984    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
985    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
986    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
987
988  /* Record the fields for the semantic handler.  */
989  FLD (f_rs) = f_rs;
990  FLD (f_imm) = f_imm;
991  FLD (f_rt) = f_rt;
992  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lh", "f_rs 0x%x", 'x', f_rs, "f_imm 0x%x", 'x', f_imm, "f_rt 0x%x", 'x', f_rt, (char *) 0));
993
994#undef FLD
995    return idesc;
996  }
997
998 extract_sfmt_lui:
999  {
1000    const IDESC *idesc = &iq2000bf_insn_data[itype];
1001    CGEN_INSN_INT insn = entire_insn;
1002#define FLD(f) abuf->fields.sfmt_addi.f
1003    UINT f_rt;
1004    UINT f_imm;
1005
1006    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1007    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
1008
1009  /* Record the fields for the semantic handler.  */
1010  FLD (f_imm) = f_imm;
1011  FLD (f_rt) = f_rt;
1012  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lui", "f_imm 0x%x", 'x', f_imm, "f_rt 0x%x", 'x', f_rt, (char *) 0));
1013
1014#undef FLD
1015    return idesc;
1016  }
1017
1018 extract_sfmt_lw:
1019  {
1020    const IDESC *idesc = &iq2000bf_insn_data[itype];
1021    CGEN_INSN_INT insn = entire_insn;
1022#define FLD(f) abuf->fields.sfmt_addi.f
1023    UINT f_rs;
1024    UINT f_rt;
1025    UINT f_imm;
1026
1027    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
1028    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1029    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
1030
1031  /* Record the fields for the semantic handler.  */
1032  FLD (f_rs) = f_rs;
1033  FLD (f_imm) = f_imm;
1034  FLD (f_rt) = f_rt;
1035  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lw", "f_rs 0x%x", 'x', f_rs, "f_imm 0x%x", 'x', f_imm, "f_rt 0x%x", 'x', f_rt, (char *) 0));
1036
1037#undef FLD
1038    return idesc;
1039  }
1040
1041 extract_sfmt_sb:
1042  {
1043    const IDESC *idesc = &iq2000bf_insn_data[itype];
1044    CGEN_INSN_INT insn = entire_insn;
1045#define FLD(f) abuf->fields.sfmt_addi.f
1046    UINT f_rs;
1047    UINT f_rt;
1048    UINT f_imm;
1049
1050    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
1051    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1052    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
1053
1054  /* Record the fields for the semantic handler.  */
1055  FLD (f_rs) = f_rs;
1056  FLD (f_imm) = f_imm;
1057  FLD (f_rt) = f_rt;
1058  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sb", "f_rs 0x%x", 'x', f_rs, "f_imm 0x%x", 'x', f_imm, "f_rt 0x%x", 'x', f_rt, (char *) 0));
1059
1060#undef FLD
1061    return idesc;
1062  }
1063
1064 extract_sfmt_sh:
1065  {
1066    const IDESC *idesc = &iq2000bf_insn_data[itype];
1067    CGEN_INSN_INT insn = entire_insn;
1068#define FLD(f) abuf->fields.sfmt_addi.f
1069    UINT f_rs;
1070    UINT f_rt;
1071    UINT f_imm;
1072
1073    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
1074    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1075    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
1076
1077  /* Record the fields for the semantic handler.  */
1078  FLD (f_rs) = f_rs;
1079  FLD (f_imm) = f_imm;
1080  FLD (f_rt) = f_rt;
1081  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sh", "f_rs 0x%x", 'x', f_rs, "f_imm 0x%x", 'x', f_imm, "f_rt 0x%x", 'x', f_rt, (char *) 0));
1082
1083#undef FLD
1084    return idesc;
1085  }
1086
1087 extract_sfmt_sw:
1088  {
1089    const IDESC *idesc = &iq2000bf_insn_data[itype];
1090    CGEN_INSN_INT insn = entire_insn;
1091#define FLD(f) abuf->fields.sfmt_addi.f
1092    UINT f_rs;
1093    UINT f_rt;
1094    UINT f_imm;
1095
1096    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
1097    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1098    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
1099
1100  /* Record the fields for the semantic handler.  */
1101  FLD (f_rs) = f_rs;
1102  FLD (f_imm) = f_imm;
1103  FLD (f_rt) = f_rt;
1104  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sw", "f_rs 0x%x", 'x', f_rs, "f_imm 0x%x", 'x', f_imm, "f_rt 0x%x", 'x', f_rt, (char *) 0));
1105
1106#undef FLD
1107    return idesc;
1108  }
1109
1110 extract_sfmt_break:
1111  {
1112    const IDESC *idesc = &iq2000bf_insn_data[itype];
1113#define FLD(f) abuf->fields.fmt_empty.f
1114
1115
1116  /* Record the fields for the semantic handler.  */
1117  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_break", (char *) 0));
1118
1119#if WITH_PROFILE_MODEL_P
1120  /* Record the fields for profiling.  */
1121  if (PROFILE_MODEL_P (current_cpu))
1122    {
1123    }
1124#endif
1125#undef FLD
1126    return idesc;
1127  }
1128
1129 extract_sfmt_syscall:
1130  {
1131    const IDESC *idesc = &iq2000bf_insn_data[itype];
1132#define FLD(f) abuf->fields.fmt_empty.f
1133
1134
1135  /* Record the fields for the semantic handler.  */
1136  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_syscall", (char *) 0));
1137
1138#undef FLD
1139    return idesc;
1140  }
1141
1142 extract_sfmt_andoui:
1143  {
1144    const IDESC *idesc = &iq2000bf_insn_data[itype];
1145    CGEN_INSN_INT insn = entire_insn;
1146#define FLD(f) abuf->fields.sfmt_addi.f
1147    UINT f_rs;
1148    UINT f_rt;
1149    UINT f_imm;
1150
1151    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
1152    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1153    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
1154
1155  /* Record the fields for the semantic handler.  */
1156  FLD (f_imm) = f_imm;
1157  FLD (f_rs) = f_rs;
1158  FLD (f_rt) = f_rt;
1159  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_andoui", "f_imm 0x%x", 'x', f_imm, "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, (char *) 0));
1160
1161#undef FLD
1162    return idesc;
1163  }
1164
1165 extract_sfmt_mrgb:
1166  {
1167    const IDESC *idesc = &iq2000bf_insn_data[itype];
1168    CGEN_INSN_INT insn = entire_insn;
1169#define FLD(f) abuf->fields.sfmt_mrgb.f
1170    UINT f_rs;
1171    UINT f_rt;
1172    UINT f_rd;
1173    UINT f_mask;
1174
1175    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
1176    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1177    f_rd = EXTRACT_LSB0_UINT (insn, 32, 15, 5);
1178    f_mask = EXTRACT_LSB0_UINT (insn, 32, 9, 4);
1179
1180  /* Record the fields for the semantic handler.  */
1181  FLD (f_mask) = f_mask;
1182  FLD (f_rs) = f_rs;
1183  FLD (f_rt) = f_rt;
1184  FLD (f_rd) = f_rd;
1185  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mrgb", "f_mask 0x%x", 'x', f_mask, "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, "f_rd 0x%x", 'x', f_rd, (char *) 0));
1186
1187#undef FLD
1188    return idesc;
1189  }
1190
1191 extract_sfmt_bctxt:
1192  {
1193    const IDESC *idesc = &iq2000bf_insn_data[itype];
1194#define FLD(f) abuf->fields.fmt_empty.f
1195
1196
1197  /* Record the fields for the semantic handler.  */
1198  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bctxt", (char *) 0));
1199
1200#undef FLD
1201    return idesc;
1202  }
1203
1204 extract_sfmt_ldw:
1205  {
1206    const IDESC *idesc = &iq2000bf_insn_data[itype];
1207    CGEN_INSN_INT insn = entire_insn;
1208#define FLD(f) abuf->fields.sfmt_addi.f
1209    UINT f_rs;
1210    UINT f_rt;
1211    UINT f_imm;
1212
1213    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
1214    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1215    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
1216
1217  /* Record the fields for the semantic handler.  */
1218  FLD (f_rs) = f_rs;
1219  FLD (f_rt) = f_rt;
1220  FLD (f_imm) = f_imm;
1221  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldw", "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, "f_imm 0x%x", 'x', f_imm, (char *) 0));
1222
1223#undef FLD
1224    return idesc;
1225  }
1226
1227 extract_sfmt_sdw:
1228  {
1229    const IDESC *idesc = &iq2000bf_insn_data[itype];
1230    CGEN_INSN_INT insn = entire_insn;
1231#define FLD(f) abuf->fields.sfmt_addi.f
1232    UINT f_rs;
1233    UINT f_rt;
1234    UINT f_imm;
1235
1236    f_rs = EXTRACT_LSB0_UINT (insn, 32, 25, 5);
1237    f_rt = EXTRACT_LSB0_UINT (insn, 32, 20, 5);
1238    f_imm = EXTRACT_LSB0_UINT (insn, 32, 15, 16);
1239
1240  /* Record the fields for the semantic handler.  */
1241  FLD (f_rs) = f_rs;
1242  FLD (f_rt) = f_rt;
1243  FLD (f_imm) = f_imm;
1244  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sdw", "f_rs 0x%x", 'x', f_rs, "f_rt 0x%x", 'x', f_rt, "f_imm 0x%x", 'x', f_imm, (char *) 0));
1245
1246#undef FLD
1247    return idesc;
1248  }
1249
1250 extract_sfmt_j:
1251  {
1252    const IDESC *idesc = &iq2000bf_insn_data[itype];
1253    CGEN_INSN_INT insn = entire_insn;
1254#define FLD(f) abuf->fields.sfmt_j.f
1255    USI f_jtarg;
1256
1257    f_jtarg = ((((pc) & (0xf0000000))) | (((EXTRACT_LSB0_UINT (insn, 32, 15, 16)) << (2))));
1258
1259  /* Record the fields for the semantic handler.  */
1260  FLD (i_jmptarg) = f_jtarg;
1261  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_j", "jmptarg 0x%x", 'x', f_jtarg, (char *) 0));
1262
1263#if WITH_PROFILE_MODEL_P
1264  /* Record the fields for profiling.  */
1265  if (PROFILE_MODEL_P (current_cpu))
1266    {
1267    }
1268#endif
1269#undef FLD
1270    return idesc;
1271  }
1272
1273 extract_sfmt_jal:
1274  {
1275    const IDESC *idesc = &iq2000bf_insn_data[itype];
1276    CGEN_INSN_INT insn = entire_insn;
1277#define FLD(f) abuf->fields.sfmt_j.f
1278    USI f_jtarg;
1279
1280    f_jtarg = ((((pc) & (0xf0000000))) | (((EXTRACT_LSB0_UINT (insn, 32, 15, 16)) << (2))));
1281
1282  /* Record the fields for the semantic handler.  */
1283  FLD (i_jmptarg) = f_jtarg;
1284  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jal", "jmptarg 0x%x", 'x', f_jtarg, (char *) 0));
1285
1286#if WITH_PROFILE_MODEL_P
1287  /* Record the fields for profiling.  */
1288  if (PROFILE_MODEL_P (current_cpu))
1289    {
1290    }
1291#endif
1292#undef FLD
1293    return idesc;
1294  }
1295
1296}
1297