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 */