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