* configure.ac: Add explicit sh64 case.
[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 (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 */