2003-11-12 Michael Snyder <msnyder@redhat.com>
[deliverable/binutils-gdb.git] / sim / sh64 / defs-compact.h
CommitLineData
cbb38b47
BE
1/* ISA definitions header for compact.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
6
7This file is part of the GNU Simulators.
8
9This program is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option)
12any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License along
20with this program; if not, write to the Free Software Foundation, Inc.,
2159 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
30union 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. */
103struct 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
124struct 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 */
This page took 0.129131 seconds and 4 git commands to generate.