xref: /netbsd-src/external/gpl3/gdb/dist/sim/m32r/sem.c (revision 181254a7b1bdde6873432bffef2d2decc4b5c22f)
1 /* Simulator instruction semantics for m32rbf.
2 
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4 
5 Copyright 1996-2019 Free Software Foundation, Inc.
6 
7 This file is part of the GNU simulators.
8 
9    This file is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3, or (at your option)
12    any later version.
13 
14    It is distributed in the hope that it will be useful, but WITHOUT
15    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
17    License for more details.
18 
19    You should have received a copy of the GNU General Public License along
20    with this program; if not, see <http://www.gnu.org/licenses/>.
21 
22 */
23 
24 #define WANT_CPU m32rbf
25 #define WANT_CPU_M32RBF
26 
27 #include "sim-main.h"
28 #include "cgen-mem.h"
29 #include "cgen-ops.h"
30 
31 #undef GET_ATTR
32 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
33 
34 /* This is used so that we can compile two copies of the semantic code,
35    one with full feature support and one without that runs fast(er).
36    FAST_P, when desired, is defined on the command line, -DFAST_P=1.  */
37 #if FAST_P
38 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
39 #undef CGEN_TRACE_RESULT
40 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
41 #else
42 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
43 #endif
44 
45 /* x-invalid: --invalid-- */
46 
47 static SEM_PC
48 SEM_FN_NAME (m32rbf,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
49 {
50 #define FLD(f) abuf->fields.sfmt_empty.f
51   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
52   int UNUSED written = 0;
53   IADDR UNUSED pc = abuf->addr;
54   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
55 
56   {
57     /* Update the recorded pc in the cpu state struct.
58        Only necessary for WITH_SCACHE case, but to avoid the
59        conditional compilation ....  */
60     SET_H_PC (pc);
61     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
62        using the default-insn-bitsize spec.  When executing insns in parallel
63        we may want to queue the fault and continue execution.  */
64     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
65     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
66   }
67 
68   return vpc;
69 #undef FLD
70 }
71 
72 /* x-after: --after-- */
73 
74 static SEM_PC
75 SEM_FN_NAME (m32rbf,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
76 {
77 #define FLD(f) abuf->fields.sfmt_empty.f
78   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
79   int UNUSED written = 0;
80   IADDR UNUSED pc = abuf->addr;
81   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
82 
83   {
84 #if WITH_SCACHE_PBB_M32RBF
85     m32rbf_pbb_after (current_cpu, sem_arg);
86 #endif
87   }
88 
89   return vpc;
90 #undef FLD
91 }
92 
93 /* x-before: --before-- */
94 
95 static SEM_PC
96 SEM_FN_NAME (m32rbf,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
97 {
98 #define FLD(f) abuf->fields.sfmt_empty.f
99   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
100   int UNUSED written = 0;
101   IADDR UNUSED pc = abuf->addr;
102   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
103 
104   {
105 #if WITH_SCACHE_PBB_M32RBF
106     m32rbf_pbb_before (current_cpu, sem_arg);
107 #endif
108   }
109 
110   return vpc;
111 #undef FLD
112 }
113 
114 /* x-cti-chain: --cti-chain-- */
115 
116 static SEM_PC
117 SEM_FN_NAME (m32rbf,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
118 {
119 #define FLD(f) abuf->fields.sfmt_empty.f
120   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
121   int UNUSED written = 0;
122   IADDR UNUSED pc = abuf->addr;
123   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
124 
125   {
126 #if WITH_SCACHE_PBB_M32RBF
127 #ifdef DEFINE_SWITCH
128     vpc = m32rbf_pbb_cti_chain (current_cpu, sem_arg,
129 			       pbb_br_type, pbb_br_npc);
130     BREAK (sem);
131 #else
132     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
133     vpc = m32rbf_pbb_cti_chain (current_cpu, sem_arg,
134 			       CPU_PBB_BR_TYPE (current_cpu),
135 			       CPU_PBB_BR_NPC (current_cpu));
136 #endif
137 #endif
138   }
139 
140   return vpc;
141 #undef FLD
142 }
143 
144 /* x-chain: --chain-- */
145 
146 static SEM_PC
147 SEM_FN_NAME (m32rbf,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
148 {
149 #define FLD(f) abuf->fields.sfmt_empty.f
150   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
151   int UNUSED written = 0;
152   IADDR UNUSED pc = abuf->addr;
153   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
154 
155   {
156 #if WITH_SCACHE_PBB_M32RBF
157     vpc = m32rbf_pbb_chain (current_cpu, sem_arg);
158 #ifdef DEFINE_SWITCH
159     BREAK (sem);
160 #endif
161 #endif
162   }
163 
164   return vpc;
165 #undef FLD
166 }
167 
168 /* x-begin: --begin-- */
169 
170 static SEM_PC
171 SEM_FN_NAME (m32rbf,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
172 {
173 #define FLD(f) abuf->fields.sfmt_empty.f
174   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
175   int UNUSED written = 0;
176   IADDR UNUSED pc = abuf->addr;
177   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
178 
179   {
180 #if WITH_SCACHE_PBB_M32RBF
181 #if defined DEFINE_SWITCH || defined FAST_P
182     /* In the switch case FAST_P is a constant, allowing several optimizations
183        in any called inline functions.  */
184     vpc = m32rbf_pbb_begin (current_cpu, FAST_P);
185 #else
186 #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
187     vpc = m32rbf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
188 #else
189     vpc = m32rbf_pbb_begin (current_cpu, 0);
190 #endif
191 #endif
192 #endif
193   }
194 
195   return vpc;
196 #undef FLD
197 }
198 
199 /* add: add $dr,$sr */
200 
201 static SEM_PC
202 SEM_FN_NAME (m32rbf,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
203 {
204 #define FLD(f) abuf->fields.sfmt_add.f
205   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
206   int UNUSED written = 0;
207   IADDR UNUSED pc = abuf->addr;
208   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
209 
210   {
211     SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
212     * FLD (i_dr) = opval;
213     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
214   }
215 
216   return vpc;
217 #undef FLD
218 }
219 
220 /* add3: add3 $dr,$sr,$hash$slo16 */
221 
222 static SEM_PC
223 SEM_FN_NAME (m32rbf,add3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
224 {
225 #define FLD(f) abuf->fields.sfmt_add3.f
226   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
227   int UNUSED written = 0;
228   IADDR UNUSED pc = abuf->addr;
229   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
230 
231   {
232     SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));
233     * FLD (i_dr) = opval;
234     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
235   }
236 
237   return vpc;
238 #undef FLD
239 }
240 
241 /* and: and $dr,$sr */
242 
243 static SEM_PC
244 SEM_FN_NAME (m32rbf,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
245 {
246 #define FLD(f) abuf->fields.sfmt_add.f
247   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
248   int UNUSED written = 0;
249   IADDR UNUSED pc = abuf->addr;
250   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
251 
252   {
253     SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
254     * FLD (i_dr) = opval;
255     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
256   }
257 
258   return vpc;
259 #undef FLD
260 }
261 
262 /* and3: and3 $dr,$sr,$uimm16 */
263 
264 static SEM_PC
265 SEM_FN_NAME (m32rbf,and3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
266 {
267 #define FLD(f) abuf->fields.sfmt_and3.f
268   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
269   int UNUSED written = 0;
270   IADDR UNUSED pc = abuf->addr;
271   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
272 
273   {
274     SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));
275     * FLD (i_dr) = opval;
276     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
277   }
278 
279   return vpc;
280 #undef FLD
281 }
282 
283 /* or: or $dr,$sr */
284 
285 static SEM_PC
286 SEM_FN_NAME (m32rbf,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
287 {
288 #define FLD(f) abuf->fields.sfmt_add.f
289   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
290   int UNUSED written = 0;
291   IADDR UNUSED pc = abuf->addr;
292   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
293 
294   {
295     SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
296     * FLD (i_dr) = opval;
297     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
298   }
299 
300   return vpc;
301 #undef FLD
302 }
303 
304 /* or3: or3 $dr,$sr,$hash$ulo16 */
305 
306 static SEM_PC
307 SEM_FN_NAME (m32rbf,or3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
308 {
309 #define FLD(f) abuf->fields.sfmt_and3.f
310   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
311   int UNUSED written = 0;
312   IADDR UNUSED pc = abuf->addr;
313   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
314 
315   {
316     SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));
317     * FLD (i_dr) = opval;
318     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
319   }
320 
321   return vpc;
322 #undef FLD
323 }
324 
325 /* xor: xor $dr,$sr */
326 
327 static SEM_PC
328 SEM_FN_NAME (m32rbf,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
329 {
330 #define FLD(f) abuf->fields.sfmt_add.f
331   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
332   int UNUSED written = 0;
333   IADDR UNUSED pc = abuf->addr;
334   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
335 
336   {
337     SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
338     * FLD (i_dr) = opval;
339     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
340   }
341 
342   return vpc;
343 #undef FLD
344 }
345 
346 /* xor3: xor3 $dr,$sr,$uimm16 */
347 
348 static SEM_PC
349 SEM_FN_NAME (m32rbf,xor3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
350 {
351 #define FLD(f) abuf->fields.sfmt_and3.f
352   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
353   int UNUSED written = 0;
354   IADDR UNUSED pc = abuf->addr;
355   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
356 
357   {
358     SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));
359     * FLD (i_dr) = opval;
360     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
361   }
362 
363   return vpc;
364 #undef FLD
365 }
366 
367 /* addi: addi $dr,$simm8 */
368 
369 static SEM_PC
370 SEM_FN_NAME (m32rbf,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
371 {
372 #define FLD(f) abuf->fields.sfmt_addi.f
373   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
374   int UNUSED written = 0;
375   IADDR UNUSED pc = abuf->addr;
376   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
377 
378   {
379     SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
380     * FLD (i_dr) = opval;
381     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
382   }
383 
384   return vpc;
385 #undef FLD
386 }
387 
388 /* addv: addv $dr,$sr */
389 
390 static SEM_PC
391 SEM_FN_NAME (m32rbf,addv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
392 {
393 #define FLD(f) abuf->fields.sfmt_add.f
394   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
395   int UNUSED written = 0;
396   IADDR UNUSED pc = abuf->addr;
397   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
398 
399 {
400   SI temp0;BI temp1;
401   temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
402   temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
403   {
404     SI opval = temp0;
405     * FLD (i_dr) = opval;
406     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
407   }
408   {
409     BI opval = temp1;
410     CPU (h_cond) = opval;
411     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
412   }
413 }
414 
415   return vpc;
416 #undef FLD
417 }
418 
419 /* addv3: addv3 $dr,$sr,$simm16 */
420 
421 static SEM_PC
422 SEM_FN_NAME (m32rbf,addv3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
423 {
424 #define FLD(f) abuf->fields.sfmt_add3.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 temp0;BI temp1;
432   temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16));
433   temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0);
434   {
435     SI opval = temp0;
436     * FLD (i_dr) = opval;
437     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
438   }
439   {
440     BI opval = temp1;
441     CPU (h_cond) = opval;
442     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
443   }
444 }
445 
446   return vpc;
447 #undef FLD
448 }
449 
450 /* addx: addx $dr,$sr */
451 
452 static SEM_PC
453 SEM_FN_NAME (m32rbf,addx) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
454 {
455 #define FLD(f) abuf->fields.sfmt_add.f
456   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
457   int UNUSED written = 0;
458   IADDR UNUSED pc = abuf->addr;
459   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
460 
461 {
462   SI temp0;BI temp1;
463   temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
464   temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
465   {
466     SI opval = temp0;
467     * FLD (i_dr) = opval;
468     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
469   }
470   {
471     BI opval = temp1;
472     CPU (h_cond) = opval;
473     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
474   }
475 }
476 
477   return vpc;
478 #undef FLD
479 }
480 
481 /* bc8: bc.s $disp8 */
482 
483 static SEM_PC
484 SEM_FN_NAME (m32rbf,bc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
485 {
486 #define FLD(f) abuf->fields.sfmt_bl8.f
487   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
488   int UNUSED written = 0;
489   IADDR UNUSED pc = abuf->addr;
490   SEM_BRANCH_INIT
491   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
492 
493 if (CPU (h_cond)) {
494   {
495     USI opval = FLD (i_disp8);
496     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
497     written |= (1 << 2);
498     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
499   }
500 }
501 
502   abuf->written = written;
503   SEM_BRANCH_FINI (vpc);
504   return vpc;
505 #undef FLD
506 }
507 
508 /* bc24: bc.l $disp24 */
509 
510 static SEM_PC
511 SEM_FN_NAME (m32rbf,bc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
512 {
513 #define FLD(f) abuf->fields.sfmt_bl24.f
514   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
515   int UNUSED written = 0;
516   IADDR UNUSED pc = abuf->addr;
517   SEM_BRANCH_INIT
518   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
519 
520 if (CPU (h_cond)) {
521   {
522     USI opval = FLD (i_disp24);
523     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
524     written |= (1 << 2);
525     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
526   }
527 }
528 
529   abuf->written = written;
530   SEM_BRANCH_FINI (vpc);
531   return vpc;
532 #undef FLD
533 }
534 
535 /* beq: beq $src1,$src2,$disp16 */
536 
537 static SEM_PC
538 SEM_FN_NAME (m32rbf,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
539 {
540 #define FLD(f) abuf->fields.sfmt_beq.f
541   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
542   int UNUSED written = 0;
543   IADDR UNUSED pc = abuf->addr;
544   SEM_BRANCH_INIT
545   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
546 
547 if (EQSI (* FLD (i_src1), * FLD (i_src2))) {
548   {
549     USI opval = FLD (i_disp16);
550     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
551     written |= (1 << 3);
552     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
553   }
554 }
555 
556   abuf->written = written;
557   SEM_BRANCH_FINI (vpc);
558   return vpc;
559 #undef FLD
560 }
561 
562 /* beqz: beqz $src2,$disp16 */
563 
564 static SEM_PC
565 SEM_FN_NAME (m32rbf,beqz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
566 {
567 #define FLD(f) abuf->fields.sfmt_beq.f
568   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
569   int UNUSED written = 0;
570   IADDR UNUSED pc = abuf->addr;
571   SEM_BRANCH_INIT
572   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
573 
574 if (EQSI (* FLD (i_src2), 0)) {
575   {
576     USI opval = FLD (i_disp16);
577     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
578     written |= (1 << 2);
579     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
580   }
581 }
582 
583   abuf->written = written;
584   SEM_BRANCH_FINI (vpc);
585   return vpc;
586 #undef FLD
587 }
588 
589 /* bgez: bgez $src2,$disp16 */
590 
591 static SEM_PC
592 SEM_FN_NAME (m32rbf,bgez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
593 {
594 #define FLD(f) abuf->fields.sfmt_beq.f
595   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
596   int UNUSED written = 0;
597   IADDR UNUSED pc = abuf->addr;
598   SEM_BRANCH_INIT
599   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
600 
601 if (GESI (* FLD (i_src2), 0)) {
602   {
603     USI opval = FLD (i_disp16);
604     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
605     written |= (1 << 2);
606     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
607   }
608 }
609 
610   abuf->written = written;
611   SEM_BRANCH_FINI (vpc);
612   return vpc;
613 #undef FLD
614 }
615 
616 /* bgtz: bgtz $src2,$disp16 */
617 
618 static SEM_PC
619 SEM_FN_NAME (m32rbf,bgtz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
620 {
621 #define FLD(f) abuf->fields.sfmt_beq.f
622   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
623   int UNUSED written = 0;
624   IADDR UNUSED pc = abuf->addr;
625   SEM_BRANCH_INIT
626   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
627 
628 if (GTSI (* FLD (i_src2), 0)) {
629   {
630     USI opval = FLD (i_disp16);
631     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
632     written |= (1 << 2);
633     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
634   }
635 }
636 
637   abuf->written = written;
638   SEM_BRANCH_FINI (vpc);
639   return vpc;
640 #undef FLD
641 }
642 
643 /* blez: blez $src2,$disp16 */
644 
645 static SEM_PC
646 SEM_FN_NAME (m32rbf,blez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
647 {
648 #define FLD(f) abuf->fields.sfmt_beq.f
649   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
650   int UNUSED written = 0;
651   IADDR UNUSED pc = abuf->addr;
652   SEM_BRANCH_INIT
653   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
654 
655 if (LESI (* FLD (i_src2), 0)) {
656   {
657     USI opval = FLD (i_disp16);
658     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
659     written |= (1 << 2);
660     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
661   }
662 }
663 
664   abuf->written = written;
665   SEM_BRANCH_FINI (vpc);
666   return vpc;
667 #undef FLD
668 }
669 
670 /* bltz: bltz $src2,$disp16 */
671 
672 static SEM_PC
673 SEM_FN_NAME (m32rbf,bltz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
674 {
675 #define FLD(f) abuf->fields.sfmt_beq.f
676   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
677   int UNUSED written = 0;
678   IADDR UNUSED pc = abuf->addr;
679   SEM_BRANCH_INIT
680   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
681 
682 if (LTSI (* FLD (i_src2), 0)) {
683   {
684     USI opval = FLD (i_disp16);
685     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
686     written |= (1 << 2);
687     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
688   }
689 }
690 
691   abuf->written = written;
692   SEM_BRANCH_FINI (vpc);
693   return vpc;
694 #undef FLD
695 }
696 
697 /* bnez: bnez $src2,$disp16 */
698 
699 static SEM_PC
700 SEM_FN_NAME (m32rbf,bnez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
701 {
702 #define FLD(f) abuf->fields.sfmt_beq.f
703   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
704   int UNUSED written = 0;
705   IADDR UNUSED pc = abuf->addr;
706   SEM_BRANCH_INIT
707   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
708 
709 if (NESI (* FLD (i_src2), 0)) {
710   {
711     USI opval = FLD (i_disp16);
712     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
713     written |= (1 << 2);
714     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
715   }
716 }
717 
718   abuf->written = written;
719   SEM_BRANCH_FINI (vpc);
720   return vpc;
721 #undef FLD
722 }
723 
724 /* bl8: bl.s $disp8 */
725 
726 static SEM_PC
727 SEM_FN_NAME (m32rbf,bl8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
728 {
729 #define FLD(f) abuf->fields.sfmt_bl8.f
730   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
731   int UNUSED written = 0;
732   IADDR UNUSED pc = abuf->addr;
733   SEM_BRANCH_INIT
734   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
735 
736 {
737   {
738     SI opval = ADDSI (ANDSI (pc, -4), 4);
739     CPU (h_gr[((UINT) 14)]) = opval;
740     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
741   }
742   {
743     USI opval = FLD (i_disp8);
744     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
745     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
746   }
747 }
748 
749   SEM_BRANCH_FINI (vpc);
750   return vpc;
751 #undef FLD
752 }
753 
754 /* bl24: bl.l $disp24 */
755 
756 static SEM_PC
757 SEM_FN_NAME (m32rbf,bl24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
758 {
759 #define FLD(f) abuf->fields.sfmt_bl24.f
760   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
761   int UNUSED written = 0;
762   IADDR UNUSED pc = abuf->addr;
763   SEM_BRANCH_INIT
764   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
765 
766 {
767   {
768     SI opval = ADDSI (pc, 4);
769     CPU (h_gr[((UINT) 14)]) = opval;
770     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
771   }
772   {
773     USI opval = FLD (i_disp24);
774     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
775     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
776   }
777 }
778 
779   SEM_BRANCH_FINI (vpc);
780   return vpc;
781 #undef FLD
782 }
783 
784 /* bnc8: bnc.s $disp8 */
785 
786 static SEM_PC
787 SEM_FN_NAME (m32rbf,bnc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
788 {
789 #define FLD(f) abuf->fields.sfmt_bl8.f
790   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
791   int UNUSED written = 0;
792   IADDR UNUSED pc = abuf->addr;
793   SEM_BRANCH_INIT
794   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
795 
796 if (NOTBI (CPU (h_cond))) {
797   {
798     USI opval = FLD (i_disp8);
799     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
800     written |= (1 << 2);
801     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
802   }
803 }
804 
805   abuf->written = written;
806   SEM_BRANCH_FINI (vpc);
807   return vpc;
808 #undef FLD
809 }
810 
811 /* bnc24: bnc.l $disp24 */
812 
813 static SEM_PC
814 SEM_FN_NAME (m32rbf,bnc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
815 {
816 #define FLD(f) abuf->fields.sfmt_bl24.f
817   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
818   int UNUSED written = 0;
819   IADDR UNUSED pc = abuf->addr;
820   SEM_BRANCH_INIT
821   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
822 
823 if (NOTBI (CPU (h_cond))) {
824   {
825     USI opval = FLD (i_disp24);
826     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
827     written |= (1 << 2);
828     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
829   }
830 }
831 
832   abuf->written = written;
833   SEM_BRANCH_FINI (vpc);
834   return vpc;
835 #undef FLD
836 }
837 
838 /* bne: bne $src1,$src2,$disp16 */
839 
840 static SEM_PC
841 SEM_FN_NAME (m32rbf,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
842 {
843 #define FLD(f) abuf->fields.sfmt_beq.f
844   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
845   int UNUSED written = 0;
846   IADDR UNUSED pc = abuf->addr;
847   SEM_BRANCH_INIT
848   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
849 
850 if (NESI (* FLD (i_src1), * FLD (i_src2))) {
851   {
852     USI opval = FLD (i_disp16);
853     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
854     written |= (1 << 3);
855     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
856   }
857 }
858 
859   abuf->written = written;
860   SEM_BRANCH_FINI (vpc);
861   return vpc;
862 #undef FLD
863 }
864 
865 /* bra8: bra.s $disp8 */
866 
867 static SEM_PC
868 SEM_FN_NAME (m32rbf,bra8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
869 {
870 #define FLD(f) abuf->fields.sfmt_bl8.f
871   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
872   int UNUSED written = 0;
873   IADDR UNUSED pc = abuf->addr;
874   SEM_BRANCH_INIT
875   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
876 
877   {
878     USI opval = FLD (i_disp8);
879     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
880     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
881   }
882 
883   SEM_BRANCH_FINI (vpc);
884   return vpc;
885 #undef FLD
886 }
887 
888 /* bra24: bra.l $disp24 */
889 
890 static SEM_PC
891 SEM_FN_NAME (m32rbf,bra24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
892 {
893 #define FLD(f) abuf->fields.sfmt_bl24.f
894   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
895   int UNUSED written = 0;
896   IADDR UNUSED pc = abuf->addr;
897   SEM_BRANCH_INIT
898   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
899 
900   {
901     USI opval = FLD (i_disp24);
902     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
903     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
904   }
905 
906   SEM_BRANCH_FINI (vpc);
907   return vpc;
908 #undef FLD
909 }
910 
911 /* cmp: cmp $src1,$src2 */
912 
913 static SEM_PC
914 SEM_FN_NAME (m32rbf,cmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
915 {
916 #define FLD(f) abuf->fields.sfmt_st_plus.f
917   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
918   int UNUSED written = 0;
919   IADDR UNUSED pc = abuf->addr;
920   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
921 
922   {
923     BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
924     CPU (h_cond) = opval;
925     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
926   }
927 
928   return vpc;
929 #undef FLD
930 }
931 
932 /* cmpi: cmpi $src2,$simm16 */
933 
934 static SEM_PC
935 SEM_FN_NAME (m32rbf,cmpi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
936 {
937 #define FLD(f) abuf->fields.sfmt_st_d.f
938   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
939   int UNUSED written = 0;
940   IADDR UNUSED pc = abuf->addr;
941   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
942 
943   {
944     BI opval = LTSI (* FLD (i_src2), FLD (f_simm16));
945     CPU (h_cond) = opval;
946     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
947   }
948 
949   return vpc;
950 #undef FLD
951 }
952 
953 /* cmpu: cmpu $src1,$src2 */
954 
955 static SEM_PC
956 SEM_FN_NAME (m32rbf,cmpu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
957 {
958 #define FLD(f) abuf->fields.sfmt_st_plus.f
959   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
960   int UNUSED written = 0;
961   IADDR UNUSED pc = abuf->addr;
962   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
963 
964   {
965     BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
966     CPU (h_cond) = opval;
967     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
968   }
969 
970   return vpc;
971 #undef FLD
972 }
973 
974 /* cmpui: cmpui $src2,$simm16 */
975 
976 static SEM_PC
977 SEM_FN_NAME (m32rbf,cmpui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
978 {
979 #define FLD(f) abuf->fields.sfmt_st_d.f
980   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
981   int UNUSED written = 0;
982   IADDR UNUSED pc = abuf->addr;
983   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
984 
985   {
986     BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16));
987     CPU (h_cond) = opval;
988     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
989   }
990 
991   return vpc;
992 #undef FLD
993 }
994 
995 /* div: div $dr,$sr */
996 
997 static SEM_PC
998 SEM_FN_NAME (m32rbf,div) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
999 {
1000 #define FLD(f) abuf->fields.sfmt_add.f
1001   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1002   int UNUSED written = 0;
1003   IADDR UNUSED pc = abuf->addr;
1004   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1005 
1006 if (NESI (* FLD (i_sr), 0)) {
1007   {
1008     SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr));
1009     * FLD (i_dr) = opval;
1010     written |= (1 << 2);
1011     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1012   }
1013 }
1014 
1015   abuf->written = written;
1016   return vpc;
1017 #undef FLD
1018 }
1019 
1020 /* divu: divu $dr,$sr */
1021 
1022 static SEM_PC
1023 SEM_FN_NAME (m32rbf,divu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1024 {
1025 #define FLD(f) abuf->fields.sfmt_add.f
1026   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1027   int UNUSED written = 0;
1028   IADDR UNUSED pc = abuf->addr;
1029   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1030 
1031 if (NESI (* FLD (i_sr), 0)) {
1032   {
1033     SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
1034     * FLD (i_dr) = opval;
1035     written |= (1 << 2);
1036     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1037   }
1038 }
1039 
1040   abuf->written = written;
1041   return vpc;
1042 #undef FLD
1043 }
1044 
1045 /* rem: rem $dr,$sr */
1046 
1047 static SEM_PC
1048 SEM_FN_NAME (m32rbf,rem) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1049 {
1050 #define FLD(f) abuf->fields.sfmt_add.f
1051   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1052   int UNUSED written = 0;
1053   IADDR UNUSED pc = abuf->addr;
1054   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1055 
1056 if (NESI (* FLD (i_sr), 0)) {
1057   {
1058     SI opval = MODSI (* FLD (i_dr), * FLD (i_sr));
1059     * FLD (i_dr) = opval;
1060     written |= (1 << 2);
1061     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1062   }
1063 }
1064 
1065   abuf->written = written;
1066   return vpc;
1067 #undef FLD
1068 }
1069 
1070 /* remu: remu $dr,$sr */
1071 
1072 static SEM_PC
1073 SEM_FN_NAME (m32rbf,remu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1074 {
1075 #define FLD(f) abuf->fields.sfmt_add.f
1076   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1077   int UNUSED written = 0;
1078   IADDR UNUSED pc = abuf->addr;
1079   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1080 
1081 if (NESI (* FLD (i_sr), 0)) {
1082   {
1083     SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
1084     * FLD (i_dr) = opval;
1085     written |= (1 << 2);
1086     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1087   }
1088 }
1089 
1090   abuf->written = written;
1091   return vpc;
1092 #undef FLD
1093 }
1094 
1095 /* jl: jl $sr */
1096 
1097 static SEM_PC
1098 SEM_FN_NAME (m32rbf,jl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1099 {
1100 #define FLD(f) abuf->fields.sfmt_jl.f
1101   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1102   int UNUSED written = 0;
1103   IADDR UNUSED pc = abuf->addr;
1104   SEM_BRANCH_INIT
1105   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1106 
1107 {
1108   SI temp0;USI temp1;
1109   temp0 = ADDSI (ANDSI (pc, -4), 4);
1110   temp1 = ANDSI (* FLD (i_sr), -4);
1111   {
1112     SI opval = temp0;
1113     CPU (h_gr[((UINT) 14)]) = opval;
1114     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1115   }
1116   {
1117     USI opval = temp1;
1118     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1119     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1120   }
1121 }
1122 
1123   SEM_BRANCH_FINI (vpc);
1124   return vpc;
1125 #undef FLD
1126 }
1127 
1128 /* jmp: jmp $sr */
1129 
1130 static SEM_PC
1131 SEM_FN_NAME (m32rbf,jmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1132 {
1133 #define FLD(f) abuf->fields.sfmt_jl.f
1134   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1135   int UNUSED written = 0;
1136   IADDR UNUSED pc = abuf->addr;
1137   SEM_BRANCH_INIT
1138   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1139 
1140   {
1141     USI opval = ANDSI (* FLD (i_sr), -4);
1142     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1143     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1144   }
1145 
1146   SEM_BRANCH_FINI (vpc);
1147   return vpc;
1148 #undef FLD
1149 }
1150 
1151 /* ld: ld $dr,@$sr */
1152 
1153 static SEM_PC
1154 SEM_FN_NAME (m32rbf,ld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1155 {
1156 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1157   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1158   int UNUSED written = 0;
1159   IADDR UNUSED pc = abuf->addr;
1160   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1161 
1162   {
1163     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1164     * FLD (i_dr) = opval;
1165     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1166   }
1167 
1168   return vpc;
1169 #undef FLD
1170 }
1171 
1172 /* ld-d: ld $dr,@($slo16,$sr) */
1173 
1174 static SEM_PC
1175 SEM_FN_NAME (m32rbf,ld_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1176 {
1177 #define FLD(f) abuf->fields.sfmt_add3.f
1178   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1179   int UNUSED written = 0;
1180   IADDR UNUSED pc = abuf->addr;
1181   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1182 
1183   {
1184     SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)));
1185     * FLD (i_dr) = opval;
1186     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1187   }
1188 
1189   return vpc;
1190 #undef FLD
1191 }
1192 
1193 /* ldb: ldb $dr,@$sr */
1194 
1195 static SEM_PC
1196 SEM_FN_NAME (m32rbf,ldb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1197 {
1198 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1199   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1200   int UNUSED written = 0;
1201   IADDR UNUSED pc = abuf->addr;
1202   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1203 
1204   {
1205     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
1206     * FLD (i_dr) = opval;
1207     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1208   }
1209 
1210   return vpc;
1211 #undef FLD
1212 }
1213 
1214 /* ldb-d: ldb $dr,@($slo16,$sr) */
1215 
1216 static SEM_PC
1217 SEM_FN_NAME (m32rbf,ldb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1218 {
1219 #define FLD(f) abuf->fields.sfmt_add3.f
1220   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1221   int UNUSED written = 0;
1222   IADDR UNUSED pc = abuf->addr;
1223   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1224 
1225   {
1226     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1227     * FLD (i_dr) = opval;
1228     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1229   }
1230 
1231   return vpc;
1232 #undef FLD
1233 }
1234 
1235 /* ldh: ldh $dr,@$sr */
1236 
1237 static SEM_PC
1238 SEM_FN_NAME (m32rbf,ldh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1239 {
1240 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1241   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1242   int UNUSED written = 0;
1243   IADDR UNUSED pc = abuf->addr;
1244   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1245 
1246   {
1247     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
1248     * FLD (i_dr) = opval;
1249     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1250   }
1251 
1252   return vpc;
1253 #undef FLD
1254 }
1255 
1256 /* ldh-d: ldh $dr,@($slo16,$sr) */
1257 
1258 static SEM_PC
1259 SEM_FN_NAME (m32rbf,ldh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1260 {
1261 #define FLD(f) abuf->fields.sfmt_add3.f
1262   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1263   int UNUSED written = 0;
1264   IADDR UNUSED pc = abuf->addr;
1265   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1266 
1267   {
1268     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1269     * FLD (i_dr) = opval;
1270     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1271   }
1272 
1273   return vpc;
1274 #undef FLD
1275 }
1276 
1277 /* ldub: ldub $dr,@$sr */
1278 
1279 static SEM_PC
1280 SEM_FN_NAME (m32rbf,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1281 {
1282 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1283   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1284   int UNUSED written = 0;
1285   IADDR UNUSED pc = abuf->addr;
1286   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1287 
1288   {
1289     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
1290     * FLD (i_dr) = opval;
1291     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1292   }
1293 
1294   return vpc;
1295 #undef FLD
1296 }
1297 
1298 /* ldub-d: ldub $dr,@($slo16,$sr) */
1299 
1300 static SEM_PC
1301 SEM_FN_NAME (m32rbf,ldub_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1302 {
1303 #define FLD(f) abuf->fields.sfmt_add3.f
1304   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1305   int UNUSED written = 0;
1306   IADDR UNUSED pc = abuf->addr;
1307   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1308 
1309   {
1310     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1311     * FLD (i_dr) = opval;
1312     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1313   }
1314 
1315   return vpc;
1316 #undef FLD
1317 }
1318 
1319 /* lduh: lduh $dr,@$sr */
1320 
1321 static SEM_PC
1322 SEM_FN_NAME (m32rbf,lduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1323 {
1324 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1325   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1326   int UNUSED written = 0;
1327   IADDR UNUSED pc = abuf->addr;
1328   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1329 
1330   {
1331     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
1332     * FLD (i_dr) = opval;
1333     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1334   }
1335 
1336   return vpc;
1337 #undef FLD
1338 }
1339 
1340 /* lduh-d: lduh $dr,@($slo16,$sr) */
1341 
1342 static SEM_PC
1343 SEM_FN_NAME (m32rbf,lduh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1344 {
1345 #define FLD(f) abuf->fields.sfmt_add3.f
1346   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1347   int UNUSED written = 0;
1348   IADDR UNUSED pc = abuf->addr;
1349   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1350 
1351   {
1352     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1353     * FLD (i_dr) = opval;
1354     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1355   }
1356 
1357   return vpc;
1358 #undef FLD
1359 }
1360 
1361 /* ld-plus: ld $dr,@$sr+ */
1362 
1363 static SEM_PC
1364 SEM_FN_NAME (m32rbf,ld_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1365 {
1366 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1367   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1368   int UNUSED written = 0;
1369   IADDR UNUSED pc = abuf->addr;
1370   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1371 
1372 {
1373   SI temp0;SI temp1;
1374   temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1375   temp1 = ADDSI (* FLD (i_sr), 4);
1376   {
1377     SI opval = temp0;
1378     * FLD (i_dr) = opval;
1379     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1380   }
1381   {
1382     SI opval = temp1;
1383     * FLD (i_sr) = opval;
1384     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1385   }
1386 }
1387 
1388   return vpc;
1389 #undef FLD
1390 }
1391 
1392 /* ld24: ld24 $dr,$uimm24 */
1393 
1394 static SEM_PC
1395 SEM_FN_NAME (m32rbf,ld24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1396 {
1397 #define FLD(f) abuf->fields.sfmt_ld24.f
1398   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1399   int UNUSED written = 0;
1400   IADDR UNUSED pc = abuf->addr;
1401   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1402 
1403   {
1404     SI opval = FLD (i_uimm24);
1405     * FLD (i_dr) = opval;
1406     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1407   }
1408 
1409   return vpc;
1410 #undef FLD
1411 }
1412 
1413 /* ldi8: ldi8 $dr,$simm8 */
1414 
1415 static SEM_PC
1416 SEM_FN_NAME (m32rbf,ldi8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1417 {
1418 #define FLD(f) abuf->fields.sfmt_addi.f
1419   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1420   int UNUSED written = 0;
1421   IADDR UNUSED pc = abuf->addr;
1422   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1423 
1424   {
1425     SI opval = FLD (f_simm8);
1426     * FLD (i_dr) = opval;
1427     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1428   }
1429 
1430   return vpc;
1431 #undef FLD
1432 }
1433 
1434 /* ldi16: ldi16 $dr,$hash$slo16 */
1435 
1436 static SEM_PC
1437 SEM_FN_NAME (m32rbf,ldi16) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1438 {
1439 #define FLD(f) abuf->fields.sfmt_add3.f
1440   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1441   int UNUSED written = 0;
1442   IADDR UNUSED pc = abuf->addr;
1443   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1444 
1445   {
1446     SI opval = FLD (f_simm16);
1447     * FLD (i_dr) = opval;
1448     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1449   }
1450 
1451   return vpc;
1452 #undef FLD
1453 }
1454 
1455 /* lock: lock $dr,@$sr */
1456 
1457 static SEM_PC
1458 SEM_FN_NAME (m32rbf,lock) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1459 {
1460 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1461   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1462   int UNUSED written = 0;
1463   IADDR UNUSED pc = abuf->addr;
1464   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1465 
1466 {
1467   {
1468     BI opval = 1;
1469     CPU (h_lock) = opval;
1470     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
1471   }
1472   {
1473     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1474     * FLD (i_dr) = opval;
1475     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1476   }
1477 }
1478 
1479   return vpc;
1480 #undef FLD
1481 }
1482 
1483 /* machi: machi $src1,$src2 */
1484 
1485 static SEM_PC
1486 SEM_FN_NAME (m32rbf,machi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1487 {
1488 #define FLD(f) abuf->fields.sfmt_st_plus.f
1489   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1490   int UNUSED written = 0;
1491   IADDR UNUSED pc = abuf->addr;
1492   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1493 
1494   {
1495     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
1496     SET_H_ACCUM (opval);
1497     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1498   }
1499 
1500   return vpc;
1501 #undef FLD
1502 }
1503 
1504 /* maclo: maclo $src1,$src2 */
1505 
1506 static SEM_PC
1507 SEM_FN_NAME (m32rbf,maclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1508 {
1509 #define FLD(f) abuf->fields.sfmt_st_plus.f
1510   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1511   int UNUSED written = 0;
1512   IADDR UNUSED pc = abuf->addr;
1513   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1514 
1515   {
1516     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
1517     SET_H_ACCUM (opval);
1518     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1519   }
1520 
1521   return vpc;
1522 #undef FLD
1523 }
1524 
1525 /* macwhi: macwhi $src1,$src2 */
1526 
1527 static SEM_PC
1528 SEM_FN_NAME (m32rbf,macwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1529 {
1530 #define FLD(f) abuf->fields.sfmt_st_plus.f
1531   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1532   int UNUSED written = 0;
1533   IADDR UNUSED pc = abuf->addr;
1534   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1535 
1536   {
1537     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
1538     SET_H_ACCUM (opval);
1539     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1540   }
1541 
1542   return vpc;
1543 #undef FLD
1544 }
1545 
1546 /* macwlo: macwlo $src1,$src2 */
1547 
1548 static SEM_PC
1549 SEM_FN_NAME (m32rbf,macwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1550 {
1551 #define FLD(f) abuf->fields.sfmt_st_plus.f
1552   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1553   int UNUSED written = 0;
1554   IADDR UNUSED pc = abuf->addr;
1555   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1556 
1557   {
1558     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
1559     SET_H_ACCUM (opval);
1560     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1561   }
1562 
1563   return vpc;
1564 #undef FLD
1565 }
1566 
1567 /* mul: mul $dr,$sr */
1568 
1569 static SEM_PC
1570 SEM_FN_NAME (m32rbf,mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1571 {
1572 #define FLD(f) abuf->fields.sfmt_add.f
1573   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1574   int UNUSED written = 0;
1575   IADDR UNUSED pc = abuf->addr;
1576   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1577 
1578   {
1579     SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
1580     * FLD (i_dr) = opval;
1581     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1582   }
1583 
1584   return vpc;
1585 #undef FLD
1586 }
1587 
1588 /* mulhi: mulhi $src1,$src2 */
1589 
1590 static SEM_PC
1591 SEM_FN_NAME (m32rbf,mulhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1592 {
1593 #define FLD(f) abuf->fields.sfmt_st_plus.f
1594   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1595   int UNUSED written = 0;
1596   IADDR UNUSED pc = abuf->addr;
1597   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1598 
1599   {
1600     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
1601     SET_H_ACCUM (opval);
1602     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1603   }
1604 
1605   return vpc;
1606 #undef FLD
1607 }
1608 
1609 /* mullo: mullo $src1,$src2 */
1610 
1611 static SEM_PC
1612 SEM_FN_NAME (m32rbf,mullo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1613 {
1614 #define FLD(f) abuf->fields.sfmt_st_plus.f
1615   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1616   int UNUSED written = 0;
1617   IADDR UNUSED pc = abuf->addr;
1618   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1619 
1620   {
1621     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
1622     SET_H_ACCUM (opval);
1623     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1624   }
1625 
1626   return vpc;
1627 #undef FLD
1628 }
1629 
1630 /* mulwhi: mulwhi $src1,$src2 */
1631 
1632 static SEM_PC
1633 SEM_FN_NAME (m32rbf,mulwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1634 {
1635 #define FLD(f) abuf->fields.sfmt_st_plus.f
1636   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1637   int UNUSED written = 0;
1638   IADDR UNUSED pc = abuf->addr;
1639   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1640 
1641   {
1642     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 8), 8);
1643     SET_H_ACCUM (opval);
1644     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1645   }
1646 
1647   return vpc;
1648 #undef FLD
1649 }
1650 
1651 /* mulwlo: mulwlo $src1,$src2 */
1652 
1653 static SEM_PC
1654 SEM_FN_NAME (m32rbf,mulwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1655 {
1656 #define FLD(f) abuf->fields.sfmt_st_plus.f
1657   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1658   int UNUSED written = 0;
1659   IADDR UNUSED pc = abuf->addr;
1660   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1661 
1662   {
1663     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 8), 8);
1664     SET_H_ACCUM (opval);
1665     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1666   }
1667 
1668   return vpc;
1669 #undef FLD
1670 }
1671 
1672 /* mv: mv $dr,$sr */
1673 
1674 static SEM_PC
1675 SEM_FN_NAME (m32rbf,mv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1676 {
1677 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1678   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1679   int UNUSED written = 0;
1680   IADDR UNUSED pc = abuf->addr;
1681   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1682 
1683   {
1684     SI opval = * FLD (i_sr);
1685     * FLD (i_dr) = opval;
1686     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1687   }
1688 
1689   return vpc;
1690 #undef FLD
1691 }
1692 
1693 /* mvfachi: mvfachi $dr */
1694 
1695 static SEM_PC
1696 SEM_FN_NAME (m32rbf,mvfachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1697 {
1698 #define FLD(f) abuf->fields.sfmt_seth.f
1699   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1700   int UNUSED written = 0;
1701   IADDR UNUSED pc = abuf->addr;
1702   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1703 
1704   {
1705     SI opval = TRUNCDISI (SRADI (GET_H_ACCUM (), 32));
1706     * FLD (i_dr) = opval;
1707     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1708   }
1709 
1710   return vpc;
1711 #undef FLD
1712 }
1713 
1714 /* mvfaclo: mvfaclo $dr */
1715 
1716 static SEM_PC
1717 SEM_FN_NAME (m32rbf,mvfaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1718 {
1719 #define FLD(f) abuf->fields.sfmt_seth.f
1720   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1721   int UNUSED written = 0;
1722   IADDR UNUSED pc = abuf->addr;
1723   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1724 
1725   {
1726     SI opval = TRUNCDISI (GET_H_ACCUM ());
1727     * FLD (i_dr) = opval;
1728     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1729   }
1730 
1731   return vpc;
1732 #undef FLD
1733 }
1734 
1735 /* mvfacmi: mvfacmi $dr */
1736 
1737 static SEM_PC
1738 SEM_FN_NAME (m32rbf,mvfacmi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1739 {
1740 #define FLD(f) abuf->fields.sfmt_seth.f
1741   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1742   int UNUSED written = 0;
1743   IADDR UNUSED pc = abuf->addr;
1744   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1745 
1746   {
1747     SI opval = TRUNCDISI (SRADI (GET_H_ACCUM (), 16));
1748     * FLD (i_dr) = opval;
1749     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1750   }
1751 
1752   return vpc;
1753 #undef FLD
1754 }
1755 
1756 /* mvfc: mvfc $dr,$scr */
1757 
1758 static SEM_PC
1759 SEM_FN_NAME (m32rbf,mvfc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1760 {
1761 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1762   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1763   int UNUSED written = 0;
1764   IADDR UNUSED pc = abuf->addr;
1765   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1766 
1767   {
1768     SI opval = GET_H_CR (FLD (f_r2));
1769     * FLD (i_dr) = opval;
1770     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1771   }
1772 
1773   return vpc;
1774 #undef FLD
1775 }
1776 
1777 /* mvtachi: mvtachi $src1 */
1778 
1779 static SEM_PC
1780 SEM_FN_NAME (m32rbf,mvtachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1781 {
1782 #define FLD(f) abuf->fields.sfmt_st_plus.f
1783   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1784   int UNUSED written = 0;
1785   IADDR UNUSED pc = abuf->addr;
1786   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1787 
1788   {
1789     DI opval = ORDI (ANDDI (GET_H_ACCUM (), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
1790     SET_H_ACCUM (opval);
1791     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1792   }
1793 
1794   return vpc;
1795 #undef FLD
1796 }
1797 
1798 /* mvtaclo: mvtaclo $src1 */
1799 
1800 static SEM_PC
1801 SEM_FN_NAME (m32rbf,mvtaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1802 {
1803 #define FLD(f) abuf->fields.sfmt_st_plus.f
1804   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1805   int UNUSED written = 0;
1806   IADDR UNUSED pc = abuf->addr;
1807   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1808 
1809   {
1810     DI opval = ORDI (ANDDI (GET_H_ACCUM (), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
1811     SET_H_ACCUM (opval);
1812     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1813   }
1814 
1815   return vpc;
1816 #undef FLD
1817 }
1818 
1819 /* mvtc: mvtc $sr,$dcr */
1820 
1821 static SEM_PC
1822 SEM_FN_NAME (m32rbf,mvtc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1823 {
1824 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1825   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1826   int UNUSED written = 0;
1827   IADDR UNUSED pc = abuf->addr;
1828   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1829 
1830   {
1831     USI opval = * FLD (i_sr);
1832     SET_H_CR (FLD (f_r1), opval);
1833     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
1834   }
1835 
1836   return vpc;
1837 #undef FLD
1838 }
1839 
1840 /* neg: neg $dr,$sr */
1841 
1842 static SEM_PC
1843 SEM_FN_NAME (m32rbf,neg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1844 {
1845 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1846   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1847   int UNUSED written = 0;
1848   IADDR UNUSED pc = abuf->addr;
1849   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1850 
1851   {
1852     SI opval = NEGSI (* FLD (i_sr));
1853     * FLD (i_dr) = opval;
1854     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1855   }
1856 
1857   return vpc;
1858 #undef FLD
1859 }
1860 
1861 /* nop: nop */
1862 
1863 static SEM_PC
1864 SEM_FN_NAME (m32rbf,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1865 {
1866 #define FLD(f) abuf->fields.sfmt_empty.f
1867   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1868   int UNUSED written = 0;
1869   IADDR UNUSED pc = abuf->addr;
1870   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1871 
1872 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
1873 
1874   return vpc;
1875 #undef FLD
1876 }
1877 
1878 /* not: not $dr,$sr */
1879 
1880 static SEM_PC
1881 SEM_FN_NAME (m32rbf,not) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1882 {
1883 #define FLD(f) abuf->fields.sfmt_ld_plus.f
1884   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1885   int UNUSED written = 0;
1886   IADDR UNUSED pc = abuf->addr;
1887   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1888 
1889   {
1890     SI opval = INVSI (* FLD (i_sr));
1891     * FLD (i_dr) = opval;
1892     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1893   }
1894 
1895   return vpc;
1896 #undef FLD
1897 }
1898 
1899 /* rac: rac */
1900 
1901 static SEM_PC
1902 SEM_FN_NAME (m32rbf,rac) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1903 {
1904 #define FLD(f) abuf->fields.sfmt_empty.f
1905   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1906   int UNUSED written = 0;
1907   IADDR UNUSED pc = abuf->addr;
1908   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1909 
1910 {
1911   DI tmp_tmp1;
1912   tmp_tmp1 = SLLDI (GET_H_ACCUM (), 1);
1913   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
1914   {
1915     DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000)));
1916     SET_H_ACCUM (opval);
1917     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1918   }
1919 }
1920 
1921   return vpc;
1922 #undef FLD
1923 }
1924 
1925 /* rach: rach */
1926 
1927 static SEM_PC
1928 SEM_FN_NAME (m32rbf,rach) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1929 {
1930 #define FLD(f) abuf->fields.sfmt_empty.f
1931   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1932   int UNUSED written = 0;
1933   IADDR UNUSED pc = abuf->addr;
1934   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1935 
1936 {
1937   DI tmp_tmp1;
1938   tmp_tmp1 = ANDDI (GET_H_ACCUM (), MAKEDI (16777215, 0xffffffff));
1939 if (ANDIF (GEDI (tmp_tmp1, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) {
1940   tmp_tmp1 = MAKEDI (16383, 0x80000000);
1941 } else {
1942 if (ANDIF (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) {
1943   tmp_tmp1 = MAKEDI (16760832, 0);
1944 } else {
1945   tmp_tmp1 = ANDDI (ADDDI (GET_H_ACCUM (), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
1946 }
1947 }
1948   tmp_tmp1 = SLLDI (tmp_tmp1, 1);
1949   {
1950     DI opval = SRADI (SLLDI (tmp_tmp1, 7), 7);
1951     SET_H_ACCUM (opval);
1952     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
1953   }
1954 }
1955 
1956   return vpc;
1957 #undef FLD
1958 }
1959 
1960 /* rte: rte */
1961 
1962 static SEM_PC
1963 SEM_FN_NAME (m32rbf,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1964 {
1965 #define FLD(f) abuf->fields.sfmt_empty.f
1966   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1967   int UNUSED written = 0;
1968   IADDR UNUSED pc = abuf->addr;
1969   SEM_BRANCH_INIT
1970   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1971 
1972 {
1973   {
1974     USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4);
1975     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1976     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1977   }
1978   {
1979     USI opval = GET_H_CR (((UINT) 14));
1980     SET_H_CR (((UINT) 6), opval);
1981     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
1982   }
1983   {
1984     UQI opval = CPU (h_bpsw);
1985     SET_H_PSW (opval);
1986     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
1987   }
1988   {
1989     UQI opval = CPU (h_bbpsw);
1990     CPU (h_bpsw) = opval;
1991     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
1992   }
1993 }
1994 
1995   SEM_BRANCH_FINI (vpc);
1996   return vpc;
1997 #undef FLD
1998 }
1999 
2000 /* seth: seth $dr,$hash$hi16 */
2001 
2002 static SEM_PC
2003 SEM_FN_NAME (m32rbf,seth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2004 {
2005 #define FLD(f) abuf->fields.sfmt_seth.f
2006   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2007   int UNUSED written = 0;
2008   IADDR UNUSED pc = abuf->addr;
2009   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2010 
2011   {
2012     SI opval = SLLSI (FLD (f_hi16), 16);
2013     * FLD (i_dr) = opval;
2014     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2015   }
2016 
2017   return vpc;
2018 #undef FLD
2019 }
2020 
2021 /* sll: sll $dr,$sr */
2022 
2023 static SEM_PC
2024 SEM_FN_NAME (m32rbf,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2025 {
2026 #define FLD(f) abuf->fields.sfmt_add.f
2027   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2028   int UNUSED written = 0;
2029   IADDR UNUSED pc = abuf->addr;
2030   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2031 
2032   {
2033     SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2034     * FLD (i_dr) = opval;
2035     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2036   }
2037 
2038   return vpc;
2039 #undef FLD
2040 }
2041 
2042 /* sll3: sll3 $dr,$sr,$simm16 */
2043 
2044 static SEM_PC
2045 SEM_FN_NAME (m32rbf,sll3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2046 {
2047 #define FLD(f) abuf->fields.sfmt_add3.f
2048   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2049   int UNUSED written = 0;
2050   IADDR UNUSED pc = abuf->addr;
2051   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2052 
2053   {
2054     SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2055     * FLD (i_dr) = opval;
2056     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2057   }
2058 
2059   return vpc;
2060 #undef FLD
2061 }
2062 
2063 /* slli: slli $dr,$uimm5 */
2064 
2065 static SEM_PC
2066 SEM_FN_NAME (m32rbf,slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2067 {
2068 #define FLD(f) abuf->fields.sfmt_slli.f
2069   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2070   int UNUSED written = 0;
2071   IADDR UNUSED pc = abuf->addr;
2072   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2073 
2074   {
2075     SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
2076     * FLD (i_dr) = opval;
2077     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2078   }
2079 
2080   return vpc;
2081 #undef FLD
2082 }
2083 
2084 /* sra: sra $dr,$sr */
2085 
2086 static SEM_PC
2087 SEM_FN_NAME (m32rbf,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2088 {
2089 #define FLD(f) abuf->fields.sfmt_add.f
2090   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2091   int UNUSED written = 0;
2092   IADDR UNUSED pc = abuf->addr;
2093   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2094 
2095   {
2096     SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2097     * FLD (i_dr) = opval;
2098     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2099   }
2100 
2101   return vpc;
2102 #undef FLD
2103 }
2104 
2105 /* sra3: sra3 $dr,$sr,$simm16 */
2106 
2107 static SEM_PC
2108 SEM_FN_NAME (m32rbf,sra3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2109 {
2110 #define FLD(f) abuf->fields.sfmt_add3.f
2111   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2112   int UNUSED written = 0;
2113   IADDR UNUSED pc = abuf->addr;
2114   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2115 
2116   {
2117     SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2118     * FLD (i_dr) = opval;
2119     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2120   }
2121 
2122   return vpc;
2123 #undef FLD
2124 }
2125 
2126 /* srai: srai $dr,$uimm5 */
2127 
2128 static SEM_PC
2129 SEM_FN_NAME (m32rbf,srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2130 {
2131 #define FLD(f) abuf->fields.sfmt_slli.f
2132   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2133   int UNUSED written = 0;
2134   IADDR UNUSED pc = abuf->addr;
2135   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2136 
2137   {
2138     SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
2139     * FLD (i_dr) = opval;
2140     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2141   }
2142 
2143   return vpc;
2144 #undef FLD
2145 }
2146 
2147 /* srl: srl $dr,$sr */
2148 
2149 static SEM_PC
2150 SEM_FN_NAME (m32rbf,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2151 {
2152 #define FLD(f) abuf->fields.sfmt_add.f
2153   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2154   int UNUSED written = 0;
2155   IADDR UNUSED pc = abuf->addr;
2156   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2157 
2158   {
2159     SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2160     * FLD (i_dr) = opval;
2161     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2162   }
2163 
2164   return vpc;
2165 #undef FLD
2166 }
2167 
2168 /* srl3: srl3 $dr,$sr,$simm16 */
2169 
2170 static SEM_PC
2171 SEM_FN_NAME (m32rbf,srl3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2172 {
2173 #define FLD(f) abuf->fields.sfmt_add3.f
2174   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2175   int UNUSED written = 0;
2176   IADDR UNUSED pc = abuf->addr;
2177   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2178 
2179   {
2180     SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2181     * FLD (i_dr) = opval;
2182     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2183   }
2184 
2185   return vpc;
2186 #undef FLD
2187 }
2188 
2189 /* srli: srli $dr,$uimm5 */
2190 
2191 static SEM_PC
2192 SEM_FN_NAME (m32rbf,srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2193 {
2194 #define FLD(f) abuf->fields.sfmt_slli.f
2195   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2196   int UNUSED written = 0;
2197   IADDR UNUSED pc = abuf->addr;
2198   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2199 
2200   {
2201     SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
2202     * FLD (i_dr) = opval;
2203     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2204   }
2205 
2206   return vpc;
2207 #undef FLD
2208 }
2209 
2210 /* st: st $src1,@$src2 */
2211 
2212 static SEM_PC
2213 SEM_FN_NAME (m32rbf,st) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2214 {
2215 #define FLD(f) abuf->fields.sfmt_st_plus.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, 2);
2220 
2221   {
2222     SI opval = * FLD (i_src1);
2223     SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
2224     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2225   }
2226 
2227   return vpc;
2228 #undef FLD
2229 }
2230 
2231 /* st-d: st $src1,@($slo16,$src2) */
2232 
2233 static SEM_PC
2234 SEM_FN_NAME (m32rbf,st_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2235 {
2236 #define FLD(f) abuf->fields.sfmt_st_d.f
2237   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2238   int UNUSED written = 0;
2239   IADDR UNUSED pc = abuf->addr;
2240   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2241 
2242   {
2243     SI opval = * FLD (i_src1);
2244     SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2245     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2246   }
2247 
2248   return vpc;
2249 #undef FLD
2250 }
2251 
2252 /* stb: stb $src1,@$src2 */
2253 
2254 static SEM_PC
2255 SEM_FN_NAME (m32rbf,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2256 {
2257 #define FLD(f) abuf->fields.sfmt_st_plus.f
2258   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2259   int UNUSED written = 0;
2260   IADDR UNUSED pc = abuf->addr;
2261   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2262 
2263   {
2264     QI opval = * FLD (i_src1);
2265     SETMEMQI (current_cpu, pc, * FLD (i_src2), opval);
2266     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2267   }
2268 
2269   return vpc;
2270 #undef FLD
2271 }
2272 
2273 /* stb-d: stb $src1,@($slo16,$src2) */
2274 
2275 static SEM_PC
2276 SEM_FN_NAME (m32rbf,stb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2277 {
2278 #define FLD(f) abuf->fields.sfmt_st_d.f
2279   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2280   int UNUSED written = 0;
2281   IADDR UNUSED pc = abuf->addr;
2282   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2283 
2284   {
2285     QI opval = * FLD (i_src1);
2286     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2287     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2288   }
2289 
2290   return vpc;
2291 #undef FLD
2292 }
2293 
2294 /* sth: sth $src1,@$src2 */
2295 
2296 static SEM_PC
2297 SEM_FN_NAME (m32rbf,sth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2298 {
2299 #define FLD(f) abuf->fields.sfmt_st_plus.f
2300   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2301   int UNUSED written = 0;
2302   IADDR UNUSED pc = abuf->addr;
2303   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2304 
2305   {
2306     HI opval = * FLD (i_src1);
2307     SETMEMHI (current_cpu, pc, * FLD (i_src2), opval);
2308     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2309   }
2310 
2311   return vpc;
2312 #undef FLD
2313 }
2314 
2315 /* sth-d: sth $src1,@($slo16,$src2) */
2316 
2317 static SEM_PC
2318 SEM_FN_NAME (m32rbf,sth_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2319 {
2320 #define FLD(f) abuf->fields.sfmt_st_d.f
2321   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2322   int UNUSED written = 0;
2323   IADDR UNUSED pc = abuf->addr;
2324   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2325 
2326   {
2327     HI opval = * FLD (i_src1);
2328     SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2329     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2330   }
2331 
2332   return vpc;
2333 #undef FLD
2334 }
2335 
2336 /* st-plus: st $src1,@+$src2 */
2337 
2338 static SEM_PC
2339 SEM_FN_NAME (m32rbf,st_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2340 {
2341 #define FLD(f) abuf->fields.sfmt_st_plus.f
2342   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2343   int UNUSED written = 0;
2344   IADDR UNUSED pc = abuf->addr;
2345   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2346 
2347 {
2348   SI tmp_new_src2;
2349   tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
2350   {
2351     SI opval = * FLD (i_src1);
2352     SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2353     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2354   }
2355   {
2356     SI opval = tmp_new_src2;
2357     * FLD (i_src2) = opval;
2358     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2359   }
2360 }
2361 
2362   return vpc;
2363 #undef FLD
2364 }
2365 
2366 /* st-minus: st $src1,@-$src2 */
2367 
2368 static SEM_PC
2369 SEM_FN_NAME (m32rbf,st_minus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2370 {
2371 #define FLD(f) abuf->fields.sfmt_st_plus.f
2372   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2373   int UNUSED written = 0;
2374   IADDR UNUSED pc = abuf->addr;
2375   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2376 
2377 {
2378   SI tmp_new_src2;
2379   tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
2380   {
2381     SI opval = * FLD (i_src1);
2382     SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2383     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2384   }
2385   {
2386     SI opval = tmp_new_src2;
2387     * FLD (i_src2) = opval;
2388     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2389   }
2390 }
2391 
2392   return vpc;
2393 #undef FLD
2394 }
2395 
2396 /* sub: sub $dr,$sr */
2397 
2398 static SEM_PC
2399 SEM_FN_NAME (m32rbf,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2400 {
2401 #define FLD(f) abuf->fields.sfmt_add.f
2402   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2403   int UNUSED written = 0;
2404   IADDR UNUSED pc = abuf->addr;
2405   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2406 
2407   {
2408     SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
2409     * FLD (i_dr) = opval;
2410     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2411   }
2412 
2413   return vpc;
2414 #undef FLD
2415 }
2416 
2417 /* subv: subv $dr,$sr */
2418 
2419 static SEM_PC
2420 SEM_FN_NAME (m32rbf,subv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2421 {
2422 #define FLD(f) abuf->fields.sfmt_add.f
2423   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2424   int UNUSED written = 0;
2425   IADDR UNUSED pc = abuf->addr;
2426   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2427 
2428 {
2429   SI temp0;BI temp1;
2430   temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
2431   temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
2432   {
2433     SI opval = temp0;
2434     * FLD (i_dr) = opval;
2435     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2436   }
2437   {
2438     BI opval = temp1;
2439     CPU (h_cond) = opval;
2440     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
2441   }
2442 }
2443 
2444   return vpc;
2445 #undef FLD
2446 }
2447 
2448 /* subx: subx $dr,$sr */
2449 
2450 static SEM_PC
2451 SEM_FN_NAME (m32rbf,subx) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2452 {
2453 #define FLD(f) abuf->fields.sfmt_add.f
2454   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2455   int UNUSED written = 0;
2456   IADDR UNUSED pc = abuf->addr;
2457   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2458 
2459 {
2460   SI temp0;BI temp1;
2461   temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
2462   temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
2463   {
2464     SI opval = temp0;
2465     * FLD (i_dr) = opval;
2466     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2467   }
2468   {
2469     BI opval = temp1;
2470     CPU (h_cond) = opval;
2471     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
2472   }
2473 }
2474 
2475   return vpc;
2476 #undef FLD
2477 }
2478 
2479 /* trap: trap $uimm4 */
2480 
2481 static SEM_PC
2482 SEM_FN_NAME (m32rbf,trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2483 {
2484 #define FLD(f) abuf->fields.sfmt_trap.f
2485   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2486   int UNUSED written = 0;
2487   IADDR UNUSED pc = abuf->addr;
2488   SEM_BRANCH_INIT
2489   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2490 
2491 {
2492   {
2493     USI opval = GET_H_CR (((UINT) 6));
2494     SET_H_CR (((UINT) 14), opval);
2495     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
2496   }
2497   {
2498     USI opval = ADDSI (pc, 4);
2499     SET_H_CR (((UINT) 6), opval);
2500     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
2501   }
2502   {
2503     UQI opval = CPU (h_bpsw);
2504     CPU (h_bbpsw) = opval;
2505     CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
2506   }
2507   {
2508     UQI opval = GET_H_PSW ();
2509     CPU (h_bpsw) = opval;
2510     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
2511   }
2512   {
2513     UQI opval = ANDQI (GET_H_PSW (), 128);
2514     SET_H_PSW (opval);
2515     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
2516   }
2517   {
2518     SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));
2519     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2520     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
2521   }
2522 }
2523 
2524   SEM_BRANCH_FINI (vpc);
2525   return vpc;
2526 #undef FLD
2527 }
2528 
2529 /* unlock: unlock $src1,@$src2 */
2530 
2531 static SEM_PC
2532 SEM_FN_NAME (m32rbf,unlock) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2533 {
2534 #define FLD(f) abuf->fields.sfmt_st_plus.f
2535   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2536   int UNUSED written = 0;
2537   IADDR UNUSED pc = abuf->addr;
2538   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2539 
2540 {
2541 if (CPU (h_lock)) {
2542   {
2543     SI opval = * FLD (i_src1);
2544     SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
2545     written |= (1 << 4);
2546     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2547   }
2548 }
2549   {
2550     BI opval = 0;
2551     CPU (h_lock) = opval;
2552     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
2553   }
2554 }
2555 
2556   abuf->written = written;
2557   return vpc;
2558 #undef FLD
2559 }
2560 
2561 /* clrpsw: clrpsw $uimm8 */
2562 
2563 static SEM_PC
2564 SEM_FN_NAME (m32rbf,clrpsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2565 {
2566 #define FLD(f) abuf->fields.sfmt_clrpsw.f
2567   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2568   int UNUSED written = 0;
2569   IADDR UNUSED pc = abuf->addr;
2570   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2571 
2572   {
2573     USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280));
2574     SET_H_CR (((UINT) 0), opval);
2575     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
2576   }
2577 
2578   return vpc;
2579 #undef FLD
2580 }
2581 
2582 /* setpsw: setpsw $uimm8 */
2583 
2584 static SEM_PC
2585 SEM_FN_NAME (m32rbf,setpsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2586 {
2587 #define FLD(f) abuf->fields.sfmt_clrpsw.f
2588   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2589   int UNUSED written = 0;
2590   IADDR UNUSED pc = abuf->addr;
2591   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2592 
2593   {
2594     USI opval = FLD (f_uimm8);
2595     SET_H_CR (((UINT) 0), opval);
2596     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
2597   }
2598 
2599   return vpc;
2600 #undef FLD
2601 }
2602 
2603 /* bset: bset $uimm3,@($slo16,$sr) */
2604 
2605 static SEM_PC
2606 SEM_FN_NAME (m32rbf,bset) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2607 {
2608 #define FLD(f) abuf->fields.sfmt_bset.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   {
2615     QI opval = ORQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLQI (1, SUBSI (7, FLD (f_uimm3))));
2616     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
2617     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2618   }
2619 
2620   return vpc;
2621 #undef FLD
2622 }
2623 
2624 /* bclr: bclr $uimm3,@($slo16,$sr) */
2625 
2626 static SEM_PC
2627 SEM_FN_NAME (m32rbf,bclr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2628 {
2629 #define FLD(f) abuf->fields.sfmt_bset.f
2630   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2631   int UNUSED written = 0;
2632   IADDR UNUSED pc = abuf->addr;
2633   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2634 
2635   {
2636     QI opval = ANDQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLQI (1, SUBSI (7, FLD (f_uimm3)))));
2637     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
2638     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2639   }
2640 
2641   return vpc;
2642 #undef FLD
2643 }
2644 
2645 /* btst: btst $uimm3,$sr */
2646 
2647 static SEM_PC
2648 SEM_FN_NAME (m32rbf,btst) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2649 {
2650 #define FLD(f) abuf->fields.sfmt_bset.f
2651   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2652   int UNUSED written = 0;
2653   IADDR UNUSED pc = abuf->addr;
2654   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2655 
2656   {
2657     BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1);
2658     CPU (h_cond) = opval;
2659     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
2660   }
2661 
2662   return vpc;
2663 #undef FLD
2664 }
2665 
2666 /* Table of all semantic fns.  */
2667 
2668 static const struct sem_fn_desc sem_fns[] = {
2669   { M32RBF_INSN_X_INVALID, SEM_FN_NAME (m32rbf,x_invalid) },
2670   { M32RBF_INSN_X_AFTER, SEM_FN_NAME (m32rbf,x_after) },
2671   { M32RBF_INSN_X_BEFORE, SEM_FN_NAME (m32rbf,x_before) },
2672   { M32RBF_INSN_X_CTI_CHAIN, SEM_FN_NAME (m32rbf,x_cti_chain) },
2673   { M32RBF_INSN_X_CHAIN, SEM_FN_NAME (m32rbf,x_chain) },
2674   { M32RBF_INSN_X_BEGIN, SEM_FN_NAME (m32rbf,x_begin) },
2675   { M32RBF_INSN_ADD, SEM_FN_NAME (m32rbf,add) },
2676   { M32RBF_INSN_ADD3, SEM_FN_NAME (m32rbf,add3) },
2677   { M32RBF_INSN_AND, SEM_FN_NAME (m32rbf,and) },
2678   { M32RBF_INSN_AND3, SEM_FN_NAME (m32rbf,and3) },
2679   { M32RBF_INSN_OR, SEM_FN_NAME (m32rbf,or) },
2680   { M32RBF_INSN_OR3, SEM_FN_NAME (m32rbf,or3) },
2681   { M32RBF_INSN_XOR, SEM_FN_NAME (m32rbf,xor) },
2682   { M32RBF_INSN_XOR3, SEM_FN_NAME (m32rbf,xor3) },
2683   { M32RBF_INSN_ADDI, SEM_FN_NAME (m32rbf,addi) },
2684   { M32RBF_INSN_ADDV, SEM_FN_NAME (m32rbf,addv) },
2685   { M32RBF_INSN_ADDV3, SEM_FN_NAME (m32rbf,addv3) },
2686   { M32RBF_INSN_ADDX, SEM_FN_NAME (m32rbf,addx) },
2687   { M32RBF_INSN_BC8, SEM_FN_NAME (m32rbf,bc8) },
2688   { M32RBF_INSN_BC24, SEM_FN_NAME (m32rbf,bc24) },
2689   { M32RBF_INSN_BEQ, SEM_FN_NAME (m32rbf,beq) },
2690   { M32RBF_INSN_BEQZ, SEM_FN_NAME (m32rbf,beqz) },
2691   { M32RBF_INSN_BGEZ, SEM_FN_NAME (m32rbf,bgez) },
2692   { M32RBF_INSN_BGTZ, SEM_FN_NAME (m32rbf,bgtz) },
2693   { M32RBF_INSN_BLEZ, SEM_FN_NAME (m32rbf,blez) },
2694   { M32RBF_INSN_BLTZ, SEM_FN_NAME (m32rbf,bltz) },
2695   { M32RBF_INSN_BNEZ, SEM_FN_NAME (m32rbf,bnez) },
2696   { M32RBF_INSN_BL8, SEM_FN_NAME (m32rbf,bl8) },
2697   { M32RBF_INSN_BL24, SEM_FN_NAME (m32rbf,bl24) },
2698   { M32RBF_INSN_BNC8, SEM_FN_NAME (m32rbf,bnc8) },
2699   { M32RBF_INSN_BNC24, SEM_FN_NAME (m32rbf,bnc24) },
2700   { M32RBF_INSN_BNE, SEM_FN_NAME (m32rbf,bne) },
2701   { M32RBF_INSN_BRA8, SEM_FN_NAME (m32rbf,bra8) },
2702   { M32RBF_INSN_BRA24, SEM_FN_NAME (m32rbf,bra24) },
2703   { M32RBF_INSN_CMP, SEM_FN_NAME (m32rbf,cmp) },
2704   { M32RBF_INSN_CMPI, SEM_FN_NAME (m32rbf,cmpi) },
2705   { M32RBF_INSN_CMPU, SEM_FN_NAME (m32rbf,cmpu) },
2706   { M32RBF_INSN_CMPUI, SEM_FN_NAME (m32rbf,cmpui) },
2707   { M32RBF_INSN_DIV, SEM_FN_NAME (m32rbf,div) },
2708   { M32RBF_INSN_DIVU, SEM_FN_NAME (m32rbf,divu) },
2709   { M32RBF_INSN_REM, SEM_FN_NAME (m32rbf,rem) },
2710   { M32RBF_INSN_REMU, SEM_FN_NAME (m32rbf,remu) },
2711   { M32RBF_INSN_JL, SEM_FN_NAME (m32rbf,jl) },
2712   { M32RBF_INSN_JMP, SEM_FN_NAME (m32rbf,jmp) },
2713   { M32RBF_INSN_LD, SEM_FN_NAME (m32rbf,ld) },
2714   { M32RBF_INSN_LD_D, SEM_FN_NAME (m32rbf,ld_d) },
2715   { M32RBF_INSN_LDB, SEM_FN_NAME (m32rbf,ldb) },
2716   { M32RBF_INSN_LDB_D, SEM_FN_NAME (m32rbf,ldb_d) },
2717   { M32RBF_INSN_LDH, SEM_FN_NAME (m32rbf,ldh) },
2718   { M32RBF_INSN_LDH_D, SEM_FN_NAME (m32rbf,ldh_d) },
2719   { M32RBF_INSN_LDUB, SEM_FN_NAME (m32rbf,ldub) },
2720   { M32RBF_INSN_LDUB_D, SEM_FN_NAME (m32rbf,ldub_d) },
2721   { M32RBF_INSN_LDUH, SEM_FN_NAME (m32rbf,lduh) },
2722   { M32RBF_INSN_LDUH_D, SEM_FN_NAME (m32rbf,lduh_d) },
2723   { M32RBF_INSN_LD_PLUS, SEM_FN_NAME (m32rbf,ld_plus) },
2724   { M32RBF_INSN_LD24, SEM_FN_NAME (m32rbf,ld24) },
2725   { M32RBF_INSN_LDI8, SEM_FN_NAME (m32rbf,ldi8) },
2726   { M32RBF_INSN_LDI16, SEM_FN_NAME (m32rbf,ldi16) },
2727   { M32RBF_INSN_LOCK, SEM_FN_NAME (m32rbf,lock) },
2728   { M32RBF_INSN_MACHI, SEM_FN_NAME (m32rbf,machi) },
2729   { M32RBF_INSN_MACLO, SEM_FN_NAME (m32rbf,maclo) },
2730   { M32RBF_INSN_MACWHI, SEM_FN_NAME (m32rbf,macwhi) },
2731   { M32RBF_INSN_MACWLO, SEM_FN_NAME (m32rbf,macwlo) },
2732   { M32RBF_INSN_MUL, SEM_FN_NAME (m32rbf,mul) },
2733   { M32RBF_INSN_MULHI, SEM_FN_NAME (m32rbf,mulhi) },
2734   { M32RBF_INSN_MULLO, SEM_FN_NAME (m32rbf,mullo) },
2735   { M32RBF_INSN_MULWHI, SEM_FN_NAME (m32rbf,mulwhi) },
2736   { M32RBF_INSN_MULWLO, SEM_FN_NAME (m32rbf,mulwlo) },
2737   { M32RBF_INSN_MV, SEM_FN_NAME (m32rbf,mv) },
2738   { M32RBF_INSN_MVFACHI, SEM_FN_NAME (m32rbf,mvfachi) },
2739   { M32RBF_INSN_MVFACLO, SEM_FN_NAME (m32rbf,mvfaclo) },
2740   { M32RBF_INSN_MVFACMI, SEM_FN_NAME (m32rbf,mvfacmi) },
2741   { M32RBF_INSN_MVFC, SEM_FN_NAME (m32rbf,mvfc) },
2742   { M32RBF_INSN_MVTACHI, SEM_FN_NAME (m32rbf,mvtachi) },
2743   { M32RBF_INSN_MVTACLO, SEM_FN_NAME (m32rbf,mvtaclo) },
2744   { M32RBF_INSN_MVTC, SEM_FN_NAME (m32rbf,mvtc) },
2745   { M32RBF_INSN_NEG, SEM_FN_NAME (m32rbf,neg) },
2746   { M32RBF_INSN_NOP, SEM_FN_NAME (m32rbf,nop) },
2747   { M32RBF_INSN_NOT, SEM_FN_NAME (m32rbf,not) },
2748   { M32RBF_INSN_RAC, SEM_FN_NAME (m32rbf,rac) },
2749   { M32RBF_INSN_RACH, SEM_FN_NAME (m32rbf,rach) },
2750   { M32RBF_INSN_RTE, SEM_FN_NAME (m32rbf,rte) },
2751   { M32RBF_INSN_SETH, SEM_FN_NAME (m32rbf,seth) },
2752   { M32RBF_INSN_SLL, SEM_FN_NAME (m32rbf,sll) },
2753   { M32RBF_INSN_SLL3, SEM_FN_NAME (m32rbf,sll3) },
2754   { M32RBF_INSN_SLLI, SEM_FN_NAME (m32rbf,slli) },
2755   { M32RBF_INSN_SRA, SEM_FN_NAME (m32rbf,sra) },
2756   { M32RBF_INSN_SRA3, SEM_FN_NAME (m32rbf,sra3) },
2757   { M32RBF_INSN_SRAI, SEM_FN_NAME (m32rbf,srai) },
2758   { M32RBF_INSN_SRL, SEM_FN_NAME (m32rbf,srl) },
2759   { M32RBF_INSN_SRL3, SEM_FN_NAME (m32rbf,srl3) },
2760   { M32RBF_INSN_SRLI, SEM_FN_NAME (m32rbf,srli) },
2761   { M32RBF_INSN_ST, SEM_FN_NAME (m32rbf,st) },
2762   { M32RBF_INSN_ST_D, SEM_FN_NAME (m32rbf,st_d) },
2763   { M32RBF_INSN_STB, SEM_FN_NAME (m32rbf,stb) },
2764   { M32RBF_INSN_STB_D, SEM_FN_NAME (m32rbf,stb_d) },
2765   { M32RBF_INSN_STH, SEM_FN_NAME (m32rbf,sth) },
2766   { M32RBF_INSN_STH_D, SEM_FN_NAME (m32rbf,sth_d) },
2767   { M32RBF_INSN_ST_PLUS, SEM_FN_NAME (m32rbf,st_plus) },
2768   { M32RBF_INSN_ST_MINUS, SEM_FN_NAME (m32rbf,st_minus) },
2769   { M32RBF_INSN_SUB, SEM_FN_NAME (m32rbf,sub) },
2770   { M32RBF_INSN_SUBV, SEM_FN_NAME (m32rbf,subv) },
2771   { M32RBF_INSN_SUBX, SEM_FN_NAME (m32rbf,subx) },
2772   { M32RBF_INSN_TRAP, SEM_FN_NAME (m32rbf,trap) },
2773   { M32RBF_INSN_UNLOCK, SEM_FN_NAME (m32rbf,unlock) },
2774   { M32RBF_INSN_CLRPSW, SEM_FN_NAME (m32rbf,clrpsw) },
2775   { M32RBF_INSN_SETPSW, SEM_FN_NAME (m32rbf,setpsw) },
2776   { M32RBF_INSN_BSET, SEM_FN_NAME (m32rbf,bset) },
2777   { M32RBF_INSN_BCLR, SEM_FN_NAME (m32rbf,bclr) },
2778   { M32RBF_INSN_BTST, SEM_FN_NAME (m32rbf,btst) },
2779   { 0, 0 }
2780 };
2781 
2782 /* Add the semantic fns to IDESC_TABLE.  */
2783 
2784 void
2785 SEM_FN_NAME (m32rbf,init_idesc_table) (SIM_CPU *current_cpu)
2786 {
2787   IDESC *idesc_table = CPU_IDESC (current_cpu);
2788   const struct sem_fn_desc *sf;
2789   int mach_num = MACH_NUM (CPU_MACH (current_cpu));
2790 
2791   for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
2792     {
2793       const CGEN_INSN *insn = idesc_table[sf->index].idata;
2794       int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
2795 		     || CGEN_INSN_MACH_HAS_P (insn, mach_num));
2796 #if FAST_P
2797       if (valid_p)
2798 	idesc_table[sf->index].sem_fast = sf->fn;
2799       else
2800 	idesc_table[sf->index].sem_fast = SEM_FN_NAME (m32rbf,x_invalid);
2801 #else
2802       if (valid_p)
2803 	idesc_table[sf->index].sem_full = sf->fn;
2804       else
2805 	idesc_table[sf->index].sem_full = SEM_FN_NAME (m32rbf,x_invalid);
2806 #endif
2807     }
2808 }
2809 
2810