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