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