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