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