gas: scfi: testsuite: refresh the README
[binutils-gdb.git] / sim / iq2000 / sem-switch.c
blob164392a8957e061bc496b8cc075633b7339cd6e6
1 /* Simulator instruction semantics for iq2000bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996-2024 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
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.
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.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
25 #ifdef DEFINE_LABELS
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
31 static struct {
32 int index;
33 void *label;
34 } labels[] = {
35 { IQ2000BF_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
36 { IQ2000BF_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
37 { IQ2000BF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
38 { IQ2000BF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
39 { IQ2000BF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
40 { IQ2000BF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
41 { IQ2000BF_INSN_ADD, && case_sem_INSN_ADD },
42 { IQ2000BF_INSN_ADDI, && case_sem_INSN_ADDI },
43 { IQ2000BF_INSN_ADDIU, && case_sem_INSN_ADDIU },
44 { IQ2000BF_INSN_ADDU, && case_sem_INSN_ADDU },
45 { IQ2000BF_INSN_ADO16, && case_sem_INSN_ADO16 },
46 { IQ2000BF_INSN_AND, && case_sem_INSN_AND },
47 { IQ2000BF_INSN_ANDI, && case_sem_INSN_ANDI },
48 { IQ2000BF_INSN_ANDOI, && case_sem_INSN_ANDOI },
49 { IQ2000BF_INSN_NOR, && case_sem_INSN_NOR },
50 { IQ2000BF_INSN_OR, && case_sem_INSN_OR },
51 { IQ2000BF_INSN_ORI, && case_sem_INSN_ORI },
52 { IQ2000BF_INSN_RAM, && case_sem_INSN_RAM },
53 { IQ2000BF_INSN_SLL, && case_sem_INSN_SLL },
54 { IQ2000BF_INSN_SLLV, && case_sem_INSN_SLLV },
55 { IQ2000BF_INSN_SLMV, && case_sem_INSN_SLMV },
56 { IQ2000BF_INSN_SLT, && case_sem_INSN_SLT },
57 { IQ2000BF_INSN_SLTI, && case_sem_INSN_SLTI },
58 { IQ2000BF_INSN_SLTIU, && case_sem_INSN_SLTIU },
59 { IQ2000BF_INSN_SLTU, && case_sem_INSN_SLTU },
60 { IQ2000BF_INSN_SRA, && case_sem_INSN_SRA },
61 { IQ2000BF_INSN_SRAV, && case_sem_INSN_SRAV },
62 { IQ2000BF_INSN_SRL, && case_sem_INSN_SRL },
63 { IQ2000BF_INSN_SRLV, && case_sem_INSN_SRLV },
64 { IQ2000BF_INSN_SRMV, && case_sem_INSN_SRMV },
65 { IQ2000BF_INSN_SUB, && case_sem_INSN_SUB },
66 { IQ2000BF_INSN_SUBU, && case_sem_INSN_SUBU },
67 { IQ2000BF_INSN_XOR, && case_sem_INSN_XOR },
68 { IQ2000BF_INSN_XORI, && case_sem_INSN_XORI },
69 { IQ2000BF_INSN_BBI, && case_sem_INSN_BBI },
70 { IQ2000BF_INSN_BBIN, && case_sem_INSN_BBIN },
71 { IQ2000BF_INSN_BBV, && case_sem_INSN_BBV },
72 { IQ2000BF_INSN_BBVN, && case_sem_INSN_BBVN },
73 { IQ2000BF_INSN_BEQ, && case_sem_INSN_BEQ },
74 { IQ2000BF_INSN_BEQL, && case_sem_INSN_BEQL },
75 { IQ2000BF_INSN_BGEZ, && case_sem_INSN_BGEZ },
76 { IQ2000BF_INSN_BGEZAL, && case_sem_INSN_BGEZAL },
77 { IQ2000BF_INSN_BGEZALL, && case_sem_INSN_BGEZALL },
78 { IQ2000BF_INSN_BGEZL, && case_sem_INSN_BGEZL },
79 { IQ2000BF_INSN_BLTZ, && case_sem_INSN_BLTZ },
80 { IQ2000BF_INSN_BLTZL, && case_sem_INSN_BLTZL },
81 { IQ2000BF_INSN_BLTZAL, && case_sem_INSN_BLTZAL },
82 { IQ2000BF_INSN_BLTZALL, && case_sem_INSN_BLTZALL },
83 { IQ2000BF_INSN_BMB0, && case_sem_INSN_BMB0 },
84 { IQ2000BF_INSN_BMB1, && case_sem_INSN_BMB1 },
85 { IQ2000BF_INSN_BMB2, && case_sem_INSN_BMB2 },
86 { IQ2000BF_INSN_BMB3, && case_sem_INSN_BMB3 },
87 { IQ2000BF_INSN_BNE, && case_sem_INSN_BNE },
88 { IQ2000BF_INSN_BNEL, && case_sem_INSN_BNEL },
89 { IQ2000BF_INSN_JALR, && case_sem_INSN_JALR },
90 { IQ2000BF_INSN_JR, && case_sem_INSN_JR },
91 { IQ2000BF_INSN_LB, && case_sem_INSN_LB },
92 { IQ2000BF_INSN_LBU, && case_sem_INSN_LBU },
93 { IQ2000BF_INSN_LH, && case_sem_INSN_LH },
94 { IQ2000BF_INSN_LHU, && case_sem_INSN_LHU },
95 { IQ2000BF_INSN_LUI, && case_sem_INSN_LUI },
96 { IQ2000BF_INSN_LW, && case_sem_INSN_LW },
97 { IQ2000BF_INSN_SB, && case_sem_INSN_SB },
98 { IQ2000BF_INSN_SH, && case_sem_INSN_SH },
99 { IQ2000BF_INSN_SW, && case_sem_INSN_SW },
100 { IQ2000BF_INSN_BREAK, && case_sem_INSN_BREAK },
101 { IQ2000BF_INSN_SYSCALL, && case_sem_INSN_SYSCALL },
102 { IQ2000BF_INSN_ANDOUI, && case_sem_INSN_ANDOUI },
103 { IQ2000BF_INSN_ORUI, && case_sem_INSN_ORUI },
104 { IQ2000BF_INSN_BGTZ, && case_sem_INSN_BGTZ },
105 { IQ2000BF_INSN_BGTZL, && case_sem_INSN_BGTZL },
106 { IQ2000BF_INSN_BLEZ, && case_sem_INSN_BLEZ },
107 { IQ2000BF_INSN_BLEZL, && case_sem_INSN_BLEZL },
108 { IQ2000BF_INSN_MRGB, && case_sem_INSN_MRGB },
109 { IQ2000BF_INSN_BCTXT, && case_sem_INSN_BCTXT },
110 { IQ2000BF_INSN_BC0F, && case_sem_INSN_BC0F },
111 { IQ2000BF_INSN_BC0FL, && case_sem_INSN_BC0FL },
112 { IQ2000BF_INSN_BC3F, && case_sem_INSN_BC3F },
113 { IQ2000BF_INSN_BC3FL, && case_sem_INSN_BC3FL },
114 { IQ2000BF_INSN_BC0T, && case_sem_INSN_BC0T },
115 { IQ2000BF_INSN_BC0TL, && case_sem_INSN_BC0TL },
116 { IQ2000BF_INSN_BC3T, && case_sem_INSN_BC3T },
117 { IQ2000BF_INSN_BC3TL, && case_sem_INSN_BC3TL },
118 { IQ2000BF_INSN_CFC0, && case_sem_INSN_CFC0 },
119 { IQ2000BF_INSN_CFC1, && case_sem_INSN_CFC1 },
120 { IQ2000BF_INSN_CFC2, && case_sem_INSN_CFC2 },
121 { IQ2000BF_INSN_CFC3, && case_sem_INSN_CFC3 },
122 { IQ2000BF_INSN_CHKHDR, && case_sem_INSN_CHKHDR },
123 { IQ2000BF_INSN_CTC0, && case_sem_INSN_CTC0 },
124 { IQ2000BF_INSN_CTC1, && case_sem_INSN_CTC1 },
125 { IQ2000BF_INSN_CTC2, && case_sem_INSN_CTC2 },
126 { IQ2000BF_INSN_CTC3, && case_sem_INSN_CTC3 },
127 { IQ2000BF_INSN_JCR, && case_sem_INSN_JCR },
128 { IQ2000BF_INSN_LUC32, && case_sem_INSN_LUC32 },
129 { IQ2000BF_INSN_LUC32L, && case_sem_INSN_LUC32L },
130 { IQ2000BF_INSN_LUC64, && case_sem_INSN_LUC64 },
131 { IQ2000BF_INSN_LUC64L, && case_sem_INSN_LUC64L },
132 { IQ2000BF_INSN_LUK, && case_sem_INSN_LUK },
133 { IQ2000BF_INSN_LULCK, && case_sem_INSN_LULCK },
134 { IQ2000BF_INSN_LUM32, && case_sem_INSN_LUM32 },
135 { IQ2000BF_INSN_LUM32L, && case_sem_INSN_LUM32L },
136 { IQ2000BF_INSN_LUM64, && case_sem_INSN_LUM64 },
137 { IQ2000BF_INSN_LUM64L, && case_sem_INSN_LUM64L },
138 { IQ2000BF_INSN_LUR, && case_sem_INSN_LUR },
139 { IQ2000BF_INSN_LURL, && case_sem_INSN_LURL },
140 { IQ2000BF_INSN_LUULCK, && case_sem_INSN_LUULCK },
141 { IQ2000BF_INSN_MFC0, && case_sem_INSN_MFC0 },
142 { IQ2000BF_INSN_MFC1, && case_sem_INSN_MFC1 },
143 { IQ2000BF_INSN_MFC2, && case_sem_INSN_MFC2 },
144 { IQ2000BF_INSN_MFC3, && case_sem_INSN_MFC3 },
145 { IQ2000BF_INSN_MTC0, && case_sem_INSN_MTC0 },
146 { IQ2000BF_INSN_MTC1, && case_sem_INSN_MTC1 },
147 { IQ2000BF_INSN_MTC2, && case_sem_INSN_MTC2 },
148 { IQ2000BF_INSN_MTC3, && case_sem_INSN_MTC3 },
149 { IQ2000BF_INSN_PKRL, && case_sem_INSN_PKRL },
150 { IQ2000BF_INSN_PKRLR1, && case_sem_INSN_PKRLR1 },
151 { IQ2000BF_INSN_PKRLR30, && case_sem_INSN_PKRLR30 },
152 { IQ2000BF_INSN_RB, && case_sem_INSN_RB },
153 { IQ2000BF_INSN_RBR1, && case_sem_INSN_RBR1 },
154 { IQ2000BF_INSN_RBR30, && case_sem_INSN_RBR30 },
155 { IQ2000BF_INSN_RFE, && case_sem_INSN_RFE },
156 { IQ2000BF_INSN_RX, && case_sem_INSN_RX },
157 { IQ2000BF_INSN_RXR1, && case_sem_INSN_RXR1 },
158 { IQ2000BF_INSN_RXR30, && case_sem_INSN_RXR30 },
159 { IQ2000BF_INSN_SLEEP, && case_sem_INSN_SLEEP },
160 { IQ2000BF_INSN_SRRD, && case_sem_INSN_SRRD },
161 { IQ2000BF_INSN_SRRDL, && case_sem_INSN_SRRDL },
162 { IQ2000BF_INSN_SRULCK, && case_sem_INSN_SRULCK },
163 { IQ2000BF_INSN_SRWR, && case_sem_INSN_SRWR },
164 { IQ2000BF_INSN_SRWRU, && case_sem_INSN_SRWRU },
165 { IQ2000BF_INSN_TRAPQFL, && case_sem_INSN_TRAPQFL },
166 { IQ2000BF_INSN_TRAPQNE, && case_sem_INSN_TRAPQNE },
167 { IQ2000BF_INSN_TRAPREL, && case_sem_INSN_TRAPREL },
168 { IQ2000BF_INSN_WB, && case_sem_INSN_WB },
169 { IQ2000BF_INSN_WBU, && case_sem_INSN_WBU },
170 { IQ2000BF_INSN_WBR1, && case_sem_INSN_WBR1 },
171 { IQ2000BF_INSN_WBR1U, && case_sem_INSN_WBR1U },
172 { IQ2000BF_INSN_WBR30, && case_sem_INSN_WBR30 },
173 { IQ2000BF_INSN_WBR30U, && case_sem_INSN_WBR30U },
174 { IQ2000BF_INSN_WX, && case_sem_INSN_WX },
175 { IQ2000BF_INSN_WXU, && case_sem_INSN_WXU },
176 { IQ2000BF_INSN_WXR1, && case_sem_INSN_WXR1 },
177 { IQ2000BF_INSN_WXR1U, && case_sem_INSN_WXR1U },
178 { IQ2000BF_INSN_WXR30, && case_sem_INSN_WXR30 },
179 { IQ2000BF_INSN_WXR30U, && case_sem_INSN_WXR30U },
180 { IQ2000BF_INSN_LDW, && case_sem_INSN_LDW },
181 { IQ2000BF_INSN_SDW, && case_sem_INSN_SDW },
182 { IQ2000BF_INSN_J, && case_sem_INSN_J },
183 { IQ2000BF_INSN_JAL, && case_sem_INSN_JAL },
184 { IQ2000BF_INSN_BMB, && case_sem_INSN_BMB },
185 { 0, 0 }
187 int i;
189 for (i = 0; labels[i].label != 0; ++i)
191 #if FAST_P
192 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
193 #else
194 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
195 #endif
198 #undef DEFINE_LABELS
199 #endif /* DEFINE_LABELS */
201 #ifdef DEFINE_SWITCH
203 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
204 off frills like tracing and profiling. */
205 /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
206 that can cause it to be optimized out. Another way would be to emit
207 special handlers into the instruction "stream". */
209 #if FAST_P
210 #undef CGEN_TRACE_RESULT
211 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
212 #endif
214 #undef GET_ATTR
215 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
219 #if WITH_SCACHE_PBB
221 /* Branch to next handler without going around main loop. */
222 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
223 SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
225 #else /* ! WITH_SCACHE_PBB */
227 #define NEXT(vpc) BREAK (sem)
228 #ifdef __GNUC__
229 #if FAST_P
230 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
231 #else
232 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
233 #endif
234 #else
235 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
236 #endif
238 #endif /* ! WITH_SCACHE_PBB */
242 CASE (sem, INSN_X_INVALID) : /* --invalid-- */
244 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
245 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
246 #define FLD(f) abuf->fields.sfmt_empty.f
247 int UNUSED written = 0;
248 IADDR UNUSED pc = abuf->addr;
249 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
252 /* Update the recorded pc in the cpu state struct.
253 Only necessary for WITH_SCACHE case, but to avoid the
254 conditional compilation .... */
255 SET_H_PC (pc);
256 /* Virtual insns have zero size. Overwrite vpc with address of next insn
257 using the default-insn-bitsize spec. When executing insns in parallel
258 we may want to queue the fault and continue execution. */
259 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
260 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
263 #undef FLD
265 NEXT (vpc);
267 CASE (sem, INSN_X_AFTER) : /* --after-- */
269 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
270 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
271 #define FLD(f) abuf->fields.sfmt_empty.f
272 int UNUSED written = 0;
273 IADDR UNUSED pc = abuf->addr;
274 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
277 #if WITH_SCACHE_PBB_IQ2000BF
278 iq2000bf_pbb_after (current_cpu, sem_arg);
279 #endif
282 #undef FLD
284 NEXT (vpc);
286 CASE (sem, INSN_X_BEFORE) : /* --before-- */
288 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
289 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
290 #define FLD(f) abuf->fields.sfmt_empty.f
291 int UNUSED written = 0;
292 IADDR UNUSED pc = abuf->addr;
293 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
296 #if WITH_SCACHE_PBB_IQ2000BF
297 iq2000bf_pbb_before (current_cpu, sem_arg);
298 #endif
301 #undef FLD
303 NEXT (vpc);
305 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
307 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
308 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
309 #define FLD(f) abuf->fields.sfmt_empty.f
310 int UNUSED written = 0;
311 IADDR UNUSED pc = abuf->addr;
312 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
315 #if WITH_SCACHE_PBB_IQ2000BF
316 #ifdef DEFINE_SWITCH
317 vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg,
318 pbb_br_type, pbb_br_npc);
319 BREAK (sem);
320 #else
321 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
322 vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg,
323 CPU_PBB_BR_TYPE (current_cpu),
324 CPU_PBB_BR_NPC (current_cpu));
325 #endif
326 #endif
329 #undef FLD
331 NEXT (vpc);
333 CASE (sem, INSN_X_CHAIN) : /* --chain-- */
335 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
336 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
337 #define FLD(f) abuf->fields.sfmt_empty.f
338 int UNUSED written = 0;
339 IADDR UNUSED pc = abuf->addr;
340 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
343 #if WITH_SCACHE_PBB_IQ2000BF
344 vpc = iq2000bf_pbb_chain (current_cpu, sem_arg);
345 #ifdef DEFINE_SWITCH
346 BREAK (sem);
347 #endif
348 #endif
351 #undef FLD
353 NEXT (vpc);
355 CASE (sem, INSN_X_BEGIN) : /* --begin-- */
357 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
358 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
359 #define FLD(f) abuf->fields.sfmt_empty.f
360 int UNUSED written = 0;
361 IADDR UNUSED pc = abuf->addr;
362 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
365 #if WITH_SCACHE_PBB_IQ2000BF
366 #if defined DEFINE_SWITCH || defined FAST_P
367 /* In the switch case FAST_P is a constant, allowing several optimizations
368 in any called inline functions. */
369 vpc = iq2000bf_pbb_begin (current_cpu, FAST_P);
370 #else
371 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
372 vpc = iq2000bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
373 #else
374 vpc = iq2000bf_pbb_begin (current_cpu, 0);
375 #endif
376 #endif
377 #endif
380 #undef FLD
382 NEXT (vpc);
384 CASE (sem, INSN_ADD) : /* add $rd,$rs,$rt */
386 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
387 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
388 #define FLD(f) abuf->fields.sfmt_mrgb.f
389 int UNUSED written = 0;
390 IADDR UNUSED pc = abuf->addr;
391 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
394 SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
395 SET_H_GR (FLD (f_rd), opval);
396 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
399 #undef FLD
401 NEXT (vpc);
403 CASE (sem, INSN_ADDI) : /* addi $rt,$rs,$lo16 */
405 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
406 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
407 #define FLD(f) abuf->fields.sfmt_addi.f
408 int UNUSED written = 0;
409 IADDR UNUSED pc = abuf->addr;
410 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
413 SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))));
414 SET_H_GR (FLD (f_rt), opval);
415 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
418 #undef FLD
420 NEXT (vpc);
422 CASE (sem, INSN_ADDIU) : /* addiu $rt,$rs,$lo16 */
424 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
425 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
426 #define FLD(f) abuf->fields.sfmt_addi.f
427 int UNUSED written = 0;
428 IADDR UNUSED pc = abuf->addr;
429 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
432 SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))));
433 SET_H_GR (FLD (f_rt), opval);
434 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
437 #undef FLD
439 NEXT (vpc);
441 CASE (sem, INSN_ADDU) : /* addu $rd,$rs,$rt */
443 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
444 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
445 #define FLD(f) abuf->fields.sfmt_mrgb.f
446 int UNUSED written = 0;
447 IADDR UNUSED pc = abuf->addr;
448 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
451 SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
452 SET_H_GR (FLD (f_rd), opval);
453 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
456 #undef FLD
458 NEXT (vpc);
460 CASE (sem, INSN_ADO16) : /* ado16 $rd,$rs,$rt */
462 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
463 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
464 #define FLD(f) abuf->fields.sfmt_mrgb.f
465 int UNUSED written = 0;
466 IADDR UNUSED pc = abuf->addr;
467 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
470 HI tmp_high;
471 HI tmp_low;
472 tmp_low = ADDHI (ANDHI (GET_H_GR (FLD (f_rs)), 65535), ANDHI (GET_H_GR (FLD (f_rt)), 65535));
473 tmp_high = ADDHI (SRLSI (GET_H_GR (FLD (f_rs)), 16), SRLSI (GET_H_GR (FLD (f_rt)), 16));
475 SI opval = ORSI (SLLSI (tmp_high, 16), tmp_low);
476 SET_H_GR (FLD (f_rd), opval);
477 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
481 #undef FLD
483 NEXT (vpc);
485 CASE (sem, INSN_AND) : /* and $rd,$rs,$rt */
487 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
488 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
489 #define FLD(f) abuf->fields.sfmt_mrgb.f
490 int UNUSED written = 0;
491 IADDR UNUSED pc = abuf->addr;
492 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
495 SI opval = ANDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
496 SET_H_GR (FLD (f_rd), opval);
497 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
500 #undef FLD
502 NEXT (vpc);
504 CASE (sem, INSN_ANDI) : /* andi $rt,$rs,$lo16 */
506 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
507 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
508 #define FLD(f) abuf->fields.sfmt_addi.f
509 int UNUSED written = 0;
510 IADDR UNUSED pc = abuf->addr;
511 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
514 SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
515 SET_H_GR (FLD (f_rt), opval);
516 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
519 #undef FLD
521 NEXT (vpc);
523 CASE (sem, INSN_ANDOI) : /* andoi $rt,$rs,$lo16 */
525 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
526 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
527 #define FLD(f) abuf->fields.sfmt_addi.f
528 int UNUSED written = 0;
529 IADDR UNUSED pc = abuf->addr;
530 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
533 SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (0xffff0000, EXTHISI (TRUNCSIHI (FLD (f_imm)))));
534 SET_H_GR (FLD (f_rt), opval);
535 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
538 #undef FLD
540 NEXT (vpc);
542 CASE (sem, INSN_NOR) : /* nor $rd,$rs,$rt */
544 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
545 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
546 #define FLD(f) abuf->fields.sfmt_mrgb.f
547 int UNUSED written = 0;
548 IADDR UNUSED pc = abuf->addr;
549 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
552 SI opval = INVSI (ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))));
553 SET_H_GR (FLD (f_rd), opval);
554 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
557 #undef FLD
559 NEXT (vpc);
561 CASE (sem, INSN_OR) : /* or $rd,$rs,$rt */
563 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
564 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
565 #define FLD(f) abuf->fields.sfmt_mrgb.f
566 int UNUSED written = 0;
567 IADDR UNUSED pc = abuf->addr;
568 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
571 SI opval = ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
572 SET_H_GR (FLD (f_rd), opval);
573 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
576 #undef FLD
578 NEXT (vpc);
580 CASE (sem, INSN_ORI) : /* ori $rt,$rs,$lo16 */
582 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
583 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
584 #define FLD(f) abuf->fields.sfmt_addi.f
585 int UNUSED written = 0;
586 IADDR UNUSED pc = abuf->addr;
587 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
590 SI opval = ORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
591 SET_H_GR (FLD (f_rt), opval);
592 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
595 #undef FLD
597 NEXT (vpc);
599 CASE (sem, INSN_RAM) : /* ram $rd,$rt,$shamt,$maskl,$maskr */
601 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
602 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
603 #define FLD(f) abuf->fields.sfmt_ram.f
604 int UNUSED written = 0;
605 IADDR UNUSED pc = abuf->addr;
606 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
610 SI opval = RORSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
611 SET_H_GR (FLD (f_rd), opval);
612 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
615 SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SRLSI (0xffffffff, FLD (f_maskl)));
616 SET_H_GR (FLD (f_rd), opval);
617 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
620 SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SLLSI (0xffffffff, FLD (f_rs)));
621 SET_H_GR (FLD (f_rd), opval);
622 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
626 #undef FLD
628 NEXT (vpc);
630 CASE (sem, INSN_SLL) : /* sll $rd,$rt,$shamt */
632 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
633 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
634 #define FLD(f) abuf->fields.sfmt_ram.f
635 int UNUSED written = 0;
636 IADDR UNUSED pc = abuf->addr;
637 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
640 SI opval = SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
641 SET_H_GR (FLD (f_rd), opval);
642 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
645 #undef FLD
647 NEXT (vpc);
649 CASE (sem, INSN_SLLV) : /* sllv $rd,$rt,$rs */
651 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
652 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
653 #define FLD(f) abuf->fields.sfmt_mrgb.f
654 int UNUSED written = 0;
655 IADDR UNUSED pc = abuf->addr;
656 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
659 SI opval = SLLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
660 SET_H_GR (FLD (f_rd), opval);
661 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
664 #undef FLD
666 NEXT (vpc);
668 CASE (sem, INSN_SLMV) : /* slmv $rd,$rt,$rs,$shamt */
670 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
671 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
672 #define FLD(f) abuf->fields.sfmt_ram.f
673 int UNUSED written = 0;
674 IADDR UNUSED pc = abuf->addr;
675 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
678 SI opval = ANDSI (SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SRLSI (0xffffffff, GET_H_GR (FLD (f_rs))));
679 SET_H_GR (FLD (f_rd), opval);
680 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
683 #undef FLD
685 NEXT (vpc);
687 CASE (sem, INSN_SLT) : /* slt $rd,$rs,$rt */
689 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
690 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
691 #define FLD(f) abuf->fields.sfmt_mrgb.f
692 int UNUSED written = 0;
693 IADDR UNUSED pc = abuf->addr;
694 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
696 if (LTSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
698 SI opval = 1;
699 SET_H_GR (FLD (f_rd), opval);
700 written |= (1 << 2);
701 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
703 } else {
705 SI opval = 0;
706 SET_H_GR (FLD (f_rd), opval);
707 written |= (1 << 2);
708 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
712 abuf->written = written;
713 #undef FLD
715 NEXT (vpc);
717 CASE (sem, INSN_SLTI) : /* slti $rt,$rs,$imm */
719 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
720 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
721 #define FLD(f) abuf->fields.sfmt_addi.f
722 int UNUSED written = 0;
723 IADDR UNUSED pc = abuf->addr;
724 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
726 if (LTSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) {
728 SI opval = 1;
729 SET_H_GR (FLD (f_rt), opval);
730 written |= (1 << 2);
731 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
733 } else {
735 SI opval = 0;
736 SET_H_GR (FLD (f_rt), opval);
737 written |= (1 << 2);
738 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
742 abuf->written = written;
743 #undef FLD
745 NEXT (vpc);
747 CASE (sem, INSN_SLTIU) : /* sltiu $rt,$rs,$imm */
749 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
750 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
751 #define FLD(f) abuf->fields.sfmt_addi.f
752 int UNUSED written = 0;
753 IADDR UNUSED pc = abuf->addr;
754 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
756 if (LTUSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) {
758 SI opval = 1;
759 SET_H_GR (FLD (f_rt), opval);
760 written |= (1 << 2);
761 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
763 } else {
765 SI opval = 0;
766 SET_H_GR (FLD (f_rt), opval);
767 written |= (1 << 2);
768 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
772 abuf->written = written;
773 #undef FLD
775 NEXT (vpc);
777 CASE (sem, INSN_SLTU) : /* sltu $rd,$rs,$rt */
779 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
780 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
781 #define FLD(f) abuf->fields.sfmt_mrgb.f
782 int UNUSED written = 0;
783 IADDR UNUSED pc = abuf->addr;
784 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
786 if (LTUSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
788 SI opval = 1;
789 SET_H_GR (FLD (f_rd), opval);
790 written |= (1 << 2);
791 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
793 } else {
795 SI opval = 0;
796 SET_H_GR (FLD (f_rd), opval);
797 written |= (1 << 2);
798 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
802 abuf->written = written;
803 #undef FLD
805 NEXT (vpc);
807 CASE (sem, INSN_SRA) : /* sra $rd,$rt,$shamt */
809 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
810 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
811 #define FLD(f) abuf->fields.sfmt_ram.f
812 int UNUSED written = 0;
813 IADDR UNUSED pc = abuf->addr;
814 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
817 SI opval = SRASI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
818 SET_H_GR (FLD (f_rd), opval);
819 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
822 #undef FLD
824 NEXT (vpc);
826 CASE (sem, INSN_SRAV) : /* srav $rd,$rt,$rs */
828 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
829 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
830 #define FLD(f) abuf->fields.sfmt_mrgb.f
831 int UNUSED written = 0;
832 IADDR UNUSED pc = abuf->addr;
833 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
836 SI opval = SRASI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
837 SET_H_GR (FLD (f_rd), opval);
838 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
841 #undef FLD
843 NEXT (vpc);
845 CASE (sem, INSN_SRL) : /* srl $rd,$rt,$shamt */
847 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
848 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
849 #define FLD(f) abuf->fields.sfmt_ram.f
850 int UNUSED written = 0;
851 IADDR UNUSED pc = abuf->addr;
852 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
855 SI opval = SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
856 SET_H_GR (FLD (f_rd), opval);
857 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
860 #undef FLD
862 NEXT (vpc);
864 CASE (sem, INSN_SRLV) : /* srlv $rd,$rt,$rs */
866 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
867 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
868 #define FLD(f) abuf->fields.sfmt_mrgb.f
869 int UNUSED written = 0;
870 IADDR UNUSED pc = abuf->addr;
871 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
874 SI opval = SRLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
875 SET_H_GR (FLD (f_rd), opval);
876 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
879 #undef FLD
881 NEXT (vpc);
883 CASE (sem, INSN_SRMV) : /* srmv $rd,$rt,$rs,$shamt */
885 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
886 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
887 #define FLD(f) abuf->fields.sfmt_ram.f
888 int UNUSED written = 0;
889 IADDR UNUSED pc = abuf->addr;
890 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
893 SI opval = ANDSI (SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SLLSI (0xffffffff, GET_H_GR (FLD (f_rs))));
894 SET_H_GR (FLD (f_rd), opval);
895 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
898 #undef FLD
900 NEXT (vpc);
902 CASE (sem, INSN_SUB) : /* sub $rd,$rs,$rt */
904 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
905 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
906 #define FLD(f) abuf->fields.sfmt_mrgb.f
907 int UNUSED written = 0;
908 IADDR UNUSED pc = abuf->addr;
909 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
912 SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
913 SET_H_GR (FLD (f_rd), opval);
914 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
917 #undef FLD
919 NEXT (vpc);
921 CASE (sem, INSN_SUBU) : /* subu $rd,$rs,$rt */
923 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
924 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
925 #define FLD(f) abuf->fields.sfmt_mrgb.f
926 int UNUSED written = 0;
927 IADDR UNUSED pc = abuf->addr;
928 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
931 SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
932 SET_H_GR (FLD (f_rd), opval);
933 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
936 #undef FLD
938 NEXT (vpc);
940 CASE (sem, INSN_XOR) : /* xor $rd,$rs,$rt */
942 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
943 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
944 #define FLD(f) abuf->fields.sfmt_mrgb.f
945 int UNUSED written = 0;
946 IADDR UNUSED pc = abuf->addr;
947 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
950 SI opval = XORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
951 SET_H_GR (FLD (f_rd), opval);
952 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
955 #undef FLD
957 NEXT (vpc);
959 CASE (sem, INSN_XORI) : /* xori $rt,$rs,$lo16 */
961 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
962 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
963 #define FLD(f) abuf->fields.sfmt_addi.f
964 int UNUSED written = 0;
965 IADDR UNUSED pc = abuf->addr;
966 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
969 SI opval = XORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
970 SET_H_GR (FLD (f_rt), opval);
971 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
974 #undef FLD
976 NEXT (vpc);
978 CASE (sem, INSN_BBI) : /* bbi $rs($bitnum),$offset */
980 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
981 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
982 #define FLD(f) abuf->fields.sfmt_bbi.f
983 int UNUSED written = 0;
984 IADDR UNUSED pc = abuf->addr;
985 SEM_BRANCH_INIT
986 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
988 if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt)))) {
991 USI opval = FLD (i_offset);
992 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
993 written |= (1 << 3);
994 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
999 abuf->written = written;
1000 SEM_BRANCH_FINI (vpc);
1001 #undef FLD
1003 NEXT (vpc);
1005 CASE (sem, INSN_BBIN) : /* bbin $rs($bitnum),$offset */
1007 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1008 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1009 #define FLD(f) abuf->fields.sfmt_bbi.f
1010 int UNUSED written = 0;
1011 IADDR UNUSED pc = abuf->addr;
1012 SEM_BRANCH_INIT
1013 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1015 if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt))))) {
1018 USI opval = FLD (i_offset);
1019 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1020 written |= (1 << 3);
1021 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1026 abuf->written = written;
1027 SEM_BRANCH_FINI (vpc);
1028 #undef FLD
1030 NEXT (vpc);
1032 CASE (sem, INSN_BBV) : /* bbv $rs,$rt,$offset */
1034 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1035 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1036 #define FLD(f) abuf->fields.sfmt_bbi.f
1037 int UNUSED written = 0;
1038 IADDR UNUSED pc = abuf->addr;
1039 SEM_BRANCH_INIT
1040 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1042 if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31)))) {
1045 USI opval = FLD (i_offset);
1046 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1047 written |= (1 << 3);
1048 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1053 abuf->written = written;
1054 SEM_BRANCH_FINI (vpc);
1055 #undef FLD
1057 NEXT (vpc);
1059 CASE (sem, INSN_BBVN) : /* bbvn $rs,$rt,$offset */
1061 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1062 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1063 #define FLD(f) abuf->fields.sfmt_bbi.f
1064 int UNUSED written = 0;
1065 IADDR UNUSED pc = abuf->addr;
1066 SEM_BRANCH_INIT
1067 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1069 if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31))))) {
1072 USI opval = FLD (i_offset);
1073 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1074 written |= (1 << 3);
1075 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1080 abuf->written = written;
1081 SEM_BRANCH_FINI (vpc);
1082 #undef FLD
1084 NEXT (vpc);
1086 CASE (sem, INSN_BEQ) : /* beq $rs,$rt,$offset */
1088 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1089 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1090 #define FLD(f) abuf->fields.sfmt_bbi.f
1091 int UNUSED written = 0;
1092 IADDR UNUSED pc = abuf->addr;
1093 SEM_BRANCH_INIT
1094 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1096 if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
1099 USI opval = FLD (i_offset);
1100 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1101 written |= (1 << 3);
1102 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1107 abuf->written = written;
1108 SEM_BRANCH_FINI (vpc);
1109 #undef FLD
1111 NEXT (vpc);
1113 CASE (sem, INSN_BEQL) : /* beql $rs,$rt,$offset */
1115 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1116 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1117 #define FLD(f) abuf->fields.sfmt_bbi.f
1118 int UNUSED written = 0;
1119 IADDR UNUSED pc = abuf->addr;
1120 SEM_BRANCH_INIT
1121 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1123 if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
1126 USI opval = FLD (i_offset);
1127 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1128 written |= (1 << 3);
1129 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1132 } else {
1133 if (1)
1134 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1137 abuf->written = written;
1138 SEM_BRANCH_FINI (vpc);
1139 #undef FLD
1141 NEXT (vpc);
1143 CASE (sem, INSN_BGEZ) : /* bgez $rs,$offset */
1145 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1146 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1147 #define FLD(f) abuf->fields.sfmt_bbi.f
1148 int UNUSED written = 0;
1149 IADDR UNUSED pc = abuf->addr;
1150 SEM_BRANCH_INIT
1151 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1153 if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
1156 USI opval = FLD (i_offset);
1157 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1158 written |= (1 << 2);
1159 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1164 abuf->written = written;
1165 SEM_BRANCH_FINI (vpc);
1166 #undef FLD
1168 NEXT (vpc);
1170 CASE (sem, INSN_BGEZAL) : /* bgezal $rs,$offset */
1172 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1173 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1174 #define FLD(f) abuf->fields.sfmt_bbi.f
1175 int UNUSED written = 0;
1176 IADDR UNUSED pc = abuf->addr;
1177 SEM_BRANCH_INIT
1178 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1180 if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
1183 SI opval = ADDSI (pc, 8);
1184 SET_H_GR (((UINT) 31), opval);
1185 written |= (1 << 3);
1186 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1190 USI opval = FLD (i_offset);
1191 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1192 written |= (1 << 4);
1193 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1199 abuf->written = written;
1200 SEM_BRANCH_FINI (vpc);
1201 #undef FLD
1203 NEXT (vpc);
1205 CASE (sem, INSN_BGEZALL) : /* bgezall $rs,$offset */
1207 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1208 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1209 #define FLD(f) abuf->fields.sfmt_bbi.f
1210 int UNUSED written = 0;
1211 IADDR UNUSED pc = abuf->addr;
1212 SEM_BRANCH_INIT
1213 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1215 if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
1218 SI opval = ADDSI (pc, 8);
1219 SET_H_GR (((UINT) 31), opval);
1220 written |= (1 << 3);
1221 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1225 USI opval = FLD (i_offset);
1226 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1227 written |= (1 << 4);
1228 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1232 } else {
1233 if (1)
1234 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1237 abuf->written = written;
1238 SEM_BRANCH_FINI (vpc);
1239 #undef FLD
1241 NEXT (vpc);
1243 CASE (sem, INSN_BGEZL) : /* bgezl $rs,$offset */
1245 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1246 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1247 #define FLD(f) abuf->fields.sfmt_bbi.f
1248 int UNUSED written = 0;
1249 IADDR UNUSED pc = abuf->addr;
1250 SEM_BRANCH_INIT
1251 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1253 if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
1256 USI opval = FLD (i_offset);
1257 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1258 written |= (1 << 2);
1259 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1262 } else {
1263 if (1)
1264 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1267 abuf->written = written;
1268 SEM_BRANCH_FINI (vpc);
1269 #undef FLD
1271 NEXT (vpc);
1273 CASE (sem, INSN_BLTZ) : /* bltz $rs,$offset */
1275 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1276 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1277 #define FLD(f) abuf->fields.sfmt_bbi.f
1278 int UNUSED written = 0;
1279 IADDR UNUSED pc = abuf->addr;
1280 SEM_BRANCH_INIT
1281 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1283 if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
1286 USI opval = FLD (i_offset);
1287 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1288 written |= (1 << 2);
1289 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1294 abuf->written = written;
1295 SEM_BRANCH_FINI (vpc);
1296 #undef FLD
1298 NEXT (vpc);
1300 CASE (sem, INSN_BLTZL) : /* bltzl $rs,$offset */
1302 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1303 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1304 #define FLD(f) abuf->fields.sfmt_bbi.f
1305 int UNUSED written = 0;
1306 IADDR UNUSED pc = abuf->addr;
1307 SEM_BRANCH_INIT
1308 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1310 if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
1313 USI opval = FLD (i_offset);
1314 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1315 written |= (1 << 2);
1316 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1319 } else {
1320 if (1)
1321 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1324 abuf->written = written;
1325 SEM_BRANCH_FINI (vpc);
1326 #undef FLD
1328 NEXT (vpc);
1330 CASE (sem, INSN_BLTZAL) : /* bltzal $rs,$offset */
1332 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1333 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1334 #define FLD(f) abuf->fields.sfmt_bbi.f
1335 int UNUSED written = 0;
1336 IADDR UNUSED pc = abuf->addr;
1337 SEM_BRANCH_INIT
1338 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1340 if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
1343 SI opval = ADDSI (pc, 8);
1344 SET_H_GR (((UINT) 31), opval);
1345 written |= (1 << 3);
1346 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1350 USI opval = FLD (i_offset);
1351 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1352 written |= (1 << 4);
1353 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1359 abuf->written = written;
1360 SEM_BRANCH_FINI (vpc);
1361 #undef FLD
1363 NEXT (vpc);
1365 CASE (sem, INSN_BLTZALL) : /* bltzall $rs,$offset */
1367 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1368 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1369 #define FLD(f) abuf->fields.sfmt_bbi.f
1370 int UNUSED written = 0;
1371 IADDR UNUSED pc = abuf->addr;
1372 SEM_BRANCH_INIT
1373 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1375 if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
1378 SI opval = ADDSI (pc, 8);
1379 SET_H_GR (((UINT) 31), opval);
1380 written |= (1 << 3);
1381 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1385 USI opval = FLD (i_offset);
1386 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1387 written |= (1 << 4);
1388 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1392 } else {
1393 if (1)
1394 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1397 abuf->written = written;
1398 SEM_BRANCH_FINI (vpc);
1399 #undef FLD
1401 NEXT (vpc);
1403 CASE (sem, INSN_BMB0) : /* bmb0 $rs,$rt,$offset */
1405 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1406 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1407 #define FLD(f) abuf->fields.sfmt_bbi.f
1408 int UNUSED written = 0;
1409 IADDR UNUSED pc = abuf->addr;
1410 SEM_BRANCH_INIT
1411 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1413 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) {
1416 USI opval = FLD (i_offset);
1417 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1418 written |= (1 << 3);
1419 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1424 abuf->written = written;
1425 SEM_BRANCH_FINI (vpc);
1426 #undef FLD
1428 NEXT (vpc);
1430 CASE (sem, INSN_BMB1) : /* bmb1 $rs,$rt,$offset */
1432 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1433 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1434 #define FLD(f) abuf->fields.sfmt_bbi.f
1435 int UNUSED written = 0;
1436 IADDR UNUSED pc = abuf->addr;
1437 SEM_BRANCH_INIT
1438 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1440 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) {
1443 USI opval = FLD (i_offset);
1444 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1445 written |= (1 << 3);
1446 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1451 abuf->written = written;
1452 SEM_BRANCH_FINI (vpc);
1453 #undef FLD
1455 NEXT (vpc);
1457 CASE (sem, INSN_BMB2) : /* bmb2 $rs,$rt,$offset */
1459 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1460 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1461 #define FLD(f) abuf->fields.sfmt_bbi.f
1462 int UNUSED written = 0;
1463 IADDR UNUSED pc = abuf->addr;
1464 SEM_BRANCH_INIT
1465 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1467 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) {
1470 USI opval = FLD (i_offset);
1471 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1472 written |= (1 << 3);
1473 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1478 abuf->written = written;
1479 SEM_BRANCH_FINI (vpc);
1480 #undef FLD
1482 NEXT (vpc);
1484 CASE (sem, INSN_BMB3) : /* bmb3 $rs,$rt,$offset */
1486 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1487 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1488 #define FLD(f) abuf->fields.sfmt_bbi.f
1489 int UNUSED written = 0;
1490 IADDR UNUSED pc = abuf->addr;
1491 SEM_BRANCH_INIT
1492 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1494 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) {
1497 USI opval = FLD (i_offset);
1498 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1499 written |= (1 << 3);
1500 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1505 abuf->written = written;
1506 SEM_BRANCH_FINI (vpc);
1507 #undef FLD
1509 NEXT (vpc);
1511 CASE (sem, INSN_BNE) : /* bne $rs,$rt,$offset */
1513 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1514 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1515 #define FLD(f) abuf->fields.sfmt_bbi.f
1516 int UNUSED written = 0;
1517 IADDR UNUSED pc = abuf->addr;
1518 SEM_BRANCH_INIT
1519 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1521 if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
1524 USI opval = FLD (i_offset);
1525 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1526 written |= (1 << 3);
1527 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1532 abuf->written = written;
1533 SEM_BRANCH_FINI (vpc);
1534 #undef FLD
1536 NEXT (vpc);
1538 CASE (sem, INSN_BNEL) : /* bnel $rs,$rt,$offset */
1540 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1541 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1542 #define FLD(f) abuf->fields.sfmt_bbi.f
1543 int UNUSED written = 0;
1544 IADDR UNUSED pc = abuf->addr;
1545 SEM_BRANCH_INIT
1546 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1548 if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
1551 USI opval = FLD (i_offset);
1552 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1553 written |= (1 << 3);
1554 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1557 } else {
1558 if (1)
1559 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1562 abuf->written = written;
1563 SEM_BRANCH_FINI (vpc);
1564 #undef FLD
1566 NEXT (vpc);
1568 CASE (sem, INSN_JALR) : /* jalr $rd,$rs */
1570 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1571 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1572 #define FLD(f) abuf->fields.sfmt_mrgb.f
1573 int UNUSED written = 0;
1574 IADDR UNUSED pc = abuf->addr;
1575 SEM_BRANCH_INIT
1576 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1581 SI opval = ADDSI (pc, 8);
1582 SET_H_GR (FLD (f_rd), opval);
1583 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1586 USI opval = GET_H_GR (FLD (f_rs));
1587 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1588 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1593 SEM_BRANCH_FINI (vpc);
1594 #undef FLD
1596 NEXT (vpc);
1598 CASE (sem, INSN_JR) : /* jr $rs */
1600 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1601 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1602 #define FLD(f) abuf->fields.sfmt_bbi.f
1603 int UNUSED written = 0;
1604 IADDR UNUSED pc = abuf->addr;
1605 SEM_BRANCH_INIT
1606 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1610 USI opval = GET_H_GR (FLD (f_rs));
1611 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1612 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1616 SEM_BRANCH_FINI (vpc);
1617 #undef FLD
1619 NEXT (vpc);
1621 CASE (sem, INSN_LB) : /* lb $rt,$lo16($base) */
1623 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1624 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1625 #define FLD(f) abuf->fields.sfmt_addi.f
1626 int UNUSED written = 0;
1627 IADDR UNUSED pc = abuf->addr;
1628 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1631 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
1632 SET_H_GR (FLD (f_rt), opval);
1633 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1636 #undef FLD
1638 NEXT (vpc);
1640 CASE (sem, INSN_LBU) : /* lbu $rt,$lo16($base) */
1642 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1643 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1644 #define FLD(f) abuf->fields.sfmt_addi.f
1645 int UNUSED written = 0;
1646 IADDR UNUSED pc = abuf->addr;
1647 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1650 SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
1651 SET_H_GR (FLD (f_rt), opval);
1652 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1655 #undef FLD
1657 NEXT (vpc);
1659 CASE (sem, INSN_LH) : /* lh $rt,$lo16($base) */
1661 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1662 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1663 #define FLD(f) abuf->fields.sfmt_addi.f
1664 int UNUSED written = 0;
1665 IADDR UNUSED pc = abuf->addr;
1666 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1669 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
1670 SET_H_GR (FLD (f_rt), opval);
1671 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1674 #undef FLD
1676 NEXT (vpc);
1678 CASE (sem, INSN_LHU) : /* lhu $rt,$lo16($base) */
1680 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1681 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1682 #define FLD(f) abuf->fields.sfmt_addi.f
1683 int UNUSED written = 0;
1684 IADDR UNUSED pc = abuf->addr;
1685 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1688 SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
1689 SET_H_GR (FLD (f_rt), opval);
1690 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1693 #undef FLD
1695 NEXT (vpc);
1697 CASE (sem, INSN_LUI) : /* lui $rt,$hi16 */
1699 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1700 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1701 #define FLD(f) abuf->fields.sfmt_addi.f
1702 int UNUSED written = 0;
1703 IADDR UNUSED pc = abuf->addr;
1704 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1707 SI opval = SLLSI (FLD (f_imm), 16);
1708 SET_H_GR (FLD (f_rt), opval);
1709 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1712 #undef FLD
1714 NEXT (vpc);
1716 CASE (sem, INSN_LW) : /* lw $rt,$lo16($base) */
1718 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1719 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1720 #define FLD(f) abuf->fields.sfmt_addi.f
1721 int UNUSED written = 0;
1722 IADDR UNUSED pc = abuf->addr;
1723 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1726 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))));
1727 SET_H_GR (FLD (f_rt), opval);
1728 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1731 #undef FLD
1733 NEXT (vpc);
1735 CASE (sem, INSN_SB) : /* sb $rt,$lo16($base) */
1737 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1738 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1739 #define FLD(f) abuf->fields.sfmt_addi.f
1740 int UNUSED written = 0;
1741 IADDR UNUSED pc = abuf->addr;
1742 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1745 QI opval = ANDQI (GET_H_GR (FLD (f_rt)), 255);
1746 SETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
1747 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1750 #undef FLD
1752 NEXT (vpc);
1754 CASE (sem, INSN_SH) : /* sh $rt,$lo16($base) */
1756 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1757 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1758 #define FLD(f) abuf->fields.sfmt_addi.f
1759 int UNUSED written = 0;
1760 IADDR UNUSED pc = abuf->addr;
1761 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1764 HI opval = ANDHI (GET_H_GR (FLD (f_rt)), 65535);
1765 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
1766 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1769 #undef FLD
1771 NEXT (vpc);
1773 CASE (sem, INSN_SW) : /* sw $rt,$lo16($base) */
1775 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1776 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1777 #define FLD(f) abuf->fields.sfmt_addi.f
1778 int UNUSED written = 0;
1779 IADDR UNUSED pc = abuf->addr;
1780 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1783 SI opval = GET_H_GR (FLD (f_rt));
1784 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
1785 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1788 #undef FLD
1790 NEXT (vpc);
1792 CASE (sem, INSN_BREAK) : /* break */
1794 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1795 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1796 #define FLD(f) abuf->fields.sfmt_empty.f
1797 int UNUSED written = 0;
1798 IADDR UNUSED pc = abuf->addr;
1799 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1801 do_break (current_cpu, pc);
1803 #undef FLD
1805 NEXT (vpc);
1807 CASE (sem, INSN_SYSCALL) : /* syscall */
1809 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1810 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1811 #define FLD(f) abuf->fields.sfmt_empty.f
1812 int UNUSED written = 0;
1813 IADDR UNUSED pc = abuf->addr;
1814 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1816 do_syscall (current_cpu, pc);
1818 #undef FLD
1820 NEXT (vpc);
1822 CASE (sem, INSN_ANDOUI) : /* andoui $rt,$rs,$hi16 */
1824 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1825 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1826 #define FLD(f) abuf->fields.sfmt_addi.f
1827 int UNUSED written = 0;
1828 IADDR UNUSED pc = abuf->addr;
1829 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1832 SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (SLLSI (FLD (f_imm), 16), 65535));
1833 SET_H_GR (FLD (f_rt), opval);
1834 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1837 #undef FLD
1839 NEXT (vpc);
1841 CASE (sem, INSN_ORUI) : /* orui $rt,$rs,$hi16 */
1843 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1844 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1845 #define FLD(f) abuf->fields.sfmt_addi.f
1846 int UNUSED written = 0;
1847 IADDR UNUSED pc = abuf->addr;
1848 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1851 SI opval = ORSI (GET_H_GR (FLD (f_rs)), SLLSI (FLD (f_imm), 16));
1852 SET_H_GR (FLD (f_rt), opval);
1853 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1856 #undef FLD
1858 NEXT (vpc);
1860 CASE (sem, INSN_BGTZ) : /* bgtz $rs,$offset */
1862 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1863 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1864 #define FLD(f) abuf->fields.sfmt_bbi.f
1865 int UNUSED written = 0;
1866 IADDR UNUSED pc = abuf->addr;
1867 SEM_BRANCH_INIT
1868 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1870 if (GTSI (GET_H_GR (FLD (f_rs)), 0)) {
1873 USI opval = FLD (i_offset);
1874 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1875 written |= (1 << 2);
1876 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1881 abuf->written = written;
1882 SEM_BRANCH_FINI (vpc);
1883 #undef FLD
1885 NEXT (vpc);
1887 CASE (sem, INSN_BGTZL) : /* bgtzl $rs,$offset */
1889 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1890 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1891 #define FLD(f) abuf->fields.sfmt_bbi.f
1892 int UNUSED written = 0;
1893 IADDR UNUSED pc = abuf->addr;
1894 SEM_BRANCH_INIT
1895 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1897 if (GTSI (GET_H_GR (FLD (f_rs)), 0)) {
1900 USI opval = FLD (i_offset);
1901 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1902 written |= (1 << 2);
1903 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1906 } else {
1907 if (1)
1908 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1911 abuf->written = written;
1912 SEM_BRANCH_FINI (vpc);
1913 #undef FLD
1915 NEXT (vpc);
1917 CASE (sem, INSN_BLEZ) : /* blez $rs,$offset */
1919 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1920 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1921 #define FLD(f) abuf->fields.sfmt_bbi.f
1922 int UNUSED written = 0;
1923 IADDR UNUSED pc = abuf->addr;
1924 SEM_BRANCH_INIT
1925 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1927 if (LESI (GET_H_GR (FLD (f_rs)), 0)) {
1930 USI opval = FLD (i_offset);
1931 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1932 written |= (1 << 2);
1933 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1938 abuf->written = written;
1939 SEM_BRANCH_FINI (vpc);
1940 #undef FLD
1942 NEXT (vpc);
1944 CASE (sem, INSN_BLEZL) : /* blezl $rs,$offset */
1946 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1947 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1948 #define FLD(f) abuf->fields.sfmt_bbi.f
1949 int UNUSED written = 0;
1950 IADDR UNUSED pc = abuf->addr;
1951 SEM_BRANCH_INIT
1952 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1954 if (LESI (GET_H_GR (FLD (f_rs)), 0)) {
1957 USI opval = FLD (i_offset);
1958 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1959 written |= (1 << 2);
1960 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1963 } else {
1964 if (1)
1965 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1968 abuf->written = written;
1969 SEM_BRANCH_FINI (vpc);
1970 #undef FLD
1972 NEXT (vpc);
1974 CASE (sem, INSN_MRGB) : /* mrgb $rd,$rs,$rt,$mask */
1976 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1977 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1978 #define FLD(f) abuf->fields.sfmt_mrgb.f
1979 int UNUSED written = 0;
1980 IADDR UNUSED pc = abuf->addr;
1981 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1984 SI tmp_temp;
1985 if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 0)))) {
1986 tmp_temp = ANDSI (GET_H_GR (FLD (f_rs)), 255);
1987 } else {
1988 tmp_temp = ANDSI (GET_H_GR (FLD (f_rt)), 255);
1990 if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 1)))) {
1991 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 65280));
1992 } else {
1993 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 65280));
1995 if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 2)))) {
1996 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 16711680));
1997 } else {
1998 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 16711680));
2000 if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 3)))) {
2001 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000));
2002 } else {
2003 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000));
2006 SI opval = tmp_temp;
2007 SET_H_GR (FLD (f_rd), opval);
2008 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2012 #undef FLD
2014 NEXT (vpc);
2016 CASE (sem, INSN_BCTXT) : /* bctxt $rs,$offset */
2018 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2019 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2020 #define FLD(f) abuf->fields.sfmt_empty.f
2021 int UNUSED written = 0;
2022 IADDR UNUSED pc = abuf->addr;
2023 SEM_BRANCH_INIT
2024 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2026 ((void) 0); /*nop*/
2028 SEM_BRANCH_FINI (vpc);
2029 #undef FLD
2031 NEXT (vpc);
2033 CASE (sem, INSN_BC0F) : /* bc0f $offset */
2035 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2036 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2037 #define FLD(f) abuf->fields.sfmt_empty.f
2038 int UNUSED written = 0;
2039 IADDR UNUSED pc = abuf->addr;
2040 SEM_BRANCH_INIT
2041 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2043 ((void) 0); /*nop*/
2045 SEM_BRANCH_FINI (vpc);
2046 #undef FLD
2048 NEXT (vpc);
2050 CASE (sem, INSN_BC0FL) : /* bc0fl $offset */
2052 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2053 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2054 #define FLD(f) abuf->fields.sfmt_empty.f
2055 int UNUSED written = 0;
2056 IADDR UNUSED pc = abuf->addr;
2057 SEM_BRANCH_INIT
2058 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2060 ((void) 0); /*nop*/
2062 SEM_BRANCH_FINI (vpc);
2063 #undef FLD
2065 NEXT (vpc);
2067 CASE (sem, INSN_BC3F) : /* bc3f $offset */
2069 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2070 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2071 #define FLD(f) abuf->fields.sfmt_empty.f
2072 int UNUSED written = 0;
2073 IADDR UNUSED pc = abuf->addr;
2074 SEM_BRANCH_INIT
2075 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2077 ((void) 0); /*nop*/
2079 SEM_BRANCH_FINI (vpc);
2080 #undef FLD
2082 NEXT (vpc);
2084 CASE (sem, INSN_BC3FL) : /* bc3fl $offset */
2086 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2087 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2088 #define FLD(f) abuf->fields.sfmt_empty.f
2089 int UNUSED written = 0;
2090 IADDR UNUSED pc = abuf->addr;
2091 SEM_BRANCH_INIT
2092 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2094 ((void) 0); /*nop*/
2096 SEM_BRANCH_FINI (vpc);
2097 #undef FLD
2099 NEXT (vpc);
2101 CASE (sem, INSN_BC0T) : /* bc0t $offset */
2103 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2104 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2105 #define FLD(f) abuf->fields.sfmt_empty.f
2106 int UNUSED written = 0;
2107 IADDR UNUSED pc = abuf->addr;
2108 SEM_BRANCH_INIT
2109 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2111 ((void) 0); /*nop*/
2113 SEM_BRANCH_FINI (vpc);
2114 #undef FLD
2116 NEXT (vpc);
2118 CASE (sem, INSN_BC0TL) : /* bc0tl $offset */
2120 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2121 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2122 #define FLD(f) abuf->fields.sfmt_empty.f
2123 int UNUSED written = 0;
2124 IADDR UNUSED pc = abuf->addr;
2125 SEM_BRANCH_INIT
2126 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2128 ((void) 0); /*nop*/
2130 SEM_BRANCH_FINI (vpc);
2131 #undef FLD
2133 NEXT (vpc);
2135 CASE (sem, INSN_BC3T) : /* bc3t $offset */
2137 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2138 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2139 #define FLD(f) abuf->fields.sfmt_empty.f
2140 int UNUSED written = 0;
2141 IADDR UNUSED pc = abuf->addr;
2142 SEM_BRANCH_INIT
2143 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2145 ((void) 0); /*nop*/
2147 SEM_BRANCH_FINI (vpc);
2148 #undef FLD
2150 NEXT (vpc);
2152 CASE (sem, INSN_BC3TL) : /* bc3tl $offset */
2154 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2155 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2156 #define FLD(f) abuf->fields.sfmt_empty.f
2157 int UNUSED written = 0;
2158 IADDR UNUSED pc = abuf->addr;
2159 SEM_BRANCH_INIT
2160 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2162 ((void) 0); /*nop*/
2164 SEM_BRANCH_FINI (vpc);
2165 #undef FLD
2167 NEXT (vpc);
2169 CASE (sem, INSN_CFC0) : /* cfc0 $rt,$rd */
2171 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2172 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2173 #define FLD(f) abuf->fields.sfmt_empty.f
2174 int UNUSED written = 0;
2175 IADDR UNUSED pc = abuf->addr;
2176 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2178 ((void) 0); /*nop*/
2180 #undef FLD
2182 NEXT (vpc);
2184 CASE (sem, INSN_CFC1) : /* cfc1 $rt,$rd */
2186 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2187 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2188 #define FLD(f) abuf->fields.sfmt_empty.f
2189 int UNUSED written = 0;
2190 IADDR UNUSED pc = abuf->addr;
2191 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2193 ((void) 0); /*nop*/
2195 #undef FLD
2197 NEXT (vpc);
2199 CASE (sem, INSN_CFC2) : /* cfc2 $rt,$rd */
2201 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2202 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2203 #define FLD(f) abuf->fields.sfmt_empty.f
2204 int UNUSED written = 0;
2205 IADDR UNUSED pc = abuf->addr;
2206 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2208 ((void) 0); /*nop*/
2210 #undef FLD
2212 NEXT (vpc);
2214 CASE (sem, INSN_CFC3) : /* cfc3 $rt,$rd */
2216 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2217 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2218 #define FLD(f) abuf->fields.sfmt_empty.f
2219 int UNUSED written = 0;
2220 IADDR UNUSED pc = abuf->addr;
2221 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2223 ((void) 0); /*nop*/
2225 #undef FLD
2227 NEXT (vpc);
2229 CASE (sem, INSN_CHKHDR) : /* chkhdr $rd,$rt */
2231 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2232 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2233 #define FLD(f) abuf->fields.sfmt_empty.f
2234 int UNUSED written = 0;
2235 IADDR UNUSED pc = abuf->addr;
2236 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2238 ((void) 0); /*nop*/
2240 #undef FLD
2242 NEXT (vpc);
2244 CASE (sem, INSN_CTC0) : /* ctc0 $rt,$rd */
2246 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2247 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2248 #define FLD(f) abuf->fields.sfmt_empty.f
2249 int UNUSED written = 0;
2250 IADDR UNUSED pc = abuf->addr;
2251 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2253 ((void) 0); /*nop*/
2255 #undef FLD
2257 NEXT (vpc);
2259 CASE (sem, INSN_CTC1) : /* ctc1 $rt,$rd */
2261 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2262 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2263 #define FLD(f) abuf->fields.sfmt_empty.f
2264 int UNUSED written = 0;
2265 IADDR UNUSED pc = abuf->addr;
2266 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2268 ((void) 0); /*nop*/
2270 #undef FLD
2272 NEXT (vpc);
2274 CASE (sem, INSN_CTC2) : /* ctc2 $rt,$rd */
2276 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2277 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2278 #define FLD(f) abuf->fields.sfmt_empty.f
2279 int UNUSED written = 0;
2280 IADDR UNUSED pc = abuf->addr;
2281 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2283 ((void) 0); /*nop*/
2285 #undef FLD
2287 NEXT (vpc);
2289 CASE (sem, INSN_CTC3) : /* ctc3 $rt,$rd */
2291 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2292 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2293 #define FLD(f) abuf->fields.sfmt_empty.f
2294 int UNUSED written = 0;
2295 IADDR UNUSED pc = abuf->addr;
2296 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2298 ((void) 0); /*nop*/
2300 #undef FLD
2302 NEXT (vpc);
2304 CASE (sem, INSN_JCR) : /* jcr $rs */
2306 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2307 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2308 #define FLD(f) abuf->fields.sfmt_empty.f
2309 int UNUSED written = 0;
2310 IADDR UNUSED pc = abuf->addr;
2311 SEM_BRANCH_INIT
2312 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2314 ((void) 0); /*nop*/
2316 SEM_BRANCH_FINI (vpc);
2317 #undef FLD
2319 NEXT (vpc);
2321 CASE (sem, INSN_LUC32) : /* luc32 $rt,$rd */
2323 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2324 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2325 #define FLD(f) abuf->fields.sfmt_empty.f
2326 int UNUSED written = 0;
2327 IADDR UNUSED pc = abuf->addr;
2328 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2330 ((void) 0); /*nop*/
2332 #undef FLD
2334 NEXT (vpc);
2336 CASE (sem, INSN_LUC32L) : /* luc32l $rt,$rd */
2338 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2339 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2340 #define FLD(f) abuf->fields.sfmt_empty.f
2341 int UNUSED written = 0;
2342 IADDR UNUSED pc = abuf->addr;
2343 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2345 ((void) 0); /*nop*/
2347 #undef FLD
2349 NEXT (vpc);
2351 CASE (sem, INSN_LUC64) : /* luc64 $rt,$rd */
2353 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2354 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2355 #define FLD(f) abuf->fields.sfmt_empty.f
2356 int UNUSED written = 0;
2357 IADDR UNUSED pc = abuf->addr;
2358 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2360 ((void) 0); /*nop*/
2362 #undef FLD
2364 NEXT (vpc);
2366 CASE (sem, INSN_LUC64L) : /* luc64l $rt,$rd */
2368 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2369 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2370 #define FLD(f) abuf->fields.sfmt_empty.f
2371 int UNUSED written = 0;
2372 IADDR UNUSED pc = abuf->addr;
2373 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2375 ((void) 0); /*nop*/
2377 #undef FLD
2379 NEXT (vpc);
2381 CASE (sem, INSN_LUK) : /* luk $rt,$rd */
2383 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2384 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2385 #define FLD(f) abuf->fields.sfmt_empty.f
2386 int UNUSED written = 0;
2387 IADDR UNUSED pc = abuf->addr;
2388 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2390 ((void) 0); /*nop*/
2392 #undef FLD
2394 NEXT (vpc);
2396 CASE (sem, INSN_LULCK) : /* lulck $rt */
2398 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2399 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2400 #define FLD(f) abuf->fields.sfmt_empty.f
2401 int UNUSED written = 0;
2402 IADDR UNUSED pc = abuf->addr;
2403 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2405 ((void) 0); /*nop*/
2407 #undef FLD
2409 NEXT (vpc);
2411 CASE (sem, INSN_LUM32) : /* lum32 $rt,$rd */
2413 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2414 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2415 #define FLD(f) abuf->fields.sfmt_empty.f
2416 int UNUSED written = 0;
2417 IADDR UNUSED pc = abuf->addr;
2418 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2420 ((void) 0); /*nop*/
2422 #undef FLD
2424 NEXT (vpc);
2426 CASE (sem, INSN_LUM32L) : /* lum32l $rt,$rd */
2428 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2429 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2430 #define FLD(f) abuf->fields.sfmt_empty.f
2431 int UNUSED written = 0;
2432 IADDR UNUSED pc = abuf->addr;
2433 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2435 ((void) 0); /*nop*/
2437 #undef FLD
2439 NEXT (vpc);
2441 CASE (sem, INSN_LUM64) : /* lum64 $rt,$rd */
2443 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2444 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2445 #define FLD(f) abuf->fields.sfmt_empty.f
2446 int UNUSED written = 0;
2447 IADDR UNUSED pc = abuf->addr;
2448 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2450 ((void) 0); /*nop*/
2452 #undef FLD
2454 NEXT (vpc);
2456 CASE (sem, INSN_LUM64L) : /* lum64l $rt,$rd */
2458 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2459 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2460 #define FLD(f) abuf->fields.sfmt_empty.f
2461 int UNUSED written = 0;
2462 IADDR UNUSED pc = abuf->addr;
2463 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2465 ((void) 0); /*nop*/
2467 #undef FLD
2469 NEXT (vpc);
2471 CASE (sem, INSN_LUR) : /* lur $rt,$rd */
2473 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2474 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2475 #define FLD(f) abuf->fields.sfmt_empty.f
2476 int UNUSED written = 0;
2477 IADDR UNUSED pc = abuf->addr;
2478 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2480 ((void) 0); /*nop*/
2482 #undef FLD
2484 NEXT (vpc);
2486 CASE (sem, INSN_LURL) : /* lurl $rt,$rd */
2488 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2489 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2490 #define FLD(f) abuf->fields.sfmt_empty.f
2491 int UNUSED written = 0;
2492 IADDR UNUSED pc = abuf->addr;
2493 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2495 ((void) 0); /*nop*/
2497 #undef FLD
2499 NEXT (vpc);
2501 CASE (sem, INSN_LUULCK) : /* luulck $rt */
2503 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2504 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2505 #define FLD(f) abuf->fields.sfmt_empty.f
2506 int UNUSED written = 0;
2507 IADDR UNUSED pc = abuf->addr;
2508 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2510 ((void) 0); /*nop*/
2512 #undef FLD
2514 NEXT (vpc);
2516 CASE (sem, INSN_MFC0) : /* mfc0 $rt,$rd */
2518 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2519 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2520 #define FLD(f) abuf->fields.sfmt_empty.f
2521 int UNUSED written = 0;
2522 IADDR UNUSED pc = abuf->addr;
2523 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2525 ((void) 0); /*nop*/
2527 #undef FLD
2529 NEXT (vpc);
2531 CASE (sem, INSN_MFC1) : /* mfc1 $rt,$rd */
2533 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2534 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2535 #define FLD(f) abuf->fields.sfmt_empty.f
2536 int UNUSED written = 0;
2537 IADDR UNUSED pc = abuf->addr;
2538 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2540 ((void) 0); /*nop*/
2542 #undef FLD
2544 NEXT (vpc);
2546 CASE (sem, INSN_MFC2) : /* mfc2 $rt,$rd */
2548 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2549 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2550 #define FLD(f) abuf->fields.sfmt_empty.f
2551 int UNUSED written = 0;
2552 IADDR UNUSED pc = abuf->addr;
2553 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2555 ((void) 0); /*nop*/
2557 #undef FLD
2559 NEXT (vpc);
2561 CASE (sem, INSN_MFC3) : /* mfc3 $rt,$rd */
2563 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2564 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2565 #define FLD(f) abuf->fields.sfmt_empty.f
2566 int UNUSED written = 0;
2567 IADDR UNUSED pc = abuf->addr;
2568 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2570 ((void) 0); /*nop*/
2572 #undef FLD
2574 NEXT (vpc);
2576 CASE (sem, INSN_MTC0) : /* mtc0 $rt,$rd */
2578 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2579 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2580 #define FLD(f) abuf->fields.sfmt_empty.f
2581 int UNUSED written = 0;
2582 IADDR UNUSED pc = abuf->addr;
2583 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2585 ((void) 0); /*nop*/
2587 #undef FLD
2589 NEXT (vpc);
2591 CASE (sem, INSN_MTC1) : /* mtc1 $rt,$rd */
2593 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2594 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2595 #define FLD(f) abuf->fields.sfmt_empty.f
2596 int UNUSED written = 0;
2597 IADDR UNUSED pc = abuf->addr;
2598 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2600 ((void) 0); /*nop*/
2602 #undef FLD
2604 NEXT (vpc);
2606 CASE (sem, INSN_MTC2) : /* mtc2 $rt,$rd */
2608 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2609 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2610 #define FLD(f) abuf->fields.sfmt_empty.f
2611 int UNUSED written = 0;
2612 IADDR UNUSED pc = abuf->addr;
2613 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2615 ((void) 0); /*nop*/
2617 #undef FLD
2619 NEXT (vpc);
2621 CASE (sem, INSN_MTC3) : /* mtc3 $rt,$rd */
2623 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2624 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2625 #define FLD(f) abuf->fields.sfmt_empty.f
2626 int UNUSED written = 0;
2627 IADDR UNUSED pc = abuf->addr;
2628 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2630 ((void) 0); /*nop*/
2632 #undef FLD
2634 NEXT (vpc);
2636 CASE (sem, INSN_PKRL) : /* pkrl $rd,$rt */
2638 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2639 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2640 #define FLD(f) abuf->fields.sfmt_empty.f
2641 int UNUSED written = 0;
2642 IADDR UNUSED pc = abuf->addr;
2643 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2645 ((void) 0); /*nop*/
2647 #undef FLD
2649 NEXT (vpc);
2651 CASE (sem, INSN_PKRLR1) : /* pkrlr1 $rt,$_index,$count */
2653 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2654 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2655 #define FLD(f) abuf->fields.sfmt_empty.f
2656 int UNUSED written = 0;
2657 IADDR UNUSED pc = abuf->addr;
2658 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2660 ((void) 0); /*nop*/
2662 #undef FLD
2664 NEXT (vpc);
2666 CASE (sem, INSN_PKRLR30) : /* pkrlr30 $rt,$_index,$count */
2668 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2669 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2670 #define FLD(f) abuf->fields.sfmt_empty.f
2671 int UNUSED written = 0;
2672 IADDR UNUSED pc = abuf->addr;
2673 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2675 ((void) 0); /*nop*/
2677 #undef FLD
2679 NEXT (vpc);
2681 CASE (sem, INSN_RB) : /* rb $rd,$rt */
2683 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2684 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2685 #define FLD(f) abuf->fields.sfmt_empty.f
2686 int UNUSED written = 0;
2687 IADDR UNUSED pc = abuf->addr;
2688 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2690 ((void) 0); /*nop*/
2692 #undef FLD
2694 NEXT (vpc);
2696 CASE (sem, INSN_RBR1) : /* rbr1 $rt,$_index,$count */
2698 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2699 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2700 #define FLD(f) abuf->fields.sfmt_empty.f
2701 int UNUSED written = 0;
2702 IADDR UNUSED pc = abuf->addr;
2703 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2705 ((void) 0); /*nop*/
2707 #undef FLD
2709 NEXT (vpc);
2711 CASE (sem, INSN_RBR30) : /* rbr30 $rt,$_index,$count */
2713 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2714 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2715 #define FLD(f) abuf->fields.sfmt_empty.f
2716 int UNUSED written = 0;
2717 IADDR UNUSED pc = abuf->addr;
2718 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2720 ((void) 0); /*nop*/
2722 #undef FLD
2724 NEXT (vpc);
2726 CASE (sem, INSN_RFE) : /* rfe */
2728 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2729 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2730 #define FLD(f) abuf->fields.sfmt_empty.f
2731 int UNUSED written = 0;
2732 IADDR UNUSED pc = abuf->addr;
2733 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2735 ((void) 0); /*nop*/
2737 #undef FLD
2739 NEXT (vpc);
2741 CASE (sem, INSN_RX) : /* rx $rd,$rt */
2743 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2744 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2745 #define FLD(f) abuf->fields.sfmt_empty.f
2746 int UNUSED written = 0;
2747 IADDR UNUSED pc = abuf->addr;
2748 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2750 ((void) 0); /*nop*/
2752 #undef FLD
2754 NEXT (vpc);
2756 CASE (sem, INSN_RXR1) : /* rxr1 $rt,$_index,$count */
2758 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2759 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2760 #define FLD(f) abuf->fields.sfmt_empty.f
2761 int UNUSED written = 0;
2762 IADDR UNUSED pc = abuf->addr;
2763 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2765 ((void) 0); /*nop*/
2767 #undef FLD
2769 NEXT (vpc);
2771 CASE (sem, INSN_RXR30) : /* rxr30 $rt,$_index,$count */
2773 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2774 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2775 #define FLD(f) abuf->fields.sfmt_empty.f
2776 int UNUSED written = 0;
2777 IADDR UNUSED pc = abuf->addr;
2778 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2780 ((void) 0); /*nop*/
2782 #undef FLD
2784 NEXT (vpc);
2786 CASE (sem, INSN_SLEEP) : /* sleep */
2788 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2789 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2790 #define FLD(f) abuf->fields.sfmt_empty.f
2791 int UNUSED written = 0;
2792 IADDR UNUSED pc = abuf->addr;
2793 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2795 ((void) 0); /*nop*/
2797 #undef FLD
2799 NEXT (vpc);
2801 CASE (sem, INSN_SRRD) : /* srrd $rt */
2803 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2804 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2805 #define FLD(f) abuf->fields.sfmt_empty.f
2806 int UNUSED written = 0;
2807 IADDR UNUSED pc = abuf->addr;
2808 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2810 ((void) 0); /*nop*/
2812 #undef FLD
2814 NEXT (vpc);
2816 CASE (sem, INSN_SRRDL) : /* srrdl $rt */
2818 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2819 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2820 #define FLD(f) abuf->fields.sfmt_empty.f
2821 int UNUSED written = 0;
2822 IADDR UNUSED pc = abuf->addr;
2823 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2825 ((void) 0); /*nop*/
2827 #undef FLD
2829 NEXT (vpc);
2831 CASE (sem, INSN_SRULCK) : /* srulck $rt */
2833 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2834 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2835 #define FLD(f) abuf->fields.sfmt_empty.f
2836 int UNUSED written = 0;
2837 IADDR UNUSED pc = abuf->addr;
2838 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2840 ((void) 0); /*nop*/
2842 #undef FLD
2844 NEXT (vpc);
2846 CASE (sem, INSN_SRWR) : /* srwr $rt,$rd */
2848 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2849 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2850 #define FLD(f) abuf->fields.sfmt_empty.f
2851 int UNUSED written = 0;
2852 IADDR UNUSED pc = abuf->addr;
2853 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2855 ((void) 0); /*nop*/
2857 #undef FLD
2859 NEXT (vpc);
2861 CASE (sem, INSN_SRWRU) : /* srwru $rt,$rd */
2863 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2864 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2865 #define FLD(f) abuf->fields.sfmt_empty.f
2866 int UNUSED written = 0;
2867 IADDR UNUSED pc = abuf->addr;
2868 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2870 ((void) 0); /*nop*/
2872 #undef FLD
2874 NEXT (vpc);
2876 CASE (sem, INSN_TRAPQFL) : /* trapqfl */
2878 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2879 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2880 #define FLD(f) abuf->fields.sfmt_empty.f
2881 int UNUSED written = 0;
2882 IADDR UNUSED pc = abuf->addr;
2883 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2885 ((void) 0); /*nop*/
2887 #undef FLD
2889 NEXT (vpc);
2891 CASE (sem, INSN_TRAPQNE) : /* trapqne */
2893 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2894 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2895 #define FLD(f) abuf->fields.sfmt_empty.f
2896 int UNUSED written = 0;
2897 IADDR UNUSED pc = abuf->addr;
2898 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2900 ((void) 0); /*nop*/
2902 #undef FLD
2904 NEXT (vpc);
2906 CASE (sem, INSN_TRAPREL) : /* traprel $rt */
2908 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2909 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2910 #define FLD(f) abuf->fields.sfmt_empty.f
2911 int UNUSED written = 0;
2912 IADDR UNUSED pc = abuf->addr;
2913 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2915 ((void) 0); /*nop*/
2917 #undef FLD
2919 NEXT (vpc);
2921 CASE (sem, INSN_WB) : /* wb $rd,$rt */
2923 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2924 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2925 #define FLD(f) abuf->fields.sfmt_empty.f
2926 int UNUSED written = 0;
2927 IADDR UNUSED pc = abuf->addr;
2928 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2930 ((void) 0); /*nop*/
2932 #undef FLD
2934 NEXT (vpc);
2936 CASE (sem, INSN_WBU) : /* wbu $rd,$rt */
2938 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2939 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2940 #define FLD(f) abuf->fields.sfmt_empty.f
2941 int UNUSED written = 0;
2942 IADDR UNUSED pc = abuf->addr;
2943 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2945 ((void) 0); /*nop*/
2947 #undef FLD
2949 NEXT (vpc);
2951 CASE (sem, INSN_WBR1) : /* wbr1 $rt,$_index,$count */
2953 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2954 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2955 #define FLD(f) abuf->fields.sfmt_empty.f
2956 int UNUSED written = 0;
2957 IADDR UNUSED pc = abuf->addr;
2958 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2960 ((void) 0); /*nop*/
2962 #undef FLD
2964 NEXT (vpc);
2966 CASE (sem, INSN_WBR1U) : /* wbr1u $rt,$_index,$count */
2968 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2969 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2970 #define FLD(f) abuf->fields.sfmt_empty.f
2971 int UNUSED written = 0;
2972 IADDR UNUSED pc = abuf->addr;
2973 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2975 ((void) 0); /*nop*/
2977 #undef FLD
2979 NEXT (vpc);
2981 CASE (sem, INSN_WBR30) : /* wbr30 $rt,$_index,$count */
2983 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2985 #define FLD(f) abuf->fields.sfmt_empty.f
2986 int UNUSED written = 0;
2987 IADDR UNUSED pc = abuf->addr;
2988 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2990 ((void) 0); /*nop*/
2992 #undef FLD
2994 NEXT (vpc);
2996 CASE (sem, INSN_WBR30U) : /* wbr30u $rt,$_index,$count */
2998 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2999 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3000 #define FLD(f) abuf->fields.sfmt_empty.f
3001 int UNUSED written = 0;
3002 IADDR UNUSED pc = abuf->addr;
3003 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3005 ((void) 0); /*nop*/
3007 #undef FLD
3009 NEXT (vpc);
3011 CASE (sem, INSN_WX) : /* wx $rd,$rt */
3013 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3014 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3015 #define FLD(f) abuf->fields.sfmt_empty.f
3016 int UNUSED written = 0;
3017 IADDR UNUSED pc = abuf->addr;
3018 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3020 ((void) 0); /*nop*/
3022 #undef FLD
3024 NEXT (vpc);
3026 CASE (sem, INSN_WXU) : /* wxu $rd,$rt */
3028 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3029 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3030 #define FLD(f) abuf->fields.sfmt_empty.f
3031 int UNUSED written = 0;
3032 IADDR UNUSED pc = abuf->addr;
3033 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3035 ((void) 0); /*nop*/
3037 #undef FLD
3039 NEXT (vpc);
3041 CASE (sem, INSN_WXR1) : /* wxr1 $rt,$_index,$count */
3043 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3044 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3045 #define FLD(f) abuf->fields.sfmt_empty.f
3046 int UNUSED written = 0;
3047 IADDR UNUSED pc = abuf->addr;
3048 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3050 ((void) 0); /*nop*/
3052 #undef FLD
3054 NEXT (vpc);
3056 CASE (sem, INSN_WXR1U) : /* wxr1u $rt,$_index,$count */
3058 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3059 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3060 #define FLD(f) abuf->fields.sfmt_empty.f
3061 int UNUSED written = 0;
3062 IADDR UNUSED pc = abuf->addr;
3063 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3065 ((void) 0); /*nop*/
3067 #undef FLD
3069 NEXT (vpc);
3071 CASE (sem, INSN_WXR30) : /* wxr30 $rt,$_index,$count */
3073 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3074 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3075 #define FLD(f) abuf->fields.sfmt_empty.f
3076 int UNUSED written = 0;
3077 IADDR UNUSED pc = abuf->addr;
3078 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3080 ((void) 0); /*nop*/
3082 #undef FLD
3084 NEXT (vpc);
3086 CASE (sem, INSN_WXR30U) : /* wxr30u $rt,$_index,$count */
3088 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3089 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3090 #define FLD(f) abuf->fields.sfmt_empty.f
3091 int UNUSED written = 0;
3092 IADDR UNUSED pc = abuf->addr;
3093 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3095 ((void) 0); /*nop*/
3097 #undef FLD
3099 NEXT (vpc);
3101 CASE (sem, INSN_LDW) : /* ldw $rt,$lo16($base) */
3103 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3104 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3105 #define FLD(f) abuf->fields.sfmt_addi.f
3106 int UNUSED written = 0;
3107 IADDR UNUSED pc = abuf->addr;
3108 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3111 SI tmp_addr;
3112 tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3));
3114 SI opval = GETMEMSI (current_cpu, pc, tmp_addr);
3115 SET_H_GR (ADDSI (FLD (f_rt), 1), opval);
3116 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3119 SI opval = GETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4));
3120 SET_H_GR (FLD (f_rt), opval);
3121 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3125 #undef FLD
3127 NEXT (vpc);
3129 CASE (sem, INSN_SDW) : /* sdw $rt,$lo16($base) */
3131 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3132 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3133 #define FLD(f) abuf->fields.sfmt_addi.f
3134 int UNUSED written = 0;
3135 IADDR UNUSED pc = abuf->addr;
3136 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3139 SI tmp_addr;
3140 tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3));
3142 SI opval = GET_H_GR (FLD (f_rt));
3143 SETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4), opval);
3144 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3147 SI opval = GET_H_GR (ADDSI (FLD (f_rt), 1));
3148 SETMEMSI (current_cpu, pc, tmp_addr, opval);
3149 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3153 #undef FLD
3155 NEXT (vpc);
3157 CASE (sem, INSN_J) : /* j $jmptarg */
3159 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3160 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3161 #define FLD(f) abuf->fields.sfmt_j.f
3162 int UNUSED written = 0;
3163 IADDR UNUSED pc = abuf->addr;
3164 SEM_BRANCH_INIT
3165 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3169 USI opval = FLD (i_jmptarg);
3170 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3171 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3175 SEM_BRANCH_FINI (vpc);
3176 #undef FLD
3178 NEXT (vpc);
3180 CASE (sem, INSN_JAL) : /* jal $jmptarg */
3182 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3183 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3184 #define FLD(f) abuf->fields.sfmt_j.f
3185 int UNUSED written = 0;
3186 IADDR UNUSED pc = abuf->addr;
3187 SEM_BRANCH_INIT
3188 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3193 SI opval = ADDSI (pc, 8);
3194 SET_H_GR (((UINT) 31), opval);
3195 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3198 USI opval = FLD (i_jmptarg);
3199 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3200 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3205 SEM_BRANCH_FINI (vpc);
3206 #undef FLD
3208 NEXT (vpc);
3210 CASE (sem, INSN_BMB) : /* bmb $rs,$rt,$offset */
3212 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3213 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3214 #define FLD(f) abuf->fields.sfmt_bbi.f
3215 int UNUSED written = 0;
3216 IADDR UNUSED pc = abuf->addr;
3217 SEM_BRANCH_INIT
3218 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3221 BI tmp_branch_;
3222 tmp_branch_ = 0;
3223 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) {
3224 tmp_branch_ = 1;
3226 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) {
3227 tmp_branch_ = 1;
3229 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) {
3230 tmp_branch_ = 1;
3232 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) {
3233 tmp_branch_ = 1;
3235 if (tmp_branch_) {
3238 USI opval = FLD (i_offset);
3239 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3240 written |= (1 << 3);
3241 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3247 abuf->written = written;
3248 SEM_BRANCH_FINI (vpc);
3249 #undef FLD
3251 NEXT (vpc);
3255 ENDSWITCH (sem) /* End of semantic switch. */
3257 /* At this point `vpc' contains the next insn to execute. */
3260 #undef DEFINE_SWITCH
3261 #endif /* DEFINE_SWITCH */