OSDN Git Service

* public snapshot of sid simulator
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / cgen-cpu / m32r / m32r-decode.h
1 /* Decode header for m32rbf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 2000 Red Hat, Inc.
6
7 This file is part of the Cygnus Simulators.
8
9
10 */
11
12 #ifndef M32RBF_DECODE_H
13 #define M32RBF_DECODE_H
14
15 namespace m32rbf {
16
17 using namespace cgen;
18 using namespace m32r;
19
20 typedef UINT m32rbf_insn_word;
21
22 /* Enum declaration for instructions in cpu family m32rbf.  */
23 typedef enum m32rbf_insn_type {
24   M32RBF_INSN_X_INVALID, M32RBF_INSN_ADD, M32RBF_INSN_ADD3, M32RBF_INSN_AND
25  , M32RBF_INSN_AND3, M32RBF_INSN_OR, M32RBF_INSN_OR3, M32RBF_INSN_XOR
26  , M32RBF_INSN_XOR3, M32RBF_INSN_ADDI, M32RBF_INSN_ADDV, M32RBF_INSN_ADDV3
27  , M32RBF_INSN_ADDX, M32RBF_INSN_BC8, M32RBF_INSN_BC24, M32RBF_INSN_BEQ
28  , M32RBF_INSN_BEQZ, M32RBF_INSN_BGEZ, M32RBF_INSN_BGTZ, M32RBF_INSN_BLEZ
29  , M32RBF_INSN_BLTZ, M32RBF_INSN_BNEZ, M32RBF_INSN_BL8, M32RBF_INSN_BL24
30  , M32RBF_INSN_BNC8, M32RBF_INSN_BNC24, M32RBF_INSN_BNE, M32RBF_INSN_BRA8
31  , M32RBF_INSN_BRA24, M32RBF_INSN_CMP, M32RBF_INSN_CMPI, M32RBF_INSN_CMPU
32  , M32RBF_INSN_CMPUI, M32RBF_INSN_DIV, M32RBF_INSN_DIVU, M32RBF_INSN_REM
33  , M32RBF_INSN_REMU, M32RBF_INSN_JL, M32RBF_INSN_JMP, M32RBF_INSN_LD
34  , M32RBF_INSN_LD_D, M32RBF_INSN_LDB, M32RBF_INSN_LDB_D, M32RBF_INSN_LDH
35  , M32RBF_INSN_LDH_D, M32RBF_INSN_LDUB, M32RBF_INSN_LDUB_D, M32RBF_INSN_LDUH
36  , M32RBF_INSN_LDUH_D, M32RBF_INSN_LD_PLUS, M32RBF_INSN_LD24, M32RBF_INSN_LDI8
37  , M32RBF_INSN_LDI16, M32RBF_INSN_LOCK, M32RBF_INSN_MACHI, M32RBF_INSN_MACLO
38  , M32RBF_INSN_MACWHI, M32RBF_INSN_MACWLO, M32RBF_INSN_MUL, M32RBF_INSN_MULHI
39  , M32RBF_INSN_MULLO, M32RBF_INSN_MULWHI, M32RBF_INSN_MULWLO, M32RBF_INSN_MV
40  , M32RBF_INSN_MVFACHI, M32RBF_INSN_MVFACLO, M32RBF_INSN_MVFACMI, M32RBF_INSN_MVFC
41  , M32RBF_INSN_MVTACHI, M32RBF_INSN_MVTACLO, M32RBF_INSN_MVTC, M32RBF_INSN_NEG
42  , M32RBF_INSN_NOP, M32RBF_INSN_NOT, M32RBF_INSN_RAC, M32RBF_INSN_RACH
43  , M32RBF_INSN_RTE, M32RBF_INSN_SETH, M32RBF_INSN_SLL, M32RBF_INSN_SLL3
44  , M32RBF_INSN_SLLI, M32RBF_INSN_SRA, M32RBF_INSN_SRA3, M32RBF_INSN_SRAI
45  , M32RBF_INSN_SRL, M32RBF_INSN_SRL3, M32RBF_INSN_SRLI, M32RBF_INSN_ST
46  , M32RBF_INSN_ST_D, M32RBF_INSN_STB, M32RBF_INSN_STB_D, M32RBF_INSN_STH
47  , M32RBF_INSN_STH_D, M32RBF_INSN_ST_PLUS, M32RBF_INSN_ST_MINUS, M32RBF_INSN_SUB
48  , M32RBF_INSN_SUBV, M32RBF_INSN_SUBX, M32RBF_INSN_TRAP, M32RBF_INSN_UNLOCK
49  , M32RBF_INSN_MAX
50 } M32RBF_INSN_TYPE;
51
52
53 // Forward decls.
54 struct m32rbf_cpu;
55 struct m32rbf_scache;
56 typedef sem_status (m32rbf_sem_fn) (m32rbf_cpu* cpu, m32rbf_scache* sem);
57
58
59 // Instruction descriptor.
60
61 struct m32rbf_idesc {
62
63   // scache engine executor for this insn
64   m32rbf_sem_fn* execute;
65
66   const char* insn_name;
67   enum m32rbf_insn_type sem_index;
68   m32r_insn_attr attrs;
69
70   // idesc table: indexed by sem_index
71   static m32rbf_idesc idesc_table[];
72
73   static m32rbf_insn_type lookup_virtual (virtual_insn_type vit);
74 };
75
76 // Instruction argument buffer.
77
78 union m32rbf_sem_fields {
79   struct { /* no operands */
80     int empty;
81   } fmt_empty;
82   struct { /*  */
83     UINT f_uimm4;
84   } sfmt_trap;
85   struct { /*  */
86     IADDR i_disp24;
87   } sfmt_bc24;
88   struct { /*  */
89     IADDR i_disp8;
90   } sfmt_bc8;
91   struct { /*  */
92     SI* i_dr;
93     UINT f_r1;
94     UINT f_uimm5;
95   } sfmt_slli;
96   struct { /*  */
97     SI* i_dr;
98     UINT f_hi16;
99     UINT f_r1;
100   } sfmt_seth;
101   struct { /*  */
102     ADDR i_uimm24;
103     SI* i_dr;
104     UINT f_r1;
105   } sfmt_ld24;
106   struct { /*  */
107     SI* i_dr;
108     INT f_simm8;
109     UINT f_r1;
110   } sfmt_addi;
111   struct { /*  */
112     SI* i_src1;
113     SI* i_src2;
114     INT f_simm16;
115     UINT f_r1;
116     UINT f_r2;
117   } sfmt_st_d;
118   struct { /*  */
119     IADDR i_disp16;
120     SI* i_src1;
121     SI* i_src2;
122     UINT f_r1;
123     UINT f_r2;
124   } sfmt_beq;
125   struct { /*  */
126     SI* i_dr;
127     SI* i_sr;
128     UINT f_r1;
129     UINT f_r2;
130     UINT f_uimm16;
131   } sfmt_and3;
132   struct { /*  */
133     SI* i_dr;
134     SI* i_sr;
135     INT f_simm16;
136     UINT f_r1;
137     UINT f_r2;
138   } sfmt_add3;
139   // This one is for chain/cti-chain virtual insns.
140   struct {
141     // Number of insns in pbb.
142     unsigned insn_count;
143     // This is used by chain insns and by untaken conditional branches.
144     m32rbf_scache* next;
145     m32rbf_scache* branch_target;
146   } chain;
147   // This one is for `before' virtual insns.
148   struct {
149     // The cache entry of the real insn.
150     m32rbf_scache* insn;
151   } before;
152 };
153
154 // Simulator instruction cache.
155
156 struct m32rbf_scache {
157   // executor
158   union {
159     cgoto_label cgoto;
160     m32rbf_sem_fn* fn;
161   } execute;
162
163   // PC of this instruction.
164   PCADDR addr;
165
166   // instruction class
167   m32rbf_idesc* idesc;
168
169   // argument buffer
170   m32rbf_sem_fields fields;
171
172   // writeback flags
173   // Only used if profiling or parallel execution support enabled during
174   // file generation.
175   unsigned written;
176
177   // decode given instruction
178   void decode (m32rbf_cpu* current_cpu, PCADDR pc, m32rbf_insn_word base_insn, m32rbf_insn_word entire_insn);
179 };
180
181 } // end m32rbf namespace
182
183 // Decls of each semantic fn.
184
185 using m32rbf::m32rbf_sem_fn;
186 extern m32rbf_sem_fn m32rbf_sem_x_invalid;
187 extern m32rbf_sem_fn m32rbf_sem_add;
188 extern m32rbf_sem_fn m32rbf_sem_add3;
189 extern m32rbf_sem_fn m32rbf_sem_and;
190 extern m32rbf_sem_fn m32rbf_sem_and3;
191 extern m32rbf_sem_fn m32rbf_sem_or;
192 extern m32rbf_sem_fn m32rbf_sem_or3;
193 extern m32rbf_sem_fn m32rbf_sem_xor;
194 extern m32rbf_sem_fn m32rbf_sem_xor3;
195 extern m32rbf_sem_fn m32rbf_sem_addi;
196 extern m32rbf_sem_fn m32rbf_sem_addv;
197 extern m32rbf_sem_fn m32rbf_sem_addv3;
198 extern m32rbf_sem_fn m32rbf_sem_addx;
199 extern m32rbf_sem_fn m32rbf_sem_bc8;
200 extern m32rbf_sem_fn m32rbf_sem_bc24;
201 extern m32rbf_sem_fn m32rbf_sem_beq;
202 extern m32rbf_sem_fn m32rbf_sem_beqz;
203 extern m32rbf_sem_fn m32rbf_sem_bgez;
204 extern m32rbf_sem_fn m32rbf_sem_bgtz;
205 extern m32rbf_sem_fn m32rbf_sem_blez;
206 extern m32rbf_sem_fn m32rbf_sem_bltz;
207 extern m32rbf_sem_fn m32rbf_sem_bnez;
208 extern m32rbf_sem_fn m32rbf_sem_bl8;
209 extern m32rbf_sem_fn m32rbf_sem_bl24;
210 extern m32rbf_sem_fn m32rbf_sem_bnc8;
211 extern m32rbf_sem_fn m32rbf_sem_bnc24;
212 extern m32rbf_sem_fn m32rbf_sem_bne;
213 extern m32rbf_sem_fn m32rbf_sem_bra8;
214 extern m32rbf_sem_fn m32rbf_sem_bra24;
215 extern m32rbf_sem_fn m32rbf_sem_cmp;
216 extern m32rbf_sem_fn m32rbf_sem_cmpi;
217 extern m32rbf_sem_fn m32rbf_sem_cmpu;
218 extern m32rbf_sem_fn m32rbf_sem_cmpui;
219 extern m32rbf_sem_fn m32rbf_sem_div;
220 extern m32rbf_sem_fn m32rbf_sem_divu;
221 extern m32rbf_sem_fn m32rbf_sem_rem;
222 extern m32rbf_sem_fn m32rbf_sem_remu;
223 extern m32rbf_sem_fn m32rbf_sem_jl;
224 extern m32rbf_sem_fn m32rbf_sem_jmp;
225 extern m32rbf_sem_fn m32rbf_sem_ld;
226 extern m32rbf_sem_fn m32rbf_sem_ld_d;
227 extern m32rbf_sem_fn m32rbf_sem_ldb;
228 extern m32rbf_sem_fn m32rbf_sem_ldb_d;
229 extern m32rbf_sem_fn m32rbf_sem_ldh;
230 extern m32rbf_sem_fn m32rbf_sem_ldh_d;
231 extern m32rbf_sem_fn m32rbf_sem_ldub;
232 extern m32rbf_sem_fn m32rbf_sem_ldub_d;
233 extern m32rbf_sem_fn m32rbf_sem_lduh;
234 extern m32rbf_sem_fn m32rbf_sem_lduh_d;
235 extern m32rbf_sem_fn m32rbf_sem_ld_plus;
236 extern m32rbf_sem_fn m32rbf_sem_ld24;
237 extern m32rbf_sem_fn m32rbf_sem_ldi8;
238 extern m32rbf_sem_fn m32rbf_sem_ldi16;
239 extern m32rbf_sem_fn m32rbf_sem_lock;
240 extern m32rbf_sem_fn m32rbf_sem_machi;
241 extern m32rbf_sem_fn m32rbf_sem_maclo;
242 extern m32rbf_sem_fn m32rbf_sem_macwhi;
243 extern m32rbf_sem_fn m32rbf_sem_macwlo;
244 extern m32rbf_sem_fn m32rbf_sem_mul;
245 extern m32rbf_sem_fn m32rbf_sem_mulhi;
246 extern m32rbf_sem_fn m32rbf_sem_mullo;
247 extern m32rbf_sem_fn m32rbf_sem_mulwhi;
248 extern m32rbf_sem_fn m32rbf_sem_mulwlo;
249 extern m32rbf_sem_fn m32rbf_sem_mv;
250 extern m32rbf_sem_fn m32rbf_sem_mvfachi;
251 extern m32rbf_sem_fn m32rbf_sem_mvfaclo;
252 extern m32rbf_sem_fn m32rbf_sem_mvfacmi;
253 extern m32rbf_sem_fn m32rbf_sem_mvfc;
254 extern m32rbf_sem_fn m32rbf_sem_mvtachi;
255 extern m32rbf_sem_fn m32rbf_sem_mvtaclo;
256 extern m32rbf_sem_fn m32rbf_sem_mvtc;
257 extern m32rbf_sem_fn m32rbf_sem_neg;
258 extern m32rbf_sem_fn m32rbf_sem_nop;
259 extern m32rbf_sem_fn m32rbf_sem_not;
260 extern m32rbf_sem_fn m32rbf_sem_rac;
261 extern m32rbf_sem_fn m32rbf_sem_rach;
262 extern m32rbf_sem_fn m32rbf_sem_rte;
263 extern m32rbf_sem_fn m32rbf_sem_seth;
264 extern m32rbf_sem_fn m32rbf_sem_sll;
265 extern m32rbf_sem_fn m32rbf_sem_sll3;
266 extern m32rbf_sem_fn m32rbf_sem_slli;
267 extern m32rbf_sem_fn m32rbf_sem_sra;
268 extern m32rbf_sem_fn m32rbf_sem_sra3;
269 extern m32rbf_sem_fn m32rbf_sem_srai;
270 extern m32rbf_sem_fn m32rbf_sem_srl;
271 extern m32rbf_sem_fn m32rbf_sem_srl3;
272 extern m32rbf_sem_fn m32rbf_sem_srli;
273 extern m32rbf_sem_fn m32rbf_sem_st;
274 extern m32rbf_sem_fn m32rbf_sem_st_d;
275 extern m32rbf_sem_fn m32rbf_sem_stb;
276 extern m32rbf_sem_fn m32rbf_sem_stb_d;
277 extern m32rbf_sem_fn m32rbf_sem_sth;
278 extern m32rbf_sem_fn m32rbf_sem_sth_d;
279 extern m32rbf_sem_fn m32rbf_sem_st_plus;
280 extern m32rbf_sem_fn m32rbf_sem_st_minus;
281 extern m32rbf_sem_fn m32rbf_sem_sub;
282 extern m32rbf_sem_fn m32rbf_sem_subv;
283 extern m32rbf_sem_fn m32rbf_sem_subx;
284 extern m32rbf_sem_fn m32rbf_sem_trap;
285 extern m32rbf_sem_fn m32rbf_sem_unlock;
286
287 #endif /* M32RBF_DECODE_H */