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 #define GET_H_DR(index) fr30bf_h_dr_get_handler (current_cpu, index)
54 #define SET_H_DR(index, x) \
56 fr30bf_h_dr_set_handler (current_cpu, (index), (x));\
58 /* processor status */
60 #define GET_H_PS() fr30bf_h_ps_get_handler (current_cpu)
63 fr30bf_h_ps_set_handler (current_cpu, (x));\
65 /* General Register 13 explicitly required */
67 #define GET_H_R13() CPU (h_r13)
68 #define SET_H_R13(x) (CPU (h_r13) = (x))
69 /* General Register 14 explicitly required */
71 #define GET_H_R14() CPU (h_r14)
72 #define SET_H_R14(x) (CPU (h_r14) = (x))
73 /* General Register 15 explicitly required */
75 #define GET_H_R15() CPU (h_r15)
76 #define SET_H_R15(x) (CPU (h_r15) = (x))
79 #define GET_H_NBIT() CPU (h_nbit)
80 #define SET_H_NBIT(x) (CPU (h_nbit) = (x))
83 #define GET_H_ZBIT() CPU (h_zbit)
84 #define SET_H_ZBIT(x) (CPU (h_zbit) = (x))
87 #define GET_H_VBIT() CPU (h_vbit)
88 #define SET_H_VBIT(x) (CPU (h_vbit) = (x))
91 #define GET_H_CBIT() CPU (h_cbit)
92 #define SET_H_CBIT(x) (CPU (h_cbit) = (x))
93 /* interrupt enable bit */
95 #define GET_H_IBIT() CPU (h_ibit)
96 #define SET_H_IBIT(x) (CPU (h_ibit) = (x))
99 #define GET_H_SBIT() fr30bf_h_sbit_get_handler (current_cpu)
100 #define SET_H_SBIT(x) \
102 fr30bf_h_sbit_set_handler (current_cpu, (x));\
106 #define GET_H_TBIT() CPU (h_tbit)
107 #define SET_H_TBIT(x) (CPU (h_tbit) = (x))
110 #define GET_H_D0BIT() CPU (h_d0bit)
111 #define SET_H_D0BIT(x) (CPU (h_d0bit) = (x))
114 #define GET_H_D1BIT() CPU (h_d1bit)
115 #define SET_H_D1BIT(x) (CPU (h_d1bit) = (x))
116 /* condition code bits */
118 #define GET_H_CCR() fr30bf_h_ccr_get_handler (current_cpu)
119 #define SET_H_CCR(x) \
121 fr30bf_h_ccr_set_handler (current_cpu, (x));\
123 /* system condition bits */
125 #define GET_H_SCR() fr30bf_h_scr_get_handler (current_cpu)
126 #define SET_H_SCR(x) \
128 fr30bf_h_scr_set_handler (current_cpu, (x));\
130 /* interrupt level mask */
132 #define GET_H_ILM() fr30bf_h_ilm_get_handler (current_cpu)
133 #define SET_H_ILM(x) \
135 fr30bf_h_ilm_set_handler (current_cpu, (x));\
138 #define CPU_CGEN_HW(cpu) (& (cpu)->cpu_data.hardware)
141 /* Cover fns for register access. */
142 USI
fr30bf_h_pc_get (SIM_CPU
*);
143 void fr30bf_h_pc_set (SIM_CPU
*, USI
);
144 SI
fr30bf_h_gr_get (SIM_CPU
*, UINT
);
145 void fr30bf_h_gr_set (SIM_CPU
*, UINT
, SI
);
146 SI
fr30bf_h_cr_get (SIM_CPU
*, UINT
);
147 void fr30bf_h_cr_set (SIM_CPU
*, UINT
, SI
);
148 SI
fr30bf_h_dr_get (SIM_CPU
*, UINT
);
149 void fr30bf_h_dr_set (SIM_CPU
*, UINT
, SI
);
150 USI
fr30bf_h_ps_get (SIM_CPU
*);
151 void fr30bf_h_ps_set (SIM_CPU
*, USI
);
152 SI
fr30bf_h_r13_get (SIM_CPU
*);
153 void fr30bf_h_r13_set (SIM_CPU
*, SI
);
154 SI
fr30bf_h_r14_get (SIM_CPU
*);
155 void fr30bf_h_r14_set (SIM_CPU
*, SI
);
156 SI
fr30bf_h_r15_get (SIM_CPU
*);
157 void fr30bf_h_r15_set (SIM_CPU
*, SI
);
158 BI
fr30bf_h_nbit_get (SIM_CPU
*);
159 void fr30bf_h_nbit_set (SIM_CPU
*, BI
);
160 BI
fr30bf_h_zbit_get (SIM_CPU
*);
161 void fr30bf_h_zbit_set (SIM_CPU
*, BI
);
162 BI
fr30bf_h_vbit_get (SIM_CPU
*);
163 void fr30bf_h_vbit_set (SIM_CPU
*, BI
);
164 BI
fr30bf_h_cbit_get (SIM_CPU
*);
165 void fr30bf_h_cbit_set (SIM_CPU
*, BI
);
166 BI
fr30bf_h_ibit_get (SIM_CPU
*);
167 void fr30bf_h_ibit_set (SIM_CPU
*, BI
);
168 BI
fr30bf_h_sbit_get (SIM_CPU
*);
169 void fr30bf_h_sbit_set (SIM_CPU
*, BI
);
170 BI
fr30bf_h_tbit_get (SIM_CPU
*);
171 void fr30bf_h_tbit_set (SIM_CPU
*, BI
);
172 BI
fr30bf_h_d0bit_get (SIM_CPU
*);
173 void fr30bf_h_d0bit_set (SIM_CPU
*, BI
);
174 BI
fr30bf_h_d1bit_get (SIM_CPU
*);
175 void fr30bf_h_d1bit_set (SIM_CPU
*, BI
);
176 UQI
fr30bf_h_ccr_get (SIM_CPU
*);
177 void fr30bf_h_ccr_set (SIM_CPU
*, UQI
);
178 UQI
fr30bf_h_scr_get (SIM_CPU
*);
179 void fr30bf_h_scr_set (SIM_CPU
*, UQI
);
180 UQI
fr30bf_h_ilm_get (SIM_CPU
*);
181 void fr30bf_h_ilm_set (SIM_CPU
*, UQI
);
183 /* These must be hand-written. */
184 extern CPUREG_FETCH_FN fr30bf_fetch_register
;
185 extern CPUREG_STORE_FN fr30bf_store_register
;
189 UINT load_regs_pending
;
193 struct { /* empty sformat for unspecified field list */
196 struct { /* e.g. add $Rj,$Ri */
201 unsigned char out_Ri
;
203 struct { /* e.g. add $u4,$Ri */
207 unsigned char out_Ri
;
209 struct { /* e.g. add2 $m4,$Ri */
213 unsigned char out_Ri
;
215 struct { /* e.g. addc $Rj,$Ri */
220 unsigned char out_Ri
;
222 struct { /* e.g. addn $Rj,$Ri */
227 unsigned char out_Ri
;
229 struct { /* e.g. addn $u4,$Ri */
233 unsigned char out_Ri
;
235 struct { /* e.g. addn2 $m4,$Ri */
239 unsigned char out_Ri
;
241 struct { /* e.g. cmp $Rj,$Ri */
247 struct { /* e.g. cmp $u4,$Ri */
252 struct { /* e.g. cmp2 $m4,$Ri */
257 struct { /* e.g. and $Rj,$Ri */
262 unsigned char out_Ri
;
264 struct { /* e.g. and $Rj,@$Ri */
270 struct { /* e.g. andh $Rj,@$Ri */
276 struct { /* e.g. andb $Rj,@$Ri */
282 struct { /* e.g. bandl $u4,@$Ri */
287 struct { /* e.g. btstl $u4,@$Ri */
292 struct { /* e.g. mul $Rj,$Ri */
298 struct { /* e.g. mulu $Rj,$Ri */
304 struct { /* e.g. mulh $Rj,$Ri */
310 struct { /* e.g. div0s $Ri */
314 struct { /* e.g. div0u $Ri */
317 struct { /* e.g. div1 $Ri */
321 struct { /* e.g. div2 $Ri */
325 struct { /* e.g. div3 */
328 struct { /* e.g. div4s */
331 struct { /* e.g. lsl $Rj,$Ri */
336 unsigned char out_Ri
;
338 struct { /* e.g. lsl $u4,$Ri */
342 unsigned char out_Ri
;
344 struct { /* e.g. ldi:8 $i8,$Ri */
347 unsigned char out_Ri
;
349 struct { /* e.g. ldi:20 $i20,$Ri */
352 unsigned char out_Ri
;
354 struct { /* e.g. ldi:32 $i32,$Ri */
357 unsigned char out_Ri
;
359 struct { /* e.g. ld @$Rj,$Ri */
363 unsigned char out_Ri
;
365 struct { /* e.g. ld @($R13,$Rj),$Ri */
369 unsigned char in_h_gr_13
;
370 unsigned char out_Ri
;
372 struct { /* e.g. ld @($R14,$disp10),$Ri */
375 unsigned char in_h_gr_14
;
376 unsigned char out_Ri
;
378 struct { /* e.g. lduh @($R14,$disp9),$Ri */
381 unsigned char in_h_gr_14
;
382 unsigned char out_Ri
;
384 struct { /* e.g. ldub @($R14,$disp8),$Ri */
387 unsigned char in_h_gr_14
;
388 unsigned char out_Ri
;
390 struct { /* e.g. ld @($R15,$udisp6),$Ri */
393 unsigned char in_h_gr_15
;
394 unsigned char out_Ri
;
396 struct { /* e.g. ld @$R15+,$Ri */
399 unsigned char in_h_gr_15
;
400 unsigned char out_Ri
;
401 unsigned char out_h_gr_15
;
403 struct { /* e.g. ld @$R15+,$Rs2 */
405 unsigned char in_h_gr_15
;
406 unsigned char out_h_gr_15
;
408 struct { /* e.g. ld @$R15+,$ps */
410 unsigned char in_h_gr_15
;
411 unsigned char out_h_gr_15
;
413 struct { /* e.g. st $Ri,@$Rj */
419 struct { /* e.g. st $Ri,@($R13,$Rj) */
424 unsigned char in_h_gr_13
;
426 struct { /* e.g. st $Ri,@($R14,$disp10) */
430 unsigned char in_h_gr_14
;
432 struct { /* e.g. sth $Ri,@($R14,$disp9) */
436 unsigned char in_h_gr_14
;
438 struct { /* e.g. stb $Ri,@($R14,$disp8) */
442 unsigned char in_h_gr_14
;
444 struct { /* e.g. st $Ri,@($R15,$udisp6) */
448 unsigned char in_h_gr_15
;
450 struct { /* e.g. st $Ri,@-$R15 */
453 unsigned char in_h_gr_15
;
454 unsigned char out_h_gr_15
;
456 struct { /* e.g. st $Rs2,@-$R15 */
458 unsigned char in_h_gr_15
;
459 unsigned char out_h_gr_15
;
461 struct { /* e.g. st $ps,@-$R15 */
463 unsigned char in_h_gr_15
;
464 unsigned char out_h_gr_15
;
466 struct { /* e.g. mov $Rj,$Ri */
470 unsigned char out_Ri
;
472 struct { /* e.g. mov $Rs1,$Ri */
475 unsigned char out_Ri
;
477 struct { /* e.g. mov $ps,$Ri */
479 unsigned char out_Ri
;
481 struct { /* e.g. mov $Ri,$Rs1 */
486 struct { /* e.g. mov $Ri,$ps */
490 struct { /* e.g. bno:d $label9 */
493 struct { /* e.g. dmov $R13,@$dir10 */
495 unsigned char in_h_gr_13
;
497 struct { /* e.g. dmovh $R13,@$dir9 */
499 unsigned char in_h_gr_13
;
501 struct { /* e.g. dmovb $R13,@$dir8 */
503 unsigned char in_h_gr_13
;
505 struct { /* e.g. dmov @$R13+,@$dir10 */
507 unsigned char in_h_gr_13
;
508 unsigned char out_h_gr_13
;
510 struct { /* e.g. dmovh @$R13+,@$dir9 */
512 unsigned char in_h_gr_13
;
513 unsigned char out_h_gr_13
;
515 struct { /* e.g. dmovb @$R13+,@$dir8 */
517 unsigned char in_h_gr_13
;
518 unsigned char out_h_gr_13
;
520 struct { /* e.g. dmov @$R15+,@$dir10 */
522 unsigned char in_h_gr_15
;
523 unsigned char out_h_gr_15
;
525 struct { /* e.g. dmov @$dir10,$R13 */
527 unsigned char out_h_gr_13
;
529 struct { /* e.g. dmovh @$dir9,$R13 */
531 unsigned char out_h_gr_13
;
533 struct { /* e.g. dmovb @$dir8,$R13 */
535 unsigned char out_h_gr_13
;
537 struct { /* e.g. dmov @$dir10,@$R13+ */
539 unsigned char in_h_gr_13
;
540 unsigned char out_h_gr_13
;
542 struct { /* e.g. dmovh @$dir9,@$R13+ */
544 unsigned char in_h_gr_13
;
545 unsigned char out_h_gr_13
;
547 struct { /* e.g. dmovb @$dir8,@$R13+ */
549 unsigned char in_h_gr_13
;
550 unsigned char out_h_gr_13
;
552 struct { /* e.g. dmov @$dir10,@-$R15 */
554 unsigned char in_h_gr_15
;
555 unsigned char out_h_gr_15
;
557 struct { /* e.g. ldres @$Ri+,$u4 */
560 unsigned char out_Ri
;
562 struct { /* e.g. copop $u4c,$ccc,$CRj,$CRi */
565 struct { /* e.g. andccr $u8 */
568 struct { /* e.g. stilm $u8 */
571 struct { /* e.g. addsp $s10 */
573 unsigned char in_h_gr_15
;
574 unsigned char out_h_gr_15
;
576 struct { /* e.g. extsb $Ri */
579 unsigned char out_Ri
;
581 struct { /* e.g. extub $Ri */
584 unsigned char out_Ri
;
586 struct { /* e.g. extsh $Ri */
589 unsigned char out_Ri
;
591 struct { /* e.g. extuh $Ri */
594 unsigned char out_Ri
;
596 struct { /* e.g. ldm0 ($reglist_low_ld) */
597 UINT f_reglist_low_ld
;
598 unsigned char in_h_gr_15
;
599 unsigned char out_h_gr_0
;
600 unsigned char out_h_gr_1
;
601 unsigned char out_h_gr_15
;
602 unsigned char out_h_gr_2
;
603 unsigned char out_h_gr_3
;
604 unsigned char out_h_gr_4
;
605 unsigned char out_h_gr_5
;
606 unsigned char out_h_gr_6
;
607 unsigned char out_h_gr_7
;
609 struct { /* e.g. ldm1 ($reglist_hi_ld) */
610 UINT f_reglist_hi_ld
;
611 unsigned char in_h_gr_15
;
612 unsigned char out_h_gr_10
;
613 unsigned char out_h_gr_11
;
614 unsigned char out_h_gr_12
;
615 unsigned char out_h_gr_13
;
616 unsigned char out_h_gr_14
;
617 unsigned char out_h_gr_15
;
618 unsigned char out_h_gr_8
;
619 unsigned char out_h_gr_9
;
621 struct { /* e.g. stm0 ($reglist_low_st) */
622 UINT f_reglist_low_st
;
623 unsigned char in_h_gr_0
;
624 unsigned char in_h_gr_1
;
625 unsigned char in_h_gr_15
;
626 unsigned char in_h_gr_2
;
627 unsigned char in_h_gr_3
;
628 unsigned char in_h_gr_4
;
629 unsigned char in_h_gr_5
;
630 unsigned char in_h_gr_6
;
631 unsigned char in_h_gr_7
;
632 unsigned char out_h_gr_15
;
634 struct { /* e.g. stm1 ($reglist_hi_st) */
635 UINT f_reglist_hi_st
;
636 unsigned char in_h_gr_10
;
637 unsigned char in_h_gr_11
;
638 unsigned char in_h_gr_12
;
639 unsigned char in_h_gr_13
;
640 unsigned char in_h_gr_14
;
641 unsigned char in_h_gr_15
;
642 unsigned char in_h_gr_8
;
643 unsigned char in_h_gr_9
;
644 unsigned char out_h_gr_15
;
646 struct { /* e.g. enter $u10 */
648 unsigned char in_h_gr_14
;
649 unsigned char in_h_gr_15
;
650 unsigned char out_h_gr_14
;
651 unsigned char out_h_gr_15
;
653 struct { /* e.g. leave */
655 unsigned char in_h_gr_14
;
656 unsigned char in_h_gr_15
;
657 unsigned char out_h_gr_14
;
658 unsigned char out_h_gr_15
;
660 struct { /* e.g. xchb @$Rj,$Ri */
665 unsigned char out_Ri
;
667 /* cti insns, kept separately so addr_cache is in fixed place */
670 struct { /* e.g. jmp @$Ri */
674 struct { /* e.g. call @$Ri */
678 struct { /* e.g. call $label12 */
681 struct { /* e.g. ret */
684 struct { /* e.g. int $u8 */
687 struct { /* e.g. inte */
690 struct { /* e.g. reti */
693 struct { /* e.g. bra:d $label9 */
696 struct { /* e.g. beq:d $label9 */
699 struct { /* e.g. bc:d $label9 */
702 struct { /* e.g. bn:d $label9 */
705 struct { /* e.g. bv:d $label9 */
708 struct { /* e.g. blt:d $label9 */
711 struct { /* e.g. ble:d $label9 */
714 struct { /* e.g. bls:d $label9 */
723 /* Writeback handler. */
725 /* Pointer to argbuf entry for insn whose results need writing back. */
726 const struct argbuf
*abuf
;
728 /* x-before handler */
730 /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
733 /* x-after handler */
737 /* This entry is used to terminate each pbb. */
739 /* Number of insns in pbb. */
741 /* Next pbb to execute. */
747 /* The ARGBUF struct. */
749 /* These are the baseclass definitions. */
754 /* cpu specific data follows */
757 union sem_fields fields
;
762 ??? SCACHE used to contain more than just argbuf. We could delete the
763 type entirely and always just use ARGBUF, but for future concerns and as
764 a level of abstraction it is left in. */
767 struct argbuf argbuf
;
770 /* Macros to simplify extraction, reading and semantic code.
771 These define and assign the local vars that contain the insn's fields. */
773 #define EXTRACT_IFMT_EMPTY_VARS \
774 /* Instruction fields. */ \
776 #define EXTRACT_IFMT_EMPTY_CODE \
779 #define EXTRACT_IFMT_ADD_VARS \
780 /* Instruction fields. */ \
786 #define EXTRACT_IFMT_ADD_CODE \
788 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
789 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
790 f_Rj = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
791 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
793 #define EXTRACT_IFMT_ADDI_VARS \
794 /* Instruction fields. */ \
800 #define EXTRACT_IFMT_ADDI_CODE \
802 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
803 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
804 f_u4 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
805 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
807 #define EXTRACT_IFMT_ADD2_VARS \
808 /* Instruction fields. */ \
814 #define EXTRACT_IFMT_ADD2_CODE \
816 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
817 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
818 f_m4 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 4)) | (((-1) << (4)))); \
819 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
821 #define EXTRACT_IFMT_DIV0S_VARS \
822 /* Instruction fields. */ \
828 #define EXTRACT_IFMT_DIV0S_CODE \
830 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
831 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
832 f_op3 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
833 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
835 #define EXTRACT_IFMT_DIV3_VARS \
836 /* Instruction fields. */ \
842 #define EXTRACT_IFMT_DIV3_CODE \
844 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
845 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
846 f_op3 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
847 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
849 #define EXTRACT_IFMT_LDI8_VARS \
850 /* Instruction fields. */ \
855 #define EXTRACT_IFMT_LDI8_CODE \
857 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
858 f_i8 = EXTRACT_MSB0_UINT (insn, 16, 4, 8); \
859 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
861 #define EXTRACT_IFMT_LDI20_VARS \
862 /* Instruction fields. */ \
869 /* Contents of trailing part of insn. */ \
872 #define EXTRACT_IFMT_LDI20_CODE \
874 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
875 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
876 f_i20_4 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
877 f_i20_16 = (0|(EXTRACT_MSB0_UINT (word_1, 16, 0, 16) << 0)); \
879 f_i20 = ((((f_i20_4) << (16))) | (f_i20_16));\
881 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
882 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
884 #define EXTRACT_IFMT_LDI32_VARS \
885 /* Instruction fields. */ \
891 /* Contents of trailing part of insn. */ \
895 #define EXTRACT_IFMT_LDI32_CODE \
897 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
898 word_2 = GETIMEMUHI (current_cpu, pc + 4); \
899 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
900 f_i32 = (0|(EXTRACT_MSB0_UINT (word_2, 16, 0, 16) << 0)|(EXTRACT_MSB0_UINT (word_1, 16, 0, 16) << 16)); \
901 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
902 f_op3 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
903 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
905 #define EXTRACT_IFMT_LDR14_VARS \
906 /* Instruction fields. */ \
911 #define EXTRACT_IFMT_LDR14_CODE \
913 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
914 f_disp10 = ((EXTRACT_MSB0_INT (insn, 16, 4, 8)) << (2)); \
915 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
917 #define EXTRACT_IFMT_LDR14UH_VARS \
918 /* Instruction fields. */ \
923 #define EXTRACT_IFMT_LDR14UH_CODE \
925 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
926 f_disp9 = ((EXTRACT_MSB0_INT (insn, 16, 4, 8)) << (1)); \
927 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
929 #define EXTRACT_IFMT_LDR14UB_VARS \
930 /* Instruction fields. */ \
935 #define EXTRACT_IFMT_LDR14UB_CODE \
937 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
938 f_disp8 = EXTRACT_MSB0_INT (insn, 16, 4, 8); \
939 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
941 #define EXTRACT_IFMT_LDR15_VARS \
942 /* Instruction fields. */ \
948 #define EXTRACT_IFMT_LDR15_CODE \
950 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
951 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
952 f_udisp6 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 4)) << (2)); \
953 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
955 #define EXTRACT_IFMT_LDR15DR_VARS \
956 /* Instruction fields. */ \
962 #define EXTRACT_IFMT_LDR15DR_CODE \
964 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
965 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
966 f_op3 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
967 f_Rs2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
969 #define EXTRACT_IFMT_MOVDR_VARS \
970 /* Instruction fields. */ \
976 #define EXTRACT_IFMT_MOVDR_CODE \
978 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
979 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
980 f_Rs1 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
981 f_Ri = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
983 #define EXTRACT_IFMT_CALL_VARS \
984 /* Instruction fields. */ \
989 #define EXTRACT_IFMT_CALL_CODE \
991 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
992 f_op5 = EXTRACT_MSB0_UINT (insn, 16, 4, 1); \
993 f_rel12 = ((((EXTRACT_MSB0_INT (insn, 16, 5, 11)) << (1))) + (((pc) + (2)))); \
995 #define EXTRACT_IFMT_INT_VARS \
996 /* Instruction fields. */ \
1000 unsigned int length;
1001 #define EXTRACT_IFMT_INT_CODE \
1003 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1004 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1005 f_u8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
1007 #define EXTRACT_IFMT_BRAD_VARS \
1008 /* Instruction fields. */ \
1012 unsigned int length;
1013 #define EXTRACT_IFMT_BRAD_CODE \
1015 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1016 f_cc = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1017 f_rel9 = ((((EXTRACT_MSB0_INT (insn, 16, 8, 8)) << (1))) + (((pc) + (2)))); \
1019 #define EXTRACT_IFMT_DMOVR13_VARS \
1020 /* Instruction fields. */ \
1024 unsigned int length;
1025 #define EXTRACT_IFMT_DMOVR13_CODE \
1027 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1028 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1029 f_dir10 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 8)) << (2)); \
1031 #define EXTRACT_IFMT_DMOVR13H_VARS \
1032 /* Instruction fields. */ \
1036 unsigned int length;
1037 #define EXTRACT_IFMT_DMOVR13H_CODE \
1039 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1040 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1041 f_dir9 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 8)) << (1)); \
1043 #define EXTRACT_IFMT_DMOVR13B_VARS \
1044 /* Instruction fields. */ \
1048 unsigned int length;
1049 #define EXTRACT_IFMT_DMOVR13B_CODE \
1051 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1052 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1053 f_dir8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
1055 #define EXTRACT_IFMT_COPOP_VARS \
1056 /* Instruction fields. */ \
1064 /* Contents of trailing part of insn. */ \
1066 unsigned int length;
1067 #define EXTRACT_IFMT_COPOP_CODE \
1069 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
1070 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1071 f_ccc = (0|(EXTRACT_MSB0_UINT (word_1, 16, 0, 8) << 0)); \
1072 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1073 f_op3 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
1074 f_CRj = (0|(EXTRACT_MSB0_UINT (word_1, 16, 8, 4) << 0)); \
1075 f_u4c = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
1076 f_CRi = (0|(EXTRACT_MSB0_UINT (word_1, 16, 12, 16) << 0)); \
1078 #define EXTRACT_IFMT_COPLD_VARS \
1079 /* Instruction fields. */ \
1087 /* Contents of trailing part of insn. */ \
1089 unsigned int length;
1090 #define EXTRACT_IFMT_COPLD_CODE \
1092 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
1093 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1094 f_ccc = (0|(EXTRACT_MSB0_UINT (word_1, 16, 0, 8) << 0)); \
1095 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1096 f_op3 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
1097 f_Rjc = (0|(EXTRACT_MSB0_UINT (word_1, 16, 8, 4) << 0)); \
1098 f_u4c = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
1099 f_CRi = (0|(EXTRACT_MSB0_UINT (word_1, 16, 12, 16) << 0)); \
1101 #define EXTRACT_IFMT_COPST_VARS \
1102 /* Instruction fields. */ \
1110 /* Contents of trailing part of insn. */ \
1112 unsigned int length;
1113 #define EXTRACT_IFMT_COPST_CODE \
1115 word_1 = GETIMEMUHI (current_cpu, pc + 2); \
1116 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1117 f_ccc = (0|(EXTRACT_MSB0_UINT (word_1, 16, 0, 8) << 0)); \
1118 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1119 f_op3 = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
1120 f_CRj = (0|(EXTRACT_MSB0_UINT (word_1, 16, 8, 4) << 0)); \
1121 f_u4c = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
1122 f_Ric = (0|(EXTRACT_MSB0_UINT (word_1, 16, 12, 16) << 0)); \
1124 #define EXTRACT_IFMT_ADDSP_VARS \
1125 /* Instruction fields. */ \
1129 unsigned int length;
1130 #define EXTRACT_IFMT_ADDSP_CODE \
1132 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1133 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1134 f_s10 = ((EXTRACT_MSB0_INT (insn, 16, 8, 8)) << (2)); \
1136 #define EXTRACT_IFMT_LDM0_VARS \
1137 /* Instruction fields. */ \
1140 UINT f_reglist_low_ld; \
1141 unsigned int length;
1142 #define EXTRACT_IFMT_LDM0_CODE \
1144 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1145 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1146 f_reglist_low_ld = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
1148 #define EXTRACT_IFMT_LDM1_VARS \
1149 /* Instruction fields. */ \
1152 UINT f_reglist_hi_ld; \
1153 unsigned int length;
1154 #define EXTRACT_IFMT_LDM1_CODE \
1156 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1157 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1158 f_reglist_hi_ld = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
1160 #define EXTRACT_IFMT_STM0_VARS \
1161 /* Instruction fields. */ \
1164 UINT f_reglist_low_st; \
1165 unsigned int length;
1166 #define EXTRACT_IFMT_STM0_CODE \
1168 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1169 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1170 f_reglist_low_st = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
1172 #define EXTRACT_IFMT_STM1_VARS \
1173 /* Instruction fields. */ \
1176 UINT f_reglist_hi_st; \
1177 unsigned int length;
1178 #define EXTRACT_IFMT_STM1_CODE \
1180 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1181 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1182 f_reglist_hi_st = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
1184 #define EXTRACT_IFMT_ENTER_VARS \
1185 /* Instruction fields. */ \
1189 unsigned int length;
1190 #define EXTRACT_IFMT_ENTER_CODE \
1192 f_op1 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
1193 f_op2 = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
1194 f_u10 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 8)) << (2)); \
1196 /* Collection of various things for the trace handler to use. */
1198 typedef struct trace_record
{
1203 #endif /* CPU_FR30BF_H */