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"
41 #define IMGASSERTONCE(test)
44 static int nanomips_dis(char *buf
,
51 uint16 bits
[3] = {one
, two
, three
};
53 TABLE_ENTRY_TYPE type
;
55 int size
= d
.Disassemble(bits
, disasm
, type
, info
);
57 strcpy(buf
, disasm
.c_str());
61 int print_insn_nanomips(bfd_vma memaddr
, struct disassemble_info
*info
)
65 uint16_t insn1
= 0, insn2
= 0, insn3
= 0;
68 info
->bytes_per_chunk
= 2;
69 info
->display_endian
= info
->endian
;
70 info
->insn_info_valid
= 1;
71 info
->branch_delay_insns
= 0;
73 info
->insn_type
= dis_nonbranch
;
77 Dis_info disassm_info
;
78 disassm_info
.m_pc
= memaddr
;
80 status
= (*info
->read_memory_func
)(memaddr
, buffer
, 2, info
);
82 (*info
->memory_error_func
)(status
, memaddr
, info
);
86 if (info
->endian
== BFD_ENDIAN_BIG
) {
87 insn1
= bfd_getb16(buffer
);
89 insn1
= bfd_getl16(buffer
);
91 (*info
->fprintf_func
)(info
->stream
, "%04x ", insn1
);
93 /* Handle 32-bit opcodes. */
94 if ((insn1
& 0x1000) == 0) {
95 status
= (*info
->read_memory_func
)(memaddr
+ 2, buffer
, 2, info
);
97 (*info
->memory_error_func
)(status
, memaddr
+ 2, info
);
101 if (info
->endian
== BFD_ENDIAN_BIG
) {
102 insn2
= bfd_getb16(buffer
);
104 insn2
= bfd_getl16(buffer
);
106 (*info
->fprintf_func
)(info
->stream
, "%04x ", insn2
);
108 (*info
->fprintf_func
)(info
->stream
, " ");
110 /* Handle 48-bit opcodes. */
111 if ((insn1
>> 10) == 0x18) {
112 status
= (*info
->read_memory_func
)(memaddr
+ 4, buffer
, 2, info
);
114 (*info
->memory_error_func
)(status
, memaddr
+ 4, info
);
118 if (info
->endian
== BFD_ENDIAN_BIG
) {
119 insn3
= bfd_getb16(buffer
);
121 insn3
= bfd_getl16(buffer
);
123 (*info
->fprintf_func
)(info
->stream
, "%04x ", insn3
);
125 (*info
->fprintf_func
)(info
->stream
, " ");
128 int length
= nanomips_dis(buf
, &disassm_info
, insn1
, insn2
, insn3
);
130 /* FIXME: Should probably use a hash table on the major opcode here. */
132 (*info
->fprintf_func
) (info
->stream
, "%s", buf
);
137 info
->insn_type
= dis_noninsn
;
139 return insn3
? 6 : insn2
? 4 : 2;
143 std::string
img_format(const char *format
, ...)
147 va_start(args
, format
);
148 int err
= vsprintf(buffer
, format
, args
);
156 std::string
img_format(const char *format
,
161 sprintf(buffer
, format
, s
.c_str());
166 std::string
img_format(const char *format
,
172 sprintf(buffer
, format
, s1
.c_str(), s2
.c_str());
177 std::string
img_format(const char *format
,
184 sprintf(buffer
, format
, s1
.c_str(), s2
.c_str(), s3
.c_str());
189 std::string
img_format(const char *format
,
197 sprintf(buffer
, format
, s1
.c_str(), s2
.c_str(), s3
.c_str(),
203 std::string
img_format(const char *format
,
212 sprintf(buffer
, format
, s1
.c_str(), s2
.c_str(), s3
.c_str(),
213 s4
.c_str(), s5
.c_str());
218 std::string
img_format(const char *format
,
224 sprintf(buffer
, format
, d
, s2
.c_str());
229 std::string
img_format(const char *format
,
236 sprintf(buffer
, format
, s1
.c_str(), d
, s2
.c_str());
241 std::string
img_format(const char *format
,
248 sprintf(buffer
, format
, s1
.c_str(), s2
.c_str(), d
);
254 std::string
to_string(img_address a
)
257 sprintf(buffer
, "0x%" PRIx64
, a
);
262 static uint64
extract_bits(uint64 data
, uint32 bit_offset
, uint32 bit_size
)
264 return (data
<< (64 - (bit_size
+ bit_offset
))) >> (64 - bit_size
);
268 static int64
sign_extend(int64 data
, int msb
)
270 uint64 shift
= 63 - msb
;
271 return (data
<< shift
) >> shift
;
275 static uint64
renumber_registers(uint64 index
, uint64
*register_list
,
276 size_t register_list_size
)
278 if (index
< register_list_size
) {
279 return register_list
[index
];
282 throw std::runtime_error(img_format(
283 "Invalid register mapping index %" PRIu64
284 ", size of list = %zu",
285 index
, register_list_size
));
290 * decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
292 * Map a 4-bit code to the 5-bit register space according to this pattern:
295 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
296 * | | | | | | | | | | | | | | | |
297 * | | | | | | | | | | | | | | | |
298 * | | | | | | | | | | | ā---------------ā
299 * | | | | | | | | | | ā---------------ā |
300 * | | | | | | | | | ā---------------ā | |
301 * | | | | | | | | ā---------------ā | | |
302 * | | | | | | | | | | | | | | | |
303 * | | | | | | | | | | | | | | | |
304 * 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
307 * Used in handling following instructions:
315 static uint64
decode_gpr_gpr4(uint64 d
)
317 static uint64 register_list
[] = { 8, 9, 10, 11, 4, 5, 6, 7,
318 16, 17, 18, 19, 20, 21, 22, 23 };
319 return renumber_registers(d
, register_list
,
320 sizeof(register_list
) / sizeof(register_list
[0]));
325 * decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
327 * Map a 4-bit code to the 5-bit register space according to this pattern:
330 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
331 * | | | | | | | | | | | | | | | |
332 * | | | | | | | | | | | | ā---------------------ā
333 * | | | | | | | | | | | ā---------------ā |
334 * | | | | | | | | | | ā---------------ā | |
335 * | | | | | | | | | ā---------------ā | | |
336 * | | | | | | | | ā---------------ā | | | |
337 * | | | | | | | | | | | | | | | |
338 * | | | | | | | | | | | | | | | |
339 * 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
342 * This pattern is the same one used for 'gpr4' gpr encoding type, except for
343 * the input value 3, that is mapped to the output value 0 instead of 11.
345 * Used in handling following instructions:
351 static uint64
decode_gpr_gpr4_zero(uint64 d
)
353 static uint64 register_list
[] = { 8, 9, 10, 0, 4, 5, 6, 7,
354 16, 17, 18, 19, 20, 21, 22, 23 };
355 return renumber_registers(d
, register_list
,
356 sizeof(register_list
) / sizeof(register_list
[0]));
361 * decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
363 * Map a 3-bit code to the 5-bit register space according to this pattern:
368 * | | | ā-----------------------ā
369 * | | ā-----------------------ā |
370 * | ā-----------------------ā | |
371 * ā-----------------------ā | | |
373 * ā-------ā | | | | | | |
374 * | ā-------ā | | | | | |
375 * | | ā-------ā | | | | |
376 * | | | ā-------ā | | | |
378 * 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
381 * Used in handling following instructions:
410 static uint64
decode_gpr_gpr3(uint64 d
)
412 static uint64 register_list
[] = { 16, 17, 18, 19, 4, 5, 6, 7 };
413 return renumber_registers(d
, register_list
,
414 sizeof(register_list
) / sizeof(register_list
[0]));
419 * decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding
422 * Map a 3-bit code to the 5-bit register space according to this pattern:
426 * | | | | | | | ā-----------------------ā
427 * | | | ā-----------------------ā |
428 * | | ā-----------------------ā | |
429 * | ā-----------------------ā | | |
430 * ā-----------------------ā | | | |
432 * ā-------ā | | | | | | |
433 * | ā-------ā | | | | | |
434 * | | ā-------ā | | | | |
437 * 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
440 * This pattern is the same one used for 'gpr3' gpr encoding type, except for
441 * the input value 0, that is mapped to the output value 0 instead of 16.
443 * Used in handling following instructions:
450 static uint64
decode_gpr_gpr3_src_store(uint64 d
)
452 static uint64 register_list
[] = { 0, 17, 18, 19, 4, 5, 6, 7 };
453 return renumber_registers(d
, register_list
,
454 sizeof(register_list
) / sizeof(register_list
[0]));
459 * decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
461 * Map a 2-bit code to the 5-bit register space according to this pattern:
466 * | | | ā-------------------ā
467 * | | ā-------------------ā |
468 * | ā-------------------ā | |
469 * ā-------------------ā | | |
472 * 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
475 * Used in handling following instructions:
480 static uint64
decode_gpr_gpr2_reg1(uint64 d
)
482 static uint64 register_list
[] = { 4, 5, 6, 7 };
483 return renumber_registers(d
, register_list
,
484 sizeof(register_list
) / sizeof(register_list
[0]));
489 * decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type
491 * Map a 2-bit code to the 5-bit register space according to this pattern:
496 * | | | ā-----------------ā
497 * | | ā-----------------ā |
498 * | ā-----------------ā | |
499 * ā-----------------ā | | |
502 * 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
505 * Used in handling following instructions:
510 static uint64
decode_gpr_gpr2_reg2(uint64 d
)
512 static uint64 register_list
[] = { 5, 6, 7, 8 };
513 return renumber_registers(d
, register_list
,
514 sizeof(register_list
) / sizeof(register_list
[0]));
519 * decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
521 * Map a 1-bit code to the 5-bit register space according to this pattern:
526 * | ā---------------------ā
527 * ā---------------------ā |
532 * 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
535 * Used in handling following instruction:
539 static uint64
decode_gpr_gpr1(uint64 d
)
541 static uint64 register_list
[] = { 4, 5 };
542 return renumber_registers(d
, register_list
,
543 sizeof(register_list
) / sizeof(register_list
[0]));
547 static uint64
copy(uint64 d
)
553 static int64
copy(int64 d
)
559 static int64
neg_copy(uint64 d
)
565 /* strange wrapper around gpr3 */
566 static uint64
encode_rs3_and_check_rs3_ge_rt3(uint64 d
)
568 return decode_gpr_gpr3(d
);
572 /* strange wrapper around gpr3 */
573 static uint64
encode_rs3_and_check_rs3_lt_rt3(uint64 d
)
575 return decode_gpr_gpr3(d
);
579 /* nop - done by extraction function */
580 static uint64
encode_s_from_address(uint64 d
)
586 /* nop - done by extraction function */
587 static uint64
encode_u_from_address(uint64 d
)
593 static uint64
encode_count3_from_count(uint64 d
)
595 IMGASSERTONCE(d
< 8);
596 return d
== 0ull ? 8ull : d
;
600 static uint64
encode_shift3_from_shift(uint64 d
)
602 IMGASSERTONCE(d
< 8);
603 return d
== 0ull ? 8ull : d
;
607 /* special value for load literal */
608 static int64
encode_eu_from_s_li16(uint64 d
)
610 IMGASSERTONCE(d
< 128);
611 return d
== 127 ? -1 : (int64
)d
;
615 static uint64
encode_msbd_from_size(uint64 d
)
617 IMGASSERTONCE(d
< 32);
622 static uint64
encode_eu_from_u_andi16(uint64 d
)
624 IMGASSERTONCE(d
< 16);
635 /* save16 / restore16 ???? */
636 static uint64
encode_rt1_from_rt(uint64 d
)
643 static uint64
encode_lsb_from_pos_and_size(uint64 d
)
649 static std::string
GPR(uint64 reg
)
651 static const char *gpr_reg
[32] = {
652 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
653 "a4", "a5", "a6", "a7", "r12", "r13", "r14", "r15",
654 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
655 "r24", "r25", "k0", "k1", "gp", "sp", "fp", "ra"
662 throw std::runtime_error(img_format("Invalid GPR register index %" PRIu64
,
667 static std::string
save_restore_list(uint64 rt
, uint64 count
, uint64 gp
)
671 for (uint64 counter
= 0; counter
!= count
; counter
++) {
672 bool use_gp
= gp
&& (counter
== count
- 1);
673 uint64 this_rt
= use_gp
? 28 : ((rt
& 0x10) | (rt
+ counter
)) & 0x1f;
674 str
+= img_format(",%s", GPR(this_rt
));
681 static std::string
FPR(uint64 reg
)
683 static const char *fpr_reg
[32] = {
684 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
685 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
686 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
687 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
694 throw std::runtime_error(img_format("Invalid FPR register index %" PRIu64
,
699 static std::string
AC(uint64 reg
)
701 static const char *ac_reg
[4] = {
702 "ac0", "ac1", "ac2", "ac3"
709 throw std::runtime_error(img_format("Invalid AC register index %" PRIu64
,
714 static std::string
IMMEDIATE(uint64 value
)
716 return img_format("0x%" PRIx64
, value
);
720 static std::string
IMMEDIATE(int64 value
)
722 return img_format("%" PRId64
, value
);
726 static std::string
CPR(uint64 reg
)
728 /* needs more work */
729 return img_format("CP%" PRIu64
, reg
);
733 static std::string
ADDRESS(uint64 value
, int instruction_size
, Dis_info
*info
)
735 /* token for string replace */
736 img_address address
= info
->m_pc
+ value
+ instruction_size
;
737 /* symbol replacement */
738 return to_string(address
);
742 uint64
NMD::extract_op_code_value(const uint16
* data
, int size
)
748 return ((uint64
)data
[0] << 16) | data
[1];
750 return ((uint64
)data
[0] << 32) | ((uint64
)data
[1] << 16) | data
[2];
758 * Recurse through tables until the instruction is found then return
759 * the string and size
762 * pointer to a word stream,
763 * disassember table and size
765 * instruction size - negative is error
766 * disassembly string - on error will constain error string
768 int NMD::Disassemble(const uint16
* data
, std::string
& dis
,
769 TABLE_ENTRY_TYPE
& type
, const Pool
*table
,
770 int table_size
, Dis_info
*info
)
774 for (int i
= 0; i
< table_size
; i
++) {
775 uint64 op_code
= extract_op_code_value(data
,
776 table
[i
].instructions_size
);
777 if ((op_code
& table
[i
].mask
) == table
[i
].value
) {
779 conditional_function cond
= table
[i
].condition
;
780 if ((cond
== NULL
) || cond(op_code
)) {
783 if (table
[i
].type
== pool
) {
784 return Disassemble(data
, dis
, type
,
786 table
[i
].next_table_size
,
788 } else if ((table
[i
].type
== instruction
) ||
789 (table
[i
].type
== call_instruction
) ||
790 (table
[i
].type
== branch_instruction
) ||
791 (table
[i
].type
== return_instruction
)) {
792 disassembly_function dis_fn
= table
[i
].disassembly
;
794 dis
= "disassembler failure - bad table entry";
797 type
= table
[i
].type
;
798 dis
= dis_fn(op_code
, info
);
799 return table
[i
].instructions_size
;
801 dis
= "reserved instruction";
805 catch (std::runtime_error
& e
)
808 return -3; /* runtime error */
814 catch (std::exception
& e
)
817 return -4; /* runtime error */
820 dis
= "failed to disassemble";
821 return -1; /* failed to disassemble */
825 static uint64
extract_code_18_to_0(uint64 instruction
)
828 value
|= extract_bits(instruction
, 0, 19);
833 static uint64
extract_shift3_2_1_0(uint64 instruction
)
836 value
|= extract_bits(instruction
, 0, 3);
841 static uint64
extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction
)
844 value
|= extract_bits(instruction
, 3, 9) << 3;
849 static uint64
extract_count_3_2_1_0(uint64 instruction
)
852 value
|= extract_bits(instruction
, 0, 4);
857 static uint64
extract_rtz3_9_8_7(uint64 instruction
)
860 value
|= extract_bits(instruction
, 7, 3);
865 static uint64
extract_u_17_to_1__s1(uint64 instruction
)
868 value
|= extract_bits(instruction
, 1, 17) << 1;
873 static int64
extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction
)
876 value
|= extract_bits(instruction
, 11, 10);
877 value
= sign_extend(value
, 9);
882 static int64
extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction
)
885 value
|= extract_bits(instruction
, 0, 1) << 11;
886 value
|= extract_bits(instruction
, 1, 10) << 1;
887 value
= sign_extend(value
, 11);
892 static uint64
extract_u_10(uint64 instruction
)
895 value
|= extract_bits(instruction
, 10, 1);
900 static uint64
extract_rtz4_27_26_25_23_22_21(uint64 instruction
)
903 value
|= extract_bits(instruction
, 21, 3);
904 value
|= extract_bits(instruction
, 25, 1) << 3;
909 static uint64
extract_sa_15_14_13_12_11(uint64 instruction
)
912 value
|= extract_bits(instruction
, 11, 5);
917 static uint64
extract_shift_4_3_2_1_0(uint64 instruction
)
920 value
|= extract_bits(instruction
, 0, 5);
925 static uint64
extract_shiftx_10_9_8_7__s1(uint64 instruction
)
928 value
|= extract_bits(instruction
, 7, 4) << 1;
933 static uint64
extract_hint_25_24_23_22_21(uint64 instruction
)
936 value
|= extract_bits(instruction
, 21, 5);
941 static uint64
extract_count3_14_13_12(uint64 instruction
)
944 value
|= extract_bits(instruction
, 12, 3);
949 static int64
extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction
)
952 value
|= extract_bits(instruction
, 0, 1) << 31;
953 value
|= extract_bits(instruction
, 2, 10) << 21;
954 value
|= extract_bits(instruction
, 12, 9) << 12;
955 value
= sign_extend(value
, 31);
960 static int64
extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction
)
963 value
|= extract_bits(instruction
, 0, 1) << 7;
964 value
|= extract_bits(instruction
, 1, 6) << 1;
965 value
= sign_extend(value
, 7);
970 static uint64
extract_u2_10_9(uint64 instruction
)
973 value
|= extract_bits(instruction
, 9, 2);
978 static uint64
extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction
)
981 value
|= extract_bits(instruction
, 16, 10);
986 static uint64
extract_rs_20_19_18_17_16(uint64 instruction
)
989 value
|= extract_bits(instruction
, 16, 5);
994 static uint64
extract_u_2_1__s1(uint64 instruction
)
997 value
|= extract_bits(instruction
, 1, 2) << 1;
1002 static uint64
extract_stripe_6(uint64 instruction
)
1005 value
|= extract_bits(instruction
, 6, 1);
1010 static uint64
extract_ac_15_14(uint64 instruction
)
1013 value
|= extract_bits(instruction
, 14, 2);
1018 static uint64
extract_shift_20_19_18_17_16(uint64 instruction
)
1021 value
|= extract_bits(instruction
, 16, 5);
1026 static uint64
extract_rdl_25_24(uint64 instruction
)
1029 value
|= extract_bits(instruction
, 24, 1);
1034 static int64
extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction
)
1037 value
|= extract_bits(instruction
, 0, 1) << 10;
1038 value
|= extract_bits(instruction
, 1, 9) << 1;
1039 value
= sign_extend(value
, 10);
1044 static uint64
extract_eu_6_5_4_3_2_1_0(uint64 instruction
)
1047 value
|= extract_bits(instruction
, 0, 7);
1052 static uint64
extract_shift_5_4_3_2_1_0(uint64 instruction
)
1055 value
|= extract_bits(instruction
, 0, 6);
1060 static uint64
extract_count_19_18_17_16(uint64 instruction
)
1063 value
|= extract_bits(instruction
, 16, 4);
1068 static uint64
extract_code_2_1_0(uint64 instruction
)
1071 value
|= extract_bits(instruction
, 0, 3);
1076 static uint64
extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction
)
1079 value
|= extract_bits(instruction
, 0, 12);
1084 static uint64
extract_rs_4_3_2_1_0(uint64 instruction
)
1087 value
|= extract_bits(instruction
, 0, 5);
1092 static uint64
extract_u_20_to_3__s3(uint64 instruction
)
1095 value
|= extract_bits(instruction
, 3, 18) << 3;
1100 static uint64
extract_u_3_2_1_0__s2(uint64 instruction
)
1103 value
|= extract_bits(instruction
, 0, 4) << 2;
1108 static uint64
extract_cofun_25_24_23(uint64 instruction
)
1111 value
|= extract_bits(instruction
, 3, 23);
1116 static uint64
extract_u_2_1_0__s2(uint64 instruction
)
1119 value
|= extract_bits(instruction
, 0, 3) << 2;
1124 static uint64
extract_rd3_3_2_1(uint64 instruction
)
1127 value
|= extract_bits(instruction
, 1, 3);
1132 static uint64
extract_sa_15_14_13_12(uint64 instruction
)
1135 value
|= extract_bits(instruction
, 12, 4);
1140 static uint64
extract_rt_25_24_23_22_21(uint64 instruction
)
1143 value
|= extract_bits(instruction
, 21, 5);
1148 static uint64
extract_ru_7_6_5_4_3(uint64 instruction
)
1151 value
|= extract_bits(instruction
, 3, 5);
1156 static uint64
extract_u_17_to_0(uint64 instruction
)
1159 value
|= extract_bits(instruction
, 0, 18);
1164 static uint64
extract_rsz4_4_2_1_0(uint64 instruction
)
1167 value
|= extract_bits(instruction
, 0, 3);
1168 value
|= extract_bits(instruction
, 4, 1) << 3;
1173 static int64
extract_s__se21_0_20_to_1_s1(uint64 instruction
)
1176 value
|= extract_bits(instruction
, 0, 1) << 21;
1177 value
|= extract_bits(instruction
, 1, 20) << 1;
1178 value
= sign_extend(value
, 21);
1183 static uint64
extract_op_25_to_3(uint64 instruction
)
1186 value
|= extract_bits(instruction
, 3, 23);
1191 static uint64
extract_rs4_4_2_1_0(uint64 instruction
)
1194 value
|= extract_bits(instruction
, 0, 3);
1195 value
|= extract_bits(instruction
, 4, 1) << 3;
1200 static uint64
extract_bit_23_22_21(uint64 instruction
)
1203 value
|= extract_bits(instruction
, 21, 3);
1208 static uint64
extract_rt_41_40_39_38_37(uint64 instruction
)
1211 value
|= extract_bits(instruction
, 37, 5);
1216 static int64
extract_shift__se5_21_20_19_18_17_16(uint64 instruction
)
1219 value
|= extract_bits(instruction
, 16, 6);
1220 value
= sign_extend(value
, 5);
1225 static uint64
extract_rd2_3_8(uint64 instruction
)
1228 value
|= extract_bits(instruction
, 3, 1) << 1;
1229 value
|= extract_bits(instruction
, 8, 1);
1234 static uint64
extract_code_17_to_0(uint64 instruction
)
1237 value
|= extract_bits(instruction
, 0, 18);
1242 static uint64
extract_size_20_19_18_17_16(uint64 instruction
)
1245 value
|= extract_bits(instruction
, 16, 5);
1250 static int64
extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction
)
1253 value
|= extract_bits(instruction
, 2, 6) << 2;
1254 value
|= extract_bits(instruction
, 15, 1) << 8;
1255 value
= sign_extend(value
, 8);
1260 static uint64
extract_u_15_to_0(uint64 instruction
)
1263 value
|= extract_bits(instruction
, 0, 16);
1268 static uint64
extract_fs_20_19_18_17_16(uint64 instruction
)
1271 value
|= extract_bits(instruction
, 16, 5);
1276 static int64
extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction
)
1279 value
|= extract_bits(instruction
, 0, 8);
1280 value
|= extract_bits(instruction
, 15, 1) << 8;
1281 value
= sign_extend(value
, 8);
1286 static uint64
extract_stype_20_19_18_17_16(uint64 instruction
)
1289 value
|= extract_bits(instruction
, 16, 5);
1294 static uint64
extract_rtl_11(uint64 instruction
)
1297 value
|= extract_bits(instruction
, 9, 1);
1302 static uint64
extract_hs_20_19_18_17_16(uint64 instruction
)
1305 value
|= extract_bits(instruction
, 16, 5);
1310 static uint64
extract_sel_13_12_11(uint64 instruction
)
1313 value
|= extract_bits(instruction
, 11, 3);
1318 static uint64
extract_lsb_4_3_2_1_0(uint64 instruction
)
1321 value
|= extract_bits(instruction
, 0, 5);
1326 static uint64
extract_gp_2(uint64 instruction
)
1329 value
|= extract_bits(instruction
, 2, 1);
1334 static uint64
extract_rt3_9_8_7(uint64 instruction
)
1337 value
|= extract_bits(instruction
, 7, 3);
1342 static uint64
extract_ft_25_24_23_22_21(uint64 instruction
)
1345 value
|= extract_bits(instruction
, 21, 5);
1350 static uint64
extract_u_17_16_15_14_13_12_11(uint64 instruction
)
1353 value
|= extract_bits(instruction
, 11, 7);
1358 static uint64
extract_cs_20_19_18_17_16(uint64 instruction
)
1361 value
|= extract_bits(instruction
, 16, 5);
1366 static uint64
extract_rt4_9_7_6_5(uint64 instruction
)
1369 value
|= extract_bits(instruction
, 5, 3);
1370 value
|= extract_bits(instruction
, 9, 1) << 3;
1375 static uint64
extract_msbt_10_9_8_7_6(uint64 instruction
)
1378 value
|= extract_bits(instruction
, 6, 5);
1383 static uint64
extract_u_5_4_3_2_1_0__s2(uint64 instruction
)
1386 value
|= extract_bits(instruction
, 0, 6) << 2;
1391 static uint64
extract_sa_15_14_13(uint64 instruction
)
1394 value
|= extract_bits(instruction
, 13, 3);
1399 static int64
extract_s__se14_0_13_to_1_s1(uint64 instruction
)
1402 value
|= extract_bits(instruction
, 0, 1) << 14;
1403 value
|= extract_bits(instruction
, 1, 13) << 1;
1404 value
= sign_extend(value
, 14);
1409 static uint64
extract_rs3_6_5_4(uint64 instruction
)
1412 value
|= extract_bits(instruction
, 4, 3);
1417 static uint64
extract_u_31_to_0__s32(uint64 instruction
)
1420 value
|= extract_bits(instruction
, 0, 32) << 32;
1425 static uint64
extract_shift_10_9_8_7_6(uint64 instruction
)
1428 value
|= extract_bits(instruction
, 6, 5);
1433 static uint64
extract_cs_25_24_23_22_21(uint64 instruction
)
1436 value
|= extract_bits(instruction
, 21, 5);
1441 static uint64
extract_shiftx_11_10_9_8_7_6(uint64 instruction
)
1444 value
|= extract_bits(instruction
, 6, 6);
1449 static uint64
extract_rt_9_8_7_6_5(uint64 instruction
)
1452 value
|= extract_bits(instruction
, 5, 5);
1457 static uint64
extract_op_25_24_23_22_21(uint64 instruction
)
1460 value
|= extract_bits(instruction
, 21, 5);
1465 static uint64
extract_u_6_5_4_3_2_1_0__s2(uint64 instruction
)
1468 value
|= extract_bits(instruction
, 0, 7) << 2;
1473 static uint64
extract_bit_16_15_14_13_12_11(uint64 instruction
)
1476 value
|= extract_bits(instruction
, 11, 6);
1481 static uint64
extract_mask_20_19_18_17_16_15_14(uint64 instruction
)
1484 value
|= extract_bits(instruction
, 14, 7);
1489 static uint64
extract_eu_3_2_1_0(uint64 instruction
)
1492 value
|= extract_bits(instruction
, 0, 4);
1497 static uint64
extract_u_7_6_5_4__s4(uint64 instruction
)
1500 value
|= extract_bits(instruction
, 4, 4) << 4;
1505 static int64
extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction
)
1508 value
|= extract_bits(instruction
, 3, 5) << 3;
1509 value
|= extract_bits(instruction
, 15, 1) << 8;
1510 value
= sign_extend(value
, 8);
1515 static uint64
extract_ft_15_14_13_12_11(uint64 instruction
)
1518 value
|= extract_bits(instruction
, 11, 5);
1523 static int64
extract_s__se31_15_to_0_31_to_16(uint64 instruction
)
1526 value
|= extract_bits(instruction
, 0, 16) << 16;
1527 value
|= extract_bits(instruction
, 16, 16);
1528 value
= sign_extend(value
, 31);
1533 static uint64
extract_u_20_19_18_17_16_15_14_13(uint64 instruction
)
1536 value
|= extract_bits(instruction
, 13, 8);
1541 static uint64
extract_u_17_to_2__s2(uint64 instruction
)
1544 value
|= extract_bits(instruction
, 2, 16) << 2;
1549 static uint64
extract_rd_15_14_13_12_11(uint64 instruction
)
1552 value
|= extract_bits(instruction
, 11, 5);
1557 static uint64
extract_c0s_20_19_18_17_16(uint64 instruction
)
1560 value
|= extract_bits(instruction
, 16, 5);
1565 static uint64
extract_code_1_0(uint64 instruction
)
1568 value
|= extract_bits(instruction
, 0, 2);
1573 static int64
extract_s__se25_0_24_to_1_s1(uint64 instruction
)
1576 value
|= extract_bits(instruction
, 0, 1) << 25;
1577 value
|= extract_bits(instruction
, 1, 24) << 1;
1578 value
= sign_extend(value
, 25);
1583 static uint64
extract_u_1_0(uint64 instruction
)
1586 value
|= extract_bits(instruction
, 0, 2);
1591 static uint64
extract_u_3_8__s2(uint64 instruction
)
1594 value
|= extract_bits(instruction
, 3, 1) << 3;
1595 value
|= extract_bits(instruction
, 8, 1) << 2;
1600 static uint64
extract_fd_15_14_13_12_11(uint64 instruction
)
1603 value
|= extract_bits(instruction
, 11, 5);
1608 static uint64
extract_u_4_3_2_1_0__s2(uint64 instruction
)
1611 value
|= extract_bits(instruction
, 0, 5) << 2;
1616 static uint64
extract_rtz4_9_7_6_5(uint64 instruction
)
1619 value
|= extract_bits(instruction
, 5, 3);
1620 value
|= extract_bits(instruction
, 9, 1) << 3;
1625 static uint64
extract_sel_15_14_13_12_11(uint64 instruction
)
1628 value
|= extract_bits(instruction
, 11, 5);
1633 static uint64
extract_ct_25_24_23_22_21(uint64 instruction
)
1636 value
|= extract_bits(instruction
, 21, 5);
1641 static uint64
extract_u_20_to_2__s2(uint64 instruction
)
1644 value
|= extract_bits(instruction
, 2, 19) << 2;
1649 static int64
extract_s__se3_4_2_1_0(uint64 instruction
)
1652 value
|= extract_bits(instruction
, 0, 3);
1653 value
|= extract_bits(instruction
, 4, 1) << 3;
1654 value
= sign_extend(value
, 3);
1659 static uint64
extract_u_3_2_1_0__s1(uint64 instruction
)
1662 value
|= extract_bits(instruction
, 0, 4) << 1;
1668 static bool ADDIU_32__cond(uint64 instruction
)
1670 uint64 rt
= extract_rt_25_24_23_22_21(instruction
);
1675 static bool ADDIU_RS5__cond(uint64 instruction
)
1677 uint64 rt
= extract_rt_9_8_7_6_5(instruction
);
1682 static bool BALRSC_cond(uint64 instruction
)
1684 uint64 rt
= extract_rt_25_24_23_22_21(instruction
);
1689 static bool BEQC_16__cond(uint64 instruction
)
1691 uint64 rs3
= extract_rs3_6_5_4(instruction
);
1692 uint64 rt3
= extract_rt3_9_8_7(instruction
);
1693 uint64 u
= extract_u_3_2_1_0__s1(instruction
);
1694 return rs3
< rt3
&& u
!= 0;
1698 static bool BNEC_16__cond(uint64 instruction
)
1700 uint64 rs3
= extract_rs3_6_5_4(instruction
);
1701 uint64 rt3
= extract_rt3_9_8_7(instruction
);
1702 uint64 u
= extract_u_3_2_1_0__s1(instruction
);
1703 return rs3
>= rt3
&& u
!= 0;
1707 static bool MOVE_cond(uint64 instruction
)
1709 uint64 rt
= extract_rt_9_8_7_6_5(instruction
);
1714 static bool P16_BR1_cond(uint64 instruction
)
1716 uint64 u
= extract_u_3_2_1_0__s1(instruction
);
1721 static bool PREF_S9__cond(uint64 instruction
)
1723 uint64 hint
= extract_hint_25_24_23_22_21(instruction
);
1728 static bool PREFE_cond(uint64 instruction
)
1730 uint64 hint
= extract_hint_25_24_23_22_21(instruction
);
1735 static bool SLTU_cond(uint64 instruction
)
1737 uint64 rd
= extract_rd_15_14_13_12_11(instruction
);
1744 * ABS.D fd, fs - Floating Point Absolute Value
1747 * 10987654321098765432109876543210
1748 * 010001 00000 000101
1753 static std::string
ABS_D(uint64 instruction
, Dis_info
*info
)
1755 uint64 fd_value
= extract_ft_25_24_23_22_21(instruction
);
1756 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
1758 std::string fs
= FPR(copy(fs_value
));
1759 std::string fd
= FPR(copy(fd_value
));
1761 return img_format("ABS.D %s, %s", fd
, fs
);
1766 * ABS.S fd, fs - Floating Point Absolute Value
1769 * 10987654321098765432109876543210
1770 * 010001 00000 000101
1775 static std::string
ABS_S(uint64 instruction
, Dis_info
*info
)
1777 uint64 fd_value
= extract_ft_25_24_23_22_21(instruction
);
1778 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
1780 std::string fs
= FPR(copy(fs_value
));
1781 std::string fd
= FPR(copy(fd_value
));
1783 return img_format("ABS.S %s, %s", fd
, fs
);
1788 * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords
1789 * with 16-bit saturation
1792 * 10987654321098765432109876543210
1793 * 001000 0001000100111111
1797 static std::string
ABSQ_S_PH(uint64 instruction
, Dis_info
*info
)
1799 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
1800 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
1802 std::string rt
= GPR(copy(rt_value
));
1803 std::string rs
= GPR(copy(rs_value
));
1805 return img_format("ABSQ_S.PH %s, %s", rt
, rs
);
1810 * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values
1811 * with 8-bit saturation
1814 * 10987654321098765432109876543210
1815 * 001000 0000000100111111
1819 static std::string
ABSQ_S_QB(uint64 instruction
, Dis_info
*info
)
1821 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
1822 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
1824 std::string rt
= GPR(copy(rt_value
));
1825 std::string rs
= GPR(copy(rs_value
));
1827 return img_format("ABSQ_S.QB %s, %s", rt
, rs
);
1832 * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit
1836 * 10987654321098765432109876543210
1837 * 001000 0010000100111111
1841 static std::string
ABSQ_S_W(uint64 instruction
, Dis_info
*info
)
1843 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
1844 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
1846 std::string rt
= GPR(copy(rt_value
));
1847 std::string rs
= GPR(copy(rs_value
));
1849 return img_format("ABSQ_S.W %s, %s", rt
, rs
);
1857 * 10987654321098765432109876543210
1858 * 001000 0010000100111111
1862 static std::string
ACLR(uint64 instruction
, Dis_info
*info
)
1864 uint64 bit_value
= extract_bit_23_22_21(instruction
);
1865 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
1866 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
1868 std::string bit
= IMMEDIATE(copy(bit_value
));
1869 std::string s
= IMMEDIATE(copy(s_value
));
1870 std::string rs
= GPR(copy(rs_value
));
1872 return img_format("ACLR %s, %s(%s)", bit
, s
, rs
);
1880 * 10987654321098765432109876543210
1881 * 001000 0010000100111111
1885 static std::string
ADD(uint64 instruction
, Dis_info
*info
)
1887 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
1888 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
1889 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
1891 std::string rd
= GPR(copy(rd_value
));
1892 std::string rs
= GPR(copy(rs_value
));
1893 std::string rt
= GPR(copy(rt_value
));
1895 return img_format("ADD %s, %s, %s", rd
, rs
, rt
);
1900 * ADD.D fd, fs, ft - Floating Point Add
1903 * 10987654321098765432109876543210
1910 static std::string
ADD_D(uint64 instruction
, Dis_info
*info
)
1912 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
1913 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
1914 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
1916 std::string ft
= FPR(copy(ft_value
));
1917 std::string fs
= FPR(copy(fs_value
));
1918 std::string fd
= FPR(copy(fd_value
));
1920 return img_format("ADD.D %s, %s, %s", fd
, fs
, ft
);
1925 * ADD.S fd, fs, ft - Floating Point Add
1928 * 10987654321098765432109876543210
1935 static std::string
ADD_S(uint64 instruction
, Dis_info
*info
)
1937 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
1938 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
1939 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
1941 std::string ft
= FPR(copy(ft_value
));
1942 std::string fs
= FPR(copy(fs_value
));
1943 std::string fd
= FPR(copy(fd_value
));
1945 return img_format("ADD.S %s, %s, %s", fd
, fs
, ft
);
1953 * 10987654321098765432109876543210
1954 * 001000 0010000100111111
1958 static std::string
ADDIU_32_(uint64 instruction
, Dis_info
*info
)
1960 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
1961 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
1962 uint64 u_value
= extract_u_15_to_0(instruction
);
1964 std::string rt
= GPR(copy(rt_value
));
1965 std::string rs
= GPR(copy(rs_value
));
1966 std::string u
= IMMEDIATE(copy(u_value
));
1968 return img_format("ADDIU %s, %s, %s", rt
, rs
, u
);
1976 * 10987654321098765432109876543210
1977 * 001000 0010000100111111
1981 static std::string
ADDIU_48_(uint64 instruction
, Dis_info
*info
)
1983 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
1984 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
1986 std::string rt
= GPR(copy(rt_value
));
1987 std::string s
= IMMEDIATE(copy(s_value
));
1989 return img_format("ADDIU %s, %s", rt
, s
);
1997 * 10987654321098765432109876543210
1998 * 001000 0010000100111111
2002 static std::string
ADDIU_GP48_(uint64 instruction
, Dis_info
*info
)
2004 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
2005 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
2007 std::string rt
= GPR(copy(rt_value
));
2008 std::string s
= IMMEDIATE(copy(s_value
));
2010 return img_format("ADDIU %s, $%d, %s", rt
, 28, s
);
2018 * 10987654321098765432109876543210
2019 * 001000 0010000100111111
2023 static std::string
ADDIU_GP_B_(uint64 instruction
, Dis_info
*info
)
2025 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2026 uint64 u_value
= extract_u_17_to_0(instruction
);
2028 std::string rt
= GPR(copy(rt_value
));
2029 std::string u
= IMMEDIATE(copy(u_value
));
2031 return img_format("ADDIU %s, $%d, %s", rt
, 28, u
);
2039 * 10987654321098765432109876543210
2040 * 001000 0010000100111111
2044 static std::string
ADDIU_GP_W_(uint64 instruction
, Dis_info
*info
)
2046 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2047 uint64 u_value
= extract_u_20_to_2__s2(instruction
);
2049 std::string rt
= GPR(copy(rt_value
));
2050 std::string u
= IMMEDIATE(copy(u_value
));
2052 return img_format("ADDIU %s, $%d, %s", rt
, 28, u
);
2060 * 10987654321098765432109876543210
2061 * 001000 0010000100111111
2065 static std::string
ADDIU_NEG_(uint64 instruction
, Dis_info
*info
)
2067 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2068 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2069 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
2071 std::string rt
= GPR(copy(rt_value
));
2072 std::string rs
= GPR(copy(rs_value
));
2073 std::string u
= IMMEDIATE(neg_copy(u_value
));
2075 return img_format("ADDIU %s, %s, %s", rt
, rs
, u
);
2083 * 10987654321098765432109876543210
2084 * 001000 0010000100111111
2088 static std::string
ADDIU_R1_SP_(uint64 instruction
, Dis_info
*info
)
2090 uint64 u_value
= extract_u_5_4_3_2_1_0__s2(instruction
);
2091 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
2093 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
2094 std::string u
= IMMEDIATE(copy(u_value
));
2096 return img_format("ADDIU %s, $%d, %s", rt3
, 29, u
);
2104 * 10987654321098765432109876543210
2105 * 001000 0010000100111111
2109 static std::string
ADDIU_R2_(uint64 instruction
, Dis_info
*info
)
2111 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
2112 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
2113 uint64 u_value
= extract_u_2_1_0__s2(instruction
);
2115 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
2116 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
2117 std::string u
= IMMEDIATE(copy(u_value
));
2119 return img_format("ADDIU %s, %s, %s", rt3
, rs3
, u
);
2124 * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
2131 static std::string
ADDIU_RS5_(uint64 instruction
, Dis_info
*info
)
2133 uint64 rt_value
= extract_rt_9_8_7_6_5(instruction
);
2134 int64 s_value
= extract_s__se3_4_2_1_0(instruction
);
2136 std::string rt
= GPR(copy(rt_value
));
2137 std::string s
= IMMEDIATE(copy(s_value
));
2139 return img_format("ADDIU %s, %s", rt
, s
);
2147 * 10987654321098765432109876543210
2148 * 001000 x1110000101
2153 static std::string
ADDIUPC_32_(uint64 instruction
, Dis_info
*info
)
2155 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2156 int64 s_value
= extract_s__se21_0_20_to_1_s1(instruction
);
2158 std::string rt
= GPR(copy(rt_value
));
2159 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2161 return img_format("ADDIUPC %s, %s", rt
, s
);
2169 * 10987654321098765432109876543210
2170 * 001000 x1110000101
2175 static std::string
ADDIUPC_48_(uint64 instruction
, Dis_info
*info
)
2177 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
2178 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
2180 std::string rt
= GPR(copy(rt_value
));
2181 std::string s
= ADDRESS(encode_s_from_address(s_value
), 6, info
);
2183 return img_format("ADDIUPC %s, %s", rt
, s
);
2188 * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors
2191 * 10987654321098765432109876543210
2192 * 001000 00000001101
2197 static std::string
ADDQ_PH(uint64 instruction
, Dis_info
*info
)
2199 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2200 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2201 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2203 std::string rd
= GPR(copy(rd_value
));
2204 std::string rs
= GPR(copy(rs_value
));
2205 std::string rt
= GPR(copy(rt_value
));
2207 return img_format("ADDQ.PH %s, %s, %s", rd
, rs
, rt
);
2212 * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit
2216 * 10987654321098765432109876543210
2217 * 001000 10000001101
2222 static std::string
ADDQ_S_PH(uint64 instruction
, Dis_info
*info
)
2224 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2225 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2226 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2228 std::string rd
= GPR(copy(rd_value
));
2229 std::string rs
= GPR(copy(rs_value
));
2230 std::string rt
= GPR(copy(rt_value
));
2232 return img_format("ADDQ_S.PH %s, %s, %s", rd
, rs
, rt
);
2237 * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation
2240 * 10987654321098765432109876543210
2241 * 001000 x1100000101
2246 static std::string
ADDQ_S_W(uint64 instruction
, Dis_info
*info
)
2248 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2249 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2250 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2252 std::string rd
= GPR(copy(rd_value
));
2253 std::string rs
= GPR(copy(rs_value
));
2254 std::string rt
= GPR(copy(rt_value
));
2256 return img_format("ADDQ_S.W %s, %s, %s", rd
, rs
, rt
);
2261 * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift
2262 * right to halve results
2265 * 10987654321098765432109876543210
2266 * 001000 00001001101
2271 static std::string
ADDQH_PH(uint64 instruction
, Dis_info
*info
)
2273 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2274 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2275 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2277 std::string rd
= GPR(copy(rd_value
));
2278 std::string rs
= GPR(copy(rs_value
));
2279 std::string rt
= GPR(copy(rt_value
));
2281 return img_format("ADDQH.PH %s, %s, %s", rd
, rs
, rt
);
2286 * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift
2287 * right to halve results with rounding
2290 * 10987654321098765432109876543210
2291 * 001000 10001001101
2296 static std::string
ADDQH_R_PH(uint64 instruction
, Dis_info
*info
)
2298 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2299 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2300 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2302 std::string rd
= GPR(copy(rd_value
));
2303 std::string rs
= GPR(copy(rs_value
));
2304 std::string rt
= GPR(copy(rt_value
));
2306 return img_format("ADDQH_R.PH %s, %s, %s", rd
, rs
, rt
);
2311 * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve
2312 * results with rounding
2315 * 10987654321098765432109876543210
2316 * 001000 00010001101
2321 static std::string
ADDQH_R_W(uint64 instruction
, Dis_info
*info
)
2323 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2324 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2325 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2327 std::string rd
= GPR(copy(rd_value
));
2328 std::string rs
= GPR(copy(rs_value
));
2329 std::string rt
= GPR(copy(rt_value
));
2331 return img_format("ADDQH_R.W %s, %s, %s", rd
, rs
, rt
);
2336 * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve
2340 * 10987654321098765432109876543210
2341 * 001000 10010001101
2346 static std::string
ADDQH_W(uint64 instruction
, Dis_info
*info
)
2348 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2349 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2350 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2352 std::string rd
= GPR(copy(rd_value
));
2353 std::string rs
= GPR(copy(rs_value
));
2354 std::string rt
= GPR(copy(rt_value
));
2356 return img_format("ADDQH.W %s, %s, %s", rd
, rs
, rt
);
2361 * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit
2364 * 10987654321098765432109876543210
2365 * 001000 x1110000101
2370 static std::string
ADDSC(uint64 instruction
, Dis_info
*info
)
2372 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2373 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2374 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2376 std::string rd
= GPR(copy(rd_value
));
2377 std::string rs
= GPR(copy(rs_value
));
2378 std::string rt
= GPR(copy(rt_value
));
2380 return img_format("ADDSC %s, %s, %s", rd
, rs
, rt
);
2385 * ADDU[16] rd3, rs3, rt3 -
2393 static std::string
ADDU_16_(uint64 instruction
, Dis_info
*info
)
2395 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
2396 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
2397 uint64 rd3_value
= extract_rd3_3_2_1(instruction
);
2399 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
2400 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
2401 std::string rd3
= GPR(decode_gpr_gpr3(rd3_value
));
2403 return img_format("ADDU %s, %s, %s", rd3
, rs3
, rt3
);
2411 * 10987654321098765432109876543210
2412 * 001000 x1110000101
2417 static std::string
ADDU_32_(uint64 instruction
, Dis_info
*info
)
2419 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2420 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2421 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2423 std::string rd
= GPR(copy(rd_value
));
2424 std::string rs
= GPR(copy(rs_value
));
2425 std::string rt
= GPR(copy(rt_value
));
2427 return img_format("ADDU %s, %s, %s", rd
, rs
, rt
);
2435 * 10987654321098765432109876543210
2436 * 001000 x1110000101
2441 static std::string
ADDU_4X4_(uint64 instruction
, Dis_info
*info
)
2443 uint64 rt4_value
= extract_rt4_9_7_6_5(instruction
);
2444 uint64 rs4_value
= extract_rs4_4_2_1_0(instruction
);
2446 std::string rs4
= GPR(decode_gpr_gpr4(rs4_value
));
2447 std::string rt4
= GPR(decode_gpr_gpr4(rt4_value
));
2449 return img_format("ADDU %s, %s", rs4
, rt4
);
2454 * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords
2457 * 10987654321098765432109876543210
2458 * 001000 00100001101
2463 static std::string
ADDU_PH(uint64 instruction
, Dis_info
*info
)
2465 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2466 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2467 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2469 std::string rd
= GPR(copy(rd_value
));
2470 std::string rs
= GPR(copy(rs_value
));
2471 std::string rt
= GPR(copy(rt_value
));
2473 return img_format("ADDU.PH %s, %s, %s", rd
, rs
, rt
);
2478 * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2481 * 10987654321098765432109876543210
2482 * 001000 00011001101
2487 static std::string
ADDU_QB(uint64 instruction
, Dis_info
*info
)
2489 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2490 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2491 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2493 std::string rd
= GPR(copy(rd_value
));
2494 std::string rs
= GPR(copy(rs_value
));
2495 std::string rt
= GPR(copy(rt_value
));
2497 return img_format("ADDU.QB %s, %s, %s", rd
, rs
, rt
);
2502 * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit
2506 * 10987654321098765432109876543210
2507 * 001000 10100001101
2512 static std::string
ADDU_S_PH(uint64 instruction
, Dis_info
*info
)
2514 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2515 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2516 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2518 std::string rd
= GPR(copy(rd_value
));
2519 std::string rs
= GPR(copy(rs_value
));
2520 std::string rt
= GPR(copy(rt_value
));
2522 return img_format("ADDU_S.PH %s, %s, %s", rd
, rs
, rt
);
2527 * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2530 * 10987654321098765432109876543210
2531 * 001000 10011001101
2536 static std::string
ADDU_S_QB(uint64 instruction
, Dis_info
*info
)
2538 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2539 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2540 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2542 std::string rd
= GPR(copy(rd_value
));
2543 std::string rs
= GPR(copy(rs_value
));
2544 std::string rt
= GPR(copy(rt_value
));
2546 return img_format("ADDU_S.QB %s, %s, %s", rd
, rs
, rt
);
2551 * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2555 * 10987654321098765432109876543210
2556 * 001000 00101001101
2561 static std::string
ADDUH_QB(uint64 instruction
, Dis_info
*info
)
2563 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2564 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2565 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2567 std::string rd
= GPR(copy(rd_value
));
2568 std::string rs
= GPR(copy(rs_value
));
2569 std::string rt
= GPR(copy(rt_value
));
2571 return img_format("ADDUH.QB %s, %s, %s", rd
, rs
, rt
);
2576 * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2580 * 10987654321098765432109876543210
2581 * 001000 10101001101
2586 static std::string
ADDUH_R_QB(uint64 instruction
, Dis_info
*info
)
2588 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2589 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2590 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2592 std::string rd
= GPR(copy(rd_value
));
2593 std::string rs
= GPR(copy(rs_value
));
2594 std::string rt
= GPR(copy(rt_value
));
2596 return img_format("ADDUH_R.QB %s, %s, %s", rd
, rs
, rt
);
2600 * ADDWC rd, rt, rs - Add Word with Carry Bit
2603 * 10987654321098765432109876543210
2604 * 001000 x1111000101
2609 static std::string
ADDWC(uint64 instruction
, Dis_info
*info
)
2611 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2612 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2613 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2615 std::string rd
= GPR(copy(rd_value
));
2616 std::string rs
= GPR(copy(rs_value
));
2617 std::string rt
= GPR(copy(rt_value
));
2619 return img_format("ADDWC %s, %s, %s", rd
, rs
, rt
);
2627 * 10987654321098765432109876543210
2628 * 001000 x1110000101
2633 static std::string
ALUIPC(uint64 instruction
, Dis_info
*info
)
2635 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2636 int64 s_value
= extract_s__se31_0_11_to_2_20_to_12_s12(instruction
);
2638 std::string rt
= GPR(copy(rt_value
));
2639 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2641 return img_format("ALUIPC %s, %%pcrel_hi(%s)", rt
, s
);
2646 * AND[16] rt3, rs3 -
2654 static std::string
AND_16_(uint64 instruction
, Dis_info
*info
)
2656 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
2657 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
2659 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
2660 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
2662 return img_format("AND %s, %s", rs3
, rt3
);
2670 * 10987654321098765432109876543210
2671 * 001000 x1110000101
2676 static std::string
AND_32_(uint64 instruction
, Dis_info
*info
)
2678 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2679 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2680 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
2682 std::string rd
= GPR(copy(rd_value
));
2683 std::string rs
= GPR(copy(rs_value
));
2684 std::string rt
= GPR(copy(rt_value
));
2686 return img_format("AND %s, %s, %s", rd
, rs
, rt
);
2699 static std::string
ANDI_16_(uint64 instruction
, Dis_info
*info
)
2701 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
2702 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
2703 uint64 eu_value
= extract_eu_3_2_1_0(instruction
);
2705 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
2706 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
2707 std::string eu
= IMMEDIATE(encode_eu_from_u_andi16(eu_value
));
2709 return img_format("ANDI %s, %s, %s", rt3
, rs3
, eu
);
2717 * 10987654321098765432109876543210
2718 * 001000 x1110000101
2723 static std::string
ANDI_32_(uint64 instruction
, Dis_info
*info
)
2725 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2726 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2727 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
2729 std::string rt
= GPR(copy(rt_value
));
2730 std::string rs
= GPR(copy(rs_value
));
2731 std::string u
= IMMEDIATE(copy(u_value
));
2733 return img_format("ANDI %s, %s, %s", rt
, rs
, u
);
2741 * 10987654321098765432109876543210
2742 * 001000 x1110000101
2747 static std::string
APPEND(uint64 instruction
, Dis_info
*info
)
2749 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2750 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2751 uint64 sa_value
= extract_sa_15_14_13_12_11(instruction
);
2753 std::string rt
= GPR(copy(rt_value
));
2754 std::string rs
= GPR(copy(rs_value
));
2755 std::string sa
= IMMEDIATE(copy(sa_value
));
2757 return img_format("APPEND %s, %s, %s", rt
, rs
, sa
);
2765 * 10987654321098765432109876543210
2766 * 001000 x1110000101
2771 static std::string
ASET(uint64 instruction
, Dis_info
*info
)
2773 uint64 bit_value
= extract_bit_23_22_21(instruction
);
2774 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2775 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
2777 std::string bit
= IMMEDIATE(copy(bit_value
));
2778 std::string s
= IMMEDIATE(copy(s_value
));
2779 std::string rs
= GPR(copy(rs_value
));
2781 return img_format("ASET %s, %s(%s)", bit
, s
, rs
);
2789 * 10987654321098765432109876543210
2790 * 001000 x1110000101
2795 static std::string
BALC_16_(uint64 instruction
, Dis_info
*info
)
2797 int64 s_value
= extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction
);
2799 std::string s
= ADDRESS(encode_s_from_address(s_value
), 2, info
);
2801 return img_format("BALC %s", s
);
2809 * 10987654321098765432109876543210
2810 * 001000 x1110000101
2815 static std::string
BALC_32_(uint64 instruction
, Dis_info
*info
)
2817 int64 s_value
= extract_s__se25_0_24_to_1_s1(instruction
);
2819 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2821 return img_format("BALC %s", s
);
2829 * 10987654321098765432109876543210
2830 * 001000 x1110000101
2835 static std::string
BALRSC(uint64 instruction
, Dis_info
*info
)
2837 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2838 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
2840 std::string rt
= GPR(copy(rt_value
));
2841 std::string rs
= GPR(copy(rs_value
));
2843 return img_format("BALRSC %s, %s", rt
, rs
);
2851 * 10987654321098765432109876543210
2852 * 001000 x1110000101
2857 static std::string
BBEQZC(uint64 instruction
, Dis_info
*info
)
2859 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2860 uint64 bit_value
= extract_bit_16_15_14_13_12_11(instruction
);
2861 int64 s_value
= extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction
);
2863 std::string rt
= GPR(copy(rt_value
));
2864 std::string bit
= IMMEDIATE(copy(bit_value
));
2865 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2867 return img_format("BBEQZC %s, %s, %s", rt
, bit
, s
);
2875 * 10987654321098765432109876543210
2876 * 001000 x1110000101
2881 static std::string
BBNEZC(uint64 instruction
, Dis_info
*info
)
2883 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
2884 uint64 bit_value
= extract_bit_16_15_14_13_12_11(instruction
);
2885 int64 s_value
= extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction
);
2887 std::string rt
= GPR(copy(rt_value
));
2888 std::string bit
= IMMEDIATE(copy(bit_value
));
2889 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2891 return img_format("BBNEZC %s, %s, %s", rt
, bit
, s
);
2899 * 10987654321098765432109876543210
2900 * 001000 x1110000101
2905 static std::string
BC_16_(uint64 instruction
, Dis_info
*info
)
2907 int64 s_value
= extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction
);
2909 std::string s
= ADDRESS(encode_s_from_address(s_value
), 2, info
);
2911 return img_format("BC %s", s
);
2919 * 10987654321098765432109876543210
2920 * 001000 x1110000101
2925 static std::string
BC_32_(uint64 instruction
, Dis_info
*info
)
2927 int64 s_value
= extract_s__se25_0_24_to_1_s1(instruction
);
2929 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2931 return img_format("BC %s", s
);
2939 * 10987654321098765432109876543210
2940 * 001000 x1110000101
2945 static std::string
BC1EQZC(uint64 instruction
, Dis_info
*info
)
2947 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
2948 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
2950 std::string ft
= FPR(copy(ft_value
));
2951 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2953 return img_format("BC1EQZC %s, %s", ft
, s
);
2961 * 10987654321098765432109876543210
2962 * 001000 x1110000101
2967 static std::string
BC1NEZC(uint64 instruction
, Dis_info
*info
)
2969 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
2970 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
2972 std::string ft
= FPR(copy(ft_value
));
2973 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2975 return img_format("BC1NEZC %s, %s", ft
, s
);
2983 * 10987654321098765432109876543210
2984 * 001000 x1110000101
2989 static std::string
BC2EQZC(uint64 instruction
, Dis_info
*info
)
2991 uint64 ct_value
= extract_ct_25_24_23_22_21(instruction
);
2992 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
2994 std::string ct
= CPR(copy(ct_value
));
2995 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
2997 return img_format("BC2EQZC %s, %s", ct
, s
);
3005 * 10987654321098765432109876543210
3006 * 001000 x1110000101
3011 static std::string
BC2NEZC(uint64 instruction
, Dis_info
*info
)
3013 uint64 ct_value
= extract_ct_25_24_23_22_21(instruction
);
3014 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
3016 std::string ct
= CPR(copy(ct_value
));
3017 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3019 return img_format("BC2NEZC %s, %s", ct
, s
);
3027 * 10987654321098765432109876543210
3028 * 001000 x1110000101
3033 static std::string
BEQC_16_(uint64 instruction
, Dis_info
*info
)
3035 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
3036 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
3037 uint64 u_value
= extract_u_3_2_1_0__s1(instruction
);
3039 std::string rs3
= GPR(encode_rs3_and_check_rs3_lt_rt3(rs3_value
));
3040 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
3041 std::string u
= ADDRESS(encode_u_from_address(u_value
), 2, info
);
3043 return img_format("BEQC %s, %s, %s", rs3
, rt3
, u
);
3051 * 10987654321098765432109876543210
3052 * 001000 x1110000101
3057 static std::string
BEQC_32_(uint64 instruction
, Dis_info
*info
)
3059 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3060 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3061 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
3063 std::string rs
= GPR(copy(rs_value
));
3064 std::string rt
= GPR(copy(rt_value
));
3065 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3067 return img_format("BEQC %s, %s, %s", rs
, rt
, s
);
3075 * 10987654321098765432109876543210
3076 * 001000 x1110000101
3081 static std::string
BEQIC(uint64 instruction
, Dis_info
*info
)
3083 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3084 uint64 u_value
= extract_u_17_16_15_14_13_12_11(instruction
);
3085 int64 s_value
= extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction
);
3087 std::string rt
= GPR(copy(rt_value
));
3088 std::string u
= IMMEDIATE(copy(u_value
));
3089 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3091 return img_format("BEQIC %s, %s, %s", rt
, u
, s
);
3099 * 10987654321098765432109876543210
3100 * 001000 x1110000101
3105 static std::string
BEQZC_16_(uint64 instruction
, Dis_info
*info
)
3107 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
3108 int64 s_value
= extract_s__se7_0_6_5_4_3_2_1_s1(instruction
);
3110 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
3111 std::string s
= ADDRESS(encode_s_from_address(s_value
), 2, info
);
3113 return img_format("BEQZC %s, %s", rt3
, s
);
3121 * 10987654321098765432109876543210
3122 * 001000 x1110000101
3127 static std::string
BGEC(uint64 instruction
, Dis_info
*info
)
3129 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3130 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3131 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
3133 std::string rs
= GPR(copy(rs_value
));
3134 std::string rt
= GPR(copy(rt_value
));
3135 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3137 return img_format("BGEC %s, %s, %s", rs
, rt
, s
);
3145 * 10987654321098765432109876543210
3146 * 001000 x1110000101
3151 static std::string
BGEIC(uint64 instruction
, Dis_info
*info
)
3153 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3154 uint64 u_value
= extract_u_17_16_15_14_13_12_11(instruction
);
3155 int64 s_value
= extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction
);
3157 std::string rt
= GPR(copy(rt_value
));
3158 std::string u
= IMMEDIATE(copy(u_value
));
3159 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3161 return img_format("BGEIC %s, %s, %s", rt
, u
, s
);
3169 * 10987654321098765432109876543210
3170 * 001000 x1110000101
3175 static std::string
BGEIUC(uint64 instruction
, Dis_info
*info
)
3177 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3178 uint64 u_value
= extract_u_17_16_15_14_13_12_11(instruction
);
3179 int64 s_value
= extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction
);
3181 std::string rt
= GPR(copy(rt_value
));
3182 std::string u
= IMMEDIATE(copy(u_value
));
3183 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3185 return img_format("BGEIUC %s, %s, %s", rt
, u
, s
);
3193 * 10987654321098765432109876543210
3194 * 001000 x1110000101
3199 static std::string
BGEUC(uint64 instruction
, Dis_info
*info
)
3201 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3202 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3203 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
3205 std::string rs
= GPR(copy(rs_value
));
3206 std::string rt
= GPR(copy(rt_value
));
3207 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3209 return img_format("BGEUC %s, %s, %s", rs
, rt
, s
);
3217 * 10987654321098765432109876543210
3218 * 001000 x1110000101
3223 static std::string
BLTC(uint64 instruction
, Dis_info
*info
)
3225 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3226 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3227 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
3229 std::string rs
= GPR(copy(rs_value
));
3230 std::string rt
= GPR(copy(rt_value
));
3231 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3233 return img_format("BLTC %s, %s, %s", rs
, rt
, s
);
3241 * 10987654321098765432109876543210
3242 * 001000 x1110000101
3247 static std::string
BLTIC(uint64 instruction
, Dis_info
*info
)
3249 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3250 uint64 u_value
= extract_u_17_16_15_14_13_12_11(instruction
);
3251 int64 s_value
= extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction
);
3253 std::string rt
= GPR(copy(rt_value
));
3254 std::string u
= IMMEDIATE(copy(u_value
));
3255 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3257 return img_format("BLTIC %s, %s, %s", rt
, u
, s
);
3265 * 10987654321098765432109876543210
3266 * 001000 x1110000101
3271 static std::string
BLTIUC(uint64 instruction
, Dis_info
*info
)
3273 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3274 uint64 u_value
= extract_u_17_16_15_14_13_12_11(instruction
);
3275 int64 s_value
= extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction
);
3277 std::string rt
= GPR(copy(rt_value
));
3278 std::string u
= IMMEDIATE(copy(u_value
));
3279 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3281 return img_format("BLTIUC %s, %s, %s", rt
, u
, s
);
3289 * 10987654321098765432109876543210
3290 * 001000 x1110000101
3295 static std::string
BLTUC(uint64 instruction
, Dis_info
*info
)
3297 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3298 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3299 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
3301 std::string rs
= GPR(copy(rs_value
));
3302 std::string rt
= GPR(copy(rt_value
));
3303 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3305 return img_format("BLTUC %s, %s, %s", rs
, rt
, s
);
3313 * 10987654321098765432109876543210
3314 * 001000 x1110000101
3319 static std::string
BNEC_16_(uint64 instruction
, Dis_info
*info
)
3321 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
3322 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
3323 uint64 u_value
= extract_u_3_2_1_0__s1(instruction
);
3325 std::string rs3
= GPR(encode_rs3_and_check_rs3_ge_rt3(rs3_value
));
3326 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
3327 std::string u
= ADDRESS(encode_u_from_address(u_value
), 2, info
);
3329 return img_format("BNEC %s, %s, %s", rs3
, rt3
, u
);
3337 * 10987654321098765432109876543210
3338 * 001000 x1110000101
3343 static std::string
BNEC_32_(uint64 instruction
, Dis_info
*info
)
3345 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3346 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3347 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
3349 std::string rs
= GPR(copy(rs_value
));
3350 std::string rt
= GPR(copy(rt_value
));
3351 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3353 return img_format("BNEC %s, %s, %s", rs
, rt
, s
);
3361 * 10987654321098765432109876543210
3362 * 001000 x1110000101
3367 static std::string
BNEIC(uint64 instruction
, Dis_info
*info
)
3369 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3370 uint64 u_value
= extract_u_17_16_15_14_13_12_11(instruction
);
3371 int64 s_value
= extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction
);
3373 std::string rt
= GPR(copy(rt_value
));
3374 std::string u
= IMMEDIATE(copy(u_value
));
3375 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3377 return img_format("BNEIC %s, %s, %s", rt
, u
, s
);
3385 * 10987654321098765432109876543210
3386 * 001000 x1110000101
3391 static std::string
BNEZC_16_(uint64 instruction
, Dis_info
*info
)
3393 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
3394 int64 s_value
= extract_s__se7_0_6_5_4_3_2_1_s1(instruction
);
3396 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
3397 std::string s
= ADDRESS(encode_s_from_address(s_value
), 2, info
);
3399 return img_format("BNEZC %s, %s", rt3
, s
);
3404 * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in
3405 * DSPControl Pos field
3408 * 10987654321098765432109876543210
3409 * 100010xxxxx0010001
3410 * s[13:1] -------------
3413 static std::string
BPOSGE32C(uint64 instruction
, Dis_info
*info
)
3415 int64 s_value
= extract_s__se14_0_13_to_1_s1(instruction
);
3417 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
3419 return img_format("BPOSGE32C %s", s
);
3427 * 10987654321098765432109876543210
3428 * 001000 x1110000101
3433 static std::string
BREAK_16_(uint64 instruction
, Dis_info
*info
)
3435 uint64 code_value
= extract_code_2_1_0(instruction
);
3437 std::string code
= IMMEDIATE(copy(code_value
));
3439 return img_format("BREAK %s", code
);
3444 * BREAK code - Break. Cause a Breakpoint exception
3447 * 10987654321098765432109876543210
3448 * 001000 x1110000101
3453 static std::string
BREAK_32_(uint64 instruction
, Dis_info
*info
)
3455 uint64 code_value
= extract_code_18_to_0(instruction
);
3457 std::string code
= IMMEDIATE(copy(code_value
));
3459 return img_format("BREAK %s", code
);
3467 * 10987654321098765432109876543210
3468 * 001000 x1110000101
3473 static std::string
BRSC(uint64 instruction
, Dis_info
*info
)
3475 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3477 std::string rs
= GPR(copy(rs_value
));
3479 return img_format("BRSC %s", rs
);
3487 * 10987654321098765432109876543210
3488 * 001000 x1110000101
3493 static std::string
CACHE(uint64 instruction
, Dis_info
*info
)
3495 uint64 op_value
= extract_op_25_24_23_22_21(instruction
);
3496 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3497 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
3499 std::string op
= IMMEDIATE(copy(op_value
));
3500 std::string s
= IMMEDIATE(copy(s_value
));
3501 std::string rs
= GPR(copy(rs_value
));
3503 return img_format("CACHE %s, %s(%s)", op
, s
, rs
);
3511 * 10987654321098765432109876543210
3512 * 001000 x1110000101
3517 static std::string
CACHEE(uint64 instruction
, Dis_info
*info
)
3519 uint64 op_value
= extract_op_25_24_23_22_21(instruction
);
3520 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3521 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
3523 std::string op
= IMMEDIATE(copy(op_value
));
3524 std::string s
= IMMEDIATE(copy(s_value
));
3525 std::string rs
= GPR(copy(rs_value
));
3527 return img_format("CACHEE %s, %s(%s)", op
, s
, rs
);
3535 * 10987654321098765432109876543210
3536 * 001000 x1110000101
3541 static std::string
CEIL_L_D(uint64 instruction
, Dis_info
*info
)
3543 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3544 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3546 std::string ft
= FPR(copy(ft_value
));
3547 std::string fs
= FPR(copy(fs_value
));
3549 return img_format("CEIL.L.D %s, %s", ft
, fs
);
3557 * 10987654321098765432109876543210
3558 * 001000 x1110000101
3563 static std::string
CEIL_L_S(uint64 instruction
, Dis_info
*info
)
3565 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3566 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3568 std::string ft
= FPR(copy(ft_value
));
3569 std::string fs
= FPR(copy(fs_value
));
3571 return img_format("CEIL.L.S %s, %s", ft
, fs
);
3579 * 10987654321098765432109876543210
3580 * 001000 x1110000101
3585 static std::string
CEIL_W_D(uint64 instruction
, Dis_info
*info
)
3587 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3588 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3590 std::string ft
= FPR(copy(ft_value
));
3591 std::string fs
= FPR(copy(fs_value
));
3593 return img_format("CEIL.W.D %s, %s", ft
, fs
);
3601 * 10987654321098765432109876543210
3602 * 001000 x1110000101
3607 static std::string
CEIL_W_S(uint64 instruction
, Dis_info
*info
)
3609 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3610 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3612 std::string ft
= FPR(copy(ft_value
));
3613 std::string fs
= FPR(copy(fs_value
));
3615 return img_format("CEIL.W.S %s, %s", ft
, fs
);
3623 * 10987654321098765432109876543210
3624 * 001000 x1110000101
3629 static std::string
CFC1(uint64 instruction
, Dis_info
*info
)
3631 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3632 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
3634 std::string rt
= GPR(copy(rt_value
));
3635 std::string cs
= CPR(copy(cs_value
));
3637 return img_format("CFC1 %s, %s", rt
, cs
);
3645 * 10987654321098765432109876543210
3646 * 001000 x1110000101
3651 static std::string
CFC2(uint64 instruction
, Dis_info
*info
)
3653 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3654 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
3656 std::string rt
= GPR(copy(rt_value
));
3657 std::string cs
= CPR(copy(cs_value
));
3659 return img_format("CFC2 %s, %s", rt
, cs
);
3667 * 10987654321098765432109876543210
3668 * 001000 x1110000101
3673 static std::string
CLASS_D(uint64 instruction
, Dis_info
*info
)
3675 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3676 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3678 std::string ft
= FPR(copy(ft_value
));
3679 std::string fs
= FPR(copy(fs_value
));
3681 return img_format("CLASS.D %s, %s", ft
, fs
);
3689 * 10987654321098765432109876543210
3690 * 001000 x1110000101
3695 static std::string
CLASS_S(uint64 instruction
, Dis_info
*info
)
3697 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3698 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3700 std::string ft
= FPR(copy(ft_value
));
3701 std::string fs
= FPR(copy(fs_value
));
3703 return img_format("CLASS.S %s, %s", ft
, fs
);
3711 * 10987654321098765432109876543210
3712 * 001000 x1110000101
3717 static std::string
CLO(uint64 instruction
, Dis_info
*info
)
3719 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3720 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3722 std::string rt
= GPR(copy(rt_value
));
3723 std::string rs
= GPR(copy(rs_value
));
3725 return img_format("CLO %s, %s", rt
, rs
);
3733 * 10987654321098765432109876543210
3734 * 001000 x1110000101
3739 static std::string
CLZ(uint64 instruction
, Dis_info
*info
)
3741 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3742 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3744 std::string rt
= GPR(copy(rt_value
));
3745 std::string rs
= GPR(copy(rs_value
));
3747 return img_format("CLZ %s, %s", rt
, rs
);
3755 * 10987654321098765432109876543210
3756 * 001000 x1110000101
3761 static std::string
CMP_AF_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 std::string fd
= FPR(copy(fd_value
));
3768 std::string fs
= FPR(copy(fs_value
));
3769 std::string ft
= FPR(copy(ft_value
));
3771 return img_format("CMP.AF.D %s, %s, %s", fd
, fs
, ft
);
3779 * 10987654321098765432109876543210
3780 * 001000 x1110000101
3785 static std::string
CMP_AF_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 std::string fd
= FPR(copy(fd_value
));
3792 std::string fs
= FPR(copy(fs_value
));
3793 std::string ft
= FPR(copy(ft_value
));
3795 return img_format("CMP.AF.S %s, %s, %s", fd
, fs
, ft
);
3803 * 10987654321098765432109876543210
3804 * 001000 x1110000101
3809 static std::string
CMP_EQ_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 std::string fd
= FPR(copy(fd_value
));
3816 std::string fs
= FPR(copy(fs_value
));
3817 std::string ft
= FPR(copy(ft_value
));
3819 return img_format("CMP.EQ.D %s, %s, %s", fd
, fs
, ft
);
3824 * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values
3827 * 10987654321098765432109876543210
3828 * 001000 xxxxxx0000000101
3832 static std::string
CMP_EQ_PH(uint64 instruction
, Dis_info
*info
)
3834 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3835 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3837 std::string rs
= GPR(copy(rs_value
));
3838 std::string rt
= GPR(copy(rt_value
));
3840 return img_format("CMP.EQ.PH %s, %s", rs
, rt
);
3848 * 10987654321098765432109876543210
3849 * 001000 x1110000101
3854 static std::string
CMP_EQ_S(uint64 instruction
, Dis_info
*info
)
3856 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3857 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3858 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
3860 std::string fd
= FPR(copy(fd_value
));
3861 std::string fs
= FPR(copy(fs_value
));
3862 std::string ft
= FPR(copy(ft_value
));
3864 return img_format("CMP.EQ.S %s, %s, %s", fd
, fs
, ft
);
3872 * 10987654321098765432109876543210
3873 * 001000 x1110000101
3878 static std::string
CMP_LE_D(uint64 instruction
, Dis_info
*info
)
3880 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3881 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3882 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
3884 std::string fd
= FPR(copy(fd_value
));
3885 std::string fs
= FPR(copy(fs_value
));
3886 std::string ft
= FPR(copy(ft_value
));
3888 return img_format("CMP.LE.D %s, %s, %s", fd
, fs
, ft
);
3893 * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values
3896 * 10987654321098765432109876543210
3897 * 001000 xxxxxx0010000101
3901 static std::string
CMP_LE_PH(uint64 instruction
, Dis_info
*info
)
3903 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3904 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3906 std::string rs
= GPR(copy(rs_value
));
3907 std::string rt
= GPR(copy(rt_value
));
3909 return img_format("CMP.LE.PH %s, %s", rs
, rt
);
3917 * 10987654321098765432109876543210
3918 * 001000 x1110000101
3923 static std::string
CMP_LE_S(uint64 instruction
, Dis_info
*info
)
3925 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3926 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3927 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
3929 std::string fd
= FPR(copy(fd_value
));
3930 std::string fs
= FPR(copy(fs_value
));
3931 std::string ft
= FPR(copy(ft_value
));
3933 return img_format("CMP.LE.S %s, %s, %s", fd
, fs
, ft
);
3941 * 10987654321098765432109876543210
3942 * 001000 x1110000101
3947 static std::string
CMP_LT_D(uint64 instruction
, Dis_info
*info
)
3949 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3950 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3951 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
3953 std::string fd
= FPR(copy(fd_value
));
3954 std::string fs
= FPR(copy(fs_value
));
3955 std::string ft
= FPR(copy(ft_value
));
3957 return img_format("CMP.LT.D %s, %s, %s", fd
, fs
, ft
);
3962 * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values
3965 * 10987654321098765432109876543210
3966 * 001000 xxxxxx0001000101
3970 static std::string
CMP_LT_PH(uint64 instruction
, Dis_info
*info
)
3972 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
3973 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
3975 std::string rs
= GPR(copy(rs_value
));
3976 std::string rt
= GPR(copy(rt_value
));
3978 return img_format("CMP.LT.PH %s, %s", rs
, rt
);
3986 * 10987654321098765432109876543210
3987 * 001000 x1110000101
3992 static std::string
CMP_LT_S(uint64 instruction
, Dis_info
*info
)
3994 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
3995 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
3996 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
3998 std::string fd
= FPR(copy(fd_value
));
3999 std::string fs
= FPR(copy(fs_value
));
4000 std::string ft
= FPR(copy(ft_value
));
4002 return img_format("CMP.LT.S %s, %s, %s", fd
, fs
, ft
);
4010 * 10987654321098765432109876543210
4011 * 001000 x1110000101
4016 static std::string
CMP_NE_D(uint64 instruction
, Dis_info
*info
)
4018 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4019 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4020 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4022 std::string fd
= FPR(copy(fd_value
));
4023 std::string fs
= FPR(copy(fs_value
));
4024 std::string ft
= FPR(copy(ft_value
));
4026 return img_format("CMP.NE.D %s, %s, %s", fd
, fs
, ft
);
4034 * 10987654321098765432109876543210
4035 * 001000 x1110000101
4040 static std::string
CMP_NE_S(uint64 instruction
, Dis_info
*info
)
4042 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4043 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4044 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4046 std::string fd
= FPR(copy(fd_value
));
4047 std::string fs
= FPR(copy(fs_value
));
4048 std::string ft
= FPR(copy(ft_value
));
4050 return img_format("CMP.NE.S %s, %s, %s", fd
, fs
, ft
);
4058 * 10987654321098765432109876543210
4059 * 001000 x1110000101
4064 static std::string
CMP_OR_D(uint64 instruction
, Dis_info
*info
)
4066 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4067 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4068 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4070 std::string fd
= FPR(copy(fd_value
));
4071 std::string fs
= FPR(copy(fs_value
));
4072 std::string ft
= FPR(copy(ft_value
));
4074 return img_format("CMP.OR.D %s, %s, %s", fd
, fs
, ft
);
4082 * 10987654321098765432109876543210
4083 * 001000 x1110000101
4088 static std::string
CMP_OR_S(uint64 instruction
, Dis_info
*info
)
4090 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4091 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4092 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4094 std::string fd
= FPR(copy(fd_value
));
4095 std::string fs
= FPR(copy(fs_value
));
4096 std::string ft
= FPR(copy(ft_value
));
4098 return img_format("CMP.OR.S %s, %s, %s", fd
, fs
, ft
);
4106 * 10987654321098765432109876543210
4107 * 001000 x1110000101
4112 static std::string
CMP_SAF_D(uint64 instruction
, Dis_info
*info
)
4114 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4115 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4116 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4118 std::string fd
= FPR(copy(fd_value
));
4119 std::string fs
= FPR(copy(fs_value
));
4120 std::string ft
= FPR(copy(ft_value
));
4122 return img_format("CMP.SAF.D %s, %s, %s", fd
, fs
, ft
);
4130 * 10987654321098765432109876543210
4131 * 001000 x1110000101
4136 static std::string
CMP_SAF_S(uint64 instruction
, Dis_info
*info
)
4138 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4139 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4140 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4142 std::string fd
= FPR(copy(fd_value
));
4143 std::string fs
= FPR(copy(fs_value
));
4144 std::string ft
= FPR(copy(ft_value
));
4146 return img_format("CMP.SAF.S %s, %s, %s", fd
, fs
, ft
);
4154 * 10987654321098765432109876543210
4155 * 001000 x1110000101
4160 static std::string
CMP_SEQ_D(uint64 instruction
, Dis_info
*info
)
4162 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4163 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4164 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4166 std::string fd
= FPR(copy(fd_value
));
4167 std::string fs
= FPR(copy(fs_value
));
4168 std::string ft
= FPR(copy(ft_value
));
4170 return img_format("CMP.SEQ.D %s, %s, %s", fd
, fs
, ft
);
4178 * 10987654321098765432109876543210
4179 * 001000 x1110000101
4184 static std::string
CMP_SEQ_S(uint64 instruction
, Dis_info
*info
)
4186 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4187 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4188 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4190 std::string fd
= FPR(copy(fd_value
));
4191 std::string fs
= FPR(copy(fs_value
));
4192 std::string ft
= FPR(copy(ft_value
));
4194 return img_format("CMP.SEQ.S %s, %s, %s", fd
, fs
, ft
);
4202 * 10987654321098765432109876543210
4203 * 001000 x1110000101
4208 static std::string
CMP_SLE_D(uint64 instruction
, Dis_info
*info
)
4210 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4211 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4212 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4214 std::string fd
= FPR(copy(fd_value
));
4215 std::string fs
= FPR(copy(fs_value
));
4216 std::string ft
= FPR(copy(ft_value
));
4218 return img_format("CMP.SLE.D %s, %s, %s", fd
, fs
, ft
);
4226 * 10987654321098765432109876543210
4227 * 001000 x1110000101
4232 static std::string
CMP_SLE_S(uint64 instruction
, Dis_info
*info
)
4234 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4235 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4236 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4238 std::string fd
= FPR(copy(fd_value
));
4239 std::string fs
= FPR(copy(fs_value
));
4240 std::string ft
= FPR(copy(ft_value
));
4242 return img_format("CMP.SLE.S %s, %s, %s", fd
, fs
, ft
);
4250 * 10987654321098765432109876543210
4251 * 001000 x1110000101
4256 static std::string
CMP_SLT_D(uint64 instruction
, Dis_info
*info
)
4258 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4259 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4260 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4262 std::string fd
= FPR(copy(fd_value
));
4263 std::string fs
= FPR(copy(fs_value
));
4264 std::string ft
= FPR(copy(ft_value
));
4266 return img_format("CMP.SLT.D %s, %s, %s", fd
, fs
, ft
);
4274 * 10987654321098765432109876543210
4275 * 001000 x1110000101
4280 static std::string
CMP_SLT_S(uint64 instruction
, Dis_info
*info
)
4282 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4283 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4284 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4286 std::string fd
= FPR(copy(fd_value
));
4287 std::string fs
= FPR(copy(fs_value
));
4288 std::string ft
= FPR(copy(ft_value
));
4290 return img_format("CMP.SLT.S %s, %s, %s", fd
, fs
, ft
);
4298 * 10987654321098765432109876543210
4299 * 001000 x1110000101
4304 static std::string
CMP_SNE_D(uint64 instruction
, Dis_info
*info
)
4306 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4307 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4308 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4310 std::string fd
= FPR(copy(fd_value
));
4311 std::string fs
= FPR(copy(fs_value
));
4312 std::string ft
= FPR(copy(ft_value
));
4314 return img_format("CMP.SNE.D %s, %s, %s", fd
, fs
, ft
);
4322 * 10987654321098765432109876543210
4323 * 001000 x1110000101
4328 static std::string
CMP_SNE_S(uint64 instruction
, Dis_info
*info
)
4330 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4331 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4332 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4334 std::string fd
= FPR(copy(fd_value
));
4335 std::string fs
= FPR(copy(fs_value
));
4336 std::string ft
= FPR(copy(ft_value
));
4338 return img_format("CMP.SNE.S %s, %s, %s", fd
, fs
, ft
);
4346 * 10987654321098765432109876543210
4347 * 001000 x1110000101
4352 static std::string
CMP_SOR_D(uint64 instruction
, Dis_info
*info
)
4354 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4355 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4356 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4358 std::string fd
= FPR(copy(fd_value
));
4359 std::string fs
= FPR(copy(fs_value
));
4360 std::string ft
= FPR(copy(ft_value
));
4362 return img_format("CMP.SOR.D %s, %s, %s", fd
, fs
, ft
);
4370 * 10987654321098765432109876543210
4371 * 001000 x1110000101
4376 static std::string
CMP_SOR_S(uint64 instruction
, Dis_info
*info
)
4378 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4379 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4380 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4382 std::string fd
= FPR(copy(fd_value
));
4383 std::string fs
= FPR(copy(fs_value
));
4384 std::string ft
= FPR(copy(ft_value
));
4386 return img_format("CMP.SOR.S %s, %s, %s", fd
, fs
, ft
);
4394 * 10987654321098765432109876543210
4395 * 001000 x1110000101
4400 static std::string
CMP_SUEQ_D(uint64 instruction
, Dis_info
*info
)
4402 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4403 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4404 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4406 std::string fd
= FPR(copy(fd_value
));
4407 std::string fs
= FPR(copy(fs_value
));
4408 std::string ft
= FPR(copy(ft_value
));
4410 return img_format("CMP.SUEQ.D %s, %s, %s", fd
, fs
, ft
);
4418 * 10987654321098765432109876543210
4419 * 001000 x1110000101
4424 static std::string
CMP_SUEQ_S(uint64 instruction
, Dis_info
*info
)
4426 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4427 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4428 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4430 std::string fd
= FPR(copy(fd_value
));
4431 std::string fs
= FPR(copy(fs_value
));
4432 std::string ft
= FPR(copy(ft_value
));
4434 return img_format("CMP.SUEQ.S %s, %s, %s", fd
, fs
, ft
);
4442 * 10987654321098765432109876543210
4443 * 001000 x1110000101
4448 static std::string
CMP_SULE_D(uint64 instruction
, Dis_info
*info
)
4450 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4451 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4452 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4454 std::string fd
= FPR(copy(fd_value
));
4455 std::string fs
= FPR(copy(fs_value
));
4456 std::string ft
= FPR(copy(ft_value
));
4458 return img_format("CMP.SULE.D %s, %s, %s", fd
, fs
, ft
);
4466 * 10987654321098765432109876543210
4467 * 001000 x1110000101
4472 static std::string
CMP_SULE_S(uint64 instruction
, Dis_info
*info
)
4474 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4475 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4476 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4478 std::string fd
= FPR(copy(fd_value
));
4479 std::string fs
= FPR(copy(fs_value
));
4480 std::string ft
= FPR(copy(ft_value
));
4482 return img_format("CMP.SULE.S %s, %s, %s", fd
, fs
, ft
);
4490 * 10987654321098765432109876543210
4491 * 001000 x1110000101
4496 static std::string
CMP_SULT_D(uint64 instruction
, Dis_info
*info
)
4498 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4499 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4500 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4502 std::string fd
= FPR(copy(fd_value
));
4503 std::string fs
= FPR(copy(fs_value
));
4504 std::string ft
= FPR(copy(ft_value
));
4506 return img_format("CMP.SULT.D %s, %s, %s", fd
, fs
, ft
);
4514 * 10987654321098765432109876543210
4515 * 001000 x1110000101
4520 static std::string
CMP_SULT_S(uint64 instruction
, Dis_info
*info
)
4522 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4523 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4524 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4526 std::string fd
= FPR(copy(fd_value
));
4527 std::string fs
= FPR(copy(fs_value
));
4528 std::string ft
= FPR(copy(ft_value
));
4530 return img_format("CMP.SULT.S %s, %s, %s", fd
, fs
, ft
);
4538 * 10987654321098765432109876543210
4539 * 001000 x1110000101
4544 static std::string
CMP_SUN_D(uint64 instruction
, Dis_info
*info
)
4546 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4547 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4548 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4550 std::string fd
= FPR(copy(fd_value
));
4551 std::string fs
= FPR(copy(fs_value
));
4552 std::string ft
= FPR(copy(ft_value
));
4554 return img_format("CMP.SUN.D %s, %s, %s", fd
, fs
, ft
);
4562 * 10987654321098765432109876543210
4563 * 001000 x1110000101
4568 static std::string
CMP_SUNE_D(uint64 instruction
, Dis_info
*info
)
4570 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4571 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4572 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4574 std::string fd
= FPR(copy(fd_value
));
4575 std::string fs
= FPR(copy(fs_value
));
4576 std::string ft
= FPR(copy(ft_value
));
4578 return img_format("CMP.SUNE.D %s, %s, %s", fd
, fs
, ft
);
4586 * 10987654321098765432109876543210
4587 * 001000 x1110000101
4592 static std::string
CMP_SUNE_S(uint64 instruction
, Dis_info
*info
)
4594 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4595 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4596 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4598 std::string fd
= FPR(copy(fd_value
));
4599 std::string fs
= FPR(copy(fs_value
));
4600 std::string ft
= FPR(copy(ft_value
));
4602 return img_format("CMP.SUNE.S %s, %s, %s", fd
, fs
, ft
);
4610 * 10987654321098765432109876543210
4611 * 001000 x1110000101
4616 static std::string
CMP_SUN_S(uint64 instruction
, Dis_info
*info
)
4618 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4619 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4620 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4622 std::string fd
= FPR(copy(fd_value
));
4623 std::string fs
= FPR(copy(fs_value
));
4624 std::string ft
= FPR(copy(ft_value
));
4626 return img_format("CMP.SUN.S %s, %s, %s", fd
, fs
, ft
);
4634 * 10987654321098765432109876543210
4635 * 001000 x1110000101
4640 static std::string
CMP_UEQ_D(uint64 instruction
, Dis_info
*info
)
4642 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4643 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4644 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4646 std::string fd
= FPR(copy(fd_value
));
4647 std::string fs
= FPR(copy(fs_value
));
4648 std::string ft
= FPR(copy(ft_value
));
4650 return img_format("CMP.UEQ.D %s, %s, %s", fd
, fs
, ft
);
4658 * 10987654321098765432109876543210
4659 * 001000 x1110000101
4664 static std::string
CMP_UEQ_S(uint64 instruction
, Dis_info
*info
)
4666 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4667 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4668 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4670 std::string fd
= FPR(copy(fd_value
));
4671 std::string fs
= FPR(copy(fs_value
));
4672 std::string ft
= FPR(copy(ft_value
));
4674 return img_format("CMP.UEQ.S %s, %s, %s", fd
, fs
, ft
);
4682 * 10987654321098765432109876543210
4683 * 001000 x1110000101
4688 static std::string
CMP_ULE_D(uint64 instruction
, Dis_info
*info
)
4690 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4691 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4692 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4694 std::string fd
= FPR(copy(fd_value
));
4695 std::string fs
= FPR(copy(fs_value
));
4696 std::string ft
= FPR(copy(ft_value
));
4698 return img_format("CMP.ULE.D %s, %s, %s", fd
, fs
, ft
);
4706 * 10987654321098765432109876543210
4707 * 001000 x1110000101
4712 static std::string
CMP_ULE_S(uint64 instruction
, Dis_info
*info
)
4714 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4715 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4716 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4718 std::string fd
= FPR(copy(fd_value
));
4719 std::string fs
= FPR(copy(fs_value
));
4720 std::string ft
= FPR(copy(ft_value
));
4722 return img_format("CMP.ULE.S %s, %s, %s", fd
, fs
, ft
);
4730 * 10987654321098765432109876543210
4731 * 001000 x1110000101
4736 static std::string
CMP_ULT_D(uint64 instruction
, Dis_info
*info
)
4738 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4739 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4740 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4742 std::string fd
= FPR(copy(fd_value
));
4743 std::string fs
= FPR(copy(fs_value
));
4744 std::string ft
= FPR(copy(ft_value
));
4746 return img_format("CMP.ULT.D %s, %s, %s", fd
, fs
, ft
);
4754 * 10987654321098765432109876543210
4755 * 001000 x1110000101
4760 static std::string
CMP_ULT_S(uint64 instruction
, Dis_info
*info
)
4762 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4763 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4764 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4766 std::string fd
= FPR(copy(fd_value
));
4767 std::string fs
= FPR(copy(fs_value
));
4768 std::string ft
= FPR(copy(ft_value
));
4770 return img_format("CMP.ULT.S %s, %s, %s", fd
, fs
, ft
);
4778 * 10987654321098765432109876543210
4779 * 001000 x1110000101
4784 static std::string
CMP_UN_D(uint64 instruction
, Dis_info
*info
)
4786 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4787 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4788 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4790 std::string fd
= FPR(copy(fd_value
));
4791 std::string fs
= FPR(copy(fs_value
));
4792 std::string ft
= FPR(copy(ft_value
));
4794 return img_format("CMP.UN.D %s, %s, %s", fd
, fs
, ft
);
4802 * 10987654321098765432109876543210
4803 * 001000 x1110000101
4808 static std::string
CMP_UNE_D(uint64 instruction
, Dis_info
*info
)
4810 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4811 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4812 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4814 std::string fd
= FPR(copy(fd_value
));
4815 std::string fs
= FPR(copy(fs_value
));
4816 std::string ft
= FPR(copy(ft_value
));
4818 return img_format("CMP.UNE.D %s, %s, %s", fd
, fs
, ft
);
4826 * 10987654321098765432109876543210
4827 * 001000 x1110000101
4832 static std::string
CMP_UNE_S(uint64 instruction
, Dis_info
*info
)
4834 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4835 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4836 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4838 std::string fd
= FPR(copy(fd_value
));
4839 std::string fs
= FPR(copy(fs_value
));
4840 std::string ft
= FPR(copy(ft_value
));
4842 return img_format("CMP.UNE.S %s, %s, %s", fd
, fs
, ft
);
4850 * 10987654321098765432109876543210
4851 * 001000 x1110000101
4856 static std::string
CMP_UN_S(uint64 instruction
, Dis_info
*info
)
4858 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
4859 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
4860 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
4862 std::string fd
= FPR(copy(fd_value
));
4863 std::string fs
= FPR(copy(fs_value
));
4864 std::string ft
= FPR(copy(ft_value
));
4866 return img_format("CMP.UN.S %s, %s, %s", fd
, fs
, ft
);
4871 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4872 * four bytes and write result to GPR and DSPControl
4875 * 10987654321098765432109876543210
4876 * 001000 x0110000101
4881 static std::string
CMPGDU_EQ_QB(uint64 instruction
, Dis_info
*info
)
4883 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
4884 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
4885 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
4887 std::string rd
= GPR(copy(rd_value
));
4888 std::string rs
= GPR(copy(rs_value
));
4889 std::string rt
= GPR(copy(rt_value
));
4891 return img_format("CMPGDU.EQ.QB %s, %s, %s", rd
, rs
, rt
);
4896 * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of
4897 * four bytes and write result to GPR and DSPControl
4900 * 10987654321098765432109876543210
4901 * 001000 x1000000101
4906 static std::string
CMPGDU_LE_QB(uint64 instruction
, Dis_info
*info
)
4908 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
4909 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
4910 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
4912 std::string rd
= GPR(copy(rd_value
));
4913 std::string rs
= GPR(copy(rs_value
));
4914 std::string rt
= GPR(copy(rt_value
));
4916 return img_format("CMPGDU.LE.QB %s, %s, %s", rd
, rs
, rt
);
4921 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4922 * four bytes and write result to GPR and DSPControl
4925 * 10987654321098765432109876543210
4926 * 001000 x0111000101
4931 static std::string
CMPGDU_LT_QB(uint64 instruction
, Dis_info
*info
)
4933 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
4934 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
4935 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
4937 std::string rd
= GPR(copy(rd_value
));
4938 std::string rs
= GPR(copy(rs_value
));
4939 std::string rt
= GPR(copy(rt_value
));
4941 return img_format("CMPGDU.LT.QB %s, %s, %s", rd
, rs
, rt
);
4946 * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4947 * byte values and write result to a GPR
4950 * 10987654321098765432109876543210
4951 * 001000 x0011000101
4956 static std::string
CMPGU_EQ_QB(uint64 instruction
, Dis_info
*info
)
4958 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
4959 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
4960 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
4962 std::string rd
= GPR(copy(rd_value
));
4963 std::string rs
= GPR(copy(rs_value
));
4964 std::string rt
= GPR(copy(rt_value
));
4966 return img_format("CMPGU.EQ.QB %s, %s, %s", rd
, rs
, rt
);
4971 * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned
4972 * byte values and write result to a GPR
4975 * 10987654321098765432109876543210
4976 * 001000 x0101000101
4981 static std::string
CMPGU_LE_QB(uint64 instruction
, Dis_info
*info
)
4983 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
4984 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
4985 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
4987 std::string rd
= GPR(copy(rd_value
));
4988 std::string rs
= GPR(copy(rs_value
));
4989 std::string rt
= GPR(copy(rt_value
));
4991 return img_format("CMPGU.LE.QB %s, %s, %s", rd
, rs
, rt
);
4996 * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned
4997 * byte values and write result to a GPR
5000 * 10987654321098765432109876543210
5001 * 001000 x0100000101
5006 static std::string
CMPGU_LT_QB(uint64 instruction
, Dis_info
*info
)
5008 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5009 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5010 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
5012 std::string rd
= GPR(copy(rd_value
));
5013 std::string rs
= GPR(copy(rs_value
));
5014 std::string rt
= GPR(copy(rt_value
));
5016 return img_format("CMPGU.LT.QB %s, %s, %s", rd
, rs
, rt
);
5021 * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned
5025 * 10987654321098765432109876543210
5026 * 001000 xxxxxx1001000101
5030 static std::string
CMPU_EQ_QB(uint64 instruction
, Dis_info
*info
)
5032 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5033 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5035 std::string rs
= GPR(copy(rs_value
));
5036 std::string rt
= GPR(copy(rt_value
));
5038 return img_format("CMPU.EQ.QB %s, %s", rs
, rt
);
5043 * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned
5047 * 10987654321098765432109876543210
5048 * 001000 xxxxxx1011000101
5052 static std::string
CMPU_LE_QB(uint64 instruction
, Dis_info
*info
)
5054 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5055 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5057 std::string rs
= GPR(copy(rs_value
));
5058 std::string rt
= GPR(copy(rt_value
));
5060 return img_format("CMPU.LE.QB %s, %s", rs
, rt
);
5065 * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned
5069 * 10987654321098765432109876543210
5070 * 001000 xxxxxx1010000101
5074 static std::string
CMPU_LT_QB(uint64 instruction
, Dis_info
*info
)
5076 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5077 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5079 std::string rs
= GPR(copy(rs_value
));
5080 std::string rt
= GPR(copy(rt_value
));
5082 return img_format("CMPU.LT.QB %s, %s", rs
, rt
);
5090 * 10987654321098765432109876543210
5091 * 001000 x1110000101
5096 static std::string
COP2_1(uint64 instruction
, Dis_info
*info
)
5098 uint64 cofun_value
= extract_cofun_25_24_23(instruction
);
5100 std::string cofun
= IMMEDIATE(copy(cofun_value
));
5102 return img_format("COP2_1 %s", cofun
);
5110 * 10987654321098765432109876543210
5111 * 001000 x1110000101
5116 static std::string
CTC1(uint64 instruction
, Dis_info
*info
)
5118 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5119 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
5121 std::string rt
= GPR(copy(rt_value
));
5122 std::string cs
= CPR(copy(cs_value
));
5124 return img_format("CTC1 %s, %s", rt
, cs
);
5132 * 10987654321098765432109876543210
5133 * 001000 x1110000101
5138 static std::string
CTC2(uint64 instruction
, Dis_info
*info
)
5140 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5141 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
5143 std::string rt
= GPR(copy(rt_value
));
5144 std::string cs
= CPR(copy(cs_value
));
5146 return img_format("CTC2 %s, %s", rt
, cs
);
5154 * 10987654321098765432109876543210
5155 * 001000 x1110000101
5160 static std::string
CVT_D_L(uint64 instruction
, Dis_info
*info
)
5162 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5163 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5165 std::string ft
= FPR(copy(ft_value
));
5166 std::string fs
= FPR(copy(fs_value
));
5168 return img_format("CVT.D.L %s, %s", ft
, fs
);
5176 * 10987654321098765432109876543210
5177 * 001000 x1110000101
5182 static std::string
CVT_D_S(uint64 instruction
, Dis_info
*info
)
5184 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5185 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5187 std::string ft
= FPR(copy(ft_value
));
5188 std::string fs
= FPR(copy(fs_value
));
5190 return img_format("CVT.D.S %s, %s", ft
, fs
);
5198 * 10987654321098765432109876543210
5199 * 001000 x1110000101
5204 static std::string
CVT_D_W(uint64 instruction
, Dis_info
*info
)
5206 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5207 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5209 std::string ft
= FPR(copy(ft_value
));
5210 std::string fs
= FPR(copy(fs_value
));
5212 return img_format("CVT.D.W %s, %s", ft
, fs
);
5220 * 10987654321098765432109876543210
5221 * 001000 x1110000101
5226 static std::string
CVT_L_D(uint64 instruction
, Dis_info
*info
)
5228 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5229 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5231 std::string ft
= FPR(copy(ft_value
));
5232 std::string fs
= FPR(copy(fs_value
));
5234 return img_format("CVT.L.D %s, %s", ft
, fs
);
5242 * 10987654321098765432109876543210
5243 * 001000 x1110000101
5248 static std::string
CVT_L_S(uint64 instruction
, Dis_info
*info
)
5250 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5251 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5253 std::string ft
= FPR(copy(ft_value
));
5254 std::string fs
= FPR(copy(fs_value
));
5256 return img_format("CVT.L.S %s, %s", ft
, fs
);
5264 * 10987654321098765432109876543210
5265 * 001000 x1110000101
5270 static std::string
CVT_S_D(uint64 instruction
, Dis_info
*info
)
5272 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5273 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5275 std::string ft
= FPR(copy(ft_value
));
5276 std::string fs
= FPR(copy(fs_value
));
5278 return img_format("CVT.S.D %s, %s", ft
, fs
);
5286 * 10987654321098765432109876543210
5287 * 001000 x1110000101
5292 static std::string
CVT_S_L(uint64 instruction
, Dis_info
*info
)
5294 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5295 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5297 std::string ft
= FPR(copy(ft_value
));
5298 std::string fs
= FPR(copy(fs_value
));
5300 return img_format("CVT.S.L %s, %s", ft
, fs
);
5308 * 10987654321098765432109876543210
5309 * 001000 x1110000101
5314 static std::string
CVT_S_PL(uint64 instruction
, Dis_info
*info
)
5316 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5317 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5319 std::string ft
= FPR(copy(ft_value
));
5320 std::string fs
= FPR(copy(fs_value
));
5322 return img_format("CVT.S.PL %s, %s", ft
, fs
);
5330 * 10987654321098765432109876543210
5331 * 001000 x1110000101
5336 static std::string
CVT_S_PU(uint64 instruction
, Dis_info
*info
)
5338 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5339 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5341 std::string ft
= FPR(copy(ft_value
));
5342 std::string fs
= FPR(copy(fs_value
));
5344 return img_format("CVT.S.PU %s, %s", ft
, fs
);
5352 * 10987654321098765432109876543210
5353 * 001000 x1110000101
5358 static std::string
CVT_S_W(uint64 instruction
, Dis_info
*info
)
5360 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5361 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5363 std::string ft
= FPR(copy(ft_value
));
5364 std::string fs
= FPR(copy(fs_value
));
5366 return img_format("CVT.S.W %s, %s", ft
, fs
);
5374 * 10987654321098765432109876543210
5375 * 001000 x1110000101
5380 static std::string
CVT_W_D(uint64 instruction
, Dis_info
*info
)
5382 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5383 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5385 std::string ft
= FPR(copy(ft_value
));
5386 std::string fs
= FPR(copy(fs_value
));
5388 return img_format("CVT.W.D %s, %s", ft
, fs
);
5396 * 10987654321098765432109876543210
5397 * 001000 x1110000101
5402 static std::string
CVT_W_S(uint64 instruction
, Dis_info
*info
)
5404 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5405 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5407 std::string ft
= FPR(copy(ft_value
));
5408 std::string fs
= FPR(copy(fs_value
));
5410 return img_format("CVT.W.S %s, %s", ft
, fs
);
5418 * 10987654321098765432109876543210
5419 * 001000 x1110000101
5424 static std::string
DADDIU_48_(uint64 instruction
, Dis_info
*info
)
5426 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
5427 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
5429 std::string rt
= GPR(copy(rt_value
));
5430 std::string s
= IMMEDIATE(copy(s_value
));
5432 return img_format("DADDIU %s, %s", rt
, s
);
5440 * 10987654321098765432109876543210
5441 * 001000 x1110000101
5446 static std::string
DADDIU_NEG_(uint64 instruction
, Dis_info
*info
)
5448 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5449 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5450 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
5452 std::string rt
= GPR(copy(rt_value
));
5453 std::string rs
= GPR(copy(rs_value
));
5454 std::string u
= IMMEDIATE(neg_copy(u_value
));
5456 return img_format("DADDIU %s, %s, %s", rt
, rs
, u
);
5464 * 10987654321098765432109876543210
5465 * 001000 x1110000101
5470 static std::string
DADDIU_U12_(uint64 instruction
, Dis_info
*info
)
5472 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5473 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5474 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
5476 std::string rt
= GPR(copy(rt_value
));
5477 std::string rs
= GPR(copy(rs_value
));
5478 std::string u
= IMMEDIATE(copy(u_value
));
5480 return img_format("DADDIU %s, %s, %s", rt
, rs
, u
);
5488 * 10987654321098765432109876543210
5489 * 001000 x1110000101
5494 static std::string
DADD(uint64 instruction
, Dis_info
*info
)
5496 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5497 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5498 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
5500 std::string rd
= GPR(copy(rd_value
));
5501 std::string rs
= GPR(copy(rs_value
));
5502 std::string rt
= GPR(copy(rt_value
));
5504 return img_format("DADD %s, %s, %s", rd
, rs
, rt
);
5512 * 10987654321098765432109876543210
5513 * 001000 x1110000101
5518 static std::string
DADDU(uint64 instruction
, Dis_info
*info
)
5520 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5521 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5522 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
5524 std::string rd
= GPR(copy(rd_value
));
5525 std::string rs
= GPR(copy(rs_value
));
5526 std::string rt
= GPR(copy(rt_value
));
5528 return img_format("DADDU %s, %s, %s", rd
, rs
, rt
);
5536 * 10987654321098765432109876543210
5537 * 001000 x1110000101
5542 static std::string
DCLO(uint64 instruction
, Dis_info
*info
)
5544 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5545 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5547 std::string rt
= GPR(copy(rt_value
));
5548 std::string rs
= GPR(copy(rs_value
));
5550 return img_format("DCLO %s, %s", rt
, rs
);
5558 * 10987654321098765432109876543210
5559 * 001000 x1110000101
5564 static std::string
DCLZ(uint64 instruction
, Dis_info
*info
)
5566 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5567 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5569 std::string rt
= GPR(copy(rt_value
));
5570 std::string rs
= GPR(copy(rs_value
));
5572 return img_format("DCLZ %s, %s", rt
, rs
);
5580 * 10987654321098765432109876543210
5581 * 001000 x1110000101
5586 static std::string
DDIV(uint64 instruction
, Dis_info
*info
)
5588 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5589 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5590 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
5592 std::string rd
= GPR(copy(rd_value
));
5593 std::string rs
= GPR(copy(rs_value
));
5594 std::string rt
= GPR(copy(rt_value
));
5596 return img_format("DDIV %s, %s, %s", rd
, rs
, rt
);
5604 * 10987654321098765432109876543210
5605 * 001000 x1110000101
5610 static std::string
DDIVU(uint64 instruction
, Dis_info
*info
)
5612 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5613 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5614 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
5616 std::string rd
= GPR(copy(rd_value
));
5617 std::string rs
= GPR(copy(rs_value
));
5618 std::string rt
= GPR(copy(rt_value
));
5620 return img_format("DDIVU %s, %s, %s", rd
, rs
, rt
);
5628 * 10987654321098765432109876543210
5629 * 001000 x1110000101
5634 static std::string
DERET(uint64 instruction
, Dis_info
*info
)
5646 * 10987654321098765432109876543210
5647 * 001000 x1110000101
5652 static std::string
DEXTM(uint64 instruction
, Dis_info
*info
)
5654 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5655 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5656 uint64 msbd_value
= extract_msbt_10_9_8_7_6(instruction
);
5657 uint64 lsb_value
= extract_lsb_4_3_2_1_0(instruction
);
5659 std::string rt
= GPR(copy(rt_value
));
5660 std::string rs
= GPR(copy(rs_value
));
5661 std::string lsb
= IMMEDIATE(copy(lsb_value
));
5662 std::string msbd
= IMMEDIATE(encode_msbd_from_size(msbd_value
));
5664 return img_format("DEXTM %s, %s, %s, %s", rt
, rs
, lsb
, msbd
);
5672 * 10987654321098765432109876543210
5673 * 001000 x1110000101
5678 static std::string
DEXT(uint64 instruction
, Dis_info
*info
)
5680 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5681 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5682 uint64 msbd_value
= extract_msbt_10_9_8_7_6(instruction
);
5683 uint64 lsb_value
= extract_lsb_4_3_2_1_0(instruction
);
5685 std::string rt
= GPR(copy(rt_value
));
5686 std::string rs
= GPR(copy(rs_value
));
5687 std::string lsb
= IMMEDIATE(copy(lsb_value
));
5688 std::string msbd
= IMMEDIATE(encode_msbd_from_size(msbd_value
));
5690 return img_format("DEXT %s, %s, %s, %s", rt
, rs
, lsb
, msbd
);
5698 * 10987654321098765432109876543210
5699 * 001000 x1110000101
5704 static std::string
DEXTU(uint64 instruction
, Dis_info
*info
)
5706 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5707 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5708 uint64 msbd_value
= extract_msbt_10_9_8_7_6(instruction
);
5709 uint64 lsb_value
= extract_lsb_4_3_2_1_0(instruction
);
5711 std::string rt
= GPR(copy(rt_value
));
5712 std::string rs
= GPR(copy(rs_value
));
5713 std::string lsb
= IMMEDIATE(copy(lsb_value
));
5714 std::string msbd
= IMMEDIATE(encode_msbd_from_size(msbd_value
));
5716 return img_format("DEXTU %s, %s, %s, %s", rt
, rs
, lsb
, msbd
);
5724 * 10987654321098765432109876543210
5725 * 001000 x1110000101
5730 static std::string
DINSM(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 msbd_value
= extract_msbt_10_9_8_7_6(instruction
);
5735 uint64 lsb_value
= extract_lsb_4_3_2_1_0(instruction
);
5737 std::string rt
= GPR(copy(rt_value
));
5738 std::string rs
= GPR(copy(rs_value
));
5739 std::string pos
= IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value
));
5740 std::string size
= IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value
));
5741 /* !!!!!!!!!! - no conversion function */
5743 return img_format("DINSM %s, %s, %s, %s", rt
, rs
, pos
, size
);
5752 * 10987654321098765432109876543210
5753 * 001000 x1110000101
5758 static std::string
DINS(uint64 instruction
, Dis_info
*info
)
5760 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5761 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5762 uint64 msbd_value
= extract_msbt_10_9_8_7_6(instruction
);
5763 uint64 lsb_value
= extract_lsb_4_3_2_1_0(instruction
);
5765 std::string rt
= GPR(copy(rt_value
));
5766 std::string rs
= GPR(copy(rs_value
));
5767 std::string pos
= IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value
));
5768 std::string size
= IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value
));
5769 /* !!!!!!!!!! - no conversion function */
5771 return img_format("DINS %s, %s, %s, %s", rt
, rs
, pos
, size
);
5780 * 10987654321098765432109876543210
5781 * 001000 x1110000101
5786 static std::string
DINSU(uint64 instruction
, Dis_info
*info
)
5788 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5789 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5790 uint64 msbd_value
= extract_msbt_10_9_8_7_6(instruction
);
5791 uint64 lsb_value
= extract_lsb_4_3_2_1_0(instruction
);
5793 std::string rt
= GPR(copy(rt_value
));
5794 std::string rs
= GPR(copy(rs_value
));
5795 std::string pos
= IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value
));
5796 std::string size
= IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value
));
5797 /* !!!!!!!!!! - no conversion function */
5799 return img_format("DINSU %s, %s, %s, %s", rt
, rs
, pos
, size
);
5808 * 10987654321098765432109876543210
5809 * 001000 x1110000101
5814 static std::string
DI(uint64 instruction
, Dis_info
*info
)
5816 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5818 std::string rt
= GPR(copy(rt_value
));
5820 return img_format("DI %s", rt
);
5828 * 10987654321098765432109876543210
5829 * 001000 x1110000101
5834 static std::string
DIV(uint64 instruction
, Dis_info
*info
)
5836 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5837 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5838 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
5840 std::string rd
= GPR(copy(rd_value
));
5841 std::string rs
= GPR(copy(rs_value
));
5842 std::string rt
= GPR(copy(rt_value
));
5844 return img_format("DIV %s, %s, %s", rd
, rs
, rt
);
5852 * 10987654321098765432109876543210
5853 * 001000 x1110000101
5858 static std::string
DIV_D(uint64 instruction
, Dis_info
*info
)
5860 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5861 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5862 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
5864 std::string fd
= FPR(copy(fd_value
));
5865 std::string fs
= FPR(copy(fs_value
));
5866 std::string ft
= FPR(copy(ft_value
));
5868 return img_format("DIV.D %s, %s, %s", fd
, fs
, ft
);
5876 * 10987654321098765432109876543210
5877 * 001000 x1110000101
5882 static std::string
DIV_S(uint64 instruction
, Dis_info
*info
)
5884 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
5885 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
5886 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
5888 std::string fd
= FPR(copy(fd_value
));
5889 std::string fs
= FPR(copy(fs_value
));
5890 std::string ft
= FPR(copy(ft_value
));
5892 return img_format("DIV.S %s, %s, %s", fd
, fs
, ft
);
5900 * 10987654321098765432109876543210
5901 * 001000 x1110000101
5906 static std::string
DIVU(uint64 instruction
, Dis_info
*info
)
5908 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5909 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5910 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
5912 std::string rd
= GPR(copy(rd_value
));
5913 std::string rs
= GPR(copy(rs_value
));
5914 std::string rt
= GPR(copy(rt_value
));
5916 return img_format("DIVU %s, %s, %s", rd
, rs
, rt
);
5924 * 10987654321098765432109876543210
5925 * 001000 x1110000101
5930 static std::string
DLSA(uint64 instruction
, Dis_info
*info
)
5932 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5933 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
5934 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
5935 uint64 u2_value
= extract_u2_10_9(instruction
);
5937 std::string rd
= GPR(copy(rd_value
));
5938 std::string rs
= GPR(copy(rs_value
));
5939 std::string rt
= GPR(copy(rt_value
));
5940 std::string u2
= IMMEDIATE(copy(u2_value
));
5942 return img_format("DLSA %s, %s, %s, %s", rd
, rs
, rt
, u2
);
5950 * 10987654321098765432109876543210
5951 * 001000 x1110000101
5956 static std::string
DLUI_48_(uint64 instruction
, Dis_info
*info
)
5958 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
5959 uint64 u_value
= extract_u_31_to_0__s32(instruction
);
5961 std::string rt
= GPR(copy(rt_value
));
5962 std::string u
= IMMEDIATE(copy(u_value
));
5964 return img_format("DLUI %s, %s", rt
, u
);
5972 * 10987654321098765432109876543210
5973 * 001000 x1110000101
5978 static std::string
DMFC0(uint64 instruction
, Dis_info
*info
)
5980 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
5981 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
5982 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
5984 std::string rt
= GPR(copy(rt_value
));
5985 std::string c0s
= CPR(copy(c0s_value
));
5986 std::string sel
= IMMEDIATE(copy(sel_value
));
5988 return img_format("DMFC0 %s, %s, %s", rt
, c0s
, sel
);
5996 * 10987654321098765432109876543210
5997 * 001000 x1110000101
6002 static std::string
DMFC1(uint64 instruction
, Dis_info
*info
)
6004 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6005 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
6007 std::string rt
= GPR(copy(rt_value
));
6008 std::string fs
= FPR(copy(fs_value
));
6010 return img_format("DMFC1 %s, %s", rt
, fs
);
6018 * 10987654321098765432109876543210
6019 * 001000 x1110000101
6024 static std::string
DMFC2(uint64 instruction
, Dis_info
*info
)
6026 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6027 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
6029 std::string rt
= GPR(copy(rt_value
));
6030 std::string cs
= CPR(copy(cs_value
));
6032 return img_format("DMFC2 %s, %s", rt
, cs
);
6040 * 10987654321098765432109876543210
6041 * 001000 x1110000101
6046 static std::string
DMFGC0(uint64 instruction
, Dis_info
*info
)
6048 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6049 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
6050 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
6052 std::string rt
= GPR(copy(rt_value
));
6053 std::string c0s
= CPR(copy(c0s_value
));
6054 std::string sel
= IMMEDIATE(copy(sel_value
));
6056 return img_format("DMFGC0 %s, %s, %s", rt
, c0s
, sel
);
6064 * 10987654321098765432109876543210
6065 * 001000 x1110000101
6070 static std::string
DMOD(uint64 instruction
, Dis_info
*info
)
6072 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6073 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6074 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6076 std::string rd
= GPR(copy(rd_value
));
6077 std::string rs
= GPR(copy(rs_value
));
6078 std::string rt
= GPR(copy(rt_value
));
6080 return img_format("DMOD %s, %s, %s", rd
, rs
, rt
);
6088 * 10987654321098765432109876543210
6089 * 001000 x1110000101
6094 static std::string
DMODU(uint64 instruction
, Dis_info
*info
)
6096 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6097 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6098 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6100 std::string rd
= GPR(copy(rd_value
));
6101 std::string rs
= GPR(copy(rs_value
));
6102 std::string rt
= GPR(copy(rt_value
));
6104 return img_format("DMODU %s, %s, %s", rd
, rs
, rt
);
6112 * 10987654321098765432109876543210
6113 * 001000 x1110000101
6118 static std::string
DMTC0(uint64 instruction
, Dis_info
*info
)
6120 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6121 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
6122 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
6124 std::string rt
= GPR(copy(rt_value
));
6125 std::string c0s
= CPR(copy(c0s_value
));
6126 std::string sel
= IMMEDIATE(copy(sel_value
));
6128 return img_format("DMTC0 %s, %s, %s", rt
, c0s
, sel
);
6136 * 10987654321098765432109876543210
6137 * 001000 x1110000101
6142 static std::string
DMTC1(uint64 instruction
, Dis_info
*info
)
6144 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6145 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
6147 std::string rt
= GPR(copy(rt_value
));
6148 std::string fs
= FPR(copy(fs_value
));
6150 return img_format("DMTC1 %s, %s", rt
, fs
);
6158 * 10987654321098765432109876543210
6159 * 001000 x1110000101
6164 static std::string
DMTC2(uint64 instruction
, Dis_info
*info
)
6166 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6167 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
6169 std::string rt
= GPR(copy(rt_value
));
6170 std::string cs
= CPR(copy(cs_value
));
6172 return img_format("DMTC2 %s, %s", rt
, cs
);
6180 * 10987654321098765432109876543210
6181 * 001000 x1110000101
6186 static std::string
DMTGC0(uint64 instruction
, Dis_info
*info
)
6188 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6189 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
6190 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
6192 std::string rt
= GPR(copy(rt_value
));
6193 std::string c0s
= CPR(copy(c0s_value
));
6194 std::string sel
= IMMEDIATE(copy(sel_value
));
6196 return img_format("DMTGC0 %s, %s, %s", rt
, c0s
, sel
);
6204 * 10987654321098765432109876543210
6205 * 001000 x1110000101
6210 static std::string
DMT(uint64 instruction
, Dis_info
*info
)
6212 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6214 std::string rt
= GPR(copy(rt_value
));
6216 return img_format("DMT %s", rt
);
6224 * 10987654321098765432109876543210
6225 * 001000 x1110000101
6230 static std::string
DMUH(uint64 instruction
, Dis_info
*info
)
6232 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6233 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6234 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6236 std::string rd
= GPR(copy(rd_value
));
6237 std::string rs
= GPR(copy(rs_value
));
6238 std::string rt
= GPR(copy(rt_value
));
6240 return img_format("DMUH %s, %s, %s", rd
, rs
, rt
);
6248 * 10987654321098765432109876543210
6249 * 001000 x1110000101
6254 static std::string
DMUHU(uint64 instruction
, Dis_info
*info
)
6256 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6257 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6258 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6260 std::string rd
= GPR(copy(rd_value
));
6261 std::string rs
= GPR(copy(rs_value
));
6262 std::string rt
= GPR(copy(rt_value
));
6264 return img_format("DMUHU %s, %s, %s", rd
, rs
, rt
);
6272 * 10987654321098765432109876543210
6273 * 001000 x1110000101
6278 static std::string
DMUL(uint64 instruction
, Dis_info
*info
)
6280 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6281 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6282 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6284 std::string rd
= GPR(copy(rd_value
));
6285 std::string rs
= GPR(copy(rs_value
));
6286 std::string rt
= GPR(copy(rt_value
));
6288 return img_format("DMUL %s, %s, %s", rd
, rs
, rt
);
6296 * 10987654321098765432109876543210
6297 * 001000 x1110000101
6302 static std::string
DMULU(uint64 instruction
, Dis_info
*info
)
6304 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6305 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6306 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6308 std::string rd
= GPR(copy(rd_value
));
6309 std::string rs
= GPR(copy(rs_value
));
6310 std::string rt
= GPR(copy(rt_value
));
6312 return img_format("DMULU %s, %s, %s", rd
, rs
, rt
);
6317 * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on
6318 * vector integer halfword elements
6321 * 10987654321098765432109876543210
6322 * 001000 00000010111111
6327 static std::string
DPA_W_PH(uint64 instruction
, Dis_info
*info
)
6329 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6330 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6331 uint64 ac_value
= extract_ac_15_14(instruction
);
6333 std::string ac
= AC(copy(ac_value
));
6334 std::string rs
= GPR(copy(rs_value
));
6335 std::string rt
= GPR(copy(rt_value
));
6337 return img_format("DPA.W.PH %s, %s, %s", ac
, rs
, rt
);
6345 * 10987654321098765432109876543210
6346 * 001000 x1110000101
6351 static std::string
DPAQ_SA_L_W(uint64 instruction
, Dis_info
*info
)
6353 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6354 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6355 uint64 ac_value
= extract_ac_15_14(instruction
);
6357 std::string ac
= AC(copy(ac_value
));
6358 std::string rs
= GPR(copy(rs_value
));
6359 std::string rt
= GPR(copy(rt_value
));
6361 return img_format("DPAQ_SA.L.W %s, %s, %s", ac
, rs
, rt
);
6369 * 10987654321098765432109876543210
6370 * 001000 x1110000101
6375 static std::string
DPAQ_S_W_PH(uint64 instruction
, Dis_info
*info
)
6377 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6378 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6379 uint64 ac_value
= extract_ac_15_14(instruction
);
6381 std::string ac
= AC(copy(ac_value
));
6382 std::string rs
= GPR(copy(rs_value
));
6383 std::string rt
= GPR(copy(rt_value
));
6385 return img_format("DPAQ_S.W.PH %s, %s, %s", ac
, rs
, rt
);
6393 * 10987654321098765432109876543210
6394 * 001000 x1110000101
6399 static std::string
DPAQX_SA_W_PH(uint64 instruction
, Dis_info
*info
)
6401 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6402 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6403 uint64 ac_value
= extract_ac_15_14(instruction
);
6405 std::string ac
= AC(copy(ac_value
));
6406 std::string rs
= GPR(copy(rs_value
));
6407 std::string rt
= GPR(copy(rt_value
));
6409 return img_format("DPAQX_SA.W.PH %s, %s, %s", ac
, rs
, rt
);
6417 * 10987654321098765432109876543210
6418 * 001000 x1110000101
6423 static std::string
DPAQX_S_W_PH(uint64 instruction
, Dis_info
*info
)
6425 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6426 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6427 uint64 ac_value
= extract_ac_15_14(instruction
);
6429 std::string ac
= AC(copy(ac_value
));
6430 std::string rs
= GPR(copy(rs_value
));
6431 std::string rt
= GPR(copy(rt_value
));
6433 return img_format("DPAQX_S.W.PH %s, %s, %s", ac
, rs
, rt
);
6441 * 10987654321098765432109876543210
6442 * 001000 x1110000101
6447 static std::string
DPAU_H_QBL(uint64 instruction
, Dis_info
*info
)
6449 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6450 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6451 uint64 ac_value
= extract_ac_15_14(instruction
);
6453 std::string ac
= AC(copy(ac_value
));
6454 std::string rs
= GPR(copy(rs_value
));
6455 std::string rt
= GPR(copy(rt_value
));
6457 return img_format("DPAU.H.QBL %s, %s, %s", ac
, rs
, rt
);
6465 * 10987654321098765432109876543210
6466 * 001000 x1110000101
6471 static std::string
DPAU_H_QBR(uint64 instruction
, Dis_info
*info
)
6473 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6474 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6475 uint64 ac_value
= extract_ac_15_14(instruction
);
6477 std::string ac
= AC(copy(ac_value
));
6478 std::string rs
= GPR(copy(rs_value
));
6479 std::string rt
= GPR(copy(rt_value
));
6481 return img_format("DPAU.H.QBR %s, %s, %s", ac
, rs
, rt
);
6489 * 10987654321098765432109876543210
6490 * 001000 x1110000101
6495 static std::string
DPAX_W_PH(uint64 instruction
, Dis_info
*info
)
6497 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6498 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6499 uint64 ac_value
= extract_ac_15_14(instruction
);
6501 std::string ac
= AC(copy(ac_value
));
6502 std::string rs
= GPR(copy(rs_value
));
6503 std::string rt
= GPR(copy(rt_value
));
6505 return img_format("DPAX.W.PH %s, %s, %s", ac
, rs
, rt
);
6513 * 10987654321098765432109876543210
6514 * 001000 x1110000101
6519 static std::string
DPS_W_PH(uint64 instruction
, Dis_info
*info
)
6521 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6522 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6523 uint64 ac_value
= extract_ac_15_14(instruction
);
6525 std::string ac
= AC(copy(ac_value
));
6526 std::string rs
= GPR(copy(rs_value
));
6527 std::string rt
= GPR(copy(rt_value
));
6529 return img_format("DPS.W.PH %s, %s, %s", ac
, rs
, rt
);
6537 * 10987654321098765432109876543210
6538 * 001000 x1110000101
6543 static std::string
DPSQ_SA_L_W(uint64 instruction
, Dis_info
*info
)
6545 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6546 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6547 uint64 ac_value
= extract_ac_15_14(instruction
);
6549 std::string ac
= AC(copy(ac_value
));
6550 std::string rs
= GPR(copy(rs_value
));
6551 std::string rt
= GPR(copy(rt_value
));
6553 return img_format("DPSQ_SA.L.W %s, %s, %s", ac
, rs
, rt
);
6561 * 10987654321098765432109876543210
6562 * 001000 x1110000101
6567 static std::string
DPSQ_S_W_PH(uint64 instruction
, Dis_info
*info
)
6569 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6570 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6571 uint64 ac_value
= extract_ac_15_14(instruction
);
6573 std::string ac
= AC(copy(ac_value
));
6574 std::string rs
= GPR(copy(rs_value
));
6575 std::string rt
= GPR(copy(rt_value
));
6577 return img_format("DPSQ_S.W.PH %s, %s, %s", ac
, rs
, rt
);
6585 * 10987654321098765432109876543210
6586 * 001000 x1110000101
6591 static std::string
DPSQX_SA_W_PH(uint64 instruction
, Dis_info
*info
)
6593 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6594 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6595 uint64 ac_value
= extract_ac_15_14(instruction
);
6597 std::string ac
= AC(copy(ac_value
));
6598 std::string rs
= GPR(copy(rs_value
));
6599 std::string rt
= GPR(copy(rt_value
));
6601 return img_format("DPSQX_SA.W.PH %s, %s, %s", ac
, rs
, rt
);
6609 * 10987654321098765432109876543210
6610 * 001000 x1110000101
6615 static std::string
DPSQX_S_W_PH(uint64 instruction
, Dis_info
*info
)
6617 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6618 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6619 uint64 ac_value
= extract_ac_15_14(instruction
);
6621 std::string ac
= AC(copy(ac_value
));
6622 std::string rs
= GPR(copy(rs_value
));
6623 std::string rt
= GPR(copy(rt_value
));
6625 return img_format("DPSQX_S.W.PH %s, %s, %s", ac
, rs
, rt
);
6633 * 10987654321098765432109876543210
6634 * 001000 x1110000101
6639 static std::string
DPSU_H_QBL(uint64 instruction
, Dis_info
*info
)
6641 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6642 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6643 uint64 ac_value
= extract_ac_15_14(instruction
);
6645 std::string ac
= AC(copy(ac_value
));
6646 std::string rs
= GPR(copy(rs_value
));
6647 std::string rt
= GPR(copy(rt_value
));
6649 return img_format("DPSU.H.QBL %s, %s, %s", ac
, rs
, rt
);
6657 * 10987654321098765432109876543210
6658 * 001000 x1110000101
6663 static std::string
DPSU_H_QBR(uint64 instruction
, Dis_info
*info
)
6665 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6666 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6667 uint64 ac_value
= extract_ac_15_14(instruction
);
6669 std::string ac
= AC(copy(ac_value
));
6670 std::string rs
= GPR(copy(rs_value
));
6671 std::string rt
= GPR(copy(rt_value
));
6673 return img_format("DPSU.H.QBR %s, %s, %s", ac
, rs
, rt
);
6681 * 10987654321098765432109876543210
6682 * 001000 x1110000101
6687 static std::string
DPSX_W_PH(uint64 instruction
, Dis_info
*info
)
6689 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6690 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6691 uint64 ac_value
= extract_ac_15_14(instruction
);
6693 std::string ac
= AC(copy(ac_value
));
6694 std::string rs
= GPR(copy(rs_value
));
6695 std::string rt
= GPR(copy(rt_value
));
6697 return img_format("DPSX.W.PH %s, %s, %s", ac
, rs
, rt
);
6705 * 10987654321098765432109876543210
6706 * 001000 x1110000101
6711 static std::string
DROTR(uint64 instruction
, Dis_info
*info
)
6713 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6714 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6715 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
6717 std::string rt
= GPR(copy(rt_value
));
6718 std::string rs
= GPR(copy(rs_value
));
6719 std::string shift
= IMMEDIATE(copy(shift_value
));
6721 return img_format("DROTR %s, %s, %s", rt
, rs
, shift
);
6729 * 10987654321098765432109876543210
6730 * 10o000 1100xxx0110
6735 static std::string
DROTR32(uint64 instruction
, Dis_info
*info
)
6737 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6738 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6739 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
6741 std::string rt
= GPR(copy(rt_value
));
6742 std::string rs
= GPR(copy(rs_value
));
6743 std::string shift
= IMMEDIATE(copy(shift_value
));
6745 return img_format("DROTR32 %s, %s, %s", rt
, rs
, shift
);
6753 * 10987654321098765432109876543210
6754 * 001000 x1110000101
6759 static std::string
DROTRV(uint64 instruction
, Dis_info
*info
)
6761 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6762 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6763 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6765 std::string rd
= GPR(copy(rd_value
));
6766 std::string rs
= GPR(copy(rs_value
));
6767 std::string rt
= GPR(copy(rt_value
));
6769 return img_format("DROTRV %s, %s, %s", rd
, rs
, rt
);
6777 * 10987654321098765432109876543210
6778 * 001000 x1110000101
6783 static std::string
DROTX(uint64 instruction
, Dis_info
*info
)
6785 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6786 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6787 uint64 shiftx_value
= extract_shiftx_11_10_9_8_7_6(instruction
);
6788 uint64 shift_value
= extract_shift_5_4_3_2_1_0(instruction
);
6790 std::string rt
= GPR(copy(rt_value
));
6791 std::string rs
= GPR(copy(rs_value
));
6792 std::string shift
= IMMEDIATE(copy(shift_value
));
6793 std::string shiftx
= IMMEDIATE(copy(shiftx_value
));
6795 return img_format("DROTX %s, %s, %s, %s", rt
, rs
, shift
, shiftx
);
6803 * 10987654321098765432109876543210
6804 * 10o000 1100xxx0000
6809 static std::string
DSLL(uint64 instruction
, Dis_info
*info
)
6811 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6812 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6813 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
6815 std::string rt
= GPR(copy(rt_value
));
6816 std::string rs
= GPR(copy(rs_value
));
6817 std::string shift
= IMMEDIATE(copy(shift_value
));
6819 return img_format("DSLL %s, %s, %s", rt
, rs
, shift
);
6827 * 10987654321098765432109876543210
6828 * 10o000 1100xxx0000
6833 static std::string
DSLL32(uint64 instruction
, Dis_info
*info
)
6835 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6836 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6837 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
6839 std::string rt
= GPR(copy(rt_value
));
6840 std::string rs
= GPR(copy(rs_value
));
6841 std::string shift
= IMMEDIATE(copy(shift_value
));
6843 return img_format("DSLL32 %s, %s, %s", rt
, rs
, shift
);
6851 * 10987654321098765432109876543210
6852 * 001000 x1110000101
6857 static std::string
DSLLV(uint64 instruction
, Dis_info
*info
)
6859 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6860 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6861 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6863 std::string rd
= GPR(copy(rd_value
));
6864 std::string rs
= GPR(copy(rs_value
));
6865 std::string rt
= GPR(copy(rt_value
));
6867 return img_format("DSLLV %s, %s, %s", rd
, rs
, rt
);
6875 * 10987654321098765432109876543210
6876 * 10o000 1100xxx0100
6881 static std::string
DSRA(uint64 instruction
, Dis_info
*info
)
6883 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6884 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6885 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
6887 std::string rt
= GPR(copy(rt_value
));
6888 std::string rs
= GPR(copy(rs_value
));
6889 std::string shift
= IMMEDIATE(copy(shift_value
));
6891 return img_format("DSRA %s, %s, %s", rt
, rs
, shift
);
6899 * 10987654321098765432109876543210
6900 * 10o000 1100xxx0100
6905 static std::string
DSRA32(uint64 instruction
, Dis_info
*info
)
6907 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6908 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6909 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
6911 std::string rt
= GPR(copy(rt_value
));
6912 std::string rs
= GPR(copy(rs_value
));
6913 std::string shift
= IMMEDIATE(copy(shift_value
));
6915 return img_format("DSRA32 %s, %s, %s", rt
, rs
, shift
);
6923 * 10987654321098765432109876543210
6924 * 001000 x1110000101
6929 static std::string
DSRAV(uint64 instruction
, Dis_info
*info
)
6931 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6932 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6933 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
6935 std::string rd
= GPR(copy(rd_value
));
6936 std::string rs
= GPR(copy(rs_value
));
6937 std::string rt
= GPR(copy(rt_value
));
6939 return img_format("DSRAV %s, %s, %s", rd
, rs
, rt
);
6947 * 10987654321098765432109876543210
6948 * 10o000 1100xxx0100
6953 static std::string
DSRL(uint64 instruction
, Dis_info
*info
)
6955 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6956 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6957 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
6959 std::string rt
= GPR(copy(rt_value
));
6960 std::string rs
= GPR(copy(rs_value
));
6961 std::string shift
= IMMEDIATE(copy(shift_value
));
6963 return img_format("DSRL %s, %s, %s", rt
, rs
, shift
);
6971 * 10987654321098765432109876543210
6972 * 10o000 1100xxx0010
6977 static std::string
DSRL32(uint64 instruction
, Dis_info
*info
)
6979 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
6980 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
6981 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
6983 std::string rt
= GPR(copy(rt_value
));
6984 std::string rs
= GPR(copy(rs_value
));
6985 std::string shift
= IMMEDIATE(copy(shift_value
));
6987 return img_format("DSRL32 %s, %s, %s", rt
, rs
, shift
);
6995 * 10987654321098765432109876543210
6996 * 001000 x1110000101
7001 static std::string
DSRLV(uint64 instruction
, Dis_info
*info
)
7003 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7004 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7005 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
7007 std::string rd
= GPR(copy(rd_value
));
7008 std::string rs
= GPR(copy(rs_value
));
7009 std::string rt
= GPR(copy(rt_value
));
7011 return img_format("DSRLV %s, %s, %s", rd
, rs
, rt
);
7019 * 10987654321098765432109876543210
7020 * 001000 x1110000101
7025 static std::string
DSUB(uint64 instruction
, Dis_info
*info
)
7027 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7028 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7029 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
7031 std::string rd
= GPR(copy(rd_value
));
7032 std::string rs
= GPR(copy(rs_value
));
7033 std::string rt
= GPR(copy(rt_value
));
7035 return img_format("DSUB %s, %s, %s", rd
, rs
, rt
);
7043 * 10987654321098765432109876543210
7044 * 001000 x1110000101
7049 static std::string
DSUBU(uint64 instruction
, Dis_info
*info
)
7051 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7052 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7053 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
7055 std::string rd
= GPR(copy(rd_value
));
7056 std::string rs
= GPR(copy(rs_value
));
7057 std::string rt
= GPR(copy(rt_value
));
7059 return img_format("DSUBU %s, %s, %s", rd
, rs
, rt
);
7067 * 10987654321098765432109876543210
7068 * 001000 x1110000101
7073 static std::string
DVPE(uint64 instruction
, Dis_info
*info
)
7075 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7077 std::string rt
= GPR(copy(rt_value
));
7079 return img_format("DVPE %s", rt
);
7087 * 10987654321098765432109876543210
7088 * 001000 x1110000101
7093 static std::string
DVP(uint64 instruction
, Dis_info
*info
)
7095 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7097 std::string rt
= GPR(copy(rt_value
));
7099 return img_format("DVP %s", rt
);
7107 * 10987654321098765432109876543210
7108 * 001000 x1110000101
7113 static std::string
EHB(uint64 instruction
, Dis_info
*info
)
7125 * 10987654321098765432109876543210
7126 * 001000 x1110000101
7131 static std::string
EI(uint64 instruction
, Dis_info
*info
)
7133 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7135 std::string rt
= GPR(copy(rt_value
));
7137 return img_format("EI %s", rt
);
7145 * 10987654321098765432109876543210
7146 * 001000 x1110000101
7151 static std::string
EMT(uint64 instruction
, Dis_info
*info
)
7153 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7155 std::string rt
= GPR(copy(rt_value
));
7157 return img_format("EMT %s", rt
);
7165 * 10987654321098765432109876543210
7166 * 001000 x1110000101
7171 static std::string
ERET(uint64 instruction
, Dis_info
*info
)
7183 * 10987654321098765432109876543210
7184 * 001000 x1110000101
7189 static std::string
ERETNC(uint64 instruction
, Dis_info
*info
)
7201 * 10987654321098765432109876543210
7202 * 001000 x1110000101
7207 static std::string
EVP(uint64 instruction
, Dis_info
*info
)
7209 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7211 std::string rt
= GPR(copy(rt_value
));
7213 return img_format("EVP %s", rt
);
7221 * 10987654321098765432109876543210
7222 * 001000 x1110000101
7227 static std::string
EVPE(uint64 instruction
, Dis_info
*info
)
7229 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7231 std::string rt
= GPR(copy(rt_value
));
7233 return img_format("EVPE %s", rt
);
7241 * 10987654321098765432109876543210
7242 * 001000 x1110000101
7247 static std::string
EXT(uint64 instruction
, Dis_info
*info
)
7249 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7250 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7251 uint64 msbd_value
= extract_msbt_10_9_8_7_6(instruction
);
7252 uint64 lsb_value
= extract_lsb_4_3_2_1_0(instruction
);
7254 std::string rt
= GPR(copy(rt_value
));
7255 std::string rs
= GPR(copy(rs_value
));
7256 std::string lsb
= IMMEDIATE(copy(lsb_value
));
7257 std::string msbd
= IMMEDIATE(encode_msbd_from_size(msbd_value
));
7259 return img_format("EXT %s, %s, %s, %s", rt
, rs
, lsb
, msbd
);
7267 * 10987654321098765432109876543210
7268 * 001000 x1110000101
7273 static std::string
EXTD(uint64 instruction
, Dis_info
*info
)
7275 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7276 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7277 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
7278 uint64 shift_value
= extract_shift_10_9_8_7_6(instruction
);
7280 std::string rd
= GPR(copy(rd_value
));
7281 std::string rs
= GPR(copy(rs_value
));
7282 std::string rt
= GPR(copy(rt_value
));
7283 std::string shift
= IMMEDIATE(copy(shift_value
));
7285 return img_format("EXTD %s, %s, %s, %s", rd
, rs
, rt
, shift
);
7293 * 10987654321098765432109876543210
7294 * 001000 x1110000101
7299 static std::string
EXTD32(uint64 instruction
, Dis_info
*info
)
7301 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7302 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7303 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
7304 uint64 shift_value
= extract_shift_10_9_8_7_6(instruction
);
7306 std::string rd
= GPR(copy(rd_value
));
7307 std::string rs
= GPR(copy(rs_value
));
7308 std::string rt
= GPR(copy(rt_value
));
7309 std::string shift
= IMMEDIATE(copy(shift_value
));
7311 return img_format("EXTD32 %s, %s, %s, %s", rd
, rs
, rt
, shift
);
7319 * 10987654321098765432109876543210
7320 * 001000 x1110000101
7325 static std::string
EXTPDP(uint64 instruction
, Dis_info
*info
)
7327 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7328 uint64 size_value
= extract_size_20_19_18_17_16(instruction
);
7329 uint64 ac_value
= extract_ac_15_14(instruction
);
7331 std::string rt
= GPR(copy(rt_value
));
7332 std::string ac
= AC(copy(ac_value
));
7333 std::string size
= IMMEDIATE(copy(size_value
));
7335 return img_format("EXTPDP %s, %s, %s", rt
, ac
, size
);
7343 * 10987654321098765432109876543210
7344 * 001000 x1110000101
7349 static std::string
EXTPDPV(uint64 instruction
, Dis_info
*info
)
7351 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7352 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7353 uint64 ac_value
= extract_ac_15_14(instruction
);
7355 std::string rt
= GPR(copy(rt_value
));
7356 std::string ac
= AC(copy(ac_value
));
7357 std::string rs
= GPR(copy(rs_value
));
7359 return img_format("EXTPDPV %s, %s, %s", rt
, ac
, rs
);
7367 * 10987654321098765432109876543210
7368 * 001000 x1110000101
7373 static std::string
EXTP(uint64 instruction
, Dis_info
*info
)
7375 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7376 uint64 size_value
= extract_size_20_19_18_17_16(instruction
);
7377 uint64 ac_value
= extract_ac_15_14(instruction
);
7379 std::string rt
= GPR(copy(rt_value
));
7380 std::string ac
= AC(copy(ac_value
));
7381 std::string size
= IMMEDIATE(copy(size_value
));
7383 return img_format("EXTP %s, %s, %s", rt
, ac
, size
);
7391 * 10987654321098765432109876543210
7392 * 001000 x1110000101
7397 static std::string
EXTPV(uint64 instruction
, Dis_info
*info
)
7399 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7400 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7401 uint64 ac_value
= extract_ac_15_14(instruction
);
7403 std::string rt
= GPR(copy(rt_value
));
7404 std::string ac
= AC(copy(ac_value
));
7405 std::string rs
= GPR(copy(rs_value
));
7407 return img_format("EXTPV %s, %s, %s", rt
, ac
, rs
);
7412 * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR
7416 * 10987654321098765432109876543210
7417 * 001000 10111001111111
7422 static std::string
EXTR_RS_W(uint64 instruction
, Dis_info
*info
)
7424 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7425 uint64 shift_value
= extract_shift_20_19_18_17_16(instruction
);
7426 uint64 ac_value
= extract_ac_15_14(instruction
);
7428 std::string rt
= GPR(copy(rt_value
));
7429 std::string ac
= AC(copy(ac_value
));
7430 std::string shift
= IMMEDIATE(copy(shift_value
));
7432 return img_format("EXTR_RS.W %s, %s, %s", rt
, ac
, shift
);
7437 * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR
7441 * 10987654321098765432109876543210
7442 * 001000 01111001111111
7447 static std::string
EXTR_R_W(uint64 instruction
, Dis_info
*info
)
7449 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7450 uint64 shift_value
= extract_shift_20_19_18_17_16(instruction
);
7451 uint64 ac_value
= extract_ac_15_14(instruction
);
7453 std::string rt
= GPR(copy(rt_value
));
7454 std::string ac
= AC(copy(ac_value
));
7455 std::string shift
= IMMEDIATE(copy(shift_value
));
7457 return img_format("EXTR_R.W %s, %s, %s", rt
, ac
, shift
);
7462 * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator
7463 * to GPR with right shift and saturate
7466 * 10987654321098765432109876543210
7467 * 001000 11111001111111
7472 static std::string
EXTR_S_H(uint64 instruction
, Dis_info
*info
)
7474 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7475 uint64 shift_value
= extract_shift_20_19_18_17_16(instruction
);
7476 uint64 ac_value
= extract_ac_15_14(instruction
);
7478 std::string rt
= GPR(copy(rt_value
));
7479 std::string ac
= AC(copy(ac_value
));
7480 std::string shift
= IMMEDIATE(copy(shift_value
));
7482 return img_format("EXTR_S.H %s, %s, %s", rt
, ac
, shift
);
7487 * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR
7491 * 10987654321098765432109876543210
7492 * 001000 00111001111111
7497 static std::string
EXTR_W(uint64 instruction
, Dis_info
*info
)
7499 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7500 uint64 shift_value
= extract_shift_20_19_18_17_16(instruction
);
7501 uint64 ac_value
= extract_ac_15_14(instruction
);
7503 std::string rt
= GPR(copy(rt_value
));
7504 std::string ac
= AC(copy(ac_value
));
7505 std::string shift
= IMMEDIATE(copy(shift_value
));
7507 return img_format("EXTR.W %s, %s, %s", rt
, ac
, shift
);
7512 * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable
7513 * right shift from accumulator to GPR
7516 * 10987654321098765432109876543210
7517 * 001000 10111010111111
7522 static std::string
EXTRV_RS_W(uint64 instruction
, Dis_info
*info
)
7524 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7525 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7526 uint64 ac_value
= extract_ac_15_14(instruction
);
7528 std::string rt
= GPR(copy(rt_value
));
7529 std::string ac
= AC(copy(ac_value
));
7530 std::string rs
= GPR(copy(rs_value
));
7532 return img_format("EXTRV_RS.W %s, %s, %s", rt
, ac
, rs
);
7537 * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable
7538 * right shift from accumulator to GPR
7541 * 10987654321098765432109876543210
7542 * 001000 01111010111111
7547 static std::string
EXTRV_R_W(uint64 instruction
, Dis_info
*info
)
7549 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7550 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7551 uint64 ac_value
= extract_ac_15_14(instruction
);
7553 std::string rt
= GPR(copy(rt_value
));
7554 std::string ac
= AC(copy(ac_value
));
7555 std::string rs
= GPR(copy(rs_value
));
7557 return img_format("EXTRV_R.W %s, %s, %s", rt
, ac
, rs
);
7562 * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from
7563 * accumulator to GPR with right shift and saturate
7566 * 10987654321098765432109876543210
7567 * 001000 11111010111111
7572 static std::string
EXTRV_S_H(uint64 instruction
, Dis_info
*info
)
7574 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7575 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7576 uint64 ac_value
= extract_ac_15_14(instruction
);
7578 std::string rt
= GPR(copy(rt_value
));
7579 std::string ac
= AC(copy(ac_value
));
7580 std::string rs
= GPR(copy(rs_value
));
7582 return img_format("EXTRV_S.H %s, %s, %s", rt
, ac
, rs
);
7587 * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable
7588 * right shift from accumulator to GPR
7591 * 10987654321098765432109876543210
7592 * 001000 00111010111111
7597 static std::string
EXTRV_W(uint64 instruction
, Dis_info
*info
)
7599 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7600 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7601 uint64 ac_value
= extract_ac_15_14(instruction
);
7603 std::string rt
= GPR(copy(rt_value
));
7604 std::string ac
= AC(copy(ac_value
));
7605 std::string rs
= GPR(copy(rs_value
));
7607 return img_format("EXTRV.W %s, %s, %s", rt
, ac
, rs
);
7612 * EXTW - Extract Word
7615 * 10987654321098765432109876543210
7622 static std::string
EXTW(uint64 instruction
, Dis_info
*info
)
7624 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7625 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7626 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
7627 uint64 shift_value
= extract_shift_10_9_8_7_6(instruction
);
7629 std::string rd
= GPR(copy(rd_value
));
7630 std::string rs
= GPR(copy(rs_value
));
7631 std::string rt
= GPR(copy(rt_value
));
7632 std::string shift
= IMMEDIATE(copy(shift_value
));
7634 return img_format("EXTW %s, %s, %s, %s", rd
, rs
, rt
, shift
);
7642 * 10987654321098765432109876543210
7643 * 001000 x1110000101
7648 static std::string
FLOOR_L_D(uint64 instruction
, Dis_info
*info
)
7650 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
7651 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
7653 std::string ft
= FPR(copy(ft_value
));
7654 std::string fs
= FPR(copy(fs_value
));
7656 return img_format("FLOOR.L.D %s, %s", ft
, fs
);
7664 * 10987654321098765432109876543210
7665 * 001000 x1110000101
7670 static std::string
FLOOR_L_S(uint64 instruction
, Dis_info
*info
)
7672 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
7673 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
7675 std::string ft
= FPR(copy(ft_value
));
7676 std::string fs
= FPR(copy(fs_value
));
7678 return img_format("FLOOR.L.S %s, %s", ft
, fs
);
7686 * 10987654321098765432109876543210
7687 * 001000 x1110000101
7692 static std::string
FLOOR_W_D(uint64 instruction
, Dis_info
*info
)
7694 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
7695 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
7697 std::string ft
= FPR(copy(ft_value
));
7698 std::string fs
= FPR(copy(fs_value
));
7700 return img_format("FLOOR.W.D %s, %s", ft
, fs
);
7708 * 10987654321098765432109876543210
7709 * 001000 x1110000101
7714 static std::string
FLOOR_W_S(uint64 instruction
, Dis_info
*info
)
7716 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
7717 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
7719 std::string ft
= FPR(copy(ft_value
));
7720 std::string fs
= FPR(copy(fs_value
));
7722 return img_format("FLOOR.W.S %s, %s", ft
, fs
);
7730 * 10987654321098765432109876543210
7731 * 001000 x1110000101
7736 static std::string
FORK(uint64 instruction
, Dis_info
*info
)
7738 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7739 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7740 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
7742 std::string rd
= GPR(copy(rd_value
));
7743 std::string rs
= GPR(copy(rs_value
));
7744 std::string rt
= GPR(copy(rt_value
));
7746 return img_format("FORK %s, %s, %s", rd
, rs
, rt
);
7754 * 10987654321098765432109876543210
7755 * 001000 x1110000101
7760 static std::string
HYPCALL(uint64 instruction
, Dis_info
*info
)
7762 uint64 code_value
= extract_code_17_to_0(instruction
);
7764 std::string code
= IMMEDIATE(copy(code_value
));
7766 return img_format("HYPCALL %s", code
);
7774 * 10987654321098765432109876543210
7775 * 001000 x1110000101
7780 static std::string
HYPCALL_16_(uint64 instruction
, Dis_info
*info
)
7782 uint64 code_value
= extract_code_1_0(instruction
);
7784 std::string code
= IMMEDIATE(copy(code_value
));
7786 return img_format("HYPCALL %s", code
);
7794 * 10987654321098765432109876543210
7795 * 001000 x1110000101
7800 static std::string
INS(uint64 instruction
, Dis_info
*info
)
7802 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7803 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7804 uint64 msbd_value
= extract_msbt_10_9_8_7_6(instruction
);
7805 uint64 lsb_value
= extract_lsb_4_3_2_1_0(instruction
);
7807 std::string rt
= GPR(copy(rt_value
));
7808 std::string rs
= GPR(copy(rs_value
));
7809 std::string pos
= IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value
));
7810 std::string size
= IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value
));
7811 /* !!!!!!!!!! - no conversion function */
7813 return img_format("INS %s, %s, %s, %s", rt
, rs
, pos
, size
);
7819 * [DSP] INSV rt, rs - Insert bit field variable
7822 * 10987654321098765432109876543210
7823 * 001000 0100000100111111
7827 static std::string
INSV(uint64 instruction
, Dis_info
*info
)
7829 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7830 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7832 std::string rt
= GPR(copy(rt_value
));
7833 std::string rs
= GPR(copy(rs_value
));
7835 return img_format("INSV %s, %s", rt
, rs
);
7843 * 10987654321098765432109876543210
7844 * 001000 x1110000101
7849 static std::string
IRET(uint64 instruction
, Dis_info
*info
)
7861 * 10987654321098765432109876543210
7862 * 001000 x1110000101
7867 static std::string
JALRC_16_(uint64 instruction
, Dis_info
*info
)
7869 uint64 rt_value
= extract_rt_9_8_7_6_5(instruction
);
7871 std::string rt
= GPR(copy(rt_value
));
7873 return img_format("JALRC $%d, %s", 31, rt
);
7881 * 10987654321098765432109876543210
7882 * 001000 x1110000101
7887 static std::string
JALRC_32_(uint64 instruction
, Dis_info
*info
)
7889 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7890 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7892 std::string rt
= GPR(copy(rt_value
));
7893 std::string rs
= GPR(copy(rs_value
));
7895 return img_format("JALRC %s, %s", rt
, rs
);
7903 * 10987654321098765432109876543210
7904 * 001000 x1110000101
7909 static std::string
JALRC_HB(uint64 instruction
, Dis_info
*info
)
7911 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7912 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
7914 std::string rt
= GPR(copy(rt_value
));
7915 std::string rs
= GPR(copy(rs_value
));
7917 return img_format("JALRC.HB %s, %s", rt
, rs
);
7925 * 10987654321098765432109876543210
7926 * 001000 x1110000101
7931 static std::string
JRC(uint64 instruction
, Dis_info
*info
)
7933 uint64 rt_value
= extract_rt_9_8_7_6_5(instruction
);
7935 std::string rt
= GPR(copy(rt_value
));
7937 return img_format("JRC %s", rt
);
7945 * 10987654321098765432109876543210
7946 * 001000 x1110000101
7951 static std::string
LB_16_(uint64 instruction
, Dis_info
*info
)
7953 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
7954 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
7955 uint64 u_value
= extract_u_1_0(instruction
);
7957 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
7958 std::string u
= IMMEDIATE(copy(u_value
));
7959 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
7961 return img_format("LB %s, %s(%s)", rt3
, u
, rs3
);
7969 * 10987654321098765432109876543210
7970 * 001000 x1110000101
7975 static std::string
LB_GP_(uint64 instruction
, Dis_info
*info
)
7977 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
7978 uint64 u_value
= extract_u_17_to_0(instruction
);
7980 std::string rt
= GPR(copy(rt_value
));
7981 std::string u
= IMMEDIATE(copy(u_value
));
7983 return img_format("LB %s, %s($%d)", rt
, u
, 28);
7991 * 10987654321098765432109876543210
7992 * 001000 x1110000101
7997 static std::string
LB_S9_(uint64 instruction
, Dis_info
*info
)
7999 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8000 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8001 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8003 std::string rt
= GPR(copy(rt_value
));
8004 std::string s
= IMMEDIATE(copy(s_value
));
8005 std::string rs
= GPR(copy(rs_value
));
8007 return img_format("LB %s, %s(%s)", rt
, s
, rs
);
8015 * 10987654321098765432109876543210
8016 * 001000 x1110000101
8021 static std::string
LB_U12_(uint64 instruction
, Dis_info
*info
)
8023 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8024 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8025 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
8027 std::string rt
= GPR(copy(rt_value
));
8028 std::string u
= IMMEDIATE(copy(u_value
));
8029 std::string rs
= GPR(copy(rs_value
));
8031 return img_format("LB %s, %s(%s)", rt
, u
, rs
);
8039 * 10987654321098765432109876543210
8040 * 001000 x1110000101
8045 static std::string
LBE(uint64 instruction
, Dis_info
*info
)
8047 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8048 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8049 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8051 std::string rt
= GPR(copy(rt_value
));
8052 std::string s
= IMMEDIATE(copy(s_value
));
8053 std::string rs
= GPR(copy(rs_value
));
8055 return img_format("LBE %s, %s(%s)", rt
, s
, rs
);
8063 * 10987654321098765432109876543210
8064 * 001000 x1110000101
8069 static std::string
LBU_16_(uint64 instruction
, Dis_info
*info
)
8071 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
8072 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
8073 uint64 u_value
= extract_u_1_0(instruction
);
8075 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
8076 std::string u
= IMMEDIATE(copy(u_value
));
8077 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
8079 return img_format("LBU %s, %s(%s)", rt3
, u
, rs3
);
8087 * 10987654321098765432109876543210
8088 * 001000 x1110000101
8093 static std::string
LBU_GP_(uint64 instruction
, Dis_info
*info
)
8095 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8096 uint64 u_value
= extract_u_17_to_0(instruction
);
8098 std::string rt
= GPR(copy(rt_value
));
8099 std::string u
= IMMEDIATE(copy(u_value
));
8101 return img_format("LBU %s, %s($%d)", rt
, u
, 28);
8109 * 10987654321098765432109876543210
8110 * 001000 x1110000101
8115 static std::string
LBU_S9_(uint64 instruction
, Dis_info
*info
)
8117 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8118 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8119 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8121 std::string rt
= GPR(copy(rt_value
));
8122 std::string s
= IMMEDIATE(copy(s_value
));
8123 std::string rs
= GPR(copy(rs_value
));
8125 return img_format("LBU %s, %s(%s)", rt
, s
, rs
);
8133 * 10987654321098765432109876543210
8134 * 001000 x1110000101
8139 static std::string
LBU_U12_(uint64 instruction
, Dis_info
*info
)
8141 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8142 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8143 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
8145 std::string rt
= GPR(copy(rt_value
));
8146 std::string u
= IMMEDIATE(copy(u_value
));
8147 std::string rs
= GPR(copy(rs_value
));
8149 return img_format("LBU %s, %s(%s)", rt
, u
, rs
);
8157 * 10987654321098765432109876543210
8158 * 001000 x1110000101
8163 static std::string
LBUE(uint64 instruction
, Dis_info
*info
)
8165 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8166 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8167 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8169 std::string rt
= GPR(copy(rt_value
));
8170 std::string s
= IMMEDIATE(copy(s_value
));
8171 std::string rs
= GPR(copy(rs_value
));
8173 return img_format("LBUE %s, %s(%s)", rt
, s
, rs
);
8181 * 10987654321098765432109876543210
8182 * 001000 x1110000101
8187 static std::string
LBUX(uint64 instruction
, Dis_info
*info
)
8189 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8190 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8191 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
8193 std::string rd
= GPR(copy(rd_value
));
8194 std::string rs
= GPR(copy(rs_value
));
8195 std::string rt
= GPR(copy(rt_value
));
8197 return img_format("LBUX %s, %s(%s)", rd
, rs
, rt
);
8205 * 10987654321098765432109876543210
8206 * 001000 x1110000101
8211 static std::string
LBX(uint64 instruction
, Dis_info
*info
)
8213 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8214 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8215 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
8217 std::string rd
= GPR(copy(rd_value
));
8218 std::string rs
= GPR(copy(rs_value
));
8219 std::string rt
= GPR(copy(rt_value
));
8221 return img_format("LBX %s, %s(%s)", rd
, rs
, rt
);
8229 * 10987654321098765432109876543210
8230 * 001000 x1110000101
8235 static std::string
LD_GP_(uint64 instruction
, Dis_info
*info
)
8237 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8238 uint64 u_value
= extract_u_20_to_3__s3(instruction
);
8240 std::string rt
= GPR(copy(rt_value
));
8241 std::string u
= IMMEDIATE(copy(u_value
));
8243 return img_format("LD %s, %s($%d)", rt
, u
, 28);
8251 * 10987654321098765432109876543210
8252 * 001000 x1110000101
8257 static std::string
LD_S9_(uint64 instruction
, Dis_info
*info
)
8259 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8260 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8261 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8263 std::string rt
= GPR(copy(rt_value
));
8264 std::string s
= IMMEDIATE(copy(s_value
));
8265 std::string rs
= GPR(copy(rs_value
));
8267 return img_format("LD %s, %s(%s)", rt
, s
, rs
);
8275 * 10987654321098765432109876543210
8276 * 001000 x1110000101
8281 static std::string
LD_U12_(uint64 instruction
, Dis_info
*info
)
8283 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8284 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8285 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
8287 std::string rt
= GPR(copy(rt_value
));
8288 std::string u
= IMMEDIATE(copy(u_value
));
8289 std::string rs
= GPR(copy(rs_value
));
8291 return img_format("LD %s, %s(%s)", rt
, u
, rs
);
8299 * 10987654321098765432109876543210
8300 * 001000 x1110000101
8305 static std::string
LDC1_GP_(uint64 instruction
, Dis_info
*info
)
8307 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
8308 uint64 u_value
= extract_u_17_to_2__s2(instruction
);
8310 std::string ft
= FPR(copy(ft_value
));
8311 std::string u
= IMMEDIATE(copy(u_value
));
8313 return img_format("LDC1 %s, %s($%d)", ft
, u
, 28);
8321 * 10987654321098765432109876543210
8322 * 001000 x1110000101
8327 static std::string
LDC1_S9_(uint64 instruction
, Dis_info
*info
)
8329 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
8330 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8331 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8333 std::string ft
= FPR(copy(ft_value
));
8334 std::string s
= IMMEDIATE(copy(s_value
));
8335 std::string rs
= GPR(copy(rs_value
));
8337 return img_format("LDC1 %s, %s(%s)", ft
, s
, rs
);
8345 * 10987654321098765432109876543210
8346 * 001000 x1110000101
8351 static std::string
LDC1_U12_(uint64 instruction
, Dis_info
*info
)
8353 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
8354 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8355 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
8357 std::string ft
= FPR(copy(ft_value
));
8358 std::string u
= IMMEDIATE(copy(u_value
));
8359 std::string rs
= GPR(copy(rs_value
));
8361 return img_format("LDC1 %s, %s(%s)", ft
, u
, rs
);
8369 * 10987654321098765432109876543210
8370 * 001000 x1110000101
8375 static std::string
LDC1XS(uint64 instruction
, Dis_info
*info
)
8377 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8378 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8379 uint64 ft_value
= extract_ft_15_14_13_12_11(instruction
);
8381 std::string ft
= FPR(copy(ft_value
));
8382 std::string rs
= GPR(copy(rs_value
));
8383 std::string rt
= GPR(copy(rt_value
));
8385 return img_format("LDC1XS %s, %s(%s)", ft
, rs
, rt
);
8393 * 10987654321098765432109876543210
8394 * 001000 x1110000101
8399 static std::string
LDC1X(uint64 instruction
, Dis_info
*info
)
8401 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8402 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8403 uint64 ft_value
= extract_ft_15_14_13_12_11(instruction
);
8405 std::string ft
= FPR(copy(ft_value
));
8406 std::string rs
= GPR(copy(rs_value
));
8407 std::string rt
= GPR(copy(rt_value
));
8409 return img_format("LDC1X %s, %s(%s)", ft
, rs
, rt
);
8417 * 10987654321098765432109876543210
8418 * 001000 x1110000101
8423 static std::string
LDC2(uint64 instruction
, Dis_info
*info
)
8425 uint64 ct_value
= extract_ct_25_24_23_22_21(instruction
);
8426 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8427 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8429 std::string ct
= CPR(copy(ct_value
));
8430 std::string s
= IMMEDIATE(copy(s_value
));
8431 std::string rs
= GPR(copy(rs_value
));
8433 return img_format("LDC2 %s, %s(%s)", ct
, s
, rs
);
8441 * 10987654321098765432109876543210
8442 * 001000 x1110000101
8447 static std::string
LDM(uint64 instruction
, Dis_info
*info
)
8449 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8450 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8451 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8452 uint64 count3_value
= extract_count3_14_13_12(instruction
);
8454 std::string rt
= GPR(copy(rt_value
));
8455 std::string s
= IMMEDIATE(copy(s_value
));
8456 std::string rs
= GPR(copy(rs_value
));
8457 std::string count3
= IMMEDIATE(encode_count3_from_count(count3_value
));
8459 return img_format("LDM %s, %s(%s), %s", rt
, s
, rs
, count3
);
8467 * 10987654321098765432109876543210
8468 * 001000 x1110000101
8473 static std::string
LDPC_48_(uint64 instruction
, Dis_info
*info
)
8475 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
8476 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
8478 std::string rt
= GPR(copy(rt_value
));
8479 std::string s
= ADDRESS(encode_s_from_address(s_value
), 6, info
);
8481 return img_format("LDPC %s, %s", rt
, s
);
8489 * 10987654321098765432109876543210
8490 * 001000 x1110000101
8495 static std::string
LDX(uint64 instruction
, Dis_info
*info
)
8497 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8498 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8499 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
8501 std::string rd
= GPR(copy(rd_value
));
8502 std::string rs
= GPR(copy(rs_value
));
8503 std::string rt
= GPR(copy(rt_value
));
8505 return img_format("LDX %s, %s(%s)", rd
, rs
, rt
);
8513 * 10987654321098765432109876543210
8514 * 001000 x1110000101
8519 static std::string
LDXS(uint64 instruction
, Dis_info
*info
)
8521 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8522 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8523 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
8525 std::string rd
= GPR(copy(rd_value
));
8526 std::string rs
= GPR(copy(rs_value
));
8527 std::string rt
= GPR(copy(rt_value
));
8529 return img_format("LDXS %s, %s(%s)", rd
, rs
, rt
);
8537 * 10987654321098765432109876543210
8538 * 001000 x1110000101
8543 static std::string
LH_16_(uint64 instruction
, Dis_info
*info
)
8545 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
8546 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
8547 uint64 u_value
= extract_u_2_1__s1(instruction
);
8549 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
8550 std::string u
= IMMEDIATE(copy(u_value
));
8551 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
8553 return img_format("LH %s, %s(%s)", rt3
, u
, rs3
);
8561 * 10987654321098765432109876543210
8562 * 001000 x1110000101
8567 static std::string
LH_GP_(uint64 instruction
, Dis_info
*info
)
8569 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8570 uint64 u_value
= extract_u_17_to_1__s1(instruction
);
8572 std::string rt
= GPR(copy(rt_value
));
8573 std::string u
= IMMEDIATE(copy(u_value
));
8575 return img_format("LH %s, %s($%d)", rt
, u
, 28);
8583 * 10987654321098765432109876543210
8584 * 001000 x1110000101
8589 static std::string
LH_S9_(uint64 instruction
, Dis_info
*info
)
8591 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8592 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8593 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8595 std::string rt
= GPR(copy(rt_value
));
8596 std::string s
= IMMEDIATE(copy(s_value
));
8597 std::string rs
= GPR(copy(rs_value
));
8599 return img_format("LH %s, %s(%s)", rt
, s
, rs
);
8607 * 10987654321098765432109876543210
8608 * 001000 x1110000101
8613 static std::string
LH_U12_(uint64 instruction
, Dis_info
*info
)
8615 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8616 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8617 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
8619 std::string rt
= GPR(copy(rt_value
));
8620 std::string u
= IMMEDIATE(copy(u_value
));
8621 std::string rs
= GPR(copy(rs_value
));
8623 return img_format("LH %s, %s(%s)", rt
, u
, rs
);
8631 * 10987654321098765432109876543210
8632 * 001000 x1110000101
8637 static std::string
LHE(uint64 instruction
, Dis_info
*info
)
8639 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8640 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8641 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8643 std::string rt
= GPR(copy(rt_value
));
8644 std::string s
= IMMEDIATE(copy(s_value
));
8645 std::string rs
= GPR(copy(rs_value
));
8647 return img_format("LHE %s, %s(%s)", rt
, s
, rs
);
8655 * 10987654321098765432109876543210
8656 * 001000 x1110000101
8661 static std::string
LHU_16_(uint64 instruction
, Dis_info
*info
)
8663 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
8664 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
8665 uint64 u_value
= extract_u_2_1__s1(instruction
);
8667 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
8668 std::string u
= IMMEDIATE(copy(u_value
));
8669 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
8671 return img_format("LHU %s, %s(%s)", rt3
, u
, rs3
);
8679 * 10987654321098765432109876543210
8680 * 001000 x1110000101
8685 static std::string
LHU_GP_(uint64 instruction
, Dis_info
*info
)
8687 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8688 uint64 u_value
= extract_u_17_to_1__s1(instruction
);
8690 std::string rt
= GPR(copy(rt_value
));
8691 std::string u
= IMMEDIATE(copy(u_value
));
8693 return img_format("LHU %s, %s($%d)", rt
, u
, 28);
8701 * 10987654321098765432109876543210
8702 * 001000 x1110000101
8707 static std::string
LHU_S9_(uint64 instruction
, Dis_info
*info
)
8709 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8710 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8711 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8713 std::string rt
= GPR(copy(rt_value
));
8714 std::string s
= IMMEDIATE(copy(s_value
));
8715 std::string rs
= GPR(copy(rs_value
));
8717 return img_format("LHU %s, %s(%s)", rt
, s
, rs
);
8725 * 10987654321098765432109876543210
8726 * 001000 x1110000101
8731 static std::string
LHU_U12_(uint64 instruction
, Dis_info
*info
)
8733 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8734 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8735 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
8737 std::string rt
= GPR(copy(rt_value
));
8738 std::string u
= IMMEDIATE(copy(u_value
));
8739 std::string rs
= GPR(copy(rs_value
));
8741 return img_format("LHU %s, %s(%s)", rt
, u
, rs
);
8749 * 10987654321098765432109876543210
8750 * 001000 x1110000101
8755 static std::string
LHUE(uint64 instruction
, Dis_info
*info
)
8757 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8758 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8759 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
8761 std::string rt
= GPR(copy(rt_value
));
8762 std::string s
= IMMEDIATE(copy(s_value
));
8763 std::string rs
= GPR(copy(rs_value
));
8765 return img_format("LHUE %s, %s(%s)", rt
, s
, rs
);
8773 * 10987654321098765432109876543210
8774 * 001000 x1110000101
8779 static std::string
LHUX(uint64 instruction
, Dis_info
*info
)
8781 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8782 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8783 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
8785 std::string rd
= GPR(copy(rd_value
));
8786 std::string rs
= GPR(copy(rs_value
));
8787 std::string rt
= GPR(copy(rt_value
));
8789 return img_format("LHUX %s, %s(%s)", rd
, rs
, rt
);
8797 * 10987654321098765432109876543210
8798 * 001000 x1110000101
8803 static std::string
LHUXS(uint64 instruction
, Dis_info
*info
)
8805 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8806 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8807 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
8809 std::string rd
= GPR(copy(rd_value
));
8810 std::string rs
= GPR(copy(rs_value
));
8811 std::string rt
= GPR(copy(rt_value
));
8813 return img_format("LHUXS %s, %s(%s)", rd
, rs
, rt
);
8821 * 10987654321098765432109876543210
8822 * 001000 x1110000101
8827 static std::string
LHXS(uint64 instruction
, Dis_info
*info
)
8829 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8830 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8831 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
8833 std::string rd
= GPR(copy(rd_value
));
8834 std::string rs
= GPR(copy(rs_value
));
8835 std::string rt
= GPR(copy(rt_value
));
8837 return img_format("LHXS %s, %s(%s)", rd
, rs
, rt
);
8845 * 10987654321098765432109876543210
8846 * 001000 x1110000101
8851 static std::string
LHX(uint64 instruction
, Dis_info
*info
)
8853 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8854 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8855 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
8857 std::string rd
= GPR(copy(rd_value
));
8858 std::string rs
= GPR(copy(rs_value
));
8859 std::string rt
= GPR(copy(rt_value
));
8861 return img_format("LHX %s, %s(%s)", rd
, rs
, rt
);
8869 * 10987654321098765432109876543210
8870 * 001000 x1110000101
8875 static std::string
LI_16_(uint64 instruction
, Dis_info
*info
)
8877 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
8878 uint64 eu_value
= extract_eu_6_5_4_3_2_1_0(instruction
);
8880 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
8881 std::string eu
= IMMEDIATE(encode_eu_from_s_li16(eu_value
));
8883 return img_format("LI %s, %s", rt3
, eu
);
8891 * 10987654321098765432109876543210
8892 * 001000 x1110000101
8897 static std::string
LI_48_(uint64 instruction
, Dis_info
*info
)
8899 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
8900 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
8902 std::string rt
= GPR(copy(rt_value
));
8903 std::string s
= IMMEDIATE(copy(s_value
));
8905 return img_format("LI %s, %s", rt
, s
);
8913 * 10987654321098765432109876543210
8914 * 001000 x1110000101
8919 static std::string
LL(uint64 instruction
, Dis_info
*info
)
8921 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8922 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8923 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_s2(instruction
);
8925 std::string rt
= GPR(copy(rt_value
));
8926 std::string s
= IMMEDIATE(copy(s_value
));
8927 std::string rs
= GPR(copy(rs_value
));
8929 return img_format("LL %s, %s(%s)", rt
, s
, rs
);
8937 * 10987654321098765432109876543210
8938 * 001000 x1110000101
8943 static std::string
LLD(uint64 instruction
, Dis_info
*info
)
8945 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8946 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8947 int64 s_value
= extract_s__se8_15_7_6_5_4_3_s3(instruction
);
8949 std::string rt
= GPR(copy(rt_value
));
8950 std::string s
= IMMEDIATE(copy(s_value
));
8951 std::string rs
= GPR(copy(rs_value
));
8953 return img_format("LLD %s, %s(%s)", rt
, s
, rs
);
8961 * 10987654321098765432109876543210
8962 * 001000 x1110000101
8967 static std::string
LLDP(uint64 instruction
, Dis_info
*info
)
8969 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8970 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8971 uint64 ru_value
= extract_ru_7_6_5_4_3(instruction
);
8973 std::string rt
= GPR(copy(rt_value
));
8974 std::string ru
= GPR(copy(ru_value
));
8975 std::string rs
= GPR(copy(rs_value
));
8977 return img_format("LLDP %s, %s, (%s)", rt
, ru
, rs
);
8985 * 10987654321098765432109876543210
8986 * 001000 x1110000101
8991 static std::string
LLE(uint64 instruction
, Dis_info
*info
)
8993 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
8994 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
8995 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_s2(instruction
);
8997 std::string rt
= GPR(copy(rt_value
));
8998 std::string s
= IMMEDIATE(copy(s_value
));
8999 std::string rs
= GPR(copy(rs_value
));
9001 return img_format("LLE %s, %s(%s)", rt
, s
, rs
);
9009 * 10987654321098765432109876543210
9010 * 001000 x1110000101
9015 static std::string
LLWP(uint64 instruction
, Dis_info
*info
)
9017 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9018 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9019 uint64 ru_value
= extract_ru_7_6_5_4_3(instruction
);
9021 std::string rt
= GPR(copy(rt_value
));
9022 std::string ru
= GPR(copy(ru_value
));
9023 std::string rs
= GPR(copy(rs_value
));
9025 return img_format("LLWP %s, %s, (%s)", rt
, ru
, rs
);
9033 * 10987654321098765432109876543210
9034 * 001000 x1110000101
9039 static std::string
LLWPE(uint64 instruction
, Dis_info
*info
)
9041 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9042 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9043 uint64 ru_value
= extract_ru_7_6_5_4_3(instruction
);
9045 std::string rt
= GPR(copy(rt_value
));
9046 std::string ru
= GPR(copy(ru_value
));
9047 std::string rs
= GPR(copy(rs_value
));
9049 return img_format("LLWPE %s, %s, (%s)", rt
, ru
, rs
);
9057 * 10987654321098765432109876543210
9058 * 001000 x1110000101
9063 static std::string
LSA(uint64 instruction
, Dis_info
*info
)
9065 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9066 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9067 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
9068 uint64 u2_value
= extract_u2_10_9(instruction
);
9070 std::string rd
= GPR(copy(rd_value
));
9071 std::string rs
= GPR(copy(rs_value
));
9072 std::string rt
= GPR(copy(rt_value
));
9073 std::string u2
= IMMEDIATE(copy(u2_value
));
9075 return img_format("LSA %s, %s, %s, %s", rd
, rs
, rt
, u2
);
9083 * 10987654321098765432109876543210
9084 * 001000 x1110000101
9089 static std::string
LUI(uint64 instruction
, Dis_info
*info
)
9091 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9092 int64 s_value
= extract_s__se31_0_11_to_2_20_to_12_s12(instruction
);
9094 std::string rt
= GPR(copy(rt_value
));
9095 std::string s
= IMMEDIATE(copy(s_value
));
9097 return img_format("LUI %s, %%hi(%s)", rt
, s
);
9105 * 10987654321098765432109876543210
9106 * 001000 x1110000101
9111 static std::string
LW_16_(uint64 instruction
, Dis_info
*info
)
9113 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
9114 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
9115 uint64 u_value
= extract_u_3_2_1_0__s2(instruction
);
9117 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
9118 std::string u
= IMMEDIATE(copy(u_value
));
9119 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
9121 return img_format("LW %s, %s(%s)", rt3
, u
, rs3
);
9129 * 10987654321098765432109876543210
9130 * 001000 x1110000101
9135 static std::string
LW_4X4_(uint64 instruction
, Dis_info
*info
)
9137 uint64 rt4_value
= extract_rt4_9_7_6_5(instruction
);
9138 uint64 rs4_value
= extract_rs4_4_2_1_0(instruction
);
9139 uint64 u_value
= extract_u_3_8__s2(instruction
);
9141 std::string rt4
= GPR(decode_gpr_gpr4(rt4_value
));
9142 std::string u
= IMMEDIATE(copy(u_value
));
9143 std::string rs4
= GPR(decode_gpr_gpr4(rs4_value
));
9145 return img_format("LW %s, %s(%s)", rt4
, u
, rs4
);
9153 * 10987654321098765432109876543210
9154 * 001000 x1110000101
9159 static std::string
LW_GP_(uint64 instruction
, Dis_info
*info
)
9161 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9162 uint64 u_value
= extract_u_20_to_2__s2(instruction
);
9164 std::string rt
= GPR(copy(rt_value
));
9165 std::string u
= IMMEDIATE(copy(u_value
));
9167 return img_format("LW %s, %s($%d)", rt
, u
, 28);
9175 * 10987654321098765432109876543210
9176 * 001000 x1110000101
9181 static std::string
LW_GP16_(uint64 instruction
, Dis_info
*info
)
9183 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
9184 uint64 u_value
= extract_u_6_5_4_3_2_1_0__s2(instruction
);
9186 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
9187 std::string u
= IMMEDIATE(copy(u_value
));
9189 return img_format("LW %s, %s($%d)", rt3
, u
, 28);
9197 * 10987654321098765432109876543210
9198 * 001000 x1110000101
9203 static std::string
LW_S9_(uint64 instruction
, Dis_info
*info
)
9205 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9206 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9207 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
9209 std::string rt
= GPR(copy(rt_value
));
9210 std::string s
= IMMEDIATE(copy(s_value
));
9211 std::string rs
= GPR(copy(rs_value
));
9213 return img_format("LW %s, %s(%s)", rt
, s
, rs
);
9221 * 10987654321098765432109876543210
9222 * 001000 x1110000101
9227 static std::string
LW_SP_(uint64 instruction
, Dis_info
*info
)
9229 uint64 rt_value
= extract_rt_9_8_7_6_5(instruction
);
9230 uint64 u_value
= extract_u_4_3_2_1_0__s2(instruction
);
9232 std::string rt
= GPR(copy(rt_value
));
9233 std::string u
= IMMEDIATE(copy(u_value
));
9235 return img_format("LW %s, %s($%d)", rt
, u
, 29);
9243 * 10987654321098765432109876543210
9244 * 001000 x1110000101
9249 static std::string
LW_U12_(uint64 instruction
, Dis_info
*info
)
9251 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9252 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9253 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
9255 std::string rt
= GPR(copy(rt_value
));
9256 std::string u
= IMMEDIATE(copy(u_value
));
9257 std::string rs
= GPR(copy(rs_value
));
9259 return img_format("LW %s, %s(%s)", rt
, u
, rs
);
9267 * 10987654321098765432109876543210
9268 * 001000 x1110000101
9273 static std::string
LWC1_GP_(uint64 instruction
, Dis_info
*info
)
9275 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
9276 uint64 u_value
= extract_u_17_to_2__s2(instruction
);
9278 std::string ft
= FPR(copy(ft_value
));
9279 std::string u
= IMMEDIATE(copy(u_value
));
9281 return img_format("LWC1 %s, %s($%d)", ft
, u
, 28);
9289 * 10987654321098765432109876543210
9290 * 001000 x1110000101
9295 static std::string
LWC1_S9_(uint64 instruction
, Dis_info
*info
)
9297 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
9298 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9299 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
9301 std::string ft
= FPR(copy(ft_value
));
9302 std::string s
= IMMEDIATE(copy(s_value
));
9303 std::string rs
= GPR(copy(rs_value
));
9305 return img_format("LWC1 %s, %s(%s)", ft
, s
, rs
);
9313 * 10987654321098765432109876543210
9314 * 001000 x1110000101
9319 static std::string
LWC1_U12_(uint64 instruction
, Dis_info
*info
)
9321 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
9322 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9323 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
9325 std::string ft
= FPR(copy(ft_value
));
9326 std::string u
= IMMEDIATE(copy(u_value
));
9327 std::string rs
= GPR(copy(rs_value
));
9329 return img_format("LWC1 %s, %s(%s)", ft
, u
, rs
);
9337 * 10987654321098765432109876543210
9338 * 001000 x1110000101
9343 static std::string
LWC1X(uint64 instruction
, Dis_info
*info
)
9345 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9346 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9347 uint64 ft_value
= extract_ft_15_14_13_12_11(instruction
);
9349 std::string ft
= FPR(copy(ft_value
));
9350 std::string rs
= GPR(copy(rs_value
));
9351 std::string rt
= GPR(copy(rt_value
));
9353 return img_format("LWC1X %s, %s(%s)", ft
, rs
, rt
);
9361 * 10987654321098765432109876543210
9362 * 001000 x1110000101
9367 static std::string
LWC1XS(uint64 instruction
, Dis_info
*info
)
9369 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9370 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9371 uint64 ft_value
= extract_ft_15_14_13_12_11(instruction
);
9373 std::string ft
= FPR(copy(ft_value
));
9374 std::string rs
= GPR(copy(rs_value
));
9375 std::string rt
= GPR(copy(rt_value
));
9377 return img_format("LWC1XS %s, %s(%s)", ft
, rs
, rt
);
9385 * 10987654321098765432109876543210
9386 * 001000 x1110000101
9391 static std::string
LWC2(uint64 instruction
, Dis_info
*info
)
9393 uint64 ct_value
= extract_ct_25_24_23_22_21(instruction
);
9394 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9395 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
9397 std::string ct
= CPR(copy(ct_value
));
9398 std::string s
= IMMEDIATE(copy(s_value
));
9399 std::string rs
= GPR(copy(rs_value
));
9401 return img_format("LWC2 %s, %s(%s)", ct
, s
, rs
);
9409 * 10987654321098765432109876543210
9410 * 001000 x1110000101
9415 static std::string
LWE(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 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
9421 std::string rt
= GPR(copy(rt_value
));
9422 std::string s
= IMMEDIATE(copy(s_value
));
9423 std::string rs
= GPR(copy(rs_value
));
9425 return img_format("LWE %s, %s(%s)", rt
, s
, rs
);
9433 * 10987654321098765432109876543210
9434 * 001000 x1110000101
9439 static std::string
LWM(uint64 instruction
, Dis_info
*info
)
9441 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9442 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9443 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
9444 uint64 count3_value
= extract_count3_14_13_12(instruction
);
9446 std::string rt
= GPR(copy(rt_value
));
9447 std::string s
= IMMEDIATE(copy(s_value
));
9448 std::string rs
= GPR(copy(rs_value
));
9449 std::string count3
= IMMEDIATE(encode_count3_from_count(count3_value
));
9451 return img_format("LWM %s, %s(%s), %s", rt
, s
, rs
, count3
);
9459 * 10987654321098765432109876543210
9460 * 001000 x1110000101
9465 static std::string
LWPC_48_(uint64 instruction
, Dis_info
*info
)
9467 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
9468 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
9470 std::string rt
= GPR(copy(rt_value
));
9471 std::string s
= ADDRESS(encode_s_from_address(s_value
), 6, info
);
9473 return img_format("LWPC %s, %s", rt
, s
);
9481 * 10987654321098765432109876543210
9482 * 001000 x1110000101
9487 static std::string
LWU_GP_(uint64 instruction
, Dis_info
*info
)
9489 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9490 uint64 u_value
= extract_u_17_to_2__s2(instruction
);
9492 std::string rt
= GPR(copy(rt_value
));
9493 std::string u
= IMMEDIATE(copy(u_value
));
9495 return img_format("LWU %s, %s($%d)", rt
, u
, 28);
9503 * 10987654321098765432109876543210
9504 * 001000 x1110000101
9509 static std::string
LWU_S9_(uint64 instruction
, Dis_info
*info
)
9511 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9512 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9513 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
9515 std::string rt
= GPR(copy(rt_value
));
9516 std::string s
= IMMEDIATE(copy(s_value
));
9517 std::string rs
= GPR(copy(rs_value
));
9519 return img_format("LWU %s, %s(%s)", rt
, s
, rs
);
9527 * 10987654321098765432109876543210
9528 * 001000 x1110000101
9533 static std::string
LWU_U12_(uint64 instruction
, Dis_info
*info
)
9535 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9536 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9537 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
9539 std::string rt
= GPR(copy(rt_value
));
9540 std::string u
= IMMEDIATE(copy(u_value
));
9541 std::string rs
= GPR(copy(rs_value
));
9543 return img_format("LWU %s, %s(%s)", rt
, u
, rs
);
9551 * 10987654321098765432109876543210
9552 * 001000 x1110000101
9557 static std::string
LWUX(uint64 instruction
, Dis_info
*info
)
9559 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9560 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9561 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
9563 std::string rd
= GPR(copy(rd_value
));
9564 std::string rs
= GPR(copy(rs_value
));
9565 std::string rt
= GPR(copy(rt_value
));
9567 return img_format("LWUX %s, %s(%s)", rd
, rs
, rt
);
9575 * 10987654321098765432109876543210
9576 * 001000 x1110000101
9581 static std::string
LWUXS(uint64 instruction
, Dis_info
*info
)
9583 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9584 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9585 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
9587 std::string rd
= GPR(copy(rd_value
));
9588 std::string rs
= GPR(copy(rs_value
));
9589 std::string rt
= GPR(copy(rt_value
));
9591 return img_format("LWUXS %s, %s(%s)", rd
, rs
, rt
);
9599 * 10987654321098765432109876543210
9600 * 001000 x1110000101
9605 static std::string
LWX(uint64 instruction
, Dis_info
*info
)
9607 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9608 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9609 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
9611 std::string rd
= GPR(copy(rd_value
));
9612 std::string rs
= GPR(copy(rs_value
));
9613 std::string rt
= GPR(copy(rt_value
));
9615 return img_format("LWX %s, %s(%s)", rd
, rs
, rt
);
9623 * 10987654321098765432109876543210
9624 * 001000 x1110000101
9629 static std::string
LWXS_16_(uint64 instruction
, Dis_info
*info
)
9631 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
9632 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
9633 uint64 rd3_value
= extract_rd3_3_2_1(instruction
);
9635 std::string rd3
= GPR(decode_gpr_gpr3(rd3_value
));
9636 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
9637 std::string rt3
= IMMEDIATE(decode_gpr_gpr3(rt3_value
));
9639 return img_format("LWXS %s, %s(%s)", rd3
, rs3
, rt3
);
9647 * 10987654321098765432109876543210
9648 * 001000 x1110000101
9653 static std::string
LWXS_32_(uint64 instruction
, Dis_info
*info
)
9655 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9656 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9657 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
9659 std::string rd
= GPR(copy(rd_value
));
9660 std::string rs
= GPR(copy(rs_value
));
9661 std::string rt
= GPR(copy(rt_value
));
9663 return img_format("LWXS %s, %s(%s)", rd
, rs
, rt
);
9668 * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified
9672 * 10987654321098765432109876543210
9673 * 001000 x1110000101
9678 static std::string
MADD_DSP_(uint64 instruction
, Dis_info
*info
)
9680 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9681 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9682 uint64 ac_value
= extract_ac_15_14(instruction
);
9684 std::string ac
= AC(copy(ac_value
));
9685 std::string rs
= GPR(copy(rs_value
));
9686 std::string rt
= GPR(copy(rt_value
));
9688 return img_format("MADD %s, %s, %s", ac
, rs
, rt
);
9696 * 10987654321098765432109876543210
9697 * 001000 x1110000101
9702 static std::string
MADDF_D(uint64 instruction
, Dis_info
*info
)
9704 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
9705 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
9706 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
9708 std::string fd
= FPR(copy(fd_value
));
9709 std::string fs
= FPR(copy(fs_value
));
9710 std::string ft
= FPR(copy(ft_value
));
9712 return img_format("MADDF.D %s, %s, %s", fd
, fs
, ft
);
9720 * 10987654321098765432109876543210
9721 * 001000 x1110000101
9726 static std::string
MADDF_S(uint64 instruction
, Dis_info
*info
)
9728 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
9729 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
9730 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
9732 std::string fd
= FPR(copy(fd_value
));
9733 std::string fs
= FPR(copy(fs_value
));
9734 std::string ft
= FPR(copy(ft_value
));
9736 return img_format("MADDF.S %s, %s, %s", fd
, fs
, ft
);
9741 * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the
9742 * specified accumulator
9745 * 10987654321098765432109876543210
9746 * 001000 x1110000101
9751 static std::string
MADDU_DSP_(uint64 instruction
, Dis_info
*info
)
9753 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9754 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9755 uint64 ac_value
= extract_ac_15_14(instruction
);
9757 std::string ac
= AC(copy(ac_value
));
9758 std::string rs
= GPR(copy(rs_value
));
9759 std::string rt
= GPR(copy(rt_value
));
9761 return img_format("MADDU %s, %s, %s", ac
, rs
, rt
);
9766 * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector
9767 * fractional halfword elements with accumulation
9770 * 10987654321098765432109876543210
9771 * 001000 x1110000101
9776 static std::string
MAQ_S_W_PHL(uint64 instruction
, Dis_info
*info
)
9778 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9779 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9780 uint64 ac_value
= extract_ac_15_14(instruction
);
9782 std::string ac
= AC(copy(ac_value
));
9783 std::string rs
= GPR(copy(rs_value
));
9784 std::string rt
= GPR(copy(rt_value
));
9786 return img_format("MAQ_S.W.PHL %s, %s, %s", ac
, rs
, rt
);
9791 * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector
9792 * fractional halfword elements with accumulation
9795 * 10987654321098765432109876543210
9796 * 001000 x1110000101
9801 static std::string
MAQ_S_W_PHR(uint64 instruction
, Dis_info
*info
)
9803 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9804 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9805 uint64 ac_value
= extract_ac_15_14(instruction
);
9807 std::string ac
= AC(copy(ac_value
));
9808 std::string rs
= GPR(copy(rs_value
));
9809 std::string rt
= GPR(copy(rt_value
));
9811 return img_format("MAQ_S.W.PHR %s, %s, %s", ac
, rs
, rt
);
9816 * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector
9817 * fractional halfword elements with saturating accumulation
9820 * 10987654321098765432109876543210
9821 * 001000 x1110000101
9826 static std::string
MAQ_SA_W_PHL(uint64 instruction
, Dis_info
*info
)
9828 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9829 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9830 uint64 ac_value
= extract_ac_15_14(instruction
);
9832 std::string ac
= AC(copy(ac_value
));
9833 std::string rs
= GPR(copy(rs_value
));
9834 std::string rt
= GPR(copy(rt_value
));
9836 return img_format("MAQ_SA.W.PHL %s, %s, %s", ac
, rs
, rt
);
9841 * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector
9842 * fractional halfword elements with saturating accumulation
9845 * 10987654321098765432109876543210
9846 * 001000 x1110000101
9851 static std::string
MAQ_SA_W_PHR(uint64 instruction
, Dis_info
*info
)
9853 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9854 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
9855 uint64 ac_value
= extract_ac_15_14(instruction
);
9857 std::string ac
= AC(copy(ac_value
));
9858 std::string rs
= GPR(copy(rs_value
));
9859 std::string rt
= GPR(copy(rt_value
));
9861 return img_format("MAQ_SA.W.PHR %s, %s, %s", ac
, rs
, rt
);
9869 * 10987654321098765432109876543210
9870 * 001000 x1110000101
9875 static std::string
MAX_D(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 std::string fd
= FPR(copy(fd_value
));
9882 std::string fs
= FPR(copy(fs_value
));
9883 std::string ft
= FPR(copy(ft_value
));
9885 return img_format("MAX.D %s, %s, %s", fd
, fs
, ft
);
9893 * 10987654321098765432109876543210
9894 * 001000 x1110000101
9899 static std::string
MAX_S(uint64 instruction
, Dis_info
*info
)
9901 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
9902 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
9903 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
9905 std::string fd
= FPR(copy(fd_value
));
9906 std::string fs
= FPR(copy(fs_value
));
9907 std::string ft
= FPR(copy(ft_value
));
9909 return img_format("MAX.S %s, %s, %s", fd
, fs
, ft
);
9917 * 10987654321098765432109876543210
9918 * 001000 x1110000101
9923 static std::string
MAXA_D(uint64 instruction
, Dis_info
*info
)
9925 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
9926 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
9927 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
9929 std::string fd
= FPR(copy(fd_value
));
9930 std::string fs
= FPR(copy(fs_value
));
9931 std::string ft
= FPR(copy(ft_value
));
9933 return img_format("MAXA.D %s, %s, %s", fd
, fs
, ft
);
9941 * 10987654321098765432109876543210
9942 * 001000 x1110000101
9947 static std::string
MAXA_S(uint64 instruction
, Dis_info
*info
)
9949 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
9950 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
9951 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
9953 std::string fd
= FPR(copy(fd_value
));
9954 std::string fs
= FPR(copy(fs_value
));
9955 std::string ft
= FPR(copy(ft_value
));
9957 return img_format("MAXA.S %s, %s, %s", fd
, fs
, ft
);
9965 * 10987654321098765432109876543210
9966 * 001000 x1110000101
9971 static std::string
MFC0(uint64 instruction
, Dis_info
*info
)
9973 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9974 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
9975 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
9977 std::string rt
= GPR(copy(rt_value
));
9978 std::string c0s
= CPR(copy(c0s_value
));
9979 std::string sel
= IMMEDIATE(copy(sel_value
));
9981 return img_format("MFC0 %s, %s, %s", rt
, c0s
, sel
);
9989 * 10987654321098765432109876543210
9990 * 001000 x1110000101
9995 static std::string
MFC1(uint64 instruction
, Dis_info
*info
)
9997 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
9998 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10000 std::string rt
= GPR(copy(rt_value
));
10001 std::string fs
= FPR(copy(fs_value
));
10003 return img_format("MFC1 %s, %s", rt
, fs
);
10011 * 10987654321098765432109876543210
10012 * 001000 x1110000101
10017 static std::string
MFC2(uint64 instruction
, Dis_info
*info
)
10019 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10020 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
10022 std::string rt
= GPR(copy(rt_value
));
10023 std::string cs
= CPR(copy(cs_value
));
10025 return img_format("MFC2 %s, %s", rt
, cs
);
10033 * 10987654321098765432109876543210
10034 * 001000 x1110000101
10039 static std::string
MFGC0(uint64 instruction
, Dis_info
*info
)
10041 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10042 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10043 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10045 std::string rt
= GPR(copy(rt_value
));
10046 std::string c0s
= CPR(copy(c0s_value
));
10047 std::string sel
= IMMEDIATE(copy(sel_value
));
10049 return img_format("MFGC0 %s, %s, %s", rt
, c0s
, sel
);
10057 * 10987654321098765432109876543210
10058 * 001000 x1110000101
10063 static std::string
MFHC0(uint64 instruction
, Dis_info
*info
)
10065 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10066 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10067 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10069 std::string rt
= GPR(copy(rt_value
));
10070 std::string c0s
= CPR(copy(c0s_value
));
10071 std::string sel
= IMMEDIATE(copy(sel_value
));
10073 return img_format("MFHC0 %s, %s, %s", rt
, c0s
, sel
);
10081 * 10987654321098765432109876543210
10082 * 001000 x1110000101
10087 static std::string
MFHC1(uint64 instruction
, Dis_info
*info
)
10089 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10090 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10092 std::string rt
= GPR(copy(rt_value
));
10093 std::string fs
= FPR(copy(fs_value
));
10095 return img_format("MFHC1 %s, %s", rt
, fs
);
10103 * 10987654321098765432109876543210
10104 * 001000 x1110000101
10109 static std::string
MFHC2(uint64 instruction
, Dis_info
*info
)
10111 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10112 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
10114 std::string rt
= GPR(copy(rt_value
));
10115 std::string cs
= CPR(copy(cs_value
));
10117 return img_format("MFHC2 %s, %s", rt
, cs
);
10125 * 10987654321098765432109876543210
10126 * 001000 x1110000101
10131 static std::string
MFHGC0(uint64 instruction
, Dis_info
*info
)
10133 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10134 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10135 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10137 std::string rt
= GPR(copy(rt_value
));
10138 std::string c0s
= CPR(copy(c0s_value
));
10139 std::string sel
= IMMEDIATE(copy(sel_value
));
10141 return img_format("MFHGC0 %s, %s, %s", rt
, c0s
, sel
);
10146 * [DSP] MFHI rs, ac - Move from HI register
10149 * 10987654321098765432109876543210
10150 * 001000 xxxxx 00000001111111
10154 static std::string
MFHI_DSP_(uint64 instruction
, Dis_info
*info
)
10156 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10157 uint64 ac_value
= extract_ac_15_14(instruction
);
10159 std::string rt
= GPR(copy(rt_value
));
10160 std::string ac
= AC(copy(ac_value
));
10162 return img_format("MFHI %s, %s", rt
, ac
);
10170 * 10987654321098765432109876543210
10171 * 001000 x1110000101
10176 static std::string
MFHTR(uint64 instruction
, Dis_info
*info
)
10178 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10179 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10180 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10181 uint64 u_value
= extract_u_10(instruction
);
10183 std::string rt
= GPR(copy(rt_value
));
10184 std::string c0s
= IMMEDIATE(copy(c0s_value
));
10185 std::string u
= IMMEDIATE(copy(u_value
));
10186 std::string sel
= IMMEDIATE(copy(sel_value
));
10188 return img_format("MFHTR %s, %s, %s, %s", rt
, c0s
, u
, sel
);
10193 * [DSP] MFLO rs, ac - Move from HI register
10196 * 10987654321098765432109876543210
10197 * 001000 xxxxx 01000001111111
10201 static std::string
MFLO_DSP_(uint64 instruction
, Dis_info
*info
)
10203 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10204 uint64 ac_value
= extract_ac_15_14(instruction
);
10206 std::string rt
= GPR(copy(rt_value
));
10207 std::string ac
= AC(copy(ac_value
));
10209 return img_format("MFLO %s, %s", rt
, ac
);
10217 * 10987654321098765432109876543210
10218 * 001000 x1110000101
10223 static std::string
MFTR(uint64 instruction
, Dis_info
*info
)
10225 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10226 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10227 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10228 uint64 u_value
= extract_u_10(instruction
);
10230 std::string rt
= GPR(copy(rt_value
));
10231 std::string c0s
= IMMEDIATE(copy(c0s_value
));
10232 std::string u
= IMMEDIATE(copy(u_value
));
10233 std::string sel
= IMMEDIATE(copy(sel_value
));
10235 return img_format("MFTR %s, %s, %s, %s", rt
, c0s
, u
, sel
);
10243 * 10987654321098765432109876543210
10244 * 001000 x1110000101
10249 static std::string
MIN_D(uint64 instruction
, Dis_info
*info
)
10251 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
10252 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10253 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
10255 std::string fd
= FPR(copy(fd_value
));
10256 std::string fs
= FPR(copy(fs_value
));
10257 std::string ft
= FPR(copy(ft_value
));
10259 return img_format("MIN.D %s, %s, %s", fd
, fs
, ft
);
10267 * 10987654321098765432109876543210
10268 * 001000 x1110000101
10273 static std::string
MIN_S(uint64 instruction
, Dis_info
*info
)
10275 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
10276 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10277 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
10279 std::string fd
= FPR(copy(fd_value
));
10280 std::string fs
= FPR(copy(fs_value
));
10281 std::string ft
= FPR(copy(ft_value
));
10283 return img_format("MIN.S %s, %s, %s", fd
, fs
, ft
);
10291 * 10987654321098765432109876543210
10292 * 001000 x1110000101
10297 static std::string
MINA_D(uint64 instruction
, Dis_info
*info
)
10299 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
10300 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10301 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
10303 std::string fd
= FPR(copy(fd_value
));
10304 std::string fs
= FPR(copy(fs_value
));
10305 std::string ft
= FPR(copy(ft_value
));
10307 return img_format("MINA.D %s, %s, %s", fd
, fs
, ft
);
10315 * 10987654321098765432109876543210
10316 * 001000 x1110000101
10321 static std::string
MINA_S(uint64 instruction
, Dis_info
*info
)
10323 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
10324 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10325 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
10327 std::string fd
= FPR(copy(fd_value
));
10328 std::string fs
= FPR(copy(fs_value
));
10329 std::string ft
= FPR(copy(ft_value
));
10331 return img_format("MINA.S %s, %s, %s", fd
, fs
, ft
);
10339 * 10987654321098765432109876543210
10340 * 001000 x1110000101
10345 static std::string
MOD(uint64 instruction
, Dis_info
*info
)
10347 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10348 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10349 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
10351 std::string rd
= GPR(copy(rd_value
));
10352 std::string rs
= GPR(copy(rs_value
));
10353 std::string rt
= GPR(copy(rt_value
));
10355 return img_format("MOD %s, %s, %s", rd
, rs
, rt
);
10360 * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value
10363 * 10987654321098765432109876543210
10364 * 001000 x1110000101
10369 static std::string
MODSUB(uint64 instruction
, Dis_info
*info
)
10371 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10372 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10373 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
10375 std::string rd
= GPR(copy(rd_value
));
10376 std::string rs
= GPR(copy(rs_value
));
10377 std::string rt
= GPR(copy(rt_value
));
10379 return img_format("MODSUB %s, %s, %s", rd
, rs
, rt
);
10387 * 10987654321098765432109876543210
10388 * 001000 x1010010101
10393 static std::string
MODU(uint64 instruction
, Dis_info
*info
)
10395 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10396 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10397 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
10399 std::string rd
= GPR(copy(rd_value
));
10400 std::string rs
= GPR(copy(rs_value
));
10401 std::string rt
= GPR(copy(rt_value
));
10403 return img_format("MODU %s, %s, %s", rd
, rs
, rt
);
10411 * 10987654321098765432109876543210
10412 * 001000 x1110000101
10417 static std::string
MOV_D(uint64 instruction
, Dis_info
*info
)
10419 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
10420 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10422 std::string ft
= FPR(copy(ft_value
));
10423 std::string fs
= FPR(copy(fs_value
));
10425 return img_format("MOV.D %s, %s", ft
, fs
);
10433 * 10987654321098765432109876543210
10434 * 001000 x1110000101
10439 static std::string
MOV_S(uint64 instruction
, Dis_info
*info
)
10441 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
10442 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10444 std::string ft
= FPR(copy(ft_value
));
10445 std::string fs
= FPR(copy(fs_value
));
10447 return img_format("MOV.S %s, %s", ft
, fs
);
10455 * 10987654321098765432109876543210
10456 * 001000 x1110000101
10461 static std::string
MOVE_BALC(uint64 instruction
, Dis_info
*info
)
10463 uint64 rtz4_value
= extract_rtz4_27_26_25_23_22_21(instruction
);
10464 uint64 rd1_value
= extract_rdl_25_24(instruction
);
10465 int64 s_value
= extract_s__se21_0_20_to_1_s1(instruction
);
10467 std::string rd1
= GPR(decode_gpr_gpr1(rd1_value
));
10468 std::string rtz4
= GPR(decode_gpr_gpr4_zero(rtz4_value
));
10469 std::string s
= ADDRESS(encode_s_from_address(s_value
), 4, info
);
10471 return img_format("MOVE.BALC %s, %s, %s", rd1
, rtz4
, s
);
10479 * 10987654321098765432109876543210
10480 * 001000 x1110000101
10485 static std::string
MOVEP(uint64 instruction
, Dis_info
*info
)
10487 uint64 rtz4_value
= extract_rtz4_9_7_6_5(instruction
);
10488 uint64 rd2_value
= extract_rd2_3_8(instruction
);
10489 uint64 rsz4_value
= extract_rsz4_4_2_1_0(instruction
);
10491 std::string rd2
= GPR(decode_gpr_gpr2_reg1(rd2_value
));
10492 std::string re2
= GPR(decode_gpr_gpr2_reg2(rd2_value
));
10493 /* !!!!!!!!!! - no conversion function */
10494 std::string rsz4
= GPR(decode_gpr_gpr4_zero(rsz4_value
));
10495 std::string rtz4
= GPR(decode_gpr_gpr4_zero(rtz4_value
));
10497 return img_format("MOVEP %s, %s, %s, %s", rd2
, re2
, rsz4
, rtz4
);
10506 * 10987654321098765432109876543210
10507 * 001000 x1110000101
10512 static std::string
MOVEP_REV_(uint64 instruction
, Dis_info
*info
)
10514 uint64 rt4_value
= extract_rt4_9_7_6_5(instruction
);
10515 uint64 rd2_value
= extract_rd2_3_8(instruction
);
10516 uint64 rs4_value
= extract_rs4_4_2_1_0(instruction
);
10518 std::string rs4
= GPR(decode_gpr_gpr4(rs4_value
));
10519 std::string rt4
= GPR(decode_gpr_gpr4(rt4_value
));
10520 std::string rd2
= GPR(decode_gpr_gpr2_reg1(rd2_value
));
10521 std::string rs2
= GPR(decode_gpr_gpr2_reg2(rd2_value
));
10522 /* !!!!!!!!!! - no conversion function */
10524 return img_format("MOVEP %s, %s, %s, %s", rs4
, rt4
, rd2
, rs2
);
10530 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10533 * 10987654321098765432109876543210
10534 * 001000 00010001101
10539 static std::string
MOVE(uint64 instruction
, Dis_info
*info
)
10541 uint64 rt_value
= extract_rt_9_8_7_6_5(instruction
);
10542 uint64 rs_value
= extract_rs_4_3_2_1_0(instruction
);
10544 std::string rt
= GPR(copy(rt_value
));
10545 std::string rs
= GPR(copy(rs_value
));
10547 return img_format("MOVE %s, %s", rt
, rs
);
10552 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10555 * 10987654321098765432109876543210
10556 * 001000 00010001101
10561 static std::string
MOVN(uint64 instruction
, Dis_info
*info
)
10563 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10564 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10565 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
10567 std::string rd
= GPR(copy(rd_value
));
10568 std::string rs
= GPR(copy(rs_value
));
10569 std::string rt
= GPR(copy(rt_value
));
10571 return img_format("MOVN %s, %s, %s", rd
, rs
, rt
);
10576 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10579 * 10987654321098765432109876543210
10580 * 001000 00010001101
10585 static std::string
MOVZ(uint64 instruction
, Dis_info
*info
)
10587 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10588 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10589 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
10591 std::string rd
= GPR(copy(rd_value
));
10592 std::string rs
= GPR(copy(rs_value
));
10593 std::string rt
= GPR(copy(rt_value
));
10595 return img_format("MOVZ %s, %s, %s", rd
, rs
, rt
);
10600 * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator
10603 * 10987654321098765432109876543210
10604 * 001000 10101010111111
10609 static std::string
MSUB_DSP_(uint64 instruction
, Dis_info
*info
)
10611 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10612 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10613 uint64 ac_value
= extract_ac_15_14(instruction
);
10615 std::string ac
= AC(copy(ac_value
));
10616 std::string rs
= GPR(copy(rs_value
));
10617 std::string rt
= GPR(copy(rt_value
));
10619 return img_format("MSUB %s, %s, %s", ac
, rs
, rt
);
10624 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10627 * 10987654321098765432109876543210
10628 * 001000 00010001101
10633 static std::string
MSUBF_D(uint64 instruction
, Dis_info
*info
)
10635 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
10636 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10637 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
10639 std::string fd
= FPR(copy(fd_value
));
10640 std::string fs
= FPR(copy(fs_value
));
10641 std::string ft
= FPR(copy(ft_value
));
10643 return img_format("MSUBF.D %s, %s, %s", fd
, fs
, ft
);
10648 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10651 * 10987654321098765432109876543210
10652 * 001000 00010001101
10657 static std::string
MSUBF_S(uint64 instruction
, Dis_info
*info
)
10659 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
10660 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10661 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
10663 std::string fd
= FPR(copy(fd_value
));
10664 std::string fs
= FPR(copy(fs_value
));
10665 std::string ft
= FPR(copy(ft_value
));
10667 return img_format("MSUBF.S %s, %s, %s", fd
, fs
, ft
);
10672 * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator
10675 * 10987654321098765432109876543210
10676 * 001000 11101010111111
10681 static std::string
MSUBU_DSP_(uint64 instruction
, Dis_info
*info
)
10683 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10684 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10685 uint64 ac_value
= extract_ac_15_14(instruction
);
10687 std::string ac
= AC(copy(ac_value
));
10688 std::string rs
= GPR(copy(rs_value
));
10689 std::string rt
= GPR(copy(rt_value
));
10691 return img_format("MSUBU %s, %s, %s", ac
, rs
, rt
);
10696 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10699 * 10987654321098765432109876543210
10700 * 001000 00010001101
10705 static std::string
MTC0(uint64 instruction
, Dis_info
*info
)
10707 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10708 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10709 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10711 std::string rt
= GPR(copy(rt_value
));
10712 std::string c0s
= CPR(copy(c0s_value
));
10713 std::string sel
= IMMEDIATE(copy(sel_value
));
10715 return img_format("MTC0 %s, %s, %s", rt
, c0s
, sel
);
10720 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10723 * 10987654321098765432109876543210
10724 * 001000 00010001101
10729 static std::string
MTC1(uint64 instruction
, Dis_info
*info
)
10731 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10732 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10734 std::string rt
= GPR(copy(rt_value
));
10735 std::string fs
= FPR(copy(fs_value
));
10737 return img_format("MTC1 %s, %s", rt
, fs
);
10742 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10745 * 10987654321098765432109876543210
10746 * 001000 00010001101
10751 static std::string
MTC2(uint64 instruction
, Dis_info
*info
)
10753 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10754 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
10756 std::string rt
= GPR(copy(rt_value
));
10757 std::string cs
= CPR(copy(cs_value
));
10759 return img_format("MTC2 %s, %s", rt
, cs
);
10764 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10767 * 10987654321098765432109876543210
10768 * 001000 00010001101
10773 static std::string
MTGC0(uint64 instruction
, Dis_info
*info
)
10775 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10776 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10777 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10779 std::string rt
= GPR(copy(rt_value
));
10780 std::string c0s
= CPR(copy(c0s_value
));
10781 std::string sel
= IMMEDIATE(copy(sel_value
));
10783 return img_format("MTGC0 %s, %s, %s", rt
, c0s
, sel
);
10788 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10791 * 10987654321098765432109876543210
10792 * 001000 00010001101
10797 static std::string
MTHC0(uint64 instruction
, Dis_info
*info
)
10799 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10800 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10801 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10803 std::string rt
= GPR(copy(rt_value
));
10804 std::string c0s
= CPR(copy(c0s_value
));
10805 std::string sel
= IMMEDIATE(copy(sel_value
));
10807 return img_format("MTHC0 %s, %s, %s", rt
, c0s
, sel
);
10812 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10815 * 10987654321098765432109876543210
10816 * 001000 00010001101
10821 static std::string
MTHC1(uint64 instruction
, Dis_info
*info
)
10823 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10824 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
10826 std::string rt
= GPR(copy(rt_value
));
10827 std::string fs
= FPR(copy(fs_value
));
10829 return img_format("MTHC1 %s, %s", rt
, fs
);
10834 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10837 * 10987654321098765432109876543210
10838 * 001000 00010001101
10843 static std::string
MTHC2(uint64 instruction
, Dis_info
*info
)
10845 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10846 uint64 cs_value
= extract_cs_20_19_18_17_16(instruction
);
10848 std::string rt
= GPR(copy(rt_value
));
10849 std::string cs
= CPR(copy(cs_value
));
10851 return img_format("MTHC2 %s, %s", rt
, cs
);
10856 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10859 * 10987654321098765432109876543210
10860 * 001000 00010001101
10865 static std::string
MTHGC0(uint64 instruction
, Dis_info
*info
)
10867 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10868 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10869 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10871 std::string rt
= GPR(copy(rt_value
));
10872 std::string c0s
= CPR(copy(c0s_value
));
10873 std::string sel
= IMMEDIATE(copy(sel_value
));
10875 return img_format("MTHGC0 %s, %s, %s", rt
, c0s
, sel
);
10880 * [DSP] MTHI rs, ac - Move to HI register
10883 * 10987654321098765432109876543210
10884 * 001000xxxxx 10000001111111
10888 static std::string
MTHI_DSP_(uint64 instruction
, Dis_info
*info
)
10890 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10891 uint64 ac_value
= extract_ac_15_14(instruction
);
10893 std::string rs
= GPR(copy(rs_value
));
10894 std::string ac
= AC(copy(ac_value
));
10896 return img_format("MTHI %s, %s", rs
, ac
);
10901 * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32
10904 * 10987654321098765432109876543210
10905 * 001000xxxxx 00001001111111
10909 static std::string
MTHLIP(uint64 instruction
, Dis_info
*info
)
10911 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10912 uint64 ac_value
= extract_ac_15_14(instruction
);
10914 std::string rs
= GPR(copy(rs_value
));
10915 std::string ac
= AC(copy(ac_value
));
10917 return img_format("MTHLIP %s, %s", rs
, ac
);
10922 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10925 * 10987654321098765432109876543210
10926 * 001000 00010001101
10931 static std::string
MTHTR(uint64 instruction
, Dis_info
*info
)
10933 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10934 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10935 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10936 uint64 u_value
= extract_u_10(instruction
);
10938 std::string rt
= GPR(copy(rt_value
));
10939 std::string c0s
= IMMEDIATE(copy(c0s_value
));
10940 std::string u
= IMMEDIATE(copy(u_value
));
10941 std::string sel
= IMMEDIATE(copy(sel_value
));
10943 return img_format("MTHTR %s, %s, %s, %s", rt
, c0s
, u
, sel
);
10948 * [DSP] MTLO rs, ac - Move to LO register
10951 * 10987654321098765432109876543210
10952 * 001000xxxxx 11000001111111
10956 static std::string
MTLO_DSP_(uint64 instruction
, Dis_info
*info
)
10958 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
10959 uint64 ac_value
= extract_ac_15_14(instruction
);
10961 std::string rs
= GPR(copy(rs_value
));
10962 std::string ac
= AC(copy(ac_value
));
10964 return img_format("MTLO %s, %s", rs
, ac
);
10969 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10972 * 10987654321098765432109876543210
10973 * 001000 00010001101
10978 static std::string
MTTR(uint64 instruction
, Dis_info
*info
)
10980 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
10981 uint64 c0s_value
= extract_c0s_20_19_18_17_16(instruction
);
10982 uint64 sel_value
= extract_sel_15_14_13_12_11(instruction
);
10983 uint64 u_value
= extract_u_10(instruction
);
10985 std::string rt
= GPR(copy(rt_value
));
10986 std::string c0s
= IMMEDIATE(copy(c0s_value
));
10987 std::string u
= IMMEDIATE(copy(u_value
));
10988 std::string sel
= IMMEDIATE(copy(sel_value
));
10990 return img_format("MTTR %s, %s, %s, %s", rt
, c0s
, u
, sel
);
10995 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10998 * 10987654321098765432109876543210
10999 * 001000 00010001101
11004 static std::string
MUH(uint64 instruction
, Dis_info
*info
)
11006 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11007 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11008 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11010 std::string rd
= GPR(copy(rd_value
));
11011 std::string rs
= GPR(copy(rs_value
));
11012 std::string rt
= GPR(copy(rt_value
));
11014 return img_format("MUH %s, %s, %s", rd
, rs
, rt
);
11019 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11022 * 10987654321098765432109876543210
11023 * 001000 00010001101
11028 static std::string
MUHU(uint64 instruction
, Dis_info
*info
)
11030 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11031 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11032 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11034 std::string rd
= GPR(copy(rd_value
));
11035 std::string rs
= GPR(copy(rs_value
));
11036 std::string rt
= GPR(copy(rt_value
));
11038 return img_format("MUHU %s, %s, %s", rd
, rs
, rt
);
11043 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11046 * 10987654321098765432109876543210
11047 * 001000 00010001101
11052 static std::string
MUL_32_(uint64 instruction
, Dis_info
*info
)
11054 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11055 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11056 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11058 std::string rd
= GPR(copy(rd_value
));
11059 std::string rs
= GPR(copy(rs_value
));
11060 std::string rt
= GPR(copy(rt_value
));
11062 return img_format("MUL %s, %s, %s", rd
, rs
, rt
);
11067 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11070 * 10987654321098765432109876543210
11071 * 001000 00010001101
11076 static std::string
MUL_4X4_(uint64 instruction
, Dis_info
*info
)
11078 uint64 rt4_value
= extract_rt4_9_7_6_5(instruction
);
11079 uint64 rs4_value
= extract_rs4_4_2_1_0(instruction
);
11081 std::string rs4
= GPR(decode_gpr_gpr4(rs4_value
));
11082 std::string rt4
= GPR(decode_gpr_gpr4(rt4_value
));
11084 return img_format("MUL %s, %s", rs4
, rt4
);
11089 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11092 * 10987654321098765432109876543210
11093 * 001000 00010001101
11098 static std::string
MUL_D(uint64 instruction
, Dis_info
*info
)
11100 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
11101 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
11102 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
11104 std::string fd
= FPR(copy(fd_value
));
11105 std::string fs
= FPR(copy(fs_value
));
11106 std::string ft
= FPR(copy(ft_value
));
11108 return img_format("MUL.D %s, %s, %s", fd
, fs
, ft
);
11113 * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size
11117 * 10987654321098765432109876543210
11118 * 001000 00000101101
11123 static std::string
MUL_PH(uint64 instruction
, Dis_info
*info
)
11125 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11126 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11127 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11129 std::string rd
= GPR(copy(rd_value
));
11130 std::string rs
= GPR(copy(rs_value
));
11131 std::string rt
= GPR(copy(rt_value
));
11133 return img_format("MUL.PH %s, %s, %s", rd
, rs
, rt
);
11138 * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size
11139 * products (saturated)
11142 * 10987654321098765432109876543210
11143 * 001000 10000101101
11148 static std::string
MUL_S_PH(uint64 instruction
, Dis_info
*info
)
11150 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11151 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11152 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11154 std::string rd
= GPR(copy(rd_value
));
11155 std::string rs
= GPR(copy(rs_value
));
11156 std::string rt
= GPR(copy(rt_value
));
11158 return img_format("MUL_S.PH %s, %s, %s", rd
, rs
, rt
);
11163 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11166 * 10987654321098765432109876543210
11167 * 001000 00010001101
11172 static std::string
MUL_S(uint64 instruction
, Dis_info
*info
)
11174 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
11175 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
11176 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
11178 std::string fd
= FPR(copy(fd_value
));
11179 std::string fs
= FPR(copy(fs_value
));
11180 std::string ft
= FPR(copy(ft_value
));
11182 return img_format("MUL.S %s, %s, %s", fd
, fs
, ft
);
11187 * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords
11188 * to expanded width products
11191 * 10987654321098765432109876543210
11192 * 001000 x0000100101
11197 static std::string
MULEQ_S_W_PHL(uint64 instruction
, Dis_info
*info
)
11199 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11200 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11201 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11203 std::string rd
= GPR(copy(rd_value
));
11204 std::string rs
= GPR(copy(rs_value
));
11205 std::string rt
= GPR(copy(rt_value
));
11207 return img_format("MULEQ_S.W.PHL %s, %s, %s", rd
, rs
, rt
);
11212 * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords
11213 * to expanded width products
11216 * 10987654321098765432109876543210
11217 * 001000 x0001100101
11222 static std::string
MULEQ_S_W_PHR(uint64 instruction
, Dis_info
*info
)
11224 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11225 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11226 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11228 std::string rd
= GPR(copy(rd_value
));
11229 std::string rs
= GPR(copy(rs_value
));
11230 std::string rt
= GPR(copy(rt_value
));
11232 return img_format("MULEQ_S.W.PHR %s, %s, %s", rd
, rs
, rt
);
11237 * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes
11238 * by halfwords to halfword products
11241 * 10987654321098765432109876543210
11242 * 001000 x0010010101
11247 static std::string
MULEU_S_PH_QBL(uint64 instruction
, Dis_info
*info
)
11249 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11250 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11251 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11253 std::string rd
= GPR(copy(rd_value
));
11254 std::string rs
= GPR(copy(rs_value
));
11255 std::string rt
= GPR(copy(rt_value
));
11257 return img_format("MULEU_S.PH.QBL %s, %s, %s", rd
, rs
, rt
);
11262 * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes
11263 * by halfwords to halfword products
11266 * 10987654321098765432109876543210
11267 * 001000 x0011010101
11272 static std::string
MULEU_S_PH_QBR(uint64 instruction
, Dis_info
*info
)
11274 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11275 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11276 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11278 std::string rd
= GPR(copy(rd_value
));
11279 std::string rs
= GPR(copy(rs_value
));
11280 std::string rt
= GPR(copy(rt_value
));
11282 return img_format("MULEU_S.PH.QBR %s, %s, %s", rd
, rs
, rt
);
11287 * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords
11288 * to fractional halfword products
11291 * 10987654321098765432109876543210
11292 * 001000 x0100010101
11297 static std::string
MULQ_RS_PH(uint64 instruction
, Dis_info
*info
)
11299 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11300 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11301 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11303 std::string rd
= GPR(copy(rd_value
));
11304 std::string rs
= GPR(copy(rs_value
));
11305 std::string rt
= GPR(copy(rt_value
));
11307 return img_format("MULQ_RS.PH %s, %s, %s", rd
, rs
, rt
);
11312 * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size
11313 * product with saturation and rounding
11316 * 10987654321098765432109876543210
11317 * 001000 x0110010101
11322 static std::string
MULQ_RS_W(uint64 instruction
, Dis_info
*info
)
11324 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11325 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11326 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11328 std::string rd
= GPR(copy(rd_value
));
11329 std::string rs
= GPR(copy(rs_value
));
11330 std::string rt
= GPR(copy(rt_value
));
11332 return img_format("MULQ_RS.W %s, %s, %s", rd
, rs
, rt
);
11337 * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size
11341 * 10987654321098765432109876543210
11342 * 001000 x0101010101
11347 static std::string
MULQ_S_PH(uint64 instruction
, Dis_info
*info
)
11349 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11350 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11351 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11353 std::string rd
= GPR(copy(rd_value
));
11354 std::string rs
= GPR(copy(rs_value
));
11355 std::string rt
= GPR(copy(rt_value
));
11357 return img_format("MULQ_S.PH %s, %s, %s", rd
, rs
, rt
);
11362 * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product
11366 * 10987654321098765432109876543210
11367 * 001000 x0111010101
11372 static std::string
MULQ_S_W(uint64 instruction
, Dis_info
*info
)
11374 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11375 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11376 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11378 std::string rd
= GPR(copy(rd_value
));
11379 std::string rs
= GPR(copy(rs_value
));
11380 std::string rt
= GPR(copy(rt_value
));
11382 return img_format("MULQ_S.W %s, %s, %s", rd
, rs
, rt
);
11387 * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword
11388 * elements and accumulate
11391 * 10987654321098765432109876543210
11392 * 001000 10110010111111
11397 static std::string
MULSA_W_PH(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
);
11401 uint64 ac_value
= extract_ac_15_14(instruction
);
11403 std::string ac
= AC(copy(ac_value
));
11404 std::string rs
= GPR(copy(rs_value
));
11405 std::string rt
= GPR(copy(rt_value
));
11407 return img_format("MULSA.W.PH %s, %s, %s", ac
, rs
, rt
);
11412 * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional
11413 * halfwords and accumulate
11416 * 10987654321098765432109876543210
11417 * 001000 11110010111111
11422 static std::string
MULSAQ_S_W_PH(uint64 instruction
, Dis_info
*info
)
11424 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11425 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11426 uint64 ac_value
= extract_ac_15_14(instruction
);
11428 std::string ac
= AC(copy(ac_value
));
11429 std::string rs
= GPR(copy(rs_value
));
11430 std::string rt
= GPR(copy(rt_value
));
11432 return img_format("MULSAQ_S.W.PH %s, %s, %s", ac
, rs
, rt
);
11437 * [DSP] MULT ac, rs, rt - Multiply word
11440 * 10987654321098765432109876543210
11441 * 001000 00110010111111
11446 static std::string
MULT_DSP_(uint64 instruction
, Dis_info
*info
)
11448 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11449 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11450 uint64 ac_value
= extract_ac_15_14(instruction
);
11452 std::string ac
= AC(copy(ac_value
));
11453 std::string rs
= GPR(copy(rs_value
));
11454 std::string rt
= GPR(copy(rt_value
));
11456 return img_format("MULT %s, %s, %s", ac
, rs
, rt
);
11461 * [DSP] MULTU ac, rs, rt - Multiply unsigned word
11464 * 10987654321098765432109876543210
11465 * 001000 01110010111111
11470 static std::string
MULTU_DSP_(uint64 instruction
, Dis_info
*info
)
11472 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11473 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11474 uint64 ac_value
= extract_ac_15_14(instruction
);
11476 std::string ac
= AC(copy(ac_value
));
11477 std::string rs
= GPR(copy(rs_value
));
11478 std::string rt
= GPR(copy(rt_value
));
11480 return img_format("MULTU %s, %s, %s", ac
, rs
, rt
);
11485 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11488 * 10987654321098765432109876543210
11489 * 001000 00010001101
11494 static std::string
MULU(uint64 instruction
, Dis_info
*info
)
11496 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11497 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11498 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11500 std::string rd
= GPR(copy(rd_value
));
11501 std::string rs
= GPR(copy(rs_value
));
11502 std::string rt
= GPR(copy(rt_value
));
11504 return img_format("MULU %s, %s, %s", rd
, rs
, rt
);
11509 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11512 * 10987654321098765432109876543210
11513 * 001000 00010001101
11518 static std::string
NEG_D(uint64 instruction
, Dis_info
*info
)
11520 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
11521 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
11523 std::string ft
= FPR(copy(ft_value
));
11524 std::string fs
= FPR(copy(fs_value
));
11526 return img_format("NEG.D %s, %s", ft
, fs
);
11531 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11534 * 10987654321098765432109876543210
11535 * 001000 00010001101
11540 static std::string
NEG_S(uint64 instruction
, Dis_info
*info
)
11542 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
11543 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
11545 std::string ft
= FPR(copy(ft_value
));
11546 std::string fs
= FPR(copy(fs_value
));
11548 return img_format("NEG.S %s, %s", ft
, fs
);
11553 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11556 * 10987654321098765432109876543210
11557 * 001000 00010001101
11562 static std::string
NOP_16_(uint64 instruction
, Dis_info
*info
)
11571 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11574 * 10987654321098765432109876543210
11575 * 001000 00010001101
11580 static std::string
NOP_32_(uint64 instruction
, Dis_info
*info
)
11589 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11592 * 10987654321098765432109876543210
11593 * 001000 00010001101
11598 static std::string
NOR(uint64 instruction
, Dis_info
*info
)
11600 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11601 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11602 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11604 std::string rd
= GPR(copy(rd_value
));
11605 std::string rs
= GPR(copy(rs_value
));
11606 std::string rt
= GPR(copy(rt_value
));
11608 return img_format("NOR %s, %s, %s", rd
, rs
, rt
);
11613 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11616 * 10987654321098765432109876543210
11617 * 001000 00010001101
11622 static std::string
NOT_16_(uint64 instruction
, Dis_info
*info
)
11624 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
11625 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
11627 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
11628 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
11630 return img_format("NOT %s, %s", rt3
, rs3
);
11635 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11638 * 10987654321098765432109876543210
11639 * 001000 00010001101
11644 static std::string
OR_16_(uint64 instruction
, Dis_info
*info
)
11646 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
11647 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
11649 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
11650 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
11652 return img_format("OR %s, %s", rs3
, rt3
);
11657 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11660 * 10987654321098765432109876543210
11661 * 001000 00010001101
11666 static std::string
OR_32_(uint64 instruction
, Dis_info
*info
)
11668 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11669 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11670 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11672 std::string rd
= GPR(copy(rd_value
));
11673 std::string rs
= GPR(copy(rs_value
));
11674 std::string rt
= GPR(copy(rt_value
));
11676 return img_format("OR %s, %s, %s", rd
, rs
, rt
);
11681 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11684 * 10987654321098765432109876543210
11685 * 001000 00010001101
11690 static std::string
ORI(uint64 instruction
, Dis_info
*info
)
11692 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11693 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11694 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
11696 std::string rt
= GPR(copy(rt_value
));
11697 std::string rs
= GPR(copy(rs_value
));
11698 std::string u
= IMMEDIATE(copy(u_value
));
11700 return img_format("ORI %s, %s, %s", rt
, rs
, u
);
11705 * [DSP] PACKRL.PH rd, rs, rt - Pack a word using the right halfword from one
11706 * source register and left halfword from another source register
11709 * 10987654321098765432109876543210
11710 * 001000 00010001101
11715 static std::string
PACKRL_PH(uint64 instruction
, Dis_info
*info
)
11717 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11718 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11719 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11721 std::string rd
= GPR(copy(rd_value
));
11722 std::string rs
= GPR(copy(rs_value
));
11723 std::string rt
= GPR(copy(rt_value
));
11725 return img_format("PACKRL.PH %s, %s, %s", rd
, rs
, rt
);
11730 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11733 * 10987654321098765432109876543210
11734 * 001000 00010001101
11739 static std::string
PAUSE(uint64 instruction
, Dis_info
*info
)
11748 * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition
11752 * 10987654321098765432109876543210
11753 * 001000 00010001101
11758 static std::string
PICK_PH(uint64 instruction
, Dis_info
*info
)
11760 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11761 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11762 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11764 std::string rd
= GPR(copy(rd_value
));
11765 std::string rs
= GPR(copy(rs_value
));
11766 std::string rt
= GPR(copy(rt_value
));
11768 return img_format("PICK.PH %s, %s, %s", rd
, rs
, rt
);
11773 * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition
11777 * 10987654321098765432109876543210
11778 * 001000 00010001101
11783 static std::string
PICK_QB(uint64 instruction
, Dis_info
*info
)
11785 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11786 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11787 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
11789 std::string rd
= GPR(copy(rd_value
));
11790 std::string rs
= GPR(copy(rs_value
));
11791 std::string rt
= GPR(copy(rt_value
));
11793 return img_format("PICK.QB %s, %s, %s", rd
, rs
, rt
);
11798 * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element
11799 * of a paired halfword
11802 * 10987654321098765432109876543210
11803 * 001000 00010001101
11808 static std::string
PRECEQ_W_PHL(uint64 instruction
, Dis_info
*info
)
11810 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11811 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11813 std::string rt
= GPR(copy(rt_value
));
11814 std::string rs
= GPR(copy(rs_value
));
11816 return img_format("PRECEQ.W.PHL %s, %s", rt
, rs
);
11821 * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element
11822 * of a paired halfword
11825 * 10987654321098765432109876543210
11826 * 001000 00010001101
11831 static std::string
PRECEQ_W_PHR(uint64 instruction
, Dis_info
*info
)
11833 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11834 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11836 std::string rt
= GPR(copy(rt_value
));
11837 std::string rs
= GPR(copy(rs_value
));
11839 return img_format("PRECEQ.W.PHR %s, %s", rt
, rs
);
11844 * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two
11845 * left-alternate elements of a quad byte vector
11848 * 10987654321098765432109876543210
11849 * 001000 00010001101
11854 static std::string
PRECEQU_PH_QBLA(uint64 instruction
, Dis_info
*info
)
11856 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11857 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11859 std::string rt
= GPR(copy(rt_value
));
11860 std::string rs
= GPR(copy(rs_value
));
11862 return img_format("PRECEQU.PH.QBLA %s, %s", rt
, rs
);
11867 * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most
11868 * elements of a quad byte vector
11871 * 10987654321098765432109876543210
11872 * 001000 00010001101
11877 static std::string
PRECEQU_PH_QBL(uint64 instruction
, Dis_info
*info
)
11879 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11880 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11882 std::string rt
= GPR(copy(rt_value
));
11883 std::string rs
= GPR(copy(rs_value
));
11885 return img_format("PRECEQU.PH.QBL %s, %s", rt
, rs
);
11890 * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two
11891 * right-alternate elements of a quad byte vector
11894 * 10987654321098765432109876543210
11895 * 001000 00010001101
11900 static std::string
PRECEQU_PH_QBRA(uint64 instruction
, Dis_info
*info
)
11902 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11903 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11905 std::string rt
= GPR(copy(rt_value
));
11906 std::string rs
= GPR(copy(rs_value
));
11908 return img_format("PRECEQU.PH.QBRA %s, %s", rt
, rs
);
11913 * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most
11914 * elements of a quad byte vector
11917 * 10987654321098765432109876543210
11918 * 001000 00010001101
11923 static std::string
PRECEQU_PH_QBR(uint64 instruction
, Dis_info
*info
)
11925 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11926 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11928 std::string rt
= GPR(copy(rt_value
));
11929 std::string rs
= GPR(copy(rs_value
));
11931 return img_format("PRECEQU.PH.QBR %s, %s", rt
, rs
);
11936 * [DSP] PRECEU.PH.QBLA rt, rs - Expand the precision of the two
11937 * left-alternate elements of a quad byte vector to four unsigned
11941 * 10987654321098765432109876543210
11942 * 001000 00010001101
11947 static std::string
PRECEU_PH_QBLA(uint64 instruction
, Dis_info
*info
)
11949 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11950 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11952 std::string rt
= GPR(copy(rt_value
));
11953 std::string rs
= GPR(copy(rs_value
));
11955 return img_format("PRECEU.PH.QBLA %s, %s", rt
, rs
);
11960 * [DSP] PRECEU.PH.QBL rt, rs - Expand the precision of the two left-most
11961 * elements of a quad byte vector to form unsigned halfwords
11964 * 10987654321098765432109876543210
11965 * 001000 00010001101
11970 static std::string
PRECEU_PH_QBL(uint64 instruction
, Dis_info
*info
)
11972 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11973 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11975 std::string rt
= GPR(copy(rt_value
));
11976 std::string rs
= GPR(copy(rs_value
));
11978 return img_format("PRECEU.PH.QBL %s, %s", rt
, rs
);
11983 * [DSP] PRECEU.PH.QBRA rt, rs - Expand the precision of the two
11984 * right-alternate elements of a quad byte vector to form four
11985 * unsigned halfwords
11988 * 10987654321098765432109876543210
11989 * 001000 00010001101
11994 static std::string
PRECEU_PH_QBRA(uint64 instruction
, Dis_info
*info
)
11996 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
11997 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
11999 std::string rt
= GPR(copy(rt_value
));
12000 std::string rs
= GPR(copy(rs_value
));
12002 return img_format("PRECEU.PH.QBRA %s, %s", rt
, rs
);
12007 * [DSP] PRECEU.PH.QBR rt, rs - Expand the precision of the two right-most
12008 * elements of a quad byte vector to form unsigned halfwords
12011 * 10987654321098765432109876543210
12012 * 001000 00010001101
12017 static std::string
PRECEU_PH_QBR(uint64 instruction
, Dis_info
*info
)
12019 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12020 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12022 std::string rt
= GPR(copy(rt_value
));
12023 std::string rs
= GPR(copy(rs_value
));
12025 return img_format("PRECEU.PH.QBR %s, %s", rt
, rs
);
12030 * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer
12031 * halfwords to four bytes
12034 * 10987654321098765432109876543210
12035 * 001000 x0001101101
12040 static std::string
PRECR_QB_PH(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
);
12044 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
12046 std::string rd
= GPR(copy(rd_value
));
12047 std::string rs
= GPR(copy(rs_value
));
12048 std::string rt
= GPR(copy(rt_value
));
12050 return img_format("PRECR.QB.PH %s, %s, %s", rd
, rs
, rt
);
12055 * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer
12056 * words to halfwords after a right shift
12059 * 10987654321098765432109876543210
12060 * 001000 x1110000101
12065 static std::string
PRECR_SRA_PH_W(uint64 instruction
, Dis_info
*info
)
12067 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12068 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12069 uint64 sa_value
= extract_sa_15_14_13_12_11(instruction
);
12071 std::string rt
= GPR(copy(rt_value
));
12072 std::string rs
= GPR(copy(rs_value
));
12073 std::string sa
= IMMEDIATE(copy(sa_value
));
12075 return img_format("PRECR_SRA.PH.W %s, %s, %s", rt
, rs
, sa
);
12080 * [DSP] PRECR_SRA_R.PH.W rt, rs, sa - Reduce the precision of two integer
12081 * words to halfwords after a right shift with rounding
12084 * 10987654321098765432109876543210
12085 * 001000 x1110000101
12090 static std::string
PRECR_SRA_R_PH_W(uint64 instruction
, Dis_info
*info
)
12092 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12093 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12094 uint64 sa_value
= extract_sa_15_14_13_12_11(instruction
);
12096 std::string rt
= GPR(copy(rt_value
));
12097 std::string rs
= GPR(copy(rs_value
));
12098 std::string sa
= IMMEDIATE(copy(sa_value
));
12100 return img_format("PRECR_SRA_R.PH.W %s, %s, %s", rt
, rs
, sa
);
12105 * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional
12106 * words to fractional halfwords
12109 * 10987654321098765432109876543210
12110 * 001000 x1110000101
12115 static std::string
PRECRQ_PH_W(uint64 instruction
, Dis_info
*info
)
12117 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12118 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12119 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
12121 std::string rd
= GPR(copy(rd_value
));
12122 std::string rs
= GPR(copy(rs_value
));
12123 std::string rt
= GPR(copy(rt_value
));
12125 return img_format("PRECRQ.PH.W %s, %s, %s", rd
, rs
, rt
);
12130 * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional
12131 * halfwords to four bytes
12134 * 10987654321098765432109876543210
12135 * 001000 x0010101101
12140 static std::string
PRECRQ_QB_PH(uint64 instruction
, Dis_info
*info
)
12142 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12143 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12144 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
12146 std::string rd
= GPR(copy(rd_value
));
12147 std::string rs
= GPR(copy(rs_value
));
12148 std::string rt
= GPR(copy(rt_value
));
12150 return img_format("PRECRQ.QB.PH %s, %s, %s", rd
, rs
, rt
);
12155 * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional
12156 * words to halfwords with rounding and saturation
12159 * 10987654321098765432109876543210
12160 * 001000 x1110000101
12165 static std::string
PRECRQ_RS_PH_W(uint64 instruction
, Dis_info
*info
)
12167 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12168 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12169 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
12171 std::string rd
= GPR(copy(rd_value
));
12172 std::string rs
= GPR(copy(rs_value
));
12173 std::string rt
= GPR(copy(rt_value
));
12175 return img_format("PRECRQ_RS.PH.W %s, %s, %s", rd
, rs
, rt
);
12180 * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional
12181 * halfwords to unsigned bytes with saturation
12184 * 10987654321098765432109876543210
12185 * 001000 x1110000101
12190 static std::string
PRECRQU_S_QB_PH(uint64 instruction
, Dis_info
*info
)
12192 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12193 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12194 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
12196 std::string rd
= GPR(copy(rd_value
));
12197 std::string rs
= GPR(copy(rs_value
));
12198 std::string rt
= GPR(copy(rt_value
));
12200 return img_format("PRECRQU_S.QB.PH %s, %s, %s", rd
, rs
, rt
);
12208 * 10987654321098765432109876543210
12209 * 001000 x1110000101
12214 static std::string
PREF_S9_(uint64 instruction
, Dis_info
*info
)
12216 uint64 hint_value
= extract_hint_25_24_23_22_21(instruction
);
12217 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12218 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
12220 std::string hint
= IMMEDIATE(copy(hint_value
));
12221 std::string s
= IMMEDIATE(copy(s_value
));
12222 std::string rs
= GPR(copy(rs_value
));
12224 return img_format("PREF %s, %s(%s)", hint
, s
, rs
);
12232 * 10987654321098765432109876543210
12233 * 001000 x1110000101
12238 static std::string
PREF_U12_(uint64 instruction
, Dis_info
*info
)
12240 uint64 hint_value
= extract_hint_25_24_23_22_21(instruction
);
12241 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12242 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
12244 std::string hint
= IMMEDIATE(copy(hint_value
));
12245 std::string u
= IMMEDIATE(copy(u_value
));
12246 std::string rs
= GPR(copy(rs_value
));
12248 return img_format("PREF %s, %s(%s)", hint
, u
, rs
);
12256 * 10987654321098765432109876543210
12257 * 001000 x1110000101
12262 static std::string
PREFE(uint64 instruction
, Dis_info
*info
)
12264 uint64 hint_value
= extract_hint_25_24_23_22_21(instruction
);
12265 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12266 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
12268 std::string hint
= IMMEDIATE(copy(hint_value
));
12269 std::string s
= IMMEDIATE(copy(s_value
));
12270 std::string rs
= GPR(copy(rs_value
));
12272 return img_format("PREFE %s, %s(%s)", hint
, s
, rs
);
12277 * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB
12280 * 10987654321098765432109876543210
12281 * 001000 x1110000101
12286 static std::string
PREPEND(uint64 instruction
, Dis_info
*info
)
12288 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12289 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12290 uint64 sa_value
= extract_sa_15_14_13_12_11(instruction
);
12292 std::string rt
= GPR(copy(rt_value
));
12293 std::string rs
= GPR(copy(rs_value
));
12294 std::string sa
= IMMEDIATE(copy(sa_value
));
12296 return img_format("PREPEND %s, %s, %s", rt
, rs
, sa
);
12301 * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes
12304 * 10987654321098765432109876543210
12305 * 001000 1111000100111111
12309 static std::string
RADDU_W_QB(uint64 instruction
, Dis_info
*info
)
12311 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12312 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12314 std::string rt
= GPR(copy(rt_value
));
12315 std::string rs
= GPR(copy(rs_value
));
12317 return img_format("RADDU.W.QB %s, %s", rt
, rs
);
12322 * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR
12325 * 10987654321098765432109876543210
12326 * 001000 00011001111111
12330 static std::string
RDDSP(uint64 instruction
, Dis_info
*info
)
12332 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12333 uint64 mask_value
= extract_mask_20_19_18_17_16_15_14(instruction
);
12335 std::string rt
= GPR(copy(rt_value
));
12336 std::string mask
= IMMEDIATE(copy(mask_value
));
12338 return img_format("RDDSP %s, %s", rt
, mask
);
12346 * 10987654321098765432109876543210
12347 * 001000 x1110000101
12352 static std::string
RDHWR(uint64 instruction
, Dis_info
*info
)
12354 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12355 uint64 hs_value
= extract_hs_20_19_18_17_16(instruction
);
12356 uint64 sel_value
= extract_sel_13_12_11(instruction
);
12358 std::string rt
= GPR(copy(rt_value
));
12359 std::string hs
= CPR(copy(hs_value
));
12360 std::string sel
= IMMEDIATE(copy(sel_value
));
12362 return img_format("RDHWR %s, %s, %s", rt
, hs
, sel
);
12370 * 10987654321098765432109876543210
12371 * 001000 x1110000101
12376 static std::string
RDPGPR(uint64 instruction
, Dis_info
*info
)
12378 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12379 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12381 std::string rt
= GPR(copy(rt_value
));
12382 std::string rs
= GPR(copy(rs_value
));
12384 return img_format("RDPGPR %s, %s", rt
, rs
);
12392 * 10987654321098765432109876543210
12393 * 001000 x1110000101
12398 static std::string
RECIP_D(uint64 instruction
, Dis_info
*info
)
12400 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12401 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12403 std::string ft
= FPR(copy(ft_value
));
12404 std::string fs
= FPR(copy(fs_value
));
12406 return img_format("RECIP.D %s, %s", ft
, fs
);
12414 * 10987654321098765432109876543210
12415 * 001000 x1110000101
12420 static std::string
RECIP_S(uint64 instruction
, Dis_info
*info
)
12422 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12423 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12425 std::string ft
= FPR(copy(ft_value
));
12426 std::string fs
= FPR(copy(fs_value
));
12428 return img_format("RECIP.S %s, %s", ft
, fs
);
12433 * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element
12437 * 10987654321098765432109876543210
12438 * 001000 x0000111101
12442 static std::string
REPL_PH(uint64 instruction
, Dis_info
*info
)
12444 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12445 int64 s_value
= extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction
);
12447 std::string rt
= GPR(copy(rt_value
));
12448 std::string s
= IMMEDIATE(copy(s_value
));
12450 return img_format("REPL.PH %s, %s", rt
, s
);
12455 * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element
12459 * 10987654321098765432109876543210
12460 * 001000 x010111111111
12464 static std::string
REPL_QB(uint64 instruction
, Dis_info
*info
)
12466 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12467 uint64 u_value
= extract_u_20_19_18_17_16_15_14_13(instruction
);
12469 std::string rt
= GPR(copy(rt_value
));
12470 std::string u
= IMMEDIATE(copy(u_value
));
12472 return img_format("REPL.QB %s, %s", rt
, u
);
12477 * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element
12481 * 10987654321098765432109876543210
12482 * 001000 0000001100111111
12486 static std::string
REPLV_PH(uint64 instruction
, Dis_info
*info
)
12488 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12489 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12491 std::string rt
= GPR(copy(rt_value
));
12492 std::string rs
= GPR(copy(rs_value
));
12494 return img_format("REPLV.PH %s, %s", rt
, rs
);
12499 * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions
12502 * 10987654321098765432109876543210
12503 * 001000 0001001100111111
12507 static std::string
REPLV_QB(uint64 instruction
, Dis_info
*info
)
12509 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12510 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12512 std::string rt
= GPR(copy(rt_value
));
12513 std::string rs
= GPR(copy(rs_value
));
12515 return img_format("REPLV.QB %s, %s", rt
, rs
);
12523 * 10987654321098765432109876543210
12524 * 001000 x1110000101
12529 static std::string
RESTORE_32_(uint64 instruction
, Dis_info
*info
)
12531 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12532 uint64 count_value
= extract_count_19_18_17_16(instruction
);
12533 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3__s3(instruction
);
12534 uint64 gp_value
= extract_gp_2(instruction
);
12536 std::string u
= IMMEDIATE(copy(u_value
));
12537 return img_format("RESTORE %s%s", u
,
12538 save_restore_list(rt_value
, count_value
, gp_value
));
12546 * 10987654321098765432109876543210
12547 * 001000 x1110000101
12552 static std::string
RESTORE_JRC_16_(uint64 instruction
, Dis_info
*info
)
12554 uint64 rt1_value
= extract_rtl_11(instruction
);
12555 uint64 u_value
= extract_u_7_6_5_4__s4(instruction
);
12556 uint64 count_value
= extract_count_3_2_1_0(instruction
);
12558 std::string u
= IMMEDIATE(copy(u_value
));
12559 return img_format("RESTORE.JRC %s%s", u
,
12560 save_restore_list(encode_rt1_from_rt(rt1_value
), count_value
, 0));
12568 * 10987654321098765432109876543210
12569 * 001000 x1110000101
12574 static std::string
RESTORE_JRC_32_(uint64 instruction
, Dis_info
*info
)
12576 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12577 uint64 count_value
= extract_count_19_18_17_16(instruction
);
12578 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3__s3(instruction
);
12579 uint64 gp_value
= extract_gp_2(instruction
);
12581 std::string u
= IMMEDIATE(copy(u_value
));
12582 return img_format("RESTORE.JRC %s%s", u
,
12583 save_restore_list(rt_value
, count_value
, gp_value
));
12591 * 10987654321098765432109876543210
12592 * 001000 x1110000101
12597 static std::string
RESTOREF(uint64 instruction
, Dis_info
*info
)
12599 uint64 count_value
= extract_count_19_18_17_16(instruction
);
12600 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3__s3(instruction
);
12602 std::string u
= IMMEDIATE(copy(u_value
));
12603 std::string count
= IMMEDIATE(copy(count_value
));
12605 return img_format("RESTOREF %s, %s", u
, count
);
12613 * 10987654321098765432109876543210
12614 * 001000 x1110000101
12619 static std::string
RINT_D(uint64 instruction
, Dis_info
*info
)
12621 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12622 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12624 std::string ft
= FPR(copy(ft_value
));
12625 std::string fs
= FPR(copy(fs_value
));
12627 return img_format("RINT.D %s, %s", ft
, fs
);
12635 * 10987654321098765432109876543210
12636 * 001000 x1110000101
12641 static std::string
RINT_S(uint64 instruction
, Dis_info
*info
)
12643 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12644 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12646 std::string ft
= FPR(copy(ft_value
));
12647 std::string fs
= FPR(copy(fs_value
));
12649 return img_format("RINT.S %s, %s", ft
, fs
);
12657 * 10987654321098765432109876543210
12658 * 001000 x1110000101
12663 static std::string
ROTR(uint64 instruction
, Dis_info
*info
)
12665 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12666 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12667 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
12669 std::string rt
= GPR(copy(rt_value
));
12670 std::string rs
= GPR(copy(rs_value
));
12671 std::string shift
= IMMEDIATE(copy(shift_value
));
12673 return img_format("ROTR %s, %s, %s", rt
, rs
, shift
);
12681 * 10987654321098765432109876543210
12682 * 001000 x1110000101
12687 static std::string
ROTRV(uint64 instruction
, Dis_info
*info
)
12689 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12690 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12691 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
12693 std::string rd
= GPR(copy(rd_value
));
12694 std::string rs
= GPR(copy(rs_value
));
12695 std::string rt
= GPR(copy(rt_value
));
12697 return img_format("ROTRV %s, %s, %s", rd
, rs
, rt
);
12705 * 10987654321098765432109876543210
12706 * 001000 x1110000101
12711 static std::string
ROTX(uint64 instruction
, Dis_info
*info
)
12713 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12714 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12715 uint64 shiftx_value
= extract_shiftx_10_9_8_7__s1(instruction
);
12716 uint64 stripe_value
= extract_stripe_6(instruction
);
12717 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
12719 std::string rt
= GPR(copy(rt_value
));
12720 std::string rs
= GPR(copy(rs_value
));
12721 std::string shift
= IMMEDIATE(copy(shift_value
));
12722 std::string shiftx
= IMMEDIATE(copy(shiftx_value
));
12723 std::string stripe
= IMMEDIATE(copy(stripe_value
));
12725 return img_format("ROTX %s, %s, %s, %s, %s",
12726 rt
, rs
, shift
, shiftx
, stripe
);
12734 * 10987654321098765432109876543210
12735 * 001000 x1110000101
12740 static std::string
ROUND_L_D(uint64 instruction
, Dis_info
*info
)
12742 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12743 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12745 std::string ft
= FPR(copy(ft_value
));
12746 std::string fs
= FPR(copy(fs_value
));
12748 return img_format("ROUND.L.D %s, %s", ft
, fs
);
12756 * 10987654321098765432109876543210
12757 * 001000 x1110000101
12762 static std::string
ROUND_L_S(uint64 instruction
, Dis_info
*info
)
12764 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12765 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12767 std::string ft
= FPR(copy(ft_value
));
12768 std::string fs
= FPR(copy(fs_value
));
12770 return img_format("ROUND.L.S %s, %s", ft
, fs
);
12778 * 10987654321098765432109876543210
12779 * 001000 x1110000101
12784 static std::string
ROUND_W_D(uint64 instruction
, Dis_info
*info
)
12786 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12787 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12789 std::string ft
= FPR(copy(ft_value
));
12790 std::string fs
= FPR(copy(fs_value
));
12792 return img_format("ROUND.W.D %s, %s", ft
, fs
);
12800 * 10987654321098765432109876543210
12801 * 001000 x1110000101
12806 static std::string
ROUND_W_S(uint64 instruction
, Dis_info
*info
)
12808 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12809 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12811 std::string ft
= FPR(copy(ft_value
));
12812 std::string fs
= FPR(copy(fs_value
));
12814 return img_format("ROUND.W.S %s, %s", ft
, fs
);
12822 * 10987654321098765432109876543210
12823 * 001000 x1110000101
12828 static std::string
RSQRT_D(uint64 instruction
, Dis_info
*info
)
12830 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12831 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12833 std::string ft
= FPR(copy(ft_value
));
12834 std::string fs
= FPR(copy(fs_value
));
12836 return img_format("RSQRT.D %s, %s", ft
, fs
);
12844 * 10987654321098765432109876543210
12845 * 001000 x1110000101
12850 static std::string
RSQRT_S(uint64 instruction
, Dis_info
*info
)
12852 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
12853 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
12855 std::string ft
= FPR(copy(ft_value
));
12856 std::string fs
= FPR(copy(fs_value
));
12858 return img_format("RSQRT.S %s, %s", ft
, fs
);
12866 * 10987654321098765432109876543210
12867 * 001000 01001001101
12872 static std::string
SAVE_16_(uint64 instruction
, Dis_info
*info
)
12874 uint64 rt1_value
= extract_rtl_11(instruction
);
12875 uint64 u_value
= extract_u_7_6_5_4__s4(instruction
);
12876 uint64 count_value
= extract_count_3_2_1_0(instruction
);
12878 std::string u
= IMMEDIATE(copy(u_value
));
12879 return img_format("SAVE %s%s", u
,
12880 save_restore_list(encode_rt1_from_rt(rt1_value
), count_value
, 0));
12888 * 10987654321098765432109876543210
12889 * 001000 01001001101
12894 static std::string
SAVE_32_(uint64 instruction
, Dis_info
*info
)
12896 uint64 count_value
= extract_count_19_18_17_16(instruction
);
12897 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12898 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3__s3(instruction
);
12899 uint64 gp_value
= extract_gp_2(instruction
);
12901 std::string u
= IMMEDIATE(copy(u_value
));
12902 return img_format("SAVE %s%s", u
,
12903 save_restore_list(rt_value
, count_value
, gp_value
));
12911 * 10987654321098765432109876543210
12912 * 001000 01001001101
12917 static std::string
SAVEF(uint64 instruction
, Dis_info
*info
)
12919 uint64 count_value
= extract_count_19_18_17_16(instruction
);
12920 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3__s3(instruction
);
12922 std::string u
= IMMEDIATE(copy(u_value
));
12923 std::string count
= IMMEDIATE(copy(count_value
));
12925 return img_format("SAVEF %s, %s", u
, count
);
12933 * 10987654321098765432109876543210
12934 * 001000 01001001101
12939 static std::string
SB_16_(uint64 instruction
, Dis_info
*info
)
12941 uint64 rtz3_value
= extract_rtz3_9_8_7(instruction
);
12942 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
12943 uint64 u_value
= extract_u_1_0(instruction
);
12945 std::string rtz3
= GPR(decode_gpr_gpr3_src_store(rtz3_value
));
12946 std::string u
= IMMEDIATE(copy(u_value
));
12947 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
12949 return img_format("SB %s, %s(%s)", rtz3
, u
, rs3
);
12957 * 10987654321098765432109876543210
12958 * 001000 01001001101
12963 static std::string
SB_GP_(uint64 instruction
, Dis_info
*info
)
12965 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12966 uint64 u_value
= extract_u_17_to_0(instruction
);
12968 std::string rt
= GPR(copy(rt_value
));
12969 std::string u
= IMMEDIATE(copy(u_value
));
12971 return img_format("SB %s, %s($%d)", rt
, u
, 28);
12979 * 10987654321098765432109876543210
12980 * 001000 01001001101
12985 static std::string
SB_S9_(uint64 instruction
, Dis_info
*info
)
12987 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
12988 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
12989 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
12991 std::string rt
= GPR(copy(rt_value
));
12992 std::string s
= IMMEDIATE(copy(s_value
));
12993 std::string rs
= GPR(copy(rs_value
));
12995 return img_format("SB %s, %s(%s)", rt
, s
, rs
);
13003 * 10987654321098765432109876543210
13004 * 001000 01001001101
13009 static std::string
SB_U12_(uint64 instruction
, Dis_info
*info
)
13011 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13012 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13013 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
13015 std::string rt
= GPR(copy(rt_value
));
13016 std::string u
= IMMEDIATE(copy(u_value
));
13017 std::string rs
= GPR(copy(rs_value
));
13019 return img_format("SB %s, %s(%s)", rt
, u
, rs
);
13027 * 10987654321098765432109876543210
13028 * 001000 01001001101
13033 static std::string
SBE(uint64 instruction
, Dis_info
*info
)
13035 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13036 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13037 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
13039 std::string rt
= GPR(copy(rt_value
));
13040 std::string s
= IMMEDIATE(copy(s_value
));
13041 std::string rs
= GPR(copy(rs_value
));
13043 return img_format("SBE %s, %s(%s)", rt
, s
, rs
);
13051 * 10987654321098765432109876543210
13052 * 001000 01001001101
13057 static std::string
SBX(uint64 instruction
, Dis_info
*info
)
13059 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13060 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13061 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
13063 std::string rd
= GPR(copy(rd_value
));
13064 std::string rs
= GPR(copy(rs_value
));
13065 std::string rt
= GPR(copy(rt_value
));
13067 return img_format("SBX %s, %s(%s)", rd
, rs
, rt
);
13075 * 10987654321098765432109876543210
13076 * 001000 01001001101
13081 static std::string
SC(uint64 instruction
, Dis_info
*info
)
13083 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13084 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13085 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_s2(instruction
);
13087 std::string rt
= GPR(copy(rt_value
));
13088 std::string s
= IMMEDIATE(copy(s_value
));
13089 std::string rs
= GPR(copy(rs_value
));
13091 return img_format("SC %s, %s(%s)", rt
, s
, rs
);
13099 * 10987654321098765432109876543210
13100 * 001000 01001001101
13105 static std::string
SCD(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
);
13109 int64 s_value
= extract_s__se8_15_7_6_5_4_3_s3(instruction
);
13111 std::string rt
= GPR(copy(rt_value
));
13112 std::string s
= IMMEDIATE(copy(s_value
));
13113 std::string rs
= GPR(copy(rs_value
));
13115 return img_format("SCD %s, %s(%s)", rt
, s
, rs
);
13123 * 10987654321098765432109876543210
13124 * 001000 01001001101
13129 static std::string
SCDP(uint64 instruction
, Dis_info
*info
)
13131 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13132 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13133 uint64 ru_value
= extract_ru_7_6_5_4_3(instruction
);
13135 std::string rt
= GPR(copy(rt_value
));
13136 std::string ru
= GPR(copy(ru_value
));
13137 std::string rs
= GPR(copy(rs_value
));
13139 return img_format("SCDP %s, %s, (%s)", rt
, ru
, rs
);
13147 * 10987654321098765432109876543210
13148 * 001000 01001001101
13153 static std::string
SCE(uint64 instruction
, Dis_info
*info
)
13155 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13156 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13157 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_s2(instruction
);
13159 std::string rt
= GPR(copy(rt_value
));
13160 std::string s
= IMMEDIATE(copy(s_value
));
13161 std::string rs
= GPR(copy(rs_value
));
13163 return img_format("SCE %s, %s(%s)", rt
, s
, rs
);
13171 * 10987654321098765432109876543210
13172 * 001000 01001001101
13177 static std::string
SCWP(uint64 instruction
, Dis_info
*info
)
13179 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13180 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13181 uint64 ru_value
= extract_ru_7_6_5_4_3(instruction
);
13183 std::string rt
= GPR(copy(rt_value
));
13184 std::string ru
= GPR(copy(ru_value
));
13185 std::string rs
= GPR(copy(rs_value
));
13187 return img_format("SCWP %s, %s, (%s)", rt
, ru
, rs
);
13195 * 10987654321098765432109876543210
13196 * 001000 01001001101
13201 static std::string
SCWPE(uint64 instruction
, Dis_info
*info
)
13203 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13204 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13205 uint64 ru_value
= extract_ru_7_6_5_4_3(instruction
);
13207 std::string rt
= GPR(copy(rt_value
));
13208 std::string ru
= GPR(copy(ru_value
));
13209 std::string rs
= GPR(copy(rs_value
));
13211 return img_format("SCWPE %s, %s, (%s)", rt
, ru
, rs
);
13219 * 10987654321098765432109876543210
13220 * 001000 01001001101
13225 static std::string
SD_GP_(uint64 instruction
, Dis_info
*info
)
13227 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13228 uint64 u_value
= extract_u_20_to_3__s3(instruction
);
13230 std::string rt
= GPR(copy(rt_value
));
13231 std::string u
= IMMEDIATE(copy(u_value
));
13233 return img_format("SD %s, %s($%d)", rt
, u
, 28);
13241 * 10987654321098765432109876543210
13242 * 001000 01001001101
13247 static std::string
SD_S9_(uint64 instruction
, Dis_info
*info
)
13249 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13250 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13251 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
13253 std::string rt
= GPR(copy(rt_value
));
13254 std::string s
= IMMEDIATE(copy(s_value
));
13255 std::string rs
= GPR(copy(rs_value
));
13257 return img_format("SD %s, %s(%s)", rt
, s
, rs
);
13265 * 10987654321098765432109876543210
13266 * 001000 01001001101
13271 static std::string
SD_U12_(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 std::string rt
= GPR(copy(rt_value
));
13278 std::string u
= IMMEDIATE(copy(u_value
));
13279 std::string rs
= GPR(copy(rs_value
));
13281 return img_format("SD %s, %s(%s)", rt
, u
, rs
);
13289 * 10987654321098765432109876543210
13290 * 001000 01001001101
13295 static std::string
SDBBP_16_(uint64 instruction
, Dis_info
*info
)
13297 uint64 code_value
= extract_code_2_1_0(instruction
);
13299 std::string code
= IMMEDIATE(copy(code_value
));
13301 return img_format("SDBBP %s", code
);
13309 * 10987654321098765432109876543210
13310 * 001000 01001001101
13315 static std::string
SDBBP_32_(uint64 instruction
, Dis_info
*info
)
13317 uint64 code_value
= extract_code_18_to_0(instruction
);
13319 std::string code
= IMMEDIATE(copy(code_value
));
13321 return img_format("SDBBP %s", code
);
13329 * 10987654321098765432109876543210
13330 * 001000 01001001101
13335 static std::string
SDC1_GP_(uint64 instruction
, Dis_info
*info
)
13337 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13338 uint64 u_value
= extract_u_17_to_2__s2(instruction
);
13340 std::string ft
= FPR(copy(ft_value
));
13341 std::string u
= IMMEDIATE(copy(u_value
));
13343 return img_format("SDC1 %s, %s($%d)", ft
, u
, 28);
13351 * 10987654321098765432109876543210
13352 * 001000 01001001101
13357 static std::string
SDC1_S9_(uint64 instruction
, Dis_info
*info
)
13359 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13360 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13361 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
13363 std::string ft
= FPR(copy(ft_value
));
13364 std::string s
= IMMEDIATE(copy(s_value
));
13365 std::string rs
= GPR(copy(rs_value
));
13367 return img_format("SDC1 %s, %s(%s)", ft
, s
, rs
);
13375 * 10987654321098765432109876543210
13376 * 001000 01001001101
13381 static std::string
SDC1_U12_(uint64 instruction
, Dis_info
*info
)
13383 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13384 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13385 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
13387 std::string ft
= FPR(copy(ft_value
));
13388 std::string u
= IMMEDIATE(copy(u_value
));
13389 std::string rs
= GPR(copy(rs_value
));
13391 return img_format("SDC1 %s, %s(%s)", ft
, u
, rs
);
13399 * 10987654321098765432109876543210
13400 * 001000 01001001101
13405 static std::string
SDC1X(uint64 instruction
, Dis_info
*info
)
13407 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13408 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13409 uint64 ft_value
= extract_ft_15_14_13_12_11(instruction
);
13411 std::string ft
= FPR(copy(ft_value
));
13412 std::string rs
= GPR(copy(rs_value
));
13413 std::string rt
= GPR(copy(rt_value
));
13415 return img_format("SDC1X %s, %s(%s)", ft
, rs
, rt
);
13423 * 10987654321098765432109876543210
13424 * 001000 01001001101
13429 static std::string
SDC1XS(uint64 instruction
, Dis_info
*info
)
13431 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13432 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13433 uint64 ft_value
= extract_ft_15_14_13_12_11(instruction
);
13435 std::string ft
= FPR(copy(ft_value
));
13436 std::string rs
= GPR(copy(rs_value
));
13437 std::string rt
= GPR(copy(rt_value
));
13439 return img_format("SDC1XS %s, %s(%s)", ft
, rs
, rt
);
13447 * 10987654321098765432109876543210
13448 * 001000 01001001101
13453 static std::string
SDC2(uint64 instruction
, Dis_info
*info
)
13455 uint64 cs_value
= extract_cs_25_24_23_22_21(instruction
);
13456 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13457 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
13459 std::string cs
= CPR(copy(cs_value
));
13460 std::string s
= IMMEDIATE(copy(s_value
));
13461 std::string rs
= GPR(copy(rs_value
));
13463 return img_format("SDC2 %s, %s(%s)", cs
, s
, rs
);
13471 * 10987654321098765432109876543210
13472 * 001000 01001001101
13477 static std::string
SDM(uint64 instruction
, Dis_info
*info
)
13479 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13480 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13481 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
13482 uint64 count3_value
= extract_count3_14_13_12(instruction
);
13484 std::string rt
= GPR(copy(rt_value
));
13485 std::string s
= IMMEDIATE(copy(s_value
));
13486 std::string rs
= GPR(copy(rs_value
));
13487 std::string count3
= IMMEDIATE(encode_count3_from_count(count3_value
));
13489 return img_format("SDM %s, %s(%s), %s", rt
, s
, rs
, count3
);
13497 * 10987654321098765432109876543210
13498 * 001000 01001001101
13503 static std::string
SDPC_48_(uint64 instruction
, Dis_info
*info
)
13505 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
13506 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
13508 std::string rt
= GPR(copy(rt_value
));
13509 std::string s
= ADDRESS(encode_s_from_address(s_value
), 6, info
);
13511 return img_format("SDPC %s, %s", rt
, s
);
13519 * 10987654321098765432109876543210
13520 * 001000 01001001101
13525 static std::string
SDXS(uint64 instruction
, Dis_info
*info
)
13527 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13528 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13529 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
13531 std::string rd
= GPR(copy(rd_value
));
13532 std::string rs
= GPR(copy(rs_value
));
13533 std::string rt
= GPR(copy(rt_value
));
13535 return img_format("SDXS %s, %s(%s)", rd
, rs
, rt
);
13543 * 10987654321098765432109876543210
13544 * 001000 01001001101
13549 static std::string
SDX(uint64 instruction
, Dis_info
*info
)
13551 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13552 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13553 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
13555 std::string rd
= GPR(copy(rd_value
));
13556 std::string rs
= GPR(copy(rs_value
));
13557 std::string rt
= GPR(copy(rt_value
));
13559 return img_format("SDX %s, %s(%s)", rd
, rs
, rt
);
13567 * 10987654321098765432109876543210
13568 * 001000 01001001101
13573 static std::string
SEB(uint64 instruction
, Dis_info
*info
)
13575 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13576 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13578 std::string rt
= GPR(copy(rt_value
));
13579 std::string rs
= GPR(copy(rs_value
));
13581 return img_format("SEB %s, %s", rt
, rs
);
13589 * 10987654321098765432109876543210
13590 * 001000 01001001101
13595 static std::string
SEH(uint64 instruction
, Dis_info
*info
)
13597 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13598 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13600 std::string rt
= GPR(copy(rt_value
));
13601 std::string rs
= GPR(copy(rs_value
));
13603 return img_format("SEH %s, %s", rt
, rs
);
13611 * 10987654321098765432109876543210
13612 * 001000 01001001101
13617 static std::string
SEL_D(uint64 instruction
, Dis_info
*info
)
13619 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13620 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
13621 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
13623 std::string fd
= FPR(copy(fd_value
));
13624 std::string fs
= FPR(copy(fs_value
));
13625 std::string ft
= FPR(copy(ft_value
));
13627 return img_format("SEL.D %s, %s, %s", fd
, fs
, ft
);
13635 * 10987654321098765432109876543210
13636 * 001000 01001001101
13641 static std::string
SEL_S(uint64 instruction
, Dis_info
*info
)
13643 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13644 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
13645 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
13647 std::string fd
= FPR(copy(fd_value
));
13648 std::string fs
= FPR(copy(fs_value
));
13649 std::string ft
= FPR(copy(ft_value
));
13651 return img_format("SEL.S %s, %s, %s", fd
, fs
, ft
);
13659 * 10987654321098765432109876543210
13660 * 001000 01001001101
13665 static std::string
SELEQZ_D(uint64 instruction
, Dis_info
*info
)
13667 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13668 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
13669 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
13671 std::string fd
= FPR(copy(fd_value
));
13672 std::string fs
= FPR(copy(fs_value
));
13673 std::string ft
= FPR(copy(ft_value
));
13675 return img_format("SELEQZ.D %s, %s, %s", fd
, fs
, ft
);
13683 * 10987654321098765432109876543210
13684 * 001000 01001001101
13689 static std::string
SELEQZ_S(uint64 instruction
, Dis_info
*info
)
13691 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13692 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
13693 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
13695 std::string fd
= FPR(copy(fd_value
));
13696 std::string fs
= FPR(copy(fs_value
));
13697 std::string ft
= FPR(copy(ft_value
));
13699 return img_format("SELEQZ.S %s, %s, %s", fd
, fs
, ft
);
13707 * 10987654321098765432109876543210
13708 * 001000 01001001101
13713 static std::string
SELNEZ_D(uint64 instruction
, Dis_info
*info
)
13715 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13716 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
13717 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
13719 std::string fd
= FPR(copy(fd_value
));
13720 std::string fs
= FPR(copy(fs_value
));
13721 std::string ft
= FPR(copy(ft_value
));
13723 return img_format("SELNEZ.D %s, %s, %s", fd
, fs
, ft
);
13731 * 10987654321098765432109876543210
13732 * 001000 01001001101
13737 static std::string
SELNEZ_S(uint64 instruction
, Dis_info
*info
)
13739 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
13740 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
13741 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
13743 std::string fd
= FPR(copy(fd_value
));
13744 std::string fs
= FPR(copy(fs_value
));
13745 std::string ft
= FPR(copy(ft_value
));
13747 return img_format("SELNEZ.S %s, %s, %s", fd
, fs
, ft
);
13755 * 10987654321098765432109876543210
13756 * 001000 01001001101
13761 static std::string
SEQI(uint64 instruction
, Dis_info
*info
)
13763 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13764 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13765 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
13767 std::string rt
= GPR(copy(rt_value
));
13768 std::string rs
= GPR(copy(rs_value
));
13769 std::string u
= IMMEDIATE(copy(u_value
));
13771 return img_format("SEQI %s, %s, %s", rt
, rs
, u
);
13779 * 10987654321098765432109876543210
13780 * 001000 01001001101
13785 static std::string
SH_16_(uint64 instruction
, Dis_info
*info
)
13787 uint64 rtz3_value
= extract_rtz3_9_8_7(instruction
);
13788 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
13789 uint64 u_value
= extract_u_2_1__s1(instruction
);
13791 std::string rtz3
= GPR(decode_gpr_gpr3_src_store(rtz3_value
));
13792 std::string u
= IMMEDIATE(copy(u_value
));
13793 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
13795 return img_format("SH %s, %s(%s)", rtz3
, u
, rs3
);
13803 * 10987654321098765432109876543210
13804 * 001000 01001001101
13809 static std::string
SH_GP_(uint64 instruction
, Dis_info
*info
)
13811 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13812 uint64 u_value
= extract_u_17_to_1__s1(instruction
);
13814 std::string rt
= GPR(copy(rt_value
));
13815 std::string u
= IMMEDIATE(copy(u_value
));
13817 return img_format("SH %s, %s($%d)", rt
, u
, 28);
13825 * 10987654321098765432109876543210
13826 * 001000 01001001101
13831 static std::string
SH_S9_(uint64 instruction
, Dis_info
*info
)
13833 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13834 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13835 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
13837 std::string rt
= GPR(copy(rt_value
));
13838 std::string s
= IMMEDIATE(copy(s_value
));
13839 std::string rs
= GPR(copy(rs_value
));
13841 return img_format("SH %s, %s(%s)", rt
, s
, rs
);
13849 * 10987654321098765432109876543210
13850 * 001000 01001001101
13855 static std::string
SH_U12_(uint64 instruction
, Dis_info
*info
)
13857 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13858 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13859 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
13861 std::string rt
= GPR(copy(rt_value
));
13862 std::string u
= IMMEDIATE(copy(u_value
));
13863 std::string rs
= GPR(copy(rs_value
));
13865 return img_format("SH %s, %s(%s)", rt
, u
, rs
);
13873 * 10987654321098765432109876543210
13874 * 001000 01001001101
13879 static std::string
SHE(uint64 instruction
, Dis_info
*info
)
13881 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13882 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13883 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
13885 std::string rt
= GPR(copy(rt_value
));
13886 std::string s
= IMMEDIATE(copy(s_value
));
13887 std::string rs
= GPR(copy(rs_value
));
13889 return img_format("SHE %s, %s(%s)", rt
, s
, rs
);
13894 * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in
13895 * the same accumulator
13898 * 10987654321098765432109876543210
13899 * 001000xxxx xxxx0000011101
13903 static std::string
SHILO(uint64 instruction
, Dis_info
*info
)
13905 int64 shift_value
= extract_shift__se5_21_20_19_18_17_16(instruction
);
13906 uint64 ac_value
= extract_ac_15_14(instruction
);
13908 std::string shift
= IMMEDIATE(copy(shift_value
));
13909 std::string ac
= AC(copy(ac_value
));
13911 return img_format("SHILO %s, %s", ac
, shift
);
13916 * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result
13917 * in the same accumulator
13920 * 10987654321098765432109876543210
13921 * 001000xxxxx 01001001111111
13925 static std::string
SHILOV(uint64 instruction
, Dis_info
*info
)
13927 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
13928 uint64 ac_value
= extract_ac_15_14(instruction
);
13930 std::string rs
= GPR(copy(rs_value
));
13931 std::string ac
= AC(copy(ac_value
));
13933 return img_format("SHILOV %s, %s", ac
, rs
);
13938 * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords
13941 * 10987654321098765432109876543210
13942 * 001000 001110110101
13947 static std::string
SHLL_PH(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 sa_value
= extract_sa_15_14_13_12(instruction
);
13953 std::string rt
= GPR(copy(rt_value
));
13954 std::string rs
= GPR(copy(rs_value
));
13955 std::string sa
= IMMEDIATE(copy(sa_value
));
13957 return img_format("SHLL.PH %s, %s, %s", rt
, rs
, sa
);
13962 * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes
13965 * 10987654321098765432109876543210
13966 * 001000 0100001111111
13971 static std::string
SHLL_QB(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 sa_value
= extract_sa_15_14_13(instruction
);
13977 std::string rt
= GPR(copy(rt_value
));
13978 std::string rs
= GPR(copy(rs_value
));
13979 std::string sa
= IMMEDIATE(copy(sa_value
));
13981 return img_format("SHLL.QB %s, %s, %s", rt
, rs
, sa
);
13986 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords
13990 * 10987654321098765432109876543210
13991 * 001000 001110110101
13996 static std::string
SHLL_S_PH(uint64 instruction
, Dis_info
*info
)
13998 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
13999 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14000 uint64 sa_value
= extract_sa_15_14_13_12(instruction
);
14002 std::string rt
= GPR(copy(rt_value
));
14003 std::string rs
= GPR(copy(rs_value
));
14004 std::string sa
= IMMEDIATE(copy(sa_value
));
14006 return img_format("SHLL_S.PH %s, %s, %s", rt
, rs
, sa
);
14011 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation
14014 * 10987654321098765432109876543210
14015 * 001000 x1111110101
14020 static std::string
SHLL_S_W(uint64 instruction
, Dis_info
*info
)
14022 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14023 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14024 uint64 sa_value
= extract_sa_15_14_13_12_11(instruction
);
14026 std::string rt
= GPR(copy(rt_value
));
14027 std::string rs
= GPR(copy(rs_value
));
14028 std::string sa
= IMMEDIATE(copy(sa_value
));
14030 return img_format("SHLL_S.W %s, %s, %s", rt
, rs
, sa
);
14035 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14039 * 10987654321098765432109876543210
14040 * 001000 01110001101
14045 static std::string
SHLLV_PH(uint64 instruction
, Dis_info
*info
)
14047 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14048 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14049 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14051 std::string rd
= GPR(copy(rd_value
));
14052 std::string rt
= GPR(copy(rt_value
));
14053 std::string rs
= GPR(copy(rs_value
));
14055 return img_format("SHLLV.PH %s, %s, %s", rd
, rt
, rs
);
14060 * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes
14063 * 10987654321098765432109876543210
14064 * 001000 x1110010101
14069 static std::string
SHLLV_QB(uint64 instruction
, Dis_info
*info
)
14071 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14072 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14073 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14075 std::string rd
= GPR(copy(rd_value
));
14076 std::string rt
= GPR(copy(rt_value
));
14077 std::string rs
= GPR(copy(rs_value
));
14079 return img_format("SHLLV.QB %s, %s, %s", rd
, rt
, rs
);
14084 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14085 * halfwords with saturation
14088 * 10987654321098765432109876543210
14089 * 001000 11110001101
14094 static std::string
SHLLV_S_PH(uint64 instruction
, Dis_info
*info
)
14096 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14097 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14098 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14100 std::string rd
= GPR(copy(rd_value
));
14101 std::string rt
= GPR(copy(rt_value
));
14102 std::string rs
= GPR(copy(rs_value
));
14104 return img_format("SHLLV_S.PH %s, %s, %s", rd
, rt
, rs
);
14109 * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word
14112 * 10987654321098765432109876543210
14113 * 001000 x1111010101
14118 static std::string
SHLLV_S_W(uint64 instruction
, Dis_info
*info
)
14120 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14121 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14122 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14124 std::string rd
= GPR(copy(rd_value
));
14125 std::string rt
= GPR(copy(rt_value
));
14126 std::string rs
= GPR(copy(rs_value
));
14128 return img_format("SHLLV_S.W %s, %s, %s", rd
, rt
, rs
);
14136 * 10987654321098765432109876543210
14137 * 001000 01001001101
14142 static std::string
SHRA_PH(uint64 instruction
, Dis_info
*info
)
14144 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14145 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14146 uint64 sa_value
= extract_sa_15_14_13_12(instruction
);
14148 std::string rt
= GPR(copy(rt_value
));
14149 std::string rs
= GPR(copy(rs_value
));
14150 std::string sa
= IMMEDIATE(copy(sa_value
));
14152 return img_format("SHRA.PH %s, %s, %s", rt
, rs
, sa
);
14160 * 10987654321098765432109876543210
14161 * 001000 01001001101
14166 static std::string
SHRA_QB(uint64 instruction
, Dis_info
*info
)
14168 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14169 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14170 uint64 sa_value
= extract_sa_15_14_13(instruction
);
14172 std::string rt
= GPR(copy(rt_value
));
14173 std::string rs
= GPR(copy(rs_value
));
14174 std::string sa
= IMMEDIATE(copy(sa_value
));
14176 return img_format("SHRA.QB %s, %s, %s", rt
, rs
, sa
);
14184 * 10987654321098765432109876543210
14185 * 001000 01001001101
14190 static std::string
SHRA_R_PH(uint64 instruction
, Dis_info
*info
)
14192 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14193 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14194 uint64 sa_value
= extract_sa_15_14_13_12(instruction
);
14196 std::string rt
= GPR(copy(rt_value
));
14197 std::string rs
= GPR(copy(rs_value
));
14198 std::string sa
= IMMEDIATE(copy(sa_value
));
14200 return img_format("SHRA_R.PH %s, %s, %s", rt
, rs
, sa
);
14208 * 10987654321098765432109876543210
14209 * 001000 01001001101
14214 static std::string
SHRA_R_QB(uint64 instruction
, Dis_info
*info
)
14216 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14217 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14218 uint64 sa_value
= extract_sa_15_14_13(instruction
);
14220 std::string rt
= GPR(copy(rt_value
));
14221 std::string rs
= GPR(copy(rs_value
));
14222 std::string sa
= IMMEDIATE(copy(sa_value
));
14224 return img_format("SHRA_R.QB %s, %s, %s", rt
, rs
, sa
);
14232 * 10987654321098765432109876543210
14233 * 001000 01001001101
14238 static std::string
SHRA_R_W(uint64 instruction
, Dis_info
*info
)
14240 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14241 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14242 uint64 sa_value
= extract_sa_15_14_13_12_11(instruction
);
14244 std::string rt
= GPR(copy(rt_value
));
14245 std::string rs
= GPR(copy(rs_value
));
14246 std::string sa
= IMMEDIATE(copy(sa_value
));
14248 return img_format("SHRA_R.W %s, %s, %s", rt
, rs
, sa
);
14256 * 10987654321098765432109876543210
14257 * 001000 01001001101
14262 static std::string
SHRAV_PH(uint64 instruction
, Dis_info
*info
)
14264 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14265 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14266 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14268 std::string rd
= GPR(copy(rd_value
));
14269 std::string rt
= GPR(copy(rt_value
));
14270 std::string rs
= GPR(copy(rs_value
));
14272 return img_format("SHRAV.PH %s, %s, %s", rd
, rt
, rs
);
14280 * 10987654321098765432109876543210
14281 * 001000 01001001101
14286 static std::string
SHRAV_QB(uint64 instruction
, Dis_info
*info
)
14288 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14289 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14290 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14292 std::string rd
= GPR(copy(rd_value
));
14293 std::string rt
= GPR(copy(rt_value
));
14294 std::string rs
= GPR(copy(rs_value
));
14296 return img_format("SHRAV.QB %s, %s, %s", rd
, rt
, rs
);
14304 * 10987654321098765432109876543210
14305 * 001000 01001001101
14310 static std::string
SHRAV_R_PH(uint64 instruction
, Dis_info
*info
)
14312 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14313 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14314 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14316 std::string rd
= GPR(copy(rd_value
));
14317 std::string rt
= GPR(copy(rt_value
));
14318 std::string rs
= GPR(copy(rs_value
));
14320 return img_format("SHRAV_R.PH %s, %s, %s", rd
, rt
, rs
);
14328 * 10987654321098765432109876543210
14329 * 001000 01001001101
14334 static std::string
SHRAV_R_QB(uint64 instruction
, Dis_info
*info
)
14336 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14337 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14338 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14340 std::string rd
= GPR(copy(rd_value
));
14341 std::string rt
= GPR(copy(rt_value
));
14342 std::string rs
= GPR(copy(rs_value
));
14344 return img_format("SHRAV_R.QB %s, %s, %s", rd
, rt
, rs
);
14352 * 10987654321098765432109876543210
14353 * 001000 01001001101
14358 static std::string
SHRAV_R_W(uint64 instruction
, Dis_info
*info
)
14360 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14361 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14362 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14364 std::string rd
= GPR(copy(rd_value
));
14365 std::string rt
= GPR(copy(rt_value
));
14366 std::string rs
= GPR(copy(rs_value
));
14368 return img_format("SHRAV_R.W %s, %s, %s", rd
, rt
, rs
);
14373 * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords
14376 * 10987654321098765432109876543210
14377 * 001000 001111111111
14382 static std::string
SHRL_PH(uint64 instruction
, Dis_info
*info
)
14384 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14385 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14386 uint64 sa_value
= extract_sa_15_14_13_12(instruction
);
14388 std::string rt
= GPR(copy(rt_value
));
14389 std::string rs
= GPR(copy(rs_value
));
14390 std::string sa
= IMMEDIATE(copy(sa_value
));
14392 return img_format("SHRL.PH %s, %s, %s", rt
, rs
, sa
);
14397 * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes
14400 * 10987654321098765432109876543210
14401 * 001000 1100001111111
14406 static std::string
SHRL_QB(uint64 instruction
, Dis_info
*info
)
14408 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14409 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14410 uint64 sa_value
= extract_sa_15_14_13(instruction
);
14412 std::string rt
= GPR(copy(rt_value
));
14413 std::string rs
= GPR(copy(rs_value
));
14414 std::string sa
= IMMEDIATE(copy(sa_value
));
14416 return img_format("SHRL.QB %s, %s, %s", rt
, rs
, sa
);
14421 * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of
14425 * 10987654321098765432109876543210
14426 * 001000 x1100010101
14431 static std::string
SHRLV_PH(uint64 instruction
, Dis_info
*info
)
14433 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14434 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14435 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14437 std::string rd
= GPR(copy(rd_value
));
14438 std::string rt
= GPR(copy(rt_value
));
14439 std::string rs
= GPR(copy(rs_value
));
14441 return img_format("SHRLV.PH %s, %s, %s", rd
, rt
, rs
);
14446 * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes
14449 * 10987654321098765432109876543210
14450 * 001000 x1101010101
14455 static std::string
SHRLV_QB(uint64 instruction
, Dis_info
*info
)
14457 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14458 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14459 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14461 std::string rd
= GPR(copy(rd_value
));
14462 std::string rt
= GPR(copy(rt_value
));
14463 std::string rs
= GPR(copy(rs_value
));
14465 return img_format("SHRLV.QB %s, %s, %s", rd
, rt
, rs
);
14473 * 10987654321098765432109876543210
14474 * 001000 01001001101
14479 static std::string
SHX(uint64 instruction
, Dis_info
*info
)
14481 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14482 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14483 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14485 std::string rd
= GPR(copy(rd_value
));
14486 std::string rs
= GPR(copy(rs_value
));
14487 std::string rt
= GPR(copy(rt_value
));
14489 return img_format("SHX %s, %s(%s)", rd
, rs
, rt
);
14497 * 10987654321098765432109876543210
14498 * 001000 01001001101
14503 static std::string
SHXS(uint64 instruction
, Dis_info
*info
)
14505 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14506 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14507 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14509 std::string rd
= GPR(copy(rd_value
));
14510 std::string rs
= GPR(copy(rs_value
));
14511 std::string rt
= GPR(copy(rt_value
));
14513 return img_format("SHXS %s, %s(%s)", rd
, rs
, rt
);
14521 * 10987654321098765432109876543210
14522 * 001000 01001001101
14527 static std::string
SIGRIE(uint64 instruction
, Dis_info
*info
)
14529 uint64 code_value
= extract_code_18_to_0(instruction
);
14531 std::string code
= IMMEDIATE(copy(code_value
));
14533 return img_format("SIGRIE %s", code
);
14541 * 10987654321098765432109876543210
14542 * 001000 01001001101
14547 static std::string
SLL_16_(uint64 instruction
, Dis_info
*info
)
14549 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
14550 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
14551 uint64 shift3_value
= extract_shift3_2_1_0(instruction
);
14553 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
14554 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
14555 std::string shift3
= IMMEDIATE(encode_shift3_from_shift(shift3_value
));
14557 return img_format("SLL %s, %s, %s", rt3
, rs3
, shift3
);
14565 * 10987654321098765432109876543210
14566 * 001000 01001001101
14571 static std::string
SLL_32_(uint64 instruction
, Dis_info
*info
)
14573 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14574 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14575 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
14577 std::string rt
= GPR(copy(rt_value
));
14578 std::string rs
= GPR(copy(rs_value
));
14579 std::string shift
= IMMEDIATE(copy(shift_value
));
14581 return img_format("SLL %s, %s, %s", rt
, rs
, shift
);
14589 * 10987654321098765432109876543210
14590 * 001000 01001001101
14595 static std::string
SLLV(uint64 instruction
, Dis_info
*info
)
14597 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14598 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14599 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14601 std::string rd
= GPR(copy(rd_value
));
14602 std::string rs
= GPR(copy(rs_value
));
14603 std::string rt
= GPR(copy(rt_value
));
14605 return img_format("SLLV %s, %s, %s", rd
, rs
, rt
);
14613 * 10987654321098765432109876543210
14614 * 001000 01001001101
14619 static std::string
SLT(uint64 instruction
, Dis_info
*info
)
14621 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14622 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14623 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14625 std::string rd
= GPR(copy(rd_value
));
14626 std::string rs
= GPR(copy(rs_value
));
14627 std::string rt
= GPR(copy(rt_value
));
14629 return img_format("SLT %s, %s, %s", rd
, rs
, rt
);
14637 * 10987654321098765432109876543210
14638 * 001000 01001001101
14643 static std::string
SLTI(uint64 instruction
, Dis_info
*info
)
14645 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14646 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14647 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
14649 std::string rt
= GPR(copy(rt_value
));
14650 std::string rs
= GPR(copy(rs_value
));
14651 std::string u
= IMMEDIATE(copy(u_value
));
14653 return img_format("SLTI %s, %s, %s", rt
, rs
, u
);
14661 * 10987654321098765432109876543210
14662 * 001000 01001001101
14667 static std::string
SLTIU(uint64 instruction
, Dis_info
*info
)
14669 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14670 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14671 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
14673 std::string rt
= GPR(copy(rt_value
));
14674 std::string rs
= GPR(copy(rs_value
));
14675 std::string u
= IMMEDIATE(copy(u_value
));
14677 return img_format("SLTIU %s, %s, %s", rt
, rs
, u
);
14685 * 10987654321098765432109876543210
14686 * 001000 01001001101
14691 static std::string
SLTU(uint64 instruction
, Dis_info
*info
)
14693 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14694 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14695 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14697 std::string rd
= GPR(copy(rd_value
));
14698 std::string rs
= GPR(copy(rs_value
));
14699 std::string rt
= GPR(copy(rt_value
));
14701 return img_format("SLTU %s, %s, %s", rd
, rs
, rt
);
14709 * 10987654321098765432109876543210
14710 * 001000 01001001101
14715 static std::string
SOV(uint64 instruction
, Dis_info
*info
)
14717 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14718 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14719 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14721 std::string rd
= GPR(copy(rd_value
));
14722 std::string rs
= GPR(copy(rs_value
));
14723 std::string rt
= GPR(copy(rt_value
));
14725 return img_format("SOV %s, %s, %s", rd
, rs
, rt
);
14733 * 10987654321098765432109876543210
14734 * 001000 01001001101
14739 static std::string
SPECIAL2(uint64 instruction
, Dis_info
*info
)
14741 uint64 op_value
= extract_op_25_to_3(instruction
);
14743 std::string op
= IMMEDIATE(copy(op_value
));
14745 return img_format("SPECIAL2 %s", op
);
14753 * 10987654321098765432109876543210
14754 * 001000 01001001101
14759 static std::string
SQRT_D(uint64 instruction
, Dis_info
*info
)
14761 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
14762 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
14764 std::string ft
= FPR(copy(ft_value
));
14765 std::string fs
= FPR(copy(fs_value
));
14767 return img_format("SQRT.D %s, %s", ft
, fs
);
14775 * 10987654321098765432109876543210
14776 * 001000 01001001101
14781 static std::string
SQRT_S(uint64 instruction
, Dis_info
*info
)
14783 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
14784 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
14786 std::string ft
= FPR(copy(ft_value
));
14787 std::string fs
= FPR(copy(fs_value
));
14789 return img_format("SQRT.S %s, %s", ft
, fs
);
14794 * SRA rd, rt, sa - Shift Word Right Arithmetic
14797 * 10987654321098765432109876543210
14798 * 00000000000 000011
14803 static std::string
SRA(uint64 instruction
, Dis_info
*info
)
14805 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14806 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14807 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
14809 std::string rt
= GPR(copy(rt_value
));
14810 std::string rs
= GPR(copy(rs_value
));
14811 std::string shift
= IMMEDIATE(copy(shift_value
));
14813 return img_format("SRA %s, %s, %s", rt
, rs
, shift
);
14818 * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
14821 * 10987654321098765432109876543210
14822 * 001000 00000000111
14827 static std::string
SRAV(uint64 instruction
, Dis_info
*info
)
14829 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14830 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14831 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14833 std::string rd
= GPR(copy(rd_value
));
14834 std::string rs
= GPR(copy(rs_value
));
14835 std::string rt
= GPR(copy(rt_value
));
14837 return img_format("SRAV %s, %s, %s", rd
, rs
, rt
);
14845 * 10987654321098765432109876543210
14846 * 001000 00000000111
14851 static std::string
SRL_16_(uint64 instruction
, Dis_info
*info
)
14853 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
14854 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
14855 uint64 shift3_value
= extract_shift3_2_1_0(instruction
);
14857 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
14858 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
14859 std::string shift3
= IMMEDIATE(encode_shift3_from_shift(shift3_value
));
14861 return img_format("SRL %s, %s, %s", rt3
, rs3
, shift3
);
14869 * 10987654321098765432109876543210
14870 * 001000 01001001101
14875 static std::string
SRL_32_(uint64 instruction
, Dis_info
*info
)
14877 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14878 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14879 uint64 shift_value
= extract_shift_4_3_2_1_0(instruction
);
14881 std::string rt
= GPR(copy(rt_value
));
14882 std::string rs
= GPR(copy(rs_value
));
14883 std::string shift
= IMMEDIATE(copy(shift_value
));
14885 return img_format("SRL %s, %s, %s", rt
, rs
, shift
);
14893 * 10987654321098765432109876543210
14894 * 001000 01001001101
14899 static std::string
SRLV(uint64 instruction
, Dis_info
*info
)
14901 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14902 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14903 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14905 std::string rd
= GPR(copy(rd_value
));
14906 std::string rs
= GPR(copy(rs_value
));
14907 std::string rt
= GPR(copy(rt_value
));
14909 return img_format("SRLV %s, %s, %s", rd
, rs
, rt
);
14917 * 10987654321098765432109876543210
14918 * 001000 01001001101
14923 static std::string
SUB(uint64 instruction
, Dis_info
*info
)
14925 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14926 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14927 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
14929 std::string rd
= GPR(copy(rd_value
));
14930 std::string rs
= GPR(copy(rs_value
));
14931 std::string rt
= GPR(copy(rt_value
));
14933 return img_format("SUB %s, %s, %s", rd
, rs
, rt
);
14941 * 10987654321098765432109876543210
14942 * 001000 01001001101
14947 static std::string
SUB_D(uint64 instruction
, Dis_info
*info
)
14949 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
14950 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
14951 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
14953 std::string fd
= FPR(copy(fd_value
));
14954 std::string fs
= FPR(copy(fs_value
));
14955 std::string ft
= FPR(copy(ft_value
));
14957 return img_format("SUB.D %s, %s, %s", fd
, fs
, ft
);
14965 * 10987654321098765432109876543210
14966 * 001000 01001001101
14971 static std::string
SUB_S(uint64 instruction
, Dis_info
*info
)
14973 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
14974 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
14975 uint64 fd_value
= extract_fd_15_14_13_12_11(instruction
);
14977 std::string fd
= FPR(copy(fd_value
));
14978 std::string fs
= FPR(copy(fs_value
));
14979 std::string ft
= FPR(copy(ft_value
));
14981 return img_format("SUB.S %s, %s, %s", fd
, fs
, ft
);
14989 * 10987654321098765432109876543210
14990 * 001000 01001001101
14995 static std::string
SUBQ_PH(uint64 instruction
, Dis_info
*info
)
14997 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
14998 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
14999 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15001 std::string rd
= GPR(copy(rd_value
));
15002 std::string rs
= GPR(copy(rs_value
));
15003 std::string rt
= GPR(copy(rt_value
));
15005 return img_format("SUBQ.PH %s, %s, %s", rd
, rs
, rt
);
15010 * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15011 * right to halve results
15014 * 10987654321098765432109876543210
15015 * 001000 01001001101
15020 static std::string
SUBQ_S_PH(uint64 instruction
, Dis_info
*info
)
15022 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15023 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15024 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15026 std::string rd
= GPR(copy(rd_value
));
15027 std::string rs
= GPR(copy(rs_value
));
15028 std::string rt
= GPR(copy(rt_value
));
15030 return img_format("SUBQ_S.PH %s, %s, %s", rd
, rs
, rt
);
15035 * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift
15036 * right to halve results
15039 * 10987654321098765432109876543210
15040 * 001000 01001001101
15045 static std::string
SUBQ_S_W(uint64 instruction
, Dis_info
*info
)
15047 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15048 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15049 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15051 std::string rd
= GPR(copy(rd_value
));
15052 std::string rs
= GPR(copy(rs_value
));
15053 std::string rt
= GPR(copy(rt_value
));
15055 return img_format("SUBQ_S.W %s, %s, %s", rd
, rs
, rt
);
15060 * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15061 * right to halve results
15064 * 10987654321098765432109876543210
15065 * 001000 01001001101
15070 static std::string
SUBQH_PH(uint64 instruction
, Dis_info
*info
)
15072 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15073 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15074 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15076 std::string rd
= GPR(copy(rd_value
));
15077 std::string rs
= GPR(copy(rs_value
));
15078 std::string rt
= GPR(copy(rt_value
));
15080 return img_format("SUBQH.PH %s, %s, %s", rd
, rs
, rt
);
15085 * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15086 * right to halve results
15089 * 10987654321098765432109876543210
15090 * 001000 01001001101
15095 static std::string
SUBQH_R_PH(uint64 instruction
, Dis_info
*info
)
15097 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15098 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15099 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15101 std::string rd
= GPR(copy(rd_value
));
15102 std::string rs
= GPR(copy(rs_value
));
15103 std::string rt
= GPR(copy(rt_value
));
15105 return img_format("SUBQH_R.PH %s, %s, %s", rd
, rs
, rt
);
15110 * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift
15111 * right to halve results with rounding
15114 * 10987654321098765432109876543210
15115 * 001000 11001001101
15120 static std::string
SUBQH_R_W(uint64 instruction
, Dis_info
*info
)
15122 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15123 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15124 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15126 std::string rd
= GPR(copy(rd_value
));
15127 std::string rs
= GPR(copy(rs_value
));
15128 std::string rt
= GPR(copy(rt_value
));
15130 return img_format("SUBQH_R.W %s, %s, %s", rd
, rs
, rt
);
15135 * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to
15139 * 10987654321098765432109876543210
15140 * 001000 01010001101
15145 static std::string
SUBQH_W(uint64 instruction
, Dis_info
*info
)
15147 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15148 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15149 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15151 std::string rd
= GPR(copy(rd_value
));
15152 std::string rs
= GPR(copy(rs_value
));
15153 std::string rt
= GPR(copy(rt_value
));
15155 return img_format("SUBQH.W %s, %s, %s", rd
, rs
, rt
);
15160 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15163 * 10987654321098765432109876543210
15164 * 001000 00010001101
15169 static std::string
SUBU_16_(uint64 instruction
, Dis_info
*info
)
15171 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
15172 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
15173 uint64 rd3_value
= extract_rd3_3_2_1(instruction
);
15175 std::string rd3
= GPR(decode_gpr_gpr3(rd3_value
));
15176 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
15177 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
15179 return img_format("SUBU %s, %s, %s", rd3
, rs3
, rt3
);
15184 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15187 * 10987654321098765432109876543210
15188 * 001000 00010001101
15193 static std::string
SUBU_32_(uint64 instruction
, Dis_info
*info
)
15195 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15196 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15197 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15199 std::string rd
= GPR(copy(rd_value
));
15200 std::string rs
= GPR(copy(rs_value
));
15201 std::string rt
= GPR(copy(rt_value
));
15203 return img_format("SUBU %s, %s, %s", rd
, rs
, rt
);
15208 * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords
15211 * 10987654321098765432109876543210
15212 * 001000 01100001101
15217 static std::string
SUBU_PH(uint64 instruction
, Dis_info
*info
)
15219 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15220 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15221 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15223 std::string rd
= GPR(copy(rd_value
));
15224 std::string rs
= GPR(copy(rs_value
));
15225 std::string rt
= GPR(copy(rt_value
));
15227 return img_format("SUBU.PH %s, %s, %s", rd
, rs
, rt
);
15232 * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors
15235 * 10987654321098765432109876543210
15236 * 001000 01011001101
15241 static std::string
SUBU_QB(uint64 instruction
, Dis_info
*info
)
15243 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15244 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15245 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15247 std::string rd
= GPR(copy(rd_value
));
15248 std::string rs
= GPR(copy(rs_value
));
15249 std::string rt
= GPR(copy(rt_value
));
15251 return img_format("SUBU.QB %s, %s, %s", rd
, rs
, rt
);
15256 * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with
15260 * 10987654321098765432109876543210
15261 * 001000 11100001101
15266 static std::string
SUBU_S_PH(uint64 instruction
, Dis_info
*info
)
15268 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15269 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15270 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15272 std::string rd
= GPR(copy(rd_value
));
15273 std::string rs
= GPR(copy(rs_value
));
15274 std::string rt
= GPR(copy(rt_value
));
15276 return img_format("SUBU_S.PH %s, %s, %s", rd
, rs
, rt
);
15281 * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with
15285 * 10987654321098765432109876543210
15286 * 001000 11011001101
15291 static std::string
SUBU_S_QB(uint64 instruction
, Dis_info
*info
)
15293 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15294 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15295 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15297 std::string rd
= GPR(copy(rd_value
));
15298 std::string rs
= GPR(copy(rs_value
));
15299 std::string rt
= GPR(copy(rt_value
));
15301 return img_format("SUBU_S.QB %s, %s, %s", rd
, rs
, rt
);
15306 * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift
15310 * 10987654321098765432109876543210
15311 * 001000 01101001101
15316 static std::string
SUBUH_QB(uint64 instruction
, Dis_info
*info
)
15318 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15319 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15320 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15322 std::string rd
= GPR(copy(rd_value
));
15323 std::string rs
= GPR(copy(rs_value
));
15324 std::string rt
= GPR(copy(rt_value
));
15326 return img_format("SUBUH.QB %s, %s, %s", rd
, rs
, rt
);
15331 * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift
15332 * to halve results with rounding
15335 * 10987654321098765432109876543210
15336 * 001000 11101001101
15341 static std::string
SUBUH_R_QB(uint64 instruction
, Dis_info
*info
)
15343 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15344 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15345 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15347 std::string rd
= GPR(copy(rd_value
));
15348 std::string rs
= GPR(copy(rs_value
));
15349 std::string rt
= GPR(copy(rt_value
));
15351 return img_format("SUBUH_R.QB %s, %s, %s", rd
, rs
, rt
);
15356 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15359 * 10987654321098765432109876543210
15360 * 001000 00010001101
15365 static std::string
SW_16_(uint64 instruction
, Dis_info
*info
)
15367 uint64 rtz3_value
= extract_rtz3_9_8_7(instruction
);
15368 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
15369 uint64 u_value
= extract_u_3_2_1_0__s2(instruction
);
15371 std::string rtz3
= GPR(decode_gpr_gpr3_src_store(rtz3_value
));
15372 std::string u
= IMMEDIATE(copy(u_value
));
15373 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
15375 return img_format("SW %s, %s(%s)", rtz3
, u
, rs3
);
15380 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15383 * 10987654321098765432109876543210
15384 * 001000 00010001101
15389 static std::string
SW_4X4_(uint64 instruction
, Dis_info
*info
)
15391 uint64 rtz4_value
= extract_rtz4_9_7_6_5(instruction
);
15392 uint64 rs4_value
= extract_rs4_4_2_1_0(instruction
);
15393 uint64 u_value
= extract_u_3_8__s2(instruction
);
15395 std::string rtz4
= GPR(decode_gpr_gpr4_zero(rtz4_value
));
15396 std::string u
= IMMEDIATE(copy(u_value
));
15397 std::string rs4
= GPR(decode_gpr_gpr4(rs4_value
));
15399 return img_format("SW %s, %s(%s)", rtz4
, u
, rs4
);
15404 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15407 * 10987654321098765432109876543210
15408 * 001000 00010001101
15413 static std::string
SW_GP16_(uint64 instruction
, Dis_info
*info
)
15415 uint64 u_value
= extract_u_6_5_4_3_2_1_0__s2(instruction
);
15416 uint64 rtz3_value
= extract_rtz3_9_8_7(instruction
);
15418 std::string rtz3
= GPR(decode_gpr_gpr3_src_store(rtz3_value
));
15419 std::string u
= IMMEDIATE(copy(u_value
));
15421 return img_format("SW %s, %s($%d)", rtz3
, u
, 28);
15426 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15429 * 10987654321098765432109876543210
15430 * 001000 00010001101
15435 static std::string
SW_GP_(uint64 instruction
, Dis_info
*info
)
15437 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15438 uint64 u_value
= extract_u_20_to_2__s2(instruction
);
15440 std::string rt
= GPR(copy(rt_value
));
15441 std::string u
= IMMEDIATE(copy(u_value
));
15443 return img_format("SW %s, %s($%d)", rt
, u
, 28);
15448 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15451 * 10987654321098765432109876543210
15452 * 001000 00010001101
15457 static std::string
SW_S9_(uint64 instruction
, Dis_info
*info
)
15459 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15460 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
15461 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15463 std::string rt
= GPR(copy(rt_value
));
15464 std::string s
= IMMEDIATE(copy(s_value
));
15465 std::string rs
= GPR(copy(rs_value
));
15467 return img_format("SW %s, %s(%s)", rt
, s
, rs
);
15472 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15475 * 10987654321098765432109876543210
15476 * 001000 00010001101
15481 static std::string
SW_SP_(uint64 instruction
, Dis_info
*info
)
15483 uint64 rt_value
= extract_rt_9_8_7_6_5(instruction
);
15484 uint64 u_value
= extract_u_4_3_2_1_0__s2(instruction
);
15486 std::string rt
= GPR(copy(rt_value
));
15487 std::string u
= IMMEDIATE(copy(u_value
));
15489 return img_format("SW %s, %s($%d)", rt
, u
, 29);
15494 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15497 * 10987654321098765432109876543210
15498 * 001000 00010001101
15503 static std::string
SW_U12_(uint64 instruction
, Dis_info
*info
)
15505 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15506 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15507 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
15509 std::string rt
= GPR(copy(rt_value
));
15510 std::string u
= IMMEDIATE(copy(u_value
));
15511 std::string rs
= GPR(copy(rs_value
));
15513 return img_format("SW %s, %s(%s)", rt
, u
, rs
);
15518 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15521 * 10987654321098765432109876543210
15522 * 001000 00010001101
15527 static std::string
SWC1_GP_(uint64 instruction
, Dis_info
*info
)
15529 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
15530 uint64 u_value
= extract_u_17_to_2__s2(instruction
);
15532 std::string ft
= FPR(copy(ft_value
));
15533 std::string u
= IMMEDIATE(copy(u_value
));
15535 return img_format("SWC1 %s, %s($%d)", ft
, u
, 28);
15540 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15543 * 10987654321098765432109876543210
15544 * 001000 00010001101
15549 static std::string
SWC1_S9_(uint64 instruction
, Dis_info
*info
)
15551 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
15552 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15553 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
15555 std::string ft
= FPR(copy(ft_value
));
15556 std::string s
= IMMEDIATE(copy(s_value
));
15557 std::string rs
= GPR(copy(rs_value
));
15559 return img_format("SWC1 %s, %s(%s)", ft
, s
, rs
);
15564 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15567 * 10987654321098765432109876543210
15568 * 001000 00010001101
15573 static std::string
SWC1_U12_(uint64 instruction
, Dis_info
*info
)
15575 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
15576 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15577 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
15579 std::string ft
= FPR(copy(ft_value
));
15580 std::string u
= IMMEDIATE(copy(u_value
));
15581 std::string rs
= GPR(copy(rs_value
));
15583 return img_format("SWC1 %s, %s(%s)", ft
, u
, rs
);
15588 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15591 * 10987654321098765432109876543210
15592 * 001000 00010001101
15597 static std::string
SWC1X(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
);
15601 uint64 ft_value
= extract_ft_15_14_13_12_11(instruction
);
15603 std::string ft
= FPR(copy(ft_value
));
15604 std::string rs
= GPR(copy(rs_value
));
15605 std::string rt
= GPR(copy(rt_value
));
15607 return img_format("SWC1X %s, %s(%s)", ft
, rs
, rt
);
15612 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15615 * 10987654321098765432109876543210
15616 * 001000 00010001101
15621 static std::string
SWC1XS(uint64 instruction
, Dis_info
*info
)
15623 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15624 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15625 uint64 ft_value
= extract_ft_15_14_13_12_11(instruction
);
15627 std::string ft
= FPR(copy(ft_value
));
15628 std::string rs
= GPR(copy(rs_value
));
15629 std::string rt
= GPR(copy(rt_value
));
15631 return img_format("SWC1XS %s, %s(%s)", ft
, rs
, rt
);
15636 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15639 * 10987654321098765432109876543210
15640 * 001000 00010001101
15645 static std::string
SWC2(uint64 instruction
, Dis_info
*info
)
15647 uint64 cs_value
= extract_cs_25_24_23_22_21(instruction
);
15648 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15649 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
15651 std::string cs
= CPR(copy(cs_value
));
15652 std::string s
= IMMEDIATE(copy(s_value
));
15653 std::string rs
= GPR(copy(rs_value
));
15655 return img_format("SWC2 %s, %s(%s)", cs
, s
, rs
);
15660 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15663 * 10987654321098765432109876543210
15664 * 001000 00010001101
15669 static std::string
SWE(uint64 instruction
, Dis_info
*info
)
15671 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15672 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15673 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
15675 std::string rt
= GPR(copy(rt_value
));
15676 std::string s
= IMMEDIATE(copy(s_value
));
15677 std::string rs
= GPR(copy(rs_value
));
15679 return img_format("SWE %s, %s(%s)", rt
, s
, rs
);
15684 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15687 * 10987654321098765432109876543210
15688 * 001000 00010001101
15693 static std::string
SWM(uint64 instruction
, Dis_info
*info
)
15695 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15696 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15697 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
15698 uint64 count3_value
= extract_count3_14_13_12(instruction
);
15700 std::string rt
= GPR(copy(rt_value
));
15701 std::string s
= IMMEDIATE(copy(s_value
));
15702 std::string rs
= GPR(copy(rs_value
));
15703 std::string count3
= IMMEDIATE(encode_count3_from_count(count3_value
));
15705 return img_format("SWM %s, %s(%s), %s", rt
, s
, rs
, count3
);
15710 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15713 * 10987654321098765432109876543210
15714 * 001000 00010001101
15719 static std::string
SWPC_48_(uint64 instruction
, Dis_info
*info
)
15721 uint64 rt_value
= extract_rt_41_40_39_38_37(instruction
);
15722 int64 s_value
= extract_s__se31_15_to_0_31_to_16(instruction
);
15724 std::string rt
= GPR(copy(rt_value
));
15725 std::string s
= ADDRESS(encode_s_from_address(s_value
), 6, info
);
15727 return img_format("SWPC %s, %s", rt
, s
);
15732 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15735 * 10987654321098765432109876543210
15736 * 001000 00010001101
15741 static std::string
SWX(uint64 instruction
, Dis_info
*info
)
15743 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15744 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15745 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15747 std::string rd
= GPR(copy(rd_value
));
15748 std::string rs
= GPR(copy(rs_value
));
15749 std::string rt
= GPR(copy(rt_value
));
15751 return img_format("SWX %s, %s(%s)", rd
, rs
, rt
);
15756 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15759 * 10987654321098765432109876543210
15760 * 001000 00010001101
15765 static std::string
SWXS(uint64 instruction
, Dis_info
*info
)
15767 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15768 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15769 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
15771 std::string rd
= GPR(copy(rd_value
));
15772 std::string rs
= GPR(copy(rs_value
));
15773 std::string rt
= GPR(copy(rt_value
));
15775 return img_format("SWXS %s, %s(%s)", rd
, rs
, rt
);
15780 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15783 * 10987654321098765432109876543210
15784 * 001000 00010001101
15789 static std::string
SYNC(uint64 instruction
, Dis_info
*info
)
15791 uint64 stype_value
= extract_stype_20_19_18_17_16(instruction
);
15793 std::string stype
= IMMEDIATE(copy(stype_value
));
15795 return img_format("SYNC %s", stype
);
15800 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15803 * 10987654321098765432109876543210
15804 * 001000 00010001101
15809 static std::string
SYNCI(uint64 instruction
, Dis_info
*info
)
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 std::string s
= IMMEDIATE(copy(s_value
));
15815 std::string rs
= GPR(copy(rs_value
));
15817 return img_format("SYNCI %s(%s)", s
, rs
);
15822 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15825 * 10987654321098765432109876543210
15826 * 001000 00010001101
15831 static std::string
SYNCIE(uint64 instruction
, Dis_info
*info
)
15833 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15834 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
15836 std::string s
= IMMEDIATE(copy(s_value
));
15837 std::string rs
= GPR(copy(rs_value
));
15839 return img_format("SYNCIE %s(%s)", s
, rs
);
15844 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15847 * 10987654321098765432109876543210
15848 * 001000 00010001101
15853 static std::string
SYSCALL_16_(uint64 instruction
, Dis_info
*info
)
15855 uint64 code_value
= extract_code_1_0(instruction
);
15857 std::string code
= IMMEDIATE(copy(code_value
));
15859 return img_format("SYSCALL %s", code
);
15864 * SYSCALL code - System Call. Cause a System Call Exception
15867 * 10987654321098765432109876543210
15869 * code ------------------
15871 static std::string
SYSCALL_32_(uint64 instruction
, Dis_info
*info
)
15873 uint64 code_value
= extract_code_17_to_0(instruction
);
15875 std::string code
= IMMEDIATE(copy(code_value
));
15877 return img_format("SYSCALL %s", code
);
15882 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15885 * 10987654321098765432109876543210
15886 * 001000 00010001101
15891 static std::string
TEQ(uint64 instruction
, Dis_info
*info
)
15893 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
15894 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
15896 std::string rs
= GPR(copy(rs_value
));
15897 std::string rt
= GPR(copy(rt_value
));
15899 return img_format("TEQ %s, %s", rs
, rt
);
15904 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15907 * 10987654321098765432109876543210
15908 * 001000 00010001101
15913 static std::string
TLBGINV(uint64 instruction
, Dis_info
*info
)
15922 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15925 * 10987654321098765432109876543210
15926 * 001000 00010001101
15931 static std::string
TLBGINVF(uint64 instruction
, Dis_info
*info
)
15935 return "TLBGINVF ";
15940 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15943 * 10987654321098765432109876543210
15944 * 001000 00010001101
15949 static std::string
TLBGP(uint64 instruction
, Dis_info
*info
)
15958 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15961 * 10987654321098765432109876543210
15962 * 001000 00010001101
15967 static std::string
TLBGR(uint64 instruction
, Dis_info
*info
)
15976 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15979 * 10987654321098765432109876543210
15980 * 001000 00010001101
15985 static std::string
TLBGWI(uint64 instruction
, Dis_info
*info
)
15994 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15997 * 10987654321098765432109876543210
15998 * 001000 00010001101
16003 static std::string
TLBGWR(uint64 instruction
, Dis_info
*info
)
16012 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16015 * 10987654321098765432109876543210
16016 * 001000 00010001101
16021 static std::string
TLBINV(uint64 instruction
, Dis_info
*info
)
16030 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16033 * 10987654321098765432109876543210
16034 * 001000 00010001101
16039 static std::string
TLBINVF(uint64 instruction
, Dis_info
*info
)
16048 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16051 * 10987654321098765432109876543210
16052 * 001000 00010001101
16057 static std::string
TLBP(uint64 instruction
, Dis_info
*info
)
16066 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16069 * 10987654321098765432109876543210
16070 * 001000 00010001101
16075 static std::string
TLBR(uint64 instruction
, Dis_info
*info
)
16084 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16087 * 10987654321098765432109876543210
16088 * 001000 00010001101
16093 static std::string
TLBWI(uint64 instruction
, Dis_info
*info
)
16102 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16105 * 10987654321098765432109876543210
16106 * 001000 00010001101
16111 static std::string
TLBWR(uint64 instruction
, Dis_info
*info
)
16120 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16123 * 10987654321098765432109876543210
16124 * 001000 00010001101
16129 static std::string
TNE(uint64 instruction
, Dis_info
*info
)
16131 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16132 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16134 std::string rs
= GPR(copy(rs_value
));
16135 std::string rt
= GPR(copy(rt_value
));
16137 return img_format("TNE %s, %s", rs
, rt
);
16142 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16145 * 10987654321098765432109876543210
16146 * 001000 00010001101
16151 static std::string
TRUNC_L_D(uint64 instruction
, Dis_info
*info
)
16153 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
16154 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
16156 std::string ft
= FPR(copy(ft_value
));
16157 std::string fs
= FPR(copy(fs_value
));
16159 return img_format("TRUNC.L.D %s, %s", ft
, fs
);
16164 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16167 * 10987654321098765432109876543210
16168 * 001000 00010001101
16173 static std::string
TRUNC_L_S(uint64 instruction
, Dis_info
*info
)
16175 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
16176 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
16178 std::string ft
= FPR(copy(ft_value
));
16179 std::string fs
= FPR(copy(fs_value
));
16181 return img_format("TRUNC.L.S %s, %s", ft
, fs
);
16186 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16189 * 10987654321098765432109876543210
16190 * 001000 00010001101
16195 static std::string
TRUNC_W_D(uint64 instruction
, Dis_info
*info
)
16197 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
16198 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
16200 std::string ft
= FPR(copy(ft_value
));
16201 std::string fs
= FPR(copy(fs_value
));
16203 return img_format("TRUNC.W.D %s, %s", ft
, fs
);
16208 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16211 * 10987654321098765432109876543210
16212 * 001000 00010001101
16217 static std::string
TRUNC_W_S(uint64 instruction
, Dis_info
*info
)
16219 uint64 ft_value
= extract_ft_25_24_23_22_21(instruction
);
16220 uint64 fs_value
= extract_fs_20_19_18_17_16(instruction
);
16222 std::string ft
= FPR(copy(ft_value
));
16223 std::string fs
= FPR(copy(fs_value
));
16225 return img_format("TRUNC.W.S %s, %s", ft
, fs
);
16230 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16233 * 10987654321098765432109876543210
16234 * 001000 00010001101
16239 static std::string
UALDM(uint64 instruction
, Dis_info
*info
)
16241 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16242 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16243 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
16244 uint64 count3_value
= extract_count3_14_13_12(instruction
);
16246 std::string rt
= GPR(copy(rt_value
));
16247 std::string s
= IMMEDIATE(copy(s_value
));
16248 std::string rs
= GPR(copy(rs_value
));
16249 std::string count3
= IMMEDIATE(encode_count3_from_count(count3_value
));
16251 return img_format("UALDM %s, %s(%s), %s", rt
, s
, rs
, count3
);
16256 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16259 * 10987654321098765432109876543210
16260 * 001000 00010001101
16265 static std::string
UALH(uint64 instruction
, Dis_info
*info
)
16267 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16268 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16269 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
16271 std::string rt
= GPR(copy(rt_value
));
16272 std::string s
= IMMEDIATE(copy(s_value
));
16273 std::string rs
= GPR(copy(rs_value
));
16275 return img_format("UALH %s, %s(%s)", rt
, s
, rs
);
16280 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16283 * 10987654321098765432109876543210
16284 * 001000 00010001101
16289 static std::string
UALWM(uint64 instruction
, Dis_info
*info
)
16291 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16292 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16293 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
16294 uint64 count3_value
= extract_count3_14_13_12(instruction
);
16296 std::string rt
= GPR(copy(rt_value
));
16297 std::string s
= IMMEDIATE(copy(s_value
));
16298 std::string rs
= GPR(copy(rs_value
));
16299 std::string count3
= IMMEDIATE(encode_count3_from_count(count3_value
));
16301 return img_format("UALWM %s, %s(%s), %s", rt
, s
, rs
, count3
);
16306 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16309 * 10987654321098765432109876543210
16310 * 001000 00010001101
16315 static std::string
UASDM(uint64 instruction
, Dis_info
*info
)
16317 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16318 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16319 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
16320 uint64 count3_value
= extract_count3_14_13_12(instruction
);
16322 std::string rt
= GPR(copy(rt_value
));
16323 std::string s
= IMMEDIATE(copy(s_value
));
16324 std::string rs
= GPR(copy(rs_value
));
16325 std::string count3
= IMMEDIATE(encode_count3_from_count(count3_value
));
16327 return img_format("UASDM %s, %s(%s), %s", rt
, s
, rs
, count3
);
16332 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16335 * 10987654321098765432109876543210
16336 * 001000 00010001101
16341 static std::string
UASH(uint64 instruction
, Dis_info
*info
)
16343 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16344 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16345 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
16347 std::string rt
= GPR(copy(rt_value
));
16348 std::string s
= IMMEDIATE(copy(s_value
));
16349 std::string rs
= GPR(copy(rs_value
));
16351 return img_format("UASH %s, %s(%s)", rt
, s
, rs
);
16356 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16359 * 10987654321098765432109876543210
16360 * 001000 00010001101
16365 static std::string
UASWM(uint64 instruction
, Dis_info
*info
)
16367 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16368 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16369 int64 s_value
= extract_s__se8_15_7_6_5_4_3_2_1_0(instruction
);
16370 uint64 count3_value
= extract_count3_14_13_12(instruction
);
16372 std::string rt
= GPR(copy(rt_value
));
16373 std::string s
= IMMEDIATE(copy(s_value
));
16374 std::string rs
= GPR(copy(rs_value
));
16375 std::string count3
= IMMEDIATE(encode_count3_from_count(count3_value
));
16377 return img_format("UASWM %s, %s(%s), %s", rt
, s
, rs
, count3
);
16382 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16385 * 10987654321098765432109876543210
16386 * 001000 00010001101
16391 static std::string
UDI(uint64 instruction
, Dis_info
*info
)
16393 uint64 op_value
= extract_op_25_to_3(instruction
);
16395 std::string op
= IMMEDIATE(copy(op_value
));
16397 return img_format("UDI %s", op
);
16402 * WAIT code - Enter Wait State
16405 * 10987654321098765432109876543210
16406 * 001000 1100001101111111
16409 static std::string
WAIT(uint64 instruction
, Dis_info
*info
)
16411 uint64 code_value
= extract_code_25_24_23_22_21_20_19_18_17_16(instruction
);
16413 std::string code
= IMMEDIATE(copy(code_value
));
16415 return img_format("WAIT %s", code
);
16420 * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl
16424 * 10987654321098765432109876543210
16425 * 001000 01011001111111
16429 static std::string
WRDSP(uint64 instruction
, Dis_info
*info
)
16431 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16432 uint64 mask_value
= extract_mask_20_19_18_17_16_15_14(instruction
);
16434 std::string rt
= GPR(copy(rt_value
));
16435 std::string mask
= IMMEDIATE(copy(mask_value
));
16437 return img_format("WRDSP %s, %s", rt
, mask
);
16442 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16445 * 10987654321098765432109876543210
16446 * 001000 00010001101
16451 static std::string
WRPGPR(uint64 instruction
, Dis_info
*info
)
16453 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16454 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16456 std::string rt
= GPR(copy(rt_value
));
16457 std::string rs
= GPR(copy(rs_value
));
16459 return img_format("WRPGPR %s, %s", rt
, rs
);
16464 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16467 * 10987654321098765432109876543210
16468 * 001000 00010001101
16473 static std::string
XOR_16_(uint64 instruction
, Dis_info
*info
)
16475 uint64 rt3_value
= extract_rt3_9_8_7(instruction
);
16476 uint64 rs3_value
= extract_rs3_6_5_4(instruction
);
16478 std::string rs3
= GPR(decode_gpr_gpr3(rs3_value
));
16479 std::string rt3
= GPR(decode_gpr_gpr3(rt3_value
));
16481 return img_format("XOR %s, %s", rs3
, rt3
);
16486 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16489 * 10987654321098765432109876543210
16490 * 001000 00010001101
16495 static std::string
XOR_32_(uint64 instruction
, Dis_info
*info
)
16497 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16498 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16499 uint64 rd_value
= extract_rd_15_14_13_12_11(instruction
);
16501 std::string rd
= GPR(copy(rd_value
));
16502 std::string rs
= GPR(copy(rs_value
));
16503 std::string rt
= GPR(copy(rt_value
));
16505 return img_format("XOR %s, %s, %s", rd
, rs
, rt
);
16510 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16513 * 10987654321098765432109876543210
16514 * 001000 00010001101
16519 static std::string
XORI(uint64 instruction
, Dis_info
*info
)
16521 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16522 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16523 uint64 u_value
= extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction
);
16525 std::string rt
= GPR(copy(rt_value
));
16526 std::string rs
= GPR(copy(rs_value
));
16527 std::string u
= IMMEDIATE(copy(u_value
));
16529 return img_format("XORI %s, %s, %s", rt
, rs
, u
);
16537 * 10987654321098765432109876543210
16538 * 001000 00010001101
16542 static std::string
YIELD(uint64 instruction
, Dis_info
*info
)
16544 uint64 rt_value
= extract_rt_25_24_23_22_21(instruction
);
16545 uint64 rs_value
= extract_rs_20_19_18_17_16(instruction
);
16547 std::string rt
= GPR(copy(rt_value
));
16548 std::string rs
= GPR(copy(rs_value
));
16550 return img_format("YIELD %s, %s", rt
, rs
);
16556 * nanoMIPS instruction pool organization
16557 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16560 * āā P.ADDIU āāā P.RI āāā P.SYSCALL
16562 * ā āā P.TRAP
16564 * ā āā _POOL32A0_0 āā¼ā P.CMOVE
16566 * ā ā āā P.SLTU
16567 * ā āā _POOL32A0 āā¤
16570 * ā ā āā _POOL32A0_1 āāā CRC32
16572 * āā P32A āā¤
16573 * ā ā āā PP.LSX
16574 * ā ā āā P.LSX āāāāāā¤
16575 * ā ā ā āā PP.LSXS
16576 * ā āā _POOL32A7 āā¤
16577 * ā ā āā POOL32Axf_4
16578 * ā āā POOL32Axf āā¤
16579 * ā āā POOL32Axf_5
16583 * āā P.GP.W āā PP.LSX
16584 * āā P32 āā¤ ā
16585 * ā āā P.GP.BH āā“ā PP.LSXS
16587 * ā āā P.J āāāāāāā PP.BALRSC
16590 * ā ā āā P.SR
16592 * ā ā āā P.SHIFT
16594 * ā āā P.U12 āāāā¼ā P.ROTX
16596 * ā ā āā P.INS
16598 * ā ā āā P.EXT
16600 * ā āā P.LS.U12 āā P.PREF.U12
16602 * ā āā P.BR1 āāāāā P.BR3A
16604 * ā ā āā P.LS.S0 āāā P16.SYSCALL
16606 * ā ā ā āā P.LL
16607 * ā ā āā P.LS.S1 āā¤
16608 * ā ā ā āā P.SC
16610 * ā ā ā āā P.PREFE
16611 * MAJOR āā¤ āā P.LS.S9 āā¤ ā
16612 * ā ā āā P.LS.E0 āā¼ā P.LLE
16614 * ā ā ā āā P.SCE
16616 * ā ā āā P.LS.WM
16618 * ā ā āā P.LS.UAWM
16628 * ā āā P16.MV āāāā P16.RI āāā P16.SYSCALL
16630 * ā āā P16.SR
16632 * ā āā P16.SHIFT
16634 * ā āā P16.4x4
16636 * ā āā P16C āāāāāā POOL16C_0 āā POOL16C_00
16638 * āā P16 āā¼ā P16.LB
16644 * āā P16.A2 āāāā P.ADDIU[RS5]
16648 * āā P16.BR āāā¬ā P16.JRC
16653 * (FP, DPS, and some minor instruction pools are omitted from the diagram)
16657 static const Pool P_SYSCALL
[2] = {
16658 { instruction
, 0 , 0 , 32,
16659 0xfffc0000, 0x00080000, &SYSCALL_32_
, 0,
16660 0x0 }, /* SYSCALL[32] */
16661 { instruction
, 0 , 0 , 32,
16662 0xfffc0000, 0x000c0000, &HYPCALL
, 0,
16663 CP0_
| VZ_
}, /* HYPCALL */
16667 static const Pool P_RI
[4] = {
16668 { instruction
, 0 , 0 , 32,
16669 0xfff80000, 0x00000000, &SIGRIE
, 0,
16670 0x0 }, /* SIGRIE */
16671 { pool
, P_SYSCALL
, 2 , 32,
16672 0xfff80000, 0x00080000, 0 , 0,
16673 0x0 }, /* P.SYSCALL */
16674 { instruction
, 0 , 0 , 32,
16675 0xfff80000, 0x00100000, &BREAK_32_
, 0,
16676 0x0 }, /* BREAK[32] */
16677 { instruction
, 0 , 0 , 32,
16678 0xfff80000, 0x00180000, &SDBBP_32_
, 0,
16679 EJTAG_
}, /* SDBBP[32] */
16683 static const Pool P_ADDIU
[2] = {
16684 { pool
, P_RI
, 4 , 32,
16685 0xffe00000, 0x00000000, 0 , 0,
16687 { instruction
, 0 , 0 , 32,
16688 0xfc000000, 0x00000000, &ADDIU_32_
, &ADDIU_32__cond
,
16689 0x0 }, /* ADDIU[32] */
16693 static const Pool P_TRAP
[2] = {
16694 { instruction
, 0 , 0 , 32,
16695 0xfc0007ff, 0x20000000, &TEQ
, 0,
16697 { instruction
, 0 , 0 , 32,
16698 0xfc0007ff, 0x20000400, &TNE
, 0,
16703 static const Pool P_CMOVE
[2] = {
16704 { instruction
, 0 , 0 , 32,
16705 0xfc0007ff, 0x20000210, &MOVZ
, 0,
16707 { instruction
, 0 , 0 , 32,
16708 0xfc0007ff, 0x20000610, &MOVN
, 0,
16713 static const Pool P_D_MT_VPE
[2] = {
16714 { instruction
, 0 , 0 , 32,
16715 0xfc1f3fff, 0x20010ab0, &DMT
, 0,
16717 { instruction
, 0 , 0 , 32,
16718 0xfc1f3fff, 0x20000ab0, &DVPE
, 0,
16723 static const Pool P_E_MT_VPE
[2] = {
16724 { instruction
, 0 , 0 , 32,
16725 0xfc1f3fff, 0x20010eb0, &EMT
, 0,
16727 { instruction
, 0 , 0 , 32,
16728 0xfc1f3fff, 0x20000eb0, &EVPE
, 0,
16733 static const Pool _P_MT_VPE
[2] = {
16734 { pool
, P_D_MT_VPE
, 2 , 32,
16735 0xfc003fff, 0x20000ab0, 0 , 0,
16736 0x0 }, /* P.D_MT_VPE */
16737 { pool
, P_E_MT_VPE
, 2 , 32,
16738 0xfc003fff, 0x20000eb0, 0 , 0,
16739 0x0 }, /* P.E_MT_VPE */
16743 static const Pool P_MT_VPE
[8] = {
16744 { reserved_block
, 0 , 0 , 32,
16745 0xfc003bff, 0x200002b0, 0 , 0,
16746 0x0 }, /* P.MT_VPE~*(0) */
16747 { pool
, _P_MT_VPE
, 2 , 32,
16748 0xfc003bff, 0x20000ab0, 0 , 0,
16749 0x0 }, /* _P.MT_VPE */
16750 { reserved_block
, 0 , 0 , 32,
16751 0xfc003bff, 0x200012b0, 0 , 0,
16752 0x0 }, /* P.MT_VPE~*(2) */
16753 { reserved_block
, 0 , 0 , 32,
16754 0xfc003bff, 0x20001ab0, 0 , 0,
16755 0x0 }, /* P.MT_VPE~*(3) */
16756 { reserved_block
, 0 , 0 , 32,
16757 0xfc003bff, 0x200022b0, 0 , 0,
16758 0x0 }, /* P.MT_VPE~*(4) */
16759 { reserved_block
, 0 , 0 , 32,
16760 0xfc003bff, 0x20002ab0, 0 , 0,
16761 0x0 }, /* P.MT_VPE~*(5) */
16762 { reserved_block
, 0 , 0 , 32,
16763 0xfc003bff, 0x200032b0, 0 , 0,
16764 0x0 }, /* P.MT_VPE~*(6) */
16765 { reserved_block
, 0 , 0 , 32,
16766 0xfc003bff, 0x20003ab0, 0 , 0,
16767 0x0 }, /* P.MT_VPE~*(7) */
16771 static const Pool P_DVP
[2] = {
16772 { instruction
, 0 , 0 , 32,
16773 0xfc00ffff, 0x20000390, &DVP
, 0,
16775 { instruction
, 0 , 0 , 32,
16776 0xfc00ffff, 0x20000790, &EVP
, 0,
16781 static const Pool P_SLTU
[2] = {
16782 { pool
, P_DVP
, 2 , 32,
16783 0xfc00fbff, 0x20000390, 0 , 0,
16785 { instruction
, 0 , 0 , 32,
16786 0xfc0003ff, 0x20000390, &SLTU
, &SLTU_cond
,
16791 static const Pool _POOL32A0
[128] = {
16792 { pool
, P_TRAP
, 2 , 32,
16793 0xfc0003ff, 0x20000000, 0 , 0,
16794 0x0 }, /* P.TRAP */
16795 { instruction
, 0 , 0 , 32,
16796 0xfc0003ff, 0x20000008, &SEB
, 0,
16798 { instruction
, 0 , 0 , 32,
16799 0xfc0003ff, 0x20000010, &SLLV
, 0,
16801 { instruction
, 0 , 0 , 32,
16802 0xfc0003ff, 0x20000018, &MUL_32_
, 0,
16803 0x0 }, /* MUL[32] */
16804 { reserved_block
, 0 , 0 , 32,
16805 0xfc0003ff, 0x20000020, 0 , 0,
16806 0x0 }, /* _POOL32A0~*(4) */
16807 { reserved_block
, 0 , 0 , 32,
16808 0xfc0003ff, 0x20000028, 0 , 0,
16809 0x0 }, /* _POOL32A0~*(5) */
16810 { instruction
, 0 , 0 , 32,
16811 0xfc0003ff, 0x20000030, &MFC0
, 0,
16813 { instruction
, 0 , 0 , 32,
16814 0xfc0003ff, 0x20000038, &MFHC0
, 0,
16815 CP0_
| MVH_
}, /* MFHC0 */
16816 { reserved_block
, 0 , 0 , 32,
16817 0xfc0003ff, 0x20000040, 0 , 0,
16818 0x0 }, /* _POOL32A0~*(8) */
16819 { instruction
, 0 , 0 , 32,
16820 0xfc0003ff, 0x20000048, &SEH
, 0,
16822 { instruction
, 0 , 0 , 32,
16823 0xfc0003ff, 0x20000050, &SRLV
, 0,
16825 { instruction
, 0 , 0 , 32,
16826 0xfc0003ff, 0x20000058, &MUH
, 0,
16828 { reserved_block
, 0 , 0 , 32,
16829 0xfc0003ff, 0x20000060, 0 , 0,
16830 0x0 }, /* _POOL32A0~*(12) */
16831 { reserved_block
, 0 , 0 , 32,
16832 0xfc0003ff, 0x20000068, 0 , 0,
16833 0x0 }, /* _POOL32A0~*(13) */
16834 { instruction
, 0 , 0 , 32,
16835 0xfc0003ff, 0x20000070, &MTC0
, 0,
16837 { instruction
, 0 , 0 , 32,
16838 0xfc0003ff, 0x20000078, &MTHC0
, 0,
16839 CP0_
| MVH_
}, /* MTHC0 */
16840 { reserved_block
, 0 , 0 , 32,
16841 0xfc0003ff, 0x20000080, 0 , 0,
16842 0x0 }, /* _POOL32A0~*(16) */
16843 { reserved_block
, 0 , 0 , 32,
16844 0xfc0003ff, 0x20000088, 0 , 0,
16845 0x0 }, /* _POOL32A0~*(17) */
16846 { instruction
, 0 , 0 , 32,
16847 0xfc0003ff, 0x20000090, &SRAV
, 0,
16849 { instruction
, 0 , 0 , 32,
16850 0xfc0003ff, 0x20000098, &MULU
, 0,
16852 { reserved_block
, 0 , 0 , 32,
16853 0xfc0003ff, 0x200000a0, 0 , 0,
16854 0x0 }, /* _POOL32A0~*(20) */
16855 { reserved_block
, 0 , 0 , 32,
16856 0xfc0003ff, 0x200000a8, 0 , 0,
16857 0x0 }, /* _POOL32A0~*(21) */
16858 { instruction
, 0 , 0 , 32,
16859 0xfc0003ff, 0x200000b0, &MFGC0
, 0,
16860 CP0_
| VZ_
}, /* MFGC0 */
16861 { instruction
, 0 , 0 , 32,
16862 0xfc0003ff, 0x200000b8, &MFHGC0
, 0,
16863 CP0_
| VZ_
| MVH_
}, /* MFHGC0 */
16864 { reserved_block
, 0 , 0 , 32,
16865 0xfc0003ff, 0x200000c0, 0 , 0,
16866 0x0 }, /* _POOL32A0~*(24) */
16867 { reserved_block
, 0 , 0 , 32,
16868 0xfc0003ff, 0x200000c8, 0 , 0,
16869 0x0 }, /* _POOL32A0~*(25) */
16870 { instruction
, 0 , 0 , 32,
16871 0xfc0003ff, 0x200000d0, &ROTRV
, 0,
16873 { instruction
, 0 , 0 , 32,
16874 0xfc0003ff, 0x200000d8, &MUHU
, 0,
16876 { reserved_block
, 0 , 0 , 32,
16877 0xfc0003ff, 0x200000e0, 0 , 0,
16878 0x0 }, /* _POOL32A0~*(28) */
16879 { reserved_block
, 0 , 0 , 32,
16880 0xfc0003ff, 0x200000e8, 0 , 0,
16881 0x0 }, /* _POOL32A0~*(29) */
16882 { instruction
, 0 , 0 , 32,
16883 0xfc0003ff, 0x200000f0, &MTGC0
, 0,
16884 CP0_
| VZ_
}, /* MTGC0 */
16885 { instruction
, 0 , 0 , 32,
16886 0xfc0003ff, 0x200000f8, &MTHGC0
, 0,
16887 CP0_
| VZ_
| MVH_
}, /* MTHGC0 */
16888 { reserved_block
, 0 , 0 , 32,
16889 0xfc0003ff, 0x20000100, 0 , 0,
16890 0x0 }, /* _POOL32A0~*(32) */
16891 { reserved_block
, 0 , 0 , 32,
16892 0xfc0003ff, 0x20000108, 0 , 0,
16893 0x0 }, /* _POOL32A0~*(33) */
16894 { instruction
, 0 , 0 , 32,
16895 0xfc0003ff, 0x20000110, &ADD
, 0,
16897 { instruction
, 0 , 0 , 32,
16898 0xfc0003ff, 0x20000118, &DIV
, 0,
16900 { reserved_block
, 0 , 0 , 32,
16901 0xfc0003ff, 0x20000120, 0 , 0,
16902 0x0 }, /* _POOL32A0~*(36) */
16903 { reserved_block
, 0 , 0 , 32,
16904 0xfc0003ff, 0x20000128, 0 , 0,
16905 0x0 }, /* _POOL32A0~*(37) */
16906 { instruction
, 0 , 0 , 32,
16907 0xfc0003ff, 0x20000130, &DMFC0
, 0,
16908 CP0_
| MIPS64_
}, /* DMFC0 */
16909 { reserved_block
, 0 , 0 , 32,
16910 0xfc0003ff, 0x20000138, 0 , 0,
16911 0x0 }, /* _POOL32A0~*(39) */
16912 { reserved_block
, 0 , 0 , 32,
16913 0xfc0003ff, 0x20000140, 0 , 0,
16914 0x0 }, /* _POOL32A0~*(40) */
16915 { reserved_block
, 0 , 0 , 32,
16916 0xfc0003ff, 0x20000148, 0 , 0,
16917 0x0 }, /* _POOL32A0~*(41) */
16918 { instruction
, 0 , 0 , 32,
16919 0xfc0003ff, 0x20000150, &ADDU_32_
, 0,
16920 0x0 }, /* ADDU[32] */
16921 { instruction
, 0 , 0 , 32,
16922 0xfc0003ff, 0x20000158, &MOD
, 0,
16924 { reserved_block
, 0 , 0 , 32,
16925 0xfc0003ff, 0x20000160, 0 , 0,
16926 0x0 }, /* _POOL32A0~*(44) */
16927 { reserved_block
, 0 , 0 , 32,
16928 0xfc0003ff, 0x20000168, 0 , 0,
16929 0x0 }, /* _POOL32A0~*(45) */
16930 { instruction
, 0 , 0 , 32,
16931 0xfc0003ff, 0x20000170, &DMTC0
, 0,
16932 CP0_
| MIPS64_
}, /* DMTC0 */
16933 { reserved_block
, 0 , 0 , 32,
16934 0xfc0003ff, 0x20000178, 0 , 0,
16935 0x0 }, /* _POOL32A0~*(47) */
16936 { reserved_block
, 0 , 0 , 32,
16937 0xfc0003ff, 0x20000180, 0 , 0,
16938 0x0 }, /* _POOL32A0~*(48) */
16939 { reserved_block
, 0 , 0 , 32,
16940 0xfc0003ff, 0x20000188, 0 , 0,
16941 0x0 }, /* _POOL32A0~*(49) */
16942 { instruction
, 0 , 0 , 32,
16943 0xfc0003ff, 0x20000190, &SUB
, 0,
16945 { instruction
, 0 , 0 , 32,
16946 0xfc0003ff, 0x20000198, &DIVU
, 0,
16948 { reserved_block
, 0 , 0 , 32,
16949 0xfc0003ff, 0x200001a0, 0 , 0,
16950 0x0 }, /* _POOL32A0~*(52) */
16951 { reserved_block
, 0 , 0 , 32,
16952 0xfc0003ff, 0x200001a8, 0 , 0,
16953 0x0 }, /* _POOL32A0~*(53) */
16954 { instruction
, 0 , 0 , 32,
16955 0xfc0003ff, 0x200001b0, &DMFGC0
, 0,
16956 CP0_
| MIPS64_
| VZ_
}, /* DMFGC0 */
16957 { reserved_block
, 0 , 0 , 32,
16958 0xfc0003ff, 0x200001b8, 0 , 0,
16959 0x0 }, /* _POOL32A0~*(55) */
16960 { instruction
, 0 , 0 , 32,
16961 0xfc0003ff, 0x200001c0, &RDHWR
, 0,
16962 XMMS_
}, /* RDHWR */
16963 { reserved_block
, 0 , 0 , 32,
16964 0xfc0003ff, 0x200001c8, 0 , 0,
16965 0x0 }, /* _POOL32A0~*(57) */
16966 { instruction
, 0 , 0 , 32,
16967 0xfc0003ff, 0x200001d0, &SUBU_32_
, 0,
16968 0x0 }, /* SUBU[32] */
16969 { instruction
, 0 , 0 , 32,
16970 0xfc0003ff, 0x200001d8, &MODU
, 0,
16972 { reserved_block
, 0 , 0 , 32,
16973 0xfc0003ff, 0x200001e0, 0 , 0,
16974 0x0 }, /* _POOL32A0~*(60) */
16975 { reserved_block
, 0 , 0 , 32,
16976 0xfc0003ff, 0x200001e8, 0 , 0,
16977 0x0 }, /* _POOL32A0~*(61) */
16978 { instruction
, 0 , 0 , 32,
16979 0xfc0003ff, 0x200001f0, &DMTGC0
, 0,
16980 CP0_
| MIPS64_
| VZ_
}, /* DMTGC0 */
16981 { reserved_block
, 0 , 0 , 32,
16982 0xfc0003ff, 0x200001f8, 0 , 0,
16983 0x0 }, /* _POOL32A0~*(63) */
16984 { reserved_block
, 0 , 0 , 32,
16985 0xfc0003ff, 0x20000200, 0 , 0,
16986 0x0 }, /* _POOL32A0~*(64) */
16987 { reserved_block
, 0 , 0 , 32,
16988 0xfc0003ff, 0x20000208, 0 , 0,
16989 0x0 }, /* _POOL32A0~*(65) */
16990 { pool
, P_CMOVE
, 2 , 32,
16991 0xfc0003ff, 0x20000210, 0 , 0,
16992 0x0 }, /* P.CMOVE */
16993 { reserved_block
, 0 , 0 , 32,
16994 0xfc0003ff, 0x20000218, 0 , 0,
16995 0x0 }, /* _POOL32A0~*(67) */
16996 { reserved_block
, 0 , 0 , 32,
16997 0xfc0003ff, 0x20000220, 0 , 0,
16998 0x0 }, /* _POOL32A0~*(68) */
16999 { instruction
, 0 , 0 , 32,
17000 0xfc0003ff, 0x20000228, &FORK
, 0,
17002 { instruction
, 0 , 0 , 32,
17003 0xfc0003ff, 0x20000230, &MFTR
, 0,
17005 { instruction
, 0 , 0 , 32,
17006 0xfc0003ff, 0x20000238, &MFHTR
, 0,
17008 { reserved_block
, 0 , 0 , 32,
17009 0xfc0003ff, 0x20000240, 0 , 0,
17010 0x0 }, /* _POOL32A0~*(72) */
17011 { reserved_block
, 0 , 0 , 32,
17012 0xfc0003ff, 0x20000248, 0 , 0,
17013 0x0 }, /* _POOL32A0~*(73) */
17014 { instruction
, 0 , 0 , 32,
17015 0xfc0003ff, 0x20000250, &AND_32_
, 0,
17016 0x0 }, /* AND[32] */
17017 { reserved_block
, 0 , 0 , 32,
17018 0xfc0003ff, 0x20000258, 0 , 0,
17019 0x0 }, /* _POOL32A0~*(75) */
17020 { reserved_block
, 0 , 0 , 32,
17021 0xfc0003ff, 0x20000260, 0 , 0,
17022 0x0 }, /* _POOL32A0~*(76) */
17023 { instruction
, 0 , 0 , 32,
17024 0xfc0003ff, 0x20000268, &YIELD
, 0,
17026 { instruction
, 0 , 0 , 32,
17027 0xfc0003ff, 0x20000270, &MTTR
, 0,
17029 { instruction
, 0 , 0 , 32,
17030 0xfc0003ff, 0x20000278, &MTHTR
, 0,
17032 { reserved_block
, 0 , 0 , 32,
17033 0xfc0003ff, 0x20000280, 0 , 0,
17034 0x0 }, /* _POOL32A0~*(80) */
17035 { reserved_block
, 0 , 0 , 32,
17036 0xfc0003ff, 0x20000288, 0 , 0,
17037 0x0 }, /* _POOL32A0~*(81) */
17038 { instruction
, 0 , 0 , 32,
17039 0xfc0003ff, 0x20000290, &OR_32_
, 0,
17040 0x0 }, /* OR[32] */
17041 { reserved_block
, 0 , 0 , 32,
17042 0xfc0003ff, 0x20000298, 0 , 0,
17043 0x0 }, /* _POOL32A0~*(83) */
17044 { reserved_block
, 0 , 0 , 32,
17045 0xfc0003ff, 0x200002a0, 0 , 0,
17046 0x0 }, /* _POOL32A0~*(84) */
17047 { reserved_block
, 0 , 0 , 32,
17048 0xfc0003ff, 0x200002a8, 0 , 0,
17049 0x0 }, /* _POOL32A0~*(85) */
17050 { pool
, P_MT_VPE
, 8 , 32,
17051 0xfc0003ff, 0x200002b0, 0 , 0,
17052 0x0 }, /* P.MT_VPE */
17053 { reserved_block
, 0 , 0 , 32,
17054 0xfc0003ff, 0x200002b8, 0 , 0,
17055 0x0 }, /* _POOL32A0~*(87) */
17056 { reserved_block
, 0 , 0 , 32,
17057 0xfc0003ff, 0x200002c0, 0 , 0,
17058 0x0 }, /* _POOL32A0~*(88) */
17059 { reserved_block
, 0 , 0 , 32,
17060 0xfc0003ff, 0x200002c8, 0 , 0,
17061 0x0 }, /* _POOL32A0~*(89) */
17062 { instruction
, 0 , 0 , 32,
17063 0xfc0003ff, 0x200002d0, &NOR
, 0,
17065 { reserved_block
, 0 , 0 , 32,
17066 0xfc0003ff, 0x200002d8, 0 , 0,
17067 0x0 }, /* _POOL32A0~*(91) */
17068 { reserved_block
, 0 , 0 , 32,
17069 0xfc0003ff, 0x200002e0, 0 , 0,
17070 0x0 }, /* _POOL32A0~*(92) */
17071 { reserved_block
, 0 , 0 , 32,
17072 0xfc0003ff, 0x200002e8, 0 , 0,
17073 0x0 }, /* _POOL32A0~*(93) */
17074 { reserved_block
, 0 , 0 , 32,
17075 0xfc0003ff, 0x200002f0, 0 , 0,
17076 0x0 }, /* _POOL32A0~*(94) */
17077 { reserved_block
, 0 , 0 , 32,
17078 0xfc0003ff, 0x200002f8, 0 , 0,
17079 0x0 }, /* _POOL32A0~*(95) */
17080 { reserved_block
, 0 , 0 , 32,
17081 0xfc0003ff, 0x20000300, 0 , 0,
17082 0x0 }, /* _POOL32A0~*(96) */
17083 { reserved_block
, 0 , 0 , 32,
17084 0xfc0003ff, 0x20000308, 0 , 0,
17085 0x0 }, /* _POOL32A0~*(97) */
17086 { instruction
, 0 , 0 , 32,
17087 0xfc0003ff, 0x20000310, &XOR_32_
, 0,
17088 0x0 }, /* XOR[32] */
17089 { reserved_block
, 0 , 0 , 32,
17090 0xfc0003ff, 0x20000318, 0 , 0,
17091 0x0 }, /* _POOL32A0~*(99) */
17092 { reserved_block
, 0 , 0 , 32,
17093 0xfc0003ff, 0x20000320, 0 , 0,
17094 0x0 }, /* _POOL32A0~*(100) */
17095 { reserved_block
, 0 , 0 , 32,
17096 0xfc0003ff, 0x20000328, 0 , 0,
17097 0x0 }, /* _POOL32A0~*(101) */
17098 { reserved_block
, 0 , 0 , 32,
17099 0xfc0003ff, 0x20000330, 0 , 0,
17100 0x0 }, /* _POOL32A0~*(102) */
17101 { reserved_block
, 0 , 0 , 32,
17102 0xfc0003ff, 0x20000338, 0 , 0,
17103 0x0 }, /* _POOL32A0~*(103) */
17104 { reserved_block
, 0 , 0 , 32,
17105 0xfc0003ff, 0x20000340, 0 , 0,
17106 0x0 }, /* _POOL32A0~*(104) */
17107 { reserved_block
, 0 , 0 , 32,
17108 0xfc0003ff, 0x20000348, 0 , 0,
17109 0x0 }, /* _POOL32A0~*(105) */
17110 { instruction
, 0 , 0 , 32,
17111 0xfc0003ff, 0x20000350, &SLT
, 0,
17113 { reserved_block
, 0 , 0 , 32,
17114 0xfc0003ff, 0x20000358, 0 , 0,
17115 0x0 }, /* _POOL32A0~*(107) */
17116 { reserved_block
, 0 , 0 , 32,
17117 0xfc0003ff, 0x20000360, 0 , 0,
17118 0x0 }, /* _POOL32A0~*(108) */
17119 { reserved_block
, 0 , 0 , 32,
17120 0xfc0003ff, 0x20000368, 0 , 0,
17121 0x0 }, /* _POOL32A0~*(109) */
17122 { reserved_block
, 0 , 0 , 32,
17123 0xfc0003ff, 0x20000370, 0 , 0,
17124 0x0 }, /* _POOL32A0~*(110) */
17125 { reserved_block
, 0 , 0 , 32,
17126 0xfc0003ff, 0x20000378, 0 , 0,
17127 0x0 }, /* _POOL32A0~*(111) */
17128 { reserved_block
, 0 , 0 , 32,
17129 0xfc0003ff, 0x20000380, 0 , 0,
17130 0x0 }, /* _POOL32A0~*(112) */
17131 { reserved_block
, 0 , 0 , 32,
17132 0xfc0003ff, 0x20000388, 0 , 0,
17133 0x0 }, /* _POOL32A0~*(113) */
17134 { pool
, P_SLTU
, 2 , 32,
17135 0xfc0003ff, 0x20000390, 0 , 0,
17136 0x0 }, /* P.SLTU */
17137 { reserved_block
, 0 , 0 , 32,
17138 0xfc0003ff, 0x20000398, 0 , 0,
17139 0x0 }, /* _POOL32A0~*(115) */
17140 { reserved_block
, 0 , 0 , 32,
17141 0xfc0003ff, 0x200003a0, 0 , 0,
17142 0x0 }, /* _POOL32A0~*(116) */
17143 { reserved_block
, 0 , 0 , 32,
17144 0xfc0003ff, 0x200003a8, 0 , 0,
17145 0x0 }, /* _POOL32A0~*(117) */
17146 { reserved_block
, 0 , 0 , 32,
17147 0xfc0003ff, 0x200003b0, 0 , 0,
17148 0x0 }, /* _POOL32A0~*(118) */
17149 { reserved_block
, 0 , 0 , 32,
17150 0xfc0003ff, 0x200003b8, 0 , 0,
17151 0x0 }, /* _POOL32A0~*(119) */
17152 { reserved_block
, 0 , 0 , 32,
17153 0xfc0003ff, 0x200003c0, 0 , 0,
17154 0x0 }, /* _POOL32A0~*(120) */
17155 { reserved_block
, 0 , 0 , 32,
17156 0xfc0003ff, 0x200003c8, 0 , 0,
17157 0x0 }, /* _POOL32A0~*(121) */
17158 { instruction
, 0 , 0 , 32,
17159 0xfc0003ff, 0x200003d0, &SOV
, 0,
17161 { reserved_block
, 0 , 0 , 32,
17162 0xfc0003ff, 0x200003d8, 0 , 0,
17163 0x0 }, /* _POOL32A0~*(123) */
17164 { reserved_block
, 0 , 0 , 32,
17165 0xfc0003ff, 0x200003e0, 0 , 0,
17166 0x0 }, /* _POOL32A0~*(124) */
17167 { reserved_block
, 0 , 0 , 32,
17168 0xfc0003ff, 0x200003e8, 0 , 0,
17169 0x0 }, /* _POOL32A0~*(125) */
17170 { reserved_block
, 0 , 0 , 32,
17171 0xfc0003ff, 0x200003f0, 0 , 0,
17172 0x0 }, /* _POOL32A0~*(126) */
17173 { reserved_block
, 0 , 0 , 32,
17174 0xfc0003ff, 0x200003f8, 0 , 0,
17175 0x0 }, /* _POOL32A0~*(127) */
17179 static const Pool ADDQ__S__PH
[2] = {
17180 { instruction
, 0 , 0 , 32,
17181 0xfc0007ff, 0x2000000d, &ADDQ_PH
, 0,
17182 DSP_
}, /* ADDQ.PH */
17183 { instruction
, 0 , 0 , 32,
17184 0xfc0007ff, 0x2000040d, &ADDQ_S_PH
, 0,
17185 DSP_
}, /* ADDQ_S.PH */
17189 static const Pool MUL__S__PH
[2] = {
17190 { instruction
, 0 , 0 , 32,
17191 0xfc0007ff, 0x2000002d, &MUL_PH
, 0,
17192 DSP_
}, /* MUL.PH */
17193 { instruction
, 0 , 0 , 32,
17194 0xfc0007ff, 0x2000042d, &MUL_S_PH
, 0,
17195 DSP_
}, /* MUL_S.PH */
17199 static const Pool ADDQH__R__PH
[2] = {
17200 { instruction
, 0 , 0 , 32,
17201 0xfc0007ff, 0x2000004d, &ADDQH_PH
, 0,
17202 DSP_
}, /* ADDQH.PH */
17203 { instruction
, 0 , 0 , 32,
17204 0xfc0007ff, 0x2000044d, &ADDQH_R_PH
, 0,
17205 DSP_
}, /* ADDQH_R.PH */
17209 static const Pool ADDQH__R__W
[2] = {
17210 { instruction
, 0 , 0 , 32,
17211 0xfc0007ff, 0x2000008d, &ADDQH_W
, 0,
17212 DSP_
}, /* ADDQH.W */
17213 { instruction
, 0 , 0 , 32,
17214 0xfc0007ff, 0x2000048d, &ADDQH_R_W
, 0,
17215 DSP_
}, /* ADDQH_R.W */
17219 static const Pool ADDU__S__QB
[2] = {
17220 { instruction
, 0 , 0 , 32,
17221 0xfc0007ff, 0x200000cd, &ADDU_QB
, 0,
17222 DSP_
}, /* ADDU.QB */
17223 { instruction
, 0 , 0 , 32,
17224 0xfc0007ff, 0x200004cd, &ADDU_S_QB
, 0,
17225 DSP_
}, /* ADDU_S.QB */
17229 static const Pool ADDU__S__PH
[2] = {
17230 { instruction
, 0 , 0 , 32,
17231 0xfc0007ff, 0x2000010d, &ADDU_PH
, 0,
17232 DSP_
}, /* ADDU.PH */
17233 { instruction
, 0 , 0 , 32,
17234 0xfc0007ff, 0x2000050d, &ADDU_S_PH
, 0,
17235 DSP_
}, /* ADDU_S.PH */
17239 static const Pool ADDUH__R__QB
[2] = {
17240 { instruction
, 0 , 0 , 32,
17241 0xfc0007ff, 0x2000014d, &ADDUH_QB
, 0,
17242 DSP_
}, /* ADDUH.QB */
17243 { instruction
, 0 , 0 , 32,
17244 0xfc0007ff, 0x2000054d, &ADDUH_R_QB
, 0,
17245 DSP_
}, /* ADDUH_R.QB */
17249 static const Pool SHRAV__R__PH
[2] = {
17250 { instruction
, 0 , 0 , 32,
17251 0xfc0007ff, 0x2000018d, &SHRAV_PH
, 0,
17252 DSP_
}, /* SHRAV.PH */
17253 { instruction
, 0 , 0 , 32,
17254 0xfc0007ff, 0x2000058d, &SHRAV_R_PH
, 0,
17255 DSP_
}, /* SHRAV_R.PH */
17259 static const Pool SHRAV__R__QB
[2] = {
17260 { instruction
, 0 , 0 , 32,
17261 0xfc0007ff, 0x200001cd, &SHRAV_QB
, 0,
17262 DSP_
}, /* SHRAV.QB */
17263 { instruction
, 0 , 0 , 32,
17264 0xfc0007ff, 0x200005cd, &SHRAV_R_QB
, 0,
17265 DSP_
}, /* SHRAV_R.QB */
17269 static const Pool SUBQ__S__PH
[2] = {
17270 { instruction
, 0 , 0 , 32,
17271 0xfc0007ff, 0x2000020d, &SUBQ_PH
, 0,
17272 DSP_
}, /* SUBQ.PH */
17273 { instruction
, 0 , 0 , 32,
17274 0xfc0007ff, 0x2000060d, &SUBQ_S_PH
, 0,
17275 DSP_
}, /* SUBQ_S.PH */
17279 static const Pool SUBQH__R__PH
[2] = {
17280 { instruction
, 0 , 0 , 32,
17281 0xfc0007ff, 0x2000024d, &SUBQH_PH
, 0,
17282 DSP_
}, /* SUBQH.PH */
17283 { instruction
, 0 , 0 , 32,
17284 0xfc0007ff, 0x2000064d, &SUBQH_R_PH
, 0,
17285 DSP_
}, /* SUBQH_R.PH */
17289 static const Pool SUBQH__R__W
[2] = {
17290 { instruction
, 0 , 0 , 32,
17291 0xfc0007ff, 0x2000028d, &SUBQH_W
, 0,
17292 DSP_
}, /* SUBQH.W */
17293 { instruction
, 0 , 0 , 32,
17294 0xfc0007ff, 0x2000068d, &SUBQH_R_W
, 0,
17295 DSP_
}, /* SUBQH_R.W */
17299 static const Pool SUBU__S__QB
[2] = {
17300 { instruction
, 0 , 0 , 32,
17301 0xfc0007ff, 0x200002cd, &SUBU_QB
, 0,
17302 DSP_
}, /* SUBU.QB */
17303 { instruction
, 0 , 0 , 32,
17304 0xfc0007ff, 0x200006cd, &SUBU_S_QB
, 0,
17305 DSP_
}, /* SUBU_S.QB */
17309 static const Pool SUBU__S__PH
[2] = {
17310 { instruction
, 0 , 0 , 32,
17311 0xfc0007ff, 0x2000030d, &SUBU_PH
, 0,
17312 DSP_
}, /* SUBU.PH */
17313 { instruction
, 0 , 0 , 32,
17314 0xfc0007ff, 0x2000070d, &SUBU_S_PH
, 0,
17315 DSP_
}, /* SUBU_S.PH */
17319 static const Pool SHRA__R__PH
[2] = {
17320 { instruction
, 0 , 0 , 32,
17321 0xfc0007ff, 0x20000335, &SHRA_PH
, 0,
17322 DSP_
}, /* SHRA.PH */
17323 { instruction
, 0 , 0 , 32,
17324 0xfc0007ff, 0x20000735, &SHRA_R_PH
, 0,
17325 DSP_
}, /* SHRA_R.PH */
17329 static const Pool SUBUH__R__QB
[2] = {
17330 { instruction
, 0 , 0 , 32,
17331 0xfc0007ff, 0x2000034d, &SUBUH_QB
, 0,
17332 DSP_
}, /* SUBUH.QB */
17333 { instruction
, 0 , 0 , 32,
17334 0xfc0007ff, 0x2000074d, &SUBUH_R_QB
, 0,
17335 DSP_
}, /* SUBUH_R.QB */
17339 static const Pool SHLLV__S__PH
[2] = {
17340 { instruction
, 0 , 0 , 32,
17341 0xfc0007ff, 0x2000038d, &SHLLV_PH
, 0,
17342 DSP_
}, /* SHLLV.PH */
17343 { instruction
, 0 , 0 , 32,
17344 0xfc0007ff, 0x2000078d, &SHLLV_S_PH
, 0,
17345 DSP_
}, /* SHLLV_S.PH */
17349 static const Pool SHLL__S__PH
[4] = {
17350 { instruction
, 0 , 0 , 32,
17351 0xfc000fff, 0x200003b5, &SHLL_PH
, 0,
17352 DSP_
}, /* SHLL.PH */
17353 { reserved_block
, 0 , 0 , 32,
17354 0xfc000fff, 0x200007b5, 0 , 0,
17355 0x0 }, /* SHLL[_S].PH~*(1) */
17356 { instruction
, 0 , 0 , 32,
17357 0xfc000fff, 0x20000bb5, &SHLL_S_PH
, 0,
17358 DSP_
}, /* SHLL_S.PH */
17359 { reserved_block
, 0 , 0 , 32,
17360 0xfc000fff, 0x20000fb5, 0 , 0,
17361 0x0 }, /* SHLL[_S].PH~*(3) */
17365 static const Pool PRECR_SRA__R__PH_W
[2] = {
17366 { instruction
, 0 , 0 , 32,
17367 0xfc0007ff, 0x200003cd, &PRECR_SRA_PH_W
, 0,
17368 DSP_
}, /* PRECR_SRA.PH.W */
17369 { instruction
, 0 , 0 , 32,
17370 0xfc0007ff, 0x200007cd, &PRECR_SRA_R_PH_W
, 0,
17371 DSP_
}, /* PRECR_SRA_R.PH.W */
17375 static const Pool _POOL32A5
[128] = {
17376 { instruction
, 0 , 0 , 32,
17377 0xfc0003ff, 0x20000005, &CMP_EQ_PH
, 0,
17378 DSP_
}, /* CMP.EQ.PH */
17379 { pool
, ADDQ__S__PH
, 2 , 32,
17380 0xfc0003ff, 0x2000000d, 0 , 0,
17381 0x0 }, /* ADDQ[_S].PH */
17382 { reserved_block
, 0 , 0 , 32,
17383 0xfc0003ff, 0x20000015, 0 , 0,
17384 0x0 }, /* _POOL32A5~*(2) */
17385 { instruction
, 0 , 0 , 32,
17386 0xfc0003ff, 0x2000001d, &SHILO
, 0,
17387 DSP_
}, /* SHILO */
17388 { instruction
, 0 , 0 , 32,
17389 0xfc0003ff, 0x20000025, &MULEQ_S_W_PHL
, 0,
17390 DSP_
}, /* MULEQ_S.W.PHL */
17391 { pool
, MUL__S__PH
, 2 , 32,
17392 0xfc0003ff, 0x2000002d, 0 , 0,
17393 0x0 }, /* MUL[_S].PH */
17394 { reserved_block
, 0 , 0 , 32,
17395 0xfc0003ff, 0x20000035, 0 , 0,
17396 0x0 }, /* _POOL32A5~*(6) */
17397 { instruction
, 0 , 0 , 32,
17398 0xfc0003ff, 0x2000003d, &REPL_PH
, 0,
17399 DSP_
}, /* REPL.PH */
17400 { instruction
, 0 , 0 , 32,
17401 0xfc0003ff, 0x20000045, &CMP_LT_PH
, 0,
17402 DSP_
}, /* CMP.LT.PH */
17403 { pool
, ADDQH__R__PH
, 2 , 32,
17404 0xfc0003ff, 0x2000004d, 0 , 0,
17405 0x0 }, /* ADDQH[_R].PH */
17406 { reserved_block
, 0 , 0 , 32,
17407 0xfc0003ff, 0x20000055, 0 , 0,
17408 0x0 }, /* _POOL32A5~*(10) */
17409 { reserved_block
, 0 , 0 , 32,
17410 0xfc0003ff, 0x2000005d, 0 , 0,
17411 0x0 }, /* _POOL32A5~*(11) */
17412 { instruction
, 0 , 0 , 32,
17413 0xfc0003ff, 0x20000065, &MULEQ_S_W_PHR
, 0,
17414 DSP_
}, /* MULEQ_S.W.PHR */
17415 { instruction
, 0 , 0 , 32,
17416 0xfc0003ff, 0x2000006d, &PRECR_QB_PH
, 0,
17417 DSP_
}, /* PRECR.QB.PH */
17418 { reserved_block
, 0 , 0 , 32,
17419 0xfc0003ff, 0x20000075, 0 , 0,
17420 0x0 }, /* _POOL32A5~*(14) */
17421 { reserved_block
, 0 , 0 , 32,
17422 0xfc0003ff, 0x2000007d, 0 , 0,
17423 0x0 }, /* _POOL32A5~*(15) */
17424 { instruction
, 0 , 0 , 32,
17425 0xfc0003ff, 0x20000085, &CMP_LE_PH
, 0,
17426 DSP_
}, /* CMP.LE.PH */
17427 { pool
, ADDQH__R__W
, 2 , 32,
17428 0xfc0003ff, 0x2000008d, 0 , 0,
17429 0x0 }, /* ADDQH[_R].W */
17430 { instruction
, 0 , 0 , 32,
17431 0xfc0003ff, 0x20000095, &MULEU_S_PH_QBL
, 0,
17432 DSP_
}, /* MULEU_S.PH.QBL */
17433 { reserved_block
, 0 , 0 , 32,
17434 0xfc0003ff, 0x2000009d, 0 , 0,
17435 0x0 }, /* _POOL32A5~*(19) */
17436 { reserved_block
, 0 , 0 , 32,
17437 0xfc0003ff, 0x200000a5, 0 , 0,
17438 0x0 }, /* _POOL32A5~*(20) */
17439 { instruction
, 0 , 0 , 32,
17440 0xfc0003ff, 0x200000ad, &PRECRQ_QB_PH
, 0,
17441 DSP_
}, /* PRECRQ.QB.PH */
17442 { reserved_block
, 0 , 0 , 32,
17443 0xfc0003ff, 0x200000b5, 0 , 0,
17444 0x0 }, /* _POOL32A5~*(22) */
17445 { reserved_block
, 0 , 0 , 32,
17446 0xfc0003ff, 0x200000bd, 0 , 0,
17447 0x0 }, /* _POOL32A5~*(23) */
17448 { instruction
, 0 , 0 , 32,
17449 0xfc0003ff, 0x200000c5, &CMPGU_EQ_QB
, 0,
17450 DSP_
}, /* CMPGU.EQ.QB */
17451 { pool
, ADDU__S__QB
, 2 , 32,
17452 0xfc0003ff, 0x200000cd, 0 , 0,
17453 0x0 }, /* ADDU[_S].QB */
17454 { instruction
, 0 , 0 , 32,
17455 0xfc0003ff, 0x200000d5, &MULEU_S_PH_QBR
, 0,
17456 DSP_
}, /* MULEU_S.PH.QBR */
17457 { reserved_block
, 0 , 0 , 32,
17458 0xfc0003ff, 0x200000dd, 0 , 0,
17459 0x0 }, /* _POOL32A5~*(27) */
17460 { reserved_block
, 0 , 0 , 32,
17461 0xfc0003ff, 0x200000e5, 0 , 0,
17462 0x0 }, /* _POOL32A5~*(28) */
17463 { instruction
, 0 , 0 , 32,
17464 0xfc0003ff, 0x200000ed, &PRECRQ_PH_W
, 0,
17465 DSP_
}, /* PRECRQ.PH.W */
17466 { reserved_block
, 0 , 0 , 32,
17467 0xfc0003ff, 0x200000f5, 0 , 0,
17468 0x0 }, /* _POOL32A5~*(30) */
17469 { reserved_block
, 0 , 0 , 32,
17470 0xfc0003ff, 0x200000fd, 0 , 0,
17471 0x0 }, /* _POOL32A5~*(31) */
17472 { instruction
, 0 , 0 , 32,
17473 0xfc0003ff, 0x20000105, &CMPGU_LT_QB
, 0,
17474 DSP_
}, /* CMPGU.LT.QB */
17475 { pool
, ADDU__S__PH
, 2 , 32,
17476 0xfc0003ff, 0x2000010d, 0 , 0,
17477 0x0 }, /* ADDU[_S].PH */
17478 { instruction
, 0 , 0 , 32,
17479 0xfc0003ff, 0x20000115, &MULQ_RS_PH
, 0,
17480 DSP_
}, /* MULQ_RS.PH */
17481 { reserved_block
, 0 , 0 , 32,
17482 0xfc0003ff, 0x2000011d, 0 , 0,
17483 0x0 }, /* _POOL32A5~*(35) */
17484 { reserved_block
, 0 , 0 , 32,
17485 0xfc0003ff, 0x20000125, 0 , 0,
17486 0x0 }, /* _POOL32A5~*(36) */
17487 { instruction
, 0 , 0 , 32,
17488 0xfc0003ff, 0x2000012d, &PRECRQ_RS_PH_W
, 0,
17489 DSP_
}, /* PRECRQ_RS.PH.W */
17490 { reserved_block
, 0 , 0 , 32,
17491 0xfc0003ff, 0x20000135, 0 , 0,
17492 0x0 }, /* _POOL32A5~*(38) */
17493 { reserved_block
, 0 , 0 , 32,
17494 0xfc0003ff, 0x2000013d, 0 , 0,
17495 0x0 }, /* _POOL32A5~*(39) */
17496 { instruction
, 0 , 0 , 32,
17497 0xfc0003ff, 0x20000145, &CMPGU_LE_QB
, 0,
17498 DSP_
}, /* CMPGU.LE.QB */
17499 { pool
, ADDUH__R__QB
, 2 , 32,
17500 0xfc0003ff, 0x2000014d, 0 , 0,
17501 0x0 }, /* ADDUH[_R].QB */
17502 { instruction
, 0 , 0 , 32,
17503 0xfc0003ff, 0x20000155, &MULQ_S_PH
, 0,
17504 DSP_
}, /* MULQ_S.PH */
17505 { reserved_block
, 0 , 0 , 32,
17506 0xfc0003ff, 0x2000015d, 0 , 0,
17507 0x0 }, /* _POOL32A5~*(43) */
17508 { reserved_block
, 0 , 0 , 32,
17509 0xfc0003ff, 0x20000165, 0 , 0,
17510 0x0 }, /* _POOL32A5~*(44) */
17511 { instruction
, 0 , 0 , 32,
17512 0xfc0003ff, 0x2000016d, &PRECRQU_S_QB_PH
, 0,
17513 DSP_
}, /* PRECRQU_S.QB.PH */
17514 { reserved_block
, 0 , 0 , 32,
17515 0xfc0003ff, 0x20000175, 0 , 0,
17516 0x0 }, /* _POOL32A5~*(46) */
17517 { reserved_block
, 0 , 0 , 32,
17518 0xfc0003ff, 0x2000017d, 0 , 0,
17519 0x0 }, /* _POOL32A5~*(47) */
17520 { instruction
, 0 , 0 , 32,
17521 0xfc0003ff, 0x20000185, &CMPGDU_EQ_QB
, 0,
17522 DSP_
}, /* CMPGDU.EQ.QB */
17523 { pool
, SHRAV__R__PH
, 2 , 32,
17524 0xfc0003ff, 0x2000018d, 0 , 0,
17525 0x0 }, /* SHRAV[_R].PH */
17526 { instruction
, 0 , 0 , 32,
17527 0xfc0003ff, 0x20000195, &MULQ_RS_W
, 0,
17528 DSP_
}, /* MULQ_RS.W */
17529 { reserved_block
, 0 , 0 , 32,
17530 0xfc0003ff, 0x2000019d, 0 , 0,
17531 0x0 }, /* _POOL32A5~*(51) */
17532 { reserved_block
, 0 , 0 , 32,
17533 0xfc0003ff, 0x200001a5, 0 , 0,
17534 0x0 }, /* _POOL32A5~*(52) */
17535 { instruction
, 0 , 0 , 32,
17536 0xfc0003ff, 0x200001ad, &PACKRL_PH
, 0,
17537 DSP_
}, /* PACKRL.PH */
17538 { reserved_block
, 0 , 0 , 32,
17539 0xfc0003ff, 0x200001b5, 0 , 0,
17540 0x0 }, /* _POOL32A5~*(54) */
17541 { reserved_block
, 0 , 0 , 32,
17542 0xfc0003ff, 0x200001bd, 0 , 0,
17543 0x0 }, /* _POOL32A5~*(55) */
17544 { instruction
, 0 , 0 , 32,
17545 0xfc0003ff, 0x200001c5, &CMPGDU_LT_QB
, 0,
17546 DSP_
}, /* CMPGDU.LT.QB */
17547 { pool
, SHRAV__R__QB
, 2 , 32,
17548 0xfc0003ff, 0x200001cd, 0 , 0,
17549 0x0 }, /* SHRAV[_R].QB */
17550 { instruction
, 0 , 0 , 32,
17551 0xfc0003ff, 0x200001d5, &MULQ_S_W
, 0,
17552 DSP_
}, /* MULQ_S.W */
17553 { reserved_block
, 0 , 0 , 32,
17554 0xfc0003ff, 0x200001dd, 0 , 0,
17555 0x0 }, /* _POOL32A5~*(59) */
17556 { reserved_block
, 0 , 0 , 32,
17557 0xfc0003ff, 0x200001e5, 0 , 0,
17558 0x0 }, /* _POOL32A5~*(60) */
17559 { instruction
, 0 , 0 , 32,
17560 0xfc0003ff, 0x200001ed, &PICK_QB
, 0,
17561 DSP_
}, /* PICK.QB */
17562 { reserved_block
, 0 , 0 , 32,
17563 0xfc0003ff, 0x200001f5, 0 , 0,
17564 0x0 }, /* _POOL32A5~*(62) */
17565 { reserved_block
, 0 , 0 , 32,
17566 0xfc0003ff, 0x200001fd, 0 , 0,
17567 0x0 }, /* _POOL32A5~*(63) */
17568 { instruction
, 0 , 0 , 32,
17569 0xfc0003ff, 0x20000205, &CMPGDU_LE_QB
, 0,
17570 DSP_
}, /* CMPGDU.LE.QB */
17571 { pool
, SUBQ__S__PH
, 2 , 32,
17572 0xfc0003ff, 0x2000020d, 0 , 0,
17573 0x0 }, /* SUBQ[_S].PH */
17574 { instruction
, 0 , 0 , 32,
17575 0xfc0003ff, 0x20000215, &APPEND
, 0,
17576 DSP_
}, /* APPEND */
17577 { reserved_block
, 0 , 0 , 32,
17578 0xfc0003ff, 0x2000021d, 0 , 0,
17579 0x0 }, /* _POOL32A5~*(67) */
17580 { reserved_block
, 0 , 0 , 32,
17581 0xfc0003ff, 0x20000225, 0 , 0,
17582 0x0 }, /* _POOL32A5~*(68) */
17583 { instruction
, 0 , 0 , 32,
17584 0xfc0003ff, 0x2000022d, &PICK_PH
, 0,
17585 DSP_
}, /* PICK.PH */
17586 { reserved_block
, 0 , 0 , 32,
17587 0xfc0003ff, 0x20000235, 0 , 0,
17588 0x0 }, /* _POOL32A5~*(70) */
17589 { reserved_block
, 0 , 0 , 32,
17590 0xfc0003ff, 0x2000023d, 0 , 0,
17591 0x0 }, /* _POOL32A5~*(71) */
17592 { instruction
, 0 , 0 , 32,
17593 0xfc0003ff, 0x20000245, &CMPU_EQ_QB
, 0,
17594 DSP_
}, /* CMPU.EQ.QB */
17595 { pool
, SUBQH__R__PH
, 2 , 32,
17596 0xfc0003ff, 0x2000024d, 0 , 0,
17597 0x0 }, /* SUBQH[_R].PH */
17598 { instruction
, 0 , 0 , 32,
17599 0xfc0003ff, 0x20000255, &PREPEND
, 0,
17600 DSP_
}, /* PREPEND */
17601 { reserved_block
, 0 , 0 , 32,
17602 0xfc0003ff, 0x2000025d, 0 , 0,
17603 0x0 }, /* _POOL32A5~*(75) */
17604 { reserved_block
, 0 , 0 , 32,
17605 0xfc0003ff, 0x20000265, 0 , 0,
17606 0x0 }, /* _POOL32A5~*(76) */
17607 { reserved_block
, 0 , 0 , 32,
17608 0xfc0003ff, 0x2000026d, 0 , 0,
17609 0x0 }, /* _POOL32A5~*(77) */
17610 { reserved_block
, 0 , 0 , 32,
17611 0xfc0003ff, 0x20000275, 0 , 0,
17612 0x0 }, /* _POOL32A5~*(78) */
17613 { reserved_block
, 0 , 0 , 32,
17614 0xfc0003ff, 0x2000027d, 0 , 0,
17615 0x0 }, /* _POOL32A5~*(79) */
17616 { instruction
, 0 , 0 , 32,
17617 0xfc0003ff, 0x20000285, &CMPU_LT_QB
, 0,
17618 DSP_
}, /* CMPU.LT.QB */
17619 { pool
, SUBQH__R__W
, 2 , 32,
17620 0xfc0003ff, 0x2000028d, 0 , 0,
17621 0x0 }, /* SUBQH[_R].W */
17622 { instruction
, 0 , 0 , 32,
17623 0xfc0003ff, 0x20000295, &MODSUB
, 0,
17624 DSP_
}, /* MODSUB */
17625 { reserved_block
, 0 , 0 , 32,
17626 0xfc0003ff, 0x2000029d, 0 , 0,
17627 0x0 }, /* _POOL32A5~*(83) */
17628 { reserved_block
, 0 , 0 , 32,
17629 0xfc0003ff, 0x200002a5, 0 , 0,
17630 0x0 }, /* _POOL32A5~*(84) */
17631 { reserved_block
, 0 , 0 , 32,
17632 0xfc0003ff, 0x200002ad, 0 , 0,
17633 0x0 }, /* _POOL32A5~*(85) */
17634 { reserved_block
, 0 , 0 , 32,
17635 0xfc0003ff, 0x200002b5, 0 , 0,
17636 0x0 }, /* _POOL32A5~*(86) */
17637 { reserved_block
, 0 , 0 , 32,
17638 0xfc0003ff, 0x200002bd, 0 , 0,
17639 0x0 }, /* _POOL32A5~*(87) */
17640 { instruction
, 0 , 0 , 32,
17641 0xfc0003ff, 0x200002c5, &CMPU_LE_QB
, 0,
17642 DSP_
}, /* CMPU.LE.QB */
17643 { pool
, SUBU__S__QB
, 2 , 32,
17644 0xfc0003ff, 0x200002cd, 0 , 0,
17645 0x0 }, /* SUBU[_S].QB */
17646 { instruction
, 0 , 0 , 32,
17647 0xfc0003ff, 0x200002d5, &SHRAV_R_W
, 0,
17648 DSP_
}, /* SHRAV_R.W */
17649 { reserved_block
, 0 , 0 , 32,
17650 0xfc0003ff, 0x200002dd, 0 , 0,
17651 0x0 }, /* _POOL32A5~*(91) */
17652 { reserved_block
, 0 , 0 , 32,
17653 0xfc0003ff, 0x200002e5, 0 , 0,
17654 0x0 }, /* _POOL32A5~*(92) */
17655 { reserved_block
, 0 , 0 , 32,
17656 0xfc0003ff, 0x200002ed, 0 , 0,
17657 0x0 }, /* _POOL32A5~*(93) */
17658 { instruction
, 0 , 0 , 32,
17659 0xfc0003ff, 0x200002f5, &SHRA_R_W
, 0,
17660 DSP_
}, /* SHRA_R.W */
17661 { reserved_block
, 0 , 0 , 32,
17662 0xfc0003ff, 0x200002fd, 0 , 0,
17663 0x0 }, /* _POOL32A5~*(95) */
17664 { instruction
, 0 , 0 , 32,
17665 0xfc0003ff, 0x20000305, &ADDQ_S_W
, 0,
17666 DSP_
}, /* ADDQ_S.W */
17667 { pool
, SUBU__S__PH
, 2 , 32,
17668 0xfc0003ff, 0x2000030d, 0 , 0,
17669 0x0 }, /* SUBU[_S].PH */
17670 { instruction
, 0 , 0 , 32,
17671 0xfc0003ff, 0x20000315, &SHRLV_PH
, 0,
17672 DSP_
}, /* SHRLV.PH */
17673 { reserved_block
, 0 , 0 , 32,
17674 0xfc0003ff, 0x2000031d, 0 , 0,
17675 0x0 }, /* _POOL32A5~*(99) */
17676 { reserved_block
, 0 , 0 , 32,
17677 0xfc0003ff, 0x20000325, 0 , 0,
17678 0x0 }, /* _POOL32A5~*(100) */
17679 { reserved_block
, 0 , 0 , 32,
17680 0xfc0003ff, 0x2000032d, 0 , 0,
17681 0x0 }, /* _POOL32A5~*(101) */
17682 { pool
, SHRA__R__PH
, 2 , 32,
17683 0xfc0003ff, 0x20000335, 0 , 0,
17684 0x0 }, /* SHRA[_R].PH */
17685 { reserved_block
, 0 , 0 , 32,
17686 0xfc0003ff, 0x2000033d, 0 , 0,
17687 0x0 }, /* _POOL32A5~*(103) */
17688 { instruction
, 0 , 0 , 32,
17689 0xfc0003ff, 0x20000345, &SUBQ_S_W
, 0,
17690 DSP_
}, /* SUBQ_S.W */
17691 { pool
, SUBUH__R__QB
, 2 , 32,
17692 0xfc0003ff, 0x2000034d, 0 , 0,
17693 0x0 }, /* SUBUH[_R].QB */
17694 { instruction
, 0 , 0 , 32,
17695 0xfc0003ff, 0x20000355, &SHRLV_QB
, 0,
17696 DSP_
}, /* SHRLV.QB */
17697 { reserved_block
, 0 , 0 , 32,
17698 0xfc0003ff, 0x2000035d, 0 , 0,
17699 0x0 }, /* _POOL32A5~*(107) */
17700 { reserved_block
, 0 , 0 , 32,
17701 0xfc0003ff, 0x20000365, 0 , 0,
17702 0x0 }, /* _POOL32A5~*(108) */
17703 { reserved_block
, 0 , 0 , 32,
17704 0xfc0003ff, 0x2000036d, 0 , 0,
17705 0x0 }, /* _POOL32A5~*(109) */
17706 { reserved_block
, 0 , 0 , 32,
17707 0xfc0003ff, 0x20000375, 0 , 0,
17708 0x0 }, /* _POOL32A5~*(110) */
17709 { reserved_block
, 0 , 0 , 32,
17710 0xfc0003ff, 0x2000037d, 0 , 0,
17711 0x0 }, /* _POOL32A5~*(111) */
17712 { instruction
, 0 , 0 , 32,
17713 0xfc0003ff, 0x20000385, &ADDSC
, 0,
17714 DSP_
}, /* ADDSC */
17715 { pool
, SHLLV__S__PH
, 2 , 32,
17716 0xfc0003ff, 0x2000038d, 0 , 0,
17717 0x0 }, /* SHLLV[_S].PH */
17718 { instruction
, 0 , 0 , 32,
17719 0xfc0003ff, 0x20000395, &SHLLV_QB
, 0,
17720 DSP_
}, /* SHLLV.QB */
17721 { reserved_block
, 0 , 0 , 32,
17722 0xfc0003ff, 0x2000039d, 0 , 0,
17723 0x0 }, /* _POOL32A5~*(115) */
17724 { reserved_block
, 0 , 0 , 32,
17725 0xfc0003ff, 0x200003a5, 0 , 0,
17726 0x0 }, /* _POOL32A5~*(116) */
17727 { reserved_block
, 0 , 0 , 32,
17728 0xfc0003ff, 0x200003ad, 0 , 0,
17729 0x0 }, /* _POOL32A5~*(117) */
17730 { pool
, SHLL__S__PH
, 4 , 32,
17731 0xfc0003ff, 0x200003b5, 0 , 0,
17732 0x0 }, /* SHLL[_S].PH */
17733 { reserved_block
, 0 , 0 , 32,
17734 0xfc0003ff, 0x200003bd, 0 , 0,
17735 0x0 }, /* _POOL32A5~*(119) */
17736 { instruction
, 0 , 0 , 32,
17737 0xfc0003ff, 0x200003c5, &ADDWC
, 0,
17738 DSP_
}, /* ADDWC */
17739 { pool
, PRECR_SRA__R__PH_W
, 2 , 32,
17740 0xfc0003ff, 0x200003cd, 0 , 0,
17741 0x0 }, /* PRECR_SRA[_R].PH.W */
17742 { instruction
, 0 , 0 , 32,
17743 0xfc0003ff, 0x200003d5, &SHLLV_S_W
, 0,
17744 DSP_
}, /* SHLLV_S.W */
17745 { reserved_block
, 0 , 0 , 32,
17746 0xfc0003ff, 0x200003dd, 0 , 0,
17747 0x0 }, /* _POOL32A5~*(123) */
17748 { reserved_block
, 0 , 0 , 32,
17749 0xfc0003ff, 0x200003e5, 0 , 0,
17750 0x0 }, /* _POOL32A5~*(124) */
17751 { reserved_block
, 0 , 0 , 32,
17752 0xfc0003ff, 0x200003ed, 0 , 0,
17753 0x0 }, /* _POOL32A5~*(125) */
17754 { instruction
, 0 , 0 , 32,
17755 0xfc0003ff, 0x200003f5, &SHLL_S_W
, 0,
17756 DSP_
}, /* SHLL_S.W */
17757 { reserved_block
, 0 , 0 , 32,
17758 0xfc0003ff, 0x200003fd, 0 , 0,
17759 0x0 }, /* _POOL32A5~*(127) */
17763 static const Pool PP_LSX
[16] = {
17764 { instruction
, 0 , 0 , 32,
17765 0xfc0007ff, 0x20000007, &LBX
, 0,
17767 { instruction
, 0 , 0 , 32,
17768 0xfc0007ff, 0x20000087, &SBX
, 0,
17770 { instruction
, 0 , 0 , 32,
17771 0xfc0007ff, 0x20000107, &LBUX
, 0,
17773 { reserved_block
, 0 , 0 , 32,
17774 0xfc0007ff, 0x20000187, 0 , 0,
17775 0x0 }, /* PP.LSX~*(3) */
17776 { instruction
, 0 , 0 , 32,
17777 0xfc0007ff, 0x20000207, &LHX
, 0,
17779 { instruction
, 0 , 0 , 32,
17780 0xfc0007ff, 0x20000287, &SHX
, 0,
17782 { instruction
, 0 , 0 , 32,
17783 0xfc0007ff, 0x20000307, &LHUX
, 0,
17785 { instruction
, 0 , 0 , 32,
17786 0xfc0007ff, 0x20000387, &LWUX
, 0,
17787 MIPS64_
}, /* LWUX */
17788 { instruction
, 0 , 0 , 32,
17789 0xfc0007ff, 0x20000407, &LWX
, 0,
17791 { instruction
, 0 , 0 , 32,
17792 0xfc0007ff, 0x20000487, &SWX
, 0,
17794 { instruction
, 0 , 0 , 32,
17795 0xfc0007ff, 0x20000507, &LWC1X
, 0,
17796 CP1_
}, /* LWC1X */
17797 { instruction
, 0 , 0 , 32,
17798 0xfc0007ff, 0x20000587, &SWC1X
, 0,
17799 CP1_
}, /* SWC1X */
17800 { instruction
, 0 , 0 , 32,
17801 0xfc0007ff, 0x20000607, &LDX
, 0,
17802 MIPS64_
}, /* LDX */
17803 { instruction
, 0 , 0 , 32,
17804 0xfc0007ff, 0x20000687, &SDX
, 0,
17805 MIPS64_
}, /* SDX */
17806 { instruction
, 0 , 0 , 32,
17807 0xfc0007ff, 0x20000707, &LDC1X
, 0,
17808 CP1_
}, /* LDC1X */
17809 { instruction
, 0 , 0 , 32,
17810 0xfc0007ff, 0x20000787, &SDC1X
, 0,
17811 CP1_
}, /* SDC1X */
17815 static const Pool PP_LSXS
[16] = {
17816 { reserved_block
, 0 , 0 , 32,
17817 0xfc0007ff, 0x20000047, 0 , 0,
17818 0x0 }, /* PP.LSXS~*(0) */
17819 { reserved_block
, 0 , 0 , 32,
17820 0xfc0007ff, 0x200000c7, 0 , 0,
17821 0x0 }, /* PP.LSXS~*(1) */
17822 { reserved_block
, 0 , 0 , 32,
17823 0xfc0007ff, 0x20000147, 0 , 0,
17824 0x0 }, /* PP.LSXS~*(2) */
17825 { reserved_block
, 0 , 0 , 32,
17826 0xfc0007ff, 0x200001c7, 0 , 0,
17827 0x0 }, /* PP.LSXS~*(3) */
17828 { instruction
, 0 , 0 , 32,
17829 0xfc0007ff, 0x20000247, &LHXS
, 0,
17831 { instruction
, 0 , 0 , 32,
17832 0xfc0007ff, 0x200002c7, &SHXS
, 0,
17833 XMMS_
}, /* SHXS */
17834 { instruction
, 0 , 0 , 32,
17835 0xfc0007ff, 0x20000347, &LHUXS
, 0,
17837 { instruction
, 0 , 0 , 32,
17838 0xfc0007ff, 0x200003c7, &LWUXS
, 0,
17839 MIPS64_
}, /* LWUXS */
17840 { instruction
, 0 , 0 , 32,
17841 0xfc0007ff, 0x20000447, &LWXS_32_
, 0,
17842 0x0 }, /* LWXS[32] */
17843 { instruction
, 0 , 0 , 32,
17844 0xfc0007ff, 0x200004c7, &SWXS
, 0,
17845 XMMS_
}, /* SWXS */
17846 { instruction
, 0 , 0 , 32,
17847 0xfc0007ff, 0x20000547, &LWC1XS
, 0,
17848 CP1_
}, /* LWC1XS */
17849 { instruction
, 0 , 0 , 32,
17850 0xfc0007ff, 0x200005c7, &SWC1XS
, 0,
17851 CP1_
}, /* SWC1XS */
17852 { instruction
, 0 , 0 , 32,
17853 0xfc0007ff, 0x20000647, &LDXS
, 0,
17854 MIPS64_
}, /* LDXS */
17855 { instruction
, 0 , 0 , 32,
17856 0xfc0007ff, 0x200006c7, &SDXS
, 0,
17857 MIPS64_
}, /* SDXS */
17858 { instruction
, 0 , 0 , 32,
17859 0xfc0007ff, 0x20000747, &LDC1XS
, 0,
17860 CP1_
}, /* LDC1XS */
17861 { instruction
, 0 , 0 , 32,
17862 0xfc0007ff, 0x200007c7, &SDC1XS
, 0,
17863 CP1_
}, /* SDC1XS */
17867 static const Pool P_LSX
[2] = {
17868 { pool
, PP_LSX
, 16 , 32,
17869 0xfc00007f, 0x20000007, 0 , 0,
17870 0x0 }, /* PP.LSX */
17871 { pool
, PP_LSXS
, 16 , 32,
17872 0xfc00007f, 0x20000047, 0 , 0,
17873 0x0 }, /* PP.LSXS */
17877 static const Pool POOL32Axf_1_0
[4] = {
17878 { instruction
, 0 , 0 , 32,
17879 0xfc003fff, 0x2000007f, &MFHI_DSP_
, 0,
17880 DSP_
}, /* MFHI[DSP] */
17881 { instruction
, 0 , 0 , 32,
17882 0xfc003fff, 0x2000107f, &MFLO_DSP_
, 0,
17883 DSP_
}, /* MFLO[DSP] */
17884 { instruction
, 0 , 0 , 32,
17885 0xfc003fff, 0x2000207f, &MTHI_DSP_
, 0,
17886 DSP_
}, /* MTHI[DSP] */
17887 { instruction
, 0 , 0 , 32,
17888 0xfc003fff, 0x2000307f, &MTLO_DSP_
, 0,
17889 DSP_
}, /* MTLO[DSP] */
17893 static const Pool POOL32Axf_1_1
[4] = {
17894 { instruction
, 0 , 0 , 32,
17895 0xfc003fff, 0x2000027f, &MTHLIP
, 0,
17896 DSP_
}, /* MTHLIP */
17897 { instruction
, 0 , 0 , 32,
17898 0xfc003fff, 0x2000127f, &SHILOV
, 0,
17899 DSP_
}, /* SHILOV */
17900 { reserved_block
, 0 , 0 , 32,
17901 0xfc003fff, 0x2000227f, 0 , 0,
17902 0x0 }, /* POOL32Axf_1_1~*(2) */
17903 { reserved_block
, 0 , 0 , 32,
17904 0xfc003fff, 0x2000327f, 0 , 0,
17905 0x0 }, /* POOL32Axf_1_1~*(3) */
17909 static const Pool POOL32Axf_1_3
[4] = {
17910 { instruction
, 0 , 0 , 32,
17911 0xfc003fff, 0x2000067f, &RDDSP
, 0,
17912 DSP_
}, /* RDDSP */
17913 { instruction
, 0 , 0 , 32,
17914 0xfc003fff, 0x2000167f, &WRDSP
, 0,
17915 DSP_
}, /* WRDSP */
17916 { instruction
, 0 , 0 , 32,
17917 0xfc003fff, 0x2000267f, &EXTP
, 0,
17919 { instruction
, 0 , 0 , 32,
17920 0xfc003fff, 0x2000367f, &EXTPDP
, 0,
17921 DSP_
}, /* EXTPDP */
17925 static const Pool POOL32Axf_1_4
[2] = {
17926 { instruction
, 0 , 0 , 32,
17927 0xfc001fff, 0x2000087f, &SHLL_QB
, 0,
17928 DSP_
}, /* SHLL.QB */
17929 { instruction
, 0 , 0 , 32,
17930 0xfc001fff, 0x2000187f, &SHRL_QB
, 0,
17931 DSP_
}, /* SHRL.QB */
17935 static const Pool MAQ_S_A__W_PHR
[2] = {
17936 { instruction
, 0 , 0 , 32,
17937 0xfc003fff, 0x20000a7f, &MAQ_S_W_PHR
, 0,
17938 DSP_
}, /* MAQ_S.W.PHR */
17939 { instruction
, 0 , 0 , 32,
17940 0xfc003fff, 0x20002a7f, &MAQ_SA_W_PHR
, 0,
17941 DSP_
}, /* MAQ_SA.W.PHR */
17945 static const Pool MAQ_S_A__W_PHL
[2] = {
17946 { instruction
, 0 , 0 , 32,
17947 0xfc003fff, 0x20001a7f, &MAQ_S_W_PHL
, 0,
17948 DSP_
}, /* MAQ_S.W.PHL */
17949 { instruction
, 0 , 0 , 32,
17950 0xfc003fff, 0x20003a7f, &MAQ_SA_W_PHL
, 0,
17951 DSP_
}, /* MAQ_SA.W.PHL */
17955 static const Pool POOL32Axf_1_5
[2] = {
17956 { pool
, MAQ_S_A__W_PHR
, 2 , 32,
17957 0xfc001fff, 0x20000a7f, 0 , 0,
17958 0x0 }, /* MAQ_S[A].W.PHR */
17959 { pool
, MAQ_S_A__W_PHL
, 2 , 32,
17960 0xfc001fff, 0x20001a7f, 0 , 0,
17961 0x0 }, /* MAQ_S[A].W.PHL */
17965 static const Pool POOL32Axf_1_7
[4] = {
17966 { instruction
, 0 , 0 , 32,
17967 0xfc003fff, 0x20000e7f, &EXTR_W
, 0,
17968 DSP_
}, /* EXTR.W */
17969 { instruction
, 0 , 0 , 32,
17970 0xfc003fff, 0x20001e7f, &EXTR_R_W
, 0,
17971 DSP_
}, /* EXTR_R.W */
17972 { instruction
, 0 , 0 , 32,
17973 0xfc003fff, 0x20002e7f, &EXTR_RS_W
, 0,
17974 DSP_
}, /* EXTR_RS.W */
17975 { instruction
, 0 , 0 , 32,
17976 0xfc003fff, 0x20003e7f, &EXTR_S_H
, 0,
17977 DSP_
}, /* EXTR_S.H */
17981 static const Pool POOL32Axf_1
[8] = {
17982 { pool
, POOL32Axf_1_0
, 4 , 32,
17983 0xfc000fff, 0x2000007f, 0 , 0,
17984 0x0 }, /* POOL32Axf_1_0 */
17985 { pool
, POOL32Axf_1_1
, 4 , 32,
17986 0xfc000fff, 0x2000027f, 0 , 0,
17987 0x0 }, /* POOL32Axf_1_1 */
17988 { reserved_block
, 0 , 0 , 32,
17989 0xfc000fff, 0x2000047f, 0 , 0,
17990 0x0 }, /* POOL32Axf_1~*(2) */
17991 { pool
, POOL32Axf_1_3
, 4 , 32,
17992 0xfc000fff, 0x2000067f, 0 , 0,
17993 0x0 }, /* POOL32Axf_1_3 */
17994 { pool
, POOL32Axf_1_4
, 2 , 32,
17995 0xfc000fff, 0x2000087f, 0 , 0,
17996 0x0 }, /* POOL32Axf_1_4 */
17997 { pool
, POOL32Axf_1_5
, 2 , 32,
17998 0xfc000fff, 0x20000a7f, 0 , 0,
17999 0x0 }, /* POOL32Axf_1_5 */
18000 { reserved_block
, 0 , 0 , 32,
18001 0xfc000fff, 0x20000c7f, 0 , 0,
18002 0x0 }, /* POOL32Axf_1~*(6) */
18003 { pool
, POOL32Axf_1_7
, 4 , 32,
18004 0xfc000fff, 0x20000e7f, 0 , 0,
18005 0x0 }, /* POOL32Axf_1_7 */
18009 static const Pool POOL32Axf_2_DSP__0_7
[8] = {
18010 { instruction
, 0 , 0 , 32,
18011 0xfc003fff, 0x200000bf, &DPA_W_PH
, 0,
18012 DSP_
}, /* DPA.W.PH */
18013 { instruction
, 0 , 0 , 32,
18014 0xfc003fff, 0x200002bf, &DPAQ_S_W_PH
, 0,
18015 DSP_
}, /* DPAQ_S.W.PH */
18016 { instruction
, 0 , 0 , 32,
18017 0xfc003fff, 0x200004bf, &DPS_W_PH
, 0,
18018 DSP_
}, /* DPS.W.PH */
18019 { instruction
, 0 , 0 , 32,
18020 0xfc003fff, 0x200006bf, &DPSQ_S_W_PH
, 0,
18021 DSP_
}, /* DPSQ_S.W.PH */
18022 { reserved_block
, 0 , 0 , 32,
18023 0xfc003fff, 0x200008bf, 0 , 0,
18024 0x0 }, /* POOL32Axf_2(DSP)_0_7~*(4) */
18025 { instruction
, 0 , 0 , 32,
18026 0xfc003fff, 0x20000abf, &MADD_DSP_
, 0,
18027 DSP_
}, /* MADD[DSP] */
18028 { instruction
, 0 , 0 , 32,
18029 0xfc003fff, 0x20000cbf, &MULT_DSP_
, 0,
18030 DSP_
}, /* MULT[DSP] */
18031 { instruction
, 0 , 0 , 32,
18032 0xfc003fff, 0x20000ebf, &EXTRV_W
, 0,
18033 DSP_
}, /* EXTRV.W */
18037 static const Pool POOL32Axf_2_DSP__8_15
[8] = {
18038 { instruction
, 0 , 0 , 32,
18039 0xfc003fff, 0x200010bf, &DPAX_W_PH
, 0,
18040 DSP_
}, /* DPAX.W.PH */
18041 { instruction
, 0 , 0 , 32,
18042 0xfc003fff, 0x200012bf, &DPAQ_SA_L_W
, 0,
18043 DSP_
}, /* DPAQ_SA.L.W */
18044 { instruction
, 0 , 0 , 32,
18045 0xfc003fff, 0x200014bf, &DPSX_W_PH
, 0,
18046 DSP_
}, /* DPSX.W.PH */
18047 { instruction
, 0 , 0 , 32,
18048 0xfc003fff, 0x200016bf, &DPSQ_SA_L_W
, 0,
18049 DSP_
}, /* DPSQ_SA.L.W */
18050 { reserved_block
, 0 , 0 , 32,
18051 0xfc003fff, 0x200018bf, 0 , 0,
18052 0x0 }, /* POOL32Axf_2(DSP)_8_15~*(4) */
18053 { instruction
, 0 , 0 , 32,
18054 0xfc003fff, 0x20001abf, &MADDU_DSP_
, 0,
18055 DSP_
}, /* MADDU[DSP] */
18056 { instruction
, 0 , 0 , 32,
18057 0xfc003fff, 0x20001cbf, &MULTU_DSP_
, 0,
18058 DSP_
}, /* MULTU[DSP] */
18059 { instruction
, 0 , 0 , 32,
18060 0xfc003fff, 0x20001ebf, &EXTRV_R_W
, 0,
18061 DSP_
}, /* EXTRV_R.W */
18065 static const Pool POOL32Axf_2_DSP__16_23
[8] = {
18066 { instruction
, 0 , 0 , 32,
18067 0xfc003fff, 0x200020bf, &DPAU_H_QBL
, 0,
18068 DSP_
}, /* DPAU.H.QBL */
18069 { instruction
, 0 , 0 , 32,
18070 0xfc003fff, 0x200022bf, &DPAQX_S_W_PH
, 0,
18071 DSP_
}, /* DPAQX_S.W.PH */
18072 { instruction
, 0 , 0 , 32,
18073 0xfc003fff, 0x200024bf, &DPSU_H_QBL
, 0,
18074 DSP_
}, /* DPSU.H.QBL */
18075 { instruction
, 0 , 0 , 32,
18076 0xfc003fff, 0x200026bf, &DPSQX_S_W_PH
, 0,
18077 DSP_
}, /* DPSQX_S.W.PH */
18078 { instruction
, 0 , 0 , 32,
18079 0xfc003fff, 0x200028bf, &EXTPV
, 0,
18080 DSP_
}, /* EXTPV */
18081 { instruction
, 0 , 0 , 32,
18082 0xfc003fff, 0x20002abf, &MSUB_DSP_
, 0,
18083 DSP_
}, /* MSUB[DSP] */
18084 { instruction
, 0 , 0 , 32,
18085 0xfc003fff, 0x20002cbf, &MULSA_W_PH
, 0,
18086 DSP_
}, /* MULSA.W.PH */
18087 { instruction
, 0 , 0 , 32,
18088 0xfc003fff, 0x20002ebf, &EXTRV_RS_W
, 0,
18089 DSP_
}, /* EXTRV_RS.W */
18093 static const Pool POOL32Axf_2_DSP__24_31
[8] = {
18094 { instruction
, 0 , 0 , 32,
18095 0xfc003fff, 0x200030bf, &DPAU_H_QBR
, 0,
18096 DSP_
}, /* DPAU.H.QBR */
18097 { instruction
, 0 , 0 , 32,
18098 0xfc003fff, 0x200032bf, &DPAQX_SA_W_PH
, 0,
18099 DSP_
}, /* DPAQX_SA.W.PH */
18100 { instruction
, 0 , 0 , 32,
18101 0xfc003fff, 0x200034bf, &DPSU_H_QBR
, 0,
18102 DSP_
}, /* DPSU.H.QBR */
18103 { instruction
, 0 , 0 , 32,
18104 0xfc003fff, 0x200036bf, &DPSQX_SA_W_PH
, 0,
18105 DSP_
}, /* DPSQX_SA.W.PH */
18106 { instruction
, 0 , 0 , 32,
18107 0xfc003fff, 0x200038bf, &EXTPDPV
, 0,
18108 DSP_
}, /* EXTPDPV */
18109 { instruction
, 0 , 0 , 32,
18110 0xfc003fff, 0x20003abf, &MSUBU_DSP_
, 0,
18111 DSP_
}, /* MSUBU[DSP] */
18112 { instruction
, 0 , 0 , 32,
18113 0xfc003fff, 0x20003cbf, &MULSAQ_S_W_PH
, 0,
18114 DSP_
}, /* MULSAQ_S.W.PH */
18115 { instruction
, 0 , 0 , 32,
18116 0xfc003fff, 0x20003ebf, &EXTRV_S_H
, 0,
18117 DSP_
}, /* EXTRV_S.H */
18121 static const Pool POOL32Axf_2
[4] = {
18122 { pool
, POOL32Axf_2_DSP__0_7
, 8 , 32,
18123 0xfc0031ff, 0x200000bf, 0 , 0,
18124 0x0 }, /* POOL32Axf_2(DSP)_0_7 */
18125 { pool
, POOL32Axf_2_DSP__8_15
, 8 , 32,
18126 0xfc0031ff, 0x200010bf, 0 , 0,
18127 0x0 }, /* POOL32Axf_2(DSP)_8_15 */
18128 { pool
, POOL32Axf_2_DSP__16_23
, 8 , 32,
18129 0xfc0031ff, 0x200020bf, 0 , 0,
18130 0x0 }, /* POOL32Axf_2(DSP)_16_23 */
18131 { pool
, POOL32Axf_2_DSP__24_31
, 8 , 32,
18132 0xfc0031ff, 0x200030bf, 0 , 0,
18133 0x0 }, /* POOL32Axf_2(DSP)_24_31 */
18137 static const Pool POOL32Axf_4
[128] = {
18138 { instruction
, 0 , 0 , 32,
18139 0xfc00ffff, 0x2000013f, &ABSQ_S_QB
, 0,
18140 DSP_
}, /* ABSQ_S.QB */
18141 { instruction
, 0 , 0 , 32,
18142 0xfc00ffff, 0x2000033f, &REPLV_PH
, 0,
18143 DSP_
}, /* REPLV.PH */
18144 { reserved_block
, 0 , 0 , 32,
18145 0xfc00ffff, 0x2000053f, 0 , 0,
18146 0x0 }, /* POOL32Axf_4~*(2) */
18147 { reserved_block
, 0 , 0 , 32,
18148 0xfc00ffff, 0x2000073f, 0 , 0,
18149 0x0 }, /* POOL32Axf_4~*(3) */
18150 { reserved_block
, 0 , 0 , 32,
18151 0xfc00ffff, 0x2000093f, 0 , 0,
18152 0x0 }, /* POOL32Axf_4~*(4) */
18153 { reserved_block
, 0 , 0 , 32,
18154 0xfc00ffff, 0x20000b3f, 0 , 0,
18155 0x0 }, /* POOL32Axf_4~*(5) */
18156 { reserved_block
, 0 , 0 , 32,
18157 0xfc00ffff, 0x20000d3f, 0 , 0,
18158 0x0 }, /* POOL32Axf_4~*(6) */
18159 { reserved_block
, 0 , 0 , 32,
18160 0xfc00ffff, 0x20000f3f, 0 , 0,
18161 0x0 }, /* POOL32Axf_4~*(7) */
18162 { instruction
, 0 , 0 , 32,
18163 0xfc00ffff, 0x2000113f, &ABSQ_S_PH
, 0,
18164 DSP_
}, /* ABSQ_S.PH */
18165 { instruction
, 0 , 0 , 32,
18166 0xfc00ffff, 0x2000133f, &REPLV_QB
, 0,
18167 DSP_
}, /* REPLV.QB */
18168 { reserved_block
, 0 , 0 , 32,
18169 0xfc00ffff, 0x2000153f, 0 , 0,
18170 0x0 }, /* POOL32Axf_4~*(10) */
18171 { reserved_block
, 0 , 0 , 32,
18172 0xfc00ffff, 0x2000173f, 0 , 0,
18173 0x0 }, /* POOL32Axf_4~*(11) */
18174 { reserved_block
, 0 , 0 , 32,
18175 0xfc00ffff, 0x2000193f, 0 , 0,
18176 0x0 }, /* POOL32Axf_4~*(12) */
18177 { reserved_block
, 0 , 0 , 32,
18178 0xfc00ffff, 0x20001b3f, 0 , 0,
18179 0x0 }, /* POOL32Axf_4~*(13) */
18180 { reserved_block
, 0 , 0 , 32,
18181 0xfc00ffff, 0x20001d3f, 0 , 0,
18182 0x0 }, /* POOL32Axf_4~*(14) */
18183 { reserved_block
, 0 , 0 , 32,
18184 0xfc00ffff, 0x20001f3f, 0 , 0,
18185 0x0 }, /* POOL32Axf_4~*(15) */
18186 { instruction
, 0 , 0 , 32,
18187 0xfc00ffff, 0x2000213f, &ABSQ_S_W
, 0,
18188 DSP_
}, /* ABSQ_S.W */
18189 { reserved_block
, 0 , 0 , 32,
18190 0xfc00ffff, 0x2000233f, 0 , 0,
18191 0x0 }, /* POOL32Axf_4~*(17) */
18192 { reserved_block
, 0 , 0 , 32,
18193 0xfc00ffff, 0x2000253f, 0 , 0,
18194 0x0 }, /* POOL32Axf_4~*(18) */
18195 { reserved_block
, 0 , 0 , 32,
18196 0xfc00ffff, 0x2000273f, 0 , 0,
18197 0x0 }, /* POOL32Axf_4~*(19) */
18198 { reserved_block
, 0 , 0 , 32,
18199 0xfc00ffff, 0x2000293f, 0 , 0,
18200 0x0 }, /* POOL32Axf_4~*(20) */
18201 { reserved_block
, 0 , 0 , 32,
18202 0xfc00ffff, 0x20002b3f, 0 , 0,
18203 0x0 }, /* POOL32Axf_4~*(21) */
18204 { reserved_block
, 0 , 0 , 32,
18205 0xfc00ffff, 0x20002d3f, 0 , 0,
18206 0x0 }, /* POOL32Axf_4~*(22) */
18207 { reserved_block
, 0 , 0 , 32,
18208 0xfc00ffff, 0x20002f3f, 0 , 0,
18209 0x0 }, /* POOL32Axf_4~*(23) */
18210 { reserved_block
, 0 , 0 , 32,
18211 0xfc00ffff, 0x2000313f, 0 , 0,
18212 0x0 }, /* POOL32Axf_4~*(24) */
18213 { reserved_block
, 0 , 0 , 32,
18214 0xfc00ffff, 0x2000333f, 0 , 0,
18215 0x0 }, /* POOL32Axf_4~*(25) */
18216 { reserved_block
, 0 , 0 , 32,
18217 0xfc00ffff, 0x2000353f, 0 , 0,
18218 0x0 }, /* POOL32Axf_4~*(26) */
18219 { reserved_block
, 0 , 0 , 32,
18220 0xfc00ffff, 0x2000373f, 0 , 0,
18221 0x0 }, /* POOL32Axf_4~*(27) */
18222 { reserved_block
, 0 , 0 , 32,
18223 0xfc00ffff, 0x2000393f, 0 , 0,
18224 0x0 }, /* POOL32Axf_4~*(28) */
18225 { reserved_block
, 0 , 0 , 32,
18226 0xfc00ffff, 0x20003b3f, 0 , 0,
18227 0x0 }, /* POOL32Axf_4~*(29) */
18228 { reserved_block
, 0 , 0 , 32,
18229 0xfc00ffff, 0x20003d3f, 0 , 0,
18230 0x0 }, /* POOL32Axf_4~*(30) */
18231 { reserved_block
, 0 , 0 , 32,
18232 0xfc00ffff, 0x20003f3f, 0 , 0,
18233 0x0 }, /* POOL32Axf_4~*(31) */
18234 { instruction
, 0 , 0 , 32,
18235 0xfc00ffff, 0x2000413f, &INSV
, 0,
18237 { reserved_block
, 0 , 0 , 32,
18238 0xfc00ffff, 0x2000433f, 0 , 0,
18239 0x0 }, /* POOL32Axf_4~*(33) */
18240 { reserved_block
, 0 , 0 , 32,
18241 0xfc00ffff, 0x2000453f, 0 , 0,
18242 0x0 }, /* POOL32Axf_4~*(34) */
18243 { reserved_block
, 0 , 0 , 32,
18244 0xfc00ffff, 0x2000473f, 0 , 0,
18245 0x0 }, /* POOL32Axf_4~*(35) */
18246 { reserved_block
, 0 , 0 , 32,
18247 0xfc00ffff, 0x2000493f, 0 , 0,
18248 0x0 }, /* POOL32Axf_4~*(36) */
18249 { instruction
, 0 , 0 , 32,
18250 0xfc00ffff, 0x20004b3f, &CLO
, 0,
18252 { instruction
, 0 , 0 , 32,
18253 0xfc00ffff, 0x20004d3f, &MFC2
, 0,
18255 { reserved_block
, 0 , 0 , 32,
18256 0xfc00ffff, 0x20004f3f, 0 , 0,
18257 0x0 }, /* POOL32Axf_4~*(39) */
18258 { instruction
, 0 , 0 , 32,
18259 0xfc00ffff, 0x2000513f, &PRECEQ_W_PHL
, 0,
18260 DSP_
}, /* PRECEQ.W.PHL */
18261 { reserved_block
, 0 , 0 , 32,
18262 0xfc00ffff, 0x2000533f, 0 , 0,
18263 0x0 }, /* POOL32Axf_4~*(41) */
18264 { reserved_block
, 0 , 0 , 32,
18265 0xfc00ffff, 0x2000553f, 0 , 0,
18266 0x0 }, /* POOL32Axf_4~*(42) */
18267 { reserved_block
, 0 , 0 , 32,
18268 0xfc00ffff, 0x2000573f, 0 , 0,
18269 0x0 }, /* POOL32Axf_4~*(43) */
18270 { reserved_block
, 0 , 0 , 32,
18271 0xfc00ffff, 0x2000593f, 0 , 0,
18272 0x0 }, /* POOL32Axf_4~*(44) */
18273 { instruction
, 0 , 0 , 32,
18274 0xfc00ffff, 0x20005b3f, &CLZ
, 0,
18276 { instruction
, 0 , 0 , 32,
18277 0xfc00ffff, 0x20005d3f, &MTC2
, 0,
18279 { reserved_block
, 0 , 0 , 32,
18280 0xfc00ffff, 0x20005f3f, 0 , 0,
18281 0x0 }, /* POOL32Axf_4~*(47) */
18282 { instruction
, 0 , 0 , 32,
18283 0xfc00ffff, 0x2000613f, &PRECEQ_W_PHR
, 0,
18284 DSP_
}, /* PRECEQ.W.PHR */
18285 { reserved_block
, 0 , 0 , 32,
18286 0xfc00ffff, 0x2000633f, 0 , 0,
18287 0x0 }, /* POOL32Axf_4~*(49) */
18288 { reserved_block
, 0 , 0 , 32,
18289 0xfc00ffff, 0x2000653f, 0 , 0,
18290 0x0 }, /* POOL32Axf_4~*(50) */
18291 { reserved_block
, 0 , 0 , 32,
18292 0xfc00ffff, 0x2000673f, 0 , 0,
18293 0x0 }, /* POOL32Axf_4~*(51) */
18294 { reserved_block
, 0 , 0 , 32,
18295 0xfc00ffff, 0x2000693f, 0 , 0,
18296 0x0 }, /* POOL32Axf_4~*(52) */
18297 { reserved_block
, 0 , 0 , 32,
18298 0xfc00ffff, 0x20006b3f, 0 , 0,
18299 0x0 }, /* POOL32Axf_4~*(53) */
18300 { instruction
, 0 , 0 , 32,
18301 0xfc00ffff, 0x20006d3f, &DMFC2
, 0,
18302 CP2_
}, /* DMFC2 */
18303 { reserved_block
, 0 , 0 , 32,
18304 0xfc00ffff, 0x20006f3f, 0 , 0,
18305 0x0 }, /* POOL32Axf_4~*(55) */
18306 { instruction
, 0 , 0 , 32,
18307 0xfc00ffff, 0x2000713f, &PRECEQU_PH_QBL
, 0,
18308 DSP_
}, /* PRECEQU.PH.QBL */
18309 { instruction
, 0 , 0 , 32,
18310 0xfc00ffff, 0x2000733f, &PRECEQU_PH_QBLA
, 0,
18311 DSP_
}, /* PRECEQU.PH.QBLA */
18312 { reserved_block
, 0 , 0 , 32,
18313 0xfc00ffff, 0x2000753f, 0 , 0,
18314 0x0 }, /* POOL32Axf_4~*(58) */
18315 { reserved_block
, 0 , 0 , 32,
18316 0xfc00ffff, 0x2000773f, 0 , 0,
18317 0x0 }, /* POOL32Axf_4~*(59) */
18318 { reserved_block
, 0 , 0 , 32,
18319 0xfc00ffff, 0x2000793f, 0 , 0,
18320 0x0 }, /* POOL32Axf_4~*(60) */
18321 { reserved_block
, 0 , 0 , 32,
18322 0xfc00ffff, 0x20007b3f, 0 , 0,
18323 0x0 }, /* POOL32Axf_4~*(61) */
18324 { instruction
, 0 , 0 , 32,
18325 0xfc00ffff, 0x20007d3f, &DMTC2
, 0,
18326 CP2_
}, /* DMTC2 */
18327 { reserved_block
, 0 , 0 , 32,
18328 0xfc00ffff, 0x20007f3f, 0 , 0,
18329 0x0 }, /* POOL32Axf_4~*(63) */
18330 { reserved_block
, 0 , 0 , 32,
18331 0xfc00ffff, 0x2000813f, 0 , 0,
18332 0x0 }, /* POOL32Axf_4~*(64) */
18333 { reserved_block
, 0 , 0 , 32,
18334 0xfc00ffff, 0x2000833f, 0 , 0,
18335 0x0 }, /* POOL32Axf_4~*(65) */
18336 { reserved_block
, 0 , 0 , 32,
18337 0xfc00ffff, 0x2000853f, 0 , 0,
18338 0x0 }, /* POOL32Axf_4~*(66) */
18339 { reserved_block
, 0 , 0 , 32,
18340 0xfc00ffff, 0x2000873f, 0 , 0,
18341 0x0 }, /* POOL32Axf_4~*(67) */
18342 { reserved_block
, 0 , 0 , 32,
18343 0xfc00ffff, 0x2000893f, 0 , 0,
18344 0x0 }, /* POOL32Axf_4~*(68) */
18345 { reserved_block
, 0 , 0 , 32,
18346 0xfc00ffff, 0x20008b3f, 0 , 0,
18347 0x0 }, /* POOL32Axf_4~*(69) */
18348 { instruction
, 0 , 0 , 32,
18349 0xfc00ffff, 0x20008d3f, &MFHC2
, 0,
18350 CP2_
}, /* MFHC2 */
18351 { reserved_block
, 0 , 0 , 32,
18352 0xfc00ffff, 0x20008f3f, 0 , 0,
18353 0x0 }, /* POOL32Axf_4~*(71) */
18354 { instruction
, 0 , 0 , 32,
18355 0xfc00ffff, 0x2000913f, &PRECEQU_PH_QBR
, 0,
18356 DSP_
}, /* PRECEQU.PH.QBR */
18357 { instruction
, 0 , 0 , 32,
18358 0xfc00ffff, 0x2000933f, &PRECEQU_PH_QBRA
, 0,
18359 DSP_
}, /* PRECEQU.PH.QBRA */
18360 { reserved_block
, 0 , 0 , 32,
18361 0xfc00ffff, 0x2000953f, 0 , 0,
18362 0x0 }, /* POOL32Axf_4~*(74) */
18363 { reserved_block
, 0 , 0 , 32,
18364 0xfc00ffff, 0x2000973f, 0 , 0,
18365 0x0 }, /* POOL32Axf_4~*(75) */
18366 { reserved_block
, 0 , 0 , 32,
18367 0xfc00ffff, 0x2000993f, 0 , 0,
18368 0x0 }, /* POOL32Axf_4~*(76) */
18369 { reserved_block
, 0 , 0 , 32,
18370 0xfc00ffff, 0x20009b3f, 0 , 0,
18371 0x0 }, /* POOL32Axf_4~*(77) */
18372 { instruction
, 0 , 0 , 32,
18373 0xfc00ffff, 0x20009d3f, &MTHC2
, 0,
18374 CP2_
}, /* MTHC2 */
18375 { reserved_block
, 0 , 0 , 32,
18376 0xfc00ffff, 0x20009f3f, 0 , 0,
18377 0x0 }, /* POOL32Axf_4~*(79) */
18378 { reserved_block
, 0 , 0 , 32,
18379 0xfc00ffff, 0x2000a13f, 0 , 0,
18380 0x0 }, /* POOL32Axf_4~*(80) */
18381 { reserved_block
, 0 , 0 , 32,
18382 0xfc00ffff, 0x2000a33f, 0 , 0,
18383 0x0 }, /* POOL32Axf_4~*(81) */
18384 { reserved_block
, 0 , 0 , 32,
18385 0xfc00ffff, 0x2000a53f, 0 , 0,
18386 0x0 }, /* POOL32Axf_4~*(82) */
18387 { reserved_block
, 0 , 0 , 32,
18388 0xfc00ffff, 0x2000a73f, 0 , 0,
18389 0x0 }, /* POOL32Axf_4~*(83) */
18390 { reserved_block
, 0 , 0 , 32,
18391 0xfc00ffff, 0x2000a93f, 0 , 0,
18392 0x0 }, /* POOL32Axf_4~*(84) */
18393 { reserved_block
, 0 , 0 , 32,
18394 0xfc00ffff, 0x2000ab3f, 0 , 0,
18395 0x0 }, /* POOL32Axf_4~*(85) */
18396 { reserved_block
, 0 , 0 , 32,
18397 0xfc00ffff, 0x2000ad3f, 0 , 0,
18398 0x0 }, /* POOL32Axf_4~*(86) */
18399 { reserved_block
, 0 , 0 , 32,
18400 0xfc00ffff, 0x2000af3f, 0 , 0,
18401 0x0 }, /* POOL32Axf_4~*(87) */
18402 { instruction
, 0 , 0 , 32,
18403 0xfc00ffff, 0x2000b13f, &PRECEU_PH_QBL
, 0,
18404 DSP_
}, /* PRECEU.PH.QBL */
18405 { instruction
, 0 , 0 , 32,
18406 0xfc00ffff, 0x2000b33f, &PRECEU_PH_QBLA
, 0,
18407 DSP_
}, /* PRECEU.PH.QBLA */
18408 { reserved_block
, 0 , 0 , 32,
18409 0xfc00ffff, 0x2000b53f, 0 , 0,
18410 0x0 }, /* POOL32Axf_4~*(90) */
18411 { reserved_block
, 0 , 0 , 32,
18412 0xfc00ffff, 0x2000b73f, 0 , 0,
18413 0x0 }, /* POOL32Axf_4~*(91) */
18414 { reserved_block
, 0 , 0 , 32,
18415 0xfc00ffff, 0x2000b93f, 0 , 0,
18416 0x0 }, /* POOL32Axf_4~*(92) */
18417 { reserved_block
, 0 , 0 , 32,
18418 0xfc00ffff, 0x2000bb3f, 0 , 0,
18419 0x0 }, /* POOL32Axf_4~*(93) */
18420 { reserved_block
, 0 , 0 , 32,
18421 0xfc00ffff, 0x2000bd3f, 0 , 0,
18422 0x0 }, /* POOL32Axf_4~*(94) */
18423 { reserved_block
, 0 , 0 , 32,
18424 0xfc00ffff, 0x2000bf3f, 0 , 0,
18425 0x0 }, /* POOL32Axf_4~*(95) */
18426 { reserved_block
, 0 , 0 , 32,
18427 0xfc00ffff, 0x2000c13f, 0 , 0,
18428 0x0 }, /* POOL32Axf_4~*(96) */
18429 { reserved_block
, 0 , 0 , 32,
18430 0xfc00ffff, 0x2000c33f, 0 , 0,
18431 0x0 }, /* POOL32Axf_4~*(97) */
18432 { reserved_block
, 0 , 0 , 32,
18433 0xfc00ffff, 0x2000c53f, 0 , 0,
18434 0x0 }, /* POOL32Axf_4~*(98) */
18435 { reserved_block
, 0 , 0 , 32,
18436 0xfc00ffff, 0x2000c73f, 0 , 0,
18437 0x0 }, /* POOL32Axf_4~*(99) */
18438 { reserved_block
, 0 , 0 , 32,
18439 0xfc00ffff, 0x2000c93f, 0 , 0,
18440 0x0 }, /* POOL32Axf_4~*(100) */
18441 { reserved_block
, 0 , 0 , 32,
18442 0xfc00ffff, 0x2000cb3f, 0 , 0,
18443 0x0 }, /* POOL32Axf_4~*(101) */
18444 { instruction
, 0 , 0 , 32,
18445 0xfc00ffff, 0x2000cd3f, &CFC2
, 0,
18447 { reserved_block
, 0 , 0 , 32,
18448 0xfc00ffff, 0x2000cf3f, 0 , 0,
18449 0x0 }, /* POOL32Axf_4~*(103) */
18450 { instruction
, 0 , 0 , 32,
18451 0xfc00ffff, 0x2000d13f, &PRECEU_PH_QBR
, 0,
18452 DSP_
}, /* PRECEU.PH.QBR */
18453 { instruction
, 0 , 0 , 32,
18454 0xfc00ffff, 0x2000d33f, &PRECEU_PH_QBRA
, 0,
18455 DSP_
}, /* PRECEU.PH.QBRA */
18456 { reserved_block
, 0 , 0 , 32,
18457 0xfc00ffff, 0x2000d53f, 0 , 0,
18458 0x0 }, /* POOL32Axf_4~*(106) */
18459 { reserved_block
, 0 , 0 , 32,
18460 0xfc00ffff, 0x2000d73f, 0 , 0,
18461 0x0 }, /* POOL32Axf_4~*(107) */
18462 { reserved_block
, 0 , 0 , 32,
18463 0xfc00ffff, 0x2000d93f, 0 , 0,
18464 0x0 }, /* POOL32Axf_4~*(108) */
18465 { reserved_block
, 0 , 0 , 32,
18466 0xfc00ffff, 0x2000db3f, 0 , 0,
18467 0x0 }, /* POOL32Axf_4~*(109) */
18468 { instruction
, 0 , 0 , 32,
18469 0xfc00ffff, 0x2000dd3f, &CTC2
, 0,
18471 { reserved_block
, 0 , 0 , 32,
18472 0xfc00ffff, 0x2000df3f, 0 , 0,
18473 0x0 }, /* POOL32Axf_4~*(111) */
18474 { reserved_block
, 0 , 0 , 32,
18475 0xfc00ffff, 0x2000e13f, 0 , 0,
18476 0x0 }, /* POOL32Axf_4~*(112) */
18477 { reserved_block
, 0 , 0 , 32,
18478 0xfc00ffff, 0x2000e33f, 0 , 0,
18479 0x0 }, /* POOL32Axf_4~*(113) */
18480 { reserved_block
, 0 , 0 , 32,
18481 0xfc00ffff, 0x2000e53f, 0 , 0,
18482 0x0 }, /* POOL32Axf_4~*(114) */
18483 { reserved_block
, 0 , 0 , 32,
18484 0xfc00ffff, 0x2000e73f, 0 , 0,
18485 0x0 }, /* POOL32Axf_4~*(115) */
18486 { reserved_block
, 0 , 0 , 32,
18487 0xfc00ffff, 0x2000e93f, 0 , 0,
18488 0x0 }, /* POOL32Axf_4~*(116) */
18489 { reserved_block
, 0 , 0 , 32,
18490 0xfc00ffff, 0x2000eb3f, 0 , 0,
18491 0x0 }, /* POOL32Axf_4~*(117) */
18492 { reserved_block
, 0 , 0 , 32,
18493 0xfc00ffff, 0x2000ed3f, 0 , 0,
18494 0x0 }, /* POOL32Axf_4~*(118) */
18495 { reserved_block
, 0 , 0 , 32,
18496 0xfc00ffff, 0x2000ef3f, 0 , 0,
18497 0x0 }, /* POOL32Axf_4~*(119) */
18498 { instruction
, 0 , 0 , 32,
18499 0xfc00ffff, 0x2000f13f, &RADDU_W_QB
, 0,
18500 DSP_
}, /* RADDU.W.QB */
18501 { reserved_block
, 0 , 0 , 32,
18502 0xfc00ffff, 0x2000f33f, 0 , 0,
18503 0x0 }, /* POOL32Axf_4~*(121) */
18504 { reserved_block
, 0 , 0 , 32,
18505 0xfc00ffff, 0x2000f53f, 0 , 0,
18506 0x0 }, /* POOL32Axf_4~*(122) */
18507 { reserved_block
, 0 , 0 , 32,
18508 0xfc00ffff, 0x2000f73f, 0 , 0,
18509 0x0 }, /* POOL32Axf_4~*(123) */
18510 { reserved_block
, 0 , 0 , 32,
18511 0xfc00ffff, 0x2000f93f, 0 , 0,
18512 0x0 }, /* POOL32Axf_4~*(124) */
18513 { reserved_block
, 0 , 0 , 32,
18514 0xfc00ffff, 0x2000fb3f, 0 , 0,
18515 0x0 }, /* POOL32Axf_4~*(125) */
18516 { reserved_block
, 0 , 0 , 32,
18517 0xfc00ffff, 0x2000fd3f, 0 , 0,
18518 0x0 }, /* POOL32Axf_4~*(126) */
18519 { reserved_block
, 0 , 0 , 32,
18520 0xfc00ffff, 0x2000ff3f, 0 , 0,
18521 0x0 }, /* POOL32Axf_4~*(127) */
18525 static const Pool POOL32Axf_5_group0
[32] = {
18526 { instruction
, 0 , 0 , 32,
18527 0xfc00ffff, 0x2000017f, &TLBGP
, 0,
18528 CP0_
| VZ_
| TLB_
}, /* TLBGP */
18529 { instruction
, 0 , 0 , 32,
18530 0xfc00ffff, 0x2000037f, &TLBP
, 0,
18531 CP0_
| TLB_
}, /* TLBP */
18532 { instruction
, 0 , 0 , 32,
18533 0xfc00ffff, 0x2000057f, &TLBGINV
, 0,
18534 CP0_
| VZ_
| TLB_
| TLBINV_
}, /* TLBGINV */
18535 { instruction
, 0 , 0 , 32,
18536 0xfc00ffff, 0x2000077f, &TLBINV
, 0,
18537 CP0_
| TLB_
| TLBINV_
}, /* TLBINV */
18538 { reserved_block
, 0 , 0 , 32,
18539 0xfc00ffff, 0x2000097f, 0 , 0,
18540 0x0 }, /* POOL32Axf_5_group0~*(4) */
18541 { reserved_block
, 0 , 0 , 32,
18542 0xfc00ffff, 0x20000b7f, 0 , 0,
18543 0x0 }, /* POOL32Axf_5_group0~*(5) */
18544 { reserved_block
, 0 , 0 , 32,
18545 0xfc00ffff, 0x20000d7f, 0 , 0,
18546 0x0 }, /* POOL32Axf_5_group0~*(6) */
18547 { reserved_block
, 0 , 0 , 32,
18548 0xfc00ffff, 0x20000f7f, 0 , 0,
18549 0x0 }, /* POOL32Axf_5_group0~*(7) */
18550 { instruction
, 0 , 0 , 32,
18551 0xfc00ffff, 0x2000117f, &TLBGR
, 0,
18552 CP0_
| VZ_
| TLB_
}, /* TLBGR */
18553 { instruction
, 0 , 0 , 32,
18554 0xfc00ffff, 0x2000137f, &TLBR
, 0,
18555 CP0_
| TLB_
}, /* TLBR */
18556 { instruction
, 0 , 0 , 32,
18557 0xfc00ffff, 0x2000157f, &TLBGINVF
, 0,
18558 CP0_
| VZ_
| TLB_
| TLBINV_
}, /* TLBGINVF */
18559 { instruction
, 0 , 0 , 32,
18560 0xfc00ffff, 0x2000177f, &TLBINVF
, 0,
18561 CP0_
| TLB_
| TLBINV_
}, /* TLBINVF */
18562 { reserved_block
, 0 , 0 , 32,
18563 0xfc00ffff, 0x2000197f, 0 , 0,
18564 0x0 }, /* POOL32Axf_5_group0~*(12) */
18565 { reserved_block
, 0 , 0 , 32,
18566 0xfc00ffff, 0x20001b7f, 0 , 0,
18567 0x0 }, /* POOL32Axf_5_group0~*(13) */
18568 { reserved_block
, 0 , 0 , 32,
18569 0xfc00ffff, 0x20001d7f, 0 , 0,
18570 0x0 }, /* POOL32Axf_5_group0~*(14) */
18571 { reserved_block
, 0 , 0 , 32,
18572 0xfc00ffff, 0x20001f7f, 0 , 0,
18573 0x0 }, /* POOL32Axf_5_group0~*(15) */
18574 { instruction
, 0 , 0 , 32,
18575 0xfc00ffff, 0x2000217f, &TLBGWI
, 0,
18576 CP0_
| VZ_
| TLB_
}, /* TLBGWI */
18577 { instruction
, 0 , 0 , 32,
18578 0xfc00ffff, 0x2000237f, &TLBWI
, 0,
18579 CP0_
| TLB_
}, /* TLBWI */
18580 { reserved_block
, 0 , 0 , 32,
18581 0xfc00ffff, 0x2000257f, 0 , 0,
18582 0x0 }, /* POOL32Axf_5_group0~*(18) */
18583 { reserved_block
, 0 , 0 , 32,
18584 0xfc00ffff, 0x2000277f, 0 , 0,
18585 0x0 }, /* POOL32Axf_5_group0~*(19) */
18586 { reserved_block
, 0 , 0 , 32,
18587 0xfc00ffff, 0x2000297f, 0 , 0,
18588 0x0 }, /* POOL32Axf_5_group0~*(20) */
18589 { reserved_block
, 0 , 0 , 32,
18590 0xfc00ffff, 0x20002b7f, 0 , 0,
18591 0x0 }, /* POOL32Axf_5_group0~*(21) */
18592 { reserved_block
, 0 , 0 , 32,
18593 0xfc00ffff, 0x20002d7f, 0 , 0,
18594 0x0 }, /* POOL32Axf_5_group0~*(22) */
18595 { reserved_block
, 0 , 0 , 32,
18596 0xfc00ffff, 0x20002f7f, 0 , 0,
18597 0x0 }, /* POOL32Axf_5_group0~*(23) */
18598 { instruction
, 0 , 0 , 32,
18599 0xfc00ffff, 0x2000317f, &TLBGWR
, 0,
18600 CP0_
| VZ_
| TLB_
}, /* TLBGWR */
18601 { instruction
, 0 , 0 , 32,
18602 0xfc00ffff, 0x2000337f, &TLBWR
, 0,
18603 CP0_
| TLB_
}, /* TLBWR */
18604 { reserved_block
, 0 , 0 , 32,
18605 0xfc00ffff, 0x2000357f, 0 , 0,
18606 0x0 }, /* POOL32Axf_5_group0~*(26) */
18607 { reserved_block
, 0 , 0 , 32,
18608 0xfc00ffff, 0x2000377f, 0 , 0,
18609 0x0 }, /* POOL32Axf_5_group0~*(27) */
18610 { reserved_block
, 0 , 0 , 32,
18611 0xfc00ffff, 0x2000397f, 0 , 0,
18612 0x0 }, /* POOL32Axf_5_group0~*(28) */
18613 { reserved_block
, 0 , 0 , 32,
18614 0xfc00ffff, 0x20003b7f, 0 , 0,
18615 0x0 }, /* POOL32Axf_5_group0~*(29) */
18616 { reserved_block
, 0 , 0 , 32,
18617 0xfc00ffff, 0x20003d7f, 0 , 0,
18618 0x0 }, /* POOL32Axf_5_group0~*(30) */
18619 { reserved_block
, 0 , 0 , 32,
18620 0xfc00ffff, 0x20003f7f, 0 , 0,
18621 0x0 }, /* POOL32Axf_5_group0~*(31) */
18625 static const Pool POOL32Axf_5_group1
[32] = {
18626 { reserved_block
, 0 , 0 , 32,
18627 0xfc00ffff, 0x2000417f, 0 , 0,
18628 0x0 }, /* POOL32Axf_5_group1~*(0) */
18629 { reserved_block
, 0 , 0 , 32,
18630 0xfc00ffff, 0x2000437f, 0 , 0,
18631 0x0 }, /* POOL32Axf_5_group1~*(1) */
18632 { reserved_block
, 0 , 0 , 32,
18633 0xfc00ffff, 0x2000457f, 0 , 0,
18634 0x0 }, /* POOL32Axf_5_group1~*(2) */
18635 { instruction
, 0 , 0 , 32,
18636 0xfc00ffff, 0x2000477f, &DI
, 0,
18638 { reserved_block
, 0 , 0 , 32,
18639 0xfc00ffff, 0x2000497f, 0 , 0,
18640 0x0 }, /* POOL32Axf_5_group1~*(4) */
18641 { reserved_block
, 0 , 0 , 32,
18642 0xfc00ffff, 0x20004b7f, 0 , 0,
18643 0x0 }, /* POOL32Axf_5_group1~*(5) */
18644 { reserved_block
, 0 , 0 , 32,
18645 0xfc00ffff, 0x20004d7f, 0 , 0,
18646 0x0 }, /* POOL32Axf_5_group1~*(6) */
18647 { reserved_block
, 0 , 0 , 32,
18648 0xfc00ffff, 0x20004f7f, 0 , 0,
18649 0x0 }, /* POOL32Axf_5_group1~*(7) */
18650 { reserved_block
, 0 , 0 , 32,
18651 0xfc00ffff, 0x2000517f, 0 , 0,
18652 0x0 }, /* POOL32Axf_5_group1~*(8) */
18653 { reserved_block
, 0 , 0 , 32,
18654 0xfc00ffff, 0x2000537f, 0 , 0,
18655 0x0 }, /* POOL32Axf_5_group1~*(9) */
18656 { reserved_block
, 0 , 0 , 32,
18657 0xfc00ffff, 0x2000557f, 0 , 0,
18658 0x0 }, /* POOL32Axf_5_group1~*(10) */
18659 { instruction
, 0 , 0 , 32,
18660 0xfc00ffff, 0x2000577f, &EI
, 0,
18662 { reserved_block
, 0 , 0 , 32,
18663 0xfc00ffff, 0x2000597f, 0 , 0,
18664 0x0 }, /* POOL32Axf_5_group1~*(12) */
18665 { reserved_block
, 0 , 0 , 32,
18666 0xfc00ffff, 0x20005b7f, 0 , 0,
18667 0x0 }, /* POOL32Axf_5_group1~*(13) */
18668 { reserved_block
, 0 , 0 , 32,
18669 0xfc00ffff, 0x20005d7f, 0 , 0,
18670 0x0 }, /* POOL32Axf_5_group1~*(14) */
18671 { reserved_block
, 0 , 0 , 32,
18672 0xfc00ffff, 0x20005f7f, 0 , 0,
18673 0x0 }, /* POOL32Axf_5_group1~*(15) */
18674 { reserved_block
, 0 , 0 , 32,
18675 0xfc00ffff, 0x2000617f, 0 , 0,
18676 0x0 }, /* POOL32Axf_5_group1~*(16) */
18677 { reserved_block
, 0 , 0 , 32,
18678 0xfc00ffff, 0x2000637f, 0 , 0,
18679 0x0 }, /* POOL32Axf_5_group1~*(17) */
18680 { reserved_block
, 0 , 0 , 32,
18681 0xfc00ffff, 0x2000657f, 0 , 0,
18682 0x0 }, /* POOL32Axf_5_group1~*(18) */
18683 { reserved_block
, 0 , 0 , 32,
18684 0xfc00ffff, 0x2000677f, 0 , 0,
18685 0x0 }, /* POOL32Axf_5_group1~*(19) */
18686 { reserved_block
, 0 , 0 , 32,
18687 0xfc00ffff, 0x2000697f, 0 , 0,
18688 0x0 }, /* POOL32Axf_5_group1~*(20) */
18689 { reserved_block
, 0 , 0 , 32,
18690 0xfc00ffff, 0x20006b7f, 0 , 0,
18691 0x0 }, /* POOL32Axf_5_group1~*(21) */
18692 { reserved_block
, 0 , 0 , 32,
18693 0xfc00ffff, 0x20006d7f, 0 , 0,
18694 0x0 }, /* POOL32Axf_5_group1~*(22) */
18695 { reserved_block
, 0 , 0 , 32,
18696 0xfc00ffff, 0x20006f7f, 0 , 0,
18697 0x0 }, /* POOL32Axf_5_group1~*(23) */
18698 { reserved_block
, 0 , 0 , 32,
18699 0xfc00ffff, 0x2000717f, 0 , 0,
18700 0x0 }, /* POOL32Axf_5_group1~*(24) */
18701 { reserved_block
, 0 , 0 , 32,
18702 0xfc00ffff, 0x2000737f, 0 , 0,
18703 0x0 }, /* POOL32Axf_5_group1~*(25) */
18704 { reserved_block
, 0 , 0 , 32,
18705 0xfc00ffff, 0x2000757f, 0 , 0,
18706 0x0 }, /* POOL32Axf_5_group1~*(26) */
18707 { reserved_block
, 0 , 0 , 32,
18708 0xfc00ffff, 0x2000777f, 0 , 0,
18709 0x0 }, /* POOL32Axf_5_group1~*(27) */
18710 { reserved_block
, 0 , 0 , 32,
18711 0xfc00ffff, 0x2000797f, 0 , 0,
18712 0x0 }, /* POOL32Axf_5_group1~*(28) */
18713 { reserved_block
, 0 , 0 , 32,
18714 0xfc00ffff, 0x20007b7f, 0 , 0,
18715 0x0 }, /* POOL32Axf_5_group1~*(29) */
18716 { reserved_block
, 0 , 0 , 32,
18717 0xfc00ffff, 0x20007d7f, 0 , 0,
18718 0x0 }, /* POOL32Axf_5_group1~*(30) */
18719 { reserved_block
, 0 , 0 , 32,
18720 0xfc00ffff, 0x20007f7f, 0 , 0,
18721 0x0 }, /* POOL32Axf_5_group1~*(31) */
18725 static const Pool ERETx
[2] = {
18726 { instruction
, 0 , 0 , 32,
18727 0xfc01ffff, 0x2000f37f, &ERET
, 0,
18729 { instruction
, 0 , 0 , 32,
18730 0xfc01ffff, 0x2001f37f, &ERETNC
, 0,
18731 0x0 }, /* ERETNC */
18735 static const Pool POOL32Axf_5_group3
[32] = {
18736 { reserved_block
, 0 , 0 , 32,
18737 0xfc00ffff, 0x2000c17f, 0 , 0,
18738 0x0 }, /* POOL32Axf_5_group3~*(0) */
18739 { instruction
, 0 , 0 , 32,
18740 0xfc00ffff, 0x2000c37f, &WAIT
, 0,
18742 { reserved_block
, 0 , 0 , 32,
18743 0xfc00ffff, 0x2000c57f, 0 , 0,
18744 0x0 }, /* POOL32Axf_5_group3~*(2) */
18745 { reserved_block
, 0 , 0 , 32,
18746 0xfc00ffff, 0x2000c77f, 0 , 0,
18747 0x0 }, /* POOL32Axf_5_group3~*(3) */
18748 { reserved_block
, 0 , 0 , 32,
18749 0xfc00ffff, 0x2000c97f, 0 , 0,
18750 0x0 }, /* POOL32Axf_5_group3~*(4) */
18751 { reserved_block
, 0 , 0 , 32,
18752 0xfc00ffff, 0x2000cb7f, 0 , 0,
18753 0x0 }, /* POOL32Axf_5_group3~*(5) */
18754 { reserved_block
, 0 , 0 , 32,
18755 0xfc00ffff, 0x2000cd7f, 0 , 0,
18756 0x0 }, /* POOL32Axf_5_group3~*(6) */
18757 { reserved_block
, 0 , 0 , 32,
18758 0xfc00ffff, 0x2000cf7f, 0 , 0,
18759 0x0 }, /* POOL32Axf_5_group3~*(7) */
18760 { reserved_block
, 0 , 0 , 32,
18761 0xfc00ffff, 0x2000d17f, 0 , 0,
18762 0x0 }, /* POOL32Axf_5_group3~*(8) */
18763 { instruction
, 0 , 0 , 32,
18764 0xfc00ffff, 0x2000d37f, &IRET
, 0,
18766 { reserved_block
, 0 , 0 , 32,
18767 0xfc00ffff, 0x2000d57f, 0 , 0,
18768 0x0 }, /* POOL32Axf_5_group3~*(10) */
18769 { reserved_block
, 0 , 0 , 32,
18770 0xfc00ffff, 0x2000d77f, 0 , 0,
18771 0x0 }, /* POOL32Axf_5_group3~*(11) */
18772 { reserved_block
, 0 , 0 , 32,
18773 0xfc00ffff, 0x2000d97f, 0 , 0,
18774 0x0 }, /* POOL32Axf_5_group3~*(12) */
18775 { reserved_block
, 0 , 0 , 32,
18776 0xfc00ffff, 0x2000db7f, 0 , 0,
18777 0x0 }, /* POOL32Axf_5_group3~*(13) */
18778 { reserved_block
, 0 , 0 , 32,
18779 0xfc00ffff, 0x2000dd7f, 0 , 0,
18780 0x0 }, /* POOL32Axf_5_group3~*(14) */
18781 { reserved_block
, 0 , 0 , 32,
18782 0xfc00ffff, 0x2000df7f, 0 , 0,
18783 0x0 }, /* POOL32Axf_5_group3~*(15) */
18784 { instruction
, 0 , 0 , 32,
18785 0xfc00ffff, 0x2000e17f, &RDPGPR
, 0,
18786 CP0_
}, /* RDPGPR */
18787 { instruction
, 0 , 0 , 32,
18788 0xfc00ffff, 0x2000e37f, &DERET
, 0,
18789 EJTAG_
}, /* DERET */
18790 { reserved_block
, 0 , 0 , 32,
18791 0xfc00ffff, 0x2000e57f, 0 , 0,
18792 0x0 }, /* POOL32Axf_5_group3~*(18) */
18793 { reserved_block
, 0 , 0 , 32,
18794 0xfc00ffff, 0x2000e77f, 0 , 0,
18795 0x0 }, /* POOL32Axf_5_group3~*(19) */
18796 { reserved_block
, 0 , 0 , 32,
18797 0xfc00ffff, 0x2000e97f, 0 , 0,
18798 0x0 }, /* POOL32Axf_5_group3~*(20) */
18799 { reserved_block
, 0 , 0 , 32,
18800 0xfc00ffff, 0x2000eb7f, 0 , 0,
18801 0x0 }, /* POOL32Axf_5_group3~*(21) */
18802 { reserved_block
, 0 , 0 , 32,
18803 0xfc00ffff, 0x2000ed7f, 0 , 0,
18804 0x0 }, /* POOL32Axf_5_group3~*(22) */
18805 { reserved_block
, 0 , 0 , 32,
18806 0xfc00ffff, 0x2000ef7f, 0 , 0,
18807 0x0 }, /* POOL32Axf_5_group3~*(23) */
18808 { instruction
, 0 , 0 , 32,
18809 0xfc00ffff, 0x2000f17f, &WRPGPR
, 0,
18810 CP0_
}, /* WRPGPR */
18811 { pool
, ERETx
, 2 , 32,
18812 0xfc00ffff, 0x2000f37f, 0 , 0,
18814 { reserved_block
, 0 , 0 , 32,
18815 0xfc00ffff, 0x2000f57f, 0 , 0,
18816 0x0 }, /* POOL32Axf_5_group3~*(26) */
18817 { reserved_block
, 0 , 0 , 32,
18818 0xfc00ffff, 0x2000f77f, 0 , 0,
18819 0x0 }, /* POOL32Axf_5_group3~*(27) */
18820 { reserved_block
, 0 , 0 , 32,
18821 0xfc00ffff, 0x2000f97f, 0 , 0,
18822 0x0 }, /* POOL32Axf_5_group3~*(28) */
18823 { reserved_block
, 0 , 0 , 32,
18824 0xfc00ffff, 0x2000fb7f, 0 , 0,
18825 0x0 }, /* POOL32Axf_5_group3~*(29) */
18826 { reserved_block
, 0 , 0 , 32,
18827 0xfc00ffff, 0x2000fd7f, 0 , 0,
18828 0x0 }, /* POOL32Axf_5_group3~*(30) */
18829 { reserved_block
, 0 , 0 , 32,
18830 0xfc00ffff, 0x2000ff7f, 0 , 0,
18831 0x0 }, /* POOL32Axf_5_group3~*(31) */
18835 static const Pool POOL32Axf_5
[4] = {
18836 { pool
, POOL32Axf_5_group0
, 32 , 32,
18837 0xfc00c1ff, 0x2000017f, 0 , 0,
18838 0x0 }, /* POOL32Axf_5_group0 */
18839 { pool
, POOL32Axf_5_group1
, 32 , 32,
18840 0xfc00c1ff, 0x2000417f, 0 , 0,
18841 0x0 }, /* POOL32Axf_5_group1 */
18842 { reserved_block
, 0 , 0 , 32,
18843 0xfc00c1ff, 0x2000817f, 0 , 0,
18844 0x0 }, /* POOL32Axf_5~*(2) */
18845 { pool
, POOL32Axf_5_group3
, 32 , 32,
18846 0xfc00c1ff, 0x2000c17f, 0 , 0,
18847 0x0 }, /* POOL32Axf_5_group3 */
18851 static const Pool SHRA__R__QB
[2] = {
18852 { instruction
, 0 , 0 , 32,
18853 0xfc001fff, 0x200001ff, &SHRA_QB
, 0,
18854 DSP_
}, /* SHRA.QB */
18855 { instruction
, 0 , 0 , 32,
18856 0xfc001fff, 0x200011ff, &SHRA_R_QB
, 0,
18857 DSP_
}, /* SHRA_R.QB */
18861 static const Pool POOL32Axf_7
[8] = {
18862 { pool
, SHRA__R__QB
, 2 , 32,
18863 0xfc000fff, 0x200001ff, 0 , 0,
18864 0x0 }, /* SHRA[_R].QB */
18865 { instruction
, 0 , 0 , 32,
18866 0xfc000fff, 0x200003ff, &SHRL_PH
, 0,
18867 DSP_
}, /* SHRL.PH */
18868 { instruction
, 0 , 0 , 32,
18869 0xfc000fff, 0x200005ff, &REPL_QB
, 0,
18870 DSP_
}, /* REPL.QB */
18871 { reserved_block
, 0 , 0 , 32,
18872 0xfc000fff, 0x200007ff, 0 , 0,
18873 0x0 }, /* POOL32Axf_7~*(3) */
18874 { reserved_block
, 0 , 0 , 32,
18875 0xfc000fff, 0x200009ff, 0 , 0,
18876 0x0 }, /* POOL32Axf_7~*(4) */
18877 { reserved_block
, 0 , 0 , 32,
18878 0xfc000fff, 0x20000bff, 0 , 0,
18879 0x0 }, /* POOL32Axf_7~*(5) */
18880 { reserved_block
, 0 , 0 , 32,
18881 0xfc000fff, 0x20000dff, 0 , 0,
18882 0x0 }, /* POOL32Axf_7~*(6) */
18883 { reserved_block
, 0 , 0 , 32,
18884 0xfc000fff, 0x20000fff, 0 , 0,
18885 0x0 }, /* POOL32Axf_7~*(7) */
18889 static const Pool POOL32Axf
[8] = {
18890 { reserved_block
, 0 , 0 , 32,
18891 0xfc0001ff, 0x2000003f, 0 , 0,
18892 0x0 }, /* POOL32Axf~*(0) */
18893 { pool
, POOL32Axf_1
, 8 , 32,
18894 0xfc0001ff, 0x2000007f, 0 , 0,
18895 0x0 }, /* POOL32Axf_1 */
18896 { pool
, POOL32Axf_2
, 4 , 32,
18897 0xfc0001ff, 0x200000bf, 0 , 0,
18898 0x0 }, /* POOL32Axf_2 */
18899 { reserved_block
, 0 , 0 , 32,
18900 0xfc0001ff, 0x200000ff, 0 , 0,
18901 0x0 }, /* POOL32Axf~*(3) */
18902 { pool
, POOL32Axf_4
, 128 , 32,
18903 0xfc0001ff, 0x2000013f, 0 , 0,
18904 0x0 }, /* POOL32Axf_4 */
18905 { pool
, POOL32Axf_5
, 4 , 32,
18906 0xfc0001ff, 0x2000017f, 0 , 0,
18907 0x0 }, /* POOL32Axf_5 */
18908 { reserved_block
, 0 , 0 , 32,
18909 0xfc0001ff, 0x200001bf, 0 , 0,
18910 0x0 }, /* POOL32Axf~*(6) */
18911 { pool
, POOL32Axf_7
, 8 , 32,
18912 0xfc0001ff, 0x200001ff, 0 , 0,
18913 0x0 }, /* POOL32Axf_7 */
18917 static const Pool _POOL32A7
[8] = {
18918 { pool
, P_LSX
, 2 , 32,
18919 0xfc00003f, 0x20000007, 0 , 0,
18921 { instruction
, 0 , 0 , 32,
18922 0xfc00003f, 0x2000000f, &LSA
, 0,
18924 { reserved_block
, 0 , 0 , 32,
18925 0xfc00003f, 0x20000017, 0 , 0,
18926 0x0 }, /* _POOL32A7~*(2) */
18927 { instruction
, 0 , 0 , 32,
18928 0xfc00003f, 0x2000001f, &EXTW
, 0,
18930 { reserved_block
, 0 , 0 , 32,
18931 0xfc00003f, 0x20000027, 0 , 0,
18932 0x0 }, /* _POOL32A7~*(4) */
18933 { reserved_block
, 0 , 0 , 32,
18934 0xfc00003f, 0x2000002f, 0 , 0,
18935 0x0 }, /* _POOL32A7~*(5) */
18936 { reserved_block
, 0 , 0 , 32,
18937 0xfc00003f, 0x20000037, 0 , 0,
18938 0x0 }, /* _POOL32A7~*(6) */
18939 { pool
, POOL32Axf
, 8 , 32,
18940 0xfc00003f, 0x2000003f, 0 , 0,
18941 0x0 }, /* POOL32Axf */
18945 static const Pool P32A
[8] = {
18946 { pool
, _POOL32A0
, 128 , 32,
18947 0xfc000007, 0x20000000, 0 , 0,
18948 0x0 }, /* _POOL32A0 */
18949 { instruction
, 0 , 0 , 32,
18950 0xfc000007, 0x20000001, &SPECIAL2
, 0,
18951 UDI_
}, /* SPECIAL2 */
18952 { instruction
, 0 , 0 , 32,
18953 0xfc000007, 0x20000002, &COP2_1
, 0,
18954 CP2_
}, /* COP2_1 */
18955 { instruction
, 0 , 0 , 32,
18956 0xfc000007, 0x20000003, &UDI
, 0,
18958 { reserved_block
, 0 , 0 , 32,
18959 0xfc000007, 0x20000004, 0 , 0,
18960 0x0 }, /* P32A~*(4) */
18961 { pool
, _POOL32A5
, 128 , 32,
18962 0xfc000007, 0x20000005, 0 , 0,
18963 0x0 }, /* _POOL32A5 */
18964 { reserved_block
, 0 , 0 , 32,
18965 0xfc000007, 0x20000006, 0 , 0,
18966 0x0 }, /* P32A~*(6) */
18967 { pool
, _POOL32A7
, 8 , 32,
18968 0xfc000007, 0x20000007, 0 , 0,
18969 0x0 }, /* _POOL32A7 */
18973 static const Pool P_GP_D
[2] = {
18974 { instruction
, 0 , 0 , 32,
18975 0xfc000007, 0x40000001, &LD_GP_
, 0,
18976 MIPS64_
}, /* LD[GP] */
18977 { instruction
, 0 , 0 , 32,
18978 0xfc000007, 0x40000005, &SD_GP_
, 0,
18979 MIPS64_
}, /* SD[GP] */
18983 static const Pool P_GP_W
[4] = {
18984 { instruction
, 0 , 0 , 32,
18985 0xfc000003, 0x40000000, &ADDIU_GP_W_
, 0,
18986 0x0 }, /* ADDIU[GP.W] */
18987 { pool
, P_GP_D
, 2 , 32,
18988 0xfc000003, 0x40000001, 0 , 0,
18989 0x0 }, /* P.GP.D */
18990 { instruction
, 0 , 0 , 32,
18991 0xfc000003, 0x40000002, &LW_GP_
, 0,
18992 0x0 }, /* LW[GP] */
18993 { instruction
, 0 , 0 , 32,
18994 0xfc000003, 0x40000003, &SW_GP_
, 0,
18995 0x0 }, /* SW[GP] */
18999 static const Pool POOL48I
[32] = {
19000 { instruction
, 0 , 0 , 48,
19001 0xfc1f00000000ull
, 0x600000000000ull
, &LI_48_
, 0,
19002 XMMS_
}, /* LI[48] */
19003 { instruction
, 0 , 0 , 48,
19004 0xfc1f00000000ull
, 0x600100000000ull
, &ADDIU_48_
, 0,
19005 XMMS_
}, /* ADDIU[48] */
19006 { instruction
, 0 , 0 , 48,
19007 0xfc1f00000000ull
, 0x600200000000ull
, &ADDIU_GP48_
, 0,
19008 XMMS_
}, /* ADDIU[GP48] */
19009 { instruction
, 0 , 0 , 48,
19010 0xfc1f00000000ull
, 0x600300000000ull
, &ADDIUPC_48_
, 0,
19011 XMMS_
}, /* ADDIUPC[48] */
19012 { reserved_block
, 0 , 0 , 48,
19013 0xfc1f00000000ull
, 0x600400000000ull
, 0 , 0,
19014 0x0 }, /* POOL48I~*(4) */
19015 { reserved_block
, 0 , 0 , 48,
19016 0xfc1f00000000ull
, 0x600500000000ull
, 0 , 0,
19017 0x0 }, /* POOL48I~*(5) */
19018 { reserved_block
, 0 , 0 , 48,
19019 0xfc1f00000000ull
, 0x600600000000ull
, 0 , 0,
19020 0x0 }, /* POOL48I~*(6) */
19021 { reserved_block
, 0 , 0 , 48,
19022 0xfc1f00000000ull
, 0x600700000000ull
, 0 , 0,
19023 0x0 }, /* POOL48I~*(7) */
19024 { reserved_block
, 0 , 0 , 48,
19025 0xfc1f00000000ull
, 0x600800000000ull
, 0 , 0,
19026 0x0 }, /* POOL48I~*(8) */
19027 { reserved_block
, 0 , 0 , 48,
19028 0xfc1f00000000ull
, 0x600900000000ull
, 0 , 0,
19029 0x0 }, /* POOL48I~*(9) */
19030 { reserved_block
, 0 , 0 , 48,
19031 0xfc1f00000000ull
, 0x600a00000000ull
, 0 , 0,
19032 0x0 }, /* POOL48I~*(10) */
19033 { instruction
, 0 , 0 , 48,
19034 0xfc1f00000000ull
, 0x600b00000000ull
, &LWPC_48_
, 0,
19035 XMMS_
}, /* LWPC[48] */
19036 { reserved_block
, 0 , 0 , 48,
19037 0xfc1f00000000ull
, 0x600c00000000ull
, 0 , 0,
19038 0x0 }, /* POOL48I~*(12) */
19039 { reserved_block
, 0 , 0 , 48,
19040 0xfc1f00000000ull
, 0x600d00000000ull
, 0 , 0,
19041 0x0 }, /* POOL48I~*(13) */
19042 { reserved_block
, 0 , 0 , 48,
19043 0xfc1f00000000ull
, 0x600e00000000ull
, 0 , 0,
19044 0x0 }, /* POOL48I~*(14) */
19045 { instruction
, 0 , 0 , 48,
19046 0xfc1f00000000ull
, 0x600f00000000ull
, &SWPC_48_
, 0,
19047 XMMS_
}, /* SWPC[48] */
19048 { reserved_block
, 0 , 0 , 48,
19049 0xfc1f00000000ull
, 0x601000000000ull
, 0 , 0,
19050 0x0 }, /* POOL48I~*(16) */
19051 { instruction
, 0 , 0 , 48,
19052 0xfc1f00000000ull
, 0x601100000000ull
, &DADDIU_48_
, 0,
19053 MIPS64_
}, /* DADDIU[48] */
19054 { reserved_block
, 0 , 0 , 48,
19055 0xfc1f00000000ull
, 0x601200000000ull
, 0 , 0,
19056 0x0 }, /* POOL48I~*(18) */
19057 { reserved_block
, 0 , 0 , 48,
19058 0xfc1f00000000ull
, 0x601300000000ull
, 0 , 0,
19059 0x0 }, /* POOL48I~*(19) */
19060 { instruction
, 0 , 0 , 48,
19061 0xfc1f00000000ull
, 0x601400000000ull
, &DLUI_48_
, 0,
19062 MIPS64_
}, /* DLUI[48] */
19063 { reserved_block
, 0 , 0 , 48,
19064 0xfc1f00000000ull
, 0x601500000000ull
, 0 , 0,
19065 0x0 }, /* POOL48I~*(21) */
19066 { reserved_block
, 0 , 0 , 48,
19067 0xfc1f00000000ull
, 0x601600000000ull
, 0 , 0,
19068 0x0 }, /* POOL48I~*(22) */
19069 { reserved_block
, 0 , 0 , 48,
19070 0xfc1f00000000ull
, 0x601700000000ull
, 0 , 0,
19071 0x0 }, /* POOL48I~*(23) */
19072 { reserved_block
, 0 , 0 , 48,
19073 0xfc1f00000000ull
, 0x601800000000ull
, 0 , 0,
19074 0x0 }, /* POOL48I~*(24) */
19075 { reserved_block
, 0 , 0 , 48,
19076 0xfc1f00000000ull
, 0x601900000000ull
, 0 , 0,
19077 0x0 }, /* POOL48I~*(25) */
19078 { reserved_block
, 0 , 0 , 48,
19079 0xfc1f00000000ull
, 0x601a00000000ull
, 0 , 0,
19080 0x0 }, /* POOL48I~*(26) */
19081 { instruction
, 0 , 0 , 48,
19082 0xfc1f00000000ull
, 0x601b00000000ull
, &LDPC_48_
, 0,
19083 MIPS64_
}, /* LDPC[48] */
19084 { reserved_block
, 0 , 0 , 48,
19085 0xfc1f00000000ull
, 0x601c00000000ull
, 0 , 0,
19086 0x0 }, /* POOL48I~*(28) */
19087 { reserved_block
, 0 , 0 , 48,
19088 0xfc1f00000000ull
, 0x601d00000000ull
, 0 , 0,
19089 0x0 }, /* POOL48I~*(29) */
19090 { reserved_block
, 0 , 0 , 48,
19091 0xfc1f00000000ull
, 0x601e00000000ull
, 0 , 0,
19092 0x0 }, /* POOL48I~*(30) */
19093 { instruction
, 0 , 0 , 48,
19094 0xfc1f00000000ull
, 0x601f00000000ull
, &SDPC_48_
, 0,
19095 MIPS64_
}, /* SDPC[48] */
19099 static const Pool PP_SR
[4] = {
19100 { instruction
, 0 , 0 , 32,
19101 0xfc10f003, 0x80003000, &SAVE_32_
, 0,
19102 0x0 }, /* SAVE[32] */
19103 { reserved_block
, 0 , 0 , 32,
19104 0xfc10f003, 0x80003001, 0 , 0,
19105 0x0 }, /* PP.SR~*(1) */
19106 { instruction
, 0 , 0 , 32,
19107 0xfc10f003, 0x80003002, &RESTORE_32_
, 0,
19108 0x0 }, /* RESTORE[32] */
19109 { return_instruction
, 0 , 0 , 32,
19110 0xfc10f003, 0x80003003, &RESTORE_JRC_32_
, 0,
19111 0x0 }, /* RESTORE.JRC[32] */
19115 static const Pool P_SR_F
[8] = {
19116 { instruction
, 0 , 0 , 32,
19117 0xfc10f007, 0x80103000, &SAVEF
, 0,
19118 CP1_
}, /* SAVEF */
19119 { instruction
, 0 , 0 , 32,
19120 0xfc10f007, 0x80103001, &RESTOREF
, 0,
19121 CP1_
}, /* RESTOREF */
19122 { reserved_block
, 0 , 0 , 32,
19123 0xfc10f007, 0x80103002, 0 , 0,
19124 0x0 }, /* P.SR.F~*(2) */
19125 { reserved_block
, 0 , 0 , 32,
19126 0xfc10f007, 0x80103003, 0 , 0,
19127 0x0 }, /* P.SR.F~*(3) */
19128 { reserved_block
, 0 , 0 , 32,
19129 0xfc10f007, 0x80103004, 0 , 0,
19130 0x0 }, /* P.SR.F~*(4) */
19131 { reserved_block
, 0 , 0 , 32,
19132 0xfc10f007, 0x80103005, 0 , 0,
19133 0x0 }, /* P.SR.F~*(5) */
19134 { reserved_block
, 0 , 0 , 32,
19135 0xfc10f007, 0x80103006, 0 , 0,
19136 0x0 }, /* P.SR.F~*(6) */
19137 { reserved_block
, 0 , 0 , 32,
19138 0xfc10f007, 0x80103007, 0 , 0,
19139 0x0 }, /* P.SR.F~*(7) */
19143 static const Pool P_SR
[2] = {
19144 { pool
, PP_SR
, 4 , 32,
19145 0xfc10f000, 0x80003000, 0 , 0,
19147 { pool
, P_SR_F
, 8 , 32,
19148 0xfc10f000, 0x80103000, 0 , 0,
19149 0x0 }, /* P.SR.F */
19153 static const Pool P_SLL
[5] = {
19154 { instruction
, 0 , 0 , 32,
19155 0xffe0f1ff, 0x8000c000, &NOP_32_
, 0,
19156 0x0 }, /* NOP[32] */
19157 { instruction
, 0 , 0 , 32,
19158 0xffe0f1ff, 0x8000c003, &EHB
, 0,
19160 { instruction
, 0 , 0 , 32,
19161 0xffe0f1ff, 0x8000c005, &PAUSE
, 0,
19163 { instruction
, 0 , 0 , 32,
19164 0xffe0f1ff, 0x8000c006, &SYNC
, 0,
19166 { instruction
, 0 , 0 , 32,
19167 0xfc00f1e0, 0x8000c000, &SLL_32_
, 0,
19168 0x0 }, /* SLL[32] */
19172 static const Pool P_SHIFT
[16] = {
19173 { pool
, P_SLL
, 5 , 32,
19174 0xfc00f1e0, 0x8000c000, 0 , 0,
19176 { reserved_block
, 0 , 0 , 32,
19177 0xfc00f1e0, 0x8000c020, 0 , 0,
19178 0x0 }, /* P.SHIFT~*(1) */
19179 { instruction
, 0 , 0 , 32,
19180 0xfc00f1e0, 0x8000c040, &SRL_32_
, 0,
19181 0x0 }, /* SRL[32] */
19182 { reserved_block
, 0 , 0 , 32,
19183 0xfc00f1e0, 0x8000c060, 0 , 0,
19184 0x0 }, /* P.SHIFT~*(3) */
19185 { instruction
, 0 , 0 , 32,
19186 0xfc00f1e0, 0x8000c080, &SRA
, 0,
19188 { reserved_block
, 0 , 0 , 32,
19189 0xfc00f1e0, 0x8000c0a0, 0 , 0,
19190 0x0 }, /* P.SHIFT~*(5) */
19191 { instruction
, 0 , 0 , 32,
19192 0xfc00f1e0, 0x8000c0c0, &ROTR
, 0,
19194 { reserved_block
, 0 , 0 , 32,
19195 0xfc00f1e0, 0x8000c0e0, 0 , 0,
19196 0x0 }, /* P.SHIFT~*(7) */
19197 { instruction
, 0 , 0 , 32,
19198 0xfc00f1e0, 0x8000c100, &DSLL
, 0,
19199 MIPS64_
}, /* DSLL */
19200 { instruction
, 0 , 0 , 32,
19201 0xfc00f1e0, 0x8000c120, &DSLL32
, 0,
19202 MIPS64_
}, /* DSLL32 */
19203 { instruction
, 0 , 0 , 32,
19204 0xfc00f1e0, 0x8000c140, &DSRL
, 0,
19205 MIPS64_
}, /* DSRL */
19206 { instruction
, 0 , 0 , 32,
19207 0xfc00f1e0, 0x8000c160, &DSRL32
, 0,
19208 MIPS64_
}, /* DSRL32 */
19209 { instruction
, 0 , 0 , 32,
19210 0xfc00f1e0, 0x8000c180, &DSRA
, 0,
19211 MIPS64_
}, /* DSRA */
19212 { instruction
, 0 , 0 , 32,
19213 0xfc00f1e0, 0x8000c1a0, &DSRA32
, 0,
19214 MIPS64_
}, /* DSRA32 */
19215 { instruction
, 0 , 0 , 32,
19216 0xfc00f1e0, 0x8000c1c0, &DROTR
, 0,
19217 MIPS64_
}, /* DROTR */
19218 { instruction
, 0 , 0 , 32,
19219 0xfc00f1e0, 0x8000c1e0, &DROTR32
, 0,
19220 MIPS64_
}, /* DROTR32 */
19224 static const Pool P_ROTX
[4] = {
19225 { instruction
, 0 , 0 , 32,
19226 0xfc00f820, 0x8000d000, &ROTX
, 0,
19227 XMMS_
}, /* ROTX */
19228 { reserved_block
, 0 , 0 , 32,
19229 0xfc00f820, 0x8000d020, 0 , 0,
19230 0x0 }, /* P.ROTX~*(1) */
19231 { reserved_block
, 0 , 0 , 32,
19232 0xfc00f820, 0x8000d800, 0 , 0,
19233 0x0 }, /* P.ROTX~*(2) */
19234 { reserved_block
, 0 , 0 , 32,
19235 0xfc00f820, 0x8000d820, 0 , 0,
19236 0x0 }, /* P.ROTX~*(3) */
19240 static const Pool P_INS
[4] = {
19241 { instruction
, 0 , 0 , 32,
19242 0xfc00f820, 0x8000e000, &INS
, 0,
19244 { instruction
, 0 , 0 , 32,
19245 0xfc00f820, 0x8000e020, &DINSU
, 0,
19246 MIPS64_
}, /* DINSU */
19247 { instruction
, 0 , 0 , 32,
19248 0xfc00f820, 0x8000e800, &DINSM
, 0,
19249 MIPS64_
}, /* DINSM */
19250 { instruction
, 0 , 0 , 32,
19251 0xfc00f820, 0x8000e820, &DINS
, 0,
19252 MIPS64_
}, /* DINS */
19256 static const Pool P_EXT
[4] = {
19257 { instruction
, 0 , 0 , 32,
19258 0xfc00f820, 0x8000f000, &EXT
, 0,
19260 { instruction
, 0 , 0 , 32,
19261 0xfc00f820, 0x8000f020, &DEXTU
, 0,
19262 MIPS64_
}, /* DEXTU */
19263 { instruction
, 0 , 0 , 32,
19264 0xfc00f820, 0x8000f800, &DEXTM
, 0,
19265 MIPS64_
}, /* DEXTM */
19266 { instruction
, 0 , 0 , 32,
19267 0xfc00f820, 0x8000f820, &DEXT
, 0,
19268 MIPS64_
}, /* DEXT */
19272 static const Pool P_U12
[16] = {
19273 { instruction
, 0 , 0 , 32,
19274 0xfc00f000, 0x80000000, &ORI
, 0,
19276 { instruction
, 0 , 0 , 32,
19277 0xfc00f000, 0x80001000, &XORI
, 0,
19279 { instruction
, 0 , 0 , 32,
19280 0xfc00f000, 0x80002000, &ANDI_32_
, 0,
19281 0x0 }, /* ANDI[32] */
19282 { pool
, P_SR
, 2 , 32,
19283 0xfc00f000, 0x80003000, 0 , 0,
19285 { instruction
, 0 , 0 , 32,
19286 0xfc00f000, 0x80004000, &SLTI
, 0,
19288 { instruction
, 0 , 0 , 32,
19289 0xfc00f000, 0x80005000, &SLTIU
, 0,
19291 { instruction
, 0 , 0 , 32,
19292 0xfc00f000, 0x80006000, &SEQI
, 0,
19294 { reserved_block
, 0 , 0 , 32,
19295 0xfc00f000, 0x80007000, 0 , 0,
19296 0x0 }, /* P.U12~*(7) */
19297 { instruction
, 0 , 0 , 32,
19298 0xfc00f000, 0x80008000, &ADDIU_NEG_
, 0,
19299 0x0 }, /* ADDIU[NEG] */
19300 { instruction
, 0 , 0 , 32,
19301 0xfc00f000, 0x80009000, &DADDIU_U12_
, 0,
19302 MIPS64_
}, /* DADDIU[U12] */
19303 { instruction
, 0 , 0 , 32,
19304 0xfc00f000, 0x8000a000, &DADDIU_NEG_
, 0,
19305 MIPS64_
}, /* DADDIU[NEG] */
19306 { instruction
, 0 , 0 , 32,
19307 0xfc00f000, 0x8000b000, &DROTX
, 0,
19308 MIPS64_
}, /* DROTX */
19309 { pool
, P_SHIFT
, 16 , 32,
19310 0xfc00f000, 0x8000c000, 0 , 0,
19311 0x0 }, /* P.SHIFT */
19312 { pool
, P_ROTX
, 4 , 32,
19313 0xfc00f000, 0x8000d000, 0 , 0,
19314 0x0 }, /* P.ROTX */
19315 { pool
, P_INS
, 4 , 32,
19316 0xfc00f000, 0x8000e000, 0 , 0,
19318 { pool
, P_EXT
, 4 , 32,
19319 0xfc00f000, 0x8000f000, 0 , 0,
19324 static const Pool RINT_fmt
[2] = {
19325 { instruction
, 0 , 0 , 32,
19326 0xfc0003ff, 0xa0000020, &RINT_S
, 0,
19327 CP1_
}, /* RINT.S */
19328 { instruction
, 0 , 0 , 32,
19329 0xfc0003ff, 0xa0000220, &RINT_D
, 0,
19330 CP1_
}, /* RINT.D */
19334 static const Pool ADD_fmt0
[2] = {
19335 { instruction
, 0 , 0 , 32,
19336 0xfc0003ff, 0xa0000030, &ADD_S
, 0,
19337 CP1_
}, /* ADD.S */
19338 { reserved_block
, 0 , 0 , 32,
19339 0xfc0003ff, 0xa0000230, 0 , 0,
19340 CP1_
}, /* ADD.fmt0~*(1) */
19344 static const Pool SELEQZ_fmt
[2] = {
19345 { instruction
, 0 , 0 , 32,
19346 0xfc0003ff, 0xa0000038, &SELEQZ_S
, 0,
19347 CP1_
}, /* SELEQZ.S */
19348 { instruction
, 0 , 0 , 32,
19349 0xfc0003ff, 0xa0000238, &SELEQZ_D
, 0,
19350 CP1_
}, /* SELEQZ.D */
19354 static const Pool CLASS_fmt
[2] = {
19355 { instruction
, 0 , 0 , 32,
19356 0xfc0003ff, 0xa0000060, &CLASS_S
, 0,
19357 CP1_
}, /* CLASS.S */
19358 { instruction
, 0 , 0 , 32,
19359 0xfc0003ff, 0xa0000260, &CLASS_D
, 0,
19360 CP1_
}, /* CLASS.D */
19364 static const Pool SUB_fmt0
[2] = {
19365 { instruction
, 0 , 0 , 32,
19366 0xfc0003ff, 0xa0000070, &SUB_S
, 0,
19367 CP1_
}, /* SUB.S */
19368 { reserved_block
, 0 , 0 , 32,
19369 0xfc0003ff, 0xa0000270, 0 , 0,
19370 CP1_
}, /* SUB.fmt0~*(1) */
19374 static const Pool SELNEZ_fmt
[2] = {
19375 { instruction
, 0 , 0 , 32,
19376 0xfc0003ff, 0xa0000078, &SELNEZ_S
, 0,
19377 CP1_
}, /* SELNEZ.S */
19378 { instruction
, 0 , 0 , 32,
19379 0xfc0003ff, 0xa0000278, &SELNEZ_D
, 0,
19380 CP1_
}, /* SELNEZ.D */
19384 static const Pool MUL_fmt0
[2] = {
19385 { instruction
, 0 , 0 , 32,
19386 0xfc0003ff, 0xa00000b0, &MUL_S
, 0,
19387 CP1_
}, /* MUL.S */
19388 { reserved_block
, 0 , 0 , 32,
19389 0xfc0003ff, 0xa00002b0, 0 , 0,
19390 CP1_
}, /* MUL.fmt0~*(1) */
19394 static const Pool SEL_fmt
[2] = {
19395 { instruction
, 0 , 0 , 32,
19396 0xfc0003ff, 0xa00000b8, &SEL_S
, 0,
19397 CP1_
}, /* SEL.S */
19398 { instruction
, 0 , 0 , 32,
19399 0xfc0003ff, 0xa00002b8, &SEL_D
, 0,
19400 CP1_
}, /* SEL.D */
19404 static const Pool DIV_fmt0
[2] = {
19405 { instruction
, 0 , 0 , 32,
19406 0xfc0003ff, 0xa00000f0, &DIV_S
, 0,
19407 CP1_
}, /* DIV.S */
19408 { reserved_block
, 0 , 0 , 32,
19409 0xfc0003ff, 0xa00002f0, 0 , 0,
19410 CP1_
}, /* DIV.fmt0~*(1) */
19414 static const Pool ADD_fmt1
[2] = {
19415 { instruction
, 0 , 0 , 32,
19416 0xfc0003ff, 0xa0000130, &ADD_D
, 0,
19417 CP1_
}, /* ADD.D */
19418 { reserved_block
, 0 , 0 , 32,
19419 0xfc0003ff, 0xa0000330, 0 , 0,
19420 CP1_
}, /* ADD.fmt1~*(1) */
19424 static const Pool SUB_fmt1
[2] = {
19425 { instruction
, 0 , 0 , 32,
19426 0xfc0003ff, 0xa0000170, &SUB_D
, 0,
19427 CP1_
}, /* SUB.D */
19428 { reserved_block
, 0 , 0 , 32,
19429 0xfc0003ff, 0xa0000370, 0 , 0,
19430 CP1_
}, /* SUB.fmt1~*(1) */
19434 static const Pool MUL_fmt1
[2] = {
19435 { instruction
, 0 , 0 , 32,
19436 0xfc0003ff, 0xa00001b0, &MUL_D
, 0,
19437 CP1_
}, /* MUL.D */
19438 { reserved_block
, 0 , 0 , 32,
19439 0xfc0003ff, 0xa00003b0, 0 , 0,
19440 CP1_
}, /* MUL.fmt1~*(1) */
19444 static const Pool MADDF_fmt
[2] = {
19445 { instruction
, 0 , 0 , 32,
19446 0xfc0003ff, 0xa00001b8, &MADDF_S
, 0,
19447 CP1_
}, /* MADDF.S */
19448 { instruction
, 0 , 0 , 32,
19449 0xfc0003ff, 0xa00003b8, &MADDF_D
, 0,
19450 CP1_
}, /* MADDF.D */
19454 static const Pool DIV_fmt1
[2] = {
19455 { instruction
, 0 , 0 , 32,
19456 0xfc0003ff, 0xa00001f0, &DIV_D
, 0,
19457 CP1_
}, /* DIV.D */
19458 { reserved_block
, 0 , 0 , 32,
19459 0xfc0003ff, 0xa00003f0, 0 , 0,
19460 CP1_
}, /* DIV.fmt1~*(1) */
19464 static const Pool MSUBF_fmt
[2] = {
19465 { instruction
, 0 , 0 , 32,
19466 0xfc0003ff, 0xa00001f8, &MSUBF_S
, 0,
19467 CP1_
}, /* MSUBF.S */
19468 { instruction
, 0 , 0 , 32,
19469 0xfc0003ff, 0xa00003f8, &MSUBF_D
, 0,
19470 CP1_
}, /* MSUBF.D */
19474 static const Pool POOL32F_0
[64] = {
19475 { reserved_block
, 0 , 0 , 32,
19476 0xfc0001ff, 0xa0000000, 0 , 0,
19477 CP1_
}, /* POOL32F_0~*(0) */
19478 { reserved_block
, 0 , 0 , 32,
19479 0xfc0001ff, 0xa0000008, 0 , 0,
19480 CP1_
}, /* POOL32F_0~*(1) */
19481 { reserved_block
, 0 , 0 , 32,
19482 0xfc0001ff, 0xa0000010, 0 , 0,
19483 CP1_
}, /* POOL32F_0~*(2) */
19484 { reserved_block
, 0 , 0 , 32,
19485 0xfc0001ff, 0xa0000018, 0 , 0,
19486 CP1_
}, /* POOL32F_0~*(3) */
19487 { pool
, RINT_fmt
, 2 , 32,
19488 0xfc0001ff, 0xa0000020, 0 , 0,
19489 CP1_
}, /* RINT.fmt */
19490 { reserved_block
, 0 , 0 , 32,
19491 0xfc0001ff, 0xa0000028, 0 , 0,
19492 CP1_
}, /* POOL32F_0~*(5) */
19493 { pool
, ADD_fmt0
, 2 , 32,
19494 0xfc0001ff, 0xa0000030, 0 , 0,
19495 CP1_
}, /* ADD.fmt0 */
19496 { pool
, SELEQZ_fmt
, 2 , 32,
19497 0xfc0001ff, 0xa0000038, 0 , 0,
19498 CP1_
}, /* SELEQZ.fmt */
19499 { reserved_block
, 0 , 0 , 32,
19500 0xfc0001ff, 0xa0000040, 0 , 0,
19501 CP1_
}, /* POOL32F_0~*(8) */
19502 { reserved_block
, 0 , 0 , 32,
19503 0xfc0001ff, 0xa0000048, 0 , 0,
19504 CP1_
}, /* POOL32F_0~*(9) */
19505 { reserved_block
, 0 , 0 , 32,
19506 0xfc0001ff, 0xa0000050, 0 , 0,
19507 CP1_
}, /* POOL32F_0~*(10) */
19508 { reserved_block
, 0 , 0 , 32,
19509 0xfc0001ff, 0xa0000058, 0 , 0,
19510 CP1_
}, /* POOL32F_0~*(11) */
19511 { pool
, CLASS_fmt
, 2 , 32,
19512 0xfc0001ff, 0xa0000060, 0 , 0,
19513 CP1_
}, /* CLASS.fmt */
19514 { reserved_block
, 0 , 0 , 32,
19515 0xfc0001ff, 0xa0000068, 0 , 0,
19516 CP1_
}, /* POOL32F_0~*(13) */
19517 { pool
, SUB_fmt0
, 2 , 32,
19518 0xfc0001ff, 0xa0000070, 0 , 0,
19519 CP1_
}, /* SUB.fmt0 */
19520 { pool
, SELNEZ_fmt
, 2 , 32,
19521 0xfc0001ff, 0xa0000078, 0 , 0,
19522 CP1_
}, /* SELNEZ.fmt */
19523 { reserved_block
, 0 , 0 , 32,
19524 0xfc0001ff, 0xa0000080, 0 , 0,
19525 CP1_
}, /* POOL32F_0~*(16) */
19526 { reserved_block
, 0 , 0 , 32,
19527 0xfc0001ff, 0xa0000088, 0 , 0,
19528 CP1_
}, /* POOL32F_0~*(17) */
19529 { reserved_block
, 0 , 0 , 32,
19530 0xfc0001ff, 0xa0000090, 0 , 0,
19531 CP1_
}, /* POOL32F_0~*(18) */
19532 { reserved_block
, 0 , 0 , 32,
19533 0xfc0001ff, 0xa0000098, 0 , 0,
19534 CP1_
}, /* POOL32F_0~*(19) */
19535 { reserved_block
, 0 , 0 , 32,
19536 0xfc0001ff, 0xa00000a0, 0 , 0,
19537 CP1_
}, /* POOL32F_0~*(20) */
19538 { reserved_block
, 0 , 0 , 32,
19539 0xfc0001ff, 0xa00000a8, 0 , 0,
19540 CP1_
}, /* POOL32F_0~*(21) */
19541 { pool
, MUL_fmt0
, 2 , 32,
19542 0xfc0001ff, 0xa00000b0, 0 , 0,
19543 CP1_
}, /* MUL.fmt0 */
19544 { pool
, SEL_fmt
, 2 , 32,
19545 0xfc0001ff, 0xa00000b8, 0 , 0,
19546 CP1_
}, /* SEL.fmt */
19547 { reserved_block
, 0 , 0 , 32,
19548 0xfc0001ff, 0xa00000c0, 0 , 0,
19549 CP1_
}, /* POOL32F_0~*(24) */
19550 { reserved_block
, 0 , 0 , 32,
19551 0xfc0001ff, 0xa00000c8, 0 , 0,
19552 CP1_
}, /* POOL32F_0~*(25) */
19553 { reserved_block
, 0 , 0 , 32,
19554 0xfc0001ff, 0xa00000d0, 0 , 0,
19555 CP1_
}, /* POOL32F_0~*(26) */
19556 { reserved_block
, 0 , 0 , 32,
19557 0xfc0001ff, 0xa00000d8, 0 , 0,
19558 CP1_
}, /* POOL32F_0~*(27) */
19559 { reserved_block
, 0 , 0 , 32,
19560 0xfc0001ff, 0xa00000e0, 0 , 0,
19561 CP1_
}, /* POOL32F_0~*(28) */
19562 { reserved_block
, 0 , 0 , 32,
19563 0xfc0001ff, 0xa00000e8, 0 , 0,
19564 CP1_
}, /* POOL32F_0~*(29) */
19565 { pool
, DIV_fmt0
, 2 , 32,
19566 0xfc0001ff, 0xa00000f0, 0 , 0,
19567 CP1_
}, /* DIV.fmt0 */
19568 { reserved_block
, 0 , 0 , 32,
19569 0xfc0001ff, 0xa00000f8, 0 , 0,
19570 CP1_
}, /* POOL32F_0~*(31) */
19571 { reserved_block
, 0 , 0 , 32,
19572 0xfc0001ff, 0xa0000100, 0 , 0,
19573 CP1_
}, /* POOL32F_0~*(32) */
19574 { reserved_block
, 0 , 0 , 32,
19575 0xfc0001ff, 0xa0000108, 0 , 0,
19576 CP1_
}, /* POOL32F_0~*(33) */
19577 { reserved_block
, 0 , 0 , 32,
19578 0xfc0001ff, 0xa0000110, 0 , 0,
19579 CP1_
}, /* POOL32F_0~*(34) */
19580 { reserved_block
, 0 , 0 , 32,
19581 0xfc0001ff, 0xa0000118, 0 , 0,
19582 CP1_
}, /* POOL32F_0~*(35) */
19583 { reserved_block
, 0 , 0 , 32,
19584 0xfc0001ff, 0xa0000120, 0 , 0,
19585 CP1_
}, /* POOL32F_0~*(36) */
19586 { reserved_block
, 0 , 0 , 32,
19587 0xfc0001ff, 0xa0000128, 0 , 0,
19588 CP1_
}, /* POOL32F_0~*(37) */
19589 { pool
, ADD_fmt1
, 2 , 32,
19590 0xfc0001ff, 0xa0000130, 0 , 0,
19591 CP1_
}, /* ADD.fmt1 */
19592 { reserved_block
, 0 , 0 , 32,
19593 0xfc0001ff, 0xa0000138, 0 , 0,
19594 CP1_
}, /* POOL32F_0~*(39) */
19595 { reserved_block
, 0 , 0 , 32,
19596 0xfc0001ff, 0xa0000140, 0 , 0,
19597 CP1_
}, /* POOL32F_0~*(40) */
19598 { reserved_block
, 0 , 0 , 32,
19599 0xfc0001ff, 0xa0000148, 0 , 0,
19600 CP1_
}, /* POOL32F_0~*(41) */
19601 { reserved_block
, 0 , 0 , 32,
19602 0xfc0001ff, 0xa0000150, 0 , 0,
19603 CP1_
}, /* POOL32F_0~*(42) */
19604 { reserved_block
, 0 , 0 , 32,
19605 0xfc0001ff, 0xa0000158, 0 , 0,
19606 CP1_
}, /* POOL32F_0~*(43) */
19607 { reserved_block
, 0 , 0 , 32,
19608 0xfc0001ff, 0xa0000160, 0 , 0,
19609 CP1_
}, /* POOL32F_0~*(44) */
19610 { reserved_block
, 0 , 0 , 32,
19611 0xfc0001ff, 0xa0000168, 0 , 0,
19612 CP1_
}, /* POOL32F_0~*(45) */
19613 { pool
, SUB_fmt1
, 2 , 32,
19614 0xfc0001ff, 0xa0000170, 0 , 0,
19615 CP1_
}, /* SUB.fmt1 */
19616 { reserved_block
, 0 , 0 , 32,
19617 0xfc0001ff, 0xa0000178, 0 , 0,
19618 CP1_
}, /* POOL32F_0~*(47) */
19619 { reserved_block
, 0 , 0 , 32,
19620 0xfc0001ff, 0xa0000180, 0 , 0,
19621 CP1_
}, /* POOL32F_0~*(48) */
19622 { reserved_block
, 0 , 0 , 32,
19623 0xfc0001ff, 0xa0000188, 0 , 0,
19624 CP1_
}, /* POOL32F_0~*(49) */
19625 { reserved_block
, 0 , 0 , 32,
19626 0xfc0001ff, 0xa0000190, 0 , 0,
19627 CP1_
}, /* POOL32F_0~*(50) */
19628 { reserved_block
, 0 , 0 , 32,
19629 0xfc0001ff, 0xa0000198, 0 , 0,
19630 CP1_
}, /* POOL32F_0~*(51) */
19631 { reserved_block
, 0 , 0 , 32,
19632 0xfc0001ff, 0xa00001a0, 0 , 0,
19633 CP1_
}, /* POOL32F_0~*(52) */
19634 { reserved_block
, 0 , 0 , 32,
19635 0xfc0001ff, 0xa00001a8, 0 , 0,
19636 CP1_
}, /* POOL32F_0~*(53) */
19637 { pool
, MUL_fmt1
, 2 , 32,
19638 0xfc0001ff, 0xa00001b0, 0 , 0,
19639 CP1_
}, /* MUL.fmt1 */
19640 { pool
, MADDF_fmt
, 2 , 32,
19641 0xfc0001ff, 0xa00001b8, 0 , 0,
19642 CP1_
}, /* MADDF.fmt */
19643 { reserved_block
, 0 , 0 , 32,
19644 0xfc0001ff, 0xa00001c0, 0 , 0,
19645 CP1_
}, /* POOL32F_0~*(56) */
19646 { reserved_block
, 0 , 0 , 32,
19647 0xfc0001ff, 0xa00001c8, 0 , 0,
19648 CP1_
}, /* POOL32F_0~*(57) */
19649 { reserved_block
, 0 , 0 , 32,
19650 0xfc0001ff, 0xa00001d0, 0 , 0,
19651 CP1_
}, /* POOL32F_0~*(58) */
19652 { reserved_block
, 0 , 0 , 32,
19653 0xfc0001ff, 0xa00001d8, 0 , 0,
19654 CP1_
}, /* POOL32F_0~*(59) */
19655 { reserved_block
, 0 , 0 , 32,
19656 0xfc0001ff, 0xa00001e0, 0 , 0,
19657 CP1_
}, /* POOL32F_0~*(60) */
19658 { reserved_block
, 0 , 0 , 32,
19659 0xfc0001ff, 0xa00001e8, 0 , 0,
19660 CP1_
}, /* POOL32F_0~*(61) */
19661 { pool
, DIV_fmt1
, 2 , 32,
19662 0xfc0001ff, 0xa00001f0, 0 , 0,
19663 CP1_
}, /* DIV.fmt1 */
19664 { pool
, MSUBF_fmt
, 2 , 32,
19665 0xfc0001ff, 0xa00001f8, 0 , 0,
19666 CP1_
}, /* MSUBF.fmt */
19670 static const Pool MIN_fmt
[2] = {
19671 { instruction
, 0 , 0 , 32,
19672 0xfc00023f, 0xa0000003, &MIN_S
, 0,
19673 CP1_
}, /* MIN.S */
19674 { instruction
, 0 , 0 , 32,
19675 0xfc00023f, 0xa0000203, &MIN_D
, 0,
19676 CP1_
}, /* MIN.D */
19680 static const Pool MAX_fmt
[2] = {
19681 { instruction
, 0 , 0 , 32,
19682 0xfc00023f, 0xa000000b, &MAX_S
, 0,
19683 CP1_
}, /* MAX.S */
19684 { instruction
, 0 , 0 , 32,
19685 0xfc00023f, 0xa000020b, &MAX_D
, 0,
19686 CP1_
}, /* MAX.D */
19690 static const Pool MINA_fmt
[2] = {
19691 { instruction
, 0 , 0 , 32,
19692 0xfc00023f, 0xa0000023, &MINA_S
, 0,
19693 CP1_
}, /* MINA.S */
19694 { instruction
, 0 , 0 , 32,
19695 0xfc00023f, 0xa0000223, &MINA_D
, 0,
19696 CP1_
}, /* MINA.D */
19700 static const Pool MAXA_fmt
[2] = {
19701 { instruction
, 0 , 0 , 32,
19702 0xfc00023f, 0xa000002b, &MAXA_S
, 0,
19703 CP1_
}, /* MAXA.S */
19704 { instruction
, 0 , 0 , 32,
19705 0xfc00023f, 0xa000022b, &MAXA_D
, 0,
19706 CP1_
}, /* MAXA.D */
19710 static const Pool CVT_L_fmt
[2] = {
19711 { instruction
, 0 , 0 , 32,
19712 0xfc007fff, 0xa000013b, &CVT_L_S
, 0,
19713 CP1_
}, /* CVT.L.S */
19714 { instruction
, 0 , 0 , 32,
19715 0xfc007fff, 0xa000413b, &CVT_L_D
, 0,
19716 CP1_
}, /* CVT.L.D */
19720 static const Pool RSQRT_fmt
[2] = {
19721 { instruction
, 0 , 0 , 32,
19722 0xfc007fff, 0xa000023b, &RSQRT_S
, 0,
19723 CP1_
}, /* RSQRT.S */
19724 { instruction
, 0 , 0 , 32,
19725 0xfc007fff, 0xa000423b, &RSQRT_D
, 0,
19726 CP1_
}, /* RSQRT.D */
19730 static const Pool FLOOR_L_fmt
[2] = {
19731 { instruction
, 0 , 0 , 32,
19732 0xfc007fff, 0xa000033b, &FLOOR_L_S
, 0,
19733 CP1_
}, /* FLOOR.L.S */
19734 { instruction
, 0 , 0 , 32,
19735 0xfc007fff, 0xa000433b, &FLOOR_L_D
, 0,
19736 CP1_
}, /* FLOOR.L.D */
19740 static const Pool CVT_W_fmt
[2] = {
19741 { instruction
, 0 , 0 , 32,
19742 0xfc007fff, 0xa000093b, &CVT_W_S
, 0,
19743 CP1_
}, /* CVT.W.S */
19744 { instruction
, 0 , 0 , 32,
19745 0xfc007fff, 0xa000493b, &CVT_W_D
, 0,
19746 CP1_
}, /* CVT.W.D */
19750 static const Pool SQRT_fmt
[2] = {
19751 { instruction
, 0 , 0 , 32,
19752 0xfc007fff, 0xa0000a3b, &SQRT_S
, 0,
19753 CP1_
}, /* SQRT.S */
19754 { instruction
, 0 , 0 , 32,
19755 0xfc007fff, 0xa0004a3b, &SQRT_D
, 0,
19756 CP1_
}, /* SQRT.D */
19760 static const Pool FLOOR_W_fmt
[2] = {
19761 { instruction
, 0 , 0 , 32,
19762 0xfc007fff, 0xa0000b3b, &FLOOR_W_S
, 0,
19763 CP1_
}, /* FLOOR.W.S */
19764 { instruction
, 0 , 0 , 32,
19765 0xfc007fff, 0xa0004b3b, &FLOOR_W_D
, 0,
19766 CP1_
}, /* FLOOR.W.D */
19770 static const Pool RECIP_fmt
[2] = {
19771 { instruction
, 0 , 0 , 32,
19772 0xfc007fff, 0xa000123b, &RECIP_S
, 0,
19773 CP1_
}, /* RECIP.S */
19774 { instruction
, 0 , 0 , 32,
19775 0xfc007fff, 0xa000523b, &RECIP_D
, 0,
19776 CP1_
}, /* RECIP.D */
19780 static const Pool CEIL_L_fmt
[2] = {
19781 { instruction
, 0 , 0 , 32,
19782 0xfc007fff, 0xa000133b, &CEIL_L_S
, 0,
19783 CP1_
}, /* CEIL.L.S */
19784 { instruction
, 0 , 0 , 32,
19785 0xfc007fff, 0xa000533b, &CEIL_L_D
, 0,
19786 CP1_
}, /* CEIL.L.D */
19790 static const Pool CEIL_W_fmt
[2] = {
19791 { instruction
, 0 , 0 , 32,
19792 0xfc007fff, 0xa0001b3b, &CEIL_W_S
, 0,
19793 CP1_
}, /* CEIL.W.S */
19794 { instruction
, 0 , 0 , 32,
19795 0xfc007fff, 0xa0005b3b, &CEIL_W_D
, 0,
19796 CP1_
}, /* CEIL.W.D */
19800 static const Pool TRUNC_L_fmt
[2] = {
19801 { instruction
, 0 , 0 , 32,
19802 0xfc007fff, 0xa000233b, &TRUNC_L_S
, 0,
19803 CP1_
}, /* TRUNC.L.S */
19804 { instruction
, 0 , 0 , 32,
19805 0xfc007fff, 0xa000633b, &TRUNC_L_D
, 0,
19806 CP1_
}, /* TRUNC.L.D */
19810 static const Pool TRUNC_W_fmt
[2] = {
19811 { instruction
, 0 , 0 , 32,
19812 0xfc007fff, 0xa0002b3b, &TRUNC_W_S
, 0,
19813 CP1_
}, /* TRUNC.W.S */
19814 { instruction
, 0 , 0 , 32,
19815 0xfc007fff, 0xa0006b3b, &TRUNC_W_D
, 0,
19816 CP1_
}, /* TRUNC.W.D */
19820 static const Pool ROUND_L_fmt
[2] = {
19821 { instruction
, 0 , 0 , 32,
19822 0xfc007fff, 0xa000333b, &ROUND_L_S
, 0,
19823 CP1_
}, /* ROUND.L.S */
19824 { instruction
, 0 , 0 , 32,
19825 0xfc007fff, 0xa000733b, &ROUND_L_D
, 0,
19826 CP1_
}, /* ROUND.L.D */
19830 static const Pool ROUND_W_fmt
[2] = {
19831 { instruction
, 0 , 0 , 32,
19832 0xfc007fff, 0xa0003b3b, &ROUND_W_S
, 0,
19833 CP1_
}, /* ROUND.W.S */
19834 { instruction
, 0 , 0 , 32,
19835 0xfc007fff, 0xa0007b3b, &ROUND_W_D
, 0,
19836 CP1_
}, /* ROUND.W.D */
19840 static const Pool POOL32Fxf_0
[64] = {
19841 { reserved_block
, 0 , 0 , 32,
19842 0xfc003fff, 0xa000003b, 0 , 0,
19843 CP1_
}, /* POOL32Fxf_0~*(0) */
19844 { pool
, CVT_L_fmt
, 2 , 32,
19845 0xfc003fff, 0xa000013b, 0 , 0,
19846 CP1_
}, /* CVT.L.fmt */
19847 { pool
, RSQRT_fmt
, 2 , 32,
19848 0xfc003fff, 0xa000023b, 0 , 0,
19849 CP1_
}, /* RSQRT.fmt */
19850 { pool
, FLOOR_L_fmt
, 2 , 32,
19851 0xfc003fff, 0xa000033b, 0 , 0,
19852 CP1_
}, /* FLOOR.L.fmt */
19853 { reserved_block
, 0 , 0 , 32,
19854 0xfc003fff, 0xa000043b, 0 , 0,
19855 CP1_
}, /* POOL32Fxf_0~*(4) */
19856 { reserved_block
, 0 , 0 , 32,
19857 0xfc003fff, 0xa000053b, 0 , 0,
19858 CP1_
}, /* POOL32Fxf_0~*(5) */
19859 { reserved_block
, 0 , 0 , 32,
19860 0xfc003fff, 0xa000063b, 0 , 0,
19861 CP1_
}, /* POOL32Fxf_0~*(6) */
19862 { reserved_block
, 0 , 0 , 32,
19863 0xfc003fff, 0xa000073b, 0 , 0,
19864 CP1_
}, /* POOL32Fxf_0~*(7) */
19865 { reserved_block
, 0 , 0 , 32,
19866 0xfc003fff, 0xa000083b, 0 , 0,
19867 CP1_
}, /* POOL32Fxf_0~*(8) */
19868 { pool
, CVT_W_fmt
, 2 , 32,
19869 0xfc003fff, 0xa000093b, 0 , 0,
19870 CP1_
}, /* CVT.W.fmt */
19871 { pool
, SQRT_fmt
, 2 , 32,
19872 0xfc003fff, 0xa0000a3b, 0 , 0,
19873 CP1_
}, /* SQRT.fmt */
19874 { pool
, FLOOR_W_fmt
, 2 , 32,
19875 0xfc003fff, 0xa0000b3b, 0 , 0,
19876 CP1_
}, /* FLOOR.W.fmt */
19877 { reserved_block
, 0 , 0 , 32,
19878 0xfc003fff, 0xa0000c3b, 0 , 0,
19879 CP1_
}, /* POOL32Fxf_0~*(12) */
19880 { reserved_block
, 0 , 0 , 32,
19881 0xfc003fff, 0xa0000d3b, 0 , 0,
19882 CP1_
}, /* POOL32Fxf_0~*(13) */
19883 { reserved_block
, 0 , 0 , 32,
19884 0xfc003fff, 0xa0000e3b, 0 , 0,
19885 CP1_
}, /* POOL32Fxf_0~*(14) */
19886 { reserved_block
, 0 , 0 , 32,
19887 0xfc003fff, 0xa0000f3b, 0 , 0,
19888 CP1_
}, /* POOL32Fxf_0~*(15) */
19889 { instruction
, 0 , 0 , 32,
19890 0xfc003fff, 0xa000103b, &CFC1
, 0,
19892 { reserved_block
, 0 , 0 , 32,
19893 0xfc003fff, 0xa000113b, 0 , 0,
19894 CP1_
}, /* POOL32Fxf_0~*(17) */
19895 { pool
, RECIP_fmt
, 2 , 32,
19896 0xfc003fff, 0xa000123b, 0 , 0,
19897 CP1_
}, /* RECIP.fmt */
19898 { pool
, CEIL_L_fmt
, 2 , 32,
19899 0xfc003fff, 0xa000133b, 0 , 0,
19900 CP1_
}, /* CEIL.L.fmt */
19901 { reserved_block
, 0 , 0 , 32,
19902 0xfc003fff, 0xa000143b, 0 , 0,
19903 CP1_
}, /* POOL32Fxf_0~*(20) */
19904 { reserved_block
, 0 , 0 , 32,
19905 0xfc003fff, 0xa000153b, 0 , 0,
19906 CP1_
}, /* POOL32Fxf_0~*(21) */
19907 { reserved_block
, 0 , 0 , 32,
19908 0xfc003fff, 0xa000163b, 0 , 0,
19909 CP1_
}, /* POOL32Fxf_0~*(22) */
19910 { reserved_block
, 0 , 0 , 32,
19911 0xfc003fff, 0xa000173b, 0 , 0,
19912 CP1_
}, /* POOL32Fxf_0~*(23) */
19913 { instruction
, 0 , 0 , 32,
19914 0xfc003fff, 0xa000183b, &CTC1
, 0,
19916 { reserved_block
, 0 , 0 , 32,
19917 0xfc003fff, 0xa000193b, 0 , 0,
19918 CP1_
}, /* POOL32Fxf_0~*(25) */
19919 { reserved_block
, 0 , 0 , 32,
19920 0xfc003fff, 0xa0001a3b, 0 , 0,
19921 CP1_
}, /* POOL32Fxf_0~*(26) */
19922 { pool
, CEIL_W_fmt
, 2 , 32,
19923 0xfc003fff, 0xa0001b3b, 0 , 0,
19924 CP1_
}, /* CEIL.W.fmt */
19925 { reserved_block
, 0 , 0 , 32,
19926 0xfc003fff, 0xa0001c3b, 0 , 0,
19927 CP1_
}, /* POOL32Fxf_0~*(28) */
19928 { reserved_block
, 0 , 0 , 32,
19929 0xfc003fff, 0xa0001d3b, 0 , 0,
19930 CP1_
}, /* POOL32Fxf_0~*(29) */
19931 { reserved_block
, 0 , 0 , 32,
19932 0xfc003fff, 0xa0001e3b, 0 , 0,
19933 CP1_
}, /* POOL32Fxf_0~*(30) */
19934 { reserved_block
, 0 , 0 , 32,
19935 0xfc003fff, 0xa0001f3b, 0 , 0,
19936 CP1_
}, /* POOL32Fxf_0~*(31) */
19937 { instruction
, 0 , 0 , 32,
19938 0xfc003fff, 0xa000203b, &MFC1
, 0,
19940 { instruction
, 0 , 0 , 32,
19941 0xfc003fff, 0xa000213b, &CVT_S_PL
, 0,
19942 CP1_
}, /* CVT.S.PL */
19943 { reserved_block
, 0 , 0 , 32,
19944 0xfc003fff, 0xa000223b, 0 , 0,
19945 CP1_
}, /* POOL32Fxf_0~*(34) */
19946 { pool
, TRUNC_L_fmt
, 2 , 32,
19947 0xfc003fff, 0xa000233b, 0 , 0,
19948 CP1_
}, /* TRUNC.L.fmt */
19949 { instruction
, 0 , 0 , 32,
19950 0xfc003fff, 0xa000243b, &DMFC1
, 0,
19951 CP1_
| MIPS64_
}, /* DMFC1 */
19952 { reserved_block
, 0 , 0 , 32,
19953 0xfc003fff, 0xa000253b, 0 , 0,
19954 CP1_
}, /* POOL32Fxf_0~*(37) */
19955 { reserved_block
, 0 , 0 , 32,
19956 0xfc003fff, 0xa000263b, 0 , 0,
19957 CP1_
}, /* POOL32Fxf_0~*(38) */
19958 { reserved_block
, 0 , 0 , 32,
19959 0xfc003fff, 0xa000273b, 0 , 0,
19960 CP1_
}, /* POOL32Fxf_0~*(39) */
19961 { instruction
, 0 , 0 , 32,
19962 0xfc003fff, 0xa000283b, &MTC1
, 0,
19964 { instruction
, 0 , 0 , 32,
19965 0xfc003fff, 0xa000293b, &CVT_S_PU
, 0,
19966 CP1_
}, /* CVT.S.PU */
19967 { reserved_block
, 0 , 0 , 32,
19968 0xfc003fff, 0xa0002a3b, 0 , 0,
19969 CP1_
}, /* POOL32Fxf_0~*(42) */
19970 { pool
, TRUNC_W_fmt
, 2 , 32,
19971 0xfc003fff, 0xa0002b3b, 0 , 0,
19972 CP1_
}, /* TRUNC.W.fmt */
19973 { instruction
, 0 , 0 , 32,
19974 0xfc003fff, 0xa0002c3b, &DMTC1
, 0,
19975 CP1_
| MIPS64_
}, /* DMTC1 */
19976 { reserved_block
, 0 , 0 , 32,
19977 0xfc003fff, 0xa0002d3b, 0 , 0,
19978 CP1_
}, /* POOL32Fxf_0~*(45) */
19979 { reserved_block
, 0 , 0 , 32,
19980 0xfc003fff, 0xa0002e3b, 0 , 0,
19981 CP1_
}, /* POOL32Fxf_0~*(46) */
19982 { reserved_block
, 0 , 0 , 32,
19983 0xfc003fff, 0xa0002f3b, 0 , 0,
19984 CP1_
}, /* POOL32Fxf_0~*(47) */
19985 { instruction
, 0 , 0 , 32,
19986 0xfc003fff, 0xa000303b, &MFHC1
, 0,
19987 CP1_
}, /* MFHC1 */
19988 { reserved_block
, 0 , 0 , 32,
19989 0xfc003fff, 0xa000313b, 0 , 0,
19990 CP1_
}, /* POOL32Fxf_0~*(49) */
19991 { reserved_block
, 0 , 0 , 32,
19992 0xfc003fff, 0xa000323b, 0 , 0,
19993 CP1_
}, /* POOL32Fxf_0~*(50) */
19994 { pool
, ROUND_L_fmt
, 2 , 32,
19995 0xfc003fff, 0xa000333b, 0 , 0,
19996 CP1_
}, /* ROUND.L.fmt */
19997 { reserved_block
, 0 , 0 , 32,
19998 0xfc003fff, 0xa000343b, 0 , 0,
19999 CP1_
}, /* POOL32Fxf_0~*(52) */
20000 { reserved_block
, 0 , 0 , 32,
20001 0xfc003fff, 0xa000353b, 0 , 0,
20002 CP1_
}, /* POOL32Fxf_0~*(53) */
20003 { reserved_block
, 0 , 0 , 32,
20004 0xfc003fff, 0xa000363b, 0 , 0,
20005 CP1_
}, /* POOL32Fxf_0~*(54) */
20006 { reserved_block
, 0 , 0 , 32,
20007 0xfc003fff, 0xa000373b, 0 , 0,
20008 CP1_
}, /* POOL32Fxf_0~*(55) */
20009 { instruction
, 0 , 0 , 32,
20010 0xfc003fff, 0xa000383b, &MTHC1
, 0,
20011 CP1_
}, /* MTHC1 */
20012 { reserved_block
, 0 , 0 , 32,
20013 0xfc003fff, 0xa000393b, 0 , 0,
20014 CP1_
}, /* POOL32Fxf_0~*(57) */
20015 { reserved_block
, 0 , 0 , 32,
20016 0xfc003fff, 0xa0003a3b, 0 , 0,
20017 CP1_
}, /* POOL32Fxf_0~*(58) */
20018 { pool
, ROUND_W_fmt
, 2 , 32,
20019 0xfc003fff, 0xa0003b3b, 0 , 0,
20020 CP1_
}, /* ROUND.W.fmt */
20021 { reserved_block
, 0 , 0 , 32,
20022 0xfc003fff, 0xa0003c3b, 0 , 0,
20023 CP1_
}, /* POOL32Fxf_0~*(60) */
20024 { reserved_block
, 0 , 0 , 32,
20025 0xfc003fff, 0xa0003d3b, 0 , 0,
20026 CP1_
}, /* POOL32Fxf_0~*(61) */
20027 { reserved_block
, 0 , 0 , 32,
20028 0xfc003fff, 0xa0003e3b, 0 , 0,
20029 CP1_
}, /* POOL32Fxf_0~*(62) */
20030 { reserved_block
, 0 , 0 , 32,
20031 0xfc003fff, 0xa0003f3b, 0 , 0,
20032 CP1_
}, /* POOL32Fxf_0~*(63) */
20036 static const Pool MOV_fmt
[4] = {
20037 { instruction
, 0 , 0 , 32,
20038 0xfc007fff, 0xa000007b, &MOV_S
, 0,
20039 CP1_
}, /* MOV.S */
20040 { instruction
, 0 , 0 , 32,
20041 0xfc007fff, 0xa000207b, &MOV_D
, 0,
20042 CP1_
}, /* MOV.D */
20043 { reserved_block
, 0 , 0 , 32,
20044 0xfc007fff, 0xa000407b, 0 , 0,
20045 CP1_
}, /* MOV.fmt~*(2) */
20046 { reserved_block
, 0 , 0 , 32,
20047 0xfc007fff, 0xa000607b, 0 , 0,
20048 CP1_
}, /* MOV.fmt~*(3) */
20052 static const Pool ABS_fmt
[4] = {
20053 { instruction
, 0 , 0 , 32,
20054 0xfc007fff, 0xa000037b, &ABS_S
, 0,
20055 CP1_
}, /* ABS.S */
20056 { instruction
, 0 , 0 , 32,
20057 0xfc007fff, 0xa000237b, &ABS_D
, 0,
20058 CP1_
}, /* ABS.D */
20059 { reserved_block
, 0 , 0 , 32,
20060 0xfc007fff, 0xa000437b, 0 , 0,
20061 CP1_
}, /* ABS.fmt~*(2) */
20062 { reserved_block
, 0 , 0 , 32,
20063 0xfc007fff, 0xa000637b, 0 , 0,
20064 CP1_
}, /* ABS.fmt~*(3) */
20068 static const Pool NEG_fmt
[4] = {
20069 { instruction
, 0 , 0 , 32,
20070 0xfc007fff, 0xa0000b7b, &NEG_S
, 0,
20071 CP1_
}, /* NEG.S */
20072 { instruction
, 0 , 0 , 32,
20073 0xfc007fff, 0xa0002b7b, &NEG_D
, 0,
20074 CP1_
}, /* NEG.D */
20075 { reserved_block
, 0 , 0 , 32,
20076 0xfc007fff, 0xa0004b7b, 0 , 0,
20077 CP1_
}, /* NEG.fmt~*(2) */
20078 { reserved_block
, 0 , 0 , 32,
20079 0xfc007fff, 0xa0006b7b, 0 , 0,
20080 CP1_
}, /* NEG.fmt~*(3) */
20084 static const Pool CVT_D_fmt
[4] = {
20085 { instruction
, 0 , 0 , 32,
20086 0xfc007fff, 0xa000137b, &CVT_D_S
, 0,
20087 CP1_
}, /* CVT.D.S */
20088 { instruction
, 0 , 0 , 32,
20089 0xfc007fff, 0xa000337b, &CVT_D_W
, 0,
20090 CP1_
}, /* CVT.D.W */
20091 { instruction
, 0 , 0 , 32,
20092 0xfc007fff, 0xa000537b, &CVT_D_L
, 0,
20093 CP1_
}, /* CVT.D.L */
20094 { reserved_block
, 0 , 0 , 32,
20095 0xfc007fff, 0xa000737b, 0 , 0,
20096 CP1_
}, /* CVT.D.fmt~*(3) */
20100 static const Pool CVT_S_fmt
[4] = {
20101 { instruction
, 0 , 0 , 32,
20102 0xfc007fff, 0xa0001b7b, &CVT_S_D
, 0,
20103 CP1_
}, /* CVT.S.D */
20104 { instruction
, 0 , 0 , 32,
20105 0xfc007fff, 0xa0003b7b, &CVT_S_W
, 0,
20106 CP1_
}, /* CVT.S.W */
20107 { instruction
, 0 , 0 , 32,
20108 0xfc007fff, 0xa0005b7b, &CVT_S_L
, 0,
20109 CP1_
}, /* CVT.S.L */
20110 { reserved_block
, 0 , 0 , 32,
20111 0xfc007fff, 0xa0007b7b, 0 , 0,
20112 CP1_
}, /* CVT.S.fmt~*(3) */
20116 static const Pool POOL32Fxf_1
[32] = {
20117 { pool
, MOV_fmt
, 4 , 32,
20118 0xfc001fff, 0xa000007b, 0 , 0,
20119 CP1_
}, /* MOV.fmt */
20120 { reserved_block
, 0 , 0 , 32,
20121 0xfc001fff, 0xa000017b, 0 , 0,
20122 CP1_
}, /* POOL32Fxf_1~*(1) */
20123 { reserved_block
, 0 , 0 , 32,
20124 0xfc001fff, 0xa000027b, 0 , 0,
20125 CP1_
}, /* POOL32Fxf_1~*(2) */
20126 { pool
, ABS_fmt
, 4 , 32,
20127 0xfc001fff, 0xa000037b, 0 , 0,
20128 CP1_
}, /* ABS.fmt */
20129 { reserved_block
, 0 , 0 , 32,
20130 0xfc001fff, 0xa000047b, 0 , 0,
20131 CP1_
}, /* POOL32Fxf_1~*(4) */
20132 { reserved_block
, 0 , 0 , 32,
20133 0xfc001fff, 0xa000057b, 0 , 0,
20134 CP1_
}, /* POOL32Fxf_1~*(5) */
20135 { reserved_block
, 0 , 0 , 32,
20136 0xfc001fff, 0xa000067b, 0 , 0,
20137 CP1_
}, /* POOL32Fxf_1~*(6) */
20138 { reserved_block
, 0 , 0 , 32,
20139 0xfc001fff, 0xa000077b, 0 , 0,
20140 CP1_
}, /* POOL32Fxf_1~*(7) */
20141 { reserved_block
, 0 , 0 , 32,
20142 0xfc001fff, 0xa000087b, 0 , 0,
20143 CP1_
}, /* POOL32Fxf_1~*(8) */
20144 { reserved_block
, 0 , 0 , 32,
20145 0xfc001fff, 0xa000097b, 0 , 0,
20146 CP1_
}, /* POOL32Fxf_1~*(9) */
20147 { reserved_block
, 0 , 0 , 32,
20148 0xfc001fff, 0xa0000a7b, 0 , 0,
20149 CP1_
}, /* POOL32Fxf_1~*(10) */
20150 { pool
, NEG_fmt
, 4 , 32,
20151 0xfc001fff, 0xa0000b7b, 0 , 0,
20152 CP1_
}, /* NEG.fmt */
20153 { reserved_block
, 0 , 0 , 32,
20154 0xfc001fff, 0xa0000c7b, 0 , 0,
20155 CP1_
}, /* POOL32Fxf_1~*(12) */
20156 { reserved_block
, 0 , 0 , 32,
20157 0xfc001fff, 0xa0000d7b, 0 , 0,
20158 CP1_
}, /* POOL32Fxf_1~*(13) */
20159 { reserved_block
, 0 , 0 , 32,
20160 0xfc001fff, 0xa0000e7b, 0 , 0,
20161 CP1_
}, /* POOL32Fxf_1~*(14) */
20162 { reserved_block
, 0 , 0 , 32,
20163 0xfc001fff, 0xa0000f7b, 0 , 0,
20164 CP1_
}, /* POOL32Fxf_1~*(15) */
20165 { reserved_block
, 0 , 0 , 32,
20166 0xfc001fff, 0xa000107b, 0 , 0,
20167 CP1_
}, /* POOL32Fxf_1~*(16) */
20168 { reserved_block
, 0 , 0 , 32,
20169 0xfc001fff, 0xa000117b, 0 , 0,
20170 CP1_
}, /* POOL32Fxf_1~*(17) */
20171 { reserved_block
, 0 , 0 , 32,
20172 0xfc001fff, 0xa000127b, 0 , 0,
20173 CP1_
}, /* POOL32Fxf_1~*(18) */
20174 { pool
, CVT_D_fmt
, 4 , 32,
20175 0xfc001fff, 0xa000137b, 0 , 0,
20176 CP1_
}, /* CVT.D.fmt */
20177 { reserved_block
, 0 , 0 , 32,
20178 0xfc001fff, 0xa000147b, 0 , 0,
20179 CP1_
}, /* POOL32Fxf_1~*(20) */
20180 { reserved_block
, 0 , 0 , 32,
20181 0xfc001fff, 0xa000157b, 0 , 0,
20182 CP1_
}, /* POOL32Fxf_1~*(21) */
20183 { reserved_block
, 0 , 0 , 32,
20184 0xfc001fff, 0xa000167b, 0 , 0,
20185 CP1_
}, /* POOL32Fxf_1~*(22) */
20186 { reserved_block
, 0 , 0 , 32,
20187 0xfc001fff, 0xa000177b, 0 , 0,
20188 CP1_
}, /* POOL32Fxf_1~*(23) */
20189 { reserved_block
, 0 , 0 , 32,
20190 0xfc001fff, 0xa000187b, 0 , 0,
20191 CP1_
}, /* POOL32Fxf_1~*(24) */
20192 { reserved_block
, 0 , 0 , 32,
20193 0xfc001fff, 0xa000197b, 0 , 0,
20194 CP1_
}, /* POOL32Fxf_1~*(25) */
20195 { reserved_block
, 0 , 0 , 32,
20196 0xfc001fff, 0xa0001a7b, 0 , 0,
20197 CP1_
}, /* POOL32Fxf_1~*(26) */
20198 { pool
, CVT_S_fmt
, 4 , 32,
20199 0xfc001fff, 0xa0001b7b, 0 , 0,
20200 CP1_
}, /* CVT.S.fmt */
20201 { reserved_block
, 0 , 0 , 32,
20202 0xfc001fff, 0xa0001c7b, 0 , 0,
20203 CP1_
}, /* POOL32Fxf_1~*(28) */
20204 { reserved_block
, 0 , 0 , 32,
20205 0xfc001fff, 0xa0001d7b, 0 , 0,
20206 CP1_
}, /* POOL32Fxf_1~*(29) */
20207 { reserved_block
, 0 , 0 , 32,
20208 0xfc001fff, 0xa0001e7b, 0 , 0,
20209 CP1_
}, /* POOL32Fxf_1~*(30) */
20210 { reserved_block
, 0 , 0 , 32,
20211 0xfc001fff, 0xa0001f7b, 0 , 0,
20212 CP1_
}, /* POOL32Fxf_1~*(31) */
20216 static const Pool POOL32Fxf
[4] = {
20217 { pool
, POOL32Fxf_0
, 64 , 32,
20218 0xfc0000ff, 0xa000003b, 0 , 0,
20219 CP1_
}, /* POOL32Fxf_0 */
20220 { pool
, POOL32Fxf_1
, 32 , 32,
20221 0xfc0000ff, 0xa000007b, 0 , 0,
20222 CP1_
}, /* POOL32Fxf_1 */
20223 { reserved_block
, 0 , 0 , 32,
20224 0xfc0000ff, 0xa00000bb, 0 , 0,
20225 CP1_
}, /* POOL32Fxf~*(2) */
20226 { reserved_block
, 0 , 0 , 32,
20227 0xfc0000ff, 0xa00000fb, 0 , 0,
20228 CP1_
}, /* POOL32Fxf~*(3) */
20232 static const Pool POOL32F_3
[8] = {
20233 { pool
, MIN_fmt
, 2 , 32,
20234 0xfc00003f, 0xa0000003, 0 , 0,
20235 CP1_
}, /* MIN.fmt */
20236 { pool
, MAX_fmt
, 2 , 32,
20237 0xfc00003f, 0xa000000b, 0 , 0,
20238 CP1_
}, /* MAX.fmt */
20239 { reserved_block
, 0 , 0 , 32,
20240 0xfc00003f, 0xa0000013, 0 , 0,
20241 CP1_
}, /* POOL32F_3~*(2) */
20242 { reserved_block
, 0 , 0 , 32,
20243 0xfc00003f, 0xa000001b, 0 , 0,
20244 CP1_
}, /* POOL32F_3~*(3) */
20245 { pool
, MINA_fmt
, 2 , 32,
20246 0xfc00003f, 0xa0000023, 0 , 0,
20247 CP1_
}, /* MINA.fmt */
20248 { pool
, MAXA_fmt
, 2 , 32,
20249 0xfc00003f, 0xa000002b, 0 , 0,
20250 CP1_
}, /* MAXA.fmt */
20251 { reserved_block
, 0 , 0 , 32,
20252 0xfc00003f, 0xa0000033, 0 , 0,
20253 CP1_
}, /* POOL32F_3~*(6) */
20254 { pool
, POOL32Fxf
, 4 , 32,
20255 0xfc00003f, 0xa000003b, 0 , 0,
20256 CP1_
}, /* POOL32Fxf */
20260 static const Pool CMP_condn_S
[32] = {
20261 { instruction
, 0 , 0 , 32,
20262 0xfc0007ff, 0xa0000005, &CMP_AF_S
, 0,
20263 CP1_
}, /* CMP.AF.S */
20264 { instruction
, 0 , 0 , 32,
20265 0xfc0007ff, 0xa0000045, &CMP_UN_S
, 0,
20266 CP1_
}, /* CMP.UN.S */
20267 { instruction
, 0 , 0 , 32,
20268 0xfc0007ff, 0xa0000085, &CMP_EQ_S
, 0,
20269 CP1_
}, /* CMP.EQ.S */
20270 { instruction
, 0 , 0 , 32,
20271 0xfc0007ff, 0xa00000c5, &CMP_UEQ_S
, 0,
20272 CP1_
}, /* CMP.UEQ.S */
20273 { instruction
, 0 , 0 , 32,
20274 0xfc0007ff, 0xa0000105, &CMP_LT_S
, 0,
20275 CP1_
}, /* CMP.LT.S */
20276 { instruction
, 0 , 0 , 32,
20277 0xfc0007ff, 0xa0000145, &CMP_ULT_S
, 0,
20278 CP1_
}, /* CMP.ULT.S */
20279 { instruction
, 0 , 0 , 32,
20280 0xfc0007ff, 0xa0000185, &CMP_LE_S
, 0,
20281 CP1_
}, /* CMP.LE.S */
20282 { instruction
, 0 , 0 , 32,
20283 0xfc0007ff, 0xa00001c5, &CMP_ULE_S
, 0,
20284 CP1_
}, /* CMP.ULE.S */
20285 { instruction
, 0 , 0 , 32,
20286 0xfc0007ff, 0xa0000205, &CMP_SAF_S
, 0,
20287 CP1_
}, /* CMP.SAF.S */
20288 { instruction
, 0 , 0 , 32,
20289 0xfc0007ff, 0xa0000245, &CMP_SUN_S
, 0,
20290 CP1_
}, /* CMP.SUN.S */
20291 { instruction
, 0 , 0 , 32,
20292 0xfc0007ff, 0xa0000285, &CMP_SEQ_S
, 0,
20293 CP1_
}, /* CMP.SEQ.S */
20294 { instruction
, 0 , 0 , 32,
20295 0xfc0007ff, 0xa00002c5, &CMP_SUEQ_S
, 0,
20296 CP1_
}, /* CMP.SUEQ.S */
20297 { instruction
, 0 , 0 , 32,
20298 0xfc0007ff, 0xa0000305, &CMP_SLT_S
, 0,
20299 CP1_
}, /* CMP.SLT.S */
20300 { instruction
, 0 , 0 , 32,
20301 0xfc0007ff, 0xa0000345, &CMP_SULT_S
, 0,
20302 CP1_
}, /* CMP.SULT.S */
20303 { instruction
, 0 , 0 , 32,
20304 0xfc0007ff, 0xa0000385, &CMP_SLE_S
, 0,
20305 CP1_
}, /* CMP.SLE.S */
20306 { instruction
, 0 , 0 , 32,
20307 0xfc0007ff, 0xa00003c5, &CMP_SULE_S
, 0,
20308 CP1_
}, /* CMP.SULE.S */
20309 { reserved_block
, 0 , 0 , 32,
20310 0xfc0007ff, 0xa0000405, 0 , 0,
20311 CP1_
}, /* CMP.condn.S~*(16) */
20312 { instruction
, 0 , 0 , 32,
20313 0xfc0007ff, 0xa0000445, &CMP_OR_S
, 0,
20314 CP1_
}, /* CMP.OR.S */
20315 { instruction
, 0 , 0 , 32,
20316 0xfc0007ff, 0xa0000485, &CMP_UNE_S
, 0,
20317 CP1_
}, /* CMP.UNE.S */
20318 { instruction
, 0 , 0 , 32,
20319 0xfc0007ff, 0xa00004c5, &CMP_NE_S
, 0,
20320 CP1_
}, /* CMP.NE.S */
20321 { reserved_block
, 0 , 0 , 32,
20322 0xfc0007ff, 0xa0000505, 0 , 0,
20323 CP1_
}, /* CMP.condn.S~*(20) */
20324 { reserved_block
, 0 , 0 , 32,
20325 0xfc0007ff, 0xa0000545, 0 , 0,
20326 CP1_
}, /* CMP.condn.S~*(21) */
20327 { reserved_block
, 0 , 0 , 32,
20328 0xfc0007ff, 0xa0000585, 0 , 0,
20329 CP1_
}, /* CMP.condn.S~*(22) */
20330 { reserved_block
, 0 , 0 , 32,
20331 0xfc0007ff, 0xa00005c5, 0 , 0,
20332 CP1_
}, /* CMP.condn.S~*(23) */
20333 { reserved_block
, 0 , 0 , 32,
20334 0xfc0007ff, 0xa0000605, 0 , 0,
20335 CP1_
}, /* CMP.condn.S~*(24) */
20336 { instruction
, 0 , 0 , 32,
20337 0xfc0007ff, 0xa0000645, &CMP_SOR_S
, 0,
20338 CP1_
}, /* CMP.SOR.S */
20339 { instruction
, 0 , 0 , 32,
20340 0xfc0007ff, 0xa0000685, &CMP_SUNE_S
, 0,
20341 CP1_
}, /* CMP.SUNE.S */
20342 { instruction
, 0 , 0 , 32,
20343 0xfc0007ff, 0xa00006c5, &CMP_SNE_S
, 0,
20344 CP1_
}, /* CMP.SNE.S */
20345 { reserved_block
, 0 , 0 , 32,
20346 0xfc0007ff, 0xa0000705, 0 , 0,
20347 CP1_
}, /* CMP.condn.S~*(28) */
20348 { reserved_block
, 0 , 0 , 32,
20349 0xfc0007ff, 0xa0000745, 0 , 0,
20350 CP1_
}, /* CMP.condn.S~*(29) */
20351 { reserved_block
, 0 , 0 , 32,
20352 0xfc0007ff, 0xa0000785, 0 , 0,
20353 CP1_
}, /* CMP.condn.S~*(30) */
20354 { reserved_block
, 0 , 0 , 32,
20355 0xfc0007ff, 0xa00007c5, 0 , 0,
20356 CP1_
}, /* CMP.condn.S~*(31) */
20360 static const Pool CMP_condn_D
[32] = {
20361 { instruction
, 0 , 0 , 32,
20362 0xfc0007ff, 0xa0000015, &CMP_AF_D
, 0,
20363 CP1_
}, /* CMP.AF.D */
20364 { instruction
, 0 , 0 , 32,
20365 0xfc0007ff, 0xa0000055, &CMP_UN_D
, 0,
20366 CP1_
}, /* CMP.UN.D */
20367 { instruction
, 0 , 0 , 32,
20368 0xfc0007ff, 0xa0000095, &CMP_EQ_D
, 0,
20369 CP1_
}, /* CMP.EQ.D */
20370 { instruction
, 0 , 0 , 32,
20371 0xfc0007ff, 0xa00000d5, &CMP_UEQ_D
, 0,
20372 CP1_
}, /* CMP.UEQ.D */
20373 { instruction
, 0 , 0 , 32,
20374 0xfc0007ff, 0xa0000115, &CMP_LT_D
, 0,
20375 CP1_
}, /* CMP.LT.D */
20376 { instruction
, 0 , 0 , 32,
20377 0xfc0007ff, 0xa0000155, &CMP_ULT_D
, 0,
20378 CP1_
}, /* CMP.ULT.D */
20379 { instruction
, 0 , 0 , 32,
20380 0xfc0007ff, 0xa0000195, &CMP_LE_D
, 0,
20381 CP1_
}, /* CMP.LE.D */
20382 { instruction
, 0 , 0 , 32,
20383 0xfc0007ff, 0xa00001d5, &CMP_ULE_D
, 0,
20384 CP1_
}, /* CMP.ULE.D */
20385 { instruction
, 0 , 0 , 32,
20386 0xfc0007ff, 0xa0000215, &CMP_SAF_D
, 0,
20387 CP1_
}, /* CMP.SAF.D */
20388 { instruction
, 0 , 0 , 32,
20389 0xfc0007ff, 0xa0000255, &CMP_SUN_D
, 0,
20390 CP1_
}, /* CMP.SUN.D */
20391 { instruction
, 0 , 0 , 32,
20392 0xfc0007ff, 0xa0000295, &CMP_SEQ_D
, 0,
20393 CP1_
}, /* CMP.SEQ.D */
20394 { instruction
, 0 , 0 , 32,
20395 0xfc0007ff, 0xa00002d5, &CMP_SUEQ_D
, 0,
20396 CP1_
}, /* CMP.SUEQ.D */
20397 { instruction
, 0 , 0 , 32,
20398 0xfc0007ff, 0xa0000315, &CMP_SLT_D
, 0,
20399 CP1_
}, /* CMP.SLT.D */
20400 { instruction
, 0 , 0 , 32,
20401 0xfc0007ff, 0xa0000355, &CMP_SULT_D
, 0,
20402 CP1_
}, /* CMP.SULT.D */
20403 { instruction
, 0 , 0 , 32,
20404 0xfc0007ff, 0xa0000395, &CMP_SLE_D
, 0,
20405 CP1_
}, /* CMP.SLE.D */
20406 { instruction
, 0 , 0 , 32,
20407 0xfc0007ff, 0xa00003d5, &CMP_SULE_D
, 0,
20408 CP1_
}, /* CMP.SULE.D */
20409 { reserved_block
, 0 , 0 , 32,
20410 0xfc0007ff, 0xa0000415, 0 , 0,
20411 CP1_
}, /* CMP.condn.D~*(16) */
20412 { instruction
, 0 , 0 , 32,
20413 0xfc0007ff, 0xa0000455, &CMP_OR_D
, 0,
20414 CP1_
}, /* CMP.OR.D */
20415 { instruction
, 0 , 0 , 32,
20416 0xfc0007ff, 0xa0000495, &CMP_UNE_D
, 0,
20417 CP1_
}, /* CMP.UNE.D */
20418 { instruction
, 0 , 0 , 32,
20419 0xfc0007ff, 0xa00004d5, &CMP_NE_D
, 0,
20420 CP1_
}, /* CMP.NE.D */
20421 { reserved_block
, 0 , 0 , 32,
20422 0xfc0007ff, 0xa0000515, 0 , 0,
20423 CP1_
}, /* CMP.condn.D~*(20) */
20424 { reserved_block
, 0 , 0 , 32,
20425 0xfc0007ff, 0xa0000555, 0 , 0,
20426 CP1_
}, /* CMP.condn.D~*(21) */
20427 { reserved_block
, 0 , 0 , 32,
20428 0xfc0007ff, 0xa0000595, 0 , 0,
20429 CP1_
}, /* CMP.condn.D~*(22) */
20430 { reserved_block
, 0 , 0 , 32,
20431 0xfc0007ff, 0xa00005d5, 0 , 0,
20432 CP1_
}, /* CMP.condn.D~*(23) */
20433 { reserved_block
, 0 , 0 , 32,
20434 0xfc0007ff, 0xa0000615, 0 , 0,
20435 CP1_
}, /* CMP.condn.D~*(24) */
20436 { instruction
, 0 , 0 , 32,
20437 0xfc0007ff, 0xa0000655, &CMP_SOR_D
, 0,
20438 CP1_
}, /* CMP.SOR.D */
20439 { instruction
, 0 , 0 , 32,
20440 0xfc0007ff, 0xa0000695, &CMP_SUNE_D
, 0,
20441 CP1_
}, /* CMP.SUNE.D */
20442 { instruction
, 0 , 0 , 32,
20443 0xfc0007ff, 0xa00006d5, &CMP_SNE_D
, 0,
20444 CP1_
}, /* CMP.SNE.D */
20445 { reserved_block
, 0 , 0 , 32,
20446 0xfc0007ff, 0xa0000715, 0 , 0,
20447 CP1_
}, /* CMP.condn.D~*(28) */
20448 { reserved_block
, 0 , 0 , 32,
20449 0xfc0007ff, 0xa0000755, 0 , 0,
20450 CP1_
}, /* CMP.condn.D~*(29) */
20451 { reserved_block
, 0 , 0 , 32,
20452 0xfc0007ff, 0xa0000795, 0 , 0,
20453 CP1_
}, /* CMP.condn.D~*(30) */
20454 { reserved_block
, 0 , 0 , 32,
20455 0xfc0007ff, 0xa00007d5, 0 , 0,
20456 CP1_
}, /* CMP.condn.D~*(31) */
20460 static const Pool POOL32F_5
[8] = {
20461 { pool
, CMP_condn_S
, 32 , 32,
20462 0xfc00003f, 0xa0000005, 0 , 0,
20463 CP1_
}, /* CMP.condn.S */
20464 { reserved_block
, 0 , 0 , 32,
20465 0xfc00003f, 0xa000000d, 0 , 0,
20466 CP1_
}, /* POOL32F_5~*(1) */
20467 { pool
, CMP_condn_D
, 32 , 32,
20468 0xfc00003f, 0xa0000015, 0 , 0,
20469 CP1_
}, /* CMP.condn.D */
20470 { reserved_block
, 0 , 0 , 32,
20471 0xfc00003f, 0xa000001d, 0 , 0,
20472 CP1_
}, /* POOL32F_5~*(3) */
20473 { reserved_block
, 0 , 0 , 32,
20474 0xfc00003f, 0xa0000025, 0 , 0,
20475 CP1_
}, /* POOL32F_5~*(4) */
20476 { reserved_block
, 0 , 0 , 32,
20477 0xfc00003f, 0xa000002d, 0 , 0,
20478 CP1_
}, /* POOL32F_5~*(5) */
20479 { reserved_block
, 0 , 0 , 32,
20480 0xfc00003f, 0xa0000035, 0 , 0,
20481 CP1_
}, /* POOL32F_5~*(6) */
20482 { reserved_block
, 0 , 0 , 32,
20483 0xfc00003f, 0xa000003d, 0 , 0,
20484 CP1_
}, /* POOL32F_5~*(7) */
20488 static const Pool POOL32F
[8] = {
20489 { pool
, POOL32F_0
, 64 , 32,
20490 0xfc000007, 0xa0000000, 0 , 0,
20491 CP1_
}, /* POOL32F_0 */
20492 { reserved_block
, 0 , 0 , 32,
20493 0xfc000007, 0xa0000001, 0 , 0,
20494 CP1_
}, /* POOL32F~*(1) */
20495 { reserved_block
, 0 , 0 , 32,
20496 0xfc000007, 0xa0000002, 0 , 0,
20497 CP1_
}, /* POOL32F~*(2) */
20498 { pool
, POOL32F_3
, 8 , 32,
20499 0xfc000007, 0xa0000003, 0 , 0,
20500 CP1_
}, /* POOL32F_3 */
20501 { reserved_block
, 0 , 0 , 32,
20502 0xfc000007, 0xa0000004, 0 , 0,
20503 CP1_
}, /* POOL32F~*(4) */
20504 { pool
, POOL32F_5
, 8 , 32,
20505 0xfc000007, 0xa0000005, 0 , 0,
20506 CP1_
}, /* POOL32F_5 */
20507 { reserved_block
, 0 , 0 , 32,
20508 0xfc000007, 0xa0000006, 0 , 0,
20509 CP1_
}, /* POOL32F~*(6) */
20510 { reserved_block
, 0 , 0 , 32,
20511 0xfc000007, 0xa0000007, 0 , 0,
20512 CP1_
}, /* POOL32F~*(7) */
20516 static const Pool POOL32S_0
[64] = {
20517 { reserved_block
, 0 , 0 , 32,
20518 0xfc0001ff, 0xc0000000, 0 , 0,
20519 0x0 }, /* POOL32S_0~*(0) */
20520 { instruction
, 0 , 0 , 32,
20521 0xfc0001ff, 0xc0000008, &DLSA
, 0,
20522 MIPS64_
}, /* DLSA */
20523 { instruction
, 0 , 0 , 32,
20524 0xfc0001ff, 0xc0000010, &DSLLV
, 0,
20525 MIPS64_
}, /* DSLLV */
20526 { instruction
, 0 , 0 , 32,
20527 0xfc0001ff, 0xc0000018, &DMUL
, 0,
20528 MIPS64_
}, /* DMUL */
20529 { reserved_block
, 0 , 0 , 32,
20530 0xfc0001ff, 0xc0000020, 0 , 0,
20531 0x0 }, /* POOL32S_0~*(4) */
20532 { reserved_block
, 0 , 0 , 32,
20533 0xfc0001ff, 0xc0000028, 0 , 0,
20534 0x0 }, /* POOL32S_0~*(5) */
20535 { reserved_block
, 0 , 0 , 32,
20536 0xfc0001ff, 0xc0000030, 0 , 0,
20537 0x0 }, /* POOL32S_0~*(6) */
20538 { reserved_block
, 0 , 0 , 32,
20539 0xfc0001ff, 0xc0000038, 0 , 0,
20540 0x0 }, /* POOL32S_0~*(7) */
20541 { reserved_block
, 0 , 0 , 32,
20542 0xfc0001ff, 0xc0000040, 0 , 0,
20543 0x0 }, /* POOL32S_0~*(8) */
20544 { reserved_block
, 0 , 0 , 32,
20545 0xfc0001ff, 0xc0000048, 0 , 0,
20546 0x0 }, /* POOL32S_0~*(9) */
20547 { instruction
, 0 , 0 , 32,
20548 0xfc0001ff, 0xc0000050, &DSRLV
, 0,
20549 MIPS64_
}, /* DSRLV */
20550 { instruction
, 0 , 0 , 32,
20551 0xfc0001ff, 0xc0000058, &DMUH
, 0,
20552 MIPS64_
}, /* DMUH */
20553 { reserved_block
, 0 , 0 , 32,
20554 0xfc0001ff, 0xc0000060, 0 , 0,
20555 0x0 }, /* POOL32S_0~*(12) */
20556 { reserved_block
, 0 , 0 , 32,
20557 0xfc0001ff, 0xc0000068, 0 , 0,
20558 0x0 }, /* POOL32S_0~*(13) */
20559 { reserved_block
, 0 , 0 , 32,
20560 0xfc0001ff, 0xc0000070, 0 , 0,
20561 0x0 }, /* POOL32S_0~*(14) */
20562 { reserved_block
, 0 , 0 , 32,
20563 0xfc0001ff, 0xc0000078, 0 , 0,
20564 0x0 }, /* POOL32S_0~*(15) */
20565 { reserved_block
, 0 , 0 , 32,
20566 0xfc0001ff, 0xc0000080, 0 , 0,
20567 0x0 }, /* POOL32S_0~*(16) */
20568 { reserved_block
, 0 , 0 , 32,
20569 0xfc0001ff, 0xc0000088, 0 , 0,
20570 0x0 }, /* POOL32S_0~*(17) */
20571 { instruction
, 0 , 0 , 32,
20572 0xfc0001ff, 0xc0000090, &DSRAV
, 0,
20573 MIPS64_
}, /* DSRAV */
20574 { instruction
, 0 , 0 , 32,
20575 0xfc0001ff, 0xc0000098, &DMULU
, 0,
20576 MIPS64_
}, /* DMULU */
20577 { reserved_block
, 0 , 0 , 32,
20578 0xfc0001ff, 0xc00000a0, 0 , 0,
20579 0x0 }, /* POOL32S_0~*(20) */
20580 { reserved_block
, 0 , 0 , 32,
20581 0xfc0001ff, 0xc00000a8, 0 , 0,
20582 0x0 }, /* POOL32S_0~*(21) */
20583 { reserved_block
, 0 , 0 , 32,
20584 0xfc0001ff, 0xc00000b0, 0 , 0,
20585 0x0 }, /* POOL32S_0~*(22) */
20586 { reserved_block
, 0 , 0 , 32,
20587 0xfc0001ff, 0xc00000b8, 0 , 0,
20588 0x0 }, /* POOL32S_0~*(23) */
20589 { reserved_block
, 0 , 0 , 32,
20590 0xfc0001ff, 0xc00000c0, 0 , 0,
20591 0x0 }, /* POOL32S_0~*(24) */
20592 { reserved_block
, 0 , 0 , 32,
20593 0xfc0001ff, 0xc00000c8, 0 , 0,
20594 0x0 }, /* POOL32S_0~*(25) */
20595 { instruction
, 0 , 0 , 32,
20596 0xfc0001ff, 0xc00000d0, &DROTRV
, 0,
20597 MIPS64_
}, /* DROTRV */
20598 { instruction
, 0 , 0 , 32,
20599 0xfc0001ff, 0xc00000d8, &DMUHU
, 0,
20600 MIPS64_
}, /* DMUHU */
20601 { reserved_block
, 0 , 0 , 32,
20602 0xfc0001ff, 0xc00000e0, 0 , 0,
20603 0x0 }, /* POOL32S_0~*(28) */
20604 { reserved_block
, 0 , 0 , 32,
20605 0xfc0001ff, 0xc00000e8, 0 , 0,
20606 0x0 }, /* POOL32S_0~*(29) */
20607 { reserved_block
, 0 , 0 , 32,
20608 0xfc0001ff, 0xc00000f0, 0 , 0,
20609 0x0 }, /* POOL32S_0~*(30) */
20610 { reserved_block
, 0 , 0 , 32,
20611 0xfc0001ff, 0xc00000f8, 0 , 0,
20612 0x0 }, /* POOL32S_0~*(31) */
20613 { reserved_block
, 0 , 0 , 32,
20614 0xfc0001ff, 0xc0000100, 0 , 0,
20615 0x0 }, /* POOL32S_0~*(32) */
20616 { reserved_block
, 0 , 0 , 32,
20617 0xfc0001ff, 0xc0000108, 0 , 0,
20618 0x0 }, /* POOL32S_0~*(33) */
20619 { instruction
, 0 , 0 , 32,
20620 0xfc0001ff, 0xc0000110, &DADD
, 0,
20621 MIPS64_
}, /* DADD */
20622 { instruction
, 0 , 0 , 32,
20623 0xfc0001ff, 0xc0000118, &DDIV
, 0,
20624 MIPS64_
}, /* DDIV */
20625 { reserved_block
, 0 , 0 , 32,
20626 0xfc0001ff, 0xc0000120, 0 , 0,
20627 0x0 }, /* POOL32S_0~*(36) */
20628 { reserved_block
, 0 , 0 , 32,
20629 0xfc0001ff, 0xc0000128, 0 , 0,
20630 0x0 }, /* POOL32S_0~*(37) */
20631 { reserved_block
, 0 , 0 , 32,
20632 0xfc0001ff, 0xc0000130, 0 , 0,
20633 0x0 }, /* POOL32S_0~*(38) */
20634 { reserved_block
, 0 , 0 , 32,
20635 0xfc0001ff, 0xc0000138, 0 , 0,
20636 0x0 }, /* POOL32S_0~*(39) */
20637 { reserved_block
, 0 , 0 , 32,
20638 0xfc0001ff, 0xc0000140, 0 , 0,
20639 0x0 }, /* POOL32S_0~*(40) */
20640 { reserved_block
, 0 , 0 , 32,
20641 0xfc0001ff, 0xc0000148, 0 , 0,
20642 0x0 }, /* POOL32S_0~*(41) */
20643 { instruction
, 0 , 0 , 32,
20644 0xfc0001ff, 0xc0000150, &DADDU
, 0,
20645 MIPS64_
}, /* DADDU */
20646 { instruction
, 0 , 0 , 32,
20647 0xfc0001ff, 0xc0000158, &DMOD
, 0,
20648 MIPS64_
}, /* DMOD */
20649 { reserved_block
, 0 , 0 , 32,
20650 0xfc0001ff, 0xc0000160, 0 , 0,
20651 0x0 }, /* POOL32S_0~*(44) */
20652 { reserved_block
, 0 , 0 , 32,
20653 0xfc0001ff, 0xc0000168, 0 , 0,
20654 0x0 }, /* POOL32S_0~*(45) */
20655 { reserved_block
, 0 , 0 , 32,
20656 0xfc0001ff, 0xc0000170, 0 , 0,
20657 0x0 }, /* POOL32S_0~*(46) */
20658 { reserved_block
, 0 , 0 , 32,
20659 0xfc0001ff, 0xc0000178, 0 , 0,
20660 0x0 }, /* POOL32S_0~*(47) */
20661 { reserved_block
, 0 , 0 , 32,
20662 0xfc0001ff, 0xc0000180, 0 , 0,
20663 0x0 }, /* POOL32S_0~*(48) */
20664 { reserved_block
, 0 , 0 , 32,
20665 0xfc0001ff, 0xc0000188, 0 , 0,
20666 0x0 }, /* POOL32S_0~*(49) */
20667 { instruction
, 0 , 0 , 32,
20668 0xfc0001ff, 0xc0000190, &DSUB
, 0,
20669 MIPS64_
}, /* DSUB */
20670 { instruction
, 0 , 0 , 32,
20671 0xfc0001ff, 0xc0000198, &DDIVU
, 0,
20672 MIPS64_
}, /* DDIVU */
20673 { reserved_block
, 0 , 0 , 32,
20674 0xfc0001ff, 0xc00001a0, 0 , 0,
20675 0x0 }, /* POOL32S_0~*(52) */
20676 { reserved_block
, 0 , 0 , 32,
20677 0xfc0001ff, 0xc00001a8, 0 , 0,
20678 0x0 }, /* POOL32S_0~*(53) */
20679 { reserved_block
, 0 , 0 , 32,
20680 0xfc0001ff, 0xc00001b0, 0 , 0,
20681 0x0 }, /* POOL32S_0~*(54) */
20682 { reserved_block
, 0 , 0 , 32,
20683 0xfc0001ff, 0xc00001b8, 0 , 0,
20684 0x0 }, /* POOL32S_0~*(55) */
20685 { reserved_block
, 0 , 0 , 32,
20686 0xfc0001ff, 0xc00001c0, 0 , 0,
20687 0x0 }, /* POOL32S_0~*(56) */
20688 { reserved_block
, 0 , 0 , 32,
20689 0xfc0001ff, 0xc00001c8, 0 , 0,
20690 0x0 }, /* POOL32S_0~*(57) */
20691 { instruction
, 0 , 0 , 32,
20692 0xfc0001ff, 0xc00001d0, &DSUBU
, 0,
20693 MIPS64_
}, /* DSUBU */
20694 { instruction
, 0 , 0 , 32,
20695 0xfc0001ff, 0xc00001d8, &DMODU
, 0,
20696 MIPS64_
}, /* DMODU */
20697 { reserved_block
, 0 , 0 , 32,
20698 0xfc0001ff, 0xc00001e0, 0 , 0,
20699 0x0 }, /* POOL32S_0~*(60) */
20700 { reserved_block
, 0 , 0 , 32,
20701 0xfc0001ff, 0xc00001e8, 0 , 0,
20702 0x0 }, /* POOL32S_0~*(61) */
20703 { reserved_block
, 0 , 0 , 32,
20704 0xfc0001ff, 0xc00001f0, 0 , 0,
20705 0x0 }, /* POOL32S_0~*(62) */
20706 { reserved_block
, 0 , 0 , 32,
20707 0xfc0001ff, 0xc00001f8, 0 , 0,
20708 0x0 }, /* POOL32S_0~*(63) */
20712 static const Pool POOL32Sxf_4
[128] = {
20713 { reserved_block
, 0 , 0 , 32,
20714 0xfc00ffff, 0xc000013c, 0 , 0,
20715 0x0 }, /* POOL32Sxf_4~*(0) */
20716 { reserved_block
, 0 , 0 , 32,
20717 0xfc00ffff, 0xc000033c, 0 , 0,
20718 0x0 }, /* POOL32Sxf_4~*(1) */
20719 { reserved_block
, 0 , 0 , 32,
20720 0xfc00ffff, 0xc000053c, 0 , 0,
20721 0x0 }, /* POOL32Sxf_4~*(2) */
20722 { reserved_block
, 0 , 0 , 32,
20723 0xfc00ffff, 0xc000073c, 0 , 0,
20724 0x0 }, /* POOL32Sxf_4~*(3) */
20725 { reserved_block
, 0 , 0 , 32,
20726 0xfc00ffff, 0xc000093c, 0 , 0,
20727 0x0 }, /* POOL32Sxf_4~*(4) */
20728 { reserved_block
, 0 , 0 , 32,
20729 0xfc00ffff, 0xc0000b3c, 0 , 0,
20730 0x0 }, /* POOL32Sxf_4~*(5) */
20731 { reserved_block
, 0 , 0 , 32,
20732 0xfc00ffff, 0xc0000d3c, 0 , 0,
20733 0x0 }, /* POOL32Sxf_4~*(6) */
20734 { reserved_block
, 0 , 0 , 32,
20735 0xfc00ffff, 0xc0000f3c, 0 , 0,
20736 0x0 }, /* POOL32Sxf_4~*(7) */
20737 { reserved_block
, 0 , 0 , 32,
20738 0xfc00ffff, 0xc000113c, 0 , 0,
20739 0x0 }, /* POOL32Sxf_4~*(8) */
20740 { reserved_block
, 0 , 0 , 32,
20741 0xfc00ffff, 0xc000133c, 0 , 0,
20742 0x0 }, /* POOL32Sxf_4~*(9) */
20743 { reserved_block
, 0 , 0 , 32,
20744 0xfc00ffff, 0xc000153c, 0 , 0,
20745 0x0 }, /* POOL32Sxf_4~*(10) */
20746 { reserved_block
, 0 , 0 , 32,
20747 0xfc00ffff, 0xc000173c, 0 , 0,
20748 0x0 }, /* POOL32Sxf_4~*(11) */
20749 { reserved_block
, 0 , 0 , 32,
20750 0xfc00ffff, 0xc000193c, 0 , 0,
20751 0x0 }, /* POOL32Sxf_4~*(12) */
20752 { reserved_block
, 0 , 0 , 32,
20753 0xfc00ffff, 0xc0001b3c, 0 , 0,
20754 0x0 }, /* POOL32Sxf_4~*(13) */
20755 { reserved_block
, 0 , 0 , 32,
20756 0xfc00ffff, 0xc0001d3c, 0 , 0,
20757 0x0 }, /* POOL32Sxf_4~*(14) */
20758 { reserved_block
, 0 , 0 , 32,
20759 0xfc00ffff, 0xc0001f3c, 0 , 0,
20760 0x0 }, /* POOL32Sxf_4~*(15) */
20761 { reserved_block
, 0 , 0 , 32,
20762 0xfc00ffff, 0xc000213c, 0 , 0,
20763 0x0 }, /* POOL32Sxf_4~*(16) */
20764 { reserved_block
, 0 , 0 , 32,
20765 0xfc00ffff, 0xc000233c, 0 , 0,
20766 0x0 }, /* POOL32Sxf_4~*(17) */
20767 { reserved_block
, 0 , 0 , 32,
20768 0xfc00ffff, 0xc000253c, 0 , 0,
20769 0x0 }, /* POOL32Sxf_4~*(18) */
20770 { reserved_block
, 0 , 0 , 32,
20771 0xfc00ffff, 0xc000273c, 0 , 0,
20772 0x0 }, /* POOL32Sxf_4~*(19) */
20773 { reserved_block
, 0 , 0 , 32,
20774 0xfc00ffff, 0xc000293c, 0 , 0,
20775 0x0 }, /* POOL32Sxf_4~*(20) */
20776 { reserved_block
, 0 , 0 , 32,
20777 0xfc00ffff, 0xc0002b3c, 0 , 0,
20778 0x0 }, /* POOL32Sxf_4~*(21) */
20779 { reserved_block
, 0 , 0 , 32,
20780 0xfc00ffff, 0xc0002d3c, 0 , 0,
20781 0x0 }, /* POOL32Sxf_4~*(22) */
20782 { reserved_block
, 0 , 0 , 32,
20783 0xfc00ffff, 0xc0002f3c, 0 , 0,
20784 0x0 }, /* POOL32Sxf_4~*(23) */
20785 { reserved_block
, 0 , 0 , 32,
20786 0xfc00ffff, 0xc000313c, 0 , 0,
20787 0x0 }, /* POOL32Sxf_4~*(24) */
20788 { reserved_block
, 0 , 0 , 32,
20789 0xfc00ffff, 0xc000333c, 0 , 0,
20790 0x0 }, /* POOL32Sxf_4~*(25) */
20791 { reserved_block
, 0 , 0 , 32,
20792 0xfc00ffff, 0xc000353c, 0 , 0,
20793 0x0 }, /* POOL32Sxf_4~*(26) */
20794 { reserved_block
, 0 , 0 , 32,
20795 0xfc00ffff, 0xc000373c, 0 , 0,
20796 0x0 }, /* POOL32Sxf_4~*(27) */
20797 { reserved_block
, 0 , 0 , 32,
20798 0xfc00ffff, 0xc000393c, 0 , 0,
20799 0x0 }, /* POOL32Sxf_4~*(28) */
20800 { reserved_block
, 0 , 0 , 32,
20801 0xfc00ffff, 0xc0003b3c, 0 , 0,
20802 0x0 }, /* POOL32Sxf_4~*(29) */
20803 { reserved_block
, 0 , 0 , 32,
20804 0xfc00ffff, 0xc0003d3c, 0 , 0,
20805 0x0 }, /* POOL32Sxf_4~*(30) */
20806 { reserved_block
, 0 , 0 , 32,
20807 0xfc00ffff, 0xc0003f3c, 0 , 0,
20808 0x0 }, /* POOL32Sxf_4~*(31) */
20809 { reserved_block
, 0 , 0 , 32,
20810 0xfc00ffff, 0xc000413c, 0 , 0,
20811 0x0 }, /* POOL32Sxf_4~*(32) */
20812 { reserved_block
, 0 , 0 , 32,
20813 0xfc00ffff, 0xc000433c, 0 , 0,
20814 0x0 }, /* POOL32Sxf_4~*(33) */
20815 { reserved_block
, 0 , 0 , 32,
20816 0xfc00ffff, 0xc000453c, 0 , 0,
20817 0x0 }, /* POOL32Sxf_4~*(34) */
20818 { reserved_block
, 0 , 0 , 32,
20819 0xfc00ffff, 0xc000473c, 0 , 0,
20820 0x0 }, /* POOL32Sxf_4~*(35) */
20821 { reserved_block
, 0 , 0 , 32,
20822 0xfc00ffff, 0xc000493c, 0 , 0,
20823 0x0 }, /* POOL32Sxf_4~*(36) */
20824 { instruction
, 0 , 0 , 32,
20825 0xfc00ffff, 0xc0004b3c, &DCLO
, 0,
20826 MIPS64_
}, /* DCLO */
20827 { reserved_block
, 0 , 0 , 32,
20828 0xfc00ffff, 0xc0004d3c, 0 , 0,
20829 0x0 }, /* POOL32Sxf_4~*(38) */
20830 { reserved_block
, 0 , 0 , 32,
20831 0xfc00ffff, 0xc0004f3c, 0 , 0,
20832 0x0 }, /* POOL32Sxf_4~*(39) */
20833 { reserved_block
, 0 , 0 , 32,
20834 0xfc00ffff, 0xc000513c, 0 , 0,
20835 0x0 }, /* POOL32Sxf_4~*(40) */
20836 { reserved_block
, 0 , 0 , 32,
20837 0xfc00ffff, 0xc000533c, 0 , 0,
20838 0x0 }, /* POOL32Sxf_4~*(41) */
20839 { reserved_block
, 0 , 0 , 32,
20840 0xfc00ffff, 0xc000553c, 0 , 0,
20841 0x0 }, /* POOL32Sxf_4~*(42) */
20842 { reserved_block
, 0 , 0 , 32,
20843 0xfc00ffff, 0xc000573c, 0 , 0,
20844 0x0 }, /* POOL32Sxf_4~*(43) */
20845 { reserved_block
, 0 , 0 , 32,
20846 0xfc00ffff, 0xc000593c, 0 , 0,
20847 0x0 }, /* POOL32Sxf_4~*(44) */
20848 { instruction
, 0 , 0 , 32,
20849 0xfc00ffff, 0xc0005b3c, &DCLZ
, 0,
20850 MIPS64_
}, /* DCLZ */
20851 { reserved_block
, 0 , 0 , 32,
20852 0xfc00ffff, 0xc0005d3c, 0 , 0,
20853 0x0 }, /* POOL32Sxf_4~*(46) */
20854 { reserved_block
, 0 , 0 , 32,
20855 0xfc00ffff, 0xc0005f3c, 0 , 0,
20856 0x0 }, /* POOL32Sxf_4~*(47) */
20857 { reserved_block
, 0 , 0 , 32,
20858 0xfc00ffff, 0xc000613c, 0 , 0,
20859 0x0 }, /* POOL32Sxf_4~*(48) */
20860 { reserved_block
, 0 , 0 , 32,
20861 0xfc00ffff, 0xc000633c, 0 , 0,
20862 0x0 }, /* POOL32Sxf_4~*(49) */
20863 { reserved_block
, 0 , 0 , 32,
20864 0xfc00ffff, 0xc000653c, 0 , 0,
20865 0x0 }, /* POOL32Sxf_4~*(50) */
20866 { reserved_block
, 0 , 0 , 32,
20867 0xfc00ffff, 0xc000673c, 0 , 0,
20868 0x0 }, /* POOL32Sxf_4~*(51) */
20869 { reserved_block
, 0 , 0 , 32,
20870 0xfc00ffff, 0xc000693c, 0 , 0,
20871 0x0 }, /* POOL32Sxf_4~*(52) */
20872 { reserved_block
, 0 , 0 , 32,
20873 0xfc00ffff, 0xc0006b3c, 0 , 0,
20874 0x0 }, /* POOL32Sxf_4~*(53) */
20875 { reserved_block
, 0 , 0 , 32,
20876 0xfc00ffff, 0xc0006d3c, 0 , 0,
20877 0x0 }, /* POOL32Sxf_4~*(54) */
20878 { reserved_block
, 0 , 0 , 32,
20879 0xfc00ffff, 0xc0006f3c, 0 , 0,
20880 0x0 }, /* POOL32Sxf_4~*(55) */
20881 { reserved_block
, 0 , 0 , 32,
20882 0xfc00ffff, 0xc000713c, 0 , 0,
20883 0x0 }, /* POOL32Sxf_4~*(56) */
20884 { reserved_block
, 0 , 0 , 32,
20885 0xfc00ffff, 0xc000733c, 0 , 0,
20886 0x0 }, /* POOL32Sxf_4~*(57) */
20887 { reserved_block
, 0 , 0 , 32,
20888 0xfc00ffff, 0xc000753c, 0 , 0,
20889 0x0 }, /* POOL32Sxf_4~*(58) */
20890 { reserved_block
, 0 , 0 , 32,
20891 0xfc00ffff, 0xc000773c, 0 , 0,
20892 0x0 }, /* POOL32Sxf_4~*(59) */
20893 { reserved_block
, 0 , 0 , 32,
20894 0xfc00ffff, 0xc000793c, 0 , 0,
20895 0x0 }, /* POOL32Sxf_4~*(60) */
20896 { reserved_block
, 0 , 0 , 32,
20897 0xfc00ffff, 0xc0007b3c, 0 , 0,
20898 0x0 }, /* POOL32Sxf_4~*(61) */
20899 { reserved_block
, 0 , 0 , 32,
20900 0xfc00ffff, 0xc0007d3c, 0 , 0,
20901 0x0 }, /* POOL32Sxf_4~*(62) */
20902 { reserved_block
, 0 , 0 , 32,
20903 0xfc00ffff, 0xc0007f3c, 0 , 0,
20904 0x0 }, /* POOL32Sxf_4~*(63) */
20905 { reserved_block
, 0 , 0 , 32,
20906 0xfc00ffff, 0xc000813c, 0 , 0,
20907 0x0 }, /* POOL32Sxf_4~*(64) */
20908 { reserved_block
, 0 , 0 , 32,
20909 0xfc00ffff, 0xc000833c, 0 , 0,
20910 0x0 }, /* POOL32Sxf_4~*(65) */
20911 { reserved_block
, 0 , 0 , 32,
20912 0xfc00ffff, 0xc000853c, 0 , 0,
20913 0x0 }, /* POOL32Sxf_4~*(66) */
20914 { reserved_block
, 0 , 0 , 32,
20915 0xfc00ffff, 0xc000873c, 0 , 0,
20916 0x0 }, /* POOL32Sxf_4~*(67) */
20917 { reserved_block
, 0 , 0 , 32,
20918 0xfc00ffff, 0xc000893c, 0 , 0,
20919 0x0 }, /* POOL32Sxf_4~*(68) */
20920 { reserved_block
, 0 , 0 , 32,
20921 0xfc00ffff, 0xc0008b3c, 0 , 0,
20922 0x0 }, /* POOL32Sxf_4~*(69) */
20923 { reserved_block
, 0 , 0 , 32,
20924 0xfc00ffff, 0xc0008d3c, 0 , 0,
20925 0x0 }, /* POOL32Sxf_4~*(70) */
20926 { reserved_block
, 0 , 0 , 32,
20927 0xfc00ffff, 0xc0008f3c, 0 , 0,
20928 0x0 }, /* POOL32Sxf_4~*(71) */
20929 { reserved_block
, 0 , 0 , 32,
20930 0xfc00ffff, 0xc000913c, 0 , 0,
20931 0x0 }, /* POOL32Sxf_4~*(72) */
20932 { reserved_block
, 0 , 0 , 32,
20933 0xfc00ffff, 0xc000933c, 0 , 0,
20934 0x0 }, /* POOL32Sxf_4~*(73) */
20935 { reserved_block
, 0 , 0 , 32,
20936 0xfc00ffff, 0xc000953c, 0 , 0,
20937 0x0 }, /* POOL32Sxf_4~*(74) */
20938 { reserved_block
, 0 , 0 , 32,
20939 0xfc00ffff, 0xc000973c, 0 , 0,
20940 0x0 }, /* POOL32Sxf_4~*(75) */
20941 { reserved_block
, 0 , 0 , 32,
20942 0xfc00ffff, 0xc000993c, 0 , 0,
20943 0x0 }, /* POOL32Sxf_4~*(76) */
20944 { reserved_block
, 0 , 0 , 32,
20945 0xfc00ffff, 0xc0009b3c, 0 , 0,
20946 0x0 }, /* POOL32Sxf_4~*(77) */
20947 { reserved_block
, 0 , 0 , 32,
20948 0xfc00ffff, 0xc0009d3c, 0 , 0,
20949 0x0 }, /* POOL32Sxf_4~*(78) */
20950 { reserved_block
, 0 , 0 , 32,
20951 0xfc00ffff, 0xc0009f3c, 0 , 0,
20952 0x0 }, /* POOL32Sxf_4~*(79) */
20953 { reserved_block
, 0 , 0 , 32,
20954 0xfc00ffff, 0xc000a13c, 0 , 0,
20955 0x0 }, /* POOL32Sxf_4~*(80) */
20956 { reserved_block
, 0 , 0 , 32,
20957 0xfc00ffff, 0xc000a33c, 0 , 0,
20958 0x0 }, /* POOL32Sxf_4~*(81) */
20959 { reserved_block
, 0 , 0 , 32,
20960 0xfc00ffff, 0xc000a53c, 0 , 0,
20961 0x0 }, /* POOL32Sxf_4~*(82) */
20962 { reserved_block
, 0 , 0 , 32,
20963 0xfc00ffff, 0xc000a73c, 0 , 0,
20964 0x0 }, /* POOL32Sxf_4~*(83) */
20965 { reserved_block
, 0 , 0 , 32,
20966 0xfc00ffff, 0xc000a93c, 0 , 0,
20967 0x0 }, /* POOL32Sxf_4~*(84) */
20968 { reserved_block
, 0 , 0 , 32,
20969 0xfc00ffff, 0xc000ab3c, 0 , 0,
20970 0x0 }, /* POOL32Sxf_4~*(85) */
20971 { reserved_block
, 0 , 0 , 32,
20972 0xfc00ffff, 0xc000ad3c, 0 , 0,
20973 0x0 }, /* POOL32Sxf_4~*(86) */
20974 { reserved_block
, 0 , 0 , 32,
20975 0xfc00ffff, 0xc000af3c, 0 , 0,
20976 0x0 }, /* POOL32Sxf_4~*(87) */
20977 { reserved_block
, 0 , 0 , 32,
20978 0xfc00ffff, 0xc000b13c, 0 , 0,
20979 0x0 }, /* POOL32Sxf_4~*(88) */
20980 { reserved_block
, 0 , 0 , 32,
20981 0xfc00ffff, 0xc000b33c, 0 , 0,
20982 0x0 }, /* POOL32Sxf_4~*(89) */
20983 { reserved_block
, 0 , 0 , 32,
20984 0xfc00ffff, 0xc000b53c, 0 , 0,
20985 0x0 }, /* POOL32Sxf_4~*(90) */
20986 { reserved_block
, 0 , 0 , 32,
20987 0xfc00ffff, 0xc000b73c, 0 , 0,
20988 0x0 }, /* POOL32Sxf_4~*(91) */
20989 { reserved_block
, 0 , 0 , 32,
20990 0xfc00ffff, 0xc000b93c, 0 , 0,
20991 0x0 }, /* POOL32Sxf_4~*(92) */
20992 { reserved_block
, 0 , 0 , 32,
20993 0xfc00ffff, 0xc000bb3c, 0 , 0,
20994 0x0 }, /* POOL32Sxf_4~*(93) */
20995 { reserved_block
, 0 , 0 , 32,
20996 0xfc00ffff, 0xc000bd3c, 0 , 0,
20997 0x0 }, /* POOL32Sxf_4~*(94) */
20998 { reserved_block
, 0 , 0 , 32,
20999 0xfc00ffff, 0xc000bf3c, 0 , 0,
21000 0x0 }, /* POOL32Sxf_4~*(95) */
21001 { reserved_block
, 0 , 0 , 32,
21002 0xfc00ffff, 0xc000c13c, 0 , 0,
21003 0x0 }, /* POOL32Sxf_4~*(96) */
21004 { reserved_block
, 0 , 0 , 32,
21005 0xfc00ffff, 0xc000c33c, 0 , 0,
21006 0x0 }, /* POOL32Sxf_4~*(97) */
21007 { reserved_block
, 0 , 0 , 32,
21008 0xfc00ffff, 0xc000c53c, 0 , 0,
21009 0x0 }, /* POOL32Sxf_4~*(98) */
21010 { reserved_block
, 0 , 0 , 32,
21011 0xfc00ffff, 0xc000c73c, 0 , 0,
21012 0x0 }, /* POOL32Sxf_4~*(99) */
21013 { reserved_block
, 0 , 0 , 32,
21014 0xfc00ffff, 0xc000c93c, 0 , 0,
21015 0x0 }, /* POOL32Sxf_4~*(100) */
21016 { reserved_block
, 0 , 0 , 32,
21017 0xfc00ffff, 0xc000cb3c, 0 , 0,
21018 0x0 }, /* POOL32Sxf_4~*(101) */
21019 { reserved_block
, 0 , 0 , 32,
21020 0xfc00ffff, 0xc000cd3c, 0 , 0,
21021 0x0 }, /* POOL32Sxf_4~*(102) */
21022 { reserved_block
, 0 , 0 , 32,
21023 0xfc00ffff, 0xc000cf3c, 0 , 0,
21024 0x0 }, /* POOL32Sxf_4~*(103) */
21025 { reserved_block
, 0 , 0 , 32,
21026 0xfc00ffff, 0xc000d13c, 0 , 0,
21027 0x0 }, /* POOL32Sxf_4~*(104) */
21028 { reserved_block
, 0 , 0 , 32,
21029 0xfc00ffff, 0xc000d33c, 0 , 0,
21030 0x0 }, /* POOL32Sxf_4~*(105) */
21031 { reserved_block
, 0 , 0 , 32,
21032 0xfc00ffff, 0xc000d53c, 0 , 0,
21033 0x0 }, /* POOL32Sxf_4~*(106) */
21034 { reserved_block
, 0 , 0 , 32,
21035 0xfc00ffff, 0xc000d73c, 0 , 0,
21036 0x0 }, /* POOL32Sxf_4~*(107) */
21037 { reserved_block
, 0 , 0 , 32,
21038 0xfc00ffff, 0xc000d93c, 0 , 0,
21039 0x0 }, /* POOL32Sxf_4~*(108) */
21040 { reserved_block
, 0 , 0 , 32,
21041 0xfc00ffff, 0xc000db3c, 0 , 0,
21042 0x0 }, /* POOL32Sxf_4~*(109) */
21043 { reserved_block
, 0 , 0 , 32,
21044 0xfc00ffff, 0xc000dd3c, 0 , 0,
21045 0x0 }, /* POOL32Sxf_4~*(110) */
21046 { reserved_block
, 0 , 0 , 32,
21047 0xfc00ffff, 0xc000df3c, 0 , 0,
21048 0x0 }, /* POOL32Sxf_4~*(111) */
21049 { reserved_block
, 0 , 0 , 32,
21050 0xfc00ffff, 0xc000e13c, 0 , 0,
21051 0x0 }, /* POOL32Sxf_4~*(112) */
21052 { reserved_block
, 0 , 0 , 32,
21053 0xfc00ffff, 0xc000e33c, 0 , 0,
21054 0x0 }, /* POOL32Sxf_4~*(113) */
21055 { reserved_block
, 0 , 0 , 32,
21056 0xfc00ffff, 0xc000e53c, 0 , 0,
21057 0x0 }, /* POOL32Sxf_4~*(114) */
21058 { reserved_block
, 0 , 0 , 32,
21059 0xfc00ffff, 0xc000e73c, 0 , 0,
21060 0x0 }, /* POOL32Sxf_4~*(115) */
21061 { reserved_block
, 0 , 0 , 32,
21062 0xfc00ffff, 0xc000e93c, 0 , 0,
21063 0x0 }, /* POOL32Sxf_4~*(116) */
21064 { reserved_block
, 0 , 0 , 32,
21065 0xfc00ffff, 0xc000eb3c, 0 , 0,
21066 0x0 }, /* POOL32Sxf_4~*(117) */
21067 { reserved_block
, 0 , 0 , 32,
21068 0xfc00ffff, 0xc000ed3c, 0 , 0,
21069 0x0 }, /* POOL32Sxf_4~*(118) */
21070 { reserved_block
, 0 , 0 , 32,
21071 0xfc00ffff, 0xc000ef3c, 0 , 0,
21072 0x0 }, /* POOL32Sxf_4~*(119) */
21073 { reserved_block
, 0 , 0 , 32,
21074 0xfc00ffff, 0xc000f13c, 0 , 0,
21075 0x0 }, /* POOL32Sxf_4~*(120) */
21076 { reserved_block
, 0 , 0 , 32,
21077 0xfc00ffff, 0xc000f33c, 0 , 0,
21078 0x0 }, /* POOL32Sxf_4~*(121) */
21079 { reserved_block
, 0 , 0 , 32,
21080 0xfc00ffff, 0xc000f53c, 0 , 0,
21081 0x0 }, /* POOL32Sxf_4~*(122) */
21082 { reserved_block
, 0 , 0 , 32,
21083 0xfc00ffff, 0xc000f73c, 0 , 0,
21084 0x0 }, /* POOL32Sxf_4~*(123) */
21085 { reserved_block
, 0 , 0 , 32,
21086 0xfc00ffff, 0xc000f93c, 0 , 0,
21087 0x0 }, /* POOL32Sxf_4~*(124) */
21088 { reserved_block
, 0 , 0 , 32,
21089 0xfc00ffff, 0xc000fb3c, 0 , 0,
21090 0x0 }, /* POOL32Sxf_4~*(125) */
21091 { reserved_block
, 0 , 0 , 32,
21092 0xfc00ffff, 0xc000fd3c, 0 , 0,
21093 0x0 }, /* POOL32Sxf_4~*(126) */
21094 { reserved_block
, 0 , 0 , 32,
21095 0xfc00ffff, 0xc000ff3c, 0 , 0,
21096 0x0 }, /* POOL32Sxf_4~*(127) */
21100 static const Pool POOL32Sxf
[8] = {
21101 { reserved_block
, 0 , 0 , 32,
21102 0xfc0001ff, 0xc000003c, 0 , 0,
21103 0x0 }, /* POOL32Sxf~*(0) */
21104 { reserved_block
, 0 , 0 , 32,
21105 0xfc0001ff, 0xc000007c, 0 , 0,
21106 0x0 }, /* POOL32Sxf~*(1) */
21107 { reserved_block
, 0 , 0 , 32,
21108 0xfc0001ff, 0xc00000bc, 0 , 0,
21109 0x0 }, /* POOL32Sxf~*(2) */
21110 { reserved_block
, 0 , 0 , 32,
21111 0xfc0001ff, 0xc00000fc, 0 , 0,
21112 0x0 }, /* POOL32Sxf~*(3) */
21113 { pool
, POOL32Sxf_4
, 128 , 32,
21114 0xfc0001ff, 0xc000013c, 0 , 0,
21115 0x0 }, /* POOL32Sxf_4 */
21116 { reserved_block
, 0 , 0 , 32,
21117 0xfc0001ff, 0xc000017c, 0 , 0,
21118 0x0 }, /* POOL32Sxf~*(5) */
21119 { reserved_block
, 0 , 0 , 32,
21120 0xfc0001ff, 0xc00001bc, 0 , 0,
21121 0x0 }, /* POOL32Sxf~*(6) */
21122 { reserved_block
, 0 , 0 , 32,
21123 0xfc0001ff, 0xc00001fc, 0 , 0,
21124 0x0 }, /* POOL32Sxf~*(7) */
21128 static const Pool POOL32S_4
[8] = {
21129 { instruction
, 0 , 0 , 32,
21130 0xfc00003f, 0xc0000004, &EXTD
, 0,
21131 MIPS64_
}, /* EXTD */
21132 { instruction
, 0 , 0 , 32,
21133 0xfc00003f, 0xc000000c, &EXTD32
, 0,
21134 MIPS64_
}, /* EXTD32 */
21135 { reserved_block
, 0 , 0 , 32,
21136 0xfc00003f, 0xc0000014, 0 , 0,
21137 0x0 }, /* POOL32S_4~*(2) */
21138 { reserved_block
, 0 , 0 , 32,
21139 0xfc00003f, 0xc000001c, 0 , 0,
21140 0x0 }, /* POOL32S_4~*(3) */
21141 { reserved_block
, 0 , 0 , 32,
21142 0xfc00003f, 0xc0000024, 0 , 0,
21143 0x0 }, /* POOL32S_4~*(4) */
21144 { reserved_block
, 0 , 0 , 32,
21145 0xfc00003f, 0xc000002c, 0 , 0,
21146 0x0 }, /* POOL32S_4~*(5) */
21147 { reserved_block
, 0 , 0 , 32,
21148 0xfc00003f, 0xc0000034, 0 , 0,
21149 0x0 }, /* POOL32S_4~*(6) */
21150 { pool
, POOL32Sxf
, 8 , 32,
21151 0xfc00003f, 0xc000003c, 0 , 0,
21152 0x0 }, /* POOL32Sxf */
21156 static const Pool POOL32S
[8] = {
21157 { pool
, POOL32S_0
, 64 , 32,
21158 0xfc000007, 0xc0000000, 0 , 0,
21159 0x0 }, /* POOL32S_0 */
21160 { reserved_block
, 0 , 0 , 32,
21161 0xfc000007, 0xc0000001, 0 , 0,
21162 0x0 }, /* POOL32S~*(1) */
21163 { reserved_block
, 0 , 0 , 32,
21164 0xfc000007, 0xc0000002, 0 , 0,
21165 0x0 }, /* POOL32S~*(2) */
21166 { reserved_block
, 0 , 0 , 32,
21167 0xfc000007, 0xc0000003, 0 , 0,
21168 0x0 }, /* POOL32S~*(3) */
21169 { pool
, POOL32S_4
, 8 , 32,
21170 0xfc000007, 0xc0000004, 0 , 0,
21171 0x0 }, /* POOL32S_4 */
21172 { reserved_block
, 0 , 0 , 32,
21173 0xfc000007, 0xc0000005, 0 , 0,
21174 0x0 }, /* POOL32S~*(5) */
21175 { reserved_block
, 0 , 0 , 32,
21176 0xfc000007, 0xc0000006, 0 , 0,
21177 0x0 }, /* POOL32S~*(6) */
21178 { reserved_block
, 0 , 0 , 32,
21179 0xfc000007, 0xc0000007, 0 , 0,
21180 0x0 }, /* POOL32S~*(7) */
21184 static const Pool P_LUI
[2] = {
21185 { instruction
, 0 , 0 , 32,
21186 0xfc000002, 0xe0000000, &LUI
, 0,
21188 { instruction
, 0 , 0 , 32,
21189 0xfc000002, 0xe0000002, &ALUIPC
, 0,
21190 0x0 }, /* ALUIPC */
21194 static const Pool P_GP_LH
[2] = {
21195 { instruction
, 0 , 0 , 32,
21196 0xfc1c0001, 0x44100000, &LH_GP_
, 0,
21197 0x0 }, /* LH[GP] */
21198 { instruction
, 0 , 0 , 32,
21199 0xfc1c0001, 0x44100001, &LHU_GP_
, 0,
21200 0x0 }, /* LHU[GP] */
21204 static const Pool P_GP_SH
[2] = {
21205 { instruction
, 0 , 0 , 32,
21206 0xfc1c0001, 0x44140000, &SH_GP_
, 0,
21207 0x0 }, /* SH[GP] */
21208 { reserved_block
, 0 , 0 , 32,
21209 0xfc1c0001, 0x44140001, 0 , 0,
21210 0x0 }, /* P.GP.SH~*(1) */
21214 static const Pool P_GP_CP1
[4] = {
21215 { instruction
, 0 , 0 , 32,
21216 0xfc1c0003, 0x44180000, &LWC1_GP_
, 0,
21217 CP1_
}, /* LWC1[GP] */
21218 { instruction
, 0 , 0 , 32,
21219 0xfc1c0003, 0x44180001, &SWC1_GP_
, 0,
21220 CP1_
}, /* SWC1[GP] */
21221 { instruction
, 0 , 0 , 32,
21222 0xfc1c0003, 0x44180002, &LDC1_GP_
, 0,
21223 CP1_
}, /* LDC1[GP] */
21224 { instruction
, 0 , 0 , 32,
21225 0xfc1c0003, 0x44180003, &SDC1_GP_
, 0,
21226 CP1_
}, /* SDC1[GP] */
21230 static const Pool P_GP_M64
[4] = {
21231 { instruction
, 0 , 0 , 32,
21232 0xfc1c0003, 0x441c0000, &LWU_GP_
, 0,
21233 MIPS64_
}, /* LWU[GP] */
21234 { reserved_block
, 0 , 0 , 32,
21235 0xfc1c0003, 0x441c0001, 0 , 0,
21236 0x0 }, /* P.GP.M64~*(1) */
21237 { reserved_block
, 0 , 0 , 32,
21238 0xfc1c0003, 0x441c0002, 0 , 0,
21239 0x0 }, /* P.GP.M64~*(2) */
21240 { reserved_block
, 0 , 0 , 32,
21241 0xfc1c0003, 0x441c0003, 0 , 0,
21242 0x0 }, /* P.GP.M64~*(3) */
21246 static const Pool P_GP_BH
[8] = {
21247 { instruction
, 0 , 0 , 32,
21248 0xfc1c0000, 0x44000000, &LB_GP_
, 0,
21249 0x0 }, /* LB[GP] */
21250 { instruction
, 0 , 0 , 32,
21251 0xfc1c0000, 0x44040000, &SB_GP_
, 0,
21252 0x0 }, /* SB[GP] */
21253 { instruction
, 0 , 0 , 32,
21254 0xfc1c0000, 0x44080000, &LBU_GP_
, 0,
21255 0x0 }, /* LBU[GP] */
21256 { instruction
, 0 , 0 , 32,
21257 0xfc1c0000, 0x440c0000, &ADDIU_GP_B_
, 0,
21258 0x0 }, /* ADDIU[GP.B] */
21259 { pool
, P_GP_LH
, 2 , 32,
21260 0xfc1c0000, 0x44100000, 0 , 0,
21261 0x0 }, /* P.GP.LH */
21262 { pool
, P_GP_SH
, 2 , 32,
21263 0xfc1c0000, 0x44140000, 0 , 0,
21264 0x0 }, /* P.GP.SH */
21265 { pool
, P_GP_CP1
, 4 , 32,
21266 0xfc1c0000, 0x44180000, 0 , 0,
21267 0x0 }, /* P.GP.CP1 */
21268 { pool
, P_GP_M64
, 4 , 32,
21269 0xfc1c0000, 0x441c0000, 0 , 0,
21270 0x0 }, /* P.GP.M64 */
21274 static const Pool P_LS_U12
[16] = {
21275 { instruction
, 0 , 0 , 32,
21276 0xfc00f000, 0x84000000, &LB_U12_
, 0,
21277 0x0 }, /* LB[U12] */
21278 { instruction
, 0 , 0 , 32,
21279 0xfc00f000, 0x84001000, &SB_U12_
, 0,
21280 0x0 }, /* SB[U12] */
21281 { instruction
, 0 , 0 , 32,
21282 0xfc00f000, 0x84002000, &LBU_U12_
, 0,
21283 0x0 }, /* LBU[U12] */
21284 { instruction
, 0 , 0 , 32,
21285 0xfc00f000, 0x84003000, &PREF_U12_
, 0,
21286 0x0 }, /* PREF[U12] */
21287 { instruction
, 0 , 0 , 32,
21288 0xfc00f000, 0x84004000, &LH_U12_
, 0,
21289 0x0 }, /* LH[U12] */
21290 { instruction
, 0 , 0 , 32,
21291 0xfc00f000, 0x84005000, &SH_U12_
, 0,
21292 0x0 }, /* SH[U12] */
21293 { instruction
, 0 , 0 , 32,
21294 0xfc00f000, 0x84006000, &LHU_U12_
, 0,
21295 0x0 }, /* LHU[U12] */
21296 { instruction
, 0 , 0 , 32,
21297 0xfc00f000, 0x84007000, &LWU_U12_
, 0,
21298 MIPS64_
}, /* LWU[U12] */
21299 { instruction
, 0 , 0 , 32,
21300 0xfc00f000, 0x84008000, &LW_U12_
, 0,
21301 0x0 }, /* LW[U12] */
21302 { instruction
, 0 , 0 , 32,
21303 0xfc00f000, 0x84009000, &SW_U12_
, 0,
21304 0x0 }, /* SW[U12] */
21305 { instruction
, 0 , 0 , 32,
21306 0xfc00f000, 0x8400a000, &LWC1_U12_
, 0,
21307 CP1_
}, /* LWC1[U12] */
21308 { instruction
, 0 , 0 , 32,
21309 0xfc00f000, 0x8400b000, &SWC1_U12_
, 0,
21310 CP1_
}, /* SWC1[U12] */
21311 { instruction
, 0 , 0 , 32,
21312 0xfc00f000, 0x8400c000, &LD_U12_
, 0,
21313 MIPS64_
}, /* LD[U12] */
21314 { instruction
, 0 , 0 , 32,
21315 0xfc00f000, 0x8400d000, &SD_U12_
, 0,
21316 MIPS64_
}, /* SD[U12] */
21317 { instruction
, 0 , 0 , 32,
21318 0xfc00f000, 0x8400e000, &LDC1_U12_
, 0,
21319 CP1_
}, /* LDC1[U12] */
21320 { instruction
, 0 , 0 , 32,
21321 0xfc00f000, 0x8400f000, &SDC1_U12_
, 0,
21322 CP1_
}, /* SDC1[U12] */
21326 static const Pool P_PREF_S9_
[2] = {
21327 { instruction
, 0 , 0 , 32,
21328 0xffe07f00, 0xa7e01800, &SYNCI
, 0,
21330 { instruction
, 0 , 0 , 32,
21331 0xfc007f00, 0xa4001800, &PREF_S9_
, &PREF_S9__cond
,
21332 0x0 }, /* PREF[S9] */
21336 static const Pool P_LS_S0
[16] = {
21337 { instruction
, 0 , 0 , 32,
21338 0xfc007f00, 0xa4000000, &LB_S9_
, 0,
21339 0x0 }, /* LB[S9] */
21340 { instruction
, 0 , 0 , 32,
21341 0xfc007f00, 0xa4000800, &SB_S9_
, 0,
21342 0x0 }, /* SB[S9] */
21343 { instruction
, 0 , 0 , 32,
21344 0xfc007f00, 0xa4001000, &LBU_S9_
, 0,
21345 0x0 }, /* LBU[S9] */
21346 { pool
, P_PREF_S9_
, 2 , 32,
21347 0xfc007f00, 0xa4001800, 0 , 0,
21348 0x0 }, /* P.PREF[S9] */
21349 { instruction
, 0 , 0 , 32,
21350 0xfc007f00, 0xa4002000, &LH_S9_
, 0,
21351 0x0 }, /* LH[S9] */
21352 { instruction
, 0 , 0 , 32,
21353 0xfc007f00, 0xa4002800, &SH_S9_
, 0,
21354 0x0 }, /* SH[S9] */
21355 { instruction
, 0 , 0 , 32,
21356 0xfc007f00, 0xa4003000, &LHU_S9_
, 0,
21357 0x0 }, /* LHU[S9] */
21358 { instruction
, 0 , 0 , 32,
21359 0xfc007f00, 0xa4003800, &LWU_S9_
, 0,
21360 MIPS64_
}, /* LWU[S9] */
21361 { instruction
, 0 , 0 , 32,
21362 0xfc007f00, 0xa4004000, &LW_S9_
, 0,
21363 0x0 }, /* LW[S9] */
21364 { instruction
, 0 , 0 , 32,
21365 0xfc007f00, 0xa4004800, &SW_S9_
, 0,
21366 0x0 }, /* SW[S9] */
21367 { instruction
, 0 , 0 , 32,
21368 0xfc007f00, 0xa4005000, &LWC1_S9_
, 0,
21369 CP1_
}, /* LWC1[S9] */
21370 { instruction
, 0 , 0 , 32,
21371 0xfc007f00, 0xa4005800, &SWC1_S9_
, 0,
21372 CP1_
}, /* SWC1[S9] */
21373 { instruction
, 0 , 0 , 32,
21374 0xfc007f00, 0xa4006000, &LD_S9_
, 0,
21375 MIPS64_
}, /* LD[S9] */
21376 { instruction
, 0 , 0 , 32,
21377 0xfc007f00, 0xa4006800, &SD_S9_
, 0,
21378 MIPS64_
}, /* SD[S9] */
21379 { instruction
, 0 , 0 , 32,
21380 0xfc007f00, 0xa4007000, &LDC1_S9_
, 0,
21381 CP1_
}, /* LDC1[S9] */
21382 { instruction
, 0 , 0 , 32,
21383 0xfc007f00, 0xa4007800, &SDC1_S9_
, 0,
21384 CP1_
}, /* SDC1[S9] */
21388 static const Pool ASET_ACLR
[2] = {
21389 { instruction
, 0 , 0 , 32,
21390 0xfe007f00, 0xa4001100, &ASET
, 0,
21392 { instruction
, 0 , 0 , 32,
21393 0xfe007f00, 0xa6001100, &ACLR
, 0,
21398 static const Pool P_LL
[4] = {
21399 { instruction
, 0 , 0 , 32,
21400 0xfc007f03, 0xa4005100, &LL
, 0,
21402 { instruction
, 0 , 0 , 32,
21403 0xfc007f03, 0xa4005101, &LLWP
, 0,
21405 { reserved_block
, 0 , 0 , 32,
21406 0xfc007f03, 0xa4005102, 0 , 0,
21407 0x0 }, /* P.LL~*(2) */
21408 { reserved_block
, 0 , 0 , 32,
21409 0xfc007f03, 0xa4005103, 0 , 0,
21410 0x0 }, /* P.LL~*(3) */
21414 static const Pool P_SC
[4] = {
21415 { instruction
, 0 , 0 , 32,
21416 0xfc007f03, 0xa4005900, &SC
, 0,
21418 { instruction
, 0 , 0 , 32,
21419 0xfc007f03, 0xa4005901, &SCWP
, 0,
21421 { reserved_block
, 0 , 0 , 32,
21422 0xfc007f03, 0xa4005902, 0 , 0,
21423 0x0 }, /* P.SC~*(2) */
21424 { reserved_block
, 0 , 0 , 32,
21425 0xfc007f03, 0xa4005903, 0 , 0,
21426 0x0 }, /* P.SC~*(3) */
21430 static const Pool P_LLD
[8] = {
21431 { instruction
, 0 , 0 , 32,
21432 0xfc007f07, 0xa4007100, &LLD
, 0,
21433 MIPS64_
}, /* LLD */
21434 { instruction
, 0 , 0 , 32,
21435 0xfc007f07, 0xa4007101, &LLDP
, 0,
21436 MIPS64_
}, /* LLDP */
21437 { reserved_block
, 0 , 0 , 32,
21438 0xfc007f07, 0xa4007102, 0 , 0,
21439 0x0 }, /* P.LLD~*(2) */
21440 { reserved_block
, 0 , 0 , 32,
21441 0xfc007f07, 0xa4007103, 0 , 0,
21442 0x0 }, /* P.LLD~*(3) */
21443 { reserved_block
, 0 , 0 , 32,
21444 0xfc007f07, 0xa4007104, 0 , 0,
21445 0x0 }, /* P.LLD~*(4) */
21446 { reserved_block
, 0 , 0 , 32,
21447 0xfc007f07, 0xa4007105, 0 , 0,
21448 0x0 }, /* P.LLD~*(5) */
21449 { reserved_block
, 0 , 0 , 32,
21450 0xfc007f07, 0xa4007106, 0 , 0,
21451 0x0 }, /* P.LLD~*(6) */
21452 { reserved_block
, 0 , 0 , 32,
21453 0xfc007f07, 0xa4007107, 0 , 0,
21454 0x0 }, /* P.LLD~*(7) */
21458 static const Pool P_SCD
[8] = {
21459 { instruction
, 0 , 0 , 32,
21460 0xfc007f07, 0xa4007900, &SCD
, 0,
21461 MIPS64_
}, /* SCD */
21462 { instruction
, 0 , 0 , 32,
21463 0xfc007f07, 0xa4007901, &SCDP
, 0,
21464 MIPS64_
}, /* SCDP */
21465 { reserved_block
, 0 , 0 , 32,
21466 0xfc007f07, 0xa4007902, 0 , 0,
21467 0x0 }, /* P.SCD~*(2) */
21468 { reserved_block
, 0 , 0 , 32,
21469 0xfc007f07, 0xa4007903, 0 , 0,
21470 0x0 }, /* P.SCD~*(3) */
21471 { reserved_block
, 0 , 0 , 32,
21472 0xfc007f07, 0xa4007904, 0 , 0,
21473 0x0 }, /* P.SCD~*(4) */
21474 { reserved_block
, 0 , 0 , 32,
21475 0xfc007f07, 0xa4007905, 0 , 0,
21476 0x0 }, /* P.SCD~*(5) */
21477 { reserved_block
, 0 , 0 , 32,
21478 0xfc007f07, 0xa4007906, 0 , 0,
21479 0x0 }, /* P.SCD~*(6) */
21480 { reserved_block
, 0 , 0 , 32,
21481 0xfc007f07, 0xa4007907, 0 , 0,
21482 0x0 }, /* P.SCD~*(7) */
21486 static const Pool P_LS_S1
[16] = {
21487 { reserved_block
, 0 , 0 , 32,
21488 0xfc007f00, 0xa4000100, 0 , 0,
21489 0x0 }, /* P.LS.S1~*(0) */
21490 { reserved_block
, 0 , 0 , 32,
21491 0xfc007f00, 0xa4000900, 0 , 0,
21492 0x0 }, /* P.LS.S1~*(1) */
21493 { pool
, ASET_ACLR
, 2 , 32,
21494 0xfc007f00, 0xa4001100, 0 , 0,
21495 0x0 }, /* ASET_ACLR */
21496 { reserved_block
, 0 , 0 , 32,
21497 0xfc007f00, 0xa4001900, 0 , 0,
21498 0x0 }, /* P.LS.S1~*(3) */
21499 { instruction
, 0 , 0 , 32,
21500 0xfc007f00, 0xa4002100, &UALH
, 0,
21501 XMMS_
}, /* UALH */
21502 { instruction
, 0 , 0 , 32,
21503 0xfc007f00, 0xa4002900, &UASH
, 0,
21504 XMMS_
}, /* UASH */
21505 { reserved_block
, 0 , 0 , 32,
21506 0xfc007f00, 0xa4003100, 0 , 0,
21507 0x0 }, /* P.LS.S1~*(6) */
21508 { instruction
, 0 , 0 , 32,
21509 0xfc007f00, 0xa4003900, &CACHE
, 0,
21510 CP0_
}, /* CACHE */
21511 { instruction
, 0 , 0 , 32,
21512 0xfc007f00, 0xa4004100, &LWC2
, 0,
21514 { instruction
, 0 , 0 , 32,
21515 0xfc007f00, 0xa4004900, &SWC2
, 0,
21517 { pool
, P_LL
, 4 , 32,
21518 0xfc007f00, 0xa4005100, 0 , 0,
21520 { pool
, P_SC
, 4 , 32,
21521 0xfc007f00, 0xa4005900, 0 , 0,
21523 { instruction
, 0 , 0 , 32,
21524 0xfc007f00, 0xa4006100, &LDC2
, 0,
21526 { instruction
, 0 , 0 , 32,
21527 0xfc007f00, 0xa4006900, &SDC2
, 0,
21529 { pool
, P_LLD
, 8 , 32,
21530 0xfc007f00, 0xa4007100, 0 , 0,
21532 { pool
, P_SCD
, 8 , 32,
21533 0xfc007f00, 0xa4007900, 0 , 0,
21538 static const Pool P_PREFE
[2] = {
21539 { instruction
, 0 , 0 , 32,
21540 0xffe07f00, 0xa7e01a00, &SYNCIE
, 0,
21541 CP0_
| EVA_
}, /* SYNCIE */
21542 { instruction
, 0 , 0 , 32,
21543 0xfc007f00, 0xa4001a00, &PREFE
, &PREFE_cond
,
21544 CP0_
| EVA_
}, /* PREFE */
21548 static const Pool P_LLE
[4] = {
21549 { instruction
, 0 , 0 , 32,
21550 0xfc007f03, 0xa4005200, &LLE
, 0,
21551 CP0_
| EVA_
}, /* LLE */
21552 { instruction
, 0 , 0 , 32,
21553 0xfc007f03, 0xa4005201, &LLWPE
, 0,
21554 CP0_
| EVA_
}, /* LLWPE */
21555 { reserved_block
, 0 , 0 , 32,
21556 0xfc007f03, 0xa4005202, 0 , 0,
21557 0x0 }, /* P.LLE~*(2) */
21558 { reserved_block
, 0 , 0 , 32,
21559 0xfc007f03, 0xa4005203, 0 , 0,
21560 0x0 }, /* P.LLE~*(3) */
21564 static const Pool P_SCE
[4] = {
21565 { instruction
, 0 , 0 , 32,
21566 0xfc007f03, 0xa4005a00, &SCE
, 0,
21567 CP0_
| EVA_
}, /* SCE */
21568 { instruction
, 0 , 0 , 32,
21569 0xfc007f03, 0xa4005a01, &SCWPE
, 0,
21570 CP0_
| EVA_
}, /* SCWPE */
21571 { reserved_block
, 0 , 0 , 32,
21572 0xfc007f03, 0xa4005a02, 0 , 0,
21573 0x0 }, /* P.SCE~*(2) */
21574 { reserved_block
, 0 , 0 , 32,
21575 0xfc007f03, 0xa4005a03, 0 , 0,
21576 0x0 }, /* P.SCE~*(3) */
21580 static const Pool P_LS_E0
[16] = {
21581 { instruction
, 0 , 0 , 32,
21582 0xfc007f00, 0xa4000200, &LBE
, 0,
21583 CP0_
| EVA_
}, /* LBE */
21584 { instruction
, 0 , 0 , 32,
21585 0xfc007f00, 0xa4000a00, &SBE
, 0,
21586 CP0_
| EVA_
}, /* SBE */
21587 { instruction
, 0 , 0 , 32,
21588 0xfc007f00, 0xa4001200, &LBUE
, 0,
21589 CP0_
| EVA_
}, /* LBUE */
21590 { pool
, P_PREFE
, 2 , 32,
21591 0xfc007f00, 0xa4001a00, 0 , 0,
21592 0x0 }, /* P.PREFE */
21593 { instruction
, 0 , 0 , 32,
21594 0xfc007f00, 0xa4002200, &LHE
, 0,
21595 CP0_
| EVA_
}, /* LHE */
21596 { instruction
, 0 , 0 , 32,
21597 0xfc007f00, 0xa4002a00, &SHE
, 0,
21598 CP0_
| EVA_
}, /* SHE */
21599 { instruction
, 0 , 0 , 32,
21600 0xfc007f00, 0xa4003200, &LHUE
, 0,
21601 CP0_
| EVA_
}, /* LHUE */
21602 { instruction
, 0 , 0 , 32,
21603 0xfc007f00, 0xa4003a00, &CACHEE
, 0,
21604 CP0_
| EVA_
}, /* CACHEE */
21605 { instruction
, 0 , 0 , 32,
21606 0xfc007f00, 0xa4004200, &LWE
, 0,
21607 CP0_
| EVA_
}, /* LWE */
21608 { instruction
, 0 , 0 , 32,
21609 0xfc007f00, 0xa4004a00, &SWE
, 0,
21610 CP0_
| EVA_
}, /* SWE */
21611 { pool
, P_LLE
, 4 , 32,
21612 0xfc007f00, 0xa4005200, 0 , 0,
21614 { pool
, P_SCE
, 4 , 32,
21615 0xfc007f00, 0xa4005a00, 0 , 0,
21617 { reserved_block
, 0 , 0 , 32,
21618 0xfc007f00, 0xa4006200, 0 , 0,
21619 0x0 }, /* P.LS.E0~*(12) */
21620 { reserved_block
, 0 , 0 , 32,
21621 0xfc007f00, 0xa4006a00, 0 , 0,
21622 0x0 }, /* P.LS.E0~*(13) */
21623 { reserved_block
, 0 , 0 , 32,
21624 0xfc007f00, 0xa4007200, 0 , 0,
21625 0x0 }, /* P.LS.E0~*(14) */
21626 { reserved_block
, 0 , 0 , 32,
21627 0xfc007f00, 0xa4007a00, 0 , 0,
21628 0x0 }, /* P.LS.E0~*(15) */
21632 static const Pool P_LS_WM
[2] = {
21633 { instruction
, 0 , 0 , 32,
21634 0xfc000f00, 0xa4000400, &LWM
, 0,
21636 { instruction
, 0 , 0 , 32,
21637 0xfc000f00, 0xa4000c00, &SWM
, 0,
21642 static const Pool P_LS_UAWM
[2] = {
21643 { instruction
, 0 , 0 , 32,
21644 0xfc000f00, 0xa4000500, &UALWM
, 0,
21645 XMMS_
}, /* UALWM */
21646 { instruction
, 0 , 0 , 32,
21647 0xfc000f00, 0xa4000d00, &UASWM
, 0,
21648 XMMS_
}, /* UASWM */
21652 static const Pool P_LS_DM
[2] = {
21653 { instruction
, 0 , 0 , 32,
21654 0xfc000f00, 0xa4000600, &LDM
, 0,
21655 MIPS64_
}, /* LDM */
21656 { instruction
, 0 , 0 , 32,
21657 0xfc000f00, 0xa4000e00, &SDM
, 0,
21658 MIPS64_
}, /* SDM */
21662 static const Pool P_LS_UADM
[2] = {
21663 { instruction
, 0 , 0 , 32,
21664 0xfc000f00, 0xa4000700, &UALDM
, 0,
21665 MIPS64_
}, /* UALDM */
21666 { instruction
, 0 , 0 , 32,
21667 0xfc000f00, 0xa4000f00, &UASDM
, 0,
21668 MIPS64_
}, /* UASDM */
21672 static const Pool P_LS_S9
[8] = {
21673 { pool
, P_LS_S0
, 16 , 32,
21674 0xfc000700, 0xa4000000, 0 , 0,
21675 0x0 }, /* P.LS.S0 */
21676 { pool
, P_LS_S1
, 16 , 32,
21677 0xfc000700, 0xa4000100, 0 , 0,
21678 0x0 }, /* P.LS.S1 */
21679 { pool
, P_LS_E0
, 16 , 32,
21680 0xfc000700, 0xa4000200, 0 , 0,
21681 0x0 }, /* P.LS.E0 */
21682 { reserved_block
, 0 , 0 , 32,
21683 0xfc000700, 0xa4000300, 0 , 0,
21684 0x0 }, /* P.LS.S9~*(3) */
21685 { pool
, P_LS_WM
, 2 , 32,
21686 0xfc000700, 0xa4000400, 0 , 0,
21687 0x0 }, /* P.LS.WM */
21688 { pool
, P_LS_UAWM
, 2 , 32,
21689 0xfc000700, 0xa4000500, 0 , 0,
21690 0x0 }, /* P.LS.UAWM */
21691 { pool
, P_LS_DM
, 2 , 32,
21692 0xfc000700, 0xa4000600, 0 , 0,
21693 0x0 }, /* P.LS.DM */
21694 { pool
, P_LS_UADM
, 2 , 32,
21695 0xfc000700, 0xa4000700, 0 , 0,
21696 0x0 }, /* P.LS.UADM */
21700 static const Pool P_BAL
[2] = {
21701 { branch_instruction
, 0 , 0 , 32,
21702 0xfe000000, 0x28000000, &BC_32_
, 0,
21703 0x0 }, /* BC[32] */
21704 { call_instruction
, 0 , 0 , 32,
21705 0xfe000000, 0x2a000000, &BALC_32_
, 0,
21706 0x0 }, /* BALC[32] */
21710 static const Pool P_BALRSC
[2] = {
21711 { branch_instruction
, 0 , 0 , 32,
21712 0xffe0f000, 0x48008000, &BRSC
, 0,
21714 { call_instruction
, 0 , 0 , 32,
21715 0xfc00f000, 0x48008000, &BALRSC
, &BALRSC_cond
,
21716 0x0 }, /* BALRSC */
21720 static const Pool P_J
[16] = {
21721 { call_instruction
, 0 , 0 , 32,
21722 0xfc00f000, 0x48000000, &JALRC_32_
, 0,
21723 0x0 }, /* JALRC[32] */
21724 { call_instruction
, 0 , 0 , 32,
21725 0xfc00f000, 0x48001000, &JALRC_HB
, 0,
21726 0x0 }, /* JALRC.HB */
21727 { reserved_block
, 0 , 0 , 32,
21728 0xfc00f000, 0x48002000, 0 , 0,
21729 0x0 }, /* P.J~*(2) */
21730 { reserved_block
, 0 , 0 , 32,
21731 0xfc00f000, 0x48003000, 0 , 0,
21732 0x0 }, /* P.J~*(3) */
21733 { reserved_block
, 0 , 0 , 32,
21734 0xfc00f000, 0x48004000, 0 , 0,
21735 0x0 }, /* P.J~*(4) */
21736 { reserved_block
, 0 , 0 , 32,
21737 0xfc00f000, 0x48005000, 0 , 0,
21738 0x0 }, /* P.J~*(5) */
21739 { reserved_block
, 0 , 0 , 32,
21740 0xfc00f000, 0x48006000, 0 , 0,
21741 0x0 }, /* P.J~*(6) */
21742 { reserved_block
, 0 , 0 , 32,
21743 0xfc00f000, 0x48007000, 0 , 0,
21744 0x0 }, /* P.J~*(7) */
21745 { pool
, P_BALRSC
, 2 , 32,
21746 0xfc00f000, 0x48008000, 0 , 0,
21747 0x0 }, /* P.BALRSC */
21748 { reserved_block
, 0 , 0 , 32,
21749 0xfc00f000, 0x48009000, 0 , 0,
21750 0x0 }, /* P.J~*(9) */
21751 { reserved_block
, 0 , 0 , 32,
21752 0xfc00f000, 0x4800a000, 0 , 0,
21753 0x0 }, /* P.J~*(10) */
21754 { reserved_block
, 0 , 0 , 32,
21755 0xfc00f000, 0x4800b000, 0 , 0,
21756 0x0 }, /* P.J~*(11) */
21757 { reserved_block
, 0 , 0 , 32,
21758 0xfc00f000, 0x4800c000, 0 , 0,
21759 0x0 }, /* P.J~*(12) */
21760 { reserved_block
, 0 , 0 , 32,
21761 0xfc00f000, 0x4800d000, 0 , 0,
21762 0x0 }, /* P.J~*(13) */
21763 { reserved_block
, 0 , 0 , 32,
21764 0xfc00f000, 0x4800e000, 0 , 0,
21765 0x0 }, /* P.J~*(14) */
21766 { reserved_block
, 0 , 0 , 32,
21767 0xfc00f000, 0x4800f000, 0 , 0,
21768 0x0 }, /* P.J~*(15) */
21772 static const Pool P_BR3A
[32] = {
21773 { branch_instruction
, 0 , 0 , 32,
21774 0xfc1fc000, 0x88004000, &BC1EQZC
, 0,
21775 CP1_
}, /* BC1EQZC */
21776 { branch_instruction
, 0 , 0 , 32,
21777 0xfc1fc000, 0x88014000, &BC1NEZC
, 0,
21778 CP1_
}, /* BC1NEZC */
21779 { branch_instruction
, 0 , 0 , 32,
21780 0xfc1fc000, 0x88024000, &BC2EQZC
, 0,
21781 CP2_
}, /* BC2EQZC */
21782 { branch_instruction
, 0 , 0 , 32,
21783 0xfc1fc000, 0x88034000, &BC2NEZC
, 0,
21784 CP2_
}, /* BC2NEZC */
21785 { branch_instruction
, 0 , 0 , 32,
21786 0xfc1fc000, 0x88044000, &BPOSGE32C
, 0,
21787 DSP_
}, /* BPOSGE32C */
21788 { reserved_block
, 0 , 0 , 32,
21789 0xfc1fc000, 0x88054000, 0 , 0,
21790 0x0 }, /* P.BR3A~*(5) */
21791 { reserved_block
, 0 , 0 , 32,
21792 0xfc1fc000, 0x88064000, 0 , 0,
21793 0x0 }, /* P.BR3A~*(6) */
21794 { reserved_block
, 0 , 0 , 32,
21795 0xfc1fc000, 0x88074000, 0 , 0,
21796 0x0 }, /* P.BR3A~*(7) */
21797 { reserved_block
, 0 , 0 , 32,
21798 0xfc1fc000, 0x88084000, 0 , 0,
21799 0x0 }, /* P.BR3A~*(8) */
21800 { reserved_block
, 0 , 0 , 32,
21801 0xfc1fc000, 0x88094000, 0 , 0,
21802 0x0 }, /* P.BR3A~*(9) */
21803 { reserved_block
, 0 , 0 , 32,
21804 0xfc1fc000, 0x880a4000, 0 , 0,
21805 0x0 }, /* P.BR3A~*(10) */
21806 { reserved_block
, 0 , 0 , 32,
21807 0xfc1fc000, 0x880b4000, 0 , 0,
21808 0x0 }, /* P.BR3A~*(11) */
21809 { reserved_block
, 0 , 0 , 32,
21810 0xfc1fc000, 0x880c4000, 0 , 0,
21811 0x0 }, /* P.BR3A~*(12) */
21812 { reserved_block
, 0 , 0 , 32,
21813 0xfc1fc000, 0x880d4000, 0 , 0,
21814 0x0 }, /* P.BR3A~*(13) */
21815 { reserved_block
, 0 , 0 , 32,
21816 0xfc1fc000, 0x880e4000, 0 , 0,
21817 0x0 }, /* P.BR3A~*(14) */
21818 { reserved_block
, 0 , 0 , 32,
21819 0xfc1fc000, 0x880f4000, 0 , 0,
21820 0x0 }, /* P.BR3A~*(15) */
21821 { reserved_block
, 0 , 0 , 32,
21822 0xfc1fc000, 0x88104000, 0 , 0,
21823 0x0 }, /* P.BR3A~*(16) */
21824 { reserved_block
, 0 , 0 , 32,
21825 0xfc1fc000, 0x88114000, 0 , 0,
21826 0x0 }, /* P.BR3A~*(17) */
21827 { reserved_block
, 0 , 0 , 32,
21828 0xfc1fc000, 0x88124000, 0 , 0,
21829 0x0 }, /* P.BR3A~*(18) */
21830 { reserved_block
, 0 , 0 , 32,
21831 0xfc1fc000, 0x88134000, 0 , 0,
21832 0x0 }, /* P.BR3A~*(19) */
21833 { reserved_block
, 0 , 0 , 32,
21834 0xfc1fc000, 0x88144000, 0 , 0,
21835 0x0 }, /* P.BR3A~*(20) */
21836 { reserved_block
, 0 , 0 , 32,
21837 0xfc1fc000, 0x88154000, 0 , 0,
21838 0x0 }, /* P.BR3A~*(21) */
21839 { reserved_block
, 0 , 0 , 32,
21840 0xfc1fc000, 0x88164000, 0 , 0,
21841 0x0 }, /* P.BR3A~*(22) */
21842 { reserved_block
, 0 , 0 , 32,
21843 0xfc1fc000, 0x88174000, 0 , 0,
21844 0x0 }, /* P.BR3A~*(23) */
21845 { reserved_block
, 0 , 0 , 32,
21846 0xfc1fc000, 0x88184000, 0 , 0,
21847 0x0 }, /* P.BR3A~*(24) */
21848 { reserved_block
, 0 , 0 , 32,
21849 0xfc1fc000, 0x88194000, 0 , 0,
21850 0x0 }, /* P.BR3A~*(25) */
21851 { reserved_block
, 0 , 0 , 32,
21852 0xfc1fc000, 0x881a4000, 0 , 0,
21853 0x0 }, /* P.BR3A~*(26) */
21854 { reserved_block
, 0 , 0 , 32,
21855 0xfc1fc000, 0x881b4000, 0 , 0,
21856 0x0 }, /* P.BR3A~*(27) */
21857 { reserved_block
, 0 , 0 , 32,
21858 0xfc1fc000, 0x881c4000, 0 , 0,
21859 0x0 }, /* P.BR3A~*(28) */
21860 { reserved_block
, 0 , 0 , 32,
21861 0xfc1fc000, 0x881d4000, 0 , 0,
21862 0x0 }, /* P.BR3A~*(29) */
21863 { reserved_block
, 0 , 0 , 32,
21864 0xfc1fc000, 0x881e4000, 0 , 0,
21865 0x0 }, /* P.BR3A~*(30) */
21866 { reserved_block
, 0 , 0 , 32,
21867 0xfc1fc000, 0x881f4000, 0 , 0,
21868 0x0 }, /* P.BR3A~*(31) */
21872 static const Pool P_BR1
[4] = {
21873 { branch_instruction
, 0 , 0 , 32,
21874 0xfc00c000, 0x88000000, &BEQC_32_
, 0,
21875 0x0 }, /* BEQC[32] */
21876 { pool
, P_BR3A
, 32 , 32,
21877 0xfc00c000, 0x88004000, 0 , 0,
21878 0x0 }, /* P.BR3A */
21879 { branch_instruction
, 0 , 0 , 32,
21880 0xfc00c000, 0x88008000, &BGEC
, 0,
21882 { branch_instruction
, 0 , 0 , 32,
21883 0xfc00c000, 0x8800c000, &BGEUC
, 0,
21888 static const Pool P_BR2
[4] = {
21889 { branch_instruction
, 0 , 0 , 32,
21890 0xfc00c000, 0xa8000000, &BNEC_32_
, 0,
21891 0x0 }, /* BNEC[32] */
21892 { reserved_block
, 0 , 0 , 32,
21893 0xfc00c000, 0xa8004000, 0 , 0,
21894 0x0 }, /* P.BR2~*(1) */
21895 { branch_instruction
, 0 , 0 , 32,
21896 0xfc00c000, 0xa8008000, &BLTC
, 0,
21898 { branch_instruction
, 0 , 0 , 32,
21899 0xfc00c000, 0xa800c000, &BLTUC
, 0,
21904 static const Pool P_BRI
[8] = {
21905 { branch_instruction
, 0 , 0 , 32,
21906 0xfc1c0000, 0xc8000000, &BEQIC
, 0,
21908 { branch_instruction
, 0 , 0 , 32,
21909 0xfc1c0000, 0xc8040000, &BBEQZC
, 0,
21910 XMMS_
}, /* BBEQZC */
21911 { branch_instruction
, 0 , 0 , 32,
21912 0xfc1c0000, 0xc8080000, &BGEIC
, 0,
21914 { branch_instruction
, 0 , 0 , 32,
21915 0xfc1c0000, 0xc80c0000, &BGEIUC
, 0,
21916 0x0 }, /* BGEIUC */
21917 { branch_instruction
, 0 , 0 , 32,
21918 0xfc1c0000, 0xc8100000, &BNEIC
, 0,
21920 { branch_instruction
, 0 , 0 , 32,
21921 0xfc1c0000, 0xc8140000, &BBNEZC
, 0,
21922 XMMS_
}, /* BBNEZC */
21923 { branch_instruction
, 0 , 0 , 32,
21924 0xfc1c0000, 0xc8180000, &BLTIC
, 0,
21926 { branch_instruction
, 0 , 0 , 32,
21927 0xfc1c0000, 0xc81c0000, &BLTIUC
, 0,
21928 0x0 }, /* BLTIUC */
21932 static const Pool P32
[32] = {
21933 { pool
, P_ADDIU
, 2 , 32,
21934 0xfc000000, 0x00000000, 0 , 0,
21935 0x0 }, /* P.ADDIU */
21936 { pool
, P32A
, 8 , 32,
21937 0xfc000000, 0x20000000, 0 , 0,
21939 { pool
, P_GP_W
, 4 , 32,
21940 0xfc000000, 0x40000000, 0 , 0,
21941 0x0 }, /* P.GP.W */
21942 { pool
, POOL48I
, 32 , 48,
21943 0xfc0000000000ull
, 0x600000000000ull
, 0 , 0,
21944 0x0 }, /* POOL48I */
21945 { pool
, P_U12
, 16 , 32,
21946 0xfc000000, 0x80000000, 0 , 0,
21948 { pool
, POOL32F
, 8 , 32,
21949 0xfc000000, 0xa0000000, 0 , 0,
21950 CP1_
}, /* POOL32F */
21951 { pool
, POOL32S
, 8 , 32,
21952 0xfc000000, 0xc0000000, 0 , 0,
21953 0x0 }, /* POOL32S */
21954 { pool
, P_LUI
, 2 , 32,
21955 0xfc000000, 0xe0000000, 0 , 0,
21957 { instruction
, 0 , 0 , 32,
21958 0xfc000000, 0x04000000, &ADDIUPC_32_
, 0,
21959 0x0 }, /* ADDIUPC[32] */
21960 { reserved_block
, 0 , 0 , 32,
21961 0xfc000000, 0x24000000, 0 , 0,
21962 0x0 }, /* P32~*(5) */
21963 { pool
, P_GP_BH
, 8 , 32,
21964 0xfc000000, 0x44000000, 0 , 0,
21965 0x0 }, /* P.GP.BH */
21966 { reserved_block
, 0 , 0 , 32,
21967 0xfc000000, 0x64000000, 0 , 0,
21968 0x0 }, /* P32~*(13) */
21969 { pool
, P_LS_U12
, 16 , 32,
21970 0xfc000000, 0x84000000, 0 , 0,
21971 0x0 }, /* P.LS.U12 */
21972 { pool
, P_LS_S9
, 8 , 32,
21973 0xfc000000, 0xa4000000, 0 , 0,
21974 0x0 }, /* P.LS.S9 */
21975 { reserved_block
, 0 , 0 , 32,
21976 0xfc000000, 0xc4000000, 0 , 0,
21977 0x0 }, /* P32~*(25) */
21978 { reserved_block
, 0 , 0 , 32,
21979 0xfc000000, 0xe4000000, 0 , 0,
21980 0x0 }, /* P32~*(29) */
21981 { call_instruction
, 0 , 0 , 32,
21982 0xfc000000, 0x08000000, &MOVE_BALC
, 0,
21983 XMMS_
}, /* MOVE.BALC */
21984 { pool
, P_BAL
, 2 , 32,
21985 0xfc000000, 0x28000000, 0 , 0,
21987 { pool
, P_J
, 16 , 32,
21988 0xfc000000, 0x48000000, 0 , 0,
21990 { reserved_block
, 0 , 0 , 32,
21991 0xfc000000, 0x68000000, 0 , 0,
21992 0x0 }, /* P32~*(14) */
21993 { pool
, P_BR1
, 4 , 32,
21994 0xfc000000, 0x88000000, 0 , 0,
21996 { pool
, P_BR2
, 4 , 32,
21997 0xfc000000, 0xa8000000, 0 , 0,
21999 { pool
, P_BRI
, 8 , 32,
22000 0xfc000000, 0xc8000000, 0 , 0,
22002 { reserved_block
, 0 , 0 , 32,
22003 0xfc000000, 0xe8000000, 0 , 0,
22004 0x0 }, /* P32~*(30) */
22005 { reserved_block
, 0 , 0 , 32,
22006 0xfc000000, 0x0c000000, 0 , 0,
22007 0x0 }, /* P32~*(3) */
22008 { reserved_block
, 0 , 0 , 32,
22009 0xfc000000, 0x2c000000, 0 , 0,
22010 0x0 }, /* P32~*(7) */
22011 { reserved_block
, 0 , 0 , 32,
22012 0xfc000000, 0x4c000000, 0 , 0,
22013 0x0 }, /* P32~*(11) */
22014 { reserved_block
, 0 , 0 , 32,
22015 0xfc000000, 0x6c000000, 0 , 0,
22016 0x0 }, /* P32~*(15) */
22017 { reserved_block
, 0 , 0 , 32,
22018 0xfc000000, 0x8c000000, 0 , 0,
22019 0x0 }, /* P32~*(19) */
22020 { reserved_block
, 0 , 0 , 32,
22021 0xfc000000, 0xac000000, 0 , 0,
22022 0x0 }, /* P32~*(23) */
22023 { reserved_block
, 0 , 0 , 32,
22024 0xfc000000, 0xcc000000, 0 , 0,
22025 0x0 }, /* P32~*(27) */
22026 { reserved_block
, 0 , 0 , 32,
22027 0xfc000000, 0xec000000, 0 , 0,
22028 0x0 }, /* P32~*(31) */
22032 static const Pool P16_SYSCALL
[2] = {
22033 { instruction
, 0 , 0 , 16,
22034 0xfffc , 0x1008 , &SYSCALL_16_
, 0,
22035 0x0 }, /* SYSCALL[16] */
22036 { instruction
, 0 , 0 , 16,
22037 0xfffc , 0x100c , &HYPCALL_16_
, 0,
22038 CP0_
| VZ_
}, /* HYPCALL[16] */
22042 static const Pool P16_RI
[4] = {
22043 { reserved_block
, 0 , 0 , 16,
22044 0xfff8 , 0x1000 , 0 , 0,
22045 0x0 }, /* P16.RI~*(0) */
22046 { pool
, P16_SYSCALL
, 2 , 16,
22047 0xfff8 , 0x1008 , 0 , 0,
22048 0x0 }, /* P16.SYSCALL */
22049 { instruction
, 0 , 0 , 16,
22050 0xfff8 , 0x1010 , &BREAK_16_
, 0,
22051 0x0 }, /* BREAK[16] */
22052 { instruction
, 0 , 0 , 16,
22053 0xfff8 , 0x1018 , &SDBBP_16_
, 0,
22054 EJTAG_
}, /* SDBBP[16] */
22058 static const Pool P16_MV
[2] = {
22059 { pool
, P16_RI
, 4 , 16,
22060 0xffe0 , 0x1000 , 0 , 0,
22061 0x0 }, /* P16.RI */
22062 { instruction
, 0 , 0 , 16,
22063 0xfc00 , 0x1000 , &MOVE
, &MOVE_cond
,
22068 static const Pool P16_SHIFT
[2] = {
22069 { instruction
, 0 , 0 , 16,
22070 0xfc08 , 0x3000 , &SLL_16_
, 0,
22071 0x0 }, /* SLL[16] */
22072 { instruction
, 0 , 0 , 16,
22073 0xfc08 , 0x3008 , &SRL_16_
, 0,
22074 0x0 }, /* SRL[16] */
22078 static const Pool POOL16C_00
[4] = {
22079 { instruction
, 0 , 0 , 16,
22080 0xfc0f , 0x5000 , &NOT_16_
, 0,
22081 0x0 }, /* NOT[16] */
22082 { instruction
, 0 , 0 , 16,
22083 0xfc0f , 0x5004 , &XOR_16_
, 0,
22084 0x0 }, /* XOR[16] */
22085 { instruction
, 0 , 0 , 16,
22086 0xfc0f , 0x5008 , &AND_16_
, 0,
22087 0x0 }, /* AND[16] */
22088 { instruction
, 0 , 0 , 16,
22089 0xfc0f , 0x500c , &OR_16_
, 0,
22090 0x0 }, /* OR[16] */
22094 static const Pool POOL16C_0
[2] = {
22095 { pool
, POOL16C_00
, 4 , 16,
22096 0xfc03 , 0x5000 , 0 , 0,
22097 0x0 }, /* POOL16C_00 */
22098 { reserved_block
, 0 , 0 , 16,
22099 0xfc03 , 0x5002 , 0 , 0,
22100 0x0 }, /* POOL16C_0~*(1) */
22104 static const Pool P16C
[2] = {
22105 { pool
, POOL16C_0
, 2 , 16,
22106 0xfc01 , 0x5000 , 0 , 0,
22107 0x0 }, /* POOL16C_0 */
22108 { instruction
, 0 , 0 , 16,
22109 0xfc01 , 0x5001 , &LWXS_16_
, 0,
22110 0x0 }, /* LWXS[16] */
22114 static const Pool P16_A1
[2] = {
22115 { reserved_block
, 0 , 0 , 16,
22116 0xfc40 , 0x7000 , 0 , 0,
22117 0x0 }, /* P16.A1~*(0) */
22118 { instruction
, 0 , 0 , 16,
22119 0xfc40 , 0x7040 , &ADDIU_R1_SP_
, 0,
22120 0x0 }, /* ADDIU[R1.SP] */
22124 static const Pool P_ADDIU_RS5_
[2] = {
22125 { instruction
, 0 , 0 , 16,
22126 0xffe8 , 0x9008 , &NOP_16_
, 0,
22127 0x0 }, /* NOP[16] */
22128 { instruction
, 0 , 0 , 16,
22129 0xfc08 , 0x9008 , &ADDIU_RS5_
, &ADDIU_RS5__cond
,
22130 0x0 }, /* ADDIU[RS5] */
22134 static const Pool P16_A2
[2] = {
22135 { instruction
, 0 , 0 , 16,
22136 0xfc08 , 0x9000 , &ADDIU_R2_
, 0,
22137 0x0 }, /* ADDIU[R2] */
22138 { pool
, P_ADDIU_RS5_
, 2 , 16,
22139 0xfc08 , 0x9008 , 0 , 0,
22140 0x0 }, /* P.ADDIU[RS5] */
22144 static const Pool P16_ADDU
[2] = {
22145 { instruction
, 0 , 0 , 16,
22146 0xfc01 , 0xb000 , &ADDU_16_
, 0,
22147 0x0 }, /* ADDU[16] */
22148 { instruction
, 0 , 0 , 16,
22149 0xfc01 , 0xb001 , &SUBU_16_
, 0,
22150 0x0 }, /* SUBU[16] */
22154 static const Pool P16_JRC
[2] = {
22155 { branch_instruction
, 0 , 0 , 16,
22156 0xfc1f , 0xd800 , &JRC
, 0,
22158 { call_instruction
, 0 , 0 , 16,
22159 0xfc1f , 0xd810 , &JALRC_16_
, 0,
22160 0x0 }, /* JALRC[16] */
22164 static const Pool P16_BR1
[2] = {
22165 { branch_instruction
, 0 , 0 , 16,
22166 0xfc00 , 0xd800 , &BEQC_16_
, &BEQC_16__cond
,
22167 XMMS_
}, /* BEQC[16] */
22168 { branch_instruction
, 0 , 0 , 16,
22169 0xfc00 , 0xd800 , &BNEC_16_
, &BNEC_16__cond
,
22170 XMMS_
}, /* BNEC[16] */
22174 static const Pool P16_BR
[2] = {
22175 { pool
, P16_JRC
, 2 , 16,
22176 0xfc0f , 0xd800 , 0 , 0,
22177 0x0 }, /* P16.JRC */
22178 { pool
, P16_BR1
, 2 , 16,
22179 0xfc00 , 0xd800 , 0 , &P16_BR1_cond
,
22180 0x0 }, /* P16.BR1 */
22184 static const Pool P16_SR
[2] = {
22185 { instruction
, 0 , 0 , 16,
22186 0xfd00 , 0x1c00 , &SAVE_16_
, 0,
22187 0x0 }, /* SAVE[16] */
22188 { return_instruction
, 0 , 0 , 16,
22189 0xfd00 , 0x1d00 , &RESTORE_JRC_16_
, 0,
22190 0x0 }, /* RESTORE.JRC[16] */
22194 static const Pool P16_4X4
[4] = {
22195 { instruction
, 0 , 0 , 16,
22196 0xfd08 , 0x3c00 , &ADDU_4X4_
, 0,
22197 XMMS_
}, /* ADDU[4X4] */
22198 { instruction
, 0 , 0 , 16,
22199 0xfd08 , 0x3c08 , &MUL_4X4_
, 0,
22200 XMMS_
}, /* MUL[4X4] */
22201 { reserved_block
, 0 , 0 , 16,
22202 0xfd08 , 0x3d00 , 0 , 0,
22203 0x0 }, /* P16.4X4~*(2) */
22204 { reserved_block
, 0 , 0 , 16,
22205 0xfd08 , 0x3d08 , 0 , 0,
22206 0x0 }, /* P16.4X4~*(3) */
22210 static const Pool P16_LB
[4] = {
22211 { instruction
, 0 , 0 , 16,
22212 0xfc0c , 0x5c00 , &LB_16_
, 0,
22213 0x0 }, /* LB[16] */
22214 { instruction
, 0 , 0 , 16,
22215 0xfc0c , 0x5c04 , &SB_16_
, 0,
22216 0x0 }, /* SB[16] */
22217 { instruction
, 0 , 0 , 16,
22218 0xfc0c , 0x5c08 , &LBU_16_
, 0,
22219 0x0 }, /* LBU[16] */
22220 { reserved_block
, 0 , 0 , 16,
22221 0xfc0c , 0x5c0c , 0 , 0,
22222 0x0 }, /* P16.LB~*(3) */
22226 static const Pool P16_LH
[4] = {
22227 { instruction
, 0 , 0 , 16,
22228 0xfc09 , 0x7c00 , &LH_16_
, 0,
22229 0x0 }, /* LH[16] */
22230 { instruction
, 0 , 0 , 16,
22231 0xfc09 , 0x7c01 , &SH_16_
, 0,
22232 0x0 }, /* SH[16] */
22233 { instruction
, 0 , 0 , 16,
22234 0xfc09 , 0x7c08 , &LHU_16_
, 0,
22235 0x0 }, /* LHU[16] */
22236 { reserved_block
, 0 , 0 , 16,
22237 0xfc09 , 0x7c09 , 0 , 0,
22238 0x0 }, /* P16.LH~*(3) */
22242 static const Pool P16
[32] = {
22243 { pool
, P16_MV
, 2 , 16,
22244 0xfc00 , 0x1000 , 0 , 0,
22245 0x0 }, /* P16.MV */
22246 { pool
, P16_SHIFT
, 2 , 16,
22247 0xfc00 , 0x3000 , 0 , 0,
22248 0x0 }, /* P16.SHIFT */
22249 { pool
, P16C
, 2 , 16,
22250 0xfc00 , 0x5000 , 0 , 0,
22252 { pool
, P16_A1
, 2 , 16,
22253 0xfc00 , 0x7000 , 0 , 0,
22254 0x0 }, /* P16.A1 */
22255 { pool
, P16_A2
, 2 , 16,
22256 0xfc00 , 0x9000 , 0 , 0,
22257 0x0 }, /* P16.A2 */
22258 { pool
, P16_ADDU
, 2 , 16,
22259 0xfc00 , 0xb000 , 0 , 0,
22260 0x0 }, /* P16.ADDU */
22261 { instruction
, 0 , 0 , 16,
22262 0xfc00 , 0xd000 , &LI_16_
, 0,
22263 0x0 }, /* LI[16] */
22264 { instruction
, 0 , 0 , 16,
22265 0xfc00 , 0xf000 , &ANDI_16_
, 0,
22266 0x0 }, /* ANDI[16] */
22267 { instruction
, 0 , 0 , 16,
22268 0xfc00 , 0x1400 , &LW_16_
, 0,
22269 0x0 }, /* LW[16] */
22270 { instruction
, 0 , 0 , 16,
22271 0xfc00 , 0x3400 , &LW_SP_
, 0,
22272 0x0 }, /* LW[SP] */
22273 { instruction
, 0 , 0 , 16,
22274 0xfc00 , 0x5400 , &LW_GP16_
, 0,
22275 0x0 }, /* LW[GP16] */
22276 { instruction
, 0 , 0 , 16,
22277 0xfc00 , 0x7400 , &LW_4X4_
, 0,
22278 XMMS_
}, /* LW[4X4] */
22279 { instruction
, 0 , 0 , 16,
22280 0xfc00 , 0x9400 , &SW_16_
, 0,
22281 0x0 }, /* SW[16] */
22282 { instruction
, 0 , 0 , 16,
22283 0xfc00 , 0xb400 , &SW_SP_
, 0,
22284 0x0 }, /* SW[SP] */
22285 { instruction
, 0 , 0 , 16,
22286 0xfc00 , 0xd400 , &SW_GP16_
, 0,
22287 0x0 }, /* SW[GP16] */
22288 { instruction
, 0 , 0 , 16,
22289 0xfc00 , 0xf400 , &SW_4X4_
, 0,
22290 XMMS_
}, /* SW[4X4] */
22291 { branch_instruction
, 0 , 0 , 16,
22292 0xfc00 , 0x1800 , &BC_16_
, 0,
22293 0x0 }, /* BC[16] */
22294 { call_instruction
, 0 , 0 , 16,
22295 0xfc00 , 0x3800 , &BALC_16_
, 0,
22296 0x0 }, /* BALC[16] */
22297 { reserved_block
, 0 , 0 , 16,
22298 0xfc00 , 0x5800 , 0 , 0,
22299 0x0 }, /* P16~*(10) */
22300 { reserved_block
, 0 , 0 , 16,
22301 0xfc00 , 0x7800 , 0 , 0,
22302 0x0 }, /* P16~*(14) */
22303 { branch_instruction
, 0 , 0 , 16,
22304 0xfc00 , 0x9800 , &BEQZC_16_
, 0,
22305 0x0 }, /* BEQZC[16] */
22306 { branch_instruction
, 0 , 0 , 16,
22307 0xfc00 , 0xb800 , &BNEZC_16_
, 0,
22308 0x0 }, /* BNEZC[16] */
22309 { pool
, P16_BR
, 2 , 16,
22310 0xfc00 , 0xd800 , 0 , 0,
22311 0x0 }, /* P16.BR */
22312 { reserved_block
, 0 , 0 , 16,
22313 0xfc00 , 0xf800 , 0 , 0,
22314 0x0 }, /* P16~*(30) */
22315 { pool
, P16_SR
, 2 , 16,
22316 0xfc00 , 0x1c00 , 0 , 0,
22317 0x0 }, /* P16.SR */
22318 { pool
, P16_4X4
, 4 , 16,
22319 0xfc00 , 0x3c00 , 0 , 0,
22320 0x0 }, /* P16.4X4 */
22321 { pool
, P16_LB
, 4 , 16,
22322 0xfc00 , 0x5c00 , 0 , 0,
22323 0x0 }, /* P16.LB */
22324 { pool
, P16_LH
, 4 , 16,
22325 0xfc00 , 0x7c00 , 0 , 0,
22326 0x0 }, /* P16.LH */
22327 { reserved_block
, 0 , 0 , 16,
22328 0xfc00 , 0x9c00 , 0 , 0,
22329 0x0 }, /* P16~*(19) */
22330 { instruction
, 0 , 0 , 16,
22331 0xfc00 , 0xbc00 , &MOVEP
, 0,
22332 XMMS_
}, /* MOVEP */
22333 { reserved_block
, 0 , 0 , 16,
22334 0xfc00 , 0xdc00 , 0 , 0,
22335 0x0 }, /* P16~*(27) */
22336 { instruction
, 0 , 0 , 16,
22337 0xfc00 , 0xfc00 , &MOVEP_REV_
, 0,
22338 XMMS_
}, /* MOVEP[REV] */
22342 static const Pool MAJOR
[2] = {
22343 { pool
, P32
, 32 , 32,
22344 0x10000000, 0x00000000, 0 , 0,
22346 { pool
, P16
, 32 , 16,
22347 0x1000 , 0x1000 , 0 , 0,
22351 int NMD::Disassemble(const uint16
*data
, std::string
& dis
,
22352 TABLE_ENTRY_TYPE
& type
, Dis_info
*info
)
22354 return Disassemble(data
, dis
, type
, MAJOR
, 2, info
);