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