1 /* CPU family header for fr30bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998, 1999 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.
28 /* Maximum number of instructions that are fetched at a time.
29 This is for LIW type instructions sets (e.g. m32r). */
30 #define MAX_LIW_INSNS 1
32 /* Maximum number of instructions that can be executed in parallel. */
33 #define MAX_PARALLEL_INSNS 1
35 /* CPU state information. */
37 /* Hardware elements. */
41 #define GET_H_PC() CPU (h_pc)
42 #define SET_H_PC(x) (CPU (h_pc) = (x))
43 /* general registers */
45 #define GET_H_GR(a1) CPU (h_gr)[a1]
46 #define SET_H_GR(a1, x) (CPU (h_gr)[a1] = (x))
47 /* coprocessor registers */
49 #define GET_H_CR(a1) CPU (h_cr)[a1]
50 #define SET_H_CR(a1, x) (CPU (h_cr)[a1] = (x))
51 /* dedicated registers */
53 /* GET_H_DR macro user-written */
54 /* SET_H_DR macro user-written */
57 /* GET_H_PS macro user-written */
58 /* SET_H_PS macro user-written */
59 /* General Register 13 explicitely required */
61 #define GET_H_R13() CPU (h_r13)
62 #define SET_H_R13(x) (CPU (h_r13) = (x))
63 /* General Register 14 explicitely required */
65 #define GET_H_R14() CPU (h_r14)
66 #define SET_H_R14(x) (CPU (h_r14) = (x))
67 /* General Register 15 explicitely required */
69 #define GET_H_R15() CPU (h_r15)
70 #define SET_H_R15(x) (CPU (h_r15) = (x))
73 #define GET_H_NBIT() CPU (h_nbit)
74 #define SET_H_NBIT(x) (CPU (h_nbit) = (x))
77 #define GET_H_ZBIT() CPU (h_zbit)
78 #define SET_H_ZBIT(x) (CPU (h_zbit) = (x))
81 #define GET_H_VBIT() CPU (h_vbit)
82 #define SET_H_VBIT(x) (CPU (h_vbit) = (x))
85 #define GET_H_CBIT() CPU (h_cbit)
86 #define SET_H_CBIT(x) (CPU (h_cbit) = (x))
87 /* interrupt enable bit */
89 #define GET_H_IBIT() CPU (h_ibit)
90 #define SET_H_IBIT(x) (CPU (h_ibit) = (x))
93 /* GET_H_SBIT macro user-written */
94 /* SET_H_SBIT macro user-written */
97 #define GET_H_TBIT() CPU (h_tbit)
98 #define SET_H_TBIT(x) (CPU (h_tbit) = (x))
101 #define GET_H_D0BIT() CPU (h_d0bit)
102 #define SET_H_D0BIT(x) (CPU (h_d0bit) = (x))
105 #define GET_H_D1BIT() CPU (h_d1bit)
106 #define SET_H_D1BIT(x) (CPU (h_d1bit) = (x))
107 /* condition code bits */
109 /* GET_H_CCR macro user-written */
110 /* SET_H_CCR macro user-written */
111 /* system condition bits */
113 /* GET_H_SCR macro user-written */
114 /* SET_H_SCR macro user-written */
115 /* interrupt level mask */
117 /* GET_H_ILM macro user-written */
118 /* SET_H_ILM macro user-written */
120 #define CPU_CGEN_HW(cpu) (& (cpu)->cpu_data.hardware)
123 /* Cover fns for register access. */
124 USI
fr30bf_h_pc_get (SIM_CPU
*);
125 void fr30bf_h_pc_set (SIM_CPU
*, USI
);
126 SI
fr30bf_h_gr_get (SIM_CPU
*, UINT
);
127 void fr30bf_h_gr_set (SIM_CPU
*, UINT
, SI
);
128 SI
fr30bf_h_cr_get (SIM_CPU
*, UINT
);
129 void fr30bf_h_cr_set (SIM_CPU
*, UINT
, SI
);
130 SI
fr30bf_h_dr_get (SIM_CPU
*, UINT
);
131 void fr30bf_h_dr_set (SIM_CPU
*, UINT
, SI
);
132 USI
fr30bf_h_ps_get (SIM_CPU
*);
133 void fr30bf_h_ps_set (SIM_CPU
*, USI
);
134 SI
fr30bf_h_r13_get (SIM_CPU
*);
135 void fr30bf_h_r13_set (SIM_CPU
*, SI
);
136 SI
fr30bf_h_r14_get (SIM_CPU
*);
137 void fr30bf_h_r14_set (SIM_CPU
*, SI
);
138 SI
fr30bf_h_r15_get (SIM_CPU
*);
139 void fr30bf_h_r15_set (SIM_CPU
*, SI
);
140 BI
fr30bf_h_nbit_get (SIM_CPU
*);
141 void fr30bf_h_nbit_set (SIM_CPU
*, BI
);
142 BI
fr30bf_h_zbit_get (SIM_CPU
*);
143 void fr30bf_h_zbit_set (SIM_CPU
*, BI
);
144 BI
fr30bf_h_vbit_get (SIM_CPU
*);
145 void fr30bf_h_vbit_set (SIM_CPU
*, BI
);
146 BI
fr30bf_h_cbit_get (SIM_CPU
*);
147 void fr30bf_h_cbit_set (SIM_CPU
*, BI
);
148 BI
fr30bf_h_ibit_get (SIM_CPU
*);
149 void fr30bf_h_ibit_set (SIM_CPU
*, BI
);
150 BI
fr30bf_h_sbit_get (SIM_CPU
*);
151 void fr30bf_h_sbit_set (SIM_CPU
*, BI
);
152 BI
fr30bf_h_tbit_get (SIM_CPU
*);
153 void fr30bf_h_tbit_set (SIM_CPU
*, BI
);
154 BI
fr30bf_h_d0bit_get (SIM_CPU
*);
155 void fr30bf_h_d0bit_set (SIM_CPU
*, BI
);
156 BI
fr30bf_h_d1bit_get (SIM_CPU
*);
157 void fr30bf_h_d1bit_set (SIM_CPU
*, BI
);
158 UQI
fr30bf_h_ccr_get (SIM_CPU
*);
159 void fr30bf_h_ccr_set (SIM_CPU
*, UQI
);
160 UQI
fr30bf_h_scr_get (SIM_CPU
*);
161 void fr30bf_h_scr_set (SIM_CPU
*, UQI
);
162 UQI
fr30bf_h_ilm_get (SIM_CPU
*);
163 void fr30bf_h_ilm_set (SIM_CPU
*, UQI
);
165 /* These must be hand-written. */
166 extern CPUREG_FETCH_FN fr30bf_fetch_register
;
167 extern CPUREG_STORE_FN fr30bf_store_register
;
171 UINT load_regs_pending
;
175 struct { /* empty sformat for unspecified field list */
178 struct { /* e.g. add $Rj,$Ri */
183 unsigned char out_Ri
;
185 struct { /* e.g. add $u4,$Ri */
189 unsigned char out_Ri
;
191 struct { /* e.g. add2 $m4,$Ri */
195 unsigned char out_Ri
;
197 struct { /* e.g. addc $Rj,$Ri */
202 unsigned char out_Ri
;
204 struct { /* e.g. addn $Rj,$Ri */
209 unsigned char out_Ri
;
211 struct { /* e.g. addn $u4,$Ri */
215 unsigned char out_Ri
;
217 struct { /* e.g. addn2 $m4,$Ri */
221 unsigned char out_Ri
;
223 struct { /* e.g. cmp $Rj,$Ri */
229 struct { /* e.g. cmp $u4,$Ri */
234 struct { /* e.g. cmp2 $m4,$Ri */
239 struct { /* e.g. and $Rj,$Ri */
244 unsigned char out_Ri
;
246 struct { /* e.g. and $Rj,@$Ri */
252 struct { /* e.g. andh $Rj,@$Ri */
258 struct { /* e.g. andb $Rj,@$Ri */
264 struct { /* e.g. bandl $u4,@$Ri */
269 struct { /* e.g. btstl $u4,@$Ri */
274 struct { /* e.g. mul $Rj,$Ri */
280 struct { /* e.g. mulu $Rj,$Ri */
286 struct { /* e.g. mulh $Rj,$Ri */
292 struct { /* e.g. div0s $Ri */
296 struct { /* e.g. div0u $Ri */
299 struct { /* e.g. div1 $Ri */
303 struct { /* e.g. div2 $Ri */
307 struct { /* e.g. div3 */
310 struct { /* e.g. div4s */
313 struct { /* e.g. lsl $Rj,$Ri */
318 unsigned char out_Ri
;
320 struct { /* e.g. lsl $u4,$Ri */
324 unsigned char out_Ri
;
326 struct { /* e.g. ldi:8 $i8,$Ri */
329 unsigned char out_Ri
;
331 struct { /* e.g. ldi:20 $i20,$Ri */
334 unsigned char out_Ri
;
336 struct { /* e.g. ldi:32 $i32,$Ri */
339 unsigned char out_Ri
;
341 struct { /* e.g. ld @$Rj,$Ri */
345 unsigned char out_Ri
;
347 struct { /* e.g. lduh @$Rj,$Ri */
351 unsigned char out_Ri
;
353 struct { /* e.g. ldub @$Rj,$Ri */
357 unsigned char out_Ri
;
359 struct { /* e.g. ld @($R13,$Rj),$Ri */
363 unsigned char in_h_gr_13
;
364 unsigned char out_Ri
;
366 struct { /* e.g. lduh @($R13,$Rj),$Ri */
370 unsigned char in_h_gr_13
;
371 unsigned char out_Ri
;
373 struct { /* e.g. ldub @($R13,$Rj),$Ri */
377 unsigned char in_h_gr_13
;
378 unsigned char out_Ri
;
380 struct { /* e.g. ld @($R14,$disp10),$Ri */
383 unsigned char in_h_gr_14
;
384 unsigned char out_Ri
;
386 struct { /* e.g. lduh @($R14,$disp9),$Ri */
389 unsigned char in_h_gr_14
;
390 unsigned char out_Ri
;
392 struct { /* e.g. ldub @($R14,$disp8),$Ri */
395 unsigned char in_h_gr_14
;
396 unsigned char out_Ri
;
398 struct { /* e.g. ld @($R15,$udisp6),$Ri */
401 unsigned char in_h_gr_15
;
402 unsigned char out_Ri
;
404 struct { /* e.g. ld @$R15+,$Ri */
407 unsigned char in_h_gr_15
;
408 unsigned char out_Ri
;
409 unsigned char out_h_gr_15
;
411 struct { /* e.g. ld @$R15+,$Rs2 */
413 unsigned char in_h_gr_15
;
414 unsigned char out_h_gr_15
;
416 struct { /* e.g. ld @$R15+,$ps */
418 unsigned char in_h_gr_15
;
419 unsigned char out_h_gr_15
;
421 struct { /* e.g. st $Ri,@$Rj */
427 struct { /* e.g. sth $Ri,@$Rj */
433 struct { /* e.g. stb $Ri,@$Rj */
439 struct { /* e.g. st $Ri,@($R13,$Rj) */
444 unsigned char in_h_gr_13
;
446 struct { /* e.g. sth $Ri,@($R13,$Rj) */
451 unsigned char in_h_gr_13
;
453 struct { /* e.g. stb $Ri,@($R13,$Rj) */
458 unsigned char in_h_gr_13
;
460 struct { /* e.g. st $Ri,@($R14,$disp10) */
464 unsigned char in_h_gr_14
;
466 struct { /* e.g. sth $Ri,@($R14,$disp9) */
470 unsigned char in_h_gr_14
;
472 struct { /* e.g. stb $Ri,@($R14,$disp8) */
476 unsigned char in_h_gr_14
;
478 struct { /* e.g. st $Ri,@($R15,$udisp6) */
482 unsigned char in_h_gr_15
;
484 struct { /* e.g. st $Ri,@-$R15 */
487 unsigned char in_h_gr_15
;
488 unsigned char out_h_gr_15
;
490 struct { /* e.g. st $Rs2,@-$R15 */
492 unsigned char in_h_gr_15
;
493 unsigned char out_h_gr_15
;
495 struct { /* e.g. st $ps,@-$R15 */
497 unsigned char in_h_gr_15
;
498 unsigned char out_h_gr_15
;
500 struct { /* e.g. mov $Rj,$Ri */
504 unsigned char out_Ri
;
506 struct { /* e.g. mov $Rs1,$Ri */
509 unsigned char out_Ri
;
511 struct { /* e.g. mov $ps,$Ri */
513 unsigned char out_Ri
;
515 struct { /* e.g. mov $Ri,$Rs1 */
520 struct { /* e.g. mov $Ri,$ps */
524 struct { /* e.g. bno:d $label9 */
527 struct { /* e.g. dmov $R13,@$dir10 */
529 unsigned char in_h_gr_13
;
531 struct { /* e.g. dmovh $R13,@$dir9 */
533 unsigned char in_h_gr_13
;
535 struct { /* e.g. dmovb $R13,@$dir8 */
537 unsigned char in_h_gr_13
;
539 struct { /* e.g. dmov @$R13+,@$dir10 */
541 unsigned char in_h_gr_13
;
542 unsigned char out_h_gr_13
;
544 struct { /* e.g. dmovh @$R13+,@$dir9 */
546 unsigned char in_h_gr_13
;
547 unsigned char out_h_gr_13
;
549 struct { /* e.g. dmovb @$R13+,@$dir8 */
551 unsigned char in_h_gr_13
;
552 unsigned char out_h_gr_13
;
554 struct { /* e.g. dmov @$R15+,@$dir10 */
556 unsigned char in_h_gr_15
;
557 unsigned char out_h_gr_15
;
559 struct { /* e.g. dmov @$dir10,$R13 */
561 unsigned char out_h_gr_13
;
563 struct { /* e.g. dmovh @$dir9,$R13 */
565 unsigned char out_h_gr_13
;
567 struct { /* e.g. dmovb @$dir8,$R13 */
569 unsigned char out_h_gr_13
;
571 struct { /* e.g. dmov @$dir10,@$R13+ */
573 unsigned char in_h_gr_13
;
574 unsigned char out_h_gr_13
;
576 struct { /* e.g. dmovh @$dir9,@$R13+ */
578 unsigned char in_h_gr_13
;
579 unsigned char out_h_gr_13
;
581 struct { /* e.g. dmovb @$dir8,@$R13+ */
583 unsigned char in_h_gr_13
;
584 unsigned char out_h_gr_13
;
586 struct { /* e.g. dmov @$dir10,@-$R15 */
588 unsigned char in_h_gr_15
;
589 unsigned char out_h_gr_15
;
591 struct { /* e.g. ldres @$Ri+,$u4 */
594 unsigned char out_Ri
;
596 struct { /* e.g. copop $u4c,$ccc,$CRj,$CRi */
599 struct { /* e.g. copld $u4c,$ccc,$Rjc,$CRi */
602 struct { /* e.g. copst $u4c,$ccc,$CRj,$Ric */
605 struct { /* e.g. nop */
608 struct { /* e.g. andccr $u8 */
611 struct { /* e.g. stilm $u8 */
614 struct { /* e.g. addsp $s10 */
616 unsigned char in_h_gr_15
;
617 unsigned char out_h_gr_15
;
619 struct { /* e.g. extsb $Ri */
622 unsigned char out_Ri
;
624 struct { /* e.g. extub $Ri */
627 unsigned char out_Ri
;
629 struct { /* e.g. extsh $Ri */
632 unsigned char out_Ri
;
634 struct { /* e.g. extuh $Ri */
637 unsigned char out_Ri
;
639 struct { /* e.g. ldm0 ($reglist_low_ld) */
640 UINT f_reglist_low_ld
;
641 unsigned char in_h_gr_15
;
642 unsigned char out_h_gr_0
;
643 unsigned char out_h_gr_1
;
644 unsigned char out_h_gr_15
;
645 unsigned char out_h_gr_2
;
646 unsigned char out_h_gr_3
;
647 unsigned char out_h_gr_4
;
648 unsigned char out_h_gr_5
;
649 unsigned char out_h_gr_6
;
650 unsigned char out_h_gr_7
;
652 struct { /* e.g. ldm1 ($reglist_hi_ld) */
653 UINT f_reglist_hi_ld
;
654 unsigned char in_h_gr_15
;
655 unsigned char out_h_gr_10
;
656 unsigned char out_h_gr_11
;
657 unsigned char out_h_gr_12
;
658 unsigned char out_h_gr_13
;
659 unsigned char out_h_gr_14
;
660 unsigned char out_h_gr_15
;
661 unsigned char out_h_gr_8
;
662 unsigned char out_h_gr_9
;
664 struct { /* e.g. stm0 ($reglist_low_st) */
665 UINT f_reglist_low_st
;
666 unsigned char in_h_gr_0
;
667 unsigned char in_h_gr_1
;
668 unsigned char in_h_gr_15
;
669 unsigned char in_h_gr_2
;
670 unsigned char in_h_gr_3
;
671 unsigned char in_h_gr_4
;
672 unsigned char in_h_gr_5
;
673 unsigned char in_h_gr_6
;
674 unsigned char in_h_gr_7
;
675 unsigned char out_h_gr_15
;
677 struct { /* e.g. stm1 ($reglist_hi_st) */
678 UINT f_reglist_hi_st
;
679 unsigned char in_h_gr_10
;
680 unsigned char in_h_gr_11
;
681 unsigned char in_h_gr_12
;
682 unsigned char in_h_gr_13
;
683 unsigned char in_h_gr_14
;
684 unsigned char in_h_gr_15
;
685 unsigned char in_h_gr_8
;
686 unsigned char in_h_gr_9
;
687 unsigned char out_h_gr_15
;
689 struct { /* e.g. enter $u10 */
691 unsigned char in_h_gr_14
;
692 unsigned char in_h_gr_15
;
693 unsigned char out_h_gr_14
;
694 unsigned char out_h_gr_15
;
696 struct { /* e.g. leave */
698 unsigned char in_h_gr_14
;
699 unsigned char in_h_gr_15
;
700 unsigned char out_h_gr_14
;
701 unsigned char out_h_gr_15
;
703 struct { /* e.g. xchb @$Rj,$Ri */
708 unsigned char out_Ri
;
710 /* cti insns, kept separately so addr_cache is in fixed place */
713 struct { /* e.g. jmp @$Ri */
717 struct { /* e.g. call @$Ri */
721 struct { /* e.g. call $label12 */
724 struct { /* e.g. ret */
727 struct { /* e.g. int $u8 */
730 struct { /* e.g. inte */
733 struct { /* e.g. reti */
736 struct { /* e.g. bra:d $label9 */
739 struct { /* e.g. beq:d $label9 */
742 struct { /* e.g. bc:d $label9 */
745 struct { /* e.g. bn:d $label9 */
748 struct { /* e.g. bv:d $label9 */
751 struct { /* e.g. blt:d $label9 */
754 struct { /* e.g. ble:d $label9 */
757 struct { /* e.g. bls:d $label9 */
766 /* Writeback handler. */
768 /* Pointer to argbuf entry for insn whose results need writing back. */
769 const struct argbuf
*abuf
;
771 /* x-before handler */
773 /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
776 /* x-after handler */
780 /* This entry is used to terminate each pbb. */
782 /* Number of insns in pbb. */
784 /* Next pbb to execute. */
790 /* The ARGBUF struct. */
792 /* These are the baseclass definitions. */
797 /* cpu specific data follows */
800 union sem_fields fields
;
805 ??? SCACHE used to contain more than just argbuf. We could delete the
806 type entirely and always just use ARGBUF, but for future concerns and as
807 a level of abstraction it is left in. */
810 struct argbuf argbuf
;
813 /* Macros to simplify extraction, reading and semantic code.
814 These define and assign the local vars that contain the insn's fields. */
816 #define EXTRACT_IFMT_EMPTY_VARS \
817 /* Instruction fields. */ \
819 #define EXTRACT_IFMT_EMPTY_CODE \
822 #define EXTRACT_IFMT_ADD_VARS \
823 /* Instruction fields. */ \
829 #define EXTRACT_IFMT_ADD_CODE \
831 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
832 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
833 f_Rj = EXTRACT_UINT (insn, 16, 8, 4); \
834 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
836 #define EXTRACT_IFMT_ADDI_VARS \
837 /* Instruction fields. */ \
843 #define EXTRACT_IFMT_ADDI_CODE \
845 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
846 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
847 f_u4 = EXTRACT_UINT (insn, 16, 8, 4); \
848 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
850 #define EXTRACT_IFMT_ADD2_VARS \
851 /* Instruction fields. */ \
857 #define EXTRACT_IFMT_ADD2_CODE \
859 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
860 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
861 f_m4 = ((EXTRACT_UINT (insn, 16, 8, 4)) | (((-1) << (4)))); \
862 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
864 #define EXTRACT_IFMT_DIV0S_VARS \
865 /* Instruction fields. */ \
871 #define EXTRACT_IFMT_DIV0S_CODE \
873 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
874 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
875 f_op3 = EXTRACT_UINT (insn, 16, 8, 4); \
876 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
878 #define EXTRACT_IFMT_DIV3_VARS \
879 /* Instruction fields. */ \
885 #define EXTRACT_IFMT_DIV3_CODE \
887 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
888 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
889 f_op3 = EXTRACT_UINT (insn, 16, 8, 4); \
890 f_op4 = EXTRACT_UINT (insn, 16, 12, 4); \
892 #define EXTRACT_IFMT_LDI8_VARS \
893 /* Instruction fields. */ \
898 #define EXTRACT_IFMT_LDI8_CODE \
900 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
901 f_i8 = EXTRACT_UINT (insn, 16, 4, 8); \
902 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
904 #define EXTRACT_IFMT_LDI20_VARS \
905 /* Instruction fields. */ \
912 /* Contents of trailing part of insn. */ \
915 #define EXTRACT_IFMT_LDI20_CODE \
917 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
918 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
919 f_i20_4 = EXTRACT_UINT (insn, 16, 8, 4); \
920 f_i20_16 = (0|(EXTRACT_UINT (word_1, 16, 0, 16) << 0)); \
922 f_i20 = ((((f_i20_4) << (16))) | (f_i20_16));\
924 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
925 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
927 #define EXTRACT_IFMT_LDI32_VARS \
928 /* Instruction fields. */ \
934 /* Contents of trailing part of insn. */ \
937 #define EXTRACT_IFMT_LDI32_CODE \
939 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
940 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
941 f_i32 = (0|(EXTRACT_UINT (word_1, 32, 0, 32) << 0)); \
942 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
943 f_op3 = EXTRACT_UINT (insn, 16, 8, 4); \
944 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
946 #define EXTRACT_IFMT_LDR14_VARS \
947 /* Instruction fields. */ \
952 #define EXTRACT_IFMT_LDR14_CODE \
954 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
955 f_disp10 = ((EXTRACT_INT (insn, 16, 4, 8)) << (2)); \
956 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
958 #define EXTRACT_IFMT_LDR14UH_VARS \
959 /* Instruction fields. */ \
964 #define EXTRACT_IFMT_LDR14UH_CODE \
966 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
967 f_disp9 = ((EXTRACT_INT (insn, 16, 4, 8)) << (1)); \
968 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
970 #define EXTRACT_IFMT_LDR14UB_VARS \
971 /* Instruction fields. */ \
976 #define EXTRACT_IFMT_LDR14UB_CODE \
978 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
979 f_disp8 = EXTRACT_INT (insn, 16, 4, 8); \
980 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
982 #define EXTRACT_IFMT_LDR15_VARS \
983 /* Instruction fields. */ \
989 #define EXTRACT_IFMT_LDR15_CODE \
991 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
992 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
993 f_udisp6 = ((EXTRACT_UINT (insn, 16, 8, 4)) << (2)); \
994 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
996 #define EXTRACT_IFMT_LDR15DR_VARS \
997 /* Instruction fields. */ \
1002 unsigned int length;
1003 #define EXTRACT_IFMT_LDR15DR_CODE \
1005 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1006 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1007 f_op3 = EXTRACT_UINT (insn, 16, 8, 4); \
1008 f_Rs2 = EXTRACT_UINT (insn, 16, 12, 4); \
1010 #define EXTRACT_IFMT_MOVDR_VARS \
1011 /* Instruction fields. */ \
1016 unsigned int length;
1017 #define EXTRACT_IFMT_MOVDR_CODE \
1019 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1020 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1021 f_Rs1 = EXTRACT_UINT (insn, 16, 8, 4); \
1022 f_Ri = EXTRACT_UINT (insn, 16, 12, 4); \
1024 #define EXTRACT_IFMT_CALL_VARS \
1025 /* Instruction fields. */ \
1029 unsigned int length;
1030 #define EXTRACT_IFMT_CALL_CODE \
1032 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1033 f_op5 = EXTRACT_UINT (insn, 16, 4, 1); \
1034 f_rel12 = ((((EXTRACT_INT (insn, 16, 5, 11)) << (1))) + (((pc) + (2)))); \
1036 #define EXTRACT_IFMT_INT_VARS \
1037 /* Instruction fields. */ \
1041 unsigned int length;
1042 #define EXTRACT_IFMT_INT_CODE \
1044 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1045 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1046 f_u8 = EXTRACT_UINT (insn, 16, 8, 8); \
1048 #define EXTRACT_IFMT_BRAD_VARS \
1049 /* Instruction fields. */ \
1053 unsigned int length;
1054 #define EXTRACT_IFMT_BRAD_CODE \
1056 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1057 f_cc = EXTRACT_UINT (insn, 16, 4, 4); \
1058 f_rel9 = ((((EXTRACT_INT (insn, 16, 8, 8)) << (1))) + (((pc) + (2)))); \
1060 #define EXTRACT_IFMT_DMOVR13_VARS \
1061 /* Instruction fields. */ \
1065 unsigned int length;
1066 #define EXTRACT_IFMT_DMOVR13_CODE \
1068 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1069 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1070 f_dir10 = ((EXTRACT_UINT (insn, 16, 8, 8)) << (2)); \
1072 #define EXTRACT_IFMT_DMOVR13H_VARS \
1073 /* Instruction fields. */ \
1077 unsigned int length;
1078 #define EXTRACT_IFMT_DMOVR13H_CODE \
1080 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1081 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1082 f_dir9 = ((EXTRACT_UINT (insn, 16, 8, 8)) << (1)); \
1084 #define EXTRACT_IFMT_DMOVR13B_VARS \
1085 /* Instruction fields. */ \
1089 unsigned int length;
1090 #define EXTRACT_IFMT_DMOVR13B_CODE \
1092 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1093 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1094 f_dir8 = EXTRACT_UINT (insn, 16, 8, 8); \
1096 #define EXTRACT_IFMT_COPOP_VARS \
1097 /* Instruction fields. */ \
1105 /* Contents of trailing part of insn. */ \
1107 unsigned int length;
1108 #define EXTRACT_IFMT_COPOP_CODE \
1110 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
1111 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1112 f_ccc = (0|(EXTRACT_UINT (word_1, 16, 0, 8) << 0)); \
1113 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1114 f_op3 = EXTRACT_UINT (insn, 16, 8, 4); \
1115 f_CRj = (0|(EXTRACT_UINT (word_1, 16, 8, 4) << 0)); \
1116 f_u4c = EXTRACT_UINT (insn, 16, 12, 4); \
1117 f_CRi = (0|(EXTRACT_UINT (word_1, 16, 12, 16) << 0)); \
1119 #define EXTRACT_IFMT_COPLD_VARS \
1120 /* Instruction fields. */ \
1128 /* Contents of trailing part of insn. */ \
1130 unsigned int length;
1131 #define EXTRACT_IFMT_COPLD_CODE \
1133 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
1134 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1135 f_ccc = (0|(EXTRACT_UINT (word_1, 16, 0, 8) << 0)); \
1136 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1137 f_op3 = EXTRACT_UINT (insn, 16, 8, 4); \
1138 f_Rjc = (0|(EXTRACT_UINT (word_1, 16, 8, 4) << 0)); \
1139 f_u4c = EXTRACT_UINT (insn, 16, 12, 4); \
1140 f_CRi = (0|(EXTRACT_UINT (word_1, 16, 12, 16) << 0)); \
1142 #define EXTRACT_IFMT_COPST_VARS \
1143 /* Instruction fields. */ \
1151 /* Contents of trailing part of insn. */ \
1153 unsigned int length;
1154 #define EXTRACT_IFMT_COPST_CODE \
1156 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
1157 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1158 f_ccc = (0|(EXTRACT_UINT (word_1, 16, 0, 8) << 0)); \
1159 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1160 f_op3 = EXTRACT_UINT (insn, 16, 8, 4); \
1161 f_CRj = (0|(EXTRACT_UINT (word_1, 16, 8, 4) << 0)); \
1162 f_u4c = EXTRACT_UINT (insn, 16, 12, 4); \
1163 f_Ric = (0|(EXTRACT_UINT (word_1, 16, 12, 16) << 0)); \
1165 #define EXTRACT_IFMT_ADDSP_VARS \
1166 /* Instruction fields. */ \
1170 unsigned int length;
1171 #define EXTRACT_IFMT_ADDSP_CODE \
1173 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1174 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1175 f_s10 = ((EXTRACT_INT (insn, 16, 8, 8)) << (2)); \
1177 #define EXTRACT_IFMT_LDM0_VARS \
1178 /* Instruction fields. */ \
1181 UINT f_reglist_low_ld; \
1182 unsigned int length;
1183 #define EXTRACT_IFMT_LDM0_CODE \
1185 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1186 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1187 f_reglist_low_ld = EXTRACT_UINT (insn, 16, 8, 8); \
1189 #define EXTRACT_IFMT_LDM1_VARS \
1190 /* Instruction fields. */ \
1193 UINT f_reglist_hi_ld; \
1194 unsigned int length;
1195 #define EXTRACT_IFMT_LDM1_CODE \
1197 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1198 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1199 f_reglist_hi_ld = EXTRACT_UINT (insn, 16, 8, 8); \
1201 #define EXTRACT_IFMT_STM0_VARS \
1202 /* Instruction fields. */ \
1205 UINT f_reglist_low_st; \
1206 unsigned int length;
1207 #define EXTRACT_IFMT_STM0_CODE \
1209 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1210 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1211 f_reglist_low_st = EXTRACT_UINT (insn, 16, 8, 8); \
1213 #define EXTRACT_IFMT_STM1_VARS \
1214 /* Instruction fields. */ \
1217 UINT f_reglist_hi_st; \
1218 unsigned int length;
1219 #define EXTRACT_IFMT_STM1_CODE \
1221 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1222 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1223 f_reglist_hi_st = EXTRACT_UINT (insn, 16, 8, 8); \
1225 #define EXTRACT_IFMT_ENTER_VARS \
1226 /* Instruction fields. */ \
1230 unsigned int length;
1231 #define EXTRACT_IFMT_ENTER_CODE \
1233 f_op1 = EXTRACT_UINT (insn, 16, 0, 4); \
1234 f_op2 = EXTRACT_UINT (insn, 16, 4, 4); \
1235 f_u10 = ((EXTRACT_UINT (insn, 16, 8, 8)) << (2)); \
1237 /* Collection of various things for the trace handler to use. */
1239 typedef struct trace_record
{
1244 #endif /* CPU_FR30BF_H */