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