1 /* Simulator instruction semantics for m32rb.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
7 This file is part of the GNU Simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 #define WANT_CPU_M32RB
36 #define GET_ATTR(cpu, num, attr) CGEN_INSN_ATTR (abuf->idesc->opcode, CGEN_INSN_##attr)
38 /* add: add $dr,$sr. */
41 SEM_FN_NAME (m32rb
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
43 #define FLD(f) abuf->fields.fmt_add.f
44 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
45 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
48 SI opval
= ADDSI (* FLD (f_r1
), * FLD (f_r2
));
50 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
53 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
55 #if WITH_PROFILE_MODEL_P
56 if (PROFILE_MODEL_P (current_cpu
))
58 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
59 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
60 m32rb_model_profile_insn (current_cpu
, abuf
);
68 /* add3: add3 $dr,$sr,$hash$slo16. */
71 SEM_FN_NAME (m32rb
,add3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
73 #define FLD(f) abuf->fields.fmt_add3.f
74 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
75 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
78 SI opval
= ADDSI (* FLD (f_r2
), FLD (f_simm16
));
80 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
83 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
85 #if WITH_PROFILE_MODEL_P
86 if (PROFILE_MODEL_P (current_cpu
))
88 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
89 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
90 m32rb_model_profile_insn (current_cpu
, abuf
);
98 /* and: and $dr,$sr. */
101 SEM_FN_NAME (m32rb
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
103 #define FLD(f) abuf->fields.fmt_add.f
104 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
105 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
108 SI opval
= ANDSI (* FLD (f_r1
), * FLD (f_r2
));
109 * FLD (f_r1
) = opval
;
110 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
113 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
115 #if WITH_PROFILE_MODEL_P
116 if (PROFILE_MODEL_P (current_cpu
))
118 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
119 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
120 m32rb_model_profile_insn (current_cpu
, abuf
);
128 /* and3: and3 $dr,$sr,$uimm16. */
131 SEM_FN_NAME (m32rb
,and3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
133 #define FLD(f) abuf->fields.fmt_and3.f
134 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
135 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
138 SI opval
= ANDSI (* FLD (f_r2
), FLD (f_uimm16
));
139 * FLD (f_r1
) = opval
;
140 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
143 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
145 #if WITH_PROFILE_MODEL_P
146 if (PROFILE_MODEL_P (current_cpu
))
148 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
149 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
150 m32rb_model_profile_insn (current_cpu
, abuf
);
158 /* or: or $dr,$sr. */
161 SEM_FN_NAME (m32rb
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
163 #define FLD(f) abuf->fields.fmt_add.f
164 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
165 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
168 SI opval
= ORSI (* FLD (f_r1
), * FLD (f_r2
));
169 * FLD (f_r1
) = opval
;
170 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
173 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
175 #if WITH_PROFILE_MODEL_P
176 if (PROFILE_MODEL_P (current_cpu
))
178 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
179 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
180 m32rb_model_profile_insn (current_cpu
, abuf
);
188 /* or3: or3 $dr,$sr,$hash$ulo16. */
191 SEM_FN_NAME (m32rb
,or3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
193 #define FLD(f) abuf->fields.fmt_or3.f
194 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
195 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
198 SI opval
= ORSI (* FLD (f_r2
), FLD (f_uimm16
));
199 * FLD (f_r1
) = opval
;
200 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
203 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
205 #if WITH_PROFILE_MODEL_P
206 if (PROFILE_MODEL_P (current_cpu
))
208 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
209 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
210 m32rb_model_profile_insn (current_cpu
, abuf
);
218 /* xor: xor $dr,$sr. */
221 SEM_FN_NAME (m32rb
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
223 #define FLD(f) abuf->fields.fmt_add.f
224 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
225 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
228 SI opval
= XORSI (* FLD (f_r1
), * FLD (f_r2
));
229 * FLD (f_r1
) = opval
;
230 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
233 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
235 #if WITH_PROFILE_MODEL_P
236 if (PROFILE_MODEL_P (current_cpu
))
238 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
239 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
240 m32rb_model_profile_insn (current_cpu
, abuf
);
248 /* xor3: xor3 $dr,$sr,$uimm16. */
251 SEM_FN_NAME (m32rb
,xor3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
253 #define FLD(f) abuf->fields.fmt_and3.f
254 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
255 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
258 SI opval
= XORSI (* FLD (f_r2
), FLD (f_uimm16
));
259 * FLD (f_r1
) = opval
;
260 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
263 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
265 #if WITH_PROFILE_MODEL_P
266 if (PROFILE_MODEL_P (current_cpu
))
268 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
269 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
270 m32rb_model_profile_insn (current_cpu
, abuf
);
278 /* addi: addi $dr,$simm8. */
281 SEM_FN_NAME (m32rb
,addi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
283 #define FLD(f) abuf->fields.fmt_addi.f
284 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
285 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
288 SI opval
= ADDSI (* FLD (f_r1
), FLD (f_simm8
));
289 * FLD (f_r1
) = opval
;
290 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
293 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
295 #if WITH_PROFILE_MODEL_P
296 if (PROFILE_MODEL_P (current_cpu
))
298 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
299 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
300 m32rb_model_profile_insn (current_cpu
, abuf
);
308 /* addv: addv $dr,$sr. */
311 SEM_FN_NAME (m32rb
,addv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
313 #define FLD(f) abuf->fields.fmt_addv.f
314 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
315 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
319 temp0
= ADDSI (* FLD (f_r1
), * FLD (f_r2
));
320 temp1
= ADDOFSI (* FLD (f_r1
), * FLD (f_r2
), 0);
323 * FLD (f_r1
) = opval
;
324 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
328 CPU (h_cond
) = opval
;
329 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
333 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
335 #if WITH_PROFILE_MODEL_P
336 if (PROFILE_MODEL_P (current_cpu
))
338 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
339 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
340 m32rb_model_profile_insn (current_cpu
, abuf
);
348 /* addv3: addv3 $dr,$sr,$simm16. */
351 SEM_FN_NAME (m32rb
,addv3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
353 #define FLD(f) abuf->fields.fmt_addv3.f
354 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
355 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
359 temp0
= ADDSI (* FLD (f_r2
), FLD (f_simm16
));
360 temp1
= ADDOFSI (* FLD (f_r2
), FLD (f_simm16
), 0);
363 * FLD (f_r1
) = opval
;
364 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
368 CPU (h_cond
) = opval
;
369 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
373 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
375 #if WITH_PROFILE_MODEL_P
376 if (PROFILE_MODEL_P (current_cpu
))
378 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
379 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
380 m32rb_model_profile_insn (current_cpu
, abuf
);
388 /* addx: addx $dr,$sr. */
391 SEM_FN_NAME (m32rb
,addx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
393 #define FLD(f) abuf->fields.fmt_addx.f
394 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
395 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
399 temp0
= ADDCSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
400 temp1
= ADDCFSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
403 * FLD (f_r1
) = opval
;
404 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
408 CPU (h_cond
) = opval
;
409 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
413 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
415 #if WITH_PROFILE_MODEL_P
416 if (PROFILE_MODEL_P (current_cpu
))
418 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
419 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
420 m32rb_model_profile_insn (current_cpu
, abuf
);
428 /* bc8: bc.s $disp8. */
431 SEM_FN_NAME (m32rb
,bc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
433 #define FLD(f) abuf->fields.fmt_bc8.f
434 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
435 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
440 USI opval
= FLD (f_disp8
);
441 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
443 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
447 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
449 #if WITH_PROFILE_MODEL_P
450 if (PROFILE_MODEL_P (current_cpu
))
452 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
460 /* bc24: bc.l $disp24. */
463 SEM_FN_NAME (m32rb
,bc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
465 #define FLD(f) abuf->fields.fmt_bc24.f
466 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
467 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
472 USI opval
= FLD (f_disp24
);
473 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
475 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
479 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
481 #if WITH_PROFILE_MODEL_P
482 if (PROFILE_MODEL_P (current_cpu
))
484 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
492 /* beq: beq $src1,$src2,$disp16. */
495 SEM_FN_NAME (m32rb
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
497 #define FLD(f) abuf->fields.fmt_beq.f
498 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
499 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
502 if (EQSI (* FLD (f_r1
), * FLD (f_r2
))) {
504 USI opval
= FLD (f_disp16
);
505 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
507 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
511 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
513 #if WITH_PROFILE_MODEL_P
514 if (PROFILE_MODEL_P (current_cpu
))
516 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
517 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
525 /* beqz: beqz $src2,$disp16. */
528 SEM_FN_NAME (m32rb
,beqz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
530 #define FLD(f) abuf->fields.fmt_beqz.f
531 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
532 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
535 if (EQSI (* FLD (f_r2
), 0)) {
537 USI opval
= FLD (f_disp16
);
538 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
540 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
544 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
546 #if WITH_PROFILE_MODEL_P
547 if (PROFILE_MODEL_P (current_cpu
))
549 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
550 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
558 /* bgez: bgez $src2,$disp16. */
561 SEM_FN_NAME (m32rb
,bgez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
563 #define FLD(f) abuf->fields.fmt_beqz.f
564 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
565 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
568 if (GESI (* FLD (f_r2
), 0)) {
570 USI opval
= FLD (f_disp16
);
571 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
573 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
577 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
579 #if WITH_PROFILE_MODEL_P
580 if (PROFILE_MODEL_P (current_cpu
))
582 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
583 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
591 /* bgtz: bgtz $src2,$disp16. */
594 SEM_FN_NAME (m32rb
,bgtz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
596 #define FLD(f) abuf->fields.fmt_beqz.f
597 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
598 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
601 if (GTSI (* FLD (f_r2
), 0)) {
603 USI opval
= FLD (f_disp16
);
604 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
606 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
610 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
612 #if WITH_PROFILE_MODEL_P
613 if (PROFILE_MODEL_P (current_cpu
))
615 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
616 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
624 /* blez: blez $src2,$disp16. */
627 SEM_FN_NAME (m32rb
,blez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
629 #define FLD(f) abuf->fields.fmt_beqz.f
630 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
631 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
634 if (LESI (* FLD (f_r2
), 0)) {
636 USI opval
= FLD (f_disp16
);
637 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
639 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
643 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
645 #if WITH_PROFILE_MODEL_P
646 if (PROFILE_MODEL_P (current_cpu
))
648 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
649 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
657 /* bltz: bltz $src2,$disp16. */
660 SEM_FN_NAME (m32rb
,bltz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
662 #define FLD(f) abuf->fields.fmt_beqz.f
663 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
664 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
667 if (LTSI (* FLD (f_r2
), 0)) {
669 USI opval
= FLD (f_disp16
);
670 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
672 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
676 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
678 #if WITH_PROFILE_MODEL_P
679 if (PROFILE_MODEL_P (current_cpu
))
681 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
682 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
690 /* bnez: bnez $src2,$disp16. */
693 SEM_FN_NAME (m32rb
,bnez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
695 #define FLD(f) abuf->fields.fmt_beqz.f
696 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
697 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
700 if (NESI (* FLD (f_r2
), 0)) {
702 USI opval
= FLD (f_disp16
);
703 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
705 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
709 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
711 #if WITH_PROFILE_MODEL_P
712 if (PROFILE_MODEL_P (current_cpu
))
714 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
715 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
723 /* bl8: bl.s $disp8. */
726 SEM_FN_NAME (m32rb
,bl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
728 #define FLD(f) abuf->fields.fmt_bl8.f
729 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
730 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
735 SI opval
= ADDSI (ANDSI (CPU (h_pc
), -4), 4);
736 CPU (h_gr
[((HOSTUINT
) 14)]) = opval
;
737 TRACE_RESULT (current_cpu
, "gr-14", 'x', opval
);
740 USI opval
= FLD (f_disp8
);
741 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
743 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
747 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
749 #if WITH_PROFILE_MODEL_P
750 if (PROFILE_MODEL_P (current_cpu
))
752 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
753 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
761 /* bl24: bl.l $disp24. */
764 SEM_FN_NAME (m32rb
,bl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
766 #define FLD(f) abuf->fields.fmt_bl24.f
767 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
768 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
773 SI opval
= ADDSI (CPU (h_pc
), 4);
774 CPU (h_gr
[((HOSTUINT
) 14)]) = opval
;
775 TRACE_RESULT (current_cpu
, "gr-14", 'x', opval
);
778 USI opval
= FLD (f_disp24
);
779 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
781 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
785 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
787 #if WITH_PROFILE_MODEL_P
788 if (PROFILE_MODEL_P (current_cpu
))
790 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
791 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
799 /* bnc8: bnc.s $disp8. */
802 SEM_FN_NAME (m32rb
,bnc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
804 #define FLD(f) abuf->fields.fmt_bc8.f
805 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
806 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
809 if (NOTBI (CPU (h_cond
))) {
811 USI opval
= FLD (f_disp8
);
812 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
814 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
818 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
820 #if WITH_PROFILE_MODEL_P
821 if (PROFILE_MODEL_P (current_cpu
))
823 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
831 /* bnc24: bnc.l $disp24. */
834 SEM_FN_NAME (m32rb
,bnc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
836 #define FLD(f) abuf->fields.fmt_bc24.f
837 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
838 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
841 if (NOTBI (CPU (h_cond
))) {
843 USI opval
= FLD (f_disp24
);
844 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
846 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
850 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
852 #if WITH_PROFILE_MODEL_P
853 if (PROFILE_MODEL_P (current_cpu
))
855 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
863 /* bne: bne $src1,$src2,$disp16. */
866 SEM_FN_NAME (m32rb
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
868 #define FLD(f) abuf->fields.fmt_beq.f
869 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
870 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
873 if (NESI (* FLD (f_r1
), * FLD (f_r2
))) {
875 USI opval
= FLD (f_disp16
);
876 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
878 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
882 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
884 #if WITH_PROFILE_MODEL_P
885 if (PROFILE_MODEL_P (current_cpu
))
887 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
888 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
896 /* bra8: bra.s $disp8. */
899 SEM_FN_NAME (m32rb
,bra8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
901 #define FLD(f) abuf->fields.fmt_bra8.f
902 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
903 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
907 USI opval
= FLD (f_disp8
);
908 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
910 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
913 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
915 #if WITH_PROFILE_MODEL_P
916 if (PROFILE_MODEL_P (current_cpu
))
918 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
926 /* bra24: bra.l $disp24. */
929 SEM_FN_NAME (m32rb
,bra24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
931 #define FLD(f) abuf->fields.fmt_bra24.f
932 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
933 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
937 USI opval
= FLD (f_disp24
);
938 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, opval
));
940 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
943 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
945 #if WITH_PROFILE_MODEL_P
946 if (PROFILE_MODEL_P (current_cpu
))
948 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
956 /* cmp: cmp $src1,$src2. */
959 SEM_FN_NAME (m32rb
,cmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
961 #define FLD(f) abuf->fields.fmt_cmp.f
962 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
963 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
966 UBI opval
= LTSI (* FLD (f_r1
), * FLD (f_r2
));
967 CPU (h_cond
) = opval
;
968 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
971 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
973 #if WITH_PROFILE_MODEL_P
974 if (PROFILE_MODEL_P (current_cpu
))
976 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
977 m32rb_model_profile_insn (current_cpu
, abuf
);
985 /* cmpi: cmpi $src2,$simm16. */
988 SEM_FN_NAME (m32rb
,cmpi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
990 #define FLD(f) abuf->fields.fmt_cmpi.f
991 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
992 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
995 UBI opval
= LTSI (* FLD (f_r2
), FLD (f_simm16
));
996 CPU (h_cond
) = opval
;
997 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
1000 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1002 #if WITH_PROFILE_MODEL_P
1003 if (PROFILE_MODEL_P (current_cpu
))
1005 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1006 m32rb_model_profile_insn (current_cpu
, abuf
);
1014 /* cmpu: cmpu $src1,$src2. */
1017 SEM_FN_NAME (m32rb
,cmpu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1019 #define FLD(f) abuf->fields.fmt_cmp.f
1020 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1021 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1024 UBI opval
= LTUSI (* FLD (f_r1
), * FLD (f_r2
));
1025 CPU (h_cond
) = opval
;
1026 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
1029 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1031 #if WITH_PROFILE_MODEL_P
1032 if (PROFILE_MODEL_P (current_cpu
))
1034 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1035 m32rb_model_profile_insn (current_cpu
, abuf
);
1043 /* cmpui: cmpui $src2,$simm16. */
1046 SEM_FN_NAME (m32rb
,cmpui
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1048 #define FLD(f) abuf->fields.fmt_cmpi.f
1049 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1050 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1053 UBI opval
= LTUSI (* FLD (f_r2
), FLD (f_simm16
));
1054 CPU (h_cond
) = opval
;
1055 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
1058 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1060 #if WITH_PROFILE_MODEL_P
1061 if (PROFILE_MODEL_P (current_cpu
))
1063 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1064 m32rb_model_profile_insn (current_cpu
, abuf
);
1072 /* div: div $dr,$sr. */
1075 SEM_FN_NAME (m32rb
,div
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1077 #define FLD(f) abuf->fields.fmt_div.f
1078 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1079 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1081 if (NESI (* FLD (f_r2
), 0)) {
1083 SI opval
= DIVSI (* FLD (f_r1
), * FLD (f_r2
));
1084 * FLD (f_r1
) = opval
;
1085 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1089 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1091 #if WITH_PROFILE_MODEL_P
1092 if (PROFILE_MODEL_P (current_cpu
))
1094 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1095 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1096 m32rb_model_profile_insn (current_cpu
, abuf
);
1104 /* divu: divu $dr,$sr. */
1107 SEM_FN_NAME (m32rb
,divu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1109 #define FLD(f) abuf->fields.fmt_div.f
1110 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1111 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1113 if (NESI (* FLD (f_r2
), 0)) {
1115 SI opval
= UDIVSI (* FLD (f_r1
), * FLD (f_r2
));
1116 * FLD (f_r1
) = opval
;
1117 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1121 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1123 #if WITH_PROFILE_MODEL_P
1124 if (PROFILE_MODEL_P (current_cpu
))
1126 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1127 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1128 m32rb_model_profile_insn (current_cpu
, abuf
);
1136 /* rem: rem $dr,$sr. */
1139 SEM_FN_NAME (m32rb
,rem
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1141 #define FLD(f) abuf->fields.fmt_div.f
1142 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1143 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1145 if (NESI (* FLD (f_r2
), 0)) {
1147 SI opval
= MODSI (* FLD (f_r1
), * FLD (f_r2
));
1148 * FLD (f_r1
) = opval
;
1149 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1153 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1155 #if WITH_PROFILE_MODEL_P
1156 if (PROFILE_MODEL_P (current_cpu
))
1158 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1159 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1160 m32rb_model_profile_insn (current_cpu
, abuf
);
1168 /* remu: remu $dr,$sr. */
1171 SEM_FN_NAME (m32rb
,remu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1173 #define FLD(f) abuf->fields.fmt_div.f
1174 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1175 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1177 if (NESI (* FLD (f_r2
), 0)) {
1179 SI opval
= UMODSI (* FLD (f_r1
), * FLD (f_r2
));
1180 * FLD (f_r1
) = opval
;
1181 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1185 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1187 #if WITH_PROFILE_MODEL_P
1188 if (PROFILE_MODEL_P (current_cpu
))
1190 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1191 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1192 m32rb_model_profile_insn (current_cpu
, abuf
);
1203 SEM_FN_NAME (m32rb
,jl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1205 #define FLD(f) abuf->fields.fmt_jl.f
1206 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1207 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1212 temp0
= ADDSI (ANDSI (CPU (h_pc
), -4), 4);
1213 temp1
= ANDSI (* FLD (f_r2
), -4);
1216 CPU (h_gr
[((HOSTUINT
) 14)]) = opval
;
1217 TRACE_RESULT (current_cpu
, "gr-14", 'x', opval
);
1221 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, opval
));
1223 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
1227 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1229 #if WITH_PROFILE_MODEL_P
1230 if (PROFILE_MODEL_P (current_cpu
))
1232 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1233 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1234 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1245 SEM_FN_NAME (m32rb
,jmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1247 #define FLD(f) abuf->fields.fmt_jmp.f
1248 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1249 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1253 USI opval
= ANDSI (* FLD (f_r2
), -4);
1254 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, opval
));
1256 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
1259 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1261 #if WITH_PROFILE_MODEL_P
1262 if (PROFILE_MODEL_P (current_cpu
))
1264 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1265 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1273 /* ld: ld $dr,@$sr. */
1276 SEM_FN_NAME (m32rb
,ld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1278 #define FLD(f) abuf->fields.fmt_ld.f
1279 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1280 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1283 SI opval
= GETMEMSI (current_cpu
, * FLD (f_r2
));
1284 * FLD (f_r1
) = opval
;
1285 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1288 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1290 #if WITH_PROFILE_MODEL_P
1291 if (PROFILE_MODEL_P (current_cpu
))
1293 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1294 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1295 m32rb_model_profile_insn (current_cpu
, abuf
);
1303 /* ld-d: ld $dr,@($slo16,$sr). */
1306 SEM_FN_NAME (m32rb
,ld_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1308 #define FLD(f) abuf->fields.fmt_ld_d.f
1309 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1310 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1313 SI opval
= GETMEMSI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)));
1314 * FLD (f_r1
) = opval
;
1315 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1318 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1320 #if WITH_PROFILE_MODEL_P
1321 if (PROFILE_MODEL_P (current_cpu
))
1323 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1324 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1325 m32rb_model_profile_insn (current_cpu
, abuf
);
1333 /* ldb: ldb $dr,@$sr. */
1336 SEM_FN_NAME (m32rb
,ldb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1338 #define FLD(f) abuf->fields.fmt_ldb.f
1339 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1340 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1343 SI opval
= EXTQISI (GETMEMQI (current_cpu
, * FLD (f_r2
)));
1344 * FLD (f_r1
) = opval
;
1345 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1348 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1350 #if WITH_PROFILE_MODEL_P
1351 if (PROFILE_MODEL_P (current_cpu
))
1353 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1354 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1355 m32rb_model_profile_insn (current_cpu
, abuf
);
1363 /* ldb-d: ldb $dr,@($slo16,$sr). */
1366 SEM_FN_NAME (m32rb
,ldb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1368 #define FLD(f) abuf->fields.fmt_ldb_d.f
1369 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1370 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1373 SI opval
= EXTQISI (GETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1374 * FLD (f_r1
) = opval
;
1375 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1378 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1380 #if WITH_PROFILE_MODEL_P
1381 if (PROFILE_MODEL_P (current_cpu
))
1383 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1384 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1385 m32rb_model_profile_insn (current_cpu
, abuf
);
1393 /* ldh: ldh $dr,@$sr. */
1396 SEM_FN_NAME (m32rb
,ldh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1398 #define FLD(f) abuf->fields.fmt_ldh.f
1399 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1400 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1403 SI opval
= EXTHISI (GETMEMHI (current_cpu
, * FLD (f_r2
)));
1404 * FLD (f_r1
) = opval
;
1405 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1408 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1410 #if WITH_PROFILE_MODEL_P
1411 if (PROFILE_MODEL_P (current_cpu
))
1413 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1414 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1415 m32rb_model_profile_insn (current_cpu
, abuf
);
1423 /* ldh-d: ldh $dr,@($slo16,$sr). */
1426 SEM_FN_NAME (m32rb
,ldh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1428 #define FLD(f) abuf->fields.fmt_ldh_d.f
1429 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1430 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1433 SI opval
= EXTHISI (GETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1434 * FLD (f_r1
) = opval
;
1435 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1438 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1440 #if WITH_PROFILE_MODEL_P
1441 if (PROFILE_MODEL_P (current_cpu
))
1443 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1444 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1445 m32rb_model_profile_insn (current_cpu
, abuf
);
1453 /* ldub: ldub $dr,@$sr. */
1456 SEM_FN_NAME (m32rb
,ldub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1458 #define FLD(f) abuf->fields.fmt_ldb.f
1459 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1460 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1463 SI opval
= ZEXTQISI (GETMEMQI (current_cpu
, * FLD (f_r2
)));
1464 * FLD (f_r1
) = opval
;
1465 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1468 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1470 #if WITH_PROFILE_MODEL_P
1471 if (PROFILE_MODEL_P (current_cpu
))
1473 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1474 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1475 m32rb_model_profile_insn (current_cpu
, abuf
);
1483 /* ldub-d: ldub $dr,@($slo16,$sr). */
1486 SEM_FN_NAME (m32rb
,ldub_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1488 #define FLD(f) abuf->fields.fmt_ldb_d.f
1489 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1490 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1493 SI opval
= ZEXTQISI (GETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1494 * FLD (f_r1
) = opval
;
1495 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1498 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1500 #if WITH_PROFILE_MODEL_P
1501 if (PROFILE_MODEL_P (current_cpu
))
1503 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1504 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1505 m32rb_model_profile_insn (current_cpu
, abuf
);
1513 /* lduh: lduh $dr,@$sr. */
1516 SEM_FN_NAME (m32rb
,lduh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1518 #define FLD(f) abuf->fields.fmt_ldh.f
1519 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1520 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1523 SI opval
= ZEXTHISI (GETMEMHI (current_cpu
, * FLD (f_r2
)));
1524 * FLD (f_r1
) = opval
;
1525 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1528 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1530 #if WITH_PROFILE_MODEL_P
1531 if (PROFILE_MODEL_P (current_cpu
))
1533 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1534 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1535 m32rb_model_profile_insn (current_cpu
, abuf
);
1543 /* lduh-d: lduh $dr,@($slo16,$sr). */
1546 SEM_FN_NAME (m32rb
,lduh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1548 #define FLD(f) abuf->fields.fmt_ldh_d.f
1549 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1550 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1553 SI opval
= ZEXTHISI (GETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1554 * FLD (f_r1
) = opval
;
1555 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1558 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1560 #if WITH_PROFILE_MODEL_P
1561 if (PROFILE_MODEL_P (current_cpu
))
1563 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1564 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1565 m32rb_model_profile_insn (current_cpu
, abuf
);
1573 /* ld-plus: ld $dr,@$sr+. */
1576 SEM_FN_NAME (m32rb
,ld_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1578 #define FLD(f) abuf->fields.fmt_ld_plus.f
1579 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1580 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1584 temp0
= GETMEMSI (current_cpu
, * FLD (f_r2
));
1585 temp1
= ADDSI (* FLD (f_r2
), 4);
1588 * FLD (f_r1
) = opval
;
1589 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1593 * FLD (f_r2
) = opval
;
1594 TRACE_RESULT (current_cpu
, "sr", 'x', opval
);
1598 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1600 #if WITH_PROFILE_MODEL_P
1601 if (PROFILE_MODEL_P (current_cpu
))
1603 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1604 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1605 m32rb_model_profile_insn (current_cpu
, abuf
);
1613 /* ld24: ld24 $dr,$uimm24. */
1616 SEM_FN_NAME (m32rb
,ld24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1618 #define FLD(f) abuf->fields.fmt_ld24.f
1619 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1620 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1623 SI opval
= FLD (f_uimm24
);
1624 * FLD (f_r1
) = opval
;
1625 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1628 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1630 #if WITH_PROFILE_MODEL_P
1631 if (PROFILE_MODEL_P (current_cpu
))
1633 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1634 m32rb_model_profile_insn (current_cpu
, abuf
);
1642 /* ldi8: ldi8 $dr,$simm8. */
1645 SEM_FN_NAME (m32rb
,ldi8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1647 #define FLD(f) abuf->fields.fmt_ldi8.f
1648 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1649 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1652 SI opval
= FLD (f_simm8
);
1653 * FLD (f_r1
) = opval
;
1654 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1657 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1659 #if WITH_PROFILE_MODEL_P
1660 if (PROFILE_MODEL_P (current_cpu
))
1662 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1663 m32rb_model_profile_insn (current_cpu
, abuf
);
1671 /* ldi16: ldi16 $dr,$hash$slo16. */
1674 SEM_FN_NAME (m32rb
,ldi16
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1676 #define FLD(f) abuf->fields.fmt_ldi16.f
1677 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1678 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1681 SI opval
= FLD (f_simm16
);
1682 * FLD (f_r1
) = opval
;
1683 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1686 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1688 #if WITH_PROFILE_MODEL_P
1689 if (PROFILE_MODEL_P (current_cpu
))
1691 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1692 m32rb_model_profile_insn (current_cpu
, abuf
);
1700 /* lock: lock $dr,@$sr. */
1703 SEM_FN_NAME (m32rb
,lock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1705 #define FLD(f) abuf->fields.fmt_lock.f
1706 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1707 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1712 CPU (h_lock
) = opval
;
1713 TRACE_RESULT (current_cpu
, "lock-0", 'x', opval
);
1716 SI opval
= GETMEMSI (current_cpu
, * FLD (f_r2
));
1717 * FLD (f_r1
) = opval
;
1718 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1722 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1724 #if WITH_PROFILE_MODEL_P
1725 if (PROFILE_MODEL_P (current_cpu
))
1727 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1728 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1729 m32rb_model_profile_insn (current_cpu
, abuf
);
1737 /* machi: machi $src1,$src2. */
1740 SEM_FN_NAME (m32rb
,machi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1742 #define FLD(f) abuf->fields.fmt_machi.f
1743 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1744 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1747 DI opval
= SRADI (SLLDI (ADDDI (m32rb_h_accum_get (current_cpu
), MULDI (EXTSIDI (ANDSI (* FLD (f_r1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16))))), 8), 8);
1748 m32rb_h_accum_set (current_cpu
, opval
);
1749 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
1752 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1754 #if WITH_PROFILE_MODEL_P
1755 if (PROFILE_MODEL_P (current_cpu
))
1757 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1758 m32rb_model_profile_insn (current_cpu
, abuf
);
1766 /* maclo: maclo $src1,$src2. */
1769 SEM_FN_NAME (m32rb
,maclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1771 #define FLD(f) abuf->fields.fmt_machi.f
1772 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1773 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1776 DI opval
= SRADI (SLLDI (ADDDI (m32rb_h_accum_get (current_cpu
), MULDI (EXTSIDI (SLLSI (* FLD (f_r1
), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
))))), 8), 8);
1777 m32rb_h_accum_set (current_cpu
, opval
);
1778 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
1781 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1783 #if WITH_PROFILE_MODEL_P
1784 if (PROFILE_MODEL_P (current_cpu
))
1786 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1787 m32rb_model_profile_insn (current_cpu
, abuf
);
1795 /* macwhi: macwhi $src1,$src2. */
1798 SEM_FN_NAME (m32rb
,macwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1800 #define FLD(f) abuf->fields.fmt_machi.f
1801 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1802 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1805 DI opval
= SRADI (SLLDI (ADDDI (m32rb_h_accum_get (current_cpu
), MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16))))), 8), 8);
1806 m32rb_h_accum_set (current_cpu
, opval
);
1807 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
1810 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1812 #if WITH_PROFILE_MODEL_P
1813 if (PROFILE_MODEL_P (current_cpu
))
1815 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1816 m32rb_model_profile_insn (current_cpu
, abuf
);
1824 /* macwlo: macwlo $src1,$src2. */
1827 SEM_FN_NAME (m32rb
,macwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1829 #define FLD(f) abuf->fields.fmt_machi.f
1830 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1831 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1834 DI opval
= SRADI (SLLDI (ADDDI (m32rb_h_accum_get (current_cpu
), MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
))))), 8), 8);
1835 m32rb_h_accum_set (current_cpu
, opval
);
1836 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
1839 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1841 #if WITH_PROFILE_MODEL_P
1842 if (PROFILE_MODEL_P (current_cpu
))
1844 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1845 m32rb_model_profile_insn (current_cpu
, abuf
);
1853 /* mul: mul $dr,$sr. */
1856 SEM_FN_NAME (m32rb
,mul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1858 #define FLD(f) abuf->fields.fmt_add.f
1859 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1860 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1863 SI opval
= MULSI (* FLD (f_r1
), * FLD (f_r2
));
1864 * FLD (f_r1
) = opval
;
1865 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
1868 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1870 #if WITH_PROFILE_MODEL_P
1871 if (PROFILE_MODEL_P (current_cpu
))
1873 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1874 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
1875 m32rb_model_profile_insn (current_cpu
, abuf
);
1883 /* mulhi: mulhi $src1,$src2. */
1886 SEM_FN_NAME (m32rb
,mulhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1888 #define FLD(f) abuf->fields.fmt_mulhi.f
1889 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1890 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1893 DI opval
= SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (f_r1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16)))), 16), 16);
1894 m32rb_h_accum_set (current_cpu
, opval
);
1895 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
1898 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1900 #if WITH_PROFILE_MODEL_P
1901 if (PROFILE_MODEL_P (current_cpu
))
1903 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1904 m32rb_model_profile_insn (current_cpu
, abuf
);
1912 /* mullo: mullo $src1,$src2. */
1915 SEM_FN_NAME (m32rb
,mullo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1917 #define FLD(f) abuf->fields.fmt_mulhi.f
1918 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1919 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1922 DI opval
= SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (f_r1
), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
)))), 16), 16);
1923 m32rb_h_accum_set (current_cpu
, opval
);
1924 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
1927 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1929 #if WITH_PROFILE_MODEL_P
1930 if (PROFILE_MODEL_P (current_cpu
))
1932 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1933 m32rb_model_profile_insn (current_cpu
, abuf
);
1941 /* mulwhi: mulwhi $src1,$src2. */
1944 SEM_FN_NAME (m32rb
,mulwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1946 #define FLD(f) abuf->fields.fmt_mulhi.f
1947 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1948 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1951 DI opval
= SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16)))), 8), 8);
1952 m32rb_h_accum_set (current_cpu
, opval
);
1953 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
1956 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1958 #if WITH_PROFILE_MODEL_P
1959 if (PROFILE_MODEL_P (current_cpu
))
1961 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1962 m32rb_model_profile_insn (current_cpu
, abuf
);
1970 /* mulwlo: mulwlo $src1,$src2. */
1973 SEM_FN_NAME (m32rb
,mulwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1975 #define FLD(f) abuf->fields.fmt_mulhi.f
1976 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1977 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1980 DI opval
= SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
)))), 8), 8);
1981 m32rb_h_accum_set (current_cpu
, opval
);
1982 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
1985 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1987 #if WITH_PROFILE_MODEL_P
1988 if (PROFILE_MODEL_P (current_cpu
))
1990 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
1991 m32rb_model_profile_insn (current_cpu
, abuf
);
1999 /* mv: mv $dr,$sr. */
2002 SEM_FN_NAME (m32rb
,mv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2004 #define FLD(f) abuf->fields.fmt_mv.f
2005 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2006 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2009 SI opval
= * FLD (f_r2
);
2010 * FLD (f_r1
) = opval
;
2011 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2014 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2016 #if WITH_PROFILE_MODEL_P
2017 if (PROFILE_MODEL_P (current_cpu
))
2019 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2020 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2021 m32rb_model_profile_insn (current_cpu
, abuf
);
2029 /* mvfachi: mvfachi $dr. */
2032 SEM_FN_NAME (m32rb
,mvfachi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2034 #define FLD(f) abuf->fields.fmt_mvfachi.f
2035 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2036 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2039 SI opval
= TRUNCDISI (SRADI (m32rb_h_accum_get (current_cpu
), 32));
2040 * FLD (f_r1
) = opval
;
2041 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2044 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2046 #if WITH_PROFILE_MODEL_P
2047 if (PROFILE_MODEL_P (current_cpu
))
2049 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2050 m32rb_model_profile_insn (current_cpu
, abuf
);
2058 /* mvfaclo: mvfaclo $dr. */
2061 SEM_FN_NAME (m32rb
,mvfaclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2063 #define FLD(f) abuf->fields.fmt_mvfachi.f
2064 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2065 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2068 SI opval
= TRUNCDISI (m32rb_h_accum_get (current_cpu
));
2069 * FLD (f_r1
) = opval
;
2070 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2073 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2075 #if WITH_PROFILE_MODEL_P
2076 if (PROFILE_MODEL_P (current_cpu
))
2078 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2079 m32rb_model_profile_insn (current_cpu
, abuf
);
2087 /* mvfacmi: mvfacmi $dr. */
2090 SEM_FN_NAME (m32rb
,mvfacmi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2092 #define FLD(f) abuf->fields.fmt_mvfachi.f
2093 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2094 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2097 SI opval
= TRUNCDISI (SRADI (m32rb_h_accum_get (current_cpu
), 16));
2098 * FLD (f_r1
) = opval
;
2099 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2102 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2104 #if WITH_PROFILE_MODEL_P
2105 if (PROFILE_MODEL_P (current_cpu
))
2107 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2108 m32rb_model_profile_insn (current_cpu
, abuf
);
2116 /* mvfc: mvfc $dr,$scr. */
2119 SEM_FN_NAME (m32rb
,mvfc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2121 #define FLD(f) abuf->fields.fmt_mvfc.f
2122 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2123 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2126 SI opval
= m32rb_h_cr_get (current_cpu
, FLD (f_r2
));
2127 * FLD (f_r1
) = opval
;
2128 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2131 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2133 #if WITH_PROFILE_MODEL_P
2134 if (PROFILE_MODEL_P (current_cpu
))
2136 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2137 m32rb_model_profile_insn (current_cpu
, abuf
);
2145 /* mvtachi: mvtachi $src1. */
2148 SEM_FN_NAME (m32rb
,mvtachi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2150 #define FLD(f) abuf->fields.fmt_mvtachi.f
2151 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2152 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2155 DI opval
= ORDI (ANDDI (m32rb_h_accum_get (current_cpu
), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (f_r1
)), 32));
2156 m32rb_h_accum_set (current_cpu
, opval
);
2157 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
2160 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2162 #if WITH_PROFILE_MODEL_P
2163 if (PROFILE_MODEL_P (current_cpu
))
2165 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2166 m32rb_model_profile_insn (current_cpu
, abuf
);
2174 /* mvtaclo: mvtaclo $src1. */
2177 SEM_FN_NAME (m32rb
,mvtaclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2179 #define FLD(f) abuf->fields.fmt_mvtachi.f
2180 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2181 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2184 DI opval
= ORDI (ANDDI (m32rb_h_accum_get (current_cpu
), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (f_r1
)));
2185 m32rb_h_accum_set (current_cpu
, opval
);
2186 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
2189 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2191 #if WITH_PROFILE_MODEL_P
2192 if (PROFILE_MODEL_P (current_cpu
))
2194 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2195 m32rb_model_profile_insn (current_cpu
, abuf
);
2203 /* mvtc: mvtc $sr,$dcr. */
2206 SEM_FN_NAME (m32rb
,mvtc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2208 #define FLD(f) abuf->fields.fmt_mvtc.f
2209 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2210 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2213 USI opval
= * FLD (f_r2
);
2214 m32rb_h_cr_set (current_cpu
, FLD (f_r1
), opval
);
2215 TRACE_RESULT (current_cpu
, "dcr", 'x', opval
);
2218 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2220 #if WITH_PROFILE_MODEL_P
2221 if (PROFILE_MODEL_P (current_cpu
))
2223 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2224 m32rb_model_profile_insn (current_cpu
, abuf
);
2232 /* neg: neg $dr,$sr. */
2235 SEM_FN_NAME (m32rb
,neg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2237 #define FLD(f) abuf->fields.fmt_mv.f
2238 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2239 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2242 SI opval
= NEGSI (* FLD (f_r2
));
2243 * FLD (f_r1
) = opval
;
2244 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2247 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2249 #if WITH_PROFILE_MODEL_P
2250 if (PROFILE_MODEL_P (current_cpu
))
2252 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2253 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2254 m32rb_model_profile_insn (current_cpu
, abuf
);
2265 SEM_FN_NAME (m32rb
,nop
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2267 #define FLD(f) abuf->fields.fmt_nop.f
2268 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2269 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2271 PROFILE_COUNT_FILLNOPS (current_cpu
, abuf
->addr
);
2273 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2275 #if WITH_PROFILE_MODEL_P
2276 if (PROFILE_MODEL_P (current_cpu
))
2278 m32rb_model_profile_insn (current_cpu
, abuf
);
2286 /* not: not $dr,$sr. */
2289 SEM_FN_NAME (m32rb
,not) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2291 #define FLD(f) abuf->fields.fmt_mv.f
2292 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2293 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2296 SI opval
= INVSI (* FLD (f_r2
));
2297 * FLD (f_r1
) = opval
;
2298 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2301 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2303 #if WITH_PROFILE_MODEL_P
2304 if (PROFILE_MODEL_P (current_cpu
))
2306 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2307 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2308 m32rb_model_profile_insn (current_cpu
, abuf
);
2319 SEM_FN_NAME (m32rb
,rac
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2321 #define FLD(f) abuf->fields.fmt_rac.f
2322 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2323 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2327 tmp_tmp1
= SLLDI (m32rb_h_accum_get (current_cpu
), 1);
2328 tmp_tmp1
= ADDDI (tmp_tmp1
, MAKEDI (0, 32768));
2330 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)));
2331 m32rb_h_accum_set (current_cpu
, opval
);
2332 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
2336 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2338 #if WITH_PROFILE_MODEL_P
2339 if (PROFILE_MODEL_P (current_cpu
))
2341 m32rb_model_profile_insn (current_cpu
, abuf
);
2352 SEM_FN_NAME (m32rb
,rach
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2354 #define FLD(f) abuf->fields.fmt_rac.f
2355 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2356 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2360 tmp_tmp1
= ANDDI (m32rb_h_accum_get (current_cpu
), MAKEDI (16777215, 0xffffffff));
2361 if (ANDIF (GEDI (tmp_tmp1
, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1
, MAKEDI (8388607, 0xffffffff)))) {
2362 tmp_tmp1
= MAKEDI (16383, 0x80000000);
2364 if (ANDIF (GEDI (tmp_tmp1
, MAKEDI (8388608, 0)), LEDI (tmp_tmp1
, MAKEDI (16760832, 0)))) {
2365 tmp_tmp1
= MAKEDI (16760832, 0);
2367 tmp_tmp1
= ANDDI (ADDDI (m32rb_h_accum_get (current_cpu
), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
2370 tmp_tmp1
= SLLDI (tmp_tmp1
, 1);
2372 DI opval
= SRADI (SLLDI (tmp_tmp1
, 7), 7);
2373 m32rb_h_accum_set (current_cpu
, opval
);
2374 TRACE_RESULT (current_cpu
, "accum", 'D', opval
);
2378 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2380 #if WITH_PROFILE_MODEL_P
2381 if (PROFILE_MODEL_P (current_cpu
))
2383 m32rb_model_profile_insn (current_cpu
, abuf
);
2394 SEM_FN_NAME (m32rb
,rte
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2396 #define FLD(f) abuf->fields.fmt_rte.f
2397 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2398 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2403 UBI opval
= CPU (h_bsm
);
2405 TRACE_RESULT (current_cpu
, "sm-0", 'x', opval
);
2408 UBI opval
= CPU (h_bie
);
2410 TRACE_RESULT (current_cpu
, "ie-0", 'x', opval
);
2413 UBI opval
= CPU (h_bcond
);
2414 CPU (h_cond
) = opval
;
2415 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
2418 USI opval
= ANDSI (CPU (h_bpc
), -4);
2419 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, opval
));
2421 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
2425 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2427 #if WITH_PROFILE_MODEL_P
2428 if (PROFILE_MODEL_P (current_cpu
))
2430 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
2438 /* seth: seth $dr,$hash$hi16. */
2441 SEM_FN_NAME (m32rb
,seth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2443 #define FLD(f) abuf->fields.fmt_seth.f
2444 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2445 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2448 SI opval
= SLLSI (FLD (f_hi16
), 16);
2449 * FLD (f_r1
) = opval
;
2450 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2453 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2455 #if WITH_PROFILE_MODEL_P
2456 if (PROFILE_MODEL_P (current_cpu
))
2458 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2459 m32rb_model_profile_insn (current_cpu
, abuf
);
2467 /* sll: sll $dr,$sr. */
2470 SEM_FN_NAME (m32rb
,sll
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2472 #define FLD(f) abuf->fields.fmt_add.f
2473 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2474 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2477 SI opval
= SLLSI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
2478 * FLD (f_r1
) = opval
;
2479 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2482 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2484 #if WITH_PROFILE_MODEL_P
2485 if (PROFILE_MODEL_P (current_cpu
))
2487 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2488 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2489 m32rb_model_profile_insn (current_cpu
, abuf
);
2497 /* sll3: sll3 $dr,$sr,$simm16. */
2500 SEM_FN_NAME (m32rb
,sll3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2502 #define FLD(f) abuf->fields.fmt_sll3.f
2503 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2504 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2507 SI opval
= SLLSI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
2508 * FLD (f_r1
) = opval
;
2509 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2512 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2514 #if WITH_PROFILE_MODEL_P
2515 if (PROFILE_MODEL_P (current_cpu
))
2517 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2518 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2519 m32rb_model_profile_insn (current_cpu
, abuf
);
2527 /* slli: slli $dr,$uimm5. */
2530 SEM_FN_NAME (m32rb
,slli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2532 #define FLD(f) abuf->fields.fmt_slli.f
2533 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2534 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2537 SI opval
= SLLSI (* FLD (f_r1
), FLD (f_uimm5
));
2538 * FLD (f_r1
) = opval
;
2539 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2542 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2544 #if WITH_PROFILE_MODEL_P
2545 if (PROFILE_MODEL_P (current_cpu
))
2547 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2548 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2549 m32rb_model_profile_insn (current_cpu
, abuf
);
2557 /* sra: sra $dr,$sr. */
2560 SEM_FN_NAME (m32rb
,sra
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2562 #define FLD(f) abuf->fields.fmt_add.f
2563 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2564 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2567 SI opval
= SRASI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
2568 * FLD (f_r1
) = opval
;
2569 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2572 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2574 #if WITH_PROFILE_MODEL_P
2575 if (PROFILE_MODEL_P (current_cpu
))
2577 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2578 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2579 m32rb_model_profile_insn (current_cpu
, abuf
);
2587 /* sra3: sra3 $dr,$sr,$simm16. */
2590 SEM_FN_NAME (m32rb
,sra3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2592 #define FLD(f) abuf->fields.fmt_sll3.f
2593 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2594 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2597 SI opval
= SRASI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
2598 * FLD (f_r1
) = opval
;
2599 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2602 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2604 #if WITH_PROFILE_MODEL_P
2605 if (PROFILE_MODEL_P (current_cpu
))
2607 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2608 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2609 m32rb_model_profile_insn (current_cpu
, abuf
);
2617 /* srai: srai $dr,$uimm5. */
2620 SEM_FN_NAME (m32rb
,srai
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2622 #define FLD(f) abuf->fields.fmt_slli.f
2623 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2624 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2627 SI opval
= SRASI (* FLD (f_r1
), FLD (f_uimm5
));
2628 * FLD (f_r1
) = opval
;
2629 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2632 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2634 #if WITH_PROFILE_MODEL_P
2635 if (PROFILE_MODEL_P (current_cpu
))
2637 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2638 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2639 m32rb_model_profile_insn (current_cpu
, abuf
);
2647 /* srl: srl $dr,$sr. */
2650 SEM_FN_NAME (m32rb
,srl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2652 #define FLD(f) abuf->fields.fmt_add.f
2653 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2654 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2657 SI opval
= SRLSI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
2658 * FLD (f_r1
) = opval
;
2659 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2662 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2664 #if WITH_PROFILE_MODEL_P
2665 if (PROFILE_MODEL_P (current_cpu
))
2667 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2668 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2669 m32rb_model_profile_insn (current_cpu
, abuf
);
2677 /* srl3: srl3 $dr,$sr,$simm16. */
2680 SEM_FN_NAME (m32rb
,srl3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2682 #define FLD(f) abuf->fields.fmt_sll3.f
2683 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2684 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2687 SI opval
= SRLSI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
2688 * FLD (f_r1
) = opval
;
2689 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2692 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2694 #if WITH_PROFILE_MODEL_P
2695 if (PROFILE_MODEL_P (current_cpu
))
2697 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2698 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2699 m32rb_model_profile_insn (current_cpu
, abuf
);
2707 /* srli: srli $dr,$uimm5. */
2710 SEM_FN_NAME (m32rb
,srli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2712 #define FLD(f) abuf->fields.fmt_slli.f
2713 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2714 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2717 SI opval
= SRLSI (* FLD (f_r1
), FLD (f_uimm5
));
2718 * FLD (f_r1
) = opval
;
2719 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
2722 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2724 #if WITH_PROFILE_MODEL_P
2725 if (PROFILE_MODEL_P (current_cpu
))
2727 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2728 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2729 m32rb_model_profile_insn (current_cpu
, abuf
);
2737 /* st: st $src1,@$src2. */
2740 SEM_FN_NAME (m32rb
,st
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2742 #define FLD(f) abuf->fields.fmt_st.f
2743 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2744 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2747 SI opval
= * FLD (f_r1
);
2748 SETMEMSI (current_cpu
, * FLD (f_r2
), opval
);
2749 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
2752 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2754 #if WITH_PROFILE_MODEL_P
2755 if (PROFILE_MODEL_P (current_cpu
))
2757 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2758 m32rb_model_profile_insn (current_cpu
, abuf
);
2766 /* st-d: st $src1,@($slo16,$src2). */
2769 SEM_FN_NAME (m32rb
,st_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2771 #define FLD(f) abuf->fields.fmt_st_d.f
2772 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2773 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2776 SI opval
= * FLD (f_r1
);
2777 SETMEMSI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), opval
);
2778 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
2781 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2783 #if WITH_PROFILE_MODEL_P
2784 if (PROFILE_MODEL_P (current_cpu
))
2786 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2787 m32rb_model_profile_insn (current_cpu
, abuf
);
2795 /* stb: stb $src1,@$src2. */
2798 SEM_FN_NAME (m32rb
,stb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2800 #define FLD(f) abuf->fields.fmt_stb.f
2801 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2802 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2805 QI opval
= * FLD (f_r1
);
2806 SETMEMQI (current_cpu
, * FLD (f_r2
), opval
);
2807 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
2810 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2812 #if WITH_PROFILE_MODEL_P
2813 if (PROFILE_MODEL_P (current_cpu
))
2815 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2816 m32rb_model_profile_insn (current_cpu
, abuf
);
2824 /* stb-d: stb $src1,@($slo16,$src2). */
2827 SEM_FN_NAME (m32rb
,stb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2829 #define FLD(f) abuf->fields.fmt_stb_d.f
2830 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2831 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2834 QI opval
= * FLD (f_r1
);
2835 SETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), opval
);
2836 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
2839 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2841 #if WITH_PROFILE_MODEL_P
2842 if (PROFILE_MODEL_P (current_cpu
))
2844 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2845 m32rb_model_profile_insn (current_cpu
, abuf
);
2853 /* sth: sth $src1,@$src2. */
2856 SEM_FN_NAME (m32rb
,sth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2858 #define FLD(f) abuf->fields.fmt_sth.f
2859 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2860 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2863 HI opval
= * FLD (f_r1
);
2864 SETMEMHI (current_cpu
, * FLD (f_r2
), opval
);
2865 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
2868 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2870 #if WITH_PROFILE_MODEL_P
2871 if (PROFILE_MODEL_P (current_cpu
))
2873 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2874 m32rb_model_profile_insn (current_cpu
, abuf
);
2882 /* sth-d: sth $src1,@($slo16,$src2). */
2885 SEM_FN_NAME (m32rb
,sth_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2887 #define FLD(f) abuf->fields.fmt_sth_d.f
2888 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2889 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2892 HI opval
= * FLD (f_r1
);
2893 SETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), opval
);
2894 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
2897 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2899 #if WITH_PROFILE_MODEL_P
2900 if (PROFILE_MODEL_P (current_cpu
))
2902 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2903 m32rb_model_profile_insn (current_cpu
, abuf
);
2911 /* st-plus: st $src1,@+$src2. */
2914 SEM_FN_NAME (m32rb
,st_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2916 #define FLD(f) abuf->fields.fmt_st_plus.f
2917 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2918 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2922 tmp_new_src2
= ADDSI (* FLD (f_r2
), 4);
2924 SI opval
= * FLD (f_r1
);
2925 SETMEMSI (current_cpu
, tmp_new_src2
, opval
);
2926 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
2929 SI opval
= tmp_new_src2
;
2930 * FLD (f_r2
) = opval
;
2931 TRACE_RESULT (current_cpu
, "src2", 'x', opval
);
2935 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2937 #if WITH_PROFILE_MODEL_P
2938 if (PROFILE_MODEL_P (current_cpu
))
2940 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2941 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2942 m32rb_model_profile_insn (current_cpu
, abuf
);
2950 /* st-minus: st $src1,@-$src2. */
2953 SEM_FN_NAME (m32rb
,st_minus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2955 #define FLD(f) abuf->fields.fmt_st_plus.f
2956 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2957 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2961 tmp_new_src2
= SUBSI (* FLD (f_r2
), 4);
2963 SI opval
= * FLD (f_r1
);
2964 SETMEMSI (current_cpu
, tmp_new_src2
, opval
);
2965 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
2968 SI opval
= tmp_new_src2
;
2969 * FLD (f_r2
) = opval
;
2970 TRACE_RESULT (current_cpu
, "src2", 'x', opval
);
2974 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2976 #if WITH_PROFILE_MODEL_P
2977 if (PROFILE_MODEL_P (current_cpu
))
2979 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
2980 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
2981 m32rb_model_profile_insn (current_cpu
, abuf
);
2989 /* sub: sub $dr,$sr. */
2992 SEM_FN_NAME (m32rb
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2994 #define FLD(f) abuf->fields.fmt_add.f
2995 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2996 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2999 SI opval
= SUBSI (* FLD (f_r1
), * FLD (f_r2
));
3000 * FLD (f_r1
) = opval
;
3001 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
3004 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3006 #if WITH_PROFILE_MODEL_P
3007 if (PROFILE_MODEL_P (current_cpu
))
3009 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
3010 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
3011 m32rb_model_profile_insn (current_cpu
, abuf
);
3019 /* subv: subv $dr,$sr. */
3022 SEM_FN_NAME (m32rb
,subv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3024 #define FLD(f) abuf->fields.fmt_addv.f
3025 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3026 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3030 temp0
= SUBSI (* FLD (f_r1
), * FLD (f_r2
));
3031 temp1
= SUBOFSI (* FLD (f_r1
), * FLD (f_r2
), 0);
3034 * FLD (f_r1
) = opval
;
3035 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
3039 CPU (h_cond
) = opval
;
3040 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
3044 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3046 #if WITH_PROFILE_MODEL_P
3047 if (PROFILE_MODEL_P (current_cpu
))
3049 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
3050 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
3051 m32rb_model_profile_insn (current_cpu
, abuf
);
3059 /* subx: subx $dr,$sr. */
3062 SEM_FN_NAME (m32rb
,subx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3064 #define FLD(f) abuf->fields.fmt_addx.f
3065 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3066 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3070 temp0
= SUBCSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
3071 temp1
= SUBCFSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
3074 * FLD (f_r1
) = opval
;
3075 TRACE_RESULT (current_cpu
, "dr", 'x', opval
);
3079 CPU (h_cond
) = opval
;
3080 TRACE_RESULT (current_cpu
, "condbit", 'x', opval
);
3084 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3086 #if WITH_PROFILE_MODEL_P
3087 if (PROFILE_MODEL_P (current_cpu
))
3089 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
3090 m32rb_model_mark_set_h_gr (current_cpu
, abuf
);
3091 m32rb_model_profile_insn (current_cpu
, abuf
);
3099 /* trap: trap $uimm4. */
3102 SEM_FN_NAME (m32rb
,trap
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3104 #define FLD(f) abuf->fields.fmt_trap.f
3105 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3106 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3111 USI opval
= ADDSI (CPU (h_pc
), 4);
3112 m32rb_h_cr_set (current_cpu
, ((HOSTUINT
) 6), opval
);
3113 TRACE_RESULT (current_cpu
, "cr-6", 'x', opval
);
3116 USI opval
= ANDSI (SLLSI (m32rb_h_cr_get (current_cpu
, ((HOSTUINT
) 0)), 8), 65408);
3117 m32rb_h_cr_set (current_cpu
, ((HOSTUINT
) 0), opval
);
3118 TRACE_RESULT (current_cpu
, "cr-0", 'x', opval
);
3121 SI opval
= m32r_trap (current_cpu
, CPU (h_pc
), FLD (f_uimm4
));
3122 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, opval
));
3124 TRACE_RESULT (current_cpu
, "pc", 'x', opval
);
3128 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3130 #if WITH_PROFILE_MODEL_P
3131 if (PROFILE_MODEL_P (current_cpu
))
3133 m32rb_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
3141 /* unlock: unlock $src1,@$src2. */
3144 SEM_FN_NAME (m32rb
,unlock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3146 #define FLD(f) abuf->fields.fmt_unlock.f
3147 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3148 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3153 SI opval
= * FLD (f_r1
);
3154 SETMEMSI (current_cpu
, * FLD (f_r2
), opval
);
3155 TRACE_RESULT (current_cpu
, "memory", 'x', opval
);
3160 CPU (h_lock
) = opval
;
3161 TRACE_RESULT (current_cpu
, "lock-0", 'x', opval
);
3165 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3167 #if WITH_PROFILE_MODEL_P
3168 if (PROFILE_MODEL_P (current_cpu
))
3170 m32rb_model_mark_get_h_gr (current_cpu
, abuf
);
3171 m32rb_model_profile_insn (current_cpu
, abuf
);
3180 SEM_FN_NAME (m32rb
,illegal
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3182 sim_engine_illegal_insn (current_cpu
, NULL_CIA
/*FIXME*/);
3186 #endif /* WANT_CPU */
This page took 0.090308 seconds and 5 git commands to generate.