Update version for v6.1.0-rc1 release
[qemu.git] / disas / nanomips.cpp
blob9be8df75dd60025ba616ef81b378a9329a75c01b
1 /*
2 * Source file for nanoMIPS disassembler component of QEMU
4 * Copyright (C) 2018 Wave Computing, Inc.
5 * Copyright (C) 2018 Matthew Fortune <matthew.fortune@mips.com>
6 * Copyright (C) 2018 Aleksandar Markovic <amarkovic@wavecomp.com>
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
24 * Documentation used while implementing this component:
26 * [1] "MIPSĀ® Architecture Base: nanoMIPS32(tm) Instruction Set Technical
27 * Reference Manual", Revision 01.01, April 27, 2018
30 #include "qemu/osdep.h"
31 #include "disas/dis-asm.h"
33 #include <cstring>
34 #include <stdexcept>
35 #include <sstream>
36 #include <stdio.h>
37 #include <stdarg.h>
39 #include "nanomips.h"
41 #define IMGASSERTONCE(test)
44 int nanomips_dis(char *buf,
45 unsigned address,
46 unsigned short one,
47 unsigned short two,
48 unsigned short three)
50 std::string disasm;
51 uint16 bits[3] = {one, two, three};
53 NMD::TABLE_ENTRY_TYPE type;
54 NMD d(address, NMD::ALL_ATTRIBUTES);
55 int size = d.Disassemble(bits, disasm, type);
57 strcpy(buf, disasm.c_str());
58 return size;
61 int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
63 int status;
64 bfd_byte buffer[2];
65 uint16_t insn1 = 0, insn2 = 0, insn3 = 0;
66 char buf[200];
68 info->bytes_per_chunk = 2;
69 info->display_endian = info->endian;
70 info->insn_info_valid = 1;
71 info->branch_delay_insns = 0;
72 info->data_size = 0;
73 info->insn_type = dis_nonbranch;
74 info->target = 0;
75 info->target2 = 0;
77 status = (*info->read_memory_func)(memaddr, buffer, 2, info);
78 if (status != 0) {
79 (*info->memory_error_func)(status, memaddr, info);
80 return -1;
83 if (info->endian == BFD_ENDIAN_BIG) {
84 insn1 = bfd_getb16(buffer);
85 } else {
86 insn1 = bfd_getl16(buffer);
88 (*info->fprintf_func)(info->stream, "%04x ", insn1);
90 /* Handle 32-bit opcodes. */
91 if ((insn1 & 0x1000) == 0) {
92 status = (*info->read_memory_func)(memaddr + 2, buffer, 2, info);
93 if (status != 0) {
94 (*info->memory_error_func)(status, memaddr + 2, info);
95 return -1;
98 if (info->endian == BFD_ENDIAN_BIG) {
99 insn2 = bfd_getb16(buffer);
100 } else {
101 insn2 = bfd_getl16(buffer);
103 (*info->fprintf_func)(info->stream, "%04x ", insn2);
104 } else {
105 (*info->fprintf_func)(info->stream, " ");
107 /* Handle 48-bit opcodes. */
108 if ((insn1 >> 10) == 0x18) {
109 status = (*info->read_memory_func)(memaddr + 4, buffer, 2, info);
110 if (status != 0) {
111 (*info->memory_error_func)(status, memaddr + 4, info);
112 return -1;
115 if (info->endian == BFD_ENDIAN_BIG) {
116 insn3 = bfd_getb16(buffer);
117 } else {
118 insn3 = bfd_getl16(buffer);
120 (*info->fprintf_func)(info->stream, "%04x ", insn3);
121 } else {
122 (*info->fprintf_func)(info->stream, " ");
125 int length = nanomips_dis(buf, memaddr, insn1, insn2, insn3);
127 /* FIXME: Should probably use a hash table on the major opcode here. */
129 (*info->fprintf_func) (info->stream, "%s", buf);
130 if (length > 0) {
131 return length / 8;
134 info->insn_type = dis_noninsn;
136 return insn3 ? 6 : insn2 ? 4 : 2;
140 namespace img
142 address addr32(address a)
144 return a;
147 std::string format(const char *format, ...)
149 char buffer[256];
150 va_list args;
151 va_start(args, format);
152 int err = vsprintf(buffer, format, args);
153 if (err < 0) {
154 perror(buffer);
156 va_end(args);
157 return buffer;
160 std::string format(const char *format,
161 std::string s)
163 char buffer[256];
165 sprintf(buffer, format, s.c_str());
167 return buffer;
170 std::string format(const char *format,
171 std::string s1,
172 std::string s2)
174 char buffer[256];
176 sprintf(buffer, format, s1.c_str(), s2.c_str());
178 return buffer;
181 std::string format(const char *format,
182 std::string s1,
183 std::string s2,
184 std::string s3)
186 char buffer[256];
188 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str());
190 return buffer;
193 std::string format(const char *format,
194 std::string s1,
195 std::string s2,
196 std::string s3,
197 std::string s4)
199 char buffer[256];
201 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
202 s4.c_str());
204 return buffer;
207 std::string format(const char *format,
208 std::string s1,
209 std::string s2,
210 std::string s3,
211 std::string s4,
212 std::string s5)
214 char buffer[256];
216 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
217 s4.c_str(), s5.c_str());
219 return buffer;
222 std::string format(const char *format,
223 uint64 d,
224 std::string s2)
226 char buffer[256];
228 sprintf(buffer, format, d, s2.c_str());
230 return buffer;
233 std::string format(const char *format,
234 std::string s1,
235 uint64 d,
236 std::string s2)
238 char buffer[256];
240 sprintf(buffer, format, s1.c_str(), d, s2.c_str());
242 return buffer;
245 std::string format(const char *format,
246 std::string s1,
247 std::string s2,
248 uint64 d)
250 char buffer[256];
252 sprintf(buffer, format, s1.c_str(), s2.c_str(), d);
254 return buffer;
257 char as_char(int c)
259 return static_cast<char>(c);
264 std::string to_string(img::address a)
266 char buffer[256];
267 sprintf(buffer, "0x%" PRIx64, a);
268 return buffer;
272 uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size)
274 return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size);
278 int64 sign_extend(int64 data, int msb)
280 uint64 shift = 63 - msb;
281 return (data << shift) >> shift;
285 uint64 NMD::renumber_registers(uint64 index, uint64 *register_list,
286 size_t register_list_size)
288 if (index < register_list_size) {
289 return register_list[index];
292 throw std::runtime_error(img::format(
293 "Invalid register mapping index %" PRIu64
294 ", size of list = %zu",
295 index, register_list_size));
300 * NMD::decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
302 * Map a 4-bit code to the 5-bit register space according to this pattern:
304 * 1 0
305 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
306 * | | | | | | | | | | | | | | | |
307 * | | | | | | | | | | | | | | | |
308 * | | | | | | | | | | | ā””---------------ā”
309 * | | | | | | | | | | ā””---------------ā” |
310 * | | | | | | | | | ā””---------------ā” | |
311 * | | | | | | | | ā””---------------ā” | | |
312 * | | | | | | | | | | | | | | | |
313 * | | | | | | | | | | | | | | | |
314 * 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
315 * 3 2 1 0
317 * Used in handling following instructions:
319 * - ADDU[4X4]
320 * - LW[4X4]
321 * - MOVEP[REV]
322 * - MUL[4X4]
323 * - SW[4X4]
325 uint64 NMD::decode_gpr_gpr4(uint64 d)
327 static uint64 register_list[] = { 8, 9, 10, 11, 4, 5, 6, 7,
328 16, 17, 18, 19, 20, 21, 22, 23 };
329 return renumber_registers(d, register_list,
330 sizeof(register_list) / sizeof(register_list[0]));
335 * NMD::decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
337 * Map a 4-bit code to the 5-bit register space according to this pattern:
339 * 1 0
340 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
341 * | | | | | | | | | | | | | | | |
342 * | | | | | | | | | | | | ā””---------------------ā”
343 * | | | | | | | | | | | ā””---------------ā” |
344 * | | | | | | | | | | ā””---------------ā” | |
345 * | | | | | | | | | ā””---------------ā” | | |
346 * | | | | | | | | ā””---------------ā” | | | |
347 * | | | | | | | | | | | | | | | |
348 * | | | | | | | | | | | | | | | |
349 * 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
350 * 3 2 1 0
352 * This pattern is the same one used for 'gpr4' gpr encoding type, except for
353 * the input value 3, that is mapped to the output value 0 instead of 11.
355 * Used in handling following instructions:
357 * - MOVE.BALC
358 * - MOVEP
359 * - SW[4X4]
361 uint64 NMD::decode_gpr_gpr4_zero(uint64 d)
363 static uint64 register_list[] = { 8, 9, 10, 0, 4, 5, 6, 7,
364 16, 17, 18, 19, 20, 21, 22, 23 };
365 return renumber_registers(d, register_list,
366 sizeof(register_list) / sizeof(register_list[0]));
371 * NMD::decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
373 * Map a 3-bit code to the 5-bit register space according to this pattern:
375 * 7 6 5 4 3 2 1 0
376 * | | | | | | | |
377 * | | | | | | | |
378 * | | | ā””-----------------------ā”
379 * | | ā””-----------------------ā” |
380 * | ā””-----------------------ā” | |
381 * ā””-----------------------ā” | | |
382 * | | | | | | | |
383 * ā”Œ-------ā”˜ | | | | | | |
384 * | ā”Œ-------ā”˜ | | | | | |
385 * | | ā”Œ-------ā”˜ | | | | |
386 * | | | ā”Œ-------ā”˜ | | | |
387 * | | | | | | | |
388 * 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
389 * 3 2 1 0
391 * Used in handling following instructions:
393 * - ADDIU[R1.SP]
394 * - ADDIU[R2]
395 * - ADDU[16]
396 * - AND[16]
397 * - ANDI[16]
398 * - BEQC[16]
399 * - BEQZC[16]
400 * - BNEC[16]
401 * - BNEZC[16]
402 * - LB[16]
403 * - LBU[16]
404 * - LH[16]
405 * - LHU[16]
406 * - LI[16]
407 * - LW[16]
408 * - LW[GP16]
409 * - LWXS[16]
410 * - NOT[16]
411 * - OR[16]
412 * - SB[16]
413 * - SH[16]
414 * - SLL[16]
415 * - SRL[16]
416 * - SUBU[16]
417 * - SW[16]
418 * - XOR[16]
420 uint64 NMD::decode_gpr_gpr3(uint64 d)
422 static uint64 register_list[] = { 16, 17, 18, 19, 4, 5, 6, 7 };
423 return renumber_registers(d, register_list,
424 sizeof(register_list) / sizeof(register_list[0]));
429 * NMD::decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding
430 * type
432 * Map a 3-bit code to the 5-bit register space according to this pattern:
434 * 7 6 5 4 3 2 1 0
435 * | | | | | | | |
436 * | | | | | | | ā””-----------------------ā”
437 * | | | ā””-----------------------ā” |
438 * | | ā””-----------------------ā” | |
439 * | ā””-----------------------ā” | | |
440 * ā””-----------------------ā” | | | |
441 * | | | | | | | |
442 * ā”Œ-------ā”˜ | | | | | | |
443 * | ā”Œ-------ā”˜ | | | | | |
444 * | | ā”Œ-------ā”˜ | | | | |
445 * | | | | | | | |
446 * | | | | | | | |
447 * 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
448 * 3 2 1 0
450 * This pattern is the same one used for 'gpr3' gpr encoding type, except for
451 * the input value 0, that is mapped to the output value 0 instead of 16.
453 * Used in handling following instructions:
455 * - SB[16]
456 * - SH[16]
457 * - SW[16]
458 * - SW[GP16]
460 uint64 NMD::decode_gpr_gpr3_src_store(uint64 d)
462 static uint64 register_list[] = { 0, 17, 18, 19, 4, 5, 6, 7 };
463 return renumber_registers(d, register_list,
464 sizeof(register_list) / sizeof(register_list[0]));
469 * NMD::decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
471 * Map a 2-bit code to the 5-bit register space according to this pattern:
473 * 3 2 1 0
474 * | | | |
475 * | | | |
476 * | | | ā””-------------------ā”
477 * | | ā””-------------------ā” |
478 * | ā””-------------------ā” | |
479 * ā””-------------------ā” | | |
480 * | | | |
481 * | | | |
482 * 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
483 * 3 2 1 0
485 * Used in handling following instructions:
487 * - MOVEP
488 * - MOVEP[REV]
490 uint64 NMD::decode_gpr_gpr2_reg1(uint64 d)
492 static uint64 register_list[] = { 4, 5, 6, 7 };
493 return renumber_registers(d, register_list,
494 sizeof(register_list) / sizeof(register_list[0]));
499 * NMD::decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type
501 * Map a 2-bit code to the 5-bit register space according to this pattern:
503 * 3 2 1 0
504 * | | | |
505 * | | | |
506 * | | | ā””-----------------ā”
507 * | | ā””-----------------ā” |
508 * | ā””-----------------ā” | |
509 * ā””-----------------ā” | | |
510 * | | | |
511 * | | | |
512 * 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
513 * 3 2 1 0
515 * Used in handling following instructions:
517 * - MOVEP
518 * - MOVEP[REV]
520 uint64 NMD::decode_gpr_gpr2_reg2(uint64 d)
522 static uint64 register_list[] = { 5, 6, 7, 8 };
523 return renumber_registers(d, register_list,
524 sizeof(register_list) / sizeof(register_list[0]));
529 * NMD::decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
531 * Map a 1-bit code to the 5-bit register space according to this pattern:
533 * 1 0
534 * | |
535 * | |
536 * | ā””---------------------ā”
537 * ā””---------------------ā” |
538 * | |
539 * | |
540 * | |
541 * | |
542 * 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
543 * 3 2 1 0
545 * Used in handling following instruction:
547 * - MOVE.BALC
549 uint64 NMD::decode_gpr_gpr1(uint64 d)
551 static uint64 register_list[] = { 4, 5 };
552 return renumber_registers(d, register_list,
553 sizeof(register_list) / sizeof(register_list[0]));
557 uint64 NMD::copy(uint64 d)
559 return d;
563 int64 NMD::copy(int64 d)
565 return d;
569 int64 NMD::neg_copy(uint64 d)
571 return 0ll - d;
575 int64 NMD::neg_copy(int64 d)
577 return -d;
581 /* strange wrapper around gpr3 */
582 uint64 NMD::encode_rs3_and_check_rs3_ge_rt3(uint64 d)
584 return decode_gpr_gpr3(d);
588 /* strange wrapper around gpr3 */
589 uint64 NMD::encode_rs3_and_check_rs3_lt_rt3(uint64 d)
591 return decode_gpr_gpr3(d);
595 /* nop - done by extraction function */
596 uint64 NMD::encode_s_from_address(uint64 d)
598 return d;
602 /* nop - done by extraction function */
603 uint64 NMD::encode_u_from_address(uint64 d)
605 return d;
609 /* nop - done by extraction function */
610 uint64 NMD::encode_s_from_s_hi(uint64 d)
612 return d;
616 uint64 NMD::encode_count3_from_count(uint64 d)
618 IMGASSERTONCE(d < 8);
619 return d == 0ull ? 8ull : d;
623 uint64 NMD::encode_shift3_from_shift(uint64 d)
625 IMGASSERTONCE(d < 8);
626 return d == 0ull ? 8ull : d;
630 /* special value for load literal */
631 int64 NMD::encode_eu_from_s_li16(uint64 d)
633 IMGASSERTONCE(d < 128);
634 return d == 127 ? -1 : (int64)d;
638 uint64 NMD::encode_msbd_from_size(uint64 d)
640 IMGASSERTONCE(d < 32);
641 return d + 1;
645 uint64 NMD::encode_eu_from_u_andi16(uint64 d)
647 IMGASSERTONCE(d < 16);
648 if (d == 12) {
649 return 0x00ffull;
651 if (d == 13) {
652 return 0xffffull;
654 return d;
658 uint64 NMD::encode_msbd_from_pos_and_size(uint64 d)
660 IMGASSERTONCE(0);
661 return d;
665 /* save16 / restore16 ???? */
666 uint64 NMD::encode_rt1_from_rt(uint64 d)
668 return d ? 31 : 30;
672 /* ? */
673 uint64 NMD::encode_lsb_from_pos_and_size(uint64 d)
675 return d;
679 std::string NMD::save_restore_list(uint64 rt, uint64 count, uint64 gp)
681 std::string str;
683 for (uint64 counter = 0; counter != count; counter++) {
684 bool use_gp = gp && (counter == count - 1);
685 uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
686 str += img::format(",%s", GPR(this_rt));
689 return str;
693 std::string NMD::GPR(uint64 reg)
695 static const char *gpr_reg[32] = {
696 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
697 "a4", "a5", "a6", "a7", "r12", "r13", "r14", "r15",
698 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
699 "r24", "r25", "k0", "k1", "gp", "sp", "fp", "ra"
702 if (reg < 32) {
703 return gpr_reg[reg];
706 throw std::runtime_error(img::format("Invalid GPR register index %" PRIu64,
707 reg));
711 std::string NMD::FPR(uint64 reg)
713 static const char *fpr_reg[32] = {
714 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
715 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
716 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
717 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
720 if (reg < 32) {
721 return fpr_reg[reg];
724 throw std::runtime_error(img::format("Invalid FPR register index %" PRIu64,
725 reg));
729 std::string NMD::AC(uint64 reg)
731 static const char *ac_reg[4] = {
732 "ac0", "ac1", "ac2", "ac3"
735 if (reg < 4) {
736 return ac_reg[reg];
739 throw std::runtime_error(img::format("Invalid AC register index %" PRIu64,
740 reg));
744 std::string NMD::IMMEDIATE(uint64 value)
746 return img::format("0x%" PRIx64, value);
750 std::string NMD::IMMEDIATE(int64 value)
752 return img::format("%" PRId64, value);
756 std::string NMD::CPR(uint64 reg)
758 /* needs more work */
759 return img::format("CP%" PRIu64, reg);
763 std::string NMD::ADDRESS(uint64 value, int instruction_size)
765 /* token for string replace */
766 /* const char TOKEN_REPLACE = (char)0xa2; */
767 img::address address = m_pc + value + instruction_size;
768 /* symbol replacement */
769 /* return img::as_char(TOKEN_REPLACE) + to_string(address); */
770 return to_string(address);
774 uint64 NMD::extract_op_code_value(const uint16 * data, int size)
776 switch (size) {
777 case 16:
778 return data[0];
779 case 32:
780 return ((uint64)data[0] << 16) | data[1];
781 case 48:
782 return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2];
783 default:
784 return data[0];
789 int NMD::Disassemble(const uint16 * data, std::string & dis,
790 NMD::TABLE_ENTRY_TYPE & type)
792 return Disassemble(data, dis, type, MAJOR, 2);
797 * Recurse through tables until the instruction is found then return
798 * the string and size
800 * inputs:
801 * pointer to a word stream,
802 * disassember table and size
803 * returns:
804 * instruction size - negative is error
805 * disassembly string - on error will constain error string
807 int NMD::Disassemble(const uint16 * data, std::string & dis,
808 NMD::TABLE_ENTRY_TYPE & type, const Pool *table,
809 int table_size)
813 for (int i = 0; i < table_size; i++) {
814 uint64 op_code = extract_op_code_value(data,
815 table[i].instructions_size);
816 if ((op_code & table[i].mask) == table[i].value) {
817 /* possible match */
818 conditional_function cond = table[i].condition;
819 if ((cond == 0) || (this->*cond)(op_code)) {
822 if (table[i].type == pool) {
823 return Disassemble(data, dis, type,
824 table[i].next_table,
825 table[i].next_table_size);
826 } else if ((table[i].type == instruction) ||
827 (table[i].type == call_instruction) ||
828 (table[i].type == branch_instruction) ||
829 (table[i].type == return_instruction)) {
830 if ((table[i].attributes != 0) &&
831 (m_requested_instruction_categories &
832 table[i].attributes) == 0) {
834 * failed due to instruction having
835 * an ASE attribute and the requested version
836 * not having that attribute
838 dis = "ASE attribute mismatch";
839 return -5;
841 disassembly_function dis_fn = table[i].disassembly;
842 if (dis_fn == 0) {
843 dis = "disassembler failure - bad table entry";
844 return -6;
846 type = table[i].type;
847 dis = (this->*dis_fn)(op_code);
848 return table[i].instructions_size;
849 } else {
850 dis = "reserved instruction";
851 return -2;
854 catch (std::runtime_error & e)
856 dis = e.what();
857 return -3; /* runtime error */
863 catch (std::exception & e)
865 dis = e.what();
866 return -4; /* runtime error */
869 dis = "failed to disassemble";
870 return -1; /* failed to disassemble */
874 uint64 NMD::extract_code_18_to_0(uint64 instruction)
876 uint64 value = 0;
877 value |= extract_bits(instruction, 0, 19);
878 return value;
882 uint64 NMD::extract_shift3_2_1_0(uint64 instruction)
884 uint64 value = 0;
885 value |= extract_bits(instruction, 0, 3);
886 return value;
890 uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
892 uint64 value = 0;
893 value |= extract_bits(instruction, 3, 9) << 3;
894 return value;
898 uint64 NMD::extract_count_3_2_1_0(uint64 instruction)
900 uint64 value = 0;
901 value |= extract_bits(instruction, 0, 4);
902 return value;
906 uint64 NMD::extract_rtz3_9_8_7(uint64 instruction)
908 uint64 value = 0;
909 value |= extract_bits(instruction, 7, 3);
910 return value;
914 uint64 NMD::extract_u_17_to_1__s1(uint64 instruction)
916 uint64 value = 0;
917 value |= extract_bits(instruction, 1, 17) << 1;
918 return value;
922 int64 NMD::extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
924 int64 value = 0;
925 value |= extract_bits(instruction, 11, 10);
926 value = sign_extend(value, 9);
927 return value;
931 int64 NMD::extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
933 int64 value = 0;
934 value |= extract_bits(instruction, 0, 1) << 11;
935 value |= extract_bits(instruction, 1, 10) << 1;
936 value = sign_extend(value, 11);
937 return value;
941 uint64 NMD::extract_u_10(uint64 instruction)
943 uint64 value = 0;
944 value |= extract_bits(instruction, 10, 1);
945 return value;
949 uint64 NMD::extract_rtz4_27_26_25_23_22_21(uint64 instruction)
951 uint64 value = 0;
952 value |= extract_bits(instruction, 21, 3);
953 value |= extract_bits(instruction, 25, 1) << 3;
954 return value;
958 uint64 NMD::extract_sa_15_14_13_12_11(uint64 instruction)
960 uint64 value = 0;
961 value |= extract_bits(instruction, 11, 5);
962 return value;
966 uint64 NMD::extract_shift_4_3_2_1_0(uint64 instruction)
968 uint64 value = 0;
969 value |= extract_bits(instruction, 0, 5);
970 return value;
974 uint64 NMD::extract_shiftx_10_9_8_7__s1(uint64 instruction)
976 uint64 value = 0;
977 value |= extract_bits(instruction, 7, 4) << 1;
978 return value;
982 uint64 NMD::extract_hint_25_24_23_22_21(uint64 instruction)
984 uint64 value = 0;
985 value |= extract_bits(instruction, 21, 5);
986 return value;
990 uint64 NMD::extract_count3_14_13_12(uint64 instruction)
992 uint64 value = 0;
993 value |= extract_bits(instruction, 12, 3);
994 return value;
998 int64 NMD::extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
1000 int64 value = 0;
1001 value |= extract_bits(instruction, 0, 1) << 31;
1002 value |= extract_bits(instruction, 2, 10) << 21;
1003 value |= extract_bits(instruction, 12, 9) << 12;
1004 value = sign_extend(value, 31);
1005 return value;
1009 int64 NMD::extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
1011 int64 value = 0;
1012 value |= extract_bits(instruction, 0, 1) << 7;
1013 value |= extract_bits(instruction, 1, 6) << 1;
1014 value = sign_extend(value, 7);
1015 return value;
1019 uint64 NMD::extract_u2_10_9(uint64 instruction)
1021 uint64 value = 0;
1022 value |= extract_bits(instruction, 9, 2);
1023 return value;
1027 uint64 NMD::extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction)
1029 uint64 value = 0;
1030 value |= extract_bits(instruction, 16, 10);
1031 return value;
1035 uint64 NMD::extract_rs_20_19_18_17_16(uint64 instruction)
1037 uint64 value = 0;
1038 value |= extract_bits(instruction, 16, 5);
1039 return value;
1043 uint64 NMD::extract_u_2_1__s1(uint64 instruction)
1045 uint64 value = 0;
1046 value |= extract_bits(instruction, 1, 2) << 1;
1047 return value;
1051 uint64 NMD::extract_stripe_6(uint64 instruction)
1053 uint64 value = 0;
1054 value |= extract_bits(instruction, 6, 1);
1055 return value;
1059 uint64 NMD::extract_ac_15_14(uint64 instruction)
1061 uint64 value = 0;
1062 value |= extract_bits(instruction, 14, 2);
1063 return value;
1067 uint64 NMD::extract_shift_20_19_18_17_16(uint64 instruction)
1069 uint64 value = 0;
1070 value |= extract_bits(instruction, 16, 5);
1071 return value;
1075 uint64 NMD::extract_rdl_25_24(uint64 instruction)
1077 uint64 value = 0;
1078 value |= extract_bits(instruction, 24, 1);
1079 return value;
1083 int64 NMD::extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
1085 int64 value = 0;
1086 value |= extract_bits(instruction, 0, 1) << 10;
1087 value |= extract_bits(instruction, 1, 9) << 1;
1088 value = sign_extend(value, 10);
1089 return value;
1093 uint64 NMD::extract_eu_6_5_4_3_2_1_0(uint64 instruction)
1095 uint64 value = 0;
1096 value |= extract_bits(instruction, 0, 7);
1097 return value;
1101 uint64 NMD::extract_shift_5_4_3_2_1_0(uint64 instruction)
1103 uint64 value = 0;
1104 value |= extract_bits(instruction, 0, 6);
1105 return value;
1109 uint64 NMD::extract_count_19_18_17_16(uint64 instruction)
1111 uint64 value = 0;
1112 value |= extract_bits(instruction, 16, 4);
1113 return value;
1117 uint64 NMD::extract_code_2_1_0(uint64 instruction)
1119 uint64 value = 0;
1120 value |= extract_bits(instruction, 0, 3);
1121 return value;
1125 uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction)
1127 uint64 value = 0;
1128 value |= extract_bits(instruction, 0, 12);
1129 return value;
1133 uint64 NMD::extract_rs_4_3_2_1_0(uint64 instruction)
1135 uint64 value = 0;
1136 value |= extract_bits(instruction, 0, 5);
1137 return value;
1141 uint64 NMD::extract_u_20_to_3__s3(uint64 instruction)
1143 uint64 value = 0;
1144 value |= extract_bits(instruction, 3, 18) << 3;
1145 return value;
1149 uint64 NMD::extract_u_3_2_1_0__s2(uint64 instruction)
1151 uint64 value = 0;
1152 value |= extract_bits(instruction, 0, 4) << 2;
1153 return value;
1157 uint64 NMD::extract_cofun_25_24_23(uint64 instruction)
1159 uint64 value = 0;
1160 value |= extract_bits(instruction, 3, 23);
1161 return value;
1165 uint64 NMD::extract_u_2_1_0__s2(uint64 instruction)
1167 uint64 value = 0;
1168 value |= extract_bits(instruction, 0, 3) << 2;
1169 return value;
1173 uint64 NMD::extract_rd3_3_2_1(uint64 instruction)
1175 uint64 value = 0;
1176 value |= extract_bits(instruction, 1, 3);
1177 return value;
1181 uint64 NMD::extract_sa_15_14_13_12(uint64 instruction)
1183 uint64 value = 0;
1184 value |= extract_bits(instruction, 12, 4);
1185 return value;
1189 uint64 NMD::extract_rt_25_24_23_22_21(uint64 instruction)
1191 uint64 value = 0;
1192 value |= extract_bits(instruction, 21, 5);
1193 return value;
1197 uint64 NMD::extract_ru_7_6_5_4_3(uint64 instruction)
1199 uint64 value = 0;
1200 value |= extract_bits(instruction, 3, 5);
1201 return value;
1205 uint64 NMD::extract_u_17_to_0(uint64 instruction)
1207 uint64 value = 0;
1208 value |= extract_bits(instruction, 0, 18);
1209 return value;
1213 uint64 NMD::extract_rsz4_4_2_1_0(uint64 instruction)
1215 uint64 value = 0;
1216 value |= extract_bits(instruction, 0, 3);
1217 value |= extract_bits(instruction, 4, 1) << 3;
1218 return value;
1222 int64 NMD::extract_s__se21_0_20_to_1_s1(uint64 instruction)
1224 int64 value = 0;
1225 value |= extract_bits(instruction, 0, 1) << 21;
1226 value |= extract_bits(instruction, 1, 20) << 1;
1227 value = sign_extend(value, 21);
1228 return value;
1232 uint64 NMD::extract_op_25_to_3(uint64 instruction)
1234 uint64 value = 0;
1235 value |= extract_bits(instruction, 3, 23);
1236 return value;
1240 uint64 NMD::extract_rs4_4_2_1_0(uint64 instruction)
1242 uint64 value = 0;
1243 value |= extract_bits(instruction, 0, 3);
1244 value |= extract_bits(instruction, 4, 1) << 3;
1245 return value;
1249 uint64 NMD::extract_bit_23_22_21(uint64 instruction)
1251 uint64 value = 0;
1252 value |= extract_bits(instruction, 21, 3);
1253 return value;
1257 uint64 NMD::extract_rt_41_40_39_38_37(uint64 instruction)
1259 uint64 value = 0;
1260 value |= extract_bits(instruction, 37, 5);
1261 return value;
1265 int64 NMD::extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
1267 int64 value = 0;
1268 value |= extract_bits(instruction, 16, 6);
1269 value = sign_extend(value, 5);
1270 return value;
1274 uint64 NMD::extract_rd2_3_8(uint64 instruction)
1276 uint64 value = 0;
1277 value |= extract_bits(instruction, 3, 1) << 1;
1278 value |= extract_bits(instruction, 8, 1);
1279 return value;
1283 uint64 NMD::extract_code_17_to_0(uint64 instruction)
1285 uint64 value = 0;
1286 value |= extract_bits(instruction, 0, 18);
1287 return value;
1291 uint64 NMD::extract_size_20_19_18_17_16(uint64 instruction)
1293 uint64 value = 0;
1294 value |= extract_bits(instruction, 16, 5);
1295 return value;
1299 int64 NMD::extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
1301 int64 value = 0;
1302 value |= extract_bits(instruction, 2, 6) << 2;
1303 value |= extract_bits(instruction, 15, 1) << 8;
1304 value = sign_extend(value, 8);
1305 return value;
1309 uint64 NMD::extract_u_15_to_0(uint64 instruction)
1311 uint64 value = 0;
1312 value |= extract_bits(instruction, 0, 16);
1313 return value;
1317 uint64 NMD::extract_fs_20_19_18_17_16(uint64 instruction)
1319 uint64 value = 0;
1320 value |= extract_bits(instruction, 16, 5);
1321 return value;
1325 int64 NMD::extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
1327 int64 value = 0;
1328 value |= extract_bits(instruction, 0, 8);
1329 value |= extract_bits(instruction, 15, 1) << 8;
1330 value = sign_extend(value, 8);
1331 return value;
1335 uint64 NMD::extract_stype_20_19_18_17_16(uint64 instruction)
1337 uint64 value = 0;
1338 value |= extract_bits(instruction, 16, 5);
1339 return value;
1343 uint64 NMD::extract_rtl_11(uint64 instruction)
1345 uint64 value = 0;
1346 value |= extract_bits(instruction, 9, 1);
1347 return value;
1351 uint64 NMD::extract_hs_20_19_18_17_16(uint64 instruction)
1353 uint64 value = 0;
1354 value |= extract_bits(instruction, 16, 5);
1355 return value;
1359 uint64 NMD::extract_sel_13_12_11(uint64 instruction)
1361 uint64 value = 0;
1362 value |= extract_bits(instruction, 11, 3);
1363 return value;
1367 uint64 NMD::extract_lsb_4_3_2_1_0(uint64 instruction)
1369 uint64 value = 0;
1370 value |= extract_bits(instruction, 0, 5);
1371 return value;
1375 uint64 NMD::extract_gp_2(uint64 instruction)
1377 uint64 value = 0;
1378 value |= extract_bits(instruction, 2, 1);
1379 return value;
1383 uint64 NMD::extract_rt3_9_8_7(uint64 instruction)
1385 uint64 value = 0;
1386 value |= extract_bits(instruction, 7, 3);
1387 return value;
1391 uint64 NMD::extract_ft_25_24_23_22_21(uint64 instruction)
1393 uint64 value = 0;
1394 value |= extract_bits(instruction, 21, 5);
1395 return value;
1399 uint64 NMD::extract_u_17_16_15_14_13_12_11(uint64 instruction)
1401 uint64 value = 0;
1402 value |= extract_bits(instruction, 11, 7);
1403 return value;
1407 uint64 NMD::extract_cs_20_19_18_17_16(uint64 instruction)
1409 uint64 value = 0;
1410 value |= extract_bits(instruction, 16, 5);
1411 return value;
1415 uint64 NMD::extract_rt4_9_7_6_5(uint64 instruction)
1417 uint64 value = 0;
1418 value |= extract_bits(instruction, 5, 3);
1419 value |= extract_bits(instruction, 9, 1) << 3;
1420 return value;
1424 uint64 NMD::extract_msbt_10_9_8_7_6(uint64 instruction)
1426 uint64 value = 0;
1427 value |= extract_bits(instruction, 6, 5);
1428 return value;
1432 uint64 NMD::extract_u_5_4_3_2_1_0__s2(uint64 instruction)
1434 uint64 value = 0;
1435 value |= extract_bits(instruction, 0, 6) << 2;
1436 return value;
1440 uint64 NMD::extract_sa_15_14_13(uint64 instruction)
1442 uint64 value = 0;
1443 value |= extract_bits(instruction, 13, 3);
1444 return value;
1448 int64 NMD::extract_s__se14_0_13_to_1_s1(uint64 instruction)
1450 int64 value = 0;
1451 value |= extract_bits(instruction, 0, 1) << 14;
1452 value |= extract_bits(instruction, 1, 13) << 1;
1453 value = sign_extend(value, 14);
1454 return value;
1458 uint64 NMD::extract_rs3_6_5_4(uint64 instruction)
1460 uint64 value = 0;
1461 value |= extract_bits(instruction, 4, 3);
1462 return value;
1466 uint64 NMD::extract_u_31_to_0__s32(uint64 instruction)
1468 uint64 value = 0;
1469 value |= extract_bits(instruction, 0, 32) << 32;
1470 return value;
1474 uint64 NMD::extract_shift_10_9_8_7_6(uint64 instruction)
1476 uint64 value = 0;
1477 value |= extract_bits(instruction, 6, 5);
1478 return value;
1482 uint64 NMD::extract_cs_25_24_23_22_21(uint64 instruction)
1484 uint64 value = 0;
1485 value |= extract_bits(instruction, 21, 5);
1486 return value;
1490 uint64 NMD::extract_shiftx_11_10_9_8_7_6(uint64 instruction)
1492 uint64 value = 0;
1493 value |= extract_bits(instruction, 6, 6);
1494 return value;
1498 uint64 NMD::extract_rt_9_8_7_6_5(uint64 instruction)
1500 uint64 value = 0;
1501 value |= extract_bits(instruction, 5, 5);
1502 return value;
1506 uint64 NMD::extract_op_25_24_23_22_21(uint64 instruction)
1508 uint64 value = 0;
1509 value |= extract_bits(instruction, 21, 5);
1510 return value;
1514 uint64 NMD::extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
1516 uint64 value = 0;
1517 value |= extract_bits(instruction, 0, 7) << 2;
1518 return value;
1522 uint64 NMD::extract_bit_16_15_14_13_12_11(uint64 instruction)
1524 uint64 value = 0;
1525 value |= extract_bits(instruction, 11, 6);
1526 return value;
1530 uint64 NMD::extract_mask_20_19_18_17_16_15_14(uint64 instruction)
1532 uint64 value = 0;
1533 value |= extract_bits(instruction, 14, 7);
1534 return value;
1538 uint64 NMD::extract_eu_3_2_1_0(uint64 instruction)
1540 uint64 value = 0;
1541 value |= extract_bits(instruction, 0, 4);
1542 return value;
1546 uint64 NMD::extract_u_7_6_5_4__s4(uint64 instruction)
1548 uint64 value = 0;
1549 value |= extract_bits(instruction, 4, 4) << 4;
1550 return value;
1554 int64 NMD::extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
1556 int64 value = 0;
1557 value |= extract_bits(instruction, 3, 5) << 3;
1558 value |= extract_bits(instruction, 15, 1) << 8;
1559 value = sign_extend(value, 8);
1560 return value;
1564 uint64 NMD::extract_ft_15_14_13_12_11(uint64 instruction)
1566 uint64 value = 0;
1567 value |= extract_bits(instruction, 11, 5);
1568 return value;
1572 int64 NMD::extract_s__se31_15_to_0_31_to_16(uint64 instruction)
1574 int64 value = 0;
1575 value |= extract_bits(instruction, 0, 16) << 16;
1576 value |= extract_bits(instruction, 16, 16);
1577 value = sign_extend(value, 31);
1578 return value;
1582 uint64 NMD::extract_u_20_19_18_17_16_15_14_13(uint64 instruction)
1584 uint64 value = 0;
1585 value |= extract_bits(instruction, 13, 8);
1586 return value;
1590 uint64 NMD::extract_u_17_to_2__s2(uint64 instruction)
1592 uint64 value = 0;
1593 value |= extract_bits(instruction, 2, 16) << 2;
1594 return value;
1598 uint64 NMD::extract_rd_15_14_13_12_11(uint64 instruction)
1600 uint64 value = 0;
1601 value |= extract_bits(instruction, 11, 5);
1602 return value;
1606 uint64 NMD::extract_c0s_20_19_18_17_16(uint64 instruction)
1608 uint64 value = 0;
1609 value |= extract_bits(instruction, 16, 5);
1610 return value;
1614 uint64 NMD::extract_code_1_0(uint64 instruction)
1616 uint64 value = 0;
1617 value |= extract_bits(instruction, 0, 2);
1618 return value;
1622 int64 NMD::extract_s__se25_0_24_to_1_s1(uint64 instruction)
1624 int64 value = 0;
1625 value |= extract_bits(instruction, 0, 1) << 25;
1626 value |= extract_bits(instruction, 1, 24) << 1;
1627 value = sign_extend(value, 25);
1628 return value;
1632 uint64 NMD::extract_u_1_0(uint64 instruction)
1634 uint64 value = 0;
1635 value |= extract_bits(instruction, 0, 2);
1636 return value;
1640 uint64 NMD::extract_u_3_8__s2(uint64 instruction)
1642 uint64 value = 0;
1643 value |= extract_bits(instruction, 3, 1) << 3;
1644 value |= extract_bits(instruction, 8, 1) << 2;
1645 return value;
1649 uint64 NMD::extract_fd_15_14_13_12_11(uint64 instruction)
1651 uint64 value = 0;
1652 value |= extract_bits(instruction, 11, 5);
1653 return value;
1657 uint64 NMD::extract_u_4_3_2_1_0__s2(uint64 instruction)
1659 uint64 value = 0;
1660 value |= extract_bits(instruction, 0, 5) << 2;
1661 return value;
1665 uint64 NMD::extract_rtz4_9_7_6_5(uint64 instruction)
1667 uint64 value = 0;
1668 value |= extract_bits(instruction, 5, 3);
1669 value |= extract_bits(instruction, 9, 1) << 3;
1670 return value;
1674 uint64 NMD::extract_sel_15_14_13_12_11(uint64 instruction)
1676 uint64 value = 0;
1677 value |= extract_bits(instruction, 11, 5);
1678 return value;
1682 uint64 NMD::extract_ct_25_24_23_22_21(uint64 instruction)
1684 uint64 value = 0;
1685 value |= extract_bits(instruction, 21, 5);
1686 return value;
1690 uint64 NMD::extract_u_20_to_2__s2(uint64 instruction)
1692 uint64 value = 0;
1693 value |= extract_bits(instruction, 2, 19) << 2;
1694 return value;
1698 int64 NMD::extract_s__se3_4_2_1_0(uint64 instruction)
1700 int64 value = 0;
1701 value |= extract_bits(instruction, 0, 3);
1702 value |= extract_bits(instruction, 4, 1) << 3;
1703 value = sign_extend(value, 3);
1704 return value;
1708 uint64 NMD::extract_u_3_2_1_0__s1(uint64 instruction)
1710 uint64 value = 0;
1711 value |= extract_bits(instruction, 0, 4) << 1;
1712 return value;
1717 bool NMD::ADDIU_32__cond(uint64 instruction)
1719 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1720 return rt != 0;
1724 bool NMD::ADDIU_RS5__cond(uint64 instruction)
1726 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1727 return rt != 0;
1731 bool NMD::BALRSC_cond(uint64 instruction)
1733 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1734 return rt != 0;
1738 bool NMD::BEQC_16__cond(uint64 instruction)
1740 uint64 rs3 = extract_rs3_6_5_4(instruction);
1741 uint64 rt3 = extract_rt3_9_8_7(instruction);
1742 uint64 u = extract_u_3_2_1_0__s1(instruction);
1743 return rs3 < rt3 && u != 0;
1747 bool NMD::BNEC_16__cond(uint64 instruction)
1749 uint64 rs3 = extract_rs3_6_5_4(instruction);
1750 uint64 rt3 = extract_rt3_9_8_7(instruction);
1751 uint64 u = extract_u_3_2_1_0__s1(instruction);
1752 return rs3 >= rt3 && u != 0;
1756 bool NMD::MOVE_cond(uint64 instruction)
1758 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1759 return rt != 0;
1763 bool NMD::P16_BR1_cond(uint64 instruction)
1765 uint64 u = extract_u_3_2_1_0__s1(instruction);
1766 return u != 0;
1770 bool NMD::PREF_S9__cond(uint64 instruction)
1772 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1773 return hint != 31;
1777 bool NMD::PREFE_cond(uint64 instruction)
1779 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1780 return hint != 31;
1784 bool NMD::SLTU_cond(uint64 instruction)
1786 uint64 rd = extract_rd_15_14_13_12_11(instruction);
1787 return rd != 0;
1793 * ABS.D fd, fs - Floating Point Absolute Value
1795 * 3 2 1
1796 * 10987654321098765432109876543210
1797 * 010001 00000 000101
1798 * fmt -----
1799 * fs -----
1800 * fd -----
1802 std::string NMD::ABS_D(uint64 instruction)
1804 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1805 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1807 std::string fs = FPR(copy(fs_value));
1808 std::string fd = FPR(copy(fd_value));
1810 return img::format("ABS.D %s, %s", fd, fs);
1815 * ABS.S fd, fs - Floating Point Absolute Value
1817 * 3 2 1
1818 * 10987654321098765432109876543210
1819 * 010001 00000 000101
1820 * fmt -----
1821 * fd -----
1822 * fs -----
1824 std::string NMD::ABS_S(uint64 instruction)
1826 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1827 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1829 std::string fs = FPR(copy(fs_value));
1830 std::string fd = FPR(copy(fd_value));
1832 return img::format("ABS.S %s, %s", fd, fs);
1837 * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords
1838 * with 16-bit saturation
1840 * 3 2 1
1841 * 10987654321098765432109876543210
1842 * 001000 0001000100111111
1843 * rt -----
1844 * rs -----
1846 std::string NMD::ABSQ_S_PH(uint64 instruction)
1848 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1849 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1851 std::string rt = GPR(copy(rt_value));
1852 std::string rs = GPR(copy(rs_value));
1854 return img::format("ABSQ_S.PH %s, %s", rt, rs);
1859 * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values
1860 * with 8-bit saturation
1862 * 3 2 1
1863 * 10987654321098765432109876543210
1864 * 001000 0000000100111111
1865 * rt -----
1866 * rs -----
1868 std::string NMD::ABSQ_S_QB(uint64 instruction)
1870 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1871 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1873 std::string rt = GPR(copy(rt_value));
1874 std::string rs = GPR(copy(rs_value));
1876 return img::format("ABSQ_S.QB %s, %s", rt, rs);
1881 * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit
1882 * saturation
1884 * 3 2 1
1885 * 10987654321098765432109876543210
1886 * 001000 0010000100111111
1887 * rt -----
1888 * rs -----
1890 std::string NMD::ABSQ_S_W(uint64 instruction)
1892 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1893 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1895 std::string rt = GPR(copy(rt_value));
1896 std::string rs = GPR(copy(rs_value));
1898 return img::format("ABSQ_S.W %s, %s", rt, rs);
1905 * 3 2 1
1906 * 10987654321098765432109876543210
1907 * 001000 0010000100111111
1908 * rt -----
1909 * rs -----
1911 std::string NMD::ACLR(uint64 instruction)
1913 uint64 bit_value = extract_bit_23_22_21(instruction);
1914 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1915 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
1917 std::string bit = IMMEDIATE(copy(bit_value));
1918 std::string s = IMMEDIATE(copy(s_value));
1919 std::string rs = GPR(copy(rs_value));
1921 return img::format("ACLR %s, %s(%s)", bit, s, rs);
1928 * 3 2 1
1929 * 10987654321098765432109876543210
1930 * 001000 0010000100111111
1931 * rt -----
1932 * rs -----
1934 std::string NMD::ADD(uint64 instruction)
1936 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1937 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1938 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1940 std::string rd = GPR(copy(rd_value));
1941 std::string rs = GPR(copy(rs_value));
1942 std::string rt = GPR(copy(rt_value));
1944 return img::format("ADD %s, %s, %s", rd, rs, rt);
1949 * ADD.D fd, fs, ft - Floating Point Add
1951 * 3 2 1
1952 * 10987654321098765432109876543210
1953 * 010001 000101
1954 * fmt -----
1955 * ft -----
1956 * fs -----
1957 * fd -----
1959 std::string NMD::ADD_D(uint64 instruction)
1961 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1962 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1963 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1965 std::string ft = FPR(copy(ft_value));
1966 std::string fs = FPR(copy(fs_value));
1967 std::string fd = FPR(copy(fd_value));
1969 return img::format("ADD.D %s, %s, %s", fd, fs, ft);
1974 * ADD.S fd, fs, ft - Floating Point Add
1976 * 3 2 1
1977 * 10987654321098765432109876543210
1978 * 010001 000101
1979 * fmt -----
1980 * ft -----
1981 * fs -----
1982 * fd -----
1984 std::string NMD::ADD_S(uint64 instruction)
1986 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1987 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1988 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1990 std::string ft = FPR(copy(ft_value));
1991 std::string fs = FPR(copy(fs_value));
1992 std::string fd = FPR(copy(fd_value));
1994 return img::format("ADD.S %s, %s, %s", fd, fs, ft);
2001 * 3 2 1
2002 * 10987654321098765432109876543210
2003 * 001000 0010000100111111
2004 * rt -----
2005 * rs -----
2007 std::string NMD::ADDIU_32_(uint64 instruction)
2009 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2010 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2011 uint64 u_value = extract_u_15_to_0(instruction);
2013 std::string rt = GPR(copy(rt_value));
2014 std::string rs = GPR(copy(rs_value));
2015 std::string u = IMMEDIATE(copy(u_value));
2017 return img::format("ADDIU %s, %s, %s", rt, rs, u);
2024 * 3 2 1
2025 * 10987654321098765432109876543210
2026 * 001000 0010000100111111
2027 * rt -----
2028 * rs -----
2030 std::string NMD::ADDIU_48_(uint64 instruction)
2032 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2033 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2035 std::string rt = GPR(copy(rt_value));
2036 std::string s = IMMEDIATE(copy(s_value));
2038 return img::format("ADDIU %s, %s", rt, s);
2045 * 3 2 1
2046 * 10987654321098765432109876543210
2047 * 001000 0010000100111111
2048 * rt -----
2049 * rs -----
2051 std::string NMD::ADDIU_GP48_(uint64 instruction)
2053 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2054 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2056 std::string rt = GPR(copy(rt_value));
2057 std::string s = IMMEDIATE(copy(s_value));
2059 return img::format("ADDIU %s, $%d, %s", rt, 28, s);
2066 * 3 2 1
2067 * 10987654321098765432109876543210
2068 * 001000 0010000100111111
2069 * rt -----
2070 * rs -----
2072 std::string NMD::ADDIU_GP_B_(uint64 instruction)
2074 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2075 uint64 u_value = extract_u_17_to_0(instruction);
2077 std::string rt = GPR(copy(rt_value));
2078 std::string u = IMMEDIATE(copy(u_value));
2080 return img::format("ADDIU %s, $%d, %s", rt, 28, u);
2087 * 3 2 1
2088 * 10987654321098765432109876543210
2089 * 001000 0010000100111111
2090 * rt -----
2091 * rs -----
2093 std::string NMD::ADDIU_GP_W_(uint64 instruction)
2095 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2096 uint64 u_value = extract_u_20_to_2__s2(instruction);
2098 std::string rt = GPR(copy(rt_value));
2099 std::string u = IMMEDIATE(copy(u_value));
2101 return img::format("ADDIU %s, $%d, %s", rt, 28, u);
2108 * 3 2 1
2109 * 10987654321098765432109876543210
2110 * 001000 0010000100111111
2111 * rt -----
2112 * rs -----
2114 std::string NMD::ADDIU_NEG_(uint64 instruction)
2116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2117 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2118 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2120 std::string rt = GPR(copy(rt_value));
2121 std::string rs = GPR(copy(rs_value));
2122 std::string u = IMMEDIATE(neg_copy(u_value));
2124 return img::format("ADDIU %s, %s, %s", rt, rs, u);
2131 * 3 2 1
2132 * 10987654321098765432109876543210
2133 * 001000 0010000100111111
2134 * rt -----
2135 * rs -----
2137 std::string NMD::ADDIU_R1_SP_(uint64 instruction)
2139 uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
2140 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2142 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2143 std::string u = IMMEDIATE(copy(u_value));
2145 return img::format("ADDIU %s, $%d, %s", rt3, 29, u);
2152 * 3 2 1
2153 * 10987654321098765432109876543210
2154 * 001000 0010000100111111
2155 * rt -----
2156 * rs -----
2158 std::string NMD::ADDIU_R2_(uint64 instruction)
2160 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2161 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2162 uint64 u_value = extract_u_2_1_0__s2(instruction);
2164 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2165 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2166 std::string u = IMMEDIATE(copy(u_value));
2168 return img::format("ADDIU %s, %s, %s", rt3, rs3, u);
2173 * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
2175 * 5432109876543210
2176 * 100100 1
2177 * rt -----
2178 * s - ---
2180 std::string NMD::ADDIU_RS5_(uint64 instruction)
2182 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
2183 int64 s_value = extract_s__se3_4_2_1_0(instruction);
2185 std::string rt = GPR(copy(rt_value));
2186 std::string s = IMMEDIATE(copy(s_value));
2188 return img::format("ADDIU %s, %s", rt, s);
2195 * 3 2 1
2196 * 10987654321098765432109876543210
2197 * 001000 x1110000101
2198 * rt -----
2199 * rs -----
2200 * rd -----
2202 std::string NMD::ADDIUPC_32_(uint64 instruction)
2204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2205 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
2207 std::string rt = GPR(copy(rt_value));
2208 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2210 return img::format("ADDIUPC %s, %s", rt, s);
2217 * 3 2 1
2218 * 10987654321098765432109876543210
2219 * 001000 x1110000101
2220 * rt -----
2221 * rs -----
2222 * rd -----
2224 std::string NMD::ADDIUPC_48_(uint64 instruction)
2226 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2227 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2229 std::string rt = GPR(copy(rt_value));
2230 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
2232 return img::format("ADDIUPC %s, %s", rt, s);
2237 * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors
2239 * 3 2 1
2240 * 10987654321098765432109876543210
2241 * 001000 00000001101
2242 * rt -----
2243 * rs -----
2244 * rd -----
2246 std::string NMD::ADDQ_PH(uint64 instruction)
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.PH %s, %s, %s", rd, rs, rt);
2261 * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit
2262 * saturation
2264 * 3 2 1
2265 * 10987654321098765432109876543210
2266 * 001000 10000001101
2267 * rt -----
2268 * rs -----
2269 * rd -----
2271 std::string NMD::ADDQ_S_PH(uint64 instruction)
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("ADDQ_S.PH %s, %s, %s", rd, rs, rt);
2286 * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation
2288 * 3 2 1
2289 * 10987654321098765432109876543210
2290 * 001000 x1100000101
2291 * rt -----
2292 * rs -----
2293 * rd -----
2295 std::string NMD::ADDQ_S_W(uint64 instruction)
2297 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2298 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2299 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2301 std::string rd = GPR(copy(rd_value));
2302 std::string rs = GPR(copy(rs_value));
2303 std::string rt = GPR(copy(rt_value));
2305 return img::format("ADDQ_S.W %s, %s, %s", rd, rs, rt);
2310 * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift
2311 * right to halve results
2313 * 3 2 1
2314 * 10987654321098765432109876543210
2315 * 001000 00001001101
2316 * rt -----
2317 * rs -----
2318 * rd -----
2320 std::string NMD::ADDQH_PH(uint64 instruction)
2322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2323 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2324 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2326 std::string rd = GPR(copy(rd_value));
2327 std::string rs = GPR(copy(rs_value));
2328 std::string rt = GPR(copy(rt_value));
2330 return img::format("ADDQH.PH %s, %s, %s", rd, rs, rt);
2335 * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift
2336 * right to halve results with rounding
2338 * 3 2 1
2339 * 10987654321098765432109876543210
2340 * 001000 10001001101
2341 * rt -----
2342 * rs -----
2343 * rd -----
2345 std::string NMD::ADDQH_R_PH(uint64 instruction)
2347 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2348 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2349 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2351 std::string rd = GPR(copy(rd_value));
2352 std::string rs = GPR(copy(rs_value));
2353 std::string rt = GPR(copy(rt_value));
2355 return img::format("ADDQH_R.PH %s, %s, %s", rd, rs, rt);
2360 * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve
2361 * results with rounding
2363 * 3 2 1
2364 * 10987654321098765432109876543210
2365 * 001000 00010001101
2366 * rt -----
2367 * rs -----
2368 * rd -----
2370 std::string NMD::ADDQH_R_W(uint64 instruction)
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("ADDQH_R.W %s, %s, %s", rd, rs, rt);
2385 * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve
2386 * results
2388 * 3 2 1
2389 * 10987654321098765432109876543210
2390 * 001000 10010001101
2391 * rt -----
2392 * rs -----
2393 * rd -----
2395 std::string NMD::ADDQH_W(uint64 instruction)
2397 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2398 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2399 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2401 std::string rd = GPR(copy(rd_value));
2402 std::string rs = GPR(copy(rs_value));
2403 std::string rt = GPR(copy(rt_value));
2405 return img::format("ADDQH.W %s, %s, %s", rd, rs, rt);
2410 * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit
2412 * 3 2 1
2413 * 10987654321098765432109876543210
2414 * 001000 x1110000101
2415 * rt -----
2416 * rs -----
2417 * rd -----
2419 std::string NMD::ADDSC(uint64 instruction)
2421 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2422 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2423 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2425 std::string rd = GPR(copy(rd_value));
2426 std::string rs = GPR(copy(rs_value));
2427 std::string rt = GPR(copy(rt_value));
2429 return img::format("ADDSC %s, %s, %s", rd, rs, rt);
2434 * ADDU[16] rd3, rs3, rt3 -
2436 * 5432109876543210
2437 * 101100 0
2438 * rt3 ---
2439 * rs3 ---
2440 * rd3 ---
2442 std::string NMD::ADDU_16_(uint64 instruction)
2444 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2445 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2446 uint64 rd3_value = extract_rd3_3_2_1(instruction);
2448 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2449 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2450 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
2452 return img::format("ADDU %s, %s, %s", rd3, rs3, rt3);
2459 * 3 2 1
2460 * 10987654321098765432109876543210
2461 * 001000 x1110000101
2462 * rt -----
2463 * rs -----
2464 * rd -----
2466 std::string NMD::ADDU_32_(uint64 instruction)
2468 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2469 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2470 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2472 std::string rd = GPR(copy(rd_value));
2473 std::string rs = GPR(copy(rs_value));
2474 std::string rt = GPR(copy(rt_value));
2476 return img::format("ADDU %s, %s, %s", rd, rs, rt);
2483 * 3 2 1
2484 * 10987654321098765432109876543210
2485 * 001000 x1110000101
2486 * rt -----
2487 * rs -----
2488 * rd -----
2490 std::string NMD::ADDU_4X4_(uint64 instruction)
2492 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
2493 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
2495 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
2496 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
2498 return img::format("ADDU %s, %s", rs4, rt4);
2503 * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords
2505 * 3 2 1
2506 * 10987654321098765432109876543210
2507 * 001000 00100001101
2508 * rt -----
2509 * rs -----
2510 * rd -----
2512 std::string NMD::ADDU_PH(uint64 instruction)
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.PH %s, %s, %s", rd, rs, rt);
2527 * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2529 * 3 2 1
2530 * 10987654321098765432109876543210
2531 * 001000 00011001101
2532 * rt -----
2533 * rs -----
2534 * rd -----
2536 std::string NMD::ADDU_QB(uint64 instruction)
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.QB %s, %s, %s", rd, rs, rt);
2551 * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit
2552 * saturation
2554 * 3 2 1
2555 * 10987654321098765432109876543210
2556 * 001000 10100001101
2557 * rt -----
2558 * rs -----
2559 * rd -----
2561 std::string NMD::ADDU_S_PH(uint64 instruction)
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("ADDU_S.PH %s, %s, %s", rd, rs, rt);
2576 * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2578 * 3 2 1
2579 * 10987654321098765432109876543210
2580 * 001000 10011001101
2581 * rt -----
2582 * rs -----
2583 * rd -----
2585 std::string NMD::ADDU_S_QB(uint64 instruction)
2587 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2588 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2589 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2591 std::string rd = GPR(copy(rd_value));
2592 std::string rs = GPR(copy(rs_value));
2593 std::string rt = GPR(copy(rt_value));
2595 return img::format("ADDU_S.QB %s, %s, %s", rd, rs, rt);
2600 * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2601 * to Halve Results
2603 * 3 2 1
2604 * 10987654321098765432109876543210
2605 * 001000 00101001101
2606 * rt -----
2607 * rs -----
2608 * rd -----
2610 std::string NMD::ADDUH_QB(uint64 instruction)
2612 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2613 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2614 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2616 std::string rd = GPR(copy(rd_value));
2617 std::string rs = GPR(copy(rs_value));
2618 std::string rt = GPR(copy(rt_value));
2620 return img::format("ADDUH.QB %s, %s, %s", rd, rs, rt);
2625 * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2626 * to Halve Results
2628 * 3 2 1
2629 * 10987654321098765432109876543210
2630 * 001000 10101001101
2631 * rt -----
2632 * rs -----
2633 * rd -----
2635 std::string NMD::ADDUH_R_QB(uint64 instruction)
2637 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2638 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2639 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2641 std::string rd = GPR(copy(rd_value));
2642 std::string rs = GPR(copy(rs_value));
2643 std::string rt = GPR(copy(rt_value));
2645 return img::format("ADDUH_R.QB %s, %s, %s", rd, rs, rt);
2649 * ADDWC rd, rt, rs - Add Word with Carry Bit
2651 * 3 2 1
2652 * 10987654321098765432109876543210
2653 * 001000 x1111000101
2654 * rt -----
2655 * rs -----
2656 * rd -----
2658 std::string NMD::ADDWC(uint64 instruction)
2660 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2661 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2662 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2664 std::string rd = GPR(copy(rd_value));
2665 std::string rs = GPR(copy(rs_value));
2666 std::string rt = GPR(copy(rt_value));
2668 return img::format("ADDWC %s, %s, %s", rd, rs, rt);
2675 * 3 2 1
2676 * 10987654321098765432109876543210
2677 * 001000 x1110000101
2678 * rt -----
2679 * rs -----
2680 * rd -----
2682 std::string NMD::ALUIPC(uint64 instruction)
2684 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2685 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
2687 std::string rt = GPR(copy(rt_value));
2688 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2690 return img::format("ALUIPC %s, %%pcrel_hi(%s)", rt, s);
2695 * AND[16] rt3, rs3 -
2697 * 5432109876543210
2698 * 101100
2699 * rt3 ---
2700 * rs3 ---
2701 * eu ----
2703 std::string NMD::AND_16_(uint64 instruction)
2705 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2706 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2708 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2709 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2711 return img::format("AND %s, %s", rs3, rt3);
2718 * 3 2 1
2719 * 10987654321098765432109876543210
2720 * 001000 x1110000101
2721 * rt -----
2722 * rs -----
2723 * rd -----
2725 std::string NMD::AND_32_(uint64 instruction)
2727 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2728 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2729 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2731 std::string rd = GPR(copy(rd_value));
2732 std::string rs = GPR(copy(rs_value));
2733 std::string rt = GPR(copy(rt_value));
2735 return img::format("AND %s, %s, %s", rd, rs, rt);
2740 * ANDI rt, rs, u -
2742 * 5432109876543210
2743 * 101100
2744 * rt3 ---
2745 * rs3 ---
2746 * eu ----
2748 std::string NMD::ANDI_16_(uint64 instruction)
2750 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2751 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2752 uint64 eu_value = extract_eu_3_2_1_0(instruction);
2754 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2755 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2756 std::string eu = IMMEDIATE(encode_eu_from_u_andi16(eu_value));
2758 return img::format("ANDI %s, %s, %s", rt3, rs3, eu);
2765 * 3 2 1
2766 * 10987654321098765432109876543210
2767 * 001000 x1110000101
2768 * rt -----
2769 * rs -----
2770 * rd -----
2772 std::string NMD::ANDI_32_(uint64 instruction)
2774 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2775 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2776 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2778 std::string rt = GPR(copy(rt_value));
2779 std::string rs = GPR(copy(rs_value));
2780 std::string u = IMMEDIATE(copy(u_value));
2782 return img::format("ANDI %s, %s, %s", rt, rs, u);
2789 * 3 2 1
2790 * 10987654321098765432109876543210
2791 * 001000 x1110000101
2792 * rt -----
2793 * rs -----
2794 * rd -----
2796 std::string NMD::APPEND(uint64 instruction)
2798 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2799 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2800 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
2802 std::string rt = GPR(copy(rt_value));
2803 std::string rs = GPR(copy(rs_value));
2804 std::string sa = IMMEDIATE(copy(sa_value));
2806 return img::format("APPEND %s, %s, %s", rt, rs, sa);
2813 * 3 2 1
2814 * 10987654321098765432109876543210
2815 * 001000 x1110000101
2816 * rt -----
2817 * rs -----
2818 * rd -----
2820 std::string NMD::ASET(uint64 instruction)
2822 uint64 bit_value = extract_bit_23_22_21(instruction);
2823 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2824 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
2826 std::string bit = IMMEDIATE(copy(bit_value));
2827 std::string s = IMMEDIATE(copy(s_value));
2828 std::string rs = GPR(copy(rs_value));
2830 return img::format("ASET %s, %s(%s)", bit, s, rs);
2837 * 3 2 1
2838 * 10987654321098765432109876543210
2839 * 001000 x1110000101
2840 * rt -----
2841 * rs -----
2842 * rd -----
2844 std::string NMD::BALC_16_(uint64 instruction)
2846 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2848 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2850 return img::format("BALC %s", s);
2857 * 3 2 1
2858 * 10987654321098765432109876543210
2859 * 001000 x1110000101
2860 * rt -----
2861 * rs -----
2862 * rd -----
2864 std::string NMD::BALC_32_(uint64 instruction)
2866 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2868 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2870 return img::format("BALC %s", s);
2877 * 3 2 1
2878 * 10987654321098765432109876543210
2879 * 001000 x1110000101
2880 * rt -----
2881 * rs -----
2882 * rd -----
2884 std::string NMD::BALRSC(uint64 instruction)
2886 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2887 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2889 std::string rt = GPR(copy(rt_value));
2890 std::string rs = GPR(copy(rs_value));
2892 return img::format("BALRSC %s, %s", rt, rs);
2899 * 3 2 1
2900 * 10987654321098765432109876543210
2901 * 001000 x1110000101
2902 * rt -----
2903 * rs -----
2904 * rd -----
2906 std::string NMD::BBEQZC(uint64 instruction)
2908 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2909 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2910 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2912 std::string rt = GPR(copy(rt_value));
2913 std::string bit = IMMEDIATE(copy(bit_value));
2914 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2916 return img::format("BBEQZC %s, %s, %s", rt, bit, s);
2923 * 3 2 1
2924 * 10987654321098765432109876543210
2925 * 001000 x1110000101
2926 * rt -----
2927 * rs -----
2928 * rd -----
2930 std::string NMD::BBNEZC(uint64 instruction)
2932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2933 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2934 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2936 std::string rt = GPR(copy(rt_value));
2937 std::string bit = IMMEDIATE(copy(bit_value));
2938 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2940 return img::format("BBNEZC %s, %s, %s", rt, bit, s);
2947 * 3 2 1
2948 * 10987654321098765432109876543210
2949 * 001000 x1110000101
2950 * rt -----
2951 * rs -----
2952 * rd -----
2954 std::string NMD::BC_16_(uint64 instruction)
2956 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2958 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2960 return img::format("BC %s", s);
2967 * 3 2 1
2968 * 10987654321098765432109876543210
2969 * 001000 x1110000101
2970 * rt -----
2971 * rs -----
2972 * rd -----
2974 std::string NMD::BC_32_(uint64 instruction)
2976 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2978 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2980 return img::format("BC %s", s);
2987 * 3 2 1
2988 * 10987654321098765432109876543210
2989 * 001000 x1110000101
2990 * rt -----
2991 * rs -----
2992 * rd -----
2994 std::string NMD::BC1EQZC(uint64 instruction)
2996 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2997 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2999 std::string ft = FPR(copy(ft_value));
3000 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3002 return img::format("BC1EQZC %s, %s", ft, s);
3009 * 3 2 1
3010 * 10987654321098765432109876543210
3011 * 001000 x1110000101
3012 * rt -----
3013 * rs -----
3014 * rd -----
3016 std::string NMD::BC1NEZC(uint64 instruction)
3018 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3019 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3021 std::string ft = FPR(copy(ft_value));
3022 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3024 return img::format("BC1NEZC %s, %s", ft, s);
3031 * 3 2 1
3032 * 10987654321098765432109876543210
3033 * 001000 x1110000101
3034 * rt -----
3035 * rs -----
3036 * rd -----
3038 std::string NMD::BC2EQZC(uint64 instruction)
3040 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
3041 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3043 std::string ct = CPR(copy(ct_value));
3044 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3046 return img::format("BC2EQZC %s, %s", ct, s);
3053 * 3 2 1
3054 * 10987654321098765432109876543210
3055 * 001000 x1110000101
3056 * rt -----
3057 * rs -----
3058 * rd -----
3060 std::string NMD::BC2NEZC(uint64 instruction)
3062 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
3063 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3065 std::string ct = CPR(copy(ct_value));
3066 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3068 return img::format("BC2NEZC %s, %s", ct, s);
3075 * 3 2 1
3076 * 10987654321098765432109876543210
3077 * 001000 x1110000101
3078 * rt -----
3079 * rs -----
3080 * rd -----
3082 std::string NMD::BEQC_16_(uint64 instruction)
3084 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3085 uint64 rs3_value = extract_rs3_6_5_4(instruction);
3086 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
3088 std::string rs3 = GPR(encode_rs3_and_check_rs3_lt_rt3(rs3_value));
3089 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3090 std::string u = ADDRESS(encode_u_from_address(u_value), 2);
3092 return img::format("BEQC %s, %s, %s", rs3, rt3, u);
3099 * 3 2 1
3100 * 10987654321098765432109876543210
3101 * 001000 x1110000101
3102 * rt -----
3103 * rs -----
3104 * rd -----
3106 std::string NMD::BEQC_32_(uint64 instruction)
3108 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3109 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3110 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3112 std::string rs = GPR(copy(rs_value));
3113 std::string rt = GPR(copy(rt_value));
3114 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3116 return img::format("BEQC %s, %s, %s", rs, rt, s);
3123 * 3 2 1
3124 * 10987654321098765432109876543210
3125 * 001000 x1110000101
3126 * rt -----
3127 * rs -----
3128 * rd -----
3130 std::string NMD::BEQIC(uint64 instruction)
3132 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3133 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3134 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3136 std::string rt = GPR(copy(rt_value));
3137 std::string u = IMMEDIATE(copy(u_value));
3138 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3140 return img::format("BEQIC %s, %s, %s", rt, u, s);
3147 * 3 2 1
3148 * 10987654321098765432109876543210
3149 * 001000 x1110000101
3150 * rt -----
3151 * rs -----
3152 * rd -----
3154 std::string NMD::BEQZC_16_(uint64 instruction)
3156 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3157 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3159 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3160 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
3162 return img::format("BEQZC %s, %s", rt3, s);
3169 * 3 2 1
3170 * 10987654321098765432109876543210
3171 * 001000 x1110000101
3172 * rt -----
3173 * rs -----
3174 * rd -----
3176 std::string NMD::BGEC(uint64 instruction)
3178 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3179 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3180 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3182 std::string rs = GPR(copy(rs_value));
3183 std::string rt = GPR(copy(rt_value));
3184 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3186 return img::format("BGEC %s, %s, %s", rs, rt, s);
3193 * 3 2 1
3194 * 10987654321098765432109876543210
3195 * 001000 x1110000101
3196 * rt -----
3197 * rs -----
3198 * rd -----
3200 std::string NMD::BGEIC(uint64 instruction)
3202 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3203 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3204 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3206 std::string rt = GPR(copy(rt_value));
3207 std::string u = IMMEDIATE(copy(u_value));
3208 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3210 return img::format("BGEIC %s, %s, %s", rt, u, s);
3217 * 3 2 1
3218 * 10987654321098765432109876543210
3219 * 001000 x1110000101
3220 * rt -----
3221 * rs -----
3222 * rd -----
3224 std::string NMD::BGEIUC(uint64 instruction)
3226 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3227 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3228 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3230 std::string rt = GPR(copy(rt_value));
3231 std::string u = IMMEDIATE(copy(u_value));
3232 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3234 return img::format("BGEIUC %s, %s, %s", rt, u, s);
3241 * 3 2 1
3242 * 10987654321098765432109876543210
3243 * 001000 x1110000101
3244 * rt -----
3245 * rs -----
3246 * rd -----
3248 std::string NMD::BGEUC(uint64 instruction)
3250 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3251 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3252 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3254 std::string rs = GPR(copy(rs_value));
3255 std::string rt = GPR(copy(rt_value));
3256 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3258 return img::format("BGEUC %s, %s, %s", rs, rt, s);
3265 * 3 2 1
3266 * 10987654321098765432109876543210
3267 * 001000 x1110000101
3268 * rt -----
3269 * rs -----
3270 * rd -----
3272 std::string NMD::BLTC(uint64 instruction)
3274 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3275 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3276 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3278 std::string rs = GPR(copy(rs_value));
3279 std::string rt = GPR(copy(rt_value));
3280 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3282 return img::format("BLTC %s, %s, %s", rs, rt, s);
3289 * 3 2 1
3290 * 10987654321098765432109876543210
3291 * 001000 x1110000101
3292 * rt -----
3293 * rs -----
3294 * rd -----
3296 std::string NMD::BLTIC(uint64 instruction)
3298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3299 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3300 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3302 std::string rt = GPR(copy(rt_value));
3303 std::string u = IMMEDIATE(copy(u_value));
3304 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3306 return img::format("BLTIC %s, %s, %s", rt, u, s);
3313 * 3 2 1
3314 * 10987654321098765432109876543210
3315 * 001000 x1110000101
3316 * rt -----
3317 * rs -----
3318 * rd -----
3320 std::string NMD::BLTIUC(uint64 instruction)
3322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3323 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3324 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3326 std::string rt = GPR(copy(rt_value));
3327 std::string u = IMMEDIATE(copy(u_value));
3328 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3330 return img::format("BLTIUC %s, %s, %s", rt, u, s);
3337 * 3 2 1
3338 * 10987654321098765432109876543210
3339 * 001000 x1110000101
3340 * rt -----
3341 * rs -----
3342 * rd -----
3344 std::string NMD::BLTUC(uint64 instruction)
3346 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3347 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3348 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3350 std::string rs = GPR(copy(rs_value));
3351 std::string rt = GPR(copy(rt_value));
3352 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3354 return img::format("BLTUC %s, %s, %s", rs, rt, s);
3361 * 3 2 1
3362 * 10987654321098765432109876543210
3363 * 001000 x1110000101
3364 * rt -----
3365 * rs -----
3366 * rd -----
3368 std::string NMD::BNEC_16_(uint64 instruction)
3370 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3371 uint64 rs3_value = extract_rs3_6_5_4(instruction);
3372 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
3374 std::string rs3 = GPR(encode_rs3_and_check_rs3_ge_rt3(rs3_value));
3375 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3376 std::string u = ADDRESS(encode_u_from_address(u_value), 2);
3378 return img::format("BNEC %s, %s, %s", rs3, rt3, u);
3385 * 3 2 1
3386 * 10987654321098765432109876543210
3387 * 001000 x1110000101
3388 * rt -----
3389 * rs -----
3390 * rd -----
3392 std::string NMD::BNEC_32_(uint64 instruction)
3394 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3395 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3396 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3398 std::string rs = GPR(copy(rs_value));
3399 std::string rt = GPR(copy(rt_value));
3400 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3402 return img::format("BNEC %s, %s, %s", rs, rt, s);
3409 * 3 2 1
3410 * 10987654321098765432109876543210
3411 * 001000 x1110000101
3412 * rt -----
3413 * rs -----
3414 * rd -----
3416 std::string NMD::BNEIC(uint64 instruction)
3418 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3419 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3420 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3422 std::string rt = GPR(copy(rt_value));
3423 std::string u = IMMEDIATE(copy(u_value));
3424 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3426 return img::format("BNEIC %s, %s, %s", rt, u, s);
3433 * 3 2 1
3434 * 10987654321098765432109876543210
3435 * 001000 x1110000101
3436 * rt -----
3437 * rs -----
3438 * rd -----
3440 std::string NMD::BNEZC_16_(uint64 instruction)
3442 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3443 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3445 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3446 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
3448 return img::format("BNEZC %s, %s", rt3, s);
3453 * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in
3454 * DSPControl Pos field
3456 * 3 2 1
3457 * 10987654321098765432109876543210
3458 * 100010xxxxx0010001
3459 * s[13:1] -------------
3460 * s[14] -
3462 std::string NMD::BPOSGE32C(uint64 instruction)
3464 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3466 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3468 return img::format("BPOSGE32C %s", s);
3475 * 3 2 1
3476 * 10987654321098765432109876543210
3477 * 001000 x1110000101
3478 * rt -----
3479 * rs -----
3480 * rd -----
3482 std::string NMD::BREAK_16_(uint64 instruction)
3484 uint64 code_value = extract_code_2_1_0(instruction);
3486 std::string code = IMMEDIATE(copy(code_value));
3488 return img::format("BREAK %s", code);
3493 * BREAK code - Break. Cause a Breakpoint exception
3495 * 3 2 1
3496 * 10987654321098765432109876543210
3497 * 001000 x1110000101
3498 * rt -----
3499 * rs -----
3500 * rd -----
3502 std::string NMD::BREAK_32_(uint64 instruction)
3504 uint64 code_value = extract_code_18_to_0(instruction);
3506 std::string code = IMMEDIATE(copy(code_value));
3508 return img::format("BREAK %s", code);
3515 * 3 2 1
3516 * 10987654321098765432109876543210
3517 * 001000 x1110000101
3518 * rt -----
3519 * rs -----
3520 * rd -----
3522 std::string NMD::BRSC(uint64 instruction)
3524 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3526 std::string rs = GPR(copy(rs_value));
3528 return img::format("BRSC %s", rs);
3535 * 3 2 1
3536 * 10987654321098765432109876543210
3537 * 001000 x1110000101
3538 * rt -----
3539 * rs -----
3540 * rd -----
3542 std::string NMD::CACHE(uint64 instruction)
3544 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3545 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3546 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3548 std::string op = IMMEDIATE(copy(op_value));
3549 std::string s = IMMEDIATE(copy(s_value));
3550 std::string rs = GPR(copy(rs_value));
3552 return img::format("CACHE %s, %s(%s)", op, s, rs);
3559 * 3 2 1
3560 * 10987654321098765432109876543210
3561 * 001000 x1110000101
3562 * rt -----
3563 * rs -----
3564 * rd -----
3566 std::string NMD::CACHEE(uint64 instruction)
3568 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3569 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3570 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3572 std::string op = IMMEDIATE(copy(op_value));
3573 std::string s = IMMEDIATE(copy(s_value));
3574 std::string rs = GPR(copy(rs_value));
3576 return img::format("CACHEE %s, %s(%s)", op, s, rs);
3583 * 3 2 1
3584 * 10987654321098765432109876543210
3585 * 001000 x1110000101
3586 * rt -----
3587 * rs -----
3588 * rd -----
3590 std::string NMD::CEIL_L_D(uint64 instruction)
3592 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3593 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3595 std::string ft = FPR(copy(ft_value));
3596 std::string fs = FPR(copy(fs_value));
3598 return img::format("CEIL.L.D %s, %s", ft, fs);
3605 * 3 2 1
3606 * 10987654321098765432109876543210
3607 * 001000 x1110000101
3608 * rt -----
3609 * rs -----
3610 * rd -----
3612 std::string NMD::CEIL_L_S(uint64 instruction)
3614 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3615 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3617 std::string ft = FPR(copy(ft_value));
3618 std::string fs = FPR(copy(fs_value));
3620 return img::format("CEIL.L.S %s, %s", ft, fs);
3627 * 3 2 1
3628 * 10987654321098765432109876543210
3629 * 001000 x1110000101
3630 * rt -----
3631 * rs -----
3632 * rd -----
3634 std::string NMD::CEIL_W_D(uint64 instruction)
3636 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3637 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3639 std::string ft = FPR(copy(ft_value));
3640 std::string fs = FPR(copy(fs_value));
3642 return img::format("CEIL.W.D %s, %s", ft, fs);
3649 * 3 2 1
3650 * 10987654321098765432109876543210
3651 * 001000 x1110000101
3652 * rt -----
3653 * rs -----
3654 * rd -----
3656 std::string NMD::CEIL_W_S(uint64 instruction)
3658 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3659 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3661 std::string ft = FPR(copy(ft_value));
3662 std::string fs = FPR(copy(fs_value));
3664 return img::format("CEIL.W.S %s, %s", ft, fs);
3671 * 3 2 1
3672 * 10987654321098765432109876543210
3673 * 001000 x1110000101
3674 * rt -----
3675 * rs -----
3676 * rd -----
3678 std::string NMD::CFC1(uint64 instruction)
3680 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3681 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3683 std::string rt = GPR(copy(rt_value));
3684 std::string cs = CPR(copy(cs_value));
3686 return img::format("CFC1 %s, %s", rt, cs);
3693 * 3 2 1
3694 * 10987654321098765432109876543210
3695 * 001000 x1110000101
3696 * rt -----
3697 * rs -----
3698 * rd -----
3700 std::string NMD::CFC2(uint64 instruction)
3702 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3703 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3705 std::string rt = GPR(copy(rt_value));
3706 std::string cs = CPR(copy(cs_value));
3708 return img::format("CFC2 %s, %s", rt, cs);
3715 * 3 2 1
3716 * 10987654321098765432109876543210
3717 * 001000 x1110000101
3718 * rt -----
3719 * rs -----
3720 * rd -----
3722 std::string NMD::CLASS_D(uint64 instruction)
3724 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3725 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3727 std::string ft = FPR(copy(ft_value));
3728 std::string fs = FPR(copy(fs_value));
3730 return img::format("CLASS.D %s, %s", ft, fs);
3737 * 3 2 1
3738 * 10987654321098765432109876543210
3739 * 001000 x1110000101
3740 * rt -----
3741 * rs -----
3742 * rd -----
3744 std::string NMD::CLASS_S(uint64 instruction)
3746 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3747 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3749 std::string ft = FPR(copy(ft_value));
3750 std::string fs = FPR(copy(fs_value));
3752 return img::format("CLASS.S %s, %s", ft, fs);
3759 * 3 2 1
3760 * 10987654321098765432109876543210
3761 * 001000 x1110000101
3762 * rt -----
3763 * rs -----
3764 * rd -----
3766 std::string NMD::CLO(uint64 instruction)
3768 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3769 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3771 std::string rt = GPR(copy(rt_value));
3772 std::string rs = GPR(copy(rs_value));
3774 return img::format("CLO %s, %s", rt, rs);
3781 * 3 2 1
3782 * 10987654321098765432109876543210
3783 * 001000 x1110000101
3784 * rt -----
3785 * rs -----
3786 * rd -----
3788 std::string NMD::CLZ(uint64 instruction)
3790 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3791 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3793 std::string rt = GPR(copy(rt_value));
3794 std::string rs = GPR(copy(rs_value));
3796 return img::format("CLZ %s, %s", rt, rs);
3803 * 3 2 1
3804 * 10987654321098765432109876543210
3805 * 001000 x1110000101
3806 * rt -----
3807 * rs -----
3808 * rd -----
3810 std::string NMD::CMP_AF_D(uint64 instruction)
3812 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3813 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3814 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3816 std::string fd = FPR(copy(fd_value));
3817 std::string fs = FPR(copy(fs_value));
3818 std::string ft = FPR(copy(ft_value));
3820 return img::format("CMP.AF.D %s, %s, %s", fd, fs, ft);
3827 * 3 2 1
3828 * 10987654321098765432109876543210
3829 * 001000 x1110000101
3830 * rt -----
3831 * rs -----
3832 * rd -----
3834 std::string NMD::CMP_AF_S(uint64 instruction)
3836 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3837 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3838 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3840 std::string fd = FPR(copy(fd_value));
3841 std::string fs = FPR(copy(fs_value));
3842 std::string ft = FPR(copy(ft_value));
3844 return img::format("CMP.AF.S %s, %s, %s", fd, fs, ft);
3851 * 3 2 1
3852 * 10987654321098765432109876543210
3853 * 001000 x1110000101
3854 * rt -----
3855 * rs -----
3856 * rd -----
3858 std::string NMD::CMP_EQ_D(uint64 instruction)
3860 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3861 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3862 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3864 std::string fd = FPR(copy(fd_value));
3865 std::string fs = FPR(copy(fs_value));
3866 std::string ft = FPR(copy(ft_value));
3868 return img::format("CMP.EQ.D %s, %s, %s", fd, fs, ft);
3873 * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values
3875 * 3 2 1
3876 * 10987654321098765432109876543210
3877 * 001000 xxxxxx0000000101
3878 * rt -----
3879 * rs -----
3881 std::string NMD::CMP_EQ_PH(uint64 instruction)
3883 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3884 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3886 std::string rs = GPR(copy(rs_value));
3887 std::string rt = GPR(copy(rt_value));
3889 return img::format("CMP.EQ.PH %s, %s", rs, rt);
3896 * 3 2 1
3897 * 10987654321098765432109876543210
3898 * 001000 x1110000101
3899 * rt -----
3900 * rs -----
3901 * rd -----
3903 std::string NMD::CMP_EQ_S(uint64 instruction)
3905 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3906 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3907 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3909 std::string fd = FPR(copy(fd_value));
3910 std::string fs = FPR(copy(fs_value));
3911 std::string ft = FPR(copy(ft_value));
3913 return img::format("CMP.EQ.S %s, %s, %s", fd, fs, ft);
3920 * 3 2 1
3921 * 10987654321098765432109876543210
3922 * 001000 x1110000101
3923 * rt -----
3924 * rs -----
3925 * rd -----
3927 std::string NMD::CMP_LE_D(uint64 instruction)
3929 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3930 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3931 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3933 std::string fd = FPR(copy(fd_value));
3934 std::string fs = FPR(copy(fs_value));
3935 std::string ft = FPR(copy(ft_value));
3937 return img::format("CMP.LE.D %s, %s, %s", fd, fs, ft);
3942 * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values
3944 * 3 2 1
3945 * 10987654321098765432109876543210
3946 * 001000 xxxxxx0010000101
3947 * rt -----
3948 * rs -----
3950 std::string NMD::CMP_LE_PH(uint64 instruction)
3952 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3953 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3955 std::string rs = GPR(copy(rs_value));
3956 std::string rt = GPR(copy(rt_value));
3958 return img::format("CMP.LE.PH %s, %s", rs, rt);
3965 * 3 2 1
3966 * 10987654321098765432109876543210
3967 * 001000 x1110000101
3968 * rt -----
3969 * rs -----
3970 * rd -----
3972 std::string NMD::CMP_LE_S(uint64 instruction)
3974 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3975 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3976 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3978 std::string fd = FPR(copy(fd_value));
3979 std::string fs = FPR(copy(fs_value));
3980 std::string ft = FPR(copy(ft_value));
3982 return img::format("CMP.LE.S %s, %s, %s", fd, fs, ft);
3989 * 3 2 1
3990 * 10987654321098765432109876543210
3991 * 001000 x1110000101
3992 * rt -----
3993 * rs -----
3994 * rd -----
3996 std::string NMD::CMP_LT_D(uint64 instruction)
3998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4002 std::string fd = FPR(copy(fd_value));
4003 std::string fs = FPR(copy(fs_value));
4004 std::string ft = FPR(copy(ft_value));
4006 return img::format("CMP.LT.D %s, %s, %s", fd, fs, ft);
4011 * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values
4013 * 3 2 1
4014 * 10987654321098765432109876543210
4015 * 001000 xxxxxx0001000101
4016 * rt -----
4017 * rs -----
4019 std::string NMD::CMP_LT_PH(uint64 instruction)
4021 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4022 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4024 std::string rs = GPR(copy(rs_value));
4025 std::string rt = GPR(copy(rt_value));
4027 return img::format("CMP.LT.PH %s, %s", rs, rt);
4034 * 3 2 1
4035 * 10987654321098765432109876543210
4036 * 001000 x1110000101
4037 * rt -----
4038 * rs -----
4039 * rd -----
4041 std::string NMD::CMP_LT_S(uint64 instruction)
4043 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4044 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4045 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4047 std::string fd = FPR(copy(fd_value));
4048 std::string fs = FPR(copy(fs_value));
4049 std::string ft = FPR(copy(ft_value));
4051 return img::format("CMP.LT.S %s, %s, %s", fd, fs, ft);
4058 * 3 2 1
4059 * 10987654321098765432109876543210
4060 * 001000 x1110000101
4061 * rt -----
4062 * rs -----
4063 * rd -----
4065 std::string NMD::CMP_NE_D(uint64 instruction)
4067 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4068 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4069 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4071 std::string fd = FPR(copy(fd_value));
4072 std::string fs = FPR(copy(fs_value));
4073 std::string ft = FPR(copy(ft_value));
4075 return img::format("CMP.NE.D %s, %s, %s", fd, fs, ft);
4082 * 3 2 1
4083 * 10987654321098765432109876543210
4084 * 001000 x1110000101
4085 * rt -----
4086 * rs -----
4087 * rd -----
4089 std::string NMD::CMP_NE_S(uint64 instruction)
4091 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4092 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4093 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4095 std::string fd = FPR(copy(fd_value));
4096 std::string fs = FPR(copy(fs_value));
4097 std::string ft = FPR(copy(ft_value));
4099 return img::format("CMP.NE.S %s, %s, %s", fd, fs, ft);
4106 * 3 2 1
4107 * 10987654321098765432109876543210
4108 * 001000 x1110000101
4109 * rt -----
4110 * rs -----
4111 * rd -----
4113 std::string NMD::CMP_OR_D(uint64 instruction)
4115 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4116 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4117 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4119 std::string fd = FPR(copy(fd_value));
4120 std::string fs = FPR(copy(fs_value));
4121 std::string ft = FPR(copy(ft_value));
4123 return img::format("CMP.OR.D %s, %s, %s", fd, fs, ft);
4130 * 3 2 1
4131 * 10987654321098765432109876543210
4132 * 001000 x1110000101
4133 * rt -----
4134 * rs -----
4135 * rd -----
4137 std::string NMD::CMP_OR_S(uint64 instruction)
4139 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4140 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4141 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4143 std::string fd = FPR(copy(fd_value));
4144 std::string fs = FPR(copy(fs_value));
4145 std::string ft = FPR(copy(ft_value));
4147 return img::format("CMP.OR.S %s, %s, %s", fd, fs, ft);
4154 * 3 2 1
4155 * 10987654321098765432109876543210
4156 * 001000 x1110000101
4157 * rt -----
4158 * rs -----
4159 * rd -----
4161 std::string NMD::CMP_SAF_D(uint64 instruction)
4163 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4164 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4165 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4167 std::string fd = FPR(copy(fd_value));
4168 std::string fs = FPR(copy(fs_value));
4169 std::string ft = FPR(copy(ft_value));
4171 return img::format("CMP.SAF.D %s, %s, %s", fd, fs, ft);
4178 * 3 2 1
4179 * 10987654321098765432109876543210
4180 * 001000 x1110000101
4181 * rt -----
4182 * rs -----
4183 * rd -----
4185 std::string NMD::CMP_SAF_S(uint64 instruction)
4187 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4188 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4189 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4191 std::string fd = FPR(copy(fd_value));
4192 std::string fs = FPR(copy(fs_value));
4193 std::string ft = FPR(copy(ft_value));
4195 return img::format("CMP.SAF.S %s, %s, %s", fd, fs, ft);
4202 * 3 2 1
4203 * 10987654321098765432109876543210
4204 * 001000 x1110000101
4205 * rt -----
4206 * rs -----
4207 * rd -----
4209 std::string NMD::CMP_SEQ_D(uint64 instruction)
4211 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4212 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4213 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4215 std::string fd = FPR(copy(fd_value));
4216 std::string fs = FPR(copy(fs_value));
4217 std::string ft = FPR(copy(ft_value));
4219 return img::format("CMP.SEQ.D %s, %s, %s", fd, fs, ft);
4226 * 3 2 1
4227 * 10987654321098765432109876543210
4228 * 001000 x1110000101
4229 * rt -----
4230 * rs -----
4231 * rd -----
4233 std::string NMD::CMP_SEQ_S(uint64 instruction)
4235 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4236 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4237 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4239 std::string fd = FPR(copy(fd_value));
4240 std::string fs = FPR(copy(fs_value));
4241 std::string ft = FPR(copy(ft_value));
4243 return img::format("CMP.SEQ.S %s, %s, %s", fd, fs, ft);
4250 * 3 2 1
4251 * 10987654321098765432109876543210
4252 * 001000 x1110000101
4253 * rt -----
4254 * rs -----
4255 * rd -----
4257 std::string NMD::CMP_SLE_D(uint64 instruction)
4259 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4260 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4261 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4263 std::string fd = FPR(copy(fd_value));
4264 std::string fs = FPR(copy(fs_value));
4265 std::string ft = FPR(copy(ft_value));
4267 return img::format("CMP.SLE.D %s, %s, %s", fd, fs, ft);
4274 * 3 2 1
4275 * 10987654321098765432109876543210
4276 * 001000 x1110000101
4277 * rt -----
4278 * rs -----
4279 * rd -----
4281 std::string NMD::CMP_SLE_S(uint64 instruction)
4283 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4284 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4285 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4287 std::string fd = FPR(copy(fd_value));
4288 std::string fs = FPR(copy(fs_value));
4289 std::string ft = FPR(copy(ft_value));
4291 return img::format("CMP.SLE.S %s, %s, %s", fd, fs, ft);
4298 * 3 2 1
4299 * 10987654321098765432109876543210
4300 * 001000 x1110000101
4301 * rt -----
4302 * rs -----
4303 * rd -----
4305 std::string NMD::CMP_SLT_D(uint64 instruction)
4307 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4308 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4309 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4311 std::string fd = FPR(copy(fd_value));
4312 std::string fs = FPR(copy(fs_value));
4313 std::string ft = FPR(copy(ft_value));
4315 return img::format("CMP.SLT.D %s, %s, %s", fd, fs, ft);
4322 * 3 2 1
4323 * 10987654321098765432109876543210
4324 * 001000 x1110000101
4325 * rt -----
4326 * rs -----
4327 * rd -----
4329 std::string NMD::CMP_SLT_S(uint64 instruction)
4331 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4332 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4333 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4335 std::string fd = FPR(copy(fd_value));
4336 std::string fs = FPR(copy(fs_value));
4337 std::string ft = FPR(copy(ft_value));
4339 return img::format("CMP.SLT.S %s, %s, %s", fd, fs, ft);
4346 * 3 2 1
4347 * 10987654321098765432109876543210
4348 * 001000 x1110000101
4349 * rt -----
4350 * rs -----
4351 * rd -----
4353 std::string NMD::CMP_SNE_D(uint64 instruction)
4355 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4356 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4357 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4359 std::string fd = FPR(copy(fd_value));
4360 std::string fs = FPR(copy(fs_value));
4361 std::string ft = FPR(copy(ft_value));
4363 return img::format("CMP.SNE.D %s, %s, %s", fd, fs, ft);
4370 * 3 2 1
4371 * 10987654321098765432109876543210
4372 * 001000 x1110000101
4373 * rt -----
4374 * rs -----
4375 * rd -----
4377 std::string NMD::CMP_SNE_S(uint64 instruction)
4379 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4380 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4381 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4383 std::string fd = FPR(copy(fd_value));
4384 std::string fs = FPR(copy(fs_value));
4385 std::string ft = FPR(copy(ft_value));
4387 return img::format("CMP.SNE.S %s, %s, %s", fd, fs, ft);
4394 * 3 2 1
4395 * 10987654321098765432109876543210
4396 * 001000 x1110000101
4397 * rt -----
4398 * rs -----
4399 * rd -----
4401 std::string NMD::CMP_SOR_D(uint64 instruction)
4403 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4404 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4405 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4407 std::string fd = FPR(copy(fd_value));
4408 std::string fs = FPR(copy(fs_value));
4409 std::string ft = FPR(copy(ft_value));
4411 return img::format("CMP.SOR.D %s, %s, %s", fd, fs, ft);
4418 * 3 2 1
4419 * 10987654321098765432109876543210
4420 * 001000 x1110000101
4421 * rt -----
4422 * rs -----
4423 * rd -----
4425 std::string NMD::CMP_SOR_S(uint64 instruction)
4427 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4428 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4429 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4431 std::string fd = FPR(copy(fd_value));
4432 std::string fs = FPR(copy(fs_value));
4433 std::string ft = FPR(copy(ft_value));
4435 return img::format("CMP.SOR.S %s, %s, %s", fd, fs, ft);
4442 * 3 2 1
4443 * 10987654321098765432109876543210
4444 * 001000 x1110000101
4445 * rt -----
4446 * rs -----
4447 * rd -----
4449 std::string NMD::CMP_SUEQ_D(uint64 instruction)
4451 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4452 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4453 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4455 std::string fd = FPR(copy(fd_value));
4456 std::string fs = FPR(copy(fs_value));
4457 std::string ft = FPR(copy(ft_value));
4459 return img::format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft);
4466 * 3 2 1
4467 * 10987654321098765432109876543210
4468 * 001000 x1110000101
4469 * rt -----
4470 * rs -----
4471 * rd -----
4473 std::string NMD::CMP_SUEQ_S(uint64 instruction)
4475 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4476 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4477 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4479 std::string fd = FPR(copy(fd_value));
4480 std::string fs = FPR(copy(fs_value));
4481 std::string ft = FPR(copy(ft_value));
4483 return img::format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft);
4490 * 3 2 1
4491 * 10987654321098765432109876543210
4492 * 001000 x1110000101
4493 * rt -----
4494 * rs -----
4495 * rd -----
4497 std::string NMD::CMP_SULE_D(uint64 instruction)
4499 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4500 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4501 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4503 std::string fd = FPR(copy(fd_value));
4504 std::string fs = FPR(copy(fs_value));
4505 std::string ft = FPR(copy(ft_value));
4507 return img::format("CMP.SULE.D %s, %s, %s", fd, fs, ft);
4514 * 3 2 1
4515 * 10987654321098765432109876543210
4516 * 001000 x1110000101
4517 * rt -----
4518 * rs -----
4519 * rd -----
4521 std::string NMD::CMP_SULE_S(uint64 instruction)
4523 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4524 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4525 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4527 std::string fd = FPR(copy(fd_value));
4528 std::string fs = FPR(copy(fs_value));
4529 std::string ft = FPR(copy(ft_value));
4531 return img::format("CMP.SULE.S %s, %s, %s", fd, fs, ft);
4538 * 3 2 1
4539 * 10987654321098765432109876543210
4540 * 001000 x1110000101
4541 * rt -----
4542 * rs -----
4543 * rd -----
4545 std::string NMD::CMP_SULT_D(uint64 instruction)
4547 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4548 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4549 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4551 std::string fd = FPR(copy(fd_value));
4552 std::string fs = FPR(copy(fs_value));
4553 std::string ft = FPR(copy(ft_value));
4555 return img::format("CMP.SULT.D %s, %s, %s", fd, fs, ft);
4562 * 3 2 1
4563 * 10987654321098765432109876543210
4564 * 001000 x1110000101
4565 * rt -----
4566 * rs -----
4567 * rd -----
4569 std::string NMD::CMP_SULT_S(uint64 instruction)
4571 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4572 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4573 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4575 std::string fd = FPR(copy(fd_value));
4576 std::string fs = FPR(copy(fs_value));
4577 std::string ft = FPR(copy(ft_value));
4579 return img::format("CMP.SULT.S %s, %s, %s", fd, fs, ft);
4586 * 3 2 1
4587 * 10987654321098765432109876543210
4588 * 001000 x1110000101
4589 * rt -----
4590 * rs -----
4591 * rd -----
4593 std::string NMD::CMP_SUN_D(uint64 instruction)
4595 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4596 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4597 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4599 std::string fd = FPR(copy(fd_value));
4600 std::string fs = FPR(copy(fs_value));
4601 std::string ft = FPR(copy(ft_value));
4603 return img::format("CMP.SUN.D %s, %s, %s", fd, fs, ft);
4610 * 3 2 1
4611 * 10987654321098765432109876543210
4612 * 001000 x1110000101
4613 * rt -----
4614 * rs -----
4615 * rd -----
4617 std::string NMD::CMP_SUNE_D(uint64 instruction)
4619 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4620 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4621 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4623 std::string fd = FPR(copy(fd_value));
4624 std::string fs = FPR(copy(fs_value));
4625 std::string ft = FPR(copy(ft_value));
4627 return img::format("CMP.SUNE.D %s, %s, %s", fd, fs, ft);
4634 * 3 2 1
4635 * 10987654321098765432109876543210
4636 * 001000 x1110000101
4637 * rt -----
4638 * rs -----
4639 * rd -----
4641 std::string NMD::CMP_SUNE_S(uint64 instruction)
4643 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4644 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4645 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4647 std::string fd = FPR(copy(fd_value));
4648 std::string fs = FPR(copy(fs_value));
4649 std::string ft = FPR(copy(ft_value));
4651 return img::format("CMP.SUNE.S %s, %s, %s", fd, fs, ft);
4658 * 3 2 1
4659 * 10987654321098765432109876543210
4660 * 001000 x1110000101
4661 * rt -----
4662 * rs -----
4663 * rd -----
4665 std::string NMD::CMP_SUN_S(uint64 instruction)
4667 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4668 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4669 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4671 std::string fd = FPR(copy(fd_value));
4672 std::string fs = FPR(copy(fs_value));
4673 std::string ft = FPR(copy(ft_value));
4675 return img::format("CMP.SUN.S %s, %s, %s", fd, fs, ft);
4682 * 3 2 1
4683 * 10987654321098765432109876543210
4684 * 001000 x1110000101
4685 * rt -----
4686 * rs -----
4687 * rd -----
4689 std::string NMD::CMP_UEQ_D(uint64 instruction)
4691 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4692 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4693 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4695 std::string fd = FPR(copy(fd_value));
4696 std::string fs = FPR(copy(fs_value));
4697 std::string ft = FPR(copy(ft_value));
4699 return img::format("CMP.UEQ.D %s, %s, %s", fd, fs, ft);
4706 * 3 2 1
4707 * 10987654321098765432109876543210
4708 * 001000 x1110000101
4709 * rt -----
4710 * rs -----
4711 * rd -----
4713 std::string NMD::CMP_UEQ_S(uint64 instruction)
4715 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4716 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4717 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4719 std::string fd = FPR(copy(fd_value));
4720 std::string fs = FPR(copy(fs_value));
4721 std::string ft = FPR(copy(ft_value));
4723 return img::format("CMP.UEQ.S %s, %s, %s", fd, fs, ft);
4730 * 3 2 1
4731 * 10987654321098765432109876543210
4732 * 001000 x1110000101
4733 * rt -----
4734 * rs -----
4735 * rd -----
4737 std::string NMD::CMP_ULE_D(uint64 instruction)
4739 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4740 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4741 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4743 std::string fd = FPR(copy(fd_value));
4744 std::string fs = FPR(copy(fs_value));
4745 std::string ft = FPR(copy(ft_value));
4747 return img::format("CMP.ULE.D %s, %s, %s", fd, fs, ft);
4754 * 3 2 1
4755 * 10987654321098765432109876543210
4756 * 001000 x1110000101
4757 * rt -----
4758 * rs -----
4759 * rd -----
4761 std::string NMD::CMP_ULE_S(uint64 instruction)
4763 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4764 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4765 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4767 std::string fd = FPR(copy(fd_value));
4768 std::string fs = FPR(copy(fs_value));
4769 std::string ft = FPR(copy(ft_value));
4771 return img::format("CMP.ULE.S %s, %s, %s", fd, fs, ft);
4778 * 3 2 1
4779 * 10987654321098765432109876543210
4780 * 001000 x1110000101
4781 * rt -----
4782 * rs -----
4783 * rd -----
4785 std::string NMD::CMP_ULT_D(uint64 instruction)
4787 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4788 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4789 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4791 std::string fd = FPR(copy(fd_value));
4792 std::string fs = FPR(copy(fs_value));
4793 std::string ft = FPR(copy(ft_value));
4795 return img::format("CMP.ULT.D %s, %s, %s", fd, fs, ft);
4802 * 3 2 1
4803 * 10987654321098765432109876543210
4804 * 001000 x1110000101
4805 * rt -----
4806 * rs -----
4807 * rd -----
4809 std::string NMD::CMP_ULT_S(uint64 instruction)
4811 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4812 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4813 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4815 std::string fd = FPR(copy(fd_value));
4816 std::string fs = FPR(copy(fs_value));
4817 std::string ft = FPR(copy(ft_value));
4819 return img::format("CMP.ULT.S %s, %s, %s", fd, fs, ft);
4826 * 3 2 1
4827 * 10987654321098765432109876543210
4828 * 001000 x1110000101
4829 * rt -----
4830 * rs -----
4831 * rd -----
4833 std::string NMD::CMP_UN_D(uint64 instruction)
4835 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4836 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4837 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4839 std::string fd = FPR(copy(fd_value));
4840 std::string fs = FPR(copy(fs_value));
4841 std::string ft = FPR(copy(ft_value));
4843 return img::format("CMP.UN.D %s, %s, %s", fd, fs, ft);
4850 * 3 2 1
4851 * 10987654321098765432109876543210
4852 * 001000 x1110000101
4853 * rt -----
4854 * rs -----
4855 * rd -----
4857 std::string NMD::CMP_UNE_D(uint64 instruction)
4859 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4860 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4861 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4863 std::string fd = FPR(copy(fd_value));
4864 std::string fs = FPR(copy(fs_value));
4865 std::string ft = FPR(copy(ft_value));
4867 return img::format("CMP.UNE.D %s, %s, %s", fd, fs, ft);
4874 * 3 2 1
4875 * 10987654321098765432109876543210
4876 * 001000 x1110000101
4877 * rt -----
4878 * rs -----
4879 * rd -----
4881 std::string NMD::CMP_UNE_S(uint64 instruction)
4883 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4884 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4885 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4887 std::string fd = FPR(copy(fd_value));
4888 std::string fs = FPR(copy(fs_value));
4889 std::string ft = FPR(copy(ft_value));
4891 return img::format("CMP.UNE.S %s, %s, %s", fd, fs, ft);
4898 * 3 2 1
4899 * 10987654321098765432109876543210
4900 * 001000 x1110000101
4901 * rt -----
4902 * rs -----
4903 * rd -----
4905 std::string NMD::CMP_UN_S(uint64 instruction)
4907 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4908 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4909 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4911 std::string fd = FPR(copy(fd_value));
4912 std::string fs = FPR(copy(fs_value));
4913 std::string ft = FPR(copy(ft_value));
4915 return img::format("CMP.UN.S %s, %s, %s", fd, fs, ft);
4920 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4921 * four bytes and write result to GPR and DSPControl
4923 * 3 2 1
4924 * 10987654321098765432109876543210
4925 * 001000 x0110000101
4926 * rt -----
4927 * rs -----
4928 * rd -----
4930 std::string NMD::CMPGDU_EQ_QB(uint64 instruction)
4932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4933 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4934 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4936 std::string rd = GPR(copy(rd_value));
4937 std::string rs = GPR(copy(rs_value));
4938 std::string rt = GPR(copy(rt_value));
4940 return img::format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt);
4945 * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of
4946 * four bytes and write result to GPR and DSPControl
4948 * 3 2 1
4949 * 10987654321098765432109876543210
4950 * 001000 x1000000101
4951 * rt -----
4952 * rs -----
4953 * rd -----
4955 std::string NMD::CMPGDU_LE_QB(uint64 instruction)
4957 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4958 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4959 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4961 std::string rd = GPR(copy(rd_value));
4962 std::string rs = GPR(copy(rs_value));
4963 std::string rt = GPR(copy(rt_value));
4965 return img::format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt);
4970 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4971 * four bytes and write result to GPR and DSPControl
4973 * 3 2 1
4974 * 10987654321098765432109876543210
4975 * 001000 x0111000101
4976 * rt -----
4977 * rs -----
4978 * rd -----
4980 std::string NMD::CMPGDU_LT_QB(uint64 instruction)
4982 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4983 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4984 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4986 std::string rd = GPR(copy(rd_value));
4987 std::string rs = GPR(copy(rs_value));
4988 std::string rt = GPR(copy(rt_value));
4990 return img::format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt);
4995 * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4996 * byte values and write result to a GPR
4998 * 3 2 1
4999 * 10987654321098765432109876543210
5000 * 001000 x0011000101
5001 * rt -----
5002 * rs -----
5003 * rd -----
5005 std::string NMD::CMPGU_EQ_QB(uint64 instruction)
5007 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5008 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5009 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5011 std::string rd = GPR(copy(rd_value));
5012 std::string rs = GPR(copy(rs_value));
5013 std::string rt = GPR(copy(rt_value));
5015 return img::format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt);
5020 * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned
5021 * byte values and write result to a GPR
5023 * 3 2 1
5024 * 10987654321098765432109876543210
5025 * 001000 x0101000101
5026 * rt -----
5027 * rs -----
5028 * rd -----
5030 std::string NMD::CMPGU_LE_QB(uint64 instruction)
5032 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5033 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5034 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5036 std::string rd = GPR(copy(rd_value));
5037 std::string rs = GPR(copy(rs_value));
5038 std::string rt = GPR(copy(rt_value));
5040 return img::format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt);
5045 * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned
5046 * byte values and write result to a GPR
5048 * 3 2 1
5049 * 10987654321098765432109876543210
5050 * 001000 x0100000101
5051 * rt -----
5052 * rs -----
5053 * rd -----
5055 std::string NMD::CMPGU_LT_QB(uint64 instruction)
5057 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5058 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5059 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5061 std::string rd = GPR(copy(rd_value));
5062 std::string rs = GPR(copy(rs_value));
5063 std::string rt = GPR(copy(rt_value));
5065 return img::format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt);
5070 * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned
5071 * byte values
5073 * 3 2 1
5074 * 10987654321098765432109876543210
5075 * 001000 xxxxxx1001000101
5076 * rt -----
5077 * rs -----
5079 std::string NMD::CMPU_EQ_QB(uint64 instruction)
5081 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5082 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5084 std::string rs = GPR(copy(rs_value));
5085 std::string rt = GPR(copy(rt_value));
5087 return img::format("CMPU.EQ.QB %s, %s", rs, rt);
5092 * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned
5093 * byte values
5095 * 3 2 1
5096 * 10987654321098765432109876543210
5097 * 001000 xxxxxx1011000101
5098 * rt -----
5099 * rs -----
5101 std::string NMD::CMPU_LE_QB(uint64 instruction)
5103 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5104 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5106 std::string rs = GPR(copy(rs_value));
5107 std::string rt = GPR(copy(rt_value));
5109 return img::format("CMPU.LE.QB %s, %s", rs, rt);
5114 * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned
5115 * byte values
5117 * 3 2 1
5118 * 10987654321098765432109876543210
5119 * 001000 xxxxxx1010000101
5120 * rt -----
5121 * rs -----
5123 std::string NMD::CMPU_LT_QB(uint64 instruction)
5125 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5126 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5128 std::string rs = GPR(copy(rs_value));
5129 std::string rt = GPR(copy(rt_value));
5131 return img::format("CMPU.LT.QB %s, %s", rs, rt);
5138 * 3 2 1
5139 * 10987654321098765432109876543210
5140 * 001000 x1110000101
5141 * rt -----
5142 * rs -----
5143 * rd -----
5145 std::string NMD::COP2_1(uint64 instruction)
5147 uint64 cofun_value = extract_cofun_25_24_23(instruction);
5149 std::string cofun = IMMEDIATE(copy(cofun_value));
5151 return img::format("COP2_1 %s", cofun);
5158 * 3 2 1
5159 * 10987654321098765432109876543210
5160 * 001000 x1110000101
5161 * rt -----
5162 * rs -----
5163 * rd -----
5165 std::string NMD::CTC1(uint64 instruction)
5167 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5168 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5170 std::string rt = GPR(copy(rt_value));
5171 std::string cs = CPR(copy(cs_value));
5173 return img::format("CTC1 %s, %s", rt, cs);
5180 * 3 2 1
5181 * 10987654321098765432109876543210
5182 * 001000 x1110000101
5183 * rt -----
5184 * rs -----
5185 * rd -----
5187 std::string NMD::CTC2(uint64 instruction)
5189 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5190 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5192 std::string rt = GPR(copy(rt_value));
5193 std::string cs = CPR(copy(cs_value));
5195 return img::format("CTC2 %s, %s", rt, cs);
5202 * 3 2 1
5203 * 10987654321098765432109876543210
5204 * 001000 x1110000101
5205 * rt -----
5206 * rs -----
5207 * rd -----
5209 std::string NMD::CVT_D_L(uint64 instruction)
5211 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5212 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5214 std::string ft = FPR(copy(ft_value));
5215 std::string fs = FPR(copy(fs_value));
5217 return img::format("CVT.D.L %s, %s", ft, fs);
5224 * 3 2 1
5225 * 10987654321098765432109876543210
5226 * 001000 x1110000101
5227 * rt -----
5228 * rs -----
5229 * rd -----
5231 std::string NMD::CVT_D_S(uint64 instruction)
5233 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5234 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5236 std::string ft = FPR(copy(ft_value));
5237 std::string fs = FPR(copy(fs_value));
5239 return img::format("CVT.D.S %s, %s", ft, fs);
5246 * 3 2 1
5247 * 10987654321098765432109876543210
5248 * 001000 x1110000101
5249 * rt -----
5250 * rs -----
5251 * rd -----
5253 std::string NMD::CVT_D_W(uint64 instruction)
5255 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5256 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5258 std::string ft = FPR(copy(ft_value));
5259 std::string fs = FPR(copy(fs_value));
5261 return img::format("CVT.D.W %s, %s", ft, fs);
5268 * 3 2 1
5269 * 10987654321098765432109876543210
5270 * 001000 x1110000101
5271 * rt -----
5272 * rs -----
5273 * rd -----
5275 std::string NMD::CVT_L_D(uint64 instruction)
5277 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5278 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5280 std::string ft = FPR(copy(ft_value));
5281 std::string fs = FPR(copy(fs_value));
5283 return img::format("CVT.L.D %s, %s", ft, fs);
5290 * 3 2 1
5291 * 10987654321098765432109876543210
5292 * 001000 x1110000101
5293 * rt -----
5294 * rs -----
5295 * rd -----
5297 std::string NMD::CVT_L_S(uint64 instruction)
5299 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5300 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5302 std::string ft = FPR(copy(ft_value));
5303 std::string fs = FPR(copy(fs_value));
5305 return img::format("CVT.L.S %s, %s", ft, fs);
5312 * 3 2 1
5313 * 10987654321098765432109876543210
5314 * 001000 x1110000101
5315 * rt -----
5316 * rs -----
5317 * rd -----
5319 std::string NMD::CVT_S_D(uint64 instruction)
5321 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5322 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5324 std::string ft = FPR(copy(ft_value));
5325 std::string fs = FPR(copy(fs_value));
5327 return img::format("CVT.S.D %s, %s", ft, fs);
5334 * 3 2 1
5335 * 10987654321098765432109876543210
5336 * 001000 x1110000101
5337 * rt -----
5338 * rs -----
5339 * rd -----
5341 std::string NMD::CVT_S_L(uint64 instruction)
5343 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5344 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5346 std::string ft = FPR(copy(ft_value));
5347 std::string fs = FPR(copy(fs_value));
5349 return img::format("CVT.S.L %s, %s", ft, fs);
5356 * 3 2 1
5357 * 10987654321098765432109876543210
5358 * 001000 x1110000101
5359 * rt -----
5360 * rs -----
5361 * rd -----
5363 std::string NMD::CVT_S_PL(uint64 instruction)
5365 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5366 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5368 std::string ft = FPR(copy(ft_value));
5369 std::string fs = FPR(copy(fs_value));
5371 return img::format("CVT.S.PL %s, %s", ft, fs);
5378 * 3 2 1
5379 * 10987654321098765432109876543210
5380 * 001000 x1110000101
5381 * rt -----
5382 * rs -----
5383 * rd -----
5385 std::string NMD::CVT_S_PU(uint64 instruction)
5387 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5388 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5390 std::string ft = FPR(copy(ft_value));
5391 std::string fs = FPR(copy(fs_value));
5393 return img::format("CVT.S.PU %s, %s", ft, fs);
5400 * 3 2 1
5401 * 10987654321098765432109876543210
5402 * 001000 x1110000101
5403 * rt -----
5404 * rs -----
5405 * rd -----
5407 std::string NMD::CVT_S_W(uint64 instruction)
5409 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5410 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5412 std::string ft = FPR(copy(ft_value));
5413 std::string fs = FPR(copy(fs_value));
5415 return img::format("CVT.S.W %s, %s", ft, fs);
5422 * 3 2 1
5423 * 10987654321098765432109876543210
5424 * 001000 x1110000101
5425 * rt -----
5426 * rs -----
5427 * rd -----
5429 std::string NMD::CVT_W_D(uint64 instruction)
5431 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5432 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5434 std::string ft = FPR(copy(ft_value));
5435 std::string fs = FPR(copy(fs_value));
5437 return img::format("CVT.W.D %s, %s", ft, fs);
5444 * 3 2 1
5445 * 10987654321098765432109876543210
5446 * 001000 x1110000101
5447 * rt -----
5448 * rs -----
5449 * rd -----
5451 std::string NMD::CVT_W_S(uint64 instruction)
5453 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5454 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5456 std::string ft = FPR(copy(ft_value));
5457 std::string fs = FPR(copy(fs_value));
5459 return img::format("CVT.W.S %s, %s", ft, fs);
5466 * 3 2 1
5467 * 10987654321098765432109876543210
5468 * 001000 x1110000101
5469 * rt -----
5470 * rs -----
5471 * rd -----
5473 std::string NMD::DADDIU_48_(uint64 instruction)
5475 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5476 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
5478 std::string rt = GPR(copy(rt_value));
5479 std::string s = IMMEDIATE(copy(s_value));
5481 return img::format("DADDIU %s, %s", rt, s);
5488 * 3 2 1
5489 * 10987654321098765432109876543210
5490 * 001000 x1110000101
5491 * rt -----
5492 * rs -----
5493 * rd -----
5495 std::string NMD::DADDIU_NEG_(uint64 instruction)
5497 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5498 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5499 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5501 std::string rt = GPR(copy(rt_value));
5502 std::string rs = GPR(copy(rs_value));
5503 std::string u = IMMEDIATE(neg_copy(u_value));
5505 return img::format("DADDIU %s, %s, %s", rt, rs, u);
5512 * 3 2 1
5513 * 10987654321098765432109876543210
5514 * 001000 x1110000101
5515 * rt -----
5516 * rs -----
5517 * rd -----
5519 std::string NMD::DADDIU_U12_(uint64 instruction)
5521 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5522 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5523 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5525 std::string rt = GPR(copy(rt_value));
5526 std::string rs = GPR(copy(rs_value));
5527 std::string u = IMMEDIATE(copy(u_value));
5529 return img::format("DADDIU %s, %s, %s", rt, rs, u);
5536 * 3 2 1
5537 * 10987654321098765432109876543210
5538 * 001000 x1110000101
5539 * rt -----
5540 * rs -----
5541 * rd -----
5543 std::string NMD::DADD(uint64 instruction)
5545 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5546 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5547 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5549 std::string rd = GPR(copy(rd_value));
5550 std::string rs = GPR(copy(rs_value));
5551 std::string rt = GPR(copy(rt_value));
5553 return img::format("DADD %s, %s, %s", rd, rs, rt);
5560 * 3 2 1
5561 * 10987654321098765432109876543210
5562 * 001000 x1110000101
5563 * rt -----
5564 * rs -----
5565 * rd -----
5567 std::string NMD::DADDU(uint64 instruction)
5569 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5570 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5571 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5573 std::string rd = GPR(copy(rd_value));
5574 std::string rs = GPR(copy(rs_value));
5575 std::string rt = GPR(copy(rt_value));
5577 return img::format("DADDU %s, %s, %s", rd, rs, rt);
5584 * 3 2 1
5585 * 10987654321098765432109876543210
5586 * 001000 x1110000101
5587 * rt -----
5588 * rs -----
5589 * rd -----
5591 std::string NMD::DCLO(uint64 instruction)
5593 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5594 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5596 std::string rt = GPR(copy(rt_value));
5597 std::string rs = GPR(copy(rs_value));
5599 return img::format("DCLO %s, %s", rt, rs);
5606 * 3 2 1
5607 * 10987654321098765432109876543210
5608 * 001000 x1110000101
5609 * rt -----
5610 * rs -----
5611 * rd -----
5613 std::string NMD::DCLZ(uint64 instruction)
5615 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5616 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5618 std::string rt = GPR(copy(rt_value));
5619 std::string rs = GPR(copy(rs_value));
5621 return img::format("DCLZ %s, %s", rt, rs);
5628 * 3 2 1
5629 * 10987654321098765432109876543210
5630 * 001000 x1110000101
5631 * rt -----
5632 * rs -----
5633 * rd -----
5635 std::string NMD::DDIV(uint64 instruction)
5637 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5638 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5639 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5641 std::string rd = GPR(copy(rd_value));
5642 std::string rs = GPR(copy(rs_value));
5643 std::string rt = GPR(copy(rt_value));
5645 return img::format("DDIV %s, %s, %s", rd, rs, rt);
5652 * 3 2 1
5653 * 10987654321098765432109876543210
5654 * 001000 x1110000101
5655 * rt -----
5656 * rs -----
5657 * rd -----
5659 std::string NMD::DDIVU(uint64 instruction)
5661 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5662 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5663 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5665 std::string rd = GPR(copy(rd_value));
5666 std::string rs = GPR(copy(rs_value));
5667 std::string rt = GPR(copy(rt_value));
5669 return img::format("DDIVU %s, %s, %s", rd, rs, rt);
5676 * 3 2 1
5677 * 10987654321098765432109876543210
5678 * 001000 x1110000101
5679 * rt -----
5680 * rs -----
5681 * rd -----
5683 std::string NMD::DERET(uint64 instruction)
5685 (void)instruction;
5687 return "DERET ";
5694 * 3 2 1
5695 * 10987654321098765432109876543210
5696 * 001000 x1110000101
5697 * rt -----
5698 * rs -----
5699 * rd -----
5701 std::string NMD::DEXTM(uint64 instruction)
5703 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5704 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5705 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5706 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5708 std::string rt = GPR(copy(rt_value));
5709 std::string rs = GPR(copy(rs_value));
5710 std::string lsb = IMMEDIATE(copy(lsb_value));
5711 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5713 return img::format("DEXTM %s, %s, %s, %s", rt, rs, lsb, msbd);
5720 * 3 2 1
5721 * 10987654321098765432109876543210
5722 * 001000 x1110000101
5723 * rt -----
5724 * rs -----
5725 * rd -----
5727 std::string NMD::DEXT(uint64 instruction)
5729 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5730 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5731 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5732 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5734 std::string rt = GPR(copy(rt_value));
5735 std::string rs = GPR(copy(rs_value));
5736 std::string lsb = IMMEDIATE(copy(lsb_value));
5737 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5739 return img::format("DEXT %s, %s, %s, %s", rt, rs, lsb, msbd);
5746 * 3 2 1
5747 * 10987654321098765432109876543210
5748 * 001000 x1110000101
5749 * rt -----
5750 * rs -----
5751 * rd -----
5753 std::string NMD::DEXTU(uint64 instruction)
5755 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5756 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5757 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5758 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5760 std::string rt = GPR(copy(rt_value));
5761 std::string rs = GPR(copy(rs_value));
5762 std::string lsb = IMMEDIATE(copy(lsb_value));
5763 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5765 return img::format("DEXTU %s, %s, %s, %s", rt, rs, lsb, msbd);
5772 * 3 2 1
5773 * 10987654321098765432109876543210
5774 * 001000 x1110000101
5775 * rt -----
5776 * rs -----
5777 * rd -----
5779 std::string NMD::DINSM(uint64 instruction)
5781 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5782 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5783 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5784 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5786 std::string rt = GPR(copy(rt_value));
5787 std::string rs = GPR(copy(rs_value));
5788 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5789 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5790 /* !!!!!!!!!! - no conversion function */
5792 return img::format("DINSM %s, %s, %s, %s", rt, rs, pos, size);
5793 /* hand edited */
5800 * 3 2 1
5801 * 10987654321098765432109876543210
5802 * 001000 x1110000101
5803 * rt -----
5804 * rs -----
5805 * rd -----
5807 std::string NMD::DINS(uint64 instruction)
5809 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5810 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5811 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5812 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5814 std::string rt = GPR(copy(rt_value));
5815 std::string rs = GPR(copy(rs_value));
5816 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5817 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5818 /* !!!!!!!!!! - no conversion function */
5820 return img::format("DINS %s, %s, %s, %s", rt, rs, pos, size);
5821 /* hand edited */
5828 * 3 2 1
5829 * 10987654321098765432109876543210
5830 * 001000 x1110000101
5831 * rt -----
5832 * rs -----
5833 * rd -----
5835 std::string NMD::DINSU(uint64 instruction)
5837 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5838 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5839 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5840 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5842 std::string rt = GPR(copy(rt_value));
5843 std::string rs = GPR(copy(rs_value));
5844 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5845 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5846 /* !!!!!!!!!! - no conversion function */
5848 return img::format("DINSU %s, %s, %s, %s", rt, rs, pos, size);
5849 /* hand edited */
5856 * 3 2 1
5857 * 10987654321098765432109876543210
5858 * 001000 x1110000101
5859 * rt -----
5860 * rs -----
5861 * rd -----
5863 std::string NMD::DI(uint64 instruction)
5865 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5867 std::string rt = GPR(copy(rt_value));
5869 return img::format("DI %s", rt);
5876 * 3 2 1
5877 * 10987654321098765432109876543210
5878 * 001000 x1110000101
5879 * rt -----
5880 * rs -----
5881 * rd -----
5883 std::string NMD::DIV(uint64 instruction)
5885 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5886 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5887 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5889 std::string rd = GPR(copy(rd_value));
5890 std::string rs = GPR(copy(rs_value));
5891 std::string rt = GPR(copy(rt_value));
5893 return img::format("DIV %s, %s, %s", rd, rs, rt);
5900 * 3 2 1
5901 * 10987654321098765432109876543210
5902 * 001000 x1110000101
5903 * rt -----
5904 * rs -----
5905 * rd -----
5907 std::string NMD::DIV_D(uint64 instruction)
5909 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5910 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5911 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5913 std::string fd = FPR(copy(fd_value));
5914 std::string fs = FPR(copy(fs_value));
5915 std::string ft = FPR(copy(ft_value));
5917 return img::format("DIV.D %s, %s, %s", fd, fs, ft);
5924 * 3 2 1
5925 * 10987654321098765432109876543210
5926 * 001000 x1110000101
5927 * rt -----
5928 * rs -----
5929 * rd -----
5931 std::string NMD::DIV_S(uint64 instruction)
5933 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5934 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5935 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5937 std::string fd = FPR(copy(fd_value));
5938 std::string fs = FPR(copy(fs_value));
5939 std::string ft = FPR(copy(ft_value));
5941 return img::format("DIV.S %s, %s, %s", fd, fs, ft);
5948 * 3 2 1
5949 * 10987654321098765432109876543210
5950 * 001000 x1110000101
5951 * rt -----
5952 * rs -----
5953 * rd -----
5955 std::string NMD::DIVU(uint64 instruction)
5957 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5958 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5959 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5961 std::string rd = GPR(copy(rd_value));
5962 std::string rs = GPR(copy(rs_value));
5963 std::string rt = GPR(copy(rt_value));
5965 return img::format("DIVU %s, %s, %s", rd, rs, rt);
5972 * 3 2 1
5973 * 10987654321098765432109876543210
5974 * 001000 x1110000101
5975 * rt -----
5976 * rs -----
5977 * rd -----
5979 std::string NMD::DLSA(uint64 instruction)
5981 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5982 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5983 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5984 uint64 u2_value = extract_u2_10_9(instruction);
5986 std::string rd = GPR(copy(rd_value));
5987 std::string rs = GPR(copy(rs_value));
5988 std::string rt = GPR(copy(rt_value));
5989 std::string u2 = IMMEDIATE(copy(u2_value));
5991 return img::format("DLSA %s, %s, %s, %s", rd, rs, rt, u2);
5998 * 3 2 1
5999 * 10987654321098765432109876543210
6000 * 001000 x1110000101
6001 * rt -----
6002 * rs -----
6003 * rd -----
6005 std::string NMD::DLUI_48_(uint64 instruction)
6007 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
6008 uint64 u_value = extract_u_31_to_0__s32(instruction);
6010 std::string rt = GPR(copy(rt_value));
6011 std::string u = IMMEDIATE(copy(u_value));
6013 return img::format("DLUI %s, %s", rt, u);
6020 * 3 2 1
6021 * 10987654321098765432109876543210
6022 * 001000 x1110000101
6023 * rt -----
6024 * rs -----
6025 * rd -----
6027 std::string NMD::DMFC0(uint64 instruction)
6029 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6030 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6031 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6033 std::string rt = GPR(copy(rt_value));
6034 std::string c0s = CPR(copy(c0s_value));
6035 std::string sel = IMMEDIATE(copy(sel_value));
6037 return img::format("DMFC0 %s, %s, %s", rt, c0s, sel);
6044 * 3 2 1
6045 * 10987654321098765432109876543210
6046 * 001000 x1110000101
6047 * rt -----
6048 * rs -----
6049 * rd -----
6051 std::string NMD::DMFC1(uint64 instruction)
6053 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6054 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
6056 std::string rt = GPR(copy(rt_value));
6057 std::string fs = FPR(copy(fs_value));
6059 return img::format("DMFC1 %s, %s", rt, fs);
6066 * 3 2 1
6067 * 10987654321098765432109876543210
6068 * 001000 x1110000101
6069 * rt -----
6070 * rs -----
6071 * rd -----
6073 std::string NMD::DMFC2(uint64 instruction)
6075 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6076 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
6078 std::string rt = GPR(copy(rt_value));
6079 std::string cs = CPR(copy(cs_value));
6081 return img::format("DMFC2 %s, %s", rt, cs);
6088 * 3 2 1
6089 * 10987654321098765432109876543210
6090 * 001000 x1110000101
6091 * rt -----
6092 * rs -----
6093 * rd -----
6095 std::string NMD::DMFGC0(uint64 instruction)
6097 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6098 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6099 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6101 std::string rt = GPR(copy(rt_value));
6102 std::string c0s = CPR(copy(c0s_value));
6103 std::string sel = IMMEDIATE(copy(sel_value));
6105 return img::format("DMFGC0 %s, %s, %s", rt, c0s, sel);
6112 * 3 2 1
6113 * 10987654321098765432109876543210
6114 * 001000 x1110000101
6115 * rt -----
6116 * rs -----
6117 * rd -----
6119 std::string NMD::DMOD(uint64 instruction)
6121 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6122 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6123 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6125 std::string rd = GPR(copy(rd_value));
6126 std::string rs = GPR(copy(rs_value));
6127 std::string rt = GPR(copy(rt_value));
6129 return img::format("DMOD %s, %s, %s", rd, rs, rt);
6136 * 3 2 1
6137 * 10987654321098765432109876543210
6138 * 001000 x1110000101
6139 * rt -----
6140 * rs -----
6141 * rd -----
6143 std::string NMD::DMODU(uint64 instruction)
6145 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6146 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6147 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6149 std::string rd = GPR(copy(rd_value));
6150 std::string rs = GPR(copy(rs_value));
6151 std::string rt = GPR(copy(rt_value));
6153 return img::format("DMODU %s, %s, %s", rd, rs, rt);
6160 * 3 2 1
6161 * 10987654321098765432109876543210
6162 * 001000 x1110000101
6163 * rt -----
6164 * rs -----
6165 * rd -----
6167 std::string NMD::DMTC0(uint64 instruction)
6169 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6170 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6171 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6173 std::string rt = GPR(copy(rt_value));
6174 std::string c0s = CPR(copy(c0s_value));
6175 std::string sel = IMMEDIATE(copy(sel_value));
6177 return img::format("DMTC0 %s, %s, %s", rt, c0s, sel);
6184 * 3 2 1
6185 * 10987654321098765432109876543210
6186 * 001000 x1110000101
6187 * rt -----
6188 * rs -----
6189 * rd -----
6191 std::string NMD::DMTC1(uint64 instruction)
6193 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6194 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
6196 std::string rt = GPR(copy(rt_value));
6197 std::string fs = FPR(copy(fs_value));
6199 return img::format("DMTC1 %s, %s", rt, fs);
6206 * 3 2 1
6207 * 10987654321098765432109876543210
6208 * 001000 x1110000101
6209 * rt -----
6210 * rs -----
6211 * rd -----
6213 std::string NMD::DMTC2(uint64 instruction)
6215 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6216 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
6218 std::string rt = GPR(copy(rt_value));
6219 std::string cs = CPR(copy(cs_value));
6221 return img::format("DMTC2 %s, %s", rt, cs);
6228 * 3 2 1
6229 * 10987654321098765432109876543210
6230 * 001000 x1110000101
6231 * rt -----
6232 * rs -----
6233 * rd -----
6235 std::string NMD::DMTGC0(uint64 instruction)
6237 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6238 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6239 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6241 std::string rt = GPR(copy(rt_value));
6242 std::string c0s = CPR(copy(c0s_value));
6243 std::string sel = IMMEDIATE(copy(sel_value));
6245 return img::format("DMTGC0 %s, %s, %s", rt, c0s, sel);
6252 * 3 2 1
6253 * 10987654321098765432109876543210
6254 * 001000 x1110000101
6255 * rt -----
6256 * rs -----
6257 * rd -----
6259 std::string NMD::DMT(uint64 instruction)
6261 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6263 std::string rt = GPR(copy(rt_value));
6265 return img::format("DMT %s", rt);
6272 * 3 2 1
6273 * 10987654321098765432109876543210
6274 * 001000 x1110000101
6275 * rt -----
6276 * rs -----
6277 * rd -----
6279 std::string NMD::DMUH(uint64 instruction)
6281 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6282 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6283 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6285 std::string rd = GPR(copy(rd_value));
6286 std::string rs = GPR(copy(rs_value));
6287 std::string rt = GPR(copy(rt_value));
6289 return img::format("DMUH %s, %s, %s", rd, rs, rt);
6296 * 3 2 1
6297 * 10987654321098765432109876543210
6298 * 001000 x1110000101
6299 * rt -----
6300 * rs -----
6301 * rd -----
6303 std::string NMD::DMUHU(uint64 instruction)
6305 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6306 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6307 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6309 std::string rd = GPR(copy(rd_value));
6310 std::string rs = GPR(copy(rs_value));
6311 std::string rt = GPR(copy(rt_value));
6313 return img::format("DMUHU %s, %s, %s", rd, rs, rt);
6320 * 3 2 1
6321 * 10987654321098765432109876543210
6322 * 001000 x1110000101
6323 * rt -----
6324 * rs -----
6325 * rd -----
6327 std::string NMD::DMUL(uint64 instruction)
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 rd_value = extract_rd_15_14_13_12_11(instruction);
6333 std::string rd = GPR(copy(rd_value));
6334 std::string rs = GPR(copy(rs_value));
6335 std::string rt = GPR(copy(rt_value));
6337 return img::format("DMUL %s, %s, %s", rd, rs, rt);
6344 * 3 2 1
6345 * 10987654321098765432109876543210
6346 * 001000 x1110000101
6347 * rt -----
6348 * rs -----
6349 * rd -----
6351 std::string NMD::DMULU(uint64 instruction)
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 rd_value = extract_rd_15_14_13_12_11(instruction);
6357 std::string rd = GPR(copy(rd_value));
6358 std::string rs = GPR(copy(rs_value));
6359 std::string rt = GPR(copy(rt_value));
6361 return img::format("DMULU %s, %s, %s", rd, rs, rt);
6366 * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on
6367 * vector integer halfword elements
6369 * 3 2 1
6370 * 10987654321098765432109876543210
6371 * 001000 00000010111111
6372 * rt -----
6373 * rs -----
6374 * ac --
6376 std::string NMD::DPA_W_PH(uint64 instruction)
6378 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6379 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6380 uint64 ac_value = extract_ac_15_14(instruction);
6382 std::string ac = AC(copy(ac_value));
6383 std::string rs = GPR(copy(rs_value));
6384 std::string rt = GPR(copy(rt_value));
6386 return img::format("DPA.W.PH %s, %s, %s", ac, rs, rt);
6393 * 3 2 1
6394 * 10987654321098765432109876543210
6395 * 001000 x1110000101
6396 * rt -----
6397 * rs -----
6398 * rd -----
6400 std::string NMD::DPAQ_SA_L_W(uint64 instruction)
6402 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6403 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6404 uint64 ac_value = extract_ac_15_14(instruction);
6406 std::string ac = AC(copy(ac_value));
6407 std::string rs = GPR(copy(rs_value));
6408 std::string rt = GPR(copy(rt_value));
6410 return img::format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt);
6417 * 3 2 1
6418 * 10987654321098765432109876543210
6419 * 001000 x1110000101
6420 * rt -----
6421 * rs -----
6422 * rd -----
6424 std::string NMD::DPAQ_S_W_PH(uint64 instruction)
6426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6427 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6428 uint64 ac_value = extract_ac_15_14(instruction);
6430 std::string ac = AC(copy(ac_value));
6431 std::string rs = GPR(copy(rs_value));
6432 std::string rt = GPR(copy(rt_value));
6434 return img::format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt);
6441 * 3 2 1
6442 * 10987654321098765432109876543210
6443 * 001000 x1110000101
6444 * rt -----
6445 * rs -----
6446 * rd -----
6448 std::string NMD::DPAQX_SA_W_PH(uint64 instruction)
6450 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6451 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6452 uint64 ac_value = extract_ac_15_14(instruction);
6454 std::string ac = AC(copy(ac_value));
6455 std::string rs = GPR(copy(rs_value));
6456 std::string rt = GPR(copy(rt_value));
6458 return img::format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6465 * 3 2 1
6466 * 10987654321098765432109876543210
6467 * 001000 x1110000101
6468 * rt -----
6469 * rs -----
6470 * rd -----
6472 std::string NMD::DPAQX_S_W_PH(uint64 instruction)
6474 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6475 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6476 uint64 ac_value = extract_ac_15_14(instruction);
6478 std::string ac = AC(copy(ac_value));
6479 std::string rs = GPR(copy(rs_value));
6480 std::string rt = GPR(copy(rt_value));
6482 return img::format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt);
6489 * 3 2 1
6490 * 10987654321098765432109876543210
6491 * 001000 x1110000101
6492 * rt -----
6493 * rs -----
6494 * rd -----
6496 std::string NMD::DPAU_H_QBL(uint64 instruction)
6498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6499 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6500 uint64 ac_value = extract_ac_15_14(instruction);
6502 std::string ac = AC(copy(ac_value));
6503 std::string rs = GPR(copy(rs_value));
6504 std::string rt = GPR(copy(rt_value));
6506 return img::format("DPAU.H.QBL %s, %s, %s", ac, rs, rt);
6513 * 3 2 1
6514 * 10987654321098765432109876543210
6515 * 001000 x1110000101
6516 * rt -----
6517 * rs -----
6518 * rd -----
6520 std::string NMD::DPAU_H_QBR(uint64 instruction)
6522 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6523 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6524 uint64 ac_value = extract_ac_15_14(instruction);
6526 std::string ac = AC(copy(ac_value));
6527 std::string rs = GPR(copy(rs_value));
6528 std::string rt = GPR(copy(rt_value));
6530 return img::format("DPAU.H.QBR %s, %s, %s", ac, rs, rt);
6537 * 3 2 1
6538 * 10987654321098765432109876543210
6539 * 001000 x1110000101
6540 * rt -----
6541 * rs -----
6542 * rd -----
6544 std::string NMD::DPAX_W_PH(uint64 instruction)
6546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6548 uint64 ac_value = extract_ac_15_14(instruction);
6550 std::string ac = AC(copy(ac_value));
6551 std::string rs = GPR(copy(rs_value));
6552 std::string rt = GPR(copy(rt_value));
6554 return img::format("DPAX.W.PH %s, %s, %s", ac, rs, rt);
6561 * 3 2 1
6562 * 10987654321098765432109876543210
6563 * 001000 x1110000101
6564 * rt -----
6565 * rs -----
6566 * rd -----
6568 std::string NMD::DPS_W_PH(uint64 instruction)
6570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6572 uint64 ac_value = extract_ac_15_14(instruction);
6574 std::string ac = AC(copy(ac_value));
6575 std::string rs = GPR(copy(rs_value));
6576 std::string rt = GPR(copy(rt_value));
6578 return img::format("DPS.W.PH %s, %s, %s", ac, rs, rt);
6585 * 3 2 1
6586 * 10987654321098765432109876543210
6587 * 001000 x1110000101
6588 * rt -----
6589 * rs -----
6590 * rd -----
6592 std::string NMD::DPSQ_SA_L_W(uint64 instruction)
6594 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6595 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6596 uint64 ac_value = extract_ac_15_14(instruction);
6598 std::string ac = AC(copy(ac_value));
6599 std::string rs = GPR(copy(rs_value));
6600 std::string rt = GPR(copy(rt_value));
6602 return img::format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt);
6609 * 3 2 1
6610 * 10987654321098765432109876543210
6611 * 001000 x1110000101
6612 * rt -----
6613 * rs -----
6614 * rd -----
6616 std::string NMD::DPSQ_S_W_PH(uint64 instruction)
6618 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6619 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6620 uint64 ac_value = extract_ac_15_14(instruction);
6622 std::string ac = AC(copy(ac_value));
6623 std::string rs = GPR(copy(rs_value));
6624 std::string rt = GPR(copy(rt_value));
6626 return img::format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt);
6633 * 3 2 1
6634 * 10987654321098765432109876543210
6635 * 001000 x1110000101
6636 * rt -----
6637 * rs -----
6638 * rd -----
6640 std::string NMD::DPSQX_SA_W_PH(uint64 instruction)
6642 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6643 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6644 uint64 ac_value = extract_ac_15_14(instruction);
6646 std::string ac = AC(copy(ac_value));
6647 std::string rs = GPR(copy(rs_value));
6648 std::string rt = GPR(copy(rt_value));
6650 return img::format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6657 * 3 2 1
6658 * 10987654321098765432109876543210
6659 * 001000 x1110000101
6660 * rt -----
6661 * rs -----
6662 * rd -----
6664 std::string NMD::DPSQX_S_W_PH(uint64 instruction)
6666 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6667 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6668 uint64 ac_value = extract_ac_15_14(instruction);
6670 std::string ac = AC(copy(ac_value));
6671 std::string rs = GPR(copy(rs_value));
6672 std::string rt = GPR(copy(rt_value));
6674 return img::format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt);
6681 * 3 2 1
6682 * 10987654321098765432109876543210
6683 * 001000 x1110000101
6684 * rt -----
6685 * rs -----
6686 * rd -----
6688 std::string NMD::DPSU_H_QBL(uint64 instruction)
6690 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6691 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6692 uint64 ac_value = extract_ac_15_14(instruction);
6694 std::string ac = AC(copy(ac_value));
6695 std::string rs = GPR(copy(rs_value));
6696 std::string rt = GPR(copy(rt_value));
6698 return img::format("DPSU.H.QBL %s, %s, %s", ac, rs, rt);
6705 * 3 2 1
6706 * 10987654321098765432109876543210
6707 * 001000 x1110000101
6708 * rt -----
6709 * rs -----
6710 * rd -----
6712 std::string NMD::DPSU_H_QBR(uint64 instruction)
6714 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6715 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6716 uint64 ac_value = extract_ac_15_14(instruction);
6718 std::string ac = AC(copy(ac_value));
6719 std::string rs = GPR(copy(rs_value));
6720 std::string rt = GPR(copy(rt_value));
6722 return img::format("DPSU.H.QBR %s, %s, %s", ac, rs, rt);
6729 * 3 2 1
6730 * 10987654321098765432109876543210
6731 * 001000 x1110000101
6732 * rt -----
6733 * rs -----
6734 * rd -----
6736 std::string NMD::DPSX_W_PH(uint64 instruction)
6738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6739 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6740 uint64 ac_value = extract_ac_15_14(instruction);
6742 std::string ac = AC(copy(ac_value));
6743 std::string rs = GPR(copy(rs_value));
6744 std::string rt = GPR(copy(rt_value));
6746 return img::format("DPSX.W.PH %s, %s, %s", ac, rs, rt);
6751 * DROTR -
6753 * 3 2 1
6754 * 10987654321098765432109876543210
6755 * 001000 x1110000101
6756 * rt -----
6757 * rs -----
6758 * rd -----
6760 std::string NMD::DROTR(uint64 instruction)
6762 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6763 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6764 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6766 std::string rt = GPR(copy(rt_value));
6767 std::string rs = GPR(copy(rs_value));
6768 std::string shift = IMMEDIATE(copy(shift_value));
6770 return img::format("DROTR %s, %s, %s", rt, rs, shift);
6775 * DROTR[32] -
6777 * 3 2 1
6778 * 10987654321098765432109876543210
6779 * 10o000 1100xxx0110
6780 * rt -----
6781 * rs -----
6782 * shift -----
6784 std::string NMD::DROTR32(uint64 instruction)
6786 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6787 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6788 uint64 shift_value = extract_shift_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));
6794 return img::format("DROTR32 %s, %s, %s", rt, rs, shift);
6801 * 3 2 1
6802 * 10987654321098765432109876543210
6803 * 001000 x1110000101
6804 * rt -----
6805 * rs -----
6806 * rd -----
6808 std::string NMD::DROTRV(uint64 instruction)
6810 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6811 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6812 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6814 std::string rd = GPR(copy(rd_value));
6815 std::string rs = GPR(copy(rs_value));
6816 std::string rt = GPR(copy(rt_value));
6818 return img::format("DROTRV %s, %s, %s", rd, rs, rt);
6825 * 3 2 1
6826 * 10987654321098765432109876543210
6827 * 001000 x1110000101
6828 * rt -----
6829 * rs -----
6830 * rd -----
6832 std::string NMD::DROTX(uint64 instruction)
6834 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6835 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6836 uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction);
6837 uint64 shift_value = extract_shift_5_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));
6842 std::string shiftx = IMMEDIATE(copy(shiftx_value));
6844 return img::format("DROTX %s, %s, %s, %s", rt, rs, shift, shiftx);
6849 * DSLL -
6851 * 3 2 1
6852 * 10987654321098765432109876543210
6853 * 10o000 1100xxx0000
6854 * rt -----
6855 * rs -----
6856 * shift -----
6858 std::string NMD::DSLL(uint64 instruction)
6860 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6861 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6862 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6864 std::string rt = GPR(copy(rt_value));
6865 std::string rs = GPR(copy(rs_value));
6866 std::string shift = IMMEDIATE(copy(shift_value));
6868 return img::format("DSLL %s, %s, %s", rt, rs, shift);
6873 * DSLL[32] -
6875 * 3 2 1
6876 * 10987654321098765432109876543210
6877 * 10o000 1100xxx0000
6878 * rt -----
6879 * rs -----
6880 * shift -----
6882 std::string NMD::DSLL32(uint64 instruction)
6884 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6885 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6886 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6888 std::string rt = GPR(copy(rt_value));
6889 std::string rs = GPR(copy(rs_value));
6890 std::string shift = IMMEDIATE(copy(shift_value));
6892 return img::format("DSLL32 %s, %s, %s", rt, rs, shift);
6899 * 3 2 1
6900 * 10987654321098765432109876543210
6901 * 001000 x1110000101
6902 * rt -----
6903 * rs -----
6904 * rd -----
6906 std::string NMD::DSLLV(uint64 instruction)
6908 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6909 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6910 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6912 std::string rd = GPR(copy(rd_value));
6913 std::string rs = GPR(copy(rs_value));
6914 std::string rt = GPR(copy(rt_value));
6916 return img::format("DSLLV %s, %s, %s", rd, rs, rt);
6921 * DSRA -
6923 * 3 2 1
6924 * 10987654321098765432109876543210
6925 * 10o000 1100xxx0100
6926 * rt -----
6927 * rs -----
6928 * shift -----
6930 std::string NMD::DSRA(uint64 instruction)
6932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6933 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6934 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6936 std::string rt = GPR(copy(rt_value));
6937 std::string rs = GPR(copy(rs_value));
6938 std::string shift = IMMEDIATE(copy(shift_value));
6940 return img::format("DSRA %s, %s, %s", rt, rs, shift);
6945 * DSRA[32] -
6947 * 3 2 1
6948 * 10987654321098765432109876543210
6949 * 10o000 1100xxx0100
6950 * rt -----
6951 * rs -----
6952 * shift -----
6954 std::string NMD::DSRA32(uint64 instruction)
6956 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6957 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6958 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6960 std::string rt = GPR(copy(rt_value));
6961 std::string rs = GPR(copy(rs_value));
6962 std::string shift = IMMEDIATE(copy(shift_value));
6964 return img::format("DSRA32 %s, %s, %s", rt, rs, shift);
6971 * 3 2 1
6972 * 10987654321098765432109876543210
6973 * 001000 x1110000101
6974 * rt -----
6975 * rs -----
6976 * rd -----
6978 std::string NMD::DSRAV(uint64 instruction)
6980 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6981 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6982 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6984 std::string rd = GPR(copy(rd_value));
6985 std::string rs = GPR(copy(rs_value));
6986 std::string rt = GPR(copy(rt_value));
6988 return img::format("DSRAV %s, %s, %s", rd, rs, rt);
6993 * DSRL -
6995 * 3 2 1
6996 * 10987654321098765432109876543210
6997 * 10o000 1100xxx0100
6998 * rt -----
6999 * rs -----
7000 * shift -----
7002 std::string NMD::DSRL(uint64 instruction)
7004 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7005 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7006 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
7008 std::string rt = GPR(copy(rt_value));
7009 std::string rs = GPR(copy(rs_value));
7010 std::string shift = IMMEDIATE(copy(shift_value));
7012 return img::format("DSRL %s, %s, %s", rt, rs, shift);
7017 * DSRL[32] -
7019 * 3 2 1
7020 * 10987654321098765432109876543210
7021 * 10o000 1100xxx0010
7022 * rt -----
7023 * rs -----
7024 * shift -----
7026 std::string NMD::DSRL32(uint64 instruction)
7028 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7029 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7030 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
7032 std::string rt = GPR(copy(rt_value));
7033 std::string rs = GPR(copy(rs_value));
7034 std::string shift = IMMEDIATE(copy(shift_value));
7036 return img::format("DSRL32 %s, %s, %s", rt, rs, shift);
7043 * 3 2 1
7044 * 10987654321098765432109876543210
7045 * 001000 x1110000101
7046 * rt -----
7047 * rs -----
7048 * rd -----
7050 std::string NMD::DSRLV(uint64 instruction)
7052 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7053 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7054 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7056 std::string rd = GPR(copy(rd_value));
7057 std::string rs = GPR(copy(rs_value));
7058 std::string rt = GPR(copy(rt_value));
7060 return img::format("DSRLV %s, %s, %s", rd, rs, rt);
7067 * 3 2 1
7068 * 10987654321098765432109876543210
7069 * 001000 x1110000101
7070 * rt -----
7071 * rs -----
7072 * rd -----
7074 std::string NMD::DSUB(uint64 instruction)
7076 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7077 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7078 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7080 std::string rd = GPR(copy(rd_value));
7081 std::string rs = GPR(copy(rs_value));
7082 std::string rt = GPR(copy(rt_value));
7084 return img::format("DSUB %s, %s, %s", rd, rs, rt);
7091 * 3 2 1
7092 * 10987654321098765432109876543210
7093 * 001000 x1110000101
7094 * rt -----
7095 * rs -----
7096 * rd -----
7098 std::string NMD::DSUBU(uint64 instruction)
7100 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7101 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7102 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7104 std::string rd = GPR(copy(rd_value));
7105 std::string rs = GPR(copy(rs_value));
7106 std::string rt = GPR(copy(rt_value));
7108 return img::format("DSUBU %s, %s, %s", rd, rs, rt);
7115 * 3 2 1
7116 * 10987654321098765432109876543210
7117 * 001000 x1110000101
7118 * rt -----
7119 * rs -----
7120 * rd -----
7122 std::string NMD::DVPE(uint64 instruction)
7124 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7126 std::string rt = GPR(copy(rt_value));
7128 return img::format("DVPE %s", rt);
7135 * 3 2 1
7136 * 10987654321098765432109876543210
7137 * 001000 x1110000101
7138 * rt -----
7139 * rs -----
7140 * rd -----
7142 std::string NMD::DVP(uint64 instruction)
7144 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7146 std::string rt = GPR(copy(rt_value));
7148 return img::format("DVP %s", rt);
7155 * 3 2 1
7156 * 10987654321098765432109876543210
7157 * 001000 x1110000101
7158 * rt -----
7159 * rs -----
7160 * rd -----
7162 std::string NMD::EHB(uint64 instruction)
7164 (void)instruction;
7166 return "EHB ";
7173 * 3 2 1
7174 * 10987654321098765432109876543210
7175 * 001000 x1110000101
7176 * rt -----
7177 * rs -----
7178 * rd -----
7180 std::string NMD::EI(uint64 instruction)
7182 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7184 std::string rt = GPR(copy(rt_value));
7186 return img::format("EI %s", rt);
7193 * 3 2 1
7194 * 10987654321098765432109876543210
7195 * 001000 x1110000101
7196 * rt -----
7197 * rs -----
7198 * rd -----
7200 std::string NMD::EMT(uint64 instruction)
7202 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7204 std::string rt = GPR(copy(rt_value));
7206 return img::format("EMT %s", rt);
7213 * 3 2 1
7214 * 10987654321098765432109876543210
7215 * 001000 x1110000101
7216 * rt -----
7217 * rs -----
7218 * rd -----
7220 std::string NMD::ERET(uint64 instruction)
7222 (void)instruction;
7224 return "ERET ";
7231 * 3 2 1
7232 * 10987654321098765432109876543210
7233 * 001000 x1110000101
7234 * rt -----
7235 * rs -----
7236 * rd -----
7238 std::string NMD::ERETNC(uint64 instruction)
7240 (void)instruction;
7242 return "ERETNC ";
7249 * 3 2 1
7250 * 10987654321098765432109876543210
7251 * 001000 x1110000101
7252 * rt -----
7253 * rs -----
7254 * rd -----
7256 std::string NMD::EVP(uint64 instruction)
7258 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7260 std::string rt = GPR(copy(rt_value));
7262 return img::format("EVP %s", rt);
7269 * 3 2 1
7270 * 10987654321098765432109876543210
7271 * 001000 x1110000101
7272 * rt -----
7273 * rs -----
7274 * rd -----
7276 std::string NMD::EVPE(uint64 instruction)
7278 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7280 std::string rt = GPR(copy(rt_value));
7282 return img::format("EVPE %s", rt);
7289 * 3 2 1
7290 * 10987654321098765432109876543210
7291 * 001000 x1110000101
7292 * rt -----
7293 * rs -----
7294 * rd -----
7296 std::string NMD::EXT(uint64 instruction)
7298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7300 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7301 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7303 std::string rt = GPR(copy(rt_value));
7304 std::string rs = GPR(copy(rs_value));
7305 std::string lsb = IMMEDIATE(copy(lsb_value));
7306 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
7308 return img::format("EXT %s, %s, %s, %s", rt, rs, lsb, msbd);
7315 * 3 2 1
7316 * 10987654321098765432109876543210
7317 * 001000 x1110000101
7318 * rt -----
7319 * rs -----
7320 * rd -----
7322 std::string NMD::EXTD(uint64 instruction)
7324 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7325 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7326 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7327 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7329 std::string rd = GPR(copy(rd_value));
7330 std::string rs = GPR(copy(rs_value));
7331 std::string rt = GPR(copy(rt_value));
7332 std::string shift = IMMEDIATE(copy(shift_value));
7334 return img::format("EXTD %s, %s, %s, %s", rd, rs, rt, shift);
7341 * 3 2 1
7342 * 10987654321098765432109876543210
7343 * 001000 x1110000101
7344 * rt -----
7345 * rs -----
7346 * rd -----
7348 std::string NMD::EXTD32(uint64 instruction)
7350 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7351 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7352 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7353 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7355 std::string rd = GPR(copy(rd_value));
7356 std::string rs = GPR(copy(rs_value));
7357 std::string rt = GPR(copy(rt_value));
7358 std::string shift = IMMEDIATE(copy(shift_value));
7360 return img::format("EXTD32 %s, %s, %s, %s", rd, rs, rt, shift);
7367 * 3 2 1
7368 * 10987654321098765432109876543210
7369 * 001000 x1110000101
7370 * rt -----
7371 * rs -----
7372 * rd -----
7374 std::string NMD::EXTPDP(uint64 instruction)
7376 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7377 uint64 size_value = extract_size_20_19_18_17_16(instruction);
7378 uint64 ac_value = extract_ac_15_14(instruction);
7380 std::string rt = GPR(copy(rt_value));
7381 std::string ac = AC(copy(ac_value));
7382 std::string size = IMMEDIATE(copy(size_value));
7384 return img::format("EXTPDP %s, %s, %s", rt, ac, size);
7391 * 3 2 1
7392 * 10987654321098765432109876543210
7393 * 001000 x1110000101
7394 * rt -----
7395 * rs -----
7396 * rd -----
7398 std::string NMD::EXTPDPV(uint64 instruction)
7400 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7401 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7402 uint64 ac_value = extract_ac_15_14(instruction);
7404 std::string rt = GPR(copy(rt_value));
7405 std::string ac = AC(copy(ac_value));
7406 std::string rs = GPR(copy(rs_value));
7408 return img::format("EXTPDPV %s, %s, %s", rt, ac, rs);
7415 * 3 2 1
7416 * 10987654321098765432109876543210
7417 * 001000 x1110000101
7418 * rt -----
7419 * rs -----
7420 * rd -----
7422 std::string NMD::EXTP(uint64 instruction)
7424 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7425 uint64 size_value = extract_size_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 size = IMMEDIATE(copy(size_value));
7432 return img::format("EXTP %s, %s, %s", rt, ac, size);
7439 * 3 2 1
7440 * 10987654321098765432109876543210
7441 * 001000 x1110000101
7442 * rt -----
7443 * rs -----
7444 * rd -----
7446 std::string NMD::EXTPV(uint64 instruction)
7448 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7449 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7450 uint64 ac_value = extract_ac_15_14(instruction);
7452 std::string rt = GPR(copy(rt_value));
7453 std::string ac = AC(copy(ac_value));
7454 std::string rs = GPR(copy(rs_value));
7456 return img::format("EXTPV %s, %s, %s", rt, ac, rs);
7461 * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR
7462 * with right shift
7464 * 3 2 1
7465 * 10987654321098765432109876543210
7466 * 001000 10111001111111
7467 * rt -----
7468 * shift -----
7469 * ac --
7471 std::string NMD::EXTR_RS_W(uint64 instruction)
7473 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7474 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7475 uint64 ac_value = extract_ac_15_14(instruction);
7477 std::string rt = GPR(copy(rt_value));
7478 std::string ac = AC(copy(ac_value));
7479 std::string shift = IMMEDIATE(copy(shift_value));
7481 return img::format("EXTR_RS.W %s, %s, %s", rt, ac, shift);
7486 * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR
7487 * with right shift
7489 * 3 2 1
7490 * 10987654321098765432109876543210
7491 * 001000 01111001111111
7492 * rt -----
7493 * shift -----
7494 * ac --
7496 std::string NMD::EXTR_R_W(uint64 instruction)
7498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7499 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7500 uint64 ac_value = extract_ac_15_14(instruction);
7502 std::string rt = GPR(copy(rt_value));
7503 std::string ac = AC(copy(ac_value));
7504 std::string shift = IMMEDIATE(copy(shift_value));
7506 return img::format("EXTR_R.W %s, %s, %s", rt, ac, shift);
7511 * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator
7512 * to GPR with right shift and saturate
7514 * 3 2 1
7515 * 10987654321098765432109876543210
7516 * 001000 11111001111111
7517 * rt -----
7518 * shift -----
7519 * ac --
7521 std::string NMD::EXTR_S_H(uint64 instruction)
7523 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7524 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7525 uint64 ac_value = extract_ac_15_14(instruction);
7527 std::string rt = GPR(copy(rt_value));
7528 std::string ac = AC(copy(ac_value));
7529 std::string shift = IMMEDIATE(copy(shift_value));
7531 return img::format("EXTR_S.H %s, %s, %s", rt, ac, shift);
7536 * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR
7537 * with right shift
7539 * 3 2 1
7540 * 10987654321098765432109876543210
7541 * 001000 00111001111111
7542 * rt -----
7543 * shift -----
7544 * ac --
7546 std::string NMD::EXTR_W(uint64 instruction)
7548 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7549 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7550 uint64 ac_value = extract_ac_15_14(instruction);
7552 std::string rt = GPR(copy(rt_value));
7553 std::string ac = AC(copy(ac_value));
7554 std::string shift = IMMEDIATE(copy(shift_value));
7556 return img::format("EXTR.W %s, %s, %s", rt, ac, shift);
7561 * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable
7562 * right shift from accumulator to GPR
7564 * 3 2 1
7565 * 10987654321098765432109876543210
7566 * 001000 10111010111111
7567 * rt -----
7568 * rs -----
7569 * ac --
7571 std::string NMD::EXTRV_RS_W(uint64 instruction)
7573 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7574 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7575 uint64 ac_value = extract_ac_15_14(instruction);
7577 std::string rt = GPR(copy(rt_value));
7578 std::string ac = AC(copy(ac_value));
7579 std::string rs = GPR(copy(rs_value));
7581 return img::format("EXTRV_RS.W %s, %s, %s", rt, ac, rs);
7586 * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable
7587 * right shift from accumulator to GPR
7589 * 3 2 1
7590 * 10987654321098765432109876543210
7591 * 001000 01111010111111
7592 * rt -----
7593 * rs -----
7594 * ac --
7596 std::string NMD::EXTRV_R_W(uint64 instruction)
7598 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7599 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7600 uint64 ac_value = extract_ac_15_14(instruction);
7602 std::string rt = GPR(copy(rt_value));
7603 std::string ac = AC(copy(ac_value));
7604 std::string rs = GPR(copy(rs_value));
7606 return img::format("EXTRV_R.W %s, %s, %s", rt, ac, rs);
7611 * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from
7612 * accumulator to GPR with right shift and saturate
7614 * 3 2 1
7615 * 10987654321098765432109876543210
7616 * 001000 11111010111111
7617 * rt -----
7618 * rs -----
7619 * ac --
7621 std::string NMD::EXTRV_S_H(uint64 instruction)
7623 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7624 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7625 uint64 ac_value = extract_ac_15_14(instruction);
7627 std::string rt = GPR(copy(rt_value));
7628 std::string ac = AC(copy(ac_value));
7629 std::string rs = GPR(copy(rs_value));
7631 return img::format("EXTRV_S.H %s, %s, %s", rt, ac, rs);
7636 * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable
7637 * right shift from accumulator to GPR
7639 * 3 2 1
7640 * 10987654321098765432109876543210
7641 * 001000 00111010111111
7642 * rt -----
7643 * rs -----
7644 * ac --
7646 std::string NMD::EXTRV_W(uint64 instruction)
7648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7650 uint64 ac_value = extract_ac_15_14(instruction);
7652 std::string rt = GPR(copy(rt_value));
7653 std::string ac = AC(copy(ac_value));
7654 std::string rs = GPR(copy(rs_value));
7656 return img::format("EXTRV.W %s, %s, %s", rt, ac, rs);
7661 * EXTW - Extract Word
7663 * 3 2 1
7664 * 10987654321098765432109876543210
7665 * 001000 011111
7666 * rt -----
7667 * rs -----
7668 * rd -----
7669 * shift -----
7671 std::string NMD::EXTW(uint64 instruction)
7673 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7674 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7675 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7676 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7678 std::string rd = GPR(copy(rd_value));
7679 std::string rs = GPR(copy(rs_value));
7680 std::string rt = GPR(copy(rt_value));
7681 std::string shift = IMMEDIATE(copy(shift_value));
7683 return img::format("EXTW %s, %s, %s, %s", rd, rs, rt, shift);
7690 * 3 2 1
7691 * 10987654321098765432109876543210
7692 * 001000 x1110000101
7693 * rt -----
7694 * rs -----
7695 * rd -----
7697 std::string NMD::FLOOR_L_D(uint64 instruction)
7699 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7700 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7702 std::string ft = FPR(copy(ft_value));
7703 std::string fs = FPR(copy(fs_value));
7705 return img::format("FLOOR.L.D %s, %s", ft, fs);
7712 * 3 2 1
7713 * 10987654321098765432109876543210
7714 * 001000 x1110000101
7715 * rt -----
7716 * rs -----
7717 * rd -----
7719 std::string NMD::FLOOR_L_S(uint64 instruction)
7721 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7722 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7724 std::string ft = FPR(copy(ft_value));
7725 std::string fs = FPR(copy(fs_value));
7727 return img::format("FLOOR.L.S %s, %s", ft, fs);
7734 * 3 2 1
7735 * 10987654321098765432109876543210
7736 * 001000 x1110000101
7737 * rt -----
7738 * rs -----
7739 * rd -----
7741 std::string NMD::FLOOR_W_D(uint64 instruction)
7743 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7744 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7746 std::string ft = FPR(copy(ft_value));
7747 std::string fs = FPR(copy(fs_value));
7749 return img::format("FLOOR.W.D %s, %s", ft, fs);
7756 * 3 2 1
7757 * 10987654321098765432109876543210
7758 * 001000 x1110000101
7759 * rt -----
7760 * rs -----
7761 * rd -----
7763 std::string NMD::FLOOR_W_S(uint64 instruction)
7765 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7766 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7768 std::string ft = FPR(copy(ft_value));
7769 std::string fs = FPR(copy(fs_value));
7771 return img::format("FLOOR.W.S %s, %s", ft, fs);
7778 * 3 2 1
7779 * 10987654321098765432109876543210
7780 * 001000 x1110000101
7781 * rt -----
7782 * rs -----
7783 * rd -----
7785 std::string NMD::FORK(uint64 instruction)
7787 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7788 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7789 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7791 std::string rd = GPR(copy(rd_value));
7792 std::string rs = GPR(copy(rs_value));
7793 std::string rt = GPR(copy(rt_value));
7795 return img::format("FORK %s, %s, %s", rd, rs, rt);
7802 * 3 2 1
7803 * 10987654321098765432109876543210
7804 * 001000 x1110000101
7805 * rt -----
7806 * rs -----
7807 * rd -----
7809 std::string NMD::HYPCALL(uint64 instruction)
7811 uint64 code_value = extract_code_17_to_0(instruction);
7813 std::string code = IMMEDIATE(copy(code_value));
7815 return img::format("HYPCALL %s", code);
7822 * 3 2 1
7823 * 10987654321098765432109876543210
7824 * 001000 x1110000101
7825 * rt -----
7826 * rs -----
7827 * rd -----
7829 std::string NMD::HYPCALL_16_(uint64 instruction)
7831 uint64 code_value = extract_code_1_0(instruction);
7833 std::string code = IMMEDIATE(copy(code_value));
7835 return img::format("HYPCALL %s", code);
7842 * 3 2 1
7843 * 10987654321098765432109876543210
7844 * 001000 x1110000101
7845 * rt -----
7846 * rs -----
7847 * rd -----
7849 std::string NMD::INS(uint64 instruction)
7851 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7852 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7853 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7854 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7856 std::string rt = GPR(copy(rt_value));
7857 std::string rs = GPR(copy(rs_value));
7858 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
7859 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
7860 /* !!!!!!!!!! - no conversion function */
7862 return img::format("INS %s, %s, %s, %s", rt, rs, pos, size);
7863 /* hand edited */
7868 * [DSP] INSV rt, rs - Insert bit field variable
7870 * 3 2 1
7871 * 10987654321098765432109876543210
7872 * 001000 0100000100111111
7873 * rt -----
7874 * rs -----
7876 std::string NMD::INSV(uint64 instruction)
7878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7881 std::string rt = GPR(copy(rt_value));
7882 std::string rs = GPR(copy(rs_value));
7884 return img::format("INSV %s, %s", rt, rs);
7891 * 3 2 1
7892 * 10987654321098765432109876543210
7893 * 001000 x1110000101
7894 * rt -----
7895 * rs -----
7896 * rd -----
7898 std::string NMD::IRET(uint64 instruction)
7900 (void)instruction;
7902 return "IRET ";
7909 * 3 2 1
7910 * 10987654321098765432109876543210
7911 * 001000 x1110000101
7912 * rt -----
7913 * rs -----
7914 * rd -----
7916 std::string NMD::JALRC_16_(uint64 instruction)
7918 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7920 std::string rt = GPR(copy(rt_value));
7922 return img::format("JALRC $%d, %s", 31, rt);
7929 * 3 2 1
7930 * 10987654321098765432109876543210
7931 * 001000 x1110000101
7932 * rt -----
7933 * rs -----
7934 * rd -----
7936 std::string NMD::JALRC_32_(uint64 instruction)
7938 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7939 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7941 std::string rt = GPR(copy(rt_value));
7942 std::string rs = GPR(copy(rs_value));
7944 return img::format("JALRC %s, %s", rt, rs);
7951 * 3 2 1
7952 * 10987654321098765432109876543210
7953 * 001000 x1110000101
7954 * rt -----
7955 * rs -----
7956 * rd -----
7958 std::string NMD::JALRC_HB(uint64 instruction)
7960 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7961 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7963 std::string rt = GPR(copy(rt_value));
7964 std::string rs = GPR(copy(rs_value));
7966 return img::format("JALRC.HB %s, %s", rt, rs);
7973 * 3 2 1
7974 * 10987654321098765432109876543210
7975 * 001000 x1110000101
7976 * rt -----
7977 * rs -----
7978 * rd -----
7980 std::string NMD::JRC(uint64 instruction)
7982 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7984 std::string rt = GPR(copy(rt_value));
7986 return img::format("JRC %s", rt);
7993 * 3 2 1
7994 * 10987654321098765432109876543210
7995 * 001000 x1110000101
7996 * rt -----
7997 * rs -----
7998 * rd -----
8000 std::string NMD::LB_16_(uint64 instruction)
8002 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8003 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8004 uint64 u_value = extract_u_1_0(instruction);
8006 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8007 std::string u = IMMEDIATE(copy(u_value));
8008 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8010 return img::format("LB %s, %s(%s)", rt3, u, rs3);
8017 * 3 2 1
8018 * 10987654321098765432109876543210
8019 * 001000 x1110000101
8020 * rt -----
8021 * rs -----
8022 * rd -----
8024 std::string NMD::LB_GP_(uint64 instruction)
8026 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8027 uint64 u_value = extract_u_17_to_0(instruction);
8029 std::string rt = GPR(copy(rt_value));
8030 std::string u = IMMEDIATE(copy(u_value));
8032 return img::format("LB %s, %s($%d)", rt, u, 28);
8039 * 3 2 1
8040 * 10987654321098765432109876543210
8041 * 001000 x1110000101
8042 * rt -----
8043 * rs -----
8044 * rd -----
8046 std::string NMD::LB_S9_(uint64 instruction)
8048 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8049 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8050 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8052 std::string rt = GPR(copy(rt_value));
8053 std::string s = IMMEDIATE(copy(s_value));
8054 std::string rs = GPR(copy(rs_value));
8056 return img::format("LB %s, %s(%s)", rt, s, rs);
8063 * 3 2 1
8064 * 10987654321098765432109876543210
8065 * 001000 x1110000101
8066 * rt -----
8067 * rs -----
8068 * rd -----
8070 std::string NMD::LB_U12_(uint64 instruction)
8072 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8073 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8074 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8076 std::string rt = GPR(copy(rt_value));
8077 std::string u = IMMEDIATE(copy(u_value));
8078 std::string rs = GPR(copy(rs_value));
8080 return img::format("LB %s, %s(%s)", rt, u, rs);
8087 * 3 2 1
8088 * 10987654321098765432109876543210
8089 * 001000 x1110000101
8090 * rt -----
8091 * rs -----
8092 * rd -----
8094 std::string NMD::LBE(uint64 instruction)
8096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8098 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8100 std::string rt = GPR(copy(rt_value));
8101 std::string s = IMMEDIATE(copy(s_value));
8102 std::string rs = GPR(copy(rs_value));
8104 return img::format("LBE %s, %s(%s)", rt, s, rs);
8111 * 3 2 1
8112 * 10987654321098765432109876543210
8113 * 001000 x1110000101
8114 * rt -----
8115 * rs -----
8116 * rd -----
8118 std::string NMD::LBU_16_(uint64 instruction)
8120 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8121 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8122 uint64 u_value = extract_u_1_0(instruction);
8124 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8125 std::string u = IMMEDIATE(copy(u_value));
8126 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8128 return img::format("LBU %s, %s(%s)", rt3, u, rs3);
8135 * 3 2 1
8136 * 10987654321098765432109876543210
8137 * 001000 x1110000101
8138 * rt -----
8139 * rs -----
8140 * rd -----
8142 std::string NMD::LBU_GP_(uint64 instruction)
8144 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8145 uint64 u_value = extract_u_17_to_0(instruction);
8147 std::string rt = GPR(copy(rt_value));
8148 std::string u = IMMEDIATE(copy(u_value));
8150 return img::format("LBU %s, %s($%d)", rt, u, 28);
8157 * 3 2 1
8158 * 10987654321098765432109876543210
8159 * 001000 x1110000101
8160 * rt -----
8161 * rs -----
8162 * rd -----
8164 std::string NMD::LBU_S9_(uint64 instruction)
8166 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8167 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8168 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8170 std::string rt = GPR(copy(rt_value));
8171 std::string s = IMMEDIATE(copy(s_value));
8172 std::string rs = GPR(copy(rs_value));
8174 return img::format("LBU %s, %s(%s)", rt, s, rs);
8181 * 3 2 1
8182 * 10987654321098765432109876543210
8183 * 001000 x1110000101
8184 * rt -----
8185 * rs -----
8186 * rd -----
8188 std::string NMD::LBU_U12_(uint64 instruction)
8190 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8191 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8192 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8194 std::string rt = GPR(copy(rt_value));
8195 std::string u = IMMEDIATE(copy(u_value));
8196 std::string rs = GPR(copy(rs_value));
8198 return img::format("LBU %s, %s(%s)", rt, u, rs);
8205 * 3 2 1
8206 * 10987654321098765432109876543210
8207 * 001000 x1110000101
8208 * rt -----
8209 * rs -----
8210 * rd -----
8212 std::string NMD::LBUE(uint64 instruction)
8214 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8215 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8216 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8218 std::string rt = GPR(copy(rt_value));
8219 std::string s = IMMEDIATE(copy(s_value));
8220 std::string rs = GPR(copy(rs_value));
8222 return img::format("LBUE %s, %s(%s)", rt, s, rs);
8229 * 3 2 1
8230 * 10987654321098765432109876543210
8231 * 001000 x1110000101
8232 * rt -----
8233 * rs -----
8234 * rd -----
8236 std::string NMD::LBUX(uint64 instruction)
8238 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8239 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8240 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8242 std::string rd = GPR(copy(rd_value));
8243 std::string rs = GPR(copy(rs_value));
8244 std::string rt = GPR(copy(rt_value));
8246 return img::format("LBUX %s, %s(%s)", rd, rs, rt);
8253 * 3 2 1
8254 * 10987654321098765432109876543210
8255 * 001000 x1110000101
8256 * rt -----
8257 * rs -----
8258 * rd -----
8260 std::string NMD::LBX(uint64 instruction)
8262 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8263 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8264 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8266 std::string rd = GPR(copy(rd_value));
8267 std::string rs = GPR(copy(rs_value));
8268 std::string rt = GPR(copy(rt_value));
8270 return img::format("LBX %s, %s(%s)", rd, rs, rt);
8277 * 3 2 1
8278 * 10987654321098765432109876543210
8279 * 001000 x1110000101
8280 * rt -----
8281 * rs -----
8282 * rd -----
8284 std::string NMD::LD_GP_(uint64 instruction)
8286 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8287 uint64 u_value = extract_u_20_to_3__s3(instruction);
8289 std::string rt = GPR(copy(rt_value));
8290 std::string u = IMMEDIATE(copy(u_value));
8292 return img::format("LD %s, %s($%d)", rt, u, 28);
8299 * 3 2 1
8300 * 10987654321098765432109876543210
8301 * 001000 x1110000101
8302 * rt -----
8303 * rs -----
8304 * rd -----
8306 std::string NMD::LD_S9_(uint64 instruction)
8308 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8309 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8310 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8312 std::string rt = GPR(copy(rt_value));
8313 std::string s = IMMEDIATE(copy(s_value));
8314 std::string rs = GPR(copy(rs_value));
8316 return img::format("LD %s, %s(%s)", rt, s, rs);
8323 * 3 2 1
8324 * 10987654321098765432109876543210
8325 * 001000 x1110000101
8326 * rt -----
8327 * rs -----
8328 * rd -----
8330 std::string NMD::LD_U12_(uint64 instruction)
8332 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8333 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8334 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8336 std::string rt = GPR(copy(rt_value));
8337 std::string u = IMMEDIATE(copy(u_value));
8338 std::string rs = GPR(copy(rs_value));
8340 return img::format("LD %s, %s(%s)", rt, u, rs);
8347 * 3 2 1
8348 * 10987654321098765432109876543210
8349 * 001000 x1110000101
8350 * rt -----
8351 * rs -----
8352 * rd -----
8354 std::string NMD::LDC1_GP_(uint64 instruction)
8356 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8357 uint64 u_value = extract_u_17_to_2__s2(instruction);
8359 std::string ft = FPR(copy(ft_value));
8360 std::string u = IMMEDIATE(copy(u_value));
8362 return img::format("LDC1 %s, %s($%d)", ft, u, 28);
8369 * 3 2 1
8370 * 10987654321098765432109876543210
8371 * 001000 x1110000101
8372 * rt -----
8373 * rs -----
8374 * rd -----
8376 std::string NMD::LDC1_S9_(uint64 instruction)
8378 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8379 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8380 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8382 std::string ft = FPR(copy(ft_value));
8383 std::string s = IMMEDIATE(copy(s_value));
8384 std::string rs = GPR(copy(rs_value));
8386 return img::format("LDC1 %s, %s(%s)", ft, s, rs);
8393 * 3 2 1
8394 * 10987654321098765432109876543210
8395 * 001000 x1110000101
8396 * rt -----
8397 * rs -----
8398 * rd -----
8400 std::string NMD::LDC1_U12_(uint64 instruction)
8402 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8403 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8404 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8406 std::string ft = FPR(copy(ft_value));
8407 std::string u = IMMEDIATE(copy(u_value));
8408 std::string rs = GPR(copy(rs_value));
8410 return img::format("LDC1 %s, %s(%s)", ft, u, rs);
8417 * 3 2 1
8418 * 10987654321098765432109876543210
8419 * 001000 x1110000101
8420 * rt -----
8421 * rs -----
8422 * rd -----
8424 std::string NMD::LDC1XS(uint64 instruction)
8426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8427 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8428 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8430 std::string ft = FPR(copy(ft_value));
8431 std::string rs = GPR(copy(rs_value));
8432 std::string rt = GPR(copy(rt_value));
8434 return img::format("LDC1XS %s, %s(%s)", ft, rs, rt);
8441 * 3 2 1
8442 * 10987654321098765432109876543210
8443 * 001000 x1110000101
8444 * rt -----
8445 * rs -----
8446 * rd -----
8448 std::string NMD::LDC1X(uint64 instruction)
8450 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8451 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8452 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8454 std::string ft = FPR(copy(ft_value));
8455 std::string rs = GPR(copy(rs_value));
8456 std::string rt = GPR(copy(rt_value));
8458 return img::format("LDC1X %s, %s(%s)", ft, rs, rt);
8465 * 3 2 1
8466 * 10987654321098765432109876543210
8467 * 001000 x1110000101
8468 * rt -----
8469 * rs -----
8470 * rd -----
8472 std::string NMD::LDC2(uint64 instruction)
8474 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8475 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8476 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8478 std::string ct = CPR(copy(ct_value));
8479 std::string s = IMMEDIATE(copy(s_value));
8480 std::string rs = GPR(copy(rs_value));
8482 return img::format("LDC2 %s, %s(%s)", ct, s, rs);
8489 * 3 2 1
8490 * 10987654321098765432109876543210
8491 * 001000 x1110000101
8492 * rt -----
8493 * rs -----
8494 * rd -----
8496 std::string NMD::LDM(uint64 instruction)
8498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8499 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8500 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8501 uint64 count3_value = extract_count3_14_13_12(instruction);
8503 std::string rt = GPR(copy(rt_value));
8504 std::string s = IMMEDIATE(copy(s_value));
8505 std::string rs = GPR(copy(rs_value));
8506 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
8508 return img::format("LDM %s, %s(%s), %s", rt, s, rs, count3);
8515 * 3 2 1
8516 * 10987654321098765432109876543210
8517 * 001000 x1110000101
8518 * rt -----
8519 * rs -----
8520 * rd -----
8522 std::string NMD::LDPC_48_(uint64 instruction)
8524 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8525 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8527 std::string rt = GPR(copy(rt_value));
8528 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
8530 return img::format("LDPC %s, %s", rt, s);
8537 * 3 2 1
8538 * 10987654321098765432109876543210
8539 * 001000 x1110000101
8540 * rt -----
8541 * rs -----
8542 * rd -----
8544 std::string NMD::LDX(uint64 instruction)
8546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8548 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8550 std::string rd = GPR(copy(rd_value));
8551 std::string rs = GPR(copy(rs_value));
8552 std::string rt = GPR(copy(rt_value));
8554 return img::format("LDX %s, %s(%s)", rd, rs, rt);
8561 * 3 2 1
8562 * 10987654321098765432109876543210
8563 * 001000 x1110000101
8564 * rt -----
8565 * rs -----
8566 * rd -----
8568 std::string NMD::LDXS(uint64 instruction)
8570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8572 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8574 std::string rd = GPR(copy(rd_value));
8575 std::string rs = GPR(copy(rs_value));
8576 std::string rt = GPR(copy(rt_value));
8578 return img::format("LDXS %s, %s(%s)", rd, rs, rt);
8585 * 3 2 1
8586 * 10987654321098765432109876543210
8587 * 001000 x1110000101
8588 * rt -----
8589 * rs -----
8590 * rd -----
8592 std::string NMD::LH_16_(uint64 instruction)
8594 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8595 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8596 uint64 u_value = extract_u_2_1__s1(instruction);
8598 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8599 std::string u = IMMEDIATE(copy(u_value));
8600 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8602 return img::format("LH %s, %s(%s)", rt3, u, rs3);
8609 * 3 2 1
8610 * 10987654321098765432109876543210
8611 * 001000 x1110000101
8612 * rt -----
8613 * rs -----
8614 * rd -----
8616 std::string NMD::LH_GP_(uint64 instruction)
8618 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8619 uint64 u_value = extract_u_17_to_1__s1(instruction);
8621 std::string rt = GPR(copy(rt_value));
8622 std::string u = IMMEDIATE(copy(u_value));
8624 return img::format("LH %s, %s($%d)", rt, u, 28);
8631 * 3 2 1
8632 * 10987654321098765432109876543210
8633 * 001000 x1110000101
8634 * rt -----
8635 * rs -----
8636 * rd -----
8638 std::string NMD::LH_S9_(uint64 instruction)
8640 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8641 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8642 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8644 std::string rt = GPR(copy(rt_value));
8645 std::string s = IMMEDIATE(copy(s_value));
8646 std::string rs = GPR(copy(rs_value));
8648 return img::format("LH %s, %s(%s)", rt, s, rs);
8655 * 3 2 1
8656 * 10987654321098765432109876543210
8657 * 001000 x1110000101
8658 * rt -----
8659 * rs -----
8660 * rd -----
8662 std::string NMD::LH_U12_(uint64 instruction)
8664 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8665 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8666 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8668 std::string rt = GPR(copy(rt_value));
8669 std::string u = IMMEDIATE(copy(u_value));
8670 std::string rs = GPR(copy(rs_value));
8672 return img::format("LH %s, %s(%s)", rt, u, rs);
8679 * 3 2 1
8680 * 10987654321098765432109876543210
8681 * 001000 x1110000101
8682 * rt -----
8683 * rs -----
8684 * rd -----
8686 std::string NMD::LHE(uint64 instruction)
8688 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8689 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8690 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8692 std::string rt = GPR(copy(rt_value));
8693 std::string s = IMMEDIATE(copy(s_value));
8694 std::string rs = GPR(copy(rs_value));
8696 return img::format("LHE %s, %s(%s)", rt, s, rs);
8703 * 3 2 1
8704 * 10987654321098765432109876543210
8705 * 001000 x1110000101
8706 * rt -----
8707 * rs -----
8708 * rd -----
8710 std::string NMD::LHU_16_(uint64 instruction)
8712 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8713 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8714 uint64 u_value = extract_u_2_1__s1(instruction);
8716 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8717 std::string u = IMMEDIATE(copy(u_value));
8718 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8720 return img::format("LHU %s, %s(%s)", rt3, u, rs3);
8727 * 3 2 1
8728 * 10987654321098765432109876543210
8729 * 001000 x1110000101
8730 * rt -----
8731 * rs -----
8732 * rd -----
8734 std::string NMD::LHU_GP_(uint64 instruction)
8736 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8737 uint64 u_value = extract_u_17_to_1__s1(instruction);
8739 std::string rt = GPR(copy(rt_value));
8740 std::string u = IMMEDIATE(copy(u_value));
8742 return img::format("LHU %s, %s($%d)", rt, u, 28);
8749 * 3 2 1
8750 * 10987654321098765432109876543210
8751 * 001000 x1110000101
8752 * rt -----
8753 * rs -----
8754 * rd -----
8756 std::string NMD::LHU_S9_(uint64 instruction)
8758 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8759 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8760 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8762 std::string rt = GPR(copy(rt_value));
8763 std::string s = IMMEDIATE(copy(s_value));
8764 std::string rs = GPR(copy(rs_value));
8766 return img::format("LHU %s, %s(%s)", rt, s, rs);
8773 * 3 2 1
8774 * 10987654321098765432109876543210
8775 * 001000 x1110000101
8776 * rt -----
8777 * rs -----
8778 * rd -----
8780 std::string NMD::LHU_U12_(uint64 instruction)
8782 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8783 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8784 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8786 std::string rt = GPR(copy(rt_value));
8787 std::string u = IMMEDIATE(copy(u_value));
8788 std::string rs = GPR(copy(rs_value));
8790 return img::format("LHU %s, %s(%s)", rt, u, rs);
8797 * 3 2 1
8798 * 10987654321098765432109876543210
8799 * 001000 x1110000101
8800 * rt -----
8801 * rs -----
8802 * rd -----
8804 std::string NMD::LHUE(uint64 instruction)
8806 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8807 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8808 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8810 std::string rt = GPR(copy(rt_value));
8811 std::string s = IMMEDIATE(copy(s_value));
8812 std::string rs = GPR(copy(rs_value));
8814 return img::format("LHUE %s, %s(%s)", rt, s, rs);
8821 * 3 2 1
8822 * 10987654321098765432109876543210
8823 * 001000 x1110000101
8824 * rt -----
8825 * rs -----
8826 * rd -----
8828 std::string NMD::LHUX(uint64 instruction)
8830 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8831 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8832 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8834 std::string rd = GPR(copy(rd_value));
8835 std::string rs = GPR(copy(rs_value));
8836 std::string rt = GPR(copy(rt_value));
8838 return img::format("LHUX %s, %s(%s)", rd, rs, rt);
8845 * 3 2 1
8846 * 10987654321098765432109876543210
8847 * 001000 x1110000101
8848 * rt -----
8849 * rs -----
8850 * rd -----
8852 std::string NMD::LHUXS(uint64 instruction)
8854 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8855 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8856 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8858 std::string rd = GPR(copy(rd_value));
8859 std::string rs = GPR(copy(rs_value));
8860 std::string rt = GPR(copy(rt_value));
8862 return img::format("LHUXS %s, %s(%s)", rd, rs, rt);
8869 * 3 2 1
8870 * 10987654321098765432109876543210
8871 * 001000 x1110000101
8872 * rt -----
8873 * rs -----
8874 * rd -----
8876 std::string NMD::LHXS(uint64 instruction)
8878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8880 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8882 std::string rd = GPR(copy(rd_value));
8883 std::string rs = GPR(copy(rs_value));
8884 std::string rt = GPR(copy(rt_value));
8886 return img::format("LHXS %s, %s(%s)", rd, rs, rt);
8893 * 3 2 1
8894 * 10987654321098765432109876543210
8895 * 001000 x1110000101
8896 * rt -----
8897 * rs -----
8898 * rd -----
8900 std::string NMD::LHX(uint64 instruction)
8902 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8903 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8904 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8906 std::string rd = GPR(copy(rd_value));
8907 std::string rs = GPR(copy(rs_value));
8908 std::string rt = GPR(copy(rt_value));
8910 return img::format("LHX %s, %s(%s)", rd, rs, rt);
8917 * 3 2 1
8918 * 10987654321098765432109876543210
8919 * 001000 x1110000101
8920 * rt -----
8921 * rs -----
8922 * rd -----
8924 std::string NMD::LI_16_(uint64 instruction)
8926 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8927 uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);
8929 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8930 std::string eu = IMMEDIATE(encode_eu_from_s_li16(eu_value));
8932 return img::format("LI %s, %s", rt3, eu);
8939 * 3 2 1
8940 * 10987654321098765432109876543210
8941 * 001000 x1110000101
8942 * rt -----
8943 * rs -----
8944 * rd -----
8946 std::string NMD::LI_48_(uint64 instruction)
8948 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8949 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8951 std::string rt = GPR(copy(rt_value));
8952 std::string s = IMMEDIATE(copy(s_value));
8954 return img::format("LI %s, %s", rt, s);
8961 * 3 2 1
8962 * 10987654321098765432109876543210
8963 * 001000 x1110000101
8964 * rt -----
8965 * rs -----
8966 * rd -----
8968 std::string NMD::LL(uint64 instruction)
8970 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8971 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8972 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8974 std::string rt = GPR(copy(rt_value));
8975 std::string s = IMMEDIATE(copy(s_value));
8976 std::string rs = GPR(copy(rs_value));
8978 return img::format("LL %s, %s(%s)", rt, s, rs);
8985 * 3 2 1
8986 * 10987654321098765432109876543210
8987 * 001000 x1110000101
8988 * rt -----
8989 * rs -----
8990 * rd -----
8992 std::string NMD::LLD(uint64 instruction)
8994 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8995 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8996 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
8998 std::string rt = GPR(copy(rt_value));
8999 std::string s = IMMEDIATE(copy(s_value));
9000 std::string rs = GPR(copy(rs_value));
9002 return img::format("LLD %s, %s(%s)", rt, s, rs);
9009 * 3 2 1
9010 * 10987654321098765432109876543210
9011 * 001000 x1110000101
9012 * rt -----
9013 * rs -----
9014 * rd -----
9016 std::string NMD::LLDP(uint64 instruction)
9018 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9019 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9020 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9022 std::string rt = GPR(copy(rt_value));
9023 std::string ru = GPR(copy(ru_value));
9024 std::string rs = GPR(copy(rs_value));
9026 return img::format("LLDP %s, %s, (%s)", rt, ru, rs);
9033 * 3 2 1
9034 * 10987654321098765432109876543210
9035 * 001000 x1110000101
9036 * rt -----
9037 * rs -----
9038 * rd -----
9040 std::string NMD::LLE(uint64 instruction)
9042 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9043 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9044 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
9046 std::string rt = GPR(copy(rt_value));
9047 std::string s = IMMEDIATE(copy(s_value));
9048 std::string rs = GPR(copy(rs_value));
9050 return img::format("LLE %s, %s(%s)", rt, s, rs);
9057 * 3 2 1
9058 * 10987654321098765432109876543210
9059 * 001000 x1110000101
9060 * rt -----
9061 * rs -----
9062 * rd -----
9064 std::string NMD::LLWP(uint64 instruction)
9066 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9067 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9068 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9070 std::string rt = GPR(copy(rt_value));
9071 std::string ru = GPR(copy(ru_value));
9072 std::string rs = GPR(copy(rs_value));
9074 return img::format("LLWP %s, %s, (%s)", rt, ru, rs);
9081 * 3 2 1
9082 * 10987654321098765432109876543210
9083 * 001000 x1110000101
9084 * rt -----
9085 * rs -----
9086 * rd -----
9088 std::string NMD::LLWPE(uint64 instruction)
9090 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9091 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9092 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9094 std::string rt = GPR(copy(rt_value));
9095 std::string ru = GPR(copy(ru_value));
9096 std::string rs = GPR(copy(rs_value));
9098 return img::format("LLWPE %s, %s, (%s)", rt, ru, rs);
9105 * 3 2 1
9106 * 10987654321098765432109876543210
9107 * 001000 x1110000101
9108 * rt -----
9109 * rs -----
9110 * rd -----
9112 std::string NMD::LSA(uint64 instruction)
9114 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9115 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9116 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9117 uint64 u2_value = extract_u2_10_9(instruction);
9119 std::string rd = GPR(copy(rd_value));
9120 std::string rs = GPR(copy(rs_value));
9121 std::string rt = GPR(copy(rt_value));
9122 std::string u2 = IMMEDIATE(copy(u2_value));
9124 return img::format("LSA %s, %s, %s, %s", rd, rs, rt, u2);
9131 * 3 2 1
9132 * 10987654321098765432109876543210
9133 * 001000 x1110000101
9134 * rt -----
9135 * rs -----
9136 * rd -----
9138 std::string NMD::LUI(uint64 instruction)
9140 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9141 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
9143 std::string rt = GPR(copy(rt_value));
9144 std::string s = IMMEDIATE(copy(s_value));
9146 return img::format("LUI %s, %%hi(%s)", rt, s);
9153 * 3 2 1
9154 * 10987654321098765432109876543210
9155 * 001000 x1110000101
9156 * rt -----
9157 * rs -----
9158 * rd -----
9160 std::string NMD::LW_16_(uint64 instruction)
9162 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9163 uint64 rs3_value = extract_rs3_6_5_4(instruction);
9164 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
9166 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
9167 std::string u = IMMEDIATE(copy(u_value));
9168 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
9170 return img::format("LW %s, %s(%s)", rt3, u, rs3);
9177 * 3 2 1
9178 * 10987654321098765432109876543210
9179 * 001000 x1110000101
9180 * rt -----
9181 * rs -----
9182 * rd -----
9184 std::string NMD::LW_4X4_(uint64 instruction)
9186 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
9187 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
9188 uint64 u_value = extract_u_3_8__s2(instruction);
9190 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
9191 std::string u = IMMEDIATE(copy(u_value));
9192 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
9194 return img::format("LW %s, %s(%s)", rt4, u, rs4);
9201 * 3 2 1
9202 * 10987654321098765432109876543210
9203 * 001000 x1110000101
9204 * rt -----
9205 * rs -----
9206 * rd -----
9208 std::string NMD::LW_GP_(uint64 instruction)
9210 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9211 uint64 u_value = extract_u_20_to_2__s2(instruction);
9213 std::string rt = GPR(copy(rt_value));
9214 std::string u = IMMEDIATE(copy(u_value));
9216 return img::format("LW %s, %s($%d)", rt, u, 28);
9223 * 3 2 1
9224 * 10987654321098765432109876543210
9225 * 001000 x1110000101
9226 * rt -----
9227 * rs -----
9228 * rd -----
9230 std::string NMD::LW_GP16_(uint64 instruction)
9232 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9233 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
9235 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
9236 std::string u = IMMEDIATE(copy(u_value));
9238 return img::format("LW %s, %s($%d)", rt3, u, 28);
9245 * 3 2 1
9246 * 10987654321098765432109876543210
9247 * 001000 x1110000101
9248 * rt -----
9249 * rs -----
9250 * rd -----
9252 std::string NMD::LW_S9_(uint64 instruction)
9254 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9255 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9256 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9258 std::string rt = GPR(copy(rt_value));
9259 std::string s = IMMEDIATE(copy(s_value));
9260 std::string rs = GPR(copy(rs_value));
9262 return img::format("LW %s, %s(%s)", rt, s, rs);
9269 * 3 2 1
9270 * 10987654321098765432109876543210
9271 * 001000 x1110000101
9272 * rt -----
9273 * rs -----
9274 * rd -----
9276 std::string NMD::LW_SP_(uint64 instruction)
9278 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
9279 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
9281 std::string rt = GPR(copy(rt_value));
9282 std::string u = IMMEDIATE(copy(u_value));
9284 return img::format("LW %s, %s($%d)", rt, u, 29);
9291 * 3 2 1
9292 * 10987654321098765432109876543210
9293 * 001000 x1110000101
9294 * rt -----
9295 * rs -----
9296 * rd -----
9298 std::string NMD::LW_U12_(uint64 instruction)
9300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9301 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9302 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9304 std::string rt = GPR(copy(rt_value));
9305 std::string u = IMMEDIATE(copy(u_value));
9306 std::string rs = GPR(copy(rs_value));
9308 return img::format("LW %s, %s(%s)", rt, u, rs);
9315 * 3 2 1
9316 * 10987654321098765432109876543210
9317 * 001000 x1110000101
9318 * rt -----
9319 * rs -----
9320 * rd -----
9322 std::string NMD::LWC1_GP_(uint64 instruction)
9324 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9325 uint64 u_value = extract_u_17_to_2__s2(instruction);
9327 std::string ft = FPR(copy(ft_value));
9328 std::string u = IMMEDIATE(copy(u_value));
9330 return img::format("LWC1 %s, %s($%d)", ft, u, 28);
9337 * 3 2 1
9338 * 10987654321098765432109876543210
9339 * 001000 x1110000101
9340 * rt -----
9341 * rs -----
9342 * rd -----
9344 std::string NMD::LWC1_S9_(uint64 instruction)
9346 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9347 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9348 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9350 std::string ft = FPR(copy(ft_value));
9351 std::string s = IMMEDIATE(copy(s_value));
9352 std::string rs = GPR(copy(rs_value));
9354 return img::format("LWC1 %s, %s(%s)", ft, s, rs);
9361 * 3 2 1
9362 * 10987654321098765432109876543210
9363 * 001000 x1110000101
9364 * rt -----
9365 * rs -----
9366 * rd -----
9368 std::string NMD::LWC1_U12_(uint64 instruction)
9370 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9371 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9372 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9374 std::string ft = FPR(copy(ft_value));
9375 std::string u = IMMEDIATE(copy(u_value));
9376 std::string rs = GPR(copy(rs_value));
9378 return img::format("LWC1 %s, %s(%s)", ft, u, rs);
9385 * 3 2 1
9386 * 10987654321098765432109876543210
9387 * 001000 x1110000101
9388 * rt -----
9389 * rs -----
9390 * rd -----
9392 std::string NMD::LWC1X(uint64 instruction)
9394 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9395 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9396 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9398 std::string ft = FPR(copy(ft_value));
9399 std::string rs = GPR(copy(rs_value));
9400 std::string rt = GPR(copy(rt_value));
9402 return img::format("LWC1X %s, %s(%s)", ft, rs, rt);
9409 * 3 2 1
9410 * 10987654321098765432109876543210
9411 * 001000 x1110000101
9412 * rt -----
9413 * rs -----
9414 * rd -----
9416 std::string NMD::LWC1XS(uint64 instruction)
9418 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9419 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9420 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9422 std::string ft = FPR(copy(ft_value));
9423 std::string rs = GPR(copy(rs_value));
9424 std::string rt = GPR(copy(rt_value));
9426 return img::format("LWC1XS %s, %s(%s)", ft, rs, rt);
9433 * 3 2 1
9434 * 10987654321098765432109876543210
9435 * 001000 x1110000101
9436 * rt -----
9437 * rs -----
9438 * rd -----
9440 std::string NMD::LWC2(uint64 instruction)
9442 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
9443 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9444 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9446 std::string ct = CPR(copy(ct_value));
9447 std::string s = IMMEDIATE(copy(s_value));
9448 std::string rs = GPR(copy(rs_value));
9450 return img::format("LWC2 %s, %s(%s)", ct, s, rs);
9457 * 3 2 1
9458 * 10987654321098765432109876543210
9459 * 001000 x1110000101
9460 * rt -----
9461 * rs -----
9462 * rd -----
9464 std::string NMD::LWE(uint64 instruction)
9466 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9467 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9468 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9470 std::string rt = GPR(copy(rt_value));
9471 std::string s = IMMEDIATE(copy(s_value));
9472 std::string rs = GPR(copy(rs_value));
9474 return img::format("LWE %s, %s(%s)", rt, s, rs);
9481 * 3 2 1
9482 * 10987654321098765432109876543210
9483 * 001000 x1110000101
9484 * rt -----
9485 * rs -----
9486 * rd -----
9488 std::string NMD::LWM(uint64 instruction)
9490 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9491 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9492 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9493 uint64 count3_value = extract_count3_14_13_12(instruction);
9495 std::string rt = GPR(copy(rt_value));
9496 std::string s = IMMEDIATE(copy(s_value));
9497 std::string rs = GPR(copy(rs_value));
9498 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
9500 return img::format("LWM %s, %s(%s), %s", rt, s, rs, count3);
9507 * 3 2 1
9508 * 10987654321098765432109876543210
9509 * 001000 x1110000101
9510 * rt -----
9511 * rs -----
9512 * rd -----
9514 std::string NMD::LWPC_48_(uint64 instruction)
9516 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
9517 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
9519 std::string rt = GPR(copy(rt_value));
9520 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
9522 return img::format("LWPC %s, %s", rt, s);
9529 * 3 2 1
9530 * 10987654321098765432109876543210
9531 * 001000 x1110000101
9532 * rt -----
9533 * rs -----
9534 * rd -----
9536 std::string NMD::LWU_GP_(uint64 instruction)
9538 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9539 uint64 u_value = extract_u_17_to_2__s2(instruction);
9541 std::string rt = GPR(copy(rt_value));
9542 std::string u = IMMEDIATE(copy(u_value));
9544 return img::format("LWU %s, %s($%d)", rt, u, 28);
9551 * 3 2 1
9552 * 10987654321098765432109876543210
9553 * 001000 x1110000101
9554 * rt -----
9555 * rs -----
9556 * rd -----
9558 std::string NMD::LWU_S9_(uint64 instruction)
9560 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9561 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9562 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9564 std::string rt = GPR(copy(rt_value));
9565 std::string s = IMMEDIATE(copy(s_value));
9566 std::string rs = GPR(copy(rs_value));
9568 return img::format("LWU %s, %s(%s)", rt, s, rs);
9575 * 3 2 1
9576 * 10987654321098765432109876543210
9577 * 001000 x1110000101
9578 * rt -----
9579 * rs -----
9580 * rd -----
9582 std::string NMD::LWU_U12_(uint64 instruction)
9584 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9585 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9586 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9588 std::string rt = GPR(copy(rt_value));
9589 std::string u = IMMEDIATE(copy(u_value));
9590 std::string rs = GPR(copy(rs_value));
9592 return img::format("LWU %s, %s(%s)", rt, u, rs);
9599 * 3 2 1
9600 * 10987654321098765432109876543210
9601 * 001000 x1110000101
9602 * rt -----
9603 * rs -----
9604 * rd -----
9606 std::string NMD::LWUX(uint64 instruction)
9608 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9609 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9610 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9612 std::string rd = GPR(copy(rd_value));
9613 std::string rs = GPR(copy(rs_value));
9614 std::string rt = GPR(copy(rt_value));
9616 return img::format("LWUX %s, %s(%s)", rd, rs, rt);
9623 * 3 2 1
9624 * 10987654321098765432109876543210
9625 * 001000 x1110000101
9626 * rt -----
9627 * rs -----
9628 * rd -----
9630 std::string NMD::LWUXS(uint64 instruction)
9632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9633 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9634 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9636 std::string rd = GPR(copy(rd_value));
9637 std::string rs = GPR(copy(rs_value));
9638 std::string rt = GPR(copy(rt_value));
9640 return img::format("LWUXS %s, %s(%s)", rd, rs, rt);
9647 * 3 2 1
9648 * 10987654321098765432109876543210
9649 * 001000 x1110000101
9650 * rt -----
9651 * rs -----
9652 * rd -----
9654 std::string NMD::LWX(uint64 instruction)
9656 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9657 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9658 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9660 std::string rd = GPR(copy(rd_value));
9661 std::string rs = GPR(copy(rs_value));
9662 std::string rt = GPR(copy(rt_value));
9664 return img::format("LWX %s, %s(%s)", rd, rs, rt);
9671 * 3 2 1
9672 * 10987654321098765432109876543210
9673 * 001000 x1110000101
9674 * rt -----
9675 * rs -----
9676 * rd -----
9678 std::string NMD::LWXS_16_(uint64 instruction)
9680 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9681 uint64 rs3_value = extract_rs3_6_5_4(instruction);
9682 uint64 rd3_value = extract_rd3_3_2_1(instruction);
9684 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
9685 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
9686 std::string rt3 = IMMEDIATE(decode_gpr_gpr3(rt3_value));
9688 return img::format("LWXS %s, %s(%s)", rd3, rs3, rt3);
9695 * 3 2 1
9696 * 10987654321098765432109876543210
9697 * 001000 x1110000101
9698 * rt -----
9699 * rs -----
9700 * rd -----
9702 std::string NMD::LWXS_32_(uint64 instruction)
9704 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9705 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9706 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9708 std::string rd = GPR(copy(rd_value));
9709 std::string rs = GPR(copy(rs_value));
9710 std::string rt = GPR(copy(rt_value));
9712 return img::format("LWXS %s, %s(%s)", rd, rs, rt);
9717 * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified
9718 * accumulator
9720 * 3 2 1
9721 * 10987654321098765432109876543210
9722 * 001000 x1110000101
9723 * rt -----
9724 * rs -----
9725 * rd -----
9727 std::string NMD::MADD_DSP_(uint64 instruction)
9729 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9730 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9731 uint64 ac_value = extract_ac_15_14(instruction);
9733 std::string ac = AC(copy(ac_value));
9734 std::string rs = GPR(copy(rs_value));
9735 std::string rt = GPR(copy(rt_value));
9737 return img::format("MADD %s, %s, %s", ac, rs, rt);
9744 * 3 2 1
9745 * 10987654321098765432109876543210
9746 * 001000 x1110000101
9747 * rt -----
9748 * rs -----
9749 * rd -----
9751 std::string NMD::MADDF_D(uint64 instruction)
9753 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9754 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9755 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9757 std::string fd = FPR(copy(fd_value));
9758 std::string fs = FPR(copy(fs_value));
9759 std::string ft = FPR(copy(ft_value));
9761 return img::format("MADDF.D %s, %s, %s", fd, fs, ft);
9768 * 3 2 1
9769 * 10987654321098765432109876543210
9770 * 001000 x1110000101
9771 * rt -----
9772 * rs -----
9773 * rd -----
9775 std::string NMD::MADDF_S(uint64 instruction)
9777 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9778 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9779 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9781 std::string fd = FPR(copy(fd_value));
9782 std::string fs = FPR(copy(fs_value));
9783 std::string ft = FPR(copy(ft_value));
9785 return img::format("MADDF.S %s, %s, %s", fd, fs, ft);
9790 * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the
9791 * specified accumulator
9793 * 3 2 1
9794 * 10987654321098765432109876543210
9795 * 001000 x1110000101
9796 * rt -----
9797 * rs -----
9798 * rd -----
9800 std::string NMD::MADDU_DSP_(uint64 instruction)
9802 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9803 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9804 uint64 ac_value = extract_ac_15_14(instruction);
9806 std::string ac = AC(copy(ac_value));
9807 std::string rs = GPR(copy(rs_value));
9808 std::string rt = GPR(copy(rt_value));
9810 return img::format("MADDU %s, %s, %s", ac, rs, rt);
9815 * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector
9816 * fractional halfword elements with accumulation
9818 * 3 2 1
9819 * 10987654321098765432109876543210
9820 * 001000 x1110000101
9821 * rt -----
9822 * rs -----
9823 * rd -----
9825 std::string NMD::MAQ_S_W_PHL(uint64 instruction)
9827 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9828 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9829 uint64 ac_value = extract_ac_15_14(instruction);
9831 std::string ac = AC(copy(ac_value));
9832 std::string rs = GPR(copy(rs_value));
9833 std::string rt = GPR(copy(rt_value));
9835 return img::format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt);
9840 * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector
9841 * fractional halfword elements with accumulation
9843 * 3 2 1
9844 * 10987654321098765432109876543210
9845 * 001000 x1110000101
9846 * rt -----
9847 * rs -----
9848 * rd -----
9850 std::string NMD::MAQ_S_W_PHR(uint64 instruction)
9852 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9853 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9854 uint64 ac_value = extract_ac_15_14(instruction);
9856 std::string ac = AC(copy(ac_value));
9857 std::string rs = GPR(copy(rs_value));
9858 std::string rt = GPR(copy(rt_value));
9860 return img::format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt);
9865 * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector
9866 * fractional halfword elements with saturating accumulation
9868 * 3 2 1
9869 * 10987654321098765432109876543210
9870 * 001000 x1110000101
9871 * rt -----
9872 * rs -----
9873 * rd -----
9875 std::string NMD::MAQ_SA_W_PHL(uint64 instruction)
9877 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9878 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9879 uint64 ac_value = extract_ac_15_14(instruction);
9881 std::string ac = AC(copy(ac_value));
9882 std::string rs = GPR(copy(rs_value));
9883 std::string rt = GPR(copy(rt_value));
9885 return img::format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt);
9890 * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector
9891 * fractional halfword elements with saturating accumulation
9893 * 3 2 1
9894 * 10987654321098765432109876543210
9895 * 001000 x1110000101
9896 * rt -----
9897 * rs -----
9898 * rd -----
9900 std::string NMD::MAQ_SA_W_PHR(uint64 instruction)
9902 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9903 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9904 uint64 ac_value = extract_ac_15_14(instruction);
9906 std::string ac = AC(copy(ac_value));
9907 std::string rs = GPR(copy(rs_value));
9908 std::string rt = GPR(copy(rt_value));
9910 return img::format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt);
9917 * 3 2 1
9918 * 10987654321098765432109876543210
9919 * 001000 x1110000101
9920 * rt -----
9921 * rs -----
9922 * rd -----
9924 std::string NMD::MAX_D(uint64 instruction)
9926 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9927 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9928 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9930 std::string fd = FPR(copy(fd_value));
9931 std::string fs = FPR(copy(fs_value));
9932 std::string ft = FPR(copy(ft_value));
9934 return img::format("MAX.D %s, %s, %s", fd, fs, ft);
9941 * 3 2 1
9942 * 10987654321098765432109876543210
9943 * 001000 x1110000101
9944 * rt -----
9945 * rs -----
9946 * rd -----
9948 std::string NMD::MAX_S(uint64 instruction)
9950 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9951 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9952 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9954 std::string fd = FPR(copy(fd_value));
9955 std::string fs = FPR(copy(fs_value));
9956 std::string ft = FPR(copy(ft_value));
9958 return img::format("MAX.S %s, %s, %s", fd, fs, ft);
9965 * 3 2 1
9966 * 10987654321098765432109876543210
9967 * 001000 x1110000101
9968 * rt -----
9969 * rs -----
9970 * rd -----
9972 std::string NMD::MAXA_D(uint64 instruction)
9974 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9975 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9976 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9978 std::string fd = FPR(copy(fd_value));
9979 std::string fs = FPR(copy(fs_value));
9980 std::string ft = FPR(copy(ft_value));
9982 return img::format("MAXA.D %s, %s, %s", fd, fs, ft);
9989 * 3 2 1
9990 * 10987654321098765432109876543210
9991 * 001000 x1110000101
9992 * rt -----
9993 * rs -----
9994 * rd -----
9996 std::string NMD::MAXA_S(uint64 instruction)
9998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10002 std::string fd = FPR(copy(fd_value));
10003 std::string fs = FPR(copy(fs_value));
10004 std::string ft = FPR(copy(ft_value));
10006 return img::format("MAXA.S %s, %s, %s", fd, fs, ft);
10013 * 3 2 1
10014 * 10987654321098765432109876543210
10015 * 001000 x1110000101
10016 * rt -----
10017 * rs -----
10018 * rd -----
10020 std::string NMD::MFC0(uint64 instruction)
10022 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10023 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10024 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10026 std::string rt = GPR(copy(rt_value));
10027 std::string c0s = CPR(copy(c0s_value));
10028 std::string sel = IMMEDIATE(copy(sel_value));
10030 return img::format("MFC0 %s, %s, %s", rt, c0s, sel);
10037 * 3 2 1
10038 * 10987654321098765432109876543210
10039 * 001000 x1110000101
10040 * rt -----
10041 * rs -----
10042 * rd -----
10044 std::string NMD::MFC1(uint64 instruction)
10046 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10047 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10049 std::string rt = GPR(copy(rt_value));
10050 std::string fs = FPR(copy(fs_value));
10052 return img::format("MFC1 %s, %s", rt, fs);
10059 * 3 2 1
10060 * 10987654321098765432109876543210
10061 * 001000 x1110000101
10062 * rt -----
10063 * rs -----
10064 * rd -----
10066 std::string NMD::MFC2(uint64 instruction)
10068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10069 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10071 std::string rt = GPR(copy(rt_value));
10072 std::string cs = CPR(copy(cs_value));
10074 return img::format("MFC2 %s, %s", rt, cs);
10081 * 3 2 1
10082 * 10987654321098765432109876543210
10083 * 001000 x1110000101
10084 * rt -----
10085 * rs -----
10086 * rd -----
10088 std::string NMD::MFGC0(uint64 instruction)
10090 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10091 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10092 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10094 std::string rt = GPR(copy(rt_value));
10095 std::string c0s = CPR(copy(c0s_value));
10096 std::string sel = IMMEDIATE(copy(sel_value));
10098 return img::format("MFGC0 %s, %s, %s", rt, c0s, sel);
10105 * 3 2 1
10106 * 10987654321098765432109876543210
10107 * 001000 x1110000101
10108 * rt -----
10109 * rs -----
10110 * rd -----
10112 std::string NMD::MFHC0(uint64 instruction)
10114 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10115 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10116 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10118 std::string rt = GPR(copy(rt_value));
10119 std::string c0s = CPR(copy(c0s_value));
10120 std::string sel = IMMEDIATE(copy(sel_value));
10122 return img::format("MFHC0 %s, %s, %s", rt, c0s, sel);
10129 * 3 2 1
10130 * 10987654321098765432109876543210
10131 * 001000 x1110000101
10132 * rt -----
10133 * rs -----
10134 * rd -----
10136 std::string NMD::MFHC1(uint64 instruction)
10138 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10139 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10141 std::string rt = GPR(copy(rt_value));
10142 std::string fs = FPR(copy(fs_value));
10144 return img::format("MFHC1 %s, %s", rt, fs);
10151 * 3 2 1
10152 * 10987654321098765432109876543210
10153 * 001000 x1110000101
10154 * rt -----
10155 * rs -----
10156 * rd -----
10158 std::string NMD::MFHC2(uint64 instruction)
10160 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10161 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10163 std::string rt = GPR(copy(rt_value));
10164 std::string cs = CPR(copy(cs_value));
10166 return img::format("MFHC2 %s, %s", rt, cs);
10173 * 3 2 1
10174 * 10987654321098765432109876543210
10175 * 001000 x1110000101
10176 * rt -----
10177 * rs -----
10178 * rd -----
10180 std::string NMD::MFHGC0(uint64 instruction)
10182 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10183 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10184 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10186 std::string rt = GPR(copy(rt_value));
10187 std::string c0s = CPR(copy(c0s_value));
10188 std::string sel = IMMEDIATE(copy(sel_value));
10190 return img::format("MFHGC0 %s, %s, %s", rt, c0s, sel);
10195 * [DSP] MFHI rs, ac - Move from HI register
10197 * 3 2 1
10198 * 10987654321098765432109876543210
10199 * 001000 xxxxx 00000001111111
10200 * rt -----
10201 * ac --
10203 std::string NMD::MFHI_DSP_(uint64 instruction)
10205 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10206 uint64 ac_value = extract_ac_15_14(instruction);
10208 std::string rt = GPR(copy(rt_value));
10209 std::string ac = AC(copy(ac_value));
10211 return img::format("MFHI %s, %s", rt, ac);
10218 * 3 2 1
10219 * 10987654321098765432109876543210
10220 * 001000 x1110000101
10221 * rt -----
10222 * rs -----
10223 * rd -----
10225 std::string NMD::MFHTR(uint64 instruction)
10227 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10228 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10229 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10230 uint64 u_value = extract_u_10(instruction);
10232 std::string rt = GPR(copy(rt_value));
10233 std::string c0s = IMMEDIATE(copy(c0s_value));
10234 std::string u = IMMEDIATE(copy(u_value));
10235 std::string sel = IMMEDIATE(copy(sel_value));
10237 return img::format("MFHTR %s, %s, %s, %s", rt, c0s, u, sel);
10242 * [DSP] MFLO rs, ac - Move from HI register
10244 * 3 2 1
10245 * 10987654321098765432109876543210
10246 * 001000 xxxxx 01000001111111
10247 * rt -----
10248 * ac --
10250 std::string NMD::MFLO_DSP_(uint64 instruction)
10252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10253 uint64 ac_value = extract_ac_15_14(instruction);
10255 std::string rt = GPR(copy(rt_value));
10256 std::string ac = AC(copy(ac_value));
10258 return img::format("MFLO %s, %s", rt, ac);
10265 * 3 2 1
10266 * 10987654321098765432109876543210
10267 * 001000 x1110000101
10268 * rt -----
10269 * rs -----
10270 * rd -----
10272 std::string NMD::MFTR(uint64 instruction)
10274 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10275 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10276 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10277 uint64 u_value = extract_u_10(instruction);
10279 std::string rt = GPR(copy(rt_value));
10280 std::string c0s = IMMEDIATE(copy(c0s_value));
10281 std::string u = IMMEDIATE(copy(u_value));
10282 std::string sel = IMMEDIATE(copy(sel_value));
10284 return img::format("MFTR %s, %s, %s, %s", rt, c0s, u, sel);
10291 * 3 2 1
10292 * 10987654321098765432109876543210
10293 * 001000 x1110000101
10294 * rt -----
10295 * rs -----
10296 * rd -----
10298 std::string NMD::MIN_D(uint64 instruction)
10300 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10301 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10302 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10304 std::string fd = FPR(copy(fd_value));
10305 std::string fs = FPR(copy(fs_value));
10306 std::string ft = FPR(copy(ft_value));
10308 return img::format("MIN.D %s, %s, %s", fd, fs, ft);
10315 * 3 2 1
10316 * 10987654321098765432109876543210
10317 * 001000 x1110000101
10318 * rt -----
10319 * rs -----
10320 * rd -----
10322 std::string NMD::MIN_S(uint64 instruction)
10324 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10325 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10326 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10328 std::string fd = FPR(copy(fd_value));
10329 std::string fs = FPR(copy(fs_value));
10330 std::string ft = FPR(copy(ft_value));
10332 return img::format("MIN.S %s, %s, %s", fd, fs, ft);
10339 * 3 2 1
10340 * 10987654321098765432109876543210
10341 * 001000 x1110000101
10342 * rt -----
10343 * rs -----
10344 * rd -----
10346 std::string NMD::MINA_D(uint64 instruction)
10348 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10349 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10350 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10352 std::string fd = FPR(copy(fd_value));
10353 std::string fs = FPR(copy(fs_value));
10354 std::string ft = FPR(copy(ft_value));
10356 return img::format("MINA.D %s, %s, %s", fd, fs, ft);
10363 * 3 2 1
10364 * 10987654321098765432109876543210
10365 * 001000 x1110000101
10366 * rt -----
10367 * rs -----
10368 * rd -----
10370 std::string NMD::MINA_S(uint64 instruction)
10372 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10373 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10374 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10376 std::string fd = FPR(copy(fd_value));
10377 std::string fs = FPR(copy(fs_value));
10378 std::string ft = FPR(copy(ft_value));
10380 return img::format("MINA.S %s, %s, %s", fd, fs, ft);
10387 * 3 2 1
10388 * 10987654321098765432109876543210
10389 * 001000 x1110000101
10390 * rt -----
10391 * rs -----
10392 * rd -----
10394 std::string NMD::MOD(uint64 instruction)
10396 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10397 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10398 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10400 std::string rd = GPR(copy(rd_value));
10401 std::string rs = GPR(copy(rs_value));
10402 std::string rt = GPR(copy(rt_value));
10404 return img::format("MOD %s, %s, %s", rd, rs, rt);
10409 * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value
10411 * 3 2 1
10412 * 10987654321098765432109876543210
10413 * 001000 x1110000101
10414 * rt -----
10415 * rs -----
10416 * rd -----
10418 std::string NMD::MODSUB(uint64 instruction)
10420 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10421 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10422 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10424 std::string rd = GPR(copy(rd_value));
10425 std::string rs = GPR(copy(rs_value));
10426 std::string rt = GPR(copy(rt_value));
10428 return img::format("MODSUB %s, %s, %s", rd, rs, rt);
10435 * 3 2 1
10436 * 10987654321098765432109876543210
10437 * 001000 x1010010101
10438 * rt -----
10439 * rs -----
10440 * rd -----
10442 std::string NMD::MODU(uint64 instruction)
10444 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10445 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10446 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10448 std::string rd = GPR(copy(rd_value));
10449 std::string rs = GPR(copy(rs_value));
10450 std::string rt = GPR(copy(rt_value));
10452 return img::format("MODU %s, %s, %s", rd, rs, rt);
10459 * 3 2 1
10460 * 10987654321098765432109876543210
10461 * 001000 x1110000101
10462 * rt -----
10463 * rs -----
10464 * rd -----
10466 std::string NMD::MOV_D(uint64 instruction)
10468 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10469 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10471 std::string ft = FPR(copy(ft_value));
10472 std::string fs = FPR(copy(fs_value));
10474 return img::format("MOV.D %s, %s", ft, fs);
10481 * 3 2 1
10482 * 10987654321098765432109876543210
10483 * 001000 x1110000101
10484 * rt -----
10485 * rs -----
10486 * rd -----
10488 std::string NMD::MOV_S(uint64 instruction)
10490 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10491 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10493 std::string ft = FPR(copy(ft_value));
10494 std::string fs = FPR(copy(fs_value));
10496 return img::format("MOV.S %s, %s", ft, fs);
10503 * 3 2 1
10504 * 10987654321098765432109876543210
10505 * 001000 x1110000101
10506 * rt -----
10507 * rs -----
10508 * rd -----
10510 std::string NMD::MOVE_BALC(uint64 instruction)
10512 uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
10513 uint64 rd1_value = extract_rdl_25_24(instruction);
10514 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
10516 std::string rd1 = GPR(decode_gpr_gpr1(rd1_value));
10517 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
10518 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
10520 return img::format("MOVE.BALC %s, %s, %s", rd1, rtz4, s);
10527 * 3 2 1
10528 * 10987654321098765432109876543210
10529 * 001000 x1110000101
10530 * rt -----
10531 * rs -----
10532 * rd -----
10534 std::string NMD::MOVEP(uint64 instruction)
10536 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
10537 uint64 rd2_value = extract_rd2_3_8(instruction);
10538 uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);
10540 std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
10541 std::string re2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
10542 /* !!!!!!!!!! - no conversion function */
10543 std::string rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value));
10544 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
10546 return img::format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4);
10547 /* hand edited */
10554 * 3 2 1
10555 * 10987654321098765432109876543210
10556 * 001000 x1110000101
10557 * rt -----
10558 * rs -----
10559 * rd -----
10561 std::string NMD::MOVEP_REV_(uint64 instruction)
10563 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10564 uint64 rd2_value = extract_rd2_3_8(instruction);
10565 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10567 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
10568 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
10569 std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
10570 std::string rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
10571 /* !!!!!!!!!! - no conversion function */
10573 return img::format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2);
10574 /* hand edited */
10579 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10581 * 3 2 1
10582 * 10987654321098765432109876543210
10583 * 001000 00010001101
10584 * rt -----
10585 * rs -----
10586 * rd -----
10588 std::string NMD::MOVE(uint64 instruction)
10590 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
10591 uint64 rs_value = extract_rs_4_3_2_1_0(instruction);
10593 std::string rt = GPR(copy(rt_value));
10594 std::string rs = GPR(copy(rs_value));
10596 return img::format("MOVE %s, %s", rt, rs);
10601 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10603 * 3 2 1
10604 * 10987654321098765432109876543210
10605 * 001000 00010001101
10606 * rt -----
10607 * rs -----
10608 * rd -----
10610 std::string NMD::MOVN(uint64 instruction)
10612 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10613 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10614 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10616 std::string rd = GPR(copy(rd_value));
10617 std::string rs = GPR(copy(rs_value));
10618 std::string rt = GPR(copy(rt_value));
10620 return img::format("MOVN %s, %s, %s", rd, rs, rt);
10625 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10627 * 3 2 1
10628 * 10987654321098765432109876543210
10629 * 001000 00010001101
10630 * rt -----
10631 * rs -----
10632 * rd -----
10634 std::string NMD::MOVZ(uint64 instruction)
10636 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10637 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10638 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10640 std::string rd = GPR(copy(rd_value));
10641 std::string rs = GPR(copy(rs_value));
10642 std::string rt = GPR(copy(rt_value));
10644 return img::format("MOVZ %s, %s, %s", rd, rs, rt);
10649 * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator
10651 * 3 2 1
10652 * 10987654321098765432109876543210
10653 * 001000 10101010111111
10654 * rt -----
10655 * rs -----
10656 * ac --
10658 std::string NMD::MSUB_DSP_(uint64 instruction)
10660 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10661 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10662 uint64 ac_value = extract_ac_15_14(instruction);
10664 std::string ac = AC(copy(ac_value));
10665 std::string rs = GPR(copy(rs_value));
10666 std::string rt = GPR(copy(rt_value));
10668 return img::format("MSUB %s, %s, %s", ac, rs, rt);
10673 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10675 * 3 2 1
10676 * 10987654321098765432109876543210
10677 * 001000 00010001101
10678 * rt -----
10679 * rs -----
10680 * rd -----
10682 std::string NMD::MSUBF_D(uint64 instruction)
10684 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10685 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10686 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10688 std::string fd = FPR(copy(fd_value));
10689 std::string fs = FPR(copy(fs_value));
10690 std::string ft = FPR(copy(ft_value));
10692 return img::format("MSUBF.D %s, %s, %s", fd, fs, ft);
10697 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10699 * 3 2 1
10700 * 10987654321098765432109876543210
10701 * 001000 00010001101
10702 * rt -----
10703 * rs -----
10704 * rd -----
10706 std::string NMD::MSUBF_S(uint64 instruction)
10708 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10709 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10710 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10712 std::string fd = FPR(copy(fd_value));
10713 std::string fs = FPR(copy(fs_value));
10714 std::string ft = FPR(copy(ft_value));
10716 return img::format("MSUBF.S %s, %s, %s", fd, fs, ft);
10721 * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator
10723 * 3 2 1
10724 * 10987654321098765432109876543210
10725 * 001000 11101010111111
10726 * rt -----
10727 * rs -----
10728 * ac --
10730 std::string NMD::MSUBU_DSP_(uint64 instruction)
10732 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10733 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10734 uint64 ac_value = extract_ac_15_14(instruction);
10736 std::string ac = AC(copy(ac_value));
10737 std::string rs = GPR(copy(rs_value));
10738 std::string rt = GPR(copy(rt_value));
10740 return img::format("MSUBU %s, %s, %s", ac, rs, rt);
10745 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10747 * 3 2 1
10748 * 10987654321098765432109876543210
10749 * 001000 00010001101
10750 * rt -----
10751 * rs -----
10752 * rd -----
10754 std::string NMD::MTC0(uint64 instruction)
10756 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10757 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10758 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10760 std::string rt = GPR(copy(rt_value));
10761 std::string c0s = CPR(copy(c0s_value));
10762 std::string sel = IMMEDIATE(copy(sel_value));
10764 return img::format("MTC0 %s, %s, %s", rt, c0s, sel);
10769 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10771 * 3 2 1
10772 * 10987654321098765432109876543210
10773 * 001000 00010001101
10774 * rt -----
10775 * rs -----
10776 * rd -----
10778 std::string NMD::MTC1(uint64 instruction)
10780 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10781 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10783 std::string rt = GPR(copy(rt_value));
10784 std::string fs = FPR(copy(fs_value));
10786 return img::format("MTC1 %s, %s", rt, fs);
10791 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10793 * 3 2 1
10794 * 10987654321098765432109876543210
10795 * 001000 00010001101
10796 * rt -----
10797 * rs -----
10798 * rd -----
10800 std::string NMD::MTC2(uint64 instruction)
10802 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10803 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10805 std::string rt = GPR(copy(rt_value));
10806 std::string cs = CPR(copy(cs_value));
10808 return img::format("MTC2 %s, %s", rt, cs);
10813 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10815 * 3 2 1
10816 * 10987654321098765432109876543210
10817 * 001000 00010001101
10818 * rt -----
10819 * rs -----
10820 * rd -----
10822 std::string NMD::MTGC0(uint64 instruction)
10824 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10825 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10826 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10828 std::string rt = GPR(copy(rt_value));
10829 std::string c0s = CPR(copy(c0s_value));
10830 std::string sel = IMMEDIATE(copy(sel_value));
10832 return img::format("MTGC0 %s, %s, %s", rt, c0s, sel);
10837 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10839 * 3 2 1
10840 * 10987654321098765432109876543210
10841 * 001000 00010001101
10842 * rt -----
10843 * rs -----
10844 * rd -----
10846 std::string NMD::MTHC0(uint64 instruction)
10848 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10849 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10850 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10852 std::string rt = GPR(copy(rt_value));
10853 std::string c0s = CPR(copy(c0s_value));
10854 std::string sel = IMMEDIATE(copy(sel_value));
10856 return img::format("MTHC0 %s, %s, %s", rt, c0s, sel);
10861 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10863 * 3 2 1
10864 * 10987654321098765432109876543210
10865 * 001000 00010001101
10866 * rt -----
10867 * rs -----
10868 * rd -----
10870 std::string NMD::MTHC1(uint64 instruction)
10872 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10873 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10875 std::string rt = GPR(copy(rt_value));
10876 std::string fs = FPR(copy(fs_value));
10878 return img::format("MTHC1 %s, %s", rt, fs);
10883 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10885 * 3 2 1
10886 * 10987654321098765432109876543210
10887 * 001000 00010001101
10888 * rt -----
10889 * rs -----
10890 * rd -----
10892 std::string NMD::MTHC2(uint64 instruction)
10894 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10895 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10897 std::string rt = GPR(copy(rt_value));
10898 std::string cs = CPR(copy(cs_value));
10900 return img::format("MTHC2 %s, %s", rt, cs);
10905 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10907 * 3 2 1
10908 * 10987654321098765432109876543210
10909 * 001000 00010001101
10910 * rt -----
10911 * rs -----
10912 * rd -----
10914 std::string NMD::MTHGC0(uint64 instruction)
10916 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10917 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10918 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10920 std::string rt = GPR(copy(rt_value));
10921 std::string c0s = CPR(copy(c0s_value));
10922 std::string sel = IMMEDIATE(copy(sel_value));
10924 return img::format("MTHGC0 %s, %s, %s", rt, c0s, sel);
10929 * [DSP] MTHI rs, ac - Move to HI register
10931 * 3 2 1
10932 * 10987654321098765432109876543210
10933 * 001000xxxxx 10000001111111
10934 * rs -----
10935 * ac --
10937 std::string NMD::MTHI_DSP_(uint64 instruction)
10939 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10940 uint64 ac_value = extract_ac_15_14(instruction);
10942 std::string rs = GPR(copy(rs_value));
10943 std::string ac = AC(copy(ac_value));
10945 return img::format("MTHI %s, %s", rs, ac);
10950 * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32
10952 * 3 2 1
10953 * 10987654321098765432109876543210
10954 * 001000xxxxx 00001001111111
10955 * rs -----
10956 * ac --
10958 std::string NMD::MTHLIP(uint64 instruction)
10960 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10961 uint64 ac_value = extract_ac_15_14(instruction);
10963 std::string rs = GPR(copy(rs_value));
10964 std::string ac = AC(copy(ac_value));
10966 return img::format("MTHLIP %s, %s", rs, ac);
10971 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10973 * 3 2 1
10974 * 10987654321098765432109876543210
10975 * 001000 00010001101
10976 * rt -----
10977 * rs -----
10978 * rd -----
10980 std::string NMD::MTHTR(uint64 instruction)
10982 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10983 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10984 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10985 uint64 u_value = extract_u_10(instruction);
10987 std::string rt = GPR(copy(rt_value));
10988 std::string c0s = IMMEDIATE(copy(c0s_value));
10989 std::string u = IMMEDIATE(copy(u_value));
10990 std::string sel = IMMEDIATE(copy(sel_value));
10992 return img::format("MTHTR %s, %s, %s, %s", rt, c0s, u, sel);
10997 * [DSP] MTLO rs, ac - Move to LO register
10999 * 3 2 1
11000 * 10987654321098765432109876543210
11001 * 001000xxxxx 11000001111111
11002 * rs -----
11003 * ac --
11005 std::string NMD::MTLO_DSP_(uint64 instruction)
11007 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11008 uint64 ac_value = extract_ac_15_14(instruction);
11010 std::string rs = GPR(copy(rs_value));
11011 std::string ac = AC(copy(ac_value));
11013 return img::format("MTLO %s, %s", rs, ac);
11018 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11020 * 3 2 1
11021 * 10987654321098765432109876543210
11022 * 001000 00010001101
11023 * rt -----
11024 * rs -----
11025 * rd -----
11027 std::string NMD::MTTR(uint64 instruction)
11029 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11030 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
11031 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
11032 uint64 u_value = extract_u_10(instruction);
11034 std::string rt = GPR(copy(rt_value));
11035 std::string c0s = IMMEDIATE(copy(c0s_value));
11036 std::string u = IMMEDIATE(copy(u_value));
11037 std::string sel = IMMEDIATE(copy(sel_value));
11039 return img::format("MTTR %s, %s, %s, %s", rt, c0s, u, sel);
11044 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11046 * 3 2 1
11047 * 10987654321098765432109876543210
11048 * 001000 00010001101
11049 * rt -----
11050 * rs -----
11051 * rd -----
11053 std::string NMD::MUH(uint64 instruction)
11055 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11056 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11057 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11059 std::string rd = GPR(copy(rd_value));
11060 std::string rs = GPR(copy(rs_value));
11061 std::string rt = GPR(copy(rt_value));
11063 return img::format("MUH %s, %s, %s", rd, rs, rt);
11068 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11070 * 3 2 1
11071 * 10987654321098765432109876543210
11072 * 001000 00010001101
11073 * rt -----
11074 * rs -----
11075 * rd -----
11077 std::string NMD::MUHU(uint64 instruction)
11079 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11080 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11081 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11083 std::string rd = GPR(copy(rd_value));
11084 std::string rs = GPR(copy(rs_value));
11085 std::string rt = GPR(copy(rt_value));
11087 return img::format("MUHU %s, %s, %s", rd, rs, rt);
11092 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11094 * 3 2 1
11095 * 10987654321098765432109876543210
11096 * 001000 00010001101
11097 * rt -----
11098 * rs -----
11099 * rd -----
11101 std::string NMD::MUL_32_(uint64 instruction)
11103 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11104 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11105 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11107 std::string rd = GPR(copy(rd_value));
11108 std::string rs = GPR(copy(rs_value));
11109 std::string rt = GPR(copy(rt_value));
11111 return img::format("MUL %s, %s, %s", rd, rs, rt);
11116 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11118 * 3 2 1
11119 * 10987654321098765432109876543210
11120 * 001000 00010001101
11121 * rt -----
11122 * rs -----
11123 * rd -----
11125 std::string NMD::MUL_4X4_(uint64 instruction)
11127 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
11128 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
11130 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
11131 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
11133 return img::format("MUL %s, %s", rs4, rt4);
11138 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11140 * 3 2 1
11141 * 10987654321098765432109876543210
11142 * 001000 00010001101
11143 * rt -----
11144 * rs -----
11145 * rd -----
11147 std::string NMD::MUL_D(uint64 instruction)
11149 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11150 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11151 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
11153 std::string fd = FPR(copy(fd_value));
11154 std::string fs = FPR(copy(fs_value));
11155 std::string ft = FPR(copy(ft_value));
11157 return img::format("MUL.D %s, %s, %s", fd, fs, ft);
11162 * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size
11163 * products
11165 * 3 2 1
11166 * 10987654321098765432109876543210
11167 * 001000 00000101101
11168 * rt -----
11169 * rs -----
11170 * rd -----
11172 std::string NMD::MUL_PH(uint64 instruction)
11174 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11175 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11176 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11178 std::string rd = GPR(copy(rd_value));
11179 std::string rs = GPR(copy(rs_value));
11180 std::string rt = GPR(copy(rt_value));
11182 return img::format("MUL.PH %s, %s, %s", rd, rs, rt);
11187 * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size
11188 * products (saturated)
11190 * 3 2 1
11191 * 10987654321098765432109876543210
11192 * 001000 10000101101
11193 * rt -----
11194 * rs -----
11195 * rd -----
11197 std::string NMD::MUL_S_PH(uint64 instruction)
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("MUL_S.PH %s, %s, %s", rd, rs, rt);
11212 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11214 * 3 2 1
11215 * 10987654321098765432109876543210
11216 * 001000 00010001101
11217 * rt -----
11218 * rs -----
11219 * rd -----
11221 std::string NMD::MUL_S(uint64 instruction)
11223 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11224 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11225 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
11227 std::string fd = FPR(copy(fd_value));
11228 std::string fs = FPR(copy(fs_value));
11229 std::string ft = FPR(copy(ft_value));
11231 return img::format("MUL.S %s, %s, %s", fd, fs, ft);
11236 * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords
11237 * to expanded width products
11239 * 3 2 1
11240 * 10987654321098765432109876543210
11241 * 001000 x0000100101
11242 * rt -----
11243 * rs -----
11244 * rd -----
11246 std::string NMD::MULEQ_S_W_PHL(uint64 instruction)
11248 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11249 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11250 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11252 std::string rd = GPR(copy(rd_value));
11253 std::string rs = GPR(copy(rs_value));
11254 std::string rt = GPR(copy(rt_value));
11256 return img::format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt);
11261 * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords
11262 * to expanded width products
11264 * 3 2 1
11265 * 10987654321098765432109876543210
11266 * 001000 x0001100101
11267 * rt -----
11268 * rs -----
11269 * rd -----
11271 std::string NMD::MULEQ_S_W_PHR(uint64 instruction)
11273 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11274 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11275 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11277 std::string rd = GPR(copy(rd_value));
11278 std::string rs = GPR(copy(rs_value));
11279 std::string rt = GPR(copy(rt_value));
11281 return img::format("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt);
11286 * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes
11287 * by halfwords to halfword products
11289 * 3 2 1
11290 * 10987654321098765432109876543210
11291 * 001000 x0010010101
11292 * rt -----
11293 * rs -----
11294 * rd -----
11296 std::string NMD::MULEU_S_PH_QBL(uint64 instruction)
11298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11300 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11302 std::string rd = GPR(copy(rd_value));
11303 std::string rs = GPR(copy(rs_value));
11304 std::string rt = GPR(copy(rt_value));
11306 return img::format("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt);
11311 * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes
11312 * by halfwords to halfword products
11314 * 3 2 1
11315 * 10987654321098765432109876543210
11316 * 001000 x0011010101
11317 * rt -----
11318 * rs -----
11319 * rd -----
11321 std::string NMD::MULEU_S_PH_QBR(uint64 instruction)
11323 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11324 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11325 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11327 std::string rd = GPR(copy(rd_value));
11328 std::string rs = GPR(copy(rs_value));
11329 std::string rt = GPR(copy(rt_value));
11331 return img::format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt);
11336 * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords
11337 * to fractional halfword products
11339 * 3 2 1
11340 * 10987654321098765432109876543210
11341 * 001000 x0100010101
11342 * rt -----
11343 * rs -----
11344 * rd -----
11346 std::string NMD::MULQ_RS_PH(uint64 instruction)
11348 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11349 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11350 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11352 std::string rd = GPR(copy(rd_value));
11353 std::string rs = GPR(copy(rs_value));
11354 std::string rt = GPR(copy(rt_value));
11356 return img::format("MULQ_RS.PH %s, %s, %s", rd, rs, rt);
11361 * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size
11362 * product with saturation and rounding
11364 * 3 2 1
11365 * 10987654321098765432109876543210
11366 * 001000 x0110010101
11367 * rt -----
11368 * rs -----
11369 * rd -----
11371 std::string NMD::MULQ_RS_W(uint64 instruction)
11373 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11374 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11375 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11377 std::string rd = GPR(copy(rd_value));
11378 std::string rs = GPR(copy(rs_value));
11379 std::string rt = GPR(copy(rt_value));
11381 return img::format("MULQ_RS.W %s, %s, %s", rd, rs, rt);
11386 * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size
11387 * products
11389 * 3 2 1
11390 * 10987654321098765432109876543210
11391 * 001000 x0101010101
11392 * rt -----
11393 * rs -----
11394 * rd -----
11396 std::string NMD::MULQ_S_PH(uint64 instruction)
11398 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11399 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11400 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11402 std::string rd = GPR(copy(rd_value));
11403 std::string rs = GPR(copy(rs_value));
11404 std::string rt = GPR(copy(rt_value));
11406 return img::format("MULQ_S.PH %s, %s, %s", rd, rs, rt);
11411 * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product
11412 * with saturation
11414 * 3 2 1
11415 * 10987654321098765432109876543210
11416 * 001000 x0111010101
11417 * rt -----
11418 * rs -----
11419 * rd -----
11421 std::string NMD::MULQ_S_W(uint64 instruction)
11423 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11424 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11425 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11427 std::string rd = GPR(copy(rd_value));
11428 std::string rs = GPR(copy(rs_value));
11429 std::string rt = GPR(copy(rt_value));
11431 return img::format("MULQ_S.W %s, %s, %s", rd, rs, rt);
11436 * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword
11437 * elements and accumulate
11439 * 3 2 1
11440 * 10987654321098765432109876543210
11441 * 001000 10110010111111
11442 * rt -----
11443 * rs -----
11444 * ac --
11446 std::string NMD::MULSA_W_PH(uint64 instruction)
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("MULSA.W.PH %s, %s, %s", ac, rs, rt);
11461 * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional
11462 * halfwords and accumulate
11464 * 3 2 1
11465 * 10987654321098765432109876543210
11466 * 001000 11110010111111
11467 * rt -----
11468 * rs -----
11469 * ac --
11471 std::string NMD::MULSAQ_S_W_PH(uint64 instruction)
11473 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11474 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11475 uint64 ac_value = extract_ac_15_14(instruction);
11477 std::string ac = AC(copy(ac_value));
11478 std::string rs = GPR(copy(rs_value));
11479 std::string rt = GPR(copy(rt_value));
11481 return img::format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt);
11486 * [DSP] MULT ac, rs, rt - Multiply word
11488 * 3 2 1
11489 * 10987654321098765432109876543210
11490 * 001000 00110010111111
11491 * rt -----
11492 * rs -----
11493 * ac --
11495 std::string NMD::MULT_DSP_(uint64 instruction)
11497 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11498 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11499 uint64 ac_value = extract_ac_15_14(instruction);
11501 std::string ac = AC(copy(ac_value));
11502 std::string rs = GPR(copy(rs_value));
11503 std::string rt = GPR(copy(rt_value));
11505 return img::format("MULT %s, %s, %s", ac, rs, rt);
11510 * [DSP] MULTU ac, rs, rt - Multiply unsigned word
11512 * 3 2 1
11513 * 10987654321098765432109876543210
11514 * 001000 01110010111111
11515 * rt -----
11516 * rs -----
11517 * ac --
11519 std::string NMD::MULTU_DSP_(uint64 instruction)
11521 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11522 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11523 uint64 ac_value = extract_ac_15_14(instruction);
11525 std::string ac = AC(copy(ac_value));
11526 std::string rs = GPR(copy(rs_value));
11527 std::string rt = GPR(copy(rt_value));
11529 return img::format("MULTU %s, %s, %s", ac, rs, rt);
11534 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11536 * 3 2 1
11537 * 10987654321098765432109876543210
11538 * 001000 00010001101
11539 * rt -----
11540 * rs -----
11541 * rd -----
11543 std::string NMD::MULU(uint64 instruction)
11545 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11546 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11547 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11549 std::string rd = GPR(copy(rd_value));
11550 std::string rs = GPR(copy(rs_value));
11551 std::string rt = GPR(copy(rt_value));
11553 return img::format("MULU %s, %s, %s", rd, rs, rt);
11558 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11560 * 3 2 1
11561 * 10987654321098765432109876543210
11562 * 001000 00010001101
11563 * rt -----
11564 * rs -----
11565 * rd -----
11567 std::string NMD::NEG_D(uint64 instruction)
11569 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11570 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11572 std::string ft = FPR(copy(ft_value));
11573 std::string fs = FPR(copy(fs_value));
11575 return img::format("NEG.D %s, %s", ft, fs);
11580 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11582 * 3 2 1
11583 * 10987654321098765432109876543210
11584 * 001000 00010001101
11585 * rt -----
11586 * rs -----
11587 * rd -----
11589 std::string NMD::NEG_S(uint64 instruction)
11591 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11592 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11594 std::string ft = FPR(copy(ft_value));
11595 std::string fs = FPR(copy(fs_value));
11597 return img::format("NEG.S %s, %s", ft, fs);
11602 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11604 * 3 2 1
11605 * 10987654321098765432109876543210
11606 * 001000 00010001101
11607 * rt -----
11608 * rs -----
11609 * rd -----
11611 std::string NMD::NOP_16_(uint64 instruction)
11613 (void)instruction;
11615 return "NOP ";
11620 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11622 * 3 2 1
11623 * 10987654321098765432109876543210
11624 * 001000 00010001101
11625 * rt -----
11626 * rs -----
11627 * rd -----
11629 std::string NMD::NOP_32_(uint64 instruction)
11631 (void)instruction;
11633 return "NOP ";
11638 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11640 * 3 2 1
11641 * 10987654321098765432109876543210
11642 * 001000 00010001101
11643 * rt -----
11644 * rs -----
11645 * rd -----
11647 std::string NMD::NOR(uint64 instruction)
11649 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11650 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11651 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11653 std::string rd = GPR(copy(rd_value));
11654 std::string rs = GPR(copy(rs_value));
11655 std::string rt = GPR(copy(rt_value));
11657 return img::format("NOR %s, %s, %s", rd, rs, rt);
11662 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11664 * 3 2 1
11665 * 10987654321098765432109876543210
11666 * 001000 00010001101
11667 * rt -----
11668 * rs -----
11669 * rd -----
11671 std::string NMD::NOT_16_(uint64 instruction)
11673 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11674 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11676 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
11677 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
11679 return img::format("NOT %s, %s", rt3, rs3);
11684 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11686 * 3 2 1
11687 * 10987654321098765432109876543210
11688 * 001000 00010001101
11689 * rt -----
11690 * rs -----
11691 * rd -----
11693 std::string NMD::OR_16_(uint64 instruction)
11695 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11696 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11698 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
11699 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
11701 return img::format("OR %s, %s", rs3, rt3);
11706 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11708 * 3 2 1
11709 * 10987654321098765432109876543210
11710 * 001000 00010001101
11711 * rt -----
11712 * rs -----
11713 * rd -----
11715 std::string NMD::OR_32_(uint64 instruction)
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("OR %s, %s, %s", rd, rs, rt);
11730 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11732 * 3 2 1
11733 * 10987654321098765432109876543210
11734 * 001000 00010001101
11735 * rt -----
11736 * rs -----
11737 * rd -----
11739 std::string NMD::ORI(uint64 instruction)
11741 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11742 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11743 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11745 std::string rt = GPR(copy(rt_value));
11746 std::string rs = GPR(copy(rs_value));
11747 std::string u = IMMEDIATE(copy(u_value));
11749 return img::format("ORI %s, %s, %s", rt, rs, u);
11754 * [DSP] PACKRL.PH rd, rs, rt - Pack a word using the right halfword from one
11755 * source register and left halfword from another source register
11757 * 3 2 1
11758 * 10987654321098765432109876543210
11759 * 001000 00010001101
11760 * rt -----
11761 * rs -----
11762 * rd -----
11764 std::string NMD::PACKRL_PH(uint64 instruction)
11766 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11767 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11768 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11770 std::string rd = GPR(copy(rd_value));
11771 std::string rs = GPR(copy(rs_value));
11772 std::string rt = GPR(copy(rt_value));
11774 return img::format("PACKRL.PH %s, %s, %s", rd, rs, rt);
11779 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11781 * 3 2 1
11782 * 10987654321098765432109876543210
11783 * 001000 00010001101
11784 * rt -----
11785 * rs -----
11786 * rd -----
11788 std::string NMD::PAUSE(uint64 instruction)
11790 (void)instruction;
11792 return "PAUSE ";
11797 * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition
11798 * code bits
11800 * 3 2 1
11801 * 10987654321098765432109876543210
11802 * 001000 00010001101
11803 * rt -----
11804 * rs -----
11805 * rd -----
11807 std::string NMD::PICK_PH(uint64 instruction)
11809 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11810 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11811 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11813 std::string rd = GPR(copy(rd_value));
11814 std::string rs = GPR(copy(rs_value));
11815 std::string rt = GPR(copy(rt_value));
11817 return img::format("PICK.PH %s, %s, %s", rd, rs, rt);
11822 * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition
11823 * code bits
11825 * 3 2 1
11826 * 10987654321098765432109876543210
11827 * 001000 00010001101
11828 * rt -----
11829 * rs -----
11830 * rd -----
11832 std::string NMD::PICK_QB(uint64 instruction)
11834 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11835 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11836 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11838 std::string rd = GPR(copy(rd_value));
11839 std::string rs = GPR(copy(rs_value));
11840 std::string rt = GPR(copy(rt_value));
11842 return img::format("PICK.QB %s, %s, %s", rd, rs, rt);
11847 * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element
11848 * of a paired halfword
11850 * 3 2 1
11851 * 10987654321098765432109876543210
11852 * 001000 00010001101
11853 * rt -----
11854 * rs -----
11855 * rd -----
11857 std::string NMD::PRECEQ_W_PHL(uint64 instruction)
11859 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11860 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11862 std::string rt = GPR(copy(rt_value));
11863 std::string rs = GPR(copy(rs_value));
11865 return img::format("PRECEQ.W.PHL %s, %s", rt, rs);
11870 * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element
11871 * of a paired halfword
11873 * 3 2 1
11874 * 10987654321098765432109876543210
11875 * 001000 00010001101
11876 * rt -----
11877 * rs -----
11878 * rd -----
11880 std::string NMD::PRECEQ_W_PHR(uint64 instruction)
11882 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11883 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11885 std::string rt = GPR(copy(rt_value));
11886 std::string rs = GPR(copy(rs_value));
11888 return img::format("PRECEQ.W.PHR %s, %s", rt, rs);
11893 * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two
11894 * left-alternate elements of a quad byte vector
11896 * 3 2 1
11897 * 10987654321098765432109876543210
11898 * 001000 00010001101
11899 * rt -----
11900 * rs -----
11901 * rd -----
11903 std::string NMD::PRECEQU_PH_QBLA(uint64 instruction)
11905 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11906 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11908 std::string rt = GPR(copy(rt_value));
11909 std::string rs = GPR(copy(rs_value));
11911 return img::format("PRECEQU.PH.QBLA %s, %s", rt, rs);
11916 * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most
11917 * elements of a quad byte vector
11919 * 3 2 1
11920 * 10987654321098765432109876543210
11921 * 001000 00010001101
11922 * rt -----
11923 * rs -----
11924 * rd -----
11926 std::string NMD::PRECEQU_PH_QBL(uint64 instruction)
11928 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11929 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11931 std::string rt = GPR(copy(rt_value));
11932 std::string rs = GPR(copy(rs_value));
11934 return img::format("PRECEQU.PH.QBL %s, %s", rt, rs);
11939 * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two
11940 * right-alternate elements of a quad byte vector
11942 * 3 2 1
11943 * 10987654321098765432109876543210
11944 * 001000 00010001101
11945 * rt -----
11946 * rs -----
11947 * rd -----
11949 std::string NMD::PRECEQU_PH_QBRA(uint64 instruction)
11951 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11952 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11954 std::string rt = GPR(copy(rt_value));
11955 std::string rs = GPR(copy(rs_value));
11957 return img::format("PRECEQU.PH.QBRA %s, %s", rt, rs);
11962 * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most
11963 * elements of a quad byte vector
11965 * 3 2 1
11966 * 10987654321098765432109876543210
11967 * 001000 00010001101
11968 * rt -----
11969 * rs -----
11970 * rd -----
11972 std::string NMD::PRECEQU_PH_QBR(uint64 instruction)
11974 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11975 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11977 std::string rt = GPR(copy(rt_value));
11978 std::string rs = GPR(copy(rs_value));
11980 return img::format("PRECEQU.PH.QBR %s, %s", rt, rs);
11985 * [DSP] PRECEU.PH.QBLA rt, rs - Expand the precision of the two
11986 * left-alternate elements of a quad byte vector to four unsigned
11987 * halfwords
11989 * 3 2 1
11990 * 10987654321098765432109876543210
11991 * 001000 00010001101
11992 * rt -----
11993 * rs -----
11994 * rd -----
11996 std::string NMD::PRECEU_PH_QBLA(uint64 instruction)
11998 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11999 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12001 std::string rt = GPR(copy(rt_value));
12002 std::string rs = GPR(copy(rs_value));
12004 return img::format("PRECEU.PH.QBLA %s, %s", rt, rs);
12009 * [DSP] PRECEU.PH.QBL rt, rs - Expand the precision of the two left-most
12010 * elements of a quad byte vector to form unsigned halfwords
12012 * 3 2 1
12013 * 10987654321098765432109876543210
12014 * 001000 00010001101
12015 * rt -----
12016 * rs -----
12017 * rd -----
12019 std::string NMD::PRECEU_PH_QBL(uint64 instruction)
12021 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12022 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12024 std::string rt = GPR(copy(rt_value));
12025 std::string rs = GPR(copy(rs_value));
12027 return img::format("PRECEU.PH.QBL %s, %s", rt, rs);
12032 * [DSP] PRECEU.PH.QBRA rt, rs - Expand the precision of the two
12033 * right-alternate elements of a quad byte vector to form four
12034 * unsigned halfwords
12036 * 3 2 1
12037 * 10987654321098765432109876543210
12038 * 001000 00010001101
12039 * rt -----
12040 * rs -----
12041 * rd -----
12043 std::string NMD::PRECEU_PH_QBRA(uint64 instruction)
12045 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12046 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12048 std::string rt = GPR(copy(rt_value));
12049 std::string rs = GPR(copy(rs_value));
12051 return img::format("PRECEU.PH.QBRA %s, %s", rt, rs);
12056 * [DSP] PRECEU.PH.QBR rt, rs - Expand the precision of the two right-most
12057 * elements of a quad byte vector to form unsigned halfwords
12059 * 3 2 1
12060 * 10987654321098765432109876543210
12061 * 001000 00010001101
12062 * rt -----
12063 * rs -----
12064 * rd -----
12066 std::string NMD::PRECEU_PH_QBR(uint64 instruction)
12068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12069 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12071 std::string rt = GPR(copy(rt_value));
12072 std::string rs = GPR(copy(rs_value));
12074 return img::format("PRECEU.PH.QBR %s, %s", rt, rs);
12079 * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer
12080 * halfwords to four bytes
12082 * 3 2 1
12083 * 10987654321098765432109876543210
12084 * 001000 x0001101101
12085 * rt -----
12086 * rs -----
12087 * rd -----
12089 std::string NMD::PRECR_QB_PH(uint64 instruction)
12091 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12092 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12093 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12095 std::string rd = GPR(copy(rd_value));
12096 std::string rs = GPR(copy(rs_value));
12097 std::string rt = GPR(copy(rt_value));
12099 return img::format("PRECR.QB.PH %s, %s, %s", rd, rs, rt);
12104 * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer
12105 * words to halfwords after a right shift
12107 * 3 2 1
12108 * 10987654321098765432109876543210
12109 * 001000 x1110000101
12110 * rt -----
12111 * rs -----
12112 * rd -----
12114 std::string NMD::PRECR_SRA_PH_W(uint64 instruction)
12116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12117 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12118 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12120 std::string rt = GPR(copy(rt_value));
12121 std::string rs = GPR(copy(rs_value));
12122 std::string sa = IMMEDIATE(copy(sa_value));
12124 return img::format("PRECR_SRA.PH.W %s, %s, %s", rt, rs, sa);
12129 * [DSP] PRECR_SRA_R.PH.W rt, rs, sa - Reduce the precision of two integer
12130 * words to halfwords after a right shift with rounding
12132 * 3 2 1
12133 * 10987654321098765432109876543210
12134 * 001000 x1110000101
12135 * rt -----
12136 * rs -----
12137 * rd -----
12139 std::string NMD::PRECR_SRA_R_PH_W(uint64 instruction)
12141 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12142 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12143 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12145 std::string rt = GPR(copy(rt_value));
12146 std::string rs = GPR(copy(rs_value));
12147 std::string sa = IMMEDIATE(copy(sa_value));
12149 return img::format("PRECR_SRA_R.PH.W %s, %s, %s", rt, rs, sa);
12154 * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional
12155 * words to fractional halfwords
12157 * 3 2 1
12158 * 10987654321098765432109876543210
12159 * 001000 x1110000101
12160 * rt -----
12161 * rs -----
12162 * rd -----
12164 std::string NMD::PRECRQ_PH_W(uint64 instruction)
12166 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12167 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12168 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12170 std::string rd = GPR(copy(rd_value));
12171 std::string rs = GPR(copy(rs_value));
12172 std::string rt = GPR(copy(rt_value));
12174 return img::format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt);
12179 * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional
12180 * halfwords to four bytes
12182 * 3 2 1
12183 * 10987654321098765432109876543210
12184 * 001000 x0010101101
12185 * rt -----
12186 * rs -----
12187 * rd -----
12189 std::string NMD::PRECRQ_QB_PH(uint64 instruction)
12191 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12192 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12193 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12195 std::string rd = GPR(copy(rd_value));
12196 std::string rs = GPR(copy(rs_value));
12197 std::string rt = GPR(copy(rt_value));
12199 return img::format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt);
12204 * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional
12205 * words to halfwords with rounding and saturation
12207 * 3 2 1
12208 * 10987654321098765432109876543210
12209 * 001000 x1110000101
12210 * rt -----
12211 * rs -----
12212 * rd -----
12214 std::string NMD::PRECRQ_RS_PH_W(uint64 instruction)
12216 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12217 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12218 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12220 std::string rd = GPR(copy(rd_value));
12221 std::string rs = GPR(copy(rs_value));
12222 std::string rt = GPR(copy(rt_value));
12224 return img::format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt);
12229 * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional
12230 * halfwords to unsigned bytes with saturation
12232 * 3 2 1
12233 * 10987654321098765432109876543210
12234 * 001000 x1110000101
12235 * rt -----
12236 * rs -----
12237 * rd -----
12239 std::string NMD::PRECRQU_S_QB_PH(uint64 instruction)
12241 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12242 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12243 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12245 std::string rd = GPR(copy(rd_value));
12246 std::string rs = GPR(copy(rs_value));
12247 std::string rt = GPR(copy(rt_value));
12249 return img::format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt);
12256 * 3 2 1
12257 * 10987654321098765432109876543210
12258 * 001000 x1110000101
12259 * rt -----
12260 * rs -----
12261 * rd -----
12263 std::string NMD::PREF_S9_(uint64 instruction)
12265 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12266 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12267 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12269 std::string hint = IMMEDIATE(copy(hint_value));
12270 std::string s = IMMEDIATE(copy(s_value));
12271 std::string rs = GPR(copy(rs_value));
12273 return img::format("PREF %s, %s(%s)", hint, s, rs);
12280 * 3 2 1
12281 * 10987654321098765432109876543210
12282 * 001000 x1110000101
12283 * rt -----
12284 * rs -----
12285 * rd -----
12287 std::string NMD::PREF_U12_(uint64 instruction)
12289 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12290 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12291 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12293 std::string hint = IMMEDIATE(copy(hint_value));
12294 std::string u = IMMEDIATE(copy(u_value));
12295 std::string rs = GPR(copy(rs_value));
12297 return img::format("PREF %s, %s(%s)", hint, u, rs);
12304 * 3 2 1
12305 * 10987654321098765432109876543210
12306 * 001000 x1110000101
12307 * rt -----
12308 * rs -----
12309 * rd -----
12311 std::string NMD::PREFE(uint64 instruction)
12313 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12314 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12315 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12317 std::string hint = IMMEDIATE(copy(hint_value));
12318 std::string s = IMMEDIATE(copy(s_value));
12319 std::string rs = GPR(copy(rs_value));
12321 return img::format("PREFE %s, %s(%s)", hint, s, rs);
12326 * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB
12328 * 3 2 1
12329 * 10987654321098765432109876543210
12330 * 001000 x1110000101
12331 * rt -----
12332 * rs -----
12333 * rd -----
12335 std::string NMD::PREPEND(uint64 instruction)
12337 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12338 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12339 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12341 std::string rt = GPR(copy(rt_value));
12342 std::string rs = GPR(copy(rs_value));
12343 std::string sa = IMMEDIATE(copy(sa_value));
12345 return img::format("PREPEND %s, %s, %s", rt, rs, sa);
12350 * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes
12352 * 3 2 1
12353 * 10987654321098765432109876543210
12354 * 001000 1111000100111111
12355 * rt -----
12356 * rs -----
12358 std::string NMD::RADDU_W_QB(uint64 instruction)
12360 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12361 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12363 std::string rt = GPR(copy(rt_value));
12364 std::string rs = GPR(copy(rs_value));
12366 return img::format("RADDU.W.QB %s, %s", rt, rs);
12371 * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR
12373 * 3 2 1
12374 * 10987654321098765432109876543210
12375 * 001000 00011001111111
12376 * rt -----
12377 * mask -------
12379 std::string NMD::RDDSP(uint64 instruction)
12381 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12382 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
12384 std::string rt = GPR(copy(rt_value));
12385 std::string mask = IMMEDIATE(copy(mask_value));
12387 return img::format("RDDSP %s, %s", rt, mask);
12394 * 3 2 1
12395 * 10987654321098765432109876543210
12396 * 001000 x1110000101
12397 * rt -----
12398 * rs -----
12399 * rd -----
12401 std::string NMD::RDHWR(uint64 instruction)
12403 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12404 uint64 hs_value = extract_hs_20_19_18_17_16(instruction);
12405 uint64 sel_value = extract_sel_13_12_11(instruction);
12407 std::string rt = GPR(copy(rt_value));
12408 std::string hs = CPR(copy(hs_value));
12409 std::string sel = IMMEDIATE(copy(sel_value));
12411 return img::format("RDHWR %s, %s, %s", rt, hs, sel);
12418 * 3 2 1
12419 * 10987654321098765432109876543210
12420 * 001000 x1110000101
12421 * rt -----
12422 * rs -----
12423 * rd -----
12425 std::string NMD::RDPGPR(uint64 instruction)
12427 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12428 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12430 std::string rt = GPR(copy(rt_value));
12431 std::string rs = GPR(copy(rs_value));
12433 return img::format("RDPGPR %s, %s", rt, rs);
12440 * 3 2 1
12441 * 10987654321098765432109876543210
12442 * 001000 x1110000101
12443 * rt -----
12444 * rs -----
12445 * rd -----
12447 std::string NMD::RECIP_D(uint64 instruction)
12449 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12450 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12452 std::string ft = FPR(copy(ft_value));
12453 std::string fs = FPR(copy(fs_value));
12455 return img::format("RECIP.D %s, %s", ft, fs);
12462 * 3 2 1
12463 * 10987654321098765432109876543210
12464 * 001000 x1110000101
12465 * rt -----
12466 * rs -----
12467 * rd -----
12469 std::string NMD::RECIP_S(uint64 instruction)
12471 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12472 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12474 std::string ft = FPR(copy(ft_value));
12475 std::string fs = FPR(copy(fs_value));
12477 return img::format("RECIP.S %s, %s", ft, fs);
12482 * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element
12483 * positions
12485 * 3 2 1
12486 * 10987654321098765432109876543210
12487 * 001000 x0000111101
12488 * rt -----
12489 * s ----------
12491 std::string NMD::REPL_PH(uint64 instruction)
12493 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12494 int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);
12496 std::string rt = GPR(copy(rt_value));
12497 std::string s = IMMEDIATE(copy(s_value));
12499 return img::format("REPL.PH %s, %s", rt, s);
12504 * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element
12505 * positions
12507 * 3 2 1
12508 * 10987654321098765432109876543210
12509 * 001000 x010111111111
12510 * rt -----
12511 * u --------
12513 std::string NMD::REPL_QB(uint64 instruction)
12515 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12516 uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction);
12518 std::string rt = GPR(copy(rt_value));
12519 std::string u = IMMEDIATE(copy(u_value));
12521 return img::format("REPL.QB %s, %s", rt, u);
12526 * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element
12527 * positions
12529 * 3 2 1
12530 * 10987654321098765432109876543210
12531 * 001000 0000001100111111
12532 * rt -----
12533 * rs -----
12535 std::string NMD::REPLV_PH(uint64 instruction)
12537 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12538 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12540 std::string rt = GPR(copy(rt_value));
12541 std::string rs = GPR(copy(rs_value));
12543 return img::format("REPLV.PH %s, %s", rt, rs);
12548 * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions
12550 * 3 2 1
12551 * 10987654321098765432109876543210
12552 * 001000 0001001100111111
12553 * rt -----
12554 * rs -----
12556 std::string NMD::REPLV_QB(uint64 instruction)
12558 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12559 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12561 std::string rt = GPR(copy(rt_value));
12562 std::string rs = GPR(copy(rs_value));
12564 return img::format("REPLV.QB %s, %s", rt, rs);
12571 * 3 2 1
12572 * 10987654321098765432109876543210
12573 * 001000 x1110000101
12574 * rt -----
12575 * rs -----
12576 * rd -----
12578 std::string NMD::RESTORE_32_(uint64 instruction)
12580 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12581 uint64 count_value = extract_count_19_18_17_16(instruction);
12582 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12583 uint64 gp_value = extract_gp_2(instruction);
12585 std::string u = IMMEDIATE(copy(u_value));
12586 return img::format("RESTORE %s%s", u,
12587 save_restore_list(rt_value, count_value, gp_value));
12594 * 3 2 1
12595 * 10987654321098765432109876543210
12596 * 001000 x1110000101
12597 * rt -----
12598 * rs -----
12599 * rd -----
12601 std::string NMD::RESTORE_JRC_16_(uint64 instruction)
12603 uint64 rt1_value = extract_rtl_11(instruction);
12604 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12605 uint64 count_value = extract_count_3_2_1_0(instruction);
12607 std::string u = IMMEDIATE(copy(u_value));
12608 return img::format("RESTORE.JRC %s%s", u,
12609 save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
12616 * 3 2 1
12617 * 10987654321098765432109876543210
12618 * 001000 x1110000101
12619 * rt -----
12620 * rs -----
12621 * rd -----
12623 std::string NMD::RESTORE_JRC_32_(uint64 instruction)
12625 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12626 uint64 count_value = extract_count_19_18_17_16(instruction);
12627 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12628 uint64 gp_value = extract_gp_2(instruction);
12630 std::string u = IMMEDIATE(copy(u_value));
12631 return img::format("RESTORE.JRC %s%s", u,
12632 save_restore_list(rt_value, count_value, gp_value));
12639 * 3 2 1
12640 * 10987654321098765432109876543210
12641 * 001000 x1110000101
12642 * rt -----
12643 * rs -----
12644 * rd -----
12646 std::string NMD::RESTOREF(uint64 instruction)
12648 uint64 count_value = extract_count_19_18_17_16(instruction);
12649 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12651 std::string u = IMMEDIATE(copy(u_value));
12652 std::string count = IMMEDIATE(copy(count_value));
12654 return img::format("RESTOREF %s, %s", u, count);
12661 * 3 2 1
12662 * 10987654321098765432109876543210
12663 * 001000 x1110000101
12664 * rt -----
12665 * rs -----
12666 * rd -----
12668 std::string NMD::RINT_D(uint64 instruction)
12670 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12671 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12673 std::string ft = FPR(copy(ft_value));
12674 std::string fs = FPR(copy(fs_value));
12676 return img::format("RINT.D %s, %s", ft, fs);
12683 * 3 2 1
12684 * 10987654321098765432109876543210
12685 * 001000 x1110000101
12686 * rt -----
12687 * rs -----
12688 * rd -----
12690 std::string NMD::RINT_S(uint64 instruction)
12692 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12693 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12695 std::string ft = FPR(copy(ft_value));
12696 std::string fs = FPR(copy(fs_value));
12698 return img::format("RINT.S %s, %s", ft, fs);
12705 * 3 2 1
12706 * 10987654321098765432109876543210
12707 * 001000 x1110000101
12708 * rt -----
12709 * rs -----
12710 * rd -----
12712 std::string NMD::ROTR(uint64 instruction)
12714 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12715 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12716 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12718 std::string rt = GPR(copy(rt_value));
12719 std::string rs = GPR(copy(rs_value));
12720 std::string shift = IMMEDIATE(copy(shift_value));
12722 return img::format("ROTR %s, %s, %s", rt, rs, shift);
12729 * 3 2 1
12730 * 10987654321098765432109876543210
12731 * 001000 x1110000101
12732 * rt -----
12733 * rs -----
12734 * rd -----
12736 std::string NMD::ROTRV(uint64 instruction)
12738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12739 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12740 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12742 std::string rd = GPR(copy(rd_value));
12743 std::string rs = GPR(copy(rs_value));
12744 std::string rt = GPR(copy(rt_value));
12746 return img::format("ROTRV %s, %s, %s", rd, rs, rt);
12753 * 3 2 1
12754 * 10987654321098765432109876543210
12755 * 001000 x1110000101
12756 * rt -----
12757 * rs -----
12758 * rd -----
12760 std::string NMD::ROTX(uint64 instruction)
12762 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12763 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12764 uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
12765 uint64 stripe_value = extract_stripe_6(instruction);
12766 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12768 std::string rt = GPR(copy(rt_value));
12769 std::string rs = GPR(copy(rs_value));
12770 std::string shift = IMMEDIATE(copy(shift_value));
12771 std::string shiftx = IMMEDIATE(copy(shiftx_value));
12772 std::string stripe = IMMEDIATE(copy(stripe_value));
12774 return img::format("ROTX %s, %s, %s, %s, %s",
12775 rt, rs, shift, shiftx, stripe);
12782 * 3 2 1
12783 * 10987654321098765432109876543210
12784 * 001000 x1110000101
12785 * rt -----
12786 * rs -----
12787 * rd -----
12789 std::string NMD::ROUND_L_D(uint64 instruction)
12791 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12792 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12794 std::string ft = FPR(copy(ft_value));
12795 std::string fs = FPR(copy(fs_value));
12797 return img::format("ROUND.L.D %s, %s", ft, fs);
12804 * 3 2 1
12805 * 10987654321098765432109876543210
12806 * 001000 x1110000101
12807 * rt -----
12808 * rs -----
12809 * rd -----
12811 std::string NMD::ROUND_L_S(uint64 instruction)
12813 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12814 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12816 std::string ft = FPR(copy(ft_value));
12817 std::string fs = FPR(copy(fs_value));
12819 return img::format("ROUND.L.S %s, %s", ft, fs);
12826 * 3 2 1
12827 * 10987654321098765432109876543210
12828 * 001000 x1110000101
12829 * rt -----
12830 * rs -----
12831 * rd -----
12833 std::string NMD::ROUND_W_D(uint64 instruction)
12835 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12836 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12838 std::string ft = FPR(copy(ft_value));
12839 std::string fs = FPR(copy(fs_value));
12841 return img::format("ROUND.W.D %s, %s", ft, fs);
12848 * 3 2 1
12849 * 10987654321098765432109876543210
12850 * 001000 x1110000101
12851 * rt -----
12852 * rs -----
12853 * rd -----
12855 std::string NMD::ROUND_W_S(uint64 instruction)
12857 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12858 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12860 std::string ft = FPR(copy(ft_value));
12861 std::string fs = FPR(copy(fs_value));
12863 return img::format("ROUND.W.S %s, %s", ft, fs);
12870 * 3 2 1
12871 * 10987654321098765432109876543210
12872 * 001000 x1110000101
12873 * rt -----
12874 * rs -----
12875 * rd -----
12877 std::string NMD::RSQRT_D(uint64 instruction)
12879 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12880 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12882 std::string ft = FPR(copy(ft_value));
12883 std::string fs = FPR(copy(fs_value));
12885 return img::format("RSQRT.D %s, %s", ft, fs);
12892 * 3 2 1
12893 * 10987654321098765432109876543210
12894 * 001000 x1110000101
12895 * rt -----
12896 * rs -----
12897 * rd -----
12899 std::string NMD::RSQRT_S(uint64 instruction)
12901 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12902 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12904 std::string ft = FPR(copy(ft_value));
12905 std::string fs = FPR(copy(fs_value));
12907 return img::format("RSQRT.S %s, %s", ft, fs);
12914 * 3 2 1
12915 * 10987654321098765432109876543210
12916 * 001000 01001001101
12917 * rt -----
12918 * rs -----
12919 * rd -----
12921 std::string NMD::SAVE_16_(uint64 instruction)
12923 uint64 rt1_value = extract_rtl_11(instruction);
12924 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12925 uint64 count_value = extract_count_3_2_1_0(instruction);
12927 std::string u = IMMEDIATE(copy(u_value));
12928 return img::format("SAVE %s%s", u,
12929 save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
12936 * 3 2 1
12937 * 10987654321098765432109876543210
12938 * 001000 01001001101
12939 * rt -----
12940 * rs -----
12941 * rd -----
12943 std::string NMD::SAVE_32_(uint64 instruction)
12945 uint64 count_value = extract_count_19_18_17_16(instruction);
12946 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12947 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12948 uint64 gp_value = extract_gp_2(instruction);
12950 std::string u = IMMEDIATE(copy(u_value));
12951 return img::format("SAVE %s%s", u,
12952 save_restore_list(rt_value, count_value, gp_value));
12959 * 3 2 1
12960 * 10987654321098765432109876543210
12961 * 001000 01001001101
12962 * rt -----
12963 * rs -----
12964 * rd -----
12966 std::string NMD::SAVEF(uint64 instruction)
12968 uint64 count_value = extract_count_19_18_17_16(instruction);
12969 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12971 std::string u = IMMEDIATE(copy(u_value));
12972 std::string count = IMMEDIATE(copy(count_value));
12974 return img::format("SAVEF %s, %s", u, count);
12981 * 3 2 1
12982 * 10987654321098765432109876543210
12983 * 001000 01001001101
12984 * rt -----
12985 * rs -----
12986 * rd -----
12988 std::string NMD::SB_16_(uint64 instruction)
12990 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
12991 uint64 rs3_value = extract_rs3_6_5_4(instruction);
12992 uint64 u_value = extract_u_1_0(instruction);
12994 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
12995 std::string u = IMMEDIATE(copy(u_value));
12996 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
12998 return img::format("SB %s, %s(%s)", rtz3, u, rs3);
13005 * 3 2 1
13006 * 10987654321098765432109876543210
13007 * 001000 01001001101
13008 * rt -----
13009 * rs -----
13010 * rd -----
13012 std::string NMD::SB_GP_(uint64 instruction)
13014 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13015 uint64 u_value = extract_u_17_to_0(instruction);
13017 std::string rt = GPR(copy(rt_value));
13018 std::string u = IMMEDIATE(copy(u_value));
13020 return img::format("SB %s, %s($%d)", rt, u, 28);
13027 * 3 2 1
13028 * 10987654321098765432109876543210
13029 * 001000 01001001101
13030 * rt -----
13031 * rs -----
13032 * rd -----
13034 std::string NMD::SB_S9_(uint64 instruction)
13036 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13037 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13038 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13040 std::string rt = GPR(copy(rt_value));
13041 std::string s = IMMEDIATE(copy(s_value));
13042 std::string rs = GPR(copy(rs_value));
13044 return img::format("SB %s, %s(%s)", rt, s, rs);
13051 * 3 2 1
13052 * 10987654321098765432109876543210
13053 * 001000 01001001101
13054 * rt -----
13055 * rs -----
13056 * rd -----
13058 std::string NMD::SB_U12_(uint64 instruction)
13060 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13061 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13062 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13064 std::string rt = GPR(copy(rt_value));
13065 std::string u = IMMEDIATE(copy(u_value));
13066 std::string rs = GPR(copy(rs_value));
13068 return img::format("SB %s, %s(%s)", rt, u, rs);
13075 * 3 2 1
13076 * 10987654321098765432109876543210
13077 * 001000 01001001101
13078 * rt -----
13079 * rs -----
13080 * rd -----
13082 std::string NMD::SBE(uint64 instruction)
13084 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13085 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13086 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13088 std::string rt = GPR(copy(rt_value));
13089 std::string s = IMMEDIATE(copy(s_value));
13090 std::string rs = GPR(copy(rs_value));
13092 return img::format("SBE %s, %s(%s)", rt, s, rs);
13099 * 3 2 1
13100 * 10987654321098765432109876543210
13101 * 001000 01001001101
13102 * rt -----
13103 * rs -----
13104 * rd -----
13106 std::string NMD::SBX(uint64 instruction)
13108 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13109 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13110 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13112 std::string rd = GPR(copy(rd_value));
13113 std::string rs = GPR(copy(rs_value));
13114 std::string rt = GPR(copy(rt_value));
13116 return img::format("SBX %s, %s(%s)", rd, rs, rt);
13123 * 3 2 1
13124 * 10987654321098765432109876543210
13125 * 001000 01001001101
13126 * rt -----
13127 * rs -----
13128 * rd -----
13130 std::string NMD::SC(uint64 instruction)
13132 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13133 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13134 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
13136 std::string rt = GPR(copy(rt_value));
13137 std::string s = IMMEDIATE(copy(s_value));
13138 std::string rs = GPR(copy(rs_value));
13140 return img::format("SC %s, %s(%s)", rt, s, rs);
13147 * 3 2 1
13148 * 10987654321098765432109876543210
13149 * 001000 01001001101
13150 * rt -----
13151 * rs -----
13152 * rd -----
13154 std::string NMD::SCD(uint64 instruction)
13156 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13157 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13158 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
13160 std::string rt = GPR(copy(rt_value));
13161 std::string s = IMMEDIATE(copy(s_value));
13162 std::string rs = GPR(copy(rs_value));
13164 return img::format("SCD %s, %s(%s)", rt, s, rs);
13171 * 3 2 1
13172 * 10987654321098765432109876543210
13173 * 001000 01001001101
13174 * rt -----
13175 * rs -----
13176 * rd -----
13178 std::string NMD::SCDP(uint64 instruction)
13180 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13181 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13182 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13184 std::string rt = GPR(copy(rt_value));
13185 std::string ru = GPR(copy(ru_value));
13186 std::string rs = GPR(copy(rs_value));
13188 return img::format("SCDP %s, %s, (%s)", rt, ru, rs);
13195 * 3 2 1
13196 * 10987654321098765432109876543210
13197 * 001000 01001001101
13198 * rt -----
13199 * rs -----
13200 * rd -----
13202 std::string NMD::SCE(uint64 instruction)
13204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13205 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13206 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
13208 std::string rt = GPR(copy(rt_value));
13209 std::string s = IMMEDIATE(copy(s_value));
13210 std::string rs = GPR(copy(rs_value));
13212 return img::format("SCE %s, %s(%s)", rt, s, rs);
13219 * 3 2 1
13220 * 10987654321098765432109876543210
13221 * 001000 01001001101
13222 * rt -----
13223 * rs -----
13224 * rd -----
13226 std::string NMD::SCWP(uint64 instruction)
13228 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13229 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13230 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13232 std::string rt = GPR(copy(rt_value));
13233 std::string ru = GPR(copy(ru_value));
13234 std::string rs = GPR(copy(rs_value));
13236 return img::format("SCWP %s, %s, (%s)", rt, ru, rs);
13243 * 3 2 1
13244 * 10987654321098765432109876543210
13245 * 001000 01001001101
13246 * rt -----
13247 * rs -----
13248 * rd -----
13250 std::string NMD::SCWPE(uint64 instruction)
13252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13253 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13254 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13256 std::string rt = GPR(copy(rt_value));
13257 std::string ru = GPR(copy(ru_value));
13258 std::string rs = GPR(copy(rs_value));
13260 return img::format("SCWPE %s, %s, (%s)", rt, ru, rs);
13267 * 3 2 1
13268 * 10987654321098765432109876543210
13269 * 001000 01001001101
13270 * rt -----
13271 * rs -----
13272 * rd -----
13274 std::string NMD::SD_GP_(uint64 instruction)
13276 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13277 uint64 u_value = extract_u_20_to_3__s3(instruction);
13279 std::string rt = GPR(copy(rt_value));
13280 std::string u = IMMEDIATE(copy(u_value));
13282 return img::format("SD %s, %s($%d)", rt, u, 28);
13289 * 3 2 1
13290 * 10987654321098765432109876543210
13291 * 001000 01001001101
13292 * rt -----
13293 * rs -----
13294 * rd -----
13296 std::string NMD::SD_S9_(uint64 instruction)
13298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13300 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13302 std::string rt = GPR(copy(rt_value));
13303 std::string s = IMMEDIATE(copy(s_value));
13304 std::string rs = GPR(copy(rs_value));
13306 return img::format("SD %s, %s(%s)", rt, s, rs);
13313 * 3 2 1
13314 * 10987654321098765432109876543210
13315 * 001000 01001001101
13316 * rt -----
13317 * rs -----
13318 * rd -----
13320 std::string NMD::SD_U12_(uint64 instruction)
13322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13323 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13324 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13326 std::string rt = GPR(copy(rt_value));
13327 std::string u = IMMEDIATE(copy(u_value));
13328 std::string rs = GPR(copy(rs_value));
13330 return img::format("SD %s, %s(%s)", rt, u, rs);
13337 * 3 2 1
13338 * 10987654321098765432109876543210
13339 * 001000 01001001101
13340 * rt -----
13341 * rs -----
13342 * rd -----
13344 std::string NMD::SDBBP_16_(uint64 instruction)
13346 uint64 code_value = extract_code_2_1_0(instruction);
13348 std::string code = IMMEDIATE(copy(code_value));
13350 return img::format("SDBBP %s", code);
13357 * 3 2 1
13358 * 10987654321098765432109876543210
13359 * 001000 01001001101
13360 * rt -----
13361 * rs -----
13362 * rd -----
13364 std::string NMD::SDBBP_32_(uint64 instruction)
13366 uint64 code_value = extract_code_18_to_0(instruction);
13368 std::string code = IMMEDIATE(copy(code_value));
13370 return img::format("SDBBP %s", code);
13377 * 3 2 1
13378 * 10987654321098765432109876543210
13379 * 001000 01001001101
13380 * rt -----
13381 * rs -----
13382 * rd -----
13384 std::string NMD::SDC1_GP_(uint64 instruction)
13386 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13387 uint64 u_value = extract_u_17_to_2__s2(instruction);
13389 std::string ft = FPR(copy(ft_value));
13390 std::string u = IMMEDIATE(copy(u_value));
13392 return img::format("SDC1 %s, %s($%d)", ft, u, 28);
13399 * 3 2 1
13400 * 10987654321098765432109876543210
13401 * 001000 01001001101
13402 * rt -----
13403 * rs -----
13404 * rd -----
13406 std::string NMD::SDC1_S9_(uint64 instruction)
13408 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13409 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13410 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13412 std::string ft = FPR(copy(ft_value));
13413 std::string s = IMMEDIATE(copy(s_value));
13414 std::string rs = GPR(copy(rs_value));
13416 return img::format("SDC1 %s, %s(%s)", ft, s, rs);
13423 * 3 2 1
13424 * 10987654321098765432109876543210
13425 * 001000 01001001101
13426 * rt -----
13427 * rs -----
13428 * rd -----
13430 std::string NMD::SDC1_U12_(uint64 instruction)
13432 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13433 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13434 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13436 std::string ft = FPR(copy(ft_value));
13437 std::string u = IMMEDIATE(copy(u_value));
13438 std::string rs = GPR(copy(rs_value));
13440 return img::format("SDC1 %s, %s(%s)", ft, u, rs);
13447 * 3 2 1
13448 * 10987654321098765432109876543210
13449 * 001000 01001001101
13450 * rt -----
13451 * rs -----
13452 * rd -----
13454 std::string NMD::SDC1X(uint64 instruction)
13456 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13457 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13458 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13460 std::string ft = FPR(copy(ft_value));
13461 std::string rs = GPR(copy(rs_value));
13462 std::string rt = GPR(copy(rt_value));
13464 return img::format("SDC1X %s, %s(%s)", ft, rs, rt);
13471 * 3 2 1
13472 * 10987654321098765432109876543210
13473 * 001000 01001001101
13474 * rt -----
13475 * rs -----
13476 * rd -----
13478 std::string NMD::SDC1XS(uint64 instruction)
13480 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13481 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13482 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13484 std::string ft = FPR(copy(ft_value));
13485 std::string rs = GPR(copy(rs_value));
13486 std::string rt = GPR(copy(rt_value));
13488 return img::format("SDC1XS %s, %s(%s)", ft, rs, rt);
13495 * 3 2 1
13496 * 10987654321098765432109876543210
13497 * 001000 01001001101
13498 * rt -----
13499 * rs -----
13500 * rd -----
13502 std::string NMD::SDC2(uint64 instruction)
13504 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
13505 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13506 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13508 std::string cs = CPR(copy(cs_value));
13509 std::string s = IMMEDIATE(copy(s_value));
13510 std::string rs = GPR(copy(rs_value));
13512 return img::format("SDC2 %s, %s(%s)", cs, s, rs);
13519 * 3 2 1
13520 * 10987654321098765432109876543210
13521 * 001000 01001001101
13522 * rt -----
13523 * rs -----
13524 * rd -----
13526 std::string NMD::SDM(uint64 instruction)
13528 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13529 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13530 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13531 uint64 count3_value = extract_count3_14_13_12(instruction);
13533 std::string rt = GPR(copy(rt_value));
13534 std::string s = IMMEDIATE(copy(s_value));
13535 std::string rs = GPR(copy(rs_value));
13536 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
13538 return img::format("SDM %s, %s(%s), %s", rt, s, rs, count3);
13545 * 3 2 1
13546 * 10987654321098765432109876543210
13547 * 001000 01001001101
13548 * rt -----
13549 * rs -----
13550 * rd -----
13552 std::string NMD::SDPC_48_(uint64 instruction)
13554 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
13555 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
13557 std::string rt = GPR(copy(rt_value));
13558 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
13560 return img::format("SDPC %s, %s", rt, s);
13567 * 3 2 1
13568 * 10987654321098765432109876543210
13569 * 001000 01001001101
13570 * rt -----
13571 * rs -----
13572 * rd -----
13574 std::string NMD::SDXS(uint64 instruction)
13576 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13577 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13578 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13580 std::string rd = GPR(copy(rd_value));
13581 std::string rs = GPR(copy(rs_value));
13582 std::string rt = GPR(copy(rt_value));
13584 return img::format("SDXS %s, %s(%s)", rd, rs, rt);
13591 * 3 2 1
13592 * 10987654321098765432109876543210
13593 * 001000 01001001101
13594 * rt -----
13595 * rs -----
13596 * rd -----
13598 std::string NMD::SDX(uint64 instruction)
13600 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13602 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13604 std::string rd = GPR(copy(rd_value));
13605 std::string rs = GPR(copy(rs_value));
13606 std::string rt = GPR(copy(rt_value));
13608 return img::format("SDX %s, %s(%s)", rd, rs, rt);
13615 * 3 2 1
13616 * 10987654321098765432109876543210
13617 * 001000 01001001101
13618 * rt -----
13619 * rs -----
13620 * rd -----
13622 std::string NMD::SEB(uint64 instruction)
13624 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13625 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13627 std::string rt = GPR(copy(rt_value));
13628 std::string rs = GPR(copy(rs_value));
13630 return img::format("SEB %s, %s", rt, rs);
13637 * 3 2 1
13638 * 10987654321098765432109876543210
13639 * 001000 01001001101
13640 * rt -----
13641 * rs -----
13642 * rd -----
13644 std::string NMD::SEH(uint64 instruction)
13646 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13647 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13649 std::string rt = GPR(copy(rt_value));
13650 std::string rs = GPR(copy(rs_value));
13652 return img::format("SEH %s, %s", rt, rs);
13659 * 3 2 1
13660 * 10987654321098765432109876543210
13661 * 001000 01001001101
13662 * rt -----
13663 * rs -----
13664 * rd -----
13666 std::string NMD::SEL_D(uint64 instruction)
13668 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13669 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13670 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13672 std::string fd = FPR(copy(fd_value));
13673 std::string fs = FPR(copy(fs_value));
13674 std::string ft = FPR(copy(ft_value));
13676 return img::format("SEL.D %s, %s, %s", fd, fs, ft);
13683 * 3 2 1
13684 * 10987654321098765432109876543210
13685 * 001000 01001001101
13686 * rt -----
13687 * rs -----
13688 * rd -----
13690 std::string NMD::SEL_S(uint64 instruction)
13692 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13693 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13694 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13696 std::string fd = FPR(copy(fd_value));
13697 std::string fs = FPR(copy(fs_value));
13698 std::string ft = FPR(copy(ft_value));
13700 return img::format("SEL.S %s, %s, %s", fd, fs, ft);
13707 * 3 2 1
13708 * 10987654321098765432109876543210
13709 * 001000 01001001101
13710 * rt -----
13711 * rs -----
13712 * rd -----
13714 std::string NMD::SELEQZ_D(uint64 instruction)
13716 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13717 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13718 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13720 std::string fd = FPR(copy(fd_value));
13721 std::string fs = FPR(copy(fs_value));
13722 std::string ft = FPR(copy(ft_value));
13724 return img::format("SELEQZ.D %s, %s, %s", fd, fs, ft);
13731 * 3 2 1
13732 * 10987654321098765432109876543210
13733 * 001000 01001001101
13734 * rt -----
13735 * rs -----
13736 * rd -----
13738 std::string NMD::SELEQZ_S(uint64 instruction)
13740 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13741 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13742 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13744 std::string fd = FPR(copy(fd_value));
13745 std::string fs = FPR(copy(fs_value));
13746 std::string ft = FPR(copy(ft_value));
13748 return img::format("SELEQZ.S %s, %s, %s", fd, fs, ft);
13755 * 3 2 1
13756 * 10987654321098765432109876543210
13757 * 001000 01001001101
13758 * rt -----
13759 * rs -----
13760 * rd -----
13762 std::string NMD::SELNEZ_D(uint64 instruction)
13764 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13765 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13766 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13768 std::string fd = FPR(copy(fd_value));
13769 std::string fs = FPR(copy(fs_value));
13770 std::string ft = FPR(copy(ft_value));
13772 return img::format("SELNEZ.D %s, %s, %s", fd, fs, ft);
13779 * 3 2 1
13780 * 10987654321098765432109876543210
13781 * 001000 01001001101
13782 * rt -----
13783 * rs -----
13784 * rd -----
13786 std::string NMD::SELNEZ_S(uint64 instruction)
13788 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13789 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13790 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13792 std::string fd = FPR(copy(fd_value));
13793 std::string fs = FPR(copy(fs_value));
13794 std::string ft = FPR(copy(ft_value));
13796 return img::format("SELNEZ.S %s, %s, %s", fd, fs, ft);
13803 * 3 2 1
13804 * 10987654321098765432109876543210
13805 * 001000 01001001101
13806 * rt -----
13807 * rs -----
13808 * rd -----
13810 std::string NMD::SEQI(uint64 instruction)
13812 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13813 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13814 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13816 std::string rt = GPR(copy(rt_value));
13817 std::string rs = GPR(copy(rs_value));
13818 std::string u = IMMEDIATE(copy(u_value));
13820 return img::format("SEQI %s, %s, %s", rt, rs, u);
13827 * 3 2 1
13828 * 10987654321098765432109876543210
13829 * 001000 01001001101
13830 * rt -----
13831 * rs -----
13832 * rd -----
13834 std::string NMD::SH_16_(uint64 instruction)
13836 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
13837 uint64 rs3_value = extract_rs3_6_5_4(instruction);
13838 uint64 u_value = extract_u_2_1__s1(instruction);
13840 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
13841 std::string u = IMMEDIATE(copy(u_value));
13842 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
13844 return img::format("SH %s, %s(%s)", rtz3, u, rs3);
13851 * 3 2 1
13852 * 10987654321098765432109876543210
13853 * 001000 01001001101
13854 * rt -----
13855 * rs -----
13856 * rd -----
13858 std::string NMD::SH_GP_(uint64 instruction)
13860 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13861 uint64 u_value = extract_u_17_to_1__s1(instruction);
13863 std::string rt = GPR(copy(rt_value));
13864 std::string u = IMMEDIATE(copy(u_value));
13866 return img::format("SH %s, %s($%d)", rt, u, 28);
13873 * 3 2 1
13874 * 10987654321098765432109876543210
13875 * 001000 01001001101
13876 * rt -----
13877 * rs -----
13878 * rd -----
13880 std::string NMD::SH_S9_(uint64 instruction)
13882 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13883 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13884 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13886 std::string rt = GPR(copy(rt_value));
13887 std::string s = IMMEDIATE(copy(s_value));
13888 std::string rs = GPR(copy(rs_value));
13890 return img::format("SH %s, %s(%s)", rt, s, rs);
13897 * 3 2 1
13898 * 10987654321098765432109876543210
13899 * 001000 01001001101
13900 * rt -----
13901 * rs -----
13902 * rd -----
13904 std::string NMD::SH_U12_(uint64 instruction)
13906 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13907 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13908 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13910 std::string rt = GPR(copy(rt_value));
13911 std::string u = IMMEDIATE(copy(u_value));
13912 std::string rs = GPR(copy(rs_value));
13914 return img::format("SH %s, %s(%s)", rt, u, rs);
13921 * 3 2 1
13922 * 10987654321098765432109876543210
13923 * 001000 01001001101
13924 * rt -----
13925 * rs -----
13926 * rd -----
13928 std::string NMD::SHE(uint64 instruction)
13930 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13931 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13932 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13934 std::string rt = GPR(copy(rt_value));
13935 std::string s = IMMEDIATE(copy(s_value));
13936 std::string rs = GPR(copy(rs_value));
13938 return img::format("SHE %s, %s(%s)", rt, s, rs);
13943 * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in
13944 * the same accumulator
13946 * 3 2 1
13947 * 10987654321098765432109876543210
13948 * 001000xxxx xxxx0000011101
13949 * shift ------
13950 * ac --
13952 std::string NMD::SHILO(uint64 instruction)
13954 int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
13955 uint64 ac_value = extract_ac_15_14(instruction);
13957 std::string shift = IMMEDIATE(copy(shift_value));
13958 std::string ac = AC(copy(ac_value));
13960 return img::format("SHILO %s, %s", ac, shift);
13965 * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result
13966 * in the same accumulator
13968 * 3 2 1
13969 * 10987654321098765432109876543210
13970 * 001000xxxxx 01001001111111
13971 * rs -----
13972 * ac --
13974 std::string NMD::SHILOV(uint64 instruction)
13976 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13977 uint64 ac_value = extract_ac_15_14(instruction);
13979 std::string rs = GPR(copy(rs_value));
13980 std::string ac = AC(copy(ac_value));
13982 return img::format("SHILOV %s, %s", ac, rs);
13987 * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords
13989 * 3 2 1
13990 * 10987654321098765432109876543210
13991 * 001000 001110110101
13992 * rt -----
13993 * rs -----
13994 * sa ----
13996 std::string NMD::SHLL_PH(uint64 instruction)
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.PH %s, %s, %s", rt, rs, sa);
14011 * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes
14013 * 3 2 1
14014 * 10987654321098765432109876543210
14015 * 001000 0100001111111
14016 * rt -----
14017 * rs -----
14018 * sa ---
14020 std::string NMD::SHLL_QB(uint64 instruction)
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(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.QB %s, %s, %s", rt, rs, sa);
14035 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords
14036 * with saturation
14038 * 3 2 1
14039 * 10987654321098765432109876543210
14040 * 001000 001110110101
14041 * rt -----
14042 * rs -----
14043 * sa ----
14045 std::string NMD::SHLL_S_PH(uint64 instruction)
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 sa_value = extract_sa_15_14_13_12(instruction);
14051 std::string rt = GPR(copy(rt_value));
14052 std::string rs = GPR(copy(rs_value));
14053 std::string sa = IMMEDIATE(copy(sa_value));
14055 return img::format("SHLL_S.PH %s, %s, %s", rt, rs, sa);
14060 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation
14062 * 3 2 1
14063 * 10987654321098765432109876543210
14064 * 001000 x1111110101
14065 * rt -----
14066 * rs -----
14067 * sa -----
14069 std::string NMD::SHLL_S_W(uint64 instruction)
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 sa_value = extract_sa_15_14_13_12_11(instruction);
14075 std::string rt = GPR(copy(rt_value));
14076 std::string rs = GPR(copy(rs_value));
14077 std::string sa = IMMEDIATE(copy(sa_value));
14079 return img::format("SHLL_S.W %s, %s, %s", rt, rs, sa);
14084 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14085 * halfwords
14087 * 3 2 1
14088 * 10987654321098765432109876543210
14089 * 001000 01110001101
14090 * rt -----
14091 * rs -----
14092 * rd -----
14094 std::string NMD::SHLLV_PH(uint64 instruction)
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.PH %s, %s, %s", rd, rt, rs);
14109 * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes
14111 * 3 2 1
14112 * 10987654321098765432109876543210
14113 * 001000 x1110010101
14114 * rt -----
14115 * rs -----
14116 * rd -----
14118 std::string NMD::SHLLV_QB(uint64 instruction)
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.QB %s, %s, %s", rd, rt, rs);
14133 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14134 * halfwords with saturation
14136 * 3 2 1
14137 * 10987654321098765432109876543210
14138 * 001000 11110001101
14139 * rt -----
14140 * rs -----
14141 * rd -----
14143 std::string NMD::SHLLV_S_PH(uint64 instruction)
14145 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14146 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14147 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14149 std::string rd = GPR(copy(rd_value));
14150 std::string rt = GPR(copy(rt_value));
14151 std::string rs = GPR(copy(rs_value));
14153 return img::format("SHLLV_S.PH %s, %s, %s", rd, rt, rs);
14158 * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word
14160 * 3 2 1
14161 * 10987654321098765432109876543210
14162 * 001000 x1111010101
14163 * rt -----
14164 * rs -----
14165 * rd -----
14167 std::string NMD::SHLLV_S_W(uint64 instruction)
14169 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14170 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14171 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14173 std::string rd = GPR(copy(rd_value));
14174 std::string rt = GPR(copy(rt_value));
14175 std::string rs = GPR(copy(rs_value));
14177 return img::format("SHLLV_S.W %s, %s, %s", rd, rt, rs);
14184 * 3 2 1
14185 * 10987654321098765432109876543210
14186 * 001000 01001001101
14187 * rt -----
14188 * rs -----
14189 * rd -----
14191 std::string NMD::SHRA_PH(uint64 instruction)
14193 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14194 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14195 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14197 std::string rt = GPR(copy(rt_value));
14198 std::string rs = GPR(copy(rs_value));
14199 std::string sa = IMMEDIATE(copy(sa_value));
14201 return img::format("SHRA.PH %s, %s, %s", rt, rs, sa);
14208 * 3 2 1
14209 * 10987654321098765432109876543210
14210 * 001000 01001001101
14211 * rt -----
14212 * rs -----
14213 * rd -----
14215 std::string NMD::SHRA_QB(uint64 instruction)
14217 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14218 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14219 uint64 sa_value = extract_sa_15_14_13(instruction);
14221 std::string rt = GPR(copy(rt_value));
14222 std::string rs = GPR(copy(rs_value));
14223 std::string sa = IMMEDIATE(copy(sa_value));
14225 return img::format("SHRA.QB %s, %s, %s", rt, rs, sa);
14232 * 3 2 1
14233 * 10987654321098765432109876543210
14234 * 001000 01001001101
14235 * rt -----
14236 * rs -----
14237 * rd -----
14239 std::string NMD::SHRA_R_PH(uint64 instruction)
14241 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14242 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14243 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14245 std::string rt = GPR(copy(rt_value));
14246 std::string rs = GPR(copy(rs_value));
14247 std::string sa = IMMEDIATE(copy(sa_value));
14249 return img::format("SHRA_R.PH %s, %s, %s", rt, rs, sa);
14256 * 3 2 1
14257 * 10987654321098765432109876543210
14258 * 001000 01001001101
14259 * rt -----
14260 * rs -----
14261 * rd -----
14263 std::string NMD::SHRA_R_QB(uint64 instruction)
14265 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14266 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14267 uint64 sa_value = extract_sa_15_14_13(instruction);
14269 std::string rt = GPR(copy(rt_value));
14270 std::string rs = GPR(copy(rs_value));
14271 std::string sa = IMMEDIATE(copy(sa_value));
14273 return img::format("SHRA_R.QB %s, %s, %s", rt, rs, sa);
14280 * 3 2 1
14281 * 10987654321098765432109876543210
14282 * 001000 01001001101
14283 * rt -----
14284 * rs -----
14285 * rd -----
14287 std::string NMD::SHRA_R_W(uint64 instruction)
14289 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14290 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14291 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
14293 std::string rt = GPR(copy(rt_value));
14294 std::string rs = GPR(copy(rs_value));
14295 std::string sa = IMMEDIATE(copy(sa_value));
14297 return img::format("SHRA_R.W %s, %s, %s", rt, rs, sa);
14304 * 3 2 1
14305 * 10987654321098765432109876543210
14306 * 001000 01001001101
14307 * rt -----
14308 * rs -----
14309 * rd -----
14311 std::string NMD::SHRAV_PH(uint64 instruction)
14313 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14314 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14315 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14317 std::string rd = GPR(copy(rd_value));
14318 std::string rt = GPR(copy(rt_value));
14319 std::string rs = GPR(copy(rs_value));
14321 return img::format("SHRAV.PH %s, %s, %s", rd, rt, rs);
14328 * 3 2 1
14329 * 10987654321098765432109876543210
14330 * 001000 01001001101
14331 * rt -----
14332 * rs -----
14333 * rd -----
14335 std::string NMD::SHRAV_QB(uint64 instruction)
14337 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14338 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14339 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14341 std::string rd = GPR(copy(rd_value));
14342 std::string rt = GPR(copy(rt_value));
14343 std::string rs = GPR(copy(rs_value));
14345 return img::format("SHRAV.QB %s, %s, %s", rd, rt, rs);
14352 * 3 2 1
14353 * 10987654321098765432109876543210
14354 * 001000 01001001101
14355 * rt -----
14356 * rs -----
14357 * rd -----
14359 std::string NMD::SHRAV_R_PH(uint64 instruction)
14361 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14362 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14363 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14365 std::string rd = GPR(copy(rd_value));
14366 std::string rt = GPR(copy(rt_value));
14367 std::string rs = GPR(copy(rs_value));
14369 return img::format("SHRAV_R.PH %s, %s, %s", rd, rt, rs);
14376 * 3 2 1
14377 * 10987654321098765432109876543210
14378 * 001000 01001001101
14379 * rt -----
14380 * rs -----
14381 * rd -----
14383 std::string NMD::SHRAV_R_QB(uint64 instruction)
14385 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14386 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14387 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14389 std::string rd = GPR(copy(rd_value));
14390 std::string rt = GPR(copy(rt_value));
14391 std::string rs = GPR(copy(rs_value));
14393 return img::format("SHRAV_R.QB %s, %s, %s", rd, rt, rs);
14400 * 3 2 1
14401 * 10987654321098765432109876543210
14402 * 001000 01001001101
14403 * rt -----
14404 * rs -----
14405 * rd -----
14407 std::string NMD::SHRAV_R_W(uint64 instruction)
14409 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14410 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14411 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14413 std::string rd = GPR(copy(rd_value));
14414 std::string rt = GPR(copy(rt_value));
14415 std::string rs = GPR(copy(rs_value));
14417 return img::format("SHRAV_R.W %s, %s, %s", rd, rt, rs);
14422 * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords
14424 * 3 2 1
14425 * 10987654321098765432109876543210
14426 * 001000 001111111111
14427 * rt -----
14428 * rs -----
14429 * sa ----
14431 std::string NMD::SHRL_PH(uint64 instruction)
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 sa_value = extract_sa_15_14_13_12(instruction);
14437 std::string rt = GPR(copy(rt_value));
14438 std::string rs = GPR(copy(rs_value));
14439 std::string sa = IMMEDIATE(copy(sa_value));
14441 return img::format("SHRL.PH %s, %s, %s", rt, rs, sa);
14446 * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes
14448 * 3 2 1
14449 * 10987654321098765432109876543210
14450 * 001000 1100001111111
14451 * rt -----
14452 * rs -----
14453 * sa ---
14455 std::string NMD::SHRL_QB(uint64 instruction)
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 sa_value = extract_sa_15_14_13(instruction);
14461 std::string rt = GPR(copy(rt_value));
14462 std::string rs = GPR(copy(rs_value));
14463 std::string sa = IMMEDIATE(copy(sa_value));
14465 return img::format("SHRL.QB %s, %s, %s", rt, rs, sa);
14470 * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of
14471 * halfwords
14473 * 3 2 1
14474 * 10987654321098765432109876543210
14475 * 001000 x1100010101
14476 * rt -----
14477 * rs -----
14478 * rd -----
14480 std::string NMD::SHRLV_PH(uint64 instruction)
14482 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14483 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14484 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14486 std::string rd = GPR(copy(rd_value));
14487 std::string rt = GPR(copy(rt_value));
14488 std::string rs = GPR(copy(rs_value));
14490 return img::format("SHRLV.PH %s, %s, %s", rd, rt, rs);
14495 * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes
14497 * 3 2 1
14498 * 10987654321098765432109876543210
14499 * 001000 x1101010101
14500 * rt -----
14501 * rs -----
14502 * rd -----
14504 std::string NMD::SHRLV_QB(uint64 instruction)
14506 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14507 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14508 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14510 std::string rd = GPR(copy(rd_value));
14511 std::string rt = GPR(copy(rt_value));
14512 std::string rs = GPR(copy(rs_value));
14514 return img::format("SHRLV.QB %s, %s, %s", rd, rt, rs);
14521 * 3 2 1
14522 * 10987654321098765432109876543210
14523 * 001000 01001001101
14524 * rt -----
14525 * rs -----
14526 * rd -----
14528 std::string NMD::SHX(uint64 instruction)
14530 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14531 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14532 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14534 std::string rd = GPR(copy(rd_value));
14535 std::string rs = GPR(copy(rs_value));
14536 std::string rt = GPR(copy(rt_value));
14538 return img::format("SHX %s, %s(%s)", rd, rs, rt);
14545 * 3 2 1
14546 * 10987654321098765432109876543210
14547 * 001000 01001001101
14548 * rt -----
14549 * rs -----
14550 * rd -----
14552 std::string NMD::SHXS(uint64 instruction)
14554 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14555 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14556 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14558 std::string rd = GPR(copy(rd_value));
14559 std::string rs = GPR(copy(rs_value));
14560 std::string rt = GPR(copy(rt_value));
14562 return img::format("SHXS %s, %s(%s)", rd, rs, rt);
14569 * 3 2 1
14570 * 10987654321098765432109876543210
14571 * 001000 01001001101
14572 * rt -----
14573 * rs -----
14574 * rd -----
14576 std::string NMD::SIGRIE(uint64 instruction)
14578 uint64 code_value = extract_code_18_to_0(instruction);
14580 std::string code = IMMEDIATE(copy(code_value));
14582 return img::format("SIGRIE %s", code);
14589 * 3 2 1
14590 * 10987654321098765432109876543210
14591 * 001000 01001001101
14592 * rt -----
14593 * rs -----
14594 * rd -----
14596 std::string NMD::SLL_16_(uint64 instruction)
14598 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14599 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14600 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14602 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
14603 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
14604 std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));
14606 return img::format("SLL %s, %s, %s", rt3, rs3, shift3);
14613 * 3 2 1
14614 * 10987654321098765432109876543210
14615 * 001000 01001001101
14616 * rt -----
14617 * rs -----
14618 * rd -----
14620 std::string NMD::SLL_32_(uint64 instruction)
14622 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14623 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14624 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14626 std::string rt = GPR(copy(rt_value));
14627 std::string rs = GPR(copy(rs_value));
14628 std::string shift = IMMEDIATE(copy(shift_value));
14630 return img::format("SLL %s, %s, %s", rt, rs, shift);
14637 * 3 2 1
14638 * 10987654321098765432109876543210
14639 * 001000 01001001101
14640 * rt -----
14641 * rs -----
14642 * rd -----
14644 std::string NMD::SLLV(uint64 instruction)
14646 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14647 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14648 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14650 std::string rd = GPR(copy(rd_value));
14651 std::string rs = GPR(copy(rs_value));
14652 std::string rt = GPR(copy(rt_value));
14654 return img::format("SLLV %s, %s, %s", rd, rs, rt);
14661 * 3 2 1
14662 * 10987654321098765432109876543210
14663 * 001000 01001001101
14664 * rt -----
14665 * rs -----
14666 * rd -----
14668 std::string NMD::SLT(uint64 instruction)
14670 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14671 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14672 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14674 std::string rd = GPR(copy(rd_value));
14675 std::string rs = GPR(copy(rs_value));
14676 std::string rt = GPR(copy(rt_value));
14678 return img::format("SLT %s, %s, %s", rd, rs, rt);
14685 * 3 2 1
14686 * 10987654321098765432109876543210
14687 * 001000 01001001101
14688 * rt -----
14689 * rs -----
14690 * rd -----
14692 std::string NMD::SLTI(uint64 instruction)
14694 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14695 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14696 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14698 std::string rt = GPR(copy(rt_value));
14699 std::string rs = GPR(copy(rs_value));
14700 std::string u = IMMEDIATE(copy(u_value));
14702 return img::format("SLTI %s, %s, %s", rt, rs, u);
14709 * 3 2 1
14710 * 10987654321098765432109876543210
14711 * 001000 01001001101
14712 * rt -----
14713 * rs -----
14714 * rd -----
14716 std::string NMD::SLTIU(uint64 instruction)
14718 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14719 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14720 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14722 std::string rt = GPR(copy(rt_value));
14723 std::string rs = GPR(copy(rs_value));
14724 std::string u = IMMEDIATE(copy(u_value));
14726 return img::format("SLTIU %s, %s, %s", rt, rs, u);
14733 * 3 2 1
14734 * 10987654321098765432109876543210
14735 * 001000 01001001101
14736 * rt -----
14737 * rs -----
14738 * rd -----
14740 std::string NMD::SLTU(uint64 instruction)
14742 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14743 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14744 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14746 std::string rd = GPR(copy(rd_value));
14747 std::string rs = GPR(copy(rs_value));
14748 std::string rt = GPR(copy(rt_value));
14750 return img::format("SLTU %s, %s, %s", rd, rs, rt);
14757 * 3 2 1
14758 * 10987654321098765432109876543210
14759 * 001000 01001001101
14760 * rt -----
14761 * rs -----
14762 * rd -----
14764 std::string NMD::SOV(uint64 instruction)
14766 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14767 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14768 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14770 std::string rd = GPR(copy(rd_value));
14771 std::string rs = GPR(copy(rs_value));
14772 std::string rt = GPR(copy(rt_value));
14774 return img::format("SOV %s, %s, %s", rd, rs, rt);
14781 * 3 2 1
14782 * 10987654321098765432109876543210
14783 * 001000 01001001101
14784 * rt -----
14785 * rs -----
14786 * rd -----
14788 std::string NMD::SPECIAL2(uint64 instruction)
14790 uint64 op_value = extract_op_25_to_3(instruction);
14792 std::string op = IMMEDIATE(copy(op_value));
14794 return img::format("SPECIAL2 %s", op);
14801 * 3 2 1
14802 * 10987654321098765432109876543210
14803 * 001000 01001001101
14804 * rt -----
14805 * rs -----
14806 * rd -----
14808 std::string NMD::SQRT_D(uint64 instruction)
14810 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14811 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14813 std::string ft = FPR(copy(ft_value));
14814 std::string fs = FPR(copy(fs_value));
14816 return img::format("SQRT.D %s, %s", ft, fs);
14823 * 3 2 1
14824 * 10987654321098765432109876543210
14825 * 001000 01001001101
14826 * rt -----
14827 * rs -----
14828 * rd -----
14830 std::string NMD::SQRT_S(uint64 instruction)
14832 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14833 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14835 std::string ft = FPR(copy(ft_value));
14836 std::string fs = FPR(copy(fs_value));
14838 return img::format("SQRT.S %s, %s", ft, fs);
14843 * SRA rd, rt, sa - Shift Word Right Arithmetic
14845 * 3 2 1
14846 * 10987654321098765432109876543210
14847 * 00000000000 000011
14848 * rt -----
14849 * rd -----
14850 * sa -----
14852 std::string NMD::SRA(uint64 instruction)
14854 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14855 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14856 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14858 std::string rt = GPR(copy(rt_value));
14859 std::string rs = GPR(copy(rs_value));
14860 std::string shift = IMMEDIATE(copy(shift_value));
14862 return img::format("SRA %s, %s, %s", rt, rs, shift);
14867 * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
14869 * 3 2 1
14870 * 10987654321098765432109876543210
14871 * 001000 00000000111
14872 * rs -----
14873 * rt -----
14874 * rd -----
14876 std::string NMD::SRAV(uint64 instruction)
14878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14880 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14882 std::string rd = GPR(copy(rd_value));
14883 std::string rs = GPR(copy(rs_value));
14884 std::string rt = GPR(copy(rt_value));
14886 return img::format("SRAV %s, %s, %s", rd, rs, rt);
14893 * 3 2 1
14894 * 10987654321098765432109876543210
14895 * 001000 00000000111
14896 * rs -----
14897 * rt -----
14898 * rd -----
14900 std::string NMD::SRL_16_(uint64 instruction)
14902 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14903 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14904 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14906 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
14907 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
14908 std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));
14910 return img::format("SRL %s, %s, %s", rt3, rs3, shift3);
14917 * 3 2 1
14918 * 10987654321098765432109876543210
14919 * 001000 01001001101
14920 * rt -----
14921 * rs -----
14922 * rd -----
14924 std::string NMD::SRL_32_(uint64 instruction)
14926 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14927 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14928 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14930 std::string rt = GPR(copy(rt_value));
14931 std::string rs = GPR(copy(rs_value));
14932 std::string shift = IMMEDIATE(copy(shift_value));
14934 return img::format("SRL %s, %s, %s", rt, rs, shift);
14941 * 3 2 1
14942 * 10987654321098765432109876543210
14943 * 001000 01001001101
14944 * rt -----
14945 * rs -----
14946 * rd -----
14948 std::string NMD::SRLV(uint64 instruction)
14950 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14951 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14952 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14954 std::string rd = GPR(copy(rd_value));
14955 std::string rs = GPR(copy(rs_value));
14956 std::string rt = GPR(copy(rt_value));
14958 return img::format("SRLV %s, %s, %s", rd, rs, rt);
14965 * 3 2 1
14966 * 10987654321098765432109876543210
14967 * 001000 01001001101
14968 * rt -----
14969 * rs -----
14970 * rd -----
14972 std::string NMD::SUB(uint64 instruction)
14974 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14975 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14976 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14978 std::string rd = GPR(copy(rd_value));
14979 std::string rs = GPR(copy(rs_value));
14980 std::string rt = GPR(copy(rt_value));
14982 return img::format("SUB %s, %s, %s", rd, rs, rt);
14989 * 3 2 1
14990 * 10987654321098765432109876543210
14991 * 001000 01001001101
14992 * rt -----
14993 * rs -----
14994 * rd -----
14996 std::string NMD::SUB_D(uint64 instruction)
14998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
15002 std::string fd = FPR(copy(fd_value));
15003 std::string fs = FPR(copy(fs_value));
15004 std::string ft = FPR(copy(ft_value));
15006 return img::format("SUB.D %s, %s, %s", fd, fs, ft);
15013 * 3 2 1
15014 * 10987654321098765432109876543210
15015 * 001000 01001001101
15016 * rt -----
15017 * rs -----
15018 * rd -----
15020 std::string NMD::SUB_S(uint64 instruction)
15022 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15023 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15024 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
15026 std::string fd = FPR(copy(fd_value));
15027 std::string fs = FPR(copy(fs_value));
15028 std::string ft = FPR(copy(ft_value));
15030 return img::format("SUB.S %s, %s, %s", fd, fs, ft);
15037 * 3 2 1
15038 * 10987654321098765432109876543210
15039 * 001000 01001001101
15040 * rt -----
15041 * rs -----
15042 * rd -----
15044 std::string NMD::SUBQ_PH(uint64 instruction)
15046 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15047 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15048 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15050 std::string rd = GPR(copy(rd_value));
15051 std::string rs = GPR(copy(rs_value));
15052 std::string rt = GPR(copy(rt_value));
15054 return img::format("SUBQ.PH %s, %s, %s", rd, rs, rt);
15059 * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15060 * right to halve results
15062 * 3 2 1
15063 * 10987654321098765432109876543210
15064 * 001000 01001001101
15065 * rt -----
15066 * rs -----
15067 * rd -----
15069 std::string NMD::SUBQ_S_PH(uint64 instruction)
15071 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15072 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15073 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15075 std::string rd = GPR(copy(rd_value));
15076 std::string rs = GPR(copy(rs_value));
15077 std::string rt = GPR(copy(rt_value));
15079 return img::format("SUBQ_S.PH %s, %s, %s", rd, rs, rt);
15084 * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift
15085 * right to halve results
15087 * 3 2 1
15088 * 10987654321098765432109876543210
15089 * 001000 01001001101
15090 * rt -----
15091 * rs -----
15092 * rd -----
15094 std::string NMD::SUBQ_S_W(uint64 instruction)
15096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15098 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15100 std::string rd = GPR(copy(rd_value));
15101 std::string rs = GPR(copy(rs_value));
15102 std::string rt = GPR(copy(rt_value));
15104 return img::format("SUBQ_S.W %s, %s, %s", rd, rs, rt);
15109 * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15110 * right to halve results
15112 * 3 2 1
15113 * 10987654321098765432109876543210
15114 * 001000 01001001101
15115 * rt -----
15116 * rs -----
15117 * rd -----
15119 std::string NMD::SUBQH_PH(uint64 instruction)
15121 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15122 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15123 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15125 std::string rd = GPR(copy(rd_value));
15126 std::string rs = GPR(copy(rs_value));
15127 std::string rt = GPR(copy(rt_value));
15129 return img::format("SUBQH.PH %s, %s, %s", rd, rs, rt);
15134 * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15135 * right to halve results
15137 * 3 2 1
15138 * 10987654321098765432109876543210
15139 * 001000 01001001101
15140 * rt -----
15141 * rs -----
15142 * rd -----
15144 std::string NMD::SUBQH_R_PH(uint64 instruction)
15146 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15147 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15148 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15150 std::string rd = GPR(copy(rd_value));
15151 std::string rs = GPR(copy(rs_value));
15152 std::string rt = GPR(copy(rt_value));
15154 return img::format("SUBQH_R.PH %s, %s, %s", rd, rs, rt);
15159 * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift
15160 * right to halve results with rounding
15162 * 3 2 1
15163 * 10987654321098765432109876543210
15164 * 001000 11001001101
15165 * rt -----
15166 * rs -----
15167 * rd -----
15169 std::string NMD::SUBQH_R_W(uint64 instruction)
15171 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15172 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15173 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15175 std::string rd = GPR(copy(rd_value));
15176 std::string rs = GPR(copy(rs_value));
15177 std::string rt = GPR(copy(rt_value));
15179 return img::format("SUBQH_R.W %s, %s, %s", rd, rs, rt);
15184 * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to
15185 * halve results
15187 * 3 2 1
15188 * 10987654321098765432109876543210
15189 * 001000 01010001101
15190 * rt -----
15191 * rs -----
15192 * rd -----
15194 std::string NMD::SUBQH_W(uint64 instruction)
15196 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15197 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15198 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15200 std::string rd = GPR(copy(rd_value));
15201 std::string rs = GPR(copy(rs_value));
15202 std::string rt = GPR(copy(rt_value));
15204 return img::format("SUBQH.W %s, %s, %s", rd, rs, rt);
15209 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15211 * 3 2 1
15212 * 10987654321098765432109876543210
15213 * 001000 00010001101
15214 * rt -----
15215 * rs -----
15216 * rd -----
15218 std::string NMD::SUBU_16_(uint64 instruction)
15220 uint64 rt3_value = extract_rt3_9_8_7(instruction);
15221 uint64 rs3_value = extract_rs3_6_5_4(instruction);
15222 uint64 rd3_value = extract_rd3_3_2_1(instruction);
15224 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
15225 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
15226 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
15228 return img::format("SUBU %s, %s, %s", rd3, rs3, rt3);
15233 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15235 * 3 2 1
15236 * 10987654321098765432109876543210
15237 * 001000 00010001101
15238 * rt -----
15239 * rs -----
15240 * rd -----
15242 std::string NMD::SUBU_32_(uint64 instruction)
15244 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15245 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15246 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15248 std::string rd = GPR(copy(rd_value));
15249 std::string rs = GPR(copy(rs_value));
15250 std::string rt = GPR(copy(rt_value));
15252 return img::format("SUBU %s, %s, %s", rd, rs, rt);
15257 * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords
15259 * 3 2 1
15260 * 10987654321098765432109876543210
15261 * 001000 01100001101
15262 * rt -----
15263 * rs -----
15264 * rd -----
15266 std::string NMD::SUBU_PH(uint64 instruction)
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.PH %s, %s, %s", rd, rs, rt);
15281 * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors
15283 * 3 2 1
15284 * 10987654321098765432109876543210
15285 * 001000 01011001101
15286 * rt -----
15287 * rs -----
15288 * rd -----
15290 std::string NMD::SUBU_QB(uint64 instruction)
15292 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15293 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15294 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15296 std::string rd = GPR(copy(rd_value));
15297 std::string rs = GPR(copy(rs_value));
15298 std::string rt = GPR(copy(rt_value));
15300 return img::format("SUBU.QB %s, %s, %s", rd, rs, rt);
15305 * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with
15306 * 8-bit saturation
15308 * 3 2 1
15309 * 10987654321098765432109876543210
15310 * 001000 11100001101
15311 * rt -----
15312 * rs -----
15313 * rd -----
15315 std::string NMD::SUBU_S_PH(uint64 instruction)
15317 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15318 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15319 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15321 std::string rd = GPR(copy(rd_value));
15322 std::string rs = GPR(copy(rs_value));
15323 std::string rt = GPR(copy(rt_value));
15325 return img::format("SUBU_S.PH %s, %s, %s", rd, rs, rt);
15330 * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with
15331 * 8-bit saturation
15333 * 3 2 1
15334 * 10987654321098765432109876543210
15335 * 001000 11011001101
15336 * rt -----
15337 * rs -----
15338 * rd -----
15340 std::string NMD::SUBU_S_QB(uint64 instruction)
15342 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15343 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15344 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15346 std::string rd = GPR(copy(rd_value));
15347 std::string rs = GPR(copy(rs_value));
15348 std::string rt = GPR(copy(rt_value));
15350 return img::format("SUBU_S.QB %s, %s, %s", rd, rs, rt);
15355 * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift
15356 * to halve results
15358 * 3 2 1
15359 * 10987654321098765432109876543210
15360 * 001000 01101001101
15361 * rt -----
15362 * rs -----
15363 * rd -----
15365 std::string NMD::SUBUH_QB(uint64 instruction)
15367 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15368 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15369 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15371 std::string rd = GPR(copy(rd_value));
15372 std::string rs = GPR(copy(rs_value));
15373 std::string rt = GPR(copy(rt_value));
15375 return img::format("SUBUH.QB %s, %s, %s", rd, rs, rt);
15380 * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift
15381 * to halve results with rounding
15383 * 3 2 1
15384 * 10987654321098765432109876543210
15385 * 001000 11101001101
15386 * rt -----
15387 * rs -----
15388 * rd -----
15390 std::string NMD::SUBUH_R_QB(uint64 instruction)
15392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15394 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15396 std::string rd = GPR(copy(rd_value));
15397 std::string rs = GPR(copy(rs_value));
15398 std::string rt = GPR(copy(rt_value));
15400 return img::format("SUBUH_R.QB %s, %s, %s", rd, rs, rt);
15405 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15407 * 3 2 1
15408 * 10987654321098765432109876543210
15409 * 001000 00010001101
15410 * rt -----
15411 * rs -----
15412 * rd -----
15414 std::string NMD::SW_16_(uint64 instruction)
15416 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
15417 uint64 rs3_value = extract_rs3_6_5_4(instruction);
15418 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
15420 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
15421 std::string u = IMMEDIATE(copy(u_value));
15422 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
15424 return img::format("SW %s, %s(%s)", rtz3, u, rs3);
15429 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15431 * 3 2 1
15432 * 10987654321098765432109876543210
15433 * 001000 00010001101
15434 * rt -----
15435 * rs -----
15436 * rd -----
15438 std::string NMD::SW_4X4_(uint64 instruction)
15440 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
15441 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
15442 uint64 u_value = extract_u_3_8__s2(instruction);
15444 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
15445 std::string u = IMMEDIATE(copy(u_value));
15446 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
15448 return img::format("SW %s, %s(%s)", rtz4, u, rs4);
15453 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15455 * 3 2 1
15456 * 10987654321098765432109876543210
15457 * 001000 00010001101
15458 * rt -----
15459 * rs -----
15460 * rd -----
15462 std::string NMD::SW_GP16_(uint64 instruction)
15464 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
15465 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
15467 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
15468 std::string u = IMMEDIATE(copy(u_value));
15470 return img::format("SW %s, %s($%d)", rtz3, u, 28);
15475 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15477 * 3 2 1
15478 * 10987654321098765432109876543210
15479 * 001000 00010001101
15480 * rt -----
15481 * rs -----
15482 * rd -----
15484 std::string NMD::SW_GP_(uint64 instruction)
15486 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15487 uint64 u_value = extract_u_20_to_2__s2(instruction);
15489 std::string rt = GPR(copy(rt_value));
15490 std::string u = IMMEDIATE(copy(u_value));
15492 return img::format("SW %s, %s($%d)", rt, u, 28);
15497 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15499 * 3 2 1
15500 * 10987654321098765432109876543210
15501 * 001000 00010001101
15502 * rt -----
15503 * rs -----
15504 * rd -----
15506 std::string NMD::SW_S9_(uint64 instruction)
15508 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15509 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15510 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15512 std::string rt = GPR(copy(rt_value));
15513 std::string s = IMMEDIATE(copy(s_value));
15514 std::string rs = GPR(copy(rs_value));
15516 return img::format("SW %s, %s(%s)", rt, s, rs);
15521 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15523 * 3 2 1
15524 * 10987654321098765432109876543210
15525 * 001000 00010001101
15526 * rt -----
15527 * rs -----
15528 * rd -----
15530 std::string NMD::SW_SP_(uint64 instruction)
15532 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
15533 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
15535 std::string rt = GPR(copy(rt_value));
15536 std::string u = IMMEDIATE(copy(u_value));
15538 return img::format("SW %s, %s($%d)", rt, u, 29);
15543 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15545 * 3 2 1
15546 * 10987654321098765432109876543210
15547 * 001000 00010001101
15548 * rt -----
15549 * rs -----
15550 * rd -----
15552 std::string NMD::SW_U12_(uint64 instruction)
15554 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15555 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15556 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15558 std::string rt = GPR(copy(rt_value));
15559 std::string u = IMMEDIATE(copy(u_value));
15560 std::string rs = GPR(copy(rs_value));
15562 return img::format("SW %s, %s(%s)", rt, u, rs);
15567 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15569 * 3 2 1
15570 * 10987654321098765432109876543210
15571 * 001000 00010001101
15572 * rt -----
15573 * rs -----
15574 * rd -----
15576 std::string NMD::SWC1_GP_(uint64 instruction)
15578 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15579 uint64 u_value = extract_u_17_to_2__s2(instruction);
15581 std::string ft = FPR(copy(ft_value));
15582 std::string u = IMMEDIATE(copy(u_value));
15584 return img::format("SWC1 %s, %s($%d)", ft, u, 28);
15589 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15591 * 3 2 1
15592 * 10987654321098765432109876543210
15593 * 001000 00010001101
15594 * rt -----
15595 * rs -----
15596 * rd -----
15598 std::string NMD::SWC1_S9_(uint64 instruction)
15600 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15602 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15604 std::string ft = FPR(copy(ft_value));
15605 std::string s = IMMEDIATE(copy(s_value));
15606 std::string rs = GPR(copy(rs_value));
15608 return img::format("SWC1 %s, %s(%s)", ft, s, rs);
15613 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15615 * 3 2 1
15616 * 10987654321098765432109876543210
15617 * 001000 00010001101
15618 * rt -----
15619 * rs -----
15620 * rd -----
15622 std::string NMD::SWC1_U12_(uint64 instruction)
15624 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15625 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15626 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15628 std::string ft = FPR(copy(ft_value));
15629 std::string u = IMMEDIATE(copy(u_value));
15630 std::string rs = GPR(copy(rs_value));
15632 return img::format("SWC1 %s, %s(%s)", ft, u, rs);
15637 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15639 * 3 2 1
15640 * 10987654321098765432109876543210
15641 * 001000 00010001101
15642 * rt -----
15643 * rs -----
15644 * rd -----
15646 std::string NMD::SWC1X(uint64 instruction)
15648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15650 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15652 std::string ft = FPR(copy(ft_value));
15653 std::string rs = GPR(copy(rs_value));
15654 std::string rt = GPR(copy(rt_value));
15656 return img::format("SWC1X %s, %s(%s)", ft, rs, rt);
15661 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15663 * 3 2 1
15664 * 10987654321098765432109876543210
15665 * 001000 00010001101
15666 * rt -----
15667 * rs -----
15668 * rd -----
15670 std::string NMD::SWC1XS(uint64 instruction)
15672 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15673 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15674 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15676 std::string ft = FPR(copy(ft_value));
15677 std::string rs = GPR(copy(rs_value));
15678 std::string rt = GPR(copy(rt_value));
15680 return img::format("SWC1XS %s, %s(%s)", ft, rs, rt);
15685 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15687 * 3 2 1
15688 * 10987654321098765432109876543210
15689 * 001000 00010001101
15690 * rt -----
15691 * rs -----
15692 * rd -----
15694 std::string NMD::SWC2(uint64 instruction)
15696 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
15697 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15698 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15700 std::string cs = CPR(copy(cs_value));
15701 std::string s = IMMEDIATE(copy(s_value));
15702 std::string rs = GPR(copy(rs_value));
15704 return img::format("SWC2 %s, %s(%s)", cs, s, rs);
15709 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15711 * 3 2 1
15712 * 10987654321098765432109876543210
15713 * 001000 00010001101
15714 * rt -----
15715 * rs -----
15716 * rd -----
15718 std::string NMD::SWE(uint64 instruction)
15720 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15721 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15722 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15724 std::string rt = GPR(copy(rt_value));
15725 std::string s = IMMEDIATE(copy(s_value));
15726 std::string rs = GPR(copy(rs_value));
15728 return img::format("SWE %s, %s(%s)", rt, s, rs);
15733 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15735 * 3 2 1
15736 * 10987654321098765432109876543210
15737 * 001000 00010001101
15738 * rt -----
15739 * rs -----
15740 * rd -----
15742 std::string NMD::SWM(uint64 instruction)
15744 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15745 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15746 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15747 uint64 count3_value = extract_count3_14_13_12(instruction);
15749 std::string rt = GPR(copy(rt_value));
15750 std::string s = IMMEDIATE(copy(s_value));
15751 std::string rs = GPR(copy(rs_value));
15752 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
15754 return img::format("SWM %s, %s(%s), %s", rt, s, rs, count3);
15759 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15761 * 3 2 1
15762 * 10987654321098765432109876543210
15763 * 001000 00010001101
15764 * rt -----
15765 * rs -----
15766 * rd -----
15768 std::string NMD::SWPC_48_(uint64 instruction)
15770 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
15771 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
15773 std::string rt = GPR(copy(rt_value));
15774 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
15776 return img::format("SWPC %s, %s", rt, s);
15781 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15783 * 3 2 1
15784 * 10987654321098765432109876543210
15785 * 001000 00010001101
15786 * rt -----
15787 * rs -----
15788 * rd -----
15790 std::string NMD::SWX(uint64 instruction)
15792 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15793 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15794 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15796 std::string rd = GPR(copy(rd_value));
15797 std::string rs = GPR(copy(rs_value));
15798 std::string rt = GPR(copy(rt_value));
15800 return img::format("SWX %s, %s(%s)", rd, rs, rt);
15805 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15807 * 3 2 1
15808 * 10987654321098765432109876543210
15809 * 001000 00010001101
15810 * rt -----
15811 * rs -----
15812 * rd -----
15814 std::string NMD::SWXS(uint64 instruction)
15816 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15817 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15818 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15820 std::string rd = GPR(copy(rd_value));
15821 std::string rs = GPR(copy(rs_value));
15822 std::string rt = GPR(copy(rt_value));
15824 return img::format("SWXS %s, %s(%s)", rd, rs, rt);
15829 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15831 * 3 2 1
15832 * 10987654321098765432109876543210
15833 * 001000 00010001101
15834 * rt -----
15835 * rs -----
15836 * rd -----
15838 std::string NMD::SYNC(uint64 instruction)
15840 uint64 stype_value = extract_stype_20_19_18_17_16(instruction);
15842 std::string stype = IMMEDIATE(copy(stype_value));
15844 return img::format("SYNC %s", stype);
15849 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15851 * 3 2 1
15852 * 10987654321098765432109876543210
15853 * 001000 00010001101
15854 * rt -----
15855 * rs -----
15856 * rd -----
15858 std::string NMD::SYNCI(uint64 instruction)
15860 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15861 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15863 std::string s = IMMEDIATE(copy(s_value));
15864 std::string rs = GPR(copy(rs_value));
15866 return img::format("SYNCI %s(%s)", s, rs);
15871 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15873 * 3 2 1
15874 * 10987654321098765432109876543210
15875 * 001000 00010001101
15876 * rt -----
15877 * rs -----
15878 * rd -----
15880 std::string NMD::SYNCIE(uint64 instruction)
15882 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15883 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15885 std::string s = IMMEDIATE(copy(s_value));
15886 std::string rs = GPR(copy(rs_value));
15888 return img::format("SYNCIE %s(%s)", s, rs);
15893 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15895 * 3 2 1
15896 * 10987654321098765432109876543210
15897 * 001000 00010001101
15898 * rt -----
15899 * rs -----
15900 * rd -----
15902 std::string NMD::SYSCALL_16_(uint64 instruction)
15904 uint64 code_value = extract_code_1_0(instruction);
15906 std::string code = IMMEDIATE(copy(code_value));
15908 return img::format("SYSCALL %s", code);
15913 * SYSCALL code - System Call. Cause a System Call Exception
15915 * 3 2 1
15916 * 10987654321098765432109876543210
15917 * 00000000000010
15918 * code ------------------
15920 std::string NMD::SYSCALL_32_(uint64 instruction)
15922 uint64 code_value = extract_code_17_to_0(instruction);
15924 std::string code = IMMEDIATE(copy(code_value));
15926 return img::format("SYSCALL %s", code);
15931 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15933 * 3 2 1
15934 * 10987654321098765432109876543210
15935 * 001000 00010001101
15936 * rt -----
15937 * rs -----
15938 * rd -----
15940 std::string NMD::TEQ(uint64 instruction)
15942 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15943 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15945 std::string rs = GPR(copy(rs_value));
15946 std::string rt = GPR(copy(rt_value));
15948 return img::format("TEQ %s, %s", rs, rt);
15953 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15955 * 3 2 1
15956 * 10987654321098765432109876543210
15957 * 001000 00010001101
15958 * rt -----
15959 * rs -----
15960 * rd -----
15962 std::string NMD::TLBGINV(uint64 instruction)
15964 (void)instruction;
15966 return "TLBGINV ";
15971 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15973 * 3 2 1
15974 * 10987654321098765432109876543210
15975 * 001000 00010001101
15976 * rt -----
15977 * rs -----
15978 * rd -----
15980 std::string NMD::TLBGINVF(uint64 instruction)
15982 (void)instruction;
15984 return "TLBGINVF ";
15989 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15991 * 3 2 1
15992 * 10987654321098765432109876543210
15993 * 001000 00010001101
15994 * rt -----
15995 * rs -----
15996 * rd -----
15998 std::string NMD::TLBGP(uint64 instruction)
16000 (void)instruction;
16002 return "TLBGP ";
16007 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16009 * 3 2 1
16010 * 10987654321098765432109876543210
16011 * 001000 00010001101
16012 * rt -----
16013 * rs -----
16014 * rd -----
16016 std::string NMD::TLBGR(uint64 instruction)
16018 (void)instruction;
16020 return "TLBGR ";
16025 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16027 * 3 2 1
16028 * 10987654321098765432109876543210
16029 * 001000 00010001101
16030 * rt -----
16031 * rs -----
16032 * rd -----
16034 std::string NMD::TLBGWI(uint64 instruction)
16036 (void)instruction;
16038 return "TLBGWI ";
16043 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16045 * 3 2 1
16046 * 10987654321098765432109876543210
16047 * 001000 00010001101
16048 * rt -----
16049 * rs -----
16050 * rd -----
16052 std::string NMD::TLBGWR(uint64 instruction)
16054 (void)instruction;
16056 return "TLBGWR ";
16061 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16063 * 3 2 1
16064 * 10987654321098765432109876543210
16065 * 001000 00010001101
16066 * rt -----
16067 * rs -----
16068 * rd -----
16070 std::string NMD::TLBINV(uint64 instruction)
16072 (void)instruction;
16074 return "TLBINV ";
16079 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16081 * 3 2 1
16082 * 10987654321098765432109876543210
16083 * 001000 00010001101
16084 * rt -----
16085 * rs -----
16086 * rd -----
16088 std::string NMD::TLBINVF(uint64 instruction)
16090 (void)instruction;
16092 return "TLBINVF ";
16097 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16099 * 3 2 1
16100 * 10987654321098765432109876543210
16101 * 001000 00010001101
16102 * rt -----
16103 * rs -----
16104 * rd -----
16106 std::string NMD::TLBP(uint64 instruction)
16108 (void)instruction;
16110 return "TLBP ";
16115 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16117 * 3 2 1
16118 * 10987654321098765432109876543210
16119 * 001000 00010001101
16120 * rt -----
16121 * rs -----
16122 * rd -----
16124 std::string NMD::TLBR(uint64 instruction)
16126 (void)instruction;
16128 return "TLBR ";
16133 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16135 * 3 2 1
16136 * 10987654321098765432109876543210
16137 * 001000 00010001101
16138 * rt -----
16139 * rs -----
16140 * rd -----
16142 std::string NMD::TLBWI(uint64 instruction)
16144 (void)instruction;
16146 return "TLBWI ";
16151 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16153 * 3 2 1
16154 * 10987654321098765432109876543210
16155 * 001000 00010001101
16156 * rt -----
16157 * rs -----
16158 * rd -----
16160 std::string NMD::TLBWR(uint64 instruction)
16162 (void)instruction;
16164 return "TLBWR ";
16169 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16171 * 3 2 1
16172 * 10987654321098765432109876543210
16173 * 001000 00010001101
16174 * rt -----
16175 * rs -----
16176 * rd -----
16178 std::string NMD::TNE(uint64 instruction)
16180 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16181 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16183 std::string rs = GPR(copy(rs_value));
16184 std::string rt = GPR(copy(rt_value));
16186 return img::format("TNE %s, %s", rs, rt);
16191 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16193 * 3 2 1
16194 * 10987654321098765432109876543210
16195 * 001000 00010001101
16196 * rt -----
16197 * rs -----
16198 * rd -----
16200 std::string NMD::TRUNC_L_D(uint64 instruction)
16202 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16203 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16205 std::string ft = FPR(copy(ft_value));
16206 std::string fs = FPR(copy(fs_value));
16208 return img::format("TRUNC.L.D %s, %s", ft, fs);
16213 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16215 * 3 2 1
16216 * 10987654321098765432109876543210
16217 * 001000 00010001101
16218 * rt -----
16219 * rs -----
16220 * rd -----
16222 std::string NMD::TRUNC_L_S(uint64 instruction)
16224 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16225 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16227 std::string ft = FPR(copy(ft_value));
16228 std::string fs = FPR(copy(fs_value));
16230 return img::format("TRUNC.L.S %s, %s", ft, fs);
16235 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16237 * 3 2 1
16238 * 10987654321098765432109876543210
16239 * 001000 00010001101
16240 * rt -----
16241 * rs -----
16242 * rd -----
16244 std::string NMD::TRUNC_W_D(uint64 instruction)
16246 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16247 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16249 std::string ft = FPR(copy(ft_value));
16250 std::string fs = FPR(copy(fs_value));
16252 return img::format("TRUNC.W.D %s, %s", ft, fs);
16257 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16259 * 3 2 1
16260 * 10987654321098765432109876543210
16261 * 001000 00010001101
16262 * rt -----
16263 * rs -----
16264 * rd -----
16266 std::string NMD::TRUNC_W_S(uint64 instruction)
16268 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16269 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16271 std::string ft = FPR(copy(ft_value));
16272 std::string fs = FPR(copy(fs_value));
16274 return img::format("TRUNC.W.S %s, %s", ft, fs);
16279 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16281 * 3 2 1
16282 * 10987654321098765432109876543210
16283 * 001000 00010001101
16284 * rt -----
16285 * rs -----
16286 * rd -----
16288 std::string NMD::UALDM(uint64 instruction)
16290 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16291 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16292 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16293 uint64 count3_value = extract_count3_14_13_12(instruction);
16295 std::string rt = GPR(copy(rt_value));
16296 std::string s = IMMEDIATE(copy(s_value));
16297 std::string rs = GPR(copy(rs_value));
16298 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16300 return img::format("UALDM %s, %s(%s), %s", rt, s, rs, count3);
16305 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16307 * 3 2 1
16308 * 10987654321098765432109876543210
16309 * 001000 00010001101
16310 * rt -----
16311 * rs -----
16312 * rd -----
16314 std::string NMD::UALH(uint64 instruction)
16316 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16317 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16318 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16320 std::string rt = GPR(copy(rt_value));
16321 std::string s = IMMEDIATE(copy(s_value));
16322 std::string rs = GPR(copy(rs_value));
16324 return img::format("UALH %s, %s(%s)", rt, s, rs);
16329 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16331 * 3 2 1
16332 * 10987654321098765432109876543210
16333 * 001000 00010001101
16334 * rt -----
16335 * rs -----
16336 * rd -----
16338 std::string NMD::UALWM(uint64 instruction)
16340 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16341 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16342 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16343 uint64 count3_value = extract_count3_14_13_12(instruction);
16345 std::string rt = GPR(copy(rt_value));
16346 std::string s = IMMEDIATE(copy(s_value));
16347 std::string rs = GPR(copy(rs_value));
16348 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16350 return img::format("UALWM %s, %s(%s), %s", rt, s, rs, count3);
16355 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16357 * 3 2 1
16358 * 10987654321098765432109876543210
16359 * 001000 00010001101
16360 * rt -----
16361 * rs -----
16362 * rd -----
16364 std::string NMD::UASDM(uint64 instruction)
16366 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16367 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16368 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16369 uint64 count3_value = extract_count3_14_13_12(instruction);
16371 std::string rt = GPR(copy(rt_value));
16372 std::string s = IMMEDIATE(copy(s_value));
16373 std::string rs = GPR(copy(rs_value));
16374 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16376 return img::format("UASDM %s, %s(%s), %s", rt, s, rs, count3);
16381 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16383 * 3 2 1
16384 * 10987654321098765432109876543210
16385 * 001000 00010001101
16386 * rt -----
16387 * rs -----
16388 * rd -----
16390 std::string NMD::UASH(uint64 instruction)
16392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16394 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16396 std::string rt = GPR(copy(rt_value));
16397 std::string s = IMMEDIATE(copy(s_value));
16398 std::string rs = GPR(copy(rs_value));
16400 return img::format("UASH %s, %s(%s)", rt, s, rs);
16405 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16407 * 3 2 1
16408 * 10987654321098765432109876543210
16409 * 001000 00010001101
16410 * rt -----
16411 * rs -----
16412 * rd -----
16414 std::string NMD::UASWM(uint64 instruction)
16416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16417 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16418 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16419 uint64 count3_value = extract_count3_14_13_12(instruction);
16421 std::string rt = GPR(copy(rt_value));
16422 std::string s = IMMEDIATE(copy(s_value));
16423 std::string rs = GPR(copy(rs_value));
16424 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16426 return img::format("UASWM %s, %s(%s), %s", rt, s, rs, count3);
16431 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16433 * 3 2 1
16434 * 10987654321098765432109876543210
16435 * 001000 00010001101
16436 * rt -----
16437 * rs -----
16438 * rd -----
16440 std::string NMD::UDI(uint64 instruction)
16442 uint64 op_value = extract_op_25_to_3(instruction);
16444 std::string op = IMMEDIATE(copy(op_value));
16446 return img::format("UDI %s", op);
16451 * WAIT code - Enter Wait State
16453 * 3 2 1
16454 * 10987654321098765432109876543210
16455 * 001000 1100001101111111
16456 * code ----------
16458 std::string NMD::WAIT(uint64 instruction)
16460 uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction);
16462 std::string code = IMMEDIATE(copy(code_value));
16464 return img::format("WAIT %s", code);
16469 * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl
16470 * register
16472 * 3 2 1
16473 * 10987654321098765432109876543210
16474 * 001000 01011001111111
16475 * rt -----
16476 * mask -------
16478 std::string NMD::WRDSP(uint64 instruction)
16480 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16481 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
16483 std::string rt = GPR(copy(rt_value));
16484 std::string mask = IMMEDIATE(copy(mask_value));
16486 return img::format("WRDSP %s, %s", rt, mask);
16491 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16493 * 3 2 1
16494 * 10987654321098765432109876543210
16495 * 001000 00010001101
16496 * rt -----
16497 * rs -----
16498 * rd -----
16500 std::string NMD::WRPGPR(uint64 instruction)
16502 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16503 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16505 std::string rt = GPR(copy(rt_value));
16506 std::string rs = GPR(copy(rs_value));
16508 return img::format("WRPGPR %s, %s", rt, rs);
16513 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16515 * 3 2 1
16516 * 10987654321098765432109876543210
16517 * 001000 00010001101
16518 * rt -----
16519 * rs -----
16520 * rd -----
16522 std::string NMD::XOR_16_(uint64 instruction)
16524 uint64 rt3_value = extract_rt3_9_8_7(instruction);
16525 uint64 rs3_value = extract_rs3_6_5_4(instruction);
16527 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
16528 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
16530 return img::format("XOR %s, %s", rs3, rt3);
16535 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16537 * 3 2 1
16538 * 10987654321098765432109876543210
16539 * 001000 00010001101
16540 * rt -----
16541 * rs -----
16542 * rd -----
16544 std::string NMD::XOR_32_(uint64 instruction)
16546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16548 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
16550 std::string rd = GPR(copy(rd_value));
16551 std::string rs = GPR(copy(rs_value));
16552 std::string rt = GPR(copy(rt_value));
16554 return img::format("XOR %s, %s, %s", rd, rs, rt);
16559 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16561 * 3 2 1
16562 * 10987654321098765432109876543210
16563 * 001000 00010001101
16564 * rt -----
16565 * rs -----
16566 * rd -----
16568 std::string NMD::XORI(uint64 instruction)
16570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16572 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
16574 std::string rt = GPR(copy(rt_value));
16575 std::string rs = GPR(copy(rs_value));
16576 std::string u = IMMEDIATE(copy(u_value));
16578 return img::format("XORI %s, %s, %s", rt, rs, u);
16583 * YIELD rt, rs -
16585 * 3 2 1
16586 * 10987654321098765432109876543210
16587 * 001000 00010001101
16588 * rt -----
16589 * rs -----
16591 std::string NMD::YIELD(uint64 instruction)
16593 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16594 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16596 std::string rt = GPR(copy(rt_value));
16597 std::string rs = GPR(copy(rs_value));
16599 return img::format("YIELD %s, %s", rt, rs);
16605 * nanoMIPS instruction pool organization
16606 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16609 * ā”Œā”€ P.ADDIU ā”€ā”€ā”€ P.RI ā”€ā”€ā”€ P.SYSCALL
16610 * ā”‚
16611 * ā”‚ ā”Œā”€ P.TRAP
16612 * ā”‚ ā”‚
16613 * ā”‚ ā”Œā”€ _POOL32A0_0 ā”€ā”¼ā”€ P.CMOVE
16614 * ā”‚ ā”‚ ā”‚
16615 * ā”‚ ā”‚ ā””ā”€ P.SLTU
16616 * ā”‚ ā”Œā”€ _POOL32A0 ā”€ā”¤
16617 * ā”‚ ā”‚ ā”‚
16618 * ā”‚ ā”‚ ā”‚
16619 * ā”‚ ā”‚ ā””ā”€ _POOL32A0_1 ā”€ā”€ā”€ CRC32
16620 * ā”‚ ā”‚
16621 * ā”œā”€ P32A ā”€ā”¤
16622 * ā”‚ ā”‚ ā”Œā”€ PP.LSX
16623 * ā”‚ ā”‚ ā”Œā”€ P.LSX ā”€ā”€ā”€ā”€ā”€ā”¤
16624 * ā”‚ ā”‚ ā”‚ ā””ā”€ PP.LSXS
16625 * ā”‚ ā””ā”€ _POOL32A7 ā”€ā”¤
16626 * ā”‚ ā”‚ ā”Œā”€ POOL32Axf_4
16627 * ā”‚ ā””ā”€ POOL32Axf ā”€ā”¤
16628 * ā”‚ ā””ā”€ POOL32Axf_5
16629 * ā”‚
16630 * ā”œā”€ PBAL
16631 * ā”‚
16632 * ā”œā”€ P.GP.W ā”Œā”€ PP.LSX
16633 * ā”Œā”€ P32 ā”€ā”¤ ā”‚
16634 * ā”‚ ā”œā”€ P.GP.BH ā”€ā”“ā”€ PP.LSXS
16635 * ā”‚ ā”‚
16636 * ā”‚ ā”œā”€ P.J ā”€ā”€ā”€ā”€ā”€ā”€ā”€ PP.BALRSC
16637 * ā”‚ ā”‚
16638 * ā”‚ ā”œā”€ P48I
16639 * ā”‚ ā”‚ ā”Œā”€ P.SR
16640 * ā”‚ ā”‚ ā”‚
16641 * ā”‚ ā”‚ ā”œā”€ P.SHIFT
16642 * ā”‚ ā”‚ ā”‚
16643 * ā”‚ ā”œā”€ P.U12 ā”€ā”€ā”€ā”¼ā”€ P.ROTX
16644 * ā”‚ ā”‚ ā”‚
16645 * ā”‚ ā”‚ ā”œā”€ P.INS
16646 * ā”‚ ā”‚ ā”‚
16647 * ā”‚ ā”‚ ā””ā”€ P.EXT
16648 * ā”‚ ā”‚
16649 * ā”‚ ā”œā”€ P.LS.U12 ā”€ā”€ P.PREF.U12
16650 * ā”‚ ā”‚
16651 * ā”‚ ā”œā”€ P.BR1 ā”€ā”€ā”€ā”€ā”€ P.BR3A
16652 * ā”‚ ā”‚
16653 * ā”‚ ā”‚ ā”Œā”€ P.LS.S0 ā”€ā”€ā”€ P16.SYSCALL
16654 * ā”‚ ā”‚ ā”‚
16655 * ā”‚ ā”‚ ā”‚ ā”Œā”€ P.LL
16656 * ā”‚ ā”‚ ā”œā”€ P.LS.S1 ā”€ā”¤
16657 * ā”‚ ā”‚ ā”‚ ā””ā”€ P.SC
16658 * ā”‚ ā”‚ ā”‚
16659 * ā”‚ ā”‚ ā”‚ ā”Œā”€ P.PREFE
16660 * MAJOR ā”€ā”¤ ā”œā”€ P.LS.S9 ā”€ā”¤ ā”‚
16661 * ā”‚ ā”‚ ā”œā”€ P.LS.E0 ā”€ā”¼ā”€ P.LLE
16662 * ā”‚ ā”‚ ā”‚ ā”‚
16663 * ā”‚ ā”‚ ā”‚ ā””ā”€ P.SCE
16664 * ā”‚ ā”‚ ā”‚
16665 * ā”‚ ā”‚ ā”œā”€ P.LS.WM
16666 * ā”‚ ā”‚ ā”‚
16667 * ā”‚ ā”‚ ā””ā”€ P.LS.UAWM
16668 * ā”‚ ā”‚
16669 * ā”‚ ā”‚
16670 * ā”‚ ā”œā”€ P.BR2
16671 * ā”‚ ā”‚
16672 * ā”‚ ā”œā”€ P.BRI
16673 * ā”‚ ā”‚
16674 * ā”‚ ā””ā”€ P.LUI
16675 * ā”‚
16676 * ā”‚
16677 * ā”‚ ā”Œā”€ P16.MV ā”€ā”€ā”€ā”€ P16.RI ā”€ā”€ā”€ P16.SYSCALL
16678 * ā”‚ ā”‚
16679 * ā”‚ ā”œā”€ P16.SR
16680 * ā”‚ ā”‚
16681 * ā”‚ ā”œā”€ P16.SHIFT
16682 * ā”‚ ā”‚
16683 * ā”‚ ā”œā”€ P16.4x4
16684 * ā”‚ ā”‚
16685 * ā”‚ ā”œā”€ P16C ā”€ā”€ā”€ā”€ā”€ā”€ POOL16C_0 ā”€ā”€ POOL16C_00
16686 * ā”‚ ā”‚
16687 * ā””ā”€ P16 ā”€ā”¼ā”€ P16.LB
16688 * ā”‚
16689 * ā”œā”€ P16.A1
16690 * ā”‚
16691 * ā”œā”€ P16.LH
16692 * ā”‚
16693 * ā”œā”€ P16.A2 ā”€ā”€ā”€ā”€ P.ADDIU[RS5]
16694 * ā”‚
16695 * ā”œā”€ P16.ADDU
16696 * ā”‚
16697 * ā””ā”€ P16.BR ā”€ā”€ā”¬ā”€ P16.JRC
16698 * ā”‚
16699 * ā””ā”€ P16.BR1
16702 * (FP, DPS, and some minor instruction pools are omitted from the diagram)
16706 NMD::Pool NMD::P_SYSCALL[2] = {
16707 { instruction , 0 , 0 , 32,
16708 0xfffc0000, 0x00080000, &NMD::SYSCALL_32_ , 0,
16709 0x0 }, /* SYSCALL[32] */
16710 { instruction , 0 , 0 , 32,
16711 0xfffc0000, 0x000c0000, &NMD::HYPCALL , 0,
16712 CP0_ | VZ_ }, /* HYPCALL */
16716 NMD::Pool NMD::P_RI[4] = {
16717 { instruction , 0 , 0 , 32,
16718 0xfff80000, 0x00000000, &NMD::SIGRIE , 0,
16719 0x0 }, /* SIGRIE */
16720 { pool , P_SYSCALL , 2 , 32,
16721 0xfff80000, 0x00080000, 0 , 0,
16722 0x0 }, /* P.SYSCALL */
16723 { instruction , 0 , 0 , 32,
16724 0xfff80000, 0x00100000, &NMD::BREAK_32_ , 0,
16725 0x0 }, /* BREAK[32] */
16726 { instruction , 0 , 0 , 32,
16727 0xfff80000, 0x00180000, &NMD::SDBBP_32_ , 0,
16728 EJTAG_ }, /* SDBBP[32] */
16732 NMD::Pool NMD::P_ADDIU[2] = {
16733 { pool , P_RI , 4 , 32,
16734 0xffe00000, 0x00000000, 0 , 0,
16735 0x0 }, /* P.RI */
16736 { instruction , 0 , 0 , 32,
16737 0xfc000000, 0x00000000, &NMD::ADDIU_32_ , &NMD::ADDIU_32__cond ,
16738 0x0 }, /* ADDIU[32] */
16742 NMD::Pool NMD::P_TRAP[2] = {
16743 { instruction , 0 , 0 , 32,
16744 0xfc0007ff, 0x20000000, &NMD::TEQ , 0,
16745 XMMS_ }, /* TEQ */
16746 { instruction , 0 , 0 , 32,
16747 0xfc0007ff, 0x20000400, &NMD::TNE , 0,
16748 XMMS_ }, /* TNE */
16752 NMD::Pool NMD::P_CMOVE[2] = {
16753 { instruction , 0 , 0 , 32,
16754 0xfc0007ff, 0x20000210, &NMD::MOVZ , 0,
16755 0x0 }, /* MOVZ */
16756 { instruction , 0 , 0 , 32,
16757 0xfc0007ff, 0x20000610, &NMD::MOVN , 0,
16758 0x0 }, /* MOVN */
16762 NMD::Pool NMD::P_D_MT_VPE[2] = {
16763 { instruction , 0 , 0 , 32,
16764 0xfc1f3fff, 0x20010ab0, &NMD::DMT , 0,
16765 MT_ }, /* DMT */
16766 { instruction , 0 , 0 , 32,
16767 0xfc1f3fff, 0x20000ab0, &NMD::DVPE , 0,
16768 MT_ }, /* DVPE */
16772 NMD::Pool NMD::P_E_MT_VPE[2] = {
16773 { instruction , 0 , 0 , 32,
16774 0xfc1f3fff, 0x20010eb0, &NMD::EMT , 0,
16775 MT_ }, /* EMT */
16776 { instruction , 0 , 0 , 32,
16777 0xfc1f3fff, 0x20000eb0, &NMD::EVPE , 0,
16778 MT_ }, /* EVPE */
16782 NMD::Pool NMD::_P_MT_VPE[2] = {
16783 { pool , P_D_MT_VPE , 2 , 32,
16784 0xfc003fff, 0x20000ab0, 0 , 0,
16785 0x0 }, /* P.D_MT_VPE */
16786 { pool , P_E_MT_VPE , 2 , 32,
16787 0xfc003fff, 0x20000eb0, 0 , 0,
16788 0x0 }, /* P.E_MT_VPE */
16792 NMD::Pool NMD::P_MT_VPE[8] = {
16793 { reserved_block , 0 , 0 , 32,
16794 0xfc003bff, 0x200002b0, 0 , 0,
16795 0x0 }, /* P.MT_VPE~*(0) */
16796 { pool , _P_MT_VPE , 2 , 32,
16797 0xfc003bff, 0x20000ab0, 0 , 0,
16798 0x0 }, /* _P.MT_VPE */
16799 { reserved_block , 0 , 0 , 32,
16800 0xfc003bff, 0x200012b0, 0 , 0,
16801 0x0 }, /* P.MT_VPE~*(2) */
16802 { reserved_block , 0 , 0 , 32,
16803 0xfc003bff, 0x20001ab0, 0 , 0,
16804 0x0 }, /* P.MT_VPE~*(3) */
16805 { reserved_block , 0 , 0 , 32,
16806 0xfc003bff, 0x200022b0, 0 , 0,
16807 0x0 }, /* P.MT_VPE~*(4) */
16808 { reserved_block , 0 , 0 , 32,
16809 0xfc003bff, 0x20002ab0, 0 , 0,
16810 0x0 }, /* P.MT_VPE~*(5) */
16811 { reserved_block , 0 , 0 , 32,
16812 0xfc003bff, 0x200032b0, 0 , 0,
16813 0x0 }, /* P.MT_VPE~*(6) */
16814 { reserved_block , 0 , 0 , 32,
16815 0xfc003bff, 0x20003ab0, 0 , 0,
16816 0x0 }, /* P.MT_VPE~*(7) */
16820 NMD::Pool NMD::P_DVP[2] = {
16821 { instruction , 0 , 0 , 32,
16822 0xfc00ffff, 0x20000390, &NMD::DVP , 0,
16823 0x0 }, /* DVP */
16824 { instruction , 0 , 0 , 32,
16825 0xfc00ffff, 0x20000790, &NMD::EVP , 0,
16826 0x0 }, /* EVP */
16830 NMD::Pool NMD::P_SLTU[2] = {
16831 { pool , P_DVP , 2 , 32,
16832 0xfc00fbff, 0x20000390, 0 , 0,
16833 0x0 }, /* P.DVP */
16834 { instruction , 0 , 0 , 32,
16835 0xfc0003ff, 0x20000390, &NMD::SLTU , &NMD::SLTU_cond ,
16836 0x0 }, /* SLTU */
16840 NMD::Pool NMD::_POOL32A0[128] = {
16841 { pool , P_TRAP , 2 , 32,
16842 0xfc0003ff, 0x20000000, 0 , 0,
16843 0x0 }, /* P.TRAP */
16844 { instruction , 0 , 0 , 32,
16845 0xfc0003ff, 0x20000008, &NMD::SEB , 0,
16846 XMMS_ }, /* SEB */
16847 { instruction , 0 , 0 , 32,
16848 0xfc0003ff, 0x20000010, &NMD::SLLV , 0,
16849 0x0 }, /* SLLV */
16850 { instruction , 0 , 0 , 32,
16851 0xfc0003ff, 0x20000018, &NMD::MUL_32_ , 0,
16852 0x0 }, /* MUL[32] */
16853 { reserved_block , 0 , 0 , 32,
16854 0xfc0003ff, 0x20000020, 0 , 0,
16855 0x0 }, /* _POOL32A0~*(4) */
16856 { reserved_block , 0 , 0 , 32,
16857 0xfc0003ff, 0x20000028, 0 , 0,
16858 0x0 }, /* _POOL32A0~*(5) */
16859 { instruction , 0 , 0 , 32,
16860 0xfc0003ff, 0x20000030, &NMD::MFC0 , 0,
16861 0x0 }, /* MFC0 */
16862 { instruction , 0 , 0 , 32,
16863 0xfc0003ff, 0x20000038, &NMD::MFHC0 , 0,
16864 CP0_ | MVH_ }, /* MFHC0 */
16865 { reserved_block , 0 , 0 , 32,
16866 0xfc0003ff, 0x20000040, 0 , 0,
16867 0x0 }, /* _POOL32A0~*(8) */
16868 { instruction , 0 , 0 , 32,
16869 0xfc0003ff, 0x20000048, &NMD::SEH , 0,
16870 0x0 }, /* SEH */
16871 { instruction , 0 , 0 , 32,
16872 0xfc0003ff, 0x20000050, &NMD::SRLV , 0,
16873 0x0 }, /* SRLV */
16874 { instruction , 0 , 0 , 32,
16875 0xfc0003ff, 0x20000058, &NMD::MUH , 0,
16876 0x0 }, /* MUH */
16877 { reserved_block , 0 , 0 , 32,
16878 0xfc0003ff, 0x20000060, 0 , 0,
16879 0x0 }, /* _POOL32A0~*(12) */
16880 { reserved_block , 0 , 0 , 32,
16881 0xfc0003ff, 0x20000068, 0 , 0,
16882 0x0 }, /* _POOL32A0~*(13) */
16883 { instruction , 0 , 0 , 32,
16884 0xfc0003ff, 0x20000070, &NMD::MTC0 , 0,
16885 CP0_ }, /* MTC0 */
16886 { instruction , 0 , 0 , 32,
16887 0xfc0003ff, 0x20000078, &NMD::MTHC0 , 0,
16888 CP0_ | MVH_ }, /* MTHC0 */
16889 { reserved_block , 0 , 0 , 32,
16890 0xfc0003ff, 0x20000080, 0 , 0,
16891 0x0 }, /* _POOL32A0~*(16) */
16892 { reserved_block , 0 , 0 , 32,
16893 0xfc0003ff, 0x20000088, 0 , 0,
16894 0x0 }, /* _POOL32A0~*(17) */
16895 { instruction , 0 , 0 , 32,
16896 0xfc0003ff, 0x20000090, &NMD::SRAV , 0,
16897 0x0 }, /* SRAV */
16898 { instruction , 0 , 0 , 32,
16899 0xfc0003ff, 0x20000098, &NMD::MULU , 0,
16900 0x0 }, /* MULU */
16901 { reserved_block , 0 , 0 , 32,
16902 0xfc0003ff, 0x200000a0, 0 , 0,
16903 0x0 }, /* _POOL32A0~*(20) */
16904 { reserved_block , 0 , 0 , 32,
16905 0xfc0003ff, 0x200000a8, 0 , 0,
16906 0x0 }, /* _POOL32A0~*(21) */
16907 { instruction , 0 , 0 , 32,
16908 0xfc0003ff, 0x200000b0, &NMD::MFGC0 , 0,
16909 CP0_ | VZ_ }, /* MFGC0 */
16910 { instruction , 0 , 0 , 32,
16911 0xfc0003ff, 0x200000b8, &NMD::MFHGC0 , 0,
16912 CP0_ | VZ_ | MVH_ }, /* MFHGC0 */
16913 { reserved_block , 0 , 0 , 32,
16914 0xfc0003ff, 0x200000c0, 0 , 0,
16915 0x0 }, /* _POOL32A0~*(24) */
16916 { reserved_block , 0 , 0 , 32,
16917 0xfc0003ff, 0x200000c8, 0 , 0,
16918 0x0 }, /* _POOL32A0~*(25) */
16919 { instruction , 0 , 0 , 32,
16920 0xfc0003ff, 0x200000d0, &NMD::ROTRV , 0,
16921 0x0 }, /* ROTRV */
16922 { instruction , 0 , 0 , 32,
16923 0xfc0003ff, 0x200000d8, &NMD::MUHU , 0,
16924 0x0 }, /* MUHU */
16925 { reserved_block , 0 , 0 , 32,
16926 0xfc0003ff, 0x200000e0, 0 , 0,
16927 0x0 }, /* _POOL32A0~*(28) */
16928 { reserved_block , 0 , 0 , 32,
16929 0xfc0003ff, 0x200000e8, 0 , 0,
16930 0x0 }, /* _POOL32A0~*(29) */
16931 { instruction , 0 , 0 , 32,
16932 0xfc0003ff, 0x200000f0, &NMD::MTGC0 , 0,
16933 CP0_ | VZ_ }, /* MTGC0 */
16934 { instruction , 0 , 0 , 32,
16935 0xfc0003ff, 0x200000f8, &NMD::MTHGC0 , 0,
16936 CP0_ | VZ_ | MVH_ }, /* MTHGC0 */
16937 { reserved_block , 0 , 0 , 32,
16938 0xfc0003ff, 0x20000100, 0 , 0,
16939 0x0 }, /* _POOL32A0~*(32) */
16940 { reserved_block , 0 , 0 , 32,
16941 0xfc0003ff, 0x20000108, 0 , 0,
16942 0x0 }, /* _POOL32A0~*(33) */
16943 { instruction , 0 , 0 , 32,
16944 0xfc0003ff, 0x20000110, &NMD::ADD , 0,
16945 XMMS_ }, /* ADD */
16946 { instruction , 0 , 0 , 32,
16947 0xfc0003ff, 0x20000118, &NMD::DIV , 0,
16948 0x0 }, /* DIV */
16949 { reserved_block , 0 , 0 , 32,
16950 0xfc0003ff, 0x20000120, 0 , 0,
16951 0x0 }, /* _POOL32A0~*(36) */
16952 { reserved_block , 0 , 0 , 32,
16953 0xfc0003ff, 0x20000128, 0 , 0,
16954 0x0 }, /* _POOL32A0~*(37) */
16955 { instruction , 0 , 0 , 32,
16956 0xfc0003ff, 0x20000130, &NMD::DMFC0 , 0,
16957 CP0_ | MIPS64_ }, /* DMFC0 */
16958 { reserved_block , 0 , 0 , 32,
16959 0xfc0003ff, 0x20000138, 0 , 0,
16960 0x0 }, /* _POOL32A0~*(39) */
16961 { reserved_block , 0 , 0 , 32,
16962 0xfc0003ff, 0x20000140, 0 , 0,
16963 0x0 }, /* _POOL32A0~*(40) */
16964 { reserved_block , 0 , 0 , 32,
16965 0xfc0003ff, 0x20000148, 0 , 0,
16966 0x0 }, /* _POOL32A0~*(41) */
16967 { instruction , 0 , 0 , 32,
16968 0xfc0003ff, 0x20000150, &NMD::ADDU_32_ , 0,
16969 0x0 }, /* ADDU[32] */
16970 { instruction , 0 , 0 , 32,
16971 0xfc0003ff, 0x20000158, &NMD::MOD , 0,
16972 0x0 }, /* MOD */
16973 { reserved_block , 0 , 0 , 32,
16974 0xfc0003ff, 0x20000160, 0 , 0,
16975 0x0 }, /* _POOL32A0~*(44) */
16976 { reserved_block , 0 , 0 , 32,
16977 0xfc0003ff, 0x20000168, 0 , 0,
16978 0x0 }, /* _POOL32A0~*(45) */
16979 { instruction , 0 , 0 , 32,
16980 0xfc0003ff, 0x20000170, &NMD::DMTC0 , 0,
16981 CP0_ | MIPS64_ }, /* DMTC0 */
16982 { reserved_block , 0 , 0 , 32,
16983 0xfc0003ff, 0x20000178, 0 , 0,
16984 0x0 }, /* _POOL32A0~*(47) */
16985 { reserved_block , 0 , 0 , 32,
16986 0xfc0003ff, 0x20000180, 0 , 0,
16987 0x0 }, /* _POOL32A0~*(48) */
16988 { reserved_block , 0 , 0 , 32,
16989 0xfc0003ff, 0x20000188, 0 , 0,
16990 0x0 }, /* _POOL32A0~*(49) */
16991 { instruction , 0 , 0 , 32,
16992 0xfc0003ff, 0x20000190, &NMD::SUB , 0,
16993 XMMS_ }, /* SUB */
16994 { instruction , 0 , 0 , 32,
16995 0xfc0003ff, 0x20000198, &NMD::DIVU , 0,
16996 0x0 }, /* DIVU */
16997 { reserved_block , 0 , 0 , 32,
16998 0xfc0003ff, 0x200001a0, 0 , 0,
16999 0x0 }, /* _POOL32A0~*(52) */
17000 { reserved_block , 0 , 0 , 32,
17001 0xfc0003ff, 0x200001a8, 0 , 0,
17002 0x0 }, /* _POOL32A0~*(53) */
17003 { instruction , 0 , 0 , 32,
17004 0xfc0003ff, 0x200001b0, &NMD::DMFGC0 , 0,
17005 CP0_ | MIPS64_ | VZ_}, /* DMFGC0 */
17006 { reserved_block , 0 , 0 , 32,
17007 0xfc0003ff, 0x200001b8, 0 , 0,
17008 0x0 }, /* _POOL32A0~*(55) */
17009 { instruction , 0 , 0 , 32,
17010 0xfc0003ff, 0x200001c0, &NMD::RDHWR , 0,
17011 XMMS_ }, /* RDHWR */
17012 { reserved_block , 0 , 0 , 32,
17013 0xfc0003ff, 0x200001c8, 0 , 0,
17014 0x0 }, /* _POOL32A0~*(57) */
17015 { instruction , 0 , 0 , 32,
17016 0xfc0003ff, 0x200001d0, &NMD::SUBU_32_ , 0,
17017 0x0 }, /* SUBU[32] */
17018 { instruction , 0 , 0 , 32,
17019 0xfc0003ff, 0x200001d8, &NMD::MODU , 0,
17020 0x0 }, /* MODU */
17021 { reserved_block , 0 , 0 , 32,
17022 0xfc0003ff, 0x200001e0, 0 , 0,
17023 0x0 }, /* _POOL32A0~*(60) */
17024 { reserved_block , 0 , 0 , 32,
17025 0xfc0003ff, 0x200001e8, 0 , 0,
17026 0x0 }, /* _POOL32A0~*(61) */
17027 { instruction , 0 , 0 , 32,
17028 0xfc0003ff, 0x200001f0, &NMD::DMTGC0 , 0,
17029 CP0_ | MIPS64_ | VZ_}, /* DMTGC0 */
17030 { reserved_block , 0 , 0 , 32,
17031 0xfc0003ff, 0x200001f8, 0 , 0,
17032 0x0 }, /* _POOL32A0~*(63) */
17033 { reserved_block , 0 , 0 , 32,
17034 0xfc0003ff, 0x20000200, 0 , 0,
17035 0x0 }, /* _POOL32A0~*(64) */
17036 { reserved_block , 0 , 0 , 32,
17037 0xfc0003ff, 0x20000208, 0 , 0,
17038 0x0 }, /* _POOL32A0~*(65) */
17039 { pool , P_CMOVE , 2 , 32,
17040 0xfc0003ff, 0x20000210, 0 , 0,
17041 0x0 }, /* P.CMOVE */
17042 { reserved_block , 0 , 0 , 32,
17043 0xfc0003ff, 0x20000218, 0 , 0,
17044 0x0 }, /* _POOL32A0~*(67) */
17045 { reserved_block , 0 , 0 , 32,
17046 0xfc0003ff, 0x20000220, 0 , 0,
17047 0x0 }, /* _POOL32A0~*(68) */
17048 { instruction , 0 , 0 , 32,
17049 0xfc0003ff, 0x20000228, &NMD::FORK , 0,
17050 MT_ }, /* FORK */
17051 { instruction , 0 , 0 , 32,
17052 0xfc0003ff, 0x20000230, &NMD::MFTR , 0,
17053 MT_ }, /* MFTR */
17054 { instruction , 0 , 0 , 32,
17055 0xfc0003ff, 0x20000238, &NMD::MFHTR , 0,
17056 MT_ }, /* MFHTR */
17057 { reserved_block , 0 , 0 , 32,
17058 0xfc0003ff, 0x20000240, 0 , 0,
17059 0x0 }, /* _POOL32A0~*(72) */
17060 { reserved_block , 0 , 0 , 32,
17061 0xfc0003ff, 0x20000248, 0 , 0,
17062 0x0 }, /* _POOL32A0~*(73) */
17063 { instruction , 0 , 0 , 32,
17064 0xfc0003ff, 0x20000250, &NMD::AND_32_ , 0,
17065 0x0 }, /* AND[32] */
17066 { reserved_block , 0 , 0 , 32,
17067 0xfc0003ff, 0x20000258, 0 , 0,
17068 0x0 }, /* _POOL32A0~*(75) */
17069 { reserved_block , 0 , 0 , 32,
17070 0xfc0003ff, 0x20000260, 0 , 0,
17071 0x0 }, /* _POOL32A0~*(76) */
17072 { instruction , 0 , 0 , 32,
17073 0xfc0003ff, 0x20000268, &NMD::YIELD , 0,
17074 MT_ }, /* YIELD */
17075 { instruction , 0 , 0 , 32,
17076 0xfc0003ff, 0x20000270, &NMD::MTTR , 0,
17077 MT_ }, /* MTTR */
17078 { instruction , 0 , 0 , 32,
17079 0xfc0003ff, 0x20000278, &NMD::MTHTR , 0,
17080 MT_ }, /* MTHTR */
17081 { reserved_block , 0 , 0 , 32,
17082 0xfc0003ff, 0x20000280, 0 , 0,
17083 0x0 }, /* _POOL32A0~*(80) */
17084 { reserved_block , 0 , 0 , 32,
17085 0xfc0003ff, 0x20000288, 0 , 0,
17086 0x0 }, /* _POOL32A0~*(81) */
17087 { instruction , 0 , 0 , 32,
17088 0xfc0003ff, 0x20000290, &NMD::OR_32_ , 0,
17089 0x0 }, /* OR[32] */
17090 { reserved_block , 0 , 0 , 32,
17091 0xfc0003ff, 0x20000298, 0 , 0,
17092 0x0 }, /* _POOL32A0~*(83) */
17093 { reserved_block , 0 , 0 , 32,
17094 0xfc0003ff, 0x200002a0, 0 , 0,
17095 0x0 }, /* _POOL32A0~*(84) */
17096 { reserved_block , 0 , 0 , 32,
17097 0xfc0003ff, 0x200002a8, 0 , 0,
17098 0x0 }, /* _POOL32A0~*(85) */
17099 { pool , P_MT_VPE , 8 , 32,
17100 0xfc0003ff, 0x200002b0, 0 , 0,
17101 0x0 }, /* P.MT_VPE */
17102 { reserved_block , 0 , 0 , 32,
17103 0xfc0003ff, 0x200002b8, 0 , 0,
17104 0x0 }, /* _POOL32A0~*(87) */
17105 { reserved_block , 0 , 0 , 32,
17106 0xfc0003ff, 0x200002c0, 0 , 0,
17107 0x0 }, /* _POOL32A0~*(88) */
17108 { reserved_block , 0 , 0 , 32,
17109 0xfc0003ff, 0x200002c8, 0 , 0,
17110 0x0 }, /* _POOL32A0~*(89) */
17111 { instruction , 0 , 0 , 32,
17112 0xfc0003ff, 0x200002d0, &NMD::NOR , 0,
17113 0x0 }, /* NOR */
17114 { reserved_block , 0 , 0 , 32,
17115 0xfc0003ff, 0x200002d8, 0 , 0,
17116 0x0 }, /* _POOL32A0~*(91) */
17117 { reserved_block , 0 , 0 , 32,
17118 0xfc0003ff, 0x200002e0, 0 , 0,
17119 0x0 }, /* _POOL32A0~*(92) */
17120 { reserved_block , 0 , 0 , 32,
17121 0xfc0003ff, 0x200002e8, 0 , 0,
17122 0x0 }, /* _POOL32A0~*(93) */
17123 { reserved_block , 0 , 0 , 32,
17124 0xfc0003ff, 0x200002f0, 0 , 0,
17125 0x0 }, /* _POOL32A0~*(94) */
17126 { reserved_block , 0 , 0 , 32,
17127 0xfc0003ff, 0x200002f8, 0 , 0,
17128 0x0 }, /* _POOL32A0~*(95) */
17129 { reserved_block , 0 , 0 , 32,
17130 0xfc0003ff, 0x20000300, 0 , 0,
17131 0x0 }, /* _POOL32A0~*(96) */
17132 { reserved_block , 0 , 0 , 32,
17133 0xfc0003ff, 0x20000308, 0 , 0,
17134 0x0 }, /* _POOL32A0~*(97) */
17135 { instruction , 0 , 0 , 32,
17136 0xfc0003ff, 0x20000310, &NMD::XOR_32_ , 0,
17137 0x0 }, /* XOR[32] */
17138 { reserved_block , 0 , 0 , 32,
17139 0xfc0003ff, 0x20000318, 0 , 0,
17140 0x0 }, /* _POOL32A0~*(99) */
17141 { reserved_block , 0 , 0 , 32,
17142 0xfc0003ff, 0x20000320, 0 , 0,
17143 0x0 }, /* _POOL32A0~*(100) */
17144 { reserved_block , 0 , 0 , 32,
17145 0xfc0003ff, 0x20000328, 0 , 0,
17146 0x0 }, /* _POOL32A0~*(101) */
17147 { reserved_block , 0 , 0 , 32,
17148 0xfc0003ff, 0x20000330, 0 , 0,
17149 0x0 }, /* _POOL32A0~*(102) */
17150 { reserved_block , 0 , 0 , 32,
17151 0xfc0003ff, 0x20000338, 0 , 0,
17152 0x0 }, /* _POOL32A0~*(103) */
17153 { reserved_block , 0 , 0 , 32,
17154 0xfc0003ff, 0x20000340, 0 , 0,
17155 0x0 }, /* _POOL32A0~*(104) */
17156 { reserved_block , 0 , 0 , 32,
17157 0xfc0003ff, 0x20000348, 0 , 0,
17158 0x0 }, /* _POOL32A0~*(105) */
17159 { instruction , 0 , 0 , 32,
17160 0xfc0003ff, 0x20000350, &NMD::SLT , 0,
17161 0x0 }, /* SLT */
17162 { reserved_block , 0 , 0 , 32,
17163 0xfc0003ff, 0x20000358, 0 , 0,
17164 0x0 }, /* _POOL32A0~*(107) */
17165 { reserved_block , 0 , 0 , 32,
17166 0xfc0003ff, 0x20000360, 0 , 0,
17167 0x0 }, /* _POOL32A0~*(108) */
17168 { reserved_block , 0 , 0 , 32,
17169 0xfc0003ff, 0x20000368, 0 , 0,
17170 0x0 }, /* _POOL32A0~*(109) */
17171 { reserved_block , 0 , 0 , 32,
17172 0xfc0003ff, 0x20000370, 0 , 0,
17173 0x0 }, /* _POOL32A0~*(110) */
17174 { reserved_block , 0 , 0 , 32,
17175 0xfc0003ff, 0x20000378, 0 , 0,
17176 0x0 }, /* _POOL32A0~*(111) */
17177 { reserved_block , 0 , 0 , 32,
17178 0xfc0003ff, 0x20000380, 0 , 0,
17179 0x0 }, /* _POOL32A0~*(112) */
17180 { reserved_block , 0 , 0 , 32,
17181 0xfc0003ff, 0x20000388, 0 , 0,
17182 0x0 }, /* _POOL32A0~*(113) */
17183 { pool , P_SLTU , 2 , 32,
17184 0xfc0003ff, 0x20000390, 0 , 0,
17185 0x0 }, /* P.SLTU */
17186 { reserved_block , 0 , 0 , 32,
17187 0xfc0003ff, 0x20000398, 0 , 0,
17188 0x0 }, /* _POOL32A0~*(115) */
17189 { reserved_block , 0 , 0 , 32,
17190 0xfc0003ff, 0x200003a0, 0 , 0,
17191 0x0 }, /* _POOL32A0~*(116) */
17192 { reserved_block , 0 , 0 , 32,
17193 0xfc0003ff, 0x200003a8, 0 , 0,
17194 0x0 }, /* _POOL32A0~*(117) */
17195 { reserved_block , 0 , 0 , 32,
17196 0xfc0003ff, 0x200003b0, 0 , 0,
17197 0x0 }, /* _POOL32A0~*(118) */
17198 { reserved_block , 0 , 0 , 32,
17199 0xfc0003ff, 0x200003b8, 0 , 0,
17200 0x0 }, /* _POOL32A0~*(119) */
17201 { reserved_block , 0 , 0 , 32,
17202 0xfc0003ff, 0x200003c0, 0 , 0,
17203 0x0 }, /* _POOL32A0~*(120) */
17204 { reserved_block , 0 , 0 , 32,
17205 0xfc0003ff, 0x200003c8, 0 , 0,
17206 0x0 }, /* _POOL32A0~*(121) */
17207 { instruction , 0 , 0 , 32,
17208 0xfc0003ff, 0x200003d0, &NMD::SOV , 0,
17209 0x0 }, /* SOV */
17210 { reserved_block , 0 , 0 , 32,
17211 0xfc0003ff, 0x200003d8, 0 , 0,
17212 0x0 }, /* _POOL32A0~*(123) */
17213 { reserved_block , 0 , 0 , 32,
17214 0xfc0003ff, 0x200003e0, 0 , 0,
17215 0x0 }, /* _POOL32A0~*(124) */
17216 { reserved_block , 0 , 0 , 32,
17217 0xfc0003ff, 0x200003e8, 0 , 0,
17218 0x0 }, /* _POOL32A0~*(125) */
17219 { reserved_block , 0 , 0 , 32,
17220 0xfc0003ff, 0x200003f0, 0 , 0,
17221 0x0 }, /* _POOL32A0~*(126) */
17222 { reserved_block , 0 , 0 , 32,
17223 0xfc0003ff, 0x200003f8, 0 , 0,
17224 0x0 }, /* _POOL32A0~*(127) */
17228 NMD::Pool NMD::ADDQ__S__PH[2] = {
17229 { instruction , 0 , 0 , 32,
17230 0xfc0007ff, 0x2000000d, &NMD::ADDQ_PH , 0,
17231 DSP_ }, /* ADDQ.PH */
17232 { instruction , 0 , 0 , 32,
17233 0xfc0007ff, 0x2000040d, &NMD::ADDQ_S_PH , 0,
17234 DSP_ }, /* ADDQ_S.PH */
17238 NMD::Pool NMD::MUL__S__PH[2] = {
17239 { instruction , 0 , 0 , 32,
17240 0xfc0007ff, 0x2000002d, &NMD::MUL_PH , 0,
17241 DSP_ }, /* MUL.PH */
17242 { instruction , 0 , 0 , 32,
17243 0xfc0007ff, 0x2000042d, &NMD::MUL_S_PH , 0,
17244 DSP_ }, /* MUL_S.PH */
17248 NMD::Pool NMD::ADDQH__R__PH[2] = {
17249 { instruction , 0 , 0 , 32,
17250 0xfc0007ff, 0x2000004d, &NMD::ADDQH_PH , 0,
17251 DSP_ }, /* ADDQH.PH */
17252 { instruction , 0 , 0 , 32,
17253 0xfc0007ff, 0x2000044d, &NMD::ADDQH_R_PH , 0,
17254 DSP_ }, /* ADDQH_R.PH */
17258 NMD::Pool NMD::ADDQH__R__W[2] = {
17259 { instruction , 0 , 0 , 32,
17260 0xfc0007ff, 0x2000008d, &NMD::ADDQH_W , 0,
17261 DSP_ }, /* ADDQH.W */
17262 { instruction , 0 , 0 , 32,
17263 0xfc0007ff, 0x2000048d, &NMD::ADDQH_R_W , 0,
17264 DSP_ }, /* ADDQH_R.W */
17268 NMD::Pool NMD::ADDU__S__QB[2] = {
17269 { instruction , 0 , 0 , 32,
17270 0xfc0007ff, 0x200000cd, &NMD::ADDU_QB , 0,
17271 DSP_ }, /* ADDU.QB */
17272 { instruction , 0 , 0 , 32,
17273 0xfc0007ff, 0x200004cd, &NMD::ADDU_S_QB , 0,
17274 DSP_ }, /* ADDU_S.QB */
17278 NMD::Pool NMD::ADDU__S__PH[2] = {
17279 { instruction , 0 , 0 , 32,
17280 0xfc0007ff, 0x2000010d, &NMD::ADDU_PH , 0,
17281 DSP_ }, /* ADDU.PH */
17282 { instruction , 0 , 0 , 32,
17283 0xfc0007ff, 0x2000050d, &NMD::ADDU_S_PH , 0,
17284 DSP_ }, /* ADDU_S.PH */
17288 NMD::Pool NMD::ADDUH__R__QB[2] = {
17289 { instruction , 0 , 0 , 32,
17290 0xfc0007ff, 0x2000014d, &NMD::ADDUH_QB , 0,
17291 DSP_ }, /* ADDUH.QB */
17292 { instruction , 0 , 0 , 32,
17293 0xfc0007ff, 0x2000054d, &NMD::ADDUH_R_QB , 0,
17294 DSP_ }, /* ADDUH_R.QB */
17298 NMD::Pool NMD::SHRAV__R__PH[2] = {
17299 { instruction , 0 , 0 , 32,
17300 0xfc0007ff, 0x2000018d, &NMD::SHRAV_PH , 0,
17301 DSP_ }, /* SHRAV.PH */
17302 { instruction , 0 , 0 , 32,
17303 0xfc0007ff, 0x2000058d, &NMD::SHRAV_R_PH , 0,
17304 DSP_ }, /* SHRAV_R.PH */
17308 NMD::Pool NMD::SHRAV__R__QB[2] = {
17309 { instruction , 0 , 0 , 32,
17310 0xfc0007ff, 0x200001cd, &NMD::SHRAV_QB , 0,
17311 DSP_ }, /* SHRAV.QB */
17312 { instruction , 0 , 0 , 32,
17313 0xfc0007ff, 0x200005cd, &NMD::SHRAV_R_QB , 0,
17314 DSP_ }, /* SHRAV_R.QB */
17318 NMD::Pool NMD::SUBQ__S__PH[2] = {
17319 { instruction , 0 , 0 , 32,
17320 0xfc0007ff, 0x2000020d, &NMD::SUBQ_PH , 0,
17321 DSP_ }, /* SUBQ.PH */
17322 { instruction , 0 , 0 , 32,
17323 0xfc0007ff, 0x2000060d, &NMD::SUBQ_S_PH , 0,
17324 DSP_ }, /* SUBQ_S.PH */
17328 NMD::Pool NMD::SUBQH__R__PH[2] = {
17329 { instruction , 0 , 0 , 32,
17330 0xfc0007ff, 0x2000024d, &NMD::SUBQH_PH , 0,
17331 DSP_ }, /* SUBQH.PH */
17332 { instruction , 0 , 0 , 32,
17333 0xfc0007ff, 0x2000064d, &NMD::SUBQH_R_PH , 0,
17334 DSP_ }, /* SUBQH_R.PH */
17338 NMD::Pool NMD::SUBQH__R__W[2] = {
17339 { instruction , 0 , 0 , 32,
17340 0xfc0007ff, 0x2000028d, &NMD::SUBQH_W , 0,
17341 DSP_ }, /* SUBQH.W */
17342 { instruction , 0 , 0 , 32,
17343 0xfc0007ff, 0x2000068d, &NMD::SUBQH_R_W , 0,
17344 DSP_ }, /* SUBQH_R.W */
17348 NMD::Pool NMD::SUBU__S__QB[2] = {
17349 { instruction , 0 , 0 , 32,
17350 0xfc0007ff, 0x200002cd, &NMD::SUBU_QB , 0,
17351 DSP_ }, /* SUBU.QB */
17352 { instruction , 0 , 0 , 32,
17353 0xfc0007ff, 0x200006cd, &NMD::SUBU_S_QB , 0,
17354 DSP_ }, /* SUBU_S.QB */
17358 NMD::Pool NMD::SUBU__S__PH[2] = {
17359 { instruction , 0 , 0 , 32,
17360 0xfc0007ff, 0x2000030d, &NMD::SUBU_PH , 0,
17361 DSP_ }, /* SUBU.PH */
17362 { instruction , 0 , 0 , 32,
17363 0xfc0007ff, 0x2000070d, &NMD::SUBU_S_PH , 0,
17364 DSP_ }, /* SUBU_S.PH */
17368 NMD::Pool NMD::SHRA__R__PH[2] = {
17369 { instruction , 0 , 0 , 32,
17370 0xfc0007ff, 0x20000335, &NMD::SHRA_PH , 0,
17371 DSP_ }, /* SHRA.PH */
17372 { instruction , 0 , 0 , 32,
17373 0xfc0007ff, 0x20000735, &NMD::SHRA_R_PH , 0,
17374 DSP_ }, /* SHRA_R.PH */
17378 NMD::Pool NMD::SUBUH__R__QB[2] = {
17379 { instruction , 0 , 0 , 32,
17380 0xfc0007ff, 0x2000034d, &NMD::SUBUH_QB , 0,
17381 DSP_ }, /* SUBUH.QB */
17382 { instruction , 0 , 0 , 32,
17383 0xfc0007ff, 0x2000074d, &NMD::SUBUH_R_QB , 0,
17384 DSP_ }, /* SUBUH_R.QB */
17388 NMD::Pool NMD::SHLLV__S__PH[2] = {
17389 { instruction , 0 , 0 , 32,
17390 0xfc0007ff, 0x2000038d, &NMD::SHLLV_PH , 0,
17391 DSP_ }, /* SHLLV.PH */
17392 { instruction , 0 , 0 , 32,
17393 0xfc0007ff, 0x2000078d, &NMD::SHLLV_S_PH , 0,
17394 DSP_ }, /* SHLLV_S.PH */
17398 NMD::Pool NMD::SHLL__S__PH[4] = {
17399 { instruction , 0 , 0 , 32,
17400 0xfc000fff, 0x200003b5, &NMD::SHLL_PH , 0,
17401 DSP_ }, /* SHLL.PH */
17402 { reserved_block , 0 , 0 , 32,
17403 0xfc000fff, 0x200007b5, 0 , 0,
17404 0x0 }, /* SHLL[_S].PH~*(1) */
17405 { instruction , 0 , 0 , 32,
17406 0xfc000fff, 0x20000bb5, &NMD::SHLL_S_PH , 0,
17407 DSP_ }, /* SHLL_S.PH */
17408 { reserved_block , 0 , 0 , 32,
17409 0xfc000fff, 0x20000fb5, 0 , 0,
17410 0x0 }, /* SHLL[_S].PH~*(3) */
17414 NMD::Pool NMD::PRECR_SRA__R__PH_W[2] = {
17415 { instruction , 0 , 0 , 32,
17416 0xfc0007ff, 0x200003cd, &NMD::PRECR_SRA_PH_W , 0,
17417 DSP_ }, /* PRECR_SRA.PH.W */
17418 { instruction , 0 , 0 , 32,
17419 0xfc0007ff, 0x200007cd, &NMD::PRECR_SRA_R_PH_W , 0,
17420 DSP_ }, /* PRECR_SRA_R.PH.W */
17424 NMD::Pool NMD::_POOL32A5[128] = {
17425 { instruction , 0 , 0 , 32,
17426 0xfc0003ff, 0x20000005, &NMD::CMP_EQ_PH , 0,
17427 DSP_ }, /* CMP.EQ.PH */
17428 { pool , ADDQ__S__PH , 2 , 32,
17429 0xfc0003ff, 0x2000000d, 0 , 0,
17430 0x0 }, /* ADDQ[_S].PH */
17431 { reserved_block , 0 , 0 , 32,
17432 0xfc0003ff, 0x20000015, 0 , 0,
17433 0x0 }, /* _POOL32A5~*(2) */
17434 { instruction , 0 , 0 , 32,
17435 0xfc0003ff, 0x2000001d, &NMD::SHILO , 0,
17436 DSP_ }, /* SHILO */
17437 { instruction , 0 , 0 , 32,
17438 0xfc0003ff, 0x20000025, &NMD::MULEQ_S_W_PHL , 0,
17439 DSP_ }, /* MULEQ_S.W.PHL */
17440 { pool , MUL__S__PH , 2 , 32,
17441 0xfc0003ff, 0x2000002d, 0 , 0,
17442 0x0 }, /* MUL[_S].PH */
17443 { reserved_block , 0 , 0 , 32,
17444 0xfc0003ff, 0x20000035, 0 , 0,
17445 0x0 }, /* _POOL32A5~*(6) */
17446 { instruction , 0 , 0 , 32,
17447 0xfc0003ff, 0x2000003d, &NMD::REPL_PH , 0,
17448 DSP_ }, /* REPL.PH */
17449 { instruction , 0 , 0 , 32,
17450 0xfc0003ff, 0x20000045, &NMD::CMP_LT_PH , 0,
17451 DSP_ }, /* CMP.LT.PH */
17452 { pool , ADDQH__R__PH , 2 , 32,
17453 0xfc0003ff, 0x2000004d, 0 , 0,
17454 0x0 }, /* ADDQH[_R].PH */
17455 { reserved_block , 0 , 0 , 32,
17456 0xfc0003ff, 0x20000055, 0 , 0,
17457 0x0 }, /* _POOL32A5~*(10) */
17458 { reserved_block , 0 , 0 , 32,
17459 0xfc0003ff, 0x2000005d, 0 , 0,
17460 0x0 }, /* _POOL32A5~*(11) */
17461 { instruction , 0 , 0 , 32,
17462 0xfc0003ff, 0x20000065, &NMD::MULEQ_S_W_PHR , 0,
17463 DSP_ }, /* MULEQ_S.W.PHR */
17464 { instruction , 0 , 0 , 32,
17465 0xfc0003ff, 0x2000006d, &NMD::PRECR_QB_PH , 0,
17466 DSP_ }, /* PRECR.QB.PH */
17467 { reserved_block , 0 , 0 , 32,
17468 0xfc0003ff, 0x20000075, 0 , 0,
17469 0x0 }, /* _POOL32A5~*(14) */
17470 { reserved_block , 0 , 0 , 32,
17471 0xfc0003ff, 0x2000007d, 0 , 0,
17472 0x0 }, /* _POOL32A5~*(15) */
17473 { instruction , 0 , 0 , 32,
17474 0xfc0003ff, 0x20000085, &NMD::CMP_LE_PH , 0,
17475 DSP_ }, /* CMP.LE.PH */
17476 { pool , ADDQH__R__W , 2 , 32,
17477 0xfc0003ff, 0x2000008d, 0 , 0,
17478 0x0 }, /* ADDQH[_R].W */
17479 { instruction , 0 , 0 , 32,
17480 0xfc0003ff, 0x20000095, &NMD::MULEU_S_PH_QBL , 0,
17481 DSP_ }, /* MULEU_S.PH.QBL */
17482 { reserved_block , 0 , 0 , 32,
17483 0xfc0003ff, 0x2000009d, 0 , 0,
17484 0x0 }, /* _POOL32A5~*(19) */
17485 { reserved_block , 0 , 0 , 32,
17486 0xfc0003ff, 0x200000a5, 0 , 0,
17487 0x0 }, /* _POOL32A5~*(20) */
17488 { instruction , 0 , 0 , 32,
17489 0xfc0003ff, 0x200000ad, &NMD::PRECRQ_QB_PH , 0,
17490 DSP_ }, /* PRECRQ.QB.PH */
17491 { reserved_block , 0 , 0 , 32,
17492 0xfc0003ff, 0x200000b5, 0 , 0,
17493 0x0 }, /* _POOL32A5~*(22) */
17494 { reserved_block , 0 , 0 , 32,
17495 0xfc0003ff, 0x200000bd, 0 , 0,
17496 0x0 }, /* _POOL32A5~*(23) */
17497 { instruction , 0 , 0 , 32,
17498 0xfc0003ff, 0x200000c5, &NMD::CMPGU_EQ_QB , 0,
17499 DSP_ }, /* CMPGU.EQ.QB */
17500 { pool , ADDU__S__QB , 2 , 32,
17501 0xfc0003ff, 0x200000cd, 0 , 0,
17502 0x0 }, /* ADDU[_S].QB */
17503 { instruction , 0 , 0 , 32,
17504 0xfc0003ff, 0x200000d5, &NMD::MULEU_S_PH_QBR , 0,
17505 DSP_ }, /* MULEU_S.PH.QBR */
17506 { reserved_block , 0 , 0 , 32,
17507 0xfc0003ff, 0x200000dd, 0 , 0,
17508 0x0 }, /* _POOL32A5~*(27) */
17509 { reserved_block , 0 , 0 , 32,
17510 0xfc0003ff, 0x200000e5, 0 , 0,
17511 0x0 }, /* _POOL32A5~*(28) */
17512 { instruction , 0 , 0 , 32,
17513 0xfc0003ff, 0x200000ed, &NMD::PRECRQ_PH_W , 0,
17514 DSP_ }, /* PRECRQ.PH.W */
17515 { reserved_block , 0 , 0 , 32,
17516 0xfc0003ff, 0x200000f5, 0 , 0,
17517 0x0 }, /* _POOL32A5~*(30) */
17518 { reserved_block , 0 , 0 , 32,
17519 0xfc0003ff, 0x200000fd, 0 , 0,
17520 0x0 }, /* _POOL32A5~*(31) */
17521 { instruction , 0 , 0 , 32,
17522 0xfc0003ff, 0x20000105, &NMD::CMPGU_LT_QB , 0,
17523 DSP_ }, /* CMPGU.LT.QB */
17524 { pool , ADDU__S__PH , 2 , 32,
17525 0xfc0003ff, 0x2000010d, 0 , 0,
17526 0x0 }, /* ADDU[_S].PH */
17527 { instruction , 0 , 0 , 32,
17528 0xfc0003ff, 0x20000115, &NMD::MULQ_RS_PH , 0,
17529 DSP_ }, /* MULQ_RS.PH */
17530 { reserved_block , 0 , 0 , 32,
17531 0xfc0003ff, 0x2000011d, 0 , 0,
17532 0x0 }, /* _POOL32A5~*(35) */
17533 { reserved_block , 0 , 0 , 32,
17534 0xfc0003ff, 0x20000125, 0 , 0,
17535 0x0 }, /* _POOL32A5~*(36) */
17536 { instruction , 0 , 0 , 32,
17537 0xfc0003ff, 0x2000012d, &NMD::PRECRQ_RS_PH_W , 0,
17538 DSP_ }, /* PRECRQ_RS.PH.W */
17539 { reserved_block , 0 , 0 , 32,
17540 0xfc0003ff, 0x20000135, 0 , 0,
17541 0x0 }, /* _POOL32A5~*(38) */
17542 { reserved_block , 0 , 0 , 32,
17543 0xfc0003ff, 0x2000013d, 0 , 0,
17544 0x0 }, /* _POOL32A5~*(39) */
17545 { instruction , 0 , 0 , 32,
17546 0xfc0003ff, 0x20000145, &NMD::CMPGU_LE_QB , 0,
17547 DSP_ }, /* CMPGU.LE.QB */
17548 { pool , ADDUH__R__QB , 2 , 32,
17549 0xfc0003ff, 0x2000014d, 0 , 0,
17550 0x0 }, /* ADDUH[_R].QB */
17551 { instruction , 0 , 0 , 32,
17552 0xfc0003ff, 0x20000155, &NMD::MULQ_S_PH , 0,
17553 DSP_ }, /* MULQ_S.PH */
17554 { reserved_block , 0 , 0 , 32,
17555 0xfc0003ff, 0x2000015d, 0 , 0,
17556 0x0 }, /* _POOL32A5~*(43) */
17557 { reserved_block , 0 , 0 , 32,
17558 0xfc0003ff, 0x20000165, 0 , 0,
17559 0x0 }, /* _POOL32A5~*(44) */
17560 { instruction , 0 , 0 , 32,
17561 0xfc0003ff, 0x2000016d, &NMD::PRECRQU_S_QB_PH , 0,
17562 DSP_ }, /* PRECRQU_S.QB.PH */
17563 { reserved_block , 0 , 0 , 32,
17564 0xfc0003ff, 0x20000175, 0 , 0,
17565 0x0 }, /* _POOL32A5~*(46) */
17566 { reserved_block , 0 , 0 , 32,
17567 0xfc0003ff, 0x2000017d, 0 , 0,
17568 0x0 }, /* _POOL32A5~*(47) */
17569 { instruction , 0 , 0 , 32,
17570 0xfc0003ff, 0x20000185, &NMD::CMPGDU_EQ_QB , 0,
17571 DSP_ }, /* CMPGDU.EQ.QB */
17572 { pool , SHRAV__R__PH , 2 , 32,
17573 0xfc0003ff, 0x2000018d, 0 , 0,
17574 0x0 }, /* SHRAV[_R].PH */
17575 { instruction , 0 , 0 , 32,
17576 0xfc0003ff, 0x20000195, &NMD::MULQ_RS_W , 0,
17577 DSP_ }, /* MULQ_RS.W */
17578 { reserved_block , 0 , 0 , 32,
17579 0xfc0003ff, 0x2000019d, 0 , 0,
17580 0x0 }, /* _POOL32A5~*(51) */
17581 { reserved_block , 0 , 0 , 32,
17582 0xfc0003ff, 0x200001a5, 0 , 0,
17583 0x0 }, /* _POOL32A5~*(52) */
17584 { instruction , 0 , 0 , 32,
17585 0xfc0003ff, 0x200001ad, &NMD::PACKRL_PH , 0,
17586 DSP_ }, /* PACKRL.PH */
17587 { reserved_block , 0 , 0 , 32,
17588 0xfc0003ff, 0x200001b5, 0 , 0,
17589 0x0 }, /* _POOL32A5~*(54) */
17590 { reserved_block , 0 , 0 , 32,
17591 0xfc0003ff, 0x200001bd, 0 , 0,
17592 0x0 }, /* _POOL32A5~*(55) */
17593 { instruction , 0 , 0 , 32,
17594 0xfc0003ff, 0x200001c5, &NMD::CMPGDU_LT_QB , 0,
17595 DSP_ }, /* CMPGDU.LT.QB */
17596 { pool , SHRAV__R__QB , 2 , 32,
17597 0xfc0003ff, 0x200001cd, 0 , 0,
17598 0x0 }, /* SHRAV[_R].QB */
17599 { instruction , 0 , 0 , 32,
17600 0xfc0003ff, 0x200001d5, &NMD::MULQ_S_W , 0,
17601 DSP_ }, /* MULQ_S.W */
17602 { reserved_block , 0 , 0 , 32,
17603 0xfc0003ff, 0x200001dd, 0 , 0,
17604 0x0 }, /* _POOL32A5~*(59) */
17605 { reserved_block , 0 , 0 , 32,
17606 0xfc0003ff, 0x200001e5, 0 , 0,
17607 0x0 }, /* _POOL32A5~*(60) */
17608 { instruction , 0 , 0 , 32,
17609 0xfc0003ff, 0x200001ed, &NMD::PICK_QB , 0,
17610 DSP_ }, /* PICK.QB */
17611 { reserved_block , 0 , 0 , 32,
17612 0xfc0003ff, 0x200001f5, 0 , 0,
17613 0x0 }, /* _POOL32A5~*(62) */
17614 { reserved_block , 0 , 0 , 32,
17615 0xfc0003ff, 0x200001fd, 0 , 0,
17616 0x0 }, /* _POOL32A5~*(63) */
17617 { instruction , 0 , 0 , 32,
17618 0xfc0003ff, 0x20000205, &NMD::CMPGDU_LE_QB , 0,
17619 DSP_ }, /* CMPGDU.LE.QB */
17620 { pool , SUBQ__S__PH , 2 , 32,
17621 0xfc0003ff, 0x2000020d, 0 , 0,
17622 0x0 }, /* SUBQ[_S].PH */
17623 { instruction , 0 , 0 , 32,
17624 0xfc0003ff, 0x20000215, &NMD::APPEND , 0,
17625 DSP_ }, /* APPEND */
17626 { reserved_block , 0 , 0 , 32,
17627 0xfc0003ff, 0x2000021d, 0 , 0,
17628 0x0 }, /* _POOL32A5~*(67) */
17629 { reserved_block , 0 , 0 , 32,
17630 0xfc0003ff, 0x20000225, 0 , 0,
17631 0x0 }, /* _POOL32A5~*(68) */
17632 { instruction , 0 , 0 , 32,
17633 0xfc0003ff, 0x2000022d, &NMD::PICK_PH , 0,
17634 DSP_ }, /* PICK.PH */
17635 { reserved_block , 0 , 0 , 32,
17636 0xfc0003ff, 0x20000235, 0 , 0,
17637 0x0 }, /* _POOL32A5~*(70) */
17638 { reserved_block , 0 , 0 , 32,
17639 0xfc0003ff, 0x2000023d, 0 , 0,
17640 0x0 }, /* _POOL32A5~*(71) */
17641 { instruction , 0 , 0 , 32,
17642 0xfc0003ff, 0x20000245, &NMD::CMPU_EQ_QB , 0,
17643 DSP_ }, /* CMPU.EQ.QB */
17644 { pool , SUBQH__R__PH , 2 , 32,
17645 0xfc0003ff, 0x2000024d, 0 , 0,
17646 0x0 }, /* SUBQH[_R].PH */
17647 { instruction , 0 , 0 , 32,
17648 0xfc0003ff, 0x20000255, &NMD::PREPEND , 0,
17649 DSP_ }, /* PREPEND */
17650 { reserved_block , 0 , 0 , 32,
17651 0xfc0003ff, 0x2000025d, 0 , 0,
17652 0x0 }, /* _POOL32A5~*(75) */
17653 { reserved_block , 0 , 0 , 32,
17654 0xfc0003ff, 0x20000265, 0 , 0,
17655 0x0 }, /* _POOL32A5~*(76) */
17656 { reserved_block , 0 , 0 , 32,
17657 0xfc0003ff, 0x2000026d, 0 , 0,
17658 0x0 }, /* _POOL32A5~*(77) */
17659 { reserved_block , 0 , 0 , 32,
17660 0xfc0003ff, 0x20000275, 0 , 0,
17661 0x0 }, /* _POOL32A5~*(78) */
17662 { reserved_block , 0 , 0 , 32,
17663 0xfc0003ff, 0x2000027d, 0 , 0,
17664 0x0 }, /* _POOL32A5~*(79) */
17665 { instruction , 0 , 0 , 32,
17666 0xfc0003ff, 0x20000285, &NMD::CMPU_LT_QB , 0,
17667 DSP_ }, /* CMPU.LT.QB */
17668 { pool , SUBQH__R__W , 2 , 32,
17669 0xfc0003ff, 0x2000028d, 0 , 0,
17670 0x0 }, /* SUBQH[_R].W */
17671 { instruction , 0 , 0 , 32,
17672 0xfc0003ff, 0x20000295, &NMD::MODSUB , 0,
17673 DSP_ }, /* MODSUB */
17674 { reserved_block , 0 , 0 , 32,
17675 0xfc0003ff, 0x2000029d, 0 , 0,
17676 0x0 }, /* _POOL32A5~*(83) */
17677 { reserved_block , 0 , 0 , 32,
17678 0xfc0003ff, 0x200002a5, 0 , 0,
17679 0x0 }, /* _POOL32A5~*(84) */
17680 { reserved_block , 0 , 0 , 32,
17681 0xfc0003ff, 0x200002ad, 0 , 0,
17682 0x0 }, /* _POOL32A5~*(85) */
17683 { reserved_block , 0 , 0 , 32,
17684 0xfc0003ff, 0x200002b5, 0 , 0,
17685 0x0 }, /* _POOL32A5~*(86) */
17686 { reserved_block , 0 , 0 , 32,
17687 0xfc0003ff, 0x200002bd, 0 , 0,
17688 0x0 }, /* _POOL32A5~*(87) */
17689 { instruction , 0 , 0 , 32,
17690 0xfc0003ff, 0x200002c5, &NMD::CMPU_LE_QB , 0,
17691 DSP_ }, /* CMPU.LE.QB */
17692 { pool , SUBU__S__QB , 2 , 32,
17693 0xfc0003ff, 0x200002cd, 0 , 0,
17694 0x0 }, /* SUBU[_S].QB */
17695 { instruction , 0 , 0 , 32,
17696 0xfc0003ff, 0x200002d5, &NMD::SHRAV_R_W , 0,
17697 DSP_ }, /* SHRAV_R.W */
17698 { reserved_block , 0 , 0 , 32,
17699 0xfc0003ff, 0x200002dd, 0 , 0,
17700 0x0 }, /* _POOL32A5~*(91) */
17701 { reserved_block , 0 , 0 , 32,
17702 0xfc0003ff, 0x200002e5, 0 , 0,
17703 0x0 }, /* _POOL32A5~*(92) */
17704 { reserved_block , 0 , 0 , 32,
17705 0xfc0003ff, 0x200002ed, 0 , 0,
17706 0x0 }, /* _POOL32A5~*(93) */
17707 { instruction , 0 , 0 , 32,
17708 0xfc0003ff, 0x200002f5, &NMD::SHRA_R_W , 0,
17709 DSP_ }, /* SHRA_R.W */
17710 { reserved_block , 0 , 0 , 32,
17711 0xfc0003ff, 0x200002fd, 0 , 0,
17712 0x0 }, /* _POOL32A5~*(95) */
17713 { instruction , 0 , 0 , 32,
17714 0xfc0003ff, 0x20000305, &NMD::ADDQ_S_W , 0,
17715 DSP_ }, /* ADDQ_S.W */
17716 { pool , SUBU__S__PH , 2 , 32,
17717 0xfc0003ff, 0x2000030d, 0 , 0,
17718 0x0 }, /* SUBU[_S].PH */
17719 { instruction , 0 , 0 , 32,
17720 0xfc0003ff, 0x20000315, &NMD::SHRLV_PH , 0,
17721 DSP_ }, /* SHRLV.PH */
17722 { reserved_block , 0 , 0 , 32,
17723 0xfc0003ff, 0x2000031d, 0 , 0,
17724 0x0 }, /* _POOL32A5~*(99) */
17725 { reserved_block , 0 , 0 , 32,
17726 0xfc0003ff, 0x20000325, 0 , 0,
17727 0x0 }, /* _POOL32A5~*(100) */
17728 { reserved_block , 0 , 0 , 32,
17729 0xfc0003ff, 0x2000032d, 0 , 0,
17730 0x0 }, /* _POOL32A5~*(101) */
17731 { pool , SHRA__R__PH , 2 , 32,
17732 0xfc0003ff, 0x20000335, 0 , 0,
17733 0x0 }, /* SHRA[_R].PH */
17734 { reserved_block , 0 , 0 , 32,
17735 0xfc0003ff, 0x2000033d, 0 , 0,
17736 0x0 }, /* _POOL32A5~*(103) */
17737 { instruction , 0 , 0 , 32,
17738 0xfc0003ff, 0x20000345, &NMD::SUBQ_S_W , 0,
17739 DSP_ }, /* SUBQ_S.W */
17740 { pool , SUBUH__R__QB , 2 , 32,
17741 0xfc0003ff, 0x2000034d, 0 , 0,
17742 0x0 }, /* SUBUH[_R].QB */
17743 { instruction , 0 , 0 , 32,
17744 0xfc0003ff, 0x20000355, &NMD::SHRLV_QB , 0,
17745 DSP_ }, /* SHRLV.QB */
17746 { reserved_block , 0 , 0 , 32,
17747 0xfc0003ff, 0x2000035d, 0 , 0,
17748 0x0 }, /* _POOL32A5~*(107) */
17749 { reserved_block , 0 , 0 , 32,
17750 0xfc0003ff, 0x20000365, 0 , 0,
17751 0x0 }, /* _POOL32A5~*(108) */
17752 { reserved_block , 0 , 0 , 32,
17753 0xfc0003ff, 0x2000036d, 0 , 0,
17754 0x0 }, /* _POOL32A5~*(109) */
17755 { reserved_block , 0 , 0 , 32,
17756 0xfc0003ff, 0x20000375, 0 , 0,
17757 0x0 }, /* _POOL32A5~*(110) */
17758 { reserved_block , 0 , 0 , 32,
17759 0xfc0003ff, 0x2000037d, 0 , 0,
17760 0x0 }, /* _POOL32A5~*(111) */
17761 { instruction , 0 , 0 , 32,
17762 0xfc0003ff, 0x20000385, &NMD::ADDSC , 0,
17763 DSP_ }, /* ADDSC */
17764 { pool , SHLLV__S__PH , 2 , 32,
17765 0xfc0003ff, 0x2000038d, 0 , 0,
17766 0x0 }, /* SHLLV[_S].PH */
17767 { instruction , 0 , 0 , 32,
17768 0xfc0003ff, 0x20000395, &NMD::SHLLV_QB , 0,
17769 DSP_ }, /* SHLLV.QB */
17770 { reserved_block , 0 , 0 , 32,
17771 0xfc0003ff, 0x2000039d, 0 , 0,
17772 0x0 }, /* _POOL32A5~*(115) */
17773 { reserved_block , 0 , 0 , 32,
17774 0xfc0003ff, 0x200003a5, 0 , 0,
17775 0x0 }, /* _POOL32A5~*(116) */
17776 { reserved_block , 0 , 0 , 32,
17777 0xfc0003ff, 0x200003ad, 0 , 0,
17778 0x0 }, /* _POOL32A5~*(117) */
17779 { pool , SHLL__S__PH , 4 , 32,
17780 0xfc0003ff, 0x200003b5, 0 , 0,
17781 0x0 }, /* SHLL[_S].PH */
17782 { reserved_block , 0 , 0 , 32,
17783 0xfc0003ff, 0x200003bd, 0 , 0,
17784 0x0 }, /* _POOL32A5~*(119) */
17785 { instruction , 0 , 0 , 32,
17786 0xfc0003ff, 0x200003c5, &NMD::ADDWC , 0,
17787 DSP_ }, /* ADDWC */
17788 { pool , PRECR_SRA__R__PH_W , 2 , 32,
17789 0xfc0003ff, 0x200003cd, 0 , 0,
17790 0x0 }, /* PRECR_SRA[_R].PH.W */
17791 { instruction , 0 , 0 , 32,
17792 0xfc0003ff, 0x200003d5, &NMD::SHLLV_S_W , 0,
17793 DSP_ }, /* SHLLV_S.W */
17794 { reserved_block , 0 , 0 , 32,
17795 0xfc0003ff, 0x200003dd, 0 , 0,
17796 0x0 }, /* _POOL32A5~*(123) */
17797 { reserved_block , 0 , 0 , 32,
17798 0xfc0003ff, 0x200003e5, 0 , 0,
17799 0x0 }, /* _POOL32A5~*(124) */
17800 { reserved_block , 0 , 0 , 32,
17801 0xfc0003ff, 0x200003ed, 0 , 0,
17802 0x0 }, /* _POOL32A5~*(125) */
17803 { instruction , 0 , 0 , 32,
17804 0xfc0003ff, 0x200003f5, &NMD::SHLL_S_W , 0,
17805 DSP_ }, /* SHLL_S.W */
17806 { reserved_block , 0 , 0 , 32,
17807 0xfc0003ff, 0x200003fd, 0 , 0,
17808 0x0 }, /* _POOL32A5~*(127) */
17812 NMD::Pool NMD::PP_LSX[16] = {
17813 { instruction , 0 , 0 , 32,
17814 0xfc0007ff, 0x20000007, &NMD::LBX , 0,
17815 0x0 }, /* LBX */
17816 { instruction , 0 , 0 , 32,
17817 0xfc0007ff, 0x20000087, &NMD::SBX , 0,
17818 XMMS_ }, /* SBX */
17819 { instruction , 0 , 0 , 32,
17820 0xfc0007ff, 0x20000107, &NMD::LBUX , 0,
17821 0x0 }, /* LBUX */
17822 { reserved_block , 0 , 0 , 32,
17823 0xfc0007ff, 0x20000187, 0 , 0,
17824 0x0 }, /* PP.LSX~*(3) */
17825 { instruction , 0 , 0 , 32,
17826 0xfc0007ff, 0x20000207, &NMD::LHX , 0,
17827 0x0 }, /* LHX */
17828 { instruction , 0 , 0 , 32,
17829 0xfc0007ff, 0x20000287, &NMD::SHX , 0,
17830 XMMS_ }, /* SHX */
17831 { instruction , 0 , 0 , 32,
17832 0xfc0007ff, 0x20000307, &NMD::LHUX , 0,
17833 0x0 }, /* LHUX */
17834 { instruction , 0 , 0 , 32,
17835 0xfc0007ff, 0x20000387, &NMD::LWUX , 0,
17836 MIPS64_ }, /* LWUX */
17837 { instruction , 0 , 0 , 32,
17838 0xfc0007ff, 0x20000407, &NMD::LWX , 0,
17839 0x0 }, /* LWX */
17840 { instruction , 0 , 0 , 32,
17841 0xfc0007ff, 0x20000487, &NMD::SWX , 0,
17842 XMMS_ }, /* SWX */
17843 { instruction , 0 , 0 , 32,
17844 0xfc0007ff, 0x20000507, &NMD::LWC1X , 0,
17845 CP1_ }, /* LWC1X */
17846 { instruction , 0 , 0 , 32,
17847 0xfc0007ff, 0x20000587, &NMD::SWC1X , 0,
17848 CP1_ }, /* SWC1X */
17849 { instruction , 0 , 0 , 32,
17850 0xfc0007ff, 0x20000607, &NMD::LDX , 0,
17851 MIPS64_ }, /* LDX */
17852 { instruction , 0 , 0 , 32,
17853 0xfc0007ff, 0x20000687, &NMD::SDX , 0,
17854 MIPS64_ }, /* SDX */
17855 { instruction , 0 , 0 , 32,
17856 0xfc0007ff, 0x20000707, &NMD::LDC1X , 0,
17857 CP1_ }, /* LDC1X */
17858 { instruction , 0 , 0 , 32,
17859 0xfc0007ff, 0x20000787, &NMD::SDC1X , 0,
17860 CP1_ }, /* SDC1X */
17864 NMD::Pool NMD::PP_LSXS[16] = {
17865 { reserved_block , 0 , 0 , 32,
17866 0xfc0007ff, 0x20000047, 0 , 0,
17867 0x0 }, /* PP.LSXS~*(0) */
17868 { reserved_block , 0 , 0 , 32,
17869 0xfc0007ff, 0x200000c7, 0 , 0,
17870 0x0 }, /* PP.LSXS~*(1) */
17871 { reserved_block , 0 , 0 , 32,
17872 0xfc0007ff, 0x20000147, 0 , 0,
17873 0x0 }, /* PP.LSXS~*(2) */
17874 { reserved_block , 0 , 0 , 32,
17875 0xfc0007ff, 0x200001c7, 0 , 0,
17876 0x0 }, /* PP.LSXS~*(3) */
17877 { instruction , 0 , 0 , 32,
17878 0xfc0007ff, 0x20000247, &NMD::LHXS , 0,
17879 0x0 }, /* LHXS */
17880 { instruction , 0 , 0 , 32,
17881 0xfc0007ff, 0x200002c7, &NMD::SHXS , 0,
17882 XMMS_ }, /* SHXS */
17883 { instruction , 0 , 0 , 32,
17884 0xfc0007ff, 0x20000347, &NMD::LHUXS , 0,
17885 0x0 }, /* LHUXS */
17886 { instruction , 0 , 0 , 32,
17887 0xfc0007ff, 0x200003c7, &NMD::LWUXS , 0,
17888 MIPS64_ }, /* LWUXS */
17889 { instruction , 0 , 0 , 32,
17890 0xfc0007ff, 0x20000447, &NMD::LWXS_32_ , 0,
17891 0x0 }, /* LWXS[32] */
17892 { instruction , 0 , 0 , 32,
17893 0xfc0007ff, 0x200004c7, &NMD::SWXS , 0,
17894 XMMS_ }, /* SWXS */
17895 { instruction , 0 , 0 , 32,
17896 0xfc0007ff, 0x20000547, &NMD::LWC1XS , 0,
17897 CP1_ }, /* LWC1XS */
17898 { instruction , 0 , 0 , 32,
17899 0xfc0007ff, 0x200005c7, &NMD::SWC1XS , 0,
17900 CP1_ }, /* SWC1XS */
17901 { instruction , 0 , 0 , 32,
17902 0xfc0007ff, 0x20000647, &NMD::LDXS , 0,
17903 MIPS64_ }, /* LDXS */
17904 { instruction , 0 , 0 , 32,
17905 0xfc0007ff, 0x200006c7, &NMD::SDXS , 0,
17906 MIPS64_ }, /* SDXS */
17907 { instruction , 0 , 0 , 32,
17908 0xfc0007ff, 0x20000747, &NMD::LDC1XS , 0,
17909 CP1_ }, /* LDC1XS */
17910 { instruction , 0 , 0 , 32,
17911 0xfc0007ff, 0x200007c7, &NMD::SDC1XS , 0,
17912 CP1_ }, /* SDC1XS */
17916 NMD::Pool NMD::P_LSX[2] = {
17917 { pool , PP_LSX , 16 , 32,
17918 0xfc00007f, 0x20000007, 0 , 0,
17919 0x0 }, /* PP.LSX */
17920 { pool , PP_LSXS , 16 , 32,
17921 0xfc00007f, 0x20000047, 0 , 0,
17922 0x0 }, /* PP.LSXS */
17926 NMD::Pool NMD::POOL32Axf_1_0[4] = {
17927 { instruction , 0 , 0 , 32,
17928 0xfc003fff, 0x2000007f, &NMD::MFHI_DSP_ , 0,
17929 DSP_ }, /* MFHI[DSP] */
17930 { instruction , 0 , 0 , 32,
17931 0xfc003fff, 0x2000107f, &NMD::MFLO_DSP_ , 0,
17932 DSP_ }, /* MFLO[DSP] */
17933 { instruction , 0 , 0 , 32,
17934 0xfc003fff, 0x2000207f, &NMD::MTHI_DSP_ , 0,
17935 DSP_ }, /* MTHI[DSP] */
17936 { instruction , 0 , 0 , 32,
17937 0xfc003fff, 0x2000307f, &NMD::MTLO_DSP_ , 0,
17938 DSP_ }, /* MTLO[DSP] */
17942 NMD::Pool NMD::POOL32Axf_1_1[4] = {
17943 { instruction , 0 , 0 , 32,
17944 0xfc003fff, 0x2000027f, &NMD::MTHLIP , 0,
17945 DSP_ }, /* MTHLIP */
17946 { instruction , 0 , 0 , 32,
17947 0xfc003fff, 0x2000127f, &NMD::SHILOV , 0,
17948 DSP_ }, /* SHILOV */
17949 { reserved_block , 0 , 0 , 32,
17950 0xfc003fff, 0x2000227f, 0 , 0,
17951 0x0 }, /* POOL32Axf_1_1~*(2) */
17952 { reserved_block , 0 , 0 , 32,
17953 0xfc003fff, 0x2000327f, 0 , 0,
17954 0x0 }, /* POOL32Axf_1_1~*(3) */
17958 NMD::Pool NMD::POOL32Axf_1_3[4] = {
17959 { instruction , 0 , 0 , 32,
17960 0xfc003fff, 0x2000067f, &NMD::RDDSP , 0,
17961 DSP_ }, /* RDDSP */
17962 { instruction , 0 , 0 , 32,
17963 0xfc003fff, 0x2000167f, &NMD::WRDSP , 0,
17964 DSP_ }, /* WRDSP */
17965 { instruction , 0 , 0 , 32,
17966 0xfc003fff, 0x2000267f, &NMD::EXTP , 0,
17967 DSP_ }, /* EXTP */
17968 { instruction , 0 , 0 , 32,
17969 0xfc003fff, 0x2000367f, &NMD::EXTPDP , 0,
17970 DSP_ }, /* EXTPDP */
17974 NMD::Pool NMD::POOL32Axf_1_4[2] = {
17975 { instruction , 0 , 0 , 32,
17976 0xfc001fff, 0x2000087f, &NMD::SHLL_QB , 0,
17977 DSP_ }, /* SHLL.QB */
17978 { instruction , 0 , 0 , 32,
17979 0xfc001fff, 0x2000187f, &NMD::SHRL_QB , 0,
17980 DSP_ }, /* SHRL.QB */
17984 NMD::Pool NMD::MAQ_S_A__W_PHR[2] = {
17985 { instruction , 0 , 0 , 32,
17986 0xfc003fff, 0x20000a7f, &NMD::MAQ_S_W_PHR , 0,
17987 DSP_ }, /* MAQ_S.W.PHR */
17988 { instruction , 0 , 0 , 32,
17989 0xfc003fff, 0x20002a7f, &NMD::MAQ_SA_W_PHR , 0,
17990 DSP_ }, /* MAQ_SA.W.PHR */
17994 NMD::Pool NMD::MAQ_S_A__W_PHL[2] = {
17995 { instruction , 0 , 0 , 32,
17996 0xfc003fff, 0x20001a7f, &NMD::MAQ_S_W_PHL , 0,
17997 DSP_ }, /* MAQ_S.W.PHL */
17998 { instruction , 0 , 0 , 32,
17999 0xfc003fff, 0x20003a7f, &NMD::MAQ_SA_W_PHL , 0,
18000 DSP_ }, /* MAQ_SA.W.PHL */
18004 NMD::Pool NMD::POOL32Axf_1_5[2] = {
18005 { pool , MAQ_S_A__W_PHR , 2 , 32,
18006 0xfc001fff, 0x20000a7f, 0 , 0,
18007 0x0 }, /* MAQ_S[A].W.PHR */
18008 { pool , MAQ_S_A__W_PHL , 2 , 32,
18009 0xfc001fff, 0x20001a7f, 0 , 0,
18010 0x0 }, /* MAQ_S[A].W.PHL */
18014 NMD::Pool NMD::POOL32Axf_1_7[4] = {
18015 { instruction , 0 , 0 , 32,
18016 0xfc003fff, 0x20000e7f, &NMD::EXTR_W , 0,
18017 DSP_ }, /* EXTR.W */
18018 { instruction , 0 , 0 , 32,
18019 0xfc003fff, 0x20001e7f, &NMD::EXTR_R_W , 0,
18020 DSP_ }, /* EXTR_R.W */
18021 { instruction , 0 , 0 , 32,
18022 0xfc003fff, 0x20002e7f, &NMD::EXTR_RS_W , 0,
18023 DSP_ }, /* EXTR_RS.W */
18024 { instruction , 0 , 0 , 32,
18025 0xfc003fff, 0x20003e7f, &NMD::EXTR_S_H , 0,
18026 DSP_ }, /* EXTR_S.H */
18030 NMD::Pool NMD::POOL32Axf_1[8] = {
18031 { pool , POOL32Axf_1_0 , 4 , 32,
18032 0xfc000fff, 0x2000007f, 0 , 0,
18033 0x0 }, /* POOL32Axf_1_0 */
18034 { pool , POOL32Axf_1_1 , 4 , 32,
18035 0xfc000fff, 0x2000027f, 0 , 0,
18036 0x0 }, /* POOL32Axf_1_1 */
18037 { reserved_block , 0 , 0 , 32,
18038 0xfc000fff, 0x2000047f, 0 , 0,
18039 0x0 }, /* POOL32Axf_1~*(2) */
18040 { pool , POOL32Axf_1_3 , 4 , 32,
18041 0xfc000fff, 0x2000067f, 0 , 0,
18042 0x0 }, /* POOL32Axf_1_3 */
18043 { pool , POOL32Axf_1_4 , 2 , 32,
18044 0xfc000fff, 0x2000087f, 0 , 0,
18045 0x0 }, /* POOL32Axf_1_4 */
18046 { pool , POOL32Axf_1_5 , 2 , 32,
18047 0xfc000fff, 0x20000a7f, 0 , 0,
18048 0x0 }, /* POOL32Axf_1_5 */
18049 { reserved_block , 0 , 0 , 32,
18050 0xfc000fff, 0x20000c7f, 0 , 0,
18051 0x0 }, /* POOL32Axf_1~*(6) */
18052 { pool , POOL32Axf_1_7 , 4 , 32,
18053 0xfc000fff, 0x20000e7f, 0 , 0,
18054 0x0 }, /* POOL32Axf_1_7 */
18058 NMD::Pool NMD::POOL32Axf_2_DSP__0_7[8] = {
18059 { instruction , 0 , 0 , 32,
18060 0xfc003fff, 0x200000bf, &NMD::DPA_W_PH , 0,
18061 DSP_ }, /* DPA.W.PH */
18062 { instruction , 0 , 0 , 32,
18063 0xfc003fff, 0x200002bf, &NMD::DPAQ_S_W_PH , 0,
18064 DSP_ }, /* DPAQ_S.W.PH */
18065 { instruction , 0 , 0 , 32,
18066 0xfc003fff, 0x200004bf, &NMD::DPS_W_PH , 0,
18067 DSP_ }, /* DPS.W.PH */
18068 { instruction , 0 , 0 , 32,
18069 0xfc003fff, 0x200006bf, &NMD::DPSQ_S_W_PH , 0,
18070 DSP_ }, /* DPSQ_S.W.PH */
18071 { reserved_block , 0 , 0 , 32,
18072 0xfc003fff, 0x200008bf, 0 , 0,
18073 0x0 }, /* POOL32Axf_2(DSP)_0_7~*(4) */
18074 { instruction , 0 , 0 , 32,
18075 0xfc003fff, 0x20000abf, &NMD::MADD_DSP_ , 0,
18076 DSP_ }, /* MADD[DSP] */
18077 { instruction , 0 , 0 , 32,
18078 0xfc003fff, 0x20000cbf, &NMD::MULT_DSP_ , 0,
18079 DSP_ }, /* MULT[DSP] */
18080 { instruction , 0 , 0 , 32,
18081 0xfc003fff, 0x20000ebf, &NMD::EXTRV_W , 0,
18082 DSP_ }, /* EXTRV.W */
18086 NMD::Pool NMD::POOL32Axf_2_DSP__8_15[8] = {
18087 { instruction , 0 , 0 , 32,
18088 0xfc003fff, 0x200010bf, &NMD::DPAX_W_PH , 0,
18089 DSP_ }, /* DPAX.W.PH */
18090 { instruction , 0 , 0 , 32,
18091 0xfc003fff, 0x200012bf, &NMD::DPAQ_SA_L_W , 0,
18092 DSP_ }, /* DPAQ_SA.L.W */
18093 { instruction , 0 , 0 , 32,
18094 0xfc003fff, 0x200014bf, &NMD::DPSX_W_PH , 0,
18095 DSP_ }, /* DPSX.W.PH */
18096 { instruction , 0 , 0 , 32,
18097 0xfc003fff, 0x200016bf, &NMD::DPSQ_SA_L_W , 0,
18098 DSP_ }, /* DPSQ_SA.L.W */
18099 { reserved_block , 0 , 0 , 32,
18100 0xfc003fff, 0x200018bf, 0 , 0,
18101 0x0 }, /* POOL32Axf_2(DSP)_8_15~*(4) */
18102 { instruction , 0 , 0 , 32,
18103 0xfc003fff, 0x20001abf, &NMD::MADDU_DSP_ , 0,
18104 DSP_ }, /* MADDU[DSP] */
18105 { instruction , 0 , 0 , 32,
18106 0xfc003fff, 0x20001cbf, &NMD::MULTU_DSP_ , 0,
18107 DSP_ }, /* MULTU[DSP] */
18108 { instruction , 0 , 0 , 32,
18109 0xfc003fff, 0x20001ebf, &NMD::EXTRV_R_W , 0,
18110 DSP_ }, /* EXTRV_R.W */
18114 NMD::Pool NMD::POOL32Axf_2_DSP__16_23[8] = {
18115 { instruction , 0 , 0 , 32,
18116 0xfc003fff, 0x200020bf, &NMD::DPAU_H_QBL , 0,
18117 DSP_ }, /* DPAU.H.QBL */
18118 { instruction , 0 , 0 , 32,
18119 0xfc003fff, 0x200022bf, &NMD::DPAQX_S_W_PH , 0,
18120 DSP_ }, /* DPAQX_S.W.PH */
18121 { instruction , 0 , 0 , 32,
18122 0xfc003fff, 0x200024bf, &NMD::DPSU_H_QBL , 0,
18123 DSP_ }, /* DPSU.H.QBL */
18124 { instruction , 0 , 0 , 32,
18125 0xfc003fff, 0x200026bf, &NMD::DPSQX_S_W_PH , 0,
18126 DSP_ }, /* DPSQX_S.W.PH */
18127 { instruction , 0 , 0 , 32,
18128 0xfc003fff, 0x200028bf, &NMD::EXTPV , 0,
18129 DSP_ }, /* EXTPV */
18130 { instruction , 0 , 0 , 32,
18131 0xfc003fff, 0x20002abf, &NMD::MSUB_DSP_ , 0,
18132 DSP_ }, /* MSUB[DSP] */
18133 { instruction , 0 , 0 , 32,
18134 0xfc003fff, 0x20002cbf, &NMD::MULSA_W_PH , 0,
18135 DSP_ }, /* MULSA.W.PH */
18136 { instruction , 0 , 0 , 32,
18137 0xfc003fff, 0x20002ebf, &NMD::EXTRV_RS_W , 0,
18138 DSP_ }, /* EXTRV_RS.W */
18142 NMD::Pool NMD::POOL32Axf_2_DSP__24_31[8] = {
18143 { instruction , 0 , 0 , 32,
18144 0xfc003fff, 0x200030bf, &NMD::DPAU_H_QBR , 0,
18145 DSP_ }, /* DPAU.H.QBR */
18146 { instruction , 0 , 0 , 32,
18147 0xfc003fff, 0x200032bf, &NMD::DPAQX_SA_W_PH , 0,
18148 DSP_ }, /* DPAQX_SA.W.PH */
18149 { instruction , 0 , 0 , 32,
18150 0xfc003fff, 0x200034bf, &NMD::DPSU_H_QBR , 0,
18151 DSP_ }, /* DPSU.H.QBR */
18152 { instruction , 0 , 0 , 32,
18153 0xfc003fff, 0x200036bf, &NMD::DPSQX_SA_W_PH , 0,
18154 DSP_ }, /* DPSQX_SA.W.PH */
18155 { instruction , 0 , 0 , 32,
18156 0xfc003fff, 0x200038bf, &NMD::EXTPDPV , 0,
18157 DSP_ }, /* EXTPDPV */
18158 { instruction , 0 , 0 , 32,
18159 0xfc003fff, 0x20003abf, &NMD::MSUBU_DSP_ , 0,
18160 DSP_ }, /* MSUBU[DSP] */
18161 { instruction , 0 , 0 , 32,
18162 0xfc003fff, 0x20003cbf, &NMD::MULSAQ_S_W_PH , 0,
18163 DSP_ }, /* MULSAQ_S.W.PH */
18164 { instruction , 0 , 0 , 32,
18165 0xfc003fff, 0x20003ebf, &NMD::EXTRV_S_H , 0,
18166 DSP_ }, /* EXTRV_S.H */
18170 NMD::Pool NMD::POOL32Axf_2[4] = {
18171 { pool , POOL32Axf_2_DSP__0_7, 8 , 32,
18172 0xfc0031ff, 0x200000bf, 0 , 0,
18173 0x0 }, /* POOL32Axf_2(DSP)_0_7 */
18174 { pool , POOL32Axf_2_DSP__8_15, 8 , 32,
18175 0xfc0031ff, 0x200010bf, 0 , 0,
18176 0x0 }, /* POOL32Axf_2(DSP)_8_15 */
18177 { pool , POOL32Axf_2_DSP__16_23, 8 , 32,
18178 0xfc0031ff, 0x200020bf, 0 , 0,
18179 0x0 }, /* POOL32Axf_2(DSP)_16_23 */
18180 { pool , POOL32Axf_2_DSP__24_31, 8 , 32,
18181 0xfc0031ff, 0x200030bf, 0 , 0,
18182 0x0 }, /* POOL32Axf_2(DSP)_24_31 */
18186 NMD::Pool NMD::POOL32Axf_4[128] = {
18187 { instruction , 0 , 0 , 32,
18188 0xfc00ffff, 0x2000013f, &NMD::ABSQ_S_QB , 0,
18189 DSP_ }, /* ABSQ_S.QB */
18190 { instruction , 0 , 0 , 32,
18191 0xfc00ffff, 0x2000033f, &NMD::REPLV_PH , 0,
18192 DSP_ }, /* REPLV.PH */
18193 { reserved_block , 0 , 0 , 32,
18194 0xfc00ffff, 0x2000053f, 0 , 0,
18195 0x0 }, /* POOL32Axf_4~*(2) */
18196 { reserved_block , 0 , 0 , 32,
18197 0xfc00ffff, 0x2000073f, 0 , 0,
18198 0x0 }, /* POOL32Axf_4~*(3) */
18199 { reserved_block , 0 , 0 , 32,
18200 0xfc00ffff, 0x2000093f, 0 , 0,
18201 0x0 }, /* POOL32Axf_4~*(4) */
18202 { reserved_block , 0 , 0 , 32,
18203 0xfc00ffff, 0x20000b3f, 0 , 0,
18204 0x0 }, /* POOL32Axf_4~*(5) */
18205 { reserved_block , 0 , 0 , 32,
18206 0xfc00ffff, 0x20000d3f, 0 , 0,
18207 0x0 }, /* POOL32Axf_4~*(6) */
18208 { reserved_block , 0 , 0 , 32,
18209 0xfc00ffff, 0x20000f3f, 0 , 0,
18210 0x0 }, /* POOL32Axf_4~*(7) */
18211 { instruction , 0 , 0 , 32,
18212 0xfc00ffff, 0x2000113f, &NMD::ABSQ_S_PH , 0,
18213 DSP_ }, /* ABSQ_S.PH */
18214 { instruction , 0 , 0 , 32,
18215 0xfc00ffff, 0x2000133f, &NMD::REPLV_QB , 0,
18216 DSP_ }, /* REPLV.QB */
18217 { reserved_block , 0 , 0 , 32,
18218 0xfc00ffff, 0x2000153f, 0 , 0,
18219 0x0 }, /* POOL32Axf_4~*(10) */
18220 { reserved_block , 0 , 0 , 32,
18221 0xfc00ffff, 0x2000173f, 0 , 0,
18222 0x0 }, /* POOL32Axf_4~*(11) */
18223 { reserved_block , 0 , 0 , 32,
18224 0xfc00ffff, 0x2000193f, 0 , 0,
18225 0x0 }, /* POOL32Axf_4~*(12) */
18226 { reserved_block , 0 , 0 , 32,
18227 0xfc00ffff, 0x20001b3f, 0 , 0,
18228 0x0 }, /* POOL32Axf_4~*(13) */
18229 { reserved_block , 0 , 0 , 32,
18230 0xfc00ffff, 0x20001d3f, 0 , 0,
18231 0x0 }, /* POOL32Axf_4~*(14) */
18232 { reserved_block , 0 , 0 , 32,
18233 0xfc00ffff, 0x20001f3f, 0 , 0,
18234 0x0 }, /* POOL32Axf_4~*(15) */
18235 { instruction , 0 , 0 , 32,
18236 0xfc00ffff, 0x2000213f, &NMD::ABSQ_S_W , 0,
18237 DSP_ }, /* ABSQ_S.W */
18238 { reserved_block , 0 , 0 , 32,
18239 0xfc00ffff, 0x2000233f, 0 , 0,
18240 0x0 }, /* POOL32Axf_4~*(17) */
18241 { reserved_block , 0 , 0 , 32,
18242 0xfc00ffff, 0x2000253f, 0 , 0,
18243 0x0 }, /* POOL32Axf_4~*(18) */
18244 { reserved_block , 0 , 0 , 32,
18245 0xfc00ffff, 0x2000273f, 0 , 0,
18246 0x0 }, /* POOL32Axf_4~*(19) */
18247 { reserved_block , 0 , 0 , 32,
18248 0xfc00ffff, 0x2000293f, 0 , 0,
18249 0x0 }, /* POOL32Axf_4~*(20) */
18250 { reserved_block , 0 , 0 , 32,
18251 0xfc00ffff, 0x20002b3f, 0 , 0,
18252 0x0 }, /* POOL32Axf_4~*(21) */
18253 { reserved_block , 0 , 0 , 32,
18254 0xfc00ffff, 0x20002d3f, 0 , 0,
18255 0x0 }, /* POOL32Axf_4~*(22) */
18256 { reserved_block , 0 , 0 , 32,
18257 0xfc00ffff, 0x20002f3f, 0 , 0,
18258 0x0 }, /* POOL32Axf_4~*(23) */
18259 { reserved_block , 0 , 0 , 32,
18260 0xfc00ffff, 0x2000313f, 0 , 0,
18261 0x0 }, /* POOL32Axf_4~*(24) */
18262 { reserved_block , 0 , 0 , 32,
18263 0xfc00ffff, 0x2000333f, 0 , 0,
18264 0x0 }, /* POOL32Axf_4~*(25) */
18265 { reserved_block , 0 , 0 , 32,
18266 0xfc00ffff, 0x2000353f, 0 , 0,
18267 0x0 }, /* POOL32Axf_4~*(26) */
18268 { reserved_block , 0 , 0 , 32,
18269 0xfc00ffff, 0x2000373f, 0 , 0,
18270 0x0 }, /* POOL32Axf_4~*(27) */
18271 { reserved_block , 0 , 0 , 32,
18272 0xfc00ffff, 0x2000393f, 0 , 0,
18273 0x0 }, /* POOL32Axf_4~*(28) */
18274 { reserved_block , 0 , 0 , 32,
18275 0xfc00ffff, 0x20003b3f, 0 , 0,
18276 0x0 }, /* POOL32Axf_4~*(29) */
18277 { reserved_block , 0 , 0 , 32,
18278 0xfc00ffff, 0x20003d3f, 0 , 0,
18279 0x0 }, /* POOL32Axf_4~*(30) */
18280 { reserved_block , 0 , 0 , 32,
18281 0xfc00ffff, 0x20003f3f, 0 , 0,
18282 0x0 }, /* POOL32Axf_4~*(31) */
18283 { instruction , 0 , 0 , 32,
18284 0xfc00ffff, 0x2000413f, &NMD::INSV , 0,
18285 DSP_ }, /* INSV */
18286 { reserved_block , 0 , 0 , 32,
18287 0xfc00ffff, 0x2000433f, 0 , 0,
18288 0x0 }, /* POOL32Axf_4~*(33) */
18289 { reserved_block , 0 , 0 , 32,
18290 0xfc00ffff, 0x2000453f, 0 , 0,
18291 0x0 }, /* POOL32Axf_4~*(34) */
18292 { reserved_block , 0 , 0 , 32,
18293 0xfc00ffff, 0x2000473f, 0 , 0,
18294 0x0 }, /* POOL32Axf_4~*(35) */
18295 { reserved_block , 0 , 0 , 32,
18296 0xfc00ffff, 0x2000493f, 0 , 0,
18297 0x0 }, /* POOL32Axf_4~*(36) */
18298 { instruction , 0 , 0 , 32,
18299 0xfc00ffff, 0x20004b3f, &NMD::CLO , 0,
18300 XMMS_ }, /* CLO */
18301 { instruction , 0 , 0 , 32,
18302 0xfc00ffff, 0x20004d3f, &NMD::MFC2 , 0,
18303 CP2_ }, /* MFC2 */
18304 { reserved_block , 0 , 0 , 32,
18305 0xfc00ffff, 0x20004f3f, 0 , 0,
18306 0x0 }, /* POOL32Axf_4~*(39) */
18307 { instruction , 0 , 0 , 32,
18308 0xfc00ffff, 0x2000513f, &NMD::PRECEQ_W_PHL , 0,
18309 DSP_ }, /* PRECEQ.W.PHL */
18310 { reserved_block , 0 , 0 , 32,
18311 0xfc00ffff, 0x2000533f, 0 , 0,
18312 0x0 }, /* POOL32Axf_4~*(41) */
18313 { reserved_block , 0 , 0 , 32,
18314 0xfc00ffff, 0x2000553f, 0 , 0,
18315 0x0 }, /* POOL32Axf_4~*(42) */
18316 { reserved_block , 0 , 0 , 32,
18317 0xfc00ffff, 0x2000573f, 0 , 0,
18318 0x0 }, /* POOL32Axf_4~*(43) */
18319 { reserved_block , 0 , 0 , 32,
18320 0xfc00ffff, 0x2000593f, 0 , 0,
18321 0x0 }, /* POOL32Axf_4~*(44) */
18322 { instruction , 0 , 0 , 32,
18323 0xfc00ffff, 0x20005b3f, &NMD::CLZ , 0,
18324 XMMS_ }, /* CLZ */
18325 { instruction , 0 , 0 , 32,
18326 0xfc00ffff, 0x20005d3f, &NMD::MTC2 , 0,
18327 CP2_ }, /* MTC2 */
18328 { reserved_block , 0 , 0 , 32,
18329 0xfc00ffff, 0x20005f3f, 0 , 0,
18330 0x0 }, /* POOL32Axf_4~*(47) */
18331 { instruction , 0 , 0 , 32,
18332 0xfc00ffff, 0x2000613f, &NMD::PRECEQ_W_PHR , 0,
18333 DSP_ }, /* PRECEQ.W.PHR */
18334 { reserved_block , 0 , 0 , 32,
18335 0xfc00ffff, 0x2000633f, 0 , 0,
18336 0x0 }, /* POOL32Axf_4~*(49) */
18337 { reserved_block , 0 , 0 , 32,
18338 0xfc00ffff, 0x2000653f, 0 , 0,
18339 0x0 }, /* POOL32Axf_4~*(50) */
18340 { reserved_block , 0 , 0 , 32,
18341 0xfc00ffff, 0x2000673f, 0 , 0,
18342 0x0 }, /* POOL32Axf_4~*(51) */
18343 { reserved_block , 0 , 0 , 32,
18344 0xfc00ffff, 0x2000693f, 0 , 0,
18345 0x0 }, /* POOL32Axf_4~*(52) */
18346 { reserved_block , 0 , 0 , 32,
18347 0xfc00ffff, 0x20006b3f, 0 , 0,
18348 0x0 }, /* POOL32Axf_4~*(53) */
18349 { instruction , 0 , 0 , 32,
18350 0xfc00ffff, 0x20006d3f, &NMD::DMFC2 , 0,
18351 CP2_ }, /* DMFC2 */
18352 { reserved_block , 0 , 0 , 32,
18353 0xfc00ffff, 0x20006f3f, 0 , 0,
18354 0x0 }, /* POOL32Axf_4~*(55) */
18355 { instruction , 0 , 0 , 32,
18356 0xfc00ffff, 0x2000713f, &NMD::PRECEQU_PH_QBL , 0,
18357 DSP_ }, /* PRECEQU.PH.QBL */
18358 { instruction , 0 , 0 , 32,
18359 0xfc00ffff, 0x2000733f, &NMD::PRECEQU_PH_QBLA , 0,
18360 DSP_ }, /* PRECEQU.PH.QBLA */
18361 { reserved_block , 0 , 0 , 32,
18362 0xfc00ffff, 0x2000753f, 0 , 0,
18363 0x0 }, /* POOL32Axf_4~*(58) */
18364 { reserved_block , 0 , 0 , 32,
18365 0xfc00ffff, 0x2000773f, 0 , 0,
18366 0x0 }, /* POOL32Axf_4~*(59) */
18367 { reserved_block , 0 , 0 , 32,
18368 0xfc00ffff, 0x2000793f, 0 , 0,
18369 0x0 }, /* POOL32Axf_4~*(60) */
18370 { reserved_block , 0 , 0 , 32,
18371 0xfc00ffff, 0x20007b3f, 0 , 0,
18372 0x0 }, /* POOL32Axf_4~*(61) */
18373 { instruction , 0 , 0 , 32,
18374 0xfc00ffff, 0x20007d3f, &NMD::DMTC2 , 0,
18375 CP2_ }, /* DMTC2 */
18376 { reserved_block , 0 , 0 , 32,
18377 0xfc00ffff, 0x20007f3f, 0 , 0,
18378 0x0 }, /* POOL32Axf_4~*(63) */
18379 { reserved_block , 0 , 0 , 32,
18380 0xfc00ffff, 0x2000813f, 0 , 0,
18381 0x0 }, /* POOL32Axf_4~*(64) */
18382 { reserved_block , 0 , 0 , 32,
18383 0xfc00ffff, 0x2000833f, 0 , 0,
18384 0x0 }, /* POOL32Axf_4~*(65) */
18385 { reserved_block , 0 , 0 , 32,
18386 0xfc00ffff, 0x2000853f, 0 , 0,
18387 0x0 }, /* POOL32Axf_4~*(66) */
18388 { reserved_block , 0 , 0 , 32,
18389 0xfc00ffff, 0x2000873f, 0 , 0,
18390 0x0 }, /* POOL32Axf_4~*(67) */
18391 { reserved_block , 0 , 0 , 32,
18392 0xfc00ffff, 0x2000893f, 0 , 0,
18393 0x0 }, /* POOL32Axf_4~*(68) */
18394 { reserved_block , 0 , 0 , 32,
18395 0xfc00ffff, 0x20008b3f, 0 , 0,
18396 0x0 }, /* POOL32Axf_4~*(69) */
18397 { instruction , 0 , 0 , 32,
18398 0xfc00ffff, 0x20008d3f, &NMD::MFHC2 , 0,
18399 CP2_ }, /* MFHC2 */
18400 { reserved_block , 0 , 0 , 32,
18401 0xfc00ffff, 0x20008f3f, 0 , 0,
18402 0x0 }, /* POOL32Axf_4~*(71) */
18403 { instruction , 0 , 0 , 32,
18404 0xfc00ffff, 0x2000913f, &NMD::PRECEQU_PH_QBR , 0,
18405 DSP_ }, /* PRECEQU.PH.QBR */
18406 { instruction , 0 , 0 , 32,
18407 0xfc00ffff, 0x2000933f, &NMD::PRECEQU_PH_QBRA , 0,
18408 DSP_ }, /* PRECEQU.PH.QBRA */
18409 { reserved_block , 0 , 0 , 32,
18410 0xfc00ffff, 0x2000953f, 0 , 0,
18411 0x0 }, /* POOL32Axf_4~*(74) */
18412 { reserved_block , 0 , 0 , 32,
18413 0xfc00ffff, 0x2000973f, 0 , 0,
18414 0x0 }, /* POOL32Axf_4~*(75) */
18415 { reserved_block , 0 , 0 , 32,
18416 0xfc00ffff, 0x2000993f, 0 , 0,
18417 0x0 }, /* POOL32Axf_4~*(76) */
18418 { reserved_block , 0 , 0 , 32,
18419 0xfc00ffff, 0x20009b3f, 0 , 0,
18420 0x0 }, /* POOL32Axf_4~*(77) */
18421 { instruction , 0 , 0 , 32,
18422 0xfc00ffff, 0x20009d3f, &NMD::MTHC2 , 0,
18423 CP2_ }, /* MTHC2 */
18424 { reserved_block , 0 , 0 , 32,
18425 0xfc00ffff, 0x20009f3f, 0 , 0,
18426 0x0 }, /* POOL32Axf_4~*(79) */
18427 { reserved_block , 0 , 0 , 32,
18428 0xfc00ffff, 0x2000a13f, 0 , 0,
18429 0x0 }, /* POOL32Axf_4~*(80) */
18430 { reserved_block , 0 , 0 , 32,
18431 0xfc00ffff, 0x2000a33f, 0 , 0,
18432 0x0 }, /* POOL32Axf_4~*(81) */
18433 { reserved_block , 0 , 0 , 32,
18434 0xfc00ffff, 0x2000a53f, 0 , 0,
18435 0x0 }, /* POOL32Axf_4~*(82) */
18436 { reserved_block , 0 , 0 , 32,
18437 0xfc00ffff, 0x2000a73f, 0 , 0,
18438 0x0 }, /* POOL32Axf_4~*(83) */
18439 { reserved_block , 0 , 0 , 32,
18440 0xfc00ffff, 0x2000a93f, 0 , 0,
18441 0x0 }, /* POOL32Axf_4~*(84) */
18442 { reserved_block , 0 , 0 , 32,
18443 0xfc00ffff, 0x2000ab3f, 0 , 0,
18444 0x0 }, /* POOL32Axf_4~*(85) */
18445 { reserved_block , 0 , 0 , 32,
18446 0xfc00ffff, 0x2000ad3f, 0 , 0,
18447 0x0 }, /* POOL32Axf_4~*(86) */
18448 { reserved_block , 0 , 0 , 32,
18449 0xfc00ffff, 0x2000af3f, 0 , 0,
18450 0x0 }, /* POOL32Axf_4~*(87) */
18451 { instruction , 0 , 0 , 32,
18452 0xfc00ffff, 0x2000b13f, &NMD::PRECEU_PH_QBL , 0,
18453 DSP_ }, /* PRECEU.PH.QBL */
18454 { instruction , 0 , 0 , 32,
18455 0xfc00ffff, 0x2000b33f, &NMD::PRECEU_PH_QBLA , 0,
18456 DSP_ }, /* PRECEU.PH.QBLA */
18457 { reserved_block , 0 , 0 , 32,
18458 0xfc00ffff, 0x2000b53f, 0 , 0,
18459 0x0 }, /* POOL32Axf_4~*(90) */
18460 { reserved_block , 0 , 0 , 32,
18461 0xfc00ffff, 0x2000b73f, 0 , 0,
18462 0x0 }, /* POOL32Axf_4~*(91) */
18463 { reserved_block , 0 , 0 , 32,
18464 0xfc00ffff, 0x2000b93f, 0 , 0,
18465 0x0 }, /* POOL32Axf_4~*(92) */
18466 { reserved_block , 0 , 0 , 32,
18467 0xfc00ffff, 0x2000bb3f, 0 , 0,
18468 0x0 }, /* POOL32Axf_4~*(93) */
18469 { reserved_block , 0 , 0 , 32,
18470 0xfc00ffff, 0x2000bd3f, 0 , 0,
18471 0x0 }, /* POOL32Axf_4~*(94) */
18472 { reserved_block , 0 , 0 , 32,
18473 0xfc00ffff, 0x2000bf3f, 0 , 0,
18474 0x0 }, /* POOL32Axf_4~*(95) */
18475 { reserved_block , 0 , 0 , 32,
18476 0xfc00ffff, 0x2000c13f, 0 , 0,
18477 0x0 }, /* POOL32Axf_4~*(96) */
18478 { reserved_block , 0 , 0 , 32,
18479 0xfc00ffff, 0x2000c33f, 0 , 0,
18480 0x0 }, /* POOL32Axf_4~*(97) */
18481 { reserved_block , 0 , 0 , 32,
18482 0xfc00ffff, 0x2000c53f, 0 , 0,
18483 0x0 }, /* POOL32Axf_4~*(98) */
18484 { reserved_block , 0 , 0 , 32,
18485 0xfc00ffff, 0x2000c73f, 0 , 0,
18486 0x0 }, /* POOL32Axf_4~*(99) */
18487 { reserved_block , 0 , 0 , 32,
18488 0xfc00ffff, 0x2000c93f, 0 , 0,
18489 0x0 }, /* POOL32Axf_4~*(100) */
18490 { reserved_block , 0 , 0 , 32,
18491 0xfc00ffff, 0x2000cb3f, 0 , 0,
18492 0x0 }, /* POOL32Axf_4~*(101) */
18493 { instruction , 0 , 0 , 32,
18494 0xfc00ffff, 0x2000cd3f, &NMD::CFC2 , 0,
18495 CP2_ }, /* CFC2 */
18496 { reserved_block , 0 , 0 , 32,
18497 0xfc00ffff, 0x2000cf3f, 0 , 0,
18498 0x0 }, /* POOL32Axf_4~*(103) */
18499 { instruction , 0 , 0 , 32,
18500 0xfc00ffff, 0x2000d13f, &NMD::PRECEU_PH_QBR , 0,
18501 DSP_ }, /* PRECEU.PH.QBR */
18502 { instruction , 0 , 0 , 32,
18503 0xfc00ffff, 0x2000d33f, &NMD::PRECEU_PH_QBRA , 0,
18504 DSP_ }, /* PRECEU.PH.QBRA */
18505 { reserved_block , 0 , 0 , 32,
18506 0xfc00ffff, 0x2000d53f, 0 , 0,
18507 0x0 }, /* POOL32Axf_4~*(106) */
18508 { reserved_block , 0 , 0 , 32,
18509 0xfc00ffff, 0x2000d73f, 0 , 0,
18510 0x0 }, /* POOL32Axf_4~*(107) */
18511 { reserved_block , 0 , 0 , 32,
18512 0xfc00ffff, 0x2000d93f, 0 , 0,
18513 0x0 }, /* POOL32Axf_4~*(108) */
18514 { reserved_block , 0 , 0 , 32,
18515 0xfc00ffff, 0x2000db3f, 0 , 0,
18516 0x0 }, /* POOL32Axf_4~*(109) */
18517 { instruction , 0 , 0 , 32,
18518 0xfc00ffff, 0x2000dd3f, &NMD::CTC2 , 0,
18519 CP2_ }, /* CTC2 */
18520 { reserved_block , 0 , 0 , 32,
18521 0xfc00ffff, 0x2000df3f, 0 , 0,
18522 0x0 }, /* POOL32Axf_4~*(111) */
18523 { reserved_block , 0 , 0 , 32,
18524 0xfc00ffff, 0x2000e13f, 0 , 0,
18525 0x0 }, /* POOL32Axf_4~*(112) */
18526 { reserved_block , 0 , 0 , 32,
18527 0xfc00ffff, 0x2000e33f, 0 , 0,
18528 0x0 }, /* POOL32Axf_4~*(113) */
18529 { reserved_block , 0 , 0 , 32,
18530 0xfc00ffff, 0x2000e53f, 0 , 0,
18531 0x0 }, /* POOL32Axf_4~*(114) */
18532 { reserved_block , 0 , 0 , 32,
18533 0xfc00ffff, 0x2000e73f, 0 , 0,
18534 0x0 }, /* POOL32Axf_4~*(115) */
18535 { reserved_block , 0 , 0 , 32,
18536 0xfc00ffff, 0x2000e93f, 0 , 0,
18537 0x0 }, /* POOL32Axf_4~*(116) */
18538 { reserved_block , 0 , 0 , 32,
18539 0xfc00ffff, 0x2000eb3f, 0 , 0,
18540 0x0 }, /* POOL32Axf_4~*(117) */
18541 { reserved_block , 0 , 0 , 32,
18542 0xfc00ffff, 0x2000ed3f, 0 , 0,
18543 0x0 }, /* POOL32Axf_4~*(118) */
18544 { reserved_block , 0 , 0 , 32,
18545 0xfc00ffff, 0x2000ef3f, 0 , 0,
18546 0x0 }, /* POOL32Axf_4~*(119) */
18547 { instruction , 0 , 0 , 32,
18548 0xfc00ffff, 0x2000f13f, &NMD::RADDU_W_QB , 0,
18549 DSP_ }, /* RADDU.W.QB */
18550 { reserved_block , 0 , 0 , 32,
18551 0xfc00ffff, 0x2000f33f, 0 , 0,
18552 0x0 }, /* POOL32Axf_4~*(121) */
18553 { reserved_block , 0 , 0 , 32,
18554 0xfc00ffff, 0x2000f53f, 0 , 0,
18555 0x0 }, /* POOL32Axf_4~*(122) */
18556 { reserved_block , 0 , 0 , 32,
18557 0xfc00ffff, 0x2000f73f, 0 , 0,
18558 0x0 }, /* POOL32Axf_4~*(123) */
18559 { reserved_block , 0 , 0 , 32,
18560 0xfc00ffff, 0x2000f93f, 0 , 0,
18561 0x0 }, /* POOL32Axf_4~*(124) */
18562 { reserved_block , 0 , 0 , 32,
18563 0xfc00ffff, 0x2000fb3f, 0 , 0,
18564 0x0 }, /* POOL32Axf_4~*(125) */
18565 { reserved_block , 0 , 0 , 32,
18566 0xfc00ffff, 0x2000fd3f, 0 , 0,
18567 0x0 }, /* POOL32Axf_4~*(126) */
18568 { reserved_block , 0 , 0 , 32,
18569 0xfc00ffff, 0x2000ff3f, 0 , 0,
18570 0x0 }, /* POOL32Axf_4~*(127) */
18574 NMD::Pool NMD::POOL32Axf_5_group0[32] = {
18575 { instruction , 0 , 0 , 32,
18576 0xfc00ffff, 0x2000017f, &NMD::TLBGP , 0,
18577 CP0_ | VZ_ | TLB_ }, /* TLBGP */
18578 { instruction , 0 , 0 , 32,
18579 0xfc00ffff, 0x2000037f, &NMD::TLBP , 0,
18580 CP0_ | TLB_ }, /* TLBP */
18581 { instruction , 0 , 0 , 32,
18582 0xfc00ffff, 0x2000057f, &NMD::TLBGINV , 0,
18583 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINV */
18584 { instruction , 0 , 0 , 32,
18585 0xfc00ffff, 0x2000077f, &NMD::TLBINV , 0,
18586 CP0_ | TLB_ | TLBINV_}, /* TLBINV */
18587 { reserved_block , 0 , 0 , 32,
18588 0xfc00ffff, 0x2000097f, 0 , 0,
18589 0x0 }, /* POOL32Axf_5_group0~*(4) */
18590 { reserved_block , 0 , 0 , 32,
18591 0xfc00ffff, 0x20000b7f, 0 , 0,
18592 0x0 }, /* POOL32Axf_5_group0~*(5) */
18593 { reserved_block , 0 , 0 , 32,
18594 0xfc00ffff, 0x20000d7f, 0 , 0,
18595 0x0 }, /* POOL32Axf_5_group0~*(6) */
18596 { reserved_block , 0 , 0 , 32,
18597 0xfc00ffff, 0x20000f7f, 0 , 0,
18598 0x0 }, /* POOL32Axf_5_group0~*(7) */
18599 { instruction , 0 , 0 , 32,
18600 0xfc00ffff, 0x2000117f, &NMD::TLBGR , 0,
18601 CP0_ | VZ_ | TLB_ }, /* TLBGR */
18602 { instruction , 0 , 0 , 32,
18603 0xfc00ffff, 0x2000137f, &NMD::TLBR , 0,
18604 CP0_ | TLB_ }, /* TLBR */
18605 { instruction , 0 , 0 , 32,
18606 0xfc00ffff, 0x2000157f, &NMD::TLBGINVF , 0,
18607 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINVF */
18608 { instruction , 0 , 0 , 32,
18609 0xfc00ffff, 0x2000177f, &NMD::TLBINVF , 0,
18610 CP0_ | TLB_ | TLBINV_}, /* TLBINVF */
18611 { reserved_block , 0 , 0 , 32,
18612 0xfc00ffff, 0x2000197f, 0 , 0,
18613 0x0 }, /* POOL32Axf_5_group0~*(12) */
18614 { reserved_block , 0 , 0 , 32,
18615 0xfc00ffff, 0x20001b7f, 0 , 0,
18616 0x0 }, /* POOL32Axf_5_group0~*(13) */
18617 { reserved_block , 0 , 0 , 32,
18618 0xfc00ffff, 0x20001d7f, 0 , 0,
18619 0x0 }, /* POOL32Axf_5_group0~*(14) */
18620 { reserved_block , 0 , 0 , 32,
18621 0xfc00ffff, 0x20001f7f, 0 , 0,
18622 0x0 }, /* POOL32Axf_5_group0~*(15) */
18623 { instruction , 0 , 0 , 32,
18624 0xfc00ffff, 0x2000217f, &NMD::TLBGWI , 0,
18625 CP0_ | VZ_ | TLB_ }, /* TLBGWI */
18626 { instruction , 0 , 0 , 32,
18627 0xfc00ffff, 0x2000237f, &NMD::TLBWI , 0,
18628 CP0_ | TLB_ }, /* TLBWI */
18629 { reserved_block , 0 , 0 , 32,
18630 0xfc00ffff, 0x2000257f, 0 , 0,
18631 0x0 }, /* POOL32Axf_5_group0~*(18) */
18632 { reserved_block , 0 , 0 , 32,
18633 0xfc00ffff, 0x2000277f, 0 , 0,
18634 0x0 }, /* POOL32Axf_5_group0~*(19) */
18635 { reserved_block , 0 , 0 , 32,
18636 0xfc00ffff, 0x2000297f, 0 , 0,
18637 0x0 }, /* POOL32Axf_5_group0~*(20) */
18638 { reserved_block , 0 , 0 , 32,
18639 0xfc00ffff, 0x20002b7f, 0 , 0,
18640 0x0 }, /* POOL32Axf_5_group0~*(21) */
18641 { reserved_block , 0 , 0 , 32,
18642 0xfc00ffff, 0x20002d7f, 0 , 0,
18643 0x0 }, /* POOL32Axf_5_group0~*(22) */
18644 { reserved_block , 0 , 0 , 32,
18645 0xfc00ffff, 0x20002f7f, 0 , 0,
18646 0x0 }, /* POOL32Axf_5_group0~*(23) */
18647 { instruction , 0 , 0 , 32,
18648 0xfc00ffff, 0x2000317f, &NMD::TLBGWR , 0,
18649 CP0_ | VZ_ | TLB_ }, /* TLBGWR */
18650 { instruction , 0 , 0 , 32,
18651 0xfc00ffff, 0x2000337f, &NMD::TLBWR , 0,
18652 CP0_ | TLB_ }, /* TLBWR */
18653 { reserved_block , 0 , 0 , 32,
18654 0xfc00ffff, 0x2000357f, 0 , 0,
18655 0x0 }, /* POOL32Axf_5_group0~*(26) */
18656 { reserved_block , 0 , 0 , 32,
18657 0xfc00ffff, 0x2000377f, 0 , 0,
18658 0x0 }, /* POOL32Axf_5_group0~*(27) */
18659 { reserved_block , 0 , 0 , 32,
18660 0xfc00ffff, 0x2000397f, 0 , 0,
18661 0x0 }, /* POOL32Axf_5_group0~*(28) */
18662 { reserved_block , 0 , 0 , 32,
18663 0xfc00ffff, 0x20003b7f, 0 , 0,
18664 0x0 }, /* POOL32Axf_5_group0~*(29) */
18665 { reserved_block , 0 , 0 , 32,
18666 0xfc00ffff, 0x20003d7f, 0 , 0,
18667 0x0 }, /* POOL32Axf_5_group0~*(30) */
18668 { reserved_block , 0 , 0 , 32,
18669 0xfc00ffff, 0x20003f7f, 0 , 0,
18670 0x0 }, /* POOL32Axf_5_group0~*(31) */
18674 NMD::Pool NMD::POOL32Axf_5_group1[32] = {
18675 { reserved_block , 0 , 0 , 32,
18676 0xfc00ffff, 0x2000417f, 0 , 0,
18677 0x0 }, /* POOL32Axf_5_group1~*(0) */
18678 { reserved_block , 0 , 0 , 32,
18679 0xfc00ffff, 0x2000437f, 0 , 0,
18680 0x0 }, /* POOL32Axf_5_group1~*(1) */
18681 { reserved_block , 0 , 0 , 32,
18682 0xfc00ffff, 0x2000457f, 0 , 0,
18683 0x0 }, /* POOL32Axf_5_group1~*(2) */
18684 { instruction , 0 , 0 , 32,
18685 0xfc00ffff, 0x2000477f, &NMD::DI , 0,
18686 0x0 }, /* DI */
18687 { reserved_block , 0 , 0 , 32,
18688 0xfc00ffff, 0x2000497f, 0 , 0,
18689 0x0 }, /* POOL32Axf_5_group1~*(4) */
18690 { reserved_block , 0 , 0 , 32,
18691 0xfc00ffff, 0x20004b7f, 0 , 0,
18692 0x0 }, /* POOL32Axf_5_group1~*(5) */
18693 { reserved_block , 0 , 0 , 32,
18694 0xfc00ffff, 0x20004d7f, 0 , 0,
18695 0x0 }, /* POOL32Axf_5_group1~*(6) */
18696 { reserved_block , 0 , 0 , 32,
18697 0xfc00ffff, 0x20004f7f, 0 , 0,
18698 0x0 }, /* POOL32Axf_5_group1~*(7) */
18699 { reserved_block , 0 , 0 , 32,
18700 0xfc00ffff, 0x2000517f, 0 , 0,
18701 0x0 }, /* POOL32Axf_5_group1~*(8) */
18702 { reserved_block , 0 , 0 , 32,
18703 0xfc00ffff, 0x2000537f, 0 , 0,
18704 0x0 }, /* POOL32Axf_5_group1~*(9) */
18705 { reserved_block , 0 , 0 , 32,
18706 0xfc00ffff, 0x2000557f, 0 , 0,
18707 0x0 }, /* POOL32Axf_5_group1~*(10) */
18708 { instruction , 0 , 0 , 32,
18709 0xfc00ffff, 0x2000577f, &NMD::EI , 0,
18710 0x0 }, /* EI */
18711 { reserved_block , 0 , 0 , 32,
18712 0xfc00ffff, 0x2000597f, 0 , 0,
18713 0x0 }, /* POOL32Axf_5_group1~*(12) */
18714 { reserved_block , 0 , 0 , 32,
18715 0xfc00ffff, 0x20005b7f, 0 , 0,
18716 0x0 }, /* POOL32Axf_5_group1~*(13) */
18717 { reserved_block , 0 , 0 , 32,
18718 0xfc00ffff, 0x20005d7f, 0 , 0,
18719 0x0 }, /* POOL32Axf_5_group1~*(14) */
18720 { reserved_block , 0 , 0 , 32,
18721 0xfc00ffff, 0x20005f7f, 0 , 0,
18722 0x0 }, /* POOL32Axf_5_group1~*(15) */
18723 { reserved_block , 0 , 0 , 32,
18724 0xfc00ffff, 0x2000617f, 0 , 0,
18725 0x0 }, /* POOL32Axf_5_group1~*(16) */
18726 { reserved_block , 0 , 0 , 32,
18727 0xfc00ffff, 0x2000637f, 0 , 0,
18728 0x0 }, /* POOL32Axf_5_group1~*(17) */
18729 { reserved_block , 0 , 0 , 32,
18730 0xfc00ffff, 0x2000657f, 0 , 0,
18731 0x0 }, /* POOL32Axf_5_group1~*(18) */
18732 { reserved_block , 0 , 0 , 32,
18733 0xfc00ffff, 0x2000677f, 0 , 0,
18734 0x0 }, /* POOL32Axf_5_group1~*(19) */
18735 { reserved_block , 0 , 0 , 32,
18736 0xfc00ffff, 0x2000697f, 0 , 0,
18737 0x0 }, /* POOL32Axf_5_group1~*(20) */
18738 { reserved_block , 0 , 0 , 32,
18739 0xfc00ffff, 0x20006b7f, 0 , 0,
18740 0x0 }, /* POOL32Axf_5_group1~*(21) */
18741 { reserved_block , 0 , 0 , 32,
18742 0xfc00ffff, 0x20006d7f, 0 , 0,
18743 0x0 }, /* POOL32Axf_5_group1~*(22) */
18744 { reserved_block , 0 , 0 , 32,
18745 0xfc00ffff, 0x20006f7f, 0 , 0,
18746 0x0 }, /* POOL32Axf_5_group1~*(23) */
18747 { reserved_block , 0 , 0 , 32,
18748 0xfc00ffff, 0x2000717f, 0 , 0,
18749 0x0 }, /* POOL32Axf_5_group1~*(24) */
18750 { reserved_block , 0 , 0 , 32,
18751 0xfc00ffff, 0x2000737f, 0 , 0,
18752 0x0 }, /* POOL32Axf_5_group1~*(25) */
18753 { reserved_block , 0 , 0 , 32,
18754 0xfc00ffff, 0x2000757f, 0 , 0,
18755 0x0 }, /* POOL32Axf_5_group1~*(26) */
18756 { reserved_block , 0 , 0 , 32,
18757 0xfc00ffff, 0x2000777f, 0 , 0,
18758 0x0 }, /* POOL32Axf_5_group1~*(27) */
18759 { reserved_block , 0 , 0 , 32,
18760 0xfc00ffff, 0x2000797f, 0 , 0,
18761 0x0 }, /* POOL32Axf_5_group1~*(28) */
18762 { reserved_block , 0 , 0 , 32,
18763 0xfc00ffff, 0x20007b7f, 0 , 0,
18764 0x0 }, /* POOL32Axf_5_group1~*(29) */
18765 { reserved_block , 0 , 0 , 32,
18766 0xfc00ffff, 0x20007d7f, 0 , 0,
18767 0x0 }, /* POOL32Axf_5_group1~*(30) */
18768 { reserved_block , 0 , 0 , 32,
18769 0xfc00ffff, 0x20007f7f, 0 , 0,
18770 0x0 }, /* POOL32Axf_5_group1~*(31) */
18774 NMD::Pool NMD::ERETx[2] = {
18775 { instruction , 0 , 0 , 32,
18776 0xfc01ffff, 0x2000f37f, &NMD::ERET , 0,
18777 0x0 }, /* ERET */
18778 { instruction , 0 , 0 , 32,
18779 0xfc01ffff, 0x2001f37f, &NMD::ERETNC , 0,
18780 0x0 }, /* ERETNC */
18784 NMD::Pool NMD::POOL32Axf_5_group3[32] = {
18785 { reserved_block , 0 , 0 , 32,
18786 0xfc00ffff, 0x2000c17f, 0 , 0,
18787 0x0 }, /* POOL32Axf_5_group3~*(0) */
18788 { instruction , 0 , 0 , 32,
18789 0xfc00ffff, 0x2000c37f, &NMD::WAIT , 0,
18790 0x0 }, /* WAIT */
18791 { reserved_block , 0 , 0 , 32,
18792 0xfc00ffff, 0x2000c57f, 0 , 0,
18793 0x0 }, /* POOL32Axf_5_group3~*(2) */
18794 { reserved_block , 0 , 0 , 32,
18795 0xfc00ffff, 0x2000c77f, 0 , 0,
18796 0x0 }, /* POOL32Axf_5_group3~*(3) */
18797 { reserved_block , 0 , 0 , 32,
18798 0xfc00ffff, 0x2000c97f, 0 , 0,
18799 0x0 }, /* POOL32Axf_5_group3~*(4) */
18800 { reserved_block , 0 , 0 , 32,
18801 0xfc00ffff, 0x2000cb7f, 0 , 0,
18802 0x0 }, /* POOL32Axf_5_group3~*(5) */
18803 { reserved_block , 0 , 0 , 32,
18804 0xfc00ffff, 0x2000cd7f, 0 , 0,
18805 0x0 }, /* POOL32Axf_5_group3~*(6) */
18806 { reserved_block , 0 , 0 , 32,
18807 0xfc00ffff, 0x2000cf7f, 0 , 0,
18808 0x0 }, /* POOL32Axf_5_group3~*(7) */
18809 { reserved_block , 0 , 0 , 32,
18810 0xfc00ffff, 0x2000d17f, 0 , 0,
18811 0x0 }, /* POOL32Axf_5_group3~*(8) */
18812 { instruction , 0 , 0 , 32,
18813 0xfc00ffff, 0x2000d37f, &NMD::IRET , 0,
18814 MCU_ }, /* IRET */
18815 { reserved_block , 0 , 0 , 32,
18816 0xfc00ffff, 0x2000d57f, 0 , 0,
18817 0x0 }, /* POOL32Axf_5_group3~*(10) */
18818 { reserved_block , 0 , 0 , 32,
18819 0xfc00ffff, 0x2000d77f, 0 , 0,
18820 0x0 }, /* POOL32Axf_5_group3~*(11) */
18821 { reserved_block , 0 , 0 , 32,
18822 0xfc00ffff, 0x2000d97f, 0 , 0,
18823 0x0 }, /* POOL32Axf_5_group3~*(12) */
18824 { reserved_block , 0 , 0 , 32,
18825 0xfc00ffff, 0x2000db7f, 0 , 0,
18826 0x0 }, /* POOL32Axf_5_group3~*(13) */
18827 { reserved_block , 0 , 0 , 32,
18828 0xfc00ffff, 0x2000dd7f, 0 , 0,
18829 0x0 }, /* POOL32Axf_5_group3~*(14) */
18830 { reserved_block , 0 , 0 , 32,
18831 0xfc00ffff, 0x2000df7f, 0 , 0,
18832 0x0 }, /* POOL32Axf_5_group3~*(15) */
18833 { instruction , 0 , 0 , 32,
18834 0xfc00ffff, 0x2000e17f, &NMD::RDPGPR , 0,
18835 CP0_ }, /* RDPGPR */
18836 { instruction , 0 , 0 , 32,
18837 0xfc00ffff, 0x2000e37f, &NMD::DERET , 0,
18838 EJTAG_ }, /* DERET */
18839 { reserved_block , 0 , 0 , 32,
18840 0xfc00ffff, 0x2000e57f, 0 , 0,
18841 0x0 }, /* POOL32Axf_5_group3~*(18) */
18842 { reserved_block , 0 , 0 , 32,
18843 0xfc00ffff, 0x2000e77f, 0 , 0,
18844 0x0 }, /* POOL32Axf_5_group3~*(19) */
18845 { reserved_block , 0 , 0 , 32,
18846 0xfc00ffff, 0x2000e97f, 0 , 0,
18847 0x0 }, /* POOL32Axf_5_group3~*(20) */
18848 { reserved_block , 0 , 0 , 32,
18849 0xfc00ffff, 0x2000eb7f, 0 , 0,
18850 0x0 }, /* POOL32Axf_5_group3~*(21) */
18851 { reserved_block , 0 , 0 , 32,
18852 0xfc00ffff, 0x2000ed7f, 0 , 0,
18853 0x0 }, /* POOL32Axf_5_group3~*(22) */
18854 { reserved_block , 0 , 0 , 32,
18855 0xfc00ffff, 0x2000ef7f, 0 , 0,
18856 0x0 }, /* POOL32Axf_5_group3~*(23) */
18857 { instruction , 0 , 0 , 32,
18858 0xfc00ffff, 0x2000f17f, &NMD::WRPGPR , 0,
18859 CP0_ }, /* WRPGPR */
18860 { pool , ERETx , 2 , 32,
18861 0xfc00ffff, 0x2000f37f, 0 , 0,
18862 0x0 }, /* ERETx */
18863 { reserved_block , 0 , 0 , 32,
18864 0xfc00ffff, 0x2000f57f, 0 , 0,
18865 0x0 }, /* POOL32Axf_5_group3~*(26) */
18866 { reserved_block , 0 , 0 , 32,
18867 0xfc00ffff, 0x2000f77f, 0 , 0,
18868 0x0 }, /* POOL32Axf_5_group3~*(27) */
18869 { reserved_block , 0 , 0 , 32,
18870 0xfc00ffff, 0x2000f97f, 0 , 0,
18871 0x0 }, /* POOL32Axf_5_group3~*(28) */
18872 { reserved_block , 0 , 0 , 32,
18873 0xfc00ffff, 0x2000fb7f, 0 , 0,
18874 0x0 }, /* POOL32Axf_5_group3~*(29) */
18875 { reserved_block , 0 , 0 , 32,
18876 0xfc00ffff, 0x2000fd7f, 0 , 0,
18877 0x0 }, /* POOL32Axf_5_group3~*(30) */
18878 { reserved_block , 0 , 0 , 32,
18879 0xfc00ffff, 0x2000ff7f, 0 , 0,
18880 0x0 }, /* POOL32Axf_5_group3~*(31) */
18884 NMD::Pool NMD::POOL32Axf_5[4] = {
18885 { pool , POOL32Axf_5_group0 , 32 , 32,
18886 0xfc00c1ff, 0x2000017f, 0 , 0,
18887 0x0 }, /* POOL32Axf_5_group0 */
18888 { pool , POOL32Axf_5_group1 , 32 , 32,
18889 0xfc00c1ff, 0x2000417f, 0 , 0,
18890 0x0 }, /* POOL32Axf_5_group1 */
18891 { reserved_block , 0 , 0 , 32,
18892 0xfc00c1ff, 0x2000817f, 0 , 0,
18893 0x0 }, /* POOL32Axf_5~*(2) */
18894 { pool , POOL32Axf_5_group3 , 32 , 32,
18895 0xfc00c1ff, 0x2000c17f, 0 , 0,
18896 0x0 }, /* POOL32Axf_5_group3 */
18900 NMD::Pool NMD::SHRA__R__QB[2] = {
18901 { instruction , 0 , 0 , 32,
18902 0xfc001fff, 0x200001ff, &NMD::SHRA_QB , 0,
18903 DSP_ }, /* SHRA.QB */
18904 { instruction , 0 , 0 , 32,
18905 0xfc001fff, 0x200011ff, &NMD::SHRA_R_QB , 0,
18906 DSP_ }, /* SHRA_R.QB */
18910 NMD::Pool NMD::POOL32Axf_7[8] = {
18911 { pool , SHRA__R__QB , 2 , 32,
18912 0xfc000fff, 0x200001ff, 0 , 0,
18913 0x0 }, /* SHRA[_R].QB */
18914 { instruction , 0 , 0 , 32,
18915 0xfc000fff, 0x200003ff, &NMD::SHRL_PH , 0,
18916 DSP_ }, /* SHRL.PH */
18917 { instruction , 0 , 0 , 32,
18918 0xfc000fff, 0x200005ff, &NMD::REPL_QB , 0,
18919 DSP_ }, /* REPL.QB */
18920 { reserved_block , 0 , 0 , 32,
18921 0xfc000fff, 0x200007ff, 0 , 0,
18922 0x0 }, /* POOL32Axf_7~*(3) */
18923 { reserved_block , 0 , 0 , 32,
18924 0xfc000fff, 0x200009ff, 0 , 0,
18925 0x0 }, /* POOL32Axf_7~*(4) */
18926 { reserved_block , 0 , 0 , 32,
18927 0xfc000fff, 0x20000bff, 0 , 0,
18928 0x0 }, /* POOL32Axf_7~*(5) */
18929 { reserved_block , 0 , 0 , 32,
18930 0xfc000fff, 0x20000dff, 0 , 0,
18931 0x0 }, /* POOL32Axf_7~*(6) */
18932 { reserved_block , 0 , 0 , 32,
18933 0xfc000fff, 0x20000fff, 0 , 0,
18934 0x0 }, /* POOL32Axf_7~*(7) */
18938 NMD::Pool NMD::POOL32Axf[8] = {
18939 { reserved_block , 0 , 0 , 32,
18940 0xfc0001ff, 0x2000003f, 0 , 0,
18941 0x0 }, /* POOL32Axf~*(0) */
18942 { pool , POOL32Axf_1 , 8 , 32,
18943 0xfc0001ff, 0x2000007f, 0 , 0,
18944 0x0 }, /* POOL32Axf_1 */
18945 { pool , POOL32Axf_2 , 4 , 32,
18946 0xfc0001ff, 0x200000bf, 0 , 0,
18947 0x0 }, /* POOL32Axf_2 */
18948 { reserved_block , 0 , 0 , 32,
18949 0xfc0001ff, 0x200000ff, 0 , 0,
18950 0x0 }, /* POOL32Axf~*(3) */
18951 { pool , POOL32Axf_4 , 128 , 32,
18952 0xfc0001ff, 0x2000013f, 0 , 0,
18953 0x0 }, /* POOL32Axf_4 */
18954 { pool , POOL32Axf_5 , 4 , 32,
18955 0xfc0001ff, 0x2000017f, 0 , 0,
18956 0x0 }, /* POOL32Axf_5 */
18957 { reserved_block , 0 , 0 , 32,
18958 0xfc0001ff, 0x200001bf, 0 , 0,
18959 0x0 }, /* POOL32Axf~*(6) */
18960 { pool , POOL32Axf_7 , 8 , 32,
18961 0xfc0001ff, 0x200001ff, 0 , 0,
18962 0x0 }, /* POOL32Axf_7 */
18966 NMD::Pool NMD::_POOL32A7[8] = {
18967 { pool , P_LSX , 2 , 32,
18968 0xfc00003f, 0x20000007, 0 , 0,
18969 0x0 }, /* P.LSX */
18970 { instruction , 0 , 0 , 32,
18971 0xfc00003f, 0x2000000f, &NMD::LSA , 0,
18972 0x0 }, /* LSA */
18973 { reserved_block , 0 , 0 , 32,
18974 0xfc00003f, 0x20000017, 0 , 0,
18975 0x0 }, /* _POOL32A7~*(2) */
18976 { instruction , 0 , 0 , 32,
18977 0xfc00003f, 0x2000001f, &NMD::EXTW , 0,
18978 0x0 }, /* EXTW */
18979 { reserved_block , 0 , 0 , 32,
18980 0xfc00003f, 0x20000027, 0 , 0,
18981 0x0 }, /* _POOL32A7~*(4) */
18982 { reserved_block , 0 , 0 , 32,
18983 0xfc00003f, 0x2000002f, 0 , 0,
18984 0x0 }, /* _POOL32A7~*(5) */
18985 { reserved_block , 0 , 0 , 32,
18986 0xfc00003f, 0x20000037, 0 , 0,
18987 0x0 }, /* _POOL32A7~*(6) */
18988 { pool , POOL32Axf , 8 , 32,
18989 0xfc00003f, 0x2000003f, 0 , 0,
18990 0x0 }, /* POOL32Axf */
18994 NMD::Pool NMD::P32A[8] = {
18995 { pool , _POOL32A0 , 128 , 32,
18996 0xfc000007, 0x20000000, 0 , 0,
18997 0x0 }, /* _POOL32A0 */
18998 { instruction , 0 , 0 , 32,
18999 0xfc000007, 0x20000001, &NMD::SPECIAL2 , 0,
19000 UDI_ }, /* SPECIAL2 */
19001 { instruction , 0 , 0 , 32,
19002 0xfc000007, 0x20000002, &NMD::COP2_1 , 0,
19003 CP2_ }, /* COP2_1 */
19004 { instruction , 0 , 0 , 32,
19005 0xfc000007, 0x20000003, &NMD::UDI , 0,
19006 UDI_ }, /* UDI */
19007 { reserved_block , 0 , 0 , 32,
19008 0xfc000007, 0x20000004, 0 , 0,
19009 0x0 }, /* P32A~*(4) */
19010 { pool , _POOL32A5 , 128 , 32,
19011 0xfc000007, 0x20000005, 0 , 0,
19012 0x0 }, /* _POOL32A5 */
19013 { reserved_block , 0 , 0 , 32,
19014 0xfc000007, 0x20000006, 0 , 0,
19015 0x0 }, /* P32A~*(6) */
19016 { pool , _POOL32A7 , 8 , 32,
19017 0xfc000007, 0x20000007, 0 , 0,
19018 0x0 }, /* _POOL32A7 */
19022 NMD::Pool NMD::P_GP_D[2] = {
19023 { instruction , 0 , 0 , 32,
19024 0xfc000007, 0x40000001, &NMD::LD_GP_ , 0,
19025 MIPS64_ }, /* LD[GP] */
19026 { instruction , 0 , 0 , 32,
19027 0xfc000007, 0x40000005, &NMD::SD_GP_ , 0,
19028 MIPS64_ }, /* SD[GP] */
19032 NMD::Pool NMD::P_GP_W[4] = {
19033 { instruction , 0 , 0 , 32,
19034 0xfc000003, 0x40000000, &NMD::ADDIU_GP_W_ , 0,
19035 0x0 }, /* ADDIU[GP.W] */
19036 { pool , P_GP_D , 2 , 32,
19037 0xfc000003, 0x40000001, 0 , 0,
19038 0x0 }, /* P.GP.D */
19039 { instruction , 0 , 0 , 32,
19040 0xfc000003, 0x40000002, &NMD::LW_GP_ , 0,
19041 0x0 }, /* LW[GP] */
19042 { instruction , 0 , 0 , 32,
19043 0xfc000003, 0x40000003, &NMD::SW_GP_ , 0,
19044 0x0 }, /* SW[GP] */
19048 NMD::Pool NMD::POOL48I[32] = {
19049 { instruction , 0 , 0 , 48,
19050 0xfc1f00000000ull, 0x600000000000ull, &NMD::LI_48_ , 0,
19051 XMMS_ }, /* LI[48] */
19052 { instruction , 0 , 0 , 48,
19053 0xfc1f00000000ull, 0x600100000000ull, &NMD::ADDIU_48_ , 0,
19054 XMMS_ }, /* ADDIU[48] */
19055 { instruction , 0 , 0 , 48,
19056 0xfc1f00000000ull, 0x600200000000ull, &NMD::ADDIU_GP48_ , 0,
19057 XMMS_ }, /* ADDIU[GP48] */
19058 { instruction , 0 , 0 , 48,
19059 0xfc1f00000000ull, 0x600300000000ull, &NMD::ADDIUPC_48_ , 0,
19060 XMMS_ }, /* ADDIUPC[48] */
19061 { reserved_block , 0 , 0 , 48,
19062 0xfc1f00000000ull, 0x600400000000ull, 0 , 0,
19063 0x0 }, /* POOL48I~*(4) */
19064 { reserved_block , 0 , 0 , 48,
19065 0xfc1f00000000ull, 0x600500000000ull, 0 , 0,
19066 0x0 }, /* POOL48I~*(5) */
19067 { reserved_block , 0 , 0 , 48,
19068 0xfc1f00000000ull, 0x600600000000ull, 0 , 0,
19069 0x0 }, /* POOL48I~*(6) */
19070 { reserved_block , 0 , 0 , 48,
19071 0xfc1f00000000ull, 0x600700000000ull, 0 , 0,
19072 0x0 }, /* POOL48I~*(7) */
19073 { reserved_block , 0 , 0 , 48,
19074 0xfc1f00000000ull, 0x600800000000ull, 0 , 0,
19075 0x0 }, /* POOL48I~*(8) */
19076 { reserved_block , 0 , 0 , 48,
19077 0xfc1f00000000ull, 0x600900000000ull, 0 , 0,
19078 0x0 }, /* POOL48I~*(9) */
19079 { reserved_block , 0 , 0 , 48,
19080 0xfc1f00000000ull, 0x600a00000000ull, 0 , 0,
19081 0x0 }, /* POOL48I~*(10) */
19082 { instruction , 0 , 0 , 48,
19083 0xfc1f00000000ull, 0x600b00000000ull, &NMD::LWPC_48_ , 0,
19084 XMMS_ }, /* LWPC[48] */
19085 { reserved_block , 0 , 0 , 48,
19086 0xfc1f00000000ull, 0x600c00000000ull, 0 , 0,
19087 0x0 }, /* POOL48I~*(12) */
19088 { reserved_block , 0 , 0 , 48,
19089 0xfc1f00000000ull, 0x600d00000000ull, 0 , 0,
19090 0x0 }, /* POOL48I~*(13) */
19091 { reserved_block , 0 , 0 , 48,
19092 0xfc1f00000000ull, 0x600e00000000ull, 0 , 0,
19093 0x0 }, /* POOL48I~*(14) */
19094 { instruction , 0 , 0 , 48,
19095 0xfc1f00000000ull, 0x600f00000000ull, &NMD::SWPC_48_ , 0,
19096 XMMS_ }, /* SWPC[48] */
19097 { reserved_block , 0 , 0 , 48,
19098 0xfc1f00000000ull, 0x601000000000ull, 0 , 0,
19099 0x0 }, /* POOL48I~*(16) */
19100 { instruction , 0 , 0 , 48,
19101 0xfc1f00000000ull, 0x601100000000ull, &NMD::DADDIU_48_ , 0,
19102 MIPS64_ }, /* DADDIU[48] */
19103 { reserved_block , 0 , 0 , 48,
19104 0xfc1f00000000ull, 0x601200000000ull, 0 , 0,
19105 0x0 }, /* POOL48I~*(18) */
19106 { reserved_block , 0 , 0 , 48,
19107 0xfc1f00000000ull, 0x601300000000ull, 0 , 0,
19108 0x0 }, /* POOL48I~*(19) */
19109 { instruction , 0 , 0 , 48,
19110 0xfc1f00000000ull, 0x601400000000ull, &NMD::DLUI_48_ , 0,
19111 MIPS64_ }, /* DLUI[48] */
19112 { reserved_block , 0 , 0 , 48,
19113 0xfc1f00000000ull, 0x601500000000ull, 0 , 0,
19114 0x0 }, /* POOL48I~*(21) */
19115 { reserved_block , 0 , 0 , 48,
19116 0xfc1f00000000ull, 0x601600000000ull, 0 , 0,
19117 0x0 }, /* POOL48I~*(22) */
19118 { reserved_block , 0 , 0 , 48,
19119 0xfc1f00000000ull, 0x601700000000ull, 0 , 0,
19120 0x0 }, /* POOL48I~*(23) */
19121 { reserved_block , 0 , 0 , 48,
19122 0xfc1f00000000ull, 0x601800000000ull, 0 , 0,
19123 0x0 }, /* POOL48I~*(24) */
19124 { reserved_block , 0 , 0 , 48,
19125 0xfc1f00000000ull, 0x601900000000ull, 0 , 0,
19126 0x0 }, /* POOL48I~*(25) */
19127 { reserved_block , 0 , 0 , 48,
19128 0xfc1f00000000ull, 0x601a00000000ull, 0 , 0,
19129 0x0 }, /* POOL48I~*(26) */
19130 { instruction , 0 , 0 , 48,
19131 0xfc1f00000000ull, 0x601b00000000ull, &NMD::LDPC_48_ , 0,
19132 MIPS64_ }, /* LDPC[48] */
19133 { reserved_block , 0 , 0 , 48,
19134 0xfc1f00000000ull, 0x601c00000000ull, 0 , 0,
19135 0x0 }, /* POOL48I~*(28) */
19136 { reserved_block , 0 , 0 , 48,
19137 0xfc1f00000000ull, 0x601d00000000ull, 0 , 0,
19138 0x0 }, /* POOL48I~*(29) */
19139 { reserved_block , 0 , 0 , 48,
19140 0xfc1f00000000ull, 0x601e00000000ull, 0 , 0,
19141 0x0 }, /* POOL48I~*(30) */
19142 { instruction , 0 , 0 , 48,
19143 0xfc1f00000000ull, 0x601f00000000ull, &NMD::SDPC_48_ , 0,
19144 MIPS64_ }, /* SDPC[48] */
19148 NMD::Pool NMD::PP_SR[4] = {
19149 { instruction , 0 , 0 , 32,
19150 0xfc10f003, 0x80003000, &NMD::SAVE_32_ , 0,
19151 0x0 }, /* SAVE[32] */
19152 { reserved_block , 0 , 0 , 32,
19153 0xfc10f003, 0x80003001, 0 , 0,
19154 0x0 }, /* PP.SR~*(1) */
19155 { instruction , 0 , 0 , 32,
19156 0xfc10f003, 0x80003002, &NMD::RESTORE_32_ , 0,
19157 0x0 }, /* RESTORE[32] */
19158 { return_instruction , 0 , 0 , 32,
19159 0xfc10f003, 0x80003003, &NMD::RESTORE_JRC_32_ , 0,
19160 0x0 }, /* RESTORE.JRC[32] */
19164 NMD::Pool NMD::P_SR_F[8] = {
19165 { instruction , 0 , 0 , 32,
19166 0xfc10f007, 0x80103000, &NMD::SAVEF , 0,
19167 CP1_ }, /* SAVEF */
19168 { instruction , 0 , 0 , 32,
19169 0xfc10f007, 0x80103001, &NMD::RESTOREF , 0,
19170 CP1_ }, /* RESTOREF */
19171 { reserved_block , 0 , 0 , 32,
19172 0xfc10f007, 0x80103002, 0 , 0,
19173 0x0 }, /* P.SR.F~*(2) */
19174 { reserved_block , 0 , 0 , 32,
19175 0xfc10f007, 0x80103003, 0 , 0,
19176 0x0 }, /* P.SR.F~*(3) */
19177 { reserved_block , 0 , 0 , 32,
19178 0xfc10f007, 0x80103004, 0 , 0,
19179 0x0 }, /* P.SR.F~*(4) */
19180 { reserved_block , 0 , 0 , 32,
19181 0xfc10f007, 0x80103005, 0 , 0,
19182 0x0 }, /* P.SR.F~*(5) */
19183 { reserved_block , 0 , 0 , 32,
19184 0xfc10f007, 0x80103006, 0 , 0,
19185 0x0 }, /* P.SR.F~*(6) */
19186 { reserved_block , 0 , 0 , 32,
19187 0xfc10f007, 0x80103007, 0 , 0,
19188 0x0 }, /* P.SR.F~*(7) */
19192 NMD::Pool NMD::P_SR[2] = {
19193 { pool , PP_SR , 4 , 32,
19194 0xfc10f000, 0x80003000, 0 , 0,
19195 0x0 }, /* PP.SR */
19196 { pool , P_SR_F , 8 , 32,
19197 0xfc10f000, 0x80103000, 0 , 0,
19198 0x0 }, /* P.SR.F */
19202 NMD::Pool NMD::P_SLL[5] = {
19203 { instruction , 0 , 0 , 32,
19204 0xffe0f1ff, 0x8000c000, &NMD::NOP_32_ , 0,
19205 0x0 }, /* NOP[32] */
19206 { instruction , 0 , 0 , 32,
19207 0xffe0f1ff, 0x8000c003, &NMD::EHB , 0,
19208 0x0 }, /* EHB */
19209 { instruction , 0 , 0 , 32,
19210 0xffe0f1ff, 0x8000c005, &NMD::PAUSE , 0,
19211 0x0 }, /* PAUSE */
19212 { instruction , 0 , 0 , 32,
19213 0xffe0f1ff, 0x8000c006, &NMD::SYNC , 0,
19214 0x0 }, /* SYNC */
19215 { instruction , 0 , 0 , 32,
19216 0xfc00f1e0, 0x8000c000, &NMD::SLL_32_ , 0,
19217 0x0 }, /* SLL[32] */
19221 NMD::Pool NMD::P_SHIFT[16] = {
19222 { pool , P_SLL , 5 , 32,
19223 0xfc00f1e0, 0x8000c000, 0 , 0,
19224 0x0 }, /* P.SLL */
19225 { reserved_block , 0 , 0 , 32,
19226 0xfc00f1e0, 0x8000c020, 0 , 0,
19227 0x0 }, /* P.SHIFT~*(1) */
19228 { instruction , 0 , 0 , 32,
19229 0xfc00f1e0, 0x8000c040, &NMD::SRL_32_ , 0,
19230 0x0 }, /* SRL[32] */
19231 { reserved_block , 0 , 0 , 32,
19232 0xfc00f1e0, 0x8000c060, 0 , 0,
19233 0x0 }, /* P.SHIFT~*(3) */
19234 { instruction , 0 , 0 , 32,
19235 0xfc00f1e0, 0x8000c080, &NMD::SRA , 0,
19236 0x0 }, /* SRA */
19237 { reserved_block , 0 , 0 , 32,
19238 0xfc00f1e0, 0x8000c0a0, 0 , 0,
19239 0x0 }, /* P.SHIFT~*(5) */
19240 { instruction , 0 , 0 , 32,
19241 0xfc00f1e0, 0x8000c0c0, &NMD::ROTR , 0,
19242 0x0 }, /* ROTR */
19243 { reserved_block , 0 , 0 , 32,
19244 0xfc00f1e0, 0x8000c0e0, 0 , 0,
19245 0x0 }, /* P.SHIFT~*(7) */
19246 { instruction , 0 , 0 , 32,
19247 0xfc00f1e0, 0x8000c100, &NMD::DSLL , 0,
19248 MIPS64_ }, /* DSLL */
19249 { instruction , 0 , 0 , 32,
19250 0xfc00f1e0, 0x8000c120, &NMD::DSLL32 , 0,
19251 MIPS64_ }, /* DSLL32 */
19252 { instruction , 0 , 0 , 32,
19253 0xfc00f1e0, 0x8000c140, &NMD::DSRL , 0,
19254 MIPS64_ }, /* DSRL */
19255 { instruction , 0 , 0 , 32,
19256 0xfc00f1e0, 0x8000c160, &NMD::DSRL32 , 0,
19257 MIPS64_ }, /* DSRL32 */
19258 { instruction , 0 , 0 , 32,
19259 0xfc00f1e0, 0x8000c180, &NMD::DSRA , 0,
19260 MIPS64_ }, /* DSRA */
19261 { instruction , 0 , 0 , 32,
19262 0xfc00f1e0, 0x8000c1a0, &NMD::DSRA32 , 0,
19263 MIPS64_ }, /* DSRA32 */
19264 { instruction , 0 , 0 , 32,
19265 0xfc00f1e0, 0x8000c1c0, &NMD::DROTR , 0,
19266 MIPS64_ }, /* DROTR */
19267 { instruction , 0 , 0 , 32,
19268 0xfc00f1e0, 0x8000c1e0, &NMD::DROTR32 , 0,
19269 MIPS64_ }, /* DROTR32 */
19273 NMD::Pool NMD::P_ROTX[4] = {
19274 { instruction , 0 , 0 , 32,
19275 0xfc00f820, 0x8000d000, &NMD::ROTX , 0,
19276 XMMS_ }, /* ROTX */
19277 { reserved_block , 0 , 0 , 32,
19278 0xfc00f820, 0x8000d020, 0 , 0,
19279 0x0 }, /* P.ROTX~*(1) */
19280 { reserved_block , 0 , 0 , 32,
19281 0xfc00f820, 0x8000d800, 0 , 0,
19282 0x0 }, /* P.ROTX~*(2) */
19283 { reserved_block , 0 , 0 , 32,
19284 0xfc00f820, 0x8000d820, 0 , 0,
19285 0x0 }, /* P.ROTX~*(3) */
19289 NMD::Pool NMD::P_INS[4] = {
19290 { instruction , 0 , 0 , 32,
19291 0xfc00f820, 0x8000e000, &NMD::INS , 0,
19292 XMMS_ }, /* INS */
19293 { instruction , 0 , 0 , 32,
19294 0xfc00f820, 0x8000e020, &NMD::DINSU , 0,
19295 MIPS64_ }, /* DINSU */
19296 { instruction , 0 , 0 , 32,
19297 0xfc00f820, 0x8000e800, &NMD::DINSM , 0,
19298 MIPS64_ }, /* DINSM */
19299 { instruction , 0 , 0 , 32,
19300 0xfc00f820, 0x8000e820, &NMD::DINS , 0,
19301 MIPS64_ }, /* DINS */
19305 NMD::Pool NMD::P_EXT[4] = {
19306 { instruction , 0 , 0 , 32,
19307 0xfc00f820, 0x8000f000, &NMD::EXT , 0,
19308 XMMS_ }, /* EXT */
19309 { instruction , 0 , 0 , 32,
19310 0xfc00f820, 0x8000f020, &NMD::DEXTU , 0,
19311 MIPS64_ }, /* DEXTU */
19312 { instruction , 0 , 0 , 32,
19313 0xfc00f820, 0x8000f800, &NMD::DEXTM , 0,
19314 MIPS64_ }, /* DEXTM */
19315 { instruction , 0 , 0 , 32,
19316 0xfc00f820, 0x8000f820, &NMD::DEXT , 0,
19317 MIPS64_ }, /* DEXT */
19321 NMD::Pool NMD::P_U12[16] = {
19322 { instruction , 0 , 0 , 32,
19323 0xfc00f000, 0x80000000, &NMD::ORI , 0,
19324 0x0 }, /* ORI */
19325 { instruction , 0 , 0 , 32,
19326 0xfc00f000, 0x80001000, &NMD::XORI , 0,
19327 0x0 }, /* XORI */
19328 { instruction , 0 , 0 , 32,
19329 0xfc00f000, 0x80002000, &NMD::ANDI_32_ , 0,
19330 0x0 }, /* ANDI[32] */
19331 { pool , P_SR , 2 , 32,
19332 0xfc00f000, 0x80003000, 0 , 0,
19333 0x0 }, /* P.SR */
19334 { instruction , 0 , 0 , 32,
19335 0xfc00f000, 0x80004000, &NMD::SLTI , 0,
19336 0x0 }, /* SLTI */
19337 { instruction , 0 , 0 , 32,
19338 0xfc00f000, 0x80005000, &NMD::SLTIU , 0,
19339 0x0 }, /* SLTIU */
19340 { instruction , 0 , 0 , 32,
19341 0xfc00f000, 0x80006000, &NMD::SEQI , 0,
19342 0x0 }, /* SEQI */
19343 { reserved_block , 0 , 0 , 32,
19344 0xfc00f000, 0x80007000, 0 , 0,
19345 0x0 }, /* P.U12~*(7) */
19346 { instruction , 0 , 0 , 32,
19347 0xfc00f000, 0x80008000, &NMD::ADDIU_NEG_ , 0,
19348 0x0 }, /* ADDIU[NEG] */
19349 { instruction , 0 , 0 , 32,
19350 0xfc00f000, 0x80009000, &NMD::DADDIU_U12_ , 0,
19351 MIPS64_ }, /* DADDIU[U12] */
19352 { instruction , 0 , 0 , 32,
19353 0xfc00f000, 0x8000a000, &NMD::DADDIU_NEG_ , 0,
19354 MIPS64_ }, /* DADDIU[NEG] */
19355 { instruction , 0 , 0 , 32,
19356 0xfc00f000, 0x8000b000, &NMD::DROTX , 0,
19357 MIPS64_ }, /* DROTX */
19358 { pool , P_SHIFT , 16 , 32,
19359 0xfc00f000, 0x8000c000, 0 , 0,
19360 0x0 }, /* P.SHIFT */
19361 { pool , P_ROTX , 4 , 32,
19362 0xfc00f000, 0x8000d000, 0 , 0,
19363 0x0 }, /* P.ROTX */
19364 { pool , P_INS , 4 , 32,
19365 0xfc00f000, 0x8000e000, 0 , 0,
19366 0x0 }, /* P.INS */
19367 { pool , P_EXT , 4 , 32,
19368 0xfc00f000, 0x8000f000, 0 , 0,
19369 0x0 }, /* P.EXT */
19373 NMD::Pool NMD::RINT_fmt[2] = {
19374 { instruction , 0 , 0 , 32,
19375 0xfc0003ff, 0xa0000020, &NMD::RINT_S , 0,
19376 CP1_ }, /* RINT.S */
19377 { instruction , 0 , 0 , 32,
19378 0xfc0003ff, 0xa0000220, &NMD::RINT_D , 0,
19379 CP1_ }, /* RINT.D */
19383 NMD::Pool NMD::ADD_fmt0[2] = {
19384 { instruction , 0 , 0 , 32,
19385 0xfc0003ff, 0xa0000030, &NMD::ADD_S , 0,
19386 CP1_ }, /* ADD.S */
19387 { reserved_block , 0 , 0 , 32,
19388 0xfc0003ff, 0xa0000230, 0 , 0,
19389 CP1_ }, /* ADD.fmt0~*(1) */
19393 NMD::Pool NMD::SELEQZ_fmt[2] = {
19394 { instruction , 0 , 0 , 32,
19395 0xfc0003ff, 0xa0000038, &NMD::SELEQZ_S , 0,
19396 CP1_ }, /* SELEQZ.S */
19397 { instruction , 0 , 0 , 32,
19398 0xfc0003ff, 0xa0000238, &NMD::SELEQZ_D , 0,
19399 CP1_ }, /* SELEQZ.D */
19403 NMD::Pool NMD::CLASS_fmt[2] = {
19404 { instruction , 0 , 0 , 32,
19405 0xfc0003ff, 0xa0000060, &NMD::CLASS_S , 0,
19406 CP1_ }, /* CLASS.S */
19407 { instruction , 0 , 0 , 32,
19408 0xfc0003ff, 0xa0000260, &NMD::CLASS_D , 0,
19409 CP1_ }, /* CLASS.D */
19413 NMD::Pool NMD::SUB_fmt0[2] = {
19414 { instruction , 0 , 0 , 32,
19415 0xfc0003ff, 0xa0000070, &NMD::SUB_S , 0,
19416 CP1_ }, /* SUB.S */
19417 { reserved_block , 0 , 0 , 32,
19418 0xfc0003ff, 0xa0000270, 0 , 0,
19419 CP1_ }, /* SUB.fmt0~*(1) */
19423 NMD::Pool NMD::SELNEZ_fmt[2] = {
19424 { instruction , 0 , 0 , 32,
19425 0xfc0003ff, 0xa0000078, &NMD::SELNEZ_S , 0,
19426 CP1_ }, /* SELNEZ.S */
19427 { instruction , 0 , 0 , 32,
19428 0xfc0003ff, 0xa0000278, &NMD::SELNEZ_D , 0,
19429 CP1_ }, /* SELNEZ.D */
19433 NMD::Pool NMD::MUL_fmt0[2] = {
19434 { instruction , 0 , 0 , 32,
19435 0xfc0003ff, 0xa00000b0, &NMD::MUL_S , 0,
19436 CP1_ }, /* MUL.S */
19437 { reserved_block , 0 , 0 , 32,
19438 0xfc0003ff, 0xa00002b0, 0 , 0,
19439 CP1_ }, /* MUL.fmt0~*(1) */
19443 NMD::Pool NMD::SEL_fmt[2] = {
19444 { instruction , 0 , 0 , 32,
19445 0xfc0003ff, 0xa00000b8, &NMD::SEL_S , 0,
19446 CP1_ }, /* SEL.S */
19447 { instruction , 0 , 0 , 32,
19448 0xfc0003ff, 0xa00002b8, &NMD::SEL_D , 0,
19449 CP1_ }, /* SEL.D */
19453 NMD::Pool NMD::DIV_fmt0[2] = {
19454 { instruction , 0 , 0 , 32,
19455 0xfc0003ff, 0xa00000f0, &NMD::DIV_S , 0,
19456 CP1_ }, /* DIV.S */
19457 { reserved_block , 0 , 0 , 32,
19458 0xfc0003ff, 0xa00002f0, 0 , 0,
19459 CP1_ }, /* DIV.fmt0~*(1) */
19463 NMD::Pool NMD::ADD_fmt1[2] = {
19464 { instruction , 0 , 0 , 32,
19465 0xfc0003ff, 0xa0000130, &NMD::ADD_D , 0,
19466 CP1_ }, /* ADD.D */
19467 { reserved_block , 0 , 0 , 32,
19468 0xfc0003ff, 0xa0000330, 0 , 0,
19469 CP1_ }, /* ADD.fmt1~*(1) */
19473 NMD::Pool NMD::SUB_fmt1[2] = {
19474 { instruction , 0 , 0 , 32,
19475 0xfc0003ff, 0xa0000170, &NMD::SUB_D , 0,
19476 CP1_ }, /* SUB.D */
19477 { reserved_block , 0 , 0 , 32,
19478 0xfc0003ff, 0xa0000370, 0 , 0,
19479 CP1_ }, /* SUB.fmt1~*(1) */
19483 NMD::Pool NMD::MUL_fmt1[2] = {
19484 { instruction , 0 , 0 , 32,
19485 0xfc0003ff, 0xa00001b0, &NMD::MUL_D , 0,
19486 CP1_ }, /* MUL.D */
19487 { reserved_block , 0 , 0 , 32,
19488 0xfc0003ff, 0xa00003b0, 0 , 0,
19489 CP1_ }, /* MUL.fmt1~*(1) */
19493 NMD::Pool NMD::MADDF_fmt[2] = {
19494 { instruction , 0 , 0 , 32,
19495 0xfc0003ff, 0xa00001b8, &NMD::MADDF_S , 0,
19496 CP1_ }, /* MADDF.S */
19497 { instruction , 0 , 0 , 32,
19498 0xfc0003ff, 0xa00003b8, &NMD::MADDF_D , 0,
19499 CP1_ }, /* MADDF.D */
19503 NMD::Pool NMD::DIV_fmt1[2] = {
19504 { instruction , 0 , 0 , 32,
19505 0xfc0003ff, 0xa00001f0, &NMD::DIV_D , 0,
19506 CP1_ }, /* DIV.D */
19507 { reserved_block , 0 , 0 , 32,
19508 0xfc0003ff, 0xa00003f0, 0 , 0,
19509 CP1_ }, /* DIV.fmt1~*(1) */
19513 NMD::Pool NMD::MSUBF_fmt[2] = {
19514 { instruction , 0 , 0 , 32,
19515 0xfc0003ff, 0xa00001f8, &NMD::MSUBF_S , 0,
19516 CP1_ }, /* MSUBF.S */
19517 { instruction , 0 , 0 , 32,
19518 0xfc0003ff, 0xa00003f8, &NMD::MSUBF_D , 0,
19519 CP1_ }, /* MSUBF.D */
19523 NMD::Pool NMD::POOL32F_0[64] = {
19524 { reserved_block , 0 , 0 , 32,
19525 0xfc0001ff, 0xa0000000, 0 , 0,
19526 CP1_ }, /* POOL32F_0~*(0) */
19527 { reserved_block , 0 , 0 , 32,
19528 0xfc0001ff, 0xa0000008, 0 , 0,
19529 CP1_ }, /* POOL32F_0~*(1) */
19530 { reserved_block , 0 , 0 , 32,
19531 0xfc0001ff, 0xa0000010, 0 , 0,
19532 CP1_ }, /* POOL32F_0~*(2) */
19533 { reserved_block , 0 , 0 , 32,
19534 0xfc0001ff, 0xa0000018, 0 , 0,
19535 CP1_ }, /* POOL32F_0~*(3) */
19536 { pool , RINT_fmt , 2 , 32,
19537 0xfc0001ff, 0xa0000020, 0 , 0,
19538 CP1_ }, /* RINT.fmt */
19539 { reserved_block , 0 , 0 , 32,
19540 0xfc0001ff, 0xa0000028, 0 , 0,
19541 CP1_ }, /* POOL32F_0~*(5) */
19542 { pool , ADD_fmt0 , 2 , 32,
19543 0xfc0001ff, 0xa0000030, 0 , 0,
19544 CP1_ }, /* ADD.fmt0 */
19545 { pool , SELEQZ_fmt , 2 , 32,
19546 0xfc0001ff, 0xa0000038, 0 , 0,
19547 CP1_ }, /* SELEQZ.fmt */
19548 { reserved_block , 0 , 0 , 32,
19549 0xfc0001ff, 0xa0000040, 0 , 0,
19550 CP1_ }, /* POOL32F_0~*(8) */
19551 { reserved_block , 0 , 0 , 32,
19552 0xfc0001ff, 0xa0000048, 0 , 0,
19553 CP1_ }, /* POOL32F_0~*(9) */
19554 { reserved_block , 0 , 0 , 32,
19555 0xfc0001ff, 0xa0000050, 0 , 0,
19556 CP1_ }, /* POOL32F_0~*(10) */
19557 { reserved_block , 0 , 0 , 32,
19558 0xfc0001ff, 0xa0000058, 0 , 0,
19559 CP1_ }, /* POOL32F_0~*(11) */
19560 { pool , CLASS_fmt , 2 , 32,
19561 0xfc0001ff, 0xa0000060, 0 , 0,
19562 CP1_ }, /* CLASS.fmt */
19563 { reserved_block , 0 , 0 , 32,
19564 0xfc0001ff, 0xa0000068, 0 , 0,
19565 CP1_ }, /* POOL32F_0~*(13) */
19566 { pool , SUB_fmt0 , 2 , 32,
19567 0xfc0001ff, 0xa0000070, 0 , 0,
19568 CP1_ }, /* SUB.fmt0 */
19569 { pool , SELNEZ_fmt , 2 , 32,
19570 0xfc0001ff, 0xa0000078, 0 , 0,
19571 CP1_ }, /* SELNEZ.fmt */
19572 { reserved_block , 0 , 0 , 32,
19573 0xfc0001ff, 0xa0000080, 0 , 0,
19574 CP1_ }, /* POOL32F_0~*(16) */
19575 { reserved_block , 0 , 0 , 32,
19576 0xfc0001ff, 0xa0000088, 0 , 0,
19577 CP1_ }, /* POOL32F_0~*(17) */
19578 { reserved_block , 0 , 0 , 32,
19579 0xfc0001ff, 0xa0000090, 0 , 0,
19580 CP1_ }, /* POOL32F_0~*(18) */
19581 { reserved_block , 0 , 0 , 32,
19582 0xfc0001ff, 0xa0000098, 0 , 0,
19583 CP1_ }, /* POOL32F_0~*(19) */
19584 { reserved_block , 0 , 0 , 32,
19585 0xfc0001ff, 0xa00000a0, 0 , 0,
19586 CP1_ }, /* POOL32F_0~*(20) */
19587 { reserved_block , 0 , 0 , 32,
19588 0xfc0001ff, 0xa00000a8, 0 , 0,
19589 CP1_ }, /* POOL32F_0~*(21) */
19590 { pool , MUL_fmt0 , 2 , 32,
19591 0xfc0001ff, 0xa00000b0, 0 , 0,
19592 CP1_ }, /* MUL.fmt0 */
19593 { pool , SEL_fmt , 2 , 32,
19594 0xfc0001ff, 0xa00000b8, 0 , 0,
19595 CP1_ }, /* SEL.fmt */
19596 { reserved_block , 0 , 0 , 32,
19597 0xfc0001ff, 0xa00000c0, 0 , 0,
19598 CP1_ }, /* POOL32F_0~*(24) */
19599 { reserved_block , 0 , 0 , 32,
19600 0xfc0001ff, 0xa00000c8, 0 , 0,
19601 CP1_ }, /* POOL32F_0~*(25) */
19602 { reserved_block , 0 , 0 , 32,
19603 0xfc0001ff, 0xa00000d0, 0 , 0,
19604 CP1_ }, /* POOL32F_0~*(26) */
19605 { reserved_block , 0 , 0 , 32,
19606 0xfc0001ff, 0xa00000d8, 0 , 0,
19607 CP1_ }, /* POOL32F_0~*(27) */
19608 { reserved_block , 0 , 0 , 32,
19609 0xfc0001ff, 0xa00000e0, 0 , 0,
19610 CP1_ }, /* POOL32F_0~*(28) */
19611 { reserved_block , 0 , 0 , 32,
19612 0xfc0001ff, 0xa00000e8, 0 , 0,
19613 CP1_ }, /* POOL32F_0~*(29) */
19614 { pool , DIV_fmt0 , 2 , 32,
19615 0xfc0001ff, 0xa00000f0, 0 , 0,
19616 CP1_ }, /* DIV.fmt0 */
19617 { reserved_block , 0 , 0 , 32,
19618 0xfc0001ff, 0xa00000f8, 0 , 0,
19619 CP1_ }, /* POOL32F_0~*(31) */
19620 { reserved_block , 0 , 0 , 32,
19621 0xfc0001ff, 0xa0000100, 0 , 0,
19622 CP1_ }, /* POOL32F_0~*(32) */
19623 { reserved_block , 0 , 0 , 32,
19624 0xfc0001ff, 0xa0000108, 0 , 0,
19625 CP1_ }, /* POOL32F_0~*(33) */
19626 { reserved_block , 0 , 0 , 32,
19627 0xfc0001ff, 0xa0000110, 0 , 0,
19628 CP1_ }, /* POOL32F_0~*(34) */
19629 { reserved_block , 0 , 0 , 32,
19630 0xfc0001ff, 0xa0000118, 0 , 0,
19631 CP1_ }, /* POOL32F_0~*(35) */
19632 { reserved_block , 0 , 0 , 32,
19633 0xfc0001ff, 0xa0000120, 0 , 0,
19634 CP1_ }, /* POOL32F_0~*(36) */
19635 { reserved_block , 0 , 0 , 32,
19636 0xfc0001ff, 0xa0000128, 0 , 0,
19637 CP1_ }, /* POOL32F_0~*(37) */
19638 { pool , ADD_fmt1 , 2 , 32,
19639 0xfc0001ff, 0xa0000130, 0 , 0,
19640 CP1_ }, /* ADD.fmt1 */
19641 { reserved_block , 0 , 0 , 32,
19642 0xfc0001ff, 0xa0000138, 0 , 0,
19643 CP1_ }, /* POOL32F_0~*(39) */
19644 { reserved_block , 0 , 0 , 32,
19645 0xfc0001ff, 0xa0000140, 0 , 0,
19646 CP1_ }, /* POOL32F_0~*(40) */
19647 { reserved_block , 0 , 0 , 32,
19648 0xfc0001ff, 0xa0000148, 0 , 0,
19649 CP1_ }, /* POOL32F_0~*(41) */
19650 { reserved_block , 0 , 0 , 32,
19651 0xfc0001ff, 0xa0000150, 0 , 0,
19652 CP1_ }, /* POOL32F_0~*(42) */
19653 { reserved_block , 0 , 0 , 32,
19654 0xfc0001ff, 0xa0000158, 0 , 0,
19655 CP1_ }, /* POOL32F_0~*(43) */
19656 { reserved_block , 0 , 0 , 32,
19657 0xfc0001ff, 0xa0000160, 0 , 0,
19658 CP1_ }, /* POOL32F_0~*(44) */
19659 { reserved_block , 0 , 0 , 32,
19660 0xfc0001ff, 0xa0000168, 0 , 0,
19661 CP1_ }, /* POOL32F_0~*(45) */
19662 { pool , SUB_fmt1 , 2 , 32,
19663 0xfc0001ff, 0xa0000170, 0 , 0,
19664 CP1_ }, /* SUB.fmt1 */
19665 { reserved_block , 0 , 0 , 32,
19666 0xfc0001ff, 0xa0000178, 0 , 0,
19667 CP1_ }, /* POOL32F_0~*(47) */
19668 { reserved_block , 0 , 0 , 32,
19669 0xfc0001ff, 0xa0000180, 0 , 0,
19670 CP1_ }, /* POOL32F_0~*(48) */
19671 { reserved_block , 0 , 0 , 32,
19672 0xfc0001ff, 0xa0000188, 0 , 0,
19673 CP1_ }, /* POOL32F_0~*(49) */
19674 { reserved_block , 0 , 0 , 32,
19675 0xfc0001ff, 0xa0000190, 0 , 0,
19676 CP1_ }, /* POOL32F_0~*(50) */
19677 { reserved_block , 0 , 0 , 32,
19678 0xfc0001ff, 0xa0000198, 0 , 0,
19679 CP1_ }, /* POOL32F_0~*(51) */
19680 { reserved_block , 0 , 0 , 32,
19681 0xfc0001ff, 0xa00001a0, 0 , 0,
19682 CP1_ }, /* POOL32F_0~*(52) */
19683 { reserved_block , 0 , 0 , 32,
19684 0xfc0001ff, 0xa00001a8, 0 , 0,
19685 CP1_ }, /* POOL32F_0~*(53) */
19686 { pool , MUL_fmt1 , 2 , 32,
19687 0xfc0001ff, 0xa00001b0, 0 , 0,
19688 CP1_ }, /* MUL.fmt1 */
19689 { pool , MADDF_fmt , 2 , 32,
19690 0xfc0001ff, 0xa00001b8, 0 , 0,
19691 CP1_ }, /* MADDF.fmt */
19692 { reserved_block , 0 , 0 , 32,
19693 0xfc0001ff, 0xa00001c0, 0 , 0,
19694 CP1_ }, /* POOL32F_0~*(56) */
19695 { reserved_block , 0 , 0 , 32,
19696 0xfc0001ff, 0xa00001c8, 0 , 0,
19697 CP1_ }, /* POOL32F_0~*(57) */
19698 { reserved_block , 0 , 0 , 32,
19699 0xfc0001ff, 0xa00001d0, 0 , 0,
19700 CP1_ }, /* POOL32F_0~*(58) */
19701 { reserved_block , 0 , 0 , 32,
19702 0xfc0001ff, 0xa00001d8, 0 , 0,
19703 CP1_ }, /* POOL32F_0~*(59) */
19704 { reserved_block , 0 , 0 , 32,
19705 0xfc0001ff, 0xa00001e0, 0 , 0,
19706 CP1_ }, /* POOL32F_0~*(60) */
19707 { reserved_block , 0 , 0 , 32,
19708 0xfc0001ff, 0xa00001e8, 0 , 0,
19709 CP1_ }, /* POOL32F_0~*(61) */
19710 { pool , DIV_fmt1 , 2 , 32,
19711 0xfc0001ff, 0xa00001f0, 0 , 0,
19712 CP1_ }, /* DIV.fmt1 */
19713 { pool , MSUBF_fmt , 2 , 32,
19714 0xfc0001ff, 0xa00001f8, 0 , 0,
19715 CP1_ }, /* MSUBF.fmt */
19719 NMD::Pool NMD::MIN_fmt[2] = {
19720 { instruction , 0 , 0 , 32,
19721 0xfc00023f, 0xa0000003, &NMD::MIN_S , 0,
19722 CP1_ }, /* MIN.S */
19723 { instruction , 0 , 0 , 32,
19724 0xfc00023f, 0xa0000203, &NMD::MIN_D , 0,
19725 CP1_ }, /* MIN.D */
19729 NMD::Pool NMD::MAX_fmt[2] = {
19730 { instruction , 0 , 0 , 32,
19731 0xfc00023f, 0xa000000b, &NMD::MAX_S , 0,
19732 CP1_ }, /* MAX.S */
19733 { instruction , 0 , 0 , 32,
19734 0xfc00023f, 0xa000020b, &NMD::MAX_D , 0,
19735 CP1_ }, /* MAX.D */
19739 NMD::Pool NMD::MINA_fmt[2] = {
19740 { instruction , 0 , 0 , 32,
19741 0xfc00023f, 0xa0000023, &NMD::MINA_S , 0,
19742 CP1_ }, /* MINA.S */
19743 { instruction , 0 , 0 , 32,
19744 0xfc00023f, 0xa0000223, &NMD::MINA_D , 0,
19745 CP1_ }, /* MINA.D */
19749 NMD::Pool NMD::MAXA_fmt[2] = {
19750 { instruction , 0 , 0 , 32,
19751 0xfc00023f, 0xa000002b, &NMD::MAXA_S , 0,
19752 CP1_ }, /* MAXA.S */
19753 { instruction , 0 , 0 , 32,
19754 0xfc00023f, 0xa000022b, &NMD::MAXA_D , 0,
19755 CP1_ }, /* MAXA.D */
19759 NMD::Pool NMD::CVT_L_fmt[2] = {
19760 { instruction , 0 , 0 , 32,
19761 0xfc007fff, 0xa000013b, &NMD::CVT_L_S , 0,
19762 CP1_ }, /* CVT.L.S */
19763 { instruction , 0 , 0 , 32,
19764 0xfc007fff, 0xa000413b, &NMD::CVT_L_D , 0,
19765 CP1_ }, /* CVT.L.D */
19769 NMD::Pool NMD::RSQRT_fmt[2] = {
19770 { instruction , 0 , 0 , 32,
19771 0xfc007fff, 0xa000023b, &NMD::RSQRT_S , 0,
19772 CP1_ }, /* RSQRT.S */
19773 { instruction , 0 , 0 , 32,
19774 0xfc007fff, 0xa000423b, &NMD::RSQRT_D , 0,
19775 CP1_ }, /* RSQRT.D */
19779 NMD::Pool NMD::FLOOR_L_fmt[2] = {
19780 { instruction , 0 , 0 , 32,
19781 0xfc007fff, 0xa000033b, &NMD::FLOOR_L_S , 0,
19782 CP1_ }, /* FLOOR.L.S */
19783 { instruction , 0 , 0 , 32,
19784 0xfc007fff, 0xa000433b, &NMD::FLOOR_L_D , 0,
19785 CP1_ }, /* FLOOR.L.D */
19789 NMD::Pool NMD::CVT_W_fmt[2] = {
19790 { instruction , 0 , 0 , 32,
19791 0xfc007fff, 0xa000093b, &NMD::CVT_W_S , 0,
19792 CP1_ }, /* CVT.W.S */
19793 { instruction , 0 , 0 , 32,
19794 0xfc007fff, 0xa000493b, &NMD::CVT_W_D , 0,
19795 CP1_ }, /* CVT.W.D */
19799 NMD::Pool NMD::SQRT_fmt[2] = {
19800 { instruction , 0 , 0 , 32,
19801 0xfc007fff, 0xa0000a3b, &NMD::SQRT_S , 0,
19802 CP1_ }, /* SQRT.S */
19803 { instruction , 0 , 0 , 32,
19804 0xfc007fff, 0xa0004a3b, &NMD::SQRT_D , 0,
19805 CP1_ }, /* SQRT.D */
19809 NMD::Pool NMD::FLOOR_W_fmt[2] = {
19810 { instruction , 0 , 0 , 32,
19811 0xfc007fff, 0xa0000b3b, &NMD::FLOOR_W_S , 0,
19812 CP1_ }, /* FLOOR.W.S */
19813 { instruction , 0 , 0 , 32,
19814 0xfc007fff, 0xa0004b3b, &NMD::FLOOR_W_D , 0,
19815 CP1_ }, /* FLOOR.W.D */
19819 NMD::Pool NMD::RECIP_fmt[2] = {
19820 { instruction , 0 , 0 , 32,
19821 0xfc007fff, 0xa000123b, &NMD::RECIP_S , 0,
19822 CP1_ }, /* RECIP.S */
19823 { instruction , 0 , 0 , 32,
19824 0xfc007fff, 0xa000523b, &NMD::RECIP_D , 0,
19825 CP1_ }, /* RECIP.D */
19829 NMD::Pool NMD::CEIL_L_fmt[2] = {
19830 { instruction , 0 , 0 , 32,
19831 0xfc007fff, 0xa000133b, &NMD::CEIL_L_S , 0,
19832 CP1_ }, /* CEIL.L.S */
19833 { instruction , 0 , 0 , 32,
19834 0xfc007fff, 0xa000533b, &NMD::CEIL_L_D , 0,
19835 CP1_ }, /* CEIL.L.D */
19839 NMD::Pool NMD::CEIL_W_fmt[2] = {
19840 { instruction , 0 , 0 , 32,
19841 0xfc007fff, 0xa0001b3b, &NMD::CEIL_W_S , 0,
19842 CP1_ }, /* CEIL.W.S */
19843 { instruction , 0 , 0 , 32,
19844 0xfc007fff, 0xa0005b3b, &NMD::CEIL_W_D , 0,
19845 CP1_ }, /* CEIL.W.D */
19849 NMD::Pool NMD::TRUNC_L_fmt[2] = {
19850 { instruction , 0 , 0 , 32,
19851 0xfc007fff, 0xa000233b, &NMD::TRUNC_L_S , 0,
19852 CP1_ }, /* TRUNC.L.S */
19853 { instruction , 0 , 0 , 32,
19854 0xfc007fff, 0xa000633b, &NMD::TRUNC_L_D , 0,
19855 CP1_ }, /* TRUNC.L.D */
19859 NMD::Pool NMD::TRUNC_W_fmt[2] = {
19860 { instruction , 0 , 0 , 32,
19861 0xfc007fff, 0xa0002b3b, &NMD::TRUNC_W_S , 0,
19862 CP1_ }, /* TRUNC.W.S */
19863 { instruction , 0 , 0 , 32,
19864 0xfc007fff, 0xa0006b3b, &NMD::TRUNC_W_D , 0,
19865 CP1_ }, /* TRUNC.W.D */
19869 NMD::Pool NMD::ROUND_L_fmt[2] = {
19870 { instruction , 0 , 0 , 32,
19871 0xfc007fff, 0xa000333b, &NMD::ROUND_L_S , 0,
19872 CP1_ }, /* ROUND.L.S */
19873 { instruction , 0 , 0 , 32,
19874 0xfc007fff, 0xa000733b, &NMD::ROUND_L_D , 0,
19875 CP1_ }, /* ROUND.L.D */
19879 NMD::Pool NMD::ROUND_W_fmt[2] = {
19880 { instruction , 0 , 0 , 32,
19881 0xfc007fff, 0xa0003b3b, &NMD::ROUND_W_S , 0,
19882 CP1_ }, /* ROUND.W.S */
19883 { instruction , 0 , 0 , 32,
19884 0xfc007fff, 0xa0007b3b, &NMD::ROUND_W_D , 0,
19885 CP1_ }, /* ROUND.W.D */
19889 NMD::Pool NMD::POOL32Fxf_0[64] = {
19890 { reserved_block , 0 , 0 , 32,
19891 0xfc003fff, 0xa000003b, 0 , 0,
19892 CP1_ }, /* POOL32Fxf_0~*(0) */
19893 { pool , CVT_L_fmt , 2 , 32,
19894 0xfc003fff, 0xa000013b, 0 , 0,
19895 CP1_ }, /* CVT.L.fmt */
19896 { pool , RSQRT_fmt , 2 , 32,
19897 0xfc003fff, 0xa000023b, 0 , 0,
19898 CP1_ }, /* RSQRT.fmt */
19899 { pool , FLOOR_L_fmt , 2 , 32,
19900 0xfc003fff, 0xa000033b, 0 , 0,
19901 CP1_ }, /* FLOOR.L.fmt */
19902 { reserved_block , 0 , 0 , 32,
19903 0xfc003fff, 0xa000043b, 0 , 0,
19904 CP1_ }, /* POOL32Fxf_0~*(4) */
19905 { reserved_block , 0 , 0 , 32,
19906 0xfc003fff, 0xa000053b, 0 , 0,
19907 CP1_ }, /* POOL32Fxf_0~*(5) */
19908 { reserved_block , 0 , 0 , 32,
19909 0xfc003fff, 0xa000063b, 0 , 0,
19910 CP1_ }, /* POOL32Fxf_0~*(6) */
19911 { reserved_block , 0 , 0 , 32,
19912 0xfc003fff, 0xa000073b, 0 , 0,
19913 CP1_ }, /* POOL32Fxf_0~*(7) */
19914 { reserved_block , 0 , 0 , 32,
19915 0xfc003fff, 0xa000083b, 0 , 0,
19916 CP1_ }, /* POOL32Fxf_0~*(8) */
19917 { pool , CVT_W_fmt , 2 , 32,
19918 0xfc003fff, 0xa000093b, 0 , 0,
19919 CP1_ }, /* CVT.W.fmt */
19920 { pool , SQRT_fmt , 2 , 32,
19921 0xfc003fff, 0xa0000a3b, 0 , 0,
19922 CP1_ }, /* SQRT.fmt */
19923 { pool , FLOOR_W_fmt , 2 , 32,
19924 0xfc003fff, 0xa0000b3b, 0 , 0,
19925 CP1_ }, /* FLOOR.W.fmt */
19926 { reserved_block , 0 , 0 , 32,
19927 0xfc003fff, 0xa0000c3b, 0 , 0,
19928 CP1_ }, /* POOL32Fxf_0~*(12) */
19929 { reserved_block , 0 , 0 , 32,
19930 0xfc003fff, 0xa0000d3b, 0 , 0,
19931 CP1_ }, /* POOL32Fxf_0~*(13) */
19932 { reserved_block , 0 , 0 , 32,
19933 0xfc003fff, 0xa0000e3b, 0 , 0,
19934 CP1_ }, /* POOL32Fxf_0~*(14) */
19935 { reserved_block , 0 , 0 , 32,
19936 0xfc003fff, 0xa0000f3b, 0 , 0,
19937 CP1_ }, /* POOL32Fxf_0~*(15) */
19938 { instruction , 0 , 0 , 32,
19939 0xfc003fff, 0xa000103b, &NMD::CFC1 , 0,
19940 CP1_ }, /* CFC1 */
19941 { reserved_block , 0 , 0 , 32,
19942 0xfc003fff, 0xa000113b, 0 , 0,
19943 CP1_ }, /* POOL32Fxf_0~*(17) */
19944 { pool , RECIP_fmt , 2 , 32,
19945 0xfc003fff, 0xa000123b, 0 , 0,
19946 CP1_ }, /* RECIP.fmt */
19947 { pool , CEIL_L_fmt , 2 , 32,
19948 0xfc003fff, 0xa000133b, 0 , 0,
19949 CP1_ }, /* CEIL.L.fmt */
19950 { reserved_block , 0 , 0 , 32,
19951 0xfc003fff, 0xa000143b, 0 , 0,
19952 CP1_ }, /* POOL32Fxf_0~*(20) */
19953 { reserved_block , 0 , 0 , 32,
19954 0xfc003fff, 0xa000153b, 0 , 0,
19955 CP1_ }, /* POOL32Fxf_0~*(21) */
19956 { reserved_block , 0 , 0 , 32,
19957 0xfc003fff, 0xa000163b, 0 , 0,
19958 CP1_ }, /* POOL32Fxf_0~*(22) */
19959 { reserved_block , 0 , 0 , 32,
19960 0xfc003fff, 0xa000173b, 0 , 0,
19961 CP1_ }, /* POOL32Fxf_0~*(23) */
19962 { instruction , 0 , 0 , 32,
19963 0xfc003fff, 0xa000183b, &NMD::CTC1 , 0,
19964 CP1_ }, /* CTC1 */
19965 { reserved_block , 0 , 0 , 32,
19966 0xfc003fff, 0xa000193b, 0 , 0,
19967 CP1_ }, /* POOL32Fxf_0~*(25) */
19968 { reserved_block , 0 , 0 , 32,
19969 0xfc003fff, 0xa0001a3b, 0 , 0,
19970 CP1_ }, /* POOL32Fxf_0~*(26) */
19971 { pool , CEIL_W_fmt , 2 , 32,
19972 0xfc003fff, 0xa0001b3b, 0 , 0,
19973 CP1_ }, /* CEIL.W.fmt */
19974 { reserved_block , 0 , 0 , 32,
19975 0xfc003fff, 0xa0001c3b, 0 , 0,
19976 CP1_ }, /* POOL32Fxf_0~*(28) */
19977 { reserved_block , 0 , 0 , 32,
19978 0xfc003fff, 0xa0001d3b, 0 , 0,
19979 CP1_ }, /* POOL32Fxf_0~*(29) */
19980 { reserved_block , 0 , 0 , 32,
19981 0xfc003fff, 0xa0001e3b, 0 , 0,
19982 CP1_ }, /* POOL32Fxf_0~*(30) */
19983 { reserved_block , 0 , 0 , 32,
19984 0xfc003fff, 0xa0001f3b, 0 , 0,
19985 CP1_ }, /* POOL32Fxf_0~*(31) */
19986 { instruction , 0 , 0 , 32,
19987 0xfc003fff, 0xa000203b, &NMD::MFC1 , 0,
19988 CP1_ }, /* MFC1 */
19989 { instruction , 0 , 0 , 32,
19990 0xfc003fff, 0xa000213b, &NMD::CVT_S_PL , 0,
19991 CP1_ }, /* CVT.S.PL */
19992 { reserved_block , 0 , 0 , 32,
19993 0xfc003fff, 0xa000223b, 0 , 0,
19994 CP1_ }, /* POOL32Fxf_0~*(34) */
19995 { pool , TRUNC_L_fmt , 2 , 32,
19996 0xfc003fff, 0xa000233b, 0 , 0,
19997 CP1_ }, /* TRUNC.L.fmt */
19998 { instruction , 0 , 0 , 32,
19999 0xfc003fff, 0xa000243b, &NMD::DMFC1 , 0,
20000 CP1_ | MIPS64_ }, /* DMFC1 */
20001 { reserved_block , 0 , 0 , 32,
20002 0xfc003fff, 0xa000253b, 0 , 0,
20003 CP1_ }, /* POOL32Fxf_0~*(37) */
20004 { reserved_block , 0 , 0 , 32,
20005 0xfc003fff, 0xa000263b, 0 , 0,
20006 CP1_ }, /* POOL32Fxf_0~*(38) */
20007 { reserved_block , 0 , 0 , 32,
20008 0xfc003fff, 0xa000273b, 0 , 0,
20009 CP1_ }, /* POOL32Fxf_0~*(39) */
20010 { instruction , 0 , 0 , 32,
20011 0xfc003fff, 0xa000283b, &NMD::MTC1 , 0,
20012 CP1_ }, /* MTC1 */
20013 { instruction , 0 , 0 , 32,
20014 0xfc003fff, 0xa000293b, &NMD::CVT_S_PU , 0,
20015 CP1_ }, /* CVT.S.PU */
20016 { reserved_block , 0 , 0 , 32,
20017 0xfc003fff, 0xa0002a3b, 0 , 0,
20018 CP1_ }, /* POOL32Fxf_0~*(42) */
20019 { pool , TRUNC_W_fmt , 2 , 32,
20020 0xfc003fff, 0xa0002b3b, 0 , 0,
20021 CP1_ }, /* TRUNC.W.fmt */
20022 { instruction , 0 , 0 , 32,
20023 0xfc003fff, 0xa0002c3b, &NMD::DMTC1 , 0,
20024 CP1_ | MIPS64_ }, /* DMTC1 */
20025 { reserved_block , 0 , 0 , 32,
20026 0xfc003fff, 0xa0002d3b, 0 , 0,
20027 CP1_ }, /* POOL32Fxf_0~*(45) */
20028 { reserved_block , 0 , 0 , 32,
20029 0xfc003fff, 0xa0002e3b, 0 , 0,
20030 CP1_ }, /* POOL32Fxf_0~*(46) */
20031 { reserved_block , 0 , 0 , 32,
20032 0xfc003fff, 0xa0002f3b, 0 , 0,
20033 CP1_ }, /* POOL32Fxf_0~*(47) */
20034 { instruction , 0 , 0 , 32,
20035 0xfc003fff, 0xa000303b, &NMD::MFHC1 , 0,
20036 CP1_ }, /* MFHC1 */
20037 { reserved_block , 0 , 0 , 32,
20038 0xfc003fff, 0xa000313b, 0 , 0,
20039 CP1_ }, /* POOL32Fxf_0~*(49) */
20040 { reserved_block , 0 , 0 , 32,
20041 0xfc003fff, 0xa000323b, 0 , 0,
20042 CP1_ }, /* POOL32Fxf_0~*(50) */
20043 { pool , ROUND_L_fmt , 2 , 32,
20044 0xfc003fff, 0xa000333b, 0 , 0,
20045 CP1_ }, /* ROUND.L.fmt */
20046 { reserved_block , 0 , 0 , 32,
20047 0xfc003fff, 0xa000343b, 0 , 0,
20048 CP1_ }, /* POOL32Fxf_0~*(52) */
20049 { reserved_block , 0 , 0 , 32,
20050 0xfc003fff, 0xa000353b, 0 , 0,
20051 CP1_ }, /* POOL32Fxf_0~*(53) */
20052 { reserved_block , 0 , 0 , 32,
20053 0xfc003fff, 0xa000363b, 0 , 0,
20054 CP1_ }, /* POOL32Fxf_0~*(54) */
20055 { reserved_block , 0 , 0 , 32,
20056 0xfc003fff, 0xa000373b, 0 , 0,
20057 CP1_ }, /* POOL32Fxf_0~*(55) */
20058 { instruction , 0 , 0 , 32,
20059 0xfc003fff, 0xa000383b, &NMD::MTHC1 , 0,
20060 CP1_ }, /* MTHC1 */
20061 { reserved_block , 0 , 0 , 32,
20062 0xfc003fff, 0xa000393b, 0 , 0,
20063 CP1_ }, /* POOL32Fxf_0~*(57) */
20064 { reserved_block , 0 , 0 , 32,
20065 0xfc003fff, 0xa0003a3b, 0 , 0,
20066 CP1_ }, /* POOL32Fxf_0~*(58) */
20067 { pool , ROUND_W_fmt , 2 , 32,
20068 0xfc003fff, 0xa0003b3b, 0 , 0,
20069 CP1_ }, /* ROUND.W.fmt */
20070 { reserved_block , 0 , 0 , 32,
20071 0xfc003fff, 0xa0003c3b, 0 , 0,
20072 CP1_ }, /* POOL32Fxf_0~*(60) */
20073 { reserved_block , 0 , 0 , 32,
20074 0xfc003fff, 0xa0003d3b, 0 , 0,
20075 CP1_ }, /* POOL32Fxf_0~*(61) */
20076 { reserved_block , 0 , 0 , 32,
20077 0xfc003fff, 0xa0003e3b, 0 , 0,
20078 CP1_ }, /* POOL32Fxf_0~*(62) */
20079 { reserved_block , 0 , 0 , 32,
20080 0xfc003fff, 0xa0003f3b, 0 , 0,
20081 CP1_ }, /* POOL32Fxf_0~*(63) */
20085 NMD::Pool NMD::MOV_fmt[4] = {
20086 { instruction , 0 , 0 , 32,
20087 0xfc007fff, 0xa000007b, &NMD::MOV_S , 0,
20088 CP1_ }, /* MOV.S */
20089 { instruction , 0 , 0 , 32,
20090 0xfc007fff, 0xa000207b, &NMD::MOV_D , 0,
20091 CP1_ }, /* MOV.D */
20092 { reserved_block , 0 , 0 , 32,
20093 0xfc007fff, 0xa000407b, 0 , 0,
20094 CP1_ }, /* MOV.fmt~*(2) */
20095 { reserved_block , 0 , 0 , 32,
20096 0xfc007fff, 0xa000607b, 0 , 0,
20097 CP1_ }, /* MOV.fmt~*(3) */
20101 NMD::Pool NMD::ABS_fmt[4] = {
20102 { instruction , 0 , 0 , 32,
20103 0xfc007fff, 0xa000037b, &NMD::ABS_S , 0,
20104 CP1_ }, /* ABS.S */
20105 { instruction , 0 , 0 , 32,
20106 0xfc007fff, 0xa000237b, &NMD::ABS_D , 0,
20107 CP1_ }, /* ABS.D */
20108 { reserved_block , 0 , 0 , 32,
20109 0xfc007fff, 0xa000437b, 0 , 0,
20110 CP1_ }, /* ABS.fmt~*(2) */
20111 { reserved_block , 0 , 0 , 32,
20112 0xfc007fff, 0xa000637b, 0 , 0,
20113 CP1_ }, /* ABS.fmt~*(3) */
20117 NMD::Pool NMD::NEG_fmt[4] = {
20118 { instruction , 0 , 0 , 32,
20119 0xfc007fff, 0xa0000b7b, &NMD::NEG_S , 0,
20120 CP1_ }, /* NEG.S */
20121 { instruction , 0 , 0 , 32,
20122 0xfc007fff, 0xa0002b7b, &NMD::NEG_D , 0,
20123 CP1_ }, /* NEG.D */
20124 { reserved_block , 0 , 0 , 32,
20125 0xfc007fff, 0xa0004b7b, 0 , 0,
20126 CP1_ }, /* NEG.fmt~*(2) */
20127 { reserved_block , 0 , 0 , 32,
20128 0xfc007fff, 0xa0006b7b, 0 , 0,
20129 CP1_ }, /* NEG.fmt~*(3) */
20133 NMD::Pool NMD::CVT_D_fmt[4] = {
20134 { instruction , 0 , 0 , 32,
20135 0xfc007fff, 0xa000137b, &NMD::CVT_D_S , 0,
20136 CP1_ }, /* CVT.D.S */
20137 { instruction , 0 , 0 , 32,
20138 0xfc007fff, 0xa000337b, &NMD::CVT_D_W , 0,
20139 CP1_ }, /* CVT.D.W */
20140 { instruction , 0 , 0 , 32,
20141 0xfc007fff, 0xa000537b, &NMD::CVT_D_L , 0,
20142 CP1_ }, /* CVT.D.L */
20143 { reserved_block , 0 , 0 , 32,
20144 0xfc007fff, 0xa000737b, 0 , 0,
20145 CP1_ }, /* CVT.D.fmt~*(3) */
20149 NMD::Pool NMD::CVT_S_fmt[4] = {
20150 { instruction , 0 , 0 , 32,
20151 0xfc007fff, 0xa0001b7b, &NMD::CVT_S_D , 0,
20152 CP1_ }, /* CVT.S.D */
20153 { instruction , 0 , 0 , 32,
20154 0xfc007fff, 0xa0003b7b, &NMD::CVT_S_W , 0,
20155 CP1_ }, /* CVT.S.W */
20156 { instruction , 0 , 0 , 32,
20157 0xfc007fff, 0xa0005b7b, &NMD::CVT_S_L , 0,
20158 CP1_ }, /* CVT.S.L */
20159 { reserved_block , 0 , 0 , 32,
20160 0xfc007fff, 0xa0007b7b, 0 , 0,
20161 CP1_ }, /* CVT.S.fmt~*(3) */
20165 NMD::Pool NMD::POOL32Fxf_1[32] = {
20166 { pool , MOV_fmt , 4 , 32,
20167 0xfc001fff, 0xa000007b, 0 , 0,
20168 CP1_ }, /* MOV.fmt */
20169 { reserved_block , 0 , 0 , 32,
20170 0xfc001fff, 0xa000017b, 0 , 0,
20171 CP1_ }, /* POOL32Fxf_1~*(1) */
20172 { reserved_block , 0 , 0 , 32,
20173 0xfc001fff, 0xa000027b, 0 , 0,
20174 CP1_ }, /* POOL32Fxf_1~*(2) */
20175 { pool , ABS_fmt , 4 , 32,
20176 0xfc001fff, 0xa000037b, 0 , 0,
20177 CP1_ }, /* ABS.fmt */
20178 { reserved_block , 0 , 0 , 32,
20179 0xfc001fff, 0xa000047b, 0 , 0,
20180 CP1_ }, /* POOL32Fxf_1~*(4) */
20181 { reserved_block , 0 , 0 , 32,
20182 0xfc001fff, 0xa000057b, 0 , 0,
20183 CP1_ }, /* POOL32Fxf_1~*(5) */
20184 { reserved_block , 0 , 0 , 32,
20185 0xfc001fff, 0xa000067b, 0 , 0,
20186 CP1_ }, /* POOL32Fxf_1~*(6) */
20187 { reserved_block , 0 , 0 , 32,
20188 0xfc001fff, 0xa000077b, 0 , 0,
20189 CP1_ }, /* POOL32Fxf_1~*(7) */
20190 { reserved_block , 0 , 0 , 32,
20191 0xfc001fff, 0xa000087b, 0 , 0,
20192 CP1_ }, /* POOL32Fxf_1~*(8) */
20193 { reserved_block , 0 , 0 , 32,
20194 0xfc001fff, 0xa000097b, 0 , 0,
20195 CP1_ }, /* POOL32Fxf_1~*(9) */
20196 { reserved_block , 0 , 0 , 32,
20197 0xfc001fff, 0xa0000a7b, 0 , 0,
20198 CP1_ }, /* POOL32Fxf_1~*(10) */
20199 { pool , NEG_fmt , 4 , 32,
20200 0xfc001fff, 0xa0000b7b, 0 , 0,
20201 CP1_ }, /* NEG.fmt */
20202 { reserved_block , 0 , 0 , 32,
20203 0xfc001fff, 0xa0000c7b, 0 , 0,
20204 CP1_ }, /* POOL32Fxf_1~*(12) */
20205 { reserved_block , 0 , 0 , 32,
20206 0xfc001fff, 0xa0000d7b, 0 , 0,
20207 CP1_ }, /* POOL32Fxf_1~*(13) */
20208 { reserved_block , 0 , 0 , 32,
20209 0xfc001fff, 0xa0000e7b, 0 , 0,
20210 CP1_ }, /* POOL32Fxf_1~*(14) */
20211 { reserved_block , 0 , 0 , 32,
20212 0xfc001fff, 0xa0000f7b, 0 , 0,
20213 CP1_ }, /* POOL32Fxf_1~*(15) */
20214 { reserved_block , 0 , 0 , 32,
20215 0xfc001fff, 0xa000107b, 0 , 0,
20216 CP1_ }, /* POOL32Fxf_1~*(16) */
20217 { reserved_block , 0 , 0 , 32,
20218 0xfc001fff, 0xa000117b, 0 , 0,
20219 CP1_ }, /* POOL32Fxf_1~*(17) */
20220 { reserved_block , 0 , 0 , 32,
20221 0xfc001fff, 0xa000127b, 0 , 0,
20222 CP1_ }, /* POOL32Fxf_1~*(18) */
20223 { pool , CVT_D_fmt , 4 , 32,
20224 0xfc001fff, 0xa000137b, 0 , 0,
20225 CP1_ }, /* CVT.D.fmt */
20226 { reserved_block , 0 , 0 , 32,
20227 0xfc001fff, 0xa000147b, 0 , 0,
20228 CP1_ }, /* POOL32Fxf_1~*(20) */
20229 { reserved_block , 0 , 0 , 32,
20230 0xfc001fff, 0xa000157b, 0 , 0,
20231 CP1_ }, /* POOL32Fxf_1~*(21) */
20232 { reserved_block , 0 , 0 , 32,
20233 0xfc001fff, 0xa000167b, 0 , 0,
20234 CP1_ }, /* POOL32Fxf_1~*(22) */
20235 { reserved_block , 0 , 0 , 32,
20236 0xfc001fff, 0xa000177b, 0 , 0,
20237 CP1_ }, /* POOL32Fxf_1~*(23) */
20238 { reserved_block , 0 , 0 , 32,
20239 0xfc001fff, 0xa000187b, 0 , 0,
20240 CP1_ }, /* POOL32Fxf_1~*(24) */
20241 { reserved_block , 0 , 0 , 32,
20242 0xfc001fff, 0xa000197b, 0 , 0,
20243 CP1_ }, /* POOL32Fxf_1~*(25) */
20244 { reserved_block , 0 , 0 , 32,
20245 0xfc001fff, 0xa0001a7b, 0 , 0,
20246 CP1_ }, /* POOL32Fxf_1~*(26) */
20247 { pool , CVT_S_fmt , 4 , 32,
20248 0xfc001fff, 0xa0001b7b, 0 , 0,
20249 CP1_ }, /* CVT.S.fmt */
20250 { reserved_block , 0 , 0 , 32,
20251 0xfc001fff, 0xa0001c7b, 0 , 0,
20252 CP1_ }, /* POOL32Fxf_1~*(28) */
20253 { reserved_block , 0 , 0 , 32,
20254 0xfc001fff, 0xa0001d7b, 0 , 0,
20255 CP1_ }, /* POOL32Fxf_1~*(29) */
20256 { reserved_block , 0 , 0 , 32,
20257 0xfc001fff, 0xa0001e7b, 0 , 0,
20258 CP1_ }, /* POOL32Fxf_1~*(30) */
20259 { reserved_block , 0 , 0 , 32,
20260 0xfc001fff, 0xa0001f7b, 0 , 0,
20261 CP1_ }, /* POOL32Fxf_1~*(31) */
20265 NMD::Pool NMD::POOL32Fxf[4] = {
20266 { pool , POOL32Fxf_0 , 64 , 32,
20267 0xfc0000ff, 0xa000003b, 0 , 0,
20268 CP1_ }, /* POOL32Fxf_0 */
20269 { pool , POOL32Fxf_1 , 32 , 32,
20270 0xfc0000ff, 0xa000007b, 0 , 0,
20271 CP1_ }, /* POOL32Fxf_1 */
20272 { reserved_block , 0 , 0 , 32,
20273 0xfc0000ff, 0xa00000bb, 0 , 0,
20274 CP1_ }, /* POOL32Fxf~*(2) */
20275 { reserved_block , 0 , 0 , 32,
20276 0xfc0000ff, 0xa00000fb, 0 , 0,
20277 CP1_ }, /* POOL32Fxf~*(3) */
20281 NMD::Pool NMD::POOL32F_3[8] = {
20282 { pool , MIN_fmt , 2 , 32,
20283 0xfc00003f, 0xa0000003, 0 , 0,
20284 CP1_ }, /* MIN.fmt */
20285 { pool , MAX_fmt , 2 , 32,
20286 0xfc00003f, 0xa000000b, 0 , 0,
20287 CP1_ }, /* MAX.fmt */
20288 { reserved_block , 0 , 0 , 32,
20289 0xfc00003f, 0xa0000013, 0 , 0,
20290 CP1_ }, /* POOL32F_3~*(2) */
20291 { reserved_block , 0 , 0 , 32,
20292 0xfc00003f, 0xa000001b, 0 , 0,
20293 CP1_ }, /* POOL32F_3~*(3) */
20294 { pool , MINA_fmt , 2 , 32,
20295 0xfc00003f, 0xa0000023, 0 , 0,
20296 CP1_ }, /* MINA.fmt */
20297 { pool , MAXA_fmt , 2 , 32,
20298 0xfc00003f, 0xa000002b, 0 , 0,
20299 CP1_ }, /* MAXA.fmt */
20300 { reserved_block , 0 , 0 , 32,
20301 0xfc00003f, 0xa0000033, 0 , 0,
20302 CP1_ }, /* POOL32F_3~*(6) */
20303 { pool , POOL32Fxf , 4 , 32,
20304 0xfc00003f, 0xa000003b, 0 , 0,
20305 CP1_ }, /* POOL32Fxf */
20309 NMD::Pool NMD::CMP_condn_S[32] = {
20310 { instruction , 0 , 0 , 32,
20311 0xfc0007ff, 0xa0000005, &NMD::CMP_AF_S , 0,
20312 CP1_ }, /* CMP.AF.S */
20313 { instruction , 0 , 0 , 32,
20314 0xfc0007ff, 0xa0000045, &NMD::CMP_UN_S , 0,
20315 CP1_ }, /* CMP.UN.S */
20316 { instruction , 0 , 0 , 32,
20317 0xfc0007ff, 0xa0000085, &NMD::CMP_EQ_S , 0,
20318 CP1_ }, /* CMP.EQ.S */
20319 { instruction , 0 , 0 , 32,
20320 0xfc0007ff, 0xa00000c5, &NMD::CMP_UEQ_S , 0,
20321 CP1_ }, /* CMP.UEQ.S */
20322 { instruction , 0 , 0 , 32,
20323 0xfc0007ff, 0xa0000105, &NMD::CMP_LT_S , 0,
20324 CP1_ }, /* CMP.LT.S */
20325 { instruction , 0 , 0 , 32,
20326 0xfc0007ff, 0xa0000145, &NMD::CMP_ULT_S , 0,
20327 CP1_ }, /* CMP.ULT.S */
20328 { instruction , 0 , 0 , 32,
20329 0xfc0007ff, 0xa0000185, &NMD::CMP_LE_S , 0,
20330 CP1_ }, /* CMP.LE.S */
20331 { instruction , 0 , 0 , 32,
20332 0xfc0007ff, 0xa00001c5, &NMD::CMP_ULE_S , 0,
20333 CP1_ }, /* CMP.ULE.S */
20334 { instruction , 0 , 0 , 32,
20335 0xfc0007ff, 0xa0000205, &NMD::CMP_SAF_S , 0,
20336 CP1_ }, /* CMP.SAF.S */
20337 { instruction , 0 , 0 , 32,
20338 0xfc0007ff, 0xa0000245, &NMD::CMP_SUN_S , 0,
20339 CP1_ }, /* CMP.SUN.S */
20340 { instruction , 0 , 0 , 32,
20341 0xfc0007ff, 0xa0000285, &NMD::CMP_SEQ_S , 0,
20342 CP1_ }, /* CMP.SEQ.S */
20343 { instruction , 0 , 0 , 32,
20344 0xfc0007ff, 0xa00002c5, &NMD::CMP_SUEQ_S , 0,
20345 CP1_ }, /* CMP.SUEQ.S */
20346 { instruction , 0 , 0 , 32,
20347 0xfc0007ff, 0xa0000305, &NMD::CMP_SLT_S , 0,
20348 CP1_ }, /* CMP.SLT.S */
20349 { instruction , 0 , 0 , 32,
20350 0xfc0007ff, 0xa0000345, &NMD::CMP_SULT_S , 0,
20351 CP1_ }, /* CMP.SULT.S */
20352 { instruction , 0 , 0 , 32,
20353 0xfc0007ff, 0xa0000385, &NMD::CMP_SLE_S , 0,
20354 CP1_ }, /* CMP.SLE.S */
20355 { instruction , 0 , 0 , 32,
20356 0xfc0007ff, 0xa00003c5, &NMD::CMP_SULE_S , 0,
20357 CP1_ }, /* CMP.SULE.S */
20358 { reserved_block , 0 , 0 , 32,
20359 0xfc0007ff, 0xa0000405, 0 , 0,
20360 CP1_ }, /* CMP.condn.S~*(16) */
20361 { instruction , 0 , 0 , 32,
20362 0xfc0007ff, 0xa0000445, &NMD::CMP_OR_S , 0,
20363 CP1_ }, /* CMP.OR.S */
20364 { instruction , 0 , 0 , 32,
20365 0xfc0007ff, 0xa0000485, &NMD::CMP_UNE_S , 0,
20366 CP1_ }, /* CMP.UNE.S */
20367 { instruction , 0 , 0 , 32,
20368 0xfc0007ff, 0xa00004c5, &NMD::CMP_NE_S , 0,
20369 CP1_ }, /* CMP.NE.S */
20370 { reserved_block , 0 , 0 , 32,
20371 0xfc0007ff, 0xa0000505, 0 , 0,
20372 CP1_ }, /* CMP.condn.S~*(20) */
20373 { reserved_block , 0 , 0 , 32,
20374 0xfc0007ff, 0xa0000545, 0 , 0,
20375 CP1_ }, /* CMP.condn.S~*(21) */
20376 { reserved_block , 0 , 0 , 32,
20377 0xfc0007ff, 0xa0000585, 0 , 0,
20378 CP1_ }, /* CMP.condn.S~*(22) */
20379 { reserved_block , 0 , 0 , 32,
20380 0xfc0007ff, 0xa00005c5, 0 , 0,
20381 CP1_ }, /* CMP.condn.S~*(23) */
20382 { reserved_block , 0 , 0 , 32,
20383 0xfc0007ff, 0xa0000605, 0 , 0,
20384 CP1_ }, /* CMP.condn.S~*(24) */
20385 { instruction , 0 , 0 , 32,
20386 0xfc0007ff, 0xa0000645, &NMD::CMP_SOR_S , 0,
20387 CP1_ }, /* CMP.SOR.S */
20388 { instruction , 0 , 0 , 32,
20389 0xfc0007ff, 0xa0000685, &NMD::CMP_SUNE_S , 0,
20390 CP1_ }, /* CMP.SUNE.S */
20391 { instruction , 0 , 0 , 32,
20392 0xfc0007ff, 0xa00006c5, &NMD::CMP_SNE_S , 0,
20393 CP1_ }, /* CMP.SNE.S */
20394 { reserved_block , 0 , 0 , 32,
20395 0xfc0007ff, 0xa0000705, 0 , 0,
20396 CP1_ }, /* CMP.condn.S~*(28) */
20397 { reserved_block , 0 , 0 , 32,
20398 0xfc0007ff, 0xa0000745, 0 , 0,
20399 CP1_ }, /* CMP.condn.S~*(29) */
20400 { reserved_block , 0 , 0 , 32,
20401 0xfc0007ff, 0xa0000785, 0 , 0,
20402 CP1_ }, /* CMP.condn.S~*(30) */
20403 { reserved_block , 0 , 0 , 32,
20404 0xfc0007ff, 0xa00007c5, 0 , 0,
20405 CP1_ }, /* CMP.condn.S~*(31) */
20409 NMD::Pool NMD::CMP_condn_D[32] = {
20410 { instruction , 0 , 0 , 32,
20411 0xfc0007ff, 0xa0000015, &NMD::CMP_AF_D , 0,
20412 CP1_ }, /* CMP.AF.D */
20413 { instruction , 0 , 0 , 32,
20414 0xfc0007ff, 0xa0000055, &NMD::CMP_UN_D , 0,
20415 CP1_ }, /* CMP.UN.D */
20416 { instruction , 0 , 0 , 32,
20417 0xfc0007ff, 0xa0000095, &NMD::CMP_EQ_D , 0,
20418 CP1_ }, /* CMP.EQ.D */
20419 { instruction , 0 , 0 , 32,
20420 0xfc0007ff, 0xa00000d5, &NMD::CMP_UEQ_D , 0,
20421 CP1_ }, /* CMP.UEQ.D */
20422 { instruction , 0 , 0 , 32,
20423 0xfc0007ff, 0xa0000115, &NMD::CMP_LT_D , 0,
20424 CP1_ }, /* CMP.LT.D */
20425 { instruction , 0 , 0 , 32,
20426 0xfc0007ff, 0xa0000155, &NMD::CMP_ULT_D , 0,
20427 CP1_ }, /* CMP.ULT.D */
20428 { instruction , 0 , 0 , 32,
20429 0xfc0007ff, 0xa0000195, &NMD::CMP_LE_D , 0,
20430 CP1_ }, /* CMP.LE.D */
20431 { instruction , 0 , 0 , 32,
20432 0xfc0007ff, 0xa00001d5, &NMD::CMP_ULE_D , 0,
20433 CP1_ }, /* CMP.ULE.D */
20434 { instruction , 0 , 0 , 32,
20435 0xfc0007ff, 0xa0000215, &NMD::CMP_SAF_D , 0,
20436 CP1_ }, /* CMP.SAF.D */
20437 { instruction , 0 , 0 , 32,
20438 0xfc0007ff, 0xa0000255, &NMD::CMP_SUN_D , 0,
20439 CP1_ }, /* CMP.SUN.D */
20440 { instruction , 0 , 0 , 32,
20441 0xfc0007ff, 0xa0000295, &NMD::CMP_SEQ_D , 0,
20442 CP1_ }, /* CMP.SEQ.D */
20443 { instruction , 0 , 0 , 32,
20444 0xfc0007ff, 0xa00002d5, &NMD::CMP_SUEQ_D , 0,
20445 CP1_ }, /* CMP.SUEQ.D */
20446 { instruction , 0 , 0 , 32,
20447 0xfc0007ff, 0xa0000315, &NMD::CMP_SLT_D , 0,
20448 CP1_ }, /* CMP.SLT.D */
20449 { instruction , 0 , 0 , 32,
20450 0xfc0007ff, 0xa0000355, &NMD::CMP_SULT_D , 0,
20451 CP1_ }, /* CMP.SULT.D */
20452 { instruction , 0 , 0 , 32,
20453 0xfc0007ff, 0xa0000395, &NMD::CMP_SLE_D , 0,
20454 CP1_ }, /* CMP.SLE.D */
20455 { instruction , 0 , 0 , 32,
20456 0xfc0007ff, 0xa00003d5, &NMD::CMP_SULE_D , 0,
20457 CP1_ }, /* CMP.SULE.D */
20458 { reserved_block , 0 , 0 , 32,
20459 0xfc0007ff, 0xa0000415, 0 , 0,
20460 CP1_ }, /* CMP.condn.D~*(16) */
20461 { instruction , 0 , 0 , 32,
20462 0xfc0007ff, 0xa0000455, &NMD::CMP_OR_D , 0,
20463 CP1_ }, /* CMP.OR.D */
20464 { instruction , 0 , 0 , 32,
20465 0xfc0007ff, 0xa0000495, &NMD::CMP_UNE_D , 0,
20466 CP1_ }, /* CMP.UNE.D */
20467 { instruction , 0 , 0 , 32,
20468 0xfc0007ff, 0xa00004d5, &NMD::CMP_NE_D , 0,
20469 CP1_ }, /* CMP.NE.D */
20470 { reserved_block , 0 , 0 , 32,
20471 0xfc0007ff, 0xa0000515, 0 , 0,
20472 CP1_ }, /* CMP.condn.D~*(20) */
20473 { reserved_block , 0 , 0 , 32,
20474 0xfc0007ff, 0xa0000555, 0 , 0,
20475 CP1_ }, /* CMP.condn.D~*(21) */
20476 { reserved_block , 0 , 0 , 32,
20477 0xfc0007ff, 0xa0000595, 0 , 0,
20478 CP1_ }, /* CMP.condn.D~*(22) */
20479 { reserved_block , 0 , 0 , 32,
20480 0xfc0007ff, 0xa00005d5, 0 , 0,
20481 CP1_ }, /* CMP.condn.D~*(23) */
20482 { reserved_block , 0 , 0 , 32,
20483 0xfc0007ff, 0xa0000615, 0 , 0,
20484 CP1_ }, /* CMP.condn.D~*(24) */
20485 { instruction , 0 , 0 , 32,
20486 0xfc0007ff, 0xa0000655, &NMD::CMP_SOR_D , 0,
20487 CP1_ }, /* CMP.SOR.D */
20488 { instruction , 0 , 0 , 32,
20489 0xfc0007ff, 0xa0000695, &NMD::CMP_SUNE_D , 0,
20490 CP1_ }, /* CMP.SUNE.D */
20491 { instruction , 0 , 0 , 32,
20492 0xfc0007ff, 0xa00006d5, &NMD::CMP_SNE_D , 0,
20493 CP1_ }, /* CMP.SNE.D */
20494 { reserved_block , 0 , 0 , 32,
20495 0xfc0007ff, 0xa0000715, 0 , 0,
20496 CP1_ }, /* CMP.condn.D~*(28) */
20497 { reserved_block , 0 , 0 , 32,
20498 0xfc0007ff, 0xa0000755, 0 , 0,
20499 CP1_ }, /* CMP.condn.D~*(29) */
20500 { reserved_block , 0 , 0 , 32,
20501 0xfc0007ff, 0xa0000795, 0 , 0,
20502 CP1_ }, /* CMP.condn.D~*(30) */
20503 { reserved_block , 0 , 0 , 32,
20504 0xfc0007ff, 0xa00007d5, 0 , 0,
20505 CP1_ }, /* CMP.condn.D~*(31) */
20509 NMD::Pool NMD::POOL32F_5[8] = {
20510 { pool , CMP_condn_S , 32 , 32,
20511 0xfc00003f, 0xa0000005, 0 , 0,
20512 CP1_ }, /* CMP.condn.S */
20513 { reserved_block , 0 , 0 , 32,
20514 0xfc00003f, 0xa000000d, 0 , 0,
20515 CP1_ }, /* POOL32F_5~*(1) */
20516 { pool , CMP_condn_D , 32 , 32,
20517 0xfc00003f, 0xa0000015, 0 , 0,
20518 CP1_ }, /* CMP.condn.D */
20519 { reserved_block , 0 , 0 , 32,
20520 0xfc00003f, 0xa000001d, 0 , 0,
20521 CP1_ }, /* POOL32F_5~*(3) */
20522 { reserved_block , 0 , 0 , 32,
20523 0xfc00003f, 0xa0000025, 0 , 0,
20524 CP1_ }, /* POOL32F_5~*(4) */
20525 { reserved_block , 0 , 0 , 32,
20526 0xfc00003f, 0xa000002d, 0 , 0,
20527 CP1_ }, /* POOL32F_5~*(5) */
20528 { reserved_block , 0 , 0 , 32,
20529 0xfc00003f, 0xa0000035, 0 , 0,
20530 CP1_ }, /* POOL32F_5~*(6) */
20531 { reserved_block , 0 , 0 , 32,
20532 0xfc00003f, 0xa000003d, 0 , 0,
20533 CP1_ }, /* POOL32F_5~*(7) */
20537 NMD::Pool NMD::POOL32F[8] = {
20538 { pool , POOL32F_0 , 64 , 32,
20539 0xfc000007, 0xa0000000, 0 , 0,
20540 CP1_ }, /* POOL32F_0 */
20541 { reserved_block , 0 , 0 , 32,
20542 0xfc000007, 0xa0000001, 0 , 0,
20543 CP1_ }, /* POOL32F~*(1) */
20544 { reserved_block , 0 , 0 , 32,
20545 0xfc000007, 0xa0000002, 0 , 0,
20546 CP1_ }, /* POOL32F~*(2) */
20547 { pool , POOL32F_3 , 8 , 32,
20548 0xfc000007, 0xa0000003, 0 , 0,
20549 CP1_ }, /* POOL32F_3 */
20550 { reserved_block , 0 , 0 , 32,
20551 0xfc000007, 0xa0000004, 0 , 0,
20552 CP1_ }, /* POOL32F~*(4) */
20553 { pool , POOL32F_5 , 8 , 32,
20554 0xfc000007, 0xa0000005, 0 , 0,
20555 CP1_ }, /* POOL32F_5 */
20556 { reserved_block , 0 , 0 , 32,
20557 0xfc000007, 0xa0000006, 0 , 0,
20558 CP1_ }, /* POOL32F~*(6) */
20559 { reserved_block , 0 , 0 , 32,
20560 0xfc000007, 0xa0000007, 0 , 0,
20561 CP1_ }, /* POOL32F~*(7) */
20565 NMD::Pool NMD::POOL32S_0[64] = {
20566 { reserved_block , 0 , 0 , 32,
20567 0xfc0001ff, 0xc0000000, 0 , 0,
20568 0x0 }, /* POOL32S_0~*(0) */
20569 { instruction , 0 , 0 , 32,
20570 0xfc0001ff, 0xc0000008, &NMD::DLSA , 0,
20571 MIPS64_ }, /* DLSA */
20572 { instruction , 0 , 0 , 32,
20573 0xfc0001ff, 0xc0000010, &NMD::DSLLV , 0,
20574 MIPS64_ }, /* DSLLV */
20575 { instruction , 0 , 0 , 32,
20576 0xfc0001ff, 0xc0000018, &NMD::DMUL , 0,
20577 MIPS64_ }, /* DMUL */
20578 { reserved_block , 0 , 0 , 32,
20579 0xfc0001ff, 0xc0000020, 0 , 0,
20580 0x0 }, /* POOL32S_0~*(4) */
20581 { reserved_block , 0 , 0 , 32,
20582 0xfc0001ff, 0xc0000028, 0 , 0,
20583 0x0 }, /* POOL32S_0~*(5) */
20584 { reserved_block , 0 , 0 , 32,
20585 0xfc0001ff, 0xc0000030, 0 , 0,
20586 0x0 }, /* POOL32S_0~*(6) */
20587 { reserved_block , 0 , 0 , 32,
20588 0xfc0001ff, 0xc0000038, 0 , 0,
20589 0x0 }, /* POOL32S_0~*(7) */
20590 { reserved_block , 0 , 0 , 32,
20591 0xfc0001ff, 0xc0000040, 0 , 0,
20592 0x0 }, /* POOL32S_0~*(8) */
20593 { reserved_block , 0 , 0 , 32,
20594 0xfc0001ff, 0xc0000048, 0 , 0,
20595 0x0 }, /* POOL32S_0~*(9) */
20596 { instruction , 0 , 0 , 32,
20597 0xfc0001ff, 0xc0000050, &NMD::DSRLV , 0,
20598 MIPS64_ }, /* DSRLV */
20599 { instruction , 0 , 0 , 32,
20600 0xfc0001ff, 0xc0000058, &NMD::DMUH , 0,
20601 MIPS64_ }, /* DMUH */
20602 { reserved_block , 0 , 0 , 32,
20603 0xfc0001ff, 0xc0000060, 0 , 0,
20604 0x0 }, /* POOL32S_0~*(12) */
20605 { reserved_block , 0 , 0 , 32,
20606 0xfc0001ff, 0xc0000068, 0 , 0,
20607 0x0 }, /* POOL32S_0~*(13) */
20608 { reserved_block , 0 , 0 , 32,
20609 0xfc0001ff, 0xc0000070, 0 , 0,
20610 0x0 }, /* POOL32S_0~*(14) */
20611 { reserved_block , 0 , 0 , 32,
20612 0xfc0001ff, 0xc0000078, 0 , 0,
20613 0x0 }, /* POOL32S_0~*(15) */
20614 { reserved_block , 0 , 0 , 32,
20615 0xfc0001ff, 0xc0000080, 0 , 0,
20616 0x0 }, /* POOL32S_0~*(16) */
20617 { reserved_block , 0 , 0 , 32,
20618 0xfc0001ff, 0xc0000088, 0 , 0,
20619 0x0 }, /* POOL32S_0~*(17) */
20620 { instruction , 0 , 0 , 32,
20621 0xfc0001ff, 0xc0000090, &NMD::DSRAV , 0,
20622 MIPS64_ }, /* DSRAV */
20623 { instruction , 0 , 0 , 32,
20624 0xfc0001ff, 0xc0000098, &NMD::DMULU , 0,
20625 MIPS64_ }, /* DMULU */
20626 { reserved_block , 0 , 0 , 32,
20627 0xfc0001ff, 0xc00000a0, 0 , 0,
20628 0x0 }, /* POOL32S_0~*(20) */
20629 { reserved_block , 0 , 0 , 32,
20630 0xfc0001ff, 0xc00000a8, 0 , 0,
20631 0x0 }, /* POOL32S_0~*(21) */
20632 { reserved_block , 0 , 0 , 32,
20633 0xfc0001ff, 0xc00000b0, 0 , 0,
20634 0x0 }, /* POOL32S_0~*(22) */
20635 { reserved_block , 0 , 0 , 32,
20636 0xfc0001ff, 0xc00000b8, 0 , 0,
20637 0x0 }, /* POOL32S_0~*(23) */
20638 { reserved_block , 0 , 0 , 32,
20639 0xfc0001ff, 0xc00000c0, 0 , 0,
20640 0x0 }, /* POOL32S_0~*(24) */
20641 { reserved_block , 0 , 0 , 32,
20642 0xfc0001ff, 0xc00000c8, 0 , 0,
20643 0x0 }, /* POOL32S_0~*(25) */
20644 { instruction , 0 , 0 , 32,
20645 0xfc0001ff, 0xc00000d0, &NMD::DROTRV , 0,
20646 MIPS64_ }, /* DROTRV */
20647 { instruction , 0 , 0 , 32,
20648 0xfc0001ff, 0xc00000d8, &NMD::DMUHU , 0,
20649 MIPS64_ }, /* DMUHU */
20650 { reserved_block , 0 , 0 , 32,
20651 0xfc0001ff, 0xc00000e0, 0 , 0,
20652 0x0 }, /* POOL32S_0~*(28) */
20653 { reserved_block , 0 , 0 , 32,
20654 0xfc0001ff, 0xc00000e8, 0 , 0,
20655 0x0 }, /* POOL32S_0~*(29) */
20656 { reserved_block , 0 , 0 , 32,
20657 0xfc0001ff, 0xc00000f0, 0 , 0,
20658 0x0 }, /* POOL32S_0~*(30) */
20659 { reserved_block , 0 , 0 , 32,
20660 0xfc0001ff, 0xc00000f8, 0 , 0,
20661 0x0 }, /* POOL32S_0~*(31) */
20662 { reserved_block , 0 , 0 , 32,
20663 0xfc0001ff, 0xc0000100, 0 , 0,
20664 0x0 }, /* POOL32S_0~*(32) */
20665 { reserved_block , 0 , 0 , 32,
20666 0xfc0001ff, 0xc0000108, 0 , 0,
20667 0x0 }, /* POOL32S_0~*(33) */
20668 { instruction , 0 , 0 , 32,
20669 0xfc0001ff, 0xc0000110, &NMD::DADD , 0,
20670 MIPS64_ }, /* DADD */
20671 { instruction , 0 , 0 , 32,
20672 0xfc0001ff, 0xc0000118, &NMD::DDIV , 0,
20673 MIPS64_ }, /* DDIV */
20674 { reserved_block , 0 , 0 , 32,
20675 0xfc0001ff, 0xc0000120, 0 , 0,
20676 0x0 }, /* POOL32S_0~*(36) */
20677 { reserved_block , 0 , 0 , 32,
20678 0xfc0001ff, 0xc0000128, 0 , 0,
20679 0x0 }, /* POOL32S_0~*(37) */
20680 { reserved_block , 0 , 0 , 32,
20681 0xfc0001ff, 0xc0000130, 0 , 0,
20682 0x0 }, /* POOL32S_0~*(38) */
20683 { reserved_block , 0 , 0 , 32,
20684 0xfc0001ff, 0xc0000138, 0 , 0,
20685 0x0 }, /* POOL32S_0~*(39) */
20686 { reserved_block , 0 , 0 , 32,
20687 0xfc0001ff, 0xc0000140, 0 , 0,
20688 0x0 }, /* POOL32S_0~*(40) */
20689 { reserved_block , 0 , 0 , 32,
20690 0xfc0001ff, 0xc0000148, 0 , 0,
20691 0x0 }, /* POOL32S_0~*(41) */
20692 { instruction , 0 , 0 , 32,
20693 0xfc0001ff, 0xc0000150, &NMD::DADDU , 0,
20694 MIPS64_ }, /* DADDU */
20695 { instruction , 0 , 0 , 32,
20696 0xfc0001ff, 0xc0000158, &NMD::DMOD , 0,
20697 MIPS64_ }, /* DMOD */
20698 { reserved_block , 0 , 0 , 32,
20699 0xfc0001ff, 0xc0000160, 0 , 0,
20700 0x0 }, /* POOL32S_0~*(44) */
20701 { reserved_block , 0 , 0 , 32,
20702 0xfc0001ff, 0xc0000168, 0 , 0,
20703 0x0 }, /* POOL32S_0~*(45) */
20704 { reserved_block , 0 , 0 , 32,
20705 0xfc0001ff, 0xc0000170, 0 , 0,
20706 0x0 }, /* POOL32S_0~*(46) */
20707 { reserved_block , 0 , 0 , 32,
20708 0xfc0001ff, 0xc0000178, 0 , 0,
20709 0x0 }, /* POOL32S_0~*(47) */
20710 { reserved_block , 0 , 0 , 32,
20711 0xfc0001ff, 0xc0000180, 0 , 0,
20712 0x0 }, /* POOL32S_0~*(48) */
20713 { reserved_block , 0 , 0 , 32,
20714 0xfc0001ff, 0xc0000188, 0 , 0,
20715 0x0 }, /* POOL32S_0~*(49) */
20716 { instruction , 0 , 0 , 32,
20717 0xfc0001ff, 0xc0000190, &NMD::DSUB , 0,
20718 MIPS64_ }, /* DSUB */
20719 { instruction , 0 , 0 , 32,
20720 0xfc0001ff, 0xc0000198, &NMD::DDIVU , 0,
20721 MIPS64_ }, /* DDIVU */
20722 { reserved_block , 0 , 0 , 32,
20723 0xfc0001ff, 0xc00001a0, 0 , 0,
20724 0x0 }, /* POOL32S_0~*(52) */
20725 { reserved_block , 0 , 0 , 32,
20726 0xfc0001ff, 0xc00001a8, 0 , 0,
20727 0x0 }, /* POOL32S_0~*(53) */
20728 { reserved_block , 0 , 0 , 32,
20729 0xfc0001ff, 0xc00001b0, 0 , 0,
20730 0x0 }, /* POOL32S_0~*(54) */
20731 { reserved_block , 0 , 0 , 32,
20732 0xfc0001ff, 0xc00001b8, 0 , 0,
20733 0x0 }, /* POOL32S_0~*(55) */
20734 { reserved_block , 0 , 0 , 32,
20735 0xfc0001ff, 0xc00001c0, 0 , 0,
20736 0x0 }, /* POOL32S_0~*(56) */
20737 { reserved_block , 0 , 0 , 32,
20738 0xfc0001ff, 0xc00001c8, 0 , 0,
20739 0x0 }, /* POOL32S_0~*(57) */
20740 { instruction , 0 , 0 , 32,
20741 0xfc0001ff, 0xc00001d0, &NMD::DSUBU , 0,
20742 MIPS64_ }, /* DSUBU */
20743 { instruction , 0 , 0 , 32,
20744 0xfc0001ff, 0xc00001d8, &NMD::DMODU , 0,
20745 MIPS64_ }, /* DMODU */
20746 { reserved_block , 0 , 0 , 32,
20747 0xfc0001ff, 0xc00001e0, 0 , 0,
20748 0x0 }, /* POOL32S_0~*(60) */
20749 { reserved_block , 0 , 0 , 32,
20750 0xfc0001ff, 0xc00001e8, 0 , 0,
20751 0x0 }, /* POOL32S_0~*(61) */
20752 { reserved_block , 0 , 0 , 32,
20753 0xfc0001ff, 0xc00001f0, 0 , 0,
20754 0x0 }, /* POOL32S_0~*(62) */
20755 { reserved_block , 0 , 0 , 32,
20756 0xfc0001ff, 0xc00001f8, 0 , 0,
20757 0x0 }, /* POOL32S_0~*(63) */
20761 NMD::Pool NMD::POOL32Sxf_4[128] = {
20762 { reserved_block , 0 , 0 , 32,
20763 0xfc00ffff, 0xc000013c, 0 , 0,
20764 0x0 }, /* POOL32Sxf_4~*(0) */
20765 { reserved_block , 0 , 0 , 32,
20766 0xfc00ffff, 0xc000033c, 0 , 0,
20767 0x0 }, /* POOL32Sxf_4~*(1) */
20768 { reserved_block , 0 , 0 , 32,
20769 0xfc00ffff, 0xc000053c, 0 , 0,
20770 0x0 }, /* POOL32Sxf_4~*(2) */
20771 { reserved_block , 0 , 0 , 32,
20772 0xfc00ffff, 0xc000073c, 0 , 0,
20773 0x0 }, /* POOL32Sxf_4~*(3) */
20774 { reserved_block , 0 , 0 , 32,
20775 0xfc00ffff, 0xc000093c, 0 , 0,
20776 0x0 }, /* POOL32Sxf_4~*(4) */
20777 { reserved_block , 0 , 0 , 32,
20778 0xfc00ffff, 0xc0000b3c, 0 , 0,
20779 0x0 }, /* POOL32Sxf_4~*(5) */
20780 { reserved_block , 0 , 0 , 32,
20781 0xfc00ffff, 0xc0000d3c, 0 , 0,
20782 0x0 }, /* POOL32Sxf_4~*(6) */
20783 { reserved_block , 0 , 0 , 32,
20784 0xfc00ffff, 0xc0000f3c, 0 , 0,
20785 0x0 }, /* POOL32Sxf_4~*(7) */
20786 { reserved_block , 0 , 0 , 32,
20787 0xfc00ffff, 0xc000113c, 0 , 0,
20788 0x0 }, /* POOL32Sxf_4~*(8) */
20789 { reserved_block , 0 , 0 , 32,
20790 0xfc00ffff, 0xc000133c, 0 , 0,
20791 0x0 }, /* POOL32Sxf_4~*(9) */
20792 { reserved_block , 0 , 0 , 32,
20793 0xfc00ffff, 0xc000153c, 0 , 0,
20794 0x0 }, /* POOL32Sxf_4~*(10) */
20795 { reserved_block , 0 , 0 , 32,
20796 0xfc00ffff, 0xc000173c, 0 , 0,
20797 0x0 }, /* POOL32Sxf_4~*(11) */
20798 { reserved_block , 0 , 0 , 32,
20799 0xfc00ffff, 0xc000193c, 0 , 0,
20800 0x0 }, /* POOL32Sxf_4~*(12) */
20801 { reserved_block , 0 , 0 , 32,
20802 0xfc00ffff, 0xc0001b3c, 0 , 0,
20803 0x0 }, /* POOL32Sxf_4~*(13) */
20804 { reserved_block , 0 , 0 , 32,
20805 0xfc00ffff, 0xc0001d3c, 0 , 0,
20806 0x0 }, /* POOL32Sxf_4~*(14) */
20807 { reserved_block , 0 , 0 , 32,
20808 0xfc00ffff, 0xc0001f3c, 0 , 0,
20809 0x0 }, /* POOL32Sxf_4~*(15) */
20810 { reserved_block , 0 , 0 , 32,
20811 0xfc00ffff, 0xc000213c, 0 , 0,
20812 0x0 }, /* POOL32Sxf_4~*(16) */
20813 { reserved_block , 0 , 0 , 32,
20814 0xfc00ffff, 0xc000233c, 0 , 0,
20815 0x0 }, /* POOL32Sxf_4~*(17) */
20816 { reserved_block , 0 , 0 , 32,
20817 0xfc00ffff, 0xc000253c, 0 , 0,
20818 0x0 }, /* POOL32Sxf_4~*(18) */
20819 { reserved_block , 0 , 0 , 32,
20820 0xfc00ffff, 0xc000273c, 0 , 0,
20821 0x0 }, /* POOL32Sxf_4~*(19) */
20822 { reserved_block , 0 , 0 , 32,
20823 0xfc00ffff, 0xc000293c, 0 , 0,
20824 0x0 }, /* POOL32Sxf_4~*(20) */
20825 { reserved_block , 0 , 0 , 32,
20826 0xfc00ffff, 0xc0002b3c, 0 , 0,
20827 0x0 }, /* POOL32Sxf_4~*(21) */
20828 { reserved_block , 0 , 0 , 32,
20829 0xfc00ffff, 0xc0002d3c, 0 , 0,
20830 0x0 }, /* POOL32Sxf_4~*(22) */
20831 { reserved_block , 0 , 0 , 32,
20832 0xfc00ffff, 0xc0002f3c, 0 , 0,
20833 0x0 }, /* POOL32Sxf_4~*(23) */
20834 { reserved_block , 0 , 0 , 32,
20835 0xfc00ffff, 0xc000313c, 0 , 0,
20836 0x0 }, /* POOL32Sxf_4~*(24) */
20837 { reserved_block , 0 , 0 , 32,
20838 0xfc00ffff, 0xc000333c, 0 , 0,
20839 0x0 }, /* POOL32Sxf_4~*(25) */
20840 { reserved_block , 0 , 0 , 32,
20841 0xfc00ffff, 0xc000353c, 0 , 0,
20842 0x0 }, /* POOL32Sxf_4~*(26) */
20843 { reserved_block , 0 , 0 , 32,
20844 0xfc00ffff, 0xc000373c, 0 , 0,
20845 0x0 }, /* POOL32Sxf_4~*(27) */
20846 { reserved_block , 0 , 0 , 32,
20847 0xfc00ffff, 0xc000393c, 0 , 0,
20848 0x0 }, /* POOL32Sxf_4~*(28) */
20849 { reserved_block , 0 , 0 , 32,
20850 0xfc00ffff, 0xc0003b3c, 0 , 0,
20851 0x0 }, /* POOL32Sxf_4~*(29) */
20852 { reserved_block , 0 , 0 , 32,
20853 0xfc00ffff, 0xc0003d3c, 0 , 0,
20854 0x0 }, /* POOL32Sxf_4~*(30) */
20855 { reserved_block , 0 , 0 , 32,
20856 0xfc00ffff, 0xc0003f3c, 0 , 0,
20857 0x0 }, /* POOL32Sxf_4~*(31) */
20858 { reserved_block , 0 , 0 , 32,
20859 0xfc00ffff, 0xc000413c, 0 , 0,
20860 0x0 }, /* POOL32Sxf_4~*(32) */
20861 { reserved_block , 0 , 0 , 32,
20862 0xfc00ffff, 0xc000433c, 0 , 0,
20863 0x0 }, /* POOL32Sxf_4~*(33) */
20864 { reserved_block , 0 , 0 , 32,
20865 0xfc00ffff, 0xc000453c, 0 , 0,
20866 0x0 }, /* POOL32Sxf_4~*(34) */
20867 { reserved_block , 0 , 0 , 32,
20868 0xfc00ffff, 0xc000473c, 0 , 0,
20869 0x0 }, /* POOL32Sxf_4~*(35) */
20870 { reserved_block , 0 , 0 , 32,
20871 0xfc00ffff, 0xc000493c, 0 , 0,
20872 0x0 }, /* POOL32Sxf_4~*(36) */
20873 { instruction , 0 , 0 , 32,
20874 0xfc00ffff, 0xc0004b3c, &NMD::DCLO , 0,
20875 MIPS64_ }, /* DCLO */
20876 { reserved_block , 0 , 0 , 32,
20877 0xfc00ffff, 0xc0004d3c, 0 , 0,
20878 0x0 }, /* POOL32Sxf_4~*(38) */
20879 { reserved_block , 0 , 0 , 32,
20880 0xfc00ffff, 0xc0004f3c, 0 , 0,
20881 0x0 }, /* POOL32Sxf_4~*(39) */
20882 { reserved_block , 0 , 0 , 32,
20883 0xfc00ffff, 0xc000513c, 0 , 0,
20884 0x0 }, /* POOL32Sxf_4~*(40) */
20885 { reserved_block , 0 , 0 , 32,
20886 0xfc00ffff, 0xc000533c, 0 , 0,
20887 0x0 }, /* POOL32Sxf_4~*(41) */
20888 { reserved_block , 0 , 0 , 32,
20889 0xfc00ffff, 0xc000553c, 0 , 0,
20890 0x0 }, /* POOL32Sxf_4~*(42) */
20891 { reserved_block , 0 , 0 , 32,
20892 0xfc00ffff, 0xc000573c, 0 , 0,
20893 0x0 }, /* POOL32Sxf_4~*(43) */
20894 { reserved_block , 0 , 0 , 32,
20895 0xfc00ffff, 0xc000593c, 0 , 0,
20896 0x0 }, /* POOL32Sxf_4~*(44) */
20897 { instruction , 0 , 0 , 32,
20898 0xfc00ffff, 0xc0005b3c, &NMD::DCLZ , 0,
20899 MIPS64_ }, /* DCLZ */
20900 { reserved_block , 0 , 0 , 32,
20901 0xfc00ffff, 0xc0005d3c, 0 , 0,
20902 0x0 }, /* POOL32Sxf_4~*(46) */
20903 { reserved_block , 0 , 0 , 32,
20904 0xfc00ffff, 0xc0005f3c, 0 , 0,
20905 0x0 }, /* POOL32Sxf_4~*(47) */
20906 { reserved_block , 0 , 0 , 32,
20907 0xfc00ffff, 0xc000613c, 0 , 0,
20908 0x0 }, /* POOL32Sxf_4~*(48) */
20909 { reserved_block , 0 , 0 , 32,
20910 0xfc00ffff, 0xc000633c, 0 , 0,
20911 0x0 }, /* POOL32Sxf_4~*(49) */
20912 { reserved_block , 0 , 0 , 32,
20913 0xfc00ffff, 0xc000653c, 0 , 0,
20914 0x0 }, /* POOL32Sxf_4~*(50) */
20915 { reserved_block , 0 , 0 , 32,
20916 0xfc00ffff, 0xc000673c, 0 , 0,
20917 0x0 }, /* POOL32Sxf_4~*(51) */
20918 { reserved_block , 0 , 0 , 32,
20919 0xfc00ffff, 0xc000693c, 0 , 0,
20920 0x0 }, /* POOL32Sxf_4~*(52) */
20921 { reserved_block , 0 , 0 , 32,
20922 0xfc00ffff, 0xc0006b3c, 0 , 0,
20923 0x0 }, /* POOL32Sxf_4~*(53) */
20924 { reserved_block , 0 , 0 , 32,
20925 0xfc00ffff, 0xc0006d3c, 0 , 0,
20926 0x0 }, /* POOL32Sxf_4~*(54) */
20927 { reserved_block , 0 , 0 , 32,
20928 0xfc00ffff, 0xc0006f3c, 0 , 0,
20929 0x0 }, /* POOL32Sxf_4~*(55) */
20930 { reserved_block , 0 , 0 , 32,
20931 0xfc00ffff, 0xc000713c, 0 , 0,
20932 0x0 }, /* POOL32Sxf_4~*(56) */
20933 { reserved_block , 0 , 0 , 32,
20934 0xfc00ffff, 0xc000733c, 0 , 0,
20935 0x0 }, /* POOL32Sxf_4~*(57) */
20936 { reserved_block , 0 , 0 , 32,
20937 0xfc00ffff, 0xc000753c, 0 , 0,
20938 0x0 }, /* POOL32Sxf_4~*(58) */
20939 { reserved_block , 0 , 0 , 32,
20940 0xfc00ffff, 0xc000773c, 0 , 0,
20941 0x0 }, /* POOL32Sxf_4~*(59) */
20942 { reserved_block , 0 , 0 , 32,
20943 0xfc00ffff, 0xc000793c, 0 , 0,
20944 0x0 }, /* POOL32Sxf_4~*(60) */
20945 { reserved_block , 0 , 0 , 32,
20946 0xfc00ffff, 0xc0007b3c, 0 , 0,
20947 0x0 }, /* POOL32Sxf_4~*(61) */
20948 { reserved_block , 0 , 0 , 32,
20949 0xfc00ffff, 0xc0007d3c, 0 , 0,
20950 0x0 }, /* POOL32Sxf_4~*(62) */
20951 { reserved_block , 0 , 0 , 32,
20952 0xfc00ffff, 0xc0007f3c, 0 , 0,
20953 0x0 }, /* POOL32Sxf_4~*(63) */
20954 { reserved_block , 0 , 0 , 32,
20955 0xfc00ffff, 0xc000813c, 0 , 0,
20956 0x0 }, /* POOL32Sxf_4~*(64) */
20957 { reserved_block , 0 , 0 , 32,
20958 0xfc00ffff, 0xc000833c, 0 , 0,
20959 0x0 }, /* POOL32Sxf_4~*(65) */
20960 { reserved_block , 0 , 0 , 32,
20961 0xfc00ffff, 0xc000853c, 0 , 0,
20962 0x0 }, /* POOL32Sxf_4~*(66) */
20963 { reserved_block , 0 , 0 , 32,
20964 0xfc00ffff, 0xc000873c, 0 , 0,
20965 0x0 }, /* POOL32Sxf_4~*(67) */
20966 { reserved_block , 0 , 0 , 32,
20967 0xfc00ffff, 0xc000893c, 0 , 0,
20968 0x0 }, /* POOL32Sxf_4~*(68) */
20969 { reserved_block , 0 , 0 , 32,
20970 0xfc00ffff, 0xc0008b3c, 0 , 0,
20971 0x0 }, /* POOL32Sxf_4~*(69) */
20972 { reserved_block , 0 , 0 , 32,
20973 0xfc00ffff, 0xc0008d3c, 0 , 0,
20974 0x0 }, /* POOL32Sxf_4~*(70) */
20975 { reserved_block , 0 , 0 , 32,
20976 0xfc00ffff, 0xc0008f3c, 0 , 0,
20977 0x0 }, /* POOL32Sxf_4~*(71) */
20978 { reserved_block , 0 , 0 , 32,
20979 0xfc00ffff, 0xc000913c, 0 , 0,
20980 0x0 }, /* POOL32Sxf_4~*(72) */
20981 { reserved_block , 0 , 0 , 32,
20982 0xfc00ffff, 0xc000933c, 0 , 0,
20983 0x0 }, /* POOL32Sxf_4~*(73) */
20984 { reserved_block , 0 , 0 , 32,
20985 0xfc00ffff, 0xc000953c, 0 , 0,
20986 0x0 }, /* POOL32Sxf_4~*(74) */
20987 { reserved_block , 0 , 0 , 32,
20988 0xfc00ffff, 0xc000973c, 0 , 0,
20989 0x0 }, /* POOL32Sxf_4~*(75) */
20990 { reserved_block , 0 , 0 , 32,
20991 0xfc00ffff, 0xc000993c, 0 , 0,
20992 0x0 }, /* POOL32Sxf_4~*(76) */
20993 { reserved_block , 0 , 0 , 32,
20994 0xfc00ffff, 0xc0009b3c, 0 , 0,
20995 0x0 }, /* POOL32Sxf_4~*(77) */
20996 { reserved_block , 0 , 0 , 32,
20997 0xfc00ffff, 0xc0009d3c, 0 , 0,
20998 0x0 }, /* POOL32Sxf_4~*(78) */
20999 { reserved_block , 0 , 0 , 32,
21000 0xfc00ffff, 0xc0009f3c, 0 , 0,
21001 0x0 }, /* POOL32Sxf_4~*(79) */
21002 { reserved_block , 0 , 0 , 32,
21003 0xfc00ffff, 0xc000a13c, 0 , 0,
21004 0x0 }, /* POOL32Sxf_4~*(80) */
21005 { reserved_block , 0 , 0 , 32,
21006 0xfc00ffff, 0xc000a33c, 0 , 0,
21007 0x0 }, /* POOL32Sxf_4~*(81) */
21008 { reserved_block , 0 , 0 , 32,
21009 0xfc00ffff, 0xc000a53c, 0 , 0,
21010 0x0 }, /* POOL32Sxf_4~*(82) */
21011 { reserved_block , 0 , 0 , 32,
21012 0xfc00ffff, 0xc000a73c, 0 , 0,
21013 0x0 }, /* POOL32Sxf_4~*(83) */
21014 { reserved_block , 0 , 0 , 32,
21015 0xfc00ffff, 0xc000a93c, 0 , 0,
21016 0x0 }, /* POOL32Sxf_4~*(84) */
21017 { reserved_block , 0 , 0 , 32,
21018 0xfc00ffff, 0xc000ab3c, 0 , 0,
21019 0x0 }, /* POOL32Sxf_4~*(85) */
21020 { reserved_block , 0 , 0 , 32,
21021 0xfc00ffff, 0xc000ad3c, 0 , 0,
21022 0x0 }, /* POOL32Sxf_4~*(86) */
21023 { reserved_block , 0 , 0 , 32,
21024 0xfc00ffff, 0xc000af3c, 0 , 0,
21025 0x0 }, /* POOL32Sxf_4~*(87) */
21026 { reserved_block , 0 , 0 , 32,
21027 0xfc00ffff, 0xc000b13c, 0 , 0,
21028 0x0 }, /* POOL32Sxf_4~*(88) */
21029 { reserved_block , 0 , 0 , 32,
21030 0xfc00ffff, 0xc000b33c, 0 , 0,
21031 0x0 }, /* POOL32Sxf_4~*(89) */
21032 { reserved_block , 0 , 0 , 32,
21033 0xfc00ffff, 0xc000b53c, 0 , 0,
21034 0x0 }, /* POOL32Sxf_4~*(90) */
21035 { reserved_block , 0 , 0 , 32,
21036 0xfc00ffff, 0xc000b73c, 0 , 0,
21037 0x0 }, /* POOL32Sxf_4~*(91) */
21038 { reserved_block , 0 , 0 , 32,
21039 0xfc00ffff, 0xc000b93c, 0 , 0,
21040 0x0 }, /* POOL32Sxf_4~*(92) */
21041 { reserved_block , 0 , 0 , 32,
21042 0xfc00ffff, 0xc000bb3c, 0 , 0,
21043 0x0 }, /* POOL32Sxf_4~*(93) */
21044 { reserved_block , 0 , 0 , 32,
21045 0xfc00ffff, 0xc000bd3c, 0 , 0,
21046 0x0 }, /* POOL32Sxf_4~*(94) */
21047 { reserved_block , 0 , 0 , 32,
21048 0xfc00ffff, 0xc000bf3c, 0 , 0,
21049 0x0 }, /* POOL32Sxf_4~*(95) */
21050 { reserved_block , 0 , 0 , 32,
21051 0xfc00ffff, 0xc000c13c, 0 , 0,
21052 0x0 }, /* POOL32Sxf_4~*(96) */
21053 { reserved_block , 0 , 0 , 32,
21054 0xfc00ffff, 0xc000c33c, 0 , 0,
21055 0x0 }, /* POOL32Sxf_4~*(97) */
21056 { reserved_block , 0 , 0 , 32,
21057 0xfc00ffff, 0xc000c53c, 0 , 0,
21058 0x0 }, /* POOL32Sxf_4~*(98) */
21059 { reserved_block , 0 , 0 , 32,
21060 0xfc00ffff, 0xc000c73c, 0 , 0,
21061 0x0 }, /* POOL32Sxf_4~*(99) */
21062 { reserved_block , 0 , 0 , 32,
21063 0xfc00ffff, 0xc000c93c, 0 , 0,
21064 0x0 }, /* POOL32Sxf_4~*(100) */
21065 { reserved_block , 0 , 0 , 32,
21066 0xfc00ffff, 0xc000cb3c, 0 , 0,
21067 0x0 }, /* POOL32Sxf_4~*(101) */
21068 { reserved_block , 0 , 0 , 32,
21069 0xfc00ffff, 0xc000cd3c, 0 , 0,
21070 0x0 }, /* POOL32Sxf_4~*(102) */
21071 { reserved_block , 0 , 0 , 32,
21072 0xfc00ffff, 0xc000cf3c, 0 , 0,
21073 0x0 }, /* POOL32Sxf_4~*(103) */
21074 { reserved_block , 0 , 0 , 32,
21075 0xfc00ffff, 0xc000d13c, 0 , 0,
21076 0x0 }, /* POOL32Sxf_4~*(104) */
21077 { reserved_block , 0 , 0 , 32,
21078 0xfc00ffff, 0xc000d33c, 0 , 0,
21079 0x0 }, /* POOL32Sxf_4~*(105) */
21080 { reserved_block , 0 , 0 , 32,
21081 0xfc00ffff, 0xc000d53c, 0 , 0,
21082 0x0 }, /* POOL32Sxf_4~*(106) */
21083 { reserved_block , 0 , 0 , 32,
21084 0xfc00ffff, 0xc000d73c, 0 , 0,
21085 0x0 }, /* POOL32Sxf_4~*(107) */
21086 { reserved_block , 0 , 0 , 32,
21087 0xfc00ffff, 0xc000d93c, 0 , 0,
21088 0x0 }, /* POOL32Sxf_4~*(108) */
21089 { reserved_block , 0 , 0 , 32,
21090 0xfc00ffff, 0xc000db3c, 0 , 0,
21091 0x0 }, /* POOL32Sxf_4~*(109) */
21092 { reserved_block , 0 , 0 , 32,
21093 0xfc00ffff, 0xc000dd3c, 0 , 0,
21094 0x0 }, /* POOL32Sxf_4~*(110) */
21095 { reserved_block , 0 , 0 , 32,
21096 0xfc00ffff, 0xc000df3c, 0 , 0,
21097 0x0 }, /* POOL32Sxf_4~*(111) */
21098 { reserved_block , 0 , 0 , 32,
21099 0xfc00ffff, 0xc000e13c, 0 , 0,
21100 0x0 }, /* POOL32Sxf_4~*(112) */
21101 { reserved_block , 0 , 0 , 32,
21102 0xfc00ffff, 0xc000e33c, 0 , 0,
21103 0x0 }, /* POOL32Sxf_4~*(113) */
21104 { reserved_block , 0 , 0 , 32,
21105 0xfc00ffff, 0xc000e53c, 0 , 0,
21106 0x0 }, /* POOL32Sxf_4~*(114) */
21107 { reserved_block , 0 , 0 , 32,
21108 0xfc00ffff, 0xc000e73c, 0 , 0,
21109 0x0 }, /* POOL32Sxf_4~*(115) */
21110 { reserved_block , 0 , 0 , 32,
21111 0xfc00ffff, 0xc000e93c, 0 , 0,
21112 0x0 }, /* POOL32Sxf_4~*(116) */
21113 { reserved_block , 0 , 0 , 32,
21114 0xfc00ffff, 0xc000eb3c, 0 , 0,
21115 0x0 }, /* POOL32Sxf_4~*(117) */
21116 { reserved_block , 0 , 0 , 32,
21117 0xfc00ffff, 0xc000ed3c, 0 , 0,
21118 0x0 }, /* POOL32Sxf_4~*(118) */
21119 { reserved_block , 0 , 0 , 32,
21120 0xfc00ffff, 0xc000ef3c, 0 , 0,
21121 0x0 }, /* POOL32Sxf_4~*(119) */
21122 { reserved_block , 0 , 0 , 32,
21123 0xfc00ffff, 0xc000f13c, 0 , 0,
21124 0x0 }, /* POOL32Sxf_4~*(120) */
21125 { reserved_block , 0 , 0 , 32,
21126 0xfc00ffff, 0xc000f33c, 0 , 0,
21127 0x0 }, /* POOL32Sxf_4~*(121) */
21128 { reserved_block , 0 , 0 , 32,
21129 0xfc00ffff, 0xc000f53c, 0 , 0,
21130 0x0 }, /* POOL32Sxf_4~*(122) */
21131 { reserved_block , 0 , 0 , 32,
21132 0xfc00ffff, 0xc000f73c, 0 , 0,
21133 0x0 }, /* POOL32Sxf_4~*(123) */
21134 { reserved_block , 0 , 0 , 32,
21135 0xfc00ffff, 0xc000f93c, 0 , 0,
21136 0x0 }, /* POOL32Sxf_4~*(124) */
21137 { reserved_block , 0 , 0 , 32,
21138 0xfc00ffff, 0xc000fb3c, 0 , 0,
21139 0x0 }, /* POOL32Sxf_4~*(125) */
21140 { reserved_block , 0 , 0 , 32,
21141 0xfc00ffff, 0xc000fd3c, 0 , 0,
21142 0x0 }, /* POOL32Sxf_4~*(126) */
21143 { reserved_block , 0 , 0 , 32,
21144 0xfc00ffff, 0xc000ff3c, 0 , 0,
21145 0x0 }, /* POOL32Sxf_4~*(127) */
21149 NMD::Pool NMD::POOL32Sxf[8] = {
21150 { reserved_block , 0 , 0 , 32,
21151 0xfc0001ff, 0xc000003c, 0 , 0,
21152 0x0 }, /* POOL32Sxf~*(0) */
21153 { reserved_block , 0 , 0 , 32,
21154 0xfc0001ff, 0xc000007c, 0 , 0,
21155 0x0 }, /* POOL32Sxf~*(1) */
21156 { reserved_block , 0 , 0 , 32,
21157 0xfc0001ff, 0xc00000bc, 0 , 0,
21158 0x0 }, /* POOL32Sxf~*(2) */
21159 { reserved_block , 0 , 0 , 32,
21160 0xfc0001ff, 0xc00000fc, 0 , 0,
21161 0x0 }, /* POOL32Sxf~*(3) */
21162 { pool , POOL32Sxf_4 , 128 , 32,
21163 0xfc0001ff, 0xc000013c, 0 , 0,
21164 0x0 }, /* POOL32Sxf_4 */
21165 { reserved_block , 0 , 0 , 32,
21166 0xfc0001ff, 0xc000017c, 0 , 0,
21167 0x0 }, /* POOL32Sxf~*(5) */
21168 { reserved_block , 0 , 0 , 32,
21169 0xfc0001ff, 0xc00001bc, 0 , 0,
21170 0x0 }, /* POOL32Sxf~*(6) */
21171 { reserved_block , 0 , 0 , 32,
21172 0xfc0001ff, 0xc00001fc, 0 , 0,
21173 0x0 }, /* POOL32Sxf~*(7) */
21177 NMD::Pool NMD::POOL32S_4[8] = {
21178 { instruction , 0 , 0 , 32,
21179 0xfc00003f, 0xc0000004, &NMD::EXTD , 0,
21180 MIPS64_ }, /* EXTD */
21181 { instruction , 0 , 0 , 32,
21182 0xfc00003f, 0xc000000c, &NMD::EXTD32 , 0,
21183 MIPS64_ }, /* EXTD32 */
21184 { reserved_block , 0 , 0 , 32,
21185 0xfc00003f, 0xc0000014, 0 , 0,
21186 0x0 }, /* POOL32S_4~*(2) */
21187 { reserved_block , 0 , 0 , 32,
21188 0xfc00003f, 0xc000001c, 0 , 0,
21189 0x0 }, /* POOL32S_4~*(3) */
21190 { reserved_block , 0 , 0 , 32,
21191 0xfc00003f, 0xc0000024, 0 , 0,
21192 0x0 }, /* POOL32S_4~*(4) */
21193 { reserved_block , 0 , 0 , 32,
21194 0xfc00003f, 0xc000002c, 0 , 0,
21195 0x0 }, /* POOL32S_4~*(5) */
21196 { reserved_block , 0 , 0 , 32,
21197 0xfc00003f, 0xc0000034, 0 , 0,
21198 0x0 }, /* POOL32S_4~*(6) */
21199 { pool , POOL32Sxf , 8 , 32,
21200 0xfc00003f, 0xc000003c, 0 , 0,
21201 0x0 }, /* POOL32Sxf */
21205 NMD::Pool NMD::POOL32S[8] = {
21206 { pool , POOL32S_0 , 64 , 32,
21207 0xfc000007, 0xc0000000, 0 , 0,
21208 0x0 }, /* POOL32S_0 */
21209 { reserved_block , 0 , 0 , 32,
21210 0xfc000007, 0xc0000001, 0 , 0,
21211 0x0 }, /* POOL32S~*(1) */
21212 { reserved_block , 0 , 0 , 32,
21213 0xfc000007, 0xc0000002, 0 , 0,
21214 0x0 }, /* POOL32S~*(2) */
21215 { reserved_block , 0 , 0 , 32,
21216 0xfc000007, 0xc0000003, 0 , 0,
21217 0x0 }, /* POOL32S~*(3) */
21218 { pool , POOL32S_4 , 8 , 32,
21219 0xfc000007, 0xc0000004, 0 , 0,
21220 0x0 }, /* POOL32S_4 */
21221 { reserved_block , 0 , 0 , 32,
21222 0xfc000007, 0xc0000005, 0 , 0,
21223 0x0 }, /* POOL32S~*(5) */
21224 { reserved_block , 0 , 0 , 32,
21225 0xfc000007, 0xc0000006, 0 , 0,
21226 0x0 }, /* POOL32S~*(6) */
21227 { reserved_block , 0 , 0 , 32,
21228 0xfc000007, 0xc0000007, 0 , 0,
21229 0x0 }, /* POOL32S~*(7) */
21233 NMD::Pool NMD::P_LUI[2] = {
21234 { instruction , 0 , 0 , 32,
21235 0xfc000002, 0xe0000000, &NMD::LUI , 0,
21236 0x0 }, /* LUI */
21237 { instruction , 0 , 0 , 32,
21238 0xfc000002, 0xe0000002, &NMD::ALUIPC , 0,
21239 0x0 }, /* ALUIPC */
21243 NMD::Pool NMD::P_GP_LH[2] = {
21244 { instruction , 0 , 0 , 32,
21245 0xfc1c0001, 0x44100000, &NMD::LH_GP_ , 0,
21246 0x0 }, /* LH[GP] */
21247 { instruction , 0 , 0 , 32,
21248 0xfc1c0001, 0x44100001, &NMD::LHU_GP_ , 0,
21249 0x0 }, /* LHU[GP] */
21253 NMD::Pool NMD::P_GP_SH[2] = {
21254 { instruction , 0 , 0 , 32,
21255 0xfc1c0001, 0x44140000, &NMD::SH_GP_ , 0,
21256 0x0 }, /* SH[GP] */
21257 { reserved_block , 0 , 0 , 32,
21258 0xfc1c0001, 0x44140001, 0 , 0,
21259 0x0 }, /* P.GP.SH~*(1) */
21263 NMD::Pool NMD::P_GP_CP1[4] = {
21264 { instruction , 0 , 0 , 32,
21265 0xfc1c0003, 0x44180000, &NMD::LWC1_GP_ , 0,
21266 CP1_ }, /* LWC1[GP] */
21267 { instruction , 0 , 0 , 32,
21268 0xfc1c0003, 0x44180001, &NMD::SWC1_GP_ , 0,
21269 CP1_ }, /* SWC1[GP] */
21270 { instruction , 0 , 0 , 32,
21271 0xfc1c0003, 0x44180002, &NMD::LDC1_GP_ , 0,
21272 CP1_ }, /* LDC1[GP] */
21273 { instruction , 0 , 0 , 32,
21274 0xfc1c0003, 0x44180003, &NMD::SDC1_GP_ , 0,
21275 CP1_ }, /* SDC1[GP] */
21279 NMD::Pool NMD::P_GP_M64[4] = {
21280 { instruction , 0 , 0 , 32,
21281 0xfc1c0003, 0x441c0000, &NMD::LWU_GP_ , 0,
21282 MIPS64_ }, /* LWU[GP] */
21283 { reserved_block , 0 , 0 , 32,
21284 0xfc1c0003, 0x441c0001, 0 , 0,
21285 0x0 }, /* P.GP.M64~*(1) */
21286 { reserved_block , 0 , 0 , 32,
21287 0xfc1c0003, 0x441c0002, 0 , 0,
21288 0x0 }, /* P.GP.M64~*(2) */
21289 { reserved_block , 0 , 0 , 32,
21290 0xfc1c0003, 0x441c0003, 0 , 0,
21291 0x0 }, /* P.GP.M64~*(3) */
21295 NMD::Pool NMD::P_GP_BH[8] = {
21296 { instruction , 0 , 0 , 32,
21297 0xfc1c0000, 0x44000000, &NMD::LB_GP_ , 0,
21298 0x0 }, /* LB[GP] */
21299 { instruction , 0 , 0 , 32,
21300 0xfc1c0000, 0x44040000, &NMD::SB_GP_ , 0,
21301 0x0 }, /* SB[GP] */
21302 { instruction , 0 , 0 , 32,
21303 0xfc1c0000, 0x44080000, &NMD::LBU_GP_ , 0,
21304 0x0 }, /* LBU[GP] */
21305 { instruction , 0 , 0 , 32,
21306 0xfc1c0000, 0x440c0000, &NMD::ADDIU_GP_B_ , 0,
21307 0x0 }, /* ADDIU[GP.B] */
21308 { pool , P_GP_LH , 2 , 32,
21309 0xfc1c0000, 0x44100000, 0 , 0,
21310 0x0 }, /* P.GP.LH */
21311 { pool , P_GP_SH , 2 , 32,
21312 0xfc1c0000, 0x44140000, 0 , 0,
21313 0x0 }, /* P.GP.SH */
21314 { pool , P_GP_CP1 , 4 , 32,
21315 0xfc1c0000, 0x44180000, 0 , 0,
21316 0x0 }, /* P.GP.CP1 */
21317 { pool , P_GP_M64 , 4 , 32,
21318 0xfc1c0000, 0x441c0000, 0 , 0,
21319 0x0 }, /* P.GP.M64 */
21323 NMD::Pool NMD::P_LS_U12[16] = {
21324 { instruction , 0 , 0 , 32,
21325 0xfc00f000, 0x84000000, &NMD::LB_U12_ , 0,
21326 0x0 }, /* LB[U12] */
21327 { instruction , 0 , 0 , 32,
21328 0xfc00f000, 0x84001000, &NMD::SB_U12_ , 0,
21329 0x0 }, /* SB[U12] */
21330 { instruction , 0 , 0 , 32,
21331 0xfc00f000, 0x84002000, &NMD::LBU_U12_ , 0,
21332 0x0 }, /* LBU[U12] */
21333 { instruction , 0 , 0 , 32,
21334 0xfc00f000, 0x84003000, &NMD::PREF_U12_ , 0,
21335 0x0 }, /* PREF[U12] */
21336 { instruction , 0 , 0 , 32,
21337 0xfc00f000, 0x84004000, &NMD::LH_U12_ , 0,
21338 0x0 }, /* LH[U12] */
21339 { instruction , 0 , 0 , 32,
21340 0xfc00f000, 0x84005000, &NMD::SH_U12_ , 0,
21341 0x0 }, /* SH[U12] */
21342 { instruction , 0 , 0 , 32,
21343 0xfc00f000, 0x84006000, &NMD::LHU_U12_ , 0,
21344 0x0 }, /* LHU[U12] */
21345 { instruction , 0 , 0 , 32,
21346 0xfc00f000, 0x84007000, &NMD::LWU_U12_ , 0,
21347 MIPS64_ }, /* LWU[U12] */
21348 { instruction , 0 , 0 , 32,
21349 0xfc00f000, 0x84008000, &NMD::LW_U12_ , 0,
21350 0x0 }, /* LW[U12] */
21351 { instruction , 0 , 0 , 32,
21352 0xfc00f000, 0x84009000, &NMD::SW_U12_ , 0,
21353 0x0 }, /* SW[U12] */
21354 { instruction , 0 , 0 , 32,
21355 0xfc00f000, 0x8400a000, &NMD::LWC1_U12_ , 0,
21356 CP1_ }, /* LWC1[U12] */
21357 { instruction , 0 , 0 , 32,
21358 0xfc00f000, 0x8400b000, &NMD::SWC1_U12_ , 0,
21359 CP1_ }, /* SWC1[U12] */
21360 { instruction , 0 , 0 , 32,
21361 0xfc00f000, 0x8400c000, &NMD::LD_U12_ , 0,
21362 MIPS64_ }, /* LD[U12] */
21363 { instruction , 0 , 0 , 32,
21364 0xfc00f000, 0x8400d000, &NMD::SD_U12_ , 0,
21365 MIPS64_ }, /* SD[U12] */
21366 { instruction , 0 , 0 , 32,
21367 0xfc00f000, 0x8400e000, &NMD::LDC1_U12_ , 0,
21368 CP1_ }, /* LDC1[U12] */
21369 { instruction , 0 , 0 , 32,
21370 0xfc00f000, 0x8400f000, &NMD::SDC1_U12_ , 0,
21371 CP1_ }, /* SDC1[U12] */
21375 NMD::Pool NMD::P_PREF_S9_[2] = {
21376 { instruction , 0 , 0 , 32,
21377 0xffe07f00, 0xa7e01800, &NMD::SYNCI , 0,
21378 0x0 }, /* SYNCI */
21379 { instruction , 0 , 0 , 32,
21380 0xfc007f00, 0xa4001800, &NMD::PREF_S9_ , &NMD::PREF_S9__cond ,
21381 0x0 }, /* PREF[S9] */
21385 NMD::Pool NMD::P_LS_S0[16] = {
21386 { instruction , 0 , 0 , 32,
21387 0xfc007f00, 0xa4000000, &NMD::LB_S9_ , 0,
21388 0x0 }, /* LB[S9] */
21389 { instruction , 0 , 0 , 32,
21390 0xfc007f00, 0xa4000800, &NMD::SB_S9_ , 0,
21391 0x0 }, /* SB[S9] */
21392 { instruction , 0 , 0 , 32,
21393 0xfc007f00, 0xa4001000, &NMD::LBU_S9_ , 0,
21394 0x0 }, /* LBU[S9] */
21395 { pool , P_PREF_S9_ , 2 , 32,
21396 0xfc007f00, 0xa4001800, 0 , 0,
21397 0x0 }, /* P.PREF[S9] */
21398 { instruction , 0 , 0 , 32,
21399 0xfc007f00, 0xa4002000, &NMD::LH_S9_ , 0,
21400 0x0 }, /* LH[S9] */
21401 { instruction , 0 , 0 , 32,
21402 0xfc007f00, 0xa4002800, &NMD::SH_S9_ , 0,
21403 0x0 }, /* SH[S9] */
21404 { instruction , 0 , 0 , 32,
21405 0xfc007f00, 0xa4003000, &NMD::LHU_S9_ , 0,
21406 0x0 }, /* LHU[S9] */
21407 { instruction , 0 , 0 , 32,
21408 0xfc007f00, 0xa4003800, &NMD::LWU_S9_ , 0,
21409 MIPS64_ }, /* LWU[S9] */
21410 { instruction , 0 , 0 , 32,
21411 0xfc007f00, 0xa4004000, &NMD::LW_S9_ , 0,
21412 0x0 }, /* LW[S9] */
21413 { instruction , 0 , 0 , 32,
21414 0xfc007f00, 0xa4004800, &NMD::SW_S9_ , 0,
21415 0x0 }, /* SW[S9] */
21416 { instruction , 0 , 0 , 32,
21417 0xfc007f00, 0xa4005000, &NMD::LWC1_S9_ , 0,
21418 CP1_ }, /* LWC1[S9] */
21419 { instruction , 0 , 0 , 32,
21420 0xfc007f00, 0xa4005800, &NMD::SWC1_S9_ , 0,
21421 CP1_ }, /* SWC1[S9] */
21422 { instruction , 0 , 0 , 32,
21423 0xfc007f00, 0xa4006000, &NMD::LD_S9_ , 0,
21424 MIPS64_ }, /* LD[S9] */
21425 { instruction , 0 , 0 , 32,
21426 0xfc007f00, 0xa4006800, &NMD::SD_S9_ , 0,
21427 MIPS64_ }, /* SD[S9] */
21428 { instruction , 0 , 0 , 32,
21429 0xfc007f00, 0xa4007000, &NMD::LDC1_S9_ , 0,
21430 CP1_ }, /* LDC1[S9] */
21431 { instruction , 0 , 0 , 32,
21432 0xfc007f00, 0xa4007800, &NMD::SDC1_S9_ , 0,
21433 CP1_ }, /* SDC1[S9] */
21437 NMD::Pool NMD::ASET_ACLR[2] = {
21438 { instruction , 0 , 0 , 32,
21439 0xfe007f00, 0xa4001100, &NMD::ASET , 0,
21440 MCU_ }, /* ASET */
21441 { instruction , 0 , 0 , 32,
21442 0xfe007f00, 0xa6001100, &NMD::ACLR , 0,
21443 MCU_ }, /* ACLR */
21447 NMD::Pool NMD::P_LL[4] = {
21448 { instruction , 0 , 0 , 32,
21449 0xfc007f03, 0xa4005100, &NMD::LL , 0,
21450 0x0 }, /* LL */
21451 { instruction , 0 , 0 , 32,
21452 0xfc007f03, 0xa4005101, &NMD::LLWP , 0,
21453 XNP_ }, /* LLWP */
21454 { reserved_block , 0 , 0 , 32,
21455 0xfc007f03, 0xa4005102, 0 , 0,
21456 0x0 }, /* P.LL~*(2) */
21457 { reserved_block , 0 , 0 , 32,
21458 0xfc007f03, 0xa4005103, 0 , 0,
21459 0x0 }, /* P.LL~*(3) */
21463 NMD::Pool NMD::P_SC[4] = {
21464 { instruction , 0 , 0 , 32,
21465 0xfc007f03, 0xa4005900, &NMD::SC , 0,
21466 0x0 }, /* SC */
21467 { instruction , 0 , 0 , 32,
21468 0xfc007f03, 0xa4005901, &NMD::SCWP , 0,
21469 XNP_ }, /* SCWP */
21470 { reserved_block , 0 , 0 , 32,
21471 0xfc007f03, 0xa4005902, 0 , 0,
21472 0x0 }, /* P.SC~*(2) */
21473 { reserved_block , 0 , 0 , 32,
21474 0xfc007f03, 0xa4005903, 0 , 0,
21475 0x0 }, /* P.SC~*(3) */
21479 NMD::Pool NMD::P_LLD[8] = {
21480 { instruction , 0 , 0 , 32,
21481 0xfc007f07, 0xa4007100, &NMD::LLD , 0,
21482 MIPS64_ }, /* LLD */
21483 { instruction , 0 , 0 , 32,
21484 0xfc007f07, 0xa4007101, &NMD::LLDP , 0,
21485 MIPS64_ }, /* LLDP */
21486 { reserved_block , 0 , 0 , 32,
21487 0xfc007f07, 0xa4007102, 0 , 0,
21488 0x0 }, /* P.LLD~*(2) */
21489 { reserved_block , 0 , 0 , 32,
21490 0xfc007f07, 0xa4007103, 0 , 0,
21491 0x0 }, /* P.LLD~*(3) */
21492 { reserved_block , 0 , 0 , 32,
21493 0xfc007f07, 0xa4007104, 0 , 0,
21494 0x0 }, /* P.LLD~*(4) */
21495 { reserved_block , 0 , 0 , 32,
21496 0xfc007f07, 0xa4007105, 0 , 0,
21497 0x0 }, /* P.LLD~*(5) */
21498 { reserved_block , 0 , 0 , 32,
21499 0xfc007f07, 0xa4007106, 0 , 0,
21500 0x0 }, /* P.LLD~*(6) */
21501 { reserved_block , 0 , 0 , 32,
21502 0xfc007f07, 0xa4007107, 0 , 0,
21503 0x0 }, /* P.LLD~*(7) */
21507 NMD::Pool NMD::P_SCD[8] = {
21508 { instruction , 0 , 0 , 32,
21509 0xfc007f07, 0xa4007900, &NMD::SCD , 0,
21510 MIPS64_ }, /* SCD */
21511 { instruction , 0 , 0 , 32,
21512 0xfc007f07, 0xa4007901, &NMD::SCDP , 0,
21513 MIPS64_ }, /* SCDP */
21514 { reserved_block , 0 , 0 , 32,
21515 0xfc007f07, 0xa4007902, 0 , 0,
21516 0x0 }, /* P.SCD~*(2) */
21517 { reserved_block , 0 , 0 , 32,
21518 0xfc007f07, 0xa4007903, 0 , 0,
21519 0x0 }, /* P.SCD~*(3) */
21520 { reserved_block , 0 , 0 , 32,
21521 0xfc007f07, 0xa4007904, 0 , 0,
21522 0x0 }, /* P.SCD~*(4) */
21523 { reserved_block , 0 , 0 , 32,
21524 0xfc007f07, 0xa4007905, 0 , 0,
21525 0x0 }, /* P.SCD~*(5) */
21526 { reserved_block , 0 , 0 , 32,
21527 0xfc007f07, 0xa4007906, 0 , 0,
21528 0x0 }, /* P.SCD~*(6) */
21529 { reserved_block , 0 , 0 , 32,
21530 0xfc007f07, 0xa4007907, 0 , 0,
21531 0x0 }, /* P.SCD~*(7) */
21535 NMD::Pool NMD::P_LS_S1[16] = {
21536 { reserved_block , 0 , 0 , 32,
21537 0xfc007f00, 0xa4000100, 0 , 0,
21538 0x0 }, /* P.LS.S1~*(0) */
21539 { reserved_block , 0 , 0 , 32,
21540 0xfc007f00, 0xa4000900, 0 , 0,
21541 0x0 }, /* P.LS.S1~*(1) */
21542 { pool , ASET_ACLR , 2 , 32,
21543 0xfc007f00, 0xa4001100, 0 , 0,
21544 0x0 }, /* ASET_ACLR */
21545 { reserved_block , 0 , 0 , 32,
21546 0xfc007f00, 0xa4001900, 0 , 0,
21547 0x0 }, /* P.LS.S1~*(3) */
21548 { instruction , 0 , 0 , 32,
21549 0xfc007f00, 0xa4002100, &NMD::UALH , 0,
21550 XMMS_ }, /* UALH */
21551 { instruction , 0 , 0 , 32,
21552 0xfc007f00, 0xa4002900, &NMD::UASH , 0,
21553 XMMS_ }, /* UASH */
21554 { reserved_block , 0 , 0 , 32,
21555 0xfc007f00, 0xa4003100, 0 , 0,
21556 0x0 }, /* P.LS.S1~*(6) */
21557 { instruction , 0 , 0 , 32,
21558 0xfc007f00, 0xa4003900, &NMD::CACHE , 0,
21559 CP0_ }, /* CACHE */
21560 { instruction , 0 , 0 , 32,
21561 0xfc007f00, 0xa4004100, &NMD::LWC2 , 0,
21562 CP2_ }, /* LWC2 */
21563 { instruction , 0 , 0 , 32,
21564 0xfc007f00, 0xa4004900, &NMD::SWC2 , 0,
21565 CP2_ }, /* SWC2 */
21566 { pool , P_LL , 4 , 32,
21567 0xfc007f00, 0xa4005100, 0 , 0,
21568 0x0 }, /* P.LL */
21569 { pool , P_SC , 4 , 32,
21570 0xfc007f00, 0xa4005900, 0 , 0,
21571 0x0 }, /* P.SC */
21572 { instruction , 0 , 0 , 32,
21573 0xfc007f00, 0xa4006100, &NMD::LDC2 , 0,
21574 CP2_ }, /* LDC2 */
21575 { instruction , 0 , 0 , 32,
21576 0xfc007f00, 0xa4006900, &NMD::SDC2 , 0,
21577 CP2_ }, /* SDC2 */
21578 { pool , P_LLD , 8 , 32,
21579 0xfc007f00, 0xa4007100, 0 , 0,
21580 0x0 }, /* P.LLD */
21581 { pool , P_SCD , 8 , 32,
21582 0xfc007f00, 0xa4007900, 0 , 0,
21583 0x0 }, /* P.SCD */
21587 NMD::Pool NMD::P_PREFE[2] = {
21588 { instruction , 0 , 0 , 32,
21589 0xffe07f00, 0xa7e01a00, &NMD::SYNCIE , 0,
21590 CP0_ | EVA_ }, /* SYNCIE */
21591 { instruction , 0 , 0 , 32,
21592 0xfc007f00, 0xa4001a00, &NMD::PREFE , &NMD::PREFE_cond ,
21593 CP0_ | EVA_ }, /* PREFE */
21597 NMD::Pool NMD::P_LLE[4] = {
21598 { instruction , 0 , 0 , 32,
21599 0xfc007f03, 0xa4005200, &NMD::LLE , 0,
21600 CP0_ | EVA_ }, /* LLE */
21601 { instruction , 0 , 0 , 32,
21602 0xfc007f03, 0xa4005201, &NMD::LLWPE , 0,
21603 CP0_ | EVA_ }, /* LLWPE */
21604 { reserved_block , 0 , 0 , 32,
21605 0xfc007f03, 0xa4005202, 0 , 0,
21606 0x0 }, /* P.LLE~*(2) */
21607 { reserved_block , 0 , 0 , 32,
21608 0xfc007f03, 0xa4005203, 0 , 0,
21609 0x0 }, /* P.LLE~*(3) */
21613 NMD::Pool NMD::P_SCE[4] = {
21614 { instruction , 0 , 0 , 32,
21615 0xfc007f03, 0xa4005a00, &NMD::SCE , 0,
21616 CP0_ | EVA_ }, /* SCE */
21617 { instruction , 0 , 0 , 32,
21618 0xfc007f03, 0xa4005a01, &NMD::SCWPE , 0,
21619 CP0_ | EVA_ }, /* SCWPE */
21620 { reserved_block , 0 , 0 , 32,
21621 0xfc007f03, 0xa4005a02, 0 , 0,
21622 0x0 }, /* P.SCE~*(2) */
21623 { reserved_block , 0 , 0 , 32,
21624 0xfc007f03, 0xa4005a03, 0 , 0,
21625 0x0 }, /* P.SCE~*(3) */
21629 NMD::Pool NMD::P_LS_E0[16] = {
21630 { instruction , 0 , 0 , 32,
21631 0xfc007f00, 0xa4000200, &NMD::LBE , 0,
21632 CP0_ | EVA_ }, /* LBE */
21633 { instruction , 0 , 0 , 32,
21634 0xfc007f00, 0xa4000a00, &NMD::SBE , 0,
21635 CP0_ | EVA_ }, /* SBE */
21636 { instruction , 0 , 0 , 32,
21637 0xfc007f00, 0xa4001200, &NMD::LBUE , 0,
21638 CP0_ | EVA_ }, /* LBUE */
21639 { pool , P_PREFE , 2 , 32,
21640 0xfc007f00, 0xa4001a00, 0 , 0,
21641 0x0 }, /* P.PREFE */
21642 { instruction , 0 , 0 , 32,
21643 0xfc007f00, 0xa4002200, &NMD::LHE , 0,
21644 CP0_ | EVA_ }, /* LHE */
21645 { instruction , 0 , 0 , 32,
21646 0xfc007f00, 0xa4002a00, &NMD::SHE , 0,
21647 CP0_ | EVA_ }, /* SHE */
21648 { instruction , 0 , 0 , 32,
21649 0xfc007f00, 0xa4003200, &NMD::LHUE , 0,
21650 CP0_ | EVA_ }, /* LHUE */
21651 { instruction , 0 , 0 , 32,
21652 0xfc007f00, 0xa4003a00, &NMD::CACHEE , 0,
21653 CP0_ | EVA_ }, /* CACHEE */
21654 { instruction , 0 , 0 , 32,
21655 0xfc007f00, 0xa4004200, &NMD::LWE , 0,
21656 CP0_ | EVA_ }, /* LWE */
21657 { instruction , 0 , 0 , 32,
21658 0xfc007f00, 0xa4004a00, &NMD::SWE , 0,
21659 CP0_ | EVA_ }, /* SWE */
21660 { pool , P_LLE , 4 , 32,
21661 0xfc007f00, 0xa4005200, 0 , 0,
21662 0x0 }, /* P.LLE */
21663 { pool , P_SCE , 4 , 32,
21664 0xfc007f00, 0xa4005a00, 0 , 0,
21665 0x0 }, /* P.SCE */
21666 { reserved_block , 0 , 0 , 32,
21667 0xfc007f00, 0xa4006200, 0 , 0,
21668 0x0 }, /* P.LS.E0~*(12) */
21669 { reserved_block , 0 , 0 , 32,
21670 0xfc007f00, 0xa4006a00, 0 , 0,
21671 0x0 }, /* P.LS.E0~*(13) */
21672 { reserved_block , 0 , 0 , 32,
21673 0xfc007f00, 0xa4007200, 0 , 0,
21674 0x0 }, /* P.LS.E0~*(14) */
21675 { reserved_block , 0 , 0 , 32,
21676 0xfc007f00, 0xa4007a00, 0 , 0,
21677 0x0 }, /* P.LS.E0~*(15) */
21681 NMD::Pool NMD::P_LS_WM[2] = {
21682 { instruction , 0 , 0 , 32,
21683 0xfc000f00, 0xa4000400, &NMD::LWM , 0,
21684 XMMS_ }, /* LWM */
21685 { instruction , 0 , 0 , 32,
21686 0xfc000f00, 0xa4000c00, &NMD::SWM , 0,
21687 XMMS_ }, /* SWM */
21691 NMD::Pool NMD::P_LS_UAWM[2] = {
21692 { instruction , 0 , 0 , 32,
21693 0xfc000f00, 0xa4000500, &NMD::UALWM , 0,
21694 XMMS_ }, /* UALWM */
21695 { instruction , 0 , 0 , 32,
21696 0xfc000f00, 0xa4000d00, &NMD::UASWM , 0,
21697 XMMS_ }, /* UASWM */
21701 NMD::Pool NMD::P_LS_DM[2] = {
21702 { instruction , 0 , 0 , 32,
21703 0xfc000f00, 0xa4000600, &NMD::LDM , 0,
21704 MIPS64_ }, /* LDM */
21705 { instruction , 0 , 0 , 32,
21706 0xfc000f00, 0xa4000e00, &NMD::SDM , 0,
21707 MIPS64_ }, /* SDM */
21711 NMD::Pool NMD::P_LS_UADM[2] = {
21712 { instruction , 0 , 0 , 32,
21713 0xfc000f00, 0xa4000700, &NMD::UALDM , 0,
21714 MIPS64_ }, /* UALDM */
21715 { instruction , 0 , 0 , 32,
21716 0xfc000f00, 0xa4000f00, &NMD::UASDM , 0,
21717 MIPS64_ }, /* UASDM */
21721 NMD::Pool NMD::P_LS_S9[8] = {
21722 { pool , P_LS_S0 , 16 , 32,
21723 0xfc000700, 0xa4000000, 0 , 0,
21724 0x0 }, /* P.LS.S0 */
21725 { pool , P_LS_S1 , 16 , 32,
21726 0xfc000700, 0xa4000100, 0 , 0,
21727 0x0 }, /* P.LS.S1 */
21728 { pool , P_LS_E0 , 16 , 32,
21729 0xfc000700, 0xa4000200, 0 , 0,
21730 0x0 }, /* P.LS.E0 */
21731 { reserved_block , 0 , 0 , 32,
21732 0xfc000700, 0xa4000300, 0 , 0,
21733 0x0 }, /* P.LS.S9~*(3) */
21734 { pool , P_LS_WM , 2 , 32,
21735 0xfc000700, 0xa4000400, 0 , 0,
21736 0x0 }, /* P.LS.WM */
21737 { pool , P_LS_UAWM , 2 , 32,
21738 0xfc000700, 0xa4000500, 0 , 0,
21739 0x0 }, /* P.LS.UAWM */
21740 { pool , P_LS_DM , 2 , 32,
21741 0xfc000700, 0xa4000600, 0 , 0,
21742 0x0 }, /* P.LS.DM */
21743 { pool , P_LS_UADM , 2 , 32,
21744 0xfc000700, 0xa4000700, 0 , 0,
21745 0x0 }, /* P.LS.UADM */
21749 NMD::Pool NMD::P_BAL[2] = {
21750 { branch_instruction , 0 , 0 , 32,
21751 0xfe000000, 0x28000000, &NMD::BC_32_ , 0,
21752 0x0 }, /* BC[32] */
21753 { call_instruction , 0 , 0 , 32,
21754 0xfe000000, 0x2a000000, &NMD::BALC_32_ , 0,
21755 0x0 }, /* BALC[32] */
21759 NMD::Pool NMD::P_BALRSC[2] = {
21760 { branch_instruction , 0 , 0 , 32,
21761 0xffe0f000, 0x48008000, &NMD::BRSC , 0,
21762 0x0 }, /* BRSC */
21763 { call_instruction , 0 , 0 , 32,
21764 0xfc00f000, 0x48008000, &NMD::BALRSC , &NMD::BALRSC_cond ,
21765 0x0 }, /* BALRSC */
21769 NMD::Pool NMD::P_J[16] = {
21770 { call_instruction , 0 , 0 , 32,
21771 0xfc00f000, 0x48000000, &NMD::JALRC_32_ , 0,
21772 0x0 }, /* JALRC[32] */
21773 { call_instruction , 0 , 0 , 32,
21774 0xfc00f000, 0x48001000, &NMD::JALRC_HB , 0,
21775 0x0 }, /* JALRC.HB */
21776 { reserved_block , 0 , 0 , 32,
21777 0xfc00f000, 0x48002000, 0 , 0,
21778 0x0 }, /* P.J~*(2) */
21779 { reserved_block , 0 , 0 , 32,
21780 0xfc00f000, 0x48003000, 0 , 0,
21781 0x0 }, /* P.J~*(3) */
21782 { reserved_block , 0 , 0 , 32,
21783 0xfc00f000, 0x48004000, 0 , 0,
21784 0x0 }, /* P.J~*(4) */
21785 { reserved_block , 0 , 0 , 32,
21786 0xfc00f000, 0x48005000, 0 , 0,
21787 0x0 }, /* P.J~*(5) */
21788 { reserved_block , 0 , 0 , 32,
21789 0xfc00f000, 0x48006000, 0 , 0,
21790 0x0 }, /* P.J~*(6) */
21791 { reserved_block , 0 , 0 , 32,
21792 0xfc00f000, 0x48007000, 0 , 0,
21793 0x0 }, /* P.J~*(7) */
21794 { pool , P_BALRSC , 2 , 32,
21795 0xfc00f000, 0x48008000, 0 , 0,
21796 0x0 }, /* P.BALRSC */
21797 { reserved_block , 0 , 0 , 32,
21798 0xfc00f000, 0x48009000, 0 , 0,
21799 0x0 }, /* P.J~*(9) */
21800 { reserved_block , 0 , 0 , 32,
21801 0xfc00f000, 0x4800a000, 0 , 0,
21802 0x0 }, /* P.J~*(10) */
21803 { reserved_block , 0 , 0 , 32,
21804 0xfc00f000, 0x4800b000, 0 , 0,
21805 0x0 }, /* P.J~*(11) */
21806 { reserved_block , 0 , 0 , 32,
21807 0xfc00f000, 0x4800c000, 0 , 0,
21808 0x0 }, /* P.J~*(12) */
21809 { reserved_block , 0 , 0 , 32,
21810 0xfc00f000, 0x4800d000, 0 , 0,
21811 0x0 }, /* P.J~*(13) */
21812 { reserved_block , 0 , 0 , 32,
21813 0xfc00f000, 0x4800e000, 0 , 0,
21814 0x0 }, /* P.J~*(14) */
21815 { reserved_block , 0 , 0 , 32,
21816 0xfc00f000, 0x4800f000, 0 , 0,
21817 0x0 }, /* P.J~*(15) */
21821 NMD::Pool NMD::P_BR3A[32] = {
21822 { branch_instruction , 0 , 0 , 32,
21823 0xfc1fc000, 0x88004000, &NMD::BC1EQZC , 0,
21824 CP1_ }, /* BC1EQZC */
21825 { branch_instruction , 0 , 0 , 32,
21826 0xfc1fc000, 0x88014000, &NMD::BC1NEZC , 0,
21827 CP1_ }, /* BC1NEZC */
21828 { branch_instruction , 0 , 0 , 32,
21829 0xfc1fc000, 0x88024000, &NMD::BC2EQZC , 0,
21830 CP2_ }, /* BC2EQZC */
21831 { branch_instruction , 0 , 0 , 32,
21832 0xfc1fc000, 0x88034000, &NMD::BC2NEZC , 0,
21833 CP2_ }, /* BC2NEZC */
21834 { branch_instruction , 0 , 0 , 32,
21835 0xfc1fc000, 0x88044000, &NMD::BPOSGE32C , 0,
21836 DSP_ }, /* BPOSGE32C */
21837 { reserved_block , 0 , 0 , 32,
21838 0xfc1fc000, 0x88054000, 0 , 0,
21839 0x0 }, /* P.BR3A~*(5) */
21840 { reserved_block , 0 , 0 , 32,
21841 0xfc1fc000, 0x88064000, 0 , 0,
21842 0x0 }, /* P.BR3A~*(6) */
21843 { reserved_block , 0 , 0 , 32,
21844 0xfc1fc000, 0x88074000, 0 , 0,
21845 0x0 }, /* P.BR3A~*(7) */
21846 { reserved_block , 0 , 0 , 32,
21847 0xfc1fc000, 0x88084000, 0 , 0,
21848 0x0 }, /* P.BR3A~*(8) */
21849 { reserved_block , 0 , 0 , 32,
21850 0xfc1fc000, 0x88094000, 0 , 0,
21851 0x0 }, /* P.BR3A~*(9) */
21852 { reserved_block , 0 , 0 , 32,
21853 0xfc1fc000, 0x880a4000, 0 , 0,
21854 0x0 }, /* P.BR3A~*(10) */
21855 { reserved_block , 0 , 0 , 32,
21856 0xfc1fc000, 0x880b4000, 0 , 0,
21857 0x0 }, /* P.BR3A~*(11) */
21858 { reserved_block , 0 , 0 , 32,
21859 0xfc1fc000, 0x880c4000, 0 , 0,
21860 0x0 }, /* P.BR3A~*(12) */
21861 { reserved_block , 0 , 0 , 32,
21862 0xfc1fc000, 0x880d4000, 0 , 0,
21863 0x0 }, /* P.BR3A~*(13) */
21864 { reserved_block , 0 , 0 , 32,
21865 0xfc1fc000, 0x880e4000, 0 , 0,
21866 0x0 }, /* P.BR3A~*(14) */
21867 { reserved_block , 0 , 0 , 32,
21868 0xfc1fc000, 0x880f4000, 0 , 0,
21869 0x0 }, /* P.BR3A~*(15) */
21870 { reserved_block , 0 , 0 , 32,
21871 0xfc1fc000, 0x88104000, 0 , 0,
21872 0x0 }, /* P.BR3A~*(16) */
21873 { reserved_block , 0 , 0 , 32,
21874 0xfc1fc000, 0x88114000, 0 , 0,
21875 0x0 }, /* P.BR3A~*(17) */
21876 { reserved_block , 0 , 0 , 32,
21877 0xfc1fc000, 0x88124000, 0 , 0,
21878 0x0 }, /* P.BR3A~*(18) */
21879 { reserved_block , 0 , 0 , 32,
21880 0xfc1fc000, 0x88134000, 0 , 0,
21881 0x0 }, /* P.BR3A~*(19) */
21882 { reserved_block , 0 , 0 , 32,
21883 0xfc1fc000, 0x88144000, 0 , 0,
21884 0x0 }, /* P.BR3A~*(20) */
21885 { reserved_block , 0 , 0 , 32,
21886 0xfc1fc000, 0x88154000, 0 , 0,
21887 0x0 }, /* P.BR3A~*(21) */
21888 { reserved_block , 0 , 0 , 32,
21889 0xfc1fc000, 0x88164000, 0 , 0,
21890 0x0 }, /* P.BR3A~*(22) */
21891 { reserved_block , 0 , 0 , 32,
21892 0xfc1fc000, 0x88174000, 0 , 0,
21893 0x0 }, /* P.BR3A~*(23) */
21894 { reserved_block , 0 , 0 , 32,
21895 0xfc1fc000, 0x88184000, 0 , 0,
21896 0x0 }, /* P.BR3A~*(24) */
21897 { reserved_block , 0 , 0 , 32,
21898 0xfc1fc000, 0x88194000, 0 , 0,
21899 0x0 }, /* P.BR3A~*(25) */
21900 { reserved_block , 0 , 0 , 32,
21901 0xfc1fc000, 0x881a4000, 0 , 0,
21902 0x0 }, /* P.BR3A~*(26) */
21903 { reserved_block , 0 , 0 , 32,
21904 0xfc1fc000, 0x881b4000, 0 , 0,
21905 0x0 }, /* P.BR3A~*(27) */
21906 { reserved_block , 0 , 0 , 32,
21907 0xfc1fc000, 0x881c4000, 0 , 0,
21908 0x0 }, /* P.BR3A~*(28) */
21909 { reserved_block , 0 , 0 , 32,
21910 0xfc1fc000, 0x881d4000, 0 , 0,
21911 0x0 }, /* P.BR3A~*(29) */
21912 { reserved_block , 0 , 0 , 32,
21913 0xfc1fc000, 0x881e4000, 0 , 0,
21914 0x0 }, /* P.BR3A~*(30) */
21915 { reserved_block , 0 , 0 , 32,
21916 0xfc1fc000, 0x881f4000, 0 , 0,
21917 0x0 }, /* P.BR3A~*(31) */
21921 NMD::Pool NMD::P_BR1[4] = {
21922 { branch_instruction , 0 , 0 , 32,
21923 0xfc00c000, 0x88000000, &NMD::BEQC_32_ , 0,
21924 0x0 }, /* BEQC[32] */
21925 { pool , P_BR3A , 32 , 32,
21926 0xfc00c000, 0x88004000, 0 , 0,
21927 0x0 }, /* P.BR3A */
21928 { branch_instruction , 0 , 0 , 32,
21929 0xfc00c000, 0x88008000, &NMD::BGEC , 0,
21930 0x0 }, /* BGEC */
21931 { branch_instruction , 0 , 0 , 32,
21932 0xfc00c000, 0x8800c000, &NMD::BGEUC , 0,
21933 0x0 }, /* BGEUC */
21937 NMD::Pool NMD::P_BR2[4] = {
21938 { branch_instruction , 0 , 0 , 32,
21939 0xfc00c000, 0xa8000000, &NMD::BNEC_32_ , 0,
21940 0x0 }, /* BNEC[32] */
21941 { reserved_block , 0 , 0 , 32,
21942 0xfc00c000, 0xa8004000, 0 , 0,
21943 0x0 }, /* P.BR2~*(1) */
21944 { branch_instruction , 0 , 0 , 32,
21945 0xfc00c000, 0xa8008000, &NMD::BLTC , 0,
21946 0x0 }, /* BLTC */
21947 { branch_instruction , 0 , 0 , 32,
21948 0xfc00c000, 0xa800c000, &NMD::BLTUC , 0,
21949 0x0 }, /* BLTUC */
21953 NMD::Pool NMD::P_BRI[8] = {
21954 { branch_instruction , 0 , 0 , 32,
21955 0xfc1c0000, 0xc8000000, &NMD::BEQIC , 0,
21956 0x0 }, /* BEQIC */
21957 { branch_instruction , 0 , 0 , 32,
21958 0xfc1c0000, 0xc8040000, &NMD::BBEQZC , 0,
21959 XMMS_ }, /* BBEQZC */
21960 { branch_instruction , 0 , 0 , 32,
21961 0xfc1c0000, 0xc8080000, &NMD::BGEIC , 0,
21962 0x0 }, /* BGEIC */
21963 { branch_instruction , 0 , 0 , 32,
21964 0xfc1c0000, 0xc80c0000, &NMD::BGEIUC , 0,
21965 0x0 }, /* BGEIUC */
21966 { branch_instruction , 0 , 0 , 32,
21967 0xfc1c0000, 0xc8100000, &NMD::BNEIC , 0,
21968 0x0 }, /* BNEIC */
21969 { branch_instruction , 0 , 0 , 32,
21970 0xfc1c0000, 0xc8140000, &NMD::BBNEZC , 0,
21971 XMMS_ }, /* BBNEZC */
21972 { branch_instruction , 0 , 0 , 32,
21973 0xfc1c0000, 0xc8180000, &NMD::BLTIC , 0,
21974 0x0 }, /* BLTIC */
21975 { branch_instruction , 0 , 0 , 32,
21976 0xfc1c0000, 0xc81c0000, &NMD::BLTIUC , 0,
21977 0x0 }, /* BLTIUC */
21981 NMD::Pool NMD::P32[32] = {
21982 { pool , P_ADDIU , 2 , 32,
21983 0xfc000000, 0x00000000, 0 , 0,
21984 0x0 }, /* P.ADDIU */
21985 { pool , P32A , 8 , 32,
21986 0xfc000000, 0x20000000, 0 , 0,
21987 0x0 }, /* P32A */
21988 { pool , P_GP_W , 4 , 32,
21989 0xfc000000, 0x40000000, 0 , 0,
21990 0x0 }, /* P.GP.W */
21991 { pool , POOL48I , 32 , 48,
21992 0xfc0000000000ull, 0x600000000000ull, 0 , 0,
21993 0x0 }, /* POOL48I */
21994 { pool , P_U12 , 16 , 32,
21995 0xfc000000, 0x80000000, 0 , 0,
21996 0x0 }, /* P.U12 */
21997 { pool , POOL32F , 8 , 32,
21998 0xfc000000, 0xa0000000, 0 , 0,
21999 CP1_ }, /* POOL32F */
22000 { pool , POOL32S , 8 , 32,
22001 0xfc000000, 0xc0000000, 0 , 0,
22002 0x0 }, /* POOL32S */
22003 { pool , P_LUI , 2 , 32,
22004 0xfc000000, 0xe0000000, 0 , 0,
22005 0x0 }, /* P.LUI */
22006 { instruction , 0 , 0 , 32,
22007 0xfc000000, 0x04000000, &NMD::ADDIUPC_32_ , 0,
22008 0x0 }, /* ADDIUPC[32] */
22009 { reserved_block , 0 , 0 , 32,
22010 0xfc000000, 0x24000000, 0 , 0,
22011 0x0 }, /* P32~*(5) */
22012 { pool , P_GP_BH , 8 , 32,
22013 0xfc000000, 0x44000000, 0 , 0,
22014 0x0 }, /* P.GP.BH */
22015 { reserved_block , 0 , 0 , 32,
22016 0xfc000000, 0x64000000, 0 , 0,
22017 0x0 }, /* P32~*(13) */
22018 { pool , P_LS_U12 , 16 , 32,
22019 0xfc000000, 0x84000000, 0 , 0,
22020 0x0 }, /* P.LS.U12 */
22021 { pool , P_LS_S9 , 8 , 32,
22022 0xfc000000, 0xa4000000, 0 , 0,
22023 0x0 }, /* P.LS.S9 */
22024 { reserved_block , 0 , 0 , 32,
22025 0xfc000000, 0xc4000000, 0 , 0,
22026 0x0 }, /* P32~*(25) */
22027 { reserved_block , 0 , 0 , 32,
22028 0xfc000000, 0xe4000000, 0 , 0,
22029 0x0 }, /* P32~*(29) */
22030 { call_instruction , 0 , 0 , 32,
22031 0xfc000000, 0x08000000, &NMD::MOVE_BALC , 0,
22032 XMMS_ }, /* MOVE.BALC */
22033 { pool , P_BAL , 2 , 32,
22034 0xfc000000, 0x28000000, 0 , 0,
22035 0x0 }, /* P.BAL */
22036 { pool , P_J , 16 , 32,
22037 0xfc000000, 0x48000000, 0 , 0,
22038 0x0 }, /* P.J */
22039 { reserved_block , 0 , 0 , 32,
22040 0xfc000000, 0x68000000, 0 , 0,
22041 0x0 }, /* P32~*(14) */
22042 { pool , P_BR1 , 4 , 32,
22043 0xfc000000, 0x88000000, 0 , 0,
22044 0x0 }, /* P.BR1 */
22045 { pool , P_BR2 , 4 , 32,
22046 0xfc000000, 0xa8000000, 0 , 0,
22047 0x0 }, /* P.BR2 */
22048 { pool , P_BRI , 8 , 32,
22049 0xfc000000, 0xc8000000, 0 , 0,
22050 0x0 }, /* P.BRI */
22051 { reserved_block , 0 , 0 , 32,
22052 0xfc000000, 0xe8000000, 0 , 0,
22053 0x0 }, /* P32~*(30) */
22054 { reserved_block , 0 , 0 , 32,
22055 0xfc000000, 0x0c000000, 0 , 0,
22056 0x0 }, /* P32~*(3) */
22057 { reserved_block , 0 , 0 , 32,
22058 0xfc000000, 0x2c000000, 0 , 0,
22059 0x0 }, /* P32~*(7) */
22060 { reserved_block , 0 , 0 , 32,
22061 0xfc000000, 0x4c000000, 0 , 0,
22062 0x0 }, /* P32~*(11) */
22063 { reserved_block , 0 , 0 , 32,
22064 0xfc000000, 0x6c000000, 0 , 0,
22065 0x0 }, /* P32~*(15) */
22066 { reserved_block , 0 , 0 , 32,
22067 0xfc000000, 0x8c000000, 0 , 0,
22068 0x0 }, /* P32~*(19) */
22069 { reserved_block , 0 , 0 , 32,
22070 0xfc000000, 0xac000000, 0 , 0,
22071 0x0 }, /* P32~*(23) */
22072 { reserved_block , 0 , 0 , 32,
22073 0xfc000000, 0xcc000000, 0 , 0,
22074 0x0 }, /* P32~*(27) */
22075 { reserved_block , 0 , 0 , 32,
22076 0xfc000000, 0xec000000, 0 , 0,
22077 0x0 }, /* P32~*(31) */
22081 NMD::Pool NMD::P16_SYSCALL[2] = {
22082 { instruction , 0 , 0 , 16,
22083 0xfffc , 0x1008 , &NMD::SYSCALL_16_ , 0,
22084 0x0 }, /* SYSCALL[16] */
22085 { instruction , 0 , 0 , 16,
22086 0xfffc , 0x100c , &NMD::HYPCALL_16_ , 0,
22087 CP0_ | VZ_ }, /* HYPCALL[16] */
22091 NMD::Pool NMD::P16_RI[4] = {
22092 { reserved_block , 0 , 0 , 16,
22093 0xfff8 , 0x1000 , 0 , 0,
22094 0x0 }, /* P16.RI~*(0) */
22095 { pool , P16_SYSCALL , 2 , 16,
22096 0xfff8 , 0x1008 , 0 , 0,
22097 0x0 }, /* P16.SYSCALL */
22098 { instruction , 0 , 0 , 16,
22099 0xfff8 , 0x1010 , &NMD::BREAK_16_ , 0,
22100 0x0 }, /* BREAK[16] */
22101 { instruction , 0 , 0 , 16,
22102 0xfff8 , 0x1018 , &NMD::SDBBP_16_ , 0,
22103 EJTAG_ }, /* SDBBP[16] */
22107 NMD::Pool NMD::P16_MV[2] = {
22108 { pool , P16_RI , 4 , 16,
22109 0xffe0 , 0x1000 , 0 , 0,
22110 0x0 }, /* P16.RI */
22111 { instruction , 0 , 0 , 16,
22112 0xfc00 , 0x1000 , &NMD::MOVE , &NMD::MOVE_cond ,
22113 0x0 }, /* MOVE */
22117 NMD::Pool NMD::P16_SHIFT[2] = {
22118 { instruction , 0 , 0 , 16,
22119 0xfc08 , 0x3000 , &NMD::SLL_16_ , 0,
22120 0x0 }, /* SLL[16] */
22121 { instruction , 0 , 0 , 16,
22122 0xfc08 , 0x3008 , &NMD::SRL_16_ , 0,
22123 0x0 }, /* SRL[16] */
22127 NMD::Pool NMD::POOL16C_00[4] = {
22128 { instruction , 0 , 0 , 16,
22129 0xfc0f , 0x5000 , &NMD::NOT_16_ , 0,
22130 0x0 }, /* NOT[16] */
22131 { instruction , 0 , 0 , 16,
22132 0xfc0f , 0x5004 , &NMD::XOR_16_ , 0,
22133 0x0 }, /* XOR[16] */
22134 { instruction , 0 , 0 , 16,
22135 0xfc0f , 0x5008 , &NMD::AND_16_ , 0,
22136 0x0 }, /* AND[16] */
22137 { instruction , 0 , 0 , 16,
22138 0xfc0f , 0x500c , &NMD::OR_16_ , 0,
22139 0x0 }, /* OR[16] */
22143 NMD::Pool NMD::POOL16C_0[2] = {
22144 { pool , POOL16C_00 , 4 , 16,
22145 0xfc03 , 0x5000 , 0 , 0,
22146 0x0 }, /* POOL16C_00 */
22147 { reserved_block , 0 , 0 , 16,
22148 0xfc03 , 0x5002 , 0 , 0,
22149 0x0 }, /* POOL16C_0~*(1) */
22153 NMD::Pool NMD::P16C[2] = {
22154 { pool , POOL16C_0 , 2 , 16,
22155 0xfc01 , 0x5000 , 0 , 0,
22156 0x0 }, /* POOL16C_0 */
22157 { instruction , 0 , 0 , 16,
22158 0xfc01 , 0x5001 , &NMD::LWXS_16_ , 0,
22159 0x0 }, /* LWXS[16] */
22163 NMD::Pool NMD::P16_A1[2] = {
22164 { reserved_block , 0 , 0 , 16,
22165 0xfc40 , 0x7000 , 0 , 0,
22166 0x0 }, /* P16.A1~*(0) */
22167 { instruction , 0 , 0 , 16,
22168 0xfc40 , 0x7040 , &NMD::ADDIU_R1_SP_ , 0,
22169 0x0 }, /* ADDIU[R1.SP] */
22173 NMD::Pool NMD::P_ADDIU_RS5_[2] = {
22174 { instruction , 0 , 0 , 16,
22175 0xffe8 , 0x9008 , &NMD::NOP_16_ , 0,
22176 0x0 }, /* NOP[16] */
22177 { instruction , 0 , 0 , 16,
22178 0xfc08 , 0x9008 , &NMD::ADDIU_RS5_ , &NMD::ADDIU_RS5__cond ,
22179 0x0 }, /* ADDIU[RS5] */
22183 NMD::Pool NMD::P16_A2[2] = {
22184 { instruction , 0 , 0 , 16,
22185 0xfc08 , 0x9000 , &NMD::ADDIU_R2_ , 0,
22186 0x0 }, /* ADDIU[R2] */
22187 { pool , P_ADDIU_RS5_ , 2 , 16,
22188 0xfc08 , 0x9008 , 0 , 0,
22189 0x0 }, /* P.ADDIU[RS5] */
22193 NMD::Pool NMD::P16_ADDU[2] = {
22194 { instruction , 0 , 0 , 16,
22195 0xfc01 , 0xb000 , &NMD::ADDU_16_ , 0,
22196 0x0 }, /* ADDU[16] */
22197 { instruction , 0 , 0 , 16,
22198 0xfc01 , 0xb001 , &NMD::SUBU_16_ , 0,
22199 0x0 }, /* SUBU[16] */
22203 NMD::Pool NMD::P16_JRC[2] = {
22204 { branch_instruction , 0 , 0 , 16,
22205 0xfc1f , 0xd800 , &NMD::JRC , 0,
22206 0x0 }, /* JRC */
22207 { call_instruction , 0 , 0 , 16,
22208 0xfc1f , 0xd810 , &NMD::JALRC_16_ , 0,
22209 0x0 }, /* JALRC[16] */
22213 NMD::Pool NMD::P16_BR1[2] = {
22214 { branch_instruction , 0 , 0 , 16,
22215 0xfc00 , 0xd800 , &NMD::BEQC_16_ , &NMD::BEQC_16__cond ,
22216 XMMS_ }, /* BEQC[16] */
22217 { branch_instruction , 0 , 0 , 16,
22218 0xfc00 , 0xd800 , &NMD::BNEC_16_ , &NMD::BNEC_16__cond ,
22219 XMMS_ }, /* BNEC[16] */
22223 NMD::Pool NMD::P16_BR[2] = {
22224 { pool , P16_JRC , 2 , 16,
22225 0xfc0f , 0xd800 , 0 , 0,
22226 0x0 }, /* P16.JRC */
22227 { pool , P16_BR1 , 2 , 16,
22228 0xfc00 , 0xd800 , 0 , &NMD::P16_BR1_cond ,
22229 0x0 }, /* P16.BR1 */
22233 NMD::Pool NMD::P16_SR[2] = {
22234 { instruction , 0 , 0 , 16,
22235 0xfd00 , 0x1c00 , &NMD::SAVE_16_ , 0,
22236 0x0 }, /* SAVE[16] */
22237 { return_instruction , 0 , 0 , 16,
22238 0xfd00 , 0x1d00 , &NMD::RESTORE_JRC_16_ , 0,
22239 0x0 }, /* RESTORE.JRC[16] */
22243 NMD::Pool NMD::P16_4X4[4] = {
22244 { instruction , 0 , 0 , 16,
22245 0xfd08 , 0x3c00 , &NMD::ADDU_4X4_ , 0,
22246 XMMS_ }, /* ADDU[4X4] */
22247 { instruction , 0 , 0 , 16,
22248 0xfd08 , 0x3c08 , &NMD::MUL_4X4_ , 0,
22249 XMMS_ }, /* MUL[4X4] */
22250 { reserved_block , 0 , 0 , 16,
22251 0xfd08 , 0x3d00 , 0 , 0,
22252 0x0 }, /* P16.4X4~*(2) */
22253 { reserved_block , 0 , 0 , 16,
22254 0xfd08 , 0x3d08 , 0 , 0,
22255 0x0 }, /* P16.4X4~*(3) */
22259 NMD::Pool NMD::P16_LB[4] = {
22260 { instruction , 0 , 0 , 16,
22261 0xfc0c , 0x5c00 , &NMD::LB_16_ , 0,
22262 0x0 }, /* LB[16] */
22263 { instruction , 0 , 0 , 16,
22264 0xfc0c , 0x5c04 , &NMD::SB_16_ , 0,
22265 0x0 }, /* SB[16] */
22266 { instruction , 0 , 0 , 16,
22267 0xfc0c , 0x5c08 , &NMD::LBU_16_ , 0,
22268 0x0 }, /* LBU[16] */
22269 { reserved_block , 0 , 0 , 16,
22270 0xfc0c , 0x5c0c , 0 , 0,
22271 0x0 }, /* P16.LB~*(3) */
22275 NMD::Pool NMD::P16_LH[4] = {
22276 { instruction , 0 , 0 , 16,
22277 0xfc09 , 0x7c00 , &NMD::LH_16_ , 0,
22278 0x0 }, /* LH[16] */
22279 { instruction , 0 , 0 , 16,
22280 0xfc09 , 0x7c01 , &NMD::SH_16_ , 0,
22281 0x0 }, /* SH[16] */
22282 { instruction , 0 , 0 , 16,
22283 0xfc09 , 0x7c08 , &NMD::LHU_16_ , 0,
22284 0x0 }, /* LHU[16] */
22285 { reserved_block , 0 , 0 , 16,
22286 0xfc09 , 0x7c09 , 0 , 0,
22287 0x0 }, /* P16.LH~*(3) */
22291 NMD::Pool NMD::P16[32] = {
22292 { pool , P16_MV , 2 , 16,
22293 0xfc00 , 0x1000 , 0 , 0,
22294 0x0 }, /* P16.MV */
22295 { pool , P16_SHIFT , 2 , 16,
22296 0xfc00 , 0x3000 , 0 , 0,
22297 0x0 }, /* P16.SHIFT */
22298 { pool , P16C , 2 , 16,
22299 0xfc00 , 0x5000 , 0 , 0,
22300 0x0 }, /* P16C */
22301 { pool , P16_A1 , 2 , 16,
22302 0xfc00 , 0x7000 , 0 , 0,
22303 0x0 }, /* P16.A1 */
22304 { pool , P16_A2 , 2 , 16,
22305 0xfc00 , 0x9000 , 0 , 0,
22306 0x0 }, /* P16.A2 */
22307 { pool , P16_ADDU , 2 , 16,
22308 0xfc00 , 0xb000 , 0 , 0,
22309 0x0 }, /* P16.ADDU */
22310 { instruction , 0 , 0 , 16,
22311 0xfc00 , 0xd000 , &NMD::LI_16_ , 0,
22312 0x0 }, /* LI[16] */
22313 { instruction , 0 , 0 , 16,
22314 0xfc00 , 0xf000 , &NMD::ANDI_16_ , 0,
22315 0x0 }, /* ANDI[16] */
22316 { instruction , 0 , 0 , 16,
22317 0xfc00 , 0x1400 , &NMD::LW_16_ , 0,
22318 0x0 }, /* LW[16] */
22319 { instruction , 0 , 0 , 16,
22320 0xfc00 , 0x3400 , &NMD::LW_SP_ , 0,
22321 0x0 }, /* LW[SP] */
22322 { instruction , 0 , 0 , 16,
22323 0xfc00 , 0x5400 , &NMD::LW_GP16_ , 0,
22324 0x0 }, /* LW[GP16] */
22325 { instruction , 0 , 0 , 16,
22326 0xfc00 , 0x7400 , &NMD::LW_4X4_ , 0,
22327 XMMS_ }, /* LW[4X4] */
22328 { instruction , 0 , 0 , 16,
22329 0xfc00 , 0x9400 , &NMD::SW_16_ , 0,
22330 0x0 }, /* SW[16] */
22331 { instruction , 0 , 0 , 16,
22332 0xfc00 , 0xb400 , &NMD::SW_SP_ , 0,
22333 0x0 }, /* SW[SP] */
22334 { instruction , 0 , 0 , 16,
22335 0xfc00 , 0xd400 , &NMD::SW_GP16_ , 0,
22336 0x0 }, /* SW[GP16] */
22337 { instruction , 0 , 0 , 16,
22338 0xfc00 , 0xf400 , &NMD::SW_4X4_ , 0,
22339 XMMS_ }, /* SW[4X4] */
22340 { branch_instruction , 0 , 0 , 16,
22341 0xfc00 , 0x1800 , &NMD::BC_16_ , 0,
22342 0x0 }, /* BC[16] */
22343 { call_instruction , 0 , 0 , 16,
22344 0xfc00 , 0x3800 , &NMD::BALC_16_ , 0,
22345 0x0 }, /* BALC[16] */
22346 { reserved_block , 0 , 0 , 16,
22347 0xfc00 , 0x5800 , 0 , 0,
22348 0x0 }, /* P16~*(10) */
22349 { reserved_block , 0 , 0 , 16,
22350 0xfc00 , 0x7800 , 0 , 0,
22351 0x0 }, /* P16~*(14) */
22352 { branch_instruction , 0 , 0 , 16,
22353 0xfc00 , 0x9800 , &NMD::BEQZC_16_ , 0,
22354 0x0 }, /* BEQZC[16] */
22355 { branch_instruction , 0 , 0 , 16,
22356 0xfc00 , 0xb800 , &NMD::BNEZC_16_ , 0,
22357 0x0 }, /* BNEZC[16] */
22358 { pool , P16_BR , 2 , 16,
22359 0xfc00 , 0xd800 , 0 , 0,
22360 0x0 }, /* P16.BR */
22361 { reserved_block , 0 , 0 , 16,
22362 0xfc00 , 0xf800 , 0 , 0,
22363 0x0 }, /* P16~*(30) */
22364 { pool , P16_SR , 2 , 16,
22365 0xfc00 , 0x1c00 , 0 , 0,
22366 0x0 }, /* P16.SR */
22367 { pool , P16_4X4 , 4 , 16,
22368 0xfc00 , 0x3c00 , 0 , 0,
22369 0x0 }, /* P16.4X4 */
22370 { pool , P16_LB , 4 , 16,
22371 0xfc00 , 0x5c00 , 0 , 0,
22372 0x0 }, /* P16.LB */
22373 { pool , P16_LH , 4 , 16,
22374 0xfc00 , 0x7c00 , 0 , 0,
22375 0x0 }, /* P16.LH */
22376 { reserved_block , 0 , 0 , 16,
22377 0xfc00 , 0x9c00 , 0 , 0,
22378 0x0 }, /* P16~*(19) */
22379 { instruction , 0 , 0 , 16,
22380 0xfc00 , 0xbc00 , &NMD::MOVEP , 0,
22381 XMMS_ }, /* MOVEP */
22382 { reserved_block , 0 , 0 , 16,
22383 0xfc00 , 0xdc00 , 0 , 0,
22384 0x0 }, /* P16~*(27) */
22385 { instruction , 0 , 0 , 16,
22386 0xfc00 , 0xfc00 , &NMD::MOVEP_REV_ , 0,
22387 XMMS_ }, /* MOVEP[REV] */
22391 NMD::Pool NMD::MAJOR[2] = {
22392 { pool , P32 , 32 , 32,
22393 0x10000000, 0x00000000, 0 , 0,
22394 0x0 }, /* P32 */
22395 { pool , P16 , 32 , 16,
22396 0x1000 , 0x1000 , 0 , 0,
22397 0x0 }, /* P16 */