1 /* Simulator instruction semantics for m32rbf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 2000-2009 Red Hat, Inc.
7 This file is part of the Red Hat simulators.
18 using namespace m32rbf; // FIXME: namespace organization still wip
19 #define GET_ATTR(name) GET_ATTR_##name ()
22 // ********** x-invalid: --invalid--
25 m32rbf_sem_x_invalid (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
27 #define FLD(f) abuf->fields.fmt_empty.f
28 sem_status status = SEM_STATUS_NORMAL;
29 m32rbf_scache* abuf = sem;
30 PCADDR pc = abuf->addr;
34 current_cpu->invalid_insn (pc);
39 current_cpu->done_insn (npc, status);
44 // ********** add: add $dr,$sr
47 m32rbf_sem_add (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
49 #define FLD(f) abuf->fields.sfmt_and3.f
50 sem_status status = SEM_STATUS_NORMAL;
51 m32rbf_scache* abuf = sem;
52 PCADDR pc = abuf->addr;
56 SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
57 if (UNLIKELY(current_cpu->trace_result_p))
58 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
62 current_cpu->done_insn (npc, status);
67 // ********** add3: add3 $dr,$sr,$hash$slo16
70 m32rbf_sem_add3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
72 #define FLD(f) abuf->fields.sfmt_add3.f
73 sem_status status = SEM_STATUS_NORMAL;
74 m32rbf_scache* abuf = sem;
75 PCADDR pc = abuf->addr;
79 SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));
80 if (UNLIKELY(current_cpu->trace_result_p))
81 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
85 current_cpu->done_insn (npc, status);
90 // ********** and: and $dr,$sr
93 m32rbf_sem_and (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
95 #define FLD(f) abuf->fields.sfmt_and3.f
96 sem_status status = SEM_STATUS_NORMAL;
97 m32rbf_scache* abuf = sem;
98 PCADDR pc = abuf->addr;
102 SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
103 if (UNLIKELY(current_cpu->trace_result_p))
104 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
105 * FLD (i_dr) = opval;
108 current_cpu->done_insn (npc, status);
113 // ********** and3: and3 $dr,$sr,$uimm16
116 m32rbf_sem_and3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
118 #define FLD(f) abuf->fields.sfmt_and3.f
119 sem_status status = SEM_STATUS_NORMAL;
120 m32rbf_scache* abuf = sem;
121 PCADDR pc = abuf->addr;
125 SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));
126 if (UNLIKELY(current_cpu->trace_result_p))
127 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
128 * FLD (i_dr) = opval;
131 current_cpu->done_insn (npc, status);
136 // ********** or: or $dr,$sr
139 m32rbf_sem_or (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
141 #define FLD(f) abuf->fields.sfmt_and3.f
142 sem_status status = SEM_STATUS_NORMAL;
143 m32rbf_scache* abuf = sem;
144 PCADDR pc = abuf->addr;
148 SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
149 if (UNLIKELY(current_cpu->trace_result_p))
150 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
151 * FLD (i_dr) = opval;
154 current_cpu->done_insn (npc, status);
159 // ********** or3: or3 $dr,$sr,$hash$ulo16
162 m32rbf_sem_or3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
164 #define FLD(f) abuf->fields.sfmt_and3.f
165 sem_status status = SEM_STATUS_NORMAL;
166 m32rbf_scache* abuf = sem;
167 PCADDR pc = abuf->addr;
171 SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));
172 if (UNLIKELY(current_cpu->trace_result_p))
173 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
174 * FLD (i_dr) = opval;
177 current_cpu->done_insn (npc, status);
182 // ********** xor: xor $dr,$sr
185 m32rbf_sem_xor (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
187 #define FLD(f) abuf->fields.sfmt_and3.f
188 sem_status status = SEM_STATUS_NORMAL;
189 m32rbf_scache* abuf = sem;
190 PCADDR pc = abuf->addr;
194 SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
195 if (UNLIKELY(current_cpu->trace_result_p))
196 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
197 * FLD (i_dr) = opval;
200 current_cpu->done_insn (npc, status);
205 // ********** xor3: xor3 $dr,$sr,$uimm16
208 m32rbf_sem_xor3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
210 #define FLD(f) abuf->fields.sfmt_and3.f
211 sem_status status = SEM_STATUS_NORMAL;
212 m32rbf_scache* abuf = sem;
213 PCADDR pc = abuf->addr;
217 SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));
218 if (UNLIKELY(current_cpu->trace_result_p))
219 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
220 * FLD (i_dr) = opval;
223 current_cpu->done_insn (npc, status);
228 // ********** addi: addi $dr,$simm8
231 m32rbf_sem_addi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
233 #define FLD(f) abuf->fields.sfmt_addi.f
234 sem_status status = SEM_STATUS_NORMAL;
235 m32rbf_scache* abuf = sem;
236 PCADDR pc = abuf->addr;
240 SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
241 if (UNLIKELY(current_cpu->trace_result_p))
242 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
243 * FLD (i_dr) = opval;
246 current_cpu->done_insn (npc, status);
251 // ********** addv: addv $dr,$sr
254 m32rbf_sem_addv (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
256 #define FLD(f) abuf->fields.sfmt_and3.f
257 sem_status status = SEM_STATUS_NORMAL;
258 m32rbf_scache* abuf = sem;
259 PCADDR pc = abuf->addr;
264 temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
265 temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
268 if (UNLIKELY(current_cpu->trace_result_p))
269 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
270 * FLD (i_dr) = opval;
274 if (UNLIKELY(current_cpu->trace_result_p))
275 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
276 current_cpu->hardware.h_cond = opval;
280 current_cpu->done_insn (npc, status);
285 // ********** addv3: addv3 $dr,$sr,$simm16
288 m32rbf_sem_addv3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
290 #define FLD(f) abuf->fields.sfmt_add3.f
291 sem_status status = SEM_STATUS_NORMAL;
292 m32rbf_scache* abuf = sem;
293 PCADDR pc = abuf->addr;
298 temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16));
299 temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0);
302 if (UNLIKELY(current_cpu->trace_result_p))
303 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
304 * FLD (i_dr) = opval;
308 if (UNLIKELY(current_cpu->trace_result_p))
309 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
310 current_cpu->hardware.h_cond = opval;
314 current_cpu->done_insn (npc, status);
319 // ********** addx: addx $dr,$sr
322 m32rbf_sem_addx (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
324 #define FLD(f) abuf->fields.sfmt_and3.f
325 sem_status status = SEM_STATUS_NORMAL;
326 m32rbf_scache* abuf = sem;
327 PCADDR pc = abuf->addr;
332 temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), current_cpu->hardware.h_cond);
333 temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), current_cpu->hardware.h_cond);
336 if (UNLIKELY(current_cpu->trace_result_p))
337 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
338 * FLD (i_dr) = opval;
342 if (UNLIKELY(current_cpu->trace_result_p))
343 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
344 current_cpu->hardware.h_cond = opval;
348 current_cpu->done_insn (npc, status);
353 // ********** bc8: bc.s $disp8
356 m32rbf_sem_bc8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
358 #define FLD(f) abuf->fields.sfmt_bc8.f
359 sem_status status = SEM_STATUS_NORMAL;
360 m32rbf_scache* abuf = sem;
361 PCADDR pc = abuf->addr;
364 if (current_cpu->hardware.h_cond) {
366 USI opval = FLD (i_disp8);
367 if (UNLIKELY(current_cpu->trace_result_p))
368 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
369 current_cpu->branch (opval, npc, status);
373 current_cpu->done_cti_insn (npc, status);
378 // ********** bc24: bc.l $disp24
381 m32rbf_sem_bc24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
383 #define FLD(f) abuf->fields.sfmt_bc24.f
384 sem_status status = SEM_STATUS_NORMAL;
385 m32rbf_scache* abuf = sem;
386 PCADDR pc = abuf->addr;
389 if (current_cpu->hardware.h_cond) {
391 USI opval = FLD (i_disp24);
392 if (UNLIKELY(current_cpu->trace_result_p))
393 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
394 current_cpu->branch (opval, npc, status);
398 current_cpu->done_cti_insn (npc, status);
403 // ********** beq: beq $src1,$src2,$disp16
406 m32rbf_sem_beq (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
408 #define FLD(f) abuf->fields.sfmt_beq.f
409 sem_status status = SEM_STATUS_NORMAL;
410 m32rbf_scache* abuf = sem;
411 PCADDR pc = abuf->addr;
414 if (EQSI (* FLD (i_src1), * FLD (i_src2))) {
416 USI opval = FLD (i_disp16);
417 if (UNLIKELY(current_cpu->trace_result_p))
418 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
419 current_cpu->branch (opval, npc, status);
423 current_cpu->done_cti_insn (npc, status);
428 // ********** beqz: beqz $src2,$disp16
431 m32rbf_sem_beqz (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
433 #define FLD(f) abuf->fields.sfmt_beq.f
434 sem_status status = SEM_STATUS_NORMAL;
435 m32rbf_scache* abuf = sem;
436 PCADDR pc = abuf->addr;
439 if (EQSI (* FLD (i_src2), 0)) {
441 USI opval = FLD (i_disp16);
442 if (UNLIKELY(current_cpu->trace_result_p))
443 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
444 current_cpu->branch (opval, npc, status);
448 current_cpu->done_cti_insn (npc, status);
453 // ********** bgez: bgez $src2,$disp16
456 m32rbf_sem_bgez (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
458 #define FLD(f) abuf->fields.sfmt_beq.f
459 sem_status status = SEM_STATUS_NORMAL;
460 m32rbf_scache* abuf = sem;
461 PCADDR pc = abuf->addr;
464 if (GESI (* FLD (i_src2), 0)) {
466 USI opval = FLD (i_disp16);
467 if (UNLIKELY(current_cpu->trace_result_p))
468 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
469 current_cpu->branch (opval, npc, status);
473 current_cpu->done_cti_insn (npc, status);
478 // ********** bgtz: bgtz $src2,$disp16
481 m32rbf_sem_bgtz (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
483 #define FLD(f) abuf->fields.sfmt_beq.f
484 sem_status status = SEM_STATUS_NORMAL;
485 m32rbf_scache* abuf = sem;
486 PCADDR pc = abuf->addr;
489 if (GTSI (* FLD (i_src2), 0)) {
491 USI opval = FLD (i_disp16);
492 if (UNLIKELY(current_cpu->trace_result_p))
493 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
494 current_cpu->branch (opval, npc, status);
498 current_cpu->done_cti_insn (npc, status);
503 // ********** blez: blez $src2,$disp16
506 m32rbf_sem_blez (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
508 #define FLD(f) abuf->fields.sfmt_beq.f
509 sem_status status = SEM_STATUS_NORMAL;
510 m32rbf_scache* abuf = sem;
511 PCADDR pc = abuf->addr;
514 if (LESI (* FLD (i_src2), 0)) {
516 USI opval = FLD (i_disp16);
517 if (UNLIKELY(current_cpu->trace_result_p))
518 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
519 current_cpu->branch (opval, npc, status);
523 current_cpu->done_cti_insn (npc, status);
528 // ********** bltz: bltz $src2,$disp16
531 m32rbf_sem_bltz (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
533 #define FLD(f) abuf->fields.sfmt_beq.f
534 sem_status status = SEM_STATUS_NORMAL;
535 m32rbf_scache* abuf = sem;
536 PCADDR pc = abuf->addr;
539 if (LTSI (* FLD (i_src2), 0)) {
541 USI opval = FLD (i_disp16);
542 if (UNLIKELY(current_cpu->trace_result_p))
543 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
544 current_cpu->branch (opval, npc, status);
548 current_cpu->done_cti_insn (npc, status);
553 // ********** bnez: bnez $src2,$disp16
556 m32rbf_sem_bnez (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
558 #define FLD(f) abuf->fields.sfmt_beq.f
559 sem_status status = SEM_STATUS_NORMAL;
560 m32rbf_scache* abuf = sem;
561 PCADDR pc = abuf->addr;
564 if (NESI (* FLD (i_src2), 0)) {
566 USI opval = FLD (i_disp16);
567 if (UNLIKELY(current_cpu->trace_result_p))
568 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
569 current_cpu->branch (opval, npc, status);
573 current_cpu->done_cti_insn (npc, status);
578 // ********** bl8: bl.s $disp8
581 m32rbf_sem_bl8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
583 #define FLD(f) abuf->fields.sfmt_bc8.f
584 sem_status status = SEM_STATUS_NORMAL;
585 m32rbf_scache* abuf = sem;
586 PCADDR pc = abuf->addr;
591 SI opval = ADDSI (ANDSI (pc, -4), 4);
592 if (UNLIKELY(current_cpu->trace_result_p))
593 current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << " ";
594 current_cpu->hardware.h_gr[((UINT) 14)] = opval;
597 USI opval = FLD (i_disp8);
598 if (UNLIKELY(current_cpu->trace_result_p))
599 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
600 current_cpu->branch (opval, npc, status);
604 current_cpu->done_cti_insn (npc, status);
609 // ********** bl24: bl.l $disp24
612 m32rbf_sem_bl24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
614 #define FLD(f) abuf->fields.sfmt_bc24.f
615 sem_status status = SEM_STATUS_NORMAL;
616 m32rbf_scache* abuf = sem;
617 PCADDR pc = abuf->addr;
622 SI opval = ADDSI (pc, 4);
623 if (UNLIKELY(current_cpu->trace_result_p))
624 current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << " ";
625 current_cpu->hardware.h_gr[((UINT) 14)] = opval;
628 USI opval = FLD (i_disp24);
629 if (UNLIKELY(current_cpu->trace_result_p))
630 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
631 current_cpu->branch (opval, npc, status);
635 current_cpu->done_cti_insn (npc, status);
640 // ********** bnc8: bnc.s $disp8
643 m32rbf_sem_bnc8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
645 #define FLD(f) abuf->fields.sfmt_bc8.f
646 sem_status status = SEM_STATUS_NORMAL;
647 m32rbf_scache* abuf = sem;
648 PCADDR pc = abuf->addr;
651 if (NOTBI (current_cpu->hardware.h_cond)) {
653 USI opval = FLD (i_disp8);
654 if (UNLIKELY(current_cpu->trace_result_p))
655 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
656 current_cpu->branch (opval, npc, status);
660 current_cpu->done_cti_insn (npc, status);
665 // ********** bnc24: bnc.l $disp24
668 m32rbf_sem_bnc24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
670 #define FLD(f) abuf->fields.sfmt_bc24.f
671 sem_status status = SEM_STATUS_NORMAL;
672 m32rbf_scache* abuf = sem;
673 PCADDR pc = abuf->addr;
676 if (NOTBI (current_cpu->hardware.h_cond)) {
678 USI opval = FLD (i_disp24);
679 if (UNLIKELY(current_cpu->trace_result_p))
680 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
681 current_cpu->branch (opval, npc, status);
685 current_cpu->done_cti_insn (npc, status);
690 // ********** bne: bne $src1,$src2,$disp16
693 m32rbf_sem_bne (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
695 #define FLD(f) abuf->fields.sfmt_beq.f
696 sem_status status = SEM_STATUS_NORMAL;
697 m32rbf_scache* abuf = sem;
698 PCADDR pc = abuf->addr;
701 if (NESI (* FLD (i_src1), * FLD (i_src2))) {
703 USI opval = FLD (i_disp16);
704 if (UNLIKELY(current_cpu->trace_result_p))
705 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
706 current_cpu->branch (opval, npc, status);
710 current_cpu->done_cti_insn (npc, status);
715 // ********** bra8: bra.s $disp8
718 m32rbf_sem_bra8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
720 #define FLD(f) abuf->fields.sfmt_bc8.f
721 sem_status status = SEM_STATUS_NORMAL;
722 m32rbf_scache* abuf = sem;
723 PCADDR pc = abuf->addr;
727 USI opval = FLD (i_disp8);
728 if (UNLIKELY(current_cpu->trace_result_p))
729 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
730 current_cpu->branch (opval, npc, status);
733 current_cpu->done_cti_insn (npc, status);
738 // ********** bra24: bra.l $disp24
741 m32rbf_sem_bra24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
743 #define FLD(f) abuf->fields.sfmt_bc24.f
744 sem_status status = SEM_STATUS_NORMAL;
745 m32rbf_scache* abuf = sem;
746 PCADDR pc = abuf->addr;
750 USI opval = FLD (i_disp24);
751 if (UNLIKELY(current_cpu->trace_result_p))
752 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
753 current_cpu->branch (opval, npc, status);
756 current_cpu->done_cti_insn (npc, status);
761 // ********** cmp: cmp $src1,$src2
764 m32rbf_sem_cmp (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
766 #define FLD(f) abuf->fields.sfmt_st_d.f
767 sem_status status = SEM_STATUS_NORMAL;
768 m32rbf_scache* abuf = sem;
769 PCADDR pc = abuf->addr;
773 BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
774 if (UNLIKELY(current_cpu->trace_result_p))
775 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
776 current_cpu->hardware.h_cond = opval;
779 current_cpu->done_insn (npc, status);
784 // ********** cmpi: cmpi $src2,$simm16
787 m32rbf_sem_cmpi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
789 #define FLD(f) abuf->fields.sfmt_st_d.f
790 sem_status status = SEM_STATUS_NORMAL;
791 m32rbf_scache* abuf = sem;
792 PCADDR pc = abuf->addr;
796 BI opval = LTSI (* FLD (i_src2), FLD (f_simm16));
797 if (UNLIKELY(current_cpu->trace_result_p))
798 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
799 current_cpu->hardware.h_cond = opval;
802 current_cpu->done_insn (npc, status);
807 // ********** cmpu: cmpu $src1,$src2
810 m32rbf_sem_cmpu (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
812 #define FLD(f) abuf->fields.sfmt_st_d.f
813 sem_status status = SEM_STATUS_NORMAL;
814 m32rbf_scache* abuf = sem;
815 PCADDR pc = abuf->addr;
819 BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
820 if (UNLIKELY(current_cpu->trace_result_p))
821 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
822 current_cpu->hardware.h_cond = opval;
825 current_cpu->done_insn (npc, status);
830 // ********** cmpui: cmpui $src2,$simm16
833 m32rbf_sem_cmpui (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
835 #define FLD(f) abuf->fields.sfmt_st_d.f
836 sem_status status = SEM_STATUS_NORMAL;
837 m32rbf_scache* abuf = sem;
838 PCADDR pc = abuf->addr;
842 BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16));
843 if (UNLIKELY(current_cpu->trace_result_p))
844 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
845 current_cpu->hardware.h_cond = opval;
848 current_cpu->done_insn (npc, status);
853 // ********** div: div $dr,$sr
856 m32rbf_sem_div (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
858 #define FLD(f) abuf->fields.sfmt_and3.f
859 sem_status status = SEM_STATUS_NORMAL;
860 m32rbf_scache* abuf = sem;
861 PCADDR pc = abuf->addr;
864 if (NESI (* FLD (i_sr), 0)) {
866 SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr));
867 if (UNLIKELY(current_cpu->trace_result_p))
868 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
869 * FLD (i_dr) = opval;
873 current_cpu->done_insn (npc, status);
878 // ********** divu: divu $dr,$sr
881 m32rbf_sem_divu (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
883 #define FLD(f) abuf->fields.sfmt_and3.f
884 sem_status status = SEM_STATUS_NORMAL;
885 m32rbf_scache* abuf = sem;
886 PCADDR pc = abuf->addr;
889 if (NESI (* FLD (i_sr), 0)) {
891 SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
892 if (UNLIKELY(current_cpu->trace_result_p))
893 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
894 * FLD (i_dr) = opval;
898 current_cpu->done_insn (npc, status);
903 // ********** rem: rem $dr,$sr
906 m32rbf_sem_rem (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
908 #define FLD(f) abuf->fields.sfmt_and3.f
909 sem_status status = SEM_STATUS_NORMAL;
910 m32rbf_scache* abuf = sem;
911 PCADDR pc = abuf->addr;
914 if (NESI (* FLD (i_sr), 0)) {
916 SI opval = MODSI (* FLD (i_dr), * FLD (i_sr));
917 if (UNLIKELY(current_cpu->trace_result_p))
918 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
919 * FLD (i_dr) = opval;
923 current_cpu->done_insn (npc, status);
928 // ********** remu: remu $dr,$sr
931 m32rbf_sem_remu (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
933 #define FLD(f) abuf->fields.sfmt_and3.f
934 sem_status status = SEM_STATUS_NORMAL;
935 m32rbf_scache* abuf = sem;
936 PCADDR pc = abuf->addr;
939 if (NESI (* FLD (i_sr), 0)) {
941 SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
942 if (UNLIKELY(current_cpu->trace_result_p))
943 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
944 * FLD (i_dr) = opval;
948 current_cpu->done_insn (npc, status);
953 // ********** jl: jl $sr
956 m32rbf_sem_jl (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
958 #define FLD(f) abuf->fields.sfmt_bset.f
959 sem_status status = SEM_STATUS_NORMAL;
960 m32rbf_scache* abuf = sem;
961 PCADDR pc = abuf->addr;
966 temp0 = ADDSI (ANDSI (pc, -4), 4);
967 temp1 = ANDSI (* FLD (i_sr), -4);
970 if (UNLIKELY(current_cpu->trace_result_p))
971 current_cpu->trace_stream << "gr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << " ";
972 current_cpu->hardware.h_gr[((UINT) 14)] = opval;
976 if (UNLIKELY(current_cpu->trace_result_p))
977 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
978 current_cpu->branch (opval, npc, status);
982 current_cpu->done_cti_insn (npc, status);
987 // ********** jmp: jmp $sr
990 m32rbf_sem_jmp (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
992 #define FLD(f) abuf->fields.sfmt_bset.f
993 sem_status status = SEM_STATUS_NORMAL;
994 m32rbf_scache* abuf = sem;
995 PCADDR pc = abuf->addr;
999 USI opval = ANDSI (* FLD (i_sr), -4);
1000 if (UNLIKELY(current_cpu->trace_result_p))
1001 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
1002 current_cpu->branch (opval, npc, status);
1005 current_cpu->done_cti_insn (npc, status);
1010 // ********** ld: ld $dr,@$sr
1013 m32rbf_sem_ld (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1015 #define FLD(f) abuf->fields.sfmt_and3.f
1016 sem_status status = SEM_STATUS_NORMAL;
1017 m32rbf_scache* abuf = sem;
1018 PCADDR pc = abuf->addr;
1019 PCADDR npc = pc + 2;
1022 SI opval = current_cpu->GETMEMSI (pc, * FLD (i_sr));
1023 if (UNLIKELY(current_cpu->trace_result_p))
1024 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1025 * FLD (i_dr) = opval;
1028 current_cpu->done_insn (npc, status);
1033 // ********** ld-d: ld $dr,@($slo16,$sr)
1036 m32rbf_sem_ld_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1038 #define FLD(f) abuf->fields.sfmt_add3.f
1039 sem_status status = SEM_STATUS_NORMAL;
1040 m32rbf_scache* abuf = sem;
1041 PCADDR pc = abuf->addr;
1042 PCADDR npc = pc + 4;
1045 SI opval = current_cpu->GETMEMSI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16)));
1046 if (UNLIKELY(current_cpu->trace_result_p))
1047 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1048 * FLD (i_dr) = opval;
1051 current_cpu->done_insn (npc, status);
1056 // ********** ldb: ldb $dr,@$sr
1059 m32rbf_sem_ldb (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1061 #define FLD(f) abuf->fields.sfmt_and3.f
1062 sem_status status = SEM_STATUS_NORMAL;
1063 m32rbf_scache* abuf = sem;
1064 PCADDR pc = abuf->addr;
1065 PCADDR npc = pc + 2;
1068 SI opval = EXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_sr)));
1069 if (UNLIKELY(current_cpu->trace_result_p))
1070 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1071 * FLD (i_dr) = opval;
1074 current_cpu->done_insn (npc, status);
1079 // ********** ldb-d: ldb $dr,@($slo16,$sr)
1082 m32rbf_sem_ldb_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1084 #define FLD(f) abuf->fields.sfmt_add3.f
1085 sem_status status = SEM_STATUS_NORMAL;
1086 m32rbf_scache* abuf = sem;
1087 PCADDR pc = abuf->addr;
1088 PCADDR npc = pc + 4;
1091 SI opval = EXTQISI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1092 if (UNLIKELY(current_cpu->trace_result_p))
1093 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1094 * FLD (i_dr) = opval;
1097 current_cpu->done_insn (npc, status);
1102 // ********** ldh: ldh $dr,@$sr
1105 m32rbf_sem_ldh (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1107 #define FLD(f) abuf->fields.sfmt_and3.f
1108 sem_status status = SEM_STATUS_NORMAL;
1109 m32rbf_scache* abuf = sem;
1110 PCADDR pc = abuf->addr;
1111 PCADDR npc = pc + 2;
1114 SI opval = EXTHISI (current_cpu->GETMEMHI (pc, * FLD (i_sr)));
1115 if (UNLIKELY(current_cpu->trace_result_p))
1116 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1117 * FLD (i_dr) = opval;
1120 current_cpu->done_insn (npc, status);
1125 // ********** ldh-d: ldh $dr,@($slo16,$sr)
1128 m32rbf_sem_ldh_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1130 #define FLD(f) abuf->fields.sfmt_add3.f
1131 sem_status status = SEM_STATUS_NORMAL;
1132 m32rbf_scache* abuf = sem;
1133 PCADDR pc = abuf->addr;
1134 PCADDR npc = pc + 4;
1137 SI opval = EXTHISI (current_cpu->GETMEMHI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1138 if (UNLIKELY(current_cpu->trace_result_p))
1139 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1140 * FLD (i_dr) = opval;
1143 current_cpu->done_insn (npc, status);
1148 // ********** ldub: ldub $dr,@$sr
1151 m32rbf_sem_ldub (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1153 #define FLD(f) abuf->fields.sfmt_and3.f
1154 sem_status status = SEM_STATUS_NORMAL;
1155 m32rbf_scache* abuf = sem;
1156 PCADDR pc = abuf->addr;
1157 PCADDR npc = pc + 2;
1160 SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, * FLD (i_sr)));
1161 if (UNLIKELY(current_cpu->trace_result_p))
1162 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1163 * FLD (i_dr) = opval;
1166 current_cpu->done_insn (npc, status);
1171 // ********** ldub-d: ldub $dr,@($slo16,$sr)
1174 m32rbf_sem_ldub_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1176 #define FLD(f) abuf->fields.sfmt_add3.f
1177 sem_status status = SEM_STATUS_NORMAL;
1178 m32rbf_scache* abuf = sem;
1179 PCADDR pc = abuf->addr;
1180 PCADDR npc = pc + 4;
1183 SI opval = ZEXTQISI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1184 if (UNLIKELY(current_cpu->trace_result_p))
1185 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1186 * FLD (i_dr) = opval;
1189 current_cpu->done_insn (npc, status);
1194 // ********** lduh: lduh $dr,@$sr
1197 m32rbf_sem_lduh (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1199 #define FLD(f) abuf->fields.sfmt_and3.f
1200 sem_status status = SEM_STATUS_NORMAL;
1201 m32rbf_scache* abuf = sem;
1202 PCADDR pc = abuf->addr;
1203 PCADDR npc = pc + 2;
1206 SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, * FLD (i_sr)));
1207 if (UNLIKELY(current_cpu->trace_result_p))
1208 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1209 * FLD (i_dr) = opval;
1212 current_cpu->done_insn (npc, status);
1217 // ********** lduh-d: lduh $dr,@($slo16,$sr)
1220 m32rbf_sem_lduh_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1222 #define FLD(f) abuf->fields.sfmt_add3.f
1223 sem_status status = SEM_STATUS_NORMAL;
1224 m32rbf_scache* abuf = sem;
1225 PCADDR pc = abuf->addr;
1226 PCADDR npc = pc + 4;
1229 SI opval = ZEXTHISI (current_cpu->GETMEMHI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1230 if (UNLIKELY(current_cpu->trace_result_p))
1231 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1232 * FLD (i_dr) = opval;
1235 current_cpu->done_insn (npc, status);
1240 // ********** ld-plus: ld $dr,@$sr+
1243 m32rbf_sem_ld_plus (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1245 #define FLD(f) abuf->fields.sfmt_and3.f
1246 sem_status status = SEM_STATUS_NORMAL;
1247 m32rbf_scache* abuf = sem;
1248 PCADDR pc = abuf->addr;
1249 PCADDR npc = pc + 2;
1253 temp0 = current_cpu->GETMEMSI (pc, * FLD (i_sr));
1254 temp1 = ADDSI (* FLD (i_sr), 4);
1257 if (UNLIKELY(current_cpu->trace_result_p))
1258 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1259 * FLD (i_dr) = opval;
1263 if (UNLIKELY(current_cpu->trace_result_p))
1264 current_cpu->trace_stream << "gr" << '[' << FLD (f_r2) << ']' << ":=0x" << hex << opval << dec << " ";
1265 * FLD (i_sr) = opval;
1269 current_cpu->done_insn (npc, status);
1274 // ********** ld24: ld24 $dr,$uimm24
1277 m32rbf_sem_ld24 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1279 #define FLD(f) abuf->fields.sfmt_ld24.f
1280 sem_status status = SEM_STATUS_NORMAL;
1281 m32rbf_scache* abuf = sem;
1282 PCADDR pc = abuf->addr;
1283 PCADDR npc = pc + 4;
1286 SI opval = FLD (i_uimm24);
1287 if (UNLIKELY(current_cpu->trace_result_p))
1288 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1289 * FLD (i_dr) = opval;
1292 current_cpu->done_insn (npc, status);
1297 // ********** ldi8: ldi8 $dr,$simm8
1300 m32rbf_sem_ldi8 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1302 #define FLD(f) abuf->fields.sfmt_addi.f
1303 sem_status status = SEM_STATUS_NORMAL;
1304 m32rbf_scache* abuf = sem;
1305 PCADDR pc = abuf->addr;
1306 PCADDR npc = pc + 2;
1309 SI opval = FLD (f_simm8);
1310 if (UNLIKELY(current_cpu->trace_result_p))
1311 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1312 * FLD (i_dr) = opval;
1315 current_cpu->done_insn (npc, status);
1320 // ********** ldi16: ldi16 $dr,$hash$slo16
1323 m32rbf_sem_ldi16 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1325 #define FLD(f) abuf->fields.sfmt_add3.f
1326 sem_status status = SEM_STATUS_NORMAL;
1327 m32rbf_scache* abuf = sem;
1328 PCADDR pc = abuf->addr;
1329 PCADDR npc = pc + 4;
1332 SI opval = FLD (f_simm16);
1333 if (UNLIKELY(current_cpu->trace_result_p))
1334 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1335 * FLD (i_dr) = opval;
1338 current_cpu->done_insn (npc, status);
1343 // ********** lock: lock $dr,@$sr
1346 m32rbf_sem_lock (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1348 #define FLD(f) abuf->fields.sfmt_and3.f
1349 sem_status status = SEM_STATUS_NORMAL;
1350 m32rbf_scache* abuf = sem;
1351 PCADDR pc = abuf->addr;
1352 PCADDR npc = pc + 2;
1357 if (UNLIKELY(current_cpu->trace_result_p))
1358 current_cpu->trace_stream << "lock" << ":=0x" << hex << opval << dec << " ";
1359 current_cpu->hardware.h_lock = opval;
1362 SI opval = current_cpu->GETMEMSI (pc, * FLD (i_sr));
1363 if (UNLIKELY(current_cpu->trace_result_p))
1364 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1365 * FLD (i_dr) = opval;
1369 current_cpu->done_insn (npc, status);
1374 // ********** machi: machi $src1,$src2
1377 m32rbf_sem_machi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1379 #define FLD(f) abuf->fields.sfmt_st_d.f
1380 sem_status status = SEM_STATUS_NORMAL;
1381 m32rbf_scache* abuf = sem;
1382 PCADDR pc = abuf->addr;
1383 PCADDR npc = pc + 2;
1386 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);
1387 if (UNLIKELY(current_cpu->trace_result_p))
1388 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1389 current_cpu->h_accum_set (opval);
1392 current_cpu->done_insn (npc, status);
1397 // ********** maclo: maclo $src1,$src2
1400 m32rbf_sem_maclo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1402 #define FLD(f) abuf->fields.sfmt_st_d.f
1403 sem_status status = SEM_STATUS_NORMAL;
1404 m32rbf_scache* abuf = sem;
1405 PCADDR pc = abuf->addr;
1406 PCADDR npc = pc + 2;
1409 DI opval = SRADI (SLLDI (ADDDI (current_cpu->h_accum_get (), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
1410 if (UNLIKELY(current_cpu->trace_result_p))
1411 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1412 current_cpu->h_accum_set (opval);
1415 current_cpu->done_insn (npc, status);
1420 // ********** macwhi: macwhi $src1,$src2
1423 m32rbf_sem_macwhi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1425 #define FLD(f) abuf->fields.sfmt_st_d.f
1426 sem_status status = SEM_STATUS_NORMAL;
1427 m32rbf_scache* abuf = sem;
1428 PCADDR pc = abuf->addr;
1429 PCADDR npc = pc + 2;
1432 DI opval = SRADI (SLLDI (ADDDI (current_cpu->h_accum_get (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
1433 if (UNLIKELY(current_cpu->trace_result_p))
1434 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1435 current_cpu->h_accum_set (opval);
1438 current_cpu->done_insn (npc, status);
1443 // ********** macwlo: macwlo $src1,$src2
1446 m32rbf_sem_macwlo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1448 #define FLD(f) abuf->fields.sfmt_st_d.f
1449 sem_status status = SEM_STATUS_NORMAL;
1450 m32rbf_scache* abuf = sem;
1451 PCADDR pc = abuf->addr;
1452 PCADDR npc = pc + 2;
1455 DI opval = SRADI (SLLDI (ADDDI (current_cpu->h_accum_get (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
1456 if (UNLIKELY(current_cpu->trace_result_p))
1457 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1458 current_cpu->h_accum_set (opval);
1461 current_cpu->done_insn (npc, status);
1466 // ********** mul: mul $dr,$sr
1469 m32rbf_sem_mul (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1471 #define FLD(f) abuf->fields.sfmt_and3.f
1472 sem_status status = SEM_STATUS_NORMAL;
1473 m32rbf_scache* abuf = sem;
1474 PCADDR pc = abuf->addr;
1475 PCADDR npc = pc + 2;
1478 SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
1479 if (UNLIKELY(current_cpu->trace_result_p))
1480 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1481 * FLD (i_dr) = opval;
1484 current_cpu->done_insn (npc, status);
1489 // ********** mulhi: mulhi $src1,$src2
1492 m32rbf_sem_mulhi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1494 #define FLD(f) abuf->fields.sfmt_st_d.f
1495 sem_status status = SEM_STATUS_NORMAL;
1496 m32rbf_scache* abuf = sem;
1497 PCADDR pc = abuf->addr;
1498 PCADDR npc = pc + 2;
1501 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
1502 if (UNLIKELY(current_cpu->trace_result_p))
1503 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1504 current_cpu->h_accum_set (opval);
1507 current_cpu->done_insn (npc, status);
1512 // ********** mullo: mullo $src1,$src2
1515 m32rbf_sem_mullo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1517 #define FLD(f) abuf->fields.sfmt_st_d.f
1518 sem_status status = SEM_STATUS_NORMAL;
1519 m32rbf_scache* abuf = sem;
1520 PCADDR pc = abuf->addr;
1521 PCADDR npc = pc + 2;
1524 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
1525 if (UNLIKELY(current_cpu->trace_result_p))
1526 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1527 current_cpu->h_accum_set (opval);
1530 current_cpu->done_insn (npc, status);
1535 // ********** mulwhi: mulwhi $src1,$src2
1538 m32rbf_sem_mulwhi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1540 #define FLD(f) abuf->fields.sfmt_st_d.f
1541 sem_status status = SEM_STATUS_NORMAL;
1542 m32rbf_scache* abuf = sem;
1543 PCADDR pc = abuf->addr;
1544 PCADDR npc = pc + 2;
1547 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 8), 8);
1548 if (UNLIKELY(current_cpu->trace_result_p))
1549 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1550 current_cpu->h_accum_set (opval);
1553 current_cpu->done_insn (npc, status);
1558 // ********** mulwlo: mulwlo $src1,$src2
1561 m32rbf_sem_mulwlo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1563 #define FLD(f) abuf->fields.sfmt_st_d.f
1564 sem_status status = SEM_STATUS_NORMAL;
1565 m32rbf_scache* abuf = sem;
1566 PCADDR pc = abuf->addr;
1567 PCADDR npc = pc + 2;
1570 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 8), 8);
1571 if (UNLIKELY(current_cpu->trace_result_p))
1572 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1573 current_cpu->h_accum_set (opval);
1576 current_cpu->done_insn (npc, status);
1581 // ********** mv: mv $dr,$sr
1584 m32rbf_sem_mv (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1586 #define FLD(f) abuf->fields.sfmt_and3.f
1587 sem_status status = SEM_STATUS_NORMAL;
1588 m32rbf_scache* abuf = sem;
1589 PCADDR pc = abuf->addr;
1590 PCADDR npc = pc + 2;
1593 SI opval = * FLD (i_sr);
1594 if (UNLIKELY(current_cpu->trace_result_p))
1595 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1596 * FLD (i_dr) = opval;
1599 current_cpu->done_insn (npc, status);
1604 // ********** mvfachi: mvfachi $dr
1607 m32rbf_sem_mvfachi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1609 #define FLD(f) abuf->fields.sfmt_slli.f
1610 sem_status status = SEM_STATUS_NORMAL;
1611 m32rbf_scache* abuf = sem;
1612 PCADDR pc = abuf->addr;
1613 PCADDR npc = pc + 2;
1616 SI opval = TRUNCDISI (SRADI (current_cpu->h_accum_get (), 32));
1617 if (UNLIKELY(current_cpu->trace_result_p))
1618 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1619 * FLD (i_dr) = opval;
1622 current_cpu->done_insn (npc, status);
1627 // ********** mvfaclo: mvfaclo $dr
1630 m32rbf_sem_mvfaclo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1632 #define FLD(f) abuf->fields.sfmt_slli.f
1633 sem_status status = SEM_STATUS_NORMAL;
1634 m32rbf_scache* abuf = sem;
1635 PCADDR pc = abuf->addr;
1636 PCADDR npc = pc + 2;
1639 SI opval = TRUNCDISI (current_cpu->h_accum_get ());
1640 if (UNLIKELY(current_cpu->trace_result_p))
1641 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1642 * FLD (i_dr) = opval;
1645 current_cpu->done_insn (npc, status);
1650 // ********** mvfacmi: mvfacmi $dr
1653 m32rbf_sem_mvfacmi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1655 #define FLD(f) abuf->fields.sfmt_slli.f
1656 sem_status status = SEM_STATUS_NORMAL;
1657 m32rbf_scache* abuf = sem;
1658 PCADDR pc = abuf->addr;
1659 PCADDR npc = pc + 2;
1662 SI opval = TRUNCDISI (SRADI (current_cpu->h_accum_get (), 16));
1663 if (UNLIKELY(current_cpu->trace_result_p))
1664 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1665 * FLD (i_dr) = opval;
1668 current_cpu->done_insn (npc, status);
1673 // ********** mvfc: mvfc $dr,$scr
1676 m32rbf_sem_mvfc (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1678 #define FLD(f) abuf->fields.sfmt_and3.f
1679 sem_status status = SEM_STATUS_NORMAL;
1680 m32rbf_scache* abuf = sem;
1681 PCADDR pc = abuf->addr;
1682 PCADDR npc = pc + 2;
1685 SI opval = current_cpu->h_cr_get (FLD (f_r2));
1686 if (UNLIKELY(current_cpu->trace_result_p))
1687 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1688 * FLD (i_dr) = opval;
1691 current_cpu->done_insn (npc, status);
1696 // ********** mvtachi: mvtachi $src1
1699 m32rbf_sem_mvtachi (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1701 #define FLD(f) abuf->fields.sfmt_st_d.f
1702 sem_status status = SEM_STATUS_NORMAL;
1703 m32rbf_scache* abuf = sem;
1704 PCADDR pc = abuf->addr;
1705 PCADDR npc = pc + 2;
1708 DI opval = ORDI (ANDDI (current_cpu->h_accum_get (), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
1709 if (UNLIKELY(current_cpu->trace_result_p))
1710 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1711 current_cpu->h_accum_set (opval);
1714 current_cpu->done_insn (npc, status);
1719 // ********** mvtaclo: mvtaclo $src1
1722 m32rbf_sem_mvtaclo (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1724 #define FLD(f) abuf->fields.sfmt_st_d.f
1725 sem_status status = SEM_STATUS_NORMAL;
1726 m32rbf_scache* abuf = sem;
1727 PCADDR pc = abuf->addr;
1728 PCADDR npc = pc + 2;
1731 DI opval = ORDI (ANDDI (current_cpu->h_accum_get (), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
1732 if (UNLIKELY(current_cpu->trace_result_p))
1733 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1734 current_cpu->h_accum_set (opval);
1737 current_cpu->done_insn (npc, status);
1742 // ********** mvtc: mvtc $sr,$dcr
1745 m32rbf_sem_mvtc (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1747 #define FLD(f) abuf->fields.sfmt_and3.f
1748 sem_status status = SEM_STATUS_NORMAL;
1749 m32rbf_scache* abuf = sem;
1750 PCADDR pc = abuf->addr;
1751 PCADDR npc = pc + 2;
1754 USI opval = * FLD (i_sr);
1755 if (UNLIKELY(current_cpu->trace_result_p))
1756 current_cpu->trace_stream << "cr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1757 current_cpu->h_cr_set (FLD (f_r1), opval);
1760 current_cpu->done_insn (npc, status);
1765 // ********** neg: neg $dr,$sr
1768 m32rbf_sem_neg (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1770 #define FLD(f) abuf->fields.sfmt_and3.f
1771 sem_status status = SEM_STATUS_NORMAL;
1772 m32rbf_scache* abuf = sem;
1773 PCADDR pc = abuf->addr;
1774 PCADDR npc = pc + 2;
1777 SI opval = NEGSI (* FLD (i_sr));
1778 if (UNLIKELY(current_cpu->trace_result_p))
1779 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1780 * FLD (i_dr) = opval;
1783 current_cpu->done_insn (npc, status);
1788 // ********** nop: nop
1791 m32rbf_sem_nop (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1793 #define FLD(f) abuf->fields.fmt_empty.f
1794 sem_status status = SEM_STATUS_NORMAL;
1795 m32rbf_scache* abuf = sem;
1796 PCADDR pc = abuf->addr;
1797 PCADDR npc = pc + 2;
1799 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
1801 current_cpu->done_insn (npc, status);
1806 // ********** not: not $dr,$sr
1809 m32rbf_sem_not (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1811 #define FLD(f) abuf->fields.sfmt_and3.f
1812 sem_status status = SEM_STATUS_NORMAL;
1813 m32rbf_scache* abuf = sem;
1814 PCADDR pc = abuf->addr;
1815 PCADDR npc = pc + 2;
1818 SI opval = INVSI (* FLD (i_sr));
1819 if (UNLIKELY(current_cpu->trace_result_p))
1820 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1821 * FLD (i_dr) = opval;
1824 current_cpu->done_insn (npc, status);
1829 // ********** rac: rac
1832 m32rbf_sem_rac (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1834 #define FLD(f) abuf->fields.fmt_empty.f
1835 sem_status status = SEM_STATUS_NORMAL;
1836 m32rbf_scache* abuf = sem;
1837 PCADDR pc = abuf->addr;
1838 PCADDR npc = pc + 2;
1842 tmp_tmp1 = SLLDI (current_cpu->h_accum_get (), 1);
1843 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
1845 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)));
1846 if (UNLIKELY(current_cpu->trace_result_p))
1847 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1848 current_cpu->h_accum_set (opval);
1852 current_cpu->done_insn (npc, status);
1857 // ********** rach: rach
1860 m32rbf_sem_rach (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1862 #define FLD(f) abuf->fields.fmt_empty.f
1863 sem_status status = SEM_STATUS_NORMAL;
1864 m32rbf_scache* abuf = sem;
1865 PCADDR pc = abuf->addr;
1866 PCADDR npc = pc + 2;
1870 tmp_tmp1 = ANDDI (current_cpu->h_accum_get (), MAKEDI (16777215, 0xffffffff));
1871 if (ANDIF (GEDI (tmp_tmp1, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) {
1872 tmp_tmp1 = MAKEDI (16383, 0x80000000);
1874 if (ANDIF (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) {
1875 tmp_tmp1 = MAKEDI (16760832, 0);
1877 tmp_tmp1 = ANDDI (ADDDI (current_cpu->h_accum_get (), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
1880 tmp_tmp1 = SLLDI (tmp_tmp1, 1);
1882 DI opval = SRADI (SLLDI (tmp_tmp1, 7), 7);
1883 if (UNLIKELY(current_cpu->trace_result_p))
1884 current_cpu->trace_stream << "accum" << ":=0x" << hex << opval << dec << " ";
1885 current_cpu->h_accum_set (opval);
1889 current_cpu->done_insn (npc, status);
1894 // ********** rte: rte
1897 m32rbf_sem_rte (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1899 #define FLD(f) abuf->fields.fmt_empty.f
1900 sem_status status = SEM_STATUS_NORMAL;
1901 m32rbf_scache* abuf = sem;
1902 PCADDR pc = abuf->addr;
1903 PCADDR npc = pc + 2;
1907 USI opval = ANDSI (current_cpu->h_cr_get (((UINT) 6)), -4);
1908 if (UNLIKELY(current_cpu->trace_result_p))
1909 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
1910 current_cpu->branch (opval, npc, status);
1913 USI opval = current_cpu->h_cr_get (((UINT) 14));
1914 if (UNLIKELY(current_cpu->trace_result_p))
1915 current_cpu->trace_stream << "cr" << '[' << ((UINT) 6) << ']' << ":=0x" << hex << opval << dec << " ";
1916 current_cpu->h_cr_set (((UINT) 6), opval);
1919 UQI opval = current_cpu->hardware.h_bpsw;
1920 if (UNLIKELY(current_cpu->trace_result_p))
1921 current_cpu->trace_stream << "psw" << ":=0x" << hex << (USI) opval << dec << " ";
1922 current_cpu->h_psw_set (opval);
1925 UQI opval = current_cpu->hardware.h_bbpsw;
1926 if (UNLIKELY(current_cpu->trace_result_p))
1927 current_cpu->trace_stream << "bpsw" << ":=0x" << hex << (USI) opval << dec << " ";
1928 current_cpu->hardware.h_bpsw = opval;
1932 current_cpu->done_cti_insn (npc, status);
1937 // ********** seth: seth $dr,$hash$hi16
1940 m32rbf_sem_seth (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1942 #define FLD(f) abuf->fields.sfmt_seth.f
1943 sem_status status = SEM_STATUS_NORMAL;
1944 m32rbf_scache* abuf = sem;
1945 PCADDR pc = abuf->addr;
1946 PCADDR npc = pc + 4;
1949 SI opval = SLLSI (FLD (f_hi16), 16);
1950 if (UNLIKELY(current_cpu->trace_result_p))
1951 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1952 * FLD (i_dr) = opval;
1955 current_cpu->done_insn (npc, status);
1960 // ********** sll: sll $dr,$sr
1963 m32rbf_sem_sll (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1965 #define FLD(f) abuf->fields.sfmt_and3.f
1966 sem_status status = SEM_STATUS_NORMAL;
1967 m32rbf_scache* abuf = sem;
1968 PCADDR pc = abuf->addr;
1969 PCADDR npc = pc + 2;
1972 SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
1973 if (UNLIKELY(current_cpu->trace_result_p))
1974 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1975 * FLD (i_dr) = opval;
1978 current_cpu->done_insn (npc, status);
1983 // ********** sll3: sll3 $dr,$sr,$simm16
1986 m32rbf_sem_sll3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
1988 #define FLD(f) abuf->fields.sfmt_add3.f
1989 sem_status status = SEM_STATUS_NORMAL;
1990 m32rbf_scache* abuf = sem;
1991 PCADDR pc = abuf->addr;
1992 PCADDR npc = pc + 4;
1995 SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
1996 if (UNLIKELY(current_cpu->trace_result_p))
1997 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
1998 * FLD (i_dr) = opval;
2001 current_cpu->done_insn (npc, status);
2006 // ********** slli: slli $dr,$uimm5
2009 m32rbf_sem_slli (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2011 #define FLD(f) abuf->fields.sfmt_slli.f
2012 sem_status status = SEM_STATUS_NORMAL;
2013 m32rbf_scache* abuf = sem;
2014 PCADDR pc = abuf->addr;
2015 PCADDR npc = pc + 2;
2018 SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
2019 if (UNLIKELY(current_cpu->trace_result_p))
2020 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2021 * FLD (i_dr) = opval;
2024 current_cpu->done_insn (npc, status);
2029 // ********** sra: sra $dr,$sr
2032 m32rbf_sem_sra (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2034 #define FLD(f) abuf->fields.sfmt_and3.f
2035 sem_status status = SEM_STATUS_NORMAL;
2036 m32rbf_scache* abuf = sem;
2037 PCADDR pc = abuf->addr;
2038 PCADDR npc = pc + 2;
2041 SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2042 if (UNLIKELY(current_cpu->trace_result_p))
2043 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2044 * FLD (i_dr) = opval;
2047 current_cpu->done_insn (npc, status);
2052 // ********** sra3: sra3 $dr,$sr,$simm16
2055 m32rbf_sem_sra3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2057 #define FLD(f) abuf->fields.sfmt_add3.f
2058 sem_status status = SEM_STATUS_NORMAL;
2059 m32rbf_scache* abuf = sem;
2060 PCADDR pc = abuf->addr;
2061 PCADDR npc = pc + 4;
2064 SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2065 if (UNLIKELY(current_cpu->trace_result_p))
2066 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2067 * FLD (i_dr) = opval;
2070 current_cpu->done_insn (npc, status);
2075 // ********** srai: srai $dr,$uimm5
2078 m32rbf_sem_srai (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2080 #define FLD(f) abuf->fields.sfmt_slli.f
2081 sem_status status = SEM_STATUS_NORMAL;
2082 m32rbf_scache* abuf = sem;
2083 PCADDR pc = abuf->addr;
2084 PCADDR npc = pc + 2;
2087 SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
2088 if (UNLIKELY(current_cpu->trace_result_p))
2089 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2090 * FLD (i_dr) = opval;
2093 current_cpu->done_insn (npc, status);
2098 // ********** srl: srl $dr,$sr
2101 m32rbf_sem_srl (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2103 #define FLD(f) abuf->fields.sfmt_and3.f
2104 sem_status status = SEM_STATUS_NORMAL;
2105 m32rbf_scache* abuf = sem;
2106 PCADDR pc = abuf->addr;
2107 PCADDR npc = pc + 2;
2110 SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2111 if (UNLIKELY(current_cpu->trace_result_p))
2112 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2113 * FLD (i_dr) = opval;
2116 current_cpu->done_insn (npc, status);
2121 // ********** srl3: srl3 $dr,$sr,$simm16
2124 m32rbf_sem_srl3 (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2126 #define FLD(f) abuf->fields.sfmt_add3.f
2127 sem_status status = SEM_STATUS_NORMAL;
2128 m32rbf_scache* abuf = sem;
2129 PCADDR pc = abuf->addr;
2130 PCADDR npc = pc + 4;
2133 SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2134 if (UNLIKELY(current_cpu->trace_result_p))
2135 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2136 * FLD (i_dr) = opval;
2139 current_cpu->done_insn (npc, status);
2144 // ********** srli: srli $dr,$uimm5
2147 m32rbf_sem_srli (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2149 #define FLD(f) abuf->fields.sfmt_slli.f
2150 sem_status status = SEM_STATUS_NORMAL;
2151 m32rbf_scache* abuf = sem;
2152 PCADDR pc = abuf->addr;
2153 PCADDR npc = pc + 2;
2156 SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
2157 if (UNLIKELY(current_cpu->trace_result_p))
2158 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2159 * FLD (i_dr) = opval;
2162 current_cpu->done_insn (npc, status);
2167 // ********** st: st $src1,@$src2
2170 m32rbf_sem_st (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2172 #define FLD(f) abuf->fields.sfmt_st_d.f
2173 sem_status status = SEM_STATUS_NORMAL;
2174 m32rbf_scache* abuf = sem;
2175 PCADDR pc = abuf->addr;
2176 PCADDR npc = pc + 2;
2179 SI opval = * FLD (i_src1);
2180 if (UNLIKELY(current_cpu->trace_result_p))
2181 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) * FLD (i_src2) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2182 current_cpu->SETMEMSI (pc, * FLD (i_src2), opval);
2185 current_cpu->done_insn (npc, status);
2190 // ********** st-d: st $src1,@($slo16,$src2)
2193 m32rbf_sem_st_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2195 #define FLD(f) abuf->fields.sfmt_st_d.f
2196 sem_status status = SEM_STATUS_NORMAL;
2197 m32rbf_scache* abuf = sem;
2198 PCADDR pc = abuf->addr;
2199 PCADDR npc = pc + 4;
2202 SI opval = * FLD (i_src1);
2203 if (UNLIKELY(current_cpu->trace_result_p))
2204 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) ADDSI (* FLD (i_src2), FLD (f_simm16)) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2205 current_cpu->SETMEMSI (pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2208 current_cpu->done_insn (npc, status);
2213 // ********** stb: stb $src1,@$src2
2216 m32rbf_sem_stb (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2218 #define FLD(f) abuf->fields.sfmt_st_d.f
2219 sem_status status = SEM_STATUS_NORMAL;
2220 m32rbf_scache* abuf = sem;
2221 PCADDR pc = abuf->addr;
2222 PCADDR npc = pc + 2;
2225 QI opval = * FLD (i_src1);
2226 if (UNLIKELY(current_cpu->trace_result_p))
2227 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) * FLD (i_src2) << dec << ']' << ":=0x" << hex << (SI) opval << dec << " ";
2228 current_cpu->SETMEMQI (pc, * FLD (i_src2), opval);
2231 current_cpu->done_insn (npc, status);
2236 // ********** stb-d: stb $src1,@($slo16,$src2)
2239 m32rbf_sem_stb_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2241 #define FLD(f) abuf->fields.sfmt_st_d.f
2242 sem_status status = SEM_STATUS_NORMAL;
2243 m32rbf_scache* abuf = sem;
2244 PCADDR pc = abuf->addr;
2245 PCADDR npc = pc + 4;
2248 QI opval = * FLD (i_src1);
2249 if (UNLIKELY(current_cpu->trace_result_p))
2250 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) ADDSI (* FLD (i_src2), FLD (f_simm16)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << " ";
2251 current_cpu->SETMEMQI (pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2254 current_cpu->done_insn (npc, status);
2259 // ********** sth: sth $src1,@$src2
2262 m32rbf_sem_sth (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2264 #define FLD(f) abuf->fields.sfmt_st_d.f
2265 sem_status status = SEM_STATUS_NORMAL;
2266 m32rbf_scache* abuf = sem;
2267 PCADDR pc = abuf->addr;
2268 PCADDR npc = pc + 2;
2271 HI opval = * FLD (i_src1);
2272 if (UNLIKELY(current_cpu->trace_result_p))
2273 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) * FLD (i_src2) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2274 current_cpu->SETMEMHI (pc, * FLD (i_src2), opval);
2277 current_cpu->done_insn (npc, status);
2282 // ********** sth-d: sth $src1,@($slo16,$src2)
2285 m32rbf_sem_sth_d (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2287 #define FLD(f) abuf->fields.sfmt_st_d.f
2288 sem_status status = SEM_STATUS_NORMAL;
2289 m32rbf_scache* abuf = sem;
2290 PCADDR pc = abuf->addr;
2291 PCADDR npc = pc + 4;
2294 HI opval = * FLD (i_src1);
2295 if (UNLIKELY(current_cpu->trace_result_p))
2296 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) ADDSI (* FLD (i_src2), FLD (f_simm16)) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2297 current_cpu->SETMEMHI (pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2300 current_cpu->done_insn (npc, status);
2305 // ********** st-plus: st $src1,@+$src2
2308 m32rbf_sem_st_plus (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2310 #define FLD(f) abuf->fields.sfmt_st_d.f
2311 sem_status status = SEM_STATUS_NORMAL;
2312 m32rbf_scache* abuf = sem;
2313 PCADDR pc = abuf->addr;
2314 PCADDR npc = pc + 2;
2318 tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
2320 SI opval = * FLD (i_src1);
2321 if (UNLIKELY(current_cpu->trace_result_p))
2322 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) tmp_new_src2 << dec << ']' << ":=0x" << hex << opval << dec << " ";
2323 current_cpu->SETMEMSI (pc, tmp_new_src2, opval);
2326 SI opval = tmp_new_src2;
2327 if (UNLIKELY(current_cpu->trace_result_p))
2328 current_cpu->trace_stream << "gr" << '[' << FLD (f_r2) << ']' << ":=0x" << hex << opval << dec << " ";
2329 * FLD (i_src2) = opval;
2333 current_cpu->done_insn (npc, status);
2338 // ********** st-minus: st $src1,@-$src2
2341 m32rbf_sem_st_minus (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2343 #define FLD(f) abuf->fields.sfmt_st_d.f
2344 sem_status status = SEM_STATUS_NORMAL;
2345 m32rbf_scache* abuf = sem;
2346 PCADDR pc = abuf->addr;
2347 PCADDR npc = pc + 2;
2351 tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
2353 SI opval = * FLD (i_src1);
2354 if (UNLIKELY(current_cpu->trace_result_p))
2355 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) tmp_new_src2 << dec << ']' << ":=0x" << hex << opval << dec << " ";
2356 current_cpu->SETMEMSI (pc, tmp_new_src2, opval);
2359 SI opval = tmp_new_src2;
2360 if (UNLIKELY(current_cpu->trace_result_p))
2361 current_cpu->trace_stream << "gr" << '[' << FLD (f_r2) << ']' << ":=0x" << hex << opval << dec << " ";
2362 * FLD (i_src2) = opval;
2366 current_cpu->done_insn (npc, status);
2371 // ********** sub: sub $dr,$sr
2374 m32rbf_sem_sub (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2376 #define FLD(f) abuf->fields.sfmt_and3.f
2377 sem_status status = SEM_STATUS_NORMAL;
2378 m32rbf_scache* abuf = sem;
2379 PCADDR pc = abuf->addr;
2380 PCADDR npc = pc + 2;
2383 SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
2384 if (UNLIKELY(current_cpu->trace_result_p))
2385 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2386 * FLD (i_dr) = opval;
2389 current_cpu->done_insn (npc, status);
2394 // ********** subv: subv $dr,$sr
2397 m32rbf_sem_subv (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2399 #define FLD(f) abuf->fields.sfmt_and3.f
2400 sem_status status = SEM_STATUS_NORMAL;
2401 m32rbf_scache* abuf = sem;
2402 PCADDR pc = abuf->addr;
2403 PCADDR npc = pc + 2;
2407 temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
2408 temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
2411 if (UNLIKELY(current_cpu->trace_result_p))
2412 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2413 * FLD (i_dr) = opval;
2417 if (UNLIKELY(current_cpu->trace_result_p))
2418 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
2419 current_cpu->hardware.h_cond = opval;
2423 current_cpu->done_insn (npc, status);
2428 // ********** subx: subx $dr,$sr
2431 m32rbf_sem_subx (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2433 #define FLD(f) abuf->fields.sfmt_and3.f
2434 sem_status status = SEM_STATUS_NORMAL;
2435 m32rbf_scache* abuf = sem;
2436 PCADDR pc = abuf->addr;
2437 PCADDR npc = pc + 2;
2441 temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), current_cpu->hardware.h_cond);
2442 temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), current_cpu->hardware.h_cond);
2445 if (UNLIKELY(current_cpu->trace_result_p))
2446 current_cpu->trace_stream << "gr" << '[' << FLD (f_r1) << ']' << ":=0x" << hex << opval << dec << " ";
2447 * FLD (i_dr) = opval;
2451 if (UNLIKELY(current_cpu->trace_result_p))
2452 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
2453 current_cpu->hardware.h_cond = opval;
2457 current_cpu->done_insn (npc, status);
2462 // ********** trap: trap $uimm4
2465 m32rbf_sem_trap (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2467 #define FLD(f) abuf->fields.sfmt_trap.f
2468 sem_status status = SEM_STATUS_NORMAL;
2469 m32rbf_scache* abuf = sem;
2470 PCADDR pc = abuf->addr;
2471 PCADDR npc = pc + 2;
2475 USI opval = current_cpu->h_cr_get (((UINT) 6));
2476 if (UNLIKELY(current_cpu->trace_result_p))
2477 current_cpu->trace_stream << "cr" << '[' << ((UINT) 14) << ']' << ":=0x" << hex << opval << dec << " ";
2478 current_cpu->h_cr_set (((UINT) 14), opval);
2481 USI opval = ADDSI (pc, 4);
2482 if (UNLIKELY(current_cpu->trace_result_p))
2483 current_cpu->trace_stream << "cr" << '[' << ((UINT) 6) << ']' << ":=0x" << hex << opval << dec << " ";
2484 current_cpu->h_cr_set (((UINT) 6), opval);
2487 UQI opval = current_cpu->hardware.h_bpsw;
2488 if (UNLIKELY(current_cpu->trace_result_p))
2489 current_cpu->trace_stream << "bbpsw" << ":=0x" << hex << (USI) opval << dec << " ";
2490 current_cpu->hardware.h_bbpsw = opval;
2493 UQI opval = current_cpu->h_psw_get ();
2494 if (UNLIKELY(current_cpu->trace_result_p))
2495 current_cpu->trace_stream << "bpsw" << ":=0x" << hex << (USI) opval << dec << " ";
2496 current_cpu->hardware.h_bpsw = opval;
2499 UQI opval = ANDQI (current_cpu->h_psw_get (), 128);
2500 if (UNLIKELY(current_cpu->trace_result_p))
2501 current_cpu->trace_stream << "psw" << ":=0x" << hex << (USI) opval << dec << " ";
2502 current_cpu->h_psw_set (opval);
2505 SI opval = current_cpu->m32r_trap (pc, FLD (f_uimm4));
2506 if (UNLIKELY(current_cpu->trace_result_p))
2507 current_cpu->trace_stream << "pc" << ":=0x" << hex << opval << dec << " ";
2508 current_cpu->branch (opval, npc, status);
2512 current_cpu->done_cti_insn (npc, status);
2517 // ********** unlock: unlock $src1,@$src2
2520 m32rbf_sem_unlock (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2522 #define FLD(f) abuf->fields.sfmt_st_d.f
2523 sem_status status = SEM_STATUS_NORMAL;
2524 m32rbf_scache* abuf = sem;
2525 PCADDR pc = abuf->addr;
2526 PCADDR npc = pc + 2;
2529 if (current_cpu->hardware.h_lock) {
2531 SI opval = * FLD (i_src1);
2532 if (UNLIKELY(current_cpu->trace_result_p))
2533 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) * FLD (i_src2) << dec << ']' << ":=0x" << hex << opval << dec << " ";
2534 current_cpu->SETMEMSI (pc, * FLD (i_src2), opval);
2539 if (UNLIKELY(current_cpu->trace_result_p))
2540 current_cpu->trace_stream << "lock" << ":=0x" << hex << opval << dec << " ";
2541 current_cpu->hardware.h_lock = opval;
2545 current_cpu->done_insn (npc, status);
2550 // ********** clrpsw: clrpsw $uimm8
2553 m32rbf_sem_clrpsw (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2555 #define FLD(f) abuf->fields.sfmt_clrpsw.f
2556 sem_status status = SEM_STATUS_NORMAL;
2557 m32rbf_scache* abuf = sem;
2558 PCADDR pc = abuf->addr;
2559 PCADDR npc = pc + 2;
2562 USI opval = ANDSI (current_cpu->h_cr_get (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280));
2563 if (UNLIKELY(current_cpu->trace_result_p))
2564 current_cpu->trace_stream << "cr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << " ";
2565 current_cpu->h_cr_set (((UINT) 0), opval);
2568 current_cpu->done_insn (npc, status);
2573 // ********** setpsw: setpsw $uimm8
2576 m32rbf_sem_setpsw (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2578 #define FLD(f) abuf->fields.sfmt_clrpsw.f
2579 sem_status status = SEM_STATUS_NORMAL;
2580 m32rbf_scache* abuf = sem;
2581 PCADDR pc = abuf->addr;
2582 PCADDR npc = pc + 2;
2585 USI opval = FLD (f_uimm8);
2586 if (UNLIKELY(current_cpu->trace_result_p))
2587 current_cpu->trace_stream << "cr" << '[' << ((UINT) 0) << ']' << ":=0x" << hex << opval << dec << " ";
2588 current_cpu->h_cr_set (((UINT) 0), opval);
2591 current_cpu->done_insn (npc, status);
2596 // ********** bset: bset $uimm3,@($slo16,$sr)
2599 m32rbf_sem_bset (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2601 #define FLD(f) abuf->fields.sfmt_bset.f
2602 sem_status status = SEM_STATUS_NORMAL;
2603 m32rbf_scache* abuf = sem;
2604 PCADDR pc = abuf->addr;
2605 PCADDR npc = pc + 4;
2608 QI opval = ORQI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLQI (1, SUBSI (7, FLD (f_uimm3))));
2609 if (UNLIKELY(current_cpu->trace_result_p))
2610 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) ADDSI (* FLD (i_sr), FLD (f_simm16)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << " ";
2611 current_cpu->SETMEMQI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
2614 current_cpu->done_insn (npc, status);
2619 // ********** bclr: bclr $uimm3,@($slo16,$sr)
2622 m32rbf_sem_bclr (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2624 #define FLD(f) abuf->fields.sfmt_bset.f
2625 sem_status status = SEM_STATUS_NORMAL;
2626 m32rbf_scache* abuf = sem;
2627 PCADDR pc = abuf->addr;
2628 PCADDR npc = pc + 4;
2631 QI opval = ANDQI (current_cpu->GETMEMQI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLQI (1, SUBSI (7, FLD (f_uimm3)))));
2632 if (UNLIKELY(current_cpu->trace_result_p))
2633 current_cpu->trace_stream << "memory" << '[' << "0x" << hex << (UDI) ADDSI (* FLD (i_sr), FLD (f_simm16)) << dec << ']' << ":=0x" << hex << (SI) opval << dec << " ";
2634 current_cpu->SETMEMQI (pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
2637 current_cpu->done_insn (npc, status);
2642 // ********** btst: btst $uimm3,$sr
2645 m32rbf_sem_btst (m32rbf_cpu* current_cpu, m32rbf_scache* sem)
2647 #define FLD(f) abuf->fields.sfmt_bset.f
2648 sem_status status = SEM_STATUS_NORMAL;
2649 m32rbf_scache* abuf = sem;
2650 PCADDR pc = abuf->addr;
2651 PCADDR npc = pc + 2;
2654 BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1);
2655 if (UNLIKELY(current_cpu->trace_result_p))
2656 current_cpu->trace_stream << "cond" << ":=0x" << hex << opval << dec << " ";
2657 current_cpu->hardware.h_cond = opval;
2660 current_cpu->done_insn (npc, status);