1 /* CPU family header for sparc64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1999 Cygnus Solutions, Inc.
7 This file is part of the Cygnus Simulators.
15 /* Maximum number of instructions that are fetched at a time.
16 This is for LIW type instructions sets (e.g. m32r). */
17 #define MAX_LIW_INSNS 1
19 /* Maximum number of instructions that can be executed in parallel. */
20 #define MAX_PARALLEL_INSNS 1
22 /* CPU state information. */
24 /* Hardware elements. */
28 #define GET_H_PC() CPU (h_pc)
29 #define SET_H_PC(x) (CPU (h_pc) = (x))
32 #define GET_H_NPC() CPU (h_npc)
33 #define SET_H_NPC(x) (CPU (h_npc) = (x))
34 /* GET_H_GR macro user-written */
35 /* SET_H_GR macro user-written */
38 #define GET_H_ICC_C() CPU (h_icc_c)
39 #define SET_H_ICC_C(x) (CPU (h_icc_c) = (x))
40 /* icc negative bit */
42 #define GET_H_ICC_N() CPU (h_icc_n)
43 #define SET_H_ICC_N(x) (CPU (h_icc_n) = (x))
44 /* icc overflow bit */
46 #define GET_H_ICC_V() CPU (h_icc_v)
47 #define SET_H_ICC_V(x) (CPU (h_icc_v) = (x))
50 #define GET_H_ICC_Z() CPU (h_icc_z)
51 #define SET_H_ICC_Z(x) (CPU (h_icc_z) = (x))
54 #define GET_H_XCC_C() CPU (h_xcc_c)
55 #define SET_H_XCC_C(x) (CPU (h_xcc_c) = (x))
56 /* xcc negative bit */
58 #define GET_H_XCC_N() CPU (h_xcc_n)
59 #define SET_H_XCC_N(x) (CPU (h_xcc_n) = (x))
60 /* xcc overflow bit */
62 #define GET_H_XCC_V() CPU (h_xcc_v)
63 #define SET_H_XCC_V(x) (CPU (h_xcc_v) = (x))
66 #define GET_H_XCC_Z() CPU (h_xcc_z)
67 #define SET_H_XCC_Z(x) (CPU (h_xcc_z) = (x))
68 /* GET_H_Y macro user-written */
69 /* SET_H_Y macro user-written */
70 /* ancilliary state registers */
72 #define GET_H_ASR(a1) CPU (h_asr)[a1]
73 #define SET_H_ASR(a1, x) (CPU (h_asr)[a1] = (x))
74 /* annul next insn? - assists execution */
76 #define GET_H_ANNUL_P() CPU (h_annul_p)
77 #define SET_H_ANNUL_P(x) (CPU (h_annul_p) = (x))
78 /* floating point regs */
80 #define GET_H_FR(a1) CPU (h_fr)[a1]
81 #define SET_H_FR(a1, x) (CPU (h_fr)[a1] = (x))
84 #define GET_H_VER() CPU (h_ver)
85 #define SET_H_VER(x) (CPU (h_ver) = (x))
88 #define GET_H_PSTATE() CPU (h_pstate)
89 #define SET_H_PSTATE(x) (CPU (h_pstate) = (x))
90 /* trap base address */
92 #define GET_H_TBA() CPU (h_tba)
93 #define SET_H_TBA(x) (CPU (h_tba) = (x))
96 #define GET_H_TT() CPU (h_tt)
97 #define SET_H_TT(x) (CPU (h_tt) = (x))
100 #define GET_H_TPC() CPU (h_tpc)
101 #define SET_H_TPC(x) (CPU (h_tpc) = (x))
104 #define GET_H_TNPC() CPU (h_tnpc)
105 #define SET_H_TNPC(x) (CPU (h_tnpc) = (x))
108 #define GET_H_TSTATE() CPU (h_tstate)
109 #define SET_H_TSTATE(x) (CPU (h_tstate) = (x))
112 #define GET_H_TL() CPU (h_tl)
113 #define SET_H_TL(x) (CPU (h_tl) = (x))
114 /* address space identifier */
116 #define GET_H_ASI() CPU (h_asi)
117 #define SET_H_ASI(x) (CPU (h_asi) = (x))
120 #define GET_H_TICK() CPU (h_tick)
121 #define SET_H_TICK(x) (CPU (h_tick) = (x))
122 /* savable window registers */
124 #define GET_H_CANSAVE() CPU (h_cansave)
125 #define SET_H_CANSAVE(x) (CPU (h_cansave) = (x))
126 /* restorable window registers */
128 #define GET_H_CANRESTORE() CPU (h_canrestore)
129 #define SET_H_CANRESTORE(x) (CPU (h_canrestore) = (x))
130 /* other window registers */
132 #define GET_H_OTHERWIN() CPU (h_otherwin)
133 #define SET_H_OTHERWIN(x) (CPU (h_otherwin) = (x))
134 /* clean window registers */
136 #define GET_H_CLEANWIN() CPU (h_cleanwin)
137 #define SET_H_CLEANWIN(x) (CPU (h_cleanwin) = (x))
140 #define GET_H_WSTATE() CPU (h_wstate)
141 #define SET_H_WSTATE(x) (CPU (h_wstate) = (x))
144 #define GET_H_FCC0() CPU (h_fcc0)
145 #define SET_H_FCC0(x) (CPU (h_fcc0) = (x))
148 #define GET_H_FCC1() CPU (h_fcc1)
149 #define SET_H_FCC1(x) (CPU (h_fcc1) = (x))
152 #define GET_H_FCC2() CPU (h_fcc2)
153 #define SET_H_FCC2(x) (CPU (h_fcc2) = (x))
156 #define GET_H_FCC3() CPU (h_fcc3)
157 #define SET_H_FCC3(x) (CPU (h_fcc3) = (x))
158 /* fsr rounding direction */
160 #define GET_H_FSR_RD() CPU (h_fsr_rd)
161 #define SET_H_FSR_RD(x) (CPU (h_fsr_rd) = (x))
162 /* fsr trap enable mask */
164 #define GET_H_FSR_TEM() CPU (h_fsr_tem)
165 #define SET_H_FSR_TEM(x) (CPU (h_fsr_tem) = (x))
166 /* fsr nonstandard fp */
168 #define GET_H_FSR_NS() CPU (h_fsr_ns)
169 #define SET_H_FSR_NS(x) (CPU (h_fsr_ns) = (x))
172 #define GET_H_FSR_VER() CPU (h_fsr_ver)
173 #define SET_H_FSR_VER(x) (CPU (h_fsr_ver) = (x))
174 /* fsr fp trap type */
176 #define GET_H_FSR_FTT() CPU (h_fsr_ftt)
177 #define SET_H_FSR_FTT(x) (CPU (h_fsr_ftt) = (x))
178 /* fsr queue not empty */
180 #define GET_H_FSR_QNE() CPU (h_fsr_qne)
181 #define SET_H_FSR_QNE(x) (CPU (h_fsr_qne) = (x))
182 /* fsr accrued exception */
184 #define GET_H_FSR_AEXC() CPU (h_fsr_aexc)
185 #define SET_H_FSR_AEXC(x) (CPU (h_fsr_aexc) = (x))
186 /* fsr current exception */
188 #define GET_H_FSR_CEXC() CPU (h_fsr_cexc)
189 #define SET_H_FSR_CEXC(x) (CPU (h_fsr_cexc) = (x))
192 #define GET_H_FPSR_FEF() CPU (h_fpsr_fef)
193 #define SET_H_FPSR_FEF(x) (CPU (h_fpsr_fef) = (x))
194 /* fpsr dirty upper */
196 #define GET_H_FPSR_DU() CPU (h_fpsr_du)
197 #define SET_H_FPSR_DU(x) (CPU (h_fpsr_du) = (x))
198 /* fpsr dirty lower */
200 #define GET_H_FPSR_DL() CPU (h_fpsr_dl)
201 #define SET_H_FPSR_DL(x) (CPU (h_fpsr_dl) = (x))
202 /* GET_H_FPSR macro user-written */
203 /* SET_H_FPSR macro user-written */
205 #define CPU_CGEN_HW(cpu) (& (cpu)->cpu_data.hardware)
208 /* Cover fns for register access. */
209 USI sparc64_h_pc_get (SIM_CPU *);
210 void sparc64_h_pc_set (SIM_CPU *, USI);
211 SI sparc64_h_npc_get (SIM_CPU *);
212 void sparc64_h_npc_set (SIM_CPU *, SI);
213 SI sparc64_h_gr_get (SIM_CPU *, UINT);
214 void sparc64_h_gr_set (SIM_CPU *, UINT, SI);
215 BI sparc64_h_icc_c_get (SIM_CPU *);
216 void sparc64_h_icc_c_set (SIM_CPU *, BI);
217 BI sparc64_h_icc_n_get (SIM_CPU *);
218 void sparc64_h_icc_n_set (SIM_CPU *, BI);
219 BI sparc64_h_icc_v_get (SIM_CPU *);
220 void sparc64_h_icc_v_set (SIM_CPU *, BI);
221 BI sparc64_h_icc_z_get (SIM_CPU *);
222 void sparc64_h_icc_z_set (SIM_CPU *, BI);
223 BI sparc64_h_xcc_c_get (SIM_CPU *);
224 void sparc64_h_xcc_c_set (SIM_CPU *, BI);
225 BI sparc64_h_xcc_n_get (SIM_CPU *);
226 void sparc64_h_xcc_n_set (SIM_CPU *, BI);
227 BI sparc64_h_xcc_v_get (SIM_CPU *);
228 void sparc64_h_xcc_v_set (SIM_CPU *, BI);
229 BI sparc64_h_xcc_z_get (SIM_CPU *);
230 void sparc64_h_xcc_z_set (SIM_CPU *, BI);
231 SI sparc64_h_y_get (SIM_CPU *);
232 void sparc64_h_y_set (SIM_CPU *, SI);
233 SI sparc64_h_asr_get (SIM_CPU *, UINT);
234 void sparc64_h_asr_set (SIM_CPU *, UINT, SI);
235 BI sparc64_h_annul_p_get (SIM_CPU *);
236 void sparc64_h_annul_p_set (SIM_CPU *, BI);
237 SF sparc64_h_fr_get (SIM_CPU *, UINT);
238 void sparc64_h_fr_set (SIM_CPU *, UINT, SF);
239 UDI sparc64_h_ver_get (SIM_CPU *);
240 void sparc64_h_ver_set (SIM_CPU *, UDI);
241 UDI sparc64_h_pstate_get (SIM_CPU *);
242 void sparc64_h_pstate_set (SIM_CPU *, UDI);
243 UDI sparc64_h_tba_get (SIM_CPU *);
244 void sparc64_h_tba_set (SIM_CPU *, UDI);
245 UDI sparc64_h_tt_get (SIM_CPU *);
246 void sparc64_h_tt_set (SIM_CPU *, UDI);
247 UDI sparc64_h_tpc_get (SIM_CPU *);
248 void sparc64_h_tpc_set (SIM_CPU *, UDI);
249 UDI sparc64_h_tnpc_get (SIM_CPU *);
250 void sparc64_h_tnpc_set (SIM_CPU *, UDI);
251 UDI sparc64_h_tstate_get (SIM_CPU *);
252 void sparc64_h_tstate_set (SIM_CPU *, UDI);
253 UQI sparc64_h_tl_get (SIM_CPU *);
254 void sparc64_h_tl_set (SIM_CPU *, UQI);
255 UQI sparc64_h_asi_get (SIM_CPU *);
256 void sparc64_h_asi_set (SIM_CPU *, UQI);
257 UDI sparc64_h_tick_get (SIM_CPU *);
258 void sparc64_h_tick_set (SIM_CPU *, UDI);
259 UDI sparc64_h_cansave_get (SIM_CPU *);
260 void sparc64_h_cansave_set (SIM_CPU *, UDI);
261 UDI sparc64_h_canrestore_get (SIM_CPU *);
262 void sparc64_h_canrestore_set (SIM_CPU *, UDI);
263 UDI sparc64_h_otherwin_get (SIM_CPU *);
264 void sparc64_h_otherwin_set (SIM_CPU *, UDI);
265 UDI sparc64_h_cleanwin_get (SIM_CPU *);
266 void sparc64_h_cleanwin_set (SIM_CPU *, UDI);
267 UDI sparc64_h_wstate_get (SIM_CPU *);
268 void sparc64_h_wstate_set (SIM_CPU *, UDI);
269 UQI sparc64_h_fcc0_get (SIM_CPU *);
270 void sparc64_h_fcc0_set (SIM_CPU *, UQI);
271 UQI sparc64_h_fcc1_get (SIM_CPU *);
272 void sparc64_h_fcc1_set (SIM_CPU *, UQI);
273 UQI sparc64_h_fcc2_get (SIM_CPU *);
274 void sparc64_h_fcc2_set (SIM_CPU *, UQI);
275 UQI sparc64_h_fcc3_get (SIM_CPU *);
276 void sparc64_h_fcc3_set (SIM_CPU *, UQI);
277 UQI sparc64_h_fsr_rd_get (SIM_CPU *);
278 void sparc64_h_fsr_rd_set (SIM_CPU *, UQI);
279 UQI sparc64_h_fsr_tem_get (SIM_CPU *);
280 void sparc64_h_fsr_tem_set (SIM_CPU *, UQI);
281 BI sparc64_h_fsr_ns_get (SIM_CPU *);
282 void sparc64_h_fsr_ns_set (SIM_CPU *, BI);
283 UQI sparc64_h_fsr_ver_get (SIM_CPU *);
284 void sparc64_h_fsr_ver_set (SIM_CPU *, UQI);
285 UQI sparc64_h_fsr_ftt_get (SIM_CPU *);
286 void sparc64_h_fsr_ftt_set (SIM_CPU *, UQI);
287 BI sparc64_h_fsr_qne_get (SIM_CPU *);
288 void sparc64_h_fsr_qne_set (SIM_CPU *, BI);
289 UQI sparc64_h_fsr_aexc_get (SIM_CPU *);
290 void sparc64_h_fsr_aexc_set (SIM_CPU *, UQI);
291 UQI sparc64_h_fsr_cexc_get (SIM_CPU *);
292 void sparc64_h_fsr_cexc_set (SIM_CPU *, UQI);
293 BI sparc64_h_fpsr_fef_get (SIM_CPU *);
294 void sparc64_h_fpsr_fef_set (SIM_CPU *, BI);
295 BI sparc64_h_fpsr_du_get (SIM_CPU *);
296 void sparc64_h_fpsr_du_set (SIM_CPU *, BI);
297 BI sparc64_h_fpsr_dl_get (SIM_CPU *);
298 void sparc64_h_fpsr_dl_set (SIM_CPU *, BI);
299 UQI sparc64_h_fpsr_get (SIM_CPU *);
300 void sparc64_h_fpsr_set (SIM_CPU *, UQI);
302 /* These must be hand-written. */
303 extern CPUREG_FETCH_FN sparc64_fetch_register;
304 extern CPUREG_STORE_FN sparc64_store_register;
308 } MODEL_SPARC64_DEF_DATA;
310 /* The ARGBUF struct. */
312 /* These are the baseclass definitions. */
317 /* cpu specific data follows */
324 ??? SCACHE used to contain more than just argbuf. We could delete the
325 type entirely and always just use ARGBUF, but for future concerns and as
326 a level of abstraction it is left in. */
329 struct argbuf argbuf;
332 /* Macros to simplify extraction, reading and semantic code.
333 These define and assign the local vars that contain the insn's fields. */
335 #define EXTRACT_IFMT_EMPTY_VARS \
336 /* Instruction fields. */ \
338 #define EXTRACT_IFMT_EMPTY_CODE \
341 #define EXTRACT_IFMT_BEQZ_VARS \
342 /* Instruction fields. */ \
354 #define EXTRACT_IFMT_BEQZ_CODE \
356 f_disp16_hi = EXTRACT_UINT (insn, 32, 10, 2); \
357 f_disp16_lo = EXTRACT_UINT (insn, 32, 18, 14); \
359 f_disp16 = ((((f_disp16_hi) << (14))) | (f_disp16_low));\
361 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
362 f_p = EXTRACT_UINT (insn, 32, 19, 1); \
363 f_op2 = EXTRACT_UINT (insn, 32, 24, 3); \
364 f_fmt2_rcond = EXTRACT_UINT (insn, 32, 27, 3); \
365 f_bpr_res28_1 = EXTRACT_INT (insn, 32, 28, 1); \
366 f_a = EXTRACT_UINT (insn, 32, 29, 1); \
367 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
369 #define EXTRACT_IFMT_BPCC_BA_VARS \
370 /* Instruction fields. */ \
380 #define EXTRACT_IFMT_BPCC_BA_CODE \
382 f_disp19 = EXTRACT_INT (insn, 32, 13, 19); \
383 f_p = EXTRACT_UINT (insn, 32, 19, 1); \
384 f_fmt2_cc0 = EXTRACT_UINT (insn, 32, 20, 1); \
385 f_fmt2_cc1 = EXTRACT_UINT (insn, 32, 21, 1); \
386 f_op2 = EXTRACT_UINT (insn, 32, 24, 3); \
387 f_fmt2_cond = EXTRACT_UINT (insn, 32, 28, 4); \
388 f_a = EXTRACT_UINT (insn, 32, 29, 1); \
389 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
391 #define EXTRACT_IFMT_DONE_VARS \
392 /* Instruction fields. */ \
398 #define EXTRACT_IFMT_DONE_CODE \
400 f_res_18_19 = EXTRACT_INT (insn, 32, 18, 19); \
401 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
402 f_fcn = EXTRACT_UINT (insn, 32, 29, 5); \
403 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
405 #define EXTRACT_IFMT_FLUSH_VARS \
406 /* Instruction fields. */ \
415 #define EXTRACT_IFMT_FLUSH_CODE \
417 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
418 f_res_asi = EXTRACT_INT (insn, 32, 12, 8); \
419 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
420 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
421 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
422 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
423 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
425 #define EXTRACT_IFMT_FLUSH_IMM_VARS \
426 /* Instruction fields. */ \
434 #define EXTRACT_IFMT_FLUSH_IMM_CODE \
436 f_simm13 = EXTRACT_INT (insn, 32, 12, 13); \
437 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
438 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
439 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
440 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
441 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
443 #define EXTRACT_IFMT_FLUSHW_VARS \
444 /* Instruction fields. */ \
452 #define EXTRACT_IFMT_FLUSHW_CODE \
454 f_simm13 = EXTRACT_INT (insn, 32, 12, 13); \
455 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
456 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
457 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
458 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
459 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
461 #define EXTRACT_IFMT_IMPDEP1_VARS \
462 /* Instruction fields. */ \
468 #define EXTRACT_IFMT_IMPDEP1_CODE \
470 f_impdep19 = EXTRACT_INT (insn, 32, 18, 19); \
471 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
472 f_impdep5 = EXTRACT_INT (insn, 32, 29, 5); \
473 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
475 #define EXTRACT_IFMT_MEMBAR_VARS \
476 /* Instruction fields. */ \
478 INT f_membar_res12_6; \
485 #define EXTRACT_IFMT_MEMBAR_CODE \
487 f_membarmask = EXTRACT_UINT (insn, 32, 6, 7); \
488 f_membar_res12_6 = EXTRACT_INT (insn, 32, 12, 6); \
489 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
490 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
491 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
492 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
493 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
495 #define EXTRACT_IFMT_MOVA_ICC_ICC_VARS \
496 /* Instruction fields. */ \
498 INT f_fmt4_res10_6; \
507 #define EXTRACT_IFMT_MOVA_ICC_ICC_CODE \
509 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
510 f_fmt4_res10_6 = EXTRACT_INT (insn, 32, 10, 6); \
511 f_fmt4_cc1_0 = EXTRACT_UINT (insn, 32, 12, 2); \
512 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
513 f_fmt4_cc2 = EXTRACT_UINT (insn, 32, 18, 1); \
514 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
515 f_fmt2_cond = EXTRACT_UINT (insn, 32, 28, 4); \
516 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
517 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
519 #define EXTRACT_IFMT_MOVA_IMM_ICC_ICC_VARS \
520 /* Instruction fields. */ \
530 #define EXTRACT_IFMT_MOVA_IMM_ICC_ICC_CODE \
532 f_simm11 = EXTRACT_INT (insn, 32, 10, 11); \
533 f_fmt4_cc1_0 = EXTRACT_UINT (insn, 32, 12, 2); \
534 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
535 f_fmt4_cc2 = EXTRACT_UINT (insn, 32, 18, 1); \
536 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
537 f_fmt2_cond = EXTRACT_UINT (insn, 32, 28, 4); \
538 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
539 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
541 #define EXTRACT_IFMT_LDSB_REG_REG_VARS \
542 /* Instruction fields. */ \
551 #define EXTRACT_IFMT_LDSB_REG_REG_CODE \
553 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
554 f_res_asi = EXTRACT_INT (insn, 32, 12, 8); \
555 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
556 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
557 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
558 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
559 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
561 #define EXTRACT_IFMT_LDSB_REG_IMM_VARS \
562 /* Instruction fields. */ \
570 #define EXTRACT_IFMT_LDSB_REG_IMM_CODE \
572 f_simm13 = EXTRACT_INT (insn, 32, 12, 13); \
573 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
574 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
575 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
576 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
577 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
579 #define EXTRACT_IFMT_LDSB_REG_REG_ASI_VARS \
580 /* Instruction fields. */ \
589 #define EXTRACT_IFMT_LDSB_REG_REG_ASI_CODE \
591 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
592 f_asi = EXTRACT_UINT (insn, 32, 12, 8); \
593 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
594 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
595 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
596 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
597 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
599 #define EXTRACT_IFMT_LDD_REG_REG_VARS \
600 /* Instruction fields. */ \
609 #define EXTRACT_IFMT_LDD_REG_REG_CODE \
611 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
612 f_res_asi = EXTRACT_INT (insn, 32, 12, 8); \
613 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
614 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
615 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
616 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
617 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
619 #define EXTRACT_IFMT_LDD_REG_IMM_VARS \
620 /* Instruction fields. */ \
628 #define EXTRACT_IFMT_LDD_REG_IMM_CODE \
630 f_simm13 = EXTRACT_INT (insn, 32, 12, 13); \
631 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
632 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
633 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
634 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
635 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
637 #define EXTRACT_IFMT_LDD_REG_REG_ASI_VARS \
638 /* Instruction fields. */ \
647 #define EXTRACT_IFMT_LDD_REG_REG_ASI_CODE \
649 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
650 f_asi = EXTRACT_UINT (insn, 32, 12, 8); \
651 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
652 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
653 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
654 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
655 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
657 #define EXTRACT_IFMT_FP_LD_REG_REG_VARS \
658 /* Instruction fields. */ \
667 #define EXTRACT_IFMT_FP_LD_REG_REG_CODE \
669 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
670 f_res_asi = EXTRACT_INT (insn, 32, 12, 8); \
671 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
672 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
673 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
674 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
675 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
677 #define EXTRACT_IFMT_FP_LD_REG_IMM_VARS \
678 /* Instruction fields. */ \
686 #define EXTRACT_IFMT_FP_LD_REG_IMM_CODE \
688 f_simm13 = EXTRACT_INT (insn, 32, 12, 13); \
689 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
690 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
691 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
692 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
693 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
695 #define EXTRACT_IFMT_FP_LD_REG_REG_ASI_VARS \
696 /* Instruction fields. */ \
705 #define EXTRACT_IFMT_FP_LD_REG_REG_ASI_CODE \
707 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
708 f_asi = EXTRACT_UINT (insn, 32, 12, 8); \
709 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
710 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
711 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
712 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
713 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
715 #define EXTRACT_IFMT_SETHI_VARS \
716 /* Instruction fields. */ \
722 #define EXTRACT_IFMT_SETHI_CODE \
724 f_hi22 = EXTRACT_INT (insn, 32, 21, 22); \
725 f_op2 = EXTRACT_UINT (insn, 32, 24, 3); \
726 f_rd = EXTRACT_UINT (insn, 32, 29, 5); \
727 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
729 #define EXTRACT_IFMT_UNIMP_VARS \
730 /* Instruction fields. */ \
736 #define EXTRACT_IFMT_UNIMP_CODE \
738 f_imm22 = EXTRACT_INT (insn, 32, 21, 22); \
739 f_op2 = EXTRACT_UINT (insn, 32, 24, 3); \
740 f_rd_res = EXTRACT_UINT (insn, 32, 29, 5); \
741 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
743 #define EXTRACT_IFMT_CALL_VARS \
744 /* Instruction fields. */ \
748 #define EXTRACT_IFMT_CALL_CODE \
750 f_disp30 = ((((EXTRACT_INT (insn, 32, 29, 30)) << (2))) + (pc)); \
751 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
753 #define EXTRACT_IFMT_BA_VARS \
754 /* Instruction fields. */ \
761 #define EXTRACT_IFMT_BA_CODE \
763 f_disp22 = ((((EXTRACT_INT (insn, 32, 21, 22)) << (2))) + (pc)); \
764 f_op2 = EXTRACT_UINT (insn, 32, 24, 3); \
765 f_fmt2_cond = EXTRACT_UINT (insn, 32, 28, 4); \
766 f_a = EXTRACT_UINT (insn, 32, 29, 1); \
767 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
769 #define EXTRACT_IFMT_TA_VARS \
770 /* Instruction fields. */ \
780 #define EXTRACT_IFMT_TA_CODE \
782 f_rs2 = EXTRACT_UINT (insn, 32, 4, 5); \
783 f_res_asi = EXTRACT_INT (insn, 32, 12, 8); \
784 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
785 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
786 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
787 f_fmt2_cond = EXTRACT_UINT (insn, 32, 28, 4); \
788 f_a = EXTRACT_UINT (insn, 32, 29, 1); \
789 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
791 #define EXTRACT_IFMT_TA_IMM_VARS \
792 /* Instruction fields. */ \
801 #define EXTRACT_IFMT_TA_IMM_CODE \
803 f_simm13 = EXTRACT_INT (insn, 32, 12, 13); \
804 f_i = EXTRACT_UINT (insn, 32, 13, 1); \
805 f_rs1 = EXTRACT_UINT (insn, 32, 18, 5); \
806 f_op3 = EXTRACT_UINT (insn, 32, 24, 6); \
807 f_fmt2_cond = EXTRACT_UINT (insn, 32, 28, 4); \
808 f_a = EXTRACT_UINT (insn, 32, 29, 1); \
809 f_op = EXTRACT_UINT (insn, 32, 31, 2); \
811 /* Collection of various things for the trace handler to use. */
813 typedef struct trace_record {
818 #endif /* CPU_SPARC64_H */