1 /* Simulator instruction semantics for m32rbf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 2000 Red Hat, Inc.
7 This file is part of the Cygnus Simulators.
15 using namespace m32rbf; // FIXME: namespace organization still wip
17 #define GET_ATTR(name) GET_ATTR_##name ()
20 // ********** x-invalid: --invalid--
23 m32rbf_sem_x_invalid (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
25 #define FLD(f) abuf->fields.fmt_empty.f
26 sem_status status = SEM_STATUS_NORMAL;
27 m32rbf_scache* abuf = sem;
28 PCADDR pc = abuf->addr;
32 current_cpu->invalid_insn (pc);
37 current_cpu->done_insn (npc, status);
42 // ********** add: add $dr,$sr
45 m32rbf_sem_add (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
47 #define FLD(f) abuf->fields.sfmt_and3.f
48 sem_status status = SEM_STATUS_NORMAL;
49 m32rbf_scache* abuf = sem;
50 PCADDR pc = abuf->addr;
54 SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
56 if (current_cpu->trace_result_p)
57 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
60 current_cpu->done_insn (npc, status);
65 // ********** add3: add3 $dr,$sr,$hash$slo16
68 m32rbf_sem_add3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
70 #define FLD(f) abuf->fields.sfmt_add3.f
71 sem_status status = SEM_STATUS_NORMAL;
72 m32rbf_scache* abuf = sem;
73 PCADDR pc = abuf->addr;
77 SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));
79 if (current_cpu->trace_result_p)
80 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
83 current_cpu->done_insn (npc, status);
88 // ********** and: and $dr,$sr
91 m32rbf_sem_and (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
93 #define FLD(f) abuf->fields.sfmt_and3.f
94 sem_status status = SEM_STATUS_NORMAL;
95 m32rbf_scache* abuf = sem;
96 PCADDR pc = abuf->addr;
100 SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
101 * FLD (i_dr) = opval;
102 if (current_cpu->trace_result_p)
103 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
106 current_cpu->done_insn (npc, status);
111 // ********** and3: and3 $dr,$sr,$uimm16
114 m32rbf_sem_and3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
116 #define FLD(f) abuf->fields.sfmt_and3.f
117 sem_status status = SEM_STATUS_NORMAL;
118 m32rbf_scache* abuf = sem;
119 PCADDR pc = abuf->addr;
123 SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));
124 * FLD (i_dr) = opval;
125 if (current_cpu->trace_result_p)
126 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
129 current_cpu->done_insn (npc, status);
134 // ********** or: or $dr,$sr
137 m32rbf_sem_or (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
139 #define FLD(f) abuf->fields.sfmt_and3.f
140 sem_status status = SEM_STATUS_NORMAL;
141 m32rbf_scache* abuf = sem;
142 PCADDR pc = abuf->addr;
146 SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
147 * FLD (i_dr) = opval;
148 if (current_cpu->trace_result_p)
149 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
152 current_cpu->done_insn (npc, status);
157 // ********** or3: or3 $dr,$sr,$hash$ulo16
160 m32rbf_sem_or3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
162 #define FLD(f) abuf->fields.sfmt_and3.f
163 sem_status status = SEM_STATUS_NORMAL;
164 m32rbf_scache* abuf = sem;
165 PCADDR pc = abuf->addr;
169 SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));
170 * FLD (i_dr) = opval;
171 if (current_cpu->trace_result_p)
172 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
175 current_cpu->done_insn (npc, status);
180 // ********** xor: xor $dr,$sr
183 m32rbf_sem_xor (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
185 #define FLD(f) abuf->fields.sfmt_and3.f
186 sem_status status = SEM_STATUS_NORMAL;
187 m32rbf_scache* abuf = sem;
188 PCADDR pc = abuf->addr;
192 SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
193 * FLD (i_dr) = opval;
194 if (current_cpu->trace_result_p)
195 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
198 current_cpu->done_insn (npc, status);
203 // ********** xor3: xor3 $dr,$sr,$uimm16
206 m32rbf_sem_xor3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
208 #define FLD(f) abuf->fields.sfmt_and3.f
209 sem_status status = SEM_STATUS_NORMAL;
210 m32rbf_scache* abuf = sem;
211 PCADDR pc = abuf->addr;
215 SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));
216 * FLD (i_dr) = opval;
217 if (current_cpu->trace_result_p)
218 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
221 current_cpu->done_insn (npc, status);
226 // ********** addi: addi $dr,$simm8
229 m32rbf_sem_addi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
231 #define FLD(f) abuf->fields.sfmt_addi.f
232 sem_status status = SEM_STATUS_NORMAL;
233 m32rbf_scache* abuf = sem;
234 PCADDR pc = abuf->addr;
238 SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
239 * FLD (i_dr) = opval;
240 if (current_cpu->trace_result_p)
241 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
244 current_cpu->done_insn (npc, status);
249 // ********** addv: addv $dr,$sr
252 m32rbf_sem_addv (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
254 #define FLD(f) abuf->fields.sfmt_and3.f
255 sem_status status = SEM_STATUS_NORMAL;
256 m32rbf_scache* abuf = sem;
257 PCADDR pc = abuf->addr;
262 temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
263 temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
266 * FLD (i_dr) = opval;
267 if (current_cpu->trace_result_p)
268 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
272 current_cpu->hardware.h_cond = opval;
273 if (current_cpu->trace_result_p)
274 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
278 current_cpu->done_insn (npc, status);
283 // ********** addv3: addv3 $dr,$sr,$simm16
286 m32rbf_sem_addv3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
288 #define FLD(f) abuf->fields.sfmt_add3.f
289 sem_status status = SEM_STATUS_NORMAL;
290 m32rbf_scache* abuf = sem;
291 PCADDR pc = abuf->addr;
296 temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16));
297 temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0);
300 * FLD (i_dr) = opval;
301 if (current_cpu->trace_result_p)
302 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
306 current_cpu->hardware.h_cond = opval;
307 if (current_cpu->trace_result_p)
308 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
312 current_cpu->done_insn (npc, status);
317 // ********** addx: addx $dr,$sr
320 m32rbf_sem_addx (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
322 #define FLD(f) abuf->fields.sfmt_and3.f
323 sem_status status = SEM_STATUS_NORMAL;
324 m32rbf_scache* abuf = sem;
325 PCADDR pc = abuf->addr;
330 temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), current_cpu->hardware.h_cond);
331 temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), current_cpu->hardware.h_cond);
334 * FLD (i_dr) = opval;
335 if (current_cpu->trace_result_p)
336 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
340 current_cpu->hardware.h_cond = opval;
341 if (current_cpu->trace_result_p)
342 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
346 current_cpu->done_insn (npc, status);
351 // ********** bc8: bc.s $disp8
354 m32rbf_sem_bc8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
356 #define FLD(f) abuf->fields.sfmt_bc8.f
357 sem_status status = SEM_STATUS_NORMAL;
358 m32rbf_scache* abuf = sem;
359 PCADDR pc = abuf->addr;
362 if (current_cpu->hardware.h_cond) {
364 USI opval = FLD (i_disp8);
365 current_cpu->branch (opval, npc, status);
366 if (current_cpu->trace_result_p)
367 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
371 current_cpu->done_cti_insn (npc, status);
376 // ********** bc24: bc.l $disp24
379 m32rbf_sem_bc24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
381 #define FLD(f) abuf->fields.sfmt_bc24.f
382 sem_status status = SEM_STATUS_NORMAL;
383 m32rbf_scache* abuf = sem;
384 PCADDR pc = abuf->addr;
387 if (current_cpu->hardware.h_cond) {
389 USI opval = FLD (i_disp24);
390 current_cpu->branch (opval, npc, status);
391 if (current_cpu->trace_result_p)
392 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
396 current_cpu->done_cti_insn (npc, status);
401 // ********** beq: beq $src1,$src2,$disp16
404 m32rbf_sem_beq (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
406 #define FLD(f) abuf->fields.sfmt_beq.f
407 sem_status status = SEM_STATUS_NORMAL;
408 m32rbf_scache* abuf = sem;
409 PCADDR pc = abuf->addr;
412 if (EQSI (* FLD (i_src1), * FLD (i_src2))) {
414 USI opval = FLD (i_disp16);
415 current_cpu->branch (opval, npc, status);
416 if (current_cpu->trace_result_p)
417 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
421 current_cpu->done_cti_insn (npc, status);
426 // ********** beqz: beqz $src2,$disp16
429 m32rbf_sem_beqz (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
431 #define FLD(f) abuf->fields.sfmt_beq.f
432 sem_status status = SEM_STATUS_NORMAL;
433 m32rbf_scache* abuf = sem;
434 PCADDR pc = abuf->addr;
437 if (EQSI (* FLD (i_src2), 0)) {
439 USI opval = FLD (i_disp16);
440 current_cpu->branch (opval, npc, status);
441 if (current_cpu->trace_result_p)
442 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
446 current_cpu->done_cti_insn (npc, status);
451 // ********** bgez: bgez $src2,$disp16
454 m32rbf_sem_bgez (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
456 #define FLD(f) abuf->fields.sfmt_beq.f
457 sem_status status = SEM_STATUS_NORMAL;
458 m32rbf_scache* abuf = sem;
459 PCADDR pc = abuf->addr;
462 if (GESI (* FLD (i_src2), 0)) {
464 USI opval = FLD (i_disp16);
465 current_cpu->branch (opval, npc, status);
466 if (current_cpu->trace_result_p)
467 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
471 current_cpu->done_cti_insn (npc, status);
476 // ********** bgtz: bgtz $src2,$disp16
479 m32rbf_sem_bgtz (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
481 #define FLD(f) abuf->fields.sfmt_beq.f
482 sem_status status = SEM_STATUS_NORMAL;
483 m32rbf_scache* abuf = sem;
484 PCADDR pc = abuf->addr;
487 if (GTSI (* FLD (i_src2), 0)) {
489 USI opval = FLD (i_disp16);
490 current_cpu->branch (opval, npc, status);
491 if (current_cpu->trace_result_p)
492 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
496 current_cpu->done_cti_insn (npc, status);
501 // ********** blez: blez $src2,$disp16
504 m32rbf_sem_blez (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
506 #define FLD(f) abuf->fields.sfmt_beq.f
507 sem_status status = SEM_STATUS_NORMAL;
508 m32rbf_scache* abuf = sem;
509 PCADDR pc = abuf->addr;
512 if (LESI (* FLD (i_src2), 0)) {
514 USI opval = FLD (i_disp16);
515 current_cpu->branch (opval, npc, status);
516 if (current_cpu->trace_result_p)
517 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
521 current_cpu->done_cti_insn (npc, status);
526 // ********** bltz: bltz $src2,$disp16
529 m32rbf_sem_bltz (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
531 #define FLD(f) abuf->fields.sfmt_beq.f
532 sem_status status = SEM_STATUS_NORMAL;
533 m32rbf_scache* abuf = sem;
534 PCADDR pc = abuf->addr;
537 if (LTSI (* FLD (i_src2), 0)) {
539 USI opval = FLD (i_disp16);
540 current_cpu->branch (opval, npc, status);
541 if (current_cpu->trace_result_p)
542 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
546 current_cpu->done_cti_insn (npc, status);
551 // ********** bnez: bnez $src2,$disp16
554 m32rbf_sem_bnez (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
556 #define FLD(f) abuf->fields.sfmt_beq.f
557 sem_status status = SEM_STATUS_NORMAL;
558 m32rbf_scache* abuf = sem;
559 PCADDR pc = abuf->addr;
562 if (NESI (* FLD (i_src2), 0)) {
564 USI opval = FLD (i_disp16);
565 current_cpu->branch (opval, npc, status);
566 if (current_cpu->trace_result_p)
567 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
571 current_cpu->done_cti_insn (npc, status);
576 // ********** bl8: bl.s $disp8
579 m32rbf_sem_bl8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
581 #define FLD(f) abuf->fields.sfmt_bc8.f
582 sem_status status = SEM_STATUS_NORMAL;
583 m32rbf_scache* abuf = sem;
584 PCADDR pc = abuf->addr;
589 SI opval = ADDSI (ANDSI (pc, -4), 4);
590 current_cpu->hardware.h_gr[((UINT) 14)] = opval;
591 if (current_cpu->trace_result_p)
592 current_cpu->trace_stream << "gr-14" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << " ";
595 USI opval = FLD (i_disp8);
596 current_cpu->branch (opval, npc, status);
597 if (current_cpu->trace_result_p)
598 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
602 current_cpu->done_cti_insn (npc, status);
607 // ********** bl24: bl.l $disp24
610 m32rbf_sem_bl24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
612 #define FLD(f) abuf->fields.sfmt_bc24.f
613 sem_status status = SEM_STATUS_NORMAL;
614 m32rbf_scache* abuf = sem;
615 PCADDR pc = abuf->addr;
620 SI opval = ADDSI (pc, 4);
621 current_cpu->hardware.h_gr[((UINT) 14)] = opval;
622 if (current_cpu->trace_result_p)
623 current_cpu->trace_stream << "gr-14" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << " ";
626 USI opval = FLD (i_disp24);
627 current_cpu->branch (opval, npc, status);
628 if (current_cpu->trace_result_p)
629 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
633 current_cpu->done_cti_insn (npc, status);
638 // ********** bnc8: bnc.s $disp8
641 m32rbf_sem_bnc8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
643 #define FLD(f) abuf->fields.sfmt_bc8.f
644 sem_status status = SEM_STATUS_NORMAL;
645 m32rbf_scache* abuf = sem;
646 PCADDR pc = abuf->addr;
649 if (NOTBI (current_cpu->hardware.h_cond)) {
651 USI opval = FLD (i_disp8);
652 current_cpu->branch (opval, npc, status);
653 if (current_cpu->trace_result_p)
654 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
658 current_cpu->done_cti_insn (npc, status);
663 // ********** bnc24: bnc.l $disp24
666 m32rbf_sem_bnc24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
668 #define FLD(f) abuf->fields.sfmt_bc24.f
669 sem_status status = SEM_STATUS_NORMAL;
670 m32rbf_scache* abuf = sem;
671 PCADDR pc = abuf->addr;
674 if (NOTBI (current_cpu->hardware.h_cond)) {
676 USI opval = FLD (i_disp24);
677 current_cpu->branch (opval, npc, status);
678 if (current_cpu->trace_result_p)
679 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
683 current_cpu->done_cti_insn (npc, status);
688 // ********** bne: bne $src1,$src2,$disp16
691 m32rbf_sem_bne (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
693 #define FLD(f) abuf->fields.sfmt_beq.f
694 sem_status status = SEM_STATUS_NORMAL;
695 m32rbf_scache* abuf = sem;
696 PCADDR pc = abuf->addr;
699 if (NESI (* FLD (i_src1), * FLD (i_src2))) {
701 USI opval = FLD (i_disp16);
702 current_cpu->branch (opval, npc, status);
703 if (current_cpu->trace_result_p)
704 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
708 current_cpu->done_cti_insn (npc, status);
713 // ********** bra8: bra.s $disp8
716 m32rbf_sem_bra8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
718 #define FLD(f) abuf->fields.sfmt_bc8.f
719 sem_status status = SEM_STATUS_NORMAL;
720 m32rbf_scache* abuf = sem;
721 PCADDR pc = abuf->addr;
725 USI opval = FLD (i_disp8);
726 current_cpu->branch (opval, npc, status);
727 if (current_cpu->trace_result_p)
728 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
731 current_cpu->done_cti_insn (npc, status);
736 // ********** bra24: bra.l $disp24
739 m32rbf_sem_bra24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
741 #define FLD(f) abuf->fields.sfmt_bc24.f
742 sem_status status = SEM_STATUS_NORMAL;
743 m32rbf_scache* abuf = sem;
744 PCADDR pc = abuf->addr;
748 USI opval = FLD (i_disp24);
749 current_cpu->branch (opval, npc, status);
750 if (current_cpu->trace_result_p)
751 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
754 current_cpu->done_cti_insn (npc, status);
759 // ********** cmp: cmp $src1,$src2
762 m32rbf_sem_cmp (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
764 #define FLD(f) abuf->fields.sfmt_st_d.f
765 sem_status status = SEM_STATUS_NORMAL;
766 m32rbf_scache* abuf = sem;
767 PCADDR pc = abuf->addr;
771 BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
772 current_cpu->hardware.h_cond = opval;
773 if (current_cpu->trace_result_p)
774 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
777 current_cpu->done_insn (npc, status);
782 // ********** cmpi: cmpi $src2,$simm16
785 m32rbf_sem_cmpi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
787 #define FLD(f) abuf->fields.sfmt_st_d.f
788 sem_status status = SEM_STATUS_NORMAL;
789 m32rbf_scache* abuf = sem;
790 PCADDR pc = abuf->addr;
794 BI opval = LTSI (* FLD (i_src2), FLD (f_simm16));
795 current_cpu->hardware.h_cond = opval;
796 if (current_cpu->trace_result_p)
797 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
800 current_cpu->done_insn (npc, status);
805 // ********** cmpu: cmpu $src1,$src2
808 m32rbf_sem_cmpu (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
810 #define FLD(f) abuf->fields.sfmt_st_d.f
811 sem_status status = SEM_STATUS_NORMAL;
812 m32rbf_scache* abuf = sem;
813 PCADDR pc = abuf->addr;
817 BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
818 current_cpu->hardware.h_cond = opval;
819 if (current_cpu->trace_result_p)
820 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
823 current_cpu->done_insn (npc, status);
828 // ********** cmpui: cmpui $src2,$simm16
831 m32rbf_sem_cmpui (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
833 #define FLD(f) abuf->fields.sfmt_st_d.f
834 sem_status status = SEM_STATUS_NORMAL;
835 m32rbf_scache* abuf = sem;
836 PCADDR pc = abuf->addr;
840 BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16));
841 current_cpu->hardware.h_cond = opval;
842 if (current_cpu->trace_result_p)
843 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
846 current_cpu->done_insn (npc, status);
851 // ********** div: div $dr,$sr
854 m32rbf_sem_div (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
856 #define FLD(f) abuf->fields.sfmt_and3.f
857 sem_status status = SEM_STATUS_NORMAL;
858 m32rbf_scache* abuf = sem;
859 PCADDR pc = abuf->addr;
862 if (NESI (* FLD (i_sr), 0)) {
864 SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr));
865 * FLD (i_dr) = opval;
866 if (current_cpu->trace_result_p)
867 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
871 current_cpu->done_insn (npc, status);
876 // ********** divu: divu $dr,$sr
879 m32rbf_sem_divu (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
881 #define FLD(f) abuf->fields.sfmt_and3.f
882 sem_status status = SEM_STATUS_NORMAL;
883 m32rbf_scache* abuf = sem;
884 PCADDR pc = abuf->addr;
887 if (NESI (* FLD (i_sr), 0)) {
889 SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
890 * FLD (i_dr) = opval;
891 if (current_cpu->trace_result_p)
892 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
896 current_cpu->done_insn (npc, status);
901 // ********** rem: rem $dr,$sr
904 m32rbf_sem_rem (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
906 #define FLD(f) abuf->fields.sfmt_and3.f
907 sem_status status = SEM_STATUS_NORMAL;
908 m32rbf_scache* abuf = sem;
909 PCADDR pc = abuf->addr;
912 if (NESI (* FLD (i_sr), 0)) {
914 SI opval = MODSI (* FLD (i_dr), * FLD (i_sr));
915 * FLD (i_dr) = opval;
916 if (current_cpu->trace_result_p)
917 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
921 current_cpu->done_insn (npc, status);
926 // ********** remu: remu $dr,$sr
929 m32rbf_sem_remu (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
931 #define FLD(f) abuf->fields.sfmt_and3.f
932 sem_status status = SEM_STATUS_NORMAL;
933 m32rbf_scache* abuf = sem;
934 PCADDR pc = abuf->addr;
937 if (NESI (* FLD (i_sr), 0)) {
939 SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
940 * FLD (i_dr) = opval;
941 if (current_cpu->trace_result_p)
942 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
946 current_cpu->done_insn (npc, status);
951 // ********** jl: jl $sr
954 m32rbf_sem_jl (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
956 #define FLD(f) abuf->fields.sfmt_and3.f
957 sem_status status = SEM_STATUS_NORMAL;
958 m32rbf_scache* abuf = sem;
959 PCADDR pc = abuf->addr;
964 temp0 = ADDSI (ANDSI (pc, -4), 4);
965 temp1 = ANDSI (* FLD (i_sr), -4);
968 current_cpu->hardware.h_gr[((UINT) 14)] = opval;
969 if (current_cpu->trace_result_p)
970 current_cpu->trace_stream << "gr-14" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << " ";
974 current_cpu->branch (opval, npc, status);
975 if (current_cpu->trace_result_p)
976 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
980 current_cpu->done_cti_insn (npc, status);
985 // ********** jmp: jmp $sr
988 m32rbf_sem_jmp (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
990 #define FLD(f) abuf->fields.sfmt_and3.f
991 sem_status status = SEM_STATUS_NORMAL;
992 m32rbf_scache* abuf = sem;
993 PCADDR pc = abuf->addr;
997 USI opval = ANDSI (* FLD (i_sr), -4);
998 current_cpu->branch (opval, npc, status);
999 if (current_cpu->trace_result_p)
1000 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
1003 current_cpu->done_cti_insn (npc, status);
1008 // ********** ld: ld $dr,@$sr
1011 m32rbf_sem_ld (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1013 #define FLD(f) abuf->fields.sfmt_and3.f
1014 sem_status status = SEM_STATUS_NORMAL;
1015 m32rbf_scache* abuf = sem;
1016 PCADDR pc = abuf->addr;
1017 PCADDR npc = pc + 2;
1020 SI opval = current_cpu->GETMEMSI (pc, * FLD (i_sr));
1021 * FLD (i_dr) = opval;
1022 if (current_cpu->trace_result_p)
1023 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1026 current_cpu->done_insn (npc, status);
1031 // ********** ld-d: ld $dr,@($slo16,$sr)
1034 m32rbf_sem_ld_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1036 #define FLD(f) abuf->fields.sfmt_add3.f
1037 sem_status status = SEM_STATUS_NORMAL;
1038 m32rbf_scache* abuf = sem;
1039 PCADDR pc = abuf->addr;
1040 PCADDR npc = pc + 4;
1043 SI opval = current_cpu->GETMEMSI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16)));
1044 * FLD (i_dr) = opval;
1045 if (current_cpu->trace_result_p)
1046 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1049 current_cpu->done_insn (npc, status);
1054 // ********** ldb: ldb $dr,@$sr
1057 m32rbf_sem_ldb (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1059 #define FLD(f) abuf->fields.sfmt_and3.f
1060 sem_status status = SEM_STATUS_NORMAL;
1061 m32rbf_scache* abuf = sem;
1062 PCADDR pc = abuf->addr;
1063 PCADDR npc = pc + 2;
1066 SI opval = EXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_sr)));
1067 * FLD (i_dr) = opval;
1068 if (current_cpu->trace_result_p)
1069 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1072 current_cpu->done_insn (npc, status);
1077 // ********** ldb-d: ldb $dr,@($slo16,$sr)
1080 m32rbf_sem_ldb_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1082 #define FLD(f) abuf->fields.sfmt_add3.f
1083 sem_status status = SEM_STATUS_NORMAL;
1084 m32rbf_scache* abuf = sem;
1085 PCADDR pc = abuf->addr;
1086 PCADDR npc = pc + 4;
1089 SI opval = EXTQISI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1090 * FLD (i_dr) = opval;
1091 if (current_cpu->trace_result_p)
1092 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1095 current_cpu->done_insn (npc, status);
1100 // ********** ldh: ldh $dr,@$sr
1103 m32rbf_sem_ldh (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1105 #define FLD(f) abuf->fields.sfmt_and3.f
1106 sem_status status = SEM_STATUS_NORMAL;
1107 m32rbf_scache* abuf = sem;
1108 PCADDR pc = abuf->addr;
1109 PCADDR npc = pc + 2;
1112 SI opval = EXTHISI (current_cpu->GETMEMHI (pc, * FLD (i_sr)));
1113 * FLD (i_dr) = opval;
1114 if (current_cpu->trace_result_p)
1115 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1118 current_cpu->done_insn (npc, status);
1123 // ********** ldh-d: ldh $dr,@($slo16,$sr)
1126 m32rbf_sem_ldh_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1128 #define FLD(f) abuf->fields.sfmt_add3.f
1129 sem_status status = SEM_STATUS_NORMAL;
1130 m32rbf_scache* abuf = sem;
1131 PCADDR pc = abuf->addr;
1132 PCADDR npc = pc + 4;
1135 SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1136 * FLD (i_dr) = opval;
1137 if (current_cpu->trace_result_p)
1138 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1141 current_cpu->done_insn (npc, status);
1146 // ********** ldub: ldub $dr,@$sr
1149 m32rbf_sem_ldub (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1151 #define FLD(f) abuf->fields.sfmt_and3.f
1152 sem_status status = SEM_STATUS_NORMAL;
1153 m32rbf_scache* abuf = sem;
1154 PCADDR pc = abuf->addr;
1155 PCADDR npc = pc + 2;
1158 SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_sr)));
1159 * FLD (i_dr) = opval;
1160 if (current_cpu->trace_result_p)
1161 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1164 current_cpu->done_insn (npc, status);
1169 // ********** ldub-d: ldub $dr,@($slo16,$sr)
1172 m32rbf_sem_ldub_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1174 #define FLD(f) abuf->fields.sfmt_add3.f
1175 sem_status status = SEM_STATUS_NORMAL;
1176 m32rbf_scache* abuf = sem;
1177 PCADDR pc = abuf->addr;
1178 PCADDR npc = pc + 4;
1181 SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1182 * FLD (i_dr) = opval;
1183 if (current_cpu->trace_result_p)
1184 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1187 current_cpu->done_insn (npc, status);
1192 // ********** lduh: lduh $dr,@$sr
1195 m32rbf_sem_lduh (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1197 #define FLD(f) abuf->fields.sfmt_and3.f
1198 sem_status status = SEM_STATUS_NORMAL;
1199 m32rbf_scache* abuf = sem;
1200 PCADDR pc = abuf->addr;
1201 PCADDR npc = pc + 2;
1204 SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, * FLD (i_sr)));
1205 * FLD (i_dr) = opval;
1206 if (current_cpu->trace_result_p)
1207 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1210 current_cpu->done_insn (npc, status);
1215 // ********** lduh-d: lduh $dr,@($slo16,$sr)
1218 m32rbf_sem_lduh_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1220 #define FLD(f) abuf->fields.sfmt_add3.f
1221 sem_status status = SEM_STATUS_NORMAL;
1222 m32rbf_scache* abuf = sem;
1223 PCADDR pc = abuf->addr;
1224 PCADDR npc = pc + 4;
1227 SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1228 * FLD (i_dr) = opval;
1229 if (current_cpu->trace_result_p)
1230 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1233 current_cpu->done_insn (npc, status);
1238 // ********** ld-plus: ld $dr,@$sr+
1241 m32rbf_sem_ld_plus (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1243 #define FLD(f) abuf->fields.sfmt_and3.f
1244 sem_status status = SEM_STATUS_NORMAL;
1245 m32rbf_scache* abuf = sem;
1246 PCADDR pc = abuf->addr;
1247 PCADDR npc = pc + 2;
1251 temp0 = current_cpu->GETMEMSI (pc, * FLD (i_sr));
1252 temp1 = ADDSI (* FLD (i_sr), 4);
1255 * FLD (i_dr) = opval;
1256 if (current_cpu->trace_result_p)
1257 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1261 * FLD (i_sr) = opval;
1262 if (current_cpu->trace_result_p)
1263 current_cpu->trace_stream << "sr" << '[' << FLD (f_r2) << ']' << ":=0x" << hex << opval << dec << " ";
1267 current_cpu->done_insn (npc, status);
1272 // ********** ld24: ld24 $dr,$uimm24
1275 m32rbf_sem_ld24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1277 #define FLD(f) abuf->fields.sfmt_ld24.f
1278 sem_status status = SEM_STATUS_NORMAL;
1279 m32rbf_scache* abuf = sem;
1280 PCADDR pc = abuf->addr;
1281 PCADDR npc = pc + 4;
1284 SI opval = FLD (i_uimm24);
1285 * FLD (i_dr) = opval;
1286 if (current_cpu->trace_result_p)
1287 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1290 current_cpu->done_insn (npc, status);
1295 // ********** ldi8: ldi8 $dr,$simm8
1298 m32rbf_sem_ldi8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1300 #define FLD(f) abuf->fields.sfmt_addi.f
1301 sem_status status = SEM_STATUS_NORMAL;
1302 m32rbf_scache* abuf = sem;
1303 PCADDR pc = abuf->addr;
1304 PCADDR npc = pc + 2;
1307 SI opval = FLD (f_simm8);
1308 * FLD (i_dr) = opval;
1309 if (current_cpu->trace_result_p)
1310 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1313 current_cpu->done_insn (npc, status);
1318 // ********** ldi16: ldi16 $dr,$hash$slo16
1321 m32rbf_sem_ldi16 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1323 #define FLD(f) abuf->fields.sfmt_add3.f
1324 sem_status status = SEM_STATUS_NORMAL;
1325 m32rbf_scache* abuf = sem;
1326 PCADDR pc = abuf->addr;
1327 PCADDR npc = pc + 4;
1330 SI opval = FLD (f_simm16);
1331 * FLD (i_dr) = opval;
1332 if (current_cpu->trace_result_p)
1333 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1336 current_cpu->done_insn (npc, status);
1341 // ********** lock: lock $dr,@$sr
1344 m32rbf_sem_lock (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1346 #define FLD(f) abuf->fields.sfmt_and3.f
1347 sem_status status = SEM_STATUS_NORMAL;
1348 m32rbf_scache* abuf = sem;
1349 PCADDR pc = abuf->addr;
1350 PCADDR npc = pc + 2;
1355 current_cpu->hardware.h_lock = opval;
1356 if (current_cpu->trace_result_p)
1357 current_cpu->trace_stream << "lock" << ":=0x" << hex << opval << dec << " ";
1360 SI opval = current_cpu->GETMEMSI (pc, * FLD (i_sr));
1361 * FLD (i_dr) = opval;
1362 if (current_cpu->trace_result_p)
1363 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1367 current_cpu->done_insn (npc, status);
1372 // ********** machi: machi $src1,$src2
1375 m32rbf_sem_machi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1377 #define FLD(f) abuf->fields.sfmt_st_d.f
1378 sem_status status = SEM_STATUS_NORMAL;
1379 m32rbf_scache* abuf = sem;
1380 PCADDR pc = abuf->addr;
1381 PCADDR npc = pc + 2;
1384 DI opval = SRADI (SLLDI (ADDDI (current_cpu->h_accum_get (), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
1385 current_cpu->h_accum_set (opval);
1386 if (current_cpu->trace_result_p)
1387 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1390 current_cpu->done_insn (npc, status);
1395 // ********** maclo: maclo $src1,$src2
1398 m32rbf_sem_maclo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1400 #define FLD(f) abuf->fields.sfmt_st_d.f
1401 sem_status status = SEM_STATUS_NORMAL;
1402 m32rbf_scache* abuf = sem;
1403 PCADDR pc = abuf->addr;
1404 PCADDR npc = pc + 2;
1407 DI opval = SRADI (SLLDI (ADDDI (current_cpu->h_accum_get (), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
1408 current_cpu->h_accum_set (opval);
1409 if (current_cpu->trace_result_p)
1410 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1413 current_cpu->done_insn (npc, status);
1418 // ********** macwhi: macwhi $src1,$src2
1421 m32rbf_sem_macwhi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1423 #define FLD(f) abuf->fields.sfmt_st_d.f
1424 sem_status status = SEM_STATUS_NORMAL;
1425 m32rbf_scache* abuf = sem;
1426 PCADDR pc = abuf->addr;
1427 PCADDR npc = pc + 2;
1430 DI opval = SRADI (SLLDI (ADDDI (current_cpu->h_accum_get (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
1431 current_cpu->h_accum_set (opval);
1432 if (current_cpu->trace_result_p)
1433 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1436 current_cpu->done_insn (npc, status);
1441 // ********** macwlo: macwlo $src1,$src2
1444 m32rbf_sem_macwlo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1446 #define FLD(f) abuf->fields.sfmt_st_d.f
1447 sem_status status = SEM_STATUS_NORMAL;
1448 m32rbf_scache* abuf = sem;
1449 PCADDR pc = abuf->addr;
1450 PCADDR npc = pc + 2;
1453 DI opval = SRADI (SLLDI (ADDDI (current_cpu->h_accum_get (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
1454 current_cpu->h_accum_set (opval);
1455 if (current_cpu->trace_result_p)
1456 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1459 current_cpu->done_insn (npc, status);
1464 // ********** mul: mul $dr,$sr
1467 m32rbf_sem_mul (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1469 #define FLD(f) abuf->fields.sfmt_and3.f
1470 sem_status status = SEM_STATUS_NORMAL;
1471 m32rbf_scache* abuf = sem;
1472 PCADDR pc = abuf->addr;
1473 PCADDR npc = pc + 2;
1476 SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
1477 * FLD (i_dr) = opval;
1478 if (current_cpu->trace_result_p)
1479 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1482 current_cpu->done_insn (npc, status);
1487 // ********** mulhi: mulhi $src1,$src2
1490 m32rbf_sem_mulhi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1492 #define FLD(f) abuf->fields.sfmt_st_d.f
1493 sem_status status = SEM_STATUS_NORMAL;
1494 m32rbf_scache* abuf = sem;
1495 PCADDR pc = abuf->addr;
1496 PCADDR npc = pc + 2;
1499 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
1500 current_cpu->h_accum_set (opval);
1501 if (current_cpu->trace_result_p)
1502 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1505 current_cpu->done_insn (npc, status);
1510 // ********** mullo: mullo $src1,$src2
1513 m32rbf_sem_mullo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1515 #define FLD(f) abuf->fields.sfmt_st_d.f
1516 sem_status status = SEM_STATUS_NORMAL;
1517 m32rbf_scache* abuf = sem;
1518 PCADDR pc = abuf->addr;
1519 PCADDR npc = pc + 2;
1522 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
1523 current_cpu->h_accum_set (opval);
1524 if (current_cpu->trace_result_p)
1525 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1528 current_cpu->done_insn (npc, status);
1533 // ********** mulwhi: mulwhi $src1,$src2
1536 m32rbf_sem_mulwhi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1538 #define FLD(f) abuf->fields.sfmt_st_d.f
1539 sem_status status = SEM_STATUS_NORMAL;
1540 m32rbf_scache* abuf = sem;
1541 PCADDR pc = abuf->addr;
1542 PCADDR npc = pc + 2;
1545 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 8), 8);
1546 current_cpu->h_accum_set (opval);
1547 if (current_cpu->trace_result_p)
1548 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1551 current_cpu->done_insn (npc, status);
1556 // ********** mulwlo: mulwlo $src1,$src2
1559 m32rbf_sem_mulwlo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1561 #define FLD(f) abuf->fields.sfmt_st_d.f
1562 sem_status status = SEM_STATUS_NORMAL;
1563 m32rbf_scache* abuf = sem;
1564 PCADDR pc = abuf->addr;
1565 PCADDR npc = pc + 2;
1568 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 8), 8);
1569 current_cpu->h_accum_set (opval);
1570 if (current_cpu->trace_result_p)
1571 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1574 current_cpu->done_insn (npc, status);
1579 // ********** mv: mv $dr,$sr
1582 m32rbf_sem_mv (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1584 #define FLD(f) abuf->fields.sfmt_and3.f
1585 sem_status status = SEM_STATUS_NORMAL;
1586 m32rbf_scache* abuf = sem;
1587 PCADDR pc = abuf->addr;
1588 PCADDR npc = pc + 2;
1591 SI opval = * FLD (i_sr);
1592 * FLD (i_dr) = opval;
1593 if (current_cpu->trace_result_p)
1594 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1597 current_cpu->done_insn (npc, status);
1602 // ********** mvfachi: mvfachi $dr
1605 m32rbf_sem_mvfachi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1607 #define FLD(f) abuf->fields.sfmt_slli.f
1608 sem_status status = SEM_STATUS_NORMAL;
1609 m32rbf_scache* abuf = sem;
1610 PCADDR pc = abuf->addr;
1611 PCADDR npc = pc + 2;
1614 SI opval = TRUNCDISI (SRADI (current_cpu->h_accum_get (), 32));
1615 * FLD (i_dr) = opval;
1616 if (current_cpu->trace_result_p)
1617 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1620 current_cpu->done_insn (npc, status);
1625 // ********** mvfaclo: mvfaclo $dr
1628 m32rbf_sem_mvfaclo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1630 #define FLD(f) abuf->fields.sfmt_slli.f
1631 sem_status status = SEM_STATUS_NORMAL;
1632 m32rbf_scache* abuf = sem;
1633 PCADDR pc = abuf->addr;
1634 PCADDR npc = pc + 2;
1637 SI opval = TRUNCDISI (current_cpu->h_accum_get ());
1638 * FLD (i_dr) = opval;
1639 if (current_cpu->trace_result_p)
1640 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1643 current_cpu->done_insn (npc, status);
1648 // ********** mvfacmi: mvfacmi $dr
1651 m32rbf_sem_mvfacmi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1653 #define FLD(f) abuf->fields.sfmt_slli.f
1654 sem_status status = SEM_STATUS_NORMAL;
1655 m32rbf_scache* abuf = sem;
1656 PCADDR pc = abuf->addr;
1657 PCADDR npc = pc + 2;
1660 SI opval = TRUNCDISI (SRADI (current_cpu->h_accum_get (), 16));
1661 * FLD (i_dr) = opval;
1662 if (current_cpu->trace_result_p)
1663 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1666 current_cpu->done_insn (npc, status);
1671 // ********** mvfc: mvfc $dr,$scr
1674 m32rbf_sem_mvfc (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1676 #define FLD(f) abuf->fields.sfmt_and3.f
1677 sem_status status = SEM_STATUS_NORMAL;
1678 m32rbf_scache* abuf = sem;
1679 PCADDR pc = abuf->addr;
1680 PCADDR npc = pc + 2;
1683 SI opval = current_cpu->h_cr_get (FLD (f_r2));
1684 * FLD (i_dr) = opval;
1685 if (current_cpu->trace_result_p)
1686 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1689 current_cpu->done_insn (npc, status);
1694 // ********** mvtachi: mvtachi $src1
1697 m32rbf_sem_mvtachi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1699 #define FLD(f) abuf->fields.sfmt_st_d.f
1700 sem_status status = SEM_STATUS_NORMAL;
1701 m32rbf_scache* abuf = sem;
1702 PCADDR pc = abuf->addr;
1703 PCADDR npc = pc + 2;
1706 DI opval = ORDI (ANDDI (current_cpu->h_accum_get (), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
1707 current_cpu->h_accum_set (opval);
1708 if (current_cpu->trace_result_p)
1709 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1712 current_cpu->done_insn (npc, status);
1717 // ********** mvtaclo: mvtaclo $src1
1720 m32rbf_sem_mvtaclo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1722 #define FLD(f) abuf->fields.sfmt_st_d.f
1723 sem_status status = SEM_STATUS_NORMAL;
1724 m32rbf_scache* abuf = sem;
1725 PCADDR pc = abuf->addr;
1726 PCADDR npc = pc + 2;
1729 DI opval = ORDI (ANDDI (current_cpu->h_accum_get (), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
1730 current_cpu->h_accum_set (opval);
1731 if (current_cpu->trace_result_p)
1732 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1735 current_cpu->done_insn (npc, status);
1740 // ********** mvtc: mvtc $sr,$dcr
1743 m32rbf_sem_mvtc (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1745 #define FLD(f) abuf->fields.sfmt_and3.f
1746 sem_status status = SEM_STATUS_NORMAL;
1747 m32rbf_scache* abuf = sem;
1748 PCADDR pc = abuf->addr;
1749 PCADDR npc = pc + 2;
1752 USI opval = * FLD (i_sr);
1753 current_cpu->h_cr_set (FLD (f_r1), opval);
1754 if (current_cpu->trace_result_p)
1755 current_cpu->trace_stream << "dcr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1758 current_cpu->done_insn (npc, status);
1763 // ********** neg: neg $dr,$sr
1766 m32rbf_sem_neg (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1768 #define FLD(f) abuf->fields.sfmt_and3.f
1769 sem_status status = SEM_STATUS_NORMAL;
1770 m32rbf_scache* abuf = sem;
1771 PCADDR pc = abuf->addr;
1772 PCADDR npc = pc + 2;
1775 SI opval = NEGSI (* FLD (i_sr));
1776 * FLD (i_dr) = opval;
1777 if (current_cpu->trace_result_p)
1778 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1781 current_cpu->done_insn (npc, status);
1786 // ********** nop: nop
1789 m32rbf_sem_nop (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1791 #define FLD(f) abuf->fields.fmt_empty.f
1792 sem_status status = SEM_STATUS_NORMAL;
1793 m32rbf_scache* abuf = sem;
1794 PCADDR pc = abuf->addr;
1795 PCADDR npc = pc + 2;
1797 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
1799 current_cpu->done_insn (npc, status);
1804 // ********** not: not $dr,$sr
1807 m32rbf_sem_not (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1809 #define FLD(f) abuf->fields.sfmt_and3.f
1810 sem_status status = SEM_STATUS_NORMAL;
1811 m32rbf_scache* abuf = sem;
1812 PCADDR pc = abuf->addr;
1813 PCADDR npc = pc + 2;
1816 SI opval = INVSI (* FLD (i_sr));
1817 * FLD (i_dr) = opval;
1818 if (current_cpu->trace_result_p)
1819 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1822 current_cpu->done_insn (npc, status);
1827 // ********** rac: rac
1830 m32rbf_sem_rac (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1832 #define FLD(f) abuf->fields.fmt_empty.f
1833 sem_status status = SEM_STATUS_NORMAL;
1834 m32rbf_scache* abuf = sem;
1835 PCADDR pc = abuf->addr;
1836 PCADDR npc = pc + 2;
1840 tmp_tmp1 = SLLDI (current_cpu->h_accum_get (), 1);
1841 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
1843 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)));
1844 current_cpu->h_accum_set (opval);
1845 if (current_cpu->trace_result_p)
1846 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1850 current_cpu->done_insn (npc, status);
1855 // ********** rach: rach
1858 m32rbf_sem_rach (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1860 #define FLD(f) abuf->fields.fmt_empty.f
1861 sem_status status = SEM_STATUS_NORMAL;
1862 m32rbf_scache* abuf = sem;
1863 PCADDR pc = abuf->addr;
1864 PCADDR npc = pc + 2;
1868 tmp_tmp1 = ANDDI (current_cpu->h_accum_get (), MAKEDI (16777215, 0xffffffff));
1869 if (ANDIF (GEDI (tmp_tmp1, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) {
1870 tmp_tmp1 = MAKEDI (16383, 0x80000000);
1872 if (ANDIF (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) {
1873 tmp_tmp1 = MAKEDI (16760832, 0);
1875 tmp_tmp1 = ANDDI (ADDDI (current_cpu->h_accum_get (), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
1878 tmp_tmp1 = SLLDI (tmp_tmp1, 1);
1880 DI opval = SRADI (SLLDI (tmp_tmp1, 7), 7);
1881 current_cpu->h_accum_set (opval);
1882 if (current_cpu->trace_result_p)
1883 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1887 current_cpu->done_insn (npc, status);
1892 // ********** rte: rte
1895 m32rbf_sem_rte (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1897 #define FLD(f) abuf->fields.fmt_empty.f
1898 sem_status status = SEM_STATUS_NORMAL;
1899 m32rbf_scache* abuf = sem;
1900 PCADDR pc = abuf->addr;
1901 PCADDR npc = pc + 2;
1905 USI opval = ANDSI (current_cpu->h_cr_get (((UINT) 6)), -4);
1906 current_cpu->branch (opval, npc, status);
1907 if (current_cpu->trace_result_p)
1908 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
1911 USI opval = current_cpu->h_cr_get (((UINT) 14));
1912 current_cpu->h_cr_set (((UINT) 6), opval);
1913 if (current_cpu->trace_result_p)
1914 current_cpu->trace_stream << "cr-6" << '[' << ((UINT) 6) << ']' << ":=0x" << hex << opval << dec << " ";
1917 UQI opval = current_cpu->hardware.h_bpsw;
1918 current_cpu->h_psw_set (opval);
1919 if (current_cpu->trace_result_p)
1920 current_cpu->trace_stream << "psw" << ":=0x" << hex << (USI) opval << dec << " ";
1923 UQI opval = current_cpu->hardware.h_bbpsw;
1924 current_cpu->hardware.h_bpsw = opval;
1925 if (current_cpu->trace_result_p)
1926 current_cpu->trace_stream << "bpsw" << ":=0x" << hex << (USI) opval << dec << " ";
1930 current_cpu->done_cti_insn (npc, status);
1935 // ********** seth: seth $dr,$hash$hi16
1938 m32rbf_sem_seth (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1940 #define FLD(f) abuf->fields.sfmt_seth.f
1941 sem_status status = SEM_STATUS_NORMAL;
1942 m32rbf_scache* abuf = sem;
1943 PCADDR pc = abuf->addr;
1944 PCADDR npc = pc + 4;
1947 SI opval = SLLSI (FLD (f_hi16), 16);
1948 * FLD (i_dr) = opval;
1949 if (current_cpu->trace_result_p)
1950 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1953 current_cpu->done_insn (npc, status);
1958 // ********** sll: sll $dr,$sr
1961 m32rbf_sem_sll (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1963 #define FLD(f) abuf->fields.sfmt_and3.f
1964 sem_status status = SEM_STATUS_NORMAL;
1965 m32rbf_scache* abuf = sem;
1966 PCADDR pc = abuf->addr;
1967 PCADDR npc = pc + 2;
1970 SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
1971 * FLD (i_dr) = opval;
1972 if (current_cpu->trace_result_p)
1973 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1976 current_cpu->done_insn (npc, status);
1981 // ********** sll3: sll3 $dr,$sr,$simm16
1984 m32rbf_sem_sll3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1986 #define FLD(f) abuf->fields.sfmt_add3.f
1987 sem_status status = SEM_STATUS_NORMAL;
1988 m32rbf_scache* abuf = sem;
1989 PCADDR pc = abuf->addr;
1990 PCADDR npc = pc + 4;
1993 SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
1994 * FLD (i_dr) = opval;
1995 if (current_cpu->trace_result_p)
1996 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1999 current_cpu->done_insn (npc, status);
2004 // ********** slli: slli $dr,$uimm5
2007 m32rbf_sem_slli (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2009 #define FLD(f) abuf->fields.sfmt_slli.f
2010 sem_status status = SEM_STATUS_NORMAL;
2011 m32rbf_scache* abuf = sem;
2012 PCADDR pc = abuf->addr;
2013 PCADDR npc = pc + 2;
2016 SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
2017 * FLD (i_dr) = opval;
2018 if (current_cpu->trace_result_p)
2019 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2022 current_cpu->done_insn (npc, status);
2027 // ********** sra: sra $dr,$sr
2030 m32rbf_sem_sra (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2032 #define FLD(f) abuf->fields.sfmt_and3.f
2033 sem_status status = SEM_STATUS_NORMAL;
2034 m32rbf_scache* abuf = sem;
2035 PCADDR pc = abuf->addr;
2036 PCADDR npc = pc + 2;
2039 SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2040 * FLD (i_dr) = opval;
2041 if (current_cpu->trace_result_p)
2042 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2045 current_cpu->done_insn (npc, status);
2050 // ********** sra3: sra3 $dr,$sr,$simm16
2053 m32rbf_sem_sra3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2055 #define FLD(f) abuf->fields.sfmt_add3.f
2056 sem_status status = SEM_STATUS_NORMAL;
2057 m32rbf_scache* abuf = sem;
2058 PCADDR pc = abuf->addr;
2059 PCADDR npc = pc + 4;
2062 SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2063 * FLD (i_dr) = opval;
2064 if (current_cpu->trace_result_p)
2065 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2068 current_cpu->done_insn (npc, status);
2073 // ********** srai: srai $dr,$uimm5
2076 m32rbf_sem_srai (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2078 #define FLD(f) abuf->fields.sfmt_slli.f
2079 sem_status status = SEM_STATUS_NORMAL;
2080 m32rbf_scache* abuf = sem;
2081 PCADDR pc = abuf->addr;
2082 PCADDR npc = pc + 2;
2085 SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
2086 * FLD (i_dr) = opval;
2087 if (current_cpu->trace_result_p)
2088 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2091 current_cpu->done_insn (npc, status);
2096 // ********** srl: srl $dr,$sr
2099 m32rbf_sem_srl (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2101 #define FLD(f) abuf->fields.sfmt_and3.f
2102 sem_status status = SEM_STATUS_NORMAL;
2103 m32rbf_scache* abuf = sem;
2104 PCADDR pc = abuf->addr;
2105 PCADDR npc = pc + 2;
2108 SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2109 * FLD (i_dr) = opval;
2110 if (current_cpu->trace_result_p)
2111 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2114 current_cpu->done_insn (npc, status);
2119 // ********** srl3: srl3 $dr,$sr,$simm16
2122 m32rbf_sem_srl3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2124 #define FLD(f) abuf->fields.sfmt_add3.f
2125 sem_status status = SEM_STATUS_NORMAL;
2126 m32rbf_scache* abuf = sem;
2127 PCADDR pc = abuf->addr;
2128 PCADDR npc = pc + 4;
2131 SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2132 * FLD (i_dr) = opval;
2133 if (current_cpu->trace_result_p)
2134 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2137 current_cpu->done_insn (npc, status);
2142 // ********** srli: srli $dr,$uimm5
2145 m32rbf_sem_srli (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2147 #define FLD(f) abuf->fields.sfmt_slli.f
2148 sem_status status = SEM_STATUS_NORMAL;
2149 m32rbf_scache* abuf = sem;
2150 PCADDR pc = abuf->addr;
2151 PCADDR npc = pc + 2;
2154 SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
2155 * FLD (i_dr) = opval;
2156 if (current_cpu->trace_result_p)
2157 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2160 current_cpu->done_insn (npc, status);
2165 // ********** st: st $src1,@$src2
2168 m32rbf_sem_st (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2170 #define FLD(f) abuf->fields.sfmt_st_d.f
2171 sem_status status = SEM_STATUS_NORMAL;
2172 m32rbf_scache* abuf = sem;
2173 PCADDR pc = abuf->addr;
2174 PCADDR npc = pc + 2;
2177 SI opval = * FLD (i_src1);
2178 current_cpu->SETMEMSI (pc, * FLD (i_src2), opval);
2179 if (current_cpu->trace_result_p)
2180 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) * FLD (i_src2) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2183 current_cpu->done_insn (npc, status);
2188 // ********** st-d: st $src1,@($slo16,$src2)
2191 m32rbf_sem_st_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2193 #define FLD(f) abuf->fields.sfmt_st_d.f
2194 sem_status status = SEM_STATUS_NORMAL;
2195 m32rbf_scache* abuf = sem;
2196 PCADDR pc = abuf->addr;
2197 PCADDR npc = pc + 4;
2200 SI opval = * FLD (i_src1);
2201 current_cpu->SETMEMSI (pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2202 if (current_cpu->trace_result_p)
2203 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) ADDSI (* FLD (i_src2), FLD (f_simm16)) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2206 current_cpu->done_insn (npc, status);
2211 // ********** stb: stb $src1,@$src2
2214 m32rbf_sem_stb (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2216 #define FLD(f) abuf->fields.sfmt_st_d.f
2217 sem_status status = SEM_STATUS_NORMAL;
2218 m32rbf_scache* abuf = sem;
2219 PCADDR pc = abuf->addr;
2220 PCADDR npc = pc + 2;
2223 QI opval = * FLD (i_src1);
2224 current_cpu->SETMEMQI (pc, * FLD (i_src2), opval);
2225 if (current_cpu->trace_result_p)
2226 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) * FLD (i_src2) << dec << ']' << ":=0x" << hex << (SI) opval << dec << " ";
2229 current_cpu->done_insn (npc, status);
2234 // ********** stb-d: stb $src1,@($slo16,$src2)
2237 m32rbf_sem_stb_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2239 #define FLD(f) abuf->fields.sfmt_st_d.f
2240 sem_status status = SEM_STATUS_NORMAL;
2241 m32rbf_scache* abuf = sem;
2242 PCADDR pc = abuf->addr;
2243 PCADDR npc = pc + 4;
2246 QI opval = * FLD (i_src1);
2247 current_cpu->SETMEMQI (pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2248 if (current_cpu->trace_result_p)
2249 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) ADDSI (* FLD (i_src2), FLD (f_simm16)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << " ";
2252 current_cpu->done_insn (npc, status);
2257 // ********** sth: sth $src1,@$src2
2260 m32rbf_sem_sth (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2262 #define FLD(f) abuf->fields.sfmt_st_d.f
2263 sem_status status = SEM_STATUS_NORMAL;
2264 m32rbf_scache* abuf = sem;
2265 PCADDR pc = abuf->addr;
2266 PCADDR npc = pc + 2;
2269 HI opval = * FLD (i_src1);
2270 current_cpu->SETMEMHI (pc, * FLD (i_src2), opval);
2271 if (current_cpu->trace_result_p)
2272 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) * FLD (i_src2) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2275 current_cpu->done_insn (npc, status);
2280 // ********** sth-d: sth $src1,@($slo16,$src2)
2283 m32rbf_sem_sth_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2285 #define FLD(f) abuf->fields.sfmt_st_d.f
2286 sem_status status = SEM_STATUS_NORMAL;
2287 m32rbf_scache* abuf = sem;
2288 PCADDR pc = abuf->addr;
2289 PCADDR npc = pc + 4;
2292 HI opval = * FLD (i_src1);
2293 current_cpu->SETMEMHI (pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2294 if (current_cpu->trace_result_p)
2295 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) ADDSI (* FLD (i_src2), FLD (f_simm16)) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2298 current_cpu->done_insn (npc, status);
2303 // ********** st-plus: st $src1,@+$src2
2306 m32rbf_sem_st_plus (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2308 #define FLD(f) abuf->fields.sfmt_st_d.f
2309 sem_status status = SEM_STATUS_NORMAL;
2310 m32rbf_scache* abuf = sem;
2311 PCADDR pc = abuf->addr;
2312 PCADDR npc = pc + 2;
2316 tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
2318 SI opval = * FLD (i_src1);
2319 current_cpu->SETMEMSI (pc, tmp_new_src2, opval);
2320 if (current_cpu->trace_result_p)
2321 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) tmp_new_src2 << dec << ']' << ":=0x" << hex << opval << dec << " ";
2324 SI opval = tmp_new_src2;
2325 * FLD (i_src2) = opval;
2326 if (current_cpu->trace_result_p)
2327 current_cpu->trace_stream << "src2" << '[' << FLD (f_r2) << ']' << ":=0x" << hex << opval << dec << " ";
2331 current_cpu->done_insn (npc, status);
2336 // ********** st-minus: st $src1,@-$src2
2339 m32rbf_sem_st_minus (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2341 #define FLD(f) abuf->fields.sfmt_st_d.f
2342 sem_status status = SEM_STATUS_NORMAL;
2343 m32rbf_scache* abuf = sem;
2344 PCADDR pc = abuf->addr;
2345 PCADDR npc = pc + 2;
2349 tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
2351 SI opval = * FLD (i_src1);
2352 current_cpu->SETMEMSI (pc, tmp_new_src2, opval);
2353 if (current_cpu->trace_result_p)
2354 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) tmp_new_src2 << dec << ']' << ":=0x" << hex << opval << dec << " ";
2357 SI opval = tmp_new_src2;
2358 * FLD (i_src2) = opval;
2359 if (current_cpu->trace_result_p)
2360 current_cpu->trace_stream << "src2" << '[' << FLD (f_r2) << ']' << ":=0x" << hex << opval << dec << " ";
2364 current_cpu->done_insn (npc, status);
2369 // ********** sub: sub $dr,$sr
2372 m32rbf_sem_sub (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2374 #define FLD(f) abuf->fields.sfmt_and3.f
2375 sem_status status = SEM_STATUS_NORMAL;
2376 m32rbf_scache* abuf = sem;
2377 PCADDR pc = abuf->addr;
2378 PCADDR npc = pc + 2;
2381 SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
2382 * FLD (i_dr) = opval;
2383 if (current_cpu->trace_result_p)
2384 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2387 current_cpu->done_insn (npc, status);
2392 // ********** subv: subv $dr,$sr
2395 m32rbf_sem_subv (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2397 #define FLD(f) abuf->fields.sfmt_and3.f
2398 sem_status status = SEM_STATUS_NORMAL;
2399 m32rbf_scache* abuf = sem;
2400 PCADDR pc = abuf->addr;
2401 PCADDR npc = pc + 2;
2405 temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
2406 temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
2409 * FLD (i_dr) = opval;
2410 if (current_cpu->trace_result_p)
2411 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2415 current_cpu->hardware.h_cond = opval;
2416 if (current_cpu->trace_result_p)
2417 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
2421 current_cpu->done_insn (npc, status);
2426 // ********** subx: subx $dr,$sr
2429 m32rbf_sem_subx (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2431 #define FLD(f) abuf->fields.sfmt_and3.f
2432 sem_status status = SEM_STATUS_NORMAL;
2433 m32rbf_scache* abuf = sem;
2434 PCADDR pc = abuf->addr;
2435 PCADDR npc = pc + 2;
2439 temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), current_cpu->hardware.h_cond);
2440 temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), current_cpu->hardware.h_cond);
2443 * FLD (i_dr) = opval;
2444 if (current_cpu->trace_result_p)
2445 current_cpu->trace_stream << "dr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2449 current_cpu->hardware.h_cond = opval;
2450 if (current_cpu->trace_result_p)
2451 current_cpu->trace_stream << "condbit" << ":=0x" << hex << opval << dec << " ";
2455 current_cpu->done_insn (npc, status);
2460 // ********** trap: trap $uimm4
2463 m32rbf_sem_trap (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2465 #define FLD(f) abuf->fields.sfmt_trap.f
2466 sem_status status = SEM_STATUS_NORMAL;
2467 m32rbf_scache* abuf = sem;
2468 PCADDR pc = abuf->addr;
2469 PCADDR npc = pc + 2;
2473 USI opval = current_cpu->h_cr_get (((UINT) 6));
2474 current_cpu->h_cr_set (((UINT) 14), opval);
2475 if (current_cpu->trace_result_p)
2476 current_cpu->trace_stream << "cr-14" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << " ";
2479 USI opval = ADDSI (pc, 4);
2480 current_cpu->h_cr_set (((UINT) 6), opval);
2481 if (current_cpu->trace_result_p)
2482 current_cpu->trace_stream << "cr-6" << '[' << ((UINT) 6) << ']' << ":=0x" << hex << opval << dec << " ";
2485 UQI opval = current_cpu->hardware.h_bpsw;
2486 current_cpu->hardware.h_bbpsw = opval;
2487 if (current_cpu->trace_result_p)
2488 current_cpu->trace_stream << "bbpsw" << ":=0x" << hex << (USI) opval << dec << " ";
2491 UQI opval = current_cpu->h_psw_get ();
2492 current_cpu->hardware.h_bpsw = opval;
2493 if (current_cpu->trace_result_p)
2494 current_cpu->trace_stream << "bpsw" << ":=0x" << hex << (USI) opval << dec << " ";
2497 UQI opval = ANDQI (current_cpu->h_psw_get (), 128);
2498 current_cpu->h_psw_set (opval);
2499 if (current_cpu->trace_result_p)
2500 current_cpu->trace_stream << "psw" << ":=0x" << hex << (USI) opval << dec << " ";
2503 SI opval = current_cpu->m32r_trap (pc, FLD (f_uimm4));
2504 current_cpu->branch (opval, npc, status);
2505 if (current_cpu->trace_result_p)
2506 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
2510 current_cpu->done_cti_insn (npc, status);
2515 // ********** unlock: unlock $src1,@$src2
2518 m32rbf_sem_unlock (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2520 #define FLD(f) abuf->fields.sfmt_st_d.f
2521 sem_status status = SEM_STATUS_NORMAL;
2522 m32rbf_scache* abuf = sem;
2523 PCADDR pc = abuf->addr;
2524 PCADDR npc = pc + 2;
2527 if (current_cpu->hardware.h_lock) {
2529 SI opval = * FLD (i_src1);
2530 current_cpu->SETMEMSI (pc, * FLD (i_src2), opval);
2531 if (current_cpu->trace_result_p)
2532 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) * FLD (i_src2) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2537 current_cpu->hardware.h_lock = opval;
2538 if (current_cpu->trace_result_p)
2539 current_cpu->trace_stream << "lock" << ":=0x" << hex << opval << dec << " ";
2543 current_cpu->done_insn (npc, status);