target/alpha: Split out gen_goto_tb
[qemu/armbru.git] / disas / nanomips.c
blobdb0c297b8dcfaeb6fb69de2a85855281b7209921
1 /*
2 * Source file for nanoMIPS disassembler component of QEMU
4 * Copyright (C) 2018 Wave Computing, Inc.
5 * Copyright (C) 2018 Matthew Fortune <matthew.fortune@mips.com>
6 * Copyright (C) 2018 Aleksandar Markovic <amarkovic@wavecomp.com>
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
24 * Documentation used while implementing this component:
26 * [1] "MIPS® Architecture Base: nanoMIPS32(tm) Instruction Set Technical
27 * Reference Manual", Revision 01.01, April 27, 2018
30 #include "qemu/osdep.h"
31 #include "disas/dis-asm.h"
33 typedef int64_t int64;
34 typedef uint64_t uint64;
35 typedef uint32_t uint32;
36 typedef uint16_t uint16;
37 typedef uint64_t img_address;
39 typedef struct Dis_info {
40 img_address m_pc;
41 fprintf_function fprintf_func;
42 FILE *stream;
43 sigjmp_buf buf;
44 } Dis_info;
46 #define IMGASSERTONCE(test)
49 static char * G_GNUC_PRINTF(1, 2) img_format(const char *format, ...)
51 char *buffer;
52 va_list args;
53 va_start(args, format);
54 buffer = g_strdup_vprintf(format, args);
55 va_end(args);
56 return buffer;
60 static char *to_string(img_address a)
62 return g_strdup_printf("0x%" PRIx64, a);
66 static uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size)
68 return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size);
72 static int64 sign_extend(int64 data, int msb)
74 uint64 shift = 63 - msb;
75 return (data << shift) >> shift;
79 static uint64 renumber_registers(uint64 index, uint64 *register_list,
80 size_t register_list_size, Dis_info *info)
82 if (index < register_list_size) {
83 return register_list[index];
86 info->fprintf_func(info->stream, "Invalid register mapping index %" PRIu64
87 ", size of list = %zu", index, register_list_size);
88 siglongjmp(info->buf, 1);
93 * decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
95 * Map a 4-bit code to the 5-bit register space according to this pattern:
97 * 1 0
98 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
99 * | | | | | | | | | | | | | | | |
100 * | | | | | | | | | | | | | | | |
101 * | | | | | | | | | | | └---------------┐
102 * | | | | | | | | | | └---------------┐ |
103 * | | | | | | | | | └---------------┐ | |
104 * | | | | | | | | └---------------┐ | | |
105 * | | | | | | | | | | | | | | | |
106 * | | | | | | | | | | | | | | | |
107 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
108 * 3 2 1 0
110 * Used in handling following instructions:
112 * - ADDU[4X4]
113 * - LW[4X4]
114 * - MOVEP[REV]
115 * - MUL[4X4]
116 * - SW[4X4]
118 static uint64 decode_gpr_gpr4(uint64 d, Dis_info *info)
120 static uint64 register_list[] = { 8, 9, 10, 11, 4, 5, 6, 7,
121 16, 17, 18, 19, 20, 21, 22, 23 };
122 return renumber_registers(d, register_list,
123 sizeof(register_list) / sizeof(register_list[0]), info);
128 * decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
130 * Map a 4-bit code to the 5-bit register space according to this pattern:
132 * 1 0
133 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
134 * | | | | | | | | | | | | | | | |
135 * | | | | | | | | | | | | └---------------------┐
136 * | | | | | | | | | | | └---------------┐ |
137 * | | | | | | | | | | └---------------┐ | |
138 * | | | | | | | | | └---------------┐ | | |
139 * | | | | | | | | └---------------┐ | | | |
140 * | | | | | | | | | | | | | | | |
141 * | | | | | | | | | | | | | | | |
142 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
143 * 3 2 1 0
145 * This pattern is the same one used for 'gpr4' gpr encoding type, except for
146 * the input value 3, that is mapped to the output value 0 instead of 11.
148 * Used in handling following instructions:
150 * - MOVE.BALC
151 * - MOVEP
152 * - SW[4X4]
154 static uint64 decode_gpr_gpr4_zero(uint64 d, Dis_info *info)
156 static uint64 register_list[] = { 8, 9, 10, 0, 4, 5, 6, 7,
157 16, 17, 18, 19, 20, 21, 22, 23 };
158 return renumber_registers(d, register_list,
159 sizeof(register_list) / sizeof(register_list[0]), info);
164 * decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
166 * Map a 3-bit code to the 5-bit register space according to this pattern:
168 * 7 6 5 4 3 2 1 0
169 * | | | | | | | |
170 * | | | | | | | |
171 * | | | └-----------------------┐
172 * | | └-----------------------┐ |
173 * | └-----------------------┐ | |
174 * └-----------------------┐ | | |
175 * | | | | | | | |
176 * ┌-------┘ | | | | | | |
177 * | ┌-------┘ | | | | | |
178 * | | ┌-------┘ | | | | |
179 * | | | ┌-------┘ | | | |
180 * | | | | | | | |
181 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
182 * 3 2 1 0
184 * Used in handling following instructions:
186 * - ADDIU[R1.SP]
187 * - ADDIU[R2]
188 * - ADDU[16]
189 * - AND[16]
190 * - ANDI[16]
191 * - BEQC[16]
192 * - BEQZC[16]
193 * - BNEC[16]
194 * - BNEZC[16]
195 * - LB[16]
196 * - LBU[16]
197 * - LH[16]
198 * - LHU[16]
199 * - LI[16]
200 * - LW[16]
201 * - LW[GP16]
202 * - LWXS[16]
203 * - NOT[16]
204 * - OR[16]
205 * - SB[16]
206 * - SH[16]
207 * - SLL[16]
208 * - SRL[16]
209 * - SUBU[16]
210 * - SW[16]
211 * - XOR[16]
213 static uint64 decode_gpr_gpr3(uint64 d, Dis_info *info)
215 static uint64 register_list[] = { 16, 17, 18, 19, 4, 5, 6, 7 };
216 return renumber_registers(d, register_list,
217 sizeof(register_list) / sizeof(register_list[0]), info);
222 * decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding
223 * type
225 * Map a 3-bit code to the 5-bit register space according to this pattern:
227 * 7 6 5 4 3 2 1 0
228 * | | | | | | | |
229 * | | | | | | | └-----------------------┐
230 * | | | └-----------------------┐ |
231 * | | └-----------------------┐ | |
232 * | └-----------------------┐ | | |
233 * └-----------------------┐ | | | |
234 * | | | | | | | |
235 * ┌-------┘ | | | | | | |
236 * | ┌-------┘ | | | | | |
237 * | | ┌-------┘ | | | | |
238 * | | | | | | | |
239 * | | | | | | | |
240 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
241 * 3 2 1 0
243 * This pattern is the same one used for 'gpr3' gpr encoding type, except for
244 * the input value 0, that is mapped to the output value 0 instead of 16.
246 * Used in handling following instructions:
248 * - SB[16]
249 * - SH[16]
250 * - SW[16]
251 * - SW[GP16]
253 static uint64 decode_gpr_gpr3_src_store(uint64 d, Dis_info *info)
255 static uint64 register_list[] = { 0, 17, 18, 19, 4, 5, 6, 7 };
256 return renumber_registers(d, register_list,
257 sizeof(register_list) / sizeof(register_list[0]), info);
262 * decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
264 * Map a 2-bit code to the 5-bit register space according to this pattern:
266 * 3 2 1 0
267 * | | | |
268 * | | | |
269 * | | | └-------------------┐
270 * | | └-------------------┐ |
271 * | └-------------------┐ | |
272 * └-------------------┐ | | |
273 * | | | |
274 * | | | |
275 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
276 * 3 2 1 0
278 * Used in handling following instructions:
280 * - MOVEP
281 * - MOVEP[REV]
283 static uint64 decode_gpr_gpr2_reg1(uint64 d, Dis_info *info)
285 static uint64 register_list[] = { 4, 5, 6, 7 };
286 return renumber_registers(d, register_list,
287 sizeof(register_list) / sizeof(register_list[0]), info);
292 * decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type
294 * Map a 2-bit code to the 5-bit register space according to this pattern:
296 * 3 2 1 0
297 * | | | |
298 * | | | |
299 * | | | └-----------------┐
300 * | | └-----------------┐ |
301 * | └-----------------┐ | |
302 * └-----------------┐ | | |
303 * | | | |
304 * | | | |
305 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
306 * 3 2 1 0
308 * Used in handling following instructions:
310 * - MOVEP
311 * - MOVEP[REV]
313 static uint64 decode_gpr_gpr2_reg2(uint64 d, Dis_info *info)
315 static uint64 register_list[] = { 5, 6, 7, 8 };
316 return renumber_registers(d, register_list,
317 sizeof(register_list) / sizeof(register_list[0]), info);
322 * decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
324 * Map a 1-bit code to the 5-bit register space according to this pattern:
326 * 1 0
327 * | |
328 * | |
329 * | └---------------------┐
330 * └---------------------┐ |
331 * | |
332 * | |
333 * | |
334 * | |
335 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
336 * 3 2 1 0
338 * Used in handling following instruction:
340 * - MOVE.BALC
342 static uint64 decode_gpr_gpr1(uint64 d, Dis_info *info)
344 static uint64 register_list[] = { 4, 5 };
345 return renumber_registers(d, register_list,
346 sizeof(register_list) / sizeof(register_list[0]), info);
350 static int64 neg_copy(uint64 d)
352 return 0ll - d;
356 static uint64 encode_count3_from_count(uint64 d)
358 IMGASSERTONCE(d < 8);
359 return d == 0ull ? 8ull : d;
363 static uint64 encode_shift3_from_shift(uint64 d)
365 IMGASSERTONCE(d < 8);
366 return d == 0ull ? 8ull : d;
370 /* special value for load literal */
371 static int64 encode_eu_from_s_li16(uint64 d)
373 IMGASSERTONCE(d < 128);
374 return d == 127 ? -1 : (int64)d;
378 static uint64 encode_msbd_from_size(uint64 d)
380 IMGASSERTONCE(d < 32);
381 return d + 1;
385 static uint64 encode_eu_from_u_andi16(uint64 d)
387 IMGASSERTONCE(d < 16);
388 if (d == 12) {
389 return 0x00ffull;
391 if (d == 13) {
392 return 0xffffull;
394 return d;
398 /* save16 / restore16 ???? */
399 static uint64 encode_rt1_from_rt(uint64 d)
401 return d ? 31 : 30;
405 static const char *GPR(uint64 reg, Dis_info *info)
407 static const char *gpr_reg[32] = {
408 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
409 "a4", "a5", "a6", "a7", "r12", "r13", "r14", "r15",
410 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
411 "r24", "r25", "k0", "k1", "gp", "sp", "fp", "ra"
414 if (reg < 32) {
415 return gpr_reg[reg];
418 info->fprintf_func(info->stream, "Invalid GPR register index %" PRIu64,
419 reg);
420 siglongjmp(info->buf, 1);
424 static char *save_restore_list(uint64 rt, uint64 count, uint64 gp,
425 Dis_info *info)
427 char *reg_list[34];
428 reg_list[0] = (char *)"";
430 assert(count <= 32);
431 for (uint64 counter = 0; counter != count; counter++) {
432 bool use_gp = gp && (counter == count - 1);
433 uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
434 /* glib usage below requires casting away const */
435 reg_list[counter + 1] = (char *)GPR(this_rt, info);
437 reg_list[count + 1] = NULL;
439 return g_strjoinv(",", reg_list);
443 static const char *FPR(uint64 reg, Dis_info *info)
445 static const char *fpr_reg[32] = {
446 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
447 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
448 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
449 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
452 if (reg < 32) {
453 return fpr_reg[reg];
456 info->fprintf_func(info->stream, "Invalid FPR register index %" PRIu64,
457 reg);
458 siglongjmp(info->buf, 1);
462 static const char *AC(uint64 reg, Dis_info *info)
464 static const char *ac_reg[4] = {
465 "ac0", "ac1", "ac2", "ac3"
468 if (reg < 4) {
469 return ac_reg[reg];
472 info->fprintf_func(info->stream, "Invalid AC register index %" PRIu64,
473 reg);
474 siglongjmp(info->buf, 1);
478 static char *ADDRESS(uint64 value, int instruction_size, Dis_info *info)
480 /* token for string replace */
481 img_address address = info->m_pc + value + instruction_size;
482 /* symbol replacement */
483 return to_string(address);
487 static uint64 extract_op_code_value(const uint16 *data, int size)
489 switch (size) {
490 case 16:
491 return data[0];
492 case 32:
493 return ((uint64)data[0] << 16) | data[1];
494 case 48:
495 return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2];
496 default:
497 return data[0];
502 static uint64 extract_code_18_to_0(uint64 instruction)
504 uint64 value = 0;
505 value |= extract_bits(instruction, 0, 19);
506 return value;
510 static uint64 extract_shift3_2_1_0(uint64 instruction)
512 uint64 value = 0;
513 value |= extract_bits(instruction, 0, 3);
514 return value;
518 static uint64 extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
520 uint64 value = 0;
521 value |= extract_bits(instruction, 3, 9) << 3;
522 return value;
526 static uint64 extract_count_3_2_1_0(uint64 instruction)
528 uint64 value = 0;
529 value |= extract_bits(instruction, 0, 4);
530 return value;
534 static uint64 extract_rtz3_9_8_7(uint64 instruction)
536 uint64 value = 0;
537 value |= extract_bits(instruction, 7, 3);
538 return value;
542 static uint64 extract_u_17_to_1__s1(uint64 instruction)
544 uint64 value = 0;
545 value |= extract_bits(instruction, 1, 17) << 1;
546 return value;
550 static int64 extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
552 int64 value = 0;
553 value |= extract_bits(instruction, 11, 10);
554 value = sign_extend(value, 9);
555 return value;
559 static int64 extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
561 int64 value = 0;
562 value |= extract_bits(instruction, 0, 1) << 11;
563 value |= extract_bits(instruction, 1, 10) << 1;
564 value = sign_extend(value, 11);
565 return value;
569 static uint64 extract_u_10(uint64 instruction)
571 uint64 value = 0;
572 value |= extract_bits(instruction, 10, 1);
573 return value;
577 static uint64 extract_rtz4_27_26_25_23_22_21(uint64 instruction)
579 uint64 value = 0;
580 value |= extract_bits(instruction, 21, 3);
581 value |= extract_bits(instruction, 25, 1) << 3;
582 return value;
586 static uint64 extract_sa_15_14_13_12_11(uint64 instruction)
588 uint64 value = 0;
589 value |= extract_bits(instruction, 11, 5);
590 return value;
594 static uint64 extract_shift_4_3_2_1_0(uint64 instruction)
596 uint64 value = 0;
597 value |= extract_bits(instruction, 0, 5);
598 return value;
602 static uint64 extract_shiftx_10_9_8_7__s1(uint64 instruction)
604 uint64 value = 0;
605 value |= extract_bits(instruction, 7, 4) << 1;
606 return value;
610 static uint64 extract_hint_25_24_23_22_21(uint64 instruction)
612 uint64 value = 0;
613 value |= extract_bits(instruction, 21, 5);
614 return value;
618 static uint64 extract_count3_14_13_12(uint64 instruction)
620 uint64 value = 0;
621 value |= extract_bits(instruction, 12, 3);
622 return value;
626 static int64 extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
628 int64 value = 0;
629 value |= extract_bits(instruction, 0, 1) << 31;
630 value |= extract_bits(instruction, 2, 10) << 21;
631 value |= extract_bits(instruction, 12, 9) << 12;
632 value = sign_extend(value, 31);
633 return value;
637 static int64 extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
639 int64 value = 0;
640 value |= extract_bits(instruction, 0, 1) << 7;
641 value |= extract_bits(instruction, 1, 6) << 1;
642 value = sign_extend(value, 7);
643 return value;
647 static uint64 extract_u2_10_9(uint64 instruction)
649 uint64 value = 0;
650 value |= extract_bits(instruction, 9, 2);
651 return value;
655 static uint64 extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction)
657 uint64 value = 0;
658 value |= extract_bits(instruction, 16, 10);
659 return value;
663 static uint64 extract_rs_20_19_18_17_16(uint64 instruction)
665 uint64 value = 0;
666 value |= extract_bits(instruction, 16, 5);
667 return value;
671 static uint64 extract_u_2_1__s1(uint64 instruction)
673 uint64 value = 0;
674 value |= extract_bits(instruction, 1, 2) << 1;
675 return value;
679 static uint64 extract_stripe_6(uint64 instruction)
681 uint64 value = 0;
682 value |= extract_bits(instruction, 6, 1);
683 return value;
687 static uint64 extract_ac_15_14(uint64 instruction)
689 uint64 value = 0;
690 value |= extract_bits(instruction, 14, 2);
691 return value;
695 static uint64 extract_shift_20_19_18_17_16(uint64 instruction)
697 uint64 value = 0;
698 value |= extract_bits(instruction, 16, 5);
699 return value;
703 static uint64 extract_rdl_25_24(uint64 instruction)
705 uint64 value = 0;
706 value |= extract_bits(instruction, 24, 1);
707 return value;
711 static int64 extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
713 int64 value = 0;
714 value |= extract_bits(instruction, 0, 1) << 10;
715 value |= extract_bits(instruction, 1, 9) << 1;
716 value = sign_extend(value, 10);
717 return value;
721 static uint64 extract_eu_6_5_4_3_2_1_0(uint64 instruction)
723 uint64 value = 0;
724 value |= extract_bits(instruction, 0, 7);
725 return value;
729 static uint64 extract_shift_5_4_3_2_1_0(uint64 instruction)
731 uint64 value = 0;
732 value |= extract_bits(instruction, 0, 6);
733 return value;
737 static uint64 extract_count_19_18_17_16(uint64 instruction)
739 uint64 value = 0;
740 value |= extract_bits(instruction, 16, 4);
741 return value;
745 static uint64 extract_code_2_1_0(uint64 instruction)
747 uint64 value = 0;
748 value |= extract_bits(instruction, 0, 3);
749 return value;
753 static uint64 extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction)
755 uint64 value = 0;
756 value |= extract_bits(instruction, 0, 12);
757 return value;
761 static uint64 extract_rs_4_3_2_1_0(uint64 instruction)
763 uint64 value = 0;
764 value |= extract_bits(instruction, 0, 5);
765 return value;
769 static uint64 extract_u_20_to_3__s3(uint64 instruction)
771 uint64 value = 0;
772 value |= extract_bits(instruction, 3, 18) << 3;
773 return value;
777 static uint64 extract_u_3_2_1_0__s2(uint64 instruction)
779 uint64 value = 0;
780 value |= extract_bits(instruction, 0, 4) << 2;
781 return value;
785 static uint64 extract_cofun_25_24_23(uint64 instruction)
787 uint64 value = 0;
788 value |= extract_bits(instruction, 3, 23);
789 return value;
793 static uint64 extract_u_2_1_0__s2(uint64 instruction)
795 uint64 value = 0;
796 value |= extract_bits(instruction, 0, 3) << 2;
797 return value;
801 static uint64 extract_rd3_3_2_1(uint64 instruction)
803 uint64 value = 0;
804 value |= extract_bits(instruction, 1, 3);
805 return value;
809 static uint64 extract_sa_15_14_13_12(uint64 instruction)
811 uint64 value = 0;
812 value |= extract_bits(instruction, 12, 4);
813 return value;
817 static uint64 extract_rt_25_24_23_22_21(uint64 instruction)
819 uint64 value = 0;
820 value |= extract_bits(instruction, 21, 5);
821 return value;
825 static uint64 extract_ru_7_6_5_4_3(uint64 instruction)
827 uint64 value = 0;
828 value |= extract_bits(instruction, 3, 5);
829 return value;
833 static uint64 extract_u_17_to_0(uint64 instruction)
835 uint64 value = 0;
836 value |= extract_bits(instruction, 0, 18);
837 return value;
841 static uint64 extract_rsz4_4_2_1_0(uint64 instruction)
843 uint64 value = 0;
844 value |= extract_bits(instruction, 0, 3);
845 value |= extract_bits(instruction, 4, 1) << 3;
846 return value;
850 static int64 extract_s__se21_0_20_to_1_s1(uint64 instruction)
852 int64 value = 0;
853 value |= extract_bits(instruction, 0, 1) << 21;
854 value |= extract_bits(instruction, 1, 20) << 1;
855 value = sign_extend(value, 21);
856 return value;
860 static uint64 extract_op_25_to_3(uint64 instruction)
862 uint64 value = 0;
863 value |= extract_bits(instruction, 3, 23);
864 return value;
868 static uint64 extract_rs4_4_2_1_0(uint64 instruction)
870 uint64 value = 0;
871 value |= extract_bits(instruction, 0, 3);
872 value |= extract_bits(instruction, 4, 1) << 3;
873 return value;
877 static uint64 extract_bit_23_22_21(uint64 instruction)
879 uint64 value = 0;
880 value |= extract_bits(instruction, 21, 3);
881 return value;
885 static uint64 extract_rt_41_40_39_38_37(uint64 instruction)
887 uint64 value = 0;
888 value |= extract_bits(instruction, 37, 5);
889 return value;
893 static int64 extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
895 int64 value = 0;
896 value |= extract_bits(instruction, 16, 6);
897 value = sign_extend(value, 5);
898 return value;
902 static uint64 extract_rd2_3_8(uint64 instruction)
904 uint64 value = 0;
905 value |= extract_bits(instruction, 3, 1) << 1;
906 value |= extract_bits(instruction, 8, 1);
907 return value;
911 static uint64 extract_code_17_to_0(uint64 instruction)
913 uint64 value = 0;
914 value |= extract_bits(instruction, 0, 18);
915 return value;
919 static uint64 extract_size_20_19_18_17_16(uint64 instruction)
921 uint64 value = 0;
922 value |= extract_bits(instruction, 16, 5);
923 return value;
927 static int64 extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
929 int64 value = 0;
930 value |= extract_bits(instruction, 2, 6) << 2;
931 value |= extract_bits(instruction, 15, 1) << 8;
932 value = sign_extend(value, 8);
933 return value;
937 static uint64 extract_u_15_to_0(uint64 instruction)
939 uint64 value = 0;
940 value |= extract_bits(instruction, 0, 16);
941 return value;
945 static uint64 extract_fs_20_19_18_17_16(uint64 instruction)
947 uint64 value = 0;
948 value |= extract_bits(instruction, 16, 5);
949 return value;
953 static int64 extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
955 int64 value = 0;
956 value |= extract_bits(instruction, 0, 8);
957 value |= extract_bits(instruction, 15, 1) << 8;
958 value = sign_extend(value, 8);
959 return value;
963 static uint64 extract_stype_20_19_18_17_16(uint64 instruction)
965 uint64 value = 0;
966 value |= extract_bits(instruction, 16, 5);
967 return value;
971 static uint64 extract_rtl_11(uint64 instruction)
973 uint64 value = 0;
974 value |= extract_bits(instruction, 9, 1);
975 return value;
979 static uint64 extract_hs_20_19_18_17_16(uint64 instruction)
981 uint64 value = 0;
982 value |= extract_bits(instruction, 16, 5);
983 return value;
987 static uint64 extract_sel_13_12_11(uint64 instruction)
989 uint64 value = 0;
990 value |= extract_bits(instruction, 11, 3);
991 return value;
995 static uint64 extract_lsb_4_3_2_1_0(uint64 instruction)
997 uint64 value = 0;
998 value |= extract_bits(instruction, 0, 5);
999 return value;
1003 static uint64 extract_gp_2(uint64 instruction)
1005 uint64 value = 0;
1006 value |= extract_bits(instruction, 2, 1);
1007 return value;
1011 static uint64 extract_rt3_9_8_7(uint64 instruction)
1013 uint64 value = 0;
1014 value |= extract_bits(instruction, 7, 3);
1015 return value;
1019 static uint64 extract_ft_25_24_23_22_21(uint64 instruction)
1021 uint64 value = 0;
1022 value |= extract_bits(instruction, 21, 5);
1023 return value;
1027 static uint64 extract_u_17_16_15_14_13_12_11(uint64 instruction)
1029 uint64 value = 0;
1030 value |= extract_bits(instruction, 11, 7);
1031 return value;
1035 static uint64 extract_cs_20_19_18_17_16(uint64 instruction)
1037 uint64 value = 0;
1038 value |= extract_bits(instruction, 16, 5);
1039 return value;
1043 static uint64 extract_rt4_9_7_6_5(uint64 instruction)
1045 uint64 value = 0;
1046 value |= extract_bits(instruction, 5, 3);
1047 value |= extract_bits(instruction, 9, 1) << 3;
1048 return value;
1052 static uint64 extract_msbt_10_9_8_7_6(uint64 instruction)
1054 uint64 value = 0;
1055 value |= extract_bits(instruction, 6, 5);
1056 return value;
1060 static uint64 extract_u_5_4_3_2_1_0__s2(uint64 instruction)
1062 uint64 value = 0;
1063 value |= extract_bits(instruction, 0, 6) << 2;
1064 return value;
1068 static uint64 extract_sa_15_14_13(uint64 instruction)
1070 uint64 value = 0;
1071 value |= extract_bits(instruction, 13, 3);
1072 return value;
1076 static int64 extract_s__se14_0_13_to_1_s1(uint64 instruction)
1078 int64 value = 0;
1079 value |= extract_bits(instruction, 0, 1) << 14;
1080 value |= extract_bits(instruction, 1, 13) << 1;
1081 value = sign_extend(value, 14);
1082 return value;
1086 static uint64 extract_rs3_6_5_4(uint64 instruction)
1088 uint64 value = 0;
1089 value |= extract_bits(instruction, 4, 3);
1090 return value;
1094 static uint64 extract_u_31_to_0__s32(uint64 instruction)
1096 uint64 value = 0;
1097 value |= extract_bits(instruction, 0, 32) << 32;
1098 return value;
1102 static uint64 extract_shift_10_9_8_7_6(uint64 instruction)
1104 uint64 value = 0;
1105 value |= extract_bits(instruction, 6, 5);
1106 return value;
1110 static uint64 extract_cs_25_24_23_22_21(uint64 instruction)
1112 uint64 value = 0;
1113 value |= extract_bits(instruction, 21, 5);
1114 return value;
1118 static uint64 extract_shiftx_11_10_9_8_7_6(uint64 instruction)
1120 uint64 value = 0;
1121 value |= extract_bits(instruction, 6, 6);
1122 return value;
1126 static uint64 extract_rt_9_8_7_6_5(uint64 instruction)
1128 uint64 value = 0;
1129 value |= extract_bits(instruction, 5, 5);
1130 return value;
1134 static uint64 extract_op_25_24_23_22_21(uint64 instruction)
1136 uint64 value = 0;
1137 value |= extract_bits(instruction, 21, 5);
1138 return value;
1142 static uint64 extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
1144 uint64 value = 0;
1145 value |= extract_bits(instruction, 0, 7) << 2;
1146 return value;
1150 static uint64 extract_bit_16_15_14_13_12_11(uint64 instruction)
1152 uint64 value = 0;
1153 value |= extract_bits(instruction, 11, 6);
1154 return value;
1158 static uint64 extract_mask_20_19_18_17_16_15_14(uint64 instruction)
1160 uint64 value = 0;
1161 value |= extract_bits(instruction, 14, 7);
1162 return value;
1166 static uint64 extract_eu_3_2_1_0(uint64 instruction)
1168 uint64 value = 0;
1169 value |= extract_bits(instruction, 0, 4);
1170 return value;
1174 static uint64 extract_u_7_6_5_4__s4(uint64 instruction)
1176 uint64 value = 0;
1177 value |= extract_bits(instruction, 4, 4) << 4;
1178 return value;
1182 static int64 extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
1184 int64 value = 0;
1185 value |= extract_bits(instruction, 3, 5) << 3;
1186 value |= extract_bits(instruction, 15, 1) << 8;
1187 value = sign_extend(value, 8);
1188 return value;
1192 static uint64 extract_ft_15_14_13_12_11(uint64 instruction)
1194 uint64 value = 0;
1195 value |= extract_bits(instruction, 11, 5);
1196 return value;
1200 static int64 extract_s__se31_15_to_0_31_to_16(uint64 instruction)
1202 int64 value = 0;
1203 value |= extract_bits(instruction, 0, 16) << 16;
1204 value |= extract_bits(instruction, 16, 16);
1205 value = sign_extend(value, 31);
1206 return value;
1210 static uint64 extract_u_20_19_18_17_16_15_14_13(uint64 instruction)
1212 uint64 value = 0;
1213 value |= extract_bits(instruction, 13, 8);
1214 return value;
1218 static uint64 extract_u_17_to_2__s2(uint64 instruction)
1220 uint64 value = 0;
1221 value |= extract_bits(instruction, 2, 16) << 2;
1222 return value;
1226 static uint64 extract_rd_15_14_13_12_11(uint64 instruction)
1228 uint64 value = 0;
1229 value |= extract_bits(instruction, 11, 5);
1230 return value;
1234 static uint64 extract_c0s_20_19_18_17_16(uint64 instruction)
1236 uint64 value = 0;
1237 value |= extract_bits(instruction, 16, 5);
1238 return value;
1242 static uint64 extract_code_1_0(uint64 instruction)
1244 uint64 value = 0;
1245 value |= extract_bits(instruction, 0, 2);
1246 return value;
1250 static int64 extract_s__se25_0_24_to_1_s1(uint64 instruction)
1252 int64 value = 0;
1253 value |= extract_bits(instruction, 0, 1) << 25;
1254 value |= extract_bits(instruction, 1, 24) << 1;
1255 value = sign_extend(value, 25);
1256 return value;
1260 static uint64 extract_u_1_0(uint64 instruction)
1262 uint64 value = 0;
1263 value |= extract_bits(instruction, 0, 2);
1264 return value;
1268 static uint64 extract_u_3_8__s2(uint64 instruction)
1270 uint64 value = 0;
1271 value |= extract_bits(instruction, 3, 1) << 3;
1272 value |= extract_bits(instruction, 8, 1) << 2;
1273 return value;
1277 static uint64 extract_fd_15_14_13_12_11(uint64 instruction)
1279 uint64 value = 0;
1280 value |= extract_bits(instruction, 11, 5);
1281 return value;
1285 static uint64 extract_u_4_3_2_1_0__s2(uint64 instruction)
1287 uint64 value = 0;
1288 value |= extract_bits(instruction, 0, 5) << 2;
1289 return value;
1293 static uint64 extract_rtz4_9_7_6_5(uint64 instruction)
1295 uint64 value = 0;
1296 value |= extract_bits(instruction, 5, 3);
1297 value |= extract_bits(instruction, 9, 1) << 3;
1298 return value;
1302 static uint64 extract_sel_15_14_13_12_11(uint64 instruction)
1304 uint64 value = 0;
1305 value |= extract_bits(instruction, 11, 5);
1306 return value;
1310 static uint64 extract_ct_25_24_23_22_21(uint64 instruction)
1312 uint64 value = 0;
1313 value |= extract_bits(instruction, 21, 5);
1314 return value;
1318 static uint64 extract_u_20_to_2__s2(uint64 instruction)
1320 uint64 value = 0;
1321 value |= extract_bits(instruction, 2, 19) << 2;
1322 return value;
1326 static int64 extract_s__se3_4_2_1_0(uint64 instruction)
1328 int64 value = 0;
1329 value |= extract_bits(instruction, 0, 3);
1330 value |= extract_bits(instruction, 4, 1) << 3;
1331 value = sign_extend(value, 3);
1332 return value;
1336 static uint64 extract_u_3_2_1_0__s1(uint64 instruction)
1338 uint64 value = 0;
1339 value |= extract_bits(instruction, 0, 4) << 1;
1340 return value;
1345 static bool ADDIU_32__cond(uint64 instruction)
1347 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1348 return rt != 0;
1352 static bool ADDIU_RS5__cond(uint64 instruction)
1354 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1355 return rt != 0;
1359 static bool BALRSC_cond(uint64 instruction)
1361 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1362 return rt != 0;
1366 static bool BEQC_16__cond(uint64 instruction)
1368 uint64 rs3 = extract_rs3_6_5_4(instruction);
1369 uint64 rt3 = extract_rt3_9_8_7(instruction);
1370 uint64 u = extract_u_3_2_1_0__s1(instruction);
1371 return rs3 < rt3 && u != 0;
1375 static bool BNEC_16__cond(uint64 instruction)
1377 uint64 rs3 = extract_rs3_6_5_4(instruction);
1378 uint64 rt3 = extract_rt3_9_8_7(instruction);
1379 uint64 u = extract_u_3_2_1_0__s1(instruction);
1380 return rs3 >= rt3 && u != 0;
1384 static bool MOVE_cond(uint64 instruction)
1386 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1387 return rt != 0;
1391 static bool P16_BR1_cond(uint64 instruction)
1393 uint64 u = extract_u_3_2_1_0__s1(instruction);
1394 return u != 0;
1398 static bool PREF_S9__cond(uint64 instruction)
1400 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1401 return hint != 31;
1405 static bool PREFE_cond(uint64 instruction)
1407 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1408 return hint != 31;
1412 static bool SLTU_cond(uint64 instruction)
1414 uint64 rd = extract_rd_15_14_13_12_11(instruction);
1415 return rd != 0;
1421 * ABS.D fd, fs - Floating Point Absolute Value
1423 * 3 2 1
1424 * 10987654321098765432109876543210
1425 * 010001 00000 000101
1426 * fmt -----
1427 * fs -----
1428 * fd -----
1430 static char *ABS_D(uint64 instruction, Dis_info *info)
1432 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1433 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1435 const char *fs = FPR(fs_value, info);
1436 const char *fd = FPR(fd_value, info);
1438 return img_format("ABS.D %s, %s", fd, fs);
1443 * ABS.S fd, fs - Floating Point Absolute Value
1445 * 3 2 1
1446 * 10987654321098765432109876543210
1447 * 010001 00000 000101
1448 * fmt -----
1449 * fd -----
1450 * fs -----
1452 static char *ABS_S(uint64 instruction, Dis_info *info)
1454 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1455 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1457 const char *fs = FPR(fs_value, info);
1458 const char *fd = FPR(fd_value, info);
1460 return img_format("ABS.S %s, %s", fd, fs);
1465 * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords
1466 * with 16-bit saturation
1468 * 3 2 1
1469 * 10987654321098765432109876543210
1470 * 001000 0001000100111111
1471 * rt -----
1472 * rs -----
1474 static char *ABSQ_S_PH(uint64 instruction, Dis_info *info)
1476 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1477 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1479 const char *rt = GPR(rt_value, info);
1480 const char *rs = GPR(rs_value, info);
1482 return img_format("ABSQ_S.PH %s, %s", rt, rs);
1487 * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values
1488 * with 8-bit saturation
1490 * 3 2 1
1491 * 10987654321098765432109876543210
1492 * 001000 0000000100111111
1493 * rt -----
1494 * rs -----
1496 static char *ABSQ_S_QB(uint64 instruction, Dis_info *info)
1498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1499 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1501 const char *rt = GPR(rt_value, info);
1502 const char *rs = GPR(rs_value, info);
1504 return img_format("ABSQ_S.QB %s, %s", rt, rs);
1509 * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit
1510 * saturation
1512 * 3 2 1
1513 * 10987654321098765432109876543210
1514 * 001000 0010000100111111
1515 * rt -----
1516 * rs -----
1518 static char *ABSQ_S_W(uint64 instruction, Dis_info *info)
1520 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1521 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1523 const char *rt = GPR(rt_value, info);
1524 const char *rs = GPR(rs_value, info);
1526 return img_format("ABSQ_S.W %s, %s", rt, rs);
1533 * 3 2 1
1534 * 10987654321098765432109876543210
1535 * 001000 0010000100111111
1536 * rt -----
1537 * rs -----
1539 static char *ACLR(uint64 instruction, Dis_info *info)
1541 uint64 bit_value = extract_bit_23_22_21(instruction);
1542 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1543 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
1545 const char *rs = GPR(rs_value, info);
1547 return img_format("ACLR 0x%" PRIx64 ", %" PRId64 "(%s)",
1548 bit_value, s_value, rs);
1555 * 3 2 1
1556 * 10987654321098765432109876543210
1557 * 001000 0010000100111111
1558 * rt -----
1559 * rs -----
1561 static char *ADD(uint64 instruction, Dis_info *info)
1563 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1564 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1565 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1567 const char *rd = GPR(rd_value, info);
1568 const char *rs = GPR(rs_value, info);
1569 const char *rt = GPR(rt_value, info);
1571 return img_format("ADD %s, %s, %s", rd, rs, rt);
1576 * ADD.D fd, fs, ft - Floating Point Add
1578 * 3 2 1
1579 * 10987654321098765432109876543210
1580 * 010001 000101
1581 * fmt -----
1582 * ft -----
1583 * fs -----
1584 * fd -----
1586 static char *ADD_D(uint64 instruction, Dis_info *info)
1588 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1589 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1590 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1592 const char *ft = FPR(ft_value, info);
1593 const char *fs = FPR(fs_value, info);
1594 const char *fd = FPR(fd_value, info);
1596 return img_format("ADD.D %s, %s, %s", fd, fs, ft);
1601 * ADD.S fd, fs, ft - Floating Point Add
1603 * 3 2 1
1604 * 10987654321098765432109876543210
1605 * 010001 000101
1606 * fmt -----
1607 * ft -----
1608 * fs -----
1609 * fd -----
1611 static char *ADD_S(uint64 instruction, Dis_info *info)
1613 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1614 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1615 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1617 const char *ft = FPR(ft_value, info);
1618 const char *fs = FPR(fs_value, info);
1619 const char *fd = FPR(fd_value, info);
1621 return img_format("ADD.S %s, %s, %s", fd, fs, ft);
1628 * 3 2 1
1629 * 10987654321098765432109876543210
1630 * 001000 0010000100111111
1631 * rt -----
1632 * rs -----
1634 static char *ADDIU_32_(uint64 instruction, Dis_info *info)
1636 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1637 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1638 uint64 u_value = extract_u_15_to_0(instruction);
1640 const char *rt = GPR(rt_value, info);
1641 const char *rs = GPR(rs_value, info);
1643 return img_format("ADDIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
1650 * 3 2 1
1651 * 10987654321098765432109876543210
1652 * 001000 0010000100111111
1653 * rt -----
1654 * rs -----
1656 static char *ADDIU_48_(uint64 instruction, Dis_info *info)
1658 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1659 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1661 const char *rt = GPR(rt_value, info);
1663 return img_format("ADDIU %s, %" PRId64, rt, s_value);
1670 * 3 2 1
1671 * 10987654321098765432109876543210
1672 * 001000 0010000100111111
1673 * rt -----
1674 * rs -----
1676 static char *ADDIU_GP48_(uint64 instruction, Dis_info *info)
1678 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1679 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1681 const char *rt = GPR(rt_value, info);
1683 return img_format("ADDIU %s, $%d, %" PRId64, rt, 28, s_value);
1690 * 3 2 1
1691 * 10987654321098765432109876543210
1692 * 001000 0010000100111111
1693 * rt -----
1694 * rs -----
1696 static char *ADDIU_GP_B_(uint64 instruction, Dis_info *info)
1698 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1699 uint64 u_value = extract_u_17_to_0(instruction);
1701 const char *rt = GPR(rt_value, info);
1703 return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt, 28, u_value);
1710 * 3 2 1
1711 * 10987654321098765432109876543210
1712 * 001000 0010000100111111
1713 * rt -----
1714 * rs -----
1716 static char *ADDIU_GP_W_(uint64 instruction, Dis_info *info)
1718 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1719 uint64 u_value = extract_u_20_to_2__s2(instruction);
1721 const char *rt = GPR(rt_value, info);
1723 return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt, 28, u_value);
1730 * 3 2 1
1731 * 10987654321098765432109876543210
1732 * 001000 0010000100111111
1733 * rt -----
1734 * rs -----
1736 static char *ADDIU_NEG_(uint64 instruction, Dis_info *info)
1738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1739 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1740 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
1742 const char *rt = GPR(rt_value, info);
1743 const char *rs = GPR(rs_value, info);
1744 int64 u = neg_copy(u_value);
1746 return img_format("ADDIU %s, %s, %" PRId64, rt, rs, u);
1753 * 3 2 1
1754 * 10987654321098765432109876543210
1755 * 001000 0010000100111111
1756 * rt -----
1757 * rs -----
1759 static char *ADDIU_R1_SP_(uint64 instruction, Dis_info *info)
1761 uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
1762 uint64 rt3_value = extract_rt3_9_8_7(instruction);
1764 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
1766 return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt3, 29, u_value);
1773 * 3 2 1
1774 * 10987654321098765432109876543210
1775 * 001000 0010000100111111
1776 * rt -----
1777 * rs -----
1779 static char *ADDIU_R2_(uint64 instruction, Dis_info *info)
1781 uint64 rt3_value = extract_rt3_9_8_7(instruction);
1782 uint64 rs3_value = extract_rs3_6_5_4(instruction);
1783 uint64 u_value = extract_u_2_1_0__s2(instruction);
1785 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
1786 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
1788 return img_format("ADDIU %s, %s, 0x%" PRIx64, rt3, rs3, u_value);
1793 * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
1795 * 5432109876543210
1796 * 100100 1
1797 * rt -----
1798 * s - ---
1800 static char *ADDIU_RS5_(uint64 instruction, Dis_info *info)
1802 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
1803 int64 s_value = extract_s__se3_4_2_1_0(instruction);
1805 const char *rt = GPR(rt_value, info);
1807 return img_format("ADDIU %s, %" PRId64, rt, s_value);
1814 * 3 2 1
1815 * 10987654321098765432109876543210
1816 * 001000 x1110000101
1817 * rt -----
1818 * rs -----
1819 * rd -----
1821 static char *ADDIUPC_32_(uint64 instruction, Dis_info *info)
1823 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1824 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
1826 const char *rt = GPR(rt_value, info);
1827 g_autofree char *s = ADDRESS(s_value, 4, info);
1829 return img_format("ADDIUPC %s, %s", rt, s);
1836 * 3 2 1
1837 * 10987654321098765432109876543210
1838 * 001000 x1110000101
1839 * rt -----
1840 * rs -----
1841 * rd -----
1843 static char *ADDIUPC_48_(uint64 instruction, Dis_info *info)
1845 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1846 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1848 const char *rt = GPR(rt_value, info);
1849 g_autofree char *s = ADDRESS(s_value, 6, info);
1851 return img_format("ADDIUPC %s, %s", rt, s);
1856 * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors
1858 * 3 2 1
1859 * 10987654321098765432109876543210
1860 * 001000 00000001101
1861 * rt -----
1862 * rs -----
1863 * rd -----
1865 static char *ADDQ_PH(uint64 instruction, Dis_info *info)
1867 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1868 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1869 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1871 const char *rd = GPR(rd_value, info);
1872 const char *rs = GPR(rs_value, info);
1873 const char *rt = GPR(rt_value, info);
1875 return img_format("ADDQ.PH %s, %s, %s", rd, rs, rt);
1880 * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit
1881 * saturation
1883 * 3 2 1
1884 * 10987654321098765432109876543210
1885 * 001000 10000001101
1886 * rt -----
1887 * rs -----
1888 * rd -----
1890 static char *ADDQ_S_PH(uint64 instruction, Dis_info *info)
1892 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1893 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1894 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1896 const char *rd = GPR(rd_value, info);
1897 const char *rs = GPR(rs_value, info);
1898 const char *rt = GPR(rt_value, info);
1900 return img_format("ADDQ_S.PH %s, %s, %s", rd, rs, rt);
1905 * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation
1907 * 3 2 1
1908 * 10987654321098765432109876543210
1909 * 001000 x1100000101
1910 * rt -----
1911 * rs -----
1912 * rd -----
1914 static char *ADDQ_S_W(uint64 instruction, Dis_info *info)
1916 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1917 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1918 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1920 const char *rd = GPR(rd_value, info);
1921 const char *rs = GPR(rs_value, info);
1922 const char *rt = GPR(rt_value, info);
1924 return img_format("ADDQ_S.W %s, %s, %s", rd, rs, rt);
1929 * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift
1930 * right to halve results
1932 * 3 2 1
1933 * 10987654321098765432109876543210
1934 * 001000 00001001101
1935 * rt -----
1936 * rs -----
1937 * rd -----
1939 static char *ADDQH_PH(uint64 instruction, Dis_info *info)
1941 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1942 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1943 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1945 const char *rd = GPR(rd_value, info);
1946 const char *rs = GPR(rs_value, info);
1947 const char *rt = GPR(rt_value, info);
1949 return img_format("ADDQH.PH %s, %s, %s", rd, rs, rt);
1954 * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift
1955 * right to halve results with rounding
1957 * 3 2 1
1958 * 10987654321098765432109876543210
1959 * 001000 10001001101
1960 * rt -----
1961 * rs -----
1962 * rd -----
1964 static char *ADDQH_R_PH(uint64 instruction, Dis_info *info)
1966 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1967 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1968 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1970 const char *rd = GPR(rd_value, info);
1971 const char *rs = GPR(rs_value, info);
1972 const char *rt = GPR(rt_value, info);
1974 return img_format("ADDQH_R.PH %s, %s, %s", rd, rs, rt);
1979 * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve
1980 * results with rounding
1982 * 3 2 1
1983 * 10987654321098765432109876543210
1984 * 001000 00010001101
1985 * rt -----
1986 * rs -----
1987 * rd -----
1989 static char *ADDQH_R_W(uint64 instruction, Dis_info *info)
1991 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1992 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1993 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1995 const char *rd = GPR(rd_value, info);
1996 const char *rs = GPR(rs_value, info);
1997 const char *rt = GPR(rt_value, info);
1999 return img_format("ADDQH_R.W %s, %s, %s", rd, rs, rt);
2004 * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve
2005 * results
2007 * 3 2 1
2008 * 10987654321098765432109876543210
2009 * 001000 10010001101
2010 * rt -----
2011 * rs -----
2012 * rd -----
2014 static char *ADDQH_W(uint64 instruction, Dis_info *info)
2016 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2017 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2018 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2020 const char *rd = GPR(rd_value, info);
2021 const char *rs = GPR(rs_value, info);
2022 const char *rt = GPR(rt_value, info);
2024 return img_format("ADDQH.W %s, %s, %s", rd, rs, rt);
2029 * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit
2031 * 3 2 1
2032 * 10987654321098765432109876543210
2033 * 001000 x1110000101
2034 * rt -----
2035 * rs -----
2036 * rd -----
2038 static char *ADDSC(uint64 instruction, Dis_info *info)
2040 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2041 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2042 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2044 const char *rd = GPR(rd_value, info);
2045 const char *rs = GPR(rs_value, info);
2046 const char *rt = GPR(rt_value, info);
2048 return img_format("ADDSC %s, %s, %s", rd, rs, rt);
2053 * ADDU[16] rd3, rs3, rt3 -
2055 * 5432109876543210
2056 * 101100 0
2057 * rt3 ---
2058 * rs3 ---
2059 * rd3 ---
2061 static char *ADDU_16_(uint64 instruction, Dis_info *info)
2063 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2064 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2065 uint64 rd3_value = extract_rd3_3_2_1(instruction);
2067 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2068 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2069 const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
2071 return img_format("ADDU %s, %s, %s", rd3, rs3, rt3);
2078 * 3 2 1
2079 * 10987654321098765432109876543210
2080 * 001000 x1110000101
2081 * rt -----
2082 * rs -----
2083 * rd -----
2085 static char *ADDU_32_(uint64 instruction, Dis_info *info)
2087 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2088 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2089 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2091 const char *rd = GPR(rd_value, info);
2092 const char *rs = GPR(rs_value, info);
2093 const char *rt = GPR(rt_value, info);
2095 return img_format("ADDU %s, %s, %s", rd, rs, rt);
2102 * 3 2 1
2103 * 10987654321098765432109876543210
2104 * 001000 x1110000101
2105 * rt -----
2106 * rs -----
2107 * rd -----
2109 static char *ADDU_4X4_(uint64 instruction, Dis_info *info)
2111 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
2112 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
2114 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
2115 const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
2117 return img_format("ADDU %s, %s", rs4, rt4);
2122 * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords
2124 * 3 2 1
2125 * 10987654321098765432109876543210
2126 * 001000 00100001101
2127 * rt -----
2128 * rs -----
2129 * rd -----
2131 static char *ADDU_PH(uint64 instruction, Dis_info *info)
2133 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2134 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2135 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2137 const char *rd = GPR(rd_value, info);
2138 const char *rs = GPR(rs_value, info);
2139 const char *rt = GPR(rt_value, info);
2141 return img_format("ADDU.PH %s, %s, %s", rd, rs, rt);
2146 * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2148 * 3 2 1
2149 * 10987654321098765432109876543210
2150 * 001000 00011001101
2151 * rt -----
2152 * rs -----
2153 * rd -----
2155 static char *ADDU_QB(uint64 instruction, Dis_info *info)
2157 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2158 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2159 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2161 const char *rd = GPR(rd_value, info);
2162 const char *rs = GPR(rs_value, info);
2163 const char *rt = GPR(rt_value, info);
2165 return img_format("ADDU.QB %s, %s, %s", rd, rs, rt);
2170 * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit
2171 * saturation
2173 * 3 2 1
2174 * 10987654321098765432109876543210
2175 * 001000 10100001101
2176 * rt -----
2177 * rs -----
2178 * rd -----
2180 static char *ADDU_S_PH(uint64 instruction, Dis_info *info)
2182 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2183 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2184 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2186 const char *rd = GPR(rd_value, info);
2187 const char *rs = GPR(rs_value, info);
2188 const char *rt = GPR(rt_value, info);
2190 return img_format("ADDU_S.PH %s, %s, %s", rd, rs, rt);
2195 * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2197 * 3 2 1
2198 * 10987654321098765432109876543210
2199 * 001000 10011001101
2200 * rt -----
2201 * rs -----
2202 * rd -----
2204 static char *ADDU_S_QB(uint64 instruction, Dis_info *info)
2206 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2207 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2208 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2210 const char *rd = GPR(rd_value, info);
2211 const char *rs = GPR(rs_value, info);
2212 const char *rt = GPR(rt_value, info);
2214 return img_format("ADDU_S.QB %s, %s, %s", rd, rs, rt);
2219 * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2220 * to Halve Results
2222 * 3 2 1
2223 * 10987654321098765432109876543210
2224 * 001000 00101001101
2225 * rt -----
2226 * rs -----
2227 * rd -----
2229 static char *ADDUH_QB(uint64 instruction, Dis_info *info)
2231 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2232 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2233 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2235 const char *rd = GPR(rd_value, info);
2236 const char *rs = GPR(rs_value, info);
2237 const char *rt = GPR(rt_value, info);
2239 return img_format("ADDUH.QB %s, %s, %s", rd, rs, rt);
2244 * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2245 * to Halve Results
2247 * 3 2 1
2248 * 10987654321098765432109876543210
2249 * 001000 10101001101
2250 * rt -----
2251 * rs -----
2252 * rd -----
2254 static char *ADDUH_R_QB(uint64 instruction, Dis_info *info)
2256 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2257 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2258 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2260 const char *rd = GPR(rd_value, info);
2261 const char *rs = GPR(rs_value, info);
2262 const char *rt = GPR(rt_value, info);
2264 return img_format("ADDUH_R.QB %s, %s, %s", rd, rs, rt);
2268 * ADDWC rd, rt, rs - Add Word with Carry Bit
2270 * 3 2 1
2271 * 10987654321098765432109876543210
2272 * 001000 x1111000101
2273 * rt -----
2274 * rs -----
2275 * rd -----
2277 static char *ADDWC(uint64 instruction, Dis_info *info)
2279 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2280 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2281 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2283 const char *rd = GPR(rd_value, info);
2284 const char *rs = GPR(rs_value, info);
2285 const char *rt = GPR(rt_value, info);
2287 return img_format("ADDWC %s, %s, %s", rd, rs, rt);
2294 * 3 2 1
2295 * 10987654321098765432109876543210
2296 * 001000 x1110000101
2297 * rt -----
2298 * rs -----
2299 * rd -----
2301 static char *ALUIPC(uint64 instruction, Dis_info *info)
2303 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2304 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
2306 const char *rt = GPR(rt_value, info);
2307 g_autofree char *s = ADDRESS(s_value, 4, info);
2309 return img_format("ALUIPC %s, %%pcrel_hi(%s)", rt, s);
2314 * AND[16] rt3, rs3 -
2316 * 5432109876543210
2317 * 101100
2318 * rt3 ---
2319 * rs3 ---
2320 * eu ----
2322 static char *AND_16_(uint64 instruction, Dis_info *info)
2324 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2325 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2327 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2328 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2330 return img_format("AND %s, %s", rs3, rt3);
2337 * 3 2 1
2338 * 10987654321098765432109876543210
2339 * 001000 x1110000101
2340 * rt -----
2341 * rs -----
2342 * rd -----
2344 static char *AND_32_(uint64 instruction, Dis_info *info)
2346 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2347 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2348 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2350 const char *rd = GPR(rd_value, info);
2351 const char *rs = GPR(rs_value, info);
2352 const char *rt = GPR(rt_value, info);
2354 return img_format("AND %s, %s, %s", rd, rs, rt);
2359 * ANDI rt, rs, u -
2361 * 5432109876543210
2362 * 101100
2363 * rt3 ---
2364 * rs3 ---
2365 * eu ----
2367 static char *ANDI_16_(uint64 instruction, Dis_info *info)
2369 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2370 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2371 uint64 eu_value = extract_eu_3_2_1_0(instruction);
2373 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2374 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2375 uint64 eu = encode_eu_from_u_andi16(eu_value);
2377 return img_format("ANDI %s, %s, 0x%" PRIx64, rt3, rs3, eu);
2384 * 3 2 1
2385 * 10987654321098765432109876543210
2386 * 001000 x1110000101
2387 * rt -----
2388 * rs -----
2389 * rd -----
2391 static char *ANDI_32_(uint64 instruction, Dis_info *info)
2393 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2394 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2395 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2397 const char *rt = GPR(rt_value, info);
2398 const char *rs = GPR(rs_value, info);
2400 return img_format("ANDI %s, %s, 0x%" PRIx64, rt, rs, u_value);
2407 * 3 2 1
2408 * 10987654321098765432109876543210
2409 * 001000 x1110000101
2410 * rt -----
2411 * rs -----
2412 * rd -----
2414 static char *APPEND(uint64 instruction, Dis_info *info)
2416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2417 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2418 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
2420 const char *rt = GPR(rt_value, info);
2421 const char *rs = GPR(rs_value, info);
2423 return img_format("APPEND %s, %s, 0x%" PRIx64, rt, rs, sa_value);
2430 * 3 2 1
2431 * 10987654321098765432109876543210
2432 * 001000 x1110000101
2433 * rt -----
2434 * rs -----
2435 * rd -----
2437 static char *ASET(uint64 instruction, Dis_info *info)
2439 uint64 bit_value = extract_bit_23_22_21(instruction);
2440 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2441 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
2443 const char *rs = GPR(rs_value, info);
2445 return img_format("ASET 0x%" PRIx64 ", %" PRId64 "(%s)",
2446 bit_value, s_value, rs);
2453 * 3 2 1
2454 * 10987654321098765432109876543210
2455 * 001000 x1110000101
2456 * rt -----
2457 * rs -----
2458 * rd -----
2460 static char *BALC_16_(uint64 instruction, Dis_info *info)
2462 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2464 g_autofree char *s = ADDRESS(s_value, 2, info);
2466 return img_format("BALC %s", s);
2473 * 3 2 1
2474 * 10987654321098765432109876543210
2475 * 001000 x1110000101
2476 * rt -----
2477 * rs -----
2478 * rd -----
2480 static char *BALC_32_(uint64 instruction, Dis_info *info)
2482 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2484 g_autofree char *s = ADDRESS(s_value, 4, info);
2486 return img_format("BALC %s", s);
2493 * 3 2 1
2494 * 10987654321098765432109876543210
2495 * 001000 x1110000101
2496 * rt -----
2497 * rs -----
2498 * rd -----
2500 static char *BALRSC(uint64 instruction, Dis_info *info)
2502 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2503 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2505 const char *rt = GPR(rt_value, info);
2506 const char *rs = GPR(rs_value, info);
2508 return img_format("BALRSC %s, %s", rt, rs);
2515 * 3 2 1
2516 * 10987654321098765432109876543210
2517 * 001000 x1110000101
2518 * rt -----
2519 * rs -----
2520 * rd -----
2522 static char *BBEQZC(uint64 instruction, Dis_info *info)
2524 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2525 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2526 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2528 const char *rt = GPR(rt_value, info);
2529 g_autofree char *s = ADDRESS(s_value, 4, info);
2531 return img_format("BBEQZC %s, 0x%" PRIx64 ", %s", rt, bit_value, s);
2538 * 3 2 1
2539 * 10987654321098765432109876543210
2540 * 001000 x1110000101
2541 * rt -----
2542 * rs -----
2543 * rd -----
2545 static char *BBNEZC(uint64 instruction, Dis_info *info)
2547 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2548 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2549 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2551 const char *rt = GPR(rt_value, info);
2552 g_autofree char *s = ADDRESS(s_value, 4, info);
2554 return img_format("BBNEZC %s, 0x%" PRIx64 ", %s", rt, bit_value, s);
2561 * 3 2 1
2562 * 10987654321098765432109876543210
2563 * 001000 x1110000101
2564 * rt -----
2565 * rs -----
2566 * rd -----
2568 static char *BC_16_(uint64 instruction, Dis_info *info)
2570 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2572 g_autofree char *s = ADDRESS(s_value, 2, info);
2574 return img_format("BC %s", s);
2581 * 3 2 1
2582 * 10987654321098765432109876543210
2583 * 001000 x1110000101
2584 * rt -----
2585 * rs -----
2586 * rd -----
2588 static char *BC_32_(uint64 instruction, Dis_info *info)
2590 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2592 g_autofree char *s = ADDRESS(s_value, 4, info);
2594 return img_format("BC %s", s);
2601 * 3 2 1
2602 * 10987654321098765432109876543210
2603 * 001000 x1110000101
2604 * rt -----
2605 * rs -----
2606 * rd -----
2608 static char *BC1EQZC(uint64 instruction, Dis_info *info)
2610 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2611 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2613 const char *ft = FPR(ft_value, info);
2614 g_autofree char *s = ADDRESS(s_value, 4, info);
2616 return img_format("BC1EQZC %s, %s", ft, s);
2623 * 3 2 1
2624 * 10987654321098765432109876543210
2625 * 001000 x1110000101
2626 * rt -----
2627 * rs -----
2628 * rd -----
2630 static char *BC1NEZC(uint64 instruction, Dis_info *info)
2632 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2633 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2635 const char *ft = FPR(ft_value, info);
2636 g_autofree char *s = ADDRESS(s_value, 4, info);
2638 return img_format("BC1NEZC %s, %s", ft, s);
2645 * 3 2 1
2646 * 10987654321098765432109876543210
2647 * 001000 x1110000101
2648 * rt -----
2649 * rs -----
2650 * rd -----
2652 static char *BC2EQZC(uint64 instruction, Dis_info *info)
2654 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
2655 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2657 g_autofree char *s = ADDRESS(s_value, 4, info);
2659 return img_format("BC2EQZC CP%" PRIu64 ", %s", ct_value, s);
2666 * 3 2 1
2667 * 10987654321098765432109876543210
2668 * 001000 x1110000101
2669 * rt -----
2670 * rs -----
2671 * rd -----
2673 static char *BC2NEZC(uint64 instruction, Dis_info *info)
2675 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
2676 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2678 g_autofree char *s = ADDRESS(s_value, 4, info);
2680 return img_format("BC2NEZC CP%" PRIu64 ", %s", ct_value, s);
2687 * 3 2 1
2688 * 10987654321098765432109876543210
2689 * 001000 x1110000101
2690 * rt -----
2691 * rs -----
2692 * rd -----
2694 static char *BEQC_16_(uint64 instruction, Dis_info *info)
2696 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2697 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2698 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
2700 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2701 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2702 g_autofree char *u = ADDRESS(u_value, 2, info);
2704 return img_format("BEQC %s, %s, %s", rs3, rt3, u);
2711 * 3 2 1
2712 * 10987654321098765432109876543210
2713 * 001000 x1110000101
2714 * rt -----
2715 * rs -----
2716 * rd -----
2718 static char *BEQC_32_(uint64 instruction, Dis_info *info)
2720 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2721 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2722 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2724 const char *rs = GPR(rs_value, info);
2725 const char *rt = GPR(rt_value, info);
2726 g_autofree char *s = ADDRESS(s_value, 4, info);
2728 return img_format("BEQC %s, %s, %s", rs, rt, s);
2735 * 3 2 1
2736 * 10987654321098765432109876543210
2737 * 001000 x1110000101
2738 * rt -----
2739 * rs -----
2740 * rd -----
2742 static char *BEQIC(uint64 instruction, Dis_info *info)
2744 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2745 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2746 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2748 const char *rt = GPR(rt_value, info);
2749 g_autofree char *s = ADDRESS(s_value, 4, info);
2751 return img_format("BEQIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2758 * 3 2 1
2759 * 10987654321098765432109876543210
2760 * 001000 x1110000101
2761 * rt -----
2762 * rs -----
2763 * rd -----
2765 static char *BEQZC_16_(uint64 instruction, Dis_info *info)
2767 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2768 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
2770 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2771 g_autofree char *s = ADDRESS(s_value, 2, info);
2773 return img_format("BEQZC %s, %s", rt3, s);
2780 * 3 2 1
2781 * 10987654321098765432109876543210
2782 * 001000 x1110000101
2783 * rt -----
2784 * rs -----
2785 * rd -----
2787 static char *BGEC(uint64 instruction, Dis_info *info)
2789 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2790 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2791 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2793 const char *rs = GPR(rs_value, info);
2794 const char *rt = GPR(rt_value, info);
2795 g_autofree char *s = ADDRESS(s_value, 4, info);
2797 return img_format("BGEC %s, %s, %s", rs, rt, s);
2804 * 3 2 1
2805 * 10987654321098765432109876543210
2806 * 001000 x1110000101
2807 * rt -----
2808 * rs -----
2809 * rd -----
2811 static char *BGEIC(uint64 instruction, Dis_info *info)
2813 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2814 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2815 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2817 const char *rt = GPR(rt_value, info);
2818 g_autofree char *s = ADDRESS(s_value, 4, info);
2820 return img_format("BGEIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2827 * 3 2 1
2828 * 10987654321098765432109876543210
2829 * 001000 x1110000101
2830 * rt -----
2831 * rs -----
2832 * rd -----
2834 static char *BGEIUC(uint64 instruction, Dis_info *info)
2836 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2837 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2838 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2840 const char *rt = GPR(rt_value, info);
2841 g_autofree char *s = ADDRESS(s_value, 4, info);
2843 return img_format("BGEIUC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2850 * 3 2 1
2851 * 10987654321098765432109876543210
2852 * 001000 x1110000101
2853 * rt -----
2854 * rs -----
2855 * rd -----
2857 static char *BGEUC(uint64 instruction, Dis_info *info)
2859 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2860 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2861 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2863 const char *rs = GPR(rs_value, info);
2864 const char *rt = GPR(rt_value, info);
2865 g_autofree char *s = ADDRESS(s_value, 4, info);
2867 return img_format("BGEUC %s, %s, %s", rs, rt, s);
2874 * 3 2 1
2875 * 10987654321098765432109876543210
2876 * 001000 x1110000101
2877 * rt -----
2878 * rs -----
2879 * rd -----
2881 static char *BLTC(uint64 instruction, Dis_info *info)
2883 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2884 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2885 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2887 const char *rs = GPR(rs_value, info);
2888 const char *rt = GPR(rt_value, info);
2889 g_autofree char *s = ADDRESS(s_value, 4, info);
2891 return img_format("BLTC %s, %s, %s", rs, rt, s);
2898 * 3 2 1
2899 * 10987654321098765432109876543210
2900 * 001000 x1110000101
2901 * rt -----
2902 * rs -----
2903 * rd -----
2905 static char *BLTIC(uint64 instruction, Dis_info *info)
2907 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2908 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2909 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2911 const char *rt = GPR(rt_value, info);
2912 g_autofree char *s = ADDRESS(s_value, 4, info);
2914 return img_format("BLTIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2921 * 3 2 1
2922 * 10987654321098765432109876543210
2923 * 001000 x1110000101
2924 * rt -----
2925 * rs -----
2926 * rd -----
2928 static char *BLTIUC(uint64 instruction, Dis_info *info)
2930 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2931 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2932 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2934 const char *rt = GPR(rt_value, info);
2935 g_autofree char *s = ADDRESS(s_value, 4, info);
2937 return img_format("BLTIUC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2944 * 3 2 1
2945 * 10987654321098765432109876543210
2946 * 001000 x1110000101
2947 * rt -----
2948 * rs -----
2949 * rd -----
2951 static char *BLTUC(uint64 instruction, Dis_info *info)
2953 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2954 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2955 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2957 const char *rs = GPR(rs_value, info);
2958 const char *rt = GPR(rt_value, info);
2959 g_autofree char *s = ADDRESS(s_value, 4, info);
2961 return img_format("BLTUC %s, %s, %s", rs, rt, s);
2968 * 3 2 1
2969 * 10987654321098765432109876543210
2970 * 001000 x1110000101
2971 * rt -----
2972 * rs -----
2973 * rd -----
2975 static char *BNEC_16_(uint64 instruction, Dis_info *info)
2977 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2978 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2979 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
2981 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2982 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2983 g_autofree char *u = ADDRESS(u_value, 2, info);
2985 return img_format("BNEC %s, %s, %s", rs3, rt3, u);
2992 * 3 2 1
2993 * 10987654321098765432109876543210
2994 * 001000 x1110000101
2995 * rt -----
2996 * rs -----
2997 * rd -----
2999 static char *BNEC_32_(uint64 instruction, Dis_info *info)
3001 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3002 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3003 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3005 const char *rs = GPR(rs_value, info);
3006 const char *rt = GPR(rt_value, info);
3007 g_autofree char *s = ADDRESS(s_value, 4, info);
3009 return img_format("BNEC %s, %s, %s", rs, rt, s);
3016 * 3 2 1
3017 * 10987654321098765432109876543210
3018 * 001000 x1110000101
3019 * rt -----
3020 * rs -----
3021 * rd -----
3023 static char *BNEIC(uint64 instruction, Dis_info *info)
3025 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3026 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3027 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3029 const char *rt = GPR(rt_value, info);
3030 g_autofree char *s = ADDRESS(s_value, 4, info);
3032 return img_format("BNEIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
3039 * 3 2 1
3040 * 10987654321098765432109876543210
3041 * 001000 x1110000101
3042 * rt -----
3043 * rs -----
3044 * rd -----
3046 static char *BNEZC_16_(uint64 instruction, Dis_info *info)
3048 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3049 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3051 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
3052 g_autofree char *s = ADDRESS(s_value, 2, info);
3054 return img_format("BNEZC %s, %s", rt3, s);
3059 * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in
3060 * DSPControl Pos field
3062 * 3 2 1
3063 * 10987654321098765432109876543210
3064 * 100010xxxxx0010001
3065 * s[13:1] -------------
3066 * s[14] -
3068 static char *BPOSGE32C(uint64 instruction, Dis_info *info)
3070 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3072 g_autofree char *s = ADDRESS(s_value, 4, info);
3074 return img_format("BPOSGE32C %s", s);
3081 * 3 2 1
3082 * 10987654321098765432109876543210
3083 * 001000 x1110000101
3084 * rt -----
3085 * rs -----
3086 * rd -----
3088 static char *BREAK_16_(uint64 instruction, Dis_info *info)
3090 uint64 code_value = extract_code_2_1_0(instruction);
3093 return img_format("BREAK 0x%" PRIx64, code_value);
3098 * BREAK code - Break. Cause a Breakpoint exception
3100 * 3 2 1
3101 * 10987654321098765432109876543210
3102 * 001000 x1110000101
3103 * rt -----
3104 * rs -----
3105 * rd -----
3107 static char *BREAK_32_(uint64 instruction, Dis_info *info)
3109 uint64 code_value = extract_code_18_to_0(instruction);
3112 return img_format("BREAK 0x%" PRIx64, code_value);
3119 * 3 2 1
3120 * 10987654321098765432109876543210
3121 * 001000 x1110000101
3122 * rt -----
3123 * rs -----
3124 * rd -----
3126 static char *BRSC(uint64 instruction, Dis_info *info)
3128 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3130 const char *rs = GPR(rs_value, info);
3132 return img_format("BRSC %s", rs);
3139 * 3 2 1
3140 * 10987654321098765432109876543210
3141 * 001000 x1110000101
3142 * rt -----
3143 * rs -----
3144 * rd -----
3146 static char *CACHE(uint64 instruction, Dis_info *info)
3148 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3149 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3150 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3152 const char *rs = GPR(rs_value, info);
3154 return img_format("CACHE 0x%" PRIx64 ", %" PRId64 "(%s)",
3155 op_value, s_value, rs);
3162 * 3 2 1
3163 * 10987654321098765432109876543210
3164 * 001000 x1110000101
3165 * rt -----
3166 * rs -----
3167 * rd -----
3169 static char *CACHEE(uint64 instruction, Dis_info *info)
3171 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3172 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3173 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3175 const char *rs = GPR(rs_value, info);
3177 return img_format("CACHEE 0x%" PRIx64 ", %" PRId64 "(%s)",
3178 op_value, s_value, rs);
3185 * 3 2 1
3186 * 10987654321098765432109876543210
3187 * 001000 x1110000101
3188 * rt -----
3189 * rs -----
3190 * rd -----
3192 static char *CEIL_L_D(uint64 instruction, Dis_info *info)
3194 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3195 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3197 const char *ft = FPR(ft_value, info);
3198 const char *fs = FPR(fs_value, info);
3200 return img_format("CEIL.L.D %s, %s", ft, fs);
3207 * 3 2 1
3208 * 10987654321098765432109876543210
3209 * 001000 x1110000101
3210 * rt -----
3211 * rs -----
3212 * rd -----
3214 static char *CEIL_L_S(uint64 instruction, Dis_info *info)
3216 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3217 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3219 const char *ft = FPR(ft_value, info);
3220 const char *fs = FPR(fs_value, info);
3222 return img_format("CEIL.L.S %s, %s", ft, fs);
3229 * 3 2 1
3230 * 10987654321098765432109876543210
3231 * 001000 x1110000101
3232 * rt -----
3233 * rs -----
3234 * rd -----
3236 static char *CEIL_W_D(uint64 instruction, Dis_info *info)
3238 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3239 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3241 const char *ft = FPR(ft_value, info);
3242 const char *fs = FPR(fs_value, info);
3244 return img_format("CEIL.W.D %s, %s", ft, fs);
3251 * 3 2 1
3252 * 10987654321098765432109876543210
3253 * 001000 x1110000101
3254 * rt -----
3255 * rs -----
3256 * rd -----
3258 static char *CEIL_W_S(uint64 instruction, Dis_info *info)
3260 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3261 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3263 const char *ft = FPR(ft_value, info);
3264 const char *fs = FPR(fs_value, info);
3266 return img_format("CEIL.W.S %s, %s", ft, fs);
3273 * 3 2 1
3274 * 10987654321098765432109876543210
3275 * 001000 x1110000101
3276 * rt -----
3277 * rs -----
3278 * rd -----
3280 static char *CFC1(uint64 instruction, Dis_info *info)
3282 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3283 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3285 const char *rt = GPR(rt_value, info);
3287 return img_format("CFC1 %s, CP%" PRIu64, rt, cs_value);
3294 * 3 2 1
3295 * 10987654321098765432109876543210
3296 * 001000 x1110000101
3297 * rt -----
3298 * rs -----
3299 * rd -----
3301 static char *CFC2(uint64 instruction, Dis_info *info)
3303 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3304 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3306 const char *rt = GPR(rt_value, info);
3308 return img_format("CFC2 %s, CP%" PRIu64, rt, cs_value);
3315 * 3 2 1
3316 * 10987654321098765432109876543210
3317 * 001000 x1110000101
3318 * rt -----
3319 * rs -----
3320 * rd -----
3322 static char *CLASS_D(uint64 instruction, Dis_info *info)
3324 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3325 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3327 const char *ft = FPR(ft_value, info);
3328 const char *fs = FPR(fs_value, info);
3330 return img_format("CLASS.D %s, %s", ft, fs);
3337 * 3 2 1
3338 * 10987654321098765432109876543210
3339 * 001000 x1110000101
3340 * rt -----
3341 * rs -----
3342 * rd -----
3344 static char *CLASS_S(uint64 instruction, Dis_info *info)
3346 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3347 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3349 const char *ft = FPR(ft_value, info);
3350 const char *fs = FPR(fs_value, info);
3352 return img_format("CLASS.S %s, %s", ft, fs);
3359 * 3 2 1
3360 * 10987654321098765432109876543210
3361 * 001000 x1110000101
3362 * rt -----
3363 * rs -----
3364 * rd -----
3366 static char *CLO(uint64 instruction, Dis_info *info)
3368 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3369 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3371 const char *rt = GPR(rt_value, info);
3372 const char *rs = GPR(rs_value, info);
3374 return img_format("CLO %s, %s", rt, rs);
3381 * 3 2 1
3382 * 10987654321098765432109876543210
3383 * 001000 x1110000101
3384 * rt -----
3385 * rs -----
3386 * rd -----
3388 static char *CLZ(uint64 instruction, Dis_info *info)
3390 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3391 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3393 const char *rt = GPR(rt_value, info);
3394 const char *rs = GPR(rs_value, info);
3396 return img_format("CLZ %s, %s", rt, rs);
3403 * 3 2 1
3404 * 10987654321098765432109876543210
3405 * 001000 x1110000101
3406 * rt -----
3407 * rs -----
3408 * rd -----
3410 static char *CMP_AF_D(uint64 instruction, Dis_info *info)
3412 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3413 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3414 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3416 const char *fd = FPR(fd_value, info);
3417 const char *fs = FPR(fs_value, info);
3418 const char *ft = FPR(ft_value, info);
3420 return img_format("CMP.AF.D %s, %s, %s", fd, fs, ft);
3427 * 3 2 1
3428 * 10987654321098765432109876543210
3429 * 001000 x1110000101
3430 * rt -----
3431 * rs -----
3432 * rd -----
3434 static char *CMP_AF_S(uint64 instruction, Dis_info *info)
3436 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3437 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3438 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3440 const char *fd = FPR(fd_value, info);
3441 const char *fs = FPR(fs_value, info);
3442 const char *ft = FPR(ft_value, info);
3444 return img_format("CMP.AF.S %s, %s, %s", fd, fs, ft);
3451 * 3 2 1
3452 * 10987654321098765432109876543210
3453 * 001000 x1110000101
3454 * rt -----
3455 * rs -----
3456 * rd -----
3458 static char *CMP_EQ_D(uint64 instruction, Dis_info *info)
3460 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3461 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3462 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3464 const char *fd = FPR(fd_value, info);
3465 const char *fs = FPR(fs_value, info);
3466 const char *ft = FPR(ft_value, info);
3468 return img_format("CMP.EQ.D %s, %s, %s", fd, fs, ft);
3473 * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values
3475 * 3 2 1
3476 * 10987654321098765432109876543210
3477 * 001000 xxxxxx0000000101
3478 * rt -----
3479 * rs -----
3481 static char *CMP_EQ_PH(uint64 instruction, Dis_info *info)
3483 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3484 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3486 const char *rs = GPR(rs_value, info);
3487 const char *rt = GPR(rt_value, info);
3489 return img_format("CMP.EQ.PH %s, %s", rs, rt);
3496 * 3 2 1
3497 * 10987654321098765432109876543210
3498 * 001000 x1110000101
3499 * rt -----
3500 * rs -----
3501 * rd -----
3503 static char *CMP_EQ_S(uint64 instruction, Dis_info *info)
3505 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3506 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3507 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3509 const char *fd = FPR(fd_value, info);
3510 const char *fs = FPR(fs_value, info);
3511 const char *ft = FPR(ft_value, info);
3513 return img_format("CMP.EQ.S %s, %s, %s", fd, fs, ft);
3520 * 3 2 1
3521 * 10987654321098765432109876543210
3522 * 001000 x1110000101
3523 * rt -----
3524 * rs -----
3525 * rd -----
3527 static char *CMP_LE_D(uint64 instruction, Dis_info *info)
3529 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3530 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3531 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3533 const char *fd = FPR(fd_value, info);
3534 const char *fs = FPR(fs_value, info);
3535 const char *ft = FPR(ft_value, info);
3537 return img_format("CMP.LE.D %s, %s, %s", fd, fs, ft);
3542 * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values
3544 * 3 2 1
3545 * 10987654321098765432109876543210
3546 * 001000 xxxxxx0010000101
3547 * rt -----
3548 * rs -----
3550 static char *CMP_LE_PH(uint64 instruction, Dis_info *info)
3552 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3553 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3555 const char *rs = GPR(rs_value, info);
3556 const char *rt = GPR(rt_value, info);
3558 return img_format("CMP.LE.PH %s, %s", rs, rt);
3565 * 3 2 1
3566 * 10987654321098765432109876543210
3567 * 001000 x1110000101
3568 * rt -----
3569 * rs -----
3570 * rd -----
3572 static char *CMP_LE_S(uint64 instruction, Dis_info *info)
3574 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3575 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3576 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3578 const char *fd = FPR(fd_value, info);
3579 const char *fs = FPR(fs_value, info);
3580 const char *ft = FPR(ft_value, info);
3582 return img_format("CMP.LE.S %s, %s, %s", fd, fs, ft);
3589 * 3 2 1
3590 * 10987654321098765432109876543210
3591 * 001000 x1110000101
3592 * rt -----
3593 * rs -----
3594 * rd -----
3596 static char *CMP_LT_D(uint64 instruction, Dis_info *info)
3598 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3599 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3600 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3602 const char *fd = FPR(fd_value, info);
3603 const char *fs = FPR(fs_value, info);
3604 const char *ft = FPR(ft_value, info);
3606 return img_format("CMP.LT.D %s, %s, %s", fd, fs, ft);
3611 * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values
3613 * 3 2 1
3614 * 10987654321098765432109876543210
3615 * 001000 xxxxxx0001000101
3616 * rt -----
3617 * rs -----
3619 static char *CMP_LT_PH(uint64 instruction, Dis_info *info)
3621 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3622 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3624 const char *rs = GPR(rs_value, info);
3625 const char *rt = GPR(rt_value, info);
3627 return img_format("CMP.LT.PH %s, %s", rs, rt);
3634 * 3 2 1
3635 * 10987654321098765432109876543210
3636 * 001000 x1110000101
3637 * rt -----
3638 * rs -----
3639 * rd -----
3641 static char *CMP_LT_S(uint64 instruction, Dis_info *info)
3643 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3644 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3645 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3647 const char *fd = FPR(fd_value, info);
3648 const char *fs = FPR(fs_value, info);
3649 const char *ft = FPR(ft_value, info);
3651 return img_format("CMP.LT.S %s, %s, %s", fd, fs, ft);
3658 * 3 2 1
3659 * 10987654321098765432109876543210
3660 * 001000 x1110000101
3661 * rt -----
3662 * rs -----
3663 * rd -----
3665 static char *CMP_NE_D(uint64 instruction, Dis_info *info)
3667 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3668 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3669 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3671 const char *fd = FPR(fd_value, info);
3672 const char *fs = FPR(fs_value, info);
3673 const char *ft = FPR(ft_value, info);
3675 return img_format("CMP.NE.D %s, %s, %s", fd, fs, ft);
3682 * 3 2 1
3683 * 10987654321098765432109876543210
3684 * 001000 x1110000101
3685 * rt -----
3686 * rs -----
3687 * rd -----
3689 static char *CMP_NE_S(uint64 instruction, Dis_info *info)
3691 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3692 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3693 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3695 const char *fd = FPR(fd_value, info);
3696 const char *fs = FPR(fs_value, info);
3697 const char *ft = FPR(ft_value, info);
3699 return img_format("CMP.NE.S %s, %s, %s", fd, fs, ft);
3706 * 3 2 1
3707 * 10987654321098765432109876543210
3708 * 001000 x1110000101
3709 * rt -----
3710 * rs -----
3711 * rd -----
3713 static char *CMP_OR_D(uint64 instruction, Dis_info *info)
3715 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3716 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3717 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3719 const char *fd = FPR(fd_value, info);
3720 const char *fs = FPR(fs_value, info);
3721 const char *ft = FPR(ft_value, info);
3723 return img_format("CMP.OR.D %s, %s, %s", fd, fs, ft);
3730 * 3 2 1
3731 * 10987654321098765432109876543210
3732 * 001000 x1110000101
3733 * rt -----
3734 * rs -----
3735 * rd -----
3737 static char *CMP_OR_S(uint64 instruction, Dis_info *info)
3739 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3740 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3741 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3743 const char *fd = FPR(fd_value, info);
3744 const char *fs = FPR(fs_value, info);
3745 const char *ft = FPR(ft_value, info);
3747 return img_format("CMP.OR.S %s, %s, %s", fd, fs, ft);
3754 * 3 2 1
3755 * 10987654321098765432109876543210
3756 * 001000 x1110000101
3757 * rt -----
3758 * rs -----
3759 * rd -----
3761 static char *CMP_SAF_D(uint64 instruction, Dis_info *info)
3763 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3764 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3765 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3767 const char *fd = FPR(fd_value, info);
3768 const char *fs = FPR(fs_value, info);
3769 const char *ft = FPR(ft_value, info);
3771 return img_format("CMP.SAF.D %s, %s, %s", fd, fs, ft);
3778 * 3 2 1
3779 * 10987654321098765432109876543210
3780 * 001000 x1110000101
3781 * rt -----
3782 * rs -----
3783 * rd -----
3785 static char *CMP_SAF_S(uint64 instruction, Dis_info *info)
3787 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3788 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3789 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3791 const char *fd = FPR(fd_value, info);
3792 const char *fs = FPR(fs_value, info);
3793 const char *ft = FPR(ft_value, info);
3795 return img_format("CMP.SAF.S %s, %s, %s", fd, fs, ft);
3802 * 3 2 1
3803 * 10987654321098765432109876543210
3804 * 001000 x1110000101
3805 * rt -----
3806 * rs -----
3807 * rd -----
3809 static char *CMP_SEQ_D(uint64 instruction, Dis_info *info)
3811 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3812 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3813 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3815 const char *fd = FPR(fd_value, info);
3816 const char *fs = FPR(fs_value, info);
3817 const char *ft = FPR(ft_value, info);
3819 return img_format("CMP.SEQ.D %s, %s, %s", fd, fs, ft);
3826 * 3 2 1
3827 * 10987654321098765432109876543210
3828 * 001000 x1110000101
3829 * rt -----
3830 * rs -----
3831 * rd -----
3833 static char *CMP_SEQ_S(uint64 instruction, Dis_info *info)
3835 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3836 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3837 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3839 const char *fd = FPR(fd_value, info);
3840 const char *fs = FPR(fs_value, info);
3841 const char *ft = FPR(ft_value, info);
3843 return img_format("CMP.SEQ.S %s, %s, %s", fd, fs, ft);
3850 * 3 2 1
3851 * 10987654321098765432109876543210
3852 * 001000 x1110000101
3853 * rt -----
3854 * rs -----
3855 * rd -----
3857 static char *CMP_SLE_D(uint64 instruction, Dis_info *info)
3859 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3860 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3861 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3863 const char *fd = FPR(fd_value, info);
3864 const char *fs = FPR(fs_value, info);
3865 const char *ft = FPR(ft_value, info);
3867 return img_format("CMP.SLE.D %s, %s, %s", fd, fs, ft);
3874 * 3 2 1
3875 * 10987654321098765432109876543210
3876 * 001000 x1110000101
3877 * rt -----
3878 * rs -----
3879 * rd -----
3881 static char *CMP_SLE_S(uint64 instruction, Dis_info *info)
3883 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3884 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3885 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3887 const char *fd = FPR(fd_value, info);
3888 const char *fs = FPR(fs_value, info);
3889 const char *ft = FPR(ft_value, info);
3891 return img_format("CMP.SLE.S %s, %s, %s", fd, fs, ft);
3898 * 3 2 1
3899 * 10987654321098765432109876543210
3900 * 001000 x1110000101
3901 * rt -----
3902 * rs -----
3903 * rd -----
3905 static char *CMP_SLT_D(uint64 instruction, Dis_info *info)
3907 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3908 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3909 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3911 const char *fd = FPR(fd_value, info);
3912 const char *fs = FPR(fs_value, info);
3913 const char *ft = FPR(ft_value, info);
3915 return img_format("CMP.SLT.D %s, %s, %s", fd, fs, ft);
3922 * 3 2 1
3923 * 10987654321098765432109876543210
3924 * 001000 x1110000101
3925 * rt -----
3926 * rs -----
3927 * rd -----
3929 static char *CMP_SLT_S(uint64 instruction, Dis_info *info)
3931 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3932 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3933 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3935 const char *fd = FPR(fd_value, info);
3936 const char *fs = FPR(fs_value, info);
3937 const char *ft = FPR(ft_value, info);
3939 return img_format("CMP.SLT.S %s, %s, %s", fd, fs, ft);
3946 * 3 2 1
3947 * 10987654321098765432109876543210
3948 * 001000 x1110000101
3949 * rt -----
3950 * rs -----
3951 * rd -----
3953 static char *CMP_SNE_D(uint64 instruction, Dis_info *info)
3955 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3956 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3957 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3959 const char *fd = FPR(fd_value, info);
3960 const char *fs = FPR(fs_value, info);
3961 const char *ft = FPR(ft_value, info);
3963 return img_format("CMP.SNE.D %s, %s, %s", fd, fs, ft);
3970 * 3 2 1
3971 * 10987654321098765432109876543210
3972 * 001000 x1110000101
3973 * rt -----
3974 * rs -----
3975 * rd -----
3977 static char *CMP_SNE_S(uint64 instruction, Dis_info *info)
3979 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3980 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3981 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3983 const char *fd = FPR(fd_value, info);
3984 const char *fs = FPR(fs_value, info);
3985 const char *ft = FPR(ft_value, info);
3987 return img_format("CMP.SNE.S %s, %s, %s", fd, fs, ft);
3994 * 3 2 1
3995 * 10987654321098765432109876543210
3996 * 001000 x1110000101
3997 * rt -----
3998 * rs -----
3999 * rd -----
4001 static char *CMP_SOR_D(uint64 instruction, Dis_info *info)
4003 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4004 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4005 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4007 const char *fd = FPR(fd_value, info);
4008 const char *fs = FPR(fs_value, info);
4009 const char *ft = FPR(ft_value, info);
4011 return img_format("CMP.SOR.D %s, %s, %s", fd, fs, ft);
4018 * 3 2 1
4019 * 10987654321098765432109876543210
4020 * 001000 x1110000101
4021 * rt -----
4022 * rs -----
4023 * rd -----
4025 static char *CMP_SOR_S(uint64 instruction, Dis_info *info)
4027 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4028 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4029 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4031 const char *fd = FPR(fd_value, info);
4032 const char *fs = FPR(fs_value, info);
4033 const char *ft = FPR(ft_value, info);
4035 return img_format("CMP.SOR.S %s, %s, %s", fd, fs, ft);
4042 * 3 2 1
4043 * 10987654321098765432109876543210
4044 * 001000 x1110000101
4045 * rt -----
4046 * rs -----
4047 * rd -----
4049 static char *CMP_SUEQ_D(uint64 instruction, Dis_info *info)
4051 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4052 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4053 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4055 const char *fd = FPR(fd_value, info);
4056 const char *fs = FPR(fs_value, info);
4057 const char *ft = FPR(ft_value, info);
4059 return img_format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft);
4066 * 3 2 1
4067 * 10987654321098765432109876543210
4068 * 001000 x1110000101
4069 * rt -----
4070 * rs -----
4071 * rd -----
4073 static char *CMP_SUEQ_S(uint64 instruction, Dis_info *info)
4075 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4076 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4077 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4079 const char *fd = FPR(fd_value, info);
4080 const char *fs = FPR(fs_value, info);
4081 const char *ft = FPR(ft_value, info);
4083 return img_format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft);
4090 * 3 2 1
4091 * 10987654321098765432109876543210
4092 * 001000 x1110000101
4093 * rt -----
4094 * rs -----
4095 * rd -----
4097 static char *CMP_SULE_D(uint64 instruction, Dis_info *info)
4099 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4100 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4101 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4103 const char *fd = FPR(fd_value, info);
4104 const char *fs = FPR(fs_value, info);
4105 const char *ft = FPR(ft_value, info);
4107 return img_format("CMP.SULE.D %s, %s, %s", fd, fs, ft);
4114 * 3 2 1
4115 * 10987654321098765432109876543210
4116 * 001000 x1110000101
4117 * rt -----
4118 * rs -----
4119 * rd -----
4121 static char *CMP_SULE_S(uint64 instruction, Dis_info *info)
4123 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4124 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4125 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4127 const char *fd = FPR(fd_value, info);
4128 const char *fs = FPR(fs_value, info);
4129 const char *ft = FPR(ft_value, info);
4131 return img_format("CMP.SULE.S %s, %s, %s", fd, fs, ft);
4138 * 3 2 1
4139 * 10987654321098765432109876543210
4140 * 001000 x1110000101
4141 * rt -----
4142 * rs -----
4143 * rd -----
4145 static char *CMP_SULT_D(uint64 instruction, Dis_info *info)
4147 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4148 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4149 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4151 const char *fd = FPR(fd_value, info);
4152 const char *fs = FPR(fs_value, info);
4153 const char *ft = FPR(ft_value, info);
4155 return img_format("CMP.SULT.D %s, %s, %s", fd, fs, ft);
4162 * 3 2 1
4163 * 10987654321098765432109876543210
4164 * 001000 x1110000101
4165 * rt -----
4166 * rs -----
4167 * rd -----
4169 static char *CMP_SULT_S(uint64 instruction, Dis_info *info)
4171 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4172 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4173 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4175 const char *fd = FPR(fd_value, info);
4176 const char *fs = FPR(fs_value, info);
4177 const char *ft = FPR(ft_value, info);
4179 return img_format("CMP.SULT.S %s, %s, %s", fd, fs, ft);
4186 * 3 2 1
4187 * 10987654321098765432109876543210
4188 * 001000 x1110000101
4189 * rt -----
4190 * rs -----
4191 * rd -----
4193 static char *CMP_SUN_D(uint64 instruction, Dis_info *info)
4195 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4196 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4197 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4199 const char *fd = FPR(fd_value, info);
4200 const char *fs = FPR(fs_value, info);
4201 const char *ft = FPR(ft_value, info);
4203 return img_format("CMP.SUN.D %s, %s, %s", fd, fs, ft);
4210 * 3 2 1
4211 * 10987654321098765432109876543210
4212 * 001000 x1110000101
4213 * rt -----
4214 * rs -----
4215 * rd -----
4217 static char *CMP_SUNE_D(uint64 instruction, Dis_info *info)
4219 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4220 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4221 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4223 const char *fd = FPR(fd_value, info);
4224 const char *fs = FPR(fs_value, info);
4225 const char *ft = FPR(ft_value, info);
4227 return img_format("CMP.SUNE.D %s, %s, %s", fd, fs, ft);
4234 * 3 2 1
4235 * 10987654321098765432109876543210
4236 * 001000 x1110000101
4237 * rt -----
4238 * rs -----
4239 * rd -----
4241 static char *CMP_SUNE_S(uint64 instruction, Dis_info *info)
4243 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4244 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4245 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4247 const char *fd = FPR(fd_value, info);
4248 const char *fs = FPR(fs_value, info);
4249 const char *ft = FPR(ft_value, info);
4251 return img_format("CMP.SUNE.S %s, %s, %s", fd, fs, ft);
4258 * 3 2 1
4259 * 10987654321098765432109876543210
4260 * 001000 x1110000101
4261 * rt -----
4262 * rs -----
4263 * rd -----
4265 static char *CMP_SUN_S(uint64 instruction, Dis_info *info)
4267 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4268 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4269 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4271 const char *fd = FPR(fd_value, info);
4272 const char *fs = FPR(fs_value, info);
4273 const char *ft = FPR(ft_value, info);
4275 return img_format("CMP.SUN.S %s, %s, %s", fd, fs, ft);
4282 * 3 2 1
4283 * 10987654321098765432109876543210
4284 * 001000 x1110000101
4285 * rt -----
4286 * rs -----
4287 * rd -----
4289 static char *CMP_UEQ_D(uint64 instruction, Dis_info *info)
4291 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4292 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4293 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4295 const char *fd = FPR(fd_value, info);
4296 const char *fs = FPR(fs_value, info);
4297 const char *ft = FPR(ft_value, info);
4299 return img_format("CMP.UEQ.D %s, %s, %s", fd, fs, ft);
4306 * 3 2 1
4307 * 10987654321098765432109876543210
4308 * 001000 x1110000101
4309 * rt -----
4310 * rs -----
4311 * rd -----
4313 static char *CMP_UEQ_S(uint64 instruction, Dis_info *info)
4315 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4316 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4317 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4319 const char *fd = FPR(fd_value, info);
4320 const char *fs = FPR(fs_value, info);
4321 const char *ft = FPR(ft_value, info);
4323 return img_format("CMP.UEQ.S %s, %s, %s", fd, fs, ft);
4330 * 3 2 1
4331 * 10987654321098765432109876543210
4332 * 001000 x1110000101
4333 * rt -----
4334 * rs -----
4335 * rd -----
4337 static char *CMP_ULE_D(uint64 instruction, Dis_info *info)
4339 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4340 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4341 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4343 const char *fd = FPR(fd_value, info);
4344 const char *fs = FPR(fs_value, info);
4345 const char *ft = FPR(ft_value, info);
4347 return img_format("CMP.ULE.D %s, %s, %s", fd, fs, ft);
4354 * 3 2 1
4355 * 10987654321098765432109876543210
4356 * 001000 x1110000101
4357 * rt -----
4358 * rs -----
4359 * rd -----
4361 static char *CMP_ULE_S(uint64 instruction, Dis_info *info)
4363 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4364 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4365 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4367 const char *fd = FPR(fd_value, info);
4368 const char *fs = FPR(fs_value, info);
4369 const char *ft = FPR(ft_value, info);
4371 return img_format("CMP.ULE.S %s, %s, %s", fd, fs, ft);
4378 * 3 2 1
4379 * 10987654321098765432109876543210
4380 * 001000 x1110000101
4381 * rt -----
4382 * rs -----
4383 * rd -----
4385 static char *CMP_ULT_D(uint64 instruction, Dis_info *info)
4387 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4388 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4389 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4391 const char *fd = FPR(fd_value, info);
4392 const char *fs = FPR(fs_value, info);
4393 const char *ft = FPR(ft_value, info);
4395 return img_format("CMP.ULT.D %s, %s, %s", fd, fs, ft);
4402 * 3 2 1
4403 * 10987654321098765432109876543210
4404 * 001000 x1110000101
4405 * rt -----
4406 * rs -----
4407 * rd -----
4409 static char *CMP_ULT_S(uint64 instruction, Dis_info *info)
4411 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4412 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4413 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4415 const char *fd = FPR(fd_value, info);
4416 const char *fs = FPR(fs_value, info);
4417 const char *ft = FPR(ft_value, info);
4419 return img_format("CMP.ULT.S %s, %s, %s", fd, fs, ft);
4426 * 3 2 1
4427 * 10987654321098765432109876543210
4428 * 001000 x1110000101
4429 * rt -----
4430 * rs -----
4431 * rd -----
4433 static char *CMP_UN_D(uint64 instruction, Dis_info *info)
4435 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4436 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4437 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4439 const char *fd = FPR(fd_value, info);
4440 const char *fs = FPR(fs_value, info);
4441 const char *ft = FPR(ft_value, info);
4443 return img_format("CMP.UN.D %s, %s, %s", fd, fs, ft);
4450 * 3 2 1
4451 * 10987654321098765432109876543210
4452 * 001000 x1110000101
4453 * rt -----
4454 * rs -----
4455 * rd -----
4457 static char *CMP_UNE_D(uint64 instruction, Dis_info *info)
4459 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4460 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4461 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4463 const char *fd = FPR(fd_value, info);
4464 const char *fs = FPR(fs_value, info);
4465 const char *ft = FPR(ft_value, info);
4467 return img_format("CMP.UNE.D %s, %s, %s", fd, fs, ft);
4474 * 3 2 1
4475 * 10987654321098765432109876543210
4476 * 001000 x1110000101
4477 * rt -----
4478 * rs -----
4479 * rd -----
4481 static char *CMP_UNE_S(uint64 instruction, Dis_info *info)
4483 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4484 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4485 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4487 const char *fd = FPR(fd_value, info);
4488 const char *fs = FPR(fs_value, info);
4489 const char *ft = FPR(ft_value, info);
4491 return img_format("CMP.UNE.S %s, %s, %s", fd, fs, ft);
4498 * 3 2 1
4499 * 10987654321098765432109876543210
4500 * 001000 x1110000101
4501 * rt -----
4502 * rs -----
4503 * rd -----
4505 static char *CMP_UN_S(uint64 instruction, Dis_info *info)
4507 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4508 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4509 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4511 const char *fd = FPR(fd_value, info);
4512 const char *fs = FPR(fs_value, info);
4513 const char *ft = FPR(ft_value, info);
4515 return img_format("CMP.UN.S %s, %s, %s", fd, fs, ft);
4520 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4521 * four bytes and write result to GPR and DSPControl
4523 * 3 2 1
4524 * 10987654321098765432109876543210
4525 * 001000 x0110000101
4526 * rt -----
4527 * rs -----
4528 * rd -----
4530 static char *CMPGDU_EQ_QB(uint64 instruction, Dis_info *info)
4532 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4533 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4534 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4536 const char *rd = GPR(rd_value, info);
4537 const char *rs = GPR(rs_value, info);
4538 const char *rt = GPR(rt_value, info);
4540 return img_format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt);
4545 * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of
4546 * four bytes and write result to GPR and DSPControl
4548 * 3 2 1
4549 * 10987654321098765432109876543210
4550 * 001000 x1000000101
4551 * rt -----
4552 * rs -----
4553 * rd -----
4555 static char *CMPGDU_LE_QB(uint64 instruction, Dis_info *info)
4557 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4558 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4559 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4561 const char *rd = GPR(rd_value, info);
4562 const char *rs = GPR(rs_value, info);
4563 const char *rt = GPR(rt_value, info);
4565 return img_format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt);
4570 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4571 * four bytes and write result to GPR and DSPControl
4573 * 3 2 1
4574 * 10987654321098765432109876543210
4575 * 001000 x0111000101
4576 * rt -----
4577 * rs -----
4578 * rd -----
4580 static char *CMPGDU_LT_QB(uint64 instruction, Dis_info *info)
4582 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4583 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4584 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4586 const char *rd = GPR(rd_value, info);
4587 const char *rs = GPR(rs_value, info);
4588 const char *rt = GPR(rt_value, info);
4590 return img_format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt);
4595 * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4596 * byte values and write result to a GPR
4598 * 3 2 1
4599 * 10987654321098765432109876543210
4600 * 001000 x0011000101
4601 * rt -----
4602 * rs -----
4603 * rd -----
4605 static char *CMPGU_EQ_QB(uint64 instruction, Dis_info *info)
4607 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4608 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4609 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4611 const char *rd = GPR(rd_value, info);
4612 const char *rs = GPR(rs_value, info);
4613 const char *rt = GPR(rt_value, info);
4615 return img_format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt);
4620 * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned
4621 * byte values and write result to a GPR
4623 * 3 2 1
4624 * 10987654321098765432109876543210
4625 * 001000 x0101000101
4626 * rt -----
4627 * rs -----
4628 * rd -----
4630 static char *CMPGU_LE_QB(uint64 instruction, Dis_info *info)
4632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4633 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4634 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4636 const char *rd = GPR(rd_value, info);
4637 const char *rs = GPR(rs_value, info);
4638 const char *rt = GPR(rt_value, info);
4640 return img_format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt);
4645 * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned
4646 * byte values and write result to a GPR
4648 * 3 2 1
4649 * 10987654321098765432109876543210
4650 * 001000 x0100000101
4651 * rt -----
4652 * rs -----
4653 * rd -----
4655 static char *CMPGU_LT_QB(uint64 instruction, Dis_info *info)
4657 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4658 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4659 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4661 const char *rd = GPR(rd_value, info);
4662 const char *rs = GPR(rs_value, info);
4663 const char *rt = GPR(rt_value, info);
4665 return img_format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt);
4670 * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4671 * byte values
4673 * 3 2 1
4674 * 10987654321098765432109876543210
4675 * 001000 xxxxxx1001000101
4676 * rt -----
4677 * rs -----
4679 static char *CMPU_EQ_QB(uint64 instruction, Dis_info *info)
4681 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4682 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4684 const char *rs = GPR(rs_value, info);
4685 const char *rt = GPR(rt_value, info);
4687 return img_format("CMPU.EQ.QB %s, %s", rs, rt);
4692 * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned
4693 * byte values
4695 * 3 2 1
4696 * 10987654321098765432109876543210
4697 * 001000 xxxxxx1011000101
4698 * rt -----
4699 * rs -----
4701 static char *CMPU_LE_QB(uint64 instruction, Dis_info *info)
4703 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4704 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4706 const char *rs = GPR(rs_value, info);
4707 const char *rt = GPR(rt_value, info);
4709 return img_format("CMPU.LE.QB %s, %s", rs, rt);
4714 * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned
4715 * byte values
4717 * 3 2 1
4718 * 10987654321098765432109876543210
4719 * 001000 xxxxxx1010000101
4720 * rt -----
4721 * rs -----
4723 static char *CMPU_LT_QB(uint64 instruction, Dis_info *info)
4725 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4726 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4728 const char *rs = GPR(rs_value, info);
4729 const char *rt = GPR(rt_value, info);
4731 return img_format("CMPU.LT.QB %s, %s", rs, rt);
4738 * 3 2 1
4739 * 10987654321098765432109876543210
4740 * 001000 x1110000101
4741 * rt -----
4742 * rs -----
4743 * rd -----
4745 static char *COP2_1(uint64 instruction, Dis_info *info)
4747 uint64 cofun_value = extract_cofun_25_24_23(instruction);
4750 return img_format("COP2_1 0x%" PRIx64, cofun_value);
4757 * 3 2 1
4758 * 10987654321098765432109876543210
4759 * 001000 x1110000101
4760 * rt -----
4761 * rs -----
4762 * rd -----
4764 static char *CTC1(uint64 instruction, Dis_info *info)
4766 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4767 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
4769 const char *rt = GPR(rt_value, info);
4771 return img_format("CTC1 %s, CP%" PRIu64, rt, cs_value);
4778 * 3 2 1
4779 * 10987654321098765432109876543210
4780 * 001000 x1110000101
4781 * rt -----
4782 * rs -----
4783 * rd -----
4785 static char *CTC2(uint64 instruction, Dis_info *info)
4787 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4788 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
4790 const char *rt = GPR(rt_value, info);
4792 return img_format("CTC2 %s, CP%" PRIu64, rt, cs_value);
4799 * 3 2 1
4800 * 10987654321098765432109876543210
4801 * 001000 x1110000101
4802 * rt -----
4803 * rs -----
4804 * rd -----
4806 static char *CVT_D_L(uint64 instruction, Dis_info *info)
4808 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4809 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4811 const char *ft = FPR(ft_value, info);
4812 const char *fs = FPR(fs_value, info);
4814 return img_format("CVT.D.L %s, %s", ft, fs);
4821 * 3 2 1
4822 * 10987654321098765432109876543210
4823 * 001000 x1110000101
4824 * rt -----
4825 * rs -----
4826 * rd -----
4828 static char *CVT_D_S(uint64 instruction, Dis_info *info)
4830 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4831 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4833 const char *ft = FPR(ft_value, info);
4834 const char *fs = FPR(fs_value, info);
4836 return img_format("CVT.D.S %s, %s", ft, fs);
4843 * 3 2 1
4844 * 10987654321098765432109876543210
4845 * 001000 x1110000101
4846 * rt -----
4847 * rs -----
4848 * rd -----
4850 static char *CVT_D_W(uint64 instruction, Dis_info *info)
4852 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4853 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4855 const char *ft = FPR(ft_value, info);
4856 const char *fs = FPR(fs_value, info);
4858 return img_format("CVT.D.W %s, %s", ft, fs);
4865 * 3 2 1
4866 * 10987654321098765432109876543210
4867 * 001000 x1110000101
4868 * rt -----
4869 * rs -----
4870 * rd -----
4872 static char *CVT_L_D(uint64 instruction, Dis_info *info)
4874 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4875 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4877 const char *ft = FPR(ft_value, info);
4878 const char *fs = FPR(fs_value, info);
4880 return img_format("CVT.L.D %s, %s", ft, fs);
4887 * 3 2 1
4888 * 10987654321098765432109876543210
4889 * 001000 x1110000101
4890 * rt -----
4891 * rs -----
4892 * rd -----
4894 static char *CVT_L_S(uint64 instruction, Dis_info *info)
4896 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4897 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4899 const char *ft = FPR(ft_value, info);
4900 const char *fs = FPR(fs_value, info);
4902 return img_format("CVT.L.S %s, %s", ft, fs);
4909 * 3 2 1
4910 * 10987654321098765432109876543210
4911 * 001000 x1110000101
4912 * rt -----
4913 * rs -----
4914 * rd -----
4916 static char *CVT_S_D(uint64 instruction, Dis_info *info)
4918 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4919 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4921 const char *ft = FPR(ft_value, info);
4922 const char *fs = FPR(fs_value, info);
4924 return img_format("CVT.S.D %s, %s", ft, fs);
4931 * 3 2 1
4932 * 10987654321098765432109876543210
4933 * 001000 x1110000101
4934 * rt -----
4935 * rs -----
4936 * rd -----
4938 static char *CVT_S_L(uint64 instruction, Dis_info *info)
4940 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4941 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4943 const char *ft = FPR(ft_value, info);
4944 const char *fs = FPR(fs_value, info);
4946 return img_format("CVT.S.L %s, %s", ft, fs);
4953 * 3 2 1
4954 * 10987654321098765432109876543210
4955 * 001000 x1110000101
4956 * rt -----
4957 * rs -----
4958 * rd -----
4960 static char *CVT_S_PL(uint64 instruction, Dis_info *info)
4962 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4963 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4965 const char *ft = FPR(ft_value, info);
4966 const char *fs = FPR(fs_value, info);
4968 return img_format("CVT.S.PL %s, %s", ft, fs);
4975 * 3 2 1
4976 * 10987654321098765432109876543210
4977 * 001000 x1110000101
4978 * rt -----
4979 * rs -----
4980 * rd -----
4982 static char *CVT_S_PU(uint64 instruction, Dis_info *info)
4984 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4985 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4987 const char *ft = FPR(ft_value, info);
4988 const char *fs = FPR(fs_value, info);
4990 return img_format("CVT.S.PU %s, %s", ft, fs);
4997 * 3 2 1
4998 * 10987654321098765432109876543210
4999 * 001000 x1110000101
5000 * rt -----
5001 * rs -----
5002 * rd -----
5004 static char *CVT_S_W(uint64 instruction, Dis_info *info)
5006 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5007 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5009 const char *ft = FPR(ft_value, info);
5010 const char *fs = FPR(fs_value, info);
5012 return img_format("CVT.S.W %s, %s", ft, fs);
5019 * 3 2 1
5020 * 10987654321098765432109876543210
5021 * 001000 x1110000101
5022 * rt -----
5023 * rs -----
5024 * rd -----
5026 static char *CVT_W_D(uint64 instruction, Dis_info *info)
5028 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5029 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5031 const char *ft = FPR(ft_value, info);
5032 const char *fs = FPR(fs_value, info);
5034 return img_format("CVT.W.D %s, %s", ft, fs);
5041 * 3 2 1
5042 * 10987654321098765432109876543210
5043 * 001000 x1110000101
5044 * rt -----
5045 * rs -----
5046 * rd -----
5048 static char *CVT_W_S(uint64 instruction, Dis_info *info)
5050 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5051 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5053 const char *ft = FPR(ft_value, info);
5054 const char *fs = FPR(fs_value, info);
5056 return img_format("CVT.W.S %s, %s", ft, fs);
5063 * 3 2 1
5064 * 10987654321098765432109876543210
5065 * 001000 x1110000101
5066 * rt -----
5067 * rs -----
5068 * rd -----
5070 static char *DADDIU_48_(uint64 instruction, Dis_info *info)
5072 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5073 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
5075 const char *rt = GPR(rt_value, info);
5077 return img_format("DADDIU %s, %" PRId64, rt, s_value);
5084 * 3 2 1
5085 * 10987654321098765432109876543210
5086 * 001000 x1110000101
5087 * rt -----
5088 * rs -----
5089 * rd -----
5091 static char *DADDIU_NEG_(uint64 instruction, Dis_info *info)
5093 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5094 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5095 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5097 const char *rt = GPR(rt_value, info);
5098 const char *rs = GPR(rs_value, info);
5099 int64 u = neg_copy(u_value);
5101 return img_format("DADDIU %s, %s, %" PRId64, rt, rs, u);
5108 * 3 2 1
5109 * 10987654321098765432109876543210
5110 * 001000 x1110000101
5111 * rt -----
5112 * rs -----
5113 * rd -----
5115 static char *DADDIU_U12_(uint64 instruction, Dis_info *info)
5117 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5118 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5119 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5121 const char *rt = GPR(rt_value, info);
5122 const char *rs = GPR(rs_value, info);
5124 return img_format("DADDIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
5131 * 3 2 1
5132 * 10987654321098765432109876543210
5133 * 001000 x1110000101
5134 * rt -----
5135 * rs -----
5136 * rd -----
5138 static char *DADD(uint64 instruction, Dis_info *info)
5140 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5141 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5142 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5144 const char *rd = GPR(rd_value, info);
5145 const char *rs = GPR(rs_value, info);
5146 const char *rt = GPR(rt_value, info);
5148 return img_format("DADD %s, %s, %s", rd, rs, rt);
5155 * 3 2 1
5156 * 10987654321098765432109876543210
5157 * 001000 x1110000101
5158 * rt -----
5159 * rs -----
5160 * rd -----
5162 static char *DADDU(uint64 instruction, Dis_info *info)
5164 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5165 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5166 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5168 const char *rd = GPR(rd_value, info);
5169 const char *rs = GPR(rs_value, info);
5170 const char *rt = GPR(rt_value, info);
5172 return img_format("DADDU %s, %s, %s", rd, rs, rt);
5179 * 3 2 1
5180 * 10987654321098765432109876543210
5181 * 001000 x1110000101
5182 * rt -----
5183 * rs -----
5184 * rd -----
5186 static char *DCLO(uint64 instruction, Dis_info *info)
5188 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5189 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5191 const char *rt = GPR(rt_value, info);
5192 const char *rs = GPR(rs_value, info);
5194 return img_format("DCLO %s, %s", rt, rs);
5201 * 3 2 1
5202 * 10987654321098765432109876543210
5203 * 001000 x1110000101
5204 * rt -----
5205 * rs -----
5206 * rd -----
5208 static char *DCLZ(uint64 instruction, Dis_info *info)
5210 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5211 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5213 const char *rt = GPR(rt_value, info);
5214 const char *rs = GPR(rs_value, info);
5216 return img_format("DCLZ %s, %s", rt, rs);
5223 * 3 2 1
5224 * 10987654321098765432109876543210
5225 * 001000 x1110000101
5226 * rt -----
5227 * rs -----
5228 * rd -----
5230 static char *DDIV(uint64 instruction, Dis_info *info)
5232 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5233 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5234 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5236 const char *rd = GPR(rd_value, info);
5237 const char *rs = GPR(rs_value, info);
5238 const char *rt = GPR(rt_value, info);
5240 return img_format("DDIV %s, %s, %s", rd, rs, rt);
5247 * 3 2 1
5248 * 10987654321098765432109876543210
5249 * 001000 x1110000101
5250 * rt -----
5251 * rs -----
5252 * rd -----
5254 static char *DDIVU(uint64 instruction, Dis_info *info)
5256 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5257 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5258 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5260 const char *rd = GPR(rd_value, info);
5261 const char *rs = GPR(rs_value, info);
5262 const char *rt = GPR(rt_value, info);
5264 return img_format("DDIVU %s, %s, %s", rd, rs, rt);
5271 * 3 2 1
5272 * 10987654321098765432109876543210
5273 * 001000 x1110000101
5274 * rt -----
5275 * rs -----
5276 * rd -----
5278 static char *DERET(uint64 instruction, Dis_info *info)
5280 (void)instruction;
5282 return g_strdup("DERET ");
5289 * 3 2 1
5290 * 10987654321098765432109876543210
5291 * 001000 x1110000101
5292 * rt -----
5293 * rs -----
5294 * rd -----
5296 static char *DEXTM(uint64 instruction, Dis_info *info)
5298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5300 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5301 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5303 const char *rt = GPR(rt_value, info);
5304 const char *rs = GPR(rs_value, info);
5305 uint64 msbd = encode_msbd_from_size(msbd_value);
5307 return img_format("DEXTM %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5308 rt, rs, lsb_value, msbd);
5315 * 3 2 1
5316 * 10987654321098765432109876543210
5317 * 001000 x1110000101
5318 * rt -----
5319 * rs -----
5320 * rd -----
5322 static char *DEXT(uint64 instruction, Dis_info *info)
5324 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5325 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5326 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5327 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5329 const char *rt = GPR(rt_value, info);
5330 const char *rs = GPR(rs_value, info);
5331 uint64 msbd = encode_msbd_from_size(msbd_value);
5333 return img_format("DEXT %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5334 rt, rs, lsb_value, msbd);
5341 * 3 2 1
5342 * 10987654321098765432109876543210
5343 * 001000 x1110000101
5344 * rt -----
5345 * rs -----
5346 * rd -----
5348 static char *DEXTU(uint64 instruction, Dis_info *info)
5350 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5351 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5352 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5353 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5355 const char *rt = GPR(rt_value, info);
5356 const char *rs = GPR(rs_value, info);
5357 uint64 msbd = encode_msbd_from_size(msbd_value);
5359 return img_format("DEXTU %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5360 rt, rs, lsb_value, msbd);
5367 * 3 2 1
5368 * 10987654321098765432109876543210
5369 * 001000 x1110000101
5370 * rt -----
5371 * rs -----
5372 * rd -----
5374 static char *DINSM(uint64 instruction, Dis_info *info)
5376 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5377 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5378 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5379 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5381 const char *rt = GPR(rt_value, info);
5382 const char *rs = GPR(rs_value, info);
5383 /* !!!!!!!!!! - no conversion function */
5385 return img_format("DINSM %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5386 rt, rs, lsb_value, msbd_value);
5387 /* hand edited */
5394 * 3 2 1
5395 * 10987654321098765432109876543210
5396 * 001000 x1110000101
5397 * rt -----
5398 * rs -----
5399 * rd -----
5401 static char *DINS(uint64 instruction, Dis_info *info)
5403 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5404 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5405 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5406 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5408 const char *rt = GPR(rt_value, info);
5409 const char *rs = GPR(rs_value, info);
5410 /* !!!!!!!!!! - no conversion function */
5412 return img_format("DINS %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5413 rt, rs, lsb_value, msbd_value);
5414 /* hand edited */
5421 * 3 2 1
5422 * 10987654321098765432109876543210
5423 * 001000 x1110000101
5424 * rt -----
5425 * rs -----
5426 * rd -----
5428 static char *DINSU(uint64 instruction, Dis_info *info)
5430 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5431 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5432 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5433 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5435 const char *rt = GPR(rt_value, info);
5436 const char *rs = GPR(rs_value, info);
5437 /* !!!!!!!!!! - no conversion function */
5439 return img_format("DINSU %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5440 rt, rs, lsb_value, msbd_value);
5441 /* hand edited */
5448 * 3 2 1
5449 * 10987654321098765432109876543210
5450 * 001000 x1110000101
5451 * rt -----
5452 * rs -----
5453 * rd -----
5455 static char *DI(uint64 instruction, Dis_info *info)
5457 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5459 const char *rt = GPR(rt_value, info);
5461 return img_format("DI %s", rt);
5468 * 3 2 1
5469 * 10987654321098765432109876543210
5470 * 001000 x1110000101
5471 * rt -----
5472 * rs -----
5473 * rd -----
5475 static char *DIV(uint64 instruction, Dis_info *info)
5477 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5478 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5479 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5481 const char *rd = GPR(rd_value, info);
5482 const char *rs = GPR(rs_value, info);
5483 const char *rt = GPR(rt_value, info);
5485 return img_format("DIV %s, %s, %s", rd, rs, rt);
5492 * 3 2 1
5493 * 10987654321098765432109876543210
5494 * 001000 x1110000101
5495 * rt -----
5496 * rs -----
5497 * rd -----
5499 static char *DIV_D(uint64 instruction, Dis_info *info)
5501 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5502 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5503 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5505 const char *fd = FPR(fd_value, info);
5506 const char *fs = FPR(fs_value, info);
5507 const char *ft = FPR(ft_value, info);
5509 return img_format("DIV.D %s, %s, %s", fd, fs, ft);
5516 * 3 2 1
5517 * 10987654321098765432109876543210
5518 * 001000 x1110000101
5519 * rt -----
5520 * rs -----
5521 * rd -----
5523 static char *DIV_S(uint64 instruction, Dis_info *info)
5525 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5526 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5527 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5529 const char *fd = FPR(fd_value, info);
5530 const char *fs = FPR(fs_value, info);
5531 const char *ft = FPR(ft_value, info);
5533 return img_format("DIV.S %s, %s, %s", fd, fs, ft);
5540 * 3 2 1
5541 * 10987654321098765432109876543210
5542 * 001000 x1110000101
5543 * rt -----
5544 * rs -----
5545 * rd -----
5547 static char *DIVU(uint64 instruction, Dis_info *info)
5549 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5550 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5551 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5553 const char *rd = GPR(rd_value, info);
5554 const char *rs = GPR(rs_value, info);
5555 const char *rt = GPR(rt_value, info);
5557 return img_format("DIVU %s, %s, %s", rd, rs, rt);
5564 * 3 2 1
5565 * 10987654321098765432109876543210
5566 * 001000 x1110000101
5567 * rt -----
5568 * rs -----
5569 * rd -----
5571 static char *DLSA(uint64 instruction, Dis_info *info)
5573 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5574 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5575 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5576 uint64 u2_value = extract_u2_10_9(instruction);
5578 const char *rd = GPR(rd_value, info);
5579 const char *rs = GPR(rs_value, info);
5580 const char *rt = GPR(rt_value, info);
5582 return img_format("DLSA %s, %s, %s, 0x%" PRIx64, rd, rs, rt, u2_value);
5589 * 3 2 1
5590 * 10987654321098765432109876543210
5591 * 001000 x1110000101
5592 * rt -----
5593 * rs -----
5594 * rd -----
5596 static char *DLUI_48_(uint64 instruction, Dis_info *info)
5598 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5599 uint64 u_value = extract_u_31_to_0__s32(instruction);
5601 const char *rt = GPR(rt_value, info);
5603 return img_format("DLUI %s, 0x%" PRIx64, rt, u_value);
5610 * 3 2 1
5611 * 10987654321098765432109876543210
5612 * 001000 x1110000101
5613 * rt -----
5614 * rs -----
5615 * rd -----
5617 static char *DMFC0(uint64 instruction, Dis_info *info)
5619 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5620 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5621 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5623 const char *rt = GPR(rt_value, info);
5625 return img_format("DMFC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5626 rt, c0s_value, sel_value);
5633 * 3 2 1
5634 * 10987654321098765432109876543210
5635 * 001000 x1110000101
5636 * rt -----
5637 * rs -----
5638 * rd -----
5640 static char *DMFC1(uint64 instruction, Dis_info *info)
5642 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5643 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5645 const char *rt = GPR(rt_value, info);
5646 const char *fs = FPR(fs_value, info);
5648 return img_format("DMFC1 %s, %s", rt, fs);
5655 * 3 2 1
5656 * 10987654321098765432109876543210
5657 * 001000 x1110000101
5658 * rt -----
5659 * rs -----
5660 * rd -----
5662 static char *DMFC2(uint64 instruction, Dis_info *info)
5664 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5665 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5667 const char *rt = GPR(rt_value, info);
5669 return img_format("DMFC2 %s, CP%" PRIu64, rt, cs_value);
5676 * 3 2 1
5677 * 10987654321098765432109876543210
5678 * 001000 x1110000101
5679 * rt -----
5680 * rs -----
5681 * rd -----
5683 static char *DMFGC0(uint64 instruction, Dis_info *info)
5685 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5686 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5687 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5689 const char *rt = GPR(rt_value, info);
5691 return img_format("DMFGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5692 rt, c0s_value, sel_value);
5699 * 3 2 1
5700 * 10987654321098765432109876543210
5701 * 001000 x1110000101
5702 * rt -----
5703 * rs -----
5704 * rd -----
5706 static char *DMOD(uint64 instruction, Dis_info *info)
5708 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5709 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5710 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5712 const char *rd = GPR(rd_value, info);
5713 const char *rs = GPR(rs_value, info);
5714 const char *rt = GPR(rt_value, info);
5716 return img_format("DMOD %s, %s, %s", rd, rs, rt);
5723 * 3 2 1
5724 * 10987654321098765432109876543210
5725 * 001000 x1110000101
5726 * rt -----
5727 * rs -----
5728 * rd -----
5730 static char *DMODU(uint64 instruction, Dis_info *info)
5732 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5733 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5734 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5736 const char *rd = GPR(rd_value, info);
5737 const char *rs = GPR(rs_value, info);
5738 const char *rt = GPR(rt_value, info);
5740 return img_format("DMODU %s, %s, %s", rd, rs, rt);
5747 * 3 2 1
5748 * 10987654321098765432109876543210
5749 * 001000 x1110000101
5750 * rt -----
5751 * rs -----
5752 * rd -----
5754 static char *DMTC0(uint64 instruction, Dis_info *info)
5756 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5757 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5758 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5760 const char *rt = GPR(rt_value, info);
5762 return img_format("DMTC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5763 rt, c0s_value, sel_value);
5770 * 3 2 1
5771 * 10987654321098765432109876543210
5772 * 001000 x1110000101
5773 * rt -----
5774 * rs -----
5775 * rd -----
5777 static char *DMTC1(uint64 instruction, Dis_info *info)
5779 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5780 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5782 const char *rt = GPR(rt_value, info);
5783 const char *fs = FPR(fs_value, info);
5785 return img_format("DMTC1 %s, %s", rt, fs);
5792 * 3 2 1
5793 * 10987654321098765432109876543210
5794 * 001000 x1110000101
5795 * rt -----
5796 * rs -----
5797 * rd -----
5799 static char *DMTC2(uint64 instruction, Dis_info *info)
5801 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5802 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5804 const char *rt = GPR(rt_value, info);
5806 return img_format("DMTC2 %s, CP%" PRIu64, rt, cs_value);
5813 * 3 2 1
5814 * 10987654321098765432109876543210
5815 * 001000 x1110000101
5816 * rt -----
5817 * rs -----
5818 * rd -----
5820 static char *DMTGC0(uint64 instruction, Dis_info *info)
5822 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5823 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5824 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5826 const char *rt = GPR(rt_value, info);
5828 return img_format("DMTGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5829 rt, c0s_value, sel_value);
5836 * 3 2 1
5837 * 10987654321098765432109876543210
5838 * 001000 x1110000101
5839 * rt -----
5840 * rs -----
5841 * rd -----
5843 static char *DMT(uint64 instruction, Dis_info *info)
5845 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5847 const char *rt = GPR(rt_value, info);
5849 return img_format("DMT %s", rt);
5856 * 3 2 1
5857 * 10987654321098765432109876543210
5858 * 001000 x1110000101
5859 * rt -----
5860 * rs -----
5861 * rd -----
5863 static char *DMUH(uint64 instruction, Dis_info *info)
5865 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5866 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5867 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5869 const char *rd = GPR(rd_value, info);
5870 const char *rs = GPR(rs_value, info);
5871 const char *rt = GPR(rt_value, info);
5873 return img_format("DMUH %s, %s, %s", rd, rs, rt);
5880 * 3 2 1
5881 * 10987654321098765432109876543210
5882 * 001000 x1110000101
5883 * rt -----
5884 * rs -----
5885 * rd -----
5887 static char *DMUHU(uint64 instruction, Dis_info *info)
5889 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5890 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5891 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5893 const char *rd = GPR(rd_value, info);
5894 const char *rs = GPR(rs_value, info);
5895 const char *rt = GPR(rt_value, info);
5897 return img_format("DMUHU %s, %s, %s", rd, rs, rt);
5904 * 3 2 1
5905 * 10987654321098765432109876543210
5906 * 001000 x1110000101
5907 * rt -----
5908 * rs -----
5909 * rd -----
5911 static char *DMUL(uint64 instruction, Dis_info *info)
5913 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5914 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5915 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5917 const char *rd = GPR(rd_value, info);
5918 const char *rs = GPR(rs_value, info);
5919 const char *rt = GPR(rt_value, info);
5921 return img_format("DMUL %s, %s, %s", rd, rs, rt);
5928 * 3 2 1
5929 * 10987654321098765432109876543210
5930 * 001000 x1110000101
5931 * rt -----
5932 * rs -----
5933 * rd -----
5935 static char *DMULU(uint64 instruction, Dis_info *info)
5937 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5938 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5939 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5941 const char *rd = GPR(rd_value, info);
5942 const char *rs = GPR(rs_value, info);
5943 const char *rt = GPR(rt_value, info);
5945 return img_format("DMULU %s, %s, %s", rd, rs, rt);
5950 * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on
5951 * vector integer halfword elements
5953 * 3 2 1
5954 * 10987654321098765432109876543210
5955 * 001000 00000010111111
5956 * rt -----
5957 * rs -----
5958 * ac --
5960 static char *DPA_W_PH(uint64 instruction, Dis_info *info)
5962 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5963 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5964 uint64 ac_value = extract_ac_15_14(instruction);
5966 const char *ac = AC(ac_value, info);
5967 const char *rs = GPR(rs_value, info);
5968 const char *rt = GPR(rt_value, info);
5970 return img_format("DPA.W.PH %s, %s, %s", ac, rs, rt);
5977 * 3 2 1
5978 * 10987654321098765432109876543210
5979 * 001000 x1110000101
5980 * rt -----
5981 * rs -----
5982 * rd -----
5984 static char *DPAQ_SA_L_W(uint64 instruction, Dis_info *info)
5986 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5987 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5988 uint64 ac_value = extract_ac_15_14(instruction);
5990 const char *ac = AC(ac_value, info);
5991 const char *rs = GPR(rs_value, info);
5992 const char *rt = GPR(rt_value, info);
5994 return img_format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt);
6001 * 3 2 1
6002 * 10987654321098765432109876543210
6003 * 001000 x1110000101
6004 * rt -----
6005 * rs -----
6006 * rd -----
6008 static char *DPAQ_S_W_PH(uint64 instruction, Dis_info *info)
6010 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6011 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6012 uint64 ac_value = extract_ac_15_14(instruction);
6014 const char *ac = AC(ac_value, info);
6015 const char *rs = GPR(rs_value, info);
6016 const char *rt = GPR(rt_value, info);
6018 return img_format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt);
6025 * 3 2 1
6026 * 10987654321098765432109876543210
6027 * 001000 x1110000101
6028 * rt -----
6029 * rs -----
6030 * rd -----
6032 static char *DPAQX_SA_W_PH(uint64 instruction, Dis_info *info)
6034 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6035 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6036 uint64 ac_value = extract_ac_15_14(instruction);
6038 const char *ac = AC(ac_value, info);
6039 const char *rs = GPR(rs_value, info);
6040 const char *rt = GPR(rt_value, info);
6042 return img_format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6049 * 3 2 1
6050 * 10987654321098765432109876543210
6051 * 001000 x1110000101
6052 * rt -----
6053 * rs -----
6054 * rd -----
6056 static char *DPAQX_S_W_PH(uint64 instruction, Dis_info *info)
6058 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6059 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6060 uint64 ac_value = extract_ac_15_14(instruction);
6062 const char *ac = AC(ac_value, info);
6063 const char *rs = GPR(rs_value, info);
6064 const char *rt = GPR(rt_value, info);
6066 return img_format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt);
6073 * 3 2 1
6074 * 10987654321098765432109876543210
6075 * 001000 x1110000101
6076 * rt -----
6077 * rs -----
6078 * rd -----
6080 static char *DPAU_H_QBL(uint64 instruction, Dis_info *info)
6082 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6083 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6084 uint64 ac_value = extract_ac_15_14(instruction);
6086 const char *ac = AC(ac_value, info);
6087 const char *rs = GPR(rs_value, info);
6088 const char *rt = GPR(rt_value, info);
6090 return img_format("DPAU.H.QBL %s, %s, %s", ac, rs, rt);
6097 * 3 2 1
6098 * 10987654321098765432109876543210
6099 * 001000 x1110000101
6100 * rt -----
6101 * rs -----
6102 * rd -----
6104 static char *DPAU_H_QBR(uint64 instruction, Dis_info *info)
6106 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6107 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6108 uint64 ac_value = extract_ac_15_14(instruction);
6110 const char *ac = AC(ac_value, info);
6111 const char *rs = GPR(rs_value, info);
6112 const char *rt = GPR(rt_value, info);
6114 return img_format("DPAU.H.QBR %s, %s, %s", ac, rs, rt);
6121 * 3 2 1
6122 * 10987654321098765432109876543210
6123 * 001000 x1110000101
6124 * rt -----
6125 * rs -----
6126 * rd -----
6128 static char *DPAX_W_PH(uint64 instruction, Dis_info *info)
6130 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6131 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6132 uint64 ac_value = extract_ac_15_14(instruction);
6134 const char *ac = AC(ac_value, info);
6135 const char *rs = GPR(rs_value, info);
6136 const char *rt = GPR(rt_value, info);
6138 return img_format("DPAX.W.PH %s, %s, %s", ac, rs, rt);
6145 * 3 2 1
6146 * 10987654321098765432109876543210
6147 * 001000 x1110000101
6148 * rt -----
6149 * rs -----
6150 * rd -----
6152 static char *DPS_W_PH(uint64 instruction, Dis_info *info)
6154 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6155 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6156 uint64 ac_value = extract_ac_15_14(instruction);
6158 const char *ac = AC(ac_value, info);
6159 const char *rs = GPR(rs_value, info);
6160 const char *rt = GPR(rt_value, info);
6162 return img_format("DPS.W.PH %s, %s, %s", ac, rs, rt);
6169 * 3 2 1
6170 * 10987654321098765432109876543210
6171 * 001000 x1110000101
6172 * rt -----
6173 * rs -----
6174 * rd -----
6176 static char *DPSQ_SA_L_W(uint64 instruction, Dis_info *info)
6178 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6179 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6180 uint64 ac_value = extract_ac_15_14(instruction);
6182 const char *ac = AC(ac_value, info);
6183 const char *rs = GPR(rs_value, info);
6184 const char *rt = GPR(rt_value, info);
6186 return img_format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt);
6193 * 3 2 1
6194 * 10987654321098765432109876543210
6195 * 001000 x1110000101
6196 * rt -----
6197 * rs -----
6198 * rd -----
6200 static char *DPSQ_S_W_PH(uint64 instruction, Dis_info *info)
6202 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6203 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6204 uint64 ac_value = extract_ac_15_14(instruction);
6206 const char *ac = AC(ac_value, info);
6207 const char *rs = GPR(rs_value, info);
6208 const char *rt = GPR(rt_value, info);
6210 return img_format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt);
6217 * 3 2 1
6218 * 10987654321098765432109876543210
6219 * 001000 x1110000101
6220 * rt -----
6221 * rs -----
6222 * rd -----
6224 static char *DPSQX_SA_W_PH(uint64 instruction, Dis_info *info)
6226 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6227 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6228 uint64 ac_value = extract_ac_15_14(instruction);
6230 const char *ac = AC(ac_value, info);
6231 const char *rs = GPR(rs_value, info);
6232 const char *rt = GPR(rt_value, info);
6234 return img_format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6241 * 3 2 1
6242 * 10987654321098765432109876543210
6243 * 001000 x1110000101
6244 * rt -----
6245 * rs -----
6246 * rd -----
6248 static char *DPSQX_S_W_PH(uint64 instruction, Dis_info *info)
6250 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6251 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6252 uint64 ac_value = extract_ac_15_14(instruction);
6254 const char *ac = AC(ac_value, info);
6255 const char *rs = GPR(rs_value, info);
6256 const char *rt = GPR(rt_value, info);
6258 return img_format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt);
6265 * 3 2 1
6266 * 10987654321098765432109876543210
6267 * 001000 x1110000101
6268 * rt -----
6269 * rs -----
6270 * rd -----
6272 static char *DPSU_H_QBL(uint64 instruction, Dis_info *info)
6274 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6275 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6276 uint64 ac_value = extract_ac_15_14(instruction);
6278 const char *ac = AC(ac_value, info);
6279 const char *rs = GPR(rs_value, info);
6280 const char *rt = GPR(rt_value, info);
6282 return img_format("DPSU.H.QBL %s, %s, %s", ac, rs, rt);
6289 * 3 2 1
6290 * 10987654321098765432109876543210
6291 * 001000 x1110000101
6292 * rt -----
6293 * rs -----
6294 * rd -----
6296 static char *DPSU_H_QBR(uint64 instruction, Dis_info *info)
6298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6300 uint64 ac_value = extract_ac_15_14(instruction);
6302 const char *ac = AC(ac_value, info);
6303 const char *rs = GPR(rs_value, info);
6304 const char *rt = GPR(rt_value, info);
6306 return img_format("DPSU.H.QBR %s, %s, %s", ac, rs, rt);
6313 * 3 2 1
6314 * 10987654321098765432109876543210
6315 * 001000 x1110000101
6316 * rt -----
6317 * rs -----
6318 * rd -----
6320 static char *DPSX_W_PH(uint64 instruction, Dis_info *info)
6322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6323 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6324 uint64 ac_value = extract_ac_15_14(instruction);
6326 const char *ac = AC(ac_value, info);
6327 const char *rs = GPR(rs_value, info);
6328 const char *rt = GPR(rt_value, info);
6330 return img_format("DPSX.W.PH %s, %s, %s", ac, rs, rt);
6335 * DROTR -
6337 * 3 2 1
6338 * 10987654321098765432109876543210
6339 * 001000 x1110000101
6340 * rt -----
6341 * rs -----
6342 * rd -----
6344 static char *DROTR(uint64 instruction, Dis_info *info)
6346 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6347 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6348 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6350 const char *rt = GPR(rt_value, info);
6351 const char *rs = GPR(rs_value, info);
6353 return img_format("DROTR %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6358 * DROTR[32] -
6360 * 3 2 1
6361 * 10987654321098765432109876543210
6362 * 10o000 1100xxx0110
6363 * rt -----
6364 * rs -----
6365 * shift -----
6367 static char *DROTR32(uint64 instruction, Dis_info *info)
6369 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6370 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6371 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6373 const char *rt = GPR(rt_value, info);
6374 const char *rs = GPR(rs_value, info);
6376 return img_format("DROTR32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6383 * 3 2 1
6384 * 10987654321098765432109876543210
6385 * 001000 x1110000101
6386 * rt -----
6387 * rs -----
6388 * rd -----
6390 static char *DROTRV(uint64 instruction, Dis_info *info)
6392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6394 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6396 const char *rd = GPR(rd_value, info);
6397 const char *rs = GPR(rs_value, info);
6398 const char *rt = GPR(rt_value, info);
6400 return img_format("DROTRV %s, %s, %s", rd, rs, rt);
6407 * 3 2 1
6408 * 10987654321098765432109876543210
6409 * 001000 x1110000101
6410 * rt -----
6411 * rs -----
6412 * rd -----
6414 static char *DROTX(uint64 instruction, Dis_info *info)
6416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6417 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6418 uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction);
6419 uint64 shift_value = extract_shift_5_4_3_2_1_0(instruction);
6421 const char *rt = GPR(rt_value, info);
6422 const char *rs = GPR(rs_value, info);
6424 return img_format("DROTX %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
6425 rt, rs, shift_value, shiftx_value);
6430 * DSLL -
6432 * 3 2 1
6433 * 10987654321098765432109876543210
6434 * 10o000 1100xxx0000
6435 * rt -----
6436 * rs -----
6437 * shift -----
6439 static char *DSLL(uint64 instruction, Dis_info *info)
6441 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6442 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6443 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6445 const char *rt = GPR(rt_value, info);
6446 const char *rs = GPR(rs_value, info);
6448 return img_format("DSLL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6453 * DSLL[32] -
6455 * 3 2 1
6456 * 10987654321098765432109876543210
6457 * 10o000 1100xxx0000
6458 * rt -----
6459 * rs -----
6460 * shift -----
6462 static char *DSLL32(uint64 instruction, Dis_info *info)
6464 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6465 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6466 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6468 const char *rt = GPR(rt_value, info);
6469 const char *rs = GPR(rs_value, info);
6471 return img_format("DSLL32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6478 * 3 2 1
6479 * 10987654321098765432109876543210
6480 * 001000 x1110000101
6481 * rt -----
6482 * rs -----
6483 * rd -----
6485 static char *DSLLV(uint64 instruction, Dis_info *info)
6487 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6488 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6489 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6491 const char *rd = GPR(rd_value, info);
6492 const char *rs = GPR(rs_value, info);
6493 const char *rt = GPR(rt_value, info);
6495 return img_format("DSLLV %s, %s, %s", rd, rs, rt);
6500 * DSRA -
6502 * 3 2 1
6503 * 10987654321098765432109876543210
6504 * 10o000 1100xxx0100
6505 * rt -----
6506 * rs -----
6507 * shift -----
6509 static char *DSRA(uint64 instruction, Dis_info *info)
6511 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6512 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6513 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6515 const char *rt = GPR(rt_value, info);
6516 const char *rs = GPR(rs_value, info);
6518 return img_format("DSRA %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6523 * DSRA[32] -
6525 * 3 2 1
6526 * 10987654321098765432109876543210
6527 * 10o000 1100xxx0100
6528 * rt -----
6529 * rs -----
6530 * shift -----
6532 static char *DSRA32(uint64 instruction, Dis_info *info)
6534 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6535 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6536 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6538 const char *rt = GPR(rt_value, info);
6539 const char *rs = GPR(rs_value, info);
6541 return img_format("DSRA32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6548 * 3 2 1
6549 * 10987654321098765432109876543210
6550 * 001000 x1110000101
6551 * rt -----
6552 * rs -----
6553 * rd -----
6555 static char *DSRAV(uint64 instruction, Dis_info *info)
6557 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6558 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6559 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6561 const char *rd = GPR(rd_value, info);
6562 const char *rs = GPR(rs_value, info);
6563 const char *rt = GPR(rt_value, info);
6565 return img_format("DSRAV %s, %s, %s", rd, rs, rt);
6570 * DSRL -
6572 * 3 2 1
6573 * 10987654321098765432109876543210
6574 * 10o000 1100xxx0100
6575 * rt -----
6576 * rs -----
6577 * shift -----
6579 static char *DSRL(uint64 instruction, Dis_info *info)
6581 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6582 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6583 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6585 const char *rt = GPR(rt_value, info);
6586 const char *rs = GPR(rs_value, info);
6588 return img_format("DSRL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6593 * DSRL[32] -
6595 * 3 2 1
6596 * 10987654321098765432109876543210
6597 * 10o000 1100xxx0010
6598 * rt -----
6599 * rs -----
6600 * shift -----
6602 static char *DSRL32(uint64 instruction, Dis_info *info)
6604 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6605 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6606 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6608 const char *rt = GPR(rt_value, info);
6609 const char *rs = GPR(rs_value, info);
6611 return img_format("DSRL32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6618 * 3 2 1
6619 * 10987654321098765432109876543210
6620 * 001000 x1110000101
6621 * rt -----
6622 * rs -----
6623 * rd -----
6625 static char *DSRLV(uint64 instruction, Dis_info *info)
6627 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6628 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6629 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6631 const char *rd = GPR(rd_value, info);
6632 const char *rs = GPR(rs_value, info);
6633 const char *rt = GPR(rt_value, info);
6635 return img_format("DSRLV %s, %s, %s", rd, rs, rt);
6642 * 3 2 1
6643 * 10987654321098765432109876543210
6644 * 001000 x1110000101
6645 * rt -----
6646 * rs -----
6647 * rd -----
6649 static char *DSUB(uint64 instruction, Dis_info *info)
6651 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6652 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6653 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6655 const char *rd = GPR(rd_value, info);
6656 const char *rs = GPR(rs_value, info);
6657 const char *rt = GPR(rt_value, info);
6659 return img_format("DSUB %s, %s, %s", rd, rs, rt);
6666 * 3 2 1
6667 * 10987654321098765432109876543210
6668 * 001000 x1110000101
6669 * rt -----
6670 * rs -----
6671 * rd -----
6673 static char *DSUBU(uint64 instruction, Dis_info *info)
6675 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6676 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6677 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6679 const char *rd = GPR(rd_value, info);
6680 const char *rs = GPR(rs_value, info);
6681 const char *rt = GPR(rt_value, info);
6683 return img_format("DSUBU %s, %s, %s", rd, rs, rt);
6690 * 3 2 1
6691 * 10987654321098765432109876543210
6692 * 001000 x1110000101
6693 * rt -----
6694 * rs -----
6695 * rd -----
6697 static char *DVPE(uint64 instruction, Dis_info *info)
6699 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6701 const char *rt = GPR(rt_value, info);
6703 return img_format("DVPE %s", rt);
6710 * 3 2 1
6711 * 10987654321098765432109876543210
6712 * 001000 x1110000101
6713 * rt -----
6714 * rs -----
6715 * rd -----
6717 static char *DVP(uint64 instruction, Dis_info *info)
6719 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6721 const char *rt = GPR(rt_value, info);
6723 return img_format("DVP %s", rt);
6730 * 3 2 1
6731 * 10987654321098765432109876543210
6732 * 001000 x1110000101
6733 * rt -----
6734 * rs -----
6735 * rd -----
6737 static char *EHB(uint64 instruction, Dis_info *info)
6739 (void)instruction;
6741 return g_strdup("EHB ");
6748 * 3 2 1
6749 * 10987654321098765432109876543210
6750 * 001000 x1110000101
6751 * rt -----
6752 * rs -----
6753 * rd -----
6755 static char *EI(uint64 instruction, Dis_info *info)
6757 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6759 const char *rt = GPR(rt_value, info);
6761 return img_format("EI %s", rt);
6768 * 3 2 1
6769 * 10987654321098765432109876543210
6770 * 001000 x1110000101
6771 * rt -----
6772 * rs -----
6773 * rd -----
6775 static char *EMT(uint64 instruction, Dis_info *info)
6777 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6779 const char *rt = GPR(rt_value, info);
6781 return img_format("EMT %s", rt);
6788 * 3 2 1
6789 * 10987654321098765432109876543210
6790 * 001000 x1110000101
6791 * rt -----
6792 * rs -----
6793 * rd -----
6795 static char *ERET(uint64 instruction, Dis_info *info)
6797 (void)instruction;
6799 return g_strdup("ERET ");
6806 * 3 2 1
6807 * 10987654321098765432109876543210
6808 * 001000 x1110000101
6809 * rt -----
6810 * rs -----
6811 * rd -----
6813 static char *ERETNC(uint64 instruction, Dis_info *info)
6815 (void)instruction;
6817 return g_strdup("ERETNC ");
6824 * 3 2 1
6825 * 10987654321098765432109876543210
6826 * 001000 x1110000101
6827 * rt -----
6828 * rs -----
6829 * rd -----
6831 static char *EVP(uint64 instruction, Dis_info *info)
6833 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6835 const char *rt = GPR(rt_value, info);
6837 return img_format("EVP %s", rt);
6844 * 3 2 1
6845 * 10987654321098765432109876543210
6846 * 001000 x1110000101
6847 * rt -----
6848 * rs -----
6849 * rd -----
6851 static char *EVPE(uint64 instruction, Dis_info *info)
6853 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6855 const char *rt = GPR(rt_value, info);
6857 return img_format("EVPE %s", rt);
6864 * 3 2 1
6865 * 10987654321098765432109876543210
6866 * 001000 x1110000101
6867 * rt -----
6868 * rs -----
6869 * rd -----
6871 static char *EXT(uint64 instruction, Dis_info *info)
6873 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6874 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6875 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
6876 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
6878 const char *rt = GPR(rt_value, info);
6879 const char *rs = GPR(rs_value, info);
6880 uint64 msbd = encode_msbd_from_size(msbd_value);
6882 return img_format("EXT %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
6883 rt, rs, lsb_value, msbd);
6890 * 3 2 1
6891 * 10987654321098765432109876543210
6892 * 001000 x1110000101
6893 * rt -----
6894 * rs -----
6895 * rd -----
6897 static char *EXTD(uint64 instruction, Dis_info *info)
6899 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6900 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6901 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6902 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
6904 const char *rd = GPR(rd_value, info);
6905 const char *rs = GPR(rs_value, info);
6906 const char *rt = GPR(rt_value, info);
6908 return img_format("EXTD %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
6915 * 3 2 1
6916 * 10987654321098765432109876543210
6917 * 001000 x1110000101
6918 * rt -----
6919 * rs -----
6920 * rd -----
6922 static char *EXTD32(uint64 instruction, Dis_info *info)
6924 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6925 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6926 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6927 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
6929 const char *rd = GPR(rd_value, info);
6930 const char *rs = GPR(rs_value, info);
6931 const char *rt = GPR(rt_value, info);
6933 return img_format("EXTD32 %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
6940 * 3 2 1
6941 * 10987654321098765432109876543210
6942 * 001000 x1110000101
6943 * rt -----
6944 * rs -----
6945 * rd -----
6947 static char *EXTPDP(uint64 instruction, Dis_info *info)
6949 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6950 uint64 size_value = extract_size_20_19_18_17_16(instruction);
6951 uint64 ac_value = extract_ac_15_14(instruction);
6953 const char *rt = GPR(rt_value, info);
6954 const char *ac = AC(ac_value, info);
6956 return img_format("EXTPDP %s, %s, 0x%" PRIx64, rt, ac, size_value);
6963 * 3 2 1
6964 * 10987654321098765432109876543210
6965 * 001000 x1110000101
6966 * rt -----
6967 * rs -----
6968 * rd -----
6970 static char *EXTPDPV(uint64 instruction, Dis_info *info)
6972 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6973 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6974 uint64 ac_value = extract_ac_15_14(instruction);
6976 const char *rt = GPR(rt_value, info);
6977 const char *ac = AC(ac_value, info);
6978 const char *rs = GPR(rs_value, info);
6980 return img_format("EXTPDPV %s, %s, %s", rt, ac, rs);
6987 * 3 2 1
6988 * 10987654321098765432109876543210
6989 * 001000 x1110000101
6990 * rt -----
6991 * rs -----
6992 * rd -----
6994 static char *EXTP(uint64 instruction, Dis_info *info)
6996 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6997 uint64 size_value = extract_size_20_19_18_17_16(instruction);
6998 uint64 ac_value = extract_ac_15_14(instruction);
7000 const char *rt = GPR(rt_value, info);
7001 const char *ac = AC(ac_value, info);
7003 return img_format("EXTP %s, %s, 0x%" PRIx64, rt, ac, size_value);
7010 * 3 2 1
7011 * 10987654321098765432109876543210
7012 * 001000 x1110000101
7013 * rt -----
7014 * rs -----
7015 * rd -----
7017 static char *EXTPV(uint64 instruction, Dis_info *info)
7019 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7020 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7021 uint64 ac_value = extract_ac_15_14(instruction);
7023 const char *rt = GPR(rt_value, info);
7024 const char *ac = AC(ac_value, info);
7025 const char *rs = GPR(rs_value, info);
7027 return img_format("EXTPV %s, %s, %s", rt, ac, rs);
7032 * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR
7033 * with right shift
7035 * 3 2 1
7036 * 10987654321098765432109876543210
7037 * 001000 10111001111111
7038 * rt -----
7039 * shift -----
7040 * ac --
7042 static char *EXTR_RS_W(uint64 instruction, Dis_info *info)
7044 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7045 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7046 uint64 ac_value = extract_ac_15_14(instruction);
7048 const char *rt = GPR(rt_value, info);
7049 const char *ac = AC(ac_value, info);
7051 return img_format("EXTR_RS.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7056 * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR
7057 * with right shift
7059 * 3 2 1
7060 * 10987654321098765432109876543210
7061 * 001000 01111001111111
7062 * rt -----
7063 * shift -----
7064 * ac --
7066 static char *EXTR_R_W(uint64 instruction, Dis_info *info)
7068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7069 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7070 uint64 ac_value = extract_ac_15_14(instruction);
7072 const char *rt = GPR(rt_value, info);
7073 const char *ac = AC(ac_value, info);
7075 return img_format("EXTR_R.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7080 * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator
7081 * to GPR with right shift and saturate
7083 * 3 2 1
7084 * 10987654321098765432109876543210
7085 * 001000 11111001111111
7086 * rt -----
7087 * shift -----
7088 * ac --
7090 static char *EXTR_S_H(uint64 instruction, Dis_info *info)
7092 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7093 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7094 uint64 ac_value = extract_ac_15_14(instruction);
7096 const char *rt = GPR(rt_value, info);
7097 const char *ac = AC(ac_value, info);
7099 return img_format("EXTR_S.H %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7104 * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR
7105 * with right shift
7107 * 3 2 1
7108 * 10987654321098765432109876543210
7109 * 001000 00111001111111
7110 * rt -----
7111 * shift -----
7112 * ac --
7114 static char *EXTR_W(uint64 instruction, Dis_info *info)
7116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7117 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7118 uint64 ac_value = extract_ac_15_14(instruction);
7120 const char *rt = GPR(rt_value, info);
7121 const char *ac = AC(ac_value, info);
7123 return img_format("EXTR.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7128 * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable
7129 * right shift from accumulator to GPR
7131 * 3 2 1
7132 * 10987654321098765432109876543210
7133 * 001000 10111010111111
7134 * rt -----
7135 * rs -----
7136 * ac --
7138 static char *EXTRV_RS_W(uint64 instruction, Dis_info *info)
7140 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7141 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7142 uint64 ac_value = extract_ac_15_14(instruction);
7144 const char *rt = GPR(rt_value, info);
7145 const char *ac = AC(ac_value, info);
7146 const char *rs = GPR(rs_value, info);
7148 return img_format("EXTRV_RS.W %s, %s, %s", rt, ac, rs);
7153 * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable
7154 * right shift from accumulator to GPR
7156 * 3 2 1
7157 * 10987654321098765432109876543210
7158 * 001000 01111010111111
7159 * rt -----
7160 * rs -----
7161 * ac --
7163 static char *EXTRV_R_W(uint64 instruction, Dis_info *info)
7165 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7166 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7167 uint64 ac_value = extract_ac_15_14(instruction);
7169 const char *rt = GPR(rt_value, info);
7170 const char *ac = AC(ac_value, info);
7171 const char *rs = GPR(rs_value, info);
7173 return img_format("EXTRV_R.W %s, %s, %s", rt, ac, rs);
7178 * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from
7179 * accumulator to GPR with right shift and saturate
7181 * 3 2 1
7182 * 10987654321098765432109876543210
7183 * 001000 11111010111111
7184 * rt -----
7185 * rs -----
7186 * ac --
7188 static char *EXTRV_S_H(uint64 instruction, Dis_info *info)
7190 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7191 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7192 uint64 ac_value = extract_ac_15_14(instruction);
7194 const char *rt = GPR(rt_value, info);
7195 const char *ac = AC(ac_value, info);
7196 const char *rs = GPR(rs_value, info);
7198 return img_format("EXTRV_S.H %s, %s, %s", rt, ac, rs);
7203 * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable
7204 * right shift from accumulator to GPR
7206 * 3 2 1
7207 * 10987654321098765432109876543210
7208 * 001000 00111010111111
7209 * rt -----
7210 * rs -----
7211 * ac --
7213 static char *EXTRV_W(uint64 instruction, Dis_info *info)
7215 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7216 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7217 uint64 ac_value = extract_ac_15_14(instruction);
7219 const char *rt = GPR(rt_value, info);
7220 const char *ac = AC(ac_value, info);
7221 const char *rs = GPR(rs_value, info);
7223 return img_format("EXTRV.W %s, %s, %s", rt, ac, rs);
7228 * EXTW - Extract Word
7230 * 3 2 1
7231 * 10987654321098765432109876543210
7232 * 001000 011111
7233 * rt -----
7234 * rs -----
7235 * rd -----
7236 * shift -----
7238 static char *EXTW(uint64 instruction, Dis_info *info)
7240 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7241 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7242 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7243 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7245 const char *rd = GPR(rd_value, info);
7246 const char *rs = GPR(rs_value, info);
7247 const char *rt = GPR(rt_value, info);
7249 return img_format("EXTW %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
7256 * 3 2 1
7257 * 10987654321098765432109876543210
7258 * 001000 x1110000101
7259 * rt -----
7260 * rs -----
7261 * rd -----
7263 static char *FLOOR_L_D(uint64 instruction, Dis_info *info)
7265 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7266 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7268 const char *ft = FPR(ft_value, info);
7269 const char *fs = FPR(fs_value, info);
7271 return img_format("FLOOR.L.D %s, %s", ft, fs);
7278 * 3 2 1
7279 * 10987654321098765432109876543210
7280 * 001000 x1110000101
7281 * rt -----
7282 * rs -----
7283 * rd -----
7285 static char *FLOOR_L_S(uint64 instruction, Dis_info *info)
7287 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7288 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7290 const char *ft = FPR(ft_value, info);
7291 const char *fs = FPR(fs_value, info);
7293 return img_format("FLOOR.L.S %s, %s", ft, fs);
7300 * 3 2 1
7301 * 10987654321098765432109876543210
7302 * 001000 x1110000101
7303 * rt -----
7304 * rs -----
7305 * rd -----
7307 static char *FLOOR_W_D(uint64 instruction, Dis_info *info)
7309 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7310 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7312 const char *ft = FPR(ft_value, info);
7313 const char *fs = FPR(fs_value, info);
7315 return img_format("FLOOR.W.D %s, %s", ft, fs);
7322 * 3 2 1
7323 * 10987654321098765432109876543210
7324 * 001000 x1110000101
7325 * rt -----
7326 * rs -----
7327 * rd -----
7329 static char *FLOOR_W_S(uint64 instruction, Dis_info *info)
7331 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7332 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7334 const char *ft = FPR(ft_value, info);
7335 const char *fs = FPR(fs_value, info);
7337 return img_format("FLOOR.W.S %s, %s", ft, fs);
7344 * 3 2 1
7345 * 10987654321098765432109876543210
7346 * 001000 x1110000101
7347 * rt -----
7348 * rs -----
7349 * rd -----
7351 static char *FORK(uint64 instruction, Dis_info *info)
7353 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7354 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7355 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7357 const char *rd = GPR(rd_value, info);
7358 const char *rs = GPR(rs_value, info);
7359 const char *rt = GPR(rt_value, info);
7361 return img_format("FORK %s, %s, %s", rd, rs, rt);
7368 * 3 2 1
7369 * 10987654321098765432109876543210
7370 * 001000 x1110000101
7371 * rt -----
7372 * rs -----
7373 * rd -----
7375 static char *HYPCALL(uint64 instruction, Dis_info *info)
7377 uint64 code_value = extract_code_17_to_0(instruction);
7380 return img_format("HYPCALL 0x%" PRIx64, code_value);
7387 * 3 2 1
7388 * 10987654321098765432109876543210
7389 * 001000 x1110000101
7390 * rt -----
7391 * rs -----
7392 * rd -----
7394 static char *HYPCALL_16_(uint64 instruction, Dis_info *info)
7396 uint64 code_value = extract_code_1_0(instruction);
7399 return img_format("HYPCALL 0x%" PRIx64, code_value);
7406 * 3 2 1
7407 * 10987654321098765432109876543210
7408 * 001000 x1110000101
7409 * rt -----
7410 * rs -----
7411 * rd -----
7413 static char *INS(uint64 instruction, Dis_info *info)
7415 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7416 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7417 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7418 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7420 const char *rt = GPR(rt_value, info);
7421 const char *rs = GPR(rs_value, info);
7422 /* !!!!!!!!!! - no conversion function */
7424 return img_format("INS %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
7425 rt, rs, lsb_value, msbd_value);
7426 /* hand edited */
7431 * [DSP] INSV rt, rs - Insert bit field variable
7433 * 3 2 1
7434 * 10987654321098765432109876543210
7435 * 001000 0100000100111111
7436 * rt -----
7437 * rs -----
7439 static char *INSV(uint64 instruction, Dis_info *info)
7441 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7442 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7444 const char *rt = GPR(rt_value, info);
7445 const char *rs = GPR(rs_value, info);
7447 return img_format("INSV %s, %s", rt, rs);
7454 * 3 2 1
7455 * 10987654321098765432109876543210
7456 * 001000 x1110000101
7457 * rt -----
7458 * rs -----
7459 * rd -----
7461 static char *IRET(uint64 instruction, Dis_info *info)
7463 (void)instruction;
7465 return g_strdup("IRET ");
7472 * 3 2 1
7473 * 10987654321098765432109876543210
7474 * 001000 x1110000101
7475 * rt -----
7476 * rs -----
7477 * rd -----
7479 static char *JALRC_16_(uint64 instruction, Dis_info *info)
7481 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7483 const char *rt = GPR(rt_value, info);
7485 return img_format("JALRC $%d, %s", 31, rt);
7492 * 3 2 1
7493 * 10987654321098765432109876543210
7494 * 001000 x1110000101
7495 * rt -----
7496 * rs -----
7497 * rd -----
7499 static char *JALRC_32_(uint64 instruction, Dis_info *info)
7501 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7502 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7504 const char *rt = GPR(rt_value, info);
7505 const char *rs = GPR(rs_value, info);
7507 return img_format("JALRC %s, %s", rt, rs);
7514 * 3 2 1
7515 * 10987654321098765432109876543210
7516 * 001000 x1110000101
7517 * rt -----
7518 * rs -----
7519 * rd -----
7521 static char *JALRC_HB(uint64 instruction, Dis_info *info)
7523 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7524 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7526 const char *rt = GPR(rt_value, info);
7527 const char *rs = GPR(rs_value, info);
7529 return img_format("JALRC.HB %s, %s", rt, rs);
7536 * 3 2 1
7537 * 10987654321098765432109876543210
7538 * 001000 x1110000101
7539 * rt -----
7540 * rs -----
7541 * rd -----
7543 static char *JRC(uint64 instruction, Dis_info *info)
7545 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7547 const char *rt = GPR(rt_value, info);
7549 return img_format("JRC %s", rt);
7556 * 3 2 1
7557 * 10987654321098765432109876543210
7558 * 001000 x1110000101
7559 * rt -----
7560 * rs -----
7561 * rd -----
7563 static char *LB_16_(uint64 instruction, Dis_info *info)
7565 uint64 rt3_value = extract_rt3_9_8_7(instruction);
7566 uint64 rs3_value = extract_rs3_6_5_4(instruction);
7567 uint64 u_value = extract_u_1_0(instruction);
7569 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
7570 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
7572 return img_format("LB %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
7579 * 3 2 1
7580 * 10987654321098765432109876543210
7581 * 001000 x1110000101
7582 * rt -----
7583 * rs -----
7584 * rd -----
7586 static char *LB_GP_(uint64 instruction, Dis_info *info)
7588 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7589 uint64 u_value = extract_u_17_to_0(instruction);
7591 const char *rt = GPR(rt_value, info);
7593 return img_format("LB %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7600 * 3 2 1
7601 * 10987654321098765432109876543210
7602 * 001000 x1110000101
7603 * rt -----
7604 * rs -----
7605 * rd -----
7607 static char *LB_S9_(uint64 instruction, Dis_info *info)
7609 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7610 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7611 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7613 const char *rt = GPR(rt_value, info);
7614 const char *rs = GPR(rs_value, info);
7616 return img_format("LB %s, %" PRId64 "(%s)", rt, s_value, rs);
7623 * 3 2 1
7624 * 10987654321098765432109876543210
7625 * 001000 x1110000101
7626 * rt -----
7627 * rs -----
7628 * rd -----
7630 static char *LB_U12_(uint64 instruction, Dis_info *info)
7632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7633 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7634 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7636 const char *rt = GPR(rt_value, info);
7637 const char *rs = GPR(rs_value, info);
7639 return img_format("LB %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7646 * 3 2 1
7647 * 10987654321098765432109876543210
7648 * 001000 x1110000101
7649 * rt -----
7650 * rs -----
7651 * rd -----
7653 static char *LBE(uint64 instruction, Dis_info *info)
7655 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7656 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7657 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7659 const char *rt = GPR(rt_value, info);
7660 const char *rs = GPR(rs_value, info);
7662 return img_format("LBE %s, %" PRId64 "(%s)", rt, s_value, rs);
7669 * 3 2 1
7670 * 10987654321098765432109876543210
7671 * 001000 x1110000101
7672 * rt -----
7673 * rs -----
7674 * rd -----
7676 static char *LBU_16_(uint64 instruction, Dis_info *info)
7678 uint64 rt3_value = extract_rt3_9_8_7(instruction);
7679 uint64 rs3_value = extract_rs3_6_5_4(instruction);
7680 uint64 u_value = extract_u_1_0(instruction);
7682 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
7683 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
7685 return img_format("LBU %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
7692 * 3 2 1
7693 * 10987654321098765432109876543210
7694 * 001000 x1110000101
7695 * rt -----
7696 * rs -----
7697 * rd -----
7699 static char *LBU_GP_(uint64 instruction, Dis_info *info)
7701 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7702 uint64 u_value = extract_u_17_to_0(instruction);
7704 const char *rt = GPR(rt_value, info);
7706 return img_format("LBU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7713 * 3 2 1
7714 * 10987654321098765432109876543210
7715 * 001000 x1110000101
7716 * rt -----
7717 * rs -----
7718 * rd -----
7720 static char *LBU_S9_(uint64 instruction, Dis_info *info)
7722 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7723 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7724 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7726 const char *rt = GPR(rt_value, info);
7727 const char *rs = GPR(rs_value, info);
7729 return img_format("LBU %s, %" PRId64 "(%s)", rt, s_value, rs);
7736 * 3 2 1
7737 * 10987654321098765432109876543210
7738 * 001000 x1110000101
7739 * rt -----
7740 * rs -----
7741 * rd -----
7743 static char *LBU_U12_(uint64 instruction, Dis_info *info)
7745 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7746 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7747 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7749 const char *rt = GPR(rt_value, info);
7750 const char *rs = GPR(rs_value, info);
7752 return img_format("LBU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7759 * 3 2 1
7760 * 10987654321098765432109876543210
7761 * 001000 x1110000101
7762 * rt -----
7763 * rs -----
7764 * rd -----
7766 static char *LBUE(uint64 instruction, Dis_info *info)
7768 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7769 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7770 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7772 const char *rt = GPR(rt_value, info);
7773 const char *rs = GPR(rs_value, info);
7775 return img_format("LBUE %s, %" PRId64 "(%s)", rt, s_value, rs);
7782 * 3 2 1
7783 * 10987654321098765432109876543210
7784 * 001000 x1110000101
7785 * rt -----
7786 * rs -----
7787 * rd -----
7789 static char *LBUX(uint64 instruction, Dis_info *info)
7791 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7792 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7793 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7795 const char *rd = GPR(rd_value, info);
7796 const char *rs = GPR(rs_value, info);
7797 const char *rt = GPR(rt_value, info);
7799 return img_format("LBUX %s, %s(%s)", rd, rs, rt);
7806 * 3 2 1
7807 * 10987654321098765432109876543210
7808 * 001000 x1110000101
7809 * rt -----
7810 * rs -----
7811 * rd -----
7813 static char *LBX(uint64 instruction, Dis_info *info)
7815 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7816 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7817 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7819 const char *rd = GPR(rd_value, info);
7820 const char *rs = GPR(rs_value, info);
7821 const char *rt = GPR(rt_value, info);
7823 return img_format("LBX %s, %s(%s)", rd, rs, rt);
7830 * 3 2 1
7831 * 10987654321098765432109876543210
7832 * 001000 x1110000101
7833 * rt -----
7834 * rs -----
7835 * rd -----
7837 static char *LD_GP_(uint64 instruction, Dis_info *info)
7839 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7840 uint64 u_value = extract_u_20_to_3__s3(instruction);
7842 const char *rt = GPR(rt_value, info);
7844 return img_format("LD %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7851 * 3 2 1
7852 * 10987654321098765432109876543210
7853 * 001000 x1110000101
7854 * rt -----
7855 * rs -----
7856 * rd -----
7858 static char *LD_S9_(uint64 instruction, Dis_info *info)
7860 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7861 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7862 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7864 const char *rt = GPR(rt_value, info);
7865 const char *rs = GPR(rs_value, info);
7867 return img_format("LD %s, %" PRId64 "(%s)", rt, s_value, rs);
7874 * 3 2 1
7875 * 10987654321098765432109876543210
7876 * 001000 x1110000101
7877 * rt -----
7878 * rs -----
7879 * rd -----
7881 static char *LD_U12_(uint64 instruction, Dis_info *info)
7883 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7884 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7885 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7887 const char *rt = GPR(rt_value, info);
7888 const char *rs = GPR(rs_value, info);
7890 return img_format("LD %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7897 * 3 2 1
7898 * 10987654321098765432109876543210
7899 * 001000 x1110000101
7900 * rt -----
7901 * rs -----
7902 * rd -----
7904 static char *LDC1_GP_(uint64 instruction, Dis_info *info)
7906 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7907 uint64 u_value = extract_u_17_to_2__s2(instruction);
7909 const char *ft = FPR(ft_value, info);
7911 return img_format("LDC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
7918 * 3 2 1
7919 * 10987654321098765432109876543210
7920 * 001000 x1110000101
7921 * rt -----
7922 * rs -----
7923 * rd -----
7925 static char *LDC1_S9_(uint64 instruction, Dis_info *info)
7927 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7928 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7929 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7931 const char *ft = FPR(ft_value, info);
7932 const char *rs = GPR(rs_value, info);
7934 return img_format("LDC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
7941 * 3 2 1
7942 * 10987654321098765432109876543210
7943 * 001000 x1110000101
7944 * rt -----
7945 * rs -----
7946 * rd -----
7948 static char *LDC1_U12_(uint64 instruction, Dis_info *info)
7950 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7951 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7952 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7954 const char *ft = FPR(ft_value, info);
7955 const char *rs = GPR(rs_value, info);
7957 return img_format("LDC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
7964 * 3 2 1
7965 * 10987654321098765432109876543210
7966 * 001000 x1110000101
7967 * rt -----
7968 * rs -----
7969 * rd -----
7971 static char *LDC1XS(uint64 instruction, Dis_info *info)
7973 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7974 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7975 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
7977 const char *ft = FPR(ft_value, info);
7978 const char *rs = GPR(rs_value, info);
7979 const char *rt = GPR(rt_value, info);
7981 return img_format("LDC1XS %s, %s(%s)", ft, rs, rt);
7988 * 3 2 1
7989 * 10987654321098765432109876543210
7990 * 001000 x1110000101
7991 * rt -----
7992 * rs -----
7993 * rd -----
7995 static char *LDC1X(uint64 instruction, Dis_info *info)
7997 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7998 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7999 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8001 const char *ft = FPR(ft_value, info);
8002 const char *rs = GPR(rs_value, info);
8003 const char *rt = GPR(rt_value, info);
8005 return img_format("LDC1X %s, %s(%s)", ft, rs, rt);
8012 * 3 2 1
8013 * 10987654321098765432109876543210
8014 * 001000 x1110000101
8015 * rt -----
8016 * rs -----
8017 * rd -----
8019 static char *LDC2(uint64 instruction, Dis_info *info)
8021 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8022 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8023 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8025 const char *rs = GPR(rs_value, info);
8027 return img_format("LDC2 CP%" PRIu64 ", %" PRId64 "(%s)",
8028 ct_value, s_value, rs);
8035 * 3 2 1
8036 * 10987654321098765432109876543210
8037 * 001000 x1110000101
8038 * rt -----
8039 * rs -----
8040 * rd -----
8042 static char *LDM(uint64 instruction, Dis_info *info)
8044 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8045 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8046 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8047 uint64 count3_value = extract_count3_14_13_12(instruction);
8049 const char *rt = GPR(rt_value, info);
8050 const char *rs = GPR(rs_value, info);
8051 uint64 count3 = encode_count3_from_count(count3_value);
8053 return img_format("LDM %s, %" PRId64 "(%s), 0x%" PRIx64,
8054 rt, s_value, rs, count3);
8061 * 3 2 1
8062 * 10987654321098765432109876543210
8063 * 001000 x1110000101
8064 * rt -----
8065 * rs -----
8066 * rd -----
8068 static char *LDPC_48_(uint64 instruction, Dis_info *info)
8070 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8071 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8073 const char *rt = GPR(rt_value, info);
8074 g_autofree char *s = ADDRESS(s_value, 6, info);
8076 return img_format("LDPC %s, %s", rt, s);
8083 * 3 2 1
8084 * 10987654321098765432109876543210
8085 * 001000 x1110000101
8086 * rt -----
8087 * rs -----
8088 * rd -----
8090 static char *LDX(uint64 instruction, Dis_info *info)
8092 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8093 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8094 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8096 const char *rd = GPR(rd_value, info);
8097 const char *rs = GPR(rs_value, info);
8098 const char *rt = GPR(rt_value, info);
8100 return img_format("LDX %s, %s(%s)", rd, rs, rt);
8107 * 3 2 1
8108 * 10987654321098765432109876543210
8109 * 001000 x1110000101
8110 * rt -----
8111 * rs -----
8112 * rd -----
8114 static char *LDXS(uint64 instruction, Dis_info *info)
8116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8117 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8118 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8120 const char *rd = GPR(rd_value, info);
8121 const char *rs = GPR(rs_value, info);
8122 const char *rt = GPR(rt_value, info);
8124 return img_format("LDXS %s, %s(%s)", rd, rs, rt);
8131 * 3 2 1
8132 * 10987654321098765432109876543210
8133 * 001000 x1110000101
8134 * rt -----
8135 * rs -----
8136 * rd -----
8138 static char *LH_16_(uint64 instruction, Dis_info *info)
8140 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8141 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8142 uint64 u_value = extract_u_2_1__s1(instruction);
8144 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8145 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8147 return img_format("LH %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8154 * 3 2 1
8155 * 10987654321098765432109876543210
8156 * 001000 x1110000101
8157 * rt -----
8158 * rs -----
8159 * rd -----
8161 static char *LH_GP_(uint64 instruction, Dis_info *info)
8163 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8164 uint64 u_value = extract_u_17_to_1__s1(instruction);
8166 const char *rt = GPR(rt_value, info);
8168 return img_format("LH %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8175 * 3 2 1
8176 * 10987654321098765432109876543210
8177 * 001000 x1110000101
8178 * rt -----
8179 * rs -----
8180 * rd -----
8182 static char *LH_S9_(uint64 instruction, Dis_info *info)
8184 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8185 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8186 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8188 const char *rt = GPR(rt_value, info);
8189 const char *rs = GPR(rs_value, info);
8191 return img_format("LH %s, %" PRId64 "(%s)", rt, s_value, rs);
8198 * 3 2 1
8199 * 10987654321098765432109876543210
8200 * 001000 x1110000101
8201 * rt -----
8202 * rs -----
8203 * rd -----
8205 static char *LH_U12_(uint64 instruction, Dis_info *info)
8207 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8208 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8209 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8211 const char *rt = GPR(rt_value, info);
8212 const char *rs = GPR(rs_value, info);
8214 return img_format("LH %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8221 * 3 2 1
8222 * 10987654321098765432109876543210
8223 * 001000 x1110000101
8224 * rt -----
8225 * rs -----
8226 * rd -----
8228 static char *LHE(uint64 instruction, Dis_info *info)
8230 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8231 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8232 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8234 const char *rt = GPR(rt_value, info);
8235 const char *rs = GPR(rs_value, info);
8237 return img_format("LHE %s, %" PRId64 "(%s)", rt, s_value, rs);
8244 * 3 2 1
8245 * 10987654321098765432109876543210
8246 * 001000 x1110000101
8247 * rt -----
8248 * rs -----
8249 * rd -----
8251 static char *LHU_16_(uint64 instruction, Dis_info *info)
8253 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8254 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8255 uint64 u_value = extract_u_2_1__s1(instruction);
8257 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8258 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8260 return img_format("LHU %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8267 * 3 2 1
8268 * 10987654321098765432109876543210
8269 * 001000 x1110000101
8270 * rt -----
8271 * rs -----
8272 * rd -----
8274 static char *LHU_GP_(uint64 instruction, Dis_info *info)
8276 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8277 uint64 u_value = extract_u_17_to_1__s1(instruction);
8279 const char *rt = GPR(rt_value, info);
8281 return img_format("LHU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8288 * 3 2 1
8289 * 10987654321098765432109876543210
8290 * 001000 x1110000101
8291 * rt -----
8292 * rs -----
8293 * rd -----
8295 static char *LHU_S9_(uint64 instruction, Dis_info *info)
8297 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8298 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8299 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8301 const char *rt = GPR(rt_value, info);
8302 const char *rs = GPR(rs_value, info);
8304 return img_format("LHU %s, %" PRId64 "(%s)", rt, s_value, rs);
8311 * 3 2 1
8312 * 10987654321098765432109876543210
8313 * 001000 x1110000101
8314 * rt -----
8315 * rs -----
8316 * rd -----
8318 static char *LHU_U12_(uint64 instruction, Dis_info *info)
8320 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8321 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8322 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8324 const char *rt = GPR(rt_value, info);
8325 const char *rs = GPR(rs_value, info);
8327 return img_format("LHU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8334 * 3 2 1
8335 * 10987654321098765432109876543210
8336 * 001000 x1110000101
8337 * rt -----
8338 * rs -----
8339 * rd -----
8341 static char *LHUE(uint64 instruction, Dis_info *info)
8343 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8344 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8345 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8347 const char *rt = GPR(rt_value, info);
8348 const char *rs = GPR(rs_value, info);
8350 return img_format("LHUE %s, %" PRId64 "(%s)", rt, s_value, rs);
8357 * 3 2 1
8358 * 10987654321098765432109876543210
8359 * 001000 x1110000101
8360 * rt -----
8361 * rs -----
8362 * rd -----
8364 static char *LHUX(uint64 instruction, Dis_info *info)
8366 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8367 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8368 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8370 const char *rd = GPR(rd_value, info);
8371 const char *rs = GPR(rs_value, info);
8372 const char *rt = GPR(rt_value, info);
8374 return img_format("LHUX %s, %s(%s)", rd, rs, rt);
8381 * 3 2 1
8382 * 10987654321098765432109876543210
8383 * 001000 x1110000101
8384 * rt -----
8385 * rs -----
8386 * rd -----
8388 static char *LHUXS(uint64 instruction, Dis_info *info)
8390 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8391 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8392 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8394 const char *rd = GPR(rd_value, info);
8395 const char *rs = GPR(rs_value, info);
8396 const char *rt = GPR(rt_value, info);
8398 return img_format("LHUXS %s, %s(%s)", rd, rs, rt);
8405 * 3 2 1
8406 * 10987654321098765432109876543210
8407 * 001000 x1110000101
8408 * rt -----
8409 * rs -----
8410 * rd -----
8412 static char *LHXS(uint64 instruction, Dis_info *info)
8414 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8415 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8416 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8418 const char *rd = GPR(rd_value, info);
8419 const char *rs = GPR(rs_value, info);
8420 const char *rt = GPR(rt_value, info);
8422 return img_format("LHXS %s, %s(%s)", rd, rs, rt);
8429 * 3 2 1
8430 * 10987654321098765432109876543210
8431 * 001000 x1110000101
8432 * rt -----
8433 * rs -----
8434 * rd -----
8436 static char *LHX(uint64 instruction, Dis_info *info)
8438 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8439 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8440 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8442 const char *rd = GPR(rd_value, info);
8443 const char *rs = GPR(rs_value, info);
8444 const char *rt = GPR(rt_value, info);
8446 return img_format("LHX %s, %s(%s)", rd, rs, rt);
8453 * 3 2 1
8454 * 10987654321098765432109876543210
8455 * 001000 x1110000101
8456 * rt -----
8457 * rs -----
8458 * rd -----
8460 static char *LI_16_(uint64 instruction, Dis_info *info)
8462 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8463 uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);
8465 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8466 int64 eu = encode_eu_from_s_li16(eu_value);
8468 return img_format("LI %s, %" PRId64, rt3, eu);
8475 * 3 2 1
8476 * 10987654321098765432109876543210
8477 * 001000 x1110000101
8478 * rt -----
8479 * rs -----
8480 * rd -----
8482 static char *LI_48_(uint64 instruction, Dis_info *info)
8484 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8485 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8487 const char *rt = GPR(rt_value, info);
8489 return img_format("LI %s, %" PRId64, rt, s_value);
8496 * 3 2 1
8497 * 10987654321098765432109876543210
8498 * 001000 x1110000101
8499 * rt -----
8500 * rs -----
8501 * rd -----
8503 static char *LL(uint64 instruction, Dis_info *info)
8505 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8506 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8507 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8509 const char *rt = GPR(rt_value, info);
8510 const char *rs = GPR(rs_value, info);
8512 return img_format("LL %s, %" PRId64 "(%s)", rt, s_value, rs);
8519 * 3 2 1
8520 * 10987654321098765432109876543210
8521 * 001000 x1110000101
8522 * rt -----
8523 * rs -----
8524 * rd -----
8526 static char *LLD(uint64 instruction, Dis_info *info)
8528 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8529 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8530 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
8532 const char *rt = GPR(rt_value, info);
8533 const char *rs = GPR(rs_value, info);
8535 return img_format("LLD %s, %" PRId64 "(%s)", rt, s_value, rs);
8542 * 3 2 1
8543 * 10987654321098765432109876543210
8544 * 001000 x1110000101
8545 * rt -----
8546 * rs -----
8547 * rd -----
8549 static char *LLDP(uint64 instruction, Dis_info *info)
8551 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8552 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8553 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8555 const char *rt = GPR(rt_value, info);
8556 const char *ru = GPR(ru_value, info);
8557 const char *rs = GPR(rs_value, info);
8559 return img_format("LLDP %s, %s, (%s)", rt, ru, rs);
8566 * 3 2 1
8567 * 10987654321098765432109876543210
8568 * 001000 x1110000101
8569 * rt -----
8570 * rs -----
8571 * rd -----
8573 static char *LLE(uint64 instruction, Dis_info *info)
8575 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8576 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8577 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8579 const char *rt = GPR(rt_value, info);
8580 const char *rs = GPR(rs_value, info);
8582 return img_format("LLE %s, %" PRId64 "(%s)", rt, s_value, rs);
8589 * 3 2 1
8590 * 10987654321098765432109876543210
8591 * 001000 x1110000101
8592 * rt -----
8593 * rs -----
8594 * rd -----
8596 static char *LLWP(uint64 instruction, Dis_info *info)
8598 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8599 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8600 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8602 const char *rt = GPR(rt_value, info);
8603 const char *ru = GPR(ru_value, info);
8604 const char *rs = GPR(rs_value, info);
8606 return img_format("LLWP %s, %s, (%s)", rt, ru, rs);
8613 * 3 2 1
8614 * 10987654321098765432109876543210
8615 * 001000 x1110000101
8616 * rt -----
8617 * rs -----
8618 * rd -----
8620 static char *LLWPE(uint64 instruction, Dis_info *info)
8622 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8623 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8624 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8626 const char *rt = GPR(rt_value, info);
8627 const char *ru = GPR(ru_value, info);
8628 const char *rs = GPR(rs_value, info);
8630 return img_format("LLWPE %s, %s, (%s)", rt, ru, rs);
8637 * 3 2 1
8638 * 10987654321098765432109876543210
8639 * 001000 x1110000101
8640 * rt -----
8641 * rs -----
8642 * rd -----
8644 static char *LSA(uint64 instruction, Dis_info *info)
8646 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8647 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8648 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8649 uint64 u2_value = extract_u2_10_9(instruction);
8651 const char *rd = GPR(rd_value, info);
8652 const char *rs = GPR(rs_value, info);
8653 const char *rt = GPR(rt_value, info);
8655 return img_format("LSA %s, %s, %s, 0x%" PRIx64, rd, rs, rt, u2_value);
8662 * 3 2 1
8663 * 10987654321098765432109876543210
8664 * 001000 x1110000101
8665 * rt -----
8666 * rs -----
8667 * rd -----
8669 static char *LUI(uint64 instruction, Dis_info *info)
8671 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8672 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
8674 const char *rt = GPR(rt_value, info);
8676 return img_format("LUI %s, %%hi(%" PRId64 ")", rt, s_value);
8683 * 3 2 1
8684 * 10987654321098765432109876543210
8685 * 001000 x1110000101
8686 * rt -----
8687 * rs -----
8688 * rd -----
8690 static char *LW_16_(uint64 instruction, Dis_info *info)
8692 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8693 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8694 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
8696 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8697 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8699 return img_format("LW %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8706 * 3 2 1
8707 * 10987654321098765432109876543210
8708 * 001000 x1110000101
8709 * rt -----
8710 * rs -----
8711 * rd -----
8713 static char *LW_4X4_(uint64 instruction, Dis_info *info)
8715 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
8716 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
8717 uint64 u_value = extract_u_3_8__s2(instruction);
8719 const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
8720 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
8722 return img_format("LW %s, 0x%" PRIx64 "(%s)", rt4, u_value, rs4);
8729 * 3 2 1
8730 * 10987654321098765432109876543210
8731 * 001000 x1110000101
8732 * rt -----
8733 * rs -----
8734 * rd -----
8736 static char *LW_GP_(uint64 instruction, Dis_info *info)
8738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8739 uint64 u_value = extract_u_20_to_2__s2(instruction);
8741 const char *rt = GPR(rt_value, info);
8743 return img_format("LW %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8750 * 3 2 1
8751 * 10987654321098765432109876543210
8752 * 001000 x1110000101
8753 * rt -----
8754 * rs -----
8755 * rd -----
8757 static char *LW_GP16_(uint64 instruction, Dis_info *info)
8759 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8760 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
8762 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8764 return img_format("LW %s, 0x%" PRIx64 "($%d)", rt3, u_value, 28);
8771 * 3 2 1
8772 * 10987654321098765432109876543210
8773 * 001000 x1110000101
8774 * rt -----
8775 * rs -----
8776 * rd -----
8778 static char *LW_S9_(uint64 instruction, Dis_info *info)
8780 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8781 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8782 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8784 const char *rt = GPR(rt_value, info);
8785 const char *rs = GPR(rs_value, info);
8787 return img_format("LW %s, %" PRId64 "(%s)", rt, s_value, rs);
8794 * 3 2 1
8795 * 10987654321098765432109876543210
8796 * 001000 x1110000101
8797 * rt -----
8798 * rs -----
8799 * rd -----
8801 static char *LW_SP_(uint64 instruction, Dis_info *info)
8803 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
8804 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
8806 const char *rt = GPR(rt_value, info);
8808 return img_format("LW %s, 0x%" PRIx64 "($%d)", rt, u_value, 29);
8815 * 3 2 1
8816 * 10987654321098765432109876543210
8817 * 001000 x1110000101
8818 * rt -----
8819 * rs -----
8820 * rd -----
8822 static char *LW_U12_(uint64 instruction, Dis_info *info)
8824 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8825 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8826 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8828 const char *rt = GPR(rt_value, info);
8829 const char *rs = GPR(rs_value, info);
8831 return img_format("LW %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8838 * 3 2 1
8839 * 10987654321098765432109876543210
8840 * 001000 x1110000101
8841 * rt -----
8842 * rs -----
8843 * rd -----
8845 static char *LWC1_GP_(uint64 instruction, Dis_info *info)
8847 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8848 uint64 u_value = extract_u_17_to_2__s2(instruction);
8850 const char *ft = FPR(ft_value, info);
8852 return img_format("LWC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
8859 * 3 2 1
8860 * 10987654321098765432109876543210
8861 * 001000 x1110000101
8862 * rt -----
8863 * rs -----
8864 * rd -----
8866 static char *LWC1_S9_(uint64 instruction, Dis_info *info)
8868 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8869 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8870 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8872 const char *ft = FPR(ft_value, info);
8873 const char *rs = GPR(rs_value, info);
8875 return img_format("LWC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
8882 * 3 2 1
8883 * 10987654321098765432109876543210
8884 * 001000 x1110000101
8885 * rt -----
8886 * rs -----
8887 * rd -----
8889 static char *LWC1_U12_(uint64 instruction, Dis_info *info)
8891 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8892 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8893 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8895 const char *ft = FPR(ft_value, info);
8896 const char *rs = GPR(rs_value, info);
8898 return img_format("LWC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
8905 * 3 2 1
8906 * 10987654321098765432109876543210
8907 * 001000 x1110000101
8908 * rt -----
8909 * rs -----
8910 * rd -----
8912 static char *LWC1X(uint64 instruction, Dis_info *info)
8914 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8915 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8916 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8918 const char *ft = FPR(ft_value, info);
8919 const char *rs = GPR(rs_value, info);
8920 const char *rt = GPR(rt_value, info);
8922 return img_format("LWC1X %s, %s(%s)", ft, rs, rt);
8929 * 3 2 1
8930 * 10987654321098765432109876543210
8931 * 001000 x1110000101
8932 * rt -----
8933 * rs -----
8934 * rd -----
8936 static char *LWC1XS(uint64 instruction, Dis_info *info)
8938 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8939 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8940 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8942 const char *ft = FPR(ft_value, info);
8943 const char *rs = GPR(rs_value, info);
8944 const char *rt = GPR(rt_value, info);
8946 return img_format("LWC1XS %s, %s(%s)", ft, rs, rt);
8953 * 3 2 1
8954 * 10987654321098765432109876543210
8955 * 001000 x1110000101
8956 * rt -----
8957 * rs -----
8958 * rd -----
8960 static char *LWC2(uint64 instruction, Dis_info *info)
8962 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8963 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8964 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8966 const char *rs = GPR(rs_value, info);
8968 return img_format("LWC2 CP%" PRIu64 ", %" PRId64 "(%s)",
8969 ct_value, s_value, rs);
8976 * 3 2 1
8977 * 10987654321098765432109876543210
8978 * 001000 x1110000101
8979 * rt -----
8980 * rs -----
8981 * rd -----
8983 static char *LWE(uint64 instruction, Dis_info *info)
8985 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8986 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8987 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8989 const char *rt = GPR(rt_value, info);
8990 const char *rs = GPR(rs_value, info);
8992 return img_format("LWE %s, %" PRId64 "(%s)", rt, s_value, rs);
8999 * 3 2 1
9000 * 10987654321098765432109876543210
9001 * 001000 x1110000101
9002 * rt -----
9003 * rs -----
9004 * rd -----
9006 static char *LWM(uint64 instruction, Dis_info *info)
9008 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9009 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9010 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9011 uint64 count3_value = extract_count3_14_13_12(instruction);
9013 const char *rt = GPR(rt_value, info);
9014 const char *rs = GPR(rs_value, info);
9015 uint64 count3 = encode_count3_from_count(count3_value);
9017 return img_format("LWM %s, %" PRId64 "(%s), 0x%" PRIx64,
9018 rt, s_value, rs, count3);
9025 * 3 2 1
9026 * 10987654321098765432109876543210
9027 * 001000 x1110000101
9028 * rt -----
9029 * rs -----
9030 * rd -----
9032 static char *LWPC_48_(uint64 instruction, Dis_info *info)
9034 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
9035 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
9037 const char *rt = GPR(rt_value, info);
9038 g_autofree char *s = ADDRESS(s_value, 6, info);
9040 return img_format("LWPC %s, %s", rt, s);
9047 * 3 2 1
9048 * 10987654321098765432109876543210
9049 * 001000 x1110000101
9050 * rt -----
9051 * rs -----
9052 * rd -----
9054 static char *LWU_GP_(uint64 instruction, Dis_info *info)
9056 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9057 uint64 u_value = extract_u_17_to_2__s2(instruction);
9059 const char *rt = GPR(rt_value, info);
9061 return img_format("LWU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
9068 * 3 2 1
9069 * 10987654321098765432109876543210
9070 * 001000 x1110000101
9071 * rt -----
9072 * rs -----
9073 * rd -----
9075 static char *LWU_S9_(uint64 instruction, Dis_info *info)
9077 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9078 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9079 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9081 const char *rt = GPR(rt_value, info);
9082 const char *rs = GPR(rs_value, info);
9084 return img_format("LWU %s, %" PRId64 "(%s)", rt, s_value, rs);
9091 * 3 2 1
9092 * 10987654321098765432109876543210
9093 * 001000 x1110000101
9094 * rt -----
9095 * rs -----
9096 * rd -----
9098 static char *LWU_U12_(uint64 instruction, Dis_info *info)
9100 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9101 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9102 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9104 const char *rt = GPR(rt_value, info);
9105 const char *rs = GPR(rs_value, info);
9107 return img_format("LWU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
9114 * 3 2 1
9115 * 10987654321098765432109876543210
9116 * 001000 x1110000101
9117 * rt -----
9118 * rs -----
9119 * rd -----
9121 static char *LWUX(uint64 instruction, Dis_info *info)
9123 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9124 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9125 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9127 const char *rd = GPR(rd_value, info);
9128 const char *rs = GPR(rs_value, info);
9129 const char *rt = GPR(rt_value, info);
9131 return img_format("LWUX %s, %s(%s)", rd, rs, rt);
9138 * 3 2 1
9139 * 10987654321098765432109876543210
9140 * 001000 x1110000101
9141 * rt -----
9142 * rs -----
9143 * rd -----
9145 static char *LWUXS(uint64 instruction, Dis_info *info)
9147 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9148 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9149 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9151 const char *rd = GPR(rd_value, info);
9152 const char *rs = GPR(rs_value, info);
9153 const char *rt = GPR(rt_value, info);
9155 return img_format("LWUXS %s, %s(%s)", rd, rs, rt);
9162 * 3 2 1
9163 * 10987654321098765432109876543210
9164 * 001000 x1110000101
9165 * rt -----
9166 * rs -----
9167 * rd -----
9169 static char *LWX(uint64 instruction, Dis_info *info)
9171 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9172 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9173 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9175 const char *rd = GPR(rd_value, info);
9176 const char *rs = GPR(rs_value, info);
9177 const char *rt = GPR(rt_value, info);
9179 return img_format("LWX %s, %s(%s)", rd, rs, rt);
9186 * 3 2 1
9187 * 10987654321098765432109876543210
9188 * 001000 x1110000101
9189 * rt -----
9190 * rs -----
9191 * rd -----
9193 static char *LWXS_16_(uint64 instruction, Dis_info *info)
9195 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9196 uint64 rs3_value = extract_rs3_6_5_4(instruction);
9197 uint64 rd3_value = extract_rd3_3_2_1(instruction);
9199 const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
9200 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
9201 uint64 rt3 = decode_gpr_gpr3(rt3_value, info);
9203 return img_format("LWXS %s, %s(0x%" PRIx64 ")", rd3, rs3, rt3);
9210 * 3 2 1
9211 * 10987654321098765432109876543210
9212 * 001000 x1110000101
9213 * rt -----
9214 * rs -----
9215 * rd -----
9217 static char *LWXS_32_(uint64 instruction, Dis_info *info)
9219 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9220 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9221 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9223 const char *rd = GPR(rd_value, info);
9224 const char *rs = GPR(rs_value, info);
9225 const char *rt = GPR(rt_value, info);
9227 return img_format("LWXS %s, %s(%s)", rd, rs, rt);
9232 * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified
9233 * accumulator
9235 * 3 2 1
9236 * 10987654321098765432109876543210
9237 * 001000 x1110000101
9238 * rt -----
9239 * rs -----
9240 * rd -----
9242 static char *MADD_DSP_(uint64 instruction, Dis_info *info)
9244 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9245 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9246 uint64 ac_value = extract_ac_15_14(instruction);
9248 const char *ac = AC(ac_value, info);
9249 const char *rs = GPR(rs_value, info);
9250 const char *rt = GPR(rt_value, info);
9252 return img_format("MADD %s, %s, %s", ac, rs, rt);
9259 * 3 2 1
9260 * 10987654321098765432109876543210
9261 * 001000 x1110000101
9262 * rt -----
9263 * rs -----
9264 * rd -----
9266 static char *MADDF_D(uint64 instruction, Dis_info *info)
9268 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9269 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9270 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9272 const char *fd = FPR(fd_value, info);
9273 const char *fs = FPR(fs_value, info);
9274 const char *ft = FPR(ft_value, info);
9276 return img_format("MADDF.D %s, %s, %s", fd, fs, ft);
9283 * 3 2 1
9284 * 10987654321098765432109876543210
9285 * 001000 x1110000101
9286 * rt -----
9287 * rs -----
9288 * rd -----
9290 static char *MADDF_S(uint64 instruction, Dis_info *info)
9292 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9293 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9294 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9296 const char *fd = FPR(fd_value, info);
9297 const char *fs = FPR(fs_value, info);
9298 const char *ft = FPR(ft_value, info);
9300 return img_format("MADDF.S %s, %s, %s", fd, fs, ft);
9305 * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the
9306 * specified accumulator
9308 * 3 2 1
9309 * 10987654321098765432109876543210
9310 * 001000 x1110000101
9311 * rt -----
9312 * rs -----
9313 * rd -----
9315 static char *MADDU_DSP_(uint64 instruction, Dis_info *info)
9317 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9318 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9319 uint64 ac_value = extract_ac_15_14(instruction);
9321 const char *ac = AC(ac_value, info);
9322 const char *rs = GPR(rs_value, info);
9323 const char *rt = GPR(rt_value, info);
9325 return img_format("MADDU %s, %s, %s", ac, rs, rt);
9330 * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector
9331 * fractional halfword elements with accumulation
9333 * 3 2 1
9334 * 10987654321098765432109876543210
9335 * 001000 x1110000101
9336 * rt -----
9337 * rs -----
9338 * rd -----
9340 static char *MAQ_S_W_PHL(uint64 instruction, Dis_info *info)
9342 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9343 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9344 uint64 ac_value = extract_ac_15_14(instruction);
9346 const char *ac = AC(ac_value, info);
9347 const char *rs = GPR(rs_value, info);
9348 const char *rt = GPR(rt_value, info);
9350 return img_format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt);
9355 * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector
9356 * fractional halfword elements with accumulation
9358 * 3 2 1
9359 * 10987654321098765432109876543210
9360 * 001000 x1110000101
9361 * rt -----
9362 * rs -----
9363 * rd -----
9365 static char *MAQ_S_W_PHR(uint64 instruction, Dis_info *info)
9367 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9368 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9369 uint64 ac_value = extract_ac_15_14(instruction);
9371 const char *ac = AC(ac_value, info);
9372 const char *rs = GPR(rs_value, info);
9373 const char *rt = GPR(rt_value, info);
9375 return img_format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt);
9380 * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector
9381 * fractional halfword elements with saturating accumulation
9383 * 3 2 1
9384 * 10987654321098765432109876543210
9385 * 001000 x1110000101
9386 * rt -----
9387 * rs -----
9388 * rd -----
9390 static char *MAQ_SA_W_PHL(uint64 instruction, Dis_info *info)
9392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9394 uint64 ac_value = extract_ac_15_14(instruction);
9396 const char *ac = AC(ac_value, info);
9397 const char *rs = GPR(rs_value, info);
9398 const char *rt = GPR(rt_value, info);
9400 return img_format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt);
9405 * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector
9406 * fractional halfword elements with saturating accumulation
9408 * 3 2 1
9409 * 10987654321098765432109876543210
9410 * 001000 x1110000101
9411 * rt -----
9412 * rs -----
9413 * rd -----
9415 static char *MAQ_SA_W_PHR(uint64 instruction, Dis_info *info)
9417 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9418 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9419 uint64 ac_value = extract_ac_15_14(instruction);
9421 const char *ac = AC(ac_value, info);
9422 const char *rs = GPR(rs_value, info);
9423 const char *rt = GPR(rt_value, info);
9425 return img_format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt);
9432 * 3 2 1
9433 * 10987654321098765432109876543210
9434 * 001000 x1110000101
9435 * rt -----
9436 * rs -----
9437 * rd -----
9439 static char *MAX_D(uint64 instruction, Dis_info *info)
9441 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9442 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9443 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9445 const char *fd = FPR(fd_value, info);
9446 const char *fs = FPR(fs_value, info);
9447 const char *ft = FPR(ft_value, info);
9449 return img_format("MAX.D %s, %s, %s", fd, fs, ft);
9456 * 3 2 1
9457 * 10987654321098765432109876543210
9458 * 001000 x1110000101
9459 * rt -----
9460 * rs -----
9461 * rd -----
9463 static char *MAX_S(uint64 instruction, Dis_info *info)
9465 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9466 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9467 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9469 const char *fd = FPR(fd_value, info);
9470 const char *fs = FPR(fs_value, info);
9471 const char *ft = FPR(ft_value, info);
9473 return img_format("MAX.S %s, %s, %s", fd, fs, ft);
9480 * 3 2 1
9481 * 10987654321098765432109876543210
9482 * 001000 x1110000101
9483 * rt -----
9484 * rs -----
9485 * rd -----
9487 static char *MAXA_D(uint64 instruction, Dis_info *info)
9489 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9490 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9491 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9493 const char *fd = FPR(fd_value, info);
9494 const char *fs = FPR(fs_value, info);
9495 const char *ft = FPR(ft_value, info);
9497 return img_format("MAXA.D %s, %s, %s", fd, fs, ft);
9504 * 3 2 1
9505 * 10987654321098765432109876543210
9506 * 001000 x1110000101
9507 * rt -----
9508 * rs -----
9509 * rd -----
9511 static char *MAXA_S(uint64 instruction, Dis_info *info)
9513 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9514 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9515 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9517 const char *fd = FPR(fd_value, info);
9518 const char *fs = FPR(fs_value, info);
9519 const char *ft = FPR(ft_value, info);
9521 return img_format("MAXA.S %s, %s, %s", fd, fs, ft);
9528 * 3 2 1
9529 * 10987654321098765432109876543210
9530 * 001000 x1110000101
9531 * rt -----
9532 * rs -----
9533 * rd -----
9535 static char *MFC0(uint64 instruction, Dis_info *info)
9537 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9538 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9539 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9541 const char *rt = GPR(rt_value, info);
9543 return img_format("MFC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9544 rt, c0s_value, sel_value);
9551 * 3 2 1
9552 * 10987654321098765432109876543210
9553 * 001000 x1110000101
9554 * rt -----
9555 * rs -----
9556 * rd -----
9558 static char *MFC1(uint64 instruction, Dis_info *info)
9560 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9561 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9563 const char *rt = GPR(rt_value, info);
9564 const char *fs = FPR(fs_value, info);
9566 return img_format("MFC1 %s, %s", rt, fs);
9573 * 3 2 1
9574 * 10987654321098765432109876543210
9575 * 001000 x1110000101
9576 * rt -----
9577 * rs -----
9578 * rd -----
9580 static char *MFC2(uint64 instruction, Dis_info *info)
9582 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9583 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
9585 const char *rt = GPR(rt_value, info);
9587 return img_format("MFC2 %s, CP%" PRIu64, rt, cs_value);
9594 * 3 2 1
9595 * 10987654321098765432109876543210
9596 * 001000 x1110000101
9597 * rt -----
9598 * rs -----
9599 * rd -----
9601 static char *MFGC0(uint64 instruction, Dis_info *info)
9603 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9604 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9605 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9607 const char *rt = GPR(rt_value, info);
9609 return img_format("MFGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9610 rt, c0s_value, sel_value);
9617 * 3 2 1
9618 * 10987654321098765432109876543210
9619 * 001000 x1110000101
9620 * rt -----
9621 * rs -----
9622 * rd -----
9624 static char *MFHC0(uint64 instruction, Dis_info *info)
9626 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9627 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9628 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9630 const char *rt = GPR(rt_value, info);
9632 return img_format("MFHC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9633 rt, c0s_value, sel_value);
9640 * 3 2 1
9641 * 10987654321098765432109876543210
9642 * 001000 x1110000101
9643 * rt -----
9644 * rs -----
9645 * rd -----
9647 static char *MFHC1(uint64 instruction, Dis_info *info)
9649 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9650 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9652 const char *rt = GPR(rt_value, info);
9653 const char *fs = FPR(fs_value, info);
9655 return img_format("MFHC1 %s, %s", rt, fs);
9662 * 3 2 1
9663 * 10987654321098765432109876543210
9664 * 001000 x1110000101
9665 * rt -----
9666 * rs -----
9667 * rd -----
9669 static char *MFHC2(uint64 instruction, Dis_info *info)
9671 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9672 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
9674 const char *rt = GPR(rt_value, info);
9676 return img_format("MFHC2 %s, CP%" PRIu64, rt, cs_value);
9683 * 3 2 1
9684 * 10987654321098765432109876543210
9685 * 001000 x1110000101
9686 * rt -----
9687 * rs -----
9688 * rd -----
9690 static char *MFHGC0(uint64 instruction, Dis_info *info)
9692 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9693 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9694 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9696 const char *rt = GPR(rt_value, info);
9698 return img_format("MFHGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9699 rt, c0s_value, sel_value);
9704 * [DSP] MFHI rs, ac - Move from HI register
9706 * 3 2 1
9707 * 10987654321098765432109876543210
9708 * 001000 xxxxx 00000001111111
9709 * rt -----
9710 * ac --
9712 static char *MFHI_DSP_(uint64 instruction, Dis_info *info)
9714 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9715 uint64 ac_value = extract_ac_15_14(instruction);
9717 const char *rt = GPR(rt_value, info);
9718 const char *ac = AC(ac_value, info);
9720 return img_format("MFHI %s, %s", rt, ac);
9727 * 3 2 1
9728 * 10987654321098765432109876543210
9729 * 001000 x1110000101
9730 * rt -----
9731 * rs -----
9732 * rd -----
9734 static char *MFHTR(uint64 instruction, Dis_info *info)
9736 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9737 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9738 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9739 uint64 u_value = extract_u_10(instruction);
9741 const char *rt = GPR(rt_value, info);
9743 return img_format("MFHTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
9744 rt, c0s_value, u_value, sel_value);
9749 * [DSP] MFLO rs, ac - Move from HI register
9751 * 3 2 1
9752 * 10987654321098765432109876543210
9753 * 001000 xxxxx 01000001111111
9754 * rt -----
9755 * ac --
9757 static char *MFLO_DSP_(uint64 instruction, Dis_info *info)
9759 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9760 uint64 ac_value = extract_ac_15_14(instruction);
9762 const char *rt = GPR(rt_value, info);
9763 const char *ac = AC(ac_value, info);
9765 return img_format("MFLO %s, %s", rt, ac);
9772 * 3 2 1
9773 * 10987654321098765432109876543210
9774 * 001000 x1110000101
9775 * rt -----
9776 * rs -----
9777 * rd -----
9779 static char *MFTR(uint64 instruction, Dis_info *info)
9781 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9782 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9783 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9784 uint64 u_value = extract_u_10(instruction);
9786 const char *rt = GPR(rt_value, info);
9788 return img_format("MFTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
9789 rt, c0s_value, u_value, sel_value);
9796 * 3 2 1
9797 * 10987654321098765432109876543210
9798 * 001000 x1110000101
9799 * rt -----
9800 * rs -----
9801 * rd -----
9803 static char *MIN_D(uint64 instruction, Dis_info *info)
9805 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9806 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9807 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9809 const char *fd = FPR(fd_value, info);
9810 const char *fs = FPR(fs_value, info);
9811 const char *ft = FPR(ft_value, info);
9813 return img_format("MIN.D %s, %s, %s", fd, fs, ft);
9820 * 3 2 1
9821 * 10987654321098765432109876543210
9822 * 001000 x1110000101
9823 * rt -----
9824 * rs -----
9825 * rd -----
9827 static char *MIN_S(uint64 instruction, Dis_info *info)
9829 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9830 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9831 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9833 const char *fd = FPR(fd_value, info);
9834 const char *fs = FPR(fs_value, info);
9835 const char *ft = FPR(ft_value, info);
9837 return img_format("MIN.S %s, %s, %s", fd, fs, ft);
9844 * 3 2 1
9845 * 10987654321098765432109876543210
9846 * 001000 x1110000101
9847 * rt -----
9848 * rs -----
9849 * rd -----
9851 static char *MINA_D(uint64 instruction, Dis_info *info)
9853 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9854 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9855 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9857 const char *fd = FPR(fd_value, info);
9858 const char *fs = FPR(fs_value, info);
9859 const char *ft = FPR(ft_value, info);
9861 return img_format("MINA.D %s, %s, %s", fd, fs, ft);
9868 * 3 2 1
9869 * 10987654321098765432109876543210
9870 * 001000 x1110000101
9871 * rt -----
9872 * rs -----
9873 * rd -----
9875 static char *MINA_S(uint64 instruction, Dis_info *info)
9877 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9878 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9879 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9881 const char *fd = FPR(fd_value, info);
9882 const char *fs = FPR(fs_value, info);
9883 const char *ft = FPR(ft_value, info);
9885 return img_format("MINA.S %s, %s, %s", fd, fs, ft);
9892 * 3 2 1
9893 * 10987654321098765432109876543210
9894 * 001000 x1110000101
9895 * rt -----
9896 * rs -----
9897 * rd -----
9899 static char *MOD(uint64 instruction, Dis_info *info)
9901 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9902 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9903 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9905 const char *rd = GPR(rd_value, info);
9906 const char *rs = GPR(rs_value, info);
9907 const char *rt = GPR(rt_value, info);
9909 return img_format("MOD %s, %s, %s", rd, rs, rt);
9914 * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value
9916 * 3 2 1
9917 * 10987654321098765432109876543210
9918 * 001000 x1110000101
9919 * rt -----
9920 * rs -----
9921 * rd -----
9923 static char *MODSUB(uint64 instruction, Dis_info *info)
9925 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9926 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9927 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9929 const char *rd = GPR(rd_value, info);
9930 const char *rs = GPR(rs_value, info);
9931 const char *rt = GPR(rt_value, info);
9933 return img_format("MODSUB %s, %s, %s", rd, rs, rt);
9940 * 3 2 1
9941 * 10987654321098765432109876543210
9942 * 001000 x1010010101
9943 * rt -----
9944 * rs -----
9945 * rd -----
9947 static char *MODU(uint64 instruction, Dis_info *info)
9949 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9950 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9951 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9953 const char *rd = GPR(rd_value, info);
9954 const char *rs = GPR(rs_value, info);
9955 const char *rt = GPR(rt_value, info);
9957 return img_format("MODU %s, %s, %s", rd, rs, rt);
9964 * 3 2 1
9965 * 10987654321098765432109876543210
9966 * 001000 x1110000101
9967 * rt -----
9968 * rs -----
9969 * rd -----
9971 static char *MOV_D(uint64 instruction, Dis_info *info)
9973 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9974 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9976 const char *ft = FPR(ft_value, info);
9977 const char *fs = FPR(fs_value, info);
9979 return img_format("MOV.D %s, %s", ft, fs);
9986 * 3 2 1
9987 * 10987654321098765432109876543210
9988 * 001000 x1110000101
9989 * rt -----
9990 * rs -----
9991 * rd -----
9993 static char *MOV_S(uint64 instruction, Dis_info *info)
9995 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9996 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9998 const char *ft = FPR(ft_value, info);
9999 const char *fs = FPR(fs_value, info);
10001 return img_format("MOV.S %s, %s", ft, fs);
10008 * 3 2 1
10009 * 10987654321098765432109876543210
10010 * 001000 x1110000101
10011 * rt -----
10012 * rs -----
10013 * rd -----
10015 static char *MOVE_BALC(uint64 instruction, Dis_info *info)
10017 uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
10018 uint64 rd1_value = extract_rdl_25_24(instruction);
10019 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
10021 const char *rd1 = GPR(decode_gpr_gpr1(rd1_value, info), info);
10022 const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
10023 g_autofree char *s = ADDRESS(s_value, 4, info);
10025 return img_format("MOVE.BALC %s, %s, %s", rd1, rtz4, s);
10032 * 3 2 1
10033 * 10987654321098765432109876543210
10034 * 001000 x1110000101
10035 * rt -----
10036 * rs -----
10037 * rd -----
10039 static char *MOVEP(uint64 instruction, Dis_info *info)
10041 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
10042 uint64 rd2_value = extract_rd2_3_8(instruction);
10043 uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);
10045 const char *rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value, info), info);
10046 const char *re2 = GPR(decode_gpr_gpr2_reg2(rd2_value, info), info);
10047 /* !!!!!!!!!! - no conversion function */
10048 const char *rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value, info), info);
10049 const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
10051 return img_format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4);
10052 /* hand edited */
10059 * 3 2 1
10060 * 10987654321098765432109876543210
10061 * 001000 x1110000101
10062 * rt -----
10063 * rs -----
10064 * rd -----
10066 static char *MOVEP_REV_(uint64 instruction, Dis_info *info)
10068 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10069 uint64 rd2_value = extract_rd2_3_8(instruction);
10070 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10072 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
10073 const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
10074 const char *rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value, info), info);
10075 const char *rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value, info), info);
10076 /* !!!!!!!!!! - no conversion function */
10078 return img_format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2);
10079 /* hand edited */
10084 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10086 * 3 2 1
10087 * 10987654321098765432109876543210
10088 * 001000 00010001101
10089 * rt -----
10090 * rs -----
10091 * rd -----
10093 static char *MOVE(uint64 instruction, Dis_info *info)
10095 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
10096 uint64 rs_value = extract_rs_4_3_2_1_0(instruction);
10098 const char *rt = GPR(rt_value, info);
10099 const char *rs = GPR(rs_value, info);
10101 return img_format("MOVE %s, %s", rt, rs);
10106 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10108 * 3 2 1
10109 * 10987654321098765432109876543210
10110 * 001000 00010001101
10111 * rt -----
10112 * rs -----
10113 * rd -----
10115 static char *MOVN(uint64 instruction, Dis_info *info)
10117 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10118 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10119 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10121 const char *rd = GPR(rd_value, info);
10122 const char *rs = GPR(rs_value, info);
10123 const char *rt = GPR(rt_value, info);
10125 return img_format("MOVN %s, %s, %s", rd, rs, rt);
10130 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10132 * 3 2 1
10133 * 10987654321098765432109876543210
10134 * 001000 00010001101
10135 * rt -----
10136 * rs -----
10137 * rd -----
10139 static char *MOVZ(uint64 instruction, Dis_info *info)
10141 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10142 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10143 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10145 const char *rd = GPR(rd_value, info);
10146 const char *rs = GPR(rs_value, info);
10147 const char *rt = GPR(rt_value, info);
10149 return img_format("MOVZ %s, %s, %s", rd, rs, rt);
10154 * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator
10156 * 3 2 1
10157 * 10987654321098765432109876543210
10158 * 001000 10101010111111
10159 * rt -----
10160 * rs -----
10161 * ac --
10163 static char *MSUB_DSP_(uint64 instruction, Dis_info *info)
10165 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10166 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10167 uint64 ac_value = extract_ac_15_14(instruction);
10169 const char *ac = AC(ac_value, info);
10170 const char *rs = GPR(rs_value, info);
10171 const char *rt = GPR(rt_value, info);
10173 return img_format("MSUB %s, %s, %s", ac, rs, rt);
10178 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10180 * 3 2 1
10181 * 10987654321098765432109876543210
10182 * 001000 00010001101
10183 * rt -----
10184 * rs -----
10185 * rd -----
10187 static char *MSUBF_D(uint64 instruction, Dis_info *info)
10189 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10190 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10191 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10193 const char *fd = FPR(fd_value, info);
10194 const char *fs = FPR(fs_value, info);
10195 const char *ft = FPR(ft_value, info);
10197 return img_format("MSUBF.D %s, %s, %s", fd, fs, ft);
10202 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10204 * 3 2 1
10205 * 10987654321098765432109876543210
10206 * 001000 00010001101
10207 * rt -----
10208 * rs -----
10209 * rd -----
10211 static char *MSUBF_S(uint64 instruction, Dis_info *info)
10213 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10214 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10215 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10217 const char *fd = FPR(fd_value, info);
10218 const char *fs = FPR(fs_value, info);
10219 const char *ft = FPR(ft_value, info);
10221 return img_format("MSUBF.S %s, %s, %s", fd, fs, ft);
10226 * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator
10228 * 3 2 1
10229 * 10987654321098765432109876543210
10230 * 001000 11101010111111
10231 * rt -----
10232 * rs -----
10233 * ac --
10235 static char *MSUBU_DSP_(uint64 instruction, Dis_info *info)
10237 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10238 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10239 uint64 ac_value = extract_ac_15_14(instruction);
10241 const char *ac = AC(ac_value, info);
10242 const char *rs = GPR(rs_value, info);
10243 const char *rt = GPR(rt_value, info);
10245 return img_format("MSUBU %s, %s, %s", ac, rs, rt);
10250 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10252 * 3 2 1
10253 * 10987654321098765432109876543210
10254 * 001000 00010001101
10255 * rt -----
10256 * rs -----
10257 * rd -----
10259 static char *MTC0(uint64 instruction, Dis_info *info)
10261 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10262 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10263 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10265 const char *rt = GPR(rt_value, info);
10267 return img_format("MTC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10268 rt, c0s_value, sel_value);
10273 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10275 * 3 2 1
10276 * 10987654321098765432109876543210
10277 * 001000 00010001101
10278 * rt -----
10279 * rs -----
10280 * rd -----
10282 static char *MTC1(uint64 instruction, Dis_info *info)
10284 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10285 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10287 const char *rt = GPR(rt_value, info);
10288 const char *fs = FPR(fs_value, info);
10290 return img_format("MTC1 %s, %s", rt, fs);
10295 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10297 * 3 2 1
10298 * 10987654321098765432109876543210
10299 * 001000 00010001101
10300 * rt -----
10301 * rs -----
10302 * rd -----
10304 static char *MTC2(uint64 instruction, Dis_info *info)
10306 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10307 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10309 const char *rt = GPR(rt_value, info);
10311 return img_format("MTC2 %s, CP%" PRIu64, rt, cs_value);
10316 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10318 * 3 2 1
10319 * 10987654321098765432109876543210
10320 * 001000 00010001101
10321 * rt -----
10322 * rs -----
10323 * rd -----
10325 static char *MTGC0(uint64 instruction, Dis_info *info)
10327 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10328 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10329 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10331 const char *rt = GPR(rt_value, info);
10333 return img_format("MTGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10334 rt, c0s_value, sel_value);
10339 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10341 * 3 2 1
10342 * 10987654321098765432109876543210
10343 * 001000 00010001101
10344 * rt -----
10345 * rs -----
10346 * rd -----
10348 static char *MTHC0(uint64 instruction, Dis_info *info)
10350 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10351 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10352 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10354 const char *rt = GPR(rt_value, info);
10356 return img_format("MTHC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10357 rt, c0s_value, sel_value);
10362 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10364 * 3 2 1
10365 * 10987654321098765432109876543210
10366 * 001000 00010001101
10367 * rt -----
10368 * rs -----
10369 * rd -----
10371 static char *MTHC1(uint64 instruction, Dis_info *info)
10373 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10374 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10376 const char *rt = GPR(rt_value, info);
10377 const char *fs = FPR(fs_value, info);
10379 return img_format("MTHC1 %s, %s", rt, fs);
10384 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10386 * 3 2 1
10387 * 10987654321098765432109876543210
10388 * 001000 00010001101
10389 * rt -----
10390 * rs -----
10391 * rd -----
10393 static char *MTHC2(uint64 instruction, Dis_info *info)
10395 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10396 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10398 const char *rt = GPR(rt_value, info);
10400 return img_format("MTHC2 %s, CP%" PRIu64, rt, cs_value);
10405 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10407 * 3 2 1
10408 * 10987654321098765432109876543210
10409 * 001000 00010001101
10410 * rt -----
10411 * rs -----
10412 * rd -----
10414 static char *MTHGC0(uint64 instruction, Dis_info *info)
10416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10417 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10418 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10420 const char *rt = GPR(rt_value, info);
10422 return img_format("MTHGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10423 rt, c0s_value, sel_value);
10428 * [DSP] MTHI rs, ac - Move to HI register
10430 * 3 2 1
10431 * 10987654321098765432109876543210
10432 * 001000xxxxx 10000001111111
10433 * rs -----
10434 * ac --
10436 static char *MTHI_DSP_(uint64 instruction, Dis_info *info)
10438 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10439 uint64 ac_value = extract_ac_15_14(instruction);
10441 const char *rs = GPR(rs_value, info);
10442 const char *ac = AC(ac_value, info);
10444 return img_format("MTHI %s, %s", rs, ac);
10449 * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32
10451 * 3 2 1
10452 * 10987654321098765432109876543210
10453 * 001000xxxxx 00001001111111
10454 * rs -----
10455 * ac --
10457 static char *MTHLIP(uint64 instruction, Dis_info *info)
10459 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10460 uint64 ac_value = extract_ac_15_14(instruction);
10462 const char *rs = GPR(rs_value, info);
10463 const char *ac = AC(ac_value, info);
10465 return img_format("MTHLIP %s, %s", rs, ac);
10470 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10472 * 3 2 1
10473 * 10987654321098765432109876543210
10474 * 001000 00010001101
10475 * rt -----
10476 * rs -----
10477 * rd -----
10479 static char *MTHTR(uint64 instruction, Dis_info *info)
10481 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10482 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10483 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10484 uint64 u_value = extract_u_10(instruction);
10486 const char *rt = GPR(rt_value, info);
10488 return img_format("MTHTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
10489 rt, c0s_value, u_value, sel_value);
10494 * [DSP] MTLO rs, ac - Move to LO register
10496 * 3 2 1
10497 * 10987654321098765432109876543210
10498 * 001000xxxxx 11000001111111
10499 * rs -----
10500 * ac --
10502 static char *MTLO_DSP_(uint64 instruction, Dis_info *info)
10504 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10505 uint64 ac_value = extract_ac_15_14(instruction);
10507 const char *rs = GPR(rs_value, info);
10508 const char *ac = AC(ac_value, info);
10510 return img_format("MTLO %s, %s", rs, ac);
10515 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10517 * 3 2 1
10518 * 10987654321098765432109876543210
10519 * 001000 00010001101
10520 * rt -----
10521 * rs -----
10522 * rd -----
10524 static char *MTTR(uint64 instruction, Dis_info *info)
10526 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10527 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10528 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10529 uint64 u_value = extract_u_10(instruction);
10531 const char *rt = GPR(rt_value, info);
10533 return img_format("MTTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
10534 rt, c0s_value, u_value, sel_value);
10539 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10541 * 3 2 1
10542 * 10987654321098765432109876543210
10543 * 001000 00010001101
10544 * rt -----
10545 * rs -----
10546 * rd -----
10548 static char *MUH(uint64 instruction, Dis_info *info)
10550 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10551 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10552 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10554 const char *rd = GPR(rd_value, info);
10555 const char *rs = GPR(rs_value, info);
10556 const char *rt = GPR(rt_value, info);
10558 return img_format("MUH %s, %s, %s", rd, rs, rt);
10563 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10565 * 3 2 1
10566 * 10987654321098765432109876543210
10567 * 001000 00010001101
10568 * rt -----
10569 * rs -----
10570 * rd -----
10572 static char *MUHU(uint64 instruction, Dis_info *info)
10574 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10575 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10576 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10578 const char *rd = GPR(rd_value, info);
10579 const char *rs = GPR(rs_value, info);
10580 const char *rt = GPR(rt_value, info);
10582 return img_format("MUHU %s, %s, %s", rd, rs, rt);
10587 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10589 * 3 2 1
10590 * 10987654321098765432109876543210
10591 * 001000 00010001101
10592 * rt -----
10593 * rs -----
10594 * rd -----
10596 static char *MUL_32_(uint64 instruction, Dis_info *info)
10598 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10599 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10600 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10602 const char *rd = GPR(rd_value, info);
10603 const char *rs = GPR(rs_value, info);
10604 const char *rt = GPR(rt_value, info);
10606 return img_format("MUL %s, %s, %s", rd, rs, rt);
10611 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10613 * 3 2 1
10614 * 10987654321098765432109876543210
10615 * 001000 00010001101
10616 * rt -----
10617 * rs -----
10618 * rd -----
10620 static char *MUL_4X4_(uint64 instruction, Dis_info *info)
10622 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10623 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10625 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
10626 const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
10628 return img_format("MUL %s, %s", rs4, rt4);
10633 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10635 * 3 2 1
10636 * 10987654321098765432109876543210
10637 * 001000 00010001101
10638 * rt -----
10639 * rs -----
10640 * rd -----
10642 static char *MUL_D(uint64 instruction, Dis_info *info)
10644 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10645 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10646 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10648 const char *fd = FPR(fd_value, info);
10649 const char *fs = FPR(fs_value, info);
10650 const char *ft = FPR(ft_value, info);
10652 return img_format("MUL.D %s, %s, %s", fd, fs, ft);
10657 * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size
10658 * products
10660 * 3 2 1
10661 * 10987654321098765432109876543210
10662 * 001000 00000101101
10663 * rt -----
10664 * rs -----
10665 * rd -----
10667 static char *MUL_PH(uint64 instruction, Dis_info *info)
10669 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10670 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10671 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10673 const char *rd = GPR(rd_value, info);
10674 const char *rs = GPR(rs_value, info);
10675 const char *rt = GPR(rt_value, info);
10677 return img_format("MUL.PH %s, %s, %s", rd, rs, rt);
10682 * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size
10683 * products (saturated)
10685 * 3 2 1
10686 * 10987654321098765432109876543210
10687 * 001000 10000101101
10688 * rt -----
10689 * rs -----
10690 * rd -----
10692 static char *MUL_S_PH(uint64 instruction, Dis_info *info)
10694 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10695 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10696 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10698 const char *rd = GPR(rd_value, info);
10699 const char *rs = GPR(rs_value, info);
10700 const char *rt = GPR(rt_value, info);
10702 return img_format("MUL_S.PH %s, %s, %s", rd, rs, rt);
10707 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10709 * 3 2 1
10710 * 10987654321098765432109876543210
10711 * 001000 00010001101
10712 * rt -----
10713 * rs -----
10714 * rd -----
10716 static char *MUL_S(uint64 instruction, Dis_info *info)
10718 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10719 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10720 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10722 const char *fd = FPR(fd_value, info);
10723 const char *fs = FPR(fs_value, info);
10724 const char *ft = FPR(ft_value, info);
10726 return img_format("MUL.S %s, %s, %s", fd, fs, ft);
10731 * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords
10732 * to expanded width products
10734 * 3 2 1
10735 * 10987654321098765432109876543210
10736 * 001000 x0000100101
10737 * rt -----
10738 * rs -----
10739 * rd -----
10741 static char *MULEQ_S_W_PHL(uint64 instruction, Dis_info *info)
10743 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10744 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10745 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10747 const char *rd = GPR(rd_value, info);
10748 const char *rs = GPR(rs_value, info);
10749 const char *rt = GPR(rt_value, info);
10751 return img_format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt);
10756 * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords
10757 * to expanded width products
10759 * 3 2 1
10760 * 10987654321098765432109876543210
10761 * 001000 x0001100101
10762 * rt -----
10763 * rs -----
10764 * rd -----
10766 static char *MULEQ_S_W_PHR(uint64 instruction, Dis_info *info)
10768 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10769 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10770 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10772 const char *rd = GPR(rd_value, info);
10773 const char *rs = GPR(rs_value, info);
10774 const char *rt = GPR(rt_value, info);
10776 return img_format("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt);
10781 * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes
10782 * by halfwords to halfword products
10784 * 3 2 1
10785 * 10987654321098765432109876543210
10786 * 001000 x0010010101
10787 * rt -----
10788 * rs -----
10789 * rd -----
10791 static char *MULEU_S_PH_QBL(uint64 instruction, Dis_info *info)
10793 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10794 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10795 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10797 const char *rd = GPR(rd_value, info);
10798 const char *rs = GPR(rs_value, info);
10799 const char *rt = GPR(rt_value, info);
10801 return img_format("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt);
10806 * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes
10807 * by halfwords to halfword products
10809 * 3 2 1
10810 * 10987654321098765432109876543210
10811 * 001000 x0011010101
10812 * rt -----
10813 * rs -----
10814 * rd -----
10816 static char *MULEU_S_PH_QBR(uint64 instruction, Dis_info *info)
10818 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10819 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10820 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10822 const char *rd = GPR(rd_value, info);
10823 const char *rs = GPR(rs_value, info);
10824 const char *rt = GPR(rt_value, info);
10826 return img_format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt);
10831 * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords
10832 * to fractional halfword products
10834 * 3 2 1
10835 * 10987654321098765432109876543210
10836 * 001000 x0100010101
10837 * rt -----
10838 * rs -----
10839 * rd -----
10841 static char *MULQ_RS_PH(uint64 instruction, Dis_info *info)
10843 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10844 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10845 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10847 const char *rd = GPR(rd_value, info);
10848 const char *rs = GPR(rs_value, info);
10849 const char *rt = GPR(rt_value, info);
10851 return img_format("MULQ_RS.PH %s, %s, %s", rd, rs, rt);
10856 * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size
10857 * product with saturation and rounding
10859 * 3 2 1
10860 * 10987654321098765432109876543210
10861 * 001000 x0110010101
10862 * rt -----
10863 * rs -----
10864 * rd -----
10866 static char *MULQ_RS_W(uint64 instruction, Dis_info *info)
10868 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10869 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10870 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10872 const char *rd = GPR(rd_value, info);
10873 const char *rs = GPR(rs_value, info);
10874 const char *rt = GPR(rt_value, info);
10876 return img_format("MULQ_RS.W %s, %s, %s", rd, rs, rt);
10881 * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size
10882 * products
10884 * 3 2 1
10885 * 10987654321098765432109876543210
10886 * 001000 x0101010101
10887 * rt -----
10888 * rs -----
10889 * rd -----
10891 static char *MULQ_S_PH(uint64 instruction, Dis_info *info)
10893 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10894 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10895 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10897 const char *rd = GPR(rd_value, info);
10898 const char *rs = GPR(rs_value, info);
10899 const char *rt = GPR(rt_value, info);
10901 return img_format("MULQ_S.PH %s, %s, %s", rd, rs, rt);
10906 * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product
10907 * with saturation
10909 * 3 2 1
10910 * 10987654321098765432109876543210
10911 * 001000 x0111010101
10912 * rt -----
10913 * rs -----
10914 * rd -----
10916 static char *MULQ_S_W(uint64 instruction, Dis_info *info)
10918 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10919 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10920 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10922 const char *rd = GPR(rd_value, info);
10923 const char *rs = GPR(rs_value, info);
10924 const char *rt = GPR(rt_value, info);
10926 return img_format("MULQ_S.W %s, %s, %s", rd, rs, rt);
10931 * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword
10932 * elements and accumulate
10934 * 3 2 1
10935 * 10987654321098765432109876543210
10936 * 001000 10110010111111
10937 * rt -----
10938 * rs -----
10939 * ac --
10941 static char *MULSA_W_PH(uint64 instruction, Dis_info *info)
10943 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10944 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10945 uint64 ac_value = extract_ac_15_14(instruction);
10947 const char *ac = AC(ac_value, info);
10948 const char *rs = GPR(rs_value, info);
10949 const char *rt = GPR(rt_value, info);
10951 return img_format("MULSA.W.PH %s, %s, %s", ac, rs, rt);
10956 * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional
10957 * halfwords and accumulate
10959 * 3 2 1
10960 * 10987654321098765432109876543210
10961 * 001000 11110010111111
10962 * rt -----
10963 * rs -----
10964 * ac --
10966 static char *MULSAQ_S_W_PH(uint64 instruction, Dis_info *info)
10968 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10969 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10970 uint64 ac_value = extract_ac_15_14(instruction);
10972 const char *ac = AC(ac_value, info);
10973 const char *rs = GPR(rs_value, info);
10974 const char *rt = GPR(rt_value, info);
10976 return img_format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt);
10981 * [DSP] MULT ac, rs, rt - Multiply word
10983 * 3 2 1
10984 * 10987654321098765432109876543210
10985 * 001000 00110010111111
10986 * rt -----
10987 * rs -----
10988 * ac --
10990 static char *MULT_DSP_(uint64 instruction, Dis_info *info)
10992 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10993 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10994 uint64 ac_value = extract_ac_15_14(instruction);
10996 const char *ac = AC(ac_value, info);
10997 const char *rs = GPR(rs_value, info);
10998 const char *rt = GPR(rt_value, info);
11000 return img_format("MULT %s, %s, %s", ac, rs, rt);
11005 * [DSP] MULTU ac, rs, rt - Multiply unsigned word
11007 * 3 2 1
11008 * 10987654321098765432109876543210
11009 * 001000 01110010111111
11010 * rt -----
11011 * rs -----
11012 * ac --
11014 static char *MULTU_DSP_(uint64 instruction, Dis_info *info)
11016 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11017 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11018 uint64 ac_value = extract_ac_15_14(instruction);
11020 const char *ac = AC(ac_value, info);
11021 const char *rs = GPR(rs_value, info);
11022 const char *rt = GPR(rt_value, info);
11024 return img_format("MULTU %s, %s, %s", ac, rs, rt);
11029 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11031 * 3 2 1
11032 * 10987654321098765432109876543210
11033 * 001000 00010001101
11034 * rt -----
11035 * rs -----
11036 * rd -----
11038 static char *MULU(uint64 instruction, Dis_info *info)
11040 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11041 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11042 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11044 const char *rd = GPR(rd_value, info);
11045 const char *rs = GPR(rs_value, info);
11046 const char *rt = GPR(rt_value, info);
11048 return img_format("MULU %s, %s, %s", rd, rs, rt);
11053 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11055 * 3 2 1
11056 * 10987654321098765432109876543210
11057 * 001000 00010001101
11058 * rt -----
11059 * rs -----
11060 * rd -----
11062 static char *NEG_D(uint64 instruction, Dis_info *info)
11064 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11065 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11067 const char *ft = FPR(ft_value, info);
11068 const char *fs = FPR(fs_value, info);
11070 return img_format("NEG.D %s, %s", ft, fs);
11075 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11077 * 3 2 1
11078 * 10987654321098765432109876543210
11079 * 001000 00010001101
11080 * rt -----
11081 * rs -----
11082 * rd -----
11084 static char *NEG_S(uint64 instruction, Dis_info *info)
11086 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11087 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11089 const char *ft = FPR(ft_value, info);
11090 const char *fs = FPR(fs_value, info);
11092 return img_format("NEG.S %s, %s", ft, fs);
11097 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11099 * 3 2 1
11100 * 10987654321098765432109876543210
11101 * 001000 00010001101
11102 * rt -----
11103 * rs -----
11104 * rd -----
11106 static char *NOP_16_(uint64 instruction, Dis_info *info)
11108 (void)instruction;
11110 return g_strdup("NOP ");
11115 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11117 * 3 2 1
11118 * 10987654321098765432109876543210
11119 * 001000 00010001101
11120 * rt -----
11121 * rs -----
11122 * rd -----
11124 static char *NOP_32_(uint64 instruction, Dis_info *info)
11126 (void)instruction;
11128 return g_strdup("NOP ");
11133 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11135 * 3 2 1
11136 * 10987654321098765432109876543210
11137 * 001000 00010001101
11138 * rt -----
11139 * rs -----
11140 * rd -----
11142 static char *NOR(uint64 instruction, Dis_info *info)
11144 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11145 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11146 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11148 const char *rd = GPR(rd_value, info);
11149 const char *rs = GPR(rs_value, info);
11150 const char *rt = GPR(rt_value, info);
11152 return img_format("NOR %s, %s, %s", rd, rs, rt);
11157 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11159 * 3 2 1
11160 * 10987654321098765432109876543210
11161 * 001000 00010001101
11162 * rt -----
11163 * rs -----
11164 * rd -----
11166 static char *NOT_16_(uint64 instruction, Dis_info *info)
11168 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11169 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11171 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
11172 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
11174 return img_format("NOT %s, %s", rt3, rs3);
11179 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11181 * 3 2 1
11182 * 10987654321098765432109876543210
11183 * 001000 00010001101
11184 * rt -----
11185 * rs -----
11186 * rd -----
11188 static char *OR_16_(uint64 instruction, Dis_info *info)
11190 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11191 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11193 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
11194 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
11196 return img_format("OR %s, %s", rs3, rt3);
11201 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11203 * 3 2 1
11204 * 10987654321098765432109876543210
11205 * 001000 00010001101
11206 * rt -----
11207 * rs -----
11208 * rd -----
11210 static char *OR_32_(uint64 instruction, Dis_info *info)
11212 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11213 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11214 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11216 const char *rd = GPR(rd_value, info);
11217 const char *rs = GPR(rs_value, info);
11218 const char *rt = GPR(rt_value, info);
11220 return img_format("OR %s, %s, %s", rd, rs, rt);
11225 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11227 * 3 2 1
11228 * 10987654321098765432109876543210
11229 * 001000 00010001101
11230 * rt -----
11231 * rs -----
11232 * rd -----
11234 static char *ORI(uint64 instruction, Dis_info *info)
11236 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11237 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11238 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11240 const char *rt = GPR(rt_value, info);
11241 const char *rs = GPR(rs_value, info);
11243 return img_format("ORI %s, %s, 0x%" PRIx64, rt, rs, u_value);
11248 * [DSP] PACKRL.PH rd, rs, rt - Pack a word using the right halfword from one
11249 * source register and left halfword from another source register
11251 * 3 2 1
11252 * 10987654321098765432109876543210
11253 * 001000 00010001101
11254 * rt -----
11255 * rs -----
11256 * rd -----
11258 static char *PACKRL_PH(uint64 instruction, Dis_info *info)
11260 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11261 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11262 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11264 const char *rd = GPR(rd_value, info);
11265 const char *rs = GPR(rs_value, info);
11266 const char *rt = GPR(rt_value, info);
11268 return img_format("PACKRL.PH %s, %s, %s", rd, rs, rt);
11273 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11275 * 3 2 1
11276 * 10987654321098765432109876543210
11277 * 001000 00010001101
11278 * rt -----
11279 * rs -----
11280 * rd -----
11282 static char *PAUSE(uint64 instruction, Dis_info *info)
11284 (void)instruction;
11286 return g_strdup("PAUSE ");
11291 * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition
11292 * code bits
11294 * 3 2 1
11295 * 10987654321098765432109876543210
11296 * 001000 00010001101
11297 * rt -----
11298 * rs -----
11299 * rd -----
11301 static char *PICK_PH(uint64 instruction, Dis_info *info)
11303 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11304 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11305 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11307 const char *rd = GPR(rd_value, info);
11308 const char *rs = GPR(rs_value, info);
11309 const char *rt = GPR(rt_value, info);
11311 return img_format("PICK.PH %s, %s, %s", rd, rs, rt);
11316 * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition
11317 * code bits
11319 * 3 2 1
11320 * 10987654321098765432109876543210
11321 * 001000 00010001101
11322 * rt -----
11323 * rs -----
11324 * rd -----
11326 static char *PICK_QB(uint64 instruction, Dis_info *info)
11328 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11329 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11330 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11332 const char *rd = GPR(rd_value, info);
11333 const char *rs = GPR(rs_value, info);
11334 const char *rt = GPR(rt_value, info);
11336 return img_format("PICK.QB %s, %s, %s", rd, rs, rt);
11341 * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element
11342 * of a paired halfword
11344 * 3 2 1
11345 * 10987654321098765432109876543210
11346 * 001000 00010001101
11347 * rt -----
11348 * rs -----
11349 * rd -----
11351 static char *PRECEQ_W_PHL(uint64 instruction, Dis_info *info)
11353 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11354 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11356 const char *rt = GPR(rt_value, info);
11357 const char *rs = GPR(rs_value, info);
11359 return img_format("PRECEQ.W.PHL %s, %s", rt, rs);
11364 * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element
11365 * of a paired halfword
11367 * 3 2 1
11368 * 10987654321098765432109876543210
11369 * 001000 00010001101
11370 * rt -----
11371 * rs -----
11372 * rd -----
11374 static char *PRECEQ_W_PHR(uint64 instruction, Dis_info *info)
11376 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11377 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11379 const char *rt = GPR(rt_value, info);
11380 const char *rs = GPR(rs_value, info);
11382 return img_format("PRECEQ.W.PHR %s, %s", rt, rs);
11387 * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two
11388 * left-alternate elements of a quad byte vector
11390 * 3 2 1
11391 * 10987654321098765432109876543210
11392 * 001000 00010001101
11393 * rt -----
11394 * rs -----
11395 * rd -----
11397 static char *PRECEQU_PH_QBLA(uint64 instruction, Dis_info *info)
11399 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11400 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11402 const char *rt = GPR(rt_value, info);
11403 const char *rs = GPR(rs_value, info);
11405 return img_format("PRECEQU.PH.QBLA %s, %s", rt, rs);
11410 * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most
11411 * elements of a quad byte vector
11413 * 3 2 1
11414 * 10987654321098765432109876543210
11415 * 001000 00010001101
11416 * rt -----
11417 * rs -----
11418 * rd -----
11420 static char *PRECEQU_PH_QBL(uint64 instruction, Dis_info *info)
11422 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11423 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11425 const char *rt = GPR(rt_value, info);
11426 const char *rs = GPR(rs_value, info);
11428 return img_format("PRECEQU.PH.QBL %s, %s", rt, rs);
11433 * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two
11434 * right-alternate elements of a quad byte vector
11436 * 3 2 1
11437 * 10987654321098765432109876543210
11438 * 001000 00010001101
11439 * rt -----
11440 * rs -----
11441 * rd -----
11443 static char *PRECEQU_PH_QBRA(uint64 instruction, Dis_info *info)
11445 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11446 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11448 const char *rt = GPR(rt_value, info);
11449 const char *rs = GPR(rs_value, info);
11451 return img_format("PRECEQU.PH.QBRA %s, %s", rt, rs);
11456 * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most
11457 * elements of a quad byte vector
11459 * 3 2 1
11460 * 10987654321098765432109876543210
11461 * 001000 00010001101
11462 * rt -----
11463 * rs -----
11464 * rd -----
11466 static char *PRECEQU_PH_QBR(uint64 instruction, Dis_info *info)
11468 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11469 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11471 const char *rt = GPR(rt_value, info);
11472 const char *rs = GPR(rs_value, info);
11474 return img_format("PRECEQU.PH.QBR %s, %s", rt, rs);
11479 * [DSP] PRECEU.PH.QBLA rt, rs - Expand the precision of the two
11480 * left-alternate elements of a quad byte vector to four unsigned
11481 * halfwords
11483 * 3 2 1
11484 * 10987654321098765432109876543210
11485 * 001000 00010001101
11486 * rt -----
11487 * rs -----
11488 * rd -----
11490 static char *PRECEU_PH_QBLA(uint64 instruction, Dis_info *info)
11492 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11493 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11495 const char *rt = GPR(rt_value, info);
11496 const char *rs = GPR(rs_value, info);
11498 return img_format("PRECEU.PH.QBLA %s, %s", rt, rs);
11503 * [DSP] PRECEU.PH.QBL rt, rs - Expand the precision of the two left-most
11504 * elements of a quad byte vector to form unsigned halfwords
11506 * 3 2 1
11507 * 10987654321098765432109876543210
11508 * 001000 00010001101
11509 * rt -----
11510 * rs -----
11511 * rd -----
11513 static char *PRECEU_PH_QBL(uint64 instruction, Dis_info *info)
11515 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11516 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11518 const char *rt = GPR(rt_value, info);
11519 const char *rs = GPR(rs_value, info);
11521 return img_format("PRECEU.PH.QBL %s, %s", rt, rs);
11526 * [DSP] PRECEU.PH.QBRA rt, rs - Expand the precision of the two
11527 * right-alternate elements of a quad byte vector to form four
11528 * unsigned halfwords
11530 * 3 2 1
11531 * 10987654321098765432109876543210
11532 * 001000 00010001101
11533 * rt -----
11534 * rs -----
11535 * rd -----
11537 static char *PRECEU_PH_QBRA(uint64 instruction, Dis_info *info)
11539 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11540 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11542 const char *rt = GPR(rt_value, info);
11543 const char *rs = GPR(rs_value, info);
11545 return img_format("PRECEU.PH.QBRA %s, %s", rt, rs);
11550 * [DSP] PRECEU.PH.QBR rt, rs - Expand the precision of the two right-most
11551 * elements of a quad byte vector to form unsigned halfwords
11553 * 3 2 1
11554 * 10987654321098765432109876543210
11555 * 001000 00010001101
11556 * rt -----
11557 * rs -----
11558 * rd -----
11560 static char *PRECEU_PH_QBR(uint64 instruction, Dis_info *info)
11562 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11563 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11565 const char *rt = GPR(rt_value, info);
11566 const char *rs = GPR(rs_value, info);
11568 return img_format("PRECEU.PH.QBR %s, %s", rt, rs);
11573 * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer
11574 * halfwords to four bytes
11576 * 3 2 1
11577 * 10987654321098765432109876543210
11578 * 001000 x0001101101
11579 * rt -----
11580 * rs -----
11581 * rd -----
11583 static char *PRECR_QB_PH(uint64 instruction, Dis_info *info)
11585 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11586 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11587 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11589 const char *rd = GPR(rd_value, info);
11590 const char *rs = GPR(rs_value, info);
11591 const char *rt = GPR(rt_value, info);
11593 return img_format("PRECR.QB.PH %s, %s, %s", rd, rs, rt);
11598 * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer
11599 * words to halfwords after a right shift
11601 * 3 2 1
11602 * 10987654321098765432109876543210
11603 * 001000 x1110000101
11604 * rt -----
11605 * rs -----
11606 * rd -----
11608 static char *PRECR_SRA_PH_W(uint64 instruction, Dis_info *info)
11610 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11611 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11612 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11614 const char *rt = GPR(rt_value, info);
11615 const char *rs = GPR(rs_value, info);
11617 return img_format("PRECR_SRA.PH.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11622 * [DSP] PRECR_SRA_R.PH.W rt, rs, sa - Reduce the precision of two integer
11623 * words to halfwords after a right shift with rounding
11625 * 3 2 1
11626 * 10987654321098765432109876543210
11627 * 001000 x1110000101
11628 * rt -----
11629 * rs -----
11630 * rd -----
11632 static char *PRECR_SRA_R_PH_W(uint64 instruction, Dis_info *info)
11634 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11635 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11636 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11638 const char *rt = GPR(rt_value, info);
11639 const char *rs = GPR(rs_value, info);
11641 return img_format("PRECR_SRA_R.PH.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11646 * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional
11647 * words to fractional halfwords
11649 * 3 2 1
11650 * 10987654321098765432109876543210
11651 * 001000 x1110000101
11652 * rt -----
11653 * rs -----
11654 * rd -----
11656 static char *PRECRQ_PH_W(uint64 instruction, Dis_info *info)
11658 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11659 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11660 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11662 const char *rd = GPR(rd_value, info);
11663 const char *rs = GPR(rs_value, info);
11664 const char *rt = GPR(rt_value, info);
11666 return img_format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt);
11671 * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional
11672 * halfwords to four bytes
11674 * 3 2 1
11675 * 10987654321098765432109876543210
11676 * 001000 x0010101101
11677 * rt -----
11678 * rs -----
11679 * rd -----
11681 static char *PRECRQ_QB_PH(uint64 instruction, Dis_info *info)
11683 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11684 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11685 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11687 const char *rd = GPR(rd_value, info);
11688 const char *rs = GPR(rs_value, info);
11689 const char *rt = GPR(rt_value, info);
11691 return img_format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt);
11696 * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional
11697 * words to halfwords with rounding and saturation
11699 * 3 2 1
11700 * 10987654321098765432109876543210
11701 * 001000 x1110000101
11702 * rt -----
11703 * rs -----
11704 * rd -----
11706 static char *PRECRQ_RS_PH_W(uint64 instruction, Dis_info *info)
11708 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11709 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11710 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11712 const char *rd = GPR(rd_value, info);
11713 const char *rs = GPR(rs_value, info);
11714 const char *rt = GPR(rt_value, info);
11716 return img_format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt);
11721 * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional
11722 * halfwords to unsigned bytes with saturation
11724 * 3 2 1
11725 * 10987654321098765432109876543210
11726 * 001000 x1110000101
11727 * rt -----
11728 * rs -----
11729 * rd -----
11731 static char *PRECRQU_S_QB_PH(uint64 instruction, Dis_info *info)
11733 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11734 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11735 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11737 const char *rd = GPR(rd_value, info);
11738 const char *rs = GPR(rs_value, info);
11739 const char *rt = GPR(rt_value, info);
11741 return img_format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt);
11748 * 3 2 1
11749 * 10987654321098765432109876543210
11750 * 001000 x1110000101
11751 * rt -----
11752 * rs -----
11753 * rd -----
11755 static char *PREF_S9_(uint64 instruction, Dis_info *info)
11757 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11758 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11759 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
11761 const char *rs = GPR(rs_value, info);
11763 return img_format("PREF 0x%" PRIx64 ", %" PRId64 "(%s)",
11764 hint_value, s_value, rs);
11771 * 3 2 1
11772 * 10987654321098765432109876543210
11773 * 001000 x1110000101
11774 * rt -----
11775 * rs -----
11776 * rd -----
11778 static char *PREF_U12_(uint64 instruction, Dis_info *info)
11780 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11781 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11782 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11784 const char *rs = GPR(rs_value, info);
11786 return img_format("PREF 0x%" PRIx64 ", 0x%" PRIx64 "(%s)",
11787 hint_value, u_value, rs);
11794 * 3 2 1
11795 * 10987654321098765432109876543210
11796 * 001000 x1110000101
11797 * rt -----
11798 * rs -----
11799 * rd -----
11801 static char *PREFE(uint64 instruction, Dis_info *info)
11803 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11804 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11805 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
11807 const char *rs = GPR(rs_value, info);
11809 return img_format("PREFE 0x%" PRIx64 ", %" PRId64 "(%s)",
11810 hint_value, s_value, rs);
11815 * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB
11817 * 3 2 1
11818 * 10987654321098765432109876543210
11819 * 001000 x1110000101
11820 * rt -----
11821 * rs -----
11822 * rd -----
11824 static char *PREPEND(uint64 instruction, Dis_info *info)
11826 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11827 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11828 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11830 const char *rt = GPR(rt_value, info);
11831 const char *rs = GPR(rs_value, info);
11833 return img_format("PREPEND %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11838 * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes
11840 * 3 2 1
11841 * 10987654321098765432109876543210
11842 * 001000 1111000100111111
11843 * rt -----
11844 * rs -----
11846 static char *RADDU_W_QB(uint64 instruction, Dis_info *info)
11848 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11849 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11851 const char *rt = GPR(rt_value, info);
11852 const char *rs = GPR(rs_value, info);
11854 return img_format("RADDU.W.QB %s, %s", rt, rs);
11859 * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR
11861 * 3 2 1
11862 * 10987654321098765432109876543210
11863 * 001000 00011001111111
11864 * rt -----
11865 * mask -------
11867 static char *RDDSP(uint64 instruction, Dis_info *info)
11869 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11870 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
11872 const char *rt = GPR(rt_value, info);
11874 return img_format("RDDSP %s, 0x%" PRIx64, rt, mask_value);
11881 * 3 2 1
11882 * 10987654321098765432109876543210
11883 * 001000 x1110000101
11884 * rt -----
11885 * rs -----
11886 * rd -----
11888 static char *RDHWR(uint64 instruction, Dis_info *info)
11890 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11891 uint64 hs_value = extract_hs_20_19_18_17_16(instruction);
11892 uint64 sel_value = extract_sel_13_12_11(instruction);
11894 const char *rt = GPR(rt_value, info);
11896 return img_format("RDHWR %s, CP%" PRIu64 ", 0x%" PRIx64,
11897 rt, hs_value, sel_value);
11904 * 3 2 1
11905 * 10987654321098765432109876543210
11906 * 001000 x1110000101
11907 * rt -----
11908 * rs -----
11909 * rd -----
11911 static char *RDPGPR(uint64 instruction, Dis_info *info)
11913 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11914 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11916 const char *rt = GPR(rt_value, info);
11917 const char *rs = GPR(rs_value, info);
11919 return img_format("RDPGPR %s, %s", rt, rs);
11926 * 3 2 1
11927 * 10987654321098765432109876543210
11928 * 001000 x1110000101
11929 * rt -----
11930 * rs -----
11931 * rd -----
11933 static char *RECIP_D(uint64 instruction, Dis_info *info)
11935 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11936 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11938 const char *ft = FPR(ft_value, info);
11939 const char *fs = FPR(fs_value, info);
11941 return img_format("RECIP.D %s, %s", ft, fs);
11948 * 3 2 1
11949 * 10987654321098765432109876543210
11950 * 001000 x1110000101
11951 * rt -----
11952 * rs -----
11953 * rd -----
11955 static char *RECIP_S(uint64 instruction, Dis_info *info)
11957 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11958 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11960 const char *ft = FPR(ft_value, info);
11961 const char *fs = FPR(fs_value, info);
11963 return img_format("RECIP.S %s, %s", ft, fs);
11968 * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element
11969 * positions
11971 * 3 2 1
11972 * 10987654321098765432109876543210
11973 * 001000 x0000111101
11974 * rt -----
11975 * s ----------
11977 static char *REPL_PH(uint64 instruction, Dis_info *info)
11979 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11980 int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);
11982 const char *rt = GPR(rt_value, info);
11984 return img_format("REPL.PH %s, %" PRId64, rt, s_value);
11989 * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element
11990 * positions
11992 * 3 2 1
11993 * 10987654321098765432109876543210
11994 * 001000 x010111111111
11995 * rt -----
11996 * u --------
11998 static char *REPL_QB(uint64 instruction, Dis_info *info)
12000 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12001 uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction);
12003 const char *rt = GPR(rt_value, info);
12005 return img_format("REPL.QB %s, 0x%" PRIx64, rt, u_value);
12010 * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element
12011 * positions
12013 * 3 2 1
12014 * 10987654321098765432109876543210
12015 * 001000 0000001100111111
12016 * rt -----
12017 * rs -----
12019 static char *REPLV_PH(uint64 instruction, Dis_info *info)
12021 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12022 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12024 const char *rt = GPR(rt_value, info);
12025 const char *rs = GPR(rs_value, info);
12027 return img_format("REPLV.PH %s, %s", rt, rs);
12032 * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions
12034 * 3 2 1
12035 * 10987654321098765432109876543210
12036 * 001000 0001001100111111
12037 * rt -----
12038 * rs -----
12040 static char *REPLV_QB(uint64 instruction, Dis_info *info)
12042 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12043 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12045 const char *rt = GPR(rt_value, info);
12046 const char *rs = GPR(rs_value, info);
12048 return img_format("REPLV.QB %s, %s", rt, rs);
12055 * 3 2 1
12056 * 10987654321098765432109876543210
12057 * 001000 x1110000101
12058 * rt -----
12059 * rs -----
12060 * rd -----
12062 static char *RESTORE_32_(uint64 instruction, Dis_info *info)
12064 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12065 uint64 count_value = extract_count_19_18_17_16(instruction);
12066 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12067 uint64 gp_value = extract_gp_2(instruction);
12069 g_autofree char *save_restore_str = save_restore_list(
12070 rt_value, count_value, gp_value, info);
12071 return img_format("RESTORE 0x%" PRIx64 "%s", u_value, save_restore_str);
12078 * 3 2 1
12079 * 10987654321098765432109876543210
12080 * 001000 x1110000101
12081 * rt -----
12082 * rs -----
12083 * rd -----
12085 static char *RESTORE_JRC_16_(uint64 instruction, Dis_info *info)
12087 uint64 rt1_value = extract_rtl_11(instruction);
12088 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12089 uint64 count_value = extract_count_3_2_1_0(instruction);
12091 g_autofree char *save_restore_str = save_restore_list(
12092 encode_rt1_from_rt(rt1_value), count_value, 0, info);
12093 return img_format("RESTORE.JRC 0x%" PRIx64 "%s", u_value, save_restore_str);
12100 * 3 2 1
12101 * 10987654321098765432109876543210
12102 * 001000 x1110000101
12103 * rt -----
12104 * rs -----
12105 * rd -----
12107 static char *RESTORE_JRC_32_(uint64 instruction, Dis_info *info)
12109 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12110 uint64 count_value = extract_count_19_18_17_16(instruction);
12111 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12112 uint64 gp_value = extract_gp_2(instruction);
12114 g_autofree char *save_restore_str = save_restore_list(
12115 rt_value, count_value, gp_value, info);
12116 return img_format("RESTORE.JRC 0x%" PRIx64 "%s", u_value,
12117 save_restore_str);
12124 * 3 2 1
12125 * 10987654321098765432109876543210
12126 * 001000 x1110000101
12127 * rt -----
12128 * rs -----
12129 * rd -----
12131 static char *RESTOREF(uint64 instruction, Dis_info *info)
12133 uint64 count_value = extract_count_19_18_17_16(instruction);
12134 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12137 return img_format("RESTOREF 0x%" PRIx64 ", 0x%" PRIx64,
12138 u_value, count_value);
12145 * 3 2 1
12146 * 10987654321098765432109876543210
12147 * 001000 x1110000101
12148 * rt -----
12149 * rs -----
12150 * rd -----
12152 static char *RINT_D(uint64 instruction, Dis_info *info)
12154 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12155 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12157 const char *ft = FPR(ft_value, info);
12158 const char *fs = FPR(fs_value, info);
12160 return img_format("RINT.D %s, %s", ft, fs);
12167 * 3 2 1
12168 * 10987654321098765432109876543210
12169 * 001000 x1110000101
12170 * rt -----
12171 * rs -----
12172 * rd -----
12174 static char *RINT_S(uint64 instruction, Dis_info *info)
12176 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12177 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12179 const char *ft = FPR(ft_value, info);
12180 const char *fs = FPR(fs_value, info);
12182 return img_format("RINT.S %s, %s", ft, fs);
12189 * 3 2 1
12190 * 10987654321098765432109876543210
12191 * 001000 x1110000101
12192 * rt -----
12193 * rs -----
12194 * rd -----
12196 static char *ROTR(uint64 instruction, Dis_info *info)
12198 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12199 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12200 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12202 const char *rt = GPR(rt_value, info);
12203 const char *rs = GPR(rs_value, info);
12205 return img_format("ROTR %s, %s, 0x%" PRIx64, rt, rs, shift_value);
12212 * 3 2 1
12213 * 10987654321098765432109876543210
12214 * 001000 x1110000101
12215 * rt -----
12216 * rs -----
12217 * rd -----
12219 static char *ROTRV(uint64 instruction, Dis_info *info)
12221 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12222 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12223 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12225 const char *rd = GPR(rd_value, info);
12226 const char *rs = GPR(rs_value, info);
12227 const char *rt = GPR(rt_value, info);
12229 return img_format("ROTRV %s, %s, %s", rd, rs, rt);
12236 * 3 2 1
12237 * 10987654321098765432109876543210
12238 * 001000 x1110000101
12239 * rt -----
12240 * rs -----
12241 * rd -----
12243 static char *ROTX(uint64 instruction, Dis_info *info)
12245 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12246 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12247 uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
12248 uint64 stripe_value = extract_stripe_6(instruction);
12249 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12251 const char *rt = GPR(rt_value, info);
12252 const char *rs = GPR(rs_value, info);
12254 return img_format("ROTX %s, %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
12255 rt, rs, shift_value, shiftx_value, stripe_value);
12262 * 3 2 1
12263 * 10987654321098765432109876543210
12264 * 001000 x1110000101
12265 * rt -----
12266 * rs -----
12267 * rd -----
12269 static char *ROUND_L_D(uint64 instruction, Dis_info *info)
12271 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12272 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12274 const char *ft = FPR(ft_value, info);
12275 const char *fs = FPR(fs_value, info);
12277 return img_format("ROUND.L.D %s, %s", ft, fs);
12284 * 3 2 1
12285 * 10987654321098765432109876543210
12286 * 001000 x1110000101
12287 * rt -----
12288 * rs -----
12289 * rd -----
12291 static char *ROUND_L_S(uint64 instruction, Dis_info *info)
12293 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12294 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12296 const char *ft = FPR(ft_value, info);
12297 const char *fs = FPR(fs_value, info);
12299 return img_format("ROUND.L.S %s, %s", ft, fs);
12306 * 3 2 1
12307 * 10987654321098765432109876543210
12308 * 001000 x1110000101
12309 * rt -----
12310 * rs -----
12311 * rd -----
12313 static char *ROUND_W_D(uint64 instruction, Dis_info *info)
12315 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12316 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12318 const char *ft = FPR(ft_value, info);
12319 const char *fs = FPR(fs_value, info);
12321 return img_format("ROUND.W.D %s, %s", ft, fs);
12328 * 3 2 1
12329 * 10987654321098765432109876543210
12330 * 001000 x1110000101
12331 * rt -----
12332 * rs -----
12333 * rd -----
12335 static char *ROUND_W_S(uint64 instruction, Dis_info *info)
12337 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12338 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12340 const char *ft = FPR(ft_value, info);
12341 const char *fs = FPR(fs_value, info);
12343 return img_format("ROUND.W.S %s, %s", ft, fs);
12350 * 3 2 1
12351 * 10987654321098765432109876543210
12352 * 001000 x1110000101
12353 * rt -----
12354 * rs -----
12355 * rd -----
12357 static char *RSQRT_D(uint64 instruction, Dis_info *info)
12359 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12360 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12362 const char *ft = FPR(ft_value, info);
12363 const char *fs = FPR(fs_value, info);
12365 return img_format("RSQRT.D %s, %s", ft, fs);
12372 * 3 2 1
12373 * 10987654321098765432109876543210
12374 * 001000 x1110000101
12375 * rt -----
12376 * rs -----
12377 * rd -----
12379 static char *RSQRT_S(uint64 instruction, Dis_info *info)
12381 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12382 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12384 const char *ft = FPR(ft_value, info);
12385 const char *fs = FPR(fs_value, info);
12387 return img_format("RSQRT.S %s, %s", ft, fs);
12394 * 3 2 1
12395 * 10987654321098765432109876543210
12396 * 001000 01001001101
12397 * rt -----
12398 * rs -----
12399 * rd -----
12401 static char *SAVE_16_(uint64 instruction, Dis_info *info)
12403 uint64 rt1_value = extract_rtl_11(instruction);
12404 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12405 uint64 count_value = extract_count_3_2_1_0(instruction);
12407 g_autofree char *save_restore_str = save_restore_list(
12408 encode_rt1_from_rt(rt1_value), count_value, 0, info);
12409 return img_format("SAVE 0x%" PRIx64 "%s", u_value, save_restore_str);
12416 * 3 2 1
12417 * 10987654321098765432109876543210
12418 * 001000 01001001101
12419 * rt -----
12420 * rs -----
12421 * rd -----
12423 static char *SAVE_32_(uint64 instruction, Dis_info *info)
12425 uint64 count_value = extract_count_19_18_17_16(instruction);
12426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12427 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12428 uint64 gp_value = extract_gp_2(instruction);
12430 g_autofree char *save_restore_str = save_restore_list(
12431 rt_value, count_value, gp_value, info);
12432 return img_format("SAVE 0x%" PRIx64 "%s", u_value, save_restore_str);
12439 * 3 2 1
12440 * 10987654321098765432109876543210
12441 * 001000 01001001101
12442 * rt -----
12443 * rs -----
12444 * rd -----
12446 static char *SAVEF(uint64 instruction, Dis_info *info)
12448 uint64 count_value = extract_count_19_18_17_16(instruction);
12449 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12452 return img_format("SAVEF 0x%" PRIx64 ", 0x%" PRIx64, u_value, count_value);
12459 * 3 2 1
12460 * 10987654321098765432109876543210
12461 * 001000 01001001101
12462 * rt -----
12463 * rs -----
12464 * rd -----
12466 static char *SB_16_(uint64 instruction, Dis_info *info)
12468 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
12469 uint64 rs3_value = extract_rs3_6_5_4(instruction);
12470 uint64 u_value = extract_u_1_0(instruction);
12472 const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
12473 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
12475 return img_format("SB %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
12482 * 3 2 1
12483 * 10987654321098765432109876543210
12484 * 001000 01001001101
12485 * rt -----
12486 * rs -----
12487 * rd -----
12489 static char *SB_GP_(uint64 instruction, Dis_info *info)
12491 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12492 uint64 u_value = extract_u_17_to_0(instruction);
12494 const char *rt = GPR(rt_value, info);
12496 return img_format("SB %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
12503 * 3 2 1
12504 * 10987654321098765432109876543210
12505 * 001000 01001001101
12506 * rt -----
12507 * rs -----
12508 * rd -----
12510 static char *SB_S9_(uint64 instruction, Dis_info *info)
12512 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12513 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12514 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12516 const char *rt = GPR(rt_value, info);
12517 const char *rs = GPR(rs_value, info);
12519 return img_format("SB %s, %" PRId64 "(%s)", rt, s_value, rs);
12526 * 3 2 1
12527 * 10987654321098765432109876543210
12528 * 001000 01001001101
12529 * rt -----
12530 * rs -----
12531 * rd -----
12533 static char *SB_U12_(uint64 instruction, Dis_info *info)
12535 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12536 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12537 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12539 const char *rt = GPR(rt_value, info);
12540 const char *rs = GPR(rs_value, info);
12542 return img_format("SB %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
12549 * 3 2 1
12550 * 10987654321098765432109876543210
12551 * 001000 01001001101
12552 * rt -----
12553 * rs -----
12554 * rd -----
12556 static char *SBE(uint64 instruction, Dis_info *info)
12558 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12559 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12560 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12562 const char *rt = GPR(rt_value, info);
12563 const char *rs = GPR(rs_value, info);
12565 return img_format("SBE %s, %" PRId64 "(%s)", rt, s_value, rs);
12572 * 3 2 1
12573 * 10987654321098765432109876543210
12574 * 001000 01001001101
12575 * rt -----
12576 * rs -----
12577 * rd -----
12579 static char *SBX(uint64 instruction, Dis_info *info)
12581 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12582 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12583 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12585 const char *rd = GPR(rd_value, info);
12586 const char *rs = GPR(rs_value, info);
12587 const char *rt = GPR(rt_value, info);
12589 return img_format("SBX %s, %s(%s)", rd, rs, rt);
12596 * 3 2 1
12597 * 10987654321098765432109876543210
12598 * 001000 01001001101
12599 * rt -----
12600 * rs -----
12601 * rd -----
12603 static char *SC(uint64 instruction, Dis_info *info)
12605 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12606 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12607 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
12609 const char *rt = GPR(rt_value, info);
12610 const char *rs = GPR(rs_value, info);
12612 return img_format("SC %s, %" PRId64 "(%s)", rt, s_value, rs);
12619 * 3 2 1
12620 * 10987654321098765432109876543210
12621 * 001000 01001001101
12622 * rt -----
12623 * rs -----
12624 * rd -----
12626 static char *SCD(uint64 instruction, Dis_info *info)
12628 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12629 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12630 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
12632 const char *rt = GPR(rt_value, info);
12633 const char *rs = GPR(rs_value, info);
12635 return img_format("SCD %s, %" PRId64 "(%s)", rt, s_value, rs);
12642 * 3 2 1
12643 * 10987654321098765432109876543210
12644 * 001000 01001001101
12645 * rt -----
12646 * rs -----
12647 * rd -----
12649 static char *SCDP(uint64 instruction, Dis_info *info)
12651 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12652 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12653 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12655 const char *rt = GPR(rt_value, info);
12656 const char *ru = GPR(ru_value, info);
12657 const char *rs = GPR(rs_value, info);
12659 return img_format("SCDP %s, %s, (%s)", rt, ru, rs);
12666 * 3 2 1
12667 * 10987654321098765432109876543210
12668 * 001000 01001001101
12669 * rt -----
12670 * rs -----
12671 * rd -----
12673 static char *SCE(uint64 instruction, Dis_info *info)
12675 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12676 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12677 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
12679 const char *rt = GPR(rt_value, info);
12680 const char *rs = GPR(rs_value, info);
12682 return img_format("SCE %s, %" PRId64 "(%s)", rt, s_value, rs);
12689 * 3 2 1
12690 * 10987654321098765432109876543210
12691 * 001000 01001001101
12692 * rt -----
12693 * rs -----
12694 * rd -----
12696 static char *SCWP(uint64 instruction, Dis_info *info)
12698 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12699 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12700 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12702 const char *rt = GPR(rt_value, info);
12703 const char *ru = GPR(ru_value, info);
12704 const char *rs = GPR(rs_value, info);
12706 return img_format("SCWP %s, %s, (%s)", rt, ru, rs);
12713 * 3 2 1
12714 * 10987654321098765432109876543210
12715 * 001000 01001001101
12716 * rt -----
12717 * rs -----
12718 * rd -----
12720 static char *SCWPE(uint64 instruction, Dis_info *info)
12722 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12723 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12724 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12726 const char *rt = GPR(rt_value, info);
12727 const char *ru = GPR(ru_value, info);
12728 const char *rs = GPR(rs_value, info);
12730 return img_format("SCWPE %s, %s, (%s)", rt, ru, rs);
12737 * 3 2 1
12738 * 10987654321098765432109876543210
12739 * 001000 01001001101
12740 * rt -----
12741 * rs -----
12742 * rd -----
12744 static char *SD_GP_(uint64 instruction, Dis_info *info)
12746 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12747 uint64 u_value = extract_u_20_to_3__s3(instruction);
12749 const char *rt = GPR(rt_value, info);
12751 return img_format("SD %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
12758 * 3 2 1
12759 * 10987654321098765432109876543210
12760 * 001000 01001001101
12761 * rt -----
12762 * rs -----
12763 * rd -----
12765 static char *SD_S9_(uint64 instruction, Dis_info *info)
12767 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12768 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12769 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12771 const char *rt = GPR(rt_value, info);
12772 const char *rs = GPR(rs_value, info);
12774 return img_format("SD %s, %" PRId64 "(%s)", rt, s_value, rs);
12781 * 3 2 1
12782 * 10987654321098765432109876543210
12783 * 001000 01001001101
12784 * rt -----
12785 * rs -----
12786 * rd -----
12788 static char *SD_U12_(uint64 instruction, Dis_info *info)
12790 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12791 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12792 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12794 const char *rt = GPR(rt_value, info);
12795 const char *rs = GPR(rs_value, info);
12797 return img_format("SD %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
12804 * 3 2 1
12805 * 10987654321098765432109876543210
12806 * 001000 01001001101
12807 * rt -----
12808 * rs -----
12809 * rd -----
12811 static char *SDBBP_16_(uint64 instruction, Dis_info *info)
12813 uint64 code_value = extract_code_2_1_0(instruction);
12816 return img_format("SDBBP 0x%" PRIx64, code_value);
12823 * 3 2 1
12824 * 10987654321098765432109876543210
12825 * 001000 01001001101
12826 * rt -----
12827 * rs -----
12828 * rd -----
12830 static char *SDBBP_32_(uint64 instruction, Dis_info *info)
12832 uint64 code_value = extract_code_18_to_0(instruction);
12835 return img_format("SDBBP 0x%" PRIx64, code_value);
12842 * 3 2 1
12843 * 10987654321098765432109876543210
12844 * 001000 01001001101
12845 * rt -----
12846 * rs -----
12847 * rd -----
12849 static char *SDC1_GP_(uint64 instruction, Dis_info *info)
12851 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12852 uint64 u_value = extract_u_17_to_2__s2(instruction);
12854 const char *ft = FPR(ft_value, info);
12856 return img_format("SDC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
12863 * 3 2 1
12864 * 10987654321098765432109876543210
12865 * 001000 01001001101
12866 * rt -----
12867 * rs -----
12868 * rd -----
12870 static char *SDC1_S9_(uint64 instruction, Dis_info *info)
12872 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12873 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12874 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12876 const char *ft = FPR(ft_value, info);
12877 const char *rs = GPR(rs_value, info);
12879 return img_format("SDC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
12886 * 3 2 1
12887 * 10987654321098765432109876543210
12888 * 001000 01001001101
12889 * rt -----
12890 * rs -----
12891 * rd -----
12893 static char *SDC1_U12_(uint64 instruction, Dis_info *info)
12895 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12896 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12897 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12899 const char *ft = FPR(ft_value, info);
12900 const char *rs = GPR(rs_value, info);
12902 return img_format("SDC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
12909 * 3 2 1
12910 * 10987654321098765432109876543210
12911 * 001000 01001001101
12912 * rt -----
12913 * rs -----
12914 * rd -----
12916 static char *SDC1X(uint64 instruction, Dis_info *info)
12918 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12919 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12920 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
12922 const char *ft = FPR(ft_value, info);
12923 const char *rs = GPR(rs_value, info);
12924 const char *rt = GPR(rt_value, info);
12926 return img_format("SDC1X %s, %s(%s)", ft, rs, rt);
12933 * 3 2 1
12934 * 10987654321098765432109876543210
12935 * 001000 01001001101
12936 * rt -----
12937 * rs -----
12938 * rd -----
12940 static char *SDC1XS(uint64 instruction, Dis_info *info)
12942 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12943 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12944 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
12946 const char *ft = FPR(ft_value, info);
12947 const char *rs = GPR(rs_value, info);
12948 const char *rt = GPR(rt_value, info);
12950 return img_format("SDC1XS %s, %s(%s)", ft, rs, rt);
12957 * 3 2 1
12958 * 10987654321098765432109876543210
12959 * 001000 01001001101
12960 * rt -----
12961 * rs -----
12962 * rd -----
12964 static char *SDC2(uint64 instruction, Dis_info *info)
12966 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
12967 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12968 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12970 const char *rs = GPR(rs_value, info);
12972 return img_format("SDC2 CP%" PRIu64 ", %" PRId64 "(%s)",
12973 cs_value, s_value, rs);
12980 * 3 2 1
12981 * 10987654321098765432109876543210
12982 * 001000 01001001101
12983 * rt -----
12984 * rs -----
12985 * rd -----
12987 static char *SDM(uint64 instruction, Dis_info *info)
12989 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12990 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12991 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12992 uint64 count3_value = extract_count3_14_13_12(instruction);
12994 const char *rt = GPR(rt_value, info);
12995 const char *rs = GPR(rs_value, info);
12996 uint64 count3 = encode_count3_from_count(count3_value);
12998 return img_format("SDM %s, %" PRId64 "(%s), 0x%" PRIx64,
12999 rt, s_value, rs, count3);
13006 * 3 2 1
13007 * 10987654321098765432109876543210
13008 * 001000 01001001101
13009 * rt -----
13010 * rs -----
13011 * rd -----
13013 static char *SDPC_48_(uint64 instruction, Dis_info *info)
13015 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
13016 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
13018 const char *rt = GPR(rt_value, info);
13019 g_autofree char *s = ADDRESS(s_value, 6, info);
13021 return img_format("SDPC %s, %s", rt, s);
13028 * 3 2 1
13029 * 10987654321098765432109876543210
13030 * 001000 01001001101
13031 * rt -----
13032 * rs -----
13033 * rd -----
13035 static char *SDXS(uint64 instruction, Dis_info *info)
13037 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13038 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13039 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13041 const char *rd = GPR(rd_value, info);
13042 const char *rs = GPR(rs_value, info);
13043 const char *rt = GPR(rt_value, info);
13045 return img_format("SDXS %s, %s(%s)", rd, rs, rt);
13052 * 3 2 1
13053 * 10987654321098765432109876543210
13054 * 001000 01001001101
13055 * rt -----
13056 * rs -----
13057 * rd -----
13059 static char *SDX(uint64 instruction, Dis_info *info)
13061 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13062 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13063 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13065 const char *rd = GPR(rd_value, info);
13066 const char *rs = GPR(rs_value, info);
13067 const char *rt = GPR(rt_value, info);
13069 return img_format("SDX %s, %s(%s)", rd, rs, rt);
13076 * 3 2 1
13077 * 10987654321098765432109876543210
13078 * 001000 01001001101
13079 * rt -----
13080 * rs -----
13081 * rd -----
13083 static char *SEB(uint64 instruction, Dis_info *info)
13085 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13086 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13088 const char *rt = GPR(rt_value, info);
13089 const char *rs = GPR(rs_value, info);
13091 return img_format("SEB %s, %s", rt, rs);
13098 * 3 2 1
13099 * 10987654321098765432109876543210
13100 * 001000 01001001101
13101 * rt -----
13102 * rs -----
13103 * rd -----
13105 static char *SEH(uint64 instruction, Dis_info *info)
13107 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13108 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13110 const char *rt = GPR(rt_value, info);
13111 const char *rs = GPR(rs_value, info);
13113 return img_format("SEH %s, %s", rt, rs);
13120 * 3 2 1
13121 * 10987654321098765432109876543210
13122 * 001000 01001001101
13123 * rt -----
13124 * rs -----
13125 * rd -----
13127 static char *SEL_D(uint64 instruction, Dis_info *info)
13129 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13130 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13131 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13133 const char *fd = FPR(fd_value, info);
13134 const char *fs = FPR(fs_value, info);
13135 const char *ft = FPR(ft_value, info);
13137 return img_format("SEL.D %s, %s, %s", fd, fs, ft);
13144 * 3 2 1
13145 * 10987654321098765432109876543210
13146 * 001000 01001001101
13147 * rt -----
13148 * rs -----
13149 * rd -----
13151 static char *SEL_S(uint64 instruction, Dis_info *info)
13153 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13154 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13155 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13157 const char *fd = FPR(fd_value, info);
13158 const char *fs = FPR(fs_value, info);
13159 const char *ft = FPR(ft_value, info);
13161 return img_format("SEL.S %s, %s, %s", fd, fs, ft);
13168 * 3 2 1
13169 * 10987654321098765432109876543210
13170 * 001000 01001001101
13171 * rt -----
13172 * rs -----
13173 * rd -----
13175 static char *SELEQZ_D(uint64 instruction, Dis_info *info)
13177 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13178 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13179 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13181 const char *fd = FPR(fd_value, info);
13182 const char *fs = FPR(fs_value, info);
13183 const char *ft = FPR(ft_value, info);
13185 return img_format("SELEQZ.D %s, %s, %s", fd, fs, ft);
13192 * 3 2 1
13193 * 10987654321098765432109876543210
13194 * 001000 01001001101
13195 * rt -----
13196 * rs -----
13197 * rd -----
13199 static char *SELEQZ_S(uint64 instruction, Dis_info *info)
13201 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13202 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13203 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13205 const char *fd = FPR(fd_value, info);
13206 const char *fs = FPR(fs_value, info);
13207 const char *ft = FPR(ft_value, info);
13209 return img_format("SELEQZ.S %s, %s, %s", fd, fs, ft);
13216 * 3 2 1
13217 * 10987654321098765432109876543210
13218 * 001000 01001001101
13219 * rt -----
13220 * rs -----
13221 * rd -----
13223 static char *SELNEZ_D(uint64 instruction, Dis_info *info)
13225 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13226 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13227 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13229 const char *fd = FPR(fd_value, info);
13230 const char *fs = FPR(fs_value, info);
13231 const char *ft = FPR(ft_value, info);
13233 return img_format("SELNEZ.D %s, %s, %s", fd, fs, ft);
13240 * 3 2 1
13241 * 10987654321098765432109876543210
13242 * 001000 01001001101
13243 * rt -----
13244 * rs -----
13245 * rd -----
13247 static char *SELNEZ_S(uint64 instruction, Dis_info *info)
13249 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13250 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13251 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13253 const char *fd = FPR(fd_value, info);
13254 const char *fs = FPR(fs_value, info);
13255 const char *ft = FPR(ft_value, info);
13257 return img_format("SELNEZ.S %s, %s, %s", fd, fs, ft);
13264 * 3 2 1
13265 * 10987654321098765432109876543210
13266 * 001000 01001001101
13267 * rt -----
13268 * rs -----
13269 * rd -----
13271 static char *SEQI(uint64 instruction, Dis_info *info)
13273 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13274 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13275 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13277 const char *rt = GPR(rt_value, info);
13278 const char *rs = GPR(rs_value, info);
13280 return img_format("SEQI %s, %s, 0x%" PRIx64, rt, rs, u_value);
13287 * 3 2 1
13288 * 10987654321098765432109876543210
13289 * 001000 01001001101
13290 * rt -----
13291 * rs -----
13292 * rd -----
13294 static char *SH_16_(uint64 instruction, Dis_info *info)
13296 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
13297 uint64 rs3_value = extract_rs3_6_5_4(instruction);
13298 uint64 u_value = extract_u_2_1__s1(instruction);
13300 const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
13301 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
13303 return img_format("SH %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
13310 * 3 2 1
13311 * 10987654321098765432109876543210
13312 * 001000 01001001101
13313 * rt -----
13314 * rs -----
13315 * rd -----
13317 static char *SH_GP_(uint64 instruction, Dis_info *info)
13319 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13320 uint64 u_value = extract_u_17_to_1__s1(instruction);
13322 const char *rt = GPR(rt_value, info);
13324 return img_format("SH %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
13331 * 3 2 1
13332 * 10987654321098765432109876543210
13333 * 001000 01001001101
13334 * rt -----
13335 * rs -----
13336 * rd -----
13338 static char *SH_S9_(uint64 instruction, Dis_info *info)
13340 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13341 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13342 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13344 const char *rt = GPR(rt_value, info);
13345 const char *rs = GPR(rs_value, info);
13347 return img_format("SH %s, %" PRId64 "(%s)", rt, s_value, rs);
13354 * 3 2 1
13355 * 10987654321098765432109876543210
13356 * 001000 01001001101
13357 * rt -----
13358 * rs -----
13359 * rd -----
13361 static char *SH_U12_(uint64 instruction, Dis_info *info)
13363 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13364 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13365 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13367 const char *rt = GPR(rt_value, info);
13368 const char *rs = GPR(rs_value, info);
13370 return img_format("SH %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
13377 * 3 2 1
13378 * 10987654321098765432109876543210
13379 * 001000 01001001101
13380 * rt -----
13381 * rs -----
13382 * rd -----
13384 static char *SHE(uint64 instruction, Dis_info *info)
13386 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13387 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13388 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13390 const char *rt = GPR(rt_value, info);
13391 const char *rs = GPR(rs_value, info);
13393 return img_format("SHE %s, %" PRId64 "(%s)", rt, s_value, rs);
13398 * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in
13399 * the same accumulator
13401 * 3 2 1
13402 * 10987654321098765432109876543210
13403 * 001000xxxx xxxx0000011101
13404 * shift ------
13405 * ac --
13407 static char *SHILO(uint64 instruction, Dis_info *info)
13409 int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
13410 uint64 ac_value = extract_ac_15_14(instruction);
13412 const char *ac = AC(ac_value, info);
13414 return img_format("SHILO %s, 0x%" PRIx64, ac, shift_value);
13419 * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result
13420 * in the same accumulator
13422 * 3 2 1
13423 * 10987654321098765432109876543210
13424 * 001000xxxxx 01001001111111
13425 * rs -----
13426 * ac --
13428 static char *SHILOV(uint64 instruction, Dis_info *info)
13430 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13431 uint64 ac_value = extract_ac_15_14(instruction);
13433 const char *rs = GPR(rs_value, info);
13434 const char *ac = AC(ac_value, info);
13436 return img_format("SHILOV %s, %s", ac, rs);
13441 * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords
13443 * 3 2 1
13444 * 10987654321098765432109876543210
13445 * 001000 001110110101
13446 * rt -----
13447 * rs -----
13448 * sa ----
13450 static char *SHLL_PH(uint64 instruction, Dis_info *info)
13452 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13453 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13454 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13456 const char *rt = GPR(rt_value, info);
13457 const char *rs = GPR(rs_value, info);
13459 return img_format("SHLL.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13464 * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes
13466 * 3 2 1
13467 * 10987654321098765432109876543210
13468 * 001000 0100001111111
13469 * rt -----
13470 * rs -----
13471 * sa ---
13473 static char *SHLL_QB(uint64 instruction, Dis_info *info)
13475 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13476 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13477 uint64 sa_value = extract_sa_15_14_13(instruction);
13479 const char *rt = GPR(rt_value, info);
13480 const char *rs = GPR(rs_value, info);
13482 return img_format("SHLL.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13487 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords
13488 * with saturation
13490 * 3 2 1
13491 * 10987654321098765432109876543210
13492 * 001000 001110110101
13493 * rt -----
13494 * rs -----
13495 * sa ----
13497 static char *SHLL_S_PH(uint64 instruction, Dis_info *info)
13499 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13500 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13501 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13503 const char *rt = GPR(rt_value, info);
13504 const char *rs = GPR(rs_value, info);
13506 return img_format("SHLL_S.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13511 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation
13513 * 3 2 1
13514 * 10987654321098765432109876543210
13515 * 001000 x1111110101
13516 * rt -----
13517 * rs -----
13518 * sa -----
13520 static char *SHLL_S_W(uint64 instruction, Dis_info *info)
13522 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13523 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13524 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
13526 const char *rt = GPR(rt_value, info);
13527 const char *rs = GPR(rs_value, info);
13529 return img_format("SHLL_S.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13534 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
13535 * halfwords
13537 * 3 2 1
13538 * 10987654321098765432109876543210
13539 * 001000 01110001101
13540 * rt -----
13541 * rs -----
13542 * rd -----
13544 static char *SHLLV_PH(uint64 instruction, Dis_info *info)
13546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13548 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13550 const char *rd = GPR(rd_value, info);
13551 const char *rt = GPR(rt_value, info);
13552 const char *rs = GPR(rs_value, info);
13554 return img_format("SHLLV.PH %s, %s, %s", rd, rt, rs);
13559 * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes
13561 * 3 2 1
13562 * 10987654321098765432109876543210
13563 * 001000 x1110010101
13564 * rt -----
13565 * rs -----
13566 * rd -----
13568 static char *SHLLV_QB(uint64 instruction, Dis_info *info)
13570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13572 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13574 const char *rd = GPR(rd_value, info);
13575 const char *rt = GPR(rt_value, info);
13576 const char *rs = GPR(rs_value, info);
13578 return img_format("SHLLV.QB %s, %s, %s", rd, rt, rs);
13583 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
13584 * halfwords with saturation
13586 * 3 2 1
13587 * 10987654321098765432109876543210
13588 * 001000 11110001101
13589 * rt -----
13590 * rs -----
13591 * rd -----
13593 static char *SHLLV_S_PH(uint64 instruction, Dis_info *info)
13595 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13596 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13597 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13599 const char *rd = GPR(rd_value, info);
13600 const char *rt = GPR(rt_value, info);
13601 const char *rs = GPR(rs_value, info);
13603 return img_format("SHLLV_S.PH %s, %s, %s", rd, rt, rs);
13608 * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word
13610 * 3 2 1
13611 * 10987654321098765432109876543210
13612 * 001000 x1111010101
13613 * rt -----
13614 * rs -----
13615 * rd -----
13617 static char *SHLLV_S_W(uint64 instruction, Dis_info *info)
13619 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13620 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13621 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13623 const char *rd = GPR(rd_value, info);
13624 const char *rt = GPR(rt_value, info);
13625 const char *rs = GPR(rs_value, info);
13627 return img_format("SHLLV_S.W %s, %s, %s", rd, rt, rs);
13634 * 3 2 1
13635 * 10987654321098765432109876543210
13636 * 001000 01001001101
13637 * rt -----
13638 * rs -----
13639 * rd -----
13641 static char *SHRA_PH(uint64 instruction, Dis_info *info)
13643 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13644 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13645 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13647 const char *rt = GPR(rt_value, info);
13648 const char *rs = GPR(rs_value, info);
13650 return img_format("SHRA.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13657 * 3 2 1
13658 * 10987654321098765432109876543210
13659 * 001000 01001001101
13660 * rt -----
13661 * rs -----
13662 * rd -----
13664 static char *SHRA_QB(uint64 instruction, Dis_info *info)
13666 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13667 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13668 uint64 sa_value = extract_sa_15_14_13(instruction);
13670 const char *rt = GPR(rt_value, info);
13671 const char *rs = GPR(rs_value, info);
13673 return img_format("SHRA.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13680 * 3 2 1
13681 * 10987654321098765432109876543210
13682 * 001000 01001001101
13683 * rt -----
13684 * rs -----
13685 * rd -----
13687 static char *SHRA_R_PH(uint64 instruction, Dis_info *info)
13689 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13690 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13691 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13693 const char *rt = GPR(rt_value, info);
13694 const char *rs = GPR(rs_value, info);
13696 return img_format("SHRA_R.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13703 * 3 2 1
13704 * 10987654321098765432109876543210
13705 * 001000 01001001101
13706 * rt -----
13707 * rs -----
13708 * rd -----
13710 static char *SHRA_R_QB(uint64 instruction, Dis_info *info)
13712 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13713 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13714 uint64 sa_value = extract_sa_15_14_13(instruction);
13716 const char *rt = GPR(rt_value, info);
13717 const char *rs = GPR(rs_value, info);
13719 return img_format("SHRA_R.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13726 * 3 2 1
13727 * 10987654321098765432109876543210
13728 * 001000 01001001101
13729 * rt -----
13730 * rs -----
13731 * rd -----
13733 static char *SHRA_R_W(uint64 instruction, Dis_info *info)
13735 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13736 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13737 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
13739 const char *rt = GPR(rt_value, info);
13740 const char *rs = GPR(rs_value, info);
13742 return img_format("SHRA_R.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13749 * 3 2 1
13750 * 10987654321098765432109876543210
13751 * 001000 01001001101
13752 * rt -----
13753 * rs -----
13754 * rd -----
13756 static char *SHRAV_PH(uint64 instruction, Dis_info *info)
13758 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13759 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13760 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13762 const char *rd = GPR(rd_value, info);
13763 const char *rt = GPR(rt_value, info);
13764 const char *rs = GPR(rs_value, info);
13766 return img_format("SHRAV.PH %s, %s, %s", rd, rt, rs);
13773 * 3 2 1
13774 * 10987654321098765432109876543210
13775 * 001000 01001001101
13776 * rt -----
13777 * rs -----
13778 * rd -----
13780 static char *SHRAV_QB(uint64 instruction, Dis_info *info)
13782 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13783 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13784 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13786 const char *rd = GPR(rd_value, info);
13787 const char *rt = GPR(rt_value, info);
13788 const char *rs = GPR(rs_value, info);
13790 return img_format("SHRAV.QB %s, %s, %s", rd, rt, rs);
13797 * 3 2 1
13798 * 10987654321098765432109876543210
13799 * 001000 01001001101
13800 * rt -----
13801 * rs -----
13802 * rd -----
13804 static char *SHRAV_R_PH(uint64 instruction, Dis_info *info)
13806 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13807 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13808 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13810 const char *rd = GPR(rd_value, info);
13811 const char *rt = GPR(rt_value, info);
13812 const char *rs = GPR(rs_value, info);
13814 return img_format("SHRAV_R.PH %s, %s, %s", rd, rt, rs);
13821 * 3 2 1
13822 * 10987654321098765432109876543210
13823 * 001000 01001001101
13824 * rt -----
13825 * rs -----
13826 * rd -----
13828 static char *SHRAV_R_QB(uint64 instruction, Dis_info *info)
13830 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13831 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13832 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13834 const char *rd = GPR(rd_value, info);
13835 const char *rt = GPR(rt_value, info);
13836 const char *rs = GPR(rs_value, info);
13838 return img_format("SHRAV_R.QB %s, %s, %s", rd, rt, rs);
13845 * 3 2 1
13846 * 10987654321098765432109876543210
13847 * 001000 01001001101
13848 * rt -----
13849 * rs -----
13850 * rd -----
13852 static char *SHRAV_R_W(uint64 instruction, Dis_info *info)
13854 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13855 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13856 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13858 const char *rd = GPR(rd_value, info);
13859 const char *rt = GPR(rt_value, info);
13860 const char *rs = GPR(rs_value, info);
13862 return img_format("SHRAV_R.W %s, %s, %s", rd, rt, rs);
13867 * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords
13869 * 3 2 1
13870 * 10987654321098765432109876543210
13871 * 001000 001111111111
13872 * rt -----
13873 * rs -----
13874 * sa ----
13876 static char *SHRL_PH(uint64 instruction, Dis_info *info)
13878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13880 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13882 const char *rt = GPR(rt_value, info);
13883 const char *rs = GPR(rs_value, info);
13885 return img_format("SHRL.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13890 * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes
13892 * 3 2 1
13893 * 10987654321098765432109876543210
13894 * 001000 1100001111111
13895 * rt -----
13896 * rs -----
13897 * sa ---
13899 static char *SHRL_QB(uint64 instruction, Dis_info *info)
13901 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13902 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13903 uint64 sa_value = extract_sa_15_14_13(instruction);
13905 const char *rt = GPR(rt_value, info);
13906 const char *rs = GPR(rs_value, info);
13908 return img_format("SHRL.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13913 * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of
13914 * halfwords
13916 * 3 2 1
13917 * 10987654321098765432109876543210
13918 * 001000 x1100010101
13919 * rt -----
13920 * rs -----
13921 * rd -----
13923 static char *SHRLV_PH(uint64 instruction, Dis_info *info)
13925 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13926 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13927 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13929 const char *rd = GPR(rd_value, info);
13930 const char *rt = GPR(rt_value, info);
13931 const char *rs = GPR(rs_value, info);
13933 return img_format("SHRLV.PH %s, %s, %s", rd, rt, rs);
13938 * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes
13940 * 3 2 1
13941 * 10987654321098765432109876543210
13942 * 001000 x1101010101
13943 * rt -----
13944 * rs -----
13945 * rd -----
13947 static char *SHRLV_QB(uint64 instruction, Dis_info *info)
13949 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13950 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13951 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13953 const char *rd = GPR(rd_value, info);
13954 const char *rt = GPR(rt_value, info);
13955 const char *rs = GPR(rs_value, info);
13957 return img_format("SHRLV.QB %s, %s, %s", rd, rt, rs);
13964 * 3 2 1
13965 * 10987654321098765432109876543210
13966 * 001000 01001001101
13967 * rt -----
13968 * rs -----
13969 * rd -----
13971 static char *SHX(uint64 instruction, Dis_info *info)
13973 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13974 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13975 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13977 const char *rd = GPR(rd_value, info);
13978 const char *rs = GPR(rs_value, info);
13979 const char *rt = GPR(rt_value, info);
13981 return img_format("SHX %s, %s(%s)", rd, rs, rt);
13988 * 3 2 1
13989 * 10987654321098765432109876543210
13990 * 001000 01001001101
13991 * rt -----
13992 * rs -----
13993 * rd -----
13995 static char *SHXS(uint64 instruction, Dis_info *info)
13997 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13998 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13999 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14001 const char *rd = GPR(rd_value, info);
14002 const char *rs = GPR(rs_value, info);
14003 const char *rt = GPR(rt_value, info);
14005 return img_format("SHXS %s, %s(%s)", rd, rs, rt);
14012 * 3 2 1
14013 * 10987654321098765432109876543210
14014 * 001000 01001001101
14015 * rt -----
14016 * rs -----
14017 * rd -----
14019 static char *SIGRIE(uint64 instruction, Dis_info *info)
14021 uint64 code_value = extract_code_18_to_0(instruction);
14024 return img_format("SIGRIE 0x%" PRIx64, code_value);
14031 * 3 2 1
14032 * 10987654321098765432109876543210
14033 * 001000 01001001101
14034 * rt -----
14035 * rs -----
14036 * rd -----
14038 static char *SLL_16_(uint64 instruction, Dis_info *info)
14040 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14041 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14042 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14044 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14045 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14046 uint64 shift3 = encode_shift3_from_shift(shift3_value);
14048 return img_format("SLL %s, %s, 0x%" PRIx64, rt3, rs3, shift3);
14055 * 3 2 1
14056 * 10987654321098765432109876543210
14057 * 001000 01001001101
14058 * rt -----
14059 * rs -----
14060 * rd -----
14062 static char *SLL_32_(uint64 instruction, Dis_info *info)
14064 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14065 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14066 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14068 const char *rt = GPR(rt_value, info);
14069 const char *rs = GPR(rs_value, info);
14071 return img_format("SLL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14078 * 3 2 1
14079 * 10987654321098765432109876543210
14080 * 001000 01001001101
14081 * rt -----
14082 * rs -----
14083 * rd -----
14085 static char *SLLV(uint64 instruction, Dis_info *info)
14087 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14088 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14089 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14091 const char *rd = GPR(rd_value, info);
14092 const char *rs = GPR(rs_value, info);
14093 const char *rt = GPR(rt_value, info);
14095 return img_format("SLLV %s, %s, %s", rd, rs, rt);
14102 * 3 2 1
14103 * 10987654321098765432109876543210
14104 * 001000 01001001101
14105 * rt -----
14106 * rs -----
14107 * rd -----
14109 static char *SLT(uint64 instruction, Dis_info *info)
14111 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14112 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14113 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14115 const char *rd = GPR(rd_value, info);
14116 const char *rs = GPR(rs_value, info);
14117 const char *rt = GPR(rt_value, info);
14119 return img_format("SLT %s, %s, %s", rd, rs, rt);
14126 * 3 2 1
14127 * 10987654321098765432109876543210
14128 * 001000 01001001101
14129 * rt -----
14130 * rs -----
14131 * rd -----
14133 static char *SLTI(uint64 instruction, Dis_info *info)
14135 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14136 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14137 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14139 const char *rt = GPR(rt_value, info);
14140 const char *rs = GPR(rs_value, info);
14142 return img_format("SLTI %s, %s, 0x%" PRIx64, rt, rs, u_value);
14149 * 3 2 1
14150 * 10987654321098765432109876543210
14151 * 001000 01001001101
14152 * rt -----
14153 * rs -----
14154 * rd -----
14156 static char *SLTIU(uint64 instruction, Dis_info *info)
14158 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14159 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14160 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14162 const char *rt = GPR(rt_value, info);
14163 const char *rs = GPR(rs_value, info);
14165 return img_format("SLTIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
14172 * 3 2 1
14173 * 10987654321098765432109876543210
14174 * 001000 01001001101
14175 * rt -----
14176 * rs -----
14177 * rd -----
14179 static char *SLTU(uint64 instruction, Dis_info *info)
14181 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14182 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14183 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14185 const char *rd = GPR(rd_value, info);
14186 const char *rs = GPR(rs_value, info);
14187 const char *rt = GPR(rt_value, info);
14189 return img_format("SLTU %s, %s, %s", rd, rs, rt);
14196 * 3 2 1
14197 * 10987654321098765432109876543210
14198 * 001000 01001001101
14199 * rt -----
14200 * rs -----
14201 * rd -----
14203 static char *SOV(uint64 instruction, Dis_info *info)
14205 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14206 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14207 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14209 const char *rd = GPR(rd_value, info);
14210 const char *rs = GPR(rs_value, info);
14211 const char *rt = GPR(rt_value, info);
14213 return img_format("SOV %s, %s, %s", rd, rs, rt);
14220 * 3 2 1
14221 * 10987654321098765432109876543210
14222 * 001000 01001001101
14223 * rt -----
14224 * rs -----
14225 * rd -----
14227 static char *SPECIAL2(uint64 instruction, Dis_info *info)
14229 uint64 op_value = extract_op_25_to_3(instruction);
14232 return img_format("SPECIAL2 0x%" PRIx64, op_value);
14239 * 3 2 1
14240 * 10987654321098765432109876543210
14241 * 001000 01001001101
14242 * rt -----
14243 * rs -----
14244 * rd -----
14246 static char *SQRT_D(uint64 instruction, Dis_info *info)
14248 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14249 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14251 const char *ft = FPR(ft_value, info);
14252 const char *fs = FPR(fs_value, info);
14254 return img_format("SQRT.D %s, %s", ft, fs);
14261 * 3 2 1
14262 * 10987654321098765432109876543210
14263 * 001000 01001001101
14264 * rt -----
14265 * rs -----
14266 * rd -----
14268 static char *SQRT_S(uint64 instruction, Dis_info *info)
14270 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14271 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14273 const char *ft = FPR(ft_value, info);
14274 const char *fs = FPR(fs_value, info);
14276 return img_format("SQRT.S %s, %s", ft, fs);
14281 * SRA rd, rt, sa - Shift Word Right Arithmetic
14283 * 3 2 1
14284 * 10987654321098765432109876543210
14285 * 00000000000 000011
14286 * rt -----
14287 * rd -----
14288 * sa -----
14290 static char *SRA(uint64 instruction, Dis_info *info)
14292 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14293 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14294 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14296 const char *rt = GPR(rt_value, info);
14297 const char *rs = GPR(rs_value, info);
14299 return img_format("SRA %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14304 * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
14306 * 3 2 1
14307 * 10987654321098765432109876543210
14308 * 001000 00000000111
14309 * rs -----
14310 * rt -----
14311 * rd -----
14313 static char *SRAV(uint64 instruction, Dis_info *info)
14315 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14316 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14317 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14319 const char *rd = GPR(rd_value, info);
14320 const char *rs = GPR(rs_value, info);
14321 const char *rt = GPR(rt_value, info);
14323 return img_format("SRAV %s, %s, %s", rd, rs, rt);
14330 * 3 2 1
14331 * 10987654321098765432109876543210
14332 * 001000 00000000111
14333 * rs -----
14334 * rt -----
14335 * rd -----
14337 static char *SRL_16_(uint64 instruction, Dis_info *info)
14339 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14340 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14341 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14343 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14344 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14345 uint64 shift3 = encode_shift3_from_shift(shift3_value);
14347 return img_format("SRL %s, %s, 0x%" PRIx64, rt3, rs3, shift3);
14354 * 3 2 1
14355 * 10987654321098765432109876543210
14356 * 001000 01001001101
14357 * rt -----
14358 * rs -----
14359 * rd -----
14361 static char *SRL_32_(uint64 instruction, Dis_info *info)
14363 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14364 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14365 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14367 const char *rt = GPR(rt_value, info);
14368 const char *rs = GPR(rs_value, info);
14370 return img_format("SRL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14377 * 3 2 1
14378 * 10987654321098765432109876543210
14379 * 001000 01001001101
14380 * rt -----
14381 * rs -----
14382 * rd -----
14384 static char *SRLV(uint64 instruction, Dis_info *info)
14386 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14387 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14388 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14390 const char *rd = GPR(rd_value, info);
14391 const char *rs = GPR(rs_value, info);
14392 const char *rt = GPR(rt_value, info);
14394 return img_format("SRLV %s, %s, %s", rd, rs, rt);
14401 * 3 2 1
14402 * 10987654321098765432109876543210
14403 * 001000 01001001101
14404 * rt -----
14405 * rs -----
14406 * rd -----
14408 static char *SUB(uint64 instruction, Dis_info *info)
14410 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14411 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14412 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14414 const char *rd = GPR(rd_value, info);
14415 const char *rs = GPR(rs_value, info);
14416 const char *rt = GPR(rt_value, info);
14418 return img_format("SUB %s, %s, %s", rd, rs, rt);
14425 * 3 2 1
14426 * 10987654321098765432109876543210
14427 * 001000 01001001101
14428 * rt -----
14429 * rs -----
14430 * rd -----
14432 static char *SUB_D(uint64 instruction, Dis_info *info)
14434 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14435 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14436 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
14438 const char *fd = FPR(fd_value, info);
14439 const char *fs = FPR(fs_value, info);
14440 const char *ft = FPR(ft_value, info);
14442 return img_format("SUB.D %s, %s, %s", fd, fs, ft);
14449 * 3 2 1
14450 * 10987654321098765432109876543210
14451 * 001000 01001001101
14452 * rt -----
14453 * rs -----
14454 * rd -----
14456 static char *SUB_S(uint64 instruction, Dis_info *info)
14458 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14459 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14460 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
14462 const char *fd = FPR(fd_value, info);
14463 const char *fs = FPR(fs_value, info);
14464 const char *ft = FPR(ft_value, info);
14466 return img_format("SUB.S %s, %s, %s", fd, fs, ft);
14473 * 3 2 1
14474 * 10987654321098765432109876543210
14475 * 001000 01001001101
14476 * rt -----
14477 * rs -----
14478 * rd -----
14480 static char *SUBQ_PH(uint64 instruction, Dis_info *info)
14482 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14483 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14484 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14486 const char *rd = GPR(rd_value, info);
14487 const char *rs = GPR(rs_value, info);
14488 const char *rt = GPR(rt_value, info);
14490 return img_format("SUBQ.PH %s, %s, %s", rd, rs, rt);
14495 * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14496 * right to halve results
14498 * 3 2 1
14499 * 10987654321098765432109876543210
14500 * 001000 01001001101
14501 * rt -----
14502 * rs -----
14503 * rd -----
14505 static char *SUBQ_S_PH(uint64 instruction, Dis_info *info)
14507 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14508 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14509 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14511 const char *rd = GPR(rd_value, info);
14512 const char *rs = GPR(rs_value, info);
14513 const char *rt = GPR(rt_value, info);
14515 return img_format("SUBQ_S.PH %s, %s, %s", rd, rs, rt);
14520 * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift
14521 * right to halve results
14523 * 3 2 1
14524 * 10987654321098765432109876543210
14525 * 001000 01001001101
14526 * rt -----
14527 * rs -----
14528 * rd -----
14530 static char *SUBQ_S_W(uint64 instruction, Dis_info *info)
14532 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14533 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14534 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14536 const char *rd = GPR(rd_value, info);
14537 const char *rs = GPR(rs_value, info);
14538 const char *rt = GPR(rt_value, info);
14540 return img_format("SUBQ_S.W %s, %s, %s", rd, rs, rt);
14545 * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14546 * right to halve results
14548 * 3 2 1
14549 * 10987654321098765432109876543210
14550 * 001000 01001001101
14551 * rt -----
14552 * rs -----
14553 * rd -----
14555 static char *SUBQH_PH(uint64 instruction, Dis_info *info)
14557 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14558 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14559 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14561 const char *rd = GPR(rd_value, info);
14562 const char *rs = GPR(rs_value, info);
14563 const char *rt = GPR(rt_value, info);
14565 return img_format("SUBQH.PH %s, %s, %s", rd, rs, rt);
14570 * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14571 * right to halve results
14573 * 3 2 1
14574 * 10987654321098765432109876543210
14575 * 001000 01001001101
14576 * rt -----
14577 * rs -----
14578 * rd -----
14580 static char *SUBQH_R_PH(uint64 instruction, Dis_info *info)
14582 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14583 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14584 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14586 const char *rd = GPR(rd_value, info);
14587 const char *rs = GPR(rs_value, info);
14588 const char *rt = GPR(rt_value, info);
14590 return img_format("SUBQH_R.PH %s, %s, %s", rd, rs, rt);
14595 * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift
14596 * right to halve results with rounding
14598 * 3 2 1
14599 * 10987654321098765432109876543210
14600 * 001000 11001001101
14601 * rt -----
14602 * rs -----
14603 * rd -----
14605 static char *SUBQH_R_W(uint64 instruction, Dis_info *info)
14607 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14608 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14609 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14611 const char *rd = GPR(rd_value, info);
14612 const char *rs = GPR(rs_value, info);
14613 const char *rt = GPR(rt_value, info);
14615 return img_format("SUBQH_R.W %s, %s, %s", rd, rs, rt);
14620 * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to
14621 * halve results
14623 * 3 2 1
14624 * 10987654321098765432109876543210
14625 * 001000 01010001101
14626 * rt -----
14627 * rs -----
14628 * rd -----
14630 static char *SUBQH_W(uint64 instruction, Dis_info *info)
14632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14633 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14634 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14636 const char *rd = GPR(rd_value, info);
14637 const char *rs = GPR(rs_value, info);
14638 const char *rt = GPR(rt_value, info);
14640 return img_format("SUBQH.W %s, %s, %s", rd, rs, rt);
14645 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14647 * 3 2 1
14648 * 10987654321098765432109876543210
14649 * 001000 00010001101
14650 * rt -----
14651 * rs -----
14652 * rd -----
14654 static char *SUBU_16_(uint64 instruction, Dis_info *info)
14656 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14657 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14658 uint64 rd3_value = extract_rd3_3_2_1(instruction);
14660 const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
14661 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14662 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14664 return img_format("SUBU %s, %s, %s", rd3, rs3, rt3);
14669 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14671 * 3 2 1
14672 * 10987654321098765432109876543210
14673 * 001000 00010001101
14674 * rt -----
14675 * rs -----
14676 * rd -----
14678 static char *SUBU_32_(uint64 instruction, Dis_info *info)
14680 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14681 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14682 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14684 const char *rd = GPR(rd_value, info);
14685 const char *rs = GPR(rs_value, info);
14686 const char *rt = GPR(rt_value, info);
14688 return img_format("SUBU %s, %s, %s", rd, rs, rt);
14693 * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords
14695 * 3 2 1
14696 * 10987654321098765432109876543210
14697 * 001000 01100001101
14698 * rt -----
14699 * rs -----
14700 * rd -----
14702 static char *SUBU_PH(uint64 instruction, Dis_info *info)
14704 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14705 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14706 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14708 const char *rd = GPR(rd_value, info);
14709 const char *rs = GPR(rs_value, info);
14710 const char *rt = GPR(rt_value, info);
14712 return img_format("SUBU.PH %s, %s, %s", rd, rs, rt);
14717 * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors
14719 * 3 2 1
14720 * 10987654321098765432109876543210
14721 * 001000 01011001101
14722 * rt -----
14723 * rs -----
14724 * rd -----
14726 static char *SUBU_QB(uint64 instruction, Dis_info *info)
14728 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14729 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14730 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14732 const char *rd = GPR(rd_value, info);
14733 const char *rs = GPR(rs_value, info);
14734 const char *rt = GPR(rt_value, info);
14736 return img_format("SUBU.QB %s, %s, %s", rd, rs, rt);
14741 * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with
14742 * 8-bit saturation
14744 * 3 2 1
14745 * 10987654321098765432109876543210
14746 * 001000 11100001101
14747 * rt -----
14748 * rs -----
14749 * rd -----
14751 static char *SUBU_S_PH(uint64 instruction, Dis_info *info)
14753 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14754 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14755 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14757 const char *rd = GPR(rd_value, info);
14758 const char *rs = GPR(rs_value, info);
14759 const char *rt = GPR(rt_value, info);
14761 return img_format("SUBU_S.PH %s, %s, %s", rd, rs, rt);
14766 * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with
14767 * 8-bit saturation
14769 * 3 2 1
14770 * 10987654321098765432109876543210
14771 * 001000 11011001101
14772 * rt -----
14773 * rs -----
14774 * rd -----
14776 static char *SUBU_S_QB(uint64 instruction, Dis_info *info)
14778 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14779 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14780 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14782 const char *rd = GPR(rd_value, info);
14783 const char *rs = GPR(rs_value, info);
14784 const char *rt = GPR(rt_value, info);
14786 return img_format("SUBU_S.QB %s, %s, %s", rd, rs, rt);
14791 * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift
14792 * to halve results
14794 * 3 2 1
14795 * 10987654321098765432109876543210
14796 * 001000 01101001101
14797 * rt -----
14798 * rs -----
14799 * rd -----
14801 static char *SUBUH_QB(uint64 instruction, Dis_info *info)
14803 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14804 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14805 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14807 const char *rd = GPR(rd_value, info);
14808 const char *rs = GPR(rs_value, info);
14809 const char *rt = GPR(rt_value, info);
14811 return img_format("SUBUH.QB %s, %s, %s", rd, rs, rt);
14816 * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift
14817 * to halve results with rounding
14819 * 3 2 1
14820 * 10987654321098765432109876543210
14821 * 001000 11101001101
14822 * rt -----
14823 * rs -----
14824 * rd -----
14826 static char *SUBUH_R_QB(uint64 instruction, Dis_info *info)
14828 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14829 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14830 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14832 const char *rd = GPR(rd_value, info);
14833 const char *rs = GPR(rs_value, info);
14834 const char *rt = GPR(rt_value, info);
14836 return img_format("SUBUH_R.QB %s, %s, %s", rd, rs, rt);
14841 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14843 * 3 2 1
14844 * 10987654321098765432109876543210
14845 * 001000 00010001101
14846 * rt -----
14847 * rs -----
14848 * rd -----
14850 static char *SW_16_(uint64 instruction, Dis_info *info)
14852 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
14853 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14854 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
14856 const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
14857 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14859 return img_format("SW %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
14864 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14866 * 3 2 1
14867 * 10987654321098765432109876543210
14868 * 001000 00010001101
14869 * rt -----
14870 * rs -----
14871 * rd -----
14873 static char *SW_4X4_(uint64 instruction, Dis_info *info)
14875 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
14876 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
14877 uint64 u_value = extract_u_3_8__s2(instruction);
14879 const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
14880 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
14882 return img_format("SW %s, 0x%" PRIx64 "(%s)", rtz4, u_value, rs4);
14887 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14889 * 3 2 1
14890 * 10987654321098765432109876543210
14891 * 001000 00010001101
14892 * rt -----
14893 * rs -----
14894 * rd -----
14896 static char *SW_GP16_(uint64 instruction, Dis_info *info)
14898 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
14899 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
14901 const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
14903 return img_format("SW %s, 0x%" PRIx64 "($%d)", rtz3, u_value, 28);
14908 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14910 * 3 2 1
14911 * 10987654321098765432109876543210
14912 * 001000 00010001101
14913 * rt -----
14914 * rs -----
14915 * rd -----
14917 static char *SW_GP_(uint64 instruction, Dis_info *info)
14919 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14920 uint64 u_value = extract_u_20_to_2__s2(instruction);
14922 const char *rt = GPR(rt_value, info);
14924 return img_format("SW %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
14929 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14931 * 3 2 1
14932 * 10987654321098765432109876543210
14933 * 001000 00010001101
14934 * rt -----
14935 * rs -----
14936 * rd -----
14938 static char *SW_S9_(uint64 instruction, Dis_info *info)
14940 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14941 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
14942 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14944 const char *rt = GPR(rt_value, info);
14945 const char *rs = GPR(rs_value, info);
14947 return img_format("SW %s, %" PRId64 "(%s)", rt, s_value, rs);
14952 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14954 * 3 2 1
14955 * 10987654321098765432109876543210
14956 * 001000 00010001101
14957 * rt -----
14958 * rs -----
14959 * rd -----
14961 static char *SW_SP_(uint64 instruction, Dis_info *info)
14963 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
14964 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
14966 const char *rt = GPR(rt_value, info);
14968 return img_format("SW %s, 0x%" PRIx64 "($%d)", rt, u_value, 29);
14973 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14975 * 3 2 1
14976 * 10987654321098765432109876543210
14977 * 001000 00010001101
14978 * rt -----
14979 * rs -----
14980 * rd -----
14982 static char *SW_U12_(uint64 instruction, Dis_info *info)
14984 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14985 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14986 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14988 const char *rt = GPR(rt_value, info);
14989 const char *rs = GPR(rs_value, info);
14991 return img_format("SW %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
14996 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14998 * 3 2 1
14999 * 10987654321098765432109876543210
15000 * 001000 00010001101
15001 * rt -----
15002 * rs -----
15003 * rd -----
15005 static char *SWC1_GP_(uint64 instruction, Dis_info *info)
15007 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15008 uint64 u_value = extract_u_17_to_2__s2(instruction);
15010 const char *ft = FPR(ft_value, info);
15012 return img_format("SWC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
15017 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15019 * 3 2 1
15020 * 10987654321098765432109876543210
15021 * 001000 00010001101
15022 * rt -----
15023 * rs -----
15024 * rd -----
15026 static char *SWC1_S9_(uint64 instruction, Dis_info *info)
15028 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15029 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15030 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15032 const char *ft = FPR(ft_value, info);
15033 const char *rs = GPR(rs_value, info);
15035 return img_format("SWC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
15040 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15042 * 3 2 1
15043 * 10987654321098765432109876543210
15044 * 001000 00010001101
15045 * rt -----
15046 * rs -----
15047 * rd -----
15049 static char *SWC1_U12_(uint64 instruction, Dis_info *info)
15051 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15052 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15053 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15055 const char *ft = FPR(ft_value, info);
15056 const char *rs = GPR(rs_value, info);
15058 return img_format("SWC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
15063 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15065 * 3 2 1
15066 * 10987654321098765432109876543210
15067 * 001000 00010001101
15068 * rt -----
15069 * rs -----
15070 * rd -----
15072 static char *SWC1X(uint64 instruction, Dis_info *info)
15074 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15075 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15076 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15078 const char *ft = FPR(ft_value, info);
15079 const char *rs = GPR(rs_value, info);
15080 const char *rt = GPR(rt_value, info);
15082 return img_format("SWC1X %s, %s(%s)", ft, rs, rt);
15087 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15089 * 3 2 1
15090 * 10987654321098765432109876543210
15091 * 001000 00010001101
15092 * rt -----
15093 * rs -----
15094 * rd -----
15096 static char *SWC1XS(uint64 instruction, Dis_info *info)
15098 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15099 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15100 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15102 const char *ft = FPR(ft_value, info);
15103 const char *rs = GPR(rs_value, info);
15104 const char *rt = GPR(rt_value, info);
15106 return img_format("SWC1XS %s, %s(%s)", ft, rs, rt);
15111 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15113 * 3 2 1
15114 * 10987654321098765432109876543210
15115 * 001000 00010001101
15116 * rt -----
15117 * rs -----
15118 * rd -----
15120 static char *SWC2(uint64 instruction, Dis_info *info)
15122 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
15123 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15124 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15126 const char *rs = GPR(rs_value, info);
15128 return img_format("SWC2 CP%" PRIu64 ", %" PRId64 "(%s)",
15129 cs_value, s_value, rs);
15134 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15136 * 3 2 1
15137 * 10987654321098765432109876543210
15138 * 001000 00010001101
15139 * rt -----
15140 * rs -----
15141 * rd -----
15143 static char *SWE(uint64 instruction, Dis_info *info)
15145 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15146 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15147 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15149 const char *rt = GPR(rt_value, info);
15150 const char *rs = GPR(rs_value, info);
15152 return img_format("SWE %s, %" PRId64 "(%s)", rt, s_value, rs);
15157 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15159 * 3 2 1
15160 * 10987654321098765432109876543210
15161 * 001000 00010001101
15162 * rt -----
15163 * rs -----
15164 * rd -----
15166 static char *SWM(uint64 instruction, Dis_info *info)
15168 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15169 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15170 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15171 uint64 count3_value = extract_count3_14_13_12(instruction);
15173 const char *rt = GPR(rt_value, info);
15174 const char *rs = GPR(rs_value, info);
15175 uint64 count3 = encode_count3_from_count(count3_value);
15177 return img_format("SWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15178 rt, s_value, rs, count3);
15183 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15185 * 3 2 1
15186 * 10987654321098765432109876543210
15187 * 001000 00010001101
15188 * rt -----
15189 * rs -----
15190 * rd -----
15192 static char *SWPC_48_(uint64 instruction, Dis_info *info)
15194 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
15195 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
15197 const char *rt = GPR(rt_value, info);
15198 g_autofree char *s = ADDRESS(s_value, 6, info);
15200 return img_format("SWPC %s, %s", rt, s);
15205 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15207 * 3 2 1
15208 * 10987654321098765432109876543210
15209 * 001000 00010001101
15210 * rt -----
15211 * rs -----
15212 * rd -----
15214 static char *SWX(uint64 instruction, Dis_info *info)
15216 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15217 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15218 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15220 const char *rd = GPR(rd_value, info);
15221 const char *rs = GPR(rs_value, info);
15222 const char *rt = GPR(rt_value, info);
15224 return img_format("SWX %s, %s(%s)", rd, rs, rt);
15229 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15231 * 3 2 1
15232 * 10987654321098765432109876543210
15233 * 001000 00010001101
15234 * rt -----
15235 * rs -----
15236 * rd -----
15238 static char *SWXS(uint64 instruction, Dis_info *info)
15240 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15241 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15242 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15244 const char *rd = GPR(rd_value, info);
15245 const char *rs = GPR(rs_value, info);
15246 const char *rt = GPR(rt_value, info);
15248 return img_format("SWXS %s, %s(%s)", rd, rs, rt);
15253 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15255 * 3 2 1
15256 * 10987654321098765432109876543210
15257 * 001000 00010001101
15258 * rt -----
15259 * rs -----
15260 * rd -----
15262 static char *SYNC(uint64 instruction, Dis_info *info)
15264 uint64 stype_value = extract_stype_20_19_18_17_16(instruction);
15267 return img_format("SYNC 0x%" PRIx64, stype_value);
15272 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15274 * 3 2 1
15275 * 10987654321098765432109876543210
15276 * 001000 00010001101
15277 * rt -----
15278 * rs -----
15279 * rd -----
15281 static char *SYNCI(uint64 instruction, Dis_info *info)
15283 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15284 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15286 const char *rs = GPR(rs_value, info);
15288 return img_format("SYNCI %" PRId64 "(%s)", s_value, rs);
15293 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15295 * 3 2 1
15296 * 10987654321098765432109876543210
15297 * 001000 00010001101
15298 * rt -----
15299 * rs -----
15300 * rd -----
15302 static char *SYNCIE(uint64 instruction, Dis_info *info)
15304 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15305 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15307 const char *rs = GPR(rs_value, info);
15309 return img_format("SYNCIE %" PRId64 "(%s)", s_value, rs);
15314 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15316 * 3 2 1
15317 * 10987654321098765432109876543210
15318 * 001000 00010001101
15319 * rt -----
15320 * rs -----
15321 * rd -----
15323 static char *SYSCALL_16_(uint64 instruction, Dis_info *info)
15325 uint64 code_value = extract_code_1_0(instruction);
15328 return img_format("SYSCALL 0x%" PRIx64, code_value);
15333 * SYSCALL code - System Call. Cause a System Call Exception
15335 * 3 2 1
15336 * 10987654321098765432109876543210
15337 * 00000000000010
15338 * code ------------------
15340 static char *SYSCALL_32_(uint64 instruction, Dis_info *info)
15342 uint64 code_value = extract_code_17_to_0(instruction);
15345 return img_format("SYSCALL 0x%" PRIx64, code_value);
15350 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15352 * 3 2 1
15353 * 10987654321098765432109876543210
15354 * 001000 00010001101
15355 * rt -----
15356 * rs -----
15357 * rd -----
15359 static char *TEQ(uint64 instruction, Dis_info *info)
15361 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15362 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15364 const char *rs = GPR(rs_value, info);
15365 const char *rt = GPR(rt_value, info);
15367 return img_format("TEQ %s, %s", rs, rt);
15372 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15374 * 3 2 1
15375 * 10987654321098765432109876543210
15376 * 001000 00010001101
15377 * rt -----
15378 * rs -----
15379 * rd -----
15381 static char *TLBGINV(uint64 instruction, Dis_info *info)
15383 (void)instruction;
15385 return g_strdup("TLBGINV ");
15390 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15392 * 3 2 1
15393 * 10987654321098765432109876543210
15394 * 001000 00010001101
15395 * rt -----
15396 * rs -----
15397 * rd -----
15399 static char *TLBGINVF(uint64 instruction, Dis_info *info)
15401 (void)instruction;
15403 return g_strdup("TLBGINVF ");
15408 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15410 * 3 2 1
15411 * 10987654321098765432109876543210
15412 * 001000 00010001101
15413 * rt -----
15414 * rs -----
15415 * rd -----
15417 static char *TLBGP(uint64 instruction, Dis_info *info)
15419 (void)instruction;
15421 return g_strdup("TLBGP ");
15426 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15428 * 3 2 1
15429 * 10987654321098765432109876543210
15430 * 001000 00010001101
15431 * rt -----
15432 * rs -----
15433 * rd -----
15435 static char *TLBGR(uint64 instruction, Dis_info *info)
15437 (void)instruction;
15439 return g_strdup("TLBGR ");
15444 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15446 * 3 2 1
15447 * 10987654321098765432109876543210
15448 * 001000 00010001101
15449 * rt -----
15450 * rs -----
15451 * rd -----
15453 static char *TLBGWI(uint64 instruction, Dis_info *info)
15455 (void)instruction;
15457 return g_strdup("TLBGWI ");
15462 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15464 * 3 2 1
15465 * 10987654321098765432109876543210
15466 * 001000 00010001101
15467 * rt -----
15468 * rs -----
15469 * rd -----
15471 static char *TLBGWR(uint64 instruction, Dis_info *info)
15473 (void)instruction;
15475 return g_strdup("TLBGWR ");
15480 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15482 * 3 2 1
15483 * 10987654321098765432109876543210
15484 * 001000 00010001101
15485 * rt -----
15486 * rs -----
15487 * rd -----
15489 static char *TLBINV(uint64 instruction, Dis_info *info)
15491 (void)instruction;
15493 return g_strdup("TLBINV ");
15498 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15500 * 3 2 1
15501 * 10987654321098765432109876543210
15502 * 001000 00010001101
15503 * rt -----
15504 * rs -----
15505 * rd -----
15507 static char *TLBINVF(uint64 instruction, Dis_info *info)
15509 (void)instruction;
15511 return g_strdup("TLBINVF ");
15516 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15518 * 3 2 1
15519 * 10987654321098765432109876543210
15520 * 001000 00010001101
15521 * rt -----
15522 * rs -----
15523 * rd -----
15525 static char *TLBP(uint64 instruction, Dis_info *info)
15527 (void)instruction;
15529 return g_strdup("TLBP ");
15534 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15536 * 3 2 1
15537 * 10987654321098765432109876543210
15538 * 001000 00010001101
15539 * rt -----
15540 * rs -----
15541 * rd -----
15543 static char *TLBR(uint64 instruction, Dis_info *info)
15545 (void)instruction;
15547 return g_strdup("TLBR ");
15552 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15554 * 3 2 1
15555 * 10987654321098765432109876543210
15556 * 001000 00010001101
15557 * rt -----
15558 * rs -----
15559 * rd -----
15561 static char *TLBWI(uint64 instruction, Dis_info *info)
15563 (void)instruction;
15565 return g_strdup("TLBWI ");
15570 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15572 * 3 2 1
15573 * 10987654321098765432109876543210
15574 * 001000 00010001101
15575 * rt -----
15576 * rs -----
15577 * rd -----
15579 static char *TLBWR(uint64 instruction, Dis_info *info)
15581 (void)instruction;
15583 return g_strdup("TLBWR ");
15588 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15590 * 3 2 1
15591 * 10987654321098765432109876543210
15592 * 001000 00010001101
15593 * rt -----
15594 * rs -----
15595 * rd -----
15597 static char *TNE(uint64 instruction, Dis_info *info)
15599 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15600 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15602 const char *rs = GPR(rs_value, info);
15603 const char *rt = GPR(rt_value, info);
15605 return img_format("TNE %s, %s", rs, rt);
15610 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15612 * 3 2 1
15613 * 10987654321098765432109876543210
15614 * 001000 00010001101
15615 * rt -----
15616 * rs -----
15617 * rd -----
15619 static char *TRUNC_L_D(uint64 instruction, Dis_info *info)
15621 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15622 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15624 const char *ft = FPR(ft_value, info);
15625 const char *fs = FPR(fs_value, info);
15627 return img_format("TRUNC.L.D %s, %s", ft, fs);
15632 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15634 * 3 2 1
15635 * 10987654321098765432109876543210
15636 * 001000 00010001101
15637 * rt -----
15638 * rs -----
15639 * rd -----
15641 static char *TRUNC_L_S(uint64 instruction, Dis_info *info)
15643 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15644 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15646 const char *ft = FPR(ft_value, info);
15647 const char *fs = FPR(fs_value, info);
15649 return img_format("TRUNC.L.S %s, %s", ft, fs);
15654 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15656 * 3 2 1
15657 * 10987654321098765432109876543210
15658 * 001000 00010001101
15659 * rt -----
15660 * rs -----
15661 * rd -----
15663 static char *TRUNC_W_D(uint64 instruction, Dis_info *info)
15665 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15666 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15668 const char *ft = FPR(ft_value, info);
15669 const char *fs = FPR(fs_value, info);
15671 return img_format("TRUNC.W.D %s, %s", ft, fs);
15676 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15678 * 3 2 1
15679 * 10987654321098765432109876543210
15680 * 001000 00010001101
15681 * rt -----
15682 * rs -----
15683 * rd -----
15685 static char *TRUNC_W_S(uint64 instruction, Dis_info *info)
15687 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15688 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15690 const char *ft = FPR(ft_value, info);
15691 const char *fs = FPR(fs_value, info);
15693 return img_format("TRUNC.W.S %s, %s", ft, fs);
15698 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15700 * 3 2 1
15701 * 10987654321098765432109876543210
15702 * 001000 00010001101
15703 * rt -----
15704 * rs -----
15705 * rd -----
15707 static char *UALDM(uint64 instruction, Dis_info *info)
15709 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15710 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15711 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15712 uint64 count3_value = extract_count3_14_13_12(instruction);
15714 const char *rt = GPR(rt_value, info);
15715 const char *rs = GPR(rs_value, info);
15716 uint64 count3 = encode_count3_from_count(count3_value);
15718 return img_format("UALDM %s, %" PRId64 "(%s), 0x%" PRIx64,
15719 rt, s_value, rs, count3);
15724 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15726 * 3 2 1
15727 * 10987654321098765432109876543210
15728 * 001000 00010001101
15729 * rt -----
15730 * rs -----
15731 * rd -----
15733 static char *UALH(uint64 instruction, Dis_info *info)
15735 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15736 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15737 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15739 const char *rt = GPR(rt_value, info);
15740 const char *rs = GPR(rs_value, info);
15742 return img_format("UALH %s, %" PRId64 "(%s)", rt, s_value, rs);
15747 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15749 * 3 2 1
15750 * 10987654321098765432109876543210
15751 * 001000 00010001101
15752 * rt -----
15753 * rs -----
15754 * rd -----
15756 static char *UALWM(uint64 instruction, Dis_info *info)
15758 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15759 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15760 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15761 uint64 count3_value = extract_count3_14_13_12(instruction);
15763 const char *rt = GPR(rt_value, info);
15764 const char *rs = GPR(rs_value, info);
15765 uint64 count3 = encode_count3_from_count(count3_value);
15767 return img_format("UALWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15768 rt, s_value, rs, count3);
15773 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15775 * 3 2 1
15776 * 10987654321098765432109876543210
15777 * 001000 00010001101
15778 * rt -----
15779 * rs -----
15780 * rd -----
15782 static char *UASDM(uint64 instruction, Dis_info *info)
15784 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15785 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15786 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15787 uint64 count3_value = extract_count3_14_13_12(instruction);
15789 const char *rt = GPR(rt_value, info);
15790 const char *rs = GPR(rs_value, info);
15791 uint64 count3 = encode_count3_from_count(count3_value);
15793 return img_format("UASDM %s, %" PRId64 "(%s), 0x%" PRIx64,
15794 rt, s_value, rs, count3);
15799 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15801 * 3 2 1
15802 * 10987654321098765432109876543210
15803 * 001000 00010001101
15804 * rt -----
15805 * rs -----
15806 * rd -----
15808 static char *UASH(uint64 instruction, Dis_info *info)
15810 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15811 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15812 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15814 const char *rt = GPR(rt_value, info);
15815 const char *rs = GPR(rs_value, info);
15817 return img_format("UASH %s, %" PRId64 "(%s)", rt, s_value, rs);
15822 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15824 * 3 2 1
15825 * 10987654321098765432109876543210
15826 * 001000 00010001101
15827 * rt -----
15828 * rs -----
15829 * rd -----
15831 static char *UASWM(uint64 instruction, Dis_info *info)
15833 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15834 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15835 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15836 uint64 count3_value = extract_count3_14_13_12(instruction);
15838 const char *rt = GPR(rt_value, info);
15839 const char *rs = GPR(rs_value, info);
15840 uint64 count3 = encode_count3_from_count(count3_value);
15842 return img_format("UASWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15843 rt, s_value, rs, count3);
15848 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15850 * 3 2 1
15851 * 10987654321098765432109876543210
15852 * 001000 00010001101
15853 * rt -----
15854 * rs -----
15855 * rd -----
15857 static char *UDI(uint64 instruction, Dis_info *info)
15859 uint64 op_value = extract_op_25_to_3(instruction);
15862 return img_format("UDI 0x%" PRIx64, op_value);
15867 * WAIT code - Enter Wait State
15869 * 3 2 1
15870 * 10987654321098765432109876543210
15871 * 001000 1100001101111111
15872 * code ----------
15874 static char *WAIT(uint64 instruction, Dis_info *info)
15876 uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction);
15879 return img_format("WAIT 0x%" PRIx64, code_value);
15884 * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl
15885 * register
15887 * 3 2 1
15888 * 10987654321098765432109876543210
15889 * 001000 01011001111111
15890 * rt -----
15891 * mask -------
15893 static char *WRDSP(uint64 instruction, Dis_info *info)
15895 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15896 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
15898 const char *rt = GPR(rt_value, info);
15900 return img_format("WRDSP %s, 0x%" PRIx64, rt, mask_value);
15905 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15907 * 3 2 1
15908 * 10987654321098765432109876543210
15909 * 001000 00010001101
15910 * rt -----
15911 * rs -----
15912 * rd -----
15914 static char *WRPGPR(uint64 instruction, Dis_info *info)
15916 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15917 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15919 const char *rt = GPR(rt_value, info);
15920 const char *rs = GPR(rs_value, info);
15922 return img_format("WRPGPR %s, %s", rt, rs);
15927 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15929 * 3 2 1
15930 * 10987654321098765432109876543210
15931 * 001000 00010001101
15932 * rt -----
15933 * rs -----
15934 * rd -----
15936 static char *XOR_16_(uint64 instruction, Dis_info *info)
15938 uint64 rt3_value = extract_rt3_9_8_7(instruction);
15939 uint64 rs3_value = extract_rs3_6_5_4(instruction);
15941 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
15942 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
15944 return img_format("XOR %s, %s", rs3, rt3);
15949 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15951 * 3 2 1
15952 * 10987654321098765432109876543210
15953 * 001000 00010001101
15954 * rt -----
15955 * rs -----
15956 * rd -----
15958 static char *XOR_32_(uint64 instruction, Dis_info *info)
15960 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15961 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15962 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15964 const char *rd = GPR(rd_value, info);
15965 const char *rs = GPR(rs_value, info);
15966 const char *rt = GPR(rt_value, info);
15968 return img_format("XOR %s, %s, %s", rd, rs, rt);
15973 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15975 * 3 2 1
15976 * 10987654321098765432109876543210
15977 * 001000 00010001101
15978 * rt -----
15979 * rs -----
15980 * rd -----
15982 static char *XORI(uint64 instruction, Dis_info *info)
15984 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15985 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15986 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15988 const char *rt = GPR(rt_value, info);
15989 const char *rs = GPR(rs_value, info);
15991 return img_format("XORI %s, %s, 0x%" PRIx64, rt, rs, u_value);
15996 * YIELD rt, rs -
15998 * 3 2 1
15999 * 10987654321098765432109876543210
16000 * 001000 00010001101
16001 * rt -----
16002 * rs -----
16004 static char *YIELD(uint64 instruction, Dis_info *info)
16006 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16007 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16009 const char *rt = GPR(rt_value, info);
16010 const char *rs = GPR(rs_value, info);
16012 return img_format("YIELD %s, %s", rt, rs);
16018 * nanoMIPS instruction pool organization
16019 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16022 * ┌─ P.ADDIU ─── P.RI ─── P.SYSCALL
16023 * │
16024 * │ ┌─ P.TRAP
16025 * │ │
16026 * │ ┌─ _POOL32A0_0 ─┼─ P.CMOVE
16027 * │ │ │
16028 * │ │ └─ P.SLTU
16029 * │ ┌─ _POOL32A0 ─┤
16030 * │ │ │
16031 * │ │ │
16032 * │ │ └─ _POOL32A0_1 ─── CRC32
16033 * │ │
16034 * ├─ P32A ─┤
16035 * │ │ ┌─ PP.LSX
16036 * │ │ ┌─ P.LSX ─────┤
16037 * │ │ │ └─ PP.LSXS
16038 * │ └─ _POOL32A7 ─┤
16039 * │ │ ┌─ POOL32Axf_4
16040 * │ └─ POOL32Axf ─┤
16041 * │ └─ POOL32Axf_5
16042 * │
16043 * ├─ PBAL
16044 * │
16045 * ├─ P.GP.W ┌─ PP.LSX
16046 * ┌─ P32 ─┤ │
16047 * │ ├─ P.GP.BH ─┴─ PP.LSXS
16048 * │ │
16049 * │ ├─ P.J ─────── PP.BALRSC
16050 * │ │
16051 * │ ├─ P48I
16052 * │ │ ┌─ P.SR
16053 * │ │ │
16054 * │ │ ├─ P.SHIFT
16055 * │ │ │
16056 * │ ├─ P.U12 ───┼─ P.ROTX
16057 * │ │ │
16058 * │ │ ├─ P.INS
16059 * │ │ │
16060 * │ │ └─ P.EXT
16061 * │ │
16062 * │ ├─ P.LS.U12 ── P.PREF.U12
16063 * │ │
16064 * │ ├─ P.BR1 ───── P.BR3A
16065 * │ │
16066 * │ │ ┌─ P.LS.S0 ─── P16.SYSCALL
16067 * │ │ │
16068 * │ │ │ ┌─ P.LL
16069 * │ │ ├─ P.LS.S1 ─┤
16070 * │ │ │ └─ P.SC
16071 * │ │ │
16072 * │ │ │ ┌─ P.PREFE
16073 * MAJOR ─┤ ├─ P.LS.S9 ─┤ │
16074 * │ │ ├─ P.LS.E0 ─┼─ P.LLE
16075 * │ │ │ │
16076 * │ │ │ └─ P.SCE
16077 * │ │ │
16078 * │ │ ├─ P.LS.WM
16079 * │ │ │
16080 * │ │ └─ P.LS.UAWM
16081 * │ │
16082 * │ │
16083 * │ ├─ P.BR2
16084 * │ │
16085 * │ ├─ P.BRI
16086 * │ │
16087 * │ └─ P.LUI
16088 * │
16089 * │
16090 * │ ┌─ P16.MV ──── P16.RI ─── P16.SYSCALL
16091 * │ │
16092 * │ ├─ P16.SR
16093 * │ │
16094 * │ ├─ P16.SHIFT
16095 * │ │
16096 * │ ├─ P16.4x4
16097 * │ │
16098 * │ ├─ P16C ────── POOL16C_0 ── POOL16C_00
16099 * │ │
16100 * └─ P16 ─┼─ P16.LB
16101 * │
16102 * ├─ P16.A1
16103 * │
16104 * ├─ P16.LH
16105 * │
16106 * ├─ P16.A2 ──── P.ADDIU[RS5]
16107 * │
16108 * ├─ P16.ADDU
16109 * │
16110 * └─ P16.BR ──┬─ P16.JRC
16111 * │
16112 * └─ P16.BR1
16115 * (FP, DPS, and some minor instruction pools are omitted from the diagram)
16119 typedef enum {
16120 instruction,
16121 call_instruction,
16122 branch_instruction,
16123 return_instruction,
16124 reserved_block,
16125 pool,
16126 } TABLE_ENTRY_TYPE;
16128 typedef enum {
16129 MIPS64_ = 0x00000001,
16130 XNP_ = 0x00000002,
16131 XMMS_ = 0x00000004,
16132 EVA_ = 0x00000008,
16133 DSP_ = 0x00000010,
16134 MT_ = 0x00000020,
16135 EJTAG_ = 0x00000040,
16136 TLBINV_ = 0x00000080,
16137 CP0_ = 0x00000100,
16138 CP1_ = 0x00000200,
16139 CP2_ = 0x00000400,
16140 UDI_ = 0x00000800,
16141 MCU_ = 0x00001000,
16142 VZ_ = 0x00002000,
16143 TLB_ = 0x00004000,
16144 MVH_ = 0x00008000,
16145 ALL_ATTRIBUTES = 0xffffffffull,
16146 } TABLE_ATTRIBUTE_TYPE;
16148 typedef bool (*conditional_function)(uint64 instruction);
16149 typedef char * (*disassembly_function)(uint64 instruction,
16150 Dis_info *info);
16152 typedef struct Pool {
16153 TABLE_ENTRY_TYPE type;
16154 const struct Pool *next_table;
16155 int next_table_size;
16156 int instructions_size;
16157 uint64 mask;
16158 uint64 value;
16159 disassembly_function disassembly;
16160 conditional_function condition;
16161 uint64 attributes;
16162 } Pool;
16164 static const Pool P_SYSCALL[2] = {
16165 { instruction , 0 , 0 , 32,
16166 0xfffc0000, 0x00080000, &SYSCALL_32_ , 0,
16167 0x0 }, /* SYSCALL[32] */
16168 { instruction , 0 , 0 , 32,
16169 0xfffc0000, 0x000c0000, &HYPCALL , 0,
16170 CP0_ | VZ_ }, /* HYPCALL */
16174 static const Pool P_RI[4] = {
16175 { instruction , 0 , 0 , 32,
16176 0xfff80000, 0x00000000, &SIGRIE , 0,
16177 0x0 }, /* SIGRIE */
16178 { pool , P_SYSCALL , 2 , 32,
16179 0xfff80000, 0x00080000, 0 , 0,
16180 0x0 }, /* P.SYSCALL */
16181 { instruction , 0 , 0 , 32,
16182 0xfff80000, 0x00100000, &BREAK_32_ , 0,
16183 0x0 }, /* BREAK[32] */
16184 { instruction , 0 , 0 , 32,
16185 0xfff80000, 0x00180000, &SDBBP_32_ , 0,
16186 EJTAG_ }, /* SDBBP[32] */
16190 static const Pool P_ADDIU[2] = {
16191 { pool , P_RI , 4 , 32,
16192 0xffe00000, 0x00000000, 0 , 0,
16193 0x0 }, /* P.RI */
16194 { instruction , 0 , 0 , 32,
16195 0xfc000000, 0x00000000, &ADDIU_32_ , &ADDIU_32__cond ,
16196 0x0 }, /* ADDIU[32] */
16200 static const Pool P_TRAP[2] = {
16201 { instruction , 0 , 0 , 32,
16202 0xfc0007ff, 0x20000000, &TEQ , 0,
16203 XMMS_ }, /* TEQ */
16204 { instruction , 0 , 0 , 32,
16205 0xfc0007ff, 0x20000400, &TNE , 0,
16206 XMMS_ }, /* TNE */
16210 static const Pool P_CMOVE[2] = {
16211 { instruction , 0 , 0 , 32,
16212 0xfc0007ff, 0x20000210, &MOVZ , 0,
16213 0x0 }, /* MOVZ */
16214 { instruction , 0 , 0 , 32,
16215 0xfc0007ff, 0x20000610, &MOVN , 0,
16216 0x0 }, /* MOVN */
16220 static const Pool P_D_MT_VPE[2] = {
16221 { instruction , 0 , 0 , 32,
16222 0xfc1f3fff, 0x20010ab0, &DMT , 0,
16223 MT_ }, /* DMT */
16224 { instruction , 0 , 0 , 32,
16225 0xfc1f3fff, 0x20000ab0, &DVPE , 0,
16226 MT_ }, /* DVPE */
16230 static const Pool P_E_MT_VPE[2] = {
16231 { instruction , 0 , 0 , 32,
16232 0xfc1f3fff, 0x20010eb0, &EMT , 0,
16233 MT_ }, /* EMT */
16234 { instruction , 0 , 0 , 32,
16235 0xfc1f3fff, 0x20000eb0, &EVPE , 0,
16236 MT_ }, /* EVPE */
16240 static const Pool _P_MT_VPE[2] = {
16241 { pool , P_D_MT_VPE , 2 , 32,
16242 0xfc003fff, 0x20000ab0, 0 , 0,
16243 0x0 }, /* P.D_MT_VPE */
16244 { pool , P_E_MT_VPE , 2 , 32,
16245 0xfc003fff, 0x20000eb0, 0 , 0,
16246 0x0 }, /* P.E_MT_VPE */
16250 static const Pool P_MT_VPE[8] = {
16251 { reserved_block , 0 , 0 , 32,
16252 0xfc003bff, 0x200002b0, 0 , 0,
16253 0x0 }, /* P.MT_VPE~*(0) */
16254 { pool , _P_MT_VPE , 2 , 32,
16255 0xfc003bff, 0x20000ab0, 0 , 0,
16256 0x0 }, /* _P.MT_VPE */
16257 { reserved_block , 0 , 0 , 32,
16258 0xfc003bff, 0x200012b0, 0 , 0,
16259 0x0 }, /* P.MT_VPE~*(2) */
16260 { reserved_block , 0 , 0 , 32,
16261 0xfc003bff, 0x20001ab0, 0 , 0,
16262 0x0 }, /* P.MT_VPE~*(3) */
16263 { reserved_block , 0 , 0 , 32,
16264 0xfc003bff, 0x200022b0, 0 , 0,
16265 0x0 }, /* P.MT_VPE~*(4) */
16266 { reserved_block , 0 , 0 , 32,
16267 0xfc003bff, 0x20002ab0, 0 , 0,
16268 0x0 }, /* P.MT_VPE~*(5) */
16269 { reserved_block , 0 , 0 , 32,
16270 0xfc003bff, 0x200032b0, 0 , 0,
16271 0x0 }, /* P.MT_VPE~*(6) */
16272 { reserved_block , 0 , 0 , 32,
16273 0xfc003bff, 0x20003ab0, 0 , 0,
16274 0x0 }, /* P.MT_VPE~*(7) */
16278 static const Pool P_DVP[2] = {
16279 { instruction , 0 , 0 , 32,
16280 0xfc00ffff, 0x20000390, &DVP , 0,
16281 0x0 }, /* DVP */
16282 { instruction , 0 , 0 , 32,
16283 0xfc00ffff, 0x20000790, &EVP , 0,
16284 0x0 }, /* EVP */
16288 static const Pool P_SLTU[2] = {
16289 { pool , P_DVP , 2 , 32,
16290 0xfc00fbff, 0x20000390, 0 , 0,
16291 0x0 }, /* P.DVP */
16292 { instruction , 0 , 0 , 32,
16293 0xfc0003ff, 0x20000390, &SLTU , &SLTU_cond ,
16294 0x0 }, /* SLTU */
16298 static const Pool _POOL32A0[128] = {
16299 { pool , P_TRAP , 2 , 32,
16300 0xfc0003ff, 0x20000000, 0 , 0,
16301 0x0 }, /* P.TRAP */
16302 { instruction , 0 , 0 , 32,
16303 0xfc0003ff, 0x20000008, &SEB , 0,
16304 XMMS_ }, /* SEB */
16305 { instruction , 0 , 0 , 32,
16306 0xfc0003ff, 0x20000010, &SLLV , 0,
16307 0x0 }, /* SLLV */
16308 { instruction , 0 , 0 , 32,
16309 0xfc0003ff, 0x20000018, &MUL_32_ , 0,
16310 0x0 }, /* MUL[32] */
16311 { reserved_block , 0 , 0 , 32,
16312 0xfc0003ff, 0x20000020, 0 , 0,
16313 0x0 }, /* _POOL32A0~*(4) */
16314 { reserved_block , 0 , 0 , 32,
16315 0xfc0003ff, 0x20000028, 0 , 0,
16316 0x0 }, /* _POOL32A0~*(5) */
16317 { instruction , 0 , 0 , 32,
16318 0xfc0003ff, 0x20000030, &MFC0 , 0,
16319 0x0 }, /* MFC0 */
16320 { instruction , 0 , 0 , 32,
16321 0xfc0003ff, 0x20000038, &MFHC0 , 0,
16322 CP0_ | MVH_ }, /* MFHC0 */
16323 { reserved_block , 0 , 0 , 32,
16324 0xfc0003ff, 0x20000040, 0 , 0,
16325 0x0 }, /* _POOL32A0~*(8) */
16326 { instruction , 0 , 0 , 32,
16327 0xfc0003ff, 0x20000048, &SEH , 0,
16328 0x0 }, /* SEH */
16329 { instruction , 0 , 0 , 32,
16330 0xfc0003ff, 0x20000050, &SRLV , 0,
16331 0x0 }, /* SRLV */
16332 { instruction , 0 , 0 , 32,
16333 0xfc0003ff, 0x20000058, &MUH , 0,
16334 0x0 }, /* MUH */
16335 { reserved_block , 0 , 0 , 32,
16336 0xfc0003ff, 0x20000060, 0 , 0,
16337 0x0 }, /* _POOL32A0~*(12) */
16338 { reserved_block , 0 , 0 , 32,
16339 0xfc0003ff, 0x20000068, 0 , 0,
16340 0x0 }, /* _POOL32A0~*(13) */
16341 { instruction , 0 , 0 , 32,
16342 0xfc0003ff, 0x20000070, &MTC0 , 0,
16343 CP0_ }, /* MTC0 */
16344 { instruction , 0 , 0 , 32,
16345 0xfc0003ff, 0x20000078, &MTHC0 , 0,
16346 CP0_ | MVH_ }, /* MTHC0 */
16347 { reserved_block , 0 , 0 , 32,
16348 0xfc0003ff, 0x20000080, 0 , 0,
16349 0x0 }, /* _POOL32A0~*(16) */
16350 { reserved_block , 0 , 0 , 32,
16351 0xfc0003ff, 0x20000088, 0 , 0,
16352 0x0 }, /* _POOL32A0~*(17) */
16353 { instruction , 0 , 0 , 32,
16354 0xfc0003ff, 0x20000090, &SRAV , 0,
16355 0x0 }, /* SRAV */
16356 { instruction , 0 , 0 , 32,
16357 0xfc0003ff, 0x20000098, &MULU , 0,
16358 0x0 }, /* MULU */
16359 { reserved_block , 0 , 0 , 32,
16360 0xfc0003ff, 0x200000a0, 0 , 0,
16361 0x0 }, /* _POOL32A0~*(20) */
16362 { reserved_block , 0 , 0 , 32,
16363 0xfc0003ff, 0x200000a8, 0 , 0,
16364 0x0 }, /* _POOL32A0~*(21) */
16365 { instruction , 0 , 0 , 32,
16366 0xfc0003ff, 0x200000b0, &MFGC0 , 0,
16367 CP0_ | VZ_ }, /* MFGC0 */
16368 { instruction , 0 , 0 , 32,
16369 0xfc0003ff, 0x200000b8, &MFHGC0 , 0,
16370 CP0_ | VZ_ | MVH_ }, /* MFHGC0 */
16371 { reserved_block , 0 , 0 , 32,
16372 0xfc0003ff, 0x200000c0, 0 , 0,
16373 0x0 }, /* _POOL32A0~*(24) */
16374 { reserved_block , 0 , 0 , 32,
16375 0xfc0003ff, 0x200000c8, 0 , 0,
16376 0x0 }, /* _POOL32A0~*(25) */
16377 { instruction , 0 , 0 , 32,
16378 0xfc0003ff, 0x200000d0, &ROTRV , 0,
16379 0x0 }, /* ROTRV */
16380 { instruction , 0 , 0 , 32,
16381 0xfc0003ff, 0x200000d8, &MUHU , 0,
16382 0x0 }, /* MUHU */
16383 { reserved_block , 0 , 0 , 32,
16384 0xfc0003ff, 0x200000e0, 0 , 0,
16385 0x0 }, /* _POOL32A0~*(28) */
16386 { reserved_block , 0 , 0 , 32,
16387 0xfc0003ff, 0x200000e8, 0 , 0,
16388 0x0 }, /* _POOL32A0~*(29) */
16389 { instruction , 0 , 0 , 32,
16390 0xfc0003ff, 0x200000f0, &MTGC0 , 0,
16391 CP0_ | VZ_ }, /* MTGC0 */
16392 { instruction , 0 , 0 , 32,
16393 0xfc0003ff, 0x200000f8, &MTHGC0 , 0,
16394 CP0_ | VZ_ | MVH_ }, /* MTHGC0 */
16395 { reserved_block , 0 , 0 , 32,
16396 0xfc0003ff, 0x20000100, 0 , 0,
16397 0x0 }, /* _POOL32A0~*(32) */
16398 { reserved_block , 0 , 0 , 32,
16399 0xfc0003ff, 0x20000108, 0 , 0,
16400 0x0 }, /* _POOL32A0~*(33) */
16401 { instruction , 0 , 0 , 32,
16402 0xfc0003ff, 0x20000110, &ADD , 0,
16403 XMMS_ }, /* ADD */
16404 { instruction , 0 , 0 , 32,
16405 0xfc0003ff, 0x20000118, &DIV , 0,
16406 0x0 }, /* DIV */
16407 { reserved_block , 0 , 0 , 32,
16408 0xfc0003ff, 0x20000120, 0 , 0,
16409 0x0 }, /* _POOL32A0~*(36) */
16410 { reserved_block , 0 , 0 , 32,
16411 0xfc0003ff, 0x20000128, 0 , 0,
16412 0x0 }, /* _POOL32A0~*(37) */
16413 { instruction , 0 , 0 , 32,
16414 0xfc0003ff, 0x20000130, &DMFC0 , 0,
16415 CP0_ | MIPS64_ }, /* DMFC0 */
16416 { reserved_block , 0 , 0 , 32,
16417 0xfc0003ff, 0x20000138, 0 , 0,
16418 0x0 }, /* _POOL32A0~*(39) */
16419 { reserved_block , 0 , 0 , 32,
16420 0xfc0003ff, 0x20000140, 0 , 0,
16421 0x0 }, /* _POOL32A0~*(40) */
16422 { reserved_block , 0 , 0 , 32,
16423 0xfc0003ff, 0x20000148, 0 , 0,
16424 0x0 }, /* _POOL32A0~*(41) */
16425 { instruction , 0 , 0 , 32,
16426 0xfc0003ff, 0x20000150, &ADDU_32_ , 0,
16427 0x0 }, /* ADDU[32] */
16428 { instruction , 0 , 0 , 32,
16429 0xfc0003ff, 0x20000158, &MOD , 0,
16430 0x0 }, /* MOD */
16431 { reserved_block , 0 , 0 , 32,
16432 0xfc0003ff, 0x20000160, 0 , 0,
16433 0x0 }, /* _POOL32A0~*(44) */
16434 { reserved_block , 0 , 0 , 32,
16435 0xfc0003ff, 0x20000168, 0 , 0,
16436 0x0 }, /* _POOL32A0~*(45) */
16437 { instruction , 0 , 0 , 32,
16438 0xfc0003ff, 0x20000170, &DMTC0 , 0,
16439 CP0_ | MIPS64_ }, /* DMTC0 */
16440 { reserved_block , 0 , 0 , 32,
16441 0xfc0003ff, 0x20000178, 0 , 0,
16442 0x0 }, /* _POOL32A0~*(47) */
16443 { reserved_block , 0 , 0 , 32,
16444 0xfc0003ff, 0x20000180, 0 , 0,
16445 0x0 }, /* _POOL32A0~*(48) */
16446 { reserved_block , 0 , 0 , 32,
16447 0xfc0003ff, 0x20000188, 0 , 0,
16448 0x0 }, /* _POOL32A0~*(49) */
16449 { instruction , 0 , 0 , 32,
16450 0xfc0003ff, 0x20000190, &SUB , 0,
16451 XMMS_ }, /* SUB */
16452 { instruction , 0 , 0 , 32,
16453 0xfc0003ff, 0x20000198, &DIVU , 0,
16454 0x0 }, /* DIVU */
16455 { reserved_block , 0 , 0 , 32,
16456 0xfc0003ff, 0x200001a0, 0 , 0,
16457 0x0 }, /* _POOL32A0~*(52) */
16458 { reserved_block , 0 , 0 , 32,
16459 0xfc0003ff, 0x200001a8, 0 , 0,
16460 0x0 }, /* _POOL32A0~*(53) */
16461 { instruction , 0 , 0 , 32,
16462 0xfc0003ff, 0x200001b0, &DMFGC0 , 0,
16463 CP0_ | MIPS64_ | VZ_}, /* DMFGC0 */
16464 { reserved_block , 0 , 0 , 32,
16465 0xfc0003ff, 0x200001b8, 0 , 0,
16466 0x0 }, /* _POOL32A0~*(55) */
16467 { instruction , 0 , 0 , 32,
16468 0xfc0003ff, 0x200001c0, &RDHWR , 0,
16469 XMMS_ }, /* RDHWR */
16470 { reserved_block , 0 , 0 , 32,
16471 0xfc0003ff, 0x200001c8, 0 , 0,
16472 0x0 }, /* _POOL32A0~*(57) */
16473 { instruction , 0 , 0 , 32,
16474 0xfc0003ff, 0x200001d0, &SUBU_32_ , 0,
16475 0x0 }, /* SUBU[32] */
16476 { instruction , 0 , 0 , 32,
16477 0xfc0003ff, 0x200001d8, &MODU , 0,
16478 0x0 }, /* MODU */
16479 { reserved_block , 0 , 0 , 32,
16480 0xfc0003ff, 0x200001e0, 0 , 0,
16481 0x0 }, /* _POOL32A0~*(60) */
16482 { reserved_block , 0 , 0 , 32,
16483 0xfc0003ff, 0x200001e8, 0 , 0,
16484 0x0 }, /* _POOL32A0~*(61) */
16485 { instruction , 0 , 0 , 32,
16486 0xfc0003ff, 0x200001f0, &DMTGC0 , 0,
16487 CP0_ | MIPS64_ | VZ_}, /* DMTGC0 */
16488 { reserved_block , 0 , 0 , 32,
16489 0xfc0003ff, 0x200001f8, 0 , 0,
16490 0x0 }, /* _POOL32A0~*(63) */
16491 { reserved_block , 0 , 0 , 32,
16492 0xfc0003ff, 0x20000200, 0 , 0,
16493 0x0 }, /* _POOL32A0~*(64) */
16494 { reserved_block , 0 , 0 , 32,
16495 0xfc0003ff, 0x20000208, 0 , 0,
16496 0x0 }, /* _POOL32A0~*(65) */
16497 { pool , P_CMOVE , 2 , 32,
16498 0xfc0003ff, 0x20000210, 0 , 0,
16499 0x0 }, /* P.CMOVE */
16500 { reserved_block , 0 , 0 , 32,
16501 0xfc0003ff, 0x20000218, 0 , 0,
16502 0x0 }, /* _POOL32A0~*(67) */
16503 { reserved_block , 0 , 0 , 32,
16504 0xfc0003ff, 0x20000220, 0 , 0,
16505 0x0 }, /* _POOL32A0~*(68) */
16506 { instruction , 0 , 0 , 32,
16507 0xfc0003ff, 0x20000228, &FORK , 0,
16508 MT_ }, /* FORK */
16509 { instruction , 0 , 0 , 32,
16510 0xfc0003ff, 0x20000230, &MFTR , 0,
16511 MT_ }, /* MFTR */
16512 { instruction , 0 , 0 , 32,
16513 0xfc0003ff, 0x20000238, &MFHTR , 0,
16514 MT_ }, /* MFHTR */
16515 { reserved_block , 0 , 0 , 32,
16516 0xfc0003ff, 0x20000240, 0 , 0,
16517 0x0 }, /* _POOL32A0~*(72) */
16518 { reserved_block , 0 , 0 , 32,
16519 0xfc0003ff, 0x20000248, 0 , 0,
16520 0x0 }, /* _POOL32A0~*(73) */
16521 { instruction , 0 , 0 , 32,
16522 0xfc0003ff, 0x20000250, &AND_32_ , 0,
16523 0x0 }, /* AND[32] */
16524 { reserved_block , 0 , 0 , 32,
16525 0xfc0003ff, 0x20000258, 0 , 0,
16526 0x0 }, /* _POOL32A0~*(75) */
16527 { reserved_block , 0 , 0 , 32,
16528 0xfc0003ff, 0x20000260, 0 , 0,
16529 0x0 }, /* _POOL32A0~*(76) */
16530 { instruction , 0 , 0 , 32,
16531 0xfc0003ff, 0x20000268, &YIELD , 0,
16532 MT_ }, /* YIELD */
16533 { instruction , 0 , 0 , 32,
16534 0xfc0003ff, 0x20000270, &MTTR , 0,
16535 MT_ }, /* MTTR */
16536 { instruction , 0 , 0 , 32,
16537 0xfc0003ff, 0x20000278, &MTHTR , 0,
16538 MT_ }, /* MTHTR */
16539 { reserved_block , 0 , 0 , 32,
16540 0xfc0003ff, 0x20000280, 0 , 0,
16541 0x0 }, /* _POOL32A0~*(80) */
16542 { reserved_block , 0 , 0 , 32,
16543 0xfc0003ff, 0x20000288, 0 , 0,
16544 0x0 }, /* _POOL32A0~*(81) */
16545 { instruction , 0 , 0 , 32,
16546 0xfc0003ff, 0x20000290, &OR_32_ , 0,
16547 0x0 }, /* OR[32] */
16548 { reserved_block , 0 , 0 , 32,
16549 0xfc0003ff, 0x20000298, 0 , 0,
16550 0x0 }, /* _POOL32A0~*(83) */
16551 { reserved_block , 0 , 0 , 32,
16552 0xfc0003ff, 0x200002a0, 0 , 0,
16553 0x0 }, /* _POOL32A0~*(84) */
16554 { reserved_block , 0 , 0 , 32,
16555 0xfc0003ff, 0x200002a8, 0 , 0,
16556 0x0 }, /* _POOL32A0~*(85) */
16557 { pool , P_MT_VPE , 8 , 32,
16558 0xfc0003ff, 0x200002b0, 0 , 0,
16559 0x0 }, /* P.MT_VPE */
16560 { reserved_block , 0 , 0 , 32,
16561 0xfc0003ff, 0x200002b8, 0 , 0,
16562 0x0 }, /* _POOL32A0~*(87) */
16563 { reserved_block , 0 , 0 , 32,
16564 0xfc0003ff, 0x200002c0, 0 , 0,
16565 0x0 }, /* _POOL32A0~*(88) */
16566 { reserved_block , 0 , 0 , 32,
16567 0xfc0003ff, 0x200002c8, 0 , 0,
16568 0x0 }, /* _POOL32A0~*(89) */
16569 { instruction , 0 , 0 , 32,
16570 0xfc0003ff, 0x200002d0, &NOR , 0,
16571 0x0 }, /* NOR */
16572 { reserved_block , 0 , 0 , 32,
16573 0xfc0003ff, 0x200002d8, 0 , 0,
16574 0x0 }, /* _POOL32A0~*(91) */
16575 { reserved_block , 0 , 0 , 32,
16576 0xfc0003ff, 0x200002e0, 0 , 0,
16577 0x0 }, /* _POOL32A0~*(92) */
16578 { reserved_block , 0 , 0 , 32,
16579 0xfc0003ff, 0x200002e8, 0 , 0,
16580 0x0 }, /* _POOL32A0~*(93) */
16581 { reserved_block , 0 , 0 , 32,
16582 0xfc0003ff, 0x200002f0, 0 , 0,
16583 0x0 }, /* _POOL32A0~*(94) */
16584 { reserved_block , 0 , 0 , 32,
16585 0xfc0003ff, 0x200002f8, 0 , 0,
16586 0x0 }, /* _POOL32A0~*(95) */
16587 { reserved_block , 0 , 0 , 32,
16588 0xfc0003ff, 0x20000300, 0 , 0,
16589 0x0 }, /* _POOL32A0~*(96) */
16590 { reserved_block , 0 , 0 , 32,
16591 0xfc0003ff, 0x20000308, 0 , 0,
16592 0x0 }, /* _POOL32A0~*(97) */
16593 { instruction , 0 , 0 , 32,
16594 0xfc0003ff, 0x20000310, &XOR_32_ , 0,
16595 0x0 }, /* XOR[32] */
16596 { reserved_block , 0 , 0 , 32,
16597 0xfc0003ff, 0x20000318, 0 , 0,
16598 0x0 }, /* _POOL32A0~*(99) */
16599 { reserved_block , 0 , 0 , 32,
16600 0xfc0003ff, 0x20000320, 0 , 0,
16601 0x0 }, /* _POOL32A0~*(100) */
16602 { reserved_block , 0 , 0 , 32,
16603 0xfc0003ff, 0x20000328, 0 , 0,
16604 0x0 }, /* _POOL32A0~*(101) */
16605 { reserved_block , 0 , 0 , 32,
16606 0xfc0003ff, 0x20000330, 0 , 0,
16607 0x0 }, /* _POOL32A0~*(102) */
16608 { reserved_block , 0 , 0 , 32,
16609 0xfc0003ff, 0x20000338, 0 , 0,
16610 0x0 }, /* _POOL32A0~*(103) */
16611 { reserved_block , 0 , 0 , 32,
16612 0xfc0003ff, 0x20000340, 0 , 0,
16613 0x0 }, /* _POOL32A0~*(104) */
16614 { reserved_block , 0 , 0 , 32,
16615 0xfc0003ff, 0x20000348, 0 , 0,
16616 0x0 }, /* _POOL32A0~*(105) */
16617 { instruction , 0 , 0 , 32,
16618 0xfc0003ff, 0x20000350, &SLT , 0,
16619 0x0 }, /* SLT */
16620 { reserved_block , 0 , 0 , 32,
16621 0xfc0003ff, 0x20000358, 0 , 0,
16622 0x0 }, /* _POOL32A0~*(107) */
16623 { reserved_block , 0 , 0 , 32,
16624 0xfc0003ff, 0x20000360, 0 , 0,
16625 0x0 }, /* _POOL32A0~*(108) */
16626 { reserved_block , 0 , 0 , 32,
16627 0xfc0003ff, 0x20000368, 0 , 0,
16628 0x0 }, /* _POOL32A0~*(109) */
16629 { reserved_block , 0 , 0 , 32,
16630 0xfc0003ff, 0x20000370, 0 , 0,
16631 0x0 }, /* _POOL32A0~*(110) */
16632 { reserved_block , 0 , 0 , 32,
16633 0xfc0003ff, 0x20000378, 0 , 0,
16634 0x0 }, /* _POOL32A0~*(111) */
16635 { reserved_block , 0 , 0 , 32,
16636 0xfc0003ff, 0x20000380, 0 , 0,
16637 0x0 }, /* _POOL32A0~*(112) */
16638 { reserved_block , 0 , 0 , 32,
16639 0xfc0003ff, 0x20000388, 0 , 0,
16640 0x0 }, /* _POOL32A0~*(113) */
16641 { pool , P_SLTU , 2 , 32,
16642 0xfc0003ff, 0x20000390, 0 , 0,
16643 0x0 }, /* P.SLTU */
16644 { reserved_block , 0 , 0 , 32,
16645 0xfc0003ff, 0x20000398, 0 , 0,
16646 0x0 }, /* _POOL32A0~*(115) */
16647 { reserved_block , 0 , 0 , 32,
16648 0xfc0003ff, 0x200003a0, 0 , 0,
16649 0x0 }, /* _POOL32A0~*(116) */
16650 { reserved_block , 0 , 0 , 32,
16651 0xfc0003ff, 0x200003a8, 0 , 0,
16652 0x0 }, /* _POOL32A0~*(117) */
16653 { reserved_block , 0 , 0 , 32,
16654 0xfc0003ff, 0x200003b0, 0 , 0,
16655 0x0 }, /* _POOL32A0~*(118) */
16656 { reserved_block , 0 , 0 , 32,
16657 0xfc0003ff, 0x200003b8, 0 , 0,
16658 0x0 }, /* _POOL32A0~*(119) */
16659 { reserved_block , 0 , 0 , 32,
16660 0xfc0003ff, 0x200003c0, 0 , 0,
16661 0x0 }, /* _POOL32A0~*(120) */
16662 { reserved_block , 0 , 0 , 32,
16663 0xfc0003ff, 0x200003c8, 0 , 0,
16664 0x0 }, /* _POOL32A0~*(121) */
16665 { instruction , 0 , 0 , 32,
16666 0xfc0003ff, 0x200003d0, &SOV , 0,
16667 0x0 }, /* SOV */
16668 { reserved_block , 0 , 0 , 32,
16669 0xfc0003ff, 0x200003d8, 0 , 0,
16670 0x0 }, /* _POOL32A0~*(123) */
16671 { reserved_block , 0 , 0 , 32,
16672 0xfc0003ff, 0x200003e0, 0 , 0,
16673 0x0 }, /* _POOL32A0~*(124) */
16674 { reserved_block , 0 , 0 , 32,
16675 0xfc0003ff, 0x200003e8, 0 , 0,
16676 0x0 }, /* _POOL32A0~*(125) */
16677 { reserved_block , 0 , 0 , 32,
16678 0xfc0003ff, 0x200003f0, 0 , 0,
16679 0x0 }, /* _POOL32A0~*(126) */
16680 { reserved_block , 0 , 0 , 32,
16681 0xfc0003ff, 0x200003f8, 0 , 0,
16682 0x0 }, /* _POOL32A0~*(127) */
16686 static const Pool ADDQ__S__PH[2] = {
16687 { instruction , 0 , 0 , 32,
16688 0xfc0007ff, 0x2000000d, &ADDQ_PH , 0,
16689 DSP_ }, /* ADDQ.PH */
16690 { instruction , 0 , 0 , 32,
16691 0xfc0007ff, 0x2000040d, &ADDQ_S_PH , 0,
16692 DSP_ }, /* ADDQ_S.PH */
16696 static const Pool MUL__S__PH[2] = {
16697 { instruction , 0 , 0 , 32,
16698 0xfc0007ff, 0x2000002d, &MUL_PH , 0,
16699 DSP_ }, /* MUL.PH */
16700 { instruction , 0 , 0 , 32,
16701 0xfc0007ff, 0x2000042d, &MUL_S_PH , 0,
16702 DSP_ }, /* MUL_S.PH */
16706 static const Pool ADDQH__R__PH[2] = {
16707 { instruction , 0 , 0 , 32,
16708 0xfc0007ff, 0x2000004d, &ADDQH_PH , 0,
16709 DSP_ }, /* ADDQH.PH */
16710 { instruction , 0 , 0 , 32,
16711 0xfc0007ff, 0x2000044d, &ADDQH_R_PH , 0,
16712 DSP_ }, /* ADDQH_R.PH */
16716 static const Pool ADDQH__R__W[2] = {
16717 { instruction , 0 , 0 , 32,
16718 0xfc0007ff, 0x2000008d, &ADDQH_W , 0,
16719 DSP_ }, /* ADDQH.W */
16720 { instruction , 0 , 0 , 32,
16721 0xfc0007ff, 0x2000048d, &ADDQH_R_W , 0,
16722 DSP_ }, /* ADDQH_R.W */
16726 static const Pool ADDU__S__QB[2] = {
16727 { instruction , 0 , 0 , 32,
16728 0xfc0007ff, 0x200000cd, &ADDU_QB , 0,
16729 DSP_ }, /* ADDU.QB */
16730 { instruction , 0 , 0 , 32,
16731 0xfc0007ff, 0x200004cd, &ADDU_S_QB , 0,
16732 DSP_ }, /* ADDU_S.QB */
16736 static const Pool ADDU__S__PH[2] = {
16737 { instruction , 0 , 0 , 32,
16738 0xfc0007ff, 0x2000010d, &ADDU_PH , 0,
16739 DSP_ }, /* ADDU.PH */
16740 { instruction , 0 , 0 , 32,
16741 0xfc0007ff, 0x2000050d, &ADDU_S_PH , 0,
16742 DSP_ }, /* ADDU_S.PH */
16746 static const Pool ADDUH__R__QB[2] = {
16747 { instruction , 0 , 0 , 32,
16748 0xfc0007ff, 0x2000014d, &ADDUH_QB , 0,
16749 DSP_ }, /* ADDUH.QB */
16750 { instruction , 0 , 0 , 32,
16751 0xfc0007ff, 0x2000054d, &ADDUH_R_QB , 0,
16752 DSP_ }, /* ADDUH_R.QB */
16756 static const Pool SHRAV__R__PH[2] = {
16757 { instruction , 0 , 0 , 32,
16758 0xfc0007ff, 0x2000018d, &SHRAV_PH , 0,
16759 DSP_ }, /* SHRAV.PH */
16760 { instruction , 0 , 0 , 32,
16761 0xfc0007ff, 0x2000058d, &SHRAV_R_PH , 0,
16762 DSP_ }, /* SHRAV_R.PH */
16766 static const Pool SHRAV__R__QB[2] = {
16767 { instruction , 0 , 0 , 32,
16768 0xfc0007ff, 0x200001cd, &SHRAV_QB , 0,
16769 DSP_ }, /* SHRAV.QB */
16770 { instruction , 0 , 0 , 32,
16771 0xfc0007ff, 0x200005cd, &SHRAV_R_QB , 0,
16772 DSP_ }, /* SHRAV_R.QB */
16776 static const Pool SUBQ__S__PH[2] = {
16777 { instruction , 0 , 0 , 32,
16778 0xfc0007ff, 0x2000020d, &SUBQ_PH , 0,
16779 DSP_ }, /* SUBQ.PH */
16780 { instruction , 0 , 0 , 32,
16781 0xfc0007ff, 0x2000060d, &SUBQ_S_PH , 0,
16782 DSP_ }, /* SUBQ_S.PH */
16786 static const Pool SUBQH__R__PH[2] = {
16787 { instruction , 0 , 0 , 32,
16788 0xfc0007ff, 0x2000024d, &SUBQH_PH , 0,
16789 DSP_ }, /* SUBQH.PH */
16790 { instruction , 0 , 0 , 32,
16791 0xfc0007ff, 0x2000064d, &SUBQH_R_PH , 0,
16792 DSP_ }, /* SUBQH_R.PH */
16796 static const Pool SUBQH__R__W[2] = {
16797 { instruction , 0 , 0 , 32,
16798 0xfc0007ff, 0x2000028d, &SUBQH_W , 0,
16799 DSP_ }, /* SUBQH.W */
16800 { instruction , 0 , 0 , 32,
16801 0xfc0007ff, 0x2000068d, &SUBQH_R_W , 0,
16802 DSP_ }, /* SUBQH_R.W */
16806 static const Pool SUBU__S__QB[2] = {
16807 { instruction , 0 , 0 , 32,
16808 0xfc0007ff, 0x200002cd, &SUBU_QB , 0,
16809 DSP_ }, /* SUBU.QB */
16810 { instruction , 0 , 0 , 32,
16811 0xfc0007ff, 0x200006cd, &SUBU_S_QB , 0,
16812 DSP_ }, /* SUBU_S.QB */
16816 static const Pool SUBU__S__PH[2] = {
16817 { instruction , 0 , 0 , 32,
16818 0xfc0007ff, 0x2000030d, &SUBU_PH , 0,
16819 DSP_ }, /* SUBU.PH */
16820 { instruction , 0 , 0 , 32,
16821 0xfc0007ff, 0x2000070d, &SUBU_S_PH , 0,
16822 DSP_ }, /* SUBU_S.PH */
16826 static const Pool SHRA__R__PH[2] = {
16827 { instruction , 0 , 0 , 32,
16828 0xfc0007ff, 0x20000335, &SHRA_PH , 0,
16829 DSP_ }, /* SHRA.PH */
16830 { instruction , 0 , 0 , 32,
16831 0xfc0007ff, 0x20000735, &SHRA_R_PH , 0,
16832 DSP_ }, /* SHRA_R.PH */
16836 static const Pool SUBUH__R__QB[2] = {
16837 { instruction , 0 , 0 , 32,
16838 0xfc0007ff, 0x2000034d, &SUBUH_QB , 0,
16839 DSP_ }, /* SUBUH.QB */
16840 { instruction , 0 , 0 , 32,
16841 0xfc0007ff, 0x2000074d, &SUBUH_R_QB , 0,
16842 DSP_ }, /* SUBUH_R.QB */
16846 static const Pool SHLLV__S__PH[2] = {
16847 { instruction , 0 , 0 , 32,
16848 0xfc0007ff, 0x2000038d, &SHLLV_PH , 0,
16849 DSP_ }, /* SHLLV.PH */
16850 { instruction , 0 , 0 , 32,
16851 0xfc0007ff, 0x2000078d, &SHLLV_S_PH , 0,
16852 DSP_ }, /* SHLLV_S.PH */
16856 static const Pool SHLL__S__PH[4] = {
16857 { instruction , 0 , 0 , 32,
16858 0xfc000fff, 0x200003b5, &SHLL_PH , 0,
16859 DSP_ }, /* SHLL.PH */
16860 { reserved_block , 0 , 0 , 32,
16861 0xfc000fff, 0x200007b5, 0 , 0,
16862 0x0 }, /* SHLL[_S].PH~*(1) */
16863 { instruction , 0 , 0 , 32,
16864 0xfc000fff, 0x20000bb5, &SHLL_S_PH , 0,
16865 DSP_ }, /* SHLL_S.PH */
16866 { reserved_block , 0 , 0 , 32,
16867 0xfc000fff, 0x20000fb5, 0 , 0,
16868 0x0 }, /* SHLL[_S].PH~*(3) */
16872 static const Pool PRECR_SRA__R__PH_W[2] = {
16873 { instruction , 0 , 0 , 32,
16874 0xfc0007ff, 0x200003cd, &PRECR_SRA_PH_W , 0,
16875 DSP_ }, /* PRECR_SRA.PH.W */
16876 { instruction , 0 , 0 , 32,
16877 0xfc0007ff, 0x200007cd, &PRECR_SRA_R_PH_W , 0,
16878 DSP_ }, /* PRECR_SRA_R.PH.W */
16882 static const Pool _POOL32A5[128] = {
16883 { instruction , 0 , 0 , 32,
16884 0xfc0003ff, 0x20000005, &CMP_EQ_PH , 0,
16885 DSP_ }, /* CMP.EQ.PH */
16886 { pool , ADDQ__S__PH , 2 , 32,
16887 0xfc0003ff, 0x2000000d, 0 , 0,
16888 0x0 }, /* ADDQ[_S].PH */
16889 { reserved_block , 0 , 0 , 32,
16890 0xfc0003ff, 0x20000015, 0 , 0,
16891 0x0 }, /* _POOL32A5~*(2) */
16892 { instruction , 0 , 0 , 32,
16893 0xfc0003ff, 0x2000001d, &SHILO , 0,
16894 DSP_ }, /* SHILO */
16895 { instruction , 0 , 0 , 32,
16896 0xfc0003ff, 0x20000025, &MULEQ_S_W_PHL , 0,
16897 DSP_ }, /* MULEQ_S.W.PHL */
16898 { pool , MUL__S__PH , 2 , 32,
16899 0xfc0003ff, 0x2000002d, 0 , 0,
16900 0x0 }, /* MUL[_S].PH */
16901 { reserved_block , 0 , 0 , 32,
16902 0xfc0003ff, 0x20000035, 0 , 0,
16903 0x0 }, /* _POOL32A5~*(6) */
16904 { instruction , 0 , 0 , 32,
16905 0xfc0003ff, 0x2000003d, &REPL_PH , 0,
16906 DSP_ }, /* REPL.PH */
16907 { instruction , 0 , 0 , 32,
16908 0xfc0003ff, 0x20000045, &CMP_LT_PH , 0,
16909 DSP_ }, /* CMP.LT.PH */
16910 { pool , ADDQH__R__PH , 2 , 32,
16911 0xfc0003ff, 0x2000004d, 0 , 0,
16912 0x0 }, /* ADDQH[_R].PH */
16913 { reserved_block , 0 , 0 , 32,
16914 0xfc0003ff, 0x20000055, 0 , 0,
16915 0x0 }, /* _POOL32A5~*(10) */
16916 { reserved_block , 0 , 0 , 32,
16917 0xfc0003ff, 0x2000005d, 0 , 0,
16918 0x0 }, /* _POOL32A5~*(11) */
16919 { instruction , 0 , 0 , 32,
16920 0xfc0003ff, 0x20000065, &MULEQ_S_W_PHR , 0,
16921 DSP_ }, /* MULEQ_S.W.PHR */
16922 { instruction , 0 , 0 , 32,
16923 0xfc0003ff, 0x2000006d, &PRECR_QB_PH , 0,
16924 DSP_ }, /* PRECR.QB.PH */
16925 { reserved_block , 0 , 0 , 32,
16926 0xfc0003ff, 0x20000075, 0 , 0,
16927 0x0 }, /* _POOL32A5~*(14) */
16928 { reserved_block , 0 , 0 , 32,
16929 0xfc0003ff, 0x2000007d, 0 , 0,
16930 0x0 }, /* _POOL32A5~*(15) */
16931 { instruction , 0 , 0 , 32,
16932 0xfc0003ff, 0x20000085, &CMP_LE_PH , 0,
16933 DSP_ }, /* CMP.LE.PH */
16934 { pool , ADDQH__R__W , 2 , 32,
16935 0xfc0003ff, 0x2000008d, 0 , 0,
16936 0x0 }, /* ADDQH[_R].W */
16937 { instruction , 0 , 0 , 32,
16938 0xfc0003ff, 0x20000095, &MULEU_S_PH_QBL , 0,
16939 DSP_ }, /* MULEU_S.PH.QBL */
16940 { reserved_block , 0 , 0 , 32,
16941 0xfc0003ff, 0x2000009d, 0 , 0,
16942 0x0 }, /* _POOL32A5~*(19) */
16943 { reserved_block , 0 , 0 , 32,
16944 0xfc0003ff, 0x200000a5, 0 , 0,
16945 0x0 }, /* _POOL32A5~*(20) */
16946 { instruction , 0 , 0 , 32,
16947 0xfc0003ff, 0x200000ad, &PRECRQ_QB_PH , 0,
16948 DSP_ }, /* PRECRQ.QB.PH */
16949 { reserved_block , 0 , 0 , 32,
16950 0xfc0003ff, 0x200000b5, 0 , 0,
16951 0x0 }, /* _POOL32A5~*(22) */
16952 { reserved_block , 0 , 0 , 32,
16953 0xfc0003ff, 0x200000bd, 0 , 0,
16954 0x0 }, /* _POOL32A5~*(23) */
16955 { instruction , 0 , 0 , 32,
16956 0xfc0003ff, 0x200000c5, &CMPGU_EQ_QB , 0,
16957 DSP_ }, /* CMPGU.EQ.QB */
16958 { pool , ADDU__S__QB , 2 , 32,
16959 0xfc0003ff, 0x200000cd, 0 , 0,
16960 0x0 }, /* ADDU[_S].QB */
16961 { instruction , 0 , 0 , 32,
16962 0xfc0003ff, 0x200000d5, &MULEU_S_PH_QBR , 0,
16963 DSP_ }, /* MULEU_S.PH.QBR */
16964 { reserved_block , 0 , 0 , 32,
16965 0xfc0003ff, 0x200000dd, 0 , 0,
16966 0x0 }, /* _POOL32A5~*(27) */
16967 { reserved_block , 0 , 0 , 32,
16968 0xfc0003ff, 0x200000e5, 0 , 0,
16969 0x0 }, /* _POOL32A5~*(28) */
16970 { instruction , 0 , 0 , 32,
16971 0xfc0003ff, 0x200000ed, &PRECRQ_PH_W , 0,
16972 DSP_ }, /* PRECRQ.PH.W */
16973 { reserved_block , 0 , 0 , 32,
16974 0xfc0003ff, 0x200000f5, 0 , 0,
16975 0x0 }, /* _POOL32A5~*(30) */
16976 { reserved_block , 0 , 0 , 32,
16977 0xfc0003ff, 0x200000fd, 0 , 0,
16978 0x0 }, /* _POOL32A5~*(31) */
16979 { instruction , 0 , 0 , 32,
16980 0xfc0003ff, 0x20000105, &CMPGU_LT_QB , 0,
16981 DSP_ }, /* CMPGU.LT.QB */
16982 { pool , ADDU__S__PH , 2 , 32,
16983 0xfc0003ff, 0x2000010d, 0 , 0,
16984 0x0 }, /* ADDU[_S].PH */
16985 { instruction , 0 , 0 , 32,
16986 0xfc0003ff, 0x20000115, &MULQ_RS_PH , 0,
16987 DSP_ }, /* MULQ_RS.PH */
16988 { reserved_block , 0 , 0 , 32,
16989 0xfc0003ff, 0x2000011d, 0 , 0,
16990 0x0 }, /* _POOL32A5~*(35) */
16991 { reserved_block , 0 , 0 , 32,
16992 0xfc0003ff, 0x20000125, 0 , 0,
16993 0x0 }, /* _POOL32A5~*(36) */
16994 { instruction , 0 , 0 , 32,
16995 0xfc0003ff, 0x2000012d, &PRECRQ_RS_PH_W , 0,
16996 DSP_ }, /* PRECRQ_RS.PH.W */
16997 { reserved_block , 0 , 0 , 32,
16998 0xfc0003ff, 0x20000135, 0 , 0,
16999 0x0 }, /* _POOL32A5~*(38) */
17000 { reserved_block , 0 , 0 , 32,
17001 0xfc0003ff, 0x2000013d, 0 , 0,
17002 0x0 }, /* _POOL32A5~*(39) */
17003 { instruction , 0 , 0 , 32,
17004 0xfc0003ff, 0x20000145, &CMPGU_LE_QB , 0,
17005 DSP_ }, /* CMPGU.LE.QB */
17006 { pool , ADDUH__R__QB , 2 , 32,
17007 0xfc0003ff, 0x2000014d, 0 , 0,
17008 0x0 }, /* ADDUH[_R].QB */
17009 { instruction , 0 , 0 , 32,
17010 0xfc0003ff, 0x20000155, &MULQ_S_PH , 0,
17011 DSP_ }, /* MULQ_S.PH */
17012 { reserved_block , 0 , 0 , 32,
17013 0xfc0003ff, 0x2000015d, 0 , 0,
17014 0x0 }, /* _POOL32A5~*(43) */
17015 { reserved_block , 0 , 0 , 32,
17016 0xfc0003ff, 0x20000165, 0 , 0,
17017 0x0 }, /* _POOL32A5~*(44) */
17018 { instruction , 0 , 0 , 32,
17019 0xfc0003ff, 0x2000016d, &PRECRQU_S_QB_PH , 0,
17020 DSP_ }, /* PRECRQU_S.QB.PH */
17021 { reserved_block , 0 , 0 , 32,
17022 0xfc0003ff, 0x20000175, 0 , 0,
17023 0x0 }, /* _POOL32A5~*(46) */
17024 { reserved_block , 0 , 0 , 32,
17025 0xfc0003ff, 0x2000017d, 0 , 0,
17026 0x0 }, /* _POOL32A5~*(47) */
17027 { instruction , 0 , 0 , 32,
17028 0xfc0003ff, 0x20000185, &CMPGDU_EQ_QB , 0,
17029 DSP_ }, /* CMPGDU.EQ.QB */
17030 { pool , SHRAV__R__PH , 2 , 32,
17031 0xfc0003ff, 0x2000018d, 0 , 0,
17032 0x0 }, /* SHRAV[_R].PH */
17033 { instruction , 0 , 0 , 32,
17034 0xfc0003ff, 0x20000195, &MULQ_RS_W , 0,
17035 DSP_ }, /* MULQ_RS.W */
17036 { reserved_block , 0 , 0 , 32,
17037 0xfc0003ff, 0x2000019d, 0 , 0,
17038 0x0 }, /* _POOL32A5~*(51) */
17039 { reserved_block , 0 , 0 , 32,
17040 0xfc0003ff, 0x200001a5, 0 , 0,
17041 0x0 }, /* _POOL32A5~*(52) */
17042 { instruction , 0 , 0 , 32,
17043 0xfc0003ff, 0x200001ad, &PACKRL_PH , 0,
17044 DSP_ }, /* PACKRL.PH */
17045 { reserved_block , 0 , 0 , 32,
17046 0xfc0003ff, 0x200001b5, 0 , 0,
17047 0x0 }, /* _POOL32A5~*(54) */
17048 { reserved_block , 0 , 0 , 32,
17049 0xfc0003ff, 0x200001bd, 0 , 0,
17050 0x0 }, /* _POOL32A5~*(55) */
17051 { instruction , 0 , 0 , 32,
17052 0xfc0003ff, 0x200001c5, &CMPGDU_LT_QB , 0,
17053 DSP_ }, /* CMPGDU.LT.QB */
17054 { pool , SHRAV__R__QB , 2 , 32,
17055 0xfc0003ff, 0x200001cd, 0 , 0,
17056 0x0 }, /* SHRAV[_R].QB */
17057 { instruction , 0 , 0 , 32,
17058 0xfc0003ff, 0x200001d5, &MULQ_S_W , 0,
17059 DSP_ }, /* MULQ_S.W */
17060 { reserved_block , 0 , 0 , 32,
17061 0xfc0003ff, 0x200001dd, 0 , 0,
17062 0x0 }, /* _POOL32A5~*(59) */
17063 { reserved_block , 0 , 0 , 32,
17064 0xfc0003ff, 0x200001e5, 0 , 0,
17065 0x0 }, /* _POOL32A5~*(60) */
17066 { instruction , 0 , 0 , 32,
17067 0xfc0003ff, 0x200001ed, &PICK_QB , 0,
17068 DSP_ }, /* PICK.QB */
17069 { reserved_block , 0 , 0 , 32,
17070 0xfc0003ff, 0x200001f5, 0 , 0,
17071 0x0 }, /* _POOL32A5~*(62) */
17072 { reserved_block , 0 , 0 , 32,
17073 0xfc0003ff, 0x200001fd, 0 , 0,
17074 0x0 }, /* _POOL32A5~*(63) */
17075 { instruction , 0 , 0 , 32,
17076 0xfc0003ff, 0x20000205, &CMPGDU_LE_QB , 0,
17077 DSP_ }, /* CMPGDU.LE.QB */
17078 { pool , SUBQ__S__PH , 2 , 32,
17079 0xfc0003ff, 0x2000020d, 0 , 0,
17080 0x0 }, /* SUBQ[_S].PH */
17081 { instruction , 0 , 0 , 32,
17082 0xfc0003ff, 0x20000215, &APPEND , 0,
17083 DSP_ }, /* APPEND */
17084 { reserved_block , 0 , 0 , 32,
17085 0xfc0003ff, 0x2000021d, 0 , 0,
17086 0x0 }, /* _POOL32A5~*(67) */
17087 { reserved_block , 0 , 0 , 32,
17088 0xfc0003ff, 0x20000225, 0 , 0,
17089 0x0 }, /* _POOL32A5~*(68) */
17090 { instruction , 0 , 0 , 32,
17091 0xfc0003ff, 0x2000022d, &PICK_PH , 0,
17092 DSP_ }, /* PICK.PH */
17093 { reserved_block , 0 , 0 , 32,
17094 0xfc0003ff, 0x20000235, 0 , 0,
17095 0x0 }, /* _POOL32A5~*(70) */
17096 { reserved_block , 0 , 0 , 32,
17097 0xfc0003ff, 0x2000023d, 0 , 0,
17098 0x0 }, /* _POOL32A5~*(71) */
17099 { instruction , 0 , 0 , 32,
17100 0xfc0003ff, 0x20000245, &CMPU_EQ_QB , 0,
17101 DSP_ }, /* CMPU.EQ.QB */
17102 { pool , SUBQH__R__PH , 2 , 32,
17103 0xfc0003ff, 0x2000024d, 0 , 0,
17104 0x0 }, /* SUBQH[_R].PH */
17105 { instruction , 0 , 0 , 32,
17106 0xfc0003ff, 0x20000255, &PREPEND , 0,
17107 DSP_ }, /* PREPEND */
17108 { reserved_block , 0 , 0 , 32,
17109 0xfc0003ff, 0x2000025d, 0 , 0,
17110 0x0 }, /* _POOL32A5~*(75) */
17111 { reserved_block , 0 , 0 , 32,
17112 0xfc0003ff, 0x20000265, 0 , 0,
17113 0x0 }, /* _POOL32A5~*(76) */
17114 { reserved_block , 0 , 0 , 32,
17115 0xfc0003ff, 0x2000026d, 0 , 0,
17116 0x0 }, /* _POOL32A5~*(77) */
17117 { reserved_block , 0 , 0 , 32,
17118 0xfc0003ff, 0x20000275, 0 , 0,
17119 0x0 }, /* _POOL32A5~*(78) */
17120 { reserved_block , 0 , 0 , 32,
17121 0xfc0003ff, 0x2000027d, 0 , 0,
17122 0x0 }, /* _POOL32A5~*(79) */
17123 { instruction , 0 , 0 , 32,
17124 0xfc0003ff, 0x20000285, &CMPU_LT_QB , 0,
17125 DSP_ }, /* CMPU.LT.QB */
17126 { pool , SUBQH__R__W , 2 , 32,
17127 0xfc0003ff, 0x2000028d, 0 , 0,
17128 0x0 }, /* SUBQH[_R].W */
17129 { instruction , 0 , 0 , 32,
17130 0xfc0003ff, 0x20000295, &MODSUB , 0,
17131 DSP_ }, /* MODSUB */
17132 { reserved_block , 0 , 0 , 32,
17133 0xfc0003ff, 0x2000029d, 0 , 0,
17134 0x0 }, /* _POOL32A5~*(83) */
17135 { reserved_block , 0 , 0 , 32,
17136 0xfc0003ff, 0x200002a5, 0 , 0,
17137 0x0 }, /* _POOL32A5~*(84) */
17138 { reserved_block , 0 , 0 , 32,
17139 0xfc0003ff, 0x200002ad, 0 , 0,
17140 0x0 }, /* _POOL32A5~*(85) */
17141 { reserved_block , 0 , 0 , 32,
17142 0xfc0003ff, 0x200002b5, 0 , 0,
17143 0x0 }, /* _POOL32A5~*(86) */
17144 { reserved_block , 0 , 0 , 32,
17145 0xfc0003ff, 0x200002bd, 0 , 0,
17146 0x0 }, /* _POOL32A5~*(87) */
17147 { instruction , 0 , 0 , 32,
17148 0xfc0003ff, 0x200002c5, &CMPU_LE_QB , 0,
17149 DSP_ }, /* CMPU.LE.QB */
17150 { pool , SUBU__S__QB , 2 , 32,
17151 0xfc0003ff, 0x200002cd, 0 , 0,
17152 0x0 }, /* SUBU[_S].QB */
17153 { instruction , 0 , 0 , 32,
17154 0xfc0003ff, 0x200002d5, &SHRAV_R_W , 0,
17155 DSP_ }, /* SHRAV_R.W */
17156 { reserved_block , 0 , 0 , 32,
17157 0xfc0003ff, 0x200002dd, 0 , 0,
17158 0x0 }, /* _POOL32A5~*(91) */
17159 { reserved_block , 0 , 0 , 32,
17160 0xfc0003ff, 0x200002e5, 0 , 0,
17161 0x0 }, /* _POOL32A5~*(92) */
17162 { reserved_block , 0 , 0 , 32,
17163 0xfc0003ff, 0x200002ed, 0 , 0,
17164 0x0 }, /* _POOL32A5~*(93) */
17165 { instruction , 0 , 0 , 32,
17166 0xfc0003ff, 0x200002f5, &SHRA_R_W , 0,
17167 DSP_ }, /* SHRA_R.W */
17168 { reserved_block , 0 , 0 , 32,
17169 0xfc0003ff, 0x200002fd, 0 , 0,
17170 0x0 }, /* _POOL32A5~*(95) */
17171 { instruction , 0 , 0 , 32,
17172 0xfc0003ff, 0x20000305, &ADDQ_S_W , 0,
17173 DSP_ }, /* ADDQ_S.W */
17174 { pool , SUBU__S__PH , 2 , 32,
17175 0xfc0003ff, 0x2000030d, 0 , 0,
17176 0x0 }, /* SUBU[_S].PH */
17177 { instruction , 0 , 0 , 32,
17178 0xfc0003ff, 0x20000315, &SHRLV_PH , 0,
17179 DSP_ }, /* SHRLV.PH */
17180 { reserved_block , 0 , 0 , 32,
17181 0xfc0003ff, 0x2000031d, 0 , 0,
17182 0x0 }, /* _POOL32A5~*(99) */
17183 { reserved_block , 0 , 0 , 32,
17184 0xfc0003ff, 0x20000325, 0 , 0,
17185 0x0 }, /* _POOL32A5~*(100) */
17186 { reserved_block , 0 , 0 , 32,
17187 0xfc0003ff, 0x2000032d, 0 , 0,
17188 0x0 }, /* _POOL32A5~*(101) */
17189 { pool , SHRA__R__PH , 2 , 32,
17190 0xfc0003ff, 0x20000335, 0 , 0,
17191 0x0 }, /* SHRA[_R].PH */
17192 { reserved_block , 0 , 0 , 32,
17193 0xfc0003ff, 0x2000033d, 0 , 0,
17194 0x0 }, /* _POOL32A5~*(103) */
17195 { instruction , 0 , 0 , 32,
17196 0xfc0003ff, 0x20000345, &SUBQ_S_W , 0,
17197 DSP_ }, /* SUBQ_S.W */
17198 { pool , SUBUH__R__QB , 2 , 32,
17199 0xfc0003ff, 0x2000034d, 0 , 0,
17200 0x0 }, /* SUBUH[_R].QB */
17201 { instruction , 0 , 0 , 32,
17202 0xfc0003ff, 0x20000355, &SHRLV_QB , 0,
17203 DSP_ }, /* SHRLV.QB */
17204 { reserved_block , 0 , 0 , 32,
17205 0xfc0003ff, 0x2000035d, 0 , 0,
17206 0x0 }, /* _POOL32A5~*(107) */
17207 { reserved_block , 0 , 0 , 32,
17208 0xfc0003ff, 0x20000365, 0 , 0,
17209 0x0 }, /* _POOL32A5~*(108) */
17210 { reserved_block , 0 , 0 , 32,
17211 0xfc0003ff, 0x2000036d, 0 , 0,
17212 0x0 }, /* _POOL32A5~*(109) */
17213 { reserved_block , 0 , 0 , 32,
17214 0xfc0003ff, 0x20000375, 0 , 0,
17215 0x0 }, /* _POOL32A5~*(110) */
17216 { reserved_block , 0 , 0 , 32,
17217 0xfc0003ff, 0x2000037d, 0 , 0,
17218 0x0 }, /* _POOL32A5~*(111) */
17219 { instruction , 0 , 0 , 32,
17220 0xfc0003ff, 0x20000385, &ADDSC , 0,
17221 DSP_ }, /* ADDSC */
17222 { pool , SHLLV__S__PH , 2 , 32,
17223 0xfc0003ff, 0x2000038d, 0 , 0,
17224 0x0 }, /* SHLLV[_S].PH */
17225 { instruction , 0 , 0 , 32,
17226 0xfc0003ff, 0x20000395, &SHLLV_QB , 0,
17227 DSP_ }, /* SHLLV.QB */
17228 { reserved_block , 0 , 0 , 32,
17229 0xfc0003ff, 0x2000039d, 0 , 0,
17230 0x0 }, /* _POOL32A5~*(115) */
17231 { reserved_block , 0 , 0 , 32,
17232 0xfc0003ff, 0x200003a5, 0 , 0,
17233 0x0 }, /* _POOL32A5~*(116) */
17234 { reserved_block , 0 , 0 , 32,
17235 0xfc0003ff, 0x200003ad, 0 , 0,
17236 0x0 }, /* _POOL32A5~*(117) */
17237 { pool , SHLL__S__PH , 4 , 32,
17238 0xfc0003ff, 0x200003b5, 0 , 0,
17239 0x0 }, /* SHLL[_S].PH */
17240 { reserved_block , 0 , 0 , 32,
17241 0xfc0003ff, 0x200003bd, 0 , 0,
17242 0x0 }, /* _POOL32A5~*(119) */
17243 { instruction , 0 , 0 , 32,
17244 0xfc0003ff, 0x200003c5, &ADDWC , 0,
17245 DSP_ }, /* ADDWC */
17246 { pool , PRECR_SRA__R__PH_W , 2 , 32,
17247 0xfc0003ff, 0x200003cd, 0 , 0,
17248 0x0 }, /* PRECR_SRA[_R].PH.W */
17249 { instruction , 0 , 0 , 32,
17250 0xfc0003ff, 0x200003d5, &SHLLV_S_W , 0,
17251 DSP_ }, /* SHLLV_S.W */
17252 { reserved_block , 0 , 0 , 32,
17253 0xfc0003ff, 0x200003dd, 0 , 0,
17254 0x0 }, /* _POOL32A5~*(123) */
17255 { reserved_block , 0 , 0 , 32,
17256 0xfc0003ff, 0x200003e5, 0 , 0,
17257 0x0 }, /* _POOL32A5~*(124) */
17258 { reserved_block , 0 , 0 , 32,
17259 0xfc0003ff, 0x200003ed, 0 , 0,
17260 0x0 }, /* _POOL32A5~*(125) */
17261 { instruction , 0 , 0 , 32,
17262 0xfc0003ff, 0x200003f5, &SHLL_S_W , 0,
17263 DSP_ }, /* SHLL_S.W */
17264 { reserved_block , 0 , 0 , 32,
17265 0xfc0003ff, 0x200003fd, 0 , 0,
17266 0x0 }, /* _POOL32A5~*(127) */
17270 static const Pool PP_LSX[16] = {
17271 { instruction , 0 , 0 , 32,
17272 0xfc0007ff, 0x20000007, &LBX , 0,
17273 0x0 }, /* LBX */
17274 { instruction , 0 , 0 , 32,
17275 0xfc0007ff, 0x20000087, &SBX , 0,
17276 XMMS_ }, /* SBX */
17277 { instruction , 0 , 0 , 32,
17278 0xfc0007ff, 0x20000107, &LBUX , 0,
17279 0x0 }, /* LBUX */
17280 { reserved_block , 0 , 0 , 32,
17281 0xfc0007ff, 0x20000187, 0 , 0,
17282 0x0 }, /* PP.LSX~*(3) */
17283 { instruction , 0 , 0 , 32,
17284 0xfc0007ff, 0x20000207, &LHX , 0,
17285 0x0 }, /* LHX */
17286 { instruction , 0 , 0 , 32,
17287 0xfc0007ff, 0x20000287, &SHX , 0,
17288 XMMS_ }, /* SHX */
17289 { instruction , 0 , 0 , 32,
17290 0xfc0007ff, 0x20000307, &LHUX , 0,
17291 0x0 }, /* LHUX */
17292 { instruction , 0 , 0 , 32,
17293 0xfc0007ff, 0x20000387, &LWUX , 0,
17294 MIPS64_ }, /* LWUX */
17295 { instruction , 0 , 0 , 32,
17296 0xfc0007ff, 0x20000407, &LWX , 0,
17297 0x0 }, /* LWX */
17298 { instruction , 0 , 0 , 32,
17299 0xfc0007ff, 0x20000487, &SWX , 0,
17300 XMMS_ }, /* SWX */
17301 { instruction , 0 , 0 , 32,
17302 0xfc0007ff, 0x20000507, &LWC1X , 0,
17303 CP1_ }, /* LWC1X */
17304 { instruction , 0 , 0 , 32,
17305 0xfc0007ff, 0x20000587, &SWC1X , 0,
17306 CP1_ }, /* SWC1X */
17307 { instruction , 0 , 0 , 32,
17308 0xfc0007ff, 0x20000607, &LDX , 0,
17309 MIPS64_ }, /* LDX */
17310 { instruction , 0 , 0 , 32,
17311 0xfc0007ff, 0x20000687, &SDX , 0,
17312 MIPS64_ }, /* SDX */
17313 { instruction , 0 , 0 , 32,
17314 0xfc0007ff, 0x20000707, &LDC1X , 0,
17315 CP1_ }, /* LDC1X */
17316 { instruction , 0 , 0 , 32,
17317 0xfc0007ff, 0x20000787, &SDC1X , 0,
17318 CP1_ }, /* SDC1X */
17322 static const Pool PP_LSXS[16] = {
17323 { reserved_block , 0 , 0 , 32,
17324 0xfc0007ff, 0x20000047, 0 , 0,
17325 0x0 }, /* PP.LSXS~*(0) */
17326 { reserved_block , 0 , 0 , 32,
17327 0xfc0007ff, 0x200000c7, 0 , 0,
17328 0x0 }, /* PP.LSXS~*(1) */
17329 { reserved_block , 0 , 0 , 32,
17330 0xfc0007ff, 0x20000147, 0 , 0,
17331 0x0 }, /* PP.LSXS~*(2) */
17332 { reserved_block , 0 , 0 , 32,
17333 0xfc0007ff, 0x200001c7, 0 , 0,
17334 0x0 }, /* PP.LSXS~*(3) */
17335 { instruction , 0 , 0 , 32,
17336 0xfc0007ff, 0x20000247, &LHXS , 0,
17337 0x0 }, /* LHXS */
17338 { instruction , 0 , 0 , 32,
17339 0xfc0007ff, 0x200002c7, &SHXS , 0,
17340 XMMS_ }, /* SHXS */
17341 { instruction , 0 , 0 , 32,
17342 0xfc0007ff, 0x20000347, &LHUXS , 0,
17343 0x0 }, /* LHUXS */
17344 { instruction , 0 , 0 , 32,
17345 0xfc0007ff, 0x200003c7, &LWUXS , 0,
17346 MIPS64_ }, /* LWUXS */
17347 { instruction , 0 , 0 , 32,
17348 0xfc0007ff, 0x20000447, &LWXS_32_ , 0,
17349 0x0 }, /* LWXS[32] */
17350 { instruction , 0 , 0 , 32,
17351 0xfc0007ff, 0x200004c7, &SWXS , 0,
17352 XMMS_ }, /* SWXS */
17353 { instruction , 0 , 0 , 32,
17354 0xfc0007ff, 0x20000547, &LWC1XS , 0,
17355 CP1_ }, /* LWC1XS */
17356 { instruction , 0 , 0 , 32,
17357 0xfc0007ff, 0x200005c7, &SWC1XS , 0,
17358 CP1_ }, /* SWC1XS */
17359 { instruction , 0 , 0 , 32,
17360 0xfc0007ff, 0x20000647, &LDXS , 0,
17361 MIPS64_ }, /* LDXS */
17362 { instruction , 0 , 0 , 32,
17363 0xfc0007ff, 0x200006c7, &SDXS , 0,
17364 MIPS64_ }, /* SDXS */
17365 { instruction , 0 , 0 , 32,
17366 0xfc0007ff, 0x20000747, &LDC1XS , 0,
17367 CP1_ }, /* LDC1XS */
17368 { instruction , 0 , 0 , 32,
17369 0xfc0007ff, 0x200007c7, &SDC1XS , 0,
17370 CP1_ }, /* SDC1XS */
17374 static const Pool P_LSX[2] = {
17375 { pool , PP_LSX , 16 , 32,
17376 0xfc00007f, 0x20000007, 0 , 0,
17377 0x0 }, /* PP.LSX */
17378 { pool , PP_LSXS , 16 , 32,
17379 0xfc00007f, 0x20000047, 0 , 0,
17380 0x0 }, /* PP.LSXS */
17384 static const Pool POOL32Axf_1_0[4] = {
17385 { instruction , 0 , 0 , 32,
17386 0xfc003fff, 0x2000007f, &MFHI_DSP_ , 0,
17387 DSP_ }, /* MFHI[DSP] */
17388 { instruction , 0 , 0 , 32,
17389 0xfc003fff, 0x2000107f, &MFLO_DSP_ , 0,
17390 DSP_ }, /* MFLO[DSP] */
17391 { instruction , 0 , 0 , 32,
17392 0xfc003fff, 0x2000207f, &MTHI_DSP_ , 0,
17393 DSP_ }, /* MTHI[DSP] */
17394 { instruction , 0 , 0 , 32,
17395 0xfc003fff, 0x2000307f, &MTLO_DSP_ , 0,
17396 DSP_ }, /* MTLO[DSP] */
17400 static const Pool POOL32Axf_1_1[4] = {
17401 { instruction , 0 , 0 , 32,
17402 0xfc003fff, 0x2000027f, &MTHLIP , 0,
17403 DSP_ }, /* MTHLIP */
17404 { instruction , 0 , 0 , 32,
17405 0xfc003fff, 0x2000127f, &SHILOV , 0,
17406 DSP_ }, /* SHILOV */
17407 { reserved_block , 0 , 0 , 32,
17408 0xfc003fff, 0x2000227f, 0 , 0,
17409 0x0 }, /* POOL32Axf_1_1~*(2) */
17410 { reserved_block , 0 , 0 , 32,
17411 0xfc003fff, 0x2000327f, 0 , 0,
17412 0x0 }, /* POOL32Axf_1_1~*(3) */
17416 static const Pool POOL32Axf_1_3[4] = {
17417 { instruction , 0 , 0 , 32,
17418 0xfc003fff, 0x2000067f, &RDDSP , 0,
17419 DSP_ }, /* RDDSP */
17420 { instruction , 0 , 0 , 32,
17421 0xfc003fff, 0x2000167f, &WRDSP , 0,
17422 DSP_ }, /* WRDSP */
17423 { instruction , 0 , 0 , 32,
17424 0xfc003fff, 0x2000267f, &EXTP , 0,
17425 DSP_ }, /* EXTP */
17426 { instruction , 0 , 0 , 32,
17427 0xfc003fff, 0x2000367f, &EXTPDP , 0,
17428 DSP_ }, /* EXTPDP */
17432 static const Pool POOL32Axf_1_4[2] = {
17433 { instruction , 0 , 0 , 32,
17434 0xfc001fff, 0x2000087f, &SHLL_QB , 0,
17435 DSP_ }, /* SHLL.QB */
17436 { instruction , 0 , 0 , 32,
17437 0xfc001fff, 0x2000187f, &SHRL_QB , 0,
17438 DSP_ }, /* SHRL.QB */
17442 static const Pool MAQ_S_A__W_PHR[2] = {
17443 { instruction , 0 , 0 , 32,
17444 0xfc003fff, 0x20000a7f, &MAQ_S_W_PHR , 0,
17445 DSP_ }, /* MAQ_S.W.PHR */
17446 { instruction , 0 , 0 , 32,
17447 0xfc003fff, 0x20002a7f, &MAQ_SA_W_PHR , 0,
17448 DSP_ }, /* MAQ_SA.W.PHR */
17452 static const Pool MAQ_S_A__W_PHL[2] = {
17453 { instruction , 0 , 0 , 32,
17454 0xfc003fff, 0x20001a7f, &MAQ_S_W_PHL , 0,
17455 DSP_ }, /* MAQ_S.W.PHL */
17456 { instruction , 0 , 0 , 32,
17457 0xfc003fff, 0x20003a7f, &MAQ_SA_W_PHL , 0,
17458 DSP_ }, /* MAQ_SA.W.PHL */
17462 static const Pool POOL32Axf_1_5[2] = {
17463 { pool , MAQ_S_A__W_PHR , 2 , 32,
17464 0xfc001fff, 0x20000a7f, 0 , 0,
17465 0x0 }, /* MAQ_S[A].W.PHR */
17466 { pool , MAQ_S_A__W_PHL , 2 , 32,
17467 0xfc001fff, 0x20001a7f, 0 , 0,
17468 0x0 }, /* MAQ_S[A].W.PHL */
17472 static const Pool POOL32Axf_1_7[4] = {
17473 { instruction , 0 , 0 , 32,
17474 0xfc003fff, 0x20000e7f, &EXTR_W , 0,
17475 DSP_ }, /* EXTR.W */
17476 { instruction , 0 , 0 , 32,
17477 0xfc003fff, 0x20001e7f, &EXTR_R_W , 0,
17478 DSP_ }, /* EXTR_R.W */
17479 { instruction , 0 , 0 , 32,
17480 0xfc003fff, 0x20002e7f, &EXTR_RS_W , 0,
17481 DSP_ }, /* EXTR_RS.W */
17482 { instruction , 0 , 0 , 32,
17483 0xfc003fff, 0x20003e7f, &EXTR_S_H , 0,
17484 DSP_ }, /* EXTR_S.H */
17488 static const Pool POOL32Axf_1[8] = {
17489 { pool , POOL32Axf_1_0 , 4 , 32,
17490 0xfc000fff, 0x2000007f, 0 , 0,
17491 0x0 }, /* POOL32Axf_1_0 */
17492 { pool , POOL32Axf_1_1 , 4 , 32,
17493 0xfc000fff, 0x2000027f, 0 , 0,
17494 0x0 }, /* POOL32Axf_1_1 */
17495 { reserved_block , 0 , 0 , 32,
17496 0xfc000fff, 0x2000047f, 0 , 0,
17497 0x0 }, /* POOL32Axf_1~*(2) */
17498 { pool , POOL32Axf_1_3 , 4 , 32,
17499 0xfc000fff, 0x2000067f, 0 , 0,
17500 0x0 }, /* POOL32Axf_1_3 */
17501 { pool , POOL32Axf_1_4 , 2 , 32,
17502 0xfc000fff, 0x2000087f, 0 , 0,
17503 0x0 }, /* POOL32Axf_1_4 */
17504 { pool , POOL32Axf_1_5 , 2 , 32,
17505 0xfc000fff, 0x20000a7f, 0 , 0,
17506 0x0 }, /* POOL32Axf_1_5 */
17507 { reserved_block , 0 , 0 , 32,
17508 0xfc000fff, 0x20000c7f, 0 , 0,
17509 0x0 }, /* POOL32Axf_1~*(6) */
17510 { pool , POOL32Axf_1_7 , 4 , 32,
17511 0xfc000fff, 0x20000e7f, 0 , 0,
17512 0x0 }, /* POOL32Axf_1_7 */
17516 static const Pool POOL32Axf_2_DSP__0_7[8] = {
17517 { instruction , 0 , 0 , 32,
17518 0xfc003fff, 0x200000bf, &DPA_W_PH , 0,
17519 DSP_ }, /* DPA.W.PH */
17520 { instruction , 0 , 0 , 32,
17521 0xfc003fff, 0x200002bf, &DPAQ_S_W_PH , 0,
17522 DSP_ }, /* DPAQ_S.W.PH */
17523 { instruction , 0 , 0 , 32,
17524 0xfc003fff, 0x200004bf, &DPS_W_PH , 0,
17525 DSP_ }, /* DPS.W.PH */
17526 { instruction , 0 , 0 , 32,
17527 0xfc003fff, 0x200006bf, &DPSQ_S_W_PH , 0,
17528 DSP_ }, /* DPSQ_S.W.PH */
17529 { reserved_block , 0 , 0 , 32,
17530 0xfc003fff, 0x200008bf, 0 , 0,
17531 0x0 }, /* POOL32Axf_2(DSP)_0_7~*(4) */
17532 { instruction , 0 , 0 , 32,
17533 0xfc003fff, 0x20000abf, &MADD_DSP_ , 0,
17534 DSP_ }, /* MADD[DSP] */
17535 { instruction , 0 , 0 , 32,
17536 0xfc003fff, 0x20000cbf, &MULT_DSP_ , 0,
17537 DSP_ }, /* MULT[DSP] */
17538 { instruction , 0 , 0 , 32,
17539 0xfc003fff, 0x20000ebf, &EXTRV_W , 0,
17540 DSP_ }, /* EXTRV.W */
17544 static const Pool POOL32Axf_2_DSP__8_15[8] = {
17545 { instruction , 0 , 0 , 32,
17546 0xfc003fff, 0x200010bf, &DPAX_W_PH , 0,
17547 DSP_ }, /* DPAX.W.PH */
17548 { instruction , 0 , 0 , 32,
17549 0xfc003fff, 0x200012bf, &DPAQ_SA_L_W , 0,
17550 DSP_ }, /* DPAQ_SA.L.W */
17551 { instruction , 0 , 0 , 32,
17552 0xfc003fff, 0x200014bf, &DPSX_W_PH , 0,
17553 DSP_ }, /* DPSX.W.PH */
17554 { instruction , 0 , 0 , 32,
17555 0xfc003fff, 0x200016bf, &DPSQ_SA_L_W , 0,
17556 DSP_ }, /* DPSQ_SA.L.W */
17557 { reserved_block , 0 , 0 , 32,
17558 0xfc003fff, 0x200018bf, 0 , 0,
17559 0x0 }, /* POOL32Axf_2(DSP)_8_15~*(4) */
17560 { instruction , 0 , 0 , 32,
17561 0xfc003fff, 0x20001abf, &MADDU_DSP_ , 0,
17562 DSP_ }, /* MADDU[DSP] */
17563 { instruction , 0 , 0 , 32,
17564 0xfc003fff, 0x20001cbf, &MULTU_DSP_ , 0,
17565 DSP_ }, /* MULTU[DSP] */
17566 { instruction , 0 , 0 , 32,
17567 0xfc003fff, 0x20001ebf, &EXTRV_R_W , 0,
17568 DSP_ }, /* EXTRV_R.W */
17572 static const Pool POOL32Axf_2_DSP__16_23[8] = {
17573 { instruction , 0 , 0 , 32,
17574 0xfc003fff, 0x200020bf, &DPAU_H_QBL , 0,
17575 DSP_ }, /* DPAU.H.QBL */
17576 { instruction , 0 , 0 , 32,
17577 0xfc003fff, 0x200022bf, &DPAQX_S_W_PH , 0,
17578 DSP_ }, /* DPAQX_S.W.PH */
17579 { instruction , 0 , 0 , 32,
17580 0xfc003fff, 0x200024bf, &DPSU_H_QBL , 0,
17581 DSP_ }, /* DPSU.H.QBL */
17582 { instruction , 0 , 0 , 32,
17583 0xfc003fff, 0x200026bf, &DPSQX_S_W_PH , 0,
17584 DSP_ }, /* DPSQX_S.W.PH */
17585 { instruction , 0 , 0 , 32,
17586 0xfc003fff, 0x200028bf, &EXTPV , 0,
17587 DSP_ }, /* EXTPV */
17588 { instruction , 0 , 0 , 32,
17589 0xfc003fff, 0x20002abf, &MSUB_DSP_ , 0,
17590 DSP_ }, /* MSUB[DSP] */
17591 { instruction , 0 , 0 , 32,
17592 0xfc003fff, 0x20002cbf, &MULSA_W_PH , 0,
17593 DSP_ }, /* MULSA.W.PH */
17594 { instruction , 0 , 0 , 32,
17595 0xfc003fff, 0x20002ebf, &EXTRV_RS_W , 0,
17596 DSP_ }, /* EXTRV_RS.W */
17600 static const Pool POOL32Axf_2_DSP__24_31[8] = {
17601 { instruction , 0 , 0 , 32,
17602 0xfc003fff, 0x200030bf, &DPAU_H_QBR , 0,
17603 DSP_ }, /* DPAU.H.QBR */
17604 { instruction , 0 , 0 , 32,
17605 0xfc003fff, 0x200032bf, &DPAQX_SA_W_PH , 0,
17606 DSP_ }, /* DPAQX_SA.W.PH */
17607 { instruction , 0 , 0 , 32,
17608 0xfc003fff, 0x200034bf, &DPSU_H_QBR , 0,
17609 DSP_ }, /* DPSU.H.QBR */
17610 { instruction , 0 , 0 , 32,
17611 0xfc003fff, 0x200036bf, &DPSQX_SA_W_PH , 0,
17612 DSP_ }, /* DPSQX_SA.W.PH */
17613 { instruction , 0 , 0 , 32,
17614 0xfc003fff, 0x200038bf, &EXTPDPV , 0,
17615 DSP_ }, /* EXTPDPV */
17616 { instruction , 0 , 0 , 32,
17617 0xfc003fff, 0x20003abf, &MSUBU_DSP_ , 0,
17618 DSP_ }, /* MSUBU[DSP] */
17619 { instruction , 0 , 0 , 32,
17620 0xfc003fff, 0x20003cbf, &MULSAQ_S_W_PH , 0,
17621 DSP_ }, /* MULSAQ_S.W.PH */
17622 { instruction , 0 , 0 , 32,
17623 0xfc003fff, 0x20003ebf, &EXTRV_S_H , 0,
17624 DSP_ }, /* EXTRV_S.H */
17628 static const Pool POOL32Axf_2[4] = {
17629 { pool , POOL32Axf_2_DSP__0_7, 8 , 32,
17630 0xfc0031ff, 0x200000bf, 0 , 0,
17631 0x0 }, /* POOL32Axf_2(DSP)_0_7 */
17632 { pool , POOL32Axf_2_DSP__8_15, 8 , 32,
17633 0xfc0031ff, 0x200010bf, 0 , 0,
17634 0x0 }, /* POOL32Axf_2(DSP)_8_15 */
17635 { pool , POOL32Axf_2_DSP__16_23, 8 , 32,
17636 0xfc0031ff, 0x200020bf, 0 , 0,
17637 0x0 }, /* POOL32Axf_2(DSP)_16_23 */
17638 { pool , POOL32Axf_2_DSP__24_31, 8 , 32,
17639 0xfc0031ff, 0x200030bf, 0 , 0,
17640 0x0 }, /* POOL32Axf_2(DSP)_24_31 */
17644 static const Pool POOL32Axf_4[128] = {
17645 { instruction , 0 , 0 , 32,
17646 0xfc00ffff, 0x2000013f, &ABSQ_S_QB , 0,
17647 DSP_ }, /* ABSQ_S.QB */
17648 { instruction , 0 , 0 , 32,
17649 0xfc00ffff, 0x2000033f, &REPLV_PH , 0,
17650 DSP_ }, /* REPLV.PH */
17651 { reserved_block , 0 , 0 , 32,
17652 0xfc00ffff, 0x2000053f, 0 , 0,
17653 0x0 }, /* POOL32Axf_4~*(2) */
17654 { reserved_block , 0 , 0 , 32,
17655 0xfc00ffff, 0x2000073f, 0 , 0,
17656 0x0 }, /* POOL32Axf_4~*(3) */
17657 { reserved_block , 0 , 0 , 32,
17658 0xfc00ffff, 0x2000093f, 0 , 0,
17659 0x0 }, /* POOL32Axf_4~*(4) */
17660 { reserved_block , 0 , 0 , 32,
17661 0xfc00ffff, 0x20000b3f, 0 , 0,
17662 0x0 }, /* POOL32Axf_4~*(5) */
17663 { reserved_block , 0 , 0 , 32,
17664 0xfc00ffff, 0x20000d3f, 0 , 0,
17665 0x0 }, /* POOL32Axf_4~*(6) */
17666 { reserved_block , 0 , 0 , 32,
17667 0xfc00ffff, 0x20000f3f, 0 , 0,
17668 0x0 }, /* POOL32Axf_4~*(7) */
17669 { instruction , 0 , 0 , 32,
17670 0xfc00ffff, 0x2000113f, &ABSQ_S_PH , 0,
17671 DSP_ }, /* ABSQ_S.PH */
17672 { instruction , 0 , 0 , 32,
17673 0xfc00ffff, 0x2000133f, &REPLV_QB , 0,
17674 DSP_ }, /* REPLV.QB */
17675 { reserved_block , 0 , 0 , 32,
17676 0xfc00ffff, 0x2000153f, 0 , 0,
17677 0x0 }, /* POOL32Axf_4~*(10) */
17678 { reserved_block , 0 , 0 , 32,
17679 0xfc00ffff, 0x2000173f, 0 , 0,
17680 0x0 }, /* POOL32Axf_4~*(11) */
17681 { reserved_block , 0 , 0 , 32,
17682 0xfc00ffff, 0x2000193f, 0 , 0,
17683 0x0 }, /* POOL32Axf_4~*(12) */
17684 { reserved_block , 0 , 0 , 32,
17685 0xfc00ffff, 0x20001b3f, 0 , 0,
17686 0x0 }, /* POOL32Axf_4~*(13) */
17687 { reserved_block , 0 , 0 , 32,
17688 0xfc00ffff, 0x20001d3f, 0 , 0,
17689 0x0 }, /* POOL32Axf_4~*(14) */
17690 { reserved_block , 0 , 0 , 32,
17691 0xfc00ffff, 0x20001f3f, 0 , 0,
17692 0x0 }, /* POOL32Axf_4~*(15) */
17693 { instruction , 0 , 0 , 32,
17694 0xfc00ffff, 0x2000213f, &ABSQ_S_W , 0,
17695 DSP_ }, /* ABSQ_S.W */
17696 { reserved_block , 0 , 0 , 32,
17697 0xfc00ffff, 0x2000233f, 0 , 0,
17698 0x0 }, /* POOL32Axf_4~*(17) */
17699 { reserved_block , 0 , 0 , 32,
17700 0xfc00ffff, 0x2000253f, 0 , 0,
17701 0x0 }, /* POOL32Axf_4~*(18) */
17702 { reserved_block , 0 , 0 , 32,
17703 0xfc00ffff, 0x2000273f, 0 , 0,
17704 0x0 }, /* POOL32Axf_4~*(19) */
17705 { reserved_block , 0 , 0 , 32,
17706 0xfc00ffff, 0x2000293f, 0 , 0,
17707 0x0 }, /* POOL32Axf_4~*(20) */
17708 { reserved_block , 0 , 0 , 32,
17709 0xfc00ffff, 0x20002b3f, 0 , 0,
17710 0x0 }, /* POOL32Axf_4~*(21) */
17711 { reserved_block , 0 , 0 , 32,
17712 0xfc00ffff, 0x20002d3f, 0 , 0,
17713 0x0 }, /* POOL32Axf_4~*(22) */
17714 { reserved_block , 0 , 0 , 32,
17715 0xfc00ffff, 0x20002f3f, 0 , 0,
17716 0x0 }, /* POOL32Axf_4~*(23) */
17717 { reserved_block , 0 , 0 , 32,
17718 0xfc00ffff, 0x2000313f, 0 , 0,
17719 0x0 }, /* POOL32Axf_4~*(24) */
17720 { reserved_block , 0 , 0 , 32,
17721 0xfc00ffff, 0x2000333f, 0 , 0,
17722 0x0 }, /* POOL32Axf_4~*(25) */
17723 { reserved_block , 0 , 0 , 32,
17724 0xfc00ffff, 0x2000353f, 0 , 0,
17725 0x0 }, /* POOL32Axf_4~*(26) */
17726 { reserved_block , 0 , 0 , 32,
17727 0xfc00ffff, 0x2000373f, 0 , 0,
17728 0x0 }, /* POOL32Axf_4~*(27) */
17729 { reserved_block , 0 , 0 , 32,
17730 0xfc00ffff, 0x2000393f, 0 , 0,
17731 0x0 }, /* POOL32Axf_4~*(28) */
17732 { reserved_block , 0 , 0 , 32,
17733 0xfc00ffff, 0x20003b3f, 0 , 0,
17734 0x0 }, /* POOL32Axf_4~*(29) */
17735 { reserved_block , 0 , 0 , 32,
17736 0xfc00ffff, 0x20003d3f, 0 , 0,
17737 0x0 }, /* POOL32Axf_4~*(30) */
17738 { reserved_block , 0 , 0 , 32,
17739 0xfc00ffff, 0x20003f3f, 0 , 0,
17740 0x0 }, /* POOL32Axf_4~*(31) */
17741 { instruction , 0 , 0 , 32,
17742 0xfc00ffff, 0x2000413f, &INSV , 0,
17743 DSP_ }, /* INSV */
17744 { reserved_block , 0 , 0 , 32,
17745 0xfc00ffff, 0x2000433f, 0 , 0,
17746 0x0 }, /* POOL32Axf_4~*(33) */
17747 { reserved_block , 0 , 0 , 32,
17748 0xfc00ffff, 0x2000453f, 0 , 0,
17749 0x0 }, /* POOL32Axf_4~*(34) */
17750 { reserved_block , 0 , 0 , 32,
17751 0xfc00ffff, 0x2000473f, 0 , 0,
17752 0x0 }, /* POOL32Axf_4~*(35) */
17753 { reserved_block , 0 , 0 , 32,
17754 0xfc00ffff, 0x2000493f, 0 , 0,
17755 0x0 }, /* POOL32Axf_4~*(36) */
17756 { instruction , 0 , 0 , 32,
17757 0xfc00ffff, 0x20004b3f, &CLO , 0,
17758 XMMS_ }, /* CLO */
17759 { instruction , 0 , 0 , 32,
17760 0xfc00ffff, 0x20004d3f, &MFC2 , 0,
17761 CP2_ }, /* MFC2 */
17762 { reserved_block , 0 , 0 , 32,
17763 0xfc00ffff, 0x20004f3f, 0 , 0,
17764 0x0 }, /* POOL32Axf_4~*(39) */
17765 { instruction , 0 , 0 , 32,
17766 0xfc00ffff, 0x2000513f, &PRECEQ_W_PHL , 0,
17767 DSP_ }, /* PRECEQ.W.PHL */
17768 { reserved_block , 0 , 0 , 32,
17769 0xfc00ffff, 0x2000533f, 0 , 0,
17770 0x0 }, /* POOL32Axf_4~*(41) */
17771 { reserved_block , 0 , 0 , 32,
17772 0xfc00ffff, 0x2000553f, 0 , 0,
17773 0x0 }, /* POOL32Axf_4~*(42) */
17774 { reserved_block , 0 , 0 , 32,
17775 0xfc00ffff, 0x2000573f, 0 , 0,
17776 0x0 }, /* POOL32Axf_4~*(43) */
17777 { reserved_block , 0 , 0 , 32,
17778 0xfc00ffff, 0x2000593f, 0 , 0,
17779 0x0 }, /* POOL32Axf_4~*(44) */
17780 { instruction , 0 , 0 , 32,
17781 0xfc00ffff, 0x20005b3f, &CLZ , 0,
17782 XMMS_ }, /* CLZ */
17783 { instruction , 0 , 0 , 32,
17784 0xfc00ffff, 0x20005d3f, &MTC2 , 0,
17785 CP2_ }, /* MTC2 */
17786 { reserved_block , 0 , 0 , 32,
17787 0xfc00ffff, 0x20005f3f, 0 , 0,
17788 0x0 }, /* POOL32Axf_4~*(47) */
17789 { instruction , 0 , 0 , 32,
17790 0xfc00ffff, 0x2000613f, &PRECEQ_W_PHR , 0,
17791 DSP_ }, /* PRECEQ.W.PHR */
17792 { reserved_block , 0 , 0 , 32,
17793 0xfc00ffff, 0x2000633f, 0 , 0,
17794 0x0 }, /* POOL32Axf_4~*(49) */
17795 { reserved_block , 0 , 0 , 32,
17796 0xfc00ffff, 0x2000653f, 0 , 0,
17797 0x0 }, /* POOL32Axf_4~*(50) */
17798 { reserved_block , 0 , 0 , 32,
17799 0xfc00ffff, 0x2000673f, 0 , 0,
17800 0x0 }, /* POOL32Axf_4~*(51) */
17801 { reserved_block , 0 , 0 , 32,
17802 0xfc00ffff, 0x2000693f, 0 , 0,
17803 0x0 }, /* POOL32Axf_4~*(52) */
17804 { reserved_block , 0 , 0 , 32,
17805 0xfc00ffff, 0x20006b3f, 0 , 0,
17806 0x0 }, /* POOL32Axf_4~*(53) */
17807 { instruction , 0 , 0 , 32,
17808 0xfc00ffff, 0x20006d3f, &DMFC2 , 0,
17809 CP2_ }, /* DMFC2 */
17810 { reserved_block , 0 , 0 , 32,
17811 0xfc00ffff, 0x20006f3f, 0 , 0,
17812 0x0 }, /* POOL32Axf_4~*(55) */
17813 { instruction , 0 , 0 , 32,
17814 0xfc00ffff, 0x2000713f, &PRECEQU_PH_QBL , 0,
17815 DSP_ }, /* PRECEQU.PH.QBL */
17816 { instruction , 0 , 0 , 32,
17817 0xfc00ffff, 0x2000733f, &PRECEQU_PH_QBLA , 0,
17818 DSP_ }, /* PRECEQU.PH.QBLA */
17819 { reserved_block , 0 , 0 , 32,
17820 0xfc00ffff, 0x2000753f, 0 , 0,
17821 0x0 }, /* POOL32Axf_4~*(58) */
17822 { reserved_block , 0 , 0 , 32,
17823 0xfc00ffff, 0x2000773f, 0 , 0,
17824 0x0 }, /* POOL32Axf_4~*(59) */
17825 { reserved_block , 0 , 0 , 32,
17826 0xfc00ffff, 0x2000793f, 0 , 0,
17827 0x0 }, /* POOL32Axf_4~*(60) */
17828 { reserved_block , 0 , 0 , 32,
17829 0xfc00ffff, 0x20007b3f, 0 , 0,
17830 0x0 }, /* POOL32Axf_4~*(61) */
17831 { instruction , 0 , 0 , 32,
17832 0xfc00ffff, 0x20007d3f, &DMTC2 , 0,
17833 CP2_ }, /* DMTC2 */
17834 { reserved_block , 0 , 0 , 32,
17835 0xfc00ffff, 0x20007f3f, 0 , 0,
17836 0x0 }, /* POOL32Axf_4~*(63) */
17837 { reserved_block , 0 , 0 , 32,
17838 0xfc00ffff, 0x2000813f, 0 , 0,
17839 0x0 }, /* POOL32Axf_4~*(64) */
17840 { reserved_block , 0 , 0 , 32,
17841 0xfc00ffff, 0x2000833f, 0 , 0,
17842 0x0 }, /* POOL32Axf_4~*(65) */
17843 { reserved_block , 0 , 0 , 32,
17844 0xfc00ffff, 0x2000853f, 0 , 0,
17845 0x0 }, /* POOL32Axf_4~*(66) */
17846 { reserved_block , 0 , 0 , 32,
17847 0xfc00ffff, 0x2000873f, 0 , 0,
17848 0x0 }, /* POOL32Axf_4~*(67) */
17849 { reserved_block , 0 , 0 , 32,
17850 0xfc00ffff, 0x2000893f, 0 , 0,
17851 0x0 }, /* POOL32Axf_4~*(68) */
17852 { reserved_block , 0 , 0 , 32,
17853 0xfc00ffff, 0x20008b3f, 0 , 0,
17854 0x0 }, /* POOL32Axf_4~*(69) */
17855 { instruction , 0 , 0 , 32,
17856 0xfc00ffff, 0x20008d3f, &MFHC2 , 0,
17857 CP2_ }, /* MFHC2 */
17858 { reserved_block , 0 , 0 , 32,
17859 0xfc00ffff, 0x20008f3f, 0 , 0,
17860 0x0 }, /* POOL32Axf_4~*(71) */
17861 { instruction , 0 , 0 , 32,
17862 0xfc00ffff, 0x2000913f, &PRECEQU_PH_QBR , 0,
17863 DSP_ }, /* PRECEQU.PH.QBR */
17864 { instruction , 0 , 0 , 32,
17865 0xfc00ffff, 0x2000933f, &PRECEQU_PH_QBRA , 0,
17866 DSP_ }, /* PRECEQU.PH.QBRA */
17867 { reserved_block , 0 , 0 , 32,
17868 0xfc00ffff, 0x2000953f, 0 , 0,
17869 0x0 }, /* POOL32Axf_4~*(74) */
17870 { reserved_block , 0 , 0 , 32,
17871 0xfc00ffff, 0x2000973f, 0 , 0,
17872 0x0 }, /* POOL32Axf_4~*(75) */
17873 { reserved_block , 0 , 0 , 32,
17874 0xfc00ffff, 0x2000993f, 0 , 0,
17875 0x0 }, /* POOL32Axf_4~*(76) */
17876 { reserved_block , 0 , 0 , 32,
17877 0xfc00ffff, 0x20009b3f, 0 , 0,
17878 0x0 }, /* POOL32Axf_4~*(77) */
17879 { instruction , 0 , 0 , 32,
17880 0xfc00ffff, 0x20009d3f, &MTHC2 , 0,
17881 CP2_ }, /* MTHC2 */
17882 { reserved_block , 0 , 0 , 32,
17883 0xfc00ffff, 0x20009f3f, 0 , 0,
17884 0x0 }, /* POOL32Axf_4~*(79) */
17885 { reserved_block , 0 , 0 , 32,
17886 0xfc00ffff, 0x2000a13f, 0 , 0,
17887 0x0 }, /* POOL32Axf_4~*(80) */
17888 { reserved_block , 0 , 0 , 32,
17889 0xfc00ffff, 0x2000a33f, 0 , 0,
17890 0x0 }, /* POOL32Axf_4~*(81) */
17891 { reserved_block , 0 , 0 , 32,
17892 0xfc00ffff, 0x2000a53f, 0 , 0,
17893 0x0 }, /* POOL32Axf_4~*(82) */
17894 { reserved_block , 0 , 0 , 32,
17895 0xfc00ffff, 0x2000a73f, 0 , 0,
17896 0x0 }, /* POOL32Axf_4~*(83) */
17897 { reserved_block , 0 , 0 , 32,
17898 0xfc00ffff, 0x2000a93f, 0 , 0,
17899 0x0 }, /* POOL32Axf_4~*(84) */
17900 { reserved_block , 0 , 0 , 32,
17901 0xfc00ffff, 0x2000ab3f, 0 , 0,
17902 0x0 }, /* POOL32Axf_4~*(85) */
17903 { reserved_block , 0 , 0 , 32,
17904 0xfc00ffff, 0x2000ad3f, 0 , 0,
17905 0x0 }, /* POOL32Axf_4~*(86) */
17906 { reserved_block , 0 , 0 , 32,
17907 0xfc00ffff, 0x2000af3f, 0 , 0,
17908 0x0 }, /* POOL32Axf_4~*(87) */
17909 { instruction , 0 , 0 , 32,
17910 0xfc00ffff, 0x2000b13f, &PRECEU_PH_QBL , 0,
17911 DSP_ }, /* PRECEU.PH.QBL */
17912 { instruction , 0 , 0 , 32,
17913 0xfc00ffff, 0x2000b33f, &PRECEU_PH_QBLA , 0,
17914 DSP_ }, /* PRECEU.PH.QBLA */
17915 { reserved_block , 0 , 0 , 32,
17916 0xfc00ffff, 0x2000b53f, 0 , 0,
17917 0x0 }, /* POOL32Axf_4~*(90) */
17918 { reserved_block , 0 , 0 , 32,
17919 0xfc00ffff, 0x2000b73f, 0 , 0,
17920 0x0 }, /* POOL32Axf_4~*(91) */
17921 { reserved_block , 0 , 0 , 32,
17922 0xfc00ffff, 0x2000b93f, 0 , 0,
17923 0x0 }, /* POOL32Axf_4~*(92) */
17924 { reserved_block , 0 , 0 , 32,
17925 0xfc00ffff, 0x2000bb3f, 0 , 0,
17926 0x0 }, /* POOL32Axf_4~*(93) */
17927 { reserved_block , 0 , 0 , 32,
17928 0xfc00ffff, 0x2000bd3f, 0 , 0,
17929 0x0 }, /* POOL32Axf_4~*(94) */
17930 { reserved_block , 0 , 0 , 32,
17931 0xfc00ffff, 0x2000bf3f, 0 , 0,
17932 0x0 }, /* POOL32Axf_4~*(95) */
17933 { reserved_block , 0 , 0 , 32,
17934 0xfc00ffff, 0x2000c13f, 0 , 0,
17935 0x0 }, /* POOL32Axf_4~*(96) */
17936 { reserved_block , 0 , 0 , 32,
17937 0xfc00ffff, 0x2000c33f, 0 , 0,
17938 0x0 }, /* POOL32Axf_4~*(97) */
17939 { reserved_block , 0 , 0 , 32,
17940 0xfc00ffff, 0x2000c53f, 0 , 0,
17941 0x0 }, /* POOL32Axf_4~*(98) */
17942 { reserved_block , 0 , 0 , 32,
17943 0xfc00ffff, 0x2000c73f, 0 , 0,
17944 0x0 }, /* POOL32Axf_4~*(99) */
17945 { reserved_block , 0 , 0 , 32,
17946 0xfc00ffff, 0x2000c93f, 0 , 0,
17947 0x0 }, /* POOL32Axf_4~*(100) */
17948 { reserved_block , 0 , 0 , 32,
17949 0xfc00ffff, 0x2000cb3f, 0 , 0,
17950 0x0 }, /* POOL32Axf_4~*(101) */
17951 { instruction , 0 , 0 , 32,
17952 0xfc00ffff, 0x2000cd3f, &CFC2 , 0,
17953 CP2_ }, /* CFC2 */
17954 { reserved_block , 0 , 0 , 32,
17955 0xfc00ffff, 0x2000cf3f, 0 , 0,
17956 0x0 }, /* POOL32Axf_4~*(103) */
17957 { instruction , 0 , 0 , 32,
17958 0xfc00ffff, 0x2000d13f, &PRECEU_PH_QBR , 0,
17959 DSP_ }, /* PRECEU.PH.QBR */
17960 { instruction , 0 , 0 , 32,
17961 0xfc00ffff, 0x2000d33f, &PRECEU_PH_QBRA , 0,
17962 DSP_ }, /* PRECEU.PH.QBRA */
17963 { reserved_block , 0 , 0 , 32,
17964 0xfc00ffff, 0x2000d53f, 0 , 0,
17965 0x0 }, /* POOL32Axf_4~*(106) */
17966 { reserved_block , 0 , 0 , 32,
17967 0xfc00ffff, 0x2000d73f, 0 , 0,
17968 0x0 }, /* POOL32Axf_4~*(107) */
17969 { reserved_block , 0 , 0 , 32,
17970 0xfc00ffff, 0x2000d93f, 0 , 0,
17971 0x0 }, /* POOL32Axf_4~*(108) */
17972 { reserved_block , 0 , 0 , 32,
17973 0xfc00ffff, 0x2000db3f, 0 , 0,
17974 0x0 }, /* POOL32Axf_4~*(109) */
17975 { instruction , 0 , 0 , 32,
17976 0xfc00ffff, 0x2000dd3f, &CTC2 , 0,
17977 CP2_ }, /* CTC2 */
17978 { reserved_block , 0 , 0 , 32,
17979 0xfc00ffff, 0x2000df3f, 0 , 0,
17980 0x0 }, /* POOL32Axf_4~*(111) */
17981 { reserved_block , 0 , 0 , 32,
17982 0xfc00ffff, 0x2000e13f, 0 , 0,
17983 0x0 }, /* POOL32Axf_4~*(112) */
17984 { reserved_block , 0 , 0 , 32,
17985 0xfc00ffff, 0x2000e33f, 0 , 0,
17986 0x0 }, /* POOL32Axf_4~*(113) */
17987 { reserved_block , 0 , 0 , 32,
17988 0xfc00ffff, 0x2000e53f, 0 , 0,
17989 0x0 }, /* POOL32Axf_4~*(114) */
17990 { reserved_block , 0 , 0 , 32,
17991 0xfc00ffff, 0x2000e73f, 0 , 0,
17992 0x0 }, /* POOL32Axf_4~*(115) */
17993 { reserved_block , 0 , 0 , 32,
17994 0xfc00ffff, 0x2000e93f, 0 , 0,
17995 0x0 }, /* POOL32Axf_4~*(116) */
17996 { reserved_block , 0 , 0 , 32,
17997 0xfc00ffff, 0x2000eb3f, 0 , 0,
17998 0x0 }, /* POOL32Axf_4~*(117) */
17999 { reserved_block , 0 , 0 , 32,
18000 0xfc00ffff, 0x2000ed3f, 0 , 0,
18001 0x0 }, /* POOL32Axf_4~*(118) */
18002 { reserved_block , 0 , 0 , 32,
18003 0xfc00ffff, 0x2000ef3f, 0 , 0,
18004 0x0 }, /* POOL32Axf_4~*(119) */
18005 { instruction , 0 , 0 , 32,
18006 0xfc00ffff, 0x2000f13f, &RADDU_W_QB , 0,
18007 DSP_ }, /* RADDU.W.QB */
18008 { reserved_block , 0 , 0 , 32,
18009 0xfc00ffff, 0x2000f33f, 0 , 0,
18010 0x0 }, /* POOL32Axf_4~*(121) */
18011 { reserved_block , 0 , 0 , 32,
18012 0xfc00ffff, 0x2000f53f, 0 , 0,
18013 0x0 }, /* POOL32Axf_4~*(122) */
18014 { reserved_block , 0 , 0 , 32,
18015 0xfc00ffff, 0x2000f73f, 0 , 0,
18016 0x0 }, /* POOL32Axf_4~*(123) */
18017 { reserved_block , 0 , 0 , 32,
18018 0xfc00ffff, 0x2000f93f, 0 , 0,
18019 0x0 }, /* POOL32Axf_4~*(124) */
18020 { reserved_block , 0 , 0 , 32,
18021 0xfc00ffff, 0x2000fb3f, 0 , 0,
18022 0x0 }, /* POOL32Axf_4~*(125) */
18023 { reserved_block , 0 , 0 , 32,
18024 0xfc00ffff, 0x2000fd3f, 0 , 0,
18025 0x0 }, /* POOL32Axf_4~*(126) */
18026 { reserved_block , 0 , 0 , 32,
18027 0xfc00ffff, 0x2000ff3f, 0 , 0,
18028 0x0 }, /* POOL32Axf_4~*(127) */
18032 static const Pool POOL32Axf_5_group0[32] = {
18033 { instruction , 0 , 0 , 32,
18034 0xfc00ffff, 0x2000017f, &TLBGP , 0,
18035 CP0_ | VZ_ | TLB_ }, /* TLBGP */
18036 { instruction , 0 , 0 , 32,
18037 0xfc00ffff, 0x2000037f, &TLBP , 0,
18038 CP0_ | TLB_ }, /* TLBP */
18039 { instruction , 0 , 0 , 32,
18040 0xfc00ffff, 0x2000057f, &TLBGINV , 0,
18041 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINV */
18042 { instruction , 0 , 0 , 32,
18043 0xfc00ffff, 0x2000077f, &TLBINV , 0,
18044 CP0_ | TLB_ | TLBINV_}, /* TLBINV */
18045 { reserved_block , 0 , 0 , 32,
18046 0xfc00ffff, 0x2000097f, 0 , 0,
18047 0x0 }, /* POOL32Axf_5_group0~*(4) */
18048 { reserved_block , 0 , 0 , 32,
18049 0xfc00ffff, 0x20000b7f, 0 , 0,
18050 0x0 }, /* POOL32Axf_5_group0~*(5) */
18051 { reserved_block , 0 , 0 , 32,
18052 0xfc00ffff, 0x20000d7f, 0 , 0,
18053 0x0 }, /* POOL32Axf_5_group0~*(6) */
18054 { reserved_block , 0 , 0 , 32,
18055 0xfc00ffff, 0x20000f7f, 0 , 0,
18056 0x0 }, /* POOL32Axf_5_group0~*(7) */
18057 { instruction , 0 , 0 , 32,
18058 0xfc00ffff, 0x2000117f, &TLBGR , 0,
18059 CP0_ | VZ_ | TLB_ }, /* TLBGR */
18060 { instruction , 0 , 0 , 32,
18061 0xfc00ffff, 0x2000137f, &TLBR , 0,
18062 CP0_ | TLB_ }, /* TLBR */
18063 { instruction , 0 , 0 , 32,
18064 0xfc00ffff, 0x2000157f, &TLBGINVF , 0,
18065 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINVF */
18066 { instruction , 0 , 0 , 32,
18067 0xfc00ffff, 0x2000177f, &TLBINVF , 0,
18068 CP0_ | TLB_ | TLBINV_}, /* TLBINVF */
18069 { reserved_block , 0 , 0 , 32,
18070 0xfc00ffff, 0x2000197f, 0 , 0,
18071 0x0 }, /* POOL32Axf_5_group0~*(12) */
18072 { reserved_block , 0 , 0 , 32,
18073 0xfc00ffff, 0x20001b7f, 0 , 0,
18074 0x0 }, /* POOL32Axf_5_group0~*(13) */
18075 { reserved_block , 0 , 0 , 32,
18076 0xfc00ffff, 0x20001d7f, 0 , 0,
18077 0x0 }, /* POOL32Axf_5_group0~*(14) */
18078 { reserved_block , 0 , 0 , 32,
18079 0xfc00ffff, 0x20001f7f, 0 , 0,
18080 0x0 }, /* POOL32Axf_5_group0~*(15) */
18081 { instruction , 0 , 0 , 32,
18082 0xfc00ffff, 0x2000217f, &TLBGWI , 0,
18083 CP0_ | VZ_ | TLB_ }, /* TLBGWI */
18084 { instruction , 0 , 0 , 32,
18085 0xfc00ffff, 0x2000237f, &TLBWI , 0,
18086 CP0_ | TLB_ }, /* TLBWI */
18087 { reserved_block , 0 , 0 , 32,
18088 0xfc00ffff, 0x2000257f, 0 , 0,
18089 0x0 }, /* POOL32Axf_5_group0~*(18) */
18090 { reserved_block , 0 , 0 , 32,
18091 0xfc00ffff, 0x2000277f, 0 , 0,
18092 0x0 }, /* POOL32Axf_5_group0~*(19) */
18093 { reserved_block , 0 , 0 , 32,
18094 0xfc00ffff, 0x2000297f, 0 , 0,
18095 0x0 }, /* POOL32Axf_5_group0~*(20) */
18096 { reserved_block , 0 , 0 , 32,
18097 0xfc00ffff, 0x20002b7f, 0 , 0,
18098 0x0 }, /* POOL32Axf_5_group0~*(21) */
18099 { reserved_block , 0 , 0 , 32,
18100 0xfc00ffff, 0x20002d7f, 0 , 0,
18101 0x0 }, /* POOL32Axf_5_group0~*(22) */
18102 { reserved_block , 0 , 0 , 32,
18103 0xfc00ffff, 0x20002f7f, 0 , 0,
18104 0x0 }, /* POOL32Axf_5_group0~*(23) */
18105 { instruction , 0 , 0 , 32,
18106 0xfc00ffff, 0x2000317f, &TLBGWR , 0,
18107 CP0_ | VZ_ | TLB_ }, /* TLBGWR */
18108 { instruction , 0 , 0 , 32,
18109 0xfc00ffff, 0x2000337f, &TLBWR , 0,
18110 CP0_ | TLB_ }, /* TLBWR */
18111 { reserved_block , 0 , 0 , 32,
18112 0xfc00ffff, 0x2000357f, 0 , 0,
18113 0x0 }, /* POOL32Axf_5_group0~*(26) */
18114 { reserved_block , 0 , 0 , 32,
18115 0xfc00ffff, 0x2000377f, 0 , 0,
18116 0x0 }, /* POOL32Axf_5_group0~*(27) */
18117 { reserved_block , 0 , 0 , 32,
18118 0xfc00ffff, 0x2000397f, 0 , 0,
18119 0x0 }, /* POOL32Axf_5_group0~*(28) */
18120 { reserved_block , 0 , 0 , 32,
18121 0xfc00ffff, 0x20003b7f, 0 , 0,
18122 0x0 }, /* POOL32Axf_5_group0~*(29) */
18123 { reserved_block , 0 , 0 , 32,
18124 0xfc00ffff, 0x20003d7f, 0 , 0,
18125 0x0 }, /* POOL32Axf_5_group0~*(30) */
18126 { reserved_block , 0 , 0 , 32,
18127 0xfc00ffff, 0x20003f7f, 0 , 0,
18128 0x0 }, /* POOL32Axf_5_group0~*(31) */
18132 static const Pool POOL32Axf_5_group1[32] = {
18133 { reserved_block , 0 , 0 , 32,
18134 0xfc00ffff, 0x2000417f, 0 , 0,
18135 0x0 }, /* POOL32Axf_5_group1~*(0) */
18136 { reserved_block , 0 , 0 , 32,
18137 0xfc00ffff, 0x2000437f, 0 , 0,
18138 0x0 }, /* POOL32Axf_5_group1~*(1) */
18139 { reserved_block , 0 , 0 , 32,
18140 0xfc00ffff, 0x2000457f, 0 , 0,
18141 0x0 }, /* POOL32Axf_5_group1~*(2) */
18142 { instruction , 0 , 0 , 32,
18143 0xfc00ffff, 0x2000477f, &DI , 0,
18144 0x0 }, /* DI */
18145 { reserved_block , 0 , 0 , 32,
18146 0xfc00ffff, 0x2000497f, 0 , 0,
18147 0x0 }, /* POOL32Axf_5_group1~*(4) */
18148 { reserved_block , 0 , 0 , 32,
18149 0xfc00ffff, 0x20004b7f, 0 , 0,
18150 0x0 }, /* POOL32Axf_5_group1~*(5) */
18151 { reserved_block , 0 , 0 , 32,
18152 0xfc00ffff, 0x20004d7f, 0 , 0,
18153 0x0 }, /* POOL32Axf_5_group1~*(6) */
18154 { reserved_block , 0 , 0 , 32,
18155 0xfc00ffff, 0x20004f7f, 0 , 0,
18156 0x0 }, /* POOL32Axf_5_group1~*(7) */
18157 { reserved_block , 0 , 0 , 32,
18158 0xfc00ffff, 0x2000517f, 0 , 0,
18159 0x0 }, /* POOL32Axf_5_group1~*(8) */
18160 { reserved_block , 0 , 0 , 32,
18161 0xfc00ffff, 0x2000537f, 0 , 0,
18162 0x0 }, /* POOL32Axf_5_group1~*(9) */
18163 { reserved_block , 0 , 0 , 32,
18164 0xfc00ffff, 0x2000557f, 0 , 0,
18165 0x0 }, /* POOL32Axf_5_group1~*(10) */
18166 { instruction , 0 , 0 , 32,
18167 0xfc00ffff, 0x2000577f, &EI , 0,
18168 0x0 }, /* EI */
18169 { reserved_block , 0 , 0 , 32,
18170 0xfc00ffff, 0x2000597f, 0 , 0,
18171 0x0 }, /* POOL32Axf_5_group1~*(12) */
18172 { reserved_block , 0 , 0 , 32,
18173 0xfc00ffff, 0x20005b7f, 0 , 0,
18174 0x0 }, /* POOL32Axf_5_group1~*(13) */
18175 { reserved_block , 0 , 0 , 32,
18176 0xfc00ffff, 0x20005d7f, 0 , 0,
18177 0x0 }, /* POOL32Axf_5_group1~*(14) */
18178 { reserved_block , 0 , 0 , 32,
18179 0xfc00ffff, 0x20005f7f, 0 , 0,
18180 0x0 }, /* POOL32Axf_5_group1~*(15) */
18181 { reserved_block , 0 , 0 , 32,
18182 0xfc00ffff, 0x2000617f, 0 , 0,
18183 0x0 }, /* POOL32Axf_5_group1~*(16) */
18184 { reserved_block , 0 , 0 , 32,
18185 0xfc00ffff, 0x2000637f, 0 , 0,
18186 0x0 }, /* POOL32Axf_5_group1~*(17) */
18187 { reserved_block , 0 , 0 , 32,
18188 0xfc00ffff, 0x2000657f, 0 , 0,
18189 0x0 }, /* POOL32Axf_5_group1~*(18) */
18190 { reserved_block , 0 , 0 , 32,
18191 0xfc00ffff, 0x2000677f, 0 , 0,
18192 0x0 }, /* POOL32Axf_5_group1~*(19) */
18193 { reserved_block , 0 , 0 , 32,
18194 0xfc00ffff, 0x2000697f, 0 , 0,
18195 0x0 }, /* POOL32Axf_5_group1~*(20) */
18196 { reserved_block , 0 , 0 , 32,
18197 0xfc00ffff, 0x20006b7f, 0 , 0,
18198 0x0 }, /* POOL32Axf_5_group1~*(21) */
18199 { reserved_block , 0 , 0 , 32,
18200 0xfc00ffff, 0x20006d7f, 0 , 0,
18201 0x0 }, /* POOL32Axf_5_group1~*(22) */
18202 { reserved_block , 0 , 0 , 32,
18203 0xfc00ffff, 0x20006f7f, 0 , 0,
18204 0x0 }, /* POOL32Axf_5_group1~*(23) */
18205 { reserved_block , 0 , 0 , 32,
18206 0xfc00ffff, 0x2000717f, 0 , 0,
18207 0x0 }, /* POOL32Axf_5_group1~*(24) */
18208 { reserved_block , 0 , 0 , 32,
18209 0xfc00ffff, 0x2000737f, 0 , 0,
18210 0x0 }, /* POOL32Axf_5_group1~*(25) */
18211 { reserved_block , 0 , 0 , 32,
18212 0xfc00ffff, 0x2000757f, 0 , 0,
18213 0x0 }, /* POOL32Axf_5_group1~*(26) */
18214 { reserved_block , 0 , 0 , 32,
18215 0xfc00ffff, 0x2000777f, 0 , 0,
18216 0x0 }, /* POOL32Axf_5_group1~*(27) */
18217 { reserved_block , 0 , 0 , 32,
18218 0xfc00ffff, 0x2000797f, 0 , 0,
18219 0x0 }, /* POOL32Axf_5_group1~*(28) */
18220 { reserved_block , 0 , 0 , 32,
18221 0xfc00ffff, 0x20007b7f, 0 , 0,
18222 0x0 }, /* POOL32Axf_5_group1~*(29) */
18223 { reserved_block , 0 , 0 , 32,
18224 0xfc00ffff, 0x20007d7f, 0 , 0,
18225 0x0 }, /* POOL32Axf_5_group1~*(30) */
18226 { reserved_block , 0 , 0 , 32,
18227 0xfc00ffff, 0x20007f7f, 0 , 0,
18228 0x0 }, /* POOL32Axf_5_group1~*(31) */
18232 static const Pool ERETx[2] = {
18233 { instruction , 0 , 0 , 32,
18234 0xfc01ffff, 0x2000f37f, &ERET , 0,
18235 0x0 }, /* ERET */
18236 { instruction , 0 , 0 , 32,
18237 0xfc01ffff, 0x2001f37f, &ERETNC , 0,
18238 0x0 }, /* ERETNC */
18242 static const Pool POOL32Axf_5_group3[32] = {
18243 { reserved_block , 0 , 0 , 32,
18244 0xfc00ffff, 0x2000c17f, 0 , 0,
18245 0x0 }, /* POOL32Axf_5_group3~*(0) */
18246 { instruction , 0 , 0 , 32,
18247 0xfc00ffff, 0x2000c37f, &WAIT , 0,
18248 0x0 }, /* WAIT */
18249 { reserved_block , 0 , 0 , 32,
18250 0xfc00ffff, 0x2000c57f, 0 , 0,
18251 0x0 }, /* POOL32Axf_5_group3~*(2) */
18252 { reserved_block , 0 , 0 , 32,
18253 0xfc00ffff, 0x2000c77f, 0 , 0,
18254 0x0 }, /* POOL32Axf_5_group3~*(3) */
18255 { reserved_block , 0 , 0 , 32,
18256 0xfc00ffff, 0x2000c97f, 0 , 0,
18257 0x0 }, /* POOL32Axf_5_group3~*(4) */
18258 { reserved_block , 0 , 0 , 32,
18259 0xfc00ffff, 0x2000cb7f, 0 , 0,
18260 0x0 }, /* POOL32Axf_5_group3~*(5) */
18261 { reserved_block , 0 , 0 , 32,
18262 0xfc00ffff, 0x2000cd7f, 0 , 0,
18263 0x0 }, /* POOL32Axf_5_group3~*(6) */
18264 { reserved_block , 0 , 0 , 32,
18265 0xfc00ffff, 0x2000cf7f, 0 , 0,
18266 0x0 }, /* POOL32Axf_5_group3~*(7) */
18267 { reserved_block , 0 , 0 , 32,
18268 0xfc00ffff, 0x2000d17f, 0 , 0,
18269 0x0 }, /* POOL32Axf_5_group3~*(8) */
18270 { instruction , 0 , 0 , 32,
18271 0xfc00ffff, 0x2000d37f, &IRET , 0,
18272 MCU_ }, /* IRET */
18273 { reserved_block , 0 , 0 , 32,
18274 0xfc00ffff, 0x2000d57f, 0 , 0,
18275 0x0 }, /* POOL32Axf_5_group3~*(10) */
18276 { reserved_block , 0 , 0 , 32,
18277 0xfc00ffff, 0x2000d77f, 0 , 0,
18278 0x0 }, /* POOL32Axf_5_group3~*(11) */
18279 { reserved_block , 0 , 0 , 32,
18280 0xfc00ffff, 0x2000d97f, 0 , 0,
18281 0x0 }, /* POOL32Axf_5_group3~*(12) */
18282 { reserved_block , 0 , 0 , 32,
18283 0xfc00ffff, 0x2000db7f, 0 , 0,
18284 0x0 }, /* POOL32Axf_5_group3~*(13) */
18285 { reserved_block , 0 , 0 , 32,
18286 0xfc00ffff, 0x2000dd7f, 0 , 0,
18287 0x0 }, /* POOL32Axf_5_group3~*(14) */
18288 { reserved_block , 0 , 0 , 32,
18289 0xfc00ffff, 0x2000df7f, 0 , 0,
18290 0x0 }, /* POOL32Axf_5_group3~*(15) */
18291 { instruction , 0 , 0 , 32,
18292 0xfc00ffff, 0x2000e17f, &RDPGPR , 0,
18293 CP0_ }, /* RDPGPR */
18294 { instruction , 0 , 0 , 32,
18295 0xfc00ffff, 0x2000e37f, &DERET , 0,
18296 EJTAG_ }, /* DERET */
18297 { reserved_block , 0 , 0 , 32,
18298 0xfc00ffff, 0x2000e57f, 0 , 0,
18299 0x0 }, /* POOL32Axf_5_group3~*(18) */
18300 { reserved_block , 0 , 0 , 32,
18301 0xfc00ffff, 0x2000e77f, 0 , 0,
18302 0x0 }, /* POOL32Axf_5_group3~*(19) */
18303 { reserved_block , 0 , 0 , 32,
18304 0xfc00ffff, 0x2000e97f, 0 , 0,
18305 0x0 }, /* POOL32Axf_5_group3~*(20) */
18306 { reserved_block , 0 , 0 , 32,
18307 0xfc00ffff, 0x2000eb7f, 0 , 0,
18308 0x0 }, /* POOL32Axf_5_group3~*(21) */
18309 { reserved_block , 0 , 0 , 32,
18310 0xfc00ffff, 0x2000ed7f, 0 , 0,
18311 0x0 }, /* POOL32Axf_5_group3~*(22) */
18312 { reserved_block , 0 , 0 , 32,
18313 0xfc00ffff, 0x2000ef7f, 0 , 0,
18314 0x0 }, /* POOL32Axf_5_group3~*(23) */
18315 { instruction , 0 , 0 , 32,
18316 0xfc00ffff, 0x2000f17f, &WRPGPR , 0,
18317 CP0_ }, /* WRPGPR */
18318 { pool , ERETx , 2 , 32,
18319 0xfc00ffff, 0x2000f37f, 0 , 0,
18320 0x0 }, /* ERETx */
18321 { reserved_block , 0 , 0 , 32,
18322 0xfc00ffff, 0x2000f57f, 0 , 0,
18323 0x0 }, /* POOL32Axf_5_group3~*(26) */
18324 { reserved_block , 0 , 0 , 32,
18325 0xfc00ffff, 0x2000f77f, 0 , 0,
18326 0x0 }, /* POOL32Axf_5_group3~*(27) */
18327 { reserved_block , 0 , 0 , 32,
18328 0xfc00ffff, 0x2000f97f, 0 , 0,
18329 0x0 }, /* POOL32Axf_5_group3~*(28) */
18330 { reserved_block , 0 , 0 , 32,
18331 0xfc00ffff, 0x2000fb7f, 0 , 0,
18332 0x0 }, /* POOL32Axf_5_group3~*(29) */
18333 { reserved_block , 0 , 0 , 32,
18334 0xfc00ffff, 0x2000fd7f, 0 , 0,
18335 0x0 }, /* POOL32Axf_5_group3~*(30) */
18336 { reserved_block , 0 , 0 , 32,
18337 0xfc00ffff, 0x2000ff7f, 0 , 0,
18338 0x0 }, /* POOL32Axf_5_group3~*(31) */
18342 static const Pool POOL32Axf_5[4] = {
18343 { pool , POOL32Axf_5_group0 , 32 , 32,
18344 0xfc00c1ff, 0x2000017f, 0 , 0,
18345 0x0 }, /* POOL32Axf_5_group0 */
18346 { pool , POOL32Axf_5_group1 , 32 , 32,
18347 0xfc00c1ff, 0x2000417f, 0 , 0,
18348 0x0 }, /* POOL32Axf_5_group1 */
18349 { reserved_block , 0 , 0 , 32,
18350 0xfc00c1ff, 0x2000817f, 0 , 0,
18351 0x0 }, /* POOL32Axf_5~*(2) */
18352 { pool , POOL32Axf_5_group3 , 32 , 32,
18353 0xfc00c1ff, 0x2000c17f, 0 , 0,
18354 0x0 }, /* POOL32Axf_5_group3 */
18358 static const Pool SHRA__R__QB[2] = {
18359 { instruction , 0 , 0 , 32,
18360 0xfc001fff, 0x200001ff, &SHRA_QB , 0,
18361 DSP_ }, /* SHRA.QB */
18362 { instruction , 0 , 0 , 32,
18363 0xfc001fff, 0x200011ff, &SHRA_R_QB , 0,
18364 DSP_ }, /* SHRA_R.QB */
18368 static const Pool POOL32Axf_7[8] = {
18369 { pool , SHRA__R__QB , 2 , 32,
18370 0xfc000fff, 0x200001ff, 0 , 0,
18371 0x0 }, /* SHRA[_R].QB */
18372 { instruction , 0 , 0 , 32,
18373 0xfc000fff, 0x200003ff, &SHRL_PH , 0,
18374 DSP_ }, /* SHRL.PH */
18375 { instruction , 0 , 0 , 32,
18376 0xfc000fff, 0x200005ff, &REPL_QB , 0,
18377 DSP_ }, /* REPL.QB */
18378 { reserved_block , 0 , 0 , 32,
18379 0xfc000fff, 0x200007ff, 0 , 0,
18380 0x0 }, /* POOL32Axf_7~*(3) */
18381 { reserved_block , 0 , 0 , 32,
18382 0xfc000fff, 0x200009ff, 0 , 0,
18383 0x0 }, /* POOL32Axf_7~*(4) */
18384 { reserved_block , 0 , 0 , 32,
18385 0xfc000fff, 0x20000bff, 0 , 0,
18386 0x0 }, /* POOL32Axf_7~*(5) */
18387 { reserved_block , 0 , 0 , 32,
18388 0xfc000fff, 0x20000dff, 0 , 0,
18389 0x0 }, /* POOL32Axf_7~*(6) */
18390 { reserved_block , 0 , 0 , 32,
18391 0xfc000fff, 0x20000fff, 0 , 0,
18392 0x0 }, /* POOL32Axf_7~*(7) */
18396 static const Pool POOL32Axf[8] = {
18397 { reserved_block , 0 , 0 , 32,
18398 0xfc0001ff, 0x2000003f, 0 , 0,
18399 0x0 }, /* POOL32Axf~*(0) */
18400 { pool , POOL32Axf_1 , 8 , 32,
18401 0xfc0001ff, 0x2000007f, 0 , 0,
18402 0x0 }, /* POOL32Axf_1 */
18403 { pool , POOL32Axf_2 , 4 , 32,
18404 0xfc0001ff, 0x200000bf, 0 , 0,
18405 0x0 }, /* POOL32Axf_2 */
18406 { reserved_block , 0 , 0 , 32,
18407 0xfc0001ff, 0x200000ff, 0 , 0,
18408 0x0 }, /* POOL32Axf~*(3) */
18409 { pool , POOL32Axf_4 , 128 , 32,
18410 0xfc0001ff, 0x2000013f, 0 , 0,
18411 0x0 }, /* POOL32Axf_4 */
18412 { pool , POOL32Axf_5 , 4 , 32,
18413 0xfc0001ff, 0x2000017f, 0 , 0,
18414 0x0 }, /* POOL32Axf_5 */
18415 { reserved_block , 0 , 0 , 32,
18416 0xfc0001ff, 0x200001bf, 0 , 0,
18417 0x0 }, /* POOL32Axf~*(6) */
18418 { pool , POOL32Axf_7 , 8 , 32,
18419 0xfc0001ff, 0x200001ff, 0 , 0,
18420 0x0 }, /* POOL32Axf_7 */
18424 static const Pool _POOL32A7[8] = {
18425 { pool , P_LSX , 2 , 32,
18426 0xfc00003f, 0x20000007, 0 , 0,
18427 0x0 }, /* P.LSX */
18428 { instruction , 0 , 0 , 32,
18429 0xfc00003f, 0x2000000f, &LSA , 0,
18430 0x0 }, /* LSA */
18431 { reserved_block , 0 , 0 , 32,
18432 0xfc00003f, 0x20000017, 0 , 0,
18433 0x0 }, /* _POOL32A7~*(2) */
18434 { instruction , 0 , 0 , 32,
18435 0xfc00003f, 0x2000001f, &EXTW , 0,
18436 0x0 }, /* EXTW */
18437 { reserved_block , 0 , 0 , 32,
18438 0xfc00003f, 0x20000027, 0 , 0,
18439 0x0 }, /* _POOL32A7~*(4) */
18440 { reserved_block , 0 , 0 , 32,
18441 0xfc00003f, 0x2000002f, 0 , 0,
18442 0x0 }, /* _POOL32A7~*(5) */
18443 { reserved_block , 0 , 0 , 32,
18444 0xfc00003f, 0x20000037, 0 , 0,
18445 0x0 }, /* _POOL32A7~*(6) */
18446 { pool , POOL32Axf , 8 , 32,
18447 0xfc00003f, 0x2000003f, 0 , 0,
18448 0x0 }, /* POOL32Axf */
18452 static const Pool P32A[8] = {
18453 { pool , _POOL32A0 , 128 , 32,
18454 0xfc000007, 0x20000000, 0 , 0,
18455 0x0 }, /* _POOL32A0 */
18456 { instruction , 0 , 0 , 32,
18457 0xfc000007, 0x20000001, &SPECIAL2 , 0,
18458 UDI_ }, /* SPECIAL2 */
18459 { instruction , 0 , 0 , 32,
18460 0xfc000007, 0x20000002, &COP2_1 , 0,
18461 CP2_ }, /* COP2_1 */
18462 { instruction , 0 , 0 , 32,
18463 0xfc000007, 0x20000003, &UDI , 0,
18464 UDI_ }, /* UDI */
18465 { reserved_block , 0 , 0 , 32,
18466 0xfc000007, 0x20000004, 0 , 0,
18467 0x0 }, /* P32A~*(4) */
18468 { pool , _POOL32A5 , 128 , 32,
18469 0xfc000007, 0x20000005, 0 , 0,
18470 0x0 }, /* _POOL32A5 */
18471 { reserved_block , 0 , 0 , 32,
18472 0xfc000007, 0x20000006, 0 , 0,
18473 0x0 }, /* P32A~*(6) */
18474 { pool , _POOL32A7 , 8 , 32,
18475 0xfc000007, 0x20000007, 0 , 0,
18476 0x0 }, /* _POOL32A7 */
18480 static const Pool P_GP_D[2] = {
18481 { instruction , 0 , 0 , 32,
18482 0xfc000007, 0x40000001, &LD_GP_ , 0,
18483 MIPS64_ }, /* LD[GP] */
18484 { instruction , 0 , 0 , 32,
18485 0xfc000007, 0x40000005, &SD_GP_ , 0,
18486 MIPS64_ }, /* SD[GP] */
18490 static const Pool P_GP_W[4] = {
18491 { instruction , 0 , 0 , 32,
18492 0xfc000003, 0x40000000, &ADDIU_GP_W_ , 0,
18493 0x0 }, /* ADDIU[GP.W] */
18494 { pool , P_GP_D , 2 , 32,
18495 0xfc000003, 0x40000001, 0 , 0,
18496 0x0 }, /* P.GP.D */
18497 { instruction , 0 , 0 , 32,
18498 0xfc000003, 0x40000002, &LW_GP_ , 0,
18499 0x0 }, /* LW[GP] */
18500 { instruction , 0 , 0 , 32,
18501 0xfc000003, 0x40000003, &SW_GP_ , 0,
18502 0x0 }, /* SW[GP] */
18506 static const Pool POOL48I[32] = {
18507 { instruction , 0 , 0 , 48,
18508 0xfc1f00000000ull, 0x600000000000ull, &LI_48_ , 0,
18509 XMMS_ }, /* LI[48] */
18510 { instruction , 0 , 0 , 48,
18511 0xfc1f00000000ull, 0x600100000000ull, &ADDIU_48_ , 0,
18512 XMMS_ }, /* ADDIU[48] */
18513 { instruction , 0 , 0 , 48,
18514 0xfc1f00000000ull, 0x600200000000ull, &ADDIU_GP48_ , 0,
18515 XMMS_ }, /* ADDIU[GP48] */
18516 { instruction , 0 , 0 , 48,
18517 0xfc1f00000000ull, 0x600300000000ull, &ADDIUPC_48_ , 0,
18518 XMMS_ }, /* ADDIUPC[48] */
18519 { reserved_block , 0 , 0 , 48,
18520 0xfc1f00000000ull, 0x600400000000ull, 0 , 0,
18521 0x0 }, /* POOL48I~*(4) */
18522 { reserved_block , 0 , 0 , 48,
18523 0xfc1f00000000ull, 0x600500000000ull, 0 , 0,
18524 0x0 }, /* POOL48I~*(5) */
18525 { reserved_block , 0 , 0 , 48,
18526 0xfc1f00000000ull, 0x600600000000ull, 0 , 0,
18527 0x0 }, /* POOL48I~*(6) */
18528 { reserved_block , 0 , 0 , 48,
18529 0xfc1f00000000ull, 0x600700000000ull, 0 , 0,
18530 0x0 }, /* POOL48I~*(7) */
18531 { reserved_block , 0 , 0 , 48,
18532 0xfc1f00000000ull, 0x600800000000ull, 0 , 0,
18533 0x0 }, /* POOL48I~*(8) */
18534 { reserved_block , 0 , 0 , 48,
18535 0xfc1f00000000ull, 0x600900000000ull, 0 , 0,
18536 0x0 }, /* POOL48I~*(9) */
18537 { reserved_block , 0 , 0 , 48,
18538 0xfc1f00000000ull, 0x600a00000000ull, 0 , 0,
18539 0x0 }, /* POOL48I~*(10) */
18540 { instruction , 0 , 0 , 48,
18541 0xfc1f00000000ull, 0x600b00000000ull, &LWPC_48_ , 0,
18542 XMMS_ }, /* LWPC[48] */
18543 { reserved_block , 0 , 0 , 48,
18544 0xfc1f00000000ull, 0x600c00000000ull, 0 , 0,
18545 0x0 }, /* POOL48I~*(12) */
18546 { reserved_block , 0 , 0 , 48,
18547 0xfc1f00000000ull, 0x600d00000000ull, 0 , 0,
18548 0x0 }, /* POOL48I~*(13) */
18549 { reserved_block , 0 , 0 , 48,
18550 0xfc1f00000000ull, 0x600e00000000ull, 0 , 0,
18551 0x0 }, /* POOL48I~*(14) */
18552 { instruction , 0 , 0 , 48,
18553 0xfc1f00000000ull, 0x600f00000000ull, &SWPC_48_ , 0,
18554 XMMS_ }, /* SWPC[48] */
18555 { reserved_block , 0 , 0 , 48,
18556 0xfc1f00000000ull, 0x601000000000ull, 0 , 0,
18557 0x0 }, /* POOL48I~*(16) */
18558 { instruction , 0 , 0 , 48,
18559 0xfc1f00000000ull, 0x601100000000ull, &DADDIU_48_ , 0,
18560 MIPS64_ }, /* DADDIU[48] */
18561 { reserved_block , 0 , 0 , 48,
18562 0xfc1f00000000ull, 0x601200000000ull, 0 , 0,
18563 0x0 }, /* POOL48I~*(18) */
18564 { reserved_block , 0 , 0 , 48,
18565 0xfc1f00000000ull, 0x601300000000ull, 0 , 0,
18566 0x0 }, /* POOL48I~*(19) */
18567 { instruction , 0 , 0 , 48,
18568 0xfc1f00000000ull, 0x601400000000ull, &DLUI_48_ , 0,
18569 MIPS64_ }, /* DLUI[48] */
18570 { reserved_block , 0 , 0 , 48,
18571 0xfc1f00000000ull, 0x601500000000ull, 0 , 0,
18572 0x0 }, /* POOL48I~*(21) */
18573 { reserved_block , 0 , 0 , 48,
18574 0xfc1f00000000ull, 0x601600000000ull, 0 , 0,
18575 0x0 }, /* POOL48I~*(22) */
18576 { reserved_block , 0 , 0 , 48,
18577 0xfc1f00000000ull, 0x601700000000ull, 0 , 0,
18578 0x0 }, /* POOL48I~*(23) */
18579 { reserved_block , 0 , 0 , 48,
18580 0xfc1f00000000ull, 0x601800000000ull, 0 , 0,
18581 0x0 }, /* POOL48I~*(24) */
18582 { reserved_block , 0 , 0 , 48,
18583 0xfc1f00000000ull, 0x601900000000ull, 0 , 0,
18584 0x0 }, /* POOL48I~*(25) */
18585 { reserved_block , 0 , 0 , 48,
18586 0xfc1f00000000ull, 0x601a00000000ull, 0 , 0,
18587 0x0 }, /* POOL48I~*(26) */
18588 { instruction , 0 , 0 , 48,
18589 0xfc1f00000000ull, 0x601b00000000ull, &LDPC_48_ , 0,
18590 MIPS64_ }, /* LDPC[48] */
18591 { reserved_block , 0 , 0 , 48,
18592 0xfc1f00000000ull, 0x601c00000000ull, 0 , 0,
18593 0x0 }, /* POOL48I~*(28) */
18594 { reserved_block , 0 , 0 , 48,
18595 0xfc1f00000000ull, 0x601d00000000ull, 0 , 0,
18596 0x0 }, /* POOL48I~*(29) */
18597 { reserved_block , 0 , 0 , 48,
18598 0xfc1f00000000ull, 0x601e00000000ull, 0 , 0,
18599 0x0 }, /* POOL48I~*(30) */
18600 { instruction , 0 , 0 , 48,
18601 0xfc1f00000000ull, 0x601f00000000ull, &SDPC_48_ , 0,
18602 MIPS64_ }, /* SDPC[48] */
18606 static const Pool PP_SR[4] = {
18607 { instruction , 0 , 0 , 32,
18608 0xfc10f003, 0x80003000, &SAVE_32_ , 0,
18609 0x0 }, /* SAVE[32] */
18610 { reserved_block , 0 , 0 , 32,
18611 0xfc10f003, 0x80003001, 0 , 0,
18612 0x0 }, /* PP.SR~*(1) */
18613 { instruction , 0 , 0 , 32,
18614 0xfc10f003, 0x80003002, &RESTORE_32_ , 0,
18615 0x0 }, /* RESTORE[32] */
18616 { return_instruction , 0 , 0 , 32,
18617 0xfc10f003, 0x80003003, &RESTORE_JRC_32_ , 0,
18618 0x0 }, /* RESTORE.JRC[32] */
18622 static const Pool P_SR_F[8] = {
18623 { instruction , 0 , 0 , 32,
18624 0xfc10f007, 0x80103000, &SAVEF , 0,
18625 CP1_ }, /* SAVEF */
18626 { instruction , 0 , 0 , 32,
18627 0xfc10f007, 0x80103001, &RESTOREF , 0,
18628 CP1_ }, /* RESTOREF */
18629 { reserved_block , 0 , 0 , 32,
18630 0xfc10f007, 0x80103002, 0 , 0,
18631 0x0 }, /* P.SR.F~*(2) */
18632 { reserved_block , 0 , 0 , 32,
18633 0xfc10f007, 0x80103003, 0 , 0,
18634 0x0 }, /* P.SR.F~*(3) */
18635 { reserved_block , 0 , 0 , 32,
18636 0xfc10f007, 0x80103004, 0 , 0,
18637 0x0 }, /* P.SR.F~*(4) */
18638 { reserved_block , 0 , 0 , 32,
18639 0xfc10f007, 0x80103005, 0 , 0,
18640 0x0 }, /* P.SR.F~*(5) */
18641 { reserved_block , 0 , 0 , 32,
18642 0xfc10f007, 0x80103006, 0 , 0,
18643 0x0 }, /* P.SR.F~*(6) */
18644 { reserved_block , 0 , 0 , 32,
18645 0xfc10f007, 0x80103007, 0 , 0,
18646 0x0 }, /* P.SR.F~*(7) */
18650 static const Pool P_SR[2] = {
18651 { pool , PP_SR , 4 , 32,
18652 0xfc10f000, 0x80003000, 0 , 0,
18653 0x0 }, /* PP.SR */
18654 { pool , P_SR_F , 8 , 32,
18655 0xfc10f000, 0x80103000, 0 , 0,
18656 0x0 }, /* P.SR.F */
18660 static const Pool P_SLL[5] = {
18661 { instruction , 0 , 0 , 32,
18662 0xffe0f1ff, 0x8000c000, &NOP_32_ , 0,
18663 0x0 }, /* NOP[32] */
18664 { instruction , 0 , 0 , 32,
18665 0xffe0f1ff, 0x8000c003, &EHB , 0,
18666 0x0 }, /* EHB */
18667 { instruction , 0 , 0 , 32,
18668 0xffe0f1ff, 0x8000c005, &PAUSE , 0,
18669 0x0 }, /* PAUSE */
18670 { instruction , 0 , 0 , 32,
18671 0xffe0f1ff, 0x8000c006, &SYNC , 0,
18672 0x0 }, /* SYNC */
18673 { instruction , 0 , 0 , 32,
18674 0xfc00f1e0, 0x8000c000, &SLL_32_ , 0,
18675 0x0 }, /* SLL[32] */
18679 static const Pool P_SHIFT[16] = {
18680 { pool , P_SLL , 5 , 32,
18681 0xfc00f1e0, 0x8000c000, 0 , 0,
18682 0x0 }, /* P.SLL */
18683 { reserved_block , 0 , 0 , 32,
18684 0xfc00f1e0, 0x8000c020, 0 , 0,
18685 0x0 }, /* P.SHIFT~*(1) */
18686 { instruction , 0 , 0 , 32,
18687 0xfc00f1e0, 0x8000c040, &SRL_32_ , 0,
18688 0x0 }, /* SRL[32] */
18689 { reserved_block , 0 , 0 , 32,
18690 0xfc00f1e0, 0x8000c060, 0 , 0,
18691 0x0 }, /* P.SHIFT~*(3) */
18692 { instruction , 0 , 0 , 32,
18693 0xfc00f1e0, 0x8000c080, &SRA , 0,
18694 0x0 }, /* SRA */
18695 { reserved_block , 0 , 0 , 32,
18696 0xfc00f1e0, 0x8000c0a0, 0 , 0,
18697 0x0 }, /* P.SHIFT~*(5) */
18698 { instruction , 0 , 0 , 32,
18699 0xfc00f1e0, 0x8000c0c0, &ROTR , 0,
18700 0x0 }, /* ROTR */
18701 { reserved_block , 0 , 0 , 32,
18702 0xfc00f1e0, 0x8000c0e0, 0 , 0,
18703 0x0 }, /* P.SHIFT~*(7) */
18704 { instruction , 0 , 0 , 32,
18705 0xfc00f1e0, 0x8000c100, &DSLL , 0,
18706 MIPS64_ }, /* DSLL */
18707 { instruction , 0 , 0 , 32,
18708 0xfc00f1e0, 0x8000c120, &DSLL32 , 0,
18709 MIPS64_ }, /* DSLL32 */
18710 { instruction , 0 , 0 , 32,
18711 0xfc00f1e0, 0x8000c140, &DSRL , 0,
18712 MIPS64_ }, /* DSRL */
18713 { instruction , 0 , 0 , 32,
18714 0xfc00f1e0, 0x8000c160, &DSRL32 , 0,
18715 MIPS64_ }, /* DSRL32 */
18716 { instruction , 0 , 0 , 32,
18717 0xfc00f1e0, 0x8000c180, &DSRA , 0,
18718 MIPS64_ }, /* DSRA */
18719 { instruction , 0 , 0 , 32,
18720 0xfc00f1e0, 0x8000c1a0, &DSRA32 , 0,
18721 MIPS64_ }, /* DSRA32 */
18722 { instruction , 0 , 0 , 32,
18723 0xfc00f1e0, 0x8000c1c0, &DROTR , 0,
18724 MIPS64_ }, /* DROTR */
18725 { instruction , 0 , 0 , 32,
18726 0xfc00f1e0, 0x8000c1e0, &DROTR32 , 0,
18727 MIPS64_ }, /* DROTR32 */
18731 static const Pool P_ROTX[4] = {
18732 { instruction , 0 , 0 , 32,
18733 0xfc00f820, 0x8000d000, &ROTX , 0,
18734 XMMS_ }, /* ROTX */
18735 { reserved_block , 0 , 0 , 32,
18736 0xfc00f820, 0x8000d020, 0 , 0,
18737 0x0 }, /* P.ROTX~*(1) */
18738 { reserved_block , 0 , 0 , 32,
18739 0xfc00f820, 0x8000d800, 0 , 0,
18740 0x0 }, /* P.ROTX~*(2) */
18741 { reserved_block , 0 , 0 , 32,
18742 0xfc00f820, 0x8000d820, 0 , 0,
18743 0x0 }, /* P.ROTX~*(3) */
18747 static const Pool P_INS[4] = {
18748 { instruction , 0 , 0 , 32,
18749 0xfc00f820, 0x8000e000, &INS , 0,
18750 XMMS_ }, /* INS */
18751 { instruction , 0 , 0 , 32,
18752 0xfc00f820, 0x8000e020, &DINSU , 0,
18753 MIPS64_ }, /* DINSU */
18754 { instruction , 0 , 0 , 32,
18755 0xfc00f820, 0x8000e800, &DINSM , 0,
18756 MIPS64_ }, /* DINSM */
18757 { instruction , 0 , 0 , 32,
18758 0xfc00f820, 0x8000e820, &DINS , 0,
18759 MIPS64_ }, /* DINS */
18763 static const Pool P_EXT[4] = {
18764 { instruction , 0 , 0 , 32,
18765 0xfc00f820, 0x8000f000, &EXT , 0,
18766 XMMS_ }, /* EXT */
18767 { instruction , 0 , 0 , 32,
18768 0xfc00f820, 0x8000f020, &DEXTU , 0,
18769 MIPS64_ }, /* DEXTU */
18770 { instruction , 0 , 0 , 32,
18771 0xfc00f820, 0x8000f800, &DEXTM , 0,
18772 MIPS64_ }, /* DEXTM */
18773 { instruction , 0 , 0 , 32,
18774 0xfc00f820, 0x8000f820, &DEXT , 0,
18775 MIPS64_ }, /* DEXT */
18779 static const Pool P_U12[16] = {
18780 { instruction , 0 , 0 , 32,
18781 0xfc00f000, 0x80000000, &ORI , 0,
18782 0x0 }, /* ORI */
18783 { instruction , 0 , 0 , 32,
18784 0xfc00f000, 0x80001000, &XORI , 0,
18785 0x0 }, /* XORI */
18786 { instruction , 0 , 0 , 32,
18787 0xfc00f000, 0x80002000, &ANDI_32_ , 0,
18788 0x0 }, /* ANDI[32] */
18789 { pool , P_SR , 2 , 32,
18790 0xfc00f000, 0x80003000, 0 , 0,
18791 0x0 }, /* P.SR */
18792 { instruction , 0 , 0 , 32,
18793 0xfc00f000, 0x80004000, &SLTI , 0,
18794 0x0 }, /* SLTI */
18795 { instruction , 0 , 0 , 32,
18796 0xfc00f000, 0x80005000, &SLTIU , 0,
18797 0x0 }, /* SLTIU */
18798 { instruction , 0 , 0 , 32,
18799 0xfc00f000, 0x80006000, &SEQI , 0,
18800 0x0 }, /* SEQI */
18801 { reserved_block , 0 , 0 , 32,
18802 0xfc00f000, 0x80007000, 0 , 0,
18803 0x0 }, /* P.U12~*(7) */
18804 { instruction , 0 , 0 , 32,
18805 0xfc00f000, 0x80008000, &ADDIU_NEG_ , 0,
18806 0x0 }, /* ADDIU[NEG] */
18807 { instruction , 0 , 0 , 32,
18808 0xfc00f000, 0x80009000, &DADDIU_U12_ , 0,
18809 MIPS64_ }, /* DADDIU[U12] */
18810 { instruction , 0 , 0 , 32,
18811 0xfc00f000, 0x8000a000, &DADDIU_NEG_ , 0,
18812 MIPS64_ }, /* DADDIU[NEG] */
18813 { instruction , 0 , 0 , 32,
18814 0xfc00f000, 0x8000b000, &DROTX , 0,
18815 MIPS64_ }, /* DROTX */
18816 { pool , P_SHIFT , 16 , 32,
18817 0xfc00f000, 0x8000c000, 0 , 0,
18818 0x0 }, /* P.SHIFT */
18819 { pool , P_ROTX , 4 , 32,
18820 0xfc00f000, 0x8000d000, 0 , 0,
18821 0x0 }, /* P.ROTX */
18822 { pool , P_INS , 4 , 32,
18823 0xfc00f000, 0x8000e000, 0 , 0,
18824 0x0 }, /* P.INS */
18825 { pool , P_EXT , 4 , 32,
18826 0xfc00f000, 0x8000f000, 0 , 0,
18827 0x0 }, /* P.EXT */
18831 static const Pool RINT_fmt[2] = {
18832 { instruction , 0 , 0 , 32,
18833 0xfc0003ff, 0xa0000020, &RINT_S , 0,
18834 CP1_ }, /* RINT.S */
18835 { instruction , 0 , 0 , 32,
18836 0xfc0003ff, 0xa0000220, &RINT_D , 0,
18837 CP1_ }, /* RINT.D */
18841 static const Pool ADD_fmt0[2] = {
18842 { instruction , 0 , 0 , 32,
18843 0xfc0003ff, 0xa0000030, &ADD_S , 0,
18844 CP1_ }, /* ADD.S */
18845 { reserved_block , 0 , 0 , 32,
18846 0xfc0003ff, 0xa0000230, 0 , 0,
18847 CP1_ }, /* ADD.fmt0~*(1) */
18851 static const Pool SELEQZ_fmt[2] = {
18852 { instruction , 0 , 0 , 32,
18853 0xfc0003ff, 0xa0000038, &SELEQZ_S , 0,
18854 CP1_ }, /* SELEQZ.S */
18855 { instruction , 0 , 0 , 32,
18856 0xfc0003ff, 0xa0000238, &SELEQZ_D , 0,
18857 CP1_ }, /* SELEQZ.D */
18861 static const Pool CLASS_fmt[2] = {
18862 { instruction , 0 , 0 , 32,
18863 0xfc0003ff, 0xa0000060, &CLASS_S , 0,
18864 CP1_ }, /* CLASS.S */
18865 { instruction , 0 , 0 , 32,
18866 0xfc0003ff, 0xa0000260, &CLASS_D , 0,
18867 CP1_ }, /* CLASS.D */
18871 static const Pool SUB_fmt0[2] = {
18872 { instruction , 0 , 0 , 32,
18873 0xfc0003ff, 0xa0000070, &SUB_S , 0,
18874 CP1_ }, /* SUB.S */
18875 { reserved_block , 0 , 0 , 32,
18876 0xfc0003ff, 0xa0000270, 0 , 0,
18877 CP1_ }, /* SUB.fmt0~*(1) */
18881 static const Pool SELNEZ_fmt[2] = {
18882 { instruction , 0 , 0 , 32,
18883 0xfc0003ff, 0xa0000078, &SELNEZ_S , 0,
18884 CP1_ }, /* SELNEZ.S */
18885 { instruction , 0 , 0 , 32,
18886 0xfc0003ff, 0xa0000278, &SELNEZ_D , 0,
18887 CP1_ }, /* SELNEZ.D */
18891 static const Pool MUL_fmt0[2] = {
18892 { instruction , 0 , 0 , 32,
18893 0xfc0003ff, 0xa00000b0, &MUL_S , 0,
18894 CP1_ }, /* MUL.S */
18895 { reserved_block , 0 , 0 , 32,
18896 0xfc0003ff, 0xa00002b0, 0 , 0,
18897 CP1_ }, /* MUL.fmt0~*(1) */
18901 static const Pool SEL_fmt[2] = {
18902 { instruction , 0 , 0 , 32,
18903 0xfc0003ff, 0xa00000b8, &SEL_S , 0,
18904 CP1_ }, /* SEL.S */
18905 { instruction , 0 , 0 , 32,
18906 0xfc0003ff, 0xa00002b8, &SEL_D , 0,
18907 CP1_ }, /* SEL.D */
18911 static const Pool DIV_fmt0[2] = {
18912 { instruction , 0 , 0 , 32,
18913 0xfc0003ff, 0xa00000f0, &DIV_S , 0,
18914 CP1_ }, /* DIV.S */
18915 { reserved_block , 0 , 0 , 32,
18916 0xfc0003ff, 0xa00002f0, 0 , 0,
18917 CP1_ }, /* DIV.fmt0~*(1) */
18921 static const Pool ADD_fmt1[2] = {
18922 { instruction , 0 , 0 , 32,
18923 0xfc0003ff, 0xa0000130, &ADD_D , 0,
18924 CP1_ }, /* ADD.D */
18925 { reserved_block , 0 , 0 , 32,
18926 0xfc0003ff, 0xa0000330, 0 , 0,
18927 CP1_ }, /* ADD.fmt1~*(1) */
18931 static const Pool SUB_fmt1[2] = {
18932 { instruction , 0 , 0 , 32,
18933 0xfc0003ff, 0xa0000170, &SUB_D , 0,
18934 CP1_ }, /* SUB.D */
18935 { reserved_block , 0 , 0 , 32,
18936 0xfc0003ff, 0xa0000370, 0 , 0,
18937 CP1_ }, /* SUB.fmt1~*(1) */
18941 static const Pool MUL_fmt1[2] = {
18942 { instruction , 0 , 0 , 32,
18943 0xfc0003ff, 0xa00001b0, &MUL_D , 0,
18944 CP1_ }, /* MUL.D */
18945 { reserved_block , 0 , 0 , 32,
18946 0xfc0003ff, 0xa00003b0, 0 , 0,
18947 CP1_ }, /* MUL.fmt1~*(1) */
18951 static const Pool MADDF_fmt[2] = {
18952 { instruction , 0 , 0 , 32,
18953 0xfc0003ff, 0xa00001b8, &MADDF_S , 0,
18954 CP1_ }, /* MADDF.S */
18955 { instruction , 0 , 0 , 32,
18956 0xfc0003ff, 0xa00003b8, &MADDF_D , 0,
18957 CP1_ }, /* MADDF.D */
18961 static const Pool DIV_fmt1[2] = {
18962 { instruction , 0 , 0 , 32,
18963 0xfc0003ff, 0xa00001f0, &DIV_D , 0,
18964 CP1_ }, /* DIV.D */
18965 { reserved_block , 0 , 0 , 32,
18966 0xfc0003ff, 0xa00003f0, 0 , 0,
18967 CP1_ }, /* DIV.fmt1~*(1) */
18971 static const Pool MSUBF_fmt[2] = {
18972 { instruction , 0 , 0 , 32,
18973 0xfc0003ff, 0xa00001f8, &MSUBF_S , 0,
18974 CP1_ }, /* MSUBF.S */
18975 { instruction , 0 , 0 , 32,
18976 0xfc0003ff, 0xa00003f8, &MSUBF_D , 0,
18977 CP1_ }, /* MSUBF.D */
18981 static const Pool POOL32F_0[64] = {
18982 { reserved_block , 0 , 0 , 32,
18983 0xfc0001ff, 0xa0000000, 0 , 0,
18984 CP1_ }, /* POOL32F_0~*(0) */
18985 { reserved_block , 0 , 0 , 32,
18986 0xfc0001ff, 0xa0000008, 0 , 0,
18987 CP1_ }, /* POOL32F_0~*(1) */
18988 { reserved_block , 0 , 0 , 32,
18989 0xfc0001ff, 0xa0000010, 0 , 0,
18990 CP1_ }, /* POOL32F_0~*(2) */
18991 { reserved_block , 0 , 0 , 32,
18992 0xfc0001ff, 0xa0000018, 0 , 0,
18993 CP1_ }, /* POOL32F_0~*(3) */
18994 { pool , RINT_fmt , 2 , 32,
18995 0xfc0001ff, 0xa0000020, 0 , 0,
18996 CP1_ }, /* RINT.fmt */
18997 { reserved_block , 0 , 0 , 32,
18998 0xfc0001ff, 0xa0000028, 0 , 0,
18999 CP1_ }, /* POOL32F_0~*(5) */
19000 { pool , ADD_fmt0 , 2 , 32,
19001 0xfc0001ff, 0xa0000030, 0 , 0,
19002 CP1_ }, /* ADD.fmt0 */
19003 { pool , SELEQZ_fmt , 2 , 32,
19004 0xfc0001ff, 0xa0000038, 0 , 0,
19005 CP1_ }, /* SELEQZ.fmt */
19006 { reserved_block , 0 , 0 , 32,
19007 0xfc0001ff, 0xa0000040, 0 , 0,
19008 CP1_ }, /* POOL32F_0~*(8) */
19009 { reserved_block , 0 , 0 , 32,
19010 0xfc0001ff, 0xa0000048, 0 , 0,
19011 CP1_ }, /* POOL32F_0~*(9) */
19012 { reserved_block , 0 , 0 , 32,
19013 0xfc0001ff, 0xa0000050, 0 , 0,
19014 CP1_ }, /* POOL32F_0~*(10) */
19015 { reserved_block , 0 , 0 , 32,
19016 0xfc0001ff, 0xa0000058, 0 , 0,
19017 CP1_ }, /* POOL32F_0~*(11) */
19018 { pool , CLASS_fmt , 2 , 32,
19019 0xfc0001ff, 0xa0000060, 0 , 0,
19020 CP1_ }, /* CLASS.fmt */
19021 { reserved_block , 0 , 0 , 32,
19022 0xfc0001ff, 0xa0000068, 0 , 0,
19023 CP1_ }, /* POOL32F_0~*(13) */
19024 { pool , SUB_fmt0 , 2 , 32,
19025 0xfc0001ff, 0xa0000070, 0 , 0,
19026 CP1_ }, /* SUB.fmt0 */
19027 { pool , SELNEZ_fmt , 2 , 32,
19028 0xfc0001ff, 0xa0000078, 0 , 0,
19029 CP1_ }, /* SELNEZ.fmt */
19030 { reserved_block , 0 , 0 , 32,
19031 0xfc0001ff, 0xa0000080, 0 , 0,
19032 CP1_ }, /* POOL32F_0~*(16) */
19033 { reserved_block , 0 , 0 , 32,
19034 0xfc0001ff, 0xa0000088, 0 , 0,
19035 CP1_ }, /* POOL32F_0~*(17) */
19036 { reserved_block , 0 , 0 , 32,
19037 0xfc0001ff, 0xa0000090, 0 , 0,
19038 CP1_ }, /* POOL32F_0~*(18) */
19039 { reserved_block , 0 , 0 , 32,
19040 0xfc0001ff, 0xa0000098, 0 , 0,
19041 CP1_ }, /* POOL32F_0~*(19) */
19042 { reserved_block , 0 , 0 , 32,
19043 0xfc0001ff, 0xa00000a0, 0 , 0,
19044 CP1_ }, /* POOL32F_0~*(20) */
19045 { reserved_block , 0 , 0 , 32,
19046 0xfc0001ff, 0xa00000a8, 0 , 0,
19047 CP1_ }, /* POOL32F_0~*(21) */
19048 { pool , MUL_fmt0 , 2 , 32,
19049 0xfc0001ff, 0xa00000b0, 0 , 0,
19050 CP1_ }, /* MUL.fmt0 */
19051 { pool , SEL_fmt , 2 , 32,
19052 0xfc0001ff, 0xa00000b8, 0 , 0,
19053 CP1_ }, /* SEL.fmt */
19054 { reserved_block , 0 , 0 , 32,
19055 0xfc0001ff, 0xa00000c0, 0 , 0,
19056 CP1_ }, /* POOL32F_0~*(24) */
19057 { reserved_block , 0 , 0 , 32,
19058 0xfc0001ff, 0xa00000c8, 0 , 0,
19059 CP1_ }, /* POOL32F_0~*(25) */
19060 { reserved_block , 0 , 0 , 32,
19061 0xfc0001ff, 0xa00000d0, 0 , 0,
19062 CP1_ }, /* POOL32F_0~*(26) */
19063 { reserved_block , 0 , 0 , 32,
19064 0xfc0001ff, 0xa00000d8, 0 , 0,
19065 CP1_ }, /* POOL32F_0~*(27) */
19066 { reserved_block , 0 , 0 , 32,
19067 0xfc0001ff, 0xa00000e0, 0 , 0,
19068 CP1_ }, /* POOL32F_0~*(28) */
19069 { reserved_block , 0 , 0 , 32,
19070 0xfc0001ff, 0xa00000e8, 0 , 0,
19071 CP1_ }, /* POOL32F_0~*(29) */
19072 { pool , DIV_fmt0 , 2 , 32,
19073 0xfc0001ff, 0xa00000f0, 0 , 0,
19074 CP1_ }, /* DIV.fmt0 */
19075 { reserved_block , 0 , 0 , 32,
19076 0xfc0001ff, 0xa00000f8, 0 , 0,
19077 CP1_ }, /* POOL32F_0~*(31) */
19078 { reserved_block , 0 , 0 , 32,
19079 0xfc0001ff, 0xa0000100, 0 , 0,
19080 CP1_ }, /* POOL32F_0~*(32) */
19081 { reserved_block , 0 , 0 , 32,
19082 0xfc0001ff, 0xa0000108, 0 , 0,
19083 CP1_ }, /* POOL32F_0~*(33) */
19084 { reserved_block , 0 , 0 , 32,
19085 0xfc0001ff, 0xa0000110, 0 , 0,
19086 CP1_ }, /* POOL32F_0~*(34) */
19087 { reserved_block , 0 , 0 , 32,
19088 0xfc0001ff, 0xa0000118, 0 , 0,
19089 CP1_ }, /* POOL32F_0~*(35) */
19090 { reserved_block , 0 , 0 , 32,
19091 0xfc0001ff, 0xa0000120, 0 , 0,
19092 CP1_ }, /* POOL32F_0~*(36) */
19093 { reserved_block , 0 , 0 , 32,
19094 0xfc0001ff, 0xa0000128, 0 , 0,
19095 CP1_ }, /* POOL32F_0~*(37) */
19096 { pool , ADD_fmt1 , 2 , 32,
19097 0xfc0001ff, 0xa0000130, 0 , 0,
19098 CP1_ }, /* ADD.fmt1 */
19099 { reserved_block , 0 , 0 , 32,
19100 0xfc0001ff, 0xa0000138, 0 , 0,
19101 CP1_ }, /* POOL32F_0~*(39) */
19102 { reserved_block , 0 , 0 , 32,
19103 0xfc0001ff, 0xa0000140, 0 , 0,
19104 CP1_ }, /* POOL32F_0~*(40) */
19105 { reserved_block , 0 , 0 , 32,
19106 0xfc0001ff, 0xa0000148, 0 , 0,
19107 CP1_ }, /* POOL32F_0~*(41) */
19108 { reserved_block , 0 , 0 , 32,
19109 0xfc0001ff, 0xa0000150, 0 , 0,
19110 CP1_ }, /* POOL32F_0~*(42) */
19111 { reserved_block , 0 , 0 , 32,
19112 0xfc0001ff, 0xa0000158, 0 , 0,
19113 CP1_ }, /* POOL32F_0~*(43) */
19114 { reserved_block , 0 , 0 , 32,
19115 0xfc0001ff, 0xa0000160, 0 , 0,
19116 CP1_ }, /* POOL32F_0~*(44) */
19117 { reserved_block , 0 , 0 , 32,
19118 0xfc0001ff, 0xa0000168, 0 , 0,
19119 CP1_ }, /* POOL32F_0~*(45) */
19120 { pool , SUB_fmt1 , 2 , 32,
19121 0xfc0001ff, 0xa0000170, 0 , 0,
19122 CP1_ }, /* SUB.fmt1 */
19123 { reserved_block , 0 , 0 , 32,
19124 0xfc0001ff, 0xa0000178, 0 , 0,
19125 CP1_ }, /* POOL32F_0~*(47) */
19126 { reserved_block , 0 , 0 , 32,
19127 0xfc0001ff, 0xa0000180, 0 , 0,
19128 CP1_ }, /* POOL32F_0~*(48) */
19129 { reserved_block , 0 , 0 , 32,
19130 0xfc0001ff, 0xa0000188, 0 , 0,
19131 CP1_ }, /* POOL32F_0~*(49) */
19132 { reserved_block , 0 , 0 , 32,
19133 0xfc0001ff, 0xa0000190, 0 , 0,
19134 CP1_ }, /* POOL32F_0~*(50) */
19135 { reserved_block , 0 , 0 , 32,
19136 0xfc0001ff, 0xa0000198, 0 , 0,
19137 CP1_ }, /* POOL32F_0~*(51) */
19138 { reserved_block , 0 , 0 , 32,
19139 0xfc0001ff, 0xa00001a0, 0 , 0,
19140 CP1_ }, /* POOL32F_0~*(52) */
19141 { reserved_block , 0 , 0 , 32,
19142 0xfc0001ff, 0xa00001a8, 0 , 0,
19143 CP1_ }, /* POOL32F_0~*(53) */
19144 { pool , MUL_fmt1 , 2 , 32,
19145 0xfc0001ff, 0xa00001b0, 0 , 0,
19146 CP1_ }, /* MUL.fmt1 */
19147 { pool , MADDF_fmt , 2 , 32,
19148 0xfc0001ff, 0xa00001b8, 0 , 0,
19149 CP1_ }, /* MADDF.fmt */
19150 { reserved_block , 0 , 0 , 32,
19151 0xfc0001ff, 0xa00001c0, 0 , 0,
19152 CP1_ }, /* POOL32F_0~*(56) */
19153 { reserved_block , 0 , 0 , 32,
19154 0xfc0001ff, 0xa00001c8, 0 , 0,
19155 CP1_ }, /* POOL32F_0~*(57) */
19156 { reserved_block , 0 , 0 , 32,
19157 0xfc0001ff, 0xa00001d0, 0 , 0,
19158 CP1_ }, /* POOL32F_0~*(58) */
19159 { reserved_block , 0 , 0 , 32,
19160 0xfc0001ff, 0xa00001d8, 0 , 0,
19161 CP1_ }, /* POOL32F_0~*(59) */
19162 { reserved_block , 0 , 0 , 32,
19163 0xfc0001ff, 0xa00001e0, 0 , 0,
19164 CP1_ }, /* POOL32F_0~*(60) */
19165 { reserved_block , 0 , 0 , 32,
19166 0xfc0001ff, 0xa00001e8, 0 , 0,
19167 CP1_ }, /* POOL32F_0~*(61) */
19168 { pool , DIV_fmt1 , 2 , 32,
19169 0xfc0001ff, 0xa00001f0, 0 , 0,
19170 CP1_ }, /* DIV.fmt1 */
19171 { pool , MSUBF_fmt , 2 , 32,
19172 0xfc0001ff, 0xa00001f8, 0 , 0,
19173 CP1_ }, /* MSUBF.fmt */
19177 static const Pool MIN_fmt[2] = {
19178 { instruction , 0 , 0 , 32,
19179 0xfc00023f, 0xa0000003, &MIN_S , 0,
19180 CP1_ }, /* MIN.S */
19181 { instruction , 0 , 0 , 32,
19182 0xfc00023f, 0xa0000203, &MIN_D , 0,
19183 CP1_ }, /* MIN.D */
19187 static const Pool MAX_fmt[2] = {
19188 { instruction , 0 , 0 , 32,
19189 0xfc00023f, 0xa000000b, &MAX_S , 0,
19190 CP1_ }, /* MAX.S */
19191 { instruction , 0 , 0 , 32,
19192 0xfc00023f, 0xa000020b, &MAX_D , 0,
19193 CP1_ }, /* MAX.D */
19197 static const Pool MINA_fmt[2] = {
19198 { instruction , 0 , 0 , 32,
19199 0xfc00023f, 0xa0000023, &MINA_S , 0,
19200 CP1_ }, /* MINA.S */
19201 { instruction , 0 , 0 , 32,
19202 0xfc00023f, 0xa0000223, &MINA_D , 0,
19203 CP1_ }, /* MINA.D */
19207 static const Pool MAXA_fmt[2] = {
19208 { instruction , 0 , 0 , 32,
19209 0xfc00023f, 0xa000002b, &MAXA_S , 0,
19210 CP1_ }, /* MAXA.S */
19211 { instruction , 0 , 0 , 32,
19212 0xfc00023f, 0xa000022b, &MAXA_D , 0,
19213 CP1_ }, /* MAXA.D */
19217 static const Pool CVT_L_fmt[2] = {
19218 { instruction , 0 , 0 , 32,
19219 0xfc007fff, 0xa000013b, &CVT_L_S , 0,
19220 CP1_ }, /* CVT.L.S */
19221 { instruction , 0 , 0 , 32,
19222 0xfc007fff, 0xa000413b, &CVT_L_D , 0,
19223 CP1_ }, /* CVT.L.D */
19227 static const Pool RSQRT_fmt[2] = {
19228 { instruction , 0 , 0 , 32,
19229 0xfc007fff, 0xa000023b, &RSQRT_S , 0,
19230 CP1_ }, /* RSQRT.S */
19231 { instruction , 0 , 0 , 32,
19232 0xfc007fff, 0xa000423b, &RSQRT_D , 0,
19233 CP1_ }, /* RSQRT.D */
19237 static const Pool FLOOR_L_fmt[2] = {
19238 { instruction , 0 , 0 , 32,
19239 0xfc007fff, 0xa000033b, &FLOOR_L_S , 0,
19240 CP1_ }, /* FLOOR.L.S */
19241 { instruction , 0 , 0 , 32,
19242 0xfc007fff, 0xa000433b, &FLOOR_L_D , 0,
19243 CP1_ }, /* FLOOR.L.D */
19247 static const Pool CVT_W_fmt[2] = {
19248 { instruction , 0 , 0 , 32,
19249 0xfc007fff, 0xa000093b, &CVT_W_S , 0,
19250 CP1_ }, /* CVT.W.S */
19251 { instruction , 0 , 0 , 32,
19252 0xfc007fff, 0xa000493b, &CVT_W_D , 0,
19253 CP1_ }, /* CVT.W.D */
19257 static const Pool SQRT_fmt[2] = {
19258 { instruction , 0 , 0 , 32,
19259 0xfc007fff, 0xa0000a3b, &SQRT_S , 0,
19260 CP1_ }, /* SQRT.S */
19261 { instruction , 0 , 0 , 32,
19262 0xfc007fff, 0xa0004a3b, &SQRT_D , 0,
19263 CP1_ }, /* SQRT.D */
19267 static const Pool FLOOR_W_fmt[2] = {
19268 { instruction , 0 , 0 , 32,
19269 0xfc007fff, 0xa0000b3b, &FLOOR_W_S , 0,
19270 CP1_ }, /* FLOOR.W.S */
19271 { instruction , 0 , 0 , 32,
19272 0xfc007fff, 0xa0004b3b, &FLOOR_W_D , 0,
19273 CP1_ }, /* FLOOR.W.D */
19277 static const Pool RECIP_fmt[2] = {
19278 { instruction , 0 , 0 , 32,
19279 0xfc007fff, 0xa000123b, &RECIP_S , 0,
19280 CP1_ }, /* RECIP.S */
19281 { instruction , 0 , 0 , 32,
19282 0xfc007fff, 0xa000523b, &RECIP_D , 0,
19283 CP1_ }, /* RECIP.D */
19287 static const Pool CEIL_L_fmt[2] = {
19288 { instruction , 0 , 0 , 32,
19289 0xfc007fff, 0xa000133b, &CEIL_L_S , 0,
19290 CP1_ }, /* CEIL.L.S */
19291 { instruction , 0 , 0 , 32,
19292 0xfc007fff, 0xa000533b, &CEIL_L_D , 0,
19293 CP1_ }, /* CEIL.L.D */
19297 static const Pool CEIL_W_fmt[2] = {
19298 { instruction , 0 , 0 , 32,
19299 0xfc007fff, 0xa0001b3b, &CEIL_W_S , 0,
19300 CP1_ }, /* CEIL.W.S */
19301 { instruction , 0 , 0 , 32,
19302 0xfc007fff, 0xa0005b3b, &CEIL_W_D , 0,
19303 CP1_ }, /* CEIL.W.D */
19307 static const Pool TRUNC_L_fmt[2] = {
19308 { instruction , 0 , 0 , 32,
19309 0xfc007fff, 0xa000233b, &TRUNC_L_S , 0,
19310 CP1_ }, /* TRUNC.L.S */
19311 { instruction , 0 , 0 , 32,
19312 0xfc007fff, 0xa000633b, &TRUNC_L_D , 0,
19313 CP1_ }, /* TRUNC.L.D */
19317 static const Pool TRUNC_W_fmt[2] = {
19318 { instruction , 0 , 0 , 32,
19319 0xfc007fff, 0xa0002b3b, &TRUNC_W_S , 0,
19320 CP1_ }, /* TRUNC.W.S */
19321 { instruction , 0 , 0 , 32,
19322 0xfc007fff, 0xa0006b3b, &TRUNC_W_D , 0,
19323 CP1_ }, /* TRUNC.W.D */
19327 static const Pool ROUND_L_fmt[2] = {
19328 { instruction , 0 , 0 , 32,
19329 0xfc007fff, 0xa000333b, &ROUND_L_S , 0,
19330 CP1_ }, /* ROUND.L.S */
19331 { instruction , 0 , 0 , 32,
19332 0xfc007fff, 0xa000733b, &ROUND_L_D , 0,
19333 CP1_ }, /* ROUND.L.D */
19337 static const Pool ROUND_W_fmt[2] = {
19338 { instruction , 0 , 0 , 32,
19339 0xfc007fff, 0xa0003b3b, &ROUND_W_S , 0,
19340 CP1_ }, /* ROUND.W.S */
19341 { instruction , 0 , 0 , 32,
19342 0xfc007fff, 0xa0007b3b, &ROUND_W_D , 0,
19343 CP1_ }, /* ROUND.W.D */
19347 static const Pool POOL32Fxf_0[64] = {
19348 { reserved_block , 0 , 0 , 32,
19349 0xfc003fff, 0xa000003b, 0 , 0,
19350 CP1_ }, /* POOL32Fxf_0~*(0) */
19351 { pool , CVT_L_fmt , 2 , 32,
19352 0xfc003fff, 0xa000013b, 0 , 0,
19353 CP1_ }, /* CVT.L.fmt */
19354 { pool , RSQRT_fmt , 2 , 32,
19355 0xfc003fff, 0xa000023b, 0 , 0,
19356 CP1_ }, /* RSQRT.fmt */
19357 { pool , FLOOR_L_fmt , 2 , 32,
19358 0xfc003fff, 0xa000033b, 0 , 0,
19359 CP1_ }, /* FLOOR.L.fmt */
19360 { reserved_block , 0 , 0 , 32,
19361 0xfc003fff, 0xa000043b, 0 , 0,
19362 CP1_ }, /* POOL32Fxf_0~*(4) */
19363 { reserved_block , 0 , 0 , 32,
19364 0xfc003fff, 0xa000053b, 0 , 0,
19365 CP1_ }, /* POOL32Fxf_0~*(5) */
19366 { reserved_block , 0 , 0 , 32,
19367 0xfc003fff, 0xa000063b, 0 , 0,
19368 CP1_ }, /* POOL32Fxf_0~*(6) */
19369 { reserved_block , 0 , 0 , 32,
19370 0xfc003fff, 0xa000073b, 0 , 0,
19371 CP1_ }, /* POOL32Fxf_0~*(7) */
19372 { reserved_block , 0 , 0 , 32,
19373 0xfc003fff, 0xa000083b, 0 , 0,
19374 CP1_ }, /* POOL32Fxf_0~*(8) */
19375 { pool , CVT_W_fmt , 2 , 32,
19376 0xfc003fff, 0xa000093b, 0 , 0,
19377 CP1_ }, /* CVT.W.fmt */
19378 { pool , SQRT_fmt , 2 , 32,
19379 0xfc003fff, 0xa0000a3b, 0 , 0,
19380 CP1_ }, /* SQRT.fmt */
19381 { pool , FLOOR_W_fmt , 2 , 32,
19382 0xfc003fff, 0xa0000b3b, 0 , 0,
19383 CP1_ }, /* FLOOR.W.fmt */
19384 { reserved_block , 0 , 0 , 32,
19385 0xfc003fff, 0xa0000c3b, 0 , 0,
19386 CP1_ }, /* POOL32Fxf_0~*(12) */
19387 { reserved_block , 0 , 0 , 32,
19388 0xfc003fff, 0xa0000d3b, 0 , 0,
19389 CP1_ }, /* POOL32Fxf_0~*(13) */
19390 { reserved_block , 0 , 0 , 32,
19391 0xfc003fff, 0xa0000e3b, 0 , 0,
19392 CP1_ }, /* POOL32Fxf_0~*(14) */
19393 { reserved_block , 0 , 0 , 32,
19394 0xfc003fff, 0xa0000f3b, 0 , 0,
19395 CP1_ }, /* POOL32Fxf_0~*(15) */
19396 { instruction , 0 , 0 , 32,
19397 0xfc003fff, 0xa000103b, &CFC1 , 0,
19398 CP1_ }, /* CFC1 */
19399 { reserved_block , 0 , 0 , 32,
19400 0xfc003fff, 0xa000113b, 0 , 0,
19401 CP1_ }, /* POOL32Fxf_0~*(17) */
19402 { pool , RECIP_fmt , 2 , 32,
19403 0xfc003fff, 0xa000123b, 0 , 0,
19404 CP1_ }, /* RECIP.fmt */
19405 { pool , CEIL_L_fmt , 2 , 32,
19406 0xfc003fff, 0xa000133b, 0 , 0,
19407 CP1_ }, /* CEIL.L.fmt */
19408 { reserved_block , 0 , 0 , 32,
19409 0xfc003fff, 0xa000143b, 0 , 0,
19410 CP1_ }, /* POOL32Fxf_0~*(20) */
19411 { reserved_block , 0 , 0 , 32,
19412 0xfc003fff, 0xa000153b, 0 , 0,
19413 CP1_ }, /* POOL32Fxf_0~*(21) */
19414 { reserved_block , 0 , 0 , 32,
19415 0xfc003fff, 0xa000163b, 0 , 0,
19416 CP1_ }, /* POOL32Fxf_0~*(22) */
19417 { reserved_block , 0 , 0 , 32,
19418 0xfc003fff, 0xa000173b, 0 , 0,
19419 CP1_ }, /* POOL32Fxf_0~*(23) */
19420 { instruction , 0 , 0 , 32,
19421 0xfc003fff, 0xa000183b, &CTC1 , 0,
19422 CP1_ }, /* CTC1 */
19423 { reserved_block , 0 , 0 , 32,
19424 0xfc003fff, 0xa000193b, 0 , 0,
19425 CP1_ }, /* POOL32Fxf_0~*(25) */
19426 { reserved_block , 0 , 0 , 32,
19427 0xfc003fff, 0xa0001a3b, 0 , 0,
19428 CP1_ }, /* POOL32Fxf_0~*(26) */
19429 { pool , CEIL_W_fmt , 2 , 32,
19430 0xfc003fff, 0xa0001b3b, 0 , 0,
19431 CP1_ }, /* CEIL.W.fmt */
19432 { reserved_block , 0 , 0 , 32,
19433 0xfc003fff, 0xa0001c3b, 0 , 0,
19434 CP1_ }, /* POOL32Fxf_0~*(28) */
19435 { reserved_block , 0 , 0 , 32,
19436 0xfc003fff, 0xa0001d3b, 0 , 0,
19437 CP1_ }, /* POOL32Fxf_0~*(29) */
19438 { reserved_block , 0 , 0 , 32,
19439 0xfc003fff, 0xa0001e3b, 0 , 0,
19440 CP1_ }, /* POOL32Fxf_0~*(30) */
19441 { reserved_block , 0 , 0 , 32,
19442 0xfc003fff, 0xa0001f3b, 0 , 0,
19443 CP1_ }, /* POOL32Fxf_0~*(31) */
19444 { instruction , 0 , 0 , 32,
19445 0xfc003fff, 0xa000203b, &MFC1 , 0,
19446 CP1_ }, /* MFC1 */
19447 { instruction , 0 , 0 , 32,
19448 0xfc003fff, 0xa000213b, &CVT_S_PL , 0,
19449 CP1_ }, /* CVT.S.PL */
19450 { reserved_block , 0 , 0 , 32,
19451 0xfc003fff, 0xa000223b, 0 , 0,
19452 CP1_ }, /* POOL32Fxf_0~*(34) */
19453 { pool , TRUNC_L_fmt , 2 , 32,
19454 0xfc003fff, 0xa000233b, 0 , 0,
19455 CP1_ }, /* TRUNC.L.fmt */
19456 { instruction , 0 , 0 , 32,
19457 0xfc003fff, 0xa000243b, &DMFC1 , 0,
19458 CP1_ | MIPS64_ }, /* DMFC1 */
19459 { reserved_block , 0 , 0 , 32,
19460 0xfc003fff, 0xa000253b, 0 , 0,
19461 CP1_ }, /* POOL32Fxf_0~*(37) */
19462 { reserved_block , 0 , 0 , 32,
19463 0xfc003fff, 0xa000263b, 0 , 0,
19464 CP1_ }, /* POOL32Fxf_0~*(38) */
19465 { reserved_block , 0 , 0 , 32,
19466 0xfc003fff, 0xa000273b, 0 , 0,
19467 CP1_ }, /* POOL32Fxf_0~*(39) */
19468 { instruction , 0 , 0 , 32,
19469 0xfc003fff, 0xa000283b, &MTC1 , 0,
19470 CP1_ }, /* MTC1 */
19471 { instruction , 0 , 0 , 32,
19472 0xfc003fff, 0xa000293b, &CVT_S_PU , 0,
19473 CP1_ }, /* CVT.S.PU */
19474 { reserved_block , 0 , 0 , 32,
19475 0xfc003fff, 0xa0002a3b, 0 , 0,
19476 CP1_ }, /* POOL32Fxf_0~*(42) */
19477 { pool , TRUNC_W_fmt , 2 , 32,
19478 0xfc003fff, 0xa0002b3b, 0 , 0,
19479 CP1_ }, /* TRUNC.W.fmt */
19480 { instruction , 0 , 0 , 32,
19481 0xfc003fff, 0xa0002c3b, &DMTC1 , 0,
19482 CP1_ | MIPS64_ }, /* DMTC1 */
19483 { reserved_block , 0 , 0 , 32,
19484 0xfc003fff, 0xa0002d3b, 0 , 0,
19485 CP1_ }, /* POOL32Fxf_0~*(45) */
19486 { reserved_block , 0 , 0 , 32,
19487 0xfc003fff, 0xa0002e3b, 0 , 0,
19488 CP1_ }, /* POOL32Fxf_0~*(46) */
19489 { reserved_block , 0 , 0 , 32,
19490 0xfc003fff, 0xa0002f3b, 0 , 0,
19491 CP1_ }, /* POOL32Fxf_0~*(47) */
19492 { instruction , 0 , 0 , 32,
19493 0xfc003fff, 0xa000303b, &MFHC1 , 0,
19494 CP1_ }, /* MFHC1 */
19495 { reserved_block , 0 , 0 , 32,
19496 0xfc003fff, 0xa000313b, 0 , 0,
19497 CP1_ }, /* POOL32Fxf_0~*(49) */
19498 { reserved_block , 0 , 0 , 32,
19499 0xfc003fff, 0xa000323b, 0 , 0,
19500 CP1_ }, /* POOL32Fxf_0~*(50) */
19501 { pool , ROUND_L_fmt , 2 , 32,
19502 0xfc003fff, 0xa000333b, 0 , 0,
19503 CP1_ }, /* ROUND.L.fmt */
19504 { reserved_block , 0 , 0 , 32,
19505 0xfc003fff, 0xa000343b, 0 , 0,
19506 CP1_ }, /* POOL32Fxf_0~*(52) */
19507 { reserved_block , 0 , 0 , 32,
19508 0xfc003fff, 0xa000353b, 0 , 0,
19509 CP1_ }, /* POOL32Fxf_0~*(53) */
19510 { reserved_block , 0 , 0 , 32,
19511 0xfc003fff, 0xa000363b, 0 , 0,
19512 CP1_ }, /* POOL32Fxf_0~*(54) */
19513 { reserved_block , 0 , 0 , 32,
19514 0xfc003fff, 0xa000373b, 0 , 0,
19515 CP1_ }, /* POOL32Fxf_0~*(55) */
19516 { instruction , 0 , 0 , 32,
19517 0xfc003fff, 0xa000383b, &MTHC1 , 0,
19518 CP1_ }, /* MTHC1 */
19519 { reserved_block , 0 , 0 , 32,
19520 0xfc003fff, 0xa000393b, 0 , 0,
19521 CP1_ }, /* POOL32Fxf_0~*(57) */
19522 { reserved_block , 0 , 0 , 32,
19523 0xfc003fff, 0xa0003a3b, 0 , 0,
19524 CP1_ }, /* POOL32Fxf_0~*(58) */
19525 { pool , ROUND_W_fmt , 2 , 32,
19526 0xfc003fff, 0xa0003b3b, 0 , 0,
19527 CP1_ }, /* ROUND.W.fmt */
19528 { reserved_block , 0 , 0 , 32,
19529 0xfc003fff, 0xa0003c3b, 0 , 0,
19530 CP1_ }, /* POOL32Fxf_0~*(60) */
19531 { reserved_block , 0 , 0 , 32,
19532 0xfc003fff, 0xa0003d3b, 0 , 0,
19533 CP1_ }, /* POOL32Fxf_0~*(61) */
19534 { reserved_block , 0 , 0 , 32,
19535 0xfc003fff, 0xa0003e3b, 0 , 0,
19536 CP1_ }, /* POOL32Fxf_0~*(62) */
19537 { reserved_block , 0 , 0 , 32,
19538 0xfc003fff, 0xa0003f3b, 0 , 0,
19539 CP1_ }, /* POOL32Fxf_0~*(63) */
19543 static const Pool MOV_fmt[4] = {
19544 { instruction , 0 , 0 , 32,
19545 0xfc007fff, 0xa000007b, &MOV_S , 0,
19546 CP1_ }, /* MOV.S */
19547 { instruction , 0 , 0 , 32,
19548 0xfc007fff, 0xa000207b, &MOV_D , 0,
19549 CP1_ }, /* MOV.D */
19550 { reserved_block , 0 , 0 , 32,
19551 0xfc007fff, 0xa000407b, 0 , 0,
19552 CP1_ }, /* MOV.fmt~*(2) */
19553 { reserved_block , 0 , 0 , 32,
19554 0xfc007fff, 0xa000607b, 0 , 0,
19555 CP1_ }, /* MOV.fmt~*(3) */
19559 static const Pool ABS_fmt[4] = {
19560 { instruction , 0 , 0 , 32,
19561 0xfc007fff, 0xa000037b, &ABS_S , 0,
19562 CP1_ }, /* ABS.S */
19563 { instruction , 0 , 0 , 32,
19564 0xfc007fff, 0xa000237b, &ABS_D , 0,
19565 CP1_ }, /* ABS.D */
19566 { reserved_block , 0 , 0 , 32,
19567 0xfc007fff, 0xa000437b, 0 , 0,
19568 CP1_ }, /* ABS.fmt~*(2) */
19569 { reserved_block , 0 , 0 , 32,
19570 0xfc007fff, 0xa000637b, 0 , 0,
19571 CP1_ }, /* ABS.fmt~*(3) */
19575 static const Pool NEG_fmt[4] = {
19576 { instruction , 0 , 0 , 32,
19577 0xfc007fff, 0xa0000b7b, &NEG_S , 0,
19578 CP1_ }, /* NEG.S */
19579 { instruction , 0 , 0 , 32,
19580 0xfc007fff, 0xa0002b7b, &NEG_D , 0,
19581 CP1_ }, /* NEG.D */
19582 { reserved_block , 0 , 0 , 32,
19583 0xfc007fff, 0xa0004b7b, 0 , 0,
19584 CP1_ }, /* NEG.fmt~*(2) */
19585 { reserved_block , 0 , 0 , 32,
19586 0xfc007fff, 0xa0006b7b, 0 , 0,
19587 CP1_ }, /* NEG.fmt~*(3) */
19591 static const Pool CVT_D_fmt[4] = {
19592 { instruction , 0 , 0 , 32,
19593 0xfc007fff, 0xa000137b, &CVT_D_S , 0,
19594 CP1_ }, /* CVT.D.S */
19595 { instruction , 0 , 0 , 32,
19596 0xfc007fff, 0xa000337b, &CVT_D_W , 0,
19597 CP1_ }, /* CVT.D.W */
19598 { instruction , 0 , 0 , 32,
19599 0xfc007fff, 0xa000537b, &CVT_D_L , 0,
19600 CP1_ }, /* CVT.D.L */
19601 { reserved_block , 0 , 0 , 32,
19602 0xfc007fff, 0xa000737b, 0 , 0,
19603 CP1_ }, /* CVT.D.fmt~*(3) */
19607 static const Pool CVT_S_fmt[4] = {
19608 { instruction , 0 , 0 , 32,
19609 0xfc007fff, 0xa0001b7b, &CVT_S_D , 0,
19610 CP1_ }, /* CVT.S.D */
19611 { instruction , 0 , 0 , 32,
19612 0xfc007fff, 0xa0003b7b, &CVT_S_W , 0,
19613 CP1_ }, /* CVT.S.W */
19614 { instruction , 0 , 0 , 32,
19615 0xfc007fff, 0xa0005b7b, &CVT_S_L , 0,
19616 CP1_ }, /* CVT.S.L */
19617 { reserved_block , 0 , 0 , 32,
19618 0xfc007fff, 0xa0007b7b, 0 , 0,
19619 CP1_ }, /* CVT.S.fmt~*(3) */
19623 static const Pool POOL32Fxf_1[32] = {
19624 { pool , MOV_fmt , 4 , 32,
19625 0xfc001fff, 0xa000007b, 0 , 0,
19626 CP1_ }, /* MOV.fmt */
19627 { reserved_block , 0 , 0 , 32,
19628 0xfc001fff, 0xa000017b, 0 , 0,
19629 CP1_ }, /* POOL32Fxf_1~*(1) */
19630 { reserved_block , 0 , 0 , 32,
19631 0xfc001fff, 0xa000027b, 0 , 0,
19632 CP1_ }, /* POOL32Fxf_1~*(2) */
19633 { pool , ABS_fmt , 4 , 32,
19634 0xfc001fff, 0xa000037b, 0 , 0,
19635 CP1_ }, /* ABS.fmt */
19636 { reserved_block , 0 , 0 , 32,
19637 0xfc001fff, 0xa000047b, 0 , 0,
19638 CP1_ }, /* POOL32Fxf_1~*(4) */
19639 { reserved_block , 0 , 0 , 32,
19640 0xfc001fff, 0xa000057b, 0 , 0,
19641 CP1_ }, /* POOL32Fxf_1~*(5) */
19642 { reserved_block , 0 , 0 , 32,
19643 0xfc001fff, 0xa000067b, 0 , 0,
19644 CP1_ }, /* POOL32Fxf_1~*(6) */
19645 { reserved_block , 0 , 0 , 32,
19646 0xfc001fff, 0xa000077b, 0 , 0,
19647 CP1_ }, /* POOL32Fxf_1~*(7) */
19648 { reserved_block , 0 , 0 , 32,
19649 0xfc001fff, 0xa000087b, 0 , 0,
19650 CP1_ }, /* POOL32Fxf_1~*(8) */
19651 { reserved_block , 0 , 0 , 32,
19652 0xfc001fff, 0xa000097b, 0 , 0,
19653 CP1_ }, /* POOL32Fxf_1~*(9) */
19654 { reserved_block , 0 , 0 , 32,
19655 0xfc001fff, 0xa0000a7b, 0 , 0,
19656 CP1_ }, /* POOL32Fxf_1~*(10) */
19657 { pool , NEG_fmt , 4 , 32,
19658 0xfc001fff, 0xa0000b7b, 0 , 0,
19659 CP1_ }, /* NEG.fmt */
19660 { reserved_block , 0 , 0 , 32,
19661 0xfc001fff, 0xa0000c7b, 0 , 0,
19662 CP1_ }, /* POOL32Fxf_1~*(12) */
19663 { reserved_block , 0 , 0 , 32,
19664 0xfc001fff, 0xa0000d7b, 0 , 0,
19665 CP1_ }, /* POOL32Fxf_1~*(13) */
19666 { reserved_block , 0 , 0 , 32,
19667 0xfc001fff, 0xa0000e7b, 0 , 0,
19668 CP1_ }, /* POOL32Fxf_1~*(14) */
19669 { reserved_block , 0 , 0 , 32,
19670 0xfc001fff, 0xa0000f7b, 0 , 0,
19671 CP1_ }, /* POOL32Fxf_1~*(15) */
19672 { reserved_block , 0 , 0 , 32,
19673 0xfc001fff, 0xa000107b, 0 , 0,
19674 CP1_ }, /* POOL32Fxf_1~*(16) */
19675 { reserved_block , 0 , 0 , 32,
19676 0xfc001fff, 0xa000117b, 0 , 0,
19677 CP1_ }, /* POOL32Fxf_1~*(17) */
19678 { reserved_block , 0 , 0 , 32,
19679 0xfc001fff, 0xa000127b, 0 , 0,
19680 CP1_ }, /* POOL32Fxf_1~*(18) */
19681 { pool , CVT_D_fmt , 4 , 32,
19682 0xfc001fff, 0xa000137b, 0 , 0,
19683 CP1_ }, /* CVT.D.fmt */
19684 { reserved_block , 0 , 0 , 32,
19685 0xfc001fff, 0xa000147b, 0 , 0,
19686 CP1_ }, /* POOL32Fxf_1~*(20) */
19687 { reserved_block , 0 , 0 , 32,
19688 0xfc001fff, 0xa000157b, 0 , 0,
19689 CP1_ }, /* POOL32Fxf_1~*(21) */
19690 { reserved_block , 0 , 0 , 32,
19691 0xfc001fff, 0xa000167b, 0 , 0,
19692 CP1_ }, /* POOL32Fxf_1~*(22) */
19693 { reserved_block , 0 , 0 , 32,
19694 0xfc001fff, 0xa000177b, 0 , 0,
19695 CP1_ }, /* POOL32Fxf_1~*(23) */
19696 { reserved_block , 0 , 0 , 32,
19697 0xfc001fff, 0xa000187b, 0 , 0,
19698 CP1_ }, /* POOL32Fxf_1~*(24) */
19699 { reserved_block , 0 , 0 , 32,
19700 0xfc001fff, 0xa000197b, 0 , 0,
19701 CP1_ }, /* POOL32Fxf_1~*(25) */
19702 { reserved_block , 0 , 0 , 32,
19703 0xfc001fff, 0xa0001a7b, 0 , 0,
19704 CP1_ }, /* POOL32Fxf_1~*(26) */
19705 { pool , CVT_S_fmt , 4 , 32,
19706 0xfc001fff, 0xa0001b7b, 0 , 0,
19707 CP1_ }, /* CVT.S.fmt */
19708 { reserved_block , 0 , 0 , 32,
19709 0xfc001fff, 0xa0001c7b, 0 , 0,
19710 CP1_ }, /* POOL32Fxf_1~*(28) */
19711 { reserved_block , 0 , 0 , 32,
19712 0xfc001fff, 0xa0001d7b, 0 , 0,
19713 CP1_ }, /* POOL32Fxf_1~*(29) */
19714 { reserved_block , 0 , 0 , 32,
19715 0xfc001fff, 0xa0001e7b, 0 , 0,
19716 CP1_ }, /* POOL32Fxf_1~*(30) */
19717 { reserved_block , 0 , 0 , 32,
19718 0xfc001fff, 0xa0001f7b, 0 , 0,
19719 CP1_ }, /* POOL32Fxf_1~*(31) */
19723 static const Pool POOL32Fxf[4] = {
19724 { pool , POOL32Fxf_0 , 64 , 32,
19725 0xfc0000ff, 0xa000003b, 0 , 0,
19726 CP1_ }, /* POOL32Fxf_0 */
19727 { pool , POOL32Fxf_1 , 32 , 32,
19728 0xfc0000ff, 0xa000007b, 0 , 0,
19729 CP1_ }, /* POOL32Fxf_1 */
19730 { reserved_block , 0 , 0 , 32,
19731 0xfc0000ff, 0xa00000bb, 0 , 0,
19732 CP1_ }, /* POOL32Fxf~*(2) */
19733 { reserved_block , 0 , 0 , 32,
19734 0xfc0000ff, 0xa00000fb, 0 , 0,
19735 CP1_ }, /* POOL32Fxf~*(3) */
19739 static const Pool POOL32F_3[8] = {
19740 { pool , MIN_fmt , 2 , 32,
19741 0xfc00003f, 0xa0000003, 0 , 0,
19742 CP1_ }, /* MIN.fmt */
19743 { pool , MAX_fmt , 2 , 32,
19744 0xfc00003f, 0xa000000b, 0 , 0,
19745 CP1_ }, /* MAX.fmt */
19746 { reserved_block , 0 , 0 , 32,
19747 0xfc00003f, 0xa0000013, 0 , 0,
19748 CP1_ }, /* POOL32F_3~*(2) */
19749 { reserved_block , 0 , 0 , 32,
19750 0xfc00003f, 0xa000001b, 0 , 0,
19751 CP1_ }, /* POOL32F_3~*(3) */
19752 { pool , MINA_fmt , 2 , 32,
19753 0xfc00003f, 0xa0000023, 0 , 0,
19754 CP1_ }, /* MINA.fmt */
19755 { pool , MAXA_fmt , 2 , 32,
19756 0xfc00003f, 0xa000002b, 0 , 0,
19757 CP1_ }, /* MAXA.fmt */
19758 { reserved_block , 0 , 0 , 32,
19759 0xfc00003f, 0xa0000033, 0 , 0,
19760 CP1_ }, /* POOL32F_3~*(6) */
19761 { pool , POOL32Fxf , 4 , 32,
19762 0xfc00003f, 0xa000003b, 0 , 0,
19763 CP1_ }, /* POOL32Fxf */
19767 static const Pool CMP_condn_S[32] = {
19768 { instruction , 0 , 0 , 32,
19769 0xfc0007ff, 0xa0000005, &CMP_AF_S , 0,
19770 CP1_ }, /* CMP.AF.S */
19771 { instruction , 0 , 0 , 32,
19772 0xfc0007ff, 0xa0000045, &CMP_UN_S , 0,
19773 CP1_ }, /* CMP.UN.S */
19774 { instruction , 0 , 0 , 32,
19775 0xfc0007ff, 0xa0000085, &CMP_EQ_S , 0,
19776 CP1_ }, /* CMP.EQ.S */
19777 { instruction , 0 , 0 , 32,
19778 0xfc0007ff, 0xa00000c5, &CMP_UEQ_S , 0,
19779 CP1_ }, /* CMP.UEQ.S */
19780 { instruction , 0 , 0 , 32,
19781 0xfc0007ff, 0xa0000105, &CMP_LT_S , 0,
19782 CP1_ }, /* CMP.LT.S */
19783 { instruction , 0 , 0 , 32,
19784 0xfc0007ff, 0xa0000145, &CMP_ULT_S , 0,
19785 CP1_ }, /* CMP.ULT.S */
19786 { instruction , 0 , 0 , 32,
19787 0xfc0007ff, 0xa0000185, &CMP_LE_S , 0,
19788 CP1_ }, /* CMP.LE.S */
19789 { instruction , 0 , 0 , 32,
19790 0xfc0007ff, 0xa00001c5, &CMP_ULE_S , 0,
19791 CP1_ }, /* CMP.ULE.S */
19792 { instruction , 0 , 0 , 32,
19793 0xfc0007ff, 0xa0000205, &CMP_SAF_S , 0,
19794 CP1_ }, /* CMP.SAF.S */
19795 { instruction , 0 , 0 , 32,
19796 0xfc0007ff, 0xa0000245, &CMP_SUN_S , 0,
19797 CP1_ }, /* CMP.SUN.S */
19798 { instruction , 0 , 0 , 32,
19799 0xfc0007ff, 0xa0000285, &CMP_SEQ_S , 0,
19800 CP1_ }, /* CMP.SEQ.S */
19801 { instruction , 0 , 0 , 32,
19802 0xfc0007ff, 0xa00002c5, &CMP_SUEQ_S , 0,
19803 CP1_ }, /* CMP.SUEQ.S */
19804 { instruction , 0 , 0 , 32,
19805 0xfc0007ff, 0xa0000305, &CMP_SLT_S , 0,
19806 CP1_ }, /* CMP.SLT.S */
19807 { instruction , 0 , 0 , 32,
19808 0xfc0007ff, 0xa0000345, &CMP_SULT_S , 0,
19809 CP1_ }, /* CMP.SULT.S */
19810 { instruction , 0 , 0 , 32,
19811 0xfc0007ff, 0xa0000385, &CMP_SLE_S , 0,
19812 CP1_ }, /* CMP.SLE.S */
19813 { instruction , 0 , 0 , 32,
19814 0xfc0007ff, 0xa00003c5, &CMP_SULE_S , 0,
19815 CP1_ }, /* CMP.SULE.S */
19816 { reserved_block , 0 , 0 , 32,
19817 0xfc0007ff, 0xa0000405, 0 , 0,
19818 CP1_ }, /* CMP.condn.S~*(16) */
19819 { instruction , 0 , 0 , 32,
19820 0xfc0007ff, 0xa0000445, &CMP_OR_S , 0,
19821 CP1_ }, /* CMP.OR.S */
19822 { instruction , 0 , 0 , 32,
19823 0xfc0007ff, 0xa0000485, &CMP_UNE_S , 0,
19824 CP1_ }, /* CMP.UNE.S */
19825 { instruction , 0 , 0 , 32,
19826 0xfc0007ff, 0xa00004c5, &CMP_NE_S , 0,
19827 CP1_ }, /* CMP.NE.S */
19828 { reserved_block , 0 , 0 , 32,
19829 0xfc0007ff, 0xa0000505, 0 , 0,
19830 CP1_ }, /* CMP.condn.S~*(20) */
19831 { reserved_block , 0 , 0 , 32,
19832 0xfc0007ff, 0xa0000545, 0 , 0,
19833 CP1_ }, /* CMP.condn.S~*(21) */
19834 { reserved_block , 0 , 0 , 32,
19835 0xfc0007ff, 0xa0000585, 0 , 0,
19836 CP1_ }, /* CMP.condn.S~*(22) */
19837 { reserved_block , 0 , 0 , 32,
19838 0xfc0007ff, 0xa00005c5, 0 , 0,
19839 CP1_ }, /* CMP.condn.S~*(23) */
19840 { reserved_block , 0 , 0 , 32,
19841 0xfc0007ff, 0xa0000605, 0 , 0,
19842 CP1_ }, /* CMP.condn.S~*(24) */
19843 { instruction , 0 , 0 , 32,
19844 0xfc0007ff, 0xa0000645, &CMP_SOR_S , 0,
19845 CP1_ }, /* CMP.SOR.S */
19846 { instruction , 0 , 0 , 32,
19847 0xfc0007ff, 0xa0000685, &CMP_SUNE_S , 0,
19848 CP1_ }, /* CMP.SUNE.S */
19849 { instruction , 0 , 0 , 32,
19850 0xfc0007ff, 0xa00006c5, &CMP_SNE_S , 0,
19851 CP1_ }, /* CMP.SNE.S */
19852 { reserved_block , 0 , 0 , 32,
19853 0xfc0007ff, 0xa0000705, 0 , 0,
19854 CP1_ }, /* CMP.condn.S~*(28) */
19855 { reserved_block , 0 , 0 , 32,
19856 0xfc0007ff, 0xa0000745, 0 , 0,
19857 CP1_ }, /* CMP.condn.S~*(29) */
19858 { reserved_block , 0 , 0 , 32,
19859 0xfc0007ff, 0xa0000785, 0 , 0,
19860 CP1_ }, /* CMP.condn.S~*(30) */
19861 { reserved_block , 0 , 0 , 32,
19862 0xfc0007ff, 0xa00007c5, 0 , 0,
19863 CP1_ }, /* CMP.condn.S~*(31) */
19867 static const Pool CMP_condn_D[32] = {
19868 { instruction , 0 , 0 , 32,
19869 0xfc0007ff, 0xa0000015, &CMP_AF_D , 0,
19870 CP1_ }, /* CMP.AF.D */
19871 { instruction , 0 , 0 , 32,
19872 0xfc0007ff, 0xa0000055, &CMP_UN_D , 0,
19873 CP1_ }, /* CMP.UN.D */
19874 { instruction , 0 , 0 , 32,
19875 0xfc0007ff, 0xa0000095, &CMP_EQ_D , 0,
19876 CP1_ }, /* CMP.EQ.D */
19877 { instruction , 0 , 0 , 32,
19878 0xfc0007ff, 0xa00000d5, &CMP_UEQ_D , 0,
19879 CP1_ }, /* CMP.UEQ.D */
19880 { instruction , 0 , 0 , 32,
19881 0xfc0007ff, 0xa0000115, &CMP_LT_D , 0,
19882 CP1_ }, /* CMP.LT.D */
19883 { instruction , 0 , 0 , 32,
19884 0xfc0007ff, 0xa0000155, &CMP_ULT_D , 0,
19885 CP1_ }, /* CMP.ULT.D */
19886 { instruction , 0 , 0 , 32,
19887 0xfc0007ff, 0xa0000195, &CMP_LE_D , 0,
19888 CP1_ }, /* CMP.LE.D */
19889 { instruction , 0 , 0 , 32,
19890 0xfc0007ff, 0xa00001d5, &CMP_ULE_D , 0,
19891 CP1_ }, /* CMP.ULE.D */
19892 { instruction , 0 , 0 , 32,
19893 0xfc0007ff, 0xa0000215, &CMP_SAF_D , 0,
19894 CP1_ }, /* CMP.SAF.D */
19895 { instruction , 0 , 0 , 32,
19896 0xfc0007ff, 0xa0000255, &CMP_SUN_D , 0,
19897 CP1_ }, /* CMP.SUN.D */
19898 { instruction , 0 , 0 , 32,
19899 0xfc0007ff, 0xa0000295, &CMP_SEQ_D , 0,
19900 CP1_ }, /* CMP.SEQ.D */
19901 { instruction , 0 , 0 , 32,
19902 0xfc0007ff, 0xa00002d5, &CMP_SUEQ_D , 0,
19903 CP1_ }, /* CMP.SUEQ.D */
19904 { instruction , 0 , 0 , 32,
19905 0xfc0007ff, 0xa0000315, &CMP_SLT_D , 0,
19906 CP1_ }, /* CMP.SLT.D */
19907 { instruction , 0 , 0 , 32,
19908 0xfc0007ff, 0xa0000355, &CMP_SULT_D , 0,
19909 CP1_ }, /* CMP.SULT.D */
19910 { instruction , 0 , 0 , 32,
19911 0xfc0007ff, 0xa0000395, &CMP_SLE_D , 0,
19912 CP1_ }, /* CMP.SLE.D */
19913 { instruction , 0 , 0 , 32,
19914 0xfc0007ff, 0xa00003d5, &CMP_SULE_D , 0,
19915 CP1_ }, /* CMP.SULE.D */
19916 { reserved_block , 0 , 0 , 32,
19917 0xfc0007ff, 0xa0000415, 0 , 0,
19918 CP1_ }, /* CMP.condn.D~*(16) */
19919 { instruction , 0 , 0 , 32,
19920 0xfc0007ff, 0xa0000455, &CMP_OR_D , 0,
19921 CP1_ }, /* CMP.OR.D */
19922 { instruction , 0 , 0 , 32,
19923 0xfc0007ff, 0xa0000495, &CMP_UNE_D , 0,
19924 CP1_ }, /* CMP.UNE.D */
19925 { instruction , 0 , 0 , 32,
19926 0xfc0007ff, 0xa00004d5, &CMP_NE_D , 0,
19927 CP1_ }, /* CMP.NE.D */
19928 { reserved_block , 0 , 0 , 32,
19929 0xfc0007ff, 0xa0000515, 0 , 0,
19930 CP1_ }, /* CMP.condn.D~*(20) */
19931 { reserved_block , 0 , 0 , 32,
19932 0xfc0007ff, 0xa0000555, 0 , 0,
19933 CP1_ }, /* CMP.condn.D~*(21) */
19934 { reserved_block , 0 , 0 , 32,
19935 0xfc0007ff, 0xa0000595, 0 , 0,
19936 CP1_ }, /* CMP.condn.D~*(22) */
19937 { reserved_block , 0 , 0 , 32,
19938 0xfc0007ff, 0xa00005d5, 0 , 0,
19939 CP1_ }, /* CMP.condn.D~*(23) */
19940 { reserved_block , 0 , 0 , 32,
19941 0xfc0007ff, 0xa0000615, 0 , 0,
19942 CP1_ }, /* CMP.condn.D~*(24) */
19943 { instruction , 0 , 0 , 32,
19944 0xfc0007ff, 0xa0000655, &CMP_SOR_D , 0,
19945 CP1_ }, /* CMP.SOR.D */
19946 { instruction , 0 , 0 , 32,
19947 0xfc0007ff, 0xa0000695, &CMP_SUNE_D , 0,
19948 CP1_ }, /* CMP.SUNE.D */
19949 { instruction , 0 , 0 , 32,
19950 0xfc0007ff, 0xa00006d5, &CMP_SNE_D , 0,
19951 CP1_ }, /* CMP.SNE.D */
19952 { reserved_block , 0 , 0 , 32,
19953 0xfc0007ff, 0xa0000715, 0 , 0,
19954 CP1_ }, /* CMP.condn.D~*(28) */
19955 { reserved_block , 0 , 0 , 32,
19956 0xfc0007ff, 0xa0000755, 0 , 0,
19957 CP1_ }, /* CMP.condn.D~*(29) */
19958 { reserved_block , 0 , 0 , 32,
19959 0xfc0007ff, 0xa0000795, 0 , 0,
19960 CP1_ }, /* CMP.condn.D~*(30) */
19961 { reserved_block , 0 , 0 , 32,
19962 0xfc0007ff, 0xa00007d5, 0 , 0,
19963 CP1_ }, /* CMP.condn.D~*(31) */
19967 static const Pool POOL32F_5[8] = {
19968 { pool , CMP_condn_S , 32 , 32,
19969 0xfc00003f, 0xa0000005, 0 , 0,
19970 CP1_ }, /* CMP.condn.S */
19971 { reserved_block , 0 , 0 , 32,
19972 0xfc00003f, 0xa000000d, 0 , 0,
19973 CP1_ }, /* POOL32F_5~*(1) */
19974 { pool , CMP_condn_D , 32 , 32,
19975 0xfc00003f, 0xa0000015, 0 , 0,
19976 CP1_ }, /* CMP.condn.D */
19977 { reserved_block , 0 , 0 , 32,
19978 0xfc00003f, 0xa000001d, 0 , 0,
19979 CP1_ }, /* POOL32F_5~*(3) */
19980 { reserved_block , 0 , 0 , 32,
19981 0xfc00003f, 0xa0000025, 0 , 0,
19982 CP1_ }, /* POOL32F_5~*(4) */
19983 { reserved_block , 0 , 0 , 32,
19984 0xfc00003f, 0xa000002d, 0 , 0,
19985 CP1_ }, /* POOL32F_5~*(5) */
19986 { reserved_block , 0 , 0 , 32,
19987 0xfc00003f, 0xa0000035, 0 , 0,
19988 CP1_ }, /* POOL32F_5~*(6) */
19989 { reserved_block , 0 , 0 , 32,
19990 0xfc00003f, 0xa000003d, 0 , 0,
19991 CP1_ }, /* POOL32F_5~*(7) */
19995 static const Pool POOL32F[8] = {
19996 { pool , POOL32F_0 , 64 , 32,
19997 0xfc000007, 0xa0000000, 0 , 0,
19998 CP1_ }, /* POOL32F_0 */
19999 { reserved_block , 0 , 0 , 32,
20000 0xfc000007, 0xa0000001, 0 , 0,
20001 CP1_ }, /* POOL32F~*(1) */
20002 { reserved_block , 0 , 0 , 32,
20003 0xfc000007, 0xa0000002, 0 , 0,
20004 CP1_ }, /* POOL32F~*(2) */
20005 { pool , POOL32F_3 , 8 , 32,
20006 0xfc000007, 0xa0000003, 0 , 0,
20007 CP1_ }, /* POOL32F_3 */
20008 { reserved_block , 0 , 0 , 32,
20009 0xfc000007, 0xa0000004, 0 , 0,
20010 CP1_ }, /* POOL32F~*(4) */
20011 { pool , POOL32F_5 , 8 , 32,
20012 0xfc000007, 0xa0000005, 0 , 0,
20013 CP1_ }, /* POOL32F_5 */
20014 { reserved_block , 0 , 0 , 32,
20015 0xfc000007, 0xa0000006, 0 , 0,
20016 CP1_ }, /* POOL32F~*(6) */
20017 { reserved_block , 0 , 0 , 32,
20018 0xfc000007, 0xa0000007, 0 , 0,
20019 CP1_ }, /* POOL32F~*(7) */
20023 static const Pool POOL32S_0[64] = {
20024 { reserved_block , 0 , 0 , 32,
20025 0xfc0001ff, 0xc0000000, 0 , 0,
20026 0x0 }, /* POOL32S_0~*(0) */
20027 { instruction , 0 , 0 , 32,
20028 0xfc0001ff, 0xc0000008, &DLSA , 0,
20029 MIPS64_ }, /* DLSA */
20030 { instruction , 0 , 0 , 32,
20031 0xfc0001ff, 0xc0000010, &DSLLV , 0,
20032 MIPS64_ }, /* DSLLV */
20033 { instruction , 0 , 0 , 32,
20034 0xfc0001ff, 0xc0000018, &DMUL , 0,
20035 MIPS64_ }, /* DMUL */
20036 { reserved_block , 0 , 0 , 32,
20037 0xfc0001ff, 0xc0000020, 0 , 0,
20038 0x0 }, /* POOL32S_0~*(4) */
20039 { reserved_block , 0 , 0 , 32,
20040 0xfc0001ff, 0xc0000028, 0 , 0,
20041 0x0 }, /* POOL32S_0~*(5) */
20042 { reserved_block , 0 , 0 , 32,
20043 0xfc0001ff, 0xc0000030, 0 , 0,
20044 0x0 }, /* POOL32S_0~*(6) */
20045 { reserved_block , 0 , 0 , 32,
20046 0xfc0001ff, 0xc0000038, 0 , 0,
20047 0x0 }, /* POOL32S_0~*(7) */
20048 { reserved_block , 0 , 0 , 32,
20049 0xfc0001ff, 0xc0000040, 0 , 0,
20050 0x0 }, /* POOL32S_0~*(8) */
20051 { reserved_block , 0 , 0 , 32,
20052 0xfc0001ff, 0xc0000048, 0 , 0,
20053 0x0 }, /* POOL32S_0~*(9) */
20054 { instruction , 0 , 0 , 32,
20055 0xfc0001ff, 0xc0000050, &DSRLV , 0,
20056 MIPS64_ }, /* DSRLV */
20057 { instruction , 0 , 0 , 32,
20058 0xfc0001ff, 0xc0000058, &DMUH , 0,
20059 MIPS64_ }, /* DMUH */
20060 { reserved_block , 0 , 0 , 32,
20061 0xfc0001ff, 0xc0000060, 0 , 0,
20062 0x0 }, /* POOL32S_0~*(12) */
20063 { reserved_block , 0 , 0 , 32,
20064 0xfc0001ff, 0xc0000068, 0 , 0,
20065 0x0 }, /* POOL32S_0~*(13) */
20066 { reserved_block , 0 , 0 , 32,
20067 0xfc0001ff, 0xc0000070, 0 , 0,
20068 0x0 }, /* POOL32S_0~*(14) */
20069 { reserved_block , 0 , 0 , 32,
20070 0xfc0001ff, 0xc0000078, 0 , 0,
20071 0x0 }, /* POOL32S_0~*(15) */
20072 { reserved_block , 0 , 0 , 32,
20073 0xfc0001ff, 0xc0000080, 0 , 0,
20074 0x0 }, /* POOL32S_0~*(16) */
20075 { reserved_block , 0 , 0 , 32,
20076 0xfc0001ff, 0xc0000088, 0 , 0,
20077 0x0 }, /* POOL32S_0~*(17) */
20078 { instruction , 0 , 0 , 32,
20079 0xfc0001ff, 0xc0000090, &DSRAV , 0,
20080 MIPS64_ }, /* DSRAV */
20081 { instruction , 0 , 0 , 32,
20082 0xfc0001ff, 0xc0000098, &DMULU , 0,
20083 MIPS64_ }, /* DMULU */
20084 { reserved_block , 0 , 0 , 32,
20085 0xfc0001ff, 0xc00000a0, 0 , 0,
20086 0x0 }, /* POOL32S_0~*(20) */
20087 { reserved_block , 0 , 0 , 32,
20088 0xfc0001ff, 0xc00000a8, 0 , 0,
20089 0x0 }, /* POOL32S_0~*(21) */
20090 { reserved_block , 0 , 0 , 32,
20091 0xfc0001ff, 0xc00000b0, 0 , 0,
20092 0x0 }, /* POOL32S_0~*(22) */
20093 { reserved_block , 0 , 0 , 32,
20094 0xfc0001ff, 0xc00000b8, 0 , 0,
20095 0x0 }, /* POOL32S_0~*(23) */
20096 { reserved_block , 0 , 0 , 32,
20097 0xfc0001ff, 0xc00000c0, 0 , 0,
20098 0x0 }, /* POOL32S_0~*(24) */
20099 { reserved_block , 0 , 0 , 32,
20100 0xfc0001ff, 0xc00000c8, 0 , 0,
20101 0x0 }, /* POOL32S_0~*(25) */
20102 { instruction , 0 , 0 , 32,
20103 0xfc0001ff, 0xc00000d0, &DROTRV , 0,
20104 MIPS64_ }, /* DROTRV */
20105 { instruction , 0 , 0 , 32,
20106 0xfc0001ff, 0xc00000d8, &DMUHU , 0,
20107 MIPS64_ }, /* DMUHU */
20108 { reserved_block , 0 , 0 , 32,
20109 0xfc0001ff, 0xc00000e0, 0 , 0,
20110 0x0 }, /* POOL32S_0~*(28) */
20111 { reserved_block , 0 , 0 , 32,
20112 0xfc0001ff, 0xc00000e8, 0 , 0,
20113 0x0 }, /* POOL32S_0~*(29) */
20114 { reserved_block , 0 , 0 , 32,
20115 0xfc0001ff, 0xc00000f0, 0 , 0,
20116 0x0 }, /* POOL32S_0~*(30) */
20117 { reserved_block , 0 , 0 , 32,
20118 0xfc0001ff, 0xc00000f8, 0 , 0,
20119 0x0 }, /* POOL32S_0~*(31) */
20120 { reserved_block , 0 , 0 , 32,
20121 0xfc0001ff, 0xc0000100, 0 , 0,
20122 0x0 }, /* POOL32S_0~*(32) */
20123 { reserved_block , 0 , 0 , 32,
20124 0xfc0001ff, 0xc0000108, 0 , 0,
20125 0x0 }, /* POOL32S_0~*(33) */
20126 { instruction , 0 , 0 , 32,
20127 0xfc0001ff, 0xc0000110, &DADD , 0,
20128 MIPS64_ }, /* DADD */
20129 { instruction , 0 , 0 , 32,
20130 0xfc0001ff, 0xc0000118, &DDIV , 0,
20131 MIPS64_ }, /* DDIV */
20132 { reserved_block , 0 , 0 , 32,
20133 0xfc0001ff, 0xc0000120, 0 , 0,
20134 0x0 }, /* POOL32S_0~*(36) */
20135 { reserved_block , 0 , 0 , 32,
20136 0xfc0001ff, 0xc0000128, 0 , 0,
20137 0x0 }, /* POOL32S_0~*(37) */
20138 { reserved_block , 0 , 0 , 32,
20139 0xfc0001ff, 0xc0000130, 0 , 0,
20140 0x0 }, /* POOL32S_0~*(38) */
20141 { reserved_block , 0 , 0 , 32,
20142 0xfc0001ff, 0xc0000138, 0 , 0,
20143 0x0 }, /* POOL32S_0~*(39) */
20144 { reserved_block , 0 , 0 , 32,
20145 0xfc0001ff, 0xc0000140, 0 , 0,
20146 0x0 }, /* POOL32S_0~*(40) */
20147 { reserved_block , 0 , 0 , 32,
20148 0xfc0001ff, 0xc0000148, 0 , 0,
20149 0x0 }, /* POOL32S_0~*(41) */
20150 { instruction , 0 , 0 , 32,
20151 0xfc0001ff, 0xc0000150, &DADDU , 0,
20152 MIPS64_ }, /* DADDU */
20153 { instruction , 0 , 0 , 32,
20154 0xfc0001ff, 0xc0000158, &DMOD , 0,
20155 MIPS64_ }, /* DMOD */
20156 { reserved_block , 0 , 0 , 32,
20157 0xfc0001ff, 0xc0000160, 0 , 0,
20158 0x0 }, /* POOL32S_0~*(44) */
20159 { reserved_block , 0 , 0 , 32,
20160 0xfc0001ff, 0xc0000168, 0 , 0,
20161 0x0 }, /* POOL32S_0~*(45) */
20162 { reserved_block , 0 , 0 , 32,
20163 0xfc0001ff, 0xc0000170, 0 , 0,
20164 0x0 }, /* POOL32S_0~*(46) */
20165 { reserved_block , 0 , 0 , 32,
20166 0xfc0001ff, 0xc0000178, 0 , 0,
20167 0x0 }, /* POOL32S_0~*(47) */
20168 { reserved_block , 0 , 0 , 32,
20169 0xfc0001ff, 0xc0000180, 0 , 0,
20170 0x0 }, /* POOL32S_0~*(48) */
20171 { reserved_block , 0 , 0 , 32,
20172 0xfc0001ff, 0xc0000188, 0 , 0,
20173 0x0 }, /* POOL32S_0~*(49) */
20174 { instruction , 0 , 0 , 32,
20175 0xfc0001ff, 0xc0000190, &DSUB , 0,
20176 MIPS64_ }, /* DSUB */
20177 { instruction , 0 , 0 , 32,
20178 0xfc0001ff, 0xc0000198, &DDIVU , 0,
20179 MIPS64_ }, /* DDIVU */
20180 { reserved_block , 0 , 0 , 32,
20181 0xfc0001ff, 0xc00001a0, 0 , 0,
20182 0x0 }, /* POOL32S_0~*(52) */
20183 { reserved_block , 0 , 0 , 32,
20184 0xfc0001ff, 0xc00001a8, 0 , 0,
20185 0x0 }, /* POOL32S_0~*(53) */
20186 { reserved_block , 0 , 0 , 32,
20187 0xfc0001ff, 0xc00001b0, 0 , 0,
20188 0x0 }, /* POOL32S_0~*(54) */
20189 { reserved_block , 0 , 0 , 32,
20190 0xfc0001ff, 0xc00001b8, 0 , 0,
20191 0x0 }, /* POOL32S_0~*(55) */
20192 { reserved_block , 0 , 0 , 32,
20193 0xfc0001ff, 0xc00001c0, 0 , 0,
20194 0x0 }, /* POOL32S_0~*(56) */
20195 { reserved_block , 0 , 0 , 32,
20196 0xfc0001ff, 0xc00001c8, 0 , 0,
20197 0x0 }, /* POOL32S_0~*(57) */
20198 { instruction , 0 , 0 , 32,
20199 0xfc0001ff, 0xc00001d0, &DSUBU , 0,
20200 MIPS64_ }, /* DSUBU */
20201 { instruction , 0 , 0 , 32,
20202 0xfc0001ff, 0xc00001d8, &DMODU , 0,
20203 MIPS64_ }, /* DMODU */
20204 { reserved_block , 0 , 0 , 32,
20205 0xfc0001ff, 0xc00001e0, 0 , 0,
20206 0x0 }, /* POOL32S_0~*(60) */
20207 { reserved_block , 0 , 0 , 32,
20208 0xfc0001ff, 0xc00001e8, 0 , 0,
20209 0x0 }, /* POOL32S_0~*(61) */
20210 { reserved_block , 0 , 0 , 32,
20211 0xfc0001ff, 0xc00001f0, 0 , 0,
20212 0x0 }, /* POOL32S_0~*(62) */
20213 { reserved_block , 0 , 0 , 32,
20214 0xfc0001ff, 0xc00001f8, 0 , 0,
20215 0x0 }, /* POOL32S_0~*(63) */
20219 static const Pool POOL32Sxf_4[128] = {
20220 { reserved_block , 0 , 0 , 32,
20221 0xfc00ffff, 0xc000013c, 0 , 0,
20222 0x0 }, /* POOL32Sxf_4~*(0) */
20223 { reserved_block , 0 , 0 , 32,
20224 0xfc00ffff, 0xc000033c, 0 , 0,
20225 0x0 }, /* POOL32Sxf_4~*(1) */
20226 { reserved_block , 0 , 0 , 32,
20227 0xfc00ffff, 0xc000053c, 0 , 0,
20228 0x0 }, /* POOL32Sxf_4~*(2) */
20229 { reserved_block , 0 , 0 , 32,
20230 0xfc00ffff, 0xc000073c, 0 , 0,
20231 0x0 }, /* POOL32Sxf_4~*(3) */
20232 { reserved_block , 0 , 0 , 32,
20233 0xfc00ffff, 0xc000093c, 0 , 0,
20234 0x0 }, /* POOL32Sxf_4~*(4) */
20235 { reserved_block , 0 , 0 , 32,
20236 0xfc00ffff, 0xc0000b3c, 0 , 0,
20237 0x0 }, /* POOL32Sxf_4~*(5) */
20238 { reserved_block , 0 , 0 , 32,
20239 0xfc00ffff, 0xc0000d3c, 0 , 0,
20240 0x0 }, /* POOL32Sxf_4~*(6) */
20241 { reserved_block , 0 , 0 , 32,
20242 0xfc00ffff, 0xc0000f3c, 0 , 0,
20243 0x0 }, /* POOL32Sxf_4~*(7) */
20244 { reserved_block , 0 , 0 , 32,
20245 0xfc00ffff, 0xc000113c, 0 , 0,
20246 0x0 }, /* POOL32Sxf_4~*(8) */
20247 { reserved_block , 0 , 0 , 32,
20248 0xfc00ffff, 0xc000133c, 0 , 0,
20249 0x0 }, /* POOL32Sxf_4~*(9) */
20250 { reserved_block , 0 , 0 , 32,
20251 0xfc00ffff, 0xc000153c, 0 , 0,
20252 0x0 }, /* POOL32Sxf_4~*(10) */
20253 { reserved_block , 0 , 0 , 32,
20254 0xfc00ffff, 0xc000173c, 0 , 0,
20255 0x0 }, /* POOL32Sxf_4~*(11) */
20256 { reserved_block , 0 , 0 , 32,
20257 0xfc00ffff, 0xc000193c, 0 , 0,
20258 0x0 }, /* POOL32Sxf_4~*(12) */
20259 { reserved_block , 0 , 0 , 32,
20260 0xfc00ffff, 0xc0001b3c, 0 , 0,
20261 0x0 }, /* POOL32Sxf_4~*(13) */
20262 { reserved_block , 0 , 0 , 32,
20263 0xfc00ffff, 0xc0001d3c, 0 , 0,
20264 0x0 }, /* POOL32Sxf_4~*(14) */
20265 { reserved_block , 0 , 0 , 32,
20266 0xfc00ffff, 0xc0001f3c, 0 , 0,
20267 0x0 }, /* POOL32Sxf_4~*(15) */
20268 { reserved_block , 0 , 0 , 32,
20269 0xfc00ffff, 0xc000213c, 0 , 0,
20270 0x0 }, /* POOL32Sxf_4~*(16) */
20271 { reserved_block , 0 , 0 , 32,
20272 0xfc00ffff, 0xc000233c, 0 , 0,
20273 0x0 }, /* POOL32Sxf_4~*(17) */
20274 { reserved_block , 0 , 0 , 32,
20275 0xfc00ffff, 0xc000253c, 0 , 0,
20276 0x0 }, /* POOL32Sxf_4~*(18) */
20277 { reserved_block , 0 , 0 , 32,
20278 0xfc00ffff, 0xc000273c, 0 , 0,
20279 0x0 }, /* POOL32Sxf_4~*(19) */
20280 { reserved_block , 0 , 0 , 32,
20281 0xfc00ffff, 0xc000293c, 0 , 0,
20282 0x0 }, /* POOL32Sxf_4~*(20) */
20283 { reserved_block , 0 , 0 , 32,
20284 0xfc00ffff, 0xc0002b3c, 0 , 0,
20285 0x0 }, /* POOL32Sxf_4~*(21) */
20286 { reserved_block , 0 , 0 , 32,
20287 0xfc00ffff, 0xc0002d3c, 0 , 0,
20288 0x0 }, /* POOL32Sxf_4~*(22) */
20289 { reserved_block , 0 , 0 , 32,
20290 0xfc00ffff, 0xc0002f3c, 0 , 0,
20291 0x0 }, /* POOL32Sxf_4~*(23) */
20292 { reserved_block , 0 , 0 , 32,
20293 0xfc00ffff, 0xc000313c, 0 , 0,
20294 0x0 }, /* POOL32Sxf_4~*(24) */
20295 { reserved_block , 0 , 0 , 32,
20296 0xfc00ffff, 0xc000333c, 0 , 0,
20297 0x0 }, /* POOL32Sxf_4~*(25) */
20298 { reserved_block , 0 , 0 , 32,
20299 0xfc00ffff, 0xc000353c, 0 , 0,
20300 0x0 }, /* POOL32Sxf_4~*(26) */
20301 { reserved_block , 0 , 0 , 32,
20302 0xfc00ffff, 0xc000373c, 0 , 0,
20303 0x0 }, /* POOL32Sxf_4~*(27) */
20304 { reserved_block , 0 , 0 , 32,
20305 0xfc00ffff, 0xc000393c, 0 , 0,
20306 0x0 }, /* POOL32Sxf_4~*(28) */
20307 { reserved_block , 0 , 0 , 32,
20308 0xfc00ffff, 0xc0003b3c, 0 , 0,
20309 0x0 }, /* POOL32Sxf_4~*(29) */
20310 { reserved_block , 0 , 0 , 32,
20311 0xfc00ffff, 0xc0003d3c, 0 , 0,
20312 0x0 }, /* POOL32Sxf_4~*(30) */
20313 { reserved_block , 0 , 0 , 32,
20314 0xfc00ffff, 0xc0003f3c, 0 , 0,
20315 0x0 }, /* POOL32Sxf_4~*(31) */
20316 { reserved_block , 0 , 0 , 32,
20317 0xfc00ffff, 0xc000413c, 0 , 0,
20318 0x0 }, /* POOL32Sxf_4~*(32) */
20319 { reserved_block , 0 , 0 , 32,
20320 0xfc00ffff, 0xc000433c, 0 , 0,
20321 0x0 }, /* POOL32Sxf_4~*(33) */
20322 { reserved_block , 0 , 0 , 32,
20323 0xfc00ffff, 0xc000453c, 0 , 0,
20324 0x0 }, /* POOL32Sxf_4~*(34) */
20325 { reserved_block , 0 , 0 , 32,
20326 0xfc00ffff, 0xc000473c, 0 , 0,
20327 0x0 }, /* POOL32Sxf_4~*(35) */
20328 { reserved_block , 0 , 0 , 32,
20329 0xfc00ffff, 0xc000493c, 0 , 0,
20330 0x0 }, /* POOL32Sxf_4~*(36) */
20331 { instruction , 0 , 0 , 32,
20332 0xfc00ffff, 0xc0004b3c, &DCLO , 0,
20333 MIPS64_ }, /* DCLO */
20334 { reserved_block , 0 , 0 , 32,
20335 0xfc00ffff, 0xc0004d3c, 0 , 0,
20336 0x0 }, /* POOL32Sxf_4~*(38) */
20337 { reserved_block , 0 , 0 , 32,
20338 0xfc00ffff, 0xc0004f3c, 0 , 0,
20339 0x0 }, /* POOL32Sxf_4~*(39) */
20340 { reserved_block , 0 , 0 , 32,
20341 0xfc00ffff, 0xc000513c, 0 , 0,
20342 0x0 }, /* POOL32Sxf_4~*(40) */
20343 { reserved_block , 0 , 0 , 32,
20344 0xfc00ffff, 0xc000533c, 0 , 0,
20345 0x0 }, /* POOL32Sxf_4~*(41) */
20346 { reserved_block , 0 , 0 , 32,
20347 0xfc00ffff, 0xc000553c, 0 , 0,
20348 0x0 }, /* POOL32Sxf_4~*(42) */
20349 { reserved_block , 0 , 0 , 32,
20350 0xfc00ffff, 0xc000573c, 0 , 0,
20351 0x0 }, /* POOL32Sxf_4~*(43) */
20352 { reserved_block , 0 , 0 , 32,
20353 0xfc00ffff, 0xc000593c, 0 , 0,
20354 0x0 }, /* POOL32Sxf_4~*(44) */
20355 { instruction , 0 , 0 , 32,
20356 0xfc00ffff, 0xc0005b3c, &DCLZ , 0,
20357 MIPS64_ }, /* DCLZ */
20358 { reserved_block , 0 , 0 , 32,
20359 0xfc00ffff, 0xc0005d3c, 0 , 0,
20360 0x0 }, /* POOL32Sxf_4~*(46) */
20361 { reserved_block , 0 , 0 , 32,
20362 0xfc00ffff, 0xc0005f3c, 0 , 0,
20363 0x0 }, /* POOL32Sxf_4~*(47) */
20364 { reserved_block , 0 , 0 , 32,
20365 0xfc00ffff, 0xc000613c, 0 , 0,
20366 0x0 }, /* POOL32Sxf_4~*(48) */
20367 { reserved_block , 0 , 0 , 32,
20368 0xfc00ffff, 0xc000633c, 0 , 0,
20369 0x0 }, /* POOL32Sxf_4~*(49) */
20370 { reserved_block , 0 , 0 , 32,
20371 0xfc00ffff, 0xc000653c, 0 , 0,
20372 0x0 }, /* POOL32Sxf_4~*(50) */
20373 { reserved_block , 0 , 0 , 32,
20374 0xfc00ffff, 0xc000673c, 0 , 0,
20375 0x0 }, /* POOL32Sxf_4~*(51) */
20376 { reserved_block , 0 , 0 , 32,
20377 0xfc00ffff, 0xc000693c, 0 , 0,
20378 0x0 }, /* POOL32Sxf_4~*(52) */
20379 { reserved_block , 0 , 0 , 32,
20380 0xfc00ffff, 0xc0006b3c, 0 , 0,
20381 0x0 }, /* POOL32Sxf_4~*(53) */
20382 { reserved_block , 0 , 0 , 32,
20383 0xfc00ffff, 0xc0006d3c, 0 , 0,
20384 0x0 }, /* POOL32Sxf_4~*(54) */
20385 { reserved_block , 0 , 0 , 32,
20386 0xfc00ffff, 0xc0006f3c, 0 , 0,
20387 0x0 }, /* POOL32Sxf_4~*(55) */
20388 { reserved_block , 0 , 0 , 32,
20389 0xfc00ffff, 0xc000713c, 0 , 0,
20390 0x0 }, /* POOL32Sxf_4~*(56) */
20391 { reserved_block , 0 , 0 , 32,
20392 0xfc00ffff, 0xc000733c, 0 , 0,
20393 0x0 }, /* POOL32Sxf_4~*(57) */
20394 { reserved_block , 0 , 0 , 32,
20395 0xfc00ffff, 0xc000753c, 0 , 0,
20396 0x0 }, /* POOL32Sxf_4~*(58) */
20397 { reserved_block , 0 , 0 , 32,
20398 0xfc00ffff, 0xc000773c, 0 , 0,
20399 0x0 }, /* POOL32Sxf_4~*(59) */
20400 { reserved_block , 0 , 0 , 32,
20401 0xfc00ffff, 0xc000793c, 0 , 0,
20402 0x0 }, /* POOL32Sxf_4~*(60) */
20403 { reserved_block , 0 , 0 , 32,
20404 0xfc00ffff, 0xc0007b3c, 0 , 0,
20405 0x0 }, /* POOL32Sxf_4~*(61) */
20406 { reserved_block , 0 , 0 , 32,
20407 0xfc00ffff, 0xc0007d3c, 0 , 0,
20408 0x0 }, /* POOL32Sxf_4~*(62) */
20409 { reserved_block , 0 , 0 , 32,
20410 0xfc00ffff, 0xc0007f3c, 0 , 0,
20411 0x0 }, /* POOL32Sxf_4~*(63) */
20412 { reserved_block , 0 , 0 , 32,
20413 0xfc00ffff, 0xc000813c, 0 , 0,
20414 0x0 }, /* POOL32Sxf_4~*(64) */
20415 { reserved_block , 0 , 0 , 32,
20416 0xfc00ffff, 0xc000833c, 0 , 0,
20417 0x0 }, /* POOL32Sxf_4~*(65) */
20418 { reserved_block , 0 , 0 , 32,
20419 0xfc00ffff, 0xc000853c, 0 , 0,
20420 0x0 }, /* POOL32Sxf_4~*(66) */
20421 { reserved_block , 0 , 0 , 32,
20422 0xfc00ffff, 0xc000873c, 0 , 0,
20423 0x0 }, /* POOL32Sxf_4~*(67) */
20424 { reserved_block , 0 , 0 , 32,
20425 0xfc00ffff, 0xc000893c, 0 , 0,
20426 0x0 }, /* POOL32Sxf_4~*(68) */
20427 { reserved_block , 0 , 0 , 32,
20428 0xfc00ffff, 0xc0008b3c, 0 , 0,
20429 0x0 }, /* POOL32Sxf_4~*(69) */
20430 { reserved_block , 0 , 0 , 32,
20431 0xfc00ffff, 0xc0008d3c, 0 , 0,
20432 0x0 }, /* POOL32Sxf_4~*(70) */
20433 { reserved_block , 0 , 0 , 32,
20434 0xfc00ffff, 0xc0008f3c, 0 , 0,
20435 0x0 }, /* POOL32Sxf_4~*(71) */
20436 { reserved_block , 0 , 0 , 32,
20437 0xfc00ffff, 0xc000913c, 0 , 0,
20438 0x0 }, /* POOL32Sxf_4~*(72) */
20439 { reserved_block , 0 , 0 , 32,
20440 0xfc00ffff, 0xc000933c, 0 , 0,
20441 0x0 }, /* POOL32Sxf_4~*(73) */
20442 { reserved_block , 0 , 0 , 32,
20443 0xfc00ffff, 0xc000953c, 0 , 0,
20444 0x0 }, /* POOL32Sxf_4~*(74) */
20445 { reserved_block , 0 , 0 , 32,
20446 0xfc00ffff, 0xc000973c, 0 , 0,
20447 0x0 }, /* POOL32Sxf_4~*(75) */
20448 { reserved_block , 0 , 0 , 32,
20449 0xfc00ffff, 0xc000993c, 0 , 0,
20450 0x0 }, /* POOL32Sxf_4~*(76) */
20451 { reserved_block , 0 , 0 , 32,
20452 0xfc00ffff, 0xc0009b3c, 0 , 0,
20453 0x0 }, /* POOL32Sxf_4~*(77) */
20454 { reserved_block , 0 , 0 , 32,
20455 0xfc00ffff, 0xc0009d3c, 0 , 0,
20456 0x0 }, /* POOL32Sxf_4~*(78) */
20457 { reserved_block , 0 , 0 , 32,
20458 0xfc00ffff, 0xc0009f3c, 0 , 0,
20459 0x0 }, /* POOL32Sxf_4~*(79) */
20460 { reserved_block , 0 , 0 , 32,
20461 0xfc00ffff, 0xc000a13c, 0 , 0,
20462 0x0 }, /* POOL32Sxf_4~*(80) */
20463 { reserved_block , 0 , 0 , 32,
20464 0xfc00ffff, 0xc000a33c, 0 , 0,
20465 0x0 }, /* POOL32Sxf_4~*(81) */
20466 { reserved_block , 0 , 0 , 32,
20467 0xfc00ffff, 0xc000a53c, 0 , 0,
20468 0x0 }, /* POOL32Sxf_4~*(82) */
20469 { reserved_block , 0 , 0 , 32,
20470 0xfc00ffff, 0xc000a73c, 0 , 0,
20471 0x0 }, /* POOL32Sxf_4~*(83) */
20472 { reserved_block , 0 , 0 , 32,
20473 0xfc00ffff, 0xc000a93c, 0 , 0,
20474 0x0 }, /* POOL32Sxf_4~*(84) */
20475 { reserved_block , 0 , 0 , 32,
20476 0xfc00ffff, 0xc000ab3c, 0 , 0,
20477 0x0 }, /* POOL32Sxf_4~*(85) */
20478 { reserved_block , 0 , 0 , 32,
20479 0xfc00ffff, 0xc000ad3c, 0 , 0,
20480 0x0 }, /* POOL32Sxf_4~*(86) */
20481 { reserved_block , 0 , 0 , 32,
20482 0xfc00ffff, 0xc000af3c, 0 , 0,
20483 0x0 }, /* POOL32Sxf_4~*(87) */
20484 { reserved_block , 0 , 0 , 32,
20485 0xfc00ffff, 0xc000b13c, 0 , 0,
20486 0x0 }, /* POOL32Sxf_4~*(88) */
20487 { reserved_block , 0 , 0 , 32,
20488 0xfc00ffff, 0xc000b33c, 0 , 0,
20489 0x0 }, /* POOL32Sxf_4~*(89) */
20490 { reserved_block , 0 , 0 , 32,
20491 0xfc00ffff, 0xc000b53c, 0 , 0,
20492 0x0 }, /* POOL32Sxf_4~*(90) */
20493 { reserved_block , 0 , 0 , 32,
20494 0xfc00ffff, 0xc000b73c, 0 , 0,
20495 0x0 }, /* POOL32Sxf_4~*(91) */
20496 { reserved_block , 0 , 0 , 32,
20497 0xfc00ffff, 0xc000b93c, 0 , 0,
20498 0x0 }, /* POOL32Sxf_4~*(92) */
20499 { reserved_block , 0 , 0 , 32,
20500 0xfc00ffff, 0xc000bb3c, 0 , 0,
20501 0x0 }, /* POOL32Sxf_4~*(93) */
20502 { reserved_block , 0 , 0 , 32,
20503 0xfc00ffff, 0xc000bd3c, 0 , 0,
20504 0x0 }, /* POOL32Sxf_4~*(94) */
20505 { reserved_block , 0 , 0 , 32,
20506 0xfc00ffff, 0xc000bf3c, 0 , 0,
20507 0x0 }, /* POOL32Sxf_4~*(95) */
20508 { reserved_block , 0 , 0 , 32,
20509 0xfc00ffff, 0xc000c13c, 0 , 0,
20510 0x0 }, /* POOL32Sxf_4~*(96) */
20511 { reserved_block , 0 , 0 , 32,
20512 0xfc00ffff, 0xc000c33c, 0 , 0,
20513 0x0 }, /* POOL32Sxf_4~*(97) */
20514 { reserved_block , 0 , 0 , 32,
20515 0xfc00ffff, 0xc000c53c, 0 , 0,
20516 0x0 }, /* POOL32Sxf_4~*(98) */
20517 { reserved_block , 0 , 0 , 32,
20518 0xfc00ffff, 0xc000c73c, 0 , 0,
20519 0x0 }, /* POOL32Sxf_4~*(99) */
20520 { reserved_block , 0 , 0 , 32,
20521 0xfc00ffff, 0xc000c93c, 0 , 0,
20522 0x0 }, /* POOL32Sxf_4~*(100) */
20523 { reserved_block , 0 , 0 , 32,
20524 0xfc00ffff, 0xc000cb3c, 0 , 0,
20525 0x0 }, /* POOL32Sxf_4~*(101) */
20526 { reserved_block , 0 , 0 , 32,
20527 0xfc00ffff, 0xc000cd3c, 0 , 0,
20528 0x0 }, /* POOL32Sxf_4~*(102) */
20529 { reserved_block , 0 , 0 , 32,
20530 0xfc00ffff, 0xc000cf3c, 0 , 0,
20531 0x0 }, /* POOL32Sxf_4~*(103) */
20532 { reserved_block , 0 , 0 , 32,
20533 0xfc00ffff, 0xc000d13c, 0 , 0,
20534 0x0 }, /* POOL32Sxf_4~*(104) */
20535 { reserved_block , 0 , 0 , 32,
20536 0xfc00ffff, 0xc000d33c, 0 , 0,
20537 0x0 }, /* POOL32Sxf_4~*(105) */
20538 { reserved_block , 0 , 0 , 32,
20539 0xfc00ffff, 0xc000d53c, 0 , 0,
20540 0x0 }, /* POOL32Sxf_4~*(106) */
20541 { reserved_block , 0 , 0 , 32,
20542 0xfc00ffff, 0xc000d73c, 0 , 0,
20543 0x0 }, /* POOL32Sxf_4~*(107) */
20544 { reserved_block , 0 , 0 , 32,
20545 0xfc00ffff, 0xc000d93c, 0 , 0,
20546 0x0 }, /* POOL32Sxf_4~*(108) */
20547 { reserved_block , 0 , 0 , 32,
20548 0xfc00ffff, 0xc000db3c, 0 , 0,
20549 0x0 }, /* POOL32Sxf_4~*(109) */
20550 { reserved_block , 0 , 0 , 32,
20551 0xfc00ffff, 0xc000dd3c, 0 , 0,
20552 0x0 }, /* POOL32Sxf_4~*(110) */
20553 { reserved_block , 0 , 0 , 32,
20554 0xfc00ffff, 0xc000df3c, 0 , 0,
20555 0x0 }, /* POOL32Sxf_4~*(111) */
20556 { reserved_block , 0 , 0 , 32,
20557 0xfc00ffff, 0xc000e13c, 0 , 0,
20558 0x0 }, /* POOL32Sxf_4~*(112) */
20559 { reserved_block , 0 , 0 , 32,
20560 0xfc00ffff, 0xc000e33c, 0 , 0,
20561 0x0 }, /* POOL32Sxf_4~*(113) */
20562 { reserved_block , 0 , 0 , 32,
20563 0xfc00ffff, 0xc000e53c, 0 , 0,
20564 0x0 }, /* POOL32Sxf_4~*(114) */
20565 { reserved_block , 0 , 0 , 32,
20566 0xfc00ffff, 0xc000e73c, 0 , 0,
20567 0x0 }, /* POOL32Sxf_4~*(115) */
20568 { reserved_block , 0 , 0 , 32,
20569 0xfc00ffff, 0xc000e93c, 0 , 0,
20570 0x0 }, /* POOL32Sxf_4~*(116) */
20571 { reserved_block , 0 , 0 , 32,
20572 0xfc00ffff, 0xc000eb3c, 0 , 0,
20573 0x0 }, /* POOL32Sxf_4~*(117) */
20574 { reserved_block , 0 , 0 , 32,
20575 0xfc00ffff, 0xc000ed3c, 0 , 0,
20576 0x0 }, /* POOL32Sxf_4~*(118) */
20577 { reserved_block , 0 , 0 , 32,
20578 0xfc00ffff, 0xc000ef3c, 0 , 0,
20579 0x0 }, /* POOL32Sxf_4~*(119) */
20580 { reserved_block , 0 , 0 , 32,
20581 0xfc00ffff, 0xc000f13c, 0 , 0,
20582 0x0 }, /* POOL32Sxf_4~*(120) */
20583 { reserved_block , 0 , 0 , 32,
20584 0xfc00ffff, 0xc000f33c, 0 , 0,
20585 0x0 }, /* POOL32Sxf_4~*(121) */
20586 { reserved_block , 0 , 0 , 32,
20587 0xfc00ffff, 0xc000f53c, 0 , 0,
20588 0x0 }, /* POOL32Sxf_4~*(122) */
20589 { reserved_block , 0 , 0 , 32,
20590 0xfc00ffff, 0xc000f73c, 0 , 0,
20591 0x0 }, /* POOL32Sxf_4~*(123) */
20592 { reserved_block , 0 , 0 , 32,
20593 0xfc00ffff, 0xc000f93c, 0 , 0,
20594 0x0 }, /* POOL32Sxf_4~*(124) */
20595 { reserved_block , 0 , 0 , 32,
20596 0xfc00ffff, 0xc000fb3c, 0 , 0,
20597 0x0 }, /* POOL32Sxf_4~*(125) */
20598 { reserved_block , 0 , 0 , 32,
20599 0xfc00ffff, 0xc000fd3c, 0 , 0,
20600 0x0 }, /* POOL32Sxf_4~*(126) */
20601 { reserved_block , 0 , 0 , 32,
20602 0xfc00ffff, 0xc000ff3c, 0 , 0,
20603 0x0 }, /* POOL32Sxf_4~*(127) */
20607 static const Pool POOL32Sxf[8] = {
20608 { reserved_block , 0 , 0 , 32,
20609 0xfc0001ff, 0xc000003c, 0 , 0,
20610 0x0 }, /* POOL32Sxf~*(0) */
20611 { reserved_block , 0 , 0 , 32,
20612 0xfc0001ff, 0xc000007c, 0 , 0,
20613 0x0 }, /* POOL32Sxf~*(1) */
20614 { reserved_block , 0 , 0 , 32,
20615 0xfc0001ff, 0xc00000bc, 0 , 0,
20616 0x0 }, /* POOL32Sxf~*(2) */
20617 { reserved_block , 0 , 0 , 32,
20618 0xfc0001ff, 0xc00000fc, 0 , 0,
20619 0x0 }, /* POOL32Sxf~*(3) */
20620 { pool , POOL32Sxf_4 , 128 , 32,
20621 0xfc0001ff, 0xc000013c, 0 , 0,
20622 0x0 }, /* POOL32Sxf_4 */
20623 { reserved_block , 0 , 0 , 32,
20624 0xfc0001ff, 0xc000017c, 0 , 0,
20625 0x0 }, /* POOL32Sxf~*(5) */
20626 { reserved_block , 0 , 0 , 32,
20627 0xfc0001ff, 0xc00001bc, 0 , 0,
20628 0x0 }, /* POOL32Sxf~*(6) */
20629 { reserved_block , 0 , 0 , 32,
20630 0xfc0001ff, 0xc00001fc, 0 , 0,
20631 0x0 }, /* POOL32Sxf~*(7) */
20635 static const Pool POOL32S_4[8] = {
20636 { instruction , 0 , 0 , 32,
20637 0xfc00003f, 0xc0000004, &EXTD , 0,
20638 MIPS64_ }, /* EXTD */
20639 { instruction , 0 , 0 , 32,
20640 0xfc00003f, 0xc000000c, &EXTD32 , 0,
20641 MIPS64_ }, /* EXTD32 */
20642 { reserved_block , 0 , 0 , 32,
20643 0xfc00003f, 0xc0000014, 0 , 0,
20644 0x0 }, /* POOL32S_4~*(2) */
20645 { reserved_block , 0 , 0 , 32,
20646 0xfc00003f, 0xc000001c, 0 , 0,
20647 0x0 }, /* POOL32S_4~*(3) */
20648 { reserved_block , 0 , 0 , 32,
20649 0xfc00003f, 0xc0000024, 0 , 0,
20650 0x0 }, /* POOL32S_4~*(4) */
20651 { reserved_block , 0 , 0 , 32,
20652 0xfc00003f, 0xc000002c, 0 , 0,
20653 0x0 }, /* POOL32S_4~*(5) */
20654 { reserved_block , 0 , 0 , 32,
20655 0xfc00003f, 0xc0000034, 0 , 0,
20656 0x0 }, /* POOL32S_4~*(6) */
20657 { pool , POOL32Sxf , 8 , 32,
20658 0xfc00003f, 0xc000003c, 0 , 0,
20659 0x0 }, /* POOL32Sxf */
20663 static const Pool POOL32S[8] = {
20664 { pool , POOL32S_0 , 64 , 32,
20665 0xfc000007, 0xc0000000, 0 , 0,
20666 0x0 }, /* POOL32S_0 */
20667 { reserved_block , 0 , 0 , 32,
20668 0xfc000007, 0xc0000001, 0 , 0,
20669 0x0 }, /* POOL32S~*(1) */
20670 { reserved_block , 0 , 0 , 32,
20671 0xfc000007, 0xc0000002, 0 , 0,
20672 0x0 }, /* POOL32S~*(2) */
20673 { reserved_block , 0 , 0 , 32,
20674 0xfc000007, 0xc0000003, 0 , 0,
20675 0x0 }, /* POOL32S~*(3) */
20676 { pool , POOL32S_4 , 8 , 32,
20677 0xfc000007, 0xc0000004, 0 , 0,
20678 0x0 }, /* POOL32S_4 */
20679 { reserved_block , 0 , 0 , 32,
20680 0xfc000007, 0xc0000005, 0 , 0,
20681 0x0 }, /* POOL32S~*(5) */
20682 { reserved_block , 0 , 0 , 32,
20683 0xfc000007, 0xc0000006, 0 , 0,
20684 0x0 }, /* POOL32S~*(6) */
20685 { reserved_block , 0 , 0 , 32,
20686 0xfc000007, 0xc0000007, 0 , 0,
20687 0x0 }, /* POOL32S~*(7) */
20691 static const Pool P_LUI[2] = {
20692 { instruction , 0 , 0 , 32,
20693 0xfc000002, 0xe0000000, &LUI , 0,
20694 0x0 }, /* LUI */
20695 { instruction , 0 , 0 , 32,
20696 0xfc000002, 0xe0000002, &ALUIPC , 0,
20697 0x0 }, /* ALUIPC */
20701 static const Pool P_GP_LH[2] = {
20702 { instruction , 0 , 0 , 32,
20703 0xfc1c0001, 0x44100000, &LH_GP_ , 0,
20704 0x0 }, /* LH[GP] */
20705 { instruction , 0 , 0 , 32,
20706 0xfc1c0001, 0x44100001, &LHU_GP_ , 0,
20707 0x0 }, /* LHU[GP] */
20711 static const Pool P_GP_SH[2] = {
20712 { instruction , 0 , 0 , 32,
20713 0xfc1c0001, 0x44140000, &SH_GP_ , 0,
20714 0x0 }, /* SH[GP] */
20715 { reserved_block , 0 , 0 , 32,
20716 0xfc1c0001, 0x44140001, 0 , 0,
20717 0x0 }, /* P.GP.SH~*(1) */
20721 static const Pool P_GP_CP1[4] = {
20722 { instruction , 0 , 0 , 32,
20723 0xfc1c0003, 0x44180000, &LWC1_GP_ , 0,
20724 CP1_ }, /* LWC1[GP] */
20725 { instruction , 0 , 0 , 32,
20726 0xfc1c0003, 0x44180001, &SWC1_GP_ , 0,
20727 CP1_ }, /* SWC1[GP] */
20728 { instruction , 0 , 0 , 32,
20729 0xfc1c0003, 0x44180002, &LDC1_GP_ , 0,
20730 CP1_ }, /* LDC1[GP] */
20731 { instruction , 0 , 0 , 32,
20732 0xfc1c0003, 0x44180003, &SDC1_GP_ , 0,
20733 CP1_ }, /* SDC1[GP] */
20737 static const Pool P_GP_M64[4] = {
20738 { instruction , 0 , 0 , 32,
20739 0xfc1c0003, 0x441c0000, &LWU_GP_ , 0,
20740 MIPS64_ }, /* LWU[GP] */
20741 { reserved_block , 0 , 0 , 32,
20742 0xfc1c0003, 0x441c0001, 0 , 0,
20743 0x0 }, /* P.GP.M64~*(1) */
20744 { reserved_block , 0 , 0 , 32,
20745 0xfc1c0003, 0x441c0002, 0 , 0,
20746 0x0 }, /* P.GP.M64~*(2) */
20747 { reserved_block , 0 , 0 , 32,
20748 0xfc1c0003, 0x441c0003, 0 , 0,
20749 0x0 }, /* P.GP.M64~*(3) */
20753 static const Pool P_GP_BH[8] = {
20754 { instruction , 0 , 0 , 32,
20755 0xfc1c0000, 0x44000000, &LB_GP_ , 0,
20756 0x0 }, /* LB[GP] */
20757 { instruction , 0 , 0 , 32,
20758 0xfc1c0000, 0x44040000, &SB_GP_ , 0,
20759 0x0 }, /* SB[GP] */
20760 { instruction , 0 , 0 , 32,
20761 0xfc1c0000, 0x44080000, &LBU_GP_ , 0,
20762 0x0 }, /* LBU[GP] */
20763 { instruction , 0 , 0 , 32,
20764 0xfc1c0000, 0x440c0000, &ADDIU_GP_B_ , 0,
20765 0x0 }, /* ADDIU[GP.B] */
20766 { pool , P_GP_LH , 2 , 32,
20767 0xfc1c0000, 0x44100000, 0 , 0,
20768 0x0 }, /* P.GP.LH */
20769 { pool , P_GP_SH , 2 , 32,
20770 0xfc1c0000, 0x44140000, 0 , 0,
20771 0x0 }, /* P.GP.SH */
20772 { pool , P_GP_CP1 , 4 , 32,
20773 0xfc1c0000, 0x44180000, 0 , 0,
20774 0x0 }, /* P.GP.CP1 */
20775 { pool , P_GP_M64 , 4 , 32,
20776 0xfc1c0000, 0x441c0000, 0 , 0,
20777 0x0 }, /* P.GP.M64 */
20781 static const Pool P_LS_U12[16] = {
20782 { instruction , 0 , 0 , 32,
20783 0xfc00f000, 0x84000000, &LB_U12_ , 0,
20784 0x0 }, /* LB[U12] */
20785 { instruction , 0 , 0 , 32,
20786 0xfc00f000, 0x84001000, &SB_U12_ , 0,
20787 0x0 }, /* SB[U12] */
20788 { instruction , 0 , 0 , 32,
20789 0xfc00f000, 0x84002000, &LBU_U12_ , 0,
20790 0x0 }, /* LBU[U12] */
20791 { instruction , 0 , 0 , 32,
20792 0xfc00f000, 0x84003000, &PREF_U12_ , 0,
20793 0x0 }, /* PREF[U12] */
20794 { instruction , 0 , 0 , 32,
20795 0xfc00f000, 0x84004000, &LH_U12_ , 0,
20796 0x0 }, /* LH[U12] */
20797 { instruction , 0 , 0 , 32,
20798 0xfc00f000, 0x84005000, &SH_U12_ , 0,
20799 0x0 }, /* SH[U12] */
20800 { instruction , 0 , 0 , 32,
20801 0xfc00f000, 0x84006000, &LHU_U12_ , 0,
20802 0x0 }, /* LHU[U12] */
20803 { instruction , 0 , 0 , 32,
20804 0xfc00f000, 0x84007000, &LWU_U12_ , 0,
20805 MIPS64_ }, /* LWU[U12] */
20806 { instruction , 0 , 0 , 32,
20807 0xfc00f000, 0x84008000, &LW_U12_ , 0,
20808 0x0 }, /* LW[U12] */
20809 { instruction , 0 , 0 , 32,
20810 0xfc00f000, 0x84009000, &SW_U12_ , 0,
20811 0x0 }, /* SW[U12] */
20812 { instruction , 0 , 0 , 32,
20813 0xfc00f000, 0x8400a000, &LWC1_U12_ , 0,
20814 CP1_ }, /* LWC1[U12] */
20815 { instruction , 0 , 0 , 32,
20816 0xfc00f000, 0x8400b000, &SWC1_U12_ , 0,
20817 CP1_ }, /* SWC1[U12] */
20818 { instruction , 0 , 0 , 32,
20819 0xfc00f000, 0x8400c000, &LD_U12_ , 0,
20820 MIPS64_ }, /* LD[U12] */
20821 { instruction , 0 , 0 , 32,
20822 0xfc00f000, 0x8400d000, &SD_U12_ , 0,
20823 MIPS64_ }, /* SD[U12] */
20824 { instruction , 0 , 0 , 32,
20825 0xfc00f000, 0x8400e000, &LDC1_U12_ , 0,
20826 CP1_ }, /* LDC1[U12] */
20827 { instruction , 0 , 0 , 32,
20828 0xfc00f000, 0x8400f000, &SDC1_U12_ , 0,
20829 CP1_ }, /* SDC1[U12] */
20833 static const Pool P_PREF_S9_[2] = {
20834 { instruction , 0 , 0 , 32,
20835 0xffe07f00, 0xa7e01800, &SYNCI , 0,
20836 0x0 }, /* SYNCI */
20837 { instruction , 0 , 0 , 32,
20838 0xfc007f00, 0xa4001800, &PREF_S9_ , &PREF_S9__cond ,
20839 0x0 }, /* PREF[S9] */
20843 static const Pool P_LS_S0[16] = {
20844 { instruction , 0 , 0 , 32,
20845 0xfc007f00, 0xa4000000, &LB_S9_ , 0,
20846 0x0 }, /* LB[S9] */
20847 { instruction , 0 , 0 , 32,
20848 0xfc007f00, 0xa4000800, &SB_S9_ , 0,
20849 0x0 }, /* SB[S9] */
20850 { instruction , 0 , 0 , 32,
20851 0xfc007f00, 0xa4001000, &LBU_S9_ , 0,
20852 0x0 }, /* LBU[S9] */
20853 { pool , P_PREF_S9_ , 2 , 32,
20854 0xfc007f00, 0xa4001800, 0 , 0,
20855 0x0 }, /* P.PREF[S9] */
20856 { instruction , 0 , 0 , 32,
20857 0xfc007f00, 0xa4002000, &LH_S9_ , 0,
20858 0x0 }, /* LH[S9] */
20859 { instruction , 0 , 0 , 32,
20860 0xfc007f00, 0xa4002800, &SH_S9_ , 0,
20861 0x0 }, /* SH[S9] */
20862 { instruction , 0 , 0 , 32,
20863 0xfc007f00, 0xa4003000, &LHU_S9_ , 0,
20864 0x0 }, /* LHU[S9] */
20865 { instruction , 0 , 0 , 32,
20866 0xfc007f00, 0xa4003800, &LWU_S9_ , 0,
20867 MIPS64_ }, /* LWU[S9] */
20868 { instruction , 0 , 0 , 32,
20869 0xfc007f00, 0xa4004000, &LW_S9_ , 0,
20870 0x0 }, /* LW[S9] */
20871 { instruction , 0 , 0 , 32,
20872 0xfc007f00, 0xa4004800, &SW_S9_ , 0,
20873 0x0 }, /* SW[S9] */
20874 { instruction , 0 , 0 , 32,
20875 0xfc007f00, 0xa4005000, &LWC1_S9_ , 0,
20876 CP1_ }, /* LWC1[S9] */
20877 { instruction , 0 , 0 , 32,
20878 0xfc007f00, 0xa4005800, &SWC1_S9_ , 0,
20879 CP1_ }, /* SWC1[S9] */
20880 { instruction , 0 , 0 , 32,
20881 0xfc007f00, 0xa4006000, &LD_S9_ , 0,
20882 MIPS64_ }, /* LD[S9] */
20883 { instruction , 0 , 0 , 32,
20884 0xfc007f00, 0xa4006800, &SD_S9_ , 0,
20885 MIPS64_ }, /* SD[S9] */
20886 { instruction , 0 , 0 , 32,
20887 0xfc007f00, 0xa4007000, &LDC1_S9_ , 0,
20888 CP1_ }, /* LDC1[S9] */
20889 { instruction , 0 , 0 , 32,
20890 0xfc007f00, 0xa4007800, &SDC1_S9_ , 0,
20891 CP1_ }, /* SDC1[S9] */
20895 static const Pool ASET_ACLR[2] = {
20896 { instruction , 0 , 0 , 32,
20897 0xfe007f00, 0xa4001100, &ASET , 0,
20898 MCU_ }, /* ASET */
20899 { instruction , 0 , 0 , 32,
20900 0xfe007f00, 0xa6001100, &ACLR , 0,
20901 MCU_ }, /* ACLR */
20905 static const Pool P_LL[4] = {
20906 { instruction , 0 , 0 , 32,
20907 0xfc007f03, 0xa4005100, &LL , 0,
20908 0x0 }, /* LL */
20909 { instruction , 0 , 0 , 32,
20910 0xfc007f03, 0xa4005101, &LLWP , 0,
20911 XNP_ }, /* LLWP */
20912 { reserved_block , 0 , 0 , 32,
20913 0xfc007f03, 0xa4005102, 0 , 0,
20914 0x0 }, /* P.LL~*(2) */
20915 { reserved_block , 0 , 0 , 32,
20916 0xfc007f03, 0xa4005103, 0 , 0,
20917 0x0 }, /* P.LL~*(3) */
20921 static const Pool P_SC[4] = {
20922 { instruction , 0 , 0 , 32,
20923 0xfc007f03, 0xa4005900, &SC , 0,
20924 0x0 }, /* SC */
20925 { instruction , 0 , 0 , 32,
20926 0xfc007f03, 0xa4005901, &SCWP , 0,
20927 XNP_ }, /* SCWP */
20928 { reserved_block , 0 , 0 , 32,
20929 0xfc007f03, 0xa4005902, 0 , 0,
20930 0x0 }, /* P.SC~*(2) */
20931 { reserved_block , 0 , 0 , 32,
20932 0xfc007f03, 0xa4005903, 0 , 0,
20933 0x0 }, /* P.SC~*(3) */
20937 static const Pool P_LLD[8] = {
20938 { instruction , 0 , 0 , 32,
20939 0xfc007f07, 0xa4007100, &LLD , 0,
20940 MIPS64_ }, /* LLD */
20941 { instruction , 0 , 0 , 32,
20942 0xfc007f07, 0xa4007101, &LLDP , 0,
20943 MIPS64_ }, /* LLDP */
20944 { reserved_block , 0 , 0 , 32,
20945 0xfc007f07, 0xa4007102, 0 , 0,
20946 0x0 }, /* P.LLD~*(2) */
20947 { reserved_block , 0 , 0 , 32,
20948 0xfc007f07, 0xa4007103, 0 , 0,
20949 0x0 }, /* P.LLD~*(3) */
20950 { reserved_block , 0 , 0 , 32,
20951 0xfc007f07, 0xa4007104, 0 , 0,
20952 0x0 }, /* P.LLD~*(4) */
20953 { reserved_block , 0 , 0 , 32,
20954 0xfc007f07, 0xa4007105, 0 , 0,
20955 0x0 }, /* P.LLD~*(5) */
20956 { reserved_block , 0 , 0 , 32,
20957 0xfc007f07, 0xa4007106, 0 , 0,
20958 0x0 }, /* P.LLD~*(6) */
20959 { reserved_block , 0 , 0 , 32,
20960 0xfc007f07, 0xa4007107, 0 , 0,
20961 0x0 }, /* P.LLD~*(7) */
20965 static const Pool P_SCD[8] = {
20966 { instruction , 0 , 0 , 32,
20967 0xfc007f07, 0xa4007900, &SCD , 0,
20968 MIPS64_ }, /* SCD */
20969 { instruction , 0 , 0 , 32,
20970 0xfc007f07, 0xa4007901, &SCDP , 0,
20971 MIPS64_ }, /* SCDP */
20972 { reserved_block , 0 , 0 , 32,
20973 0xfc007f07, 0xa4007902, 0 , 0,
20974 0x0 }, /* P.SCD~*(2) */
20975 { reserved_block , 0 , 0 , 32,
20976 0xfc007f07, 0xa4007903, 0 , 0,
20977 0x0 }, /* P.SCD~*(3) */
20978 { reserved_block , 0 , 0 , 32,
20979 0xfc007f07, 0xa4007904, 0 , 0,
20980 0x0 }, /* P.SCD~*(4) */
20981 { reserved_block , 0 , 0 , 32,
20982 0xfc007f07, 0xa4007905, 0 , 0,
20983 0x0 }, /* P.SCD~*(5) */
20984 { reserved_block , 0 , 0 , 32,
20985 0xfc007f07, 0xa4007906, 0 , 0,
20986 0x0 }, /* P.SCD~*(6) */
20987 { reserved_block , 0 , 0 , 32,
20988 0xfc007f07, 0xa4007907, 0 , 0,
20989 0x0 }, /* P.SCD~*(7) */
20993 static const Pool P_LS_S1[16] = {
20994 { reserved_block , 0 , 0 , 32,
20995 0xfc007f00, 0xa4000100, 0 , 0,
20996 0x0 }, /* P.LS.S1~*(0) */
20997 { reserved_block , 0 , 0 , 32,
20998 0xfc007f00, 0xa4000900, 0 , 0,
20999 0x0 }, /* P.LS.S1~*(1) */
21000 { pool , ASET_ACLR , 2 , 32,
21001 0xfc007f00, 0xa4001100, 0 , 0,
21002 0x0 }, /* ASET_ACLR */
21003 { reserved_block , 0 , 0 , 32,
21004 0xfc007f00, 0xa4001900, 0 , 0,
21005 0x0 }, /* P.LS.S1~*(3) */
21006 { instruction , 0 , 0 , 32,
21007 0xfc007f00, 0xa4002100, &UALH , 0,
21008 XMMS_ }, /* UALH */
21009 { instruction , 0 , 0 , 32,
21010 0xfc007f00, 0xa4002900, &UASH , 0,
21011 XMMS_ }, /* UASH */
21012 { reserved_block , 0 , 0 , 32,
21013 0xfc007f00, 0xa4003100, 0 , 0,
21014 0x0 }, /* P.LS.S1~*(6) */
21015 { instruction , 0 , 0 , 32,
21016 0xfc007f00, 0xa4003900, &CACHE , 0,
21017 CP0_ }, /* CACHE */
21018 { instruction , 0 , 0 , 32,
21019 0xfc007f00, 0xa4004100, &LWC2 , 0,
21020 CP2_ }, /* LWC2 */
21021 { instruction , 0 , 0 , 32,
21022 0xfc007f00, 0xa4004900, &SWC2 , 0,
21023 CP2_ }, /* SWC2 */
21024 { pool , P_LL , 4 , 32,
21025 0xfc007f00, 0xa4005100, 0 , 0,
21026 0x0 }, /* P.LL */
21027 { pool , P_SC , 4 , 32,
21028 0xfc007f00, 0xa4005900, 0 , 0,
21029 0x0 }, /* P.SC */
21030 { instruction , 0 , 0 , 32,
21031 0xfc007f00, 0xa4006100, &LDC2 , 0,
21032 CP2_ }, /* LDC2 */
21033 { instruction , 0 , 0 , 32,
21034 0xfc007f00, 0xa4006900, &SDC2 , 0,
21035 CP2_ }, /* SDC2 */
21036 { pool , P_LLD , 8 , 32,
21037 0xfc007f00, 0xa4007100, 0 , 0,
21038 0x0 }, /* P.LLD */
21039 { pool , P_SCD , 8 , 32,
21040 0xfc007f00, 0xa4007900, 0 , 0,
21041 0x0 }, /* P.SCD */
21045 static const Pool P_PREFE[2] = {
21046 { instruction , 0 , 0 , 32,
21047 0xffe07f00, 0xa7e01a00, &SYNCIE , 0,
21048 CP0_ | EVA_ }, /* SYNCIE */
21049 { instruction , 0 , 0 , 32,
21050 0xfc007f00, 0xa4001a00, &PREFE , &PREFE_cond ,
21051 CP0_ | EVA_ }, /* PREFE */
21055 static const Pool P_LLE[4] = {
21056 { instruction , 0 , 0 , 32,
21057 0xfc007f03, 0xa4005200, &LLE , 0,
21058 CP0_ | EVA_ }, /* LLE */
21059 { instruction , 0 , 0 , 32,
21060 0xfc007f03, 0xa4005201, &LLWPE , 0,
21061 CP0_ | EVA_ }, /* LLWPE */
21062 { reserved_block , 0 , 0 , 32,
21063 0xfc007f03, 0xa4005202, 0 , 0,
21064 0x0 }, /* P.LLE~*(2) */
21065 { reserved_block , 0 , 0 , 32,
21066 0xfc007f03, 0xa4005203, 0 , 0,
21067 0x0 }, /* P.LLE~*(3) */
21071 static const Pool P_SCE[4] = {
21072 { instruction , 0 , 0 , 32,
21073 0xfc007f03, 0xa4005a00, &SCE , 0,
21074 CP0_ | EVA_ }, /* SCE */
21075 { instruction , 0 , 0 , 32,
21076 0xfc007f03, 0xa4005a01, &SCWPE , 0,
21077 CP0_ | EVA_ }, /* SCWPE */
21078 { reserved_block , 0 , 0 , 32,
21079 0xfc007f03, 0xa4005a02, 0 , 0,
21080 0x0 }, /* P.SCE~*(2) */
21081 { reserved_block , 0 , 0 , 32,
21082 0xfc007f03, 0xa4005a03, 0 , 0,
21083 0x0 }, /* P.SCE~*(3) */
21087 static const Pool P_LS_E0[16] = {
21088 { instruction , 0 , 0 , 32,
21089 0xfc007f00, 0xa4000200, &LBE , 0,
21090 CP0_ | EVA_ }, /* LBE */
21091 { instruction , 0 , 0 , 32,
21092 0xfc007f00, 0xa4000a00, &SBE , 0,
21093 CP0_ | EVA_ }, /* SBE */
21094 { instruction , 0 , 0 , 32,
21095 0xfc007f00, 0xa4001200, &LBUE , 0,
21096 CP0_ | EVA_ }, /* LBUE */
21097 { pool , P_PREFE , 2 , 32,
21098 0xfc007f00, 0xa4001a00, 0 , 0,
21099 0x0 }, /* P.PREFE */
21100 { instruction , 0 , 0 , 32,
21101 0xfc007f00, 0xa4002200, &LHE , 0,
21102 CP0_ | EVA_ }, /* LHE */
21103 { instruction , 0 , 0 , 32,
21104 0xfc007f00, 0xa4002a00, &SHE , 0,
21105 CP0_ | EVA_ }, /* SHE */
21106 { instruction , 0 , 0 , 32,
21107 0xfc007f00, 0xa4003200, &LHUE , 0,
21108 CP0_ | EVA_ }, /* LHUE */
21109 { instruction , 0 , 0 , 32,
21110 0xfc007f00, 0xa4003a00, &CACHEE , 0,
21111 CP0_ | EVA_ }, /* CACHEE */
21112 { instruction , 0 , 0 , 32,
21113 0xfc007f00, 0xa4004200, &LWE , 0,
21114 CP0_ | EVA_ }, /* LWE */
21115 { instruction , 0 , 0 , 32,
21116 0xfc007f00, 0xa4004a00, &SWE , 0,
21117 CP0_ | EVA_ }, /* SWE */
21118 { pool , P_LLE , 4 , 32,
21119 0xfc007f00, 0xa4005200, 0 , 0,
21120 0x0 }, /* P.LLE */
21121 { pool , P_SCE , 4 , 32,
21122 0xfc007f00, 0xa4005a00, 0 , 0,
21123 0x0 }, /* P.SCE */
21124 { reserved_block , 0 , 0 , 32,
21125 0xfc007f00, 0xa4006200, 0 , 0,
21126 0x0 }, /* P.LS.E0~*(12) */
21127 { reserved_block , 0 , 0 , 32,
21128 0xfc007f00, 0xa4006a00, 0 , 0,
21129 0x0 }, /* P.LS.E0~*(13) */
21130 { reserved_block , 0 , 0 , 32,
21131 0xfc007f00, 0xa4007200, 0 , 0,
21132 0x0 }, /* P.LS.E0~*(14) */
21133 { reserved_block , 0 , 0 , 32,
21134 0xfc007f00, 0xa4007a00, 0 , 0,
21135 0x0 }, /* P.LS.E0~*(15) */
21139 static const Pool P_LS_WM[2] = {
21140 { instruction , 0 , 0 , 32,
21141 0xfc000f00, 0xa4000400, &LWM , 0,
21142 XMMS_ }, /* LWM */
21143 { instruction , 0 , 0 , 32,
21144 0xfc000f00, 0xa4000c00, &SWM , 0,
21145 XMMS_ }, /* SWM */
21149 static const Pool P_LS_UAWM[2] = {
21150 { instruction , 0 , 0 , 32,
21151 0xfc000f00, 0xa4000500, &UALWM , 0,
21152 XMMS_ }, /* UALWM */
21153 { instruction , 0 , 0 , 32,
21154 0xfc000f00, 0xa4000d00, &UASWM , 0,
21155 XMMS_ }, /* UASWM */
21159 static const Pool P_LS_DM[2] = {
21160 { instruction , 0 , 0 , 32,
21161 0xfc000f00, 0xa4000600, &LDM , 0,
21162 MIPS64_ }, /* LDM */
21163 { instruction , 0 , 0 , 32,
21164 0xfc000f00, 0xa4000e00, &SDM , 0,
21165 MIPS64_ }, /* SDM */
21169 static const Pool P_LS_UADM[2] = {
21170 { instruction , 0 , 0 , 32,
21171 0xfc000f00, 0xa4000700, &UALDM , 0,
21172 MIPS64_ }, /* UALDM */
21173 { instruction , 0 , 0 , 32,
21174 0xfc000f00, 0xa4000f00, &UASDM , 0,
21175 MIPS64_ }, /* UASDM */
21179 static const Pool P_LS_S9[8] = {
21180 { pool , P_LS_S0 , 16 , 32,
21181 0xfc000700, 0xa4000000, 0 , 0,
21182 0x0 }, /* P.LS.S0 */
21183 { pool , P_LS_S1 , 16 , 32,
21184 0xfc000700, 0xa4000100, 0 , 0,
21185 0x0 }, /* P.LS.S1 */
21186 { pool , P_LS_E0 , 16 , 32,
21187 0xfc000700, 0xa4000200, 0 , 0,
21188 0x0 }, /* P.LS.E0 */
21189 { reserved_block , 0 , 0 , 32,
21190 0xfc000700, 0xa4000300, 0 , 0,
21191 0x0 }, /* P.LS.S9~*(3) */
21192 { pool , P_LS_WM , 2 , 32,
21193 0xfc000700, 0xa4000400, 0 , 0,
21194 0x0 }, /* P.LS.WM */
21195 { pool , P_LS_UAWM , 2 , 32,
21196 0xfc000700, 0xa4000500, 0 , 0,
21197 0x0 }, /* P.LS.UAWM */
21198 { pool , P_LS_DM , 2 , 32,
21199 0xfc000700, 0xa4000600, 0 , 0,
21200 0x0 }, /* P.LS.DM */
21201 { pool , P_LS_UADM , 2 , 32,
21202 0xfc000700, 0xa4000700, 0 , 0,
21203 0x0 }, /* P.LS.UADM */
21207 static const Pool P_BAL[2] = {
21208 { branch_instruction , 0 , 0 , 32,
21209 0xfe000000, 0x28000000, &BC_32_ , 0,
21210 0x0 }, /* BC[32] */
21211 { call_instruction , 0 , 0 , 32,
21212 0xfe000000, 0x2a000000, &BALC_32_ , 0,
21213 0x0 }, /* BALC[32] */
21217 static const Pool P_BALRSC[2] = {
21218 { branch_instruction , 0 , 0 , 32,
21219 0xffe0f000, 0x48008000, &BRSC , 0,
21220 0x0 }, /* BRSC */
21221 { call_instruction , 0 , 0 , 32,
21222 0xfc00f000, 0x48008000, &BALRSC , &BALRSC_cond ,
21223 0x0 }, /* BALRSC */
21227 static const Pool P_J[16] = {
21228 { call_instruction , 0 , 0 , 32,
21229 0xfc00f000, 0x48000000, &JALRC_32_ , 0,
21230 0x0 }, /* JALRC[32] */
21231 { call_instruction , 0 , 0 , 32,
21232 0xfc00f000, 0x48001000, &JALRC_HB , 0,
21233 0x0 }, /* JALRC.HB */
21234 { reserved_block , 0 , 0 , 32,
21235 0xfc00f000, 0x48002000, 0 , 0,
21236 0x0 }, /* P.J~*(2) */
21237 { reserved_block , 0 , 0 , 32,
21238 0xfc00f000, 0x48003000, 0 , 0,
21239 0x0 }, /* P.J~*(3) */
21240 { reserved_block , 0 , 0 , 32,
21241 0xfc00f000, 0x48004000, 0 , 0,
21242 0x0 }, /* P.J~*(4) */
21243 { reserved_block , 0 , 0 , 32,
21244 0xfc00f000, 0x48005000, 0 , 0,
21245 0x0 }, /* P.J~*(5) */
21246 { reserved_block , 0 , 0 , 32,
21247 0xfc00f000, 0x48006000, 0 , 0,
21248 0x0 }, /* P.J~*(6) */
21249 { reserved_block , 0 , 0 , 32,
21250 0xfc00f000, 0x48007000, 0 , 0,
21251 0x0 }, /* P.J~*(7) */
21252 { pool , P_BALRSC , 2 , 32,
21253 0xfc00f000, 0x48008000, 0 , 0,
21254 0x0 }, /* P.BALRSC */
21255 { reserved_block , 0 , 0 , 32,
21256 0xfc00f000, 0x48009000, 0 , 0,
21257 0x0 }, /* P.J~*(9) */
21258 { reserved_block , 0 , 0 , 32,
21259 0xfc00f000, 0x4800a000, 0 , 0,
21260 0x0 }, /* P.J~*(10) */
21261 { reserved_block , 0 , 0 , 32,
21262 0xfc00f000, 0x4800b000, 0 , 0,
21263 0x0 }, /* P.J~*(11) */
21264 { reserved_block , 0 , 0 , 32,
21265 0xfc00f000, 0x4800c000, 0 , 0,
21266 0x0 }, /* P.J~*(12) */
21267 { reserved_block , 0 , 0 , 32,
21268 0xfc00f000, 0x4800d000, 0 , 0,
21269 0x0 }, /* P.J~*(13) */
21270 { reserved_block , 0 , 0 , 32,
21271 0xfc00f000, 0x4800e000, 0 , 0,
21272 0x0 }, /* P.J~*(14) */
21273 { reserved_block , 0 , 0 , 32,
21274 0xfc00f000, 0x4800f000, 0 , 0,
21275 0x0 }, /* P.J~*(15) */
21279 static const Pool P_BR3A[32] = {
21280 { branch_instruction , 0 , 0 , 32,
21281 0xfc1fc000, 0x88004000, &BC1EQZC , 0,
21282 CP1_ }, /* BC1EQZC */
21283 { branch_instruction , 0 , 0 , 32,
21284 0xfc1fc000, 0x88014000, &BC1NEZC , 0,
21285 CP1_ }, /* BC1NEZC */
21286 { branch_instruction , 0 , 0 , 32,
21287 0xfc1fc000, 0x88024000, &BC2EQZC , 0,
21288 CP2_ }, /* BC2EQZC */
21289 { branch_instruction , 0 , 0 , 32,
21290 0xfc1fc000, 0x88034000, &BC2NEZC , 0,
21291 CP2_ }, /* BC2NEZC */
21292 { branch_instruction , 0 , 0 , 32,
21293 0xfc1fc000, 0x88044000, &BPOSGE32C , 0,
21294 DSP_ }, /* BPOSGE32C */
21295 { reserved_block , 0 , 0 , 32,
21296 0xfc1fc000, 0x88054000, 0 , 0,
21297 0x0 }, /* P.BR3A~*(5) */
21298 { reserved_block , 0 , 0 , 32,
21299 0xfc1fc000, 0x88064000, 0 , 0,
21300 0x0 }, /* P.BR3A~*(6) */
21301 { reserved_block , 0 , 0 , 32,
21302 0xfc1fc000, 0x88074000, 0 , 0,
21303 0x0 }, /* P.BR3A~*(7) */
21304 { reserved_block , 0 , 0 , 32,
21305 0xfc1fc000, 0x88084000, 0 , 0,
21306 0x0 }, /* P.BR3A~*(8) */
21307 { reserved_block , 0 , 0 , 32,
21308 0xfc1fc000, 0x88094000, 0 , 0,
21309 0x0 }, /* P.BR3A~*(9) */
21310 { reserved_block , 0 , 0 , 32,
21311 0xfc1fc000, 0x880a4000, 0 , 0,
21312 0x0 }, /* P.BR3A~*(10) */
21313 { reserved_block , 0 , 0 , 32,
21314 0xfc1fc000, 0x880b4000, 0 , 0,
21315 0x0 }, /* P.BR3A~*(11) */
21316 { reserved_block , 0 , 0 , 32,
21317 0xfc1fc000, 0x880c4000, 0 , 0,
21318 0x0 }, /* P.BR3A~*(12) */
21319 { reserved_block , 0 , 0 , 32,
21320 0xfc1fc000, 0x880d4000, 0 , 0,
21321 0x0 }, /* P.BR3A~*(13) */
21322 { reserved_block , 0 , 0 , 32,
21323 0xfc1fc000, 0x880e4000, 0 , 0,
21324 0x0 }, /* P.BR3A~*(14) */
21325 { reserved_block , 0 , 0 , 32,
21326 0xfc1fc000, 0x880f4000, 0 , 0,
21327 0x0 }, /* P.BR3A~*(15) */
21328 { reserved_block , 0 , 0 , 32,
21329 0xfc1fc000, 0x88104000, 0 , 0,
21330 0x0 }, /* P.BR3A~*(16) */
21331 { reserved_block , 0 , 0 , 32,
21332 0xfc1fc000, 0x88114000, 0 , 0,
21333 0x0 }, /* P.BR3A~*(17) */
21334 { reserved_block , 0 , 0 , 32,
21335 0xfc1fc000, 0x88124000, 0 , 0,
21336 0x0 }, /* P.BR3A~*(18) */
21337 { reserved_block , 0 , 0 , 32,
21338 0xfc1fc000, 0x88134000, 0 , 0,
21339 0x0 }, /* P.BR3A~*(19) */
21340 { reserved_block , 0 , 0 , 32,
21341 0xfc1fc000, 0x88144000, 0 , 0,
21342 0x0 }, /* P.BR3A~*(20) */
21343 { reserved_block , 0 , 0 , 32,
21344 0xfc1fc000, 0x88154000, 0 , 0,
21345 0x0 }, /* P.BR3A~*(21) */
21346 { reserved_block , 0 , 0 , 32,
21347 0xfc1fc000, 0x88164000, 0 , 0,
21348 0x0 }, /* P.BR3A~*(22) */
21349 { reserved_block , 0 , 0 , 32,
21350 0xfc1fc000, 0x88174000, 0 , 0,
21351 0x0 }, /* P.BR3A~*(23) */
21352 { reserved_block , 0 , 0 , 32,
21353 0xfc1fc000, 0x88184000, 0 , 0,
21354 0x0 }, /* P.BR3A~*(24) */
21355 { reserved_block , 0 , 0 , 32,
21356 0xfc1fc000, 0x88194000, 0 , 0,
21357 0x0 }, /* P.BR3A~*(25) */
21358 { reserved_block , 0 , 0 , 32,
21359 0xfc1fc000, 0x881a4000, 0 , 0,
21360 0x0 }, /* P.BR3A~*(26) */
21361 { reserved_block , 0 , 0 , 32,
21362 0xfc1fc000, 0x881b4000, 0 , 0,
21363 0x0 }, /* P.BR3A~*(27) */
21364 { reserved_block , 0 , 0 , 32,
21365 0xfc1fc000, 0x881c4000, 0 , 0,
21366 0x0 }, /* P.BR3A~*(28) */
21367 { reserved_block , 0 , 0 , 32,
21368 0xfc1fc000, 0x881d4000, 0 , 0,
21369 0x0 }, /* P.BR3A~*(29) */
21370 { reserved_block , 0 , 0 , 32,
21371 0xfc1fc000, 0x881e4000, 0 , 0,
21372 0x0 }, /* P.BR3A~*(30) */
21373 { reserved_block , 0 , 0 , 32,
21374 0xfc1fc000, 0x881f4000, 0 , 0,
21375 0x0 }, /* P.BR3A~*(31) */
21379 static const Pool P_BR1[4] = {
21380 { branch_instruction , 0 , 0 , 32,
21381 0xfc00c000, 0x88000000, &BEQC_32_ , 0,
21382 0x0 }, /* BEQC[32] */
21383 { pool , P_BR3A , 32 , 32,
21384 0xfc00c000, 0x88004000, 0 , 0,
21385 0x0 }, /* P.BR3A */
21386 { branch_instruction , 0 , 0 , 32,
21387 0xfc00c000, 0x88008000, &BGEC , 0,
21388 0x0 }, /* BGEC */
21389 { branch_instruction , 0 , 0 , 32,
21390 0xfc00c000, 0x8800c000, &BGEUC , 0,
21391 0x0 }, /* BGEUC */
21395 static const Pool P_BR2[4] = {
21396 { branch_instruction , 0 , 0 , 32,
21397 0xfc00c000, 0xa8000000, &BNEC_32_ , 0,
21398 0x0 }, /* BNEC[32] */
21399 { reserved_block , 0 , 0 , 32,
21400 0xfc00c000, 0xa8004000, 0 , 0,
21401 0x0 }, /* P.BR2~*(1) */
21402 { branch_instruction , 0 , 0 , 32,
21403 0xfc00c000, 0xa8008000, &BLTC , 0,
21404 0x0 }, /* BLTC */
21405 { branch_instruction , 0 , 0 , 32,
21406 0xfc00c000, 0xa800c000, &BLTUC , 0,
21407 0x0 }, /* BLTUC */
21411 static const Pool P_BRI[8] = {
21412 { branch_instruction , 0 , 0 , 32,
21413 0xfc1c0000, 0xc8000000, &BEQIC , 0,
21414 0x0 }, /* BEQIC */
21415 { branch_instruction , 0 , 0 , 32,
21416 0xfc1c0000, 0xc8040000, &BBEQZC , 0,
21417 XMMS_ }, /* BBEQZC */
21418 { branch_instruction , 0 , 0 , 32,
21419 0xfc1c0000, 0xc8080000, &BGEIC , 0,
21420 0x0 }, /* BGEIC */
21421 { branch_instruction , 0 , 0 , 32,
21422 0xfc1c0000, 0xc80c0000, &BGEIUC , 0,
21423 0x0 }, /* BGEIUC */
21424 { branch_instruction , 0 , 0 , 32,
21425 0xfc1c0000, 0xc8100000, &BNEIC , 0,
21426 0x0 }, /* BNEIC */
21427 { branch_instruction , 0 , 0 , 32,
21428 0xfc1c0000, 0xc8140000, &BBNEZC , 0,
21429 XMMS_ }, /* BBNEZC */
21430 { branch_instruction , 0 , 0 , 32,
21431 0xfc1c0000, 0xc8180000, &BLTIC , 0,
21432 0x0 }, /* BLTIC */
21433 { branch_instruction , 0 , 0 , 32,
21434 0xfc1c0000, 0xc81c0000, &BLTIUC , 0,
21435 0x0 }, /* BLTIUC */
21439 static const Pool P32[32] = {
21440 { pool , P_ADDIU , 2 , 32,
21441 0xfc000000, 0x00000000, 0 , 0,
21442 0x0 }, /* P.ADDIU */
21443 { pool , P32A , 8 , 32,
21444 0xfc000000, 0x20000000, 0 , 0,
21445 0x0 }, /* P32A */
21446 { pool , P_GP_W , 4 , 32,
21447 0xfc000000, 0x40000000, 0 , 0,
21448 0x0 }, /* P.GP.W */
21449 { pool , POOL48I , 32 , 48,
21450 0xfc0000000000ull, 0x600000000000ull, 0 , 0,
21451 0x0 }, /* POOL48I */
21452 { pool , P_U12 , 16 , 32,
21453 0xfc000000, 0x80000000, 0 , 0,
21454 0x0 }, /* P.U12 */
21455 { pool , POOL32F , 8 , 32,
21456 0xfc000000, 0xa0000000, 0 , 0,
21457 CP1_ }, /* POOL32F */
21458 { pool , POOL32S , 8 , 32,
21459 0xfc000000, 0xc0000000, 0 , 0,
21460 0x0 }, /* POOL32S */
21461 { pool , P_LUI , 2 , 32,
21462 0xfc000000, 0xe0000000, 0 , 0,
21463 0x0 }, /* P.LUI */
21464 { instruction , 0 , 0 , 32,
21465 0xfc000000, 0x04000000, &ADDIUPC_32_ , 0,
21466 0x0 }, /* ADDIUPC[32] */
21467 { reserved_block , 0 , 0 , 32,
21468 0xfc000000, 0x24000000, 0 , 0,
21469 0x0 }, /* P32~*(5) */
21470 { pool , P_GP_BH , 8 , 32,
21471 0xfc000000, 0x44000000, 0 , 0,
21472 0x0 }, /* P.GP.BH */
21473 { reserved_block , 0 , 0 , 32,
21474 0xfc000000, 0x64000000, 0 , 0,
21475 0x0 }, /* P32~*(13) */
21476 { pool , P_LS_U12 , 16 , 32,
21477 0xfc000000, 0x84000000, 0 , 0,
21478 0x0 }, /* P.LS.U12 */
21479 { pool , P_LS_S9 , 8 , 32,
21480 0xfc000000, 0xa4000000, 0 , 0,
21481 0x0 }, /* P.LS.S9 */
21482 { reserved_block , 0 , 0 , 32,
21483 0xfc000000, 0xc4000000, 0 , 0,
21484 0x0 }, /* P32~*(25) */
21485 { reserved_block , 0 , 0 , 32,
21486 0xfc000000, 0xe4000000, 0 , 0,
21487 0x0 }, /* P32~*(29) */
21488 { call_instruction , 0 , 0 , 32,
21489 0xfc000000, 0x08000000, &MOVE_BALC , 0,
21490 XMMS_ }, /* MOVE.BALC */
21491 { pool , P_BAL , 2 , 32,
21492 0xfc000000, 0x28000000, 0 , 0,
21493 0x0 }, /* P.BAL */
21494 { pool , P_J , 16 , 32,
21495 0xfc000000, 0x48000000, 0 , 0,
21496 0x0 }, /* P.J */
21497 { reserved_block , 0 , 0 , 32,
21498 0xfc000000, 0x68000000, 0 , 0,
21499 0x0 }, /* P32~*(14) */
21500 { pool , P_BR1 , 4 , 32,
21501 0xfc000000, 0x88000000, 0 , 0,
21502 0x0 }, /* P.BR1 */
21503 { pool , P_BR2 , 4 , 32,
21504 0xfc000000, 0xa8000000, 0 , 0,
21505 0x0 }, /* P.BR2 */
21506 { pool , P_BRI , 8 , 32,
21507 0xfc000000, 0xc8000000, 0 , 0,
21508 0x0 }, /* P.BRI */
21509 { reserved_block , 0 , 0 , 32,
21510 0xfc000000, 0xe8000000, 0 , 0,
21511 0x0 }, /* P32~*(30) */
21512 { reserved_block , 0 , 0 , 32,
21513 0xfc000000, 0x0c000000, 0 , 0,
21514 0x0 }, /* P32~*(3) */
21515 { reserved_block , 0 , 0 , 32,
21516 0xfc000000, 0x2c000000, 0 , 0,
21517 0x0 }, /* P32~*(7) */
21518 { reserved_block , 0 , 0 , 32,
21519 0xfc000000, 0x4c000000, 0 , 0,
21520 0x0 }, /* P32~*(11) */
21521 { reserved_block , 0 , 0 , 32,
21522 0xfc000000, 0x6c000000, 0 , 0,
21523 0x0 }, /* P32~*(15) */
21524 { reserved_block , 0 , 0 , 32,
21525 0xfc000000, 0x8c000000, 0 , 0,
21526 0x0 }, /* P32~*(19) */
21527 { reserved_block , 0 , 0 , 32,
21528 0xfc000000, 0xac000000, 0 , 0,
21529 0x0 }, /* P32~*(23) */
21530 { reserved_block , 0 , 0 , 32,
21531 0xfc000000, 0xcc000000, 0 , 0,
21532 0x0 }, /* P32~*(27) */
21533 { reserved_block , 0 , 0 , 32,
21534 0xfc000000, 0xec000000, 0 , 0,
21535 0x0 }, /* P32~*(31) */
21539 static const Pool P16_SYSCALL[2] = {
21540 { instruction , 0 , 0 , 16,
21541 0xfffc , 0x1008 , &SYSCALL_16_ , 0,
21542 0x0 }, /* SYSCALL[16] */
21543 { instruction , 0 , 0 , 16,
21544 0xfffc , 0x100c , &HYPCALL_16_ , 0,
21545 CP0_ | VZ_ }, /* HYPCALL[16] */
21549 static const Pool P16_RI[4] = {
21550 { reserved_block , 0 , 0 , 16,
21551 0xfff8 , 0x1000 , 0 , 0,
21552 0x0 }, /* P16.RI~*(0) */
21553 { pool , P16_SYSCALL , 2 , 16,
21554 0xfff8 , 0x1008 , 0 , 0,
21555 0x0 }, /* P16.SYSCALL */
21556 { instruction , 0 , 0 , 16,
21557 0xfff8 , 0x1010 , &BREAK_16_ , 0,
21558 0x0 }, /* BREAK[16] */
21559 { instruction , 0 , 0 , 16,
21560 0xfff8 , 0x1018 , &SDBBP_16_ , 0,
21561 EJTAG_ }, /* SDBBP[16] */
21565 static const Pool P16_MV[2] = {
21566 { pool , P16_RI , 4 , 16,
21567 0xffe0 , 0x1000 , 0 , 0,
21568 0x0 }, /* P16.RI */
21569 { instruction , 0 , 0 , 16,
21570 0xfc00 , 0x1000 , &MOVE , &MOVE_cond ,
21571 0x0 }, /* MOVE */
21575 static const Pool P16_SHIFT[2] = {
21576 { instruction , 0 , 0 , 16,
21577 0xfc08 , 0x3000 , &SLL_16_ , 0,
21578 0x0 }, /* SLL[16] */
21579 { instruction , 0 , 0 , 16,
21580 0xfc08 , 0x3008 , &SRL_16_ , 0,
21581 0x0 }, /* SRL[16] */
21585 static const Pool POOL16C_00[4] = {
21586 { instruction , 0 , 0 , 16,
21587 0xfc0f , 0x5000 , &NOT_16_ , 0,
21588 0x0 }, /* NOT[16] */
21589 { instruction , 0 , 0 , 16,
21590 0xfc0f , 0x5004 , &XOR_16_ , 0,
21591 0x0 }, /* XOR[16] */
21592 { instruction , 0 , 0 , 16,
21593 0xfc0f , 0x5008 , &AND_16_ , 0,
21594 0x0 }, /* AND[16] */
21595 { instruction , 0 , 0 , 16,
21596 0xfc0f , 0x500c , &OR_16_ , 0,
21597 0x0 }, /* OR[16] */
21601 static const Pool POOL16C_0[2] = {
21602 { pool , POOL16C_00 , 4 , 16,
21603 0xfc03 , 0x5000 , 0 , 0,
21604 0x0 }, /* POOL16C_00 */
21605 { reserved_block , 0 , 0 , 16,
21606 0xfc03 , 0x5002 , 0 , 0,
21607 0x0 }, /* POOL16C_0~*(1) */
21611 static const Pool P16C[2] = {
21612 { pool , POOL16C_0 , 2 , 16,
21613 0xfc01 , 0x5000 , 0 , 0,
21614 0x0 }, /* POOL16C_0 */
21615 { instruction , 0 , 0 , 16,
21616 0xfc01 , 0x5001 , &LWXS_16_ , 0,
21617 0x0 }, /* LWXS[16] */
21621 static const Pool P16_A1[2] = {
21622 { reserved_block , 0 , 0 , 16,
21623 0xfc40 , 0x7000 , 0 , 0,
21624 0x0 }, /* P16.A1~*(0) */
21625 { instruction , 0 , 0 , 16,
21626 0xfc40 , 0x7040 , &ADDIU_R1_SP_ , 0,
21627 0x0 }, /* ADDIU[R1.SP] */
21631 static const Pool P_ADDIU_RS5_[2] = {
21632 { instruction , 0 , 0 , 16,
21633 0xffe8 , 0x9008 , &NOP_16_ , 0,
21634 0x0 }, /* NOP[16] */
21635 { instruction , 0 , 0 , 16,
21636 0xfc08 , 0x9008 , &ADDIU_RS5_ , &ADDIU_RS5__cond ,
21637 0x0 }, /* ADDIU[RS5] */
21641 static const Pool P16_A2[2] = {
21642 { instruction , 0 , 0 , 16,
21643 0xfc08 , 0x9000 , &ADDIU_R2_ , 0,
21644 0x0 }, /* ADDIU[R2] */
21645 { pool , P_ADDIU_RS5_ , 2 , 16,
21646 0xfc08 , 0x9008 , 0 , 0,
21647 0x0 }, /* P.ADDIU[RS5] */
21651 static const Pool P16_ADDU[2] = {
21652 { instruction , 0 , 0 , 16,
21653 0xfc01 , 0xb000 , &ADDU_16_ , 0,
21654 0x0 }, /* ADDU[16] */
21655 { instruction , 0 , 0 , 16,
21656 0xfc01 , 0xb001 , &SUBU_16_ , 0,
21657 0x0 }, /* SUBU[16] */
21661 static const Pool P16_JRC[2] = {
21662 { branch_instruction , 0 , 0 , 16,
21663 0xfc1f , 0xd800 , &JRC , 0,
21664 0x0 }, /* JRC */
21665 { call_instruction , 0 , 0 , 16,
21666 0xfc1f , 0xd810 , &JALRC_16_ , 0,
21667 0x0 }, /* JALRC[16] */
21671 static const Pool P16_BR1[2] = {
21672 { branch_instruction , 0 , 0 , 16,
21673 0xfc00 , 0xd800 , &BEQC_16_ , &BEQC_16__cond ,
21674 XMMS_ }, /* BEQC[16] */
21675 { branch_instruction , 0 , 0 , 16,
21676 0xfc00 , 0xd800 , &BNEC_16_ , &BNEC_16__cond ,
21677 XMMS_ }, /* BNEC[16] */
21681 static const Pool P16_BR[2] = {
21682 { pool , P16_JRC , 2 , 16,
21683 0xfc0f , 0xd800 , 0 , 0,
21684 0x0 }, /* P16.JRC */
21685 { pool , P16_BR1 , 2 , 16,
21686 0xfc00 , 0xd800 , 0 , &P16_BR1_cond ,
21687 0x0 }, /* P16.BR1 */
21691 static const Pool P16_SR[2] = {
21692 { instruction , 0 , 0 , 16,
21693 0xfd00 , 0x1c00 , &SAVE_16_ , 0,
21694 0x0 }, /* SAVE[16] */
21695 { return_instruction , 0 , 0 , 16,
21696 0xfd00 , 0x1d00 , &RESTORE_JRC_16_ , 0,
21697 0x0 }, /* RESTORE.JRC[16] */
21701 static const Pool P16_4X4[4] = {
21702 { instruction , 0 , 0 , 16,
21703 0xfd08 , 0x3c00 , &ADDU_4X4_ , 0,
21704 XMMS_ }, /* ADDU[4X4] */
21705 { instruction , 0 , 0 , 16,
21706 0xfd08 , 0x3c08 , &MUL_4X4_ , 0,
21707 XMMS_ }, /* MUL[4X4] */
21708 { reserved_block , 0 , 0 , 16,
21709 0xfd08 , 0x3d00 , 0 , 0,
21710 0x0 }, /* P16.4X4~*(2) */
21711 { reserved_block , 0 , 0 , 16,
21712 0xfd08 , 0x3d08 , 0 , 0,
21713 0x0 }, /* P16.4X4~*(3) */
21717 static const Pool P16_LB[4] = {
21718 { instruction , 0 , 0 , 16,
21719 0xfc0c , 0x5c00 , &LB_16_ , 0,
21720 0x0 }, /* LB[16] */
21721 { instruction , 0 , 0 , 16,
21722 0xfc0c , 0x5c04 , &SB_16_ , 0,
21723 0x0 }, /* SB[16] */
21724 { instruction , 0 , 0 , 16,
21725 0xfc0c , 0x5c08 , &LBU_16_ , 0,
21726 0x0 }, /* LBU[16] */
21727 { reserved_block , 0 , 0 , 16,
21728 0xfc0c , 0x5c0c , 0 , 0,
21729 0x0 }, /* P16.LB~*(3) */
21733 static const Pool P16_LH[4] = {
21734 { instruction , 0 , 0 , 16,
21735 0xfc09 , 0x7c00 , &LH_16_ , 0,
21736 0x0 }, /* LH[16] */
21737 { instruction , 0 , 0 , 16,
21738 0xfc09 , 0x7c01 , &SH_16_ , 0,
21739 0x0 }, /* SH[16] */
21740 { instruction , 0 , 0 , 16,
21741 0xfc09 , 0x7c08 , &LHU_16_ , 0,
21742 0x0 }, /* LHU[16] */
21743 { reserved_block , 0 , 0 , 16,
21744 0xfc09 , 0x7c09 , 0 , 0,
21745 0x0 }, /* P16.LH~*(3) */
21749 static const Pool P16[32] = {
21750 { pool , P16_MV , 2 , 16,
21751 0xfc00 , 0x1000 , 0 , 0,
21752 0x0 }, /* P16.MV */
21753 { pool , P16_SHIFT , 2 , 16,
21754 0xfc00 , 0x3000 , 0 , 0,
21755 0x0 }, /* P16.SHIFT */
21756 { pool , P16C , 2 , 16,
21757 0xfc00 , 0x5000 , 0 , 0,
21758 0x0 }, /* P16C */
21759 { pool , P16_A1 , 2 , 16,
21760 0xfc00 , 0x7000 , 0 , 0,
21761 0x0 }, /* P16.A1 */
21762 { pool , P16_A2 , 2 , 16,
21763 0xfc00 , 0x9000 , 0 , 0,
21764 0x0 }, /* P16.A2 */
21765 { pool , P16_ADDU , 2 , 16,
21766 0xfc00 , 0xb000 , 0 , 0,
21767 0x0 }, /* P16.ADDU */
21768 { instruction , 0 , 0 , 16,
21769 0xfc00 , 0xd000 , &LI_16_ , 0,
21770 0x0 }, /* LI[16] */
21771 { instruction , 0 , 0 , 16,
21772 0xfc00 , 0xf000 , &ANDI_16_ , 0,
21773 0x0 }, /* ANDI[16] */
21774 { instruction , 0 , 0 , 16,
21775 0xfc00 , 0x1400 , &LW_16_ , 0,
21776 0x0 }, /* LW[16] */
21777 { instruction , 0 , 0 , 16,
21778 0xfc00 , 0x3400 , &LW_SP_ , 0,
21779 0x0 }, /* LW[SP] */
21780 { instruction , 0 , 0 , 16,
21781 0xfc00 , 0x5400 , &LW_GP16_ , 0,
21782 0x0 }, /* LW[GP16] */
21783 { instruction , 0 , 0 , 16,
21784 0xfc00 , 0x7400 , &LW_4X4_ , 0,
21785 XMMS_ }, /* LW[4X4] */
21786 { instruction , 0 , 0 , 16,
21787 0xfc00 , 0x9400 , &SW_16_ , 0,
21788 0x0 }, /* SW[16] */
21789 { instruction , 0 , 0 , 16,
21790 0xfc00 , 0xb400 , &SW_SP_ , 0,
21791 0x0 }, /* SW[SP] */
21792 { instruction , 0 , 0 , 16,
21793 0xfc00 , 0xd400 , &SW_GP16_ , 0,
21794 0x0 }, /* SW[GP16] */
21795 { instruction , 0 , 0 , 16,
21796 0xfc00 , 0xf400 , &SW_4X4_ , 0,
21797 XMMS_ }, /* SW[4X4] */
21798 { branch_instruction , 0 , 0 , 16,
21799 0xfc00 , 0x1800 , &BC_16_ , 0,
21800 0x0 }, /* BC[16] */
21801 { call_instruction , 0 , 0 , 16,
21802 0xfc00 , 0x3800 , &BALC_16_ , 0,
21803 0x0 }, /* BALC[16] */
21804 { reserved_block , 0 , 0 , 16,
21805 0xfc00 , 0x5800 , 0 , 0,
21806 0x0 }, /* P16~*(10) */
21807 { reserved_block , 0 , 0 , 16,
21808 0xfc00 , 0x7800 , 0 , 0,
21809 0x0 }, /* P16~*(14) */
21810 { branch_instruction , 0 , 0 , 16,
21811 0xfc00 , 0x9800 , &BEQZC_16_ , 0,
21812 0x0 }, /* BEQZC[16] */
21813 { branch_instruction , 0 , 0 , 16,
21814 0xfc00 , 0xb800 , &BNEZC_16_ , 0,
21815 0x0 }, /* BNEZC[16] */
21816 { pool , P16_BR , 2 , 16,
21817 0xfc00 , 0xd800 , 0 , 0,
21818 0x0 }, /* P16.BR */
21819 { reserved_block , 0 , 0 , 16,
21820 0xfc00 , 0xf800 , 0 , 0,
21821 0x0 }, /* P16~*(30) */
21822 { pool , P16_SR , 2 , 16,
21823 0xfc00 , 0x1c00 , 0 , 0,
21824 0x0 }, /* P16.SR */
21825 { pool , P16_4X4 , 4 , 16,
21826 0xfc00 , 0x3c00 , 0 , 0,
21827 0x0 }, /* P16.4X4 */
21828 { pool , P16_LB , 4 , 16,
21829 0xfc00 , 0x5c00 , 0 , 0,
21830 0x0 }, /* P16.LB */
21831 { pool , P16_LH , 4 , 16,
21832 0xfc00 , 0x7c00 , 0 , 0,
21833 0x0 }, /* P16.LH */
21834 { reserved_block , 0 , 0 , 16,
21835 0xfc00 , 0x9c00 , 0 , 0,
21836 0x0 }, /* P16~*(19) */
21837 { instruction , 0 , 0 , 16,
21838 0xfc00 , 0xbc00 , &MOVEP , 0,
21839 XMMS_ }, /* MOVEP */
21840 { reserved_block , 0 , 0 , 16,
21841 0xfc00 , 0xdc00 , 0 , 0,
21842 0x0 }, /* P16~*(27) */
21843 { instruction , 0 , 0 , 16,
21844 0xfc00 , 0xfc00 , &MOVEP_REV_ , 0,
21845 XMMS_ }, /* MOVEP[REV] */
21849 static const Pool MAJOR[2] = {
21850 { pool , P32 , 32 , 32,
21851 0x10000000, 0x00000000, 0 , 0,
21852 0x0 }, /* P32 */
21853 { pool , P16 , 32 , 16,
21854 0x1000 , 0x1000 , 0 , 0,
21855 0x0 }, /* P16 */
21859 * Recurse through tables until the instruction is found then return
21860 * the string and size
21862 * inputs:
21863 * pointer to a word stream,
21864 * disassember table and size
21865 * returns:
21866 * instruction size - negative is error
21867 * disassembly string - on error will constain error string
21869 static int Disassemble(const uint16 *data, char **dis,
21870 TABLE_ENTRY_TYPE *type, const Pool *table,
21871 int table_size, Dis_info *info)
21873 for (int i = 0; i < table_size; i++) {
21874 uint64 op_code = extract_op_code_value(data,
21875 table[i].instructions_size);
21876 if ((op_code & table[i].mask) == table[i].value) {
21877 /* possible match */
21878 conditional_function cond = table[i].condition;
21879 if ((cond == NULL) || cond(op_code)) {
21880 if (table[i].type == pool) {
21881 return Disassemble(data, dis, type,
21882 table[i].next_table,
21883 table[i].next_table_size,
21884 info);
21885 } else if ((table[i].type == instruction) ||
21886 (table[i].type == call_instruction) ||
21887 (table[i].type == branch_instruction) ||
21888 (table[i].type == return_instruction)) {
21889 disassembly_function dis_fn = table[i].disassembly;
21890 if (dis_fn == 0) {
21891 *dis = g_strdup(
21892 "disassembler failure - bad table entry");
21893 return -6;
21895 *type = table[i].type;
21896 *dis = dis_fn(op_code, info);
21897 return table[i].instructions_size;
21898 } else {
21899 *dis = g_strdup("reserved instruction");
21900 return -2;
21905 *dis = g_strdup("failed to disassemble");
21906 return -1; /* failed to disassemble */
21910 static bool nanomips_dis(const uint16_t *data, char **buf, Dis_info *info)
21912 TABLE_ENTRY_TYPE type;
21914 /* Handle runtime errors. */
21915 if (unlikely(sigsetjmp(info->buf, 0) != 0)) {
21916 return false;
21918 return Disassemble(data, buf, &type, MAJOR, ARRAY_SIZE(MAJOR), info) >= 0;
21921 static bool read_u16(uint16_t *ret, bfd_vma memaddr,
21922 struct disassemble_info *info)
21924 int status = (*info->read_memory_func)(memaddr, (bfd_byte *)ret, 2, info);
21925 if (status != 0) {
21926 (*info->memory_error_func)(status, memaddr, info);
21927 return false;
21930 if ((info->endian == BFD_ENDIAN_BIG) != HOST_BIG_ENDIAN) {
21931 bswap16s(ret);
21933 return true;
21936 int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
21938 int length;
21939 uint16_t words[3] = { };
21940 g_autofree char *buf = NULL;
21942 info->bytes_per_chunk = 2;
21943 info->display_endian = info->endian;
21944 info->insn_info_valid = 1;
21945 info->branch_delay_insns = 0;
21946 info->data_size = 0;
21947 info->insn_type = dis_nonbranch;
21948 info->target = 0;
21949 info->target2 = 0;
21951 Dis_info disassm_info;
21952 disassm_info.m_pc = memaddr;
21953 disassm_info.fprintf_func = info->fprintf_func;
21954 disassm_info.stream = info->stream;
21956 if (!read_u16(&words[0], memaddr, info)) {
21957 return -1;
21959 length = 2;
21961 /* Handle 32-bit opcodes. */
21962 if ((words[0] & 0x1000) == 0) {
21963 if (!read_u16(&words[1], memaddr + 2, info)) {
21964 return -1;
21966 length = 4;
21968 /* Handle 48-bit opcodes. */
21969 if ((words[0] >> 10) == 0x18) {
21970 if (!read_u16(&words[1], memaddr + 4, info)) {
21971 return -1;
21973 length = 6;
21977 for (int i = 0; i < ARRAY_SIZE(words); i++) {
21978 if (i * 2 < length) {
21979 (*info->fprintf_func)(info->stream, "%04x ", words[i]);
21980 } else {
21981 (*info->fprintf_func)(info->stream, " ");
21985 if (nanomips_dis(words, &buf, &disassm_info)) {
21986 (*info->fprintf_func) (info->stream, "%s", buf);
21989 return length;