OSDN Git Service

Regenerate cgen files, update copyright year.
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / cgen-cpu / sh / sh2-decode.h
1 /* Decode header for sh2.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 2000-2010 Red Hat, Inc.
6
7 This file is part of the Red Hat simulators.
8
9
10 */
11
12 #ifndef SH2_DECODE_H
13 #define SH2_DECODE_H
14
15 namespace sh2 {
16 // forward declaration of struct in -defs.h
17 struct write_stacks;
18 }
19
20 namespace sh2 {
21
22 using namespace cgen;
23 using namespace sh;
24
25 typedef UINT sh2_insn_word;
26
27 /* Enum declaration for instructions in cpu family sh2.  */
28 typedef enum sh2_insn_type {
29   SH2_INSN_X_INVALID, SH2_INSN_ADD_COMPACT, SH2_INSN_ADDI_COMPACT, SH2_INSN_ADDC_COMPACT
30  , SH2_INSN_ADDV_COMPACT, SH2_INSN_AND_COMPACT, SH2_INSN_ANDI_COMPACT, SH2_INSN_ANDB_COMPACT
31  , SH2_INSN_BF_COMPACT, SH2_INSN_BFS_COMPACT, SH2_INSN_BRA_COMPACT, SH2_INSN_BRAF_COMPACT
32  , SH2_INSN_BSR_COMPACT, SH2_INSN_BSRF_COMPACT, SH2_INSN_BT_COMPACT, SH2_INSN_BTS_COMPACT
33  , SH2_INSN_CLRMAC_COMPACT, SH2_INSN_CLRT_COMPACT, SH2_INSN_CMPEQ_COMPACT, SH2_INSN_CMPEQI_COMPACT
34  , SH2_INSN_CMPGE_COMPACT, SH2_INSN_CMPGT_COMPACT, SH2_INSN_CMPHI_COMPACT, SH2_INSN_CMPHS_COMPACT
35  , SH2_INSN_CMPPL_COMPACT, SH2_INSN_CMPPZ_COMPACT, SH2_INSN_CMPSTR_COMPACT, SH2_INSN_DIV0S_COMPACT
36  , SH2_INSN_DIV0U_COMPACT, SH2_INSN_DIV1_COMPACT, SH2_INSN_DMULSL_COMPACT, SH2_INSN_DMULUL_COMPACT
37  , SH2_INSN_DT_COMPACT, SH2_INSN_EXTSB_COMPACT, SH2_INSN_EXTSW_COMPACT, SH2_INSN_EXTUB_COMPACT
38  , SH2_INSN_EXTUW_COMPACT, SH2_INSN_FRCHG_COMPACT, SH2_INSN_FSCHG_COMPACT, SH2_INSN_JMP_COMPACT
39  , SH2_INSN_JSR_COMPACT, SH2_INSN_LDC_GBR_COMPACT, SH2_INSN_LDC_VBR_COMPACT, SH2_INSN_LDC_SR_COMPACT
40  , SH2_INSN_LDCL_GBR_COMPACT, SH2_INSN_LDCL_VBR_COMPACT, SH2_INSN_LDS_MACH_COMPACT, SH2_INSN_LDSL_MACH_COMPACT
41  , SH2_INSN_LDS_MACL_COMPACT, SH2_INSN_LDSL_MACL_COMPACT, SH2_INSN_LDS_PR_COMPACT, SH2_INSN_LDSL_PR_COMPACT
42  , SH2_INSN_MACL_COMPACT, SH2_INSN_MACW_COMPACT, SH2_INSN_MOV_COMPACT, SH2_INSN_MOVI_COMPACT
43  , SH2_INSN_MOVB1_COMPACT, SH2_INSN_MOVB2_COMPACT, SH2_INSN_MOVB3_COMPACT, SH2_INSN_MOVB4_COMPACT
44  , SH2_INSN_MOVB5_COMPACT, SH2_INSN_MOVB6_COMPACT, SH2_INSN_MOVB7_COMPACT, SH2_INSN_MOVB8_COMPACT
45  , SH2_INSN_MOVB9_COMPACT, SH2_INSN_MOVB10_COMPACT, SH2_INSN_MOVL1_COMPACT, SH2_INSN_MOVL2_COMPACT
46  , SH2_INSN_MOVL3_COMPACT, SH2_INSN_MOVL4_COMPACT, SH2_INSN_MOVL5_COMPACT, SH2_INSN_MOVL6_COMPACT
47  , SH2_INSN_MOVL7_COMPACT, SH2_INSN_MOVL8_COMPACT, SH2_INSN_MOVL9_COMPACT, SH2_INSN_MOVL10_COMPACT
48  , SH2_INSN_MOVL11_COMPACT, SH2_INSN_MOVW1_COMPACT, SH2_INSN_MOVW2_COMPACT, SH2_INSN_MOVW3_COMPACT
49  , SH2_INSN_MOVW4_COMPACT, SH2_INSN_MOVW5_COMPACT, SH2_INSN_MOVW6_COMPACT, SH2_INSN_MOVW7_COMPACT
50  , SH2_INSN_MOVW8_COMPACT, SH2_INSN_MOVW9_COMPACT, SH2_INSN_MOVW10_COMPACT, SH2_INSN_MOVW11_COMPACT
51  , SH2_INSN_MOVA_COMPACT, SH2_INSN_MOVT_COMPACT, SH2_INSN_MULL_COMPACT, SH2_INSN_MULSW_COMPACT
52  , SH2_INSN_MULUW_COMPACT, SH2_INSN_NEG_COMPACT, SH2_INSN_NEGC_COMPACT, SH2_INSN_NOP_COMPACT
53  , SH2_INSN_NOT_COMPACT, SH2_INSN_OR_COMPACT, SH2_INSN_ORI_COMPACT, SH2_INSN_ORB_COMPACT
54  , SH2_INSN_ROTCL_COMPACT, SH2_INSN_ROTCR_COMPACT, SH2_INSN_ROTL_COMPACT, SH2_INSN_ROTR_COMPACT
55  , SH2_INSN_RTS_COMPACT, SH2_INSN_SETT_COMPACT, SH2_INSN_SHAL_COMPACT, SH2_INSN_SHAR_COMPACT
56  , SH2_INSN_SHLL_COMPACT, SH2_INSN_SHLL2_COMPACT, SH2_INSN_SHLL8_COMPACT, SH2_INSN_SHLL16_COMPACT
57  , SH2_INSN_SHLR_COMPACT, SH2_INSN_SHLR2_COMPACT, SH2_INSN_SHLR8_COMPACT, SH2_INSN_SHLR16_COMPACT
58  , SH2_INSN_STC_GBR_COMPACT, SH2_INSN_STC_VBR_COMPACT, SH2_INSN_STCL_GBR_COMPACT, SH2_INSN_STCL_VBR_COMPACT
59  , SH2_INSN_STS_MACH_COMPACT, SH2_INSN_STSL_MACH_COMPACT, SH2_INSN_STS_MACL_COMPACT, SH2_INSN_STSL_MACL_COMPACT
60  , SH2_INSN_STS_PR_COMPACT, SH2_INSN_STSL_PR_COMPACT, SH2_INSN_SUB_COMPACT, SH2_INSN_SUBC_COMPACT
61  , SH2_INSN_SUBV_COMPACT, SH2_INSN_SWAPB_COMPACT, SH2_INSN_SWAPW_COMPACT, SH2_INSN_TASB_COMPACT
62  , SH2_INSN_TRAPA_COMPACT, SH2_INSN_TST_COMPACT, SH2_INSN_TSTI_COMPACT, SH2_INSN_TSTB_COMPACT
63  , SH2_INSN_XOR_COMPACT, SH2_INSN_XORI_COMPACT, SH2_INSN_XORB_COMPACT, SH2_INSN_XTRCT_COMPACT
64 } SH2_INSN_TYPE;
65
66
67 // Forward decls.
68 struct sh2_cpu;
69 struct sh2_scache;
70 typedef void (sh2_sem_fn) (sh2_cpu* cpu, sh2_scache* sem, int tick, sh2::write_stacks &buf);
71
72
73 // Instruction descriptor.
74
75 struct sh2_idesc {
76
77   // scache engine executor for this insn
78   sh2_sem_fn* execute;
79
80   const char* insn_name;
81   enum sh2_insn_type sem_index;
82   sh_insn_attr attrs;
83
84   // idesc table: indexed by sem_index
85   static sh2_idesc idesc_table[];
86
87   static sh2_insn_type lookup_virtual (virtual_insn_type vit);
88 };
89
90 // Instruction argument buffer.
91
92 union sh2_sem_fields {
93   struct { /* no operands */
94     int empty;
95   } fmt_empty;
96   struct { /*  */
97     IADDR i_disp12;
98   } sfmt_bra_compact;
99   struct { /*  */
100     IADDR i_disp8;
101   } sfmt_bf_compact;
102   struct { /*  */
103     SI f_imm8x2;
104     unsigned char out_r0;
105   } sfmt_movw9_compact;
106   struct { /*  */
107     SI f_imm8x2;
108     unsigned char in_r0;
109   } sfmt_movw4_compact;
110   struct { /*  */
111     SI f_imm8x4;
112     unsigned char out_r0;
113   } sfmt_movl9_compact;
114   struct { /*  */
115     SI f_imm8x4;
116     unsigned char in_r0;
117   } sfmt_movl4_compact;
118   struct { /*  */
119     SI f_imm8x2;
120     UINT f_rn;
121     unsigned char out_rn;
122   } sfmt_movw10_compact;
123   struct { /*  */
124     SI f_imm8x4;
125     UINT f_rn;
126     unsigned char out_rn;
127   } sfmt_movl10_compact;
128   struct { /*  */
129     UINT f_imm8;
130     unsigned char in_r0;
131     unsigned char out_r0;
132   } sfmt_andi_compact;
133   struct { /*  */
134     SI f_imm4x2;
135     UINT f_rm;
136     unsigned char in_rm;
137     unsigned char out_r0;
138   } sfmt_movw11_compact;
139   struct { /*  */
140     SI f_imm4x2;
141     UINT f_rm;
142     unsigned char in_r0;
143     unsigned char in_rm;
144   } sfmt_movw5_compact;
145   struct { /*  */
146     UINT f_imm4;
147     UINT f_rm;
148     unsigned char in_rm;
149     unsigned char out_r0;
150   } sfmt_movb10_compact;
151   struct { /*  */
152     UINT f_imm4;
153     UINT f_rm;
154     unsigned char in_r0;
155     unsigned char in_rm;
156   } sfmt_movb5_compact;
157   struct { /*  */
158     UINT f_imm8;
159     UINT f_rn;
160     unsigned char in_rn;
161     unsigned char out_rn;
162   } sfmt_addi_compact;
163   struct { /*  */
164     SI f_imm4x4;
165     UINT f_rm;
166     UINT f_rn;
167     unsigned char in_rm;
168     unsigned char out_rn;
169   } sfmt_movl11_compact;
170   struct { /*  */
171     SI f_imm4x4;
172     UINT f_rm;
173     UINT f_rn;
174     unsigned char in_rm;
175     unsigned char in_rn;
176   } sfmt_movl5_compact;
177   struct { /*  */
178     UINT f_rm;
179     UINT f_rn;
180     unsigned char in_r0;
181     unsigned char in_rm;
182     unsigned char out_rn;
183   } sfmt_movb8_compact;
184   struct { /*  */
185     UINT f_rm;
186     UINT f_rn;
187     unsigned char in_r0;
188     unsigned char in_rm;
189     unsigned char in_rn;
190   } sfmt_movb3_compact;
191   struct { /*  */
192     UINT f_rm;
193     UINT f_rn;
194     unsigned char in_rm64;
195     unsigned char in_rn64;
196     unsigned char out_rn64;
197   } sfmt_and_compact;
198   struct { /*  */
199     UINT f_rm;
200     UINT f_rn;
201     unsigned char in_rm;
202     unsigned char in_rn;
203     unsigned char out_rm;
204     unsigned char out_rn;
205   } sfmt_macl_compact;
206   // This one is for chain/cti-chain virtual insns.
207   struct {
208     // Number of insns in pbb.
209     unsigned insn_count;
210     // This is used by chain insns and by untaken conditional branches.
211     sh2_scache* next;
212     sh2_scache* branch_target;
213   } chain;
214   // This one is for `before' virtual insns.
215   struct {
216     // The cache entry of the real insn.
217     sh2_scache* insn;
218   } before;
219 };
220
221 // Simulator instruction cache.
222
223 struct sh2_scache {
224   // executor
225   union {
226     cgoto_label cgoto;
227     sh2_sem_fn* fn;
228   } execute;
229
230   // PC of this instruction.
231   PCADDR addr;
232
233   // instruction class
234   sh2_idesc* idesc;
235
236   // argument buffer
237   sh2_sem_fields fields;
238
239
240   // writeback flags
241   // Only used if profiling or parallel execution support enabled during
242   // file generation.
243   unsigned long long written;
244
245
246   // decode given instruction
247   void decode (sh2_cpu* current_cpu, PCADDR pc, sh2_insn_word base_insn, sh2_insn_word entire_insn);
248 };
249
250 } // end sh2 namespace
251
252 // Decls of each semantic fn.
253
254 using sh2::sh2_sem_fn;
255 extern sh2_sem_fn sh2_sem_x_invalid;
256 extern sh2_sem_fn sh2_sem_add_compact;
257 extern sh2_sem_fn sh2_sem_addi_compact;
258 extern sh2_sem_fn sh2_sem_addc_compact;
259 extern sh2_sem_fn sh2_sem_addv_compact;
260 extern sh2_sem_fn sh2_sem_and_compact;
261 extern sh2_sem_fn sh2_sem_andi_compact;
262 extern sh2_sem_fn sh2_sem_andb_compact;
263 extern sh2_sem_fn sh2_sem_bf_compact;
264 extern sh2_sem_fn sh2_sem_bfs_compact;
265 extern sh2_sem_fn sh2_sem_bra_compact;
266 extern sh2_sem_fn sh2_sem_braf_compact;
267 extern sh2_sem_fn sh2_sem_bsr_compact;
268 extern sh2_sem_fn sh2_sem_bsrf_compact;
269 extern sh2_sem_fn sh2_sem_bt_compact;
270 extern sh2_sem_fn sh2_sem_bts_compact;
271 extern sh2_sem_fn sh2_sem_clrmac_compact;
272 extern sh2_sem_fn sh2_sem_clrt_compact;
273 extern sh2_sem_fn sh2_sem_cmpeq_compact;
274 extern sh2_sem_fn sh2_sem_cmpeqi_compact;
275 extern sh2_sem_fn sh2_sem_cmpge_compact;
276 extern sh2_sem_fn sh2_sem_cmpgt_compact;
277 extern sh2_sem_fn sh2_sem_cmphi_compact;
278 extern sh2_sem_fn sh2_sem_cmphs_compact;
279 extern sh2_sem_fn sh2_sem_cmppl_compact;
280 extern sh2_sem_fn sh2_sem_cmppz_compact;
281 extern sh2_sem_fn sh2_sem_cmpstr_compact;
282 extern sh2_sem_fn sh2_sem_div0s_compact;
283 extern sh2_sem_fn sh2_sem_div0u_compact;
284 extern sh2_sem_fn sh2_sem_div1_compact;
285 extern sh2_sem_fn sh2_sem_dmulsl_compact;
286 extern sh2_sem_fn sh2_sem_dmulul_compact;
287 extern sh2_sem_fn sh2_sem_dt_compact;
288 extern sh2_sem_fn sh2_sem_extsb_compact;
289 extern sh2_sem_fn sh2_sem_extsw_compact;
290 extern sh2_sem_fn sh2_sem_extub_compact;
291 extern sh2_sem_fn sh2_sem_extuw_compact;
292 extern sh2_sem_fn sh2_sem_frchg_compact;
293 extern sh2_sem_fn sh2_sem_fschg_compact;
294 extern sh2_sem_fn sh2_sem_jmp_compact;
295 extern sh2_sem_fn sh2_sem_jsr_compact;
296 extern sh2_sem_fn sh2_sem_ldc_gbr_compact;
297 extern sh2_sem_fn sh2_sem_ldc_vbr_compact;
298 extern sh2_sem_fn sh2_sem_ldc_sr_compact;
299 extern sh2_sem_fn sh2_sem_ldcl_gbr_compact;
300 extern sh2_sem_fn sh2_sem_ldcl_vbr_compact;
301 extern sh2_sem_fn sh2_sem_lds_mach_compact;
302 extern sh2_sem_fn sh2_sem_ldsl_mach_compact;
303 extern sh2_sem_fn sh2_sem_lds_macl_compact;
304 extern sh2_sem_fn sh2_sem_ldsl_macl_compact;
305 extern sh2_sem_fn sh2_sem_lds_pr_compact;
306 extern sh2_sem_fn sh2_sem_ldsl_pr_compact;
307 extern sh2_sem_fn sh2_sem_macl_compact;
308 extern sh2_sem_fn sh2_sem_macw_compact;
309 extern sh2_sem_fn sh2_sem_mov_compact;
310 extern sh2_sem_fn sh2_sem_movi_compact;
311 extern sh2_sem_fn sh2_sem_movb1_compact;
312 extern sh2_sem_fn sh2_sem_movb2_compact;
313 extern sh2_sem_fn sh2_sem_movb3_compact;
314 extern sh2_sem_fn sh2_sem_movb4_compact;
315 extern sh2_sem_fn sh2_sem_movb5_compact;
316 extern sh2_sem_fn sh2_sem_movb6_compact;
317 extern sh2_sem_fn sh2_sem_movb7_compact;
318 extern sh2_sem_fn sh2_sem_movb8_compact;
319 extern sh2_sem_fn sh2_sem_movb9_compact;
320 extern sh2_sem_fn sh2_sem_movb10_compact;
321 extern sh2_sem_fn sh2_sem_movl1_compact;
322 extern sh2_sem_fn sh2_sem_movl2_compact;
323 extern sh2_sem_fn sh2_sem_movl3_compact;
324 extern sh2_sem_fn sh2_sem_movl4_compact;
325 extern sh2_sem_fn sh2_sem_movl5_compact;
326 extern sh2_sem_fn sh2_sem_movl6_compact;
327 extern sh2_sem_fn sh2_sem_movl7_compact;
328 extern sh2_sem_fn sh2_sem_movl8_compact;
329 extern sh2_sem_fn sh2_sem_movl9_compact;
330 extern sh2_sem_fn sh2_sem_movl10_compact;
331 extern sh2_sem_fn sh2_sem_movl11_compact;
332 extern sh2_sem_fn sh2_sem_movw1_compact;
333 extern sh2_sem_fn sh2_sem_movw2_compact;
334 extern sh2_sem_fn sh2_sem_movw3_compact;
335 extern sh2_sem_fn sh2_sem_movw4_compact;
336 extern sh2_sem_fn sh2_sem_movw5_compact;
337 extern sh2_sem_fn sh2_sem_movw6_compact;
338 extern sh2_sem_fn sh2_sem_movw7_compact;
339 extern sh2_sem_fn sh2_sem_movw8_compact;
340 extern sh2_sem_fn sh2_sem_movw9_compact;
341 extern sh2_sem_fn sh2_sem_movw10_compact;
342 extern sh2_sem_fn sh2_sem_movw11_compact;
343 extern sh2_sem_fn sh2_sem_mova_compact;
344 extern sh2_sem_fn sh2_sem_movt_compact;
345 extern sh2_sem_fn sh2_sem_mull_compact;
346 extern sh2_sem_fn sh2_sem_mulsw_compact;
347 extern sh2_sem_fn sh2_sem_muluw_compact;
348 extern sh2_sem_fn sh2_sem_neg_compact;
349 extern sh2_sem_fn sh2_sem_negc_compact;
350 extern sh2_sem_fn sh2_sem_nop_compact;
351 extern sh2_sem_fn sh2_sem_not_compact;
352 extern sh2_sem_fn sh2_sem_or_compact;
353 extern sh2_sem_fn sh2_sem_ori_compact;
354 extern sh2_sem_fn sh2_sem_orb_compact;
355 extern sh2_sem_fn sh2_sem_rotcl_compact;
356 extern sh2_sem_fn sh2_sem_rotcr_compact;
357 extern sh2_sem_fn sh2_sem_rotl_compact;
358 extern sh2_sem_fn sh2_sem_rotr_compact;
359 extern sh2_sem_fn sh2_sem_rts_compact;
360 extern sh2_sem_fn sh2_sem_sett_compact;
361 extern sh2_sem_fn sh2_sem_shal_compact;
362 extern sh2_sem_fn sh2_sem_shar_compact;
363 extern sh2_sem_fn sh2_sem_shll_compact;
364 extern sh2_sem_fn sh2_sem_shll2_compact;
365 extern sh2_sem_fn sh2_sem_shll8_compact;
366 extern sh2_sem_fn sh2_sem_shll16_compact;
367 extern sh2_sem_fn sh2_sem_shlr_compact;
368 extern sh2_sem_fn sh2_sem_shlr2_compact;
369 extern sh2_sem_fn sh2_sem_shlr8_compact;
370 extern sh2_sem_fn sh2_sem_shlr16_compact;
371 extern sh2_sem_fn sh2_sem_stc_gbr_compact;
372 extern sh2_sem_fn sh2_sem_stc_vbr_compact;
373 extern sh2_sem_fn sh2_sem_stcl_gbr_compact;
374 extern sh2_sem_fn sh2_sem_stcl_vbr_compact;
375 extern sh2_sem_fn sh2_sem_sts_mach_compact;
376 extern sh2_sem_fn sh2_sem_stsl_mach_compact;
377 extern sh2_sem_fn sh2_sem_sts_macl_compact;
378 extern sh2_sem_fn sh2_sem_stsl_macl_compact;
379 extern sh2_sem_fn sh2_sem_sts_pr_compact;
380 extern sh2_sem_fn sh2_sem_stsl_pr_compact;
381 extern sh2_sem_fn sh2_sem_sub_compact;
382 extern sh2_sem_fn sh2_sem_subc_compact;
383 extern sh2_sem_fn sh2_sem_subv_compact;
384 extern sh2_sem_fn sh2_sem_swapb_compact;
385 extern sh2_sem_fn sh2_sem_swapw_compact;
386 extern sh2_sem_fn sh2_sem_tasb_compact;
387 extern sh2_sem_fn sh2_sem_trapa_compact;
388 extern sh2_sem_fn sh2_sem_tst_compact;
389 extern sh2_sem_fn sh2_sem_tsti_compact;
390 extern sh2_sem_fn sh2_sem_tstb_compact;
391 extern sh2_sem_fn sh2_sem_xor_compact;
392 extern sh2_sem_fn sh2_sem_xori_compact;
393 extern sh2_sem_fn sh2_sem_xorb_compact;
394 extern sh2_sem_fn sh2_sem_xtrct_compact;
395
396 #endif /* SH2_DECODE_H */