merge from gcc
[binutils-gdb.git] / sim / sh64 / defs-media.h
1 /* ISA definitions header for media.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1996, 1997, 1998, 1999, 2000 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 DEFS_SH64_MEDIA_H
26 #define DEFS_SH64_MEDIA_H
27
28 /* Instruction argument buffer. */
29
30 union sem_fields {
31 struct { /* no operands */
32 int empty;
33 } fmt_empty;
34 struct { /* */
35 UINT f_dest;
36 UINT f_uimm16;
37 } sfmt_shori;
38 struct { /* */
39 DI f_disp16;
40 UINT f_tra;
41 } sfmt_pta;
42 struct { /* */
43 INT f_imm16;
44 UINT f_dest;
45 } sfmt_movi;
46 struct { /* */
47 UINT f_dest;
48 UINT f_left_right;
49 } sfmt_fabsd;
50 struct { /* */
51 UINT f_dest;
52 UINT f_trb;
53 } sfmt_blink;
54 struct { /* */
55 INT f_imm6;
56 UINT f_dest;
57 UINT f_left;
58 } sfmt_xori;
59 struct { /* */
60 INT f_disp6;
61 UINT f_dest;
62 UINT f_left;
63 } sfmt_sthil;
64 struct { /* */
65 UINT f_dest;
66 UINT f_left;
67 UINT f_uimm6;
68 } sfmt_shari;
69 struct { /* */
70 INT f_imm10;
71 UINT f_dest;
72 UINT f_left;
73 } sfmt_ori;
74 struct { /* */
75 SI f_disp10x2;
76 UINT f_dest;
77 UINT f_left;
78 } sfmt_lduw;
79 struct { /* */
80 SI f_disp10x4;
81 UINT f_dest;
82 UINT f_left;
83 } sfmt_flds;
84 struct { /* */
85 SI f_disp10x8;
86 UINT f_dest;
87 UINT f_left;
88 } sfmt_fldd;
89 struct { /* */
90 INT f_imm6;
91 UINT f_left;
92 UINT f_tra;
93 } sfmt_beqi;
94 struct { /* */
95 UINT f_left;
96 UINT f_right;
97 UINT f_tra;
98 } sfmt_beq;
99 struct { /* */
100 INT f_disp10;
101 UINT f_dest;
102 UINT f_left;
103 } sfmt_addi;
104 struct { /* */
105 UINT f_dest;
106 UINT f_left;
107 UINT f_right;
108 } sfmt_add;
109 struct {
110 INT f_disp6;
111 UINT f_dest;
112 UINT f_left;
113 } sfmt_ldhil;
114 #if WITH_SCACHE_PBB
115 /* Writeback handler. */
116 struct {
117 /* Pointer to argbuf entry for insn whose results need writing back. */
118 const struct argbuf *abuf;
119 } write;
120 /* x-before handler */
121 struct {
122 /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
123 int first_p;
124 } before;
125 /* x-after handler */
126 struct {
127 int empty;
128 } after;
129 /* This entry is used to terminate each pbb. */
130 struct {
131 /* Number of insns in pbb. */
132 int insn_count;
133 /* Next pbb to execute. */
134 SCACHE *next;
135 SCACHE *branch_target;
136 } chain;
137 #endif
138 };
139
140 /* The ARGBUF struct. */
141 struct argbuf {
142 /* These are the baseclass definitions. */
143 IADDR addr;
144 const IDESC *idesc;
145 char trace_p;
146 char profile_p;
147 /* ??? Temporary hack for skip insns. */
148 char skip_count;
149 char unused;
150 /* cpu specific data follows */
151 union sem semantic;
152 int written;
153 union sem_fields fields;
154 };
155
156 /* A cached insn.
157
158 ??? SCACHE used to contain more than just argbuf. We could delete the
159 type entirely and always just use ARGBUF, but for future concerns and as
160 a level of abstraction it is left in. */
161
162 struct scache {
163 struct argbuf argbuf;
164 };
165
166 /* Macros to simplify extraction, reading and semantic code.
167 These define and assign the local vars that contain the insn's fields. */
168
169 #define EXTRACT_IFMT_EMPTY_VARS \
170 unsigned int length;
171 #define EXTRACT_IFMT_EMPTY_CODE \
172 length = 0; \
173
174 #define EXTRACT_IFMT_ADD_VARS \
175 UINT f_op; \
176 UINT f_left; \
177 UINT f_ext; \
178 UINT f_right; \
179 UINT f_dest; \
180 UINT f_rsvd; \
181 unsigned int length;
182 #define EXTRACT_IFMT_ADD_CODE \
183 length = 4; \
184 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
185 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
186 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
187 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
188 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
189 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
190
191 #define EXTRACT_IFMT_ADDI_VARS \
192 UINT f_op; \
193 UINT f_left; \
194 INT f_disp10; \
195 UINT f_dest; \
196 UINT f_rsvd; \
197 unsigned int length;
198 #define EXTRACT_IFMT_ADDI_CODE \
199 length = 4; \
200 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
201 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
202 f_disp10 = EXTRACT_LSB0_INT (insn, 32, 19, 10); \
203 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
204 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
205
206 #define EXTRACT_IFMT_ALLOCO_VARS \
207 UINT f_op; \
208 UINT f_left; \
209 UINT f_ext; \
210 SI f_disp6x32; \
211 UINT f_dest; \
212 UINT f_rsvd; \
213 unsigned int length;
214 #define EXTRACT_IFMT_ALLOCO_CODE \
215 length = 4; \
216 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
217 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
218 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
219 f_disp6x32 = ((EXTRACT_LSB0_INT (insn, 32, 15, 6)) << (5)); \
220 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
221 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
222
223 #define EXTRACT_IFMT_BEQ_VARS \
224 UINT f_op; \
225 UINT f_left; \
226 UINT f_ext; \
227 UINT f_right; \
228 UINT f_likely; \
229 UINT f_8_2; \
230 UINT f_tra; \
231 UINT f_rsvd; \
232 unsigned int length;
233 #define EXTRACT_IFMT_BEQ_CODE \
234 length = 4; \
235 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
236 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
237 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
238 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
239 f_likely = EXTRACT_LSB0_UINT (insn, 32, 9, 1); \
240 f_8_2 = EXTRACT_LSB0_UINT (insn, 32, 8, 2); \
241 f_tra = EXTRACT_LSB0_UINT (insn, 32, 6, 3); \
242 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
243
244 #define EXTRACT_IFMT_BEQI_VARS \
245 UINT f_op; \
246 UINT f_left; \
247 UINT f_ext; \
248 INT f_imm6; \
249 UINT f_likely; \
250 UINT f_8_2; \
251 UINT f_tra; \
252 UINT f_rsvd; \
253 unsigned int length;
254 #define EXTRACT_IFMT_BEQI_CODE \
255 length = 4; \
256 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
257 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
258 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
259 f_imm6 = EXTRACT_LSB0_INT (insn, 32, 15, 6); \
260 f_likely = EXTRACT_LSB0_UINT (insn, 32, 9, 1); \
261 f_8_2 = EXTRACT_LSB0_UINT (insn, 32, 8, 2); \
262 f_tra = EXTRACT_LSB0_UINT (insn, 32, 6, 3); \
263 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
264
265 #define EXTRACT_IFMT_BLINK_VARS \
266 UINT f_op; \
267 UINT f_25; \
268 UINT f_trb; \
269 UINT f_ext; \
270 UINT f_right; \
271 UINT f_dest; \
272 UINT f_rsvd; \
273 unsigned int length;
274 #define EXTRACT_IFMT_BLINK_CODE \
275 length = 4; \
276 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
277 f_25 = EXTRACT_LSB0_UINT (insn, 32, 25, 3); \
278 f_trb = EXTRACT_LSB0_UINT (insn, 32, 22, 3); \
279 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
280 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
281 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
282 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
283
284 #define EXTRACT_IFMT_BRK_VARS \
285 UINT f_op; \
286 UINT f_left; \
287 UINT f_ext; \
288 UINT f_right; \
289 UINT f_dest; \
290 UINT f_rsvd; \
291 unsigned int length;
292 #define EXTRACT_IFMT_BRK_CODE \
293 length = 4; \
294 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
295 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
296 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
297 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
298 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
299 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
300
301 #define EXTRACT_IFMT_BYTEREV_VARS \
302 UINT f_op; \
303 UINT f_left; \
304 UINT f_ext; \
305 UINT f_right; \
306 UINT f_dest; \
307 UINT f_rsvd; \
308 unsigned int length;
309 #define EXTRACT_IFMT_BYTEREV_CODE \
310 length = 4; \
311 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
312 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
313 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
314 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
315 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
316 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
317
318 #define EXTRACT_IFMT_FABSD_VARS \
319 UINT f_op; \
320 UINT f_ext; \
321 UINT f_left; \
322 UINT f_right; \
323 UINT f_left_right; \
324 UINT f_dest; \
325 UINT f_rsvd; \
326 unsigned int length;
327 #define EXTRACT_IFMT_FABSD_CODE \
328 length = 4; \
329 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
330 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
331 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
332 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
333 f_left_right = f_left;\
334 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
335 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
336
337 #define EXTRACT_IFMT_FABSS_VARS \
338 UINT f_op; \
339 UINT f_ext; \
340 UINT f_left; \
341 UINT f_right; \
342 UINT f_left_right; \
343 UINT f_dest; \
344 UINT f_rsvd; \
345 unsigned int length;
346 #define EXTRACT_IFMT_FABSS_CODE \
347 length = 4; \
348 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
349 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
350 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
351 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
352 f_left_right = f_left;\
353 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
354 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
355
356 #define EXTRACT_IFMT_FADDD_VARS \
357 UINT f_op; \
358 UINT f_left; \
359 UINT f_ext; \
360 UINT f_right; \
361 UINT f_dest; \
362 UINT f_rsvd; \
363 unsigned int length;
364 #define EXTRACT_IFMT_FADDD_CODE \
365 length = 4; \
366 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
367 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
368 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
369 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
370 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
371 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
372
373 #define EXTRACT_IFMT_FADDS_VARS \
374 UINT f_op; \
375 UINT f_left; \
376 UINT f_ext; \
377 UINT f_right; \
378 UINT f_dest; \
379 UINT f_rsvd; \
380 unsigned int length;
381 #define EXTRACT_IFMT_FADDS_CODE \
382 length = 4; \
383 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
384 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
385 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
386 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
387 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
388 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
389
390 #define EXTRACT_IFMT_FCMPEQD_VARS \
391 UINT f_op; \
392 UINT f_left; \
393 UINT f_ext; \
394 UINT f_right; \
395 UINT f_dest; \
396 UINT f_rsvd; \
397 unsigned int length;
398 #define EXTRACT_IFMT_FCMPEQD_CODE \
399 length = 4; \
400 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
401 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
402 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
403 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
404 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
405 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
406
407 #define EXTRACT_IFMT_FCMPEQS_VARS \
408 UINT f_op; \
409 UINT f_left; \
410 UINT f_ext; \
411 UINT f_right; \
412 UINT f_dest; \
413 UINT f_rsvd; \
414 unsigned int length;
415 #define EXTRACT_IFMT_FCMPEQS_CODE \
416 length = 4; \
417 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
418 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
419 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
420 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
421 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
422 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
423
424 #define EXTRACT_IFMT_FCNVDS_VARS \
425 UINT f_op; \
426 UINT f_ext; \
427 UINT f_left; \
428 UINT f_right; \
429 UINT f_left_right; \
430 UINT f_dest; \
431 UINT f_rsvd; \
432 unsigned int length;
433 #define EXTRACT_IFMT_FCNVDS_CODE \
434 length = 4; \
435 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
436 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
437 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
438 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
439 f_left_right = f_left;\
440 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
441 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
442
443 #define EXTRACT_IFMT_FCNVSD_VARS \
444 UINT f_op; \
445 UINT f_ext; \
446 UINT f_left; \
447 UINT f_right; \
448 UINT f_left_right; \
449 UINT f_dest; \
450 UINT f_rsvd; \
451 unsigned int length;
452 #define EXTRACT_IFMT_FCNVSD_CODE \
453 length = 4; \
454 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
455 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
456 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
457 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
458 f_left_right = f_left;\
459 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
460 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
461
462 #define EXTRACT_IFMT_FGETSCR_VARS \
463 UINT f_op; \
464 UINT f_left; \
465 UINT f_ext; \
466 UINT f_right; \
467 UINT f_dest; \
468 UINT f_rsvd; \
469 unsigned int length;
470 #define EXTRACT_IFMT_FGETSCR_CODE \
471 length = 4; \
472 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
473 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
474 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
475 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
476 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
477 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
478
479 #define EXTRACT_IFMT_FIPRS_VARS \
480 UINT f_op; \
481 UINT f_left; \
482 UINT f_ext; \
483 UINT f_right; \
484 UINT f_dest; \
485 UINT f_rsvd; \
486 unsigned int length;
487 #define EXTRACT_IFMT_FIPRS_CODE \
488 length = 4; \
489 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
490 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
491 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
492 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
493 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
494 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
495
496 #define EXTRACT_IFMT_FLDD_VARS \
497 UINT f_op; \
498 UINT f_left; \
499 SI f_disp10x8; \
500 UINT f_dest; \
501 UINT f_rsvd; \
502 unsigned int length;
503 #define EXTRACT_IFMT_FLDD_CODE \
504 length = 4; \
505 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
506 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
507 f_disp10x8 = ((EXTRACT_LSB0_INT (insn, 32, 19, 10)) << (3)); \
508 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
509 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
510
511 #define EXTRACT_IFMT_FLDP_VARS \
512 UINT f_op; \
513 UINT f_left; \
514 SI f_disp10x8; \
515 UINT f_dest; \
516 UINT f_rsvd; \
517 unsigned int length;
518 #define EXTRACT_IFMT_FLDP_CODE \
519 length = 4; \
520 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
521 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
522 f_disp10x8 = ((EXTRACT_LSB0_INT (insn, 32, 19, 10)) << (3)); \
523 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
524 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
525
526 #define EXTRACT_IFMT_FLDS_VARS \
527 UINT f_op; \
528 UINT f_left; \
529 SI f_disp10x4; \
530 UINT f_dest; \
531 UINT f_rsvd; \
532 unsigned int length;
533 #define EXTRACT_IFMT_FLDS_CODE \
534 length = 4; \
535 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
536 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
537 f_disp10x4 = ((EXTRACT_LSB0_INT (insn, 32, 19, 10)) << (2)); \
538 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
539 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
540
541 #define EXTRACT_IFMT_FLDXD_VARS \
542 UINT f_op; \
543 UINT f_left; \
544 UINT f_ext; \
545 UINT f_right; \
546 UINT f_dest; \
547 UINT f_rsvd; \
548 unsigned int length;
549 #define EXTRACT_IFMT_FLDXD_CODE \
550 length = 4; \
551 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
552 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
553 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
554 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
555 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
556 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
557
558 #define EXTRACT_IFMT_FLDXP_VARS \
559 UINT f_op; \
560 UINT f_left; \
561 UINT f_ext; \
562 UINT f_right; \
563 UINT f_dest; \
564 UINT f_rsvd; \
565 unsigned int length;
566 #define EXTRACT_IFMT_FLDXP_CODE \
567 length = 4; \
568 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
569 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
570 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
571 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
572 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
573 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
574
575 #define EXTRACT_IFMT_FMOVDQ_VARS \
576 UINT f_op; \
577 UINT f_ext; \
578 UINT f_left; \
579 UINT f_right; \
580 UINT f_left_right; \
581 UINT f_dest; \
582 UINT f_rsvd; \
583 unsigned int length;
584 #define EXTRACT_IFMT_FMOVDQ_CODE \
585 length = 4; \
586 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
587 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
588 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
589 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
590 f_left_right = f_left;\
591 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
592 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
593
594 #define EXTRACT_IFMT_FMOVLS_VARS \
595 UINT f_op; \
596 UINT f_left; \
597 UINT f_ext; \
598 UINT f_right; \
599 UINT f_dest; \
600 UINT f_rsvd; \
601 unsigned int length;
602 #define EXTRACT_IFMT_FMOVLS_CODE \
603 length = 4; \
604 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
605 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
606 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
607 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
608 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
609 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
610
611 #define EXTRACT_IFMT_FMOVSL_VARS \
612 UINT f_op; \
613 UINT f_ext; \
614 UINT f_left; \
615 UINT f_right; \
616 UINT f_left_right; \
617 UINT f_dest; \
618 UINT f_rsvd; \
619 unsigned int length;
620 #define EXTRACT_IFMT_FMOVSL_CODE \
621 length = 4; \
622 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
623 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
624 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
625 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
626 f_left_right = f_left;\
627 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
628 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
629
630 #define EXTRACT_IFMT_FPUTSCR_VARS \
631 UINT f_op; \
632 UINT f_ext; \
633 UINT f_left; \
634 UINT f_right; \
635 UINT f_left_right; \
636 UINT f_dest; \
637 UINT f_rsvd; \
638 unsigned int length;
639 #define EXTRACT_IFMT_FPUTSCR_CODE \
640 length = 4; \
641 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
642 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
643 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
644 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
645 f_left_right = f_left;\
646 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
647 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
648
649 #define EXTRACT_IFMT_FSTXD_VARS \
650 UINT f_op; \
651 UINT f_left; \
652 UINT f_ext; \
653 UINT f_right; \
654 UINT f_dest; \
655 UINT f_rsvd; \
656 unsigned int length;
657 #define EXTRACT_IFMT_FSTXD_CODE \
658 length = 4; \
659 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
660 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
661 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
662 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
663 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
664 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
665
666 #define EXTRACT_IFMT_FTRVS_VARS \
667 UINT f_op; \
668 UINT f_left; \
669 UINT f_ext; \
670 UINT f_right; \
671 UINT f_dest; \
672 UINT f_rsvd; \
673 unsigned int length;
674 #define EXTRACT_IFMT_FTRVS_CODE \
675 length = 4; \
676 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
677 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
678 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
679 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
680 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
681 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
682
683 #define EXTRACT_IFMT_GETCFG_VARS \
684 UINT f_op; \
685 UINT f_left; \
686 UINT f_ext; \
687 INT f_disp6; \
688 UINT f_dest; \
689 UINT f_rsvd; \
690 unsigned int length;
691 #define EXTRACT_IFMT_GETCFG_CODE \
692 length = 4; \
693 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
694 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
695 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
696 f_disp6 = EXTRACT_LSB0_INT (insn, 32, 15, 6); \
697 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
698 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
699
700 #define EXTRACT_IFMT_GETCON_VARS \
701 UINT f_op; \
702 UINT f_left; \
703 UINT f_ext; \
704 UINT f_right; \
705 UINT f_dest; \
706 UINT f_rsvd; \
707 unsigned int length;
708 #define EXTRACT_IFMT_GETCON_CODE \
709 length = 4; \
710 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
711 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
712 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
713 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
714 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
715 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
716
717 #define EXTRACT_IFMT_LDL_VARS \
718 UINT f_op; \
719 UINT f_left; \
720 SI f_disp10x4; \
721 UINT f_dest; \
722 UINT f_rsvd; \
723 unsigned int length;
724 #define EXTRACT_IFMT_LDL_CODE \
725 length = 4; \
726 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
727 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
728 f_disp10x4 = ((EXTRACT_LSB0_INT (insn, 32, 19, 10)) << (2)); \
729 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
730 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
731
732 #define EXTRACT_IFMT_LDQ_VARS \
733 UINT f_op; \
734 UINT f_left; \
735 SI f_disp10x8; \
736 UINT f_dest; \
737 UINT f_rsvd; \
738 unsigned int length;
739 #define EXTRACT_IFMT_LDQ_CODE \
740 length = 4; \
741 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
742 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
743 f_disp10x8 = ((EXTRACT_LSB0_INT (insn, 32, 19, 10)) << (3)); \
744 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
745 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
746
747 #define EXTRACT_IFMT_MMACNFX_WL_VARS \
748 UINT f_op; \
749 UINT f_ext; \
750 UINT f_right; \
751 UINT f_right; \
752 UINT f_dest; \
753 UINT f_rsvd; \
754 unsigned int length;
755 #define EXTRACT_IFMT_MMACNFX_WL_CODE \
756 length = 4; \
757 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
758 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
759 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
760 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
761 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
762 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
763
764 #define EXTRACT_IFMT_MOVI_VARS \
765 UINT f_op; \
766 INT f_imm16; \
767 UINT f_dest; \
768 UINT f_rsvd; \
769 unsigned int length;
770 #define EXTRACT_IFMT_MOVI_CODE \
771 length = 4; \
772 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
773 f_imm16 = EXTRACT_LSB0_INT (insn, 32, 25, 16); \
774 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
775 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
776
777 #define EXTRACT_IFMT_ORI_VARS \
778 UINT f_op; \
779 UINT f_left; \
780 INT f_imm10; \
781 UINT f_dest; \
782 UINT f_rsvd; \
783 unsigned int length;
784 #define EXTRACT_IFMT_ORI_CODE \
785 length = 4; \
786 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
787 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
788 f_imm10 = EXTRACT_LSB0_INT (insn, 32, 19, 10); \
789 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
790 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
791
792 #define EXTRACT_IFMT_PREFI_VARS \
793 UINT f_op; \
794 UINT f_left; \
795 UINT f_ext; \
796 SI f_disp6x32; \
797 UINT f_right; \
798 UINT f_rsvd; \
799 unsigned int length;
800 #define EXTRACT_IFMT_PREFI_CODE \
801 length = 4; \
802 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
803 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
804 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
805 f_disp6x32 = ((EXTRACT_LSB0_INT (insn, 32, 15, 6)) << (5)); \
806 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
807 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
808
809 #define EXTRACT_IFMT_PTA_VARS \
810 UINT f_op; \
811 DI f_disp16; \
812 UINT f_likely; \
813 UINT f_8_2; \
814 UINT f_tra; \
815 UINT f_rsvd; \
816 unsigned int length;
817 #define EXTRACT_IFMT_PTA_CODE \
818 length = 4; \
819 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
820 f_disp16 = ((((EXTRACT_LSB0_INT (insn, 32, 25, 16)) << (2))) + (pc)); \
821 f_likely = EXTRACT_LSB0_UINT (insn, 32, 9, 1); \
822 f_8_2 = EXTRACT_LSB0_UINT (insn, 32, 8, 2); \
823 f_tra = EXTRACT_LSB0_UINT (insn, 32, 6, 3); \
824 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
825
826 #define EXTRACT_IFMT_PTABS_VARS \
827 UINT f_op; \
828 UINT f_left; \
829 UINT f_ext; \
830 UINT f_right; \
831 UINT f_likely; \
832 UINT f_8_2; \
833 UINT f_tra; \
834 UINT f_rsvd; \
835 unsigned int length;
836 #define EXTRACT_IFMT_PTABS_CODE \
837 length = 4; \
838 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
839 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
840 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
841 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
842 f_likely = EXTRACT_LSB0_UINT (insn, 32, 9, 1); \
843 f_8_2 = EXTRACT_LSB0_UINT (insn, 32, 8, 2); \
844 f_tra = EXTRACT_LSB0_UINT (insn, 32, 6, 3); \
845 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
846
847 #define EXTRACT_IFMT_PUTCON_VARS \
848 UINT f_op; \
849 UINT f_left; \
850 UINT f_ext; \
851 UINT f_right; \
852 UINT f_dest; \
853 UINT f_rsvd; \
854 unsigned int length;
855 #define EXTRACT_IFMT_PUTCON_CODE \
856 length = 4; \
857 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
858 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
859 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
860 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
861 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
862 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
863
864 #define EXTRACT_IFMT_SHARI_VARS \
865 UINT f_op; \
866 UINT f_left; \
867 UINT f_ext; \
868 UINT f_uimm6; \
869 UINT f_dest; \
870 UINT f_rsvd; \
871 unsigned int length;
872 #define EXTRACT_IFMT_SHARI_CODE \
873 length = 4; \
874 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
875 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
876 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
877 f_uimm6 = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
878 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
879 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
880
881 #define EXTRACT_IFMT_SHORI_VARS \
882 UINT f_op; \
883 UINT f_uimm16; \
884 UINT f_dest; \
885 UINT f_rsvd; \
886 unsigned int length;
887 #define EXTRACT_IFMT_SHORI_CODE \
888 length = 4; \
889 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
890 f_uimm16 = EXTRACT_LSB0_UINT (insn, 32, 25, 16); \
891 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
892 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
893
894 #define EXTRACT_IFMT_STW_VARS \
895 UINT f_op; \
896 UINT f_left; \
897 SI f_disp10x2; \
898 UINT f_dest; \
899 UINT f_rsvd; \
900 unsigned int length;
901 #define EXTRACT_IFMT_STW_CODE \
902 length = 4; \
903 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
904 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
905 f_disp10x2 = ((EXTRACT_LSB0_INT (insn, 32, 19, 10)) << (1)); \
906 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
907 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
908
909 #define EXTRACT_IFMT_TRAPA_VARS \
910 UINT f_op; \
911 UINT f_left; \
912 UINT f_ext; \
913 UINT f_right; \
914 UINT f_dest; \
915 UINT f_rsvd; \
916 unsigned int length;
917 #define EXTRACT_IFMT_TRAPA_CODE \
918 length = 4; \
919 f_op = EXTRACT_LSB0_UINT (insn, 32, 31, 6); \
920 f_left = EXTRACT_LSB0_UINT (insn, 32, 25, 6); \
921 f_ext = EXTRACT_LSB0_UINT (insn, 32, 19, 4); \
922 f_right = EXTRACT_LSB0_UINT (insn, 32, 15, 6); \
923 f_dest = EXTRACT_LSB0_UINT (insn, 32, 9, 6); \
924 f_rsvd = EXTRACT_LSB0_UINT (insn, 32, 3, 4); \
925
926 #endif /* DEFS_SH64_MEDIA_H */