]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - include/opcode/bfin.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / include / opcode / bfin.h
1 /* bfin.h -- Header file for ADI Blackfin opcode table
2 Copyright (C) 2005-2021 Free Software Foundation, Inc.
3
4 This file is part of GDB, GAS, and the GNU binutils.
5
6 GDB, GAS, and the GNU binutils are free software; you can redistribute
7 them and/or modify them under the terms of the GNU General Public
8 License as published by the Free Software Foundation; either version 3,
9 or (at your option) any later version.
10
11 GDB, GAS, and the GNU binutils are distributed in the hope that they
12 will be useful, but WITHOUT ANY WARRANTY; without even the implied
13 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
14 the GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this file; see the file COPYING3. If not, write to the Free
18 Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
21 #ifndef OPCODE_BFIN_H
22 #define OPCODE_BFIN_H
23
24 /* Common to all DSP32 instructions. */
25 #define BIT_MULTI_INS 0x0800
26
27 /* This just sets the multi instruction bit of a DSP32 instruction. */
28 #define SET_MULTI_INSTRUCTION_BIT(x) x->value |= BIT_MULTI_INS;
29
30
31 /* DSP instructions (32 bit) */
32
33 /* mmod field. */
34 #define M_S2RND 1
35 #define M_T 2
36 #define M_W32 3
37 #define M_FU 4
38 #define M_TFU 6
39 #define M_IS 8
40 #define M_ISS2 9
41 #define M_IH 11
42 #define M_IU 12
43
44 static inline int is_macmod_pmove (int x)
45 {
46 return (x == 0) || (x == M_IS) || (x == M_FU) || (x == M_S2RND)
47 || (x == M_ISS2) || (x == M_IU);
48 }
49
50 static inline int is_macmod_hmove (int x)
51 {
52 return (x == 0) || (x == M_IS) || (x == M_FU) || (x == M_IU) || (x == M_T)
53 || (x == M_TFU) || (x == M_S2RND) || (x == M_ISS2) || (x == M_IH);
54 }
55
56 static inline int is_macmod_signed (int x)
57 {
58 return (x == 0) || (x == M_IS) || (x == M_T) || (x == M_S2RND)
59 || (x == M_ISS2) || (x == M_IH) || (x == M_W32);
60 }
61
62 /* dsp32mac
63 +----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
64 | 1 | 1 | 0 | 0 |.M.| 0 | 0 |.mmod..........|.MM|.P.|.w1|.op1...|
65 |.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1......|
66 +----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
67 */
68
69 typedef struct
70 {
71 unsigned long opcode;
72 int bits_src1;
73 int mask_src1;
74 int bits_src0;
75 int mask_src0;
76 int bits_dst;
77 int mask_dst;
78 int bits_h10;
79 int mask_h10;
80 int bits_h00;
81 int mask_h00;
82 int bits_op0;
83 int mask_op0;
84 int bits_w0;
85 int mask_w0;
86 int bits_h11;
87 int mask_h11;
88 int bits_h01;
89 int mask_h01;
90 int bits_op1;
91 int mask_op1;
92 int bits_w1;
93 int mask_w1;
94 int bits_P;
95 int mask_P;
96 int bits_MM;
97 int mask_MM;
98 int bits_mmod;
99 int mask_mmod;
100 int bits_code2;
101 int mask_code2;
102 int bits_M;
103 int mask_M;
104 int bits_code;
105 int mask_code;
106 } DSP32Mac;
107
108 #define DSP32Mac_opcode 0xc0000000
109 #define DSP32Mac_src1_bits 0
110 #define DSP32Mac_src1_mask 0x7
111 #define DSP32Mac_src0_bits 3
112 #define DSP32Mac_src0_mask 0x7
113 #define DSP32Mac_dst_bits 6
114 #define DSP32Mac_dst_mask 0x7
115 #define DSP32Mac_h10_bits 9
116 #define DSP32Mac_h10_mask 0x1
117 #define DSP32Mac_h00_bits 10
118 #define DSP32Mac_h00_mask 0x1
119 #define DSP32Mac_op0_bits 11
120 #define DSP32Mac_op0_mask 0x3
121 #define DSP32Mac_w0_bits 13
122 #define DSP32Mac_w0_mask 0x1
123 #define DSP32Mac_h11_bits 14
124 #define DSP32Mac_h11_mask 0x1
125 #define DSP32Mac_h01_bits 15
126 #define DSP32Mac_h01_mask 0x1
127 #define DSP32Mac_op1_bits 16
128 #define DSP32Mac_op1_mask 0x3
129 #define DSP32Mac_w1_bits 18
130 #define DSP32Mac_w1_mask 0x1
131 #define DSP32Mac_p_bits 19
132 #define DSP32Mac_p_mask 0x1
133 #define DSP32Mac_MM_bits 20
134 #define DSP32Mac_MM_mask 0x1
135 #define DSP32Mac_mmod_bits 21
136 #define DSP32Mac_mmod_mask 0xf
137 #define DSP32Mac_code2_bits 25
138 #define DSP32Mac_code2_mask 0x3
139 #define DSP32Mac_M_bits 27
140 #define DSP32Mac_M_mask 0x1
141 #define DSP32Mac_code_bits 28
142 #define DSP32Mac_code_mask 0xf
143
144 #define init_DSP32Mac \
145 { \
146 DSP32Mac_opcode, \
147 DSP32Mac_src1_bits, DSP32Mac_src1_mask, \
148 DSP32Mac_src0_bits, DSP32Mac_src0_mask, \
149 DSP32Mac_dst_bits, DSP32Mac_dst_mask, \
150 DSP32Mac_h10_bits, DSP32Mac_h10_mask, \
151 DSP32Mac_h00_bits, DSP32Mac_h00_mask, \
152 DSP32Mac_op0_bits, DSP32Mac_op0_mask, \
153 DSP32Mac_w0_bits, DSP32Mac_w0_mask, \
154 DSP32Mac_h11_bits, DSP32Mac_h11_mask, \
155 DSP32Mac_h01_bits, DSP32Mac_h01_mask, \
156 DSP32Mac_op1_bits, DSP32Mac_op1_mask, \
157 DSP32Mac_w1_bits, DSP32Mac_w1_mask, \
158 DSP32Mac_p_bits, DSP32Mac_p_mask, \
159 DSP32Mac_MM_bits, DSP32Mac_MM_mask, \
160 DSP32Mac_mmod_bits, DSP32Mac_mmod_mask, \
161 DSP32Mac_code2_bits, DSP32Mac_code2_mask, \
162 DSP32Mac_M_bits, DSP32Mac_M_mask, \
163 DSP32Mac_code_bits, DSP32Mac_code_mask \
164 };
165
166 /* dsp32mult
167 +----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
168 | 1 | 1 | 0 | 0 |.M.| 0 | 1 |.mmod..........|.MM|.P.|.w1|.op1...|
169 |.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1......|
170 +----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+
171 */
172
173 typedef DSP32Mac DSP32Mult;
174 #define DSP32Mult_opcode 0xc2000000
175
176 #define init_DSP32Mult \
177 { \
178 DSP32Mult_opcode, \
179 DSP32Mac_src1_bits, DSP32Mac_src1_mask, \
180 DSP32Mac_src0_bits, DSP32Mac_src0_mask, \
181 DSP32Mac_dst_bits, DSP32Mac_dst_mask, \
182 DSP32Mac_h10_bits, DSP32Mac_h10_mask, \
183 DSP32Mac_h00_bits, DSP32Mac_h00_mask, \
184 DSP32Mac_op0_bits, DSP32Mac_op0_mask, \
185 DSP32Mac_w0_bits, DSP32Mac_w0_mask, \
186 DSP32Mac_h11_bits, DSP32Mac_h11_mask, \
187 DSP32Mac_h01_bits, DSP32Mac_h01_mask, \
188 DSP32Mac_op1_bits, DSP32Mac_op1_mask, \
189 DSP32Mac_w1_bits, DSP32Mac_w1_mask, \
190 DSP32Mac_p_bits, DSP32Mac_p_mask, \
191 DSP32Mac_MM_bits, DSP32Mac_MM_mask, \
192 DSP32Mac_mmod_bits, DSP32Mac_mmod_mask, \
193 DSP32Mac_code2_bits, DSP32Mac_code2_mask, \
194 DSP32Mac_M_bits, DSP32Mac_M_mask, \
195 DSP32Mac_code_bits, DSP32Mac_code_mask \
196 };
197
198 /* dsp32alu
199 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
200 | 1 | 1 | 0 | 0 |.M.| 1 | 0 | - | - | - |.HL|.aopcde............|
201 |.aop...|.s.|.x.|.dst0......|.dst1......|.src0......|.src1......|
202 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
203 */
204
205 typedef struct
206 {
207 unsigned long opcode;
208 int bits_src1;
209 int mask_src1;
210 int bits_src0;
211 int mask_src0;
212 int bits_dst1;
213 int mask_dst1;
214 int bits_dst0;
215 int mask_dst0;
216 int bits_x;
217 int mask_x;
218 int bits_s;
219 int mask_s;
220 int bits_aop;
221 int mask_aop;
222 int bits_aopcde;
223 int mask_aopcde;
224 int bits_HL;
225 int mask_HL;
226 int bits_dontcare;
227 int mask_dontcare;
228 int bits_code2;
229 int mask_code2;
230 int bits_M;
231 int mask_M;
232 int bits_code;
233 int mask_code;
234 } DSP32Alu;
235
236 #define DSP32Alu_opcode 0xc4000000
237 #define DSP32Alu_src1_bits 0
238 #define DSP32Alu_src1_mask 0x7
239 #define DSP32Alu_src0_bits 3
240 #define DSP32Alu_src0_mask 0x7
241 #define DSP32Alu_dst1_bits 6
242 #define DSP32Alu_dst1_mask 0x7
243 #define DSP32Alu_dst0_bits 9
244 #define DSP32Alu_dst0_mask 0x7
245 #define DSP32Alu_x_bits 12
246 #define DSP32Alu_x_mask 0x1
247 #define DSP32Alu_s_bits 13
248 #define DSP32Alu_s_mask 0x1
249 #define DSP32Alu_aop_bits 14
250 #define DSP32Alu_aop_mask 0x3
251 #define DSP32Alu_aopcde_bits 16
252 #define DSP32Alu_aopcde_mask 0x1f
253 #define DSP32Alu_HL_bits 21
254 #define DSP32Alu_HL_mask 0x1
255 #define DSP32Alu_dontcare_bits 22
256 #define DSP32Alu_dontcare_mask 0x7
257 #define DSP32Alu_code2_bits 25
258 #define DSP32Alu_code2_mask 0x3
259 #define DSP32Alu_M_bits 27
260 #define DSP32Alu_M_mask 0x1
261 #define DSP32Alu_code_bits 28
262 #define DSP32Alu_code_mask 0xf
263
264 #define init_DSP32Alu \
265 { \
266 DSP32Alu_opcode, \
267 DSP32Alu_src1_bits, DSP32Alu_src1_mask, \
268 DSP32Alu_src0_bits, DSP32Alu_src0_mask, \
269 DSP32Alu_dst1_bits, DSP32Alu_dst1_mask, \
270 DSP32Alu_dst0_bits, DSP32Alu_dst0_mask, \
271 DSP32Alu_x_bits, DSP32Alu_x_mask, \
272 DSP32Alu_s_bits, DSP32Alu_s_mask, \
273 DSP32Alu_aop_bits, DSP32Alu_aop_mask, \
274 DSP32Alu_aopcde_bits, DSP32Alu_aopcde_mask, \
275 DSP32Alu_HL_bits, DSP32Alu_HL_mask, \
276 DSP32Alu_dontcare_bits, DSP32Alu_dontcare_mask, \
277 DSP32Alu_code2_bits, DSP32Alu_code2_mask, \
278 DSP32Alu_M_bits, DSP32Alu_M_mask, \
279 DSP32Alu_code_bits, DSP32Alu_code_mask \
280 };
281
282 /* dsp32shift
283 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
284 | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 0 | - | - |.sopcde............|
285 |.sop...|.HLs...|.dst0......| - | - | - |.src0......|.src1......|
286 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
287 */
288
289 typedef struct
290 {
291 unsigned long opcode;
292 int bits_src1;
293 int mask_src1;
294 int bits_src0;
295 int mask_src0;
296 int bits_dst1;
297 int mask_dst1;
298 int bits_dst0;
299 int mask_dst0;
300 int bits_HLs;
301 int mask_HLs;
302 int bits_sop;
303 int mask_sop;
304 int bits_sopcde;
305 int mask_sopcde;
306 int bits_dontcare;
307 int mask_dontcare;
308 int bits_code2;
309 int mask_code2;
310 int bits_M;
311 int mask_M;
312 int bits_code;
313 int mask_code;
314 } DSP32Shift;
315
316 #define DSP32Shift_opcode 0xc6000000
317 #define DSP32Shift_src1_bits 0
318 #define DSP32Shift_src1_mask 0x7
319 #define DSP32Shift_src0_bits 3
320 #define DSP32Shift_src0_mask 0x7
321 #define DSP32Shift_dst1_bits 6
322 #define DSP32Shift_dst1_mask 0x7
323 #define DSP32Shift_dst0_bits 9
324 #define DSP32Shift_dst0_mask 0x7
325 #define DSP32Shift_HLs_bits 12
326 #define DSP32Shift_HLs_mask 0x3
327 #define DSP32Shift_sop_bits 14
328 #define DSP32Shift_sop_mask 0x3
329 #define DSP32Shift_sopcde_bits 16
330 #define DSP32Shift_sopcde_mask 0x1f
331 #define DSP32Shift_dontcare_bits 21
332 #define DSP32Shift_dontcare_mask 0x3
333 #define DSP32Shift_code2_bits 23
334 #define DSP32Shift_code2_mask 0xf
335 #define DSP32Shift_M_bits 27
336 #define DSP32Shift_M_mask 0x1
337 #define DSP32Shift_code_bits 28
338 #define DSP32Shift_code_mask 0xf
339
340 #define init_DSP32Shift \
341 { \
342 DSP32Shift_opcode, \
343 DSP32Shift_src1_bits, DSP32Shift_src1_mask, \
344 DSP32Shift_src0_bits, DSP32Shift_src0_mask, \
345 DSP32Shift_dst1_bits, DSP32Shift_dst1_mask, \
346 DSP32Shift_dst0_bits, DSP32Shift_dst0_mask, \
347 DSP32Shift_HLs_bits, DSP32Shift_HLs_mask, \
348 DSP32Shift_sop_bits, DSP32Shift_sop_mask, \
349 DSP32Shift_sopcde_bits, DSP32Shift_sopcde_mask, \
350 DSP32Shift_dontcare_bits, DSP32Shift_dontcare_mask, \
351 DSP32Shift_code2_bits, DSP32Shift_code2_mask, \
352 DSP32Shift_M_bits, DSP32Shift_M_mask, \
353 DSP32Shift_code_bits, DSP32Shift_code_mask \
354 };
355
356 /* dsp32shiftimm
357 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
358 | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 1 | - | - |.sopcde............|
359 |.sop...|.HLs...|.dst0......|.immag.................|.src1......|
360 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
361 */
362
363 typedef struct
364 {
365 unsigned long opcode;
366 int bits_src1;
367 int mask_src1;
368 int bits_immag;
369 int mask_immag;
370 int bits_dst0;
371 int mask_dst0;
372 int bits_HLs;
373 int mask_HLs;
374 int bits_sop;
375 int mask_sop;
376 int bits_sopcde;
377 int mask_sopcde;
378 int bits_dontcare;
379 int mask_dontcare;
380 int bits_code2;
381 int mask_code2;
382 int bits_M;
383 int mask_M;
384 int bits_code;
385 int mask_code;
386 } DSP32ShiftImm;
387
388 #define DSP32ShiftImm_opcode 0xc6800000
389 #define DSP32ShiftImm_src1_bits 0
390 #define DSP32ShiftImm_src1_mask 0x7
391 #define DSP32ShiftImm_immag_bits 3
392 #define DSP32ShiftImm_immag_mask 0x3f
393 #define DSP32ShiftImm_dst0_bits 9
394 #define DSP32ShiftImm_dst0_mask 0x7
395 #define DSP32ShiftImm_HLs_bits 12
396 #define DSP32ShiftImm_HLs_mask 0x3
397 #define DSP32ShiftImm_sop_bits 14
398 #define DSP32ShiftImm_sop_mask 0x3
399 #define DSP32ShiftImm_sopcde_bits 16
400 #define DSP32ShiftImm_sopcde_mask 0x1f
401 #define DSP32ShiftImm_dontcare_bits 21
402 #define DSP32ShiftImm_dontcare_mask 0x3
403 #define DSP32ShiftImm_code2_bits 23
404 #define DSP32ShiftImm_code2_mask 0xf
405 #define DSP32ShiftImm_M_bits 27
406 #define DSP32ShiftImm_M_mask 0x1
407 #define DSP32ShiftImm_code_bits 28
408 #define DSP32ShiftImm_code_mask 0xf
409
410 #define init_DSP32ShiftImm \
411 { \
412 DSP32ShiftImm_opcode, \
413 DSP32ShiftImm_src1_bits, DSP32ShiftImm_src1_mask, \
414 DSP32ShiftImm_immag_bits, DSP32ShiftImm_immag_mask, \
415 DSP32ShiftImm_dst0_bits, DSP32ShiftImm_dst0_mask, \
416 DSP32ShiftImm_HLs_bits, DSP32ShiftImm_HLs_mask, \
417 DSP32ShiftImm_sop_bits, DSP32ShiftImm_sop_mask, \
418 DSP32ShiftImm_sopcde_bits, DSP32ShiftImm_sopcde_mask, \
419 DSP32ShiftImm_dontcare_bits, DSP32ShiftImm_dontcare_mask, \
420 DSP32ShiftImm_code2_bits, DSP32ShiftImm_code2_mask, \
421 DSP32ShiftImm_M_bits, DSP32ShiftImm_M_mask, \
422 DSP32ShiftImm_code_bits, DSP32ShiftImm_code_mask \
423 };
424
425 /* LOAD / STORE */
426
427 /* LDSTidxI
428 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
429 | 1 | 1 | 1 | 0 | 0 | 1 |.W.|.Z.|.sz....|.ptr.......|.reg.......|
430 |.offset........................................................|
431 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
432 */
433
434 typedef struct
435 {
436 unsigned long opcode;
437 int bits_offset;
438 int mask_offset;
439 int bits_reg;
440 int mask_reg;
441 int bits_ptr;
442 int mask_ptr;
443 int bits_sz;
444 int mask_sz;
445 int bits_Z;
446 int mask_Z;
447 int bits_W;
448 int mask_W;
449 int bits_code;
450 int mask_code;
451 } LDSTidxI;
452
453 #define LDSTidxI_opcode 0xe4000000
454 #define LDSTidxI_offset_bits 0
455 #define LDSTidxI_offset_mask 0xffff
456 #define LDSTidxI_reg_bits 16
457 #define LDSTidxI_reg_mask 0x7
458 #define LDSTidxI_ptr_bits 19
459 #define LDSTidxI_ptr_mask 0x7
460 #define LDSTidxI_sz_bits 22
461 #define LDSTidxI_sz_mask 0x3
462 #define LDSTidxI_Z_bits 24
463 #define LDSTidxI_Z_mask 0x1
464 #define LDSTidxI_W_bits 25
465 #define LDSTidxI_W_mask 0x1
466 #define LDSTidxI_code_bits 26
467 #define LDSTidxI_code_mask 0x3f
468
469 #define init_LDSTidxI \
470 { \
471 LDSTidxI_opcode, \
472 LDSTidxI_offset_bits, LDSTidxI_offset_mask, \
473 LDSTidxI_reg_bits, LDSTidxI_reg_mask, \
474 LDSTidxI_ptr_bits, LDSTidxI_ptr_mask, \
475 LDSTidxI_sz_bits, LDSTidxI_sz_mask, \
476 LDSTidxI_Z_bits, LDSTidxI_Z_mask, \
477 LDSTidxI_W_bits, LDSTidxI_W_mask, \
478 LDSTidxI_code_bits, LDSTidxI_code_mask \
479 };
480
481
482 /* LDST
483 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
484 | 1 | 0 | 0 | 1 |.sz....|.W.|.aop...|.Z.|.ptr.......|.reg.......|
485 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
486 */
487
488 typedef struct
489 {
490 unsigned short opcode;
491 int bits_reg;
492 int mask_reg;
493 int bits_ptr;
494 int mask_ptr;
495 int bits_Z;
496 int mask_Z;
497 int bits_aop;
498 int mask_aop;
499 int bits_W;
500 int mask_W;
501 int bits_sz;
502 int mask_sz;
503 int bits_code;
504 int mask_code;
505 } LDST;
506
507 #define LDST_opcode 0x9000
508 #define LDST_reg_bits 0
509 #define LDST_reg_mask 0x7
510 #define LDST_ptr_bits 3
511 #define LDST_ptr_mask 0x7
512 #define LDST_Z_bits 6
513 #define LDST_Z_mask 0x1
514 #define LDST_aop_bits 7
515 #define LDST_aop_mask 0x3
516 #define LDST_W_bits 9
517 #define LDST_W_mask 0x1
518 #define LDST_sz_bits 10
519 #define LDST_sz_mask 0x3
520 #define LDST_code_bits 12
521 #define LDST_code_mask 0xf
522
523 #define init_LDST \
524 { \
525 LDST_opcode, \
526 LDST_reg_bits, LDST_reg_mask, \
527 LDST_ptr_bits, LDST_ptr_mask, \
528 LDST_Z_bits, LDST_Z_mask, \
529 LDST_aop_bits, LDST_aop_mask, \
530 LDST_W_bits, LDST_W_mask, \
531 LDST_sz_bits, LDST_sz_mask, \
532 LDST_code_bits, LDST_code_mask \
533 };
534
535 /* LDSTii
536 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
537 | 1 | 0 | 1 |.W.|.op....|.offset........|.ptr.......|.reg.......|
538 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
539 */
540
541 typedef struct
542 {
543 unsigned short opcode;
544 int bits_reg;
545 int mask_reg;
546 int bits_ptr;
547 int mask_ptr;
548 int bits_offset;
549 int mask_offset;
550 int bits_op;
551 int mask_op;
552 int bits_W;
553 int mask_W;
554 int bits_code;
555 int mask_code;
556 } LDSTii;
557
558 #define LDSTii_opcode 0xa000
559 #define LDSTii_reg_bit 0
560 #define LDSTii_reg_mask 0x7
561 #define LDSTii_ptr_bit 3
562 #define LDSTii_ptr_mask 0x7
563 #define LDSTii_offset_bit 6
564 #define LDSTii_offset_mask 0xf
565 #define LDSTii_op_bit 10
566 #define LDSTii_op_mask 0x3
567 #define LDSTii_W_bit 12
568 #define LDSTii_W_mask 0x1
569 #define LDSTii_code_bit 13
570 #define LDSTii_code_mask 0x7
571
572 #define init_LDSTii \
573 { \
574 LDSTii_opcode, \
575 LDSTii_reg_bit, LDSTii_reg_mask, \
576 LDSTii_ptr_bit, LDSTii_ptr_mask, \
577 LDSTii_offset_bit, LDSTii_offset_mask, \
578 LDSTii_op_bit, LDSTii_op_mask, \
579 LDSTii_W_bit, LDSTii_W_mask, \
580 LDSTii_code_bit, LDSTii_code_mask \
581 };
582
583
584 /* LDSTiiFP
585 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
586 | 1 | 0 | 1 | 1 | 1 | 0 |.W.|.offset............|.reg...........|
587 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
588 */
589
590 typedef struct
591 {
592 unsigned short opcode;
593 int bits_reg;
594 int mask_reg;
595 int bits_offset;
596 int mask_offset;
597 int bits_W;
598 int mask_W;
599 int bits_code;
600 int mask_code;
601 } LDSTiiFP;
602
603 #define LDSTiiFP_opcode 0xb800
604 #define LDSTiiFP_reg_bits 0
605 #define LDSTiiFP_reg_mask 0xf
606 #define LDSTiiFP_offset_bits 4
607 #define LDSTiiFP_offset_mask 0x1f
608 #define LDSTiiFP_W_bits 9
609 #define LDSTiiFP_W_mask 0x1
610 #define LDSTiiFP_code_bits 10
611 #define LDSTiiFP_code_mask 0x3f
612
613 #define init_LDSTiiFP \
614 { \
615 LDSTiiFP_opcode, \
616 LDSTiiFP_reg_bits, LDSTiiFP_reg_mask, \
617 LDSTiiFP_offset_bits, LDSTiiFP_offset_mask, \
618 LDSTiiFP_W_bits, LDSTiiFP_W_mask, \
619 LDSTiiFP_code_bits, LDSTiiFP_code_mask \
620 };
621
622 /* dspLDST
623 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
624 | 1 | 0 | 0 | 1 | 1 | 1 |.W.|.aop...|.m.....|.i.....|.reg.......|
625 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
626 */
627
628 typedef struct
629 {
630 unsigned short opcode;
631 int bits_reg;
632 int mask_reg;
633 int bits_i;
634 int mask_i;
635 int bits_m;
636 int mask_m;
637 int bits_aop;
638 int mask_aop;
639 int bits_W;
640 int mask_W;
641 int bits_code;
642 int mask_code;
643 } DspLDST;
644
645 #define DspLDST_opcode 0x9c00
646 #define DspLDST_reg_bits 0
647 #define DspLDST_reg_mask 0x7
648 #define DspLDST_i_bits 3
649 #define DspLDST_i_mask 0x3
650 #define DspLDST_m_bits 5
651 #define DspLDST_m_mask 0x3
652 #define DspLDST_aop_bits 7
653 #define DspLDST_aop_mask 0x3
654 #define DspLDST_W_bits 9
655 #define DspLDST_W_mask 0x1
656 #define DspLDST_code_bits 10
657 #define DspLDST_code_mask 0x3f
658
659 #define init_DspLDST \
660 { \
661 DspLDST_opcode, \
662 DspLDST_reg_bits, DspLDST_reg_mask, \
663 DspLDST_i_bits, DspLDST_i_mask, \
664 DspLDST_m_bits, DspLDST_m_mask, \
665 DspLDST_aop_bits, DspLDST_aop_mask, \
666 DspLDST_W_bits, DspLDST_W_mask, \
667 DspLDST_code_bits, DspLDST_code_mask \
668 };
669
670
671 /* LDSTpmod
672 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
673 | 1 | 0 | 0 | 0 |.W.|.aop...|.reg.......|.idx.......|.ptr.......|
674 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
675 */
676
677 typedef struct
678 {
679 unsigned short opcode;
680 int bits_ptr;
681 int mask_ptr;
682 int bits_idx;
683 int mask_idx;
684 int bits_reg;
685 int mask_reg;
686 int bits_aop;
687 int mask_aop;
688 int bits_W;
689 int mask_W;
690 int bits_code;
691 int mask_code;
692 } LDSTpmod;
693
694 #define LDSTpmod_opcode 0x8000
695 #define LDSTpmod_ptr_bits 0
696 #define LDSTpmod_ptr_mask 0x7
697 #define LDSTpmod_idx_bits 3
698 #define LDSTpmod_idx_mask 0x7
699 #define LDSTpmod_reg_bits 6
700 #define LDSTpmod_reg_mask 0x7
701 #define LDSTpmod_aop_bits 9
702 #define LDSTpmod_aop_mask 0x3
703 #define LDSTpmod_W_bits 11
704 #define LDSTpmod_W_mask 0x1
705 #define LDSTpmod_code_bits 12
706 #define LDSTpmod_code_mask 0xf
707
708 #define init_LDSTpmod \
709 { \
710 LDSTpmod_opcode, \
711 LDSTpmod_ptr_bits, LDSTpmod_ptr_mask, \
712 LDSTpmod_idx_bits, LDSTpmod_idx_mask, \
713 LDSTpmod_reg_bits, LDSTpmod_reg_mask, \
714 LDSTpmod_aop_bits, LDSTpmod_aop_mask, \
715 LDSTpmod_W_bits, LDSTpmod_W_mask, \
716 LDSTpmod_code_bits, LDSTpmod_code_mask \
717 };
718
719
720 /* LOGI2op
721 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
722 | 0 | 1 | 0 | 0 | 1 |.opc.......|.src...............|.dst.......|
723 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
724 */
725
726 typedef struct
727 {
728 unsigned short opcode;
729 int bits_dst;
730 int mask_dst;
731 int bits_src;
732 int mask_src;
733 int bits_opc;
734 int mask_opc;
735 int bits_code;
736 int mask_code;
737 } LOGI2op;
738
739 #define LOGI2op_opcode 0x4800
740 #define LOGI2op_dst_bits 0
741 #define LOGI2op_dst_mask 0x7
742 #define LOGI2op_src_bits 3
743 #define LOGI2op_src_mask 0x1f
744 #define LOGI2op_opc_bits 8
745 #define LOGI2op_opc_mask 0x7
746 #define LOGI2op_code_bits 11
747 #define LOGI2op_code_mask 0x1f
748
749 #define init_LOGI2op \
750 { \
751 LOGI2op_opcode, \
752 LOGI2op_dst_bits, LOGI2op_dst_mask, \
753 LOGI2op_src_bits, LOGI2op_src_mask, \
754 LOGI2op_opc_bits, LOGI2op_opc_mask, \
755 LOGI2op_code_bits, LOGI2op_code_mask \
756 };
757
758
759 /* ALU2op
760 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
761 | 0 | 1 | 0 | 0 | 0 | 0 |.opc...........|.src.......|.dst.......|
762 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
763 */
764
765 typedef struct
766 {
767 unsigned short opcode;
768 int bits_dst;
769 int mask_dst;
770 int bits_src;
771 int mask_src;
772 int bits_opc;
773 int mask_opc;
774 int bits_code;
775 int mask_code;
776 } ALU2op;
777
778 #define ALU2op_opcode 0x4000
779 #define ALU2op_dst_bits 0
780 #define ALU2op_dst_mask 0x7
781 #define ALU2op_src_bits 3
782 #define ALU2op_src_mask 0x7
783 #define ALU2op_opc_bits 6
784 #define ALU2op_opc_mask 0xf
785 #define ALU2op_code_bits 10
786 #define ALU2op_code_mask 0x3f
787
788 #define init_ALU2op \
789 { \
790 ALU2op_opcode, \
791 ALU2op_dst_bits, ALU2op_dst_mask, \
792 ALU2op_src_bits, ALU2op_src_mask, \
793 ALU2op_opc_bits, ALU2op_opc_mask, \
794 ALU2op_code_bits, ALU2op_code_mask \
795 };
796
797
798 /* BRCC
799 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
800 | 0 | 0 | 0 | 1 |.T.|.B.|.offset................................|
801 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
802 */
803
804 typedef struct
805 {
806 unsigned short opcode;
807 int bits_offset;
808 int mask_offset;
809 int bits_B;
810 int mask_B;
811 int bits_T;
812 int mask_T;
813 int bits_code;
814 int mask_code;
815 } BRCC;
816
817 #define BRCC_opcode 0x1000
818 #define BRCC_offset_bits 0
819 #define BRCC_offset_mask 0x3ff
820 #define BRCC_B_bits 10
821 #define BRCC_B_mask 0x1
822 #define BRCC_T_bits 11
823 #define BRCC_T_mask 0x1
824 #define BRCC_code_bits 12
825 #define BRCC_code_mask 0xf
826
827 #define init_BRCC \
828 { \
829 BRCC_opcode, \
830 BRCC_offset_bits, BRCC_offset_mask, \
831 BRCC_B_bits, BRCC_B_mask, \
832 BRCC_T_bits, BRCC_T_mask, \
833 BRCC_code_bits, BRCC_code_mask \
834 };
835
836
837 /* UJUMP
838 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
839 | 0 | 0 | 1 | 0 |.offset........................................|
840 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
841 */
842
843 typedef struct
844 {
845 unsigned short opcode;
846 int bits_offset;
847 int mask_offset;
848 int bits_code;
849 int mask_code;
850 } UJump;
851
852 #define UJump_opcode 0x2000
853 #define UJump_offset_bits 0
854 #define UJump_offset_mask 0xfff
855 #define UJump_code_bits 12
856 #define UJump_code_mask 0xf
857
858 #define init_UJump \
859 { \
860 UJump_opcode, \
861 UJump_offset_bits, UJump_offset_mask, \
862 UJump_code_bits, UJump_code_mask \
863 };
864
865
866 /* ProgCtrl
867 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
868 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.prgfunc.......|.poprnd........|
869 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
870 */
871
872 typedef struct
873 {
874 unsigned short opcode;
875 int bits_poprnd;
876 int mask_poprnd;
877 int bits_prgfunc;
878 int mask_prgfunc;
879 int bits_code;
880 int mask_code;
881 } ProgCtrl;
882
883 #define ProgCtrl_opcode 0x0000
884 #define ProgCtrl_poprnd_bits 0
885 #define ProgCtrl_poprnd_mask 0xf
886 #define ProgCtrl_prgfunc_bits 4
887 #define ProgCtrl_prgfunc_mask 0xf
888 #define ProgCtrl_code_bits 8
889 #define ProgCtrl_code_mask 0xff
890
891 #define init_ProgCtrl \
892 { \
893 ProgCtrl_opcode, \
894 ProgCtrl_poprnd_bits, ProgCtrl_poprnd_mask, \
895 ProgCtrl_prgfunc_bits, ProgCtrl_prgfunc_mask, \
896 ProgCtrl_code_bits, ProgCtrl_code_mask \
897 };
898
899 /* CALLa
900 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
901 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |.S.|.msw...........................|
902 |.lsw...........................................................|
903 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
904 */
905
906
907 typedef struct
908 {
909 unsigned long opcode;
910 int bits_addr;
911 int mask_addr;
912 int bits_S;
913 int mask_S;
914 int bits_code;
915 int mask_code;
916 } CALLa;
917
918 #define CALLa_opcode 0xe2000000
919 #define CALLa_addr_bits 0
920 #define CALLa_addr_mask 0xffffff
921 #define CALLa_S_bits 24
922 #define CALLa_S_mask 0x1
923 #define CALLa_code_bits 25
924 #define CALLa_code_mask 0x7f
925
926 #define init_CALLa \
927 { \
928 CALLa_opcode, \
929 CALLa_addr_bits, CALLa_addr_mask, \
930 CALLa_S_bits, CALLa_S_mask, \
931 CALLa_code_bits, CALLa_code_mask \
932 };
933
934
935 /* pseudoDEBUG
936 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
937 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |.fn....|.grp.......|.reg.......|
938 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
939 */
940
941 typedef struct
942 {
943 unsigned short opcode;
944 int bits_reg;
945 int mask_reg;
946 int bits_grp;
947 int mask_grp;
948 int bits_fn;
949 int mask_fn;
950 int bits_code;
951 int mask_code;
952 } PseudoDbg;
953
954 #define PseudoDbg_opcode 0xf800
955 #define PseudoDbg_reg_bits 0
956 #define PseudoDbg_reg_mask 0x7
957 #define PseudoDbg_grp_bits 3
958 #define PseudoDbg_grp_mask 0x7
959 #define PseudoDbg_fn_bits 6
960 #define PseudoDbg_fn_mask 0x3
961 #define PseudoDbg_code_bits 8
962 #define PseudoDbg_code_mask 0xff
963
964 #define init_PseudoDbg \
965 { \
966 PseudoDbg_opcode, \
967 PseudoDbg_reg_bits, PseudoDbg_reg_mask, \
968 PseudoDbg_grp_bits, PseudoDbg_grp_mask, \
969 PseudoDbg_fn_bits, PseudoDbg_fn_mask, \
970 PseudoDbg_code_bits, PseudoDbg_code_mask \
971 };
972
973 /* PseudoDbg_assert
974 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
975 | 1 | 1 | 1 | 1 | 0 | - | - | - | dbgop |.grp.......|.regtest...|
976 |.expected......................................................|
977 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
978 */
979
980 typedef struct
981 {
982 unsigned long opcode;
983 int bits_expected;
984 int mask_expected;
985 int bits_regtest;
986 int mask_regtest;
987 int bits_grp;
988 int mask_grp;
989 int bits_dbgop;
990 int mask_dbgop;
991 int bits_dontcare;
992 int mask_dontcare;
993 int bits_code;
994 int mask_code;
995 } PseudoDbg_Assert;
996
997 #define PseudoDbg_Assert_opcode 0xf0000000
998 #define PseudoDbg_Assert_expected_bits 0
999 #define PseudoDbg_Assert_expected_mask 0xffff
1000 #define PseudoDbg_Assert_regtest_bits 16
1001 #define PseudoDbg_Assert_regtest_mask 0x7
1002 #define PseudoDbg_Assert_grp_bits 19
1003 #define PseudoDbg_Assert_grp_mask 0x7
1004 #define PseudoDbg_Assert_dbgop_bits 22
1005 #define PseudoDbg_Assert_dbgop_mask 0x3
1006 #define PseudoDbg_Assert_dontcare_bits 24
1007 #define PseudoDbg_Assert_dontcare_mask 0x7
1008 #define PseudoDbg_Assert_code_bits 27
1009 #define PseudoDbg_Assert_code_mask 0x1f
1010
1011 #define init_PseudoDbg_Assert \
1012 { \
1013 PseudoDbg_Assert_opcode, \
1014 PseudoDbg_Assert_expected_bits, PseudoDbg_Assert_expected_mask, \
1015 PseudoDbg_Assert_regtest_bits, PseudoDbg_Assert_regtest_mask, \
1016 PseudoDbg_Assert_grp_bits, PseudoDbg_Assert_grp_mask, \
1017 PseudoDbg_Assert_dbgop_bits, PseudoDbg_Assert_dbgop_mask, \
1018 PseudoDbg_Assert_dontcare_bits, PseudoDbg_Assert_dontcare_mask, \
1019 PseudoDbg_Assert_code_bits, PseudoDbg_Assert_code_mask \
1020 };
1021
1022 /* pseudoChr
1023 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1024 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |.ch............................|
1025 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1026 */
1027
1028 typedef struct
1029 {
1030 unsigned short opcode;
1031 int bits_ch;
1032 int mask_ch;
1033 int bits_code;
1034 int mask_code;
1035 } PseudoChr;
1036
1037 #define PseudoChr_opcode 0xf900
1038 #define PseudoChr_ch_bits 0
1039 #define PseudoChr_ch_mask 0xff
1040 #define PseudoChr_code_bits 8
1041 #define PseudoChr_code_mask 0xff
1042
1043 #define init_PseudoChr \
1044 { \
1045 PseudoChr_opcode, \
1046 PseudoChr_ch_bits, PseudoChr_ch_mask, \
1047 PseudoChr_code_bits, PseudoChr_code_mask \
1048 };
1049
1050 /* CaCTRL
1051 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1052 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |.a.|.op....|.reg.......|
1053 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1054 */
1055
1056 typedef struct
1057 {
1058 unsigned short opcode;
1059 int bits_reg;
1060 int mask_reg;
1061 int bits_op;
1062 int mask_op;
1063 int bits_a;
1064 int mask_a;
1065 int bits_code;
1066 int mask_code;
1067 } CaCTRL;
1068
1069 #define CaCTRL_opcode 0x0240
1070 #define CaCTRL_reg_bits 0
1071 #define CaCTRL_reg_mask 0x7
1072 #define CaCTRL_op_bits 3
1073 #define CaCTRL_op_mask 0x3
1074 #define CaCTRL_a_bits 5
1075 #define CaCTRL_a_mask 0x1
1076 #define CaCTRL_code_bits 6
1077 #define CaCTRL_code_mask 0x3fff
1078
1079 #define init_CaCTRL \
1080 { \
1081 CaCTRL_opcode, \
1082 CaCTRL_reg_bits, CaCTRL_reg_mask, \
1083 CaCTRL_op_bits, CaCTRL_op_mask, \
1084 CaCTRL_a_bits, CaCTRL_a_mask, \
1085 CaCTRL_code_bits, CaCTRL_code_mask \
1086 };
1087
1088 /* PushPopMultiple
1089 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1090 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.d.|.p.|.W.|.dr........|.pr........|
1091 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1092 */
1093
1094 typedef struct
1095 {
1096 unsigned short opcode;
1097 int bits_pr;
1098 int mask_pr;
1099 int bits_dr;
1100 int mask_dr;
1101 int bits_W;
1102 int mask_W;
1103 int bits_p;
1104 int mask_p;
1105 int bits_d;
1106 int mask_d;
1107 int bits_code;
1108 int mask_code;
1109 } PushPopMultiple;
1110
1111 #define PushPopMultiple_opcode 0x0400
1112 #define PushPopMultiple_pr_bits 0
1113 #define PushPopMultiple_pr_mask 0x7
1114 #define PushPopMultiple_dr_bits 3
1115 #define PushPopMultiple_dr_mask 0x7
1116 #define PushPopMultiple_W_bits 6
1117 #define PushPopMultiple_W_mask 0x1
1118 #define PushPopMultiple_p_bits 7
1119 #define PushPopMultiple_p_mask 0x1
1120 #define PushPopMultiple_d_bits 8
1121 #define PushPopMultiple_d_mask 0x1
1122 #define PushPopMultiple_code_bits 8
1123 #define PushPopMultiple_code_mask 0x1
1124
1125 #define init_PushPopMultiple \
1126 { \
1127 PushPopMultiple_opcode, \
1128 PushPopMultiple_pr_bits, PushPopMultiple_pr_mask, \
1129 PushPopMultiple_dr_bits, PushPopMultiple_dr_mask, \
1130 PushPopMultiple_W_bits, PushPopMultiple_W_mask, \
1131 PushPopMultiple_p_bits, PushPopMultiple_p_mask, \
1132 PushPopMultiple_d_bits, PushPopMultiple_d_mask, \
1133 PushPopMultiple_code_bits, PushPopMultiple_code_mask \
1134 };
1135
1136 /* PushPopReg
1137 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1138 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.W.|.grp.......|.reg.......|
1139 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1140 */
1141
1142 typedef struct
1143 {
1144 unsigned short opcode;
1145 int bits_reg;
1146 int mask_reg;
1147 int bits_grp;
1148 int mask_grp;
1149 int bits_W;
1150 int mask_W;
1151 int bits_code;
1152 int mask_code;
1153 } PushPopReg;
1154
1155 #define PushPopReg_opcode 0x0100
1156 #define PushPopReg_reg_bits 0
1157 #define PushPopReg_reg_mask 0x7
1158 #define PushPopReg_grp_bits 3
1159 #define PushPopReg_grp_mask 0x7
1160 #define PushPopReg_W_bits 6
1161 #define PushPopReg_W_mask 0x1
1162 #define PushPopReg_code_bits 7
1163 #define PushPopReg_code_mask 0x1ff
1164
1165 #define init_PushPopReg \
1166 { \
1167 PushPopReg_opcode, \
1168 PushPopReg_reg_bits, PushPopReg_reg_mask, \
1169 PushPopReg_grp_bits, PushPopReg_grp_mask, \
1170 PushPopReg_W_bits, PushPopReg_W_mask, \
1171 PushPopReg_code_bits, PushPopReg_code_mask, \
1172 };
1173
1174 /* linkage
1175 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1176 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.R.|
1177 |.framesize.....................................................|
1178 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1179 */
1180
1181 typedef struct
1182 {
1183 unsigned long opcode;
1184 int bits_framesize;
1185 int mask_framesize;
1186 int bits_R;
1187 int mask_R;
1188 int bits_code;
1189 int mask_code;
1190 } Linkage;
1191
1192 #define Linkage_opcode 0xe8000000
1193 #define Linkage_framesize_bits 0
1194 #define Linkage_framesize_mask 0xffff
1195 #define Linkage_R_bits 16
1196 #define Linkage_R_mask 0x1
1197 #define Linkage_code_bits 17
1198 #define Linkage_code_mask 0x7fff
1199
1200 #define init_Linkage \
1201 { \
1202 Linkage_opcode, \
1203 Linkage_framesize_bits, Linkage_framesize_mask, \
1204 Linkage_R_bits, Linkage_R_mask, \
1205 Linkage_code_bits, Linkage_code_mask \
1206 };
1207
1208 /* LoopSetup
1209 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1210 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |.rop...|.c.|.soffset.......|
1211 |.reg...........| - | - |.eoffset...............................|
1212 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1213 */
1214
1215 typedef struct
1216 {
1217 unsigned long opcode;
1218 int bits_eoffset;
1219 int mask_eoffset;
1220 int bits_dontcare;
1221 int mask_dontcare;
1222 int bits_reg;
1223 int mask_reg;
1224 int bits_soffset;
1225 int mask_soffset;
1226 int bits_c;
1227 int mask_c;
1228 int bits_rop;
1229 int mask_rop;
1230 int bits_code;
1231 int mask_code;
1232 } LoopSetup;
1233
1234 #define LoopSetup_opcode 0xe0800000
1235 #define LoopSetup_eoffset_bits 0
1236 #define LoopSetup_eoffset_mask 0x3ff
1237 #define LoopSetup_dontcare_bits 10
1238 #define LoopSetup_dontcare_mask 0x3
1239 #define LoopSetup_reg_bits 12
1240 #define LoopSetup_reg_mask 0xf
1241 #define LoopSetup_soffset_bits 16
1242 #define LoopSetup_soffset_mask 0xf
1243 #define LoopSetup_c_bits 20
1244 #define LoopSetup_c_mask 0x1
1245 #define LoopSetup_rop_bits 21
1246 #define LoopSetup_rop_mask 0x3
1247 #define LoopSetup_code_bits 23
1248 #define LoopSetup_code_mask 0x1ff
1249
1250 #define init_LoopSetup \
1251 { \
1252 LoopSetup_opcode, \
1253 LoopSetup_eoffset_bits, LoopSetup_eoffset_mask, \
1254 LoopSetup_dontcare_bits, LoopSetup_dontcare_mask, \
1255 LoopSetup_reg_bits, LoopSetup_reg_mask, \
1256 LoopSetup_soffset_bits, LoopSetup_soffset_mask, \
1257 LoopSetup_c_bits, LoopSetup_c_mask, \
1258 LoopSetup_rop_bits, LoopSetup_rop_mask, \
1259 LoopSetup_code_bits, LoopSetup_code_mask \
1260 };
1261
1262 /* LDIMMhalf
1263 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1264 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |.Z.|.H.|.S.|.grp...|.reg.......|
1265 |.hword.........................................................|
1266 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1267 */
1268
1269 typedef struct
1270 {
1271 unsigned long opcode;
1272 int bits_hword;
1273 int mask_hword;
1274 int bits_reg;
1275 int mask_reg;
1276 int bits_grp;
1277 int mask_grp;
1278 int bits_S;
1279 int mask_S;
1280 int bits_H;
1281 int mask_H;
1282 int bits_Z;
1283 int mask_Z;
1284 int bits_code;
1285 int mask_code;
1286 } LDIMMhalf;
1287
1288 #define LDIMMhalf_opcode 0xe1000000
1289 #define LDIMMhalf_hword_bits 0
1290 #define LDIMMhalf_hword_mask 0xffff
1291 #define LDIMMhalf_reg_bits 16
1292 #define LDIMMhalf_reg_mask 0x7
1293 #define LDIMMhalf_grp_bits 19
1294 #define LDIMMhalf_grp_mask 0x3
1295 #define LDIMMhalf_S_bits 21
1296 #define LDIMMhalf_S_mask 0x1
1297 #define LDIMMhalf_H_bits 22
1298 #define LDIMMhalf_H_mask 0x1
1299 #define LDIMMhalf_Z_bits 23
1300 #define LDIMMhalf_Z_mask 0x1
1301 #define LDIMMhalf_code_bits 24
1302 #define LDIMMhalf_code_mask 0xff
1303
1304 #define init_LDIMMhalf \
1305 { \
1306 LDIMMhalf_opcode, \
1307 LDIMMhalf_hword_bits, LDIMMhalf_hword_mask, \
1308 LDIMMhalf_reg_bits, LDIMMhalf_reg_mask, \
1309 LDIMMhalf_grp_bits, LDIMMhalf_grp_mask, \
1310 LDIMMhalf_S_bits, LDIMMhalf_S_mask, \
1311 LDIMMhalf_H_bits, LDIMMhalf_H_mask, \
1312 LDIMMhalf_Z_bits, LDIMMhalf_Z_mask, \
1313 LDIMMhalf_code_bits, LDIMMhalf_code_mask \
1314 };
1315
1316
1317 /* CC2dreg
1318 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1319 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |.op....|.reg.......|
1320 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1321 */
1322
1323 typedef struct
1324 {
1325 unsigned short opcode;
1326 int bits_reg;
1327 int mask_reg;
1328 int bits_op;
1329 int mask_op;
1330 int bits_code;
1331 int mask_code;
1332 } CC2dreg;
1333
1334 #define CC2dreg_opcode 0x0200
1335 #define CC2dreg_reg_bits 0
1336 #define CC2dreg_reg_mask 0x7
1337 #define CC2dreg_op_bits 3
1338 #define CC2dreg_op_mask 0x3
1339 #define CC2dreg_code_bits 5
1340 #define CC2dreg_code_mask 0x7fff
1341
1342 #define init_CC2dreg \
1343 { \
1344 CC2dreg_opcode, \
1345 CC2dreg_reg_bits, CC2dreg_reg_mask, \
1346 CC2dreg_op_bits, CC2dreg_op_mask, \
1347 CC2dreg_code_bits, CC2dreg_code_mask \
1348 };
1349
1350
1351 /* PTR2op
1352 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1353 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |.opc.......|.src.......|.dst.......|
1354 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1355 */
1356
1357 typedef struct
1358 {
1359 unsigned short opcode;
1360 int bits_dst;
1361 int mask_dst;
1362 int bits_src;
1363 int mask_src;
1364 int bits_opc;
1365 int mask_opc;
1366 int bits_code;
1367 int mask_code;
1368 } PTR2op;
1369
1370 #define PTR2op_opcode 0x4400
1371 #define PTR2op_dst_bits 0
1372 #define PTR2op_dst_mask 0x7
1373 #define PTR2op_src_bits 3
1374 #define PTR2op_src_mask 0x7
1375 #define PTR2op_opc_bits 6
1376 #define PTR2op_opc_mask 0x7
1377 #define PTR2op_code_bits 9
1378 #define PTR2op_code_mask 0x7f
1379
1380 #define init_PTR2op \
1381 { \
1382 PTR2op_opcode, \
1383 PTR2op_dst_bits, PTR2op_dst_mask, \
1384 PTR2op_src_bits, PTR2op_src_mask, \
1385 PTR2op_opc_bits, PTR2op_opc_mask, \
1386 PTR2op_code_bits, PTR2op_code_mask \
1387 };
1388
1389
1390 /* COMP3op
1391 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1392 | 0 | 1 | 0 | 1 |.opc.......|.dst.......|.src1......|.src0......|
1393 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1394 */
1395
1396 typedef struct
1397 {
1398 unsigned short opcode;
1399 int bits_src0;
1400 int mask_src0;
1401 int bits_src1;
1402 int mask_src1;
1403 int bits_dst;
1404 int mask_dst;
1405 int bits_opc;
1406 int mask_opc;
1407 int bits_code;
1408 int mask_code;
1409 } COMP3op;
1410
1411 #define COMP3op_opcode 0x5000
1412 #define COMP3op_src0_bits 0
1413 #define COMP3op_src0_mask 0x7
1414 #define COMP3op_src1_bits 3
1415 #define COMP3op_src1_mask 0x7
1416 #define COMP3op_dst_bits 6
1417 #define COMP3op_dst_mask 0x7
1418 #define COMP3op_opc_bits 9
1419 #define COMP3op_opc_mask 0x7
1420 #define COMP3op_code_bits 12
1421 #define COMP3op_code_mask 0xf
1422
1423 #define init_COMP3op \
1424 { \
1425 COMP3op_opcode, \
1426 COMP3op_src0_bits, COMP3op_src0_mask, \
1427 COMP3op_src1_bits, COMP3op_src1_mask, \
1428 COMP3op_dst_bits, COMP3op_dst_mask, \
1429 COMP3op_opc_bits, COMP3op_opc_mask, \
1430 COMP3op_code_bits, COMP3op_code_mask \
1431 };
1432
1433 /* ccMV
1434 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1435 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.T.|.d.|.s.|.dst.......|.src.......|
1436 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1437 */
1438
1439 typedef struct
1440 {
1441 unsigned short opcode;
1442 int bits_src;
1443 int mask_src;
1444 int bits_dst;
1445 int mask_dst;
1446 int bits_s;
1447 int mask_s;
1448 int bits_d;
1449 int mask_d;
1450 int bits_T;
1451 int mask_T;
1452 int bits_code;
1453 int mask_code;
1454 } CCmv;
1455
1456 #define CCmv_opcode 0x0600
1457 #define CCmv_src_bits 0
1458 #define CCmv_src_mask 0x7
1459 #define CCmv_dst_bits 3
1460 #define CCmv_dst_mask 0x7
1461 #define CCmv_s_bits 6
1462 #define CCmv_s_mask 0x1
1463 #define CCmv_d_bits 7
1464 #define CCmv_d_mask 0x1
1465 #define CCmv_T_bits 8
1466 #define CCmv_T_mask 0x1
1467 #define CCmv_code_bits 9
1468 #define CCmv_code_mask 0x7f
1469
1470 #define init_CCmv \
1471 { \
1472 CCmv_opcode, \
1473 CCmv_src_bits, CCmv_src_mask, \
1474 CCmv_dst_bits, CCmv_dst_mask, \
1475 CCmv_s_bits, CCmv_s_mask, \
1476 CCmv_d_bits, CCmv_d_mask, \
1477 CCmv_T_bits, CCmv_T_mask, \
1478 CCmv_code_bits, CCmv_code_mask \
1479 };
1480
1481
1482 /* CCflag
1483 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1484 | 0 | 0 | 0 | 0 | 1 |.I.|.opc.......|.G.|.y.........|.x.........|
1485 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1486 */
1487
1488 typedef struct
1489 {
1490 unsigned short opcode;
1491 int bits_x;
1492 int mask_x;
1493 int bits_y;
1494 int mask_y;
1495 int bits_G;
1496 int mask_G;
1497 int bits_opc;
1498 int mask_opc;
1499 int bits_I;
1500 int mask_I;
1501 int bits_code;
1502 int mask_code;
1503 } CCflag;
1504
1505 #define CCflag_opcode 0x0800
1506 #define CCflag_x_bits 0
1507 #define CCflag_x_mask 0x7
1508 #define CCflag_y_bits 3
1509 #define CCflag_y_mask 0x7
1510 #define CCflag_G_bits 6
1511 #define CCflag_G_mask 0x1
1512 #define CCflag_opc_bits 7
1513 #define CCflag_opc_mask 0x7
1514 #define CCflag_I_bits 10
1515 #define CCflag_I_mask 0x1
1516 #define CCflag_code_bits 11
1517 #define CCflag_code_mask 0x1f
1518
1519 #define init_CCflag \
1520 { \
1521 CCflag_opcode, \
1522 CCflag_x_bits, CCflag_x_mask, \
1523 CCflag_y_bits, CCflag_y_mask, \
1524 CCflag_G_bits, CCflag_G_mask, \
1525 CCflag_opc_bits, CCflag_opc_mask, \
1526 CCflag_I_bits, CCflag_I_mask, \
1527 CCflag_code_bits, CCflag_code_mask, \
1528 };
1529
1530
1531 /* CC2stat
1532 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1533 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.D.|.op....|.cbit..............|
1534 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1535 */
1536
1537 typedef struct
1538 {
1539 unsigned short opcode;
1540 int bits_cbit;
1541 int mask_cbit;
1542 int bits_op;
1543 int mask_op;
1544 int bits_D;
1545 int mask_D;
1546 int bits_code;
1547 int mask_code;
1548 } CC2stat;
1549
1550 #define CC2stat_opcode 0x0300
1551 #define CC2stat_cbit_bits 0
1552 #define CC2stat_cbit_mask 0x1f
1553 #define CC2stat_op_bits 5
1554 #define CC2stat_op_mask 0x3
1555 #define CC2stat_D_bits 7
1556 #define CC2stat_D_mask 0x1
1557 #define CC2stat_code_bits 8
1558 #define CC2stat_code_mask 0xff
1559
1560 #define init_CC2stat \
1561 { \
1562 CC2stat_opcode, \
1563 CC2stat_cbit_bits, CC2stat_cbit_mask, \
1564 CC2stat_op_bits, CC2stat_op_mask, \
1565 CC2stat_D_bits, CC2stat_D_mask, \
1566 CC2stat_code_bits, CC2stat_code_mask \
1567 };
1568
1569
1570 /* REGMV
1571 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1572 | 0 | 0 | 1 | 1 |.gd........|.gs........|.dst.......|.src.......|
1573 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1574 */
1575
1576 typedef struct
1577 {
1578 unsigned short opcode;
1579 int bits_src;
1580 int mask_src;
1581 int bits_dst;
1582 int mask_dst;
1583 int bits_gs;
1584 int mask_gs;
1585 int bits_gd;
1586 int mask_gd;
1587 int bits_code;
1588 int mask_code;
1589 } RegMv;
1590
1591 #define RegMv_opcode 0x3000
1592 #define RegMv_src_bits 0
1593 #define RegMv_src_mask 0x7
1594 #define RegMv_dst_bits 3
1595 #define RegMv_dst_mask 0x7
1596 #define RegMv_gs_bits 6
1597 #define RegMv_gs_mask 0x7
1598 #define RegMv_gd_bits 9
1599 #define RegMv_gd_mask 0x7
1600 #define RegMv_code_bits 12
1601 #define RegMv_code_mask 0xf
1602
1603 #define init_RegMv \
1604 { \
1605 RegMv_opcode, \
1606 RegMv_src_bits, RegMv_src_mask, \
1607 RegMv_dst_bits, RegMv_dst_mask, \
1608 RegMv_gs_bits, RegMv_gs_mask, \
1609 RegMv_gd_bits, RegMv_gd_mask, \
1610 RegMv_code_bits, RegMv_code_mask \
1611 };
1612
1613
1614 /* COMPI2opD
1615 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1616 | 0 | 1 | 1 | 0 | 0 |.op|.isrc......................|.dst.......|
1617 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1618 */
1619
1620 typedef struct
1621 {
1622 unsigned short opcode;
1623 int bits_dst;
1624 int mask_dst;
1625 int bits_src;
1626 int mask_src;
1627 int bits_op;
1628 int mask_op;
1629 int bits_code;
1630 int mask_code;
1631 } COMPI2opD;
1632
1633 #define COMPI2opD_opcode 0x6000
1634 #define COMPI2opD_dst_bits 0
1635 #define COMPI2opD_dst_mask 0x7
1636 #define COMPI2opD_src_bits 3
1637 #define COMPI2opD_src_mask 0x7f
1638 #define COMPI2opD_op_bits 10
1639 #define COMPI2opD_op_mask 0x1
1640 #define COMPI2opD_code_bits 11
1641 #define COMPI2opD_code_mask 0x1f
1642
1643 #define init_COMPI2opD \
1644 { \
1645 COMPI2opD_opcode, \
1646 COMPI2opD_dst_bits, COMPI2opD_dst_mask, \
1647 COMPI2opD_src_bits, COMPI2opD_src_mask, \
1648 COMPI2opD_op_bits, COMPI2opD_op_mask, \
1649 COMPI2opD_code_bits, COMPI2opD_code_mask \
1650 };
1651
1652 /* COMPI2opP
1653 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1654 | 0 | 1 | 1 | 0 | 1 |.op|.src.......................|.dst.......|
1655 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1656 */
1657
1658 typedef COMPI2opD COMPI2opP;
1659
1660 #define COMPI2opP_opcode 0x6800
1661 #define COMPI2opP_dst_bits 0
1662 #define COMPI2opP_dst_mask 0x7
1663 #define COMPI2opP_src_bits 3
1664 #define COMPI2opP_src_mask 0x7f
1665 #define COMPI2opP_op_bits 10
1666 #define COMPI2opP_op_mask 0x1
1667 #define COMPI2opP_code_bits 11
1668 #define COMPI2opP_code_mask 0x1f
1669
1670 #define init_COMPI2opP \
1671 { \
1672 COMPI2opP_opcode, \
1673 COMPI2opP_dst_bits, COMPI2opP_dst_mask, \
1674 COMPI2opP_src_bits, COMPI2opP_src_mask, \
1675 COMPI2opP_op_bits, COMPI2opP_op_mask, \
1676 COMPI2opP_code_bits, COMPI2opP_code_mask \
1677 };
1678
1679
1680 /* dagMODim
1681 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1682 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |.br| 1 | 1 |.op|.m.....|.i.....|
1683 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1684 */
1685
1686 typedef struct
1687 {
1688 unsigned short opcode;
1689 int bits_i;
1690 int mask_i;
1691 int bits_m;
1692 int mask_m;
1693 int bits_op;
1694 int mask_op;
1695 int bits_code2;
1696 int mask_code2;
1697 int bits_br;
1698 int mask_br;
1699 int bits_code;
1700 int mask_code;
1701 } DagMODim;
1702
1703 #define DagMODim_opcode 0x9e60
1704 #define DagMODim_i_bits 0
1705 #define DagMODim_i_mask 0x3
1706 #define DagMODim_m_bits 2
1707 #define DagMODim_m_mask 0x3
1708 #define DagMODim_op_bits 4
1709 #define DagMODim_op_mask 0x1
1710 #define DagMODim_code2_bits 5
1711 #define DagMODim_code2_mask 0x3
1712 #define DagMODim_br_bits 7
1713 #define DagMODim_br_mask 0x1
1714 #define DagMODim_code_bits 8
1715 #define DagMODim_code_mask 0xff
1716
1717 #define init_DagMODim \
1718 { \
1719 DagMODim_opcode, \
1720 DagMODim_i_bits, DagMODim_i_mask, \
1721 DagMODim_m_bits, DagMODim_m_mask, \
1722 DagMODim_op_bits, DagMODim_op_mask, \
1723 DagMODim_code2_bits, DagMODim_code2_mask, \
1724 DagMODim_br_bits, DagMODim_br_mask, \
1725 DagMODim_code_bits, DagMODim_code_mask \
1726 };
1727
1728 /* dagMODik
1729 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1730 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |.op....|.i.....|
1731 +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+
1732 */
1733
1734 typedef struct
1735 {
1736 unsigned short opcode;
1737 int bits_i;
1738 int mask_i;
1739 int bits_op;
1740 int mask_op;
1741 int bits_code;
1742 int mask_code;
1743 } DagMODik;
1744
1745 #define DagMODik_opcode 0x9f60
1746 #define DagMODik_i_bits 0
1747 #define DagMODik_i_mask 0x3
1748 #define DagMODik_op_bits 2
1749 #define DagMODik_op_mask 0x3
1750 #define DagMODik_code_bits 3
1751 #define DagMODik_code_mask 0xfff
1752
1753 #define init_DagMODik \
1754 { \
1755 DagMODik_opcode, \
1756 DagMODik_i_bits, DagMODik_i_mask, \
1757 DagMODik_op_bits, DagMODik_op_mask, \
1758 DagMODik_code_bits, DagMODik_code_mask \
1759 };
1760
1761 #endif