1 /* Decode header for m32rxf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
7 This file is part of the GNU Simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 #ifndef M32RXF_DECODE_H
26 #define M32RXF_DECODE_H
28 /* Run-time computed instruction descriptor. */
31 /* Pointer to parallel handler if serial insn.
32 Pointer to writeback handler if parallel insn. */
33 struct idesc
*par_idesc
;
35 #if WITH_SEM_SWITCH_FULL
40 SEMANTIC_FN
*sem_full
;
43 #if WITH_SEM_SWITCH_FAST
48 SEMANTIC_FN
*sem_fast
;
51 /* Instruction number (index in IDESC table, profile table).
52 Also used to switch on in non-gcc semantic switches. */
55 /* opcode table data */
56 const CGEN_INSN
*opcode
;
58 /* profiling/modelling support */
59 const INSN_TIMING
*timing
;
62 extern const IDESC
*m32rxf_decode (SIM_CPU
*, IADDR
,
63 CGEN_INSN_INT
, CGEN_INSN_INT
,
66 /* Enum declaration for instructions in cpu family m32rxf. */
67 typedef enum m32rxf_insn_type
{
68 M32RXF_INSN_X_INVALID
, M32RXF_INSN_X_AFTER
, M32RXF_INSN_X_BEFORE
, M32RXF_INSN_X_CTI_CHAIN
69 , M32RXF_INSN_X_CHAIN
, M32RXF_INSN_X_BEGIN
, M32RXF_INSN_ADD
, M32RXF_INSN_ADD3
70 , M32RXF_INSN_AND
, M32RXF_INSN_AND3
, M32RXF_INSN_OR
, M32RXF_INSN_OR3
71 , M32RXF_INSN_XOR
, M32RXF_INSN_XOR3
, M32RXF_INSN_ADDI
, M32RXF_INSN_ADDV
72 , M32RXF_INSN_ADDV3
, M32RXF_INSN_ADDX
, M32RXF_INSN_BC8
, M32RXF_INSN_BC24
73 , M32RXF_INSN_BEQ
, M32RXF_INSN_BEQZ
, M32RXF_INSN_BGEZ
, M32RXF_INSN_BGTZ
74 , M32RXF_INSN_BLEZ
, M32RXF_INSN_BLTZ
, M32RXF_INSN_BNEZ
, M32RXF_INSN_BL8
76 /* start-sanitize-m32rx */
78 /* end-sanitize-m32rx */
79 /* start-sanitize-m32rx */
81 /* end-sanitize-m32rx */
82 , M32RXF_INSN_BNC8
, M32RXF_INSN_BNC24
, M32RXF_INSN_BNE
, M32RXF_INSN_BRA8
84 /* start-sanitize-m32rx */
86 /* end-sanitize-m32rx */
87 /* start-sanitize-m32rx */
89 /* end-sanitize-m32rx */
90 , M32RXF_INSN_CMP
, M32RXF_INSN_CMPI
, M32RXF_INSN_CMPU
, M32RXF_INSN_CMPUI
91 /* start-sanitize-m32rx */
93 /* end-sanitize-m32rx */
94 /* start-sanitize-m32rx */
96 /* end-sanitize-m32rx */
97 , M32RXF_INSN_DIV
, M32RXF_INSN_DIVU
, M32RXF_INSN_REM
, M32RXF_INSN_REMU
98 /* start-sanitize-m32rx */
100 /* end-sanitize-m32rx */
101 /* start-sanitize-m32rx */
103 /* end-sanitize-m32rx */
104 /* start-sanitize-m32rx */
106 /* end-sanitize-m32rx */
107 , M32RXF_INSN_JL
, M32RXF_INSN_JMP
, M32RXF_INSN_LD
, M32RXF_INSN_LD_D
108 , M32RXF_INSN_LDB
, M32RXF_INSN_LDB_D
, M32RXF_INSN_LDH
, M32RXF_INSN_LDH_D
109 , M32RXF_INSN_LDUB
, M32RXF_INSN_LDUB_D
, M32RXF_INSN_LDUH
, M32RXF_INSN_LDUH_D
110 , M32RXF_INSN_LD_PLUS
, M32RXF_INSN_LD24
, M32RXF_INSN_LDI8
, M32RXF_INSN_LDI16
112 /* start-sanitize-m32rx */
113 , M32RXF_INSN_MACHI_A
114 /* end-sanitize-m32rx */
115 /* start-sanitize-m32rx */
116 , M32RXF_INSN_MACLO_A
117 /* end-sanitize-m32rx */
118 /* start-sanitize-m32rx */
119 , M32RXF_INSN_MACWHI_A
120 /* end-sanitize-m32rx */
121 /* start-sanitize-m32rx */
122 , M32RXF_INSN_MACWLO_A
123 /* end-sanitize-m32rx */
125 /* start-sanitize-m32rx */
126 , M32RXF_INSN_MULHI_A
127 /* end-sanitize-m32rx */
128 /* start-sanitize-m32rx */
129 , M32RXF_INSN_MULLO_A
130 /* end-sanitize-m32rx */
131 /* start-sanitize-m32rx */
132 , M32RXF_INSN_MULWHI_A
133 /* end-sanitize-m32rx */
134 /* start-sanitize-m32rx */
135 , M32RXF_INSN_MULWLO_A
136 /* end-sanitize-m32rx */
138 /* start-sanitize-m32rx */
139 , M32RXF_INSN_MVFACHI_A
140 /* end-sanitize-m32rx */
141 /* start-sanitize-m32rx */
142 , M32RXF_INSN_MVFACLO_A
143 /* end-sanitize-m32rx */
144 /* start-sanitize-m32rx */
145 , M32RXF_INSN_MVFACMI_A
146 /* end-sanitize-m32rx */
148 /* start-sanitize-m32rx */
149 , M32RXF_INSN_MVTACHI_A
150 /* end-sanitize-m32rx */
151 /* start-sanitize-m32rx */
152 , M32RXF_INSN_MVTACLO_A
153 /* end-sanitize-m32rx */
154 , M32RXF_INSN_MVTC
, M32RXF_INSN_NEG
, M32RXF_INSN_NOP
, M32RXF_INSN_NOT
155 /* start-sanitize-m32rx */
156 , M32RXF_INSN_RAC_DSI
157 /* end-sanitize-m32rx */
158 /* start-sanitize-m32rx */
159 , M32RXF_INSN_RACH_DSI
160 /* end-sanitize-m32rx */
161 , M32RXF_INSN_RTE
, M32RXF_INSN_SETH
, M32RXF_INSN_SLL
, M32RXF_INSN_SLL3
162 , M32RXF_INSN_SLLI
, M32RXF_INSN_SRA
, M32RXF_INSN_SRA3
, M32RXF_INSN_SRAI
163 , M32RXF_INSN_SRL
, M32RXF_INSN_SRL3
, M32RXF_INSN_SRLI
, M32RXF_INSN_ST
164 , M32RXF_INSN_ST_D
, M32RXF_INSN_STB
, M32RXF_INSN_STB_D
, M32RXF_INSN_STH
165 , M32RXF_INSN_STH_D
, M32RXF_INSN_ST_PLUS
, M32RXF_INSN_ST_MINUS
, M32RXF_INSN_SUB
166 , M32RXF_INSN_SUBV
, M32RXF_INSN_SUBX
, M32RXF_INSN_TRAP
, M32RXF_INSN_UNLOCK
167 /* start-sanitize-m32rx */
169 /* end-sanitize-m32rx */
170 /* start-sanitize-m32rx */
172 /* end-sanitize-m32rx */
173 /* start-sanitize-m32rx */
175 /* end-sanitize-m32rx */
176 /* start-sanitize-m32rx */
178 /* end-sanitize-m32rx */
179 /* start-sanitize-m32rx */
181 /* end-sanitize-m32rx */
182 /* start-sanitize-m32rx */
184 /* end-sanitize-m32rx */
185 /* start-sanitize-m32rx */
187 /* end-sanitize-m32rx */
188 /* start-sanitize-m32rx */
190 /* end-sanitize-m32rx */
191 /* start-sanitize-m32rx */
193 /* end-sanitize-m32rx */
194 /* start-sanitize-m32rx */
196 /* end-sanitize-m32rx */
197 /* start-sanitize-m32rx */
199 /* end-sanitize-m32rx */
200 , M32RXF_INSN_PAR_ADD
, M32RXF_INSN_WRITE_ADD
, M32RXF_INSN_PAR_AND
, M32RXF_INSN_WRITE_AND
201 , M32RXF_INSN_PAR_OR
, M32RXF_INSN_WRITE_OR
, M32RXF_INSN_PAR_XOR
, M32RXF_INSN_WRITE_XOR
202 , M32RXF_INSN_PAR_ADDI
, M32RXF_INSN_WRITE_ADDI
, M32RXF_INSN_PAR_ADDV
, M32RXF_INSN_WRITE_ADDV
203 , M32RXF_INSN_PAR_ADDX
, M32RXF_INSN_WRITE_ADDX
, M32RXF_INSN_PAR_BC8
, M32RXF_INSN_WRITE_BC8
204 , M32RXF_INSN_PAR_BL8
, M32RXF_INSN_WRITE_BL8
205 /* start-sanitize-m32rx */
206 , M32RXF_INSN_PAR_BCL8
207 /* end-sanitize-m32rx */
208 /* start-sanitize-m32rx */
209 , M32RXF_INSN_WRITE_BCL8
210 /* end-sanitize-m32rx */
211 , M32RXF_INSN_PAR_BNC8
, M32RXF_INSN_WRITE_BNC8
, M32RXF_INSN_PAR_BRA8
, M32RXF_INSN_WRITE_BRA8
212 /* start-sanitize-m32rx */
213 , M32RXF_INSN_PAR_BNCL8
214 /* end-sanitize-m32rx */
215 /* start-sanitize-m32rx */
216 , M32RXF_INSN_WRITE_BNCL8
217 /* end-sanitize-m32rx */
218 , M32RXF_INSN_PAR_CMP
, M32RXF_INSN_WRITE_CMP
, M32RXF_INSN_PAR_CMPU
, M32RXF_INSN_WRITE_CMPU
219 /* start-sanitize-m32rx */
220 , M32RXF_INSN_PAR_CMPEQ
221 /* end-sanitize-m32rx */
222 /* start-sanitize-m32rx */
223 , M32RXF_INSN_WRITE_CMPEQ
224 /* end-sanitize-m32rx */
225 /* start-sanitize-m32rx */
226 , M32RXF_INSN_PAR_CMPZ
227 /* end-sanitize-m32rx */
228 /* start-sanitize-m32rx */
229 , M32RXF_INSN_WRITE_CMPZ
230 /* end-sanitize-m32rx */
231 /* start-sanitize-m32rx */
233 /* end-sanitize-m32rx */
234 /* start-sanitize-m32rx */
235 , M32RXF_INSN_WRITE_JC
236 /* end-sanitize-m32rx */
237 /* start-sanitize-m32rx */
238 , M32RXF_INSN_PAR_JNC
239 /* end-sanitize-m32rx */
240 /* start-sanitize-m32rx */
241 , M32RXF_INSN_WRITE_JNC
242 /* end-sanitize-m32rx */
243 , M32RXF_INSN_PAR_JL
, M32RXF_INSN_WRITE_JL
, M32RXF_INSN_PAR_JMP
, M32RXF_INSN_WRITE_JMP
244 , M32RXF_INSN_PAR_LD
, M32RXF_INSN_WRITE_LD
, M32RXF_INSN_PAR_LDB
, M32RXF_INSN_WRITE_LDB
245 , M32RXF_INSN_PAR_LDH
, M32RXF_INSN_WRITE_LDH
, M32RXF_INSN_PAR_LDUB
, M32RXF_INSN_WRITE_LDUB
246 , M32RXF_INSN_PAR_LDUH
, M32RXF_INSN_WRITE_LDUH
, M32RXF_INSN_PAR_LD_PLUS
, M32RXF_INSN_WRITE_LD_PLUS
247 , M32RXF_INSN_PAR_LDI8
, M32RXF_INSN_WRITE_LDI8
, M32RXF_INSN_PAR_LOCK
, M32RXF_INSN_WRITE_LOCK
248 /* start-sanitize-m32rx */
249 , M32RXF_INSN_PAR_MACHI_A
250 /* end-sanitize-m32rx */
251 /* start-sanitize-m32rx */
252 , M32RXF_INSN_WRITE_MACHI_A
253 /* end-sanitize-m32rx */
254 /* start-sanitize-m32rx */
255 , M32RXF_INSN_PAR_MACLO_A
256 /* end-sanitize-m32rx */
257 /* start-sanitize-m32rx */
258 , M32RXF_INSN_WRITE_MACLO_A
259 /* end-sanitize-m32rx */
260 /* start-sanitize-m32rx */
261 , M32RXF_INSN_PAR_MACWHI_A
262 /* end-sanitize-m32rx */
263 /* start-sanitize-m32rx */
264 , M32RXF_INSN_WRITE_MACWHI_A
265 /* end-sanitize-m32rx */
266 /* start-sanitize-m32rx */
267 , M32RXF_INSN_PAR_MACWLO_A
268 /* end-sanitize-m32rx */
269 /* start-sanitize-m32rx */
270 , M32RXF_INSN_WRITE_MACWLO_A
271 /* end-sanitize-m32rx */
272 , M32RXF_INSN_PAR_MUL
, M32RXF_INSN_WRITE_MUL
273 /* start-sanitize-m32rx */
274 , M32RXF_INSN_PAR_MULHI_A
275 /* end-sanitize-m32rx */
276 /* start-sanitize-m32rx */
277 , M32RXF_INSN_WRITE_MULHI_A
278 /* end-sanitize-m32rx */
279 /* start-sanitize-m32rx */
280 , M32RXF_INSN_PAR_MULLO_A
281 /* end-sanitize-m32rx */
282 /* start-sanitize-m32rx */
283 , M32RXF_INSN_WRITE_MULLO_A
284 /* end-sanitize-m32rx */
285 /* start-sanitize-m32rx */
286 , M32RXF_INSN_PAR_MULWHI_A
287 /* end-sanitize-m32rx */
288 /* start-sanitize-m32rx */
289 , M32RXF_INSN_WRITE_MULWHI_A
290 /* end-sanitize-m32rx */
291 /* start-sanitize-m32rx */
292 , M32RXF_INSN_PAR_MULWLO_A
293 /* end-sanitize-m32rx */
294 /* start-sanitize-m32rx */
295 , M32RXF_INSN_WRITE_MULWLO_A
296 /* end-sanitize-m32rx */
297 , M32RXF_INSN_PAR_MV
, M32RXF_INSN_WRITE_MV
298 /* start-sanitize-m32rx */
299 , M32RXF_INSN_PAR_MVFACHI_A
300 /* end-sanitize-m32rx */
301 /* start-sanitize-m32rx */
302 , M32RXF_INSN_WRITE_MVFACHI_A
303 /* end-sanitize-m32rx */
304 /* start-sanitize-m32rx */
305 , M32RXF_INSN_PAR_MVFACLO_A
306 /* end-sanitize-m32rx */
307 /* start-sanitize-m32rx */
308 , M32RXF_INSN_WRITE_MVFACLO_A
309 /* end-sanitize-m32rx */
310 /* start-sanitize-m32rx */
311 , M32RXF_INSN_PAR_MVFACMI_A
312 /* end-sanitize-m32rx */
313 /* start-sanitize-m32rx */
314 , M32RXF_INSN_WRITE_MVFACMI_A
315 /* end-sanitize-m32rx */
316 , M32RXF_INSN_PAR_MVFC
, M32RXF_INSN_WRITE_MVFC
317 /* start-sanitize-m32rx */
318 , M32RXF_INSN_PAR_MVTACHI_A
319 /* end-sanitize-m32rx */
320 /* start-sanitize-m32rx */
321 , M32RXF_INSN_WRITE_MVTACHI_A
322 /* end-sanitize-m32rx */
323 /* start-sanitize-m32rx */
324 , M32RXF_INSN_PAR_MVTACLO_A
325 /* end-sanitize-m32rx */
326 /* start-sanitize-m32rx */
327 , M32RXF_INSN_WRITE_MVTACLO_A
328 /* end-sanitize-m32rx */
329 , M32RXF_INSN_PAR_MVTC
, M32RXF_INSN_WRITE_MVTC
, M32RXF_INSN_PAR_NEG
, M32RXF_INSN_WRITE_NEG
330 , M32RXF_INSN_PAR_NOP
, M32RXF_INSN_WRITE_NOP
, M32RXF_INSN_PAR_NOT
, M32RXF_INSN_WRITE_NOT
331 /* start-sanitize-m32rx */
332 , M32RXF_INSN_PAR_RAC_DSI
333 /* end-sanitize-m32rx */
334 /* start-sanitize-m32rx */
335 , M32RXF_INSN_WRITE_RAC_DSI
336 /* end-sanitize-m32rx */
337 /* start-sanitize-m32rx */
338 , M32RXF_INSN_PAR_RACH_DSI
339 /* end-sanitize-m32rx */
340 /* start-sanitize-m32rx */
341 , M32RXF_INSN_WRITE_RACH_DSI
342 /* end-sanitize-m32rx */
343 , M32RXF_INSN_PAR_RTE
, M32RXF_INSN_WRITE_RTE
, M32RXF_INSN_PAR_SLL
, M32RXF_INSN_WRITE_SLL
344 , M32RXF_INSN_PAR_SLLI
, M32RXF_INSN_WRITE_SLLI
, M32RXF_INSN_PAR_SRA
, M32RXF_INSN_WRITE_SRA
345 , M32RXF_INSN_PAR_SRAI
, M32RXF_INSN_WRITE_SRAI
, M32RXF_INSN_PAR_SRL
, M32RXF_INSN_WRITE_SRL
346 , M32RXF_INSN_PAR_SRLI
, M32RXF_INSN_WRITE_SRLI
, M32RXF_INSN_PAR_ST
, M32RXF_INSN_WRITE_ST
347 , M32RXF_INSN_PAR_STB
, M32RXF_INSN_WRITE_STB
, M32RXF_INSN_PAR_STH
, M32RXF_INSN_WRITE_STH
348 , M32RXF_INSN_PAR_ST_PLUS
, M32RXF_INSN_WRITE_ST_PLUS
, M32RXF_INSN_PAR_ST_MINUS
, M32RXF_INSN_WRITE_ST_MINUS
349 , M32RXF_INSN_PAR_SUB
, M32RXF_INSN_WRITE_SUB
, M32RXF_INSN_PAR_SUBV
, M32RXF_INSN_WRITE_SUBV
350 , M32RXF_INSN_PAR_SUBX
, M32RXF_INSN_WRITE_SUBX
, M32RXF_INSN_PAR_TRAP
, M32RXF_INSN_WRITE_TRAP
351 , M32RXF_INSN_PAR_UNLOCK
, M32RXF_INSN_WRITE_UNLOCK
352 /* start-sanitize-m32rx */
353 , M32RXF_INSN_PAR_PCMPBZ
354 /* end-sanitize-m32rx */
355 /* start-sanitize-m32rx */
356 , M32RXF_INSN_WRITE_PCMPBZ
357 /* end-sanitize-m32rx */
358 /* start-sanitize-m32rx */
359 , M32RXF_INSN_PAR_SADD
360 /* end-sanitize-m32rx */
361 /* start-sanitize-m32rx */
362 , M32RXF_INSN_WRITE_SADD
363 /* end-sanitize-m32rx */
364 /* start-sanitize-m32rx */
365 , M32RXF_INSN_PAR_MACWU1
366 /* end-sanitize-m32rx */
367 /* start-sanitize-m32rx */
368 , M32RXF_INSN_WRITE_MACWU1
369 /* end-sanitize-m32rx */
370 /* start-sanitize-m32rx */
371 , M32RXF_INSN_PAR_MSBLO
372 /* end-sanitize-m32rx */
373 /* start-sanitize-m32rx */
374 , M32RXF_INSN_WRITE_MSBLO
375 /* end-sanitize-m32rx */
376 /* start-sanitize-m32rx */
377 , M32RXF_INSN_PAR_MULWU1
378 /* end-sanitize-m32rx */
379 /* start-sanitize-m32rx */
380 , M32RXF_INSN_WRITE_MULWU1
381 /* end-sanitize-m32rx */
382 /* start-sanitize-m32rx */
383 , M32RXF_INSN_PAR_MACLH1
384 /* end-sanitize-m32rx */
385 /* start-sanitize-m32rx */
386 , M32RXF_INSN_WRITE_MACLH1
387 /* end-sanitize-m32rx */
388 /* start-sanitize-m32rx */
390 /* end-sanitize-m32rx */
391 /* start-sanitize-m32rx */
392 , M32RXF_INSN_WRITE_SC
393 /* end-sanitize-m32rx */
394 /* start-sanitize-m32rx */
395 , M32RXF_INSN_PAR_SNC
396 /* end-sanitize-m32rx */
397 /* start-sanitize-m32rx */
398 , M32RXF_INSN_WRITE_SNC
399 /* end-sanitize-m32rx */
403 #if ! WITH_SEM_SWITCH_FULL
404 #define SEMFULL(fn) extern SEMANTIC_FN CONCAT3 (m32rxf,_sem_,fn);
409 #if ! WITH_SEM_SWITCH_FAST
410 #define SEMFAST(fn) extern SEMANTIC_FN CONCAT3 (m32rxf,_semf_,fn);
415 #define SEM(fn) SEMFULL (fn) SEMFAST (fn)
417 /* The function version of the before/after handlers is always needed,
418 so we always want the SEMFULL declaration of them. */
419 extern SEMANTIC_FN
CONCAT3 (m32rxf
,_sem_
,x_before
);
420 extern SEMANTIC_FN
CONCAT3 (m32rxf
,_sem_
,x_after
);
552 /* Function unit handlers (user written). */
554 extern int m32rxf_model_m32rx_u_store (SIM_CPU
*, const IDESC
*, int /*unit_num*/, int /*referenced*/, INT
/*src1*/, INT
/*src2*/);
555 extern int m32rxf_model_m32rx_u_load (SIM_CPU
*, const IDESC
*, int /*unit_num*/, int /*referenced*/, INT
/*sr*/, INT
/*dr*/);
556 extern int m32rxf_model_m32rx_u_cti (SIM_CPU
*, const IDESC
*, int /*unit_num*/, int /*referenced*/, INT
/*sr*/);
557 extern int m32rxf_model_m32rx_u_mac (SIM_CPU
*, const IDESC
*, int /*unit_num*/, int /*referenced*/, INT
/*src1*/, INT
/*src2*/);
558 extern int m32rxf_model_m32rx_u_cmp (SIM_CPU
*, const IDESC
*, int /*unit_num*/, int /*referenced*/, INT
/*src1*/, INT
/*src2*/);
559 extern int m32rxf_model_m32rx_u_exec (SIM_CPU
*, const IDESC
*, int /*unit_num*/, int /*referenced*/, INT
/*sr*/, INT
/*sr2*/, INT
/*dr*/);
561 /* Profiling before/after handlers (user written) */
563 extern void m32rxf_model_insn_before (SIM_CPU
*, int /*first_p*/);
564 extern void m32rxf_model_insn_after (SIM_CPU
*, int /*last_p*/, int /*cycles*/);
566 #endif /* M32RXF_DECODE_H */