]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/iq2000/decode.c
Regenerate cgen-derived files.
[thirdparty/binutils-gdb.git] / sim / iq2000 / decode.c
CommitLineData
edece237
CV
1/* Simulator instruction decoder for iq2000bf.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
0f51e9bf 5Copyright 1996-2010 Free Software Foundation, Inc.
edece237
CV
6
7This file is part of the GNU simulators.
8
1a5691a5
DE
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.
edece237 13
1a5691a5
DE
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.
edece237 18
1a5691a5
DE
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.
edece237
CV
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). */
1a5691a5 36static IDESC iq2000bf_insn_data[IQ2000BF_INSN__MAX];
edece237
CV
37
38/* Commas between elements are contained in the macros.
39 Some of these are conditionally compiled out. */
40
41static 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 },
1a5691a5 53 { IQ2000_INSN_ADO16, IQ2000BF_INSN_ADO16, IQ2000BF_SFMT_ADD },
edece237
CV
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
2310652a
DE
195static const struct insn_sem iq2000bf_insn_sem_invalid =
196{
edece237
CV
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
202static INLINE void
203init_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
230void
231iq2000bf_init_idesc_table (SIM_CPU *cpu)
232{
233 IDESC *id,*tabend;
234 const struct insn_sem *t,*tend;
1a5691a5 235 int tabsize = IQ2000BF_INSN__MAX;
edece237
CV
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
258const IDESC *
259iq2000bf_decode (SIM_CPU *current_cpu, IADDR pc,
197fa1aa 260 CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn,
edece237
CV
261 ARGBUF *abuf)
262{
263 /* Result of decoder. */
264 IQ2000BF_INSN_TYPE itype;
265
266 {
197fa1aa 267 CGEN_INSN_WORD insn = base_insn;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
426 default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
427 }
428 }
1a5691a5
DE
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;
edece237
CV
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 */
1a5691a5
DE
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;
edece237
CV
470 case 8 : /* fall through */
471 case 10 : /* fall through */
472 case 12 : /* fall through */
1a5691a5
DE
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;
edece237
CV
477 case 16 : /* fall through */
478 case 18 : /* fall through */
479 case 20 : /* fall through */
1a5691a5
DE
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;
edece237
CV
484 case 24 : /* fall through */
485 case 26 : /* fall through */
486 case 28 : /* fall through */
1a5691a5
DE
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;
edece237 491 case 32 : /* fall through */
1a5691a5
DE
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;
edece237 496 case 34 : /* fall through */
1a5691a5
DE
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;
edece237 501 case 36 : /* fall through */
1a5691a5
DE
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;
edece237 506 case 38 : /* fall through */
1a5691a5
DE
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;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
560 default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
561 }
562 }
1a5691a5
DE
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;
edece237
CV
635 case 64 :
636 {
637 unsigned int val = (((insn >> 23) & (1 << 0)));
638 switch (val)
639 {
1a5691a5
DE
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;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
663 case 4 :
664 {
665 unsigned int val = (((insn >> 2) & (3 << 0)));
666 switch (val)
667 {
1a5691a5
DE
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;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
732 default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
733 }
734 }
1a5691a5
DE
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;
edece237
CV
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 {
1a5691a5
DE
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;
edece237
CV
771 default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
772 }
773 }
1a5691a5
DE
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;
edece237
CV
778 case 64 : /* fall through */
779 case 65 : /* fall through */
780 case 66 : /* fall through */
1a5691a5 781 case 67 : itype = IQ2000BF_INSN_WBR1; goto extract_sfmt_syscall;
edece237
CV
782 case 68 : /* fall through */
783 case 69 : /* fall through */
784 case 70 : /* fall through */
1a5691a5 785 case 71 : itype = IQ2000BF_INSN_WBR1U; goto extract_sfmt_syscall;
edece237
CV
786 case 72 : /* fall through */
787 case 73 : /* fall through */
788 case 74 : /* fall through */
1a5691a5 789 case 75 : itype = IQ2000BF_INSN_WBR30; goto extract_sfmt_syscall;
edece237
CV
790 case 76 : /* fall through */
791 case 77 : /* fall through */
792 case 78 : /* fall through */
1a5691a5 793 case 79 : itype = IQ2000BF_INSN_WBR30U; goto extract_sfmt_syscall;
edece237
CV
794 case 80 : /* fall through */
795 case 81 : /* fall through */
796 case 82 : /* fall through */
1a5691a5 797 case 83 : itype = IQ2000BF_INSN_WXR1; goto extract_sfmt_syscall;
edece237
CV
798 case 84 : /* fall through */
799 case 85 : /* fall through */
800 case 86 : /* fall through */
1a5691a5 801 case 87 : itype = IQ2000BF_INSN_WXR1U; goto extract_sfmt_syscall;
edece237
CV
802 case 88 : /* fall through */
803 case 89 : /* fall through */
804 case 90 : /* fall through */
1a5691a5 805 case 91 : itype = IQ2000BF_INSN_WXR30; goto extract_sfmt_syscall;
edece237
CV
806 case 92 : /* fall through */
807 case 93 : /* fall through */
808 case 94 : /* fall through */
1a5691a5 809 case 95 : itype = IQ2000BF_INSN_WXR30U; goto extract_sfmt_syscall;
edece237
CV
810 case 96 : /* fall through */
811 case 97 : /* fall through */
812 case 98 : /* fall through */
1a5691a5 813 case 99 : itype = IQ2000BF_INSN_RBR1; goto extract_sfmt_syscall;
edece237
CV
814 case 104 : /* fall through */
815 case 105 : /* fall through */
816 case 106 : /* fall through */
1a5691a5 817 case 107 : itype = IQ2000BF_INSN_RBR30; goto extract_sfmt_syscall;
edece237
CV
818 case 112 : /* fall through */
819 case 113 : /* fall through */
820 case 114 : /* fall through */
1a5691a5 821 case 115 : itype = IQ2000BF_INSN_RXR1; goto extract_sfmt_syscall;
edece237
CV
822 case 116 : /* fall through */
823 case 117 : /* fall through */
824 case 118 : /* fall through */
1a5691a5 825 case 119 : itype = IQ2000BF_INSN_PKRLR1; goto extract_sfmt_syscall;
edece237
CV
826 case 120 : /* fall through */
827 case 121 : /* fall through */
828 case 122 : /* fall through */
1a5691a5 829 case 123 : itype = IQ2000BF_INSN_RXR30; goto extract_sfmt_syscall;
edece237
CV
830 case 124 : /* fall through */
831 case 125 : /* fall through */
832 case 126 : /* fall through */
1a5691a5 833 case 127 : itype = IQ2000BF_INSN_PKRLR30; goto extract_sfmt_syscall;
edece237
CV
834 default : itype = IQ2000BF_INSN_X_INVALID; goto extract_sfmt_empty;
835 }
836 }
1a5691a5
DE
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;
edece237
CV
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];
2310652a 883#define FLD(f) abuf->fields.sfmt_empty.f
edece237
CV
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];
197fa1aa 896 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 919 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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));
edece237
CV
934
935#undef FLD
936 return idesc;
937 }
938
939 extract_sfmt_ram:
940 {
941 const IDESC *idesc = &iq2000bf_insn_data[itype];
197fa1aa 942 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 971 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 994 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1020 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1043 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1066 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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);
62836bf4 1074 f_offset = ((((EXTRACT_LSB0_SINT (insn, 32, 15, 16)) << (2))) + (((pc) + (4))));
edece237
CV
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];
197fa1aa 1095 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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);
62836bf4 1103 f_offset = ((((EXTRACT_LSB0_SINT (insn, 32, 15, 16)) << (2))) + (((pc) + (4))));
edece237
CV
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];
197fa1aa 1124 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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);
62836bf4 1130 f_offset = ((((EXTRACT_LSB0_SINT (insn, 32, 15, 16)) << (2))) + (((pc) + (4))));
edece237
CV
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];
197fa1aa 1150 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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);
62836bf4 1156 f_offset = ((((EXTRACT_LSB0_SINT (insn, 32, 15, 16)) << (2))) + (((pc) + (4))));
edece237
CV
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];
197fa1aa 1176 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1202 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1225 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1248 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1271 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1291 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1314 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1337 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1360 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
2310652a 1383#define FLD(f) abuf->fields.sfmt_empty.f
edece237
CV
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];
2310652a 1402#define FLD(f) abuf->fields.sfmt_empty.f
edece237
CV
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];
197fa1aa 1415 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1438 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
2310652a 1464#define FLD(f) abuf->fields.sfmt_empty.f
edece237
CV
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];
197fa1aa 1477 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1500 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1523 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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];
197fa1aa 1546 CGEN_INSN_WORD insn = entire_insn;
edece237
CV
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}