1 /* Decode header for m32rbf.
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 M32RBF_DECODE_H
13 #define M32RBF_DECODE_H
20 typedef UINT m32rbf_insn_word;
22 /* Enum declaration for instructions in cpu family m32rbf. */
23 typedef enum m32rbf_insn_type {
24 M32RBF_INSN_X_INVALID, M32RBF_INSN_ADD, M32RBF_INSN_ADD3, M32RBF_INSN_AND
25 , M32RBF_INSN_AND3, M32RBF_INSN_OR, M32RBF_INSN_OR3, M32RBF_INSN_XOR
26 , M32RBF_INSN_XOR3, M32RBF_INSN_ADDI, M32RBF_INSN_ADDV, M32RBF_INSN_ADDV3
27 , M32RBF_INSN_ADDX, M32RBF_INSN_BC8, M32RBF_INSN_BC24, M32RBF_INSN_BEQ
28 , M32RBF_INSN_BEQZ, M32RBF_INSN_BGEZ, M32RBF_INSN_BGTZ, M32RBF_INSN_BLEZ
29 , M32RBF_INSN_BLTZ, M32RBF_INSN_BNEZ, M32RBF_INSN_BL8, M32RBF_INSN_BL24
30 , M32RBF_INSN_BNC8, M32RBF_INSN_BNC24, M32RBF_INSN_BNE, M32RBF_INSN_BRA8
31 , M32RBF_INSN_BRA24, M32RBF_INSN_CMP, M32RBF_INSN_CMPI, M32RBF_INSN_CMPU
32 , M32RBF_INSN_CMPUI, M32RBF_INSN_DIV, M32RBF_INSN_DIVU, M32RBF_INSN_REM
33 , M32RBF_INSN_REMU, M32RBF_INSN_JL, M32RBF_INSN_JMP, M32RBF_INSN_LD
34 , M32RBF_INSN_LD_D, M32RBF_INSN_LDB, M32RBF_INSN_LDB_D, M32RBF_INSN_LDH
35 , M32RBF_INSN_LDH_D, M32RBF_INSN_LDUB, M32RBF_INSN_LDUB_D, M32RBF_INSN_LDUH
36 , M32RBF_INSN_LDUH_D, M32RBF_INSN_LD_PLUS, M32RBF_INSN_LD24, M32RBF_INSN_LDI8
37 , M32RBF_INSN_LDI16, M32RBF_INSN_LOCK, M32RBF_INSN_MACHI, M32RBF_INSN_MACLO
38 , M32RBF_INSN_MACWHI, M32RBF_INSN_MACWLO, M32RBF_INSN_MUL, M32RBF_INSN_MULHI
39 , M32RBF_INSN_MULLO, M32RBF_INSN_MULWHI, M32RBF_INSN_MULWLO, M32RBF_INSN_MV
40 , M32RBF_INSN_MVFACHI, M32RBF_INSN_MVFACLO, M32RBF_INSN_MVFACMI, M32RBF_INSN_MVFC
41 , M32RBF_INSN_MVTACHI, M32RBF_INSN_MVTACLO, M32RBF_INSN_MVTC, M32RBF_INSN_NEG
42 , M32RBF_INSN_NOP, M32RBF_INSN_NOT, M32RBF_INSN_RAC, M32RBF_INSN_RACH
43 , M32RBF_INSN_RTE, M32RBF_INSN_SETH, M32RBF_INSN_SLL, M32RBF_INSN_SLL3
44 , M32RBF_INSN_SLLI, M32RBF_INSN_SRA, M32RBF_INSN_SRA3, M32RBF_INSN_SRAI
45 , M32RBF_INSN_SRL, M32RBF_INSN_SRL3, M32RBF_INSN_SRLI, M32RBF_INSN_ST
46 , M32RBF_INSN_ST_D, M32RBF_INSN_STB, M32RBF_INSN_STB_D, M32RBF_INSN_STH
47 , M32RBF_INSN_STH_D, M32RBF_INSN_ST_PLUS, M32RBF_INSN_ST_MINUS, M32RBF_INSN_SUB
48 , M32RBF_INSN_SUBV, M32RBF_INSN_SUBX, M32RBF_INSN_TRAP, M32RBF_INSN_UNLOCK
49 , M32RBF_INSN_CLRPSW, M32RBF_INSN_SETPSW, M32RBF_INSN_BSET, M32RBF_INSN_BCLR
57 typedef sem_status (m32rbf_sem_fn) (m32rbf_cpu* cpu, m32rbf_scache* sem);
60 // Instruction descriptor.
64 // scache engine executor for this insn
65 m32rbf_sem_fn* execute;
67 const char* insn_name;
68 enum m32rbf_insn_type sem_index;
71 // idesc table: indexed by sem_index
72 static m32rbf_idesc idesc_table[];
74 static m32rbf_insn_type lookup_virtual (virtual_insn_type vit);
77 // Instruction argument buffer.
79 union m32rbf_sem_fields {
80 struct { /* no operands */
149 // This one is for chain/cti-chain virtual insns.
151 // Number of insns in pbb.
153 // This is used by chain insns and by untaken conditional branches.
155 m32rbf_scache* branch_target;
157 // This one is for `before' virtual insns.
159 // The cache entry of the real insn.
164 // Simulator instruction cache.
166 struct m32rbf_scache {
173 // PC of this instruction.
180 m32rbf_sem_fields fields;
184 // decode given instruction
185 void decode (m32rbf_cpu* current_cpu, PCADDR pc, m32rbf_insn_word base_insn, m32rbf_insn_word entire_insn);
188 } // end m32rbf namespace
190 // Decls of each semantic fn.
192 using m32rbf::m32rbf_sem_fn;
193 extern m32rbf_sem_fn m32rbf_sem_x_invalid;
194 extern m32rbf_sem_fn m32rbf_sem_add;
195 extern m32rbf_sem_fn m32rbf_sem_add3;
196 extern m32rbf_sem_fn m32rbf_sem_and;
197 extern m32rbf_sem_fn m32rbf_sem_and3;
198 extern m32rbf_sem_fn m32rbf_sem_or;
199 extern m32rbf_sem_fn m32rbf_sem_or3;
200 extern m32rbf_sem_fn m32rbf_sem_xor;
201 extern m32rbf_sem_fn m32rbf_sem_xor3;
202 extern m32rbf_sem_fn m32rbf_sem_addi;
203 extern m32rbf_sem_fn m32rbf_sem_addv;
204 extern m32rbf_sem_fn m32rbf_sem_addv3;
205 extern m32rbf_sem_fn m32rbf_sem_addx;
206 extern m32rbf_sem_fn m32rbf_sem_bc8;
207 extern m32rbf_sem_fn m32rbf_sem_bc24;
208 extern m32rbf_sem_fn m32rbf_sem_beq;
209 extern m32rbf_sem_fn m32rbf_sem_beqz;
210 extern m32rbf_sem_fn m32rbf_sem_bgez;
211 extern m32rbf_sem_fn m32rbf_sem_bgtz;
212 extern m32rbf_sem_fn m32rbf_sem_blez;
213 extern m32rbf_sem_fn m32rbf_sem_bltz;
214 extern m32rbf_sem_fn m32rbf_sem_bnez;
215 extern m32rbf_sem_fn m32rbf_sem_bl8;
216 extern m32rbf_sem_fn m32rbf_sem_bl24;
217 extern m32rbf_sem_fn m32rbf_sem_bnc8;
218 extern m32rbf_sem_fn m32rbf_sem_bnc24;
219 extern m32rbf_sem_fn m32rbf_sem_bne;
220 extern m32rbf_sem_fn m32rbf_sem_bra8;
221 extern m32rbf_sem_fn m32rbf_sem_bra24;
222 extern m32rbf_sem_fn m32rbf_sem_cmp;
223 extern m32rbf_sem_fn m32rbf_sem_cmpi;
224 extern m32rbf_sem_fn m32rbf_sem_cmpu;
225 extern m32rbf_sem_fn m32rbf_sem_cmpui;
226 extern m32rbf_sem_fn m32rbf_sem_div;
227 extern m32rbf_sem_fn m32rbf_sem_divu;
228 extern m32rbf_sem_fn m32rbf_sem_rem;
229 extern m32rbf_sem_fn m32rbf_sem_remu;
230 extern m32rbf_sem_fn m32rbf_sem_jl;
231 extern m32rbf_sem_fn m32rbf_sem_jmp;
232 extern m32rbf_sem_fn m32rbf_sem_ld;
233 extern m32rbf_sem_fn m32rbf_sem_ld_d;
234 extern m32rbf_sem_fn m32rbf_sem_ldb;
235 extern m32rbf_sem_fn m32rbf_sem_ldb_d;
236 extern m32rbf_sem_fn m32rbf_sem_ldh;
237 extern m32rbf_sem_fn m32rbf_sem_ldh_d;
238 extern m32rbf_sem_fn m32rbf_sem_ldub;
239 extern m32rbf_sem_fn m32rbf_sem_ldub_d;
240 extern m32rbf_sem_fn m32rbf_sem_lduh;
241 extern m32rbf_sem_fn m32rbf_sem_lduh_d;
242 extern m32rbf_sem_fn m32rbf_sem_ld_plus;
243 extern m32rbf_sem_fn m32rbf_sem_ld24;
244 extern m32rbf_sem_fn m32rbf_sem_ldi8;
245 extern m32rbf_sem_fn m32rbf_sem_ldi16;
246 extern m32rbf_sem_fn m32rbf_sem_lock;
247 extern m32rbf_sem_fn m32rbf_sem_machi;
248 extern m32rbf_sem_fn m32rbf_sem_maclo;
249 extern m32rbf_sem_fn m32rbf_sem_macwhi;
250 extern m32rbf_sem_fn m32rbf_sem_macwlo;
251 extern m32rbf_sem_fn m32rbf_sem_mul;
252 extern m32rbf_sem_fn m32rbf_sem_mulhi;
253 extern m32rbf_sem_fn m32rbf_sem_mullo;
254 extern m32rbf_sem_fn m32rbf_sem_mulwhi;
255 extern m32rbf_sem_fn m32rbf_sem_mulwlo;
256 extern m32rbf_sem_fn m32rbf_sem_mv;
257 extern m32rbf_sem_fn m32rbf_sem_mvfachi;
258 extern m32rbf_sem_fn m32rbf_sem_mvfaclo;
259 extern m32rbf_sem_fn m32rbf_sem_mvfacmi;
260 extern m32rbf_sem_fn m32rbf_sem_mvfc;
261 extern m32rbf_sem_fn m32rbf_sem_mvtachi;
262 extern m32rbf_sem_fn m32rbf_sem_mvtaclo;
263 extern m32rbf_sem_fn m32rbf_sem_mvtc;
264 extern m32rbf_sem_fn m32rbf_sem_neg;
265 extern m32rbf_sem_fn m32rbf_sem_nop;
266 extern m32rbf_sem_fn m32rbf_sem_not;
267 extern m32rbf_sem_fn m32rbf_sem_rac;
268 extern m32rbf_sem_fn m32rbf_sem_rach;
269 extern m32rbf_sem_fn m32rbf_sem_rte;
270 extern m32rbf_sem_fn m32rbf_sem_seth;
271 extern m32rbf_sem_fn m32rbf_sem_sll;
272 extern m32rbf_sem_fn m32rbf_sem_sll3;
273 extern m32rbf_sem_fn m32rbf_sem_slli;
274 extern m32rbf_sem_fn m32rbf_sem_sra;
275 extern m32rbf_sem_fn m32rbf_sem_sra3;
276 extern m32rbf_sem_fn m32rbf_sem_srai;
277 extern m32rbf_sem_fn m32rbf_sem_srl;
278 extern m32rbf_sem_fn m32rbf_sem_srl3;
279 extern m32rbf_sem_fn m32rbf_sem_srli;
280 extern m32rbf_sem_fn m32rbf_sem_st;
281 extern m32rbf_sem_fn m32rbf_sem_st_d;
282 extern m32rbf_sem_fn m32rbf_sem_stb;
283 extern m32rbf_sem_fn m32rbf_sem_stb_d;
284 extern m32rbf_sem_fn m32rbf_sem_sth;
285 extern m32rbf_sem_fn m32rbf_sem_sth_d;
286 extern m32rbf_sem_fn m32rbf_sem_st_plus;
287 extern m32rbf_sem_fn m32rbf_sem_st_minus;
288 extern m32rbf_sem_fn m32rbf_sem_sub;
289 extern m32rbf_sem_fn m32rbf_sem_subv;
290 extern m32rbf_sem_fn m32rbf_sem_subx;
291 extern m32rbf_sem_fn m32rbf_sem_trap;
292 extern m32rbf_sem_fn m32rbf_sem_unlock;
293 extern m32rbf_sem_fn m32rbf_sem_clrpsw;
294 extern m32rbf_sem_fn m32rbf_sem_setpsw;
295 extern m32rbf_sem_fn m32rbf_sem_bset;
296 extern m32rbf_sem_fn m32rbf_sem_bclr;
297 extern m32rbf_sem_fn m32rbf_sem_btst;
299 #endif /* M32RBF_DECODE_H */