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