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