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