1 /* Simulator instruction semantics for m32rx.
3 This file is machine generated with CGEN.
5 Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
7 This file is part of the GNU Simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 #define WANT_CPU_M32RX
33 #if ! defined (SCACHE_P) || (defined (SCACHE_P) && WITH_SCACHE)
36 #define GET_ATTR(cpu, num, attr) CGEN_INSN_ATTR (abuf->opcode, CGEN_INSN_##attr)
38 /* Perform add: add $dr,$sr. */
40 SEM_FN_NAME (m32rx
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
42 insn_t insn
= SEM_INSN (sem_arg
);
43 #define OPRND(f) par_exec->operands.fmt_add.f
44 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
45 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
46 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
49 CPU (h_gr
[f_r1
]) = ADDSI (OPRND (dr
), OPRND (sr
));
50 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
52 #if WITH_PROFILE_MODEL_P
53 if (PROFILE_MODEL_P (current_cpu
))
55 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
56 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
57 m32rx_model_profile_insn (current_cpu
, abuf
);
65 /* Perform add3: add3 $dr,$sr,$hash$slo16. */
67 SEM_FN_NAME (m32rx
,add3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
69 insn_t insn
= SEM_INSN (sem_arg
);
70 #define OPRND(f) par_exec->operands.fmt_add3.f
71 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
72 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
73 EXTRACT_FMT_ADD3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
76 CPU (h_gr
[f_r1
]) = ADDSI (OPRND (sr
), OPRND (slo16
));
77 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
79 #if WITH_PROFILE_MODEL_P
80 if (PROFILE_MODEL_P (current_cpu
))
82 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
83 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
84 m32rx_model_profile_insn (current_cpu
, abuf
);
92 /* Perform and: and $dr,$sr. */
94 SEM_FN_NAME (m32rx
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
96 insn_t insn
= SEM_INSN (sem_arg
);
97 #define OPRND(f) par_exec->operands.fmt_add.f
98 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
99 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
100 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
103 CPU (h_gr
[f_r1
]) = ANDSI (OPRND (dr
), OPRND (sr
));
104 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
106 #if WITH_PROFILE_MODEL_P
107 if (PROFILE_MODEL_P (current_cpu
))
109 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
110 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
111 m32rx_model_profile_insn (current_cpu
, abuf
);
119 /* Perform and3: and3 $dr,$sr,$uimm16. */
121 SEM_FN_NAME (m32rx
,and3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
123 insn_t insn
= SEM_INSN (sem_arg
);
124 #define OPRND(f) par_exec->operands.fmt_and3.f
125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
126 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
127 EXTRACT_FMT_AND3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
128 EXTRACT_FMT_AND3_CODE
130 CPU (h_gr
[f_r1
]) = ANDSI (OPRND (sr
), OPRND (uimm16
));
131 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
133 #if WITH_PROFILE_MODEL_P
134 if (PROFILE_MODEL_P (current_cpu
))
136 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
137 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
138 m32rx_model_profile_insn (current_cpu
, abuf
);
146 /* Perform or: or $dr,$sr. */
148 SEM_FN_NAME (m32rx
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
150 insn_t insn
= SEM_INSN (sem_arg
);
151 #define OPRND(f) par_exec->operands.fmt_add.f
152 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
153 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
154 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
157 CPU (h_gr
[f_r1
]) = ORSI (OPRND (dr
), OPRND (sr
));
158 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
160 #if WITH_PROFILE_MODEL_P
161 if (PROFILE_MODEL_P (current_cpu
))
163 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
164 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
165 m32rx_model_profile_insn (current_cpu
, abuf
);
173 /* Perform or3: or3 $dr,$sr,$hash$ulo16. */
175 SEM_FN_NAME (m32rx
,or3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
177 insn_t insn
= SEM_INSN (sem_arg
);
178 #define OPRND(f) par_exec->operands.fmt_or3.f
179 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
180 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
181 EXTRACT_FMT_OR3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
184 CPU (h_gr
[f_r1
]) = ORSI (OPRND (sr
), OPRND (ulo16
));
185 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
187 #if WITH_PROFILE_MODEL_P
188 if (PROFILE_MODEL_P (current_cpu
))
190 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
191 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
192 m32rx_model_profile_insn (current_cpu
, abuf
);
200 /* Perform xor: xor $dr,$sr. */
202 SEM_FN_NAME (m32rx
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
204 insn_t insn
= SEM_INSN (sem_arg
);
205 #define OPRND(f) par_exec->operands.fmt_add.f
206 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
207 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
208 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
211 CPU (h_gr
[f_r1
]) = XORSI (OPRND (dr
), OPRND (sr
));
212 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
214 #if WITH_PROFILE_MODEL_P
215 if (PROFILE_MODEL_P (current_cpu
))
217 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
218 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
219 m32rx_model_profile_insn (current_cpu
, abuf
);
227 /* Perform xor3: xor3 $dr,$sr,$uimm16. */
229 SEM_FN_NAME (m32rx
,xor3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
231 insn_t insn
= SEM_INSN (sem_arg
);
232 #define OPRND(f) par_exec->operands.fmt_and3.f
233 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
234 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
235 EXTRACT_FMT_AND3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
236 EXTRACT_FMT_AND3_CODE
238 CPU (h_gr
[f_r1
]) = XORSI (OPRND (sr
), OPRND (uimm16
));
239 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
241 #if WITH_PROFILE_MODEL_P
242 if (PROFILE_MODEL_P (current_cpu
))
244 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
245 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
246 m32rx_model_profile_insn (current_cpu
, abuf
);
254 /* Perform addi: addi $dr,$simm8. */
256 SEM_FN_NAME (m32rx
,addi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
258 insn_t insn
= SEM_INSN (sem_arg
);
259 #define OPRND(f) par_exec->operands.fmt_addi.f
260 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
261 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
262 EXTRACT_FMT_ADDI_VARS
/* f-op1 f-r1 f-simm8 */
263 EXTRACT_FMT_ADDI_CODE
265 CPU (h_gr
[f_r1
]) = ADDSI (OPRND (dr
), OPRND (simm8
));
266 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
268 #if WITH_PROFILE_MODEL_P
269 if (PROFILE_MODEL_P (current_cpu
))
271 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
272 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
273 m32rx_model_profile_insn (current_cpu
, abuf
);
281 /* Perform addv: addv $dr,$sr. */
283 SEM_FN_NAME (m32rx
,addv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
285 insn_t insn
= SEM_INSN (sem_arg
);
286 #define OPRND(f) par_exec->operands.fmt_addv.f
287 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
288 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
289 EXTRACT_FMT_ADDV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
290 EXTRACT_FMT_ADDV_CODE
294 temp0
= ADDSI (OPRND (dr
), OPRND (sr
));
295 temp1
= ADDOFSI (OPRND (dr
), OPRND (sr
), 0);
296 CPU (h_gr
[f_r1
]) = temp0
;
297 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
298 CPU (h_cond
) = temp1
;
299 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
302 #if WITH_PROFILE_MODEL_P
303 if (PROFILE_MODEL_P (current_cpu
))
305 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
306 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
307 m32rx_model_profile_insn (current_cpu
, abuf
);
315 /* Perform addv3: addv3 $dr,$sr,$simm16. */
317 SEM_FN_NAME (m32rx
,addv3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
319 insn_t insn
= SEM_INSN (sem_arg
);
320 #define OPRND(f) par_exec->operands.fmt_addv3.f
321 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
322 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
323 EXTRACT_FMT_ADDV3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
324 EXTRACT_FMT_ADDV3_CODE
328 temp0
= ADDSI (OPRND (sr
), OPRND (simm16
));
329 temp1
= ADDOFSI (OPRND (sr
), OPRND (simm16
), 0);
330 CPU (h_gr
[f_r1
]) = temp0
;
331 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
332 CPU (h_cond
) = temp1
;
333 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
336 #if WITH_PROFILE_MODEL_P
337 if (PROFILE_MODEL_P (current_cpu
))
339 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
340 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
341 m32rx_model_profile_insn (current_cpu
, abuf
);
349 /* Perform addx: addx $dr,$sr. */
351 SEM_FN_NAME (m32rx
,addx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
353 insn_t insn
= SEM_INSN (sem_arg
);
354 #define OPRND(f) par_exec->operands.fmt_addx.f
355 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
356 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
357 EXTRACT_FMT_ADDX_VARS
/* f-op1 f-r1 f-op2 f-r2 */
358 EXTRACT_FMT_ADDX_CODE
362 temp0
= ADDCSI (OPRND (dr
), OPRND (sr
), OPRND (condbit
));
363 temp1
= ADDCFSI (OPRND (dr
), OPRND (sr
), OPRND (condbit
));
364 CPU (h_gr
[f_r1
]) = temp0
;
365 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
366 CPU (h_cond
) = temp1
;
367 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
370 #if WITH_PROFILE_MODEL_P
371 if (PROFILE_MODEL_P (current_cpu
))
373 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
374 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
375 m32rx_model_profile_insn (current_cpu
, abuf
);
383 /* Perform bc8: bc $disp8. */
385 SEM_FN_NAME (m32rx
,bc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
387 insn_t insn
= SEM_INSN (sem_arg
);
388 #define OPRND(f) par_exec->operands.fmt_bc8.f
389 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
390 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
392 EXTRACT_FMT_BC8_VARS
/* f-op1 f-r1 f-disp8 */
395 if (OPRND (condbit
)) {
396 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
397 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
400 #if WITH_PROFILE_MODEL_P
401 if (PROFILE_MODEL_P (current_cpu
))
403 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
411 /* Perform bc24: bc $disp24. */
413 SEM_FN_NAME (m32rx
,bc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
415 insn_t insn
= SEM_INSN (sem_arg
);
416 #define OPRND(f) par_exec->operands.fmt_bc24.f
417 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
418 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
420 EXTRACT_FMT_BC24_VARS
/* f-op1 f-r1 f-disp24 */
421 EXTRACT_FMT_BC24_CODE
423 if (OPRND (condbit
)) {
424 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
425 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
428 #if WITH_PROFILE_MODEL_P
429 if (PROFILE_MODEL_P (current_cpu
))
431 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
439 /* Perform beq: beq $src1,$src2,$disp16. */
441 SEM_FN_NAME (m32rx
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
443 insn_t insn
= SEM_INSN (sem_arg
);
444 #define OPRND(f) par_exec->operands.fmt_beq.f
445 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
446 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
448 EXTRACT_FMT_BEQ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
451 if (EQSI (OPRND (src1
), OPRND (src2
))) {
452 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
453 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
456 #if WITH_PROFILE_MODEL_P
457 if (PROFILE_MODEL_P (current_cpu
))
459 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
460 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
468 /* Perform beqz: beqz $src2,$disp16. */
470 SEM_FN_NAME (m32rx
,beqz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
472 insn_t insn
= SEM_INSN (sem_arg
);
473 #define OPRND(f) par_exec->operands.fmt_beqz.f
474 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
475 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
477 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
478 EXTRACT_FMT_BEQZ_CODE
480 if (EQSI (OPRND (src2
), 0)) {
481 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
482 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
485 #if WITH_PROFILE_MODEL_P
486 if (PROFILE_MODEL_P (current_cpu
))
488 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
489 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
497 /* Perform bgez: bgez $src2,$disp16. */
499 SEM_FN_NAME (m32rx
,bgez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
501 insn_t insn
= SEM_INSN (sem_arg
);
502 #define OPRND(f) par_exec->operands.fmt_beqz.f
503 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
504 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
506 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
507 EXTRACT_FMT_BEQZ_CODE
509 if (GESI (OPRND (src2
), 0)) {
510 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
511 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
514 #if WITH_PROFILE_MODEL_P
515 if (PROFILE_MODEL_P (current_cpu
))
517 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
518 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
526 /* Perform bgtz: bgtz $src2,$disp16. */
528 SEM_FN_NAME (m32rx
,bgtz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
530 insn_t insn
= SEM_INSN (sem_arg
);
531 #define OPRND(f) par_exec->operands.fmt_beqz.f
532 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
533 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
535 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
536 EXTRACT_FMT_BEQZ_CODE
538 if (GTSI (OPRND (src2
), 0)) {
539 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
540 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
543 #if WITH_PROFILE_MODEL_P
544 if (PROFILE_MODEL_P (current_cpu
))
546 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
547 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
555 /* Perform blez: blez $src2,$disp16. */
557 SEM_FN_NAME (m32rx
,blez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
559 insn_t insn
= SEM_INSN (sem_arg
);
560 #define OPRND(f) par_exec->operands.fmt_beqz.f
561 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
562 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
564 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
565 EXTRACT_FMT_BEQZ_CODE
567 if (LESI (OPRND (src2
), 0)) {
568 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
569 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
572 #if WITH_PROFILE_MODEL_P
573 if (PROFILE_MODEL_P (current_cpu
))
575 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
576 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
584 /* Perform bltz: bltz $src2,$disp16. */
586 SEM_FN_NAME (m32rx
,bltz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
588 insn_t insn
= SEM_INSN (sem_arg
);
589 #define OPRND(f) par_exec->operands.fmt_beqz.f
590 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
591 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
593 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
594 EXTRACT_FMT_BEQZ_CODE
596 if (LTSI (OPRND (src2
), 0)) {
597 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
598 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
601 #if WITH_PROFILE_MODEL_P
602 if (PROFILE_MODEL_P (current_cpu
))
604 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
605 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
613 /* Perform bnez: bnez $src2,$disp16. */
615 SEM_FN_NAME (m32rx
,bnez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
617 insn_t insn
= SEM_INSN (sem_arg
);
618 #define OPRND(f) par_exec->operands.fmt_beqz.f
619 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
620 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
622 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
623 EXTRACT_FMT_BEQZ_CODE
625 if (NESI (OPRND (src2
), 0)) {
626 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
627 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
630 #if WITH_PROFILE_MODEL_P
631 if (PROFILE_MODEL_P (current_cpu
))
633 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
634 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
642 /* Perform bl8: bl $disp8. */
644 SEM_FN_NAME (m32rx
,bl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
646 insn_t insn
= SEM_INSN (sem_arg
);
647 #define OPRND(f) par_exec->operands.fmt_bl8.f
648 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
649 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
651 EXTRACT_FMT_BL8_VARS
/* f-op1 f-r1 f-disp8 */
655 CPU (h_gr
[14]) = ADDSI (ANDSI (OPRND (pc
), -4), 4);
656 TRACE_RESULT (current_cpu
, "h-gr-14", 'x', CPU (h_gr
[14]));
657 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
658 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
661 #if WITH_PROFILE_MODEL_P
662 if (PROFILE_MODEL_P (current_cpu
))
664 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
665 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
673 /* Perform bl24: bl $disp24. */
675 SEM_FN_NAME (m32rx
,bl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
677 insn_t insn
= SEM_INSN (sem_arg
);
678 #define OPRND(f) par_exec->operands.fmt_bl24.f
679 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
680 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
682 EXTRACT_FMT_BL24_VARS
/* f-op1 f-r1 f-disp24 */
683 EXTRACT_FMT_BL24_CODE
686 CPU (h_gr
[14]) = ADDSI (OPRND (pc
), 4);
687 TRACE_RESULT (current_cpu
, "h-gr-14", 'x', CPU (h_gr
[14]));
688 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
689 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
692 #if WITH_PROFILE_MODEL_P
693 if (PROFILE_MODEL_P (current_cpu
))
695 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
696 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
704 /* Perform bcl8: bcl $disp8. */
706 SEM_FN_NAME (m32rx
,bcl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
708 insn_t insn
= SEM_INSN (sem_arg
);
709 #define OPRND(f) par_exec->operands.fmt_bcl8.f
710 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
711 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
713 EXTRACT_FMT_BCL8_VARS
/* f-op1 f-r1 f-disp8 */
714 EXTRACT_FMT_BCL8_CODE
716 if (OPRND (condbit
)) {
718 CPU (h_gr
[14]) = ADDSI (ANDSI (OPRND (pc
), -4), 4);
719 TRACE_RESULT (current_cpu
, "h-gr-14", 'x', CPU (h_gr
[14]));
720 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
721 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
725 #if WITH_PROFILE_MODEL_P
726 if (PROFILE_MODEL_P (current_cpu
))
728 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
729 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
737 /* Perform bcl24: bcl $disp24. */
739 SEM_FN_NAME (m32rx
,bcl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
741 insn_t insn
= SEM_INSN (sem_arg
);
742 #define OPRND(f) par_exec->operands.fmt_bcl24.f
743 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
744 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
746 EXTRACT_FMT_BCL24_VARS
/* f-op1 f-r1 f-disp24 */
747 EXTRACT_FMT_BCL24_CODE
749 if (OPRND (condbit
)) {
751 CPU (h_gr
[14]) = ADDSI (ANDSI (OPRND (pc
), -4), 4);
752 TRACE_RESULT (current_cpu
, "h-gr-14", 'x', CPU (h_gr
[14]));
753 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
754 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
758 #if WITH_PROFILE_MODEL_P
759 if (PROFILE_MODEL_P (current_cpu
))
761 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
762 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
770 /* Perform bnc8: bnc $disp8. */
772 SEM_FN_NAME (m32rx
,bnc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
774 insn_t insn
= SEM_INSN (sem_arg
);
775 #define OPRND(f) par_exec->operands.fmt_bc8.f
776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
777 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
779 EXTRACT_FMT_BC8_VARS
/* f-op1 f-r1 f-disp8 */
782 if (NOTBI (OPRND (condbit
))) {
783 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
784 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
787 #if WITH_PROFILE_MODEL_P
788 if (PROFILE_MODEL_P (current_cpu
))
790 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
798 /* Perform bnc24: bnc $disp24. */
800 SEM_FN_NAME (m32rx
,bnc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
802 insn_t insn
= SEM_INSN (sem_arg
);
803 #define OPRND(f) par_exec->operands.fmt_bc24.f
804 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
805 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
807 EXTRACT_FMT_BC24_VARS
/* f-op1 f-r1 f-disp24 */
808 EXTRACT_FMT_BC24_CODE
810 if (NOTBI (OPRND (condbit
))) {
811 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
812 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
815 #if WITH_PROFILE_MODEL_P
816 if (PROFILE_MODEL_P (current_cpu
))
818 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
826 /* Perform bne: bne $src1,$src2,$disp16. */
828 SEM_FN_NAME (m32rx
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
830 insn_t insn
= SEM_INSN (sem_arg
);
831 #define OPRND(f) par_exec->operands.fmt_beq.f
832 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
833 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
835 EXTRACT_FMT_BEQ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
838 if (NESI (OPRND (src1
), OPRND (src2
))) {
839 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
840 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
843 #if WITH_PROFILE_MODEL_P
844 if (PROFILE_MODEL_P (current_cpu
))
846 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
847 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
855 /* Perform bra8: bra $disp8. */
857 SEM_FN_NAME (m32rx
,bra8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
859 insn_t insn
= SEM_INSN (sem_arg
);
860 #define OPRND(f) par_exec->operands.fmt_bra8.f
861 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
862 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
864 EXTRACT_FMT_BRA8_VARS
/* f-op1 f-r1 f-disp8 */
865 EXTRACT_FMT_BRA8_CODE
867 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
868 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
870 #if WITH_PROFILE_MODEL_P
871 if (PROFILE_MODEL_P (current_cpu
))
873 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
881 /* Perform bra24: bra $disp24. */
883 SEM_FN_NAME (m32rx
,bra24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
885 insn_t insn
= SEM_INSN (sem_arg
);
886 #define OPRND(f) par_exec->operands.fmt_bra24.f
887 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
888 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
890 EXTRACT_FMT_BRA24_VARS
/* f-op1 f-r1 f-disp24 */
891 EXTRACT_FMT_BRA24_CODE
893 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
894 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
896 #if WITH_PROFILE_MODEL_P
897 if (PROFILE_MODEL_P (current_cpu
))
899 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
907 /* Perform bncl8: bncl $disp8. */
909 SEM_FN_NAME (m32rx
,bncl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
911 insn_t insn
= SEM_INSN (sem_arg
);
912 #define OPRND(f) par_exec->operands.fmt_bcl8.f
913 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
914 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
916 EXTRACT_FMT_BCL8_VARS
/* f-op1 f-r1 f-disp8 */
917 EXTRACT_FMT_BCL8_CODE
919 if (NOTBI (OPRND (condbit
))) {
921 CPU (h_gr
[14]) = ADDSI (ANDSI (OPRND (pc
), -4), 4);
922 TRACE_RESULT (current_cpu
, "h-gr-14", 'x', CPU (h_gr
[14]));
923 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
924 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
928 #if WITH_PROFILE_MODEL_P
929 if (PROFILE_MODEL_P (current_cpu
))
931 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
932 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
940 /* Perform bncl24: bncl $disp24. */
942 SEM_FN_NAME (m32rx
,bncl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
944 insn_t insn
= SEM_INSN (sem_arg
);
945 #define OPRND(f) par_exec->operands.fmt_bcl24.f
946 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
947 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
949 EXTRACT_FMT_BCL24_VARS
/* f-op1 f-r1 f-disp24 */
950 EXTRACT_FMT_BCL24_CODE
952 if (NOTBI (OPRND (condbit
))) {
954 CPU (h_gr
[14]) = ADDSI (ANDSI (OPRND (pc
), -4), 4);
955 TRACE_RESULT (current_cpu
, "h-gr-14", 'x', CPU (h_gr
[14]));
956 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
957 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
961 #if WITH_PROFILE_MODEL_P
962 if (PROFILE_MODEL_P (current_cpu
))
964 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
965 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
973 /* Perform cmp: cmp $src1,$src2. */
975 SEM_FN_NAME (m32rx
,cmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
977 insn_t insn
= SEM_INSN (sem_arg
);
978 #define OPRND(f) par_exec->operands.fmt_cmp.f
979 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
980 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
981 EXTRACT_FMT_CMP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
984 CPU (h_cond
) = LTSI (OPRND (src1
), OPRND (src2
));
985 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
987 #if WITH_PROFILE_MODEL_P
988 if (PROFILE_MODEL_P (current_cpu
))
990 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
991 m32rx_model_profile_insn (current_cpu
, abuf
);
999 /* Perform cmpi: cmpi $src2,$simm16. */
1001 SEM_FN_NAME (m32rx
,cmpi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1003 insn_t insn
= SEM_INSN (sem_arg
);
1004 #define OPRND(f) par_exec->operands.fmt_cmpi.f
1005 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1006 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1007 EXTRACT_FMT_CMPI_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1008 EXTRACT_FMT_CMPI_CODE
1010 CPU (h_cond
) = LTSI (OPRND (src2
), OPRND (simm16
));
1011 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1013 #if WITH_PROFILE_MODEL_P
1014 if (PROFILE_MODEL_P (current_cpu
))
1016 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1017 m32rx_model_profile_insn (current_cpu
, abuf
);
1025 /* Perform cmpu: cmpu $src1,$src2. */
1027 SEM_FN_NAME (m32rx
,cmpu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1029 insn_t insn
= SEM_INSN (sem_arg
);
1030 #define OPRND(f) par_exec->operands.fmt_cmp.f
1031 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1032 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1033 EXTRACT_FMT_CMP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1034 EXTRACT_FMT_CMP_CODE
1036 CPU (h_cond
) = LTUSI (OPRND (src1
), OPRND (src2
));
1037 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1039 #if WITH_PROFILE_MODEL_P
1040 if (PROFILE_MODEL_P (current_cpu
))
1042 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1043 m32rx_model_profile_insn (current_cpu
, abuf
);
1051 /* Perform cmpui: cmpui $src2,$simm16. */
1053 SEM_FN_NAME (m32rx
,cmpui
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1055 insn_t insn
= SEM_INSN (sem_arg
);
1056 #define OPRND(f) par_exec->operands.fmt_cmpi.f
1057 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1058 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1059 EXTRACT_FMT_CMPI_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1060 EXTRACT_FMT_CMPI_CODE
1062 CPU (h_cond
) = LTUSI (OPRND (src2
), OPRND (simm16
));
1063 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1065 #if WITH_PROFILE_MODEL_P
1066 if (PROFILE_MODEL_P (current_cpu
))
1068 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1069 m32rx_model_profile_insn (current_cpu
, abuf
);
1077 /* Perform cmpeq: cmpeq $src1,$src2. */
1079 SEM_FN_NAME (m32rx
,cmpeq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1081 insn_t insn
= SEM_INSN (sem_arg
);
1082 #define OPRND(f) par_exec->operands.fmt_cmp.f
1083 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1084 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1085 EXTRACT_FMT_CMP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1086 EXTRACT_FMT_CMP_CODE
1088 CPU (h_cond
) = EQSI (OPRND (src1
), OPRND (src2
));
1089 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1091 #if WITH_PROFILE_MODEL_P
1092 if (PROFILE_MODEL_P (current_cpu
))
1094 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1095 m32rx_model_profile_insn (current_cpu
, abuf
);
1103 /* Perform cmpz: cmpz $src2. */
1105 SEM_FN_NAME (m32rx
,cmpz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1107 insn_t insn
= SEM_INSN (sem_arg
);
1108 #define OPRND(f) par_exec->operands.fmt_cmpz.f
1109 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1110 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1111 EXTRACT_FMT_CMPZ_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1112 EXTRACT_FMT_CMPZ_CODE
1114 CPU (h_cond
) = EQSI (OPRND (src2
), 0);
1115 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1117 #if WITH_PROFILE_MODEL_P
1118 if (PROFILE_MODEL_P (current_cpu
))
1120 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1121 m32rx_model_profile_insn (current_cpu
, abuf
);
1129 /* Perform div: div $dr,$sr. */
1131 SEM_FN_NAME (m32rx
,div
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1133 insn_t insn
= SEM_INSN (sem_arg
);
1134 #define OPRND(f) par_exec->operands.fmt_div.f
1135 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1136 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1137 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1138 EXTRACT_FMT_DIV_CODE
1140 if (NESI (OPRND (sr
), 0)) {
1141 CPU (h_gr
[f_r1
]) = DIVSI (OPRND (dr
), OPRND (sr
));
1142 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1145 #if WITH_PROFILE_MODEL_P
1146 if (PROFILE_MODEL_P (current_cpu
))
1148 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1149 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1150 m32rx_model_profile_insn (current_cpu
, abuf
);
1158 /* Perform divu: divu $dr,$sr. */
1160 SEM_FN_NAME (m32rx
,divu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1162 insn_t insn
= SEM_INSN (sem_arg
);
1163 #define OPRND(f) par_exec->operands.fmt_div.f
1164 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1165 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1166 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1167 EXTRACT_FMT_DIV_CODE
1169 if (NESI (OPRND (sr
), 0)) {
1170 CPU (h_gr
[f_r1
]) = UDIVSI (OPRND (dr
), OPRND (sr
));
1171 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1174 #if WITH_PROFILE_MODEL_P
1175 if (PROFILE_MODEL_P (current_cpu
))
1177 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1178 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1179 m32rx_model_profile_insn (current_cpu
, abuf
);
1187 /* Perform rem: rem $dr,$sr. */
1189 SEM_FN_NAME (m32rx
,rem
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1191 insn_t insn
= SEM_INSN (sem_arg
);
1192 #define OPRND(f) par_exec->operands.fmt_div.f
1193 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1194 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1195 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1196 EXTRACT_FMT_DIV_CODE
1198 if (NESI (OPRND (sr
), 0)) {
1199 CPU (h_gr
[f_r1
]) = MODSI (OPRND (dr
), OPRND (sr
));
1200 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1203 #if WITH_PROFILE_MODEL_P
1204 if (PROFILE_MODEL_P (current_cpu
))
1206 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1207 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1208 m32rx_model_profile_insn (current_cpu
, abuf
);
1216 /* Perform remu: remu $dr,$sr. */
1218 SEM_FN_NAME (m32rx
,remu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1220 insn_t insn
= SEM_INSN (sem_arg
);
1221 #define OPRND(f) par_exec->operands.fmt_div.f
1222 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1223 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1224 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1225 EXTRACT_FMT_DIV_CODE
1227 if (NESI (OPRND (sr
), 0)) {
1228 CPU (h_gr
[f_r1
]) = UMODSI (OPRND (dr
), OPRND (sr
));
1229 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1232 #if WITH_PROFILE_MODEL_P
1233 if (PROFILE_MODEL_P (current_cpu
))
1235 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1236 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1237 m32rx_model_profile_insn (current_cpu
, abuf
);
1245 /* Perform divh: divh $dr,$sr. */
1247 SEM_FN_NAME (m32rx
,divh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1249 insn_t insn
= SEM_INSN (sem_arg
);
1250 #define OPRND(f) par_exec->operands.fmt_div.f
1251 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1252 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1253 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1254 EXTRACT_FMT_DIV_CODE
1256 if (NESI (OPRND (sr
), 0)) {
1257 CPU (h_gr
[f_r1
]) = DIVSI (EXTHISI (TRUNCSIHI (OPRND (dr
))), OPRND (sr
));
1258 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1261 #if WITH_PROFILE_MODEL_P
1262 if (PROFILE_MODEL_P (current_cpu
))
1264 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1265 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1266 m32rx_model_profile_insn (current_cpu
, abuf
);
1274 /* Perform jc: jc $sr. */
1276 SEM_FN_NAME (m32rx
,jc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1278 insn_t insn
= SEM_INSN (sem_arg
);
1279 #define OPRND(f) par_exec->operands.fmt_jc.f
1280 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1281 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1283 EXTRACT_FMT_JC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1286 if (OPRND (condbit
)) {
1287 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (OPRND (sr
), -4)));
1288 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
1291 #if WITH_PROFILE_MODEL_P
1292 if (PROFILE_MODEL_P (current_cpu
))
1294 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1295 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1303 /* Perform jnc: jnc $sr. */
1305 SEM_FN_NAME (m32rx
,jnc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1307 insn_t insn
= SEM_INSN (sem_arg
);
1308 #define OPRND(f) par_exec->operands.fmt_jc.f
1309 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1310 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1312 EXTRACT_FMT_JC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1315 if (NOTBI (OPRND (condbit
))) {
1316 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (OPRND (sr
), -4)));
1317 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
1320 #if WITH_PROFILE_MODEL_P
1321 if (PROFILE_MODEL_P (current_cpu
))
1323 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1324 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1332 /* Perform jl: jl $sr. */
1334 SEM_FN_NAME (m32rx
,jl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1336 insn_t insn
= SEM_INSN (sem_arg
);
1337 #define OPRND(f) par_exec->operands.fmt_jl.f
1338 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1339 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1341 EXTRACT_FMT_JL_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1346 temp0
= ADDSI (ANDSI (OPRND (pc
), -4), 4);
1348 CPU (h_gr
[14]) = temp0
;
1349 TRACE_RESULT (current_cpu
, "h-gr-14", 'x', CPU (h_gr
[14]));
1350 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, temp1
));
1351 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
1354 #if WITH_PROFILE_MODEL_P
1355 if (PROFILE_MODEL_P (current_cpu
))
1357 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1358 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1359 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1367 /* Perform jmp: jmp $sr. */
1369 SEM_FN_NAME (m32rx
,jmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1371 insn_t insn
= SEM_INSN (sem_arg
);
1372 #define OPRND(f) par_exec->operands.fmt_jmp.f
1373 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1374 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1376 EXTRACT_FMT_JMP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1377 EXTRACT_FMT_JMP_CODE
1379 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, OPRND (sr
)));
1380 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
1382 #if WITH_PROFILE_MODEL_P
1383 if (PROFILE_MODEL_P (current_cpu
))
1385 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1386 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1394 /* Perform ld: ld $dr,@$sr. */
1396 SEM_FN_NAME (m32rx
,ld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1398 insn_t insn
= SEM_INSN (sem_arg
);
1399 #define OPRND(f) par_exec->operands.fmt_ld.f
1400 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1401 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1402 EXTRACT_FMT_LD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1405 CPU (h_gr
[f_r1
]) = OPRND (h_memory_sr
);
1406 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1408 #if WITH_PROFILE_MODEL_P
1409 if (PROFILE_MODEL_P (current_cpu
))
1411 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1412 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1413 m32rx_model_profile_insn (current_cpu
, abuf
);
1421 /* Perform ld-d: ld $dr,@($slo16,$sr). */
1423 SEM_FN_NAME (m32rx
,ld_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1425 insn_t insn
= SEM_INSN (sem_arg
);
1426 #define OPRND(f) par_exec->operands.fmt_ld_d.f
1427 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1428 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1429 EXTRACT_FMT_LD_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1430 EXTRACT_FMT_LD_D_CODE
1432 CPU (h_gr
[f_r1
]) = OPRND (h_memory_add_WI_sr_slo16
);
1433 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1435 #if WITH_PROFILE_MODEL_P
1436 if (PROFILE_MODEL_P (current_cpu
))
1438 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1439 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1440 m32rx_model_profile_insn (current_cpu
, abuf
);
1448 /* Perform ldb: ldb $dr,@$sr. */
1450 SEM_FN_NAME (m32rx
,ldb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1452 insn_t insn
= SEM_INSN (sem_arg
);
1453 #define OPRND(f) par_exec->operands.fmt_ldb.f
1454 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1455 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1456 EXTRACT_FMT_LDB_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1457 EXTRACT_FMT_LDB_CODE
1459 CPU (h_gr
[f_r1
]) = EXTQISI (OPRND (h_memory_sr
));
1460 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1462 #if WITH_PROFILE_MODEL_P
1463 if (PROFILE_MODEL_P (current_cpu
))
1465 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1466 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1467 m32rx_model_profile_insn (current_cpu
, abuf
);
1475 /* Perform ldb-d: ldb $dr,@($slo16,$sr). */
1477 SEM_FN_NAME (m32rx
,ldb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1479 insn_t insn
= SEM_INSN (sem_arg
);
1480 #define OPRND(f) par_exec->operands.fmt_ldb_d.f
1481 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1482 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1483 EXTRACT_FMT_LDB_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1484 EXTRACT_FMT_LDB_D_CODE
1486 CPU (h_gr
[f_r1
]) = EXTQISI (OPRND (h_memory_add_WI_sr_slo16
));
1487 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1489 #if WITH_PROFILE_MODEL_P
1490 if (PROFILE_MODEL_P (current_cpu
))
1492 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1493 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1494 m32rx_model_profile_insn (current_cpu
, abuf
);
1502 /* Perform ldh: ldh $dr,@$sr. */
1504 SEM_FN_NAME (m32rx
,ldh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1506 insn_t insn
= SEM_INSN (sem_arg
);
1507 #define OPRND(f) par_exec->operands.fmt_ldh.f
1508 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1509 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1510 EXTRACT_FMT_LDH_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1511 EXTRACT_FMT_LDH_CODE
1513 CPU (h_gr
[f_r1
]) = EXTHISI (OPRND (h_memory_sr
));
1514 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1516 #if WITH_PROFILE_MODEL_P
1517 if (PROFILE_MODEL_P (current_cpu
))
1519 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1520 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1521 m32rx_model_profile_insn (current_cpu
, abuf
);
1529 /* Perform ldh-d: ldh $dr,@($slo16,$sr). */
1531 SEM_FN_NAME (m32rx
,ldh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1533 insn_t insn
= SEM_INSN (sem_arg
);
1534 #define OPRND(f) par_exec->operands.fmt_ldh_d.f
1535 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1536 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1537 EXTRACT_FMT_LDH_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1538 EXTRACT_FMT_LDH_D_CODE
1540 CPU (h_gr
[f_r1
]) = EXTHISI (OPRND (h_memory_add_WI_sr_slo16
));
1541 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1543 #if WITH_PROFILE_MODEL_P
1544 if (PROFILE_MODEL_P (current_cpu
))
1546 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1547 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1548 m32rx_model_profile_insn (current_cpu
, abuf
);
1556 /* Perform ldub: ldub $dr,@$sr. */
1558 SEM_FN_NAME (m32rx
,ldub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1560 insn_t insn
= SEM_INSN (sem_arg
);
1561 #define OPRND(f) par_exec->operands.fmt_ldb.f
1562 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1563 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1564 EXTRACT_FMT_LDB_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1565 EXTRACT_FMT_LDB_CODE
1567 CPU (h_gr
[f_r1
]) = ZEXTQISI (OPRND (h_memory_sr
));
1568 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1570 #if WITH_PROFILE_MODEL_P
1571 if (PROFILE_MODEL_P (current_cpu
))
1573 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1574 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1575 m32rx_model_profile_insn (current_cpu
, abuf
);
1583 /* Perform ldub-d: ldub $dr,@($slo16,$sr). */
1585 SEM_FN_NAME (m32rx
,ldub_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1587 insn_t insn
= SEM_INSN (sem_arg
);
1588 #define OPRND(f) par_exec->operands.fmt_ldb_d.f
1589 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1590 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1591 EXTRACT_FMT_LDB_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1592 EXTRACT_FMT_LDB_D_CODE
1594 CPU (h_gr
[f_r1
]) = ZEXTQISI (OPRND (h_memory_add_WI_sr_slo16
));
1595 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1597 #if WITH_PROFILE_MODEL_P
1598 if (PROFILE_MODEL_P (current_cpu
))
1600 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1601 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1602 m32rx_model_profile_insn (current_cpu
, abuf
);
1610 /* Perform lduh: lduh $dr,@$sr. */
1612 SEM_FN_NAME (m32rx
,lduh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1614 insn_t insn
= SEM_INSN (sem_arg
);
1615 #define OPRND(f) par_exec->operands.fmt_ldh.f
1616 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1617 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1618 EXTRACT_FMT_LDH_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1619 EXTRACT_FMT_LDH_CODE
1621 CPU (h_gr
[f_r1
]) = ZEXTHISI (OPRND (h_memory_sr
));
1622 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1624 #if WITH_PROFILE_MODEL_P
1625 if (PROFILE_MODEL_P (current_cpu
))
1627 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1628 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1629 m32rx_model_profile_insn (current_cpu
, abuf
);
1637 /* Perform lduh-d: lduh $dr,@($slo16,$sr). */
1639 SEM_FN_NAME (m32rx
,lduh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1641 insn_t insn
= SEM_INSN (sem_arg
);
1642 #define OPRND(f) par_exec->operands.fmt_ldh_d.f
1643 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1644 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1645 EXTRACT_FMT_LDH_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1646 EXTRACT_FMT_LDH_D_CODE
1648 CPU (h_gr
[f_r1
]) = ZEXTHISI (OPRND (h_memory_add_WI_sr_slo16
));
1649 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1651 #if WITH_PROFILE_MODEL_P
1652 if (PROFILE_MODEL_P (current_cpu
))
1654 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1655 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1656 m32rx_model_profile_insn (current_cpu
, abuf
);
1664 /* Perform ld-plus: ld $dr,@$sr+. */
1666 SEM_FN_NAME (m32rx
,ld_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1668 insn_t insn
= SEM_INSN (sem_arg
);
1669 #define OPRND(f) par_exec->operands.fmt_ld_plus.f
1670 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1671 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1672 EXTRACT_FMT_LD_PLUS_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1673 EXTRACT_FMT_LD_PLUS_CODE
1677 temp0
= OPRND (h_memory_sr
);
1678 temp1
= ADDSI (OPRND (sr
), 4);
1679 CPU (h_gr
[f_r1
]) = temp0
;
1680 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1681 CPU (h_gr
[f_r2
]) = temp1
;
1682 TRACE_RESULT (current_cpu
, "sr", 'x', CPU (h_gr
[f_r2
]));
1685 #if WITH_PROFILE_MODEL_P
1686 if (PROFILE_MODEL_P (current_cpu
))
1688 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1689 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1690 m32rx_model_profile_insn (current_cpu
, abuf
);
1698 /* Perform ld24: ld24 $dr,$uimm24. */
1700 SEM_FN_NAME (m32rx
,ld24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1702 insn_t insn
= SEM_INSN (sem_arg
);
1703 #define OPRND(f) par_exec->operands.fmt_ld24.f
1704 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1705 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1706 EXTRACT_FMT_LD24_VARS
/* f-op1 f-r1 f-uimm24 */
1707 EXTRACT_FMT_LD24_CODE
1709 CPU (h_gr
[f_r1
]) = OPRND (uimm24
);
1710 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1712 #if WITH_PROFILE_MODEL_P
1713 if (PROFILE_MODEL_P (current_cpu
))
1715 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1716 m32rx_model_profile_insn (current_cpu
, abuf
);
1724 /* Perform ldi8: ldi $dr,$simm8. */
1726 SEM_FN_NAME (m32rx
,ldi8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1728 insn_t insn
= SEM_INSN (sem_arg
);
1729 #define OPRND(f) par_exec->operands.fmt_ldi8.f
1730 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1731 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1732 EXTRACT_FMT_LDI8_VARS
/* f-op1 f-r1 f-simm8 */
1733 EXTRACT_FMT_LDI8_CODE
1735 CPU (h_gr
[f_r1
]) = OPRND (simm8
);
1736 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1738 #if WITH_PROFILE_MODEL_P
1739 if (PROFILE_MODEL_P (current_cpu
))
1741 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1742 m32rx_model_profile_insn (current_cpu
, abuf
);
1750 /* Perform ldi16: ldi $dr,$hash$slo16. */
1752 SEM_FN_NAME (m32rx
,ldi16
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1754 insn_t insn
= SEM_INSN (sem_arg
);
1755 #define OPRND(f) par_exec->operands.fmt_ldi16.f
1756 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1757 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1758 EXTRACT_FMT_LDI16_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1759 EXTRACT_FMT_LDI16_CODE
1761 CPU (h_gr
[f_r1
]) = OPRND (slo16
);
1762 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1764 #if WITH_PROFILE_MODEL_P
1765 if (PROFILE_MODEL_P (current_cpu
))
1767 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1768 m32rx_model_profile_insn (current_cpu
, abuf
);
1776 /* Perform lock: lock $dr,@$sr. */
1778 SEM_FN_NAME (m32rx
,lock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1780 insn_t insn
= SEM_INSN (sem_arg
);
1781 #define OPRND(f) par_exec->operands.fmt_lock.f
1782 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1783 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1784 EXTRACT_FMT_LOCK_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1785 EXTRACT_FMT_LOCK_CODE
1789 TRACE_RESULT (current_cpu
, "h-lock-0", 'x', CPU (h_lock
));
1790 CPU (h_gr
[f_r1
]) = OPRND (h_memory_sr
);
1791 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1794 #if WITH_PROFILE_MODEL_P
1795 if (PROFILE_MODEL_P (current_cpu
))
1797 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1798 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1799 m32rx_model_profile_insn (current_cpu
, abuf
);
1807 /* Perform machi-a: machi $src1,$src2,$acc. */
1809 SEM_FN_NAME (m32rx
,machi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1811 insn_t insn
= SEM_INSN (sem_arg
);
1812 #define OPRND(f) par_exec->operands.fmt_machi_a.f
1813 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1814 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1815 EXTRACT_FMT_MACHI_A_VARS
/* f-op1 f-r1 f-acc f-op23 f-r2 */
1816 EXTRACT_FMT_MACHI_A_CODE
1818 m32rx_h_accums_set (current_cpu
, f_acc
, SRADI (SLLDI (ADDDI (OPRND (acc
), MULDI (EXTSIDI (ANDSI (OPRND (src1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2
), 16))))), 8), 8));
1819 TRACE_RESULT (current_cpu
, "acc", 'D', m32rx_h_accums_get (current_cpu
, f_acc
));
1821 #if WITH_PROFILE_MODEL_P
1822 if (PROFILE_MODEL_P (current_cpu
))
1824 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1825 m32rx_model_profile_insn (current_cpu
, abuf
);
1833 /* Perform maclo-a: maclo $src1,$src2,$acc. */
1835 SEM_FN_NAME (m32rx
,maclo_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1837 insn_t insn
= SEM_INSN (sem_arg
);
1838 #define OPRND(f) par_exec->operands.fmt_machi_a.f
1839 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1840 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1841 EXTRACT_FMT_MACHI_A_VARS
/* f-op1 f-r1 f-acc f-op23 f-r2 */
1842 EXTRACT_FMT_MACHI_A_CODE
1844 m32rx_h_accums_set (current_cpu
, f_acc
, SRADI (SLLDI (ADDDI (OPRND (acc
), MULDI (EXTSIDI (SLLSI (OPRND (src1
), 16)), EXTHIDI (TRUNCSIHI (OPRND (src2
))))), 8), 8));
1845 TRACE_RESULT (current_cpu
, "acc", 'D', m32rx_h_accums_get (current_cpu
, f_acc
));
1847 #if WITH_PROFILE_MODEL_P
1848 if (PROFILE_MODEL_P (current_cpu
))
1850 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1851 m32rx_model_profile_insn (current_cpu
, abuf
);
1859 /* Perform macwhi: macwhi $src1,$src2. */
1861 SEM_FN_NAME (m32rx
,macwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1863 insn_t insn
= SEM_INSN (sem_arg
);
1864 #define OPRND(f) par_exec->operands.fmt_macwhi.f
1865 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1866 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1867 EXTRACT_FMT_MACWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1868 EXTRACT_FMT_MACWHI_CODE
1870 CPU (h_accum
) = SRADI (SLLDI (ADDDI (OPRND (accum
), MULDI (EXTSIDI (OPRND (src1
)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2
), 16))))), 8), 8);
1871 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1873 #if WITH_PROFILE_MODEL_P
1874 if (PROFILE_MODEL_P (current_cpu
))
1876 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1877 m32rx_model_profile_insn (current_cpu
, abuf
);
1885 /* Perform macwlo: macwlo $src1,$src2. */
1887 SEM_FN_NAME (m32rx
,macwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1889 insn_t insn
= SEM_INSN (sem_arg
);
1890 #define OPRND(f) par_exec->operands.fmt_macwhi.f
1891 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1892 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1893 EXTRACT_FMT_MACWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1894 EXTRACT_FMT_MACWHI_CODE
1896 CPU (h_accum
) = SRADI (SLLDI (ADDDI (OPRND (accum
), MULDI (EXTSIDI (OPRND (src1
)), EXTHIDI (TRUNCSIHI (OPRND (src2
))))), 8), 8);
1897 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
1899 #if WITH_PROFILE_MODEL_P
1900 if (PROFILE_MODEL_P (current_cpu
))
1902 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1903 m32rx_model_profile_insn (current_cpu
, abuf
);
1911 /* Perform mul: mul $dr,$sr. */
1913 SEM_FN_NAME (m32rx
,mul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1915 insn_t insn
= SEM_INSN (sem_arg
);
1916 #define OPRND(f) par_exec->operands.fmt_add.f
1917 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1918 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1919 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1920 EXTRACT_FMT_ADD_CODE
1922 CPU (h_gr
[f_r1
]) = MULSI (OPRND (dr
), OPRND (sr
));
1923 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1925 #if WITH_PROFILE_MODEL_P
1926 if (PROFILE_MODEL_P (current_cpu
))
1928 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1929 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1930 m32rx_model_profile_insn (current_cpu
, abuf
);
1938 /* Perform mulhi-a: mulhi $src1,$src2,$acc. */
1940 SEM_FN_NAME (m32rx
,mulhi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1942 insn_t insn
= SEM_INSN (sem_arg
);
1943 #define OPRND(f) par_exec->operands.fmt_mulhi_a.f
1944 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1945 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1946 EXTRACT_FMT_MULHI_A_VARS
/* f-op1 f-r1 f-acc f-op23 f-r2 */
1947 EXTRACT_FMT_MULHI_A_CODE
1949 m32rx_h_accums_set (current_cpu
, f_acc
, SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (OPRND (src1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2
), 16)))), 16), 16));
1950 TRACE_RESULT (current_cpu
, "acc", 'D', m32rx_h_accums_get (current_cpu
, f_acc
));
1952 #if WITH_PROFILE_MODEL_P
1953 if (PROFILE_MODEL_P (current_cpu
))
1955 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1956 m32rx_model_profile_insn (current_cpu
, abuf
);
1964 /* Perform mullo-a: mullo $src1,$src2,$acc. */
1966 SEM_FN_NAME (m32rx
,mullo_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1968 insn_t insn
= SEM_INSN (sem_arg
);
1969 #define OPRND(f) par_exec->operands.fmt_mulhi_a.f
1970 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1971 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1972 EXTRACT_FMT_MULHI_A_VARS
/* f-op1 f-r1 f-acc f-op23 f-r2 */
1973 EXTRACT_FMT_MULHI_A_CODE
1975 m32rx_h_accums_set (current_cpu
, f_acc
, SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (OPRND (src1
), 16)), EXTHIDI (TRUNCSIHI (OPRND (src2
)))), 16), 16));
1976 TRACE_RESULT (current_cpu
, "acc", 'D', m32rx_h_accums_get (current_cpu
, f_acc
));
1978 #if WITH_PROFILE_MODEL_P
1979 if (PROFILE_MODEL_P (current_cpu
))
1981 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1982 m32rx_model_profile_insn (current_cpu
, abuf
);
1990 /* Perform mulwhi: mulwhi $src1,$src2. */
1992 SEM_FN_NAME (m32rx
,mulwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1994 insn_t insn
= SEM_INSN (sem_arg
);
1995 #define OPRND(f) par_exec->operands.fmt_mulwhi.f
1996 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1997 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1998 EXTRACT_FMT_MULWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1999 EXTRACT_FMT_MULWHI_CODE
2001 CPU (h_accum
) = SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1
)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2
), 16)))), 8), 8);
2002 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
2004 #if WITH_PROFILE_MODEL_P
2005 if (PROFILE_MODEL_P (current_cpu
))
2007 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2008 m32rx_model_profile_insn (current_cpu
, abuf
);
2016 /* Perform mulwlo: mulwlo $src1,$src2. */
2018 SEM_FN_NAME (m32rx
,mulwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2020 insn_t insn
= SEM_INSN (sem_arg
);
2021 #define OPRND(f) par_exec->operands.fmt_mulwhi.f
2022 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2023 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2024 EXTRACT_FMT_MULWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2025 EXTRACT_FMT_MULWHI_CODE
2027 CPU (h_accum
) = SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1
)), EXTHIDI (TRUNCSIHI (OPRND (src2
)))), 8), 8);
2028 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
2030 #if WITH_PROFILE_MODEL_P
2031 if (PROFILE_MODEL_P (current_cpu
))
2033 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2034 m32rx_model_profile_insn (current_cpu
, abuf
);
2042 /* Perform mv: mv $dr,$sr. */
2044 SEM_FN_NAME (m32rx
,mv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2046 insn_t insn
= SEM_INSN (sem_arg
);
2047 #define OPRND(f) par_exec->operands.fmt_mv.f
2048 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2049 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2050 EXTRACT_FMT_MV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2053 CPU (h_gr
[f_r1
]) = OPRND (sr
);
2054 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2056 #if WITH_PROFILE_MODEL_P
2057 if (PROFILE_MODEL_P (current_cpu
))
2059 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2060 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2061 m32rx_model_profile_insn (current_cpu
, abuf
);
2069 /* Perform mvfachi-a: mvfachi $dr,$accs. */
2071 SEM_FN_NAME (m32rx
,mvfachi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2073 insn_t insn
= SEM_INSN (sem_arg
);
2074 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2075 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2076 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2077 EXTRACT_FMT_MVFACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2078 EXTRACT_FMT_MVFACHI_A_CODE
2080 CPU (h_gr
[f_r1
]) = TRUNCDISI (SRADI (OPRND (accs
), 32));
2081 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2083 #if WITH_PROFILE_MODEL_P
2084 if (PROFILE_MODEL_P (current_cpu
))
2086 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2087 m32rx_model_profile_insn (current_cpu
, abuf
);
2095 /* Perform mvfaclo-a: mvfaclo $dr,$accs. */
2097 SEM_FN_NAME (m32rx
,mvfaclo_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2099 insn_t insn
= SEM_INSN (sem_arg
);
2100 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2101 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2102 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2103 EXTRACT_FMT_MVFACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2104 EXTRACT_FMT_MVFACHI_A_CODE
2106 CPU (h_gr
[f_r1
]) = TRUNCDISI (OPRND (accs
));
2107 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2109 #if WITH_PROFILE_MODEL_P
2110 if (PROFILE_MODEL_P (current_cpu
))
2112 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2113 m32rx_model_profile_insn (current_cpu
, abuf
);
2121 /* Perform mvfacmi-a: mvfacmi $dr,$accs. */
2123 SEM_FN_NAME (m32rx
,mvfacmi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2125 insn_t insn
= SEM_INSN (sem_arg
);
2126 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2127 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2128 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2129 EXTRACT_FMT_MVFACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2130 EXTRACT_FMT_MVFACHI_A_CODE
2132 CPU (h_gr
[f_r1
]) = TRUNCDISI (SRADI (OPRND (accs
), 16));
2133 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2135 #if WITH_PROFILE_MODEL_P
2136 if (PROFILE_MODEL_P (current_cpu
))
2138 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2139 m32rx_model_profile_insn (current_cpu
, abuf
);
2147 /* Perform mvfc: mvfc $dr,$scr. */
2149 SEM_FN_NAME (m32rx
,mvfc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2151 insn_t insn
= SEM_INSN (sem_arg
);
2152 #define OPRND(f) par_exec->operands.fmt_mvfc.f
2153 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2154 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2155 EXTRACT_FMT_MVFC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2156 EXTRACT_FMT_MVFC_CODE
2158 CPU (h_gr
[f_r1
]) = OPRND (scr
);
2159 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2161 #if WITH_PROFILE_MODEL_P
2162 if (PROFILE_MODEL_P (current_cpu
))
2164 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2165 m32rx_model_profile_insn (current_cpu
, abuf
);
2173 /* Perform mvtachi-a: mvtachi $src1,$accs. */
2175 SEM_FN_NAME (m32rx
,mvtachi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2177 insn_t insn
= SEM_INSN (sem_arg
);
2178 #define OPRND(f) par_exec->operands.fmt_mvtachi_a.f
2179 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2180 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2181 EXTRACT_FMT_MVTACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2182 EXTRACT_FMT_MVTACHI_A_CODE
2184 m32rx_h_accums_set (current_cpu
, f_accs
, ORDI (ANDDI (OPRND (accs
), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (OPRND (src1
)), 32)));
2185 TRACE_RESULT (current_cpu
, "accs", 'D', m32rx_h_accums_get (current_cpu
, f_accs
));
2187 #if WITH_PROFILE_MODEL_P
2188 if (PROFILE_MODEL_P (current_cpu
))
2190 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2191 m32rx_model_profile_insn (current_cpu
, abuf
);
2199 /* Perform mvtaclo-a: mvtaclo $src1,$accs. */
2201 SEM_FN_NAME (m32rx
,mvtaclo_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2203 insn_t insn
= SEM_INSN (sem_arg
);
2204 #define OPRND(f) par_exec->operands.fmt_mvtachi_a.f
2205 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2206 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2207 EXTRACT_FMT_MVTACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2208 EXTRACT_FMT_MVTACHI_A_CODE
2210 m32rx_h_accums_set (current_cpu
, f_accs
, ORDI (ANDDI (OPRND (accs
), MAKEDI (0xffffffff, 0)), ZEXTSIDI (OPRND (src1
))));
2211 TRACE_RESULT (current_cpu
, "accs", 'D', m32rx_h_accums_get (current_cpu
, f_accs
));
2213 #if WITH_PROFILE_MODEL_P
2214 if (PROFILE_MODEL_P (current_cpu
))
2216 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2217 m32rx_model_profile_insn (current_cpu
, abuf
);
2225 /* Perform mvtc: mvtc $sr,$dcr. */
2227 SEM_FN_NAME (m32rx
,mvtc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2229 insn_t insn
= SEM_INSN (sem_arg
);
2230 #define OPRND(f) par_exec->operands.fmt_mvtc.f
2231 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2232 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2233 EXTRACT_FMT_MVTC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2234 EXTRACT_FMT_MVTC_CODE
2236 m32rx_h_cr_set (current_cpu
, f_r1
, OPRND (sr
));
2237 TRACE_RESULT (current_cpu
, "dcr", 'x', m32rx_h_cr_get (current_cpu
, f_r1
));
2239 #if WITH_PROFILE_MODEL_P
2240 if (PROFILE_MODEL_P (current_cpu
))
2242 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2243 m32rx_model_profile_insn (current_cpu
, abuf
);
2251 /* Perform neg: neg $dr,$sr. */
2253 SEM_FN_NAME (m32rx
,neg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2255 insn_t insn
= SEM_INSN (sem_arg
);
2256 #define OPRND(f) par_exec->operands.fmt_mv.f
2257 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2258 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2259 EXTRACT_FMT_MV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2262 CPU (h_gr
[f_r1
]) = NEGSI (OPRND (sr
));
2263 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2265 #if WITH_PROFILE_MODEL_P
2266 if (PROFILE_MODEL_P (current_cpu
))
2268 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2269 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2270 m32rx_model_profile_insn (current_cpu
, abuf
);
2278 /* Perform nop: nop. */
2280 SEM_FN_NAME (m32rx
,nop
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2282 insn_t insn
= SEM_INSN (sem_arg
);
2283 #define OPRND(f) par_exec->operands.fmt_nop.f
2284 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2285 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2286 EXTRACT_FMT_NOP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2287 EXTRACT_FMT_NOP_CODE
2289 PROFILE_COUNT_FILLNOPS (current_cpu
, abuf
->addr
);
2291 #if WITH_PROFILE_MODEL_P
2292 if (PROFILE_MODEL_P (current_cpu
))
2294 m32rx_model_profile_insn (current_cpu
, abuf
);
2302 /* Perform not: not $dr,$sr. */
2304 SEM_FN_NAME (m32rx
,not) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2306 insn_t insn
= SEM_INSN (sem_arg
);
2307 #define OPRND(f) par_exec->operands.fmt_mv.f
2308 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2309 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2310 EXTRACT_FMT_MV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2313 CPU (h_gr
[f_r1
]) = INVSI (OPRND (sr
));
2314 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2316 #if WITH_PROFILE_MODEL_P
2317 if (PROFILE_MODEL_P (current_cpu
))
2319 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2320 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2321 m32rx_model_profile_insn (current_cpu
, abuf
);
2329 /* Perform rac-dsi: rac $accd,$accs,$imm1. */
2331 SEM_FN_NAME (m32rx
,rac_dsi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2333 insn_t insn
= SEM_INSN (sem_arg
);
2334 #define OPRND(f) par_exec->operands.fmt_rac_dsi.f
2335 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2336 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2337 EXTRACT_FMT_RAC_DSI_VARS
/* f-op1 f-accd f-bits67 f-op2 f-accs f-bit14 f-imm1 */
2338 EXTRACT_FMT_RAC_DSI_CODE
2342 tmp_tmp1
= SLLDI (OPRND (accs
), OPRND (imm1
));
2343 tmp_tmp1
= ADDDI (tmp_tmp1
, MAKEDI (0, 32768));
2344 m32rx_h_accums_set (current_cpu
, f_accd
, (GTDI (tmp_tmp1
, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1
, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1
, MAKEDI (0xffffffff, 0xffff0000))));
2345 TRACE_RESULT (current_cpu
, "accd", 'D', m32rx_h_accums_get (current_cpu
, f_accd
));
2348 #if WITH_PROFILE_MODEL_P
2349 if (PROFILE_MODEL_P (current_cpu
))
2351 m32rx_model_profile_insn (current_cpu
, abuf
);
2359 /* Perform rach-dsi: rach $accd,$accs,$imm1. */
2361 SEM_FN_NAME (m32rx
,rach_dsi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2363 insn_t insn
= SEM_INSN (sem_arg
);
2364 #define OPRND(f) par_exec->operands.fmt_rac_dsi.f
2365 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2366 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2367 EXTRACT_FMT_RAC_DSI_VARS
/* f-op1 f-accd f-bits67 f-op2 f-accs f-bit14 f-imm1 */
2368 EXTRACT_FMT_RAC_DSI_CODE
2372 tmp_tmp1
= SLLDI (OPRND (accs
), OPRND (imm1
));
2373 tmp_tmp1
= ADDDI (tmp_tmp1
, MAKEDI (0, 0x80000000));
2374 m32rx_h_accums_set (current_cpu
, f_accd
, (GTDI (tmp_tmp1
, MAKEDI (32767, 0))) ? (MAKEDI (32767, 0)) : (LTDI (tmp_tmp1
, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1
, MAKEDI (0xffffffff, 0))));
2375 TRACE_RESULT (current_cpu
, "accd", 'D', m32rx_h_accums_get (current_cpu
, f_accd
));
2378 #if WITH_PROFILE_MODEL_P
2379 if (PROFILE_MODEL_P (current_cpu
))
2381 m32rx_model_profile_insn (current_cpu
, abuf
);
2389 /* Perform rte: rte. */
2391 SEM_FN_NAME (m32rx
,rte
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2393 insn_t insn
= SEM_INSN (sem_arg
);
2394 #define OPRND(f) par_exec->operands.fmt_rte.f
2395 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2396 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2398 EXTRACT_FMT_RTE_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2399 EXTRACT_FMT_RTE_CODE
2402 CPU (h_sm
) = OPRND (h_bsm_0
);
2403 TRACE_RESULT (current_cpu
, "h-sm-0", 'x', CPU (h_sm
));
2404 CPU (h_ie
) = OPRND (h_bie_0
);
2405 TRACE_RESULT (current_cpu
, "h-ie-0", 'x', CPU (h_ie
));
2406 CPU (h_cond
) = OPRND (h_bcond_0
);
2407 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2408 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (OPRND (h_bpc_0
), -4)));
2409 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
2412 #if WITH_PROFILE_MODEL_P
2413 if (PROFILE_MODEL_P (current_cpu
))
2415 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
2423 /* Perform seth: seth $dr,$hash$hi16. */
2425 SEM_FN_NAME (m32rx
,seth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2427 insn_t insn
= SEM_INSN (sem_arg
);
2428 #define OPRND(f) par_exec->operands.fmt_seth.f
2429 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2430 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2431 EXTRACT_FMT_SETH_VARS
/* f-op1 f-r1 f-op2 f-r2 f-hi16 */
2432 EXTRACT_FMT_SETH_CODE
2434 CPU (h_gr
[f_r1
]) = SLLSI (OPRND (hi16
), 16);
2435 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2437 #if WITH_PROFILE_MODEL_P
2438 if (PROFILE_MODEL_P (current_cpu
))
2440 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2441 m32rx_model_profile_insn (current_cpu
, abuf
);
2449 /* Perform sll: sll $dr,$sr. */
2451 SEM_FN_NAME (m32rx
,sll
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2453 insn_t insn
= SEM_INSN (sem_arg
);
2454 #define OPRND(f) par_exec->operands.fmt_add.f
2455 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2456 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2457 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2458 EXTRACT_FMT_ADD_CODE
2460 CPU (h_gr
[f_r1
]) = SLLSI (OPRND (dr
), ANDSI (OPRND (sr
), 31));
2461 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2463 #if WITH_PROFILE_MODEL_P
2464 if (PROFILE_MODEL_P (current_cpu
))
2466 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2467 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2468 m32rx_model_profile_insn (current_cpu
, abuf
);
2476 /* Perform sll3: sll3 $dr,$sr,$simm16. */
2478 SEM_FN_NAME (m32rx
,sll3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2480 insn_t insn
= SEM_INSN (sem_arg
);
2481 #define OPRND(f) par_exec->operands.fmt_sll3.f
2482 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2483 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2484 EXTRACT_FMT_SLL3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2485 EXTRACT_FMT_SLL3_CODE
2487 CPU (h_gr
[f_r1
]) = SLLSI (OPRND (sr
), ANDSI (OPRND (simm16
), 31));
2488 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2490 #if WITH_PROFILE_MODEL_P
2491 if (PROFILE_MODEL_P (current_cpu
))
2493 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2494 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2495 m32rx_model_profile_insn (current_cpu
, abuf
);
2503 /* Perform slli: slli $dr,$uimm5. */
2505 SEM_FN_NAME (m32rx
,slli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2507 insn_t insn
= SEM_INSN (sem_arg
);
2508 #define OPRND(f) par_exec->operands.fmt_slli.f
2509 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2510 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2511 EXTRACT_FMT_SLLI_VARS
/* f-op1 f-r1 f-shift-op2 f-uimm5 */
2512 EXTRACT_FMT_SLLI_CODE
2514 CPU (h_gr
[f_r1
]) = SLLSI (OPRND (dr
), OPRND (uimm5
));
2515 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2517 #if WITH_PROFILE_MODEL_P
2518 if (PROFILE_MODEL_P (current_cpu
))
2520 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2521 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2522 m32rx_model_profile_insn (current_cpu
, abuf
);
2530 /* Perform sra: sra $dr,$sr. */
2532 SEM_FN_NAME (m32rx
,sra
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2534 insn_t insn
= SEM_INSN (sem_arg
);
2535 #define OPRND(f) par_exec->operands.fmt_add.f
2536 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2537 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2538 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2539 EXTRACT_FMT_ADD_CODE
2541 CPU (h_gr
[f_r1
]) = SRASI (OPRND (dr
), ANDSI (OPRND (sr
), 31));
2542 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2544 #if WITH_PROFILE_MODEL_P
2545 if (PROFILE_MODEL_P (current_cpu
))
2547 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2548 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2549 m32rx_model_profile_insn (current_cpu
, abuf
);
2557 /* Perform sra3: sra3 $dr,$sr,$simm16. */
2559 SEM_FN_NAME (m32rx
,sra3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2561 insn_t insn
= SEM_INSN (sem_arg
);
2562 #define OPRND(f) par_exec->operands.fmt_sll3.f
2563 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2564 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2565 EXTRACT_FMT_SLL3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2566 EXTRACT_FMT_SLL3_CODE
2568 CPU (h_gr
[f_r1
]) = SRASI (OPRND (sr
), ANDSI (OPRND (simm16
), 31));
2569 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2571 #if WITH_PROFILE_MODEL_P
2572 if (PROFILE_MODEL_P (current_cpu
))
2574 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2575 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2576 m32rx_model_profile_insn (current_cpu
, abuf
);
2584 /* Perform srai: srai $dr,$uimm5. */
2586 SEM_FN_NAME (m32rx
,srai
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2588 insn_t insn
= SEM_INSN (sem_arg
);
2589 #define OPRND(f) par_exec->operands.fmt_slli.f
2590 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2591 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2592 EXTRACT_FMT_SLLI_VARS
/* f-op1 f-r1 f-shift-op2 f-uimm5 */
2593 EXTRACT_FMT_SLLI_CODE
2595 CPU (h_gr
[f_r1
]) = SRASI (OPRND (dr
), OPRND (uimm5
));
2596 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2598 #if WITH_PROFILE_MODEL_P
2599 if (PROFILE_MODEL_P (current_cpu
))
2601 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2602 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2603 m32rx_model_profile_insn (current_cpu
, abuf
);
2611 /* Perform srl: srl $dr,$sr. */
2613 SEM_FN_NAME (m32rx
,srl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2615 insn_t insn
= SEM_INSN (sem_arg
);
2616 #define OPRND(f) par_exec->operands.fmt_add.f
2617 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2618 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2619 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2620 EXTRACT_FMT_ADD_CODE
2622 CPU (h_gr
[f_r1
]) = SRLSI (OPRND (dr
), ANDSI (OPRND (sr
), 31));
2623 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2625 #if WITH_PROFILE_MODEL_P
2626 if (PROFILE_MODEL_P (current_cpu
))
2628 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2629 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2630 m32rx_model_profile_insn (current_cpu
, abuf
);
2638 /* Perform srl3: srl3 $dr,$sr,$simm16. */
2640 SEM_FN_NAME (m32rx
,srl3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2642 insn_t insn
= SEM_INSN (sem_arg
);
2643 #define OPRND(f) par_exec->operands.fmt_sll3.f
2644 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2645 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2646 EXTRACT_FMT_SLL3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2647 EXTRACT_FMT_SLL3_CODE
2649 CPU (h_gr
[f_r1
]) = SRLSI (OPRND (sr
), ANDSI (OPRND (simm16
), 31));
2650 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2652 #if WITH_PROFILE_MODEL_P
2653 if (PROFILE_MODEL_P (current_cpu
))
2655 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2656 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2657 m32rx_model_profile_insn (current_cpu
, abuf
);
2665 /* Perform srli: srli $dr,$uimm5. */
2667 SEM_FN_NAME (m32rx
,srli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2669 insn_t insn
= SEM_INSN (sem_arg
);
2670 #define OPRND(f) par_exec->operands.fmt_slli.f
2671 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2672 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2673 EXTRACT_FMT_SLLI_VARS
/* f-op1 f-r1 f-shift-op2 f-uimm5 */
2674 EXTRACT_FMT_SLLI_CODE
2676 CPU (h_gr
[f_r1
]) = SRLSI (OPRND (dr
), OPRND (uimm5
));
2677 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2679 #if WITH_PROFILE_MODEL_P
2680 if (PROFILE_MODEL_P (current_cpu
))
2682 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2683 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2684 m32rx_model_profile_insn (current_cpu
, abuf
);
2692 /* Perform st: st $src1,@$src2. */
2694 SEM_FN_NAME (m32rx
,st
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2696 insn_t insn
= SEM_INSN (sem_arg
);
2697 #define OPRND(f) par_exec->operands.fmt_st.f
2698 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2699 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2700 EXTRACT_FMT_ST_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2703 SETMEMSI (current_cpu
, OPRND (src2
), OPRND (src1
));
2704 TRACE_RESULT (current_cpu
, "h-memory-src2", 'x', GETMEMSI (current_cpu
, OPRND (src2
)));
2706 #if WITH_PROFILE_MODEL_P
2707 if (PROFILE_MODEL_P (current_cpu
))
2709 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2710 m32rx_model_profile_insn (current_cpu
, abuf
);
2718 /* Perform st-d: st $src1,@($slo16,$src2). */
2720 SEM_FN_NAME (m32rx
,st_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2722 insn_t insn
= SEM_INSN (sem_arg
);
2723 #define OPRND(f) par_exec->operands.fmt_st_d.f
2724 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2725 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2726 EXTRACT_FMT_ST_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2727 EXTRACT_FMT_ST_D_CODE
2729 SETMEMSI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
)), OPRND (src1
));
2730 TRACE_RESULT (current_cpu
, "h-memory-add-WI-src2-slo16", 'x', GETMEMSI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
))));
2732 #if WITH_PROFILE_MODEL_P
2733 if (PROFILE_MODEL_P (current_cpu
))
2735 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2736 m32rx_model_profile_insn (current_cpu
, abuf
);
2744 /* Perform stb: stb $src1,@$src2. */
2746 SEM_FN_NAME (m32rx
,stb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2748 insn_t insn
= SEM_INSN (sem_arg
);
2749 #define OPRND(f) par_exec->operands.fmt_stb.f
2750 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2751 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2752 EXTRACT_FMT_STB_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2753 EXTRACT_FMT_STB_CODE
2755 SETMEMQI (current_cpu
, OPRND (src2
), OPRND (src1
));
2756 TRACE_RESULT (current_cpu
, "h-memory-src2", 'x', GETMEMQI (current_cpu
, OPRND (src2
)));
2758 #if WITH_PROFILE_MODEL_P
2759 if (PROFILE_MODEL_P (current_cpu
))
2761 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2762 m32rx_model_profile_insn (current_cpu
, abuf
);
2770 /* Perform stb-d: stb $src1,@($slo16,$src2). */
2772 SEM_FN_NAME (m32rx
,stb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2774 insn_t insn
= SEM_INSN (sem_arg
);
2775 #define OPRND(f) par_exec->operands.fmt_stb_d.f
2776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2777 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2778 EXTRACT_FMT_STB_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2779 EXTRACT_FMT_STB_D_CODE
2781 SETMEMQI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
)), OPRND (src1
));
2782 TRACE_RESULT (current_cpu
, "h-memory-add-WI-src2-slo16", 'x', GETMEMQI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
))));
2784 #if WITH_PROFILE_MODEL_P
2785 if (PROFILE_MODEL_P (current_cpu
))
2787 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2788 m32rx_model_profile_insn (current_cpu
, abuf
);
2796 /* Perform sth: sth $src1,@$src2. */
2798 SEM_FN_NAME (m32rx
,sth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2800 insn_t insn
= SEM_INSN (sem_arg
);
2801 #define OPRND(f) par_exec->operands.fmt_sth.f
2802 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2803 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2804 EXTRACT_FMT_STH_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2805 EXTRACT_FMT_STH_CODE
2807 SETMEMHI (current_cpu
, OPRND (src2
), OPRND (src1
));
2808 TRACE_RESULT (current_cpu
, "h-memory-src2", 'x', GETMEMHI (current_cpu
, OPRND (src2
)));
2810 #if WITH_PROFILE_MODEL_P
2811 if (PROFILE_MODEL_P (current_cpu
))
2813 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2814 m32rx_model_profile_insn (current_cpu
, abuf
);
2822 /* Perform sth-d: sth $src1,@($slo16,$src2). */
2824 SEM_FN_NAME (m32rx
,sth_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2826 insn_t insn
= SEM_INSN (sem_arg
);
2827 #define OPRND(f) par_exec->operands.fmt_sth_d.f
2828 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2829 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2830 EXTRACT_FMT_STH_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2831 EXTRACT_FMT_STH_D_CODE
2833 SETMEMHI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
)), OPRND (src1
));
2834 TRACE_RESULT (current_cpu
, "h-memory-add-WI-src2-slo16", 'x', GETMEMHI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
))));
2836 #if WITH_PROFILE_MODEL_P
2837 if (PROFILE_MODEL_P (current_cpu
))
2839 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2840 m32rx_model_profile_insn (current_cpu
, abuf
);
2848 /* Perform st-plus: st $src1,@+$src2. */
2850 SEM_FN_NAME (m32rx
,st_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2852 insn_t insn
= SEM_INSN (sem_arg
);
2853 #define OPRND(f) par_exec->operands.fmt_st_plus.f
2854 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2855 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2856 EXTRACT_FMT_ST_PLUS_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2857 EXTRACT_FMT_ST_PLUS_CODE
2861 tmp_new_src2
= ADDSI (OPRND (src2
), 4);
2862 SETMEMSI (current_cpu
, tmp_new_src2
, OPRND (src1
));
2863 TRACE_RESULT (current_cpu
, "h-memory-new-src2", 'x', GETMEMSI (current_cpu
, tmp_new_src2
));
2864 CPU (h_gr
[f_r2
]) = tmp_new_src2
;
2865 TRACE_RESULT (current_cpu
, "src2", 'x', CPU (h_gr
[f_r2
]));
2868 #if WITH_PROFILE_MODEL_P
2869 if (PROFILE_MODEL_P (current_cpu
))
2871 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2872 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2873 m32rx_model_profile_insn (current_cpu
, abuf
);
2881 /* Perform st-minus: st $src1,@-$src2. */
2883 SEM_FN_NAME (m32rx
,st_minus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2885 insn_t insn
= SEM_INSN (sem_arg
);
2886 #define OPRND(f) par_exec->operands.fmt_st_plus.f
2887 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2888 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2889 EXTRACT_FMT_ST_PLUS_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2890 EXTRACT_FMT_ST_PLUS_CODE
2894 tmp_new_src2
= SUBSI (OPRND (src2
), 4);
2895 SETMEMSI (current_cpu
, tmp_new_src2
, OPRND (src1
));
2896 TRACE_RESULT (current_cpu
, "h-memory-new-src2", 'x', GETMEMSI (current_cpu
, tmp_new_src2
));
2897 CPU (h_gr
[f_r2
]) = tmp_new_src2
;
2898 TRACE_RESULT (current_cpu
, "src2", 'x', CPU (h_gr
[f_r2
]));
2901 #if WITH_PROFILE_MODEL_P
2902 if (PROFILE_MODEL_P (current_cpu
))
2904 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2905 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2906 m32rx_model_profile_insn (current_cpu
, abuf
);
2914 /* Perform sub: sub $dr,$sr. */
2916 SEM_FN_NAME (m32rx
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2918 insn_t insn
= SEM_INSN (sem_arg
);
2919 #define OPRND(f) par_exec->operands.fmt_add.f
2920 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2921 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2922 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2923 EXTRACT_FMT_ADD_CODE
2925 CPU (h_gr
[f_r1
]) = SUBSI (OPRND (dr
), OPRND (sr
));
2926 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2928 #if WITH_PROFILE_MODEL_P
2929 if (PROFILE_MODEL_P (current_cpu
))
2931 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2932 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2933 m32rx_model_profile_insn (current_cpu
, abuf
);
2941 /* Perform subv: subv $dr,$sr. */
2943 SEM_FN_NAME (m32rx
,subv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2945 insn_t insn
= SEM_INSN (sem_arg
);
2946 #define OPRND(f) par_exec->operands.fmt_addv.f
2947 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2948 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2949 EXTRACT_FMT_ADDV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2950 EXTRACT_FMT_ADDV_CODE
2954 temp0
= SUBSI (OPRND (dr
), OPRND (sr
));
2955 temp1
= SUBOFSI (OPRND (dr
), OPRND (sr
), 0);
2956 CPU (h_gr
[f_r1
]) = temp0
;
2957 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2958 CPU (h_cond
) = temp1
;
2959 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2962 #if WITH_PROFILE_MODEL_P
2963 if (PROFILE_MODEL_P (current_cpu
))
2965 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2966 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2967 m32rx_model_profile_insn (current_cpu
, abuf
);
2975 /* Perform subx: subx $dr,$sr. */
2977 SEM_FN_NAME (m32rx
,subx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2979 insn_t insn
= SEM_INSN (sem_arg
);
2980 #define OPRND(f) par_exec->operands.fmt_addx.f
2981 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2982 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2983 EXTRACT_FMT_ADDX_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2984 EXTRACT_FMT_ADDX_CODE
2988 temp0
= SUBCSI (OPRND (dr
), OPRND (sr
), OPRND (condbit
));
2989 temp1
= SUBCFSI (OPRND (dr
), OPRND (sr
), OPRND (condbit
));
2990 CPU (h_gr
[f_r1
]) = temp0
;
2991 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2992 CPU (h_cond
) = temp1
;
2993 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2996 #if WITH_PROFILE_MODEL_P
2997 if (PROFILE_MODEL_P (current_cpu
))
2999 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3000 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3001 m32rx_model_profile_insn (current_cpu
, abuf
);
3009 /* Perform trap: trap $uimm4. */
3011 SEM_FN_NAME (m32rx
,trap
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3013 insn_t insn
= SEM_INSN (sem_arg
);
3014 #define OPRND(f) par_exec->operands.fmt_trap.f
3015 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3016 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3018 EXTRACT_FMT_TRAP_VARS
/* f-op1 f-r1 f-op2 f-uimm4 */
3019 EXTRACT_FMT_TRAP_CODE
3022 m32rx_h_cr_set (current_cpu
, 6, ADDSI (OPRND (pc
), 4));
3023 TRACE_RESULT (current_cpu
, "h-cr-6", 'x', m32rx_h_cr_get (current_cpu
, 6));
3024 m32rx_h_cr_set (current_cpu
, 0, ANDSI (SLLSI (OPRND (h_cr_0
), 8), 65408));
3025 TRACE_RESULT (current_cpu
, "h-cr-0", 'x', m32rx_h_cr_get (current_cpu
, 0));
3026 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, do_trap (current_cpu
, OPRND (uimm4
))));
3027 TRACE_RESULT (current_cpu
, "pc", 'x', CPU (h_pc
));
3030 #if WITH_PROFILE_MODEL_P
3031 if (PROFILE_MODEL_P (current_cpu
))
3033 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
3041 /* Perform unlock: unlock $src1,@$src2. */
3043 SEM_FN_NAME (m32rx
,unlock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3045 insn_t insn
= SEM_INSN (sem_arg
);
3046 #define OPRND(f) par_exec->operands.fmt_unlock.f
3047 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3048 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3049 EXTRACT_FMT_UNLOCK_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3050 EXTRACT_FMT_UNLOCK_CODE
3053 if (OPRND (h_lock_0
)) {
3054 SETMEMSI (current_cpu
, OPRND (src2
), OPRND (src1
));
3055 TRACE_RESULT (current_cpu
, "h-memory-src2", 'x', GETMEMSI (current_cpu
, OPRND (src2
)));
3058 TRACE_RESULT (current_cpu
, "h-lock-0", 'x', CPU (h_lock
));
3061 #if WITH_PROFILE_MODEL_P
3062 if (PROFILE_MODEL_P (current_cpu
))
3064 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3065 m32rx_model_profile_insn (current_cpu
, abuf
);
3073 /* Perform satb: satb $dr,$sr. */
3075 SEM_FN_NAME (m32rx
,satb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3077 insn_t insn
= SEM_INSN (sem_arg
);
3078 #define OPRND(f) par_exec->operands.fmt_satb.f
3079 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3080 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3081 EXTRACT_FMT_SATB_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3082 EXTRACT_FMT_SATB_CODE
3084 CPU (h_gr
[f_r1
]) = (GESI (OPRND (sr
), 127)) ? (127) : (LESI (OPRND (sr
), -128)) ? (-128) : (OPRND (sr
));
3085 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3087 #if WITH_PROFILE_MODEL_P
3088 if (PROFILE_MODEL_P (current_cpu
))
3090 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3091 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3092 m32rx_model_profile_insn (current_cpu
, abuf
);
3100 /* Perform sath: sath $dr,$sr. */
3102 SEM_FN_NAME (m32rx
,sath
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3104 insn_t insn
= SEM_INSN (sem_arg
);
3105 #define OPRND(f) par_exec->operands.fmt_satb.f
3106 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3107 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3108 EXTRACT_FMT_SATB_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3109 EXTRACT_FMT_SATB_CODE
3111 CPU (h_gr
[f_r1
]) = (GESI (OPRND (sr
), 32767)) ? (32767) : (LESI (OPRND (sr
), -32768)) ? (-32768) : (OPRND (sr
));
3112 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3114 #if WITH_PROFILE_MODEL_P
3115 if (PROFILE_MODEL_P (current_cpu
))
3117 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3118 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3119 m32rx_model_profile_insn (current_cpu
, abuf
);
3127 /* Perform sat: sat $dr,$sr. */
3129 SEM_FN_NAME (m32rx
,sat
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3131 insn_t insn
= SEM_INSN (sem_arg
);
3132 #define OPRND(f) par_exec->operands.fmt_sat.f
3133 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3134 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3135 EXTRACT_FMT_SAT_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3136 EXTRACT_FMT_SAT_CODE
3138 CPU (h_gr
[f_r1
]) = ((OPRND (condbit
)) ? (((LTSI (OPRND (sr
), 0)) ? (2147483647) : (0x80000000))) : (OPRND (sr
)));
3139 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3141 #if WITH_PROFILE_MODEL_P
3142 if (PROFILE_MODEL_P (current_cpu
))
3144 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3145 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3146 m32rx_model_profile_insn (current_cpu
, abuf
);
3154 /* Perform pcmpbz: pcmpbz $src2. */
3156 SEM_FN_NAME (m32rx
,pcmpbz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3158 insn_t insn
= SEM_INSN (sem_arg
);
3159 #define OPRND(f) par_exec->operands.fmt_cmpz.f
3160 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3161 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3162 EXTRACT_FMT_CMPZ_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3163 EXTRACT_FMT_CMPZ_CODE
3165 CPU (h_cond
) = (EQSI (ANDSI (OPRND (src2
), 255), 0)) ? (1) : (EQSI (ANDSI (OPRND (src2
), 65280), 0)) ? (1) : (EQSI (ANDSI (OPRND (src2
), 16711680), 0)) ? (1) : (EQSI (ANDSI (OPRND (src2
), 0xff000000), 0)) ? (1) : (0);
3166 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
3168 #if WITH_PROFILE_MODEL_P
3169 if (PROFILE_MODEL_P (current_cpu
))
3171 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3172 m32rx_model_profile_insn (current_cpu
, abuf
);
3180 /* Perform sadd: sadd. */
3182 SEM_FN_NAME (m32rx
,sadd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3184 insn_t insn
= SEM_INSN (sem_arg
);
3185 #define OPRND(f) par_exec->operands.fmt_sadd.f
3186 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3187 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3188 EXTRACT_FMT_SADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3189 EXTRACT_FMT_SADD_CODE
3191 m32rx_h_accums_set (current_cpu
, 0, ADDDI (SRADI (OPRND (h_accums_1
), 16), OPRND (h_accums_0
)));
3192 TRACE_RESULT (current_cpu
, "h-accums-0", 'D', m32rx_h_accums_get (current_cpu
, 0));
3194 #if WITH_PROFILE_MODEL_P
3195 if (PROFILE_MODEL_P (current_cpu
))
3197 m32rx_model_profile_insn (current_cpu
, abuf
);
3205 /* Perform macwu1: macwu1 $src1,$src2. */
3207 SEM_FN_NAME (m32rx
,macwu1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3209 insn_t insn
= SEM_INSN (sem_arg
);
3210 #define OPRND(f) par_exec->operands.fmt_macwu1.f
3211 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3212 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3213 EXTRACT_FMT_MACWU1_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3214 EXTRACT_FMT_MACWU1_CODE
3216 m32rx_h_accums_set (current_cpu
, 1, SRADI (SLLDI (ADDDI (OPRND (h_accums_1
), MULDI (EXTSIDI (OPRND (src1
)), EXTSIDI (ANDSI (OPRND (src2
), 65535)))), 8), 8));
3217 TRACE_RESULT (current_cpu
, "h-accums-1", 'D', m32rx_h_accums_get (current_cpu
, 1));
3219 #if WITH_PROFILE_MODEL_P
3220 if (PROFILE_MODEL_P (current_cpu
))
3222 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3223 m32rx_model_profile_insn (current_cpu
, abuf
);
3231 /* Perform msblo: msblo $src1,$src2. */
3233 SEM_FN_NAME (m32rx
,msblo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3235 insn_t insn
= SEM_INSN (sem_arg
);
3236 #define OPRND(f) par_exec->operands.fmt_macwhi.f
3237 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3238 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3239 EXTRACT_FMT_MACWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3240 EXTRACT_FMT_MACWHI_CODE
3242 CPU (h_accum
) = SRADI (SLLDI (SUBDI (OPRND (accum
), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (OPRND (src1
))), EXTHIDI (TRUNCSIHI (OPRND (src2
)))), 32), 16)), 8), 8);
3243 TRACE_RESULT (current_cpu
, "accum", 'D', CPU (h_accum
));
3245 #if WITH_PROFILE_MODEL_P
3246 if (PROFILE_MODEL_P (current_cpu
))
3248 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3249 m32rx_model_profile_insn (current_cpu
, abuf
);
3257 /* Perform mulwu1: mulwu1 $src1,$src2. */
3259 SEM_FN_NAME (m32rx
,mulwu1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3261 insn_t insn
= SEM_INSN (sem_arg
);
3262 #define OPRND(f) par_exec->operands.fmt_mulwu1.f
3263 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3264 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3265 EXTRACT_FMT_MULWU1_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3266 EXTRACT_FMT_MULWU1_CODE
3268 m32rx_h_accums_set (current_cpu
, 1, SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1
)), EXTSIDI (ANDSI (OPRND (src2
), 65535))), 16), 16));
3269 TRACE_RESULT (current_cpu
, "h-accums-1", 'D', m32rx_h_accums_get (current_cpu
, 1));
3271 #if WITH_PROFILE_MODEL_P
3272 if (PROFILE_MODEL_P (current_cpu
))
3274 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3275 m32rx_model_profile_insn (current_cpu
, abuf
);
3283 /* Perform maclh1: maclh1 $src1,$src2. */
3285 SEM_FN_NAME (m32rx
,maclh1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3287 insn_t insn
= SEM_INSN (sem_arg
);
3288 #define OPRND(f) par_exec->operands.fmt_macwu1.f
3289 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3290 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3291 EXTRACT_FMT_MACWU1_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3292 EXTRACT_FMT_MACWU1_CODE
3294 m32rx_h_accums_set (current_cpu
, 1, SRADI (SLLDI (ADDDI (OPRND (h_accums_1
), SRADI (SLLDI (MULDI (EXTSIDI (SRASI (OPRND (src1
), 16)), EXTHIDI (TRUNCSIHI (OPRND (src2
)))), 32), 16)), 8), 8));
3295 TRACE_RESULT (current_cpu
, "h-accums-1", 'D', m32rx_h_accums_get (current_cpu
, 1));
3297 #if WITH_PROFILE_MODEL_P
3298 if (PROFILE_MODEL_P (current_cpu
))
3300 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3301 m32rx_model_profile_insn (current_cpu
, abuf
);
3309 /* Perform sc: sc. */
3311 SEM_FN_NAME (m32rx
,sc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3313 insn_t insn
= SEM_INSN (sem_arg
);
3314 #define OPRND(f) par_exec->operands.fmt_sc.f
3315 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3316 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3317 EXTRACT_FMT_SC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3320 if (OPRND (condbit
)) {
3321 BRANCH_NEW_PC (new_pc
, NEW_PC_SKIP
);
3324 #if WITH_PROFILE_MODEL_P
3325 if (PROFILE_MODEL_P (current_cpu
))
3327 m32rx_model_profile_insn (current_cpu
, abuf
);
3335 /* Perform snc: snc. */
3337 SEM_FN_NAME (m32rx
,snc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3339 insn_t insn
= SEM_INSN (sem_arg
);
3340 #define OPRND(f) par_exec->operands.fmt_sc.f
3341 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3342 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3343 EXTRACT_FMT_SC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3346 if (NOTBI (OPRND (condbit
))) {
3347 BRANCH_NEW_PC (new_pc
, NEW_PC_SKIP
);
3350 #if WITH_PROFILE_MODEL_P
3351 if (PROFILE_MODEL_P (current_cpu
))
3353 m32rx_model_profile_insn (current_cpu
, abuf
);
3362 SEM_FN_NAME (m32rx
,illegal
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3364 sim_engine_illegal_insn (current_cpu
, NULL_CIA
/*FIXME*/);
3368 #endif /* ! defined (SCACHE_P) || (defined (SCACHE_P) && WITH_SCACHE) */