OSDN Git Service

Regenerate cgen files, update copyright year.
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / cgen-cpu / m32r / m32r-decode.h
1 /* Decode header for m32rbf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 2000-2010 Red Hat, Inc.
6
7 This file is part of the Red Hat simulators.
8
9
10 */
11
12 #ifndef M32RBF_DECODE_H
13 #define M32RBF_DECODE_H
14
15 namespace m32rbf {
16
17 using namespace cgen;
18 using namespace m32r;
19
20 typedef UINT m32rbf_insn_word;
21
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
50  , M32RBF_INSN_BTST
51 } M32RBF_INSN_TYPE;
52
53
54 // Forward decls.
55 struct m32rbf_cpu;
56 struct m32rbf_scache;
57 typedef sem_status (m32rbf_sem_fn) (m32rbf_cpu* cpu, m32rbf_scache* sem);
58
59
60 // Instruction descriptor.
61
62 struct m32rbf_idesc {
63
64   // scache engine executor for this insn
65   m32rbf_sem_fn* execute;
66
67   const char* insn_name;
68   enum m32rbf_insn_type sem_index;
69   m32r_insn_attr attrs;
70
71   // idesc table: indexed by sem_index
72   static m32rbf_idesc idesc_table[];
73
74   static m32rbf_insn_type lookup_virtual (virtual_insn_type vit);
75 };
76
77 // Instruction argument buffer.
78
79 union m32rbf_sem_fields {
80   struct { /* no operands */
81     int empty;
82   } fmt_empty;
83   struct { /*  */
84     UINT f_uimm8;
85   } sfmt_clrpsw;
86   struct { /*  */
87     UINT f_uimm4;
88   } sfmt_trap;
89   struct { /*  */
90     IADDR i_disp24;
91   } sfmt_bc24;
92   struct { /*  */
93     IADDR i_disp8;
94   } sfmt_bc8;
95   struct { /*  */
96     SI* i_dr;
97     UINT f_r1;
98     UINT f_uimm5;
99   } sfmt_slli;
100   struct { /*  */
101     SI* i_dr;
102     UINT f_hi16;
103     UINT f_r1;
104   } sfmt_seth;
105   struct { /*  */
106     ADDR i_uimm24;
107     SI* i_dr;
108     UINT f_r1;
109   } sfmt_ld24;
110   struct { /*  */
111     SI* i_dr;
112     INT f_simm8;
113     UINT f_r1;
114   } sfmt_addi;
115   struct { /*  */
116     SI* i_sr;
117     INT f_simm16;
118     UINT f_r2;
119     UINT f_uimm3;
120   } sfmt_bset;
121   struct { /*  */
122     SI* i_src1;
123     SI* i_src2;
124     INT f_simm16;
125     UINT f_r1;
126     UINT f_r2;
127   } sfmt_st_d;
128   struct { /*  */
129     IADDR i_disp16;
130     SI* i_src1;
131     SI* i_src2;
132     UINT f_r1;
133     UINT f_r2;
134   } sfmt_beq;
135   struct { /*  */
136     SI* i_dr;
137     SI* i_sr;
138     UINT f_r1;
139     UINT f_r2;
140     UINT f_uimm16;
141   } sfmt_and3;
142   struct { /*  */
143     SI* i_dr;
144     SI* i_sr;
145     INT f_simm16;
146     UINT f_r1;
147     UINT f_r2;
148   } sfmt_add3;
149   // This one is for chain/cti-chain virtual insns.
150   struct {
151     // Number of insns in pbb.
152     unsigned insn_count;
153     // This is used by chain insns and by untaken conditional branches.
154     m32rbf_scache* next;
155     m32rbf_scache* branch_target;
156   } chain;
157   // This one is for `before' virtual insns.
158   struct {
159     // The cache entry of the real insn.
160     m32rbf_scache* insn;
161   } before;
162 };
163
164 // Simulator instruction cache.
165
166 struct m32rbf_scache {
167   // executor
168   union {
169     cgoto_label cgoto;
170     m32rbf_sem_fn* fn;
171   } execute;
172
173   // PC of this instruction.
174   PCADDR addr;
175
176   // instruction class
177   m32rbf_idesc* idesc;
178
179   // argument buffer
180   m32rbf_sem_fields fields;
181
182
183
184   // decode given instruction
185   void decode (m32rbf_cpu* current_cpu, PCADDR pc, m32rbf_insn_word base_insn, m32rbf_insn_word entire_insn);
186 };
187
188 } // end m32rbf namespace
189
190 // Decls of each semantic fn.
191
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;
298
299 #endif /* M32RBF_DECODE_H */