1 /* Decode header for m32rbf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 2000 Red Hat, Inc.
7 This file is part of the Cygnus 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
56 typedef sem_status (m32rbf_sem_fn) (m32rbf_cpu* cpu, m32rbf_scache* sem);
59 // Instruction descriptor.
63 // scache engine executor for this insn
64 m32rbf_sem_fn* execute;
66 const char* insn_name;
67 enum m32rbf_insn_type sem_index;
70 // idesc table: indexed by sem_index
71 static m32rbf_idesc idesc_table[];
73 static m32rbf_insn_type lookup_virtual (virtual_insn_type vit);
76 // Instruction argument buffer.
78 union m32rbf_sem_fields {
79 struct { /* no operands */
139 // This one is for chain/cti-chain virtual insns.
141 // Number of insns in pbb.
143 // This is used by chain insns and by untaken conditional branches.
145 m32rbf_scache* branch_target;
147 // This one is for `before' virtual insns.
149 // The cache entry of the real insn.
154 // Simulator instruction cache.
156 struct m32rbf_scache {
163 // PC of this instruction.
170 m32rbf_sem_fields fields;
173 // Only used if profiling or parallel execution support enabled during
177 // decode given instruction
178 void decode (m32rbf_cpu* current_cpu, PCADDR pc, m32rbf_insn_word base_insn, m32rbf_insn_word entire_insn);
181 } // end m32rbf namespace
183 // Decls of each semantic fn.
185 using m32rbf::m32rbf_sem_fn;
186 extern m32rbf_sem_fn m32rbf_sem_x_invalid;
187 extern m32rbf_sem_fn m32rbf_sem_add;
188 extern m32rbf_sem_fn m32rbf_sem_add3;
189 extern m32rbf_sem_fn m32rbf_sem_and;
190 extern m32rbf_sem_fn m32rbf_sem_and3;
191 extern m32rbf_sem_fn m32rbf_sem_or;
192 extern m32rbf_sem_fn m32rbf_sem_or3;
193 extern m32rbf_sem_fn m32rbf_sem_xor;
194 extern m32rbf_sem_fn m32rbf_sem_xor3;
195 extern m32rbf_sem_fn m32rbf_sem_addi;
196 extern m32rbf_sem_fn m32rbf_sem_addv;
197 extern m32rbf_sem_fn m32rbf_sem_addv3;
198 extern m32rbf_sem_fn m32rbf_sem_addx;
199 extern m32rbf_sem_fn m32rbf_sem_bc8;
200 extern m32rbf_sem_fn m32rbf_sem_bc24;
201 extern m32rbf_sem_fn m32rbf_sem_beq;
202 extern m32rbf_sem_fn m32rbf_sem_beqz;
203 extern m32rbf_sem_fn m32rbf_sem_bgez;
204 extern m32rbf_sem_fn m32rbf_sem_bgtz;
205 extern m32rbf_sem_fn m32rbf_sem_blez;
206 extern m32rbf_sem_fn m32rbf_sem_bltz;
207 extern m32rbf_sem_fn m32rbf_sem_bnez;
208 extern m32rbf_sem_fn m32rbf_sem_bl8;
209 extern m32rbf_sem_fn m32rbf_sem_bl24;
210 extern m32rbf_sem_fn m32rbf_sem_bnc8;
211 extern m32rbf_sem_fn m32rbf_sem_bnc24;
212 extern m32rbf_sem_fn m32rbf_sem_bne;
213 extern m32rbf_sem_fn m32rbf_sem_bra8;
214 extern m32rbf_sem_fn m32rbf_sem_bra24;
215 extern m32rbf_sem_fn m32rbf_sem_cmp;
216 extern m32rbf_sem_fn m32rbf_sem_cmpi;
217 extern m32rbf_sem_fn m32rbf_sem_cmpu;
218 extern m32rbf_sem_fn m32rbf_sem_cmpui;
219 extern m32rbf_sem_fn m32rbf_sem_div;
220 extern m32rbf_sem_fn m32rbf_sem_divu;
221 extern m32rbf_sem_fn m32rbf_sem_rem;
222 extern m32rbf_sem_fn m32rbf_sem_remu;
223 extern m32rbf_sem_fn m32rbf_sem_jl;
224 extern m32rbf_sem_fn m32rbf_sem_jmp;
225 extern m32rbf_sem_fn m32rbf_sem_ld;
226 extern m32rbf_sem_fn m32rbf_sem_ld_d;
227 extern m32rbf_sem_fn m32rbf_sem_ldb;
228 extern m32rbf_sem_fn m32rbf_sem_ldb_d;
229 extern m32rbf_sem_fn m32rbf_sem_ldh;
230 extern m32rbf_sem_fn m32rbf_sem_ldh_d;
231 extern m32rbf_sem_fn m32rbf_sem_ldub;
232 extern m32rbf_sem_fn m32rbf_sem_ldub_d;
233 extern m32rbf_sem_fn m32rbf_sem_lduh;
234 extern m32rbf_sem_fn m32rbf_sem_lduh_d;
235 extern m32rbf_sem_fn m32rbf_sem_ld_plus;
236 extern m32rbf_sem_fn m32rbf_sem_ld24;
237 extern m32rbf_sem_fn m32rbf_sem_ldi8;
238 extern m32rbf_sem_fn m32rbf_sem_ldi16;
239 extern m32rbf_sem_fn m32rbf_sem_lock;
240 extern m32rbf_sem_fn m32rbf_sem_machi;
241 extern m32rbf_sem_fn m32rbf_sem_maclo;
242 extern m32rbf_sem_fn m32rbf_sem_macwhi;
243 extern m32rbf_sem_fn m32rbf_sem_macwlo;
244 extern m32rbf_sem_fn m32rbf_sem_mul;
245 extern m32rbf_sem_fn m32rbf_sem_mulhi;
246 extern m32rbf_sem_fn m32rbf_sem_mullo;
247 extern m32rbf_sem_fn m32rbf_sem_mulwhi;
248 extern m32rbf_sem_fn m32rbf_sem_mulwlo;
249 extern m32rbf_sem_fn m32rbf_sem_mv;
250 extern m32rbf_sem_fn m32rbf_sem_mvfachi;
251 extern m32rbf_sem_fn m32rbf_sem_mvfaclo;
252 extern m32rbf_sem_fn m32rbf_sem_mvfacmi;
253 extern m32rbf_sem_fn m32rbf_sem_mvfc;
254 extern m32rbf_sem_fn m32rbf_sem_mvtachi;
255 extern m32rbf_sem_fn m32rbf_sem_mvtaclo;
256 extern m32rbf_sem_fn m32rbf_sem_mvtc;
257 extern m32rbf_sem_fn m32rbf_sem_neg;
258 extern m32rbf_sem_fn m32rbf_sem_nop;
259 extern m32rbf_sem_fn m32rbf_sem_not;
260 extern m32rbf_sem_fn m32rbf_sem_rac;
261 extern m32rbf_sem_fn m32rbf_sem_rach;
262 extern m32rbf_sem_fn m32rbf_sem_rte;
263 extern m32rbf_sem_fn m32rbf_sem_seth;
264 extern m32rbf_sem_fn m32rbf_sem_sll;
265 extern m32rbf_sem_fn m32rbf_sem_sll3;
266 extern m32rbf_sem_fn m32rbf_sem_slli;
267 extern m32rbf_sem_fn m32rbf_sem_sra;
268 extern m32rbf_sem_fn m32rbf_sem_sra3;
269 extern m32rbf_sem_fn m32rbf_sem_srai;
270 extern m32rbf_sem_fn m32rbf_sem_srl;
271 extern m32rbf_sem_fn m32rbf_sem_srl3;
272 extern m32rbf_sem_fn m32rbf_sem_srli;
273 extern m32rbf_sem_fn m32rbf_sem_st;
274 extern m32rbf_sem_fn m32rbf_sem_st_d;
275 extern m32rbf_sem_fn m32rbf_sem_stb;
276 extern m32rbf_sem_fn m32rbf_sem_stb_d;
277 extern m32rbf_sem_fn m32rbf_sem_sth;
278 extern m32rbf_sem_fn m32rbf_sem_sth_d;
279 extern m32rbf_sem_fn m32rbf_sem_st_plus;
280 extern m32rbf_sem_fn m32rbf_sem_st_minus;
281 extern m32rbf_sem_fn m32rbf_sem_sub;
282 extern m32rbf_sem_fn m32rbf_sem_subv;
283 extern m32rbf_sem_fn m32rbf_sem_subx;
284 extern m32rbf_sem_fn m32rbf_sem_trap;
285 extern m32rbf_sem_fn m32rbf_sem_unlock;
287 #endif /* M32RBF_DECODE_H */