]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/cris/cpuv10.h
74cd2a9ed36830d229a8cfff9588c21d5c1f14cd
[thirdparty/binutils-gdb.git] / sim / cris / cpuv10.h
1 /* CPU family header for crisv10f.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright 1996-2010 Free Software Foundation, Inc.
6
7 This file is part of the GNU simulators.
8
9 This file 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 3, or (at your option)
12 any later version.
13
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
18
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 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22
23 */
24
25 #ifndef CPU_CRISV10F_H
26 #define CPU_CRISV10F_H
27
28 /* Maximum number of instructions that are fetched at a time.
29 This is for LIW type instructions sets (e.g. m32r). */
30 #define MAX_LIW_INSNS 1
31
32 /* Maximum number of instructions that can be executed in parallel. */
33 #define MAX_PARALLEL_INSNS 1
34
35 /* The size of an "int" needed to hold an instruction word.
36 This is usually 32 bits, but some architectures needs 64 bits. */
37 typedef CGEN_INSN_INT CGEN_INSN_WORD;
38
39 #include "cgen-engine.h"
40
41 /* CPU state information. */
42 typedef struct {
43 /* Hardware elements. */
44 struct {
45 /* program counter */
46 USI h_pc;
47 #define GET_H_PC() CPU (h_pc)
48 #define SET_H_PC(x) \
49 do { \
50 CPU (h_pc) = ANDSI ((x), (~ (1)));\
51 ;} while (0)
52 /* General purpose registers */
53 SI h_gr_real_pc[16];
54 #define GET_H_GR_REAL_PC(a1) CPU (h_gr_real_pc)[a1]
55 #define SET_H_GR_REAL_PC(a1, x) (CPU (h_gr_real_pc)[a1] = (x))
56 /* Special registers for v10 */
57 SI h_sr_v10[16];
58 #define GET_H_SR_V10(index) (ORIF (ORIF (((index) == (((UINT) 0))), ((index) == (((UINT) 4)))), ((index) == (((UINT) 8))))) ? (0) : (((index) == (((UINT) 1)))) ? (10) : (ORIF (((index) == (((UINT) 5))), ((index) == (((UINT) 13))))) ? (ORSI (ANDSI (CPU (h_sr_v10[((UINT) 5)]), 0xffffff00), ORSI (ZEXTBISI (CPU (h_cbit)), ORSI (SLLSI (ZEXTBISI (CPU (h_vbit)), 1), ORSI (SLLSI (ZEXTBISI (CPU (h_zbit)), 2), ORSI (SLLSI (ZEXTBISI (CPU (h_nbit)), 3), ORSI (SLLSI (ZEXTBISI (CPU (h_xbit)), 4), ORSI (SLLSI (ZEXTBISI (GET_H_IBIT ()), 5), ORSI (SLLSI (ZEXTBISI (GET_H_UBIT ()), 6), ORSI (SLLSI (ZEXTBISI (CPU (h_pbit)), 7), 0)))))))))) : (CPU (h_sr_v10[index]))
59 #define SET_H_SR_V10(index, x) \
60 do { \
61 if (ORIF (ORIF ((((index)) == (((UINT) 0))), (((index)) == (((UINT) 4)))), ORIF ((((index)) == (((UINT) 8))), (((index)) == (((UINT) 1)))))) {\
62 ((void) 0); /*nop*/\
63 }\
64 else if (ORIF ((((index)) == (((UINT) 5))), (((index)) == (((UINT) 13))))) {\
65 {\
66 CPU (h_cbit) = ((NESI (ANDSI ((x), ((1) << (0))), 0)) ? (1) : (0));\
67 CPU (h_vbit) = ((NESI (ANDSI ((x), ((1) << (1))), 0)) ? (1) : (0));\
68 CPU (h_zbit) = ((NESI (ANDSI ((x), ((1) << (2))), 0)) ? (1) : (0));\
69 CPU (h_nbit) = ((NESI (ANDSI ((x), ((1) << (3))), 0)) ? (1) : (0));\
70 CPU (h_xbit) = ((NESI (ANDSI ((x), ((1) << (4))), 0)) ? (1) : (0));\
71 SET_H_IBIT (((NESI (ANDSI ((x), ((1) << (5))), 0)) ? (1) : (0)));\
72 SET_H_UBIT (((NESI (ANDSI ((x), ((1) << (6))), 0)) ? (1) : (0)));\
73 CPU (h_pbit) = ((NESI (ANDSI ((x), ((1) << (7))), 0)) ? (1) : (0));\
74 CPU (h_sr_v10[((UINT) 5)]) = (x);\
75 CPU (h_sr_v10[((UINT) 13)]) = (x);\
76 }\
77 }\
78 else {\
79 CPU (h_sr_v10[(index)]) = (x);\
80 }\
81 ;} while (0)
82 /* carry bit */
83 BI h_cbit;
84 #define GET_H_CBIT() CPU (h_cbit)
85 #define SET_H_CBIT(x) (CPU (h_cbit) = (x))
86 /* overflow bit */
87 BI h_vbit;
88 #define GET_H_VBIT() CPU (h_vbit)
89 #define SET_H_VBIT(x) (CPU (h_vbit) = (x))
90 /* zero bit */
91 BI h_zbit;
92 #define GET_H_ZBIT() CPU (h_zbit)
93 #define SET_H_ZBIT(x) (CPU (h_zbit) = (x))
94 /* sign bit */
95 BI h_nbit;
96 #define GET_H_NBIT() CPU (h_nbit)
97 #define SET_H_NBIT(x) (CPU (h_nbit) = (x))
98 /* extended-arithmetic bit */
99 BI h_xbit;
100 #define GET_H_XBIT() CPU (h_xbit)
101 #define SET_H_XBIT(x) (CPU (h_xbit) = (x))
102 /* interrupt-enable bit */
103 BI h_ibit_pre_v32;
104 #define GET_H_IBIT_PRE_V32() CPU (h_ibit_pre_v32)
105 #define SET_H_IBIT_PRE_V32(x) (CPU (h_ibit_pre_v32) = (x))
106 /* sequence-broken bit */
107 BI h_pbit;
108 #define GET_H_PBIT() CPU (h_pbit)
109 #define SET_H_PBIT(x) (CPU (h_pbit) = (x))
110 /* user mode bit */
111 BI h_ubit_pre_v32;
112 #define GET_H_UBIT_PRE_V32() CPU (h_ubit_pre_v32)
113 #define SET_H_UBIT_PRE_V32(x) (CPU (h_ubit_pre_v32) = (x))
114 /* instruction-is-prefixed bit */
115 BI h_insn_prefixed_p_pre_v32;
116 #define GET_H_INSN_PREFIXED_P_PRE_V32() CPU (h_insn_prefixed_p_pre_v32)
117 #define SET_H_INSN_PREFIXED_P_PRE_V32(x) (CPU (h_insn_prefixed_p_pre_v32) = (x))
118 /* Prefix-address register */
119 SI h_prefixreg_pre_v32;
120 #define GET_H_PREFIXREG_PRE_V32() CPU (h_prefixreg_pre_v32)
121 #define SET_H_PREFIXREG_PRE_V32(x) (CPU (h_prefixreg_pre_v32) = (x))
122 } hardware;
123 #define CPU_CGEN_HW(cpu) (& (cpu)->cpu_data.hardware)
124 } CRISV10F_CPU_DATA;
125
126 /* Virtual regs. */
127
128 #define GET_H_V32_NON_V32() 0
129 #define SET_H_V32_NON_V32(x) \
130 do { \
131 cgen_rtx_error (current_cpu, "Can't set h-v32");\
132 ;} while (0)
133 #define GET_H_GR(index) GET_H_GR_PC (index)
134 #define SET_H_GR(index, x) \
135 do { \
136 SET_H_GR_PC ((index), (x));\
137 ;} while (0)
138 #define GET_H_GR_PC(index) ((((index) == (15))) ? ((cgen_rtx_error (current_cpu, "General register read of PC is not implemented."), 0)) : (CPU (h_gr_real_pc[index])))
139 #define SET_H_GR_PC(index, x) \
140 do { \
141 {\
142 if ((((index)) == (15))) {\
143 cgen_rtx_error (current_cpu, "General register write to PC is not implemented.");\
144 }\
145 CPU (h_gr_real_pc[(index)]) = (x);\
146 }\
147 ;} while (0)
148 #define GET_H_RAW_GR_PC(index) CPU (h_gr_real_pc[index])
149 #define SET_H_RAW_GR_PC(index, x) \
150 do { \
151 CPU (h_gr_real_pc[(index)]) = (x);\
152 ;} while (0)
153 #define GET_H_SR(index) GET_H_SR_V10 (index)
154 #define SET_H_SR(index, x) \
155 do { \
156 SET_H_SR_V10 ((index), (x));\
157 ;} while (0)
158 #define GET_H_CBIT_MOVE() GET_H_CBIT_MOVE_PRE_V32 ()
159 #define SET_H_CBIT_MOVE(x) \
160 do { \
161 SET_H_CBIT_MOVE_PRE_V32 ((x));\
162 ;} while (0)
163 #define GET_H_CBIT_MOVE_PRE_V32() CPU (h_cbit)
164 #define SET_H_CBIT_MOVE_PRE_V32(x) \
165 do { \
166 CPU (h_cbit) = (x);\
167 ;} while (0)
168 #define GET_H_VBIT_MOVE() GET_H_VBIT_MOVE_PRE_V32 ()
169 #define SET_H_VBIT_MOVE(x) \
170 do { \
171 SET_H_VBIT_MOVE_PRE_V32 ((x));\
172 ;} while (0)
173 #define GET_H_VBIT_MOVE_PRE_V32() CPU (h_vbit)
174 #define SET_H_VBIT_MOVE_PRE_V32(x) \
175 do { \
176 CPU (h_vbit) = (x);\
177 ;} while (0)
178 #define GET_H_ZBIT_MOVE() GET_H_ZBIT_MOVE_PRE_V32 ()
179 #define SET_H_ZBIT_MOVE(x) \
180 do { \
181 SET_H_ZBIT_MOVE_PRE_V32 ((x));\
182 ;} while (0)
183 #define GET_H_ZBIT_MOVE_PRE_V32() CPU (h_zbit)
184 #define SET_H_ZBIT_MOVE_PRE_V32(x) \
185 do { \
186 CPU (h_zbit) = (x);\
187 ;} while (0)
188 #define GET_H_NBIT_MOVE() GET_H_NBIT_MOVE_PRE_V32 ()
189 #define SET_H_NBIT_MOVE(x) \
190 do { \
191 SET_H_NBIT_MOVE_PRE_V32 ((x));\
192 ;} while (0)
193 #define GET_H_NBIT_MOVE_PRE_V32() CPU (h_nbit)
194 #define SET_H_NBIT_MOVE_PRE_V32(x) \
195 do { \
196 CPU (h_nbit) = (x);\
197 ;} while (0)
198 #define GET_H_IBIT() CPU (h_ibit_pre_v32)
199 #define SET_H_IBIT(x) \
200 do { \
201 CPU (h_ibit_pre_v32) = (x);\
202 ;} while (0)
203 #define GET_H_UBIT() CPU (h_ubit_pre_v32)
204 #define SET_H_UBIT(x) \
205 do { \
206 CPU (h_ubit_pre_v32) = (x);\
207 ;} while (0)
208 #define GET_H_INSN_PREFIXED_P() CPU (h_insn_prefixed_p_pre_v32)
209 #define SET_H_INSN_PREFIXED_P(x) \
210 do { \
211 CPU (h_insn_prefixed_p_pre_v32) = (x);\
212 ;} while (0)
213
214 /* Cover fns for register access. */
215 BI crisv10f_h_v32_non_v32_get (SIM_CPU *);
216 void crisv10f_h_v32_non_v32_set (SIM_CPU *, BI);
217 USI crisv10f_h_pc_get (SIM_CPU *);
218 void crisv10f_h_pc_set (SIM_CPU *, USI);
219 SI crisv10f_h_gr_get (SIM_CPU *, UINT);
220 void crisv10f_h_gr_set (SIM_CPU *, UINT, SI);
221 SI crisv10f_h_gr_pc_get (SIM_CPU *, UINT);
222 void crisv10f_h_gr_pc_set (SIM_CPU *, UINT, SI);
223 SI crisv10f_h_gr_real_pc_get (SIM_CPU *, UINT);
224 void crisv10f_h_gr_real_pc_set (SIM_CPU *, UINT, SI);
225 SI crisv10f_h_raw_gr_pc_get (SIM_CPU *, UINT);
226 void crisv10f_h_raw_gr_pc_set (SIM_CPU *, UINT, SI);
227 SI crisv10f_h_sr_get (SIM_CPU *, UINT);
228 void crisv10f_h_sr_set (SIM_CPU *, UINT, SI);
229 SI crisv10f_h_sr_v10_get (SIM_CPU *, UINT);
230 void crisv10f_h_sr_v10_set (SIM_CPU *, UINT, SI);
231 BI crisv10f_h_cbit_get (SIM_CPU *);
232 void crisv10f_h_cbit_set (SIM_CPU *, BI);
233 BI crisv10f_h_cbit_move_get (SIM_CPU *);
234 void crisv10f_h_cbit_move_set (SIM_CPU *, BI);
235 BI crisv10f_h_cbit_move_pre_v32_get (SIM_CPU *);
236 void crisv10f_h_cbit_move_pre_v32_set (SIM_CPU *, BI);
237 BI crisv10f_h_vbit_get (SIM_CPU *);
238 void crisv10f_h_vbit_set (SIM_CPU *, BI);
239 BI crisv10f_h_vbit_move_get (SIM_CPU *);
240 void crisv10f_h_vbit_move_set (SIM_CPU *, BI);
241 BI crisv10f_h_vbit_move_pre_v32_get (SIM_CPU *);
242 void crisv10f_h_vbit_move_pre_v32_set (SIM_CPU *, BI);
243 BI crisv10f_h_zbit_get (SIM_CPU *);
244 void crisv10f_h_zbit_set (SIM_CPU *, BI);
245 BI crisv10f_h_zbit_move_get (SIM_CPU *);
246 void crisv10f_h_zbit_move_set (SIM_CPU *, BI);
247 BI crisv10f_h_zbit_move_pre_v32_get (SIM_CPU *);
248 void crisv10f_h_zbit_move_pre_v32_set (SIM_CPU *, BI);
249 BI crisv10f_h_nbit_get (SIM_CPU *);
250 void crisv10f_h_nbit_set (SIM_CPU *, BI);
251 BI crisv10f_h_nbit_move_get (SIM_CPU *);
252 void crisv10f_h_nbit_move_set (SIM_CPU *, BI);
253 BI crisv10f_h_nbit_move_pre_v32_get (SIM_CPU *);
254 void crisv10f_h_nbit_move_pre_v32_set (SIM_CPU *, BI);
255 BI crisv10f_h_xbit_get (SIM_CPU *);
256 void crisv10f_h_xbit_set (SIM_CPU *, BI);
257 BI crisv10f_h_ibit_get (SIM_CPU *);
258 void crisv10f_h_ibit_set (SIM_CPU *, BI);
259 BI crisv10f_h_ibit_pre_v32_get (SIM_CPU *);
260 void crisv10f_h_ibit_pre_v32_set (SIM_CPU *, BI);
261 BI crisv10f_h_pbit_get (SIM_CPU *);
262 void crisv10f_h_pbit_set (SIM_CPU *, BI);
263 BI crisv10f_h_ubit_get (SIM_CPU *);
264 void crisv10f_h_ubit_set (SIM_CPU *, BI);
265 BI crisv10f_h_ubit_pre_v32_get (SIM_CPU *);
266 void crisv10f_h_ubit_pre_v32_set (SIM_CPU *, BI);
267 BI crisv10f_h_insn_prefixed_p_get (SIM_CPU *);
268 void crisv10f_h_insn_prefixed_p_set (SIM_CPU *, BI);
269 BI crisv10f_h_insn_prefixed_p_pre_v32_get (SIM_CPU *);
270 void crisv10f_h_insn_prefixed_p_pre_v32_set (SIM_CPU *, BI);
271 SI crisv10f_h_prefixreg_pre_v32_get (SIM_CPU *);
272 void crisv10f_h_prefixreg_pre_v32_set (SIM_CPU *, SI);
273
274 /* These must be hand-written. */
275 extern CPUREG_FETCH_FN crisv10f_fetch_register;
276 extern CPUREG_STORE_FN crisv10f_store_register;
277
278 typedef struct {
279 int empty;
280 } MODEL_CRISV10_DATA;
281
282 /* Instruction argument buffer. */
283
284 union sem_fields {
285 struct { /* no operands */
286 int empty;
287 } sfmt_empty;
288 struct { /* */
289 UINT f_u4;
290 } sfmt_break;
291 struct { /* */
292 UINT f_dstsrc;
293 } sfmt_setf;
294 struct { /* */
295 IADDR i_o_word_pcrel;
296 UINT f_operand2;
297 } sfmt_bcc_w;
298 struct { /* */
299 IADDR i_o_pcrel;
300 UINT f_operand2;
301 } sfmt_bcc_b;
302 struct { /* */
303 UINT f_memmode;
304 unsigned char in_h_gr_SI_14;
305 unsigned char out_h_gr_SI_14;
306 } sfmt_move_m_spplus_p8;
307 struct { /* */
308 INT f_s8;
309 UINT f_operand2;
310 unsigned char in_Rd;
311 } sfmt_addoq;
312 struct { /* */
313 INT f_indir_pc__dword;
314 UINT f_operand2;
315 unsigned char out_Pd;
316 } sfmt_move_c_sprv10_p9;
317 struct { /* */
318 INT f_indir_pc__word;
319 UINT f_operand2;
320 unsigned char out_Pd;
321 } sfmt_move_c_sprv10_p5;
322 struct { /* */
323 INT f_s6;
324 UINT f_operand2;
325 unsigned char out_Rd;
326 } sfmt_moveq;
327 struct { /* */
328 INT f_indir_pc__dword;
329 UINT f_operand2;
330 unsigned char in_Rd;
331 unsigned char out_Rd;
332 } sfmt_bound_cd;
333 struct { /* */
334 INT f_indir_pc__word;
335 UINT f_operand2;
336 unsigned char in_Rd;
337 unsigned char out_Rd;
338 } sfmt_bound_cw;
339 struct { /* */
340 INT f_indir_pc__byte;
341 UINT f_operand2;
342 unsigned char in_Rd;
343 unsigned char out_Rd;
344 } sfmt_bound_cb;
345 struct { /* */
346 UINT f_operand2;
347 UINT f_u5;
348 unsigned char in_Rd;
349 unsigned char out_Rd;
350 } sfmt_asrq;
351 struct { /* */
352 INT f_s6;
353 UINT f_operand2;
354 unsigned char in_Rd;
355 unsigned char out_h_gr_SI_index_of__INT_Rd;
356 } sfmt_andq;
357 struct { /* */
358 INT f_indir_pc__dword;
359 UINT f_operand2;
360 unsigned char in_Rd;
361 unsigned char out_h_gr_SI_index_of__INT_Rd;
362 } sfmt_addcdr;
363 struct { /* */
364 INT f_indir_pc__word;
365 UINT f_operand2;
366 unsigned char in_Rd;
367 unsigned char out_h_gr_SI_index_of__INT_Rd;
368 } sfmt_addcwr;
369 struct { /* */
370 INT f_indir_pc__byte;
371 UINT f_operand2;
372 unsigned char in_Rd;
373 unsigned char out_h_gr_SI_index_of__INT_Rd;
374 } sfmt_addcbr;
375 struct { /* */
376 UINT f_operand1;
377 UINT f_operand2;
378 unsigned char in_Ps;
379 unsigned char out_h_gr_SI_index_of__INT_Rs;
380 } sfmt_move_spr_rv10;
381 struct { /* */
382 UINT f_operand2;
383 UINT f_u6;
384 unsigned char in_Rd;
385 unsigned char out_h_gr_SI_index_of__INT_Rd;
386 } sfmt_addq;
387 struct { /* */
388 UINT f_operand1;
389 UINT f_operand2;
390 unsigned char in_Rd;
391 unsigned char in_Rs;
392 unsigned char out_h_gr_SI_index_of__INT_Rd;
393 } sfmt_add_b_r;
394 struct { /* */
395 UINT f_operand1;
396 UINT f_operand2;
397 unsigned char in_Rd;
398 unsigned char in_Rs;
399 unsigned char out_Rd;
400 unsigned char out_h_sr_SI_7;
401 } sfmt_muls_b;
402 struct { /* */
403 UINT f_memmode;
404 UINT f_operand1;
405 UINT f_operand2;
406 unsigned char in_Ps;
407 unsigned char in_Rs;
408 unsigned char out_Rs;
409 } sfmt_move_spr_mv10;
410 struct { /* */
411 UINT f_memmode;
412 UINT f_operand1;
413 UINT f_operand2;
414 unsigned char in_Rs;
415 unsigned char out_Pd;
416 unsigned char out_Rs;
417 } sfmt_move_m_sprv10;
418 struct { /* */
419 UINT f_memmode;
420 UINT f_operand1;
421 UINT f_operand2;
422 unsigned char in_Rd;
423 unsigned char in_Rs;
424 unsigned char out_Rd;
425 unsigned char out_Rs;
426 } sfmt_bound_m_b_m;
427 struct { /* */
428 UINT f_memmode;
429 UINT f_operand1;
430 UINT f_operand2;
431 unsigned char in_Rd;
432 unsigned char in_Rs;
433 unsigned char out_Rs;
434 unsigned char out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd;
435 } sfmt_add_m_b_m;
436 struct { /* */
437 UINT f_memmode;
438 UINT f_operand1;
439 UINT f_operand2;
440 unsigned char in_Rd;
441 unsigned char in_Rs;
442 unsigned char out_Rs;
443 unsigned char out_h_gr_SI_0;
444 unsigned char out_h_gr_SI_1;
445 unsigned char out_h_gr_SI_10;
446 unsigned char out_h_gr_SI_11;
447 unsigned char out_h_gr_SI_12;
448 unsigned char out_h_gr_SI_13;
449 unsigned char out_h_gr_SI_14;
450 unsigned char out_h_gr_SI_2;
451 unsigned char out_h_gr_SI_3;
452 unsigned char out_h_gr_SI_4;
453 unsigned char out_h_gr_SI_5;
454 unsigned char out_h_gr_SI_6;
455 unsigned char out_h_gr_SI_7;
456 unsigned char out_h_gr_SI_8;
457 unsigned char out_h_gr_SI_9;
458 } sfmt_movem_m_r;
459 struct { /* */
460 UINT f_memmode;
461 UINT f_operand1;
462 UINT f_operand2;
463 unsigned char in_Rd;
464 unsigned char in_Rs;
465 unsigned char in_h_gr_SI_0;
466 unsigned char in_h_gr_SI_1;
467 unsigned char in_h_gr_SI_10;
468 unsigned char in_h_gr_SI_11;
469 unsigned char in_h_gr_SI_12;
470 unsigned char in_h_gr_SI_13;
471 unsigned char in_h_gr_SI_14;
472 unsigned char in_h_gr_SI_15;
473 unsigned char in_h_gr_SI_2;
474 unsigned char in_h_gr_SI_3;
475 unsigned char in_h_gr_SI_4;
476 unsigned char in_h_gr_SI_5;
477 unsigned char in_h_gr_SI_6;
478 unsigned char in_h_gr_SI_7;
479 unsigned char in_h_gr_SI_8;
480 unsigned char in_h_gr_SI_9;
481 unsigned char out_Rs;
482 } sfmt_movem_r_m;
483 #if WITH_SCACHE_PBB
484 /* Writeback handler. */
485 struct {
486 /* Pointer to argbuf entry for insn whose results need writing back. */
487 const struct argbuf *abuf;
488 } write;
489 /* x-before handler */
490 struct {
491 /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
492 int first_p;
493 } before;
494 /* x-after handler */
495 struct {
496 int empty;
497 } after;
498 /* This entry is used to terminate each pbb. */
499 struct {
500 /* Number of insns in pbb. */
501 int insn_count;
502 /* Next pbb to execute. */
503 SCACHE *next;
504 SCACHE *branch_target;
505 } chain;
506 #endif
507 };
508
509 /* The ARGBUF struct. */
510 struct argbuf {
511 /* These are the baseclass definitions. */
512 IADDR addr;
513 const IDESC *idesc;
514 char trace_p;
515 char profile_p;
516 /* ??? Temporary hack for skip insns. */
517 char skip_count;
518 char unused;
519 /* cpu specific data follows */
520 union sem semantic;
521 int written;
522 union sem_fields fields;
523 };
524
525 /* A cached insn.
526
527 ??? SCACHE used to contain more than just argbuf. We could delete the
528 type entirely and always just use ARGBUF, but for future concerns and as
529 a level of abstraction it is left in. */
530
531 struct scache {
532 struct argbuf argbuf;
533 };
534
535 /* Macros to simplify extraction, reading and semantic code.
536 These define and assign the local vars that contain the insn's fields. */
537
538 #define EXTRACT_IFMT_EMPTY_VARS \
539 unsigned int length;
540 #define EXTRACT_IFMT_EMPTY_CODE \
541 length = 0; \
542
543 #define EXTRACT_IFMT_NOP_VARS \
544 UINT f_operand2; \
545 UINT f_mode; \
546 UINT f_opcode; \
547 UINT f_size; \
548 UINT f_operand1; \
549 unsigned int length;
550 #define EXTRACT_IFMT_NOP_CODE \
551 length = 2; \
552 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
553 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
554 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
555 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
556 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
557
558 #define EXTRACT_IFMT_MOVE_B_R_VARS \
559 UINT f_operand2; \
560 UINT f_mode; \
561 UINT f_opcode; \
562 UINT f_size; \
563 UINT f_operand1; \
564 unsigned int length;
565 #define EXTRACT_IFMT_MOVE_B_R_CODE \
566 length = 2; \
567 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
568 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
569 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
570 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
571 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
572
573 #define EXTRACT_IFMT_MOVEPCR_VARS \
574 UINT f_operand2; \
575 UINT f_mode; \
576 UINT f_opcode; \
577 UINT f_size; \
578 UINT f_operand1; \
579 unsigned int length;
580 #define EXTRACT_IFMT_MOVEPCR_CODE \
581 length = 2; \
582 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
583 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
584 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
585 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
586 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
587
588 #define EXTRACT_IFMT_MOVEQ_VARS \
589 UINT f_operand2; \
590 UINT f_mode; \
591 UINT f_opcode; \
592 INT f_s6; \
593 unsigned int length;
594 #define EXTRACT_IFMT_MOVEQ_CODE \
595 length = 2; \
596 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
597 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
598 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
599 f_s6 = EXTRACT_LSB0_SINT (insn, 16, 5, 6); \
600
601 #define EXTRACT_IFMT_MOVECBR_VARS \
602 UINT f_operand2; \
603 INT f_indir_pc__byte; \
604 UINT f_mode; \
605 UINT f_opcode; \
606 UINT f_size; \
607 UINT f_operand1; \
608 /* Contents of trailing part of insn. */ \
609 UINT word_1; \
610 unsigned int length;
611 #define EXTRACT_IFMT_MOVECBR_CODE \
612 length = 4; \
613 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
614 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
615 f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)); \
616 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
617 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
618 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
619 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
620
621 #define EXTRACT_IFMT_MOVECWR_VARS \
622 UINT f_operand2; \
623 INT f_indir_pc__word; \
624 UINT f_mode; \
625 UINT f_opcode; \
626 UINT f_size; \
627 UINT f_operand1; \
628 /* Contents of trailing part of insn. */ \
629 UINT word_1; \
630 unsigned int length;
631 #define EXTRACT_IFMT_MOVECWR_CODE \
632 length = 4; \
633 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
634 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
635 f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)); \
636 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
637 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
638 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
639 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
640
641 #define EXTRACT_IFMT_MOVECDR_VARS \
642 INT f_indir_pc__dword; \
643 UINT f_operand2; \
644 UINT f_mode; \
645 UINT f_opcode; \
646 UINT f_size; \
647 UINT f_operand1; \
648 /* Contents of trailing part of insn. */ \
649 UINT word_1; \
650 unsigned int length;
651 #define EXTRACT_IFMT_MOVECDR_CODE \
652 length = 6; \
653 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
654 f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); \
655 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
656 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
657 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
658 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
659 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
660
661 #define EXTRACT_IFMT_MOVUCBR_VARS \
662 UINT f_operand2; \
663 INT f_indir_pc__byte; \
664 UINT f_mode; \
665 UINT f_opcode; \
666 UINT f_size; \
667 UINT f_operand1; \
668 /* Contents of trailing part of insn. */ \
669 UINT word_1; \
670 unsigned int length;
671 #define EXTRACT_IFMT_MOVUCBR_CODE \
672 length = 4; \
673 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
674 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
675 f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)); \
676 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
677 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
678 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
679 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
680
681 #define EXTRACT_IFMT_MOVUCWR_VARS \
682 UINT f_operand2; \
683 INT f_indir_pc__word; \
684 UINT f_mode; \
685 UINT f_opcode; \
686 UINT f_size; \
687 UINT f_operand1; \
688 /* Contents of trailing part of insn. */ \
689 UINT word_1; \
690 unsigned int length;
691 #define EXTRACT_IFMT_MOVUCWR_CODE \
692 length = 4; \
693 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
694 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
695 f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)); \
696 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
697 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
698 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
699 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
700
701 #define EXTRACT_IFMT_ADDQ_VARS \
702 UINT f_operand2; \
703 UINT f_mode; \
704 UINT f_opcode; \
705 UINT f_u6; \
706 unsigned int length;
707 #define EXTRACT_IFMT_ADDQ_CODE \
708 length = 2; \
709 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
710 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
711 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
712 f_u6 = EXTRACT_LSB0_UINT (insn, 16, 5, 6); \
713
714 #define EXTRACT_IFMT_CMP_M_B_M_VARS \
715 UINT f_operand2; \
716 UINT f_membit; \
717 UINT f_memmode; \
718 UINT f_opcode; \
719 UINT f_size; \
720 UINT f_operand1; \
721 unsigned int length;
722 #define EXTRACT_IFMT_CMP_M_B_M_CODE \
723 length = 2; \
724 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
725 f_membit = EXTRACT_LSB0_UINT (insn, 16, 11, 1); \
726 f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1); \
727 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
728 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
729 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
730
731 #define EXTRACT_IFMT_MOVE_R_SPRV10_VARS \
732 UINT f_operand2; \
733 UINT f_mode; \
734 UINT f_opcode; \
735 UINT f_size; \
736 UINT f_operand1; \
737 unsigned int length;
738 #define EXTRACT_IFMT_MOVE_R_SPRV10_CODE \
739 length = 2; \
740 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
741 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
742 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
743 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
744 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
745
746 #define EXTRACT_IFMT_MOVE_SPR_RV10_VARS \
747 UINT f_operand2; \
748 UINT f_mode; \
749 UINT f_opcode; \
750 UINT f_size; \
751 UINT f_operand1; \
752 unsigned int length;
753 #define EXTRACT_IFMT_MOVE_SPR_RV10_CODE \
754 length = 2; \
755 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
756 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
757 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
758 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
759 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
760
761 #define EXTRACT_IFMT_RET_TYPE_VARS \
762 UINT f_operand2; \
763 UINT f_mode; \
764 UINT f_opcode; \
765 UINT f_size; \
766 UINT f_operand1; \
767 unsigned int length;
768 #define EXTRACT_IFMT_RET_TYPE_CODE \
769 length = 2; \
770 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
771 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
772 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
773 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
774 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
775
776 #define EXTRACT_IFMT_MOVE_M_SPRV10_VARS \
777 UINT f_operand2; \
778 UINT f_membit; \
779 UINT f_memmode; \
780 UINT f_opcode; \
781 UINT f_size; \
782 UINT f_operand1; \
783 unsigned int length;
784 #define EXTRACT_IFMT_MOVE_M_SPRV10_CODE \
785 length = 2; \
786 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
787 f_membit = EXTRACT_LSB0_UINT (insn, 16, 11, 1); \
788 f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1); \
789 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
790 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
791 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
792
793 #define EXTRACT_IFMT_MOVE_C_SPRV10_P5_VARS \
794 UINT f_operand2; \
795 INT f_indir_pc__word; \
796 UINT f_mode; \
797 UINT f_opcode; \
798 UINT f_size; \
799 UINT f_operand1; \
800 /* Contents of trailing part of insn. */ \
801 UINT word_1; \
802 unsigned int length;
803 #define EXTRACT_IFMT_MOVE_C_SPRV10_P5_CODE \
804 length = 4; \
805 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
806 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
807 f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)); \
808 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
809 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
810 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
811 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
812
813 #define EXTRACT_IFMT_MOVE_C_SPRV10_P9_VARS \
814 INT f_indir_pc__dword; \
815 UINT f_operand2; \
816 UINT f_mode; \
817 UINT f_opcode; \
818 UINT f_size; \
819 UINT f_operand1; \
820 /* Contents of trailing part of insn. */ \
821 UINT word_1; \
822 unsigned int length;
823 #define EXTRACT_IFMT_MOVE_C_SPRV10_P9_CODE \
824 length = 6; \
825 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
826 f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); \
827 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
828 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
829 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
830 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
831 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
832
833 #define EXTRACT_IFMT_MOVE_SPR_MV10_VARS \
834 UINT f_operand2; \
835 UINT f_membit; \
836 UINT f_memmode; \
837 UINT f_opcode; \
838 UINT f_size; \
839 UINT f_operand1; \
840 unsigned int length;
841 #define EXTRACT_IFMT_MOVE_SPR_MV10_CODE \
842 length = 2; \
843 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
844 f_membit = EXTRACT_LSB0_UINT (insn, 16, 11, 1); \
845 f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1); \
846 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
847 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
848 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
849
850 #define EXTRACT_IFMT_SBFS_VARS \
851 UINT f_operand2; \
852 UINT f_membit; \
853 UINT f_memmode; \
854 UINT f_opcode; \
855 UINT f_size; \
856 UINT f_operand1; \
857 unsigned int length;
858 #define EXTRACT_IFMT_SBFS_CODE \
859 length = 2; \
860 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
861 f_membit = EXTRACT_LSB0_UINT (insn, 16, 11, 1); \
862 f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1); \
863 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
864 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
865 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
866
867 #define EXTRACT_IFMT_SWAP_VARS \
868 UINT f_operand2; \
869 UINT f_mode; \
870 UINT f_opcode; \
871 UINT f_size; \
872 UINT f_operand1; \
873 unsigned int length;
874 #define EXTRACT_IFMT_SWAP_CODE \
875 length = 2; \
876 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
877 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
878 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
879 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
880 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
881
882 #define EXTRACT_IFMT_ASRQ_VARS \
883 UINT f_operand2; \
884 UINT f_mode; \
885 UINT f_opcode; \
886 UINT f_b5; \
887 UINT f_u5; \
888 unsigned int length;
889 #define EXTRACT_IFMT_ASRQ_CODE \
890 length = 2; \
891 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
892 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
893 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
894 f_b5 = EXTRACT_LSB0_UINT (insn, 16, 5, 1); \
895 f_u5 = EXTRACT_LSB0_UINT (insn, 16, 4, 5); \
896
897 #define EXTRACT_IFMT_SETF_VARS \
898 UINT f_mode; \
899 UINT f_opcode; \
900 UINT f_size; \
901 UINT f_operand2; \
902 UINT f_operand1; \
903 UINT f_dstsrc; \
904 unsigned int length;
905 #define EXTRACT_IFMT_SETF_CODE \
906 length = 2; \
907 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
908 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
909 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
910 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
911 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
912 f_dstsrc = ((((f_operand1) | (((f_operand2) << (4))))) & (255));\
913
914 #define EXTRACT_IFMT_BCC_B_VARS \
915 UINT f_operand2; \
916 UINT f_mode; \
917 UINT f_opcode_hi; \
918 INT f_disp9_hi; \
919 UINT f_disp9_lo; \
920 INT f_disp9; \
921 unsigned int length;
922 #define EXTRACT_IFMT_BCC_B_CODE \
923 length = 2; \
924 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
925 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
926 f_opcode_hi = EXTRACT_LSB0_UINT (insn, 16, 9, 2); \
927 f_disp9_hi = EXTRACT_LSB0_SINT (insn, 16, 0, 1); \
928 f_disp9_lo = EXTRACT_LSB0_UINT (insn, 16, 7, 7); \
929 {\
930 SI tmp_abslo;\
931 SI tmp_absval;\
932 tmp_abslo = ((f_disp9_lo) << (1));\
933 tmp_absval = ((((((f_disp9_hi) != (0))) ? ((~ (255))) : (0))) | (tmp_abslo));\
934 f_disp9 = ((((pc) + (tmp_absval))) + (((GET_H_V32_NON_V32 ()) ? (0) : (2))));\
935 }\
936
937 #define EXTRACT_IFMT_BA_B_VARS \
938 UINT f_operand2; \
939 UINT f_mode; \
940 UINT f_opcode_hi; \
941 INT f_disp9_hi; \
942 UINT f_disp9_lo; \
943 INT f_disp9; \
944 unsigned int length;
945 #define EXTRACT_IFMT_BA_B_CODE \
946 length = 2; \
947 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
948 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
949 f_opcode_hi = EXTRACT_LSB0_UINT (insn, 16, 9, 2); \
950 f_disp9_hi = EXTRACT_LSB0_SINT (insn, 16, 0, 1); \
951 f_disp9_lo = EXTRACT_LSB0_UINT (insn, 16, 7, 7); \
952 {\
953 SI tmp_abslo;\
954 SI tmp_absval;\
955 tmp_abslo = ((f_disp9_lo) << (1));\
956 tmp_absval = ((((((f_disp9_hi) != (0))) ? ((~ (255))) : (0))) | (tmp_abslo));\
957 f_disp9 = ((((pc) + (tmp_absval))) + (((GET_H_V32_NON_V32 ()) ? (0) : (2))));\
958 }\
959
960 #define EXTRACT_IFMT_BCC_W_VARS \
961 UINT f_operand2; \
962 SI f_indir_pc__word_pcrel; \
963 UINT f_mode; \
964 UINT f_opcode; \
965 UINT f_size; \
966 UINT f_operand1; \
967 /* Contents of trailing part of insn. */ \
968 UINT word_1; \
969 unsigned int length;
970 #define EXTRACT_IFMT_BCC_W_CODE \
971 length = 4; \
972 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
973 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
974 f_indir_pc__word_pcrel = ((EXTHISI (((HI) (UINT) ((0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)))))) + (((pc) + (((GET_H_V32_NON_V32 ()) ? (0) : (4)))))); \
975 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
976 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
977 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
978 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
979
980 #define EXTRACT_IFMT_BA_W_VARS \
981 UINT f_operand2; \
982 SI f_indir_pc__word_pcrel; \
983 UINT f_mode; \
984 UINT f_opcode; \
985 UINT f_size; \
986 UINT f_operand1; \
987 /* Contents of trailing part of insn. */ \
988 UINT word_1; \
989 unsigned int length;
990 #define EXTRACT_IFMT_BA_W_CODE \
991 length = 4; \
992 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
993 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
994 f_indir_pc__word_pcrel = ((EXTHISI (((HI) (UINT) ((0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)))))) + (((pc) + (((GET_H_V32_NON_V32 ()) ? (0) : (4)))))); \
995 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
996 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
997 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
998 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
999
1000 #define EXTRACT_IFMT_JUMP_C_VARS \
1001 INT f_indir_pc__dword; \
1002 UINT f_operand2; \
1003 UINT f_mode; \
1004 UINT f_opcode; \
1005 UINT f_size; \
1006 UINT f_operand1; \
1007 /* Contents of trailing part of insn. */ \
1008 UINT word_1; \
1009 unsigned int length;
1010 #define EXTRACT_IFMT_JUMP_C_CODE \
1011 length = 6; \
1012 word_1 = GETIMEMUSI (current_cpu, pc + 2); \
1013 f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); \
1014 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
1015 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
1016 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
1017 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
1018 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
1019
1020 #define EXTRACT_IFMT_BREAK_VARS \
1021 UINT f_operand2; \
1022 UINT f_mode; \
1023 UINT f_opcode; \
1024 UINT f_size; \
1025 UINT f_u4; \
1026 unsigned int length;
1027 #define EXTRACT_IFMT_BREAK_CODE \
1028 length = 2; \
1029 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
1030 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
1031 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
1032 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
1033 f_u4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
1034
1035 #define EXTRACT_IFMT_SCC_VARS \
1036 UINT f_operand2; \
1037 UINT f_mode; \
1038 UINT f_opcode; \
1039 UINT f_size; \
1040 UINT f_operand1; \
1041 unsigned int length;
1042 #define EXTRACT_IFMT_SCC_CODE \
1043 length = 2; \
1044 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
1045 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
1046 f_opcode = EXTRACT_LSB0_UINT (insn, 16, 9, 4); \
1047 f_size = EXTRACT_LSB0_UINT (insn, 16, 5, 2); \
1048 f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
1049
1050 #define EXTRACT_IFMT_ADDOQ_VARS \
1051 UINT f_operand2; \
1052 UINT f_mode; \
1053 UINT f_opcode_hi; \
1054 INT f_s8; \
1055 unsigned int length;
1056 #define EXTRACT_IFMT_ADDOQ_CODE \
1057 length = 2; \
1058 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
1059 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
1060 f_opcode_hi = EXTRACT_LSB0_UINT (insn, 16, 9, 2); \
1061 f_s8 = EXTRACT_LSB0_SINT (insn, 16, 7, 8); \
1062
1063 #define EXTRACT_IFMT_BDAPQPC_VARS \
1064 UINT f_operand2; \
1065 UINT f_mode; \
1066 UINT f_opcode_hi; \
1067 INT f_s8; \
1068 unsigned int length;
1069 #define EXTRACT_IFMT_BDAPQPC_CODE \
1070 length = 2; \
1071 f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
1072 f_mode = EXTRACT_LSB0_UINT (insn, 16, 11, 2); \
1073 f_opcode_hi = EXTRACT_LSB0_UINT (insn, 16, 9, 2); \
1074 f_s8 = EXTRACT_LSB0_SINT (insn, 16, 7, 8); \
1075
1076 /* Collection of various things for the trace handler to use. */
1077
1078 typedef struct trace_record {
1079 IADDR pc;
1080 /* FIXME:wip */
1081 } TRACE_RECORD;
1082
1083 #endif /* CPU_CRISV10F_H */