Switch the license of all files explicitly copyright the FSF
[external/binutils.git] / sim / iq2000 / sem-switch.c
1 /* Simulator instruction semantics for iq2000bf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
6
7 This file is part of the GNU simulators.
8
9 This program 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 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
22 */
23
24 #ifdef DEFINE_LABELS
25
26   /* The labels have the case they have because the enum of insn types
27      is all uppercase and in the non-stdc case the insn symbol is built
28      into the enum name.  */
29
30   static struct {
31     int index;
32     void *label;
33   } labels[] = {
34     { IQ2000BF_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
35     { IQ2000BF_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
36     { IQ2000BF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
37     { IQ2000BF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
38     { IQ2000BF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
39     { IQ2000BF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
40     { IQ2000BF_INSN_ADD, && case_sem_INSN_ADD },
41     { IQ2000BF_INSN_ADDI, && case_sem_INSN_ADDI },
42     { IQ2000BF_INSN_ADDIU, && case_sem_INSN_ADDIU },
43     { IQ2000BF_INSN_ADDU, && case_sem_INSN_ADDU },
44     { IQ2000BF_INSN_ADO16, && case_sem_INSN_ADO16 },
45     { IQ2000BF_INSN_AND, && case_sem_INSN_AND },
46     { IQ2000BF_INSN_ANDI, && case_sem_INSN_ANDI },
47     { IQ2000BF_INSN_ANDOI, && case_sem_INSN_ANDOI },
48     { IQ2000BF_INSN_NOR, && case_sem_INSN_NOR },
49     { IQ2000BF_INSN_OR, && case_sem_INSN_OR },
50     { IQ2000BF_INSN_ORI, && case_sem_INSN_ORI },
51     { IQ2000BF_INSN_RAM, && case_sem_INSN_RAM },
52     { IQ2000BF_INSN_SLL, && case_sem_INSN_SLL },
53     { IQ2000BF_INSN_SLLV, && case_sem_INSN_SLLV },
54     { IQ2000BF_INSN_SLMV, && case_sem_INSN_SLMV },
55     { IQ2000BF_INSN_SLT, && case_sem_INSN_SLT },
56     { IQ2000BF_INSN_SLTI, && case_sem_INSN_SLTI },
57     { IQ2000BF_INSN_SLTIU, && case_sem_INSN_SLTIU },
58     { IQ2000BF_INSN_SLTU, && case_sem_INSN_SLTU },
59     { IQ2000BF_INSN_SRA, && case_sem_INSN_SRA },
60     { IQ2000BF_INSN_SRAV, && case_sem_INSN_SRAV },
61     { IQ2000BF_INSN_SRL, && case_sem_INSN_SRL },
62     { IQ2000BF_INSN_SRLV, && case_sem_INSN_SRLV },
63     { IQ2000BF_INSN_SRMV, && case_sem_INSN_SRMV },
64     { IQ2000BF_INSN_SUB, && case_sem_INSN_SUB },
65     { IQ2000BF_INSN_SUBU, && case_sem_INSN_SUBU },
66     { IQ2000BF_INSN_XOR, && case_sem_INSN_XOR },
67     { IQ2000BF_INSN_XORI, && case_sem_INSN_XORI },
68     { IQ2000BF_INSN_BBI, && case_sem_INSN_BBI },
69     { IQ2000BF_INSN_BBIN, && case_sem_INSN_BBIN },
70     { IQ2000BF_INSN_BBV, && case_sem_INSN_BBV },
71     { IQ2000BF_INSN_BBVN, && case_sem_INSN_BBVN },
72     { IQ2000BF_INSN_BEQ, && case_sem_INSN_BEQ },
73     { IQ2000BF_INSN_BEQL, && case_sem_INSN_BEQL },
74     { IQ2000BF_INSN_BGEZ, && case_sem_INSN_BGEZ },
75     { IQ2000BF_INSN_BGEZAL, && case_sem_INSN_BGEZAL },
76     { IQ2000BF_INSN_BGEZALL, && case_sem_INSN_BGEZALL },
77     { IQ2000BF_INSN_BGEZL, && case_sem_INSN_BGEZL },
78     { IQ2000BF_INSN_BLTZ, && case_sem_INSN_BLTZ },
79     { IQ2000BF_INSN_BLTZL, && case_sem_INSN_BLTZL },
80     { IQ2000BF_INSN_BLTZAL, && case_sem_INSN_BLTZAL },
81     { IQ2000BF_INSN_BLTZALL, && case_sem_INSN_BLTZALL },
82     { IQ2000BF_INSN_BMB0, && case_sem_INSN_BMB0 },
83     { IQ2000BF_INSN_BMB1, && case_sem_INSN_BMB1 },
84     { IQ2000BF_INSN_BMB2, && case_sem_INSN_BMB2 },
85     { IQ2000BF_INSN_BMB3, && case_sem_INSN_BMB3 },
86     { IQ2000BF_INSN_BNE, && case_sem_INSN_BNE },
87     { IQ2000BF_INSN_BNEL, && case_sem_INSN_BNEL },
88     { IQ2000BF_INSN_JALR, && case_sem_INSN_JALR },
89     { IQ2000BF_INSN_JR, && case_sem_INSN_JR },
90     { IQ2000BF_INSN_LB, && case_sem_INSN_LB },
91     { IQ2000BF_INSN_LBU, && case_sem_INSN_LBU },
92     { IQ2000BF_INSN_LH, && case_sem_INSN_LH },
93     { IQ2000BF_INSN_LHU, && case_sem_INSN_LHU },
94     { IQ2000BF_INSN_LUI, && case_sem_INSN_LUI },
95     { IQ2000BF_INSN_LW, && case_sem_INSN_LW },
96     { IQ2000BF_INSN_SB, && case_sem_INSN_SB },
97     { IQ2000BF_INSN_SH, && case_sem_INSN_SH },
98     { IQ2000BF_INSN_SW, && case_sem_INSN_SW },
99     { IQ2000BF_INSN_BREAK, && case_sem_INSN_BREAK },
100     { IQ2000BF_INSN_SYSCALL, && case_sem_INSN_SYSCALL },
101     { IQ2000BF_INSN_ANDOUI, && case_sem_INSN_ANDOUI },
102     { IQ2000BF_INSN_ORUI, && case_sem_INSN_ORUI },
103     { IQ2000BF_INSN_BGTZ, && case_sem_INSN_BGTZ },
104     { IQ2000BF_INSN_BGTZL, && case_sem_INSN_BGTZL },
105     { IQ2000BF_INSN_BLEZ, && case_sem_INSN_BLEZ },
106     { IQ2000BF_INSN_BLEZL, && case_sem_INSN_BLEZL },
107     { IQ2000BF_INSN_MRGB, && case_sem_INSN_MRGB },
108     { IQ2000BF_INSN_BCTXT, && case_sem_INSN_BCTXT },
109     { IQ2000BF_INSN_BC0F, && case_sem_INSN_BC0F },
110     { IQ2000BF_INSN_BC0FL, && case_sem_INSN_BC0FL },
111     { IQ2000BF_INSN_BC3F, && case_sem_INSN_BC3F },
112     { IQ2000BF_INSN_BC3FL, && case_sem_INSN_BC3FL },
113     { IQ2000BF_INSN_BC0T, && case_sem_INSN_BC0T },
114     { IQ2000BF_INSN_BC0TL, && case_sem_INSN_BC0TL },
115     { IQ2000BF_INSN_BC3T, && case_sem_INSN_BC3T },
116     { IQ2000BF_INSN_BC3TL, && case_sem_INSN_BC3TL },
117     { IQ2000BF_INSN_CFC0, && case_sem_INSN_CFC0 },
118     { IQ2000BF_INSN_CFC1, && case_sem_INSN_CFC1 },
119     { IQ2000BF_INSN_CFC2, && case_sem_INSN_CFC2 },
120     { IQ2000BF_INSN_CFC3, && case_sem_INSN_CFC3 },
121     { IQ2000BF_INSN_CHKHDR, && case_sem_INSN_CHKHDR },
122     { IQ2000BF_INSN_CTC0, && case_sem_INSN_CTC0 },
123     { IQ2000BF_INSN_CTC1, && case_sem_INSN_CTC1 },
124     { IQ2000BF_INSN_CTC2, && case_sem_INSN_CTC2 },
125     { IQ2000BF_INSN_CTC3, && case_sem_INSN_CTC3 },
126     { IQ2000BF_INSN_JCR, && case_sem_INSN_JCR },
127     { IQ2000BF_INSN_LUC32, && case_sem_INSN_LUC32 },
128     { IQ2000BF_INSN_LUC32L, && case_sem_INSN_LUC32L },
129     { IQ2000BF_INSN_LUC64, && case_sem_INSN_LUC64 },
130     { IQ2000BF_INSN_LUC64L, && case_sem_INSN_LUC64L },
131     { IQ2000BF_INSN_LUK, && case_sem_INSN_LUK },
132     { IQ2000BF_INSN_LULCK, && case_sem_INSN_LULCK },
133     { IQ2000BF_INSN_LUM32, && case_sem_INSN_LUM32 },
134     { IQ2000BF_INSN_LUM32L, && case_sem_INSN_LUM32L },
135     { IQ2000BF_INSN_LUM64, && case_sem_INSN_LUM64 },
136     { IQ2000BF_INSN_LUM64L, && case_sem_INSN_LUM64L },
137     { IQ2000BF_INSN_LUR, && case_sem_INSN_LUR },
138     { IQ2000BF_INSN_LURL, && case_sem_INSN_LURL },
139     { IQ2000BF_INSN_LUULCK, && case_sem_INSN_LUULCK },
140     { IQ2000BF_INSN_MFC0, && case_sem_INSN_MFC0 },
141     { IQ2000BF_INSN_MFC1, && case_sem_INSN_MFC1 },
142     { IQ2000BF_INSN_MFC2, && case_sem_INSN_MFC2 },
143     { IQ2000BF_INSN_MFC3, && case_sem_INSN_MFC3 },
144     { IQ2000BF_INSN_MTC0, && case_sem_INSN_MTC0 },
145     { IQ2000BF_INSN_MTC1, && case_sem_INSN_MTC1 },
146     { IQ2000BF_INSN_MTC2, && case_sem_INSN_MTC2 },
147     { IQ2000BF_INSN_MTC3, && case_sem_INSN_MTC3 },
148     { IQ2000BF_INSN_PKRL, && case_sem_INSN_PKRL },
149     { IQ2000BF_INSN_PKRLR1, && case_sem_INSN_PKRLR1 },
150     { IQ2000BF_INSN_PKRLR30, && case_sem_INSN_PKRLR30 },
151     { IQ2000BF_INSN_RB, && case_sem_INSN_RB },
152     { IQ2000BF_INSN_RBR1, && case_sem_INSN_RBR1 },
153     { IQ2000BF_INSN_RBR30, && case_sem_INSN_RBR30 },
154     { IQ2000BF_INSN_RFE, && case_sem_INSN_RFE },
155     { IQ2000BF_INSN_RX, && case_sem_INSN_RX },
156     { IQ2000BF_INSN_RXR1, && case_sem_INSN_RXR1 },
157     { IQ2000BF_INSN_RXR30, && case_sem_INSN_RXR30 },
158     { IQ2000BF_INSN_SLEEP, && case_sem_INSN_SLEEP },
159     { IQ2000BF_INSN_SRRD, && case_sem_INSN_SRRD },
160     { IQ2000BF_INSN_SRRDL, && case_sem_INSN_SRRDL },
161     { IQ2000BF_INSN_SRULCK, && case_sem_INSN_SRULCK },
162     { IQ2000BF_INSN_SRWR, && case_sem_INSN_SRWR },
163     { IQ2000BF_INSN_SRWRU, && case_sem_INSN_SRWRU },
164     { IQ2000BF_INSN_TRAPQFL, && case_sem_INSN_TRAPQFL },
165     { IQ2000BF_INSN_TRAPQNE, && case_sem_INSN_TRAPQNE },
166     { IQ2000BF_INSN_TRAPREL, && case_sem_INSN_TRAPREL },
167     { IQ2000BF_INSN_WB, && case_sem_INSN_WB },
168     { IQ2000BF_INSN_WBU, && case_sem_INSN_WBU },
169     { IQ2000BF_INSN_WBR1, && case_sem_INSN_WBR1 },
170     { IQ2000BF_INSN_WBR1U, && case_sem_INSN_WBR1U },
171     { IQ2000BF_INSN_WBR30, && case_sem_INSN_WBR30 },
172     { IQ2000BF_INSN_WBR30U, && case_sem_INSN_WBR30U },
173     { IQ2000BF_INSN_WX, && case_sem_INSN_WX },
174     { IQ2000BF_INSN_WXU, && case_sem_INSN_WXU },
175     { IQ2000BF_INSN_WXR1, && case_sem_INSN_WXR1 },
176     { IQ2000BF_INSN_WXR1U, && case_sem_INSN_WXR1U },
177     { IQ2000BF_INSN_WXR30, && case_sem_INSN_WXR30 },
178     { IQ2000BF_INSN_WXR30U, && case_sem_INSN_WXR30U },
179     { IQ2000BF_INSN_LDW, && case_sem_INSN_LDW },
180     { IQ2000BF_INSN_SDW, && case_sem_INSN_SDW },
181     { IQ2000BF_INSN_J, && case_sem_INSN_J },
182     { IQ2000BF_INSN_JAL, && case_sem_INSN_JAL },
183     { IQ2000BF_INSN_BMB, && case_sem_INSN_BMB },
184     { 0, 0 }
185   };
186   int i;
187
188   for (i = 0; labels[i].label != 0; ++i)
189     {
190 #if FAST_P
191       CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
192 #else
193       CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
194 #endif
195     }
196
197 #undef DEFINE_LABELS
198 #endif /* DEFINE_LABELS */
199
200 #ifdef DEFINE_SWITCH
201
202 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
203    off frills like tracing and profiling.  */
204 /* FIXME: A better way would be to have TRACE_RESULT check for something
205    that can cause it to be optimized out.  Another way would be to emit
206    special handlers into the instruction "stream".  */
207
208 #if FAST_P
209 #undef TRACE_RESULT
210 #define TRACE_RESULT(cpu, abuf, name, type, val)
211 #endif
212
213 #undef GET_ATTR
214 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
215 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
216 #else
217 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
218 #endif
219
220 {
221
222 #if WITH_SCACHE_PBB
223
224 /* Branch to next handler without going around main loop.  */
225 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
226 SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
227
228 #else /* ! WITH_SCACHE_PBB */
229
230 #define NEXT(vpc) BREAK (sem)
231 #ifdef __GNUC__
232 #if FAST_P
233   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
234 #else
235   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
236 #endif
237 #else
238   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
239 #endif
240
241 #endif /* ! WITH_SCACHE_PBB */
242
243     {
244
245   CASE (sem, INSN_X_INVALID) : /* --invalid-- */
246 {
247   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
248   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
249 #define FLD(f) abuf->fields.fmt_empty.f
250   int UNUSED written = 0;
251   IADDR UNUSED pc = abuf->addr;
252   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
253
254   {
255     /* Update the recorded pc in the cpu state struct.
256        Only necessary for WITH_SCACHE case, but to avoid the
257        conditional compilation ....  */
258     SET_H_PC (pc);
259     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
260        using the default-insn-bitsize spec.  When executing insns in parallel
261        we may want to queue the fault and continue execution.  */
262     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
263     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
264   }
265
266 #undef FLD
267 }
268   NEXT (vpc);
269
270   CASE (sem, INSN_X_AFTER) : /* --after-- */
271 {
272   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
273   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
274 #define FLD(f) abuf->fields.fmt_empty.f
275   int UNUSED written = 0;
276   IADDR UNUSED pc = abuf->addr;
277   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
278
279   {
280 #if WITH_SCACHE_PBB_IQ2000BF
281     iq2000bf_pbb_after (current_cpu, sem_arg);
282 #endif
283   }
284
285 #undef FLD
286 }
287   NEXT (vpc);
288
289   CASE (sem, INSN_X_BEFORE) : /* --before-- */
290 {
291   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
292   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
293 #define FLD(f) abuf->fields.fmt_empty.f
294   int UNUSED written = 0;
295   IADDR UNUSED pc = abuf->addr;
296   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
297
298   {
299 #if WITH_SCACHE_PBB_IQ2000BF
300     iq2000bf_pbb_before (current_cpu, sem_arg);
301 #endif
302   }
303
304 #undef FLD
305 }
306   NEXT (vpc);
307
308   CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
309 {
310   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
311   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
312 #define FLD(f) abuf->fields.fmt_empty.f
313   int UNUSED written = 0;
314   IADDR UNUSED pc = abuf->addr;
315   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
316
317   {
318 #if WITH_SCACHE_PBB_IQ2000BF
319 #ifdef DEFINE_SWITCH
320     vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg,
321                                pbb_br_type, pbb_br_npc);
322     BREAK (sem);
323 #else
324     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
325     vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg,
326                                CPU_PBB_BR_TYPE (current_cpu),
327                                CPU_PBB_BR_NPC (current_cpu));
328 #endif
329 #endif
330   }
331
332 #undef FLD
333 }
334   NEXT (vpc);
335
336   CASE (sem, INSN_X_CHAIN) : /* --chain-- */
337 {
338   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
339   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
340 #define FLD(f) abuf->fields.fmt_empty.f
341   int UNUSED written = 0;
342   IADDR UNUSED pc = abuf->addr;
343   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
344
345   {
346 #if WITH_SCACHE_PBB_IQ2000BF
347     vpc = iq2000bf_pbb_chain (current_cpu, sem_arg);
348 #ifdef DEFINE_SWITCH
349     BREAK (sem);
350 #endif
351 #endif
352   }
353
354 #undef FLD
355 }
356   NEXT (vpc);
357
358   CASE (sem, INSN_X_BEGIN) : /* --begin-- */
359 {
360   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
361   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
362 #define FLD(f) abuf->fields.fmt_empty.f
363   int UNUSED written = 0;
364   IADDR UNUSED pc = abuf->addr;
365   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
366
367   {
368 #if WITH_SCACHE_PBB_IQ2000BF
369 #if defined DEFINE_SWITCH || defined FAST_P
370     /* In the switch case FAST_P is a constant, allowing several optimizations
371        in any called inline functions.  */
372     vpc = iq2000bf_pbb_begin (current_cpu, FAST_P);
373 #else
374 #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
375     vpc = iq2000bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
376 #else
377     vpc = iq2000bf_pbb_begin (current_cpu, 0);
378 #endif
379 #endif
380 #endif
381   }
382
383 #undef FLD
384 }
385   NEXT (vpc);
386
387   CASE (sem, INSN_ADD) : /* add $rd,$rs,$rt */
388 {
389   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
390   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
391 #define FLD(f) abuf->fields.sfmt_mrgb.f
392   int UNUSED written = 0;
393   IADDR UNUSED pc = abuf->addr;
394   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
395
396   {
397     SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
398     SET_H_GR (FLD (f_rd), opval);
399     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
400   }
401
402 #undef FLD
403 }
404   NEXT (vpc);
405
406   CASE (sem, INSN_ADDI) : /* addi $rt,$rs,$lo16 */
407 {
408   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
409   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
410 #define FLD(f) abuf->fields.sfmt_addi.f
411   int UNUSED written = 0;
412   IADDR UNUSED pc = abuf->addr;
413   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
414
415   {
416     SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))));
417     SET_H_GR (FLD (f_rt), opval);
418     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
419   }
420
421 #undef FLD
422 }
423   NEXT (vpc);
424
425   CASE (sem, INSN_ADDIU) : /* addiu $rt,$rs,$lo16 */
426 {
427   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
428   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
429 #define FLD(f) abuf->fields.sfmt_addi.f
430   int UNUSED written = 0;
431   IADDR UNUSED pc = abuf->addr;
432   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
433
434   {
435     SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))));
436     SET_H_GR (FLD (f_rt), opval);
437     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
438   }
439
440 #undef FLD
441 }
442   NEXT (vpc);
443
444   CASE (sem, INSN_ADDU) : /* addu $rd,$rs,$rt */
445 {
446   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
447   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
448 #define FLD(f) abuf->fields.sfmt_mrgb.f
449   int UNUSED written = 0;
450   IADDR UNUSED pc = abuf->addr;
451   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
452
453   {
454     SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
455     SET_H_GR (FLD (f_rd), opval);
456     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
457   }
458
459 #undef FLD
460 }
461   NEXT (vpc);
462
463   CASE (sem, INSN_ADO16) : /* ado16 $rd,$rs,$rt */
464 {
465   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
466   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
467 #define FLD(f) abuf->fields.sfmt_mrgb.f
468   int UNUSED written = 0;
469   IADDR UNUSED pc = abuf->addr;
470   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
471
472 {
473   HI tmp_high;
474   HI tmp_low;
475   tmp_low = ADDHI (ANDHI (GET_H_GR (FLD (f_rs)), 65535), ANDHI (GET_H_GR (FLD (f_rt)), 65535));
476   tmp_high = ADDHI (SRLSI (GET_H_GR (FLD (f_rs)), 16), SRLSI (GET_H_GR (FLD (f_rt)), 16));
477   {
478     SI opval = ORSI (SLLSI (tmp_high, 16), tmp_low);
479     SET_H_GR (FLD (f_rd), opval);
480     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
481   }
482 }
483
484 #undef FLD
485 }
486   NEXT (vpc);
487
488   CASE (sem, INSN_AND) : /* and $rd,$rs,$rt */
489 {
490   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
491   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
492 #define FLD(f) abuf->fields.sfmt_mrgb.f
493   int UNUSED written = 0;
494   IADDR UNUSED pc = abuf->addr;
495   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
496
497   {
498     SI opval = ANDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
499     SET_H_GR (FLD (f_rd), opval);
500     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
501   }
502
503 #undef FLD
504 }
505   NEXT (vpc);
506
507   CASE (sem, INSN_ANDI) : /* andi $rt,$rs,$lo16 */
508 {
509   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
510   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
511 #define FLD(f) abuf->fields.sfmt_addi.f
512   int UNUSED written = 0;
513   IADDR UNUSED pc = abuf->addr;
514   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
515
516   {
517     SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
518     SET_H_GR (FLD (f_rt), opval);
519     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
520   }
521
522 #undef FLD
523 }
524   NEXT (vpc);
525
526   CASE (sem, INSN_ANDOI) : /* andoi $rt,$rs,$lo16 */
527 {
528   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
529   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
530 #define FLD(f) abuf->fields.sfmt_addi.f
531   int UNUSED written = 0;
532   IADDR UNUSED pc = abuf->addr;
533   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
534
535   {
536     SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (0xffff0000, EXTHISI (TRUNCSIHI (FLD (f_imm)))));
537     SET_H_GR (FLD (f_rt), opval);
538     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
539   }
540
541 #undef FLD
542 }
543   NEXT (vpc);
544
545   CASE (sem, INSN_NOR) : /* nor $rd,$rs,$rt */
546 {
547   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
548   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
549 #define FLD(f) abuf->fields.sfmt_mrgb.f
550   int UNUSED written = 0;
551   IADDR UNUSED pc = abuf->addr;
552   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
553
554   {
555     SI opval = INVSI (ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))));
556     SET_H_GR (FLD (f_rd), opval);
557     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
558   }
559
560 #undef FLD
561 }
562   NEXT (vpc);
563
564   CASE (sem, INSN_OR) : /* or $rd,$rs,$rt */
565 {
566   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
567   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
568 #define FLD(f) abuf->fields.sfmt_mrgb.f
569   int UNUSED written = 0;
570   IADDR UNUSED pc = abuf->addr;
571   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
572
573   {
574     SI opval = ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
575     SET_H_GR (FLD (f_rd), opval);
576     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
577   }
578
579 #undef FLD
580 }
581   NEXT (vpc);
582
583   CASE (sem, INSN_ORI) : /* ori $rt,$rs,$lo16 */
584 {
585   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
586   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
587 #define FLD(f) abuf->fields.sfmt_addi.f
588   int UNUSED written = 0;
589   IADDR UNUSED pc = abuf->addr;
590   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
591
592   {
593     SI opval = ORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
594     SET_H_GR (FLD (f_rt), opval);
595     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
596   }
597
598 #undef FLD
599 }
600   NEXT (vpc);
601
602   CASE (sem, INSN_RAM) : /* ram $rd,$rt,$shamt,$maskl,$maskr */
603 {
604   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
605   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
606 #define FLD(f) abuf->fields.sfmt_ram.f
607   int UNUSED written = 0;
608   IADDR UNUSED pc = abuf->addr;
609   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
610
611 {
612   {
613     SI opval = RORSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
614     SET_H_GR (FLD (f_rd), opval);
615     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
616   }
617   {
618     SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SRLSI (0xffffffff, FLD (f_maskl)));
619     SET_H_GR (FLD (f_rd), opval);
620     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
621   }
622   {
623     SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SLLSI (0xffffffff, FLD (f_rs)));
624     SET_H_GR (FLD (f_rd), opval);
625     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
626   }
627 }
628
629 #undef FLD
630 }
631   NEXT (vpc);
632
633   CASE (sem, INSN_SLL) : /* sll $rd,$rt,$shamt */
634 {
635   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
636   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
637 #define FLD(f) abuf->fields.sfmt_ram.f
638   int UNUSED written = 0;
639   IADDR UNUSED pc = abuf->addr;
640   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
641
642   {
643     SI opval = SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
644     SET_H_GR (FLD (f_rd), opval);
645     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
646   }
647
648 #undef FLD
649 }
650   NEXT (vpc);
651
652   CASE (sem, INSN_SLLV) : /* sllv $rd,$rt,$rs */
653 {
654   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
655   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
656 #define FLD(f) abuf->fields.sfmt_mrgb.f
657   int UNUSED written = 0;
658   IADDR UNUSED pc = abuf->addr;
659   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
660
661   {
662     SI opval = SLLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
663     SET_H_GR (FLD (f_rd), opval);
664     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
665   }
666
667 #undef FLD
668 }
669   NEXT (vpc);
670
671   CASE (sem, INSN_SLMV) : /* slmv $rd,$rt,$rs,$shamt */
672 {
673   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
674   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
675 #define FLD(f) abuf->fields.sfmt_ram.f
676   int UNUSED written = 0;
677   IADDR UNUSED pc = abuf->addr;
678   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
679
680   {
681     SI opval = ANDSI (SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SRLSI (0xffffffff, GET_H_GR (FLD (f_rs))));
682     SET_H_GR (FLD (f_rd), opval);
683     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
684   }
685
686 #undef FLD
687 }
688   NEXT (vpc);
689
690   CASE (sem, INSN_SLT) : /* slt $rd,$rs,$rt */
691 {
692   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
693   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
694 #define FLD(f) abuf->fields.sfmt_mrgb.f
695   int UNUSED written = 0;
696   IADDR UNUSED pc = abuf->addr;
697   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
698
699 if (LTSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
700   {
701     SI opval = 1;
702     SET_H_GR (FLD (f_rd), opval);
703     written |= (1 << 2);
704     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
705   }
706 } else {
707   {
708     SI opval = 0;
709     SET_H_GR (FLD (f_rd), opval);
710     written |= (1 << 2);
711     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
712   }
713 }
714
715   abuf->written = written;
716 #undef FLD
717 }
718   NEXT (vpc);
719
720   CASE (sem, INSN_SLTI) : /* slti $rt,$rs,$imm */
721 {
722   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
723   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
724 #define FLD(f) abuf->fields.sfmt_addi.f
725   int UNUSED written = 0;
726   IADDR UNUSED pc = abuf->addr;
727   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
728
729 if (LTSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) {
730   {
731     SI opval = 1;
732     SET_H_GR (FLD (f_rt), opval);
733     written |= (1 << 2);
734     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
735   }
736 } else {
737   {
738     SI opval = 0;
739     SET_H_GR (FLD (f_rt), opval);
740     written |= (1 << 2);
741     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
742   }
743 }
744
745   abuf->written = written;
746 #undef FLD
747 }
748   NEXT (vpc);
749
750   CASE (sem, INSN_SLTIU) : /* sltiu $rt,$rs,$imm */
751 {
752   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
753   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
754 #define FLD(f) abuf->fields.sfmt_addi.f
755   int UNUSED written = 0;
756   IADDR UNUSED pc = abuf->addr;
757   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
758
759 if (LTUSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) {
760   {
761     SI opval = 1;
762     SET_H_GR (FLD (f_rt), opval);
763     written |= (1 << 2);
764     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
765   }
766 } else {
767   {
768     SI opval = 0;
769     SET_H_GR (FLD (f_rt), opval);
770     written |= (1 << 2);
771     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
772   }
773 }
774
775   abuf->written = written;
776 #undef FLD
777 }
778   NEXT (vpc);
779
780   CASE (sem, INSN_SLTU) : /* sltu $rd,$rs,$rt */
781 {
782   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
783   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
784 #define FLD(f) abuf->fields.sfmt_mrgb.f
785   int UNUSED written = 0;
786   IADDR UNUSED pc = abuf->addr;
787   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
788
789 if (LTUSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
790   {
791     SI opval = 1;
792     SET_H_GR (FLD (f_rd), opval);
793     written |= (1 << 2);
794     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
795   }
796 } else {
797   {
798     SI opval = 0;
799     SET_H_GR (FLD (f_rd), opval);
800     written |= (1 << 2);
801     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
802   }
803 }
804
805   abuf->written = written;
806 #undef FLD
807 }
808   NEXT (vpc);
809
810   CASE (sem, INSN_SRA) : /* sra $rd,$rt,$shamt */
811 {
812   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
813   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
814 #define FLD(f) abuf->fields.sfmt_ram.f
815   int UNUSED written = 0;
816   IADDR UNUSED pc = abuf->addr;
817   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
818
819   {
820     SI opval = SRASI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
821     SET_H_GR (FLD (f_rd), opval);
822     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
823   }
824
825 #undef FLD
826 }
827   NEXT (vpc);
828
829   CASE (sem, INSN_SRAV) : /* srav $rd,$rt,$rs */
830 {
831   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
832   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
833 #define FLD(f) abuf->fields.sfmt_mrgb.f
834   int UNUSED written = 0;
835   IADDR UNUSED pc = abuf->addr;
836   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
837
838   {
839     SI opval = SRASI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
840     SET_H_GR (FLD (f_rd), opval);
841     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
842   }
843
844 #undef FLD
845 }
846   NEXT (vpc);
847
848   CASE (sem, INSN_SRL) : /* srl $rd,$rt,$shamt */
849 {
850   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
851   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
852 #define FLD(f) abuf->fields.sfmt_ram.f
853   int UNUSED written = 0;
854   IADDR UNUSED pc = abuf->addr;
855   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
856
857   {
858     SI opval = SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt));
859     SET_H_GR (FLD (f_rd), opval);
860     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
861   }
862
863 #undef FLD
864 }
865   NEXT (vpc);
866
867   CASE (sem, INSN_SRLV) : /* srlv $rd,$rt,$rs */
868 {
869   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
870   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
871 #define FLD(f) abuf->fields.sfmt_mrgb.f
872   int UNUSED written = 0;
873   IADDR UNUSED pc = abuf->addr;
874   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
875
876   {
877     SI opval = SRLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31));
878     SET_H_GR (FLD (f_rd), opval);
879     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
880   }
881
882 #undef FLD
883 }
884   NEXT (vpc);
885
886   CASE (sem, INSN_SRMV) : /* srmv $rd,$rt,$rs,$shamt */
887 {
888   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
889   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
890 #define FLD(f) abuf->fields.sfmt_ram.f
891   int UNUSED written = 0;
892   IADDR UNUSED pc = abuf->addr;
893   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
894
895   {
896     SI opval = ANDSI (SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SLLSI (0xffffffff, GET_H_GR (FLD (f_rs))));
897     SET_H_GR (FLD (f_rd), opval);
898     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
899   }
900
901 #undef FLD
902 }
903   NEXT (vpc);
904
905   CASE (sem, INSN_SUB) : /* sub $rd,$rs,$rt */
906 {
907   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
908   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
909 #define FLD(f) abuf->fields.sfmt_mrgb.f
910   int UNUSED written = 0;
911   IADDR UNUSED pc = abuf->addr;
912   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
913
914   {
915     SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
916     SET_H_GR (FLD (f_rd), opval);
917     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
918   }
919
920 #undef FLD
921 }
922   NEXT (vpc);
923
924   CASE (sem, INSN_SUBU) : /* subu $rd,$rs,$rt */
925 {
926   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
927   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
928 #define FLD(f) abuf->fields.sfmt_mrgb.f
929   int UNUSED written = 0;
930   IADDR UNUSED pc = abuf->addr;
931   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
932
933   {
934     SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
935     SET_H_GR (FLD (f_rd), opval);
936     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
937   }
938
939 #undef FLD
940 }
941   NEXT (vpc);
942
943   CASE (sem, INSN_XOR) : /* xor $rd,$rs,$rt */
944 {
945   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
946   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
947 #define FLD(f) abuf->fields.sfmt_mrgb.f
948   int UNUSED written = 0;
949   IADDR UNUSED pc = abuf->addr;
950   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
951
952   {
953     SI opval = XORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)));
954     SET_H_GR (FLD (f_rd), opval);
955     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
956   }
957
958 #undef FLD
959 }
960   NEXT (vpc);
961
962   CASE (sem, INSN_XORI) : /* xori $rt,$rs,$lo16 */
963 {
964   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
965   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
966 #define FLD(f) abuf->fields.sfmt_addi.f
967   int UNUSED written = 0;
968   IADDR UNUSED pc = abuf->addr;
969   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
970
971   {
972     SI opval = XORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm)));
973     SET_H_GR (FLD (f_rt), opval);
974     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
975   }
976
977 #undef FLD
978 }
979   NEXT (vpc);
980
981   CASE (sem, INSN_BBI) : /* bbi $rs($bitnum),$offset */
982 {
983   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
984   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
985 #define FLD(f) abuf->fields.sfmt_bbi.f
986   int UNUSED written = 0;
987   IADDR UNUSED pc = abuf->addr;
988   SEM_BRANCH_INIT
989   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
990
991 if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt)))) {
992 {
993   {
994     USI opval = FLD (i_offset);
995     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
996     written |= (1 << 3);
997     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
998   }
999 }
1000 }
1001
1002   abuf->written = written;
1003   SEM_BRANCH_FINI (vpc);
1004 #undef FLD
1005 }
1006   NEXT (vpc);
1007
1008   CASE (sem, INSN_BBIN) : /* bbin $rs($bitnum),$offset */
1009 {
1010   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1011   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1012 #define FLD(f) abuf->fields.sfmt_bbi.f
1013   int UNUSED written = 0;
1014   IADDR UNUSED pc = abuf->addr;
1015   SEM_BRANCH_INIT
1016   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1017
1018 if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt))))) {
1019 {
1020   {
1021     USI opval = FLD (i_offset);
1022     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1023     written |= (1 << 3);
1024     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1025   }
1026 }
1027 }
1028
1029   abuf->written = written;
1030   SEM_BRANCH_FINI (vpc);
1031 #undef FLD
1032 }
1033   NEXT (vpc);
1034
1035   CASE (sem, INSN_BBV) : /* bbv $rs,$rt,$offset */
1036 {
1037   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1038   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1039 #define FLD(f) abuf->fields.sfmt_bbi.f
1040   int UNUSED written = 0;
1041   IADDR UNUSED pc = abuf->addr;
1042   SEM_BRANCH_INIT
1043   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1044
1045 if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31)))) {
1046 {
1047   {
1048     USI opval = FLD (i_offset);
1049     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1050     written |= (1 << 3);
1051     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1052   }
1053 }
1054 }
1055
1056   abuf->written = written;
1057   SEM_BRANCH_FINI (vpc);
1058 #undef FLD
1059 }
1060   NEXT (vpc);
1061
1062   CASE (sem, INSN_BBVN) : /* bbvn $rs,$rt,$offset */
1063 {
1064   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1065   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1066 #define FLD(f) abuf->fields.sfmt_bbi.f
1067   int UNUSED written = 0;
1068   IADDR UNUSED pc = abuf->addr;
1069   SEM_BRANCH_INIT
1070   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1071
1072 if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31))))) {
1073 {
1074   {
1075     USI opval = FLD (i_offset);
1076     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1077     written |= (1 << 3);
1078     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1079   }
1080 }
1081 }
1082
1083   abuf->written = written;
1084   SEM_BRANCH_FINI (vpc);
1085 #undef FLD
1086 }
1087   NEXT (vpc);
1088
1089   CASE (sem, INSN_BEQ) : /* beq $rs,$rt,$offset */
1090 {
1091   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1092   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1093 #define FLD(f) abuf->fields.sfmt_bbi.f
1094   int UNUSED written = 0;
1095   IADDR UNUSED pc = abuf->addr;
1096   SEM_BRANCH_INIT
1097   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1098
1099 if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
1100 {
1101   {
1102     USI opval = FLD (i_offset);
1103     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1104     written |= (1 << 3);
1105     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1106   }
1107 }
1108 }
1109
1110   abuf->written = written;
1111   SEM_BRANCH_FINI (vpc);
1112 #undef FLD
1113 }
1114   NEXT (vpc);
1115
1116   CASE (sem, INSN_BEQL) : /* beql $rs,$rt,$offset */
1117 {
1118   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1119   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1120 #define FLD(f) abuf->fields.sfmt_bbi.f
1121   int UNUSED written = 0;
1122   IADDR UNUSED pc = abuf->addr;
1123   SEM_BRANCH_INIT
1124   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1125
1126 if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
1127 {
1128   {
1129     USI opval = FLD (i_offset);
1130     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1131     written |= (1 << 3);
1132     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1133   }
1134 }
1135 } else {
1136 if (1)
1137   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1138 }
1139
1140   abuf->written = written;
1141   SEM_BRANCH_FINI (vpc);
1142 #undef FLD
1143 }
1144   NEXT (vpc);
1145
1146   CASE (sem, INSN_BGEZ) : /* bgez $rs,$offset */
1147 {
1148   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1149   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1150 #define FLD(f) abuf->fields.sfmt_bbi.f
1151   int UNUSED written = 0;
1152   IADDR UNUSED pc = abuf->addr;
1153   SEM_BRANCH_INIT
1154   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1155
1156 if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
1157 {
1158   {
1159     USI opval = FLD (i_offset);
1160     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1161     written |= (1 << 2);
1162     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1163   }
1164 }
1165 }
1166
1167   abuf->written = written;
1168   SEM_BRANCH_FINI (vpc);
1169 #undef FLD
1170 }
1171   NEXT (vpc);
1172
1173   CASE (sem, INSN_BGEZAL) : /* bgezal $rs,$offset */
1174 {
1175   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1176   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1177 #define FLD(f) abuf->fields.sfmt_bbi.f
1178   int UNUSED written = 0;
1179   IADDR UNUSED pc = abuf->addr;
1180   SEM_BRANCH_INIT
1181   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1182
1183 if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
1184 {
1185   {
1186     SI opval = ADDSI (pc, 8);
1187     SET_H_GR (((UINT) 31), opval);
1188     written |= (1 << 3);
1189     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1190   }
1191 {
1192   {
1193     USI opval = FLD (i_offset);
1194     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1195     written |= (1 << 4);
1196     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1197   }
1198 }
1199 }
1200 }
1201
1202   abuf->written = written;
1203   SEM_BRANCH_FINI (vpc);
1204 #undef FLD
1205 }
1206   NEXT (vpc);
1207
1208   CASE (sem, INSN_BGEZALL) : /* bgezall $rs,$offset */
1209 {
1210   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1211   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1212 #define FLD(f) abuf->fields.sfmt_bbi.f
1213   int UNUSED written = 0;
1214   IADDR UNUSED pc = abuf->addr;
1215   SEM_BRANCH_INIT
1216   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1217
1218 if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
1219 {
1220   {
1221     SI opval = ADDSI (pc, 8);
1222     SET_H_GR (((UINT) 31), opval);
1223     written |= (1 << 3);
1224     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1225   }
1226 {
1227   {
1228     USI opval = FLD (i_offset);
1229     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1230     written |= (1 << 4);
1231     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1232   }
1233 }
1234 }
1235 } else {
1236 if (1)
1237   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1238 }
1239
1240   abuf->written = written;
1241   SEM_BRANCH_FINI (vpc);
1242 #undef FLD
1243 }
1244   NEXT (vpc);
1245
1246   CASE (sem, INSN_BGEZL) : /* bgezl $rs,$offset */
1247 {
1248   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1249   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1250 #define FLD(f) abuf->fields.sfmt_bbi.f
1251   int UNUSED written = 0;
1252   IADDR UNUSED pc = abuf->addr;
1253   SEM_BRANCH_INIT
1254   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1255
1256 if (GESI (GET_H_GR (FLD (f_rs)), 0)) {
1257 {
1258   {
1259     USI opval = FLD (i_offset);
1260     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1261     written |= (1 << 2);
1262     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1263   }
1264 }
1265 } else {
1266 if (1)
1267   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1268 }
1269
1270   abuf->written = written;
1271   SEM_BRANCH_FINI (vpc);
1272 #undef FLD
1273 }
1274   NEXT (vpc);
1275
1276   CASE (sem, INSN_BLTZ) : /* bltz $rs,$offset */
1277 {
1278   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1279   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1280 #define FLD(f) abuf->fields.sfmt_bbi.f
1281   int UNUSED written = 0;
1282   IADDR UNUSED pc = abuf->addr;
1283   SEM_BRANCH_INIT
1284   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1285
1286 if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
1287 {
1288   {
1289     USI opval = FLD (i_offset);
1290     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1291     written |= (1 << 2);
1292     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1293   }
1294 }
1295 }
1296
1297   abuf->written = written;
1298   SEM_BRANCH_FINI (vpc);
1299 #undef FLD
1300 }
1301   NEXT (vpc);
1302
1303   CASE (sem, INSN_BLTZL) : /* bltzl $rs,$offset */
1304 {
1305   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1306   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1307 #define FLD(f) abuf->fields.sfmt_bbi.f
1308   int UNUSED written = 0;
1309   IADDR UNUSED pc = abuf->addr;
1310   SEM_BRANCH_INIT
1311   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1312
1313 if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
1314 {
1315   {
1316     USI opval = FLD (i_offset);
1317     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1318     written |= (1 << 2);
1319     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1320   }
1321 }
1322 } else {
1323 if (1)
1324   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1325 }
1326
1327   abuf->written = written;
1328   SEM_BRANCH_FINI (vpc);
1329 #undef FLD
1330 }
1331   NEXT (vpc);
1332
1333   CASE (sem, INSN_BLTZAL) : /* bltzal $rs,$offset */
1334 {
1335   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1336   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1337 #define FLD(f) abuf->fields.sfmt_bbi.f
1338   int UNUSED written = 0;
1339   IADDR UNUSED pc = abuf->addr;
1340   SEM_BRANCH_INIT
1341   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1342
1343 if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
1344 {
1345   {
1346     SI opval = ADDSI (pc, 8);
1347     SET_H_GR (((UINT) 31), opval);
1348     written |= (1 << 3);
1349     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1350   }
1351 {
1352   {
1353     USI opval = FLD (i_offset);
1354     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1355     written |= (1 << 4);
1356     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1357   }
1358 }
1359 }
1360 }
1361
1362   abuf->written = written;
1363   SEM_BRANCH_FINI (vpc);
1364 #undef FLD
1365 }
1366   NEXT (vpc);
1367
1368   CASE (sem, INSN_BLTZALL) : /* bltzall $rs,$offset */
1369 {
1370   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1371   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1372 #define FLD(f) abuf->fields.sfmt_bbi.f
1373   int UNUSED written = 0;
1374   IADDR UNUSED pc = abuf->addr;
1375   SEM_BRANCH_INIT
1376   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1377
1378 if (LTSI (GET_H_GR (FLD (f_rs)), 0)) {
1379 {
1380   {
1381     SI opval = ADDSI (pc, 8);
1382     SET_H_GR (((UINT) 31), opval);
1383     written |= (1 << 3);
1384     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1385   }
1386 {
1387   {
1388     USI opval = FLD (i_offset);
1389     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1390     written |= (1 << 4);
1391     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1392   }
1393 }
1394 }
1395 } else {
1396 if (1)
1397   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1398 }
1399
1400   abuf->written = written;
1401   SEM_BRANCH_FINI (vpc);
1402 #undef FLD
1403 }
1404   NEXT (vpc);
1405
1406   CASE (sem, INSN_BMB0) : /* bmb0 $rs,$rt,$offset */
1407 {
1408   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1409   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1410 #define FLD(f) abuf->fields.sfmt_bbi.f
1411   int UNUSED written = 0;
1412   IADDR UNUSED pc = abuf->addr;
1413   SEM_BRANCH_INIT
1414   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1415
1416 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) {
1417 {
1418   {
1419     USI opval = FLD (i_offset);
1420     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1421     written |= (1 << 3);
1422     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1423   }
1424 }
1425 }
1426
1427   abuf->written = written;
1428   SEM_BRANCH_FINI (vpc);
1429 #undef FLD
1430 }
1431   NEXT (vpc);
1432
1433   CASE (sem, INSN_BMB1) : /* bmb1 $rs,$rt,$offset */
1434 {
1435   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1436   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1437 #define FLD(f) abuf->fields.sfmt_bbi.f
1438   int UNUSED written = 0;
1439   IADDR UNUSED pc = abuf->addr;
1440   SEM_BRANCH_INIT
1441   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1442
1443 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) {
1444 {
1445   {
1446     USI opval = FLD (i_offset);
1447     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1448     written |= (1 << 3);
1449     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1450   }
1451 }
1452 }
1453
1454   abuf->written = written;
1455   SEM_BRANCH_FINI (vpc);
1456 #undef FLD
1457 }
1458   NEXT (vpc);
1459
1460   CASE (sem, INSN_BMB2) : /* bmb2 $rs,$rt,$offset */
1461 {
1462   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1463   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1464 #define FLD(f) abuf->fields.sfmt_bbi.f
1465   int UNUSED written = 0;
1466   IADDR UNUSED pc = abuf->addr;
1467   SEM_BRANCH_INIT
1468   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1469
1470 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) {
1471 {
1472   {
1473     USI opval = FLD (i_offset);
1474     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1475     written |= (1 << 3);
1476     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1477   }
1478 }
1479 }
1480
1481   abuf->written = written;
1482   SEM_BRANCH_FINI (vpc);
1483 #undef FLD
1484 }
1485   NEXT (vpc);
1486
1487   CASE (sem, INSN_BMB3) : /* bmb3 $rs,$rt,$offset */
1488 {
1489   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1490   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1491 #define FLD(f) abuf->fields.sfmt_bbi.f
1492   int UNUSED written = 0;
1493   IADDR UNUSED pc = abuf->addr;
1494   SEM_BRANCH_INIT
1495   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1496
1497 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) {
1498 {
1499   {
1500     USI opval = FLD (i_offset);
1501     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1502     written |= (1 << 3);
1503     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1504   }
1505 }
1506 }
1507
1508   abuf->written = written;
1509   SEM_BRANCH_FINI (vpc);
1510 #undef FLD
1511 }
1512   NEXT (vpc);
1513
1514   CASE (sem, INSN_BNE) : /* bne $rs,$rt,$offset */
1515 {
1516   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1517   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1518 #define FLD(f) abuf->fields.sfmt_bbi.f
1519   int UNUSED written = 0;
1520   IADDR UNUSED pc = abuf->addr;
1521   SEM_BRANCH_INIT
1522   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1523
1524 if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
1525 {
1526   {
1527     USI opval = FLD (i_offset);
1528     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1529     written |= (1 << 3);
1530     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1531   }
1532 }
1533 }
1534
1535   abuf->written = written;
1536   SEM_BRANCH_FINI (vpc);
1537 #undef FLD
1538 }
1539   NEXT (vpc);
1540
1541   CASE (sem, INSN_BNEL) : /* bnel $rs,$rt,$offset */
1542 {
1543   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1544   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1545 #define FLD(f) abuf->fields.sfmt_bbi.f
1546   int UNUSED written = 0;
1547   IADDR UNUSED pc = abuf->addr;
1548   SEM_BRANCH_INIT
1549   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1550
1551 if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) {
1552 {
1553   {
1554     USI opval = FLD (i_offset);
1555     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1556     written |= (1 << 3);
1557     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1558   }
1559 }
1560 } else {
1561 if (1)
1562   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1563 }
1564
1565   abuf->written = written;
1566   SEM_BRANCH_FINI (vpc);
1567 #undef FLD
1568 }
1569   NEXT (vpc);
1570
1571   CASE (sem, INSN_JALR) : /* jalr $rd,$rs */
1572 {
1573   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1574   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1575 #define FLD(f) abuf->fields.sfmt_mrgb.f
1576   int UNUSED written = 0;
1577   IADDR UNUSED pc = abuf->addr;
1578   SEM_BRANCH_INIT
1579   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1580
1581 {
1582 {
1583   {
1584     SI opval = ADDSI (pc, 8);
1585     SET_H_GR (FLD (f_rd), opval);
1586     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1587   }
1588   {
1589     USI opval = GET_H_GR (FLD (f_rs));
1590     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1591     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1592   }
1593 }
1594 }
1595
1596   SEM_BRANCH_FINI (vpc);
1597 #undef FLD
1598 }
1599   NEXT (vpc);
1600
1601   CASE (sem, INSN_JR) : /* jr $rs */
1602 {
1603   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1604   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1605 #define FLD(f) abuf->fields.sfmt_bbi.f
1606   int UNUSED written = 0;
1607   IADDR UNUSED pc = abuf->addr;
1608   SEM_BRANCH_INIT
1609   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1610
1611 {
1612   {
1613     USI opval = GET_H_GR (FLD (f_rs));
1614     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1615     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1616   }
1617 }
1618
1619   SEM_BRANCH_FINI (vpc);
1620 #undef FLD
1621 }
1622   NEXT (vpc);
1623
1624   CASE (sem, INSN_LB) : /* lb $rt,$lo16($base) */
1625 {
1626   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1627   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1628 #define FLD(f) abuf->fields.sfmt_addi.f
1629   int UNUSED written = 0;
1630   IADDR UNUSED pc = abuf->addr;
1631   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1632
1633   {
1634     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
1635     SET_H_GR (FLD (f_rt), opval);
1636     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1637   }
1638
1639 #undef FLD
1640 }
1641   NEXT (vpc);
1642
1643   CASE (sem, INSN_LBU) : /* lbu $rt,$lo16($base) */
1644 {
1645   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1646   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1647 #define FLD(f) abuf->fields.sfmt_addi.f
1648   int UNUSED written = 0;
1649   IADDR UNUSED pc = abuf->addr;
1650   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1651
1652   {
1653     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
1654     SET_H_GR (FLD (f_rt), opval);
1655     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1656   }
1657
1658 #undef FLD
1659 }
1660   NEXT (vpc);
1661
1662   CASE (sem, INSN_LH) : /* lh $rt,$lo16($base) */
1663 {
1664   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1665   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1666 #define FLD(f) abuf->fields.sfmt_addi.f
1667   int UNUSED written = 0;
1668   IADDR UNUSED pc = abuf->addr;
1669   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1670
1671   {
1672     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
1673     SET_H_GR (FLD (f_rt), opval);
1674     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1675   }
1676
1677 #undef FLD
1678 }
1679   NEXT (vpc);
1680
1681   CASE (sem, INSN_LHU) : /* lhu $rt,$lo16($base) */
1682 {
1683   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1684   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1685 #define FLD(f) abuf->fields.sfmt_addi.f
1686   int UNUSED written = 0;
1687   IADDR UNUSED pc = abuf->addr;
1688   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1689
1690   {
1691     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))));
1692     SET_H_GR (FLD (f_rt), opval);
1693     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1694   }
1695
1696 #undef FLD
1697 }
1698   NEXT (vpc);
1699
1700   CASE (sem, INSN_LUI) : /* lui $rt,$hi16 */
1701 {
1702   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1703   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1704 #define FLD(f) abuf->fields.sfmt_addi.f
1705   int UNUSED written = 0;
1706   IADDR UNUSED pc = abuf->addr;
1707   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1708
1709   {
1710     SI opval = SLLSI (FLD (f_imm), 16);
1711     SET_H_GR (FLD (f_rt), opval);
1712     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1713   }
1714
1715 #undef FLD
1716 }
1717   NEXT (vpc);
1718
1719   CASE (sem, INSN_LW) : /* lw $rt,$lo16($base) */
1720 {
1721   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1722   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1723 #define FLD(f) abuf->fields.sfmt_addi.f
1724   int UNUSED written = 0;
1725   IADDR UNUSED pc = abuf->addr;
1726   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1727
1728   {
1729     SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))));
1730     SET_H_GR (FLD (f_rt), opval);
1731     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1732   }
1733
1734 #undef FLD
1735 }
1736   NEXT (vpc);
1737
1738   CASE (sem, INSN_SB) : /* sb $rt,$lo16($base) */
1739 {
1740   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1741   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1742 #define FLD(f) abuf->fields.sfmt_addi.f
1743   int UNUSED written = 0;
1744   IADDR UNUSED pc = abuf->addr;
1745   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1746
1747   {
1748     QI opval = ANDQI (GET_H_GR (FLD (f_rt)), 255);
1749     SETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
1750     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1751   }
1752
1753 #undef FLD
1754 }
1755   NEXT (vpc);
1756
1757   CASE (sem, INSN_SH) : /* sh $rt,$lo16($base) */
1758 {
1759   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1760   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1761 #define FLD(f) abuf->fields.sfmt_addi.f
1762   int UNUSED written = 0;
1763   IADDR UNUSED pc = abuf->addr;
1764   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1765
1766   {
1767     HI opval = ANDHI (GET_H_GR (FLD (f_rt)), 65535);
1768     SETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
1769     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1770   }
1771
1772 #undef FLD
1773 }
1774   NEXT (vpc);
1775
1776   CASE (sem, INSN_SW) : /* sw $rt,$lo16($base) */
1777 {
1778   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1779   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1780 #define FLD(f) abuf->fields.sfmt_addi.f
1781   int UNUSED written = 0;
1782   IADDR UNUSED pc = abuf->addr;
1783   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1784
1785   {
1786     SI opval = GET_H_GR (FLD (f_rt));
1787     SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval);
1788     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1789   }
1790
1791 #undef FLD
1792 }
1793   NEXT (vpc);
1794
1795   CASE (sem, INSN_BREAK) : /* break */
1796 {
1797   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1798   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1799 #define FLD(f) abuf->fields.fmt_empty.f
1800   int UNUSED written = 0;
1801   IADDR UNUSED pc = abuf->addr;
1802   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1803
1804 do_break (current_cpu, pc);
1805
1806 #undef FLD
1807 }
1808   NEXT (vpc);
1809
1810   CASE (sem, INSN_SYSCALL) : /* syscall */
1811 {
1812   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1813   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1814 #define FLD(f) abuf->fields.fmt_empty.f
1815   int UNUSED written = 0;
1816   IADDR UNUSED pc = abuf->addr;
1817   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1818
1819 do_syscall (current_cpu);
1820
1821 #undef FLD
1822 }
1823   NEXT (vpc);
1824
1825   CASE (sem, INSN_ANDOUI) : /* andoui $rt,$rs,$hi16 */
1826 {
1827   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1828   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1829 #define FLD(f) abuf->fields.sfmt_addi.f
1830   int UNUSED written = 0;
1831   IADDR UNUSED pc = abuf->addr;
1832   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1833
1834   {
1835     SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (SLLSI (FLD (f_imm), 16), 65535));
1836     SET_H_GR (FLD (f_rt), opval);
1837     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1838   }
1839
1840 #undef FLD
1841 }
1842   NEXT (vpc);
1843
1844   CASE (sem, INSN_ORUI) : /* orui $rt,$rs,$hi16 */
1845 {
1846   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1847   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1848 #define FLD(f) abuf->fields.sfmt_addi.f
1849   int UNUSED written = 0;
1850   IADDR UNUSED pc = abuf->addr;
1851   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1852
1853   {
1854     SI opval = ORSI (GET_H_GR (FLD (f_rs)), SLLSI (FLD (f_imm), 16));
1855     SET_H_GR (FLD (f_rt), opval);
1856     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1857   }
1858
1859 #undef FLD
1860 }
1861   NEXT (vpc);
1862
1863   CASE (sem, INSN_BGTZ) : /* bgtz $rs,$offset */
1864 {
1865   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1866   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1867 #define FLD(f) abuf->fields.sfmt_bbi.f
1868   int UNUSED written = 0;
1869   IADDR UNUSED pc = abuf->addr;
1870   SEM_BRANCH_INIT
1871   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1872
1873 if (GTSI (GET_H_GR (FLD (f_rs)), 0)) {
1874 {
1875   {
1876     USI opval = FLD (i_offset);
1877     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1878     written |= (1 << 2);
1879     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1880   }
1881 }
1882 }
1883
1884   abuf->written = written;
1885   SEM_BRANCH_FINI (vpc);
1886 #undef FLD
1887 }
1888   NEXT (vpc);
1889
1890   CASE (sem, INSN_BGTZL) : /* bgtzl $rs,$offset */
1891 {
1892   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1893   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1894 #define FLD(f) abuf->fields.sfmt_bbi.f
1895   int UNUSED written = 0;
1896   IADDR UNUSED pc = abuf->addr;
1897   SEM_BRANCH_INIT
1898   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1899
1900 if (GTSI (GET_H_GR (FLD (f_rs)), 0)) {
1901 {
1902   {
1903     USI opval = FLD (i_offset);
1904     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1905     written |= (1 << 2);
1906     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1907   }
1908 }
1909 } else {
1910 if (1)
1911   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1912 }
1913
1914   abuf->written = written;
1915   SEM_BRANCH_FINI (vpc);
1916 #undef FLD
1917 }
1918   NEXT (vpc);
1919
1920   CASE (sem, INSN_BLEZ) : /* blez $rs,$offset */
1921 {
1922   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1923   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1924 #define FLD(f) abuf->fields.sfmt_bbi.f
1925   int UNUSED written = 0;
1926   IADDR UNUSED pc = abuf->addr;
1927   SEM_BRANCH_INIT
1928   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1929
1930 if (LESI (GET_H_GR (FLD (f_rs)), 0)) {
1931 {
1932   {
1933     USI opval = FLD (i_offset);
1934     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1935     written |= (1 << 2);
1936     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1937   }
1938 }
1939 }
1940
1941   abuf->written = written;
1942   SEM_BRANCH_FINI (vpc);
1943 #undef FLD
1944 }
1945   NEXT (vpc);
1946
1947   CASE (sem, INSN_BLEZL) : /* blezl $rs,$offset */
1948 {
1949   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1950   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1951 #define FLD(f) abuf->fields.sfmt_bbi.f
1952   int UNUSED written = 0;
1953   IADDR UNUSED pc = abuf->addr;
1954   SEM_BRANCH_INIT
1955   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1956
1957 if (LESI (GET_H_GR (FLD (f_rs)), 0)) {
1958 {
1959   {
1960     USI opval = FLD (i_offset);
1961     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1962     written |= (1 << 2);
1963     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1964   }
1965 }
1966 } else {
1967 if (1)
1968   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
1969 }
1970
1971   abuf->written = written;
1972   SEM_BRANCH_FINI (vpc);
1973 #undef FLD
1974 }
1975   NEXT (vpc);
1976
1977   CASE (sem, INSN_MRGB) : /* mrgb $rd,$rs,$rt,$mask */
1978 {
1979   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1980   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1981 #define FLD(f) abuf->fields.sfmt_mrgb.f
1982   int UNUSED written = 0;
1983   IADDR UNUSED pc = abuf->addr;
1984   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1985
1986 {
1987   SI tmp_temp;
1988 if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 0)))) {
1989   tmp_temp = ANDSI (GET_H_GR (FLD (f_rs)), 255);
1990 } else {
1991   tmp_temp = ANDSI (GET_H_GR (FLD (f_rt)), 255);
1992 }
1993 if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 1)))) {
1994   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 65280));
1995 } else {
1996   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 65280));
1997 }
1998 if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 2)))) {
1999   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 16711680));
2000 } else {
2001   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 16711680));
2002 }
2003 if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 3)))) {
2004   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000));
2005 } else {
2006   tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000));
2007 }
2008   {
2009     SI opval = tmp_temp;
2010     SET_H_GR (FLD (f_rd), opval);
2011     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2012   }
2013 }
2014
2015 #undef FLD
2016 }
2017   NEXT (vpc);
2018
2019   CASE (sem, INSN_BCTXT) : /* bctxt $rs,$offset */
2020 {
2021   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2022   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2023 #define FLD(f) abuf->fields.fmt_empty.f
2024   int UNUSED written = 0;
2025   IADDR UNUSED pc = abuf->addr;
2026   SEM_BRANCH_INIT
2027   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2028
2029 ((void) 0); /*nop*/
2030
2031   SEM_BRANCH_FINI (vpc);
2032 #undef FLD
2033 }
2034   NEXT (vpc);
2035
2036   CASE (sem, INSN_BC0F) : /* bc0f $offset */
2037 {
2038   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2039   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2040 #define FLD(f) abuf->fields.fmt_empty.f
2041   int UNUSED written = 0;
2042   IADDR UNUSED pc = abuf->addr;
2043   SEM_BRANCH_INIT
2044   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2045
2046 ((void) 0); /*nop*/
2047
2048   SEM_BRANCH_FINI (vpc);
2049 #undef FLD
2050 }
2051   NEXT (vpc);
2052
2053   CASE (sem, INSN_BC0FL) : /* bc0fl $offset */
2054 {
2055   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2056   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2057 #define FLD(f) abuf->fields.fmt_empty.f
2058   int UNUSED written = 0;
2059   IADDR UNUSED pc = abuf->addr;
2060   SEM_BRANCH_INIT
2061   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2062
2063 ((void) 0); /*nop*/
2064
2065   SEM_BRANCH_FINI (vpc);
2066 #undef FLD
2067 }
2068   NEXT (vpc);
2069
2070   CASE (sem, INSN_BC3F) : /* bc3f $offset */
2071 {
2072   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2073   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2074 #define FLD(f) abuf->fields.fmt_empty.f
2075   int UNUSED written = 0;
2076   IADDR UNUSED pc = abuf->addr;
2077   SEM_BRANCH_INIT
2078   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2079
2080 ((void) 0); /*nop*/
2081
2082   SEM_BRANCH_FINI (vpc);
2083 #undef FLD
2084 }
2085   NEXT (vpc);
2086
2087   CASE (sem, INSN_BC3FL) : /* bc3fl $offset */
2088 {
2089   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2090   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2091 #define FLD(f) abuf->fields.fmt_empty.f
2092   int UNUSED written = 0;
2093   IADDR UNUSED pc = abuf->addr;
2094   SEM_BRANCH_INIT
2095   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2096
2097 ((void) 0); /*nop*/
2098
2099   SEM_BRANCH_FINI (vpc);
2100 #undef FLD
2101 }
2102   NEXT (vpc);
2103
2104   CASE (sem, INSN_BC0T) : /* bc0t $offset */
2105 {
2106   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2107   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2108 #define FLD(f) abuf->fields.fmt_empty.f
2109   int UNUSED written = 0;
2110   IADDR UNUSED pc = abuf->addr;
2111   SEM_BRANCH_INIT
2112   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2113
2114 ((void) 0); /*nop*/
2115
2116   SEM_BRANCH_FINI (vpc);
2117 #undef FLD
2118 }
2119   NEXT (vpc);
2120
2121   CASE (sem, INSN_BC0TL) : /* bc0tl $offset */
2122 {
2123   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2124   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2125 #define FLD(f) abuf->fields.fmt_empty.f
2126   int UNUSED written = 0;
2127   IADDR UNUSED pc = abuf->addr;
2128   SEM_BRANCH_INIT
2129   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2130
2131 ((void) 0); /*nop*/
2132
2133   SEM_BRANCH_FINI (vpc);
2134 #undef FLD
2135 }
2136   NEXT (vpc);
2137
2138   CASE (sem, INSN_BC3T) : /* bc3t $offset */
2139 {
2140   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2141   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2142 #define FLD(f) abuf->fields.fmt_empty.f
2143   int UNUSED written = 0;
2144   IADDR UNUSED pc = abuf->addr;
2145   SEM_BRANCH_INIT
2146   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2147
2148 ((void) 0); /*nop*/
2149
2150   SEM_BRANCH_FINI (vpc);
2151 #undef FLD
2152 }
2153   NEXT (vpc);
2154
2155   CASE (sem, INSN_BC3TL) : /* bc3tl $offset */
2156 {
2157   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2158   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2159 #define FLD(f) abuf->fields.fmt_empty.f
2160   int UNUSED written = 0;
2161   IADDR UNUSED pc = abuf->addr;
2162   SEM_BRANCH_INIT
2163   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2164
2165 ((void) 0); /*nop*/
2166
2167   SEM_BRANCH_FINI (vpc);
2168 #undef FLD
2169 }
2170   NEXT (vpc);
2171
2172   CASE (sem, INSN_CFC0) : /* cfc0 $rt,$rd */
2173 {
2174   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2175   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2176 #define FLD(f) abuf->fields.fmt_empty.f
2177   int UNUSED written = 0;
2178   IADDR UNUSED pc = abuf->addr;
2179   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2180
2181 ((void) 0); /*nop*/
2182
2183 #undef FLD
2184 }
2185   NEXT (vpc);
2186
2187   CASE (sem, INSN_CFC1) : /* cfc1 $rt,$rd */
2188 {
2189   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2190   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2191 #define FLD(f) abuf->fields.fmt_empty.f
2192   int UNUSED written = 0;
2193   IADDR UNUSED pc = abuf->addr;
2194   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2195
2196 ((void) 0); /*nop*/
2197
2198 #undef FLD
2199 }
2200   NEXT (vpc);
2201
2202   CASE (sem, INSN_CFC2) : /* cfc2 $rt,$rd */
2203 {
2204   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2205   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2206 #define FLD(f) abuf->fields.fmt_empty.f
2207   int UNUSED written = 0;
2208   IADDR UNUSED pc = abuf->addr;
2209   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2210
2211 ((void) 0); /*nop*/
2212
2213 #undef FLD
2214 }
2215   NEXT (vpc);
2216
2217   CASE (sem, INSN_CFC3) : /* cfc3 $rt,$rd */
2218 {
2219   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2220   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2221 #define FLD(f) abuf->fields.fmt_empty.f
2222   int UNUSED written = 0;
2223   IADDR UNUSED pc = abuf->addr;
2224   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2225
2226 ((void) 0); /*nop*/
2227
2228 #undef FLD
2229 }
2230   NEXT (vpc);
2231
2232   CASE (sem, INSN_CHKHDR) : /* chkhdr $rd,$rt */
2233 {
2234   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2235   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2236 #define FLD(f) abuf->fields.fmt_empty.f
2237   int UNUSED written = 0;
2238   IADDR UNUSED pc = abuf->addr;
2239   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2240
2241 ((void) 0); /*nop*/
2242
2243 #undef FLD
2244 }
2245   NEXT (vpc);
2246
2247   CASE (sem, INSN_CTC0) : /* ctc0 $rt,$rd */
2248 {
2249   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2250   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2251 #define FLD(f) abuf->fields.fmt_empty.f
2252   int UNUSED written = 0;
2253   IADDR UNUSED pc = abuf->addr;
2254   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2255
2256 ((void) 0); /*nop*/
2257
2258 #undef FLD
2259 }
2260   NEXT (vpc);
2261
2262   CASE (sem, INSN_CTC1) : /* ctc1 $rt,$rd */
2263 {
2264   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2265   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2266 #define FLD(f) abuf->fields.fmt_empty.f
2267   int UNUSED written = 0;
2268   IADDR UNUSED pc = abuf->addr;
2269   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2270
2271 ((void) 0); /*nop*/
2272
2273 #undef FLD
2274 }
2275   NEXT (vpc);
2276
2277   CASE (sem, INSN_CTC2) : /* ctc2 $rt,$rd */
2278 {
2279   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2280   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2281 #define FLD(f) abuf->fields.fmt_empty.f
2282   int UNUSED written = 0;
2283   IADDR UNUSED pc = abuf->addr;
2284   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2285
2286 ((void) 0); /*nop*/
2287
2288 #undef FLD
2289 }
2290   NEXT (vpc);
2291
2292   CASE (sem, INSN_CTC3) : /* ctc3 $rt,$rd */
2293 {
2294   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2295   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2296 #define FLD(f) abuf->fields.fmt_empty.f
2297   int UNUSED written = 0;
2298   IADDR UNUSED pc = abuf->addr;
2299   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2300
2301 ((void) 0); /*nop*/
2302
2303 #undef FLD
2304 }
2305   NEXT (vpc);
2306
2307   CASE (sem, INSN_JCR) : /* jcr $rs */
2308 {
2309   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2310   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2311 #define FLD(f) abuf->fields.fmt_empty.f
2312   int UNUSED written = 0;
2313   IADDR UNUSED pc = abuf->addr;
2314   SEM_BRANCH_INIT
2315   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2316
2317 ((void) 0); /*nop*/
2318
2319   SEM_BRANCH_FINI (vpc);
2320 #undef FLD
2321 }
2322   NEXT (vpc);
2323
2324   CASE (sem, INSN_LUC32) : /* luc32 $rt,$rd */
2325 {
2326   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2327   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2328 #define FLD(f) abuf->fields.fmt_empty.f
2329   int UNUSED written = 0;
2330   IADDR UNUSED pc = abuf->addr;
2331   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2332
2333 ((void) 0); /*nop*/
2334
2335 #undef FLD
2336 }
2337   NEXT (vpc);
2338
2339   CASE (sem, INSN_LUC32L) : /* luc32l $rt,$rd */
2340 {
2341   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2342   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2343 #define FLD(f) abuf->fields.fmt_empty.f
2344   int UNUSED written = 0;
2345   IADDR UNUSED pc = abuf->addr;
2346   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2347
2348 ((void) 0); /*nop*/
2349
2350 #undef FLD
2351 }
2352   NEXT (vpc);
2353
2354   CASE (sem, INSN_LUC64) : /* luc64 $rt,$rd */
2355 {
2356   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2357   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2358 #define FLD(f) abuf->fields.fmt_empty.f
2359   int UNUSED written = 0;
2360   IADDR UNUSED pc = abuf->addr;
2361   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2362
2363 ((void) 0); /*nop*/
2364
2365 #undef FLD
2366 }
2367   NEXT (vpc);
2368
2369   CASE (sem, INSN_LUC64L) : /* luc64l $rt,$rd */
2370 {
2371   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2372   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2373 #define FLD(f) abuf->fields.fmt_empty.f
2374   int UNUSED written = 0;
2375   IADDR UNUSED pc = abuf->addr;
2376   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2377
2378 ((void) 0); /*nop*/
2379
2380 #undef FLD
2381 }
2382   NEXT (vpc);
2383
2384   CASE (sem, INSN_LUK) : /* luk $rt,$rd */
2385 {
2386   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2387   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2388 #define FLD(f) abuf->fields.fmt_empty.f
2389   int UNUSED written = 0;
2390   IADDR UNUSED pc = abuf->addr;
2391   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2392
2393 ((void) 0); /*nop*/
2394
2395 #undef FLD
2396 }
2397   NEXT (vpc);
2398
2399   CASE (sem, INSN_LULCK) : /* lulck $rt */
2400 {
2401   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2402   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2403 #define FLD(f) abuf->fields.fmt_empty.f
2404   int UNUSED written = 0;
2405   IADDR UNUSED pc = abuf->addr;
2406   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2407
2408 ((void) 0); /*nop*/
2409
2410 #undef FLD
2411 }
2412   NEXT (vpc);
2413
2414   CASE (sem, INSN_LUM32) : /* lum32 $rt,$rd */
2415 {
2416   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2417   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2418 #define FLD(f) abuf->fields.fmt_empty.f
2419   int UNUSED written = 0;
2420   IADDR UNUSED pc = abuf->addr;
2421   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2422
2423 ((void) 0); /*nop*/
2424
2425 #undef FLD
2426 }
2427   NEXT (vpc);
2428
2429   CASE (sem, INSN_LUM32L) : /* lum32l $rt,$rd */
2430 {
2431   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2432   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2433 #define FLD(f) abuf->fields.fmt_empty.f
2434   int UNUSED written = 0;
2435   IADDR UNUSED pc = abuf->addr;
2436   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2437
2438 ((void) 0); /*nop*/
2439
2440 #undef FLD
2441 }
2442   NEXT (vpc);
2443
2444   CASE (sem, INSN_LUM64) : /* lum64 $rt,$rd */
2445 {
2446   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2447   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2448 #define FLD(f) abuf->fields.fmt_empty.f
2449   int UNUSED written = 0;
2450   IADDR UNUSED pc = abuf->addr;
2451   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2452
2453 ((void) 0); /*nop*/
2454
2455 #undef FLD
2456 }
2457   NEXT (vpc);
2458
2459   CASE (sem, INSN_LUM64L) : /* lum64l $rt,$rd */
2460 {
2461   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2462   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2463 #define FLD(f) abuf->fields.fmt_empty.f
2464   int UNUSED written = 0;
2465   IADDR UNUSED pc = abuf->addr;
2466   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2467
2468 ((void) 0); /*nop*/
2469
2470 #undef FLD
2471 }
2472   NEXT (vpc);
2473
2474   CASE (sem, INSN_LUR) : /* lur $rt,$rd */
2475 {
2476   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2477   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2478 #define FLD(f) abuf->fields.fmt_empty.f
2479   int UNUSED written = 0;
2480   IADDR UNUSED pc = abuf->addr;
2481   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2482
2483 ((void) 0); /*nop*/
2484
2485 #undef FLD
2486 }
2487   NEXT (vpc);
2488
2489   CASE (sem, INSN_LURL) : /* lurl $rt,$rd */
2490 {
2491   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2492   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2493 #define FLD(f) abuf->fields.fmt_empty.f
2494   int UNUSED written = 0;
2495   IADDR UNUSED pc = abuf->addr;
2496   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2497
2498 ((void) 0); /*nop*/
2499
2500 #undef FLD
2501 }
2502   NEXT (vpc);
2503
2504   CASE (sem, INSN_LUULCK) : /* luulck $rt */
2505 {
2506   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2507   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2508 #define FLD(f) abuf->fields.fmt_empty.f
2509   int UNUSED written = 0;
2510   IADDR UNUSED pc = abuf->addr;
2511   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2512
2513 ((void) 0); /*nop*/
2514
2515 #undef FLD
2516 }
2517   NEXT (vpc);
2518
2519   CASE (sem, INSN_MFC0) : /* mfc0 $rt,$rd */
2520 {
2521   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2522   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2523 #define FLD(f) abuf->fields.fmt_empty.f
2524   int UNUSED written = 0;
2525   IADDR UNUSED pc = abuf->addr;
2526   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2527
2528 ((void) 0); /*nop*/
2529
2530 #undef FLD
2531 }
2532   NEXT (vpc);
2533
2534   CASE (sem, INSN_MFC1) : /* mfc1 $rt,$rd */
2535 {
2536   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2537   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2538 #define FLD(f) abuf->fields.fmt_empty.f
2539   int UNUSED written = 0;
2540   IADDR UNUSED pc = abuf->addr;
2541   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2542
2543 ((void) 0); /*nop*/
2544
2545 #undef FLD
2546 }
2547   NEXT (vpc);
2548
2549   CASE (sem, INSN_MFC2) : /* mfc2 $rt,$rd */
2550 {
2551   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2552   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2553 #define FLD(f) abuf->fields.fmt_empty.f
2554   int UNUSED written = 0;
2555   IADDR UNUSED pc = abuf->addr;
2556   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2557
2558 ((void) 0); /*nop*/
2559
2560 #undef FLD
2561 }
2562   NEXT (vpc);
2563
2564   CASE (sem, INSN_MFC3) : /* mfc3 $rt,$rd */
2565 {
2566   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2567   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2568 #define FLD(f) abuf->fields.fmt_empty.f
2569   int UNUSED written = 0;
2570   IADDR UNUSED pc = abuf->addr;
2571   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2572
2573 ((void) 0); /*nop*/
2574
2575 #undef FLD
2576 }
2577   NEXT (vpc);
2578
2579   CASE (sem, INSN_MTC0) : /* mtc0 $rt,$rd */
2580 {
2581   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2582   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2583 #define FLD(f) abuf->fields.fmt_empty.f
2584   int UNUSED written = 0;
2585   IADDR UNUSED pc = abuf->addr;
2586   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2587
2588 ((void) 0); /*nop*/
2589
2590 #undef FLD
2591 }
2592   NEXT (vpc);
2593
2594   CASE (sem, INSN_MTC1) : /* mtc1 $rt,$rd */
2595 {
2596   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2597   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2598 #define FLD(f) abuf->fields.fmt_empty.f
2599   int UNUSED written = 0;
2600   IADDR UNUSED pc = abuf->addr;
2601   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2602
2603 ((void) 0); /*nop*/
2604
2605 #undef FLD
2606 }
2607   NEXT (vpc);
2608
2609   CASE (sem, INSN_MTC2) : /* mtc2 $rt,$rd */
2610 {
2611   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2612   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2613 #define FLD(f) abuf->fields.fmt_empty.f
2614   int UNUSED written = 0;
2615   IADDR UNUSED pc = abuf->addr;
2616   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2617
2618 ((void) 0); /*nop*/
2619
2620 #undef FLD
2621 }
2622   NEXT (vpc);
2623
2624   CASE (sem, INSN_MTC3) : /* mtc3 $rt,$rd */
2625 {
2626   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2627   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2628 #define FLD(f) abuf->fields.fmt_empty.f
2629   int UNUSED written = 0;
2630   IADDR UNUSED pc = abuf->addr;
2631   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2632
2633 ((void) 0); /*nop*/
2634
2635 #undef FLD
2636 }
2637   NEXT (vpc);
2638
2639   CASE (sem, INSN_PKRL) : /* pkrl $rd,$rt */
2640 {
2641   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2642   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2643 #define FLD(f) abuf->fields.fmt_empty.f
2644   int UNUSED written = 0;
2645   IADDR UNUSED pc = abuf->addr;
2646   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2647
2648 ((void) 0); /*nop*/
2649
2650 #undef FLD
2651 }
2652   NEXT (vpc);
2653
2654   CASE (sem, INSN_PKRLR1) : /* pkrlr1 $rt,$index,$count */
2655 {
2656   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2657   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2658 #define FLD(f) abuf->fields.fmt_empty.f
2659   int UNUSED written = 0;
2660   IADDR UNUSED pc = abuf->addr;
2661   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2662
2663 ((void) 0); /*nop*/
2664
2665 #undef FLD
2666 }
2667   NEXT (vpc);
2668
2669   CASE (sem, INSN_PKRLR30) : /* pkrlr30 $rt,$index,$count */
2670 {
2671   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2672   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2673 #define FLD(f) abuf->fields.fmt_empty.f
2674   int UNUSED written = 0;
2675   IADDR UNUSED pc = abuf->addr;
2676   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2677
2678 ((void) 0); /*nop*/
2679
2680 #undef FLD
2681 }
2682   NEXT (vpc);
2683
2684   CASE (sem, INSN_RB) : /* rb $rd,$rt */
2685 {
2686   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2687   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2688 #define FLD(f) abuf->fields.fmt_empty.f
2689   int UNUSED written = 0;
2690   IADDR UNUSED pc = abuf->addr;
2691   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2692
2693 ((void) 0); /*nop*/
2694
2695 #undef FLD
2696 }
2697   NEXT (vpc);
2698
2699   CASE (sem, INSN_RBR1) : /* rbr1 $rt,$index,$count */
2700 {
2701   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2702   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2703 #define FLD(f) abuf->fields.fmt_empty.f
2704   int UNUSED written = 0;
2705   IADDR UNUSED pc = abuf->addr;
2706   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2707
2708 ((void) 0); /*nop*/
2709
2710 #undef FLD
2711 }
2712   NEXT (vpc);
2713
2714   CASE (sem, INSN_RBR30) : /* rbr30 $rt,$index,$count */
2715 {
2716   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2717   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2718 #define FLD(f) abuf->fields.fmt_empty.f
2719   int UNUSED written = 0;
2720   IADDR UNUSED pc = abuf->addr;
2721   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2722
2723 ((void) 0); /*nop*/
2724
2725 #undef FLD
2726 }
2727   NEXT (vpc);
2728
2729   CASE (sem, INSN_RFE) : /* rfe */
2730 {
2731   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2732   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2733 #define FLD(f) abuf->fields.fmt_empty.f
2734   int UNUSED written = 0;
2735   IADDR UNUSED pc = abuf->addr;
2736   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2737
2738 ((void) 0); /*nop*/
2739
2740 #undef FLD
2741 }
2742   NEXT (vpc);
2743
2744   CASE (sem, INSN_RX) : /* rx $rd,$rt */
2745 {
2746   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2747   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2748 #define FLD(f) abuf->fields.fmt_empty.f
2749   int UNUSED written = 0;
2750   IADDR UNUSED pc = abuf->addr;
2751   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2752
2753 ((void) 0); /*nop*/
2754
2755 #undef FLD
2756 }
2757   NEXT (vpc);
2758
2759   CASE (sem, INSN_RXR1) : /* rxr1 $rt,$index,$count */
2760 {
2761   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2762   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2763 #define FLD(f) abuf->fields.fmt_empty.f
2764   int UNUSED written = 0;
2765   IADDR UNUSED pc = abuf->addr;
2766   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2767
2768 ((void) 0); /*nop*/
2769
2770 #undef FLD
2771 }
2772   NEXT (vpc);
2773
2774   CASE (sem, INSN_RXR30) : /* rxr30 $rt,$index,$count */
2775 {
2776   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2777   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2778 #define FLD(f) abuf->fields.fmt_empty.f
2779   int UNUSED written = 0;
2780   IADDR UNUSED pc = abuf->addr;
2781   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2782
2783 ((void) 0); /*nop*/
2784
2785 #undef FLD
2786 }
2787   NEXT (vpc);
2788
2789   CASE (sem, INSN_SLEEP) : /* sleep */
2790 {
2791   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2792   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2793 #define FLD(f) abuf->fields.fmt_empty.f
2794   int UNUSED written = 0;
2795   IADDR UNUSED pc = abuf->addr;
2796   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2797
2798 ((void) 0); /*nop*/
2799
2800 #undef FLD
2801 }
2802   NEXT (vpc);
2803
2804   CASE (sem, INSN_SRRD) : /* srrd $rt */
2805 {
2806   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2807   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2808 #define FLD(f) abuf->fields.fmt_empty.f
2809   int UNUSED written = 0;
2810   IADDR UNUSED pc = abuf->addr;
2811   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2812
2813 ((void) 0); /*nop*/
2814
2815 #undef FLD
2816 }
2817   NEXT (vpc);
2818
2819   CASE (sem, INSN_SRRDL) : /* srrdl $rt */
2820 {
2821   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2822   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2823 #define FLD(f) abuf->fields.fmt_empty.f
2824   int UNUSED written = 0;
2825   IADDR UNUSED pc = abuf->addr;
2826   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2827
2828 ((void) 0); /*nop*/
2829
2830 #undef FLD
2831 }
2832   NEXT (vpc);
2833
2834   CASE (sem, INSN_SRULCK) : /* srulck $rt */
2835 {
2836   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2837   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2838 #define FLD(f) abuf->fields.fmt_empty.f
2839   int UNUSED written = 0;
2840   IADDR UNUSED pc = abuf->addr;
2841   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2842
2843 ((void) 0); /*nop*/
2844
2845 #undef FLD
2846 }
2847   NEXT (vpc);
2848
2849   CASE (sem, INSN_SRWR) : /* srwr $rt,$rd */
2850 {
2851   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2852   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2853 #define FLD(f) abuf->fields.fmt_empty.f
2854   int UNUSED written = 0;
2855   IADDR UNUSED pc = abuf->addr;
2856   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2857
2858 ((void) 0); /*nop*/
2859
2860 #undef FLD
2861 }
2862   NEXT (vpc);
2863
2864   CASE (sem, INSN_SRWRU) : /* srwru $rt,$rd */
2865 {
2866   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2867   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2868 #define FLD(f) abuf->fields.fmt_empty.f
2869   int UNUSED written = 0;
2870   IADDR UNUSED pc = abuf->addr;
2871   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2872
2873 ((void) 0); /*nop*/
2874
2875 #undef FLD
2876 }
2877   NEXT (vpc);
2878
2879   CASE (sem, INSN_TRAPQFL) : /* trapqfl */
2880 {
2881   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2882   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2883 #define FLD(f) abuf->fields.fmt_empty.f
2884   int UNUSED written = 0;
2885   IADDR UNUSED pc = abuf->addr;
2886   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2887
2888 ((void) 0); /*nop*/
2889
2890 #undef FLD
2891 }
2892   NEXT (vpc);
2893
2894   CASE (sem, INSN_TRAPQNE) : /* trapqne */
2895 {
2896   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2897   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2898 #define FLD(f) abuf->fields.fmt_empty.f
2899   int UNUSED written = 0;
2900   IADDR UNUSED pc = abuf->addr;
2901   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2902
2903 ((void) 0); /*nop*/
2904
2905 #undef FLD
2906 }
2907   NEXT (vpc);
2908
2909   CASE (sem, INSN_TRAPREL) : /* traprel $rt */
2910 {
2911   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2912   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2913 #define FLD(f) abuf->fields.fmt_empty.f
2914   int UNUSED written = 0;
2915   IADDR UNUSED pc = abuf->addr;
2916   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2917
2918 ((void) 0); /*nop*/
2919
2920 #undef FLD
2921 }
2922   NEXT (vpc);
2923
2924   CASE (sem, INSN_WB) : /* wb $rd,$rt */
2925 {
2926   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2927   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2928 #define FLD(f) abuf->fields.fmt_empty.f
2929   int UNUSED written = 0;
2930   IADDR UNUSED pc = abuf->addr;
2931   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2932
2933 ((void) 0); /*nop*/
2934
2935 #undef FLD
2936 }
2937   NEXT (vpc);
2938
2939   CASE (sem, INSN_WBU) : /* wbu $rd,$rt */
2940 {
2941   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2942   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2943 #define FLD(f) abuf->fields.fmt_empty.f
2944   int UNUSED written = 0;
2945   IADDR UNUSED pc = abuf->addr;
2946   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2947
2948 ((void) 0); /*nop*/
2949
2950 #undef FLD
2951 }
2952   NEXT (vpc);
2953
2954   CASE (sem, INSN_WBR1) : /* wbr1 $rt,$index,$count */
2955 {
2956   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2957   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2958 #define FLD(f) abuf->fields.fmt_empty.f
2959   int UNUSED written = 0;
2960   IADDR UNUSED pc = abuf->addr;
2961   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2962
2963 ((void) 0); /*nop*/
2964
2965 #undef FLD
2966 }
2967   NEXT (vpc);
2968
2969   CASE (sem, INSN_WBR1U) : /* wbr1u $rt,$index,$count */
2970 {
2971   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2972   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2973 #define FLD(f) abuf->fields.fmt_empty.f
2974   int UNUSED written = 0;
2975   IADDR UNUSED pc = abuf->addr;
2976   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2977
2978 ((void) 0); /*nop*/
2979
2980 #undef FLD
2981 }
2982   NEXT (vpc);
2983
2984   CASE (sem, INSN_WBR30) : /* wbr30 $rt,$index,$count */
2985 {
2986   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2987   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2988 #define FLD(f) abuf->fields.fmt_empty.f
2989   int UNUSED written = 0;
2990   IADDR UNUSED pc = abuf->addr;
2991   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2992
2993 ((void) 0); /*nop*/
2994
2995 #undef FLD
2996 }
2997   NEXT (vpc);
2998
2999   CASE (sem, INSN_WBR30U) : /* wbr30u $rt,$index,$count */
3000 {
3001   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3002   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3003 #define FLD(f) abuf->fields.fmt_empty.f
3004   int UNUSED written = 0;
3005   IADDR UNUSED pc = abuf->addr;
3006   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3007
3008 ((void) 0); /*nop*/
3009
3010 #undef FLD
3011 }
3012   NEXT (vpc);
3013
3014   CASE (sem, INSN_WX) : /* wx $rd,$rt */
3015 {
3016   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3017   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3018 #define FLD(f) abuf->fields.fmt_empty.f
3019   int UNUSED written = 0;
3020   IADDR UNUSED pc = abuf->addr;
3021   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3022
3023 ((void) 0); /*nop*/
3024
3025 #undef FLD
3026 }
3027   NEXT (vpc);
3028
3029   CASE (sem, INSN_WXU) : /* wxu $rd,$rt */
3030 {
3031   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3032   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3033 #define FLD(f) abuf->fields.fmt_empty.f
3034   int UNUSED written = 0;
3035   IADDR UNUSED pc = abuf->addr;
3036   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3037
3038 ((void) 0); /*nop*/
3039
3040 #undef FLD
3041 }
3042   NEXT (vpc);
3043
3044   CASE (sem, INSN_WXR1) : /* wxr1 $rt,$index,$count */
3045 {
3046   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3047   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3048 #define FLD(f) abuf->fields.fmt_empty.f
3049   int UNUSED written = 0;
3050   IADDR UNUSED pc = abuf->addr;
3051   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3052
3053 ((void) 0); /*nop*/
3054
3055 #undef FLD
3056 }
3057   NEXT (vpc);
3058
3059   CASE (sem, INSN_WXR1U) : /* wxr1u $rt,$index,$count */
3060 {
3061   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3062   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3063 #define FLD(f) abuf->fields.fmt_empty.f
3064   int UNUSED written = 0;
3065   IADDR UNUSED pc = abuf->addr;
3066   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3067
3068 ((void) 0); /*nop*/
3069
3070 #undef FLD
3071 }
3072   NEXT (vpc);
3073
3074   CASE (sem, INSN_WXR30) : /* wxr30 $rt,$index,$count */
3075 {
3076   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3077   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3078 #define FLD(f) abuf->fields.fmt_empty.f
3079   int UNUSED written = 0;
3080   IADDR UNUSED pc = abuf->addr;
3081   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3082
3083 ((void) 0); /*nop*/
3084
3085 #undef FLD
3086 }
3087   NEXT (vpc);
3088
3089   CASE (sem, INSN_WXR30U) : /* wxr30u $rt,$index,$count */
3090 {
3091   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3092   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3093 #define FLD(f) abuf->fields.fmt_empty.f
3094   int UNUSED written = 0;
3095   IADDR UNUSED pc = abuf->addr;
3096   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3097
3098 ((void) 0); /*nop*/
3099
3100 #undef FLD
3101 }
3102   NEXT (vpc);
3103
3104   CASE (sem, INSN_LDW) : /* ldw $rt,$lo16($base) */
3105 {
3106   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3107   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3108 #define FLD(f) abuf->fields.sfmt_addi.f
3109   int UNUSED written = 0;
3110   IADDR UNUSED pc = abuf->addr;
3111   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3112
3113 {
3114   SI tmp_addr;
3115   tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3));
3116   {
3117     SI opval = GETMEMSI (current_cpu, pc, tmp_addr);
3118     SET_H_GR (ADDSI (FLD (f_rt), 1), opval);
3119     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3120   }
3121   {
3122     SI opval = GETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4));
3123     SET_H_GR (FLD (f_rt), opval);
3124     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3125   }
3126 }
3127
3128 #undef FLD
3129 }
3130   NEXT (vpc);
3131
3132   CASE (sem, INSN_SDW) : /* sdw $rt,$lo16($base) */
3133 {
3134   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3135   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3136 #define FLD(f) abuf->fields.sfmt_addi.f
3137   int UNUSED written = 0;
3138   IADDR UNUSED pc = abuf->addr;
3139   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3140
3141 {
3142   SI tmp_addr;
3143   tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3));
3144   {
3145     SI opval = GET_H_GR (FLD (f_rt));
3146     SETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4), opval);
3147     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3148   }
3149   {
3150     SI opval = GET_H_GR (ADDSI (FLD (f_rt), 1));
3151     SETMEMSI (current_cpu, pc, tmp_addr, opval);
3152     TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3153   }
3154 }
3155
3156 #undef FLD
3157 }
3158   NEXT (vpc);
3159
3160   CASE (sem, INSN_J) : /* j $jmptarg */
3161 {
3162   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3163   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3164 #define FLD(f) abuf->fields.sfmt_j.f
3165   int UNUSED written = 0;
3166   IADDR UNUSED pc = abuf->addr;
3167   SEM_BRANCH_INIT
3168   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3169
3170 {
3171   {
3172     USI opval = FLD (i_jmptarg);
3173     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3174     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3175   }
3176 }
3177
3178   SEM_BRANCH_FINI (vpc);
3179 #undef FLD
3180 }
3181   NEXT (vpc);
3182
3183   CASE (sem, INSN_JAL) : /* jal $jmptarg */
3184 {
3185   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3186   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3187 #define FLD(f) abuf->fields.sfmt_j.f
3188   int UNUSED written = 0;
3189   IADDR UNUSED pc = abuf->addr;
3190   SEM_BRANCH_INIT
3191   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3192
3193 {
3194 {
3195   {
3196     SI opval = ADDSI (pc, 8);
3197     SET_H_GR (((UINT) 31), opval);
3198     TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3199   }
3200   {
3201     USI opval = FLD (i_jmptarg);
3202     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3203     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3204   }
3205 }
3206 }
3207
3208   SEM_BRANCH_FINI (vpc);
3209 #undef FLD
3210 }
3211   NEXT (vpc);
3212
3213   CASE (sem, INSN_BMB) : /* bmb $rs,$rt,$offset */
3214 {
3215   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3216   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3217 #define FLD(f) abuf->fields.sfmt_bbi.f
3218   int UNUSED written = 0;
3219   IADDR UNUSED pc = abuf->addr;
3220   SEM_BRANCH_INIT
3221   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3222
3223 {
3224   BI tmp_branch_;
3225   tmp_branch_ = 0;
3226 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) {
3227   tmp_branch_ = 1;
3228 }
3229 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) {
3230   tmp_branch_ = 1;
3231 }
3232 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) {
3233   tmp_branch_ = 1;
3234 }
3235 if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) {
3236   tmp_branch_ = 1;
3237 }
3238 if (tmp_branch_) {
3239 {
3240   {
3241     USI opval = FLD (i_offset);
3242     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3243     written |= (1 << 3);
3244     TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3245   }
3246 }
3247 }
3248 }
3249
3250   abuf->written = written;
3251   SEM_BRANCH_FINI (vpc);
3252 #undef FLD
3253 }
3254   NEXT (vpc);
3255
3256
3257     }
3258   ENDSWITCH (sem) /* End of semantic switch.  */
3259      ;
3260
3261   /* At this point `vpc' contains the next insn to execute.  */
3262 }
3263
3264 #undef DEFINE_SWITCH
3265 #endif /* DEFINE_SWITCH */