]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/sh64/defs-compact.h
* cgen-engine.h (EXTRACT_MSB0_SINT): Renamed from EXTRACT_MSB0_INT.
[thirdparty/binutils-gdb.git] / sim / sh64 / defs-compact.h
1 /* ISA definitions header for compact.
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_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 IADDR i_disp12;
36 } sfmt_bra_compact;
37 struct { /* */
38 IADDR i_disp8;
39 } sfmt_bf_compact;
40 struct { /* */
41 SI f_imm8x2;
42 UINT f_rn;
43 } sfmt_movw10_compact;
44 struct { /* */
45 SI f_imm4x2;
46 UINT f_rm;
47 } sfmt_movw5_compact;
48 struct { /* */
49 SI f_imm8x4;
50 UINT f_rn;
51 } sfmt_movl10_compact;
52 struct { /* */
53 UINT f_imm4;
54 UINT f_rm;
55 } sfmt_movb5_compact;
56 struct { /* */
57 INT f_imm20;
58 UINT f_rn;
59 } sfmt_movi20_compact;
60 struct { /* */
61 SI f_vm;
62 SI f_vn;
63 } sfmt_fipr_compact;
64 struct { /* */
65 UINT f_imm8;
66 UINT f_rn;
67 } sfmt_addi_compact;
68 struct { /* */
69 SI f_imm12x4;
70 UINT f_rm;
71 UINT f_rn;
72 } sfmt_movl12_compact;
73 struct { /* */
74 SI f_imm4x4;
75 UINT f_rm;
76 UINT f_rn;
77 } sfmt_movl5_compact;
78 struct { /* */
79 SI f_dm;
80 SI f_imm12x8;
81 UINT f_rn;
82 } sfmt_fmov9_compact;
83 struct { /* */
84 SI f_dn;
85 SI f_imm12x8;
86 UINT f_rm;
87 } sfmt_fmov8_compact;
88 #if WITH_SCACHE_PBB
89 /* Writeback handler. */
90 struct {
91 /* Pointer to argbuf entry for insn whose results need writing back. */
92 const struct argbuf *abuf;
93 } write;
94 /* x-before handler */
95 struct {
96 /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
97 int first_p;
98 } before;
99 /* x-after handler */
100 struct {
101 int empty;
102 } after;
103 /* This entry is used to terminate each pbb. */
104 struct {
105 /* Number of insns in pbb. */
106 int insn_count;
107 /* Next pbb to execute. */
108 SCACHE *next;
109 SCACHE *branch_target;
110 } chain;
111 #endif
112 };
113
114 /* The ARGBUF struct. */
115 struct argbuf {
116 /* These are the baseclass definitions. */
117 IADDR addr;
118 const IDESC *idesc;
119 char trace_p;
120 char profile_p;
121 /* ??? Temporary hack for skip insns. */
122 char skip_count;
123 char unused;
124 /* cpu specific data follows */
125 union sem semantic;
126 int written;
127 union sem_fields fields;
128 };
129
130 /* A cached insn.
131
132 ??? SCACHE used to contain more than just argbuf. We could delete the
133 type entirely and always just use ARGBUF, but for future concerns and as
134 a level of abstraction it is left in. */
135
136 struct scache {
137 struct argbuf argbuf;
138 };
139
140 /* Macros to simplify extraction, reading and semantic code.
141 These define and assign the local vars that contain the insn's fields. */
142
143 #define EXTRACT_IFMT_EMPTY_VARS \
144 unsigned int length;
145 #define EXTRACT_IFMT_EMPTY_CODE \
146 length = 0; \
147
148 #define EXTRACT_IFMT_ADD_COMPACT_VARS \
149 UINT f_op4; \
150 UINT f_rn; \
151 UINT f_rm; \
152 UINT f_sub4; \
153 unsigned int length;
154 #define EXTRACT_IFMT_ADD_COMPACT_CODE \
155 length = 2; \
156 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
157 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
158 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
159 f_sub4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
160
161 #define EXTRACT_IFMT_ADDI_COMPACT_VARS \
162 UINT f_op4; \
163 UINT f_rn; \
164 UINT f_imm8; \
165 unsigned int length;
166 #define EXTRACT_IFMT_ADDI_COMPACT_CODE \
167 length = 2; \
168 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
169 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
170 f_imm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
171
172 #define EXTRACT_IFMT_AND_COMPACT_VARS \
173 UINT f_op4; \
174 UINT f_rn; \
175 UINT f_rm; \
176 UINT f_sub4; \
177 unsigned int length;
178 #define EXTRACT_IFMT_AND_COMPACT_CODE \
179 length = 2; \
180 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
181 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
182 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
183 f_sub4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
184
185 #define EXTRACT_IFMT_ANDI_COMPACT_VARS \
186 UINT f_op8; \
187 UINT f_imm8; \
188 unsigned int length;
189 #define EXTRACT_IFMT_ANDI_COMPACT_CODE \
190 length = 2; \
191 f_op8 = EXTRACT_MSB0_UINT (insn, 16, 0, 8); \
192 f_imm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
193
194 #define EXTRACT_IFMT_ANDB_COMPACT_VARS \
195 UINT f_op8; \
196 UINT f_imm8; \
197 unsigned int length;
198 #define EXTRACT_IFMT_ANDB_COMPACT_CODE \
199 length = 2; \
200 f_op8 = EXTRACT_MSB0_UINT (insn, 16, 0, 8); \
201 f_imm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
202
203 #define EXTRACT_IFMT_BF_COMPACT_VARS \
204 UINT f_op8; \
205 SI f_disp8; \
206 unsigned int length;
207 #define EXTRACT_IFMT_BF_COMPACT_CODE \
208 length = 2; \
209 f_op8 = EXTRACT_MSB0_UINT (insn, 16, 0, 8); \
210 f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) << (1))) + (((pc) + (4)))); \
211
212 #define EXTRACT_IFMT_BRA_COMPACT_VARS \
213 UINT f_op4; \
214 SI f_disp12; \
215 unsigned int length;
216 #define EXTRACT_IFMT_BRA_COMPACT_CODE \
217 length = 2; \
218 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
219 f_disp12 = ((((EXTRACT_MSB0_SINT (insn, 16, 4, 12)) << (1))) + (((pc) + (4)))); \
220
221 #define EXTRACT_IFMT_BRAF_COMPACT_VARS \
222 UINT f_op4; \
223 UINT f_rn; \
224 UINT f_sub8; \
225 unsigned int length;
226 #define EXTRACT_IFMT_BRAF_COMPACT_CODE \
227 length = 2; \
228 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
229 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
230 f_sub8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
231
232 #define EXTRACT_IFMT_BRK_COMPACT_VARS \
233 UINT f_op16; \
234 unsigned int length;
235 #define EXTRACT_IFMT_BRK_COMPACT_CODE \
236 length = 2; \
237 f_op16 = EXTRACT_MSB0_UINT (insn, 16, 0, 16); \
238
239 #define EXTRACT_IFMT_FABS_COMPACT_VARS \
240 UINT f_op4; \
241 UINT f_rn; \
242 UINT f_sub8; \
243 unsigned int length;
244 #define EXTRACT_IFMT_FABS_COMPACT_CODE \
245 length = 2; \
246 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
247 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
248 f_sub8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
249
250 #define EXTRACT_IFMT_FADD_COMPACT_VARS \
251 UINT f_op4; \
252 UINT f_rn; \
253 UINT f_rm; \
254 UINT f_sub4; \
255 unsigned int length;
256 #define EXTRACT_IFMT_FADD_COMPACT_CODE \
257 length = 2; \
258 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
259 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
260 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
261 f_sub4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
262
263 #define EXTRACT_IFMT_FCNVDS_COMPACT_VARS \
264 UINT f_op4; \
265 SI f_dn; \
266 UINT f_7_1; \
267 UINT f_sub8; \
268 unsigned int length;
269 #define EXTRACT_IFMT_FCNVDS_COMPACT_CODE \
270 length = 2; \
271 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
272 f_dn = ((EXTRACT_MSB0_UINT (insn, 16, 4, 3)) << (1)); \
273 f_7_1 = EXTRACT_MSB0_UINT (insn, 16, 7, 1); \
274 f_sub8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
275
276 #define EXTRACT_IFMT_FIPR_COMPACT_VARS \
277 UINT f_op4; \
278 SI f_vn; \
279 SI f_vm; \
280 UINT f_sub8; \
281 unsigned int length;
282 #define EXTRACT_IFMT_FIPR_COMPACT_CODE \
283 length = 2; \
284 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
285 f_vn = ((EXTRACT_MSB0_UINT (insn, 16, 4, 2)) << (2)); \
286 f_vm = ((EXTRACT_MSB0_UINT (insn, 16, 6, 2)) << (2)); \
287 f_sub8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
288
289 #define EXTRACT_IFMT_FLDS_COMPACT_VARS \
290 UINT f_op4; \
291 UINT f_rn; \
292 UINT f_sub8; \
293 unsigned int length;
294 #define EXTRACT_IFMT_FLDS_COMPACT_CODE \
295 length = 2; \
296 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
297 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
298 f_sub8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8); \
299
300 #define EXTRACT_IFMT_FMAC_COMPACT_VARS \
301 UINT f_op4; \
302 UINT f_rn; \
303 UINT f_rm; \
304 UINT f_sub4; \
305 unsigned int length;
306 #define EXTRACT_IFMT_FMAC_COMPACT_CODE \
307 length = 2; \
308 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
309 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
310 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
311 f_sub4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
312
313 #define EXTRACT_IFMT_FMOV1_COMPACT_VARS \
314 UINT f_op4; \
315 UINT f_rn; \
316 UINT f_rm; \
317 UINT f_sub4; \
318 unsigned int length;
319 #define EXTRACT_IFMT_FMOV1_COMPACT_CODE \
320 length = 2; \
321 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
322 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
323 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
324 f_sub4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
325
326 #define EXTRACT_IFMT_FMOV2_COMPACT_VARS \
327 UINT f_op4; \
328 UINT f_rn; \
329 UINT f_rm; \
330 UINT f_sub4; \
331 unsigned int length;
332 #define EXTRACT_IFMT_FMOV2_COMPACT_CODE \
333 length = 2; \
334 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
335 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
336 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
337 f_sub4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
338
339 #define EXTRACT_IFMT_FMOV5_COMPACT_VARS \
340 UINT f_op4; \
341 UINT f_rn; \
342 UINT f_rm; \
343 UINT f_sub4; \
344 unsigned int length;
345 #define EXTRACT_IFMT_FMOV5_COMPACT_CODE \
346 length = 2; \
347 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
348 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
349 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
350 f_sub4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
351
352 #define EXTRACT_IFMT_FMOV8_COMPACT_VARS \
353 UINT f_op4; \
354 SI f_dn; \
355 UINT f_7_1; \
356 UINT f_rm; \
357 UINT f_sub4; \
358 UINT f_16_4; \
359 SI f_imm12x8; \
360 unsigned int length;
361 #define EXTRACT_IFMT_FMOV8_COMPACT_CODE \
362 length = 4; \
363 f_op4 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \
364 f_dn = ((EXTRACT_MSB0_UINT (insn, 32, 4, 3)) << (1)); \
365 f_7_1 = EXTRACT_MSB0_UINT (insn, 32, 7, 1); \
366 f_rm = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \
367 f_sub4 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \
368 f_16_4 = EXTRACT_MSB0_UINT (insn, 32, 16, 4); \
369 f_imm12x8 = ((EXTRACT_MSB0_SINT (insn, 32, 20, 12)) << (3)); \
370
371 #define EXTRACT_IFMT_FMOV9_COMPACT_VARS \
372 UINT f_op4; \
373 UINT f_rn; \
374 SI f_dm; \
375 UINT f_11_1; \
376 UINT f_sub4; \
377 UINT f_16_4; \
378 SI f_imm12x8; \
379 unsigned int length;
380 #define EXTRACT_IFMT_FMOV9_COMPACT_CODE \
381 length = 4; \
382 f_op4 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \
383 f_rn = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \
384 f_dm = ((EXTRACT_MSB0_UINT (insn, 32, 8, 3)) << (1)); \
385 f_11_1 = EXTRACT_MSB0_UINT (insn, 32, 11, 1); \
386 f_sub4 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \
387 f_16_4 = EXTRACT_MSB0_UINT (insn, 32, 16, 4); \
388 f_imm12x8 = ((EXTRACT_MSB0_SINT (insn, 32, 20, 12)) << (3)); \
389
390 #define EXTRACT_IFMT_FTRV_COMPACT_VARS \
391 UINT f_op4; \
392 SI f_vn; \
393 UINT f_sub10; \
394 unsigned int length;
395 #define EXTRACT_IFMT_FTRV_COMPACT_CODE \
396 length = 2; \
397 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
398 f_vn = ((EXTRACT_MSB0_UINT (insn, 16, 4, 2)) << (2)); \
399 f_sub10 = EXTRACT_MSB0_UINT (insn, 16, 6, 10); \
400
401 #define EXTRACT_IFMT_MOVI20_COMPACT_VARS \
402 UINT f_op4; \
403 UINT f_rn; \
404 INT f_imm20_hi; \
405 UINT f_imm20_lo; \
406 INT f_imm20; \
407 UINT f_sub4; \
408 unsigned int length;
409 #define EXTRACT_IFMT_MOVI20_COMPACT_CODE \
410 length = 4; \
411 f_op4 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \
412 f_rn = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \
413 f_imm20_hi = EXTRACT_MSB0_SINT (insn, 32, 8, 4); \
414 f_imm20_lo = EXTRACT_MSB0_UINT (insn, 32, 16, 16); \
415 f_imm20 = ((((f_imm20_hi) << (16))) | (f_imm20_lo));\
416 f_sub4 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \
417
418 #define EXTRACT_IFMT_MOVB5_COMPACT_VARS \
419 UINT f_op8; \
420 UINT f_rm; \
421 UINT f_imm4; \
422 unsigned int length;
423 #define EXTRACT_IFMT_MOVB5_COMPACT_CODE \
424 length = 2; \
425 f_op8 = EXTRACT_MSB0_UINT (insn, 16, 0, 8); \
426 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
427 f_imm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4); \
428
429 #define EXTRACT_IFMT_MOVL4_COMPACT_VARS \
430 UINT f_op8; \
431 SI f_imm8x4; \
432 unsigned int length;
433 #define EXTRACT_IFMT_MOVL4_COMPACT_CODE \
434 length = 2; \
435 f_op8 = EXTRACT_MSB0_UINT (insn, 16, 0, 8); \
436 f_imm8x4 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 8)) << (2)); \
437
438 #define EXTRACT_IFMT_MOVL5_COMPACT_VARS \
439 UINT f_op4; \
440 UINT f_rn; \
441 UINT f_rm; \
442 SI f_imm4x4; \
443 unsigned int length;
444 #define EXTRACT_IFMT_MOVL5_COMPACT_CODE \
445 length = 2; \
446 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
447 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
448 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
449 f_imm4x4 = ((EXTRACT_MSB0_UINT (insn, 16, 12, 4)) << (2)); \
450
451 #define EXTRACT_IFMT_MOVL10_COMPACT_VARS \
452 UINT f_op4; \
453 UINT f_rn; \
454 SI f_imm8x4; \
455 unsigned int length;
456 #define EXTRACT_IFMT_MOVL10_COMPACT_CODE \
457 length = 2; \
458 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
459 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
460 f_imm8x4 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 8)) << (2)); \
461
462 #define EXTRACT_IFMT_MOVL12_COMPACT_VARS \
463 UINT f_op4; \
464 UINT f_rn; \
465 UINT f_rm; \
466 UINT f_sub4; \
467 UINT f_16_4; \
468 SI f_imm12x4; \
469 unsigned int length;
470 #define EXTRACT_IFMT_MOVL12_COMPACT_CODE \
471 length = 4; \
472 f_op4 = EXTRACT_MSB0_UINT (insn, 32, 0, 4); \
473 f_rn = EXTRACT_MSB0_UINT (insn, 32, 4, 4); \
474 f_rm = EXTRACT_MSB0_UINT (insn, 32, 8, 4); \
475 f_sub4 = EXTRACT_MSB0_UINT (insn, 32, 12, 4); \
476 f_16_4 = EXTRACT_MSB0_UINT (insn, 32, 16, 4); \
477 f_imm12x4 = ((EXTRACT_MSB0_SINT (insn, 32, 20, 12)) << (2)); \
478
479 #define EXTRACT_IFMT_MOVW4_COMPACT_VARS \
480 UINT f_op8; \
481 SI f_imm8x2; \
482 unsigned int length;
483 #define EXTRACT_IFMT_MOVW4_COMPACT_CODE \
484 length = 2; \
485 f_op8 = EXTRACT_MSB0_UINT (insn, 16, 0, 8); \
486 f_imm8x2 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 8)) << (1)); \
487
488 #define EXTRACT_IFMT_MOVW5_COMPACT_VARS \
489 UINT f_op8; \
490 UINT f_rm; \
491 SI f_imm4x2; \
492 unsigned int length;
493 #define EXTRACT_IFMT_MOVW5_COMPACT_CODE \
494 length = 2; \
495 f_op8 = EXTRACT_MSB0_UINT (insn, 16, 0, 8); \
496 f_rm = EXTRACT_MSB0_UINT (insn, 16, 8, 4); \
497 f_imm4x2 = ((EXTRACT_MSB0_UINT (insn, 16, 12, 4)) << (1)); \
498
499 #define EXTRACT_IFMT_MOVW10_COMPACT_VARS \
500 UINT f_op4; \
501 UINT f_rn; \
502 SI f_imm8x2; \
503 unsigned int length;
504 #define EXTRACT_IFMT_MOVW10_COMPACT_CODE \
505 length = 2; \
506 f_op4 = EXTRACT_MSB0_UINT (insn, 16, 0, 4); \
507 f_rn = EXTRACT_MSB0_UINT (insn, 16, 4, 4); \
508 f_imm8x2 = ((EXTRACT_MSB0_UINT (insn, 16, 8, 8)) << (1)); \
509
510 #endif /* DEFS_SH64_COMPACT_H */