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