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