1 /* Decode header for xstormy16.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 2000-2009 Red Hat, Inc.
7 This file is part of the Red Hat simulators.
12 #ifndef XSTORMY16_DECODE_H
13 #define XSTORMY16_DECODE_H
18 using namespace xstormy16;
20 typedef UINT xstormy16_insn_word;
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;
62 struct xstormy16_scache;
63 typedef sem_status (xstormy16_sem_fn) (xstormy16_cpu* cpu, xstormy16_scache* sem);
66 // Instruction descriptor.
68 struct xstormy16_idesc {
70 // scache engine executor for this insn
71 xstormy16_sem_fn* execute;
73 const char* insn_name;
74 enum xstormy16_insn_type sem_index;
75 xstormy16_insn_attr attrs;
77 // idesc table: indexed by sem_index
78 static xstormy16_idesc idesc_table[];
80 static xstormy16_insn_type lookup_virtual (virtual_insn_type vit);
83 // Instruction argument buffer.
85 union xstormy16_sem_fields {
86 struct { /* no operands */
178 // This one is for chain/cti-chain virtual insns.
180 // Number of insns in pbb.
182 // This is used by chain insns and by untaken conditional branches.
183 xstormy16_scache* next;
184 xstormy16_scache* branch_target;
186 // This one is for `before' virtual insns.
188 // The cache entry of the real insn.
189 xstormy16_scache* insn;
193 // Simulator instruction cache.
195 struct xstormy16_scache {
199 xstormy16_sem_fn* fn;
202 // PC of this instruction.
206 xstormy16_idesc* idesc;
209 xstormy16_sem_fields fields;
213 // decode given instruction
214 void decode (xstormy16_cpu* current_cpu, PCADDR pc, xstormy16_insn_word base_insn, xstormy16_insn_word entire_insn);
217 } // end xstormy16 namespace
219 // Decls of each semantic fn.
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;
352 #endif /* XSTORMY16_DECODE_H */