This commit was generated by cvs2svn to track changes on a CVS vendor
[external/binutils.git] / sim / sh64 / defs-compact.h
1 /* ISA definitions header for compact.
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_COMPACT_H
26 #define DEFS_SH64_COMPACT_H
27
28 /* Instruction argument buffer.  */
29
30 union sem_fields {
31   struct { /* no operands */
32     int empty;
33   } fmt_empty;
34   struct { /*  */
35     SI f_dn;
36   } sfmt_fcnvds_compact;
37   struct { /*  */
38     IADDR i_disp12;
39   } sfmt_bra_compact;
40   struct { /*  */
41     IADDR i_disp8;
42   } sfmt_bf_compact;
43   struct { /*  */
44     SI f_imm4x2;
45     UINT f_rm;
46   } sfmt_movw11_compact;
47   struct { /*  */
48     SI f_imm8x2;
49     UINT f_rn;
50   } sfmt_movw10_compact;
51   struct { /*  */
52     SI f_imm4x2;
53     UINT f_rn;
54   } sfmt_movw5_compact;
55   struct { /*  */
56     SI f_imm8x4;
57     UINT f_rn;
58   } sfmt_movl10_compact;
59   struct { /*  */
60     UINT f_imm4;
61     UINT f_rm;
62   } sfmt_movb5_compact;
63   struct { /*  */
64     SI f_vm;
65     SI f_vn;
66   } sfmt_fipr_compact;
67   struct { /*  */
68     UINT f_imm8;
69     UINT f_rn;
70   } sfmt_addi_compact;
71   struct { /*  */
72     SI f_imm4x4;
73     UINT f_rm;
74     UINT f_rn;
75   } sfmt_movl5_compact;
76 #if WITH_SCACHE_PBB
77   /* Writeback handler.  */
78   struct {
79     /* Pointer to argbuf entry for insn whose results need writing back.  */
80     const struct argbuf *abuf;
81   } write;
82   /* x-before handler */
83   struct {
84     /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
85     int first_p;
86   } before;
87   /* x-after handler */
88   struct {
89     int empty;
90   } after;
91   /* This entry is used to terminate each pbb.  */
92   struct {
93     /* Number of insns in pbb.  */
94     int insn_count;
95     /* Next pbb to execute.  */
96     SCACHE *next;
97     SCACHE *branch_target;
98   } chain;
99 #endif
100 };
101
102 /* The ARGBUF struct.  */
103 struct argbuf {
104   /* These are the baseclass definitions.  */
105   IADDR addr;
106   const IDESC *idesc;
107   char trace_p;
108   char profile_p;
109   /* ??? Temporary hack for skip insns.  */
110   char skip_count;
111   char unused;
112   /* cpu specific data follows */
113   union sem semantic;
114   int written;
115   union sem_fields fields;
116 };
117
118 /* A cached insn.
119
120    ??? SCACHE used to contain more than just argbuf.  We could delete the
121    type entirely and always just use ARGBUF, but for future concerns and as
122    a level of abstraction it is left in.  */
123
124 struct scache {
125   struct argbuf argbuf;
126 };
127
128 /* Macros to simplify extraction, reading and semantic code.
129    These define and assign the local vars that contain the insn's fields.  */
130
131 #define EXTRACT_IFMT_EMPTY_VARS \
132   unsigned int length;
133 #define EXTRACT_IFMT_EMPTY_CODE \
134   length = 0; \
135
136 #define EXTRACT_IFMT_ADD_COMPACT_VARS \
137   UINT f_op4; \
138   UINT f_rn; \
139   UINT f_rm; \
140   UINT f_sub4; \
141   unsigned int length;
142 #define EXTRACT_IFMT_ADD_COMPACT_CODE \
143   length = 2; \
144   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
145   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
146   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
147   f_sub4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
148
149 #define EXTRACT_IFMT_ADDI_COMPACT_VARS \
150   UINT f_op4; \
151   UINT f_rn; \
152   UINT f_imm8; \
153   unsigned int length;
154 #define EXTRACT_IFMT_ADDI_COMPACT_CODE \
155   length = 2; \
156   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
157   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
158   f_imm8 = EXTRACT_LSB0_UINT (insn, 16, 7, 8); \
159
160 #define EXTRACT_IFMT_AND_COMPACT_VARS \
161   UINT f_op4; \
162   UINT f_rn; \
163   UINT f_rm; \
164   UINT f_sub4; \
165   unsigned int length;
166 #define EXTRACT_IFMT_AND_COMPACT_CODE \
167   length = 2; \
168   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
169   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
170   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
171   f_sub4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
172
173 #define EXTRACT_IFMT_ANDI_COMPACT_VARS \
174   UINT f_op8; \
175   UINT f_imm8; \
176   unsigned int length;
177 #define EXTRACT_IFMT_ANDI_COMPACT_CODE \
178   length = 2; \
179   f_op8 = EXTRACT_LSB0_UINT (insn, 16, 15, 8); \
180   f_imm8 = EXTRACT_LSB0_UINT (insn, 16, 7, 8); \
181
182 #define EXTRACT_IFMT_ANDB_COMPACT_VARS \
183   UINT f_op8; \
184   UINT f_imm8; \
185   unsigned int length;
186 #define EXTRACT_IFMT_ANDB_COMPACT_CODE \
187   length = 2; \
188   f_op8 = EXTRACT_LSB0_UINT (insn, 16, 15, 8); \
189   f_imm8 = EXTRACT_LSB0_UINT (insn, 16, 7, 8); \
190
191 #define EXTRACT_IFMT_BF_COMPACT_VARS \
192   UINT f_op8; \
193   SI f_disp8; \
194   unsigned int length;
195 #define EXTRACT_IFMT_BF_COMPACT_CODE \
196   length = 2; \
197   f_op8 = EXTRACT_LSB0_UINT (insn, 16, 15, 8); \
198   f_disp8 = ((((EXTRACT_LSB0_INT (insn, 16, 7, 8)) << (1))) + (((pc) + (4)))); \
199
200 #define EXTRACT_IFMT_BRA_COMPACT_VARS \
201   UINT f_op4; \
202   SI f_disp12; \
203   unsigned int length;
204 #define EXTRACT_IFMT_BRA_COMPACT_CODE \
205   length = 2; \
206   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
207   f_disp12 = ((((EXTRACT_LSB0_INT (insn, 16, 11, 12)) << (1))) + (((pc) + (4)))); \
208
209 #define EXTRACT_IFMT_BRAF_COMPACT_VARS \
210   UINT f_op4; \
211   UINT f_rn; \
212   UINT f_sub8; \
213   unsigned int length;
214 #define EXTRACT_IFMT_BRAF_COMPACT_CODE \
215   length = 2; \
216   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
217   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
218   f_sub8 = EXTRACT_LSB0_UINT (insn, 16, 7, 8); \
219
220 #define EXTRACT_IFMT_BRK_COMPACT_VARS \
221   UINT f_op16; \
222   unsigned int length;
223 #define EXTRACT_IFMT_BRK_COMPACT_CODE \
224   length = 2; \
225   f_op16 = EXTRACT_LSB0_UINT (insn, 16, 15, 16); \
226
227 #define EXTRACT_IFMT_FABS_COMPACT_VARS \
228   UINT f_op4; \
229   UINT f_rn; \
230   UINT f_sub8; \
231   unsigned int length;
232 #define EXTRACT_IFMT_FABS_COMPACT_CODE \
233   length = 2; \
234   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
235   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
236   f_sub8 = EXTRACT_LSB0_UINT (insn, 16, 7, 8); \
237
238 #define EXTRACT_IFMT_FADD_COMPACT_VARS \
239   UINT f_op4; \
240   UINT f_rn; \
241   UINT f_rm; \
242   UINT f_sub4; \
243   unsigned int length;
244 #define EXTRACT_IFMT_FADD_COMPACT_CODE \
245   length = 2; \
246   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
247   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
248   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
249   f_sub4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
250
251 #define EXTRACT_IFMT_FCNVDS_COMPACT_VARS \
252   UINT f_op4; \
253   SI f_dn; \
254   UINT f_8_1; \
255   UINT f_sub8; \
256   unsigned int length;
257 #define EXTRACT_IFMT_FCNVDS_COMPACT_CODE \
258   length = 2; \
259   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
260   f_dn = ((EXTRACT_LSB0_UINT (insn, 16, 11, 3)) << (1)); \
261   f_8_1 = EXTRACT_LSB0_UINT (insn, 16, 8, 1); \
262   f_sub8 = EXTRACT_LSB0_UINT (insn, 16, 7, 8); \
263
264 #define EXTRACT_IFMT_FIPR_COMPACT_VARS \
265   UINT f_op4; \
266   SI f_vn; \
267   SI f_vm; \
268   UINT f_sub8; \
269   unsigned int length;
270 #define EXTRACT_IFMT_FIPR_COMPACT_CODE \
271   length = 2; \
272   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
273   f_vn = ((EXTRACT_LSB0_UINT (insn, 16, 11, 2)) << (2)); \
274   f_vm = ((EXTRACT_LSB0_UINT (insn, 16, 9, 2)) << (2)); \
275   f_sub8 = EXTRACT_LSB0_UINT (insn, 16, 7, 8); \
276
277 #define EXTRACT_IFMT_FLDS_COMPACT_VARS \
278   UINT f_op4; \
279   UINT f_rn; \
280   UINT f_sub8; \
281   unsigned int length;
282 #define EXTRACT_IFMT_FLDS_COMPACT_CODE \
283   length = 2; \
284   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
285   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
286   f_sub8 = EXTRACT_LSB0_UINT (insn, 16, 7, 8); \
287
288 #define EXTRACT_IFMT_FMAC_COMPACT_VARS \
289   UINT f_op4; \
290   UINT f_rn; \
291   UINT f_rm; \
292   UINT f_sub4; \
293   unsigned int length;
294 #define EXTRACT_IFMT_FMAC_COMPACT_CODE \
295   length = 2; \
296   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
297   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
298   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
299   f_sub4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
300
301 #define EXTRACT_IFMT_FMOV2_COMPACT_VARS \
302   UINT f_op4; \
303   UINT f_rn; \
304   UINT f_rm; \
305   UINT f_sub4; \
306   unsigned int length;
307 #define EXTRACT_IFMT_FMOV2_COMPACT_CODE \
308   length = 2; \
309   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
310   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
311   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
312   f_sub4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
313
314 #define EXTRACT_IFMT_FMOV5_COMPACT_VARS \
315   UINT f_op4; \
316   UINT f_rn; \
317   UINT f_rm; \
318   UINT f_sub4; \
319   unsigned int length;
320 #define EXTRACT_IFMT_FMOV5_COMPACT_CODE \
321   length = 2; \
322   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
323   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
324   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
325   f_sub4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
326
327 #define EXTRACT_IFMT_FTRV_COMPACT_VARS \
328   UINT f_op4; \
329   SI f_vn; \
330   UINT f_sub10; \
331   unsigned int length;
332 #define EXTRACT_IFMT_FTRV_COMPACT_CODE \
333   length = 2; \
334   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
335   f_vn = ((EXTRACT_LSB0_UINT (insn, 16, 11, 2)) << (2)); \
336   f_sub10 = EXTRACT_LSB0_UINT (insn, 16, 9, 10); \
337
338 #define EXTRACT_IFMT_MOVB5_COMPACT_VARS \
339   UINT f_op8; \
340   UINT f_rm; \
341   UINT f_imm4; \
342   unsigned int length;
343 #define EXTRACT_IFMT_MOVB5_COMPACT_CODE \
344   length = 2; \
345   f_op8 = EXTRACT_LSB0_UINT (insn, 16, 15, 8); \
346   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
347   f_imm4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4); \
348
349 #define EXTRACT_IFMT_MOVL4_COMPACT_VARS \
350   UINT f_op8; \
351   SI f_imm8x4; \
352   unsigned int length;
353 #define EXTRACT_IFMT_MOVL4_COMPACT_CODE \
354   length = 2; \
355   f_op8 = EXTRACT_LSB0_UINT (insn, 16, 15, 8); \
356   f_imm8x4 = ((EXTRACT_LSB0_UINT (insn, 16, 7, 8)) << (2)); \
357
358 #define EXTRACT_IFMT_MOVL5_COMPACT_VARS \
359   UINT f_op4; \
360   UINT f_rn; \
361   UINT f_rm; \
362   SI f_imm4x4; \
363   unsigned int length;
364 #define EXTRACT_IFMT_MOVL5_COMPACT_CODE \
365   length = 2; \
366   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
367   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
368   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
369   f_imm4x4 = ((EXTRACT_LSB0_UINT (insn, 16, 3, 4)) << (2)); \
370
371 #define EXTRACT_IFMT_MOVL10_COMPACT_VARS \
372   UINT f_op4; \
373   UINT f_rn; \
374   SI f_imm8x4; \
375   unsigned int length;
376 #define EXTRACT_IFMT_MOVL10_COMPACT_CODE \
377   length = 2; \
378   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
379   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
380   f_imm8x4 = ((EXTRACT_LSB0_UINT (insn, 16, 7, 8)) << (2)); \
381
382 #define EXTRACT_IFMT_MOVW4_COMPACT_VARS \
383   UINT f_op8; \
384   SI f_imm8x2; \
385   unsigned int length;
386 #define EXTRACT_IFMT_MOVW4_COMPACT_CODE \
387   length = 2; \
388   f_op8 = EXTRACT_LSB0_UINT (insn, 16, 15, 8); \
389   f_imm8x2 = ((EXTRACT_LSB0_UINT (insn, 16, 7, 8)) << (1)); \
390
391 #define EXTRACT_IFMT_MOVW5_COMPACT_VARS \
392   UINT f_op8; \
393   UINT f_rn; \
394   SI f_imm4x2; \
395   unsigned int length;
396 #define EXTRACT_IFMT_MOVW5_COMPACT_CODE \
397   length = 2; \
398   f_op8 = EXTRACT_LSB0_UINT (insn, 16, 15, 8); \
399   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
400   f_imm4x2 = ((EXTRACT_LSB0_UINT (insn, 16, 3, 4)) << (1)); \
401
402 #define EXTRACT_IFMT_MOVW10_COMPACT_VARS \
403   UINT f_op4; \
404   UINT f_rn; \
405   SI f_imm8x2; \
406   unsigned int length;
407 #define EXTRACT_IFMT_MOVW10_COMPACT_CODE \
408   length = 2; \
409   f_op4 = EXTRACT_LSB0_UINT (insn, 16, 15, 4); \
410   f_rn = EXTRACT_LSB0_UINT (insn, 16, 11, 4); \
411   f_imm8x2 = ((EXTRACT_LSB0_UINT (insn, 16, 7, 8)) << (1)); \
412
413 #define EXTRACT_IFMT_MOVW11_COMPACT_VARS \
414   UINT f_op8; \
415   UINT f_rm; \
416   SI f_imm4x2; \
417   unsigned int length;
418 #define EXTRACT_IFMT_MOVW11_COMPACT_CODE \
419   length = 2; \
420   f_op8 = EXTRACT_LSB0_UINT (insn, 16, 15, 8); \
421   f_rm = EXTRACT_LSB0_UINT (insn, 16, 7, 4); \
422   f_imm4x2 = ((EXTRACT_LSB0_UINT (insn, 16, 3, 4)) << (1)); \
423
424 #endif /* DEFS_SH64_COMPACT_H */