OSDN Git Service

eb2b6d2b3418268bc81f5a3f491db71bc10040b0
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / cgen-cpu / mep / mep-core1-decode.h
1 /* Decode header for mepcore1.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 2000-2009 Red Hat, Inc.
6
7 This file is part of the Red Hat simulators.
8
9
10 */
11
12 #ifndef MEPCORE1_DECODE_H
13 #define MEPCORE1_DECODE_H
14
15 namespace mep_ext1 {
16
17 using namespace cgen;
18 using namespace mep;
19
20 typedef UINT mepcore1_insn_word;
21
22 /* Enum declaration for instructions in cpu family mepcore1.  */
23 typedef enum mepcore1_insn_type {
24   MEPCORE1_INSN_X_INVALID, MEPCORE1_INSN_STCB_R, MEPCORE1_INSN_LDCB_R, MEPCORE1_INSN_PREF
25  , MEPCORE1_INSN_PREFD, MEPCORE1_INSN_CASB3, MEPCORE1_INSN_CASH3, MEPCORE1_INSN_CASW3
26  , MEPCORE1_INSN_SBCP, MEPCORE1_INSN_LBCP, MEPCORE1_INSN_LBUCP, MEPCORE1_INSN_SHCP
27  , MEPCORE1_INSN_LHCP, MEPCORE1_INSN_LHUCP, MEPCORE1_INSN_LBUCPA, MEPCORE1_INSN_LHUCPA
28  , MEPCORE1_INSN_LBUCPM0, MEPCORE1_INSN_LHUCPM0, MEPCORE1_INSN_LBUCPM1, MEPCORE1_INSN_LHUCPM1
29  , MEPCORE1_INSN_UCI, MEPCORE1_INSN_DSP, MEPCORE1_INSN_SB, MEPCORE1_INSN_SH
30  , MEPCORE1_INSN_SW, MEPCORE1_INSN_LB, MEPCORE1_INSN_LH, MEPCORE1_INSN_LW
31  , MEPCORE1_INSN_LBU, MEPCORE1_INSN_LHU, MEPCORE1_INSN_SW_SP, MEPCORE1_INSN_LW_SP
32  , MEPCORE1_INSN_SB_TP, MEPCORE1_INSN_SH_TP, MEPCORE1_INSN_SW_TP, MEPCORE1_INSN_LB_TP
33  , MEPCORE1_INSN_LH_TP, MEPCORE1_INSN_LW_TP, MEPCORE1_INSN_LBU_TP, MEPCORE1_INSN_LHU_TP
34  , MEPCORE1_INSN_SB16, MEPCORE1_INSN_SH16, MEPCORE1_INSN_SW16, MEPCORE1_INSN_LB16
35  , MEPCORE1_INSN_LH16, MEPCORE1_INSN_LW16, MEPCORE1_INSN_LBU16, MEPCORE1_INSN_LHU16
36  , MEPCORE1_INSN_SW24, MEPCORE1_INSN_LW24, MEPCORE1_INSN_EXTB, MEPCORE1_INSN_EXTH
37  , MEPCORE1_INSN_EXTUB, MEPCORE1_INSN_EXTUH, MEPCORE1_INSN_SSARB, MEPCORE1_INSN_MOV
38  , MEPCORE1_INSN_MOVI8, MEPCORE1_INSN_MOVI16, MEPCORE1_INSN_MOVU24, MEPCORE1_INSN_MOVU16
39  , MEPCORE1_INSN_MOVH, MEPCORE1_INSN_ADD3, MEPCORE1_INSN_ADD, MEPCORE1_INSN_ADD3I
40  , MEPCORE1_INSN_ADVCK3, MEPCORE1_INSN_SUB, MEPCORE1_INSN_SBVCK3, MEPCORE1_INSN_NEG
41  , MEPCORE1_INSN_SLT3, MEPCORE1_INSN_SLTU3, MEPCORE1_INSN_SLT3I, MEPCORE1_INSN_SLTU3I
42  , MEPCORE1_INSN_SL1AD3, MEPCORE1_INSN_SL2AD3, MEPCORE1_INSN_ADD3X, MEPCORE1_INSN_SLT3X
43  , MEPCORE1_INSN_SLTU3X, MEPCORE1_INSN_OR, MEPCORE1_INSN_AND, MEPCORE1_INSN_XOR
44  , MEPCORE1_INSN_NOR, MEPCORE1_INSN_OR3, MEPCORE1_INSN_AND3, MEPCORE1_INSN_XOR3
45  , MEPCORE1_INSN_SRA, MEPCORE1_INSN_SRL, MEPCORE1_INSN_SLL, MEPCORE1_INSN_SRAI
46  , MEPCORE1_INSN_SRLI, MEPCORE1_INSN_SLLI, MEPCORE1_INSN_SLL3, MEPCORE1_INSN_FSFT
47  , MEPCORE1_INSN_BRA, MEPCORE1_INSN_BEQZ, MEPCORE1_INSN_BNEZ, MEPCORE1_INSN_BEQI
48  , MEPCORE1_INSN_BNEI, MEPCORE1_INSN_BLTI, MEPCORE1_INSN_BGEI, MEPCORE1_INSN_BEQ
49  , MEPCORE1_INSN_BNE, MEPCORE1_INSN_BSR12, MEPCORE1_INSN_BSR24, MEPCORE1_INSN_JMP
50  , MEPCORE1_INSN_JMP24, MEPCORE1_INSN_JSR, MEPCORE1_INSN_RET, MEPCORE1_INSN_REPEAT
51  , MEPCORE1_INSN_EREPEAT, MEPCORE1_INSN_STC_LP, MEPCORE1_INSN_STC_HI, MEPCORE1_INSN_STC_LO
52  , MEPCORE1_INSN_STC, MEPCORE1_INSN_LDC_LP, MEPCORE1_INSN_LDC_HI, MEPCORE1_INSN_LDC_LO
53  , MEPCORE1_INSN_LDC, MEPCORE1_INSN_DI, MEPCORE1_INSN_EI, MEPCORE1_INSN_RETI
54  , MEPCORE1_INSN_HALT, MEPCORE1_INSN_SLEEP, MEPCORE1_INSN_SWI, MEPCORE1_INSN_BREAK
55  , MEPCORE1_INSN_SYNCM, MEPCORE1_INSN_STCB, MEPCORE1_INSN_LDCB, MEPCORE1_INSN_BSETM
56  , MEPCORE1_INSN_BCLRM, MEPCORE1_INSN_BNOTM, MEPCORE1_INSN_BTSTM, MEPCORE1_INSN_TAS
57  , MEPCORE1_INSN_CACHE, MEPCORE1_INSN_MUL, MEPCORE1_INSN_MULU, MEPCORE1_INSN_MULR
58  , MEPCORE1_INSN_MULRU, MEPCORE1_INSN_MADD, MEPCORE1_INSN_MADDU, MEPCORE1_INSN_MADDR
59  , MEPCORE1_INSN_MADDRU, MEPCORE1_INSN_DIV, MEPCORE1_INSN_DIVU, MEPCORE1_INSN_DRET
60  , MEPCORE1_INSN_DBREAK, MEPCORE1_INSN_LDZ, MEPCORE1_INSN_ABS, MEPCORE1_INSN_AVE
61  , MEPCORE1_INSN_MIN, MEPCORE1_INSN_MAX, MEPCORE1_INSN_MINU, MEPCORE1_INSN_MAXU
62  , MEPCORE1_INSN_CLIP, MEPCORE1_INSN_CLIPU, MEPCORE1_INSN_SADD, MEPCORE1_INSN_SSUB
63  , MEPCORE1_INSN_SADDU, MEPCORE1_INSN_SSUBU, MEPCORE1_INSN_SWCP, MEPCORE1_INSN_LWCP
64  , MEPCORE1_INSN_SMCP, MEPCORE1_INSN_LMCP, MEPCORE1_INSN_SWCPI, MEPCORE1_INSN_LWCPI
65  , MEPCORE1_INSN_SMCPI, MEPCORE1_INSN_LMCPI, MEPCORE1_INSN_SWCP16, MEPCORE1_INSN_LWCP16
66  , MEPCORE1_INSN_SMCP16, MEPCORE1_INSN_LMCP16, MEPCORE1_INSN_SBCPA, MEPCORE1_INSN_LBCPA
67  , MEPCORE1_INSN_SHCPA, MEPCORE1_INSN_LHCPA, MEPCORE1_INSN_SWCPA, MEPCORE1_INSN_LWCPA
68  , MEPCORE1_INSN_SMCPA, MEPCORE1_INSN_LMCPA, MEPCORE1_INSN_SBCPM0, MEPCORE1_INSN_LBCPM0
69  , MEPCORE1_INSN_SHCPM0, MEPCORE1_INSN_LHCPM0, MEPCORE1_INSN_SWCPM0, MEPCORE1_INSN_LWCPM0
70  , MEPCORE1_INSN_SMCPM0, MEPCORE1_INSN_LMCPM0, MEPCORE1_INSN_SBCPM1, MEPCORE1_INSN_LBCPM1
71  , MEPCORE1_INSN_SHCPM1, MEPCORE1_INSN_LHCPM1, MEPCORE1_INSN_SWCPM1, MEPCORE1_INSN_LWCPM1
72  , MEPCORE1_INSN_SMCPM1, MEPCORE1_INSN_LMCPM1, MEPCORE1_INSN_BCPEQ, MEPCORE1_INSN_BCPNE
73  , MEPCORE1_INSN_BCPAT, MEPCORE1_INSN_BCPAF, MEPCORE1_INSN_SYNCCP, MEPCORE1_INSN_JSRV
74  , MEPCORE1_INSN_BSRV, MEPCORE1_INSN_SIM_SYSCALL, MEPCORE1_INSN_RI_0, MEPCORE1_INSN_RI_1
75  , MEPCORE1_INSN_RI_2, MEPCORE1_INSN_RI_3, MEPCORE1_INSN_RI_4, MEPCORE1_INSN_RI_5
76  , MEPCORE1_INSN_RI_6, MEPCORE1_INSN_RI_7, MEPCORE1_INSN_RI_8, MEPCORE1_INSN_RI_9
77  , MEPCORE1_INSN_RI_10, MEPCORE1_INSN_RI_11, MEPCORE1_INSN_RI_12, MEPCORE1_INSN_RI_13
78  , MEPCORE1_INSN_RI_14, MEPCORE1_INSN_RI_15, MEPCORE1_INSN_RI_17, MEPCORE1_INSN_RI_20
79  , MEPCORE1_INSN_RI_21, MEPCORE1_INSN_RI_22, MEPCORE1_INSN_RI_23, MEPCORE1_INSN_RI_26
80 } MEPCORE1_INSN_TYPE;
81
82
83 // Forward decls.
84 struct mep_ext1_cpu;
85 struct mepcore1_scache;
86 typedef sem_status (mepcore1_sem_fn) (mep_ext1_cpu* cpu, mepcore1_scache* sem);
87
88
89 // Instruction descriptor.
90
91 struct mepcore1_idesc {
92
93   // scache engine executor for this insn
94   mepcore1_sem_fn* execute;
95
96   const char* insn_name;
97   enum mepcore1_insn_type sem_index;
98   mep_insn_attr attrs;
99
100   // idesc table: indexed by sem_index
101   static mepcore1_idesc idesc_table[];
102
103   static mepcore1_insn_type lookup_virtual (virtual_insn_type vit);
104 };
105
106 // Instruction argument buffer.
107
108 union mepcore1_sem_fields {
109   struct { /* no operands */
110     int empty;
111   } fmt_empty;
112   struct { /*  */
113     UINT f_callnum;
114   } sfmt_sim_syscall;
115   struct { /*  */
116     unsigned char in_psw;
117     unsigned char out_psw;
118   } sfmt_di;
119   struct { /*  */
120     unsigned char in_dbg;
121     unsigned char in_depc;
122     unsigned char out_dbg;
123   } sfmt_dret;
124   struct { /*  */
125     UINT f_2u10;
126     unsigned char in_exc;
127     unsigned char out_exc;
128   } sfmt_swi;
129   struct { /*  */
130     unsigned char in_lp;
131     unsigned char in_opt;
132     unsigned char in_psw;
133   } sfmt_ret;
134   struct { /*  */
135     UINT f_24u5a2n;
136     unsigned char in_opt;
137     unsigned char in_psw;
138   } sfmt_jmp24;
139   struct { /*  */
140     unsigned char in_epc;
141     unsigned char in_npc;
142     unsigned char in_opt;
143     unsigned char in_psw;
144   } sfmt_reti;
145   struct { /*  */
146     SI* i_rn;
147     UINT f_rn;
148     unsigned char in_lp;
149     unsigned char out_rn;
150   } sfmt_ldc_lp;
151   struct { /*  */
152     SI* i_rn;
153     UINT f_rn;
154     unsigned char in_rn;
155     unsigned char out_lp;
156   } sfmt_stc_lp;
157   struct { /*  */
158     INT f_24s5a2n;
159     unsigned char in_opt;
160     unsigned char in_psw;
161     unsigned char out_lp;
162   } sfmt_bsr24;
163   struct { /*  */
164     SI f_12s4a2;
165     unsigned char in_opt;
166     unsigned char in_psw;
167     unsigned char out_lp;
168   } sfmt_bsr12;
169   struct { /*  */
170     SI* i_rn3;
171     UINT f_24u8n;
172     UINT f_rn3;
173     unsigned char out_rn3;
174   } sfmt_movu24;
175   struct { /*  */
176     SI* i_rn;
177     INT f_8s8;
178     UINT f_rn;
179     unsigned char out_rn;
180   } sfmt_movi8;
181   struct { /*  */
182     SI* i_rnl;
183     UINT f_24u8a4n;
184     UINT f_rn;
185     unsigned char out_rnl;
186   } sfmt_lw24;
187   struct { /*  */
188     SI* i_rnl;
189     UINT f_24u8a4n;
190     UINT f_rn;
191     unsigned char in_rnl;
192   } sfmt_sw24;
193   struct { /*  */
194     SI* i_rma;
195     INT f_16s16;
196     UINT f_crn;
197     UINT f_rm;
198     unsigned char in_rma;
199   } sfmt_swcp16;
200   struct { /*  */
201     SI* i_rn;
202     UINT f_5u24;
203     UINT f_rn;
204     unsigned char in_rn;
205     unsigned char out_rn;
206   } sfmt_clip;
207   struct { /*  */
208     SI* i_rma;
209     UINT f_3u5;
210     UINT f_rm;
211     unsigned char in_rma;
212     unsigned char out_r0;
213   } sfmt_btstm;
214   struct { /*  */
215     SI* i_rn;
216     UINT f_csrn;
217     UINT f_rn;
218     unsigned char in_rn;
219     unsigned char out_csrn;
220   } sfmt_stc;
221   struct { /*  */
222     SI* i_rn;
223     UINT f_5u8;
224     UINT f_rn;
225     unsigned char in_rn;
226     unsigned char out_rn;
227   } sfmt_srai;
228   struct { /*  */
229     SI* i_rn;
230     UINT f_5u8;
231     UINT f_rn;
232     unsigned char in_rn;
233     unsigned char out_r0;
234   } sfmt_slt3i;
235   struct { /*  */
236     SI* i_rn;
237     SI f_7u9a4;
238     UINT f_rn;
239     unsigned char in_sp;
240     unsigned char out_rn;
241   } sfmt_add3i;
242   struct { /*  */
243     SI* i_rn;
244     INT f_6s8;
245     UINT f_rn;
246     unsigned char in_rn;
247     unsigned char out_rn;
248   } sfmt_add;
249   struct { /*  */
250     SI* i_rm;
251     UINT f_2u6;
252     UINT f_rm;
253     unsigned char in_rm;
254     unsigned char out_sar;
255   } sfmt_ssarb;
256   struct { /*  */
257     SI* i_rn3us;
258     SI f_7u9a2;
259     UINT f_rn3;
260     unsigned char in_tp;
261     unsigned char out_rn3us;
262   } sfmt_lhu_tp;
263   struct { /*  */
264     SI* i_rn3uc;
265     UINT f_7u9;
266     UINT f_rn3;
267     unsigned char in_tp;
268     unsigned char out_rn3uc;
269   } sfmt_lbu_tp;
270   struct { /*  */
271     SI* i_rn3l;
272     SI f_7u9a4;
273     UINT f_rn3;
274     unsigned char in_tp;
275     unsigned char out_rn3l;
276   } sfmt_lw_tp;
277   struct { /*  */
278     SI* i_rn3s;
279     SI f_7u9a2;
280     UINT f_rn3;
281     unsigned char in_tp;
282     unsigned char out_rn3s;
283   } sfmt_lh_tp;
284   struct { /*  */
285     SI* i_rn3c;
286     UINT f_7u9;
287     UINT f_rn3;
288     unsigned char in_tp;
289     unsigned char out_rn3c;
290   } sfmt_lb_tp;
291   struct { /*  */
292     SI* i_rn3l;
293     SI f_7u9a4;
294     UINT f_rn3;
295     unsigned char in_rn3l;
296     unsigned char in_tp;
297   } sfmt_sw_tp;
298   struct { /*  */
299     SI* i_rn3s;
300     SI f_7u9a2;
301     UINT f_rn3;
302     unsigned char in_rn3s;
303     unsigned char in_tp;
304   } sfmt_sh_tp;
305   struct { /*  */
306     SI* i_rn3c;
307     UINT f_7u9;
308     UINT f_rn3;
309     unsigned char in_rn3c;
310     unsigned char in_tp;
311   } sfmt_sb_tp;
312   struct { /*  */
313     SI* i_rnl;
314     SI f_7u9a4;
315     UINT f_rn;
316     unsigned char in_sp;
317     unsigned char out_rnl;
318   } sfmt_lw_sp;
319   struct { /*  */
320     SI* i_rnl;
321     SI f_7u9a4;
322     UINT f_rn;
323     unsigned char in_rnl;
324     unsigned char in_sp;
325   } sfmt_sw_sp;
326   struct { /*  */
327     SI* i_rma;
328     INT f_12s20;
329     UINT f_crn;
330     UINT f_rm;
331     unsigned char in_rma;
332   } sfmt_sbcp;
333   struct { /*  */
334     SI* i_rm;
335     UINT f_rm;
336     unsigned char in_opt;
337     unsigned char in_psw;
338     unsigned char in_rm;
339     unsigned char out_lp;
340   } sfmt_jsr;
341   struct { /*  */
342     SI* i_rn;
343     SI f_8s8a2;
344     UINT f_rn;
345     unsigned char in_opt;
346     unsigned char in_psw;
347     unsigned char in_rn;
348   } sfmt_beqz;
349   struct { /*  */
350     SI* i_rma;
351     SI* i_rn;
352     UINT f_rm;
353     UINT f_rn;
354     unsigned char in_rma;
355     unsigned char out_rn;
356   } sfmt_ldcb_r;
357   struct { /*  */
358     SI* i_rma;
359     SI* i_rn;
360     UINT f_rm;
361     UINT f_rn;
362     unsigned char in_rma;
363     unsigned char in_rn;
364   } sfmt_stcb_r;
365   struct { /*  */
366     SI* i_rn;
367     UINT f_csrn;
368     UINT f_rn;
369     unsigned char in_csrn;
370     unsigned char in_opt;
371     unsigned char in_psw;
372     unsigned char out_rn;
373   } sfmt_ldc;
374   struct { /*  */
375     SI* i_rn;
376     SI f_17s16a2;
377     UINT f_4u8;
378     UINT f_rn;
379     unsigned char in_opt;
380     unsigned char in_psw;
381     unsigned char in_rn;
382   } sfmt_beqi;
383   struct { /*  */
384     SI* i_rm;
385     SI* i_rn;
386     INT f_16s16;
387     UINT f_rm;
388     UINT f_rn;
389     unsigned char in_rm;
390     unsigned char out_rn;
391   } sfmt_add3x;
392   struct { /*  */
393     SI* i_rm;
394     SI* i_rn;
395     UINT f_rm;
396     UINT f_rn;
397     unsigned char in_rm;
398     unsigned char in_rn;
399     unsigned char out_r0;
400   } sfmt_advck3;
401   struct { /*  */
402     SI* i_rma;
403     SI* i_rnus;
404     INT f_16s16;
405     UINT f_rm;
406     UINT f_rn;
407     unsigned char in_rma;
408     unsigned char out_rnus;
409   } sfmt_lhu16;
410   struct { /*  */
411     SI* i_rma;
412     SI* i_rnuc;
413     INT f_16s16;
414     UINT f_rm;
415     UINT f_rn;
416     unsigned char in_rma;
417     unsigned char out_rnuc;
418   } sfmt_lbu16;
419   struct { /*  */
420     SI* i_rma;
421     SI* i_rnl;
422     INT f_16s16;
423     UINT f_rm;
424     UINT f_rn;
425     unsigned char in_rma;
426     unsigned char out_rnl;
427   } sfmt_lw16;
428   struct { /*  */
429     SI* i_rma;
430     SI* i_rns;
431     INT f_16s16;
432     UINT f_rm;
433     UINT f_rn;
434     unsigned char in_rma;
435     unsigned char out_rns;
436   } sfmt_lh16;
437   struct { /*  */
438     SI* i_rma;
439     SI* i_rnc;
440     INT f_16s16;
441     UINT f_rm;
442     UINT f_rn;
443     unsigned char in_rma;
444     unsigned char out_rnc;
445   } sfmt_lb16;
446   struct { /*  */
447     SI* i_rma;
448     SI* i_rnl;
449     INT f_16s16;
450     UINT f_rm;
451     UINT f_rn;
452     unsigned char in_rma;
453     unsigned char in_rnl;
454   } sfmt_sw16;
455   struct { /*  */
456     SI* i_rma;
457     SI* i_rns;
458     INT f_16s16;
459     UINT f_rm;
460     UINT f_rn;
461     unsigned char in_rma;
462     unsigned char in_rns;
463   } sfmt_sh16;
464   struct { /*  */
465     SI* i_rma;
466     SI* i_rnc;
467     INT f_16s16;
468     UINT f_rm;
469     UINT f_rn;
470     unsigned char in_rma;
471     unsigned char in_rnc;
472   } sfmt_sb16;
473   struct { /*  */
474     SI* i_rm;
475     SI* i_rn;
476     UINT f_rm;
477     UINT f_rn;
478     unsigned char in_rm;
479     unsigned char in_rn;
480     unsigned char in_sar;
481     unsigned char out_rn;
482   } sfmt_fsft;
483   struct { /*  */
484     SI* i_rm;
485     SI* i_rn;
486     UINT f_16u16;
487     UINT f_rm;
488     UINT f_rn;
489     unsigned char in_rm;
490     unsigned char in_rn;
491     unsigned char out_rn;
492   } sfmt_uci;
493   struct { /*  */
494     SI* i_rma;
495     SI f_cdisp10;
496     UINT f_crn;
497     UINT f_rm;
498     unsigned char in_mb1;
499     unsigned char in_me1;
500     unsigned char in_rma;
501     unsigned char out_rma;
502   } sfmt_lbucpm1;
503   struct { /*  */
504     SI* i_rma;
505     SI f_cdisp10;
506     UINT f_crn;
507     UINT f_rm;
508     unsigned char in_mb0;
509     unsigned char in_me0;
510     unsigned char in_rma;
511     unsigned char out_rma;
512   } sfmt_lbucpm0;
513   struct { /*  */
514     SI* i_rn;
515     SI f_17s16a2;
516     UINT f_rn;
517     unsigned char in_opt;
518     unsigned char in_psw;
519     unsigned char in_rn;
520     unsigned char out_h_csr_SI_4;
521     unsigned char out_h_csr_SI_5;
522     unsigned char out_h_csr_SI_6;
523   } sfmt_repeat;
524   struct { /*  */
525     SI* i_rm;
526     SI* i_rn;
527     SI f_17s16a2;
528     UINT f_rm;
529     UINT f_rn;
530     unsigned char in_opt;
531     unsigned char in_psw;
532     unsigned char in_rm;
533     unsigned char in_rn;
534   } sfmt_beq;
535   struct { /*  */
536     SI* i_rl;
537     SI* i_rm;
538     SI* i_rn;
539     UINT f_rl;
540     UINT f_rm;
541     UINT f_rn;
542     unsigned char in_rm;
543     unsigned char in_rn;
544     unsigned char out_rl;
545   } sfmt_add3;
546   struct { /*  */
547     SI* i_rl5;
548     SI* i_rm;
549     SI* i_rn;
550     UINT f_rl5;
551     UINT f_rm;
552     UINT f_rn;
553     unsigned char in_rl5;
554     unsigned char in_rm;
555     unsigned char in_rn;
556     unsigned char out_rl5;
557   } sfmt_casb3;
558   struct { /*  */
559     SI* i_rm;
560     SI* i_rn;
561     UINT f_rm;
562     UINT f_rn;
563     unsigned char in_hi;
564     unsigned char in_lo;
565     unsigned char in_rm;
566     unsigned char in_rn;
567     unsigned char out_hi;
568     unsigned char out_lo;
569     unsigned char out_rn;
570   } sfmt_maddr;
571   // This one is for chain/cti-chain virtual insns.
572   struct {
573     // Number of insns in pbb.
574     unsigned insn_count;
575     // This is used by chain insns and by untaken conditional branches.
576     mepcore1_scache* next;
577     mepcore1_scache* branch_target;
578   } chain;
579   // This one is for `before' virtual insns.
580   struct {
581     // The cache entry of the real insn.
582     mepcore1_scache* insn;
583   } before;
584 };
585
586 // Simulator instruction cache.
587
588 struct mepcore1_scache {
589   // executor
590   union {
591     cgoto_label cgoto;
592     mepcore1_sem_fn* fn;
593   } execute;
594
595   // PC of this instruction.
596   PCADDR addr;
597
598   // instruction class
599   mepcore1_idesc* idesc;
600
601   // argument buffer
602   mepcore1_sem_fields fields;
603
604
605   // writeback flags
606   // Only used if profiling or parallel execution support enabled during
607   // file generation.
608   unsigned long long written;
609
610
611   // decode given instruction
612   void decode (mep_ext1_cpu* current_cpu, PCADDR pc, mepcore1_insn_word base_insn, mepcore1_insn_word entire_insn);
613 };
614
615 } // end mep_ext1 namespace
616
617 // Decls of each semantic fn.
618
619 using mep_ext1::mepcore1_sem_fn;
620 extern mepcore1_sem_fn mepcore1_sem_x_invalid;
621 extern mepcore1_sem_fn mepcore1_sem_stcb_r;
622 extern mepcore1_sem_fn mepcore1_sem_ldcb_r;
623 extern mepcore1_sem_fn mepcore1_sem_pref;
624 extern mepcore1_sem_fn mepcore1_sem_prefd;
625 extern mepcore1_sem_fn mepcore1_sem_casb3;
626 extern mepcore1_sem_fn mepcore1_sem_cash3;
627 extern mepcore1_sem_fn mepcore1_sem_casw3;
628 extern mepcore1_sem_fn mepcore1_sem_sbcp;
629 extern mepcore1_sem_fn mepcore1_sem_lbcp;
630 extern mepcore1_sem_fn mepcore1_sem_lbucp;
631 extern mepcore1_sem_fn mepcore1_sem_shcp;
632 extern mepcore1_sem_fn mepcore1_sem_lhcp;
633 extern mepcore1_sem_fn mepcore1_sem_lhucp;
634 extern mepcore1_sem_fn mepcore1_sem_lbucpa;
635 extern mepcore1_sem_fn mepcore1_sem_lhucpa;
636 extern mepcore1_sem_fn mepcore1_sem_lbucpm0;
637 extern mepcore1_sem_fn mepcore1_sem_lhucpm0;
638 extern mepcore1_sem_fn mepcore1_sem_lbucpm1;
639 extern mepcore1_sem_fn mepcore1_sem_lhucpm1;
640 extern mepcore1_sem_fn mepcore1_sem_uci;
641 extern mepcore1_sem_fn mepcore1_sem_dsp;
642 extern mepcore1_sem_fn mepcore1_sem_sb;
643 extern mepcore1_sem_fn mepcore1_sem_sh;
644 extern mepcore1_sem_fn mepcore1_sem_sw;
645 extern mepcore1_sem_fn mepcore1_sem_lb;
646 extern mepcore1_sem_fn mepcore1_sem_lh;
647 extern mepcore1_sem_fn mepcore1_sem_lw;
648 extern mepcore1_sem_fn mepcore1_sem_lbu;
649 extern mepcore1_sem_fn mepcore1_sem_lhu;
650 extern mepcore1_sem_fn mepcore1_sem_sw_sp;
651 extern mepcore1_sem_fn mepcore1_sem_lw_sp;
652 extern mepcore1_sem_fn mepcore1_sem_sb_tp;
653 extern mepcore1_sem_fn mepcore1_sem_sh_tp;
654 extern mepcore1_sem_fn mepcore1_sem_sw_tp;
655 extern mepcore1_sem_fn mepcore1_sem_lb_tp;
656 extern mepcore1_sem_fn mepcore1_sem_lh_tp;
657 extern mepcore1_sem_fn mepcore1_sem_lw_tp;
658 extern mepcore1_sem_fn mepcore1_sem_lbu_tp;
659 extern mepcore1_sem_fn mepcore1_sem_lhu_tp;
660 extern mepcore1_sem_fn mepcore1_sem_sb16;
661 extern mepcore1_sem_fn mepcore1_sem_sh16;
662 extern mepcore1_sem_fn mepcore1_sem_sw16;
663 extern mepcore1_sem_fn mepcore1_sem_lb16;
664 extern mepcore1_sem_fn mepcore1_sem_lh16;
665 extern mepcore1_sem_fn mepcore1_sem_lw16;
666 extern mepcore1_sem_fn mepcore1_sem_lbu16;
667 extern mepcore1_sem_fn mepcore1_sem_lhu16;
668 extern mepcore1_sem_fn mepcore1_sem_sw24;
669 extern mepcore1_sem_fn mepcore1_sem_lw24;
670 extern mepcore1_sem_fn mepcore1_sem_extb;
671 extern mepcore1_sem_fn mepcore1_sem_exth;
672 extern mepcore1_sem_fn mepcore1_sem_extub;
673 extern mepcore1_sem_fn mepcore1_sem_extuh;
674 extern mepcore1_sem_fn mepcore1_sem_ssarb;
675 extern mepcore1_sem_fn mepcore1_sem_mov;
676 extern mepcore1_sem_fn mepcore1_sem_movi8;
677 extern mepcore1_sem_fn mepcore1_sem_movi16;
678 extern mepcore1_sem_fn mepcore1_sem_movu24;
679 extern mepcore1_sem_fn mepcore1_sem_movu16;
680 extern mepcore1_sem_fn mepcore1_sem_movh;
681 extern mepcore1_sem_fn mepcore1_sem_add3;
682 extern mepcore1_sem_fn mepcore1_sem_add;
683 extern mepcore1_sem_fn mepcore1_sem_add3i;
684 extern mepcore1_sem_fn mepcore1_sem_advck3;
685 extern mepcore1_sem_fn mepcore1_sem_sub;
686 extern mepcore1_sem_fn mepcore1_sem_sbvck3;
687 extern mepcore1_sem_fn mepcore1_sem_neg;
688 extern mepcore1_sem_fn mepcore1_sem_slt3;
689 extern mepcore1_sem_fn mepcore1_sem_sltu3;
690 extern mepcore1_sem_fn mepcore1_sem_slt3i;
691 extern mepcore1_sem_fn mepcore1_sem_sltu3i;
692 extern mepcore1_sem_fn mepcore1_sem_sl1ad3;
693 extern mepcore1_sem_fn mepcore1_sem_sl2ad3;
694 extern mepcore1_sem_fn mepcore1_sem_add3x;
695 extern mepcore1_sem_fn mepcore1_sem_slt3x;
696 extern mepcore1_sem_fn mepcore1_sem_sltu3x;
697 extern mepcore1_sem_fn mepcore1_sem_or;
698 extern mepcore1_sem_fn mepcore1_sem_and;
699 extern mepcore1_sem_fn mepcore1_sem_xor;
700 extern mepcore1_sem_fn mepcore1_sem_nor;
701 extern mepcore1_sem_fn mepcore1_sem_or3;
702 extern mepcore1_sem_fn mepcore1_sem_and3;
703 extern mepcore1_sem_fn mepcore1_sem_xor3;
704 extern mepcore1_sem_fn mepcore1_sem_sra;
705 extern mepcore1_sem_fn mepcore1_sem_srl;
706 extern mepcore1_sem_fn mepcore1_sem_sll;
707 extern mepcore1_sem_fn mepcore1_sem_srai;
708 extern mepcore1_sem_fn mepcore1_sem_srli;
709 extern mepcore1_sem_fn mepcore1_sem_slli;
710 extern mepcore1_sem_fn mepcore1_sem_sll3;
711 extern mepcore1_sem_fn mepcore1_sem_fsft;
712 extern mepcore1_sem_fn mepcore1_sem_bra;
713 extern mepcore1_sem_fn mepcore1_sem_beqz;
714 extern mepcore1_sem_fn mepcore1_sem_bnez;
715 extern mepcore1_sem_fn mepcore1_sem_beqi;
716 extern mepcore1_sem_fn mepcore1_sem_bnei;
717 extern mepcore1_sem_fn mepcore1_sem_blti;
718 extern mepcore1_sem_fn mepcore1_sem_bgei;
719 extern mepcore1_sem_fn mepcore1_sem_beq;
720 extern mepcore1_sem_fn mepcore1_sem_bne;
721 extern mepcore1_sem_fn mepcore1_sem_bsr12;
722 extern mepcore1_sem_fn mepcore1_sem_bsr24;
723 extern mepcore1_sem_fn mepcore1_sem_jmp;
724 extern mepcore1_sem_fn mepcore1_sem_jmp24;
725 extern mepcore1_sem_fn mepcore1_sem_jsr;
726 extern mepcore1_sem_fn mepcore1_sem_ret;
727 extern mepcore1_sem_fn mepcore1_sem_repeat;
728 extern mepcore1_sem_fn mepcore1_sem_erepeat;
729 extern mepcore1_sem_fn mepcore1_sem_stc_lp;
730 extern mepcore1_sem_fn mepcore1_sem_stc_hi;
731 extern mepcore1_sem_fn mepcore1_sem_stc_lo;
732 extern mepcore1_sem_fn mepcore1_sem_stc;
733 extern mepcore1_sem_fn mepcore1_sem_ldc_lp;
734 extern mepcore1_sem_fn mepcore1_sem_ldc_hi;
735 extern mepcore1_sem_fn mepcore1_sem_ldc_lo;
736 extern mepcore1_sem_fn mepcore1_sem_ldc;
737 extern mepcore1_sem_fn mepcore1_sem_di;
738 extern mepcore1_sem_fn mepcore1_sem_ei;
739 extern mepcore1_sem_fn mepcore1_sem_reti;
740 extern mepcore1_sem_fn mepcore1_sem_halt;
741 extern mepcore1_sem_fn mepcore1_sem_sleep;
742 extern mepcore1_sem_fn mepcore1_sem_swi;
743 extern mepcore1_sem_fn mepcore1_sem_break;
744 extern mepcore1_sem_fn mepcore1_sem_syncm;
745 extern mepcore1_sem_fn mepcore1_sem_stcb;
746 extern mepcore1_sem_fn mepcore1_sem_ldcb;
747 extern mepcore1_sem_fn mepcore1_sem_bsetm;
748 extern mepcore1_sem_fn mepcore1_sem_bclrm;
749 extern mepcore1_sem_fn mepcore1_sem_bnotm;
750 extern mepcore1_sem_fn mepcore1_sem_btstm;
751 extern mepcore1_sem_fn mepcore1_sem_tas;
752 extern mepcore1_sem_fn mepcore1_sem_cache;
753 extern mepcore1_sem_fn mepcore1_sem_mul;
754 extern mepcore1_sem_fn mepcore1_sem_mulu;
755 extern mepcore1_sem_fn mepcore1_sem_mulr;
756 extern mepcore1_sem_fn mepcore1_sem_mulru;
757 extern mepcore1_sem_fn mepcore1_sem_madd;
758 extern mepcore1_sem_fn mepcore1_sem_maddu;
759 extern mepcore1_sem_fn mepcore1_sem_maddr;
760 extern mepcore1_sem_fn mepcore1_sem_maddru;
761 extern mepcore1_sem_fn mepcore1_sem_div;
762 extern mepcore1_sem_fn mepcore1_sem_divu;
763 extern mepcore1_sem_fn mepcore1_sem_dret;
764 extern mepcore1_sem_fn mepcore1_sem_dbreak;
765 extern mepcore1_sem_fn mepcore1_sem_ldz;
766 extern mepcore1_sem_fn mepcore1_sem_abs;
767 extern mepcore1_sem_fn mepcore1_sem_ave;
768 extern mepcore1_sem_fn mepcore1_sem_min;
769 extern mepcore1_sem_fn mepcore1_sem_max;
770 extern mepcore1_sem_fn mepcore1_sem_minu;
771 extern mepcore1_sem_fn mepcore1_sem_maxu;
772 extern mepcore1_sem_fn mepcore1_sem_clip;
773 extern mepcore1_sem_fn mepcore1_sem_clipu;
774 extern mepcore1_sem_fn mepcore1_sem_sadd;
775 extern mepcore1_sem_fn mepcore1_sem_ssub;
776 extern mepcore1_sem_fn mepcore1_sem_saddu;
777 extern mepcore1_sem_fn mepcore1_sem_ssubu;
778 extern mepcore1_sem_fn mepcore1_sem_swcp;
779 extern mepcore1_sem_fn mepcore1_sem_lwcp;
780 extern mepcore1_sem_fn mepcore1_sem_smcp;
781 extern mepcore1_sem_fn mepcore1_sem_lmcp;
782 extern mepcore1_sem_fn mepcore1_sem_swcpi;
783 extern mepcore1_sem_fn mepcore1_sem_lwcpi;
784 extern mepcore1_sem_fn mepcore1_sem_smcpi;
785 extern mepcore1_sem_fn mepcore1_sem_lmcpi;
786 extern mepcore1_sem_fn mepcore1_sem_swcp16;
787 extern mepcore1_sem_fn mepcore1_sem_lwcp16;
788 extern mepcore1_sem_fn mepcore1_sem_smcp16;
789 extern mepcore1_sem_fn mepcore1_sem_lmcp16;
790 extern mepcore1_sem_fn mepcore1_sem_sbcpa;
791 extern mepcore1_sem_fn mepcore1_sem_lbcpa;
792 extern mepcore1_sem_fn mepcore1_sem_shcpa;
793 extern mepcore1_sem_fn mepcore1_sem_lhcpa;
794 extern mepcore1_sem_fn mepcore1_sem_swcpa;
795 extern mepcore1_sem_fn mepcore1_sem_lwcpa;
796 extern mepcore1_sem_fn mepcore1_sem_smcpa;
797 extern mepcore1_sem_fn mepcore1_sem_lmcpa;
798 extern mepcore1_sem_fn mepcore1_sem_sbcpm0;
799 extern mepcore1_sem_fn mepcore1_sem_lbcpm0;
800 extern mepcore1_sem_fn mepcore1_sem_shcpm0;
801 extern mepcore1_sem_fn mepcore1_sem_lhcpm0;
802 extern mepcore1_sem_fn mepcore1_sem_swcpm0;
803 extern mepcore1_sem_fn mepcore1_sem_lwcpm0;
804 extern mepcore1_sem_fn mepcore1_sem_smcpm0;
805 extern mepcore1_sem_fn mepcore1_sem_lmcpm0;
806 extern mepcore1_sem_fn mepcore1_sem_sbcpm1;
807 extern mepcore1_sem_fn mepcore1_sem_lbcpm1;
808 extern mepcore1_sem_fn mepcore1_sem_shcpm1;
809 extern mepcore1_sem_fn mepcore1_sem_lhcpm1;
810 extern mepcore1_sem_fn mepcore1_sem_swcpm1;
811 extern mepcore1_sem_fn mepcore1_sem_lwcpm1;
812 extern mepcore1_sem_fn mepcore1_sem_smcpm1;
813 extern mepcore1_sem_fn mepcore1_sem_lmcpm1;
814 extern mepcore1_sem_fn mepcore1_sem_bcpeq;
815 extern mepcore1_sem_fn mepcore1_sem_bcpne;
816 extern mepcore1_sem_fn mepcore1_sem_bcpat;
817 extern mepcore1_sem_fn mepcore1_sem_bcpaf;
818 extern mepcore1_sem_fn mepcore1_sem_synccp;
819 extern mepcore1_sem_fn mepcore1_sem_jsrv;
820 extern mepcore1_sem_fn mepcore1_sem_bsrv;
821 extern mepcore1_sem_fn mepcore1_sem_sim_syscall;
822 extern mepcore1_sem_fn mepcore1_sem_ri_0;
823 extern mepcore1_sem_fn mepcore1_sem_ri_1;
824 extern mepcore1_sem_fn mepcore1_sem_ri_2;
825 extern mepcore1_sem_fn mepcore1_sem_ri_3;
826 extern mepcore1_sem_fn mepcore1_sem_ri_4;
827 extern mepcore1_sem_fn mepcore1_sem_ri_5;
828 extern mepcore1_sem_fn mepcore1_sem_ri_6;
829 extern mepcore1_sem_fn mepcore1_sem_ri_7;
830 extern mepcore1_sem_fn mepcore1_sem_ri_8;
831 extern mepcore1_sem_fn mepcore1_sem_ri_9;
832 extern mepcore1_sem_fn mepcore1_sem_ri_10;
833 extern mepcore1_sem_fn mepcore1_sem_ri_11;
834 extern mepcore1_sem_fn mepcore1_sem_ri_12;
835 extern mepcore1_sem_fn mepcore1_sem_ri_13;
836 extern mepcore1_sem_fn mepcore1_sem_ri_14;
837 extern mepcore1_sem_fn mepcore1_sem_ri_15;
838 extern mepcore1_sem_fn mepcore1_sem_ri_17;
839 extern mepcore1_sem_fn mepcore1_sem_ri_20;
840 extern mepcore1_sem_fn mepcore1_sem_ri_21;
841 extern mepcore1_sem_fn mepcore1_sem_ri_22;
842 extern mepcore1_sem_fn mepcore1_sem_ri_23;
843 extern mepcore1_sem_fn mepcore1_sem_ri_26;
844
845 #endif /* MEPCORE1_DECODE_H */