1 /* CPU family header for m32r.
3 Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
5 This file is part of the GNU Simulators.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 /* Maximum number of instructions that are fetched at a time.
27 This is for LIW type instructions sets (e.g. m32r). */
28 #define MAX_LIW_INSNS 2
30 /* Maximum number of instructions that can be executed in parallel. */
31 #define MAX_PARALLEL_INSNS 1
33 /* CPU state information. */
35 /* Hardware elements. */
39 #define GET_H_PC() CPU (h_pc)
40 #define SET_H_PC(x) (CPU (h_pc) = (x))
41 /* general registers */
43 #define GET_H_GR(a1) CPU (h_gr)[a1]
44 #define SET_H_GR(a1, x) (CPU (h_gr)[a1] = (x))
45 /* control registers */
47 #define GET_H_CR(a1) CPU (h_cr)[a1]
48 #define SET_H_CR(a1, x) (CPU (h_cr)[a1] = (x))
51 #define GET_H_ACCUM() CPU (h_accum)
52 #define SET_H_ACCUM(x) (CPU (h_accum) = (x))
55 #define GET_H_COND() CPU (h_cond)
56 #define SET_H_COND(x) (CPU (h_cond) = (x))
59 #define GET_H_SM() CPU (h_sm)
60 #define SET_H_SM(x) (CPU (h_sm) = (x))
63 #define GET_H_BSM() CPU (h_bsm)
64 #define SET_H_BSM(x) (CPU (h_bsm) = (x))
67 #define GET_H_IE() CPU (h_ie)
68 #define SET_H_IE(x) (CPU (h_ie) = (x))
71 #define GET_H_BIE() CPU (h_bie)
72 #define SET_H_BIE(x) (CPU (h_bie) = (x))
75 #define GET_H_BCOND() CPU (h_bcond)
76 #define SET_H_BCOND(x) (CPU (h_bcond) = (x))
79 #define GET_H_BPC() CPU (h_bpc)
80 #define SET_H_BPC(x) (CPU (h_bpc) = (x))
82 #define CPU_CGEN_HW(cpu) (& (cpu)->cpu_data.hardware)
83 /* CPU profiling state information. */
85 /* general registers */
88 #define CPU_CGEN_PROFILE(cpu) (& (cpu)->cpu_data.profile)
91 /* FIXME: length parm to decode() is currently unneeded. */
92 extern DECODE
*m32r_decode (SIM_CPU
*, insn_t
/*, int*/);
94 /* The ARGBUF struct. */
96 /* These are the baseclass definitions. */
99 const struct cgen_insn
*opcode
;
100 /* unsigned long insn; - no longer needed */
101 /* cpu specific data follows */
103 struct { /* e.g. add $dr,$sr */
107 struct { /* e.g. add3 $dr,$sr,$slo16 */
112 struct { /* e.g. and3 $dr,$sr,$uimm16 */
117 struct { /* e.g. or3 $dr,$sr,$ulo16 */
122 struct { /* e.g. addi $dr,$simm8 */
126 struct { /* e.g. addv3 $dr,$sr,$simm16 */
131 struct { /* e.g. addx $dr,$sr */
135 struct { /* e.g. bc $disp8 */
138 struct { /* e.g. bc $disp24 */
141 struct { /* e.g. beq $src1,$src2,$disp16 */
146 struct { /* e.g. beqz $src2,$disp16 */
150 struct { /* e.g. bl $disp8 */
153 struct { /* e.g. bl $disp24 */
156 struct { /* e.g. bra $disp8 */
159 struct { /* e.g. bra $disp24 */
162 struct { /* e.g. cmp $src1,$src2 */
166 struct { /* e.g. cmpi $src2,$simm16 */
170 struct { /* e.g. cmpui $src2,$uimm16 */
174 struct { /* e.g. div $dr,$sr */
178 struct { /* e.g. jl $sr */
181 struct { /* e.g. jmp $sr */
184 struct { /* e.g. ld $dr,@$sr */
188 struct { /* e.g. ld $dr,@($slo16,$sr) */
193 struct { /* e.g. ldb $dr,@$sr */
197 struct { /* e.g. ldb $dr,@($slo16,$sr) */
202 struct { /* e.g. ldh $dr,@$sr */
206 struct { /* e.g. ldh $dr,@($slo16,$sr) */
211 struct { /* e.g. ld24 $dr,$uimm24 */
215 struct { /* e.g. ldi $dr,$simm8 */
219 struct { /* e.g. ldi $dr,$slo16 */
223 struct { /* e.g. machi $src1,$src2 */
227 struct { /* e.g. mv $dr,$sr */
231 struct { /* e.g. mvfachi $dr */
234 struct { /* e.g. mvfc $dr,$scr */
238 struct { /* e.g. mvtachi $src1 */
241 struct { /* e.g. mvtc $sr,$dcr */
245 struct { /* e.g. nop */
248 struct { /* e.g. rac */
251 struct { /* e.g. seth $dr,$hi16 */
255 struct { /* e.g. slli $dr,$uimm5 */
259 struct { /* e.g. st $src1,@($slo16,$src2) */
264 struct { /* e.g. trap $uimm4 */
268 #if 1 || WITH_PROFILE_MODEL_P /*FIXME:wip*/
269 unsigned long h_gr_get
;
270 unsigned long h_gr_set
;
275 This is also used in the non-scache case. In this situation we assume
276 the cache size is 1, and do a few things a little differently. */
281 #if ! WITH_SEM_SWITCH_FULL
284 #if ! WITH_SEM_SWITCH_FAST
286 SEMANTIC_CACHE_FN
*sem_fast_fn
;
288 SEMANTIC_FN
*sem_fast_fn
;
291 #if WITH_SEM_SWITCH_FULL || WITH_SEM_SWITCH_FAST
299 struct argbuf argbuf
;
302 /* Macros to simplify extraction, reading and semantic code.
303 These define and assign the local vars that contain the insn's fields. */
305 #define EXTRACT_FMT_0_ADD_VARS \
306 /* Instruction fields. */ \
312 #define EXTRACT_FMT_0_ADD_CODE \
314 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
315 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
316 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
317 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
319 #define EXTRACT_FMT_1_ADD3_VARS \
320 /* Instruction fields. */ \
327 #define EXTRACT_FMT_1_ADD3_CODE \
329 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
330 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
331 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
332 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
333 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
335 #define EXTRACT_FMT_2_AND3_VARS \
336 /* Instruction fields. */ \
343 #define EXTRACT_FMT_2_AND3_CODE \
345 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
346 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
347 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
348 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
349 f_uimm16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
351 #define EXTRACT_FMT_3_OR3_VARS \
352 /* Instruction fields. */ \
359 #define EXTRACT_FMT_3_OR3_CODE \
361 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
362 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
363 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
364 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
365 f_uimm16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
367 #define EXTRACT_FMT_4_ADDI_VARS \
368 /* Instruction fields. */ \
373 #define EXTRACT_FMT_4_ADDI_CODE \
375 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
376 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
377 f_simm8 = EXTRACT_SIGNED (insn, 16, 8, 8); \
379 #define EXTRACT_FMT_5_ADDV3_VARS \
380 /* Instruction fields. */ \
387 #define EXTRACT_FMT_5_ADDV3_CODE \
389 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
390 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
391 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
392 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
393 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
395 #define EXTRACT_FMT_6_ADDX_VARS \
396 /* Instruction fields. */ \
402 #define EXTRACT_FMT_6_ADDX_CODE \
404 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
405 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
406 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
407 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
409 #define EXTRACT_FMT_7_BC8_VARS \
410 /* Instruction fields. */ \
415 #define EXTRACT_FMT_7_BC8_CODE \
417 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
418 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
419 f_disp8 = EXTRACT_SIGNED (insn, 16, 8, 8) << 2; \
421 #define EXTRACT_FMT_8_BC24_VARS \
422 /* Instruction fields. */ \
427 #define EXTRACT_FMT_8_BC24_CODE \
429 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
430 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
431 f_disp24 = EXTRACT_SIGNED (insn, 32, 8, 24) << 2; \
433 #define EXTRACT_FMT_9_BEQ_VARS \
434 /* Instruction fields. */ \
441 #define EXTRACT_FMT_9_BEQ_CODE \
443 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
444 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
445 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
446 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
447 f_disp16 = EXTRACT_SIGNED (insn, 32, 16, 16) << 2; \
449 #define EXTRACT_FMT_10_BEQZ_VARS \
450 /* Instruction fields. */ \
457 #define EXTRACT_FMT_10_BEQZ_CODE \
459 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
460 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
461 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
462 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
463 f_disp16 = EXTRACT_SIGNED (insn, 32, 16, 16) << 2; \
465 #define EXTRACT_FMT_11_BL8_VARS \
466 /* Instruction fields. */ \
471 #define EXTRACT_FMT_11_BL8_CODE \
473 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
474 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
475 f_disp8 = EXTRACT_SIGNED (insn, 16, 8, 8) << 2; \
477 #define EXTRACT_FMT_12_BL24_VARS \
478 /* Instruction fields. */ \
483 #define EXTRACT_FMT_12_BL24_CODE \
485 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
486 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
487 f_disp24 = EXTRACT_SIGNED (insn, 32, 8, 24) << 2; \
489 #define EXTRACT_FMT_13_BRA8_VARS \
490 /* Instruction fields. */ \
495 #define EXTRACT_FMT_13_BRA8_CODE \
497 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
498 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
499 f_disp8 = EXTRACT_SIGNED (insn, 16, 8, 8) << 2; \
501 #define EXTRACT_FMT_14_BRA24_VARS \
502 /* Instruction fields. */ \
507 #define EXTRACT_FMT_14_BRA24_CODE \
509 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
510 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
511 f_disp24 = EXTRACT_SIGNED (insn, 32, 8, 24) << 2; \
513 #define EXTRACT_FMT_15_CMP_VARS \
514 /* Instruction fields. */ \
520 #define EXTRACT_FMT_15_CMP_CODE \
522 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
523 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
524 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
525 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
527 #define EXTRACT_FMT_16_CMPI_VARS \
528 /* Instruction fields. */ \
535 #define EXTRACT_FMT_16_CMPI_CODE \
537 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
538 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
539 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
540 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
541 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
543 #define EXTRACT_FMT_17_CMPUI_VARS \
544 /* Instruction fields. */ \
551 #define EXTRACT_FMT_17_CMPUI_CODE \
553 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
554 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
555 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
556 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
557 f_uimm16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
559 #define EXTRACT_FMT_18_DIV_VARS \
560 /* Instruction fields. */ \
567 #define EXTRACT_FMT_18_DIV_CODE \
569 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
570 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
571 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
572 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
573 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
575 #define EXTRACT_FMT_19_JL_VARS \
576 /* Instruction fields. */ \
582 #define EXTRACT_FMT_19_JL_CODE \
584 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
585 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
586 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
587 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
589 #define EXTRACT_FMT_20_JMP_VARS \
590 /* Instruction fields. */ \
596 #define EXTRACT_FMT_20_JMP_CODE \
598 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
599 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
600 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
601 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
603 #define EXTRACT_FMT_21_LD_VARS \
604 /* Instruction fields. */ \
610 #define EXTRACT_FMT_21_LD_CODE \
612 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
613 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
614 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
615 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
617 #define EXTRACT_FMT_22_LD_D_VARS \
618 /* Instruction fields. */ \
625 #define EXTRACT_FMT_22_LD_D_CODE \
627 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
628 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
629 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
630 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
631 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
633 #define EXTRACT_FMT_23_LDB_VARS \
634 /* Instruction fields. */ \
640 #define EXTRACT_FMT_23_LDB_CODE \
642 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
643 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
644 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
645 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
647 #define EXTRACT_FMT_24_LDB_D_VARS \
648 /* Instruction fields. */ \
655 #define EXTRACT_FMT_24_LDB_D_CODE \
657 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
658 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
659 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
660 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
661 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
663 #define EXTRACT_FMT_25_LDH_VARS \
664 /* Instruction fields. */ \
670 #define EXTRACT_FMT_25_LDH_CODE \
672 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
673 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
674 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
675 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
677 #define EXTRACT_FMT_26_LDH_D_VARS \
678 /* Instruction fields. */ \
685 #define EXTRACT_FMT_26_LDH_D_CODE \
687 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
688 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
689 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
690 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
691 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
693 #define EXTRACT_FMT_27_LD24_VARS \
694 /* Instruction fields. */ \
699 #define EXTRACT_FMT_27_LD24_CODE \
701 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
702 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
703 f_uimm24 = EXTRACT_UNSIGNED (insn, 32, 8, 24); \
705 #define EXTRACT_FMT_28_LDI8_VARS \
706 /* Instruction fields. */ \
711 #define EXTRACT_FMT_28_LDI8_CODE \
713 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
714 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
715 f_simm8 = EXTRACT_SIGNED (insn, 16, 8, 8); \
717 #define EXTRACT_FMT_29_LDI16_VARS \
718 /* Instruction fields. */ \
725 #define EXTRACT_FMT_29_LDI16_CODE \
727 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
728 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
729 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
730 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
731 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
733 #define EXTRACT_FMT_30_MACHI_VARS \
734 /* Instruction fields. */ \
740 #define EXTRACT_FMT_30_MACHI_CODE \
742 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
743 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
744 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
745 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
747 #define EXTRACT_FMT_31_MV_VARS \
748 /* Instruction fields. */ \
754 #define EXTRACT_FMT_31_MV_CODE \
756 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
757 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
758 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
759 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
761 #define EXTRACT_FMT_32_MVFACHI_VARS \
762 /* Instruction fields. */ \
768 #define EXTRACT_FMT_32_MVFACHI_CODE \
770 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
771 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
772 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
773 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
775 #define EXTRACT_FMT_33_MVFC_VARS \
776 /* Instruction fields. */ \
782 #define EXTRACT_FMT_33_MVFC_CODE \
784 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
785 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
786 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
787 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
789 #define EXTRACT_FMT_34_MVTACHI_VARS \
790 /* Instruction fields. */ \
796 #define EXTRACT_FMT_34_MVTACHI_CODE \
798 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
799 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
800 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
801 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
803 #define EXTRACT_FMT_35_MVTC_VARS \
804 /* Instruction fields. */ \
810 #define EXTRACT_FMT_35_MVTC_CODE \
812 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
813 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
814 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
815 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
817 #define EXTRACT_FMT_36_NOP_VARS \
818 /* Instruction fields. */ \
824 #define EXTRACT_FMT_36_NOP_CODE \
826 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
827 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
828 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
829 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
831 #define EXTRACT_FMT_37_RAC_VARS \
832 /* Instruction fields. */ \
838 #define EXTRACT_FMT_37_RAC_CODE \
840 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
841 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
842 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
843 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
845 #define EXTRACT_FMT_38_SETH_VARS \
846 /* Instruction fields. */ \
853 #define EXTRACT_FMT_38_SETH_CODE \
855 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
856 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
857 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
858 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
859 f_hi16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
861 #define EXTRACT_FMT_39_SLLI_VARS \
862 /* Instruction fields. */ \
868 #define EXTRACT_FMT_39_SLLI_CODE \
870 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
871 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
872 f_shift_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 3); \
873 f_uimm5 = EXTRACT_UNSIGNED (insn, 16, 11, 5); \
875 #define EXTRACT_FMT_40_ST_D_VARS \
876 /* Instruction fields. */ \
883 #define EXTRACT_FMT_40_ST_D_CODE \
885 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
886 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
887 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
888 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
889 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
891 #define EXTRACT_FMT_41_TRAP_VARS \
892 /* Instruction fields. */ \
898 #define EXTRACT_FMT_41_TRAP_CODE \
900 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
901 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
902 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
903 f_uimm4 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
905 #endif /* CPU_M32R_H */
This page took 0.062957 seconds and 4 git commands to generate.