1 /* Simulator instruction semantics for m32r.
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.
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 (m32r
,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);
47 * FLD (f_r1
) = ADDSI (* FLD (f_r1
), * FLD (f_r2
));
48 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
50 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
52 #if WITH_PROFILE_MODEL_P
53 if (PROFILE_MODEL_P (current_cpu
))
55 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
56 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
57 m32r_model_profile_insn (current_cpu
, abuf
);
65 /* add3: add3 $dr,$sr,$hash$slo16. */
68 SEM_FN_NAME (m32r
,add3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
70 #define FLD(f) abuf->fields.fmt_add3.f
71 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
72 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
74 * FLD (f_r1
) = ADDSI (* FLD (f_r2
), FLD (f_simm16
));
75 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
77 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
79 #if WITH_PROFILE_MODEL_P
80 if (PROFILE_MODEL_P (current_cpu
))
82 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
83 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
84 m32r_model_profile_insn (current_cpu
, abuf
);
92 /* and: and $dr,$sr. */
95 SEM_FN_NAME (m32r
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
97 #define FLD(f) abuf->fields.fmt_add.f
98 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
99 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
101 * FLD (f_r1
) = ANDSI (* FLD (f_r1
), * FLD (f_r2
));
102 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
104 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
106 #if WITH_PROFILE_MODEL_P
107 if (PROFILE_MODEL_P (current_cpu
))
109 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
110 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
111 m32r_model_profile_insn (current_cpu
, abuf
);
119 /* and3: and3 $dr,$sr,$uimm16. */
122 SEM_FN_NAME (m32r
,and3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
124 #define FLD(f) abuf->fields.fmt_and3.f
125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
126 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
128 * FLD (f_r1
) = ANDSI (* FLD (f_r2
), FLD (f_uimm16
));
129 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
131 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
133 #if WITH_PROFILE_MODEL_P
134 if (PROFILE_MODEL_P (current_cpu
))
136 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
137 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
138 m32r_model_profile_insn (current_cpu
, abuf
);
146 /* or: or $dr,$sr. */
149 SEM_FN_NAME (m32r
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
151 #define FLD(f) abuf->fields.fmt_add.f
152 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
153 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
155 * FLD (f_r1
) = ORSI (* FLD (f_r1
), * FLD (f_r2
));
156 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
158 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
160 #if WITH_PROFILE_MODEL_P
161 if (PROFILE_MODEL_P (current_cpu
))
163 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
164 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
165 m32r_model_profile_insn (current_cpu
, abuf
);
173 /* or3: or3 $dr,$sr,$hash$ulo16. */
176 SEM_FN_NAME (m32r
,or3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
178 #define FLD(f) abuf->fields.fmt_or3.f
179 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
180 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
182 * FLD (f_r1
) = ORSI (* FLD (f_r2
), FLD (f_uimm16
));
183 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
185 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
187 #if WITH_PROFILE_MODEL_P
188 if (PROFILE_MODEL_P (current_cpu
))
190 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
191 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
192 m32r_model_profile_insn (current_cpu
, abuf
);
200 /* xor: xor $dr,$sr. */
203 SEM_FN_NAME (m32r
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
205 #define FLD(f) abuf->fields.fmt_add.f
206 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
207 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
209 * FLD (f_r1
) = XORSI (* FLD (f_r1
), * FLD (f_r2
));
210 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
212 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
214 #if WITH_PROFILE_MODEL_P
215 if (PROFILE_MODEL_P (current_cpu
))
217 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
218 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
219 m32r_model_profile_insn (current_cpu
, abuf
);
227 /* xor3: xor3 $dr,$sr,$uimm16. */
230 SEM_FN_NAME (m32r
,xor3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
232 #define FLD(f) abuf->fields.fmt_and3.f
233 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
234 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
236 * FLD (f_r1
) = XORSI (* FLD (f_r2
), FLD (f_uimm16
));
237 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
239 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
241 #if WITH_PROFILE_MODEL_P
242 if (PROFILE_MODEL_P (current_cpu
))
244 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
245 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
246 m32r_model_profile_insn (current_cpu
, abuf
);
254 /* addi: addi $dr,$simm8. */
257 SEM_FN_NAME (m32r
,addi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
259 #define FLD(f) abuf->fields.fmt_addi.f
260 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
261 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
263 * FLD (f_r1
) = ADDSI (* FLD (f_r1
), FLD (f_simm8
));
264 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
266 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
268 #if WITH_PROFILE_MODEL_P
269 if (PROFILE_MODEL_P (current_cpu
))
271 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
272 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
273 m32r_model_profile_insn (current_cpu
, abuf
);
281 /* addv: addv $dr,$sr. */
284 SEM_FN_NAME (m32r
,addv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
286 #define FLD(f) abuf->fields.fmt_addv.f
287 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
288 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
292 temp0
= ADDSI (* FLD (f_r1
), * FLD (f_r2
));
293 temp1
= ADDOFSI (* FLD (f_r1
), * FLD (f_r2
), 0);
294 * FLD (f_r1
) = temp0
;
295 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
296 CPU (h_cond
) = temp1
;
297 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
300 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
302 #if WITH_PROFILE_MODEL_P
303 if (PROFILE_MODEL_P (current_cpu
))
305 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
306 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
307 m32r_model_profile_insn (current_cpu
, abuf
);
315 /* addv3: addv3 $dr,$sr,$simm16. */
318 SEM_FN_NAME (m32r
,addv3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
320 #define FLD(f) abuf->fields.fmt_addv3.f
321 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
322 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
326 temp0
= ADDSI (* FLD (f_r2
), FLD (f_simm16
));
327 temp1
= ADDOFSI (* FLD (f_r2
), FLD (f_simm16
), 0);
328 * FLD (f_r1
) = temp0
;
329 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
330 CPU (h_cond
) = temp1
;
331 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
334 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
336 #if WITH_PROFILE_MODEL_P
337 if (PROFILE_MODEL_P (current_cpu
))
339 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
340 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
341 m32r_model_profile_insn (current_cpu
, abuf
);
349 /* addx: addx $dr,$sr. */
352 SEM_FN_NAME (m32r
,addx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
354 #define FLD(f) abuf->fields.fmt_addx.f
355 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
356 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
360 temp0
= ADDCSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
361 temp1
= ADDCFSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
362 * FLD (f_r1
) = temp0
;
363 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
364 CPU (h_cond
) = temp1
;
365 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
368 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
370 #if WITH_PROFILE_MODEL_P
371 if (PROFILE_MODEL_P (current_cpu
))
373 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
374 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
375 m32r_model_profile_insn (current_cpu
, abuf
);
383 /* bc8: bc.s $disp8. */
386 SEM_FN_NAME (m32r
,bc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
388 #define FLD(f) abuf->fields.fmt_bc8.f
389 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
390 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
394 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp8
)));
396 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
399 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
401 #if WITH_PROFILE_MODEL_P
402 if (PROFILE_MODEL_P (current_cpu
))
404 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
412 /* bc24: bc.l $disp24. */
415 SEM_FN_NAME (m32r
,bc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
417 #define FLD(f) abuf->fields.fmt_bc24.f
418 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
419 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
423 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp24
)));
425 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
428 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
430 #if WITH_PROFILE_MODEL_P
431 if (PROFILE_MODEL_P (current_cpu
))
433 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
441 /* beq: beq $src1,$src2,$disp16. */
444 SEM_FN_NAME (m32r
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
446 #define FLD(f) abuf->fields.fmt_beq.f
447 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
448 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
451 if (EQSI (* FLD (f_r1
), * FLD (f_r2
))) {
452 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
454 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
457 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
459 #if WITH_PROFILE_MODEL_P
460 if (PROFILE_MODEL_P (current_cpu
))
462 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
463 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
471 /* beqz: beqz $src2,$disp16. */
474 SEM_FN_NAME (m32r
,beqz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
476 #define FLD(f) abuf->fields.fmt_beqz.f
477 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
478 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
481 if (EQSI (* FLD (f_r2
), 0)) {
482 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
484 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
487 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
489 #if WITH_PROFILE_MODEL_P
490 if (PROFILE_MODEL_P (current_cpu
))
492 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
493 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
501 /* bgez: bgez $src2,$disp16. */
504 SEM_FN_NAME (m32r
,bgez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
506 #define FLD(f) abuf->fields.fmt_beqz.f
507 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
508 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
511 if (GESI (* FLD (f_r2
), 0)) {
512 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
514 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
517 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
519 #if WITH_PROFILE_MODEL_P
520 if (PROFILE_MODEL_P (current_cpu
))
522 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
523 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
531 /* bgtz: bgtz $src2,$disp16. */
534 SEM_FN_NAME (m32r
,bgtz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
536 #define FLD(f) abuf->fields.fmt_beqz.f
537 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
538 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
541 if (GTSI (* FLD (f_r2
), 0)) {
542 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
544 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
547 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
549 #if WITH_PROFILE_MODEL_P
550 if (PROFILE_MODEL_P (current_cpu
))
552 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
553 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
561 /* blez: blez $src2,$disp16. */
564 SEM_FN_NAME (m32r
,blez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
566 #define FLD(f) abuf->fields.fmt_beqz.f
567 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
568 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
571 if (LESI (* FLD (f_r2
), 0)) {
572 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
574 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
577 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
579 #if WITH_PROFILE_MODEL_P
580 if (PROFILE_MODEL_P (current_cpu
))
582 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
583 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
591 /* bltz: bltz $src2,$disp16. */
594 SEM_FN_NAME (m32r
,bltz
) (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 (LTSI (* FLD (f_r2
), 0)) {
602 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
604 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
607 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
609 #if WITH_PROFILE_MODEL_P
610 if (PROFILE_MODEL_P (current_cpu
))
612 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
613 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
621 /* bnez: bnez $src2,$disp16. */
624 SEM_FN_NAME (m32r
,bnez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
626 #define FLD(f) abuf->fields.fmt_beqz.f
627 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
628 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
631 if (NESI (* FLD (f_r2
), 0)) {
632 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
634 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
637 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
639 #if WITH_PROFILE_MODEL_P
640 if (PROFILE_MODEL_P (current_cpu
))
642 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
643 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
651 /* bl8: bl.s $disp8. */
654 SEM_FN_NAME (m32r
,bl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
656 #define FLD(f) abuf->fields.fmt_bl8.f
657 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
658 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
662 CPU (h_gr
[14]) = ADDSI (ANDSI (CPU (h_pc
), -4), 4);
663 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
664 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp8
)));
666 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
669 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
671 #if WITH_PROFILE_MODEL_P
672 if (PROFILE_MODEL_P (current_cpu
))
674 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
675 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
683 /* bl24: bl.l $disp24. */
686 SEM_FN_NAME (m32r
,bl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
688 #define FLD(f) abuf->fields.fmt_bl24.f
689 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
690 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
694 CPU (h_gr
[14]) = ADDSI (CPU (h_pc
), 4);
695 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
696 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp24
)));
698 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
701 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
703 #if WITH_PROFILE_MODEL_P
704 if (PROFILE_MODEL_P (current_cpu
))
706 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
707 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
715 /* bnc8: bnc.s $disp8. */
718 SEM_FN_NAME (m32r
,bnc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
720 #define FLD(f) abuf->fields.fmt_bc8.f
721 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
722 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
725 if (NOTBI (CPU (h_cond
))) {
726 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp8
)));
728 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
731 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
733 #if WITH_PROFILE_MODEL_P
734 if (PROFILE_MODEL_P (current_cpu
))
736 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
744 /* bnc24: bnc.l $disp24. */
747 SEM_FN_NAME (m32r
,bnc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
749 #define FLD(f) abuf->fields.fmt_bc24.f
750 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
751 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
754 if (NOTBI (CPU (h_cond
))) {
755 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp24
)));
757 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
760 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
762 #if WITH_PROFILE_MODEL_P
763 if (PROFILE_MODEL_P (current_cpu
))
765 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
773 /* bne: bne $src1,$src2,$disp16. */
776 SEM_FN_NAME (m32r
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
778 #define FLD(f) abuf->fields.fmt_beq.f
779 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
780 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
783 if (NESI (* FLD (f_r1
), * FLD (f_r2
))) {
784 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
786 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
789 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
791 #if WITH_PROFILE_MODEL_P
792 if (PROFILE_MODEL_P (current_cpu
))
794 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
795 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
803 /* bra8: bra.s $disp8. */
806 SEM_FN_NAME (m32r
,bra8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
808 #define FLD(f) abuf->fields.fmt_bra8.f
809 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
810 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
813 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp8
)));
815 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
817 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
819 #if WITH_PROFILE_MODEL_P
820 if (PROFILE_MODEL_P (current_cpu
))
822 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
830 /* bra24: bra.l $disp24. */
833 SEM_FN_NAME (m32r
,bra24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
835 #define FLD(f) abuf->fields.fmt_bra24.f
836 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
837 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
840 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp24
)));
842 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
844 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
846 #if WITH_PROFILE_MODEL_P
847 if (PROFILE_MODEL_P (current_cpu
))
849 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
857 /* cmp: cmp $src1,$src2. */
860 SEM_FN_NAME (m32r
,cmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
862 #define FLD(f) abuf->fields.fmt_cmp.f
863 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
864 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
866 CPU (h_cond
) = LTSI (* FLD (f_r1
), * FLD (f_r2
));
867 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
869 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
871 #if WITH_PROFILE_MODEL_P
872 if (PROFILE_MODEL_P (current_cpu
))
874 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
875 m32r_model_profile_insn (current_cpu
, abuf
);
883 /* cmpi: cmpi $src2,$simm16. */
886 SEM_FN_NAME (m32r
,cmpi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
888 #define FLD(f) abuf->fields.fmt_cmpi.f
889 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
890 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
892 CPU (h_cond
) = LTSI (* FLD (f_r2
), FLD (f_simm16
));
893 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
895 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
897 #if WITH_PROFILE_MODEL_P
898 if (PROFILE_MODEL_P (current_cpu
))
900 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
901 m32r_model_profile_insn (current_cpu
, abuf
);
909 /* cmpu: cmpu $src1,$src2. */
912 SEM_FN_NAME (m32r
,cmpu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
914 #define FLD(f) abuf->fields.fmt_cmp.f
915 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
916 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
918 CPU (h_cond
) = LTUSI (* FLD (f_r1
), * FLD (f_r2
));
919 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
921 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
923 #if WITH_PROFILE_MODEL_P
924 if (PROFILE_MODEL_P (current_cpu
))
926 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
927 m32r_model_profile_insn (current_cpu
, abuf
);
935 /* cmpui: cmpui $src2,$simm16. */
938 SEM_FN_NAME (m32r
,cmpui
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
940 #define FLD(f) abuf->fields.fmt_cmpi.f
941 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
942 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
944 CPU (h_cond
) = LTUSI (* FLD (f_r2
), FLD (f_simm16
));
945 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
947 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
949 #if WITH_PROFILE_MODEL_P
950 if (PROFILE_MODEL_P (current_cpu
))
952 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
953 m32r_model_profile_insn (current_cpu
, abuf
);
961 /* div: div $dr,$sr. */
964 SEM_FN_NAME (m32r
,div
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
966 #define FLD(f) abuf->fields.fmt_div.f
967 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
968 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
970 if (NESI (* FLD (f_r2
), 0)) {
971 * FLD (f_r1
) = DIVSI (* FLD (f_r1
), * FLD (f_r2
));
972 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
975 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
977 #if WITH_PROFILE_MODEL_P
978 if (PROFILE_MODEL_P (current_cpu
))
980 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
981 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
982 m32r_model_profile_insn (current_cpu
, abuf
);
990 /* divu: divu $dr,$sr. */
993 SEM_FN_NAME (m32r
,divu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
995 #define FLD(f) abuf->fields.fmt_div.f
996 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
997 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
999 if (NESI (* FLD (f_r2
), 0)) {
1000 * FLD (f_r1
) = UDIVSI (* FLD (f_r1
), * FLD (f_r2
));
1001 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1004 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1006 #if WITH_PROFILE_MODEL_P
1007 if (PROFILE_MODEL_P (current_cpu
))
1009 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1010 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1011 m32r_model_profile_insn (current_cpu
, abuf
);
1019 /* rem: rem $dr,$sr. */
1022 SEM_FN_NAME (m32r
,rem
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1024 #define FLD(f) abuf->fields.fmt_div.f
1025 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1026 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1028 if (NESI (* FLD (f_r2
), 0)) {
1029 * FLD (f_r1
) = MODSI (* FLD (f_r1
), * FLD (f_r2
));
1030 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1033 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1035 #if WITH_PROFILE_MODEL_P
1036 if (PROFILE_MODEL_P (current_cpu
))
1038 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1039 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1040 m32r_model_profile_insn (current_cpu
, abuf
);
1048 /* remu: remu $dr,$sr. */
1051 SEM_FN_NAME (m32r
,remu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1053 #define FLD(f) abuf->fields.fmt_div.f
1054 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1055 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1057 if (NESI (* FLD (f_r2
), 0)) {
1058 * FLD (f_r1
) = UMODSI (* FLD (f_r1
), * FLD (f_r2
));
1059 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1062 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1064 #if WITH_PROFILE_MODEL_P
1065 if (PROFILE_MODEL_P (current_cpu
))
1067 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1068 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1069 m32r_model_profile_insn (current_cpu
, abuf
);
1080 SEM_FN_NAME (m32r
,jl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1082 #define FLD(f) abuf->fields.fmt_jl.f
1083 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1084 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1089 temp0
= ADDSI (ANDSI (CPU (h_pc
), -4), 4);
1090 temp1
= ANDSI (* FLD (f_r2
), -4);
1091 CPU (h_gr
[14]) = temp0
;
1092 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
1093 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, temp1
));
1095 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1098 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1100 #if WITH_PROFILE_MODEL_P
1101 if (PROFILE_MODEL_P (current_cpu
))
1103 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1104 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1105 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1116 SEM_FN_NAME (m32r
,jmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1118 #define FLD(f) abuf->fields.fmt_jmp.f
1119 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1120 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1123 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (* FLD (f_r2
), -4)));
1125 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1127 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1129 #if WITH_PROFILE_MODEL_P
1130 if (PROFILE_MODEL_P (current_cpu
))
1132 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1133 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1141 /* ld: ld $dr,@$sr. */
1144 SEM_FN_NAME (m32r
,ld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1146 #define FLD(f) abuf->fields.fmt_ld.f
1147 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1148 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1150 * FLD (f_r1
) = GETMEMSI (current_cpu
, * FLD (f_r2
));
1151 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1153 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1155 #if WITH_PROFILE_MODEL_P
1156 if (PROFILE_MODEL_P (current_cpu
))
1158 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1159 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1160 m32r_model_profile_insn (current_cpu
, abuf
);
1168 /* ld-d: ld $dr,@($slo16,$sr). */
1171 SEM_FN_NAME (m32r
,ld_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1173 #define FLD(f) abuf->fields.fmt_ld_d.f
1174 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1175 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1177 * FLD (f_r1
) = GETMEMSI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)));
1178 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1180 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1182 #if WITH_PROFILE_MODEL_P
1183 if (PROFILE_MODEL_P (current_cpu
))
1185 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1186 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1187 m32r_model_profile_insn (current_cpu
, abuf
);
1195 /* ldb: ldb $dr,@$sr. */
1198 SEM_FN_NAME (m32r
,ldb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1200 #define FLD(f) abuf->fields.fmt_ldb.f
1201 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1202 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1204 * FLD (f_r1
) = EXTQISI (GETMEMQI (current_cpu
, * FLD (f_r2
)));
1205 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1207 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1209 #if WITH_PROFILE_MODEL_P
1210 if (PROFILE_MODEL_P (current_cpu
))
1212 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1213 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1214 m32r_model_profile_insn (current_cpu
, abuf
);
1222 /* ldb-d: ldb $dr,@($slo16,$sr). */
1225 SEM_FN_NAME (m32r
,ldb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1227 #define FLD(f) abuf->fields.fmt_ldb_d.f
1228 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1229 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1231 * FLD (f_r1
) = EXTQISI (GETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1232 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1234 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1236 #if WITH_PROFILE_MODEL_P
1237 if (PROFILE_MODEL_P (current_cpu
))
1239 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1240 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1241 m32r_model_profile_insn (current_cpu
, abuf
);
1249 /* ldh: ldh $dr,@$sr. */
1252 SEM_FN_NAME (m32r
,ldh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1254 #define FLD(f) abuf->fields.fmt_ldh.f
1255 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1256 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1258 * FLD (f_r1
) = EXTHISI (GETMEMHI (current_cpu
, * FLD (f_r2
)));
1259 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1261 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1263 #if WITH_PROFILE_MODEL_P
1264 if (PROFILE_MODEL_P (current_cpu
))
1266 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1267 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1268 m32r_model_profile_insn (current_cpu
, abuf
);
1276 /* ldh-d: ldh $dr,@($slo16,$sr). */
1279 SEM_FN_NAME (m32r
,ldh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1281 #define FLD(f) abuf->fields.fmt_ldh_d.f
1282 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1283 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1285 * FLD (f_r1
) = EXTHISI (GETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1286 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1288 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1290 #if WITH_PROFILE_MODEL_P
1291 if (PROFILE_MODEL_P (current_cpu
))
1293 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1294 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1295 m32r_model_profile_insn (current_cpu
, abuf
);
1303 /* ldub: ldub $dr,@$sr. */
1306 SEM_FN_NAME (m32r
,ldub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1308 #define FLD(f) abuf->fields.fmt_ldb.f
1309 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1310 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1312 * FLD (f_r1
) = ZEXTQISI (GETMEMQI (current_cpu
, * FLD (f_r2
)));
1313 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1315 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1317 #if WITH_PROFILE_MODEL_P
1318 if (PROFILE_MODEL_P (current_cpu
))
1320 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1321 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1322 m32r_model_profile_insn (current_cpu
, abuf
);
1330 /* ldub-d: ldub $dr,@($slo16,$sr). */
1333 SEM_FN_NAME (m32r
,ldub_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1335 #define FLD(f) abuf->fields.fmt_ldb_d.f
1336 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1337 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1339 * FLD (f_r1
) = ZEXTQISI (GETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1340 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1342 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1344 #if WITH_PROFILE_MODEL_P
1345 if (PROFILE_MODEL_P (current_cpu
))
1347 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1348 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1349 m32r_model_profile_insn (current_cpu
, abuf
);
1357 /* lduh: lduh $dr,@$sr. */
1360 SEM_FN_NAME (m32r
,lduh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1362 #define FLD(f) abuf->fields.fmt_ldh.f
1363 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1364 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1366 * FLD (f_r1
) = ZEXTHISI (GETMEMHI (current_cpu
, * FLD (f_r2
)));
1367 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1369 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1371 #if WITH_PROFILE_MODEL_P
1372 if (PROFILE_MODEL_P (current_cpu
))
1374 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1375 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1376 m32r_model_profile_insn (current_cpu
, abuf
);
1384 /* lduh-d: lduh $dr,@($slo16,$sr). */
1387 SEM_FN_NAME (m32r
,lduh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1389 #define FLD(f) abuf->fields.fmt_ldh_d.f
1390 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1391 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1393 * FLD (f_r1
) = ZEXTHISI (GETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1394 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1396 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1398 #if WITH_PROFILE_MODEL_P
1399 if (PROFILE_MODEL_P (current_cpu
))
1401 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1402 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1403 m32r_model_profile_insn (current_cpu
, abuf
);
1411 /* ld-plus: ld $dr,@$sr+. */
1414 SEM_FN_NAME (m32r
,ld_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1416 #define FLD(f) abuf->fields.fmt_ld_plus.f
1417 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1418 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1422 temp0
= GETMEMSI (current_cpu
, * FLD (f_r2
));
1423 temp1
= ADDSI (* FLD (f_r2
), 4);
1424 * FLD (f_r1
) = temp0
;
1425 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1426 * FLD (f_r2
) = temp1
;
1427 TRACE_RESULT (current_cpu
, "sr", 'x', * FLD (f_r2
));
1430 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1432 #if WITH_PROFILE_MODEL_P
1433 if (PROFILE_MODEL_P (current_cpu
))
1435 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1436 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1437 m32r_model_profile_insn (current_cpu
, abuf
);
1445 /* ld24: ld24 $dr,$uimm24. */
1448 SEM_FN_NAME (m32r
,ld24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1450 #define FLD(f) abuf->fields.fmt_ld24.f
1451 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1452 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1454 * FLD (f_r1
) = FLD (f_uimm24
);
1455 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1457 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1459 #if WITH_PROFILE_MODEL_P
1460 if (PROFILE_MODEL_P (current_cpu
))
1462 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1463 m32r_model_profile_insn (current_cpu
, abuf
);
1471 /* ldi8: ldi8 $dr,$simm8. */
1474 SEM_FN_NAME (m32r
,ldi8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1476 #define FLD(f) abuf->fields.fmt_ldi8.f
1477 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1478 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1480 * FLD (f_r1
) = FLD (f_simm8
);
1481 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1483 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1485 #if WITH_PROFILE_MODEL_P
1486 if (PROFILE_MODEL_P (current_cpu
))
1488 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1489 m32r_model_profile_insn (current_cpu
, abuf
);
1497 /* ldi16: ldi16 $dr,$hash$slo16. */
1500 SEM_FN_NAME (m32r
,ldi16
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1502 #define FLD(f) abuf->fields.fmt_ldi16.f
1503 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1504 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1506 * FLD (f_r1
) = FLD (f_simm16
);
1507 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1509 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1511 #if WITH_PROFILE_MODEL_P
1512 if (PROFILE_MODEL_P (current_cpu
))
1514 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1515 m32r_model_profile_insn (current_cpu
, abuf
);
1523 /* lock: lock $dr,@$sr. */
1526 SEM_FN_NAME (m32r
,lock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1528 #define FLD(f) abuf->fields.fmt_lock.f
1529 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1530 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1534 TRACE_RESULT (current_cpu
, "lock-0", 'x', CPU (h_lock
));
1535 * FLD (f_r1
) = GETMEMSI (current_cpu
, * FLD (f_r2
));
1536 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1539 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1541 #if WITH_PROFILE_MODEL_P
1542 if (PROFILE_MODEL_P (current_cpu
))
1544 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1545 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1546 m32r_model_profile_insn (current_cpu
, abuf
);
1554 /* machi: machi $src1,$src2. */
1557 SEM_FN_NAME (m32r
,machi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1559 #define FLD(f) abuf->fields.fmt_machi.f
1560 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1561 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1563 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (ADDDI (m32r_h_accum_get (current_cpu
), MULDI (EXTSIDI (ANDSI (* FLD (f_r1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16))))), 8), 8));
1564 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1566 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1568 #if WITH_PROFILE_MODEL_P
1569 if (PROFILE_MODEL_P (current_cpu
))
1571 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1572 m32r_model_profile_insn (current_cpu
, abuf
);
1580 /* maclo: maclo $src1,$src2. */
1583 SEM_FN_NAME (m32r
,maclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1585 #define FLD(f) abuf->fields.fmt_machi.f
1586 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1587 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1589 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (ADDDI (m32r_h_accum_get (current_cpu
), MULDI (EXTSIDI (SLLSI (* FLD (f_r1
), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
))))), 8), 8));
1590 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1592 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1594 #if WITH_PROFILE_MODEL_P
1595 if (PROFILE_MODEL_P (current_cpu
))
1597 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1598 m32r_model_profile_insn (current_cpu
, abuf
);
1606 /* macwhi: macwhi $src1,$src2. */
1609 SEM_FN_NAME (m32r
,macwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1611 #define FLD(f) abuf->fields.fmt_machi.f
1612 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1613 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1615 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (ADDDI (m32r_h_accum_get (current_cpu
), MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16))))), 8), 8));
1616 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1618 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1620 #if WITH_PROFILE_MODEL_P
1621 if (PROFILE_MODEL_P (current_cpu
))
1623 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1624 m32r_model_profile_insn (current_cpu
, abuf
);
1632 /* macwlo: macwlo $src1,$src2. */
1635 SEM_FN_NAME (m32r
,macwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1637 #define FLD(f) abuf->fields.fmt_machi.f
1638 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1639 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1641 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (ADDDI (m32r_h_accum_get (current_cpu
), MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
))))), 8), 8));
1642 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1644 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1646 #if WITH_PROFILE_MODEL_P
1647 if (PROFILE_MODEL_P (current_cpu
))
1649 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1650 m32r_model_profile_insn (current_cpu
, abuf
);
1658 /* mul: mul $dr,$sr. */
1661 SEM_FN_NAME (m32r
,mul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1663 #define FLD(f) abuf->fields.fmt_add.f
1664 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1665 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1667 * FLD (f_r1
) = MULSI (* FLD (f_r1
), * FLD (f_r2
));
1668 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1670 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1672 #if WITH_PROFILE_MODEL_P
1673 if (PROFILE_MODEL_P (current_cpu
))
1675 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1676 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1677 m32r_model_profile_insn (current_cpu
, abuf
);
1685 /* mulhi: mulhi $src1,$src2. */
1688 SEM_FN_NAME (m32r
,mulhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1690 #define FLD(f) abuf->fields.fmt_mulhi.f
1691 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1692 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1694 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (f_r1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16)))), 16), 16));
1695 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1697 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1699 #if WITH_PROFILE_MODEL_P
1700 if (PROFILE_MODEL_P (current_cpu
))
1702 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1703 m32r_model_profile_insn (current_cpu
, abuf
);
1711 /* mullo: mullo $src1,$src2. */
1714 SEM_FN_NAME (m32r
,mullo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1716 #define FLD(f) abuf->fields.fmt_mulhi.f
1717 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1718 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1720 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (f_r1
), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
)))), 16), 16));
1721 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1723 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1725 #if WITH_PROFILE_MODEL_P
1726 if (PROFILE_MODEL_P (current_cpu
))
1728 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1729 m32r_model_profile_insn (current_cpu
, abuf
);
1737 /* mulwhi: mulwhi $src1,$src2. */
1740 SEM_FN_NAME (m32r
,mulwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1742 #define FLD(f) abuf->fields.fmt_mulhi.f
1743 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1744 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1746 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16)))), 8), 8));
1747 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1749 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1751 #if WITH_PROFILE_MODEL_P
1752 if (PROFILE_MODEL_P (current_cpu
))
1754 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1755 m32r_model_profile_insn (current_cpu
, abuf
);
1763 /* mulwlo: mulwlo $src1,$src2. */
1766 SEM_FN_NAME (m32r
,mulwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1768 #define FLD(f) abuf->fields.fmt_mulhi.f
1769 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1770 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1772 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
)))), 8), 8));
1773 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1775 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1777 #if WITH_PROFILE_MODEL_P
1778 if (PROFILE_MODEL_P (current_cpu
))
1780 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1781 m32r_model_profile_insn (current_cpu
, abuf
);
1789 /* mv: mv $dr,$sr. */
1792 SEM_FN_NAME (m32r
,mv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1794 #define FLD(f) abuf->fields.fmt_mv.f
1795 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1796 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1798 * FLD (f_r1
) = * FLD (f_r2
);
1799 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1801 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1803 #if WITH_PROFILE_MODEL_P
1804 if (PROFILE_MODEL_P (current_cpu
))
1806 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1807 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1808 m32r_model_profile_insn (current_cpu
, abuf
);
1816 /* mvfachi: mvfachi $dr. */
1819 SEM_FN_NAME (m32r
,mvfachi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1821 #define FLD(f) abuf->fields.fmt_mvfachi.f
1822 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1823 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1825 * FLD (f_r1
) = TRUNCDISI (SRADI (m32r_h_accum_get (current_cpu
), 32));
1826 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1828 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1830 #if WITH_PROFILE_MODEL_P
1831 if (PROFILE_MODEL_P (current_cpu
))
1833 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1834 m32r_model_profile_insn (current_cpu
, abuf
);
1842 /* mvfaclo: mvfaclo $dr. */
1845 SEM_FN_NAME (m32r
,mvfaclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1847 #define FLD(f) abuf->fields.fmt_mvfachi.f
1848 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1849 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1851 * FLD (f_r1
) = TRUNCDISI (m32r_h_accum_get (current_cpu
));
1852 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1854 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1856 #if WITH_PROFILE_MODEL_P
1857 if (PROFILE_MODEL_P (current_cpu
))
1859 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1860 m32r_model_profile_insn (current_cpu
, abuf
);
1868 /* mvfacmi: mvfacmi $dr. */
1871 SEM_FN_NAME (m32r
,mvfacmi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1873 #define FLD(f) abuf->fields.fmt_mvfachi.f
1874 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1875 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1877 * FLD (f_r1
) = TRUNCDISI (SRADI (m32r_h_accum_get (current_cpu
), 16));
1878 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1880 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1882 #if WITH_PROFILE_MODEL_P
1883 if (PROFILE_MODEL_P (current_cpu
))
1885 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1886 m32r_model_profile_insn (current_cpu
, abuf
);
1894 /* mvfc: mvfc $dr,$scr. */
1897 SEM_FN_NAME (m32r
,mvfc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1899 #define FLD(f) abuf->fields.fmt_mvfc.f
1900 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1901 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1903 * FLD (f_r1
) = m32r_h_cr_get (current_cpu
, FLD (f_r2
));
1904 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1906 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1908 #if WITH_PROFILE_MODEL_P
1909 if (PROFILE_MODEL_P (current_cpu
))
1911 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1912 m32r_model_profile_insn (current_cpu
, abuf
);
1920 /* mvtachi: mvtachi $src1. */
1923 SEM_FN_NAME (m32r
,mvtachi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1925 #define FLD(f) abuf->fields.fmt_mvtachi.f
1926 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1927 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1929 m32r_h_accum_set (current_cpu
, ORDI (ANDDI (m32r_h_accum_get (current_cpu
), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (f_r1
)), 32)));
1930 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1932 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1934 #if WITH_PROFILE_MODEL_P
1935 if (PROFILE_MODEL_P (current_cpu
))
1937 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1938 m32r_model_profile_insn (current_cpu
, abuf
);
1946 /* mvtaclo: mvtaclo $src1. */
1949 SEM_FN_NAME (m32r
,mvtaclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1951 #define FLD(f) abuf->fields.fmt_mvtachi.f
1952 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1953 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1955 m32r_h_accum_set (current_cpu
, ORDI (ANDDI (m32r_h_accum_get (current_cpu
), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (f_r1
))));
1956 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
1958 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1960 #if WITH_PROFILE_MODEL_P
1961 if (PROFILE_MODEL_P (current_cpu
))
1963 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1964 m32r_model_profile_insn (current_cpu
, abuf
);
1972 /* mvtc: mvtc $sr,$dcr. */
1975 SEM_FN_NAME (m32r
,mvtc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1977 #define FLD(f) abuf->fields.fmt_mvtc.f
1978 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1979 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1981 m32r_h_cr_set (current_cpu
, FLD (f_r1
), * FLD (f_r2
));
1982 TRACE_RESULT (current_cpu
, "dcr", 'x', m32r_h_cr_get (current_cpu
, FLD (f_r1
)));
1984 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1986 #if WITH_PROFILE_MODEL_P
1987 if (PROFILE_MODEL_P (current_cpu
))
1989 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1990 m32r_model_profile_insn (current_cpu
, abuf
);
1998 /* neg: neg $dr,$sr. */
2001 SEM_FN_NAME (m32r
,neg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2003 #define FLD(f) abuf->fields.fmt_mv.f
2004 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2005 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2007 * FLD (f_r1
) = NEGSI (* FLD (f_r2
));
2008 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2010 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2012 #if WITH_PROFILE_MODEL_P
2013 if (PROFILE_MODEL_P (current_cpu
))
2015 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2016 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2017 m32r_model_profile_insn (current_cpu
, abuf
);
2028 SEM_FN_NAME (m32r
,nop
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2030 #define FLD(f) abuf->fields.fmt_nop.f
2031 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2032 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2034 PROFILE_COUNT_FILLNOPS (current_cpu
, abuf
->addr
);
2036 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2038 #if WITH_PROFILE_MODEL_P
2039 if (PROFILE_MODEL_P (current_cpu
))
2041 m32r_model_profile_insn (current_cpu
, abuf
);
2049 /* not: not $dr,$sr. */
2052 SEM_FN_NAME (m32r
,not) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2054 #define FLD(f) abuf->fields.fmt_mv.f
2055 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2056 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2058 * FLD (f_r1
) = INVSI (* FLD (f_r2
));
2059 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2061 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2063 #if WITH_PROFILE_MODEL_P
2064 if (PROFILE_MODEL_P (current_cpu
))
2066 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2067 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2068 m32r_model_profile_insn (current_cpu
, abuf
);
2079 SEM_FN_NAME (m32r
,rac
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2081 #define FLD(f) abuf->fields.fmt_rac.f
2082 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2083 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2087 tmp_tmp1
= SLLDI (m32r_h_accum_get (current_cpu
), 1);
2088 tmp_tmp1
= ADDDI (tmp_tmp1
, MAKEDI (0, 32768));
2089 m32r_h_accum_set (current_cpu
, (GTDI (tmp_tmp1
, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1
, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1
, MAKEDI (0xffffffff, 0xffff0000))));
2090 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
2093 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2095 #if WITH_PROFILE_MODEL_P
2096 if (PROFILE_MODEL_P (current_cpu
))
2098 m32r_model_profile_insn (current_cpu
, abuf
);
2109 SEM_FN_NAME (m32r
,rach
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2111 #define FLD(f) abuf->fields.fmt_rac.f
2112 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2113 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2117 tmp_tmp1
= ANDDI (m32r_h_accum_get (current_cpu
), MAKEDI (16777215, 0xffffffff));
2118 if (ANDIF (GEDI (tmp_tmp1
, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1
, MAKEDI (8388607, 0xffffffff)))) {
2119 tmp_tmp1
= MAKEDI (16383, 0x80000000);
2121 if (ANDIF (GEDI (tmp_tmp1
, MAKEDI (8388608, 0)), LEDI (tmp_tmp1
, MAKEDI (16760832, 0)))) {
2122 tmp_tmp1
= MAKEDI (16760832, 0);
2124 tmp_tmp1
= ANDDI (ADDDI (m32r_h_accum_get (current_cpu
), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
2127 tmp_tmp1
= SLLDI (tmp_tmp1
, 1);
2128 m32r_h_accum_set (current_cpu
, SRADI (SLLDI (tmp_tmp1
, 7), 7));
2129 TRACE_RESULT (current_cpu
, "accum", 'D', m32r_h_accum_get (current_cpu
));
2132 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2134 #if WITH_PROFILE_MODEL_P
2135 if (PROFILE_MODEL_P (current_cpu
))
2137 m32r_model_profile_insn (current_cpu
, abuf
);
2148 SEM_FN_NAME (m32r
,rte
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2150 #define FLD(f) abuf->fields.fmt_rte.f
2151 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2152 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2156 CPU (h_sm
) = CPU (h_bsm
);
2157 TRACE_RESULT (current_cpu
, "sm-0", 'x', CPU (h_sm
));
2158 CPU (h_ie
) = CPU (h_bie
);
2159 TRACE_RESULT (current_cpu
, "ie-0", 'x', CPU (h_ie
));
2160 CPU (h_cond
) = CPU (h_bcond
);
2161 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2162 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (CPU (h_bpc
), -4)));
2164 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
2167 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2169 #if WITH_PROFILE_MODEL_P
2170 if (PROFILE_MODEL_P (current_cpu
))
2172 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
2180 /* seth: seth $dr,$hash$hi16. */
2183 SEM_FN_NAME (m32r
,seth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2185 #define FLD(f) abuf->fields.fmt_seth.f
2186 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2187 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2189 * FLD (f_r1
) = SLLSI (FLD (f_hi16
), 16);
2190 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2192 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2194 #if WITH_PROFILE_MODEL_P
2195 if (PROFILE_MODEL_P (current_cpu
))
2197 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2198 m32r_model_profile_insn (current_cpu
, abuf
);
2206 /* sll: sll $dr,$sr. */
2209 SEM_FN_NAME (m32r
,sll
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2211 #define FLD(f) abuf->fields.fmt_add.f
2212 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2213 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2215 * FLD (f_r1
) = SLLSI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
2216 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2218 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2220 #if WITH_PROFILE_MODEL_P
2221 if (PROFILE_MODEL_P (current_cpu
))
2223 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2224 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2225 m32r_model_profile_insn (current_cpu
, abuf
);
2233 /* sll3: sll3 $dr,$sr,$simm16. */
2236 SEM_FN_NAME (m32r
,sll3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2238 #define FLD(f) abuf->fields.fmt_sll3.f
2239 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2240 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2242 * FLD (f_r1
) = SLLSI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
2243 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2245 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2247 #if WITH_PROFILE_MODEL_P
2248 if (PROFILE_MODEL_P (current_cpu
))
2250 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2251 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2252 m32r_model_profile_insn (current_cpu
, abuf
);
2260 /* slli: slli $dr,$uimm5. */
2263 SEM_FN_NAME (m32r
,slli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2265 #define FLD(f) abuf->fields.fmt_slli.f
2266 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2267 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2269 * FLD (f_r1
) = SLLSI (* FLD (f_r1
), FLD (f_uimm5
));
2270 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2272 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2274 #if WITH_PROFILE_MODEL_P
2275 if (PROFILE_MODEL_P (current_cpu
))
2277 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2278 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2279 m32r_model_profile_insn (current_cpu
, abuf
);
2287 /* sra: sra $dr,$sr. */
2290 SEM_FN_NAME (m32r
,sra
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2292 #define FLD(f) abuf->fields.fmt_add.f
2293 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2294 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2296 * FLD (f_r1
) = SRASI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
2297 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2299 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2301 #if WITH_PROFILE_MODEL_P
2302 if (PROFILE_MODEL_P (current_cpu
))
2304 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2305 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2306 m32r_model_profile_insn (current_cpu
, abuf
);
2314 /* sra3: sra3 $dr,$sr,$simm16. */
2317 SEM_FN_NAME (m32r
,sra3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2319 #define FLD(f) abuf->fields.fmt_sll3.f
2320 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2321 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2323 * FLD (f_r1
) = SRASI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
2324 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2326 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2328 #if WITH_PROFILE_MODEL_P
2329 if (PROFILE_MODEL_P (current_cpu
))
2331 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2332 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2333 m32r_model_profile_insn (current_cpu
, abuf
);
2341 /* srai: srai $dr,$uimm5. */
2344 SEM_FN_NAME (m32r
,srai
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2346 #define FLD(f) abuf->fields.fmt_slli.f
2347 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2348 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2350 * FLD (f_r1
) = SRASI (* FLD (f_r1
), FLD (f_uimm5
));
2351 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2353 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2355 #if WITH_PROFILE_MODEL_P
2356 if (PROFILE_MODEL_P (current_cpu
))
2358 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2359 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2360 m32r_model_profile_insn (current_cpu
, abuf
);
2368 /* srl: srl $dr,$sr. */
2371 SEM_FN_NAME (m32r
,srl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2373 #define FLD(f) abuf->fields.fmt_add.f
2374 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2375 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2377 * FLD (f_r1
) = SRLSI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
2378 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2380 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2382 #if WITH_PROFILE_MODEL_P
2383 if (PROFILE_MODEL_P (current_cpu
))
2385 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2386 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2387 m32r_model_profile_insn (current_cpu
, abuf
);
2395 /* srl3: srl3 $dr,$sr,$simm16. */
2398 SEM_FN_NAME (m32r
,srl3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2400 #define FLD(f) abuf->fields.fmt_sll3.f
2401 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2402 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2404 * FLD (f_r1
) = SRLSI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
2405 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2407 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2409 #if WITH_PROFILE_MODEL_P
2410 if (PROFILE_MODEL_P (current_cpu
))
2412 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2413 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2414 m32r_model_profile_insn (current_cpu
, abuf
);
2422 /* srli: srli $dr,$uimm5. */
2425 SEM_FN_NAME (m32r
,srli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2427 #define FLD(f) abuf->fields.fmt_slli.f
2428 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2429 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2431 * FLD (f_r1
) = SRLSI (* FLD (f_r1
), FLD (f_uimm5
));
2432 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2434 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2436 #if WITH_PROFILE_MODEL_P
2437 if (PROFILE_MODEL_P (current_cpu
))
2439 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2440 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2441 m32r_model_profile_insn (current_cpu
, abuf
);
2449 /* st: st $src1,@$src2. */
2452 SEM_FN_NAME (m32r
,st
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2454 #define FLD(f) abuf->fields.fmt_st.f
2455 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2456 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2458 SETMEMSI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
2459 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, * FLD (f_r2
)));
2461 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2463 #if WITH_PROFILE_MODEL_P
2464 if (PROFILE_MODEL_P (current_cpu
))
2466 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2467 m32r_model_profile_insn (current_cpu
, abuf
);
2475 /* st-d: st $src1,@($slo16,$src2). */
2478 SEM_FN_NAME (m32r
,st_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2480 #define FLD(f) abuf->fields.fmt_st_d.f
2481 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2482 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2484 SETMEMSI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), * FLD (f_r1
));
2485 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
2487 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2489 #if WITH_PROFILE_MODEL_P
2490 if (PROFILE_MODEL_P (current_cpu
))
2492 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2493 m32r_model_profile_insn (current_cpu
, abuf
);
2501 /* stb: stb $src1,@$src2. */
2504 SEM_FN_NAME (m32r
,stb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2506 #define FLD(f) abuf->fields.fmt_stb.f
2507 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2508 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2510 SETMEMQI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
2511 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMQI (current_cpu
, * FLD (f_r2
)));
2513 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2515 #if WITH_PROFILE_MODEL_P
2516 if (PROFILE_MODEL_P (current_cpu
))
2518 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2519 m32r_model_profile_insn (current_cpu
, abuf
);
2527 /* stb-d: stb $src1,@($slo16,$src2). */
2530 SEM_FN_NAME (m32r
,stb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2532 #define FLD(f) abuf->fields.fmt_stb_d.f
2533 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2534 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2536 SETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), * FLD (f_r1
));
2537 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
2539 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2541 #if WITH_PROFILE_MODEL_P
2542 if (PROFILE_MODEL_P (current_cpu
))
2544 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2545 m32r_model_profile_insn (current_cpu
, abuf
);
2553 /* sth: sth $src1,@$src2. */
2556 SEM_FN_NAME (m32r
,sth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2558 #define FLD(f) abuf->fields.fmt_sth.f
2559 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2560 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2562 SETMEMHI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
2563 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMHI (current_cpu
, * FLD (f_r2
)));
2565 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2567 #if WITH_PROFILE_MODEL_P
2568 if (PROFILE_MODEL_P (current_cpu
))
2570 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2571 m32r_model_profile_insn (current_cpu
, abuf
);
2579 /* sth-d: sth $src1,@($slo16,$src2). */
2582 SEM_FN_NAME (m32r
,sth_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2584 #define FLD(f) abuf->fields.fmt_sth_d.f
2585 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2586 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2588 SETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), * FLD (f_r1
));
2589 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
2591 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2593 #if WITH_PROFILE_MODEL_P
2594 if (PROFILE_MODEL_P (current_cpu
))
2596 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2597 m32r_model_profile_insn (current_cpu
, abuf
);
2605 /* st-plus: st $src1,@+$src2. */
2608 SEM_FN_NAME (m32r
,st_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2610 #define FLD(f) abuf->fields.fmt_st_plus.f
2611 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2612 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2616 tmp_new_src2
= ADDSI (* FLD (f_r2
), 4);
2617 SETMEMSI (current_cpu
, tmp_new_src2
, * FLD (f_r1
));
2618 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, tmp_new_src2
));
2619 * FLD (f_r2
) = tmp_new_src2
;
2620 TRACE_RESULT (current_cpu
, "src2", 'x', * FLD (f_r2
));
2623 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2625 #if WITH_PROFILE_MODEL_P
2626 if (PROFILE_MODEL_P (current_cpu
))
2628 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2629 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2630 m32r_model_profile_insn (current_cpu
, abuf
);
2638 /* st-minus: st $src1,@-$src2. */
2641 SEM_FN_NAME (m32r
,st_minus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2643 #define FLD(f) abuf->fields.fmt_st_plus.f
2644 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2645 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2649 tmp_new_src2
= SUBSI (* FLD (f_r2
), 4);
2650 SETMEMSI (current_cpu
, tmp_new_src2
, * FLD (f_r1
));
2651 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, tmp_new_src2
));
2652 * FLD (f_r2
) = tmp_new_src2
;
2653 TRACE_RESULT (current_cpu
, "src2", 'x', * FLD (f_r2
));
2656 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2658 #if WITH_PROFILE_MODEL_P
2659 if (PROFILE_MODEL_P (current_cpu
))
2661 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2662 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2663 m32r_model_profile_insn (current_cpu
, abuf
);
2671 /* sub: sub $dr,$sr. */
2674 SEM_FN_NAME (m32r
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2676 #define FLD(f) abuf->fields.fmt_add.f
2677 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2678 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2680 * FLD (f_r1
) = SUBSI (* FLD (f_r1
), * FLD (f_r2
));
2681 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2683 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2685 #if WITH_PROFILE_MODEL_P
2686 if (PROFILE_MODEL_P (current_cpu
))
2688 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2689 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2690 m32r_model_profile_insn (current_cpu
, abuf
);
2698 /* subv: subv $dr,$sr. */
2701 SEM_FN_NAME (m32r
,subv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2703 #define FLD(f) abuf->fields.fmt_addv.f
2704 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2705 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2709 temp0
= SUBSI (* FLD (f_r1
), * FLD (f_r2
));
2710 temp1
= SUBOFSI (* FLD (f_r1
), * FLD (f_r2
), 0);
2711 * FLD (f_r1
) = temp0
;
2712 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2713 CPU (h_cond
) = temp1
;
2714 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2717 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2719 #if WITH_PROFILE_MODEL_P
2720 if (PROFILE_MODEL_P (current_cpu
))
2722 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2723 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2724 m32r_model_profile_insn (current_cpu
, abuf
);
2732 /* subx: subx $dr,$sr. */
2735 SEM_FN_NAME (m32r
,subx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2737 #define FLD(f) abuf->fields.fmt_addx.f
2738 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2739 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2743 temp0
= SUBCSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
2744 temp1
= SUBCFSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
2745 * FLD (f_r1
) = temp0
;
2746 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2747 CPU (h_cond
) = temp1
;
2748 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2751 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2753 #if WITH_PROFILE_MODEL_P
2754 if (PROFILE_MODEL_P (current_cpu
))
2756 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2757 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2758 m32r_model_profile_insn (current_cpu
, abuf
);
2766 /* trap: trap $uimm4. */
2769 SEM_FN_NAME (m32r
,trap
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2771 #define FLD(f) abuf->fields.fmt_trap.f
2772 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2773 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2777 m32r_h_cr_set (current_cpu
, 6, ADDSI (CPU (h_pc
), 4));
2778 TRACE_RESULT (current_cpu
, "cr-6", 'x', m32r_h_cr_get (current_cpu
, 6));
2779 m32r_h_cr_set (current_cpu
, 0, ANDSI (SLLSI (m32r_h_cr_get (current_cpu
, 0), 8), 65408));
2780 TRACE_RESULT (current_cpu
, "cr-0", 'x', m32r_h_cr_get (current_cpu
, 0));
2781 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, a_m32r_trap (current_cpu
, FLD (f_uimm4
))));
2783 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
2786 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2788 #if WITH_PROFILE_MODEL_P
2789 if (PROFILE_MODEL_P (current_cpu
))
2791 m32r_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
2799 /* unlock: unlock $src1,@$src2. */
2802 SEM_FN_NAME (m32r
,unlock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2804 #define FLD(f) abuf->fields.fmt_unlock.f
2805 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2806 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2810 SETMEMSI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
2811 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, * FLD (f_r2
)));
2814 TRACE_RESULT (current_cpu
, "lock-0", 'x', CPU (h_lock
));
2817 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2819 #if WITH_PROFILE_MODEL_P
2820 if (PROFILE_MODEL_P (current_cpu
))
2822 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2823 m32r_model_profile_insn (current_cpu
, abuf
);
2832 SEM_FN_NAME (m32r
,illegal
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2834 sim_engine_illegal_insn (current_cpu
, NULL_CIA
/*FIXME*/);
2838 #endif /* WANT_CPU */