]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/m32r/cpux.h
* sim-main.h: Delete inclusion of config.h, include sim-basics.h
[thirdparty/binutils-gdb.git] / sim / m32r / cpux.h
1 /* CPU family header for m32rxf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
6
7 This file is part of the GNU Simulators.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
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 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23 */
24
25 #ifndef CPU_M32RXF_H
26 #define CPU_M32RXF_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 2
31
32 /* Maximum number of instructions that can be executed in parallel. */
33 #define MAX_PARALLEL_INSNS 2
34
35 /* CPU state information. */
36 typedef struct {
37 /* Hardware elements. */
38 struct {
39 /* program counter */
40 USI h_pc;
41 #define GET_H_PC() CPU (h_pc)
42 #define SET_H_PC(x) (CPU (h_pc) = (x))
43 /* general registers */
44 SI h_gr[16];
45 #define GET_H_GR(a1) CPU (h_gr)[a1]
46 #define SET_H_GR(a1, x) (CPU (h_gr)[a1] = (x))
47 /* control registers */
48 USI h_cr[16];
49 #define GET_H_CR(a1) CPU (h_cr)[a1]
50 #define SET_H_CR(a1, x) (CPU (h_cr)[a1] = (x))
51 /* accumulator */
52 DI h_accum;
53 #define GET_H_ACCUM() CPU (h_accum)
54 #define SET_H_ACCUM(x) (CPU (h_accum) = (x))
55 /* start-sanitize-m32rx */
56 /* accumulators */
57 DI h_accums[2];
58 /* end-sanitize-m32rx */
59 #define GET_H_ACCUMS(a1) CPU (h_accums)[a1]
60 #define SET_H_ACCUMS(a1, x) (CPU (h_accums)[a1] = (x))
61 /* condition bit */
62 BI h_cond;
63 #define GET_H_COND() CPU (h_cond)
64 #define SET_H_COND(x) (CPU (h_cond) = (x))
65 /* psw part of psw */
66 UQI h_psw;
67 #define GET_H_PSW() CPU (h_psw)
68 #define SET_H_PSW(x) (CPU (h_psw) = (x))
69 /* backup psw */
70 UQI h_bpsw;
71 #define GET_H_BPSW() CPU (h_bpsw)
72 #define SET_H_BPSW(x) (CPU (h_bpsw) = (x))
73 /* backup bpsw */
74 UQI h_bbpsw;
75 #define GET_H_BBPSW() CPU (h_bbpsw)
76 #define SET_H_BBPSW(x) (CPU (h_bbpsw) = (x))
77 /* lock */
78 BI h_lock;
79 #define GET_H_LOCK() CPU (h_lock)
80 #define SET_H_LOCK(x) (CPU (h_lock) = (x))
81 } hardware;
82 #define CPU_CGEN_HW(cpu) (& (cpu)->cpu_data.hardware)
83 } M32RXF_CPU_DATA;
84
85 /* Cover fns for register access. */
86 USI m32rxf_h_pc_get (SIM_CPU *);
87 void m32rxf_h_pc_set (SIM_CPU *, USI);
88 SI m32rxf_h_gr_get (SIM_CPU *, UINT);
89 void m32rxf_h_gr_set (SIM_CPU *, UINT, SI);
90 USI m32rxf_h_cr_get (SIM_CPU *, UINT);
91 void m32rxf_h_cr_set (SIM_CPU *, UINT, USI);
92 DI m32rxf_h_accum_get (SIM_CPU *);
93 void m32rxf_h_accum_set (SIM_CPU *, DI);
94 DI m32rxf_h_accums_get (SIM_CPU *, UINT);
95 void m32rxf_h_accums_set (SIM_CPU *, UINT, DI);
96 BI m32rxf_h_cond_get (SIM_CPU *);
97 void m32rxf_h_cond_set (SIM_CPU *, BI);
98 UQI m32rxf_h_psw_get (SIM_CPU *);
99 void m32rxf_h_psw_set (SIM_CPU *, UQI);
100 UQI m32rxf_h_bpsw_get (SIM_CPU *);
101 void m32rxf_h_bpsw_set (SIM_CPU *, UQI);
102 UQI m32rxf_h_bbpsw_get (SIM_CPU *);
103 void m32rxf_h_bbpsw_set (SIM_CPU *, UQI);
104 BI m32rxf_h_lock_get (SIM_CPU *);
105 void m32rxf_h_lock_set (SIM_CPU *, BI);
106
107 /* These must be hand-written. */
108 extern CPUREG_FETCH_FN m32rxf_fetch_register;
109 extern CPUREG_STORE_FN m32rxf_store_register;
110
111 typedef struct {
112 int empty;
113 } MODEL_M32RX_DATA;
114
115 /* The ARGBUF struct. */
116 struct argbuf {
117 /* These are the baseclass definitions. */
118 PCADDR addr;
119 const IDESC *idesc;
120 /* cpu specific data follows */
121 union sem semantic;
122 int written;
123 union {
124 struct { /* e.g. add $dr,$sr */
125 SI * f_r1;
126 SI * f_r2;
127 unsigned char in_dr;
128 unsigned char in_sr;
129 unsigned char out_dr;
130 } fmt_add;
131 struct { /* e.g. add3 $dr,$sr,$hash$slo16 */
132 SI * f_r1;
133 SI * f_r2;
134 HI f_simm16;
135 unsigned char in_sr;
136 unsigned char out_dr;
137 } fmt_add3;
138 struct { /* e.g. and3 $dr,$sr,$uimm16 */
139 SI * f_r1;
140 SI * f_r2;
141 USI f_uimm16;
142 unsigned char in_sr;
143 unsigned char out_dr;
144 } fmt_and3;
145 struct { /* e.g. or3 $dr,$sr,$hash$ulo16 */
146 SI * f_r1;
147 SI * f_r2;
148 UHI f_uimm16;
149 unsigned char in_sr;
150 unsigned char out_dr;
151 } fmt_or3;
152 struct { /* e.g. addi $dr,$simm8 */
153 SI * f_r1;
154 SI f_simm8;
155 unsigned char in_dr;
156 unsigned char out_dr;
157 } fmt_addi;
158 struct { /* e.g. addv $dr,$sr */
159 SI * f_r1;
160 SI * f_r2;
161 unsigned char in_dr;
162 unsigned char in_sr;
163 unsigned char out_dr;
164 } fmt_addv;
165 struct { /* e.g. addv3 $dr,$sr,$simm16 */
166 SI * f_r1;
167 SI * f_r2;
168 SI f_simm16;
169 unsigned char in_sr;
170 unsigned char out_dr;
171 } fmt_addv3;
172 struct { /* e.g. addx $dr,$sr */
173 SI * f_r1;
174 SI * f_r2;
175 unsigned char in_dr;
176 unsigned char in_sr;
177 unsigned char out_dr;
178 } fmt_addx;
179 struct { /* e.g. cmp $src1,$src2 */
180 SI * f_r1;
181 SI * f_r2;
182 unsigned char in_src1;
183 unsigned char in_src2;
184 } fmt_cmp;
185 struct { /* e.g. cmpi $src2,$simm16 */
186 SI * f_r2;
187 SI f_simm16;
188 unsigned char in_src2;
189 } fmt_cmpi;
190 struct { /* e.g. cmpz $src2 */
191 SI * f_r2;
192 unsigned char in_src2;
193 } fmt_cmpz;
194 struct { /* e.g. div $dr,$sr */
195 SI * f_r1;
196 SI * f_r2;
197 unsigned char in_sr;
198 unsigned char in_dr;
199 unsigned char out_dr;
200 } fmt_div;
201 struct { /* e.g. ld $dr,@$sr */
202 SI * f_r1;
203 SI * f_r2;
204 unsigned char in_sr;
205 unsigned char out_dr;
206 } fmt_ld;
207 struct { /* e.g. ld $dr,@($slo16,$sr) */
208 SI * f_r1;
209 SI * f_r2;
210 HI f_simm16;
211 unsigned char in_sr;
212 unsigned char out_dr;
213 } fmt_ld_d;
214 struct { /* e.g. ldb $dr,@$sr */
215 SI * f_r1;
216 SI * f_r2;
217 unsigned char in_sr;
218 unsigned char out_dr;
219 } fmt_ldb;
220 struct { /* e.g. ldb $dr,@($slo16,$sr) */
221 SI * f_r1;
222 SI * f_r2;
223 HI f_simm16;
224 unsigned char in_sr;
225 unsigned char out_dr;
226 } fmt_ldb_d;
227 struct { /* e.g. ldh $dr,@$sr */
228 SI * f_r1;
229 SI * f_r2;
230 unsigned char in_sr;
231 unsigned char out_dr;
232 } fmt_ldh;
233 struct { /* e.g. ldh $dr,@($slo16,$sr) */
234 SI * f_r1;
235 SI * f_r2;
236 HI f_simm16;
237 unsigned char in_sr;
238 unsigned char out_dr;
239 } fmt_ldh_d;
240 struct { /* e.g. ld $dr,@$sr+ */
241 SI * f_r1;
242 SI * f_r2;
243 unsigned char in_sr;
244 unsigned char out_dr;
245 unsigned char out_sr;
246 } fmt_ld_plus;
247 struct { /* e.g. ld24 $dr,$uimm24 */
248 SI * f_r1;
249 ADDR f_uimm24;
250 unsigned char out_dr;
251 } fmt_ld24;
252 struct { /* e.g. ldi8 $dr,$simm8 */
253 SI * f_r1;
254 SI f_simm8;
255 unsigned char out_dr;
256 } fmt_ldi8;
257 struct { /* e.g. ldi16 $dr,$hash$slo16 */
258 SI * f_r1;
259 HI f_simm16;
260 unsigned char out_dr;
261 } fmt_ldi16;
262 struct { /* e.g. lock $dr,@$sr */
263 SI * f_r1;
264 SI * f_r2;
265 unsigned char in_sr;
266 unsigned char out_dr;
267 } fmt_lock;
268 struct { /* e.g. machi $src1,$src2,$acc */
269 SI * f_r1;
270 UINT f_acc;
271 SI * f_r2;
272 unsigned char in_src1;
273 unsigned char in_src2;
274 } fmt_machi_a;
275 struct { /* e.g. mulhi $src1,$src2,$acc */
276 SI * f_r1;
277 UINT f_acc;
278 SI * f_r2;
279 unsigned char in_src1;
280 unsigned char in_src2;
281 } fmt_mulhi_a;
282 struct { /* e.g. mv $dr,$sr */
283 SI * f_r1;
284 SI * f_r2;
285 unsigned char in_sr;
286 unsigned char out_dr;
287 } fmt_mv;
288 struct { /* e.g. mvfachi $dr,$accs */
289 SI * f_r1;
290 UINT f_accs;
291 unsigned char out_dr;
292 } fmt_mvfachi_a;
293 struct { /* e.g. mvfc $dr,$scr */
294 SI * f_r1;
295 UINT f_r2;
296 unsigned char out_dr;
297 } fmt_mvfc;
298 struct { /* e.g. mvtachi $src1,$accs */
299 SI * f_r1;
300 UINT f_accs;
301 unsigned char in_src1;
302 } fmt_mvtachi_a;
303 struct { /* e.g. mvtc $sr,$dcr */
304 UINT f_r1;
305 SI * f_r2;
306 unsigned char in_sr;
307 } fmt_mvtc;
308 struct { /* e.g. nop */
309 int empty;
310 } fmt_nop;
311 struct { /* e.g. rac $accd,$accs,$imm1 */
312 UINT f_accd;
313 UINT f_accs;
314 USI f_imm1;
315 } fmt_rac_dsi;
316 struct { /* e.g. seth $dr,$hash$hi16 */
317 SI * f_r1;
318 UHI f_hi16;
319 unsigned char out_dr;
320 } fmt_seth;
321 struct { /* e.g. sll3 $dr,$sr,$simm16 */
322 SI * f_r1;
323 SI * f_r2;
324 SI f_simm16;
325 unsigned char in_sr;
326 unsigned char out_dr;
327 } fmt_sll3;
328 struct { /* e.g. slli $dr,$uimm5 */
329 SI * f_r1;
330 USI f_uimm5;
331 unsigned char in_dr;
332 unsigned char out_dr;
333 } fmt_slli;
334 struct { /* e.g. st $src1,@$src2 */
335 SI * f_r1;
336 SI * f_r2;
337 unsigned char in_src2;
338 unsigned char in_src1;
339 } fmt_st;
340 struct { /* e.g. st $src1,@($slo16,$src2) */
341 SI * f_r1;
342 SI * f_r2;
343 HI f_simm16;
344 unsigned char in_src2;
345 unsigned char in_src1;
346 } fmt_st_d;
347 struct { /* e.g. stb $src1,@$src2 */
348 SI * f_r1;
349 SI * f_r2;
350 unsigned char in_src2;
351 unsigned char in_src1;
352 } fmt_stb;
353 struct { /* e.g. stb $src1,@($slo16,$src2) */
354 SI * f_r1;
355 SI * f_r2;
356 HI f_simm16;
357 unsigned char in_src2;
358 unsigned char in_src1;
359 } fmt_stb_d;
360 struct { /* e.g. sth $src1,@$src2 */
361 SI * f_r1;
362 SI * f_r2;
363 unsigned char in_src2;
364 unsigned char in_src1;
365 } fmt_sth;
366 struct { /* e.g. sth $src1,@($slo16,$src2) */
367 SI * f_r1;
368 SI * f_r2;
369 HI f_simm16;
370 unsigned char in_src2;
371 unsigned char in_src1;
372 } fmt_sth_d;
373 struct { /* e.g. st $src1,@+$src2 */
374 SI * f_r1;
375 SI * f_r2;
376 unsigned char in_src2;
377 unsigned char in_src1;
378 unsigned char out_src2;
379 } fmt_st_plus;
380 struct { /* e.g. unlock $src1,@$src2 */
381 SI * f_r1;
382 SI * f_r2;
383 unsigned char in_src2;
384 unsigned char in_src1;
385 } fmt_unlock;
386 struct { /* e.g. satb $dr,$sr */
387 SI * f_r1;
388 SI * f_r2;
389 unsigned char in_sr;
390 unsigned char out_dr;
391 } fmt_satb;
392 struct { /* e.g. sat $dr,$sr */
393 SI * f_r1;
394 SI * f_r2;
395 unsigned char in_sr;
396 unsigned char out_dr;
397 } fmt_sat;
398 struct { /* e.g. sadd */
399 int empty;
400 } fmt_sadd;
401 struct { /* e.g. macwu1 $src1,$src2 */
402 SI * f_r1;
403 SI * f_r2;
404 unsigned char in_src1;
405 unsigned char in_src2;
406 } fmt_macwu1;
407 struct { /* e.g. msblo $src1,$src2 */
408 SI * f_r1;
409 SI * f_r2;
410 unsigned char in_src1;
411 unsigned char in_src2;
412 } fmt_msblo;
413 struct { /* e.g. mulwu1 $src1,$src2 */
414 SI * f_r1;
415 SI * f_r2;
416 unsigned char in_src1;
417 unsigned char in_src2;
418 } fmt_mulwu1;
419 struct { /* e.g. sc */
420 int empty;
421 } fmt_sc;
422 /* cti insns, kept separately so addr_cache is in fixed place */
423 struct {
424 union {
425 struct { /* e.g. bc.s $disp8 */
426 IADDR f_disp8;
427 } fmt_bc8;
428 struct { /* e.g. bc.l $disp24 */
429 IADDR f_disp24;
430 } fmt_bc24;
431 struct { /* e.g. beq $src1,$src2,$disp16 */
432 SI * f_r1;
433 SI * f_r2;
434 IADDR f_disp16;
435 unsigned char in_src1;
436 unsigned char in_src2;
437 } fmt_beq;
438 struct { /* e.g. beqz $src2,$disp16 */
439 SI * f_r2;
440 IADDR f_disp16;
441 unsigned char in_src2;
442 } fmt_beqz;
443 struct { /* e.g. bl.s $disp8 */
444 IADDR f_disp8;
445 unsigned char out_h_gr_14;
446 } fmt_bl8;
447 struct { /* e.g. bl.l $disp24 */
448 IADDR f_disp24;
449 unsigned char out_h_gr_14;
450 } fmt_bl24;
451 struct { /* e.g. bcl.s $disp8 */
452 IADDR f_disp8;
453 unsigned char out_h_gr_14;
454 } fmt_bcl8;
455 struct { /* e.g. bcl.l $disp24 */
456 IADDR f_disp24;
457 unsigned char out_h_gr_14;
458 } fmt_bcl24;
459 struct { /* e.g. bra.s $disp8 */
460 IADDR f_disp8;
461 } fmt_bra8;
462 struct { /* e.g. bra.l $disp24 */
463 IADDR f_disp24;
464 } fmt_bra24;
465 struct { /* e.g. jc $sr */
466 SI * f_r2;
467 unsigned char in_sr;
468 } fmt_jc;
469 struct { /* e.g. jl $sr */
470 SI * f_r2;
471 unsigned char in_sr;
472 unsigned char out_h_gr_14;
473 } fmt_jl;
474 struct { /* e.g. jmp $sr */
475 SI * f_r2;
476 unsigned char in_sr;
477 } fmt_jmp;
478 struct { /* e.g. rte */
479 int empty;
480 } fmt_rte;
481 struct { /* e.g. trap $uimm4 */
482 USI f_uimm4;
483 } fmt_trap;
484 } fields;
485 #if WITH_SCACHE_PBB_M32RXF
486 SEM_PC addr_cache;
487 #endif
488 } cti;
489 #if WITH_SCACHE_PBB_M32RXF
490 /* Writeback handler. */
491 struct {
492 /* Pointer to argbuf entry for insn whose results need writing back. */
493 const struct argbuf *abuf;
494 } write;
495 /* x-before handler */
496 struct {
497 /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
498 int first_p;
499 } before;
500 /* x-after handler */
501 struct {
502 int empty;
503 } after;
504 /* This entry is used to terminate each pbb. */
505 struct {
506 /* Number of insns in pbb. */
507 int insn_count;
508 /* Next pbb to execute. */
509 SCACHE *next;
510 } chain;
511 #endif
512 } fields;
513 };
514
515 /* A cached insn.
516
517 ??? SCACHE used to contain more than just argbuf. We could delete the
518 type entirely and always just use ARGBUF, but for future concerns and as
519 a level of abstraction it is left in. */
520
521 struct scache {
522 struct argbuf argbuf;
523 };
524
525 /* Macros to simplify extraction, reading and semantic code.
526 These define and assign the local vars that contain the insn's fields. */
527
528 #define EXTRACT_FMT_ADD_VARS \
529 /* Instruction fields. */ \
530 UINT f_op1; \
531 UINT f_r1; \
532 UINT f_op2; \
533 UINT f_r2; \
534 unsigned int length;
535 #define EXTRACT_FMT_ADD_CODE \
536 length = 2; \
537 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
538 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
539 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
540 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
541
542 #define EXTRACT_FMT_ADD3_VARS \
543 /* Instruction fields. */ \
544 UINT f_op1; \
545 UINT f_r1; \
546 UINT f_op2; \
547 UINT f_r2; \
548 int f_simm16; \
549 unsigned int length;
550 #define EXTRACT_FMT_ADD3_CODE \
551 length = 4; \
552 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
553 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
554 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
555 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
556 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
557
558 #define EXTRACT_FMT_AND3_VARS \
559 /* Instruction fields. */ \
560 UINT f_op1; \
561 UINT f_r1; \
562 UINT f_op2; \
563 UINT f_r2; \
564 UINT f_uimm16; \
565 unsigned int length;
566 #define EXTRACT_FMT_AND3_CODE \
567 length = 4; \
568 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
569 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
570 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
571 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
572 f_uimm16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
573
574 #define EXTRACT_FMT_OR3_VARS \
575 /* Instruction fields. */ \
576 UINT f_op1; \
577 UINT f_r1; \
578 UINT f_op2; \
579 UINT f_r2; \
580 UINT f_uimm16; \
581 unsigned int length;
582 #define EXTRACT_FMT_OR3_CODE \
583 length = 4; \
584 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
585 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
586 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
587 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
588 f_uimm16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
589
590 #define EXTRACT_FMT_ADDI_VARS \
591 /* Instruction fields. */ \
592 UINT f_op1; \
593 UINT f_r1; \
594 int f_simm8; \
595 unsigned int length;
596 #define EXTRACT_FMT_ADDI_CODE \
597 length = 2; \
598 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
599 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
600 f_simm8 = EXTRACT_SIGNED (insn, 16, 8, 8); \
601
602 #define EXTRACT_FMT_ADDV_VARS \
603 /* Instruction fields. */ \
604 UINT f_op1; \
605 UINT f_r1; \
606 UINT f_op2; \
607 UINT f_r2; \
608 unsigned int length;
609 #define EXTRACT_FMT_ADDV_CODE \
610 length = 2; \
611 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
612 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
613 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
614 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
615
616 #define EXTRACT_FMT_ADDV3_VARS \
617 /* Instruction fields. */ \
618 UINT f_op1; \
619 UINT f_r1; \
620 UINT f_op2; \
621 UINT f_r2; \
622 int f_simm16; \
623 unsigned int length;
624 #define EXTRACT_FMT_ADDV3_CODE \
625 length = 4; \
626 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
627 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
628 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
629 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
630 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
631
632 #define EXTRACT_FMT_ADDX_VARS \
633 /* Instruction fields. */ \
634 UINT f_op1; \
635 UINT f_r1; \
636 UINT f_op2; \
637 UINT f_r2; \
638 unsigned int length;
639 #define EXTRACT_FMT_ADDX_CODE \
640 length = 2; \
641 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
642 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
643 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
644 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
645
646 #define EXTRACT_FMT_BC8_VARS \
647 /* Instruction fields. */ \
648 UINT f_op1; \
649 UINT f_r1; \
650 int f_disp8; \
651 unsigned int length;
652 #define EXTRACT_FMT_BC8_CODE \
653 length = 2; \
654 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
655 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
656 f_disp8 = ((((EXTRACT_SIGNED (insn, 16, 8, 8)) << (2))) + (((pc) & (-4)))); \
657
658 #define EXTRACT_FMT_BC24_VARS \
659 /* Instruction fields. */ \
660 UINT f_op1; \
661 UINT f_r1; \
662 int f_disp24; \
663 unsigned int length;
664 #define EXTRACT_FMT_BC24_CODE \
665 length = 4; \
666 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
667 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
668 f_disp24 = ((((EXTRACT_SIGNED (insn, 32, 8, 24)) << (2))) + (pc)); \
669
670 #define EXTRACT_FMT_BEQ_VARS \
671 /* Instruction fields. */ \
672 UINT f_op1; \
673 UINT f_r1; \
674 UINT f_op2; \
675 UINT f_r2; \
676 int f_disp16; \
677 unsigned int length;
678 #define EXTRACT_FMT_BEQ_CODE \
679 length = 4; \
680 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
681 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
682 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
683 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
684 f_disp16 = ((((EXTRACT_SIGNED (insn, 32, 16, 16)) << (2))) + (pc)); \
685
686 #define EXTRACT_FMT_BEQZ_VARS \
687 /* Instruction fields. */ \
688 UINT f_op1; \
689 UINT f_r1; \
690 UINT f_op2; \
691 UINT f_r2; \
692 int f_disp16; \
693 unsigned int length;
694 #define EXTRACT_FMT_BEQZ_CODE \
695 length = 4; \
696 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
697 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
698 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
699 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
700 f_disp16 = ((((EXTRACT_SIGNED (insn, 32, 16, 16)) << (2))) + (pc)); \
701
702 #define EXTRACT_FMT_BL8_VARS \
703 /* Instruction fields. */ \
704 UINT f_op1; \
705 UINT f_r1; \
706 int f_disp8; \
707 unsigned int length;
708 #define EXTRACT_FMT_BL8_CODE \
709 length = 2; \
710 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
711 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
712 f_disp8 = ((((EXTRACT_SIGNED (insn, 16, 8, 8)) << (2))) + (((pc) & (-4)))); \
713
714 #define EXTRACT_FMT_BL24_VARS \
715 /* Instruction fields. */ \
716 UINT f_op1; \
717 UINT f_r1; \
718 int f_disp24; \
719 unsigned int length;
720 #define EXTRACT_FMT_BL24_CODE \
721 length = 4; \
722 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
723 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
724 f_disp24 = ((((EXTRACT_SIGNED (insn, 32, 8, 24)) << (2))) + (pc)); \
725
726 #define EXTRACT_FMT_BCL8_VARS \
727 /* Instruction fields. */ \
728 UINT f_op1; \
729 UINT f_r1; \
730 int f_disp8; \
731 unsigned int length;
732 #define EXTRACT_FMT_BCL8_CODE \
733 length = 2; \
734 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
735 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
736 f_disp8 = ((((EXTRACT_SIGNED (insn, 16, 8, 8)) << (2))) + (((pc) & (-4)))); \
737
738 #define EXTRACT_FMT_BCL24_VARS \
739 /* Instruction fields. */ \
740 UINT f_op1; \
741 UINT f_r1; \
742 int f_disp24; \
743 unsigned int length;
744 #define EXTRACT_FMT_BCL24_CODE \
745 length = 4; \
746 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
747 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
748 f_disp24 = ((((EXTRACT_SIGNED (insn, 32, 8, 24)) << (2))) + (pc)); \
749
750 #define EXTRACT_FMT_BRA8_VARS \
751 /* Instruction fields. */ \
752 UINT f_op1; \
753 UINT f_r1; \
754 int f_disp8; \
755 unsigned int length;
756 #define EXTRACT_FMT_BRA8_CODE \
757 length = 2; \
758 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
759 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
760 f_disp8 = ((((EXTRACT_SIGNED (insn, 16, 8, 8)) << (2))) + (((pc) & (-4)))); \
761
762 #define EXTRACT_FMT_BRA24_VARS \
763 /* Instruction fields. */ \
764 UINT f_op1; \
765 UINT f_r1; \
766 int f_disp24; \
767 unsigned int length;
768 #define EXTRACT_FMT_BRA24_CODE \
769 length = 4; \
770 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
771 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
772 f_disp24 = ((((EXTRACT_SIGNED (insn, 32, 8, 24)) << (2))) + (pc)); \
773
774 #define EXTRACT_FMT_CMP_VARS \
775 /* Instruction fields. */ \
776 UINT f_op1; \
777 UINT f_r1; \
778 UINT f_op2; \
779 UINT f_r2; \
780 unsigned int length;
781 #define EXTRACT_FMT_CMP_CODE \
782 length = 2; \
783 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
784 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
785 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
786 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
787
788 #define EXTRACT_FMT_CMPI_VARS \
789 /* Instruction fields. */ \
790 UINT f_op1; \
791 UINT f_r1; \
792 UINT f_op2; \
793 UINT f_r2; \
794 int f_simm16; \
795 unsigned int length;
796 #define EXTRACT_FMT_CMPI_CODE \
797 length = 4; \
798 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
799 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
800 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
801 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
802 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
803
804 #define EXTRACT_FMT_CMPZ_VARS \
805 /* Instruction fields. */ \
806 UINT f_op1; \
807 UINT f_r1; \
808 UINT f_op2; \
809 UINT f_r2; \
810 unsigned int length;
811 #define EXTRACT_FMT_CMPZ_CODE \
812 length = 2; \
813 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
814 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
815 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
816 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
817
818 #define EXTRACT_FMT_DIV_VARS \
819 /* Instruction fields. */ \
820 UINT f_op1; \
821 UINT f_r1; \
822 UINT f_op2; \
823 UINT f_r2; \
824 int f_simm16; \
825 unsigned int length;
826 #define EXTRACT_FMT_DIV_CODE \
827 length = 4; \
828 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
829 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
830 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
831 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
832 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
833
834 #define EXTRACT_FMT_JC_VARS \
835 /* Instruction fields. */ \
836 UINT f_op1; \
837 UINT f_r1; \
838 UINT f_op2; \
839 UINT f_r2; \
840 unsigned int length;
841 #define EXTRACT_FMT_JC_CODE \
842 length = 2; \
843 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
844 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
845 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
846 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
847
848 #define EXTRACT_FMT_JL_VARS \
849 /* Instruction fields. */ \
850 UINT f_op1; \
851 UINT f_r1; \
852 UINT f_op2; \
853 UINT f_r2; \
854 unsigned int length;
855 #define EXTRACT_FMT_JL_CODE \
856 length = 2; \
857 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
858 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
859 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
860 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
861
862 #define EXTRACT_FMT_JMP_VARS \
863 /* Instruction fields. */ \
864 UINT f_op1; \
865 UINT f_r1; \
866 UINT f_op2; \
867 UINT f_r2; \
868 unsigned int length;
869 #define EXTRACT_FMT_JMP_CODE \
870 length = 2; \
871 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
872 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
873 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
874 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
875
876 #define EXTRACT_FMT_LD_VARS \
877 /* Instruction fields. */ \
878 UINT f_op1; \
879 UINT f_r1; \
880 UINT f_op2; \
881 UINT f_r2; \
882 unsigned int length;
883 #define EXTRACT_FMT_LD_CODE \
884 length = 2; \
885 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
886 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
887 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
888 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
889
890 #define EXTRACT_FMT_LD_D_VARS \
891 /* Instruction fields. */ \
892 UINT f_op1; \
893 UINT f_r1; \
894 UINT f_op2; \
895 UINT f_r2; \
896 int f_simm16; \
897 unsigned int length;
898 #define EXTRACT_FMT_LD_D_CODE \
899 length = 4; \
900 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
901 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
902 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
903 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
904 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
905
906 #define EXTRACT_FMT_LDB_VARS \
907 /* Instruction fields. */ \
908 UINT f_op1; \
909 UINT f_r1; \
910 UINT f_op2; \
911 UINT f_r2; \
912 unsigned int length;
913 #define EXTRACT_FMT_LDB_CODE \
914 length = 2; \
915 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
916 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
917 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
918 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
919
920 #define EXTRACT_FMT_LDB_D_VARS \
921 /* Instruction fields. */ \
922 UINT f_op1; \
923 UINT f_r1; \
924 UINT f_op2; \
925 UINT f_r2; \
926 int f_simm16; \
927 unsigned int length;
928 #define EXTRACT_FMT_LDB_D_CODE \
929 length = 4; \
930 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
931 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
932 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
933 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
934 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
935
936 #define EXTRACT_FMT_LDH_VARS \
937 /* Instruction fields. */ \
938 UINT f_op1; \
939 UINT f_r1; \
940 UINT f_op2; \
941 UINT f_r2; \
942 unsigned int length;
943 #define EXTRACT_FMT_LDH_CODE \
944 length = 2; \
945 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
946 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
947 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
948 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
949
950 #define EXTRACT_FMT_LDH_D_VARS \
951 /* Instruction fields. */ \
952 UINT f_op1; \
953 UINT f_r1; \
954 UINT f_op2; \
955 UINT f_r2; \
956 int f_simm16; \
957 unsigned int length;
958 #define EXTRACT_FMT_LDH_D_CODE \
959 length = 4; \
960 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
961 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
962 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
963 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
964 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
965
966 #define EXTRACT_FMT_LD_PLUS_VARS \
967 /* Instruction fields. */ \
968 UINT f_op1; \
969 UINT f_r1; \
970 UINT f_op2; \
971 UINT f_r2; \
972 unsigned int length;
973 #define EXTRACT_FMT_LD_PLUS_CODE \
974 length = 2; \
975 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
976 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
977 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
978 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
979
980 #define EXTRACT_FMT_LD24_VARS \
981 /* Instruction fields. */ \
982 UINT f_op1; \
983 UINT f_r1; \
984 UINT f_uimm24; \
985 unsigned int length;
986 #define EXTRACT_FMT_LD24_CODE \
987 length = 4; \
988 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
989 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
990 f_uimm24 = EXTRACT_UNSIGNED (insn, 32, 8, 24); \
991
992 #define EXTRACT_FMT_LDI8_VARS \
993 /* Instruction fields. */ \
994 UINT f_op1; \
995 UINT f_r1; \
996 int f_simm8; \
997 unsigned int length;
998 #define EXTRACT_FMT_LDI8_CODE \
999 length = 2; \
1000 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1001 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1002 f_simm8 = EXTRACT_SIGNED (insn, 16, 8, 8); \
1003
1004 #define EXTRACT_FMT_LDI16_VARS \
1005 /* Instruction fields. */ \
1006 UINT f_op1; \
1007 UINT f_r1; \
1008 UINT f_op2; \
1009 UINT f_r2; \
1010 int f_simm16; \
1011 unsigned int length;
1012 #define EXTRACT_FMT_LDI16_CODE \
1013 length = 4; \
1014 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
1015 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
1016 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
1017 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
1018 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
1019
1020 #define EXTRACT_FMT_LOCK_VARS \
1021 /* Instruction fields. */ \
1022 UINT f_op1; \
1023 UINT f_r1; \
1024 UINT f_op2; \
1025 UINT f_r2; \
1026 unsigned int length;
1027 #define EXTRACT_FMT_LOCK_CODE \
1028 length = 2; \
1029 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1030 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1031 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1032 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1033
1034 #define EXTRACT_FMT_MACHI_A_VARS \
1035 /* Instruction fields. */ \
1036 UINT f_op1; \
1037 UINT f_r1; \
1038 UINT f_acc; \
1039 UINT f_op23; \
1040 UINT f_r2; \
1041 unsigned int length;
1042 #define EXTRACT_FMT_MACHI_A_CODE \
1043 length = 2; \
1044 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1045 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1046 f_acc = EXTRACT_UNSIGNED (insn, 16, 8, 1); \
1047 f_op23 = EXTRACT_UNSIGNED (insn, 16, 9, 3); \
1048 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1049
1050 #define EXTRACT_FMT_MULHI_A_VARS \
1051 /* Instruction fields. */ \
1052 UINT f_op1; \
1053 UINT f_r1; \
1054 UINT f_acc; \
1055 UINT f_op23; \
1056 UINT f_r2; \
1057 unsigned int length;
1058 #define EXTRACT_FMT_MULHI_A_CODE \
1059 length = 2; \
1060 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1061 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1062 f_acc = EXTRACT_UNSIGNED (insn, 16, 8, 1); \
1063 f_op23 = EXTRACT_UNSIGNED (insn, 16, 9, 3); \
1064 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1065
1066 #define EXTRACT_FMT_MV_VARS \
1067 /* Instruction fields. */ \
1068 UINT f_op1; \
1069 UINT f_r1; \
1070 UINT f_op2; \
1071 UINT f_r2; \
1072 unsigned int length;
1073 #define EXTRACT_FMT_MV_CODE \
1074 length = 2; \
1075 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1076 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1077 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1078 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1079
1080 #define EXTRACT_FMT_MVFACHI_A_VARS \
1081 /* Instruction fields. */ \
1082 UINT f_op1; \
1083 UINT f_r1; \
1084 UINT f_op2; \
1085 UINT f_accs; \
1086 UINT f_op3; \
1087 unsigned int length;
1088 #define EXTRACT_FMT_MVFACHI_A_CODE \
1089 length = 2; \
1090 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1091 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1092 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1093 f_accs = EXTRACT_UNSIGNED (insn, 16, 12, 2); \
1094 f_op3 = EXTRACT_UNSIGNED (insn, 16, 14, 2); \
1095
1096 #define EXTRACT_FMT_MVFC_VARS \
1097 /* Instruction fields. */ \
1098 UINT f_op1; \
1099 UINT f_r1; \
1100 UINT f_op2; \
1101 UINT f_r2; \
1102 unsigned int length;
1103 #define EXTRACT_FMT_MVFC_CODE \
1104 length = 2; \
1105 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1106 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1107 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1108 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1109
1110 #define EXTRACT_FMT_MVTACHI_A_VARS \
1111 /* Instruction fields. */ \
1112 UINT f_op1; \
1113 UINT f_r1; \
1114 UINT f_op2; \
1115 UINT f_accs; \
1116 UINT f_op3; \
1117 unsigned int length;
1118 #define EXTRACT_FMT_MVTACHI_A_CODE \
1119 length = 2; \
1120 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1121 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1122 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1123 f_accs = EXTRACT_UNSIGNED (insn, 16, 12, 2); \
1124 f_op3 = EXTRACT_UNSIGNED (insn, 16, 14, 2); \
1125
1126 #define EXTRACT_FMT_MVTC_VARS \
1127 /* Instruction fields. */ \
1128 UINT f_op1; \
1129 UINT f_r1; \
1130 UINT f_op2; \
1131 UINT f_r2; \
1132 unsigned int length;
1133 #define EXTRACT_FMT_MVTC_CODE \
1134 length = 2; \
1135 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1136 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1137 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1138 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1139
1140 #define EXTRACT_FMT_NOP_VARS \
1141 /* Instruction fields. */ \
1142 UINT f_op1; \
1143 UINT f_r1; \
1144 UINT f_op2; \
1145 UINT f_r2; \
1146 unsigned int length;
1147 #define EXTRACT_FMT_NOP_CODE \
1148 length = 2; \
1149 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1150 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1151 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1152 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1153
1154 #define EXTRACT_FMT_RAC_DSI_VARS \
1155 /* Instruction fields. */ \
1156 UINT f_op1; \
1157 UINT f_accd; \
1158 UINT f_bits67; \
1159 UINT f_op2; \
1160 UINT f_accs; \
1161 UINT f_bit14; \
1162 UINT f_imm1; \
1163 unsigned int length;
1164 #define EXTRACT_FMT_RAC_DSI_CODE \
1165 length = 2; \
1166 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1167 f_accd = EXTRACT_UNSIGNED (insn, 16, 4, 2); \
1168 f_bits67 = EXTRACT_UNSIGNED (insn, 16, 6, 2); \
1169 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1170 f_accs = EXTRACT_UNSIGNED (insn, 16, 12, 2); \
1171 f_bit14 = EXTRACT_UNSIGNED (insn, 16, 14, 1); \
1172 f_imm1 = ((EXTRACT_UNSIGNED (insn, 16, 15, 1)) + (1)); \
1173
1174 #define EXTRACT_FMT_RTE_VARS \
1175 /* Instruction fields. */ \
1176 UINT f_op1; \
1177 UINT f_r1; \
1178 UINT f_op2; \
1179 UINT f_r2; \
1180 unsigned int length;
1181 #define EXTRACT_FMT_RTE_CODE \
1182 length = 2; \
1183 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1184 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1185 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1186 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1187
1188 #define EXTRACT_FMT_SETH_VARS \
1189 /* Instruction fields. */ \
1190 UINT f_op1; \
1191 UINT f_r1; \
1192 UINT f_op2; \
1193 UINT f_r2; \
1194 UINT f_hi16; \
1195 unsigned int length;
1196 #define EXTRACT_FMT_SETH_CODE \
1197 length = 4; \
1198 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
1199 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
1200 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
1201 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
1202 f_hi16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
1203
1204 #define EXTRACT_FMT_SLL3_VARS \
1205 /* Instruction fields. */ \
1206 UINT f_op1; \
1207 UINT f_r1; \
1208 UINT f_op2; \
1209 UINT f_r2; \
1210 int f_simm16; \
1211 unsigned int length;
1212 #define EXTRACT_FMT_SLL3_CODE \
1213 length = 4; \
1214 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
1215 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
1216 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
1217 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
1218 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
1219
1220 #define EXTRACT_FMT_SLLI_VARS \
1221 /* Instruction fields. */ \
1222 UINT f_op1; \
1223 UINT f_r1; \
1224 UINT f_shift_op2; \
1225 UINT f_uimm5; \
1226 unsigned int length;
1227 #define EXTRACT_FMT_SLLI_CODE \
1228 length = 2; \
1229 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1230 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1231 f_shift_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 3); \
1232 f_uimm5 = EXTRACT_UNSIGNED (insn, 16, 11, 5); \
1233
1234 #define EXTRACT_FMT_ST_VARS \
1235 /* Instruction fields. */ \
1236 UINT f_op1; \
1237 UINT f_r1; \
1238 UINT f_op2; \
1239 UINT f_r2; \
1240 unsigned int length;
1241 #define EXTRACT_FMT_ST_CODE \
1242 length = 2; \
1243 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1244 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1245 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1246 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1247
1248 #define EXTRACT_FMT_ST_D_VARS \
1249 /* Instruction fields. */ \
1250 UINT f_op1; \
1251 UINT f_r1; \
1252 UINT f_op2; \
1253 UINT f_r2; \
1254 int f_simm16; \
1255 unsigned int length;
1256 #define EXTRACT_FMT_ST_D_CODE \
1257 length = 4; \
1258 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
1259 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
1260 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
1261 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
1262 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
1263
1264 #define EXTRACT_FMT_STB_VARS \
1265 /* Instruction fields. */ \
1266 UINT f_op1; \
1267 UINT f_r1; \
1268 UINT f_op2; \
1269 UINT f_r2; \
1270 unsigned int length;
1271 #define EXTRACT_FMT_STB_CODE \
1272 length = 2; \
1273 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1274 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1275 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1276 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1277
1278 #define EXTRACT_FMT_STB_D_VARS \
1279 /* Instruction fields. */ \
1280 UINT f_op1; \
1281 UINT f_r1; \
1282 UINT f_op2; \
1283 UINT f_r2; \
1284 int f_simm16; \
1285 unsigned int length;
1286 #define EXTRACT_FMT_STB_D_CODE \
1287 length = 4; \
1288 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
1289 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
1290 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
1291 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
1292 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
1293
1294 #define EXTRACT_FMT_STH_VARS \
1295 /* Instruction fields. */ \
1296 UINT f_op1; \
1297 UINT f_r1; \
1298 UINT f_op2; \
1299 UINT f_r2; \
1300 unsigned int length;
1301 #define EXTRACT_FMT_STH_CODE \
1302 length = 2; \
1303 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1304 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1305 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1306 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1307
1308 #define EXTRACT_FMT_STH_D_VARS \
1309 /* Instruction fields. */ \
1310 UINT f_op1; \
1311 UINT f_r1; \
1312 UINT f_op2; \
1313 UINT f_r2; \
1314 int f_simm16; \
1315 unsigned int length;
1316 #define EXTRACT_FMT_STH_D_CODE \
1317 length = 4; \
1318 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
1319 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
1320 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
1321 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
1322 f_simm16 = EXTRACT_SIGNED (insn, 32, 16, 16); \
1323
1324 #define EXTRACT_FMT_ST_PLUS_VARS \
1325 /* Instruction fields. */ \
1326 UINT f_op1; \
1327 UINT f_r1; \
1328 UINT f_op2; \
1329 UINT f_r2; \
1330 unsigned int length;
1331 #define EXTRACT_FMT_ST_PLUS_CODE \
1332 length = 2; \
1333 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1334 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1335 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1336 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1337
1338 #define EXTRACT_FMT_TRAP_VARS \
1339 /* Instruction fields. */ \
1340 UINT f_op1; \
1341 UINT f_r1; \
1342 UINT f_op2; \
1343 UINT f_uimm4; \
1344 unsigned int length;
1345 #define EXTRACT_FMT_TRAP_CODE \
1346 length = 2; \
1347 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1348 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1349 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1350 f_uimm4 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1351
1352 #define EXTRACT_FMT_UNLOCK_VARS \
1353 /* Instruction fields. */ \
1354 UINT f_op1; \
1355 UINT f_r1; \
1356 UINT f_op2; \
1357 UINT f_r2; \
1358 unsigned int length;
1359 #define EXTRACT_FMT_UNLOCK_CODE \
1360 length = 2; \
1361 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1362 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1363 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1364 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1365
1366 #define EXTRACT_FMT_SATB_VARS \
1367 /* Instruction fields. */ \
1368 UINT f_op1; \
1369 UINT f_r1; \
1370 UINT f_op2; \
1371 UINT f_r2; \
1372 UINT f_uimm16; \
1373 unsigned int length;
1374 #define EXTRACT_FMT_SATB_CODE \
1375 length = 4; \
1376 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
1377 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
1378 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
1379 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
1380 f_uimm16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
1381
1382 #define EXTRACT_FMT_SAT_VARS \
1383 /* Instruction fields. */ \
1384 UINT f_op1; \
1385 UINT f_r1; \
1386 UINT f_op2; \
1387 UINT f_r2; \
1388 UINT f_uimm16; \
1389 unsigned int length;
1390 #define EXTRACT_FMT_SAT_CODE \
1391 length = 4; \
1392 f_op1 = EXTRACT_UNSIGNED (insn, 32, 0, 4); \
1393 f_r1 = EXTRACT_UNSIGNED (insn, 32, 4, 4); \
1394 f_op2 = EXTRACT_UNSIGNED (insn, 32, 8, 4); \
1395 f_r2 = EXTRACT_UNSIGNED (insn, 32, 12, 4); \
1396 f_uimm16 = EXTRACT_UNSIGNED (insn, 32, 16, 16); \
1397
1398 #define EXTRACT_FMT_SADD_VARS \
1399 /* Instruction fields. */ \
1400 UINT f_op1; \
1401 UINT f_r1; \
1402 UINT f_op2; \
1403 UINT f_r2; \
1404 unsigned int length;
1405 #define EXTRACT_FMT_SADD_CODE \
1406 length = 2; \
1407 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1408 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1409 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1410 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1411
1412 #define EXTRACT_FMT_MACWU1_VARS \
1413 /* Instruction fields. */ \
1414 UINT f_op1; \
1415 UINT f_r1; \
1416 UINT f_op2; \
1417 UINT f_r2; \
1418 unsigned int length;
1419 #define EXTRACT_FMT_MACWU1_CODE \
1420 length = 2; \
1421 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1422 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1423 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1424 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1425
1426 #define EXTRACT_FMT_MSBLO_VARS \
1427 /* Instruction fields. */ \
1428 UINT f_op1; \
1429 UINT f_r1; \
1430 UINT f_op2; \
1431 UINT f_r2; \
1432 unsigned int length;
1433 #define EXTRACT_FMT_MSBLO_CODE \
1434 length = 2; \
1435 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1436 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1437 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1438 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1439
1440 #define EXTRACT_FMT_MULWU1_VARS \
1441 /* Instruction fields. */ \
1442 UINT f_op1; \
1443 UINT f_r1; \
1444 UINT f_op2; \
1445 UINT f_r2; \
1446 unsigned int length;
1447 #define EXTRACT_FMT_MULWU1_CODE \
1448 length = 2; \
1449 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1450 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1451 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1452 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1453
1454 #define EXTRACT_FMT_SC_VARS \
1455 /* Instruction fields. */ \
1456 UINT f_op1; \
1457 UINT f_r1; \
1458 UINT f_op2; \
1459 UINT f_r2; \
1460 unsigned int length;
1461 #define EXTRACT_FMT_SC_CODE \
1462 length = 2; \
1463 f_op1 = EXTRACT_UNSIGNED (insn, 16, 0, 4); \
1464 f_r1 = EXTRACT_UNSIGNED (insn, 16, 4, 4); \
1465 f_op2 = EXTRACT_UNSIGNED (insn, 16, 8, 4); \
1466 f_r2 = EXTRACT_UNSIGNED (insn, 16, 12, 4); \
1467
1468 /* Queued output values of an instruction. */
1469
1470 struct parexec {
1471 union {
1472 struct { /* e.g. add $dr,$sr */
1473 SI dr;
1474 } fmt_add;
1475 struct { /* e.g. add3 $dr,$sr,$hash$slo16 */
1476 SI dr;
1477 } fmt_add3;
1478 struct { /* e.g. and3 $dr,$sr,$uimm16 */
1479 SI dr;
1480 } fmt_and3;
1481 struct { /* e.g. or3 $dr,$sr,$hash$ulo16 */
1482 SI dr;
1483 } fmt_or3;
1484 struct { /* e.g. addi $dr,$simm8 */
1485 SI dr;
1486 } fmt_addi;
1487 struct { /* e.g. addv $dr,$sr */
1488 SI dr;
1489 BI condbit;
1490 } fmt_addv;
1491 struct { /* e.g. addv3 $dr,$sr,$simm16 */
1492 SI dr;
1493 BI condbit;
1494 } fmt_addv3;
1495 struct { /* e.g. addx $dr,$sr */
1496 SI dr;
1497 BI condbit;
1498 } fmt_addx;
1499 struct { /* e.g. bc.s $disp8 */
1500 USI pc;
1501 } fmt_bc8;
1502 struct { /* e.g. bc.l $disp24 */
1503 USI pc;
1504 } fmt_bc24;
1505 struct { /* e.g. beq $src1,$src2,$disp16 */
1506 USI pc;
1507 } fmt_beq;
1508 struct { /* e.g. beqz $src2,$disp16 */
1509 USI pc;
1510 } fmt_beqz;
1511 struct { /* e.g. bl.s $disp8 */
1512 SI h_gr_14;
1513 USI pc;
1514 } fmt_bl8;
1515 struct { /* e.g. bl.l $disp24 */
1516 SI h_gr_14;
1517 USI pc;
1518 } fmt_bl24;
1519 struct { /* e.g. bcl.s $disp8 */
1520 SI h_gr_14;
1521 USI pc;
1522 } fmt_bcl8;
1523 struct { /* e.g. bcl.l $disp24 */
1524 SI h_gr_14;
1525 USI pc;
1526 } fmt_bcl24;
1527 struct { /* e.g. bra.s $disp8 */
1528 USI pc;
1529 } fmt_bra8;
1530 struct { /* e.g. bra.l $disp24 */
1531 USI pc;
1532 } fmt_bra24;
1533 struct { /* e.g. cmp $src1,$src2 */
1534 BI condbit;
1535 } fmt_cmp;
1536 struct { /* e.g. cmpi $src2,$simm16 */
1537 BI condbit;
1538 } fmt_cmpi;
1539 struct { /* e.g. cmpz $src2 */
1540 BI condbit;
1541 } fmt_cmpz;
1542 struct { /* e.g. div $dr,$sr */
1543 SI dr;
1544 } fmt_div;
1545 struct { /* e.g. jc $sr */
1546 USI pc;
1547 } fmt_jc;
1548 struct { /* e.g. jl $sr */
1549 SI h_gr_14;
1550 USI pc;
1551 } fmt_jl;
1552 struct { /* e.g. jmp $sr */
1553 USI pc;
1554 } fmt_jmp;
1555 struct { /* e.g. ld $dr,@$sr */
1556 SI dr;
1557 } fmt_ld;
1558 struct { /* e.g. ld $dr,@($slo16,$sr) */
1559 SI dr;
1560 } fmt_ld_d;
1561 struct { /* e.g. ldb $dr,@$sr */
1562 SI dr;
1563 } fmt_ldb;
1564 struct { /* e.g. ldb $dr,@($slo16,$sr) */
1565 SI dr;
1566 } fmt_ldb_d;
1567 struct { /* e.g. ldh $dr,@$sr */
1568 SI dr;
1569 } fmt_ldh;
1570 struct { /* e.g. ldh $dr,@($slo16,$sr) */
1571 SI dr;
1572 } fmt_ldh_d;
1573 struct { /* e.g. ld $dr,@$sr+ */
1574 SI dr;
1575 SI sr;
1576 } fmt_ld_plus;
1577 struct { /* e.g. ld24 $dr,$uimm24 */
1578 SI dr;
1579 } fmt_ld24;
1580 struct { /* e.g. ldi8 $dr,$simm8 */
1581 SI dr;
1582 } fmt_ldi8;
1583 struct { /* e.g. ldi16 $dr,$hash$slo16 */
1584 SI dr;
1585 } fmt_ldi16;
1586 struct { /* e.g. lock $dr,@$sr */
1587 BI h_lock_0;
1588 SI dr;
1589 } fmt_lock;
1590 struct { /* e.g. machi $src1,$src2,$acc */
1591 DI acc;
1592 } fmt_machi_a;
1593 struct { /* e.g. mulhi $src1,$src2,$acc */
1594 DI acc;
1595 } fmt_mulhi_a;
1596 struct { /* e.g. mv $dr,$sr */
1597 SI dr;
1598 } fmt_mv;
1599 struct { /* e.g. mvfachi $dr,$accs */
1600 SI dr;
1601 } fmt_mvfachi_a;
1602 struct { /* e.g. mvfc $dr,$scr */
1603 SI dr;
1604 } fmt_mvfc;
1605 struct { /* e.g. mvtachi $src1,$accs */
1606 DI accs;
1607 } fmt_mvtachi_a;
1608 struct { /* e.g. mvtc $sr,$dcr */
1609 USI dcr;
1610 } fmt_mvtc;
1611 struct { /* e.g. nop */
1612 int empty;
1613 } fmt_nop;
1614 struct { /* e.g. rac $accd,$accs,$imm1 */
1615 DI accd;
1616 } fmt_rac_dsi;
1617 struct { /* e.g. rte */
1618 USI pc;
1619 USI h_cr_6;
1620 UQI h_psw_0;
1621 UQI h_bpsw_0;
1622 } fmt_rte;
1623 struct { /* e.g. seth $dr,$hash$hi16 */
1624 SI dr;
1625 } fmt_seth;
1626 struct { /* e.g. sll3 $dr,$sr,$simm16 */
1627 SI dr;
1628 } fmt_sll3;
1629 struct { /* e.g. slli $dr,$uimm5 */
1630 SI dr;
1631 } fmt_slli;
1632 struct { /* e.g. st $src1,@$src2 */
1633 SI h_memory_src2;
1634 USI h_memory_src2_idx;
1635 } fmt_st;
1636 struct { /* e.g. st $src1,@($slo16,$src2) */
1637 SI h_memory_add__VM_src2_slo16;
1638 USI h_memory_add__VM_src2_slo16_idx;
1639 } fmt_st_d;
1640 struct { /* e.g. stb $src1,@$src2 */
1641 QI h_memory_src2;
1642 USI h_memory_src2_idx;
1643 } fmt_stb;
1644 struct { /* e.g. stb $src1,@($slo16,$src2) */
1645 QI h_memory_add__VM_src2_slo16;
1646 USI h_memory_add__VM_src2_slo16_idx;
1647 } fmt_stb_d;
1648 struct { /* e.g. sth $src1,@$src2 */
1649 HI h_memory_src2;
1650 USI h_memory_src2_idx;
1651 } fmt_sth;
1652 struct { /* e.g. sth $src1,@($slo16,$src2) */
1653 HI h_memory_add__VM_src2_slo16;
1654 USI h_memory_add__VM_src2_slo16_idx;
1655 } fmt_sth_d;
1656 struct { /* e.g. st $src1,@+$src2 */
1657 SI h_memory_new_src2;
1658 USI h_memory_new_src2_idx;
1659 SI src2;
1660 } fmt_st_plus;
1661 struct { /* e.g. trap $uimm4 */
1662 USI h_cr_14;
1663 USI h_cr_6;
1664 UQI h_bbpsw_0;
1665 UQI h_bpsw_0;
1666 UQI h_psw_0;
1667 SI pc;
1668 } fmt_trap;
1669 struct { /* e.g. unlock $src1,@$src2 */
1670 SI h_memory_src2;
1671 USI h_memory_src2_idx;
1672 BI h_lock_0;
1673 } fmt_unlock;
1674 struct { /* e.g. satb $dr,$sr */
1675 SI dr;
1676 } fmt_satb;
1677 struct { /* e.g. sat $dr,$sr */
1678 SI dr;
1679 } fmt_sat;
1680 struct { /* e.g. sadd */
1681 DI h_accums_0;
1682 } fmt_sadd;
1683 struct { /* e.g. macwu1 $src1,$src2 */
1684 DI h_accums_1;
1685 } fmt_macwu1;
1686 struct { /* e.g. msblo $src1,$src2 */
1687 DI accum;
1688 } fmt_msblo;
1689 struct { /* e.g. mulwu1 $src1,$src2 */
1690 DI h_accums_1;
1691 } fmt_mulwu1;
1692 struct { /* e.g. sc */
1693 int empty;
1694 } fmt_sc;
1695 } operands;
1696 /* For conditionally written operands, bitmask of which ones were. */
1697 int written;
1698 };
1699
1700 #endif /* CPU_M32RXF_H */