1 /* Simulator instruction semantics for m32r.
3 Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
5 This file is part of the GNU Simulators.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
31 #if ! defined (SCACHE_P) || (defined (SCACHE_P) && WITH_SCACHE)
34 #define GET_ATTR(cpu, num, attr) CGEN_INSN_ATTR (abuf->opcode, CGEN_INSN_##attr)
36 /* Perform add: add $dr,$sr. */
38 SEM_FN_NAME (m32r
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
40 #define FLD(f) abuf->fields.fmt_0_add.f
41 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
42 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
43 * FLD (f_r1
) = ADDSI (* FLD (f_r1
), * FLD (f_r2
));
44 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
45 #if WITH_PROFILE_MODEL_P
46 if (PROFILE_MODEL_P (current_cpu
))
48 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
49 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
50 model_profile_insn (current_cpu
, abuf
);
57 /* Perform add3: add3 $dr,$sr,$slo16. */
59 SEM_FN_NAME (m32r
,add3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
61 #define FLD(f) abuf->fields.fmt_1_add3.f
62 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
63 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
64 * FLD (f_r1
) = ADDSI (* FLD (f_r2
), FLD (f_simm16
));
65 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
66 #if WITH_PROFILE_MODEL_P
67 if (PROFILE_MODEL_P (current_cpu
))
69 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
70 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
71 model_profile_insn (current_cpu
, abuf
);
78 /* Perform and: and $dr,$sr. */
80 SEM_FN_NAME (m32r
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
82 #define FLD(f) abuf->fields.fmt_0_add.f
83 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
84 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
85 * FLD (f_r1
) = ANDSI (* FLD (f_r1
), * FLD (f_r2
));
86 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
87 #if WITH_PROFILE_MODEL_P
88 if (PROFILE_MODEL_P (current_cpu
))
90 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
91 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
92 model_profile_insn (current_cpu
, abuf
);
99 /* Perform and3: and3 $dr,$sr,$uimm16. */
101 SEM_FN_NAME (m32r
,and3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
103 #define FLD(f) abuf->fields.fmt_2_and3.f
104 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
105 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
106 * FLD (f_r1
) = ANDSI (* FLD (f_r2
), FLD (f_uimm16
));
107 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
108 #if WITH_PROFILE_MODEL_P
109 if (PROFILE_MODEL_P (current_cpu
))
111 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
112 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
113 model_profile_insn (current_cpu
, abuf
);
120 /* Perform or: or $dr,$sr. */
122 SEM_FN_NAME (m32r
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
124 #define FLD(f) abuf->fields.fmt_0_add.f
125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
126 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
127 * FLD (f_r1
) = ORSI (* FLD (f_r1
), * FLD (f_r2
));
128 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
129 #if WITH_PROFILE_MODEL_P
130 if (PROFILE_MODEL_P (current_cpu
))
132 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
133 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
134 model_profile_insn (current_cpu
, abuf
);
141 /* Perform or3: or3 $dr,$sr,$ulo16. */
143 SEM_FN_NAME (m32r
,or3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
145 #define FLD(f) abuf->fields.fmt_3_or3.f
146 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
147 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
148 * FLD (f_r1
) = ORSI (* FLD (f_r2
), FLD (f_uimm16
));
149 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
150 #if WITH_PROFILE_MODEL_P
151 if (PROFILE_MODEL_P (current_cpu
))
153 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
154 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
155 model_profile_insn (current_cpu
, abuf
);
162 /* Perform xor: xor $dr,$sr. */
164 SEM_FN_NAME (m32r
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
166 #define FLD(f) abuf->fields.fmt_0_add.f
167 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
168 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
169 * FLD (f_r1
) = XORSI (* FLD (f_r1
), * FLD (f_r2
));
170 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
171 #if WITH_PROFILE_MODEL_P
172 if (PROFILE_MODEL_P (current_cpu
))
174 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
175 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
176 model_profile_insn (current_cpu
, abuf
);
183 /* Perform xor3: xor3 $dr,$sr,$uimm16. */
185 SEM_FN_NAME (m32r
,xor3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
187 #define FLD(f) abuf->fields.fmt_2_and3.f
188 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
189 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
190 * FLD (f_r1
) = XORSI (* FLD (f_r2
), FLD (f_uimm16
));
191 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
192 #if WITH_PROFILE_MODEL_P
193 if (PROFILE_MODEL_P (current_cpu
))
195 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
196 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
197 model_profile_insn (current_cpu
, abuf
);
204 /* Perform addi: addi $dr,$simm8. */
206 SEM_FN_NAME (m32r
,addi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
208 #define FLD(f) abuf->fields.fmt_4_addi.f
209 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
210 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
211 * FLD (f_r1
) = ADDSI (* FLD (f_r1
), FLD (f_simm8
));
212 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
213 #if WITH_PROFILE_MODEL_P
214 if (PROFILE_MODEL_P (current_cpu
))
216 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
217 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
218 model_profile_insn (current_cpu
, abuf
);
225 /* Perform addv: addv $dr,$sr. */
227 SEM_FN_NAME (m32r
,addv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
229 #define FLD(f) abuf->fields.fmt_0_add.f
230 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
231 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
234 temp0
= ADDSI (* FLD (f_r1
), * FLD (f_r2
));
235 temp1
= ADDOFSI (* FLD (f_r1
), * FLD (f_r2
), 0);
236 * FLD (f_r1
) = temp0
;
237 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
238 CPU (h_cond
) = temp1
;
239 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
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 model_profile_insn (current_cpu
, abuf
);
253 /* Perform addv3: addv3 $dr,$sr,$simm16. */
255 SEM_FN_NAME (m32r
,addv3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
257 #define FLD(f) abuf->fields.fmt_5_addv3.f
258 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
259 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
262 temp0
= ADDSI (* FLD (f_r2
), FLD (f_simm16
));
263 temp1
= ADDOFSI (* FLD (f_r2
), FLD (f_simm16
), 0);
264 * FLD (f_r1
) = temp0
;
265 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
266 CPU (h_cond
) = temp1
;
267 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
269 #if WITH_PROFILE_MODEL_P
270 if (PROFILE_MODEL_P (current_cpu
))
272 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
273 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
274 model_profile_insn (current_cpu
, abuf
);
281 /* Perform addx: addx $dr,$sr. */
283 SEM_FN_NAME (m32r
,addx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
285 #define FLD(f) abuf->fields.fmt_6_addx.f
286 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
287 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
290 temp0
= ADDCSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
291 temp1
= ADDCFSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
292 * FLD (f_r1
) = temp0
;
293 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
294 CPU (h_cond
) = temp1
;
295 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
297 #if WITH_PROFILE_MODEL_P
298 if (PROFILE_MODEL_P (current_cpu
))
300 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
301 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
302 model_profile_insn (current_cpu
, abuf
);
309 /* Perform bc8: bc $disp8. */
311 SEM_FN_NAME (m32r
,bc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
313 #define FLD(f) abuf->fields.fmt_7_bc8.f
314 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
315 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
318 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp8
)));
321 #if WITH_PROFILE_MODEL_P
322 if (PROFILE_MODEL_P (current_cpu
))
324 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
331 /* Perform bc24: bc $disp24. */
333 SEM_FN_NAME (m32r
,bc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
335 #define FLD(f) abuf->fields.fmt_8_bc24.f
336 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
337 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
340 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp24
)));
343 #if WITH_PROFILE_MODEL_P
344 if (PROFILE_MODEL_P (current_cpu
))
346 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
353 /* Perform beq: beq $src1,$src2,$disp16. */
355 SEM_FN_NAME (m32r
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
357 #define FLD(f) abuf->fields.fmt_9_beq.f
358 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
359 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
361 if (EQSI (* FLD (f_r1
), * FLD (f_r2
))) {
362 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
365 #if WITH_PROFILE_MODEL_P
366 if (PROFILE_MODEL_P (current_cpu
))
368 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
369 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
376 /* Perform beqz: beqz $src2,$disp16. */
378 SEM_FN_NAME (m32r
,beqz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
380 #define FLD(f) abuf->fields.fmt_10_beqz.f
381 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
382 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
384 if (EQSI (* FLD (f_r2
), 0)) {
385 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
388 #if WITH_PROFILE_MODEL_P
389 if (PROFILE_MODEL_P (current_cpu
))
391 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
392 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
399 /* Perform bgez: bgez $src2,$disp16. */
401 SEM_FN_NAME (m32r
,bgez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
403 #define FLD(f) abuf->fields.fmt_10_beqz.f
404 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
405 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
407 if (GESI (* FLD (f_r2
), 0)) {
408 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
411 #if WITH_PROFILE_MODEL_P
412 if (PROFILE_MODEL_P (current_cpu
))
414 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
415 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
422 /* Perform bgtz: bgtz $src2,$disp16. */
424 SEM_FN_NAME (m32r
,bgtz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
426 #define FLD(f) abuf->fields.fmt_10_beqz.f
427 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
428 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
430 if (GTSI (* FLD (f_r2
), 0)) {
431 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
434 #if WITH_PROFILE_MODEL_P
435 if (PROFILE_MODEL_P (current_cpu
))
437 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
438 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
445 /* Perform blez: blez $src2,$disp16. */
447 SEM_FN_NAME (m32r
,blez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
449 #define FLD(f) abuf->fields.fmt_10_beqz.f
450 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
451 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
453 if (LESI (* FLD (f_r2
), 0)) {
454 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
457 #if WITH_PROFILE_MODEL_P
458 if (PROFILE_MODEL_P (current_cpu
))
460 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
461 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
468 /* Perform bltz: bltz $src2,$disp16. */
470 SEM_FN_NAME (m32r
,bltz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
472 #define FLD(f) abuf->fields.fmt_10_beqz.f
473 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
474 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
476 if (LTSI (* FLD (f_r2
), 0)) {
477 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
480 #if WITH_PROFILE_MODEL_P
481 if (PROFILE_MODEL_P (current_cpu
))
483 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
484 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
491 /* Perform bnez: bnez $src2,$disp16. */
493 SEM_FN_NAME (m32r
,bnez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
495 #define FLD(f) abuf->fields.fmt_10_beqz.f
496 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
497 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
499 if (NESI (* FLD (f_r2
), 0)) {
500 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
503 #if WITH_PROFILE_MODEL_P
504 if (PROFILE_MODEL_P (current_cpu
))
506 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
507 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
514 /* Perform bl8: bl $disp8. */
516 SEM_FN_NAME (m32r
,bl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
518 #define FLD(f) abuf->fields.fmt_11_bl8.f
519 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
520 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
523 CPU (h_gr
[14]) = ADDSI (ANDSI (CPU (h_pc
), -4), 4);
524 TRACE_RESULT (current_cpu
, "h-gr", 'x', CPU (h_gr
[14]));
525 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp8
)));
528 #if WITH_PROFILE_MODEL_P
529 if (PROFILE_MODEL_P (current_cpu
))
531 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
538 /* Perform bl24: bl $disp24. */
540 SEM_FN_NAME (m32r
,bl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
542 #define FLD(f) abuf->fields.fmt_12_bl24.f
543 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
544 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
547 CPU (h_gr
[14]) = ADDSI (CPU (h_pc
), 4);
548 TRACE_RESULT (current_cpu
, "h-gr", 'x', CPU (h_gr
[14]));
549 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp24
)));
552 #if WITH_PROFILE_MODEL_P
553 if (PROFILE_MODEL_P (current_cpu
))
555 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
562 /* Perform bnc8: bnc $disp8. */
564 SEM_FN_NAME (m32r
,bnc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
566 #define FLD(f) abuf->fields.fmt_7_bc8.f
567 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
568 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
570 if (NOTBI (CPU (h_cond
))) {
571 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp8
)));
574 #if WITH_PROFILE_MODEL_P
575 if (PROFILE_MODEL_P (current_cpu
))
577 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
584 /* Perform bnc24: bnc $disp24. */
586 SEM_FN_NAME (m32r
,bnc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
588 #define FLD(f) abuf->fields.fmt_8_bc24.f
589 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
590 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
592 if (NOTBI (CPU (h_cond
))) {
593 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp24
)));
596 #if WITH_PROFILE_MODEL_P
597 if (PROFILE_MODEL_P (current_cpu
))
599 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
606 /* Perform bne: bne $src1,$src2,$disp16. */
608 SEM_FN_NAME (m32r
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
610 #define FLD(f) abuf->fields.fmt_9_beq.f
611 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
612 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
614 if (NESI (* FLD (f_r1
), * FLD (f_r2
))) {
615 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp16
)));
618 #if WITH_PROFILE_MODEL_P
619 if (PROFILE_MODEL_P (current_cpu
))
621 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
622 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
629 /* Perform bra8: bra $disp8. */
631 SEM_FN_NAME (m32r
,bra8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
633 #define FLD(f) abuf->fields.fmt_13_bra8.f
634 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
635 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
637 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp8
)));
639 #if WITH_PROFILE_MODEL_P
640 if (PROFILE_MODEL_P (current_cpu
))
642 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
649 /* Perform bra24: bra $disp24. */
651 SEM_FN_NAME (m32r
,bra24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
653 #define FLD(f) abuf->fields.fmt_14_bra24.f
654 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
655 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
657 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, FLD (f_disp24
)));
659 #if WITH_PROFILE_MODEL_P
660 if (PROFILE_MODEL_P (current_cpu
))
662 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
669 /* Perform cmp: cmp $src1,$src2. */
671 SEM_FN_NAME (m32r
,cmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
673 #define FLD(f) abuf->fields.fmt_15_cmp.f
674 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
675 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
676 CPU (h_cond
) = LTSI (* FLD (f_r1
), * FLD (f_r2
));
677 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
678 #if WITH_PROFILE_MODEL_P
679 if (PROFILE_MODEL_P (current_cpu
))
681 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
682 model_profile_insn (current_cpu
, abuf
);
689 /* Perform cmpi: cmpi $src2,$simm16. */
691 SEM_FN_NAME (m32r
,cmpi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
693 #define FLD(f) abuf->fields.fmt_16_cmpi.f
694 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
695 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
696 CPU (h_cond
) = LTSI (* FLD (f_r2
), FLD (f_simm16
));
697 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
698 #if WITH_PROFILE_MODEL_P
699 if (PROFILE_MODEL_P (current_cpu
))
701 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
702 model_profile_insn (current_cpu
, abuf
);
709 /* Perform cmpu: cmpu $src1,$src2. */
711 SEM_FN_NAME (m32r
,cmpu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
713 #define FLD(f) abuf->fields.fmt_15_cmp.f
714 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
715 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
716 CPU (h_cond
) = LTUSI (* FLD (f_r1
), * FLD (f_r2
));
717 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
718 #if WITH_PROFILE_MODEL_P
719 if (PROFILE_MODEL_P (current_cpu
))
721 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
722 model_profile_insn (current_cpu
, abuf
);
729 /* Perform cmpui: cmpui $src2,$uimm16. */
731 SEM_FN_NAME (m32r
,cmpui
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
733 #define FLD(f) abuf->fields.fmt_17_cmpui.f
734 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
735 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
736 CPU (h_cond
) = LTUSI (* FLD (f_r2
), FLD (f_uimm16
));
737 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
738 #if WITH_PROFILE_MODEL_P
739 if (PROFILE_MODEL_P (current_cpu
))
741 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
742 model_profile_insn (current_cpu
, abuf
);
749 /* Perform div: div $dr,$sr. */
751 SEM_FN_NAME (m32r
,div
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
753 #define FLD(f) abuf->fields.fmt_18_div.f
754 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
755 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
756 if (NESI (* FLD (f_r2
), 0)) {
757 * FLD (f_r1
) = DIVSI (* FLD (f_r1
), * FLD (f_r2
));
758 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
760 #if WITH_PROFILE_MODEL_P
761 if (PROFILE_MODEL_P (current_cpu
))
763 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
764 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
765 model_profile_insn (current_cpu
, abuf
);
772 /* Perform divu: divu $dr,$sr. */
774 SEM_FN_NAME (m32r
,divu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
776 #define FLD(f) abuf->fields.fmt_18_div.f
777 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
778 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
779 if (NESI (* FLD (f_r2
), 0)) {
780 * FLD (f_r1
) = UDIVSI (* FLD (f_r1
), * FLD (f_r2
));
781 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
783 #if WITH_PROFILE_MODEL_P
784 if (PROFILE_MODEL_P (current_cpu
))
786 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
787 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
788 model_profile_insn (current_cpu
, abuf
);
795 /* Perform rem: rem $dr,$sr. */
797 SEM_FN_NAME (m32r
,rem
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
799 #define FLD(f) abuf->fields.fmt_18_div.f
800 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
801 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
802 if (NESI (* FLD (f_r2
), 0)) {
803 * FLD (f_r1
) = MODSI (* FLD (f_r1
), * FLD (f_r2
));
804 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
806 #if WITH_PROFILE_MODEL_P
807 if (PROFILE_MODEL_P (current_cpu
))
809 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
810 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
811 model_profile_insn (current_cpu
, abuf
);
818 /* Perform remu: remu $dr,$sr. */
820 SEM_FN_NAME (m32r
,remu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
822 #define FLD(f) abuf->fields.fmt_18_div.f
823 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
824 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
825 if (NESI (* FLD (f_r2
), 0)) {
826 * FLD (f_r1
) = UMODSI (* FLD (f_r1
), * FLD (f_r2
));
827 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
829 #if WITH_PROFILE_MODEL_P
830 if (PROFILE_MODEL_P (current_cpu
))
832 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
833 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
834 model_profile_insn (current_cpu
, abuf
);
841 /* Perform jl: jl $sr. */
843 SEM_FN_NAME (m32r
,jl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
845 #define FLD(f) abuf->fields.fmt_19_jl.f
846 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
847 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
851 temp0
= ADDSI (ANDSI (CPU (h_pc
), -4), 4);
852 temp1
= * FLD (f_r2
);
853 CPU (h_gr
[14]) = temp0
;
854 TRACE_RESULT (current_cpu
, "h-gr", 'x', CPU (h_gr
[14]));
855 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, temp1
));
858 #if WITH_PROFILE_MODEL_P
859 if (PROFILE_MODEL_P (current_cpu
))
861 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
862 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
869 /* Perform jmp: jmp $sr. */
871 SEM_FN_NAME (m32r
,jmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
873 #define FLD(f) abuf->fields.fmt_20_jmp.f
874 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
875 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
877 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, * FLD (f_r2
)));
879 #if WITH_PROFILE_MODEL_P
880 if (PROFILE_MODEL_P (current_cpu
))
882 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
883 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
890 /* Perform ld: ld $dr,@$sr. */
892 SEM_FN_NAME (m32r
,ld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
894 #define FLD(f) abuf->fields.fmt_21_ld.f
895 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
896 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
897 * FLD (f_r1
) = GETMEMSI (current_cpu
, * FLD (f_r2
));
898 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
899 #if WITH_PROFILE_MODEL_P
900 if (PROFILE_MODEL_P (current_cpu
))
902 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
903 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
904 model_profile_insn (current_cpu
, abuf
);
911 /* Perform ld-d: ld $dr,@($slo16,$sr). */
913 SEM_FN_NAME (m32r
,ld_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
915 #define FLD(f) abuf->fields.fmt_22_ld_d.f
916 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
917 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
918 * FLD (f_r1
) = GETMEMSI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)));
919 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
920 #if WITH_PROFILE_MODEL_P
921 if (PROFILE_MODEL_P (current_cpu
))
923 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
924 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
925 model_profile_insn (current_cpu
, abuf
);
932 /* Perform ldb: ldb $dr,@$sr. */
934 SEM_FN_NAME (m32r
,ldb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
936 #define FLD(f) abuf->fields.fmt_23_ldb.f
937 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
938 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
939 * FLD (f_r1
) = EXTQISI (GETMEMQI (current_cpu
, * FLD (f_r2
)));
940 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
941 #if WITH_PROFILE_MODEL_P
942 if (PROFILE_MODEL_P (current_cpu
))
944 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
945 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
946 model_profile_insn (current_cpu
, abuf
);
953 /* Perform ldb-d: ldb $dr,@($slo16,$sr). */
955 SEM_FN_NAME (m32r
,ldb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
957 #define FLD(f) abuf->fields.fmt_24_ldb_d.f
958 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
959 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
960 * FLD (f_r1
) = EXTQISI (GETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
961 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
962 #if WITH_PROFILE_MODEL_P
963 if (PROFILE_MODEL_P (current_cpu
))
965 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
966 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
967 model_profile_insn (current_cpu
, abuf
);
974 /* Perform ldh: ldh $dr,@$sr. */
976 SEM_FN_NAME (m32r
,ldh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
978 #define FLD(f) abuf->fields.fmt_25_ldh.f
979 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
980 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
981 * FLD (f_r1
) = EXTHISI (GETMEMHI (current_cpu
, * FLD (f_r2
)));
982 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
983 #if WITH_PROFILE_MODEL_P
984 if (PROFILE_MODEL_P (current_cpu
))
986 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
987 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
988 model_profile_insn (current_cpu
, abuf
);
995 /* Perform ldh-d: ldh $dr,@($slo16,$sr). */
997 SEM_FN_NAME (m32r
,ldh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
999 #define FLD(f) abuf->fields.fmt_26_ldh_d.f
1000 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1001 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1002 * FLD (f_r1
) = EXTHISI (GETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1003 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1004 #if WITH_PROFILE_MODEL_P
1005 if (PROFILE_MODEL_P (current_cpu
))
1007 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1008 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1009 model_profile_insn (current_cpu
, abuf
);
1016 /* Perform ldub: ldub $dr,@$sr. */
1018 SEM_FN_NAME (m32r
,ldub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1020 #define FLD(f) abuf->fields.fmt_23_ldb.f
1021 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1022 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1023 * FLD (f_r1
) = ZEXTQISI (GETMEMQI (current_cpu
, * FLD (f_r2
)));
1024 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1025 #if WITH_PROFILE_MODEL_P
1026 if (PROFILE_MODEL_P (current_cpu
))
1028 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1029 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1030 model_profile_insn (current_cpu
, abuf
);
1037 /* Perform ldub-d: ldub $dr,@($slo16,$sr). */
1039 SEM_FN_NAME (m32r
,ldub_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1041 #define FLD(f) abuf->fields.fmt_24_ldb_d.f
1042 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1043 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1044 * FLD (f_r1
) = ZEXTQISI (GETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1045 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1046 #if WITH_PROFILE_MODEL_P
1047 if (PROFILE_MODEL_P (current_cpu
))
1049 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1050 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1051 model_profile_insn (current_cpu
, abuf
);
1058 /* Perform lduh: lduh $dr,@$sr. */
1060 SEM_FN_NAME (m32r
,lduh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1062 #define FLD(f) abuf->fields.fmt_25_ldh.f
1063 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1064 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1065 * FLD (f_r1
) = ZEXTHISI (GETMEMHI (current_cpu
, * FLD (f_r2
)));
1066 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1067 #if WITH_PROFILE_MODEL_P
1068 if (PROFILE_MODEL_P (current_cpu
))
1070 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1071 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1072 model_profile_insn (current_cpu
, abuf
);
1079 /* Perform lduh-d: lduh $dr,@($slo16,$sr). */
1081 SEM_FN_NAME (m32r
,lduh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1083 #define FLD(f) abuf->fields.fmt_26_ldh_d.f
1084 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1085 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1086 * FLD (f_r1
) = ZEXTHISI (GETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1087 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1088 #if WITH_PROFILE_MODEL_P
1089 if (PROFILE_MODEL_P (current_cpu
))
1091 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1092 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1093 model_profile_insn (current_cpu
, abuf
);
1100 /* Perform ld-plus: ld $dr,@$sr+. */
1102 SEM_FN_NAME (m32r
,ld_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1104 #define FLD(f) abuf->fields.fmt_21_ld.f
1105 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1106 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1109 temp0
= GETMEMSI (current_cpu
, * FLD (f_r2
));
1110 temp1
= ADDSI (* FLD (f_r2
), 4);
1111 * FLD (f_r1
) = temp0
;
1112 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1113 * FLD (f_r2
) = temp1
;
1114 TRACE_RESULT (current_cpu
, "sr", 'x', * FLD (f_r2
));
1116 #if WITH_PROFILE_MODEL_P
1117 if (PROFILE_MODEL_P (current_cpu
))
1119 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1120 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1121 model_profile_insn (current_cpu
, abuf
);
1128 /* Perform ld24: ld24 $dr,$uimm24. */
1130 SEM_FN_NAME (m32r
,ld24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1132 #define FLD(f) abuf->fields.fmt_27_ld24.f
1133 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1134 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1135 * FLD (f_r1
) = FLD (f_uimm24
);
1136 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1137 #if WITH_PROFILE_MODEL_P
1138 if (PROFILE_MODEL_P (current_cpu
))
1140 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1141 model_profile_insn (current_cpu
, abuf
);
1148 /* Perform ldi8: ldi $dr,$simm8. */
1150 SEM_FN_NAME (m32r
,ldi8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1152 #define FLD(f) abuf->fields.fmt_28_ldi8.f
1153 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1154 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1155 * FLD (f_r1
) = FLD (f_simm8
);
1156 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1157 #if WITH_PROFILE_MODEL_P
1158 if (PROFILE_MODEL_P (current_cpu
))
1160 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1161 model_profile_insn (current_cpu
, abuf
);
1168 /* Perform ldi16: ldi $dr,$slo16. */
1170 SEM_FN_NAME (m32r
,ldi16
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1172 #define FLD(f) abuf->fields.fmt_29_ldi16.f
1173 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1174 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1175 * FLD (f_r1
) = FLD (f_simm16
);
1176 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1177 #if WITH_PROFILE_MODEL_P
1178 if (PROFILE_MODEL_P (current_cpu
))
1180 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1181 model_profile_insn (current_cpu
, abuf
);
1188 /* Perform lock: lock $dr,@$sr. */
1190 SEM_FN_NAME (m32r
,lock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1192 #define FLD(f) abuf->fields.fmt_0_add.f
1193 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1194 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1195 do_lock (current_cpu
, * FLD (f_r1
), * FLD (f_r2
));
1196 #if WITH_PROFILE_MODEL_P
1197 if (PROFILE_MODEL_P (current_cpu
))
1199 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1200 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1201 model_profile_insn (current_cpu
, abuf
);
1208 /* Perform machi: machi $src1,$src2. */
1210 SEM_FN_NAME (m32r
,machi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1212 #define FLD(f) abuf->fields.fmt_30_machi.f
1213 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1214 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1215 CPU (h_accum
) = SRADI (SLLDI (ADDDI (CPU (h_accum
), MULDI (EXTSIDI (ANDSI (* FLD (f_r1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16))))), 8), 8);
1216 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1217 #if WITH_PROFILE_MODEL_P
1218 if (PROFILE_MODEL_P (current_cpu
))
1220 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1221 model_profile_insn (current_cpu
, abuf
);
1228 /* Perform maclo: maclo $src1,$src2. */
1230 SEM_FN_NAME (m32r
,maclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1232 #define FLD(f) abuf->fields.fmt_30_machi.f
1233 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1234 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1235 CPU (h_accum
) = SRADI (SLLDI (ADDDI (CPU (h_accum
), MULDI (EXTSIDI (SLLSI (* FLD (f_r1
), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
))))), 8), 8);
1236 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1237 #if WITH_PROFILE_MODEL_P
1238 if (PROFILE_MODEL_P (current_cpu
))
1240 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1241 model_profile_insn (current_cpu
, abuf
);
1248 /* Perform macwhi: macwhi $src1,$src2. */
1250 SEM_FN_NAME (m32r
,macwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1252 #define FLD(f) abuf->fields.fmt_30_machi.f
1253 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1254 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1255 CPU (h_accum
) = SRADI (SLLDI (ADDDI (CPU (h_accum
), MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16))))), 8), 8);
1256 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1257 #if WITH_PROFILE_MODEL_P
1258 if (PROFILE_MODEL_P (current_cpu
))
1260 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1261 model_profile_insn (current_cpu
, abuf
);
1268 /* Perform macwlo: macwlo $src1,$src2. */
1270 SEM_FN_NAME (m32r
,macwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1272 #define FLD(f) abuf->fields.fmt_30_machi.f
1273 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1274 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1275 CPU (h_accum
) = SRADI (SLLDI (ADDDI (CPU (h_accum
), MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
))))), 8), 8);
1276 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1277 #if WITH_PROFILE_MODEL_P
1278 if (PROFILE_MODEL_P (current_cpu
))
1280 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1281 model_profile_insn (current_cpu
, abuf
);
1288 /* Perform mul: mul $dr,$sr. */
1290 SEM_FN_NAME (m32r
,mul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1292 #define FLD(f) abuf->fields.fmt_0_add.f
1293 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1294 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1295 * FLD (f_r1
) = MULSI (* FLD (f_r1
), * FLD (f_r2
));
1296 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1297 #if WITH_PROFILE_MODEL_P
1298 if (PROFILE_MODEL_P (current_cpu
))
1300 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1301 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1302 model_profile_insn (current_cpu
, abuf
);
1309 /* Perform mulhi: mulhi $src1,$src2. */
1311 SEM_FN_NAME (m32r
,mulhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1313 #define FLD(f) abuf->fields.fmt_15_cmp.f
1314 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1315 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1316 CPU (h_accum
) = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (f_r1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16)))), 16), 16);
1317 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1318 #if WITH_PROFILE_MODEL_P
1319 if (PROFILE_MODEL_P (current_cpu
))
1321 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1322 model_profile_insn (current_cpu
, abuf
);
1329 /* Perform mullo: mullo $src1,$src2. */
1331 SEM_FN_NAME (m32r
,mullo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1333 #define FLD(f) abuf->fields.fmt_15_cmp.f
1334 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1335 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1336 CPU (h_accum
) = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (f_r1
), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
)))), 16), 16);
1337 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1338 #if WITH_PROFILE_MODEL_P
1339 if (PROFILE_MODEL_P (current_cpu
))
1341 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1342 model_profile_insn (current_cpu
, abuf
);
1349 /* Perform mulwhi: mulwhi $src1,$src2. */
1351 SEM_FN_NAME (m32r
,mulwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1353 #define FLD(f) abuf->fields.fmt_15_cmp.f
1354 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1355 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1356 CPU (h_accum
) = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2
), 16)))), 8), 8);
1357 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1358 #if WITH_PROFILE_MODEL_P
1359 if (PROFILE_MODEL_P (current_cpu
))
1361 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1362 model_profile_insn (current_cpu
, abuf
);
1369 /* Perform mulwlo: mulwlo $src1,$src2. */
1371 SEM_FN_NAME (m32r
,mulwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1373 #define FLD(f) abuf->fields.fmt_15_cmp.f
1374 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1375 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1376 CPU (h_accum
) = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1
)), EXTHIDI (TRUNCSIHI (* FLD (f_r2
)))), 8), 8);
1377 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1378 #if WITH_PROFILE_MODEL_P
1379 if (PROFILE_MODEL_P (current_cpu
))
1381 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1382 model_profile_insn (current_cpu
, abuf
);
1389 /* Perform mv: mv $dr,$sr. */
1391 SEM_FN_NAME (m32r
,mv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1393 #define FLD(f) abuf->fields.fmt_31_mv.f
1394 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1395 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1396 * FLD (f_r1
) = * FLD (f_r2
);
1397 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
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 model_profile_insn (current_cpu
, abuf
);
1410 /* Perform mvfachi: mvfachi $dr. */
1412 SEM_FN_NAME (m32r
,mvfachi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1414 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1415 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1416 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1417 * FLD (f_r1
) = TRUNCDISI (SRADI (CPU (h_accum
), 32));
1418 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1419 #if WITH_PROFILE_MODEL_P
1420 if (PROFILE_MODEL_P (current_cpu
))
1422 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1423 model_profile_insn (current_cpu
, abuf
);
1430 /* Perform mvfaclo: mvfaclo $dr. */
1432 SEM_FN_NAME (m32r
,mvfaclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1434 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1435 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1436 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1437 * FLD (f_r1
) = TRUNCDISI (CPU (h_accum
));
1438 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1439 #if WITH_PROFILE_MODEL_P
1440 if (PROFILE_MODEL_P (current_cpu
))
1442 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1443 model_profile_insn (current_cpu
, abuf
);
1450 /* Perform mvfacmi: mvfacmi $dr. */
1452 SEM_FN_NAME (m32r
,mvfacmi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1454 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1455 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1456 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1457 * FLD (f_r1
) = TRUNCDISI (SRADI (CPU (h_accum
), 16));
1458 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1459 #if WITH_PROFILE_MODEL_P
1460 if (PROFILE_MODEL_P (current_cpu
))
1462 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1463 model_profile_insn (current_cpu
, abuf
);
1470 /* Perform mvfc: mvfc $dr,$scr. */
1472 SEM_FN_NAME (m32r
,mvfc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1474 #define FLD(f) abuf->fields.fmt_33_mvfc.f
1475 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1476 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1477 * FLD (f_r1
) = m32r_h_cr_get (current_cpu
, FLD (f_r2
));
1478 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1479 #if WITH_PROFILE_MODEL_P
1480 if (PROFILE_MODEL_P (current_cpu
))
1482 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1483 model_profile_insn (current_cpu
, abuf
);
1490 /* Perform mvtachi: mvtachi $src1. */
1492 SEM_FN_NAME (m32r
,mvtachi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1494 #define FLD(f) abuf->fields.fmt_34_mvtachi.f
1495 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1496 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1497 CPU (h_accum
) = ORDI (ANDDI (CPU (h_accum
), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (f_r1
)), 32));
1498 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1499 #if WITH_PROFILE_MODEL_P
1500 if (PROFILE_MODEL_P (current_cpu
))
1502 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1503 model_profile_insn (current_cpu
, abuf
);
1510 /* Perform mvtaclo: mvtaclo $src1. */
1512 SEM_FN_NAME (m32r
,mvtaclo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1514 #define FLD(f) abuf->fields.fmt_34_mvtachi.f
1515 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1516 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1517 CPU (h_accum
) = ORDI (ANDDI (CPU (h_accum
), MAKEDI (0xffffffff, 0)), EXTSIDI (* FLD (f_r1
)));
1518 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1519 #if WITH_PROFILE_MODEL_P
1520 if (PROFILE_MODEL_P (current_cpu
))
1522 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1523 model_profile_insn (current_cpu
, abuf
);
1530 /* Perform mvtc: mvtc $sr,$dcr. */
1532 SEM_FN_NAME (m32r
,mvtc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1534 #define FLD(f) abuf->fields.fmt_35_mvtc.f
1535 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1536 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1537 m32r_h_cr_set (current_cpu
, FLD (f_r1
), * FLD (f_r2
));
1538 TRACE_RESULT (current_cpu
, "dcr", 'x', m32r_h_cr_get (current_cpu
, FLD (f_r1
)));
1539 #if WITH_PROFILE_MODEL_P
1540 if (PROFILE_MODEL_P (current_cpu
))
1542 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1543 model_profile_insn (current_cpu
, abuf
);
1550 /* Perform neg: neg $dr,$sr. */
1552 SEM_FN_NAME (m32r
,neg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1554 #define FLD(f) abuf->fields.fmt_31_mv.f
1555 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1556 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1557 * FLD (f_r1
) = NEGSI (* FLD (f_r2
));
1558 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1559 #if WITH_PROFILE_MODEL_P
1560 if (PROFILE_MODEL_P (current_cpu
))
1562 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1563 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1564 model_profile_insn (current_cpu
, abuf
);
1571 /* Perform nop: nop. */
1573 SEM_FN_NAME (m32r
,nop
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1575 #define FLD(f) abuf->fields.fmt_36_nop.f
1576 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1577 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1578 PROFILE_COUNT_FILLNOPS (current_cpu
, abuf
->addr
);
1579 #if WITH_PROFILE_MODEL_P
1580 if (PROFILE_MODEL_P (current_cpu
))
1582 model_profile_insn (current_cpu
, abuf
);
1589 /* Perform not: not $dr,$sr. */
1591 SEM_FN_NAME (m32r
,not) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1593 #define FLD(f) abuf->fields.fmt_31_mv.f
1594 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1595 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1596 * FLD (f_r1
) = INVSI (* FLD (f_r2
));
1597 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1598 #if WITH_PROFILE_MODEL_P
1599 if (PROFILE_MODEL_P (current_cpu
))
1601 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1602 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1603 model_profile_insn (current_cpu
, abuf
);
1610 /* Perform rac: rac. */
1612 SEM_FN_NAME (m32r
,rac
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1614 #define FLD(f) abuf->fields.fmt_37_rac.f
1615 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1616 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1619 tmp_tmp1
= ANDDI (CPU (h_accum
), MAKEDI (16777215, 0xffffffff));
1620 if (ANDIFSI (GEDI (tmp_tmp1
, MAKEDI (16383, 0xffff8000)), LEDI (tmp_tmp1
, MAKEDI (8388607, 0xffffffff)))) {
1621 tmp_tmp1
= MAKEDI (16383, 0xffff8000);
1623 if (ANDIFSI (GEDI (tmp_tmp1
, MAKEDI (8388608, 0)), LEDI (tmp_tmp1
, MAKEDI (16760832, 0)))) {
1624 tmp_tmp1
= MAKEDI (16760832, 0);
1626 tmp_tmp1
= ANDDI (ADDDI (CPU (h_accum
), MAKEDI (0, 16384)), MAKEDI (16777215, 0xffff8000));
1629 tmp_tmp1
= SLLDI (tmp_tmp1
, 1);
1630 CPU (h_accum
) = SRADI (SLLDI (tmp_tmp1
, 7), 7);
1631 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1633 #if WITH_PROFILE_MODEL_P
1634 if (PROFILE_MODEL_P (current_cpu
))
1636 model_profile_insn (current_cpu
, abuf
);
1643 /* Perform rach: rach. */
1645 SEM_FN_NAME (m32r
,rach
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1647 #define FLD(f) abuf->fields.fmt_37_rac.f
1648 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1649 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1652 tmp_tmp1
= ANDDI (CPU (h_accum
), MAKEDI (16777215, 0xffffffff));
1653 if (ANDIFSI (GEDI (tmp_tmp1
, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1
, MAKEDI (8388607, 0xffffffff)))) {
1654 tmp_tmp1
= MAKEDI (16383, 0x80000000);
1656 if (ANDIFSI (GEDI (tmp_tmp1
, MAKEDI (8388608, 0)), LEDI (tmp_tmp1
, MAKEDI (16760832, 0)))) {
1657 tmp_tmp1
= MAKEDI (16760832, 0);
1659 tmp_tmp1
= ANDDI (ADDDI (CPU (h_accum
), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
1662 tmp_tmp1
= SLLDI (tmp_tmp1
, 1);
1663 CPU (h_accum
) = SRADI (SLLDI (tmp_tmp1
, 7), 7);
1664 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1666 #if WITH_PROFILE_MODEL_P
1667 if (PROFILE_MODEL_P (current_cpu
))
1669 model_profile_insn (current_cpu
, abuf
);
1676 /* Perform rte: rte. */
1678 SEM_FN_NAME (m32r
,rte
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1680 #define FLD(f) abuf->fields.fmt_36_nop.f
1681 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1682 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1685 CPU (h_sm
) = CPU (h_bsm
);
1686 TRACE_RESULT (current_cpu
, "h-sm", 'x', CPU (h_sm
));
1687 CPU (h_ie
) = CPU (h_bie
);
1688 TRACE_RESULT (current_cpu
, "h-ie", 'x', CPU (h_ie
));
1689 CPU (h_cond
) = CPU (h_bcond
);
1690 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1691 BRANCH_NEW_PC (current_cpu
, new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, CPU (h_bpc
)));
1693 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
1695 #if WITH_PROFILE_MODEL_P
1696 if (PROFILE_MODEL_P (current_cpu
))
1698 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1705 /* Perform seth: seth $dr,$hi16. */
1707 SEM_FN_NAME (m32r
,seth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1709 #define FLD(f) abuf->fields.fmt_38_seth.f
1710 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1711 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1712 * FLD (f_r1
) = SLLSI (FLD (f_hi16
), 16);
1713 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1714 #if WITH_PROFILE_MODEL_P
1715 if (PROFILE_MODEL_P (current_cpu
))
1717 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1718 model_profile_insn (current_cpu
, abuf
);
1725 /* Perform sll: sll $dr,$sr. */
1727 SEM_FN_NAME (m32r
,sll
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1729 #define FLD(f) abuf->fields.fmt_0_add.f
1730 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1731 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1732 * FLD (f_r1
) = SLLSI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
1733 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1734 #if WITH_PROFILE_MODEL_P
1735 if (PROFILE_MODEL_P (current_cpu
))
1737 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1738 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1739 model_profile_insn (current_cpu
, abuf
);
1746 /* Perform sll3: sll3 $dr,$sr,$simm16. */
1748 SEM_FN_NAME (m32r
,sll3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1750 #define FLD(f) abuf->fields.fmt_5_addv3.f
1751 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1752 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1753 * FLD (f_r1
) = SLLSI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
1754 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1755 #if WITH_PROFILE_MODEL_P
1756 if (PROFILE_MODEL_P (current_cpu
))
1758 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1759 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1760 model_profile_insn (current_cpu
, abuf
);
1767 /* Perform slli: slli $dr,$uimm5. */
1769 SEM_FN_NAME (m32r
,slli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1771 #define FLD(f) abuf->fields.fmt_39_slli.f
1772 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1773 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1774 * FLD (f_r1
) = SLLSI (* FLD (f_r1
), FLD (f_uimm5
));
1775 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1776 #if WITH_PROFILE_MODEL_P
1777 if (PROFILE_MODEL_P (current_cpu
))
1779 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1780 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1781 model_profile_insn (current_cpu
, abuf
);
1788 /* Perform sra: sra $dr,$sr. */
1790 SEM_FN_NAME (m32r
,sra
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1792 #define FLD(f) abuf->fields.fmt_0_add.f
1793 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1794 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1795 * FLD (f_r1
) = SRASI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
1796 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1797 #if WITH_PROFILE_MODEL_P
1798 if (PROFILE_MODEL_P (current_cpu
))
1800 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1801 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1802 model_profile_insn (current_cpu
, abuf
);
1809 /* Perform sra3: sra3 $dr,$sr,$simm16. */
1811 SEM_FN_NAME (m32r
,sra3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1813 #define FLD(f) abuf->fields.fmt_5_addv3.f
1814 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1815 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1816 * FLD (f_r1
) = SRASI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
1817 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1818 #if WITH_PROFILE_MODEL_P
1819 if (PROFILE_MODEL_P (current_cpu
))
1821 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1822 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1823 model_profile_insn (current_cpu
, abuf
);
1830 /* Perform srai: srai $dr,$uimm5. */
1832 SEM_FN_NAME (m32r
,srai
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1834 #define FLD(f) abuf->fields.fmt_39_slli.f
1835 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1836 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1837 * FLD (f_r1
) = SRASI (* FLD (f_r1
), FLD (f_uimm5
));
1838 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1839 #if WITH_PROFILE_MODEL_P
1840 if (PROFILE_MODEL_P (current_cpu
))
1842 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1843 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1844 model_profile_insn (current_cpu
, abuf
);
1851 /* Perform srl: srl $dr,$sr. */
1853 SEM_FN_NAME (m32r
,srl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1855 #define FLD(f) abuf->fields.fmt_0_add.f
1856 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1857 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1858 * FLD (f_r1
) = SRLSI (* FLD (f_r1
), ANDSI (* FLD (f_r2
), 31));
1859 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1860 #if WITH_PROFILE_MODEL_P
1861 if (PROFILE_MODEL_P (current_cpu
))
1863 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1864 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1865 model_profile_insn (current_cpu
, abuf
);
1872 /* Perform srl3: srl3 $dr,$sr,$simm16. */
1874 SEM_FN_NAME (m32r
,srl3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1876 #define FLD(f) abuf->fields.fmt_5_addv3.f
1877 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1878 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1879 * FLD (f_r1
) = SRLSI (* FLD (f_r2
), ANDSI (FLD (f_simm16
), 31));
1880 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1881 #if WITH_PROFILE_MODEL_P
1882 if (PROFILE_MODEL_P (current_cpu
))
1884 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1885 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1886 model_profile_insn (current_cpu
, abuf
);
1893 /* Perform srli: srli $dr,$uimm5. */
1895 SEM_FN_NAME (m32r
,srli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1897 #define FLD(f) abuf->fields.fmt_39_slli.f
1898 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1899 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1900 * FLD (f_r1
) = SRLSI (* FLD (f_r1
), FLD (f_uimm5
));
1901 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
1902 #if WITH_PROFILE_MODEL_P
1903 if (PROFILE_MODEL_P (current_cpu
))
1905 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1906 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
1907 model_profile_insn (current_cpu
, abuf
);
1914 /* Perform st: st $src1,@$src2. */
1916 SEM_FN_NAME (m32r
,st
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1918 #define FLD(f) abuf->fields.fmt_15_cmp.f
1919 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1920 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1921 SETMEMSI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
1922 TRACE_RESULT (current_cpu
, "h-memory", 'x', GETMEMSI (current_cpu
, * FLD (f_r2
)));
1923 #if WITH_PROFILE_MODEL_P
1924 if (PROFILE_MODEL_P (current_cpu
))
1926 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1927 model_profile_insn (current_cpu
, abuf
);
1934 /* Perform st-d: st $src1,@($slo16,$src2). */
1936 SEM_FN_NAME (m32r
,st_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1938 #define FLD(f) abuf->fields.fmt_40_st_d.f
1939 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1940 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1941 SETMEMSI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), * FLD (f_r1
));
1942 TRACE_RESULT (current_cpu
, "h-memory", 'x', GETMEMSI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1943 #if WITH_PROFILE_MODEL_P
1944 if (PROFILE_MODEL_P (current_cpu
))
1946 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1947 model_profile_insn (current_cpu
, abuf
);
1954 /* Perform stb: stb $src1,@$src2. */
1956 SEM_FN_NAME (m32r
,stb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1958 #define FLD(f) abuf->fields.fmt_15_cmp.f
1959 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1960 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1961 SETMEMQI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
1962 TRACE_RESULT (current_cpu
, "h-memory", 'x', GETMEMQI (current_cpu
, * FLD (f_r2
)));
1963 #if WITH_PROFILE_MODEL_P
1964 if (PROFILE_MODEL_P (current_cpu
))
1966 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1967 model_profile_insn (current_cpu
, abuf
);
1974 /* Perform stb-d: stb $src1,@($slo16,$src2). */
1976 SEM_FN_NAME (m32r
,stb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1978 #define FLD(f) abuf->fields.fmt_40_st_d.f
1979 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1980 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
1981 SETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), * FLD (f_r1
));
1982 TRACE_RESULT (current_cpu
, "h-memory", 'x', GETMEMQI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
1983 #if WITH_PROFILE_MODEL_P
1984 if (PROFILE_MODEL_P (current_cpu
))
1986 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
1987 model_profile_insn (current_cpu
, abuf
);
1994 /* Perform sth: sth $src1,@$src2. */
1996 SEM_FN_NAME (m32r
,sth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1998 #define FLD(f) abuf->fields.fmt_15_cmp.f
1999 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2000 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2001 SETMEMHI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
2002 TRACE_RESULT (current_cpu
, "h-memory", 'x', GETMEMHI (current_cpu
, * FLD (f_r2
)));
2003 #if WITH_PROFILE_MODEL_P
2004 if (PROFILE_MODEL_P (current_cpu
))
2006 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2007 model_profile_insn (current_cpu
, abuf
);
2014 /* Perform sth-d: sth $src1,@($slo16,$src2). */
2016 SEM_FN_NAME (m32r
,sth_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2018 #define FLD(f) abuf->fields.fmt_40_st_d.f
2019 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2020 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2021 SETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
)), * FLD (f_r1
));
2022 TRACE_RESULT (current_cpu
, "h-memory", 'x', GETMEMHI (current_cpu
, ADDSI (* FLD (f_r2
), FLD (f_simm16
))));
2023 #if WITH_PROFILE_MODEL_P
2024 if (PROFILE_MODEL_P (current_cpu
))
2026 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2027 model_profile_insn (current_cpu
, abuf
);
2034 /* Perform st-plus: st $src1,@+$src2. */
2036 SEM_FN_NAME (m32r
,st_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2038 #define FLD(f) abuf->fields.fmt_15_cmp.f
2039 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2040 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2042 * FLD (f_r2
) = ADDSI (* FLD (f_r2
), 4);
2043 TRACE_RESULT (current_cpu
, "src2", 'x', * FLD (f_r2
));
2044 SETMEMSI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
2045 TRACE_RESULT (current_cpu
, "h-memory", 'x', GETMEMSI (current_cpu
, * FLD (f_r2
)));
2047 #if WITH_PROFILE_MODEL_P
2048 if (PROFILE_MODEL_P (current_cpu
))
2050 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2051 model_profile_insn (current_cpu
, abuf
);
2058 /* Perform st-minus: st $src1,@-$src2. */
2060 SEM_FN_NAME (m32r
,st_minus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2062 #define FLD(f) abuf->fields.fmt_15_cmp.f
2063 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2064 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2066 * FLD (f_r2
) = SUBSI (* FLD (f_r2
), 4);
2067 TRACE_RESULT (current_cpu
, "src2", 'x', * FLD (f_r2
));
2068 SETMEMSI (current_cpu
, * FLD (f_r2
), * FLD (f_r1
));
2069 TRACE_RESULT (current_cpu
, "h-memory", 'x', GETMEMSI (current_cpu
, * FLD (f_r2
)));
2071 #if WITH_PROFILE_MODEL_P
2072 if (PROFILE_MODEL_P (current_cpu
))
2074 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2075 model_profile_insn (current_cpu
, abuf
);
2082 /* Perform sub: sub $dr,$sr. */
2084 SEM_FN_NAME (m32r
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2086 #define FLD(f) abuf->fields.fmt_0_add.f
2087 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2088 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2089 * FLD (f_r1
) = SUBSI (* FLD (f_r1
), * FLD (f_r2
));
2090 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2091 #if WITH_PROFILE_MODEL_P
2092 if (PROFILE_MODEL_P (current_cpu
))
2094 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2095 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2096 model_profile_insn (current_cpu
, abuf
);
2103 /* Perform subv: subv $dr,$sr. */
2105 SEM_FN_NAME (m32r
,subv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2107 #define FLD(f) abuf->fields.fmt_0_add.f
2108 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2109 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2112 temp0
= SUBSI (* FLD (f_r1
), * FLD (f_r2
));
2113 temp1
= SUBOFSI (* FLD (f_r1
), * FLD (f_r2
), 0);
2114 * FLD (f_r1
) = temp0
;
2115 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2116 CPU (h_cond
) = temp1
;
2117 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2119 #if WITH_PROFILE_MODEL_P
2120 if (PROFILE_MODEL_P (current_cpu
))
2122 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2123 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2124 model_profile_insn (current_cpu
, abuf
);
2131 /* Perform subx: subx $dr,$sr. */
2133 SEM_FN_NAME (m32r
,subx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2135 #define FLD(f) abuf->fields.fmt_6_addx.f
2136 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2137 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2140 temp0
= SUBCSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
2141 temp1
= SUBCFSI (* FLD (f_r1
), * FLD (f_r2
), CPU (h_cond
));
2142 * FLD (f_r1
) = temp0
;
2143 TRACE_RESULT (current_cpu
, "dr", 'x', * FLD (f_r1
));
2144 CPU (h_cond
) = temp1
;
2145 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2147 #if WITH_PROFILE_MODEL_P
2148 if (PROFILE_MODEL_P (current_cpu
))
2150 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2151 m32r_model_mark_set_h_gr (current_cpu
, abuf
);
2152 model_profile_insn (current_cpu
, abuf
);
2159 /* Perform trap: trap $uimm4. */
2161 SEM_FN_NAME (m32r
,trap
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2163 #define FLD(f) abuf->fields.fmt_41_trap.f
2164 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2165 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2167 do_trap (current_cpu
, FLD (f_uimm4
));
2168 #if WITH_PROFILE_MODEL_P
2169 if (PROFILE_MODEL_P (current_cpu
))
2171 model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
2178 /* Perform unlock: unlock $src1,@$src2. */
2180 SEM_FN_NAME (m32r
,unlock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2182 #define FLD(f) abuf->fields.fmt_15_cmp.f
2183 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2184 CIA new_pc
= SEM_NEXT_PC (sem_arg
);
2185 do_unlock (current_cpu
, * FLD (f_r1
), * FLD (f_r2
));
2186 #if WITH_PROFILE_MODEL_P
2187 if (PROFILE_MODEL_P (current_cpu
))
2189 m32r_model_mark_get_h_gr (current_cpu
, abuf
);
2190 model_profile_insn (current_cpu
, abuf
);
2197 /* FIXME: Add "no return" attribute to illegal insn handlers.
2198 They all call longjmp. */
2201 SEM_FN_NAME (m32r
,illegal
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2203 sim_engine_illegal_insn (current_cpu
, NULL_CIA
/*FIXME*/);
2207 #endif /* ! defined (SCACHE_P) || (defined (SCACHE_P) && WITH_SCACHE) */
This page took 0.150535 seconds and 4 git commands to generate.