OSDN Git Service

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