]> git.proxmox.com Git - mirror_qemu.git/blob - disas/nanomips.cpp
disas: nanoMIPS: Name more functions in a more descriptive way
[mirror_qemu.git] / disas / nanomips.cpp
1 /*
2 * Source file for nanoMIPS disassembler component of QEMU
3 *
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>
7 *
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.
12 *
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.
17 *
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/>.
20 *
21 */
22
23 extern "C" {
24 #include "qemu/osdep.h"
25 #include "disas/bfd.h"
26 }
27
28 #include <cstring>
29 #include <stdexcept>
30 #include <sstream>
31 #include <stdio.h>
32 #include <stdarg.h>
33
34 #include "nanomips.h"
35
36 #define IMGASSERTONCE(test)
37
38
39 int nanomips_dis(char *buf,
40 unsigned address,
41 unsigned short one,
42 unsigned short two,
43 unsigned short three)
44 {
45 std::string disasm;
46 uint16 bits[3] = {one, two, three};
47
48 NMD::TABLE_ENTRY_TYPE type;
49 NMD d(address, NMD::ALL_ATTRIBUTES);
50 int size = d.Disassemble(bits, disasm, type);
51
52 strcpy(buf, disasm.c_str());
53 return size;
54 }
55
56 int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
57 {
58 int status;
59 bfd_byte buffer[2];
60 uint16_t insn1 = 0, insn2 = 0, insn3 = 0;
61 char buf[200];
62
63 info->bytes_per_chunk = 2;
64 info->display_endian = info->endian;
65 info->insn_info_valid = 1;
66 info->branch_delay_insns = 0;
67 info->data_size = 0;
68 info->insn_type = dis_nonbranch;
69 info->target = 0;
70 info->target2 = 0;
71
72 status = (*info->read_memory_func)(memaddr, buffer, 2, info);
73 if (status != 0) {
74 (*info->memory_error_func)(status, memaddr, info);
75 return -1;
76 }
77
78 if (info->endian == BFD_ENDIAN_BIG) {
79 insn1 = bfd_getb16(buffer);
80 } else {
81 insn1 = bfd_getl16(buffer);
82 }
83 (*info->fprintf_func)(info->stream, "%04x ", insn1);
84
85 /* Handle 32-bit opcodes. */
86 if ((insn1 & 0x1000) == 0) {
87 status = (*info->read_memory_func)(memaddr + 2, buffer, 2, info);
88 if (status != 0) {
89 (*info->memory_error_func)(status, memaddr + 2, info);
90 return -1;
91 }
92
93 if (info->endian == BFD_ENDIAN_BIG) {
94 insn2 = bfd_getb16(buffer);
95 } else {
96 insn2 = bfd_getl16(buffer);
97 }
98 (*info->fprintf_func)(info->stream, "%04x ", insn2);
99 } else {
100 (*info->fprintf_func)(info->stream, " ");
101 }
102 /* Handle 48-bit opcodes. */
103 if ((insn1 >> 10) == 0x18) {
104 status = (*info->read_memory_func)(memaddr + 4, buffer, 2, info);
105 if (status != 0) {
106 (*info->memory_error_func)(status, memaddr + 4, info);
107 return -1;
108 }
109
110 if (info->endian == BFD_ENDIAN_BIG) {
111 insn3 = bfd_getb16(buffer);
112 } else {
113 insn3 = bfd_getl16(buffer);
114 }
115 (*info->fprintf_func)(info->stream, "%04x ", insn3);
116 } else {
117 (*info->fprintf_func)(info->stream, " ");
118 }
119
120 int length = nanomips_dis(buf, memaddr, insn1, insn2, insn3);
121
122 /* FIXME: Should probably use a hash table on the major opcode here. */
123
124 (*info->fprintf_func) (info->stream, "%s", buf);
125 if (length > 0) {
126 return length / 8;
127 }
128
129 info->insn_type = dis_noninsn;
130
131 return insn3 ? 6 : insn2 ? 4 : 2;
132 }
133
134
135 namespace img
136 {
137 address addr32(address a)
138 {
139 return a;
140 }
141
142 std::string format(const char *format, ...)
143 {
144 char buffer[256];
145 va_list args;
146 va_start(args, format);
147 int err = vsprintf(buffer, format, args);
148 if (err < 0) {
149 perror(buffer);
150 }
151 va_end(args);
152 return buffer;
153 }
154
155 std::string format(const char *format,
156 std::string s)
157 {
158 char buffer[256];
159
160 sprintf(buffer, format, s.c_str());
161
162 return buffer;
163 }
164
165 std::string format(const char *format,
166 std::string s1,
167 std::string s2)
168 {
169 char buffer[256];
170
171 sprintf(buffer, format, s1.c_str(), s2.c_str());
172
173 return buffer;
174 }
175
176 std::string format(const char *format,
177 std::string s1,
178 std::string s2,
179 std::string s3)
180 {
181 char buffer[256];
182
183 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str());
184
185 return buffer;
186 }
187
188 std::string format(const char *format,
189 std::string s1,
190 std::string s2,
191 std::string s3,
192 std::string s4)
193 {
194 char buffer[256];
195
196 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
197 s4.c_str());
198
199 return buffer;
200 }
201
202 std::string format(const char *format,
203 std::string s1,
204 std::string s2,
205 std::string s3,
206 std::string s4,
207 std::string s5)
208 {
209 char buffer[256];
210
211 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
212 s4.c_str(), s5.c_str());
213
214 return buffer;
215 }
216
217 std::string format(const char *format,
218 uint64 d,
219 std::string s2)
220 {
221 char buffer[256];
222
223 sprintf(buffer, format, d, s2.c_str());
224
225 return buffer;
226 }
227
228 std::string format(const char *format,
229 std::string s1,
230 uint64 d,
231 std::string s2)
232 {
233 char buffer[256];
234
235 sprintf(buffer, format, s1.c_str(), d, s2.c_str());
236
237 return buffer;
238 }
239
240 std::string format(const char *format,
241 std::string s1,
242 std::string s2,
243 uint64 d)
244 {
245 char buffer[256];
246
247 sprintf(buffer, format, s1.c_str(), s2.c_str(), d);
248
249 return buffer;
250 }
251
252 char as_char(int c)
253 {
254 return static_cast<char>(c);
255 }
256 };
257
258
259 std::string to_string(img::address a)
260 {
261 char buffer[256];
262 sprintf(buffer, "0x%" PRIx64, a);
263 return buffer;
264 }
265
266
267 uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size)
268 {
269 return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size);
270 }
271
272
273 int64 sign_extend(int64 data, int msb)
274 {
275 uint64 shift = 63 - msb;
276 return (data << shift) >> shift;
277 }
278
279
280 uint64 NMD::renumber_registers(uint64 index, uint64 *register_list,
281 size_t register_list_size)
282 {
283 if (index < register_list_size) {
284 return register_list[index];
285 }
286
287 throw std::runtime_error(img::format(
288 "Invalid register mapping index %" PRIu64
289 ", size of list = %zu",
290 index, register_list_size));
291 }
292
293
294 /*
295 * these functions should be decode functions but the json does not have
296 * decode sections so they are based on the encode, the equivalent decode
297 * functions need writing eventually.
298 */
299 uint64 NMD::encode_gpr3(uint64 d)
300 {
301 static uint64 register_list[] = { 16, 17, 18, 19, 4, 5, 6, 7 };
302 return renumber_registers(d, register_list,
303 sizeof(register_list) / sizeof(register_list[0]));
304 }
305
306
307 uint64 NMD::encode_gpr3_store(uint64 d)
308 {
309 static uint64 register_list[] = { 0, 17, 18, 19, 4, 5, 6, 7 };
310 return renumber_registers(d, register_list,
311 sizeof(register_list) / sizeof(register_list[0]));
312 }
313
314
315 uint64 NMD::encode_rd1_from_rd(uint64 d)
316 {
317 static uint64 register_list[] = { 4, 5 };
318 return renumber_registers(d, register_list,
319 sizeof(register_list) / sizeof(register_list[0]));
320 }
321
322
323 uint64 NMD::encode_gpr4_zero(uint64 d)
324 {
325 static uint64 register_list[] = { 8, 9, 10, 0, 4, 5, 6, 7,
326 16, 17, 18, 19, 20, 21, 22, 23 };
327 return renumber_registers(d, register_list,
328 sizeof(register_list) / sizeof(register_list[0]));
329 }
330
331
332 uint64 NMD::encode_gpr4(uint64 d)
333 {
334 static uint64 register_list[] = { 8, 9, 10, 11, 4, 5, 6, 7,
335 16, 17, 18, 19, 20, 21, 22, 23 };
336 return renumber_registers(d, register_list,
337 sizeof(register_list) / sizeof(register_list[0]));
338 }
339
340
341 uint64 NMD::encode_rd2_reg1(uint64 d)
342 {
343 static uint64 register_list[] = { 4, 5, 6, 7 };
344 return renumber_registers(d, register_list,
345 sizeof(register_list) / sizeof(register_list[0]));
346 }
347
348
349 uint64 NMD::encode_rd2_reg2(uint64 d)
350 {
351 static uint64 register_list[] = { 5, 6, 7, 8 };
352 return renumber_registers(d, register_list,
353 sizeof(register_list) / sizeof(register_list[0]));
354 }
355
356
357 uint64 NMD::copy(uint64 d)
358 {
359 return d;
360 }
361
362
363 int64 NMD::copy(int64 d)
364 {
365 return d;
366 }
367
368
369 int64 NMD::neg_copy(uint64 d)
370 {
371 return 0ll - d;
372 }
373
374
375 int64 NMD::neg_copy(int64 d)
376 {
377 return -d;
378 }
379
380
381 /* strange wrapper around gpr3 */
382 uint64 NMD::encode_rs3_and_check_rs3_ge_rt3(uint64 d)
383 {
384 return encode_gpr3(d);
385 }
386
387
388 /* strange wrapper around gpr3 */
389 uint64 NMD::encode_rs3_and_check_rs3_lt_rt3(uint64 d)
390 {
391 return encode_gpr3(d);
392 }
393
394
395 /* nop - done by extraction function */
396 uint64 NMD::encode_s_from_address(uint64 d)
397 {
398 return d;
399 }
400
401
402 /* nop - done by extraction function */
403 uint64 NMD::encode_u_from_address(uint64 d)
404 {
405 return d;
406 }
407
408
409 /* nop - done by extraction function */
410 uint64 NMD::encode_s_from_s_hi(uint64 d)
411 {
412 return d;
413 }
414
415
416 uint64 NMD::encode_count3_from_count(uint64 d)
417 {
418 IMGASSERTONCE(d < 8);
419 return d == 0ull ? 8ull : d;
420 }
421
422
423 uint64 NMD::encode_shift3_from_shift(uint64 d)
424 {
425 IMGASSERTONCE(d < 8);
426 return d == 0ull ? 8ull : d;
427 }
428
429
430 /* special value for load literal */
431 int64 NMD::encode_eu_from_s_li16(uint64 d)
432 {
433 IMGASSERTONCE(d < 128);
434 return d == 127 ? -1 : (int64)d;
435 }
436
437
438 uint64 NMD::encode_msbd_from_size(uint64 d)
439 {
440 IMGASSERTONCE(d < 32);
441 return d + 1;
442 }
443
444
445 uint64 NMD::encode_eu_from_u_andi16(uint64 d)
446 {
447 IMGASSERTONCE(d < 16);
448 if (d == 12) {
449 return 0x00ffull;
450 }
451 if (d == 13) {
452 return 0xffffull;
453 }
454 return d;
455 }
456
457
458 uint64 NMD::encode_msbd_from_pos_and_size(uint64 d)
459 {
460 IMGASSERTONCE(0);
461 return d;
462 }
463
464
465 /* save16 / restore16 ???? */
466 uint64 NMD::encode_rt1_from_rt(uint64 d)
467 {
468 return d ? 31 : 30;
469 }
470
471
472 /* ? */
473 uint64 NMD::encode_lsb_from_pos_and_size(uint64 d)
474 {
475 return d;
476 }
477
478
479 std::string NMD::save_restore_list(uint64 rt, uint64 count, uint64 gp)
480 {
481 std::string str;
482
483 for (uint64 counter = 0; counter != count; counter++) {
484 bool use_gp = gp && (counter == count - 1);
485 uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
486 str += img::format(",%s", GPR(this_rt));
487 }
488
489 return str;
490 }
491
492
493 std::string NMD::GPR(uint64 reg)
494 {
495 static const char *gpr_reg[32] = {
496 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
497 "a4", "a5", "a6", "a7", "r12", "r13", "r14", "r15",
498 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
499 "r24", "r25", "k0", "k1", "gp", "sp", "fp", "ra"
500 };
501
502 if (reg < 32) {
503 return gpr_reg[reg];
504 }
505
506 throw std::runtime_error(img::format("Invalid GPR register index %" PRIu64,
507 reg));
508 }
509
510
511 std::string NMD::FPR(uint64 reg)
512 {
513 static const char *fpr_reg[32] = {
514 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
515 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
516 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
517 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
518 };
519
520 if (reg < 32) {
521 return fpr_reg[reg];
522 }
523
524 throw std::runtime_error(img::format("Invalid FPR register index %" PRIu64,
525 reg));
526 }
527
528
529 std::string NMD::AC(uint64 reg)
530 {
531 static const char *ac_reg[4] = {
532 "ac0", "ac1", "ac2", "ac3"
533 };
534
535 if (reg < 4) {
536 return ac_reg[reg];
537 }
538
539 throw std::runtime_error(img::format("Invalid AC register index %" PRIu64,
540 reg));
541 }
542
543
544 std::string NMD::IMMEDIATE(uint64 value)
545 {
546 return img::format("0x%" PRIx64, value);
547 }
548
549
550 std::string NMD::IMMEDIATE(int64 value)
551 {
552 return img::format("%" PRId64, value);
553 }
554
555
556 std::string NMD::CPR(uint64 reg)
557 {
558 /* needs more work */
559 return img::format("CP%" PRIu64, reg);
560 }
561
562
563 std::string NMD::ADDRESS(uint64 value, int instruction_size)
564 {
565 /* token for string replace */
566 /* const char TOKEN_REPLACE = (char)0xa2; */
567 img::address address = m_pc + value + instruction_size;
568 /* symbol replacement */
569 /* return img::as_char(TOKEN_REPLACE) + to_string(address); */
570 return to_string(address);
571 }
572
573
574 uint64 NMD::extract_op_code_value(const uint16 * data, int size)
575 {
576 switch (size) {
577 case 16:
578 return data[0];
579 case 32:
580 return ((uint64)data[0] << 16) | data[1];
581 case 48:
582 return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2];
583 default:
584 return data[0];
585 }
586 }
587
588
589 int NMD::Disassemble(const uint16 * data, std::string & dis,
590 NMD::TABLE_ENTRY_TYPE & type)
591 {
592 return Disassemble(data, dis, type, MAJOR, 2);
593 }
594
595
596 /*
597 * Recurse through tables until the instruction is found then return
598 * the string and size
599 *
600 * inputs:
601 * pointer to a word stream,
602 * disassember table and size
603 * returns:
604 * instruction size - negative is error
605 * disassembly string - on error will constain error string
606 */
607 int NMD::Disassemble(const uint16 * data, std::string & dis,
608 NMD::TABLE_ENTRY_TYPE & type, const Pool *table,
609 int table_size)
610 {
611 try
612 {
613 for (int i = 0; i < table_size; i++) {
614 uint64 op_code = extract_op_code_value(data,
615 table[i].instructions_size);
616 if ((op_code & table[i].mask) == table[i].value) {
617 /* possible match */
618 conditional_function cond = table[i].condition;
619 if ((cond == 0) || (this->*cond)(op_code)) {
620 try
621 {
622 if (table[i].type == pool) {
623 return Disassemble(data, dis, type,
624 table[i].next_table,
625 table[i].next_table_size);
626 } else if ((table[i].type == instruction) ||
627 (table[i].type == call_instruction) ||
628 (table[i].type == branch_instruction) ||
629 (table[i].type == return_instruction)) {
630 if ((table[i].attributes != 0) &&
631 (m_requested_instruction_categories &
632 table[i].attributes) == 0) {
633 /*
634 * failed due to instruction having
635 * an ASE attribute and the requested version
636 * not having that attribute
637 */
638 dis = "ASE attribute missmatch";
639 return -5;
640 }
641 disassembly_function dis_fn = table[i].disassembly;
642 if (dis_fn == 0) {
643 dis = "disassembler failure - bad table entry";
644 return -6;
645 }
646 type = table[i].type;
647 dis = (this->*dis_fn)(op_code);
648 return table[i].instructions_size;
649 } else {
650 dis = "reserved instruction";
651 return -2;
652 }
653 }
654 catch (std::runtime_error & e)
655 {
656 dis = e.what();
657 return -3; /* runtime error */
658 }
659 }
660 }
661 }
662 }
663 catch (std::exception & e)
664 {
665 dis = e.what();
666 return -4; /* runtime error */
667 }
668
669 dis = "failed to disassemble";
670 return -1; /* failed to disassemble */
671 }
672
673
674 uint64 NMD::extract_code_18_to_0(uint64 instruction)
675 {
676 uint64 value = 0;
677 value |= extract_bits(instruction, 0, 19);
678 return value;
679 }
680
681
682 uint64 NMD::extract_shift3_2_1_0(uint64 instruction)
683 {
684 uint64 value = 0;
685 value |= extract_bits(instruction, 0, 3);
686 return value;
687 }
688
689
690 uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
691 {
692 uint64 value = 0;
693 value |= extract_bits(instruction, 3, 9) << 3;
694 return value;
695 }
696
697
698 uint64 NMD::extract_count_3_2_1_0(uint64 instruction)
699 {
700 uint64 value = 0;
701 value |= extract_bits(instruction, 0, 4);
702 return value;
703 }
704
705
706 uint64 NMD::extract_rtz3_9_8_7(uint64 instruction)
707 {
708 uint64 value = 0;
709 value |= extract_bits(instruction, 7, 3);
710 return value;
711 }
712
713
714 uint64 NMD::extract_u_17_to_1__s1(uint64 instruction)
715 {
716 uint64 value = 0;
717 value |= extract_bits(instruction, 1, 17) << 1;
718 return value;
719 }
720
721
722 int64 NMD::extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
723 {
724 int64 value = 0;
725 value |= extract_bits(instruction, 11, 10);
726 value = sign_extend(value, 9);
727 return value;
728 }
729
730
731 int64 NMD::extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
732 {
733 int64 value = 0;
734 value |= extract_bits(instruction, 0, 1) << 11;
735 value |= extract_bits(instruction, 1, 10) << 1;
736 value = sign_extend(value, 11);
737 return value;
738 }
739
740
741 uint64 NMD::extract_u_10(uint64 instruction)
742 {
743 uint64 value = 0;
744 value |= extract_bits(instruction, 10, 1);
745 return value;
746 }
747
748
749 uint64 NMD::extract_rtz4_27_26_25_23_22_21(uint64 instruction)
750 {
751 uint64 value = 0;
752 value |= extract_bits(instruction, 21, 3);
753 value |= extract_bits(instruction, 25, 1) << 3;
754 return value;
755 }
756
757
758 uint64 NMD::extract_sa_15_14_13_12_11(uint64 instruction)
759 {
760 uint64 value = 0;
761 value |= extract_bits(instruction, 11, 5);
762 return value;
763 }
764
765
766 uint64 NMD::extract_shift_4_3_2_1_0(uint64 instruction)
767 {
768 uint64 value = 0;
769 value |= extract_bits(instruction, 0, 5);
770 return value;
771 }
772
773
774 uint64 NMD::extract_shiftx_10_9_8_7__s1(uint64 instruction)
775 {
776 uint64 value = 0;
777 value |= extract_bits(instruction, 7, 4) << 1;
778 return value;
779 }
780
781
782 uint64 NMD::extract_hint_25_24_23_22_21(uint64 instruction)
783 {
784 uint64 value = 0;
785 value |= extract_bits(instruction, 21, 5);
786 return value;
787 }
788
789
790 uint64 NMD::extract_count3_14_13_12(uint64 instruction)
791 {
792 uint64 value = 0;
793 value |= extract_bits(instruction, 12, 3);
794 return value;
795 }
796
797
798 int64 NMD::extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
799 {
800 int64 value = 0;
801 value |= extract_bits(instruction, 0, 1) << 31;
802 value |= extract_bits(instruction, 2, 10) << 21;
803 value |= extract_bits(instruction, 12, 9) << 12;
804 value = sign_extend(value, 31);
805 return value;
806 }
807
808
809 int64 NMD::extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
810 {
811 int64 value = 0;
812 value |= extract_bits(instruction, 0, 1) << 7;
813 value |= extract_bits(instruction, 1, 6) << 1;
814 value = sign_extend(value, 7);
815 return value;
816 }
817
818
819 uint64 NMD::extract_u2_10_9(uint64 instruction)
820 {
821 uint64 value = 0;
822 value |= extract_bits(instruction, 9, 2);
823 return value;
824 }
825
826
827 uint64 NMD::extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction)
828 {
829 uint64 value = 0;
830 value |= extract_bits(instruction, 16, 10);
831 return value;
832 }
833
834
835 uint64 NMD::extract_rs_20_19_18_17_16(uint64 instruction)
836 {
837 uint64 value = 0;
838 value |= extract_bits(instruction, 16, 5);
839 return value;
840 }
841
842
843 uint64 NMD::extract_u_2_1__s1(uint64 instruction)
844 {
845 uint64 value = 0;
846 value |= extract_bits(instruction, 1, 2) << 1;
847 return value;
848 }
849
850
851 uint64 NMD::extract_stripe_6(uint64 instruction)
852 {
853 uint64 value = 0;
854 value |= extract_bits(instruction, 6, 1);
855 return value;
856 }
857
858
859 uint64 NMD::extract_ac_13_12(uint64 instruction)
860 {
861 uint64 value = 0;
862 value |= extract_bits(instruction, 14, 2);
863 return value;
864 }
865
866
867 uint64 NMD::extract_shift_20_19_18_17_16(uint64 instruction)
868 {
869 uint64 value = 0;
870 value |= extract_bits(instruction, 16, 5);
871 return value;
872 }
873
874
875 uint64 NMD::extract_rdl_25_24(uint64 instruction)
876 {
877 uint64 value = 0;
878 value |= extract_bits(instruction, 24, 1);
879 return value;
880 }
881
882
883 int64 NMD::extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
884 {
885 int64 value = 0;
886 value |= extract_bits(instruction, 0, 1) << 10;
887 value |= extract_bits(instruction, 1, 9) << 1;
888 value = sign_extend(value, 10);
889 return value;
890 }
891
892
893 uint64 NMD::extract_eu_6_5_4_3_2_1_0(uint64 instruction)
894 {
895 uint64 value = 0;
896 value |= extract_bits(instruction, 0, 7);
897 return value;
898 }
899
900
901 uint64 NMD::extract_shift_5_4_3_2_1_0(uint64 instruction)
902 {
903 uint64 value = 0;
904 value |= extract_bits(instruction, 0, 6);
905 return value;
906 }
907
908
909 uint64 NMD::extract_count_19_18_17_16(uint64 instruction)
910 {
911 uint64 value = 0;
912 value |= extract_bits(instruction, 16, 4);
913 return value;
914 }
915
916
917 uint64 NMD::extract_code_2_1_0(uint64 instruction)
918 {
919 uint64 value = 0;
920 value |= extract_bits(instruction, 0, 3);
921 return value;
922 }
923
924
925 uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction)
926 {
927 uint64 value = 0;
928 value |= extract_bits(instruction, 0, 12);
929 return value;
930 }
931
932
933 uint64 NMD::extract_rs_4_3_2_1_0(uint64 instruction)
934 {
935 uint64 value = 0;
936 value |= extract_bits(instruction, 0, 5);
937 return value;
938 }
939
940
941 uint64 NMD::extract_u_20_to_3__s3(uint64 instruction)
942 {
943 uint64 value = 0;
944 value |= extract_bits(instruction, 3, 18) << 3;
945 return value;
946 }
947
948
949 uint64 NMD::extract_u_3_2_1_0__s2(uint64 instruction)
950 {
951 uint64 value = 0;
952 value |= extract_bits(instruction, 0, 4) << 2;
953 return value;
954 }
955
956
957 uint64 NMD::extract_cofun_25_24_23(uint64 instruction)
958 {
959 uint64 value = 0;
960 value |= extract_bits(instruction, 3, 23);
961 return value;
962 }
963
964
965 uint64 NMD::extract_u_2_1_0__s2(uint64 instruction)
966 {
967 uint64 value = 0;
968 value |= extract_bits(instruction, 0, 3) << 2;
969 return value;
970 }
971
972
973 uint64 NMD::extract_rd3_3_2_1(uint64 instruction)
974 {
975 uint64 value = 0;
976 value |= extract_bits(instruction, 1, 3);
977 return value;
978 }
979
980
981 uint64 NMD::extract_sa_15_14_13_12(uint64 instruction)
982 {
983 uint64 value = 0;
984 value |= extract_bits(instruction, 12, 4);
985 return value;
986 }
987
988
989 uint64 NMD::extract_rt_25_24_23_22_21(uint64 instruction)
990 {
991 uint64 value = 0;
992 value |= extract_bits(instruction, 21, 5);
993 return value;
994 }
995
996
997 uint64 NMD::extract_ru_7_6_5_4_3(uint64 instruction)
998 {
999 uint64 value = 0;
1000 value |= extract_bits(instruction, 3, 5);
1001 return value;
1002 }
1003
1004
1005 uint64 NMD::extract_u_17_to_0(uint64 instruction)
1006 {
1007 uint64 value = 0;
1008 value |= extract_bits(instruction, 0, 18);
1009 return value;
1010 }
1011
1012
1013 uint64 NMD::extract_rsz4_4_2_1_0(uint64 instruction)
1014 {
1015 uint64 value = 0;
1016 value |= extract_bits(instruction, 0, 3);
1017 value |= extract_bits(instruction, 4, 1) << 3;
1018 return value;
1019 }
1020
1021
1022 int64 NMD::extract_s__se21_0_20_to_1_s1(uint64 instruction)
1023 {
1024 int64 value = 0;
1025 value |= extract_bits(instruction, 0, 1) << 21;
1026 value |= extract_bits(instruction, 1, 20) << 1;
1027 value = sign_extend(value, 21);
1028 return value;
1029 }
1030
1031
1032 uint64 NMD::extract_op_25_to_3(uint64 instruction)
1033 {
1034 uint64 value = 0;
1035 value |= extract_bits(instruction, 3, 23);
1036 return value;
1037 }
1038
1039
1040 uint64 NMD::extract_rs4_4_2_1_0(uint64 instruction)
1041 {
1042 uint64 value = 0;
1043 value |= extract_bits(instruction, 0, 3);
1044 value |= extract_bits(instruction, 4, 1) << 3;
1045 return value;
1046 }
1047
1048
1049 uint64 NMD::extract_bit_23_22_21(uint64 instruction)
1050 {
1051 uint64 value = 0;
1052 value |= extract_bits(instruction, 21, 3);
1053 return value;
1054 }
1055
1056
1057 uint64 NMD::extract_rt_41_40_39_38_37(uint64 instruction)
1058 {
1059 uint64 value = 0;
1060 value |= extract_bits(instruction, 37, 5);
1061 return value;
1062 }
1063
1064
1065 int64 NMD::extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
1066 {
1067 int64 value = 0;
1068 value |= extract_bits(instruction, 16, 6);
1069 value = sign_extend(value, 5);
1070 return value;
1071 }
1072
1073
1074 uint64 NMD::extract_rd2_3_8(uint64 instruction)
1075 {
1076 uint64 value = 0;
1077 value |= extract_bits(instruction, 3, 1) << 1;
1078 value |= extract_bits(instruction, 8, 1);
1079 return value;
1080 }
1081
1082
1083 uint64 NMD::extract_code_17_to_0(uint64 instruction)
1084 {
1085 uint64 value = 0;
1086 value |= extract_bits(instruction, 0, 18);
1087 return value;
1088 }
1089
1090
1091 uint64 NMD::extract_size_20_19_18_17_16(uint64 instruction)
1092 {
1093 uint64 value = 0;
1094 value |= extract_bits(instruction, 16, 5);
1095 return value;
1096 }
1097
1098
1099 int64 NMD::extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
1100 {
1101 int64 value = 0;
1102 value |= extract_bits(instruction, 2, 6) << 2;
1103 value |= extract_bits(instruction, 15, 1) << 8;
1104 value = sign_extend(value, 8);
1105 return value;
1106 }
1107
1108
1109 uint64 NMD::extract_u_15_to_0(uint64 instruction)
1110 {
1111 uint64 value = 0;
1112 value |= extract_bits(instruction, 0, 16);
1113 return value;
1114 }
1115
1116
1117 uint64 NMD::extract_fs_20_19_18_17_16(uint64 instruction)
1118 {
1119 uint64 value = 0;
1120 value |= extract_bits(instruction, 16, 5);
1121 return value;
1122 }
1123
1124
1125 int64 NMD::extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
1126 {
1127 int64 value = 0;
1128 value |= extract_bits(instruction, 0, 8);
1129 value |= extract_bits(instruction, 15, 1) << 8;
1130 value = sign_extend(value, 8);
1131 return value;
1132 }
1133
1134
1135 uint64 NMD::extract_stype_20_19_18_17_16(uint64 instruction)
1136 {
1137 uint64 value = 0;
1138 value |= extract_bits(instruction, 16, 5);
1139 return value;
1140 }
1141
1142
1143 uint64 NMD::extract_rtl_11(uint64 instruction)
1144 {
1145 uint64 value = 0;
1146 value |= extract_bits(instruction, 9, 1);
1147 return value;
1148 }
1149
1150
1151 uint64 NMD::extract_hs_20_19_18_17_16(uint64 instruction)
1152 {
1153 uint64 value = 0;
1154 value |= extract_bits(instruction, 16, 5);
1155 return value;
1156 }
1157
1158
1159 uint64 NMD::extract_sel_13_12_11(uint64 instruction)
1160 {
1161 uint64 value = 0;
1162 value |= extract_bits(instruction, 11, 3);
1163 return value;
1164 }
1165
1166
1167 uint64 NMD::extract_lsb_4_3_2_1_0(uint64 instruction)
1168 {
1169 uint64 value = 0;
1170 value |= extract_bits(instruction, 0, 5);
1171 return value;
1172 }
1173
1174
1175 uint64 NMD::extract_gp_2(uint64 instruction)
1176 {
1177 uint64 value = 0;
1178 value |= extract_bits(instruction, 2, 1);
1179 return value;
1180 }
1181
1182
1183 uint64 NMD::extract_rt3_9_8_7(uint64 instruction)
1184 {
1185 uint64 value = 0;
1186 value |= extract_bits(instruction, 7, 3);
1187 return value;
1188 }
1189
1190
1191 uint64 NMD::extract_ft_25_24_23_22_21(uint64 instruction)
1192 {
1193 uint64 value = 0;
1194 value |= extract_bits(instruction, 21, 5);
1195 return value;
1196 }
1197
1198
1199 uint64 NMD::extract_u_17_16_15_14_13_12_11(uint64 instruction)
1200 {
1201 uint64 value = 0;
1202 value |= extract_bits(instruction, 11, 7);
1203 return value;
1204 }
1205
1206
1207 uint64 NMD::extract_cs_20_19_18_17_16(uint64 instruction)
1208 {
1209 uint64 value = 0;
1210 value |= extract_bits(instruction, 16, 5);
1211 return value;
1212 }
1213
1214
1215 uint64 NMD::extract_rt4_9_7_6_5(uint64 instruction)
1216 {
1217 uint64 value = 0;
1218 value |= extract_bits(instruction, 5, 3);
1219 value |= extract_bits(instruction, 9, 1) << 3;
1220 return value;
1221 }
1222
1223
1224 uint64 NMD::extract_msbt_10_9_8_7_6(uint64 instruction)
1225 {
1226 uint64 value = 0;
1227 value |= extract_bits(instruction, 6, 5);
1228 return value;
1229 }
1230
1231
1232 uint64 NMD::extract_u_5_4_3_2_1_0__s2(uint64 instruction)
1233 {
1234 uint64 value = 0;
1235 value |= extract_bits(instruction, 0, 6) << 2;
1236 return value;
1237 }
1238
1239
1240 uint64 NMD::extract_sa_15_14_13(uint64 instruction)
1241 {
1242 uint64 value = 0;
1243 value |= extract_bits(instruction, 13, 3);
1244 return value;
1245 }
1246
1247
1248 int64 NMD::extract_s__se14_0_13_to_1_s1(uint64 instruction)
1249 {
1250 int64 value = 0;
1251 value |= extract_bits(instruction, 0, 1) << 14;
1252 value |= extract_bits(instruction, 1, 13) << 1;
1253 value = sign_extend(value, 14);
1254 return value;
1255 }
1256
1257
1258 uint64 NMD::extract_rs3_6_5_4(uint64 instruction)
1259 {
1260 uint64 value = 0;
1261 value |= extract_bits(instruction, 4, 3);
1262 return value;
1263 }
1264
1265
1266 uint64 NMD::extract_u_31_to_0__s32(uint64 instruction)
1267 {
1268 uint64 value = 0;
1269 value |= extract_bits(instruction, 0, 32) << 32;
1270 return value;
1271 }
1272
1273
1274 uint64 NMD::extract_shift_10_9_8_7_6(uint64 instruction)
1275 {
1276 uint64 value = 0;
1277 value |= extract_bits(instruction, 6, 5);
1278 return value;
1279 }
1280
1281
1282 uint64 NMD::extract_cs_25_24_23_22_21(uint64 instruction)
1283 {
1284 uint64 value = 0;
1285 value |= extract_bits(instruction, 21, 5);
1286 return value;
1287 }
1288
1289
1290 uint64 NMD::extract_shiftx_11_10_9_8_7_6(uint64 instruction)
1291 {
1292 uint64 value = 0;
1293 value |= extract_bits(instruction, 6, 6);
1294 return value;
1295 }
1296
1297
1298 uint64 NMD::extract_rt_9_8_7_6_5(uint64 instruction)
1299 {
1300 uint64 value = 0;
1301 value |= extract_bits(instruction, 5, 5);
1302 return value;
1303 }
1304
1305
1306 uint64 NMD::extract_op_25_24_23_22_21(uint64 instruction)
1307 {
1308 uint64 value = 0;
1309 value |= extract_bits(instruction, 21, 5);
1310 return value;
1311 }
1312
1313
1314 uint64 NMD::extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
1315 {
1316 uint64 value = 0;
1317 value |= extract_bits(instruction, 0, 7) << 2;
1318 return value;
1319 }
1320
1321
1322 uint64 NMD::extract_bit_16_15_14_13_12_11(uint64 instruction)
1323 {
1324 uint64 value = 0;
1325 value |= extract_bits(instruction, 11, 6);
1326 return value;
1327 }
1328
1329
1330 uint64 NMD::extract_mask_20_19_18_17_16_15_14(uint64 instruction)
1331 {
1332 uint64 value = 0;
1333 value |= extract_bits(instruction, 14, 7);
1334 return value;
1335 }
1336
1337
1338 uint64 NMD::extract_eu_3_2_1_0(uint64 instruction)
1339 {
1340 uint64 value = 0;
1341 value |= extract_bits(instruction, 0, 4);
1342 return value;
1343 }
1344
1345
1346 uint64 NMD::extract_u_7_6_5_4__s4(uint64 instruction)
1347 {
1348 uint64 value = 0;
1349 value |= extract_bits(instruction, 4, 4) << 4;
1350 return value;
1351 }
1352
1353
1354 int64 NMD::extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
1355 {
1356 int64 value = 0;
1357 value |= extract_bits(instruction, 3, 5) << 3;
1358 value |= extract_bits(instruction, 15, 1) << 8;
1359 value = sign_extend(value, 8);
1360 return value;
1361 }
1362
1363
1364 uint64 NMD::extract_ft_15_14_13_12_11(uint64 instruction)
1365 {
1366 uint64 value = 0;
1367 value |= extract_bits(instruction, 11, 5);
1368 return value;
1369 }
1370
1371
1372 int64 NMD::extract_s__se31_15_to_0_31_to_16(uint64 instruction)
1373 {
1374 int64 value = 0;
1375 value |= extract_bits(instruction, 0, 16) << 16;
1376 value |= extract_bits(instruction, 16, 16);
1377 value = sign_extend(value, 31);
1378 return value;
1379 }
1380
1381
1382 uint64 NMD::extract_u_20_19_18_17_16_15_14_13(uint64 instruction)
1383 {
1384 uint64 value = 0;
1385 value |= extract_bits(instruction, 13, 8);
1386 return value;
1387 }
1388
1389
1390 uint64 NMD::extract_u_17_to_2__s2(uint64 instruction)
1391 {
1392 uint64 value = 0;
1393 value |= extract_bits(instruction, 2, 16) << 2;
1394 return value;
1395 }
1396
1397
1398 uint64 NMD::extract_rd_15_14_13_12_11(uint64 instruction)
1399 {
1400 uint64 value = 0;
1401 value |= extract_bits(instruction, 11, 5);
1402 return value;
1403 }
1404
1405
1406 uint64 NMD::extract_c0s_20_19_18_17_16(uint64 instruction)
1407 {
1408 uint64 value = 0;
1409 value |= extract_bits(instruction, 16, 5);
1410 return value;
1411 }
1412
1413
1414 uint64 NMD::extract_code_1_0(uint64 instruction)
1415 {
1416 uint64 value = 0;
1417 value |= extract_bits(instruction, 0, 2);
1418 return value;
1419 }
1420
1421
1422 int64 NMD::extract_s__se25_0_24_to_1_s1(uint64 instruction)
1423 {
1424 int64 value = 0;
1425 value |= extract_bits(instruction, 0, 1) << 25;
1426 value |= extract_bits(instruction, 1, 24) << 1;
1427 value = sign_extend(value, 25);
1428 return value;
1429 }
1430
1431
1432 uint64 NMD::extract_u_1_0(uint64 instruction)
1433 {
1434 uint64 value = 0;
1435 value |= extract_bits(instruction, 0, 2);
1436 return value;
1437 }
1438
1439
1440 uint64 NMD::extract_u_3_8__s2(uint64 instruction)
1441 {
1442 uint64 value = 0;
1443 value |= extract_bits(instruction, 3, 1) << 3;
1444 value |= extract_bits(instruction, 8, 1) << 2;
1445 return value;
1446 }
1447
1448
1449 uint64 NMD::extract_fd_15_14_13_12_11(uint64 instruction)
1450 {
1451 uint64 value = 0;
1452 value |= extract_bits(instruction, 11, 5);
1453 return value;
1454 }
1455
1456
1457 uint64 NMD::extract_u_4_3_2_1_0__s2(uint64 instruction)
1458 {
1459 uint64 value = 0;
1460 value |= extract_bits(instruction, 0, 5) << 2;
1461 return value;
1462 }
1463
1464
1465 uint64 NMD::extract_rtz4_9_7_6_5(uint64 instruction)
1466 {
1467 uint64 value = 0;
1468 value |= extract_bits(instruction, 5, 3);
1469 value |= extract_bits(instruction, 9, 1) << 3;
1470 return value;
1471 }
1472
1473
1474 uint64 NMD::extract_sel_15_14_13_12_11(uint64 instruction)
1475 {
1476 uint64 value = 0;
1477 value |= extract_bits(instruction, 11, 5);
1478 return value;
1479 }
1480
1481
1482 uint64 NMD::extract_ct_25_24_23_22_21(uint64 instruction)
1483 {
1484 uint64 value = 0;
1485 value |= extract_bits(instruction, 21, 5);
1486 return value;
1487 }
1488
1489
1490 uint64 NMD::extract_u_20_to_2__s2(uint64 instruction)
1491 {
1492 uint64 value = 0;
1493 value |= extract_bits(instruction, 2, 19) << 2;
1494 return value;
1495 }
1496
1497
1498 int64 NMD::extract_s__se3_4_2_1_0(uint64 instruction)
1499 {
1500 int64 value = 0;
1501 value |= extract_bits(instruction, 0, 3);
1502 value |= extract_bits(instruction, 4, 1) << 3;
1503 value = sign_extend(value, 3);
1504 return value;
1505 }
1506
1507
1508 uint64 NMD::extract_u_3_2_1_0__s1(uint64 instruction)
1509 {
1510 uint64 value = 0;
1511 value |= extract_bits(instruction, 0, 4) << 1;
1512 return value;
1513 }
1514
1515
1516
1517 bool NMD::ADDIU_32__cond(uint64 instruction)
1518 {
1519 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1520 return rt != 0;
1521 }
1522
1523
1524 bool NMD::ADDIU_RS5__cond(uint64 instruction)
1525 {
1526 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1527 return rt != 0;
1528 }
1529
1530
1531 bool NMD::BALRSC_cond(uint64 instruction)
1532 {
1533 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1534 return rt != 0;
1535 }
1536
1537
1538 bool NMD::BEQC_16__cond(uint64 instruction)
1539 {
1540 uint64 rs3 = extract_rs3_6_5_4(instruction);
1541 uint64 rt3 = extract_rt3_9_8_7(instruction);
1542 uint64 u = extract_u_3_2_1_0__s1(instruction);
1543 return rs3 < rt3 && u != 0;
1544 }
1545
1546
1547 bool NMD::BNEC_16__cond(uint64 instruction)
1548 {
1549 uint64 rs3 = extract_rs3_6_5_4(instruction);
1550 uint64 rt3 = extract_rt3_9_8_7(instruction);
1551 uint64 u = extract_u_3_2_1_0__s1(instruction);
1552 return rs3 >= rt3 && u != 0;
1553 }
1554
1555
1556 bool NMD::MOVE_cond(uint64 instruction)
1557 {
1558 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1559 return rt != 0;
1560 }
1561
1562
1563 bool NMD::P16_BR1_cond(uint64 instruction)
1564 {
1565 uint64 u = extract_u_3_2_1_0__s1(instruction);
1566 return u != 0;
1567 }
1568
1569
1570 bool NMD::PREF_S9__cond(uint64 instruction)
1571 {
1572 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1573 return hint != 31;
1574 }
1575
1576
1577 bool NMD::PREFE_cond(uint64 instruction)
1578 {
1579 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1580 return hint != 31;
1581 }
1582
1583
1584 bool NMD::SLTU_cond(uint64 instruction)
1585 {
1586 uint64 rd = extract_rd_15_14_13_12_11(instruction);
1587 return rd != 0;
1588 }
1589
1590
1591
1592 /*
1593 * ABS.D fd, fs - Floating Point Absolute Value
1594 *
1595 * 3 2 1
1596 * 10987654321098765432109876543210
1597 * 010001 00000 000101
1598 * fmt -----
1599 * fs -----
1600 * fd -----
1601 */
1602 std::string NMD::ABS_D(uint64 instruction)
1603 {
1604 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1605 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1606
1607 std::string fs = FPR(copy(fs_value));
1608 std::string fd = FPR(copy(fd_value));
1609
1610 return img::format("ABS.D %s, %s", fd, fs);
1611 }
1612
1613
1614 /*
1615 * ABS.S fd, fs - Floating Point Absolute Value
1616 *
1617 * 3 2 1
1618 * 10987654321098765432109876543210
1619 * 010001 00000 000101
1620 * fmt -----
1621 * fd -----
1622 * fs -----
1623 */
1624 std::string NMD::ABS_S(uint64 instruction)
1625 {
1626 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1627 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1628
1629 std::string fs = FPR(copy(fs_value));
1630 std::string fd = FPR(copy(fd_value));
1631
1632 return img::format("ABS.S %s, %s", fd, fs);
1633 }
1634
1635
1636 /*
1637 * ABSQ_S.PH rt, rs - Find Absolute Value of Two Fractional Halfwords
1638 *
1639 * 3 2 1
1640 * 10987654321098765432109876543210
1641 * 001000 0001000100111111
1642 * rt -----
1643 * rs -----
1644 */
1645 std::string NMD::ABSQ_S_PH(uint64 instruction)
1646 {
1647 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1648 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1649
1650 std::string rt = GPR(copy(rt_value));
1651 std::string rs = GPR(copy(rs_value));
1652
1653 return img::format("ABSQ_S.PH %s, %s", rt, rs);
1654 }
1655
1656
1657 /*
1658 * ABSQ_S.QB rt, rs - Find Absolute Value of Four Fractional Byte Values
1659 *
1660 * 3 2 1
1661 * 10987654321098765432109876543210
1662 * 001000 0000000100111111
1663 * rt -----
1664 * rs -----
1665 */
1666 std::string NMD::ABSQ_S_QB(uint64 instruction)
1667 {
1668 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1669 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1670
1671 std::string rt = GPR(copy(rt_value));
1672 std::string rs = GPR(copy(rs_value));
1673
1674 return img::format("ABSQ_S.QB %s, %s", rt, rs);
1675 }
1676
1677
1678 /*
1679 *
1680 *
1681 * 3 2 1
1682 * 10987654321098765432109876543210
1683 * 001000 0010000100111111
1684 * rt -----
1685 * rs -----
1686 */
1687 std::string NMD::ABSQ_S_W(uint64 instruction)
1688 {
1689 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1690 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1691
1692 std::string rt = GPR(copy(rt_value));
1693 std::string rs = GPR(copy(rs_value));
1694
1695 return img::format("ABSQ_S.W %s, %s", rt, rs);
1696 }
1697
1698
1699 /*
1700 *
1701 *
1702 * 3 2 1
1703 * 10987654321098765432109876543210
1704 * 001000 0010000100111111
1705 * rt -----
1706 * rs -----
1707 */
1708 std::string NMD::ACLR(uint64 instruction)
1709 {
1710 uint64 bit_value = extract_bit_23_22_21(instruction);
1711 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
1712 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1713
1714 std::string bit = IMMEDIATE(copy(bit_value));
1715 std::string s = IMMEDIATE(copy(s_value));
1716 std::string rs = GPR(copy(rs_value));
1717
1718 return img::format("ACLR %s, %s(%s)", bit, s, rs);
1719 }
1720
1721
1722 /*
1723 *
1724 *
1725 * 3 2 1
1726 * 10987654321098765432109876543210
1727 * 001000 0010000100111111
1728 * rt -----
1729 * rs -----
1730 */
1731 std::string NMD::ADD(uint64 instruction)
1732 {
1733 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1734 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1735 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1736
1737 std::string rd = GPR(copy(rd_value));
1738 std::string rs = GPR(copy(rs_value));
1739 std::string rt = GPR(copy(rt_value));
1740
1741 return img::format("ADD %s, %s, %s", rd, rs, rt);
1742 }
1743
1744
1745 /*
1746 * ADD.D fd, fs, ft - Floating Point Add
1747 *
1748 * 3 2 1
1749 * 10987654321098765432109876543210
1750 * 010001 000101
1751 * fmt -----
1752 * ft -----
1753 * fs -----
1754 * fd -----
1755 */
1756 std::string NMD::ADD_D(uint64 instruction)
1757 {
1758 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1759 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1760 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1761
1762 std::string ft = FPR(copy(ft_value));
1763 std::string fs = FPR(copy(fs_value));
1764 std::string fd = FPR(copy(fd_value));
1765
1766 return img::format("ADD.D %s, %s, %s", fd, fs, ft);
1767 }
1768
1769
1770 /*
1771 * ADD.S fd, fs, ft - Floating Point Add
1772 *
1773 * 3 2 1
1774 * 10987654321098765432109876543210
1775 * 010001 000101
1776 * fmt -----
1777 * ft -----
1778 * fs -----
1779 * fd -----
1780 */
1781 std::string NMD::ADD_S(uint64 instruction)
1782 {
1783 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1784 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1785 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1786
1787 std::string ft = FPR(copy(ft_value));
1788 std::string fs = FPR(copy(fs_value));
1789 std::string fd = FPR(copy(fd_value));
1790
1791 return img::format("ADD.S %s, %s, %s", fd, fs, ft);
1792 }
1793
1794
1795 /*
1796 *
1797 *
1798 * 3 2 1
1799 * 10987654321098765432109876543210
1800 * 001000 0010000100111111
1801 * rt -----
1802 * rs -----
1803 */
1804 std::string NMD::ADDIU_32_(uint64 instruction)
1805 {
1806 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1807 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1808 uint64 u_value = extract_u_15_to_0(instruction);
1809
1810 std::string rt = GPR(copy(rt_value));
1811 std::string rs = GPR(copy(rs_value));
1812 std::string u = IMMEDIATE(copy(u_value));
1813
1814 return img::format("ADDIU %s, %s, %s", rt, rs, u);
1815 }
1816
1817
1818 /*
1819 *
1820 *
1821 * 3 2 1
1822 * 10987654321098765432109876543210
1823 * 001000 0010000100111111
1824 * rt -----
1825 * rs -----
1826 */
1827 std::string NMD::ADDIU_48_(uint64 instruction)
1828 {
1829 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1830 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1831
1832 std::string rt = GPR(copy(rt_value));
1833 std::string s = IMMEDIATE(copy(s_value));
1834
1835 return img::format("ADDIU %s, %s", rt, s);
1836 }
1837
1838
1839 /*
1840 *
1841 *
1842 * 3 2 1
1843 * 10987654321098765432109876543210
1844 * 001000 0010000100111111
1845 * rt -----
1846 * rs -----
1847 */
1848 std::string NMD::ADDIU_GP48_(uint64 instruction)
1849 {
1850 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1851 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1852
1853 std::string rt = GPR(copy(rt_value));
1854 std::string s = IMMEDIATE(copy(s_value));
1855
1856 return img::format("ADDIU %s, $%d, %s", rt, 28, s);
1857 }
1858
1859
1860 /*
1861 *
1862 *
1863 * 3 2 1
1864 * 10987654321098765432109876543210
1865 * 001000 0010000100111111
1866 * rt -----
1867 * rs -----
1868 */
1869 std::string NMD::ADDIU_GP_B_(uint64 instruction)
1870 {
1871 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1872 uint64 u_value = extract_u_17_to_0(instruction);
1873
1874 std::string rt = GPR(copy(rt_value));
1875 std::string u = IMMEDIATE(copy(u_value));
1876
1877 return img::format("ADDIU %s, $%d, %s", rt, 28, u);
1878 }
1879
1880
1881 /*
1882 *
1883 *
1884 * 3 2 1
1885 * 10987654321098765432109876543210
1886 * 001000 0010000100111111
1887 * rt -----
1888 * rs -----
1889 */
1890 std::string NMD::ADDIU_GP_W_(uint64 instruction)
1891 {
1892 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1893 uint64 u_value = extract_u_20_to_2__s2(instruction);
1894
1895 std::string rt = GPR(copy(rt_value));
1896 std::string u = IMMEDIATE(copy(u_value));
1897
1898 return img::format("ADDIU %s, $%d, %s", rt, 28, u);
1899 }
1900
1901
1902 /*
1903 *
1904 *
1905 * 3 2 1
1906 * 10987654321098765432109876543210
1907 * 001000 0010000100111111
1908 * rt -----
1909 * rs -----
1910 */
1911 std::string NMD::ADDIU_NEG_(uint64 instruction)
1912 {
1913 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1914 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1915 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
1916
1917 std::string rt = GPR(copy(rt_value));
1918 std::string rs = GPR(copy(rs_value));
1919 std::string u = IMMEDIATE(neg_copy(u_value));
1920
1921 return img::format("ADDIU %s, %s, %s", rt, rs, u);
1922 }
1923
1924
1925 /*
1926 *
1927 *
1928 * 3 2 1
1929 * 10987654321098765432109876543210
1930 * 001000 0010000100111111
1931 * rt -----
1932 * rs -----
1933 */
1934 std::string NMD::ADDIU_R1_SP_(uint64 instruction)
1935 {
1936 uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
1937 uint64 rt3_value = extract_rt3_9_8_7(instruction);
1938
1939 std::string rt3 = GPR(encode_gpr3(rt3_value));
1940 std::string u = IMMEDIATE(copy(u_value));
1941
1942 return img::format("ADDIU %s, $%d, %s", rt3, 29, u);
1943 }
1944
1945
1946 /*
1947 *
1948 *
1949 * 3 2 1
1950 * 10987654321098765432109876543210
1951 * 001000 0010000100111111
1952 * rt -----
1953 * rs -----
1954 */
1955 std::string NMD::ADDIU_R2_(uint64 instruction)
1956 {
1957 uint64 u_value = extract_u_2_1_0__s2(instruction);
1958 uint64 rt3_value = extract_rt3_9_8_7(instruction);
1959 uint64 rs3_value = extract_rs3_6_5_4(instruction);
1960
1961 std::string rt3 = GPR(encode_gpr3(rt3_value));
1962 std::string rs3 = GPR(encode_gpr3(rs3_value));
1963 std::string u = IMMEDIATE(copy(u_value));
1964
1965 return img::format("ADDIU %s, %s, %s", rt3, rs3, u);
1966 }
1967
1968
1969 /*
1970 * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
1971 *
1972 * 5432109876543210
1973 * 100100 1
1974 * rt -----
1975 * s - ---
1976 */
1977 std::string NMD::ADDIU_RS5_(uint64 instruction)
1978 {
1979 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
1980 int64 s_value = extract_s__se3_4_2_1_0(instruction);
1981
1982 std::string rt = GPR(copy(rt_value));
1983 std::string s = IMMEDIATE(copy(s_value));
1984
1985 return img::format("ADDIU %s, %s", rt, s);
1986 }
1987
1988
1989 /*
1990 *
1991 *
1992 * 3 2 1
1993 * 10987654321098765432109876543210
1994 * 001000 x1110000101
1995 * rt -----
1996 * rs -----
1997 * rd -----
1998 */
1999 std::string NMD::ADDIUPC_32_(uint64 instruction)
2000 {
2001 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2002 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
2003
2004 std::string rt = GPR(copy(rt_value));
2005 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2006
2007 return img::format("ADDIUPC %s, %s", rt, s);
2008 }
2009
2010
2011 /*
2012 *
2013 *
2014 * 3 2 1
2015 * 10987654321098765432109876543210
2016 * 001000 x1110000101
2017 * rt -----
2018 * rs -----
2019 * rd -----
2020 */
2021 std::string NMD::ADDIUPC_48_(uint64 instruction)
2022 {
2023 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2024 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2025
2026 std::string rt = GPR(copy(rt_value));
2027 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
2028
2029 return img::format("ADDIUPC %s, %s", rt, s);
2030 }
2031
2032
2033 /*
2034 * ADDQ.PH rd, rt, rs - Add Fractional Halfword Vectors
2035 *
2036 * 3 2 1
2037 * 10987654321098765432109876543210
2038 * 001000 00000001101
2039 * rt -----
2040 * rs -----
2041 * rd -----
2042 */
2043 std::string NMD::ADDQ_PH(uint64 instruction)
2044 {
2045 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2046 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2047 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2048
2049 std::string rd = GPR(copy(rd_value));
2050 std::string rs = GPR(copy(rs_value));
2051 std::string rt = GPR(copy(rt_value));
2052
2053 return img::format("ADDQ.PH %s, %s, %s", rd, rs, rt);
2054 }
2055
2056
2057 /*
2058 * ADDQ_S.PH rd, rt, rs - Add Fractional Halfword Vectors
2059 *
2060 * 3 2 1
2061 * 10987654321098765432109876543210
2062 * 001000 10000001101
2063 * rt -----
2064 * rs -----
2065 * rd -----
2066 */
2067 std::string NMD::ADDQ_S_PH(uint64 instruction)
2068 {
2069 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2070 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2071 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2072
2073 std::string rd = GPR(copy(rd_value));
2074 std::string rs = GPR(copy(rs_value));
2075 std::string rt = GPR(copy(rt_value));
2076
2077 return img::format("ADDQ_S.PH %s, %s, %s", rd, rs, rt);
2078 }
2079
2080
2081 /*
2082 * ADDQ_S.W rd, rt, rs - Add Fractional Words
2083 *
2084 * 3 2 1
2085 * 10987654321098765432109876543210
2086 * 001000 x1100000101
2087 * rt -----
2088 * rs -----
2089 * rd -----
2090 */
2091 std::string NMD::ADDQ_S_W(uint64 instruction)
2092 {
2093 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2094 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2095 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2096
2097 std::string rd = GPR(copy(rd_value));
2098 std::string rs = GPR(copy(rs_value));
2099 std::string rt = GPR(copy(rt_value));
2100
2101 return img::format("ADDQ_S.W %s, %s, %s", rd, rs, rt);
2102 }
2103
2104
2105 /*
2106 * ADDQH.PH rd, rt, rs - Add Fractional Halfword Vectors And Shift Right
2107 * to Halve Results
2108 *
2109 * 3 2 1
2110 * 10987654321098765432109876543210
2111 * 001000 00001001101
2112 * rt -----
2113 * rs -----
2114 * rd -----
2115 */
2116 std::string NMD::ADDQH_PH(uint64 instruction)
2117 {
2118 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2119 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2120 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2121
2122 std::string rd = GPR(copy(rd_value));
2123 std::string rs = GPR(copy(rs_value));
2124 std::string rt = GPR(copy(rt_value));
2125
2126 return img::format("ADDQH.PH %s, %s, %s", rd, rs, rt);
2127 }
2128
2129
2130 /*
2131 * ADDQH_R.PH rd, rt, rs - Add Fractional Halfword Vectors And Shift Right
2132 * to Halve Results
2133 *
2134 * 3 2 1
2135 * 10987654321098765432109876543210
2136 * 001000 10001001101
2137 * rt -----
2138 * rs -----
2139 * rd -----
2140 */
2141 std::string NMD::ADDQH_R_PH(uint64 instruction)
2142 {
2143 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2144 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2145 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2146
2147 std::string rd = GPR(copy(rd_value));
2148 std::string rs = GPR(copy(rs_value));
2149 std::string rt = GPR(copy(rt_value));
2150
2151 return img::format("ADDQH_R.PH %s, %s, %s", rd, rs, rt);
2152 }
2153
2154
2155 /*
2156 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
2157 *
2158 * 3 2 1
2159 * 10987654321098765432109876543210
2160 * 001000 00010001101
2161 * rt -----
2162 * rs -----
2163 * rd -----
2164 */
2165 std::string NMD::ADDQH_R_W(uint64 instruction)
2166 {
2167 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2168 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2169 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2170
2171 std::string rd = GPR(copy(rd_value));
2172 std::string rs = GPR(copy(rs_value));
2173 std::string rt = GPR(copy(rt_value));
2174
2175 return img::format("ADDQH_R.W %s, %s, %s", rd, rs, rt);
2176 }
2177
2178
2179 /*
2180 * ADDQH.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
2181 *
2182 * 3 2 1
2183 * 10987654321098765432109876543210
2184 * 001000 10010001101
2185 * rt -----
2186 * rs -----
2187 * rd -----
2188 */
2189 std::string NMD::ADDQH_W(uint64 instruction)
2190 {
2191 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2192 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2193 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2194
2195 std::string rd = GPR(copy(rd_value));
2196 std::string rs = GPR(copy(rs_value));
2197 std::string rt = GPR(copy(rt_value));
2198
2199 return img::format("ADDQH.W %s, %s, %s", rd, rs, rt);
2200 }
2201
2202
2203 /*
2204 * ADDSC rd, rt, rs - Add Signed Word and Set Carry Bit
2205 *
2206 * 3 2 1
2207 * 10987654321098765432109876543210
2208 * 001000 x1110000101
2209 * rt -----
2210 * rs -----
2211 * rd -----
2212 */
2213 std::string NMD::ADDSC(uint64 instruction)
2214 {
2215 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2216 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2217 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2218
2219 std::string rd = GPR(copy(rd_value));
2220 std::string rs = GPR(copy(rs_value));
2221 std::string rt = GPR(copy(rt_value));
2222
2223 return img::format("ADDSC %s, %s, %s", rd, rs, rt);
2224 }
2225
2226
2227 /*
2228 * ADDU[16] rd3, rs3, rt3 -
2229 *
2230 * 5432109876543210
2231 * 101100 0
2232 * rt3 ---
2233 * rs3 ---
2234 * rd3 ---
2235 */
2236 std::string NMD::ADDU_16_(uint64 instruction)
2237 {
2238 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2239 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2240 uint64 rd3_value = extract_rd3_3_2_1(instruction);
2241
2242 std::string rt3 = GPR(encode_gpr3(rt3_value));
2243 std::string rs3 = GPR(encode_gpr3(rs3_value));
2244 std::string rd3 = GPR(encode_gpr3(rd3_value));
2245
2246 return img::format("ADDU %s, %s, %s", rd3, rs3, rt3);
2247 }
2248
2249
2250 /*
2251 *
2252 *
2253 * 3 2 1
2254 * 10987654321098765432109876543210
2255 * 001000 x1110000101
2256 * rt -----
2257 * rs -----
2258 * rd -----
2259 */
2260 std::string NMD::ADDU_32_(uint64 instruction)
2261 {
2262 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2263 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2264 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2265
2266 std::string rd = GPR(copy(rd_value));
2267 std::string rs = GPR(copy(rs_value));
2268 std::string rt = GPR(copy(rt_value));
2269
2270 return img::format("ADDU %s, %s, %s", rd, rs, rt);
2271 }
2272
2273
2274 /*
2275 *
2276 *
2277 * 3 2 1
2278 * 10987654321098765432109876543210
2279 * 001000 x1110000101
2280 * rt -----
2281 * rs -----
2282 * rd -----
2283 */
2284 std::string NMD::ADDU_4X4_(uint64 instruction)
2285 {
2286 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
2287 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
2288
2289 std::string rs4 = GPR(encode_gpr4(rs4_value));
2290 std::string rt4 = GPR(encode_gpr4(rt4_value));
2291
2292 return img::format("ADDU %s, %s", rs4, rt4);
2293 }
2294
2295
2296 /*
2297 * ADDU.PH rd, rt, rs - Unsigned Add Integer Halfwords
2298 *
2299 * 3 2 1
2300 * 10987654321098765432109876543210
2301 * 001000 00100001101
2302 * rt -----
2303 * rs -----
2304 * rd -----
2305 */
2306 std::string NMD::ADDU_PH(uint64 instruction)
2307 {
2308 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2309 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2310 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2311
2312 std::string rd = GPR(copy(rd_value));
2313 std::string rs = GPR(copy(rs_value));
2314 std::string rt = GPR(copy(rt_value));
2315
2316 return img::format("ADDU.PH %s, %s, %s", rd, rs, rt);
2317 }
2318
2319
2320 /*
2321 * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2322 *
2323 * 3 2 1
2324 * 10987654321098765432109876543210
2325 * 001000 00011001101
2326 * rt -----
2327 * rs -----
2328 * rd -----
2329 */
2330 std::string NMD::ADDU_QB(uint64 instruction)
2331 {
2332 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2333 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2334 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2335
2336 std::string rd = GPR(copy(rd_value));
2337 std::string rs = GPR(copy(rs_value));
2338 std::string rt = GPR(copy(rt_value));
2339
2340 return img::format("ADDU.QB %s, %s, %s", rd, rs, rt);
2341 }
2342
2343
2344 /*
2345 * ADDU_S.PH rd, rt, rs - Unsigned Add Integer Halfwords
2346 *
2347 * 3 2 1
2348 * 10987654321098765432109876543210
2349 * 001000 10100001101
2350 * rt -----
2351 * rs -----
2352 * rd -----
2353 */
2354 std::string NMD::ADDU_S_PH(uint64 instruction)
2355 {
2356 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2357 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2358 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2359
2360 std::string rd = GPR(copy(rd_value));
2361 std::string rs = GPR(copy(rs_value));
2362 std::string rt = GPR(copy(rt_value));
2363
2364 return img::format("ADDU_S.PH %s, %s, %s", rd, rs, rt);
2365 }
2366
2367
2368 /*
2369 * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2370 *
2371 * 3 2 1
2372 * 10987654321098765432109876543210
2373 * 001000 10011001101
2374 * rt -----
2375 * rs -----
2376 * rd -----
2377 */
2378 std::string NMD::ADDU_S_QB(uint64 instruction)
2379 {
2380 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2381 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2382 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2383
2384 std::string rd = GPR(copy(rd_value));
2385 std::string rs = GPR(copy(rs_value));
2386 std::string rt = GPR(copy(rt_value));
2387
2388 return img::format("ADDU_S.QB %s, %s, %s", rd, rs, rt);
2389 }
2390
2391
2392 /*
2393 * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2394 * to Halve Results
2395 *
2396 * 3 2 1
2397 * 10987654321098765432109876543210
2398 * 001000 00101001101
2399 * rt -----
2400 * rs -----
2401 * rd -----
2402 */
2403 std::string NMD::ADDUH_QB(uint64 instruction)
2404 {
2405 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2406 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2407 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2408
2409 std::string rd = GPR(copy(rd_value));
2410 std::string rs = GPR(copy(rs_value));
2411 std::string rt = GPR(copy(rt_value));
2412
2413 return img::format("ADDUH.QB %s, %s, %s", rd, rs, rt);
2414 }
2415
2416
2417 /*
2418 * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2419 * to Halve Results
2420 *
2421 * 3 2 1
2422 * 10987654321098765432109876543210
2423 * 001000 10101001101
2424 * rt -----
2425 * rs -----
2426 * rd -----
2427 */
2428 std::string NMD::ADDUH_R_QB(uint64 instruction)
2429 {
2430 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2431 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2432 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2433
2434 std::string rd = GPR(copy(rd_value));
2435 std::string rs = GPR(copy(rs_value));
2436 std::string rt = GPR(copy(rt_value));
2437
2438 return img::format("ADDUH_R.QB %s, %s, %s", rd, rs, rt);
2439 }
2440
2441 /*
2442 * ADDWC rd, rt, rs - Add Word with Carry Bit
2443 *
2444 * 3 2 1
2445 * 10987654321098765432109876543210
2446 * 001000 x1111000101
2447 * rt -----
2448 * rs -----
2449 * rd -----
2450 */
2451 std::string NMD::ADDWC(uint64 instruction)
2452 {
2453 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2454 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2455 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2456
2457 std::string rd = GPR(copy(rd_value));
2458 std::string rs = GPR(copy(rs_value));
2459 std::string rt = GPR(copy(rt_value));
2460
2461 return img::format("ADDWC %s, %s, %s", rd, rs, rt);
2462 }
2463
2464
2465 /*
2466 *
2467 *
2468 * 3 2 1
2469 * 10987654321098765432109876543210
2470 * 001000 x1110000101
2471 * rt -----
2472 * rs -----
2473 * rd -----
2474 */
2475 std::string NMD::ALUIPC(uint64 instruction)
2476 {
2477 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2478 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
2479
2480 std::string rt = GPR(copy(rt_value));
2481 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2482
2483 return img::format("ALUIPC %s, %%pcrel_hi(%s)", rt, s);
2484 }
2485
2486
2487 /*
2488 * AND[16] rt3, rs3 -
2489 *
2490 * 5432109876543210
2491 * 101100
2492 * rt3 ---
2493 * rs3 ---
2494 * eu ----
2495 */
2496 std::string NMD::AND_16_(uint64 instruction)
2497 {
2498 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2499 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2500
2501 std::string rt3 = GPR(encode_gpr3(rt3_value));
2502 std::string rs3 = GPR(encode_gpr3(rs3_value));
2503
2504 return img::format("AND %s, %s", rs3, rt3);
2505 }
2506
2507
2508 /*
2509 *
2510 *
2511 * 3 2 1
2512 * 10987654321098765432109876543210
2513 * 001000 x1110000101
2514 * rt -----
2515 * rs -----
2516 * rd -----
2517 */
2518 std::string NMD::AND_32_(uint64 instruction)
2519 {
2520 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2521 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2522 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2523
2524 std::string rd = GPR(copy(rd_value));
2525 std::string rs = GPR(copy(rs_value));
2526 std::string rt = GPR(copy(rt_value));
2527
2528 return img::format("AND %s, %s, %s", rd, rs, rt);
2529 }
2530
2531
2532 /*
2533 * ANDI rt, rs, u -
2534 *
2535 * 5432109876543210
2536 * 101100
2537 * rt3 ---
2538 * rs3 ---
2539 * eu ----
2540 */
2541 std::string NMD::ANDI_16_(uint64 instruction)
2542 {
2543 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2544 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2545 uint64 eu_value = extract_eu_3_2_1_0(instruction);
2546
2547 std::string rt3 = GPR(encode_gpr3(rt3_value));
2548 std::string rs3 = GPR(encode_gpr3(rs3_value));
2549 std::string eu = IMMEDIATE(encode_eu_from_u_andi16(eu_value));
2550
2551 return img::format("ANDI %s, %s, %s", rt3, rs3, eu);
2552 }
2553
2554
2555 /*
2556 *
2557 *
2558 * 3 2 1
2559 * 10987654321098765432109876543210
2560 * 001000 x1110000101
2561 * rt -----
2562 * rs -----
2563 * rd -----
2564 */
2565 std::string NMD::ANDI_32_(uint64 instruction)
2566 {
2567 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2568 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2569 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2570
2571 std::string rt = GPR(copy(rt_value));
2572 std::string rs = GPR(copy(rs_value));
2573 std::string u = IMMEDIATE(copy(u_value));
2574
2575 return img::format("ANDI %s, %s, %s", rt, rs, u);
2576 }
2577
2578
2579 /*
2580 *
2581 *
2582 * 3 2 1
2583 * 10987654321098765432109876543210
2584 * 001000 x1110000101
2585 * rt -----
2586 * rs -----
2587 * rd -----
2588 */
2589 std::string NMD::APPEND(uint64 instruction)
2590 {
2591 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2592 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2593 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
2594
2595 std::string rt = GPR(copy(rt_value));
2596 std::string rs = GPR(copy(rs_value));
2597 std::string sa = IMMEDIATE(copy(sa_value));
2598
2599 return img::format("APPEND %s, %s, %s", rt, rs, sa);
2600 }
2601
2602
2603 /*
2604 *
2605 *
2606 * 3 2 1
2607 * 10987654321098765432109876543210
2608 * 001000 x1110000101
2609 * rt -----
2610 * rs -----
2611 * rd -----
2612 */
2613 std::string NMD::ASET(uint64 instruction)
2614 {
2615 uint64 bit_value = extract_bit_23_22_21(instruction);
2616 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
2617 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2618
2619 std::string bit = IMMEDIATE(copy(bit_value));
2620 std::string s = IMMEDIATE(copy(s_value));
2621 std::string rs = GPR(copy(rs_value));
2622
2623 return img::format("ASET %s, %s(%s)", bit, s, rs);
2624 }
2625
2626
2627 /*
2628 *
2629 *
2630 * 3 2 1
2631 * 10987654321098765432109876543210
2632 * 001000 x1110000101
2633 * rt -----
2634 * rs -----
2635 * rd -----
2636 */
2637 std::string NMD::BALC_16_(uint64 instruction)
2638 {
2639 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2640
2641 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2642
2643 return img::format("BALC %s", s);
2644 }
2645
2646
2647 /*
2648 *
2649 *
2650 * 3 2 1
2651 * 10987654321098765432109876543210
2652 * 001000 x1110000101
2653 * rt -----
2654 * rs -----
2655 * rd -----
2656 */
2657 std::string NMD::BALC_32_(uint64 instruction)
2658 {
2659 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2660
2661 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2662
2663 return img::format("BALC %s", s);
2664 }
2665
2666
2667 /*
2668 *
2669 *
2670 * 3 2 1
2671 * 10987654321098765432109876543210
2672 * 001000 x1110000101
2673 * rt -----
2674 * rs -----
2675 * rd -----
2676 */
2677 std::string NMD::BALRSC(uint64 instruction)
2678 {
2679 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2680 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2681
2682 std::string rt = GPR(copy(rt_value));
2683 std::string rs = GPR(copy(rs_value));
2684
2685 return img::format("BALRSC %s, %s", rt, rs);
2686 }
2687
2688
2689 /*
2690 *
2691 *
2692 * 3 2 1
2693 * 10987654321098765432109876543210
2694 * 001000 x1110000101
2695 * rt -----
2696 * rs -----
2697 * rd -----
2698 */
2699 std::string NMD::BBEQZC(uint64 instruction)
2700 {
2701 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2702 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2703 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2704
2705 std::string rt = GPR(copy(rt_value));
2706 std::string bit = IMMEDIATE(copy(bit_value));
2707 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2708
2709 return img::format("BBEQZC %s, %s, %s", rt, bit, s);
2710 }
2711
2712
2713 /*
2714 *
2715 *
2716 * 3 2 1
2717 * 10987654321098765432109876543210
2718 * 001000 x1110000101
2719 * rt -----
2720 * rs -----
2721 * rd -----
2722 */
2723 std::string NMD::BBNEZC(uint64 instruction)
2724 {
2725 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2726 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2727 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2728
2729 std::string rt = GPR(copy(rt_value));
2730 std::string bit = IMMEDIATE(copy(bit_value));
2731 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2732
2733 return img::format("BBNEZC %s, %s, %s", rt, bit, s);
2734 }
2735
2736
2737 /*
2738 *
2739 *
2740 * 3 2 1
2741 * 10987654321098765432109876543210
2742 * 001000 x1110000101
2743 * rt -----
2744 * rs -----
2745 * rd -----
2746 */
2747 std::string NMD::BC_16_(uint64 instruction)
2748 {
2749 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2750
2751 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2752
2753 return img::format("BC %s", s);
2754 }
2755
2756
2757 /*
2758 *
2759 *
2760 * 3 2 1
2761 * 10987654321098765432109876543210
2762 * 001000 x1110000101
2763 * rt -----
2764 * rs -----
2765 * rd -----
2766 */
2767 std::string NMD::BC_32_(uint64 instruction)
2768 {
2769 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2770
2771 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2772
2773 return img::format("BC %s", s);
2774 }
2775
2776
2777 /*
2778 *
2779 *
2780 * 3 2 1
2781 * 10987654321098765432109876543210
2782 * 001000 x1110000101
2783 * rt -----
2784 * rs -----
2785 * rd -----
2786 */
2787 std::string NMD::BC1EQZC(uint64 instruction)
2788 {
2789 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2790 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2791
2792 std::string ft = FPR(copy(ft_value));
2793 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2794
2795 return img::format("BC1EQZC %s, %s", ft, s);
2796 }
2797
2798
2799 /*
2800 *
2801 *
2802 * 3 2 1
2803 * 10987654321098765432109876543210
2804 * 001000 x1110000101
2805 * rt -----
2806 * rs -----
2807 * rd -----
2808 */
2809 std::string NMD::BC1NEZC(uint64 instruction)
2810 {
2811 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2812 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2813
2814 std::string ft = FPR(copy(ft_value));
2815 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2816
2817 return img::format("BC1NEZC %s, %s", ft, s);
2818 }
2819
2820
2821 /*
2822 *
2823 *
2824 * 3 2 1
2825 * 10987654321098765432109876543210
2826 * 001000 x1110000101
2827 * rt -----
2828 * rs -----
2829 * rd -----
2830 */
2831 std::string NMD::BC2EQZC(uint64 instruction)
2832 {
2833 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2834 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
2835
2836 std::string ct = CPR(copy(ct_value));
2837 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2838
2839 return img::format("BC2EQZC %s, %s", ct, s);
2840 }
2841
2842
2843 /*
2844 *
2845 *
2846 * 3 2 1
2847 * 10987654321098765432109876543210
2848 * 001000 x1110000101
2849 * rt -----
2850 * rs -----
2851 * rd -----
2852 */
2853 std::string NMD::BC2NEZC(uint64 instruction)
2854 {
2855 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2856 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
2857
2858 std::string ct = CPR(copy(ct_value));
2859 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2860
2861 return img::format("BC2NEZC %s, %s", ct, s);
2862 }
2863
2864
2865 /*
2866 *
2867 *
2868 * 3 2 1
2869 * 10987654321098765432109876543210
2870 * 001000 x1110000101
2871 * rt -----
2872 * rs -----
2873 * rd -----
2874 */
2875 std::string NMD::BEQC_16_(uint64 instruction)
2876 {
2877 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
2878 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2879 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2880
2881 std::string rs3 = GPR(encode_rs3_and_check_rs3_lt_rt3(rs3_value));
2882 std::string rt3 = GPR(encode_gpr3(rt3_value));
2883 std::string u = ADDRESS(encode_u_from_address(u_value), 2);
2884
2885 return img::format("BEQC %s, %s, %s", rs3, rt3, u);
2886 }
2887
2888
2889 /*
2890 *
2891 *
2892 * 3 2 1
2893 * 10987654321098765432109876543210
2894 * 001000 x1110000101
2895 * rt -----
2896 * rs -----
2897 * rd -----
2898 */
2899 std::string NMD::BEQC_32_(uint64 instruction)
2900 {
2901 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2902 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2903 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2904
2905 std::string rs = GPR(copy(rs_value));
2906 std::string rt = GPR(copy(rt_value));
2907 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2908
2909 return img::format("BEQC %s, %s, %s", rs, rt, s);
2910 }
2911
2912
2913 /*
2914 *
2915 *
2916 * 3 2 1
2917 * 10987654321098765432109876543210
2918 * 001000 x1110000101
2919 * rt -----
2920 * rs -----
2921 * rd -----
2922 */
2923 std::string NMD::BEQIC(uint64 instruction)
2924 {
2925 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2926 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2927 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2928
2929 std::string rt = GPR(copy(rt_value));
2930 std::string u = IMMEDIATE(copy(u_value));
2931 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2932
2933 return img::format("BEQIC %s, %s, %s", rt, u, s);
2934 }
2935
2936
2937 /*
2938 *
2939 *
2940 * 3 2 1
2941 * 10987654321098765432109876543210
2942 * 001000 x1110000101
2943 * rt -----
2944 * rs -----
2945 * rd -----
2946 */
2947 std::string NMD::BEQZC_16_(uint64 instruction)
2948 {
2949 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
2950 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2951
2952 std::string rt3 = GPR(encode_gpr3(rt3_value));
2953 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2954
2955 return img::format("BEQZC %s, %s", rt3, s);
2956 }
2957
2958
2959 /*
2960 *
2961 *
2962 * 3 2 1
2963 * 10987654321098765432109876543210
2964 * 001000 x1110000101
2965 * rt -----
2966 * rs -----
2967 * rd -----
2968 */
2969 std::string NMD::BGEC(uint64 instruction)
2970 {
2971 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2972 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2973 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2974
2975 std::string rs = GPR(copy(rs_value));
2976 std::string rt = GPR(copy(rt_value));
2977 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2978
2979 return img::format("BGEC %s, %s, %s", rs, rt, s);
2980 }
2981
2982
2983 /*
2984 *
2985 *
2986 * 3 2 1
2987 * 10987654321098765432109876543210
2988 * 001000 x1110000101
2989 * rt -----
2990 * rs -----
2991 * rd -----
2992 */
2993 std::string NMD::BGEIC(uint64 instruction)
2994 {
2995 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2996 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2997 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2998
2999 std::string rt = GPR(copy(rt_value));
3000 std::string u = IMMEDIATE(copy(u_value));
3001 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3002
3003 return img::format("BGEIC %s, %s, %s", rt, u, s);
3004 }
3005
3006
3007 /*
3008 *
3009 *
3010 * 3 2 1
3011 * 10987654321098765432109876543210
3012 * 001000 x1110000101
3013 * rt -----
3014 * rs -----
3015 * rd -----
3016 */
3017 std::string NMD::BGEIUC(uint64 instruction)
3018 {
3019 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3020 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3021 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3022
3023 std::string rt = GPR(copy(rt_value));
3024 std::string u = IMMEDIATE(copy(u_value));
3025 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3026
3027 return img::format("BGEIUC %s, %s, %s", rt, u, s);
3028 }
3029
3030
3031 /*
3032 *
3033 *
3034 * 3 2 1
3035 * 10987654321098765432109876543210
3036 * 001000 x1110000101
3037 * rt -----
3038 * rs -----
3039 * rd -----
3040 */
3041 std::string NMD::BGEUC(uint64 instruction)
3042 {
3043 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3044 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3045 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3046
3047 std::string rs = GPR(copy(rs_value));
3048 std::string rt = GPR(copy(rt_value));
3049 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3050
3051 return img::format("BGEUC %s, %s, %s", rs, rt, s);
3052 }
3053
3054
3055 /*
3056 *
3057 *
3058 * 3 2 1
3059 * 10987654321098765432109876543210
3060 * 001000 x1110000101
3061 * rt -----
3062 * rs -----
3063 * rd -----
3064 */
3065 std::string NMD::BLTC(uint64 instruction)
3066 {
3067 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3068 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3069 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3070
3071 std::string rs = GPR(copy(rs_value));
3072 std::string rt = GPR(copy(rt_value));
3073 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3074
3075 return img::format("BLTC %s, %s, %s", rs, rt, s);
3076 }
3077
3078
3079 /*
3080 *
3081 *
3082 * 3 2 1
3083 * 10987654321098765432109876543210
3084 * 001000 x1110000101
3085 * rt -----
3086 * rs -----
3087 * rd -----
3088 */
3089 std::string NMD::BLTIC(uint64 instruction)
3090 {
3091 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3092 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3093 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3094
3095 std::string rt = GPR(copy(rt_value));
3096 std::string u = IMMEDIATE(copy(u_value));
3097 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3098
3099 return img::format("BLTIC %s, %s, %s", rt, u, s);
3100 }
3101
3102
3103 /*
3104 *
3105 *
3106 * 3 2 1
3107 * 10987654321098765432109876543210
3108 * 001000 x1110000101
3109 * rt -----
3110 * rs -----
3111 * rd -----
3112 */
3113 std::string NMD::BLTIUC(uint64 instruction)
3114 {
3115 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3116 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3117 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3118
3119 std::string rt = GPR(copy(rt_value));
3120 std::string u = IMMEDIATE(copy(u_value));
3121 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3122
3123 return img::format("BLTIUC %s, %s, %s", rt, u, s);
3124 }
3125
3126
3127 /*
3128 *
3129 *
3130 * 3 2 1
3131 * 10987654321098765432109876543210
3132 * 001000 x1110000101
3133 * rt -----
3134 * rs -----
3135 * rd -----
3136 */
3137 std::string NMD::BLTUC(uint64 instruction)
3138 {
3139 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3140 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3141 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3142
3143 std::string rs = GPR(copy(rs_value));
3144 std::string rt = GPR(copy(rt_value));
3145 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3146
3147 return img::format("BLTUC %s, %s, %s", rs, rt, s);
3148 }
3149
3150
3151 /*
3152 *
3153 *
3154 * 3 2 1
3155 * 10987654321098765432109876543210
3156 * 001000 x1110000101
3157 * rt -----
3158 * rs -----
3159 * rd -----
3160 */
3161 std::string NMD::BNEC_16_(uint64 instruction)
3162 {
3163 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
3164 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3165 uint64 rs3_value = extract_rs3_6_5_4(instruction);
3166
3167 std::string rs3 = GPR(encode_rs3_and_check_rs3_ge_rt3(rs3_value));
3168 std::string rt3 = GPR(encode_gpr3(rt3_value));
3169 std::string u = ADDRESS(encode_u_from_address(u_value), 2);
3170
3171 return img::format("BNEC %s, %s, %s", rs3, rt3, u);
3172 }
3173
3174
3175 /*
3176 *
3177 *
3178 * 3 2 1
3179 * 10987654321098765432109876543210
3180 * 001000 x1110000101
3181 * rt -----
3182 * rs -----
3183 * rd -----
3184 */
3185 std::string NMD::BNEC_32_(uint64 instruction)
3186 {
3187 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3188 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3189 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3190
3191 std::string rs = GPR(copy(rs_value));
3192 std::string rt = GPR(copy(rt_value));
3193 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3194
3195 return img::format("BNEC %s, %s, %s", rs, rt, s);
3196 }
3197
3198
3199 /*
3200 *
3201 *
3202 * 3 2 1
3203 * 10987654321098765432109876543210
3204 * 001000 x1110000101
3205 * rt -----
3206 * rs -----
3207 * rd -----
3208 */
3209 std::string NMD::BNEIC(uint64 instruction)
3210 {
3211 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3212 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3213 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3214
3215 std::string rt = GPR(copy(rt_value));
3216 std::string u = IMMEDIATE(copy(u_value));
3217 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3218
3219 return img::format("BNEIC %s, %s, %s", rt, u, s);
3220 }
3221
3222
3223 /*
3224 *
3225 *
3226 * 3 2 1
3227 * 10987654321098765432109876543210
3228 * 001000 x1110000101
3229 * rt -----
3230 * rs -----
3231 * rd -----
3232 */
3233 std::string NMD::BNEZC_16_(uint64 instruction)
3234 {
3235 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3236 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3237
3238 std::string rt3 = GPR(encode_gpr3(rt3_value));
3239 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
3240
3241 return img::format("BNEZC %s, %s", rt3, s);
3242 }
3243
3244
3245 /*
3246 *
3247 *
3248 * 3 2 1
3249 * 10987654321098765432109876543210
3250 * 001000 x1110000101
3251 * rt -----
3252 * rs -----
3253 * rd -----
3254 */
3255 std::string NMD::BPOSGE32C(uint64 instruction)
3256 {
3257 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3258
3259 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3260
3261 return img::format("BPOSGE32C %s", s);
3262 }
3263
3264
3265 /*
3266 *
3267 *
3268 * 3 2 1
3269 * 10987654321098765432109876543210
3270 * 001000 x1110000101
3271 * rt -----
3272 * rs -----
3273 * rd -----
3274 */
3275 std::string NMD::BREAK_16_(uint64 instruction)
3276 {
3277 uint64 code_value = extract_code_2_1_0(instruction);
3278
3279 std::string code = IMMEDIATE(copy(code_value));
3280
3281 return img::format("BREAK %s", code);
3282 }
3283
3284
3285 /*
3286 * BREAK code - Break. Cause a Breakpoint exception
3287 *
3288 * 3 2 1
3289 * 10987654321098765432109876543210
3290 * 001000 x1110000101
3291 * rt -----
3292 * rs -----
3293 * rd -----
3294 */
3295 std::string NMD::BREAK_32_(uint64 instruction)
3296 {
3297 uint64 code_value = extract_code_18_to_0(instruction);
3298
3299 std::string code = IMMEDIATE(copy(code_value));
3300
3301 return img::format("BREAK %s", code);
3302 }
3303
3304
3305 /*
3306 *
3307 *
3308 * 3 2 1
3309 * 10987654321098765432109876543210
3310 * 001000 x1110000101
3311 * rt -----
3312 * rs -----
3313 * rd -----
3314 */
3315 std::string NMD::BRSC(uint64 instruction)
3316 {
3317 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3318
3319 std::string rs = GPR(copy(rs_value));
3320
3321 return img::format("BRSC %s", rs);
3322 }
3323
3324
3325 /*
3326 *
3327 *
3328 * 3 2 1
3329 * 10987654321098765432109876543210
3330 * 001000 x1110000101
3331 * rt -----
3332 * rs -----
3333 * rd -----
3334 */
3335 std::string NMD::CACHE(uint64 instruction)
3336 {
3337 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3338 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3339 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3340
3341 std::string op = IMMEDIATE(copy(op_value));
3342 std::string s = IMMEDIATE(copy(s_value));
3343 std::string rs = GPR(copy(rs_value));
3344
3345 return img::format("CACHE %s, %s(%s)", op, s, rs);
3346 }
3347
3348
3349 /*
3350 *
3351 *
3352 * 3 2 1
3353 * 10987654321098765432109876543210
3354 * 001000 x1110000101
3355 * rt -----
3356 * rs -----
3357 * rd -----
3358 */
3359 std::string NMD::CACHEE(uint64 instruction)
3360 {
3361 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3362 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3363 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3364
3365 std::string op = IMMEDIATE(copy(op_value));
3366 std::string s = IMMEDIATE(copy(s_value));
3367 std::string rs = GPR(copy(rs_value));
3368
3369 return img::format("CACHEE %s, %s(%s)", op, s, rs);
3370 }
3371
3372
3373 /*
3374 *
3375 *
3376 * 3 2 1
3377 * 10987654321098765432109876543210
3378 * 001000 x1110000101
3379 * rt -----
3380 * rs -----
3381 * rd -----
3382 */
3383 std::string NMD::CEIL_L_D(uint64 instruction)
3384 {
3385 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3386 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3387
3388 std::string ft = FPR(copy(ft_value));
3389 std::string fs = FPR(copy(fs_value));
3390
3391 return img::format("CEIL.L.D %s, %s", ft, fs);
3392 }
3393
3394
3395 /*
3396 *
3397 *
3398 * 3 2 1
3399 * 10987654321098765432109876543210
3400 * 001000 x1110000101
3401 * rt -----
3402 * rs -----
3403 * rd -----
3404 */
3405 std::string NMD::CEIL_L_S(uint64 instruction)
3406 {
3407 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3408 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3409
3410 std::string ft = FPR(copy(ft_value));
3411 std::string fs = FPR(copy(fs_value));
3412
3413 return img::format("CEIL.L.S %s, %s", ft, fs);
3414 }
3415
3416
3417 /*
3418 *
3419 *
3420 * 3 2 1
3421 * 10987654321098765432109876543210
3422 * 001000 x1110000101
3423 * rt -----
3424 * rs -----
3425 * rd -----
3426 */
3427 std::string NMD::CEIL_W_D(uint64 instruction)
3428 {
3429 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3430 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3431
3432 std::string ft = FPR(copy(ft_value));
3433 std::string fs = FPR(copy(fs_value));
3434
3435 return img::format("CEIL.W.D %s, %s", ft, fs);
3436 }
3437
3438
3439 /*
3440 *
3441 *
3442 * 3 2 1
3443 * 10987654321098765432109876543210
3444 * 001000 x1110000101
3445 * rt -----
3446 * rs -----
3447 * rd -----
3448 */
3449 std::string NMD::CEIL_W_S(uint64 instruction)
3450 {
3451 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3452 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3453
3454 std::string ft = FPR(copy(ft_value));
3455 std::string fs = FPR(copy(fs_value));
3456
3457 return img::format("CEIL.W.S %s, %s", ft, fs);
3458 }
3459
3460
3461 /*
3462 *
3463 *
3464 * 3 2 1
3465 * 10987654321098765432109876543210
3466 * 001000 x1110000101
3467 * rt -----
3468 * rs -----
3469 * rd -----
3470 */
3471 std::string NMD::CFC1(uint64 instruction)
3472 {
3473 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3474 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3475
3476 std::string rt = GPR(copy(rt_value));
3477 std::string cs = CPR(copy(cs_value));
3478
3479 return img::format("CFC1 %s, %s", rt, cs);
3480 }
3481
3482
3483 /*
3484 *
3485 *
3486 * 3 2 1
3487 * 10987654321098765432109876543210
3488 * 001000 x1110000101
3489 * rt -----
3490 * rs -----
3491 * rd -----
3492 */
3493 std::string NMD::CFC2(uint64 instruction)
3494 {
3495 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3496 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3497
3498 std::string rt = GPR(copy(rt_value));
3499 std::string cs = CPR(copy(cs_value));
3500
3501 return img::format("CFC2 %s, %s", rt, cs);
3502 }
3503
3504
3505 /*
3506 *
3507 *
3508 * 3 2 1
3509 * 10987654321098765432109876543210
3510 * 001000 x1110000101
3511 * rt -----
3512 * rs -----
3513 * rd -----
3514 */
3515 std::string NMD::CLASS_D(uint64 instruction)
3516 {
3517 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3518 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3519
3520 std::string ft = FPR(copy(ft_value));
3521 std::string fs = FPR(copy(fs_value));
3522
3523 return img::format("CLASS.D %s, %s", ft, fs);
3524 }
3525
3526
3527 /*
3528 *
3529 *
3530 * 3 2 1
3531 * 10987654321098765432109876543210
3532 * 001000 x1110000101
3533 * rt -----
3534 * rs -----
3535 * rd -----
3536 */
3537 std::string NMD::CLASS_S(uint64 instruction)
3538 {
3539 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3540 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3541
3542 std::string ft = FPR(copy(ft_value));
3543 std::string fs = FPR(copy(fs_value));
3544
3545 return img::format("CLASS.S %s, %s", ft, fs);
3546 }
3547
3548
3549 /*
3550 *
3551 *
3552 * 3 2 1
3553 * 10987654321098765432109876543210
3554 * 001000 x1110000101
3555 * rt -----
3556 * rs -----
3557 * rd -----
3558 */
3559 std::string NMD::CLO(uint64 instruction)
3560 {
3561 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3562 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3563
3564 std::string rt = GPR(copy(rt_value));
3565 std::string rs = GPR(copy(rs_value));
3566
3567 return img::format("CLO %s, %s", rt, rs);
3568 }
3569
3570
3571 /*
3572 *
3573 *
3574 * 3 2 1
3575 * 10987654321098765432109876543210
3576 * 001000 x1110000101
3577 * rt -----
3578 * rs -----
3579 * rd -----
3580 */
3581 std::string NMD::CLZ(uint64 instruction)
3582 {
3583 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3584 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3585
3586 std::string rt = GPR(copy(rt_value));
3587 std::string rs = GPR(copy(rs_value));
3588
3589 return img::format("CLZ %s, %s", rt, rs);
3590 }
3591
3592
3593 /*
3594 *
3595 *
3596 * 3 2 1
3597 * 10987654321098765432109876543210
3598 * 001000 x1110000101
3599 * rt -----
3600 * rs -----
3601 * rd -----
3602 */
3603 std::string NMD::CMP_AF_D(uint64 instruction)
3604 {
3605 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3606 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3607 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3608
3609 std::string fd = FPR(copy(fd_value));
3610 std::string fs = FPR(copy(fs_value));
3611 std::string ft = FPR(copy(ft_value));
3612
3613 return img::format("CMP.AF.D %s, %s, %s", fd, fs, ft);
3614 }
3615
3616
3617 /*
3618 *
3619 *
3620 * 3 2 1
3621 * 10987654321098765432109876543210
3622 * 001000 x1110000101
3623 * rt -----
3624 * rs -----
3625 * rd -----
3626 */
3627 std::string NMD::CMP_AF_S(uint64 instruction)
3628 {
3629 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3630 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3631 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3632
3633 std::string fd = FPR(copy(fd_value));
3634 std::string fs = FPR(copy(fs_value));
3635 std::string ft = FPR(copy(ft_value));
3636
3637 return img::format("CMP.AF.S %s, %s, %s", fd, fs, ft);
3638 }
3639
3640
3641 /*
3642 *
3643 *
3644 * 3 2 1
3645 * 10987654321098765432109876543210
3646 * 001000 x1110000101
3647 * rt -----
3648 * rs -----
3649 * rd -----
3650 */
3651 std::string NMD::CMP_EQ_D(uint64 instruction)
3652 {
3653 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3654 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3655 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3656
3657 std::string fd = FPR(copy(fd_value));
3658 std::string fs = FPR(copy(fs_value));
3659 std::string ft = FPR(copy(ft_value));
3660
3661 return img::format("CMP.EQ.D %s, %s, %s", fd, fs, ft);
3662 }
3663
3664
3665 /*
3666 *
3667 *
3668 * 3 2 1
3669 * 10987654321098765432109876543210
3670 * 001000 x1110000101
3671 * rt -----
3672 * rs -----
3673 * rd -----
3674 */
3675 std::string NMD::CMP_EQ_PH(uint64 instruction)
3676 {
3677 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3678 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3679
3680 std::string rs = GPR(copy(rs_value));
3681 std::string rt = GPR(copy(rt_value));
3682
3683 return img::format("CMP.EQ.PH %s, %s", rs, rt);
3684 }
3685
3686
3687 /*
3688 *
3689 *
3690 * 3 2 1
3691 * 10987654321098765432109876543210
3692 * 001000 x1110000101
3693 * rt -----
3694 * rs -----
3695 * rd -----
3696 */
3697 std::string NMD::CMP_EQ_S(uint64 instruction)
3698 {
3699 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3700 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3701 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3702
3703 std::string fd = FPR(copy(fd_value));
3704 std::string fs = FPR(copy(fs_value));
3705 std::string ft = FPR(copy(ft_value));
3706
3707 return img::format("CMP.EQ.S %s, %s, %s", fd, fs, ft);
3708 }
3709
3710
3711 /*
3712 *
3713 *
3714 * 3 2 1
3715 * 10987654321098765432109876543210
3716 * 001000 x1110000101
3717 * rt -----
3718 * rs -----
3719 * rd -----
3720 */
3721 std::string NMD::CMP_LE_D(uint64 instruction)
3722 {
3723 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3724 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3725 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3726
3727 std::string fd = FPR(copy(fd_value));
3728 std::string fs = FPR(copy(fs_value));
3729 std::string ft = FPR(copy(ft_value));
3730
3731 return img::format("CMP.LE.D %s, %s, %s", fd, fs, ft);
3732 }
3733
3734
3735 /*
3736 *
3737 *
3738 * 3 2 1
3739 * 10987654321098765432109876543210
3740 * 001000 x1110000101
3741 * rt -----
3742 * rs -----
3743 * rd -----
3744 */
3745 std::string NMD::CMP_LE_PH(uint64 instruction)
3746 {
3747 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3748 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3749
3750 std::string rs = GPR(copy(rs_value));
3751 std::string rt = GPR(copy(rt_value));
3752
3753 return img::format("CMP.LE.PH %s, %s", rs, rt);
3754 }
3755
3756
3757 /*
3758 *
3759 *
3760 * 3 2 1
3761 * 10987654321098765432109876543210
3762 * 001000 x1110000101
3763 * rt -----
3764 * rs -----
3765 * rd -----
3766 */
3767 std::string NMD::CMP_LE_S(uint64 instruction)
3768 {
3769 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3770 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3771 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3772
3773 std::string fd = FPR(copy(fd_value));
3774 std::string fs = FPR(copy(fs_value));
3775 std::string ft = FPR(copy(ft_value));
3776
3777 return img::format("CMP.LE.S %s, %s, %s", fd, fs, ft);
3778 }
3779
3780
3781 /*
3782 *
3783 *
3784 * 3 2 1
3785 * 10987654321098765432109876543210
3786 * 001000 x1110000101
3787 * rt -----
3788 * rs -----
3789 * rd -----
3790 */
3791 std::string NMD::CMP_LT_D(uint64 instruction)
3792 {
3793 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3794 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3795 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3796
3797 std::string fd = FPR(copy(fd_value));
3798 std::string fs = FPR(copy(fs_value));
3799 std::string ft = FPR(copy(ft_value));
3800
3801 return img::format("CMP.LT.D %s, %s, %s", fd, fs, ft);
3802 }
3803
3804
3805 /*
3806 *
3807 *
3808 * 3 2 1
3809 * 10987654321098765432109876543210
3810 * 001000 x1110000101
3811 * rt -----
3812 * rs -----
3813 * rd -----
3814 */
3815 std::string NMD::CMP_LT_PH(uint64 instruction)
3816 {
3817 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3818 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3819
3820 std::string rs = GPR(copy(rs_value));
3821 std::string rt = GPR(copy(rt_value));
3822
3823 return img::format("CMP.LT.PH %s, %s", rs, rt);
3824 }
3825
3826
3827 /*
3828 *
3829 *
3830 * 3 2 1
3831 * 10987654321098765432109876543210
3832 * 001000 x1110000101
3833 * rt -----
3834 * rs -----
3835 * rd -----
3836 */
3837 std::string NMD::CMP_LT_S(uint64 instruction)
3838 {
3839 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3840 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3841 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3842
3843 std::string fd = FPR(copy(fd_value));
3844 std::string fs = FPR(copy(fs_value));
3845 std::string ft = FPR(copy(ft_value));
3846
3847 return img::format("CMP.LT.S %s, %s, %s", fd, fs, ft);
3848 }
3849
3850
3851 /*
3852 *
3853 *
3854 * 3 2 1
3855 * 10987654321098765432109876543210
3856 * 001000 x1110000101
3857 * rt -----
3858 * rs -----
3859 * rd -----
3860 */
3861 std::string NMD::CMP_NE_D(uint64 instruction)
3862 {
3863 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3864 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3865 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3866
3867 std::string fd = FPR(copy(fd_value));
3868 std::string fs = FPR(copy(fs_value));
3869 std::string ft = FPR(copy(ft_value));
3870
3871 return img::format("CMP.NE.D %s, %s, %s", fd, fs, ft);
3872 }
3873
3874
3875 /*
3876 *
3877 *
3878 * 3 2 1
3879 * 10987654321098765432109876543210
3880 * 001000 x1110000101
3881 * rt -----
3882 * rs -----
3883 * rd -----
3884 */
3885 std::string NMD::CMP_NE_S(uint64 instruction)
3886 {
3887 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3888 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3889 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3890
3891 std::string fd = FPR(copy(fd_value));
3892 std::string fs = FPR(copy(fs_value));
3893 std::string ft = FPR(copy(ft_value));
3894
3895 return img::format("CMP.NE.S %s, %s, %s", fd, fs, ft);
3896 }
3897
3898
3899 /*
3900 *
3901 *
3902 * 3 2 1
3903 * 10987654321098765432109876543210
3904 * 001000 x1110000101
3905 * rt -----
3906 * rs -----
3907 * rd -----
3908 */
3909 std::string NMD::CMP_OR_D(uint64 instruction)
3910 {
3911 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3912 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3913 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3914
3915 std::string fd = FPR(copy(fd_value));
3916 std::string fs = FPR(copy(fs_value));
3917 std::string ft = FPR(copy(ft_value));
3918
3919 return img::format("CMP.OR.D %s, %s, %s", fd, fs, ft);
3920 }
3921
3922
3923 /*
3924 *
3925 *
3926 * 3 2 1
3927 * 10987654321098765432109876543210
3928 * 001000 x1110000101
3929 * rt -----
3930 * rs -----
3931 * rd -----
3932 */
3933 std::string NMD::CMP_OR_S(uint64 instruction)
3934 {
3935 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3936 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3937 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3938
3939 std::string fd = FPR(copy(fd_value));
3940 std::string fs = FPR(copy(fs_value));
3941 std::string ft = FPR(copy(ft_value));
3942
3943 return img::format("CMP.OR.S %s, %s, %s", fd, fs, ft);
3944 }
3945
3946
3947 /*
3948 *
3949 *
3950 * 3 2 1
3951 * 10987654321098765432109876543210
3952 * 001000 x1110000101
3953 * rt -----
3954 * rs -----
3955 * rd -----
3956 */
3957 std::string NMD::CMP_SAF_D(uint64 instruction)
3958 {
3959 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3960 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3961 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3962
3963 std::string fd = FPR(copy(fd_value));
3964 std::string fs = FPR(copy(fs_value));
3965 std::string ft = FPR(copy(ft_value));
3966
3967 return img::format("CMP.SAF.D %s, %s, %s", fd, fs, ft);
3968 }
3969
3970
3971 /*
3972 *
3973 *
3974 * 3 2 1
3975 * 10987654321098765432109876543210
3976 * 001000 x1110000101
3977 * rt -----
3978 * rs -----
3979 * rd -----
3980 */
3981 std::string NMD::CMP_SAF_S(uint64 instruction)
3982 {
3983 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3984 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3985 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3986
3987 std::string fd = FPR(copy(fd_value));
3988 std::string fs = FPR(copy(fs_value));
3989 std::string ft = FPR(copy(ft_value));
3990
3991 return img::format("CMP.SAF.S %s, %s, %s", fd, fs, ft);
3992 }
3993
3994
3995 /*
3996 *
3997 *
3998 * 3 2 1
3999 * 10987654321098765432109876543210
4000 * 001000 x1110000101
4001 * rt -----
4002 * rs -----
4003 * rd -----
4004 */
4005 std::string NMD::CMP_SEQ_D(uint64 instruction)
4006 {
4007 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4008 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4009 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4010
4011 std::string fd = FPR(copy(fd_value));
4012 std::string fs = FPR(copy(fs_value));
4013 std::string ft = FPR(copy(ft_value));
4014
4015 return img::format("CMP.SEQ.D %s, %s, %s", fd, fs, ft);
4016 }
4017
4018
4019 /*
4020 *
4021 *
4022 * 3 2 1
4023 * 10987654321098765432109876543210
4024 * 001000 x1110000101
4025 * rt -----
4026 * rs -----
4027 * rd -----
4028 */
4029 std::string NMD::CMP_SEQ_S(uint64 instruction)
4030 {
4031 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4032 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4033 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4034
4035 std::string fd = FPR(copy(fd_value));
4036 std::string fs = FPR(copy(fs_value));
4037 std::string ft = FPR(copy(ft_value));
4038
4039 return img::format("CMP.SEQ.S %s, %s, %s", fd, fs, ft);
4040 }
4041
4042
4043 /*
4044 *
4045 *
4046 * 3 2 1
4047 * 10987654321098765432109876543210
4048 * 001000 x1110000101
4049 * rt -----
4050 * rs -----
4051 * rd -----
4052 */
4053 std::string NMD::CMP_SLE_D(uint64 instruction)
4054 {
4055 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4056 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4057 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4058
4059 std::string fd = FPR(copy(fd_value));
4060 std::string fs = FPR(copy(fs_value));
4061 std::string ft = FPR(copy(ft_value));
4062
4063 return img::format("CMP.SLE.D %s, %s, %s", fd, fs, ft);
4064 }
4065
4066
4067 /*
4068 *
4069 *
4070 * 3 2 1
4071 * 10987654321098765432109876543210
4072 * 001000 x1110000101
4073 * rt -----
4074 * rs -----
4075 * rd -----
4076 */
4077 std::string NMD::CMP_SLE_S(uint64 instruction)
4078 {
4079 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4080 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4081 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4082
4083 std::string fd = FPR(copy(fd_value));
4084 std::string fs = FPR(copy(fs_value));
4085 std::string ft = FPR(copy(ft_value));
4086
4087 return img::format("CMP.SLE.S %s, %s, %s", fd, fs, ft);
4088 }
4089
4090
4091 /*
4092 *
4093 *
4094 * 3 2 1
4095 * 10987654321098765432109876543210
4096 * 001000 x1110000101
4097 * rt -----
4098 * rs -----
4099 * rd -----
4100 */
4101 std::string NMD::CMP_SLT_D(uint64 instruction)
4102 {
4103 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4104 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4105 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4106
4107 std::string fd = FPR(copy(fd_value));
4108 std::string fs = FPR(copy(fs_value));
4109 std::string ft = FPR(copy(ft_value));
4110
4111 return img::format("CMP.SLT.D %s, %s, %s", fd, fs, ft);
4112 }
4113
4114
4115 /*
4116 *
4117 *
4118 * 3 2 1
4119 * 10987654321098765432109876543210
4120 * 001000 x1110000101
4121 * rt -----
4122 * rs -----
4123 * rd -----
4124 */
4125 std::string NMD::CMP_SLT_S(uint64 instruction)
4126 {
4127 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4128 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4129 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4130
4131 std::string fd = FPR(copy(fd_value));
4132 std::string fs = FPR(copy(fs_value));
4133 std::string ft = FPR(copy(ft_value));
4134
4135 return img::format("CMP.SLT.S %s, %s, %s", fd, fs, ft);
4136 }
4137
4138
4139 /*
4140 *
4141 *
4142 * 3 2 1
4143 * 10987654321098765432109876543210
4144 * 001000 x1110000101
4145 * rt -----
4146 * rs -----
4147 * rd -----
4148 */
4149 std::string NMD::CMP_SNE_D(uint64 instruction)
4150 {
4151 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4152 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4153 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4154
4155 std::string fd = FPR(copy(fd_value));
4156 std::string fs = FPR(copy(fs_value));
4157 std::string ft = FPR(copy(ft_value));
4158
4159 return img::format("CMP.SNE.D %s, %s, %s", fd, fs, ft);
4160 }
4161
4162
4163 /*
4164 *
4165 *
4166 * 3 2 1
4167 * 10987654321098765432109876543210
4168 * 001000 x1110000101
4169 * rt -----
4170 * rs -----
4171 * rd -----
4172 */
4173 std::string NMD::CMP_SNE_S(uint64 instruction)
4174 {
4175 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4176 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4177 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4178
4179 std::string fd = FPR(copy(fd_value));
4180 std::string fs = FPR(copy(fs_value));
4181 std::string ft = FPR(copy(ft_value));
4182
4183 return img::format("CMP.SNE.S %s, %s, %s", fd, fs, ft);
4184 }
4185
4186
4187 /*
4188 *
4189 *
4190 * 3 2 1
4191 * 10987654321098765432109876543210
4192 * 001000 x1110000101
4193 * rt -----
4194 * rs -----
4195 * rd -----
4196 */
4197 std::string NMD::CMP_SOR_D(uint64 instruction)
4198 {
4199 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4200 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4201 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4202
4203 std::string fd = FPR(copy(fd_value));
4204 std::string fs = FPR(copy(fs_value));
4205 std::string ft = FPR(copy(ft_value));
4206
4207 return img::format("CMP.SOR.D %s, %s, %s", fd, fs, ft);
4208 }
4209
4210
4211 /*
4212 *
4213 *
4214 * 3 2 1
4215 * 10987654321098765432109876543210
4216 * 001000 x1110000101
4217 * rt -----
4218 * rs -----
4219 * rd -----
4220 */
4221 std::string NMD::CMP_SOR_S(uint64 instruction)
4222 {
4223 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4224 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4225 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4226
4227 std::string fd = FPR(copy(fd_value));
4228 std::string fs = FPR(copy(fs_value));
4229 std::string ft = FPR(copy(ft_value));
4230
4231 return img::format("CMP.SOR.S %s, %s, %s", fd, fs, ft);
4232 }
4233
4234
4235 /*
4236 *
4237 *
4238 * 3 2 1
4239 * 10987654321098765432109876543210
4240 * 001000 x1110000101
4241 * rt -----
4242 * rs -----
4243 * rd -----
4244 */
4245 std::string NMD::CMP_SUEQ_D(uint64 instruction)
4246 {
4247 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4248 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4249 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4250
4251 std::string fd = FPR(copy(fd_value));
4252 std::string fs = FPR(copy(fs_value));
4253 std::string ft = FPR(copy(ft_value));
4254
4255 return img::format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft);
4256 }
4257
4258
4259 /*
4260 *
4261 *
4262 * 3 2 1
4263 * 10987654321098765432109876543210
4264 * 001000 x1110000101
4265 * rt -----
4266 * rs -----
4267 * rd -----
4268 */
4269 std::string NMD::CMP_SUEQ_S(uint64 instruction)
4270 {
4271 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4272 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4273 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4274
4275 std::string fd = FPR(copy(fd_value));
4276 std::string fs = FPR(copy(fs_value));
4277 std::string ft = FPR(copy(ft_value));
4278
4279 return img::format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft);
4280 }
4281
4282
4283 /*
4284 *
4285 *
4286 * 3 2 1
4287 * 10987654321098765432109876543210
4288 * 001000 x1110000101
4289 * rt -----
4290 * rs -----
4291 * rd -----
4292 */
4293 std::string NMD::CMP_SULE_D(uint64 instruction)
4294 {
4295 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4296 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4297 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4298
4299 std::string fd = FPR(copy(fd_value));
4300 std::string fs = FPR(copy(fs_value));
4301 std::string ft = FPR(copy(ft_value));
4302
4303 return img::format("CMP.SULE.D %s, %s, %s", fd, fs, ft);
4304 }
4305
4306
4307 /*
4308 *
4309 *
4310 * 3 2 1
4311 * 10987654321098765432109876543210
4312 * 001000 x1110000101
4313 * rt -----
4314 * rs -----
4315 * rd -----
4316 */
4317 std::string NMD::CMP_SULE_S(uint64 instruction)
4318 {
4319 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4320 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4321 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4322
4323 std::string fd = FPR(copy(fd_value));
4324 std::string fs = FPR(copy(fs_value));
4325 std::string ft = FPR(copy(ft_value));
4326
4327 return img::format("CMP.SULE.S %s, %s, %s", fd, fs, ft);
4328 }
4329
4330
4331 /*
4332 *
4333 *
4334 * 3 2 1
4335 * 10987654321098765432109876543210
4336 * 001000 x1110000101
4337 * rt -----
4338 * rs -----
4339 * rd -----
4340 */
4341 std::string NMD::CMP_SULT_D(uint64 instruction)
4342 {
4343 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4344 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4345 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4346
4347 std::string fd = FPR(copy(fd_value));
4348 std::string fs = FPR(copy(fs_value));
4349 std::string ft = FPR(copy(ft_value));
4350
4351 return img::format("CMP.SULT.D %s, %s, %s", fd, fs, ft);
4352 }
4353
4354
4355 /*
4356 *
4357 *
4358 * 3 2 1
4359 * 10987654321098765432109876543210
4360 * 001000 x1110000101
4361 * rt -----
4362 * rs -----
4363 * rd -----
4364 */
4365 std::string NMD::CMP_SULT_S(uint64 instruction)
4366 {
4367 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4368 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4369 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4370
4371 std::string fd = FPR(copy(fd_value));
4372 std::string fs = FPR(copy(fs_value));
4373 std::string ft = FPR(copy(ft_value));
4374
4375 return img::format("CMP.SULT.S %s, %s, %s", fd, fs, ft);
4376 }
4377
4378
4379 /*
4380 *
4381 *
4382 * 3 2 1
4383 * 10987654321098765432109876543210
4384 * 001000 x1110000101
4385 * rt -----
4386 * rs -----
4387 * rd -----
4388 */
4389 std::string NMD::CMP_SUN_D(uint64 instruction)
4390 {
4391 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4392 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4393 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4394
4395 std::string fd = FPR(copy(fd_value));
4396 std::string fs = FPR(copy(fs_value));
4397 std::string ft = FPR(copy(ft_value));
4398
4399 return img::format("CMP.SUN.D %s, %s, %s", fd, fs, ft);
4400 }
4401
4402
4403 /*
4404 *
4405 *
4406 * 3 2 1
4407 * 10987654321098765432109876543210
4408 * 001000 x1110000101
4409 * rt -----
4410 * rs -----
4411 * rd -----
4412 */
4413 std::string NMD::CMP_SUNE_D(uint64 instruction)
4414 {
4415 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4416 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4417 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4418
4419 std::string fd = FPR(copy(fd_value));
4420 std::string fs = FPR(copy(fs_value));
4421 std::string ft = FPR(copy(ft_value));
4422
4423 return img::format("CMP.SUNE.D %s, %s, %s", fd, fs, ft);
4424 }
4425
4426
4427 /*
4428 *
4429 *
4430 * 3 2 1
4431 * 10987654321098765432109876543210
4432 * 001000 x1110000101
4433 * rt -----
4434 * rs -----
4435 * rd -----
4436 */
4437 std::string NMD::CMP_SUNE_S(uint64 instruction)
4438 {
4439 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4440 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4441 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4442
4443 std::string fd = FPR(copy(fd_value));
4444 std::string fs = FPR(copy(fs_value));
4445 std::string ft = FPR(copy(ft_value));
4446
4447 return img::format("CMP.SUNE.S %s, %s, %s", fd, fs, ft);
4448 }
4449
4450
4451 /*
4452 *
4453 *
4454 * 3 2 1
4455 * 10987654321098765432109876543210
4456 * 001000 x1110000101
4457 * rt -----
4458 * rs -----
4459 * rd -----
4460 */
4461 std::string NMD::CMP_SUN_S(uint64 instruction)
4462 {
4463 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4464 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4465 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4466
4467 std::string fd = FPR(copy(fd_value));
4468 std::string fs = FPR(copy(fs_value));
4469 std::string ft = FPR(copy(ft_value));
4470
4471 return img::format("CMP.SUN.S %s, %s, %s", fd, fs, ft);
4472 }
4473
4474
4475 /*
4476 *
4477 *
4478 * 3 2 1
4479 * 10987654321098765432109876543210
4480 * 001000 x1110000101
4481 * rt -----
4482 * rs -----
4483 * rd -----
4484 */
4485 std::string NMD::CMP_UEQ_D(uint64 instruction)
4486 {
4487 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4488 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4489 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4490
4491 std::string fd = FPR(copy(fd_value));
4492 std::string fs = FPR(copy(fs_value));
4493 std::string ft = FPR(copy(ft_value));
4494
4495 return img::format("CMP.UEQ.D %s, %s, %s", fd, fs, ft);
4496 }
4497
4498
4499 /*
4500 *
4501 *
4502 * 3 2 1
4503 * 10987654321098765432109876543210
4504 * 001000 x1110000101
4505 * rt -----
4506 * rs -----
4507 * rd -----
4508 */
4509 std::string NMD::CMP_UEQ_S(uint64 instruction)
4510 {
4511 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4512 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4513 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4514
4515 std::string fd = FPR(copy(fd_value));
4516 std::string fs = FPR(copy(fs_value));
4517 std::string ft = FPR(copy(ft_value));
4518
4519 return img::format("CMP.UEQ.S %s, %s, %s", fd, fs, ft);
4520 }
4521
4522
4523 /*
4524 *
4525 *
4526 * 3 2 1
4527 * 10987654321098765432109876543210
4528 * 001000 x1110000101
4529 * rt -----
4530 * rs -----
4531 * rd -----
4532 */
4533 std::string NMD::CMP_ULE_D(uint64 instruction)
4534 {
4535 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4536 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4537 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4538
4539 std::string fd = FPR(copy(fd_value));
4540 std::string fs = FPR(copy(fs_value));
4541 std::string ft = FPR(copy(ft_value));
4542
4543 return img::format("CMP.ULE.D %s, %s, %s", fd, fs, ft);
4544 }
4545
4546
4547 /*
4548 *
4549 *
4550 * 3 2 1
4551 * 10987654321098765432109876543210
4552 * 001000 x1110000101
4553 * rt -----
4554 * rs -----
4555 * rd -----
4556 */
4557 std::string NMD::CMP_ULE_S(uint64 instruction)
4558 {
4559 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4560 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4561 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4562
4563 std::string fd = FPR(copy(fd_value));
4564 std::string fs = FPR(copy(fs_value));
4565 std::string ft = FPR(copy(ft_value));
4566
4567 return img::format("CMP.ULE.S %s, %s, %s", fd, fs, ft);
4568 }
4569
4570
4571 /*
4572 *
4573 *
4574 * 3 2 1
4575 * 10987654321098765432109876543210
4576 * 001000 x1110000101
4577 * rt -----
4578 * rs -----
4579 * rd -----
4580 */
4581 std::string NMD::CMP_ULT_D(uint64 instruction)
4582 {
4583 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4584 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4585 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4586
4587 std::string fd = FPR(copy(fd_value));
4588 std::string fs = FPR(copy(fs_value));
4589 std::string ft = FPR(copy(ft_value));
4590
4591 return img::format("CMP.ULT.D %s, %s, %s", fd, fs, ft);
4592 }
4593
4594
4595 /*
4596 *
4597 *
4598 * 3 2 1
4599 * 10987654321098765432109876543210
4600 * 001000 x1110000101
4601 * rt -----
4602 * rs -----
4603 * rd -----
4604 */
4605 std::string NMD::CMP_ULT_S(uint64 instruction)
4606 {
4607 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4608 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4609 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4610
4611 std::string fd = FPR(copy(fd_value));
4612 std::string fs = FPR(copy(fs_value));
4613 std::string ft = FPR(copy(ft_value));
4614
4615 return img::format("CMP.ULT.S %s, %s, %s", fd, fs, ft);
4616 }
4617
4618
4619 /*
4620 *
4621 *
4622 * 3 2 1
4623 * 10987654321098765432109876543210
4624 * 001000 x1110000101
4625 * rt -----
4626 * rs -----
4627 * rd -----
4628 */
4629 std::string NMD::CMP_UN_D(uint64 instruction)
4630 {
4631 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4632 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4633 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4634
4635 std::string fd = FPR(copy(fd_value));
4636 std::string fs = FPR(copy(fs_value));
4637 std::string ft = FPR(copy(ft_value));
4638
4639 return img::format("CMP.UN.D %s, %s, %s", fd, fs, ft);
4640 }
4641
4642
4643 /*
4644 *
4645 *
4646 * 3 2 1
4647 * 10987654321098765432109876543210
4648 * 001000 x1110000101
4649 * rt -----
4650 * rs -----
4651 * rd -----
4652 */
4653 std::string NMD::CMP_UNE_D(uint64 instruction)
4654 {
4655 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4656 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4657 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4658
4659 std::string fd = FPR(copy(fd_value));
4660 std::string fs = FPR(copy(fs_value));
4661 std::string ft = FPR(copy(ft_value));
4662
4663 return img::format("CMP.UNE.D %s, %s, %s", fd, fs, ft);
4664 }
4665
4666
4667 /*
4668 *
4669 *
4670 * 3 2 1
4671 * 10987654321098765432109876543210
4672 * 001000 x1110000101
4673 * rt -----
4674 * rs -----
4675 * rd -----
4676 */
4677 std::string NMD::CMP_UNE_S(uint64 instruction)
4678 {
4679 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4680 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4681 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4682
4683 std::string fd = FPR(copy(fd_value));
4684 std::string fs = FPR(copy(fs_value));
4685 std::string ft = FPR(copy(ft_value));
4686
4687 return img::format("CMP.UNE.S %s, %s, %s", fd, fs, ft);
4688 }
4689
4690
4691 /*
4692 *
4693 *
4694 * 3 2 1
4695 * 10987654321098765432109876543210
4696 * 001000 x1110000101
4697 * rt -----
4698 * rs -----
4699 * rd -----
4700 */
4701 std::string NMD::CMP_UN_S(uint64 instruction)
4702 {
4703 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4704 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4705 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4706
4707 std::string fd = FPR(copy(fd_value));
4708 std::string fs = FPR(copy(fs_value));
4709 std::string ft = FPR(copy(ft_value));
4710
4711 return img::format("CMP.UN.S %s, %s, %s", fd, fs, ft);
4712 }
4713
4714
4715 /*
4716 *
4717 *
4718 * 3 2 1
4719 * 10987654321098765432109876543210
4720 * 001000 x1110000101
4721 * rt -----
4722 * rs -----
4723 * rd -----
4724 */
4725 std::string NMD::CMPGDU_EQ_QB(uint64 instruction)
4726 {
4727 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4728 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4729 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4730
4731 std::string rd = GPR(copy(rd_value));
4732 std::string rs = GPR(copy(rs_value));
4733 std::string rt = GPR(copy(rt_value));
4734
4735 return img::format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt);
4736 }
4737
4738
4739 /*
4740 *
4741 *
4742 * 3 2 1
4743 * 10987654321098765432109876543210
4744 * 001000 x1110000101
4745 * rt -----
4746 * rs -----
4747 * rd -----
4748 */
4749 std::string NMD::CMPGDU_LE_QB(uint64 instruction)
4750 {
4751 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4752 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4753 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4754
4755 std::string rd = GPR(copy(rd_value));
4756 std::string rs = GPR(copy(rs_value));
4757 std::string rt = GPR(copy(rt_value));
4758
4759 return img::format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt);
4760 }
4761
4762
4763 /*
4764 *
4765 *
4766 * 3 2 1
4767 * 10987654321098765432109876543210
4768 * 001000 x1110000101
4769 * rt -----
4770 * rs -----
4771 * rd -----
4772 */
4773 std::string NMD::CMPGDU_LT_QB(uint64 instruction)
4774 {
4775 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4776 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4777 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4778
4779 std::string rd = GPR(copy(rd_value));
4780 std::string rs = GPR(copy(rs_value));
4781 std::string rt = GPR(copy(rt_value));
4782
4783 return img::format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt);
4784 }
4785
4786
4787 /*
4788 *
4789 *
4790 * 3 2 1
4791 * 10987654321098765432109876543210
4792 * 001000 x1110000101
4793 * rt -----
4794 * rs -----
4795 * rd -----
4796 */
4797 std::string NMD::CMPGU_EQ_QB(uint64 instruction)
4798 {
4799 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4800 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4801 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4802
4803 std::string rd = GPR(copy(rd_value));
4804 std::string rs = GPR(copy(rs_value));
4805 std::string rt = GPR(copy(rt_value));
4806
4807 return img::format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt);
4808 }
4809
4810
4811 /*
4812 *
4813 *
4814 * 3 2 1
4815 * 10987654321098765432109876543210
4816 * 001000 x1110000101
4817 * rt -----
4818 * rs -----
4819 * rd -----
4820 */
4821 std::string NMD::CMPGU_LE_QB(uint64 instruction)
4822 {
4823 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4824 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4825 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4826
4827 std::string rd = GPR(copy(rd_value));
4828 std::string rs = GPR(copy(rs_value));
4829 std::string rt = GPR(copy(rt_value));
4830
4831 return img::format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt);
4832 }
4833
4834
4835 /*
4836 *
4837 *
4838 * 3 2 1
4839 * 10987654321098765432109876543210
4840 * 001000 x1110000101
4841 * rt -----
4842 * rs -----
4843 * rd -----
4844 */
4845 std::string NMD::CMPGU_LT_QB(uint64 instruction)
4846 {
4847 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4848 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4849 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4850
4851 std::string rd = GPR(copy(rd_value));
4852 std::string rs = GPR(copy(rs_value));
4853 std::string rt = GPR(copy(rt_value));
4854
4855 return img::format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt);
4856 }
4857
4858
4859 /*
4860 *
4861 *
4862 * 3 2 1
4863 * 10987654321098765432109876543210
4864 * 001000 x1110000101
4865 * rt -----
4866 * rs -----
4867 * rd -----
4868 */
4869 std::string NMD::CMPU_EQ_QB(uint64 instruction)
4870 {
4871 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4872 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4873
4874 std::string rs = GPR(copy(rs_value));
4875 std::string rt = GPR(copy(rt_value));
4876
4877 return img::format("CMPU.EQ.QB %s, %s", rs, rt);
4878 }
4879
4880
4881 /*
4882 *
4883 *
4884 * 3 2 1
4885 * 10987654321098765432109876543210
4886 * 001000 x1110000101
4887 * rt -----
4888 * rs -----
4889 * rd -----
4890 */
4891 std::string NMD::CMPU_LE_QB(uint64 instruction)
4892 {
4893 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4894 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4895
4896 std::string rs = GPR(copy(rs_value));
4897 std::string rt = GPR(copy(rt_value));
4898
4899 return img::format("CMPU.LE.QB %s, %s", rs, rt);
4900 }
4901
4902
4903 /*
4904 *
4905 *
4906 * 3 2 1
4907 * 10987654321098765432109876543210
4908 * 001000 x1110000101
4909 * rt -----
4910 * rs -----
4911 * rd -----
4912 */
4913 std::string NMD::CMPU_LT_QB(uint64 instruction)
4914 {
4915 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4916 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4917
4918 std::string rs = GPR(copy(rs_value));
4919 std::string rt = GPR(copy(rt_value));
4920
4921 return img::format("CMPU.LT.QB %s, %s", rs, rt);
4922 }
4923
4924
4925 /*
4926 *
4927 *
4928 * 3 2 1
4929 * 10987654321098765432109876543210
4930 * 001000 x1110000101
4931 * rt -----
4932 * rs -----
4933 * rd -----
4934 */
4935 std::string NMD::COP2_1(uint64 instruction)
4936 {
4937 uint64 cofun_value = extract_cofun_25_24_23(instruction);
4938
4939 std::string cofun = IMMEDIATE(copy(cofun_value));
4940
4941 return img::format("COP2_1 %s", cofun);
4942 }
4943
4944
4945 /*
4946 *
4947 *
4948 * 3 2 1
4949 * 10987654321098765432109876543210
4950 * 001000 x1110000101
4951 * rt -----
4952 * rs -----
4953 * rd -----
4954 */
4955 std::string NMD::CTC1(uint64 instruction)
4956 {
4957 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4958 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
4959
4960 std::string rt = GPR(copy(rt_value));
4961 std::string cs = CPR(copy(cs_value));
4962
4963 return img::format("CTC1 %s, %s", rt, cs);
4964 }
4965
4966
4967 /*
4968 *
4969 *
4970 * 3 2 1
4971 * 10987654321098765432109876543210
4972 * 001000 x1110000101
4973 * rt -----
4974 * rs -----
4975 * rd -----
4976 */
4977 std::string NMD::CTC2(uint64 instruction)
4978 {
4979 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4980 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
4981
4982 std::string rt = GPR(copy(rt_value));
4983 std::string cs = CPR(copy(cs_value));
4984
4985 return img::format("CTC2 %s, %s", rt, cs);
4986 }
4987
4988
4989 /*
4990 *
4991 *
4992 * 3 2 1
4993 * 10987654321098765432109876543210
4994 * 001000 x1110000101
4995 * rt -----
4996 * rs -----
4997 * rd -----
4998 */
4999 std::string NMD::CVT_D_L(uint64 instruction)
5000 {
5001 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5002 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5003
5004 std::string ft = FPR(copy(ft_value));
5005 std::string fs = FPR(copy(fs_value));
5006
5007 return img::format("CVT.D.L %s, %s", ft, fs);
5008 }
5009
5010
5011 /*
5012 *
5013 *
5014 * 3 2 1
5015 * 10987654321098765432109876543210
5016 * 001000 x1110000101
5017 * rt -----
5018 * rs -----
5019 * rd -----
5020 */
5021 std::string NMD::CVT_D_S(uint64 instruction)
5022 {
5023 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5024 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5025
5026 std::string ft = FPR(copy(ft_value));
5027 std::string fs = FPR(copy(fs_value));
5028
5029 return img::format("CVT.D.S %s, %s", ft, fs);
5030 }
5031
5032
5033 /*
5034 *
5035 *
5036 * 3 2 1
5037 * 10987654321098765432109876543210
5038 * 001000 x1110000101
5039 * rt -----
5040 * rs -----
5041 * rd -----
5042 */
5043 std::string NMD::CVT_D_W(uint64 instruction)
5044 {
5045 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5046 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5047
5048 std::string ft = FPR(copy(ft_value));
5049 std::string fs = FPR(copy(fs_value));
5050
5051 return img::format("CVT.D.W %s, %s", ft, fs);
5052 }
5053
5054
5055 /*
5056 *
5057 *
5058 * 3 2 1
5059 * 10987654321098765432109876543210
5060 * 001000 x1110000101
5061 * rt -----
5062 * rs -----
5063 * rd -----
5064 */
5065 std::string NMD::CVT_L_D(uint64 instruction)
5066 {
5067 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5068 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5069
5070 std::string ft = FPR(copy(ft_value));
5071 std::string fs = FPR(copy(fs_value));
5072
5073 return img::format("CVT.L.D %s, %s", ft, fs);
5074 }
5075
5076
5077 /*
5078 *
5079 *
5080 * 3 2 1
5081 * 10987654321098765432109876543210
5082 * 001000 x1110000101
5083 * rt -----
5084 * rs -----
5085 * rd -----
5086 */
5087 std::string NMD::CVT_L_S(uint64 instruction)
5088 {
5089 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5090 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5091
5092 std::string ft = FPR(copy(ft_value));
5093 std::string fs = FPR(copy(fs_value));
5094
5095 return img::format("CVT.L.S %s, %s", ft, fs);
5096 }
5097
5098
5099 /*
5100 *
5101 *
5102 * 3 2 1
5103 * 10987654321098765432109876543210
5104 * 001000 x1110000101
5105 * rt -----
5106 * rs -----
5107 * rd -----
5108 */
5109 std::string NMD::CVT_S_D(uint64 instruction)
5110 {
5111 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5112 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5113
5114 std::string ft = FPR(copy(ft_value));
5115 std::string fs = FPR(copy(fs_value));
5116
5117 return img::format("CVT.S.D %s, %s", ft, fs);
5118 }
5119
5120
5121 /*
5122 *
5123 *
5124 * 3 2 1
5125 * 10987654321098765432109876543210
5126 * 001000 x1110000101
5127 * rt -----
5128 * rs -----
5129 * rd -----
5130 */
5131 std::string NMD::CVT_S_L(uint64 instruction)
5132 {
5133 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5134 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5135
5136 std::string ft = FPR(copy(ft_value));
5137 std::string fs = FPR(copy(fs_value));
5138
5139 return img::format("CVT.S.L %s, %s", ft, fs);
5140 }
5141
5142
5143 /*
5144 *
5145 *
5146 * 3 2 1
5147 * 10987654321098765432109876543210
5148 * 001000 x1110000101
5149 * rt -----
5150 * rs -----
5151 * rd -----
5152 */
5153 std::string NMD::CVT_S_PL(uint64 instruction)
5154 {
5155 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5156 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5157
5158 std::string ft = FPR(copy(ft_value));
5159 std::string fs = FPR(copy(fs_value));
5160
5161 return img::format("CVT.S.PL %s, %s", ft, fs);
5162 }
5163
5164
5165 /*
5166 *
5167 *
5168 * 3 2 1
5169 * 10987654321098765432109876543210
5170 * 001000 x1110000101
5171 * rt -----
5172 * rs -----
5173 * rd -----
5174 */
5175 std::string NMD::CVT_S_PU(uint64 instruction)
5176 {
5177 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5178 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5179
5180 std::string ft = FPR(copy(ft_value));
5181 std::string fs = FPR(copy(fs_value));
5182
5183 return img::format("CVT.S.PU %s, %s", ft, fs);
5184 }
5185
5186
5187 /*
5188 *
5189 *
5190 * 3 2 1
5191 * 10987654321098765432109876543210
5192 * 001000 x1110000101
5193 * rt -----
5194 * rs -----
5195 * rd -----
5196 */
5197 std::string NMD::CVT_S_W(uint64 instruction)
5198 {
5199 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5200 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5201
5202 std::string ft = FPR(copy(ft_value));
5203 std::string fs = FPR(copy(fs_value));
5204
5205 return img::format("CVT.S.W %s, %s", ft, fs);
5206 }
5207
5208
5209 /*
5210 *
5211 *
5212 * 3 2 1
5213 * 10987654321098765432109876543210
5214 * 001000 x1110000101
5215 * rt -----
5216 * rs -----
5217 * rd -----
5218 */
5219 std::string NMD::CVT_W_D(uint64 instruction)
5220 {
5221 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5222 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5223
5224 std::string ft = FPR(copy(ft_value));
5225 std::string fs = FPR(copy(fs_value));
5226
5227 return img::format("CVT.W.D %s, %s", ft, fs);
5228 }
5229
5230
5231 /*
5232 *
5233 *
5234 * 3 2 1
5235 * 10987654321098765432109876543210
5236 * 001000 x1110000101
5237 * rt -----
5238 * rs -----
5239 * rd -----
5240 */
5241 std::string NMD::CVT_W_S(uint64 instruction)
5242 {
5243 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5244 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5245
5246 std::string ft = FPR(copy(ft_value));
5247 std::string fs = FPR(copy(fs_value));
5248
5249 return img::format("CVT.W.S %s, %s", ft, fs);
5250 }
5251
5252
5253 /*
5254 *
5255 *
5256 * 3 2 1
5257 * 10987654321098765432109876543210
5258 * 001000 x1110000101
5259 * rt -----
5260 * rs -----
5261 * rd -----
5262 */
5263 std::string NMD::DADDIU_48_(uint64 instruction)
5264 {
5265 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5266 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
5267
5268 std::string rt = GPR(copy(rt_value));
5269 std::string s = IMMEDIATE(copy(s_value));
5270
5271 return img::format("DADDIU %s, %s", rt, s);
5272 }
5273
5274
5275 /*
5276 *
5277 *
5278 * 3 2 1
5279 * 10987654321098765432109876543210
5280 * 001000 x1110000101
5281 * rt -----
5282 * rs -----
5283 * rd -----
5284 */
5285 std::string NMD::DADDIU_NEG_(uint64 instruction)
5286 {
5287 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5288 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5289 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5290
5291 std::string rt = GPR(copy(rt_value));
5292 std::string rs = GPR(copy(rs_value));
5293 std::string u = IMMEDIATE(neg_copy(u_value));
5294
5295 return img::format("DADDIU %s, %s, %s", rt, rs, u);
5296 }
5297
5298
5299 /*
5300 *
5301 *
5302 * 3 2 1
5303 * 10987654321098765432109876543210
5304 * 001000 x1110000101
5305 * rt -----
5306 * rs -----
5307 * rd -----
5308 */
5309 std::string NMD::DADDIU_U12_(uint64 instruction)
5310 {
5311 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5312 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5313 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5314
5315 std::string rt = GPR(copy(rt_value));
5316 std::string rs = GPR(copy(rs_value));
5317 std::string u = IMMEDIATE(copy(u_value));
5318
5319 return img::format("DADDIU %s, %s, %s", rt, rs, u);
5320 }
5321
5322
5323 /*
5324 *
5325 *
5326 * 3 2 1
5327 * 10987654321098765432109876543210
5328 * 001000 x1110000101
5329 * rt -----
5330 * rs -----
5331 * rd -----
5332 */
5333 std::string NMD::DADD(uint64 instruction)
5334 {
5335 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5336 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5337 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5338
5339 std::string rd = GPR(copy(rd_value));
5340 std::string rs = GPR(copy(rs_value));
5341 std::string rt = GPR(copy(rt_value));
5342
5343 return img::format("DADD %s, %s, %s", rd, rs, rt);
5344 }
5345
5346
5347 /*
5348 *
5349 *
5350 * 3 2 1
5351 * 10987654321098765432109876543210
5352 * 001000 x1110000101
5353 * rt -----
5354 * rs -----
5355 * rd -----
5356 */
5357 std::string NMD::DADDU(uint64 instruction)
5358 {
5359 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5360 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5361 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5362
5363 std::string rd = GPR(copy(rd_value));
5364 std::string rs = GPR(copy(rs_value));
5365 std::string rt = GPR(copy(rt_value));
5366
5367 return img::format("DADDU %s, %s, %s", rd, rs, rt);
5368 }
5369
5370
5371 /*
5372 *
5373 *
5374 * 3 2 1
5375 * 10987654321098765432109876543210
5376 * 001000 x1110000101
5377 * rt -----
5378 * rs -----
5379 * rd -----
5380 */
5381 std::string NMD::DCLO(uint64 instruction)
5382 {
5383 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5384 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5385
5386 std::string rt = GPR(copy(rt_value));
5387 std::string rs = GPR(copy(rs_value));
5388
5389 return img::format("DCLO %s, %s", rt, rs);
5390 }
5391
5392
5393 /*
5394 *
5395 *
5396 * 3 2 1
5397 * 10987654321098765432109876543210
5398 * 001000 x1110000101
5399 * rt -----
5400 * rs -----
5401 * rd -----
5402 */
5403 std::string NMD::DCLZ(uint64 instruction)
5404 {
5405 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5406 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5407
5408 std::string rt = GPR(copy(rt_value));
5409 std::string rs = GPR(copy(rs_value));
5410
5411 return img::format("DCLZ %s, %s", rt, rs);
5412 }
5413
5414
5415 /*
5416 *
5417 *
5418 * 3 2 1
5419 * 10987654321098765432109876543210
5420 * 001000 x1110000101
5421 * rt -----
5422 * rs -----
5423 * rd -----
5424 */
5425 std::string NMD::DDIV(uint64 instruction)
5426 {
5427 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5428 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5429 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5430
5431 std::string rd = GPR(copy(rd_value));
5432 std::string rs = GPR(copy(rs_value));
5433 std::string rt = GPR(copy(rt_value));
5434
5435 return img::format("DDIV %s, %s, %s", rd, rs, rt);
5436 }
5437
5438
5439 /*
5440 *
5441 *
5442 * 3 2 1
5443 * 10987654321098765432109876543210
5444 * 001000 x1110000101
5445 * rt -----
5446 * rs -----
5447 * rd -----
5448 */
5449 std::string NMD::DDIVU(uint64 instruction)
5450 {
5451 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5452 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5453 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5454
5455 std::string rd = GPR(copy(rd_value));
5456 std::string rs = GPR(copy(rs_value));
5457 std::string rt = GPR(copy(rt_value));
5458
5459 return img::format("DDIVU %s, %s, %s", rd, rs, rt);
5460 }
5461
5462
5463 /*
5464 *
5465 *
5466 * 3 2 1
5467 * 10987654321098765432109876543210
5468 * 001000 x1110000101
5469 * rt -----
5470 * rs -----
5471 * rd -----
5472 */
5473 std::string NMD::DERET(uint64 instruction)
5474 {
5475 (void)instruction;
5476
5477 return "DERET ";
5478 }
5479
5480
5481 /*
5482 *
5483 *
5484 * 3 2 1
5485 * 10987654321098765432109876543210
5486 * 001000 x1110000101
5487 * rt -----
5488 * rs -----
5489 * rd -----
5490 */
5491 std::string NMD::DEXTM(uint64 instruction)
5492 {
5493 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5494 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5495 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5496 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5497
5498 std::string rt = GPR(copy(rt_value));
5499 std::string rs = GPR(copy(rs_value));
5500 std::string lsb = IMMEDIATE(copy(lsb_value));
5501 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5502
5503 return img::format("DEXTM %s, %s, %s, %s", rt, rs, lsb, msbd);
5504 }
5505
5506
5507 /*
5508 *
5509 *
5510 * 3 2 1
5511 * 10987654321098765432109876543210
5512 * 001000 x1110000101
5513 * rt -----
5514 * rs -----
5515 * rd -----
5516 */
5517 std::string NMD::DEXT(uint64 instruction)
5518 {
5519 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5520 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5521 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5522 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5523
5524 std::string rt = GPR(copy(rt_value));
5525 std::string rs = GPR(copy(rs_value));
5526 std::string lsb = IMMEDIATE(copy(lsb_value));
5527 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5528
5529 return img::format("DEXT %s, %s, %s, %s", rt, rs, lsb, msbd);
5530 }
5531
5532
5533 /*
5534 *
5535 *
5536 * 3 2 1
5537 * 10987654321098765432109876543210
5538 * 001000 x1110000101
5539 * rt -----
5540 * rs -----
5541 * rd -----
5542 */
5543 std::string NMD::DEXTU(uint64 instruction)
5544 {
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 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5548 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5549
5550 std::string rt = GPR(copy(rt_value));
5551 std::string rs = GPR(copy(rs_value));
5552 std::string lsb = IMMEDIATE(copy(lsb_value));
5553 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5554
5555 return img::format("DEXTU %s, %s, %s, %s", rt, rs, lsb, msbd);
5556 }
5557
5558
5559 /*
5560 *
5561 *
5562 * 3 2 1
5563 * 10987654321098765432109876543210
5564 * 001000 x1110000101
5565 * rt -----
5566 * rs -----
5567 * rd -----
5568 */
5569 std::string NMD::DINSM(uint64 instruction)
5570 {
5571 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5572 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5573 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5574 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5575
5576 std::string rt = GPR(copy(rt_value));
5577 std::string rs = GPR(copy(rs_value));
5578 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5579 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5580 /* !!!!!!!!!! - no conversion function */
5581
5582 return img::format("DINSM %s, %s, %s, %s", rt, rs, pos, size);
5583 /* hand edited */
5584 }
5585
5586
5587 /*
5588 *
5589 *
5590 * 3 2 1
5591 * 10987654321098765432109876543210
5592 * 001000 x1110000101
5593 * rt -----
5594 * rs -----
5595 * rd -----
5596 */
5597 std::string NMD::DINS(uint64 instruction)
5598 {
5599 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5600 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5601 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5602 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5603
5604 std::string rt = GPR(copy(rt_value));
5605 std::string rs = GPR(copy(rs_value));
5606 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5607 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5608 /* !!!!!!!!!! - no conversion function */
5609
5610 return img::format("DINS %s, %s, %s, %s", rt, rs, pos, size);
5611 /* hand edited */
5612 }
5613
5614
5615 /*
5616 *
5617 *
5618 * 3 2 1
5619 * 10987654321098765432109876543210
5620 * 001000 x1110000101
5621 * rt -----
5622 * rs -----
5623 * rd -----
5624 */
5625 std::string NMD::DINSU(uint64 instruction)
5626 {
5627 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5628 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5629 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5630 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5631
5632 std::string rt = GPR(copy(rt_value));
5633 std::string rs = GPR(copy(rs_value));
5634 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5635 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5636 /* !!!!!!!!!! - no conversion function */
5637
5638 return img::format("DINSU %s, %s, %s, %s", rt, rs, pos, size);
5639 /* hand edited */
5640 }
5641
5642
5643 /*
5644 *
5645 *
5646 * 3 2 1
5647 * 10987654321098765432109876543210
5648 * 001000 x1110000101
5649 * rt -----
5650 * rs -----
5651 * rd -----
5652 */
5653 std::string NMD::DI(uint64 instruction)
5654 {
5655 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5656
5657 std::string rt = GPR(copy(rt_value));
5658
5659 return img::format("DI %s", rt);
5660 }
5661
5662
5663 /*
5664 *
5665 *
5666 * 3 2 1
5667 * 10987654321098765432109876543210
5668 * 001000 x1110000101
5669 * rt -----
5670 * rs -----
5671 * rd -----
5672 */
5673 std::string NMD::DIV(uint64 instruction)
5674 {
5675 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5676 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5677 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5678
5679 std::string rd = GPR(copy(rd_value));
5680 std::string rs = GPR(copy(rs_value));
5681 std::string rt = GPR(copy(rt_value));
5682
5683 return img::format("DIV %s, %s, %s", rd, rs, rt);
5684 }
5685
5686
5687 /*
5688 *
5689 *
5690 * 3 2 1
5691 * 10987654321098765432109876543210
5692 * 001000 x1110000101
5693 * rt -----
5694 * rs -----
5695 * rd -----
5696 */
5697 std::string NMD::DIV_D(uint64 instruction)
5698 {
5699 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5700 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5701 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5702
5703 std::string fd = FPR(copy(fd_value));
5704 std::string fs = FPR(copy(fs_value));
5705 std::string ft = FPR(copy(ft_value));
5706
5707 return img::format("DIV.D %s, %s, %s", fd, fs, ft);
5708 }
5709
5710
5711 /*
5712 *
5713 *
5714 * 3 2 1
5715 * 10987654321098765432109876543210
5716 * 001000 x1110000101
5717 * rt -----
5718 * rs -----
5719 * rd -----
5720 */
5721 std::string NMD::DIV_S(uint64 instruction)
5722 {
5723 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5724 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5725 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5726
5727 std::string fd = FPR(copy(fd_value));
5728 std::string fs = FPR(copy(fs_value));
5729 std::string ft = FPR(copy(ft_value));
5730
5731 return img::format("DIV.S %s, %s, %s", fd, fs, ft);
5732 }
5733
5734
5735 /*
5736 *
5737 *
5738 * 3 2 1
5739 * 10987654321098765432109876543210
5740 * 001000 x1110000101
5741 * rt -----
5742 * rs -----
5743 * rd -----
5744 */
5745 std::string NMD::DIVU(uint64 instruction)
5746 {
5747 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5748 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5749 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5750
5751 std::string rd = GPR(copy(rd_value));
5752 std::string rs = GPR(copy(rs_value));
5753 std::string rt = GPR(copy(rt_value));
5754
5755 return img::format("DIVU %s, %s, %s", rd, rs, rt);
5756 }
5757
5758
5759 /*
5760 *
5761 *
5762 * 3 2 1
5763 * 10987654321098765432109876543210
5764 * 001000 x1110000101
5765 * rt -----
5766 * rs -----
5767 * rd -----
5768 */
5769 std::string NMD::DLSA(uint64 instruction)
5770 {
5771 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5772 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5773 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5774 uint64 u2_value = extract_u2_10_9(instruction);
5775
5776 std::string rd = GPR(copy(rd_value));
5777 std::string rs = GPR(copy(rs_value));
5778 std::string rt = GPR(copy(rt_value));
5779 std::string u2 = IMMEDIATE(copy(u2_value));
5780
5781 return img::format("DLSA %s, %s, %s, %s", rd, rs, rt, u2);
5782 }
5783
5784
5785 /*
5786 *
5787 *
5788 * 3 2 1
5789 * 10987654321098765432109876543210
5790 * 001000 x1110000101
5791 * rt -----
5792 * rs -----
5793 * rd -----
5794 */
5795 std::string NMD::DLUI_48_(uint64 instruction)
5796 {
5797 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5798 uint64 u_value = extract_u_31_to_0__s32(instruction);
5799
5800 std::string rt = GPR(copy(rt_value));
5801 std::string u = IMMEDIATE(copy(u_value));
5802
5803 return img::format("DLUI %s, %s", rt, u);
5804 }
5805
5806
5807 /*
5808 *
5809 *
5810 * 3 2 1
5811 * 10987654321098765432109876543210
5812 * 001000 x1110000101
5813 * rt -----
5814 * rs -----
5815 * rd -----
5816 */
5817 std::string NMD::DMFC0(uint64 instruction)
5818 {
5819 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5820 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5821 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5822
5823 std::string rt = GPR(copy(rt_value));
5824 std::string c0s = CPR(copy(c0s_value));
5825 std::string sel = IMMEDIATE(copy(sel_value));
5826
5827 return img::format("DMFC0 %s, %s, %s", rt, c0s, sel);
5828 }
5829
5830
5831 /*
5832 *
5833 *
5834 * 3 2 1
5835 * 10987654321098765432109876543210
5836 * 001000 x1110000101
5837 * rt -----
5838 * rs -----
5839 * rd -----
5840 */
5841 std::string NMD::DMFC1(uint64 instruction)
5842 {
5843 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5844 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5845
5846 std::string rt = GPR(copy(rt_value));
5847 std::string fs = FPR(copy(fs_value));
5848
5849 return img::format("DMFC1 %s, %s", rt, fs);
5850 }
5851
5852
5853 /*
5854 *
5855 *
5856 * 3 2 1
5857 * 10987654321098765432109876543210
5858 * 001000 x1110000101
5859 * rt -----
5860 * rs -----
5861 * rd -----
5862 */
5863 std::string NMD::DMFC2(uint64 instruction)
5864 {
5865 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5866 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5867
5868 std::string rt = GPR(copy(rt_value));
5869 std::string cs = CPR(copy(cs_value));
5870
5871 return img::format("DMFC2 %s, %s", rt, cs);
5872 }
5873
5874
5875 /*
5876 *
5877 *
5878 * 3 2 1
5879 * 10987654321098765432109876543210
5880 * 001000 x1110000101
5881 * rt -----
5882 * rs -----
5883 * rd -----
5884 */
5885 std::string NMD::DMFGC0(uint64 instruction)
5886 {
5887 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5888 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5889 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5890
5891 std::string rt = GPR(copy(rt_value));
5892 std::string c0s = CPR(copy(c0s_value));
5893 std::string sel = IMMEDIATE(copy(sel_value));
5894
5895 return img::format("DMFGC0 %s, %s, %s", rt, c0s, sel);
5896 }
5897
5898
5899 /*
5900 *
5901 *
5902 * 3 2 1
5903 * 10987654321098765432109876543210
5904 * 001000 x1110000101
5905 * rt -----
5906 * rs -----
5907 * rd -----
5908 */
5909 std::string NMD::DMOD(uint64 instruction)
5910 {
5911 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5912 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5913 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5914
5915 std::string rd = GPR(copy(rd_value));
5916 std::string rs = GPR(copy(rs_value));
5917 std::string rt = GPR(copy(rt_value));
5918
5919 return img::format("DMOD %s, %s, %s", rd, rs, rt);
5920 }
5921
5922
5923 /*
5924 *
5925 *
5926 * 3 2 1
5927 * 10987654321098765432109876543210
5928 * 001000 x1110000101
5929 * rt -----
5930 * rs -----
5931 * rd -----
5932 */
5933 std::string NMD::DMODU(uint64 instruction)
5934 {
5935 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5936 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5937 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5938
5939 std::string rd = GPR(copy(rd_value));
5940 std::string rs = GPR(copy(rs_value));
5941 std::string rt = GPR(copy(rt_value));
5942
5943 return img::format("DMODU %s, %s, %s", rd, rs, rt);
5944 }
5945
5946
5947 /*
5948 *
5949 *
5950 * 3 2 1
5951 * 10987654321098765432109876543210
5952 * 001000 x1110000101
5953 * rt -----
5954 * rs -----
5955 * rd -----
5956 */
5957 std::string NMD::DMTC0(uint64 instruction)
5958 {
5959 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5960 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5961 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5962
5963 std::string rt = GPR(copy(rt_value));
5964 std::string c0s = CPR(copy(c0s_value));
5965 std::string sel = IMMEDIATE(copy(sel_value));
5966
5967 return img::format("DMTC0 %s, %s, %s", rt, c0s, sel);
5968 }
5969
5970
5971 /*
5972 *
5973 *
5974 * 3 2 1
5975 * 10987654321098765432109876543210
5976 * 001000 x1110000101
5977 * rt -----
5978 * rs -----
5979 * rd -----
5980 */
5981 std::string NMD::DMTC1(uint64 instruction)
5982 {
5983 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5984 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5985
5986 std::string rt = GPR(copy(rt_value));
5987 std::string fs = FPR(copy(fs_value));
5988
5989 return img::format("DMTC1 %s, %s", rt, fs);
5990 }
5991
5992
5993 /*
5994 *
5995 *
5996 * 3 2 1
5997 * 10987654321098765432109876543210
5998 * 001000 x1110000101
5999 * rt -----
6000 * rs -----
6001 * rd -----
6002 */
6003 std::string NMD::DMTC2(uint64 instruction)
6004 {
6005 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6006 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
6007
6008 std::string rt = GPR(copy(rt_value));
6009 std::string cs = CPR(copy(cs_value));
6010
6011 return img::format("DMTC2 %s, %s", rt, cs);
6012 }
6013
6014
6015 /*
6016 *
6017 *
6018 * 3 2 1
6019 * 10987654321098765432109876543210
6020 * 001000 x1110000101
6021 * rt -----
6022 * rs -----
6023 * rd -----
6024 */
6025 std::string NMD::DMTGC0(uint64 instruction)
6026 {
6027 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6028 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6029 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6030
6031 std::string rt = GPR(copy(rt_value));
6032 std::string c0s = CPR(copy(c0s_value));
6033 std::string sel = IMMEDIATE(copy(sel_value));
6034
6035 return img::format("DMTGC0 %s, %s, %s", rt, c0s, sel);
6036 }
6037
6038
6039 /*
6040 *
6041 *
6042 * 3 2 1
6043 * 10987654321098765432109876543210
6044 * 001000 x1110000101
6045 * rt -----
6046 * rs -----
6047 * rd -----
6048 */
6049 std::string NMD::DMT(uint64 instruction)
6050 {
6051 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6052
6053 std::string rt = GPR(copy(rt_value));
6054
6055 return img::format("DMT %s", rt);
6056 }
6057
6058
6059 /*
6060 *
6061 *
6062 * 3 2 1
6063 * 10987654321098765432109876543210
6064 * 001000 x1110000101
6065 * rt -----
6066 * rs -----
6067 * rd -----
6068 */
6069 std::string NMD::DMUH(uint64 instruction)
6070 {
6071 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6072 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6073 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6074
6075 std::string rd = GPR(copy(rd_value));
6076 std::string rs = GPR(copy(rs_value));
6077 std::string rt = GPR(copy(rt_value));
6078
6079 return img::format("DMUH %s, %s, %s", rd, rs, rt);
6080 }
6081
6082
6083 /*
6084 *
6085 *
6086 * 3 2 1
6087 * 10987654321098765432109876543210
6088 * 001000 x1110000101
6089 * rt -----
6090 * rs -----
6091 * rd -----
6092 */
6093 std::string NMD::DMUHU(uint64 instruction)
6094 {
6095 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6096 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6097 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6098
6099 std::string rd = GPR(copy(rd_value));
6100 std::string rs = GPR(copy(rs_value));
6101 std::string rt = GPR(copy(rt_value));
6102
6103 return img::format("DMUHU %s, %s, %s", rd, rs, rt);
6104 }
6105
6106
6107 /*
6108 *
6109 *
6110 * 3 2 1
6111 * 10987654321098765432109876543210
6112 * 001000 x1110000101
6113 * rt -----
6114 * rs -----
6115 * rd -----
6116 */
6117 std::string NMD::DMUL(uint64 instruction)
6118 {
6119 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6120 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6121 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6122
6123 std::string rd = GPR(copy(rd_value));
6124 std::string rs = GPR(copy(rs_value));
6125 std::string rt = GPR(copy(rt_value));
6126
6127 return img::format("DMUL %s, %s, %s", rd, rs, rt);
6128 }
6129
6130
6131 /*
6132 *
6133 *
6134 * 3 2 1
6135 * 10987654321098765432109876543210
6136 * 001000 x1110000101
6137 * rt -----
6138 * rs -----
6139 * rd -----
6140 */
6141 std::string NMD::DMULU(uint64 instruction)
6142 {
6143 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6144 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6145 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6146
6147 std::string rd = GPR(copy(rd_value));
6148 std::string rs = GPR(copy(rs_value));
6149 std::string rt = GPR(copy(rt_value));
6150
6151 return img::format("DMULU %s, %s, %s", rd, rs, rt);
6152 }
6153
6154
6155 /*
6156 *
6157 *
6158 * 3 2 1
6159 * 10987654321098765432109876543210
6160 * 001000 x1110000101
6161 * rt -----
6162 * rs -----
6163 * rd -----
6164 */
6165 std::string NMD::DPA_W_PH(uint64 instruction)
6166 {
6167 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6168 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6169 uint64 ac_value = extract_ac_13_12(instruction);
6170
6171 std::string ac = AC(copy(ac_value));
6172 std::string rs = GPR(copy(rs_value));
6173 std::string rt = GPR(copy(rt_value));
6174
6175 return img::format("DPA.W.PH %s, %s, %s", ac, rs, rt);
6176 }
6177
6178
6179 /*
6180 *
6181 *
6182 * 3 2 1
6183 * 10987654321098765432109876543210
6184 * 001000 x1110000101
6185 * rt -----
6186 * rs -----
6187 * rd -----
6188 */
6189 std::string NMD::DPAQ_SA_L_W(uint64 instruction)
6190 {
6191 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6192 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6193 uint64 ac_value = extract_ac_13_12(instruction);
6194
6195 std::string ac = AC(copy(ac_value));
6196 std::string rs = GPR(copy(rs_value));
6197 std::string rt = GPR(copy(rt_value));
6198
6199 return img::format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt);
6200 }
6201
6202
6203 /*
6204 *
6205 *
6206 * 3 2 1
6207 * 10987654321098765432109876543210
6208 * 001000 x1110000101
6209 * rt -----
6210 * rs -----
6211 * rd -----
6212 */
6213 std::string NMD::DPAQ_S_W_PH(uint64 instruction)
6214 {
6215 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6216 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6217 uint64 ac_value = extract_ac_13_12(instruction);
6218
6219 std::string ac = AC(copy(ac_value));
6220 std::string rs = GPR(copy(rs_value));
6221 std::string rt = GPR(copy(rt_value));
6222
6223 return img::format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt);
6224 }
6225
6226
6227 /*
6228 *
6229 *
6230 * 3 2 1
6231 * 10987654321098765432109876543210
6232 * 001000 x1110000101
6233 * rt -----
6234 * rs -----
6235 * rd -----
6236 */
6237 std::string NMD::DPAQX_SA_W_PH(uint64 instruction)
6238 {
6239 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6240 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6241 uint64 ac_value = extract_ac_13_12(instruction);
6242
6243 std::string ac = AC(copy(ac_value));
6244 std::string rs = GPR(copy(rs_value));
6245 std::string rt = GPR(copy(rt_value));
6246
6247 return img::format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6248 }
6249
6250
6251 /*
6252 *
6253 *
6254 * 3 2 1
6255 * 10987654321098765432109876543210
6256 * 001000 x1110000101
6257 * rt -----
6258 * rs -----
6259 * rd -----
6260 */
6261 std::string NMD::DPAQX_S_W_PH(uint64 instruction)
6262 {
6263 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6264 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6265 uint64 ac_value = extract_ac_13_12(instruction);
6266
6267 std::string ac = AC(copy(ac_value));
6268 std::string rs = GPR(copy(rs_value));
6269 std::string rt = GPR(copy(rt_value));
6270
6271 return img::format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt);
6272 }
6273
6274
6275 /*
6276 *
6277 *
6278 * 3 2 1
6279 * 10987654321098765432109876543210
6280 * 001000 x1110000101
6281 * rt -----
6282 * rs -----
6283 * rd -----
6284 */
6285 std::string NMD::DPAU_H_QBL(uint64 instruction)
6286 {
6287 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6288 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6289 uint64 ac_value = extract_ac_13_12(instruction);
6290
6291 std::string ac = AC(copy(ac_value));
6292 std::string rs = GPR(copy(rs_value));
6293 std::string rt = GPR(copy(rt_value));
6294
6295 return img::format("DPAU.H.QBL %s, %s, %s", ac, rs, rt);
6296 }
6297
6298
6299 /*
6300 *
6301 *
6302 * 3 2 1
6303 * 10987654321098765432109876543210
6304 * 001000 x1110000101
6305 * rt -----
6306 * rs -----
6307 * rd -----
6308 */
6309 std::string NMD::DPAU_H_QBR(uint64 instruction)
6310 {
6311 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6312 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6313 uint64 ac_value = extract_ac_13_12(instruction);
6314
6315 std::string ac = AC(copy(ac_value));
6316 std::string rs = GPR(copy(rs_value));
6317 std::string rt = GPR(copy(rt_value));
6318
6319 return img::format("DPAU.H.QBR %s, %s, %s", ac, rs, rt);
6320 }
6321
6322
6323 /*
6324 *
6325 *
6326 * 3 2 1
6327 * 10987654321098765432109876543210
6328 * 001000 x1110000101
6329 * rt -----
6330 * rs -----
6331 * rd -----
6332 */
6333 std::string NMD::DPAX_W_PH(uint64 instruction)
6334 {
6335 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6336 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6337 uint64 ac_value = extract_ac_13_12(instruction);
6338
6339 std::string ac = AC(copy(ac_value));
6340 std::string rs = GPR(copy(rs_value));
6341 std::string rt = GPR(copy(rt_value));
6342
6343 return img::format("DPAX.W.PH %s, %s, %s", ac, rs, rt);
6344 }
6345
6346
6347 /*
6348 *
6349 *
6350 * 3 2 1
6351 * 10987654321098765432109876543210
6352 * 001000 x1110000101
6353 * rt -----
6354 * rs -----
6355 * rd -----
6356 */
6357 std::string NMD::DPS_W_PH(uint64 instruction)
6358 {
6359 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6360 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6361 uint64 ac_value = extract_ac_13_12(instruction);
6362
6363 std::string ac = AC(copy(ac_value));
6364 std::string rs = GPR(copy(rs_value));
6365 std::string rt = GPR(copy(rt_value));
6366
6367 return img::format("DPS.W.PH %s, %s, %s", ac, rs, rt);
6368 }
6369
6370
6371 /*
6372 *
6373 *
6374 * 3 2 1
6375 * 10987654321098765432109876543210
6376 * 001000 x1110000101
6377 * rt -----
6378 * rs -----
6379 * rd -----
6380 */
6381 std::string NMD::DPSQ_SA_L_W(uint64 instruction)
6382 {
6383 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6384 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6385 uint64 ac_value = extract_ac_13_12(instruction);
6386
6387 std::string ac = AC(copy(ac_value));
6388 std::string rs = GPR(copy(rs_value));
6389 std::string rt = GPR(copy(rt_value));
6390
6391 return img::format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt);
6392 }
6393
6394
6395 /*
6396 *
6397 *
6398 * 3 2 1
6399 * 10987654321098765432109876543210
6400 * 001000 x1110000101
6401 * rt -----
6402 * rs -----
6403 * rd -----
6404 */
6405 std::string NMD::DPSQ_S_W_PH(uint64 instruction)
6406 {
6407 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6408 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6409 uint64 ac_value = extract_ac_13_12(instruction);
6410
6411 std::string ac = AC(copy(ac_value));
6412 std::string rs = GPR(copy(rs_value));
6413 std::string rt = GPR(copy(rt_value));
6414
6415 return img::format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt);
6416 }
6417
6418
6419 /*
6420 *
6421 *
6422 * 3 2 1
6423 * 10987654321098765432109876543210
6424 * 001000 x1110000101
6425 * rt -----
6426 * rs -----
6427 * rd -----
6428 */
6429 std::string NMD::DPSQX_SA_W_PH(uint64 instruction)
6430 {
6431 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6432 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6433 uint64 ac_value = extract_ac_13_12(instruction);
6434
6435 std::string ac = AC(copy(ac_value));
6436 std::string rs = GPR(copy(rs_value));
6437 std::string rt = GPR(copy(rt_value));
6438
6439 return img::format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6440 }
6441
6442
6443 /*
6444 *
6445 *
6446 * 3 2 1
6447 * 10987654321098765432109876543210
6448 * 001000 x1110000101
6449 * rt -----
6450 * rs -----
6451 * rd -----
6452 */
6453 std::string NMD::DPSQX_S_W_PH(uint64 instruction)
6454 {
6455 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6456 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6457 uint64 ac_value = extract_ac_13_12(instruction);
6458
6459 std::string ac = AC(copy(ac_value));
6460 std::string rs = GPR(copy(rs_value));
6461 std::string rt = GPR(copy(rt_value));
6462
6463 return img::format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt);
6464 }
6465
6466
6467 /*
6468 *
6469 *
6470 * 3 2 1
6471 * 10987654321098765432109876543210
6472 * 001000 x1110000101
6473 * rt -----
6474 * rs -----
6475 * rd -----
6476 */
6477 std::string NMD::DPSU_H_QBL(uint64 instruction)
6478 {
6479 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6480 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6481 uint64 ac_value = extract_ac_13_12(instruction);
6482
6483 std::string ac = AC(copy(ac_value));
6484 std::string rs = GPR(copy(rs_value));
6485 std::string rt = GPR(copy(rt_value));
6486
6487 return img::format("DPSU.H.QBL %s, %s, %s", ac, rs, rt);
6488 }
6489
6490
6491 /*
6492 *
6493 *
6494 * 3 2 1
6495 * 10987654321098765432109876543210
6496 * 001000 x1110000101
6497 * rt -----
6498 * rs -----
6499 * rd -----
6500 */
6501 std::string NMD::DPSU_H_QBR(uint64 instruction)
6502 {
6503 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6504 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6505 uint64 ac_value = extract_ac_13_12(instruction);
6506
6507 std::string ac = AC(copy(ac_value));
6508 std::string rs = GPR(copy(rs_value));
6509 std::string rt = GPR(copy(rt_value));
6510
6511 return img::format("DPSU.H.QBR %s, %s, %s", ac, rs, rt);
6512 }
6513
6514
6515 /*
6516 *
6517 *
6518 * 3 2 1
6519 * 10987654321098765432109876543210
6520 * 001000 x1110000101
6521 * rt -----
6522 * rs -----
6523 * rd -----
6524 */
6525 std::string NMD::DPSX_W_PH(uint64 instruction)
6526 {
6527 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6528 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6529 uint64 ac_value = extract_ac_13_12(instruction);
6530
6531 std::string ac = AC(copy(ac_value));
6532 std::string rs = GPR(copy(rs_value));
6533 std::string rt = GPR(copy(rt_value));
6534
6535 return img::format("DPSX.W.PH %s, %s, %s", ac, rs, rt);
6536 }
6537
6538
6539 /*
6540 * DROTR -
6541 *
6542 * 3 2 1
6543 * 10987654321098765432109876543210
6544 * 001000 x1110000101
6545 * rt -----
6546 * rs -----
6547 * rd -----
6548 */
6549 std::string NMD::DROTR(uint64 instruction)
6550 {
6551 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6552 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6553 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6554
6555 std::string rt = GPR(copy(rt_value));
6556 std::string rs = GPR(copy(rs_value));
6557 std::string shift = IMMEDIATE(copy(shift_value));
6558
6559 return img::format("DROTR %s, %s, %s", rt, rs, shift);
6560 }
6561
6562
6563 /*
6564 * DROTR[32] -
6565 *
6566 * 3 2 1
6567 * 10987654321098765432109876543210
6568 * 10o000 1100xxx0110
6569 * rt -----
6570 * rs -----
6571 * shift -----
6572 */
6573 std::string NMD::DROTR32(uint64 instruction)
6574 {
6575 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6576 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6577 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6578
6579 std::string rt = GPR(copy(rt_value));
6580 std::string rs = GPR(copy(rs_value));
6581 std::string shift = IMMEDIATE(copy(shift_value));
6582
6583 return img::format("DROTR32 %s, %s, %s", rt, rs, shift);
6584 }
6585
6586
6587 /*
6588 *
6589 *
6590 * 3 2 1
6591 * 10987654321098765432109876543210
6592 * 001000 x1110000101
6593 * rt -----
6594 * rs -----
6595 * rd -----
6596 */
6597 std::string NMD::DROTRV(uint64 instruction)
6598 {
6599 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6600 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6601 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6602
6603 std::string rd = GPR(copy(rd_value));
6604 std::string rs = GPR(copy(rs_value));
6605 std::string rt = GPR(copy(rt_value));
6606
6607 return img::format("DROTRV %s, %s, %s", rd, rs, rt);
6608 }
6609
6610
6611 /*
6612 *
6613 *
6614 * 3 2 1
6615 * 10987654321098765432109876543210
6616 * 001000 x1110000101
6617 * rt -----
6618 * rs -----
6619 * rd -----
6620 */
6621 std::string NMD::DROTX(uint64 instruction)
6622 {
6623 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6624 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6625 uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction);
6626 uint64 shift_value = extract_shift_5_4_3_2_1_0(instruction);
6627
6628 std::string rt = GPR(copy(rt_value));
6629 std::string rs = GPR(copy(rs_value));
6630 std::string shift = IMMEDIATE(copy(shift_value));
6631 std::string shiftx = IMMEDIATE(copy(shiftx_value));
6632
6633 return img::format("DROTX %s, %s, %s, %s", rt, rs, shift, shiftx);
6634 }
6635
6636
6637 /*
6638 * DSLL -
6639 *
6640 * 3 2 1
6641 * 10987654321098765432109876543210
6642 * 10o000 1100xxx0000
6643 * rt -----
6644 * rs -----
6645 * shift -----
6646 */
6647 std::string NMD::DSLL(uint64 instruction)
6648 {
6649 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6650 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6651 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6652
6653 std::string rt = GPR(copy(rt_value));
6654 std::string rs = GPR(copy(rs_value));
6655 std::string shift = IMMEDIATE(copy(shift_value));
6656
6657 return img::format("DSLL %s, %s, %s", rt, rs, shift);
6658 }
6659
6660
6661 /*
6662 * DSLL[32] -
6663 *
6664 * 3 2 1
6665 * 10987654321098765432109876543210
6666 * 10o000 1100xxx0000
6667 * rt -----
6668 * rs -----
6669 * shift -----
6670 */
6671 std::string NMD::DSLL32(uint64 instruction)
6672 {
6673 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6674 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6675 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6676
6677 std::string rt = GPR(copy(rt_value));
6678 std::string rs = GPR(copy(rs_value));
6679 std::string shift = IMMEDIATE(copy(shift_value));
6680
6681 return img::format("DSLL32 %s, %s, %s", rt, rs, shift);
6682 }
6683
6684
6685 /*
6686 *
6687 *
6688 * 3 2 1
6689 * 10987654321098765432109876543210
6690 * 001000 x1110000101
6691 * rt -----
6692 * rs -----
6693 * rd -----
6694 */
6695 std::string NMD::DSLLV(uint64 instruction)
6696 {
6697 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6698 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6699 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6700
6701 std::string rd = GPR(copy(rd_value));
6702 std::string rs = GPR(copy(rs_value));
6703 std::string rt = GPR(copy(rt_value));
6704
6705 return img::format("DSLLV %s, %s, %s", rd, rs, rt);
6706 }
6707
6708
6709 /*
6710 * DSRA -
6711 *
6712 * 3 2 1
6713 * 10987654321098765432109876543210
6714 * 10o000 1100xxx0100
6715 * rt -----
6716 * rs -----
6717 * shift -----
6718 */
6719 std::string NMD::DSRA(uint64 instruction)
6720 {
6721 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6722 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6723 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6724
6725 std::string rt = GPR(copy(rt_value));
6726 std::string rs = GPR(copy(rs_value));
6727 std::string shift = IMMEDIATE(copy(shift_value));
6728
6729 return img::format("DSRA %s, %s, %s", rt, rs, shift);
6730 }
6731
6732
6733 /*
6734 * DSRA[32] -
6735 *
6736 * 3 2 1
6737 * 10987654321098765432109876543210
6738 * 10o000 1100xxx0100
6739 * rt -----
6740 * rs -----
6741 * shift -----
6742 */
6743 std::string NMD::DSRA32(uint64 instruction)
6744 {
6745 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6746 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6747 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6748
6749 std::string rt = GPR(copy(rt_value));
6750 std::string rs = GPR(copy(rs_value));
6751 std::string shift = IMMEDIATE(copy(shift_value));
6752
6753 return img::format("DSRA32 %s, %s, %s", rt, rs, shift);
6754 }
6755
6756
6757 /*
6758 *
6759 *
6760 * 3 2 1
6761 * 10987654321098765432109876543210
6762 * 001000 x1110000101
6763 * rt -----
6764 * rs -----
6765 * rd -----
6766 */
6767 std::string NMD::DSRAV(uint64 instruction)
6768 {
6769 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6770 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6771 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6772
6773 std::string rd = GPR(copy(rd_value));
6774 std::string rs = GPR(copy(rs_value));
6775 std::string rt = GPR(copy(rt_value));
6776
6777 return img::format("DSRAV %s, %s, %s", rd, rs, rt);
6778 }
6779
6780
6781 /*
6782 * DSRL -
6783 *
6784 * 3 2 1
6785 * 10987654321098765432109876543210
6786 * 10o000 1100xxx0100
6787 * rt -----
6788 * rs -----
6789 * shift -----
6790 */
6791 std::string NMD::DSRL(uint64 instruction)
6792 {
6793 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6794 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6795 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6796
6797 std::string rt = GPR(copy(rt_value));
6798 std::string rs = GPR(copy(rs_value));
6799 std::string shift = IMMEDIATE(copy(shift_value));
6800
6801 return img::format("DSRL %s, %s, %s", rt, rs, shift);
6802 }
6803
6804
6805 /*
6806 * DSRL[32] -
6807 *
6808 * 3 2 1
6809 * 10987654321098765432109876543210
6810 * 10o000 1100xxx0010
6811 * rt -----
6812 * rs -----
6813 * shift -----
6814 */
6815 std::string NMD::DSRL32(uint64 instruction)
6816 {
6817 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6818 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6819 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6820
6821 std::string rt = GPR(copy(rt_value));
6822 std::string rs = GPR(copy(rs_value));
6823 std::string shift = IMMEDIATE(copy(shift_value));
6824
6825 return img::format("DSRL32 %s, %s, %s", rt, rs, shift);
6826 }
6827
6828
6829 /*
6830 *
6831 *
6832 * 3 2 1
6833 * 10987654321098765432109876543210
6834 * 001000 x1110000101
6835 * rt -----
6836 * rs -----
6837 * rd -----
6838 */
6839 std::string NMD::DSRLV(uint64 instruction)
6840 {
6841 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6842 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6843 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6844
6845 std::string rd = GPR(copy(rd_value));
6846 std::string rs = GPR(copy(rs_value));
6847 std::string rt = GPR(copy(rt_value));
6848
6849 return img::format("DSRLV %s, %s, %s", rd, rs, rt);
6850 }
6851
6852
6853 /*
6854 *
6855 *
6856 * 3 2 1
6857 * 10987654321098765432109876543210
6858 * 001000 x1110000101
6859 * rt -----
6860 * rs -----
6861 * rd -----
6862 */
6863 std::string NMD::DSUB(uint64 instruction)
6864 {
6865 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6866 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6867 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6868
6869 std::string rd = GPR(copy(rd_value));
6870 std::string rs = GPR(copy(rs_value));
6871 std::string rt = GPR(copy(rt_value));
6872
6873 return img::format("DSUB %s, %s, %s", rd, rs, rt);
6874 }
6875
6876
6877 /*
6878 *
6879 *
6880 * 3 2 1
6881 * 10987654321098765432109876543210
6882 * 001000 x1110000101
6883 * rt -----
6884 * rs -----
6885 * rd -----
6886 */
6887 std::string NMD::DSUBU(uint64 instruction)
6888 {
6889 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6890 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6891 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6892
6893 std::string rd = GPR(copy(rd_value));
6894 std::string rs = GPR(copy(rs_value));
6895 std::string rt = GPR(copy(rt_value));
6896
6897 return img::format("DSUBU %s, %s, %s", rd, rs, rt);
6898 }
6899
6900
6901 /*
6902 *
6903 *
6904 * 3 2 1
6905 * 10987654321098765432109876543210
6906 * 001000 x1110000101
6907 * rt -----
6908 * rs -----
6909 * rd -----
6910 */
6911 std::string NMD::DVPE(uint64 instruction)
6912 {
6913 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6914
6915 std::string rt = GPR(copy(rt_value));
6916
6917 return img::format("DVPE %s", rt);
6918 }
6919
6920
6921 /*
6922 *
6923 *
6924 * 3 2 1
6925 * 10987654321098765432109876543210
6926 * 001000 x1110000101
6927 * rt -----
6928 * rs -----
6929 * rd -----
6930 */
6931 std::string NMD::DVP(uint64 instruction)
6932 {
6933 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6934
6935 std::string rt = GPR(copy(rt_value));
6936
6937 return img::format("DVP %s", rt);
6938 }
6939
6940
6941 /*
6942 *
6943 *
6944 * 3 2 1
6945 * 10987654321098765432109876543210
6946 * 001000 x1110000101
6947 * rt -----
6948 * rs -----
6949 * rd -----
6950 */
6951 std::string NMD::EHB(uint64 instruction)
6952 {
6953 (void)instruction;
6954
6955 return "EHB ";
6956 }
6957
6958
6959 /*
6960 *
6961 *
6962 * 3 2 1
6963 * 10987654321098765432109876543210
6964 * 001000 x1110000101
6965 * rt -----
6966 * rs -----
6967 * rd -----
6968 */
6969 std::string NMD::EI(uint64 instruction)
6970 {
6971 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6972
6973 std::string rt = GPR(copy(rt_value));
6974
6975 return img::format("EI %s", rt);
6976 }
6977
6978
6979 /*
6980 *
6981 *
6982 * 3 2 1
6983 * 10987654321098765432109876543210
6984 * 001000 x1110000101
6985 * rt -----
6986 * rs -----
6987 * rd -----
6988 */
6989 std::string NMD::EMT(uint64 instruction)
6990 {
6991 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6992
6993 std::string rt = GPR(copy(rt_value));
6994
6995 return img::format("EMT %s", rt);
6996 }
6997
6998
6999 /*
7000 *
7001 *
7002 * 3 2 1
7003 * 10987654321098765432109876543210
7004 * 001000 x1110000101
7005 * rt -----
7006 * rs -----
7007 * rd -----
7008 */
7009 std::string NMD::ERET(uint64 instruction)
7010 {
7011 (void)instruction;
7012
7013 return "ERET ";
7014 }
7015
7016
7017 /*
7018 *
7019 *
7020 * 3 2 1
7021 * 10987654321098765432109876543210
7022 * 001000 x1110000101
7023 * rt -----
7024 * rs -----
7025 * rd -----
7026 */
7027 std::string NMD::ERETNC(uint64 instruction)
7028 {
7029 (void)instruction;
7030
7031 return "ERETNC ";
7032 }
7033
7034
7035 /*
7036 *
7037 *
7038 * 3 2 1
7039 * 10987654321098765432109876543210
7040 * 001000 x1110000101
7041 * rt -----
7042 * rs -----
7043 * rd -----
7044 */
7045 std::string NMD::EVP(uint64 instruction)
7046 {
7047 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7048
7049 std::string rt = GPR(copy(rt_value));
7050
7051 return img::format("EVP %s", rt);
7052 }
7053
7054
7055 /*
7056 *
7057 *
7058 * 3 2 1
7059 * 10987654321098765432109876543210
7060 * 001000 x1110000101
7061 * rt -----
7062 * rs -----
7063 * rd -----
7064 */
7065 std::string NMD::EVPE(uint64 instruction)
7066 {
7067 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7068
7069 std::string rt = GPR(copy(rt_value));
7070
7071 return img::format("EVPE %s", rt);
7072 }
7073
7074
7075 /*
7076 *
7077 *
7078 * 3 2 1
7079 * 10987654321098765432109876543210
7080 * 001000 x1110000101
7081 * rt -----
7082 * rs -----
7083 * rd -----
7084 */
7085 std::string NMD::EXT(uint64 instruction)
7086 {
7087 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7088 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7089 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7090 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7091
7092 std::string rt = GPR(copy(rt_value));
7093 std::string rs = GPR(copy(rs_value));
7094 std::string lsb = IMMEDIATE(copy(lsb_value));
7095 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
7096
7097 return img::format("EXT %s, %s, %s, %s", rt, rs, lsb, msbd);
7098 }
7099
7100
7101 /*
7102 *
7103 *
7104 * 3 2 1
7105 * 10987654321098765432109876543210
7106 * 001000 x1110000101
7107 * rt -----
7108 * rs -----
7109 * rd -----
7110 */
7111 std::string NMD::EXTD(uint64 instruction)
7112 {
7113 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7114 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7115 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7116 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7117
7118 std::string rd = GPR(copy(rd_value));
7119 std::string rs = GPR(copy(rs_value));
7120 std::string rt = GPR(copy(rt_value));
7121 std::string shift = IMMEDIATE(copy(shift_value));
7122
7123 return img::format("EXTD %s, %s, %s, %s", rd, rs, rt, shift);
7124 }
7125
7126
7127 /*
7128 *
7129 *
7130 * 3 2 1
7131 * 10987654321098765432109876543210
7132 * 001000 x1110000101
7133 * rt -----
7134 * rs -----
7135 * rd -----
7136 */
7137 std::string NMD::EXTD32(uint64 instruction)
7138 {
7139 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7140 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7141 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7142 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7143
7144 std::string rd = GPR(copy(rd_value));
7145 std::string rs = GPR(copy(rs_value));
7146 std::string rt = GPR(copy(rt_value));
7147 std::string shift = IMMEDIATE(copy(shift_value));
7148
7149 return img::format("EXTD32 %s, %s, %s, %s", rd, rs, rt, shift);
7150 }
7151
7152
7153 /*
7154 *
7155 *
7156 * 3 2 1
7157 * 10987654321098765432109876543210
7158 * 001000 x1110000101
7159 * rt -----
7160 * rs -----
7161 * rd -----
7162 */
7163 std::string NMD::EXTPDP(uint64 instruction)
7164 {
7165 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7166 uint64 ac_value = extract_ac_13_12(instruction);
7167 uint64 size_value = extract_size_20_19_18_17_16(instruction);
7168
7169 std::string rt = GPR(copy(rt_value));
7170 std::string ac = AC(copy(ac_value));
7171 std::string size = IMMEDIATE(copy(size_value));
7172
7173 return img::format("EXTPDP %s, %s, %s", rt, ac, size);
7174 }
7175
7176
7177 /*
7178 *
7179 *
7180 * 3 2 1
7181 * 10987654321098765432109876543210
7182 * 001000 x1110000101
7183 * rt -----
7184 * rs -----
7185 * rd -----
7186 */
7187 std::string NMD::EXTPDPV(uint64 instruction)
7188 {
7189 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7190 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7191 uint64 ac_value = extract_ac_13_12(instruction);
7192
7193 std::string rt = GPR(copy(rt_value));
7194 std::string ac = AC(copy(ac_value));
7195 std::string rs = GPR(copy(rs_value));
7196
7197 return img::format("EXTPDPV %s, %s, %s", rt, ac, rs);
7198 }
7199
7200
7201 /*
7202 *
7203 *
7204 * 3 2 1
7205 * 10987654321098765432109876543210
7206 * 001000 x1110000101
7207 * rt -----
7208 * rs -----
7209 * rd -----
7210 */
7211 std::string NMD::EXTP(uint64 instruction)
7212 {
7213 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7214 uint64 ac_value = extract_ac_13_12(instruction);
7215 uint64 size_value = extract_size_20_19_18_17_16(instruction);
7216
7217 std::string rt = GPR(copy(rt_value));
7218 std::string ac = AC(copy(ac_value));
7219 std::string size = IMMEDIATE(copy(size_value));
7220
7221 return img::format("EXTP %s, %s, %s", rt, ac, size);
7222 }
7223
7224
7225 /*
7226 *
7227 *
7228 * 3 2 1
7229 * 10987654321098765432109876543210
7230 * 001000 x1110000101
7231 * rt -----
7232 * rs -----
7233 * rd -----
7234 */
7235 std::string NMD::EXTPV(uint64 instruction)
7236 {
7237 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7238 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7239 uint64 ac_value = extract_ac_13_12(instruction);
7240
7241 std::string rt = GPR(copy(rt_value));
7242 std::string ac = AC(copy(ac_value));
7243 std::string rs = GPR(copy(rs_value));
7244
7245 return img::format("EXTPV %s, %s, %s", rt, ac, rs);
7246 }
7247
7248
7249 /*
7250 *
7251 *
7252 * 3 2 1
7253 * 10987654321098765432109876543210
7254 * 001000 x1110000101
7255 * rt -----
7256 * rs -----
7257 * rd -----
7258 */
7259 std::string NMD::EXTR_RS_W(uint64 instruction)
7260 {
7261 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7262 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7263 uint64 ac_value = extract_ac_13_12(instruction);
7264
7265 std::string rt = GPR(copy(rt_value));
7266 std::string ac = AC(copy(ac_value));
7267 std::string shift = IMMEDIATE(copy(shift_value));
7268
7269 return img::format("EXTR_RS.W %s, %s, %s", rt, ac, shift);
7270 }
7271
7272
7273 /*
7274 *
7275 *
7276 * 3 2 1
7277 * 10987654321098765432109876543210
7278 * 001000 x1110000101
7279 * rt -----
7280 * rs -----
7281 * rd -----
7282 */
7283 std::string NMD::EXTR_R_W(uint64 instruction)
7284 {
7285 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7286 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7287 uint64 ac_value = extract_ac_13_12(instruction);
7288
7289 std::string rt = GPR(copy(rt_value));
7290 std::string ac = AC(copy(ac_value));
7291 std::string shift = IMMEDIATE(copy(shift_value));
7292
7293 return img::format("EXTR_R.W %s, %s, %s", rt, ac, shift);
7294 }
7295
7296
7297 /*
7298 *
7299 *
7300 * 3 2 1
7301 * 10987654321098765432109876543210
7302 * 001000 x1110000101
7303 * rt -----
7304 * rs -----
7305 * rd -----
7306 */
7307 std::string NMD::EXTR_S_H(uint64 instruction)
7308 {
7309 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7310 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7311 uint64 ac_value = extract_ac_13_12(instruction);
7312
7313 std::string rt = GPR(copy(rt_value));
7314 std::string ac = AC(copy(ac_value));
7315 std::string shift = IMMEDIATE(copy(shift_value));
7316
7317 return img::format("EXTR_S.H %s, %s, %s", rt, ac, shift);
7318 }
7319
7320
7321 /*
7322 *
7323 *
7324 * 3 2 1
7325 * 10987654321098765432109876543210
7326 * 001000 x1110000101
7327 * rt -----
7328 * rs -----
7329 * rd -----
7330 */
7331 std::string NMD::EXTR_W(uint64 instruction)
7332 {
7333 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7334 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7335 uint64 ac_value = extract_ac_13_12(instruction);
7336
7337 std::string rt = GPR(copy(rt_value));
7338 std::string ac = AC(copy(ac_value));
7339 std::string shift = IMMEDIATE(copy(shift_value));
7340
7341 return img::format("EXTR.W %s, %s, %s", rt, ac, shift);
7342 }
7343
7344
7345 /*
7346 *
7347 *
7348 * 3 2 1
7349 * 10987654321098765432109876543210
7350 * 001000 x1110000101
7351 * rt -----
7352 * rs -----
7353 * rd -----
7354 */
7355 std::string NMD::EXTRV_RS_W(uint64 instruction)
7356 {
7357 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7358 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7359 uint64 ac_value = extract_ac_13_12(instruction);
7360
7361 std::string rt = GPR(copy(rt_value));
7362 std::string ac = AC(copy(ac_value));
7363 std::string rs = GPR(copy(rs_value));
7364
7365 return img::format("EXTRV_RS.W %s, %s, %s", rt, ac, rs);
7366 }
7367
7368
7369 /*
7370 *
7371 *
7372 * 3 2 1
7373 * 10987654321098765432109876543210
7374 * 001000 x1110000101
7375 * rt -----
7376 * rs -----
7377 * rd -----
7378 */
7379 std::string NMD::EXTRV_R_W(uint64 instruction)
7380 {
7381 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7382 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7383 uint64 ac_value = extract_ac_13_12(instruction);
7384
7385 std::string rt = GPR(copy(rt_value));
7386 std::string ac = AC(copy(ac_value));
7387 std::string rs = GPR(copy(rs_value));
7388
7389 return img::format("EXTRV_R.W %s, %s, %s", rt, ac, rs);
7390 }
7391
7392
7393 /*
7394 *
7395 *
7396 * 3 2 1
7397 * 10987654321098765432109876543210
7398 * 001000 x1110000101
7399 * rt -----
7400 * rs -----
7401 * rd -----
7402 */
7403 std::string NMD::EXTRV_S_H(uint64 instruction)
7404 {
7405 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7406 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7407 uint64 ac_value = extract_ac_13_12(instruction);
7408
7409 std::string rt = GPR(copy(rt_value));
7410 std::string ac = AC(copy(ac_value));
7411 std::string rs = GPR(copy(rs_value));
7412
7413 return img::format("EXTRV_S.H %s, %s, %s", rt, ac, rs);
7414 }
7415
7416
7417 /*
7418 *
7419 *
7420 * 3 2 1
7421 * 10987654321098765432109876543210
7422 * 001000 x1110000101
7423 * rt -----
7424 * rs -----
7425 * rd -----
7426 */
7427 std::string NMD::EXTRV_W(uint64 instruction)
7428 {
7429 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7430 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7431 uint64 ac_value = extract_ac_13_12(instruction);
7432
7433 std::string rt = GPR(copy(rt_value));
7434 std::string ac = AC(copy(ac_value));
7435 std::string rs = GPR(copy(rs_value));
7436
7437 return img::format("EXTRV.W %s, %s, %s", rt, ac, rs);
7438 }
7439
7440
7441 /*
7442 * EXTW - Extract Word
7443 *
7444 * 3 2 1
7445 * 10987654321098765432109876543210
7446 * 001000 011111
7447 * rt -----
7448 * rs -----
7449 * rd -----
7450 * shift -----
7451 */
7452 std::string NMD::EXTW(uint64 instruction)
7453 {
7454 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7455 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7456 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7457 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7458
7459 std::string rd = GPR(copy(rd_value));
7460 std::string rs = GPR(copy(rs_value));
7461 std::string rt = GPR(copy(rt_value));
7462 std::string shift = IMMEDIATE(copy(shift_value));
7463
7464 return img::format("EXTW %s, %s, %s, %s", rd, rs, rt, shift);
7465 }
7466
7467
7468 /*
7469 *
7470 *
7471 * 3 2 1
7472 * 10987654321098765432109876543210
7473 * 001000 x1110000101
7474 * rt -----
7475 * rs -----
7476 * rd -----
7477 */
7478 std::string NMD::FLOOR_L_D(uint64 instruction)
7479 {
7480 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7481 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7482
7483 std::string ft = FPR(copy(ft_value));
7484 std::string fs = FPR(copy(fs_value));
7485
7486 return img::format("FLOOR.L.D %s, %s", ft, fs);
7487 }
7488
7489
7490 /*
7491 *
7492 *
7493 * 3 2 1
7494 * 10987654321098765432109876543210
7495 * 001000 x1110000101
7496 * rt -----
7497 * rs -----
7498 * rd -----
7499 */
7500 std::string NMD::FLOOR_L_S(uint64 instruction)
7501 {
7502 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7503 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7504
7505 std::string ft = FPR(copy(ft_value));
7506 std::string fs = FPR(copy(fs_value));
7507
7508 return img::format("FLOOR.L.S %s, %s", ft, fs);
7509 }
7510
7511
7512 /*
7513 *
7514 *
7515 * 3 2 1
7516 * 10987654321098765432109876543210
7517 * 001000 x1110000101
7518 * rt -----
7519 * rs -----
7520 * rd -----
7521 */
7522 std::string NMD::FLOOR_W_D(uint64 instruction)
7523 {
7524 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7525 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7526
7527 std::string ft = FPR(copy(ft_value));
7528 std::string fs = FPR(copy(fs_value));
7529
7530 return img::format("FLOOR.W.D %s, %s", ft, fs);
7531 }
7532
7533
7534 /*
7535 *
7536 *
7537 * 3 2 1
7538 * 10987654321098765432109876543210
7539 * 001000 x1110000101
7540 * rt -----
7541 * rs -----
7542 * rd -----
7543 */
7544 std::string NMD::FLOOR_W_S(uint64 instruction)
7545 {
7546 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7547 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7548
7549 std::string ft = FPR(copy(ft_value));
7550 std::string fs = FPR(copy(fs_value));
7551
7552 return img::format("FLOOR.W.S %s, %s", ft, fs);
7553 }
7554
7555
7556 /*
7557 *
7558 *
7559 * 3 2 1
7560 * 10987654321098765432109876543210
7561 * 001000 x1110000101
7562 * rt -----
7563 * rs -----
7564 * rd -----
7565 */
7566 std::string NMD::FORK(uint64 instruction)
7567 {
7568 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7569 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7570 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7571
7572 std::string rd = GPR(copy(rd_value));
7573 std::string rs = GPR(copy(rs_value));
7574 std::string rt = GPR(copy(rt_value));
7575
7576 return img::format("FORK %s, %s, %s", rd, rs, rt);
7577 }
7578
7579
7580 /*
7581 *
7582 *
7583 * 3 2 1
7584 * 10987654321098765432109876543210
7585 * 001000 x1110000101
7586 * rt -----
7587 * rs -----
7588 * rd -----
7589 */
7590 std::string NMD::HYPCALL(uint64 instruction)
7591 {
7592 uint64 code_value = extract_code_17_to_0(instruction);
7593
7594 std::string code = IMMEDIATE(copy(code_value));
7595
7596 return img::format("HYPCALL %s", code);
7597 }
7598
7599
7600 /*
7601 *
7602 *
7603 * 3 2 1
7604 * 10987654321098765432109876543210
7605 * 001000 x1110000101
7606 * rt -----
7607 * rs -----
7608 * rd -----
7609 */
7610 std::string NMD::HYPCALL_16_(uint64 instruction)
7611 {
7612 uint64 code_value = extract_code_1_0(instruction);
7613
7614 std::string code = IMMEDIATE(copy(code_value));
7615
7616 return img::format("HYPCALL %s", code);
7617 }
7618
7619
7620 /*
7621 *
7622 *
7623 * 3 2 1
7624 * 10987654321098765432109876543210
7625 * 001000 x1110000101
7626 * rt -----
7627 * rs -----
7628 * rd -----
7629 */
7630 std::string NMD::INS(uint64 instruction)
7631 {
7632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7633 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7634 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7635 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7636
7637 std::string rt = GPR(copy(rt_value));
7638 std::string rs = GPR(copy(rs_value));
7639 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
7640 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
7641 /* !!!!!!!!!! - no conversion function */
7642
7643 return img::format("INS %s, %s, %s, %s", rt, rs, pos, size);
7644 /* hand edited */
7645 }
7646
7647
7648 /*
7649 *
7650 *
7651 * 3 2 1
7652 * 10987654321098765432109876543210
7653 * 001000 x1110000101
7654 * rt -----
7655 * rs -----
7656 * rd -----
7657 */
7658 std::string NMD::INSV(uint64 instruction)
7659 {
7660 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7661 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7662
7663 std::string rt = GPR(copy(rt_value));
7664 std::string rs = GPR(copy(rs_value));
7665
7666 return img::format("INSV %s, %s", rt, rs);
7667 }
7668
7669
7670 /*
7671 *
7672 *
7673 * 3 2 1
7674 * 10987654321098765432109876543210
7675 * 001000 x1110000101
7676 * rt -----
7677 * rs -----
7678 * rd -----
7679 */
7680 std::string NMD::IRET(uint64 instruction)
7681 {
7682 (void)instruction;
7683
7684 return "IRET ";
7685 }
7686
7687
7688 /*
7689 *
7690 *
7691 * 3 2 1
7692 * 10987654321098765432109876543210
7693 * 001000 x1110000101
7694 * rt -----
7695 * rs -----
7696 * rd -----
7697 */
7698 std::string NMD::JALRC_16_(uint64 instruction)
7699 {
7700 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7701
7702 std::string rt = GPR(copy(rt_value));
7703
7704 return img::format("JALRC $%d, %s", 31, rt);
7705 }
7706
7707
7708 /*
7709 *
7710 *
7711 * 3 2 1
7712 * 10987654321098765432109876543210
7713 * 001000 x1110000101
7714 * rt -----
7715 * rs -----
7716 * rd -----
7717 */
7718 std::string NMD::JALRC_32_(uint64 instruction)
7719 {
7720 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7721 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7722
7723 std::string rt = GPR(copy(rt_value));
7724 std::string rs = GPR(copy(rs_value));
7725
7726 return img::format("JALRC %s, %s", rt, rs);
7727 }
7728
7729
7730 /*
7731 *
7732 *
7733 * 3 2 1
7734 * 10987654321098765432109876543210
7735 * 001000 x1110000101
7736 * rt -----
7737 * rs -----
7738 * rd -----
7739 */
7740 std::string NMD::JALRC_HB(uint64 instruction)
7741 {
7742 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7743 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7744
7745 std::string rt = GPR(copy(rt_value));
7746 std::string rs = GPR(copy(rs_value));
7747
7748 return img::format("JALRC.HB %s, %s", rt, rs);
7749 }
7750
7751
7752 /*
7753 *
7754 *
7755 * 3 2 1
7756 * 10987654321098765432109876543210
7757 * 001000 x1110000101
7758 * rt -----
7759 * rs -----
7760 * rd -----
7761 */
7762 std::string NMD::JRC(uint64 instruction)
7763 {
7764 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7765
7766 std::string rt = GPR(copy(rt_value));
7767
7768 return img::format("JRC %s", rt);
7769 }
7770
7771
7772 /*
7773 *
7774 *
7775 * 3 2 1
7776 * 10987654321098765432109876543210
7777 * 001000 x1110000101
7778 * rt -----
7779 * rs -----
7780 * rd -----
7781 */
7782 std::string NMD::LB_16_(uint64 instruction)
7783 {
7784 uint64 u_value = extract_u_1_0(instruction);
7785 uint64 rt3_value = extract_rt3_9_8_7(instruction);
7786 uint64 rs3_value = extract_rs3_6_5_4(instruction);
7787
7788 std::string rt3 = GPR(encode_gpr3(rt3_value));
7789 std::string u = IMMEDIATE(copy(u_value));
7790 std::string rs3 = GPR(encode_gpr3(rs3_value));
7791
7792 return img::format("LB %s, %s(%s)", rt3, u, rs3);
7793 }
7794
7795
7796 /*
7797 *
7798 *
7799 * 3 2 1
7800 * 10987654321098765432109876543210
7801 * 001000 x1110000101
7802 * rt -----
7803 * rs -----
7804 * rd -----
7805 */
7806 std::string NMD::LB_GP_(uint64 instruction)
7807 {
7808 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7809 uint64 u_value = extract_u_17_to_0(instruction);
7810
7811 std::string rt = GPR(copy(rt_value));
7812 std::string u = IMMEDIATE(copy(u_value));
7813
7814 return img::format("LB %s, %s($%d)", rt, u, 28);
7815 }
7816
7817
7818 /*
7819 *
7820 *
7821 * 3 2 1
7822 * 10987654321098765432109876543210
7823 * 001000 x1110000101
7824 * rt -----
7825 * rs -----
7826 * rd -----
7827 */
7828 std::string NMD::LB_S9_(uint64 instruction)
7829 {
7830 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7831 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7832 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7833
7834 std::string rt = GPR(copy(rt_value));
7835 std::string s = IMMEDIATE(copy(s_value));
7836 std::string rs = GPR(copy(rs_value));
7837
7838 return img::format("LB %s, %s(%s)", rt, s, rs);
7839 }
7840
7841
7842 /*
7843 *
7844 *
7845 * 3 2 1
7846 * 10987654321098765432109876543210
7847 * 001000 x1110000101
7848 * rt -----
7849 * rs -----
7850 * rd -----
7851 */
7852 std::string NMD::LB_U12_(uint64 instruction)
7853 {
7854 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7855 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7856 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7857
7858 std::string rt = GPR(copy(rt_value));
7859 std::string u = IMMEDIATE(copy(u_value));
7860 std::string rs = GPR(copy(rs_value));
7861
7862 return img::format("LB %s, %s(%s)", rt, u, rs);
7863 }
7864
7865
7866 /*
7867 *
7868 *
7869 * 3 2 1
7870 * 10987654321098765432109876543210
7871 * 001000 x1110000101
7872 * rt -----
7873 * rs -----
7874 * rd -----
7875 */
7876 std::string NMD::LBE(uint64 instruction)
7877 {
7878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7879 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7880 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7881
7882 std::string rt = GPR(copy(rt_value));
7883 std::string s = IMMEDIATE(copy(s_value));
7884 std::string rs = GPR(copy(rs_value));
7885
7886 return img::format("LBE %s, %s(%s)", rt, s, rs);
7887 }
7888
7889
7890 /*
7891 *
7892 *
7893 * 3 2 1
7894 * 10987654321098765432109876543210
7895 * 001000 x1110000101
7896 * rt -----
7897 * rs -----
7898 * rd -----
7899 */
7900 std::string NMD::LBU_16_(uint64 instruction)
7901 {
7902 uint64 u_value = extract_u_1_0(instruction);
7903 uint64 rt3_value = extract_rt3_9_8_7(instruction);
7904 uint64 rs3_value = extract_rs3_6_5_4(instruction);
7905
7906 std::string rt3 = GPR(encode_gpr3(rt3_value));
7907 std::string u = IMMEDIATE(copy(u_value));
7908 std::string rs3 = GPR(encode_gpr3(rs3_value));
7909
7910 return img::format("LBU %s, %s(%s)", rt3, u, rs3);
7911 }
7912
7913
7914 /*
7915 *
7916 *
7917 * 3 2 1
7918 * 10987654321098765432109876543210
7919 * 001000 x1110000101
7920 * rt -----
7921 * rs -----
7922 * rd -----
7923 */
7924 std::string NMD::LBU_GP_(uint64 instruction)
7925 {
7926 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7927 uint64 u_value = extract_u_17_to_0(instruction);
7928
7929 std::string rt = GPR(copy(rt_value));
7930 std::string u = IMMEDIATE(copy(u_value));
7931
7932 return img::format("LBU %s, %s($%d)", rt, u, 28);
7933 }
7934
7935
7936 /*
7937 *
7938 *
7939 * 3 2 1
7940 * 10987654321098765432109876543210
7941 * 001000 x1110000101
7942 * rt -----
7943 * rs -----
7944 * rd -----
7945 */
7946 std::string NMD::LBU_S9_(uint64 instruction)
7947 {
7948 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7949 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7950 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7951
7952 std::string rt = GPR(copy(rt_value));
7953 std::string s = IMMEDIATE(copy(s_value));
7954 std::string rs = GPR(copy(rs_value));
7955
7956 return img::format("LBU %s, %s(%s)", rt, s, rs);
7957 }
7958
7959
7960 /*
7961 *
7962 *
7963 * 3 2 1
7964 * 10987654321098765432109876543210
7965 * 001000 x1110000101
7966 * rt -----
7967 * rs -----
7968 * rd -----
7969 */
7970 std::string NMD::LBU_U12_(uint64 instruction)
7971 {
7972 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7973 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7974 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7975
7976 std::string rt = GPR(copy(rt_value));
7977 std::string u = IMMEDIATE(copy(u_value));
7978 std::string rs = GPR(copy(rs_value));
7979
7980 return img::format("LBU %s, %s(%s)", rt, u, rs);
7981 }
7982
7983
7984 /*
7985 *
7986 *
7987 * 3 2 1
7988 * 10987654321098765432109876543210
7989 * 001000 x1110000101
7990 * rt -----
7991 * rs -----
7992 * rd -----
7993 */
7994 std::string NMD::LBUE(uint64 instruction)
7995 {
7996 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7997 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7998 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7999
8000 std::string rt = GPR(copy(rt_value));
8001 std::string s = IMMEDIATE(copy(s_value));
8002 std::string rs = GPR(copy(rs_value));
8003
8004 return img::format("LBUE %s, %s(%s)", rt, s, rs);
8005 }
8006
8007
8008 /*
8009 *
8010 *
8011 * 3 2 1
8012 * 10987654321098765432109876543210
8013 * 001000 x1110000101
8014 * rt -----
8015 * rs -----
8016 * rd -----
8017 */
8018 std::string NMD::LBUX(uint64 instruction)
8019 {
8020 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8021 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8022 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8023
8024 std::string rd = GPR(copy(rd_value));
8025 std::string rs = GPR(copy(rs_value));
8026 std::string rt = GPR(copy(rt_value));
8027
8028 return img::format("LBUX %s, %s(%s)", rd, rs, rt);
8029 }
8030
8031
8032 /*
8033 *
8034 *
8035 * 3 2 1
8036 * 10987654321098765432109876543210
8037 * 001000 x1110000101
8038 * rt -----
8039 * rs -----
8040 * rd -----
8041 */
8042 std::string NMD::LBX(uint64 instruction)
8043 {
8044 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8045 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8046 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8047
8048 std::string rd = GPR(copy(rd_value));
8049 std::string rs = GPR(copy(rs_value));
8050 std::string rt = GPR(copy(rt_value));
8051
8052 return img::format("LBX %s, %s(%s)", rd, rs, rt);
8053 }
8054
8055
8056 /*
8057 *
8058 *
8059 * 3 2 1
8060 * 10987654321098765432109876543210
8061 * 001000 x1110000101
8062 * rt -----
8063 * rs -----
8064 * rd -----
8065 */
8066 std::string NMD::LD_GP_(uint64 instruction)
8067 {
8068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8069 uint64 u_value = extract_u_20_to_3__s3(instruction);
8070
8071 std::string rt = GPR(copy(rt_value));
8072 std::string u = IMMEDIATE(copy(u_value));
8073
8074 return img::format("LD %s, %s($%d)", rt, u, 28);
8075 }
8076
8077
8078 /*
8079 *
8080 *
8081 * 3 2 1
8082 * 10987654321098765432109876543210
8083 * 001000 x1110000101
8084 * rt -----
8085 * rs -----
8086 * rd -----
8087 */
8088 std::string NMD::LD_S9_(uint64 instruction)
8089 {
8090 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8091 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8092 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8093
8094 std::string rt = GPR(copy(rt_value));
8095 std::string s = IMMEDIATE(copy(s_value));
8096 std::string rs = GPR(copy(rs_value));
8097
8098 return img::format("LD %s, %s(%s)", rt, s, rs);
8099 }
8100
8101
8102 /*
8103 *
8104 *
8105 * 3 2 1
8106 * 10987654321098765432109876543210
8107 * 001000 x1110000101
8108 * rt -----
8109 * rs -----
8110 * rd -----
8111 */
8112 std::string NMD::LD_U12_(uint64 instruction)
8113 {
8114 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8115 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8116 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8117
8118 std::string rt = GPR(copy(rt_value));
8119 std::string u = IMMEDIATE(copy(u_value));
8120 std::string rs = GPR(copy(rs_value));
8121
8122 return img::format("LD %s, %s(%s)", rt, u, rs);
8123 }
8124
8125
8126 /*
8127 *
8128 *
8129 * 3 2 1
8130 * 10987654321098765432109876543210
8131 * 001000 x1110000101
8132 * rt -----
8133 * rs -----
8134 * rd -----
8135 */
8136 std::string NMD::LDC1_GP_(uint64 instruction)
8137 {
8138 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8139 uint64 u_value = extract_u_17_to_2__s2(instruction);
8140
8141 std::string ft = FPR(copy(ft_value));
8142 std::string u = IMMEDIATE(copy(u_value));
8143
8144 return img::format("LDC1 %s, %s($%d)", ft, u, 28);
8145 }
8146
8147
8148 /*
8149 *
8150 *
8151 * 3 2 1
8152 * 10987654321098765432109876543210
8153 * 001000 x1110000101
8154 * rt -----
8155 * rs -----
8156 * rd -----
8157 */
8158 std::string NMD::LDC1_S9_(uint64 instruction)
8159 {
8160 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8161 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8162 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8163
8164 std::string ft = FPR(copy(ft_value));
8165 std::string s = IMMEDIATE(copy(s_value));
8166 std::string rs = GPR(copy(rs_value));
8167
8168 return img::format("LDC1 %s, %s(%s)", ft, s, rs);
8169 }
8170
8171
8172 /*
8173 *
8174 *
8175 * 3 2 1
8176 * 10987654321098765432109876543210
8177 * 001000 x1110000101
8178 * rt -----
8179 * rs -----
8180 * rd -----
8181 */
8182 std::string NMD::LDC1_U12_(uint64 instruction)
8183 {
8184 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8185 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8186 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8187
8188 std::string ft = FPR(copy(ft_value));
8189 std::string u = IMMEDIATE(copy(u_value));
8190 std::string rs = GPR(copy(rs_value));
8191
8192 return img::format("LDC1 %s, %s(%s)", ft, u, rs);
8193 }
8194
8195
8196 /*
8197 *
8198 *
8199 * 3 2 1
8200 * 10987654321098765432109876543210
8201 * 001000 x1110000101
8202 * rt -----
8203 * rs -----
8204 * rd -----
8205 */
8206 std::string NMD::LDC1XS(uint64 instruction)
8207 {
8208 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8209 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8210 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8211
8212 std::string ft = FPR(copy(ft_value));
8213 std::string rs = GPR(copy(rs_value));
8214 std::string rt = GPR(copy(rt_value));
8215
8216 return img::format("LDC1XS %s, %s(%s)", ft, rs, rt);
8217 }
8218
8219
8220 /*
8221 *
8222 *
8223 * 3 2 1
8224 * 10987654321098765432109876543210
8225 * 001000 x1110000101
8226 * rt -----
8227 * rs -----
8228 * rd -----
8229 */
8230 std::string NMD::LDC1X(uint64 instruction)
8231 {
8232 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8233 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8234 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8235
8236 std::string ft = FPR(copy(ft_value));
8237 std::string rs = GPR(copy(rs_value));
8238 std::string rt = GPR(copy(rt_value));
8239
8240 return img::format("LDC1X %s, %s(%s)", ft, rs, rt);
8241 }
8242
8243
8244 /*
8245 *
8246 *
8247 * 3 2 1
8248 * 10987654321098765432109876543210
8249 * 001000 x1110000101
8250 * rt -----
8251 * rs -----
8252 * rd -----
8253 */
8254 std::string NMD::LDC2(uint64 instruction)
8255 {
8256 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8257 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8258 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8259
8260 std::string ct = CPR(copy(ct_value));
8261 std::string s = IMMEDIATE(copy(s_value));
8262 std::string rs = GPR(copy(rs_value));
8263
8264 return img::format("LDC2 %s, %s(%s)", ct, s, rs);
8265 }
8266
8267
8268 /*
8269 *
8270 *
8271 * 3 2 1
8272 * 10987654321098765432109876543210
8273 * 001000 x1110000101
8274 * rt -----
8275 * rs -----
8276 * rd -----
8277 */
8278 std::string NMD::LDM(uint64 instruction)
8279 {
8280 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8281 uint64 count3_value = extract_count3_14_13_12(instruction);
8282 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8283 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8284
8285 std::string rt = GPR(copy(rt_value));
8286 std::string s = IMMEDIATE(copy(s_value));
8287 std::string rs = GPR(copy(rs_value));
8288 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
8289
8290 return img::format("LDM %s, %s(%s), %s", rt, s, rs, count3);
8291 }
8292
8293
8294 /*
8295 *
8296 *
8297 * 3 2 1
8298 * 10987654321098765432109876543210
8299 * 001000 x1110000101
8300 * rt -----
8301 * rs -----
8302 * rd -----
8303 */
8304 std::string NMD::LDPC_48_(uint64 instruction)
8305 {
8306 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8307 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8308
8309 std::string rt = GPR(copy(rt_value));
8310 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
8311
8312 return img::format("LDPC %s, %s", rt, s);
8313 }
8314
8315
8316 /*
8317 *
8318 *
8319 * 3 2 1
8320 * 10987654321098765432109876543210
8321 * 001000 x1110000101
8322 * rt -----
8323 * rs -----
8324 * rd -----
8325 */
8326 std::string NMD::LDX(uint64 instruction)
8327 {
8328 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8329 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8330 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8331
8332 std::string rd = GPR(copy(rd_value));
8333 std::string rs = GPR(copy(rs_value));
8334 std::string rt = GPR(copy(rt_value));
8335
8336 return img::format("LDX %s, %s(%s)", rd, rs, rt);
8337 }
8338
8339
8340 /*
8341 *
8342 *
8343 * 3 2 1
8344 * 10987654321098765432109876543210
8345 * 001000 x1110000101
8346 * rt -----
8347 * rs -----
8348 * rd -----
8349 */
8350 std::string NMD::LDXS(uint64 instruction)
8351 {
8352 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8353 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8354 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8355
8356 std::string rd = GPR(copy(rd_value));
8357 std::string rs = GPR(copy(rs_value));
8358 std::string rt = GPR(copy(rt_value));
8359
8360 return img::format("LDXS %s, %s(%s)", rd, rs, rt);
8361 }
8362
8363
8364 /*
8365 *
8366 *
8367 * 3 2 1
8368 * 10987654321098765432109876543210
8369 * 001000 x1110000101
8370 * rt -----
8371 * rs -----
8372 * rd -----
8373 */
8374 std::string NMD::LH_16_(uint64 instruction)
8375 {
8376 uint64 u_value = extract_u_2_1__s1(instruction);
8377 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8378 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8379
8380 std::string rt3 = GPR(encode_gpr3(rt3_value));
8381 std::string u = IMMEDIATE(copy(u_value));
8382 std::string rs3 = GPR(encode_gpr3(rs3_value));
8383
8384 return img::format("LH %s, %s(%s)", rt3, u, rs3);
8385 }
8386
8387
8388 /*
8389 *
8390 *
8391 * 3 2 1
8392 * 10987654321098765432109876543210
8393 * 001000 x1110000101
8394 * rt -----
8395 * rs -----
8396 * rd -----
8397 */
8398 std::string NMD::LH_GP_(uint64 instruction)
8399 {
8400 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8401 uint64 u_value = extract_u_17_to_1__s1(instruction);
8402
8403 std::string rt = GPR(copy(rt_value));
8404 std::string u = IMMEDIATE(copy(u_value));
8405
8406 return img::format("LH %s, %s($%d)", rt, u, 28);
8407 }
8408
8409
8410 /*
8411 *
8412 *
8413 * 3 2 1
8414 * 10987654321098765432109876543210
8415 * 001000 x1110000101
8416 * rt -----
8417 * rs -----
8418 * rd -----
8419 */
8420 std::string NMD::LH_S9_(uint64 instruction)
8421 {
8422 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8423 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8424 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8425
8426 std::string rt = GPR(copy(rt_value));
8427 std::string s = IMMEDIATE(copy(s_value));
8428 std::string rs = GPR(copy(rs_value));
8429
8430 return img::format("LH %s, %s(%s)", rt, s, rs);
8431 }
8432
8433
8434 /*
8435 *
8436 *
8437 * 3 2 1
8438 * 10987654321098765432109876543210
8439 * 001000 x1110000101
8440 * rt -----
8441 * rs -----
8442 * rd -----
8443 */
8444 std::string NMD::LH_U12_(uint64 instruction)
8445 {
8446 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8447 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8448 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8449
8450 std::string rt = GPR(copy(rt_value));
8451 std::string u = IMMEDIATE(copy(u_value));
8452 std::string rs = GPR(copy(rs_value));
8453
8454 return img::format("LH %s, %s(%s)", rt, u, rs);
8455 }
8456
8457
8458 /*
8459 *
8460 *
8461 * 3 2 1
8462 * 10987654321098765432109876543210
8463 * 001000 x1110000101
8464 * rt -----
8465 * rs -----
8466 * rd -----
8467 */
8468 std::string NMD::LHE(uint64 instruction)
8469 {
8470 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8471 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8472 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8473
8474 std::string rt = GPR(copy(rt_value));
8475 std::string s = IMMEDIATE(copy(s_value));
8476 std::string rs = GPR(copy(rs_value));
8477
8478 return img::format("LHE %s, %s(%s)", rt, s, rs);
8479 }
8480
8481
8482 /*
8483 *
8484 *
8485 * 3 2 1
8486 * 10987654321098765432109876543210
8487 * 001000 x1110000101
8488 * rt -----
8489 * rs -----
8490 * rd -----
8491 */
8492 std::string NMD::LHU_16_(uint64 instruction)
8493 {
8494 uint64 u_value = extract_u_2_1__s1(instruction);
8495 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8496 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8497
8498 std::string rt3 = GPR(encode_gpr3(rt3_value));
8499 std::string u = IMMEDIATE(copy(u_value));
8500 std::string rs3 = GPR(encode_gpr3(rs3_value));
8501
8502 return img::format("LHU %s, %s(%s)", rt3, u, rs3);
8503 }
8504
8505
8506 /*
8507 *
8508 *
8509 * 3 2 1
8510 * 10987654321098765432109876543210
8511 * 001000 x1110000101
8512 * rt -----
8513 * rs -----
8514 * rd -----
8515 */
8516 std::string NMD::LHU_GP_(uint64 instruction)
8517 {
8518 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8519 uint64 u_value = extract_u_17_to_1__s1(instruction);
8520
8521 std::string rt = GPR(copy(rt_value));
8522 std::string u = IMMEDIATE(copy(u_value));
8523
8524 return img::format("LHU %s, %s($%d)", rt, u, 28);
8525 }
8526
8527
8528 /*
8529 *
8530 *
8531 * 3 2 1
8532 * 10987654321098765432109876543210
8533 * 001000 x1110000101
8534 * rt -----
8535 * rs -----
8536 * rd -----
8537 */
8538 std::string NMD::LHU_S9_(uint64 instruction)
8539 {
8540 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8541 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8542 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8543
8544 std::string rt = GPR(copy(rt_value));
8545 std::string s = IMMEDIATE(copy(s_value));
8546 std::string rs = GPR(copy(rs_value));
8547
8548 return img::format("LHU %s, %s(%s)", rt, s, rs);
8549 }
8550
8551
8552 /*
8553 *
8554 *
8555 * 3 2 1
8556 * 10987654321098765432109876543210
8557 * 001000 x1110000101
8558 * rt -----
8559 * rs -----
8560 * rd -----
8561 */
8562 std::string NMD::LHU_U12_(uint64 instruction)
8563 {
8564 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8565 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8566 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8567
8568 std::string rt = GPR(copy(rt_value));
8569 std::string u = IMMEDIATE(copy(u_value));
8570 std::string rs = GPR(copy(rs_value));
8571
8572 return img::format("LHU %s, %s(%s)", rt, u, rs);
8573 }
8574
8575
8576 /*
8577 *
8578 *
8579 * 3 2 1
8580 * 10987654321098765432109876543210
8581 * 001000 x1110000101
8582 * rt -----
8583 * rs -----
8584 * rd -----
8585 */
8586 std::string NMD::LHUE(uint64 instruction)
8587 {
8588 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8589 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8590 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8591
8592 std::string rt = GPR(copy(rt_value));
8593 std::string s = IMMEDIATE(copy(s_value));
8594 std::string rs = GPR(copy(rs_value));
8595
8596 return img::format("LHUE %s, %s(%s)", rt, s, rs);
8597 }
8598
8599
8600 /*
8601 *
8602 *
8603 * 3 2 1
8604 * 10987654321098765432109876543210
8605 * 001000 x1110000101
8606 * rt -----
8607 * rs -----
8608 * rd -----
8609 */
8610 std::string NMD::LHUX(uint64 instruction)
8611 {
8612 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8613 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8614 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8615
8616 std::string rd = GPR(copy(rd_value));
8617 std::string rs = GPR(copy(rs_value));
8618 std::string rt = GPR(copy(rt_value));
8619
8620 return img::format("LHUX %s, %s(%s)", rd, rs, rt);
8621 }
8622
8623
8624 /*
8625 *
8626 *
8627 * 3 2 1
8628 * 10987654321098765432109876543210
8629 * 001000 x1110000101
8630 * rt -----
8631 * rs -----
8632 * rd -----
8633 */
8634 std::string NMD::LHUXS(uint64 instruction)
8635 {
8636 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8637 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8638 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8639
8640 std::string rd = GPR(copy(rd_value));
8641 std::string rs = GPR(copy(rs_value));
8642 std::string rt = GPR(copy(rt_value));
8643
8644 return img::format("LHUXS %s, %s(%s)", rd, rs, rt);
8645 }
8646
8647
8648 /*
8649 *
8650 *
8651 * 3 2 1
8652 * 10987654321098765432109876543210
8653 * 001000 x1110000101
8654 * rt -----
8655 * rs -----
8656 * rd -----
8657 */
8658 std::string NMD::LHXS(uint64 instruction)
8659 {
8660 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8661 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8662 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8663
8664 std::string rd = GPR(copy(rd_value));
8665 std::string rs = GPR(copy(rs_value));
8666 std::string rt = GPR(copy(rt_value));
8667
8668 return img::format("LHXS %s, %s(%s)", rd, rs, rt);
8669 }
8670
8671
8672 /*
8673 *
8674 *
8675 * 3 2 1
8676 * 10987654321098765432109876543210
8677 * 001000 x1110000101
8678 * rt -----
8679 * rs -----
8680 * rd -----
8681 */
8682 std::string NMD::LHX(uint64 instruction)
8683 {
8684 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8685 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8686 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8687
8688 std::string rd = GPR(copy(rd_value));
8689 std::string rs = GPR(copy(rs_value));
8690 std::string rt = GPR(copy(rt_value));
8691
8692 return img::format("LHX %s, %s(%s)", rd, rs, rt);
8693 }
8694
8695
8696 /*
8697 *
8698 *
8699 * 3 2 1
8700 * 10987654321098765432109876543210
8701 * 001000 x1110000101
8702 * rt -----
8703 * rs -----
8704 * rd -----
8705 */
8706 std::string NMD::LI_16_(uint64 instruction)
8707 {
8708 uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);
8709 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8710
8711 std::string rt3 = GPR(encode_gpr3(rt3_value));
8712 std::string eu = IMMEDIATE(encode_eu_from_s_li16(eu_value));
8713
8714 return img::format("LI %s, %s", rt3, eu);
8715 }
8716
8717
8718 /*
8719 *
8720 *
8721 * 3 2 1
8722 * 10987654321098765432109876543210
8723 * 001000 x1110000101
8724 * rt -----
8725 * rs -----
8726 * rd -----
8727 */
8728 std::string NMD::LI_48_(uint64 instruction)
8729 {
8730 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8731 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8732
8733 std::string rt = GPR(copy(rt_value));
8734 std::string s = IMMEDIATE(copy(s_value));
8735
8736 return img::format("LI %s, %s", rt, s);
8737 }
8738
8739
8740 /*
8741 *
8742 *
8743 * 3 2 1
8744 * 10987654321098765432109876543210
8745 * 001000 x1110000101
8746 * rt -----
8747 * rs -----
8748 * rd -----
8749 */
8750 std::string NMD::LL(uint64 instruction)
8751 {
8752 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8753 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8754 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8755
8756 std::string rt = GPR(copy(rt_value));
8757 std::string s = IMMEDIATE(copy(s_value));
8758 std::string rs = GPR(copy(rs_value));
8759
8760 return img::format("LL %s, %s(%s)", rt, s, rs);
8761 }
8762
8763
8764 /*
8765 *
8766 *
8767 * 3 2 1
8768 * 10987654321098765432109876543210
8769 * 001000 x1110000101
8770 * rt -----
8771 * rs -----
8772 * rd -----
8773 */
8774 std::string NMD::LLD(uint64 instruction)
8775 {
8776 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8777 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
8778 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8779
8780 std::string rt = GPR(copy(rt_value));
8781 std::string s = IMMEDIATE(copy(s_value));
8782 std::string rs = GPR(copy(rs_value));
8783
8784 return img::format("LLD %s, %s(%s)", rt, s, rs);
8785 }
8786
8787
8788 /*
8789 *
8790 *
8791 * 3 2 1
8792 * 10987654321098765432109876543210
8793 * 001000 x1110000101
8794 * rt -----
8795 * rs -----
8796 * rd -----
8797 */
8798 std::string NMD::LLDP(uint64 instruction)
8799 {
8800 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8801 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8802 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8803
8804 std::string rt = GPR(copy(rt_value));
8805 std::string ru = GPR(copy(ru_value));
8806 std::string rs = GPR(copy(rs_value));
8807
8808 return img::format("LLDP %s, %s, (%s)", rt, ru, rs);
8809 }
8810
8811
8812 /*
8813 *
8814 *
8815 * 3 2 1
8816 * 10987654321098765432109876543210
8817 * 001000 x1110000101
8818 * rt -----
8819 * rs -----
8820 * rd -----
8821 */
8822 std::string NMD::LLE(uint64 instruction)
8823 {
8824 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8825 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8826 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8827
8828 std::string rt = GPR(copy(rt_value));
8829 std::string s = IMMEDIATE(copy(s_value));
8830 std::string rs = GPR(copy(rs_value));
8831
8832 return img::format("LLE %s, %s(%s)", rt, s, rs);
8833 }
8834
8835
8836 /*
8837 *
8838 *
8839 * 3 2 1
8840 * 10987654321098765432109876543210
8841 * 001000 x1110000101
8842 * rt -----
8843 * rs -----
8844 * rd -----
8845 */
8846 std::string NMD::LLWP(uint64 instruction)
8847 {
8848 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8849 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8850 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8851
8852 std::string rt = GPR(copy(rt_value));
8853 std::string ru = GPR(copy(ru_value));
8854 std::string rs = GPR(copy(rs_value));
8855
8856 return img::format("LLWP %s, %s, (%s)", rt, ru, rs);
8857 }
8858
8859
8860 /*
8861 *
8862 *
8863 * 3 2 1
8864 * 10987654321098765432109876543210
8865 * 001000 x1110000101
8866 * rt -----
8867 * rs -----
8868 * rd -----
8869 */
8870 std::string NMD::LLWPE(uint64 instruction)
8871 {
8872 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8873 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8874 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8875
8876 std::string rt = GPR(copy(rt_value));
8877 std::string ru = GPR(copy(ru_value));
8878 std::string rs = GPR(copy(rs_value));
8879
8880 return img::format("LLWPE %s, %s, (%s)", rt, ru, rs);
8881 }
8882
8883
8884 /*
8885 *
8886 *
8887 * 3 2 1
8888 * 10987654321098765432109876543210
8889 * 001000 x1110000101
8890 * rt -----
8891 * rs -----
8892 * rd -----
8893 */
8894 std::string NMD::LSA(uint64 instruction)
8895 {
8896 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8897 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8898 uint64 u2_value = extract_u2_10_9(instruction);
8899 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8900
8901 std::string rd = GPR(copy(rd_value));
8902 std::string rs = GPR(copy(rs_value));
8903 std::string rt = GPR(copy(rt_value));
8904 std::string u2 = IMMEDIATE(copy(u2_value));
8905
8906 return img::format("LSA %s, %s, %s, %s", rd, rs, rt, u2);
8907 }
8908
8909
8910 /*
8911 *
8912 *
8913 * 3 2 1
8914 * 10987654321098765432109876543210
8915 * 001000 x1110000101
8916 * rt -----
8917 * rs -----
8918 * rd -----
8919 */
8920 std::string NMD::LUI(uint64 instruction)
8921 {
8922 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8923 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
8924
8925 std::string rt = GPR(copy(rt_value));
8926 std::string s = IMMEDIATE(copy(s_value));
8927
8928 return img::format("LUI %s, %%hi(%s)", rt, s);
8929 }
8930
8931
8932 /*
8933 *
8934 *
8935 * 3 2 1
8936 * 10987654321098765432109876543210
8937 * 001000 x1110000101
8938 * rt -----
8939 * rs -----
8940 * rd -----
8941 */
8942 std::string NMD::LW_16_(uint64 instruction)
8943 {
8944 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
8945 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8946 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8947
8948 std::string rt3 = GPR(encode_gpr3(rt3_value));
8949 std::string u = IMMEDIATE(copy(u_value));
8950 std::string rs3 = GPR(encode_gpr3(rs3_value));
8951
8952 return img::format("LW %s, %s(%s)", rt3, u, rs3);
8953 }
8954
8955
8956 /*
8957 *
8958 *
8959 * 3 2 1
8960 * 10987654321098765432109876543210
8961 * 001000 x1110000101
8962 * rt -----
8963 * rs -----
8964 * rd -----
8965 */
8966 std::string NMD::LW_4X4_(uint64 instruction)
8967 {
8968 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
8969 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
8970 uint64 u_value = extract_u_3_8__s2(instruction);
8971
8972 std::string rt4 = GPR(encode_gpr4(rt4_value));
8973 std::string u = IMMEDIATE(copy(u_value));
8974 std::string rs4 = GPR(encode_gpr4(rs4_value));
8975
8976 return img::format("LW %s, %s(%s)", rt4, u, rs4);
8977 }
8978
8979
8980 /*
8981 *
8982 *
8983 * 3 2 1
8984 * 10987654321098765432109876543210
8985 * 001000 x1110000101
8986 * rt -----
8987 * rs -----
8988 * rd -----
8989 */
8990 std::string NMD::LW_GP_(uint64 instruction)
8991 {
8992 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8993 uint64 u_value = extract_u_20_to_2__s2(instruction);
8994
8995 std::string rt = GPR(copy(rt_value));
8996 std::string u = IMMEDIATE(copy(u_value));
8997
8998 return img::format("LW %s, %s($%d)", rt, u, 28);
8999 }
9000
9001
9002 /*
9003 *
9004 *
9005 * 3 2 1
9006 * 10987654321098765432109876543210
9007 * 001000 x1110000101
9008 * rt -----
9009 * rs -----
9010 * rd -----
9011 */
9012 std::string NMD::LW_GP16_(uint64 instruction)
9013 {
9014 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
9015 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9016
9017 std::string rt3 = GPR(encode_gpr3(rt3_value));
9018 std::string u = IMMEDIATE(copy(u_value));
9019
9020 return img::format("LW %s, %s($%d)", rt3, u, 28);
9021 }
9022
9023
9024 /*
9025 *
9026 *
9027 * 3 2 1
9028 * 10987654321098765432109876543210
9029 * 001000 x1110000101
9030 * rt -----
9031 * rs -----
9032 * rd -----
9033 */
9034 std::string NMD::LW_S9_(uint64 instruction)
9035 {
9036 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9037 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9038 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9039
9040 std::string rt = GPR(copy(rt_value));
9041 std::string s = IMMEDIATE(copy(s_value));
9042 std::string rs = GPR(copy(rs_value));
9043
9044 return img::format("LW %s, %s(%s)", rt, s, rs);
9045 }
9046
9047
9048 /*
9049 *
9050 *
9051 * 3 2 1
9052 * 10987654321098765432109876543210
9053 * 001000 x1110000101
9054 * rt -----
9055 * rs -----
9056 * rd -----
9057 */
9058 std::string NMD::LW_SP_(uint64 instruction)
9059 {
9060 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
9061 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
9062
9063 std::string rt = GPR(copy(rt_value));
9064 std::string u = IMMEDIATE(copy(u_value));
9065
9066 return img::format("LW %s, %s($%d)", rt, u, 29);
9067 }
9068
9069
9070 /*
9071 *
9072 *
9073 * 3 2 1
9074 * 10987654321098765432109876543210
9075 * 001000 x1110000101
9076 * rt -----
9077 * rs -----
9078 * rd -----
9079 */
9080 std::string NMD::LW_U12_(uint64 instruction)
9081 {
9082 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9083 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9084 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9085
9086 std::string rt = GPR(copy(rt_value));
9087 std::string u = IMMEDIATE(copy(u_value));
9088 std::string rs = GPR(copy(rs_value));
9089
9090 return img::format("LW %s, %s(%s)", rt, u, rs);
9091 }
9092
9093
9094 /*
9095 *
9096 *
9097 * 3 2 1
9098 * 10987654321098765432109876543210
9099 * 001000 x1110000101
9100 * rt -----
9101 * rs -----
9102 * rd -----
9103 */
9104 std::string NMD::LWC1_GP_(uint64 instruction)
9105 {
9106 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9107 uint64 u_value = extract_u_17_to_2__s2(instruction);
9108
9109 std::string ft = FPR(copy(ft_value));
9110 std::string u = IMMEDIATE(copy(u_value));
9111
9112 return img::format("LWC1 %s, %s($%d)", ft, u, 28);
9113 }
9114
9115
9116 /*
9117 *
9118 *
9119 * 3 2 1
9120 * 10987654321098765432109876543210
9121 * 001000 x1110000101
9122 * rt -----
9123 * rs -----
9124 * rd -----
9125 */
9126 std::string NMD::LWC1_S9_(uint64 instruction)
9127 {
9128 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9129 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9130 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9131
9132 std::string ft = FPR(copy(ft_value));
9133 std::string s = IMMEDIATE(copy(s_value));
9134 std::string rs = GPR(copy(rs_value));
9135
9136 return img::format("LWC1 %s, %s(%s)", ft, s, rs);
9137 }
9138
9139
9140 /*
9141 *
9142 *
9143 * 3 2 1
9144 * 10987654321098765432109876543210
9145 * 001000 x1110000101
9146 * rt -----
9147 * rs -----
9148 * rd -----
9149 */
9150 std::string NMD::LWC1_U12_(uint64 instruction)
9151 {
9152 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9153 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9154 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9155
9156 std::string ft = FPR(copy(ft_value));
9157 std::string u = IMMEDIATE(copy(u_value));
9158 std::string rs = GPR(copy(rs_value));
9159
9160 return img::format("LWC1 %s, %s(%s)", ft, u, rs);
9161 }
9162
9163
9164 /*
9165 *
9166 *
9167 * 3 2 1
9168 * 10987654321098765432109876543210
9169 * 001000 x1110000101
9170 * rt -----
9171 * rs -----
9172 * rd -----
9173 */
9174 std::string NMD::LWC1X(uint64 instruction)
9175 {
9176 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9177 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9178 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9179
9180 std::string ft = FPR(copy(ft_value));
9181 std::string rs = GPR(copy(rs_value));
9182 std::string rt = GPR(copy(rt_value));
9183
9184 return img::format("LWC1X %s, %s(%s)", ft, rs, rt);
9185 }
9186
9187
9188 /*
9189 *
9190 *
9191 * 3 2 1
9192 * 10987654321098765432109876543210
9193 * 001000 x1110000101
9194 * rt -----
9195 * rs -----
9196 * rd -----
9197 */
9198 std::string NMD::LWC1XS(uint64 instruction)
9199 {
9200 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9201 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9202 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9203
9204 std::string ft = FPR(copy(ft_value));
9205 std::string rs = GPR(copy(rs_value));
9206 std::string rt = GPR(copy(rt_value));
9207
9208 return img::format("LWC1XS %s, %s(%s)", ft, rs, rt);
9209 }
9210
9211
9212 /*
9213 *
9214 *
9215 * 3 2 1
9216 * 10987654321098765432109876543210
9217 * 001000 x1110000101
9218 * rt -----
9219 * rs -----
9220 * rd -----
9221 */
9222 std::string NMD::LWC2(uint64 instruction)
9223 {
9224 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9225 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
9226 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9227
9228 std::string ct = CPR(copy(ct_value));
9229 std::string s = IMMEDIATE(copy(s_value));
9230 std::string rs = GPR(copy(rs_value));
9231
9232 return img::format("LWC2 %s, %s(%s)", ct, s, rs);
9233 }
9234
9235
9236 /*
9237 *
9238 *
9239 * 3 2 1
9240 * 10987654321098765432109876543210
9241 * 001000 x1110000101
9242 * rt -----
9243 * rs -----
9244 * rd -----
9245 */
9246 std::string NMD::LWE(uint64 instruction)
9247 {
9248 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9249 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9250 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9251
9252 std::string rt = GPR(copy(rt_value));
9253 std::string s = IMMEDIATE(copy(s_value));
9254 std::string rs = GPR(copy(rs_value));
9255
9256 return img::format("LWE %s, %s(%s)", rt, s, rs);
9257 }
9258
9259
9260 /*
9261 *
9262 *
9263 * 3 2 1
9264 * 10987654321098765432109876543210
9265 * 001000 x1110000101
9266 * rt -----
9267 * rs -----
9268 * rd -----
9269 */
9270 std::string NMD::LWM(uint64 instruction)
9271 {
9272 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9273 uint64 count3_value = extract_count3_14_13_12(instruction);
9274 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9275 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9276
9277 std::string rt = GPR(copy(rt_value));
9278 std::string s = IMMEDIATE(copy(s_value));
9279 std::string rs = GPR(copy(rs_value));
9280 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
9281
9282 return img::format("LWM %s, %s(%s), %s", rt, s, rs, count3);
9283 }
9284
9285
9286 /*
9287 *
9288 *
9289 * 3 2 1
9290 * 10987654321098765432109876543210
9291 * 001000 x1110000101
9292 * rt -----
9293 * rs -----
9294 * rd -----
9295 */
9296 std::string NMD::LWPC_48_(uint64 instruction)
9297 {
9298 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
9299 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
9300
9301 std::string rt = GPR(copy(rt_value));
9302 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
9303
9304 return img::format("LWPC %s, %s", rt, s);
9305 }
9306
9307
9308 /*
9309 *
9310 *
9311 * 3 2 1
9312 * 10987654321098765432109876543210
9313 * 001000 x1110000101
9314 * rt -----
9315 * rs -----
9316 * rd -----
9317 */
9318 std::string NMD::LWU_GP_(uint64 instruction)
9319 {
9320 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9321 uint64 u_value = extract_u_17_to_2__s2(instruction);
9322
9323 std::string rt = GPR(copy(rt_value));
9324 std::string u = IMMEDIATE(copy(u_value));
9325
9326 return img::format("LWU %s, %s($%d)", rt, u, 28);
9327 }
9328
9329
9330 /*
9331 *
9332 *
9333 * 3 2 1
9334 * 10987654321098765432109876543210
9335 * 001000 x1110000101
9336 * rt -----
9337 * rs -----
9338 * rd -----
9339 */
9340 std::string NMD::LWU_S9_(uint64 instruction)
9341 {
9342 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9343 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9344 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9345
9346 std::string rt = GPR(copy(rt_value));
9347 std::string s = IMMEDIATE(copy(s_value));
9348 std::string rs = GPR(copy(rs_value));
9349
9350 return img::format("LWU %s, %s(%s)", rt, s, rs);
9351 }
9352
9353
9354 /*
9355 *
9356 *
9357 * 3 2 1
9358 * 10987654321098765432109876543210
9359 * 001000 x1110000101
9360 * rt -----
9361 * rs -----
9362 * rd -----
9363 */
9364 std::string NMD::LWU_U12_(uint64 instruction)
9365 {
9366 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9367 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9368 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9369
9370 std::string rt = GPR(copy(rt_value));
9371 std::string u = IMMEDIATE(copy(u_value));
9372 std::string rs = GPR(copy(rs_value));
9373
9374 return img::format("LWU %s, %s(%s)", rt, u, rs);
9375 }
9376
9377
9378 /*
9379 *
9380 *
9381 * 3 2 1
9382 * 10987654321098765432109876543210
9383 * 001000 x1110000101
9384 * rt -----
9385 * rs -----
9386 * rd -----
9387 */
9388 std::string NMD::LWUX(uint64 instruction)
9389 {
9390 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9391 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9392 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9393
9394 std::string rd = GPR(copy(rd_value));
9395 std::string rs = GPR(copy(rs_value));
9396 std::string rt = GPR(copy(rt_value));
9397
9398 return img::format("LWUX %s, %s(%s)", rd, rs, rt);
9399 }
9400
9401
9402 /*
9403 *
9404 *
9405 * 3 2 1
9406 * 10987654321098765432109876543210
9407 * 001000 x1110000101
9408 * rt -----
9409 * rs -----
9410 * rd -----
9411 */
9412 std::string NMD::LWUXS(uint64 instruction)
9413 {
9414 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9415 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9416 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9417
9418 std::string rd = GPR(copy(rd_value));
9419 std::string rs = GPR(copy(rs_value));
9420 std::string rt = GPR(copy(rt_value));
9421
9422 return img::format("LWUXS %s, %s(%s)", rd, rs, rt);
9423 }
9424
9425
9426 /*
9427 *
9428 *
9429 * 3 2 1
9430 * 10987654321098765432109876543210
9431 * 001000 x1110000101
9432 * rt -----
9433 * rs -----
9434 * rd -----
9435 */
9436 std::string NMD::LWX(uint64 instruction)
9437 {
9438 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9439 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9440 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9441
9442 std::string rd = GPR(copy(rd_value));
9443 std::string rs = GPR(copy(rs_value));
9444 std::string rt = GPR(copy(rt_value));
9445
9446 return img::format("LWX %s, %s(%s)", rd, rs, rt);
9447 }
9448
9449
9450 /*
9451 *
9452 *
9453 * 3 2 1
9454 * 10987654321098765432109876543210
9455 * 001000 x1110000101
9456 * rt -----
9457 * rs -----
9458 * rd -----
9459 */
9460 std::string NMD::LWXS_16_(uint64 instruction)
9461 {
9462 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9463 uint64 rs3_value = extract_rs3_6_5_4(instruction);
9464 uint64 rd3_value = extract_rd3_3_2_1(instruction);
9465
9466 std::string rd3 = GPR(encode_gpr3(rd3_value));
9467 std::string rs3 = GPR(encode_gpr3(rs3_value));
9468 std::string rt3 = IMMEDIATE(encode_gpr3(rt3_value));
9469
9470 return img::format("LWXS %s, %s(%s)", rd3, rs3, rt3);
9471 }
9472
9473
9474 /*
9475 *
9476 *
9477 * 3 2 1
9478 * 10987654321098765432109876543210
9479 * 001000 x1110000101
9480 * rt -----
9481 * rs -----
9482 * rd -----
9483 */
9484 std::string NMD::LWXS_32_(uint64 instruction)
9485 {
9486 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9487 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9488 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9489
9490 std::string rd = GPR(copy(rd_value));
9491 std::string rs = GPR(copy(rs_value));
9492 std::string rt = GPR(copy(rt_value));
9493
9494 return img::format("LWXS %s, %s(%s)", rd, rs, rt);
9495 }
9496
9497
9498 /*
9499 *
9500 *
9501 * 3 2 1
9502 * 10987654321098765432109876543210
9503 * 001000 x1110000101
9504 * rt -----
9505 * rs -----
9506 * rd -----
9507 */
9508 std::string NMD::MADD_DSP_(uint64 instruction)
9509 {
9510 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9511 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9512 uint64 ac_value = extract_ac_13_12(instruction);
9513
9514 std::string ac = AC(copy(ac_value));
9515 std::string rs = GPR(copy(rs_value));
9516 std::string rt = GPR(copy(rt_value));
9517
9518 return img::format("MADD %s, %s, %s", ac, rs, rt);
9519 }
9520
9521
9522 /*
9523 *
9524 *
9525 * 3 2 1
9526 * 10987654321098765432109876543210
9527 * 001000 x1110000101
9528 * rt -----
9529 * rs -----
9530 * rd -----
9531 */
9532 std::string NMD::MADDF_D(uint64 instruction)
9533 {
9534 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9535 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9536 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9537
9538 std::string fd = FPR(copy(fd_value));
9539 std::string fs = FPR(copy(fs_value));
9540 std::string ft = FPR(copy(ft_value));
9541
9542 return img::format("MADDF.D %s, %s, %s", fd, fs, ft);
9543 }
9544
9545
9546 /*
9547 *
9548 *
9549 * 3 2 1
9550 * 10987654321098765432109876543210
9551 * 001000 x1110000101
9552 * rt -----
9553 * rs -----
9554 * rd -----
9555 */
9556 std::string NMD::MADDF_S(uint64 instruction)
9557 {
9558 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9559 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9560 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9561
9562 std::string fd = FPR(copy(fd_value));
9563 std::string fs = FPR(copy(fs_value));
9564 std::string ft = FPR(copy(ft_value));
9565
9566 return img::format("MADDF.S %s, %s, %s", fd, fs, ft);
9567 }
9568
9569
9570 /*
9571 *
9572 *
9573 * 3 2 1
9574 * 10987654321098765432109876543210
9575 * 001000 x1110000101
9576 * rt -----
9577 * rs -----
9578 * rd -----
9579 */
9580 std::string NMD::MADDU_DSP_(uint64 instruction)
9581 {
9582 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9583 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9584 uint64 ac_value = extract_ac_13_12(instruction);
9585
9586 std::string ac = AC(copy(ac_value));
9587 std::string rs = GPR(copy(rs_value));
9588 std::string rt = GPR(copy(rt_value));
9589
9590 return img::format("MADDU %s, %s, %s", ac, rs, rt);
9591 }
9592
9593
9594 /*
9595 *
9596 *
9597 * 3 2 1
9598 * 10987654321098765432109876543210
9599 * 001000 x1110000101
9600 * rt -----
9601 * rs -----
9602 * rd -----
9603 */
9604 std::string NMD::MAQ_S_W_PHL(uint64 instruction)
9605 {
9606 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9607 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9608 uint64 ac_value = extract_ac_13_12(instruction);
9609
9610 std::string ac = AC(copy(ac_value));
9611 std::string rs = GPR(copy(rs_value));
9612 std::string rt = GPR(copy(rt_value));
9613
9614 return img::format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt);
9615 }
9616
9617
9618 /*
9619 *
9620 *
9621 * 3 2 1
9622 * 10987654321098765432109876543210
9623 * 001000 x1110000101
9624 * rt -----
9625 * rs -----
9626 * rd -----
9627 */
9628 std::string NMD::MAQ_S_W_PHR(uint64 instruction)
9629 {
9630 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9631 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9632 uint64 ac_value = extract_ac_13_12(instruction);
9633
9634 std::string ac = AC(copy(ac_value));
9635 std::string rs = GPR(copy(rs_value));
9636 std::string rt = GPR(copy(rt_value));
9637
9638 return img::format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt);
9639 }
9640
9641
9642 /*
9643 *
9644 *
9645 * 3 2 1
9646 * 10987654321098765432109876543210
9647 * 001000 x1110000101
9648 * rt -----
9649 * rs -----
9650 * rd -----
9651 */
9652 std::string NMD::MAQ_SA_W_PHL(uint64 instruction)
9653 {
9654 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9655 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9656 uint64 ac_value = extract_ac_13_12(instruction);
9657
9658 std::string ac = AC(copy(ac_value));
9659 std::string rs = GPR(copy(rs_value));
9660 std::string rt = GPR(copy(rt_value));
9661
9662 return img::format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt);
9663 }
9664
9665
9666 /*
9667 *
9668 *
9669 * 3 2 1
9670 * 10987654321098765432109876543210
9671 * 001000 x1110000101
9672 * rt -----
9673 * rs -----
9674 * rd -----
9675 */
9676 std::string NMD::MAQ_SA_W_PHR(uint64 instruction)
9677 {
9678 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9679 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9680 uint64 ac_value = extract_ac_13_12(instruction);
9681
9682 std::string ac = AC(copy(ac_value));
9683 std::string rs = GPR(copy(rs_value));
9684 std::string rt = GPR(copy(rt_value));
9685
9686 return img::format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt);
9687 }
9688
9689
9690 /*
9691 *
9692 *
9693 * 3 2 1
9694 * 10987654321098765432109876543210
9695 * 001000 x1110000101
9696 * rt -----
9697 * rs -----
9698 * rd -----
9699 */
9700 std::string NMD::MAX_D(uint64 instruction)
9701 {
9702 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9703 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9704 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9705
9706 std::string fd = FPR(copy(fd_value));
9707 std::string fs = FPR(copy(fs_value));
9708 std::string ft = FPR(copy(ft_value));
9709
9710 return img::format("MAX.D %s, %s, %s", fd, fs, ft);
9711 }
9712
9713
9714 /*
9715 *
9716 *
9717 * 3 2 1
9718 * 10987654321098765432109876543210
9719 * 001000 x1110000101
9720 * rt -----
9721 * rs -----
9722 * rd -----
9723 */
9724 std::string NMD::MAX_S(uint64 instruction)
9725 {
9726 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9727 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9728 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9729
9730 std::string fd = FPR(copy(fd_value));
9731 std::string fs = FPR(copy(fs_value));
9732 std::string ft = FPR(copy(ft_value));
9733
9734 return img::format("MAX.S %s, %s, %s", fd, fs, ft);
9735 }
9736
9737
9738 /*
9739 *
9740 *
9741 * 3 2 1
9742 * 10987654321098765432109876543210
9743 * 001000 x1110000101
9744 * rt -----
9745 * rs -----
9746 * rd -----
9747 */
9748 std::string NMD::MAXA_D(uint64 instruction)
9749 {
9750 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9751 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9752 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9753
9754 std::string fd = FPR(copy(fd_value));
9755 std::string fs = FPR(copy(fs_value));
9756 std::string ft = FPR(copy(ft_value));
9757
9758 return img::format("MAXA.D %s, %s, %s", fd, fs, ft);
9759 }
9760
9761
9762 /*
9763 *
9764 *
9765 * 3 2 1
9766 * 10987654321098765432109876543210
9767 * 001000 x1110000101
9768 * rt -----
9769 * rs -----
9770 * rd -----
9771 */
9772 std::string NMD::MAXA_S(uint64 instruction)
9773 {
9774 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9775 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9776 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9777
9778 std::string fd = FPR(copy(fd_value));
9779 std::string fs = FPR(copy(fs_value));
9780 std::string ft = FPR(copy(ft_value));
9781
9782 return img::format("MAXA.S %s, %s, %s", fd, fs, ft);
9783 }
9784
9785
9786 /*
9787 *
9788 *
9789 * 3 2 1
9790 * 10987654321098765432109876543210
9791 * 001000 x1110000101
9792 * rt -----
9793 * rs -----
9794 * rd -----
9795 */
9796 std::string NMD::MFC0(uint64 instruction)
9797 {
9798 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9799 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9800 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9801
9802 std::string rt = GPR(copy(rt_value));
9803 std::string c0s = CPR(copy(c0s_value));
9804 std::string sel = IMMEDIATE(copy(sel_value));
9805
9806 return img::format("MFC0 %s, %s, %s", rt, c0s, sel);
9807 }
9808
9809
9810 /*
9811 *
9812 *
9813 * 3 2 1
9814 * 10987654321098765432109876543210
9815 * 001000 x1110000101
9816 * rt -----
9817 * rs -----
9818 * rd -----
9819 */
9820 std::string NMD::MFC1(uint64 instruction)
9821 {
9822 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9823 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9824
9825 std::string rt = GPR(copy(rt_value));
9826 std::string fs = FPR(copy(fs_value));
9827
9828 return img::format("MFC1 %s, %s", rt, fs);
9829 }
9830
9831
9832 /*
9833 *
9834 *
9835 * 3 2 1
9836 * 10987654321098765432109876543210
9837 * 001000 x1110000101
9838 * rt -----
9839 * rs -----
9840 * rd -----
9841 */
9842 std::string NMD::MFC2(uint64 instruction)
9843 {
9844 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9845 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
9846
9847 std::string rt = GPR(copy(rt_value));
9848 std::string cs = CPR(copy(cs_value));
9849
9850 return img::format("MFC2 %s, %s", rt, cs);
9851 }
9852
9853
9854 /*
9855 *
9856 *
9857 * 3 2 1
9858 * 10987654321098765432109876543210
9859 * 001000 x1110000101
9860 * rt -----
9861 * rs -----
9862 * rd -----
9863 */
9864 std::string NMD::MFGC0(uint64 instruction)
9865 {
9866 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9867 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9868 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9869
9870 std::string rt = GPR(copy(rt_value));
9871 std::string c0s = CPR(copy(c0s_value));
9872 std::string sel = IMMEDIATE(copy(sel_value));
9873
9874 return img::format("MFGC0 %s, %s, %s", rt, c0s, sel);
9875 }
9876
9877
9878 /*
9879 *
9880 *
9881 * 3 2 1
9882 * 10987654321098765432109876543210
9883 * 001000 x1110000101
9884 * rt -----
9885 * rs -----
9886 * rd -----
9887 */
9888 std::string NMD::MFHC0(uint64 instruction)
9889 {
9890 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9891 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9892 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9893
9894 std::string rt = GPR(copy(rt_value));
9895 std::string c0s = CPR(copy(c0s_value));
9896 std::string sel = IMMEDIATE(copy(sel_value));
9897
9898 return img::format("MFHC0 %s, %s, %s", rt, c0s, sel);
9899 }
9900
9901
9902 /*
9903 *
9904 *
9905 * 3 2 1
9906 * 10987654321098765432109876543210
9907 * 001000 x1110000101
9908 * rt -----
9909 * rs -----
9910 * rd -----
9911 */
9912 std::string NMD::MFHC1(uint64 instruction)
9913 {
9914 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9915 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9916
9917 std::string rt = GPR(copy(rt_value));
9918 std::string fs = FPR(copy(fs_value));
9919
9920 return img::format("MFHC1 %s, %s", rt, fs);
9921 }
9922
9923
9924 /*
9925 *
9926 *
9927 * 3 2 1
9928 * 10987654321098765432109876543210
9929 * 001000 x1110000101
9930 * rt -----
9931 * rs -----
9932 * rd -----
9933 */
9934 std::string NMD::MFHC2(uint64 instruction)
9935 {
9936 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9937 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
9938
9939 std::string rt = GPR(copy(rt_value));
9940 std::string cs = CPR(copy(cs_value));
9941
9942 return img::format("MFHC2 %s, %s", rt, cs);
9943 }
9944
9945
9946 /*
9947 *
9948 *
9949 * 3 2 1
9950 * 10987654321098765432109876543210
9951 * 001000 x1110000101
9952 * rt -----
9953 * rs -----
9954 * rd -----
9955 */
9956 std::string NMD::MFHGC0(uint64 instruction)
9957 {
9958 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9959 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9960 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9961
9962 std::string rt = GPR(copy(rt_value));
9963 std::string c0s = CPR(copy(c0s_value));
9964 std::string sel = IMMEDIATE(copy(sel_value));
9965
9966 return img::format("MFHGC0 %s, %s, %s", rt, c0s, sel);
9967 }
9968
9969
9970 /*
9971 *
9972 *
9973 * 3 2 1
9974 * 10987654321098765432109876543210
9975 * 001000 x1110000101
9976 * rt -----
9977 * rs -----
9978 * rd -----
9979 */
9980 std::string NMD::MFHI_DSP_(uint64 instruction)
9981 {
9982 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9983 uint64 ac_value = extract_ac_13_12(instruction);
9984
9985 std::string rt = GPR(copy(rt_value));
9986 std::string ac = AC(copy(ac_value));
9987
9988 return img::format("MFHI %s, %s", rt, ac);
9989 }
9990
9991
9992 /*
9993 *
9994 *
9995 * 3 2 1
9996 * 10987654321098765432109876543210
9997 * 001000 x1110000101
9998 * rt -----
9999 * rs -----
10000 * rd -----
10001 */
10002 std::string NMD::MFHTR(uint64 instruction)
10003 {
10004 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10005 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10006 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10007 uint64 u_value = extract_u_10(instruction);
10008
10009 std::string rt = GPR(copy(rt_value));
10010 std::string c0s = IMMEDIATE(copy(c0s_value));
10011 std::string u = IMMEDIATE(copy(u_value));
10012 std::string sel = IMMEDIATE(copy(sel_value));
10013
10014 return img::format("MFHTR %s, %s, %s, %s", rt, c0s, u, sel);
10015 }
10016
10017
10018 /*
10019 *
10020 *
10021 * 3 2 1
10022 * 10987654321098765432109876543210
10023 * 001000 x1110000101
10024 * rt -----
10025 * rs -----
10026 * rd -----
10027 */
10028 std::string NMD::MFLO_DSP_(uint64 instruction)
10029 {
10030 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10031 uint64 ac_value = extract_ac_13_12(instruction);
10032
10033 std::string rt = GPR(copy(rt_value));
10034 std::string ac = AC(copy(ac_value));
10035
10036 return img::format("MFLO %s, %s", rt, ac);
10037 }
10038
10039
10040 /*
10041 *
10042 *
10043 * 3 2 1
10044 * 10987654321098765432109876543210
10045 * 001000 x1110000101
10046 * rt -----
10047 * rs -----
10048 * rd -----
10049 */
10050 std::string NMD::MFTR(uint64 instruction)
10051 {
10052 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10053 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10054 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10055 uint64 u_value = extract_u_10(instruction);
10056
10057 std::string rt = GPR(copy(rt_value));
10058 std::string c0s = IMMEDIATE(copy(c0s_value));
10059 std::string u = IMMEDIATE(copy(u_value));
10060 std::string sel = IMMEDIATE(copy(sel_value));
10061
10062 return img::format("MFTR %s, %s, %s, %s", rt, c0s, u, sel);
10063 }
10064
10065
10066 /*
10067 *
10068 *
10069 * 3 2 1
10070 * 10987654321098765432109876543210
10071 * 001000 x1110000101
10072 * rt -----
10073 * rs -----
10074 * rd -----
10075 */
10076 std::string NMD::MIN_D(uint64 instruction)
10077 {
10078 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10079 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10080 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10081
10082 std::string fd = FPR(copy(fd_value));
10083 std::string fs = FPR(copy(fs_value));
10084 std::string ft = FPR(copy(ft_value));
10085
10086 return img::format("MIN.D %s, %s, %s", fd, fs, ft);
10087 }
10088
10089
10090 /*
10091 *
10092 *
10093 * 3 2 1
10094 * 10987654321098765432109876543210
10095 * 001000 x1110000101
10096 * rt -----
10097 * rs -----
10098 * rd -----
10099 */
10100 std::string NMD::MIN_S(uint64 instruction)
10101 {
10102 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10103 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10104 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10105
10106 std::string fd = FPR(copy(fd_value));
10107 std::string fs = FPR(copy(fs_value));
10108 std::string ft = FPR(copy(ft_value));
10109
10110 return img::format("MIN.S %s, %s, %s", fd, fs, ft);
10111 }
10112
10113
10114 /*
10115 *
10116 *
10117 * 3 2 1
10118 * 10987654321098765432109876543210
10119 * 001000 x1110000101
10120 * rt -----
10121 * rs -----
10122 * rd -----
10123 */
10124 std::string NMD::MINA_D(uint64 instruction)
10125 {
10126 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10127 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10128 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10129
10130 std::string fd = FPR(copy(fd_value));
10131 std::string fs = FPR(copy(fs_value));
10132 std::string ft = FPR(copy(ft_value));
10133
10134 return img::format("MINA.D %s, %s, %s", fd, fs, ft);
10135 }
10136
10137
10138 /*
10139 *
10140 *
10141 * 3 2 1
10142 * 10987654321098765432109876543210
10143 * 001000 x1110000101
10144 * rt -----
10145 * rs -----
10146 * rd -----
10147 */
10148 std::string NMD::MINA_S(uint64 instruction)
10149 {
10150 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10151 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10152 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10153
10154 std::string fd = FPR(copy(fd_value));
10155 std::string fs = FPR(copy(fs_value));
10156 std::string ft = FPR(copy(ft_value));
10157
10158 return img::format("MINA.S %s, %s, %s", fd, fs, ft);
10159 }
10160
10161
10162 /*
10163 *
10164 *
10165 * 3 2 1
10166 * 10987654321098765432109876543210
10167 * 001000 x1110000101
10168 * rt -----
10169 * rs -----
10170 * rd -----
10171 */
10172 std::string NMD::MOD(uint64 instruction)
10173 {
10174 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10175 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10176 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10177
10178 std::string rd = GPR(copy(rd_value));
10179 std::string rs = GPR(copy(rs_value));
10180 std::string rt = GPR(copy(rt_value));
10181
10182 return img::format("MOD %s, %s, %s", rd, rs, rt);
10183 }
10184
10185
10186 /*
10187 *
10188 *
10189 * 3 2 1
10190 * 10987654321098765432109876543210
10191 * 001000 x1110000101
10192 * rt -----
10193 * rs -----
10194 * rd -----
10195 */
10196 std::string NMD::MODSUB(uint64 instruction)
10197 {
10198 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10199 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10200 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10201
10202 std::string rd = GPR(copy(rd_value));
10203 std::string rs = GPR(copy(rs_value));
10204 std::string rt = GPR(copy(rt_value));
10205
10206 return img::format("MODSUB %s, %s, %s", rd, rs, rt);
10207 }
10208
10209
10210 /*
10211 *
10212 *
10213 * 3 2 1
10214 * 10987654321098765432109876543210
10215 * 001000 x1110000101
10216 * rt -----
10217 * rs -----
10218 * rd -----
10219 */
10220 std::string NMD::MODU(uint64 instruction)
10221 {
10222 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10223 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10224 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10225
10226 std::string rd = GPR(copy(rd_value));
10227 std::string rs = GPR(copy(rs_value));
10228 std::string rt = GPR(copy(rt_value));
10229
10230 return img::format("MODU %s, %s, %s", rd, rs, rt);
10231 }
10232
10233
10234 /*
10235 *
10236 *
10237 * 3 2 1
10238 * 10987654321098765432109876543210
10239 * 001000 x1110000101
10240 * rt -----
10241 * rs -----
10242 * rd -----
10243 */
10244 std::string NMD::MOV_D(uint64 instruction)
10245 {
10246 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10247 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10248
10249 std::string ft = FPR(copy(ft_value));
10250 std::string fs = FPR(copy(fs_value));
10251
10252 return img::format("MOV.D %s, %s", ft, fs);
10253 }
10254
10255
10256 /*
10257 *
10258 *
10259 * 3 2 1
10260 * 10987654321098765432109876543210
10261 * 001000 x1110000101
10262 * rt -----
10263 * rs -----
10264 * rd -----
10265 */
10266 std::string NMD::MOV_S(uint64 instruction)
10267 {
10268 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10269 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10270
10271 std::string ft = FPR(copy(ft_value));
10272 std::string fs = FPR(copy(fs_value));
10273
10274 return img::format("MOV.S %s, %s", ft, fs);
10275 }
10276
10277
10278 /*
10279 *
10280 *
10281 * 3 2 1
10282 * 10987654321098765432109876543210
10283 * 001000 x1110000101
10284 * rt -----
10285 * rs -----
10286 * rd -----
10287 */
10288 std::string NMD::MOVE_BALC(uint64 instruction)
10289 {
10290 uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
10291 uint64 rd1_value = extract_rdl_25_24(instruction);
10292 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
10293
10294 std::string rd1 = GPR(encode_rd1_from_rd(rd1_value));
10295 std::string rtz4 = GPR(encode_gpr4_zero(rtz4_value));
10296 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
10297
10298 return img::format("MOVE.BALC %s, %s, %s", rd1, rtz4, s);
10299 }
10300
10301
10302 /*
10303 *
10304 *
10305 * 3 2 1
10306 * 10987654321098765432109876543210
10307 * 001000 x1110000101
10308 * rt -----
10309 * rs -----
10310 * rd -----
10311 */
10312 std::string NMD::MOVEP(uint64 instruction)
10313 {
10314 uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);
10315 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
10316 uint64 rd2_value = extract_rd2_3_8(instruction);
10317
10318 std::string rd2 = GPR(encode_rd2_reg1(rd2_value));
10319 std::string re2 = GPR(encode_rd2_reg2(rd2_value));
10320 /* !!!!!!!!!! - no conversion function */
10321 std::string rsz4 = GPR(encode_gpr4_zero(rsz4_value));
10322 std::string rtz4 = GPR(encode_gpr4_zero(rtz4_value));
10323
10324 return img::format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4);
10325 /* hand edited */
10326 }
10327
10328
10329 /*
10330 *
10331 *
10332 * 3 2 1
10333 * 10987654321098765432109876543210
10334 * 001000 x1110000101
10335 * rt -----
10336 * rs -----
10337 * rd -----
10338 */
10339 std::string NMD::MOVEP_REV_(uint64 instruction)
10340 {
10341 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10342 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10343 uint64 rd2_value = extract_rd2_3_8(instruction);
10344
10345 std::string rs4 = GPR(encode_gpr4(rs4_value));
10346 std::string rt4 = GPR(encode_gpr4(rt4_value));
10347 std::string rd2 = GPR(encode_rd2_reg1(rd2_value));
10348 std::string rs2 = GPR(encode_rd2_reg2(rd2_value));
10349 /* !!!!!!!!!! - no conversion function */
10350
10351 return img::format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2);
10352 /* hand edited */
10353 }
10354
10355
10356 /*
10357 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10358 *
10359 * 3 2 1
10360 * 10987654321098765432109876543210
10361 * 001000 00010001101
10362 * rt -----
10363 * rs -----
10364 * rd -----
10365 */
10366 std::string NMD::MOVE(uint64 instruction)
10367 {
10368 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
10369 uint64 rs_value = extract_rs_4_3_2_1_0(instruction);
10370
10371 std::string rt = GPR(copy(rt_value));
10372 std::string rs = GPR(copy(rs_value));
10373
10374 return img::format("MOVE %s, %s", rt, rs);
10375 }
10376
10377
10378 /*
10379 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10380 *
10381 * 3 2 1
10382 * 10987654321098765432109876543210
10383 * 001000 00010001101
10384 * rt -----
10385 * rs -----
10386 * rd -----
10387 */
10388 std::string NMD::MOVN(uint64 instruction)
10389 {
10390 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10391 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10392 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10393
10394 std::string rd = GPR(copy(rd_value));
10395 std::string rs = GPR(copy(rs_value));
10396 std::string rt = GPR(copy(rt_value));
10397
10398 return img::format("MOVN %s, %s, %s", rd, rs, rt);
10399 }
10400
10401
10402 /*
10403 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10404 *
10405 * 3 2 1
10406 * 10987654321098765432109876543210
10407 * 001000 00010001101
10408 * rt -----
10409 * rs -----
10410 * rd -----
10411 */
10412 std::string NMD::MOVZ(uint64 instruction)
10413 {
10414 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10415 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10416 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10417
10418 std::string rd = GPR(copy(rd_value));
10419 std::string rs = GPR(copy(rs_value));
10420 std::string rt = GPR(copy(rt_value));
10421
10422 return img::format("MOVZ %s, %s, %s", rd, rs, rt);
10423 }
10424
10425
10426 /*
10427 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10428 *
10429 * 3 2 1
10430 * 10987654321098765432109876543210
10431 * 001000 00010001101
10432 * rt -----
10433 * rs -----
10434 * rd -----
10435 */
10436 std::string NMD::MSUB_DSP_(uint64 instruction)
10437 {
10438 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10439 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10440 uint64 ac_value = extract_ac_13_12(instruction);
10441
10442 std::string ac = AC(copy(ac_value));
10443 std::string rs = GPR(copy(rs_value));
10444 std::string rt = GPR(copy(rt_value));
10445
10446 return img::format("MSUB %s, %s, %s", ac, rs, rt);
10447 }
10448
10449
10450 /*
10451 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10452 *
10453 * 3 2 1
10454 * 10987654321098765432109876543210
10455 * 001000 00010001101
10456 * rt -----
10457 * rs -----
10458 * rd -----
10459 */
10460 std::string NMD::MSUBF_D(uint64 instruction)
10461 {
10462 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10463 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10464 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10465
10466 std::string fd = FPR(copy(fd_value));
10467 std::string fs = FPR(copy(fs_value));
10468 std::string ft = FPR(copy(ft_value));
10469
10470 return img::format("MSUBF.D %s, %s, %s", fd, fs, ft);
10471 }
10472
10473
10474 /*
10475 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10476 *
10477 * 3 2 1
10478 * 10987654321098765432109876543210
10479 * 001000 00010001101
10480 * rt -----
10481 * rs -----
10482 * rd -----
10483 */
10484 std::string NMD::MSUBF_S(uint64 instruction)
10485 {
10486 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10487 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10488 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10489
10490 std::string fd = FPR(copy(fd_value));
10491 std::string fs = FPR(copy(fs_value));
10492 std::string ft = FPR(copy(ft_value));
10493
10494 return img::format("MSUBF.S %s, %s, %s", fd, fs, ft);
10495 }
10496
10497
10498 /*
10499 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10500 *
10501 * 3 2 1
10502 * 10987654321098765432109876543210
10503 * 001000 00010001101
10504 * rt -----
10505 * rs -----
10506 * rd -----
10507 */
10508 std::string NMD::MSUBU_DSP_(uint64 instruction)
10509 {
10510 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10511 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10512 uint64 ac_value = extract_ac_13_12(instruction);
10513
10514 std::string ac = AC(copy(ac_value));
10515 std::string rs = GPR(copy(rs_value));
10516 std::string rt = GPR(copy(rt_value));
10517
10518 return img::format("MSUBU %s, %s, %s", ac, rs, rt);
10519 }
10520
10521
10522 /*
10523 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10524 *
10525 * 3 2 1
10526 * 10987654321098765432109876543210
10527 * 001000 00010001101
10528 * rt -----
10529 * rs -----
10530 * rd -----
10531 */
10532 std::string NMD::MTC0(uint64 instruction)
10533 {
10534 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10535 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10536 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10537
10538 std::string rt = GPR(copy(rt_value));
10539 std::string c0s = CPR(copy(c0s_value));
10540 std::string sel = IMMEDIATE(copy(sel_value));
10541
10542 return img::format("MTC0 %s, %s, %s", rt, c0s, sel);
10543 }
10544
10545
10546 /*
10547 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10548 *
10549 * 3 2 1
10550 * 10987654321098765432109876543210
10551 * 001000 00010001101
10552 * rt -----
10553 * rs -----
10554 * rd -----
10555 */
10556 std::string NMD::MTC1(uint64 instruction)
10557 {
10558 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10559 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10560
10561 std::string rt = GPR(copy(rt_value));
10562 std::string fs = FPR(copy(fs_value));
10563
10564 return img::format("MTC1 %s, %s", rt, fs);
10565 }
10566
10567
10568 /*
10569 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10570 *
10571 * 3 2 1
10572 * 10987654321098765432109876543210
10573 * 001000 00010001101
10574 * rt -----
10575 * rs -----
10576 * rd -----
10577 */
10578 std::string NMD::MTC2(uint64 instruction)
10579 {
10580 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10581 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10582
10583 std::string rt = GPR(copy(rt_value));
10584 std::string cs = CPR(copy(cs_value));
10585
10586 return img::format("MTC2 %s, %s", rt, cs);
10587 }
10588
10589
10590 /*
10591 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10592 *
10593 * 3 2 1
10594 * 10987654321098765432109876543210
10595 * 001000 00010001101
10596 * rt -----
10597 * rs -----
10598 * rd -----
10599 */
10600 std::string NMD::MTGC0(uint64 instruction)
10601 {
10602 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10603 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10604 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10605
10606 std::string rt = GPR(copy(rt_value));
10607 std::string c0s = CPR(copy(c0s_value));
10608 std::string sel = IMMEDIATE(copy(sel_value));
10609
10610 return img::format("MTGC0 %s, %s, %s", rt, c0s, sel);
10611 }
10612
10613
10614 /*
10615 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10616 *
10617 * 3 2 1
10618 * 10987654321098765432109876543210
10619 * 001000 00010001101
10620 * rt -----
10621 * rs -----
10622 * rd -----
10623 */
10624 std::string NMD::MTHC0(uint64 instruction)
10625 {
10626 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10627 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10628 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10629
10630 std::string rt = GPR(copy(rt_value));
10631 std::string c0s = CPR(copy(c0s_value));
10632 std::string sel = IMMEDIATE(copy(sel_value));
10633
10634 return img::format("MTHC0 %s, %s, %s", rt, c0s, sel);
10635 }
10636
10637
10638 /*
10639 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10640 *
10641 * 3 2 1
10642 * 10987654321098765432109876543210
10643 * 001000 00010001101
10644 * rt -----
10645 * rs -----
10646 * rd -----
10647 */
10648 std::string NMD::MTHC1(uint64 instruction)
10649 {
10650 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10651 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10652
10653 std::string rt = GPR(copy(rt_value));
10654 std::string fs = FPR(copy(fs_value));
10655
10656 return img::format("MTHC1 %s, %s", rt, fs);
10657 }
10658
10659
10660 /*
10661 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10662 *
10663 * 3 2 1
10664 * 10987654321098765432109876543210
10665 * 001000 00010001101
10666 * rt -----
10667 * rs -----
10668 * rd -----
10669 */
10670 std::string NMD::MTHC2(uint64 instruction)
10671 {
10672 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10673 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10674
10675 std::string rt = GPR(copy(rt_value));
10676 std::string cs = CPR(copy(cs_value));
10677
10678 return img::format("MTHC2 %s, %s", rt, cs);
10679 }
10680
10681
10682 /*
10683 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10684 *
10685 * 3 2 1
10686 * 10987654321098765432109876543210
10687 * 001000 00010001101
10688 * rt -----
10689 * rs -----
10690 * rd -----
10691 */
10692 std::string NMD::MTHGC0(uint64 instruction)
10693 {
10694 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10695 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10696 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10697
10698 std::string rt = GPR(copy(rt_value));
10699 std::string c0s = CPR(copy(c0s_value));
10700 std::string sel = IMMEDIATE(copy(sel_value));
10701
10702 return img::format("MTHGC0 %s, %s, %s", rt, c0s, sel);
10703 }
10704
10705
10706 /*
10707 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10708 *
10709 * 3 2 1
10710 * 10987654321098765432109876543210
10711 * 001000 00010001101
10712 * rt -----
10713 * rs -----
10714 * rd -----
10715 */
10716 std::string NMD::MTHI_DSP_(uint64 instruction)
10717 {
10718 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10719 uint64 ac_value = extract_ac_13_12(instruction);
10720
10721 std::string rs = GPR(copy(rs_value));
10722 std::string ac = AC(copy(ac_value));
10723
10724 return img::format("MTHI %s, %s", rs, ac);
10725 }
10726
10727
10728 /*
10729 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10730 *
10731 * 3 2 1
10732 * 10987654321098765432109876543210
10733 * 001000 00010001101
10734 * rt -----
10735 * rs -----
10736 * rd -----
10737 */
10738 std::string NMD::MTHLIP(uint64 instruction)
10739 {
10740 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10741 uint64 ac_value = extract_ac_13_12(instruction);
10742
10743 std::string rs = GPR(copy(rs_value));
10744 std::string ac = AC(copy(ac_value));
10745
10746 return img::format("MTHLIP %s, %s", rs, ac);
10747 }
10748
10749
10750 /*
10751 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10752 *
10753 * 3 2 1
10754 * 10987654321098765432109876543210
10755 * 001000 00010001101
10756 * rt -----
10757 * rs -----
10758 * rd -----
10759 */
10760 std::string NMD::MTHTR(uint64 instruction)
10761 {
10762 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10763 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10764 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10765 uint64 u_value = extract_u_10(instruction);
10766
10767 std::string rt = GPR(copy(rt_value));
10768 std::string c0s = IMMEDIATE(copy(c0s_value));
10769 std::string u = IMMEDIATE(copy(u_value));
10770 std::string sel = IMMEDIATE(copy(sel_value));
10771
10772 return img::format("MTHTR %s, %s, %s, %s", rt, c0s, u, sel);
10773 }
10774
10775
10776 /*
10777 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10778 *
10779 * 3 2 1
10780 * 10987654321098765432109876543210
10781 * 001000 00010001101
10782 * rt -----
10783 * rs -----
10784 * rd -----
10785 */
10786 std::string NMD::MTLO_DSP_(uint64 instruction)
10787 {
10788 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10789 uint64 ac_value = extract_ac_13_12(instruction);
10790
10791 std::string rs = GPR(copy(rs_value));
10792 std::string ac = AC(copy(ac_value));
10793
10794 return img::format("MTLO %s, %s", rs, ac);
10795 }
10796
10797
10798 /*
10799 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10800 *
10801 * 3 2 1
10802 * 10987654321098765432109876543210
10803 * 001000 00010001101
10804 * rt -----
10805 * rs -----
10806 * rd -----
10807 */
10808 std::string NMD::MTTR(uint64 instruction)
10809 {
10810 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10811 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10812 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10813 uint64 u_value = extract_u_10(instruction);
10814
10815 std::string rt = GPR(copy(rt_value));
10816 std::string c0s = IMMEDIATE(copy(c0s_value));
10817 std::string u = IMMEDIATE(copy(u_value));
10818 std::string sel = IMMEDIATE(copy(sel_value));
10819
10820 return img::format("MTTR %s, %s, %s, %s", rt, c0s, u, sel);
10821 }
10822
10823
10824 /*
10825 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10826 *
10827 * 3 2 1
10828 * 10987654321098765432109876543210
10829 * 001000 00010001101
10830 * rt -----
10831 * rs -----
10832 * rd -----
10833 */
10834 std::string NMD::MUH(uint64 instruction)
10835 {
10836 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10837 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10838 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10839
10840 std::string rd = GPR(copy(rd_value));
10841 std::string rs = GPR(copy(rs_value));
10842 std::string rt = GPR(copy(rt_value));
10843
10844 return img::format("MUH %s, %s, %s", rd, rs, rt);
10845 }
10846
10847
10848 /*
10849 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10850 *
10851 * 3 2 1
10852 * 10987654321098765432109876543210
10853 * 001000 00010001101
10854 * rt -----
10855 * rs -----
10856 * rd -----
10857 */
10858 std::string NMD::MUHU(uint64 instruction)
10859 {
10860 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10861 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10862 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10863
10864 std::string rd = GPR(copy(rd_value));
10865 std::string rs = GPR(copy(rs_value));
10866 std::string rt = GPR(copy(rt_value));
10867
10868 return img::format("MUHU %s, %s, %s", rd, rs, rt);
10869 }
10870
10871
10872 /*
10873 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10874 *
10875 * 3 2 1
10876 * 10987654321098765432109876543210
10877 * 001000 00010001101
10878 * rt -----
10879 * rs -----
10880 * rd -----
10881 */
10882 std::string NMD::MUL_32_(uint64 instruction)
10883 {
10884 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10885 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10886 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10887
10888 std::string rd = GPR(copy(rd_value));
10889 std::string rs = GPR(copy(rs_value));
10890 std::string rt = GPR(copy(rt_value));
10891
10892 return img::format("MUL %s, %s, %s", rd, rs, rt);
10893 }
10894
10895
10896 /*
10897 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10898 *
10899 * 3 2 1
10900 * 10987654321098765432109876543210
10901 * 001000 00010001101
10902 * rt -----
10903 * rs -----
10904 * rd -----
10905 */
10906 std::string NMD::MUL_4X4_(uint64 instruction)
10907 {
10908 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10909 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10910
10911 std::string rs4 = GPR(encode_gpr4(rs4_value));
10912 std::string rt4 = GPR(encode_gpr4(rt4_value));
10913
10914 return img::format("MUL %s, %s", rs4, rt4);
10915 }
10916
10917
10918 /*
10919 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10920 *
10921 * 3 2 1
10922 * 10987654321098765432109876543210
10923 * 001000 00010001101
10924 * rt -----
10925 * rs -----
10926 * rd -----
10927 */
10928 std::string NMD::MUL_D(uint64 instruction)
10929 {
10930 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10931 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10932 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10933
10934 std::string fd = FPR(copy(fd_value));
10935 std::string fs = FPR(copy(fs_value));
10936 std::string ft = FPR(copy(ft_value));
10937
10938 return img::format("MUL.D %s, %s, %s", fd, fs, ft);
10939 }
10940
10941
10942 /*
10943 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10944 *
10945 * 3 2 1
10946 * 10987654321098765432109876543210
10947 * 001000 00010001101
10948 * rt -----
10949 * rs -----
10950 * rd -----
10951 */
10952 std::string NMD::MUL_PH(uint64 instruction)
10953 {
10954 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10955 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10956 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10957
10958 std::string rd = GPR(copy(rd_value));
10959 std::string rs = GPR(copy(rs_value));
10960 std::string rt = GPR(copy(rt_value));
10961
10962 return img::format("MUL.PH %s, %s, %s", rd, rs, rt);
10963 }
10964
10965
10966 /*
10967 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10968 *
10969 * 3 2 1
10970 * 10987654321098765432109876543210
10971 * 001000 00010001101
10972 * rt -----
10973 * rs -----
10974 * rd -----
10975 */
10976 std::string NMD::MUL_S_PH(uint64 instruction)
10977 {
10978 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10979 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10980 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10981
10982 std::string rd = GPR(copy(rd_value));
10983 std::string rs = GPR(copy(rs_value));
10984 std::string rt = GPR(copy(rt_value));
10985
10986 return img::format("MUL_S.PH %s, %s, %s", rd, rs, rt);
10987 }
10988
10989
10990 /*
10991 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10992 *
10993 * 3 2 1
10994 * 10987654321098765432109876543210
10995 * 001000 00010001101
10996 * rt -----
10997 * rs -----
10998 * rd -----
10999 */
11000 std::string NMD::MUL_S(uint64 instruction)
11001 {
11002 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11003 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11004 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
11005
11006 std::string fd = FPR(copy(fd_value));
11007 std::string fs = FPR(copy(fs_value));
11008 std::string ft = FPR(copy(ft_value));
11009
11010 return img::format("MUL.S %s, %s, %s", fd, fs, ft);
11011 }
11012
11013
11014 /*
11015 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11016 *
11017 * 3 2 1
11018 * 10987654321098765432109876543210
11019 * 001000 00010001101
11020 * rt -----
11021 * rs -----
11022 * rd -----
11023 */
11024 std::string NMD::MULEQ_S_W_PHL(uint64 instruction)
11025 {
11026 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11027 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11028 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11029
11030 std::string rd = GPR(copy(rd_value));
11031 std::string rs = GPR(copy(rs_value));
11032 std::string rt = GPR(copy(rt_value));
11033
11034 return img::format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt);
11035 }
11036
11037
11038 /*
11039 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11040 *
11041 * 3 2 1
11042 * 10987654321098765432109876543210
11043 * 001000 00010001101
11044 * rt -----
11045 * rs -----
11046 * rd -----
11047 */
11048 std::string NMD::MULEQ_S_W_PHR(uint64 instruction)
11049 {
11050 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11051 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11052 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11053
11054 std::string rd = GPR(copy(rd_value));
11055 std::string rs = GPR(copy(rs_value));
11056 std::string rt = GPR(copy(rt_value));
11057
11058 return img::format("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt);
11059 }
11060
11061
11062 /*
11063 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11064 *
11065 * 3 2 1
11066 * 10987654321098765432109876543210
11067 * 001000 00010001101
11068 * rt -----
11069 * rs -----
11070 * rd -----
11071 */
11072 std::string NMD::MULEU_S_PH_QBL(uint64 instruction)
11073 {
11074 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11075 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11076 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11077
11078 std::string rd = GPR(copy(rd_value));
11079 std::string rs = GPR(copy(rs_value));
11080 std::string rt = GPR(copy(rt_value));
11081
11082 return img::format("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt);
11083 }
11084
11085
11086 /*
11087 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11088 *
11089 * 3 2 1
11090 * 10987654321098765432109876543210
11091 * 001000 00010001101
11092 * rt -----
11093 * rs -----
11094 * rd -----
11095 */
11096 std::string NMD::MULEU_S_PH_QBR(uint64 instruction)
11097 {
11098 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11099 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11100 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11101
11102 std::string rd = GPR(copy(rd_value));
11103 std::string rs = GPR(copy(rs_value));
11104 std::string rt = GPR(copy(rt_value));
11105
11106 return img::format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt);
11107 }
11108
11109
11110 /*
11111 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11112 *
11113 * 3 2 1
11114 * 10987654321098765432109876543210
11115 * 001000 00010001101
11116 * rt -----
11117 * rs -----
11118 * rd -----
11119 */
11120 std::string NMD::MULQ_RS_PH(uint64 instruction)
11121 {
11122 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11123 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11124 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11125
11126 std::string rd = GPR(copy(rd_value));
11127 std::string rs = GPR(copy(rs_value));
11128 std::string rt = GPR(copy(rt_value));
11129
11130 return img::format("MULQ_RS.PH %s, %s, %s", rd, rs, rt);
11131 }
11132
11133
11134 /*
11135 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11136 *
11137 * 3 2 1
11138 * 10987654321098765432109876543210
11139 * 001000 00010001101
11140 * rt -----
11141 * rs -----
11142 * rd -----
11143 */
11144 std::string NMD::MULQ_RS_W(uint64 instruction)
11145 {
11146 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11147 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11148 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11149
11150 std::string rd = GPR(copy(rd_value));
11151 std::string rs = GPR(copy(rs_value));
11152 std::string rt = GPR(copy(rt_value));
11153
11154 return img::format("MULQ_RS.W %s, %s, %s", rd, rs, rt);
11155 }
11156
11157
11158 /*
11159 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11160 *
11161 * 3 2 1
11162 * 10987654321098765432109876543210
11163 * 001000 00010001101
11164 * rt -----
11165 * rs -----
11166 * rd -----
11167 */
11168 std::string NMD::MULQ_S_PH(uint64 instruction)
11169 {
11170 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11171 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11172 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11173
11174 std::string rd = GPR(copy(rd_value));
11175 std::string rs = GPR(copy(rs_value));
11176 std::string rt = GPR(copy(rt_value));
11177
11178 return img::format("MULQ_S.PH %s, %s, %s", rd, rs, rt);
11179 }
11180
11181
11182 /*
11183 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11184 *
11185 * 3 2 1
11186 * 10987654321098765432109876543210
11187 * 001000 00010001101
11188 * rt -----
11189 * rs -----
11190 * rd -----
11191 */
11192 std::string NMD::MULQ_S_W(uint64 instruction)
11193 {
11194 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11195 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11196 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11197
11198 std::string rd = GPR(copy(rd_value));
11199 std::string rs = GPR(copy(rs_value));
11200 std::string rt = GPR(copy(rt_value));
11201
11202 return img::format("MULQ_S.W %s, %s, %s", rd, rs, rt);
11203 }
11204
11205
11206 /*
11207 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11208 *
11209 * 3 2 1
11210 * 10987654321098765432109876543210
11211 * 001000 00010001101
11212 * rt -----
11213 * rs -----
11214 * rd -----
11215 */
11216 std::string NMD::MULSA_W_PH(uint64 instruction)
11217 {
11218 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11219 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11220 uint64 ac_value = extract_ac_13_12(instruction);
11221
11222 std::string ac = AC(copy(ac_value));
11223 std::string rs = GPR(copy(rs_value));
11224 std::string rt = GPR(copy(rt_value));
11225
11226 return img::format("MULSA.W.PH %s, %s, %s", ac, rs, rt);
11227 }
11228
11229
11230 /*
11231 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11232 *
11233 * 3 2 1
11234 * 10987654321098765432109876543210
11235 * 001000 00010001101
11236 * rt -----
11237 * rs -----
11238 * rd -----
11239 */
11240 std::string NMD::MULSAQ_S_W_PH(uint64 instruction)
11241 {
11242 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11243 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11244 uint64 ac_value = extract_ac_13_12(instruction);
11245
11246 std::string ac = AC(copy(ac_value));
11247 std::string rs = GPR(copy(rs_value));
11248 std::string rt = GPR(copy(rt_value));
11249
11250 return img::format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt);
11251 }
11252
11253
11254 /*
11255 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11256 *
11257 * 3 2 1
11258 * 10987654321098765432109876543210
11259 * 001000 00010001101
11260 * rt -----
11261 * rs -----
11262 * rd -----
11263 */
11264 std::string NMD::MULT_DSP_(uint64 instruction)
11265 {
11266 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11267 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11268 uint64 ac_value = extract_ac_13_12(instruction);
11269
11270 std::string ac = AC(copy(ac_value));
11271 std::string rs = GPR(copy(rs_value));
11272 std::string rt = GPR(copy(rt_value));
11273
11274 return img::format("MULT %s, %s, %s", ac, rs, rt);
11275 }
11276
11277
11278 /*
11279 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11280 *
11281 * 3 2 1
11282 * 10987654321098765432109876543210
11283 * 001000 00010001101
11284 * rt -----
11285 * rs -----
11286 * rd -----
11287 */
11288 std::string NMD::MULTU_DSP_(uint64 instruction)
11289 {
11290 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11291 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11292 uint64 ac_value = extract_ac_13_12(instruction);
11293
11294 std::string ac = AC(copy(ac_value));
11295 std::string rs = GPR(copy(rs_value));
11296 std::string rt = GPR(copy(rt_value));
11297
11298 return img::format("MULTU %s, %s, %s", ac, rs, rt);
11299 }
11300
11301
11302 /*
11303 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11304 *
11305 * 3 2 1
11306 * 10987654321098765432109876543210
11307 * 001000 00010001101
11308 * rt -----
11309 * rs -----
11310 * rd -----
11311 */
11312 std::string NMD::MULU(uint64 instruction)
11313 {
11314 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11315 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11316 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11317
11318 std::string rd = GPR(copy(rd_value));
11319 std::string rs = GPR(copy(rs_value));
11320 std::string rt = GPR(copy(rt_value));
11321
11322 return img::format("MULU %s, %s, %s", rd, rs, rt);
11323 }
11324
11325
11326 /*
11327 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11328 *
11329 * 3 2 1
11330 * 10987654321098765432109876543210
11331 * 001000 00010001101
11332 * rt -----
11333 * rs -----
11334 * rd -----
11335 */
11336 std::string NMD::NEG_D(uint64 instruction)
11337 {
11338 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11339 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11340
11341 std::string ft = FPR(copy(ft_value));
11342 std::string fs = FPR(copy(fs_value));
11343
11344 return img::format("NEG.D %s, %s", ft, fs);
11345 }
11346
11347
11348 /*
11349 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11350 *
11351 * 3 2 1
11352 * 10987654321098765432109876543210
11353 * 001000 00010001101
11354 * rt -----
11355 * rs -----
11356 * rd -----
11357 */
11358 std::string NMD::NEG_S(uint64 instruction)
11359 {
11360 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11361 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11362
11363 std::string ft = FPR(copy(ft_value));
11364 std::string fs = FPR(copy(fs_value));
11365
11366 return img::format("NEG.S %s, %s", ft, fs);
11367 }
11368
11369
11370 /*
11371 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11372 *
11373 * 3 2 1
11374 * 10987654321098765432109876543210
11375 * 001000 00010001101
11376 * rt -----
11377 * rs -----
11378 * rd -----
11379 */
11380 std::string NMD::NOP_16_(uint64 instruction)
11381 {
11382 (void)instruction;
11383
11384 return "NOP ";
11385 }
11386
11387
11388 /*
11389 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11390 *
11391 * 3 2 1
11392 * 10987654321098765432109876543210
11393 * 001000 00010001101
11394 * rt -----
11395 * rs -----
11396 * rd -----
11397 */
11398 std::string NMD::NOP_32_(uint64 instruction)
11399 {
11400 (void)instruction;
11401
11402 return "NOP ";
11403 }
11404
11405
11406 /*
11407 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11408 *
11409 * 3 2 1
11410 * 10987654321098765432109876543210
11411 * 001000 00010001101
11412 * rt -----
11413 * rs -----
11414 * rd -----
11415 */
11416 std::string NMD::NOR(uint64 instruction)
11417 {
11418 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11419 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11420 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11421
11422 std::string rd = GPR(copy(rd_value));
11423 std::string rs = GPR(copy(rs_value));
11424 std::string rt = GPR(copy(rt_value));
11425
11426 return img::format("NOR %s, %s, %s", rd, rs, rt);
11427 }
11428
11429
11430 /*
11431 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11432 *
11433 * 3 2 1
11434 * 10987654321098765432109876543210
11435 * 001000 00010001101
11436 * rt -----
11437 * rs -----
11438 * rd -----
11439 */
11440 std::string NMD::NOT_16_(uint64 instruction)
11441 {
11442 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11443 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11444
11445 std::string rt3 = GPR(encode_gpr3(rt3_value));
11446 std::string rs3 = GPR(encode_gpr3(rs3_value));
11447
11448 return img::format("NOT %s, %s", rt3, rs3);
11449 }
11450
11451
11452 /*
11453 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11454 *
11455 * 3 2 1
11456 * 10987654321098765432109876543210
11457 * 001000 00010001101
11458 * rt -----
11459 * rs -----
11460 * rd -----
11461 */
11462 std::string NMD::OR_16_(uint64 instruction)
11463 {
11464 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11465 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11466
11467 std::string rs3 = GPR(encode_gpr3(rs3_value));
11468 std::string rt3 = GPR(encode_gpr3(rt3_value));
11469
11470 return img::format("OR %s, %s", rs3, rt3);
11471 }
11472
11473
11474 /*
11475 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11476 *
11477 * 3 2 1
11478 * 10987654321098765432109876543210
11479 * 001000 00010001101
11480 * rt -----
11481 * rs -----
11482 * rd -----
11483 */
11484 std::string NMD::OR_32_(uint64 instruction)
11485 {
11486 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11487 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11488 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11489
11490 std::string rd = GPR(copy(rd_value));
11491 std::string rs = GPR(copy(rs_value));
11492 std::string rt = GPR(copy(rt_value));
11493
11494 return img::format("OR %s, %s, %s", rd, rs, rt);
11495 }
11496
11497
11498 /*
11499 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11500 *
11501 * 3 2 1
11502 * 10987654321098765432109876543210
11503 * 001000 00010001101
11504 * rt -----
11505 * rs -----
11506 * rd -----
11507 */
11508 std::string NMD::ORI(uint64 instruction)
11509 {
11510 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11511 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11512 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11513
11514 std::string rt = GPR(copy(rt_value));
11515 std::string rs = GPR(copy(rs_value));
11516 std::string u = IMMEDIATE(copy(u_value));
11517
11518 return img::format("ORI %s, %s, %s", rt, rs, u);
11519 }
11520
11521
11522 /*
11523 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11524 *
11525 * 3 2 1
11526 * 10987654321098765432109876543210
11527 * 001000 00010001101
11528 * rt -----
11529 * rs -----
11530 * rd -----
11531 */
11532 std::string NMD::PACKRL_PH(uint64 instruction)
11533 {
11534 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11535 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11536 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11537
11538 std::string rd = GPR(copy(rd_value));
11539 std::string rs = GPR(copy(rs_value));
11540 std::string rt = GPR(copy(rt_value));
11541
11542 return img::format("PACKRL.PH %s, %s, %s", rd, rs, rt);
11543 }
11544
11545
11546 /*
11547 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11548 *
11549 * 3 2 1
11550 * 10987654321098765432109876543210
11551 * 001000 00010001101
11552 * rt -----
11553 * rs -----
11554 * rd -----
11555 */
11556 std::string NMD::PAUSE(uint64 instruction)
11557 {
11558 (void)instruction;
11559
11560 return "PAUSE ";
11561 }
11562
11563
11564 /*
11565 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11566 *
11567 * 3 2 1
11568 * 10987654321098765432109876543210
11569 * 001000 00010001101
11570 * rt -----
11571 * rs -----
11572 * rd -----
11573 */
11574 std::string NMD::PICK_PH(uint64 instruction)
11575 {
11576 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11577 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11578 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11579
11580 std::string rd = GPR(copy(rd_value));
11581 std::string rs = GPR(copy(rs_value));
11582 std::string rt = GPR(copy(rt_value));
11583
11584 return img::format("PICK.PH %s, %s, %s", rd, rs, rt);
11585 }
11586
11587
11588 /*
11589 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11590 *
11591 * 3 2 1
11592 * 10987654321098765432109876543210
11593 * 001000 00010001101
11594 * rt -----
11595 * rs -----
11596 * rd -----
11597 */
11598 std::string NMD::PICK_QB(uint64 instruction)
11599 {
11600 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11602 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11603
11604 std::string rd = GPR(copy(rd_value));
11605 std::string rs = GPR(copy(rs_value));
11606 std::string rt = GPR(copy(rt_value));
11607
11608 return img::format("PICK.QB %s, %s, %s", rd, rs, rt);
11609 }
11610
11611
11612 /*
11613 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11614 *
11615 * 3 2 1
11616 * 10987654321098765432109876543210
11617 * 001000 00010001101
11618 * rt -----
11619 * rs -----
11620 * rd -----
11621 */
11622 std::string NMD::PRECEQ_W_PHL(uint64 instruction)
11623 {
11624 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11625 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11626
11627 std::string rt = GPR(copy(rt_value));
11628 std::string rs = GPR(copy(rs_value));
11629
11630 return img::format("PRECEQ.W.PHL %s, %s", rt, rs);
11631 }
11632
11633
11634 /*
11635 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11636 *
11637 * 3 2 1
11638 * 10987654321098765432109876543210
11639 * 001000 00010001101
11640 * rt -----
11641 * rs -----
11642 * rd -----
11643 */
11644 std::string NMD::PRECEQ_W_PHR(uint64 instruction)
11645 {
11646 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11647 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11648
11649 std::string rt = GPR(copy(rt_value));
11650 std::string rs = GPR(copy(rs_value));
11651
11652 return img::format("PRECEQ.W.PHR %s, %s", rt, rs);
11653 }
11654
11655
11656 /*
11657 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11658 *
11659 * 3 2 1
11660 * 10987654321098765432109876543210
11661 * 001000 00010001101
11662 * rt -----
11663 * rs -----
11664 * rd -----
11665 */
11666 std::string NMD::PRECEQU_PH_QBLA(uint64 instruction)
11667 {
11668 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11669 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11670
11671 std::string rt = GPR(copy(rt_value));
11672 std::string rs = GPR(copy(rs_value));
11673
11674 return img::format("PRECEQU.PH.QBLA %s, %s", rt, rs);
11675 }
11676
11677
11678 /*
11679 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11680 *
11681 * 3 2 1
11682 * 10987654321098765432109876543210
11683 * 001000 00010001101
11684 * rt -----
11685 * rs -----
11686 * rd -----
11687 */
11688 std::string NMD::PRECEQU_PH_QBL(uint64 instruction)
11689 {
11690 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11691 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11692
11693 std::string rt = GPR(copy(rt_value));
11694 std::string rs = GPR(copy(rs_value));
11695
11696 return img::format("PRECEQU.PH.QBL %s, %s", rt, rs);
11697 }
11698
11699
11700 /*
11701 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11702 *
11703 * 3 2 1
11704 * 10987654321098765432109876543210
11705 * 001000 00010001101
11706 * rt -----
11707 * rs -----
11708 * rd -----
11709 */
11710 std::string NMD::PRECEQU_PH_QBRA(uint64 instruction)
11711 {
11712 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11713 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11714
11715 std::string rt = GPR(copy(rt_value));
11716 std::string rs = GPR(copy(rs_value));
11717
11718 return img::format("PRECEQU.PH.QBRA %s, %s", rt, rs);
11719 }
11720
11721
11722 /*
11723 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11724 *
11725 * 3 2 1
11726 * 10987654321098765432109876543210
11727 * 001000 00010001101
11728 * rt -----
11729 * rs -----
11730 * rd -----
11731 */
11732 std::string NMD::PRECEQU_PH_QBR(uint64 instruction)
11733 {
11734 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11735 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11736
11737 std::string rt = GPR(copy(rt_value));
11738 std::string rs = GPR(copy(rs_value));
11739
11740 return img::format("PRECEQU.PH.QBR %s, %s", rt, rs);
11741 }
11742
11743
11744 /*
11745 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11746 *
11747 * 3 2 1
11748 * 10987654321098765432109876543210
11749 * 001000 00010001101
11750 * rt -----
11751 * rs -----
11752 * rd -----
11753 */
11754 std::string NMD::PRECEU_PH_QBLA(uint64 instruction)
11755 {
11756 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11757 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11758
11759 std::string rt = GPR(copy(rt_value));
11760 std::string rs = GPR(copy(rs_value));
11761
11762 return img::format("PRECEU.PH.QBLA %s, %s", rt, rs);
11763 }
11764
11765
11766 /*
11767 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11768 *
11769 * 3 2 1
11770 * 10987654321098765432109876543210
11771 * 001000 00010001101
11772 * rt -----
11773 * rs -----
11774 * rd -----
11775 */
11776 std::string NMD::PRECEU_PH_QBL(uint64 instruction)
11777 {
11778 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11779 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11780
11781 std::string rt = GPR(copy(rt_value));
11782 std::string rs = GPR(copy(rs_value));
11783
11784 return img::format("PRECEU.PH.QBL %s, %s", rt, rs);
11785 }
11786
11787
11788 /*
11789 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11790 *
11791 * 3 2 1
11792 * 10987654321098765432109876543210
11793 * 001000 00010001101
11794 * rt -----
11795 * rs -----
11796 * rd -----
11797 */
11798 std::string NMD::PRECEU_PH_QBRA(uint64 instruction)
11799 {
11800 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11801 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11802
11803 std::string rt = GPR(copy(rt_value));
11804 std::string rs = GPR(copy(rs_value));
11805
11806 return img::format("PRECEU.PH.QBRA %s, %s", rt, rs);
11807 }
11808
11809
11810 /*
11811 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11812 *
11813 * 3 2 1
11814 * 10987654321098765432109876543210
11815 * 001000 00010001101
11816 * rt -----
11817 * rs -----
11818 * rd -----
11819 */
11820 std::string NMD::PRECEU_PH_QBR(uint64 instruction)
11821 {
11822 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11823 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11824
11825 std::string rt = GPR(copy(rt_value));
11826 std::string rs = GPR(copy(rs_value));
11827
11828 return img::format("PRECEU.PH.QBR %s, %s", rt, rs);
11829 }
11830
11831
11832 /*
11833 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11834 *
11835 * 3 2 1
11836 * 10987654321098765432109876543210
11837 * 001000 00010001101
11838 * rt -----
11839 * rs -----
11840 * rd -----
11841 */
11842 std::string NMD::PRECR_QB_PH(uint64 instruction)
11843 {
11844 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11845 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11846 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11847
11848 std::string rd = GPR(copy(rd_value));
11849 std::string rs = GPR(copy(rs_value));
11850 std::string rt = GPR(copy(rt_value));
11851
11852 return img::format("PRECR.QB.PH %s, %s, %s", rd, rs, rt);
11853 }
11854
11855
11856 /*
11857 *
11858 *
11859 * 3 2 1
11860 * 10987654321098765432109876543210
11861 * 001000 x1110000101
11862 * rt -----
11863 * rs -----
11864 * rd -----
11865 */
11866 std::string NMD::PRECR_SRA_PH_W(uint64 instruction)
11867 {
11868 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11869 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11870 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11871
11872 std::string rt = GPR(copy(rt_value));
11873 std::string rs = GPR(copy(rs_value));
11874 std::string sa = IMMEDIATE(copy(sa_value));
11875
11876 return img::format("PRECR_SRA.PH.W %s, %s, %s", rt, rs, sa);
11877 }
11878
11879
11880 /*
11881 *
11882 *
11883 * 3 2 1
11884 * 10987654321098765432109876543210
11885 * 001000 x1110000101
11886 * rt -----
11887 * rs -----
11888 * rd -----
11889 */
11890 std::string NMD::PRECR_SRA_R_PH_W(uint64 instruction)
11891 {
11892 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11893 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11894 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11895
11896 std::string rt = GPR(copy(rt_value));
11897 std::string rs = GPR(copy(rs_value));
11898 std::string sa = IMMEDIATE(copy(sa_value));
11899
11900 return img::format("PRECR_SRA_R.PH.W %s, %s, %s", rt, rs, sa);
11901 }
11902
11903
11904 /*
11905 *
11906 *
11907 * 3 2 1
11908 * 10987654321098765432109876543210
11909 * 001000 x1110000101
11910 * rt -----
11911 * rs -----
11912 * rd -----
11913 */
11914 std::string NMD::PRECRQ_PH_W(uint64 instruction)
11915 {
11916 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11917 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11918 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11919
11920 std::string rd = GPR(copy(rd_value));
11921 std::string rs = GPR(copy(rs_value));
11922 std::string rt = GPR(copy(rt_value));
11923
11924 return img::format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt);
11925 }
11926
11927
11928 /*
11929 *
11930 *
11931 * 3 2 1
11932 * 10987654321098765432109876543210
11933 * 001000 x1110000101
11934 * rt -----
11935 * rs -----
11936 * rd -----
11937 */
11938 std::string NMD::PRECRQ_QB_PH(uint64 instruction)
11939 {
11940 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11941 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11942 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11943
11944 std::string rd = GPR(copy(rd_value));
11945 std::string rs = GPR(copy(rs_value));
11946 std::string rt = GPR(copy(rt_value));
11947
11948 return img::format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt);
11949 }
11950
11951
11952 /*
11953 *
11954 *
11955 * 3 2 1
11956 * 10987654321098765432109876543210
11957 * 001000 x1110000101
11958 * rt -----
11959 * rs -----
11960 * rd -----
11961 */
11962 std::string NMD::PRECRQ_RS_PH_W(uint64 instruction)
11963 {
11964 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11965 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11966 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11967
11968 std::string rd = GPR(copy(rd_value));
11969 std::string rs = GPR(copy(rs_value));
11970 std::string rt = GPR(copy(rt_value));
11971
11972 return img::format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt);
11973 }
11974
11975
11976 /*
11977 *
11978 *
11979 * 3 2 1
11980 * 10987654321098765432109876543210
11981 * 001000 x1110000101
11982 * rt -----
11983 * rs -----
11984 * rd -----
11985 */
11986 std::string NMD::PRECRQU_S_QB_PH(uint64 instruction)
11987 {
11988 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11989 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11990 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11991
11992 std::string rd = GPR(copy(rd_value));
11993 std::string rs = GPR(copy(rs_value));
11994 std::string rt = GPR(copy(rt_value));
11995
11996 return img::format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt);
11997 }
11998
11999
12000 /*
12001 *
12002 *
12003 * 3 2 1
12004 * 10987654321098765432109876543210
12005 * 001000 x1110000101
12006 * rt -----
12007 * rs -----
12008 * rd -----
12009 */
12010 std::string NMD::PREF_S9_(uint64 instruction)
12011 {
12012 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12013 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12014 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12015
12016 std::string hint = IMMEDIATE(copy(hint_value));
12017 std::string s = IMMEDIATE(copy(s_value));
12018 std::string rs = GPR(copy(rs_value));
12019
12020 return img::format("PREF %s, %s(%s)", hint, s, rs);
12021 }
12022
12023
12024 /*
12025 *
12026 *
12027 * 3 2 1
12028 * 10987654321098765432109876543210
12029 * 001000 x1110000101
12030 * rt -----
12031 * rs -----
12032 * rd -----
12033 */
12034 std::string NMD::PREF_U12_(uint64 instruction)
12035 {
12036 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12037 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12038 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12039
12040 std::string hint = IMMEDIATE(copy(hint_value));
12041 std::string u = IMMEDIATE(copy(u_value));
12042 std::string rs = GPR(copy(rs_value));
12043
12044 return img::format("PREF %s, %s(%s)", hint, u, rs);
12045 }
12046
12047
12048 /*
12049 *
12050 *
12051 * 3 2 1
12052 * 10987654321098765432109876543210
12053 * 001000 x1110000101
12054 * rt -----
12055 * rs -----
12056 * rd -----
12057 */
12058 std::string NMD::PREFE(uint64 instruction)
12059 {
12060 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12061 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12062 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12063
12064 std::string hint = IMMEDIATE(copy(hint_value));
12065 std::string s = IMMEDIATE(copy(s_value));
12066 std::string rs = GPR(copy(rs_value));
12067
12068 return img::format("PREFE %s, %s(%s)", hint, s, rs);
12069 }
12070
12071
12072 /*
12073 *
12074 *
12075 * 3 2 1
12076 * 10987654321098765432109876543210
12077 * 001000 x1110000101
12078 * rt -----
12079 * rs -----
12080 * rd -----
12081 */
12082 std::string NMD::PREPEND(uint64 instruction)
12083 {
12084 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12085 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12086 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12087
12088 std::string rt = GPR(copy(rt_value));
12089 std::string rs = GPR(copy(rs_value));
12090 std::string sa = IMMEDIATE(copy(sa_value));
12091
12092 return img::format("PREPEND %s, %s, %s", rt, rs, sa);
12093 }
12094
12095
12096 /*
12097 *
12098 *
12099 * 3 2 1
12100 * 10987654321098765432109876543210
12101 * 001000 x1110000101
12102 * rt -----
12103 * rs -----
12104 * rd -----
12105 */
12106 std::string NMD::RADDU_W_QB(uint64 instruction)
12107 {
12108 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12109 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12110
12111 std::string rt = GPR(copy(rt_value));
12112 std::string rs = GPR(copy(rs_value));
12113
12114 return img::format("RADDU.W.QB %s, %s", rt, rs);
12115 }
12116
12117
12118 /*
12119 *
12120 *
12121 * 3 2 1
12122 * 10987654321098765432109876543210
12123 * 001000 x1110000101
12124 * rt -----
12125 * rs -----
12126 * rd -----
12127 */
12128 std::string NMD::RDDSP(uint64 instruction)
12129 {
12130 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12131 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
12132
12133 std::string rt = GPR(copy(rt_value));
12134 std::string mask = IMMEDIATE(copy(mask_value));
12135
12136 return img::format("RDDSP %s, %s", rt, mask);
12137 }
12138
12139
12140 /*
12141 *
12142 *
12143 * 3 2 1
12144 * 10987654321098765432109876543210
12145 * 001000 x1110000101
12146 * rt -----
12147 * rs -----
12148 * rd -----
12149 */
12150 std::string NMD::RDHWR(uint64 instruction)
12151 {
12152 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12153 uint64 hs_value = extract_hs_20_19_18_17_16(instruction);
12154 uint64 sel_value = extract_sel_13_12_11(instruction);
12155
12156 std::string rt = GPR(copy(rt_value));
12157 std::string hs = CPR(copy(hs_value));
12158 std::string sel = IMMEDIATE(copy(sel_value));
12159
12160 return img::format("RDHWR %s, %s, %s", rt, hs, sel);
12161 }
12162
12163
12164 /*
12165 *
12166 *
12167 * 3 2 1
12168 * 10987654321098765432109876543210
12169 * 001000 x1110000101
12170 * rt -----
12171 * rs -----
12172 * rd -----
12173 */
12174 std::string NMD::RDPGPR(uint64 instruction)
12175 {
12176 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12177 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12178
12179 std::string rt = GPR(copy(rt_value));
12180 std::string rs = GPR(copy(rs_value));
12181
12182 return img::format("RDPGPR %s, %s", rt, rs);
12183 }
12184
12185
12186 /*
12187 *
12188 *
12189 * 3 2 1
12190 * 10987654321098765432109876543210
12191 * 001000 x1110000101
12192 * rt -----
12193 * rs -----
12194 * rd -----
12195 */
12196 std::string NMD::RECIP_D(uint64 instruction)
12197 {
12198 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12199 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12200
12201 std::string ft = FPR(copy(ft_value));
12202 std::string fs = FPR(copy(fs_value));
12203
12204 return img::format("RECIP.D %s, %s", ft, fs);
12205 }
12206
12207
12208 /*
12209 *
12210 *
12211 * 3 2 1
12212 * 10987654321098765432109876543210
12213 * 001000 x1110000101
12214 * rt -----
12215 * rs -----
12216 * rd -----
12217 */
12218 std::string NMD::RECIP_S(uint64 instruction)
12219 {
12220 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12221 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12222
12223 std::string ft = FPR(copy(ft_value));
12224 std::string fs = FPR(copy(fs_value));
12225
12226 return img::format("RECIP.S %s, %s", ft, fs);
12227 }
12228
12229
12230 /*
12231 *
12232 *
12233 * 3 2 1
12234 * 10987654321098765432109876543210
12235 * 001000 x1110000101
12236 * rt -----
12237 * rs -----
12238 * rd -----
12239 */
12240 std::string NMD::REPL_PH(uint64 instruction)
12241 {
12242 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12243 int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);
12244
12245 std::string rt = GPR(copy(rt_value));
12246 std::string s = IMMEDIATE(copy(s_value));
12247
12248 return img::format("REPL.PH %s, %s", rt, s);
12249 }
12250
12251
12252 /*
12253 *
12254 *
12255 * 3 2 1
12256 * 10987654321098765432109876543210
12257 * 001000 x1110000101
12258 * rt -----
12259 * rs -----
12260 * rd -----
12261 */
12262 std::string NMD::REPL_QB(uint64 instruction)
12263 {
12264 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12265 uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction);
12266
12267 std::string rt = GPR(copy(rt_value));
12268 std::string u = IMMEDIATE(copy(u_value));
12269
12270 return img::format("REPL.QB %s, %s", rt, u);
12271 }
12272
12273
12274 /*
12275 *
12276 *
12277 * 3 2 1
12278 * 10987654321098765432109876543210
12279 * 001000 x1110000101
12280 * rt -----
12281 * rs -----
12282 * rd -----
12283 */
12284 std::string NMD::REPLV_PH(uint64 instruction)
12285 {
12286 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12287 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12288
12289 std::string rt = GPR(copy(rt_value));
12290 std::string rs = GPR(copy(rs_value));
12291
12292 return img::format("REPLV.PH %s, %s", rt, rs);
12293 }
12294
12295
12296 /*
12297 *
12298 *
12299 * 3 2 1
12300 * 10987654321098765432109876543210
12301 * 001000 x1110000101
12302 * rt -----
12303 * rs -----
12304 * rd -----
12305 */
12306 std::string NMD::REPLV_QB(uint64 instruction)
12307 {
12308 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12309 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12310
12311 std::string rt = GPR(copy(rt_value));
12312 std::string rs = GPR(copy(rs_value));
12313
12314 return img::format("REPLV.QB %s, %s", rt, rs);
12315 }
12316
12317
12318 /*
12319 *
12320 *
12321 * 3 2 1
12322 * 10987654321098765432109876543210
12323 * 001000 x1110000101
12324 * rt -----
12325 * rs -----
12326 * rd -----
12327 */
12328 std::string NMD::RESTORE_32_(uint64 instruction)
12329 {
12330 uint64 count_value = extract_count_19_18_17_16(instruction);
12331 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12332 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12333 uint64 gp_value = extract_gp_2(instruction);
12334
12335 std::string u = IMMEDIATE(copy(u_value));
12336 return img::format("RESTORE %s%s", u,
12337 save_restore_list(rt_value, count_value, gp_value));
12338 }
12339
12340
12341 /*
12342 *
12343 *
12344 * 3 2 1
12345 * 10987654321098765432109876543210
12346 * 001000 x1110000101
12347 * rt -----
12348 * rs -----
12349 * rd -----
12350 */
12351 std::string NMD::RESTORE_JRC_16_(uint64 instruction)
12352 {
12353 uint64 count_value = extract_count_3_2_1_0(instruction);
12354 uint64 rt1_value = extract_rtl_11(instruction);
12355 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12356
12357 std::string u = IMMEDIATE(copy(u_value));
12358 return img::format("RESTORE.JRC %s%s", u,
12359 save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
12360 }
12361
12362
12363 /*
12364 *
12365 *
12366 * 3 2 1
12367 * 10987654321098765432109876543210
12368 * 001000 x1110000101
12369 * rt -----
12370 * rs -----
12371 * rd -----
12372 */
12373 std::string NMD::RESTORE_JRC_32_(uint64 instruction)
12374 {
12375 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12376 uint64 count_value = extract_count_19_18_17_16(instruction);
12377 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12378 uint64 gp_value = extract_gp_2(instruction);
12379
12380 std::string u = IMMEDIATE(copy(u_value));
12381 return img::format("RESTORE.JRC %s%s", u,
12382 save_restore_list(rt_value, count_value, gp_value));
12383 }
12384
12385
12386 /*
12387 *
12388 *
12389 * 3 2 1
12390 * 10987654321098765432109876543210
12391 * 001000 x1110000101
12392 * rt -----
12393 * rs -----
12394 * rd -----
12395 */
12396 std::string NMD::RESTOREF(uint64 instruction)
12397 {
12398 uint64 count_value = extract_count_19_18_17_16(instruction);
12399 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12400
12401 std::string u = IMMEDIATE(copy(u_value));
12402 std::string count = IMMEDIATE(copy(count_value));
12403
12404 return img::format("RESTOREF %s, %s", u, count);
12405 }
12406
12407
12408 /*
12409 *
12410 *
12411 * 3 2 1
12412 * 10987654321098765432109876543210
12413 * 001000 x1110000101
12414 * rt -----
12415 * rs -----
12416 * rd -----
12417 */
12418 std::string NMD::RINT_D(uint64 instruction)
12419 {
12420 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12421 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12422
12423 std::string ft = FPR(copy(ft_value));
12424 std::string fs = FPR(copy(fs_value));
12425
12426 return img::format("RINT.D %s, %s", ft, fs);
12427 }
12428
12429
12430 /*
12431 *
12432 *
12433 * 3 2 1
12434 * 10987654321098765432109876543210
12435 * 001000 x1110000101
12436 * rt -----
12437 * rs -----
12438 * rd -----
12439 */
12440 std::string NMD::RINT_S(uint64 instruction)
12441 {
12442 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12443 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12444
12445 std::string ft = FPR(copy(ft_value));
12446 std::string fs = FPR(copy(fs_value));
12447
12448 return img::format("RINT.S %s, %s", ft, fs);
12449 }
12450
12451
12452 /*
12453 *
12454 *
12455 * 3 2 1
12456 * 10987654321098765432109876543210
12457 * 001000 x1110000101
12458 * rt -----
12459 * rs -----
12460 * rd -----
12461 */
12462 std::string NMD::ROTR(uint64 instruction)
12463 {
12464 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12465 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12466 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12467
12468 std::string rt = GPR(copy(rt_value));
12469 std::string rs = GPR(copy(rs_value));
12470 std::string shift = IMMEDIATE(copy(shift_value));
12471
12472 return img::format("ROTR %s, %s, %s", rt, rs, shift);
12473 }
12474
12475
12476 /*
12477 *
12478 *
12479 * 3 2 1
12480 * 10987654321098765432109876543210
12481 * 001000 x1110000101
12482 * rt -----
12483 * rs -----
12484 * rd -----
12485 */
12486 std::string NMD::ROTRV(uint64 instruction)
12487 {
12488 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12489 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12490 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12491
12492 std::string rd = GPR(copy(rd_value));
12493 std::string rs = GPR(copy(rs_value));
12494 std::string rt = GPR(copy(rt_value));
12495
12496 return img::format("ROTRV %s, %s, %s", rd, rs, rt);
12497 }
12498
12499
12500 /*
12501 *
12502 *
12503 * 3 2 1
12504 * 10987654321098765432109876543210
12505 * 001000 x1110000101
12506 * rt -----
12507 * rs -----
12508 * rd -----
12509 */
12510 std::string NMD::ROTX(uint64 instruction)
12511 {
12512 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12513 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12514 uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
12515 uint64 stripe_value = extract_stripe_6(instruction);
12516 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12517
12518 std::string rt = GPR(copy(rt_value));
12519 std::string rs = GPR(copy(rs_value));
12520 std::string shift = IMMEDIATE(copy(shift_value));
12521 std::string shiftx = IMMEDIATE(copy(shiftx_value));
12522 std::string stripe = IMMEDIATE(copy(stripe_value));
12523
12524 return img::format("ROTX %s, %s, %s, %s, %s",
12525 rt, rs, shift, shiftx, stripe);
12526 }
12527
12528
12529 /*
12530 *
12531 *
12532 * 3 2 1
12533 * 10987654321098765432109876543210
12534 * 001000 x1110000101
12535 * rt -----
12536 * rs -----
12537 * rd -----
12538 */
12539 std::string NMD::ROUND_L_D(uint64 instruction)
12540 {
12541 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12542 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12543
12544 std::string ft = FPR(copy(ft_value));
12545 std::string fs = FPR(copy(fs_value));
12546
12547 return img::format("ROUND.L.D %s, %s", ft, fs);
12548 }
12549
12550
12551 /*
12552 *
12553 *
12554 * 3 2 1
12555 * 10987654321098765432109876543210
12556 * 001000 x1110000101
12557 * rt -----
12558 * rs -----
12559 * rd -----
12560 */
12561 std::string NMD::ROUND_L_S(uint64 instruction)
12562 {
12563 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12564 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12565
12566 std::string ft = FPR(copy(ft_value));
12567 std::string fs = FPR(copy(fs_value));
12568
12569 return img::format("ROUND.L.S %s, %s", ft, fs);
12570 }
12571
12572
12573 /*
12574 *
12575 *
12576 * 3 2 1
12577 * 10987654321098765432109876543210
12578 * 001000 x1110000101
12579 * rt -----
12580 * rs -----
12581 * rd -----
12582 */
12583 std::string NMD::ROUND_W_D(uint64 instruction)
12584 {
12585 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12586 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12587
12588 std::string ft = FPR(copy(ft_value));
12589 std::string fs = FPR(copy(fs_value));
12590
12591 return img::format("ROUND.W.D %s, %s", ft, fs);
12592 }
12593
12594
12595 /*
12596 *
12597 *
12598 * 3 2 1
12599 * 10987654321098765432109876543210
12600 * 001000 x1110000101
12601 * rt -----
12602 * rs -----
12603 * rd -----
12604 */
12605 std::string NMD::ROUND_W_S(uint64 instruction)
12606 {
12607 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12608 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12609
12610 std::string ft = FPR(copy(ft_value));
12611 std::string fs = FPR(copy(fs_value));
12612
12613 return img::format("ROUND.W.S %s, %s", ft, fs);
12614 }
12615
12616
12617 /*
12618 *
12619 *
12620 * 3 2 1
12621 * 10987654321098765432109876543210
12622 * 001000 x1110000101
12623 * rt -----
12624 * rs -----
12625 * rd -----
12626 */
12627 std::string NMD::RSQRT_D(uint64 instruction)
12628 {
12629 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12630 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12631
12632 std::string ft = FPR(copy(ft_value));
12633 std::string fs = FPR(copy(fs_value));
12634
12635 return img::format("RSQRT.D %s, %s", ft, fs);
12636 }
12637
12638
12639 /*
12640 *
12641 *
12642 * 3 2 1
12643 * 10987654321098765432109876543210
12644 * 001000 x1110000101
12645 * rt -----
12646 * rs -----
12647 * rd -----
12648 */
12649 std::string NMD::RSQRT_S(uint64 instruction)
12650 {
12651 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12652 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12653
12654 std::string ft = FPR(copy(ft_value));
12655 std::string fs = FPR(copy(fs_value));
12656
12657 return img::format("RSQRT.S %s, %s", ft, fs);
12658 }
12659
12660
12661 /*
12662 *
12663 *
12664 * 3 2 1
12665 * 10987654321098765432109876543210
12666 * 001000 01001001101
12667 * rt -----
12668 * rs -----
12669 * rd -----
12670 */
12671 std::string NMD::SAVE_16_(uint64 instruction)
12672 {
12673 uint64 count_value = extract_count_3_2_1_0(instruction);
12674 uint64 rt1_value = extract_rtl_11(instruction);
12675 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12676
12677 std::string u = IMMEDIATE(copy(u_value));
12678 return img::format("SAVE %s%s", u,
12679 save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
12680 }
12681
12682
12683 /*
12684 *
12685 *
12686 * 3 2 1
12687 * 10987654321098765432109876543210
12688 * 001000 01001001101
12689 * rt -----
12690 * rs -----
12691 * rd -----
12692 */
12693 std::string NMD::SAVE_32_(uint64 instruction)
12694 {
12695 uint64 count_value = extract_count_19_18_17_16(instruction);
12696 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12697 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12698 uint64 gp_value = extract_gp_2(instruction);
12699
12700 std::string u = IMMEDIATE(copy(u_value));
12701 return img::format("SAVE %s%s", u,
12702 save_restore_list(rt_value, count_value, gp_value));
12703 }
12704
12705
12706 /*
12707 *
12708 *
12709 * 3 2 1
12710 * 10987654321098765432109876543210
12711 * 001000 01001001101
12712 * rt -----
12713 * rs -----
12714 * rd -----
12715 */
12716 std::string NMD::SAVEF(uint64 instruction)
12717 {
12718 uint64 count_value = extract_count_19_18_17_16(instruction);
12719 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12720
12721 std::string u = IMMEDIATE(copy(u_value));
12722 std::string count = IMMEDIATE(copy(count_value));
12723
12724 return img::format("SAVEF %s, %s", u, count);
12725 }
12726
12727
12728 /*
12729 *
12730 *
12731 * 3 2 1
12732 * 10987654321098765432109876543210
12733 * 001000 01001001101
12734 * rt -----
12735 * rs -----
12736 * rd -----
12737 */
12738 std::string NMD::SB_16_(uint64 instruction)
12739 {
12740 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
12741 uint64 u_value = extract_u_1_0(instruction);
12742 uint64 rs3_value = extract_rs3_6_5_4(instruction);
12743
12744 std::string rtz3 = GPR(encode_gpr3_store(rtz3_value));
12745 std::string u = IMMEDIATE(copy(u_value));
12746 std::string rs3 = GPR(encode_gpr3(rs3_value));
12747
12748 return img::format("SB %s, %s(%s)", rtz3, u, rs3);
12749 }
12750
12751
12752 /*
12753 *
12754 *
12755 * 3 2 1
12756 * 10987654321098765432109876543210
12757 * 001000 01001001101
12758 * rt -----
12759 * rs -----
12760 * rd -----
12761 */
12762 std::string NMD::SB_GP_(uint64 instruction)
12763 {
12764 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12765 uint64 u_value = extract_u_17_to_0(instruction);
12766
12767 std::string rt = GPR(copy(rt_value));
12768 std::string u = IMMEDIATE(copy(u_value));
12769
12770 return img::format("SB %s, %s($%d)", rt, u, 28);
12771 }
12772
12773
12774 /*
12775 *
12776 *
12777 * 3 2 1
12778 * 10987654321098765432109876543210
12779 * 001000 01001001101
12780 * rt -----
12781 * rs -----
12782 * rd -----
12783 */
12784 std::string NMD::SB_S9_(uint64 instruction)
12785 {
12786 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12787 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12788 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12789
12790 std::string rt = GPR(copy(rt_value));
12791 std::string s = IMMEDIATE(copy(s_value));
12792 std::string rs = GPR(copy(rs_value));
12793
12794 return img::format("SB %s, %s(%s)", rt, s, rs);
12795 }
12796
12797
12798 /*
12799 *
12800 *
12801 * 3 2 1
12802 * 10987654321098765432109876543210
12803 * 001000 01001001101
12804 * rt -----
12805 * rs -----
12806 * rd -----
12807 */
12808 std::string NMD::SB_U12_(uint64 instruction)
12809 {
12810 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12811 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12812 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12813
12814 std::string rt = GPR(copy(rt_value));
12815 std::string u = IMMEDIATE(copy(u_value));
12816 std::string rs = GPR(copy(rs_value));
12817
12818 return img::format("SB %s, %s(%s)", rt, u, rs);
12819 }
12820
12821
12822 /*
12823 *
12824 *
12825 * 3 2 1
12826 * 10987654321098765432109876543210
12827 * 001000 01001001101
12828 * rt -----
12829 * rs -----
12830 * rd -----
12831 */
12832 std::string NMD::SBE(uint64 instruction)
12833 {
12834 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12835 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12836 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12837
12838 std::string rt = GPR(copy(rt_value));
12839 std::string s = IMMEDIATE(copy(s_value));
12840 std::string rs = GPR(copy(rs_value));
12841
12842 return img::format("SBE %s, %s(%s)", rt, s, rs);
12843 }
12844
12845
12846 /*
12847 *
12848 *
12849 * 3 2 1
12850 * 10987654321098765432109876543210
12851 * 001000 01001001101
12852 * rt -----
12853 * rs -----
12854 * rd -----
12855 */
12856 std::string NMD::SBX(uint64 instruction)
12857 {
12858 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12859 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12860 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12861
12862 std::string rd = GPR(copy(rd_value));
12863 std::string rs = GPR(copy(rs_value));
12864 std::string rt = GPR(copy(rt_value));
12865
12866 return img::format("SBX %s, %s(%s)", rd, rs, rt);
12867 }
12868
12869
12870 /*
12871 *
12872 *
12873 * 3 2 1
12874 * 10987654321098765432109876543210
12875 * 001000 01001001101
12876 * rt -----
12877 * rs -----
12878 * rd -----
12879 */
12880 std::string NMD::SC(uint64 instruction)
12881 {
12882 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12883 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
12884 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12885
12886 std::string rt = GPR(copy(rt_value));
12887 std::string s = IMMEDIATE(copy(s_value));
12888 std::string rs = GPR(copy(rs_value));
12889
12890 return img::format("SC %s, %s(%s)", rt, s, rs);
12891 }
12892
12893
12894 /*
12895 *
12896 *
12897 * 3 2 1
12898 * 10987654321098765432109876543210
12899 * 001000 01001001101
12900 * rt -----
12901 * rs -----
12902 * rd -----
12903 */
12904 std::string NMD::SCD(uint64 instruction)
12905 {
12906 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12907 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
12908 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12909
12910 std::string rt = GPR(copy(rt_value));
12911 std::string s = IMMEDIATE(copy(s_value));
12912 std::string rs = GPR(copy(rs_value));
12913
12914 return img::format("SCD %s, %s(%s)", rt, s, rs);
12915 }
12916
12917
12918 /*
12919 *
12920 *
12921 * 3 2 1
12922 * 10987654321098765432109876543210
12923 * 001000 01001001101
12924 * rt -----
12925 * rs -----
12926 * rd -----
12927 */
12928 std::string NMD::SCDP(uint64 instruction)
12929 {
12930 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12931 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12932 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12933
12934 std::string rt = GPR(copy(rt_value));
12935 std::string ru = GPR(copy(ru_value));
12936 std::string rs = GPR(copy(rs_value));
12937
12938 return img::format("SCDP %s, %s, (%s)", rt, ru, rs);
12939 }
12940
12941
12942 /*
12943 *
12944 *
12945 * 3 2 1
12946 * 10987654321098765432109876543210
12947 * 001000 01001001101
12948 * rt -----
12949 * rs -----
12950 * rd -----
12951 */
12952 std::string NMD::SCE(uint64 instruction)
12953 {
12954 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12955 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
12956 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12957
12958 std::string rt = GPR(copy(rt_value));
12959 std::string s = IMMEDIATE(copy(s_value));
12960 std::string rs = GPR(copy(rs_value));
12961
12962 return img::format("SCE %s, %s(%s)", rt, s, rs);
12963 }
12964
12965
12966 /*
12967 *
12968 *
12969 * 3 2 1
12970 * 10987654321098765432109876543210
12971 * 001000 01001001101
12972 * rt -----
12973 * rs -----
12974 * rd -----
12975 */
12976 std::string NMD::SCWP(uint64 instruction)
12977 {
12978 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12979 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12980 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12981
12982 std::string rt = GPR(copy(rt_value));
12983 std::string ru = GPR(copy(ru_value));
12984 std::string rs = GPR(copy(rs_value));
12985
12986 return img::format("SCWP %s, %s, (%s)", rt, ru, rs);
12987 }
12988
12989
12990 /*
12991 *
12992 *
12993 * 3 2 1
12994 * 10987654321098765432109876543210
12995 * 001000 01001001101
12996 * rt -----
12997 * rs -----
12998 * rd -----
12999 */
13000 std::string NMD::SCWPE(uint64 instruction)
13001 {
13002 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13003 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13004 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13005
13006 std::string rt = GPR(copy(rt_value));
13007 std::string ru = GPR(copy(ru_value));
13008 std::string rs = GPR(copy(rs_value));
13009
13010 return img::format("SCWPE %s, %s, (%s)", rt, ru, rs);
13011 }
13012
13013
13014 /*
13015 *
13016 *
13017 * 3 2 1
13018 * 10987654321098765432109876543210
13019 * 001000 01001001101
13020 * rt -----
13021 * rs -----
13022 * rd -----
13023 */
13024 std::string NMD::SD_GP_(uint64 instruction)
13025 {
13026 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13027 uint64 u_value = extract_u_20_to_3__s3(instruction);
13028
13029 std::string rt = GPR(copy(rt_value));
13030 std::string u = IMMEDIATE(copy(u_value));
13031
13032 return img::format("SD %s, %s($%d)", rt, u, 28);
13033 }
13034
13035
13036 /*
13037 *
13038 *
13039 * 3 2 1
13040 * 10987654321098765432109876543210
13041 * 001000 01001001101
13042 * rt -----
13043 * rs -----
13044 * rd -----
13045 */
13046 std::string NMD::SD_S9_(uint64 instruction)
13047 {
13048 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13049 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13050 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13051
13052 std::string rt = GPR(copy(rt_value));
13053 std::string s = IMMEDIATE(copy(s_value));
13054 std::string rs = GPR(copy(rs_value));
13055
13056 return img::format("SD %s, %s(%s)", rt, s, rs);
13057 }
13058
13059
13060 /*
13061 *
13062 *
13063 * 3 2 1
13064 * 10987654321098765432109876543210
13065 * 001000 01001001101
13066 * rt -----
13067 * rs -----
13068 * rd -----
13069 */
13070 std::string NMD::SD_U12_(uint64 instruction)
13071 {
13072 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13073 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13074 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13075
13076 std::string rt = GPR(copy(rt_value));
13077 std::string u = IMMEDIATE(copy(u_value));
13078 std::string rs = GPR(copy(rs_value));
13079
13080 return img::format("SD %s, %s(%s)", rt, u, rs);
13081 }
13082
13083
13084 /*
13085 *
13086 *
13087 * 3 2 1
13088 * 10987654321098765432109876543210
13089 * 001000 01001001101
13090 * rt -----
13091 * rs -----
13092 * rd -----
13093 */
13094 std::string NMD::SDBBP_16_(uint64 instruction)
13095 {
13096 uint64 code_value = extract_code_2_1_0(instruction);
13097
13098 std::string code = IMMEDIATE(copy(code_value));
13099
13100 return img::format("SDBBP %s", code);
13101 }
13102
13103
13104 /*
13105 *
13106 *
13107 * 3 2 1
13108 * 10987654321098765432109876543210
13109 * 001000 01001001101
13110 * rt -----
13111 * rs -----
13112 * rd -----
13113 */
13114 std::string NMD::SDBBP_32_(uint64 instruction)
13115 {
13116 uint64 code_value = extract_code_18_to_0(instruction);
13117
13118 std::string code = IMMEDIATE(copy(code_value));
13119
13120 return img::format("SDBBP %s", code);
13121 }
13122
13123
13124 /*
13125 *
13126 *
13127 * 3 2 1
13128 * 10987654321098765432109876543210
13129 * 001000 01001001101
13130 * rt -----
13131 * rs -----
13132 * rd -----
13133 */
13134 std::string NMD::SDC1_GP_(uint64 instruction)
13135 {
13136 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13137 uint64 u_value = extract_u_17_to_2__s2(instruction);
13138
13139 std::string ft = FPR(copy(ft_value));
13140 std::string u = IMMEDIATE(copy(u_value));
13141
13142 return img::format("SDC1 %s, %s($%d)", ft, u, 28);
13143 }
13144
13145
13146 /*
13147 *
13148 *
13149 * 3 2 1
13150 * 10987654321098765432109876543210
13151 * 001000 01001001101
13152 * rt -----
13153 * rs -----
13154 * rd -----
13155 */
13156 std::string NMD::SDC1_S9_(uint64 instruction)
13157 {
13158 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13159 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13160 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13161
13162 std::string ft = FPR(copy(ft_value));
13163 std::string s = IMMEDIATE(copy(s_value));
13164 std::string rs = GPR(copy(rs_value));
13165
13166 return img::format("SDC1 %s, %s(%s)", ft, s, rs);
13167 }
13168
13169
13170 /*
13171 *
13172 *
13173 * 3 2 1
13174 * 10987654321098765432109876543210
13175 * 001000 01001001101
13176 * rt -----
13177 * rs -----
13178 * rd -----
13179 */
13180 std::string NMD::SDC1_U12_(uint64 instruction)
13181 {
13182 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13183 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13184 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13185
13186 std::string ft = FPR(copy(ft_value));
13187 std::string u = IMMEDIATE(copy(u_value));
13188 std::string rs = GPR(copy(rs_value));
13189
13190 return img::format("SDC1 %s, %s(%s)", ft, u, rs);
13191 }
13192
13193
13194 /*
13195 *
13196 *
13197 * 3 2 1
13198 * 10987654321098765432109876543210
13199 * 001000 01001001101
13200 * rt -----
13201 * rs -----
13202 * rd -----
13203 */
13204 std::string NMD::SDC1X(uint64 instruction)
13205 {
13206 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13207 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13208 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13209
13210 std::string ft = FPR(copy(ft_value));
13211 std::string rs = GPR(copy(rs_value));
13212 std::string rt = GPR(copy(rt_value));
13213
13214 return img::format("SDC1X %s, %s(%s)", ft, rs, rt);
13215 }
13216
13217
13218 /*
13219 *
13220 *
13221 * 3 2 1
13222 * 10987654321098765432109876543210
13223 * 001000 01001001101
13224 * rt -----
13225 * rs -----
13226 * rd -----
13227 */
13228 std::string NMD::SDC1XS(uint64 instruction)
13229 {
13230 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13231 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13232 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13233
13234 std::string ft = FPR(copy(ft_value));
13235 std::string rs = GPR(copy(rs_value));
13236 std::string rt = GPR(copy(rt_value));
13237
13238 return img::format("SDC1XS %s, %s(%s)", ft, rs, rt);
13239 }
13240
13241
13242 /*
13243 *
13244 *
13245 * 3 2 1
13246 * 10987654321098765432109876543210
13247 * 001000 01001001101
13248 * rt -----
13249 * rs -----
13250 * rd -----
13251 */
13252 std::string NMD::SDC2(uint64 instruction)
13253 {
13254 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
13255 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13256 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13257
13258 std::string cs = CPR(copy(cs_value));
13259 std::string s = IMMEDIATE(copy(s_value));
13260 std::string rs = GPR(copy(rs_value));
13261
13262 return img::format("SDC2 %s, %s(%s)", cs, s, rs);
13263 }
13264
13265
13266 /*
13267 *
13268 *
13269 * 3 2 1
13270 * 10987654321098765432109876543210
13271 * 001000 01001001101
13272 * rt -----
13273 * rs -----
13274 * rd -----
13275 */
13276 std::string NMD::SDM(uint64 instruction)
13277 {
13278 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13279 uint64 count3_value = extract_count3_14_13_12(instruction);
13280 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13281 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13282
13283 std::string rt = GPR(copy(rt_value));
13284 std::string s = IMMEDIATE(copy(s_value));
13285 std::string rs = GPR(copy(rs_value));
13286 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
13287
13288 return img::format("SDM %s, %s(%s), %s", rt, s, rs, count3);
13289 }
13290
13291
13292 /*
13293 *
13294 *
13295 * 3 2 1
13296 * 10987654321098765432109876543210
13297 * 001000 01001001101
13298 * rt -----
13299 * rs -----
13300 * rd -----
13301 */
13302 std::string NMD::SDPC_48_(uint64 instruction)
13303 {
13304 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
13305 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
13306
13307 std::string rt = GPR(copy(rt_value));
13308 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
13309
13310 return img::format("SDPC %s, %s", rt, s);
13311 }
13312
13313
13314 /*
13315 *
13316 *
13317 * 3 2 1
13318 * 10987654321098765432109876543210
13319 * 001000 01001001101
13320 * rt -----
13321 * rs -----
13322 * rd -----
13323 */
13324 std::string NMD::SDXS(uint64 instruction)
13325 {
13326 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13327 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13328 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13329
13330 std::string rd = GPR(copy(rd_value));
13331 std::string rs = GPR(copy(rs_value));
13332 std::string rt = GPR(copy(rt_value));
13333
13334 return img::format("SDXS %s, %s(%s)", rd, rs, rt);
13335 }
13336
13337
13338 /*
13339 *
13340 *
13341 * 3 2 1
13342 * 10987654321098765432109876543210
13343 * 001000 01001001101
13344 * rt -----
13345 * rs -----
13346 * rd -----
13347 */
13348 std::string NMD::SDX(uint64 instruction)
13349 {
13350 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13351 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13352 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13353
13354 std::string rd = GPR(copy(rd_value));
13355 std::string rs = GPR(copy(rs_value));
13356 std::string rt = GPR(copy(rt_value));
13357
13358 return img::format("SDX %s, %s(%s)", rd, rs, rt);
13359 }
13360
13361
13362 /*
13363 *
13364 *
13365 * 3 2 1
13366 * 10987654321098765432109876543210
13367 * 001000 01001001101
13368 * rt -----
13369 * rs -----
13370 * rd -----
13371 */
13372 std::string NMD::SEB(uint64 instruction)
13373 {
13374 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13375 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13376
13377 std::string rt = GPR(copy(rt_value));
13378 std::string rs = GPR(copy(rs_value));
13379
13380 return img::format("SEB %s, %s", rt, rs);
13381 }
13382
13383
13384 /*
13385 *
13386 *
13387 * 3 2 1
13388 * 10987654321098765432109876543210
13389 * 001000 01001001101
13390 * rt -----
13391 * rs -----
13392 * rd -----
13393 */
13394 std::string NMD::SEH(uint64 instruction)
13395 {
13396 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13397 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13398
13399 std::string rt = GPR(copy(rt_value));
13400 std::string rs = GPR(copy(rs_value));
13401
13402 return img::format("SEH %s, %s", rt, rs);
13403 }
13404
13405
13406 /*
13407 *
13408 *
13409 * 3 2 1
13410 * 10987654321098765432109876543210
13411 * 001000 01001001101
13412 * rt -----
13413 * rs -----
13414 * rd -----
13415 */
13416 std::string NMD::SEL_D(uint64 instruction)
13417 {
13418 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13419 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13420 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13421
13422 std::string fd = FPR(copy(fd_value));
13423 std::string fs = FPR(copy(fs_value));
13424 std::string ft = FPR(copy(ft_value));
13425
13426 return img::format("SEL.D %s, %s, %s", fd, fs, ft);
13427 }
13428
13429
13430 /*
13431 *
13432 *
13433 * 3 2 1
13434 * 10987654321098765432109876543210
13435 * 001000 01001001101
13436 * rt -----
13437 * rs -----
13438 * rd -----
13439 */
13440 std::string NMD::SEL_S(uint64 instruction)
13441 {
13442 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13443 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13444 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13445
13446 std::string fd = FPR(copy(fd_value));
13447 std::string fs = FPR(copy(fs_value));
13448 std::string ft = FPR(copy(ft_value));
13449
13450 return img::format("SEL.S %s, %s, %s", fd, fs, ft);
13451 }
13452
13453
13454 /*
13455 *
13456 *
13457 * 3 2 1
13458 * 10987654321098765432109876543210
13459 * 001000 01001001101
13460 * rt -----
13461 * rs -----
13462 * rd -----
13463 */
13464 std::string NMD::SELEQZ_D(uint64 instruction)
13465 {
13466 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13467 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13468 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13469
13470 std::string fd = FPR(copy(fd_value));
13471 std::string fs = FPR(copy(fs_value));
13472 std::string ft = FPR(copy(ft_value));
13473
13474 return img::format("SELEQZ.D %s, %s, %s", fd, fs, ft);
13475 }
13476
13477
13478 /*
13479 *
13480 *
13481 * 3 2 1
13482 * 10987654321098765432109876543210
13483 * 001000 01001001101
13484 * rt -----
13485 * rs -----
13486 * rd -----
13487 */
13488 std::string NMD::SELEQZ_S(uint64 instruction)
13489 {
13490 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13491 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13492 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13493
13494 std::string fd = FPR(copy(fd_value));
13495 std::string fs = FPR(copy(fs_value));
13496 std::string ft = FPR(copy(ft_value));
13497
13498 return img::format("SELEQZ.S %s, %s, %s", fd, fs, ft);
13499 }
13500
13501
13502 /*
13503 *
13504 *
13505 * 3 2 1
13506 * 10987654321098765432109876543210
13507 * 001000 01001001101
13508 * rt -----
13509 * rs -----
13510 * rd -----
13511 */
13512 std::string NMD::SELNEZ_D(uint64 instruction)
13513 {
13514 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13515 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13516 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13517
13518 std::string fd = FPR(copy(fd_value));
13519 std::string fs = FPR(copy(fs_value));
13520 std::string ft = FPR(copy(ft_value));
13521
13522 return img::format("SELNEZ.D %s, %s, %s", fd, fs, ft);
13523 }
13524
13525
13526 /*
13527 *
13528 *
13529 * 3 2 1
13530 * 10987654321098765432109876543210
13531 * 001000 01001001101
13532 * rt -----
13533 * rs -----
13534 * rd -----
13535 */
13536 std::string NMD::SELNEZ_S(uint64 instruction)
13537 {
13538 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13539 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13540 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13541
13542 std::string fd = FPR(copy(fd_value));
13543 std::string fs = FPR(copy(fs_value));
13544 std::string ft = FPR(copy(ft_value));
13545
13546 return img::format("SELNEZ.S %s, %s, %s", fd, fs, ft);
13547 }
13548
13549
13550 /*
13551 *
13552 *
13553 * 3 2 1
13554 * 10987654321098765432109876543210
13555 * 001000 01001001101
13556 * rt -----
13557 * rs -----
13558 * rd -----
13559 */
13560 std::string NMD::SEQI(uint64 instruction)
13561 {
13562 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13563 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13564 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13565
13566 std::string rt = GPR(copy(rt_value));
13567 std::string rs = GPR(copy(rs_value));
13568 std::string u = IMMEDIATE(copy(u_value));
13569
13570 return img::format("SEQI %s, %s, %s", rt, rs, u);
13571 }
13572
13573
13574 /*
13575 *
13576 *
13577 * 3 2 1
13578 * 10987654321098765432109876543210
13579 * 001000 01001001101
13580 * rt -----
13581 * rs -----
13582 * rd -----
13583 */
13584 std::string NMD::SH_16_(uint64 instruction)
13585 {
13586 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
13587 uint64 u_value = extract_u_2_1__s1(instruction);
13588 uint64 rs3_value = extract_rs3_6_5_4(instruction);
13589
13590 std::string rtz3 = GPR(encode_gpr3_store(rtz3_value));
13591 std::string u = IMMEDIATE(copy(u_value));
13592 std::string rs3 = GPR(encode_gpr3(rs3_value));
13593
13594 return img::format("SH %s, %s(%s)", rtz3, u, rs3);
13595 }
13596
13597
13598 /*
13599 *
13600 *
13601 * 3 2 1
13602 * 10987654321098765432109876543210
13603 * 001000 01001001101
13604 * rt -----
13605 * rs -----
13606 * rd -----
13607 */
13608 std::string NMD::SH_GP_(uint64 instruction)
13609 {
13610 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13611 uint64 u_value = extract_u_17_to_1__s1(instruction);
13612
13613 std::string rt = GPR(copy(rt_value));
13614 std::string u = IMMEDIATE(copy(u_value));
13615
13616 return img::format("SH %s, %s($%d)", rt, u, 28);
13617 }
13618
13619
13620 /*
13621 *
13622 *
13623 * 3 2 1
13624 * 10987654321098765432109876543210
13625 * 001000 01001001101
13626 * rt -----
13627 * rs -----
13628 * rd -----
13629 */
13630 std::string NMD::SH_S9_(uint64 instruction)
13631 {
13632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13633 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13634 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13635
13636 std::string rt = GPR(copy(rt_value));
13637 std::string s = IMMEDIATE(copy(s_value));
13638 std::string rs = GPR(copy(rs_value));
13639
13640 return img::format("SH %s, %s(%s)", rt, s, rs);
13641 }
13642
13643
13644 /*
13645 *
13646 *
13647 * 3 2 1
13648 * 10987654321098765432109876543210
13649 * 001000 01001001101
13650 * rt -----
13651 * rs -----
13652 * rd -----
13653 */
13654 std::string NMD::SH_U12_(uint64 instruction)
13655 {
13656 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13657 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13658 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13659
13660 std::string rt = GPR(copy(rt_value));
13661 std::string u = IMMEDIATE(copy(u_value));
13662 std::string rs = GPR(copy(rs_value));
13663
13664 return img::format("SH %s, %s(%s)", rt, u, rs);
13665 }
13666
13667
13668 /*
13669 *
13670 *
13671 * 3 2 1
13672 * 10987654321098765432109876543210
13673 * 001000 01001001101
13674 * rt -----
13675 * rs -----
13676 * rd -----
13677 */
13678 std::string NMD::SHE(uint64 instruction)
13679 {
13680 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13681 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13682 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13683
13684 std::string rt = GPR(copy(rt_value));
13685 std::string s = IMMEDIATE(copy(s_value));
13686 std::string rs = GPR(copy(rs_value));
13687
13688 return img::format("SHE %s, %s(%s)", rt, s, rs);
13689 }
13690
13691
13692 /*
13693 * SHILO ac, shift - Shift an Accumulator Value Leaving the Result in the Same
13694 * Accumulator
13695 *
13696 * 3 2 1
13697 * 10987654321098765432109876543210
13698 * 001000xxxx xxxx0000011101
13699 * shift ------
13700 * ac --
13701 */
13702 std::string NMD::SHILO(uint64 instruction)
13703 {
13704 int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
13705 uint64 ac_value = extract_ac_13_12(instruction);
13706
13707 std::string shift = IMMEDIATE(copy(shift_value));
13708 std::string ac = AC(copy(ac_value));
13709
13710 return img::format("SHILO %s, %s", ac, shift);
13711 }
13712
13713
13714 /*
13715 * SHILOV ac, rs - Variable Shift of Accumulator Value Leaving the Result in
13716 * the Same Accumulator
13717 *
13718 * 3 2 1
13719 * 10987654321098765432109876543210
13720 * 001000xxxxx 01001001111111
13721 * rs -----
13722 * ac --
13723 */
13724 std::string NMD::SHILOV(uint64 instruction)
13725 {
13726 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13727 uint64 ac_value = extract_ac_13_12(instruction);
13728
13729 std::string rs = GPR(copy(rs_value));
13730 std::string ac = AC(copy(ac_value));
13731
13732 return img::format("SHILOV %s, %s", ac, rs);
13733 }
13734
13735
13736 /*
13737 * SHLL.PH rt, rs, sa - Shift Left Logical Vector Pair Halfwords
13738 *
13739 * 3 2 1
13740 * 10987654321098765432109876543210
13741 * 001000 001110110101
13742 * rt -----
13743 * rs -----
13744 * sa ----
13745 */
13746 std::string NMD::SHLL_PH(uint64 instruction)
13747 {
13748 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13749 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13750 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13751
13752 std::string rt = GPR(copy(rt_value));
13753 std::string rs = GPR(copy(rs_value));
13754 std::string sa = IMMEDIATE(copy(sa_value));
13755
13756 return img::format("SHLL.PH %s, %s, %s", rt, rs, sa);
13757 }
13758
13759
13760 /*
13761 * SHLL.QB rt, rs, sa - Shift Left Logical Vector Quad Bytes
13762 *
13763 * 3 2 1
13764 * 10987654321098765432109876543210
13765 * 001000 0100001111111
13766 * rt -----
13767 * rs -----
13768 * sa ---
13769 */
13770 std::string NMD::SHLL_QB(uint64 instruction)
13771 {
13772 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13773 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13774 uint64 sa_value = extract_sa_15_14_13(instruction);
13775
13776 std::string rt = GPR(copy(rt_value));
13777 std::string rs = GPR(copy(rs_value));
13778 std::string sa = IMMEDIATE(copy(sa_value));
13779
13780 return img::format("SHLL.QB %s, %s, %s", rt, rs, sa);
13781 }
13782
13783
13784 /*
13785 * SHLL_S.PH rt, rs, sa - Shift Left Logical Vector Pair Halfwords (saturated)
13786 *
13787 * 3 2 1
13788 * 10987654321098765432109876543210
13789 * 001000 001110110101
13790 * rt -----
13791 * rs -----
13792 * sa ----
13793 */
13794 std::string NMD::SHLL_S_PH(uint64 instruction)
13795 {
13796 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13797 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13798 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13799
13800 std::string rt = GPR(copy(rt_value));
13801 std::string rs = GPR(copy(rs_value));
13802 std::string sa = IMMEDIATE(copy(sa_value));
13803
13804 return img::format("SHLL_S.PH %s, %s, %s", rt, rs, sa);
13805 }
13806
13807
13808 /*
13809 *
13810 *
13811 * 3 2 1
13812 * 10987654321098765432109876543210
13813 * 001000 01001001101
13814 * rt -----
13815 * rs -----
13816 * rd -----
13817 */
13818 std::string NMD::SHLL_S_W(uint64 instruction)
13819 {
13820 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13821 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
13822 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13823
13824 std::string rt = GPR(copy(rt_value));
13825 std::string rs = GPR(copy(rs_value));
13826 std::string sa = IMMEDIATE(copy(sa_value));
13827
13828 return img::format("SHLL_S.W %s, %s, %s", rt, rs, sa);
13829 }
13830
13831
13832 /*
13833 *
13834 *
13835 * 3 2 1
13836 * 10987654321098765432109876543210
13837 * 001000 01001001101
13838 * rt -----
13839 * rs -----
13840 * rd -----
13841 */
13842 std::string NMD::SHLLV_PH(uint64 instruction)
13843 {
13844 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13845 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13846 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13847
13848 std::string rd = GPR(copy(rd_value));
13849 std::string rt = GPR(copy(rt_value));
13850 std::string rs = GPR(copy(rs_value));
13851
13852 return img::format("SHLLV.PH %s, %s, %s", rd, rt, rs);
13853 }
13854
13855
13856 /*
13857 *
13858 *
13859 * 3 2 1
13860 * 10987654321098765432109876543210
13861 * 001000 01001001101
13862 * rt -----
13863 * rs -----
13864 * rd -----
13865 */
13866 std::string NMD::SHLLV_QB(uint64 instruction)
13867 {
13868 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13869 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13870 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13871
13872 std::string rd = GPR(copy(rd_value));
13873 std::string rt = GPR(copy(rt_value));
13874 std::string rs = GPR(copy(rs_value));
13875
13876 return img::format("SHLLV.QB %s, %s, %s", rd, rt, rs);
13877 }
13878
13879
13880 /*
13881 *
13882 *
13883 * 3 2 1
13884 * 10987654321098765432109876543210
13885 * 001000 01001001101
13886 * rt -----
13887 * rs -----
13888 * rd -----
13889 */
13890 std::string NMD::SHLLV_S_PH(uint64 instruction)
13891 {
13892 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13893 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13894 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13895
13896 std::string rd = GPR(copy(rd_value));
13897 std::string rt = GPR(copy(rt_value));
13898 std::string rs = GPR(copy(rs_value));
13899
13900 return img::format("SHLLV_S.PH %s, %s, %s", rd, rt, rs);
13901 }
13902
13903
13904 /*
13905 *
13906 *
13907 * 3 2 1
13908 * 10987654321098765432109876543210
13909 * 001000 01001001101
13910 * rt -----
13911 * rs -----
13912 * rd -----
13913 */
13914 std::string NMD::SHLLV_S_W(uint64 instruction)
13915 {
13916 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13917 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13918 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13919
13920 std::string rd = GPR(copy(rd_value));
13921 std::string rt = GPR(copy(rt_value));
13922 std::string rs = GPR(copy(rs_value));
13923
13924 return img::format("SHLLV_S.W %s, %s, %s", rd, rt, rs);
13925 }
13926
13927
13928 /*
13929 *
13930 *
13931 * 3 2 1
13932 * 10987654321098765432109876543210
13933 * 001000 01001001101
13934 * rt -----
13935 * rs -----
13936 * rd -----
13937 */
13938 std::string NMD::SHRA_PH(uint64 instruction)
13939 {
13940 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13941 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13942 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13943
13944 std::string rt = GPR(copy(rt_value));
13945 std::string rs = GPR(copy(rs_value));
13946 std::string sa = IMMEDIATE(copy(sa_value));
13947
13948 return img::format("SHRA.PH %s, %s, %s", rt, rs, sa);
13949 }
13950
13951
13952 /*
13953 *
13954 *
13955 * 3 2 1
13956 * 10987654321098765432109876543210
13957 * 001000 01001001101
13958 * rt -----
13959 * rs -----
13960 * rd -----
13961 */
13962 std::string NMD::SHRA_QB(uint64 instruction)
13963 {
13964 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13965 uint64 sa_value = extract_sa_15_14_13(instruction);
13966 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13967
13968 std::string rt = GPR(copy(rt_value));
13969 std::string rs = GPR(copy(rs_value));
13970 std::string sa = IMMEDIATE(copy(sa_value));
13971
13972 return img::format("SHRA.QB %s, %s, %s", rt, rs, sa);
13973 }
13974
13975
13976 /*
13977 *
13978 *
13979 * 3 2 1
13980 * 10987654321098765432109876543210
13981 * 001000 01001001101
13982 * rt -----
13983 * rs -----
13984 * rd -----
13985 */
13986 std::string NMD::SHRA_R_PH(uint64 instruction)
13987 {
13988 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13989 uint64 sa_value = extract_sa_15_14_13_12(instruction);
13990 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13991
13992 std::string rt = GPR(copy(rt_value));
13993 std::string rs = GPR(copy(rs_value));
13994 std::string sa = IMMEDIATE(copy(sa_value));
13995
13996 return img::format("SHRA_R.PH %s, %s, %s", rt, rs, sa);
13997 }
13998
13999
14000 /*
14001 *
14002 *
14003 * 3 2 1
14004 * 10987654321098765432109876543210
14005 * 001000 01001001101
14006 * rt -----
14007 * rs -----
14008 * rd -----
14009 */
14010 std::string NMD::SHRA_R_QB(uint64 instruction)
14011 {
14012 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14013 uint64 sa_value = extract_sa_15_14_13(instruction);
14014 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14015
14016 std::string rt = GPR(copy(rt_value));
14017 std::string rs = GPR(copy(rs_value));
14018 std::string sa = IMMEDIATE(copy(sa_value));
14019
14020 return img::format("SHRA_R.QB %s, %s, %s", rt, rs, sa);
14021 }
14022
14023
14024 /*
14025 *
14026 *
14027 * 3 2 1
14028 * 10987654321098765432109876543210
14029 * 001000 01001001101
14030 * rt -----
14031 * rs -----
14032 * rd -----
14033 */
14034 std::string NMD::SHRA_R_W(uint64 instruction)
14035 {
14036 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14037 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
14038 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14039
14040 std::string rt = GPR(copy(rt_value));
14041 std::string rs = GPR(copy(rs_value));
14042 std::string sa = IMMEDIATE(copy(sa_value));
14043
14044 return img::format("SHRA_R.W %s, %s, %s", rt, rs, sa);
14045 }
14046
14047
14048 /*
14049 *
14050 *
14051 * 3 2 1
14052 * 10987654321098765432109876543210
14053 * 001000 01001001101
14054 * rt -----
14055 * rs -----
14056 * rd -----
14057 */
14058 std::string NMD::SHRAV_PH(uint64 instruction)
14059 {
14060 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14061 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14062 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14063
14064 std::string rd = GPR(copy(rd_value));
14065 std::string rt = GPR(copy(rt_value));
14066 std::string rs = GPR(copy(rs_value));
14067
14068 return img::format("SHRAV.PH %s, %s, %s", rd, rt, rs);
14069 }
14070
14071
14072 /*
14073 *
14074 *
14075 * 3 2 1
14076 * 10987654321098765432109876543210
14077 * 001000 01001001101
14078 * rt -----
14079 * rs -----
14080 * rd -----
14081 */
14082 std::string NMD::SHRAV_QB(uint64 instruction)
14083 {
14084 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14085 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14086 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14087
14088 std::string rd = GPR(copy(rd_value));
14089 std::string rt = GPR(copy(rt_value));
14090 std::string rs = GPR(copy(rs_value));
14091
14092 return img::format("SHRAV.QB %s, %s, %s", rd, rt, rs);
14093 }
14094
14095
14096 /*
14097 *
14098 *
14099 * 3 2 1
14100 * 10987654321098765432109876543210
14101 * 001000 01001001101
14102 * rt -----
14103 * rs -----
14104 * rd -----
14105 */
14106 std::string NMD::SHRAV_R_PH(uint64 instruction)
14107 {
14108 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14109 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14110 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14111
14112 std::string rd = GPR(copy(rd_value));
14113 std::string rt = GPR(copy(rt_value));
14114 std::string rs = GPR(copy(rs_value));
14115
14116 return img::format("SHRAV_R.PH %s, %s, %s", rd, rt, rs);
14117 }
14118
14119
14120 /*
14121 *
14122 *
14123 * 3 2 1
14124 * 10987654321098765432109876543210
14125 * 001000 01001001101
14126 * rt -----
14127 * rs -----
14128 * rd -----
14129 */
14130 std::string NMD::SHRAV_R_QB(uint64 instruction)
14131 {
14132 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14133 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14134 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14135
14136 std::string rd = GPR(copy(rd_value));
14137 std::string rt = GPR(copy(rt_value));
14138 std::string rs = GPR(copy(rs_value));
14139
14140 return img::format("SHRAV_R.QB %s, %s, %s", rd, rt, rs);
14141 }
14142
14143
14144 /*
14145 *
14146 *
14147 * 3 2 1
14148 * 10987654321098765432109876543210
14149 * 001000 01001001101
14150 * rt -----
14151 * rs -----
14152 * rd -----
14153 */
14154 std::string NMD::SHRAV_R_W(uint64 instruction)
14155 {
14156 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14157 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14158 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14159
14160 std::string rd = GPR(copy(rd_value));
14161 std::string rt = GPR(copy(rt_value));
14162 std::string rs = GPR(copy(rs_value));
14163
14164 return img::format("SHRAV_R.W %s, %s, %s", rd, rt, rs);
14165 }
14166
14167
14168 /*
14169 *
14170 *
14171 * 3 2 1
14172 * 10987654321098765432109876543210
14173 * 001000 01001001101
14174 * rt -----
14175 * rs -----
14176 * rd -----
14177 */
14178 std::string NMD::SHRL_PH(uint64 instruction)
14179 {
14180 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14181 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14182 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14183
14184 std::string rt = GPR(copy(rt_value));
14185 std::string rs = GPR(copy(rs_value));
14186 std::string sa = IMMEDIATE(copy(sa_value));
14187
14188 return img::format("SHRL.PH %s, %s, %s", rt, rs, sa);
14189 }
14190
14191
14192 /*
14193 *
14194 *
14195 * 3 2 1
14196 * 10987654321098765432109876543210
14197 * 001000 01001001101
14198 * rt -----
14199 * rs -----
14200 * rd -----
14201 */
14202 std::string NMD::SHRL_QB(uint64 instruction)
14203 {
14204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14205 uint64 sa_value = extract_sa_15_14_13(instruction);
14206 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14207
14208 std::string rt = GPR(copy(rt_value));
14209 std::string rs = GPR(copy(rs_value));
14210 std::string sa = IMMEDIATE(copy(sa_value));
14211
14212 return img::format("SHRL.QB %s, %s, %s", rt, rs, sa);
14213 }
14214
14215
14216 /*
14217 *
14218 *
14219 * 3 2 1
14220 * 10987654321098765432109876543210
14221 * 001000 01001001101
14222 * rt -----
14223 * rs -----
14224 * rd -----
14225 */
14226 std::string NMD::SHRLV_PH(uint64 instruction)
14227 {
14228 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14229 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14230 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14231
14232 std::string rd = GPR(copy(rd_value));
14233 std::string rt = GPR(copy(rt_value));
14234 std::string rs = GPR(copy(rs_value));
14235
14236 return img::format("SHRLV.PH %s, %s, %s", rd, rt, rs);
14237 }
14238
14239
14240 /*
14241 *
14242 *
14243 * 3 2 1
14244 * 10987654321098765432109876543210
14245 * 001000 01001001101
14246 * rt -----
14247 * rs -----
14248 * rd -----
14249 */
14250 std::string NMD::SHRLV_QB(uint64 instruction)
14251 {
14252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14253 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14254 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14255
14256 std::string rd = GPR(copy(rd_value));
14257 std::string rt = GPR(copy(rt_value));
14258 std::string rs = GPR(copy(rs_value));
14259
14260 return img::format("SHRLV.QB %s, %s, %s", rd, rt, rs);
14261 }
14262
14263
14264 /*
14265 *
14266 *
14267 * 3 2 1
14268 * 10987654321098765432109876543210
14269 * 001000 01001001101
14270 * rt -----
14271 * rs -----
14272 * rd -----
14273 */
14274 std::string NMD::SHX(uint64 instruction)
14275 {
14276 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14277 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14278 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14279
14280 std::string rd = GPR(copy(rd_value));
14281 std::string rs = GPR(copy(rs_value));
14282 std::string rt = GPR(copy(rt_value));
14283
14284 return img::format("SHX %s, %s(%s)", rd, rs, rt);
14285 }
14286
14287
14288 /*
14289 *
14290 *
14291 * 3 2 1
14292 * 10987654321098765432109876543210
14293 * 001000 01001001101
14294 * rt -----
14295 * rs -----
14296 * rd -----
14297 */
14298 std::string NMD::SHXS(uint64 instruction)
14299 {
14300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14301 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14302 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14303
14304 std::string rd = GPR(copy(rd_value));
14305 std::string rs = GPR(copy(rs_value));
14306 std::string rt = GPR(copy(rt_value));
14307
14308 return img::format("SHXS %s, %s(%s)", rd, rs, rt);
14309 }
14310
14311
14312 /*
14313 *
14314 *
14315 * 3 2 1
14316 * 10987654321098765432109876543210
14317 * 001000 01001001101
14318 * rt -----
14319 * rs -----
14320 * rd -----
14321 */
14322 std::string NMD::SIGRIE(uint64 instruction)
14323 {
14324 uint64 code_value = extract_code_18_to_0(instruction);
14325
14326 std::string code = IMMEDIATE(copy(code_value));
14327
14328 return img::format("SIGRIE %s", code);
14329 }
14330
14331
14332 /*
14333 *
14334 *
14335 * 3 2 1
14336 * 10987654321098765432109876543210
14337 * 001000 01001001101
14338 * rt -----
14339 * rs -----
14340 * rd -----
14341 */
14342 std::string NMD::SLL_16_(uint64 instruction)
14343 {
14344 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14345 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14346 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14347
14348 std::string rt3 = GPR(encode_gpr3(rt3_value));
14349 std::string rs3 = GPR(encode_gpr3(rs3_value));
14350 std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));
14351
14352 return img::format("SLL %s, %s, %s", rt3, rs3, shift3);
14353 }
14354
14355
14356 /*
14357 *
14358 *
14359 * 3 2 1
14360 * 10987654321098765432109876543210
14361 * 001000 01001001101
14362 * rt -----
14363 * rs -----
14364 * rd -----
14365 */
14366 std::string NMD::SLL_32_(uint64 instruction)
14367 {
14368 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14369 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14370 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14371
14372 std::string rt = GPR(copy(rt_value));
14373 std::string rs = GPR(copy(rs_value));
14374 std::string shift = IMMEDIATE(copy(shift_value));
14375
14376 return img::format("SLL %s, %s, %s", rt, rs, shift);
14377 }
14378
14379
14380 /*
14381 *
14382 *
14383 * 3 2 1
14384 * 10987654321098765432109876543210
14385 * 001000 01001001101
14386 * rt -----
14387 * rs -----
14388 * rd -----
14389 */
14390 std::string NMD::SLLV(uint64 instruction)
14391 {
14392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14394 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14395
14396 std::string rd = GPR(copy(rd_value));
14397 std::string rs = GPR(copy(rs_value));
14398 std::string rt = GPR(copy(rt_value));
14399
14400 return img::format("SLLV %s, %s, %s", rd, rs, rt);
14401 }
14402
14403
14404 /*
14405 *
14406 *
14407 * 3 2 1
14408 * 10987654321098765432109876543210
14409 * 001000 01001001101
14410 * rt -----
14411 * rs -----
14412 * rd -----
14413 */
14414 std::string NMD::SLT(uint64 instruction)
14415 {
14416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14417 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14418 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14419
14420 std::string rd = GPR(copy(rd_value));
14421 std::string rs = GPR(copy(rs_value));
14422 std::string rt = GPR(copy(rt_value));
14423
14424 return img::format("SLT %s, %s, %s", rd, rs, rt);
14425 }
14426
14427
14428 /*
14429 *
14430 *
14431 * 3 2 1
14432 * 10987654321098765432109876543210
14433 * 001000 01001001101
14434 * rt -----
14435 * rs -----
14436 * rd -----
14437 */
14438 std::string NMD::SLTI(uint64 instruction)
14439 {
14440 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14441 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14442 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14443
14444 std::string rt = GPR(copy(rt_value));
14445 std::string rs = GPR(copy(rs_value));
14446 std::string u = IMMEDIATE(copy(u_value));
14447
14448 return img::format("SLTI %s, %s, %s", rt, rs, u);
14449 }
14450
14451
14452 /*
14453 *
14454 *
14455 * 3 2 1
14456 * 10987654321098765432109876543210
14457 * 001000 01001001101
14458 * rt -----
14459 * rs -----
14460 * rd -----
14461 */
14462 std::string NMD::SLTIU(uint64 instruction)
14463 {
14464 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14465 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14466 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14467
14468 std::string rt = GPR(copy(rt_value));
14469 std::string rs = GPR(copy(rs_value));
14470 std::string u = IMMEDIATE(copy(u_value));
14471
14472 return img::format("SLTIU %s, %s, %s", rt, rs, u);
14473 }
14474
14475
14476 /*
14477 *
14478 *
14479 * 3 2 1
14480 * 10987654321098765432109876543210
14481 * 001000 01001001101
14482 * rt -----
14483 * rs -----
14484 * rd -----
14485 */
14486 std::string NMD::SLTU(uint64 instruction)
14487 {
14488 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14489 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14490 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14491
14492 std::string rd = GPR(copy(rd_value));
14493 std::string rs = GPR(copy(rs_value));
14494 std::string rt = GPR(copy(rt_value));
14495
14496 return img::format("SLTU %s, %s, %s", rd, rs, rt);
14497 }
14498
14499
14500 /*
14501 *
14502 *
14503 * 3 2 1
14504 * 10987654321098765432109876543210
14505 * 001000 01001001101
14506 * rt -----
14507 * rs -----
14508 * rd -----
14509 */
14510 std::string NMD::SOV(uint64 instruction)
14511 {
14512 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14513 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14514 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14515
14516 std::string rd = GPR(copy(rd_value));
14517 std::string rs = GPR(copy(rs_value));
14518 std::string rt = GPR(copy(rt_value));
14519
14520 return img::format("SOV %s, %s, %s", rd, rs, rt);
14521 }
14522
14523
14524 /*
14525 *
14526 *
14527 * 3 2 1
14528 * 10987654321098765432109876543210
14529 * 001000 01001001101
14530 * rt -----
14531 * rs -----
14532 * rd -----
14533 */
14534 std::string NMD::SPECIAL2(uint64 instruction)
14535 {
14536 uint64 op_value = extract_op_25_to_3(instruction);
14537
14538 std::string op = IMMEDIATE(copy(op_value));
14539
14540 return img::format("SPECIAL2 %s", op);
14541 }
14542
14543
14544 /*
14545 *
14546 *
14547 * 3 2 1
14548 * 10987654321098765432109876543210
14549 * 001000 01001001101
14550 * rt -----
14551 * rs -----
14552 * rd -----
14553 */
14554 std::string NMD::SQRT_D(uint64 instruction)
14555 {
14556 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14557 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14558
14559 std::string ft = FPR(copy(ft_value));
14560 std::string fs = FPR(copy(fs_value));
14561
14562 return img::format("SQRT.D %s, %s", ft, fs);
14563 }
14564
14565
14566 /*
14567 *
14568 *
14569 * 3 2 1
14570 * 10987654321098765432109876543210
14571 * 001000 01001001101
14572 * rt -----
14573 * rs -----
14574 * rd -----
14575 */
14576 std::string NMD::SQRT_S(uint64 instruction)
14577 {
14578 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14579 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14580
14581 std::string ft = FPR(copy(ft_value));
14582 std::string fs = FPR(copy(fs_value));
14583
14584 return img::format("SQRT.S %s, %s", ft, fs);
14585 }
14586
14587
14588 /*
14589 * SRA rd, rt, sa - Shift Word Right Arithmetic
14590 *
14591 * 3 2 1
14592 * 10987654321098765432109876543210
14593 * 00000000000 000011
14594 * rt -----
14595 * rd -----
14596 * sa -----
14597 */
14598 std::string NMD::SRA(uint64 instruction)
14599 {
14600 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14602 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14603
14604 std::string rt = GPR(copy(rt_value));
14605 std::string rs = GPR(copy(rs_value));
14606 std::string shift = IMMEDIATE(copy(shift_value));
14607
14608 return img::format("SRA %s, %s, %s", rt, rs, shift);
14609 }
14610
14611
14612 /*
14613 * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
14614 *
14615 * 3 2 1
14616 * 10987654321098765432109876543210
14617 * 001000 00000000111
14618 * rs -----
14619 * rt -----
14620 * rd -----
14621 */
14622 std::string NMD::SRAV(uint64 instruction)
14623 {
14624 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14625 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14626 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14627
14628 std::string rd = GPR(copy(rd_value));
14629 std::string rs = GPR(copy(rs_value));
14630 std::string rt = GPR(copy(rt_value));
14631
14632 return img::format("SRAV %s, %s, %s", rd, rs, rt);
14633 }
14634
14635
14636 /*
14637 *
14638 *
14639 * 3 2 1
14640 * 10987654321098765432109876543210
14641 * 001000 00000000111
14642 * rs -----
14643 * rt -----
14644 * rd -----
14645 */
14646 std::string NMD::SRL_16_(uint64 instruction)
14647 {
14648 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14649 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14650 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14651
14652 std::string rt3 = GPR(encode_gpr3(rt3_value));
14653 std::string rs3 = GPR(encode_gpr3(rs3_value));
14654 std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));
14655
14656 return img::format("SRL %s, %s, %s", rt3, rs3, shift3);
14657 }
14658
14659
14660 /*
14661 *
14662 *
14663 * 3 2 1
14664 * 10987654321098765432109876543210
14665 * 001000 01001001101
14666 * rt -----
14667 * rs -----
14668 * rd -----
14669 */
14670 std::string NMD::SRL_32_(uint64 instruction)
14671 {
14672 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14673 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14674 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14675
14676 std::string rt = GPR(copy(rt_value));
14677 std::string rs = GPR(copy(rs_value));
14678 std::string shift = IMMEDIATE(copy(shift_value));
14679
14680 return img::format("SRL %s, %s, %s", rt, rs, shift);
14681 }
14682
14683
14684 /*
14685 *
14686 *
14687 * 3 2 1
14688 * 10987654321098765432109876543210
14689 * 001000 01001001101
14690 * rt -----
14691 * rs -----
14692 * rd -----
14693 */
14694 std::string NMD::SRLV(uint64 instruction)
14695 {
14696 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14697 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14698 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14699
14700 std::string rd = GPR(copy(rd_value));
14701 std::string rs = GPR(copy(rs_value));
14702 std::string rt = GPR(copy(rt_value));
14703
14704 return img::format("SRLV %s, %s, %s", rd, rs, rt);
14705 }
14706
14707
14708 /*
14709 *
14710 *
14711 * 3 2 1
14712 * 10987654321098765432109876543210
14713 * 001000 01001001101
14714 * rt -----
14715 * rs -----
14716 * rd -----
14717 */
14718 std::string NMD::SUB(uint64 instruction)
14719 {
14720 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14721 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14722 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14723
14724 std::string rd = GPR(copy(rd_value));
14725 std::string rs = GPR(copy(rs_value));
14726 std::string rt = GPR(copy(rt_value));
14727
14728 return img::format("SUB %s, %s, %s", rd, rs, rt);
14729 }
14730
14731
14732 /*
14733 *
14734 *
14735 * 3 2 1
14736 * 10987654321098765432109876543210
14737 * 001000 01001001101
14738 * rt -----
14739 * rs -----
14740 * rd -----
14741 */
14742 std::string NMD::SUB_D(uint64 instruction)
14743 {
14744 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14745 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14746 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
14747
14748 std::string fd = FPR(copy(fd_value));
14749 std::string fs = FPR(copy(fs_value));
14750 std::string ft = FPR(copy(ft_value));
14751
14752 return img::format("SUB.D %s, %s, %s", fd, fs, ft);
14753 }
14754
14755
14756 /*
14757 *
14758 *
14759 * 3 2 1
14760 * 10987654321098765432109876543210
14761 * 001000 01001001101
14762 * rt -----
14763 * rs -----
14764 * rd -----
14765 */
14766 std::string NMD::SUB_S(uint64 instruction)
14767 {
14768 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14769 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14770 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
14771
14772 std::string fd = FPR(copy(fd_value));
14773 std::string fs = FPR(copy(fs_value));
14774 std::string ft = FPR(copy(ft_value));
14775
14776 return img::format("SUB.S %s, %s, %s", fd, fs, ft);
14777 }
14778
14779
14780 /*
14781 *
14782 *
14783 * 3 2 1
14784 * 10987654321098765432109876543210
14785 * 001000 01001001101
14786 * rt -----
14787 * rs -----
14788 * rd -----
14789 */
14790 std::string NMD::SUBQ_PH(uint64 instruction)
14791 {
14792 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14793 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14794 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14795
14796 std::string rd = GPR(copy(rd_value));
14797 std::string rs = GPR(copy(rs_value));
14798 std::string rt = GPR(copy(rt_value));
14799
14800 return img::format("SUBQ.PH %s, %s, %s", rd, rs, rt);
14801 }
14802
14803
14804 /*
14805 * SUBQH.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
14806 * to Halve Results
14807 *
14808 * 3 2 1
14809 * 10987654321098765432109876543210
14810 * 001000 01001001101
14811 * rt -----
14812 * rs -----
14813 * rd -----
14814 */
14815 std::string NMD::SUBQ_S_PH(uint64 instruction)
14816 {
14817 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14818 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14819 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14820
14821 std::string rd = GPR(copy(rd_value));
14822 std::string rs = GPR(copy(rs_value));
14823 std::string rt = GPR(copy(rt_value));
14824
14825 return img::format("SUBQ_S.PH %s, %s, %s", rd, rs, rt);
14826 }
14827
14828
14829 /*
14830 * SUBQH.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
14831 * to Halve Results
14832 *
14833 * 3 2 1
14834 * 10987654321098765432109876543210
14835 * 001000 01001001101
14836 * rt -----
14837 * rs -----
14838 * rd -----
14839 */
14840 std::string NMD::SUBQ_S_W(uint64 instruction)
14841 {
14842 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14843 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14844 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14845
14846 std::string rd = GPR(copy(rd_value));
14847 std::string rs = GPR(copy(rs_value));
14848 std::string rt = GPR(copy(rt_value));
14849
14850 return img::format("SUBQ_S.W %s, %s, %s", rd, rs, rt);
14851 }
14852
14853
14854 /*
14855 * SUBQH.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
14856 * to Halve Results
14857 *
14858 * 3 2 1
14859 * 10987654321098765432109876543210
14860 * 001000 01001001101
14861 * rt -----
14862 * rs -----
14863 * rd -----
14864 */
14865 std::string NMD::SUBQH_PH(uint64 instruction)
14866 {
14867 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14868 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14869 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14870
14871 std::string rd = GPR(copy(rd_value));
14872 std::string rs = GPR(copy(rs_value));
14873 std::string rt = GPR(copy(rt_value));
14874
14875 return img::format("SUBQH.PH %s, %s, %s", rd, rs, rt);
14876 }
14877
14878
14879 /*
14880 * SUBQH.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
14881 * to Halve Results
14882 *
14883 * 3 2 1
14884 * 10987654321098765432109876543210
14885 * 001000 01001001101
14886 * rt -----
14887 * rs -----
14888 * rd -----
14889 */
14890 std::string NMD::SUBQH_R_PH(uint64 instruction)
14891 {
14892 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14893 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14894 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14895
14896 std::string rd = GPR(copy(rd_value));
14897 std::string rs = GPR(copy(rs_value));
14898 std::string rt = GPR(copy(rt_value));
14899
14900 return img::format("SUBQH_R.PH %s, %s, %s", rd, rs, rt);
14901 }
14902
14903
14904 /*
14905 * SUBQH_R.PH rd, rt, rs - Subtract Fractional Halfword Vectors And Shift Right
14906 * to Halve Results (rounding)
14907 *
14908 * 3 2 1
14909 * 10987654321098765432109876543210
14910 * 001000 11001001101
14911 * rt -----
14912 * rs -----
14913 * rd -----
14914 */
14915 std::string NMD::SUBQH_R_W(uint64 instruction)
14916 {
14917 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14918 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14919 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14920
14921 std::string rd = GPR(copy(rd_value));
14922 std::string rs = GPR(copy(rs_value));
14923 std::string rt = GPR(copy(rt_value));
14924
14925 return img::format("SUBQH_R.W %s, %s, %s", rd, rs, rt);
14926 }
14927
14928
14929 /*
14930 * SUBQH.W rd, rs, rt - Subtract Fractional Words And Shift Right to Halve
14931 * Results
14932 *
14933 * 3 2 1
14934 * 10987654321098765432109876543210
14935 * 001000 01010001101
14936 * rt -----
14937 * rs -----
14938 * rd -----
14939 */
14940 std::string NMD::SUBQH_W(uint64 instruction)
14941 {
14942 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14943 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14944 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14945
14946 std::string rd = GPR(copy(rd_value));
14947 std::string rs = GPR(copy(rs_value));
14948 std::string rt = GPR(copy(rt_value));
14949
14950 return img::format("SUBQH.W %s, %s, %s", rd, rs, rt);
14951 }
14952
14953
14954 /*
14955 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14956 *
14957 * 3 2 1
14958 * 10987654321098765432109876543210
14959 * 001000 00010001101
14960 * rt -----
14961 * rs -----
14962 * rd -----
14963 */
14964 std::string NMD::SUBU_16_(uint64 instruction)
14965 {
14966 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14967 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14968 uint64 rd3_value = extract_rd3_3_2_1(instruction);
14969
14970 std::string rd3 = GPR(encode_gpr3(rd3_value));
14971 std::string rs3 = GPR(encode_gpr3(rs3_value));
14972 std::string rt3 = GPR(encode_gpr3(rt3_value));
14973
14974 return img::format("SUBU %s, %s, %s", rd3, rs3, rt3);
14975 }
14976
14977
14978 /*
14979 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14980 *
14981 * 3 2 1
14982 * 10987654321098765432109876543210
14983 * 001000 00010001101
14984 * rt -----
14985 * rs -----
14986 * rd -----
14987 */
14988 std::string NMD::SUBU_32_(uint64 instruction)
14989 {
14990 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14991 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14992 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14993
14994 std::string rd = GPR(copy(rd_value));
14995 std::string rs = GPR(copy(rs_value));
14996 std::string rt = GPR(copy(rt_value));
14997
14998 return img::format("SUBU %s, %s, %s", rd, rs, rt);
14999 }
15000
15001
15002 /*
15003 * SUBU.PH rd, rs, rt - Subtract Unsigned Integer Halfwords
15004 *
15005 * 3 2 1
15006 * 10987654321098765432109876543210
15007 * 001000 01100001101
15008 * rt -----
15009 * rs -----
15010 * rd -----
15011 */
15012 std::string NMD::SUBU_PH(uint64 instruction)
15013 {
15014 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15015 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15016 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15017
15018 std::string rd = GPR(copy(rd_value));
15019 std::string rs = GPR(copy(rs_value));
15020 std::string rt = GPR(copy(rt_value));
15021
15022 return img::format("SUBU.PH %s, %s, %s", rd, rs, rt);
15023 }
15024
15025
15026 /*
15027 * SUBU.QB rd, rs, rt - Subtract Unsigned Quad Byte Vector
15028 *
15029 * 3 2 1
15030 * 10987654321098765432109876543210
15031 * 001000 01011001101
15032 * rt -----
15033 * rs -----
15034 * rd -----
15035 */
15036 std::string NMD::SUBU_QB(uint64 instruction)
15037 {
15038 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15039 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15040 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15041
15042 std::string rd = GPR(copy(rd_value));
15043 std::string rs = GPR(copy(rs_value));
15044 std::string rt = GPR(copy(rt_value));
15045
15046 return img::format("SUBU.QB %s, %s, %s", rd, rs, rt);
15047 }
15048
15049
15050 /*
15051 * SUBU_S.PH rd, rs, rt - Subtract Unsigned Integer Halfwords (saturating)
15052 *
15053 * 3 2 1
15054 * 10987654321098765432109876543210
15055 * 001000 11100001101
15056 * rt -----
15057 * rs -----
15058 * rd -----
15059 */
15060 std::string NMD::SUBU_S_PH(uint64 instruction)
15061 {
15062 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15063 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15064 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15065
15066 std::string rd = GPR(copy(rd_value));
15067 std::string rs = GPR(copy(rs_value));
15068 std::string rt = GPR(copy(rt_value));
15069
15070 return img::format("SUBU_S.PH %s, %s, %s", rd, rs, rt);
15071 }
15072
15073
15074 /*
15075 * SUBU_S.QB rd, rs, rt - Subtract Unsigned Quad Byte Vector (saturating)
15076 *
15077 * 3 2 1
15078 * 10987654321098765432109876543210
15079 * 001000 11011001101
15080 * rt -----
15081 * rs -----
15082 * rd -----
15083 */
15084 std::string NMD::SUBU_S_QB(uint64 instruction)
15085 {
15086 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15087 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15088 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15089
15090 std::string rd = GPR(copy(rd_value));
15091 std::string rs = GPR(copy(rs_value));
15092 std::string rt = GPR(copy(rt_value));
15093
15094 return img::format("SUBU_S.QB %s, %s, %s", rd, rs, rt);
15095 }
15096
15097
15098 /*
15099 * SUBUH.QB rd, rs, rt - Subtract Unsigned Bytes And Right Shift to Halve
15100 * Results
15101 *
15102 * 3 2 1
15103 * 10987654321098765432109876543210
15104 * 001000 01101001101
15105 * rt -----
15106 * rs -----
15107 * rd -----
15108 */
15109 std::string NMD::SUBUH_QB(uint64 instruction)
15110 {
15111 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15112 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15113 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15114
15115 std::string rd = GPR(copy(rd_value));
15116 std::string rs = GPR(copy(rs_value));
15117 std::string rt = GPR(copy(rt_value));
15118
15119 return img::format("SUBUH.QB %s, %s, %s", rd, rs, rt);
15120 }
15121
15122
15123 /*
15124 * SUBUH_R.QB rd, rs, rt - Subtract Unsigned Bytes And Right Shift to Halve
15125 * Results (rounding)
15126 *
15127 * 3 2 1
15128 * 10987654321098765432109876543210
15129 * 001000 11101001101
15130 * rt -----
15131 * rs -----
15132 * rd -----
15133 */
15134 std::string NMD::SUBUH_R_QB(uint64 instruction)
15135 {
15136 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15137 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15138 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15139
15140 std::string rd = GPR(copy(rd_value));
15141 std::string rs = GPR(copy(rs_value));
15142 std::string rt = GPR(copy(rt_value));
15143
15144 return img::format("SUBUH_R.QB %s, %s, %s", rd, rs, rt);
15145 }
15146
15147
15148 /*
15149 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15150 *
15151 * 3 2 1
15152 * 10987654321098765432109876543210
15153 * 001000 00010001101
15154 * rt -----
15155 * rs -----
15156 * rd -----
15157 */
15158 std::string NMD::SW_16_(uint64 instruction)
15159 {
15160 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
15161 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
15162 uint64 rs3_value = extract_rs3_6_5_4(instruction);
15163
15164 std::string rtz3 = GPR(encode_gpr3_store(rtz3_value));
15165 std::string u = IMMEDIATE(copy(u_value));
15166 std::string rs3 = GPR(encode_gpr3(rs3_value));
15167
15168 return img::format("SW %s, %s(%s)", rtz3, u, rs3);
15169 }
15170
15171
15172 /*
15173 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15174 *
15175 * 3 2 1
15176 * 10987654321098765432109876543210
15177 * 001000 00010001101
15178 * rt -----
15179 * rs -----
15180 * rd -----
15181 */
15182 std::string NMD::SW_4X4_(uint64 instruction)
15183 {
15184 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
15185 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
15186 uint64 u_value = extract_u_3_8__s2(instruction);
15187
15188 std::string rtz4 = GPR(encode_gpr4_zero(rtz4_value));
15189 std::string u = IMMEDIATE(copy(u_value));
15190 std::string rs4 = GPR(encode_gpr4(rs4_value));
15191
15192 return img::format("SW %s, %s(%s)", rtz4, u, rs4);
15193 }
15194
15195
15196 /*
15197 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15198 *
15199 * 3 2 1
15200 * 10987654321098765432109876543210
15201 * 001000 00010001101
15202 * rt -----
15203 * rs -----
15204 * rd -----
15205 */
15206 std::string NMD::SW_GP16_(uint64 instruction)
15207 {
15208 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
15209 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
15210
15211 std::string rtz3 = GPR(encode_gpr3_store(rtz3_value));
15212 std::string u = IMMEDIATE(copy(u_value));
15213
15214 return img::format("SW %s, %s($%d)", rtz3, u, 28);
15215 }
15216
15217
15218 /*
15219 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15220 *
15221 * 3 2 1
15222 * 10987654321098765432109876543210
15223 * 001000 00010001101
15224 * rt -----
15225 * rs -----
15226 * rd -----
15227 */
15228 std::string NMD::SW_GP_(uint64 instruction)
15229 {
15230 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15231 uint64 u_value = extract_u_20_to_2__s2(instruction);
15232
15233 std::string rt = GPR(copy(rt_value));
15234 std::string u = IMMEDIATE(copy(u_value));
15235
15236 return img::format("SW %s, %s($%d)", rt, u, 28);
15237 }
15238
15239
15240 /*
15241 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15242 *
15243 * 3 2 1
15244 * 10987654321098765432109876543210
15245 * 001000 00010001101
15246 * rt -----
15247 * rs -----
15248 * rd -----
15249 */
15250 std::string NMD::SW_S9_(uint64 instruction)
15251 {
15252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15253 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15254 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15255
15256 std::string rt = GPR(copy(rt_value));
15257 std::string s = IMMEDIATE(copy(s_value));
15258 std::string rs = GPR(copy(rs_value));
15259
15260 return img::format("SW %s, %s(%s)", rt, s, rs);
15261 }
15262
15263
15264 /*
15265 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15266 *
15267 * 3 2 1
15268 * 10987654321098765432109876543210
15269 * 001000 00010001101
15270 * rt -----
15271 * rs -----
15272 * rd -----
15273 */
15274 std::string NMD::SW_SP_(uint64 instruction)
15275 {
15276 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
15277 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
15278
15279 std::string rt = GPR(copy(rt_value));
15280 std::string u = IMMEDIATE(copy(u_value));
15281
15282 return img::format("SW %s, %s($%d)", rt, u, 29);
15283 }
15284
15285
15286 /*
15287 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15288 *
15289 * 3 2 1
15290 * 10987654321098765432109876543210
15291 * 001000 00010001101
15292 * rt -----
15293 * rs -----
15294 * rd -----
15295 */
15296 std::string NMD::SW_U12_(uint64 instruction)
15297 {
15298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15300 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15301
15302 std::string rt = GPR(copy(rt_value));
15303 std::string u = IMMEDIATE(copy(u_value));
15304 std::string rs = GPR(copy(rs_value));
15305
15306 return img::format("SW %s, %s(%s)", rt, u, rs);
15307 }
15308
15309
15310 /*
15311 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15312 *
15313 * 3 2 1
15314 * 10987654321098765432109876543210
15315 * 001000 00010001101
15316 * rt -----
15317 * rs -----
15318 * rd -----
15319 */
15320 std::string NMD::SWC1_GP_(uint64 instruction)
15321 {
15322 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15323 uint64 u_value = extract_u_17_to_2__s2(instruction);
15324
15325 std::string ft = FPR(copy(ft_value));
15326 std::string u = IMMEDIATE(copy(u_value));
15327
15328 return img::format("SWC1 %s, %s($%d)", ft, u, 28);
15329 }
15330
15331
15332 /*
15333 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15334 *
15335 * 3 2 1
15336 * 10987654321098765432109876543210
15337 * 001000 00010001101
15338 * rt -----
15339 * rs -----
15340 * rd -----
15341 */
15342 std::string NMD::SWC1_S9_(uint64 instruction)
15343 {
15344 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15345 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15346 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15347
15348 std::string ft = FPR(copy(ft_value));
15349 std::string s = IMMEDIATE(copy(s_value));
15350 std::string rs = GPR(copy(rs_value));
15351
15352 return img::format("SWC1 %s, %s(%s)", ft, s, rs);
15353 }
15354
15355
15356 /*
15357 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15358 *
15359 * 3 2 1
15360 * 10987654321098765432109876543210
15361 * 001000 00010001101
15362 * rt -----
15363 * rs -----
15364 * rd -----
15365 */
15366 std::string NMD::SWC1_U12_(uint64 instruction)
15367 {
15368 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15369 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15370 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15371
15372 std::string ft = FPR(copy(ft_value));
15373 std::string u = IMMEDIATE(copy(u_value));
15374 std::string rs = GPR(copy(rs_value));
15375
15376 return img::format("SWC1 %s, %s(%s)", ft, u, rs);
15377 }
15378
15379
15380 /*
15381 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15382 *
15383 * 3 2 1
15384 * 10987654321098765432109876543210
15385 * 001000 00010001101
15386 * rt -----
15387 * rs -----
15388 * rd -----
15389 */
15390 std::string NMD::SWC1X(uint64 instruction)
15391 {
15392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15393 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15394 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15395
15396 std::string ft = FPR(copy(ft_value));
15397 std::string rs = GPR(copy(rs_value));
15398 std::string rt = GPR(copy(rt_value));
15399
15400 return img::format("SWC1X %s, %s(%s)", ft, rs, rt);
15401 }
15402
15403
15404 /*
15405 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15406 *
15407 * 3 2 1
15408 * 10987654321098765432109876543210
15409 * 001000 00010001101
15410 * rt -----
15411 * rs -----
15412 * rd -----
15413 */
15414 std::string NMD::SWC1XS(uint64 instruction)
15415 {
15416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15417 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15418 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15419
15420 std::string ft = FPR(copy(ft_value));
15421 std::string rs = GPR(copy(rs_value));
15422 std::string rt = GPR(copy(rt_value));
15423
15424 return img::format("SWC1XS %s, %s(%s)", ft, rs, rt);
15425 }
15426
15427
15428 /*
15429 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15430 *
15431 * 3 2 1
15432 * 10987654321098765432109876543210
15433 * 001000 00010001101
15434 * rt -----
15435 * rs -----
15436 * rd -----
15437 */
15438 std::string NMD::SWC2(uint64 instruction)
15439 {
15440 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
15441 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15442 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15443
15444 std::string cs = CPR(copy(cs_value));
15445 std::string s = IMMEDIATE(copy(s_value));
15446 std::string rs = GPR(copy(rs_value));
15447
15448 return img::format("SWC2 %s, %s(%s)", cs, s, rs);
15449 }
15450
15451
15452 /*
15453 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15454 *
15455 * 3 2 1
15456 * 10987654321098765432109876543210
15457 * 001000 00010001101
15458 * rt -----
15459 * rs -----
15460 * rd -----
15461 */
15462 std::string NMD::SWE(uint64 instruction)
15463 {
15464 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15465 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15466 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15467
15468 std::string rt = GPR(copy(rt_value));
15469 std::string s = IMMEDIATE(copy(s_value));
15470 std::string rs = GPR(copy(rs_value));
15471
15472 return img::format("SWE %s, %s(%s)", rt, s, rs);
15473 }
15474
15475
15476 /*
15477 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15478 *
15479 * 3 2 1
15480 * 10987654321098765432109876543210
15481 * 001000 00010001101
15482 * rt -----
15483 * rs -----
15484 * rd -----
15485 */
15486 std::string NMD::SWM(uint64 instruction)
15487 {
15488 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15489 uint64 count3_value = extract_count3_14_13_12(instruction);
15490 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15491 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15492
15493 std::string rt = GPR(copy(rt_value));
15494 std::string s = IMMEDIATE(copy(s_value));
15495 std::string rs = GPR(copy(rs_value));
15496 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
15497
15498 return img::format("SWM %s, %s(%s), %s", rt, s, rs, count3);
15499 }
15500
15501
15502 /*
15503 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15504 *
15505 * 3 2 1
15506 * 10987654321098765432109876543210
15507 * 001000 00010001101
15508 * rt -----
15509 * rs -----
15510 * rd -----
15511 */
15512 std::string NMD::SWPC_48_(uint64 instruction)
15513 {
15514 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
15515 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
15516
15517 std::string rt = GPR(copy(rt_value));
15518 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
15519
15520 return img::format("SWPC %s, %s", rt, s);
15521 }
15522
15523
15524 /*
15525 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15526 *
15527 * 3 2 1
15528 * 10987654321098765432109876543210
15529 * 001000 00010001101
15530 * rt -----
15531 * rs -----
15532 * rd -----
15533 */
15534 std::string NMD::SWX(uint64 instruction)
15535 {
15536 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15537 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15538 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15539
15540 std::string rd = GPR(copy(rd_value));
15541 std::string rs = GPR(copy(rs_value));
15542 std::string rt = GPR(copy(rt_value));
15543
15544 return img::format("SWX %s, %s(%s)", rd, rs, rt);
15545 }
15546
15547
15548 /*
15549 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15550 *
15551 * 3 2 1
15552 * 10987654321098765432109876543210
15553 * 001000 00010001101
15554 * rt -----
15555 * rs -----
15556 * rd -----
15557 */
15558 std::string NMD::SWXS(uint64 instruction)
15559 {
15560 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15561 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15562 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15563
15564 std::string rd = GPR(copy(rd_value));
15565 std::string rs = GPR(copy(rs_value));
15566 std::string rt = GPR(copy(rt_value));
15567
15568 return img::format("SWXS %s, %s(%s)", rd, rs, rt);
15569 }
15570
15571
15572 /*
15573 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15574 *
15575 * 3 2 1
15576 * 10987654321098765432109876543210
15577 * 001000 00010001101
15578 * rt -----
15579 * rs -----
15580 * rd -----
15581 */
15582 std::string NMD::SYNC(uint64 instruction)
15583 {
15584 uint64 stype_value = extract_stype_20_19_18_17_16(instruction);
15585
15586 std::string stype = IMMEDIATE(copy(stype_value));
15587
15588 return img::format("SYNC %s", stype);
15589 }
15590
15591
15592 /*
15593 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15594 *
15595 * 3 2 1
15596 * 10987654321098765432109876543210
15597 * 001000 00010001101
15598 * rt -----
15599 * rs -----
15600 * rd -----
15601 */
15602 std::string NMD::SYNCI(uint64 instruction)
15603 {
15604 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15605 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15606
15607 std::string s = IMMEDIATE(copy(s_value));
15608 std::string rs = GPR(copy(rs_value));
15609
15610 return img::format("SYNCI %s(%s)", s, rs);
15611 }
15612
15613
15614 /*
15615 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15616 *
15617 * 3 2 1
15618 * 10987654321098765432109876543210
15619 * 001000 00010001101
15620 * rt -----
15621 * rs -----
15622 * rd -----
15623 */
15624 std::string NMD::SYNCIE(uint64 instruction)
15625 {
15626 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15627 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15628
15629 std::string s = IMMEDIATE(copy(s_value));
15630 std::string rs = GPR(copy(rs_value));
15631
15632 return img::format("SYNCIE %s(%s)", s, rs);
15633 }
15634
15635
15636 /*
15637 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15638 *
15639 * 3 2 1
15640 * 10987654321098765432109876543210
15641 * 001000 00010001101
15642 * rt -----
15643 * rs -----
15644 * rd -----
15645 */
15646 std::string NMD::SYSCALL_16_(uint64 instruction)
15647 {
15648 uint64 code_value = extract_code_1_0(instruction);
15649
15650 std::string code = IMMEDIATE(copy(code_value));
15651
15652 return img::format("SYSCALL %s", code);
15653 }
15654
15655
15656 /*
15657 * SYSCALL code - System Call. Cause a System Call Exception
15658 *
15659 * 3 2 1
15660 * 10987654321098765432109876543210
15661 * 00000000000010
15662 * code ------------------
15663 */
15664 std::string NMD::SYSCALL_32_(uint64 instruction)
15665 {
15666 uint64 code_value = extract_code_17_to_0(instruction);
15667
15668 std::string code = IMMEDIATE(copy(code_value));
15669
15670 return img::format("SYSCALL %s", code);
15671 }
15672
15673
15674 /*
15675 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15676 *
15677 * 3 2 1
15678 * 10987654321098765432109876543210
15679 * 001000 00010001101
15680 * rt -----
15681 * rs -----
15682 * rd -----
15683 */
15684 std::string NMD::TEQ(uint64 instruction)
15685 {
15686 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15687 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15688
15689 std::string rs = GPR(copy(rs_value));
15690 std::string rt = GPR(copy(rt_value));
15691
15692 return img::format("TEQ %s, %s", rs, rt);
15693 }
15694
15695
15696 /*
15697 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15698 *
15699 * 3 2 1
15700 * 10987654321098765432109876543210
15701 * 001000 00010001101
15702 * rt -----
15703 * rs -----
15704 * rd -----
15705 */
15706 std::string NMD::TLBGINV(uint64 instruction)
15707 {
15708 (void)instruction;
15709
15710 return "TLBGINV ";
15711 }
15712
15713
15714 /*
15715 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15716 *
15717 * 3 2 1
15718 * 10987654321098765432109876543210
15719 * 001000 00010001101
15720 * rt -----
15721 * rs -----
15722 * rd -----
15723 */
15724 std::string NMD::TLBGINVF(uint64 instruction)
15725 {
15726 (void)instruction;
15727
15728 return "TLBGINVF ";
15729 }
15730
15731
15732 /*
15733 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15734 *
15735 * 3 2 1
15736 * 10987654321098765432109876543210
15737 * 001000 00010001101
15738 * rt -----
15739 * rs -----
15740 * rd -----
15741 */
15742 std::string NMD::TLBGP(uint64 instruction)
15743 {
15744 (void)instruction;
15745
15746 return "TLBGP ";
15747 }
15748
15749
15750 /*
15751 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15752 *
15753 * 3 2 1
15754 * 10987654321098765432109876543210
15755 * 001000 00010001101
15756 * rt -----
15757 * rs -----
15758 * rd -----
15759 */
15760 std::string NMD::TLBGR(uint64 instruction)
15761 {
15762 (void)instruction;
15763
15764 return "TLBGR ";
15765 }
15766
15767
15768 /*
15769 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15770 *
15771 * 3 2 1
15772 * 10987654321098765432109876543210
15773 * 001000 00010001101
15774 * rt -----
15775 * rs -----
15776 * rd -----
15777 */
15778 std::string NMD::TLBGWI(uint64 instruction)
15779 {
15780 (void)instruction;
15781
15782 return "TLBGWI ";
15783 }
15784
15785
15786 /*
15787 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15788 *
15789 * 3 2 1
15790 * 10987654321098765432109876543210
15791 * 001000 00010001101
15792 * rt -----
15793 * rs -----
15794 * rd -----
15795 */
15796 std::string NMD::TLBGWR(uint64 instruction)
15797 {
15798 (void)instruction;
15799
15800 return "TLBGWR ";
15801 }
15802
15803
15804 /*
15805 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15806 *
15807 * 3 2 1
15808 * 10987654321098765432109876543210
15809 * 001000 00010001101
15810 * rt -----
15811 * rs -----
15812 * rd -----
15813 */
15814 std::string NMD::TLBINV(uint64 instruction)
15815 {
15816 (void)instruction;
15817
15818 return "TLBINV ";
15819 }
15820
15821
15822 /*
15823 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15824 *
15825 * 3 2 1
15826 * 10987654321098765432109876543210
15827 * 001000 00010001101
15828 * rt -----
15829 * rs -----
15830 * rd -----
15831 */
15832 std::string NMD::TLBINVF(uint64 instruction)
15833 {
15834 (void)instruction;
15835
15836 return "TLBINVF ";
15837 }
15838
15839
15840 /*
15841 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15842 *
15843 * 3 2 1
15844 * 10987654321098765432109876543210
15845 * 001000 00010001101
15846 * rt -----
15847 * rs -----
15848 * rd -----
15849 */
15850 std::string NMD::TLBP(uint64 instruction)
15851 {
15852 (void)instruction;
15853
15854 return "TLBP ";
15855 }
15856
15857
15858 /*
15859 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15860 *
15861 * 3 2 1
15862 * 10987654321098765432109876543210
15863 * 001000 00010001101
15864 * rt -----
15865 * rs -----
15866 * rd -----
15867 */
15868 std::string NMD::TLBR(uint64 instruction)
15869 {
15870 (void)instruction;
15871
15872 return "TLBR ";
15873 }
15874
15875
15876 /*
15877 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15878 *
15879 * 3 2 1
15880 * 10987654321098765432109876543210
15881 * 001000 00010001101
15882 * rt -----
15883 * rs -----
15884 * rd -----
15885 */
15886 std::string NMD::TLBWI(uint64 instruction)
15887 {
15888 (void)instruction;
15889
15890 return "TLBWI ";
15891 }
15892
15893
15894 /*
15895 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15896 *
15897 * 3 2 1
15898 * 10987654321098765432109876543210
15899 * 001000 00010001101
15900 * rt -----
15901 * rs -----
15902 * rd -----
15903 */
15904 std::string NMD::TLBWR(uint64 instruction)
15905 {
15906 (void)instruction;
15907
15908 return "TLBWR ";
15909 }
15910
15911
15912 /*
15913 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15914 *
15915 * 3 2 1
15916 * 10987654321098765432109876543210
15917 * 001000 00010001101
15918 * rt -----
15919 * rs -----
15920 * rd -----
15921 */
15922 std::string NMD::TNE(uint64 instruction)
15923 {
15924 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15925 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15926
15927 std::string rs = GPR(copy(rs_value));
15928 std::string rt = GPR(copy(rt_value));
15929
15930 return img::format("TNE %s, %s", rs, rt);
15931 }
15932
15933
15934 /*
15935 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15936 *
15937 * 3 2 1
15938 * 10987654321098765432109876543210
15939 * 001000 00010001101
15940 * rt -----
15941 * rs -----
15942 * rd -----
15943 */
15944 std::string NMD::TRUNC_L_D(uint64 instruction)
15945 {
15946 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15947 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15948
15949 std::string ft = FPR(copy(ft_value));
15950 std::string fs = FPR(copy(fs_value));
15951
15952 return img::format("TRUNC.L.D %s, %s", ft, fs);
15953 }
15954
15955
15956 /*
15957 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15958 *
15959 * 3 2 1
15960 * 10987654321098765432109876543210
15961 * 001000 00010001101
15962 * rt -----
15963 * rs -----
15964 * rd -----
15965 */
15966 std::string NMD::TRUNC_L_S(uint64 instruction)
15967 {
15968 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15969 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15970
15971 std::string ft = FPR(copy(ft_value));
15972 std::string fs = FPR(copy(fs_value));
15973
15974 return img::format("TRUNC.L.S %s, %s", ft, fs);
15975 }
15976
15977
15978 /*
15979 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15980 *
15981 * 3 2 1
15982 * 10987654321098765432109876543210
15983 * 001000 00010001101
15984 * rt -----
15985 * rs -----
15986 * rd -----
15987 */
15988 std::string NMD::TRUNC_W_D(uint64 instruction)
15989 {
15990 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15991 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15992
15993 std::string ft = FPR(copy(ft_value));
15994 std::string fs = FPR(copy(fs_value));
15995
15996 return img::format("TRUNC.W.D %s, %s", ft, fs);
15997 }
15998
15999
16000 /*
16001 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16002 *
16003 * 3 2 1
16004 * 10987654321098765432109876543210
16005 * 001000 00010001101
16006 * rt -----
16007 * rs -----
16008 * rd -----
16009 */
16010 std::string NMD::TRUNC_W_S(uint64 instruction)
16011 {
16012 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16013 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16014
16015 std::string ft = FPR(copy(ft_value));
16016 std::string fs = FPR(copy(fs_value));
16017
16018 return img::format("TRUNC.W.S %s, %s", ft, fs);
16019 }
16020
16021
16022 /*
16023 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16024 *
16025 * 3 2 1
16026 * 10987654321098765432109876543210
16027 * 001000 00010001101
16028 * rt -----
16029 * rs -----
16030 * rd -----
16031 */
16032 std::string NMD::UALDM(uint64 instruction)
16033 {
16034 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16035 uint64 count3_value = extract_count3_14_13_12(instruction);
16036 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16037 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16038
16039 std::string rt = GPR(copy(rt_value));
16040 std::string s = IMMEDIATE(copy(s_value));
16041 std::string rs = GPR(copy(rs_value));
16042 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16043
16044 return img::format("UALDM %s, %s(%s), %s", rt, s, rs, count3);
16045 }
16046
16047
16048 /*
16049 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16050 *
16051 * 3 2 1
16052 * 10987654321098765432109876543210
16053 * 001000 00010001101
16054 * rt -----
16055 * rs -----
16056 * rd -----
16057 */
16058 std::string NMD::UALH(uint64 instruction)
16059 {
16060 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16061 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16062 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16063
16064 std::string rt = GPR(copy(rt_value));
16065 std::string s = IMMEDIATE(copy(s_value));
16066 std::string rs = GPR(copy(rs_value));
16067
16068 return img::format("UALH %s, %s(%s)", rt, s, rs);
16069 }
16070
16071
16072 /*
16073 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16074 *
16075 * 3 2 1
16076 * 10987654321098765432109876543210
16077 * 001000 00010001101
16078 * rt -----
16079 * rs -----
16080 * rd -----
16081 */
16082 std::string NMD::UALWM(uint64 instruction)
16083 {
16084 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16085 uint64 count3_value = extract_count3_14_13_12(instruction);
16086 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16087 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16088
16089 std::string rt = GPR(copy(rt_value));
16090 std::string s = IMMEDIATE(copy(s_value));
16091 std::string rs = GPR(copy(rs_value));
16092 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16093
16094 return img::format("UALWM %s, %s(%s), %s", rt, s, rs, count3);
16095 }
16096
16097
16098 /*
16099 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16100 *
16101 * 3 2 1
16102 * 10987654321098765432109876543210
16103 * 001000 00010001101
16104 * rt -----
16105 * rs -----
16106 * rd -----
16107 */
16108 std::string NMD::UASDM(uint64 instruction)
16109 {
16110 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16111 uint64 count3_value = extract_count3_14_13_12(instruction);
16112 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16113 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16114
16115 std::string rt = GPR(copy(rt_value));
16116 std::string s = IMMEDIATE(copy(s_value));
16117 std::string rs = GPR(copy(rs_value));
16118 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16119
16120 return img::format("UASDM %s, %s(%s), %s", rt, s, rs, count3);
16121 }
16122
16123
16124 /*
16125 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16126 *
16127 * 3 2 1
16128 * 10987654321098765432109876543210
16129 * 001000 00010001101
16130 * rt -----
16131 * rs -----
16132 * rd -----
16133 */
16134 std::string NMD::UASH(uint64 instruction)
16135 {
16136 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16137 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16138 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16139
16140 std::string rt = GPR(copy(rt_value));
16141 std::string s = IMMEDIATE(copy(s_value));
16142 std::string rs = GPR(copy(rs_value));
16143
16144 return img::format("UASH %s, %s(%s)", rt, s, rs);
16145 }
16146
16147
16148 /*
16149 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16150 *
16151 * 3 2 1
16152 * 10987654321098765432109876543210
16153 * 001000 00010001101
16154 * rt -----
16155 * rs -----
16156 * rd -----
16157 */
16158 std::string NMD::UASWM(uint64 instruction)
16159 {
16160 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16161 uint64 count3_value = extract_count3_14_13_12(instruction);
16162 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16163 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16164
16165 std::string rt = GPR(copy(rt_value));
16166 std::string s = IMMEDIATE(copy(s_value));
16167 std::string rs = GPR(copy(rs_value));
16168 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16169
16170 return img::format("UASWM %s, %s(%s), %s", rt, s, rs, count3);
16171 }
16172
16173
16174 /*
16175 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16176 *
16177 * 3 2 1
16178 * 10987654321098765432109876543210
16179 * 001000 00010001101
16180 * rt -----
16181 * rs -----
16182 * rd -----
16183 */
16184 std::string NMD::UDI(uint64 instruction)
16185 {
16186 uint64 op_value = extract_op_25_to_3(instruction);
16187
16188 std::string op = IMMEDIATE(copy(op_value));
16189
16190 return img::format("UDI %s", op);
16191 }
16192
16193
16194 /*
16195 * WAIT code - Enter Wait State
16196 *
16197 * 3 2 1
16198 * 10987654321098765432109876543210
16199 * 001000 1100001101111111
16200 * code ----------
16201 */
16202 std::string NMD::WAIT(uint64 instruction)
16203 {
16204 uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction);
16205
16206 std::string code = IMMEDIATE(copy(code_value));
16207
16208 return img::format("WAIT %s", code);
16209 }
16210
16211
16212 /*
16213 * WRDSP rt, mask - Write Fields to DSPControl Register from a GPR
16214 *
16215 * 3 2 1
16216 * 10987654321098765432109876543210
16217 * 001000 01011001111111
16218 * rt -----
16219 * mask -------
16220 */
16221 std::string NMD::WRDSP(uint64 instruction)
16222 {
16223 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16224 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
16225
16226 std::string rt = GPR(copy(rt_value));
16227 std::string mask = IMMEDIATE(copy(mask_value));
16228
16229 return img::format("WRDSP %s, %s", rt, mask);
16230 }
16231
16232
16233 /*
16234 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16235 *
16236 * 3 2 1
16237 * 10987654321098765432109876543210
16238 * 001000 00010001101
16239 * rt -----
16240 * rs -----
16241 * rd -----
16242 */
16243 std::string NMD::WRPGPR(uint64 instruction)
16244 {
16245 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16246 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16247
16248 std::string rt = GPR(copy(rt_value));
16249 std::string rs = GPR(copy(rs_value));
16250
16251 return img::format("WRPGPR %s, %s", rt, rs);
16252 }
16253
16254
16255 /*
16256 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16257 *
16258 * 3 2 1
16259 * 10987654321098765432109876543210
16260 * 001000 00010001101
16261 * rt -----
16262 * rs -----
16263 * rd -----
16264 */
16265 std::string NMD::XOR_16_(uint64 instruction)
16266 {
16267 uint64 rt3_value = extract_rt3_9_8_7(instruction);
16268 uint64 rs3_value = extract_rs3_6_5_4(instruction);
16269
16270 std::string rs3 = GPR(encode_gpr3(rs3_value));
16271 std::string rt3 = GPR(encode_gpr3(rt3_value));
16272
16273 return img::format("XOR %s, %s", rs3, rt3);
16274 }
16275
16276
16277 /*
16278 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16279 *
16280 * 3 2 1
16281 * 10987654321098765432109876543210
16282 * 001000 00010001101
16283 * rt -----
16284 * rs -----
16285 * rd -----
16286 */
16287 std::string NMD::XOR_32_(uint64 instruction)
16288 {
16289 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16290 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16291 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
16292
16293 std::string rd = GPR(copy(rd_value));
16294 std::string rs = GPR(copy(rs_value));
16295 std::string rt = GPR(copy(rt_value));
16296
16297 return img::format("XOR %s, %s, %s", rd, rs, rt);
16298 }
16299
16300
16301 /*
16302 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16303 *
16304 * 3 2 1
16305 * 10987654321098765432109876543210
16306 * 001000 00010001101
16307 * rt -----
16308 * rs -----
16309 * rd -----
16310 */
16311 std::string NMD::XORI(uint64 instruction)
16312 {
16313 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16314 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16315 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
16316
16317 std::string rt = GPR(copy(rt_value));
16318 std::string rs = GPR(copy(rs_value));
16319 std::string u = IMMEDIATE(copy(u_value));
16320
16321 return img::format("XORI %s, %s, %s", rt, rs, u);
16322 }
16323
16324
16325 /*
16326 * YIELD rt, rs -
16327 *
16328 * 3 2 1
16329 * 10987654321098765432109876543210
16330 * 001000 00010001101
16331 * rt -----
16332 * rs -----
16333 */
16334 std::string NMD::YIELD(uint64 instruction)
16335 {
16336 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16337 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16338
16339 std::string rt = GPR(copy(rt_value));
16340 std::string rs = GPR(copy(rs_value));
16341
16342 return img::format("YIELD %s, %s", rt, rs);
16343 }
16344
16345
16346
16347 NMD::Pool NMD::P_SYSCALL[2] = {
16348 { instruction , 0 , 0 , 32,
16349 0xfffc0000, 0x00080000, &NMD::SYSCALL_32_ , 0,
16350 0x0 }, /* SYSCALL[32] */
16351 { instruction , 0 , 0 , 32,
16352 0xfffc0000, 0x000c0000, &NMD::HYPCALL , 0,
16353 CP0_ | VZ_ }, /* HYPCALL */
16354 };
16355
16356
16357 NMD::Pool NMD::P_RI[4] = {
16358 { instruction , 0 , 0 , 32,
16359 0xfff80000, 0x00000000, &NMD::SIGRIE , 0,
16360 0x0 }, /* SIGRIE */
16361 { pool , P_SYSCALL , 2 , 32,
16362 0xfff80000, 0x00080000, 0 , 0,
16363 0x0 }, /* P.SYSCALL */
16364 { instruction , 0 , 0 , 32,
16365 0xfff80000, 0x00100000, &NMD::BREAK_32_ , 0,
16366 0x0 }, /* BREAK[32] */
16367 { instruction , 0 , 0 , 32,
16368 0xfff80000, 0x00180000, &NMD::SDBBP_32_ , 0,
16369 EJTAG_ }, /* SDBBP[32] */
16370 };
16371
16372
16373 NMD::Pool NMD::P_ADDIU[2] = {
16374 { pool , P_RI , 4 , 32,
16375 0xffe00000, 0x00000000, 0 , 0,
16376 0x0 }, /* P.RI */
16377 { instruction , 0 , 0 , 32,
16378 0xfc000000, 0x00000000, &NMD::ADDIU_32_ , &NMD::ADDIU_32__cond ,
16379 0x0 }, /* ADDIU[32] */
16380 };
16381
16382
16383 NMD::Pool NMD::P_TRAP[2] = {
16384 { instruction , 0 , 0 , 32,
16385 0xfc0007ff, 0x20000000, &NMD::TEQ , 0,
16386 XMMS_ }, /* TEQ */
16387 { instruction , 0 , 0 , 32,
16388 0xfc0007ff, 0x20000400, &NMD::TNE , 0,
16389 XMMS_ }, /* TNE */
16390 };
16391
16392
16393 NMD::Pool NMD::P_CMOVE[2] = {
16394 { instruction , 0 , 0 , 32,
16395 0xfc0007ff, 0x20000210, &NMD::MOVZ , 0,
16396 0x0 }, /* MOVZ */
16397 { instruction , 0 , 0 , 32,
16398 0xfc0007ff, 0x20000610, &NMD::MOVN , 0,
16399 0x0 }, /* MOVN */
16400 };
16401
16402
16403 NMD::Pool NMD::P_D_MT_VPE[2] = {
16404 { instruction , 0 , 0 , 32,
16405 0xfc1f3fff, 0x20010ab0, &NMD::DMT , 0,
16406 MT_ }, /* DMT */
16407 { instruction , 0 , 0 , 32,
16408 0xfc1f3fff, 0x20000ab0, &NMD::DVPE , 0,
16409 MT_ }, /* DVPE */
16410 };
16411
16412
16413 NMD::Pool NMD::P_E_MT_VPE[2] = {
16414 { instruction , 0 , 0 , 32,
16415 0xfc1f3fff, 0x20010eb0, &NMD::EMT , 0,
16416 MT_ }, /* EMT */
16417 { instruction , 0 , 0 , 32,
16418 0xfc1f3fff, 0x20000eb0, &NMD::EVPE , 0,
16419 MT_ }, /* EVPE */
16420 };
16421
16422
16423 NMD::Pool NMD::_P_MT_VPE[2] = {
16424 { pool , P_D_MT_VPE , 2 , 32,
16425 0xfc003fff, 0x20000ab0, 0 , 0,
16426 0x0 }, /* P.D_MT_VPE */
16427 { pool , P_E_MT_VPE , 2 , 32,
16428 0xfc003fff, 0x20000eb0, 0 , 0,
16429 0x0 }, /* P.E_MT_VPE */
16430 };
16431
16432
16433 NMD::Pool NMD::P_MT_VPE[8] = {
16434 { reserved_block , 0 , 0 , 32,
16435 0xfc003bff, 0x200002b0, 0 , 0,
16436 0x0 }, /* P.MT_VPE~*(0) */
16437 { pool , _P_MT_VPE , 2 , 32,
16438 0xfc003bff, 0x20000ab0, 0 , 0,
16439 0x0 }, /* _P.MT_VPE */
16440 { reserved_block , 0 , 0 , 32,
16441 0xfc003bff, 0x200012b0, 0 , 0,
16442 0x0 }, /* P.MT_VPE~*(2) */
16443 { reserved_block , 0 , 0 , 32,
16444 0xfc003bff, 0x20001ab0, 0 , 0,
16445 0x0 }, /* P.MT_VPE~*(3) */
16446 { reserved_block , 0 , 0 , 32,
16447 0xfc003bff, 0x200022b0, 0 , 0,
16448 0x0 }, /* P.MT_VPE~*(4) */
16449 { reserved_block , 0 , 0 , 32,
16450 0xfc003bff, 0x20002ab0, 0 , 0,
16451 0x0 }, /* P.MT_VPE~*(5) */
16452 { reserved_block , 0 , 0 , 32,
16453 0xfc003bff, 0x200032b0, 0 , 0,
16454 0x0 }, /* P.MT_VPE~*(6) */
16455 { reserved_block , 0 , 0 , 32,
16456 0xfc003bff, 0x20003ab0, 0 , 0,
16457 0x0 }, /* P.MT_VPE~*(7) */
16458 };
16459
16460
16461 NMD::Pool NMD::P_DVP[2] = {
16462 { instruction , 0 , 0 , 32,
16463 0xfc00ffff, 0x20000390, &NMD::DVP , 0,
16464 0x0 }, /* DVP */
16465 { instruction , 0 , 0 , 32,
16466 0xfc00ffff, 0x20000790, &NMD::EVP , 0,
16467 0x0 }, /* EVP */
16468 };
16469
16470
16471 NMD::Pool NMD::P_SLTU[2] = {
16472 { pool , P_DVP , 2 , 32,
16473 0xfc00fbff, 0x20000390, 0 , 0,
16474 0x0 }, /* P.DVP */
16475 { instruction , 0 , 0 , 32,
16476 0xfc0003ff, 0x20000390, &NMD::SLTU , &NMD::SLTU_cond ,
16477 0x0 }, /* SLTU */
16478 };
16479
16480
16481 NMD::Pool NMD::_POOL32A0[128] = {
16482 { pool , P_TRAP , 2 , 32,
16483 0xfc0003ff, 0x20000000, 0 , 0,
16484 0x0 }, /* P.TRAP */
16485 { instruction , 0 , 0 , 32,
16486 0xfc0003ff, 0x20000008, &NMD::SEB , 0,
16487 XMMS_ }, /* SEB */
16488 { instruction , 0 , 0 , 32,
16489 0xfc0003ff, 0x20000010, &NMD::SLLV , 0,
16490 0x0 }, /* SLLV */
16491 { instruction , 0 , 0 , 32,
16492 0xfc0003ff, 0x20000018, &NMD::MUL_32_ , 0,
16493 0x0 }, /* MUL[32] */
16494 { reserved_block , 0 , 0 , 32,
16495 0xfc0003ff, 0x20000020, 0 , 0,
16496 0x0 }, /* _POOL32A0~*(4) */
16497 { reserved_block , 0 , 0 , 32,
16498 0xfc0003ff, 0x20000028, 0 , 0,
16499 0x0 }, /* _POOL32A0~*(5) */
16500 { instruction , 0 , 0 , 32,
16501 0xfc0003ff, 0x20000030, &NMD::MFC0 , 0,
16502 0x0 }, /* MFC0 */
16503 { instruction , 0 , 0 , 32,
16504 0xfc0003ff, 0x20000038, &NMD::MFHC0 , 0,
16505 CP0_ | MVH_ }, /* MFHC0 */
16506 { reserved_block , 0 , 0 , 32,
16507 0xfc0003ff, 0x20000040, 0 , 0,
16508 0x0 }, /* _POOL32A0~*(8) */
16509 { instruction , 0 , 0 , 32,
16510 0xfc0003ff, 0x20000048, &NMD::SEH , 0,
16511 0x0 }, /* SEH */
16512 { instruction , 0 , 0 , 32,
16513 0xfc0003ff, 0x20000050, &NMD::SRLV , 0,
16514 0x0 }, /* SRLV */
16515 { instruction , 0 , 0 , 32,
16516 0xfc0003ff, 0x20000058, &NMD::MUH , 0,
16517 0x0 }, /* MUH */
16518 { reserved_block , 0 , 0 , 32,
16519 0xfc0003ff, 0x20000060, 0 , 0,
16520 0x0 }, /* _POOL32A0~*(12) */
16521 { reserved_block , 0 , 0 , 32,
16522 0xfc0003ff, 0x20000068, 0 , 0,
16523 0x0 }, /* _POOL32A0~*(13) */
16524 { instruction , 0 , 0 , 32,
16525 0xfc0003ff, 0x20000070, &NMD::MTC0 , 0,
16526 CP0_ }, /* MTC0 */
16527 { instruction , 0 , 0 , 32,
16528 0xfc0003ff, 0x20000078, &NMD::MTHC0 , 0,
16529 CP0_ | MVH_ }, /* MTHC0 */
16530 { reserved_block , 0 , 0 , 32,
16531 0xfc0003ff, 0x20000080, 0 , 0,
16532 0x0 }, /* _POOL32A0~*(16) */
16533 { reserved_block , 0 , 0 , 32,
16534 0xfc0003ff, 0x20000088, 0 , 0,
16535 0x0 }, /* _POOL32A0~*(17) */
16536 { instruction , 0 , 0 , 32,
16537 0xfc0003ff, 0x20000090, &NMD::SRAV , 0,
16538 0x0 }, /* SRAV */
16539 { instruction , 0 , 0 , 32,
16540 0xfc0003ff, 0x20000098, &NMD::MULU , 0,
16541 0x0 }, /* MULU */
16542 { reserved_block , 0 , 0 , 32,
16543 0xfc0003ff, 0x200000a0, 0 , 0,
16544 0x0 }, /* _POOL32A0~*(20) */
16545 { reserved_block , 0 , 0 , 32,
16546 0xfc0003ff, 0x200000a8, 0 , 0,
16547 0x0 }, /* _POOL32A0~*(21) */
16548 { instruction , 0 , 0 , 32,
16549 0xfc0003ff, 0x200000b0, &NMD::MFGC0 , 0,
16550 CP0_ | VZ_ }, /* MFGC0 */
16551 { instruction , 0 , 0 , 32,
16552 0xfc0003ff, 0x200000b8, &NMD::MFHGC0 , 0,
16553 CP0_ | VZ_ | MVH_ }, /* MFHGC0 */
16554 { reserved_block , 0 , 0 , 32,
16555 0xfc0003ff, 0x200000c0, 0 , 0,
16556 0x0 }, /* _POOL32A0~*(24) */
16557 { reserved_block , 0 , 0 , 32,
16558 0xfc0003ff, 0x200000c8, 0 , 0,
16559 0x0 }, /* _POOL32A0~*(25) */
16560 { instruction , 0 , 0 , 32,
16561 0xfc0003ff, 0x200000d0, &NMD::ROTRV , 0,
16562 0x0 }, /* ROTRV */
16563 { instruction , 0 , 0 , 32,
16564 0xfc0003ff, 0x200000d8, &NMD::MUHU , 0,
16565 0x0 }, /* MUHU */
16566 { reserved_block , 0 , 0 , 32,
16567 0xfc0003ff, 0x200000e0, 0 , 0,
16568 0x0 }, /* _POOL32A0~*(28) */
16569 { reserved_block , 0 , 0 , 32,
16570 0xfc0003ff, 0x200000e8, 0 , 0,
16571 0x0 }, /* _POOL32A0~*(29) */
16572 { instruction , 0 , 0 , 32,
16573 0xfc0003ff, 0x200000f0, &NMD::MTGC0 , 0,
16574 CP0_ | VZ_ }, /* MTGC0 */
16575 { instruction , 0 , 0 , 32,
16576 0xfc0003ff, 0x200000f8, &NMD::MTHGC0 , 0,
16577 CP0_ | VZ_ | MVH_ }, /* MTHGC0 */
16578 { reserved_block , 0 , 0 , 32,
16579 0xfc0003ff, 0x20000100, 0 , 0,
16580 0x0 }, /* _POOL32A0~*(32) */
16581 { reserved_block , 0 , 0 , 32,
16582 0xfc0003ff, 0x20000108, 0 , 0,
16583 0x0 }, /* _POOL32A0~*(33) */
16584 { instruction , 0 , 0 , 32,
16585 0xfc0003ff, 0x20000110, &NMD::ADD , 0,
16586 XMMS_ }, /* ADD */
16587 { instruction , 0 , 0 , 32,
16588 0xfc0003ff, 0x20000118, &NMD::DIV , 0,
16589 0x0 }, /* DIV */
16590 { reserved_block , 0 , 0 , 32,
16591 0xfc0003ff, 0x20000120, 0 , 0,
16592 0x0 }, /* _POOL32A0~*(36) */
16593 { reserved_block , 0 , 0 , 32,
16594 0xfc0003ff, 0x20000128, 0 , 0,
16595 0x0 }, /* _POOL32A0~*(37) */
16596 { instruction , 0 , 0 , 32,
16597 0xfc0003ff, 0x20000130, &NMD::DMFC0 , 0,
16598 CP0_ | MIPS64_ }, /* DMFC0 */
16599 { reserved_block , 0 , 0 , 32,
16600 0xfc0003ff, 0x20000138, 0 , 0,
16601 0x0 }, /* _POOL32A0~*(39) */
16602 { reserved_block , 0 , 0 , 32,
16603 0xfc0003ff, 0x20000140, 0 , 0,
16604 0x0 }, /* _POOL32A0~*(40) */
16605 { reserved_block , 0 , 0 , 32,
16606 0xfc0003ff, 0x20000148, 0 , 0,
16607 0x0 }, /* _POOL32A0~*(41) */
16608 { instruction , 0 , 0 , 32,
16609 0xfc0003ff, 0x20000150, &NMD::ADDU_32_ , 0,
16610 0x0 }, /* ADDU[32] */
16611 { instruction , 0 , 0 , 32,
16612 0xfc0003ff, 0x20000158, &NMD::MOD , 0,
16613 0x0 }, /* MOD */
16614 { reserved_block , 0 , 0 , 32,
16615 0xfc0003ff, 0x20000160, 0 , 0,
16616 0x0 }, /* _POOL32A0~*(44) */
16617 { reserved_block , 0 , 0 , 32,
16618 0xfc0003ff, 0x20000168, 0 , 0,
16619 0x0 }, /* _POOL32A0~*(45) */
16620 { instruction , 0 , 0 , 32,
16621 0xfc0003ff, 0x20000170, &NMD::DMTC0 , 0,
16622 CP0_ | MIPS64_ }, /* DMTC0 */
16623 { reserved_block , 0 , 0 , 32,
16624 0xfc0003ff, 0x20000178, 0 , 0,
16625 0x0 }, /* _POOL32A0~*(47) */
16626 { reserved_block , 0 , 0 , 32,
16627 0xfc0003ff, 0x20000180, 0 , 0,
16628 0x0 }, /* _POOL32A0~*(48) */
16629 { reserved_block , 0 , 0 , 32,
16630 0xfc0003ff, 0x20000188, 0 , 0,
16631 0x0 }, /* _POOL32A0~*(49) */
16632 { instruction , 0 , 0 , 32,
16633 0xfc0003ff, 0x20000190, &NMD::SUB , 0,
16634 XMMS_ }, /* SUB */
16635 { instruction , 0 , 0 , 32,
16636 0xfc0003ff, 0x20000198, &NMD::DIVU , 0,
16637 0x0 }, /* DIVU */
16638 { reserved_block , 0 , 0 , 32,
16639 0xfc0003ff, 0x200001a0, 0 , 0,
16640 0x0 }, /* _POOL32A0~*(52) */
16641 { reserved_block , 0 , 0 , 32,
16642 0xfc0003ff, 0x200001a8, 0 , 0,
16643 0x0 }, /* _POOL32A0~*(53) */
16644 { instruction , 0 , 0 , 32,
16645 0xfc0003ff, 0x200001b0, &NMD::DMFGC0 , 0,
16646 CP0_ | MIPS64_ | VZ_}, /* DMFGC0 */
16647 { reserved_block , 0 , 0 , 32,
16648 0xfc0003ff, 0x200001b8, 0 , 0,
16649 0x0 }, /* _POOL32A0~*(55) */
16650 { instruction , 0 , 0 , 32,
16651 0xfc0003ff, 0x200001c0, &NMD::RDHWR , 0,
16652 XMMS_ }, /* RDHWR */
16653 { reserved_block , 0 , 0 , 32,
16654 0xfc0003ff, 0x200001c8, 0 , 0,
16655 0x0 }, /* _POOL32A0~*(57) */
16656 { instruction , 0 , 0 , 32,
16657 0xfc0003ff, 0x200001d0, &NMD::SUBU_32_ , 0,
16658 0x0 }, /* SUBU[32] */
16659 { instruction , 0 , 0 , 32,
16660 0xfc0003ff, 0x200001d8, &NMD::MODU , 0,
16661 0x0 }, /* MODU */
16662 { reserved_block , 0 , 0 , 32,
16663 0xfc0003ff, 0x200001e0, 0 , 0,
16664 0x0 }, /* _POOL32A0~*(60) */
16665 { reserved_block , 0 , 0 , 32,
16666 0xfc0003ff, 0x200001e8, 0 , 0,
16667 0x0 }, /* _POOL32A0~*(61) */
16668 { instruction , 0 , 0 , 32,
16669 0xfc0003ff, 0x200001f0, &NMD::DMTGC0 , 0,
16670 CP0_ | MIPS64_ | VZ_}, /* DMTGC0 */
16671 { reserved_block , 0 , 0 , 32,
16672 0xfc0003ff, 0x200001f8, 0 , 0,
16673 0x0 }, /* _POOL32A0~*(63) */
16674 { reserved_block , 0 , 0 , 32,
16675 0xfc0003ff, 0x20000200, 0 , 0,
16676 0x0 }, /* _POOL32A0~*(64) */
16677 { reserved_block , 0 , 0 , 32,
16678 0xfc0003ff, 0x20000208, 0 , 0,
16679 0x0 }, /* _POOL32A0~*(65) */
16680 { pool , P_CMOVE , 2 , 32,
16681 0xfc0003ff, 0x20000210, 0 , 0,
16682 0x0 }, /* P.CMOVE */
16683 { reserved_block , 0 , 0 , 32,
16684 0xfc0003ff, 0x20000218, 0 , 0,
16685 0x0 }, /* _POOL32A0~*(67) */
16686 { reserved_block , 0 , 0 , 32,
16687 0xfc0003ff, 0x20000220, 0 , 0,
16688 0x0 }, /* _POOL32A0~*(68) */
16689 { instruction , 0 , 0 , 32,
16690 0xfc0003ff, 0x20000228, &NMD::FORK , 0,
16691 MT_ }, /* FORK */
16692 { instruction , 0 , 0 , 32,
16693 0xfc0003ff, 0x20000230, &NMD::MFTR , 0,
16694 MT_ }, /* MFTR */
16695 { instruction , 0 , 0 , 32,
16696 0xfc0003ff, 0x20000238, &NMD::MFHTR , 0,
16697 MT_ }, /* MFHTR */
16698 { reserved_block , 0 , 0 , 32,
16699 0xfc0003ff, 0x20000240, 0 , 0,
16700 0x0 }, /* _POOL32A0~*(72) */
16701 { reserved_block , 0 , 0 , 32,
16702 0xfc0003ff, 0x20000248, 0 , 0,
16703 0x0 }, /* _POOL32A0~*(73) */
16704 { instruction , 0 , 0 , 32,
16705 0xfc0003ff, 0x20000250, &NMD::AND_32_ , 0,
16706 0x0 }, /* AND[32] */
16707 { reserved_block , 0 , 0 , 32,
16708 0xfc0003ff, 0x20000258, 0 , 0,
16709 0x0 }, /* _POOL32A0~*(75) */
16710 { reserved_block , 0 , 0 , 32,
16711 0xfc0003ff, 0x20000260, 0 , 0,
16712 0x0 }, /* _POOL32A0~*(76) */
16713 { instruction , 0 , 0 , 32,
16714 0xfc0003ff, 0x20000268, &NMD::YIELD , 0,
16715 MT_ }, /* YIELD */
16716 { instruction , 0 , 0 , 32,
16717 0xfc0003ff, 0x20000270, &NMD::MTTR , 0,
16718 MT_ }, /* MTTR */
16719 { instruction , 0 , 0 , 32,
16720 0xfc0003ff, 0x20000278, &NMD::MTHTR , 0,
16721 MT_ }, /* MTHTR */
16722 { reserved_block , 0 , 0 , 32,
16723 0xfc0003ff, 0x20000280, 0 , 0,
16724 0x0 }, /* _POOL32A0~*(80) */
16725 { reserved_block , 0 , 0 , 32,
16726 0xfc0003ff, 0x20000288, 0 , 0,
16727 0x0 }, /* _POOL32A0~*(81) */
16728 { instruction , 0 , 0 , 32,
16729 0xfc0003ff, 0x20000290, &NMD::OR_32_ , 0,
16730 0x0 }, /* OR[32] */
16731 { reserved_block , 0 , 0 , 32,
16732 0xfc0003ff, 0x20000298, 0 , 0,
16733 0x0 }, /* _POOL32A0~*(83) */
16734 { reserved_block , 0 , 0 , 32,
16735 0xfc0003ff, 0x200002a0, 0 , 0,
16736 0x0 }, /* _POOL32A0~*(84) */
16737 { reserved_block , 0 , 0 , 32,
16738 0xfc0003ff, 0x200002a8, 0 , 0,
16739 0x0 }, /* _POOL32A0~*(85) */
16740 { pool , P_MT_VPE , 8 , 32,
16741 0xfc0003ff, 0x200002b0, 0 , 0,
16742 0x0 }, /* P.MT_VPE */
16743 { reserved_block , 0 , 0 , 32,
16744 0xfc0003ff, 0x200002b8, 0 , 0,
16745 0x0 }, /* _POOL32A0~*(87) */
16746 { reserved_block , 0 , 0 , 32,
16747 0xfc0003ff, 0x200002c0, 0 , 0,
16748 0x0 }, /* _POOL32A0~*(88) */
16749 { reserved_block , 0 , 0 , 32,
16750 0xfc0003ff, 0x200002c8, 0 , 0,
16751 0x0 }, /* _POOL32A0~*(89) */
16752 { instruction , 0 , 0 , 32,
16753 0xfc0003ff, 0x200002d0, &NMD::NOR , 0,
16754 0x0 }, /* NOR */
16755 { reserved_block , 0 , 0 , 32,
16756 0xfc0003ff, 0x200002d8, 0 , 0,
16757 0x0 }, /* _POOL32A0~*(91) */
16758 { reserved_block , 0 , 0 , 32,
16759 0xfc0003ff, 0x200002e0, 0 , 0,
16760 0x0 }, /* _POOL32A0~*(92) */
16761 { reserved_block , 0 , 0 , 32,
16762 0xfc0003ff, 0x200002e8, 0 , 0,
16763 0x0 }, /* _POOL32A0~*(93) */
16764 { reserved_block , 0 , 0 , 32,
16765 0xfc0003ff, 0x200002f0, 0 , 0,
16766 0x0 }, /* _POOL32A0~*(94) */
16767 { reserved_block , 0 , 0 , 32,
16768 0xfc0003ff, 0x200002f8, 0 , 0,
16769 0x0 }, /* _POOL32A0~*(95) */
16770 { reserved_block , 0 , 0 , 32,
16771 0xfc0003ff, 0x20000300, 0 , 0,
16772 0x0 }, /* _POOL32A0~*(96) */
16773 { reserved_block , 0 , 0 , 32,
16774 0xfc0003ff, 0x20000308, 0 , 0,
16775 0x0 }, /* _POOL32A0~*(97) */
16776 { instruction , 0 , 0 , 32,
16777 0xfc0003ff, 0x20000310, &NMD::XOR_32_ , 0,
16778 0x0 }, /* XOR[32] */
16779 { reserved_block , 0 , 0 , 32,
16780 0xfc0003ff, 0x20000318, 0 , 0,
16781 0x0 }, /* _POOL32A0~*(99) */
16782 { reserved_block , 0 , 0 , 32,
16783 0xfc0003ff, 0x20000320, 0 , 0,
16784 0x0 }, /* _POOL32A0~*(100) */
16785 { reserved_block , 0 , 0 , 32,
16786 0xfc0003ff, 0x20000328, 0 , 0,
16787 0x0 }, /* _POOL32A0~*(101) */
16788 { reserved_block , 0 , 0 , 32,
16789 0xfc0003ff, 0x20000330, 0 , 0,
16790 0x0 }, /* _POOL32A0~*(102) */
16791 { reserved_block , 0 , 0 , 32,
16792 0xfc0003ff, 0x20000338, 0 , 0,
16793 0x0 }, /* _POOL32A0~*(103) */
16794 { reserved_block , 0 , 0 , 32,
16795 0xfc0003ff, 0x20000340, 0 , 0,
16796 0x0 }, /* _POOL32A0~*(104) */
16797 { reserved_block , 0 , 0 , 32,
16798 0xfc0003ff, 0x20000348, 0 , 0,
16799 0x0 }, /* _POOL32A0~*(105) */
16800 { instruction , 0 , 0 , 32,
16801 0xfc0003ff, 0x20000350, &NMD::SLT , 0,
16802 0x0 }, /* SLT */
16803 { reserved_block , 0 , 0 , 32,
16804 0xfc0003ff, 0x20000358, 0 , 0,
16805 0x0 }, /* _POOL32A0~*(107) */
16806 { reserved_block , 0 , 0 , 32,
16807 0xfc0003ff, 0x20000360, 0 , 0,
16808 0x0 }, /* _POOL32A0~*(108) */
16809 { reserved_block , 0 , 0 , 32,
16810 0xfc0003ff, 0x20000368, 0 , 0,
16811 0x0 }, /* _POOL32A0~*(109) */
16812 { reserved_block , 0 , 0 , 32,
16813 0xfc0003ff, 0x20000370, 0 , 0,
16814 0x0 }, /* _POOL32A0~*(110) */
16815 { reserved_block , 0 , 0 , 32,
16816 0xfc0003ff, 0x20000378, 0 , 0,
16817 0x0 }, /* _POOL32A0~*(111) */
16818 { reserved_block , 0 , 0 , 32,
16819 0xfc0003ff, 0x20000380, 0 , 0,
16820 0x0 }, /* _POOL32A0~*(112) */
16821 { reserved_block , 0 , 0 , 32,
16822 0xfc0003ff, 0x20000388, 0 , 0,
16823 0x0 }, /* _POOL32A0~*(113) */
16824 { pool , P_SLTU , 2 , 32,
16825 0xfc0003ff, 0x20000390, 0 , 0,
16826 0x0 }, /* P.SLTU */
16827 { reserved_block , 0 , 0 , 32,
16828 0xfc0003ff, 0x20000398, 0 , 0,
16829 0x0 }, /* _POOL32A0~*(115) */
16830 { reserved_block , 0 , 0 , 32,
16831 0xfc0003ff, 0x200003a0, 0 , 0,
16832 0x0 }, /* _POOL32A0~*(116) */
16833 { reserved_block , 0 , 0 , 32,
16834 0xfc0003ff, 0x200003a8, 0 , 0,
16835 0x0 }, /* _POOL32A0~*(117) */
16836 { reserved_block , 0 , 0 , 32,
16837 0xfc0003ff, 0x200003b0, 0 , 0,
16838 0x0 }, /* _POOL32A0~*(118) */
16839 { reserved_block , 0 , 0 , 32,
16840 0xfc0003ff, 0x200003b8, 0 , 0,
16841 0x0 }, /* _POOL32A0~*(119) */
16842 { reserved_block , 0 , 0 , 32,
16843 0xfc0003ff, 0x200003c0, 0 , 0,
16844 0x0 }, /* _POOL32A0~*(120) */
16845 { reserved_block , 0 , 0 , 32,
16846 0xfc0003ff, 0x200003c8, 0 , 0,
16847 0x0 }, /* _POOL32A0~*(121) */
16848 { instruction , 0 , 0 , 32,
16849 0xfc0003ff, 0x200003d0, &NMD::SOV , 0,
16850 0x0 }, /* SOV */
16851 { reserved_block , 0 , 0 , 32,
16852 0xfc0003ff, 0x200003d8, 0 , 0,
16853 0x0 }, /* _POOL32A0~*(123) */
16854 { reserved_block , 0 , 0 , 32,
16855 0xfc0003ff, 0x200003e0, 0 , 0,
16856 0x0 }, /* _POOL32A0~*(124) */
16857 { reserved_block , 0 , 0 , 32,
16858 0xfc0003ff, 0x200003e8, 0 , 0,
16859 0x0 }, /* _POOL32A0~*(125) */
16860 { reserved_block , 0 , 0 , 32,
16861 0xfc0003ff, 0x200003f0, 0 , 0,
16862 0x0 }, /* _POOL32A0~*(126) */
16863 { reserved_block , 0 , 0 , 32,
16864 0xfc0003ff, 0x200003f8, 0 , 0,
16865 0x0 }, /* _POOL32A0~*(127) */
16866 };
16867
16868
16869 NMD::Pool NMD::ADDQ__S__PH[2] = {
16870 { instruction , 0 , 0 , 32,
16871 0xfc0007ff, 0x2000000d, &NMD::ADDQ_PH , 0,
16872 DSP_ }, /* ADDQ.PH */
16873 { instruction , 0 , 0 , 32,
16874 0xfc0007ff, 0x2000040d, &NMD::ADDQ_S_PH , 0,
16875 DSP_ }, /* ADDQ_S.PH */
16876 };
16877
16878
16879 NMD::Pool NMD::MUL__S__PH[2] = {
16880 { instruction , 0 , 0 , 32,
16881 0xfc0007ff, 0x2000002d, &NMD::MUL_PH , 0,
16882 DSP_ }, /* MUL.PH */
16883 { instruction , 0 , 0 , 32,
16884 0xfc0007ff, 0x2000042d, &NMD::MUL_S_PH , 0,
16885 DSP_ }, /* MUL_S.PH */
16886 };
16887
16888
16889 NMD::Pool NMD::ADDQH__R__PH[2] = {
16890 { instruction , 0 , 0 , 32,
16891 0xfc0007ff, 0x2000004d, &NMD::ADDQH_PH , 0,
16892 DSP_ }, /* ADDQH.PH */
16893 { instruction , 0 , 0 , 32,
16894 0xfc0007ff, 0x2000044d, &NMD::ADDQH_R_PH , 0,
16895 DSP_ }, /* ADDQH_R.PH */
16896 };
16897
16898
16899 NMD::Pool NMD::ADDQH__R__W[2] = {
16900 { instruction , 0 , 0 , 32,
16901 0xfc0007ff, 0x2000008d, &NMD::ADDQH_W , 0,
16902 DSP_ }, /* ADDQH.W */
16903 { instruction , 0 , 0 , 32,
16904 0xfc0007ff, 0x2000048d, &NMD::ADDQH_R_W , 0,
16905 DSP_ }, /* ADDQH_R.W */
16906 };
16907
16908
16909 NMD::Pool NMD::ADDU__S__QB[2] = {
16910 { instruction , 0 , 0 , 32,
16911 0xfc0007ff, 0x200000cd, &NMD::ADDU_QB , 0,
16912 DSP_ }, /* ADDU.QB */
16913 { instruction , 0 , 0 , 32,
16914 0xfc0007ff, 0x200004cd, &NMD::ADDU_S_QB , 0,
16915 DSP_ }, /* ADDU_S.QB */
16916 };
16917
16918
16919 NMD::Pool NMD::ADDU__S__PH[2] = {
16920 { instruction , 0 , 0 , 32,
16921 0xfc0007ff, 0x2000010d, &NMD::ADDU_PH , 0,
16922 DSP_ }, /* ADDU.PH */
16923 { instruction , 0 , 0 , 32,
16924 0xfc0007ff, 0x2000050d, &NMD::ADDU_S_PH , 0,
16925 DSP_ }, /* ADDU_S.PH */
16926 };
16927
16928
16929 NMD::Pool NMD::ADDUH__R__QB[2] = {
16930 { instruction , 0 , 0 , 32,
16931 0xfc0007ff, 0x2000014d, &NMD::ADDUH_QB , 0,
16932 DSP_ }, /* ADDUH.QB */
16933 { instruction , 0 , 0 , 32,
16934 0xfc0007ff, 0x2000054d, &NMD::ADDUH_R_QB , 0,
16935 DSP_ }, /* ADDUH_R.QB */
16936 };
16937
16938
16939 NMD::Pool NMD::SHRAV__R__PH[2] = {
16940 { instruction , 0 , 0 , 32,
16941 0xfc0007ff, 0x2000018d, &NMD::SHRAV_PH , 0,
16942 DSP_ }, /* SHRAV.PH */
16943 { instruction , 0 , 0 , 32,
16944 0xfc0007ff, 0x2000058d, &NMD::SHRAV_R_PH , 0,
16945 DSP_ }, /* SHRAV_R.PH */
16946 };
16947
16948
16949 NMD::Pool NMD::SHRAV__R__QB[2] = {
16950 { instruction , 0 , 0 , 32,
16951 0xfc0007ff, 0x200001cd, &NMD::SHRAV_QB , 0,
16952 DSP_ }, /* SHRAV.QB */
16953 { instruction , 0 , 0 , 32,
16954 0xfc0007ff, 0x200005cd, &NMD::SHRAV_R_QB , 0,
16955 DSP_ }, /* SHRAV_R.QB */
16956 };
16957
16958
16959 NMD::Pool NMD::SUBQ__S__PH[2] = {
16960 { instruction , 0 , 0 , 32,
16961 0xfc0007ff, 0x2000020d, &NMD::SUBQ_PH , 0,
16962 DSP_ }, /* SUBQ.PH */
16963 { instruction , 0 , 0 , 32,
16964 0xfc0007ff, 0x2000060d, &NMD::SUBQ_S_PH , 0,
16965 DSP_ }, /* SUBQ_S.PH */
16966 };
16967
16968
16969 NMD::Pool NMD::SUBQH__R__PH[2] = {
16970 { instruction , 0 , 0 , 32,
16971 0xfc0007ff, 0x2000024d, &NMD::SUBQH_PH , 0,
16972 DSP_ }, /* SUBQH.PH */
16973 { instruction , 0 , 0 , 32,
16974 0xfc0007ff, 0x2000064d, &NMD::SUBQH_R_PH , 0,
16975 DSP_ }, /* SUBQH_R.PH */
16976 };
16977
16978
16979 NMD::Pool NMD::SUBQH__R__W[2] = {
16980 { instruction , 0 , 0 , 32,
16981 0xfc0007ff, 0x2000028d, &NMD::SUBQH_W , 0,
16982 DSP_ }, /* SUBQH.W */
16983 { instruction , 0 , 0 , 32,
16984 0xfc0007ff, 0x2000068d, &NMD::SUBQH_R_W , 0,
16985 DSP_ }, /* SUBQH_R.W */
16986 };
16987
16988
16989 NMD::Pool NMD::SUBU__S__QB[2] = {
16990 { instruction , 0 , 0 , 32,
16991 0xfc0007ff, 0x200002cd, &NMD::SUBU_QB , 0,
16992 DSP_ }, /* SUBU.QB */
16993 { instruction , 0 , 0 , 32,
16994 0xfc0007ff, 0x200006cd, &NMD::SUBU_S_QB , 0,
16995 DSP_ }, /* SUBU_S.QB */
16996 };
16997
16998
16999 NMD::Pool NMD::SUBU__S__PH[2] = {
17000 { instruction , 0 , 0 , 32,
17001 0xfc0007ff, 0x2000030d, &NMD::SUBU_PH , 0,
17002 DSP_ }, /* SUBU.PH */
17003 { instruction , 0 , 0 , 32,
17004 0xfc0007ff, 0x2000070d, &NMD::SUBU_S_PH , 0,
17005 DSP_ }, /* SUBU_S.PH */
17006 };
17007
17008
17009 NMD::Pool NMD::SHRA__R__PH[2] = {
17010 { instruction , 0 , 0 , 32,
17011 0xfc0007ff, 0x20000335, &NMD::SHRA_PH , 0,
17012 DSP_ }, /* SHRA.PH */
17013 { instruction , 0 , 0 , 32,
17014 0xfc0007ff, 0x20000735, &NMD::SHRA_R_PH , 0,
17015 DSP_ }, /* SHRA_R.PH */
17016 };
17017
17018
17019 NMD::Pool NMD::SUBUH__R__QB[2] = {
17020 { instruction , 0 , 0 , 32,
17021 0xfc0007ff, 0x2000034d, &NMD::SUBUH_QB , 0,
17022 DSP_ }, /* SUBUH.QB */
17023 { instruction , 0 , 0 , 32,
17024 0xfc0007ff, 0x2000074d, &NMD::SUBUH_R_QB , 0,
17025 DSP_ }, /* SUBUH_R.QB */
17026 };
17027
17028
17029 NMD::Pool NMD::SHLLV__S__PH[2] = {
17030 { instruction , 0 , 0 , 32,
17031 0xfc0007ff, 0x2000038d, &NMD::SHLLV_PH , 0,
17032 DSP_ }, /* SHLLV.PH */
17033 { instruction , 0 , 0 , 32,
17034 0xfc0007ff, 0x2000078d, &NMD::SHLLV_S_PH , 0,
17035 DSP_ }, /* SHLLV_S.PH */
17036 };
17037
17038
17039 NMD::Pool NMD::SHLL__S__PH[4] = {
17040 { instruction , 0 , 0 , 32,
17041 0xfc000fff, 0x200003b5, &NMD::SHLL_PH , 0,
17042 DSP_ }, /* SHLL.PH */
17043 { reserved_block , 0 , 0 , 32,
17044 0xfc000fff, 0x200007b5, 0 , 0,
17045 0x0 }, /* SHLL[_S].PH~*(1) */
17046 { instruction , 0 , 0 , 32,
17047 0xfc000fff, 0x20000bb5, &NMD::SHLL_S_PH , 0,
17048 DSP_ }, /* SHLL_S.PH */
17049 { reserved_block , 0 , 0 , 32,
17050 0xfc000fff, 0x20000fb5, 0 , 0,
17051 0x0 }, /* SHLL[_S].PH~*(3) */
17052 };
17053
17054
17055 NMD::Pool NMD::PRECR_SRA__R__PH_W[2] = {
17056 { instruction , 0 , 0 , 32,
17057 0xfc0007ff, 0x200003cd, &NMD::PRECR_SRA_PH_W , 0,
17058 DSP_ }, /* PRECR_SRA.PH.W */
17059 { instruction , 0 , 0 , 32,
17060 0xfc0007ff, 0x200007cd, &NMD::PRECR_SRA_R_PH_W , 0,
17061 DSP_ }, /* PRECR_SRA_R.PH.W */
17062 };
17063
17064
17065 NMD::Pool NMD::_POOL32A5[128] = {
17066 { instruction , 0 , 0 , 32,
17067 0xfc0003ff, 0x20000005, &NMD::CMP_EQ_PH , 0,
17068 DSP_ }, /* CMP.EQ.PH */
17069 { pool , ADDQ__S__PH , 2 , 32,
17070 0xfc0003ff, 0x2000000d, 0 , 0,
17071 0x0 }, /* ADDQ[_S].PH */
17072 { reserved_block , 0 , 0 , 32,
17073 0xfc0003ff, 0x20000015, 0 , 0,
17074 0x0 }, /* _POOL32A5~*(2) */
17075 { instruction , 0 , 0 , 32,
17076 0xfc0003ff, 0x2000001d, &NMD::SHILO , 0,
17077 DSP_ }, /* SHILO */
17078 { instruction , 0 , 0 , 32,
17079 0xfc0003ff, 0x20000025, &NMD::MULEQ_S_W_PHL , 0,
17080 DSP_ }, /* MULEQ_S.W.PHL */
17081 { pool , MUL__S__PH , 2 , 32,
17082 0xfc0003ff, 0x2000002d, 0 , 0,
17083 0x0 }, /* MUL[_S].PH */
17084 { reserved_block , 0 , 0 , 32,
17085 0xfc0003ff, 0x20000035, 0 , 0,
17086 0x0 }, /* _POOL32A5~*(6) */
17087 { instruction , 0 , 0 , 32,
17088 0xfc0003ff, 0x2000003d, &NMD::REPL_PH , 0,
17089 DSP_ }, /* REPL.PH */
17090 { instruction , 0 , 0 , 32,
17091 0xfc0003ff, 0x20000045, &NMD::CMP_LT_PH , 0,
17092 DSP_ }, /* CMP.LT.PH */
17093 { pool , ADDQH__R__PH , 2 , 32,
17094 0xfc0003ff, 0x2000004d, 0 , 0,
17095 0x0 }, /* ADDQH[_R].PH */
17096 { reserved_block , 0 , 0 , 32,
17097 0xfc0003ff, 0x20000055, 0 , 0,
17098 0x0 }, /* _POOL32A5~*(10) */
17099 { reserved_block , 0 , 0 , 32,
17100 0xfc0003ff, 0x2000005d, 0 , 0,
17101 0x0 }, /* _POOL32A5~*(11) */
17102 { instruction , 0 , 0 , 32,
17103 0xfc0003ff, 0x20000065, &NMD::MULEQ_S_W_PHR , 0,
17104 DSP_ }, /* MULEQ_S.W.PHR */
17105 { instruction , 0 , 0 , 32,
17106 0xfc0003ff, 0x2000006d, &NMD::PRECR_QB_PH , 0,
17107 DSP_ }, /* PRECR.QB.PH */
17108 { reserved_block , 0 , 0 , 32,
17109 0xfc0003ff, 0x20000075, 0 , 0,
17110 0x0 }, /* _POOL32A5~*(14) */
17111 { reserved_block , 0 , 0 , 32,
17112 0xfc0003ff, 0x2000007d, 0 , 0,
17113 0x0 }, /* _POOL32A5~*(15) */
17114 { instruction , 0 , 0 , 32,
17115 0xfc0003ff, 0x20000085, &NMD::CMP_LE_PH , 0,
17116 DSP_ }, /* CMP.LE.PH */
17117 { pool , ADDQH__R__W , 2 , 32,
17118 0xfc0003ff, 0x2000008d, 0 , 0,
17119 0x0 }, /* ADDQH[_R].W */
17120 { instruction , 0 , 0 , 32,
17121 0xfc0003ff, 0x20000095, &NMD::MULEU_S_PH_QBL , 0,
17122 DSP_ }, /* MULEU_S.PH.QBL */
17123 { reserved_block , 0 , 0 , 32,
17124 0xfc0003ff, 0x2000009d, 0 , 0,
17125 0x0 }, /* _POOL32A5~*(19) */
17126 { reserved_block , 0 , 0 , 32,
17127 0xfc0003ff, 0x200000a5, 0 , 0,
17128 0x0 }, /* _POOL32A5~*(20) */
17129 { instruction , 0 , 0 , 32,
17130 0xfc0003ff, 0x200000ad, &NMD::PRECRQ_QB_PH , 0,
17131 DSP_ }, /* PRECRQ.QB.PH */
17132 { reserved_block , 0 , 0 , 32,
17133 0xfc0003ff, 0x200000b5, 0 , 0,
17134 0x0 }, /* _POOL32A5~*(22) */
17135 { reserved_block , 0 , 0 , 32,
17136 0xfc0003ff, 0x200000bd, 0 , 0,
17137 0x0 }, /* _POOL32A5~*(23) */
17138 { instruction , 0 , 0 , 32,
17139 0xfc0003ff, 0x200000c5, &NMD::CMPGU_EQ_QB , 0,
17140 DSP_ }, /* CMPGU.EQ.QB */
17141 { pool , ADDU__S__QB , 2 , 32,
17142 0xfc0003ff, 0x200000cd, 0 , 0,
17143 0x0 }, /* ADDU[_S].QB */
17144 { instruction , 0 , 0 , 32,
17145 0xfc0003ff, 0x200000d5, &NMD::MULEU_S_PH_QBR , 0,
17146 DSP_ }, /* MULEU_S.PH.QBR */
17147 { reserved_block , 0 , 0 , 32,
17148 0xfc0003ff, 0x200000dd, 0 , 0,
17149 0x0 }, /* _POOL32A5~*(27) */
17150 { reserved_block , 0 , 0 , 32,
17151 0xfc0003ff, 0x200000e5, 0 , 0,
17152 0x0 }, /* _POOL32A5~*(28) */
17153 { instruction , 0 , 0 , 32,
17154 0xfc0003ff, 0x200000ed, &NMD::PRECRQ_PH_W , 0,
17155 DSP_ }, /* PRECRQ.PH.W */
17156 { reserved_block , 0 , 0 , 32,
17157 0xfc0003ff, 0x200000f5, 0 , 0,
17158 0x0 }, /* _POOL32A5~*(30) */
17159 { reserved_block , 0 , 0 , 32,
17160 0xfc0003ff, 0x200000fd, 0 , 0,
17161 0x0 }, /* _POOL32A5~*(31) */
17162 { instruction , 0 , 0 , 32,
17163 0xfc0003ff, 0x20000105, &NMD::CMPGU_LT_QB , 0,
17164 DSP_ }, /* CMPGU.LT.QB */
17165 { pool , ADDU__S__PH , 2 , 32,
17166 0xfc0003ff, 0x2000010d, 0 , 0,
17167 0x0 }, /* ADDU[_S].PH */
17168 { instruction , 0 , 0 , 32,
17169 0xfc0003ff, 0x20000115, &NMD::MULQ_RS_PH , 0,
17170 DSP_ }, /* MULQ_RS.PH */
17171 { reserved_block , 0 , 0 , 32,
17172 0xfc0003ff, 0x2000011d, 0 , 0,
17173 0x0 }, /* _POOL32A5~*(35) */
17174 { reserved_block , 0 , 0 , 32,
17175 0xfc0003ff, 0x20000125, 0 , 0,
17176 0x0 }, /* _POOL32A5~*(36) */
17177 { instruction , 0 , 0 , 32,
17178 0xfc0003ff, 0x2000012d, &NMD::PRECRQ_RS_PH_W , 0,
17179 DSP_ }, /* PRECRQ_RS.PH.W */
17180 { reserved_block , 0 , 0 , 32,
17181 0xfc0003ff, 0x20000135, 0 , 0,
17182 0x0 }, /* _POOL32A5~*(38) */
17183 { reserved_block , 0 , 0 , 32,
17184 0xfc0003ff, 0x2000013d, 0 , 0,
17185 0x0 }, /* _POOL32A5~*(39) */
17186 { instruction , 0 , 0 , 32,
17187 0xfc0003ff, 0x20000145, &NMD::CMPGU_LE_QB , 0,
17188 DSP_ }, /* CMPGU.LE.QB */
17189 { pool , ADDUH__R__QB , 2 , 32,
17190 0xfc0003ff, 0x2000014d, 0 , 0,
17191 0x0 }, /* ADDUH[_R].QB */
17192 { instruction , 0 , 0 , 32,
17193 0xfc0003ff, 0x20000155, &NMD::MULQ_S_PH , 0,
17194 DSP_ }, /* MULQ_S.PH */
17195 { reserved_block , 0 , 0 , 32,
17196 0xfc0003ff, 0x2000015d, 0 , 0,
17197 0x0 }, /* _POOL32A5~*(43) */
17198 { reserved_block , 0 , 0 , 32,
17199 0xfc0003ff, 0x20000165, 0 , 0,
17200 0x0 }, /* _POOL32A5~*(44) */
17201 { instruction , 0 , 0 , 32,
17202 0xfc0003ff, 0x2000016d, &NMD::PRECRQU_S_QB_PH , 0,
17203 DSP_ }, /* PRECRQU_S.QB.PH */
17204 { reserved_block , 0 , 0 , 32,
17205 0xfc0003ff, 0x20000175, 0 , 0,
17206 0x0 }, /* _POOL32A5~*(46) */
17207 { reserved_block , 0 , 0 , 32,
17208 0xfc0003ff, 0x2000017d, 0 , 0,
17209 0x0 }, /* _POOL32A5~*(47) */
17210 { instruction , 0 , 0 , 32,
17211 0xfc0003ff, 0x20000185, &NMD::CMPGDU_EQ_QB , 0,
17212 DSP_ }, /* CMPGDU.EQ.QB */
17213 { pool , SHRAV__R__PH , 2 , 32,
17214 0xfc0003ff, 0x2000018d, 0 , 0,
17215 0x0 }, /* SHRAV[_R].PH */
17216 { instruction , 0 , 0 , 32,
17217 0xfc0003ff, 0x20000195, &NMD::MULQ_RS_W , 0,
17218 DSP_ }, /* MULQ_RS.W */
17219 { reserved_block , 0 , 0 , 32,
17220 0xfc0003ff, 0x2000019d, 0 , 0,
17221 0x0 }, /* _POOL32A5~*(51) */
17222 { reserved_block , 0 , 0 , 32,
17223 0xfc0003ff, 0x200001a5, 0 , 0,
17224 0x0 }, /* _POOL32A5~*(52) */
17225 { instruction , 0 , 0 , 32,
17226 0xfc0003ff, 0x200001ad, &NMD::PACKRL_PH , 0,
17227 DSP_ }, /* PACKRL.PH */
17228 { reserved_block , 0 , 0 , 32,
17229 0xfc0003ff, 0x200001b5, 0 , 0,
17230 0x0 }, /* _POOL32A5~*(54) */
17231 { reserved_block , 0 , 0 , 32,
17232 0xfc0003ff, 0x200001bd, 0 , 0,
17233 0x0 }, /* _POOL32A5~*(55) */
17234 { instruction , 0 , 0 , 32,
17235 0xfc0003ff, 0x200001c5, &NMD::CMPGDU_LT_QB , 0,
17236 DSP_ }, /* CMPGDU.LT.QB */
17237 { pool , SHRAV__R__QB , 2 , 32,
17238 0xfc0003ff, 0x200001cd, 0 , 0,
17239 0x0 }, /* SHRAV[_R].QB */
17240 { instruction , 0 , 0 , 32,
17241 0xfc0003ff, 0x200001d5, &NMD::MULQ_S_W , 0,
17242 DSP_ }, /* MULQ_S.W */
17243 { reserved_block , 0 , 0 , 32,
17244 0xfc0003ff, 0x200001dd, 0 , 0,
17245 0x0 }, /* _POOL32A5~*(59) */
17246 { reserved_block , 0 , 0 , 32,
17247 0xfc0003ff, 0x200001e5, 0 , 0,
17248 0x0 }, /* _POOL32A5~*(60) */
17249 { instruction , 0 , 0 , 32,
17250 0xfc0003ff, 0x200001ed, &NMD::PICK_QB , 0,
17251 DSP_ }, /* PICK.QB */
17252 { reserved_block , 0 , 0 , 32,
17253 0xfc0003ff, 0x200001f5, 0 , 0,
17254 0x0 }, /* _POOL32A5~*(62) */
17255 { reserved_block , 0 , 0 , 32,
17256 0xfc0003ff, 0x200001fd, 0 , 0,
17257 0x0 }, /* _POOL32A5~*(63) */
17258 { instruction , 0 , 0 , 32,
17259 0xfc0003ff, 0x20000205, &NMD::CMPGDU_LE_QB , 0,
17260 DSP_ }, /* CMPGDU.LE.QB */
17261 { pool , SUBQ__S__PH , 2 , 32,
17262 0xfc0003ff, 0x2000020d, 0 , 0,
17263 0x0 }, /* SUBQ[_S].PH */
17264 { instruction , 0 , 0 , 32,
17265 0xfc0003ff, 0x20000215, &NMD::APPEND , 0,
17266 DSP_ }, /* APPEND */
17267 { reserved_block , 0 , 0 , 32,
17268 0xfc0003ff, 0x2000021d, 0 , 0,
17269 0x0 }, /* _POOL32A5~*(67) */
17270 { reserved_block , 0 , 0 , 32,
17271 0xfc0003ff, 0x20000225, 0 , 0,
17272 0x0 }, /* _POOL32A5~*(68) */
17273 { instruction , 0 , 0 , 32,
17274 0xfc0003ff, 0x2000022d, &NMD::PICK_PH , 0,
17275 DSP_ }, /* PICK.PH */
17276 { reserved_block , 0 , 0 , 32,
17277 0xfc0003ff, 0x20000235, 0 , 0,
17278 0x0 }, /* _POOL32A5~*(70) */
17279 { reserved_block , 0 , 0 , 32,
17280 0xfc0003ff, 0x2000023d, 0 , 0,
17281 0x0 }, /* _POOL32A5~*(71) */
17282 { instruction , 0 , 0 , 32,
17283 0xfc0003ff, 0x20000245, &NMD::CMPU_EQ_QB , 0,
17284 DSP_ }, /* CMPU.EQ.QB */
17285 { pool , SUBQH__R__PH , 2 , 32,
17286 0xfc0003ff, 0x2000024d, 0 , 0,
17287 0x0 }, /* SUBQH[_R].PH */
17288 { instruction , 0 , 0 , 32,
17289 0xfc0003ff, 0x20000255, &NMD::PREPEND , 0,
17290 DSP_ }, /* PREPEND */
17291 { reserved_block , 0 , 0 , 32,
17292 0xfc0003ff, 0x2000025d, 0 , 0,
17293 0x0 }, /* _POOL32A5~*(75) */
17294 { reserved_block , 0 , 0 , 32,
17295 0xfc0003ff, 0x20000265, 0 , 0,
17296 0x0 }, /* _POOL32A5~*(76) */
17297 { reserved_block , 0 , 0 , 32,
17298 0xfc0003ff, 0x2000026d, 0 , 0,
17299 0x0 }, /* _POOL32A5~*(77) */
17300 { reserved_block , 0 , 0 , 32,
17301 0xfc0003ff, 0x20000275, 0 , 0,
17302 0x0 }, /* _POOL32A5~*(78) */
17303 { reserved_block , 0 , 0 , 32,
17304 0xfc0003ff, 0x2000027d, 0 , 0,
17305 0x0 }, /* _POOL32A5~*(79) */
17306 { instruction , 0 , 0 , 32,
17307 0xfc0003ff, 0x20000285, &NMD::CMPU_LT_QB , 0,
17308 DSP_ }, /* CMPU.LT.QB */
17309 { pool , SUBQH__R__W , 2 , 32,
17310 0xfc0003ff, 0x2000028d, 0 , 0,
17311 0x0 }, /* SUBQH[_R].W */
17312 { instruction , 0 , 0 , 32,
17313 0xfc0003ff, 0x20000295, &NMD::MODSUB , 0,
17314 DSP_ }, /* MODSUB */
17315 { reserved_block , 0 , 0 , 32,
17316 0xfc0003ff, 0x2000029d, 0 , 0,
17317 0x0 }, /* _POOL32A5~*(83) */
17318 { reserved_block , 0 , 0 , 32,
17319 0xfc0003ff, 0x200002a5, 0 , 0,
17320 0x0 }, /* _POOL32A5~*(84) */
17321 { reserved_block , 0 , 0 , 32,
17322 0xfc0003ff, 0x200002ad, 0 , 0,
17323 0x0 }, /* _POOL32A5~*(85) */
17324 { reserved_block , 0 , 0 , 32,
17325 0xfc0003ff, 0x200002b5, 0 , 0,
17326 0x0 }, /* _POOL32A5~*(86) */
17327 { reserved_block , 0 , 0 , 32,
17328 0xfc0003ff, 0x200002bd, 0 , 0,
17329 0x0 }, /* _POOL32A5~*(87) */
17330 { instruction , 0 , 0 , 32,
17331 0xfc0003ff, 0x200002c5, &NMD::CMPU_LE_QB , 0,
17332 DSP_ }, /* CMPU.LE.QB */
17333 { pool , SUBU__S__QB , 2 , 32,
17334 0xfc0003ff, 0x200002cd, 0 , 0,
17335 0x0 }, /* SUBU[_S].QB */
17336 { instruction , 0 , 0 , 32,
17337 0xfc0003ff, 0x200002d5, &NMD::SHRAV_R_W , 0,
17338 DSP_ }, /* SHRAV_R.W */
17339 { reserved_block , 0 , 0 , 32,
17340 0xfc0003ff, 0x200002dd, 0 , 0,
17341 0x0 }, /* _POOL32A5~*(91) */
17342 { reserved_block , 0 , 0 , 32,
17343 0xfc0003ff, 0x200002e5, 0 , 0,
17344 0x0 }, /* _POOL32A5~*(92) */
17345 { reserved_block , 0 , 0 , 32,
17346 0xfc0003ff, 0x200002ed, 0 , 0,
17347 0x0 }, /* _POOL32A5~*(93) */
17348 { instruction , 0 , 0 , 32,
17349 0xfc0003ff, 0x200002f5, &NMD::SHRA_R_W , 0,
17350 DSP_ }, /* SHRA_R.W */
17351 { reserved_block , 0 , 0 , 32,
17352 0xfc0003ff, 0x200002fd, 0 , 0,
17353 0x0 }, /* _POOL32A5~*(95) */
17354 { instruction , 0 , 0 , 32,
17355 0xfc0003ff, 0x20000305, &NMD::ADDQ_S_W , 0,
17356 DSP_ }, /* ADDQ_S.W */
17357 { pool , SUBU__S__PH , 2 , 32,
17358 0xfc0003ff, 0x2000030d, 0 , 0,
17359 0x0 }, /* SUBU[_S].PH */
17360 { instruction , 0 , 0 , 32,
17361 0xfc0003ff, 0x20000315, &NMD::SHRLV_PH , 0,
17362 DSP_ }, /* SHRLV.PH */
17363 { reserved_block , 0 , 0 , 32,
17364 0xfc0003ff, 0x2000031d, 0 , 0,
17365 0x0 }, /* _POOL32A5~*(99) */
17366 { reserved_block , 0 , 0 , 32,
17367 0xfc0003ff, 0x20000325, 0 , 0,
17368 0x0 }, /* _POOL32A5~*(100) */
17369 { reserved_block , 0 , 0 , 32,
17370 0xfc0003ff, 0x2000032d, 0 , 0,
17371 0x0 }, /* _POOL32A5~*(101) */
17372 { pool , SHRA__R__PH , 2 , 32,
17373 0xfc0003ff, 0x20000335, 0 , 0,
17374 0x0 }, /* SHRA[_R].PH */
17375 { reserved_block , 0 , 0 , 32,
17376 0xfc0003ff, 0x2000033d, 0 , 0,
17377 0x0 }, /* _POOL32A5~*(103) */
17378 { instruction , 0 , 0 , 32,
17379 0xfc0003ff, 0x20000345, &NMD::SUBQ_S_W , 0,
17380 DSP_ }, /* SUBQ_S.W */
17381 { pool , SUBUH__R__QB , 2 , 32,
17382 0xfc0003ff, 0x2000034d, 0 , 0,
17383 0x0 }, /* SUBUH[_R].QB */
17384 { instruction , 0 , 0 , 32,
17385 0xfc0003ff, 0x20000355, &NMD::SHRLV_QB , 0,
17386 DSP_ }, /* SHRLV.QB */
17387 { reserved_block , 0 , 0 , 32,
17388 0xfc0003ff, 0x2000035d, 0 , 0,
17389 0x0 }, /* _POOL32A5~*(107) */
17390 { reserved_block , 0 , 0 , 32,
17391 0xfc0003ff, 0x20000365, 0 , 0,
17392 0x0 }, /* _POOL32A5~*(108) */
17393 { reserved_block , 0 , 0 , 32,
17394 0xfc0003ff, 0x2000036d, 0 , 0,
17395 0x0 }, /* _POOL32A5~*(109) */
17396 { reserved_block , 0 , 0 , 32,
17397 0xfc0003ff, 0x20000375, 0 , 0,
17398 0x0 }, /* _POOL32A5~*(110) */
17399 { reserved_block , 0 , 0 , 32,
17400 0xfc0003ff, 0x2000037d, 0 , 0,
17401 0x0 }, /* _POOL32A5~*(111) */
17402 { instruction , 0 , 0 , 32,
17403 0xfc0003ff, 0x20000385, &NMD::ADDSC , 0,
17404 DSP_ }, /* ADDSC */
17405 { pool , SHLLV__S__PH , 2 , 32,
17406 0xfc0003ff, 0x2000038d, 0 , 0,
17407 0x0 }, /* SHLLV[_S].PH */
17408 { instruction , 0 , 0 , 32,
17409 0xfc0003ff, 0x20000395, &NMD::SHLLV_QB , 0,
17410 DSP_ }, /* SHLLV.QB */
17411 { reserved_block , 0 , 0 , 32,
17412 0xfc0003ff, 0x2000039d, 0 , 0,
17413 0x0 }, /* _POOL32A5~*(115) */
17414 { reserved_block , 0 , 0 , 32,
17415 0xfc0003ff, 0x200003a5, 0 , 0,
17416 0x0 }, /* _POOL32A5~*(116) */
17417 { reserved_block , 0 , 0 , 32,
17418 0xfc0003ff, 0x200003ad, 0 , 0,
17419 0x0 }, /* _POOL32A5~*(117) */
17420 { pool , SHLL__S__PH , 4 , 32,
17421 0xfc0003ff, 0x200003b5, 0 , 0,
17422 0x0 }, /* SHLL[_S].PH */
17423 { reserved_block , 0 , 0 , 32,
17424 0xfc0003ff, 0x200003bd, 0 , 0,
17425 0x0 }, /* _POOL32A5~*(119) */
17426 { instruction , 0 , 0 , 32,
17427 0xfc0003ff, 0x200003c5, &NMD::ADDWC , 0,
17428 DSP_ }, /* ADDWC */
17429 { pool , PRECR_SRA__R__PH_W , 2 , 32,
17430 0xfc0003ff, 0x200003cd, 0 , 0,
17431 0x0 }, /* PRECR_SRA[_R].PH.W */
17432 { instruction , 0 , 0 , 32,
17433 0xfc0003ff, 0x200003d5, &NMD::SHLLV_S_W , 0,
17434 DSP_ }, /* SHLLV_S.W */
17435 { reserved_block , 0 , 0 , 32,
17436 0xfc0003ff, 0x200003dd, 0 , 0,
17437 0x0 }, /* _POOL32A5~*(123) */
17438 { reserved_block , 0 , 0 , 32,
17439 0xfc0003ff, 0x200003e5, 0 , 0,
17440 0x0 }, /* _POOL32A5~*(124) */
17441 { reserved_block , 0 , 0 , 32,
17442 0xfc0003ff, 0x200003ed, 0 , 0,
17443 0x0 }, /* _POOL32A5~*(125) */
17444 { instruction , 0 , 0 , 32,
17445 0xfc0003ff, 0x200003f5, &NMD::SHLL_S_W , 0,
17446 DSP_ }, /* SHLL_S.W */
17447 { reserved_block , 0 , 0 , 32,
17448 0xfc0003ff, 0x200003fd, 0 , 0,
17449 0x0 }, /* _POOL32A5~*(127) */
17450 };
17451
17452
17453 NMD::Pool NMD::PP_LSX[16] = {
17454 { instruction , 0 , 0 , 32,
17455 0xfc0007ff, 0x20000007, &NMD::LBX , 0,
17456 0x0 }, /* LBX */
17457 { instruction , 0 , 0 , 32,
17458 0xfc0007ff, 0x20000087, &NMD::SBX , 0,
17459 XMMS_ }, /* SBX */
17460 { instruction , 0 , 0 , 32,
17461 0xfc0007ff, 0x20000107, &NMD::LBUX , 0,
17462 0x0 }, /* LBUX */
17463 { reserved_block , 0 , 0 , 32,
17464 0xfc0007ff, 0x20000187, 0 , 0,
17465 0x0 }, /* PP.LSX~*(3) */
17466 { instruction , 0 , 0 , 32,
17467 0xfc0007ff, 0x20000207, &NMD::LHX , 0,
17468 0x0 }, /* LHX */
17469 { instruction , 0 , 0 , 32,
17470 0xfc0007ff, 0x20000287, &NMD::SHX , 0,
17471 XMMS_ }, /* SHX */
17472 { instruction , 0 , 0 , 32,
17473 0xfc0007ff, 0x20000307, &NMD::LHUX , 0,
17474 0x0 }, /* LHUX */
17475 { instruction , 0 , 0 , 32,
17476 0xfc0007ff, 0x20000387, &NMD::LWUX , 0,
17477 MIPS64_ }, /* LWUX */
17478 { instruction , 0 , 0 , 32,
17479 0xfc0007ff, 0x20000407, &NMD::LWX , 0,
17480 0x0 }, /* LWX */
17481 { instruction , 0 , 0 , 32,
17482 0xfc0007ff, 0x20000487, &NMD::SWX , 0,
17483 XMMS_ }, /* SWX */
17484 { instruction , 0 , 0 , 32,
17485 0xfc0007ff, 0x20000507, &NMD::LWC1X , 0,
17486 CP1_ }, /* LWC1X */
17487 { instruction , 0 , 0 , 32,
17488 0xfc0007ff, 0x20000587, &NMD::SWC1X , 0,
17489 CP1_ }, /* SWC1X */
17490 { instruction , 0 , 0 , 32,
17491 0xfc0007ff, 0x20000607, &NMD::LDX , 0,
17492 MIPS64_ }, /* LDX */
17493 { instruction , 0 , 0 , 32,
17494 0xfc0007ff, 0x20000687, &NMD::SDX , 0,
17495 MIPS64_ }, /* SDX */
17496 { instruction , 0 , 0 , 32,
17497 0xfc0007ff, 0x20000707, &NMD::LDC1X , 0,
17498 CP1_ }, /* LDC1X */
17499 { instruction , 0 , 0 , 32,
17500 0xfc0007ff, 0x20000787, &NMD::SDC1X , 0,
17501 CP1_ }, /* SDC1X */
17502 };
17503
17504
17505 NMD::Pool NMD::PP_LSXS[16] = {
17506 { reserved_block , 0 , 0 , 32,
17507 0xfc0007ff, 0x20000047, 0 , 0,
17508 0x0 }, /* PP.LSXS~*(0) */
17509 { reserved_block , 0 , 0 , 32,
17510 0xfc0007ff, 0x200000c7, 0 , 0,
17511 0x0 }, /* PP.LSXS~*(1) */
17512 { reserved_block , 0 , 0 , 32,
17513 0xfc0007ff, 0x20000147, 0 , 0,
17514 0x0 }, /* PP.LSXS~*(2) */
17515 { reserved_block , 0 , 0 , 32,
17516 0xfc0007ff, 0x200001c7, 0 , 0,
17517 0x0 }, /* PP.LSXS~*(3) */
17518 { instruction , 0 , 0 , 32,
17519 0xfc0007ff, 0x20000247, &NMD::LHXS , 0,
17520 0x0 }, /* LHXS */
17521 { instruction , 0 , 0 , 32,
17522 0xfc0007ff, 0x200002c7, &NMD::SHXS , 0,
17523 XMMS_ }, /* SHXS */
17524 { instruction , 0 , 0 , 32,
17525 0xfc0007ff, 0x20000347, &NMD::LHUXS , 0,
17526 0x0 }, /* LHUXS */
17527 { instruction , 0 , 0 , 32,
17528 0xfc0007ff, 0x200003c7, &NMD::LWUXS , 0,
17529 MIPS64_ }, /* LWUXS */
17530 { instruction , 0 , 0 , 32,
17531 0xfc0007ff, 0x20000447, &NMD::LWXS_32_ , 0,
17532 0x0 }, /* LWXS[32] */
17533 { instruction , 0 , 0 , 32,
17534 0xfc0007ff, 0x200004c7, &NMD::SWXS , 0,
17535 XMMS_ }, /* SWXS */
17536 { instruction , 0 , 0 , 32,
17537 0xfc0007ff, 0x20000547, &NMD::LWC1XS , 0,
17538 CP1_ }, /* LWC1XS */
17539 { instruction , 0 , 0 , 32,
17540 0xfc0007ff, 0x200005c7, &NMD::SWC1XS , 0,
17541 CP1_ }, /* SWC1XS */
17542 { instruction , 0 , 0 , 32,
17543 0xfc0007ff, 0x20000647, &NMD::LDXS , 0,
17544 MIPS64_ }, /* LDXS */
17545 { instruction , 0 , 0 , 32,
17546 0xfc0007ff, 0x200006c7, &NMD::SDXS , 0,
17547 MIPS64_ }, /* SDXS */
17548 { instruction , 0 , 0 , 32,
17549 0xfc0007ff, 0x20000747, &NMD::LDC1XS , 0,
17550 CP1_ }, /* LDC1XS */
17551 { instruction , 0 , 0 , 32,
17552 0xfc0007ff, 0x200007c7, &NMD::SDC1XS , 0,
17553 CP1_ }, /* SDC1XS */
17554 };
17555
17556
17557 NMD::Pool NMD::P_LSX[2] = {
17558 { pool , PP_LSX , 16 , 32,
17559 0xfc00007f, 0x20000007, 0 , 0,
17560 0x0 }, /* PP.LSX */
17561 { pool , PP_LSXS , 16 , 32,
17562 0xfc00007f, 0x20000047, 0 , 0,
17563 0x0 }, /* PP.LSXS */
17564 };
17565
17566
17567 NMD::Pool NMD::POOL32Axf_1_0[4] = {
17568 { instruction , 0 , 0 , 32,
17569 0xfc003fff, 0x2000007f, &NMD::MFHI_DSP_ , 0,
17570 DSP_ }, /* MFHI[DSP] */
17571 { instruction , 0 , 0 , 32,
17572 0xfc003fff, 0x2000107f, &NMD::MFLO_DSP_ , 0,
17573 DSP_ }, /* MFLO[DSP] */
17574 { instruction , 0 , 0 , 32,
17575 0xfc003fff, 0x2000207f, &NMD::MTHI_DSP_ , 0,
17576 DSP_ }, /* MTHI[DSP] */
17577 { instruction , 0 , 0 , 32,
17578 0xfc003fff, 0x2000307f, &NMD::MTLO_DSP_ , 0,
17579 DSP_ }, /* MTLO[DSP] */
17580 };
17581
17582
17583 NMD::Pool NMD::POOL32Axf_1_1[4] = {
17584 { instruction , 0 , 0 , 32,
17585 0xfc003fff, 0x2000027f, &NMD::MTHLIP , 0,
17586 DSP_ }, /* MTHLIP */
17587 { instruction , 0 , 0 , 32,
17588 0xfc003fff, 0x2000127f, &NMD::SHILOV , 0,
17589 DSP_ }, /* SHILOV */
17590 { reserved_block , 0 , 0 , 32,
17591 0xfc003fff, 0x2000227f, 0 , 0,
17592 0x0 }, /* POOL32Axf_1_1~*(2) */
17593 { reserved_block , 0 , 0 , 32,
17594 0xfc003fff, 0x2000327f, 0 , 0,
17595 0x0 }, /* POOL32Axf_1_1~*(3) */
17596 };
17597
17598
17599 NMD::Pool NMD::POOL32Axf_1_3[4] = {
17600 { instruction , 0 , 0 , 32,
17601 0xfc003fff, 0x2000067f, &NMD::RDDSP , 0,
17602 DSP_ }, /* RDDSP */
17603 { instruction , 0 , 0 , 32,
17604 0xfc003fff, 0x2000167f, &NMD::WRDSP , 0,
17605 DSP_ }, /* WRDSP */
17606 { instruction , 0 , 0 , 32,
17607 0xfc003fff, 0x2000267f, &NMD::EXTP , 0,
17608 DSP_ }, /* EXTP */
17609 { instruction , 0 , 0 , 32,
17610 0xfc003fff, 0x2000367f, &NMD::EXTPDP , 0,
17611 DSP_ }, /* EXTPDP */
17612 };
17613
17614
17615 NMD::Pool NMD::POOL32Axf_1_4[2] = {
17616 { instruction , 0 , 0 , 32,
17617 0xfc001fff, 0x2000087f, &NMD::SHLL_QB , 0,
17618 DSP_ }, /* SHLL.QB */
17619 { instruction , 0 , 0 , 32,
17620 0xfc001fff, 0x2000187f, &NMD::SHRL_QB , 0,
17621 DSP_ }, /* SHRL.QB */
17622 };
17623
17624
17625 NMD::Pool NMD::MAQ_S_A__W_PHR[2] = {
17626 { instruction , 0 , 0 , 32,
17627 0xfc003fff, 0x20000a7f, &NMD::MAQ_S_W_PHR , 0,
17628 DSP_ }, /* MAQ_S.W.PHR */
17629 { instruction , 0 , 0 , 32,
17630 0xfc003fff, 0x20002a7f, &NMD::MAQ_SA_W_PHR , 0,
17631 DSP_ }, /* MAQ_SA.W.PHR */
17632 };
17633
17634
17635 NMD::Pool NMD::MAQ_S_A__W_PHL[2] = {
17636 { instruction , 0 , 0 , 32,
17637 0xfc003fff, 0x20001a7f, &NMD::MAQ_S_W_PHL , 0,
17638 DSP_ }, /* MAQ_S.W.PHL */
17639 { instruction , 0 , 0 , 32,
17640 0xfc003fff, 0x20003a7f, &NMD::MAQ_SA_W_PHL , 0,
17641 DSP_ }, /* MAQ_SA.W.PHL */
17642 };
17643
17644
17645 NMD::Pool NMD::POOL32Axf_1_5[2] = {
17646 { pool , MAQ_S_A__W_PHR , 2 , 32,
17647 0xfc001fff, 0x20000a7f, 0 , 0,
17648 0x0 }, /* MAQ_S[A].W.PHR */
17649 { pool , MAQ_S_A__W_PHL , 2 , 32,
17650 0xfc001fff, 0x20001a7f, 0 , 0,
17651 0x0 }, /* MAQ_S[A].W.PHL */
17652 };
17653
17654
17655 NMD::Pool NMD::POOL32Axf_1_7[4] = {
17656 { instruction , 0 , 0 , 32,
17657 0xfc003fff, 0x20000e7f, &NMD::EXTR_W , 0,
17658 DSP_ }, /* EXTR.W */
17659 { instruction , 0 , 0 , 32,
17660 0xfc003fff, 0x20001e7f, &NMD::EXTR_R_W , 0,
17661 DSP_ }, /* EXTR_R.W */
17662 { instruction , 0 , 0 , 32,
17663 0xfc003fff, 0x20002e7f, &NMD::EXTR_RS_W , 0,
17664 DSP_ }, /* EXTR_RS.W */
17665 { instruction , 0 , 0 , 32,
17666 0xfc003fff, 0x20003e7f, &NMD::EXTR_S_H , 0,
17667 DSP_ }, /* EXTR_S.H */
17668 };
17669
17670
17671 NMD::Pool NMD::POOL32Axf_1[8] = {
17672 { pool , POOL32Axf_1_0 , 4 , 32,
17673 0xfc000fff, 0x2000007f, 0 , 0,
17674 0x0 }, /* POOL32Axf_1_0 */
17675 { pool , POOL32Axf_1_1 , 4 , 32,
17676 0xfc000fff, 0x2000027f, 0 , 0,
17677 0x0 }, /* POOL32Axf_1_1 */
17678 { reserved_block , 0 , 0 , 32,
17679 0xfc000fff, 0x2000047f, 0 , 0,
17680 0x0 }, /* POOL32Axf_1~*(2) */
17681 { pool , POOL32Axf_1_3 , 4 , 32,
17682 0xfc000fff, 0x2000067f, 0 , 0,
17683 0x0 }, /* POOL32Axf_1_3 */
17684 { pool , POOL32Axf_1_4 , 2 , 32,
17685 0xfc000fff, 0x2000087f, 0 , 0,
17686 0x0 }, /* POOL32Axf_1_4 */
17687 { pool , POOL32Axf_1_5 , 2 , 32,
17688 0xfc000fff, 0x20000a7f, 0 , 0,
17689 0x0 }, /* POOL32Axf_1_5 */
17690 { reserved_block , 0 , 0 , 32,
17691 0xfc000fff, 0x20000c7f, 0 , 0,
17692 0x0 }, /* POOL32Axf_1~*(6) */
17693 { pool , POOL32Axf_1_7 , 4 , 32,
17694 0xfc000fff, 0x20000e7f, 0 , 0,
17695 0x0 }, /* POOL32Axf_1_7 */
17696 };
17697
17698
17699 NMD::Pool NMD::POOL32Axf_2_DSP__0_7[8] = {
17700 { instruction , 0 , 0 , 32,
17701 0xfc003fff, 0x200000bf, &NMD::DPA_W_PH , 0,
17702 DSP_ }, /* DPA.W.PH */
17703 { instruction , 0 , 0 , 32,
17704 0xfc003fff, 0x200002bf, &NMD::DPAQ_S_W_PH , 0,
17705 DSP_ }, /* DPAQ_S.W.PH */
17706 { instruction , 0 , 0 , 32,
17707 0xfc003fff, 0x200004bf, &NMD::DPS_W_PH , 0,
17708 DSP_ }, /* DPS.W.PH */
17709 { instruction , 0 , 0 , 32,
17710 0xfc003fff, 0x200006bf, &NMD::DPSQ_S_W_PH , 0,
17711 DSP_ }, /* DPSQ_S.W.PH */
17712 { reserved_block , 0 , 0 , 32,
17713 0xfc003fff, 0x200008bf, 0 , 0,
17714 0x0 }, /* POOL32Axf_2(DSP)_0_7~*(4) */
17715 { instruction , 0 , 0 , 32,
17716 0xfc003fff, 0x20000abf, &NMD::MADD_DSP_ , 0,
17717 DSP_ }, /* MADD[DSP] */
17718 { instruction , 0 , 0 , 32,
17719 0xfc003fff, 0x20000cbf, &NMD::MULT_DSP_ , 0,
17720 DSP_ }, /* MULT[DSP] */
17721 { instruction , 0 , 0 , 32,
17722 0xfc003fff, 0x20000ebf, &NMD::EXTRV_W , 0,
17723 DSP_ }, /* EXTRV.W */
17724 };
17725
17726
17727 NMD::Pool NMD::POOL32Axf_2_DSP__8_15[8] = {
17728 { instruction , 0 , 0 , 32,
17729 0xfc003fff, 0x200010bf, &NMD::DPAX_W_PH , 0,
17730 DSP_ }, /* DPAX.W.PH */
17731 { instruction , 0 , 0 , 32,
17732 0xfc003fff, 0x200012bf, &NMD::DPAQ_SA_L_W , 0,
17733 DSP_ }, /* DPAQ_SA.L.W */
17734 { instruction , 0 , 0 , 32,
17735 0xfc003fff, 0x200014bf, &NMD::DPSX_W_PH , 0,
17736 DSP_ }, /* DPSX.W.PH */
17737 { instruction , 0 , 0 , 32,
17738 0xfc003fff, 0x200016bf, &NMD::DPSQ_SA_L_W , 0,
17739 DSP_ }, /* DPSQ_SA.L.W */
17740 { reserved_block , 0 , 0 , 32,
17741 0xfc003fff, 0x200018bf, 0 , 0,
17742 0x0 }, /* POOL32Axf_2(DSP)_8_15~*(4) */
17743 { instruction , 0 , 0 , 32,
17744 0xfc003fff, 0x20001abf, &NMD::MADDU_DSP_ , 0,
17745 DSP_ }, /* MADDU[DSP] */
17746 { instruction , 0 , 0 , 32,
17747 0xfc003fff, 0x20001cbf, &NMD::MULTU_DSP_ , 0,
17748 DSP_ }, /* MULTU[DSP] */
17749 { instruction , 0 , 0 , 32,
17750 0xfc003fff, 0x20001ebf, &NMD::EXTRV_R_W , 0,
17751 DSP_ }, /* EXTRV_R.W */
17752 };
17753
17754
17755 NMD::Pool NMD::POOL32Axf_2_DSP__16_23[8] = {
17756 { instruction , 0 , 0 , 32,
17757 0xfc003fff, 0x200020bf, &NMD::DPAU_H_QBL , 0,
17758 DSP_ }, /* DPAU.H.QBL */
17759 { instruction , 0 , 0 , 32,
17760 0xfc003fff, 0x200022bf, &NMD::DPAQX_S_W_PH , 0,
17761 DSP_ }, /* DPAQX_S.W.PH */
17762 { instruction , 0 , 0 , 32,
17763 0xfc003fff, 0x200024bf, &NMD::DPSU_H_QBL , 0,
17764 DSP_ }, /* DPSU.H.QBL */
17765 { instruction , 0 , 0 , 32,
17766 0xfc003fff, 0x200026bf, &NMD::DPSQX_S_W_PH , 0,
17767 DSP_ }, /* DPSQX_S.W.PH */
17768 { instruction , 0 , 0 , 32,
17769 0xfc003fff, 0x200028bf, &NMD::EXTPV , 0,
17770 DSP_ }, /* EXTPV */
17771 { instruction , 0 , 0 , 32,
17772 0xfc003fff, 0x20002abf, &NMD::MSUB_DSP_ , 0,
17773 DSP_ }, /* MSUB[DSP] */
17774 { instruction , 0 , 0 , 32,
17775 0xfc003fff, 0x20002cbf, &NMD::MULSA_W_PH , 0,
17776 DSP_ }, /* MULSA.W.PH */
17777 { instruction , 0 , 0 , 32,
17778 0xfc003fff, 0x20002ebf, &NMD::EXTRV_RS_W , 0,
17779 DSP_ }, /* EXTRV_RS.W */
17780 };
17781
17782
17783 NMD::Pool NMD::POOL32Axf_2_DSP__24_31[8] = {
17784 { instruction , 0 , 0 , 32,
17785 0xfc003fff, 0x200030bf, &NMD::DPAU_H_QBR , 0,
17786 DSP_ }, /* DPAU.H.QBR */
17787 { instruction , 0 , 0 , 32,
17788 0xfc003fff, 0x200032bf, &NMD::DPAQX_SA_W_PH , 0,
17789 DSP_ }, /* DPAQX_SA.W.PH */
17790 { instruction , 0 , 0 , 32,
17791 0xfc003fff, 0x200034bf, &NMD::DPSU_H_QBR , 0,
17792 DSP_ }, /* DPSU.H.QBR */
17793 { instruction , 0 , 0 , 32,
17794 0xfc003fff, 0x200036bf, &NMD::DPSQX_SA_W_PH , 0,
17795 DSP_ }, /* DPSQX_SA.W.PH */
17796 { instruction , 0 , 0 , 32,
17797 0xfc003fff, 0x200038bf, &NMD::EXTPDPV , 0,
17798 DSP_ }, /* EXTPDPV */
17799 { instruction , 0 , 0 , 32,
17800 0xfc003fff, 0x20003abf, &NMD::MSUBU_DSP_ , 0,
17801 DSP_ }, /* MSUBU[DSP] */
17802 { instruction , 0 , 0 , 32,
17803 0xfc003fff, 0x20003cbf, &NMD::MULSAQ_S_W_PH , 0,
17804 DSP_ }, /* MULSAQ_S.W.PH */
17805 { instruction , 0 , 0 , 32,
17806 0xfc003fff, 0x20003ebf, &NMD::EXTRV_S_H , 0,
17807 DSP_ }, /* EXTRV_S.H */
17808 };
17809
17810
17811 NMD::Pool NMD::POOL32Axf_2[4] = {
17812 { pool , POOL32Axf_2_DSP__0_7, 8 , 32,
17813 0xfc0031ff, 0x200000bf, 0 , 0,
17814 0x0 }, /* POOL32Axf_2(DSP)_0_7 */
17815 { pool , POOL32Axf_2_DSP__8_15, 8 , 32,
17816 0xfc0031ff, 0x200010bf, 0 , 0,
17817 0x0 }, /* POOL32Axf_2(DSP)_8_15 */
17818 { pool , POOL32Axf_2_DSP__16_23, 8 , 32,
17819 0xfc0031ff, 0x200020bf, 0 , 0,
17820 0x0 }, /* POOL32Axf_2(DSP)_16_23 */
17821 { pool , POOL32Axf_2_DSP__24_31, 8 , 32,
17822 0xfc0031ff, 0x200030bf, 0 , 0,
17823 0x0 }, /* POOL32Axf_2(DSP)_24_31 */
17824 };
17825
17826
17827 NMD::Pool NMD::POOL32Axf_4[128] = {
17828 { instruction , 0 , 0 , 32,
17829 0xfc00ffff, 0x2000013f, &NMD::ABSQ_S_QB , 0,
17830 DSP_ }, /* ABSQ_S.QB */
17831 { instruction , 0 , 0 , 32,
17832 0xfc00ffff, 0x2000033f, &NMD::REPLV_PH , 0,
17833 DSP_ }, /* REPLV.PH */
17834 { reserved_block , 0 , 0 , 32,
17835 0xfc00ffff, 0x2000053f, 0 , 0,
17836 0x0 }, /* POOL32Axf_4~*(2) */
17837 { reserved_block , 0 , 0 , 32,
17838 0xfc00ffff, 0x2000073f, 0 , 0,
17839 0x0 }, /* POOL32Axf_4~*(3) */
17840 { reserved_block , 0 , 0 , 32,
17841 0xfc00ffff, 0x2000093f, 0 , 0,
17842 0x0 }, /* POOL32Axf_4~*(4) */
17843 { reserved_block , 0 , 0 , 32,
17844 0xfc00ffff, 0x20000b3f, 0 , 0,
17845 0x0 }, /* POOL32Axf_4~*(5) */
17846 { reserved_block , 0 , 0 , 32,
17847 0xfc00ffff, 0x20000d3f, 0 , 0,
17848 0x0 }, /* POOL32Axf_4~*(6) */
17849 { reserved_block , 0 , 0 , 32,
17850 0xfc00ffff, 0x20000f3f, 0 , 0,
17851 0x0 }, /* POOL32Axf_4~*(7) */
17852 { instruction , 0 , 0 , 32,
17853 0xfc00ffff, 0x2000113f, &NMD::ABSQ_S_PH , 0,
17854 DSP_ }, /* ABSQ_S.PH */
17855 { instruction , 0 , 0 , 32,
17856 0xfc00ffff, 0x2000133f, &NMD::REPLV_QB , 0,
17857 DSP_ }, /* REPLV.QB */
17858 { reserved_block , 0 , 0 , 32,
17859 0xfc00ffff, 0x2000153f, 0 , 0,
17860 0x0 }, /* POOL32Axf_4~*(10) */
17861 { reserved_block , 0 , 0 , 32,
17862 0xfc00ffff, 0x2000173f, 0 , 0,
17863 0x0 }, /* POOL32Axf_4~*(11) */
17864 { reserved_block , 0 , 0 , 32,
17865 0xfc00ffff, 0x2000193f, 0 , 0,
17866 0x0 }, /* POOL32Axf_4~*(12) */
17867 { reserved_block , 0 , 0 , 32,
17868 0xfc00ffff, 0x20001b3f, 0 , 0,
17869 0x0 }, /* POOL32Axf_4~*(13) */
17870 { reserved_block , 0 , 0 , 32,
17871 0xfc00ffff, 0x20001d3f, 0 , 0,
17872 0x0 }, /* POOL32Axf_4~*(14) */
17873 { reserved_block , 0 , 0 , 32,
17874 0xfc00ffff, 0x20001f3f, 0 , 0,
17875 0x0 }, /* POOL32Axf_4~*(15) */
17876 { instruction , 0 , 0 , 32,
17877 0xfc00ffff, 0x2000213f, &NMD::ABSQ_S_W , 0,
17878 DSP_ }, /* ABSQ_S.W */
17879 { reserved_block , 0 , 0 , 32,
17880 0xfc00ffff, 0x2000233f, 0 , 0,
17881 0x0 }, /* POOL32Axf_4~*(17) */
17882 { reserved_block , 0 , 0 , 32,
17883 0xfc00ffff, 0x2000253f, 0 , 0,
17884 0x0 }, /* POOL32Axf_4~*(18) */
17885 { reserved_block , 0 , 0 , 32,
17886 0xfc00ffff, 0x2000273f, 0 , 0,
17887 0x0 }, /* POOL32Axf_4~*(19) */
17888 { reserved_block , 0 , 0 , 32,
17889 0xfc00ffff, 0x2000293f, 0 , 0,
17890 0x0 }, /* POOL32Axf_4~*(20) */
17891 { reserved_block , 0 , 0 , 32,
17892 0xfc00ffff, 0x20002b3f, 0 , 0,
17893 0x0 }, /* POOL32Axf_4~*(21) */
17894 { reserved_block , 0 , 0 , 32,
17895 0xfc00ffff, 0x20002d3f, 0 , 0,
17896 0x0 }, /* POOL32Axf_4~*(22) */
17897 { reserved_block , 0 , 0 , 32,
17898 0xfc00ffff, 0x20002f3f, 0 , 0,
17899 0x0 }, /* POOL32Axf_4~*(23) */
17900 { reserved_block , 0 , 0 , 32,
17901 0xfc00ffff, 0x2000313f, 0 , 0,
17902 0x0 }, /* POOL32Axf_4~*(24) */
17903 { reserved_block , 0 , 0 , 32,
17904 0xfc00ffff, 0x2000333f, 0 , 0,
17905 0x0 }, /* POOL32Axf_4~*(25) */
17906 { reserved_block , 0 , 0 , 32,
17907 0xfc00ffff, 0x2000353f, 0 , 0,
17908 0x0 }, /* POOL32Axf_4~*(26) */
17909 { reserved_block , 0 , 0 , 32,
17910 0xfc00ffff, 0x2000373f, 0 , 0,
17911 0x0 }, /* POOL32Axf_4~*(27) */
17912 { reserved_block , 0 , 0 , 32,
17913 0xfc00ffff, 0x2000393f, 0 , 0,
17914 0x0 }, /* POOL32Axf_4~*(28) */
17915 { reserved_block , 0 , 0 , 32,
17916 0xfc00ffff, 0x20003b3f, 0 , 0,
17917 0x0 }, /* POOL32Axf_4~*(29) */
17918 { reserved_block , 0 , 0 , 32,
17919 0xfc00ffff, 0x20003d3f, 0 , 0,
17920 0x0 }, /* POOL32Axf_4~*(30) */
17921 { reserved_block , 0 , 0 , 32,
17922 0xfc00ffff, 0x20003f3f, 0 , 0,
17923 0x0 }, /* POOL32Axf_4~*(31) */
17924 { instruction , 0 , 0 , 32,
17925 0xfc00ffff, 0x2000413f, &NMD::INSV , 0,
17926 DSP_ }, /* INSV */
17927 { reserved_block , 0 , 0 , 32,
17928 0xfc00ffff, 0x2000433f, 0 , 0,
17929 0x0 }, /* POOL32Axf_4~*(33) */
17930 { reserved_block , 0 , 0 , 32,
17931 0xfc00ffff, 0x2000453f, 0 , 0,
17932 0x0 }, /* POOL32Axf_4~*(34) */
17933 { reserved_block , 0 , 0 , 32,
17934 0xfc00ffff, 0x2000473f, 0 , 0,
17935 0x0 }, /* POOL32Axf_4~*(35) */
17936 { reserved_block , 0 , 0 , 32,
17937 0xfc00ffff, 0x2000493f, 0 , 0,
17938 0x0 }, /* POOL32Axf_4~*(36) */
17939 { instruction , 0 , 0 , 32,
17940 0xfc00ffff, 0x20004b3f, &NMD::CLO , 0,
17941 XMMS_ }, /* CLO */
17942 { instruction , 0 , 0 , 32,
17943 0xfc00ffff, 0x20004d3f, &NMD::MFC2 , 0,
17944 CP2_ }, /* MFC2 */
17945 { reserved_block , 0 , 0 , 32,
17946 0xfc00ffff, 0x20004f3f, 0 , 0,
17947 0x0 }, /* POOL32Axf_4~*(39) */
17948 { instruction , 0 , 0 , 32,
17949 0xfc00ffff, 0x2000513f, &NMD::PRECEQ_W_PHL , 0,
17950 DSP_ }, /* PRECEQ.W.PHL */
17951 { reserved_block , 0 , 0 , 32,
17952 0xfc00ffff, 0x2000533f, 0 , 0,
17953 0x0 }, /* POOL32Axf_4~*(41) */
17954 { reserved_block , 0 , 0 , 32,
17955 0xfc00ffff, 0x2000553f, 0 , 0,
17956 0x0 }, /* POOL32Axf_4~*(42) */
17957 { reserved_block , 0 , 0 , 32,
17958 0xfc00ffff, 0x2000573f, 0 , 0,
17959 0x0 }, /* POOL32Axf_4~*(43) */
17960 { reserved_block , 0 , 0 , 32,
17961 0xfc00ffff, 0x2000593f, 0 , 0,
17962 0x0 }, /* POOL32Axf_4~*(44) */
17963 { instruction , 0 , 0 , 32,
17964 0xfc00ffff, 0x20005b3f, &NMD::CLZ , 0,
17965 XMMS_ }, /* CLZ */
17966 { instruction , 0 , 0 , 32,
17967 0xfc00ffff, 0x20005d3f, &NMD::MTC2 , 0,
17968 CP2_ }, /* MTC2 */
17969 { reserved_block , 0 , 0 , 32,
17970 0xfc00ffff, 0x20005f3f, 0 , 0,
17971 0x0 }, /* POOL32Axf_4~*(47) */
17972 { instruction , 0 , 0 , 32,
17973 0xfc00ffff, 0x2000613f, &NMD::PRECEQ_W_PHR , 0,
17974 DSP_ }, /* PRECEQ.W.PHR */
17975 { reserved_block , 0 , 0 , 32,
17976 0xfc00ffff, 0x2000633f, 0 , 0,
17977 0x0 }, /* POOL32Axf_4~*(49) */
17978 { reserved_block , 0 , 0 , 32,
17979 0xfc00ffff, 0x2000653f, 0 , 0,
17980 0x0 }, /* POOL32Axf_4~*(50) */
17981 { reserved_block , 0 , 0 , 32,
17982 0xfc00ffff, 0x2000673f, 0 , 0,
17983 0x0 }, /* POOL32Axf_4~*(51) */
17984 { reserved_block , 0 , 0 , 32,
17985 0xfc00ffff, 0x2000693f, 0 , 0,
17986 0x0 }, /* POOL32Axf_4~*(52) */
17987 { reserved_block , 0 , 0 , 32,
17988 0xfc00ffff, 0x20006b3f, 0 , 0,
17989 0x0 }, /* POOL32Axf_4~*(53) */
17990 { instruction , 0 , 0 , 32,
17991 0xfc00ffff, 0x20006d3f, &NMD::DMFC2 , 0,
17992 CP2_ }, /* DMFC2 */
17993 { reserved_block , 0 , 0 , 32,
17994 0xfc00ffff, 0x20006f3f, 0 , 0,
17995 0x0 }, /* POOL32Axf_4~*(55) */
17996 { instruction , 0 , 0 , 32,
17997 0xfc00ffff, 0x2000713f, &NMD::PRECEQU_PH_QBL , 0,
17998 DSP_ }, /* PRECEQU.PH.QBL */
17999 { instruction , 0 , 0 , 32,
18000 0xfc00ffff, 0x2000733f, &NMD::PRECEQU_PH_QBLA , 0,
18001 DSP_ }, /* PRECEQU.PH.QBLA */
18002 { reserved_block , 0 , 0 , 32,
18003 0xfc00ffff, 0x2000753f, 0 , 0,
18004 0x0 }, /* POOL32Axf_4~*(58) */
18005 { reserved_block , 0 , 0 , 32,
18006 0xfc00ffff, 0x2000773f, 0 , 0,
18007 0x0 }, /* POOL32Axf_4~*(59) */
18008 { reserved_block , 0 , 0 , 32,
18009 0xfc00ffff, 0x2000793f, 0 , 0,
18010 0x0 }, /* POOL32Axf_4~*(60) */
18011 { reserved_block , 0 , 0 , 32,
18012 0xfc00ffff, 0x20007b3f, 0 , 0,
18013 0x0 }, /* POOL32Axf_4~*(61) */
18014 { instruction , 0 , 0 , 32,
18015 0xfc00ffff, 0x20007d3f, &NMD::DMTC2 , 0,
18016 CP2_ }, /* DMTC2 */
18017 { reserved_block , 0 , 0 , 32,
18018 0xfc00ffff, 0x20007f3f, 0 , 0,
18019 0x0 }, /* POOL32Axf_4~*(63) */
18020 { reserved_block , 0 , 0 , 32,
18021 0xfc00ffff, 0x2000813f, 0 , 0,
18022 0x0 }, /* POOL32Axf_4~*(64) */
18023 { reserved_block , 0 , 0 , 32,
18024 0xfc00ffff, 0x2000833f, 0 , 0,
18025 0x0 }, /* POOL32Axf_4~*(65) */
18026 { reserved_block , 0 , 0 , 32,
18027 0xfc00ffff, 0x2000853f, 0 , 0,
18028 0x0 }, /* POOL32Axf_4~*(66) */
18029 { reserved_block , 0 , 0 , 32,
18030 0xfc00ffff, 0x2000873f, 0 , 0,
18031 0x0 }, /* POOL32Axf_4~*(67) */
18032 { reserved_block , 0 , 0 , 32,
18033 0xfc00ffff, 0x2000893f, 0 , 0,
18034 0x0 }, /* POOL32Axf_4~*(68) */
18035 { reserved_block , 0 , 0 , 32,
18036 0xfc00ffff, 0x20008b3f, 0 , 0,
18037 0x0 }, /* POOL32Axf_4~*(69) */
18038 { instruction , 0 , 0 , 32,
18039 0xfc00ffff, 0x20008d3f, &NMD::MFHC2 , 0,
18040 CP2_ }, /* MFHC2 */
18041 { reserved_block , 0 , 0 , 32,
18042 0xfc00ffff, 0x20008f3f, 0 , 0,
18043 0x0 }, /* POOL32Axf_4~*(71) */
18044 { instruction , 0 , 0 , 32,
18045 0xfc00ffff, 0x2000913f, &NMD::PRECEQU_PH_QBR , 0,
18046 DSP_ }, /* PRECEQU.PH.QBR */
18047 { instruction , 0 , 0 , 32,
18048 0xfc00ffff, 0x2000933f, &NMD::PRECEQU_PH_QBRA , 0,
18049 DSP_ }, /* PRECEQU.PH.QBRA */
18050 { reserved_block , 0 , 0 , 32,
18051 0xfc00ffff, 0x2000953f, 0 , 0,
18052 0x0 }, /* POOL32Axf_4~*(74) */
18053 { reserved_block , 0 , 0 , 32,
18054 0xfc00ffff, 0x2000973f, 0 , 0,
18055 0x0 }, /* POOL32Axf_4~*(75) */
18056 { reserved_block , 0 , 0 , 32,
18057 0xfc00ffff, 0x2000993f, 0 , 0,
18058 0x0 }, /* POOL32Axf_4~*(76) */
18059 { reserved_block , 0 , 0 , 32,
18060 0xfc00ffff, 0x20009b3f, 0 , 0,
18061 0x0 }, /* POOL32Axf_4~*(77) */
18062 { instruction , 0 , 0 , 32,
18063 0xfc00ffff, 0x20009d3f, &NMD::MTHC2 , 0,
18064 CP2_ }, /* MTHC2 */
18065 { reserved_block , 0 , 0 , 32,
18066 0xfc00ffff, 0x20009f3f, 0 , 0,
18067 0x0 }, /* POOL32Axf_4~*(79) */
18068 { reserved_block , 0 , 0 , 32,
18069 0xfc00ffff, 0x2000a13f, 0 , 0,
18070 0x0 }, /* POOL32Axf_4~*(80) */
18071 { reserved_block , 0 , 0 , 32,
18072 0xfc00ffff, 0x2000a33f, 0 , 0,
18073 0x0 }, /* POOL32Axf_4~*(81) */
18074 { reserved_block , 0 , 0 , 32,
18075 0xfc00ffff, 0x2000a53f, 0 , 0,
18076 0x0 }, /* POOL32Axf_4~*(82) */
18077 { reserved_block , 0 , 0 , 32,
18078 0xfc00ffff, 0x2000a73f, 0 , 0,
18079 0x0 }, /* POOL32Axf_4~*(83) */
18080 { reserved_block , 0 , 0 , 32,
18081 0xfc00ffff, 0x2000a93f, 0 , 0,
18082 0x0 }, /* POOL32Axf_4~*(84) */
18083 { reserved_block , 0 , 0 , 32,
18084 0xfc00ffff, 0x2000ab3f, 0 , 0,
18085 0x0 }, /* POOL32Axf_4~*(85) */
18086 { reserved_block , 0 , 0 , 32,
18087 0xfc00ffff, 0x2000ad3f, 0 , 0,
18088 0x0 }, /* POOL32Axf_4~*(86) */
18089 { reserved_block , 0 , 0 , 32,
18090 0xfc00ffff, 0x2000af3f, 0 , 0,
18091 0x0 }, /* POOL32Axf_4~*(87) */
18092 { instruction , 0 , 0 , 32,
18093 0xfc00ffff, 0x2000b13f, &NMD::PRECEU_PH_QBL , 0,
18094 DSP_ }, /* PRECEU.PH.QBL */
18095 { instruction , 0 , 0 , 32,
18096 0xfc00ffff, 0x2000b33f, &NMD::PRECEU_PH_QBLA , 0,
18097 DSP_ }, /* PRECEU.PH.QBLA */
18098 { reserved_block , 0 , 0 , 32,
18099 0xfc00ffff, 0x2000b53f, 0 , 0,
18100 0x0 }, /* POOL32Axf_4~*(90) */
18101 { reserved_block , 0 , 0 , 32,
18102 0xfc00ffff, 0x2000b73f, 0 , 0,
18103 0x0 }, /* POOL32Axf_4~*(91) */
18104 { reserved_block , 0 , 0 , 32,
18105 0xfc00ffff, 0x2000b93f, 0 , 0,
18106 0x0 }, /* POOL32Axf_4~*(92) */
18107 { reserved_block , 0 , 0 , 32,
18108 0xfc00ffff, 0x2000bb3f, 0 , 0,
18109 0x0 }, /* POOL32Axf_4~*(93) */
18110 { reserved_block , 0 , 0 , 32,
18111 0xfc00ffff, 0x2000bd3f, 0 , 0,
18112 0x0 }, /* POOL32Axf_4~*(94) */
18113 { reserved_block , 0 , 0 , 32,
18114 0xfc00ffff, 0x2000bf3f, 0 , 0,
18115 0x0 }, /* POOL32Axf_4~*(95) */
18116 { reserved_block , 0 , 0 , 32,
18117 0xfc00ffff, 0x2000c13f, 0 , 0,
18118 0x0 }, /* POOL32Axf_4~*(96) */
18119 { reserved_block , 0 , 0 , 32,
18120 0xfc00ffff, 0x2000c33f, 0 , 0,
18121 0x0 }, /* POOL32Axf_4~*(97) */
18122 { reserved_block , 0 , 0 , 32,
18123 0xfc00ffff, 0x2000c53f, 0 , 0,
18124 0x0 }, /* POOL32Axf_4~*(98) */
18125 { reserved_block , 0 , 0 , 32,
18126 0xfc00ffff, 0x2000c73f, 0 , 0,
18127 0x0 }, /* POOL32Axf_4~*(99) */
18128 { reserved_block , 0 , 0 , 32,
18129 0xfc00ffff, 0x2000c93f, 0 , 0,
18130 0x0 }, /* POOL32Axf_4~*(100) */
18131 { reserved_block , 0 , 0 , 32,
18132 0xfc00ffff, 0x2000cb3f, 0 , 0,
18133 0x0 }, /* POOL32Axf_4~*(101) */
18134 { instruction , 0 , 0 , 32,
18135 0xfc00ffff, 0x2000cd3f, &NMD::CFC2 , 0,
18136 CP2_ }, /* CFC2 */
18137 { reserved_block , 0 , 0 , 32,
18138 0xfc00ffff, 0x2000cf3f, 0 , 0,
18139 0x0 }, /* POOL32Axf_4~*(103) */
18140 { instruction , 0 , 0 , 32,
18141 0xfc00ffff, 0x2000d13f, &NMD::PRECEU_PH_QBR , 0,
18142 DSP_ }, /* PRECEU.PH.QBR */
18143 { instruction , 0 , 0 , 32,
18144 0xfc00ffff, 0x2000d33f, &NMD::PRECEU_PH_QBRA , 0,
18145 DSP_ }, /* PRECEU.PH.QBRA */
18146 { reserved_block , 0 , 0 , 32,
18147 0xfc00ffff, 0x2000d53f, 0 , 0,
18148 0x0 }, /* POOL32Axf_4~*(106) */
18149 { reserved_block , 0 , 0 , 32,
18150 0xfc00ffff, 0x2000d73f, 0 , 0,
18151 0x0 }, /* POOL32Axf_4~*(107) */
18152 { reserved_block , 0 , 0 , 32,
18153 0xfc00ffff, 0x2000d93f, 0 , 0,
18154 0x0 }, /* POOL32Axf_4~*(108) */
18155 { reserved_block , 0 , 0 , 32,
18156 0xfc00ffff, 0x2000db3f, 0 , 0,
18157 0x0 }, /* POOL32Axf_4~*(109) */
18158 { instruction , 0 , 0 , 32,
18159 0xfc00ffff, 0x2000dd3f, &NMD::CTC2 , 0,
18160 CP2_ }, /* CTC2 */
18161 { reserved_block , 0 , 0 , 32,
18162 0xfc00ffff, 0x2000df3f, 0 , 0,
18163 0x0 }, /* POOL32Axf_4~*(111) */
18164 { reserved_block , 0 , 0 , 32,
18165 0xfc00ffff, 0x2000e13f, 0 , 0,
18166 0x0 }, /* POOL32Axf_4~*(112) */
18167 { reserved_block , 0 , 0 , 32,
18168 0xfc00ffff, 0x2000e33f, 0 , 0,
18169 0x0 }, /* POOL32Axf_4~*(113) */
18170 { reserved_block , 0 , 0 , 32,
18171 0xfc00ffff, 0x2000e53f, 0 , 0,
18172 0x0 }, /* POOL32Axf_4~*(114) */
18173 { reserved_block , 0 , 0 , 32,
18174 0xfc00ffff, 0x2000e73f, 0 , 0,
18175 0x0 }, /* POOL32Axf_4~*(115) */
18176 { reserved_block , 0 , 0 , 32,
18177 0xfc00ffff, 0x2000e93f, 0 , 0,
18178 0x0 }, /* POOL32Axf_4~*(116) */
18179 { reserved_block , 0 , 0 , 32,
18180 0xfc00ffff, 0x2000eb3f, 0 , 0,
18181 0x0 }, /* POOL32Axf_4~*(117) */
18182 { reserved_block , 0 , 0 , 32,
18183 0xfc00ffff, 0x2000ed3f, 0 , 0,
18184 0x0 }, /* POOL32Axf_4~*(118) */
18185 { reserved_block , 0 , 0 , 32,
18186 0xfc00ffff, 0x2000ef3f, 0 , 0,
18187 0x0 }, /* POOL32Axf_4~*(119) */
18188 { instruction , 0 , 0 , 32,
18189 0xfc00ffff, 0x2000f13f, &NMD::RADDU_W_QB , 0,
18190 DSP_ }, /* RADDU.W.QB */
18191 { reserved_block , 0 , 0 , 32,
18192 0xfc00ffff, 0x2000f33f, 0 , 0,
18193 0x0 }, /* POOL32Axf_4~*(121) */
18194 { reserved_block , 0 , 0 , 32,
18195 0xfc00ffff, 0x2000f53f, 0 , 0,
18196 0x0 }, /* POOL32Axf_4~*(122) */
18197 { reserved_block , 0 , 0 , 32,
18198 0xfc00ffff, 0x2000f73f, 0 , 0,
18199 0x0 }, /* POOL32Axf_4~*(123) */
18200 { reserved_block , 0 , 0 , 32,
18201 0xfc00ffff, 0x2000f93f, 0 , 0,
18202 0x0 }, /* POOL32Axf_4~*(124) */
18203 { reserved_block , 0 , 0 , 32,
18204 0xfc00ffff, 0x2000fb3f, 0 , 0,
18205 0x0 }, /* POOL32Axf_4~*(125) */
18206 { reserved_block , 0 , 0 , 32,
18207 0xfc00ffff, 0x2000fd3f, 0 , 0,
18208 0x0 }, /* POOL32Axf_4~*(126) */
18209 { reserved_block , 0 , 0 , 32,
18210 0xfc00ffff, 0x2000ff3f, 0 , 0,
18211 0x0 }, /* POOL32Axf_4~*(127) */
18212 };
18213
18214
18215 NMD::Pool NMD::POOL32Axf_5_group0[32] = {
18216 { instruction , 0 , 0 , 32,
18217 0xfc00ffff, 0x2000017f, &NMD::TLBGP , 0,
18218 CP0_ | VZ_ | TLB_ }, /* TLBGP */
18219 { instruction , 0 , 0 , 32,
18220 0xfc00ffff, 0x2000037f, &NMD::TLBP , 0,
18221 CP0_ | TLB_ }, /* TLBP */
18222 { instruction , 0 , 0 , 32,
18223 0xfc00ffff, 0x2000057f, &NMD::TLBGINV , 0,
18224 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINV */
18225 { instruction , 0 , 0 , 32,
18226 0xfc00ffff, 0x2000077f, &NMD::TLBINV , 0,
18227 CP0_ | TLB_ | TLBINV_}, /* TLBINV */
18228 { reserved_block , 0 , 0 , 32,
18229 0xfc00ffff, 0x2000097f, 0 , 0,
18230 0x0 }, /* POOL32Axf_5_group0~*(4) */
18231 { reserved_block , 0 , 0 , 32,
18232 0xfc00ffff, 0x20000b7f, 0 , 0,
18233 0x0 }, /* POOL32Axf_5_group0~*(5) */
18234 { reserved_block , 0 , 0 , 32,
18235 0xfc00ffff, 0x20000d7f, 0 , 0,
18236 0x0 }, /* POOL32Axf_5_group0~*(6) */
18237 { reserved_block , 0 , 0 , 32,
18238 0xfc00ffff, 0x20000f7f, 0 , 0,
18239 0x0 }, /* POOL32Axf_5_group0~*(7) */
18240 { instruction , 0 , 0 , 32,
18241 0xfc00ffff, 0x2000117f, &NMD::TLBGR , 0,
18242 CP0_ | VZ_ | TLB_ }, /* TLBGR */
18243 { instruction , 0 , 0 , 32,
18244 0xfc00ffff, 0x2000137f, &NMD::TLBR , 0,
18245 CP0_ | TLB_ }, /* TLBR */
18246 { instruction , 0 , 0 , 32,
18247 0xfc00ffff, 0x2000157f, &NMD::TLBGINVF , 0,
18248 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINVF */
18249 { instruction , 0 , 0 , 32,
18250 0xfc00ffff, 0x2000177f, &NMD::TLBINVF , 0,
18251 CP0_ | TLB_ | TLBINV_}, /* TLBINVF */
18252 { reserved_block , 0 , 0 , 32,
18253 0xfc00ffff, 0x2000197f, 0 , 0,
18254 0x0 }, /* POOL32Axf_5_group0~*(12) */
18255 { reserved_block , 0 , 0 , 32,
18256 0xfc00ffff, 0x20001b7f, 0 , 0,
18257 0x0 }, /* POOL32Axf_5_group0~*(13) */
18258 { reserved_block , 0 , 0 , 32,
18259 0xfc00ffff, 0x20001d7f, 0 , 0,
18260 0x0 }, /* POOL32Axf_5_group0~*(14) */
18261 { reserved_block , 0 , 0 , 32,
18262 0xfc00ffff, 0x20001f7f, 0 , 0,
18263 0x0 }, /* POOL32Axf_5_group0~*(15) */
18264 { instruction , 0 , 0 , 32,
18265 0xfc00ffff, 0x2000217f, &NMD::TLBGWI , 0,
18266 CP0_ | VZ_ | TLB_ }, /* TLBGWI */
18267 { instruction , 0 , 0 , 32,
18268 0xfc00ffff, 0x2000237f, &NMD::TLBWI , 0,
18269 CP0_ | TLB_ }, /* TLBWI */
18270 { reserved_block , 0 , 0 , 32,
18271 0xfc00ffff, 0x2000257f, 0 , 0,
18272 0x0 }, /* POOL32Axf_5_group0~*(18) */
18273 { reserved_block , 0 , 0 , 32,
18274 0xfc00ffff, 0x2000277f, 0 , 0,
18275 0x0 }, /* POOL32Axf_5_group0~*(19) */
18276 { reserved_block , 0 , 0 , 32,
18277 0xfc00ffff, 0x2000297f, 0 , 0,
18278 0x0 }, /* POOL32Axf_5_group0~*(20) */
18279 { reserved_block , 0 , 0 , 32,
18280 0xfc00ffff, 0x20002b7f, 0 , 0,
18281 0x0 }, /* POOL32Axf_5_group0~*(21) */
18282 { reserved_block , 0 , 0 , 32,
18283 0xfc00ffff, 0x20002d7f, 0 , 0,
18284 0x0 }, /* POOL32Axf_5_group0~*(22) */
18285 { reserved_block , 0 , 0 , 32,
18286 0xfc00ffff, 0x20002f7f, 0 , 0,
18287 0x0 }, /* POOL32Axf_5_group0~*(23) */
18288 { instruction , 0 , 0 , 32,
18289 0xfc00ffff, 0x2000317f, &NMD::TLBGWR , 0,
18290 CP0_ | VZ_ | TLB_ }, /* TLBGWR */
18291 { instruction , 0 , 0 , 32,
18292 0xfc00ffff, 0x2000337f, &NMD::TLBWR , 0,
18293 CP0_ | TLB_ }, /* TLBWR */
18294 { reserved_block , 0 , 0 , 32,
18295 0xfc00ffff, 0x2000357f, 0 , 0,
18296 0x0 }, /* POOL32Axf_5_group0~*(26) */
18297 { reserved_block , 0 , 0 , 32,
18298 0xfc00ffff, 0x2000377f, 0 , 0,
18299 0x0 }, /* POOL32Axf_5_group0~*(27) */
18300 { reserved_block , 0 , 0 , 32,
18301 0xfc00ffff, 0x2000397f, 0 , 0,
18302 0x0 }, /* POOL32Axf_5_group0~*(28) */
18303 { reserved_block , 0 , 0 , 32,
18304 0xfc00ffff, 0x20003b7f, 0 , 0,
18305 0x0 }, /* POOL32Axf_5_group0~*(29) */
18306 { reserved_block , 0 , 0 , 32,
18307 0xfc00ffff, 0x20003d7f, 0 , 0,
18308 0x0 }, /* POOL32Axf_5_group0~*(30) */
18309 { reserved_block , 0 , 0 , 32,
18310 0xfc00ffff, 0x20003f7f, 0 , 0,
18311 0x0 }, /* POOL32Axf_5_group0~*(31) */
18312 };
18313
18314
18315 NMD::Pool NMD::POOL32Axf_5_group1[32] = {
18316 { reserved_block , 0 , 0 , 32,
18317 0xfc00ffff, 0x2000417f, 0 , 0,
18318 0x0 }, /* POOL32Axf_5_group1~*(0) */
18319 { reserved_block , 0 , 0 , 32,
18320 0xfc00ffff, 0x2000437f, 0 , 0,
18321 0x0 }, /* POOL32Axf_5_group1~*(1) */
18322 { reserved_block , 0 , 0 , 32,
18323 0xfc00ffff, 0x2000457f, 0 , 0,
18324 0x0 }, /* POOL32Axf_5_group1~*(2) */
18325 { instruction , 0 , 0 , 32,
18326 0xfc00ffff, 0x2000477f, &NMD::DI , 0,
18327 0x0 }, /* DI */
18328 { reserved_block , 0 , 0 , 32,
18329 0xfc00ffff, 0x2000497f, 0 , 0,
18330 0x0 }, /* POOL32Axf_5_group1~*(4) */
18331 { reserved_block , 0 , 0 , 32,
18332 0xfc00ffff, 0x20004b7f, 0 , 0,
18333 0x0 }, /* POOL32Axf_5_group1~*(5) */
18334 { reserved_block , 0 , 0 , 32,
18335 0xfc00ffff, 0x20004d7f, 0 , 0,
18336 0x0 }, /* POOL32Axf_5_group1~*(6) */
18337 { reserved_block , 0 , 0 , 32,
18338 0xfc00ffff, 0x20004f7f, 0 , 0,
18339 0x0 }, /* POOL32Axf_5_group1~*(7) */
18340 { reserved_block , 0 , 0 , 32,
18341 0xfc00ffff, 0x2000517f, 0 , 0,
18342 0x0 }, /* POOL32Axf_5_group1~*(8) */
18343 { reserved_block , 0 , 0 , 32,
18344 0xfc00ffff, 0x2000537f, 0 , 0,
18345 0x0 }, /* POOL32Axf_5_group1~*(9) */
18346 { reserved_block , 0 , 0 , 32,
18347 0xfc00ffff, 0x2000557f, 0 , 0,
18348 0x0 }, /* POOL32Axf_5_group1~*(10) */
18349 { instruction , 0 , 0 , 32,
18350 0xfc00ffff, 0x2000577f, &NMD::EI , 0,
18351 0x0 }, /* EI */
18352 { reserved_block , 0 , 0 , 32,
18353 0xfc00ffff, 0x2000597f, 0 , 0,
18354 0x0 }, /* POOL32Axf_5_group1~*(12) */
18355 { reserved_block , 0 , 0 , 32,
18356 0xfc00ffff, 0x20005b7f, 0 , 0,
18357 0x0 }, /* POOL32Axf_5_group1~*(13) */
18358 { reserved_block , 0 , 0 , 32,
18359 0xfc00ffff, 0x20005d7f, 0 , 0,
18360 0x0 }, /* POOL32Axf_5_group1~*(14) */
18361 { reserved_block , 0 , 0 , 32,
18362 0xfc00ffff, 0x20005f7f, 0 , 0,
18363 0x0 }, /* POOL32Axf_5_group1~*(15) */
18364 { reserved_block , 0 , 0 , 32,
18365 0xfc00ffff, 0x2000617f, 0 , 0,
18366 0x0 }, /* POOL32Axf_5_group1~*(16) */
18367 { reserved_block , 0 , 0 , 32,
18368 0xfc00ffff, 0x2000637f, 0 , 0,
18369 0x0 }, /* POOL32Axf_5_group1~*(17) */
18370 { reserved_block , 0 , 0 , 32,
18371 0xfc00ffff, 0x2000657f, 0 , 0,
18372 0x0 }, /* POOL32Axf_5_group1~*(18) */
18373 { reserved_block , 0 , 0 , 32,
18374 0xfc00ffff, 0x2000677f, 0 , 0,
18375 0x0 }, /* POOL32Axf_5_group1~*(19) */
18376 { reserved_block , 0 , 0 , 32,
18377 0xfc00ffff, 0x2000697f, 0 , 0,
18378 0x0 }, /* POOL32Axf_5_group1~*(20) */
18379 { reserved_block , 0 , 0 , 32,
18380 0xfc00ffff, 0x20006b7f, 0 , 0,
18381 0x0 }, /* POOL32Axf_5_group1~*(21) */
18382 { reserved_block , 0 , 0 , 32,
18383 0xfc00ffff, 0x20006d7f, 0 , 0,
18384 0x0 }, /* POOL32Axf_5_group1~*(22) */
18385 { reserved_block , 0 , 0 , 32,
18386 0xfc00ffff, 0x20006f7f, 0 , 0,
18387 0x0 }, /* POOL32Axf_5_group1~*(23) */
18388 { reserved_block , 0 , 0 , 32,
18389 0xfc00ffff, 0x2000717f, 0 , 0,
18390 0x0 }, /* POOL32Axf_5_group1~*(24) */
18391 { reserved_block , 0 , 0 , 32,
18392 0xfc00ffff, 0x2000737f, 0 , 0,
18393 0x0 }, /* POOL32Axf_5_group1~*(25) */
18394 { reserved_block , 0 , 0 , 32,
18395 0xfc00ffff, 0x2000757f, 0 , 0,
18396 0x0 }, /* POOL32Axf_5_group1~*(26) */
18397 { reserved_block , 0 , 0 , 32,
18398 0xfc00ffff, 0x2000777f, 0 , 0,
18399 0x0 }, /* POOL32Axf_5_group1~*(27) */
18400 { reserved_block , 0 , 0 , 32,
18401 0xfc00ffff, 0x2000797f, 0 , 0,
18402 0x0 }, /* POOL32Axf_5_group1~*(28) */
18403 { reserved_block , 0 , 0 , 32,
18404 0xfc00ffff, 0x20007b7f, 0 , 0,
18405 0x0 }, /* POOL32Axf_5_group1~*(29) */
18406 { reserved_block , 0 , 0 , 32,
18407 0xfc00ffff, 0x20007d7f, 0 , 0,
18408 0x0 }, /* POOL32Axf_5_group1~*(30) */
18409 { reserved_block , 0 , 0 , 32,
18410 0xfc00ffff, 0x20007f7f, 0 , 0,
18411 0x0 }, /* POOL32Axf_5_group1~*(31) */
18412 };
18413
18414
18415 NMD::Pool NMD::ERETx[2] = {
18416 { instruction , 0 , 0 , 32,
18417 0xfc01ffff, 0x2000f37f, &NMD::ERET , 0,
18418 0x0 }, /* ERET */
18419 { instruction , 0 , 0 , 32,
18420 0xfc01ffff, 0x2001f37f, &NMD::ERETNC , 0,
18421 0x0 }, /* ERETNC */
18422 };
18423
18424
18425 NMD::Pool NMD::POOL32Axf_5_group3[32] = {
18426 { reserved_block , 0 , 0 , 32,
18427 0xfc00ffff, 0x2000c17f, 0 , 0,
18428 0x0 }, /* POOL32Axf_5_group3~*(0) */
18429 { instruction , 0 , 0 , 32,
18430 0xfc00ffff, 0x2000c37f, &NMD::WAIT , 0,
18431 0x0 }, /* WAIT */
18432 { reserved_block , 0 , 0 , 32,
18433 0xfc00ffff, 0x2000c57f, 0 , 0,
18434 0x0 }, /* POOL32Axf_5_group3~*(2) */
18435 { reserved_block , 0 , 0 , 32,
18436 0xfc00ffff, 0x2000c77f, 0 , 0,
18437 0x0 }, /* POOL32Axf_5_group3~*(3) */
18438 { reserved_block , 0 , 0 , 32,
18439 0xfc00ffff, 0x2000c97f, 0 , 0,
18440 0x0 }, /* POOL32Axf_5_group3~*(4) */
18441 { reserved_block , 0 , 0 , 32,
18442 0xfc00ffff, 0x2000cb7f, 0 , 0,
18443 0x0 }, /* POOL32Axf_5_group3~*(5) */
18444 { reserved_block , 0 , 0 , 32,
18445 0xfc00ffff, 0x2000cd7f, 0 , 0,
18446 0x0 }, /* POOL32Axf_5_group3~*(6) */
18447 { reserved_block , 0 , 0 , 32,
18448 0xfc00ffff, 0x2000cf7f, 0 , 0,
18449 0x0 }, /* POOL32Axf_5_group3~*(7) */
18450 { reserved_block , 0 , 0 , 32,
18451 0xfc00ffff, 0x2000d17f, 0 , 0,
18452 0x0 }, /* POOL32Axf_5_group3~*(8) */
18453 { instruction , 0 , 0 , 32,
18454 0xfc00ffff, 0x2000d37f, &NMD::IRET , 0,
18455 MCU_ }, /* IRET */
18456 { reserved_block , 0 , 0 , 32,
18457 0xfc00ffff, 0x2000d57f, 0 , 0,
18458 0x0 }, /* POOL32Axf_5_group3~*(10) */
18459 { reserved_block , 0 , 0 , 32,
18460 0xfc00ffff, 0x2000d77f, 0 , 0,
18461 0x0 }, /* POOL32Axf_5_group3~*(11) */
18462 { reserved_block , 0 , 0 , 32,
18463 0xfc00ffff, 0x2000d97f, 0 , 0,
18464 0x0 }, /* POOL32Axf_5_group3~*(12) */
18465 { reserved_block , 0 , 0 , 32,
18466 0xfc00ffff, 0x2000db7f, 0 , 0,
18467 0x0 }, /* POOL32Axf_5_group3~*(13) */
18468 { reserved_block , 0 , 0 , 32,
18469 0xfc00ffff, 0x2000dd7f, 0 , 0,
18470 0x0 }, /* POOL32Axf_5_group3~*(14) */
18471 { reserved_block , 0 , 0 , 32,
18472 0xfc00ffff, 0x2000df7f, 0 , 0,
18473 0x0 }, /* POOL32Axf_5_group3~*(15) */
18474 { instruction , 0 , 0 , 32,
18475 0xfc00ffff, 0x2000e17f, &NMD::RDPGPR , 0,
18476 CP0_ }, /* RDPGPR */
18477 { instruction , 0 , 0 , 32,
18478 0xfc00ffff, 0x2000e37f, &NMD::DERET , 0,
18479 EJTAG_ }, /* DERET */
18480 { reserved_block , 0 , 0 , 32,
18481 0xfc00ffff, 0x2000e57f, 0 , 0,
18482 0x0 }, /* POOL32Axf_5_group3~*(18) */
18483 { reserved_block , 0 , 0 , 32,
18484 0xfc00ffff, 0x2000e77f, 0 , 0,
18485 0x0 }, /* POOL32Axf_5_group3~*(19) */
18486 { reserved_block , 0 , 0 , 32,
18487 0xfc00ffff, 0x2000e97f, 0 , 0,
18488 0x0 }, /* POOL32Axf_5_group3~*(20) */
18489 { reserved_block , 0 , 0 , 32,
18490 0xfc00ffff, 0x2000eb7f, 0 , 0,
18491 0x0 }, /* POOL32Axf_5_group3~*(21) */
18492 { reserved_block , 0 , 0 , 32,
18493 0xfc00ffff, 0x2000ed7f, 0 , 0,
18494 0x0 }, /* POOL32Axf_5_group3~*(22) */
18495 { reserved_block , 0 , 0 , 32,
18496 0xfc00ffff, 0x2000ef7f, 0 , 0,
18497 0x0 }, /* POOL32Axf_5_group3~*(23) */
18498 { instruction , 0 , 0 , 32,
18499 0xfc00ffff, 0x2000f17f, &NMD::WRPGPR , 0,
18500 CP0_ }, /* WRPGPR */
18501 { pool , ERETx , 2 , 32,
18502 0xfc00ffff, 0x2000f37f, 0 , 0,
18503 0x0 }, /* ERETx */
18504 { reserved_block , 0 , 0 , 32,
18505 0xfc00ffff, 0x2000f57f, 0 , 0,
18506 0x0 }, /* POOL32Axf_5_group3~*(26) */
18507 { reserved_block , 0 , 0 , 32,
18508 0xfc00ffff, 0x2000f77f, 0 , 0,
18509 0x0 }, /* POOL32Axf_5_group3~*(27) */
18510 { reserved_block , 0 , 0 , 32,
18511 0xfc00ffff, 0x2000f97f, 0 , 0,
18512 0x0 }, /* POOL32Axf_5_group3~*(28) */
18513 { reserved_block , 0 , 0 , 32,
18514 0xfc00ffff, 0x2000fb7f, 0 , 0,
18515 0x0 }, /* POOL32Axf_5_group3~*(29) */
18516 { reserved_block , 0 , 0 , 32,
18517 0xfc00ffff, 0x2000fd7f, 0 , 0,
18518 0x0 }, /* POOL32Axf_5_group3~*(30) */
18519 { reserved_block , 0 , 0 , 32,
18520 0xfc00ffff, 0x2000ff7f, 0 , 0,
18521 0x0 }, /* POOL32Axf_5_group3~*(31) */
18522 };
18523
18524
18525 NMD::Pool NMD::POOL32Axf_5[4] = {
18526 { pool , POOL32Axf_5_group0 , 32 , 32,
18527 0xfc00c1ff, 0x2000017f, 0 , 0,
18528 0x0 }, /* POOL32Axf_5_group0 */
18529 { pool , POOL32Axf_5_group1 , 32 , 32,
18530 0xfc00c1ff, 0x2000417f, 0 , 0,
18531 0x0 }, /* POOL32Axf_5_group1 */
18532 { reserved_block , 0 , 0 , 32,
18533 0xfc00c1ff, 0x2000817f, 0 , 0,
18534 0x0 }, /* POOL32Axf_5~*(2) */
18535 { pool , POOL32Axf_5_group3 , 32 , 32,
18536 0xfc00c1ff, 0x2000c17f, 0 , 0,
18537 0x0 }, /* POOL32Axf_5_group3 */
18538 };
18539
18540
18541 NMD::Pool NMD::SHRA__R__QB[2] = {
18542 { instruction , 0 , 0 , 32,
18543 0xfc001fff, 0x200001ff, &NMD::SHRA_QB , 0,
18544 DSP_ }, /* SHRA.QB */
18545 { instruction , 0 , 0 , 32,
18546 0xfc001fff, 0x200011ff, &NMD::SHRA_R_QB , 0,
18547 DSP_ }, /* SHRA_R.QB */
18548 };
18549
18550
18551 NMD::Pool NMD::POOL32Axf_7[8] = {
18552 { pool , SHRA__R__QB , 2 , 32,
18553 0xfc000fff, 0x200001ff, 0 , 0,
18554 0x0 }, /* SHRA[_R].QB */
18555 { instruction , 0 , 0 , 32,
18556 0xfc000fff, 0x200003ff, &NMD::SHRL_PH , 0,
18557 DSP_ }, /* SHRL.PH */
18558 { instruction , 0 , 0 , 32,
18559 0xfc000fff, 0x200005ff, &NMD::REPL_QB , 0,
18560 DSP_ }, /* REPL.QB */
18561 { reserved_block , 0 , 0 , 32,
18562 0xfc000fff, 0x200007ff, 0 , 0,
18563 0x0 }, /* POOL32Axf_7~*(3) */
18564 { reserved_block , 0 , 0 , 32,
18565 0xfc000fff, 0x200009ff, 0 , 0,
18566 0x0 }, /* POOL32Axf_7~*(4) */
18567 { reserved_block , 0 , 0 , 32,
18568 0xfc000fff, 0x20000bff, 0 , 0,
18569 0x0 }, /* POOL32Axf_7~*(5) */
18570 { reserved_block , 0 , 0 , 32,
18571 0xfc000fff, 0x20000dff, 0 , 0,
18572 0x0 }, /* POOL32Axf_7~*(6) */
18573 { reserved_block , 0 , 0 , 32,
18574 0xfc000fff, 0x20000fff, 0 , 0,
18575 0x0 }, /* POOL32Axf_7~*(7) */
18576 };
18577
18578
18579 NMD::Pool NMD::POOL32Axf[8] = {
18580 { reserved_block , 0 , 0 , 32,
18581 0xfc0001ff, 0x2000003f, 0 , 0,
18582 0x0 }, /* POOL32Axf~*(0) */
18583 { pool , POOL32Axf_1 , 8 , 32,
18584 0xfc0001ff, 0x2000007f, 0 , 0,
18585 0x0 }, /* POOL32Axf_1 */
18586 { pool , POOL32Axf_2 , 4 , 32,
18587 0xfc0001ff, 0x200000bf, 0 , 0,
18588 0x0 }, /* POOL32Axf_2 */
18589 { reserved_block , 0 , 0 , 32,
18590 0xfc0001ff, 0x200000ff, 0 , 0,
18591 0x0 }, /* POOL32Axf~*(3) */
18592 { pool , POOL32Axf_4 , 128 , 32,
18593 0xfc0001ff, 0x2000013f, 0 , 0,
18594 0x0 }, /* POOL32Axf_4 */
18595 { pool , POOL32Axf_5 , 4 , 32,
18596 0xfc0001ff, 0x2000017f, 0 , 0,
18597 0x0 }, /* POOL32Axf_5 */
18598 { reserved_block , 0 , 0 , 32,
18599 0xfc0001ff, 0x200001bf, 0 , 0,
18600 0x0 }, /* POOL32Axf~*(6) */
18601 { pool , POOL32Axf_7 , 8 , 32,
18602 0xfc0001ff, 0x200001ff, 0 , 0,
18603 0x0 }, /* POOL32Axf_7 */
18604 };
18605
18606
18607 NMD::Pool NMD::_POOL32A7[8] = {
18608 { pool , P_LSX , 2 , 32,
18609 0xfc00003f, 0x20000007, 0 , 0,
18610 0x0 }, /* P.LSX */
18611 { instruction , 0 , 0 , 32,
18612 0xfc00003f, 0x2000000f, &NMD::LSA , 0,
18613 0x0 }, /* LSA */
18614 { reserved_block , 0 , 0 , 32,
18615 0xfc00003f, 0x20000017, 0 , 0,
18616 0x0 }, /* _POOL32A7~*(2) */
18617 { instruction , 0 , 0 , 32,
18618 0xfc00003f, 0x2000001f, &NMD::EXTW , 0,
18619 0x0 }, /* EXTW */
18620 { reserved_block , 0 , 0 , 32,
18621 0xfc00003f, 0x20000027, 0 , 0,
18622 0x0 }, /* _POOL32A7~*(4) */
18623 { reserved_block , 0 , 0 , 32,
18624 0xfc00003f, 0x2000002f, 0 , 0,
18625 0x0 }, /* _POOL32A7~*(5) */
18626 { reserved_block , 0 , 0 , 32,
18627 0xfc00003f, 0x20000037, 0 , 0,
18628 0x0 }, /* _POOL32A7~*(6) */
18629 { pool , POOL32Axf , 8 , 32,
18630 0xfc00003f, 0x2000003f, 0 , 0,
18631 0x0 }, /* POOL32Axf */
18632 };
18633
18634
18635 NMD::Pool NMD::P32A[8] = {
18636 { pool , _POOL32A0 , 128 , 32,
18637 0xfc000007, 0x20000000, 0 , 0,
18638 0x0 }, /* _POOL32A0 */
18639 { instruction , 0 , 0 , 32,
18640 0xfc000007, 0x20000001, &NMD::SPECIAL2 , 0,
18641 UDI_ }, /* SPECIAL2 */
18642 { instruction , 0 , 0 , 32,
18643 0xfc000007, 0x20000002, &NMD::COP2_1 , 0,
18644 CP2_ }, /* COP2_1 */
18645 { instruction , 0 , 0 , 32,
18646 0xfc000007, 0x20000003, &NMD::UDI , 0,
18647 UDI_ }, /* UDI */
18648 { reserved_block , 0 , 0 , 32,
18649 0xfc000007, 0x20000004, 0 , 0,
18650 0x0 }, /* P32A~*(4) */
18651 { pool , _POOL32A5 , 128 , 32,
18652 0xfc000007, 0x20000005, 0 , 0,
18653 0x0 }, /* _POOL32A5 */
18654 { reserved_block , 0 , 0 , 32,
18655 0xfc000007, 0x20000006, 0 , 0,
18656 0x0 }, /* P32A~*(6) */
18657 { pool , _POOL32A7 , 8 , 32,
18658 0xfc000007, 0x20000007, 0 , 0,
18659 0x0 }, /* _POOL32A7 */
18660 };
18661
18662
18663 NMD::Pool NMD::P_GP_D[2] = {
18664 { instruction , 0 , 0 , 32,
18665 0xfc000007, 0x40000001, &NMD::LD_GP_ , 0,
18666 MIPS64_ }, /* LD[GP] */
18667 { instruction , 0 , 0 , 32,
18668 0xfc000007, 0x40000005, &NMD::SD_GP_ , 0,
18669 MIPS64_ }, /* SD[GP] */
18670 };
18671
18672
18673 NMD::Pool NMD::P_GP_W[4] = {
18674 { instruction , 0 , 0 , 32,
18675 0xfc000003, 0x40000000, &NMD::ADDIU_GP_W_ , 0,
18676 0x0 }, /* ADDIU[GP.W] */
18677 { pool , P_GP_D , 2 , 32,
18678 0xfc000003, 0x40000001, 0 , 0,
18679 0x0 }, /* P.GP.D */
18680 { instruction , 0 , 0 , 32,
18681 0xfc000003, 0x40000002, &NMD::LW_GP_ , 0,
18682 0x0 }, /* LW[GP] */
18683 { instruction , 0 , 0 , 32,
18684 0xfc000003, 0x40000003, &NMD::SW_GP_ , 0,
18685 0x0 }, /* SW[GP] */
18686 };
18687
18688
18689 NMD::Pool NMD::POOL48I[32] = {
18690 { instruction , 0 , 0 , 48,
18691 0xfc1f00000000ull, 0x600000000000ull, &NMD::LI_48_ , 0,
18692 XMMS_ }, /* LI[48] */
18693 { instruction , 0 , 0 , 48,
18694 0xfc1f00000000ull, 0x600100000000ull, &NMD::ADDIU_48_ , 0,
18695 XMMS_ }, /* ADDIU[48] */
18696 { instruction , 0 , 0 , 48,
18697 0xfc1f00000000ull, 0x600200000000ull, &NMD::ADDIU_GP48_ , 0,
18698 XMMS_ }, /* ADDIU[GP48] */
18699 { instruction , 0 , 0 , 48,
18700 0xfc1f00000000ull, 0x600300000000ull, &NMD::ADDIUPC_48_ , 0,
18701 XMMS_ }, /* ADDIUPC[48] */
18702 { reserved_block , 0 , 0 , 48,
18703 0xfc1f00000000ull, 0x600400000000ull, 0 , 0,
18704 0x0 }, /* POOL48I~*(4) */
18705 { reserved_block , 0 , 0 , 48,
18706 0xfc1f00000000ull, 0x600500000000ull, 0 , 0,
18707 0x0 }, /* POOL48I~*(5) */
18708 { reserved_block , 0 , 0 , 48,
18709 0xfc1f00000000ull, 0x600600000000ull, 0 , 0,
18710 0x0 }, /* POOL48I~*(6) */
18711 { reserved_block , 0 , 0 , 48,
18712 0xfc1f00000000ull, 0x600700000000ull, 0 , 0,
18713 0x0 }, /* POOL48I~*(7) */
18714 { reserved_block , 0 , 0 , 48,
18715 0xfc1f00000000ull, 0x600800000000ull, 0 , 0,
18716 0x0 }, /* POOL48I~*(8) */
18717 { reserved_block , 0 , 0 , 48,
18718 0xfc1f00000000ull, 0x600900000000ull, 0 , 0,
18719 0x0 }, /* POOL48I~*(9) */
18720 { reserved_block , 0 , 0 , 48,
18721 0xfc1f00000000ull, 0x600a00000000ull, 0 , 0,
18722 0x0 }, /* POOL48I~*(10) */
18723 { instruction , 0 , 0 , 48,
18724 0xfc1f00000000ull, 0x600b00000000ull, &NMD::LWPC_48_ , 0,
18725 XMMS_ }, /* LWPC[48] */
18726 { reserved_block , 0 , 0 , 48,
18727 0xfc1f00000000ull, 0x600c00000000ull, 0 , 0,
18728 0x0 }, /* POOL48I~*(12) */
18729 { reserved_block , 0 , 0 , 48,
18730 0xfc1f00000000ull, 0x600d00000000ull, 0 , 0,
18731 0x0 }, /* POOL48I~*(13) */
18732 { reserved_block , 0 , 0 , 48,
18733 0xfc1f00000000ull, 0x600e00000000ull, 0 , 0,
18734 0x0 }, /* POOL48I~*(14) */
18735 { instruction , 0 , 0 , 48,
18736 0xfc1f00000000ull, 0x600f00000000ull, &NMD::SWPC_48_ , 0,
18737 XMMS_ }, /* SWPC[48] */
18738 { reserved_block , 0 , 0 , 48,
18739 0xfc1f00000000ull, 0x601000000000ull, 0 , 0,
18740 0x0 }, /* POOL48I~*(16) */
18741 { instruction , 0 , 0 , 48,
18742 0xfc1f00000000ull, 0x601100000000ull, &NMD::DADDIU_48_ , 0,
18743 MIPS64_ }, /* DADDIU[48] */
18744 { reserved_block , 0 , 0 , 48,
18745 0xfc1f00000000ull, 0x601200000000ull, 0 , 0,
18746 0x0 }, /* POOL48I~*(18) */
18747 { reserved_block , 0 , 0 , 48,
18748 0xfc1f00000000ull, 0x601300000000ull, 0 , 0,
18749 0x0 }, /* POOL48I~*(19) */
18750 { instruction , 0 , 0 , 48,
18751 0xfc1f00000000ull, 0x601400000000ull, &NMD::DLUI_48_ , 0,
18752 MIPS64_ }, /* DLUI[48] */
18753 { reserved_block , 0 , 0 , 48,
18754 0xfc1f00000000ull, 0x601500000000ull, 0 , 0,
18755 0x0 }, /* POOL48I~*(21) */
18756 { reserved_block , 0 , 0 , 48,
18757 0xfc1f00000000ull, 0x601600000000ull, 0 , 0,
18758 0x0 }, /* POOL48I~*(22) */
18759 { reserved_block , 0 , 0 , 48,
18760 0xfc1f00000000ull, 0x601700000000ull, 0 , 0,
18761 0x0 }, /* POOL48I~*(23) */
18762 { reserved_block , 0 , 0 , 48,
18763 0xfc1f00000000ull, 0x601800000000ull, 0 , 0,
18764 0x0 }, /* POOL48I~*(24) */
18765 { reserved_block , 0 , 0 , 48,
18766 0xfc1f00000000ull, 0x601900000000ull, 0 , 0,
18767 0x0 }, /* POOL48I~*(25) */
18768 { reserved_block , 0 , 0 , 48,
18769 0xfc1f00000000ull, 0x601a00000000ull, 0 , 0,
18770 0x0 }, /* POOL48I~*(26) */
18771 { instruction , 0 , 0 , 48,
18772 0xfc1f00000000ull, 0x601b00000000ull, &NMD::LDPC_48_ , 0,
18773 MIPS64_ }, /* LDPC[48] */
18774 { reserved_block , 0 , 0 , 48,
18775 0xfc1f00000000ull, 0x601c00000000ull, 0 , 0,
18776 0x0 }, /* POOL48I~*(28) */
18777 { reserved_block , 0 , 0 , 48,
18778 0xfc1f00000000ull, 0x601d00000000ull, 0 , 0,
18779 0x0 }, /* POOL48I~*(29) */
18780 { reserved_block , 0 , 0 , 48,
18781 0xfc1f00000000ull, 0x601e00000000ull, 0 , 0,
18782 0x0 }, /* POOL48I~*(30) */
18783 { instruction , 0 , 0 , 48,
18784 0xfc1f00000000ull, 0x601f00000000ull, &NMD::SDPC_48_ , 0,
18785 MIPS64_ }, /* SDPC[48] */
18786 };
18787
18788
18789 NMD::Pool NMD::PP_SR[4] = {
18790 { instruction , 0 , 0 , 32,
18791 0xfc10f003, 0x80003000, &NMD::SAVE_32_ , 0,
18792 0x0 }, /* SAVE[32] */
18793 { reserved_block , 0 , 0 , 32,
18794 0xfc10f003, 0x80003001, 0 , 0,
18795 0x0 }, /* PP.SR~*(1) */
18796 { instruction , 0 , 0 , 32,
18797 0xfc10f003, 0x80003002, &NMD::RESTORE_32_ , 0,
18798 0x0 }, /* RESTORE[32] */
18799 { return_instruction , 0 , 0 , 32,
18800 0xfc10f003, 0x80003003, &NMD::RESTORE_JRC_32_ , 0,
18801 0x0 }, /* RESTORE.JRC[32] */
18802 };
18803
18804
18805 NMD::Pool NMD::P_SR_F[8] = {
18806 { instruction , 0 , 0 , 32,
18807 0xfc10f007, 0x80103000, &NMD::SAVEF , 0,
18808 CP1_ }, /* SAVEF */
18809 { instruction , 0 , 0 , 32,
18810 0xfc10f007, 0x80103001, &NMD::RESTOREF , 0,
18811 CP1_ }, /* RESTOREF */
18812 { reserved_block , 0 , 0 , 32,
18813 0xfc10f007, 0x80103002, 0 , 0,
18814 0x0 }, /* P.SR.F~*(2) */
18815 { reserved_block , 0 , 0 , 32,
18816 0xfc10f007, 0x80103003, 0 , 0,
18817 0x0 }, /* P.SR.F~*(3) */
18818 { reserved_block , 0 , 0 , 32,
18819 0xfc10f007, 0x80103004, 0 , 0,
18820 0x0 }, /* P.SR.F~*(4) */
18821 { reserved_block , 0 , 0 , 32,
18822 0xfc10f007, 0x80103005, 0 , 0,
18823 0x0 }, /* P.SR.F~*(5) */
18824 { reserved_block , 0 , 0 , 32,
18825 0xfc10f007, 0x80103006, 0 , 0,
18826 0x0 }, /* P.SR.F~*(6) */
18827 { reserved_block , 0 , 0 , 32,
18828 0xfc10f007, 0x80103007, 0 , 0,
18829 0x0 }, /* P.SR.F~*(7) */
18830 };
18831
18832
18833 NMD::Pool NMD::P_SR[2] = {
18834 { pool , PP_SR , 4 , 32,
18835 0xfc10f000, 0x80003000, 0 , 0,
18836 0x0 }, /* PP.SR */
18837 { pool , P_SR_F , 8 , 32,
18838 0xfc10f000, 0x80103000, 0 , 0,
18839 0x0 }, /* P.SR.F */
18840 };
18841
18842
18843 NMD::Pool NMD::P_SLL[5] = {
18844 { instruction , 0 , 0 , 32,
18845 0xffe0f1ff, 0x8000c000, &NMD::NOP_32_ , 0,
18846 0x0 }, /* NOP[32] */
18847 { instruction , 0 , 0 , 32,
18848 0xffe0f1ff, 0x8000c003, &NMD::EHB , 0,
18849 0x0 }, /* EHB */
18850 { instruction , 0 , 0 , 32,
18851 0xffe0f1ff, 0x8000c005, &NMD::PAUSE , 0,
18852 0x0 }, /* PAUSE */
18853 { instruction , 0 , 0 , 32,
18854 0xffe0f1ff, 0x8000c006, &NMD::SYNC , 0,
18855 0x0 }, /* SYNC */
18856 { instruction , 0 , 0 , 32,
18857 0xfc00f1e0, 0x8000c000, &NMD::SLL_32_ , 0,
18858 0x0 }, /* SLL[32] */
18859 };
18860
18861
18862 NMD::Pool NMD::P_SHIFT[16] = {
18863 { pool , P_SLL , 5 , 32,
18864 0xfc00f1e0, 0x8000c000, 0 , 0,
18865 0x0 }, /* P.SLL */
18866 { reserved_block , 0 , 0 , 32,
18867 0xfc00f1e0, 0x8000c020, 0 , 0,
18868 0x0 }, /* P.SHIFT~*(1) */
18869 { instruction , 0 , 0 , 32,
18870 0xfc00f1e0, 0x8000c040, &NMD::SRL_32_ , 0,
18871 0x0 }, /* SRL[32] */
18872 { reserved_block , 0 , 0 , 32,
18873 0xfc00f1e0, 0x8000c060, 0 , 0,
18874 0x0 }, /* P.SHIFT~*(3) */
18875 { instruction , 0 , 0 , 32,
18876 0xfc00f1e0, 0x8000c080, &NMD::SRA , 0,
18877 0x0 }, /* SRA */
18878 { reserved_block , 0 , 0 , 32,
18879 0xfc00f1e0, 0x8000c0a0, 0 , 0,
18880 0x0 }, /* P.SHIFT~*(5) */
18881 { instruction , 0 , 0 , 32,
18882 0xfc00f1e0, 0x8000c0c0, &NMD::ROTR , 0,
18883 0x0 }, /* ROTR */
18884 { reserved_block , 0 , 0 , 32,
18885 0xfc00f1e0, 0x8000c0e0, 0 , 0,
18886 0x0 }, /* P.SHIFT~*(7) */
18887 { instruction , 0 , 0 , 32,
18888 0xfc00f1e0, 0x8000c100, &NMD::DSLL , 0,
18889 MIPS64_ }, /* DSLL */
18890 { instruction , 0 , 0 , 32,
18891 0xfc00f1e0, 0x8000c120, &NMD::DSLL32 , 0,
18892 MIPS64_ }, /* DSLL32 */
18893 { instruction , 0 , 0 , 32,
18894 0xfc00f1e0, 0x8000c140, &NMD::DSRL , 0,
18895 MIPS64_ }, /* DSRL */
18896 { instruction , 0 , 0 , 32,
18897 0xfc00f1e0, 0x8000c160, &NMD::DSRL32 , 0,
18898 MIPS64_ }, /* DSRL32 */
18899 { instruction , 0 , 0 , 32,
18900 0xfc00f1e0, 0x8000c180, &NMD::DSRA , 0,
18901 MIPS64_ }, /* DSRA */
18902 { instruction , 0 , 0 , 32,
18903 0xfc00f1e0, 0x8000c1a0, &NMD::DSRA32 , 0,
18904 MIPS64_ }, /* DSRA32 */
18905 { instruction , 0 , 0 , 32,
18906 0xfc00f1e0, 0x8000c1c0, &NMD::DROTR , 0,
18907 MIPS64_ }, /* DROTR */
18908 { instruction , 0 , 0 , 32,
18909 0xfc00f1e0, 0x8000c1e0, &NMD::DROTR32 , 0,
18910 MIPS64_ }, /* DROTR32 */
18911 };
18912
18913
18914 NMD::Pool NMD::P_ROTX[4] = {
18915 { instruction , 0 , 0 , 32,
18916 0xfc00f820, 0x8000d000, &NMD::ROTX , 0,
18917 XMMS_ }, /* ROTX */
18918 { reserved_block , 0 , 0 , 32,
18919 0xfc00f820, 0x8000d020, 0 , 0,
18920 0x0 }, /* P.ROTX~*(1) */
18921 { reserved_block , 0 , 0 , 32,
18922 0xfc00f820, 0x8000d800, 0 , 0,
18923 0x0 }, /* P.ROTX~*(2) */
18924 { reserved_block , 0 , 0 , 32,
18925 0xfc00f820, 0x8000d820, 0 , 0,
18926 0x0 }, /* P.ROTX~*(3) */
18927 };
18928
18929
18930 NMD::Pool NMD::P_INS[4] = {
18931 { instruction , 0 , 0 , 32,
18932 0xfc00f820, 0x8000e000, &NMD::INS , 0,
18933 XMMS_ }, /* INS */
18934 { instruction , 0 , 0 , 32,
18935 0xfc00f820, 0x8000e020, &NMD::DINSU , 0,
18936 MIPS64_ }, /* DINSU */
18937 { instruction , 0 , 0 , 32,
18938 0xfc00f820, 0x8000e800, &NMD::DINSM , 0,
18939 MIPS64_ }, /* DINSM */
18940 { instruction , 0 , 0 , 32,
18941 0xfc00f820, 0x8000e820, &NMD::DINS , 0,
18942 MIPS64_ }, /* DINS */
18943 };
18944
18945
18946 NMD::Pool NMD::P_EXT[4] = {
18947 { instruction , 0 , 0 , 32,
18948 0xfc00f820, 0x8000f000, &NMD::EXT , 0,
18949 XMMS_ }, /* EXT */
18950 { instruction , 0 , 0 , 32,
18951 0xfc00f820, 0x8000f020, &NMD::DEXTU , 0,
18952 MIPS64_ }, /* DEXTU */
18953 { instruction , 0 , 0 , 32,
18954 0xfc00f820, 0x8000f800, &NMD::DEXTM , 0,
18955 MIPS64_ }, /* DEXTM */
18956 { instruction , 0 , 0 , 32,
18957 0xfc00f820, 0x8000f820, &NMD::DEXT , 0,
18958 MIPS64_ }, /* DEXT */
18959 };
18960
18961
18962 NMD::Pool NMD::P_U12[16] = {
18963 { instruction , 0 , 0 , 32,
18964 0xfc00f000, 0x80000000, &NMD::ORI , 0,
18965 0x0 }, /* ORI */
18966 { instruction , 0 , 0 , 32,
18967 0xfc00f000, 0x80001000, &NMD::XORI , 0,
18968 0x0 }, /* XORI */
18969 { instruction , 0 , 0 , 32,
18970 0xfc00f000, 0x80002000, &NMD::ANDI_32_ , 0,
18971 0x0 }, /* ANDI[32] */
18972 { pool , P_SR , 2 , 32,
18973 0xfc00f000, 0x80003000, 0 , 0,
18974 0x0 }, /* P.SR */
18975 { instruction , 0 , 0 , 32,
18976 0xfc00f000, 0x80004000, &NMD::SLTI , 0,
18977 0x0 }, /* SLTI */
18978 { instruction , 0 , 0 , 32,
18979 0xfc00f000, 0x80005000, &NMD::SLTIU , 0,
18980 0x0 }, /* SLTIU */
18981 { instruction , 0 , 0 , 32,
18982 0xfc00f000, 0x80006000, &NMD::SEQI , 0,
18983 0x0 }, /* SEQI */
18984 { reserved_block , 0 , 0 , 32,
18985 0xfc00f000, 0x80007000, 0 , 0,
18986 0x0 }, /* P.U12~*(7) */
18987 { instruction , 0 , 0 , 32,
18988 0xfc00f000, 0x80008000, &NMD::ADDIU_NEG_ , 0,
18989 0x0 }, /* ADDIU[NEG] */
18990 { instruction , 0 , 0 , 32,
18991 0xfc00f000, 0x80009000, &NMD::DADDIU_U12_ , 0,
18992 MIPS64_ }, /* DADDIU[U12] */
18993 { instruction , 0 , 0 , 32,
18994 0xfc00f000, 0x8000a000, &NMD::DADDIU_NEG_ , 0,
18995 MIPS64_ }, /* DADDIU[NEG] */
18996 { instruction , 0 , 0 , 32,
18997 0xfc00f000, 0x8000b000, &NMD::DROTX , 0,
18998 MIPS64_ }, /* DROTX */
18999 { pool , P_SHIFT , 16 , 32,
19000 0xfc00f000, 0x8000c000, 0 , 0,
19001 0x0 }, /* P.SHIFT */
19002 { pool , P_ROTX , 4 , 32,
19003 0xfc00f000, 0x8000d000, 0 , 0,
19004 0x0 }, /* P.ROTX */
19005 { pool , P_INS , 4 , 32,
19006 0xfc00f000, 0x8000e000, 0 , 0,
19007 0x0 }, /* P.INS */
19008 { pool , P_EXT , 4 , 32,
19009 0xfc00f000, 0x8000f000, 0 , 0,
19010 0x0 }, /* P.EXT */
19011 };
19012
19013
19014 NMD::Pool NMD::RINT_fmt[2] = {
19015 { instruction , 0 , 0 , 32,
19016 0xfc0003ff, 0xa0000020, &NMD::RINT_S , 0,
19017 CP1_ }, /* RINT.S */
19018 { instruction , 0 , 0 , 32,
19019 0xfc0003ff, 0xa0000220, &NMD::RINT_D , 0,
19020 CP1_ }, /* RINT.D */
19021 };
19022
19023
19024 NMD::Pool NMD::ADD_fmt0[2] = {
19025 { instruction , 0 , 0 , 32,
19026 0xfc0003ff, 0xa0000030, &NMD::ADD_S , 0,
19027 CP1_ }, /* ADD.S */
19028 { reserved_block , 0 , 0 , 32,
19029 0xfc0003ff, 0xa0000230, 0 , 0,
19030 CP1_ }, /* ADD.fmt0~*(1) */
19031 };
19032
19033
19034 NMD::Pool NMD::SELEQZ_fmt[2] = {
19035 { instruction , 0 , 0 , 32,
19036 0xfc0003ff, 0xa0000038, &NMD::SELEQZ_S , 0,
19037 CP1_ }, /* SELEQZ.S */
19038 { instruction , 0 , 0 , 32,
19039 0xfc0003ff, 0xa0000238, &NMD::SELEQZ_D , 0,
19040 CP1_ }, /* SELEQZ.D */
19041 };
19042
19043
19044 NMD::Pool NMD::CLASS_fmt[2] = {
19045 { instruction , 0 , 0 , 32,
19046 0xfc0003ff, 0xa0000060, &NMD::CLASS_S , 0,
19047 CP1_ }, /* CLASS.S */
19048 { instruction , 0 , 0 , 32,
19049 0xfc0003ff, 0xa0000260, &NMD::CLASS_D , 0,
19050 CP1_ }, /* CLASS.D */
19051 };
19052
19053
19054 NMD::Pool NMD::SUB_fmt0[2] = {
19055 { instruction , 0 , 0 , 32,
19056 0xfc0003ff, 0xa0000070, &NMD::SUB_S , 0,
19057 CP1_ }, /* SUB.S */
19058 { reserved_block , 0 , 0 , 32,
19059 0xfc0003ff, 0xa0000270, 0 , 0,
19060 CP1_ }, /* SUB.fmt0~*(1) */
19061 };
19062
19063
19064 NMD::Pool NMD::SELNEZ_fmt[2] = {
19065 { instruction , 0 , 0 , 32,
19066 0xfc0003ff, 0xa0000078, &NMD::SELNEZ_S , 0,
19067 CP1_ }, /* SELNEZ.S */
19068 { instruction , 0 , 0 , 32,
19069 0xfc0003ff, 0xa0000278, &NMD::SELNEZ_D , 0,
19070 CP1_ }, /* SELNEZ.D */
19071 };
19072
19073
19074 NMD::Pool NMD::MUL_fmt0[2] = {
19075 { instruction , 0 , 0 , 32,
19076 0xfc0003ff, 0xa00000b0, &NMD::MUL_S , 0,
19077 CP1_ }, /* MUL.S */
19078 { reserved_block , 0 , 0 , 32,
19079 0xfc0003ff, 0xa00002b0, 0 , 0,
19080 CP1_ }, /* MUL.fmt0~*(1) */
19081 };
19082
19083
19084 NMD::Pool NMD::SEL_fmt[2] = {
19085 { instruction , 0 , 0 , 32,
19086 0xfc0003ff, 0xa00000b8, &NMD::SEL_S , 0,
19087 CP1_ }, /* SEL.S */
19088 { instruction , 0 , 0 , 32,
19089 0xfc0003ff, 0xa00002b8, &NMD::SEL_D , 0,
19090 CP1_ }, /* SEL.D */
19091 };
19092
19093
19094 NMD::Pool NMD::DIV_fmt0[2] = {
19095 { instruction , 0 , 0 , 32,
19096 0xfc0003ff, 0xa00000f0, &NMD::DIV_S , 0,
19097 CP1_ }, /* DIV.S */
19098 { reserved_block , 0 , 0 , 32,
19099 0xfc0003ff, 0xa00002f0, 0 , 0,
19100 CP1_ }, /* DIV.fmt0~*(1) */
19101 };
19102
19103
19104 NMD::Pool NMD::ADD_fmt1[2] = {
19105 { instruction , 0 , 0 , 32,
19106 0xfc0003ff, 0xa0000130, &NMD::ADD_D , 0,
19107 CP1_ }, /* ADD.D */
19108 { reserved_block , 0 , 0 , 32,
19109 0xfc0003ff, 0xa0000330, 0 , 0,
19110 CP1_ }, /* ADD.fmt1~*(1) */
19111 };
19112
19113
19114 NMD::Pool NMD::SUB_fmt1[2] = {
19115 { instruction , 0 , 0 , 32,
19116 0xfc0003ff, 0xa0000170, &NMD::SUB_D , 0,
19117 CP1_ }, /* SUB.D */
19118 { reserved_block , 0 , 0 , 32,
19119 0xfc0003ff, 0xa0000370, 0 , 0,
19120 CP1_ }, /* SUB.fmt1~*(1) */
19121 };
19122
19123
19124 NMD::Pool NMD::MUL_fmt1[2] = {
19125 { instruction , 0 , 0 , 32,
19126 0xfc0003ff, 0xa00001b0, &NMD::MUL_D , 0,
19127 CP1_ }, /* MUL.D */
19128 { reserved_block , 0 , 0 , 32,
19129 0xfc0003ff, 0xa00003b0, 0 , 0,
19130 CP1_ }, /* MUL.fmt1~*(1) */
19131 };
19132
19133
19134 NMD::Pool NMD::MADDF_fmt[2] = {
19135 { instruction , 0 , 0 , 32,
19136 0xfc0003ff, 0xa00001b8, &NMD::MADDF_S , 0,
19137 CP1_ }, /* MADDF.S */
19138 { instruction , 0 , 0 , 32,
19139 0xfc0003ff, 0xa00003b8, &NMD::MADDF_D , 0,
19140 CP1_ }, /* MADDF.D */
19141 };
19142
19143
19144 NMD::Pool NMD::DIV_fmt1[2] = {
19145 { instruction , 0 , 0 , 32,
19146 0xfc0003ff, 0xa00001f0, &NMD::DIV_D , 0,
19147 CP1_ }, /* DIV.D */
19148 { reserved_block , 0 , 0 , 32,
19149 0xfc0003ff, 0xa00003f0, 0 , 0,
19150 CP1_ }, /* DIV.fmt1~*(1) */
19151 };
19152
19153
19154 NMD::Pool NMD::MSUBF_fmt[2] = {
19155 { instruction , 0 , 0 , 32,
19156 0xfc0003ff, 0xa00001f8, &NMD::MSUBF_S , 0,
19157 CP1_ }, /* MSUBF.S */
19158 { instruction , 0 , 0 , 32,
19159 0xfc0003ff, 0xa00003f8, &NMD::MSUBF_D , 0,
19160 CP1_ }, /* MSUBF.D */
19161 };
19162
19163
19164 NMD::Pool NMD::POOL32F_0[64] = {
19165 { reserved_block , 0 , 0 , 32,
19166 0xfc0001ff, 0xa0000000, 0 , 0,
19167 CP1_ }, /* POOL32F_0~*(0) */
19168 { reserved_block , 0 , 0 , 32,
19169 0xfc0001ff, 0xa0000008, 0 , 0,
19170 CP1_ }, /* POOL32F_0~*(1) */
19171 { reserved_block , 0 , 0 , 32,
19172 0xfc0001ff, 0xa0000010, 0 , 0,
19173 CP1_ }, /* POOL32F_0~*(2) */
19174 { reserved_block , 0 , 0 , 32,
19175 0xfc0001ff, 0xa0000018, 0 , 0,
19176 CP1_ }, /* POOL32F_0~*(3) */
19177 { pool , RINT_fmt , 2 , 32,
19178 0xfc0001ff, 0xa0000020, 0 , 0,
19179 CP1_ }, /* RINT.fmt */
19180 { reserved_block , 0 , 0 , 32,
19181 0xfc0001ff, 0xa0000028, 0 , 0,
19182 CP1_ }, /* POOL32F_0~*(5) */
19183 { pool , ADD_fmt0 , 2 , 32,
19184 0xfc0001ff, 0xa0000030, 0 , 0,
19185 CP1_ }, /* ADD.fmt0 */
19186 { pool , SELEQZ_fmt , 2 , 32,
19187 0xfc0001ff, 0xa0000038, 0 , 0,
19188 CP1_ }, /* SELEQZ.fmt */
19189 { reserved_block , 0 , 0 , 32,
19190 0xfc0001ff, 0xa0000040, 0 , 0,
19191 CP1_ }, /* POOL32F_0~*(8) */
19192 { reserved_block , 0 , 0 , 32,
19193 0xfc0001ff, 0xa0000048, 0 , 0,
19194 CP1_ }, /* POOL32F_0~*(9) */
19195 { reserved_block , 0 , 0 , 32,
19196 0xfc0001ff, 0xa0000050, 0 , 0,
19197 CP1_ }, /* POOL32F_0~*(10) */
19198 { reserved_block , 0 , 0 , 32,
19199 0xfc0001ff, 0xa0000058, 0 , 0,
19200 CP1_ }, /* POOL32F_0~*(11) */
19201 { pool , CLASS_fmt , 2 , 32,
19202 0xfc0001ff, 0xa0000060, 0 , 0,
19203 CP1_ }, /* CLASS.fmt */
19204 { reserved_block , 0 , 0 , 32,
19205 0xfc0001ff, 0xa0000068, 0 , 0,
19206 CP1_ }, /* POOL32F_0~*(13) */
19207 { pool , SUB_fmt0 , 2 , 32,
19208 0xfc0001ff, 0xa0000070, 0 , 0,
19209 CP1_ }, /* SUB.fmt0 */
19210 { pool , SELNEZ_fmt , 2 , 32,
19211 0xfc0001ff, 0xa0000078, 0 , 0,
19212 CP1_ }, /* SELNEZ.fmt */
19213 { reserved_block , 0 , 0 , 32,
19214 0xfc0001ff, 0xa0000080, 0 , 0,
19215 CP1_ }, /* POOL32F_0~*(16) */
19216 { reserved_block , 0 , 0 , 32,
19217 0xfc0001ff, 0xa0000088, 0 , 0,
19218 CP1_ }, /* POOL32F_0~*(17) */
19219 { reserved_block , 0 , 0 , 32,
19220 0xfc0001ff, 0xa0000090, 0 , 0,
19221 CP1_ }, /* POOL32F_0~*(18) */
19222 { reserved_block , 0 , 0 , 32,
19223 0xfc0001ff, 0xa0000098, 0 , 0,
19224 CP1_ }, /* POOL32F_0~*(19) */
19225 { reserved_block , 0 , 0 , 32,
19226 0xfc0001ff, 0xa00000a0, 0 , 0,
19227 CP1_ }, /* POOL32F_0~*(20) */
19228 { reserved_block , 0 , 0 , 32,
19229 0xfc0001ff, 0xa00000a8, 0 , 0,
19230 CP1_ }, /* POOL32F_0~*(21) */
19231 { pool , MUL_fmt0 , 2 , 32,
19232 0xfc0001ff, 0xa00000b0, 0 , 0,
19233 CP1_ }, /* MUL.fmt0 */
19234 { pool , SEL_fmt , 2 , 32,
19235 0xfc0001ff, 0xa00000b8, 0 , 0,
19236 CP1_ }, /* SEL.fmt */
19237 { reserved_block , 0 , 0 , 32,
19238 0xfc0001ff, 0xa00000c0, 0 , 0,
19239 CP1_ }, /* POOL32F_0~*(24) */
19240 { reserved_block , 0 , 0 , 32,
19241 0xfc0001ff, 0xa00000c8, 0 , 0,
19242 CP1_ }, /* POOL32F_0~*(25) */
19243 { reserved_block , 0 , 0 , 32,
19244 0xfc0001ff, 0xa00000d0, 0 , 0,
19245 CP1_ }, /* POOL32F_0~*(26) */
19246 { reserved_block , 0 , 0 , 32,
19247 0xfc0001ff, 0xa00000d8, 0 , 0,
19248 CP1_ }, /* POOL32F_0~*(27) */
19249 { reserved_block , 0 , 0 , 32,
19250 0xfc0001ff, 0xa00000e0, 0 , 0,
19251 CP1_ }, /* POOL32F_0~*(28) */
19252 { reserved_block , 0 , 0 , 32,
19253 0xfc0001ff, 0xa00000e8, 0 , 0,
19254 CP1_ }, /* POOL32F_0~*(29) */
19255 { pool , DIV_fmt0 , 2 , 32,
19256 0xfc0001ff, 0xa00000f0, 0 , 0,
19257 CP1_ }, /* DIV.fmt0 */
19258 { reserved_block , 0 , 0 , 32,
19259 0xfc0001ff, 0xa00000f8, 0 , 0,
19260 CP1_ }, /* POOL32F_0~*(31) */
19261 { reserved_block , 0 , 0 , 32,
19262 0xfc0001ff, 0xa0000100, 0 , 0,
19263 CP1_ }, /* POOL32F_0~*(32) */
19264 { reserved_block , 0 , 0 , 32,
19265 0xfc0001ff, 0xa0000108, 0 , 0,
19266 CP1_ }, /* POOL32F_0~*(33) */
19267 { reserved_block , 0 , 0 , 32,
19268 0xfc0001ff, 0xa0000110, 0 , 0,
19269 CP1_ }, /* POOL32F_0~*(34) */
19270 { reserved_block , 0 , 0 , 32,
19271 0xfc0001ff, 0xa0000118, 0 , 0,
19272 CP1_ }, /* POOL32F_0~*(35) */
19273 { reserved_block , 0 , 0 , 32,
19274 0xfc0001ff, 0xa0000120, 0 , 0,
19275 CP1_ }, /* POOL32F_0~*(36) */
19276 { reserved_block , 0 , 0 , 32,
19277 0xfc0001ff, 0xa0000128, 0 , 0,
19278 CP1_ }, /* POOL32F_0~*(37) */
19279 { pool , ADD_fmt1 , 2 , 32,
19280 0xfc0001ff, 0xa0000130, 0 , 0,
19281 CP1_ }, /* ADD.fmt1 */
19282 { reserved_block , 0 , 0 , 32,
19283 0xfc0001ff, 0xa0000138, 0 , 0,
19284 CP1_ }, /* POOL32F_0~*(39) */
19285 { reserved_block , 0 , 0 , 32,
19286 0xfc0001ff, 0xa0000140, 0 , 0,
19287 CP1_ }, /* POOL32F_0~*(40) */
19288 { reserved_block , 0 , 0 , 32,
19289 0xfc0001ff, 0xa0000148, 0 , 0,
19290 CP1_ }, /* POOL32F_0~*(41) */
19291 { reserved_block , 0 , 0 , 32,
19292 0xfc0001ff, 0xa0000150, 0 , 0,
19293 CP1_ }, /* POOL32F_0~*(42) */
19294 { reserved_block , 0 , 0 , 32,
19295 0xfc0001ff, 0xa0000158, 0 , 0,
19296 CP1_ }, /* POOL32F_0~*(43) */
19297 { reserved_block , 0 , 0 , 32,
19298 0xfc0001ff, 0xa0000160, 0 , 0,
19299 CP1_ }, /* POOL32F_0~*(44) */
19300 { reserved_block , 0 , 0 , 32,
19301 0xfc0001ff, 0xa0000168, 0 , 0,
19302 CP1_ }, /* POOL32F_0~*(45) */
19303 { pool , SUB_fmt1 , 2 , 32,
19304 0xfc0001ff, 0xa0000170, 0 , 0,
19305 CP1_ }, /* SUB.fmt1 */
19306 { reserved_block , 0 , 0 , 32,
19307 0xfc0001ff, 0xa0000178, 0 , 0,
19308 CP1_ }, /* POOL32F_0~*(47) */
19309 { reserved_block , 0 , 0 , 32,
19310 0xfc0001ff, 0xa0000180, 0 , 0,
19311 CP1_ }, /* POOL32F_0~*(48) */
19312 { reserved_block , 0 , 0 , 32,
19313 0xfc0001ff, 0xa0000188, 0 , 0,
19314 CP1_ }, /* POOL32F_0~*(49) */
19315 { reserved_block , 0 , 0 , 32,
19316 0xfc0001ff, 0xa0000190, 0 , 0,
19317 CP1_ }, /* POOL32F_0~*(50) */
19318 { reserved_block , 0 , 0 , 32,
19319 0xfc0001ff, 0xa0000198, 0 , 0,
19320 CP1_ }, /* POOL32F_0~*(51) */
19321 { reserved_block , 0 , 0 , 32,
19322 0xfc0001ff, 0xa00001a0, 0 , 0,
19323 CP1_ }, /* POOL32F_0~*(52) */
19324 { reserved_block , 0 , 0 , 32,
19325 0xfc0001ff, 0xa00001a8, 0 , 0,
19326 CP1_ }, /* POOL32F_0~*(53) */
19327 { pool , MUL_fmt1 , 2 , 32,
19328 0xfc0001ff, 0xa00001b0, 0 , 0,
19329 CP1_ }, /* MUL.fmt1 */
19330 { pool , MADDF_fmt , 2 , 32,
19331 0xfc0001ff, 0xa00001b8, 0 , 0,
19332 CP1_ }, /* MADDF.fmt */
19333 { reserved_block , 0 , 0 , 32,
19334 0xfc0001ff, 0xa00001c0, 0 , 0,
19335 CP1_ }, /* POOL32F_0~*(56) */
19336 { reserved_block , 0 , 0 , 32,
19337 0xfc0001ff, 0xa00001c8, 0 , 0,
19338 CP1_ }, /* POOL32F_0~*(57) */
19339 { reserved_block , 0 , 0 , 32,
19340 0xfc0001ff, 0xa00001d0, 0 , 0,
19341 CP1_ }, /* POOL32F_0~*(58) */
19342 { reserved_block , 0 , 0 , 32,
19343 0xfc0001ff, 0xa00001d8, 0 , 0,
19344 CP1_ }, /* POOL32F_0~*(59) */
19345 { reserved_block , 0 , 0 , 32,
19346 0xfc0001ff, 0xa00001e0, 0 , 0,
19347 CP1_ }, /* POOL32F_0~*(60) */
19348 { reserved_block , 0 , 0 , 32,
19349 0xfc0001ff, 0xa00001e8, 0 , 0,
19350 CP1_ }, /* POOL32F_0~*(61) */
19351 { pool , DIV_fmt1 , 2 , 32,
19352 0xfc0001ff, 0xa00001f0, 0 , 0,
19353 CP1_ }, /* DIV.fmt1 */
19354 { pool , MSUBF_fmt , 2 , 32,
19355 0xfc0001ff, 0xa00001f8, 0 , 0,
19356 CP1_ }, /* MSUBF.fmt */
19357 };
19358
19359
19360 NMD::Pool NMD::MIN_fmt[2] = {
19361 { instruction , 0 , 0 , 32,
19362 0xfc00023f, 0xa0000003, &NMD::MIN_S , 0,
19363 CP1_ }, /* MIN.S */
19364 { instruction , 0 , 0 , 32,
19365 0xfc00023f, 0xa0000203, &NMD::MIN_D , 0,
19366 CP1_ }, /* MIN.D */
19367 };
19368
19369
19370 NMD::Pool NMD::MAX_fmt[2] = {
19371 { instruction , 0 , 0 , 32,
19372 0xfc00023f, 0xa000000b, &NMD::MAX_S , 0,
19373 CP1_ }, /* MAX.S */
19374 { instruction , 0 , 0 , 32,
19375 0xfc00023f, 0xa000020b, &NMD::MAX_D , 0,
19376 CP1_ }, /* MAX.D */
19377 };
19378
19379
19380 NMD::Pool NMD::MINA_fmt[2] = {
19381 { instruction , 0 , 0 , 32,
19382 0xfc00023f, 0xa0000023, &NMD::MINA_S , 0,
19383 CP1_ }, /* MINA.S */
19384 { instruction , 0 , 0 , 32,
19385 0xfc00023f, 0xa0000223, &NMD::MINA_D , 0,
19386 CP1_ }, /* MINA.D */
19387 };
19388
19389
19390 NMD::Pool NMD::MAXA_fmt[2] = {
19391 { instruction , 0 , 0 , 32,
19392 0xfc00023f, 0xa000002b, &NMD::MAXA_S , 0,
19393 CP1_ }, /* MAXA.S */
19394 { instruction , 0 , 0 , 32,
19395 0xfc00023f, 0xa000022b, &NMD::MAXA_D , 0,
19396 CP1_ }, /* MAXA.D */
19397 };
19398
19399
19400 NMD::Pool NMD::CVT_L_fmt[2] = {
19401 { instruction , 0 , 0 , 32,
19402 0xfc007fff, 0xa000013b, &NMD::CVT_L_S , 0,
19403 CP1_ }, /* CVT.L.S */
19404 { instruction , 0 , 0 , 32,
19405 0xfc007fff, 0xa000413b, &NMD::CVT_L_D , 0,
19406 CP1_ }, /* CVT.L.D */
19407 };
19408
19409
19410 NMD::Pool NMD::RSQRT_fmt[2] = {
19411 { instruction , 0 , 0 , 32,
19412 0xfc007fff, 0xa000023b, &NMD::RSQRT_S , 0,
19413 CP1_ }, /* RSQRT.S */
19414 { instruction , 0 , 0 , 32,
19415 0xfc007fff, 0xa000423b, &NMD::RSQRT_D , 0,
19416 CP1_ }, /* RSQRT.D */
19417 };
19418
19419
19420 NMD::Pool NMD::FLOOR_L_fmt[2] = {
19421 { instruction , 0 , 0 , 32,
19422 0xfc007fff, 0xa000033b, &NMD::FLOOR_L_S , 0,
19423 CP1_ }, /* FLOOR.L.S */
19424 { instruction , 0 , 0 , 32,
19425 0xfc007fff, 0xa000433b, &NMD::FLOOR_L_D , 0,
19426 CP1_ }, /* FLOOR.L.D */
19427 };
19428
19429
19430 NMD::Pool NMD::CVT_W_fmt[2] = {
19431 { instruction , 0 , 0 , 32,
19432 0xfc007fff, 0xa000093b, &NMD::CVT_W_S , 0,
19433 CP1_ }, /* CVT.W.S */
19434 { instruction , 0 , 0 , 32,
19435 0xfc007fff, 0xa000493b, &NMD::CVT_W_D , 0,
19436 CP1_ }, /* CVT.W.D */
19437 };
19438
19439
19440 NMD::Pool NMD::SQRT_fmt[2] = {
19441 { instruction , 0 , 0 , 32,
19442 0xfc007fff, 0xa0000a3b, &NMD::SQRT_S , 0,
19443 CP1_ }, /* SQRT.S */
19444 { instruction , 0 , 0 , 32,
19445 0xfc007fff, 0xa0004a3b, &NMD::SQRT_D , 0,
19446 CP1_ }, /* SQRT.D */
19447 };
19448
19449
19450 NMD::Pool NMD::FLOOR_W_fmt[2] = {
19451 { instruction , 0 , 0 , 32,
19452 0xfc007fff, 0xa0000b3b, &NMD::FLOOR_W_S , 0,
19453 CP1_ }, /* FLOOR.W.S */
19454 { instruction , 0 , 0 , 32,
19455 0xfc007fff, 0xa0004b3b, &NMD::FLOOR_W_D , 0,
19456 CP1_ }, /* FLOOR.W.D */
19457 };
19458
19459
19460 NMD::Pool NMD::RECIP_fmt[2] = {
19461 { instruction , 0 , 0 , 32,
19462 0xfc007fff, 0xa000123b, &NMD::RECIP_S , 0,
19463 CP1_ }, /* RECIP.S */
19464 { instruction , 0 , 0 , 32,
19465 0xfc007fff, 0xa000523b, &NMD::RECIP_D , 0,
19466 CP1_ }, /* RECIP.D */
19467 };
19468
19469
19470 NMD::Pool NMD::CEIL_L_fmt[2] = {
19471 { instruction , 0 , 0 , 32,
19472 0xfc007fff, 0xa000133b, &NMD::CEIL_L_S , 0,
19473 CP1_ }, /* CEIL.L.S */
19474 { instruction , 0 , 0 , 32,
19475 0xfc007fff, 0xa000533b, &NMD::CEIL_L_D , 0,
19476 CP1_ }, /* CEIL.L.D */
19477 };
19478
19479
19480 NMD::Pool NMD::CEIL_W_fmt[2] = {
19481 { instruction , 0 , 0 , 32,
19482 0xfc007fff, 0xa0001b3b, &NMD::CEIL_W_S , 0,
19483 CP1_ }, /* CEIL.W.S */
19484 { instruction , 0 , 0 , 32,
19485 0xfc007fff, 0xa0005b3b, &NMD::CEIL_W_D , 0,
19486 CP1_ }, /* CEIL.W.D */
19487 };
19488
19489
19490 NMD::Pool NMD::TRUNC_L_fmt[2] = {
19491 { instruction , 0 , 0 , 32,
19492 0xfc007fff, 0xa000233b, &NMD::TRUNC_L_S , 0,
19493 CP1_ }, /* TRUNC.L.S */
19494 { instruction , 0 , 0 , 32,
19495 0xfc007fff, 0xa000633b, &NMD::TRUNC_L_D , 0,
19496 CP1_ }, /* TRUNC.L.D */
19497 };
19498
19499
19500 NMD::Pool NMD::TRUNC_W_fmt[2] = {
19501 { instruction , 0 , 0 , 32,
19502 0xfc007fff, 0xa0002b3b, &NMD::TRUNC_W_S , 0,
19503 CP1_ }, /* TRUNC.W.S */
19504 { instruction , 0 , 0 , 32,
19505 0xfc007fff, 0xa0006b3b, &NMD::TRUNC_W_D , 0,
19506 CP1_ }, /* TRUNC.W.D */
19507 };
19508
19509
19510 NMD::Pool NMD::ROUND_L_fmt[2] = {
19511 { instruction , 0 , 0 , 32,
19512 0xfc007fff, 0xa000333b, &NMD::ROUND_L_S , 0,
19513 CP1_ }, /* ROUND.L.S */
19514 { instruction , 0 , 0 , 32,
19515 0xfc007fff, 0xa000733b, &NMD::ROUND_L_D , 0,
19516 CP1_ }, /* ROUND.L.D */
19517 };
19518
19519
19520 NMD::Pool NMD::ROUND_W_fmt[2] = {
19521 { instruction , 0 , 0 , 32,
19522 0xfc007fff, 0xa0003b3b, &NMD::ROUND_W_S , 0,
19523 CP1_ }, /* ROUND.W.S */
19524 { instruction , 0 , 0 , 32,
19525 0xfc007fff, 0xa0007b3b, &NMD::ROUND_W_D , 0,
19526 CP1_ }, /* ROUND.W.D */
19527 };
19528
19529
19530 NMD::Pool NMD::POOL32Fxf_0[64] = {
19531 { reserved_block , 0 , 0 , 32,
19532 0xfc003fff, 0xa000003b, 0 , 0,
19533 CP1_ }, /* POOL32Fxf_0~*(0) */
19534 { pool , CVT_L_fmt , 2 , 32,
19535 0xfc003fff, 0xa000013b, 0 , 0,
19536 CP1_ }, /* CVT.L.fmt */
19537 { pool , RSQRT_fmt , 2 , 32,
19538 0xfc003fff, 0xa000023b, 0 , 0,
19539 CP1_ }, /* RSQRT.fmt */
19540 { pool , FLOOR_L_fmt , 2 , 32,
19541 0xfc003fff, 0xa000033b, 0 , 0,
19542 CP1_ }, /* FLOOR.L.fmt */
19543 { reserved_block , 0 , 0 , 32,
19544 0xfc003fff, 0xa000043b, 0 , 0,
19545 CP1_ }, /* POOL32Fxf_0~*(4) */
19546 { reserved_block , 0 , 0 , 32,
19547 0xfc003fff, 0xa000053b, 0 , 0,
19548 CP1_ }, /* POOL32Fxf_0~*(5) */
19549 { reserved_block , 0 , 0 , 32,
19550 0xfc003fff, 0xa000063b, 0 , 0,
19551 CP1_ }, /* POOL32Fxf_0~*(6) */
19552 { reserved_block , 0 , 0 , 32,
19553 0xfc003fff, 0xa000073b, 0 , 0,
19554 CP1_ }, /* POOL32Fxf_0~*(7) */
19555 { reserved_block , 0 , 0 , 32,
19556 0xfc003fff, 0xa000083b, 0 , 0,
19557 CP1_ }, /* POOL32Fxf_0~*(8) */
19558 { pool , CVT_W_fmt , 2 , 32,
19559 0xfc003fff, 0xa000093b, 0 , 0,
19560 CP1_ }, /* CVT.W.fmt */
19561 { pool , SQRT_fmt , 2 , 32,
19562 0xfc003fff, 0xa0000a3b, 0 , 0,
19563 CP1_ }, /* SQRT.fmt */
19564 { pool , FLOOR_W_fmt , 2 , 32,
19565 0xfc003fff, 0xa0000b3b, 0 , 0,
19566 CP1_ }, /* FLOOR.W.fmt */
19567 { reserved_block , 0 , 0 , 32,
19568 0xfc003fff, 0xa0000c3b, 0 , 0,
19569 CP1_ }, /* POOL32Fxf_0~*(12) */
19570 { reserved_block , 0 , 0 , 32,
19571 0xfc003fff, 0xa0000d3b, 0 , 0,
19572 CP1_ }, /* POOL32Fxf_0~*(13) */
19573 { reserved_block , 0 , 0 , 32,
19574 0xfc003fff, 0xa0000e3b, 0 , 0,
19575 CP1_ }, /* POOL32Fxf_0~*(14) */
19576 { reserved_block , 0 , 0 , 32,
19577 0xfc003fff, 0xa0000f3b, 0 , 0,
19578 CP1_ }, /* POOL32Fxf_0~*(15) */
19579 { instruction , 0 , 0 , 32,
19580 0xfc003fff, 0xa000103b, &NMD::CFC1 , 0,
19581 CP1_ }, /* CFC1 */
19582 { reserved_block , 0 , 0 , 32,
19583 0xfc003fff, 0xa000113b, 0 , 0,
19584 CP1_ }, /* POOL32Fxf_0~*(17) */
19585 { pool , RECIP_fmt , 2 , 32,
19586 0xfc003fff, 0xa000123b, 0 , 0,
19587 CP1_ }, /* RECIP.fmt */
19588 { pool , CEIL_L_fmt , 2 , 32,
19589 0xfc003fff, 0xa000133b, 0 , 0,
19590 CP1_ }, /* CEIL.L.fmt */
19591 { reserved_block , 0 , 0 , 32,
19592 0xfc003fff, 0xa000143b, 0 , 0,
19593 CP1_ }, /* POOL32Fxf_0~*(20) */
19594 { reserved_block , 0 , 0 , 32,
19595 0xfc003fff, 0xa000153b, 0 , 0,
19596 CP1_ }, /* POOL32Fxf_0~*(21) */
19597 { reserved_block , 0 , 0 , 32,
19598 0xfc003fff, 0xa000163b, 0 , 0,
19599 CP1_ }, /* POOL32Fxf_0~*(22) */
19600 { reserved_block , 0 , 0 , 32,
19601 0xfc003fff, 0xa000173b, 0 , 0,
19602 CP1_ }, /* POOL32Fxf_0~*(23) */
19603 { instruction , 0 , 0 , 32,
19604 0xfc003fff, 0xa000183b, &NMD::CTC1 , 0,
19605 CP1_ }, /* CTC1 */
19606 { reserved_block , 0 , 0 , 32,
19607 0xfc003fff, 0xa000193b, 0 , 0,
19608 CP1_ }, /* POOL32Fxf_0~*(25) */
19609 { reserved_block , 0 , 0 , 32,
19610 0xfc003fff, 0xa0001a3b, 0 , 0,
19611 CP1_ }, /* POOL32Fxf_0~*(26) */
19612 { pool , CEIL_W_fmt , 2 , 32,
19613 0xfc003fff, 0xa0001b3b, 0 , 0,
19614 CP1_ }, /* CEIL.W.fmt */
19615 { reserved_block , 0 , 0 , 32,
19616 0xfc003fff, 0xa0001c3b, 0 , 0,
19617 CP1_ }, /* POOL32Fxf_0~*(28) */
19618 { reserved_block , 0 , 0 , 32,
19619 0xfc003fff, 0xa0001d3b, 0 , 0,
19620 CP1_ }, /* POOL32Fxf_0~*(29) */
19621 { reserved_block , 0 , 0 , 32,
19622 0xfc003fff, 0xa0001e3b, 0 , 0,
19623 CP1_ }, /* POOL32Fxf_0~*(30) */
19624 { reserved_block , 0 , 0 , 32,
19625 0xfc003fff, 0xa0001f3b, 0 , 0,
19626 CP1_ }, /* POOL32Fxf_0~*(31) */
19627 { instruction , 0 , 0 , 32,
19628 0xfc003fff, 0xa000203b, &NMD::MFC1 , 0,
19629 CP1_ }, /* MFC1 */
19630 { instruction , 0 , 0 , 32,
19631 0xfc003fff, 0xa000213b, &NMD::CVT_S_PL , 0,
19632 CP1_ }, /* CVT.S.PL */
19633 { reserved_block , 0 , 0 , 32,
19634 0xfc003fff, 0xa000223b, 0 , 0,
19635 CP1_ }, /* POOL32Fxf_0~*(34) */
19636 { pool , TRUNC_L_fmt , 2 , 32,
19637 0xfc003fff, 0xa000233b, 0 , 0,
19638 CP1_ }, /* TRUNC.L.fmt */
19639 { instruction , 0 , 0 , 32,
19640 0xfc003fff, 0xa000243b, &NMD::DMFC1 , 0,
19641 CP1_ | MIPS64_ }, /* DMFC1 */
19642 { reserved_block , 0 , 0 , 32,
19643 0xfc003fff, 0xa000253b, 0 , 0,
19644 CP1_ }, /* POOL32Fxf_0~*(37) */
19645 { reserved_block , 0 , 0 , 32,
19646 0xfc003fff, 0xa000263b, 0 , 0,
19647 CP1_ }, /* POOL32Fxf_0~*(38) */
19648 { reserved_block , 0 , 0 , 32,
19649 0xfc003fff, 0xa000273b, 0 , 0,
19650 CP1_ }, /* POOL32Fxf_0~*(39) */
19651 { instruction , 0 , 0 , 32,
19652 0xfc003fff, 0xa000283b, &NMD::MTC1 , 0,
19653 CP1_ }, /* MTC1 */
19654 { instruction , 0 , 0 , 32,
19655 0xfc003fff, 0xa000293b, &NMD::CVT_S_PU , 0,
19656 CP1_ }, /* CVT.S.PU */
19657 { reserved_block , 0 , 0 , 32,
19658 0xfc003fff, 0xa0002a3b, 0 , 0,
19659 CP1_ }, /* POOL32Fxf_0~*(42) */
19660 { pool , TRUNC_W_fmt , 2 , 32,
19661 0xfc003fff, 0xa0002b3b, 0 , 0,
19662 CP1_ }, /* TRUNC.W.fmt */
19663 { instruction , 0 , 0 , 32,
19664 0xfc003fff, 0xa0002c3b, &NMD::DMTC1 , 0,
19665 CP1_ | MIPS64_ }, /* DMTC1 */
19666 { reserved_block , 0 , 0 , 32,
19667 0xfc003fff, 0xa0002d3b, 0 , 0,
19668 CP1_ }, /* POOL32Fxf_0~*(45) */
19669 { reserved_block , 0 , 0 , 32,
19670 0xfc003fff, 0xa0002e3b, 0 , 0,
19671 CP1_ }, /* POOL32Fxf_0~*(46) */
19672 { reserved_block , 0 , 0 , 32,
19673 0xfc003fff, 0xa0002f3b, 0 , 0,
19674 CP1_ }, /* POOL32Fxf_0~*(47) */
19675 { instruction , 0 , 0 , 32,
19676 0xfc003fff, 0xa000303b, &NMD::MFHC1 , 0,
19677 CP1_ }, /* MFHC1 */
19678 { reserved_block , 0 , 0 , 32,
19679 0xfc003fff, 0xa000313b, 0 , 0,
19680 CP1_ }, /* POOL32Fxf_0~*(49) */
19681 { reserved_block , 0 , 0 , 32,
19682 0xfc003fff, 0xa000323b, 0 , 0,
19683 CP1_ }, /* POOL32Fxf_0~*(50) */
19684 { pool , ROUND_L_fmt , 2 , 32,
19685 0xfc003fff, 0xa000333b, 0 , 0,
19686 CP1_ }, /* ROUND.L.fmt */
19687 { reserved_block , 0 , 0 , 32,
19688 0xfc003fff, 0xa000343b, 0 , 0,
19689 CP1_ }, /* POOL32Fxf_0~*(52) */
19690 { reserved_block , 0 , 0 , 32,
19691 0xfc003fff, 0xa000353b, 0 , 0,
19692 CP1_ }, /* POOL32Fxf_0~*(53) */
19693 { reserved_block , 0 , 0 , 32,
19694 0xfc003fff, 0xa000363b, 0 , 0,
19695 CP1_ }, /* POOL32Fxf_0~*(54) */
19696 { reserved_block , 0 , 0 , 32,
19697 0xfc003fff, 0xa000373b, 0 , 0,
19698 CP1_ }, /* POOL32Fxf_0~*(55) */
19699 { instruction , 0 , 0 , 32,
19700 0xfc003fff, 0xa000383b, &NMD::MTHC1 , 0,
19701 CP1_ }, /* MTHC1 */
19702 { reserved_block , 0 , 0 , 32,
19703 0xfc003fff, 0xa000393b, 0 , 0,
19704 CP1_ }, /* POOL32Fxf_0~*(57) */
19705 { reserved_block , 0 , 0 , 32,
19706 0xfc003fff, 0xa0003a3b, 0 , 0,
19707 CP1_ }, /* POOL32Fxf_0~*(58) */
19708 { pool , ROUND_W_fmt , 2 , 32,
19709 0xfc003fff, 0xa0003b3b, 0 , 0,
19710 CP1_ }, /* ROUND.W.fmt */
19711 { reserved_block , 0 , 0 , 32,
19712 0xfc003fff, 0xa0003c3b, 0 , 0,
19713 CP1_ }, /* POOL32Fxf_0~*(60) */
19714 { reserved_block , 0 , 0 , 32,
19715 0xfc003fff, 0xa0003d3b, 0 , 0,
19716 CP1_ }, /* POOL32Fxf_0~*(61) */
19717 { reserved_block , 0 , 0 , 32,
19718 0xfc003fff, 0xa0003e3b, 0 , 0,
19719 CP1_ }, /* POOL32Fxf_0~*(62) */
19720 { reserved_block , 0 , 0 , 32,
19721 0xfc003fff, 0xa0003f3b, 0 , 0,
19722 CP1_ }, /* POOL32Fxf_0~*(63) */
19723 };
19724
19725
19726 NMD::Pool NMD::MOV_fmt[4] = {
19727 { instruction , 0 , 0 , 32,
19728 0xfc007fff, 0xa000007b, &NMD::MOV_S , 0,
19729 CP1_ }, /* MOV.S */
19730 { instruction , 0 , 0 , 32,
19731 0xfc007fff, 0xa000207b, &NMD::MOV_D , 0,
19732 CP1_ }, /* MOV.D */
19733 { reserved_block , 0 , 0 , 32,
19734 0xfc007fff, 0xa000407b, 0 , 0,
19735 CP1_ }, /* MOV.fmt~*(2) */
19736 { reserved_block , 0 , 0 , 32,
19737 0xfc007fff, 0xa000607b, 0 , 0,
19738 CP1_ }, /* MOV.fmt~*(3) */
19739 };
19740
19741
19742 NMD::Pool NMD::ABS_fmt[4] = {
19743 { instruction , 0 , 0 , 32,
19744 0xfc007fff, 0xa000037b, &NMD::ABS_S , 0,
19745 CP1_ }, /* ABS.S */
19746 { instruction , 0 , 0 , 32,
19747 0xfc007fff, 0xa000237b, &NMD::ABS_D , 0,
19748 CP1_ }, /* ABS.D */
19749 { reserved_block , 0 , 0 , 32,
19750 0xfc007fff, 0xa000437b, 0 , 0,
19751 CP1_ }, /* ABS.fmt~*(2) */
19752 { reserved_block , 0 , 0 , 32,
19753 0xfc007fff, 0xa000637b, 0 , 0,
19754 CP1_ }, /* ABS.fmt~*(3) */
19755 };
19756
19757
19758 NMD::Pool NMD::NEG_fmt[4] = {
19759 { instruction , 0 , 0 , 32,
19760 0xfc007fff, 0xa0000b7b, &NMD::NEG_S , 0,
19761 CP1_ }, /* NEG.S */
19762 { instruction , 0 , 0 , 32,
19763 0xfc007fff, 0xa0002b7b, &NMD::NEG_D , 0,
19764 CP1_ }, /* NEG.D */
19765 { reserved_block , 0 , 0 , 32,
19766 0xfc007fff, 0xa0004b7b, 0 , 0,
19767 CP1_ }, /* NEG.fmt~*(2) */
19768 { reserved_block , 0 , 0 , 32,
19769 0xfc007fff, 0xa0006b7b, 0 , 0,
19770 CP1_ }, /* NEG.fmt~*(3) */
19771 };
19772
19773
19774 NMD::Pool NMD::CVT_D_fmt[4] = {
19775 { instruction , 0 , 0 , 32,
19776 0xfc007fff, 0xa000137b, &NMD::CVT_D_S , 0,
19777 CP1_ }, /* CVT.D.S */
19778 { instruction , 0 , 0 , 32,
19779 0xfc007fff, 0xa000337b, &NMD::CVT_D_W , 0,
19780 CP1_ }, /* CVT.D.W */
19781 { instruction , 0 , 0 , 32,
19782 0xfc007fff, 0xa000537b, &NMD::CVT_D_L , 0,
19783 CP1_ }, /* CVT.D.L */
19784 { reserved_block , 0 , 0 , 32,
19785 0xfc007fff, 0xa000737b, 0 , 0,
19786 CP1_ }, /* CVT.D.fmt~*(3) */
19787 };
19788
19789
19790 NMD::Pool NMD::CVT_S_fmt[4] = {
19791 { instruction , 0 , 0 , 32,
19792 0xfc007fff, 0xa0001b7b, &NMD::CVT_S_D , 0,
19793 CP1_ }, /* CVT.S.D */
19794 { instruction , 0 , 0 , 32,
19795 0xfc007fff, 0xa0003b7b, &NMD::CVT_S_W , 0,
19796 CP1_ }, /* CVT.S.W */
19797 { instruction , 0 , 0 , 32,
19798 0xfc007fff, 0xa0005b7b, &NMD::CVT_S_L , 0,
19799 CP1_ }, /* CVT.S.L */
19800 { reserved_block , 0 , 0 , 32,
19801 0xfc007fff, 0xa0007b7b, 0 , 0,
19802 CP1_ }, /* CVT.S.fmt~*(3) */
19803 };
19804
19805
19806 NMD::Pool NMD::POOL32Fxf_1[32] = {
19807 { pool , MOV_fmt , 4 , 32,
19808 0xfc001fff, 0xa000007b, 0 , 0,
19809 CP1_ }, /* MOV.fmt */
19810 { reserved_block , 0 , 0 , 32,
19811 0xfc001fff, 0xa000017b, 0 , 0,
19812 CP1_ }, /* POOL32Fxf_1~*(1) */
19813 { reserved_block , 0 , 0 , 32,
19814 0xfc001fff, 0xa000027b, 0 , 0,
19815 CP1_ }, /* POOL32Fxf_1~*(2) */
19816 { pool , ABS_fmt , 4 , 32,
19817 0xfc001fff, 0xa000037b, 0 , 0,
19818 CP1_ }, /* ABS.fmt */
19819 { reserved_block , 0 , 0 , 32,
19820 0xfc001fff, 0xa000047b, 0 , 0,
19821 CP1_ }, /* POOL32Fxf_1~*(4) */
19822 { reserved_block , 0 , 0 , 32,
19823 0xfc001fff, 0xa000057b, 0 , 0,
19824 CP1_ }, /* POOL32Fxf_1~*(5) */
19825 { reserved_block , 0 , 0 , 32,
19826 0xfc001fff, 0xa000067b, 0 , 0,
19827 CP1_ }, /* POOL32Fxf_1~*(6) */
19828 { reserved_block , 0 , 0 , 32,
19829 0xfc001fff, 0xa000077b, 0 , 0,
19830 CP1_ }, /* POOL32Fxf_1~*(7) */
19831 { reserved_block , 0 , 0 , 32,
19832 0xfc001fff, 0xa000087b, 0 , 0,
19833 CP1_ }, /* POOL32Fxf_1~*(8) */
19834 { reserved_block , 0 , 0 , 32,
19835 0xfc001fff, 0xa000097b, 0 , 0,
19836 CP1_ }, /* POOL32Fxf_1~*(9) */
19837 { reserved_block , 0 , 0 , 32,
19838 0xfc001fff, 0xa0000a7b, 0 , 0,
19839 CP1_ }, /* POOL32Fxf_1~*(10) */
19840 { pool , NEG_fmt , 4 , 32,
19841 0xfc001fff, 0xa0000b7b, 0 , 0,
19842 CP1_ }, /* NEG.fmt */
19843 { reserved_block , 0 , 0 , 32,
19844 0xfc001fff, 0xa0000c7b, 0 , 0,
19845 CP1_ }, /* POOL32Fxf_1~*(12) */
19846 { reserved_block , 0 , 0 , 32,
19847 0xfc001fff, 0xa0000d7b, 0 , 0,
19848 CP1_ }, /* POOL32Fxf_1~*(13) */
19849 { reserved_block , 0 , 0 , 32,
19850 0xfc001fff, 0xa0000e7b, 0 , 0,
19851 CP1_ }, /* POOL32Fxf_1~*(14) */
19852 { reserved_block , 0 , 0 , 32,
19853 0xfc001fff, 0xa0000f7b, 0 , 0,
19854 CP1_ }, /* POOL32Fxf_1~*(15) */
19855 { reserved_block , 0 , 0 , 32,
19856 0xfc001fff, 0xa000107b, 0 , 0,
19857 CP1_ }, /* POOL32Fxf_1~*(16) */
19858 { reserved_block , 0 , 0 , 32,
19859 0xfc001fff, 0xa000117b, 0 , 0,
19860 CP1_ }, /* POOL32Fxf_1~*(17) */
19861 { reserved_block , 0 , 0 , 32,
19862 0xfc001fff, 0xa000127b, 0 , 0,
19863 CP1_ }, /* POOL32Fxf_1~*(18) */
19864 { pool , CVT_D_fmt , 4 , 32,
19865 0xfc001fff, 0xa000137b, 0 , 0,
19866 CP1_ }, /* CVT.D.fmt */
19867 { reserved_block , 0 , 0 , 32,
19868 0xfc001fff, 0xa000147b, 0 , 0,
19869 CP1_ }, /* POOL32Fxf_1~*(20) */
19870 { reserved_block , 0 , 0 , 32,
19871 0xfc001fff, 0xa000157b, 0 , 0,
19872 CP1_ }, /* POOL32Fxf_1~*(21) */
19873 { reserved_block , 0 , 0 , 32,
19874 0xfc001fff, 0xa000167b, 0 , 0,
19875 CP1_ }, /* POOL32Fxf_1~*(22) */
19876 { reserved_block , 0 , 0 , 32,
19877 0xfc001fff, 0xa000177b, 0 , 0,
19878 CP1_ }, /* POOL32Fxf_1~*(23) */
19879 { reserved_block , 0 , 0 , 32,
19880 0xfc001fff, 0xa000187b, 0 , 0,
19881 CP1_ }, /* POOL32Fxf_1~*(24) */
19882 { reserved_block , 0 , 0 , 32,
19883 0xfc001fff, 0xa000197b, 0 , 0,
19884 CP1_ }, /* POOL32Fxf_1~*(25) */
19885 { reserved_block , 0 , 0 , 32,
19886 0xfc001fff, 0xa0001a7b, 0 , 0,
19887 CP1_ }, /* POOL32Fxf_1~*(26) */
19888 { pool , CVT_S_fmt , 4 , 32,
19889 0xfc001fff, 0xa0001b7b, 0 , 0,
19890 CP1_ }, /* CVT.S.fmt */
19891 { reserved_block , 0 , 0 , 32,
19892 0xfc001fff, 0xa0001c7b, 0 , 0,
19893 CP1_ }, /* POOL32Fxf_1~*(28) */
19894 { reserved_block , 0 , 0 , 32,
19895 0xfc001fff, 0xa0001d7b, 0 , 0,
19896 CP1_ }, /* POOL32Fxf_1~*(29) */
19897 { reserved_block , 0 , 0 , 32,
19898 0xfc001fff, 0xa0001e7b, 0 , 0,
19899 CP1_ }, /* POOL32Fxf_1~*(30) */
19900 { reserved_block , 0 , 0 , 32,
19901 0xfc001fff, 0xa0001f7b, 0 , 0,
19902 CP1_ }, /* POOL32Fxf_1~*(31) */
19903 };
19904
19905
19906 NMD::Pool NMD::POOL32Fxf[4] = {
19907 { pool , POOL32Fxf_0 , 64 , 32,
19908 0xfc0000ff, 0xa000003b, 0 , 0,
19909 CP1_ }, /* POOL32Fxf_0 */
19910 { pool , POOL32Fxf_1 , 32 , 32,
19911 0xfc0000ff, 0xa000007b, 0 , 0,
19912 CP1_ }, /* POOL32Fxf_1 */
19913 { reserved_block , 0 , 0 , 32,
19914 0xfc0000ff, 0xa00000bb, 0 , 0,
19915 CP1_ }, /* POOL32Fxf~*(2) */
19916 { reserved_block , 0 , 0 , 32,
19917 0xfc0000ff, 0xa00000fb, 0 , 0,
19918 CP1_ }, /* POOL32Fxf~*(3) */
19919 };
19920
19921
19922 NMD::Pool NMD::POOL32F_3[8] = {
19923 { pool , MIN_fmt , 2 , 32,
19924 0xfc00003f, 0xa0000003, 0 , 0,
19925 CP1_ }, /* MIN.fmt */
19926 { pool , MAX_fmt , 2 , 32,
19927 0xfc00003f, 0xa000000b, 0 , 0,
19928 CP1_ }, /* MAX.fmt */
19929 { reserved_block , 0 , 0 , 32,
19930 0xfc00003f, 0xa0000013, 0 , 0,
19931 CP1_ }, /* POOL32F_3~*(2) */
19932 { reserved_block , 0 , 0 , 32,
19933 0xfc00003f, 0xa000001b, 0 , 0,
19934 CP1_ }, /* POOL32F_3~*(3) */
19935 { pool , MINA_fmt , 2 , 32,
19936 0xfc00003f, 0xa0000023, 0 , 0,
19937 CP1_ }, /* MINA.fmt */
19938 { pool , MAXA_fmt , 2 , 32,
19939 0xfc00003f, 0xa000002b, 0 , 0,
19940 CP1_ }, /* MAXA.fmt */
19941 { reserved_block , 0 , 0 , 32,
19942 0xfc00003f, 0xa0000033, 0 , 0,
19943 CP1_ }, /* POOL32F_3~*(6) */
19944 { pool , POOL32Fxf , 4 , 32,
19945 0xfc00003f, 0xa000003b, 0 , 0,
19946 CP1_ }, /* POOL32Fxf */
19947 };
19948
19949
19950 NMD::Pool NMD::CMP_condn_S[32] = {
19951 { instruction , 0 , 0 , 32,
19952 0xfc0007ff, 0xa0000005, &NMD::CMP_AF_S , 0,
19953 CP1_ }, /* CMP.AF.S */
19954 { instruction , 0 , 0 , 32,
19955 0xfc0007ff, 0xa0000045, &NMD::CMP_UN_S , 0,
19956 CP1_ }, /* CMP.UN.S */
19957 { instruction , 0 , 0 , 32,
19958 0xfc0007ff, 0xa0000085, &NMD::CMP_EQ_S , 0,
19959 CP1_ }, /* CMP.EQ.S */
19960 { instruction , 0 , 0 , 32,
19961 0xfc0007ff, 0xa00000c5, &NMD::CMP_UEQ_S , 0,
19962 CP1_ }, /* CMP.UEQ.S */
19963 { instruction , 0 , 0 , 32,
19964 0xfc0007ff, 0xa0000105, &NMD::CMP_LT_S , 0,
19965 CP1_ }, /* CMP.LT.S */
19966 { instruction , 0 , 0 , 32,
19967 0xfc0007ff, 0xa0000145, &NMD::CMP_ULT_S , 0,
19968 CP1_ }, /* CMP.ULT.S */
19969 { instruction , 0 , 0 , 32,
19970 0xfc0007ff, 0xa0000185, &NMD::CMP_LE_S , 0,
19971 CP1_ }, /* CMP.LE.S */
19972 { instruction , 0 , 0 , 32,
19973 0xfc0007ff, 0xa00001c5, &NMD::CMP_ULE_S , 0,
19974 CP1_ }, /* CMP.ULE.S */
19975 { instruction , 0 , 0 , 32,
19976 0xfc0007ff, 0xa0000205, &NMD::CMP_SAF_S , 0,
19977 CP1_ }, /* CMP.SAF.S */
19978 { instruction , 0 , 0 , 32,
19979 0xfc0007ff, 0xa0000245, &NMD::CMP_SUN_S , 0,
19980 CP1_ }, /* CMP.SUN.S */
19981 { instruction , 0 , 0 , 32,
19982 0xfc0007ff, 0xa0000285, &NMD::CMP_SEQ_S , 0,
19983 CP1_ }, /* CMP.SEQ.S */
19984 { instruction , 0 , 0 , 32,
19985 0xfc0007ff, 0xa00002c5, &NMD::CMP_SUEQ_S , 0,
19986 CP1_ }, /* CMP.SUEQ.S */
19987 { instruction , 0 , 0 , 32,
19988 0xfc0007ff, 0xa0000305, &NMD::CMP_SLT_S , 0,
19989 CP1_ }, /* CMP.SLT.S */
19990 { instruction , 0 , 0 , 32,
19991 0xfc0007ff, 0xa0000345, &NMD::CMP_SULT_S , 0,
19992 CP1_ }, /* CMP.SULT.S */
19993 { instruction , 0 , 0 , 32,
19994 0xfc0007ff, 0xa0000385, &NMD::CMP_SLE_S , 0,
19995 CP1_ }, /* CMP.SLE.S */
19996 { instruction , 0 , 0 , 32,
19997 0xfc0007ff, 0xa00003c5, &NMD::CMP_SULE_S , 0,
19998 CP1_ }, /* CMP.SULE.S */
19999 { reserved_block , 0 , 0 , 32,
20000 0xfc0007ff, 0xa0000405, 0 , 0,
20001 CP1_ }, /* CMP.condn.S~*(16) */
20002 { instruction , 0 , 0 , 32,
20003 0xfc0007ff, 0xa0000445, &NMD::CMP_OR_S , 0,
20004 CP1_ }, /* CMP.OR.S */
20005 { instruction , 0 , 0 , 32,
20006 0xfc0007ff, 0xa0000485, &NMD::CMP_UNE_S , 0,
20007 CP1_ }, /* CMP.UNE.S */
20008 { instruction , 0 , 0 , 32,
20009 0xfc0007ff, 0xa00004c5, &NMD::CMP_NE_S , 0,
20010 CP1_ }, /* CMP.NE.S */
20011 { reserved_block , 0 , 0 , 32,
20012 0xfc0007ff, 0xa0000505, 0 , 0,
20013 CP1_ }, /* CMP.condn.S~*(20) */
20014 { reserved_block , 0 , 0 , 32,
20015 0xfc0007ff, 0xa0000545, 0 , 0,
20016 CP1_ }, /* CMP.condn.S~*(21) */
20017 { reserved_block , 0 , 0 , 32,
20018 0xfc0007ff, 0xa0000585, 0 , 0,
20019 CP1_ }, /* CMP.condn.S~*(22) */
20020 { reserved_block , 0 , 0 , 32,
20021 0xfc0007ff, 0xa00005c5, 0 , 0,
20022 CP1_ }, /* CMP.condn.S~*(23) */
20023 { reserved_block , 0 , 0 , 32,
20024 0xfc0007ff, 0xa0000605, 0 , 0,
20025 CP1_ }, /* CMP.condn.S~*(24) */
20026 { instruction , 0 , 0 , 32,
20027 0xfc0007ff, 0xa0000645, &NMD::CMP_SOR_S , 0,
20028 CP1_ }, /* CMP.SOR.S */
20029 { instruction , 0 , 0 , 32,
20030 0xfc0007ff, 0xa0000685, &NMD::CMP_SUNE_S , 0,
20031 CP1_ }, /* CMP.SUNE.S */
20032 { instruction , 0 , 0 , 32,
20033 0xfc0007ff, 0xa00006c5, &NMD::CMP_SNE_S , 0,
20034 CP1_ }, /* CMP.SNE.S */
20035 { reserved_block , 0 , 0 , 32,
20036 0xfc0007ff, 0xa0000705, 0 , 0,
20037 CP1_ }, /* CMP.condn.S~*(28) */
20038 { reserved_block , 0 , 0 , 32,
20039 0xfc0007ff, 0xa0000745, 0 , 0,
20040 CP1_ }, /* CMP.condn.S~*(29) */
20041 { reserved_block , 0 , 0 , 32,
20042 0xfc0007ff, 0xa0000785, 0 , 0,
20043 CP1_ }, /* CMP.condn.S~*(30) */
20044 { reserved_block , 0 , 0 , 32,
20045 0xfc0007ff, 0xa00007c5, 0 , 0,
20046 CP1_ }, /* CMP.condn.S~*(31) */
20047 };
20048
20049
20050 NMD::Pool NMD::CMP_condn_D[32] = {
20051 { instruction , 0 , 0 , 32,
20052 0xfc0007ff, 0xa0000015, &NMD::CMP_AF_D , 0,
20053 CP1_ }, /* CMP.AF.D */
20054 { instruction , 0 , 0 , 32,
20055 0xfc0007ff, 0xa0000055, &NMD::CMP_UN_D , 0,
20056 CP1_ }, /* CMP.UN.D */
20057 { instruction , 0 , 0 , 32,
20058 0xfc0007ff, 0xa0000095, &NMD::CMP_EQ_D , 0,
20059 CP1_ }, /* CMP.EQ.D */
20060 { instruction , 0 , 0 , 32,
20061 0xfc0007ff, 0xa00000d5, &NMD::CMP_UEQ_D , 0,
20062 CP1_ }, /* CMP.UEQ.D */
20063 { instruction , 0 , 0 , 32,
20064 0xfc0007ff, 0xa0000115, &NMD::CMP_LT_D , 0,
20065 CP1_ }, /* CMP.LT.D */
20066 { instruction , 0 , 0 , 32,
20067 0xfc0007ff, 0xa0000155, &NMD::CMP_ULT_D , 0,
20068 CP1_ }, /* CMP.ULT.D */
20069 { instruction , 0 , 0 , 32,
20070 0xfc0007ff, 0xa0000195, &NMD::CMP_LE_D , 0,
20071 CP1_ }, /* CMP.LE.D */
20072 { instruction , 0 , 0 , 32,
20073 0xfc0007ff, 0xa00001d5, &NMD::CMP_ULE_D , 0,
20074 CP1_ }, /* CMP.ULE.D */
20075 { instruction , 0 , 0 , 32,
20076 0xfc0007ff, 0xa0000215, &NMD::CMP_SAF_D , 0,
20077 CP1_ }, /* CMP.SAF.D */
20078 { instruction , 0 , 0 , 32,
20079 0xfc0007ff, 0xa0000255, &NMD::CMP_SUN_D , 0,
20080 CP1_ }, /* CMP.SUN.D */
20081 { instruction , 0 , 0 , 32,
20082 0xfc0007ff, 0xa0000295, &NMD::CMP_SEQ_D , 0,
20083 CP1_ }, /* CMP.SEQ.D */
20084 { instruction , 0 , 0 , 32,
20085 0xfc0007ff, 0xa00002d5, &NMD::CMP_SUEQ_D , 0,
20086 CP1_ }, /* CMP.SUEQ.D */
20087 { instruction , 0 , 0 , 32,
20088 0xfc0007ff, 0xa0000315, &NMD::CMP_SLT_D , 0,
20089 CP1_ }, /* CMP.SLT.D */
20090 { instruction , 0 , 0 , 32,
20091 0xfc0007ff, 0xa0000355, &NMD::CMP_SULT_D , 0,
20092 CP1_ }, /* CMP.SULT.D */
20093 { instruction , 0 , 0 , 32,
20094 0xfc0007ff, 0xa0000395, &NMD::CMP_SLE_D , 0,
20095 CP1_ }, /* CMP.SLE.D */
20096 { instruction , 0 , 0 , 32,
20097 0xfc0007ff, 0xa00003d5, &NMD::CMP_SULE_D , 0,
20098 CP1_ }, /* CMP.SULE.D */
20099 { reserved_block , 0 , 0 , 32,
20100 0xfc0007ff, 0xa0000415, 0 , 0,
20101 CP1_ }, /* CMP.condn.D~*(16) */
20102 { instruction , 0 , 0 , 32,
20103 0xfc0007ff, 0xa0000455, &NMD::CMP_OR_D , 0,
20104 CP1_ }, /* CMP.OR.D */
20105 { instruction , 0 , 0 , 32,
20106 0xfc0007ff, 0xa0000495, &NMD::CMP_UNE_D , 0,
20107 CP1_ }, /* CMP.UNE.D */
20108 { instruction , 0 , 0 , 32,
20109 0xfc0007ff, 0xa00004d5, &NMD::CMP_NE_D , 0,
20110 CP1_ }, /* CMP.NE.D */
20111 { reserved_block , 0 , 0 , 32,
20112 0xfc0007ff, 0xa0000515, 0 , 0,
20113 CP1_ }, /* CMP.condn.D~*(20) */
20114 { reserved_block , 0 , 0 , 32,
20115 0xfc0007ff, 0xa0000555, 0 , 0,
20116 CP1_ }, /* CMP.condn.D~*(21) */
20117 { reserved_block , 0 , 0 , 32,
20118 0xfc0007ff, 0xa0000595, 0 , 0,
20119 CP1_ }, /* CMP.condn.D~*(22) */
20120 { reserved_block , 0 , 0 , 32,
20121 0xfc0007ff, 0xa00005d5, 0 , 0,
20122 CP1_ }, /* CMP.condn.D~*(23) */
20123 { reserved_block , 0 , 0 , 32,
20124 0xfc0007ff, 0xa0000615, 0 , 0,
20125 CP1_ }, /* CMP.condn.D~*(24) */
20126 { instruction , 0 , 0 , 32,
20127 0xfc0007ff, 0xa0000655, &NMD::CMP_SOR_D , 0,
20128 CP1_ }, /* CMP.SOR.D */
20129 { instruction , 0 , 0 , 32,
20130 0xfc0007ff, 0xa0000695, &NMD::CMP_SUNE_D , 0,
20131 CP1_ }, /* CMP.SUNE.D */
20132 { instruction , 0 , 0 , 32,
20133 0xfc0007ff, 0xa00006d5, &NMD::CMP_SNE_D , 0,
20134 CP1_ }, /* CMP.SNE.D */
20135 { reserved_block , 0 , 0 , 32,
20136 0xfc0007ff, 0xa0000715, 0 , 0,
20137 CP1_ }, /* CMP.condn.D~*(28) */
20138 { reserved_block , 0 , 0 , 32,
20139 0xfc0007ff, 0xa0000755, 0 , 0,
20140 CP1_ }, /* CMP.condn.D~*(29) */
20141 { reserved_block , 0 , 0 , 32,
20142 0xfc0007ff, 0xa0000795, 0 , 0,
20143 CP1_ }, /* CMP.condn.D~*(30) */
20144 { reserved_block , 0 , 0 , 32,
20145 0xfc0007ff, 0xa00007d5, 0 , 0,
20146 CP1_ }, /* CMP.condn.D~*(31) */
20147 };
20148
20149
20150 NMD::Pool NMD::POOL32F_5[8] = {
20151 { pool , CMP_condn_S , 32 , 32,
20152 0xfc00003f, 0xa0000005, 0 , 0,
20153 CP1_ }, /* CMP.condn.S */
20154 { reserved_block , 0 , 0 , 32,
20155 0xfc00003f, 0xa000000d, 0 , 0,
20156 CP1_ }, /* POOL32F_5~*(1) */
20157 { pool , CMP_condn_D , 32 , 32,
20158 0xfc00003f, 0xa0000015, 0 , 0,
20159 CP1_ }, /* CMP.condn.D */
20160 { reserved_block , 0 , 0 , 32,
20161 0xfc00003f, 0xa000001d, 0 , 0,
20162 CP1_ }, /* POOL32F_5~*(3) */
20163 { reserved_block , 0 , 0 , 32,
20164 0xfc00003f, 0xa0000025, 0 , 0,
20165 CP1_ }, /* POOL32F_5~*(4) */
20166 { reserved_block , 0 , 0 , 32,
20167 0xfc00003f, 0xa000002d, 0 , 0,
20168 CP1_ }, /* POOL32F_5~*(5) */
20169 { reserved_block , 0 , 0 , 32,
20170 0xfc00003f, 0xa0000035, 0 , 0,
20171 CP1_ }, /* POOL32F_5~*(6) */
20172 { reserved_block , 0 , 0 , 32,
20173 0xfc00003f, 0xa000003d, 0 , 0,
20174 CP1_ }, /* POOL32F_5~*(7) */
20175 };
20176
20177
20178 NMD::Pool NMD::POOL32F[8] = {
20179 { pool , POOL32F_0 , 64 , 32,
20180 0xfc000007, 0xa0000000, 0 , 0,
20181 CP1_ }, /* POOL32F_0 */
20182 { reserved_block , 0 , 0 , 32,
20183 0xfc000007, 0xa0000001, 0 , 0,
20184 CP1_ }, /* POOL32F~*(1) */
20185 { reserved_block , 0 , 0 , 32,
20186 0xfc000007, 0xa0000002, 0 , 0,
20187 CP1_ }, /* POOL32F~*(2) */
20188 { pool , POOL32F_3 , 8 , 32,
20189 0xfc000007, 0xa0000003, 0 , 0,
20190 CP1_ }, /* POOL32F_3 */
20191 { reserved_block , 0 , 0 , 32,
20192 0xfc000007, 0xa0000004, 0 , 0,
20193 CP1_ }, /* POOL32F~*(4) */
20194 { pool , POOL32F_5 , 8 , 32,
20195 0xfc000007, 0xa0000005, 0 , 0,
20196 CP1_ }, /* POOL32F_5 */
20197 { reserved_block , 0 , 0 , 32,
20198 0xfc000007, 0xa0000006, 0 , 0,
20199 CP1_ }, /* POOL32F~*(6) */
20200 { reserved_block , 0 , 0 , 32,
20201 0xfc000007, 0xa0000007, 0 , 0,
20202 CP1_ }, /* POOL32F~*(7) */
20203 };
20204
20205
20206 NMD::Pool NMD::POOL32S_0[64] = {
20207 { reserved_block , 0 , 0 , 32,
20208 0xfc0001ff, 0xc0000000, 0 , 0,
20209 0x0 }, /* POOL32S_0~*(0) */
20210 { instruction , 0 , 0 , 32,
20211 0xfc0001ff, 0xc0000008, &NMD::DLSA , 0,
20212 MIPS64_ }, /* DLSA */
20213 { instruction , 0 , 0 , 32,
20214 0xfc0001ff, 0xc0000010, &NMD::DSLLV , 0,
20215 MIPS64_ }, /* DSLLV */
20216 { instruction , 0 , 0 , 32,
20217 0xfc0001ff, 0xc0000018, &NMD::DMUL , 0,
20218 MIPS64_ }, /* DMUL */
20219 { reserved_block , 0 , 0 , 32,
20220 0xfc0001ff, 0xc0000020, 0 , 0,
20221 0x0 }, /* POOL32S_0~*(4) */
20222 { reserved_block , 0 , 0 , 32,
20223 0xfc0001ff, 0xc0000028, 0 , 0,
20224 0x0 }, /* POOL32S_0~*(5) */
20225 { reserved_block , 0 , 0 , 32,
20226 0xfc0001ff, 0xc0000030, 0 , 0,
20227 0x0 }, /* POOL32S_0~*(6) */
20228 { reserved_block , 0 , 0 , 32,
20229 0xfc0001ff, 0xc0000038, 0 , 0,
20230 0x0 }, /* POOL32S_0~*(7) */
20231 { reserved_block , 0 , 0 , 32,
20232 0xfc0001ff, 0xc0000040, 0 , 0,
20233 0x0 }, /* POOL32S_0~*(8) */
20234 { reserved_block , 0 , 0 , 32,
20235 0xfc0001ff, 0xc0000048, 0 , 0,
20236 0x0 }, /* POOL32S_0~*(9) */
20237 { instruction , 0 , 0 , 32,
20238 0xfc0001ff, 0xc0000050, &NMD::DSRLV , 0,
20239 MIPS64_ }, /* DSRLV */
20240 { instruction , 0 , 0 , 32,
20241 0xfc0001ff, 0xc0000058, &NMD::DMUH , 0,
20242 MIPS64_ }, /* DMUH */
20243 { reserved_block , 0 , 0 , 32,
20244 0xfc0001ff, 0xc0000060, 0 , 0,
20245 0x0 }, /* POOL32S_0~*(12) */
20246 { reserved_block , 0 , 0 , 32,
20247 0xfc0001ff, 0xc0000068, 0 , 0,
20248 0x0 }, /* POOL32S_0~*(13) */
20249 { reserved_block , 0 , 0 , 32,
20250 0xfc0001ff, 0xc0000070, 0 , 0,
20251 0x0 }, /* POOL32S_0~*(14) */
20252 { reserved_block , 0 , 0 , 32,
20253 0xfc0001ff, 0xc0000078, 0 , 0,
20254 0x0 }, /* POOL32S_0~*(15) */
20255 { reserved_block , 0 , 0 , 32,
20256 0xfc0001ff, 0xc0000080, 0 , 0,
20257 0x0 }, /* POOL32S_0~*(16) */
20258 { reserved_block , 0 , 0 , 32,
20259 0xfc0001ff, 0xc0000088, 0 , 0,
20260 0x0 }, /* POOL32S_0~*(17) */
20261 { instruction , 0 , 0 , 32,
20262 0xfc0001ff, 0xc0000090, &NMD::DSRAV , 0,
20263 MIPS64_ }, /* DSRAV */
20264 { instruction , 0 , 0 , 32,
20265 0xfc0001ff, 0xc0000098, &NMD::DMULU , 0,
20266 MIPS64_ }, /* DMULU */
20267 { reserved_block , 0 , 0 , 32,
20268 0xfc0001ff, 0xc00000a0, 0 , 0,
20269 0x0 }, /* POOL32S_0~*(20) */
20270 { reserved_block , 0 , 0 , 32,
20271 0xfc0001ff, 0xc00000a8, 0 , 0,
20272 0x0 }, /* POOL32S_0~*(21) */
20273 { reserved_block , 0 , 0 , 32,
20274 0xfc0001ff, 0xc00000b0, 0 , 0,
20275 0x0 }, /* POOL32S_0~*(22) */
20276 { reserved_block , 0 , 0 , 32,
20277 0xfc0001ff, 0xc00000b8, 0 , 0,
20278 0x0 }, /* POOL32S_0~*(23) */
20279 { reserved_block , 0 , 0 , 32,
20280 0xfc0001ff, 0xc00000c0, 0 , 0,
20281 0x0 }, /* POOL32S_0~*(24) */
20282 { reserved_block , 0 , 0 , 32,
20283 0xfc0001ff, 0xc00000c8, 0 , 0,
20284 0x0 }, /* POOL32S_0~*(25) */
20285 { instruction , 0 , 0 , 32,
20286 0xfc0001ff, 0xc00000d0, &NMD::DROTRV , 0,
20287 MIPS64_ }, /* DROTRV */
20288 { instruction , 0 , 0 , 32,
20289 0xfc0001ff, 0xc00000d8, &NMD::DMUHU , 0,
20290 MIPS64_ }, /* DMUHU */
20291 { reserved_block , 0 , 0 , 32,
20292 0xfc0001ff, 0xc00000e0, 0 , 0,
20293 0x0 }, /* POOL32S_0~*(28) */
20294 { reserved_block , 0 , 0 , 32,
20295 0xfc0001ff, 0xc00000e8, 0 , 0,
20296 0x0 }, /* POOL32S_0~*(29) */
20297 { reserved_block , 0 , 0 , 32,
20298 0xfc0001ff, 0xc00000f0, 0 , 0,
20299 0x0 }, /* POOL32S_0~*(30) */
20300 { reserved_block , 0 , 0 , 32,
20301 0xfc0001ff, 0xc00000f8, 0 , 0,
20302 0x0 }, /* POOL32S_0~*(31) */
20303 { reserved_block , 0 , 0 , 32,
20304 0xfc0001ff, 0xc0000100, 0 , 0,
20305 0x0 }, /* POOL32S_0~*(32) */
20306 { reserved_block , 0 , 0 , 32,
20307 0xfc0001ff, 0xc0000108, 0 , 0,
20308 0x0 }, /* POOL32S_0~*(33) */
20309 { instruction , 0 , 0 , 32,
20310 0xfc0001ff, 0xc0000110, &NMD::DADD , 0,
20311 MIPS64_ }, /* DADD */
20312 { instruction , 0 , 0 , 32,
20313 0xfc0001ff, 0xc0000118, &NMD::DDIV , 0,
20314 MIPS64_ }, /* DDIV */
20315 { reserved_block , 0 , 0 , 32,
20316 0xfc0001ff, 0xc0000120, 0 , 0,
20317 0x0 }, /* POOL32S_0~*(36) */
20318 { reserved_block , 0 , 0 , 32,
20319 0xfc0001ff, 0xc0000128, 0 , 0,
20320 0x0 }, /* POOL32S_0~*(37) */
20321 { reserved_block , 0 , 0 , 32,
20322 0xfc0001ff, 0xc0000130, 0 , 0,
20323 0x0 }, /* POOL32S_0~*(38) */
20324 { reserved_block , 0 , 0 , 32,
20325 0xfc0001ff, 0xc0000138, 0 , 0,
20326 0x0 }, /* POOL32S_0~*(39) */
20327 { reserved_block , 0 , 0 , 32,
20328 0xfc0001ff, 0xc0000140, 0 , 0,
20329 0x0 }, /* POOL32S_0~*(40) */
20330 { reserved_block , 0 , 0 , 32,
20331 0xfc0001ff, 0xc0000148, 0 , 0,
20332 0x0 }, /* POOL32S_0~*(41) */
20333 { instruction , 0 , 0 , 32,
20334 0xfc0001ff, 0xc0000150, &NMD::DADDU , 0,
20335 MIPS64_ }, /* DADDU */
20336 { instruction , 0 , 0 , 32,
20337 0xfc0001ff, 0xc0000158, &NMD::DMOD , 0,
20338 MIPS64_ }, /* DMOD */
20339 { reserved_block , 0 , 0 , 32,
20340 0xfc0001ff, 0xc0000160, 0 , 0,
20341 0x0 }, /* POOL32S_0~*(44) */
20342 { reserved_block , 0 , 0 , 32,
20343 0xfc0001ff, 0xc0000168, 0 , 0,
20344 0x0 }, /* POOL32S_0~*(45) */
20345 { reserved_block , 0 , 0 , 32,
20346 0xfc0001ff, 0xc0000170, 0 , 0,
20347 0x0 }, /* POOL32S_0~*(46) */
20348 { reserved_block , 0 , 0 , 32,
20349 0xfc0001ff, 0xc0000178, 0 , 0,
20350 0x0 }, /* POOL32S_0~*(47) */
20351 { reserved_block , 0 , 0 , 32,
20352 0xfc0001ff, 0xc0000180, 0 , 0,
20353 0x0 }, /* POOL32S_0~*(48) */
20354 { reserved_block , 0 , 0 , 32,
20355 0xfc0001ff, 0xc0000188, 0 , 0,
20356 0x0 }, /* POOL32S_0~*(49) */
20357 { instruction , 0 , 0 , 32,
20358 0xfc0001ff, 0xc0000190, &NMD::DSUB , 0,
20359 MIPS64_ }, /* DSUB */
20360 { instruction , 0 , 0 , 32,
20361 0xfc0001ff, 0xc0000198, &NMD::DDIVU , 0,
20362 MIPS64_ }, /* DDIVU */
20363 { reserved_block , 0 , 0 , 32,
20364 0xfc0001ff, 0xc00001a0, 0 , 0,
20365 0x0 }, /* POOL32S_0~*(52) */
20366 { reserved_block , 0 , 0 , 32,
20367 0xfc0001ff, 0xc00001a8, 0 , 0,
20368 0x0 }, /* POOL32S_0~*(53) */
20369 { reserved_block , 0 , 0 , 32,
20370 0xfc0001ff, 0xc00001b0, 0 , 0,
20371 0x0 }, /* POOL32S_0~*(54) */
20372 { reserved_block , 0 , 0 , 32,
20373 0xfc0001ff, 0xc00001b8, 0 , 0,
20374 0x0 }, /* POOL32S_0~*(55) */
20375 { reserved_block , 0 , 0 , 32,
20376 0xfc0001ff, 0xc00001c0, 0 , 0,
20377 0x0 }, /* POOL32S_0~*(56) */
20378 { reserved_block , 0 , 0 , 32,
20379 0xfc0001ff, 0xc00001c8, 0 , 0,
20380 0x0 }, /* POOL32S_0~*(57) */
20381 { instruction , 0 , 0 , 32,
20382 0xfc0001ff, 0xc00001d0, &NMD::DSUBU , 0,
20383 MIPS64_ }, /* DSUBU */
20384 { instruction , 0 , 0 , 32,
20385 0xfc0001ff, 0xc00001d8, &NMD::DMODU , 0,
20386 MIPS64_ }, /* DMODU */
20387 { reserved_block , 0 , 0 , 32,
20388 0xfc0001ff, 0xc00001e0, 0 , 0,
20389 0x0 }, /* POOL32S_0~*(60) */
20390 { reserved_block , 0 , 0 , 32,
20391 0xfc0001ff, 0xc00001e8, 0 , 0,
20392 0x0 }, /* POOL32S_0~*(61) */
20393 { reserved_block , 0 , 0 , 32,
20394 0xfc0001ff, 0xc00001f0, 0 , 0,
20395 0x0 }, /* POOL32S_0~*(62) */
20396 { reserved_block , 0 , 0 , 32,
20397 0xfc0001ff, 0xc00001f8, 0 , 0,
20398 0x0 }, /* POOL32S_0~*(63) */
20399 };
20400
20401
20402 NMD::Pool NMD::POOL32Sxf_4[128] = {
20403 { reserved_block , 0 , 0 , 32,
20404 0xfc00ffff, 0xc000013c, 0 , 0,
20405 0x0 }, /* POOL32Sxf_4~*(0) */
20406 { reserved_block , 0 , 0 , 32,
20407 0xfc00ffff, 0xc000033c, 0 , 0,
20408 0x0 }, /* POOL32Sxf_4~*(1) */
20409 { reserved_block , 0 , 0 , 32,
20410 0xfc00ffff, 0xc000053c, 0 , 0,
20411 0x0 }, /* POOL32Sxf_4~*(2) */
20412 { reserved_block , 0 , 0 , 32,
20413 0xfc00ffff, 0xc000073c, 0 , 0,
20414 0x0 }, /* POOL32Sxf_4~*(3) */
20415 { reserved_block , 0 , 0 , 32,
20416 0xfc00ffff, 0xc000093c, 0 , 0,
20417 0x0 }, /* POOL32Sxf_4~*(4) */
20418 { reserved_block , 0 , 0 , 32,
20419 0xfc00ffff, 0xc0000b3c, 0 , 0,
20420 0x0 }, /* POOL32Sxf_4~*(5) */
20421 { reserved_block , 0 , 0 , 32,
20422 0xfc00ffff, 0xc0000d3c, 0 , 0,
20423 0x0 }, /* POOL32Sxf_4~*(6) */
20424 { reserved_block , 0 , 0 , 32,
20425 0xfc00ffff, 0xc0000f3c, 0 , 0,
20426 0x0 }, /* POOL32Sxf_4~*(7) */
20427 { reserved_block , 0 , 0 , 32,
20428 0xfc00ffff, 0xc000113c, 0 , 0,
20429 0x0 }, /* POOL32Sxf_4~*(8) */
20430 { reserved_block , 0 , 0 , 32,
20431 0xfc00ffff, 0xc000133c, 0 , 0,
20432 0x0 }, /* POOL32Sxf_4~*(9) */
20433 { reserved_block , 0 , 0 , 32,
20434 0xfc00ffff, 0xc000153c, 0 , 0,
20435 0x0 }, /* POOL32Sxf_4~*(10) */
20436 { reserved_block , 0 , 0 , 32,
20437 0xfc00ffff, 0xc000173c, 0 , 0,
20438 0x0 }, /* POOL32Sxf_4~*(11) */
20439 { reserved_block , 0 , 0 , 32,
20440 0xfc00ffff, 0xc000193c, 0 , 0,
20441 0x0 }, /* POOL32Sxf_4~*(12) */
20442 { reserved_block , 0 , 0 , 32,
20443 0xfc00ffff, 0xc0001b3c, 0 , 0,
20444 0x0 }, /* POOL32Sxf_4~*(13) */
20445 { reserved_block , 0 , 0 , 32,
20446 0xfc00ffff, 0xc0001d3c, 0 , 0,
20447 0x0 }, /* POOL32Sxf_4~*(14) */
20448 { reserved_block , 0 , 0 , 32,
20449 0xfc00ffff, 0xc0001f3c, 0 , 0,
20450 0x0 }, /* POOL32Sxf_4~*(15) */
20451 { reserved_block , 0 , 0 , 32,
20452 0xfc00ffff, 0xc000213c, 0 , 0,
20453 0x0 }, /* POOL32Sxf_4~*(16) */
20454 { reserved_block , 0 , 0 , 32,
20455 0xfc00ffff, 0xc000233c, 0 , 0,
20456 0x0 }, /* POOL32Sxf_4~*(17) */
20457 { reserved_block , 0 , 0 , 32,
20458 0xfc00ffff, 0xc000253c, 0 , 0,
20459 0x0 }, /* POOL32Sxf_4~*(18) */
20460 { reserved_block , 0 , 0 , 32,
20461 0xfc00ffff, 0xc000273c, 0 , 0,
20462 0x0 }, /* POOL32Sxf_4~*(19) */
20463 { reserved_block , 0 , 0 , 32,
20464 0xfc00ffff, 0xc000293c, 0 , 0,
20465 0x0 }, /* POOL32Sxf_4~*(20) */
20466 { reserved_block , 0 , 0 , 32,
20467 0xfc00ffff, 0xc0002b3c, 0 , 0,
20468 0x0 }, /* POOL32Sxf_4~*(21) */
20469 { reserved_block , 0 , 0 , 32,
20470 0xfc00ffff, 0xc0002d3c, 0 , 0,
20471 0x0 }, /* POOL32Sxf_4~*(22) */
20472 { reserved_block , 0 , 0 , 32,
20473 0xfc00ffff, 0xc0002f3c, 0 , 0,
20474 0x0 }, /* POOL32Sxf_4~*(23) */
20475 { reserved_block , 0 , 0 , 32,
20476 0xfc00ffff, 0xc000313c, 0 , 0,
20477 0x0 }, /* POOL32Sxf_4~*(24) */
20478 { reserved_block , 0 , 0 , 32,
20479 0xfc00ffff, 0xc000333c, 0 , 0,
20480 0x0 }, /* POOL32Sxf_4~*(25) */
20481 { reserved_block , 0 , 0 , 32,
20482 0xfc00ffff, 0xc000353c, 0 , 0,
20483 0x0 }, /* POOL32Sxf_4~*(26) */
20484 { reserved_block , 0 , 0 , 32,
20485 0xfc00ffff, 0xc000373c, 0 , 0,
20486 0x0 }, /* POOL32Sxf_4~*(27) */
20487 { reserved_block , 0 , 0 , 32,
20488 0xfc00ffff, 0xc000393c, 0 , 0,
20489 0x0 }, /* POOL32Sxf_4~*(28) */
20490 { reserved_block , 0 , 0 , 32,
20491 0xfc00ffff, 0xc0003b3c, 0 , 0,
20492 0x0 }, /* POOL32Sxf_4~*(29) */
20493 { reserved_block , 0 , 0 , 32,
20494 0xfc00ffff, 0xc0003d3c, 0 , 0,
20495 0x0 }, /* POOL32Sxf_4~*(30) */
20496 { reserved_block , 0 , 0 , 32,
20497 0xfc00ffff, 0xc0003f3c, 0 , 0,
20498 0x0 }, /* POOL32Sxf_4~*(31) */
20499 { reserved_block , 0 , 0 , 32,
20500 0xfc00ffff, 0xc000413c, 0 , 0,
20501 0x0 }, /* POOL32Sxf_4~*(32) */
20502 { reserved_block , 0 , 0 , 32,
20503 0xfc00ffff, 0xc000433c, 0 , 0,
20504 0x0 }, /* POOL32Sxf_4~*(33) */
20505 { reserved_block , 0 , 0 , 32,
20506 0xfc00ffff, 0xc000453c, 0 , 0,
20507 0x0 }, /* POOL32Sxf_4~*(34) */
20508 { reserved_block , 0 , 0 , 32,
20509 0xfc00ffff, 0xc000473c, 0 , 0,
20510 0x0 }, /* POOL32Sxf_4~*(35) */
20511 { reserved_block , 0 , 0 , 32,
20512 0xfc00ffff, 0xc000493c, 0 , 0,
20513 0x0 }, /* POOL32Sxf_4~*(36) */
20514 { instruction , 0 , 0 , 32,
20515 0xfc00ffff, 0xc0004b3c, &NMD::DCLO , 0,
20516 MIPS64_ }, /* DCLO */
20517 { reserved_block , 0 , 0 , 32,
20518 0xfc00ffff, 0xc0004d3c, 0 , 0,
20519 0x0 }, /* POOL32Sxf_4~*(38) */
20520 { reserved_block , 0 , 0 , 32,
20521 0xfc00ffff, 0xc0004f3c, 0 , 0,
20522 0x0 }, /* POOL32Sxf_4~*(39) */
20523 { reserved_block , 0 , 0 , 32,
20524 0xfc00ffff, 0xc000513c, 0 , 0,
20525 0x0 }, /* POOL32Sxf_4~*(40) */
20526 { reserved_block , 0 , 0 , 32,
20527 0xfc00ffff, 0xc000533c, 0 , 0,
20528 0x0 }, /* POOL32Sxf_4~*(41) */
20529 { reserved_block , 0 , 0 , 32,
20530 0xfc00ffff, 0xc000553c, 0 , 0,
20531 0x0 }, /* POOL32Sxf_4~*(42) */
20532 { reserved_block , 0 , 0 , 32,
20533 0xfc00ffff, 0xc000573c, 0 , 0,
20534 0x0 }, /* POOL32Sxf_4~*(43) */
20535 { reserved_block , 0 , 0 , 32,
20536 0xfc00ffff, 0xc000593c, 0 , 0,
20537 0x0 }, /* POOL32Sxf_4~*(44) */
20538 { instruction , 0 , 0 , 32,
20539 0xfc00ffff, 0xc0005b3c, &NMD::DCLZ , 0,
20540 MIPS64_ }, /* DCLZ */
20541 { reserved_block , 0 , 0 , 32,
20542 0xfc00ffff, 0xc0005d3c, 0 , 0,
20543 0x0 }, /* POOL32Sxf_4~*(46) */
20544 { reserved_block , 0 , 0 , 32,
20545 0xfc00ffff, 0xc0005f3c, 0 , 0,
20546 0x0 }, /* POOL32Sxf_4~*(47) */
20547 { reserved_block , 0 , 0 , 32,
20548 0xfc00ffff, 0xc000613c, 0 , 0,
20549 0x0 }, /* POOL32Sxf_4~*(48) */
20550 { reserved_block , 0 , 0 , 32,
20551 0xfc00ffff, 0xc000633c, 0 , 0,
20552 0x0 }, /* POOL32Sxf_4~*(49) */
20553 { reserved_block , 0 , 0 , 32,
20554 0xfc00ffff, 0xc000653c, 0 , 0,
20555 0x0 }, /* POOL32Sxf_4~*(50) */
20556 { reserved_block , 0 , 0 , 32,
20557 0xfc00ffff, 0xc000673c, 0 , 0,
20558 0x0 }, /* POOL32Sxf_4~*(51) */
20559 { reserved_block , 0 , 0 , 32,
20560 0xfc00ffff, 0xc000693c, 0 , 0,
20561 0x0 }, /* POOL32Sxf_4~*(52) */
20562 { reserved_block , 0 , 0 , 32,
20563 0xfc00ffff, 0xc0006b3c, 0 , 0,
20564 0x0 }, /* POOL32Sxf_4~*(53) */
20565 { reserved_block , 0 , 0 , 32,
20566 0xfc00ffff, 0xc0006d3c, 0 , 0,
20567 0x0 }, /* POOL32Sxf_4~*(54) */
20568 { reserved_block , 0 , 0 , 32,
20569 0xfc00ffff, 0xc0006f3c, 0 , 0,
20570 0x0 }, /* POOL32Sxf_4~*(55) */
20571 { reserved_block , 0 , 0 , 32,
20572 0xfc00ffff, 0xc000713c, 0 , 0,
20573 0x0 }, /* POOL32Sxf_4~*(56) */
20574 { reserved_block , 0 , 0 , 32,
20575 0xfc00ffff, 0xc000733c, 0 , 0,
20576 0x0 }, /* POOL32Sxf_4~*(57) */
20577 { reserved_block , 0 , 0 , 32,
20578 0xfc00ffff, 0xc000753c, 0 , 0,
20579 0x0 }, /* POOL32Sxf_4~*(58) */
20580 { reserved_block , 0 , 0 , 32,
20581 0xfc00ffff, 0xc000773c, 0 , 0,
20582 0x0 }, /* POOL32Sxf_4~*(59) */
20583 { reserved_block , 0 , 0 , 32,
20584 0xfc00ffff, 0xc000793c, 0 , 0,
20585 0x0 }, /* POOL32Sxf_4~*(60) */
20586 { reserved_block , 0 , 0 , 32,
20587 0xfc00ffff, 0xc0007b3c, 0 , 0,
20588 0x0 }, /* POOL32Sxf_4~*(61) */
20589 { reserved_block , 0 , 0 , 32,
20590 0xfc00ffff, 0xc0007d3c, 0 , 0,
20591 0x0 }, /* POOL32Sxf_4~*(62) */
20592 { reserved_block , 0 , 0 , 32,
20593 0xfc00ffff, 0xc0007f3c, 0 , 0,
20594 0x0 }, /* POOL32Sxf_4~*(63) */
20595 { reserved_block , 0 , 0 , 32,
20596 0xfc00ffff, 0xc000813c, 0 , 0,
20597 0x0 }, /* POOL32Sxf_4~*(64) */
20598 { reserved_block , 0 , 0 , 32,
20599 0xfc00ffff, 0xc000833c, 0 , 0,
20600 0x0 }, /* POOL32Sxf_4~*(65) */
20601 { reserved_block , 0 , 0 , 32,
20602 0xfc00ffff, 0xc000853c, 0 , 0,
20603 0x0 }, /* POOL32Sxf_4~*(66) */
20604 { reserved_block , 0 , 0 , 32,
20605 0xfc00ffff, 0xc000873c, 0 , 0,
20606 0x0 }, /* POOL32Sxf_4~*(67) */
20607 { reserved_block , 0 , 0 , 32,
20608 0xfc00ffff, 0xc000893c, 0 , 0,
20609 0x0 }, /* POOL32Sxf_4~*(68) */
20610 { reserved_block , 0 , 0 , 32,
20611 0xfc00ffff, 0xc0008b3c, 0 , 0,
20612 0x0 }, /* POOL32Sxf_4~*(69) */
20613 { reserved_block , 0 , 0 , 32,
20614 0xfc00ffff, 0xc0008d3c, 0 , 0,
20615 0x0 }, /* POOL32Sxf_4~*(70) */
20616 { reserved_block , 0 , 0 , 32,
20617 0xfc00ffff, 0xc0008f3c, 0 , 0,
20618 0x0 }, /* POOL32Sxf_4~*(71) */
20619 { reserved_block , 0 , 0 , 32,
20620 0xfc00ffff, 0xc000913c, 0 , 0,
20621 0x0 }, /* POOL32Sxf_4~*(72) */
20622 { reserved_block , 0 , 0 , 32,
20623 0xfc00ffff, 0xc000933c, 0 , 0,
20624 0x0 }, /* POOL32Sxf_4~*(73) */
20625 { reserved_block , 0 , 0 , 32,
20626 0xfc00ffff, 0xc000953c, 0 , 0,
20627 0x0 }, /* POOL32Sxf_4~*(74) */
20628 { reserved_block , 0 , 0 , 32,
20629 0xfc00ffff, 0xc000973c, 0 , 0,
20630 0x0 }, /* POOL32Sxf_4~*(75) */
20631 { reserved_block , 0 , 0 , 32,
20632 0xfc00ffff, 0xc000993c, 0 , 0,
20633 0x0 }, /* POOL32Sxf_4~*(76) */
20634 { reserved_block , 0 , 0 , 32,
20635 0xfc00ffff, 0xc0009b3c, 0 , 0,
20636 0x0 }, /* POOL32Sxf_4~*(77) */
20637 { reserved_block , 0 , 0 , 32,
20638 0xfc00ffff, 0xc0009d3c, 0 , 0,
20639 0x0 }, /* POOL32Sxf_4~*(78) */
20640 { reserved_block , 0 , 0 , 32,
20641 0xfc00ffff, 0xc0009f3c, 0 , 0,
20642 0x0 }, /* POOL32Sxf_4~*(79) */
20643 { reserved_block , 0 , 0 , 32,
20644 0xfc00ffff, 0xc000a13c, 0 , 0,
20645 0x0 }, /* POOL32Sxf_4~*(80) */
20646 { reserved_block , 0 , 0 , 32,
20647 0xfc00ffff, 0xc000a33c, 0 , 0,
20648 0x0 }, /* POOL32Sxf_4~*(81) */
20649 { reserved_block , 0 , 0 , 32,
20650 0xfc00ffff, 0xc000a53c, 0 , 0,
20651 0x0 }, /* POOL32Sxf_4~*(82) */
20652 { reserved_block , 0 , 0 , 32,
20653 0xfc00ffff, 0xc000a73c, 0 , 0,
20654 0x0 }, /* POOL32Sxf_4~*(83) */
20655 { reserved_block , 0 , 0 , 32,
20656 0xfc00ffff, 0xc000a93c, 0 , 0,
20657 0x0 }, /* POOL32Sxf_4~*(84) */
20658 { reserved_block , 0 , 0 , 32,
20659 0xfc00ffff, 0xc000ab3c, 0 , 0,
20660 0x0 }, /* POOL32Sxf_4~*(85) */
20661 { reserved_block , 0 , 0 , 32,
20662 0xfc00ffff, 0xc000ad3c, 0 , 0,
20663 0x0 }, /* POOL32Sxf_4~*(86) */
20664 { reserved_block , 0 , 0 , 32,
20665 0xfc00ffff, 0xc000af3c, 0 , 0,
20666 0x0 }, /* POOL32Sxf_4~*(87) */
20667 { reserved_block , 0 , 0 , 32,
20668 0xfc00ffff, 0xc000b13c, 0 , 0,
20669 0x0 }, /* POOL32Sxf_4~*(88) */
20670 { reserved_block , 0 , 0 , 32,
20671 0xfc00ffff, 0xc000b33c, 0 , 0,
20672 0x0 }, /* POOL32Sxf_4~*(89) */
20673 { reserved_block , 0 , 0 , 32,
20674 0xfc00ffff, 0xc000b53c, 0 , 0,
20675 0x0 }, /* POOL32Sxf_4~*(90) */
20676 { reserved_block , 0 , 0 , 32,
20677 0xfc00ffff, 0xc000b73c, 0 , 0,
20678 0x0 }, /* POOL32Sxf_4~*(91) */
20679 { reserved_block , 0 , 0 , 32,
20680 0xfc00ffff, 0xc000b93c, 0 , 0,
20681 0x0 }, /* POOL32Sxf_4~*(92) */
20682 { reserved_block , 0 , 0 , 32,
20683 0xfc00ffff, 0xc000bb3c, 0 , 0,
20684 0x0 }, /* POOL32Sxf_4~*(93) */
20685 { reserved_block , 0 , 0 , 32,
20686 0xfc00ffff, 0xc000bd3c, 0 , 0,
20687 0x0 }, /* POOL32Sxf_4~*(94) */
20688 { reserved_block , 0 , 0 , 32,
20689 0xfc00ffff, 0xc000bf3c, 0 , 0,
20690 0x0 }, /* POOL32Sxf_4~*(95) */
20691 { reserved_block , 0 , 0 , 32,
20692 0xfc00ffff, 0xc000c13c, 0 , 0,
20693 0x0 }, /* POOL32Sxf_4~*(96) */
20694 { reserved_block , 0 , 0 , 32,
20695 0xfc00ffff, 0xc000c33c, 0 , 0,
20696 0x0 }, /* POOL32Sxf_4~*(97) */
20697 { reserved_block , 0 , 0 , 32,
20698 0xfc00ffff, 0xc000c53c, 0 , 0,
20699 0x0 }, /* POOL32Sxf_4~*(98) */
20700 { reserved_block , 0 , 0 , 32,
20701 0xfc00ffff, 0xc000c73c, 0 , 0,
20702 0x0 }, /* POOL32Sxf_4~*(99) */
20703 { reserved_block , 0 , 0 , 32,
20704 0xfc00ffff, 0xc000c93c, 0 , 0,
20705 0x0 }, /* POOL32Sxf_4~*(100) */
20706 { reserved_block , 0 , 0 , 32,
20707 0xfc00ffff, 0xc000cb3c, 0 , 0,
20708 0x0 }, /* POOL32Sxf_4~*(101) */
20709 { reserved_block , 0 , 0 , 32,
20710 0xfc00ffff, 0xc000cd3c, 0 , 0,
20711 0x0 }, /* POOL32Sxf_4~*(102) */
20712 { reserved_block , 0 , 0 , 32,
20713 0xfc00ffff, 0xc000cf3c, 0 , 0,
20714 0x0 }, /* POOL32Sxf_4~*(103) */
20715 { reserved_block , 0 , 0 , 32,
20716 0xfc00ffff, 0xc000d13c, 0 , 0,
20717 0x0 }, /* POOL32Sxf_4~*(104) */
20718 { reserved_block , 0 , 0 , 32,
20719 0xfc00ffff, 0xc000d33c, 0 , 0,
20720 0x0 }, /* POOL32Sxf_4~*(105) */
20721 { reserved_block , 0 , 0 , 32,
20722 0xfc00ffff, 0xc000d53c, 0 , 0,
20723 0x0 }, /* POOL32Sxf_4~*(106) */
20724 { reserved_block , 0 , 0 , 32,
20725 0xfc00ffff, 0xc000d73c, 0 , 0,
20726 0x0 }, /* POOL32Sxf_4~*(107) */
20727 { reserved_block , 0 , 0 , 32,
20728 0xfc00ffff, 0xc000d93c, 0 , 0,
20729 0x0 }, /* POOL32Sxf_4~*(108) */
20730 { reserved_block , 0 , 0 , 32,
20731 0xfc00ffff, 0xc000db3c, 0 , 0,
20732 0x0 }, /* POOL32Sxf_4~*(109) */
20733 { reserved_block , 0 , 0 , 32,
20734 0xfc00ffff, 0xc000dd3c, 0 , 0,
20735 0x0 }, /* POOL32Sxf_4~*(110) */
20736 { reserved_block , 0 , 0 , 32,
20737 0xfc00ffff, 0xc000df3c, 0 , 0,
20738 0x0 }, /* POOL32Sxf_4~*(111) */
20739 { reserved_block , 0 , 0 , 32,
20740 0xfc00ffff, 0xc000e13c, 0 , 0,
20741 0x0 }, /* POOL32Sxf_4~*(112) */
20742 { reserved_block , 0 , 0 , 32,
20743 0xfc00ffff, 0xc000e33c, 0 , 0,
20744 0x0 }, /* POOL32Sxf_4~*(113) */
20745 { reserved_block , 0 , 0 , 32,
20746 0xfc00ffff, 0xc000e53c, 0 , 0,
20747 0x0 }, /* POOL32Sxf_4~*(114) */
20748 { reserved_block , 0 , 0 , 32,
20749 0xfc00ffff, 0xc000e73c, 0 , 0,
20750 0x0 }, /* POOL32Sxf_4~*(115) */
20751 { reserved_block , 0 , 0 , 32,
20752 0xfc00ffff, 0xc000e93c, 0 , 0,
20753 0x0 }, /* POOL32Sxf_4~*(116) */
20754 { reserved_block , 0 , 0 , 32,
20755 0xfc00ffff, 0xc000eb3c, 0 , 0,
20756 0x0 }, /* POOL32Sxf_4~*(117) */
20757 { reserved_block , 0 , 0 , 32,
20758 0xfc00ffff, 0xc000ed3c, 0 , 0,
20759 0x0 }, /* POOL32Sxf_4~*(118) */
20760 { reserved_block , 0 , 0 , 32,
20761 0xfc00ffff, 0xc000ef3c, 0 , 0,
20762 0x0 }, /* POOL32Sxf_4~*(119) */
20763 { reserved_block , 0 , 0 , 32,
20764 0xfc00ffff, 0xc000f13c, 0 , 0,
20765 0x0 }, /* POOL32Sxf_4~*(120) */
20766 { reserved_block , 0 , 0 , 32,
20767 0xfc00ffff, 0xc000f33c, 0 , 0,
20768 0x0 }, /* POOL32Sxf_4~*(121) */
20769 { reserved_block , 0 , 0 , 32,
20770 0xfc00ffff, 0xc000f53c, 0 , 0,
20771 0x0 }, /* POOL32Sxf_4~*(122) */
20772 { reserved_block , 0 , 0 , 32,
20773 0xfc00ffff, 0xc000f73c, 0 , 0,
20774 0x0 }, /* POOL32Sxf_4~*(123) */
20775 { reserved_block , 0 , 0 , 32,
20776 0xfc00ffff, 0xc000f93c, 0 , 0,
20777 0x0 }, /* POOL32Sxf_4~*(124) */
20778 { reserved_block , 0 , 0 , 32,
20779 0xfc00ffff, 0xc000fb3c, 0 , 0,
20780 0x0 }, /* POOL32Sxf_4~*(125) */
20781 { reserved_block , 0 , 0 , 32,
20782 0xfc00ffff, 0xc000fd3c, 0 , 0,
20783 0x0 }, /* POOL32Sxf_4~*(126) */
20784 { reserved_block , 0 , 0 , 32,
20785 0xfc00ffff, 0xc000ff3c, 0 , 0,
20786 0x0 }, /* POOL32Sxf_4~*(127) */
20787 };
20788
20789
20790 NMD::Pool NMD::POOL32Sxf[8] = {
20791 { reserved_block , 0 , 0 , 32,
20792 0xfc0001ff, 0xc000003c, 0 , 0,
20793 0x0 }, /* POOL32Sxf~*(0) */
20794 { reserved_block , 0 , 0 , 32,
20795 0xfc0001ff, 0xc000007c, 0 , 0,
20796 0x0 }, /* POOL32Sxf~*(1) */
20797 { reserved_block , 0 , 0 , 32,
20798 0xfc0001ff, 0xc00000bc, 0 , 0,
20799 0x0 }, /* POOL32Sxf~*(2) */
20800 { reserved_block , 0 , 0 , 32,
20801 0xfc0001ff, 0xc00000fc, 0 , 0,
20802 0x0 }, /* POOL32Sxf~*(3) */
20803 { pool , POOL32Sxf_4 , 128 , 32,
20804 0xfc0001ff, 0xc000013c, 0 , 0,
20805 0x0 }, /* POOL32Sxf_4 */
20806 { reserved_block , 0 , 0 , 32,
20807 0xfc0001ff, 0xc000017c, 0 , 0,
20808 0x0 }, /* POOL32Sxf~*(5) */
20809 { reserved_block , 0 , 0 , 32,
20810 0xfc0001ff, 0xc00001bc, 0 , 0,
20811 0x0 }, /* POOL32Sxf~*(6) */
20812 { reserved_block , 0 , 0 , 32,
20813 0xfc0001ff, 0xc00001fc, 0 , 0,
20814 0x0 }, /* POOL32Sxf~*(7) */
20815 };
20816
20817
20818 NMD::Pool NMD::POOL32S_4[8] = {
20819 { instruction , 0 , 0 , 32,
20820 0xfc00003f, 0xc0000004, &NMD::EXTD , 0,
20821 MIPS64_ }, /* EXTD */
20822 { instruction , 0 , 0 , 32,
20823 0xfc00003f, 0xc000000c, &NMD::EXTD32 , 0,
20824 MIPS64_ }, /* EXTD32 */
20825 { reserved_block , 0 , 0 , 32,
20826 0xfc00003f, 0xc0000014, 0 , 0,
20827 0x0 }, /* POOL32S_4~*(2) */
20828 { reserved_block , 0 , 0 , 32,
20829 0xfc00003f, 0xc000001c, 0 , 0,
20830 0x0 }, /* POOL32S_4~*(3) */
20831 { reserved_block , 0 , 0 , 32,
20832 0xfc00003f, 0xc0000024, 0 , 0,
20833 0x0 }, /* POOL32S_4~*(4) */
20834 { reserved_block , 0 , 0 , 32,
20835 0xfc00003f, 0xc000002c, 0 , 0,
20836 0x0 }, /* POOL32S_4~*(5) */
20837 { reserved_block , 0 , 0 , 32,
20838 0xfc00003f, 0xc0000034, 0 , 0,
20839 0x0 }, /* POOL32S_4~*(6) */
20840 { pool , POOL32Sxf , 8 , 32,
20841 0xfc00003f, 0xc000003c, 0 , 0,
20842 0x0 }, /* POOL32Sxf */
20843 };
20844
20845
20846 NMD::Pool NMD::POOL32S[8] = {
20847 { pool , POOL32S_0 , 64 , 32,
20848 0xfc000007, 0xc0000000, 0 , 0,
20849 0x0 }, /* POOL32S_0 */
20850 { reserved_block , 0 , 0 , 32,
20851 0xfc000007, 0xc0000001, 0 , 0,
20852 0x0 }, /* POOL32S~*(1) */
20853 { reserved_block , 0 , 0 , 32,
20854 0xfc000007, 0xc0000002, 0 , 0,
20855 0x0 }, /* POOL32S~*(2) */
20856 { reserved_block , 0 , 0 , 32,
20857 0xfc000007, 0xc0000003, 0 , 0,
20858 0x0 }, /* POOL32S~*(3) */
20859 { pool , POOL32S_4 , 8 , 32,
20860 0xfc000007, 0xc0000004, 0 , 0,
20861 0x0 }, /* POOL32S_4 */
20862 { reserved_block , 0 , 0 , 32,
20863 0xfc000007, 0xc0000005, 0 , 0,
20864 0x0 }, /* POOL32S~*(5) */
20865 { reserved_block , 0 , 0 , 32,
20866 0xfc000007, 0xc0000006, 0 , 0,
20867 0x0 }, /* POOL32S~*(6) */
20868 { reserved_block , 0 , 0 , 32,
20869 0xfc000007, 0xc0000007, 0 , 0,
20870 0x0 }, /* POOL32S~*(7) */
20871 };
20872
20873
20874 NMD::Pool NMD::P_LUI[2] = {
20875 { instruction , 0 , 0 , 32,
20876 0xfc000002, 0xe0000000, &NMD::LUI , 0,
20877 0x0 }, /* LUI */
20878 { instruction , 0 , 0 , 32,
20879 0xfc000002, 0xe0000002, &NMD::ALUIPC , 0,
20880 0x0 }, /* ALUIPC */
20881 };
20882
20883
20884 NMD::Pool NMD::P_GP_LH[2] = {
20885 { instruction , 0 , 0 , 32,
20886 0xfc1c0001, 0x44100000, &NMD::LH_GP_ , 0,
20887 0x0 }, /* LH[GP] */
20888 { instruction , 0 , 0 , 32,
20889 0xfc1c0001, 0x44100001, &NMD::LHU_GP_ , 0,
20890 0x0 }, /* LHU[GP] */
20891 };
20892
20893
20894 NMD::Pool NMD::P_GP_SH[2] = {
20895 { instruction , 0 , 0 , 32,
20896 0xfc1c0001, 0x44140000, &NMD::SH_GP_ , 0,
20897 0x0 }, /* SH[GP] */
20898 { reserved_block , 0 , 0 , 32,
20899 0xfc1c0001, 0x44140001, 0 , 0,
20900 0x0 }, /* P.GP.SH~*(1) */
20901 };
20902
20903
20904 NMD::Pool NMD::P_GP_CP1[4] = {
20905 { instruction , 0 , 0 , 32,
20906 0xfc1c0003, 0x44180000, &NMD::LWC1_GP_ , 0,
20907 CP1_ }, /* LWC1[GP] */
20908 { instruction , 0 , 0 , 32,
20909 0xfc1c0003, 0x44180001, &NMD::SWC1_GP_ , 0,
20910 CP1_ }, /* SWC1[GP] */
20911 { instruction , 0 , 0 , 32,
20912 0xfc1c0003, 0x44180002, &NMD::LDC1_GP_ , 0,
20913 CP1_ }, /* LDC1[GP] */
20914 { instruction , 0 , 0 , 32,
20915 0xfc1c0003, 0x44180003, &NMD::SDC1_GP_ , 0,
20916 CP1_ }, /* SDC1[GP] */
20917 };
20918
20919
20920 NMD::Pool NMD::P_GP_M64[4] = {
20921 { instruction , 0 , 0 , 32,
20922 0xfc1c0003, 0x441c0000, &NMD::LWU_GP_ , 0,
20923 MIPS64_ }, /* LWU[GP] */
20924 { reserved_block , 0 , 0 , 32,
20925 0xfc1c0003, 0x441c0001, 0 , 0,
20926 0x0 }, /* P.GP.M64~*(1) */
20927 { reserved_block , 0 , 0 , 32,
20928 0xfc1c0003, 0x441c0002, 0 , 0,
20929 0x0 }, /* P.GP.M64~*(2) */
20930 { reserved_block , 0 , 0 , 32,
20931 0xfc1c0003, 0x441c0003, 0 , 0,
20932 0x0 }, /* P.GP.M64~*(3) */
20933 };
20934
20935
20936 NMD::Pool NMD::P_GP_BH[8] = {
20937 { instruction , 0 , 0 , 32,
20938 0xfc1c0000, 0x44000000, &NMD::LB_GP_ , 0,
20939 0x0 }, /* LB[GP] */
20940 { instruction , 0 , 0 , 32,
20941 0xfc1c0000, 0x44040000, &NMD::SB_GP_ , 0,
20942 0x0 }, /* SB[GP] */
20943 { instruction , 0 , 0 , 32,
20944 0xfc1c0000, 0x44080000, &NMD::LBU_GP_ , 0,
20945 0x0 }, /* LBU[GP] */
20946 { instruction , 0 , 0 , 32,
20947 0xfc1c0000, 0x440c0000, &NMD::ADDIU_GP_B_ , 0,
20948 0x0 }, /* ADDIU[GP.B] */
20949 { pool , P_GP_LH , 2 , 32,
20950 0xfc1c0000, 0x44100000, 0 , 0,
20951 0x0 }, /* P.GP.LH */
20952 { pool , P_GP_SH , 2 , 32,
20953 0xfc1c0000, 0x44140000, 0 , 0,
20954 0x0 }, /* P.GP.SH */
20955 { pool , P_GP_CP1 , 4 , 32,
20956 0xfc1c0000, 0x44180000, 0 , 0,
20957 0x0 }, /* P.GP.CP1 */
20958 { pool , P_GP_M64 , 4 , 32,
20959 0xfc1c0000, 0x441c0000, 0 , 0,
20960 0x0 }, /* P.GP.M64 */
20961 };
20962
20963
20964 NMD::Pool NMD::P_LS_U12[16] = {
20965 { instruction , 0 , 0 , 32,
20966 0xfc00f000, 0x84000000, &NMD::LB_U12_ , 0,
20967 0x0 }, /* LB[U12] */
20968 { instruction , 0 , 0 , 32,
20969 0xfc00f000, 0x84001000, &NMD::SB_U12_ , 0,
20970 0x0 }, /* SB[U12] */
20971 { instruction , 0 , 0 , 32,
20972 0xfc00f000, 0x84002000, &NMD::LBU_U12_ , 0,
20973 0x0 }, /* LBU[U12] */
20974 { instruction , 0 , 0 , 32,
20975 0xfc00f000, 0x84003000, &NMD::PREF_U12_ , 0,
20976 0x0 }, /* PREF[U12] */
20977 { instruction , 0 , 0 , 32,
20978 0xfc00f000, 0x84004000, &NMD::LH_U12_ , 0,
20979 0x0 }, /* LH[U12] */
20980 { instruction , 0 , 0 , 32,
20981 0xfc00f000, 0x84005000, &NMD::SH_U12_ , 0,
20982 0x0 }, /* SH[U12] */
20983 { instruction , 0 , 0 , 32,
20984 0xfc00f000, 0x84006000, &NMD::LHU_U12_ , 0,
20985 0x0 }, /* LHU[U12] */
20986 { instruction , 0 , 0 , 32,
20987 0xfc00f000, 0x84007000, &NMD::LWU_U12_ , 0,
20988 MIPS64_ }, /* LWU[U12] */
20989 { instruction , 0 , 0 , 32,
20990 0xfc00f000, 0x84008000, &NMD::LW_U12_ , 0,
20991 0x0 }, /* LW[U12] */
20992 { instruction , 0 , 0 , 32,
20993 0xfc00f000, 0x84009000, &NMD::SW_U12_ , 0,
20994 0x0 }, /* SW[U12] */
20995 { instruction , 0 , 0 , 32,
20996 0xfc00f000, 0x8400a000, &NMD::LWC1_U12_ , 0,
20997 CP1_ }, /* LWC1[U12] */
20998 { instruction , 0 , 0 , 32,
20999 0xfc00f000, 0x8400b000, &NMD::SWC1_U12_ , 0,
21000 CP1_ }, /* SWC1[U12] */
21001 { instruction , 0 , 0 , 32,
21002 0xfc00f000, 0x8400c000, &NMD::LD_U12_ , 0,
21003 MIPS64_ }, /* LD[U12] */
21004 { instruction , 0 , 0 , 32,
21005 0xfc00f000, 0x8400d000, &NMD::SD_U12_ , 0,
21006 MIPS64_ }, /* SD[U12] */
21007 { instruction , 0 , 0 , 32,
21008 0xfc00f000, 0x8400e000, &NMD::LDC1_U12_ , 0,
21009 CP1_ }, /* LDC1[U12] */
21010 { instruction , 0 , 0 , 32,
21011 0xfc00f000, 0x8400f000, &NMD::SDC1_U12_ , 0,
21012 CP1_ }, /* SDC1[U12] */
21013 };
21014
21015
21016 NMD::Pool NMD::P_PREF_S9_[2] = {
21017 { instruction , 0 , 0 , 32,
21018 0xffe07f00, 0xa7e01800, &NMD::SYNCI , 0,
21019 0x0 }, /* SYNCI */
21020 { instruction , 0 , 0 , 32,
21021 0xfc007f00, 0xa4001800, &NMD::PREF_S9_ , &NMD::PREF_S9__cond ,
21022 0x0 }, /* PREF[S9] */
21023 };
21024
21025
21026 NMD::Pool NMD::P_LS_S0[16] = {
21027 { instruction , 0 , 0 , 32,
21028 0xfc007f00, 0xa4000000, &NMD::LB_S9_ , 0,
21029 0x0 }, /* LB[S9] */
21030 { instruction , 0 , 0 , 32,
21031 0xfc007f00, 0xa4000800, &NMD::SB_S9_ , 0,
21032 0x0 }, /* SB[S9] */
21033 { instruction , 0 , 0 , 32,
21034 0xfc007f00, 0xa4001000, &NMD::LBU_S9_ , 0,
21035 0x0 }, /* LBU[S9] */
21036 { pool , P_PREF_S9_ , 2 , 32,
21037 0xfc007f00, 0xa4001800, 0 , 0,
21038 0x0 }, /* P.PREF[S9] */
21039 { instruction , 0 , 0 , 32,
21040 0xfc007f00, 0xa4002000, &NMD::LH_S9_ , 0,
21041 0x0 }, /* LH[S9] */
21042 { instruction , 0 , 0 , 32,
21043 0xfc007f00, 0xa4002800, &NMD::SH_S9_ , 0,
21044 0x0 }, /* SH[S9] */
21045 { instruction , 0 , 0 , 32,
21046 0xfc007f00, 0xa4003000, &NMD::LHU_S9_ , 0,
21047 0x0 }, /* LHU[S9] */
21048 { instruction , 0 , 0 , 32,
21049 0xfc007f00, 0xa4003800, &NMD::LWU_S9_ , 0,
21050 MIPS64_ }, /* LWU[S9] */
21051 { instruction , 0 , 0 , 32,
21052 0xfc007f00, 0xa4004000, &NMD::LW_S9_ , 0,
21053 0x0 }, /* LW[S9] */
21054 { instruction , 0 , 0 , 32,
21055 0xfc007f00, 0xa4004800, &NMD::SW_S9_ , 0,
21056 0x0 }, /* SW[S9] */
21057 { instruction , 0 , 0 , 32,
21058 0xfc007f00, 0xa4005000, &NMD::LWC1_S9_ , 0,
21059 CP1_ }, /* LWC1[S9] */
21060 { instruction , 0 , 0 , 32,
21061 0xfc007f00, 0xa4005800, &NMD::SWC1_S9_ , 0,
21062 CP1_ }, /* SWC1[S9] */
21063 { instruction , 0 , 0 , 32,
21064 0xfc007f00, 0xa4006000, &NMD::LD_S9_ , 0,
21065 MIPS64_ }, /* LD[S9] */
21066 { instruction , 0 , 0 , 32,
21067 0xfc007f00, 0xa4006800, &NMD::SD_S9_ , 0,
21068 MIPS64_ }, /* SD[S9] */
21069 { instruction , 0 , 0 , 32,
21070 0xfc007f00, 0xa4007000, &NMD::LDC1_S9_ , 0,
21071 CP1_ }, /* LDC1[S9] */
21072 { instruction , 0 , 0 , 32,
21073 0xfc007f00, 0xa4007800, &NMD::SDC1_S9_ , 0,
21074 CP1_ }, /* SDC1[S9] */
21075 };
21076
21077
21078 NMD::Pool NMD::ASET_ACLR[2] = {
21079 { instruction , 0 , 0 , 32,
21080 0xfe007f00, 0xa4001100, &NMD::ASET , 0,
21081 MCU_ }, /* ASET */
21082 { instruction , 0 , 0 , 32,
21083 0xfe007f00, 0xa6001100, &NMD::ACLR , 0,
21084 MCU_ }, /* ACLR */
21085 };
21086
21087
21088 NMD::Pool NMD::P_LL[4] = {
21089 { instruction , 0 , 0 , 32,
21090 0xfc007f03, 0xa4005100, &NMD::LL , 0,
21091 0x0 }, /* LL */
21092 { instruction , 0 , 0 , 32,
21093 0xfc007f03, 0xa4005101, &NMD::LLWP , 0,
21094 XNP_ }, /* LLWP */
21095 { reserved_block , 0 , 0 , 32,
21096 0xfc007f03, 0xa4005102, 0 , 0,
21097 0x0 }, /* P.LL~*(2) */
21098 { reserved_block , 0 , 0 , 32,
21099 0xfc007f03, 0xa4005103, 0 , 0,
21100 0x0 }, /* P.LL~*(3) */
21101 };
21102
21103
21104 NMD::Pool NMD::P_SC[4] = {
21105 { instruction , 0 , 0 , 32,
21106 0xfc007f03, 0xa4005900, &NMD::SC , 0,
21107 0x0 }, /* SC */
21108 { instruction , 0 , 0 , 32,
21109 0xfc007f03, 0xa4005901, &NMD::SCWP , 0,
21110 XNP_ }, /* SCWP */
21111 { reserved_block , 0 , 0 , 32,
21112 0xfc007f03, 0xa4005902, 0 , 0,
21113 0x0 }, /* P.SC~*(2) */
21114 { reserved_block , 0 , 0 , 32,
21115 0xfc007f03, 0xa4005903, 0 , 0,
21116 0x0 }, /* P.SC~*(3) */
21117 };
21118
21119
21120 NMD::Pool NMD::P_LLD[8] = {
21121 { instruction , 0 , 0 , 32,
21122 0xfc007f07, 0xa4007100, &NMD::LLD , 0,
21123 MIPS64_ }, /* LLD */
21124 { instruction , 0 , 0 , 32,
21125 0xfc007f07, 0xa4007101, &NMD::LLDP , 0,
21126 MIPS64_ }, /* LLDP */
21127 { reserved_block , 0 , 0 , 32,
21128 0xfc007f07, 0xa4007102, 0 , 0,
21129 0x0 }, /* P.LLD~*(2) */
21130 { reserved_block , 0 , 0 , 32,
21131 0xfc007f07, 0xa4007103, 0 , 0,
21132 0x0 }, /* P.LLD~*(3) */
21133 { reserved_block , 0 , 0 , 32,
21134 0xfc007f07, 0xa4007104, 0 , 0,
21135 0x0 }, /* P.LLD~*(4) */
21136 { reserved_block , 0 , 0 , 32,
21137 0xfc007f07, 0xa4007105, 0 , 0,
21138 0x0 }, /* P.LLD~*(5) */
21139 { reserved_block , 0 , 0 , 32,
21140 0xfc007f07, 0xa4007106, 0 , 0,
21141 0x0 }, /* P.LLD~*(6) */
21142 { reserved_block , 0 , 0 , 32,
21143 0xfc007f07, 0xa4007107, 0 , 0,
21144 0x0 }, /* P.LLD~*(7) */
21145 };
21146
21147
21148 NMD::Pool NMD::P_SCD[8] = {
21149 { instruction , 0 , 0 , 32,
21150 0xfc007f07, 0xa4007900, &NMD::SCD , 0,
21151 MIPS64_ }, /* SCD */
21152 { instruction , 0 , 0 , 32,
21153 0xfc007f07, 0xa4007901, &NMD::SCDP , 0,
21154 MIPS64_ }, /* SCDP */
21155 { reserved_block , 0 , 0 , 32,
21156 0xfc007f07, 0xa4007902, 0 , 0,
21157 0x0 }, /* P.SCD~*(2) */
21158 { reserved_block , 0 , 0 , 32,
21159 0xfc007f07, 0xa4007903, 0 , 0,
21160 0x0 }, /* P.SCD~*(3) */
21161 { reserved_block , 0 , 0 , 32,
21162 0xfc007f07, 0xa4007904, 0 , 0,
21163 0x0 }, /* P.SCD~*(4) */
21164 { reserved_block , 0 , 0 , 32,
21165 0xfc007f07, 0xa4007905, 0 , 0,
21166 0x0 }, /* P.SCD~*(5) */
21167 { reserved_block , 0 , 0 , 32,
21168 0xfc007f07, 0xa4007906, 0 , 0,
21169 0x0 }, /* P.SCD~*(6) */
21170 { reserved_block , 0 , 0 , 32,
21171 0xfc007f07, 0xa4007907, 0 , 0,
21172 0x0 }, /* P.SCD~*(7) */
21173 };
21174
21175
21176 NMD::Pool NMD::P_LS_S1[16] = {
21177 { reserved_block , 0 , 0 , 32,
21178 0xfc007f00, 0xa4000100, 0 , 0,
21179 0x0 }, /* P.LS.S1~*(0) */
21180 { reserved_block , 0 , 0 , 32,
21181 0xfc007f00, 0xa4000900, 0 , 0,
21182 0x0 }, /* P.LS.S1~*(1) */
21183 { pool , ASET_ACLR , 2 , 32,
21184 0xfc007f00, 0xa4001100, 0 , 0,
21185 0x0 }, /* ASET_ACLR */
21186 { reserved_block , 0 , 0 , 32,
21187 0xfc007f00, 0xa4001900, 0 , 0,
21188 0x0 }, /* P.LS.S1~*(3) */
21189 { instruction , 0 , 0 , 32,
21190 0xfc007f00, 0xa4002100, &NMD::UALH , 0,
21191 XMMS_ }, /* UALH */
21192 { instruction , 0 , 0 , 32,
21193 0xfc007f00, 0xa4002900, &NMD::UASH , 0,
21194 XMMS_ }, /* UASH */
21195 { reserved_block , 0 , 0 , 32,
21196 0xfc007f00, 0xa4003100, 0 , 0,
21197 0x0 }, /* P.LS.S1~*(6) */
21198 { instruction , 0 , 0 , 32,
21199 0xfc007f00, 0xa4003900, &NMD::CACHE , 0,
21200 CP0_ }, /* CACHE */
21201 { instruction , 0 , 0 , 32,
21202 0xfc007f00, 0xa4004100, &NMD::LWC2 , 0,
21203 CP2_ }, /* LWC2 */
21204 { instruction , 0 , 0 , 32,
21205 0xfc007f00, 0xa4004900, &NMD::SWC2 , 0,
21206 CP2_ }, /* SWC2 */
21207 { pool , P_LL , 4 , 32,
21208 0xfc007f00, 0xa4005100, 0 , 0,
21209 0x0 }, /* P.LL */
21210 { pool , P_SC , 4 , 32,
21211 0xfc007f00, 0xa4005900, 0 , 0,
21212 0x0 }, /* P.SC */
21213 { instruction , 0 , 0 , 32,
21214 0xfc007f00, 0xa4006100, &NMD::LDC2 , 0,
21215 CP2_ }, /* LDC2 */
21216 { instruction , 0 , 0 , 32,
21217 0xfc007f00, 0xa4006900, &NMD::SDC2 , 0,
21218 CP2_ }, /* SDC2 */
21219 { pool , P_LLD , 8 , 32,
21220 0xfc007f00, 0xa4007100, 0 , 0,
21221 0x0 }, /* P.LLD */
21222 { pool , P_SCD , 8 , 32,
21223 0xfc007f00, 0xa4007900, 0 , 0,
21224 0x0 }, /* P.SCD */
21225 };
21226
21227
21228 NMD::Pool NMD::P_PREFE[2] = {
21229 { instruction , 0 , 0 , 32,
21230 0xffe07f00, 0xa7e01a00, &NMD::SYNCIE , 0,
21231 CP0_ | EVA_ }, /* SYNCIE */
21232 { instruction , 0 , 0 , 32,
21233 0xfc007f00, 0xa4001a00, &NMD::PREFE , &NMD::PREFE_cond ,
21234 CP0_ | EVA_ }, /* PREFE */
21235 };
21236
21237
21238 NMD::Pool NMD::P_LLE[4] = {
21239 { instruction , 0 , 0 , 32,
21240 0xfc007f03, 0xa4005200, &NMD::LLE , 0,
21241 CP0_ | EVA_ }, /* LLE */
21242 { instruction , 0 , 0 , 32,
21243 0xfc007f03, 0xa4005201, &NMD::LLWPE , 0,
21244 CP0_ | EVA_ }, /* LLWPE */
21245 { reserved_block , 0 , 0 , 32,
21246 0xfc007f03, 0xa4005202, 0 , 0,
21247 0x0 }, /* P.LLE~*(2) */
21248 { reserved_block , 0 , 0 , 32,
21249 0xfc007f03, 0xa4005203, 0 , 0,
21250 0x0 }, /* P.LLE~*(3) */
21251 };
21252
21253
21254 NMD::Pool NMD::P_SCE[4] = {
21255 { instruction , 0 , 0 , 32,
21256 0xfc007f03, 0xa4005a00, &NMD::SCE , 0,
21257 CP0_ | EVA_ }, /* SCE */
21258 { instruction , 0 , 0 , 32,
21259 0xfc007f03, 0xa4005a01, &NMD::SCWPE , 0,
21260 CP0_ | EVA_ }, /* SCWPE */
21261 { reserved_block , 0 , 0 , 32,
21262 0xfc007f03, 0xa4005a02, 0 , 0,
21263 0x0 }, /* P.SCE~*(2) */
21264 { reserved_block , 0 , 0 , 32,
21265 0xfc007f03, 0xa4005a03, 0 , 0,
21266 0x0 }, /* P.SCE~*(3) */
21267 };
21268
21269
21270 NMD::Pool NMD::P_LS_E0[16] = {
21271 { instruction , 0 , 0 , 32,
21272 0xfc007f00, 0xa4000200, &NMD::LBE , 0,
21273 CP0_ | EVA_ }, /* LBE */
21274 { instruction , 0 , 0 , 32,
21275 0xfc007f00, 0xa4000a00, &NMD::SBE , 0,
21276 CP0_ | EVA_ }, /* SBE */
21277 { instruction , 0 , 0 , 32,
21278 0xfc007f00, 0xa4001200, &NMD::LBUE , 0,
21279 CP0_ | EVA_ }, /* LBUE */
21280 { pool , P_PREFE , 2 , 32,
21281 0xfc007f00, 0xa4001a00, 0 , 0,
21282 0x0 }, /* P.PREFE */
21283 { instruction , 0 , 0 , 32,
21284 0xfc007f00, 0xa4002200, &NMD::LHE , 0,
21285 CP0_ | EVA_ }, /* LHE */
21286 { instruction , 0 , 0 , 32,
21287 0xfc007f00, 0xa4002a00, &NMD::SHE , 0,
21288 CP0_ | EVA_ }, /* SHE */
21289 { instruction , 0 , 0 , 32,
21290 0xfc007f00, 0xa4003200, &NMD::LHUE , 0,
21291 CP0_ | EVA_ }, /* LHUE */
21292 { instruction , 0 , 0 , 32,
21293 0xfc007f00, 0xa4003a00, &NMD::CACHEE , 0,
21294 CP0_ | EVA_ }, /* CACHEE */
21295 { instruction , 0 , 0 , 32,
21296 0xfc007f00, 0xa4004200, &NMD::LWE , 0,
21297 CP0_ | EVA_ }, /* LWE */
21298 { instruction , 0 , 0 , 32,
21299 0xfc007f00, 0xa4004a00, &NMD::SWE , 0,
21300 CP0_ | EVA_ }, /* SWE */
21301 { pool , P_LLE , 4 , 32,
21302 0xfc007f00, 0xa4005200, 0 , 0,
21303 0x0 }, /* P.LLE */
21304 { pool , P_SCE , 4 , 32,
21305 0xfc007f00, 0xa4005a00, 0 , 0,
21306 0x0 }, /* P.SCE */
21307 { reserved_block , 0 , 0 , 32,
21308 0xfc007f00, 0xa4006200, 0 , 0,
21309 0x0 }, /* P.LS.E0~*(12) */
21310 { reserved_block , 0 , 0 , 32,
21311 0xfc007f00, 0xa4006a00, 0 , 0,
21312 0x0 }, /* P.LS.E0~*(13) */
21313 { reserved_block , 0 , 0 , 32,
21314 0xfc007f00, 0xa4007200, 0 , 0,
21315 0x0 }, /* P.LS.E0~*(14) */
21316 { reserved_block , 0 , 0 , 32,
21317 0xfc007f00, 0xa4007a00, 0 , 0,
21318 0x0 }, /* P.LS.E0~*(15) */
21319 };
21320
21321
21322 NMD::Pool NMD::P_LS_WM[2] = {
21323 { instruction , 0 , 0 , 32,
21324 0xfc000f00, 0xa4000400, &NMD::LWM , 0,
21325 XMMS_ }, /* LWM */
21326 { instruction , 0 , 0 , 32,
21327 0xfc000f00, 0xa4000c00, &NMD::SWM , 0,
21328 XMMS_ }, /* SWM */
21329 };
21330
21331
21332 NMD::Pool NMD::P_LS_UAWM[2] = {
21333 { instruction , 0 , 0 , 32,
21334 0xfc000f00, 0xa4000500, &NMD::UALWM , 0,
21335 XMMS_ }, /* UALWM */
21336 { instruction , 0 , 0 , 32,
21337 0xfc000f00, 0xa4000d00, &NMD::UASWM , 0,
21338 XMMS_ }, /* UASWM */
21339 };
21340
21341
21342 NMD::Pool NMD::P_LS_DM[2] = {
21343 { instruction , 0 , 0 , 32,
21344 0xfc000f00, 0xa4000600, &NMD::LDM , 0,
21345 MIPS64_ }, /* LDM */
21346 { instruction , 0 , 0 , 32,
21347 0xfc000f00, 0xa4000e00, &NMD::SDM , 0,
21348 MIPS64_ }, /* SDM */
21349 };
21350
21351
21352 NMD::Pool NMD::P_LS_UADM[2] = {
21353 { instruction , 0 , 0 , 32,
21354 0xfc000f00, 0xa4000700, &NMD::UALDM , 0,
21355 MIPS64_ }, /* UALDM */
21356 { instruction , 0 , 0 , 32,
21357 0xfc000f00, 0xa4000f00, &NMD::UASDM , 0,
21358 MIPS64_ }, /* UASDM */
21359 };
21360
21361
21362 NMD::Pool NMD::P_LS_S9[8] = {
21363 { pool , P_LS_S0 , 16 , 32,
21364 0xfc000700, 0xa4000000, 0 , 0,
21365 0x0 }, /* P.LS.S0 */
21366 { pool , P_LS_S1 , 16 , 32,
21367 0xfc000700, 0xa4000100, 0 , 0,
21368 0x0 }, /* P.LS.S1 */
21369 { pool , P_LS_E0 , 16 , 32,
21370 0xfc000700, 0xa4000200, 0 , 0,
21371 0x0 }, /* P.LS.E0 */
21372 { reserved_block , 0 , 0 , 32,
21373 0xfc000700, 0xa4000300, 0 , 0,
21374 0x0 }, /* P.LS.S9~*(3) */
21375 { pool , P_LS_WM , 2 , 32,
21376 0xfc000700, 0xa4000400, 0 , 0,
21377 0x0 }, /* P.LS.WM */
21378 { pool , P_LS_UAWM , 2 , 32,
21379 0xfc000700, 0xa4000500, 0 , 0,
21380 0x0 }, /* P.LS.UAWM */
21381 { pool , P_LS_DM , 2 , 32,
21382 0xfc000700, 0xa4000600, 0 , 0,
21383 0x0 }, /* P.LS.DM */
21384 { pool , P_LS_UADM , 2 , 32,
21385 0xfc000700, 0xa4000700, 0 , 0,
21386 0x0 }, /* P.LS.UADM */
21387 };
21388
21389
21390 NMD::Pool NMD::P_BAL[2] = {
21391 { branch_instruction , 0 , 0 , 32,
21392 0xfe000000, 0x28000000, &NMD::BC_32_ , 0,
21393 0x0 }, /* BC[32] */
21394 { call_instruction , 0 , 0 , 32,
21395 0xfe000000, 0x2a000000, &NMD::BALC_32_ , 0,
21396 0x0 }, /* BALC[32] */
21397 };
21398
21399
21400 NMD::Pool NMD::P_BALRSC[2] = {
21401 { branch_instruction , 0 , 0 , 32,
21402 0xffe0f000, 0x48008000, &NMD::BRSC , 0,
21403 0x0 }, /* BRSC */
21404 { call_instruction , 0 , 0 , 32,
21405 0xfc00f000, 0x48008000, &NMD::BALRSC , &NMD::BALRSC_cond ,
21406 0x0 }, /* BALRSC */
21407 };
21408
21409
21410 NMD::Pool NMD::P_J[16] = {
21411 { call_instruction , 0 , 0 , 32,
21412 0xfc00f000, 0x48000000, &NMD::JALRC_32_ , 0,
21413 0x0 }, /* JALRC[32] */
21414 { call_instruction , 0 , 0 , 32,
21415 0xfc00f000, 0x48001000, &NMD::JALRC_HB , 0,
21416 0x0 }, /* JALRC.HB */
21417 { reserved_block , 0 , 0 , 32,
21418 0xfc00f000, 0x48002000, 0 , 0,
21419 0x0 }, /* P.J~*(2) */
21420 { reserved_block , 0 , 0 , 32,
21421 0xfc00f000, 0x48003000, 0 , 0,
21422 0x0 }, /* P.J~*(3) */
21423 { reserved_block , 0 , 0 , 32,
21424 0xfc00f000, 0x48004000, 0 , 0,
21425 0x0 }, /* P.J~*(4) */
21426 { reserved_block , 0 , 0 , 32,
21427 0xfc00f000, 0x48005000, 0 , 0,
21428 0x0 }, /* P.J~*(5) */
21429 { reserved_block , 0 , 0 , 32,
21430 0xfc00f000, 0x48006000, 0 , 0,
21431 0x0 }, /* P.J~*(6) */
21432 { reserved_block , 0 , 0 , 32,
21433 0xfc00f000, 0x48007000, 0 , 0,
21434 0x0 }, /* P.J~*(7) */
21435 { pool , P_BALRSC , 2 , 32,
21436 0xfc00f000, 0x48008000, 0 , 0,
21437 0x0 }, /* P.BALRSC */
21438 { reserved_block , 0 , 0 , 32,
21439 0xfc00f000, 0x48009000, 0 , 0,
21440 0x0 }, /* P.J~*(9) */
21441 { reserved_block , 0 , 0 , 32,
21442 0xfc00f000, 0x4800a000, 0 , 0,
21443 0x0 }, /* P.J~*(10) */
21444 { reserved_block , 0 , 0 , 32,
21445 0xfc00f000, 0x4800b000, 0 , 0,
21446 0x0 }, /* P.J~*(11) */
21447 { reserved_block , 0 , 0 , 32,
21448 0xfc00f000, 0x4800c000, 0 , 0,
21449 0x0 }, /* P.J~*(12) */
21450 { reserved_block , 0 , 0 , 32,
21451 0xfc00f000, 0x4800d000, 0 , 0,
21452 0x0 }, /* P.J~*(13) */
21453 { reserved_block , 0 , 0 , 32,
21454 0xfc00f000, 0x4800e000, 0 , 0,
21455 0x0 }, /* P.J~*(14) */
21456 { reserved_block , 0 , 0 , 32,
21457 0xfc00f000, 0x4800f000, 0 , 0,
21458 0x0 }, /* P.J~*(15) */
21459 };
21460
21461
21462 NMD::Pool NMD::P_BR3A[32] = {
21463 { branch_instruction , 0 , 0 , 32,
21464 0xfc1fc000, 0x88004000, &NMD::BC1EQZC , 0,
21465 CP1_ }, /* BC1EQZC */
21466 { branch_instruction , 0 , 0 , 32,
21467 0xfc1fc000, 0x88014000, &NMD::BC1NEZC , 0,
21468 CP1_ }, /* BC1NEZC */
21469 { branch_instruction , 0 , 0 , 32,
21470 0xfc1fc000, 0x88024000, &NMD::BC2EQZC , 0,
21471 CP2_ }, /* BC2EQZC */
21472 { branch_instruction , 0 , 0 , 32,
21473 0xfc1fc000, 0x88034000, &NMD::BC2NEZC , 0,
21474 CP2_ }, /* BC2NEZC */
21475 { branch_instruction , 0 , 0 , 32,
21476 0xfc1fc000, 0x88044000, &NMD::BPOSGE32C , 0,
21477 DSP_ }, /* BPOSGE32C */
21478 { reserved_block , 0 , 0 , 32,
21479 0xfc1fc000, 0x88054000, 0 , 0,
21480 0x0 }, /* P.BR3A~*(5) */
21481 { reserved_block , 0 , 0 , 32,
21482 0xfc1fc000, 0x88064000, 0 , 0,
21483 0x0 }, /* P.BR3A~*(6) */
21484 { reserved_block , 0 , 0 , 32,
21485 0xfc1fc000, 0x88074000, 0 , 0,
21486 0x0 }, /* P.BR3A~*(7) */
21487 { reserved_block , 0 , 0 , 32,
21488 0xfc1fc000, 0x88084000, 0 , 0,
21489 0x0 }, /* P.BR3A~*(8) */
21490 { reserved_block , 0 , 0 , 32,
21491 0xfc1fc000, 0x88094000, 0 , 0,
21492 0x0 }, /* P.BR3A~*(9) */
21493 { reserved_block , 0 , 0 , 32,
21494 0xfc1fc000, 0x880a4000, 0 , 0,
21495 0x0 }, /* P.BR3A~*(10) */
21496 { reserved_block , 0 , 0 , 32,
21497 0xfc1fc000, 0x880b4000, 0 , 0,
21498 0x0 }, /* P.BR3A~*(11) */
21499 { reserved_block , 0 , 0 , 32,
21500 0xfc1fc000, 0x880c4000, 0 , 0,
21501 0x0 }, /* P.BR3A~*(12) */
21502 { reserved_block , 0 , 0 , 32,
21503 0xfc1fc000, 0x880d4000, 0 , 0,
21504 0x0 }, /* P.BR3A~*(13) */
21505 { reserved_block , 0 , 0 , 32,
21506 0xfc1fc000, 0x880e4000, 0 , 0,
21507 0x0 }, /* P.BR3A~*(14) */
21508 { reserved_block , 0 , 0 , 32,
21509 0xfc1fc000, 0x880f4000, 0 , 0,
21510 0x0 }, /* P.BR3A~*(15) */
21511 { reserved_block , 0 , 0 , 32,
21512 0xfc1fc000, 0x88104000, 0 , 0,
21513 0x0 }, /* P.BR3A~*(16) */
21514 { reserved_block , 0 , 0 , 32,
21515 0xfc1fc000, 0x88114000, 0 , 0,
21516 0x0 }, /* P.BR3A~*(17) */
21517 { reserved_block , 0 , 0 , 32,
21518 0xfc1fc000, 0x88124000, 0 , 0,
21519 0x0 }, /* P.BR3A~*(18) */
21520 { reserved_block , 0 , 0 , 32,
21521 0xfc1fc000, 0x88134000, 0 , 0,
21522 0x0 }, /* P.BR3A~*(19) */
21523 { reserved_block , 0 , 0 , 32,
21524 0xfc1fc000, 0x88144000, 0 , 0,
21525 0x0 }, /* P.BR3A~*(20) */
21526 { reserved_block , 0 , 0 , 32,
21527 0xfc1fc000, 0x88154000, 0 , 0,
21528 0x0 }, /* P.BR3A~*(21) */
21529 { reserved_block , 0 , 0 , 32,
21530 0xfc1fc000, 0x88164000, 0 , 0,
21531 0x0 }, /* P.BR3A~*(22) */
21532 { reserved_block , 0 , 0 , 32,
21533 0xfc1fc000, 0x88174000, 0 , 0,
21534 0x0 }, /* P.BR3A~*(23) */
21535 { reserved_block , 0 , 0 , 32,
21536 0xfc1fc000, 0x88184000, 0 , 0,
21537 0x0 }, /* P.BR3A~*(24) */
21538 { reserved_block , 0 , 0 , 32,
21539 0xfc1fc000, 0x88194000, 0 , 0,
21540 0x0 }, /* P.BR3A~*(25) */
21541 { reserved_block , 0 , 0 , 32,
21542 0xfc1fc000, 0x881a4000, 0 , 0,
21543 0x0 }, /* P.BR3A~*(26) */
21544 { reserved_block , 0 , 0 , 32,
21545 0xfc1fc000, 0x881b4000, 0 , 0,
21546 0x0 }, /* P.BR3A~*(27) */
21547 { reserved_block , 0 , 0 , 32,
21548 0xfc1fc000, 0x881c4000, 0 , 0,
21549 0x0 }, /* P.BR3A~*(28) */
21550 { reserved_block , 0 , 0 , 32,
21551 0xfc1fc000, 0x881d4000, 0 , 0,
21552 0x0 }, /* P.BR3A~*(29) */
21553 { reserved_block , 0 , 0 , 32,
21554 0xfc1fc000, 0x881e4000, 0 , 0,
21555 0x0 }, /* P.BR3A~*(30) */
21556 { reserved_block , 0 , 0 , 32,
21557 0xfc1fc000, 0x881f4000, 0 , 0,
21558 0x0 }, /* P.BR3A~*(31) */
21559 };
21560
21561
21562 NMD::Pool NMD::P_BR1[4] = {
21563 { branch_instruction , 0 , 0 , 32,
21564 0xfc00c000, 0x88000000, &NMD::BEQC_32_ , 0,
21565 0x0 }, /* BEQC[32] */
21566 { pool , P_BR3A , 32 , 32,
21567 0xfc00c000, 0x88004000, 0 , 0,
21568 0x0 }, /* P.BR3A */
21569 { branch_instruction , 0 , 0 , 32,
21570 0xfc00c000, 0x88008000, &NMD::BGEC , 0,
21571 0x0 }, /* BGEC */
21572 { branch_instruction , 0 , 0 , 32,
21573 0xfc00c000, 0x8800c000, &NMD::BGEUC , 0,
21574 0x0 }, /* BGEUC */
21575 };
21576
21577
21578 NMD::Pool NMD::P_BR2[4] = {
21579 { branch_instruction , 0 , 0 , 32,
21580 0xfc00c000, 0xa8000000, &NMD::BNEC_32_ , 0,
21581 0x0 }, /* BNEC[32] */
21582 { reserved_block , 0 , 0 , 32,
21583 0xfc00c000, 0xa8004000, 0 , 0,
21584 0x0 }, /* P.BR2~*(1) */
21585 { branch_instruction , 0 , 0 , 32,
21586 0xfc00c000, 0xa8008000, &NMD::BLTC , 0,
21587 0x0 }, /* BLTC */
21588 { branch_instruction , 0 , 0 , 32,
21589 0xfc00c000, 0xa800c000, &NMD::BLTUC , 0,
21590 0x0 }, /* BLTUC */
21591 };
21592
21593
21594 NMD::Pool NMD::P_BRI[8] = {
21595 { branch_instruction , 0 , 0 , 32,
21596 0xfc1c0000, 0xc8000000, &NMD::BEQIC , 0,
21597 0x0 }, /* BEQIC */
21598 { branch_instruction , 0 , 0 , 32,
21599 0xfc1c0000, 0xc8040000, &NMD::BBEQZC , 0,
21600 XMMS_ }, /* BBEQZC */
21601 { branch_instruction , 0 , 0 , 32,
21602 0xfc1c0000, 0xc8080000, &NMD::BGEIC , 0,
21603 0x0 }, /* BGEIC */
21604 { branch_instruction , 0 , 0 , 32,
21605 0xfc1c0000, 0xc80c0000, &NMD::BGEIUC , 0,
21606 0x0 }, /* BGEIUC */
21607 { branch_instruction , 0 , 0 , 32,
21608 0xfc1c0000, 0xc8100000, &NMD::BNEIC , 0,
21609 0x0 }, /* BNEIC */
21610 { branch_instruction , 0 , 0 , 32,
21611 0xfc1c0000, 0xc8140000, &NMD::BBNEZC , 0,
21612 XMMS_ }, /* BBNEZC */
21613 { branch_instruction , 0 , 0 , 32,
21614 0xfc1c0000, 0xc8180000, &NMD::BLTIC , 0,
21615 0x0 }, /* BLTIC */
21616 { branch_instruction , 0 , 0 , 32,
21617 0xfc1c0000, 0xc81c0000, &NMD::BLTIUC , 0,
21618 0x0 }, /* BLTIUC */
21619 };
21620
21621
21622 NMD::Pool NMD::P32[32] = {
21623 { pool , P_ADDIU , 2 , 32,
21624 0xfc000000, 0x00000000, 0 , 0,
21625 0x0 }, /* P.ADDIU */
21626 { pool , P32A , 8 , 32,
21627 0xfc000000, 0x20000000, 0 , 0,
21628 0x0 }, /* P32A */
21629 { pool , P_GP_W , 4 , 32,
21630 0xfc000000, 0x40000000, 0 , 0,
21631 0x0 }, /* P.GP.W */
21632 { pool , POOL48I , 32 , 48,
21633 0xfc0000000000ull, 0x600000000000ull, 0 , 0,
21634 0x0 }, /* POOL48I */
21635 { pool , P_U12 , 16 , 32,
21636 0xfc000000, 0x80000000, 0 , 0,
21637 0x0 }, /* P.U12 */
21638 { pool , POOL32F , 8 , 32,
21639 0xfc000000, 0xa0000000, 0 , 0,
21640 CP1_ }, /* POOL32F */
21641 { pool , POOL32S , 8 , 32,
21642 0xfc000000, 0xc0000000, 0 , 0,
21643 0x0 }, /* POOL32S */
21644 { pool , P_LUI , 2 , 32,
21645 0xfc000000, 0xe0000000, 0 , 0,
21646 0x0 }, /* P.LUI */
21647 { instruction , 0 , 0 , 32,
21648 0xfc000000, 0x04000000, &NMD::ADDIUPC_32_ , 0,
21649 0x0 }, /* ADDIUPC[32] */
21650 { reserved_block , 0 , 0 , 32,
21651 0xfc000000, 0x24000000, 0 , 0,
21652 0x0 }, /* P32~*(5) */
21653 { pool , P_GP_BH , 8 , 32,
21654 0xfc000000, 0x44000000, 0 , 0,
21655 0x0 }, /* P.GP.BH */
21656 { reserved_block , 0 , 0 , 32,
21657 0xfc000000, 0x64000000, 0 , 0,
21658 0x0 }, /* P32~*(13) */
21659 { pool , P_LS_U12 , 16 , 32,
21660 0xfc000000, 0x84000000, 0 , 0,
21661 0x0 }, /* P.LS.U12 */
21662 { pool , P_LS_S9 , 8 , 32,
21663 0xfc000000, 0xa4000000, 0 , 0,
21664 0x0 }, /* P.LS.S9 */
21665 { reserved_block , 0 , 0 , 32,
21666 0xfc000000, 0xc4000000, 0 , 0,
21667 0x0 }, /* P32~*(25) */
21668 { reserved_block , 0 , 0 , 32,
21669 0xfc000000, 0xe4000000, 0 , 0,
21670 0x0 }, /* P32~*(29) */
21671 { call_instruction , 0 , 0 , 32,
21672 0xfc000000, 0x08000000, &NMD::MOVE_BALC , 0,
21673 XMMS_ }, /* MOVE.BALC */
21674 { pool , P_BAL , 2 , 32,
21675 0xfc000000, 0x28000000, 0 , 0,
21676 0x0 }, /* P.BAL */
21677 { pool , P_J , 16 , 32,
21678 0xfc000000, 0x48000000, 0 , 0,
21679 0x0 }, /* P.J */
21680 { reserved_block , 0 , 0 , 32,
21681 0xfc000000, 0x68000000, 0 , 0,
21682 0x0 }, /* P32~*(14) */
21683 { pool , P_BR1 , 4 , 32,
21684 0xfc000000, 0x88000000, 0 , 0,
21685 0x0 }, /* P.BR1 */
21686 { pool , P_BR2 , 4 , 32,
21687 0xfc000000, 0xa8000000, 0 , 0,
21688 0x0 }, /* P.BR2 */
21689 { pool , P_BRI , 8 , 32,
21690 0xfc000000, 0xc8000000, 0 , 0,
21691 0x0 }, /* P.BRI */
21692 { reserved_block , 0 , 0 , 32,
21693 0xfc000000, 0xe8000000, 0 , 0,
21694 0x0 }, /* P32~*(30) */
21695 { reserved_block , 0 , 0 , 32,
21696 0xfc000000, 0x0c000000, 0 , 0,
21697 0x0 }, /* P32~*(3) */
21698 { reserved_block , 0 , 0 , 32,
21699 0xfc000000, 0x2c000000, 0 , 0,
21700 0x0 }, /* P32~*(7) */
21701 { reserved_block , 0 , 0 , 32,
21702 0xfc000000, 0x4c000000, 0 , 0,
21703 0x0 }, /* P32~*(11) */
21704 { reserved_block , 0 , 0 , 32,
21705 0xfc000000, 0x6c000000, 0 , 0,
21706 0x0 }, /* P32~*(15) */
21707 { reserved_block , 0 , 0 , 32,
21708 0xfc000000, 0x8c000000, 0 , 0,
21709 0x0 }, /* P32~*(19) */
21710 { reserved_block , 0 , 0 , 32,
21711 0xfc000000, 0xac000000, 0 , 0,
21712 0x0 }, /* P32~*(23) */
21713 { reserved_block , 0 , 0 , 32,
21714 0xfc000000, 0xcc000000, 0 , 0,
21715 0x0 }, /* P32~*(27) */
21716 { reserved_block , 0 , 0 , 32,
21717 0xfc000000, 0xec000000, 0 , 0,
21718 0x0 }, /* P32~*(31) */
21719 };
21720
21721
21722 NMD::Pool NMD::P16_SYSCALL[2] = {
21723 { instruction , 0 , 0 , 16,
21724 0xfffc , 0x1008 , &NMD::SYSCALL_16_ , 0,
21725 0x0 }, /* SYSCALL[16] */
21726 { instruction , 0 , 0 , 16,
21727 0xfffc , 0x100c , &NMD::HYPCALL_16_ , 0,
21728 CP0_ | VZ_ }, /* HYPCALL[16] */
21729 };
21730
21731
21732 NMD::Pool NMD::P16_RI[4] = {
21733 { reserved_block , 0 , 0 , 16,
21734 0xfff8 , 0x1000 , 0 , 0,
21735 0x0 }, /* P16.RI~*(0) */
21736 { pool , P16_SYSCALL , 2 , 16,
21737 0xfff8 , 0x1008 , 0 , 0,
21738 0x0 }, /* P16.SYSCALL */
21739 { instruction , 0 , 0 , 16,
21740 0xfff8 , 0x1010 , &NMD::BREAK_16_ , 0,
21741 0x0 }, /* BREAK[16] */
21742 { instruction , 0 , 0 , 16,
21743 0xfff8 , 0x1018 , &NMD::SDBBP_16_ , 0,
21744 EJTAG_ }, /* SDBBP[16] */
21745 };
21746
21747
21748 NMD::Pool NMD::P16_MV[2] = {
21749 { pool , P16_RI , 4 , 16,
21750 0xffe0 , 0x1000 , 0 , 0,
21751 0x0 }, /* P16.RI */
21752 { instruction , 0 , 0 , 16,
21753 0xfc00 , 0x1000 , &NMD::MOVE , &NMD::MOVE_cond ,
21754 0x0 }, /* MOVE */
21755 };
21756
21757
21758 NMD::Pool NMD::P16_SHIFT[2] = {
21759 { instruction , 0 , 0 , 16,
21760 0xfc08 , 0x3000 , &NMD::SLL_16_ , 0,
21761 0x0 }, /* SLL[16] */
21762 { instruction , 0 , 0 , 16,
21763 0xfc08 , 0x3008 , &NMD::SRL_16_ , 0,
21764 0x0 }, /* SRL[16] */
21765 };
21766
21767
21768 NMD::Pool NMD::POOL16C_00[4] = {
21769 { instruction , 0 , 0 , 16,
21770 0xfc0f , 0x5000 , &NMD::NOT_16_ , 0,
21771 0x0 }, /* NOT[16] */
21772 { instruction , 0 , 0 , 16,
21773 0xfc0f , 0x5004 , &NMD::XOR_16_ , 0,
21774 0x0 }, /* XOR[16] */
21775 { instruction , 0 , 0 , 16,
21776 0xfc0f , 0x5008 , &NMD::AND_16_ , 0,
21777 0x0 }, /* AND[16] */
21778 { instruction , 0 , 0 , 16,
21779 0xfc0f , 0x500c , &NMD::OR_16_ , 0,
21780 0x0 }, /* OR[16] */
21781 };
21782
21783
21784 NMD::Pool NMD::POOL16C_0[2] = {
21785 { pool , POOL16C_00 , 4 , 16,
21786 0xfc03 , 0x5000 , 0 , 0,
21787 0x0 }, /* POOL16C_00 */
21788 { reserved_block , 0 , 0 , 16,
21789 0xfc03 , 0x5002 , 0 , 0,
21790 0x0 }, /* POOL16C_0~*(1) */
21791 };
21792
21793
21794 NMD::Pool NMD::P16C[2] = {
21795 { pool , POOL16C_0 , 2 , 16,
21796 0xfc01 , 0x5000 , 0 , 0,
21797 0x0 }, /* POOL16C_0 */
21798 { instruction , 0 , 0 , 16,
21799 0xfc01 , 0x5001 , &NMD::LWXS_16_ , 0,
21800 0x0 }, /* LWXS[16] */
21801 };
21802
21803
21804 NMD::Pool NMD::P16_A1[2] = {
21805 { reserved_block , 0 , 0 , 16,
21806 0xfc40 , 0x7000 , 0 , 0,
21807 0x0 }, /* P16.A1~*(0) */
21808 { instruction , 0 , 0 , 16,
21809 0xfc40 , 0x7040 , &NMD::ADDIU_R1_SP_ , 0,
21810 0x0 }, /* ADDIU[R1.SP] */
21811 };
21812
21813
21814 NMD::Pool NMD::P_ADDIU_RS5_[2] = {
21815 { instruction , 0 , 0 , 16,
21816 0xffe8 , 0x9008 , &NMD::NOP_16_ , 0,
21817 0x0 }, /* NOP[16] */
21818 { instruction , 0 , 0 , 16,
21819 0xfc08 , 0x9008 , &NMD::ADDIU_RS5_ , &NMD::ADDIU_RS5__cond ,
21820 0x0 }, /* ADDIU[RS5] */
21821 };
21822
21823
21824 NMD::Pool NMD::P16_A2[2] = {
21825 { instruction , 0 , 0 , 16,
21826 0xfc08 , 0x9000 , &NMD::ADDIU_R2_ , 0,
21827 0x0 }, /* ADDIU[R2] */
21828 { pool , P_ADDIU_RS5_ , 2 , 16,
21829 0xfc08 , 0x9008 , 0 , 0,
21830 0x0 }, /* P.ADDIU[RS5] */
21831 };
21832
21833
21834 NMD::Pool NMD::P16_ADDU[2] = {
21835 { instruction , 0 , 0 , 16,
21836 0xfc01 , 0xb000 , &NMD::ADDU_16_ , 0,
21837 0x0 }, /* ADDU[16] */
21838 { instruction , 0 , 0 , 16,
21839 0xfc01 , 0xb001 , &NMD::SUBU_16_ , 0,
21840 0x0 }, /* SUBU[16] */
21841 };
21842
21843
21844 NMD::Pool NMD::P16_JRC[2] = {
21845 { branch_instruction , 0 , 0 , 16,
21846 0xfc1f , 0xd800 , &NMD::JRC , 0,
21847 0x0 }, /* JRC */
21848 { call_instruction , 0 , 0 , 16,
21849 0xfc1f , 0xd810 , &NMD::JALRC_16_ , 0,
21850 0x0 }, /* JALRC[16] */
21851 };
21852
21853
21854 NMD::Pool NMD::P16_BR1[2] = {
21855 { branch_instruction , 0 , 0 , 16,
21856 0xfc00 , 0xd800 , &NMD::BEQC_16_ , &NMD::BEQC_16__cond ,
21857 XMMS_ }, /* BEQC[16] */
21858 { branch_instruction , 0 , 0 , 16,
21859 0xfc00 , 0xd800 , &NMD::BNEC_16_ , &NMD::BNEC_16__cond ,
21860 XMMS_ }, /* BNEC[16] */
21861 };
21862
21863
21864 NMD::Pool NMD::P16_BR[2] = {
21865 { pool , P16_JRC , 2 , 16,
21866 0xfc0f , 0xd800 , 0 , 0,
21867 0x0 }, /* P16.JRC */
21868 { pool , P16_BR1 , 2 , 16,
21869 0xfc00 , 0xd800 , 0 , &NMD::P16_BR1_cond ,
21870 0x0 }, /* P16.BR1 */
21871 };
21872
21873
21874 NMD::Pool NMD::P16_SR[2] = {
21875 { instruction , 0 , 0 , 16,
21876 0xfd00 , 0x1c00 , &NMD::SAVE_16_ , 0,
21877 0x0 }, /* SAVE[16] */
21878 { return_instruction , 0 , 0 , 16,
21879 0xfd00 , 0x1d00 , &NMD::RESTORE_JRC_16_ , 0,
21880 0x0 }, /* RESTORE.JRC[16] */
21881 };
21882
21883
21884 NMD::Pool NMD::P16_4X4[4] = {
21885 { instruction , 0 , 0 , 16,
21886 0xfd08 , 0x3c00 , &NMD::ADDU_4X4_ , 0,
21887 XMMS_ }, /* ADDU[4X4] */
21888 { instruction , 0 , 0 , 16,
21889 0xfd08 , 0x3c08 , &NMD::MUL_4X4_ , 0,
21890 XMMS_ }, /* MUL[4X4] */
21891 { reserved_block , 0 , 0 , 16,
21892 0xfd08 , 0x3d00 , 0 , 0,
21893 0x0 }, /* P16.4X4~*(2) */
21894 { reserved_block , 0 , 0 , 16,
21895 0xfd08 , 0x3d08 , 0 , 0,
21896 0x0 }, /* P16.4X4~*(3) */
21897 };
21898
21899
21900 NMD::Pool NMD::P16_LB[4] = {
21901 { instruction , 0 , 0 , 16,
21902 0xfc0c , 0x5c00 , &NMD::LB_16_ , 0,
21903 0x0 }, /* LB[16] */
21904 { instruction , 0 , 0 , 16,
21905 0xfc0c , 0x5c04 , &NMD::SB_16_ , 0,
21906 0x0 }, /* SB[16] */
21907 { instruction , 0 , 0 , 16,
21908 0xfc0c , 0x5c08 , &NMD::LBU_16_ , 0,
21909 0x0 }, /* LBU[16] */
21910 { reserved_block , 0 , 0 , 16,
21911 0xfc0c , 0x5c0c , 0 , 0,
21912 0x0 }, /* P16.LB~*(3) */
21913 };
21914
21915
21916 NMD::Pool NMD::P16_LH[4] = {
21917 { instruction , 0 , 0 , 16,
21918 0xfc09 , 0x7c00 , &NMD::LH_16_ , 0,
21919 0x0 }, /* LH[16] */
21920 { instruction , 0 , 0 , 16,
21921 0xfc09 , 0x7c01 , &NMD::SH_16_ , 0,
21922 0x0 }, /* SH[16] */
21923 { instruction , 0 , 0 , 16,
21924 0xfc09 , 0x7c08 , &NMD::LHU_16_ , 0,
21925 0x0 }, /* LHU[16] */
21926 { reserved_block , 0 , 0 , 16,
21927 0xfc09 , 0x7c09 , 0 , 0,
21928 0x0 }, /* P16.LH~*(3) */
21929 };
21930
21931
21932 NMD::Pool NMD::P16[32] = {
21933 { pool , P16_MV , 2 , 16,
21934 0xfc00 , 0x1000 , 0 , 0,
21935 0x0 }, /* P16.MV */
21936 { pool , P16_SHIFT , 2 , 16,
21937 0xfc00 , 0x3000 , 0 , 0,
21938 0x0 }, /* P16.SHIFT */
21939 { pool , P16C , 2 , 16,
21940 0xfc00 , 0x5000 , 0 , 0,
21941 0x0 }, /* P16C */
21942 { pool , P16_A1 , 2 , 16,
21943 0xfc00 , 0x7000 , 0 , 0,
21944 0x0 }, /* P16.A1 */
21945 { pool , P16_A2 , 2 , 16,
21946 0xfc00 , 0x9000 , 0 , 0,
21947 0x0 }, /* P16.A2 */
21948 { pool , P16_ADDU , 2 , 16,
21949 0xfc00 , 0xb000 , 0 , 0,
21950 0x0 }, /* P16.ADDU */
21951 { instruction , 0 , 0 , 16,
21952 0xfc00 , 0xd000 , &NMD::LI_16_ , 0,
21953 0x0 }, /* LI[16] */
21954 { instruction , 0 , 0 , 16,
21955 0xfc00 , 0xf000 , &NMD::ANDI_16_ , 0,
21956 0x0 }, /* ANDI[16] */
21957 { instruction , 0 , 0 , 16,
21958 0xfc00 , 0x1400 , &NMD::LW_16_ , 0,
21959 0x0 }, /* LW[16] */
21960 { instruction , 0 , 0 , 16,
21961 0xfc00 , 0x3400 , &NMD::LW_SP_ , 0,
21962 0x0 }, /* LW[SP] */
21963 { instruction , 0 , 0 , 16,
21964 0xfc00 , 0x5400 , &NMD::LW_GP16_ , 0,
21965 0x0 }, /* LW[GP16] */
21966 { instruction , 0 , 0 , 16,
21967 0xfc00 , 0x7400 , &NMD::LW_4X4_ , 0,
21968 XMMS_ }, /* LW[4X4] */
21969 { instruction , 0 , 0 , 16,
21970 0xfc00 , 0x9400 , &NMD::SW_16_ , 0,
21971 0x0 }, /* SW[16] */
21972 { instruction , 0 , 0 , 16,
21973 0xfc00 , 0xb400 , &NMD::SW_SP_ , 0,
21974 0x0 }, /* SW[SP] */
21975 { instruction , 0 , 0 , 16,
21976 0xfc00 , 0xd400 , &NMD::SW_GP16_ , 0,
21977 0x0 }, /* SW[GP16] */
21978 { instruction , 0 , 0 , 16,
21979 0xfc00 , 0xf400 , &NMD::SW_4X4_ , 0,
21980 XMMS_ }, /* SW[4X4] */
21981 { branch_instruction , 0 , 0 , 16,
21982 0xfc00 , 0x1800 , &NMD::BC_16_ , 0,
21983 0x0 }, /* BC[16] */
21984 { call_instruction , 0 , 0 , 16,
21985 0xfc00 , 0x3800 , &NMD::BALC_16_ , 0,
21986 0x0 }, /* BALC[16] */
21987 { reserved_block , 0 , 0 , 16,
21988 0xfc00 , 0x5800 , 0 , 0,
21989 0x0 }, /* P16~*(10) */
21990 { reserved_block , 0 , 0 , 16,
21991 0xfc00 , 0x7800 , 0 , 0,
21992 0x0 }, /* P16~*(14) */
21993 { branch_instruction , 0 , 0 , 16,
21994 0xfc00 , 0x9800 , &NMD::BEQZC_16_ , 0,
21995 0x0 }, /* BEQZC[16] */
21996 { branch_instruction , 0 , 0 , 16,
21997 0xfc00 , 0xb800 , &NMD::BNEZC_16_ , 0,
21998 0x0 }, /* BNEZC[16] */
21999 { pool , P16_BR , 2 , 16,
22000 0xfc00 , 0xd800 , 0 , 0,
22001 0x0 }, /* P16.BR */
22002 { reserved_block , 0 , 0 , 16,
22003 0xfc00 , 0xf800 , 0 , 0,
22004 0x0 }, /* P16~*(30) */
22005 { pool , P16_SR , 2 , 16,
22006 0xfc00 , 0x1c00 , 0 , 0,
22007 0x0 }, /* P16.SR */
22008 { pool , P16_4X4 , 4 , 16,
22009 0xfc00 , 0x3c00 , 0 , 0,
22010 0x0 }, /* P16.4X4 */
22011 { pool , P16_LB , 4 , 16,
22012 0xfc00 , 0x5c00 , 0 , 0,
22013 0x0 }, /* P16.LB */
22014 { pool , P16_LH , 4 , 16,
22015 0xfc00 , 0x7c00 , 0 , 0,
22016 0x0 }, /* P16.LH */
22017 { reserved_block , 0 , 0 , 16,
22018 0xfc00 , 0x9c00 , 0 , 0,
22019 0x0 }, /* P16~*(19) */
22020 { instruction , 0 , 0 , 16,
22021 0xfc00 , 0xbc00 , &NMD::MOVEP , 0,
22022 XMMS_ }, /* MOVEP */
22023 { reserved_block , 0 , 0 , 16,
22024 0xfc00 , 0xdc00 , 0 , 0,
22025 0x0 }, /* P16~*(27) */
22026 { instruction , 0 , 0 , 16,
22027 0xfc00 , 0xfc00 , &NMD::MOVEP_REV_ , 0,
22028 XMMS_ }, /* MOVEP[REV] */
22029 };
22030
22031
22032 NMD::Pool NMD::MAJOR[2] = {
22033 { pool , P32 , 32 , 32,
22034 0x10000000, 0x00000000, 0 , 0,
22035 0x0 }, /* P32 */
22036 { pool , P16 , 32 , 16,
22037 0x1000 , 0x1000 , 0 , 0,
22038 0x0 }, /* P16 */
22039 };