OSDN Git Service

77793f90ffb57b5219f79d8ba492422b46751011
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / cgen-cpu / xstormy16 / xstormy16-decode.h
1 /* Decode header for xstormy16.
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 XSTORMY16_DECODE_H
13 #define XSTORMY16_DECODE_H
14
15 namespace xstormy16 {
16
17 using namespace cgen;
18 using namespace xstormy16;
19
20 typedef UINT xstormy16_insn_word;
21
22 /* Enum declaration for instructions in cpu family xstormy16.  */
23 typedef enum xstormy16_insn_type {
24   XSTORMY16_INSN_X_INVALID, XSTORMY16_INSN_MOVLMEMIMM, XSTORMY16_INSN_MOVHMEMIMM, XSTORMY16_INSN_MOVLGRMEM
25  , XSTORMY16_INSN_MOVHGRMEM, XSTORMY16_INSN_MOVLMEMGR, XSTORMY16_INSN_MOVHMEMGR, XSTORMY16_INSN_MOVGRGRI
26  , XSTORMY16_INSN_MOVGRGRIPOSTINC, XSTORMY16_INSN_MOVGRGRIPREDEC, XSTORMY16_INSN_MOVGRIGR, XSTORMY16_INSN_MOVGRIPOSTINCGR
27  , XSTORMY16_INSN_MOVGRIPREDECGR, XSTORMY16_INSN_MOVGRGRII, XSTORMY16_INSN_MOVGRGRIIPOSTINC, XSTORMY16_INSN_MOVGRGRIIPREDEC
28  , XSTORMY16_INSN_MOVGRIIGR, XSTORMY16_INSN_MOVGRIIPOSTINCGR, XSTORMY16_INSN_MOVGRIIPREDECGR, XSTORMY16_INSN_MOVGRGR
29  , XSTORMY16_INSN_MOVWIMM8, XSTORMY16_INSN_MOVWGRIMM8, XSTORMY16_INSN_MOVWGRIMM16, XSTORMY16_INSN_MOVLOWGR
30  , XSTORMY16_INSN_MOVHIGHGR, XSTORMY16_INSN_MOVFGRGRI, XSTORMY16_INSN_MOVFGRGRIPOSTINC, XSTORMY16_INSN_MOVFGRGRIPREDEC
31  , XSTORMY16_INSN_MOVFGRIGR, XSTORMY16_INSN_MOVFGRIPOSTINCGR, XSTORMY16_INSN_MOVFGRIPREDECGR, XSTORMY16_INSN_MOVFGRGRII
32  , XSTORMY16_INSN_MOVFGRGRIIPOSTINC, XSTORMY16_INSN_MOVFGRGRIIPREDEC, XSTORMY16_INSN_MOVFGRIIGR, XSTORMY16_INSN_MOVFGRIIPOSTINCGR
33  , XSTORMY16_INSN_MOVFGRIIPREDECGR, XSTORMY16_INSN_MASKGRGR, XSTORMY16_INSN_MASKGRIMM16, XSTORMY16_INSN_PUSHGR
34  , XSTORMY16_INSN_POPGR, XSTORMY16_INSN_SWPN, XSTORMY16_INSN_SWPB, XSTORMY16_INSN_SWPW
35  , XSTORMY16_INSN_ANDGRGR, XSTORMY16_INSN_ANDIMM8, XSTORMY16_INSN_ANDGRIMM16, XSTORMY16_INSN_ORGRGR
36  , XSTORMY16_INSN_ORIMM8, XSTORMY16_INSN_ORGRIMM16, XSTORMY16_INSN_XORGRGR, XSTORMY16_INSN_XORIMM8
37  , XSTORMY16_INSN_XORGRIMM16, XSTORMY16_INSN_NOTGR, XSTORMY16_INSN_ADDGRGR, XSTORMY16_INSN_ADDGRIMM4
38  , XSTORMY16_INSN_ADDIMM8, XSTORMY16_INSN_ADDGRIMM16, XSTORMY16_INSN_ADCGRGR, XSTORMY16_INSN_ADCGRIMM4
39  , XSTORMY16_INSN_ADCIMM8, XSTORMY16_INSN_ADCGRIMM16, XSTORMY16_INSN_SUBGRGR, XSTORMY16_INSN_SUBGRIMM4
40  , XSTORMY16_INSN_SUBIMM8, XSTORMY16_INSN_SUBGRIMM16, XSTORMY16_INSN_SBCGRGR, XSTORMY16_INSN_SBCGRIMM4
41  , XSTORMY16_INSN_SBCGRIMM8, XSTORMY16_INSN_SBCGRIMM16, XSTORMY16_INSN_INCGRIMM2, XSTORMY16_INSN_DECGRIMM2
42  , XSTORMY16_INSN_RRCGRGR, XSTORMY16_INSN_RRCGRIMM4, XSTORMY16_INSN_RLCGRGR, XSTORMY16_INSN_RLCGRIMM4
43  , XSTORMY16_INSN_SHRGRGR, XSTORMY16_INSN_SHRGRIMM, XSTORMY16_INSN_SHLGRGR, XSTORMY16_INSN_SHLGRIMM
44  , XSTORMY16_INSN_ASRGRGR, XSTORMY16_INSN_ASRGRIMM, XSTORMY16_INSN_SET1GRIMM, XSTORMY16_INSN_SET1GRGR
45  , XSTORMY16_INSN_SET1LMEMIMM, XSTORMY16_INSN_SET1HMEMIMM, XSTORMY16_INSN_CLR1GRIMM, XSTORMY16_INSN_CLR1GRGR
46  , XSTORMY16_INSN_CLR1LMEMIMM, XSTORMY16_INSN_CLR1HMEMIMM, XSTORMY16_INSN_CBWGR, XSTORMY16_INSN_REVGR
47  , XSTORMY16_INSN_BCCGRGR, XSTORMY16_INSN_BCCGRIMM8, XSTORMY16_INSN_BCCIMM16, XSTORMY16_INSN_BNGRIMM4
48  , XSTORMY16_INSN_BNGRGR, XSTORMY16_INSN_BNLMEMIMM, XSTORMY16_INSN_BNHMEMIMM, XSTORMY16_INSN_BPGRIMM4
49  , XSTORMY16_INSN_BPGRGR, XSTORMY16_INSN_BPLMEMIMM, XSTORMY16_INSN_BPHMEMIMM, XSTORMY16_INSN_BCC
50  , XSTORMY16_INSN_BGR, XSTORMY16_INSN_BR, XSTORMY16_INSN_JMP, XSTORMY16_INSN_JMPF
51  , XSTORMY16_INSN_CALLRGR, XSTORMY16_INSN_CALLRIMM, XSTORMY16_INSN_CALLGR, XSTORMY16_INSN_CALLFIMM
52  , XSTORMY16_INSN_ICALLRGR, XSTORMY16_INSN_ICALLGR, XSTORMY16_INSN_ICALLFIMM, XSTORMY16_INSN_IRET
53  , XSTORMY16_INSN_RET, XSTORMY16_INSN_MUL, XSTORMY16_INSN_DIV, XSTORMY16_INSN_SDIV
54  , XSTORMY16_INSN_SDIVLH, XSTORMY16_INSN_DIVLH, XSTORMY16_INSN_RESET, XSTORMY16_INSN_NOP
55  , XSTORMY16_INSN_HALT, XSTORMY16_INSN_HOLD, XSTORMY16_INSN_HOLDX, XSTORMY16_INSN_BRK
56  , XSTORMY16_INSN_SYSCALL
57 } XSTORMY16_INSN_TYPE;
58
59
60 // Forward decls.
61 struct xstormy16_cpu;
62 struct xstormy16_scache;
63 typedef sem_status (xstormy16_sem_fn) (xstormy16_cpu* cpu, xstormy16_scache* sem);
64
65
66 // Instruction descriptor.
67
68 struct xstormy16_idesc {
69
70   // scache engine executor for this insn
71   xstormy16_sem_fn* execute;
72
73   const char* insn_name;
74   enum xstormy16_insn_type sem_index;
75   xstormy16_insn_attr attrs;
76
77   // idesc table: indexed by sem_index
78   static xstormy16_idesc idesc_table[];
79
80   static xstormy16_insn_type lookup_virtual (virtual_insn_type vit);
81 };
82
83 // Instruction argument buffer.
84
85 union xstormy16_sem_fields {
86   struct { /* no operands */
87     int empty;
88   } fmt_empty;
89   struct { /*  */
90     UINT f_abs24;
91   } sfmt_jmpf;
92   struct { /*  */
93     SI f_rel12a;
94   } sfmt_br;
95   struct { /*  */
96     UINT f_Rbj;
97     UINT f_Rd;
98   } sfmt_jmp;
99   struct { /*  */
100     SI f_rel8_2;
101     UINT f_op2;
102   } sfmt_bcc;
103   struct { /*  */
104     UINT f_imm3;
105     HI f_hmem8;
106   } sfmt_set1hmemimm;
107   struct { /*  */
108     UINT f_imm3;
109     UINT f_lmem8;
110   } sfmt_set1lmemimm;
111   struct { /*  */
112     UINT f_Rd;
113     UINT f_imm2;
114   } sfmt_incgrimm2;
115   struct { /*  */
116     UINT f_Rd;
117     UINT f_imm16;
118   } sfmt_movwgrimm16;
119   struct { /*  */
120     SI f_rel12;
121     UINT f_imm3b;
122     HI f_hmem8;
123   } sfmt_bnhmemimm;
124   struct { /*  */
125     SI f_rel12;
126     UINT f_imm3b;
127     UINT f_lmem8;
128   } sfmt_bnlmemimm;
129   struct { /*  */
130     SI f_rel12;
131     UINT f_Rd;
132     UINT f_imm4;
133   } sfmt_bngrimm4;
134   struct { /*  */
135     SI f_rel8_4;
136     UINT f_imm16;
137     UINT f_op2;
138   } sfmt_bccimm16;
139   struct { /*  */
140     UINT f_Rm;
141     UINT f_op2m;
142     HI f_hmem8;
143   } sfmt_movhgrmem;
144   struct { /*  */
145     UINT f_Rm;
146     UINT f_lmem8;
147     UINT f_op2m;
148   } sfmt_movlgrmem;
149   struct { /*  */
150     UINT f_imm16;
151     UINT f_op2m;
152     HI f_hmem8;
153   } sfmt_movhmemimm;
154   struct { /*  */
155     UINT f_imm16;
156     UINT f_lmem8;
157     UINT f_op2m;
158   } sfmt_movlmemimm;
159   struct { /*  */
160     SI f_rel12;
161     UINT f_Rm;
162     UINT f_imm8;
163     UINT f_op5;
164   } sfmt_bccgrimm8;
165   struct { /*  */
166     SI f_rel12;
167     UINT f_Rd;
168     UINT f_Rs;
169     UINT f_op5;
170   } sfmt_bccgrgr;
171   struct { /*  */
172     INT f_imm12;
173     UINT f_Rb;
174     UINT f_Rdm;
175     UINT f_Rs;
176     UINT f_op2m;
177   } sfmt_movfgrgrii;
178   // This one is for chain/cti-chain virtual insns.
179   struct {
180     // Number of insns in pbb.
181     unsigned insn_count;
182     // This is used by chain insns and by untaken conditional branches.
183     xstormy16_scache* next;
184     xstormy16_scache* branch_target;
185   } chain;
186   // This one is for `before' virtual insns.
187   struct {
188     // The cache entry of the real insn.
189     xstormy16_scache* insn;
190   } before;
191 };
192
193 // Simulator instruction cache.
194
195 struct xstormy16_scache {
196   // executor
197   union {
198     cgoto_label cgoto;
199     xstormy16_sem_fn* fn;
200   } execute;
201
202   // PC of this instruction.
203   PCADDR addr;
204
205   // instruction class
206   xstormy16_idesc* idesc;
207
208   // argument buffer
209   xstormy16_sem_fields fields;
210
211
212
213   // decode given instruction
214   void decode (xstormy16_cpu* current_cpu, PCADDR pc, xstormy16_insn_word base_insn, xstormy16_insn_word entire_insn);
215 };
216
217 } // end xstormy16 namespace
218
219 // Decls of each semantic fn.
220
221 using xstormy16::xstormy16_sem_fn;
222 extern xstormy16_sem_fn xstormy16_sem_x_invalid;
223 extern xstormy16_sem_fn xstormy16_sem_movlmemimm;
224 extern xstormy16_sem_fn xstormy16_sem_movhmemimm;
225 extern xstormy16_sem_fn xstormy16_sem_movlgrmem;
226 extern xstormy16_sem_fn xstormy16_sem_movhgrmem;
227 extern xstormy16_sem_fn xstormy16_sem_movlmemgr;
228 extern xstormy16_sem_fn xstormy16_sem_movhmemgr;
229 extern xstormy16_sem_fn xstormy16_sem_movgrgri;
230 extern xstormy16_sem_fn xstormy16_sem_movgrgripostinc;
231 extern xstormy16_sem_fn xstormy16_sem_movgrgripredec;
232 extern xstormy16_sem_fn xstormy16_sem_movgrigr;
233 extern xstormy16_sem_fn xstormy16_sem_movgripostincgr;
234 extern xstormy16_sem_fn xstormy16_sem_movgripredecgr;
235 extern xstormy16_sem_fn xstormy16_sem_movgrgrii;
236 extern xstormy16_sem_fn xstormy16_sem_movgrgriipostinc;
237 extern xstormy16_sem_fn xstormy16_sem_movgrgriipredec;
238 extern xstormy16_sem_fn xstormy16_sem_movgriigr;
239 extern xstormy16_sem_fn xstormy16_sem_movgriipostincgr;
240 extern xstormy16_sem_fn xstormy16_sem_movgriipredecgr;
241 extern xstormy16_sem_fn xstormy16_sem_movgrgr;
242 extern xstormy16_sem_fn xstormy16_sem_movwimm8;
243 extern xstormy16_sem_fn xstormy16_sem_movwgrimm8;
244 extern xstormy16_sem_fn xstormy16_sem_movwgrimm16;
245 extern xstormy16_sem_fn xstormy16_sem_movlowgr;
246 extern xstormy16_sem_fn xstormy16_sem_movhighgr;
247 extern xstormy16_sem_fn xstormy16_sem_movfgrgri;
248 extern xstormy16_sem_fn xstormy16_sem_movfgrgripostinc;
249 extern xstormy16_sem_fn xstormy16_sem_movfgrgripredec;
250 extern xstormy16_sem_fn xstormy16_sem_movfgrigr;
251 extern xstormy16_sem_fn xstormy16_sem_movfgripostincgr;
252 extern xstormy16_sem_fn xstormy16_sem_movfgripredecgr;
253 extern xstormy16_sem_fn xstormy16_sem_movfgrgrii;
254 extern xstormy16_sem_fn xstormy16_sem_movfgrgriipostinc;
255 extern xstormy16_sem_fn xstormy16_sem_movfgrgriipredec;
256 extern xstormy16_sem_fn xstormy16_sem_movfgriigr;
257 extern xstormy16_sem_fn xstormy16_sem_movfgriipostincgr;
258 extern xstormy16_sem_fn xstormy16_sem_movfgriipredecgr;
259 extern xstormy16_sem_fn xstormy16_sem_maskgrgr;
260 extern xstormy16_sem_fn xstormy16_sem_maskgrimm16;
261 extern xstormy16_sem_fn xstormy16_sem_pushgr;
262 extern xstormy16_sem_fn xstormy16_sem_popgr;
263 extern xstormy16_sem_fn xstormy16_sem_swpn;
264 extern xstormy16_sem_fn xstormy16_sem_swpb;
265 extern xstormy16_sem_fn xstormy16_sem_swpw;
266 extern xstormy16_sem_fn xstormy16_sem_andgrgr;
267 extern xstormy16_sem_fn xstormy16_sem_andimm8;
268 extern xstormy16_sem_fn xstormy16_sem_andgrimm16;
269 extern xstormy16_sem_fn xstormy16_sem_orgrgr;
270 extern xstormy16_sem_fn xstormy16_sem_orimm8;
271 extern xstormy16_sem_fn xstormy16_sem_orgrimm16;
272 extern xstormy16_sem_fn xstormy16_sem_xorgrgr;
273 extern xstormy16_sem_fn xstormy16_sem_xorimm8;
274 extern xstormy16_sem_fn xstormy16_sem_xorgrimm16;
275 extern xstormy16_sem_fn xstormy16_sem_notgr;
276 extern xstormy16_sem_fn xstormy16_sem_addgrgr;
277 extern xstormy16_sem_fn xstormy16_sem_addgrimm4;
278 extern xstormy16_sem_fn xstormy16_sem_addimm8;
279 extern xstormy16_sem_fn xstormy16_sem_addgrimm16;
280 extern xstormy16_sem_fn xstormy16_sem_adcgrgr;
281 extern xstormy16_sem_fn xstormy16_sem_adcgrimm4;
282 extern xstormy16_sem_fn xstormy16_sem_adcimm8;
283 extern xstormy16_sem_fn xstormy16_sem_adcgrimm16;
284 extern xstormy16_sem_fn xstormy16_sem_subgrgr;
285 extern xstormy16_sem_fn xstormy16_sem_subgrimm4;
286 extern xstormy16_sem_fn xstormy16_sem_subimm8;
287 extern xstormy16_sem_fn xstormy16_sem_subgrimm16;
288 extern xstormy16_sem_fn xstormy16_sem_sbcgrgr;
289 extern xstormy16_sem_fn xstormy16_sem_sbcgrimm4;
290 extern xstormy16_sem_fn xstormy16_sem_sbcgrimm8;
291 extern xstormy16_sem_fn xstormy16_sem_sbcgrimm16;
292 extern xstormy16_sem_fn xstormy16_sem_incgrimm2;
293 extern xstormy16_sem_fn xstormy16_sem_decgrimm2;
294 extern xstormy16_sem_fn xstormy16_sem_rrcgrgr;
295 extern xstormy16_sem_fn xstormy16_sem_rrcgrimm4;
296 extern xstormy16_sem_fn xstormy16_sem_rlcgrgr;
297 extern xstormy16_sem_fn xstormy16_sem_rlcgrimm4;
298 extern xstormy16_sem_fn xstormy16_sem_shrgrgr;
299 extern xstormy16_sem_fn xstormy16_sem_shrgrimm;
300 extern xstormy16_sem_fn xstormy16_sem_shlgrgr;
301 extern xstormy16_sem_fn xstormy16_sem_shlgrimm;
302 extern xstormy16_sem_fn xstormy16_sem_asrgrgr;
303 extern xstormy16_sem_fn xstormy16_sem_asrgrimm;
304 extern xstormy16_sem_fn xstormy16_sem_set1grimm;
305 extern xstormy16_sem_fn xstormy16_sem_set1grgr;
306 extern xstormy16_sem_fn xstormy16_sem_set1lmemimm;
307 extern xstormy16_sem_fn xstormy16_sem_set1hmemimm;
308 extern xstormy16_sem_fn xstormy16_sem_clr1grimm;
309 extern xstormy16_sem_fn xstormy16_sem_clr1grgr;
310 extern xstormy16_sem_fn xstormy16_sem_clr1lmemimm;
311 extern xstormy16_sem_fn xstormy16_sem_clr1hmemimm;
312 extern xstormy16_sem_fn xstormy16_sem_cbwgr;
313 extern xstormy16_sem_fn xstormy16_sem_revgr;
314 extern xstormy16_sem_fn xstormy16_sem_bccgrgr;
315 extern xstormy16_sem_fn xstormy16_sem_bccgrimm8;
316 extern xstormy16_sem_fn xstormy16_sem_bccimm16;
317 extern xstormy16_sem_fn xstormy16_sem_bngrimm4;
318 extern xstormy16_sem_fn xstormy16_sem_bngrgr;
319 extern xstormy16_sem_fn xstormy16_sem_bnlmemimm;
320 extern xstormy16_sem_fn xstormy16_sem_bnhmemimm;
321 extern xstormy16_sem_fn xstormy16_sem_bpgrimm4;
322 extern xstormy16_sem_fn xstormy16_sem_bpgrgr;
323 extern xstormy16_sem_fn xstormy16_sem_bplmemimm;
324 extern xstormy16_sem_fn xstormy16_sem_bphmemimm;
325 extern xstormy16_sem_fn xstormy16_sem_bcc;
326 extern xstormy16_sem_fn xstormy16_sem_bgr;
327 extern xstormy16_sem_fn xstormy16_sem_br;
328 extern xstormy16_sem_fn xstormy16_sem_jmp;
329 extern xstormy16_sem_fn xstormy16_sem_jmpf;
330 extern xstormy16_sem_fn xstormy16_sem_callrgr;
331 extern xstormy16_sem_fn xstormy16_sem_callrimm;
332 extern xstormy16_sem_fn xstormy16_sem_callgr;
333 extern xstormy16_sem_fn xstormy16_sem_callfimm;
334 extern xstormy16_sem_fn xstormy16_sem_icallrgr;
335 extern xstormy16_sem_fn xstormy16_sem_icallgr;
336 extern xstormy16_sem_fn xstormy16_sem_icallfimm;
337 extern xstormy16_sem_fn xstormy16_sem_iret;
338 extern xstormy16_sem_fn xstormy16_sem_ret;
339 extern xstormy16_sem_fn xstormy16_sem_mul;
340 extern xstormy16_sem_fn xstormy16_sem_div;
341 extern xstormy16_sem_fn xstormy16_sem_sdiv;
342 extern xstormy16_sem_fn xstormy16_sem_sdivlh;
343 extern xstormy16_sem_fn xstormy16_sem_divlh;
344 extern xstormy16_sem_fn xstormy16_sem_reset;
345 extern xstormy16_sem_fn xstormy16_sem_nop;
346 extern xstormy16_sem_fn xstormy16_sem_halt;
347 extern xstormy16_sem_fn xstormy16_sem_hold;
348 extern xstormy16_sem_fn xstormy16_sem_holdx;
349 extern xstormy16_sem_fn xstormy16_sem_brk;
350 extern xstormy16_sem_fn xstormy16_sem_syscall;
351
352 #endif /* XSTORMY16_DECODE_H */