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
36 #define GET_ATTR(cpu, num, attr) CGEN_INSN_ATTR (abuf->idesc->opcode, CGEN_INSN_##attr)
38 /* add: add $dr,$sr. */
41 SEM_FN_NAME (m32rx
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
43 insn_t insn
= SEM_INSN (sem_arg
);
44 #define OPRND(f) par_exec->operands.fmt_add.f
45 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
46 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
47 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
50 CPU (h_gr
[f_r1
]) = ADDSI (OPRND (dr
), OPRND (sr
));
51 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
53 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
55 #if WITH_PROFILE_MODEL_P
56 if (PROFILE_MODEL_P (current_cpu
))
58 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
59 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
60 m32rx_model_profile_insn (current_cpu
, abuf
);
68 /* add3: add3 $dr,$sr,$hash$slo16. */
71 SEM_FN_NAME (m32rx
,add3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
73 insn_t insn
= SEM_INSN (sem_arg
);
74 #define OPRND(f) par_exec->operands.fmt_add3.f
75 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
76 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
77 EXTRACT_FMT_ADD3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
80 CPU (h_gr
[f_r1
]) = ADDSI (OPRND (sr
), OPRND (slo16
));
81 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
83 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
85 #if WITH_PROFILE_MODEL_P
86 if (PROFILE_MODEL_P (current_cpu
))
88 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
89 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
90 m32rx_model_profile_insn (current_cpu
, abuf
);
98 /* and: and $dr,$sr. */
101 SEM_FN_NAME (m32rx
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
103 insn_t insn
= SEM_INSN (sem_arg
);
104 #define OPRND(f) par_exec->operands.fmt_add.f
105 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
106 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
107 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
110 CPU (h_gr
[f_r1
]) = ANDSI (OPRND (dr
), OPRND (sr
));
111 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
113 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
115 #if WITH_PROFILE_MODEL_P
116 if (PROFILE_MODEL_P (current_cpu
))
118 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
119 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
120 m32rx_model_profile_insn (current_cpu
, abuf
);
128 /* and3: and3 $dr,$sr,$uimm16. */
131 SEM_FN_NAME (m32rx
,and3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
133 insn_t insn
= SEM_INSN (sem_arg
);
134 #define OPRND(f) par_exec->operands.fmt_and3.f
135 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
136 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
137 EXTRACT_FMT_AND3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
138 EXTRACT_FMT_AND3_CODE
140 CPU (h_gr
[f_r1
]) = ANDSI (OPRND (sr
), OPRND (uimm16
));
141 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
143 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
145 #if WITH_PROFILE_MODEL_P
146 if (PROFILE_MODEL_P (current_cpu
))
148 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
149 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
150 m32rx_model_profile_insn (current_cpu
, abuf
);
158 /* or: or $dr,$sr. */
161 SEM_FN_NAME (m32rx
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
163 insn_t insn
= SEM_INSN (sem_arg
);
164 #define OPRND(f) par_exec->operands.fmt_add.f
165 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
166 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
167 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
170 CPU (h_gr
[f_r1
]) = ORSI (OPRND (dr
), OPRND (sr
));
171 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
173 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
175 #if WITH_PROFILE_MODEL_P
176 if (PROFILE_MODEL_P (current_cpu
))
178 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
179 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
180 m32rx_model_profile_insn (current_cpu
, abuf
);
188 /* or3: or3 $dr,$sr,$hash$ulo16. */
191 SEM_FN_NAME (m32rx
,or3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
193 insn_t insn
= SEM_INSN (sem_arg
);
194 #define OPRND(f) par_exec->operands.fmt_or3.f
195 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
196 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
197 EXTRACT_FMT_OR3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
200 CPU (h_gr
[f_r1
]) = ORSI (OPRND (sr
), OPRND (ulo16
));
201 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
203 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
205 #if WITH_PROFILE_MODEL_P
206 if (PROFILE_MODEL_P (current_cpu
))
208 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
209 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
210 m32rx_model_profile_insn (current_cpu
, abuf
);
218 /* xor: xor $dr,$sr. */
221 SEM_FN_NAME (m32rx
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
223 insn_t insn
= SEM_INSN (sem_arg
);
224 #define OPRND(f) par_exec->operands.fmt_add.f
225 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
226 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
227 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
230 CPU (h_gr
[f_r1
]) = XORSI (OPRND (dr
), OPRND (sr
));
231 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
233 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
235 #if WITH_PROFILE_MODEL_P
236 if (PROFILE_MODEL_P (current_cpu
))
238 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
239 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
240 m32rx_model_profile_insn (current_cpu
, abuf
);
248 /* xor3: xor3 $dr,$sr,$uimm16. */
251 SEM_FN_NAME (m32rx
,xor3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
253 insn_t insn
= SEM_INSN (sem_arg
);
254 #define OPRND(f) par_exec->operands.fmt_and3.f
255 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
256 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
257 EXTRACT_FMT_AND3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
258 EXTRACT_FMT_AND3_CODE
260 CPU (h_gr
[f_r1
]) = XORSI (OPRND (sr
), OPRND (uimm16
));
261 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
263 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
265 #if WITH_PROFILE_MODEL_P
266 if (PROFILE_MODEL_P (current_cpu
))
268 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
269 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
270 m32rx_model_profile_insn (current_cpu
, abuf
);
278 /* addi: addi $dr,$simm8. */
281 SEM_FN_NAME (m32rx
,addi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
283 insn_t insn
= SEM_INSN (sem_arg
);
284 #define OPRND(f) par_exec->operands.fmt_addi.f
285 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
286 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
287 EXTRACT_FMT_ADDI_VARS
/* f-op1 f-r1 f-simm8 */
288 EXTRACT_FMT_ADDI_CODE
290 CPU (h_gr
[f_r1
]) = ADDSI (OPRND (dr
), OPRND (simm8
));
291 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
293 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
295 #if WITH_PROFILE_MODEL_P
296 if (PROFILE_MODEL_P (current_cpu
))
298 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
299 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
300 m32rx_model_profile_insn (current_cpu
, abuf
);
308 /* addv: addv $dr,$sr. */
311 SEM_FN_NAME (m32rx
,addv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
313 insn_t insn
= SEM_INSN (sem_arg
);
314 #define OPRND(f) par_exec->operands.fmt_addv.f
315 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
316 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
317 EXTRACT_FMT_ADDV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
318 EXTRACT_FMT_ADDV_CODE
322 temp0
= ADDSI (OPRND (dr
), OPRND (sr
));
323 temp1
= ADDOFSI (OPRND (dr
), OPRND (sr
), 0);
324 CPU (h_gr
[f_r1
]) = temp0
;
325 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
326 CPU (h_cond
) = temp1
;
327 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
330 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
332 #if WITH_PROFILE_MODEL_P
333 if (PROFILE_MODEL_P (current_cpu
))
335 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
336 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
337 m32rx_model_profile_insn (current_cpu
, abuf
);
345 /* addv3: addv3 $dr,$sr,$simm16. */
348 SEM_FN_NAME (m32rx
,addv3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
350 insn_t insn
= SEM_INSN (sem_arg
);
351 #define OPRND(f) par_exec->operands.fmt_addv3.f
352 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
353 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
354 EXTRACT_FMT_ADDV3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
355 EXTRACT_FMT_ADDV3_CODE
359 temp0
= ADDSI (OPRND (sr
), OPRND (simm16
));
360 temp1
= ADDOFSI (OPRND (sr
), OPRND (simm16
), 0);
361 CPU (h_gr
[f_r1
]) = temp0
;
362 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
363 CPU (h_cond
) = temp1
;
364 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
367 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
369 #if WITH_PROFILE_MODEL_P
370 if (PROFILE_MODEL_P (current_cpu
))
372 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
373 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
374 m32rx_model_profile_insn (current_cpu
, abuf
);
382 /* addx: addx $dr,$sr. */
385 SEM_FN_NAME (m32rx
,addx
) (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_addx.f
389 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
390 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
391 EXTRACT_FMT_ADDX_VARS
/* f-op1 f-r1 f-op2 f-r2 */
392 EXTRACT_FMT_ADDX_CODE
396 temp0
= ADDCSI (OPRND (dr
), OPRND (sr
), OPRND (condbit
));
397 temp1
= ADDCFSI (OPRND (dr
), OPRND (sr
), OPRND (condbit
));
398 CPU (h_gr
[f_r1
]) = temp0
;
399 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
400 CPU (h_cond
) = temp1
;
401 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
404 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
406 #if WITH_PROFILE_MODEL_P
407 if (PROFILE_MODEL_P (current_cpu
))
409 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
410 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
411 m32rx_model_profile_insn (current_cpu
, abuf
);
419 /* bc8: bc.s $disp8. */
422 SEM_FN_NAME (m32rx
,bc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
424 insn_t insn
= SEM_INSN (sem_arg
);
425 #define OPRND(f) par_exec->operands.fmt_bc8.f
426 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
427 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
429 EXTRACT_FMT_BC8_VARS
/* f-op1 f-r1 f-disp8 */
432 if (OPRND (condbit
)) {
433 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
435 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
438 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
440 #if WITH_PROFILE_MODEL_P
441 if (PROFILE_MODEL_P (current_cpu
))
443 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
451 /* bc24: bc.l $disp24. */
454 SEM_FN_NAME (m32rx
,bc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
456 insn_t insn
= SEM_INSN (sem_arg
);
457 #define OPRND(f) par_exec->operands.fmt_bc24.f
458 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
459 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
461 EXTRACT_FMT_BC24_VARS
/* f-op1 f-r1 f-disp24 */
462 EXTRACT_FMT_BC24_CODE
464 if (OPRND (condbit
)) {
465 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
467 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
470 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
472 #if WITH_PROFILE_MODEL_P
473 if (PROFILE_MODEL_P (current_cpu
))
475 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
483 /* beq: beq $src1,$src2,$disp16. */
486 SEM_FN_NAME (m32rx
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
488 insn_t insn
= SEM_INSN (sem_arg
);
489 #define OPRND(f) par_exec->operands.fmt_beq.f
490 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
491 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
493 EXTRACT_FMT_BEQ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
496 if (EQSI (OPRND (src1
), OPRND (src2
))) {
497 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
499 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
502 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
504 #if WITH_PROFILE_MODEL_P
505 if (PROFILE_MODEL_P (current_cpu
))
507 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
508 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
516 /* beqz: beqz $src2,$disp16. */
519 SEM_FN_NAME (m32rx
,beqz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
521 insn_t insn
= SEM_INSN (sem_arg
);
522 #define OPRND(f) par_exec->operands.fmt_beqz.f
523 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
524 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
526 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
527 EXTRACT_FMT_BEQZ_CODE
529 if (EQSI (OPRND (src2
), 0)) {
530 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
532 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
535 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
537 #if WITH_PROFILE_MODEL_P
538 if (PROFILE_MODEL_P (current_cpu
))
540 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
541 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
549 /* bgez: bgez $src2,$disp16. */
552 SEM_FN_NAME (m32rx
,bgez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
554 insn_t insn
= SEM_INSN (sem_arg
);
555 #define OPRND(f) par_exec->operands.fmt_beqz.f
556 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
557 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
559 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
560 EXTRACT_FMT_BEQZ_CODE
562 if (GESI (OPRND (src2
), 0)) {
563 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
565 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
568 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
570 #if WITH_PROFILE_MODEL_P
571 if (PROFILE_MODEL_P (current_cpu
))
573 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
574 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
582 /* bgtz: bgtz $src2,$disp16. */
585 SEM_FN_NAME (m32rx
,bgtz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
587 insn_t insn
= SEM_INSN (sem_arg
);
588 #define OPRND(f) par_exec->operands.fmt_beqz.f
589 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
590 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
592 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
593 EXTRACT_FMT_BEQZ_CODE
595 if (GTSI (OPRND (src2
), 0)) {
596 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
598 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
601 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
603 #if WITH_PROFILE_MODEL_P
604 if (PROFILE_MODEL_P (current_cpu
))
606 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
607 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
615 /* blez: blez $src2,$disp16. */
618 SEM_FN_NAME (m32rx
,blez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
620 insn_t insn
= SEM_INSN (sem_arg
);
621 #define OPRND(f) par_exec->operands.fmt_beqz.f
622 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
623 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
625 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
626 EXTRACT_FMT_BEQZ_CODE
628 if (LESI (OPRND (src2
), 0)) {
629 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
631 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
634 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
636 #if WITH_PROFILE_MODEL_P
637 if (PROFILE_MODEL_P (current_cpu
))
639 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
640 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
648 /* bltz: bltz $src2,$disp16. */
651 SEM_FN_NAME (m32rx
,bltz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
653 insn_t insn
= SEM_INSN (sem_arg
);
654 #define OPRND(f) par_exec->operands.fmt_beqz.f
655 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
656 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
658 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
659 EXTRACT_FMT_BEQZ_CODE
661 if (LTSI (OPRND (src2
), 0)) {
662 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
664 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
667 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
669 #if WITH_PROFILE_MODEL_P
670 if (PROFILE_MODEL_P (current_cpu
))
672 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
673 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
681 /* bnez: bnez $src2,$disp16. */
684 SEM_FN_NAME (m32rx
,bnez
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
686 insn_t insn
= SEM_INSN (sem_arg
);
687 #define OPRND(f) par_exec->operands.fmt_beqz.f
688 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
689 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
691 EXTRACT_FMT_BEQZ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
692 EXTRACT_FMT_BEQZ_CODE
694 if (NESI (OPRND (src2
), 0)) {
695 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
697 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
700 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
702 #if WITH_PROFILE_MODEL_P
703 if (PROFILE_MODEL_P (current_cpu
))
705 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
706 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
714 /* bl8: bl.s $disp8. */
717 SEM_FN_NAME (m32rx
,bl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
719 insn_t insn
= SEM_INSN (sem_arg
);
720 #define OPRND(f) par_exec->operands.fmt_bl8.f
721 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
722 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
724 EXTRACT_FMT_BL8_VARS
/* f-op1 f-r1 f-disp8 */
728 CPU (h_gr
[14]) = ADDSI (ANDSI (OPRND (pc
), -4), 4);
729 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
730 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
732 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
735 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
737 #if WITH_PROFILE_MODEL_P
738 if (PROFILE_MODEL_P (current_cpu
))
740 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
741 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
749 /* bl24: bl.l $disp24. */
752 SEM_FN_NAME (m32rx
,bl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
754 insn_t insn
= SEM_INSN (sem_arg
);
755 #define OPRND(f) par_exec->operands.fmt_bl24.f
756 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
757 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
759 EXTRACT_FMT_BL24_VARS
/* f-op1 f-r1 f-disp24 */
760 EXTRACT_FMT_BL24_CODE
763 CPU (h_gr
[14]) = ADDSI (OPRND (pc
), 4);
764 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
765 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
767 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
770 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
772 #if WITH_PROFILE_MODEL_P
773 if (PROFILE_MODEL_P (current_cpu
))
775 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
776 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
784 /* bcl8: bcl.s $disp8. */
787 SEM_FN_NAME (m32rx
,bcl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
789 insn_t insn
= SEM_INSN (sem_arg
);
790 #define OPRND(f) par_exec->operands.fmt_bcl8.f
791 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
792 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
794 EXTRACT_FMT_BCL8_VARS
/* f-op1 f-r1 f-disp8 */
795 EXTRACT_FMT_BCL8_CODE
797 if (OPRND (condbit
)) {
799 CPU (h_gr
[14]) = ADDSI (ANDSI (OPRND (pc
), -4), 4);
800 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
801 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
803 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
807 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
809 #if WITH_PROFILE_MODEL_P
810 if (PROFILE_MODEL_P (current_cpu
))
812 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
813 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
821 /* bcl24: bcl.l $disp24. */
824 SEM_FN_NAME (m32rx
,bcl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
826 insn_t insn
= SEM_INSN (sem_arg
);
827 #define OPRND(f) par_exec->operands.fmt_bcl24.f
828 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
829 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
831 EXTRACT_FMT_BCL24_VARS
/* f-op1 f-r1 f-disp24 */
832 EXTRACT_FMT_BCL24_CODE
834 if (OPRND (condbit
)) {
836 CPU (h_gr
[14]) = ADDSI (OPRND (pc
), 4);
837 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
838 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
840 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
844 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
846 #if WITH_PROFILE_MODEL_P
847 if (PROFILE_MODEL_P (current_cpu
))
849 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
850 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
858 /* bnc8: bnc.s $disp8. */
861 SEM_FN_NAME (m32rx
,bnc8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
863 insn_t insn
= SEM_INSN (sem_arg
);
864 #define OPRND(f) par_exec->operands.fmt_bc8.f
865 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
866 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
868 EXTRACT_FMT_BC8_VARS
/* f-op1 f-r1 f-disp8 */
871 if (NOTBI (OPRND (condbit
))) {
872 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
874 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
877 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
879 #if WITH_PROFILE_MODEL_P
880 if (PROFILE_MODEL_P (current_cpu
))
882 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
890 /* bnc24: bnc.l $disp24. */
893 SEM_FN_NAME (m32rx
,bnc24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
895 insn_t insn
= SEM_INSN (sem_arg
);
896 #define OPRND(f) par_exec->operands.fmt_bc24.f
897 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
898 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
900 EXTRACT_FMT_BC24_VARS
/* f-op1 f-r1 f-disp24 */
901 EXTRACT_FMT_BC24_CODE
903 if (NOTBI (OPRND (condbit
))) {
904 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
906 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
909 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
911 #if WITH_PROFILE_MODEL_P
912 if (PROFILE_MODEL_P (current_cpu
))
914 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
922 /* bne: bne $src1,$src2,$disp16. */
925 SEM_FN_NAME (m32rx
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
927 insn_t insn
= SEM_INSN (sem_arg
);
928 #define OPRND(f) par_exec->operands.fmt_beq.f
929 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
930 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
932 EXTRACT_FMT_BEQ_VARS
/* f-op1 f-r1 f-op2 f-r2 f-disp16 */
935 if (NESI (OPRND (src1
), OPRND (src2
))) {
936 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp16
)));
938 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
941 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
943 #if WITH_PROFILE_MODEL_P
944 if (PROFILE_MODEL_P (current_cpu
))
946 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
947 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
955 /* bra8: bra.s $disp8. */
958 SEM_FN_NAME (m32rx
,bra8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
960 insn_t insn
= SEM_INSN (sem_arg
);
961 #define OPRND(f) par_exec->operands.fmt_bra8.f
962 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
963 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
965 EXTRACT_FMT_BRA8_VARS
/* f-op1 f-r1 f-disp8 */
966 EXTRACT_FMT_BRA8_CODE
968 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
970 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
972 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
974 #if WITH_PROFILE_MODEL_P
975 if (PROFILE_MODEL_P (current_cpu
))
977 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
985 /* bra24: bra.l $disp24. */
988 SEM_FN_NAME (m32rx
,bra24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
990 insn_t insn
= SEM_INSN (sem_arg
);
991 #define OPRND(f) par_exec->operands.fmt_bra24.f
992 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
993 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
995 EXTRACT_FMT_BRA24_VARS
/* f-op1 f-r1 f-disp24 */
996 EXTRACT_FMT_BRA24_CODE
998 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
1000 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1002 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1004 #if WITH_PROFILE_MODEL_P
1005 if (PROFILE_MODEL_P (current_cpu
))
1007 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1015 /* bncl8: bncl.s $disp8. */
1018 SEM_FN_NAME (m32rx
,bncl8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1020 insn_t insn
= SEM_INSN (sem_arg
);
1021 #define OPRND(f) par_exec->operands.fmt_bcl8.f
1022 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1023 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1025 EXTRACT_FMT_BCL8_VARS
/* f-op1 f-r1 f-disp8 */
1026 EXTRACT_FMT_BCL8_CODE
1028 if (NOTBI (OPRND (condbit
))) {
1030 CPU (h_gr
[14]) = ADDSI (ANDSI (OPRND (pc
), -4), 4);
1031 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
1032 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp8
)));
1034 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1038 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1040 #if WITH_PROFILE_MODEL_P
1041 if (PROFILE_MODEL_P (current_cpu
))
1043 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1044 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1052 /* bncl24: bncl.l $disp24. */
1055 SEM_FN_NAME (m32rx
,bncl24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1057 insn_t insn
= SEM_INSN (sem_arg
);
1058 #define OPRND(f) par_exec->operands.fmt_bcl24.f
1059 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1060 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1062 EXTRACT_FMT_BCL24_VARS
/* f-op1 f-r1 f-disp24 */
1063 EXTRACT_FMT_BCL24_CODE
1065 if (NOTBI (OPRND (condbit
))) {
1067 CPU (h_gr
[14]) = ADDSI (OPRND (pc
), 4);
1068 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
1069 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_CACHE (sem_arg
, OPRND (disp24
)));
1071 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1075 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1077 #if WITH_PROFILE_MODEL_P
1078 if (PROFILE_MODEL_P (current_cpu
))
1080 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1081 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1089 /* cmp: cmp $src1,$src2. */
1092 SEM_FN_NAME (m32rx
,cmp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1094 insn_t insn
= SEM_INSN (sem_arg
);
1095 #define OPRND(f) par_exec->operands.fmt_cmp.f
1096 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1097 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1098 EXTRACT_FMT_CMP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1099 EXTRACT_FMT_CMP_CODE
1101 CPU (h_cond
) = LTSI (OPRND (src1
), OPRND (src2
));
1102 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1104 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1106 #if WITH_PROFILE_MODEL_P
1107 if (PROFILE_MODEL_P (current_cpu
))
1109 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1110 m32rx_model_profile_insn (current_cpu
, abuf
);
1118 /* cmpi: cmpi $src2,$simm16. */
1121 SEM_FN_NAME (m32rx
,cmpi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1123 insn_t insn
= SEM_INSN (sem_arg
);
1124 #define OPRND(f) par_exec->operands.fmt_cmpi.f
1125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1126 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1127 EXTRACT_FMT_CMPI_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1128 EXTRACT_FMT_CMPI_CODE
1130 CPU (h_cond
) = LTSI (OPRND (src2
), OPRND (simm16
));
1131 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1133 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1135 #if WITH_PROFILE_MODEL_P
1136 if (PROFILE_MODEL_P (current_cpu
))
1138 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1139 m32rx_model_profile_insn (current_cpu
, abuf
);
1147 /* cmpu: cmpu $src1,$src2. */
1150 SEM_FN_NAME (m32rx
,cmpu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1152 insn_t insn
= SEM_INSN (sem_arg
);
1153 #define OPRND(f) par_exec->operands.fmt_cmp.f
1154 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1155 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1156 EXTRACT_FMT_CMP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1157 EXTRACT_FMT_CMP_CODE
1159 CPU (h_cond
) = LTUSI (OPRND (src1
), OPRND (src2
));
1160 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1162 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1164 #if WITH_PROFILE_MODEL_P
1165 if (PROFILE_MODEL_P (current_cpu
))
1167 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1168 m32rx_model_profile_insn (current_cpu
, abuf
);
1176 /* cmpui: cmpui $src2,$simm16. */
1179 SEM_FN_NAME (m32rx
,cmpui
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1181 insn_t insn
= SEM_INSN (sem_arg
);
1182 #define OPRND(f) par_exec->operands.fmt_cmpi.f
1183 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1184 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1185 EXTRACT_FMT_CMPI_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1186 EXTRACT_FMT_CMPI_CODE
1188 CPU (h_cond
) = LTUSI (OPRND (src2
), OPRND (simm16
));
1189 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1191 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1193 #if WITH_PROFILE_MODEL_P
1194 if (PROFILE_MODEL_P (current_cpu
))
1196 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1197 m32rx_model_profile_insn (current_cpu
, abuf
);
1205 /* cmpeq: cmpeq $src1,$src2. */
1208 SEM_FN_NAME (m32rx
,cmpeq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1210 insn_t insn
= SEM_INSN (sem_arg
);
1211 #define OPRND(f) par_exec->operands.fmt_cmp.f
1212 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1213 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1214 EXTRACT_FMT_CMP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1215 EXTRACT_FMT_CMP_CODE
1217 CPU (h_cond
) = EQSI (OPRND (src1
), OPRND (src2
));
1218 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1220 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1222 #if WITH_PROFILE_MODEL_P
1223 if (PROFILE_MODEL_P (current_cpu
))
1225 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1226 m32rx_model_profile_insn (current_cpu
, abuf
);
1234 /* cmpz: cmpz $src2. */
1237 SEM_FN_NAME (m32rx
,cmpz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1239 insn_t insn
= SEM_INSN (sem_arg
);
1240 #define OPRND(f) par_exec->operands.fmt_cmpz.f
1241 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1242 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1243 EXTRACT_FMT_CMPZ_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1244 EXTRACT_FMT_CMPZ_CODE
1246 CPU (h_cond
) = EQSI (OPRND (src2
), 0);
1247 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
1249 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1251 #if WITH_PROFILE_MODEL_P
1252 if (PROFILE_MODEL_P (current_cpu
))
1254 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1255 m32rx_model_profile_insn (current_cpu
, abuf
);
1263 /* div: div $dr,$sr. */
1266 SEM_FN_NAME (m32rx
,div
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1268 insn_t insn
= SEM_INSN (sem_arg
);
1269 #define OPRND(f) par_exec->operands.fmt_div.f
1270 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1271 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1272 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1273 EXTRACT_FMT_DIV_CODE
1275 if (NESI (OPRND (sr
), 0)) {
1276 CPU (h_gr
[f_r1
]) = DIVSI (OPRND (dr
), OPRND (sr
));
1277 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1280 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1282 #if WITH_PROFILE_MODEL_P
1283 if (PROFILE_MODEL_P (current_cpu
))
1285 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1286 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1287 m32rx_model_profile_insn (current_cpu
, abuf
);
1295 /* divu: divu $dr,$sr. */
1298 SEM_FN_NAME (m32rx
,divu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1300 insn_t insn
= SEM_INSN (sem_arg
);
1301 #define OPRND(f) par_exec->operands.fmt_div.f
1302 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1303 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1304 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1305 EXTRACT_FMT_DIV_CODE
1307 if (NESI (OPRND (sr
), 0)) {
1308 CPU (h_gr
[f_r1
]) = UDIVSI (OPRND (dr
), OPRND (sr
));
1309 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1312 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1314 #if WITH_PROFILE_MODEL_P
1315 if (PROFILE_MODEL_P (current_cpu
))
1317 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1318 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1319 m32rx_model_profile_insn (current_cpu
, abuf
);
1327 /* rem: rem $dr,$sr. */
1330 SEM_FN_NAME (m32rx
,rem
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1332 insn_t insn
= SEM_INSN (sem_arg
);
1333 #define OPRND(f) par_exec->operands.fmt_div.f
1334 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1335 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1336 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1337 EXTRACT_FMT_DIV_CODE
1339 if (NESI (OPRND (sr
), 0)) {
1340 CPU (h_gr
[f_r1
]) = MODSI (OPRND (dr
), OPRND (sr
));
1341 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1344 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1346 #if WITH_PROFILE_MODEL_P
1347 if (PROFILE_MODEL_P (current_cpu
))
1349 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1350 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1351 m32rx_model_profile_insn (current_cpu
, abuf
);
1359 /* remu: remu $dr,$sr. */
1362 SEM_FN_NAME (m32rx
,remu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1364 insn_t insn
= SEM_INSN (sem_arg
);
1365 #define OPRND(f) par_exec->operands.fmt_div.f
1366 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1367 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1368 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1369 EXTRACT_FMT_DIV_CODE
1371 if (NESI (OPRND (sr
), 0)) {
1372 CPU (h_gr
[f_r1
]) = UMODSI (OPRND (dr
), OPRND (sr
));
1373 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1376 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1378 #if WITH_PROFILE_MODEL_P
1379 if (PROFILE_MODEL_P (current_cpu
))
1381 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1382 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1383 m32rx_model_profile_insn (current_cpu
, abuf
);
1391 /* divh: divh $dr,$sr. */
1394 SEM_FN_NAME (m32rx
,divh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1396 insn_t insn
= SEM_INSN (sem_arg
);
1397 #define OPRND(f) par_exec->operands.fmt_div.f
1398 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1399 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1400 EXTRACT_FMT_DIV_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1401 EXTRACT_FMT_DIV_CODE
1403 if (NESI (OPRND (sr
), 0)) {
1404 CPU (h_gr
[f_r1
]) = DIVSI (EXTHISI (TRUNCSIHI (OPRND (dr
))), OPRND (sr
));
1405 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1408 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1410 #if WITH_PROFILE_MODEL_P
1411 if (PROFILE_MODEL_P (current_cpu
))
1413 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1414 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1415 m32rx_model_profile_insn (current_cpu
, abuf
);
1426 SEM_FN_NAME (m32rx
,jc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1428 insn_t insn
= SEM_INSN (sem_arg
);
1429 #define OPRND(f) par_exec->operands.fmt_jc.f
1430 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1431 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1433 EXTRACT_FMT_JC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1436 if (OPRND (condbit
)) {
1437 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (OPRND (sr
), -4)));
1439 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1442 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1444 #if WITH_PROFILE_MODEL_P
1445 if (PROFILE_MODEL_P (current_cpu
))
1447 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1448 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1459 SEM_FN_NAME (m32rx
,jnc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1461 insn_t insn
= SEM_INSN (sem_arg
);
1462 #define OPRND(f) par_exec->operands.fmt_jc.f
1463 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1464 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1466 EXTRACT_FMT_JC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1469 if (NOTBI (OPRND (condbit
))) {
1470 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (OPRND (sr
), -4)));
1472 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1475 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1477 #if WITH_PROFILE_MODEL_P
1478 if (PROFILE_MODEL_P (current_cpu
))
1480 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1481 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1492 SEM_FN_NAME (m32rx
,jl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1494 insn_t insn
= SEM_INSN (sem_arg
);
1495 #define OPRND(f) par_exec->operands.fmt_jl.f
1496 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1497 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1499 EXTRACT_FMT_JL_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1504 temp0
= ADDSI (ANDSI (OPRND (pc
), -4), 4);
1505 temp1
= ANDSI (OPRND (sr
), -4);
1506 CPU (h_gr
[14]) = temp0
;
1507 TRACE_RESULT (current_cpu
, "gr-14", 'x', CPU (h_gr
[14]));
1508 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, temp1
));
1510 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1513 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1515 #if WITH_PROFILE_MODEL_P
1516 if (PROFILE_MODEL_P (current_cpu
))
1518 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1519 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1520 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1531 SEM_FN_NAME (m32rx
,jmp
) (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_jmp.f
1535 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1536 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1538 EXTRACT_FMT_JMP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1539 EXTRACT_FMT_JMP_CODE
1541 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (OPRND (sr
), -4)));
1543 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
1545 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1547 #if WITH_PROFILE_MODEL_P
1548 if (PROFILE_MODEL_P (current_cpu
))
1550 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1551 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
1559 /* ld: ld $dr,@$sr. */
1562 SEM_FN_NAME (m32rx
,ld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1564 insn_t insn
= SEM_INSN (sem_arg
);
1565 #define OPRND(f) par_exec->operands.fmt_ld.f
1566 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1567 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1568 EXTRACT_FMT_LD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1571 CPU (h_gr
[f_r1
]) = OPRND (h_memory_sr
);
1572 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1574 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1576 #if WITH_PROFILE_MODEL_P
1577 if (PROFILE_MODEL_P (current_cpu
))
1579 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1580 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1581 m32rx_model_profile_insn (current_cpu
, abuf
);
1589 /* ld-d: ld $dr,@($slo16,$sr). */
1592 SEM_FN_NAME (m32rx
,ld_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1594 insn_t insn
= SEM_INSN (sem_arg
);
1595 #define OPRND(f) par_exec->operands.fmt_ld_d.f
1596 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1597 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1598 EXTRACT_FMT_LD_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1599 EXTRACT_FMT_LD_D_CODE
1601 CPU (h_gr
[f_r1
]) = OPRND (h_memory_add__VM_sr_slo16
);
1602 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1604 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1606 #if WITH_PROFILE_MODEL_P
1607 if (PROFILE_MODEL_P (current_cpu
))
1609 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1610 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1611 m32rx_model_profile_insn (current_cpu
, abuf
);
1619 /* ldb: ldb $dr,@$sr. */
1622 SEM_FN_NAME (m32rx
,ldb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1624 insn_t insn
= SEM_INSN (sem_arg
);
1625 #define OPRND(f) par_exec->operands.fmt_ldb.f
1626 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1627 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1628 EXTRACT_FMT_LDB_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1629 EXTRACT_FMT_LDB_CODE
1631 CPU (h_gr
[f_r1
]) = EXTQISI (OPRND (h_memory_sr
));
1632 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1634 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1636 #if WITH_PROFILE_MODEL_P
1637 if (PROFILE_MODEL_P (current_cpu
))
1639 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1640 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1641 m32rx_model_profile_insn (current_cpu
, abuf
);
1649 /* ldb-d: ldb $dr,@($slo16,$sr). */
1652 SEM_FN_NAME (m32rx
,ldb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1654 insn_t insn
= SEM_INSN (sem_arg
);
1655 #define OPRND(f) par_exec->operands.fmt_ldb_d.f
1656 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1657 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1658 EXTRACT_FMT_LDB_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1659 EXTRACT_FMT_LDB_D_CODE
1661 CPU (h_gr
[f_r1
]) = EXTQISI (OPRND (h_memory_add__VM_sr_slo16
));
1662 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1664 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1666 #if WITH_PROFILE_MODEL_P
1667 if (PROFILE_MODEL_P (current_cpu
))
1669 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1670 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1671 m32rx_model_profile_insn (current_cpu
, abuf
);
1679 /* ldh: ldh $dr,@$sr. */
1682 SEM_FN_NAME (m32rx
,ldh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1684 insn_t insn
= SEM_INSN (sem_arg
);
1685 #define OPRND(f) par_exec->operands.fmt_ldh.f
1686 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1687 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1688 EXTRACT_FMT_LDH_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1689 EXTRACT_FMT_LDH_CODE
1691 CPU (h_gr
[f_r1
]) = EXTHISI (OPRND (h_memory_sr
));
1692 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1694 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1696 #if WITH_PROFILE_MODEL_P
1697 if (PROFILE_MODEL_P (current_cpu
))
1699 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1700 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1701 m32rx_model_profile_insn (current_cpu
, abuf
);
1709 /* ldh-d: ldh $dr,@($slo16,$sr). */
1712 SEM_FN_NAME (m32rx
,ldh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1714 insn_t insn
= SEM_INSN (sem_arg
);
1715 #define OPRND(f) par_exec->operands.fmt_ldh_d.f
1716 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1717 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1718 EXTRACT_FMT_LDH_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1719 EXTRACT_FMT_LDH_D_CODE
1721 CPU (h_gr
[f_r1
]) = EXTHISI (OPRND (h_memory_add__VM_sr_slo16
));
1722 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1724 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1726 #if WITH_PROFILE_MODEL_P
1727 if (PROFILE_MODEL_P (current_cpu
))
1729 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1730 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1731 m32rx_model_profile_insn (current_cpu
, abuf
);
1739 /* ldub: ldub $dr,@$sr. */
1742 SEM_FN_NAME (m32rx
,ldub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1744 insn_t insn
= SEM_INSN (sem_arg
);
1745 #define OPRND(f) par_exec->operands.fmt_ldb.f
1746 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1747 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1748 EXTRACT_FMT_LDB_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1749 EXTRACT_FMT_LDB_CODE
1751 CPU (h_gr
[f_r1
]) = ZEXTQISI (OPRND (h_memory_sr
));
1752 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1754 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1756 #if WITH_PROFILE_MODEL_P
1757 if (PROFILE_MODEL_P (current_cpu
))
1759 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1760 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1761 m32rx_model_profile_insn (current_cpu
, abuf
);
1769 /* ldub-d: ldub $dr,@($slo16,$sr). */
1772 SEM_FN_NAME (m32rx
,ldub_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1774 insn_t insn
= SEM_INSN (sem_arg
);
1775 #define OPRND(f) par_exec->operands.fmt_ldb_d.f
1776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1777 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1778 EXTRACT_FMT_LDB_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1779 EXTRACT_FMT_LDB_D_CODE
1781 CPU (h_gr
[f_r1
]) = ZEXTQISI (OPRND (h_memory_add__VM_sr_slo16
));
1782 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1784 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1786 #if WITH_PROFILE_MODEL_P
1787 if (PROFILE_MODEL_P (current_cpu
))
1789 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1790 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1791 m32rx_model_profile_insn (current_cpu
, abuf
);
1799 /* lduh: lduh $dr,@$sr. */
1802 SEM_FN_NAME (m32rx
,lduh
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1804 insn_t insn
= SEM_INSN (sem_arg
);
1805 #define OPRND(f) par_exec->operands.fmt_ldh.f
1806 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1807 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1808 EXTRACT_FMT_LDH_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1809 EXTRACT_FMT_LDH_CODE
1811 CPU (h_gr
[f_r1
]) = ZEXTHISI (OPRND (h_memory_sr
));
1812 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1814 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1816 #if WITH_PROFILE_MODEL_P
1817 if (PROFILE_MODEL_P (current_cpu
))
1819 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1820 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1821 m32rx_model_profile_insn (current_cpu
, abuf
);
1829 /* lduh-d: lduh $dr,@($slo16,$sr). */
1832 SEM_FN_NAME (m32rx
,lduh_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1834 insn_t insn
= SEM_INSN (sem_arg
);
1835 #define OPRND(f) par_exec->operands.fmt_ldh_d.f
1836 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1837 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1838 EXTRACT_FMT_LDH_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1839 EXTRACT_FMT_LDH_D_CODE
1841 CPU (h_gr
[f_r1
]) = ZEXTHISI (OPRND (h_memory_add__VM_sr_slo16
));
1842 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1844 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1846 #if WITH_PROFILE_MODEL_P
1847 if (PROFILE_MODEL_P (current_cpu
))
1849 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1850 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1851 m32rx_model_profile_insn (current_cpu
, abuf
);
1859 /* ld-plus: ld $dr,@$sr+. */
1862 SEM_FN_NAME (m32rx
,ld_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1864 insn_t insn
= SEM_INSN (sem_arg
);
1865 #define OPRND(f) par_exec->operands.fmt_ld_plus.f
1866 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1867 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1868 EXTRACT_FMT_LD_PLUS_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1869 EXTRACT_FMT_LD_PLUS_CODE
1873 temp0
= OPRND (h_memory_sr
);
1874 temp1
= ADDSI (OPRND (sr
), 4);
1875 CPU (h_gr
[f_r1
]) = temp0
;
1876 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1877 CPU (h_gr
[f_r2
]) = temp1
;
1878 TRACE_RESULT (current_cpu
, "sr", 'x', CPU (h_gr
[f_r2
]));
1881 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1883 #if WITH_PROFILE_MODEL_P
1884 if (PROFILE_MODEL_P (current_cpu
))
1886 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
1887 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1888 m32rx_model_profile_insn (current_cpu
, abuf
);
1896 /* ld24: ld24 $dr,$uimm24. */
1899 SEM_FN_NAME (m32rx
,ld24
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1901 insn_t insn
= SEM_INSN (sem_arg
);
1902 #define OPRND(f) par_exec->operands.fmt_ld24.f
1903 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1904 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1905 EXTRACT_FMT_LD24_VARS
/* f-op1 f-r1 f-uimm24 */
1906 EXTRACT_FMT_LD24_CODE
1908 CPU (h_gr
[f_r1
]) = OPRND (uimm24
);
1909 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1911 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1913 #if WITH_PROFILE_MODEL_P
1914 if (PROFILE_MODEL_P (current_cpu
))
1916 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1917 m32rx_model_profile_insn (current_cpu
, abuf
);
1925 /* ldi8: ldi8 $dr,$simm8. */
1928 SEM_FN_NAME (m32rx
,ldi8
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1930 insn_t insn
= SEM_INSN (sem_arg
);
1931 #define OPRND(f) par_exec->operands.fmt_ldi8.f
1932 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1933 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1934 EXTRACT_FMT_LDI8_VARS
/* f-op1 f-r1 f-simm8 */
1935 EXTRACT_FMT_LDI8_CODE
1937 CPU (h_gr
[f_r1
]) = OPRND (simm8
);
1938 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1940 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1942 #if WITH_PROFILE_MODEL_P
1943 if (PROFILE_MODEL_P (current_cpu
))
1945 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1946 m32rx_model_profile_insn (current_cpu
, abuf
);
1954 /* ldi16: ldi16 $dr,$hash$slo16. */
1957 SEM_FN_NAME (m32rx
,ldi16
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1959 insn_t insn
= SEM_INSN (sem_arg
);
1960 #define OPRND(f) par_exec->operands.fmt_ldi16.f
1961 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1962 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
1963 EXTRACT_FMT_LDI16_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1964 EXTRACT_FMT_LDI16_CODE
1966 CPU (h_gr
[f_r1
]) = OPRND (slo16
);
1967 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
1969 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
1971 #if WITH_PROFILE_MODEL_P
1972 if (PROFILE_MODEL_P (current_cpu
))
1974 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
1975 m32rx_model_profile_insn (current_cpu
, abuf
);
1983 /* lock: lock $dr,@$sr. */
1986 SEM_FN_NAME (m32rx
,lock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
1988 insn_t insn
= SEM_INSN (sem_arg
);
1989 #define OPRND(f) par_exec->operands.fmt_lock.f
1990 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1991 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
1992 EXTRACT_FMT_LOCK_VARS
/* f-op1 f-r1 f-op2 f-r2 */
1993 EXTRACT_FMT_LOCK_CODE
1997 TRACE_RESULT (current_cpu
, "lock-0", 'x', CPU (h_lock
));
1998 CPU (h_gr
[f_r1
]) = OPRND (h_memory_sr
);
1999 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2002 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
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_mark_set_h_gr (current_cpu
, abuf
);
2009 m32rx_model_profile_insn (current_cpu
, abuf
);
2017 /* machi-a: machi $src1,$src2,$acc. */
2020 SEM_FN_NAME (m32rx
,machi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2022 insn_t insn
= SEM_INSN (sem_arg
);
2023 #define OPRND(f) par_exec->operands.fmt_machi_a.f
2024 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2025 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2026 EXTRACT_FMT_MACHI_A_VARS
/* f-op1 f-r1 f-acc f-op23 f-r2 */
2027 EXTRACT_FMT_MACHI_A_CODE
2029 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));
2030 TRACE_RESULT (current_cpu
, "acc", 'D', m32rx_h_accums_get (current_cpu
, f_acc
));
2032 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2034 #if WITH_PROFILE_MODEL_P
2035 if (PROFILE_MODEL_P (current_cpu
))
2037 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2038 m32rx_model_profile_insn (current_cpu
, abuf
);
2046 /* maclo-a: maclo $src1,$src2,$acc. */
2049 SEM_FN_NAME (m32rx
,maclo_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2051 insn_t insn
= SEM_INSN (sem_arg
);
2052 #define OPRND(f) par_exec->operands.fmt_machi_a.f
2053 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2054 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2055 EXTRACT_FMT_MACHI_A_VARS
/* f-op1 f-r1 f-acc f-op23 f-r2 */
2056 EXTRACT_FMT_MACHI_A_CODE
2058 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));
2059 TRACE_RESULT (current_cpu
, "acc", 'D', m32rx_h_accums_get (current_cpu
, f_acc
));
2061 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2063 #if WITH_PROFILE_MODEL_P
2064 if (PROFILE_MODEL_P (current_cpu
))
2066 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2067 m32rx_model_profile_insn (current_cpu
, abuf
);
2075 /* macwhi: macwhi $src1,$src2. */
2078 SEM_FN_NAME (m32rx
,macwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2080 insn_t insn
= SEM_INSN (sem_arg
);
2081 #define OPRND(f) par_exec->operands.fmt_macwhi.f
2082 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2083 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2084 EXTRACT_FMT_MACWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2085 EXTRACT_FMT_MACWHI_CODE
2087 m32rx_h_accum_set (current_cpu
, SRADI (SLLDI (ADDDI (OPRND (accum
), MULDI (EXTSIDI (OPRND (src1
)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2
), 16))))), 8), 8));
2088 TRACE_RESULT (current_cpu
, "accum", 'D', m32rx_h_accum_get (current_cpu
));
2090 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2092 #if WITH_PROFILE_MODEL_P
2093 if (PROFILE_MODEL_P (current_cpu
))
2095 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2096 m32rx_model_profile_insn (current_cpu
, abuf
);
2104 /* macwlo: macwlo $src1,$src2. */
2107 SEM_FN_NAME (m32rx
,macwlo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2109 insn_t insn
= SEM_INSN (sem_arg
);
2110 #define OPRND(f) par_exec->operands.fmt_macwhi.f
2111 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2112 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2113 EXTRACT_FMT_MACWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2114 EXTRACT_FMT_MACWHI_CODE
2116 m32rx_h_accum_set (current_cpu
, SRADI (SLLDI (ADDDI (OPRND (accum
), MULDI (EXTSIDI (OPRND (src1
)), EXTHIDI (TRUNCSIHI (OPRND (src2
))))), 8), 8));
2117 TRACE_RESULT (current_cpu
, "accum", 'D', m32rx_h_accum_get (current_cpu
));
2119 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2121 #if WITH_PROFILE_MODEL_P
2122 if (PROFILE_MODEL_P (current_cpu
))
2124 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2125 m32rx_model_profile_insn (current_cpu
, abuf
);
2133 /* mul: mul $dr,$sr. */
2136 SEM_FN_NAME (m32rx
,mul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2138 insn_t insn
= SEM_INSN (sem_arg
);
2139 #define OPRND(f) par_exec->operands.fmt_add.f
2140 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2141 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2142 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2143 EXTRACT_FMT_ADD_CODE
2145 CPU (h_gr
[f_r1
]) = MULSI (OPRND (dr
), OPRND (sr
));
2146 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2148 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2150 #if WITH_PROFILE_MODEL_P
2151 if (PROFILE_MODEL_P (current_cpu
))
2153 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2154 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2155 m32rx_model_profile_insn (current_cpu
, abuf
);
2163 /* mulhi-a: mulhi $src1,$src2,$acc. */
2166 SEM_FN_NAME (m32rx
,mulhi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2168 insn_t insn
= SEM_INSN (sem_arg
);
2169 #define OPRND(f) par_exec->operands.fmt_mulhi_a.f
2170 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2171 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2172 EXTRACT_FMT_MULHI_A_VARS
/* f-op1 f-r1 f-acc f-op23 f-r2 */
2173 EXTRACT_FMT_MULHI_A_CODE
2175 m32rx_h_accums_set (current_cpu
, f_acc
, SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (OPRND (src1
), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2
), 16)))), 16), 16));
2176 TRACE_RESULT (current_cpu
, "acc", 'D', m32rx_h_accums_get (current_cpu
, f_acc
));
2178 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2180 #if WITH_PROFILE_MODEL_P
2181 if (PROFILE_MODEL_P (current_cpu
))
2183 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2184 m32rx_model_profile_insn (current_cpu
, abuf
);
2192 /* mullo-a: mullo $src1,$src2,$acc. */
2195 SEM_FN_NAME (m32rx
,mullo_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2197 insn_t insn
= SEM_INSN (sem_arg
);
2198 #define OPRND(f) par_exec->operands.fmt_mulhi_a.f
2199 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2200 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2201 EXTRACT_FMT_MULHI_A_VARS
/* f-op1 f-r1 f-acc f-op23 f-r2 */
2202 EXTRACT_FMT_MULHI_A_CODE
2204 m32rx_h_accums_set (current_cpu
, f_acc
, SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (OPRND (src1
), 16)), EXTHIDI (TRUNCSIHI (OPRND (src2
)))), 16), 16));
2205 TRACE_RESULT (current_cpu
, "acc", 'D', m32rx_h_accums_get (current_cpu
, f_acc
));
2207 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2209 #if WITH_PROFILE_MODEL_P
2210 if (PROFILE_MODEL_P (current_cpu
))
2212 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2213 m32rx_model_profile_insn (current_cpu
, abuf
);
2221 /* mulwhi: mulwhi $src1,$src2. */
2224 SEM_FN_NAME (m32rx
,mulwhi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2226 insn_t insn
= SEM_INSN (sem_arg
);
2227 #define OPRND(f) par_exec->operands.fmt_mulwhi.f
2228 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2229 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2230 EXTRACT_FMT_MULWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2231 EXTRACT_FMT_MULWHI_CODE
2233 m32rx_h_accum_set (current_cpu
, SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1
)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2
), 16)))), 8), 8));
2234 TRACE_RESULT (current_cpu
, "accum", 'D', m32rx_h_accum_get (current_cpu
));
2236 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2238 #if WITH_PROFILE_MODEL_P
2239 if (PROFILE_MODEL_P (current_cpu
))
2241 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2242 m32rx_model_profile_insn (current_cpu
, abuf
);
2250 /* mulwlo: mulwlo $src1,$src2. */
2253 SEM_FN_NAME (m32rx
,mulwlo
) (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_mulwhi.f
2257 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2258 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2259 EXTRACT_FMT_MULWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2260 EXTRACT_FMT_MULWHI_CODE
2262 m32rx_h_accum_set (current_cpu
, SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1
)), EXTHIDI (TRUNCSIHI (OPRND (src2
)))), 8), 8));
2263 TRACE_RESULT (current_cpu
, "accum", 'D', m32rx_h_accum_get (current_cpu
));
2265 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2267 #if WITH_PROFILE_MODEL_P
2268 if (PROFILE_MODEL_P (current_cpu
))
2270 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2271 m32rx_model_profile_insn (current_cpu
, abuf
);
2279 /* mv: mv $dr,$sr. */
2282 SEM_FN_NAME (m32rx
,mv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2284 insn_t insn
= SEM_INSN (sem_arg
);
2285 #define OPRND(f) par_exec->operands.fmt_mv.f
2286 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2287 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2288 EXTRACT_FMT_MV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2291 CPU (h_gr
[f_r1
]) = OPRND (sr
);
2292 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2294 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2296 #if WITH_PROFILE_MODEL_P
2297 if (PROFILE_MODEL_P (current_cpu
))
2299 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2300 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2301 m32rx_model_profile_insn (current_cpu
, abuf
);
2309 /* mvfachi-a: mvfachi $dr,$accs. */
2312 SEM_FN_NAME (m32rx
,mvfachi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2314 insn_t insn
= SEM_INSN (sem_arg
);
2315 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2316 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2317 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2318 EXTRACT_FMT_MVFACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2319 EXTRACT_FMT_MVFACHI_A_CODE
2321 CPU (h_gr
[f_r1
]) = TRUNCDISI (SRADI (OPRND (accs
), 32));
2322 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2324 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2326 #if WITH_PROFILE_MODEL_P
2327 if (PROFILE_MODEL_P (current_cpu
))
2329 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2330 m32rx_model_profile_insn (current_cpu
, abuf
);
2338 /* mvfaclo-a: mvfaclo $dr,$accs. */
2341 SEM_FN_NAME (m32rx
,mvfaclo_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2343 insn_t insn
= SEM_INSN (sem_arg
);
2344 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2345 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2346 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2347 EXTRACT_FMT_MVFACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2348 EXTRACT_FMT_MVFACHI_A_CODE
2350 CPU (h_gr
[f_r1
]) = TRUNCDISI (OPRND (accs
));
2351 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2353 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2355 #if WITH_PROFILE_MODEL_P
2356 if (PROFILE_MODEL_P (current_cpu
))
2358 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2359 m32rx_model_profile_insn (current_cpu
, abuf
);
2367 /* mvfacmi-a: mvfacmi $dr,$accs. */
2370 SEM_FN_NAME (m32rx
,mvfacmi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2372 insn_t insn
= SEM_INSN (sem_arg
);
2373 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2374 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2375 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2376 EXTRACT_FMT_MVFACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2377 EXTRACT_FMT_MVFACHI_A_CODE
2379 CPU (h_gr
[f_r1
]) = TRUNCDISI (SRADI (OPRND (accs
), 16));
2380 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2382 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2384 #if WITH_PROFILE_MODEL_P
2385 if (PROFILE_MODEL_P (current_cpu
))
2387 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2388 m32rx_model_profile_insn (current_cpu
, abuf
);
2396 /* mvfc: mvfc $dr,$scr. */
2399 SEM_FN_NAME (m32rx
,mvfc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2401 insn_t insn
= SEM_INSN (sem_arg
);
2402 #define OPRND(f) par_exec->operands.fmt_mvfc.f
2403 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2404 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2405 EXTRACT_FMT_MVFC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2406 EXTRACT_FMT_MVFC_CODE
2408 CPU (h_gr
[f_r1
]) = OPRND (scr
);
2409 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2411 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2413 #if WITH_PROFILE_MODEL_P
2414 if (PROFILE_MODEL_P (current_cpu
))
2416 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2417 m32rx_model_profile_insn (current_cpu
, abuf
);
2425 /* mvtachi-a: mvtachi $src1,$accs. */
2428 SEM_FN_NAME (m32rx
,mvtachi_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2430 insn_t insn
= SEM_INSN (sem_arg
);
2431 #define OPRND(f) par_exec->operands.fmt_mvtachi_a.f
2432 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2433 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2434 EXTRACT_FMT_MVTACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2435 EXTRACT_FMT_MVTACHI_A_CODE
2437 m32rx_h_accums_set (current_cpu
, f_accs
, ORDI (ANDDI (OPRND (accs
), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (OPRND (src1
)), 32)));
2438 TRACE_RESULT (current_cpu
, "accs", 'D', m32rx_h_accums_get (current_cpu
, f_accs
));
2440 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2442 #if WITH_PROFILE_MODEL_P
2443 if (PROFILE_MODEL_P (current_cpu
))
2445 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2446 m32rx_model_profile_insn (current_cpu
, abuf
);
2454 /* mvtaclo-a: mvtaclo $src1,$accs. */
2457 SEM_FN_NAME (m32rx
,mvtaclo_a
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2459 insn_t insn
= SEM_INSN (sem_arg
);
2460 #define OPRND(f) par_exec->operands.fmt_mvtachi_a.f
2461 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2462 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2463 EXTRACT_FMT_MVTACHI_A_VARS
/* f-op1 f-r1 f-op2 f-accs f-op3 */
2464 EXTRACT_FMT_MVTACHI_A_CODE
2466 m32rx_h_accums_set (current_cpu
, f_accs
, ORDI (ANDDI (OPRND (accs
), MAKEDI (0xffffffff, 0)), ZEXTSIDI (OPRND (src1
))));
2467 TRACE_RESULT (current_cpu
, "accs", 'D', m32rx_h_accums_get (current_cpu
, f_accs
));
2469 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2471 #if WITH_PROFILE_MODEL_P
2472 if (PROFILE_MODEL_P (current_cpu
))
2474 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2475 m32rx_model_profile_insn (current_cpu
, abuf
);
2483 /* mvtc: mvtc $sr,$dcr. */
2486 SEM_FN_NAME (m32rx
,mvtc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2488 insn_t insn
= SEM_INSN (sem_arg
);
2489 #define OPRND(f) par_exec->operands.fmt_mvtc.f
2490 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2491 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2492 EXTRACT_FMT_MVTC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2493 EXTRACT_FMT_MVTC_CODE
2495 m32rx_h_cr_set (current_cpu
, f_r1
, OPRND (sr
));
2496 TRACE_RESULT (current_cpu
, "dcr", 'x', m32rx_h_cr_get (current_cpu
, f_r1
));
2498 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2500 #if WITH_PROFILE_MODEL_P
2501 if (PROFILE_MODEL_P (current_cpu
))
2503 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2504 m32rx_model_profile_insn (current_cpu
, abuf
);
2512 /* neg: neg $dr,$sr. */
2515 SEM_FN_NAME (m32rx
,neg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2517 insn_t insn
= SEM_INSN (sem_arg
);
2518 #define OPRND(f) par_exec->operands.fmt_mv.f
2519 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2520 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2521 EXTRACT_FMT_MV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2524 CPU (h_gr
[f_r1
]) = NEGSI (OPRND (sr
));
2525 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2527 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2529 #if WITH_PROFILE_MODEL_P
2530 if (PROFILE_MODEL_P (current_cpu
))
2532 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2533 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2534 m32rx_model_profile_insn (current_cpu
, abuf
);
2545 SEM_FN_NAME (m32rx
,nop
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2547 insn_t insn
= SEM_INSN (sem_arg
);
2548 #define OPRND(f) par_exec->operands.fmt_nop.f
2549 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2550 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2551 EXTRACT_FMT_NOP_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2552 EXTRACT_FMT_NOP_CODE
2554 PROFILE_COUNT_FILLNOPS (current_cpu
, abuf
->addr
);
2556 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2558 #if WITH_PROFILE_MODEL_P
2559 if (PROFILE_MODEL_P (current_cpu
))
2561 m32rx_model_profile_insn (current_cpu
, abuf
);
2569 /* not: not $dr,$sr. */
2572 SEM_FN_NAME (m32rx
,not) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2574 insn_t insn
= SEM_INSN (sem_arg
);
2575 #define OPRND(f) par_exec->operands.fmt_mv.f
2576 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2577 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2578 EXTRACT_FMT_MV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2581 CPU (h_gr
[f_r1
]) = INVSI (OPRND (sr
));
2582 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2584 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2586 #if WITH_PROFILE_MODEL_P
2587 if (PROFILE_MODEL_P (current_cpu
))
2589 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2590 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2591 m32rx_model_profile_insn (current_cpu
, abuf
);
2599 /* rac-dsi: rac $accd,$accs,$imm1. */
2602 SEM_FN_NAME (m32rx
,rac_dsi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2604 insn_t insn
= SEM_INSN (sem_arg
);
2605 #define OPRND(f) par_exec->operands.fmt_rac_dsi.f
2606 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2607 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2608 EXTRACT_FMT_RAC_DSI_VARS
/* f-op1 f-accd f-bits67 f-op2 f-accs f-bit14 f-imm1 */
2609 EXTRACT_FMT_RAC_DSI_CODE
2613 tmp_tmp1
= SLLDI (OPRND (accs
), OPRND (imm1
));
2614 tmp_tmp1
= ADDDI (tmp_tmp1
, MAKEDI (0, 32768));
2615 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))));
2616 TRACE_RESULT (current_cpu
, "accd", 'D', m32rx_h_accums_get (current_cpu
, f_accd
));
2619 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2621 #if WITH_PROFILE_MODEL_P
2622 if (PROFILE_MODEL_P (current_cpu
))
2624 m32rx_model_profile_insn (current_cpu
, abuf
);
2632 /* rach-dsi: rach $accd,$accs,$imm1. */
2635 SEM_FN_NAME (m32rx
,rach_dsi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2637 insn_t insn
= SEM_INSN (sem_arg
);
2638 #define OPRND(f) par_exec->operands.fmt_rac_dsi.f
2639 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2640 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2641 EXTRACT_FMT_RAC_DSI_VARS
/* f-op1 f-accd f-bits67 f-op2 f-accs f-bit14 f-imm1 */
2642 EXTRACT_FMT_RAC_DSI_CODE
2646 tmp_tmp1
= SLLDI (OPRND (accs
), OPRND (imm1
));
2647 tmp_tmp1
= ADDDI (tmp_tmp1
, MAKEDI (0, 0x80000000));
2648 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))));
2649 TRACE_RESULT (current_cpu
, "accd", 'D', m32rx_h_accums_get (current_cpu
, f_accd
));
2652 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2654 #if WITH_PROFILE_MODEL_P
2655 if (PROFILE_MODEL_P (current_cpu
))
2657 m32rx_model_profile_insn (current_cpu
, abuf
);
2668 SEM_FN_NAME (m32rx
,rte
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2670 insn_t insn
= SEM_INSN (sem_arg
);
2671 #define OPRND(f) par_exec->operands.fmt_rte.f
2672 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2673 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2675 EXTRACT_FMT_RTE_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2676 EXTRACT_FMT_RTE_CODE
2679 CPU (h_sm
) = OPRND (h_bsm_0
);
2680 TRACE_RESULT (current_cpu
, "sm-0", 'x', CPU (h_sm
));
2681 CPU (h_ie
) = OPRND (h_bie_0
);
2682 TRACE_RESULT (current_cpu
, "ie-0", 'x', CPU (h_ie
));
2683 CPU (h_cond
) = OPRND (h_bcond_0
);
2684 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
2685 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, ANDSI (OPRND (h_bpc_0
), -4)));
2687 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
2690 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2692 #if WITH_PROFILE_MODEL_P
2693 if (PROFILE_MODEL_P (current_cpu
))
2695 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
2703 /* seth: seth $dr,$hash$hi16. */
2706 SEM_FN_NAME (m32rx
,seth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2708 insn_t insn
= SEM_INSN (sem_arg
);
2709 #define OPRND(f) par_exec->operands.fmt_seth.f
2710 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2711 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2712 EXTRACT_FMT_SETH_VARS
/* f-op1 f-r1 f-op2 f-r2 f-hi16 */
2713 EXTRACT_FMT_SETH_CODE
2715 CPU (h_gr
[f_r1
]) = SLLSI (OPRND (hi16
), 16);
2716 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2718 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2720 #if WITH_PROFILE_MODEL_P
2721 if (PROFILE_MODEL_P (current_cpu
))
2723 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2724 m32rx_model_profile_insn (current_cpu
, abuf
);
2732 /* sll: sll $dr,$sr. */
2735 SEM_FN_NAME (m32rx
,sll
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2737 insn_t insn
= SEM_INSN (sem_arg
);
2738 #define OPRND(f) par_exec->operands.fmt_add.f
2739 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2740 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2741 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2742 EXTRACT_FMT_ADD_CODE
2744 CPU (h_gr
[f_r1
]) = SLLSI (OPRND (dr
), ANDSI (OPRND (sr
), 31));
2745 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2747 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2749 #if WITH_PROFILE_MODEL_P
2750 if (PROFILE_MODEL_P (current_cpu
))
2752 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2753 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2754 m32rx_model_profile_insn (current_cpu
, abuf
);
2762 /* sll3: sll3 $dr,$sr,$simm16. */
2765 SEM_FN_NAME (m32rx
,sll3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2767 insn_t insn
= SEM_INSN (sem_arg
);
2768 #define OPRND(f) par_exec->operands.fmt_sll3.f
2769 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2770 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2771 EXTRACT_FMT_SLL3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2772 EXTRACT_FMT_SLL3_CODE
2774 CPU (h_gr
[f_r1
]) = SLLSI (OPRND (sr
), ANDSI (OPRND (simm16
), 31));
2775 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2777 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2779 #if WITH_PROFILE_MODEL_P
2780 if (PROFILE_MODEL_P (current_cpu
))
2782 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2783 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2784 m32rx_model_profile_insn (current_cpu
, abuf
);
2792 /* slli: slli $dr,$uimm5. */
2795 SEM_FN_NAME (m32rx
,slli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2797 insn_t insn
= SEM_INSN (sem_arg
);
2798 #define OPRND(f) par_exec->operands.fmt_slli.f
2799 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2800 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2801 EXTRACT_FMT_SLLI_VARS
/* f-op1 f-r1 f-shift-op2 f-uimm5 */
2802 EXTRACT_FMT_SLLI_CODE
2804 CPU (h_gr
[f_r1
]) = SLLSI (OPRND (dr
), OPRND (uimm5
));
2805 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2807 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2809 #if WITH_PROFILE_MODEL_P
2810 if (PROFILE_MODEL_P (current_cpu
))
2812 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2813 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2814 m32rx_model_profile_insn (current_cpu
, abuf
);
2822 /* sra: sra $dr,$sr. */
2825 SEM_FN_NAME (m32rx
,sra
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2827 insn_t insn
= SEM_INSN (sem_arg
);
2828 #define OPRND(f) par_exec->operands.fmt_add.f
2829 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2830 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2831 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2832 EXTRACT_FMT_ADD_CODE
2834 CPU (h_gr
[f_r1
]) = SRASI (OPRND (dr
), ANDSI (OPRND (sr
), 31));
2835 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2837 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2839 #if WITH_PROFILE_MODEL_P
2840 if (PROFILE_MODEL_P (current_cpu
))
2842 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2843 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2844 m32rx_model_profile_insn (current_cpu
, abuf
);
2852 /* sra3: sra3 $dr,$sr,$simm16. */
2855 SEM_FN_NAME (m32rx
,sra3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2857 insn_t insn
= SEM_INSN (sem_arg
);
2858 #define OPRND(f) par_exec->operands.fmt_sll3.f
2859 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2860 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2861 EXTRACT_FMT_SLL3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2862 EXTRACT_FMT_SLL3_CODE
2864 CPU (h_gr
[f_r1
]) = SRASI (OPRND (sr
), ANDSI (OPRND (simm16
), 31));
2865 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2867 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2869 #if WITH_PROFILE_MODEL_P
2870 if (PROFILE_MODEL_P (current_cpu
))
2872 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2873 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2874 m32rx_model_profile_insn (current_cpu
, abuf
);
2882 /* srai: srai $dr,$uimm5. */
2885 SEM_FN_NAME (m32rx
,srai
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2887 insn_t insn
= SEM_INSN (sem_arg
);
2888 #define OPRND(f) par_exec->operands.fmt_slli.f
2889 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2890 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2891 EXTRACT_FMT_SLLI_VARS
/* f-op1 f-r1 f-shift-op2 f-uimm5 */
2892 EXTRACT_FMT_SLLI_CODE
2894 CPU (h_gr
[f_r1
]) = SRASI (OPRND (dr
), OPRND (uimm5
));
2895 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2897 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2899 #if WITH_PROFILE_MODEL_P
2900 if (PROFILE_MODEL_P (current_cpu
))
2902 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2903 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2904 m32rx_model_profile_insn (current_cpu
, abuf
);
2912 /* srl: srl $dr,$sr. */
2915 SEM_FN_NAME (m32rx
,srl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2917 insn_t insn
= SEM_INSN (sem_arg
);
2918 #define OPRND(f) par_exec->operands.fmt_add.f
2919 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2920 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2921 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
2922 EXTRACT_FMT_ADD_CODE
2924 CPU (h_gr
[f_r1
]) = SRLSI (OPRND (dr
), ANDSI (OPRND (sr
), 31));
2925 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2927 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2929 #if WITH_PROFILE_MODEL_P
2930 if (PROFILE_MODEL_P (current_cpu
))
2932 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2933 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2934 m32rx_model_profile_insn (current_cpu
, abuf
);
2942 /* srl3: srl3 $dr,$sr,$simm16. */
2945 SEM_FN_NAME (m32rx
,srl3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2947 insn_t insn
= SEM_INSN (sem_arg
);
2948 #define OPRND(f) par_exec->operands.fmt_sll3.f
2949 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2950 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
2951 EXTRACT_FMT_SLL3_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2952 EXTRACT_FMT_SLL3_CODE
2954 CPU (h_gr
[f_r1
]) = SRLSI (OPRND (sr
), ANDSI (OPRND (simm16
), 31));
2955 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2957 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2959 #if WITH_PROFILE_MODEL_P
2960 if (PROFILE_MODEL_P (current_cpu
))
2962 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2963 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2964 m32rx_model_profile_insn (current_cpu
, abuf
);
2972 /* srli: srli $dr,$uimm5. */
2975 SEM_FN_NAME (m32rx
,srli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
2977 insn_t insn
= SEM_INSN (sem_arg
);
2978 #define OPRND(f) par_exec->operands.fmt_slli.f
2979 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2980 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
2981 EXTRACT_FMT_SLLI_VARS
/* f-op1 f-r1 f-shift-op2 f-uimm5 */
2982 EXTRACT_FMT_SLLI_CODE
2984 CPU (h_gr
[f_r1
]) = SRLSI (OPRND (dr
), OPRND (uimm5
));
2985 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
2987 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
2989 #if WITH_PROFILE_MODEL_P
2990 if (PROFILE_MODEL_P (current_cpu
))
2992 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
2993 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
2994 m32rx_model_profile_insn (current_cpu
, abuf
);
3002 /* st: st $src1,@$src2. */
3005 SEM_FN_NAME (m32rx
,st
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3007 insn_t insn
= SEM_INSN (sem_arg
);
3008 #define OPRND(f) par_exec->operands.fmt_st.f
3009 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3010 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3011 EXTRACT_FMT_ST_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3014 SETMEMSI (current_cpu
, OPRND (src2
), OPRND (src1
));
3015 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, OPRND (src2
)));
3017 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3019 #if WITH_PROFILE_MODEL_P
3020 if (PROFILE_MODEL_P (current_cpu
))
3022 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3023 m32rx_model_profile_insn (current_cpu
, abuf
);
3031 /* st-d: st $src1,@($slo16,$src2). */
3034 SEM_FN_NAME (m32rx
,st_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3036 insn_t insn
= SEM_INSN (sem_arg
);
3037 #define OPRND(f) par_exec->operands.fmt_st_d.f
3038 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3039 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3040 EXTRACT_FMT_ST_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
3041 EXTRACT_FMT_ST_D_CODE
3043 SETMEMSI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
)), OPRND (src1
));
3044 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
))));
3046 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3048 #if WITH_PROFILE_MODEL_P
3049 if (PROFILE_MODEL_P (current_cpu
))
3051 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3052 m32rx_model_profile_insn (current_cpu
, abuf
);
3060 /* stb: stb $src1,@$src2. */
3063 SEM_FN_NAME (m32rx
,stb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3065 insn_t insn
= SEM_INSN (sem_arg
);
3066 #define OPRND(f) par_exec->operands.fmt_stb.f
3067 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3068 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3069 EXTRACT_FMT_STB_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3070 EXTRACT_FMT_STB_CODE
3072 SETMEMQI (current_cpu
, OPRND (src2
), OPRND (src1
));
3073 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMQI (current_cpu
, OPRND (src2
)));
3075 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3077 #if WITH_PROFILE_MODEL_P
3078 if (PROFILE_MODEL_P (current_cpu
))
3080 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3081 m32rx_model_profile_insn (current_cpu
, abuf
);
3089 /* stb-d: stb $src1,@($slo16,$src2). */
3092 SEM_FN_NAME (m32rx
,stb_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3094 insn_t insn
= SEM_INSN (sem_arg
);
3095 #define OPRND(f) par_exec->operands.fmt_stb_d.f
3096 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3097 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3098 EXTRACT_FMT_STB_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
3099 EXTRACT_FMT_STB_D_CODE
3101 SETMEMQI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
)), OPRND (src1
));
3102 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMQI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
))));
3104 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3106 #if WITH_PROFILE_MODEL_P
3107 if (PROFILE_MODEL_P (current_cpu
))
3109 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3110 m32rx_model_profile_insn (current_cpu
, abuf
);
3118 /* sth: sth $src1,@$src2. */
3121 SEM_FN_NAME (m32rx
,sth
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3123 insn_t insn
= SEM_INSN (sem_arg
);
3124 #define OPRND(f) par_exec->operands.fmt_sth.f
3125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3126 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3127 EXTRACT_FMT_STH_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3128 EXTRACT_FMT_STH_CODE
3130 SETMEMHI (current_cpu
, OPRND (src2
), OPRND (src1
));
3131 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMHI (current_cpu
, OPRND (src2
)));
3133 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3135 #if WITH_PROFILE_MODEL_P
3136 if (PROFILE_MODEL_P (current_cpu
))
3138 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3139 m32rx_model_profile_insn (current_cpu
, abuf
);
3147 /* sth-d: sth $src1,@($slo16,$src2). */
3150 SEM_FN_NAME (m32rx
,sth_d
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3152 insn_t insn
= SEM_INSN (sem_arg
);
3153 #define OPRND(f) par_exec->operands.fmt_sth_d.f
3154 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3155 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3156 EXTRACT_FMT_STH_D_VARS
/* f-op1 f-r1 f-op2 f-r2 f-simm16 */
3157 EXTRACT_FMT_STH_D_CODE
3159 SETMEMHI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
)), OPRND (src1
));
3160 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMHI (current_cpu
, ADDSI (OPRND (src2
), OPRND (slo16
))));
3162 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3164 #if WITH_PROFILE_MODEL_P
3165 if (PROFILE_MODEL_P (current_cpu
))
3167 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3168 m32rx_model_profile_insn (current_cpu
, abuf
);
3176 /* st-plus: st $src1,@+$src2. */
3179 SEM_FN_NAME (m32rx
,st_plus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3181 insn_t insn
= SEM_INSN (sem_arg
);
3182 #define OPRND(f) par_exec->operands.fmt_st_plus.f
3183 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3184 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3185 EXTRACT_FMT_ST_PLUS_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3186 EXTRACT_FMT_ST_PLUS_CODE
3190 tmp_new_src2
= ADDSI (OPRND (src2
), 4);
3191 SETMEMSI (current_cpu
, tmp_new_src2
, OPRND (src1
));
3192 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, tmp_new_src2
));
3193 CPU (h_gr
[f_r2
]) = tmp_new_src2
;
3194 TRACE_RESULT (current_cpu
, "src2", 'x', CPU (h_gr
[f_r2
]));
3197 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3199 #if WITH_PROFILE_MODEL_P
3200 if (PROFILE_MODEL_P (current_cpu
))
3202 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3203 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3204 m32rx_model_profile_insn (current_cpu
, abuf
);
3212 /* st-minus: st $src1,@-$src2. */
3215 SEM_FN_NAME (m32rx
,st_minus
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3217 insn_t insn
= SEM_INSN (sem_arg
);
3218 #define OPRND(f) par_exec->operands.fmt_st_plus.f
3219 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3220 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3221 EXTRACT_FMT_ST_PLUS_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3222 EXTRACT_FMT_ST_PLUS_CODE
3226 tmp_new_src2
= SUBSI (OPRND (src2
), 4);
3227 SETMEMSI (current_cpu
, tmp_new_src2
, OPRND (src1
));
3228 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, tmp_new_src2
));
3229 CPU (h_gr
[f_r2
]) = tmp_new_src2
;
3230 TRACE_RESULT (current_cpu
, "src2", 'x', CPU (h_gr
[f_r2
]));
3233 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3235 #if WITH_PROFILE_MODEL_P
3236 if (PROFILE_MODEL_P (current_cpu
))
3238 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3239 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3240 m32rx_model_profile_insn (current_cpu
, abuf
);
3248 /* sub: sub $dr,$sr. */
3251 SEM_FN_NAME (m32rx
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3253 insn_t insn
= SEM_INSN (sem_arg
);
3254 #define OPRND(f) par_exec->operands.fmt_add.f
3255 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3256 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3257 EXTRACT_FMT_ADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3258 EXTRACT_FMT_ADD_CODE
3260 CPU (h_gr
[f_r1
]) = SUBSI (OPRND (dr
), OPRND (sr
));
3261 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3263 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3265 #if WITH_PROFILE_MODEL_P
3266 if (PROFILE_MODEL_P (current_cpu
))
3268 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3269 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3270 m32rx_model_profile_insn (current_cpu
, abuf
);
3278 /* subv: subv $dr,$sr. */
3281 SEM_FN_NAME (m32rx
,subv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3283 insn_t insn
= SEM_INSN (sem_arg
);
3284 #define OPRND(f) par_exec->operands.fmt_addv.f
3285 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3286 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3287 EXTRACT_FMT_ADDV_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3288 EXTRACT_FMT_ADDV_CODE
3292 temp0
= SUBSI (OPRND (dr
), OPRND (sr
));
3293 temp1
= SUBOFSI (OPRND (dr
), OPRND (sr
), 0);
3294 CPU (h_gr
[f_r1
]) = temp0
;
3295 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3296 CPU (h_cond
) = temp1
;
3297 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
3300 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3302 #if WITH_PROFILE_MODEL_P
3303 if (PROFILE_MODEL_P (current_cpu
))
3305 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3306 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3307 m32rx_model_profile_insn (current_cpu
, abuf
);
3315 /* subx: subx $dr,$sr. */
3318 SEM_FN_NAME (m32rx
,subx
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3320 insn_t insn
= SEM_INSN (sem_arg
);
3321 #define OPRND(f) par_exec->operands.fmt_addx.f
3322 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3323 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3324 EXTRACT_FMT_ADDX_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3325 EXTRACT_FMT_ADDX_CODE
3329 temp0
= SUBCSI (OPRND (dr
), OPRND (sr
), OPRND (condbit
));
3330 temp1
= SUBCFSI (OPRND (dr
), OPRND (sr
), OPRND (condbit
));
3331 CPU (h_gr
[f_r1
]) = temp0
;
3332 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3333 CPU (h_cond
) = temp1
;
3334 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
3337 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3339 #if WITH_PROFILE_MODEL_P
3340 if (PROFILE_MODEL_P (current_cpu
))
3342 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3343 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3344 m32rx_model_profile_insn (current_cpu
, abuf
);
3352 /* trap: trap $uimm4. */
3355 SEM_FN_NAME (m32rx
,trap
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3357 insn_t insn
= SEM_INSN (sem_arg
);
3358 #define OPRND(f) par_exec->operands.fmt_trap.f
3359 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3360 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3362 EXTRACT_FMT_TRAP_VARS
/* f-op1 f-r1 f-op2 f-uimm4 */
3363 EXTRACT_FMT_TRAP_CODE
3366 m32rx_h_cr_set (current_cpu
, 6, ADDSI (OPRND (pc
), 4));
3367 TRACE_RESULT (current_cpu
, "cr-6", 'x', m32rx_h_cr_get (current_cpu
, 6));
3368 m32rx_h_cr_set (current_cpu
, 0, ANDSI (SLLSI (OPRND (h_cr_0
), 8), 65408));
3369 TRACE_RESULT (current_cpu
, "cr-0", 'x', m32rx_h_cr_get (current_cpu
, 0));
3370 BRANCH_NEW_PC (new_pc
, SEM_BRANCH_VIA_ADDR (sem_arg
, m32r_trap (current_cpu
, OPRND (uimm4
))));
3372 TRACE_RESULT (current_cpu
, "pc", 'x', new_pc
);
3375 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3377 #if WITH_PROFILE_MODEL_P
3378 if (PROFILE_MODEL_P (current_cpu
))
3380 m32rx_model_profile_cti_insn (current_cpu
, abuf
, taken_p
);
3388 /* unlock: unlock $src1,@$src2. */
3391 SEM_FN_NAME (m32rx
,unlock
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3393 insn_t insn
= SEM_INSN (sem_arg
);
3394 #define OPRND(f) par_exec->operands.fmt_unlock.f
3395 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3396 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3397 EXTRACT_FMT_UNLOCK_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3398 EXTRACT_FMT_UNLOCK_CODE
3401 if (OPRND (h_lock_0
)) {
3402 SETMEMSI (current_cpu
, OPRND (src2
), OPRND (src1
));
3403 TRACE_RESULT (current_cpu
, "memory", 'x', GETMEMSI (current_cpu
, OPRND (src2
)));
3406 TRACE_RESULT (current_cpu
, "lock-0", 'x', CPU (h_lock
));
3409 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3411 #if WITH_PROFILE_MODEL_P
3412 if (PROFILE_MODEL_P (current_cpu
))
3414 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3415 m32rx_model_profile_insn (current_cpu
, abuf
);
3423 /* satb: satb $dr,$sr. */
3426 SEM_FN_NAME (m32rx
,satb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3428 insn_t insn
= SEM_INSN (sem_arg
);
3429 #define OPRND(f) par_exec->operands.fmt_satb.f
3430 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3431 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3432 EXTRACT_FMT_SATB_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3433 EXTRACT_FMT_SATB_CODE
3435 CPU (h_gr
[f_r1
]) = (GESI (OPRND (sr
), 127)) ? (127) : (LESI (OPRND (sr
), -128)) ? (-128) : (OPRND (sr
));
3436 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3438 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3440 #if WITH_PROFILE_MODEL_P
3441 if (PROFILE_MODEL_P (current_cpu
))
3443 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3444 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3445 m32rx_model_profile_insn (current_cpu
, abuf
);
3453 /* sath: sath $dr,$sr. */
3456 SEM_FN_NAME (m32rx
,sath
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3458 insn_t insn
= SEM_INSN (sem_arg
);
3459 #define OPRND(f) par_exec->operands.fmt_satb.f
3460 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3461 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3462 EXTRACT_FMT_SATB_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3463 EXTRACT_FMT_SATB_CODE
3465 CPU (h_gr
[f_r1
]) = (GESI (OPRND (sr
), 32767)) ? (32767) : (LESI (OPRND (sr
), -32768)) ? (-32768) : (OPRND (sr
));
3466 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3468 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3470 #if WITH_PROFILE_MODEL_P
3471 if (PROFILE_MODEL_P (current_cpu
))
3473 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3474 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3475 m32rx_model_profile_insn (current_cpu
, abuf
);
3483 /* sat: sat $dr,$sr. */
3486 SEM_FN_NAME (m32rx
,sat
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3488 insn_t insn
= SEM_INSN (sem_arg
);
3489 #define OPRND(f) par_exec->operands.fmt_sat.f
3490 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3491 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 4);
3492 EXTRACT_FMT_SAT_VARS
/* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3493 EXTRACT_FMT_SAT_CODE
3495 CPU (h_gr
[f_r1
]) = ((OPRND (condbit
)) ? (((LTSI (OPRND (sr
), 0)) ? (2147483647) : (0x80000000))) : (OPRND (sr
)));
3496 TRACE_RESULT (current_cpu
, "dr", 'x', CPU (h_gr
[f_r1
]));
3498 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3500 #if WITH_PROFILE_MODEL_P
3501 if (PROFILE_MODEL_P (current_cpu
))
3503 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3504 m32rx_model_mark_set_h_gr (current_cpu
, abuf
);
3505 m32rx_model_profile_insn (current_cpu
, abuf
);
3513 /* pcmpbz: pcmpbz $src2. */
3516 SEM_FN_NAME (m32rx
,pcmpbz
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3518 insn_t insn
= SEM_INSN (sem_arg
);
3519 #define OPRND(f) par_exec->operands.fmt_cmpz.f
3520 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3521 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3522 EXTRACT_FMT_CMPZ_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3523 EXTRACT_FMT_CMPZ_CODE
3525 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);
3526 TRACE_RESULT (current_cpu
, "condbit", 'x', CPU (h_cond
));
3528 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3530 #if WITH_PROFILE_MODEL_P
3531 if (PROFILE_MODEL_P (current_cpu
))
3533 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3534 m32rx_model_profile_insn (current_cpu
, abuf
);
3545 SEM_FN_NAME (m32rx
,sadd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3547 insn_t insn
= SEM_INSN (sem_arg
);
3548 #define OPRND(f) par_exec->operands.fmt_sadd.f
3549 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3550 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3551 EXTRACT_FMT_SADD_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3552 EXTRACT_FMT_SADD_CODE
3554 m32rx_h_accums_set (current_cpu
, 0, ADDDI (SRADI (OPRND (h_accums_1
), 16), OPRND (h_accums_0
)));
3555 TRACE_RESULT (current_cpu
, "accums-0", 'D', m32rx_h_accums_get (current_cpu
, 0));
3557 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3559 #if WITH_PROFILE_MODEL_P
3560 if (PROFILE_MODEL_P (current_cpu
))
3562 m32rx_model_profile_insn (current_cpu
, abuf
);
3570 /* macwu1: macwu1 $src1,$src2. */
3573 SEM_FN_NAME (m32rx
,macwu1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3575 insn_t insn
= SEM_INSN (sem_arg
);
3576 #define OPRND(f) par_exec->operands.fmt_macwu1.f
3577 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3578 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3579 EXTRACT_FMT_MACWU1_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3580 EXTRACT_FMT_MACWU1_CODE
3582 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));
3583 TRACE_RESULT (current_cpu
, "accums-1", 'D', m32rx_h_accums_get (current_cpu
, 1));
3585 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3587 #if WITH_PROFILE_MODEL_P
3588 if (PROFILE_MODEL_P (current_cpu
))
3590 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3591 m32rx_model_profile_insn (current_cpu
, abuf
);
3599 /* msblo: msblo $src1,$src2. */
3602 SEM_FN_NAME (m32rx
,msblo
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3604 insn_t insn
= SEM_INSN (sem_arg
);
3605 #define OPRND(f) par_exec->operands.fmt_macwhi.f
3606 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3607 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3608 EXTRACT_FMT_MACWHI_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3609 EXTRACT_FMT_MACWHI_CODE
3611 m32rx_h_accum_set (current_cpu
, SRADI (SLLDI (SUBDI (OPRND (accum
), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (OPRND (src1
))), EXTHIDI (TRUNCSIHI (OPRND (src2
)))), 32), 16)), 8), 8));
3612 TRACE_RESULT (current_cpu
, "accum", 'D', m32rx_h_accum_get (current_cpu
));
3614 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3616 #if WITH_PROFILE_MODEL_P
3617 if (PROFILE_MODEL_P (current_cpu
))
3619 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3620 m32rx_model_profile_insn (current_cpu
, abuf
);
3628 /* mulwu1: mulwu1 $src1,$src2. */
3631 SEM_FN_NAME (m32rx
,mulwu1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3633 insn_t insn
= SEM_INSN (sem_arg
);
3634 #define OPRND(f) par_exec->operands.fmt_mulwu1.f
3635 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3636 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3637 EXTRACT_FMT_MULWU1_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3638 EXTRACT_FMT_MULWU1_CODE
3640 m32rx_h_accums_set (current_cpu
, 1, SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1
)), EXTSIDI (ANDSI (OPRND (src2
), 65535))), 16), 16));
3641 TRACE_RESULT (current_cpu
, "accums-1", 'D', m32rx_h_accums_get (current_cpu
, 1));
3643 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3645 #if WITH_PROFILE_MODEL_P
3646 if (PROFILE_MODEL_P (current_cpu
))
3648 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3649 m32rx_model_profile_insn (current_cpu
, abuf
);
3657 /* maclh1: maclh1 $src1,$src2. */
3660 SEM_FN_NAME (m32rx
,maclh1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3662 insn_t insn
= SEM_INSN (sem_arg
);
3663 #define OPRND(f) par_exec->operands.fmt_macwu1.f
3664 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3665 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3666 EXTRACT_FMT_MACWU1_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3667 EXTRACT_FMT_MACWU1_CODE
3669 m32rx_h_accums_set (current_cpu
, 1, SRADI (SLLDI (ADDDI (OPRND (h_accums_1
), SLLDI (EXTSIDI (MULSI (EXTHISI (TRUNCSIHI (OPRND (src1
))), SRASI (OPRND (src2
), 16))), 16)), 8), 8));
3670 TRACE_RESULT (current_cpu
, "accums-1", 'D', m32rx_h_accums_get (current_cpu
, 1));
3672 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3674 #if WITH_PROFILE_MODEL_P
3675 if (PROFILE_MODEL_P (current_cpu
))
3677 m32rx_model_mark_get_h_gr (current_cpu
, abuf
);
3678 m32rx_model_profile_insn (current_cpu
, abuf
);
3689 SEM_FN_NAME (m32rx
,sc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3691 insn_t insn
= SEM_INSN (sem_arg
);
3692 #define OPRND(f) par_exec->operands.fmt_sc.f
3693 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3694 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3695 EXTRACT_FMT_SC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3698 if (OPRND (condbit
)) {
3699 BRANCH_NEW_PC (new_pc
, NEW_PC_SKIP
);
3702 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3704 #if WITH_PROFILE_MODEL_P
3705 if (PROFILE_MODEL_P (current_cpu
))
3707 m32rx_model_profile_insn (current_cpu
, abuf
);
3718 SEM_FN_NAME (m32rx
,snc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3720 insn_t insn
= SEM_INSN (sem_arg
);
3721 #define OPRND(f) par_exec->operands.fmt_sc.f
3722 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3723 CIA new_pc
= SEM_NEXT_PC (sem_arg
, 2);
3724 EXTRACT_FMT_SC_VARS
/* f-op1 f-r1 f-op2 f-r2 */
3727 if (NOTBI (OPRND (condbit
))) {
3728 BRANCH_NEW_PC (new_pc
, NEW_PC_SKIP
);
3731 PROFILE_COUNT_INSN (current_cpu
, 0, abuf
->idesc
->num
);
3733 #if WITH_PROFILE_MODEL_P
3734 if (PROFILE_MODEL_P (current_cpu
))
3736 m32rx_model_profile_insn (current_cpu
, abuf
);
3745 SEM_FN_NAME (m32rx
,illegal
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
, PAREXEC
*par_exec
)
3747 sim_engine_illegal_insn (current_cpu
, NULL_CIA
/*FIXME*/);
3751 #endif /* WANT_CPU */